From 9af01f5fadbc49ed6eb9f6e0d4ff7694e8cb5b15 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 16 Jan 2020 17:00:11 -0500 Subject: [PATCH 01/22] Move some symbols out of sym_ewram.txt --- src/battle_ai_script_commands.c | 508 ++++++++++++++++---------------- src/fldeff_rocksmash.c | 2 + sym_ewram.txt | 10 +- 3 files changed, 259 insertions(+), 261 deletions(-) diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index f98922c28..d988fd7b4 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -34,14 +34,14 @@ enum }; /* -gAIScriptPtr is a pointer to the next battle AI cmd command to read. -when a command finishes processing, gAIScriptPtr is incremented by +sAIScriptPtr is a pointer to the next battle AI cmd command to read. +when a command finishes processing, sAIScriptPtr 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. */ -extern const u8 *gAIScriptPtr; +static EWRAM_DATA const u8 *sAIScriptPtr = NULL; extern u8 *gBattleAI_ScriptsTable[]; static void BattleAICmd_if_random_less_than(void); @@ -419,7 +419,7 @@ static void BattleAI_DoAIProcessing(void) case AIState_DoNotProcess: //Needed to match. break; case AIState_SettingUp: - gAIScriptPtr = gBattleAI_ScriptsTable[AI_THINKING_STRUCT->aiLogicId]; // set the AI ptr. + sAIScriptPtr = gBattleAI_ScriptsTable[AI_THINKING_STRUCT->aiLogicId]; // set the AI ptr. if (gBattleMons[gBattlerAttacker].pp[AI_THINKING_STRUCT->movesetIndex] == 0) { AI_THINKING_STRUCT->moveConsidered = 0; // don't consider a move you have 0 PP for, idiot. @@ -432,7 +432,7 @@ static void BattleAI_DoAIProcessing(void) break; case AIState_Processing: if (AI_THINKING_STRUCT->moveConsidered != 0) - sBattleAICmdTable[*gAIScriptPtr](); // run AI command. + sBattleAICmdTable[*sAIScriptPtr](); // run AI command. else { AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] = 0; // definitely do not consider any move that has 0 PP. @@ -490,44 +490,44 @@ void RecordItemEffectBattle(u8 battlerId, u8 itemEffect) static void BattleAICmd_if_random_less_than(void) { - if (Random() % 256 < gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (Random() % 256 < sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_random_greater_than(void) { - if (Random() % 256 > gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (Random() % 256 > sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_random_equal(void) { - if (Random() % 256 == gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (Random() % 256 == sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_random_not_equal(void) { - if (Random() % 256 != gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (Random() % 256 != sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_score(void) { - AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] += gAIScriptPtr[1]; // add the result to the array of the move consider's score. + AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] += sAIScriptPtr[1]; // add the result to the array of the move consider's score. if (AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] < 0) // if the score is negative, flatten it to 0. AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] = 0; - gAIScriptPtr += 2; // AI return. + sAIScriptPtr += 2; // AI return. } enum { @@ -539,60 +539,60 @@ static void BattleAICmd_if_hp_less_than(void) { u16 index; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) < gAIScriptPtr[2]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) < sAIScriptPtr[2]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); else - gAIScriptPtr += 7; + sAIScriptPtr += 7; } static void BattleAICmd_if_hp_more_than(void) { u16 index; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) > gAIScriptPtr[2]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) > sAIScriptPtr[2]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); else - gAIScriptPtr += 7; + sAIScriptPtr += 7; } static void BattleAICmd_if_hp_equal(void) { u16 index; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) == gAIScriptPtr[2]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) == sAIScriptPtr[2]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); else - gAIScriptPtr += 7; + sAIScriptPtr += 7; } static void BattleAICmd_if_hp_not_equal(void) { u16 index; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) != gAIScriptPtr[2]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + if ((u32)(100 * gBattleMons[index].hp / gBattleMons[index].maxHP) != sAIScriptPtr[2]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); else - gAIScriptPtr += 7; + sAIScriptPtr += 7; } static void BattleAICmd_if_status(void) @@ -600,17 +600,17 @@ static void BattleAICmd_if_status(void) u16 index; u32 arg; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - arg = T1_READ_32(gAIScriptPtr + 2); + arg = T1_READ_32(sAIScriptPtr + 2); if ((gBattleMons[index].status1 & arg) != 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else - gAIScriptPtr += 10; + sAIScriptPtr += 10; } static void BattleAICmd_if_not_status(void) @@ -618,17 +618,17 @@ static void BattleAICmd_if_not_status(void) u16 index; u32 arg; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - arg = T1_READ_32(gAIScriptPtr + 2); + arg = T1_READ_32(sAIScriptPtr + 2); if ((gBattleMons[index].status1 & arg) == 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else - gAIScriptPtr += 10; + sAIScriptPtr += 10; } static void BattleAICmd_if_status2(void) @@ -636,17 +636,17 @@ static void BattleAICmd_if_status2(void) u16 index; u32 arg; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - arg = T1_READ_32(gAIScriptPtr + 2); + arg = T1_READ_32(sAIScriptPtr + 2); if ((gBattleMons[index].status2 & arg) != 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else - gAIScriptPtr += 10; + sAIScriptPtr += 10; } static void BattleAICmd_if_not_status2(void) @@ -654,17 +654,17 @@ static void BattleAICmd_if_not_status2(void) u16 index; u32 arg; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - arg = T1_READ_32(gAIScriptPtr + 2); + arg = T1_READ_32(sAIScriptPtr + 2); if ((gBattleMons[index].status2 & arg) == 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else - gAIScriptPtr += 10; + sAIScriptPtr += 10; } static void BattleAICmd_if_status3(void) @@ -672,17 +672,17 @@ static void BattleAICmd_if_status3(void) u16 index; u32 arg; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - arg = T1_READ_32(gAIScriptPtr + 2); + arg = T1_READ_32(sAIScriptPtr + 2); if ((gStatuses3[index] & arg) != 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else - gAIScriptPtr += 10; + sAIScriptPtr += 10; } static void BattleAICmd_if_not_status3(void) @@ -690,17 +690,17 @@ static void BattleAICmd_if_not_status3(void) u16 index; u32 arg; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - arg = T1_READ_32(gAIScriptPtr + 2); + arg = T1_READ_32(sAIScriptPtr + 2); if ((gStatuses3[index] & arg) == 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else - gAIScriptPtr += 10; + sAIScriptPtr += 10; } static void BattleAICmd_if_status4(void) @@ -708,18 +708,18 @@ static void BattleAICmd_if_status4(void) u16 index; u32 arg1, arg2; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; arg1 = GetBattlerPosition(index) & 1; - arg2 = T1_READ_32(gAIScriptPtr + 2); + arg2 = T1_READ_32(sAIScriptPtr + 2); if ((gSideStatuses[arg1] & arg2) != 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else - gAIScriptPtr += 10; + sAIScriptPtr += 10; } static void BattleAICmd_if_not_status4(void) @@ -727,174 +727,174 @@ static void BattleAICmd_if_not_status4(void) u16 index; u32 arg1, arg2; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; arg1 = GetBattlerPosition(index) & 1; - arg2 = T1_READ_32(gAIScriptPtr + 2); + arg2 = T1_READ_32(sAIScriptPtr + 2); if ((gSideStatuses[arg1] & arg2) == 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); else - gAIScriptPtr += 10; + sAIScriptPtr += 10; } static void BattleAICmd_if_less_than(void) { - if (AI_THINKING_STRUCT->funcResult < gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (AI_THINKING_STRUCT->funcResult < sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_more_than(void) { - if (AI_THINKING_STRUCT->funcResult > gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (AI_THINKING_STRUCT->funcResult > sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_equal(void) { - if (AI_THINKING_STRUCT->funcResult == gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (AI_THINKING_STRUCT->funcResult == sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_not_equal(void) { - if (AI_THINKING_STRUCT->funcResult != gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (AI_THINKING_STRUCT->funcResult != sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_less_than_32(void) { - u8 *temp = T1_READ_PTR(gAIScriptPtr + 1); + u8 *temp = T1_READ_PTR(sAIScriptPtr + 1); if (AI_THINKING_STRUCT->funcResult < *temp) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); else - gAIScriptPtr += 9; + sAIScriptPtr += 9; } static void BattleAICmd_if_more_than_32(void) { - u8 *temp = T1_READ_PTR(gAIScriptPtr + 1); + u8 *temp = T1_READ_PTR(sAIScriptPtr + 1); if (AI_THINKING_STRUCT->funcResult > *temp) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); else - gAIScriptPtr += 9; + sAIScriptPtr += 9; } static void BattleAICmd_if_equal_32(void) { - u8 *temp = T1_READ_PTR(gAIScriptPtr + 1); + u8 *temp = T1_READ_PTR(sAIScriptPtr + 1); if (AI_THINKING_STRUCT->funcResult == *temp) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); else - gAIScriptPtr += 9; + sAIScriptPtr += 9; } static void BattleAICmd_if_not_equal_32(void) { - u8 *temp = T1_READ_PTR(gAIScriptPtr + 1); + u8 *temp = T1_READ_PTR(sAIScriptPtr + 1); if (AI_THINKING_STRUCT->funcResult != *temp) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); else - gAIScriptPtr += 9; + sAIScriptPtr += 9; } static void BattleAICmd_if_move(void) { - u16 move = T1_READ_16(gAIScriptPtr + 1); + u16 move = T1_READ_16(sAIScriptPtr + 1); if (AI_THINKING_STRUCT->moveConsidered == move) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); else - gAIScriptPtr += 7; + sAIScriptPtr += 7; } static void BattleAICmd_if_not_move(void) { - u16 move = T1_READ_16(gAIScriptPtr + 1); + u16 move = T1_READ_16(sAIScriptPtr + 1); if (AI_THINKING_STRUCT->moveConsidered != move) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); else - gAIScriptPtr += 7; + sAIScriptPtr += 7; } static void BattleAICmd_if_in_bytes(void) { - u8 *ptr = T1_READ_PTR(gAIScriptPtr + 1); + u8 *ptr = T1_READ_PTR(sAIScriptPtr + 1); while (*ptr != 0xFF) { if (AI_THINKING_STRUCT->funcResult == *ptr) { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); return; } ptr++; } - gAIScriptPtr += 9; + sAIScriptPtr += 9; } static void BattleAICmd_if_not_in_bytes(void) { - u8 *ptr = T1_READ_PTR(gAIScriptPtr + 1); + u8 *ptr = T1_READ_PTR(sAIScriptPtr + 1); while (*ptr != 0xFF) { if (AI_THINKING_STRUCT->funcResult == *ptr) { - gAIScriptPtr += 9; + sAIScriptPtr += 9; return; } ptr++; } - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); } static void BattleAICmd_if_in_words(void) { - u16 *ptr = (u16 *)T1_READ_PTR(gAIScriptPtr + 1); + u16 *ptr = (u16 *)T1_READ_PTR(sAIScriptPtr + 1); while (*ptr != 0xFFFF) { if (AI_THINKING_STRUCT->funcResult == *ptr) { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); return; } ptr++; } - gAIScriptPtr += 9; + sAIScriptPtr += 9; } static void BattleAICmd_if_not_in_words(void) { - u16 *ptr = (u16 *)T1_READ_PTR(gAIScriptPtr + 1); + u16 *ptr = (u16 *)T1_READ_PTR(sAIScriptPtr + 1); while (*ptr != 0xFFFF) { if (AI_THINKING_STRUCT->funcResult == *ptr) { - gAIScriptPtr += 9; + sAIScriptPtr += 9; return; } ptr++; } - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 5); } static void BattleAICmd_if_user_can_damage(void) @@ -908,9 +908,9 @@ static void BattleAICmd_if_user_can_damage(void) break; } if (i == MAX_MON_MOVES) - gAIScriptPtr += 5; + sAIScriptPtr += 5; else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); } static void BattleAICmd_if_user_cant_damage(void) @@ -924,20 +924,20 @@ static void BattleAICmd_if_user_cant_damage(void) break; } if (i != MAX_MON_MOVES) - gAIScriptPtr += 5; + sAIScriptPtr += 5; else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); } static void BattleAICmd_get_turn_count(void) { AI_THINKING_STRUCT->funcResult = gBattleResults.battleTurnCounter; - gAIScriptPtr += 1; + sAIScriptPtr += 1; } static void BattleAICmd_get_type(void) { - switch (gAIScriptPtr[1]) + switch (sAIScriptPtr[1]) { case 1: // player primary type AI_THINKING_STRUCT->funcResult = gBattleMons[gBattlerAttacker].type1; @@ -955,13 +955,13 @@ static void BattleAICmd_get_type(void) AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].type; break; } - gAIScriptPtr += 2; + sAIScriptPtr += 2; } static void BattleAICmd_get_move_power(void) { AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power; - gAIScriptPtr += 1; + sAIScriptPtr += 1; } static void BattleAICmd_is_most_powerful_move(void) @@ -1025,49 +1025,49 @@ static void BattleAICmd_is_most_powerful_move(void) AI_THINKING_STRUCT->funcResult = MOVE_POWER_DISCOURAGED; // Highly discouraged in terms of power. } - gAIScriptPtr++; + sAIScriptPtr++; } static void BattleAICmd_get_move(void) { - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) AI_THINKING_STRUCT->funcResult = gLastMoves[gBattlerAttacker]; else AI_THINKING_STRUCT->funcResult = gLastMoves[gBattlerTarget]; - gAIScriptPtr += 2; + sAIScriptPtr += 2; } static void BattleAICmd_if_arg_equal(void) { - if (gAIScriptPtr[1] == AI_THINKING_STRUCT->funcResult) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (sAIScriptPtr[1] == AI_THINKING_STRUCT->funcResult) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_arg_not_equal(void) { - if (gAIScriptPtr[1] != AI_THINKING_STRUCT->funcResult) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (sAIScriptPtr[1] != AI_THINKING_STRUCT->funcResult) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_would_go_first(void) { - if (GetWhoStrikesFirst(gBattlerAttacker, gBattlerTarget, TRUE) == gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (GetWhoStrikesFirst(gBattlerAttacker, gBattlerTarget, TRUE) == sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_would_not_go_first(void) { - if (GetWhoStrikesFirst(gBattlerAttacker, gBattlerTarget, TRUE) != gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (GetWhoStrikesFirst(gBattlerAttacker, gBattlerTarget, TRUE) != sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_nullsub_2A(void) @@ -1087,7 +1087,7 @@ static void BattleAICmd_count_alive_pokemon(void) AI_THINKING_STRUCT->funcResult = 0; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; @@ -1121,26 +1121,26 @@ static void BattleAICmd_count_alive_pokemon(void) } } - gAIScriptPtr += 2; + sAIScriptPtr += 2; } static void BattleAICmd_get_considered_move(void) { AI_THINKING_STRUCT->funcResult = AI_THINKING_STRUCT->moveConsidered; - gAIScriptPtr += 1; + sAIScriptPtr += 1; } static void BattleAICmd_get_considered_move_effect(void) { AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect; - gAIScriptPtr += 1; + sAIScriptPtr += 1; } static void BattleAICmd_get_ability(void) { u8 index; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; @@ -1152,7 +1152,7 @@ static void BattleAICmd_get_ability(void) if (BATTLE_HISTORY->abilities[side] != 0) { AI_THINKING_STRUCT->funcResult = BATTLE_HISTORY->abilities[side]; - gAIScriptPtr += 2; + sAIScriptPtr += 2; return; } @@ -1162,7 +1162,7 @@ static void BattleAICmd_get_ability(void) || gBattleMons[index].ability == ABILITY_ARENA_TRAP) { AI_THINKING_STRUCT->funcResult = gBattleMons[index].ability; - gAIScriptPtr += 2; + sAIScriptPtr += 2; return; } @@ -1195,7 +1195,7 @@ static void BattleAICmd_get_ability(void) // The AI knows its own ability. AI_THINKING_STRUCT->funcResult = gBattleMons[index].ability; } - gAIScriptPtr += 2; + sAIScriptPtr += 2; } static void BattleAICmd_get_highest_possible_damage(void) @@ -1237,7 +1237,7 @@ static void BattleAICmd_get_highest_possible_damage(void) } } - gAIScriptPtr += 1; + sAIScriptPtr += 1; } static void BattleAICmd_if_type_effectiveness(void) @@ -1267,13 +1267,13 @@ static void BattleAICmd_if_type_effectiveness(void) if (gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE) gBattleMoveDamage = AI_EFFECTIVENESS_x0; - // Store gBattleMoveDamage in a u8 variable because gAIScriptPtr[1] is a u8. + // Store gBattleMoveDamage in a u8 variable because sAIScriptPtr[1] is a u8. damageVar = gBattleMoveDamage; - if (damageVar == gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (damageVar == sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_nullsub_32(void) @@ -1292,7 +1292,7 @@ static void BattleAICmd_if_status_in_party(void) u32 statusToCompareTo; // for whatever reason, game freak put the party pointer into 2 variables instead of 1. it's possible at some point the switch encompassed the whole function and used each respective variable creating largely duplicate code. - switch (gAIScriptPtr[1]) + switch (sAIScriptPtr[1]) { case 1: party = partyPtr = gEnemyParty; @@ -1302,7 +1302,7 @@ static void BattleAICmd_if_status_in_party(void) break; } - statusToCompareTo = T1_READ_32(gAIScriptPtr + 2); + statusToCompareTo = T1_READ_32(sAIScriptPtr + 2); for (i = 0; i < 6; i++) { @@ -1312,12 +1312,12 @@ static void BattleAICmd_if_status_in_party(void) if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo) { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); // WHAT. why is this being merged into the above switch + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); // WHAT. why is this being merged into the above switch return; } } - gAIScriptPtr += 10; + sAIScriptPtr += 10; } // bugged, doesnt return properly. also unused @@ -1328,7 +1328,7 @@ static void BattleAICmd_if_status_not_in_party(void) int i; u32 statusToCompareTo; - switch (gAIScriptPtr[1]) + switch (sAIScriptPtr[1]) { case 1: party = partyPtr = gEnemyParty; @@ -1338,7 +1338,7 @@ static void BattleAICmd_if_status_not_in_party(void) break; } - statusToCompareTo = T1_READ_32(gAIScriptPtr + 2); + statusToCompareTo = T1_READ_32(sAIScriptPtr + 2); for (i = 0; i < 6; i++) { @@ -1348,9 +1348,9 @@ static void BattleAICmd_if_status_not_in_party(void) // everytime the status is found, the AI's logic jumps further and further past its intended destination. this results in a broken AI macro and is probably why it is unused. if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo) - gAIScriptPtr += 10; // doesnt return? + sAIScriptPtr += 10; // doesnt return? } - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 6); } enum @@ -1374,90 +1374,90 @@ static void BattleAICmd_get_weather(void) if (gBattleWeather & WEATHER_HAIL) AI_THINKING_STRUCT->funcResult = WEATHER_TYPE_HAIL; - gAIScriptPtr += 1; + sAIScriptPtr += 1; } static void BattleAICmd_if_effect(void) { - if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_not_effect(void) { - if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect != gAIScriptPtr[1]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect != sAIScriptPtr[1]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); else - gAIScriptPtr += 6; + sAIScriptPtr += 6; } static void BattleAICmd_if_stat_level_less_than(void) { u32 party; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) party = gBattlerAttacker; else party = gBattlerTarget; - if (gBattleMons[party].statStages[gAIScriptPtr[2]] < gAIScriptPtr[3]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); + if (gBattleMons[party].statStages[sAIScriptPtr[2]] < sAIScriptPtr[3]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); else - gAIScriptPtr += 8; + sAIScriptPtr += 8; } static void BattleAICmd_if_stat_level_more_than(void) { u32 party; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) party = gBattlerAttacker; else party = gBattlerTarget; - if (gBattleMons[party].statStages[gAIScriptPtr[2]] > gAIScriptPtr[3]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); + if (gBattleMons[party].statStages[sAIScriptPtr[2]] > sAIScriptPtr[3]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); else - gAIScriptPtr += 8; + sAIScriptPtr += 8; } static void BattleAICmd_if_stat_level_equal(void) { u32 party; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) party = gBattlerAttacker; else party = gBattlerTarget; - if (gBattleMons[party].statStages[gAIScriptPtr[2]] == gAIScriptPtr[3]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); + if (gBattleMons[party].statStages[sAIScriptPtr[2]] == sAIScriptPtr[3]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); else - gAIScriptPtr += 8; + sAIScriptPtr += 8; } static void BattleAICmd_if_stat_level_not_equal(void) { u32 party; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) party = gBattlerAttacker; else party = gBattlerTarget; - if (gBattleMons[party].statStages[gAIScriptPtr[2]] != gAIScriptPtr[3]) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); + if (gBattleMons[party].statStages[sAIScriptPtr[2]] != sAIScriptPtr[3]) + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); else - gAIScriptPtr += 8; + sAIScriptPtr += 8; } static void BattleAICmd_if_can_faint(void) { if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power < 2) { - gAIScriptPtr += 5; + sAIScriptPtr += 5; return; } @@ -1477,16 +1477,16 @@ static void BattleAICmd_if_can_faint(void) gBattleMoveDamage = 1; if (gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); else - gAIScriptPtr += 5; + sAIScriptPtr += 5; } static void BattleAICmd_if_cant_faint(void) { if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power < 2) { - gAIScriptPtr += 5; + sAIScriptPtr += 5; return; } @@ -1504,17 +1504,17 @@ static void BattleAICmd_if_cant_faint(void) // This macro is missing the damage 0 = 1 assumption. if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); else - gAIScriptPtr += 5; + sAIScriptPtr += 5; } static void BattleAICmd_if_has_move(void) { int i; - u16 *temp_ptr = (u16 *)(gAIScriptPtr + 2); + u16 *temp_ptr = (u16 *)(sAIScriptPtr + 2); - switch (gAIScriptPtr[1]) + switch (sAIScriptPtr[1]) { case 1: case 3: @@ -1524,9 +1524,9 @@ static void BattleAICmd_if_has_move(void) break; } if (i == MAX_MON_MOVES) - gAIScriptPtr += 8; + sAIScriptPtr += 8; else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); break; case 0: case 2: @@ -1536,9 +1536,9 @@ static void BattleAICmd_if_has_move(void) break; } if (i == 8) - gAIScriptPtr += 8; + sAIScriptPtr += 8; else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); break; } } @@ -1546,9 +1546,9 @@ static void BattleAICmd_if_has_move(void) static void BattleAICmd_if_dont_have_move(void) { int i; - u16 *temp_ptr = (u16 *)(gAIScriptPtr + 2); + u16 *temp_ptr = (u16 *)(sAIScriptPtr + 2); - switch (gAIScriptPtr[1]) + switch (sAIScriptPtr[1]) { case 1: case 3: @@ -1558,9 +1558,9 @@ static void BattleAICmd_if_dont_have_move(void) break; } if (i != MAX_MON_MOVES) - gAIScriptPtr += 8; + sAIScriptPtr += 8; else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); break; case 0: case 2: @@ -1570,9 +1570,9 @@ static void BattleAICmd_if_dont_have_move(void) break; } if (i != 8) - gAIScriptPtr += 8; + sAIScriptPtr += 8; else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 4); break; } } @@ -1581,28 +1581,28 @@ static void BattleAICmd_if_move_effect(void) { int i; - switch (gAIScriptPtr[1]) + switch (sAIScriptPtr[1]) { case 1: case 3: for (i = 0; i < MAX_MON_MOVES; i++) { - if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].effect == gAIScriptPtr[2]) + if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].effect == sAIScriptPtr[2]) break; } if (i != MAX_MON_MOVES) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); else - gAIScriptPtr += 7; + sAIScriptPtr += 7; break; case 0: case 2: for (i = 0; i < 8; i++) { - if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i]].effect == gAIScriptPtr[2]) + if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i]].effect == sAIScriptPtr[2]) break; } - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); } } @@ -1610,28 +1610,28 @@ static void BattleAICmd_if_not_move_effect(void) { int i; - switch (gAIScriptPtr[1]) + switch (sAIScriptPtr[1]) { case 1: case 3: for (i = 0; i < MAX_MON_MOVES; i++) { - if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].effect == gAIScriptPtr[2]) + if (gBattleMons[gBattlerAttacker].moves[i] != 0 && gBattleMoves[gBattleMons[gBattlerAttacker].moves[i]].effect == sAIScriptPtr[2]) break; } if (i != MAX_MON_MOVES) - gAIScriptPtr += 7; + sAIScriptPtr += 7; else - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); break; case 0: case 2: for (i = 0; i < 8; i++) { - if (BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i] != 0 && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i]].effect == gAIScriptPtr[2]) + if (BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i] != 0 && gBattleMoves[BATTLE_HISTORY->usedMoves[gBattlerTarget >> 1][i]].effect == sAIScriptPtr[2]) break; } - gAIScriptPtr += 7; + sAIScriptPtr += 7; } } @@ -1639,56 +1639,56 @@ static void BattleAICmd_if_last_move_did_damage(void) { u8 index; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; - if (gAIScriptPtr[2] == 0) + if (sAIScriptPtr[2] == 0) { if (gDisableStructs[index].disabledMove == MOVE_NONE) { - gAIScriptPtr += 7; + sAIScriptPtr += 7; return; } - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); return; } - else if (gAIScriptPtr[2] != 1) // ignore the macro if its not 0 or 1. + else if (sAIScriptPtr[2] != 1) // ignore the macro if its not 0 or 1. { - gAIScriptPtr += 7; + sAIScriptPtr += 7; return; } else if (gDisableStructs[index].encoredMove != MOVE_NONE) { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 3); return; } - gAIScriptPtr += 7; + sAIScriptPtr += 7; } static void BattleAICmd_if_encored(void) { - switch (gAIScriptPtr[1]) + switch (sAIScriptPtr[1]) { case 0: // _08109348 if (gDisableStructs[gActiveBattler].disabledMove == AI_THINKING_STRUCT->moveConsidered) { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); return; } - gAIScriptPtr += 6; + sAIScriptPtr += 6; return; case 1: // _08109370 if (gDisableStructs[gActiveBattler].encoredMove == AI_THINKING_STRUCT->moveConsidered) { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); return; } - gAIScriptPtr += 6; + sAIScriptPtr += 6; return; default: - gAIScriptPtr += 6; + sAIScriptPtr += 6; return; } } @@ -1719,9 +1719,9 @@ static void BattleAICmd_frlg_safari(void) var = gBattleStruct->safariEscapeFactor; var *= 5; if ((u8)(Random() % 100) < var) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); else - gAIScriptPtr += 5; + sAIScriptPtr += 5; } static void BattleAICmd_watch(void) @@ -1734,7 +1734,7 @@ static void BattleAICmd_get_hold_effect(void) u8 index; u16 side; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; @@ -1747,104 +1747,104 @@ static void BattleAICmd_get_hold_effect(void) else AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(gBattleMons[index].item); - gAIScriptPtr += 2; + sAIScriptPtr += 2; } static void BattleAICmd_get_gender(void) { u8 index; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; AI_THINKING_STRUCT->funcResult = GetGenderFromSpeciesAndPersonality(gBattleMons[index].species, gBattleMons[index].personality); - gAIScriptPtr += 2; + sAIScriptPtr += 2; } static void BattleAICmd_is_first_turn(void) { u8 index; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; AI_THINKING_STRUCT->funcResult = gDisableStructs[index].isFirstTurn; - gAIScriptPtr += 2; + sAIScriptPtr += 2; } static void BattleAICmd_get_stockpile_count(void) { u8 index; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; AI_THINKING_STRUCT->funcResult = gDisableStructs[index].stockpileCounter; - gAIScriptPtr += 2; + sAIScriptPtr += 2; } static void BattleAICmd_is_double_battle(void) { AI_THINKING_STRUCT->funcResult = gBattleTypeFlags & BATTLE_TYPE_DOUBLE; - gAIScriptPtr += 1; + sAIScriptPtr += 1; } static void BattleAICmd_get_used_held_item(void) { u8 battlerId; - if (gAIScriptPtr[1] == AI_USER) + if (sAIScriptPtr[1] == AI_USER) battlerId = gBattlerAttacker; else battlerId = gBattlerTarget; // This is likely a leftover from Ruby's code and its ugly ewram access. AI_THINKING_STRUCT->funcResult = ((u8 *)gBattleStruct->usedHeldItems)[battlerId * 2]; - gAIScriptPtr += 2; + sAIScriptPtr += 2; } static void BattleAICmd_get_move_type_from_result(void) { AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].type; - gAIScriptPtr += 1; + sAIScriptPtr += 1; } static void BattleAICmd_get_move_power_from_result(void) { AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].power; - gAIScriptPtr += 1; + sAIScriptPtr += 1; } static void BattleAICmd_get_move_effect_from_result(void) { AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].effect; - gAIScriptPtr += 1; + sAIScriptPtr += 1; } static void BattleAICmd_get_protect_count(void) { u8 index; - if (gAIScriptPtr[1] == USER) + if (sAIScriptPtr[1] == USER) index = gBattlerAttacker; else index = gBattlerTarget; AI_THINKING_STRUCT->funcResult = gDisableStructs[index].protectUses; - gAIScriptPtr += 2; + sAIScriptPtr += 2; } static void BattleAICmd_nullsub_52(void) @@ -1873,13 +1873,13 @@ static void BattleAICmd_nullsub_57(void) static void BattleAICmd_call(void) { - AIStackPushVar(gAIScriptPtr + 5); - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + AIStackPushVar(sAIScriptPtr + 5); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); } static void BattleAICmd_jump(void) { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); } static void BattleAICmd_end(void) @@ -1890,31 +1890,31 @@ static void BattleAICmd_end(void) static void BattleAICmd_if_level_compare(void) { - switch (gAIScriptPtr[1]) + switch (sAIScriptPtr[1]) { case 0: // greater than if (gBattleMons[gBattlerAttacker].level > gBattleMons[gBattlerTarget].level) { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); return; } - gAIScriptPtr += 6; + sAIScriptPtr += 6; return; case 1: // less than if (gBattleMons[gBattlerAttacker].level < gBattleMons[gBattlerTarget].level) { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); return; } - gAIScriptPtr += 6; + sAIScriptPtr += 6; return; case 2: // equal if (gBattleMons[gBattlerAttacker].level == gBattleMons[gBattlerTarget].level) { - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 2); return; } - gAIScriptPtr += 6; + sAIScriptPtr += 6; return; } } @@ -1922,17 +1922,17 @@ static void BattleAICmd_if_level_compare(void) static void BattleAICmd_if_taunted(void) { if (gDisableStructs[gBattlerTarget].tauntTimer != 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); else - gAIScriptPtr += 5; + sAIScriptPtr += 5; } static void BattleAICmd_if_not_taunted(void) { if (gDisableStructs[gBattlerTarget].tauntTimer == 0) - gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + sAIScriptPtr = T1_READ_PTR(sAIScriptPtr + 1); else - gAIScriptPtr += 5; + sAIScriptPtr += 5; } static void AIStackPushVar(const u8 *var) @@ -1943,7 +1943,7 @@ static void AIStackPushVar(const u8 *var) // unused static void AIStackPushVar_cursor(void) { - gBattleResources->AI_ScriptsStack->ptr[gBattleResources->AI_ScriptsStack->size++] = gAIScriptPtr; + gBattleResources->AI_ScriptsStack->ptr[gBattleResources->AI_ScriptsStack->size++] = sAIScriptPtr; } static bool8 AIStackPop(void) @@ -1951,7 +1951,7 @@ static bool8 AIStackPop(void) if (gBattleResources->AI_ScriptsStack->size != 0) { --gBattleResources->AI_ScriptsStack->size; - gAIScriptPtr = gBattleResources->AI_ScriptsStack->ptr[gBattleResources->AI_ScriptsStack->size]; + sAIScriptPtr = gBattleResources->AI_ScriptsStack->ptr[gBattleResources->AI_ScriptsStack->size]; return TRUE; } else diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c index 980b72d4f..2cca37f7a 100644 --- a/src/fldeff_rocksmash.c +++ b/src/fldeff_rocksmash.c @@ -25,6 +25,8 @@ static void sub_80C99A0(u8 taskId); static void sub_80C9A10(void); static void sub_80C9A60(void); +EWRAM_DATA struct MapPosition gPlayerFacingPosition = {}; + bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId) { u8 mapObjId; diff --git a/sym_ewram.txt b/sym_ewram.txt index b4e4fc2c0..921ae98d0 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -268,14 +268,10 @@ gUnknown_203998C: @ 203998C .include "src/menu_helpers.o" .align 2 .include "src/region_map.o" - .align 2 -gAIScriptPtr: @ 2039A00 - .space 0x4 - -gPlayerFacingPosition: @ 2039A04 - .space 0x8 - + .include "src/battle_ai_script_commands.o" + .align 2 + .include "src/fldeff_rocksmash.o" .align 2 .include "src/field_specials.o" .align 2 From fc9a00848115282ceebd61bfa43e937c1f951bfa Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 17 Jan 2020 09:51:32 -0500 Subject: [PATCH 02/22] through sub_80F5334 --- asm/save_failed_screen.s | 283 --------------------------------------- include/strings.h | 5 + ld_script.txt | 1 + src/save_failed_screen.c | 125 +++++++++++++++++ 4 files changed, 131 insertions(+), 283 deletions(-) create mode 100644 src/save_failed_screen.c diff --git a/asm/save_failed_screen.s b/asm/save_failed_screen.s index aa9d375a3..4d95ba17d 100644 --- a/asm/save_failed_screen.s +++ b/asm/save_failed_screen.s @@ -5,289 +5,6 @@ .text - thumb_func_start sub_80F50F4 -sub_80F50F4: @ 80F50F4 - ldr r1, _080F50FC @ =gUnknown_3005430 - movs r0, 0 - str r0, [r1] - bx lr - .align 2, 0 -_080F50FC: .4byte gUnknown_3005430 - thumb_func_end sub_80F50F4 - - thumb_func_start DoSaveFailedScreen -DoSaveFailedScreen: @ 80F5100 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080F5110 @ =gUnknown_203AB4C - strh r0, [r1] - ldr r1, _080F5114 @ =gUnknown_3005430 - movs r0, 0x1 - str r0, [r1] - bx lr - .align 2, 0 -_080F5110: .4byte gUnknown_203AB4C -_080F5114: .4byte gUnknown_3005430 - thumb_func_end DoSaveFailedScreen - - thumb_func_start sub_80F5118 -sub_80F5118: @ 80F5118 - push {lr} - ldr r0, _080F5130 @ =gUnknown_203AB50 - ldrb r1, [r0] - adds r2, r0, 0 - cmp r1, 0x8 - bls _080F5126 - b _080F52D6 -_080F5126: - lsls r0, r1, 2 - ldr r1, _080F5134 @ =_080F5138 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080F5130: .4byte gUnknown_203AB50 -_080F5134: .4byte _080F5138 - .align 2, 0 -_080F5138: - .4byte _080F515C - .4byte _080F5190 - .4byte _080F51B4 - .4byte _080F51E4 - .4byte _080F5204 - .4byte _080F5240 - .4byte _080F5280 - .4byte _080F5298 - .4byte _080F52B4 -_080F515C: - ldr r0, _080F5168 @ =gUnknown_3005430 - ldr r0, [r0] - cmp r0, 0 - bne _080F516C - movs r0, 0 - b _080F52D8 - .align 2, 0 -_080F5168: .4byte gUnknown_3005430 -_080F516C: - ldr r0, _080F5184 @ =gMPlayInfo_BGM - ldr r1, _080F5188 @ =0x0000ffff - movs r2, 0x80 - bl m4aMPlayVolumeControl - bl SaveCallbacks - ldr r1, _080F518C @ =gUnknown_203AB50 - movs r0, 0x1 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F5184: .4byte gMPlayInfo_BGM -_080F5188: .4byte 0x0000ffff -_080F518C: .4byte gUnknown_203AB50 -_080F5190: - bl SaveMapTiles - bl SaveMapGPURegs - bl SaveMapTextColors - bl sub_80F52EC - movs r0, 0 - movs r1, 0 - bl SetGpuReg - ldr r1, _080F51B0 @ =gUnknown_203AB50 - movs r0, 0x2 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F51B0: .4byte gUnknown_203AB50 -_080F51B4: - ldr r1, _080F51D8 @ =0x0600c000 - movs r2, 0x80 - lsls r2, 7 - movs r0, 0 - movs r3, 0 - bl RequestDma3Fill - ldr r0, _080F51DC @ =gUnknown_841EE44 - movs r1, 0xA0 - lsls r1, 19 - movs r2, 0x20 - movs r3, 0 - bl RequestDma3Copy - ldr r1, _080F51E0 @ =gUnknown_203AB50 - movs r0, 0x3 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F51D8: .4byte 0x0600c000 -_080F51DC: .4byte gUnknown_841EE44 -_080F51E0: .4byte gUnknown_203AB50 -_080F51E4: - bl sub_80F53E8 - ldr r0, _080F51FC @ =gUnknown_8418C83 - bl sub_80F5404 - bl sub_80F53CC - ldr r1, _080F5200 @ =gUnknown_203AB50 - movs r0, 0x4 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F51FC: .4byte gUnknown_8418C83 -_080F5200: .4byte gUnknown_203AB50 -_080F5204: - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x10 - movs r1, 0 - bl SetGpuReg - movs r0, 0x12 - movs r1, 0 - bl SetGpuReg - ldr r1, _080F5238 @ =0x00001f0c - movs r0, 0x8 - bl SetGpuReg - movs r1, 0x80 - lsls r1, 1 - movs r0, 0 - bl SetGpuReg - ldr r1, _080F523C @ =gUnknown_203AB50 - movs r0, 0x5 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F5238: .4byte 0x00001f0c -_080F523C: .4byte gUnknown_203AB50 -_080F5240: - bl sub_80F5458 - adds r1, r0, 0 - cmp r1, 0x1 - bne _080F5260 - ldr r0, _080F5258 @ =gSaveSucceeded - strh r1, [r0] - ldr r0, _080F525C @ =gUnknown_8418E09 - bl sub_80F5404 - b _080F526C - .align 2, 0 -_080F5258: .4byte gSaveSucceeded -_080F525C: .4byte gUnknown_8418E09 -_080F5260: - ldr r0, _080F5274 @ =gSaveSucceeded - movs r1, 0xFF - strh r1, [r0] - ldr r0, _080F5278 @ =gUnknown_8418CD9 - bl sub_80F5404 -_080F526C: - ldr r1, _080F527C @ =gUnknown_203AB50 - movs r0, 0x6 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F5274: .4byte gSaveSucceeded -_080F5278: .4byte gUnknown_8418CD9 -_080F527C: .4byte gUnknown_203AB50 -_080F5280: - ldr r0, _080F5294 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080F52D6 - movs r0, 0x7 - strb r0, [r2] - b _080F52D6 - .align 2, 0 -_080F5294: .4byte gMain -_080F5298: - movs r0, 0 - movs r1, 0 - bl SetGpuReg - bl RestoreMapTiles - bl sub_80F52EC - ldr r1, _080F52B0 @ =gUnknown_203AB50 - movs r0, 0x8 - strb r0, [r1] - b _080F52D6 - .align 2, 0 -_080F52B0: .4byte gUnknown_203AB50 -_080F52B4: - ldr r0, _080F52DC @ =gMPlayInfo_BGM - ldr r1, _080F52E0 @ =0x0000ffff - movs r2, 0x80 - lsls r2, 1 - bl m4aMPlayVolumeControl - bl RestoreMapTextColors - bl RestoreGPURegs - bl RestoreCallbacks - ldr r0, _080F52E4 @ =gUnknown_3005430 - movs r1, 0 - str r1, [r0] - ldr r0, _080F52E8 @ =gUnknown_203AB50 - strb r1, [r0] -_080F52D6: - movs r0, 0x1 -_080F52D8: - pop {r1} - bx r1 - .align 2, 0 -_080F52DC: .4byte gMPlayInfo_BGM -_080F52E0: .4byte 0x0000ffff -_080F52E4: .4byte gUnknown_3005430 -_080F52E8: .4byte gUnknown_203AB50 - thumb_func_end sub_80F5118 - - thumb_func_start sub_80F52EC -sub_80F52EC: @ 80F52EC - push {r4,r5,lr} - movs r1, 0 - ldr r5, _080F5310 @ =0x000001ff - movs r4, 0xA0 - lsls r4, 19 - movs r2, 0 - ldr r3, _080F5314 @ =0x05000200 -_080F52FA: - adds r0, r1, r4 - strh r2, [r0] - adds r0, r1, r3 - strh r2, [r0] - adds r1, 0x2 - cmp r1, r5 - ble _080F52FA - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080F5310: .4byte 0x000001ff -_080F5314: .4byte 0x05000200 - thumb_func_end sub_80F52EC - - thumb_func_start sub_80F5318 -sub_80F5318: @ 80F5318 - push {lr} - ldr r0, _080F532C @ =gDecompressionBuffer + 0x3800 - ldr r1, _080F5330 @ =0x0600f800 - movs r2, 0xA0 - lsls r2, 3 - movs r3, 0 - bl RequestDma3Copy - pop {r0} - bx r0 - .align 2, 0 -_080F532C: .4byte gDecompressionBuffer + 0x3800 -_080F5330: .4byte 0x0600f800 - thumb_func_end sub_80F5318 - - thumb_func_start sub_80F5334 -sub_80F5334: @ 80F5334 - push {lr} - ldr r0, _080F5348 @ =gDecompressionBuffer + 0x020 - ldr r1, _080F534C @ =0x0600c020 - movs r2, 0x8C - lsls r2, 6 - movs r3, 0 - bl RequestDma3Copy - pop {r0} - bx r0 - .align 2, 0 -_080F5348: .4byte gDecompressionBuffer + 0x020 -_080F534C: .4byte 0x0600c020 - thumb_func_end sub_80F5334 - thumb_func_start sub_80F5350 sub_80F5350: @ 80F5350 push {r4-r7,lr} diff --git a/include/strings.h b/include/strings.h index ec8533a54..c463b45b7 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1033,4 +1033,9 @@ extern const u8 gText_RegionMap_AreaDesc_AlteringCave[]; extern const u8 gText_RegionMap_AreaDesc_PatternBush[]; extern const u8 gText_RegionMap_AreaDesc_DottedHole[]; +// save_failed_screen +extern const u8 gUnknown_8418C83[]; +extern const u8 gUnknown_8418CD9[]; +extern const u8 gUnknown_8418E09[]; + #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index d6dec1ea3..8b3da8303 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -217,6 +217,7 @@ SECTIONS { src/hall_of_fame.o(.text); src/credits.o(.text); src/diploma.o(.text); + src/save_failed_screen.o(.text); asm/save_failed_screen.o(.text); asm/clear_save_data_screen.o(.text); src/evolution_graphics.o(.text); diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c new file mode 100644 index 000000000..dda0515a0 --- /dev/null +++ b/src/save_failed_screen.c @@ -0,0 +1,125 @@ +#include "global.h" +#include "decompress.h" +#include "dma3.h" +#include "gpu_regs.h" +#include "help_system.h" +#include "m4a.h" +#include "save.h" +#include "save_failed_screen.h" +#include "strings.h" + +bool32 gUnknown_3005430; +EWRAM_DATA u16 gUnknown_203AB4C = SAVE_NORMAL; +EWRAM_DATA u8 gUnknown_203AB50 = 0; + +void sub_80F52EC(void); +void sub_80F53CC(void); +void sub_80F53E8(void); +void sub_80F5404(const u8 *a0); +bool32 sub_80F5458(void); + +extern const u16 gUnknown_841EE44[]; + +void sub_80F50F4(void) +{ + gUnknown_3005430 = FALSE; +} + +void DoSaveFailedScreen(u8 saveType) +{ + gUnknown_203AB4C = saveType; + gUnknown_3005430 = TRUE; +} + +bool32 sub_80F5118(void) +{ + switch (gUnknown_203AB50) + { + case 0: + if (!gUnknown_3005430) + return FALSE; + m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 128); + SaveCallbacks(); + gUnknown_203AB50 = 1; + break; + case 1: + SaveMapTiles(); + SaveMapGPURegs(); + SaveMapTextColors(); + sub_80F52EC(); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + gUnknown_203AB50 = 2; + break; + case 2: + RequestDma3Fill(0, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, 0); + RequestDma3Copy(gUnknown_841EE44, (void *)PLTT, 0x20, 0); + gUnknown_203AB50 = 3; + break; + case 3: + sub_80F53E8(); + sub_80F5404(gUnknown_8418C83); + sub_80F53CC(); + gUnknown_203AB50 = 4; + break; + case 4: + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BG0HOFS, 0); + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(3) | BGCNT_SCREENBASE(31)); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON); + gUnknown_203AB50 = 5; + break; + case 5: + if (sub_80F5458() == TRUE) + { + gSaveSucceeded = SAVE_STATUS_OK; + sub_80F5404(gUnknown_8418E09); + } + else + { + gSaveSucceeded = SAVE_STATUS_ERROR; + sub_80F5404(gUnknown_8418CD9); + } + gUnknown_203AB50 = 6; + break; + case 6: + if (JOY_NEW(A_BUTTON)) + gUnknown_203AB50 = 7; + break; + case 7: + SetGpuReg(REG_OFFSET_DISPCNT, 0); + RestoreMapTiles(); + sub_80F52EC(); + gUnknown_203AB50 = 8; + break; + case 8: + m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256); + RestoreMapTextColors(); + RestoreGPURegs(); + RestoreCallbacks(); + gUnknown_3005430 = FALSE; + gUnknown_203AB50 = 0; + break; + } + return TRUE; +} + +void sub_80F52EC(void) +{ + int i; + for (i = 0; i < BG_PLTT_SIZE; i += sizeof(u16)) + { + *((u16 *)(BG_PLTT + i)) = RGB_BLACK; + *((u16 *)(OBJ_PLTT + i)) = RGB_BLACK; + } +} + +void sub_80F5318(void) +{ + RequestDma3Copy(gDecompressionBuffer + 0x3800, (void *)BG_SCREEN_ADDR(31), 0x500, 0); +} + +void sub_80F5334(void) +{ + RequestDma3Copy(gDecompressionBuffer + 0x020, (void *)BG_CHAR_ADDR(3) + 0x20, 0x2300, 0); +} From 29ef1708792b652ae4aa4d7f7db6091888fdb854 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 17 Jan 2020 10:49:57 -0500 Subject: [PATCH 03/22] Finish save_failed_screen --- asm/save_failed_screen.s | 312 ----------------------------- common_syms/save_failed_screen.txt | 1 + data/save_failed_screen.s | 3 - data/strings.s | 6 +- include/help_system.h | 1 + include/save_failed_screen.h | 4 +- include/strings.h | 6 +- ld_script.txt | 3 +- src/main.c | 4 +- src/save_failed_screen.c | 182 +++++++++++++---- sym_common.txt | 6 +- sym_ewram.txt | 8 +- 12 files changed, 162 insertions(+), 374 deletions(-) delete mode 100644 asm/save_failed_screen.s create mode 100644 common_syms/save_failed_screen.txt diff --git a/asm/save_failed_screen.s b/asm/save_failed_screen.s deleted file mode 100644 index 4d95ba17d..000000000 --- a/asm/save_failed_screen.s +++ /dev/null @@ -1,312 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80F5350 -sub_80F5350: @ 80F5350 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r4, [sp, 0x20] - ldr r5, [sp, 0x24] - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - lsls r2, 24 - lsls r3, 24 - lsrs r3, 24 - mov r8, r3 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 16 - lsrs r7, r5, 16 - lsrs r0, r2, 24 - adds r2, r0, r4 - cmp r0, r2 - bge _080F53B6 - mov r12, r2 - ldr r1, _080F53C8 @ =gDecompressionBuffer + 0x3800 - mov r10, r1 -_080F5386: - mov r4, r9 - mov r2, r8 - adds r1, r4, r2 - adds r3, r0, 0x1 - cmp r4, r1 - bge _080F53AE - lsls r2, r0, 6 - mov r5, r10 -_080F5396: - lsls r0, r4, 1 - adds r0, r2, r0 - adds r0, r5 - strh r6, [r0] - adds r0, r6, r7 - lsls r0, 16 - lsrs r6, r0, 16 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, r1 - blt _080F5396 -_080F53AE: - lsls r0, r3, 16 - lsrs r0, 16 - cmp r0, r12 - blt _080F5386 -_080F53B6: - bl sub_80F5318 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F53C8: .4byte gDecompressionBuffer + 0x3800 - thumb_func_end sub_80F5350 - - thumb_func_start sub_80F53CC -sub_80F53CC: @ 80F53CC - push {lr} - sub sp, 0x8 - movs r0, 0xA - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - movs r1, 0x1 - movs r2, 0x5 - movs r3, 0x1C - bl sub_80F5350 - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_80F53CC - - thumb_func_start sub_80F53E8 -sub_80F53E8: @ 80F53E8 - push {lr} - sub sp, 0x8 - movs r0, 0x14 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - movs r1, 0 - movs r2, 0 - movs r3, 0x1E - bl sub_80F5350 - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_80F53E8 - - thumb_func_start sub_80F5404 -sub_80F5404: @ 80F5404 - push {r4,r5,lr} - sub sp, 0x10 - adds r5, r0, 0 - movs r0, 0x2 - movs r1, 0x1 - movs r2, 0x3 - bl GenerateFontHalfRowLookupTable - add r1, sp, 0xC - ldr r2, _080F544C @ =0x00001111 - adds r0, r2, 0 - strh r0, [r1] - ldr r4, _080F5450 @ =gDecompressionBuffer + 0x020 - ldr r2, _080F5454 @ =0x01001180 - adds r0, r1, 0 - adds r1, r4, 0 - bl CpuSet - movs r0, 0x2 - str r0, [sp] - movs r0, 0x1C - str r0, [sp, 0x4] - movs r0, 0xA - str r0, [sp, 0x8] - movs r0, 0x2 - adds r1, r4, 0 - adds r2, r5, 0 - movs r3, 0x2 - bl HelpSystemRenderText - bl sub_80F5334 - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080F544C: .4byte 0x00001111 -_080F5450: .4byte gDecompressionBuffer + 0x020 -_080F5454: .4byte 0x01001180 - thumb_func_end sub_80F5404 - - thumb_func_start sub_80F5458 -sub_80F5458: @ 80F5458 - push {r4,r5,lr} - movs r5, 0 - ldr r0, _080F5490 @ =gDamagedSaveSectors - ldr r1, [r0] - adds r4, r0, 0 - cmp r1, 0 - beq _080F548C -_080F5466: - ldr r0, [r4] - bl sub_80F5540 - cmp r0, 0 - bne _080F5498 - ldr r0, _080F5494 @ =gUnknown_203AB4C - ldrb r0, [r0] - bl HandleSavingData - adds r5, 0x1 - ldr r0, [r4] - cmp r0, 0 - beq _080F548C - ldr r4, _080F5490 @ =gDamagedSaveSectors - cmp r5, 0x2 - ble _080F5466 - ldr r0, [r4] - cmp r0, 0 - bne _080F5498 -_080F548C: - movs r0, 0x1 - b _080F549A - .align 2, 0 -_080F5490: .4byte gDamagedSaveSectors -_080F5494: .4byte gUnknown_203AB4C -_080F5498: - movs r0, 0 -_080F549A: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80F5458 - - thumb_func_start VerifySectorWipe -VerifySectorWipe: @ 80F54A0 - push {r4,lr} - lsls r0, 16 - lsrs r0, 16 - ldr r4, _080F54C4 @ =gSaveDataBuffer - movs r3, 0x80 - lsls r3, 5 - movs r1, 0 - adds r2, r4, 0 - bl ReadFlash - movs r1, 0 - ldr r2, _080F54C8 @ =0x000003ff -_080F54B8: - ldr r0, [r4] - cmp r0, 0 - beq _080F54CC - movs r0, 0x1 - b _080F54DA - .align 2, 0 -_080F54C4: .4byte gSaveDataBuffer -_080F54C8: .4byte 0x000003ff -_080F54CC: - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - adds r4, 0x4 - cmp r1, r2 - bls _080F54B8 - movs r0, 0 -_080F54DA: - pop {r4} - pop {r1} - bx r1 - thumb_func_end VerifySectorWipe - - thumb_func_start WipeSector -WipeSector: @ 80F54E0 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r7, r0, 0 - movs r0, 0 - lsls r6, r7, 16 - ldr r1, _080F5538 @ =ProgramFlashByte - mov r9, r1 - ldr r1, _080F553C @ =0x00000fff - mov r8, r1 -_080F54F6: - movs r4, 0 - adds r5, r0, 0x1 -_080F54FA: - mov r0, r9 - ldr r3, [r0] - lsrs r0, r6, 16 - adds r1, r4, 0 - movs r2, 0 - bl _call_via_r3 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, r8 - bls _080F54FA - adds r0, r7, 0 - bl VerifySectorWipe - lsls r0, 16 - lsrs r1, r0, 16 - lsls r0, r5, 16 - lsrs r0, 16 - cmp r1, 0 - beq _080F5528 - cmp r0, 0x81 - bls _080F54F6 -_080F5528: - adds r0, r1, 0 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080F5538: .4byte ProgramFlashByte -_080F553C: .4byte 0x00000fff - thumb_func_end WipeSector - - thumb_func_start sub_80F5540 -sub_80F5540: @ 80F5540 - push {r4-r6,lr} - adds r5, r0, 0 - movs r6, 0 -_080F5546: - movs r4, 0x1 - lsls r4, r6 - adds r0, r5, 0 - ands r0, r4 - cmp r0, 0 - beq _080F555E - adds r0, r6, 0 - bl WipeSector - cmp r0, 0 - bne _080F555E - bics r5, r4 -_080F555E: - adds r6, 0x1 - cmp r6, 0x1F - ble _080F5546 - cmp r5, 0 - beq _080F556C - movs r0, 0x1 - b _080F556E -_080F556C: - movs r0, 0 -_080F556E: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80F5540 - - .align 2, 0 @ Don't pad with nop. diff --git a/common_syms/save_failed_screen.txt b/common_syms/save_failed_screen.txt new file mode 100644 index 000000000..caab09b26 --- /dev/null +++ b/common_syms/save_failed_screen.txt @@ -0,0 +1 @@ +sIsInSaveFailedScreen diff --git a/data/save_failed_screen.s b/data/save_failed_screen.s index e19763962..7b0827b6c 100644 --- a/data/save_failed_screen.s +++ b/data/save_failed_screen.s @@ -5,6 +5,3 @@ .include "constants/constants.inc" .section .rodata .align 2 - -gUnknown_841EE44:: @ 841EE44 - .incbin "graphics/interface/save_failed_screen.gbapal" diff --git a/data/strings.s b/data/strings.s index a9c76b88e..55c54f6c3 100644 --- a/data/strings.s +++ b/data/strings.s @@ -2465,14 +2465,14 @@ gUnknown_8418C62:: @ 0x8418C62 gUnknown_8418C6F:: @ 0x8418C6F .string "もう これいじょう たべない みたい‥$" -gUnknown_8418C83:: @ 8418C83 +gText_SaveFailedScreen_CheckingBackupMemory:: @ 8418C83 .string "Save failed.\n" .string "Checking the backup memory‥\n" .string "Please wait.\n" .string "“Time required:\n" .string "about 1 minute”$" -gUnknown_8418CD9:: @ 8418CD9 +gText_SaveFailedScreen_BackupMemoryDamaged:: @ 8418CD9 .string "The backup memory is damaged or\n" .string "the game's battery has run dry.\n" .string "The game can be played, but its\n" @@ -2493,7 +2493,7 @@ gUnknown_8418DC9:: @ 0x8418DC9 .string "{COLOR RED}“このまま ぼうけんをつづけることは できません\n" .string "タイトルに もどります”$" -gUnknown_8418E09:: @ 8418E09 +gText_SaveFailedScreen_SaveCompleted:: @ 8418E09 .string "Save completed.\n" .string "“Please press the A Button.”$" diff --git a/include/help_system.h b/include/help_system.h index 53dc45014..273b5e119 100644 --- a/include/help_system.h +++ b/include/help_system.h @@ -91,5 +91,6 @@ void PlaceListMenuCursor(void); bool8 MoveCursor(u8 by, u8 dirn); void HelpSystem_BackupSomeVariable(void); void HelpSystem_RestoreSomeVariable(void); +void HelpSystemRenderText(u8 font, u8 * dest, const u8 * src, u8 x, u8 y, u8 width, u8 height); #endif //GUARD_HELP_SYSTEM_H diff --git a/include/save_failed_screen.h b/include/save_failed_screen.h index 5950430d2..7056fc6c6 100644 --- a/include/save_failed_screen.h +++ b/include/save_failed_screen.h @@ -2,7 +2,7 @@ #define GUARD_SAVE_FAILED_SCREEN_H extern void DoSaveFailedScreen(u8 saveType); // save_failed_screen -void sub_80F50F4(void); -bool32 sub_80F5118(void); +void SetNotInSaveFailedScreen(void); +bool32 RunSaveFailedScreen(void); #endif //GUARD_SAVE_FAILED_SCREEN_H diff --git a/include/strings.h b/include/strings.h index c463b45b7..eace8d67e 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1034,8 +1034,8 @@ extern const u8 gText_RegionMap_AreaDesc_PatternBush[]; extern const u8 gText_RegionMap_AreaDesc_DottedHole[]; // save_failed_screen -extern const u8 gUnknown_8418C83[]; -extern const u8 gUnknown_8418CD9[]; -extern const u8 gUnknown_8418E09[]; +extern const u8 gText_SaveFailedScreen_CheckingBackupMemory[]; +extern const u8 gText_SaveFailedScreen_BackupMemoryDamaged[]; +extern const u8 gText_SaveFailedScreen_SaveCompleted[]; #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index 8b3da8303..f07e480a2 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -218,7 +218,6 @@ SECTIONS { src/credits.o(.text); src/diploma.o(.text); src/save_failed_screen.o(.text); - asm/save_failed_screen.o(.text); asm/clear_save_data_screen.o(.text); src/evolution_graphics.o(.text); src/fldeff_teleport.o(.text); @@ -506,7 +505,7 @@ SECTIONS { src/credits.o(.rodata); src/diploma.o(.rodata); data/strings.o(.rodata); - data/save_failed_screen.o(.rodata); + src/save_failed_screen.o(.rodata); data/clear_save_data_screen.o(.rodata); src/evolution_graphics.o(.rodata); src/new_menu_helpers.o(.rodata); diff --git a/src/main.c b/src/main.c index 336584ab3..b88326cda 100644 --- a/src/main.c +++ b/src/main.c @@ -115,7 +115,7 @@ void AgbMain() gSoftResetDisabled = FALSE; gHelpSystemEnabled = FALSE; - sub_80F50F4(); + SetNotInSaveFailedScreen(); AGBPrintInit(); @@ -186,7 +186,7 @@ static void InitMainCallbacks(void) static void CallCallbacks(void) { - if (!sub_80F5118() && !RunHelpSystemCallback()) + if (!RunSaveFailedScreen() && !RunHelpSystemCallback()) { if (gMain.callback1) gMain.callback1(); diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c index dda0515a0..4065bccef 100644 --- a/src/save_failed_screen.c +++ b/src/save_failed_screen.c @@ -1,65 +1,70 @@ #include "global.h" #include "decompress.h" #include "dma3.h" +#include "gba/flash_internal.h" #include "gpu_regs.h" #include "help_system.h" #include "m4a.h" #include "save.h" #include "save_failed_screen.h" #include "strings.h" +#include "text.h" -bool32 gUnknown_3005430; -EWRAM_DATA u16 gUnknown_203AB4C = SAVE_NORMAL; -EWRAM_DATA u8 gUnknown_203AB50 = 0; +bool32 sIsInSaveFailedScreen; -void sub_80F52EC(void); -void sub_80F53CC(void); -void sub_80F53E8(void); -void sub_80F5404(const u8 *a0); -bool32 sub_80F5458(void); +static EWRAM_DATA u16 sSaveType = SAVE_NORMAL; +static EWRAM_DATA u16 unused_203AB4E = 0; +static EWRAM_DATA u8 sSaveFailedScreenState = 0; -extern const u16 gUnknown_841EE44[]; +static void BlankPalettes(void); +static void UpdateMapBufferWithText(void); +static void ClearMapBuffer(void); +static void PrintTextOnSaveFailedScreen(const u8 *a0); +static bool32 TryWipeDamagedSectors(void); +static bool32 WipeDamagedSectors(u32 damagedSectors); -void sub_80F50F4(void) +static const u16 sSaveFailedScreenPals[] = INCBIN_U16("graphics/interface/save_failed_screen.gbapal"); + +void SetNotInSaveFailedScreen(void) { - gUnknown_3005430 = FALSE; + sIsInSaveFailedScreen = FALSE; } void DoSaveFailedScreen(u8 saveType) { - gUnknown_203AB4C = saveType; - gUnknown_3005430 = TRUE; + sSaveType = saveType; + sIsInSaveFailedScreen = TRUE; } -bool32 sub_80F5118(void) +bool32 RunSaveFailedScreen(void) { - switch (gUnknown_203AB50) + switch (sSaveFailedScreenState) { case 0: - if (!gUnknown_3005430) + if (!sIsInSaveFailedScreen) return FALSE; m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 128); SaveCallbacks(); - gUnknown_203AB50 = 1; + sSaveFailedScreenState = 1; break; case 1: SaveMapTiles(); SaveMapGPURegs(); SaveMapTextColors(); - sub_80F52EC(); + BlankPalettes(); SetGpuReg(REG_OFFSET_DISPCNT, 0); - gUnknown_203AB50 = 2; + sSaveFailedScreenState = 2; break; case 2: RequestDma3Fill(0, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, 0); - RequestDma3Copy(gUnknown_841EE44, (void *)PLTT, 0x20, 0); - gUnknown_203AB50 = 3; + RequestDma3Copy(sSaveFailedScreenPals, (void *)PLTT, 0x20, 0); + sSaveFailedScreenState = 3; break; case 3: - sub_80F53E8(); - sub_80F5404(gUnknown_8418C83); - sub_80F53CC(); - gUnknown_203AB50 = 4; + ClearMapBuffer(); + PrintTextOnSaveFailedScreen(gText_SaveFailedScreen_CheckingBackupMemory); + UpdateMapBufferWithText(); + sSaveFailedScreenState = 4; break; case 4: SetGpuReg(REG_OFFSET_BLDCNT, 0); @@ -67,44 +72,44 @@ bool32 sub_80F5118(void) SetGpuReg(REG_OFFSET_BG0VOFS, 0); SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(3) | BGCNT_SCREENBASE(31)); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON); - gUnknown_203AB50 = 5; + sSaveFailedScreenState = 5; break; case 5: - if (sub_80F5458() == TRUE) + if (TryWipeDamagedSectors() == TRUE) { gSaveSucceeded = SAVE_STATUS_OK; - sub_80F5404(gUnknown_8418E09); + PrintTextOnSaveFailedScreen(gText_SaveFailedScreen_SaveCompleted); } else { gSaveSucceeded = SAVE_STATUS_ERROR; - sub_80F5404(gUnknown_8418CD9); + PrintTextOnSaveFailedScreen(gText_SaveFailedScreen_BackupMemoryDamaged); } - gUnknown_203AB50 = 6; + sSaveFailedScreenState = 6; break; case 6: if (JOY_NEW(A_BUTTON)) - gUnknown_203AB50 = 7; + sSaveFailedScreenState = 7; break; case 7: SetGpuReg(REG_OFFSET_DISPCNT, 0); RestoreMapTiles(); - sub_80F52EC(); - gUnknown_203AB50 = 8; + BlankPalettes(); + sSaveFailedScreenState = 8; break; case 8: m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256); RestoreMapTextColors(); RestoreGPURegs(); RestoreCallbacks(); - gUnknown_3005430 = FALSE; - gUnknown_203AB50 = 0; + sIsInSaveFailedScreen = FALSE; + sSaveFailedScreenState = 0; break; } return TRUE; } -void sub_80F52EC(void) +static void BlankPalettes(void) { int i; for (i = 0; i < BG_PLTT_SIZE; i += sizeof(u16)) @@ -114,12 +119,113 @@ void sub_80F52EC(void) } } -void sub_80F5318(void) +static void RequestDmaCopyFromScreenBuffer(void) { RequestDma3Copy(gDecompressionBuffer + 0x3800, (void *)BG_SCREEN_ADDR(31), 0x500, 0); } -void sub_80F5334(void) +static void RequestDmaCopyFromCharBuffer(void) { RequestDma3Copy(gDecompressionBuffer + 0x020, (void *)BG_CHAR_ADDR(3) + 0x20, 0x2300, 0); } + +static void FillBgMapBufferRect(u16 baseBlock, u8 left, u8 top, u8 width, u8 height, u16 blockOffset) +{ + u16 i, j; + + for (i = top; i < top + height; i++) + { + for (j = left; j < left + width; j++) + { + *((u16 *)(gDecompressionBuffer + 0x3800 + 64 * i + 2 * j)) = baseBlock; + baseBlock += blockOffset; + } + } + RequestDmaCopyFromScreenBuffer(); +} + +static void UpdateMapBufferWithText(void) +{ + FillBgMapBufferRect(0x001, 1, 5, 28, 10, 0x001); +} + +static void ClearMapBuffer(void) +{ + FillBgMapBufferRect(0x000, 0, 0, 30, 20, 0x000); +} + +static void PrintTextOnSaveFailedScreen(const u8 *str) +{ + GenerateFontHalfRowLookupTable(TEXT_COLOR_DARK_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY); + CpuFill16(PIXEL_FILL(1) | (PIXEL_FILL(1) << 8), gDecompressionBuffer + 0x20, 0x2300); + HelpSystemRenderText(2, gDecompressionBuffer + 0x20, str, 2, 2, 28, 10); + RequestDmaCopyFromCharBuffer(); +} + +static bool32 TryWipeDamagedSectors(void) +{ + int i = 0; + for (i = 0; gDamagedSaveSectors != 0 && i < 3; i++) + { + if (WipeDamagedSectors(gDamagedSaveSectors)) + return FALSE; + HandleSavingData(sSaveType); + } + if (gDamagedSaveSectors != 0) + return FALSE; + return TRUE; +} + +static bool16 VerifySectorWipe(u32 sector) +{ + u16 sector0 = sector; + u16 i; + u32 *saveDataBuffer = (void *)&gSaveDataBuffer; + ReadFlash(sector0, 0, saveDataBuffer, 0x1000); + for (i = 0; i < 0x1000 / 4; i++, saveDataBuffer++) + { + if (*saveDataBuffer != 0) + return TRUE; + } + return FALSE; +} + +static bool32 WipeSector(u32 sector) +{ + bool32 result; + u16 i, j; + + i = 0; + while (i < 130) + { + for (j = 0; j < 0x1000; j++) + { + ProgramFlashByte(sector, j, 0); + } + result = VerifySectorWipe(sector); + i++; + if (!result) + break; + } + + return result; +} + +static bool32 WipeDamagedSectors(u32 damagedSectors) +{ + int i; + for (i = 0; i < 32; i++) + { + if (damagedSectors & (1 << i)) + { + if (!WipeSector(i)) + { + damagedSectors &= ~(1 << i); + } + } + } + if (damagedSectors == 0) + return FALSE; + else + return TRUE; +} diff --git a/sym_common.txt b/sym_common.txt index 9f39f9f2b..8367a6816 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -71,10 +71,8 @@ gUnknown_3005078: @ 3005078 .include "save.o" .align 2 .include "battle_anim_special.o" - -gUnknown_3005430: @ 3005430 - .space 0x10 - + .align 2 + .include "save_failed_screen.o" .align 4 .include "link_rfu_2.o" .align 4 diff --git a/sym_ewram.txt b/sym_ewram.txt index 921ae98d0..74d051544 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -306,15 +306,13 @@ gUnknown_203998C: @ 203998C .include "src/diploma.o" .align 2 -gUnknown_203AB4C: @ 203AB4C - .space 0x4 - -gUnknown_203AB50: @ 203AB50 - .space 0x4 + .include "src/save_failed_screen.o" + .align 2 gUnknown_203AB54: @ 203AB54 .space 0x4 + .align 2 .include "src/new_menu_helpers.o" .align 2 .include "src/box_party_pokemon_dropdown.o" From afbaa190a2caaad1e193f2570da05d55fca14d04 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 17 Jan 2020 11:01:47 -0500 Subject: [PATCH 04/22] quest_log COMMON --- common_syms/quest_log.txt | 3 +++ sym_common.txt | 29 ++++++++++++++++++----------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/common_syms/quest_log.txt b/common_syms/quest_log.txt index 4ecbf66a8..cc7fbbfcf 100644 --- a/common_syms/quest_log.txt +++ b/common_syms/quest_log.txt @@ -1 +1,4 @@ gUnknown_3005E88 +sNumQuestLogs +gUnknown_3005E90 +gUnknown_3005E94 diff --git a/sym_common.txt b/sym_common.txt index 8367a6816..74e642bc2 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -1,13 +1,22 @@ + .align 2 .include "main.o" + .align 2 .include "bg.o" + .align 2 .include "text_printer.o" + .align 2 .include "window.o" + .align 2 .include "text.o" + .align 2 .include "sprite.o" + .align 2 .include "link.o" .align 4 .include "battle_main.o" + .align 2 .include "random.o" + .align 2 .include "load_save.o" .align 2 @@ -35,6 +44,7 @@ gUnknown_300502C: @ 300502C gUnknown_3005030: @ 3005030 .space 0x10 + .align 2 .include "fieldmap.o" .align 4 @@ -47,16 +57,21 @@ gUnknown_3005068: @ 3005068 gUnknown_300506C: @ 300506C .space 0x4 + .align 2 .include "scrcmd.o" + .align 2 gSelectedObjectEvent: @ 3005074 .space 0x4 gUnknown_3005078: @ 3005078 .space 0x4 + .align 2 .include "event_data.o" + .align 2 .include "sound.o" + .align 2 .include "task.o" @ what is this? @@ -81,31 +96,23 @@ gUnknown_3005078: @ 3005078 .include "list_menu.o" .align 2 .include "quest_log.o" - -sNumQuestLogs: @ 3005E8C - .space 0x4 - -gUnknown_3005E90: @ 3005E90 - .space 0x4 - -gUnknown_3005E94: @ 3005E94 - .space 0x4 - .align 2 .include "party_menu.o" .align 2 .include "help_system_812B1E0.o" .align 4 .include "fame_checker.o" + .align 2 .include "help_system.o" .align 4 .include "mevent.o" - .align 4 .include "battle_controller_pokedude.o" .align 4 .include "berry_fix_program.o" + .align 2 .include "m4a.o" + .align 2 .include "agb_flash.o" .align 2 .include "librfu_stwi.o" From b786145272491ea33924ffc0526b268a9b102619 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 17 Jan 2020 11:06:59 -0500 Subject: [PATCH 05/22] Address review comments --- data/save_failed_screen.s | 7 ------- src/save_failed_screen.c | 2 +- sym_ewram.txt | 13 ++++--------- 3 files changed, 5 insertions(+), 17 deletions(-) delete mode 100644 data/save_failed_screen.s diff --git a/data/save_failed_screen.s b/data/save_failed_screen.s deleted file mode 100644 index 7b0827b6c..000000000 --- a/data/save_failed_screen.s +++ /dev/null @@ -1,7 +0,0 @@ -#include "constants/region_map.h" -#include "constants/flags.h" -#include "constants/moves.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - .section .rodata - .align 2 diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c index 4065bccef..b6cce890a 100644 --- a/src/save_failed_screen.c +++ b/src/save_failed_screen.c @@ -182,7 +182,7 @@ static bool16 VerifySectorWipe(u32 sector) u16 i; u32 *saveDataBuffer = (void *)&gSaveDataBuffer; ReadFlash(sector0, 0, saveDataBuffer, 0x1000); - for (i = 0; i < 0x1000 / 4; i++, saveDataBuffer++) + for (i = 0; i < 0x1000 / sizeof(u32); i++, saveDataBuffer++) { if (*saveDataBuffer != 0) return TRUE; diff --git a/sym_ewram.txt b/sym_ewram.txt index 74d051544..188ccd3aa 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -16,7 +16,6 @@ .align 2 .include "src/link.o" .space 8 - .align 2 .include "src/battle_controllers.o" .align 2 @@ -144,6 +143,7 @@ gUnknown_20386A4: @ 20386A4 gUnknown_20386A8: @ 20386A8 .space 0x4 + .align 2 .include "src/battle_setup.o" .align 2 .include "src/wild_encounter.o" @@ -154,7 +154,6 @@ gFieldEffectArguments: @ 20386E0 .align 2 .include "src/scanline_effect.o" - .align 2 .include "src/option_menu.o" .align 2 @@ -454,6 +453,7 @@ gUnknown_203B0E8: @ 203B0E8 .include "src/oak_speech.o" .align 2 .include "src/tm_case.o" + .align 2 .include "src/menu_indicators.o" gUnknown_203B140: @ 203B140 @@ -500,13 +500,8 @@ gUnknown_203B170: @ 203B170 .include "src/berry_pouch.o" .align 2 .include "src/slot_machine.o" - -sLocationHistory: @ 203F3A8 - .space 0x6 - -sRoamerLocation: @ 203F3AE - .space 0x2 - + .align 2 + .include "src/roamer.o" .align 2 .include "src/mystery_gift_menu.o" .align 2 From f6e050cf354a6ca3f5ea3a57496cc0ae2aac49dd Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 17 Jan 2020 15:11:46 -0500 Subject: [PATCH 06/22] through sub_81081AC --- asm/item_menu.s | 512 ----------------------------------- include/bag.h | 2 + include/battle_controllers.h | 1 + include/item_menu.h | 4 +- ld_script.txt | 1 + src/item_menu.c | 281 +++++++++++++++++++ 6 files changed, 287 insertions(+), 514 deletions(-) create mode 100644 src/item_menu.c diff --git a/asm/item_menu.s b/asm/item_menu.s index 704d8d5d8..f3af32b36 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -5,518 +5,6 @@ .text - thumb_func_start GoToBagMenu -GoToBagMenu: @ 8107DB4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r2, 0 - lsls r0, 24 - lsrs r6, r0, 24 - adds r7, r6, 0 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - bl sub_81081AC - ldr r5, _08107DE4 @ =gUnknown_203AD10 - movs r0, 0x14 - bl Alloc - str r0, [r5] - cmp r0, 0 - bne _08107DE8 - adds r0, r4, 0 - bl SetMainCallback2 - b _08107E9A - .align 2, 0 -_08107DE4: .4byte gUnknown_203AD10 -_08107DE8: - cmp r6, 0xB - beq _08107DF0 - ldr r0, _08107E38 @ =gUnknown_203ACFC - strb r6, [r0, 0x4] -_08107DF0: - cmp r4, 0 - beq _08107DF8 - ldr r0, _08107E38 @ =gUnknown_203ACFC - str r4, [r0] -_08107DF8: - ldr r1, [r5] - movs r0, 0 - str r0, [r1] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldr r2, [r5] - ldrb r1, [r2, 0x5] - movs r0, 0x31 - negs r0, r0 - ands r0, r1 - strb r0, [r2, 0x5] - ldr r2, [r5] - ldrb r1, [r2, 0x5] - movs r0, 0x3F - ands r0, r1 - strb r0, [r2, 0x5] - ldr r1, [r5] - movs r0, 0x1 - negs r0, r0 - strb r0, [r1, 0x8] - ldr r1, [r5] - strb r0, [r1, 0x9] - cmp r6, 0x3 - bne _08107E3C - ldr r2, [r5] - ldrb r1, [r2, 0x5] - subs r0, 0xF - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - b _08107E5A - .align 2, 0 -_08107E38: .4byte gUnknown_203ACFC -_08107E3C: - cmp r7, 0x6 - bne _08107E50 - ldr r2, [r5] - ldrb r1, [r2, 0x5] - movs r0, 0x10 - negs r0, r0 - ands r0, r1 - movs r1, 0x2 - orrs r0, r1 - b _08107E5A -_08107E50: - ldr r2, [r5] - ldrb r1, [r2, 0x5] - movs r0, 0x10 - negs r0, r0 - ands r0, r1 -_08107E5A: - strb r0, [r2, 0x5] - movs r1, 0 - ldr r4, _08107EA4 @ =gTextFlags - ldr r5, _08107EA8 @ =gSpecialVar_ItemId - ldr r6, _08107EAC @ =sub_8107F10 - ldr r3, _08107EB0 @ =gUnknown_203AD10 - movs r2, 0 -_08107E68: - ldr r0, [r3] - adds r0, 0x10 - adds r0, r1 - strb r2, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x3 - bls _08107E68 - mov r0, r8 - cmp r0, 0x2 - bhi _08107E86 - ldr r0, _08107EB4 @ =gUnknown_203ACFC - mov r1, r8 - strh r1, [r0, 0x6] -_08107E86: - ldrb r0, [r4] - movs r1, 0x5 - negs r1, r1 - ands r1, r0 - strb r1, [r4] - movs r0, 0 - strh r0, [r5] - adds r0, r6, 0 - bl SetMainCallback2 -_08107E9A: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08107EA4: .4byte gTextFlags -_08107EA8: .4byte gSpecialVar_ItemId -_08107EAC: .4byte sub_8107F10 -_08107EB0: .4byte gUnknown_203AD10 -_08107EB4: .4byte gUnknown_203ACFC - thumb_func_end GoToBagMenu - - thumb_func_start CB2_BagMenuFromStartMenu -CB2_BagMenuFromStartMenu: @ 8107EB8 - push {lr} - ldr r2, _08107EC8 @ =CB2_ReturnToFieldWithOpenMenu - movs r0, 0 - movs r1, 0x3 - bl GoToBagMenu - pop {r0} - bx r0 - .align 2, 0 -_08107EC8: .4byte CB2_ReturnToFieldWithOpenMenu - thumb_func_end CB2_BagMenuFromStartMenu - - thumb_func_start sub_8107ECC -sub_8107ECC: @ 8107ECC - push {lr} - ldr r2, _08107EDC @ =SetCB2ToReshowScreenAfterMenu2 - movs r0, 0x5 - movs r1, 0x3 - bl GoToBagMenu - pop {r0} - bx r0 - .align 2, 0 -_08107EDC: .4byte SetCB2ToReshowScreenAfterMenu2 - thumb_func_end sub_8107ECC - - thumb_func_start sub_8107EE0 -sub_8107EE0: @ 8107EE0 - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl DoScheduledBgTilemapCopiesToVram - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_8107EE0 - - thumb_func_start sub_8107EFC -sub_8107EFC: @ 8107EFC - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_8107EFC - - thumb_func_start sub_8107F10 -sub_8107F10: @ 8107F10 - push {lr} -_08107F12: - bl sub_80BF72C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08107F36 - bl sub_8107F3C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08107F36 - bl MenuHelpers_LinkSomething - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08107F12 -_08107F36: - pop {r0} - bx r0 - thumb_func_end sub_8107F10 - - thumb_func_start sub_8107F3C -sub_8107F3C: @ 8107F3C - push {r4,r5,lr} - ldr r0, _08107F58 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x13 - bls _08107F4E - b _0810811C -_08107F4E: - lsls r0, 2 - ldr r1, _08107F5C @ =_08107F60 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08107F58: .4byte gMain -_08107F5C: .4byte _08107F60 - .align 2, 0 -_08107F60: - .4byte _08107FB0 - .4byte _08107FBA - .4byte _08107FC0 - .4byte _08107FC6 - .4byte _08107FD8 - .4byte _08107FDE - .4byte _08107FE4 - .4byte _08107FF6 - .4byte _08108010 - .4byte _08108020 - .4byte _08108026 - .4byte _08108034 - .4byte _08108046 - .4byte _08108054 - .4byte _0810806E - .4byte _081080B8 - .4byte _081080C8 - .4byte _081080D2 - .4byte _081080D8 - .4byte _081080DE -_08107FB0: - bl SetVBlankHBlankCallbacksToNull - bl ClearScheduledBgCopiesToVram - b _08108104 -_08107FBA: - bl ScanlineEffect_Stop - b _08108104 -_08107FC0: - bl FreeAllSpritePalettes - b _08108104 -_08107FC6: - bl ResetPaletteFade - ldr r2, _08107FD4 @ =gPaletteFade - ldrb r0, [r2, 0x8] - movs r1, 0x80 - orrs r0, r1 - b _08108102 - .align 2, 0 -_08107FD4: .4byte gPaletteFade -_08107FD8: - bl ResetSpriteData - b _08108104 -_08107FDE: - bl ResetItemMenuIconState - b _08108104 -_08107FE4: - bl MenuHelpers_LinkSomething - lsls r0, 24 - cmp r0, 0 - beq _08107FF0 - b _08108104 -_08107FF0: - bl ResetTasks - b _08108104 -_08107FF6: - bl sub_81081D0 - lsls r0, 24 - cmp r0, 0 - beq _0810803E - ldr r0, _0810800C @ =gUnknown_203AD10 - ldr r1, [r0] - movs r0, 0 - strb r0, [r1, 0x10] - b _08108104 - .align 2, 0 -_0810800C: .4byte gUnknown_203AD10 -_08108010: - bl sub_8108240 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0810801E - b _08108134 -_0810801E: - b _08108104 -_08108020: - bl sub_810B858 - b _08108104 -_08108026: - bl sub_8108E54 - bl sub_8108A68 - bl sub_8108A84 - b _08108104 -_08108034: - bl sub_81083F4 - lsls r0, 24 - cmp r0, 0 - bne _08108104 -_0810803E: - bl sub_810813C - movs r0, 0x1 - b _08108136 -_08108046: - ldr r0, _08108050 @ =gUnknown_203ACFC - ldrb r0, [r0, 0x6] - bl sub_810842C - b _08108104 - .align 2, 0 -_08108050: .4byte gUnknown_203ACFC -_08108054: - ldr r0, _08108064 @ =gUnknown_203ACFC - ldrb r0, [r0, 0x4] - cmp r0, 0x3 - beq _08108068 - bl sub_81087EC - b _08108104 - .align 2, 0 -_08108064: .4byte gUnknown_203ACFC -_08108068: - bl sub_810B994 - b _08108104 -_0810806E: - ldr r4, _081080AC @ =gUnknown_203ACFC - ldrb r0, [r4, 0x4] - bl sub_8108388 - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r0, _081080B0 @ =gMultiuseListMenuTemplate - ldrh r2, [r4, 0x6] - lsls r2, 1 - adds r1, r4, 0 - adds r1, 0xE - adds r1, r2, r1 - ldrh r1, [r1] - adds r4, 0x8 - adds r2, r4 - ldrh r2, [r2] - bl ListMenuInit - ldr r2, _081080B4 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r2 - lsls r0, 24 - lsrs r0, 24 - movs r2, 0 - strh r0, [r1, 0x8] - strh r2, [r1, 0xE] - strh r2, [r1, 0x18] - b _08108104 - .align 2, 0 -_081080AC: .4byte gUnknown_203ACFC -_081080B0: .4byte gMultiuseListMenuTemplate -_081080B4: .4byte gTasks -_081080B8: - ldr r0, _081080C4 @ =gUnknown_203ACFC - ldrb r0, [r0, 0x6] - bl sub_80984FC - b _08108104 - .align 2, 0 -_081080C4: .4byte gUnknown_203ACFC -_081080C8: - bl sub_8108888 - bl sub_81088D8 - b _08108104 -_081080D2: - bl sub_80985E4 - b _08108104 -_081080D8: - bl sub_8108C10 - b _08108104 -_081080DE: - ldr r0, _081080F0 @ =gUnknown_203ACFC - ldrb r0, [r0, 0x4] - cmp r0, 0x3 - bne _081080F4 - movs r0, 0x1D - bl HelpSystem_SetSomeVariable2 - b _081080FA - .align 2, 0 -_081080F0: .4byte gUnknown_203ACFC -_081080F4: - movs r0, 0x9 - bl HelpSystem_SetSomeVariable2 -_081080FA: - ldr r2, _08108114 @ =gPaletteFade - ldrb r1, [r2, 0x8] - movs r0, 0x7F - ands r0, r1 -_08108102: - strb r0, [r2, 0x8] -_08108104: - ldr r1, _08108118 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _08108134 - .align 2, 0 -_08108114: .4byte gPaletteFade -_08108118: .4byte gMain -_0810811C: - ldr r0, _0810812C @ =sub_8107EFC - bl SetVBlankCallback - ldr r0, _08108130 @ =sub_8107EE0 - bl SetMainCallback2 - movs r0, 0x1 - b _08108136 - .align 2, 0 -_0810812C: .4byte sub_8107EFC -_08108130: .4byte sub_8107EE0 -_08108134: - movs r0, 0 -_08108136: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8107F3C - - thumb_func_start sub_810813C -sub_810813C: @ 810813C - push {lr} - sub sp, 0x4 - movs r0, 0x1 - negs r0, r0 - movs r1, 0x2 - negs r1, r1 - movs r2, 0 - str r2, [sp] - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _0810816C @ =sub_8108178 - movs r1, 0 - bl CreateTask - ldr r0, _08108170 @ =sub_8107EFC - bl SetVBlankCallback - ldr r0, _08108174 @ =sub_8107EE0 - bl SetMainCallback2 - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0810816C: .4byte sub_8108178 -_08108170: .4byte sub_8107EFC -_08108174: .4byte sub_8107EE0 - thumb_func_end sub_810813C - - thumb_func_start sub_8108178 -sub_8108178: @ 8108178 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _081081A4 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0810819C - ldr r0, _081081A8 @ =gUnknown_203ACFC - ldr r0, [r0] - bl SetMainCallback2 - bl sub_8108B04 - adds r0, r4, 0 - bl DestroyTask -_0810819C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081081A4: .4byte gPaletteFade -_081081A8: .4byte gUnknown_203ACFC - thumb_func_end sub_8108178 - - thumb_func_start sub_81081AC -sub_81081AC: @ 81081AC - ldr r0, _081081C0 @ =gUnknown_203AD10 - movs r1, 0 - str r1, [r0] - ldr r0, _081081C4 @ =gUnknown_203AD14 - str r1, [r0] - ldr r0, _081081C8 @ =gUnknown_203AD18 - str r1, [r0] - ldr r0, _081081CC @ =gUnknown_203AD1C - str r1, [r0] - bx lr - .align 2, 0 -_081081C0: .4byte gUnknown_203AD10 -_081081C4: .4byte gUnknown_203AD14 -_081081C8: .4byte gUnknown_203AD18 -_081081CC: .4byte gUnknown_203AD1C - thumb_func_end sub_81081AC - thumb_func_start sub_81081D0 sub_81081D0: @ 81081D0 push {r4,r5,lr} diff --git a/include/bag.h b/include/bag.h index f82531778..8c085a211 100644 --- a/include/bag.h +++ b/include/bag.h @@ -1,6 +1,8 @@ #ifndef GUARD_BAG_H #define GUARD_BAG_H +#include "menu_helpers.h" + void sub_810B858(void); void sub_810B8F0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, s8 speed, u8 colorIdx); void sub_810B958(const u8 * str); diff --git a/include/battle_controllers.h b/include/battle_controllers.h index 06a0e2957..412856353 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -2,6 +2,7 @@ #define GUARD_BATTLE_CONTROLLERS_H #include "global.h" +#include "battle.h" enum { diff --git a/include/item_menu.h b/include/item_menu.h index 187674e83..d141c6601 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -14,8 +14,8 @@ struct BagStruct u8 location; u8 pocket; u16 unk6; - u8 cursorPosition[6]; - u8 scrollPosition[6]; + u16 itemsAbove[3]; + u16 cursorPos[3]; }; extern struct BagStruct gUnknown_203ACFC; diff --git a/ld_script.txt b/ld_script.txt index f07e480a2..feca781e7 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -232,6 +232,7 @@ SECTIONS { src/pokedex_screen.o(.text); asm/pokedex_screen.o(.text); src/list_menu.o(.text); + src/item_menu.o(.text); asm/item_menu.o(.text); src/save_location.o(.text); src/bag.o(.text); diff --git a/src/item_menu.c b/src/item_menu.c new file mode 100644 index 000000000..9128d0856 --- /dev/null +++ b/src/item_menu.c @@ -0,0 +1,281 @@ +#include "global.h" +#include "bag.h" +#include "battle_controllers.h" +#include "bg.h" +#include "help_system.h" +#include "item_menu.h" +#include "item_menu_icons.h" +#include "list_menu.h" +#include "malloc.h" +#include "new_menu_helpers.h" +#include "overworld.h" +#include "palette.h" +#include "scanline_effect.h" +#include "text.h" +#include "constants/items.h" + +struct BagMenuAlloc +{ + u32 field_00; + u8 field_04; + u8 field_05_0:4; + u8 field_05_4:2; + u8 field_05_6:2; + u16 field_06; + u8 field_08; + u8 field_09; + u8 filler_0A[6]; + u8 field_10[4]; +}; + +EWRAM_DATA struct BagStruct gUnknown_203ACFC = {}; +EWRAM_DATA struct BagMenuAlloc * gUnknown_203AD10 = NULL; +EWRAM_DATA void * gUnknown_203AD14 = NULL; +EWRAM_DATA struct ListMenuItem * gUnknown_203AD18 = NULL; +EWRAM_DATA u8 (*gUnknown_203AD1C)[20] = NULL; + +void sub_8107F10(void); +bool8 sub_8107F3C(void); +void sub_810813C(void); +void sub_8108178(u8 taskId); +void sub_81081AC(void); +bool8 sub_81081D0(void); +bool8 sub_8108240(void); +u8 sub_8108388(u8 location); +bool8 sub_81083F4(void); +void sub_810842C(u8 a0); +void sub_81087EC(void); +void sub_8108888(void); +void sub_81088D8(void); +void sub_8108A68(void); +void sub_8108A84(void); +void sub_8108B04(void); +void sub_8108C10(void); +void sub_8108E54(void); + +void GoToBagMenu(u8 location, u8 a1, MainCallback a2) +{ + u8 i; + + sub_81081AC(); + gUnknown_203AD10 = Alloc(sizeof(struct BagMenuAlloc)); + if (gUnknown_203AD10 == NULL) + SetMainCallback2(a2); + else + { + if (location != 11) + gUnknown_203ACFC.location = location; + if (a2 != NULL) + gUnknown_203ACFC.bagCallback = a2; + gUnknown_203AD10->field_00 = 0; + gUnknown_203AD10->field_04 = 0xFF; + gUnknown_203AD10->field_05_4 = 0; + gUnknown_203AD10->field_05_6 = 0; + gUnknown_203AD10->field_08 = 0xFF; + gUnknown_203AD10->field_09 = 0xFF; + if (location == 3) + gUnknown_203AD10->field_05_0 = 1; + else if (location == 6) + gUnknown_203AD10->field_05_0 = 2; + else + gUnknown_203AD10->field_05_0 = 0; + for (i = 0; i < 4; i++) + { + gUnknown_203AD10->field_10[i] = 0; + } + if (a1 == 0 || a1 == 1 || a1 == 2) + gUnknown_203ACFC.unk6 = a1; + gTextFlags.autoScroll = FALSE; + gSpecialVar_ItemId = ITEM_NONE; + SetMainCallback2(sub_8107F10); + } +} + +void CB2_BagMenuFromStartMenu(void) +{ + GoToBagMenu(0, 3, CB2_ReturnToFieldWithOpenMenu); +} + +void sub_8107ECC(void) +{ + GoToBagMenu(5, 3, SetCB2ToReshowScreenAfterMenu2); +} + +void sub_8107EE0(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + DoScheduledBgTilemapCopiesToVram(); + UpdatePaletteFade(); +} + +void sub_8107EFC(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_8107F10(void) +{ + while (1) + { + if ((u8)sub_80BF72C() == TRUE) + break; + if (sub_8107F3C() == TRUE) + break; + if (MenuHelpers_LinkSomething() == TRUE) + break; + } +} + +bool8 sub_8107F3C(void) +{ + u8 taskId; + + switch (gMain.state) + { + case 0: + SetVBlankHBlankCallbacksToNull(); + ClearScheduledBgCopiesToVram(); + gMain.state++; + break; + case 1: + ScanlineEffect_Stop(); + gMain.state++; + break; + case 2: + FreeAllSpritePalettes(); + gMain.state++; + break; + case 3: + ResetPaletteFade(); + gPaletteFade.bufferTransferDisabled = TRUE; + gMain.state++; + break; + case 4: + ResetSpriteData(); + gMain.state++; + break; + case 5: + ResetItemMenuIconState(); + gMain.state++; + break; + case 6: + if (!MenuHelpers_LinkSomething()) + { + ResetTasks(); + } + gMain.state++; + break; + case 7: + if (sub_81081D0()) + { + gUnknown_203AD10->field_10[0] = 0; + gMain.state++; + } + else + { + sub_810813C(); + return TRUE; + } + break; + case 8: + if (sub_8108240() == TRUE) + gMain.state++; + break; + case 9: + sub_810B858(); + gMain.state++; + break; + case 10: + sub_8108E54(); + sub_8108A68(); + sub_8108A84(); + gMain.state++; + break; + case 11: + if (!sub_81083F4()) + { + sub_810813C(); + return TRUE; + } + gMain.state++; + break; + case 12: + sub_810842C(gUnknown_203ACFC.unk6); + gMain.state++; + break; + case 13: + if (gUnknown_203ACFC.location != 3) + sub_81087EC(); + else + sub_810B994(); + gMain.state++; + break; + case 14: + taskId = sub_8108388(gUnknown_203ACFC.location); + gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.unk6], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.unk6]); + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[8] = 0; + gMain.state++; + break; + case 15: + sub_80984FC(gUnknown_203ACFC.unk6); + gMain.state++; + break; + case 16: + sub_8108888(); + sub_81088D8(); + gMain.state++; + break; + case 17: + sub_80985E4(); + gMain.state++; + break; + case 18: + sub_8108C10(); + gMain.state++; + break; + case 19: + if (gUnknown_203ACFC.location == 3) + HelpSystem_SetSomeVariable2(29); + else + HelpSystem_SetSomeVariable2(9); + gPaletteFade.bufferTransferDisabled = FALSE; + gMain.state++; + break; + default: + SetVBlankCallback(sub_8107EFC); + SetMainCallback2(sub_8107EE0); + return TRUE; + } + return FALSE; +} + +void sub_810813C(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); + CreateTask(sub_8108178, 0); + SetVBlankCallback(sub_8107EFC); + SetMainCallback2(sub_8107EE0); +} + +void sub_8108178(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(gUnknown_203ACFC.bagCallback); + sub_8108B04(); + DestroyTask(taskId); + } +} + +void sub_81081AC(void) +{ + gUnknown_203AD10 = NULL; + gUnknown_203AD14 = NULL; + gUnknown_203AD18 = NULL; + gUnknown_203AD1C = NULL; +} From dbf3ac402d94be993839bddd109e3cfaef8e3dea Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 17 Jan 2020 16:40:53 -0500 Subject: [PATCH 07/22] through sub_8108560 --- asm/item_menu.s | 475 -------------------------------------------- include/gflib.h | 18 ++ include/graphics.h | 11 +- include/item_menu.h | 4 +- src/item_menu.c | 180 ++++++++++++++++- 5 files changed, 196 insertions(+), 492 deletions(-) create mode 100644 include/gflib.h diff --git a/asm/item_menu.s b/asm/item_menu.s index f3af32b36..c90b708cd 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -5,481 +5,6 @@ .text - thumb_func_start sub_81081D0 -sub_81081D0: @ 81081D0 - push {r4,r5,lr} - bl ResetAllBgsCoordinatesAndBgCntRegs - ldr r5, _08108230 @ =gUnknown_203AD14 - movs r4, 0x80 - lsls r4, 4 - adds r0, r4, 0 - bl Alloc - str r0, [r5] - cmp r0, 0 - beq _08108238 - movs r1, 0 - adds r2, r4, 0 - bl memset - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _08108234 @ =gUnknown_8452CF4 - movs r0, 0 - movs r2, 0x2 - bl InitBgsFromTemplates - ldr r1, [r5] - movs r0, 0x1 - bl SetBgTilemapBuffer - movs r0, 0x1 - bl ScheduleBgCopyTilemapToVram - movs r1, 0xC1 - lsls r1, 6 - movs r0, 0 - bl SetGpuReg - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x1 - b _0810823A - .align 2, 0 -_08108230: .4byte gUnknown_203AD14 -_08108234: .4byte gUnknown_8452CF4 -_08108238: - movs r0, 0 -_0810823A: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81081D0 - - thumb_func_start sub_8108240 -sub_8108240: @ 8108240 - push {r4,lr} - sub sp, 0x4 - ldr r4, _0810825C @ =gUnknown_203AD10 - ldr r0, [r4] - ldrb r0, [r0, 0x10] - cmp r0, 0x5 - bls _08108250 - b _08108368 -_08108250: - lsls r0, 2 - ldr r1, _08108260 @ =_08108264 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0810825C: .4byte gUnknown_203AD10 -_08108260: .4byte _08108264 - .align 2, 0 -_08108264: - .4byte _0810827C - .4byte _08108298 - .4byte _081082D8 - .4byte _08108310 - .4byte _08108340 - .4byte _0810834C -_0810827C: - bl ResetTempTileDataBuffers - ldr r1, _08108294 @ =gUnknown_8E830CC - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - b _08108352 - .align 2, 0 -_08108294: .4byte gUnknown_8E830CC -_08108298: - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0810837C - ldr r0, _081082B8 @ =gUnknown_203ACFC - ldrb r0, [r0, 0x4] - cmp r0, 0x3 - beq _081082C4 - ldr r0, _081082BC @ =gUnknown_8E832C0 - ldr r1, _081082C0 @ =gUnknown_203AD14 - ldr r1, [r1] - bl LZDecompressWram - b _08108352 - .align 2, 0 -_081082B8: .4byte gUnknown_203ACFC -_081082BC: .4byte gUnknown_8E832C0 -_081082C0: .4byte gUnknown_203AD14 -_081082C4: - ldr r0, _081082D0 @ =gUnknown_8E83444 - ldr r1, _081082D4 @ =gUnknown_203AD14 - ldr r1, [r1] - bl LZDecompressWram - b _08108352 - .align 2, 0 -_081082D0: .4byte gUnknown_8E83444 -_081082D4: .4byte gUnknown_203AD14 -_081082D8: - ldr r0, _08108304 @ =gUnknown_8E835B4 - movs r1, 0 - movs r2, 0x60 - bl LoadCompressedPalette - bl sub_810ADAC - lsls r0, 24 - cmp r0, 0 - bne _08108352 - ldr r0, _08108308 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x8] - cmp r0, 0 - beq _08108352 - ldr r0, _0810830C @ =gUnknown_8E83604 - movs r1, 0 - movs r2, 0x20 - bl LoadCompressedPalette - b _08108352 - .align 2, 0 -_08108304: .4byte gUnknown_8E835B4 -_08108308: .4byte gSaveBlock2Ptr -_0810830C: .4byte gUnknown_8E83604 -_08108310: - bl sub_810ADAC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08108326 - ldr r0, _0810832C @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x8] - cmp r0, 0 - bne _08108334 -_08108326: - ldr r0, _08108330 @ =gUnknown_83D41E4 - b _0810834E - .align 2, 0 -_0810832C: .4byte gSaveBlock2Ptr -_08108330: .4byte gUnknown_83D41E4 -_08108334: - ldr r0, _0810833C @ =gUnknown_83D41EC - bl LoadCompressedSpriteSheet - b _08108352 - .align 2, 0 -_0810833C: .4byte gUnknown_83D41EC -_08108340: - ldr r0, _08108348 @ =gUnknown_83D41F4 - bl LoadCompressedSpritePalette - b _08108352 - .align 2, 0 -_08108348: .4byte gUnknown_83D41F4 -_0810834C: - ldr r0, _08108360 @ =gBagSwapSpriteSheet -_0810834E: - bl LoadCompressedSpriteSheet -_08108352: - ldr r0, _08108364 @ =gUnknown_203AD10 - ldr r1, [r0] - ldrb r0, [r1, 0x10] - adds r0, 0x1 - strb r0, [r1, 0x10] - b _0810837C - .align 2, 0 -_08108360: .4byte gBagSwapSpriteSheet -_08108364: .4byte gUnknown_203AD10 -_08108368: - ldr r0, _08108378 @ =gBagSwapSpritePalette - bl LoadCompressedSpritePalette - ldr r1, [r4] - movs r0, 0 - strb r0, [r1, 0x10] - movs r0, 0x1 - b _0810837E - .align 2, 0 -_08108378: .4byte gBagSwapSpritePalette -_0810837C: - movs r0, 0 -_0810837E: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8108240 - - thumb_func_start sub_8108388 -sub_8108388: @ 8108388 - push {lr} - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x6 - cmp r0, 0x4 - bhi _081083E0 - lsls r0, 2 - ldr r1, _081083A0 @ =_081083A4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081083A0: .4byte _081083A4 - .align 2, 0 -_081083A4: - .4byte _081083B8 - .4byte _081083D0 - .4byte _081083D8 - .4byte _081083C0 - .4byte _081083C8 -_081083B8: - ldr r0, _081083BC @ =sub_810AF9C - b _081083E2 - .align 2, 0 -_081083BC: .4byte sub_810AF9C -_081083C0: - ldr r0, _081083C4 @ =sub_810B1D4 - b _081083E2 - .align 2, 0 -_081083C4: .4byte sub_810B1D4 -_081083C8: - ldr r0, _081083CC @ =sub_810B5D4 - b _081083E2 - .align 2, 0 -_081083CC: .4byte sub_810B5D4 -_081083D0: - ldr r0, _081083D4 @ =sub_810B4BC - b _081083E2 - .align 2, 0 -_081083D4: .4byte sub_810B4BC -_081083D8: - ldr r0, _081083DC @ =sub_810B378 - b _081083E2 - .align 2, 0 -_081083DC: .4byte sub_810B378 -_081083E0: - ldr r0, _081083F0 @ =sub_8108F0C -_081083E2: - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_081083F0: .4byte sub_8108F0C - thumb_func_end sub_8108388 - - thumb_func_start sub_81083F4 -sub_81083F4: @ 81083F4 - push {r4,lr} - ldr r4, _08108418 @ =gUnknown_203AD18 - movs r0, 0xAC - lsls r0, 1 - bl Alloc - str r0, [r4] - cmp r0, 0 - beq _08108424 - ldr r4, _0810841C @ =gUnknown_203AD1C - ldr r0, _08108420 @ =0x00000331 - bl Alloc - str r0, [r4] - cmp r0, 0 - beq _08108424 - movs r0, 0x1 - b _08108426 - .align 2, 0 -_08108418: .4byte gUnknown_203AD18 -_0810841C: .4byte gUnknown_203AD1C -_08108420: .4byte 0x00000331 -_08108424: - movs r0, 0 -_08108426: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81083F4 - - thumb_func_start sub_810842C -sub_810842C: @ 810842C - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r7, r0, 24 - lsls r1, r7, 3 - ldr r0, _0810853C @ =gBagPockets - adds r1, r0 - mov r8, r1 - movs r6, 0 - ldr r0, _08108540 @ =gUnknown_203AD10 - ldr r0, [r0] - adds r0, 0xA - adds r0, r7 - ldrb r0, [r0] - cmp r6, r0 - bcs _0810848C - ldr r5, _08108544 @ =gUnknown_203AD1C -_08108450: - lsls r2, r6, 2 - adds r4, r2, r6 - lsls r4, 2 - subs r4, r6 - ldr r0, [r5] - adds r0, r4 - mov r3, r8 - ldr r1, [r3] - adds r2, r1 - ldrh r1, [r2] - bl sub_8108560 - ldr r0, _08108548 @ =gUnknown_203AD18 - ldr r0, [r0] - lsls r1, r6, 3 - adds r1, r0 - ldr r0, [r5] - adds r0, r4 - str r0, [r1] - str r6, [r1, 0x4] - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - ldr r0, _08108540 @ =gUnknown_203AD10 - ldr r0, [r0] - adds r0, 0xA - adds r0, r7 - ldrb r0, [r0] - cmp r6, r0 - bcc _08108450 -_0810848C: - ldr r5, _08108544 @ =gUnknown_203AD1C - lsls r4, r6, 2 - adds r4, r6 - lsls r4, 2 - subs r4, r6 - ldr r0, [r5] - adds r0, r4 - ldr r1, _0810854C @ =gUnknown_8452F60 - bl StringCopy - ldr r0, [r5] - adds r0, r4 - ldr r1, _08108550 @ =gFameCheckerText_Cancel - bl StringAppend - ldr r0, _08108548 @ =gUnknown_203AD18 - ldr r2, [r0] - lsls r1, r6, 3 - adds r1, r2 - ldr r0, [r5] - adds r0, r4 - str r0, [r1] - str r6, [r1, 0x4] - ldr r3, _08108554 @ =gMultiuseListMenuTemplate - str r2, [r3] - ldr r0, _08108540 @ =gUnknown_203AD10 - ldr r2, [r0] - adds r0, r2, 0 - adds r0, 0xA - adds r0, r7 - ldrb r0, [r0] - adds r0, 0x1 - movs r1, 0 - strh r0, [r3, 0xC] - strb r1, [r3, 0x10] - strb r1, [r3, 0x11] - movs r0, 0x9 - strb r0, [r3, 0x12] - movs r0, 0x1 - strb r0, [r3, 0x13] - ldrb r0, [r3, 0x16] - movs r4, 0x8 - negs r4, r4 - ands r4, r0 - movs r0, 0x39 - negs r0, r0 - ands r4, r0 - movs r0, 0x10 - orrs r4, r0 - strb r4, [r3, 0x16] - ldrb r0, [r3, 0x14] - movs r1, 0x10 - negs r1, r1 - ands r1, r0 - movs r5, 0x2 - orrs r1, r5 - strb r1, [r3, 0x14] - adds r2, 0xD - adds r2, r7 - ldrb r0, [r2] - strh r0, [r3, 0xE] - ldrb r0, [r3, 0x17] - movs r2, 0x40 - negs r2, r2 - ands r2, r0 - orrs r2, r5 - movs r0, 0xF - ands r1, r0 - movs r0, 0x20 - orrs r1, r0 - strb r1, [r3, 0x14] - movs r0, 0x30 - strb r0, [r3, 0x15] - ldr r0, _08108558 @ =sub_81085A4 - str r0, [r3, 0x4] - ldr r0, _0810855C @ =sub_8108654 - str r0, [r3, 0x8] - movs r0, 0x3F - ands r2, r0 - strb r2, [r3, 0x17] - ands r4, r0 - strb r4, [r3, 0x16] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810853C: .4byte gBagPockets -_08108540: .4byte gUnknown_203AD10 -_08108544: .4byte gUnknown_203AD1C -_08108548: .4byte gUnknown_203AD18 -_0810854C: .4byte gUnknown_8452F60 -_08108550: .4byte gFameCheckerText_Cancel -_08108554: .4byte gMultiuseListMenuTemplate -_08108558: .4byte sub_81085A4 -_0810855C: .4byte sub_8108654 - thumb_func_end sub_810842C - - thumb_func_start sub_8108560 -sub_8108560: @ 8108560 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r1, 16 - lsrs r5, r1, 16 - ldr r0, _0810857C @ =0xfe940000 - adds r1, r0 - lsrs r1, 16 - cmp r1, 0x1 - bhi _08108584 - ldr r1, _08108580 @ =gUnknown_8452F66 - adds r0, r4, 0 - bl StringCopy - b _0810858C - .align 2, 0 -_0810857C: .4byte 0xfe940000 -_08108580: .4byte gUnknown_8452F66 -_08108584: - ldr r1, _081085A0 @ =gUnknown_8452F60 - adds r0, r4, 0 - bl StringCopy -_0810858C: - adds r0, r5, 0 - bl ItemId_GetName - adds r1, r0, 0 - adds r0, r4, 0 - bl StringAppend - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081085A0: .4byte gUnknown_8452F60 - thumb_func_end sub_8108560 - thumb_func_start sub_81085A4 sub_81085A4: @ 81085A4 push {r4,r5,lr} diff --git a/include/gflib.h b/include/gflib.h new file mode 100644 index 000000000..a6dfc62df --- /dev/null +++ b/include/gflib.h @@ -0,0 +1,18 @@ +#ifndef GUARD_GFLIB_H +#define GUARD_GFLIB_H + +#include "global.h" + +#include "bg.h" +#include "palette.h" +#include "gpu_regs.h" +#include "dma3.h" +#include "malloc.h" +#include "sound.h" +#include "text.h" +#include "sprite.h" +#include "window.h" +#include "blit.h" +#include "string_util.h" + +#endif //GUARD_GFLIB_H diff --git a/include/graphics.h b/include/graphics.h index a668364bd..eb9a9a20d 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -1,7 +1,3 @@ -// -// Created by scott on 10/21/2017. -// - #ifndef GUARD_GRAPHICS_H #define GUARD_GRAPHICS_H @@ -4861,4 +4857,11 @@ extern const u16 gBattleInterface_BallStatusBarPal[]; extern const u16 gBattleInterface_BallDisplayPal[]; extern const u16 gUnknown_8D12404[]; +// item_menu +extern const u32 gUnknown_8E830CC[]; +extern const u32 gUnknown_8E832C0[]; +extern const u32 gUnknown_8E83444[]; +extern const u32 gUnknown_8E835B4[]; +extern const u32 gUnknown_8E83604[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/item_menu.h b/include/item_menu.h index d141c6601..343fae393 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -12,8 +12,8 @@ struct BagStruct { void (*bagCallback)(void); u8 location; - u8 pocket; - u16 unk6; + u8 unk5; + u16 pocket; u16 itemsAbove[3]; u16 cursorPos[3]; }; diff --git a/src/item_menu.c b/src/item_menu.c index 9128d0856..ce964b647 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -1,17 +1,18 @@ #include "global.h" +#include "gflib.h" #include "bag.h" #include "battle_controllers.h" -#include "bg.h" +#include "decompress.h" +#include "graphics.h" #include "help_system.h" +#include "item.h" #include "item_menu.h" #include "item_menu_icons.h" #include "list_menu.h" -#include "malloc.h" #include "new_menu_helpers.h" #include "overworld.h" -#include "palette.h" #include "scanline_effect.h" -#include "text.h" +#include "strings.h" #include "constants/items.h" struct BagMenuAlloc @@ -24,7 +25,8 @@ struct BagMenuAlloc u16 field_06; u8 field_08; u8 field_09; - u8 filler_0A[6]; + u8 field_0A[3]; + u8 field_0D[3]; u8 field_10[4]; }; @@ -32,7 +34,7 @@ EWRAM_DATA struct BagStruct gUnknown_203ACFC = {}; EWRAM_DATA struct BagMenuAlloc * gUnknown_203AD10 = NULL; EWRAM_DATA void * gUnknown_203AD14 = NULL; EWRAM_DATA struct ListMenuItem * gUnknown_203AD18 = NULL; -EWRAM_DATA u8 (*gUnknown_203AD1C)[20] = NULL; +EWRAM_DATA u8 (*gUnknown_203AD1C)[19] = NULL; void sub_8107F10(void); bool8 sub_8107F3C(void); @@ -43,7 +45,10 @@ bool8 sub_81081D0(void); bool8 sub_8108240(void); u8 sub_8108388(u8 location); bool8 sub_81083F4(void); -void sub_810842C(u8 a0); +void sub_810842C(u8 pocket); +void sub_81085A4(s32 itemIndex, bool8 onInit, struct ListMenu *list); +void sub_8108654(u8 windowId, s32 itemId, u8 y); +void sub_8108560(u8 *dest, u16 itemId); void sub_81087EC(void); void sub_8108888(void); void sub_81088D8(void); @@ -52,6 +57,17 @@ void sub_8108A84(void); void sub_8108B04(void); void sub_8108C10(void); void sub_8108E54(void); +void sub_8108F0C(u8 taskId); +bool8 sub_810ADAC(void); +void sub_810AF9C(u8 taskId); +void sub_810B1D4(u8 taskId); +void sub_810B378(u8 taskId); +void sub_810B4BC(u8 taskId); +void sub_810B5D4(u8 taskId); + +extern const struct BgTemplate gUnknown_8452CF4[2]; +extern const u8 gUnknown_8452F60[]; +extern const u8 gUnknown_8452F66[]; void GoToBagMenu(u8 location, u8 a1, MainCallback a2) { @@ -84,7 +100,7 @@ void GoToBagMenu(u8 location, u8 a1, MainCallback a2) gUnknown_203AD10->field_10[i] = 0; } if (a1 == 0 || a1 == 1 || a1 == 2) - gUnknown_203ACFC.unk6 = a1; + gUnknown_203ACFC.pocket = a1; gTextFlags.autoScroll = FALSE; gSpecialVar_ItemId = ITEM_NONE; SetMainCallback2(sub_8107F10); @@ -204,7 +220,7 @@ bool8 sub_8107F3C(void) gMain.state++; break; case 12: - sub_810842C(gUnknown_203ACFC.unk6); + sub_810842C(gUnknown_203ACFC.pocket); gMain.state++; break; case 13: @@ -216,13 +232,13 @@ bool8 sub_8107F3C(void) break; case 14: taskId = sub_8108388(gUnknown_203ACFC.location); - gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.unk6], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.unk6]); + gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); gTasks[taskId].data[3] = 0; gTasks[taskId].data[8] = 0; gMain.state++; break; case 15: - sub_80984FC(gUnknown_203ACFC.unk6); + sub_80984FC(gUnknown_203ACFC.pocket); gMain.state++; break; case 16: @@ -279,3 +295,145 @@ void sub_81081AC(void) gUnknown_203AD18 = NULL; gUnknown_203AD1C = NULL; } + +bool8 sub_81081D0(void) +{ + void **buff; + ResetAllBgsCoordinatesAndBgCntRegs(); + buff = &gUnknown_203AD14; + *buff = Alloc(0x800); + if (*buff == NULL) + return FALSE; + memset(*buff, 0, 0x800); + ResetBgsAndClearDma3BusyFlags(FALSE); + InitBgsFromTemplates(0, gUnknown_8452CF4, NELEMS(gUnknown_8452CF4)); + SetBgTilemapBuffer(1, *buff); + ScheduleBgCopyTilemapToVram(1); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON); + ShowBg(0); + ShowBg(1); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + return TRUE; +} + +bool8 sub_8108240(void) +{ + switch (gUnknown_203AD10->field_10[0]) + { + case 0: + ResetTempTileDataBuffers(); + DecompressAndCopyTileDataToVram(1, gUnknown_8E830CC, 0, 0, 0); + gUnknown_203AD10->field_10[0]++; + break; + case 1: + if (FreeTempTileDataBuffersIfPossible() != TRUE) + { + if (gUnknown_203ACFC.location != 3) + LZDecompressWram(gUnknown_8E832C0, gUnknown_203AD14); + else + LZDecompressWram(gUnknown_8E83444, gUnknown_203AD14); + gUnknown_203AD10->field_10[0]++; + } + break; + case 2: + LoadCompressedPalette(gUnknown_8E835B4, 0x00, 0x60); + if (!sub_810ADAC() && gSaveBlock2Ptr->playerGender != MALE) + LoadCompressedPalette(gUnknown_8E83604, 0x00, 0x20); + gUnknown_203AD10->field_10[0]++; + break; + case 3: + if (sub_810ADAC() == TRUE || gSaveBlock2Ptr->playerGender == MALE) + LoadCompressedSpriteSheet(&gUnknown_83D41E4); + else + LoadCompressedSpriteSheet(&gUnknown_83D41EC); + gUnknown_203AD10->field_10[0]++; + break; + case 4: + LoadCompressedSpritePalette(&gUnknown_83D41F4); + gUnknown_203AD10->field_10[0]++; + break; + case 5: + LoadCompressedSpriteSheet(&gBagSwapSpriteSheet); + gUnknown_203AD10->field_10[0]++; + break; + default: + LoadCompressedSpritePalette(&gBagSwapSpritePalette); + gUnknown_203AD10->field_10[0] = 0; + return TRUE; + } + + return FALSE; +} + +u8 sub_8108388(u8 location) +{ + switch (location) + { + case 6: + return CreateTask(sub_810AF9C, 0); + case 9: + return CreateTask(sub_810B1D4, 0); + case 10: + return CreateTask(sub_810B5D4, 0); + case 7: + return CreateTask(sub_810B4BC, 0); + case 8: + return CreateTask(sub_810B378, 0); + default: + return CreateTask(sub_8108F0C, 0); + } +} + +bool8 sub_81083F4(void) +{ + gUnknown_203AD18 = Alloc(43 * sizeof(struct ListMenuItem)); + if (gUnknown_203AD18 == NULL) + return FALSE; + gUnknown_203AD1C = Alloc(43 * 19); + if (gUnknown_203AD1C == NULL) + return FALSE; + return TRUE; +} + +void sub_810842C(u8 pocket) +{ + u16 i; + struct BagPocket * bagPocket = &gBagPockets[pocket]; + for (i = 0; i < gUnknown_203AD10->field_0A[pocket]; i++) + { + sub_8108560(gUnknown_203AD1C[i], bagPocket->itemSlots[i].itemId); + gUnknown_203AD18[i].label = gUnknown_203AD1C[i]; + gUnknown_203AD18[i].index = i; + } + StringCopy(gUnknown_203AD1C[i], gUnknown_8452F60); + StringAppend(gUnknown_203AD1C[i], gFameCheckerText_Cancel); + gUnknown_203AD18[i].label = gUnknown_203AD1C[i]; + gUnknown_203AD18[i].index = i; + gMultiuseListMenuTemplate.items = gUnknown_203AD18; + gMultiuseListMenuTemplate.totalItems = gUnknown_203AD10->field_0A[pocket] + 1; + gMultiuseListMenuTemplate.windowId = 0; + gMultiuseListMenuTemplate.header_X = 0; + gMultiuseListMenuTemplate.item_X = 9; + gMultiuseListMenuTemplate.cursor_X = 1; + gMultiuseListMenuTemplate.lettersSpacing = 0; + gMultiuseListMenuTemplate.itemVerticalPadding = 2; + gMultiuseListMenuTemplate.upText_Y = 2; + gMultiuseListMenuTemplate.maxShowed = gUnknown_203AD10->field_0D[pocket]; + gMultiuseListMenuTemplate.fontId = 2; + gMultiuseListMenuTemplate.cursorPal = 2; + gMultiuseListMenuTemplate.fillValue = 0; + gMultiuseListMenuTemplate.cursorShadowPal = 3; + gMultiuseListMenuTemplate.moveCursorFunc = sub_81085A4; + gMultiuseListMenuTemplate.itemPrintFunc = sub_8108654; + gMultiuseListMenuTemplate.cursorKind = 0; + gMultiuseListMenuTemplate.scrollMultiple = 0; +} + +void sub_8108560(u8 *dest, u16 itemId) +{ + if (itemId == ITEM_TM_CASE || itemId == ITEM_BERRY_POUCH) + StringCopy(dest, gUnknown_8452F66); + else + StringCopy(dest, gUnknown_8452F60); + StringAppend(dest, ItemId_GetName(itemId)); +} From 881199142ccac48aa975d0b59be07dfd78ad70af Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 17 Jan 2020 22:23:20 -0500 Subject: [PATCH 08/22] through bag_menu_print_cursor --- asm/item_menu.s | 284 ------------------------------------------------ include/bag.h | 2 +- src/bag.c | 2 +- src/item_menu.c | 71 +++++++++++- 4 files changed, 72 insertions(+), 287 deletions(-) diff --git a/asm/item_menu.s b/asm/item_menu.s index c90b708cd..8e0d2e137 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -5,290 +5,6 @@ .text - thumb_func_start sub_81085A4 -sub_81085A4: @ 81085A4 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0x1 - beq _081085BA - movs r0, 0xF5 - bl PlaySE - bl sub_8098580 -_081085BA: - ldr r4, _08108604 @ =gUnknown_203AD10 - ldr r1, [r4] - ldrb r0, [r1, 0x4] - cmp r0, 0xFF - bne _08108644 - ldrb r1, [r1, 0x5] - lsls r1, 26 - lsrs r1, 30 - movs r0, 0x1 - eors r0, r1 - bl DestroyItemMenuIcon - ldr r2, [r4] - ldr r0, _08108608 @ =gUnknown_203ACFC - ldrh r1, [r0, 0x6] - adds r0, r2, 0 - adds r0, 0xA - adds r0, r1 - ldrb r0, [r0] - cmp r0, r5 - beq _0810860C - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r5, 16 - lsrs r1, 16 - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r0, 16 - ldr r1, [r4] - ldrb r1, [r1, 0x5] - lsls r1, 26 - lsrs r1, 30 - bl CreateItemMenuIcon - b _08108618 - .align 2, 0 -_08108604: .4byte gUnknown_203AD10 -_08108608: .4byte gUnknown_203ACFC -_0810860C: - ldr r0, _0810864C @ =0x00000177 - ldrb r1, [r2, 0x5] - lsls r1, 26 - lsrs r1, 30 - bl CreateItemMenuIcon -_08108618: - ldr r4, _08108650 @ =gUnknown_203AD10 - ldr r3, [r4] - ldrb r2, [r3, 0x5] - lsls r0, r2, 26 - lsrs r0, 30 - movs r1, 0x1 - eors r1, r0 - lsls r1, 4 - movs r0, 0x31 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, 0x5] - ldr r0, [r4] - ldrb r1, [r0, 0x5] - movs r0, 0xC0 - ands r0, r1 - cmp r0, 0 - bne _08108644 - adds r0, r5, 0 - bl sub_8108818 -_08108644: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0810864C: .4byte 0x00000177 -_08108650: .4byte gUnknown_203AD10 - thumb_func_end sub_81085A4 - - thumb_func_start sub_8108654 -sub_8108654: @ 8108654 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - adds r4, r1, 0 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r2, 24 - lsrs r6, r2, 24 - ldr r0, _08108684 @ =gUnknown_203AD10 - ldr r0, [r0] - ldrb r1, [r0, 0x4] - cmp r1, 0xFF - beq _08108690 - lsls r0, r4, 24 - lsrs r0, 24 - cmp r1, r0 - bne _08108688 - adds r0, r6, 0 - movs r1, 0x2 - bl bag_menu_print_cursor - b _08108690 - .align 2, 0 -_08108684: .4byte gUnknown_203AD10 -_08108688: - adds r0, r6, 0 - movs r1, 0xFF - bl bag_menu_print_cursor -_08108690: - movs r0, 0x2 - negs r0, r0 - cmp r4, r0 - beq _08108752 - ldr r0, _08108718 @ =gUnknown_203AD10 - ldr r0, [r0] - ldr r5, _0810871C @ =gUnknown_203ACFC - ldrh r1, [r5, 0x6] - adds r0, 0xA - adds r0, r1 - ldrb r0, [r0] - cmp r0, r4 - beq _08108752 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r0, 24 - lsls r4, 16 - lsrs r4, 16 - adds r1, r4, 0 - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r7, r0, 16 - ldrb r0, [r5, 0x6] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - bl BagGetQuantityByPocketPosition - lsls r0, 16 - lsrs r4, r0, 16 - ldrh r0, [r5, 0x6] - cmp r0, 0x1 - beq _0810872C - adds r0, r7, 0 - bl itemid_is_unique - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _0810872C - ldr r0, _08108720 @ =gStringVar1 - adds r1, r4, 0 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - ldr r4, _08108724 @ =gStringVar4 - ldr r1, _08108728 @ =gText_TimesStrVar1 - adds r0, r4, 0 - bl StringExpandPlaceholders - str r6, [sp] - str r5, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0xFF - str r0, [sp, 0xC] - movs r0, 0x1 - str r0, [sp, 0x10] - mov r0, r8 - movs r1, 0 - adds r2, r4, 0 - movs r3, 0x6E - bl sub_810B8F0 - b _08108752 - .align 2, 0 -_08108718: .4byte gUnknown_203AD10 -_0810871C: .4byte gUnknown_203ACFC -_08108720: .4byte gStringVar1 -_08108724: .4byte gStringVar4 -_08108728: .4byte gText_TimesStrVar1 -_0810872C: - ldr r0, _08108760 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r1, _08108764 @ =0x00000296 - adds r0, r1 - ldrh r0, [r0] - cmp r0, 0 - beq _08108752 - cmp r0, r7 - bne _08108752 - ldr r1, _08108768 @ =gUnknown_8452F7C - movs r0, 0x18 - str r0, [sp] - movs r0, 0x10 - str r0, [sp, 0x4] - mov r0, r8 - movs r2, 0x70 - adds r3, r6, 0 - bl BlitBitmapToWindow -_08108752: - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08108760: .4byte gSaveBlock1Ptr -_08108764: .4byte 0x00000296 -_08108768: .4byte gUnknown_8452F7C - thumb_func_end sub_8108654 - - thumb_func_start bag_menu_print_cursor_ -bag_menu_print_cursor_: @ 810876C - push {r4,lr} - adds r4, r1, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r4, 24 - lsrs r4, 24 - bl ListMenuGetYCoordForPrintingArrowCursor - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - bl bag_menu_print_cursor - pop {r4} - pop {r0} - bx r0 - thumb_func_end bag_menu_print_cursor_ - - thumb_func_start bag_menu_print_cursor -bag_menu_print_cursor: @ 810878C - push {r4,r5,lr} - sub sp, 0x14 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0xFF - bne _081087C8 - movs r0, 0x2 - movs r1, 0 - bl GetMenuCursorDimensionByFont - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x2 - movs r1, 0x1 - bl GetMenuCursorDimensionByFont - lsls r0, 24 - lsrs r0, 24 - str r4, [sp] - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0x1 - adds r3, r5, 0 - bl FillWindowPixelRect - b _081087DE -_081087C8: - ldr r2, _081087E8 @ =gFameCheckerText_ListMenuCursor - str r5, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - str r1, [sp, 0x10] - movs r1, 0x2 - movs r3, 0x1 - bl sub_810B8F0 -_081087DE: - add sp, 0x14 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081087E8: .4byte gFameCheckerText_ListMenuCursor - thumb_func_end bag_menu_print_cursor - thumb_func_start sub_81087EC sub_81087EC: @ 81087EC push {lr} diff --git a/include/bag.h b/include/bag.h index 8c085a211..321a48ab0 100644 --- a/include/bag.h +++ b/include/bag.h @@ -4,7 +4,7 @@ #include "menu_helpers.h" void sub_810B858(void); -void sub_810B8F0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, s8 speed, u8 colorIdx); +void sub_810B8F0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); void sub_810B958(const u8 * str); void sub_810B994(void); u8 sub_810B9DC(u8 a0, u8 a1); diff --git a/src/bag.c b/src/bag.c index c30bc626d..4a962bec6 100644 --- a/src/bag.c +++ b/src/bag.c @@ -227,7 +227,7 @@ void sub_810B858(void) } } -void sub_810B8F0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, s8 speed, u8 colorIdx) +void sub_810B8F0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx) { AddTextPrinterParameterized4(windowId, fontId, x, y, letterSpacing, lineSpacing, gUnknown_84530B8[colorIdx], speed, str); } diff --git a/src/item_menu.c b/src/item_menu.c index ce964b647..578170c17 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -14,6 +14,7 @@ #include "scanline_effect.h" #include "strings.h" #include "constants/items.h" +#include "constants/songs.h" struct BagMenuAlloc { @@ -46,10 +47,12 @@ bool8 sub_8108240(void); u8 sub_8108388(u8 location); bool8 sub_81083F4(void); void sub_810842C(u8 pocket); +void sub_8108560(u8 *dest, u16 itemId); void sub_81085A4(s32 itemIndex, bool8 onInit, struct ListMenu *list); void sub_8108654(u8 windowId, s32 itemId, u8 y); -void sub_8108560(u8 *dest, u16 itemId); +void bag_menu_print_cursor(u8 y, u8 colorIdx); void sub_81087EC(void); +void sub_8108818(s32 itemIndex); void sub_8108888(void); void sub_81088D8(void); void sub_8108A68(void); @@ -68,6 +71,7 @@ void sub_810B5D4(u8 taskId); extern const struct BgTemplate gUnknown_8452CF4[2]; extern const u8 gUnknown_8452F60[]; extern const u8 gUnknown_8452F66[]; +extern const u8 gUnknown_8452F7C[]; void GoToBagMenu(u8 location, u8 a1, MainCallback a2) { @@ -437,3 +441,68 @@ void sub_8108560(u8 *dest, u16 itemId) StringCopy(dest, gUnknown_8452F60); StringAppend(dest, ItemId_GetName(itemId)); } + +void sub_81085A4(s32 itemIndex, bool8 onInit, struct ListMenu *list) +{ + if (onInit != TRUE) + { + PlaySE(SE_BAG1); + sub_8098580(); + } + if (gUnknown_203AD10->field_04 == 0xFF) + { + DestroyItemMenuIcon(gUnknown_203AD10->field_05_4 ^ 1); + if (gUnknown_203AD10->field_0A[gUnknown_203ACFC.pocket] != itemIndex) + CreateItemMenuIcon(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemIndex), gUnknown_203AD10->field_05_4); + else + CreateItemMenuIcon(ITEM_N_A, gUnknown_203AD10->field_05_4); + gUnknown_203AD10->field_05_4 ^= 1; + if (gUnknown_203AD10->field_05_6 == 0) + sub_8108818(itemIndex); + } +} + +void sub_8108654(u8 windowId, s32 itemId, u8 y) +{ + u16 bagItemId; + u16 bagItemQuantity; + if (gUnknown_203AD10->field_04 != 0xFF) + { + if (gUnknown_203AD10->field_04 == (u8)itemId) + bag_menu_print_cursor(y, 2); + else + bag_menu_print_cursor(y, 0xFF); + } + if (itemId != -2 && gUnknown_203AD10->field_0A[gUnknown_203ACFC.pocket] != itemId) + { + bagItemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemId); + bagItemQuantity = BagGetQuantityByPocketPosition(gUnknown_203ACFC.pocket + 1, itemId); + if (gUnknown_203ACFC.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(bagItemId)) + { + ConvertIntToDecimalStringN(gStringVar1, bagItemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); + sub_810B8F0(windowId, 0, gStringVar4, 0x6e, y, 0, 0, 0xFF, 1); + } + else if (gSaveBlock1Ptr->registeredItem != ITEM_NONE && gSaveBlock1Ptr->registeredItem == bagItemId) + { + BlitBitmapToWindow(windowId, gUnknown_8452F7C, 0x70, y, 0x18, 0x10); + } + } +} + +void bag_menu_print_cursor_(u8 taskId, u8 colorIdx) +{ + bag_menu_print_cursor(ListMenuGetYCoordForPrintingArrowCursor(taskId), colorIdx); +} + +void bag_menu_print_cursor(u8 y, u8 colorIdx) +{ + if (colorIdx == 0xFF) + { + FillWindowPixelRect(0, PIXEL_FILL(0), 1, y, GetMenuCursorDimensionByFont(2, 0), GetMenuCursorDimensionByFont(2, 1)); + } + else + { + sub_810B8F0(0, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, colorIdx); + } +} From 2ce545fc216cc07ac9b9bf833a6ed410d90ab420 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 18 Jan 2020 09:23:48 -0500 Subject: [PATCH 09/22] through sub_810899C --- asm/item_menu.s | 253 +--------------------------------------------- include/bag.h | 2 +- include/strings.h | 3 + src/bag.c | 2 +- src/item_menu.c | 92 +++++++++++++++++ sym_ewram.txt | 11 +- 6 files changed, 102 insertions(+), 261 deletions(-) diff --git a/asm/item_menu.s b/asm/item_menu.s index 8e0d2e137..a6d327eb2 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -5,251 +5,6 @@ .text - thumb_func_start sub_81087EC -sub_81087EC: @ 81087EC - push {lr} - movs r0, 0x2 - movs r1, 0 - bl FillWindowPixelBuffer - ldr r2, _08108810 @ =gUnknown_8452CFC - ldr r0, _08108814 @ =gUnknown_203ACFC - ldrh r1, [r0, 0x6] - lsls r0, r1, 2 - adds r0, r2 - ldr r0, [r0] - lsls r1, 24 - lsrs r1, 24 - bl sub_810B958 - pop {r0} - bx r0 - .align 2, 0 -_08108810: .4byte gUnknown_8452CFC -_08108814: .4byte gUnknown_203ACFC - thumb_func_end sub_81087EC - - thumb_func_start sub_8108818 -sub_8108818: @ 8108818 - push {r4,lr} - sub sp, 0x14 - adds r2, r0, 0 - ldr r0, _0810884C @ =gUnknown_203AD10 - ldr r0, [r0] - ldr r1, _08108850 @ =gUnknown_203ACFC - ldrh r1, [r1, 0x6] - adds r0, 0xA - adds r0, r1 - ldrb r0, [r0] - cmp r2, r0 - beq _08108854 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r2, 16 - lsrs r1, 16 - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r0, 16 - bl ItemId_GetDescription - adds r4, r0, 0 - b _08108856 - .align 2, 0 -_0810884C: .4byte gUnknown_203AD10 -_08108850: .4byte gUnknown_203ACFC -_08108854: - ldr r4, _08108884 @ =gUnknown_84162F5 -_08108856: - movs r0, 0x1 - movs r1, 0 - bl FillWindowPixelBuffer - movs r0, 0x3 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - str r0, [sp, 0xC] - str r0, [sp, 0x10] - movs r0, 0x1 - movs r1, 0x2 - adds r2, r4, 0 - movs r3, 0 - bl sub_810B8F0 - add sp, 0x14 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08108884: .4byte gUnknown_84162F5 - thumb_func_end sub_8108818 - - thumb_func_start sub_8108888 -sub_8108888: @ 8108888 - push {r4,lr} - sub sp, 0x10 - ldr r4, _081088D0 @ =gUnknown_203AD10 - ldr r1, [r4] - ldr r2, _081088D4 @ =gUnknown_203ACFC - ldrh r3, [r2, 0x6] - adds r0, r1, 0 - adds r0, 0xA - adds r0, r3 - ldrb r0, [r0] - adds r1, 0xD - adds r1, r3 - ldrb r1, [r1] - subs r0, r1 - adds r0, 0x1 - str r0, [sp] - movs r0, 0x6E - str r0, [sp, 0x4] - str r0, [sp, 0x8] - ldrh r0, [r2, 0x6] - lsls r0, 1 - adds r2, 0xE - adds r0, r2 - str r0, [sp, 0xC] - movs r0, 0x2 - movs r1, 0xA0 - movs r2, 0x8 - movs r3, 0x68 - bl AddScrollIndicatorArrowPairParameterized - ldr r1, [r4] - strb r0, [r1, 0x8] - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081088D0: .4byte gUnknown_203AD10 -_081088D4: .4byte gUnknown_203ACFC - thumb_func_end sub_8108888 - - thumb_func_start sub_81088D8 -sub_81088D8: @ 81088D8 - push {r4,lr} - ldr r4, _081088FC @ =gUnknown_203AD10 - ldr r0, [r4] - ldrb r1, [r0, 0x5] - movs r0, 0xF - ands r0, r1 - cmp r0, 0x1 - beq _081088F4 - ldr r0, _08108900 @ =gUnknown_8452F6C - ldr r1, _08108904 @ =gUnknown_203AD02 - bl AddScrollIndicatorArrowPair - ldr r1, [r4] - strb r0, [r1, 0x9] -_081088F4: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081088FC: .4byte gUnknown_203AD10 -_08108900: .4byte gUnknown_8452F6C -_08108904: .4byte gUnknown_203AD02 - thumb_func_end sub_81088D8 - - thumb_func_start sub_8108908 -sub_8108908: @ 8108908 - push {r4,lr} - sub sp, 0x10 - ldr r4, _0810893C @ =gUnknown_203AD10 - ldr r1, [r4] - movs r0, 0x1 - strh r0, [r1, 0x6] - movs r0, 0x2 - str r0, [sp] - movs r0, 0x6E - str r0, [sp, 0x4] - str r0, [sp, 0x8] - adds r1, 0x6 - str r1, [sp, 0xC] - movs r0, 0x2 - movs r1, 0x98 - movs r2, 0x48 - movs r3, 0x68 - bl AddScrollIndicatorArrowPairParameterized - ldr r1, [r4] - strb r0, [r1, 0x8] - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0810893C: .4byte gUnknown_203AD10 - thumb_func_end sub_8108908 - - thumb_func_start sub_8108940 -sub_8108940: @ 8108940 - push {r4,lr} - sub sp, 0x10 - ldr r4, _08108974 @ =gUnknown_203AD10 - ldr r1, [r4] - movs r0, 0x1 - strh r0, [r1, 0x6] - movs r0, 0x2 - str r0, [sp] - movs r0, 0x6E - str r0, [sp, 0x4] - str r0, [sp, 0x8] - adds r1, 0x6 - str r1, [sp, 0xC] - movs r0, 0x2 - movs r1, 0xD4 - movs r2, 0x78 - movs r3, 0x98 - bl AddScrollIndicatorArrowPairParameterized - ldr r1, [r4] - strb r0, [r1, 0x8] - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08108974: .4byte gUnknown_203AD10 - thumb_func_end sub_8108940 - - thumb_func_start sub_8108978 -sub_8108978: @ 8108978 - push {r4,lr} - ldr r4, _08108998 @ =gUnknown_203AD10 - ldr r1, [r4] - ldrb r0, [r1, 0x8] - cmp r0, 0xFF - beq _0810898E - bl RemoveScrollIndicatorArrowPair - ldr r1, [r4] - movs r0, 0xFF - strb r0, [r1, 0x8] -_0810898E: - bl sub_810899C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08108998: .4byte gUnknown_203AD10 - thumb_func_end sub_8108978 - - thumb_func_start sub_810899C -sub_810899C: @ 810899C - push {r4,lr} - ldr r4, _081089B8 @ =gUnknown_203AD10 - ldr r1, [r4] - ldrb r0, [r1, 0x9] - cmp r0, 0xFF - beq _081089B2 - bl RemoveScrollIndicatorArrowPair - ldr r1, [r4] - movs r0, 0xFF - strb r0, [r1, 0x9] -_081089B2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081089B8: .4byte gUnknown_203AD10 - thumb_func_end sub_810899C - thumb_func_start sub_81089BC sub_81089BC: @ 81089BC push {r4,r5,lr} @@ -368,7 +123,7 @@ sub_8108A84: @ 8108A84 mov r7, r8 push {r7} movs r6, 0 - ldr r0, _08108AF8 @ =gUnknown_203AD04 + ldr r0, _08108AF8 @ =gUnknown_203ACFC+8 mov r8, r0 _08108A90: lsls r2, r6, 1 @@ -382,7 +137,7 @@ _08108A90: subs r0, 0x3 cmp r5, r0 bgt _08108AE6 - ldr r0, _08108AFC @ =gUnknown_203AD0A + ldr r0, _08108AFC @ =gUnknown_203ACFC+14 ldr r3, _08108B00 @ =gUnknown_203AD10 mov r12, r3 adds r4, r2, r0 @@ -426,8 +181,8 @@ _08108AE6: pop {r0} bx r0 .align 2, 0 -_08108AF8: .4byte gUnknown_203AD04 -_08108AFC: .4byte gUnknown_203AD0A +_08108AF8: .4byte gUnknown_203ACFC+8 +_08108AFC: .4byte gUnknown_203ACFC+14 _08108B00: .4byte gUnknown_203AD10 thumb_func_end sub_8108A84 diff --git a/include/bag.h b/include/bag.h index 321a48ab0..c48940173 100644 --- a/include/bag.h +++ b/include/bag.h @@ -5,7 +5,7 @@ void sub_810B858(void); void sub_810B8F0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); -void sub_810B958(const u8 * str); +void sub_810B958(const u8 * str, u8 unused); void sub_810B994(void); u8 sub_810B9DC(u8 a0, u8 a1); void sub_810BA3C(u8 a0); diff --git a/include/strings.h b/include/strings.h index eace8d67e..2e74d7b38 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1038,4 +1038,7 @@ extern const u8 gText_SaveFailedScreen_CheckingBackupMemory[]; extern const u8 gText_SaveFailedScreen_BackupMemoryDamaged[]; extern const u8 gText_SaveFailedScreen_SaveCompleted[]; +// item_menu +extern const u8 gUnknown_84162F5[]; + #endif //GUARD_STRINGS_H diff --git a/src/bag.c b/src/bag.c index 4a962bec6..b5ba01b4d 100644 --- a/src/bag.c +++ b/src/bag.c @@ -232,7 +232,7 @@ void sub_810B8F0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSp AddTextPrinterParameterized4(windowId, fontId, x, y, letterSpacing, lineSpacing, gUnknown_84530B8[colorIdx], speed, str); } -void sub_810B958(const u8 * str) +void sub_810B958(const u8 * str, u8 unused) { u32 x = 0x48 - GetStringWidth(1, str, 0); AddTextPrinterParameterized3(2, 1, x / 2, 1, gUnknown_84530B8[0], 0, str); diff --git a/src/item_menu.c b/src/item_menu.c index 578170c17..12db534e8 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -9,6 +9,7 @@ #include "item_menu.h" #include "item_menu_icons.h" #include "list_menu.h" +#include "menu_indicators.h" #include "new_menu_helpers.h" #include "overworld.h" #include "scanline_effect.h" @@ -55,6 +56,7 @@ void sub_81087EC(void); void sub_8108818(s32 itemIndex); void sub_8108888(void); void sub_81088D8(void); +void sub_810899C(void); void sub_8108A68(void); void sub_8108A84(void); void sub_8108B04(void); @@ -69,8 +71,10 @@ void sub_810B4BC(u8 taskId); void sub_810B5D4(u8 taskId); extern const struct BgTemplate gUnknown_8452CF4[2]; +extern const u8 *const gUnknown_8452CFC[]; extern const u8 gUnknown_8452F60[]; extern const u8 gUnknown_8452F66[]; +extern const struct ScrollArrowsTemplate gUnknown_8452F6C; extern const u8 gUnknown_8452F7C[]; void GoToBagMenu(u8 location, u8 a1, MainCallback a2) @@ -506,3 +510,91 @@ void bag_menu_print_cursor(u8 y, u8 colorIdx) sub_810B8F0(0, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, colorIdx); } } + +void sub_81087EC(void) +{ + FillWindowPixelBuffer(2, PIXEL_FILL(0)); + sub_810B958(gUnknown_8452CFC[gUnknown_203ACFC.pocket], gUnknown_203ACFC.pocket); +} + +void sub_8108818(s32 itemIndex) +{ + const u8 *description; + if (itemIndex != gUnknown_203AD10->field_0A[gUnknown_203ACFC.pocket]) + description = ItemId_GetDescription(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemIndex)); + else + description = gUnknown_84162F5; + FillWindowPixelBuffer(1, PIXEL_FILL(0)); + sub_810B8F0(1, 2, description, 0, 3, 2, 0, 0, 0); +} + +void sub_8108888(void) +{ + gUnknown_203AD10->field_08 = AddScrollIndicatorArrowPairParameterized( + 2, + 160, + 8, + 104, + gUnknown_203AD10->field_0A[gUnknown_203ACFC.pocket] - gUnknown_203AD10->field_0D[gUnknown_203ACFC.pocket] + 1, + 110, + 110, + &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket] + ); +} + +void sub_81088D8(void) +{ + if (gUnknown_203AD10->field_05_0 != 1) + { + gUnknown_203AD10->field_09 = AddScrollIndicatorArrowPair(&gUnknown_8452F6C, &gUnknown_203ACFC.pocket); + } +} + +void sub_8108908(void) +{ + gUnknown_203AD10->field_06 = 1; + gUnknown_203AD10->field_08 = AddScrollIndicatorArrowPairParameterized( + 2, + 152, + 72, + 104, + 2, + 110, + 110, + &gUnknown_203AD10->field_06 + ); +} + +void sub_8108940(void) +{ + gUnknown_203AD10->field_06 = 1; + gUnknown_203AD10->field_08 = AddScrollIndicatorArrowPairParameterized( + 2, + 212, + 120, + 152, + 2, + 110, + 110, + &gUnknown_203AD10->field_06 + ); +} + +void sub_8108978(void) +{ + if (gUnknown_203AD10->field_08 != 0xFF) + { + RemoveScrollIndicatorArrowPair(gUnknown_203AD10->field_08); + gUnknown_203AD10->field_08 = 0xFF; + } + sub_810899C(); +} + +void sub_810899C(void) +{ + if (gUnknown_203AD10->field_09 != 0xFF) + { + RemoveScrollIndicatorArrowPair(gUnknown_203AD10->field_09); + gUnknown_203AD10->field_09 = 0xFF; + } +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 188ccd3aa..cb8a6f205 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -336,16 +336,7 @@ gUnknown_203ACF0: @ 203ACF0 .include "src/list_menu.o" .align 2 gUnknown_203ACFC: @ 203ACFC - .space 0x6 - -gUnknown_203AD02: @ 203AD02 - .space 0x2 - -gUnknown_203AD04: @ 203AD04 - .space 0x6 - -gUnknown_203AD0A: @ 203AD0A - .space 0x6 + .space 0x14 gUnknown_203AD10: @ 203AD10 .space 0x4 From 1c3f865acf9e957e8f6ba4daf7f0cfa093893074 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 18 Jan 2020 09:36:16 -0500 Subject: [PATCH 10/22] through ItemMenu_StartFadeToExitCallback --- asm/item_menu.s | 249 ---------------------------------------------- data/item_menu.s | 55 ---------- include/strings.h | 8 ++ ld_script.txt | 1 + src/item_menu.c | 233 +++++++++++++++++++++++++++++++++---------- 5 files changed, 192 insertions(+), 354 deletions(-) diff --git a/asm/item_menu.s b/asm/item_menu.s index a6d327eb2..143e87b66 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -5,255 +5,6 @@ .text - thumb_func_start sub_81089BC -sub_81089BC: @ 81089BC - push {r4,r5,lr} - ldr r0, _081089F0 @ =gUnknown_203ACFC - movs r2, 0 - movs r1, 0 - strh r1, [r0, 0x6] - strb r2, [r0, 0x5] - movs r2, 0 - adds r5, r0, 0 - adds r5, 0x8 - movs r3, 0 - adds r4, r0, 0 - adds r4, 0xE -_081089D4: - lsls r1, r2, 1 - adds r0, r1, r5 - strh r3, [r0] - adds r1, r4 - strh r3, [r1] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x2 - bls _081089D4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081089F0: .4byte gUnknown_203ACFC - thumb_func_end sub_81089BC - - thumb_func_start sub_81089F4 -sub_81089F4: @ 81089F4 - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r2, _08108A60 @ =gUnknown_203ACFC - lsls r1, r4, 1 - adds r0, r2, 0 - adds r0, 0xE - adds r3, r1, r0 - ldrh r0, [r3] - adds r7, r2, 0 - ldr r6, _08108A64 @ =gUnknown_203AD10 - cmp r0, 0 - beq _08108A2E - adds r2, r0, 0 - ldr r1, [r6] - adds r0, r1, 0 - adds r0, 0xD - adds r0, r4 - ldrb r5, [r0] - adds r2, r5 - adds r1, 0xA - adds r1, r4 - ldrb r1, [r1] - adds r0, r1, 0x1 - cmp r2, r0 - ble _08108A2E - subs r0, r5, 0x1 - subs r0, r1, r0 - strh r0, [r3] -_08108A2E: - lsls r2, r4, 1 - adds r0, r7, 0 - adds r0, 0xE - adds r0, r2, r0 - ldrh r1, [r0] - adds r0, r7, 0 - adds r0, 0x8 - adds r2, r0 - ldrh r0, [r2] - adds r1, r0 - ldr r0, [r6] - adds r0, 0xA - adds r0, r4 - ldrb r0, [r0] - adds r3, r0, 0x1 - cmp r1, r3 - blt _08108A58 - cmp r3, 0x1 - bgt _08108A56 - movs r0, 0 -_08108A56: - strh r0, [r2] -_08108A58: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08108A60: .4byte gUnknown_203ACFC -_08108A64: .4byte gUnknown_203AD10 - thumb_func_end sub_81089F4 - - thumb_func_start sub_8108A68 -sub_8108A68: @ 8108A68 - push {r4,lr} - movs r4, 0 -_08108A6C: - adds r0, r4, 0 - bl sub_81089F4 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x2 - bls _08108A6C - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8108A68 - - thumb_func_start sub_8108A84 -sub_8108A84: @ 8108A84 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r6, 0 - ldr r0, _08108AF8 @ =gUnknown_203ACFC+8 - mov r8, r0 -_08108A90: - lsls r2, r6, 1 - mov r3, r8 - adds r1, r2, r3 - ldrh r0, [r1] - adds r7, r6, 0x1 - cmp r0, 0x3 - bls _08108AE6 - movs r5, 0 - subs r0, 0x3 - cmp r5, r0 - bgt _08108AE6 - ldr r0, _08108AFC @ =gUnknown_203ACFC+14 - ldr r3, _08108B00 @ =gUnknown_203AD10 - mov r12, r3 - adds r4, r2, r0 - adds r3, r1, 0 -_08108AB0: - ldrh r2, [r4] - mov r0, r12 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0xD - adds r0, r6 - ldrb r0, [r0] - adds r2, r0 - adds r1, 0xA - adds r1, r6 - ldrb r0, [r1] - adds r0, 0x1 - cmp r2, r0 - beq _08108AE6 - ldrh r0, [r3] - subs r0, 0x1 - strh r0, [r3] - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - ldrh r0, [r3] - subs r0, 0x3 - cmp r5, r0 - ble _08108AB0 -_08108AE6: - lsls r0, r7, 24 - lsrs r6, r0, 24 - cmp r6, 0x2 - bls _08108A90 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08108AF8: .4byte gUnknown_203ACFC+8 -_08108AFC: .4byte gUnknown_203ACFC+14 -_08108B00: .4byte gUnknown_203AD10 - thumb_func_end sub_8108A84 - - thumb_func_start sub_8108B04 -sub_8108B04: @ 8108B04 - push {lr} - ldr r0, _08108B40 @ =gUnknown_203AD10 - ldr r0, [r0] - cmp r0, 0 - beq _08108B12 - bl Free -_08108B12: - ldr r0, _08108B44 @ =gUnknown_203AD14 - ldr r0, [r0] - cmp r0, 0 - beq _08108B1E - bl Free -_08108B1E: - ldr r0, _08108B48 @ =gUnknown_203AD18 - ldr r0, [r0] - cmp r0, 0 - beq _08108B2A - bl Free -_08108B2A: - ldr r0, _08108B4C @ =gUnknown_203AD1C - ldr r0, [r0] - cmp r0, 0 - beq _08108B36 - bl Free -_08108B36: - bl FreeAllWindowBuffers - pop {r0} - bx r0 - .align 2, 0 -_08108B40: .4byte gUnknown_203AD10 -_08108B44: .4byte gUnknown_203AD14 -_08108B48: .4byte gUnknown_203AD18 -_08108B4C: .4byte gUnknown_203AD1C - thumb_func_end sub_8108B04 - - thumb_func_start ItemMenu_StartFadeToExitCallback -ItemMenu_StartFadeToExitCallback: @ 8108B50 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - negs r0, r0 - movs r1, 0x2 - negs r1, r1 - movs r2, 0 - str r2, [sp] - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _08108B84 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08108B88 @ =sub_8108B8C - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08108B84: .4byte gTasks -_08108B88: .4byte sub_8108B8C - thumb_func_end ItemMenu_StartFadeToExitCallback - thumb_func_start sub_8108B8C sub_8108B8C: @ 8108B8C push {r4,r5,lr} diff --git a/data/item_menu.s b/data/item_menu.s index b5cc492e3..c9385108e 100644 --- a/data/item_menu.s +++ b/data/item_menu.s @@ -6,61 +6,6 @@ .section .rodata .align 2 -gUnknown_8452CF4:: @ 8452CF4 - .4byte 0x000001f0 - @ { - @ .bg = 0, - @ .charBaseIndex = 0, - @ .mapBaseIndex = 31, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 0, - @ .baseTile = 0x0000 - @ } - .4byte 0x000011ed - @ { - @ .bg = 1, - @ .charBaseIndex = 3, - @ .mapBaseIndex = 30, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 1, - @ .baseTile = 0x0000 - @ } - -gUnknown_8452CFC:: @ 8452CFC - .4byte gUnknown_84162CD - .4byte gUnknown_84162DE - .4byte gUnknown_84162D3 - -gUnknown_8452D08:: @ 8452D08 - .incbin "graphics/item_menu/bagmap_0.bin" - .incbin "graphics/item_menu/bagmap_1.bin" - .incbin "graphics/item_menu/bagmap_2.bin" - .incbin "graphics/item_menu/bagmap_3.bin" - .incbin "graphics/item_menu/bagmap_4.bin" - .incbin "graphics/item_menu/bagmap_5.bin" - .incbin "graphics/item_menu/bagmap_6.bin" - .incbin "graphics/item_menu/bagmap_7.bin" - .incbin "graphics/item_menu/bagmap_8.bin" - .incbin "graphics/item_menu/bagmap_9.bin" - .incbin "graphics/item_menu/bagmap_A.bin" - .incbin "graphics/item_menu/bagmap_B.bin" - -gUnknown_8452EB8:: @ 8452EB8 - .4byte gOtherText_Use, sub_8109C50 - .4byte gOtherText_Toss, sub_8109CC0 - .4byte gUnknown_84161A9, sub_810A000 - .4byte gOtherText_Give, sub_810A0A8 - .4byte gFameCheckerText_Cancel, sub_810A2DC - .4byte gOtherText_Use, sub_810A324 - .4byte gUnknown_84161E9, sub_8109C50 - .4byte gUnknown_84161F4, sub_8109C50 - .4byte gUnknown_84161F4, sub_810A324 - .4byte gUnknown_84161BC, sub_8109C50 - .4byte gUnknown_84161F9, sub_810A000 - .4byte gString_Dummy, NULL - gUnknown_8452F18:: @ 8452F18 .byte 0x00, 0x03, 0x01, 0x04 .byte 0x00, 0x02, 0x04, 0x0b diff --git a/include/strings.h b/include/strings.h index 2e74d7b38..809007409 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1039,6 +1039,14 @@ extern const u8 gText_SaveFailedScreen_BackupMemoryDamaged[]; extern const u8 gText_SaveFailedScreen_SaveCompleted[]; // item_menu +extern const u8 gUnknown_84161A9[]; +extern const u8 gUnknown_84161BC[]; +extern const u8 gUnknown_84161E9[]; +extern const u8 gUnknown_84161F4[]; +extern const u8 gUnknown_84161F9[]; +extern const u8 gUnknown_84162CD[]; +extern const u8 gUnknown_84162D3[]; +extern const u8 gUnknown_84162DE[]; extern const u8 gUnknown_84162F5[]; #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index feca781e7..ddec18aa0 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -518,6 +518,7 @@ SECTIONS { src/pokedex_screen.o(.rodata); data/pokedex_screen.o(.rodata); src/list_menu.o(.rodata); + src/item_menu.o(.rodata); data/item_menu.o(.rodata); src/save_location.o(.rodata); src/bag.o(.rodata); diff --git a/src/item_menu.c b/src/item_menu.c index 12db534e8..a861cb742 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -9,6 +9,7 @@ #include "item_menu.h" #include "item_menu_icons.h" #include "list_menu.h" +#include "menu.h" #include "menu_indicators.h" #include "new_menu_helpers.h" #include "overworld.h" @@ -17,19 +18,21 @@ #include "constants/items.h" #include "constants/songs.h" +#define FREE_IF_SET(ptr) ({ if (ptr) Free(ptr); }) + struct BagMenuAlloc { u32 field_00; u8 field_04; u8 field_05_0:4; - u8 field_05_4:2; + u8 itemMenuIcon:2; u8 field_05_6:2; - u16 field_06; - u8 field_08; - u8 field_09; - u8 field_0A[3]; - u8 field_0D[3]; - u8 field_10[4]; + u16 contextMenuSelectedItem; + u8 pocketScrollArrowsTask; + u8 pocketSwitchArrowsTask; + u8 nItems[3]; + u8 maxShowed[3]; + u8 data[4]; }; EWRAM_DATA struct BagStruct gUnknown_203ACFC = {}; @@ -60,9 +63,16 @@ void sub_810899C(void); void sub_8108A68(void); void sub_8108A84(void); void sub_8108B04(void); +void sub_8108B8C(u8 taskId); void sub_8108C10(void); void sub_8108E54(void); void sub_8108F0C(u8 taskId); +void sub_8109C50(u8 taskId); +void sub_8109CC0(u8 taskId); +void sub_810A000(u8 taskId); +void sub_810A0A8(u8 taskId); +void sub_810A2DC(u8 taskId); +void sub_810A324(u8 taskId); bool8 sub_810ADAC(void); void sub_810AF9C(u8 taskId); void sub_810B1D4(u8 taskId); @@ -70,8 +80,62 @@ void sub_810B378(u8 taskId); void sub_810B4BC(u8 taskId); void sub_810B5D4(u8 taskId); -extern const struct BgTemplate gUnknown_8452CF4[2]; -extern const u8 *const gUnknown_8452CFC[]; +const struct BgTemplate gUnknown_8452CF4[2] = { + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0x000 + }, { + .bg = 1, + .charBaseIndex = 3, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0x000 + } +}; + +const u8 *const gUnknown_8452CFC[] = { + gUnknown_84162CD, + gUnknown_84162DE, + gUnknown_84162D3 +}; + +const u16 gUnknown_8452D08[][18] = { + INCBIN_U16("graphics/item_menu/bagmap_0.bin"), + INCBIN_U16("graphics/item_menu/bagmap_1.bin"), + INCBIN_U16("graphics/item_menu/bagmap_2.bin"), + INCBIN_U16("graphics/item_menu/bagmap_3.bin"), + INCBIN_U16("graphics/item_menu/bagmap_4.bin"), + INCBIN_U16("graphics/item_menu/bagmap_5.bin"), + INCBIN_U16("graphics/item_menu/bagmap_6.bin"), + INCBIN_U16("graphics/item_menu/bagmap_7.bin"), + INCBIN_U16("graphics/item_menu/bagmap_8.bin"), + INCBIN_U16("graphics/item_menu/bagmap_9.bin"), + INCBIN_U16("graphics/item_menu/bagmap_A.bin"), + INCBIN_U16("graphics/item_menu/bagmap_B.bin") +}; + +const struct MenuAction gUnknown_8452EB8[] = { + {gOtherText_Use, {.void_u8 = sub_8109C50}}, + {gOtherText_Toss, {.void_u8 = sub_8109CC0}}, + {gUnknown_84161A9, {.void_u8 = sub_810A000}}, + {gOtherText_Give, {.void_u8 = sub_810A0A8}}, + {gFameCheckerText_Cancel, {.void_u8 = sub_810A2DC}}, + {gOtherText_Use, {.void_u8 = sub_810A324}}, + {gUnknown_84161E9, {.void_u8 = sub_8109C50}}, + {gUnknown_84161F4, {.void_u8 = sub_8109C50}}, + {gUnknown_84161F4, {.void_u8 = sub_810A324}}, + {gUnknown_84161BC, {.void_u8 = sub_8109C50}}, + {gUnknown_84161F9, {.void_u8 = sub_810A000}}, + {gString_Dummy, {.void_u8 = NULL}} +}; + extern const u8 gUnknown_8452F60[]; extern const u8 gUnknown_8452F66[]; extern const struct ScrollArrowsTemplate gUnknown_8452F6C; @@ -93,10 +157,10 @@ void GoToBagMenu(u8 location, u8 a1, MainCallback a2) gUnknown_203ACFC.bagCallback = a2; gUnknown_203AD10->field_00 = 0; gUnknown_203AD10->field_04 = 0xFF; - gUnknown_203AD10->field_05_4 = 0; + gUnknown_203AD10->itemMenuIcon = 0; gUnknown_203AD10->field_05_6 = 0; - gUnknown_203AD10->field_08 = 0xFF; - gUnknown_203AD10->field_09 = 0xFF; + gUnknown_203AD10->pocketScrollArrowsTask = 0xFF; + gUnknown_203AD10->pocketSwitchArrowsTask = 0xFF; if (location == 3) gUnknown_203AD10->field_05_0 = 1; else if (location == 6) @@ -105,7 +169,7 @@ void GoToBagMenu(u8 location, u8 a1, MainCallback a2) gUnknown_203AD10->field_05_0 = 0; for (i = 0; i < 4; i++) { - gUnknown_203AD10->field_10[i] = 0; + gUnknown_203AD10->data[i] = 0; } if (a1 == 0 || a1 == 1 || a1 == 2) gUnknown_203ACFC.pocket = a1; @@ -196,7 +260,7 @@ bool8 sub_8107F3C(void) case 7: if (sub_81081D0()) { - gUnknown_203AD10->field_10[0] = 0; + gUnknown_203AD10->data[0] = 0; gMain.state++; } else @@ -326,12 +390,12 @@ bool8 sub_81081D0(void) bool8 sub_8108240(void) { - switch (gUnknown_203AD10->field_10[0]) + switch (gUnknown_203AD10->data[0]) { case 0: ResetTempTileDataBuffers(); DecompressAndCopyTileDataToVram(1, gUnknown_8E830CC, 0, 0, 0); - gUnknown_203AD10->field_10[0]++; + gUnknown_203AD10->data[0]++; break; case 1: if (FreeTempTileDataBuffersIfPossible() != TRUE) @@ -340,33 +404,33 @@ bool8 sub_8108240(void) LZDecompressWram(gUnknown_8E832C0, gUnknown_203AD14); else LZDecompressWram(gUnknown_8E83444, gUnknown_203AD14); - gUnknown_203AD10->field_10[0]++; + gUnknown_203AD10->data[0]++; } break; case 2: LoadCompressedPalette(gUnknown_8E835B4, 0x00, 0x60); if (!sub_810ADAC() && gSaveBlock2Ptr->playerGender != MALE) LoadCompressedPalette(gUnknown_8E83604, 0x00, 0x20); - gUnknown_203AD10->field_10[0]++; + gUnknown_203AD10->data[0]++; break; case 3: if (sub_810ADAC() == TRUE || gSaveBlock2Ptr->playerGender == MALE) LoadCompressedSpriteSheet(&gUnknown_83D41E4); else LoadCompressedSpriteSheet(&gUnknown_83D41EC); - gUnknown_203AD10->field_10[0]++; + gUnknown_203AD10->data[0]++; break; case 4: LoadCompressedSpritePalette(&gUnknown_83D41F4); - gUnknown_203AD10->field_10[0]++; + gUnknown_203AD10->data[0]++; break; case 5: LoadCompressedSpriteSheet(&gBagSwapSpriteSheet); - gUnknown_203AD10->field_10[0]++; + gUnknown_203AD10->data[0]++; break; default: LoadCompressedSpritePalette(&gBagSwapSpritePalette); - gUnknown_203AD10->field_10[0] = 0; + gUnknown_203AD10->data[0] = 0; return TRUE; } @@ -407,7 +471,7 @@ void sub_810842C(u8 pocket) { u16 i; struct BagPocket * bagPocket = &gBagPockets[pocket]; - for (i = 0; i < gUnknown_203AD10->field_0A[pocket]; i++) + for (i = 0; i < gUnknown_203AD10->nItems[pocket]; i++) { sub_8108560(gUnknown_203AD1C[i], bagPocket->itemSlots[i].itemId); gUnknown_203AD18[i].label = gUnknown_203AD1C[i]; @@ -418,7 +482,7 @@ void sub_810842C(u8 pocket) gUnknown_203AD18[i].label = gUnknown_203AD1C[i]; gUnknown_203AD18[i].index = i; gMultiuseListMenuTemplate.items = gUnknown_203AD18; - gMultiuseListMenuTemplate.totalItems = gUnknown_203AD10->field_0A[pocket] + 1; + gMultiuseListMenuTemplate.totalItems = gUnknown_203AD10->nItems[pocket] + 1; gMultiuseListMenuTemplate.windowId = 0; gMultiuseListMenuTemplate.header_X = 0; gMultiuseListMenuTemplate.item_X = 9; @@ -426,7 +490,7 @@ void sub_810842C(u8 pocket) gMultiuseListMenuTemplate.lettersSpacing = 0; gMultiuseListMenuTemplate.itemVerticalPadding = 2; gMultiuseListMenuTemplate.upText_Y = 2; - gMultiuseListMenuTemplate.maxShowed = gUnknown_203AD10->field_0D[pocket]; + gMultiuseListMenuTemplate.maxShowed = gUnknown_203AD10->maxShowed[pocket]; gMultiuseListMenuTemplate.fontId = 2; gMultiuseListMenuTemplate.cursorPal = 2; gMultiuseListMenuTemplate.fillValue = 0; @@ -455,12 +519,12 @@ void sub_81085A4(s32 itemIndex, bool8 onInit, struct ListMenu *list) } if (gUnknown_203AD10->field_04 == 0xFF) { - DestroyItemMenuIcon(gUnknown_203AD10->field_05_4 ^ 1); - if (gUnknown_203AD10->field_0A[gUnknown_203ACFC.pocket] != itemIndex) - CreateItemMenuIcon(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemIndex), gUnknown_203AD10->field_05_4); + DestroyItemMenuIcon(gUnknown_203AD10->itemMenuIcon ^ 1); + if (gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket] != itemIndex) + CreateItemMenuIcon(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemIndex), gUnknown_203AD10->itemMenuIcon); else - CreateItemMenuIcon(ITEM_N_A, gUnknown_203AD10->field_05_4); - gUnknown_203AD10->field_05_4 ^= 1; + CreateItemMenuIcon(ITEM_N_A, gUnknown_203AD10->itemMenuIcon); + gUnknown_203AD10->itemMenuIcon ^= 1; if (gUnknown_203AD10->field_05_6 == 0) sub_8108818(itemIndex); } @@ -477,7 +541,7 @@ void sub_8108654(u8 windowId, s32 itemId, u8 y) else bag_menu_print_cursor(y, 0xFF); } - if (itemId != -2 && gUnknown_203AD10->field_0A[gUnknown_203ACFC.pocket] != itemId) + if (itemId != -2 && gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket] != itemId) { bagItemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemId); bagItemQuantity = BagGetQuantityByPocketPosition(gUnknown_203ACFC.pocket + 1, itemId); @@ -520,7 +584,7 @@ void sub_81087EC(void) void sub_8108818(s32 itemIndex) { const u8 *description; - if (itemIndex != gUnknown_203AD10->field_0A[gUnknown_203ACFC.pocket]) + if (itemIndex != gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket]) description = ItemId_GetDescription(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemIndex)); else description = gUnknown_84162F5; @@ -530,12 +594,12 @@ void sub_8108818(s32 itemIndex) void sub_8108888(void) { - gUnknown_203AD10->field_08 = AddScrollIndicatorArrowPairParameterized( - 2, + gUnknown_203AD10->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized( + SCROLL_ARROW_UP, 160, 8, 104, - gUnknown_203AD10->field_0A[gUnknown_203ACFC.pocket] - gUnknown_203AD10->field_0D[gUnknown_203ACFC.pocket] + 1, + gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket] - gUnknown_203AD10->maxShowed[gUnknown_203ACFC.pocket] + 1, 110, 110, &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket] @@ -546,55 +610,124 @@ void sub_81088D8(void) { if (gUnknown_203AD10->field_05_0 != 1) { - gUnknown_203AD10->field_09 = AddScrollIndicatorArrowPair(&gUnknown_8452F6C, &gUnknown_203ACFC.pocket); + gUnknown_203AD10->pocketSwitchArrowsTask = AddScrollIndicatorArrowPair(&gUnknown_8452F6C, &gUnknown_203ACFC.pocket); } } void sub_8108908(void) { - gUnknown_203AD10->field_06 = 1; - gUnknown_203AD10->field_08 = AddScrollIndicatorArrowPairParameterized( - 2, + gUnknown_203AD10->contextMenuSelectedItem = 1; + gUnknown_203AD10->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized( + SCROLL_ARROW_UP, 152, 72, 104, 2, 110, 110, - &gUnknown_203AD10->field_06 + &gUnknown_203AD10->contextMenuSelectedItem ); } void sub_8108940(void) { - gUnknown_203AD10->field_06 = 1; - gUnknown_203AD10->field_08 = AddScrollIndicatorArrowPairParameterized( - 2, + gUnknown_203AD10->contextMenuSelectedItem = 1; + gUnknown_203AD10->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized( + SCROLL_ARROW_UP, 212, 120, 152, 2, 110, 110, - &gUnknown_203AD10->field_06 + &gUnknown_203AD10->contextMenuSelectedItem ); } void sub_8108978(void) { - if (gUnknown_203AD10->field_08 != 0xFF) + if (gUnknown_203AD10->pocketScrollArrowsTask != 0xFF) { - RemoveScrollIndicatorArrowPair(gUnknown_203AD10->field_08); - gUnknown_203AD10->field_08 = 0xFF; + RemoveScrollIndicatorArrowPair(gUnknown_203AD10->pocketScrollArrowsTask); + gUnknown_203AD10->pocketScrollArrowsTask = 0xFF; } sub_810899C(); } void sub_810899C(void) { - if (gUnknown_203AD10->field_09 != 0xFF) + if (gUnknown_203AD10->pocketSwitchArrowsTask != 0xFF) { - RemoveScrollIndicatorArrowPair(gUnknown_203AD10->field_09); - gUnknown_203AD10->field_09 = 0xFF; + RemoveScrollIndicatorArrowPair(gUnknown_203AD10->pocketSwitchArrowsTask); + gUnknown_203AD10->pocketSwitchArrowsTask = 0xFF; } } + +void sub_81089BC(void) +{ + u8 i; + gUnknown_203ACFC.pocket = POCKET_ITEMS - 1; + gUnknown_203ACFC.unk5 = 0; + for (i = 0; i < 3; i++) + { + gUnknown_203ACFC.itemsAbove[i] = 0; + gUnknown_203ACFC.cursorPos[i] = 0; + } +} + +void sub_81089F4(u8 pocketId) +{ + if (gUnknown_203ACFC.cursorPos[pocketId] != 0 && gUnknown_203ACFC.cursorPos[pocketId] + gUnknown_203AD10->maxShowed[pocketId] > gUnknown_203AD10->nItems[pocketId] + 1) + { + gUnknown_203ACFC.cursorPos[pocketId] = (gUnknown_203AD10->nItems[pocketId] + 1) - gUnknown_203AD10->maxShowed[pocketId]; + } + if (gUnknown_203ACFC.cursorPos[pocketId] + gUnknown_203ACFC.itemsAbove[pocketId] >= gUnknown_203AD10->nItems[pocketId] + 1) + { + if (gUnknown_203AD10->nItems[pocketId] + 1 < 2) + gUnknown_203ACFC.itemsAbove[pocketId] = 0; + else + gUnknown_203ACFC.itemsAbove[pocketId] = gUnknown_203AD10->nItems[pocketId]; + } +} + +void sub_8108A68(void) +{ + u8 i; + for (i = 0; i < 3; i++) + { + sub_81089F4(i); + } +} + +void sub_8108A84(void) +{ + u8 i; + u8 j; + + for (i = 0; i < 3; i++) + { + if (gUnknown_203ACFC.itemsAbove[i] > 3) + { + for (j = 0; j <= gUnknown_203ACFC.itemsAbove[i] - 3; gUnknown_203ACFC.itemsAbove[i]--, gUnknown_203ACFC.cursorPos[i]++, j++) + { + if (gUnknown_203ACFC.cursorPos[i] + gUnknown_203AD10->maxShowed[i] == gUnknown_203AD10->nItems[i] + 1) + break; + } + } + } +} + +void sub_8108B04(void) +{ + FREE_IF_SET(gUnknown_203AD10); + FREE_IF_SET(gUnknown_203AD14); + FREE_IF_SET(gUnknown_203AD18); + FREE_IF_SET(gUnknown_203AD1C); + FreeAllWindowBuffers(); +} + +void ItemMenu_StartFadeToExitCallback(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); + gTasks[taskId].func = sub_8108B8C; +} From dfcfe6d8e1942349adfefc8e79255dcd8befca0a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 18 Jan 2020 11:52:32 -0500 Subject: [PATCH 11/22] through MoveItemSlotInList --- asm/item_menu.s | 325 ++-------------------------------- data/item_menu.s | 1 + data/strings.s | 16 +- include/constants/item_menu.h | 17 ++ include/item_menu.h | 3 +- include/strings.h | 16 +- src/item_menu.c | 167 +++++++++++++---- src/item_pc.c | 2 +- 8 files changed, 186 insertions(+), 361 deletions(-) create mode 100644 include/constants/item_menu.h diff --git a/asm/item_menu.s b/asm/item_menu.s index 143e87b66..2444ffeb0 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -5,295 +5,6 @@ .text - thumb_func_start sub_8108B8C -sub_8108B8C: @ 8108B8C - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _08108BE0 @ =gTasks+0x8 - adds r4, r0, r1 - ldr r0, _08108BE4 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08108C08 - ldr r0, _08108BE8 @ =sub_8108CFC - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08108C08 - ldrb r0, [r4] - ldr r4, _08108BEC @ =gUnknown_203ACFC - ldrh r2, [r4, 0x6] - lsls r2, 1 - adds r1, r4, 0 - adds r1, 0xE - adds r1, r2, r1 - adds r3, r4, 0 - adds r3, 0x8 - adds r2, r3 - bl DestroyListMenuTask - ldr r0, _08108BF0 @ =gUnknown_203AD10 - ldr r0, [r0] - ldr r0, [r0] - cmp r0, 0 - beq _08108BF4 - bl SetMainCallback2 - b _08108BFA - .align 2, 0 -_08108BE0: .4byte gTasks+0x8 -_08108BE4: .4byte gPaletteFade -_08108BE8: .4byte sub_8108CFC -_08108BEC: .4byte gUnknown_203ACFC -_08108BF0: .4byte gUnknown_203AD10 -_08108BF4: - ldr r0, [r4] - bl SetMainCallback2 -_08108BFA: - bl sub_8108978 - bl sub_8108B04 - adds r0, r5, 0 - bl DestroyTask -_08108C08: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8108B8C - - thumb_func_start sub_8108C10 -sub_8108C10: @ 8108C10 - push {r4,r5,lr} - sub sp, 0x8 - movs r5, 0 - add r0, sp, 0x4 - strh r5, [r0] - movs r1, 0 - movs r2, 0x2 - bl LoadPalette - movs r0, 0x48 - movs r1, 0 - bl SetGpuReg - movs r0, 0x4A - movs r1, 0x3F - bl SetGpuReg - movs r4, 0x1 - negs r4, r4 - adds r0, r4, 0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - str r5, [sp] - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r4, _08108C68 @ =gUnknown_203ACFC - ldrb r0, [r4, 0x5] - cmp r0, 0x1 - bne _08108C6C - movs r0, 0x40 - movs r1, 0xF0 - bl SetGpuReg - movs r0, 0x44 - movs r1, 0 - bl SetGpuReg - b _08108C9E - .align 2, 0 -_08108C68: .4byte gUnknown_203ACFC -_08108C6C: - movs r0, 0x40 - movs r1, 0xF0 - bl SetGpuReg - movs r0, 0x44 - movs r1, 0xA0 - bl SetGpuReg - ldr r0, _08108CA8 @ =sub_8108CFC - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08108CAC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0xC0 - strh r0, [r1, 0x8] - ldr r0, _08108CB0 @ =0x0000fff0 - strh r0, [r1, 0xA] - movs r0, 0x1 - strb r0, [r4, 0x5] -_08108C9E: - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08108CA8: .4byte sub_8108CFC -_08108CAC: .4byte gTasks -_08108CB0: .4byte 0x0000fff0 - thumb_func_end sub_8108C10 - - thumb_func_start sub_8108CB4 -sub_8108CB4: @ 8108CB4 - push {lr} - ldr r0, _08108CE0 @ =sub_8108CFC - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08108CE4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0 - ldr r0, _08108CE8 @ =0x0000fff0 - strh r0, [r1, 0x8] - movs r0, 0x10 - strh r0, [r1, 0xA] - ldr r0, _08108CEC @ =gUnknown_203ACFC - strb r2, [r0, 0x5] - pop {r0} - bx r0 - .align 2, 0 -_08108CE0: .4byte sub_8108CFC -_08108CE4: .4byte gTasks -_08108CE8: .4byte 0x0000fff0 -_08108CEC: .4byte gUnknown_203ACFC - thumb_func_end sub_8108CB4 - - thumb_func_start CB2_SetUpReshowBattleScreenAfterMenu -CB2_SetUpReshowBattleScreenAfterMenu: @ 8108CF0 - ldr r1, _08108CF8 @ =gUnknown_203ACFC - movs r0, 0 - strb r0, [r1, 0x5] - bx lr - .align 2, 0 -_08108CF8: .4byte gUnknown_203ACFC - thumb_func_end CB2_SetUpReshowBattleScreenAfterMenu - - thumb_func_start sub_8108CFC -sub_8108CFC: @ 8108CFC - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _08108D28 @ =gTasks+0x8 - adds r4, r0, r1 - ldrh r0, [r4, 0x2] - ldrh r1, [r4] - adds r0, r1 - strh r0, [r4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA0 - ble _08108D2C - movs r0, 0x44 - movs r1, 0xA0 - bl SetGpuReg - b _08108D34 - .align 2, 0 -_08108D28: .4byte gTasks+0x8 -_08108D2C: - ldrh r1, [r4] - movs r0, 0x44 - bl SetGpuReg -_08108D34: - movs r2, 0x2 - ldrsh r1, [r4, r2] - cmp r1, 0x10 - bne _08108D44 - movs r2, 0 - ldrsh r0, [r4, r2] - cmp r0, 0xA0 - beq _08108D54 -_08108D44: - movs r0, 0x10 - negs r0, r0 - cmp r1, r0 - bne _08108D5A - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08108D5A -_08108D54: - adds r0, r5, 0 - bl DestroyTask -_08108D5A: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8108CFC - - thumb_func_start ItemMenu_MoveItemSlotToNewPositionInArray -ItemMenu_MoveItemSlotToNewPositionInArray: @ 8108D60 - push {r4-r6,lr} - adds r4, r0, 0 - adds r3, r2, 0 - cmp r1, r3 - beq _08108DC0 - lsls r0, r1, 2 - adds r0, r4 - ldr r6, [r0] - cmp r3, r1 - bls _08108D98 - subs r3, 0x1 - lsls r1, 16 - lsls r0, r3, 16 - asrs r2, r0, 16 - cmp r1, r0 - bge _08108DBA - adds r5, r2, 0 -_08108D82: - asrs r2, r1, 16 - lsls r0, r2, 2 - adds r0, r4 - ldr r1, [r0, 0x4] - str r1, [r0] - adds r2, 0x1 - lsls r1, r2, 16 - asrs r0, r1, 16 - cmp r0, r5 - blt _08108D82 - b _08108DBA -_08108D98: - lsls r1, 16 - lsls r0, r3, 16 - asrs r2, r0, 16 - cmp r1, r0 - ble _08108DBA - adds r5, r2, 0 -_08108DA4: - asrs r2, r1, 16 - lsls r1, r2, 2 - adds r1, r4 - subs r0, r1, 0x4 - ldr r0, [r0] - str r0, [r1] - subs r2, 0x1 - lsls r1, r2, 16 - asrs r0, r1, 16 - cmp r0, r5 - bgt _08108DA4 -_08108DBA: - lsls r0, r3, 2 - adds r0, r4 - str r6, [r0] -_08108DC0: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end ItemMenu_MoveItemSlotToNewPositionInArray - thumb_func_start sub_8108DC8 sub_8108DC8: @ 8108DC8 push {r4,r5,lr} @@ -1306,7 +1017,7 @@ _081095E8: ldr r0, [r0] adds r1, r2, 0 adds r2, r5, 0 - bl ItemMenu_MoveItemSlotToNewPositionInArray + bl MoveItemSlotInList ldrb r0, [r6] ldrh r2, [r4, 0x6] lsls r2, 1 @@ -1641,7 +1352,7 @@ _081098AC: _081098B6: ldr r2, _081098D4 @ =gSpecialVar_ItemId ldrh r1, [r2] - ldr r0, _081098D8 @ =0x0000016d + ldr r0, _081098D8 @ =0x0000016d @ ITEM_BERRY_POUCH cmp r1, r0 bne _081098E8 ldr r1, _081098DC @ =gUnknown_203AD20 @@ -2068,8 +1779,8 @@ _08109C48: .4byte gUnknown_8452EB8 _08109C4C: .4byte gUnknown_203AD24 thumb_func_end sub_8109BE4 - thumb_func_start sub_8109C50 -sub_8109C50: @ 8109C50 + thumb_func_start Task_ItemMenuAction_Use +Task_ItemMenuAction_Use: @ 8109C50 push {r4,r5,lr} lsls r0, 24 lsrs r4, r0, 24 @@ -2116,10 +1827,10 @@ _08109CB4: bx r0 .align 2, 0 _08109CBC: .4byte gSpecialVar_ItemId - thumb_func_end sub_8109C50 + thumb_func_end Task_ItemMenuAction_Use - thumb_func_start sub_8109CC0 -sub_8109CC0: @ 8109CC0 + thumb_func_start Task_ItemMenuAction_Toss +Task_ItemMenuAction_Toss: @ 8109CC0 push {r4-r7,lr} lsls r0, 24 lsrs r5, r0, 24 @@ -2171,7 +1882,7 @@ _08109D2A: .align 2, 0 _08109D30: .4byte gText_TossOutHowManyStrVar1s _08109D34: .4byte sub_8109DEC - thumb_func_end sub_8109CC0 + thumb_func_end Task_ItemMenuAction_Toss thumb_func_start sub_8109D38 sub_8109D38: @ 8109D38 @@ -2489,8 +2200,8 @@ _08109FF8: .4byte gUnknown_203ACFC _08109FFC: .4byte gMultiuseListMenuTemplate thumb_func_end sub_8109F44 - thumb_func_start sub_810A000 -sub_810A000: @ 810A000 + thumb_func_start Task_ItemMenuAction_ToggleSelect +Task_ItemMenuAction_ToggleSelect: @ 810A000 push {r4-r7,lr} mov r7, r8 push {r7} @@ -2557,7 +2268,7 @@ _0810A052: movs r1, 0x1 bl CopyWindowToVram mov r0, r8 - bl sub_810A2DC + bl Task_ItemMenuAction_Cancel pop {r3} mov r8, r3 pop {r4-r7} @@ -2566,10 +2277,10 @@ _0810A052: .align 2, 0 _0810A0A0: .4byte gUnknown_203ACFC _0810A0A4: .4byte gMultiuseListMenuTemplate - thumb_func_end sub_810A000 + thumb_func_end Task_ItemMenuAction_ToggleSelect - thumb_func_start sub_810A0A8 -sub_810A0A8: @ 810A0A8 + thumb_func_start Task_ItemMenuAction_Give +Task_ItemMenuAction_Give: @ 810A0A8 push {r4-r7,lr} mov r7, r8 push {r7} @@ -2655,7 +2366,7 @@ _0810A166: pop {r4-r7} pop {r0} bx r0 - thumb_func_end sub_810A0A8 + thumb_func_end Task_ItemMenuAction_Give thumb_func_start sub_810A170 sub_810A170: @ 810A170 @@ -2831,8 +2542,8 @@ sub_810A288: @ 810A288 _0810A2D8: .4byte gTasks+0x8 thumb_func_end sub_810A288 - thumb_func_start sub_810A2DC -sub_810A2DC: @ 810A2DC + thumb_func_start Task_ItemMenuAction_Cancel +Task_ItemMenuAction_Cancel: @ 810A2DC push {r4,lr} adds r4, r0, 0 lsls r4, 24 @@ -2862,7 +2573,7 @@ sub_810A2DC: @ 810A2DC bx r0 .align 2, 0 _0810A320: .4byte gTasks - thumb_func_end sub_810A2DC + thumb_func_end Task_ItemMenuAction_Cancel thumb_func_start sub_810A324 sub_810A324: @ 810A324 diff --git a/data/item_menu.s b/data/item_menu.s index c9385108e..66e13cca0 100644 --- a/data/item_menu.s +++ b/data/item_menu.s @@ -1,6 +1,7 @@ #include "constants/region_map.h" #include "constants/flags.h" #include "constants/moves.h" +#include "constants/item_menu.h" .include "asm/macros.inc" .include "constants/constants.inc" .section .rodata diff --git a/data/strings.s b/data/strings.s index 55c54f6c3..fc6ab5cb5 100644 --- a/data/strings.s +++ b/data/strings.s @@ -411,7 +411,7 @@ gOtherText_Use:: gOtherText_Toss:: .string "TOSS$" -gUnknown_84161A9:: +gOtherText_Register:: .string "REGISTER$" gOtherText_Give:: @@ -420,7 +420,7 @@ gOtherText_Give:: gUnknown_84161B7:: .string "けってい$" -gUnknown_84161BC:: +gOtherText_Walk:: .string "WALK$" gFameCheckerText_Cancel:: @ 84161C1 @@ -447,16 +447,16 @@ gText_Take:: gText_Store:: .string "STORE$" -gUnknown_84161E9:: +gOtherText_Check:: .string "CHECK$" gUnknown_84161EF:: @ 84161EF .string "NONE$" -gUnknown_84161F4:: +gOtherText_Open:: .string "OPEN$" -gUnknown_84161F9:: +gOtherText_Deselect:: .string "DESELECT$" gUnknown_8416202:: @ 8416202 @@ -555,13 +555,13 @@ gUnknown_84162BD:: @ 84162BD gText_Coins:: @ 84162C4 .string "{STR_VAR_1} COINS$" -gUnknown_84162CD:: @ 0x84162CD +gText_Items2:: @ 0x84162CD .string "ITEMS$" -gUnknown_84162D3:: @ 0x84162D3 +gText_PokeBalls2:: @ 0x84162D3 .string "POKé BALLS$" -gUnknown_84162DE:: @ 0x84162DE +gText_KeyItems2:: @ 0x84162DE .string "KEY ITEMS$" gText_DepositItem:: @ 84162E8 diff --git a/include/constants/item_menu.h b/include/constants/item_menu.h new file mode 100644 index 000000000..8e91d2a17 --- /dev/null +++ b/include/constants/item_menu.h @@ -0,0 +1,17 @@ +#ifndef GUARD_CONSTANTS_ITEM_MENU_H +#define GUARD_CONSTANTS_ITEM_MENU_H + +#define ITEMMENUACTION_USE 0 +#define ITEMMENUACTION_TOSS 1 +#define ITEMMENUACTION_REGISTER 2 +#define ITEMMENUACTION_GIVE 3 +#define ITEMMENUACTION_CANCEL 4 +#define ITEMMENUACTION_BATTLE_USE 5 +#define ITEMMENUACTION_CHECK 6 +#define ITEMMENUACTION_OPEN 7 +#define ITEMMENUACTION_OPEN_BERRIES 8 +#define ITEMMENUACTION_WALK 9 +#define ITEMMENUACTION_DESELECT 10 +#define ITEMMENUACTION_DUMMY 11 + +#endif //GUARD_CONSTANTS_ITEM_MENU_H diff --git a/include/item_menu.h b/include/item_menu.h index 343fae393..e7337ffc4 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -3,6 +3,7 @@ #include "global.h" #include "task.h" +#include "constants/item_menu.h" // Exported type declarations @@ -29,7 +30,7 @@ void CB2_SetUpReshowBattleScreenAfterMenu(void); void sub_81089BC(void); void sub_810B108(u8); void CB2_BagMenuFromStartMenu(void); -void ItemMenu_MoveItemSlotToNewPositionInArray(struct ItemSlot * slots, int pos1, int pos2); +void MoveItemSlotInList(struct ItemSlot * itemSlots_, u32 from, u32 to_); void ItemMenu_StartFadeToExitCallback(u8 taskId); void sub_8108CB4(void); void ItemMenu_SetExitCallback(void (*)(void)); diff --git a/include/strings.h b/include/strings.h index 809007409..8dba28b3c 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1039,14 +1039,14 @@ extern const u8 gText_SaveFailedScreen_BackupMemoryDamaged[]; extern const u8 gText_SaveFailedScreen_SaveCompleted[]; // item_menu -extern const u8 gUnknown_84161A9[]; -extern const u8 gUnknown_84161BC[]; -extern const u8 gUnknown_84161E9[]; -extern const u8 gUnknown_84161F4[]; -extern const u8 gUnknown_84161F9[]; -extern const u8 gUnknown_84162CD[]; -extern const u8 gUnknown_84162D3[]; -extern const u8 gUnknown_84162DE[]; +extern const u8 gOtherText_Register[]; +extern const u8 gOtherText_Walk[]; +extern const u8 gOtherText_Check[]; +extern const u8 gOtherText_Open[]; +extern const u8 gOtherText_Deselect[]; +extern const u8 gText_Items2[]; +extern const u8 gText_PokeBalls2[]; +extern const u8 gText_KeyItems2[]; extern const u8 gUnknown_84162F5[]; #endif //GUARD_STRINGS_H diff --git a/src/item_menu.c b/src/item_menu.c index a861cb742..5c09791ae 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -22,7 +22,7 @@ struct BagMenuAlloc { - u32 field_00; + MainCallback field_00; u8 field_04; u8 field_05_0:4; u8 itemMenuIcon:2; @@ -64,14 +64,15 @@ void sub_8108A68(void); void sub_8108A84(void); void sub_8108B04(void); void sub_8108B8C(u8 taskId); +void sub_8108CFC(u8 taskId); void sub_8108C10(void); void sub_8108E54(void); void sub_8108F0C(u8 taskId); -void sub_8109C50(u8 taskId); -void sub_8109CC0(u8 taskId); -void sub_810A000(u8 taskId); -void sub_810A0A8(u8 taskId); -void sub_810A2DC(u8 taskId); +void Task_ItemMenuAction_Use(u8 taskId); +void Task_ItemMenuAction_Toss(u8 taskId); +void Task_ItemMenuAction_ToggleSelect(u8 taskId); +void Task_ItemMenuAction_Give(u8 taskId); +void Task_ItemMenuAction_Cancel(u8 taskId); void sub_810A324(u8 taskId); bool8 sub_810ADAC(void); void sub_810AF9C(u8 taskId); @@ -100,40 +101,40 @@ const struct BgTemplate gUnknown_8452CF4[2] = { } }; -const u8 *const gUnknown_8452CFC[] = { - gUnknown_84162CD, - gUnknown_84162DE, - gUnknown_84162D3 +const u8 *const sPocketNames[] = { + gText_Items2, + gText_KeyItems2, + gText_PokeBalls2 }; const u16 gUnknown_8452D08[][18] = { - INCBIN_U16("graphics/item_menu/bagmap_0.bin"), - INCBIN_U16("graphics/item_menu/bagmap_1.bin"), - INCBIN_U16("graphics/item_menu/bagmap_2.bin"), - INCBIN_U16("graphics/item_menu/bagmap_3.bin"), - INCBIN_U16("graphics/item_menu/bagmap_4.bin"), - INCBIN_U16("graphics/item_menu/bagmap_5.bin"), - INCBIN_U16("graphics/item_menu/bagmap_6.bin"), - INCBIN_U16("graphics/item_menu/bagmap_7.bin"), - INCBIN_U16("graphics/item_menu/bagmap_8.bin"), - INCBIN_U16("graphics/item_menu/bagmap_9.bin"), - INCBIN_U16("graphics/item_menu/bagmap_A.bin"), - INCBIN_U16("graphics/item_menu/bagmap_B.bin") + [ITEMMENUACTION_USE] = INCBIN_U16("graphics/item_menu/bagmap_0.bin"), + [ITEMMENUACTION_TOSS] = INCBIN_U16("graphics/item_menu/bagmap_1.bin"), + [ITEMMENUACTION_REGISTER] = INCBIN_U16("graphics/item_menu/bagmap_2.bin"), + [ITEMMENUACTION_GIVE] = INCBIN_U16("graphics/item_menu/bagmap_3.bin"), + [ITEMMENUACTION_CANCEL] = INCBIN_U16("graphics/item_menu/bagmap_4.bin"), + [ITEMMENUACTION_BATTLE_USE] = INCBIN_U16("graphics/item_menu/bagmap_5.bin"), + [ITEMMENUACTION_CHECK] = INCBIN_U16("graphics/item_menu/bagmap_6.bin"), + [ITEMMENUACTION_OPEN] = INCBIN_U16("graphics/item_menu/bagmap_7.bin"), + [ITEMMENUACTION_OPEN_BERRIES] = INCBIN_U16("graphics/item_menu/bagmap_8.bin"), + [ITEMMENUACTION_WALK] = INCBIN_U16("graphics/item_menu/bagmap_9.bin"), + [ITEMMENUACTION_DESELECT] = INCBIN_U16("graphics/item_menu/bagmap_A.bin"), + [ITEMMENUACTION_DUMMY] = INCBIN_U16("graphics/item_menu/bagmap_B.bin") }; const struct MenuAction gUnknown_8452EB8[] = { - {gOtherText_Use, {.void_u8 = sub_8109C50}}, - {gOtherText_Toss, {.void_u8 = sub_8109CC0}}, - {gUnknown_84161A9, {.void_u8 = sub_810A000}}, - {gOtherText_Give, {.void_u8 = sub_810A0A8}}, - {gFameCheckerText_Cancel, {.void_u8 = sub_810A2DC}}, - {gOtherText_Use, {.void_u8 = sub_810A324}}, - {gUnknown_84161E9, {.void_u8 = sub_8109C50}}, - {gUnknown_84161F4, {.void_u8 = sub_8109C50}}, - {gUnknown_84161F4, {.void_u8 = sub_810A324}}, - {gUnknown_84161BC, {.void_u8 = sub_8109C50}}, - {gUnknown_84161F9, {.void_u8 = sub_810A000}}, - {gString_Dummy, {.void_u8 = NULL}} + [ITEMMENUACTION_USE] = {gOtherText_Use, {.void_u8 = Task_ItemMenuAction_Use}}, + [ITEMMENUACTION_TOSS] = {gOtherText_Toss, {.void_u8 = Task_ItemMenuAction_Toss}}, + [ITEMMENUACTION_REGISTER] = {gOtherText_Register, {.void_u8 = Task_ItemMenuAction_ToggleSelect}}, + [ITEMMENUACTION_GIVE] = {gOtherText_Give, {.void_u8 = Task_ItemMenuAction_Give}}, + [ITEMMENUACTION_CANCEL] = {gFameCheckerText_Cancel, {.void_u8 = Task_ItemMenuAction_Cancel}}, + [ITEMMENUACTION_BATTLE_USE] = {gOtherText_Use, {.void_u8 = sub_810A324}}, + [ITEMMENUACTION_CHECK] = {gOtherText_Check, {.void_u8 = Task_ItemMenuAction_Use}}, + [ITEMMENUACTION_OPEN] = {gOtherText_Open, {.void_u8 = Task_ItemMenuAction_Use}}, + [ITEMMENUACTION_OPEN_BERRIES] = {gOtherText_Open, {.void_u8 = sub_810A324}}, + [ITEMMENUACTION_WALK] = {gOtherText_Walk, {.void_u8 = Task_ItemMenuAction_Use}}, + [ITEMMENUACTION_DESELECT] = {gOtherText_Deselect, {.void_u8 = Task_ItemMenuAction_ToggleSelect}}, + [ITEMMENUACTION_DUMMY] = {gString_Dummy, {.void_u8 = NULL}} }; extern const u8 gUnknown_8452F60[]; @@ -155,7 +156,7 @@ void GoToBagMenu(u8 location, u8 a1, MainCallback a2) gUnknown_203ACFC.location = location; if (a2 != NULL) gUnknown_203ACFC.bagCallback = a2; - gUnknown_203AD10->field_00 = 0; + gUnknown_203AD10->field_00 = NULL; gUnknown_203AD10->field_04 = 0xFF; gUnknown_203AD10->itemMenuIcon = 0; gUnknown_203AD10->field_05_6 = 0; @@ -578,7 +579,7 @@ void bag_menu_print_cursor(u8 y, u8 colorIdx) void sub_81087EC(void) { FillWindowPixelBuffer(2, PIXEL_FILL(0)); - sub_810B958(gUnknown_8452CFC[gUnknown_203ACFC.pocket], gUnknown_203ACFC.pocket); + sub_810B958(sPocketNames[gUnknown_203ACFC.pocket], gUnknown_203ACFC.pocket); } void sub_8108818(s32 itemIndex) @@ -731,3 +732,97 @@ void ItemMenu_StartFadeToExitCallback(u8 taskId) BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); gTasks[taskId].func = sub_8108B8C; } + +void sub_8108B8C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (!gPaletteFade.active && FuncIsActiveTask(sub_8108CFC) != TRUE) + { + DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + if (gUnknown_203AD10->field_00 != NULL) + SetMainCallback2(gUnknown_203AD10->field_00); + else + SetMainCallback2(gUnknown_203ACFC.bagCallback); + sub_8108978(); + sub_8108B04(); + DestroyTask(taskId); + } +} + +void sub_8108C10(void) +{ + u16 paldata = RGB_BLACK; + u8 taskId; + + LoadPalette(&paldata, 0x00, 0x02); + SetGpuReg(REG_OFFSET_WININ, 0); + SetGpuReg(REG_OFFSET_WINOUT, 0x3F); + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + if (gUnknown_203ACFC.unk5 == 1) + { + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 240)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 0)); + } + else + { + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 240)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 160)); + taskId = CreateTask(sub_8108CFC, 0); + gTasks[taskId].data[0] = 192; + gTasks[taskId].data[1] = -16; + gUnknown_203ACFC.unk5 = 1; + } +} + +void sub_8108CB4(void) +{ + + u8 taskId = CreateTask(sub_8108CFC, 0); + gTasks[taskId].data[0] = -16; + gTasks[taskId].data[1] = 16; + gUnknown_203ACFC.unk5 = 0; +} + +void CB2_SetUpReshowBattleScreenAfterMenu(void) +{ + gUnknown_203ACFC.unk5 = 0; +} + +void sub_8108CFC(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + data[0] += data[1]; + if (data[0] > 160) + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 160)); + else + SetGpuReg(REG_OFFSET_WIN0V, data[0]); + if ((data[1] == 16 && data[0] == 160) || (data[1] == -16 && data[0] == 0)) + DestroyTask(taskId); +} + +void MoveItemSlotInList(struct ItemSlot * itemSlots_, u32 from, u32 to_) +{ + // dumb assignments needed to match + struct ItemSlot *itemSlots = itemSlots_; + u32 to = to_; + + if (from != to) + { + s16 i, count; + struct ItemSlot firstSlot = itemSlots[from]; + + if (to > from) + { + to--; + for (i = from, count = to; i < count; i++) + itemSlots[i] = itemSlots[i + 1]; + } + else + { + for (i = from, count = to; i > count; i--) + itemSlots[i] = itemSlots[i - 1]; + } + itemSlots[to] = firstSlot; + } +} diff --git a/src/item_pc.c b/src/item_pc.c index 217acc829..3134d9f6b 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -814,7 +814,7 @@ static void ItemPc_InsertItemIntoNewSlot(u8 taskId, u32 pos) ItemPc_MoveItemModeCancel(taskId, pos); else { - ItemMenu_MoveItemSlotToNewPositionInArray(gSaveBlock1Ptr->pcItems, data[1], pos); + MoveItemSlotInList(gSaveBlock1Ptr->pcItems, data[1], pos); DestroyListMenuTask(data[0], &sListMenuState.scroll, &sListMenuState.row); if (data[1] < pos) sListMenuState.row--; From 24e199fdfdce8e17f65578b7446c2a8368b3a0be Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 18 Jan 2020 12:59:26 -0500 Subject: [PATCH 12/22] through sub_81090DC --- asm/item_menu.s | 416 -------------------------------------------- include/item_menu.h | 2 +- src/item_menu.c | 140 ++++++++++++++- 3 files changed, 137 insertions(+), 421 deletions(-) diff --git a/asm/item_menu.s b/asm/item_menu.s index 2444ffeb0..60bbe8635 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -5,422 +5,6 @@ .text - thumb_func_start sub_8108DC8 -sub_8108DC8: @ 8108DC8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, r5, 3 - ldr r0, _08108E3C @ =gBagPockets - adds r4, r1, r0 - ldr r0, [r4] - ldrb r1, [r4, 0x4] - bl BagPocketCompaction - ldr r3, _08108E40 @ =gUnknown_203AD10 - ldr r0, [r3] - adds r0, 0xA - adds r0, r5 - movs r1, 0 - strb r1, [r0] - movs r2, 0 - ldrb r0, [r4, 0x4] - cmp r2, r0 - bcs _08108E1C - ldr r0, [r4] - ldrh r0, [r0] - cmp r0, 0 - beq _08108E1C -_08108DF8: - ldr r0, [r3] - adds r0, 0xA - adds r0, r5 - ldrb r1, [r0] - adds r1, 0x1 - strb r1, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - ldrb r0, [r4, 0x4] - cmp r2, r0 - bcs _08108E1C - ldr r0, [r4] - lsls r1, r2, 2 - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _08108DF8 -_08108E1C: - ldr r0, _08108E40 @ =gUnknown_203AD10 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0xA - adds r0, r5 - ldrb r0, [r0] - adds r2, r0, 0x1 - cmp r2, 0x6 - ble _08108E44 - adds r0, r1, 0 - adds r0, 0xD - adds r0, r5 - movs r1, 0x6 - strb r1, [r0] - b _08108E4C - .align 2, 0 -_08108E3C: .4byte gBagPockets -_08108E40: .4byte gUnknown_203AD10 -_08108E44: - adds r0, r1, 0 - adds r0, 0xD - adds r0, r5 - strb r2, [r0] -_08108E4C: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8108DC8 - - thumb_func_start sub_8108E54 -sub_8108E54: @ 8108E54 - push {r4,lr} - movs r4, 0 -_08108E58: - adds r0, r4, 0 - bl sub_8108DC8 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x2 - bls _08108E58 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8108E54 - - thumb_func_start DisplayItemMessageInBag -DisplayItemMessageInBag: @ 8108E70 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x10 - adds r5, r0, 0 - adds r6, r1, 0 - mov r8, r2 - mov r9, r3 - lsls r5, 24 - lsrs r5, 24 - lsls r6, 24 - lsrs r6, 24 - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - ldr r0, _08108EDC @ =gTasks+0x8 - adds r4, r0 - movs r0, 0x5 - bl sub_810BA70 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x14] - movs r1, 0x11 - bl FillWindowPixelBuffer - bl GetTextSpeedSetting - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r4, 0x14] - str r6, [sp] - str r0, [sp, 0x4] - mov r0, r8 - str r0, [sp, 0x8] - mov r0, r9 - str r0, [sp, 0xC] - adds r0, r5, 0 - movs r2, 0x6D - movs r3, 0xD - bl DisplayMessageAndContinueTask - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08108EDC: .4byte gTasks+0x8 - thumb_func_end DisplayItemMessageInBag - - thumb_func_start ItemMenu_SetExitCallback -ItemMenu_SetExitCallback: @ 8108EE0 - ldr r1, _08108EE8 @ =gUnknown_203AD10 - ldr r1, [r1] - str r0, [r1] - bx lr - .align 2, 0 -_08108EE8: .4byte gUnknown_203AD10 - thumb_func_end ItemMenu_SetExitCallback - - thumb_func_start sub_8108EEC -sub_8108EEC: @ 8108EEC - lsls r0, 24 - ldr r1, _08108F08 @ =gUnknown_203ACFC - lsrs r0, 23 - adds r2, r1, 0 - adds r2, 0xE - adds r2, r0, r2 - adds r1, 0x8 - adds r0, r1 - ldrb r0, [r0] - ldrb r2, [r2] - adds r0, r2 - lsls r0, 24 - lsrs r0, 24 - bx lr - .align 2, 0 -_08108F08: .4byte gUnknown_203ACFC - thumb_func_end sub_8108EEC - - thumb_func_start sub_8108F0C -sub_8108F0C: @ 8108F0C - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _08108F78 @ =gTasks+0x8 - adds r7, r0, r1 - ldr r0, _08108F7C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08108F2C - b _081090C6 -_08108F2C: - ldr r0, _08108F80 @ =sub_8108CFC - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08108F3C - b _081090C6 -_08108F3C: - bl sub_80BF72C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08108F4A - b _081090C6 -_08108F4A: - ldr r4, _08108F84 @ =gUnknown_203ACFC - ldrb r1, [r4, 0x6] - adds r0, r6, 0 - bl sub_8109168 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08108F8C - cmp r0, 0x2 - beq _08108F94 - ldr r0, _08108F88 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _08108FE4 - adds r5, r4, 0 - ldrb r0, [r5, 0x4] - cmp r0, 0 - bne _08108FE4 - b _08108FA0 - .align 2, 0 -_08108F78: .4byte gTasks+0x8 -_08108F7C: .4byte gPaletteFade -_08108F80: .4byte sub_8108CFC -_08108F84: .4byte gUnknown_203ACFC -_08108F88: .4byte gMain -_08108F8C: - movs r1, 0x1 - negs r1, r1 - adds r0, r6, 0 - b _08108F98 -_08108F94: - adds r0, r6, 0 - movs r1, 0x1 -_08108F98: - movs r2, 0 - bl sub_81091D0 - b _081090C6 -_08108FA0: - ldrb r0, [r7] - mov r4, sp - adds r4, 0x2 - mov r1, sp - adds r2, r4, 0 - bl ListMenuGetScrollAndRow - mov r0, sp - ldrh r1, [r0] - ldrh r0, [r4] - adds r1, r0 - ldr r0, _08108FE0 @ =gUnknown_203AD10 - ldr r0, [r0] - adds r0, 0xA - ldrh r5, [r5, 0x6] - adds r0, r5 - ldrb r0, [r0] - cmp r1, r0 - beq _08108FE4 - movs r0, 0x5 - bl PlaySE - mov r0, sp - ldrh r1, [r4] - ldrh r0, [r0] - adds r1, r0 - lsls r1, 16 - asrs r1, 16 - adds r0, r6, 0 - bl sub_81093B8 - b _081090C6 - .align 2, 0 -_08108FE0: .4byte gUnknown_203AD10 -_08108FE4: - ldrb r0, [r7] - bl ListMenu_ProcessInput - adds r4, r0, 0 - ldrb r0, [r7] - ldr r5, _08109014 @ =gUnknown_203ACFC - ldrh r2, [r5, 0x6] - lsls r2, 1 - adds r1, r5, 0 - adds r1, 0xE - adds r1, r2, r1 - adds r3, r5, 0 - adds r3, 0x8 - adds r2, r3 - bl ListMenuGetScrollAndRow - movs r0, 0x2 - negs r0, r0 - cmp r4, r0 - beq _08109018 - adds r0, 0x1 - cmp r4, r0 - bne _08109044 - b _081090C6 - .align 2, 0 -_08109014: .4byte gUnknown_203ACFC -_08109018: - movs r0, 0x5 - bl PlaySE - ldr r1, _08109038 @ =gSpecialVar_ItemId - movs r0, 0 - strh r0, [r1] - bl sub_8108CB4 - ldr r1, _0810903C @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _08109040 @ =ItemMenu_StartFadeToExitCallback - b _081090C4 - .align 2, 0 -_08109038: .4byte gSpecialVar_ItemId -_0810903C: .4byte gTasks -_08109040: .4byte ItemMenu_StartFadeToExitCallback -_08109044: - movs r0, 0x5 - bl PlaySE - ldr r0, _08109074 @ =gUnknown_203AD10 - ldr r0, [r0] - adds r0, 0xA - ldrh r1, [r5, 0x6] - adds r0, r1 - ldrb r0, [r0] - cmp r4, r0 - bne _08109084 - ldr r1, _08109078 @ =gSpecialVar_ItemId - movs r0, 0 - strh r0, [r1] - bl sub_8108CB4 - ldr r1, _0810907C @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _08109080 @ =ItemMenu_StartFadeToExitCallback - b _081090C4 - .align 2, 0 -_08109074: .4byte gUnknown_203AD10 -_08109078: .4byte gSpecialVar_ItemId -_0810907C: .4byte gTasks -_08109080: .4byte ItemMenu_StartFadeToExitCallback -_08109084: - bl sub_8108978 - ldrb r0, [r7] - movs r1, 0x2 - bl bag_menu_print_cursor_ - strh r4, [r7, 0x2] - ldrb r0, [r5, 0x6] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - lsls r4, 16 - lsrs r4, 16 - adds r1, r4, 0 - bl BagGetQuantityByPocketPosition - strh r0, [r7, 0x4] - ldrb r0, [r5, 0x6] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - bl BagGetItemIdByPocketPosition - ldr r1, _081090D0 @ =gSpecialVar_ItemId - strh r0, [r1] - ldr r1, _081090D4 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldr r1, _081090D8 @ =sub_81090DC -_081090C4: - str r1, [r0] -_081090C6: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081090D0: .4byte gSpecialVar_ItemId -_081090D4: .4byte gTasks -_081090D8: .4byte sub_81090DC - thumb_func_end sub_8108F0C - - thumb_func_start sub_81090DC -sub_81090DC: @ 81090DC - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - bl sub_8109140 - ldr r1, _08109104 @ =gUnknown_8452F34 - ldr r0, _08109108 @ =gUnknown_203ACFC - ldrb r0, [r0, 0x4] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08109104: .4byte gUnknown_8452F34 -_08109108: .4byte gUnknown_203ACFC - thumb_func_end sub_81090DC - thumb_func_start sub_810910C sub_810910C: @ 810910C push {r4,lr} diff --git a/include/item_menu.h b/include/item_menu.h index e7337ffc4..43159401a 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -34,7 +34,7 @@ void MoveItemSlotInList(struct ItemSlot * itemSlots_, u32 from, u32 to_); void ItemMenu_StartFadeToExitCallback(u8 taskId); void sub_8108CB4(void); void ItemMenu_SetExitCallback(void (*)(void)); -void DisplayItemMessageInBag(u8 taskId, u8 bgId, const u8 * string, TaskFunc followUpFunc); +void DisplayItemMessageInBag(u8 taskId, u8 fontId, const u8 * string, TaskFunc followUpFunc); void sub_810A1F8(u8 taskId); void sub_8107ECC(void); void sub_810AF74(void); diff --git a/src/item_menu.c b/src/item_menu.c index 5c09791ae..7b42ddaae 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -22,7 +22,7 @@ struct BagMenuAlloc { - MainCallback field_00; + MainCallback exitCB; u8 field_04; u8 field_05_0:4; u8 itemMenuIcon:2; @@ -68,12 +68,26 @@ void sub_8108CFC(u8 taskId); void sub_8108C10(void); void sub_8108E54(void); void sub_8108F0C(u8 taskId); +void sub_81090DC(u8 taskId); +void sub_8109140(u8 a0); +u8 sub_8109168(u8 taskId, u8 pocketId); +void sub_81091D0(u8 taskId, s16 itemIndex, u8 a2); +void sub_81093B8(u8 taskId, s16 itemIndex); +void sub_8109BB8(u8 taskId); void Task_ItemMenuAction_Use(u8 taskId); void Task_ItemMenuAction_Toss(u8 taskId); void Task_ItemMenuAction_ToggleSelect(u8 taskId); void Task_ItemMenuAction_Give(u8 taskId); void Task_ItemMenuAction_Cancel(u8 taskId); +void sub_8109DB0(u8 taskId); +void sub_8109EA8(u8 taskId); void sub_810A324(u8 taskId); +void sub_810A370(u8 taskId); +void sub_810A468(u8 taskId); +void sub_810A568(u8 taskId); +void sub_810A720(u8 taskId); +void sub_810A940(u8 taskId); +void sub_810AB40(u8 taskId); bool8 sub_810ADAC(void); void sub_810AF9C(u8 taskId); void sub_810B1D4(u8 taskId); @@ -137,6 +151,7 @@ const struct MenuAction gUnknown_8452EB8[] = { [ITEMMENUACTION_DUMMY] = {gString_Dummy, {.void_u8 = NULL}} }; +extern const TaskFunc gUnknown_8452F34[]; extern const u8 gUnknown_8452F60[]; extern const u8 gUnknown_8452F66[]; extern const struct ScrollArrowsTemplate gUnknown_8452F6C; @@ -156,7 +171,7 @@ void GoToBagMenu(u8 location, u8 a1, MainCallback a2) gUnknown_203ACFC.location = location; if (a2 != NULL) gUnknown_203ACFC.bagCallback = a2; - gUnknown_203AD10->field_00 = NULL; + gUnknown_203AD10->exitCB = NULL; gUnknown_203AD10->field_04 = 0xFF; gUnknown_203AD10->itemMenuIcon = 0; gUnknown_203AD10->field_05_6 = 0; @@ -739,8 +754,8 @@ void sub_8108B8C(u8 taskId) if (!gPaletteFade.active && FuncIsActiveTask(sub_8108CFC) != TRUE) { DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - if (gUnknown_203AD10->field_00 != NULL) - SetMainCallback2(gUnknown_203AD10->field_00); + if (gUnknown_203AD10->exitCB != NULL) + SetMainCallback2(gUnknown_203AD10->exitCB); else SetMainCallback2(gUnknown_203ACFC.bagCallback); sub_8108978(); @@ -826,3 +841,120 @@ void MoveItemSlotInList(struct ItemSlot * itemSlots_, u32 from, u32 to_) itemSlots[to] = firstSlot; } } + +void sub_8108DC8(u8 pocketId) +{ + u16 i; + struct BagPocket * pocket = &gBagPockets[pocketId]; + BagPocketCompaction(pocket->itemSlots, pocket->capacity); + gUnknown_203AD10->nItems[pocketId] = 0; + for (i = 0; i < pocket->capacity; i++) + { + if (pocket->itemSlots[i].itemId == ITEM_NONE) + break; + gUnknown_203AD10->nItems[pocketId]++; + } + if (gUnknown_203AD10->nItems[pocketId] + 1 > 6) + gUnknown_203AD10->maxShowed[pocketId] = 6; + else + gUnknown_203AD10->maxShowed[pocketId] = gUnknown_203AD10->nItems[pocketId] + 1; +} + +void sub_8108E54(void) +{ + u8 i; + for (i = 0; i < 3; i++) + sub_8108DC8(i); +} + +void DisplayItemMessageInBag(u8 taskId, u8 fontId, const u8 * string, TaskFunc followUpFunc) +{ + s16 *data = gTasks[taskId].data; + data[10] = sub_810BA70(5); + FillWindowPixelBuffer(data[10], PIXEL_FILL(1)); + DisplayMessageAndContinueTask(taskId, data[10], 0x06D, 0x0D, fontId, GetTextSpeedSetting(), string, followUpFunc); + ScheduleBgCopyTilemapToVram(0); +} + +void ItemMenu_SetExitCallback(MainCallback cb) +{ + gUnknown_203AD10->exitCB = cb; +} + +u8 sub_8108EEC(u8 a0) +{ + return gUnknown_203ACFC.cursorPos[a0] + gUnknown_203ACFC.itemsAbove[a0]; +} + +void sub_8108F0C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 cursorPos; + u16 itemsAbove; + s32 input; + + if (gPaletteFade.active) + return; + if (FuncIsActiveTask(sub_8108CFC) == TRUE) + return; + if ((u8)sub_80BF72C() == TRUE) + return; + switch (sub_8109168(taskId, gUnknown_203ACFC.pocket)) + { + case 1: + sub_81091D0(taskId, -1, 0); + return; + case 2: + sub_81091D0(taskId, 1, 0); + return; + default: + if (JOY_NEW(SELECT_BUTTON) && gUnknown_203ACFC.location == 0) + { + ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); + if (cursorPos + itemsAbove != gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket]) + { + PlaySE(SE_SELECT); + sub_81093B8(taskId, cursorPos + itemsAbove); + return; + } + } + break; + } + input = ListMenu_ProcessInput(data[0]); + ListMenuGetScrollAndRow(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + switch (input) + { + case -1: + return; + case -2: + PlaySE(SE_SELECT); + gSpecialVar_ItemId = ITEM_NONE; + sub_8108CB4(); + gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; + break; + default: + PlaySE(SE_SELECT); + if (input == gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket]) + { + gSpecialVar_ItemId = ITEM_NONE; + sub_8108CB4(); + gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; + } + else + { + sub_8108978(); + bag_menu_print_cursor_(data[0], 2); + data[1] = input; + data[2] = BagGetQuantityByPocketPosition(gUnknown_203ACFC.pocket + 1, input); + gSpecialVar_ItemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, input); + gTasks[taskId].func = sub_81090DC; + } + break; + } +} + +void sub_81090DC(u8 taskId) +{ + sub_8109140(1); + gUnknown_8452F34[gUnknown_203ACFC.location](taskId); +} From 39dcda73c4eced02683dccb4319dac480f3300fe Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 18 Jan 2020 14:59:07 -0500 Subject: [PATCH 13/22] through sub_810967C --- asm/item_menu.s | 733 ------------------------------------------------ src/item_menu.c | 210 +++++++++++++- 2 files changed, 206 insertions(+), 737 deletions(-) diff --git a/asm/item_menu.s b/asm/item_menu.s index 60bbe8635..2b42a59b8 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -5,739 +5,6 @@ .text - thumb_func_start sub_810910C -sub_810910C: @ 810910C - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0 - bl sub_8109140 - bl sub_8108888 - bl sub_81088D8 - ldr r1, _08109138 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0810913C @ =sub_8108F0C - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08109138: .4byte gTasks -_0810913C: .4byte sub_8108F0C - thumb_func_end sub_810910C - - thumb_func_start sub_8109140 -sub_8109140: @ 8109140 - push {lr} - sub sp, 0x8 - movs r1, 0x6 - str r1, [sp] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x4] - movs r0, 0x1 - movs r1, 0 - movs r2, 0xE - movs r3, 0x1E - bl SetBgTilemapPalette - movs r0, 0x1 - bl ScheduleBgCopyTilemapToVram - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_8109140 - - thumb_func_start sub_8109168 -sub_8109168: @ 8109168 - push {r4,lr} - lsls r1, 24 - lsrs r4, r1, 24 - ldr r0, _081091A4 @ =gUnknown_203AD10 - ldr r0, [r0] - ldrb r1, [r0, 0x5] - movs r0, 0xF - ands r0, r1 - cmp r0, 0 - bne _081091C6 - bl GetLRKeysState - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _081091A8 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - bne _08109194 - cmp r2, 0x1 - bne _081091AC -_08109194: - cmp r4, 0 - beq _081091C6 - movs r0, 0xF6 - bl PlaySE - movs r0, 0x1 - b _081091C8 - .align 2, 0 -_081091A4: .4byte gUnknown_203AD10 -_081091A8: .4byte gMain -_081091AC: - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _081091B8 - cmp r2, 0x2 - bne _081091C6 -_081091B8: - cmp r4, 0x1 - bhi _081091C6 - movs r0, 0xF6 - bl PlaySE - movs r0, 0x2 - b _081091C8 -_081091C6: - movs r0, 0 -_081091C8: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8109168 - - thumb_func_start sub_81091D0 -sub_81091D0: @ 81091D0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r6, r1, 0 - lsls r2, 16 - lsls r0, r5, 2 - adds r0, r5 - lsls r7, r0, 3 - ldr r0, _08109288 @ =gTasks+0x8 - mov r8, r0 - adds r4, r7, r0 - movs r0, 0 - strh r0, [r4, 0x1A] - strh r0, [r4, 0x18] - strh r6, [r4, 0x16] - cmp r2, 0 - bne _08109242 - movs r0, 0 - bl ClearWindowTilemap - movs r0, 0x1 - bl ClearWindowTilemap - movs r0, 0x2 - bl ClearWindowTilemap - ldrb r0, [r4] - ldr r3, _0810928C @ =gUnknown_203ACFC - ldrh r2, [r3, 0x6] - lsls r2, 1 - adds r1, r3, 0 - adds r1, 0xE - adds r1, r2, r1 - adds r3, 0x8 - adds r2, r3 - bl DestroyListMenuTask - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldr r0, _08109290 @ =gUnknown_203AD10 - ldr r0, [r0] - ldrb r1, [r0, 0x5] - lsls r1, 26 - lsrs r1, 30 - movs r0, 0x1 - eors r0, r1 - bl DestroyItemMenuIcon - bl sub_8108978 -_08109242: - movs r0, 0x12 - str r0, [sp] - movs r0, 0xC - str r0, [sp, 0x4] - movs r0, 0x1 - movs r1, 0x2D - movs r2, 0xB - movs r3, 0x1 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0x1 - bl ScheduleBgCopyTilemapToVram - ldr r0, _0810928C @ =gUnknown_203ACFC - ldrb r0, [r0, 0x6] - adds r0, r6 - lsls r0, 24 - lsrs r0, 24 - bl sub_8098528 - ldr r1, _08109294 @ =sub_8109298 - mov r0, r8 - subs r0, 0x8 - adds r0, r7, r0 - ldr r2, [r0] - adds r0, r5, 0 - bl SetTaskFuncWithFollowupFunc - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08109288: .4byte gTasks+0x8 -_0810928C: .4byte gUnknown_203ACFC -_08109290: .4byte gUnknown_203AD10 -_08109294: .4byte sub_8109298 - thumb_func_end sub_81091D0 - - thumb_func_start sub_8109298 -sub_8109298: @ 8109298 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _081092DC @ =gTasks+0x8 - adds r5, r0, r1 - bl MenuHelpers_LinkSomething - lsls r0, 24 - cmp r0, 0 - bne _08109314 - bl sub_810ADAC - lsls r0, 24 - cmp r0, 0 - bne _08109314 - ldr r4, _081092E0 @ =gUnknown_203ACFC - ldrb r1, [r5, 0x16] - ldrb r0, [r4, 0x6] - adds r1, r0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r6, 0 - bl sub_8109168 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _081092E4 - cmp r0, 0x2 - beq _081092FA - b _08109314 - .align 2, 0 -_081092DC: .4byte gTasks+0x8 -_081092E0: .4byte gUnknown_203ACFC -_081092E4: - ldrh r0, [r5, 0x16] - ldrh r1, [r4, 0x6] - adds r0, r1 - strh r0, [r4, 0x6] - adds r0, r6, 0 - bl SwitchTaskToFollowupFunc - movs r1, 0x1 - negs r1, r1 - adds r0, r6, 0 - b _0810930C -_081092FA: - ldrh r0, [r5, 0x16] - ldrh r2, [r4, 0x6] - adds r0, r2 - strh r0, [r4, 0x6] - adds r0, r6, 0 - bl SwitchTaskToFollowupFunc - adds r0, r6, 0 - movs r1, 0x1 -_0810930C: - movs r2, 0x1 - bl sub_81091D0 - b _081093AA -_08109314: - movs r1, 0x1A - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _08109322 - cmp r0, 0x1 - beq _08109358 - b _081093AA -_08109322: - ldrh r1, [r5, 0x18] - movs r2, 0x18 - ldrsh r0, [r5, r2] - ldr r4, _08109354 @ =0x00007fff - cmp r0, r4 - beq _0810934C - adds r0, r1, 0x1 - strh r0, [r5, 0x18] - lsls r0, 24 - lsrs r0, 24 - bl sub_8109854 - movs r1, 0x18 - ldrsh r0, [r5, r1] - cmp r0, 0xC - bne _08109344 - strh r4, [r5, 0x18] -_08109344: - movs r2, 0x18 - ldrsh r0, [r5, r2] - cmp r0, r4 - bne _081093AA -_0810934C: - ldrh r0, [r5, 0x1A] - adds r0, 0x1 - strh r0, [r5, 0x1A] - b _081093AA - .align 2, 0 -_08109354: .4byte 0x00007fff -_08109358: - ldr r4, _081093B0 @ =gUnknown_203ACFC - ldrh r0, [r5, 0x16] - ldrh r1, [r4, 0x6] - adds r0, r1 - strh r0, [r4, 0x6] - bl sub_81087EC - ldrb r0, [r4, 0x6] - bl sub_810842C - ldr r0, _081093B4 @ =gMultiuseListMenuTemplate - ldrh r2, [r4, 0x6] - lsls r2, 1 - adds r1, r4, 0 - adds r1, 0xE - adds r1, r2, r1 - ldrh r1, [r1] - adds r4, 0x8 - adds r2, r4 - ldrh r2, [r2] - bl ListMenuInit - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5] - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0x2 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - bl sub_8108888 - bl sub_81088D8 - adds r0, r6, 0 - bl SwitchTaskToFollowupFunc -_081093AA: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081093B0: .4byte gUnknown_203ACFC -_081093B4: .4byte gMultiuseListMenuTemplate - thumb_func_end sub_8109298 - - thumb_func_start sub_81093B8 -sub_81093B8: @ 81093B8 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x18 - adds r4, r1, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r4, 16 - lsrs r4, 16 - lsls r5, r0, 2 - adds r5, r0 - lsls r5, 3 - ldr r0, _08109494 @ =gTasks+0x8 - mov r9, r0 - adds r1, r5, 0 - add r1, r9 - mov r8, r1 - ldrb r0, [r1] - mov r2, sp - adds r2, 0x16 - add r1, sp, 0x14 - bl ListMenuGetScrollAndRow - mov r2, r8 - ldrb r0, [r2] - movs r1, 0x10 - movs r2, 0x1 - bl ListMenuSetUnkIndicatorsStructField - mov r0, r8 - strh r4, [r0, 0x2] - ldr r0, _08109498 @ =gUnknown_203AD10 - ldr r0, [r0] - movs r6, 0 - strb r4, [r0, 0x4] - ldr r4, _0810949C @ =gStringVar1 - ldr r0, _081094A0 @ =gUnknown_203ACFC - ldrb r0, [r0, 0x6] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r2, r8 - ldrh r1, [r2, 0x2] - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r0, 16 - bl ItemId_GetName - adds r1, r0, 0 - adds r0, r4, 0 - bl StringCopy - ldr r4, _081094A4 @ =gStringVar4 - ldr r1, _081094A8 @ =gOtherText_WhereShouldTheStrVar1BePlaced - adds r0, r4, 0 - bl StringExpandPlaceholders - movs r0, 0x1 - movs r1, 0 - bl FillWindowPixelBuffer - movs r0, 0x3 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - str r6, [sp, 0x8] - str r6, [sp, 0xC] - str r6, [sp, 0x10] - movs r0, 0x1 - movs r1, 0x2 - adds r2, r4, 0 - movs r3, 0 - bl sub_810B8F0 - mov r1, r8 - ldrb r0, [r1] - bl ListMenuGetYCoordForPrintingArrowCursor - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0 - bl sub_80986A8 - movs r0, 0 - bl sub_8098660 - bl sub_810899C - mov r2, r8 - ldrb r0, [r2] - movs r1, 0x2 - bl bag_menu_print_cursor_ - movs r0, 0x8 - negs r0, r0 - add r9, r0 - add r5, r9 - ldr r0, _081094AC @ =sub_81094B0 - str r0, [r5] - add sp, 0x18 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08109494: .4byte gTasks+0x8 -_08109498: .4byte gUnknown_203AD10 -_0810949C: .4byte gStringVar1 -_081094A0: .4byte gUnknown_203ACFC -_081094A4: .4byte gStringVar4 -_081094A8: .4byte gOtherText_WhereShouldTheStrVar1BePlaced -_081094AC: .4byte sub_81094B0 - thumb_func_end sub_81093B8 - - thumb_func_start sub_81094B0 -sub_81094B0: @ 81094B0 - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _08109538 @ =gTasks+0x8 - adds r4, r0, r1 - bl sub_80BF72C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0810959E - ldrb r0, [r4] - bl ListMenu_ProcessInput - adds r5, r0, 0 - ldrb r0, [r4] - ldr r3, _0810953C @ =gUnknown_203ACFC - ldrh r2, [r3, 0x6] - lsls r2, 1 - adds r1, r3, 0 - adds r1, 0xE - adds r1, r2, r1 - adds r3, 0x8 - adds r2, r3 - bl ListMenuGetScrollAndRow - ldrb r0, [r4] - bl ListMenuGetYCoordForPrintingArrowCursor - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0 - bl sub_80986A8 - ldr r0, _08109540 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _08109548 - movs r0, 0x5 - bl PlaySE - ldr r0, _08109544 @ =gUnknown_203AD10 - ldr r1, [r0] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldrb r0, [r4] - mov r4, sp - adds r4, 0x2 - mov r1, sp - adds r2, r4, 0 - bl ListMenuGetScrollAndRow - mov r0, sp - ldrh r1, [r0] - ldrh r0, [r4] - adds r1, r0 - adds r0, r6, 0 - bl sub_81095AC - b _0810959E - .align 2, 0 -_08109538: .4byte gTasks+0x8 -_0810953C: .4byte gUnknown_203ACFC -_08109540: .4byte gMain -_08109544: .4byte gUnknown_203AD10 -_08109548: - movs r0, 0x2 - negs r0, r0 - cmp r5, r0 - beq _08109558 - adds r0, 0x1 - cmp r5, r0 - bne _08109588 - b _0810959E -_08109558: - movs r0, 0x5 - bl PlaySE - ldr r0, _08109584 @ =gUnknown_203AD10 - ldr r1, [r0] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldrb r0, [r4] - mov r4, sp - adds r4, 0x2 - mov r1, sp - adds r2, r4, 0 - bl ListMenuGetScrollAndRow - mov r0, sp - ldrh r1, [r0] - ldrh r0, [r4] - adds r1, r0 - adds r0, r6, 0 - bl sub_810967C - b _0810959E - .align 2, 0 -_08109584: .4byte gUnknown_203AD10 -_08109588: - movs r0, 0x5 - bl PlaySE - ldr r0, _081095A8 @ =gUnknown_203AD10 - ldr r1, [r0] - movs r0, 0xFF - strb r0, [r1, 0x4] - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_81095AC -_0810959E: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081095A8: .4byte gUnknown_203AD10 - thumb_func_end sub_81094B0 - - thumb_func_start sub_81095AC -sub_81095AC: @ 81095AC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r5, r1, 0 - lsls r0, 24 - lsrs r1, r0, 24 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - mov r9, r0 - ldr r0, _081095E4 @ =gTasks+0x8 - mov r10, r0 - mov r6, r9 - add r6, r10 - movs r3, 0x2 - ldrsh r2, [r6, r3] - cmp r2, r5 - beq _081095DA - subs r0, r5, 0x1 - cmp r2, r0 - bne _081095E8 -_081095DA: - adds r0, r1, 0 - adds r1, r5, 0 - bl sub_810967C - b _0810965C - .align 2, 0 -_081095E4: .4byte gTasks+0x8 -_081095E8: - ldr r1, _0810966C @ =gBagPockets - ldr r4, _08109670 @ =gUnknown_203ACFC - ldrh r0, [r4, 0x6] - lsls r0, 3 - adds r0, r1 - ldr r0, [r0] - adds r1, r2, 0 - adds r2, r5, 0 - bl MoveItemSlotInList - ldrb r0, [r6] - ldrh r2, [r4, 0x6] - lsls r2, 1 - movs r1, 0xE - adds r1, r4 - mov r8, r1 - adds r1, r2, r1 - adds r7, r4, 0 - adds r7, 0x8 - adds r2, r7 - bl DestroyListMenuTask - movs r3, 0x2 - ldrsh r0, [r6, r3] - cmp r0, r5 - bcs _08109628 - ldrh r1, [r4, 0x6] - lsls r1, 1 - adds r1, r7 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] -_08109628: - ldrb r0, [r4, 0x6] - bl sub_810842C - ldr r0, _08109674 @ =gMultiuseListMenuTemplate - ldrh r2, [r4, 0x6] - lsls r2, 1 - mov r3, r8 - adds r1, r2, r3 - ldrh r1, [r1] - adds r2, r7 - ldrh r2, [r2] - bl ListMenuInit - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6] - movs r0, 0x1 - bl sub_8098660 - bl sub_81088D8 - mov r0, r10 - subs r0, 0x8 - add r0, r9 - ldr r1, _08109678 @ =sub_8108F0C - str r1, [r0] -_0810965C: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810966C: .4byte gBagPockets -_08109670: .4byte gUnknown_203ACFC -_08109674: .4byte gMultiuseListMenuTemplate -_08109678: .4byte sub_8108F0C - thumb_func_end sub_81095AC - - thumb_func_start sub_810967C -sub_810967C: @ 810967C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r4, r1, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - mov r8, r1 - ldr r0, _0810970C @ =gTasks+0x8 - mov r10, r0 - mov r6, r8 - add r6, r10 - ldrb r0, [r6] - ldr r5, _08109710 @ =gUnknown_203ACFC - ldrh r2, [r5, 0x6] - lsls r2, 1 - movs r1, 0xE - adds r1, r5 - mov r9, r1 - adds r1, r2, r1 - adds r7, r5, 0 - adds r7, 0x8 - adds r2, r7 - bl DestroyListMenuTask - movs r3, 0x2 - ldrsh r0, [r6, r3] - cmp r0, r4 - bcs _081096CA - ldrh r1, [r5, 0x6] - lsls r1, 1 - adds r1, r7 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] -_081096CA: - ldrb r0, [r5, 0x6] - bl sub_810842C - ldr r0, _08109714 @ =gMultiuseListMenuTemplate - ldrh r2, [r5, 0x6] - lsls r2, 1 - mov r3, r9 - adds r1, r2, r3 - ldrh r1, [r1] - adds r2, r7 - ldrh r2, [r2] - bl ListMenuInit - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6] - movs r0, 0x1 - bl sub_8098660 - bl sub_81088D8 - mov r0, r10 - subs r0, 0x8 - add r0, r8 - ldr r1, _08109718 @ =sub_8108F0C - str r1, [r0] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810970C: .4byte gTasks+0x8 -_08109710: .4byte gUnknown_203ACFC -_08109714: .4byte gMultiuseListMenuTemplate -_08109718: .4byte sub_8108F0C - thumb_func_end sub_810967C - thumb_func_start sub_810971C sub_810971C: @ 810971C push {r4-r6,lr} diff --git a/src/item_menu.c b/src/item_menu.c index 7b42ddaae..66656f8bf 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -69,10 +69,15 @@ void sub_8108C10(void); void sub_8108E54(void); void sub_8108F0C(u8 taskId); void sub_81090DC(u8 taskId); -void sub_8109140(u8 a0); +void sub_8109140(u32 a0); u8 sub_8109168(u8 taskId, u8 pocketId); -void sub_81091D0(u8 taskId, s16 itemIndex, u8 a2); +void sub_81091D0(u8 taskId, s16 direction, bool16 a2); +void sub_8109298(u8 taskId); void sub_81093B8(u8 taskId, s16 itemIndex); +void sub_81094B0(u8 taskId); +void sub_81095AC(u8 taskId, u32 itemIndex); +void sub_810967C(u8 taskId, u32 itemIndex); +void sub_8109854(u8 a0); void sub_8109BB8(u8 taskId); void Task_ItemMenuAction_Use(u8 taskId); void Task_ItemMenuAction_Toss(u8 taskId); @@ -902,10 +907,10 @@ void sub_8108F0C(u8 taskId) switch (sub_8109168(taskId, gUnknown_203ACFC.pocket)) { case 1: - sub_81091D0(taskId, -1, 0); + sub_81091D0(taskId, -1, FALSE); return; case 2: - sub_81091D0(taskId, 1, 0); + sub_81091D0(taskId, 1, FALSE); return; default: if (JOY_NEW(SELECT_BUTTON) && gUnknown_203ACFC.location == 0) @@ -958,3 +963,200 @@ void sub_81090DC(u8 taskId) sub_8109140(1); gUnknown_8452F34[gUnknown_203ACFC.location](taskId); } + +void sub_810910C(u8 taskId) +{ + sub_8109140(0); + sub_8108888(); + sub_81088D8(); + gTasks[taskId].func = sub_8108F0C; +} + +void sub_8109140(u32 a0) +{ + SetBgTilemapPalette(1, 0, 14, 30, 6, a0 + 1); + ScheduleBgCopyTilemapToVram(1); +} + +u8 sub_8109168(u8 taskId, u8 pocketId) +{ + u8 lrState; + if (gUnknown_203AD10->field_05_0 != 0) + return 0; + lrState = GetLRKeysState(); + if (JOY_NEW(DPAD_LEFT) || lrState == 1) + { + if (pocketId == POCKET_ITEMS - 1) + return 0; + PlaySE(SE_BAG2); + return 1; + } + if (JOY_NEW(DPAD_RIGHT) || lrState == 2) + { + if (pocketId >= POCKET_POKE_BALLS - 1) + return 0; + PlaySE(SE_BAG2); + return 2; + } + return 0; +} + +void sub_81091D0(u8 taskId, s16 direction, bool16 a2) +{ + s16 *data = gTasks[taskId].data; + data[13] = 0; + data[12] = 0; + data[11] = direction; + if (!a2) + { + ClearWindowTilemap(0); + ClearWindowTilemap(1); + ClearWindowTilemap(2); + DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + ScheduleBgCopyTilemapToVram(0); + DestroyItemMenuIcon(gUnknown_203AD10->itemMenuIcon ^ 1); + sub_8108978(); + } + FillBgTilemapBufferRect_Palette0(1, 0x02D, 11, 1, 18, 12); + ScheduleBgCopyTilemapToVram(1); + sub_8098528(gUnknown_203ACFC.pocket + direction); + SetTaskFuncWithFollowupFunc(taskId, sub_8109298, gTasks[taskId].func); +} + +void sub_8109298(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (!MenuHelpers_LinkSomething() && !sub_810ADAC()) + { + switch (sub_8109168(taskId, gUnknown_203ACFC.pocket + data[11])) + { + case 1: + gUnknown_203ACFC.pocket += data[11]; + SwitchTaskToFollowupFunc(taskId); + sub_81091D0(taskId, -1, TRUE); + return; + case 2: + gUnknown_203ACFC.pocket += data[11]; + SwitchTaskToFollowupFunc(taskId); + sub_81091D0(taskId, 1, TRUE); + return; + } + } + switch (data[13]) + { + case 0: + if (data[12] != 0x7FFF) + { + data[12]++; + sub_8109854(data[12]); + if (data[12] == 12) + data[12] = 0x7FFF; + } + if (data[12] == 0x7FFF) + data[13]++; + break; + case 1: + gUnknown_203ACFC.pocket += data[11]; + sub_81087EC(); + sub_810842C(gUnknown_203ACFC.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + PutWindowTilemap(1); + PutWindowTilemap(2); + ScheduleBgCopyTilemapToVram(0); + sub_8108888(); + sub_81088D8(); + SwitchTaskToFollowupFunc(taskId); + break; + } +} + +void sub_81093B8(u8 taskId, s16 itemIndex) +{ + u16 itemsAbove; + u16 cursorPos; + s16 *data = gTasks[taskId].data; + ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); + ListMenuSetUnkIndicatorsStructField(data[0], 0x10, 1); + data[1] = itemIndex; + gUnknown_203AD10->field_04 = itemIndex; + StringCopy(gStringVar1, ItemId_GetName(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]))); + StringExpandPlaceholders(gStringVar4, gOtherText_WhereShouldTheStrVar1BePlaced); + FillWindowPixelBuffer(1, PIXEL_FILL(0)); + sub_810B8F0(1, 2, gStringVar4, 0, 3, 2, 0, 0, 0); + sub_80986A8(0, ListMenuGetYCoordForPrintingArrowCursor(data[0])); + sub_8098660(0); + sub_810899C(); + bag_menu_print_cursor_(data[0], 2); + gTasks[taskId].func = sub_81094B0; +} + +void sub_81094B0(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + s32 input; + u16 itemsAbove; + u16 cursorPos; + if ((u8)sub_80BF72C() == TRUE) + return; + input = ListMenu_ProcessInput(data[0]); + ListMenuGetScrollAndRow(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + sub_80986A8(0, ListMenuGetYCoordForPrintingArrowCursor(data[0])); + if (JOY_NEW(SELECT_BUTTON)) + { + PlaySE(SE_SELECT); + gUnknown_203AD10->field_04 = 0xFF; + ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); + sub_81095AC(taskId, cursorPos + itemsAbove); + return; + } + switch (input) + { + case -1: + return; + case -2: + PlaySE(SE_SELECT); + gUnknown_203AD10->field_04 = 0xFF; + ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); + sub_810967C(taskId, cursorPos + itemsAbove); + break; + default: + PlaySE(SE_SELECT); + gUnknown_203AD10->field_04 = 0xFF; + sub_81095AC(taskId, input); + break; + } +} + +void sub_81095AC(u8 taskId, u32 itemIndex) +{ + s16 *data = gTasks[taskId].data; + if (data[1] == itemIndex || data[1] == itemIndex - 1) + { + sub_810967C(taskId, itemIndex); + } + else + { + MoveItemSlotInList(gBagPockets[gUnknown_203ACFC.pocket].itemSlots, data[1], itemIndex); + DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + if (data[1] < itemIndex) + gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]--; + sub_810842C(gUnknown_203ACFC.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + sub_8098660(1); + sub_81088D8(); + gTasks[taskId].func = sub_8108F0C; + } +} + +void sub_810967C(u8 taskId, u32 itemIndex) +{ + s16 *data = gTasks[taskId].data; + DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + if (data[1] < itemIndex) + gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]--; + sub_810842C(gUnknown_203ACFC.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + sub_8098660(1); + sub_81088D8(); + gTasks[taskId].func = sub_8108F0C; +} From 3a235a4fc078bf6474215507bb8e78e0ed8df733 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 18 Jan 2020 16:12:55 -0500 Subject: [PATCH 14/22] through sub_8109890 --- asm/item_menu.s | 549 ------------------------------------------------ src/item_menu.c | 141 +++++++++++++ 2 files changed, 141 insertions(+), 549 deletions(-) diff --git a/asm/item_menu.s b/asm/item_menu.s index 2b42a59b8..f13ae7f38 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -5,555 +5,6 @@ .text - thumb_func_start sub_810971C -sub_810971C: @ 810971C - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - sub sp, 0x14 - adds r4, r0, 0 - adds r6, r1, 0 - lsls r4, 16 - lsrs r4, 16 - movs r0, 0x6 - movs r1, 0x2 - bl sub_810B9DC - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r0, _081097D4 @ =gUnknown_203ACFC - ldrb r0, [r0, 0x6] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r0, 16 - ldr r1, _081097D8 @ =gStringVar1 - mov r10, r1 - bl CopyItemName - ldr r0, _081097DC @ =gStringVar4 - mov r9, r0 - adds r1, r6, 0 - bl StringExpandPlaceholders - movs r0, 0x2 - str r0, [sp] - movs r1, 0x1 - mov r8, r1 - str r1, [sp, 0x4] - movs r6, 0 - str r6, [sp, 0x8] - str r6, [sp, 0xC] - str r1, [sp, 0x10] - adds r0, r5, 0 - movs r1, 0x2 - mov r2, r9 - movs r3, 0 - bl sub_810B8F0 - movs r0, 0 - movs r1, 0 - bl sub_810B9DC - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - mov r0, r10 - movs r1, 0x1 - movs r2, 0x2 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - ldr r1, _081097E0 @ =gText_TimesStrVar1 - mov r0, r9 - bl StringExpandPlaceholders - movs r0, 0xA - str r0, [sp] - mov r0, r8 - str r0, [sp, 0x4] - str r6, [sp, 0x8] - str r6, [sp, 0xC] - str r0, [sp, 0x10] - adds r0, r4, 0 - movs r1, 0 - mov r2, r9 - movs r3, 0x4 - bl sub_810B8F0 - bl sub_8108940 - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081097D4: .4byte gUnknown_203ACFC -_081097D8: .4byte gStringVar1 -_081097DC: .4byte gStringVar4 -_081097E0: .4byte gText_TimesStrVar1 - thumb_func_end sub_810971C - - thumb_func_start sub_81097E4 -sub_81097E4: @ 81097E4 - push {r4-r6,lr} - sub sp, 0x14 - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 24 - lsrs r5, 24 - movs r0, 0 - bl sub_810BAD8 - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - adds r0, r6, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r0, _08109848 @ =gStringVar1 - lsls r4, 16 - asrs r4, 16 - adds r1, r4, 0 - movs r2, 0x2 - adds r3, r5, 0 - bl ConvertIntToDecimalStringN - ldr r4, _0810984C @ =gStringVar4 - ldr r1, _08109850 @ =gText_TimesStrVar1 - adds r0, r4, 0 - bl StringExpandPlaceholders - movs r0, 0xA - str r0, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - str r0, [sp, 0xC] - str r1, [sp, 0x10] - adds r0, r6, 0 - movs r1, 0 - adds r2, r4, 0 - movs r3, 0x4 - bl sub_810B8F0 - add sp, 0x14 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08109848: .4byte gStringVar1 -_0810984C: .4byte gStringVar4 -_08109850: .4byte gText_TimesStrVar1 - thumb_func_end sub_81097E4 - - thumb_func_start sub_8109854 -sub_8109854: @ 8109854 - push {lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - movs r2, 0xC - subs r2, r0 - lsls r1, r2, 3 - adds r1, r2 - lsls r1, 2 - ldr r2, _0810988C @ =gUnknown_8452D08 - adds r1, r2 - movs r3, 0xD - subs r3, r0 - lsls r3, 24 - lsrs r3, 24 - movs r0, 0x12 - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - movs r2, 0xB - bl CopyToBgTilemapBufferRect - movs r0, 0x1 - bl ScheduleBgCopyTilemapToVram - add sp, 0x8 - pop {r0} - bx r0 - .align 2, 0 -_0810988C: .4byte gUnknown_8452D08 - thumb_func_end sub_8109854 - - thumb_func_start sub_8109890 -sub_8109890: @ 8109890 - push {r4-r7,lr} - sub sp, 0x14 - ldr r0, _081098A8 @ =gUnknown_203ACFC - ldrb r0, [r0, 0x4] - cmp r0, 0x6 - beq _08109924 - cmp r0, 0x6 - bgt _081098AC - cmp r0, 0x5 - beq _081098B6 - b _0810993C - .align 2, 0 -_081098A8: .4byte gUnknown_203ACFC -_081098AC: - cmp r0, 0x7 - beq _081098B6 - cmp r0, 0x8 - beq _08109924 - b _0810993C -_081098B6: - ldr r2, _081098D4 @ =gSpecialVar_ItemId - ldrh r1, [r2] - ldr r0, _081098D8 @ =0x0000016d @ ITEM_BERRY_POUCH - cmp r1, r0 - bne _081098E8 - ldr r1, _081098DC @ =gUnknown_203AD20 - movs r0, 0x8 - strb r0, [r1] - movs r0, 0x4 - strb r0, [r1, 0x1] - ldr r0, _081098E0 @ =gUnknown_203AD24 - str r1, [r0] - ldr r1, _081098E4 @ =gUnknown_203AD28 - movs r0, 0x2 - b _08109AD0 - .align 2, 0 -_081098D4: .4byte gSpecialVar_ItemId -_081098D8: .4byte 0x0000016d -_081098DC: .4byte gUnknown_203AD20 -_081098E0: .4byte gUnknown_203AD24 -_081098E4: .4byte gUnknown_203AD28 -_081098E8: - ldrh r0, [r2] - bl ItemId_GetBattleUsage - lsls r0, 24 - cmp r0, 0 - beq _0810990C - ldr r1, _08109900 @ =gUnknown_203AD24 - ldr r0, _08109904 @ =gUnknown_8452F30 - str r0, [r1] - ldr r1, _08109908 @ =gUnknown_203AD28 - movs r0, 0x2 - b _08109AD0 - .align 2, 0 -_08109900: .4byte gUnknown_203AD24 -_08109904: .4byte gUnknown_8452F30 -_08109908: .4byte gUnknown_203AD28 -_0810990C: - ldr r1, _08109918 @ =gUnknown_203AD24 - ldr r0, _0810991C @ =gUnknown_8452F32 - str r0, [r1] - ldr r1, _08109920 @ =gUnknown_203AD28 - movs r0, 0x1 - b _08109AD0 - .align 2, 0 -_08109918: .4byte gUnknown_203AD24 -_0810991C: .4byte gUnknown_8452F32 -_08109920: .4byte gUnknown_203AD28 -_08109924: - ldr r1, _08109930 @ =gUnknown_203AD24 - ldr r0, _08109934 @ =gUnknown_8452F30 - str r0, [r1] - ldr r1, _08109938 @ =gUnknown_203AD28 - movs r0, 0x2 - b _08109AD0 - .align 2, 0 -_08109930: .4byte gUnknown_203AD24 -_08109934: .4byte gUnknown_8452F30 -_08109938: .4byte gUnknown_203AD28 -_0810993C: - bl MenuHelpers_LinkSomething - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08109950 - bl InUnionRoom - cmp r0, 0x1 - bne _081099C4 -_08109950: - ldr r1, _08109970 @ =gSpecialVar_ItemId - ldr r2, _08109974 @ =0xfffffe94 - adds r0, r2, 0 - ldrh r1, [r1] - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bhi _08109984 - ldr r1, _08109978 @ =gUnknown_203AD24 - ldr r0, _0810997C @ =gUnknown_8452F2E - str r0, [r1] - ldr r1, _08109980 @ =gUnknown_203AD28 - movs r0, 0x2 - b _08109AD0 - .align 2, 0 -_08109970: .4byte gSpecialVar_ItemId -_08109974: .4byte 0xfffffe94 -_08109978: .4byte gUnknown_203AD24 -_0810997C: .4byte gUnknown_8452F2E -_08109980: .4byte gUnknown_203AD28 -_08109984: - ldr r0, _08109998 @ =gUnknown_203ACFC - ldrh r2, [r0, 0x6] - adds r3, r0, 0 - cmp r2, 0x1 - bne _081099A0 - ldr r0, _0810999C @ =gUnknown_203AD28 - strb r2, [r0] - adds r7, r0, 0 - b _081099A8 - .align 2, 0 -_08109998: .4byte gUnknown_203ACFC -_0810999C: .4byte gUnknown_203AD28 -_081099A0: - ldr r1, _081099B8 @ =gUnknown_203AD28 - movs r0, 0x2 - strb r0, [r1] - adds r7, r1, 0 -_081099A8: - ldr r0, _081099BC @ =gUnknown_203AD24 - ldrh r1, [r3, 0x6] - lsls r1, 1 - ldr r2, _081099C0 @ =gUnknown_8452F28 - adds r1, r2 - str r1, [r0] - b _08109AD4 - .align 2, 0 -_081099B8: .4byte gUnknown_203AD28 -_081099BC: .4byte gUnknown_203AD24 -_081099C0: .4byte gUnknown_8452F28 -_081099C4: - ldr r5, _081099D8 @ =gUnknown_203ACFC - ldrh r0, [r5, 0x6] - cmp r0, 0x1 - beq _08109A34 - cmp r0, 0x1 - bgt _081099E0 - cmp r0, 0 - beq _081099EC - ldr r7, _081099DC @ =gUnknown_203AD28 - b _08109AD4 - .align 2, 0 -_081099D8: .4byte gUnknown_203ACFC -_081099DC: .4byte gUnknown_203AD28 -_081099E0: - cmp r0, 0x2 - beq _08109AC4 - ldr r7, _081099E8 @ =gUnknown_203AD28 - b _08109AD4 - .align 2, 0 -_081099E8: .4byte gUnknown_203AD28 -_081099EC: - ldr r4, _08109A0C @ =gUnknown_203AD28 - movs r0, 0x4 - strb r0, [r4] - ldr r0, _08109A10 @ =gSpecialVar_ItemId - ldrh r0, [r0] - bl ItemIsMail - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08109A1C - ldr r1, _08109A14 @ =gUnknown_203AD24 - ldr r0, _08109A18 @ =gUnknown_8452F24 - str r0, [r1] - adds r7, r4, 0 - b _08109AD4 - .align 2, 0 -_08109A0C: .4byte gUnknown_203AD28 -_08109A10: .4byte gSpecialVar_ItemId -_08109A14: .4byte gUnknown_203AD24 -_08109A18: .4byte gUnknown_8452F24 -_08109A1C: - ldr r0, _08109A2C @ =gUnknown_203AD24 - ldrh r1, [r5, 0x6] - lsls r1, 2 - ldr r2, _08109A30 @ =gUnknown_8452F18 - adds r1, r2 - str r1, [r0] - adds r7, r4, 0 - b _08109AD4 - .align 2, 0 -_08109A2C: .4byte gUnknown_203AD24 -_08109A30: .4byte gUnknown_8452F18 -_08109A34: - ldr r0, _08109A5C @ =gUnknown_203AD24 - ldr r2, _08109A60 @ =gUnknown_203AD20 - str r2, [r0] - ldr r3, _08109A64 @ =gUnknown_203AD28 - movs r0, 0x3 - strb r0, [r3] - movs r0, 0x4 - strb r0, [r2, 0x2] - ldr r0, _08109A68 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r1, _08109A6C @ =0x00000296 - adds r0, r1 - ldr r1, _08109A70 @ =gSpecialVar_ItemId - ldrh r0, [r0] - adds r7, r3, 0 - ldrh r3, [r1] - cmp r0, r3 - bne _08109A74 - movs r0, 0xA - b _08109A76 - .align 2, 0 -_08109A5C: .4byte gUnknown_203AD24 -_08109A60: .4byte gUnknown_203AD20 -_08109A64: .4byte gUnknown_203AD28 -_08109A68: .4byte gSaveBlock1Ptr -_08109A6C: .4byte 0x00000296 -_08109A70: .4byte gSpecialVar_ItemId -_08109A74: - movs r0, 0x2 -_08109A76: - strb r0, [r2, 0x1] - ldrh r1, [r1] - ldr r3, _08109A8C @ =0xfffffe94 - adds r0, r1, r3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bhi _08109A90 - movs r0, 0x7 - strb r0, [r2] - b _08109AD4 - .align 2, 0 -_08109A8C: .4byte 0xfffffe94 -_08109A90: - lsls r1, 16 - movs r0, 0xB4 - lsls r0, 17 - cmp r1, r0 - bne _08109AB0 - movs r0, 0x6 - bl TestPlayerAvatarFlags - lsls r0, 24 - cmp r0, 0 - beq _08109AB0 - ldr r1, _08109AAC @ =gUnknown_203AD20 - movs r0, 0x9 - b _08109AB4 - .align 2, 0 -_08109AAC: .4byte gUnknown_203AD20 -_08109AB0: - ldr r1, _08109ABC @ =gUnknown_203AD20 - movs r0, 0 -_08109AB4: - strb r0, [r1] - ldr r7, _08109AC0 @ =gUnknown_203AD28 - b _08109AD4 - .align 2, 0 -_08109ABC: .4byte gUnknown_203AD20 -_08109AC0: .4byte gUnknown_203AD28 -_08109AC4: - ldr r1, _08109B98 @ =gUnknown_203AD24 - ldr r0, _08109B9C @ =gUnknown_8452F18 - adds r0, 0x8 - str r0, [r1] - ldr r1, _08109BA0 @ =gUnknown_203AD28 - movs r0, 0x3 -_08109AD0: - strb r0, [r1] - adds r7, r1, 0 -_08109AD4: - ldrb r1, [r7] - subs r1, 0x1 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0xA - bl sub_810B9DC - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - movs r0, 0x2 - movs r1, 0 - bl GetMenuCursorDimensionByFont - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - movs r0, 0x2 - movs r1, 0x2 - bl GetFontAttribute - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x2 - movs r1, 0x1 - bl GetFontAttribute - adds r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - str r4, [sp] - str r0, [sp, 0x4] - ldrb r0, [r7] - str r0, [sp, 0x8] - ldr r0, _08109BA4 @ =gUnknown_8452EB8 - str r0, [sp, 0xC] - ldr r0, _08109B98 @ =gUnknown_203AD24 - ldr r0, [r0] - str r0, [sp, 0x10] - adds r0, r6, 0 - movs r1, 0x2 - adds r2, r5, 0 - movs r3, 0x2 - bl AddItemMenuActionTextPrinters - movs r0, 0x2 - movs r1, 0x1 - bl GetFontAttribute - adds r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - ldrb r0, [r7] - str r0, [sp, 0x4] - movs r5, 0 - str r5, [sp, 0x8] - adds r0, r6, 0 - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl Menu_InitCursor - movs r0, 0x6 - movs r1, 0 - bl sub_810B9DC - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08109BA8 @ =gSpecialVar_ItemId - ldrh r0, [r0] - ldr r1, _08109BAC @ =gStringVar1 - bl CopyItemName - ldr r6, _08109BB0 @ =gStringVar4 - ldr r1, _08109BB4 @ =gOtherText_StrVar1 - adds r0, r6, 0 - bl StringExpandPlaceholders - movs r0, 0x2 - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - str r5, [sp, 0x8] - str r5, [sp, 0xC] - str r0, [sp, 0x10] - adds r0, r4, 0 - movs r1, 0x2 - adds r2, r6, 0 - movs r3, 0 - bl sub_810B8F0 - add sp, 0x14 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08109B98: .4byte gUnknown_203AD24 -_08109B9C: .4byte gUnknown_8452F18 -_08109BA0: .4byte gUnknown_203AD28 -_08109BA4: .4byte gUnknown_8452EB8 -_08109BA8: .4byte gSpecialVar_ItemId -_08109BAC: .4byte gStringVar1 -_08109BB0: .4byte gStringVar4 -_08109BB4: .4byte gOtherText_StrVar1 - thumb_func_end sub_8109890 - thumb_func_start sub_8109BB8 sub_8109BB8: @ 8109BB8 push {r4,lr} diff --git a/src/item_menu.c b/src/item_menu.c index 66656f8bf..7d03c5170 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -3,12 +3,15 @@ #include "bag.h" #include "battle_controllers.h" #include "decompress.h" +#include "field_player_avatar.h" #include "graphics.h" #include "help_system.h" #include "item.h" #include "item_menu.h" #include "item_menu_icons.h" +#include "link.h" #include "list_menu.h" +#include "mail_data.h" #include "menu.h" #include "menu_indicators.h" #include "new_menu_helpers.h" @@ -40,6 +43,9 @@ EWRAM_DATA struct BagMenuAlloc * gUnknown_203AD10 = NULL; EWRAM_DATA void * gUnknown_203AD14 = NULL; EWRAM_DATA struct ListMenuItem * gUnknown_203AD18 = NULL; EWRAM_DATA u8 (*gUnknown_203AD1C)[19] = NULL; +EWRAM_DATA u8 gUnknown_203AD20[4] = {}; +EWRAM_DATA const u8 *gUnknown_203AD24 = NULL; +EWRAM_DATA u8 gUnknown_203AD28 = 0; void sub_8107F10(void); bool8 sub_8107F3C(void); @@ -156,6 +162,12 @@ const struct MenuAction gUnknown_8452EB8[] = { [ITEMMENUACTION_DUMMY] = {gString_Dummy, {.void_u8 = NULL}} }; +extern const u8 gUnknown_8452F18[][4]; +extern const u8 gUnknown_8452F24[]; +extern const u8 gUnknown_8452F28[][2]; +extern const u8 gUnknown_8452F2E[]; +extern const u8 gUnknown_8452F30[]; +extern const u8 gUnknown_8452F32[]; extern const TaskFunc gUnknown_8452F34[]; extern const u8 gUnknown_8452F60[]; extern const u8 gUnknown_8452F66[]; @@ -1160,3 +1172,132 @@ void sub_810967C(u8 taskId, u32 itemIndex) sub_81088D8(); gTasks[taskId].func = sub_8108F0C; } + +void sub_810971C(u16 cursorPos, const u8 *str) +{ + u8 r4; + u8 r5 = sub_810B9DC(6, 2); + CopyItemName(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, cursorPos), gStringVar1); + StringExpandPlaceholders(gStringVar4, str); + sub_810B8F0(r5, 2, gStringVar4, 0, 2, 1, 0, 0, 1); + r4 = sub_810B9DC(0, 0); + ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 3); + StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); + sub_810B8F0(r4, 0, gStringVar4, 4, 10, 1, 0, 0, 1); + sub_8108940(); +} + +void sub_81097E4(s16 value, u8 ndigits) +{ + u8 r6 = sub_810BAD8(0); + FillWindowPixelBuffer(r6, PIXEL_FILL(1)); + ConvertIntToDecimalStringN(gStringVar1, value, STR_CONV_MODE_LEADING_ZEROS, ndigits); + StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); + sub_810B8F0(r6, 0, gStringVar4, 4, 10, 1, 0, 0, 1); +} + +void sub_8109854(u8 a0) +{ + CopyToBgTilemapBufferRect(1, gUnknown_8452D08[12 - a0], 11, 13 - a0, 18, 1); + ScheduleBgCopyTilemapToVram(1); +} + +void sub_8109890(void) +{ + u8 r6; + u8 r4; + switch (gUnknown_203ACFC.location) + { + case 5: + case 7: + if (gSpecialVar_ItemId == ITEM_BERRY_POUCH) + { + gUnknown_203AD20[0] = ITEMMENUACTION_OPEN_BERRIES; + gUnknown_203AD20[1] = ITEMMENUACTION_CANCEL; + gUnknown_203AD24 = gUnknown_203AD20; + gUnknown_203AD28 = 2; + } + else if (ItemId_GetBattleUsage(gSpecialVar_ItemId)) + { + gUnknown_203AD24 = gUnknown_8452F30; + gUnknown_203AD28 = 2; + } + else + { + gUnknown_203AD24 = gUnknown_8452F32; + gUnknown_203AD28 = 1; + } + break; + case 6: + case 8: + gUnknown_203AD24 = gUnknown_8452F30; + gUnknown_203AD28 = 2; + break; + default: + if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE) + { + if (gSpecialVar_ItemId == ITEM_TM_CASE || gSpecialVar_ItemId == ITEM_BERRY_POUCH) + { + gUnknown_203AD24 = gUnknown_8452F2E; + gUnknown_203AD28 = 2; + } + else + { + if (gUnknown_203ACFC.pocket == POCKET_KEY_ITEMS - 1) + gUnknown_203AD28 = 1; + else + gUnknown_203AD28 = 2; + gUnknown_203AD24 = gUnknown_8452F28[gUnknown_203ACFC.pocket]; + } + } + else + { + switch (gUnknown_203ACFC.pocket) + { + case POCKET_ITEMS - 1: + gUnknown_203AD28 = 4; + if (ItemIsMail(gSpecialVar_ItemId) == TRUE) + gUnknown_203AD24 = gUnknown_8452F24; + else + gUnknown_203AD24 = gUnknown_8452F18[gUnknown_203ACFC.pocket]; + break; + case POCKET_KEY_ITEMS - 1: + gUnknown_203AD24 = gUnknown_203AD20; + gUnknown_203AD28 = 3; + gUnknown_203AD20[2] = ITEMMENUACTION_CANCEL; + if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId) + gUnknown_203AD20[1] = ITEMMENUACTION_DESELECT; + else + gUnknown_203AD20[1] = ITEMMENUACTION_REGISTER; + if (gSpecialVar_ItemId == ITEM_TM_CASE || gSpecialVar_ItemId == ITEM_BERRY_POUCH) + gUnknown_203AD20[0] = ITEMMENUACTION_OPEN; + else if (gSpecialVar_ItemId == ITEM_BICYCLE && TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE | PLAYER_AVATAR_FLAG_MACH_BIKE)) + gUnknown_203AD20[0] = ITEMMENUACTION_WALK; + else + gUnknown_203AD20[0] = ITEMMENUACTION_USE; + break; + case POCKET_POKE_BALLS - 1: + gUnknown_203AD24 = gUnknown_8452F18[gUnknown_203ACFC.pocket]; + gUnknown_203AD28 = 3; + break; + } + } + } + r6 = sub_810B9DC(10, gUnknown_203AD28 - 1); + AddItemMenuActionTextPrinters( + r6, + 2, + GetMenuCursorDimensionByFont(2, 0), + 2, + GetFontAttribute(2, FONTATTR_LETTER_SPACING), + GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, + gUnknown_203AD28, + gUnknown_8452EB8, + gUnknown_203AD24 + ); + Menu_InitCursor(r6, 2, 0, 2, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, gUnknown_203AD28, 0); + r4 = sub_810B9DC(6, 0); + CopyItemName(gSpecialVar_ItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_StrVar1); + sub_810B8F0(r4, 2, gStringVar4, 0, 2, 1, 0, 0, 1); +} From 0ed743a582a04f178d138d51159426179c969288 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 18 Jan 2020 19:54:25 -0500 Subject: [PATCH 15/22] through sub_810A554 --- asm/item_menu.s | 1168 ---------------------------------------- data/item_menu.s | 62 --- data/strings.s | 4 +- include/menu_helpers.h | 2 +- include/strings.h | 3 +- ld_script.txt | 1 - src/item_menu.c | 486 ++++++++++++++++- src/menu_helpers.c | 2 +- 8 files changed, 473 insertions(+), 1255 deletions(-) delete mode 100644 data/item_menu.s diff --git a/asm/item_menu.s b/asm/item_menu.s index f13ae7f38..d42c65d45 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -5,1174 +5,6 @@ .text - thumb_func_start sub_8109BB8 -sub_8109BB8: @ 8109BB8 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl sub_8109890 - ldr r1, _08109BDC @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08109BE0 @ =sub_8109BE4 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08109BDC: .4byte gTasks -_08109BE0: .4byte sub_8109BE4 - thumb_func_end sub_8109BB8 - - thumb_func_start sub_8109BE4 -sub_8109BE4: @ 8109BE4 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r6, r5, 0 - bl sub_80BF72C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08109C42 - bl Menu_ProcessInputNoWrapAround - lsls r0, 24 - asrs r4, r0, 24 - movs r0, 0x2 - negs r0, r0 - cmp r4, r0 - beq _08109C42 - adds r0, 0x1 - cmp r4, r0 - bne _08109C24 - movs r0, 0x5 - bl PlaySE - ldr r0, _08109C20 @ =gUnknown_8452EB8 - ldr r1, [r0, 0x24] - adds r0, r5, 0 - bl _call_via_r1 - b _08109C42 - .align 2, 0 -_08109C20: .4byte gUnknown_8452EB8 -_08109C24: - movs r0, 0x5 - bl PlaySE - ldr r1, _08109C48 @ =gUnknown_8452EB8 - ldr r0, _08109C4C @ =gUnknown_203AD24 - ldr r0, [r0] - adds r0, r4 - ldrb r0, [r0] - lsls r0, 3 - adds r1, 0x4 - adds r0, r1 - ldr r1, [r0] - adds r0, r6, 0 - bl _call_via_r1 -_08109C42: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08109C48: .4byte gUnknown_8452EB8 -_08109C4C: .4byte gUnknown_203AD24 - thumb_func_end sub_8109BE4 - - thumb_func_start Task_ItemMenuAction_Use -Task_ItemMenuAction_Use: @ 8109C50 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r5, _08109CA0 @ =gSpecialVar_ItemId - ldrh r0, [r5] - bl ItemId_GetFieldFunc - cmp r0, 0 - beq _08109CB4 - movs r0, 0xA - bl sub_810BA3C - movs r0, 0x6 - bl sub_810BA3C - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - bl CalculatePlayerPartyCount - lsls r0, 24 - cmp r0, 0 - bne _08109CA4 - ldrh r0, [r5] - bl ItemId_GetType - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08109CA4 - adds r0, r4, 0 - bl sub_810A170 - b _08109CB4 - .align 2, 0 -_08109CA0: .4byte gSpecialVar_ItemId -_08109CA4: - ldr r0, _08109CBC @ =gSpecialVar_ItemId - ldrh r0, [r0] - bl ItemId_GetFieldFunc - adds r1, r0, 0 - adds r0, r4, 0 - bl _call_via_r1 -_08109CB4: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08109CBC: .4byte gSpecialVar_ItemId - thumb_func_end Task_ItemMenuAction_Use - - thumb_func_start Task_ItemMenuAction_Toss -Task_ItemMenuAction_Toss: @ 8109CC0 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r6, r0, 3 - ldr r7, _08109D14 @ =gTasks+0x8 - adds r4, r6, r7 - movs r0, 0xA - bl sub_810BAD8 - lsls r0, 24 - lsrs r0, 24 - bl ClearWindowTilemap - movs r0, 0x6 - bl sub_810BAD8 - lsls r0, 24 - lsrs r0, 24 - bl ClearWindowTilemap - movs r0, 0xA - bl sub_810BA3C - movs r0, 0x6 - bl sub_810BA3C - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - strh r0, [r4, 0x10] - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - bne _08109D18 - adds r0, r5, 0 - bl sub_8109D38 - b _08109D2A - .align 2, 0 -_08109D14: .4byte gTasks+0x8 -_08109D18: - ldrh r0, [r4, 0x2] - ldr r1, _08109D30 @ =gText_TossOutHowManyStrVar1s - bl sub_810971C - adds r0, r7, 0 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _08109D34 @ =sub_8109DEC - str r1, [r0] -_08109D2A: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08109D30: .4byte gText_TossOutHowManyStrVar1s -_08109D34: .4byte sub_8109DEC - thumb_func_end Task_ItemMenuAction_Toss - - thumb_func_start sub_8109D38 -sub_8109D38: @ 8109D38 - push {r4,r5,lr} - sub sp, 0x14 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - ldr r0, _08109D9C @ =gTasks+0x8 - adds r1, r0 - ldr r0, _08109DA0 @ =gStringVar2 - movs r2, 0x10 - ldrsh r1, [r1, r2] - movs r2, 0 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - ldr r5, _08109DA4 @ =gStringVar4 - ldr r1, _08109DA8 @ =gText_ThrowAwayStrVar2OfThisItemQM - adds r0, r5, 0 - bl StringExpandPlaceholders - movs r0, 0x6 - movs r1, 0x1 - bl sub_810B9DC - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - str r1, [sp] - movs r2, 0x1 - str r2, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - str r1, [sp, 0xC] - str r2, [sp, 0x10] - movs r1, 0x2 - adds r2, r5, 0 - movs r3, 0 - bl sub_810B8F0 - ldr r1, _08109DAC @ =gUnknown_8452F50 - adds r0, r4, 0 - bl sub_810BAE8 - add sp, 0x14 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08109D9C: .4byte gTasks+0x8 -_08109DA0: .4byte gStringVar2 -_08109DA4: .4byte gStringVar4 -_08109DA8: .4byte gText_ThrowAwayStrVar2OfThisItemQM -_08109DAC: .4byte gUnknown_8452F50 - thumb_func_end sub_8109D38 - - thumb_func_start sub_8109DB0 -sub_8109DB0: @ 8109DB0 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - ldr r0, _08109DE8 @ =gTasks+0x8 - adds r4, r0 - movs r0, 0x6 - bl sub_810BA3C - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldrb r0, [r4] - movs r1, 0x1 - bl bag_menu_print_cursor_ - adds r0, r5, 0 - bl sub_810910C - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08109DE8: .4byte gTasks+0x8 - thumb_func_end sub_8109DB0 - - thumb_func_start sub_8109DEC -sub_8109DEC: @ 8109DEC - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r6, r5, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _08109E1C @ =gTasks+0x8 - adds r4, r0, r1 - adds r0, r4, 0 - adds r0, 0x10 - ldrh r1, [r4, 0x4] - bl AdjustQuantityAccordingToDPadInput - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08109E20 - movs r1, 0x10 - ldrsh r0, [r4, r1] - movs r1, 0x3 - bl sub_81097E4 - b _08109EA2 - .align 2, 0 -_08109E1C: .4byte gTasks+0x8 -_08109E20: - ldr r0, _08109E60 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08109E64 - movs r0, 0x5 - bl PlaySE - movs r0, 0x6 - bl sub_810BAD8 - lsls r0, 24 - lsrs r0, 24 - bl ClearWindowTilemap - movs r0, 0x6 - bl sub_810BA3C - movs r0, 0 - bl sub_810BA3C - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - bl sub_8108978 - adds r0, r5, 0 - bl sub_8109D38 - b _08109EA2 - .align 2, 0 -_08109E60: .4byte gMain -_08109E64: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08109EA2 - movs r0, 0x5 - bl PlaySE - movs r0, 0x6 - bl sub_810BA3C - movs r0, 0 - bl sub_810BA3C - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldrb r0, [r4] - movs r1, 0x1 - bl bag_menu_print_cursor_ - bl sub_8108978 - adds r0, r6, 0 - bl sub_810910C -_08109EA2: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8109DEC - - thumb_func_start sub_8109EA8 -sub_8109EA8: @ 8109EA8 - push {r4-r6,lr} - sub sp, 0x14 - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r5, _08109F28 @ =gTasks+0x8 - adds r6, r4, r5 - movs r0, 0x6 - bl sub_810BA3C - ldr r0, _08109F2C @ =gUnknown_203ACFC - ldrb r0, [r0, 0x6] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r6, 0x2] - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r0, 16 - ldr r1, _08109F30 @ =gStringVar1 - bl CopyItemName - ldr r0, _08109F34 @ =gStringVar2 - movs r2, 0x10 - ldrsh r1, [r6, r2] - movs r2, 0 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - ldr r6, _08109F38 @ =gStringVar4 - ldr r1, _08109F3C @ =gText_ThrewAwayStrVar2StrVar1s - adds r0, r6, 0 - bl StringExpandPlaceholders - movs r0, 0x6 - movs r1, 0x3 - bl sub_810B9DC - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - str r1, [sp] - movs r2, 0x1 - str r2, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - str r1, [sp, 0xC] - str r2, [sp, 0x10] - movs r1, 0x2 - adds r2, r6, 0 - movs r3, 0 - bl sub_810B8F0 - subs r5, 0x8 - adds r4, r5 - ldr r0, _08109F40 @ =sub_8109F44 - str r0, [r4] - add sp, 0x14 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08109F28: .4byte gTasks+0x8 -_08109F2C: .4byte gUnknown_203ACFC -_08109F30: .4byte gStringVar1 -_08109F34: .4byte gStringVar2 -_08109F38: .4byte gStringVar4 -_08109F3C: .4byte gText_ThrewAwayStrVar2StrVar1s -_08109F40: .4byte sub_8109F44 - thumb_func_end sub_8109EA8 - - thumb_func_start sub_8109F44 -sub_8109F44: @ 8109F44 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r0, 2 - add r0, r8 - lsls r0, 3 - ldr r1, _08109FEC @ =gTasks+0x8 - adds r7, r0, r1 - ldr r0, _08109FF0 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08109F6E - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08109FE0 -_08109F6E: - movs r0, 0x5 - bl PlaySE - ldr r0, _08109FF4 @ =gSpecialVar_ItemId - ldrh r0, [r0] - ldrh r1, [r7, 0x10] - bl RemoveBagItem - movs r0, 0x6 - bl sub_810BA3C - ldrb r0, [r7] - ldr r4, _08109FF8 @ =gUnknown_203ACFC - ldrh r2, [r4, 0x6] - lsls r2, 1 - adds r5, r4, 0 - adds r5, 0xE - adds r1, r2, r5 - adds r6, r4, 0 - adds r6, 0x8 - adds r2, r6 - bl DestroyListMenuTask - ldrb r0, [r4, 0x6] - bl sub_8108DC8 - ldrb r0, [r4, 0x6] - bl sub_81089F4 - ldrb r0, [r4, 0x6] - bl sub_810842C - ldr r0, _08109FFC @ =gMultiuseListMenuTemplate - ldrh r2, [r4, 0x6] - lsls r2, 1 - adds r5, r2, r5 - ldrh r1, [r5] - adds r2, r6 - ldrh r2, [r2] - bl ListMenuInit - lsls r0, 24 - lsrs r0, 24 - strh r0, [r7] - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldrb r0, [r7] - movs r1, 0x1 - bl bag_menu_print_cursor_ - mov r0, r8 - bl sub_810910C -_08109FE0: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08109FEC: .4byte gTasks+0x8 -_08109FF0: .4byte gMain -_08109FF4: .4byte gSpecialVar_ItemId -_08109FF8: .4byte gUnknown_203ACFC -_08109FFC: .4byte gMultiuseListMenuTemplate - thumb_func_end sub_8109F44 - - thumb_func_start Task_ItemMenuAction_ToggleSelect -Task_ItemMenuAction_ToggleSelect: @ 810A000 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r0, 2 - add r0, r8 - lsls r0, 3 - ldr r1, _0810A040 @ =gTasks+0x8 - adds r7, r0, r1 - ldr r0, _0810A044 @ =gUnknown_203ACFC - ldrb r0, [r0, 0x6] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r7, 0x2] - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r2, r0, 16 - ldr r0, _0810A048 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r3, _0810A04C @ =0x00000296 - adds r1, r0, r3 - ldrh r0, [r1] - cmp r0, r2 - bne _0810A050 - movs r0, 0 - strh r0, [r1] - b _0810A052 - .align 2, 0 -_0810A040: .4byte gTasks+0x8 -_0810A044: .4byte gUnknown_203ACFC -_0810A048: .4byte gSaveBlock1Ptr -_0810A04C: .4byte 0x00000296 -_0810A050: - strh r2, [r1] -_0810A052: - ldrb r0, [r7] - ldr r4, _0810A0A0 @ =gUnknown_203ACFC - ldrh r2, [r4, 0x6] - lsls r2, 1 - adds r5, r4, 0 - adds r5, 0xE - adds r1, r2, r5 - adds r6, r4, 0 - adds r6, 0x8 - adds r2, r6 - bl DestroyListMenuTask - ldrb r0, [r4, 0x6] - bl sub_810842C - ldr r0, _0810A0A4 @ =gMultiuseListMenuTemplate - ldrh r2, [r4, 0x6] - lsls r2, 1 - adds r5, r2, r5 - ldrh r1, [r5] - adds r2, r6 - ldrh r2, [r2] - bl ListMenuInit - lsls r0, 24 - lsrs r0, 24 - strh r0, [r7] - movs r0, 0 - movs r1, 0x1 - bl CopyWindowToVram - mov r0, r8 - bl Task_ItemMenuAction_Cancel - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810A0A0: .4byte gUnknown_203ACFC -_0810A0A4: .4byte gMultiuseListMenuTemplate - thumb_func_end Task_ItemMenuAction_ToggleSelect - - thumb_func_start Task_ItemMenuAction_Give -Task_ItemMenuAction_Give: @ 810A0A8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r4, r0, 24 - adds r7, r4, 0 - lsls r0, r4, 2 - adds r0, r4 - lsls r6, r0, 3 - ldr r0, _0810A110 @ =gTasks+0x8 - mov r8, r0 - adds r1, r6, r0 - ldr r0, _0810A114 @ =gUnknown_203ACFC - ldrb r0, [r0, 0x6] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r1, 0x2] - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r5, r0, 16 - movs r0, 0xA - bl sub_810BA3C - movs r0, 0x6 - bl sub_810BA3C - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x1 - bl CopyWindowToVram - adds r0, r5, 0 - bl itemid_80BF6D8_mail_related - lsls r0, 24 - cmp r0, 0 - bne _0810A120 - ldr r2, _0810A118 @ =gUnknown_841630F - ldr r3, _0810A11C @ =sub_810A1D0 - adds r0, r4, 0 - movs r1, 0x2 - bl DisplayItemMessageInBag - b _0810A166 - .align 2, 0 -_0810A110: .4byte gTasks+0x8 -_0810A114: .4byte gUnknown_203ACFC -_0810A118: .4byte gUnknown_841630F -_0810A11C: .4byte sub_810A1D0 -_0810A120: - adds r0, r5, 0 - bl itemid_is_unique - lsls r0, 24 - cmp r0, 0 - bne _0810A160 - bl CalculatePlayerPartyCount - lsls r0, 24 - cmp r0, 0 - bne _0810A13E - adds r0, r4, 0 - bl sub_810A170 - b _0810A166 -_0810A13E: - ldr r0, _0810A154 @ =gUnknown_203AD10 - ldr r1, [r0] - ldr r0, _0810A158 @ =CB2_ChooseMonToGiveItem - str r0, [r1] - mov r0, r8 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _0810A15C @ =ItemMenu_StartFadeToExitCallback - str r1, [r0] - b _0810A166 - .align 2, 0 -_0810A154: .4byte gUnknown_203AD10 -_0810A158: .4byte CB2_ChooseMonToGiveItem -_0810A15C: .4byte ItemMenu_StartFadeToExitCallback -_0810A160: - adds r0, r7, 0 - bl sub_810A18C -_0810A166: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end Task_ItemMenuAction_Give - - thumb_func_start sub_810A170 -sub_810A170: @ 810A170 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0810A184 @ =gText_ThereIsNoPokemon - ldr r3, _0810A188 @ =sub_810A1D0 - movs r1, 0x2 - bl DisplayItemMessageInBag - pop {r0} - bx r0 - .align 2, 0 -_0810A184: .4byte gText_ThereIsNoPokemon -_0810A188: .4byte sub_810A1D0 - thumb_func_end sub_810A170 - - thumb_func_start sub_810A18C -sub_810A18C: @ 810A18C - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0810A1BC @ =gSpecialVar_ItemId - ldrh r0, [r0] - ldr r1, _0810A1C0 @ =gStringVar1 - bl CopyItemName - ldr r5, _0810A1C4 @ =gStringVar4 - ldr r1, _0810A1C8 @ =gText_ItemCantBeHeld - adds r0, r5, 0 - bl StringExpandPlaceholders - ldr r3, _0810A1CC @ =sub_810A1D0 - adds r0, r4, 0 - movs r1, 0x2 - adds r2, r5, 0 - bl DisplayItemMessageInBag - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0810A1BC: .4byte gSpecialVar_ItemId -_0810A1C0: .4byte gStringVar1 -_0810A1C4: .4byte gStringVar4 -_0810A1C8: .4byte gText_ItemCantBeHeld -_0810A1CC: .4byte sub_810A1D0 - thumb_func_end sub_810A18C - - thumb_func_start sub_810A1D0 -sub_810A1D0: @ 810A1D0 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0810A1F4 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0810A1EE - movs r0, 0x5 - bl PlaySE - adds r0, r4, 0 - bl sub_810A1F8 -_0810A1EE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0810A1F4: .4byte gMain - thumb_func_end sub_810A1D0 - - thumb_func_start sub_810A1F8 -sub_810A1F8: @ 810A1F8 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - mov r8, r0 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r5, r0, 2 - add r5, r8 - lsls r5, 3 - ldr r0, _0810A27C @ =gTasks+0x8 - adds r5, r0 - movs r0, 0x5 - bl sub_810BA9C - ldrb r0, [r5] - ldr r4, _0810A280 @ =gUnknown_203ACFC - ldrh r2, [r4, 0x6] - lsls r2, 1 - adds r6, r4, 0 - adds r6, 0xE - adds r1, r2, r6 - movs r3, 0x8 - adds r3, r4 - mov r9, r3 - add r2, r9 - bl DestroyListMenuTask - ldrb r0, [r4, 0x6] - bl sub_8108DC8 - ldrb r0, [r4, 0x6] - bl sub_81089F4 - ldrb r0, [r4, 0x6] - bl sub_810842C - ldr r0, _0810A284 @ =gMultiuseListMenuTemplate - ldrh r2, [r4, 0x6] - lsls r2, 1 - adds r6, r2, r6 - ldrh r1, [r6] - add r2, r9 - ldrh r2, [r2] - bl ListMenuInit - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5] - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldrb r0, [r5] - movs r1, 0x1 - bl bag_menu_print_cursor_ - mov r0, r8 - bl sub_810910C - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0810A27C: .4byte gTasks+0x8 -_0810A280: .4byte gUnknown_203ACFC -_0810A284: .4byte gMultiuseListMenuTemplate - thumb_func_end sub_810A1F8 - - thumb_func_start sub_810A288 -sub_810A288: @ 810A288 - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - ldr r0, _0810A2D8 @ =gTasks+0x8 - adds r4, r0 - ldrb r0, [r4] - mov r6, sp - adds r6, 0x2 - mov r1, sp - adds r2, r6, 0 - bl ListMenuGetScrollAndRow - mov r0, sp - ldrh r0, [r0] - ldrh r1, [r6] - adds r0, r1 - bl sub_8108818 - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldrb r0, [r4] - movs r1, 0x1 - bl bag_menu_print_cursor_ - adds r0, r5, 0 - bl sub_810910C - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0810A2D8: .4byte gTasks+0x8 - thumb_func_end sub_810A288 - - thumb_func_start Task_ItemMenuAction_Cancel -Task_ItemMenuAction_Cancel: @ 810A2DC - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0xA - bl sub_810BA3C - movs r0, 0x6 - bl sub_810BA3C - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldr r1, _0810A320 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldrb r0, [r0, 0x8] - movs r1, 0x1 - bl bag_menu_print_cursor_ - adds r0, r4, 0 - bl sub_810910C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0810A320: .4byte gTasks - thumb_func_end Task_ItemMenuAction_Cancel - - thumb_func_start sub_810A324 -sub_810A324: @ 810A324 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r5, _0810A36C @ =gSpecialVar_ItemId - ldrh r0, [r5] - bl ItemId_GetBattleFunc - cmp r0, 0 - beq _0810A364 - movs r0, 0xA - bl sub_810BA3C - movs r0, 0x6 - bl sub_810BA3C - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x1 - bl CopyWindowToVram - ldrh r0, [r5] - bl ItemId_GetBattleFunc - adds r1, r0, 0 - adds r0, r4, 0 - bl _call_via_r1 -_0810A364: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0810A36C: .4byte gSpecialVar_ItemId - thumb_func_end sub_810A324 - - thumb_func_start sub_810A370 -sub_810A370: @ 810A370 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r7, r0, 3 - ldr r0, _0810A3BC @ =gTasks+0x8 - mov r9, r0 - adds r1, r7, r0 - ldr r2, _0810A3C0 @ =gUnknown_203ACFC - mov r8, r2 - ldrb r0, [r2, 0x6] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r1, 0x2] - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r4, r0, 16 - adds r6, r4, 0 - adds r0, r4, 0 - bl itemid_80BF6D8_mail_related - lsls r0, 24 - cmp r0, 0 - bne _0810A3CC - ldr r2, _0810A3C4 @ =gUnknown_841630F - ldr r3, _0810A3C8 @ =sub_810A1D0 - adds r0, r5, 0 - movs r1, 0x2 - bl DisplayItemMessageInBag - b _0810A426 - .align 2, 0 -_0810A3BC: .4byte gTasks+0x8 -_0810A3C0: .4byte gUnknown_203ACFC -_0810A3C4: .4byte gUnknown_841630F -_0810A3C8: .4byte sub_810A1D0 -_0810A3CC: - movs r0, 0xB6 - lsls r0, 1 @ ITEM_TM_CASE - cmp r4, r0 - bne _0810A3DC - ldr r0, _0810A3D8 @ =sub_810A434 - b _0810A3E4 - .align 2, 0 -_0810A3D8: .4byte sub_810A434 -_0810A3DC: - ldr r0, _0810A3F0 @ =ITEM_BERRY_POUCH - cmp r4, r0 - bne _0810A3F8 - ldr r0, _0810A3F4 @ =sub_810A448 -_0810A3E4: - bl ItemMenu_SetExitCallback - adds r0, r5, 0 - bl ItemMenu_StartFadeToExitCallback - b _0810A426 - .align 2, 0 -_0810A3F0: .4byte 0x0000016d @ ITEM_BERRY_POUCH -_0810A3F4: .4byte sub_810A448 -_0810A3F8: - mov r1, r8 - ldrh r0, [r1, 0x6] - cmp r0, 0x1 - beq _0810A420 - adds r0, r6, 0 - bl itemid_is_unique - lsls r0, 24 - cmp r0, 0 - bne _0810A420 - bl sub_8108CB4 - mov r0, r9 - subs r0, 0x8 - adds r0, r7, r0 - ldr r1, _0810A41C @ =ItemMenu_StartFadeToExitCallback - str r1, [r0] - b _0810A426 - .align 2, 0 -_0810A41C: .4byte ItemMenu_StartFadeToExitCallback -_0810A420: - adds r0, r5, 0 - bl sub_810A18C -_0810A426: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_810A370 - - thumb_func_start sub_810A434 -sub_810A434: @ 810A434 - push {lr} - ldr r1, _0810A444 @ =sub_810A45C - movs r0, 0x1 - movs r2, 0 - bl InitTMCase - pop {r0} - bx r0 - .align 2, 0 -_0810A444: .4byte sub_810A45C - thumb_func_end sub_810A434 - - thumb_func_start sub_810A448 -sub_810A448: @ 810A448 - push {lr} - ldr r1, _0810A458 @ =sub_810A45C - movs r0, 0x1 - movs r2, 0 - bl InitBerryPouch - pop {r0} - bx r0 - .align 2, 0 -_0810A458: .4byte sub_810A45C - thumb_func_end sub_810A448 - - thumb_func_start sub_810A45C -sub_810A45C: @ 810A45C - push {lr} - bl CB2_SelectBagItemToGive - pop {r0} - bx r0 - thumb_func_end sub_810A45C - - thumb_func_start sub_810A468 -sub_810A468: @ 810A468 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r7, r0, 3 - ldr r0, _0810A4B4 @ =gTasks+0x8 - mov r9, r0 - adds r1, r7, r0 - ldr r2, _0810A4B8 @ =gUnknown_203ACFC - mov r8, r2 - ldrb r0, [r2, 0x6] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r1, 0x2] - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r4, r0, 16 - adds r6, r4, 0 - adds r0, r4, 0 - bl ItemIsMail - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0810A4C4 - ldr r2, _0810A4BC @ =gUnknown_841630F - ldr r3, _0810A4C0 @ =sub_810A1D0 - adds r0, r5, 0 - movs r1, 0x2 - bl DisplayItemMessageInBag - b _0810A51E - .align 2, 0 -_0810A4B4: .4byte gTasks+0x8 -_0810A4B8: .4byte gUnknown_203ACFC -_0810A4BC: .4byte gUnknown_841630F -_0810A4C0: .4byte sub_810A1D0 -_0810A4C4: - movs r0, 0xB6 - lsls r0, 1 @ ITEM_TM_CASE - cmp r4, r0 - bne _0810A4D4 - ldr r0, _0810A4D0 @ =sub_810A52C - b _0810A4DC - .align 2, 0 -_0810A4D0: .4byte sub_810A52C -_0810A4D4: - ldr r0, _0810A4E8 @ =0x0000016d @ ITEM_BERRY_POUCH - cmp r4, r0 - bne _0810A4F0 - ldr r0, _0810A4EC @ =sub_810A540 -_0810A4DC: - bl ItemMenu_SetExitCallback - adds r0, r5, 0 - bl ItemMenu_StartFadeToExitCallback - b _0810A51E - .align 2, 0 -_0810A4E8: .4byte 0x0000016d -_0810A4EC: .4byte sub_810A540 -_0810A4F0: - mov r1, r8 - ldrh r0, [r1, 0x6] - cmp r0, 0x1 - beq _0810A518 - adds r0, r6, 0 - bl itemid_is_unique - lsls r0, 24 - cmp r0, 0 - bne _0810A518 - bl sub_8108CB4 - mov r0, r9 - subs r0, 0x8 - adds r0, r7, r0 - ldr r1, _0810A514 @ =ItemMenu_StartFadeToExitCallback - str r1, [r0] - b _0810A51E - .align 2, 0 -_0810A514: .4byte ItemMenu_StartFadeToExitCallback -_0810A518: - adds r0, r5, 0 - bl sub_810A18C -_0810A51E: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_810A468 - - thumb_func_start sub_810A52C -sub_810A52C: @ 810A52C - push {lr} - ldr r1, _0810A53C @ =sub_810A554 - movs r0, 0x3 - movs r2, 0 - bl InitTMCase - pop {r0} - bx r0 - .align 2, 0 -_0810A53C: .4byte sub_810A554 - thumb_func_end sub_810A52C - - thumb_func_start sub_810A540 -sub_810A540: @ 810A540 - push {lr} - ldr r1, _0810A550 @ =sub_810A554 - movs r0, 0x3 - movs r2, 0 - bl InitBerryPouch - pop {r0} - bx r0 - .align 2, 0 -_0810A550: .4byte sub_810A554 - thumb_func_end sub_810A540 - - thumb_func_start sub_810A554 -sub_810A554: @ 810A554 - push {lr} - ldr r2, _0810A564 @ =sub_808CE60 - movs r0, 0x4 - movs r1, 0x3 - bl GoToBagMenu - pop {r0} - bx r0 - .align 2, 0 -_0810A564: .4byte sub_808CE60 - thumb_func_end sub_810A554 - thumb_func_start sub_810A568 sub_810A568: @ 810A568 push {r4-r7,lr} diff --git a/data/item_menu.s b/data/item_menu.s deleted file mode 100644 index 66e13cca0..000000000 --- a/data/item_menu.s +++ /dev/null @@ -1,62 +0,0 @@ -#include "constants/region_map.h" -#include "constants/flags.h" -#include "constants/moves.h" -#include "constants/item_menu.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - .section .rodata - .align 2 - -gUnknown_8452F18:: @ 8452F18 - .byte 0x00, 0x03, 0x01, 0x04 - .byte 0x00, 0x02, 0x04, 0x0b - .byte 0x03, 0x01, 0x04, 0x0b - -gUnknown_8452F24:: @ 8452F24 - .byte 0x06, 0x03, 0x01, 0x04 - -gUnknown_8452F28:: @ 8452F28 - .byte 0x03, 0x04 - .byte 0x04, 0x0b - .byte 0x03, 0x04 - -gUnknown_8452F2E:: @ 8452F2E - .byte 0x07, 0x04 - -gUnknown_8452F30:: @ 8452F30 - .byte 0x05, 0x04 - -gUnknown_8452F32:: @ 8452F32 - .byte 0x04, 0x0b - -gUnknown_8452F34:: @ 8452F34 - .4byte sub_8109BB8 - .4byte sub_810A370 - .4byte sub_810A568 - .4byte sub_810AB40 - .4byte sub_810A468 - .4byte sub_8109BB8 - .4byte NULL - -gUnknown_8452F50:: @ 8452F50 - .4byte sub_8109EA8 - .4byte sub_8109DB0 - -gUnknown_8452F58:: @ 8452F58 - .4byte sub_810A940 - .4byte sub_810A720 - -gUnknown_8452F60:: @ 8452F60 - .string "{COLOR_HIGHLIGHT_SHADOW RED TRANSPARENT GREEN}$" - -gUnknown_8452F66:: @ 8452F66 - .string "{COLOR_HIGHLIGHT_SHADOW LIGHT_GRAY TRANSPARENT BLACK}$" - -gUnknown_8452F6C:: @ 8452F6C - .byte 0, 8, 72, 1, 72, 72 - .2byte 0, 2, 111, 111 - .byte 0 - .align 2 - -gUnknown_8452F7C:: @ 8452F7C - .incbin "graphics/interface/select_button.4bpp" diff --git a/data/strings.s b/data/strings.s index fc6ab5cb5..c572f6bc9 100644 --- a/data/strings.s +++ b/data/strings.s @@ -567,7 +567,7 @@ gText_KeyItems2:: @ 0x84162DE gText_DepositItem:: @ 84162E8 .string "DEPOSIT ITEM$" -gUnknown_84162F5:: @ 84162F5 +gText_CloseBag:: @ 84162F5 .string "CLOSE BAG$" gOtherText_StrVar1:: @ 84162FF @@ -577,7 +577,7 @@ gText_IsSelected:: @ 8416301 .string " is\n" .string "selected.$" -gUnknown_841630F:: @ 841630F +gText_CantWriteMailHere:: @ 841630F .string "You can't write\n" .string "MAIL here.$" diff --git a/include/menu_helpers.h b/include/menu_helpers.h index 1e75b336c..90aeb95f6 100644 --- a/include/menu_helpers.h +++ b/include/menu_helpers.h @@ -27,7 +27,7 @@ void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *templa u8 GetLRKeysState(void); u8 GetLRKeysPressedAndHeld(void); bool8 itemid_link_can_give_berry(u16 itemId); -bool8 itemid_80BF6D8_mail_related(u16 itemId); +bool8 CanWriteMailHere(u16 itemId); void ResetVramOamAndBgCntRegs(void); #endif //GUARD_MENU_HELPERS_H diff --git a/include/strings.h b/include/strings.h index 8dba28b3c..0d70d9e19 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1047,6 +1047,7 @@ extern const u8 gOtherText_Deselect[]; extern const u8 gText_Items2[]; extern const u8 gText_PokeBalls2[]; extern const u8 gText_KeyItems2[]; -extern const u8 gUnknown_84162F5[]; +extern const u8 gText_CloseBag[]; +extern const u8 gText_CantWriteMailHere[]; #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index ddec18aa0..86b2448db 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -519,7 +519,6 @@ SECTIONS { data/pokedex_screen.o(.rodata); src/list_menu.o(.rodata); src/item_menu.o(.rodata); - data/item_menu.o(.rodata); src/save_location.o(.rodata); src/bag.o(.rodata); src/trainer_pokemon_sprites.o(.rodata); diff --git a/src/item_menu.c b/src/item_menu.c index 7d03c5170..1e2cbfa3b 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -2,6 +2,7 @@ #include "gflib.h" #include "bag.h" #include "battle_controllers.h" +#include "berry_pouch.h" #include "decompress.h" #include "field_player_avatar.h" #include "graphics.h" @@ -16,8 +17,11 @@ #include "menu_indicators.h" #include "new_menu_helpers.h" #include "overworld.h" +#include "party_menu.h" +#include "pokemon_storage_system.h" #include "scanline_effect.h" #include "strings.h" +#include "tm_case.h" #include "constants/items.h" #include "constants/songs.h" @@ -85,16 +89,29 @@ void sub_81095AC(u8 taskId, u32 itemIndex); void sub_810967C(u8 taskId, u32 itemIndex); void sub_8109854(u8 a0); void sub_8109BB8(u8 taskId); +void sub_8109BE4(u8 taskId); void Task_ItemMenuAction_Use(u8 taskId); void Task_ItemMenuAction_Toss(u8 taskId); +void sub_8109D38(u8 taskId); +void sub_8109DB0(u8 taskId); +void sub_8109DEC(u8 taskId); +void sub_8109EA8(u8 taskId); +void sub_8109F44(u8 taskId); void Task_ItemMenuAction_ToggleSelect(u8 taskId); void Task_ItemMenuAction_Give(u8 taskId); +void sub_810A170(u8 taskId); void Task_ItemMenuAction_Cancel(u8 taskId); -void sub_8109DB0(u8 taskId); -void sub_8109EA8(u8 taskId); +void sub_810A18C(u8 taskId); +void sub_810A1D0(u8 taskId); void sub_810A324(u8 taskId); void sub_810A370(u8 taskId); +void sub_810A434(void); +void sub_810A448(void); +void sub_810A45C(void); void sub_810A468(u8 taskId); +void sub_810A52C(void); +void sub_810A540(void); +void sub_810A554(void); void sub_810A568(u8 taskId); void sub_810A720(u8 taskId); void sub_810A940(u8 taskId); @@ -162,17 +179,99 @@ const struct MenuAction gUnknown_8452EB8[] = { [ITEMMENUACTION_DUMMY] = {gString_Dummy, {.void_u8 = NULL}} }; -extern const u8 gUnknown_8452F18[][4]; -extern const u8 gUnknown_8452F24[]; -extern const u8 gUnknown_8452F28[][2]; -extern const u8 gUnknown_8452F2E[]; -extern const u8 gUnknown_8452F30[]; -extern const u8 gUnknown_8452F32[]; -extern const TaskFunc gUnknown_8452F34[]; -extern const u8 gUnknown_8452F60[]; -extern const u8 gUnknown_8452F66[]; -extern const struct ScrollArrowsTemplate gUnknown_8452F6C; -extern const u8 gUnknown_8452F7C[]; +const u8 gUnknown_8452F18[][4] = { + { + ITEMMENUACTION_USE, + ITEMMENUACTION_GIVE, + ITEMMENUACTION_TOSS, + ITEMMENUACTION_CANCEL + }, { + ITEMMENUACTION_USE, + ITEMMENUACTION_REGISTER, + ITEMMENUACTION_CANCEL, + ITEMMENUACTION_DUMMY + }, { + ITEMMENUACTION_GIVE, + ITEMMENUACTION_TOSS, + ITEMMENUACTION_CANCEL, + ITEMMENUACTION_DUMMY + } +}; + +const u8 gUnknown_8452F24[] = { + ITEMMENUACTION_CHECK, + ITEMMENUACTION_GIVE, + ITEMMENUACTION_TOSS, + ITEMMENUACTION_CANCEL +}; + +const u8 gUnknown_8452F28[][2] = { + { + ITEMMENUACTION_GIVE, + ITEMMENUACTION_CANCEL + }, { + ITEMMENUACTION_CANCEL, + ITEMMENUACTION_DUMMY + }, { + ITEMMENUACTION_GIVE, + ITEMMENUACTION_CANCEL + } +}; + +const u8 gUnknown_8452F2E[] = { + ITEMMENUACTION_OPEN, + ITEMMENUACTION_CANCEL +}; + +const u8 gUnknown_8452F30[] = { + ITEMMENUACTION_BATTLE_USE, + ITEMMENUACTION_CANCEL +}; + +const u8 gUnknown_8452F32[] = { + ITEMMENUACTION_CANCEL, + ITEMMENUACTION_DUMMY +}; + +const TaskFunc gUnknown_8452F34[] = { + sub_8109BB8, + sub_810A370, + sub_810A568, + sub_810AB40, + sub_810A468, + sub_8109BB8, + NULL +}; + +const struct YesNoFuncTable gUnknown_8452F50 = { + sub_8109EA8, + sub_8109DB0 +}; + +const struct YesNoFuncTable gUnknown_8452F58 = { + sub_810A940, + sub_810A720 +}; + +const u8 gUnknown_8452F60[] = _("{COLOR_HIGHLIGHT_SHADOW RED TRANSPARENT GREEN}"); + +const u8 gUnknown_8452F66[] = _("{COLOR_HIGHLIGHT_SHADOW LIGHT_GRAY TRANSPARENT BLACK}"); + +const struct ScrollArrowsTemplate gUnknown_8452F6C = { + .firstArrowType = SCROLL_ARROW_LEFT, + .firstX = 8, + .firstY = 72, + .secondArrowType = SCROLL_ARROW_RIGHT, + .secondX = 72, + .secondY = 72, + .fullyUpThreshold = 0, + .fullyDownThreshold = 2, + .tileTag = 111, + .palTag = 111, + .palNum = 0, +}; + +const u8 gUnknown_8452F7C[] = INCBIN_U8("graphics/interface/select_button.4bpp"); void GoToBagMenu(u8 location, u8 a1, MainCallback a2) { @@ -620,7 +719,7 @@ void sub_8108818(s32 itemIndex) if (itemIndex != gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket]) description = ItemId_GetDescription(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemIndex)); else - description = gUnknown_84162F5; + description = gText_CloseBag; FillWindowPixelBuffer(1, PIXEL_FILL(0)); sub_810B8F0(1, 2, description, 0, 3, 2, 0, 0, 0); } @@ -941,9 +1040,9 @@ void sub_8108F0C(u8 taskId) ListMenuGetScrollAndRow(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); switch (input) { - case -1: + case LIST_NOTHING_CHOSEN: return; - case -2: + case LIST_CANCEL: PlaySE(SE_SELECT); gSpecialVar_ItemId = ITEM_NONE; sub_8108CB4(); @@ -1123,9 +1222,9 @@ void sub_81094B0(u8 taskId) } switch (input) { - case -1: + case LIST_NOTHING_CHOSEN: return; - case -2: + case LIST_CANCEL: PlaySE(SE_SELECT); gUnknown_203AD10->field_04 = 0xFF; ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); @@ -1202,7 +1301,7 @@ void sub_8109854(u8 a0) ScheduleBgCopyTilemapToVram(1); } -void sub_8109890(void) +void sub_8109890(u8 taskId) { u8 r6; u8 r4; @@ -1301,3 +1400,352 @@ void sub_8109890(void) StringExpandPlaceholders(gStringVar4, gOtherText_StrVar1); sub_810B8F0(r4, 2, gStringVar4, 0, 2, 1, 0, 0, 1); } + +void sub_8109BB8(u8 taskId) +{ + sub_8109890(taskId); + gTasks[taskId].func = sub_8109BE4; +} + +void sub_8109BE4(u8 taskId) +{ + s8 input; + if ((u8)sub_80BF72C() != TRUE) + { + input = Menu_ProcessInputNoWrapAround(); + switch (input) + { + case -1: + PlaySE(SE_SELECT); + gUnknown_8452EB8[ITEMMENUACTION_CANCEL].func.void_u8(taskId); + break; + case -2: + break; + default: + PlaySE(SE_SELECT); + gUnknown_8452EB8[gUnknown_203AD24[input]].func.void_u8(taskId); + break; + } + } +} + +void Task_ItemMenuAction_Use(u8 taskId) +{ + if (ItemId_GetFieldFunc(gSpecialVar_ItemId) != NULL) + { + sub_810BA3C(10); + sub_810BA3C(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gSpecialVar_ItemId) == 1) + sub_810A170(taskId); + else + ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId); + } +} + +void Task_ItemMenuAction_Toss(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + ClearWindowTilemap(sub_810BAD8(10)); + ClearWindowTilemap(sub_810BAD8(6)); + sub_810BA3C(10); + sub_810BA3C(6); + PutWindowTilemap(0); + data[8] = 1; + if (data[2] == 1) + { + sub_8109D38(taskId); + } + else + { + sub_810971C(data[1], gText_TossOutHowManyStrVar1s); + gTasks[taskId].func = sub_8109DEC; + } +} + +void sub_8109D38(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gText_ThrowAwayStrVar2OfThisItemQM); + sub_810B8F0(sub_810B9DC(6, 1), 2, gStringVar4, 0, 2, 1, 0, 0, 1); + sub_810BAE8(taskId, &gUnknown_8452F50); +} + +void sub_8109DB0(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + sub_810BA3C(6); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + bag_menu_print_cursor_(data[0], 1); + sub_810910C(taskId); +} + +void sub_8109DEC(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) + { + sub_81097E4(data[8], 3); + } + else if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + ClearWindowTilemap(sub_810BAD8(6)); + sub_810BA3C(6); + sub_810BA3C(0); + ScheduleBgCopyTilemapToVram(0); + sub_8108978(); + sub_8109D38(taskId); + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_810BA3C(6); + sub_810BA3C(0); + PutWindowTilemap(0); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + bag_menu_print_cursor_(data[0], 1); + sub_8108978(); + sub_810910C(taskId); + } +} + +void sub_8109EA8(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + sub_810BA3C(6); + CopyItemName(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]), gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gText_ThrewAwayStrVar2StrVar1s); + sub_810B8F0(sub_810B9DC(6, 3), 2, gStringVar4, 0, 2, 1, 0, 0, 1); + gTasks[taskId].func = sub_8109F44; +} + +void sub_8109F44(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + RemoveBagItem(gSpecialVar_ItemId, data[8]); + sub_810BA3C(6); + DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + sub_8108DC8(gUnknown_203ACFC.pocket); + sub_81089F4(gUnknown_203ACFC.pocket); + sub_810842C(gUnknown_203ACFC.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + bag_menu_print_cursor_(data[0], 1); + sub_810910C(taskId); + } +} + +void Task_ItemMenuAction_ToggleSelect(u8 taskId) +{ + u16 itemId; + s16 *data = gTasks[taskId].data; + itemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]); + if (gSaveBlock1Ptr->registeredItem == itemId) + gSaveBlock1Ptr->registeredItem = ITEM_NONE; + else + gSaveBlock1Ptr->registeredItem = itemId; + + DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + sub_810842C(gUnknown_203ACFC.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + CopyWindowToVram(0, 1); + Task_ItemMenuAction_Cancel(taskId); +} + +void Task_ItemMenuAction_Give(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 itemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]); + sub_810BA3C(10); + sub_810BA3C(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + CopyWindowToVram(0, 1); + if (!CanWriteMailHere(itemId)) + DisplayItemMessageInBag(taskId, 2, gText_CantWriteMailHere, sub_810A1D0); + else if (!itemid_is_unique(itemId)) + { + if (CalculatePlayerPartyCount() == 0) + { + sub_810A170(taskId); + } + else + { + gUnknown_203AD10->exitCB = CB2_ChooseMonToGiveItem; + gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; + } + } + else + sub_810A18C(taskId); +} + +void sub_810A170(u8 taskId) +{ + DisplayItemMessageInBag(taskId, 2, gText_ThereIsNoPokemon, sub_810A1D0); +} + +void sub_810A18C(u8 taskId) +{ + CopyItemName(gSpecialVar_ItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gText_ItemCantBeHeld); + DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A1D0); +} + +void sub_810A1D0(u8 taskId) +{ + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + sub_810A1F8(taskId); + } +} + +void sub_810A1F8(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + sub_810BA9C(5); + DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + sub_8108DC8(gUnknown_203ACFC.pocket); + sub_81089F4(gUnknown_203ACFC.pocket); + sub_810842C(gUnknown_203ACFC.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + ScheduleBgCopyTilemapToVram(0); + bag_menu_print_cursor_(data[0], 1); + sub_810910C(taskId); +} + +void sub_810A288(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 itemsAbove; + u16 cursorPos; + ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); + sub_8108818(cursorPos + itemsAbove); + PutWindowTilemap(0); + ScheduleBgCopyTilemapToVram(0); + bag_menu_print_cursor_(data[0], 1); + sub_810910C(taskId); +} + +void Task_ItemMenuAction_Cancel(u8 taskId) +{ + sub_810BA3C(10); + sub_810BA3C(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + bag_menu_print_cursor_(gTasks[taskId].data[0], 1); + sub_810910C(taskId); +} + +void sub_810A324(u8 taskId) +{ + if (ItemId_GetBattleFunc(gSpecialVar_ItemId) != NULL) + { + sub_810BA3C(10); + sub_810BA3C(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + CopyWindowToVram(0, 1); + ItemId_GetBattleFunc(gSpecialVar_ItemId)(taskId); + } +} + +void sub_810A370(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 itemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]); + if (!CanWriteMailHere(itemId)) + { + DisplayItemMessageInBag(taskId, 2, gText_CantWriteMailHere, sub_810A1D0); + } + else if (itemId == ITEM_TM_CASE) + { + ItemMenu_SetExitCallback(sub_810A434); + ItemMenu_StartFadeToExitCallback(taskId); + } + else if (itemId == ITEM_BERRY_POUCH) + { + ItemMenu_SetExitCallback(sub_810A448); + ItemMenu_StartFadeToExitCallback(taskId); + } + else if (gUnknown_203ACFC.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(itemId)) + { + sub_8108CB4(); + gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; + } + else + { + sub_810A18C(taskId); + } +} + +void sub_810A434(void) +{ + InitTMCase(1, sub_810A45C, FALSE); +} + +void sub_810A448(void) +{ + InitBerryPouch(1, sub_810A45C, FALSE); +} + +void sub_810A45C(void) +{ + CB2_SelectBagItemToGive(); +} + +void sub_810A468(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 itemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]); + if (ItemIsMail(itemId) == TRUE) + { + DisplayItemMessageInBag(taskId, 2, gText_CantWriteMailHere, sub_810A1D0); + } + else if (itemId == ITEM_TM_CASE) + { + ItemMenu_SetExitCallback(sub_810A52C); + ItemMenu_StartFadeToExitCallback(taskId); + } + else if (itemId == ITEM_BERRY_POUCH) + { + ItemMenu_SetExitCallback(sub_810A540); + ItemMenu_StartFadeToExitCallback(taskId); + } + else if (gUnknown_203ACFC.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(itemId)) + { + sub_8108CB4(); + gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; + } + else + { + sub_810A18C(taskId); + } +} + +void sub_810A52C(void) +{ + InitTMCase(3, sub_810A554, FALSE); +} + +void sub_810A540(void) +{ + InitBerryPouch(3, sub_810A554, FALSE); +} + +void sub_810A554(void) +{ + GoToBagMenu(4, 3, sub_808CE60); +} diff --git a/src/menu_helpers.c b/src/menu_helpers.c index 905e3c1ea..53b9992a2 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -107,7 +107,7 @@ bool8 itemid_link_can_give_berry(u16 itemId) return FALSE; } -bool8 itemid_80BF6D8_mail_related(u16 itemId) +bool8 CanWriteMailHere(u16 itemId) { if (IsUpdateLinkStateCBActive() != TRUE && InUnionRoom() != TRUE) return TRUE; From c9cb5d931c7609bdb2ce4ad15d60993efb2d2fe3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 18 Jan 2020 20:40:33 -0500 Subject: [PATCH 16/22] through sub_810A834 --- asm/item_menu.s | 357 ------------------------------------------------ src/item_menu.c | 106 ++++++++++++++ 2 files changed, 106 insertions(+), 357 deletions(-) diff --git a/asm/item_menu.s b/asm/item_menu.s index d42c65d45..20e9423e9 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -5,363 +5,6 @@ .text - thumb_func_start sub_810A568 -sub_810A568: @ 810A568 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r7, r5, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0810A58C @ =gTasks+0x8 - adds r4, r0, r1 - ldr r6, _0810A590 @ =gSpecialVar_ItemId - ldrh r1, [r6] - movs r0, 0xB6 - lsls r0, 1 - cmp r1, r0 - bne _0810A598 - ldr r0, _0810A594 @ =sub_810A654 - b _0810A5A0 - .align 2, 0 -_0810A58C: .4byte gTasks+0x8 -_0810A590: .4byte gSpecialVar_ItemId -_0810A594: .4byte sub_810A654 -_0810A598: - ldr r0, _0810A5AC @ =0x0000016d - cmp r1, r0 - bne _0810A5B4 - ldr r0, _0810A5B0 @ =sub_810A668 -_0810A5A0: - bl ItemMenu_SetExitCallback - adds r0, r5, 0 - bl ItemMenu_StartFadeToExitCallback - b _0810A63E - .align 2, 0 -_0810A5AC: .4byte 0x0000016d -_0810A5B0: .4byte sub_810A668 -_0810A5B4: - ldrh r0, [r6] - bl itemid_get_market_price - lsls r0, 16 - cmp r0, 0 - bne _0810A5F8 - ldrh r0, [r6] - ldr r1, _0810A5E8 @ =gStringVar1 - bl CopyItemName - ldr r4, _0810A5EC @ =gStringVar4 - ldr r1, _0810A5F0 @ =gText_OhNoICantBuyThat - adds r0, r4, 0 - bl StringExpandPlaceholders - bl sub_80BF8E4 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _0810A5F4 @ =sub_810A1F8 - adds r0, r5, 0 - adds r2, r4, 0 - bl DisplayItemMessageInBag - b _0810A63E - .align 2, 0 -_0810A5E8: .4byte gStringVar1 -_0810A5EC: .4byte gStringVar4 -_0810A5F0: .4byte gText_OhNoICantBuyThat -_0810A5F4: .4byte sub_810A1F8 -_0810A5F8: - movs r0, 0x1 - strh r0, [r4, 0x10] - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - bne _0810A610 - bl sub_810BB40 - adds r0, r5, 0 - bl sub_810A690 - b _0810A63E -_0810A610: - cmp r0, 0x63 - ble _0810A618 - movs r0, 0x63 - strh r0, [r4, 0x4] -_0810A618: - ldrh r0, [r6] - ldr r1, _0810A644 @ =gStringVar1 - bl CopyItemName - ldr r4, _0810A648 @ =gStringVar4 - ldr r1, _0810A64C @ =gText_HowManyWouldYouLikeToSell - adds r0, r4, 0 - bl StringExpandPlaceholders - bl sub_80BF8E4 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _0810A650 @ =sub_810A770 - adds r0, r7, 0 - adds r2, r4, 0 - bl DisplayItemMessageInBag -_0810A63E: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810A644: .4byte gStringVar1 -_0810A648: .4byte gStringVar4 -_0810A64C: .4byte gText_HowManyWouldYouLikeToSell -_0810A650: .4byte sub_810A770 - thumb_func_end sub_810A568 - - thumb_func_start sub_810A654 -sub_810A654: @ 810A654 - push {lr} - ldr r1, _0810A664 @ =sub_810A67C - movs r0, 0x2 - movs r2, 0 - bl InitTMCase - pop {r0} - bx r0 - .align 2, 0 -_0810A664: .4byte sub_810A67C - thumb_func_end sub_810A654 - - thumb_func_start sub_810A668 -sub_810A668: @ 810A668 - push {lr} - ldr r1, _0810A678 @ =sub_810A67C - movs r0, 0x2 - movs r2, 0 - bl InitBerryPouch - pop {r0} - bx r0 - .align 2, 0 -_0810A678: .4byte sub_810A67C - thumb_func_end sub_810A668 - - thumb_func_start sub_810A67C -sub_810A67C: @ 810A67C - push {lr} - ldr r2, _0810A68C @ =CB2_ReturnToField - movs r0, 0x2 - movs r1, 0x3 - bl GoToBagMenu - pop {r0} - bx r0 - .align 2, 0 -_0810A68C: .4byte CB2_ReturnToField - thumb_func_end sub_810A67C - - thumb_func_start sub_810A690 -sub_810A690: @ 810A690 - push {r4-r6,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - ldr r0, _0810A6F4 @ =gTasks+0x8 - adds r4, r0 - ldr r6, _0810A6F8 @ =gStringVar3 - ldr r0, _0810A6FC @ =gUnknown_203ACFC - ldrb r0, [r0, 0x6] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x2] - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r0, 16 - bl itemid_get_market_price - lsls r0, 16 - lsrs r0, 17 - movs r2, 0x10 - ldrsh r1, [r4, r2] - muls r1, r0 - adds r0, r6, 0 - movs r2, 0 - movs r3, 0x6 - bl ConvertIntToDecimalStringN - ldr r4, _0810A700 @ =gStringVar4 - ldr r1, _0810A704 @ =gText_ICanPayThisMuch_WouldThatBeOkay - adds r0, r4, 0 - bl StringExpandPlaceholders - bl sub_80BF8E4 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _0810A708 @ =sub_810A70C - adds r0, r5, 0 - adds r2, r4, 0 - bl DisplayItemMessageInBag - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0810A6F4: .4byte gTasks+0x8 -_0810A6F8: .4byte gStringVar3 -_0810A6FC: .4byte gUnknown_203ACFC -_0810A700: .4byte gStringVar4 -_0810A704: .4byte gText_ICanPayThisMuch_WouldThatBeOkay -_0810A708: .4byte sub_810A70C - thumb_func_end sub_810A690 - - thumb_func_start sub_810A70C -sub_810A70C: @ 810A70C - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0810A71C @ =gUnknown_8452F58 - bl sub_810BB14 - pop {r0} - bx r0 - .align 2, 0 -_0810A71C: .4byte gUnknown_8452F58 - thumb_func_end sub_810A70C - - thumb_func_start sub_810A720 -sub_810A720: @ 810A720 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - ldr r0, _0810A76C @ =gTasks+0x8 - adds r4, r0 - movs r0, 0x2 - bl sub_810BA3C - movs r0, 0x5 - bl sub_810BA9C - movs r0, 0x2 - bl PutWindowTilemap - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldrb r0, [r4] - movs r1, 0x1 - bl bag_menu_print_cursor_ - adds r0, r5, 0 - bl sub_810910C - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0810A76C: .4byte gTasks+0x8 - thumb_func_end sub_810A720 - - thumb_func_start sub_810A770 -sub_810A770: @ 810A770 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x14 - lsls r0, 24 - lsrs r0, 24 - lsls r5, r0, 2 - adds r5, r0 - lsls r5, 3 - ldr r0, _0810A81C @ =gTasks+0x8 - mov r8, r0 - adds r2, r5, 0 - add r2, r8 - mov r9, r2 - movs r0, 0 - movs r1, 0x1 - bl sub_810B9DC - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0810A820 @ =gStringVar1 - movs r1, 0x1 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r6, _0810A824 @ =gStringVar4 - ldr r1, _0810A828 @ =gText_TimesStrVar1 - adds r0, r6, 0 - bl StringExpandPlaceholders - movs r0, 0xA - str r0, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r0, 0xFF - str r0, [sp, 0xC] - str r1, [sp, 0x10] - adds r0, r4, 0 - movs r1, 0 - adds r2, r6, 0 - movs r3, 0x4 - bl sub_810B8F0 - ldr r0, _0810A82C @ =gUnknown_203ACFC - ldrb r0, [r0, 0x6] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r3, r9 - ldrh r1, [r3, 0x2] - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r0, 16 - bl itemid_get_market_price - lsls r0, 16 - lsrs r0, 17 - mov r2, r9 - movs r3, 0x10 - ldrsh r1, [r2, r3] - muls r0, r1 - bl sub_810A834 - bl sub_810BB40 - bl sub_8108908 - movs r0, 0x8 - negs r0, r0 - add r8, r0 - add r5, r8 - ldr r0, _0810A830 @ =sub_810A85C - str r0, [r5] - add sp, 0x14 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0810A81C: .4byte gTasks+0x8 -_0810A820: .4byte gStringVar1 -_0810A824: .4byte gStringVar4 -_0810A828: .4byte gText_TimesStrVar1 -_0810A82C: .4byte gUnknown_203ACFC -_0810A830: .4byte sub_810A85C - thumb_func_end sub_810A770 - - thumb_func_start sub_810A834 -sub_810A834: @ 810A834 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r0, 0 - bl sub_810BAD8 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - str r1, [sp] - movs r1, 0x38 - movs r2, 0xA - adds r3, r4, 0 - bl PrintMoneyAmount - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_810A834 - thumb_func_start sub_810A85C sub_810A85C: @ 810A85C push {r4-r6,lr} diff --git a/src/item_menu.c b/src/item_menu.c index 1e2cbfa3b..b73d9f1a8 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -15,6 +15,7 @@ #include "mail_data.h" #include "menu.h" #include "menu_indicators.h" +#include "money.h" #include "new_menu_helpers.h" #include "overworld.h" #include "party_menu.h" @@ -113,7 +114,15 @@ void sub_810A52C(void); void sub_810A540(void); void sub_810A554(void); void sub_810A568(u8 taskId); +void sub_810A654(void); +void sub_810A668(void); +void sub_810A67C(void); +void sub_810A690(u8 taskId); +void sub_810A70C(u8 taskId); void sub_810A720(u8 taskId); +void sub_810A770(u8 taskId); +void sub_810A834(s32 price); +void sub_810A85C(u8 taskId); void sub_810A940(u8 taskId); void sub_810AB40(u8 taskId); bool8 sub_810ADAC(void); @@ -1749,3 +1758,100 @@ void sub_810A554(void) { GoToBagMenu(4, 3, sub_808CE60); } + +void sub_810A568(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (gSpecialVar_ItemId == ITEM_TM_CASE) + { + ItemMenu_SetExitCallback(sub_810A654); + ItemMenu_StartFadeToExitCallback(taskId); + } + else if (gSpecialVar_ItemId == ITEM_BERRY_POUCH) + { + ItemMenu_SetExitCallback(sub_810A668); + ItemMenu_StartFadeToExitCallback(taskId); + } + else if (itemid_get_market_price(gSpecialVar_ItemId) == 0) + { + CopyItemName(gSpecialVar_ItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gText_OhNoICantBuyThat); + DisplayItemMessageInBag(taskId, sub_80BF8E4(), gStringVar4, sub_810A1F8); + } + else + { + data[8] = 1; + if (data[2] == 1) + { + sub_810BB40(); + sub_810A690(taskId); + } + else + { + if (data[2] > 99) + data[2] = 99; + CopyItemName(gSpecialVar_ItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gText_HowManyWouldYouLikeToSell); + DisplayItemMessageInBag(taskId, sub_80BF8E4(), gStringVar4, sub_810A770); + } + } +} + +void sub_810A654(void) +{ + InitTMCase(2, sub_810A67C, FALSE); +} + +void sub_810A668(void) +{ + InitBerryPouch(2, sub_810A67C, FALSE); +} + +void sub_810A67C(void) +{ + GoToBagMenu(2, 3, CB2_ReturnToField); +} + +void sub_810A690(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); + StringExpandPlaceholders(gStringVar4, gText_ICanPayThisMuch_WouldThatBeOkay); + DisplayItemMessageInBag(taskId, sub_80BF8E4(), gStringVar4, sub_810A70C); +} + +void sub_810A70C(u8 taskId) +{ + sub_810BB14(taskId, &gUnknown_8452F58); +} + +void sub_810A720(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + sub_810BA3C(2); + sub_810BA9C(5); + PutWindowTilemap(2); + PutWindowTilemap(0); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + bag_menu_print_cursor_(data[0], 1); + sub_810910C(taskId); +} + +void sub_810A770(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u8 r4 = sub_810B9DC(0, 1); + ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 2); + StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); + sub_810B8F0(r4, 0, gStringVar4, 4, 10, 1, 0, 0xFF, 1); + sub_810A834(itemid_get_market_price(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1])) / 2 * data[8]); + sub_810BB40(); + sub_8108908(); + gTasks[taskId].func = sub_810A85C; +} + +void sub_810A834(s32 amount) +{ + PrintMoneyAmount(sub_810BAD8(0), 56, 10, amount, 0); +} From 4c62d0f35f58cd5720997ffb1241d5a08dd90620 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 18 Jan 2020 22:14:54 -0500 Subject: [PATCH 17/22] through InitTutorialBag --- asm/item_menu.s | 866 +--------------------------- data/strings.s | 6 +- include/event_scripts.h | 2 + include/item_menu.h | 2 +- include/map_name_popup.h | 1 + include/strings.h | 3 + src/battle_controller_oak_old_man.c | 2 +- src/item_menu.c | 238 ++++++++ 8 files changed, 256 insertions(+), 864 deletions(-) diff --git a/asm/item_menu.s b/asm/item_menu.s index 20e9423e9..3bdc40756 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -5,858 +5,6 @@ .text - thumb_func_start sub_810A85C -sub_810A85C: @ 810A85C - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r6, r4, 0 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _0810A8B4 @ =gTasks+0x8 - adds r5, r0, r1 - adds r0, r5, 0 - adds r0, 0x10 - ldrh r1, [r5, 0x4] - bl AdjustQuantityAccordingToDPadInput - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0810A8BC - movs r1, 0x10 - ldrsh r0, [r5, r1] - movs r1, 0x2 - bl sub_81097E4 - ldr r0, _0810A8B8 @ =gUnknown_203ACFC - ldrb r0, [r0, 0x6] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r5, 0x2] - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r0, 16 - bl itemid_get_market_price - lsls r0, 16 - lsrs r0, 17 - movs r2, 0x10 - ldrsh r1, [r5, r2] - muls r0, r1 - bl sub_810A834 - b _0810A93A - .align 2, 0 -_0810A8B4: .4byte gTasks+0x8 -_0810A8B8: .4byte gUnknown_203ACFC -_0810A8BC: - ldr r0, _0810A8EC @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0810A8F0 - movs r0, 0x5 - bl PlaySE - movs r0, 0 - bl sub_810BA3C - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - bl sub_8108978 - adds r0, r4, 0 - bl sub_810A690 - b _0810A93A - .align 2, 0 -_0810A8EC: .4byte gMain -_0810A8F0: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0810A93A - movs r0, 0x5 - bl PlaySE - movs r0, 0 - bl sub_810BA3C - movs r0, 0x2 - bl sub_810BA3C - movs r0, 0x5 - bl sub_810BA9C - movs r0, 0x2 - bl PutWindowTilemap - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - bl sub_8108978 - ldrb r0, [r5] - movs r1, 0x1 - bl bag_menu_print_cursor_ - adds r0, r6, 0 - bl sub_810910C -_0810A93A: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_810A85C - - thumb_func_start sub_810A940 -sub_810A940: @ 810A940 - push {r4-r6,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - ldr r0, _0810A9B4 @ =gTasks+0x8 - adds r4, r0 - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldr r0, _0810A9B8 @ =gSpecialVar_ItemId - ldrh r0, [r0] - ldr r1, _0810A9BC @ =gStringVar1 - bl CopyItemName - ldr r6, _0810A9C0 @ =gStringVar3 - ldr r0, _0810A9C4 @ =gUnknown_203ACFC - ldrb r0, [r0, 0x6] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x2] - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r0, 16 - bl itemid_get_market_price - lsls r0, 16 - lsrs r0, 17 - movs r2, 0x10 - ldrsh r1, [r4, r2] - muls r1, r0 - adds r0, r6, 0 - movs r2, 0 - movs r3, 0x6 - bl ConvertIntToDecimalStringN - ldr r4, _0810A9C8 @ =gStringVar4 - ldr r1, _0810A9CC @ =gText_TurnedOverItemsWorthYen - adds r0, r4, 0 - bl StringExpandPlaceholders - ldr r3, _0810A9D0 @ =sub_810A9D4 - adds r0, r5, 0 - movs r1, 0x2 - adds r2, r4, 0 - bl DisplayItemMessageInBag - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0810A9B4: .4byte gTasks+0x8 -_0810A9B8: .4byte gSpecialVar_ItemId -_0810A9BC: .4byte gStringVar1 -_0810A9C0: .4byte gStringVar3 -_0810A9C4: .4byte gUnknown_203ACFC -_0810A9C8: .4byte gStringVar4 -_0810A9CC: .4byte gText_TurnedOverItemsWorthYen -_0810A9D0: .4byte sub_810A9D4 - thumb_func_end sub_810A940 - - thumb_func_start sub_810A9D4 -sub_810A9D4: @ 810A9D4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - lsls r6, r0, 2 - adds r6, r0 - lsls r6, 3 - ldr r0, _0810AAD8 @ =gTasks+0x8 - mov r10, r0 - adds r1, r6, 0 - add r1, r10 - mov r8, r1 - movs r0, 0xF8 - bl PlaySE - ldr r5, _0810AADC @ =gSpecialVar_ItemId - ldrh r0, [r5] - mov r2, r8 - ldrh r1, [r2, 0x10] - bl RemoveBagItem - ldr r3, _0810AAE0 @ =gSaveBlock1Ptr - ldr r4, [r3] - movs r7, 0xA4 - lsls r7, 2 - adds r4, r7 - ldrh r0, [r5] - bl itemid_get_market_price - lsls r0, 16 - lsrs r0, 17 - mov r2, r8 - movs r3, 0x10 - ldrsh r1, [r2, r3] - muls r1, r0 - adds r0, r4, 0 - bl AddMoney - ldrh r0, [r5] - mov r2, r8 - ldrh r1, [r2, 0x10] - movs r2, 0x2 - bl RecordItemPurchase - mov r3, r8 - ldrb r0, [r3] - ldr r4, _0810AAE4 @ =gUnknown_203ACFC - ldrh r2, [r4, 0x6] - lsls r2, 1 - adds r5, r4, 0 - adds r5, 0xE - adds r1, r2, r5 - movs r3, 0x8 - adds r3, r4 - mov r9, r3 - add r2, r9 - bl DestroyListMenuTask - ldrb r0, [r4, 0x6] - bl sub_8108DC8 - ldrb r0, [r4, 0x6] - bl sub_81089F4 - ldr r0, _0810AAE8 @ =gUnknown_203AD10 - ldr r2, [r0] - ldrb r1, [r2, 0x5] - movs r0, 0x3F - ands r0, r1 - movs r1, 0x40 - orrs r0, r1 - strb r0, [r2, 0x5] - ldrb r0, [r4, 0x6] - bl sub_810842C - ldr r0, _0810AAEC @ =gMultiuseListMenuTemplate - ldrh r2, [r4, 0x6] - lsls r2, 1 - adds r5, r2, r5 - ldrh r1, [r5] - add r2, r9 - ldrh r2, [r2] - bl ListMenuInit - lsls r0, 24 - lsrs r0, 24 - mov r1, r8 - strh r0, [r1] - movs r1, 0x2 - bl bag_menu_print_cursor_ - movs r0, 0x2 - bl sub_810BAD8 - lsls r0, 24 - lsrs r0, 24 - bl sub_810BB74 - movs r0, 0x2 - bl sub_810BAD8 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r2, _0810AAE0 @ =gSaveBlock1Ptr - ldr r0, [r2] - adds r0, r7 - bl GetMoney - adds r1, r0, 0 - adds r0, r4, 0 - movs r2, 0 - bl PrintMoneyAmountInMoneyBox - movs r3, 0x8 - negs r3, r3 - add r10, r3 - add r6, r10 - ldr r0, _0810AAF0 @ =sub_810AAF4 - str r0, [r6] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810AAD8: .4byte gTasks+0x8 -_0810AADC: .4byte gSpecialVar_ItemId -_0810AAE0: .4byte gSaveBlock1Ptr -_0810AAE4: .4byte gUnknown_203ACFC -_0810AAE8: .4byte gUnknown_203AD10 -_0810AAEC: .4byte gMultiuseListMenuTemplate -_0810AAF0: .4byte sub_810AAF4 - thumb_func_end sub_810A9D4 - - thumb_func_start sub_810AAF4 -sub_810AAF4: @ 810AAF4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0810AB38 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _0810AB0E - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0810AB32 -_0810AB0E: - movs r0, 0x5 - bl PlaySE - movs r0, 0x2 - bl sub_810BA3C - movs r0, 0x2 - bl PutWindowTilemap - ldr r0, _0810AB3C @ =gUnknown_203AD10 - ldr r2, [r0] - ldrb r1, [r2, 0x5] - movs r0, 0x3F - ands r0, r1 - strb r0, [r2, 0x5] - adds r0, r4, 0 - bl sub_810A1F8 -_0810AB32: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0810AB38: .4byte gMain -_0810AB3C: .4byte gUnknown_203AD10 - thumb_func_end sub_810AAF4 - - thumb_func_start sub_810AB40 -sub_810AB40: @ 810AB40 - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r4, r0, 3 - ldr r5, _0810AB64 @ =gTasks+0x8 - adds r1, r4, r5 - movs r0, 0x1 - strh r0, [r1, 0x10] - movs r3, 0x4 - ldrsh r0, [r1, r3] - cmp r0, 0x1 - bne _0810AB68 - adds r0, r2, 0 - bl sub_810AC40 - b _0810AB7A - .align 2, 0 -_0810AB64: .4byte gTasks+0x8 -_0810AB68: - ldrh r0, [r1, 0x2] - ldr r1, _0810AB80 @ =gUnknown_841638F - bl sub_810971C - adds r0, r5, 0 - subs r0, 0x8 - adds r0, r4, r0 - ldr r1, _0810AB84 @ =sub_810AB88 - str r1, [r0] -_0810AB7A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0810AB80: .4byte gUnknown_841638F -_0810AB84: .4byte sub_810AB88 - thumb_func_end sub_810AB40 - - thumb_func_start sub_810AB88 -sub_810AB88: @ 810AB88 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r6, r5, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0810ABB8 @ =gTasks+0x8 - adds r4, r0, r1 - adds r0, r4, 0 - adds r0, 0x10 - ldrh r1, [r4, 0x4] - bl AdjustQuantityAccordingToDPadInput - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0810ABBC - movs r1, 0x10 - ldrsh r0, [r4, r1] - movs r1, 0x3 - bl sub_81097E4 - b _0810AC38 - .align 2, 0 -_0810ABB8: .4byte gTasks+0x8 -_0810ABBC: - ldr r0, _0810ABFC @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0810AC00 - movs r0, 0x5 - bl PlaySE - movs r0, 0x6 - bl sub_810BAD8 - lsls r0, 24 - lsrs r0, 24 - bl ClearWindowTilemap - movs r0, 0x6 - bl sub_810BA3C - movs r0, 0 - bl sub_810BA3C - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - bl sub_8108978 - adds r0, r5, 0 - bl sub_810AC40 - b _0810AC38 - .align 2, 0 -_0810ABFC: .4byte gMain -_0810AC00: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0810AC38 - movs r0, 0x5 - bl PlaySE - movs r0, 0x6 - bl sub_810BA3C - movs r0, 0 - bl sub_810BA3C - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldrb r0, [r4] - movs r1, 0x1 - bl bag_menu_print_cursor_ - bl sub_8108978 - adds r0, r6, 0 - bl sub_810910C -_0810AC38: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_810AB88 - - thumb_func_start sub_810AC40 -sub_810AC40: @ 810AC40 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x14 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - mov r8, r0 - ldr r0, _0810ACCC @ =gTasks+0x8 - mov r9, r0 - mov r7, r8 - add r7, r9 - ldr r5, _0810ACD0 @ =gSpecialVar_ItemId - ldrh r0, [r5] - ldrh r1, [r7, 0x10] - bl AddPCItem - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x1 - bne _0810ACEC - ldrh r2, [r5] - ldr r3, _0810ACD4 @ =0x0000ffff - movs r0, 0x1C - movs r1, 0 - bl ItemUse_SetQuestLogEvent - ldrh r0, [r5] - ldr r1, _0810ACD8 @ =gStringVar1 - bl CopyItemName - ldr r0, _0810ACDC @ =gStringVar2 - movs r2, 0x10 - ldrsh r1, [r7, r2] - movs r2, 0 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - ldr r4, _0810ACE0 @ =gStringVar4 - ldr r1, _0810ACE4 @ =gUnknown_84163A7 - adds r0, r4, 0 - bl StringExpandPlaceholders - movs r0, 0x6 - movs r1, 0x3 - bl sub_810B9DC - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - str r1, [sp] - str r6, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - str r1, [sp, 0xC] - str r6, [sp, 0x10] - movs r1, 0x2 - adds r2, r4, 0 - movs r3, 0 - bl sub_810B8F0 - mov r0, r9 - subs r0, 0x8 - add r0, r8 - ldr r1, _0810ACE8 @ =sub_8109F44 - str r1, [r0] - b _0810ACF8 - .align 2, 0 -_0810ACCC: .4byte gTasks+0x8 -_0810ACD0: .4byte gSpecialVar_ItemId -_0810ACD4: .4byte 0x0000ffff -_0810ACD8: .4byte gStringVar1 -_0810ACDC: .4byte gStringVar2 -_0810ACE0: .4byte gStringVar4 -_0810ACE4: .4byte gUnknown_84163A7 -_0810ACE8: .4byte sub_8109F44 -_0810ACEC: - ldr r2, _0810AD08 @ =gUnknown_84163BB - ldr r3, _0810AD0C @ =sub_810A1D0 - adds r0, r4, 0 - movs r1, 0x2 - bl DisplayItemMessageInBag -_0810ACF8: - add sp, 0x14 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810AD08: .4byte gUnknown_84163BB -_0810AD0C: .4byte sub_810A1D0 - thumb_func_end sub_810AC40 - - thumb_func_start UseRegisteredKeyItemOnField -UseRegisteredKeyItemOnField: @ 810AD10 - push {r4-r6,lr} - bl InUnionRoom - cmp r0, 0x1 - bne _0810AD1E - movs r0, 0 - b _0810ADA0 -_0810AD1E: - bl DismissMapNamePopup - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - ldr r4, _0810AD80 @ =gSaveBlock1Ptr - ldr r0, [r4] - ldr r5, _0810AD84 @ =0x00000296 - adds r1, r0, r5 - ldrh r0, [r1] - cmp r0, 0 - beq _0810AD98 - movs r1, 0x1 - bl CheckBagHasItem - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x1 - bne _0810AD90 - bl ScriptContext2_Enable - bl FreezeObjectEvents - bl sub_805C270 - bl sub_805C780 - ldr r2, _0810AD88 @ =gSpecialVar_ItemId - ldr r0, [r4] - adds r0, r5 - ldrh r1, [r0] - strh r1, [r2] - ldrh r0, [r0] - bl ItemId_GetFieldFunc - movs r1, 0x8 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0810AD8C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r6, [r1, 0xE] - b _0810AD9E - .align 2, 0 -_0810AD80: .4byte gSaveBlock1Ptr -_0810AD84: .4byte 0x00000296 -_0810AD88: .4byte gSpecialVar_ItemId -_0810AD8C: .4byte gTasks -_0810AD90: - ldr r0, [r4] - adds r0, r5 - movs r1, 0 - strh r1, [r0] -_0810AD98: - ldr r0, _0810ADA8 @ =gUnknown_81A77A0 - bl ScriptContext1_SetupScript -_0810AD9E: - movs r0, 0x1 -_0810ADA0: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0810ADA8: .4byte gUnknown_81A77A0 - thumb_func_end UseRegisteredKeyItemOnField - - thumb_func_start sub_810ADAC -sub_810ADAC: @ 810ADAC - push {lr} - ldr r0, _0810ADCC @ =gUnknown_203ACFC - ldrb r0, [r0, 0x4] - cmp r0, 0x6 - beq _0810ADC6 - cmp r0, 0x8 - beq _0810ADC6 - cmp r0, 0x7 - beq _0810ADC6 - cmp r0, 0x9 - beq _0810ADC6 - cmp r0, 0xA - bne _0810ADD0 -_0810ADC6: - movs r0, 0x1 - b _0810ADD2 - .align 2, 0 -_0810ADCC: .4byte gUnknown_203ACFC -_0810ADD0: - movs r0, 0 -_0810ADD2: - pop {r1} - bx r1 - thumb_func_end sub_810ADAC - - thumb_func_start sub_810ADD8 -sub_810ADD8: @ 810ADD8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r5, _0810AEBC @ =gUnknown_203AD2C - movs r0, 0xB2 - lsls r0, 1 - bl AllocZeroed - str r0, [r5] - ldr r4, _0810AEC0 @ =gSaveBlock1Ptr - ldr r1, [r4] - movs r2, 0xC4 - lsls r2, 2 - adds r1, r2 - movs r2, 0xA8 - bl memcpy - ldr r0, [r5] - adds r0, 0xA8 - ldr r1, [r4] - movs r3, 0xEE - lsls r3, 2 - adds r1, r3 - movs r2, 0x78 - bl memcpy - ldr r0, [r5] - movs r1, 0x90 - lsls r1, 1 - adds r0, r1 - ldr r1, [r4] - movs r2, 0x86 - lsls r2, 3 - adds r1, r2 - movs r2, 0x34 - bl memcpy - ldr r2, [r5] - ldr r0, [r4] - ldr r3, _0810AEC4 @ =0x00000296 - adds r0, r3 - ldrh r1, [r0] - movs r3, 0xB0 - lsls r3, 1 - adds r0, r2, r3 - strh r1, [r0] - ldr r1, _0810AEC8 @ =gUnknown_203ACFC - ldrh r0, [r1, 0x6] - adds r3, 0x2 - adds r2, r3 - strh r0, [r2] - movs r4, 0 - mov r8, r5 - movs r7, 0xAA - lsls r7, 1 - movs r0, 0xE - adds r0, r1 - mov r12, r0 - movs r6, 0xAD - lsls r6, 1 - adds r5, r1, 0 - adds r5, 0x8 -_0810AE54: - mov r1, r8 - ldr r2, [r1] - lsls r3, r4, 1 - adds r0, r2, r7 - adds r0, r3 - ldrh r1, [r5] - strh r1, [r0] - adds r2, r6 - adds r2, r3 - mov r3, r12 - ldrh r0, [r3] - strh r0, [r2] - movs r0, 0x2 - add r12, r0 - adds r5, 0x2 - adds r4, 0x1 - cmp r4, 0x2 - bls _0810AE54 - ldr r4, _0810AEC0 @ =gSaveBlock1Ptr - ldr r0, [r4] - movs r1, 0xC4 - lsls r1, 2 - adds r0, r1 - movs r1, 0x2A - bl ClearItemSlots - ldr r0, [r4] - movs r2, 0xEE - lsls r2, 2 - adds r0, r2 - movs r1, 0x1E - bl ClearItemSlots - ldr r0, [r4] - movs r3, 0x86 - lsls r3, 3 - adds r0, r3 - movs r1, 0xD - bl ClearItemSlots - ldr r0, [r4] - ldr r1, _0810AEC4 @ =0x00000296 - adds r0, r1 - movs r1, 0 - strh r1, [r0] - bl sub_81089BC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810AEBC: .4byte gUnknown_203AD2C -_0810AEC0: .4byte gSaveBlock1Ptr -_0810AEC4: .4byte 0x00000296 -_0810AEC8: .4byte gUnknown_203ACFC - thumb_func_end sub_810ADD8 - - thumb_func_start sub_810AECC -sub_810AECC: @ 810AECC - push {r4-r7,lr} - ldr r4, _0810AF64 @ =gSaveBlock1Ptr - ldr r0, [r4] - movs r1, 0xC4 - lsls r1, 2 - adds r0, r1 - ldr r5, _0810AF68 @ =gUnknown_203AD2C - ldr r1, [r5] - movs r2, 0xA8 - bl memcpy - ldr r0, [r4] - movs r2, 0xEE - lsls r2, 2 - adds r0, r2 - ldr r1, [r5] - adds r1, 0xA8 - movs r2, 0x78 - bl memcpy - ldr r0, [r4] - movs r3, 0x86 - lsls r3, 3 - adds r0, r3 - ldr r1, [r5] - movs r2, 0x90 - lsls r2, 1 - adds r1, r2 - movs r2, 0x34 - bl memcpy - ldr r1, [r4] - ldr r2, [r5] - movs r3, 0xB0 - lsls r3, 1 - adds r0, r2, r3 - ldrh r0, [r0] - ldr r3, _0810AF6C @ =0x00000296 - adds r1, r3 - strh r0, [r1] - ldr r1, _0810AF70 @ =gUnknown_203ACFC - movs r3, 0xB1 - lsls r3, 1 - adds r0, r2, r3 - ldrh r0, [r0] - strh r0, [r1, 0x6] - movs r4, 0 - mov r12, r5 - adds r3, r1, 0 - adds r3, 0x8 - mov r7, r12 - movs r6, 0xAA - lsls r6, 1 - movs r5, 0xAD - lsls r5, 1 -_0810AF3A: - lsls r2, r4, 1 - ldr r1, [r7] - adds r0, r1, r6 - adds r0, r2 - ldrh r0, [r0] - strh r0, [r3] - adds r1, r5 - adds r1, r2 - ldrh r0, [r1] - strh r0, [r3, 0x6] - adds r3, 0x2 - adds r4, 0x1 - cmp r4, 0x2 - bls _0810AF3A - mov r1, r12 - ldr r0, [r1] - bl Free - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810AF64: .4byte gSaveBlock1Ptr -_0810AF68: .4byte gUnknown_203AD2C -_0810AF6C: .4byte 0x00000296 -_0810AF70: .4byte gUnknown_203ACFC - thumb_func_end sub_810AECC - - thumb_func_start sub_810AF74 -sub_810AF74: @ 810AF74 - push {lr} - bl sub_810ADD8 - movs r0, 0xD - movs r1, 0x1 - bl AddBagItem - movs r0, 0x4 - movs r1, 0x1 - bl AddBagItem - ldr r2, _0810AF98 @ =SetCB2ToReshowScreenAfterMenu2 - movs r0, 0x6 - movs r1, 0 - bl GoToBagMenu - pop {r0} - bx r0 - .align 2, 0 -_0810AF98: .4byte SetCB2ToReshowScreenAfterMenu2 - thumb_func_end sub_810AF74 - thumb_func_start sub_810AF9C sub_810AF9C: @ 810AF9C push {r4-r7,lr} @@ -936,7 +84,7 @@ _0810B01C: movs r1, 0 movs r2, 0 bl DestroyListMenuTask - bl sub_810AECC + bl RestorePlayerBag bl sub_8108CB4 adds r0, r7, 0 subs r0, 0x8 @@ -1037,7 +185,7 @@ sub_810B108: @ 810B108 push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_810ADD8 + bl BackUpPlayerBag movs r0, 0xD movs r1, 0x1 bl AddBagItem @@ -1105,7 +253,7 @@ sub_810B180: @ 810B180 .align 2, 0 _0810B198: .4byte gMain _0810B19C: - bl sub_810AECC + bl RestorePlayerBag bl SetTeachyTvControllerModeToResume ldr r0, _0810B1C4 @ =gUnknown_203AD10 ldr r1, [r0] @@ -1307,7 +455,7 @@ _0810B344: movs r1, 0 movs r2, 0 bl DestroyListMenuTask - bl sub_810AECC + bl RestorePlayerBag bl sub_8108CB4 adds r0, r6, 0 subs r0, 0x8 @@ -1462,7 +610,7 @@ _0810B468: movs r1, 0 movs r2, 0 bl DestroyListMenuTask - bl sub_810AECC + bl RestorePlayerBag bl sub_8108CB4 adds r0, r7, 0 subs r0, 0x8 @@ -1578,7 +726,7 @@ _0810B564: movs r1, 0 movs r2, 0 bl DestroyListMenuTask - bl sub_810AECC + bl RestorePlayerBag ldr r1, _0810B5B0 @ =gItemUseCB ldr r0, _0810B5B4 @ =ItemUseCB_MedicineStep str r0, [r1] @@ -1713,7 +861,7 @@ _0810B68C: movs r1, 0 movs r2, 0 bl DestroyListMenuTask - bl sub_810AECC + bl RestorePlayerBag ldr r0, _0810B6D4 @ =gUnknown_203AD10 ldr r1, [r0] ldr r0, _0810B6D8 @ =PokeDude_InitTMCase diff --git a/data/strings.s b/data/strings.s index c572f6bc9..d25e28e94 100644 --- a/data/strings.s +++ b/data/strings.s @@ -596,15 +596,15 @@ gText_TheStrVar1CantBeHeldHere:: @ 8416374 .string "The {STR_VAR_1} can't be held\n" .string "here.$" -gUnknown_841638F:: @ 841638F +gText_DepositHowManyStrVars1:: @ 841638F .string "Deposit how many\n" .string "{STR_VAR_1}(s)?$" -gUnknown_84163A7:: @ 84163A7 +gText_DepositedStrVar2StrVar1s:: @ 84163A7 .string "Deposited {STR_VAR_2}\n" .string "{STR_VAR_1}(s).$" -gUnknown_84163BB:: @ 84163BB +gText_NoRoomToStoreItems:: @ 84163BB .string "There's no room to\n" .string "store items.$" diff --git a/include/event_scripts.h b/include/event_scripts.h index b5e355484..dcbe2c137 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -1195,4 +1195,6 @@ extern const u8 Text_1A5D31[]; extern const u8 Text_1A5D6E[]; extern const u8 Text_1A5DB1[]; +extern const u8 gUnknown_81A77A0[]; + #endif //GUARD_EVENT_SCRIPTS_H diff --git a/include/item_menu.h b/include/item_menu.h index 43159401a..d8257ccf1 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -37,7 +37,7 @@ void ItemMenu_SetExitCallback(void (*)(void)); void DisplayItemMessageInBag(u8 taskId, u8 fontId, const u8 * string, TaskFunc followUpFunc); void sub_810A1F8(u8 taskId); void sub_8107ECC(void); -void sub_810AF74(void); +void InitTutorialBag(void); void sub_8108DC8(u8 pocketId); void sub_81089F4(u8 pocketId); void GoToBagMenu(u8 menuType, u8 pocket, MainCallback callback); diff --git a/include/map_name_popup.h b/include/map_name_popup.h index c8ce02c30..a7c1234c6 100644 --- a/include/map_name_popup.h +++ b/include/map_name_popup.h @@ -4,5 +4,6 @@ #include "global.h" void CreateMapNamePopupIfNotAlreadyRunning(bool32 palIntoFadedBuffer); +void DismissMapNamePopup(void); #endif //GUARD_MAP_NAME_POPUP_H diff --git a/include/strings.h b/include/strings.h index 0d70d9e19..852e88a5c 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1049,5 +1049,8 @@ extern const u8 gText_PokeBalls2[]; extern const u8 gText_KeyItems2[]; extern const u8 gText_CloseBag[]; extern const u8 gText_CantWriteMailHere[]; +extern const u8 gText_DepositHowManyStrVars1[]; +extern const u8 gText_DepositedStrVar2StrVar1s[]; +extern const u8 gText_NoRoomToStoreItems[]; #endif //GUARD_STRINGS_H diff --git a/src/battle_controller_oak_old_man.c b/src/battle_controller_oak_old_man.c index 6ae50d058..a027808af 100644 --- a/src/battle_controller_oak_old_man.c +++ b/src/battle_controller_oak_old_man.c @@ -381,7 +381,7 @@ static void OpenBagAndChooseItem(void) if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) sub_8107ECC(); else - sub_810AF74(); + InitTutorialBag(); } } diff --git a/src/item_menu.c b/src/item_menu.c index b73d9f1a8..8efb9cd6f 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -4,15 +4,19 @@ #include "battle_controllers.h" #include "berry_pouch.h" #include "decompress.h" +#include "event_scripts.h" +#include "event_object_80688E4.h" #include "field_player_avatar.h" #include "graphics.h" #include "help_system.h" #include "item.h" #include "item_menu.h" #include "item_menu_icons.h" +#include "item_use.h" #include "link.h" #include "list_menu.h" #include "mail_data.h" +#include "map_name_popup.h" #include "menu.h" #include "menu_indicators.h" #include "money.h" @@ -21,6 +25,8 @@ #include "party_menu.h" #include "pokemon_storage_system.h" #include "scanline_effect.h" +#include "script.h" +#include "shop.h" #include "strings.h" #include "tm_case.h" #include "constants/items.h" @@ -43,6 +49,17 @@ struct BagMenuAlloc u8 data[4]; }; +struct BagSlots +{ + struct ItemSlot bagPocket_Items[BAG_ITEMS_COUNT]; + struct ItemSlot bagPocket_KeyItems[BAG_KEYITEMS_COUNT]; + struct ItemSlot bagPocket_PokeBalls[BAG_POKEBALLS_COUNT]; + u16 itemsAbove[3]; + u16 cursorPos[3]; + u16 registeredItem; + u16 pocket; +}; + EWRAM_DATA struct BagStruct gUnknown_203ACFC = {}; EWRAM_DATA struct BagMenuAlloc * gUnknown_203AD10 = NULL; EWRAM_DATA void * gUnknown_203AD14 = NULL; @@ -51,6 +68,7 @@ EWRAM_DATA u8 (*gUnknown_203AD1C)[19] = NULL; EWRAM_DATA u8 gUnknown_203AD20[4] = {}; EWRAM_DATA const u8 *gUnknown_203AD24 = NULL; EWRAM_DATA u8 gUnknown_203AD28 = 0; +EWRAM_DATA struct BagSlots * gUnknown_203AD2C = NULL; void sub_8107F10(void); bool8 sub_8107F3C(void); @@ -124,7 +142,11 @@ void sub_810A770(u8 taskId); void sub_810A834(s32 price); void sub_810A85C(u8 taskId); void sub_810A940(u8 taskId); +void sub_810A9D4(u8 taskId); +void sub_810AAF4(u8 taskId); void sub_810AB40(u8 taskId); +void sub_810AB88(u8 taskId); +void sub_810AC40(u8 taskId); bool8 sub_810ADAC(void); void sub_810AF9C(u8 taskId); void sub_810B1D4(u8 taskId); @@ -1855,3 +1877,219 @@ void sub_810A834(s32 amount) { PrintMoneyAmount(sub_810BAD8(0), 56, 10, amount, 0); } + +void sub_810A85C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) + { + sub_81097E4(data[8], 2); + sub_810A834(itemid_get_market_price(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1])) / 2 * data[8]); + } + else if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + sub_810BA3C(0); + PutWindowTilemap(0); + ScheduleBgCopyTilemapToVram(0); + sub_8108978(); + sub_810A690(taskId); + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_810BA3C(0); + sub_810BA3C(2); + sub_810BA9C(5); + PutWindowTilemap(2); + PutWindowTilemap(0); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + sub_8108978(); + bag_menu_print_cursor_(data[0], 1); + sub_810910C(taskId); + } +} + +void sub_810A940(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + PutWindowTilemap(0); + ScheduleBgCopyTilemapToVram(0); + CopyItemName(gSpecialVar_ItemId, gStringVar1); + ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); + StringExpandPlaceholders(gStringVar4, gText_TurnedOverItemsWorthYen); + DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A9D4); +} + +void sub_810A9D4(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + PlaySE(SE_SHOP); + RemoveBagItem(gSpecialVar_ItemId, data[8]); + AddMoney(&gSaveBlock1Ptr->money, itemid_get_market_price(gSpecialVar_ItemId) / 2 * data[8]); + RecordItemPurchase(gSpecialVar_ItemId, data[8], 2); + DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + sub_8108DC8(gUnknown_203ACFC.pocket); + sub_81089F4(gUnknown_203ACFC.pocket); + gUnknown_203AD10->field_05_6 = 1; + sub_810842C(gUnknown_203ACFC.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + bag_menu_print_cursor_(data[0], 2); + sub_810BB74(sub_810BAD8(2)); + PrintMoneyAmountInMoneyBox(sub_810BAD8(2), GetMoney(&gSaveBlock1Ptr->money), 0); + gTasks[taskId].func = sub_810AAF4; +} + +void sub_810AAF4(u8 taskId) +{ + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_810BA3C(2); + PutWindowTilemap(2); + gUnknown_203AD10->field_05_6 = 0; + sub_810A1F8(taskId); + } +} + +void sub_810AB40(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + data[8] = 1; + if (data[2] == 1) + { + sub_810AC40(taskId); + } + else + { + sub_810971C(data[1], gText_DepositHowManyStrVars1); + gTasks[taskId].func = sub_810AB88; + } +} + +void sub_810AB88(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) + { + sub_81097E4(data[8], 3); + } + else if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + ClearWindowTilemap(sub_810BAD8(6)); + sub_810BA3C(6); + sub_810BA3C(0); + ScheduleBgCopyTilemapToVram(0); + sub_8108978(); + sub_810AC40(taskId); + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_810BA3C(6); + sub_810BA3C(0); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + bag_menu_print_cursor_(data[0], 1); + sub_8108978(); + sub_810910C(taskId); + } +} + +void sub_810AC40(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (AddPCItem(gSpecialVar_ItemId, data[8]) == TRUE) + { + ItemUse_SetQuestLogEvent(28, 0, gSpecialVar_ItemId, 0xFFFF); + CopyItemName(gSpecialVar_ItemId, gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gText_DepositedStrVar2StrVar1s); + sub_810B8F0(sub_810B9DC(6, 3), 2, gStringVar4, 0, 2, 1, 0, 0, 1); + gTasks[taskId].func = sub_8109F44; + } + else + { + DisplayItemMessageInBag(taskId, 2, gText_NoRoomToStoreItems, sub_810A1D0); + } +} + +bool8 UseRegisteredKeyItemOnField(void) +{ + u8 taskId; + if (InUnionRoom() == TRUE) + return FALSE; + DismissMapNamePopup(); + ChangeBgY(0, 0, 0); + if (gSaveBlock1Ptr->registeredItem != ITEM_NONE) + { + if (CheckBagHasItem(gSaveBlock1Ptr->registeredItem, 1) == TRUE) + { + ScriptContext2_Enable(); + FreezeObjectEvents(); + sub_805C270(); + sub_805C780(); + gSpecialVar_ItemId = gSaveBlock1Ptr->registeredItem; + taskId = CreateTask(ItemId_GetFieldFunc(gSaveBlock1Ptr->registeredItem), 8); + gTasks[taskId].data[3] = 1; + return TRUE; + } + gSaveBlock1Ptr->registeredItem = ITEM_NONE; + } + ScriptContext1_SetupScript(gUnknown_81A77A0); + return TRUE; +} + +bool8 sub_810ADAC(void) +{ + if (gUnknown_203ACFC.location == 6 || gUnknown_203ACFC.location == 8 || gUnknown_203ACFC.location == 7 || gUnknown_203ACFC.location == 9 || gUnknown_203ACFC.location == 10) + return TRUE; + return FALSE; +} + +void BackUpPlayerBag(void) +{ + u32 i; + gUnknown_203AD2C = AllocZeroed(sizeof(struct BagSlots)); + memcpy(gUnknown_203AD2C->bagPocket_Items, gSaveBlock1Ptr->bagPocket_Items, BAG_ITEMS_COUNT * sizeof(struct ItemSlot)); + memcpy(gUnknown_203AD2C->bagPocket_KeyItems, gSaveBlock1Ptr->bagPocket_KeyItems, BAG_KEYITEMS_COUNT * sizeof(struct ItemSlot)); + memcpy(gUnknown_203AD2C->bagPocket_PokeBalls, gSaveBlock1Ptr->bagPocket_PokeBalls, BAG_POKEBALLS_COUNT * sizeof(struct ItemSlot)); + gUnknown_203AD2C->registeredItem = gSaveBlock1Ptr->registeredItem; + gUnknown_203AD2C->pocket = gUnknown_203ACFC.pocket; + for (i = 0; i < 3; i++) + { + gUnknown_203AD2C->itemsAbove[i] = gUnknown_203ACFC.itemsAbove[i]; + gUnknown_203AD2C->cursorPos[i] = gUnknown_203ACFC.cursorPos[i]; + } + ClearItemSlots(gSaveBlock1Ptr->bagPocket_Items, BAG_ITEMS_COUNT); + ClearItemSlots(gSaveBlock1Ptr->bagPocket_KeyItems, BAG_KEYITEMS_COUNT); + ClearItemSlots(gSaveBlock1Ptr->bagPocket_PokeBalls, BAG_POKEBALLS_COUNT); + gSaveBlock1Ptr->registeredItem = ITEM_NONE; + sub_81089BC(); +} + +void RestorePlayerBag(void) +{ + u32 i; + memcpy(gSaveBlock1Ptr->bagPocket_Items, gUnknown_203AD2C->bagPocket_Items, BAG_ITEMS_COUNT * sizeof(struct ItemSlot)); + memcpy(gSaveBlock1Ptr->bagPocket_KeyItems, gUnknown_203AD2C->bagPocket_KeyItems, BAG_KEYITEMS_COUNT * sizeof(struct ItemSlot)); + memcpy(gSaveBlock1Ptr->bagPocket_PokeBalls, gUnknown_203AD2C->bagPocket_PokeBalls, BAG_POKEBALLS_COUNT * sizeof(struct ItemSlot)); + gSaveBlock1Ptr->registeredItem = gUnknown_203AD2C->registeredItem; + gUnknown_203ACFC.pocket = gUnknown_203AD2C->pocket; + for (i = 0; i < 3; i++) + { + gUnknown_203ACFC.itemsAbove[i] = gUnknown_203AD2C->itemsAbove[i]; + gUnknown_203ACFC.cursorPos[i] = gUnknown_203AD2C->cursorPos[i]; + } + Free(gUnknown_203AD2C); +} + +void InitTutorialBag(void) +{ + BackUpPlayerBag(); + AddBagItem(ITEM_POTION, 1); + AddBagItem(ITEM_POKE_BALL, 1); + GoToBagMenu(6, 0, SetCB2ToReshowScreenAfterMenu2); +} From a698f43f26f16fed3e7d0bd377b2ffac9b52e78d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 19 Jan 2020 11:04:37 -0500 Subject: [PATCH 18/22] Finish dism of item_menu --- asm/item_menu.s | 892 ------------------------------------------------ ld_script.txt | 1 - src/item_menu.c | 297 ++++++++++++++++ 3 files changed, 297 insertions(+), 893 deletions(-) delete mode 100644 asm/item_menu.s diff --git a/asm/item_menu.s b/asm/item_menu.s deleted file mode 100644 index 3bdc40756..000000000 --- a/asm/item_menu.s +++ /dev/null @@ -1,892 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_810AF9C -sub_810AF9C: @ 810AF9C - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r6, r0, 3 - ldr r7, _0810AFCC @ =gTasks+0x8 - adds r5, r6, r7 - ldr r0, _0810AFD0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0810B06A - movs r0, 0x10 - ldrsh r1, [r5, r0] - cmp r1, 0xCC - beq _0810AFE4 - cmp r1, 0xCC - bgt _0810AFD4 - cmp r1, 0x66 - beq _0810AFE4 - b _0810B064 - .align 2, 0 -_0810AFCC: .4byte gTasks+0x8 -_0810AFD0: .4byte gPaletteFade -_0810AFD4: - movs r0, 0x99 - lsls r0, 1 - cmp r1, r0 - beq _0810AFF6 - adds r0, 0x66 - cmp r1, r0 - beq _0810B01C - b _0810B064 -_0810AFE4: - movs r0, 0xF6 - bl PlaySE - adds r0, r4, 0 - movs r1, 0x1 - movs r2, 0 - bl sub_81091D0 - b _0810B064 -_0810AFF6: - movs r0, 0x5 - bl PlaySE - ldrb r0, [r5] - movs r1, 0x2 - bl bag_menu_print_cursor_ - movs r0, 0x1 - bl sub_8109140 - ldr r1, _0810B018 @ =gSpecialVar_ItemId - movs r0, 0x4 - strh r0, [r1] - adds r0, r4, 0 - bl sub_8109890 - b _0810B064 - .align 2, 0 -_0810B018: .4byte gSpecialVar_ItemId -_0810B01C: - movs r0, 0x5 - bl PlaySE - movs r0, 0xA - bl sub_810BA3C - movs r0, 0x6 - bl sub_810BA3C - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x1 - bl CopyWindowToVram - ldrb r0, [r5] - movs r1, 0 - movs r2, 0 - bl DestroyListMenuTask - bl RestorePlayerBag - bl sub_8108CB4 - adds r0, r7, 0 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _0810B060 @ =sub_810B070 - str r1, [r0] - b _0810B06A - .align 2, 0 -_0810B060: .4byte sub_810B070 -_0810B064: - ldrh r0, [r5, 0x10] - adds r0, 0x1 - strh r0, [r5, 0x10] -_0810B06A: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_810AF9C - - thumb_func_start sub_810B070 -sub_810B070: @ 810B070 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - negs r0, r0 - movs r1, 0x2 - negs r1, r1 - movs r2, 0 - str r2, [sp] - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _0810B0A4 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0810B0A8 @ =sub_810B0AC - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0810B0A4: .4byte gTasks -_0810B0A8: .4byte sub_810B0AC - thumb_func_end sub_810B070 - - thumb_func_start sub_810B0AC -sub_810B0AC: @ 810B0AC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0810B0DC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0810B0FE - ldr r0, _0810B0E0 @ =sub_8108CFC - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0810B0FE - ldr r0, _0810B0E4 @ =gUnknown_203AD10 - ldr r0, [r0] - ldr r0, [r0] - cmp r0, 0 - beq _0810B0E8 - bl SetMainCallback2 - b _0810B0F0 - .align 2, 0 -_0810B0DC: .4byte gPaletteFade -_0810B0E0: .4byte sub_8108CFC -_0810B0E4: .4byte gUnknown_203AD10 -_0810B0E8: - ldr r0, _0810B104 @ =gUnknown_203ACFC - ldr r0, [r0] - bl SetMainCallback2 -_0810B0F0: - bl sub_8108978 - bl sub_8108B04 - adds r0, r4, 0 - bl DestroyTask -_0810B0FE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0810B104: .4byte gUnknown_203ACFC - thumb_func_end sub_810B0AC - - thumb_func_start sub_810B108 -sub_810B108: @ 810B108 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl BackUpPlayerBag - movs r0, 0xD - movs r1, 0x1 - bl AddBagItem - movs r0, 0xE - movs r1, 0x1 - bl AddBagItem - movs r0, 0xB7 - lsls r0, 1 - movs r1, 0x1 - bl AddBagItem - movs r0, 0xB6 - lsls r0, 1 - movs r1, 0x1 - bl AddBagItem - movs r0, 0x4 - movs r1, 0x5 - bl AddBagItem - movs r0, 0x3 - movs r1, 0x1 - bl AddBagItem - movs r0, 0x8 - movs r1, 0x1 - bl AddBagItem - cmp r4, 0x7 - beq _0810B160 - cmp r4, 0x8 - beq _0810B16C - ldr r2, _0810B15C @ =CB2_ReturnToTeachyTV - adds r0, r4, 0 - b _0810B170 - .align 2, 0 -_0810B15C: .4byte CB2_ReturnToTeachyTV -_0810B160: - ldr r2, _0810B168 @ =SetCB2ToReshowScreenAfterMenu2 - movs r0, 0x7 - b _0810B170 - .align 2, 0 -_0810B168: .4byte SetCB2ToReshowScreenAfterMenu2 -_0810B16C: - ldr r2, _0810B17C @ =SetCB2ToReshowScreenAfterMenu2 - movs r0, 0x8 -_0810B170: - movs r1, 0 - bl GoToBagMenu - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0810B17C: .4byte SetCB2ToReshowScreenAfterMenu2 - thumb_func_end sub_810B108 - - thumb_func_start sub_810B180 -sub_810B180: @ 810B180 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0810B198 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _0810B19C - movs r0, 0 - b _0810B1BC - .align 2, 0 -_0810B198: .4byte gMain -_0810B19C: - bl RestorePlayerBag - bl SetTeachyTvControllerModeToResume - ldr r0, _0810B1C4 @ =gUnknown_203AD10 - ldr r1, [r0] - ldr r0, _0810B1C8 @ =CB2_ReturnToTeachyTV - str r0, [r1] - ldr r1, _0810B1CC @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0810B1D0 @ =sub_810B070 - str r1, [r0] - movs r0, 0x1 -_0810B1BC: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0810B1C4: .4byte gUnknown_203AD10 -_0810B1C8: .4byte CB2_ReturnToTeachyTV -_0810B1CC: .4byte gTasks -_0810B1D0: .4byte sub_810B070 - thumb_func_end sub_810B180 - - thumb_func_start sub_810B1D4 -sub_810B1D4: @ 810B1D4 - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r5, r0, 3 - ldr r6, _0810B220 @ =gTasks+0x8 - adds r7, r5, r6 - ldr r0, _0810B224 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0810B1F2 - b _0810B372 -_0810B1F2: - adds r0, r4, 0 - bl sub_810B180 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0810B202 - b _0810B372 -_0810B202: - movs r0, 0x10 - ldrsh r1, [r7, r0] - movs r0, 0xCC - lsls r0, 1 - cmp r1, r0 - beq _0810B29E - cmp r1, r0 - bgt _0810B232 - cmp r1, 0xCC - beq _0810B266 - cmp r1, 0xCC - bgt _0810B228 - cmp r1, 0x66 - beq _0810B254 - b _0810B36C - .align 2, 0 -_0810B220: .4byte gTasks+0x8 -_0810B224: .4byte gPaletteFade -_0810B228: - movs r0, 0x99 - lsls r0, 1 - cmp r1, r0 - beq _0810B290 - b _0810B36C -_0810B232: - movs r0, 0x99 - lsls r0, 2 - cmp r1, r0 - beq _0810B32C - cmp r1, r0 - bgt _0810B246 - subs r0, 0x66 - cmp r1, r0 - beq _0810B32C - b _0810B36C -_0810B246: - ldr r0, _0810B250 @ =0x000002ca - cmp r1, r0 - bne _0810B24E - b _0810B344 -_0810B24E: - b _0810B36C - .align 2, 0 -_0810B250: .4byte 0x000002ca -_0810B254: - movs r0, 0xF6 - bl PlaySE - adds r0, r4, 0 - movs r1, 0x1 - movs r2, 0 - bl sub_81091D0 - b _0810B36C -_0810B266: - movs r0, 0x5 - bl PlaySE - ldrb r0, [r7] - movs r1, 0x2 - bl bag_menu_print_cursor_ - movs r0, 0x1 - bl sub_8109140 - ldr r1, _0810B28C @ =gSpecialVar_ItemId - movs r2, 0xB7 - lsls r2, 1 - adds r0, r2, 0 - strh r0, [r1] - adds r0, r4, 0 - bl sub_8109890 - b _0810B36C - .align 2, 0 -_0810B28C: .4byte gSpecialVar_ItemId -_0810B290: - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - bl Menu_MoveCursorNoWrapAround - b _0810B36C -_0810B29E: - movs r0, 0x5 - bl PlaySE - ldr r0, _0810B318 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r1, _0810B31C @ =gSpecialVar_ItemId - ldrh r1, [r1] - ldr r2, _0810B320 @ =0x00000296 - adds r0, r2 - strh r1, [r0] - movs r0, 0xA - bl sub_810BA3C - movs r0, 0x6 - bl sub_810BA3C - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - ldrb r0, [r7] - ldr r4, _0810B324 @ =gUnknown_203ACFC - ldrh r2, [r4, 0x6] - lsls r2, 1 - adds r5, r4, 0 - adds r5, 0xE - adds r1, r2, r5 - adds r6, r4, 0 - adds r6, 0x8 - adds r2, r6 - bl DestroyListMenuTask - ldrb r0, [r4, 0x6] - bl sub_810842C - ldr r0, _0810B328 @ =gMultiuseListMenuTemplate - ldrh r2, [r4, 0x6] - lsls r2, 1 - adds r5, r2, r5 - ldrh r1, [r5] - adds r2, r6 - ldrh r2, [r2] - bl ListMenuInit - lsls r0, 24 - lsrs r0, 24 - strh r0, [r7] - movs r0, 0 - bl sub_8109140 - ldrb r0, [r7] - movs r1, 0x1 - bl bag_menu_print_cursor_ - movs r0, 0 - movs r1, 0x1 - bl CopyWindowToVram - b _0810B36C - .align 2, 0 -_0810B318: .4byte gSaveBlock1Ptr -_0810B31C: .4byte gSpecialVar_ItemId -_0810B320: .4byte 0x00000296 -_0810B324: .4byte gUnknown_203ACFC -_0810B328: .4byte gMultiuseListMenuTemplate -_0810B32C: - ldr r1, _0810B340 @ =gMain - movs r0, 0 - strh r0, [r1, 0x2E] - movs r0, 0x80 - strh r0, [r1, 0x30] - ldrb r0, [r7] - bl ListMenu_ProcessInput - b _0810B36C - .align 2, 0 -_0810B340: .4byte gMain -_0810B344: - movs r0, 0x5 - bl PlaySE - ldrb r0, [r7] - movs r1, 0 - movs r2, 0 - bl DestroyListMenuTask - bl RestorePlayerBag - bl sub_8108CB4 - adds r0, r6, 0 - subs r0, 0x8 - adds r0, r5, r0 - ldr r1, _0810B368 @ =sub_810B070 - str r1, [r0] - b _0810B372 - .align 2, 0 -_0810B368: .4byte sub_810B070 -_0810B36C: - ldrh r0, [r7, 0x10] - adds r0, 0x1 - strh r0, [r7, 0x10] -_0810B372: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_810B1D4 - - thumb_func_start sub_810B378 -sub_810B378: @ 810B378 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r6, r0, 3 - ldr r7, _0810B3B0 @ =gTasks+0x8 - adds r4, r6, r7 - ldr r0, _0810B3B4 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0810B396 - b _0810B4B6 -_0810B396: - adds r0, r5, 0 - bl sub_810B180 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0810B3B8 - bl FreeRestoreBattleData - bl LoadPlayerParty - b _0810B4B6 - .align 2, 0 -_0810B3B0: .4byte gTasks+0x8 -_0810B3B4: .4byte gPaletteFade -_0810B3B8: - movs r0, 0x10 - ldrsh r1, [r4, r0] - movs r0, 0xCC - lsls r0, 1 - cmp r1, r0 - beq _0810B41A - cmp r1, r0 - bgt _0810B3E0 - cmp r1, 0xCC - beq _0810B408 - cmp r1, 0xCC - bgt _0810B3D6 - cmp r1, 0x66 - beq _0810B408 - b _0810B4B0 -_0810B3D6: - movs r0, 0x99 - lsls r0, 1 - cmp r1, r0 - beq _0810B41A - b _0810B4B0 -_0810B3E0: - movs r0, 0x99 - lsls r0, 2 - cmp r1, r0 - beq _0810B428 - cmp r1, r0 - bgt _0810B3F4 - subs r0, 0x66 - cmp r1, r0 - beq _0810B428 - b _0810B4B0 -_0810B3F4: - ldr r0, _0810B404 @ =0x000002ca - cmp r1, r0 - beq _0810B440 - adds r0, 0x66 - cmp r1, r0 - beq _0810B468 - b _0810B4B0 - .align 2, 0 -_0810B404: .4byte 0x000002ca -_0810B408: - movs r0, 0xF6 - bl PlaySE - adds r0, r5, 0 - movs r1, 0x1 - movs r2, 0 - bl sub_81091D0 - b _0810B4B0 -_0810B41A: - ldr r1, _0810B424 @ =gMain - movs r0, 0 - strh r0, [r1, 0x2E] - movs r0, 0x80 - b _0810B430 - .align 2, 0 -_0810B424: .4byte gMain -_0810B428: - ldr r1, _0810B43C @ =gMain - movs r0, 0 - strh r0, [r1, 0x2E] - movs r0, 0x40 -_0810B430: - strh r0, [r1, 0x30] - ldrb r0, [r4] - bl ListMenu_ProcessInput - b _0810B4B0 - .align 2, 0 -_0810B43C: .4byte gMain -_0810B440: - movs r0, 0x5 - bl PlaySE - ldrb r0, [r4] - movs r1, 0x2 - bl bag_menu_print_cursor_ - movs r0, 0x1 - bl sub_8109140 - ldr r1, _0810B464 @ =gSpecialVar_ItemId - movs r0, 0x4 - strh r0, [r1] - adds r0, r5, 0 - bl sub_8109890 - b _0810B4B0 - .align 2, 0 -_0810B464: .4byte gSpecialVar_ItemId -_0810B468: - movs r0, 0x5 - bl PlaySE - movs r0, 0xA - bl sub_810BA3C - movs r0, 0x6 - bl sub_810BA3C - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x1 - bl CopyWindowToVram - ldrb r0, [r4] - movs r1, 0 - movs r2, 0 - bl DestroyListMenuTask - bl RestorePlayerBag - bl sub_8108CB4 - adds r0, r7, 0 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _0810B4AC @ =sub_810B070 - str r1, [r0] - b _0810B4B6 - .align 2, 0 -_0810B4AC: .4byte sub_810B070 -_0810B4B0: - ldrh r0, [r4, 0x10] - adds r0, 0x1 - strh r0, [r4, 0x10] -_0810B4B6: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_810B378 - - thumb_func_start sub_810B4BC -sub_810B4BC: @ 810B4BC - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - mov r8, r0 - ldr r0, _0810B504 @ =gTasks+0x8 - mov r9, r0 - mov r5, r8 - add r5, r9 - ldr r0, _0810B508 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r7, 0x80 - adds r0, r7, 0 - ands r0, r1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0 - bne _0810B5C6 - adds r0, r4, 0 - bl sub_810B180 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0810B50C - bl FreeRestoreBattleData - bl LoadPlayerParty - b _0810B5C6 - .align 2, 0 -_0810B504: .4byte gTasks+0x8 -_0810B508: .4byte gPaletteFade -_0810B50C: - movs r0, 0x10 - ldrsh r1, [r5, r0] - cmp r1, 0xCC - beq _0810B53C - cmp r1, 0xCC - bgt _0810B51E - cmp r1, 0x66 - beq _0810B528 - b _0810B5C0 -_0810B51E: - movs r0, 0x99 - lsls r0, 1 - cmp r1, r0 - beq _0810B564 - b _0810B5C0 -_0810B528: - ldr r0, _0810B538 @ =gMain - strh r6, [r0, 0x2E] - strh r7, [r0, 0x30] - ldrb r0, [r5] - bl ListMenu_ProcessInput - b _0810B5C0 - .align 2, 0 -_0810B538: .4byte gMain -_0810B53C: - movs r0, 0x5 - bl PlaySE - ldrb r0, [r5] - movs r1, 0x2 - bl bag_menu_print_cursor_ - movs r0, 0x1 - bl sub_8109140 - ldr r1, _0810B560 @ =gSpecialVar_ItemId - movs r0, 0xE - strh r0, [r1] - adds r0, r4, 0 - bl sub_8109890 - b _0810B5C0 - .align 2, 0 -_0810B560: .4byte gSpecialVar_ItemId -_0810B564: - movs r0, 0x5 - bl PlaySE - movs r0, 0xA - bl sub_810BA3C - movs r0, 0x6 - bl sub_810BA3C - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x1 - bl CopyWindowToVram - ldrb r0, [r5] - movs r1, 0 - movs r2, 0 - bl DestroyListMenuTask - bl RestorePlayerBag - ldr r1, _0810B5B0 @ =gItemUseCB - ldr r0, _0810B5B4 @ =ItemUseCB_MedicineStep - str r0, [r1] - ldr r0, _0810B5B8 @ =ChooseMonForInBattleItem - bl ItemMenu_SetExitCallback - mov r0, r9 - subs r0, 0x8 - add r0, r8 - ldr r1, _0810B5BC @ =sub_810B070 - str r1, [r0] - b _0810B5C6 - .align 2, 0 -_0810B5B0: .4byte gItemUseCB -_0810B5B4: .4byte ItemUseCB_MedicineStep -_0810B5B8: .4byte ChooseMonForInBattleItem -_0810B5BC: .4byte sub_810B070 -_0810B5C0: - ldrh r0, [r5, 0x10] - adds r0, 0x1 - strh r0, [r5, 0x10] -_0810B5C6: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_810B4BC - - thumb_func_start sub_810B5D4 -sub_810B5D4: @ 810B5D4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - mov r8, r0 - ldr r0, _0810B624 @ =gTasks+0x8 - mov r9, r0 - mov r6, r8 - add r6, r9 - ldr r0, _0810B628 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r7, 0x80 - adds r0, r7, 0 - ands r0, r1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _0810B6E6 - adds r0, r4, 0 - bl sub_810B180 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0810B6E6 - movs r2, 0x10 - ldrsh r1, [r6, r2] - cmp r1, 0xCC - beq _0810B64E - cmp r1, 0xCC - bgt _0810B62C - cmp r1, 0x66 - beq _0810B63C - b _0810B6E0 - .align 2, 0 -_0810B624: .4byte gTasks+0x8 -_0810B628: .4byte gPaletteFade -_0810B62C: - movs r0, 0x99 - lsls r0, 1 - cmp r1, r0 - beq _0810B660 - adds r0, 0x66 - cmp r1, r0 - beq _0810B68C - b _0810B6E0 -_0810B63C: - movs r0, 0xF6 - bl PlaySE - adds r0, r4, 0 - movs r1, 0x1 - movs r2, 0 - bl sub_81091D0 - b _0810B6E0 -_0810B64E: - ldr r0, _0810B65C @ =gMain - strh r5, [r0, 0x2E] - strh r7, [r0, 0x30] - ldrb r0, [r6] - bl ListMenu_ProcessInput - b _0810B6E0 - .align 2, 0 -_0810B65C: .4byte gMain -_0810B660: - movs r0, 0x5 - bl PlaySE - ldrb r0, [r6] - movs r1, 0x2 - bl bag_menu_print_cursor_ - movs r0, 0x1 - bl sub_8109140 - ldr r1, _0810B688 @ =gSpecialVar_ItemId - movs r2, 0xB6 - lsls r2, 1 - adds r0, r2, 0 - strh r0, [r1] - adds r0, r4, 0 - bl sub_8109890 - b _0810B6E0 - .align 2, 0 -_0810B688: .4byte gSpecialVar_ItemId -_0810B68C: - movs r0, 0x5 - bl PlaySE - movs r0, 0xA - bl sub_810BA3C - movs r0, 0x6 - bl sub_810BA3C - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x1 - bl CopyWindowToVram - ldrb r0, [r6] - movs r1, 0 - movs r2, 0 - bl DestroyListMenuTask - bl RestorePlayerBag - ldr r0, _0810B6D4 @ =gUnknown_203AD10 - ldr r1, [r0] - ldr r0, _0810B6D8 @ =PokeDude_InitTMCase - str r0, [r1] - mov r0, r9 - subs r0, 0x8 - add r0, r8 - ldr r1, _0810B6DC @ =sub_810B070 - str r1, [r0] - b _0810B6E6 - .align 2, 0 -_0810B6D4: .4byte gUnknown_203AD10 -_0810B6D8: .4byte PokeDude_InitTMCase -_0810B6DC: .4byte sub_810B070 -_0810B6E0: - ldrh r0, [r6, 0x10] - adds r0, 0x1 - strh r0, [r6, 0x10] -_0810B6E6: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_810B5D4 - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 86b2448db..016793dc9 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -233,7 +233,6 @@ SECTIONS { asm/pokedex_screen.o(.text); src/list_menu.o(.text); src/item_menu.o(.text); - asm/item_menu.o(.text); src/save_location.o(.text); src/bag.o(.text); src/trainer_pokemon_sprites.o(.text); diff --git a/src/item_menu.c b/src/item_menu.c index 8efb9cd6f..a2a6f865b 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -15,6 +15,7 @@ #include "item_use.h" #include "link.h" #include "list_menu.h" +#include "load_save.h" #include "mail_data.h" #include "map_name_popup.h" #include "menu.h" @@ -28,6 +29,7 @@ #include "script.h" #include "shop.h" #include "strings.h" +#include "teachy_tv.h" #include "tm_case.h" #include "constants/items.h" #include "constants/songs.h" @@ -149,6 +151,8 @@ void sub_810AB88(u8 taskId); void sub_810AC40(u8 taskId); bool8 sub_810ADAC(void); void sub_810AF9C(u8 taskId); +void sub_810B070(u8 taskId); +void sub_810B0AC(u8 taskId); void sub_810B1D4(u8 taskId); void sub_810B378(u8 taskId); void sub_810B4BC(u8 taskId); @@ -2093,3 +2097,296 @@ void InitTutorialBag(void) AddBagItem(ITEM_POKE_BALL, 1); GoToBagMenu(6, 0, SetCB2ToReshowScreenAfterMenu2); } + +void sub_810AF9C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (!gPaletteFade.active) + { + switch (data[8]) + { + case 102: + case 204: + PlaySE(SE_BAG2); + sub_81091D0(taskId, 1, FALSE); + break; + case 306: + PlaySE(SE_SELECT); + bag_menu_print_cursor_(data[0], 2); + sub_8109140(1); + gSpecialVar_ItemId = ITEM_POKE_BALL; + sub_8109890(taskId); + break; + case 408: + PlaySE(SE_SELECT); + sub_810BA3C(10); + sub_810BA3C(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + CopyWindowToVram(0, 1); + DestroyListMenuTask(data[0], NULL, NULL); + RestorePlayerBag(); + sub_8108CB4(); + gTasks[taskId].func = sub_810B070; + return; + } + data[8]++; + } +} + +void sub_810B070(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); + gTasks[taskId].func = sub_810B0AC; +} + +void sub_810B0AC(u8 taskId) +{ + if (!gPaletteFade.active && FuncIsActiveTask(sub_8108CFC) != TRUE) + { + if (gUnknown_203AD10->exitCB != NULL) + SetMainCallback2(gUnknown_203AD10->exitCB); + else + SetMainCallback2(gUnknown_203ACFC.bagCallback); + sub_8108978(); + sub_8108B04(); + DestroyTask(taskId); + } +} + +void sub_810B108(u8 a0) +{ + MainCallback cb2; + u8 location; + BackUpPlayerBag(); + AddBagItem(ITEM_POTION, 1); + AddBagItem(ITEM_ANTIDOTE, 1); + AddBagItem(ITEM_TEACHY_TV, 1); + AddBagItem(ITEM_TM_CASE, 1); + AddBagItem(ITEM_POKE_BALL, 5); + AddBagItem(ITEM_GREAT_BALL, 1); + AddBagItem(ITEM_NEST_BALL, 1); + switch (a0) + { + default: + cb2 = CB2_ReturnToTeachyTV; + location = a0; + break; + case 7: + cb2 = SetCB2ToReshowScreenAfterMenu2; + location = 7; + break; + case 8: + cb2 = SetCB2ToReshowScreenAfterMenu2; + location = 8; + break; + } + GoToBagMenu(location, POCKET_ITEMS - 1, cb2); +} + +bool8 sub_810B180(u8 taskId) +{ + if (JOY_NEW(B_BUTTON)) + { + RestorePlayerBag(); + SetTeachyTvControllerModeToResume(); + gUnknown_203AD10->exitCB = CB2_ReturnToTeachyTV; + gTasks[taskId].func = sub_810B070; + return TRUE; + } + else + { + return FALSE; + } +} + +void sub_810B1D4(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (!gPaletteFade.active && sub_810B180(taskId) != TRUE) + { + switch (data[8]) + { + case 102: + PlaySE(SE_BAG2); + sub_81091D0(taskId, 1, FALSE); + break; + case 204: + PlaySE(SE_SELECT); + bag_menu_print_cursor_(data[0], 2); + sub_8109140(1); + gSpecialVar_ItemId = ITEM_TEACHY_TV; + sub_8109890(taskId); + break; + case 306: + PlaySE(SE_SELECT); + Menu_MoveCursorNoWrapAround(1); + break; + case 408: + PlaySE(SE_SELECT); + gSaveBlock1Ptr->registeredItem = gSpecialVar_ItemId; + sub_810BA3C(10); + sub_810BA3C(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + sub_810842C(gUnknown_203ACFC.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + sub_8109140(0); + bag_menu_print_cursor_(data[0], 1); + CopyWindowToVram(0, 1); + break; + case 510: + case 612: + gMain.newKeys = 0; + gMain.newAndRepeatedKeys = DPAD_DOWN; + ListMenu_ProcessInput(data[0]); + break; + case 714: + PlaySE(SE_SELECT); + DestroyListMenuTask(data[0], NULL, NULL); + RestorePlayerBag(); + sub_8108CB4(); + gTasks[taskId].func = sub_810B070; + return; + } + data[8]++; + } +} + +void sub_810B378(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (!gPaletteFade.active) + { + if (sub_810B180(taskId) == TRUE) + { + FreeRestoreBattleData(); + LoadPlayerParty(); + return; + } + switch (data[8]) + { + case 102: + case 204: + PlaySE(SE_BAG2); + sub_81091D0(taskId, 1, FALSE); + break; + case 306: + case 408: + gMain.newKeys = 0; + gMain.newAndRepeatedKeys = DPAD_DOWN; + ListMenu_ProcessInput(data[0]); + break; + case 510: + case 612: + gMain.newKeys = 0; + gMain.newAndRepeatedKeys = DPAD_UP; + ListMenu_ProcessInput(data[0]); + break; + case 714: + PlaySE(SE_SELECT); + bag_menu_print_cursor_(data[0], 2); + sub_8109140(1); + gSpecialVar_ItemId = ITEM_POKE_BALL; + sub_8109890(taskId); + break; + case 816: + PlaySE(SE_SELECT); + sub_810BA3C(10); + sub_810BA3C(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + CopyWindowToVram(0, 1); + DestroyListMenuTask(data[0], NULL, NULL); + RestorePlayerBag(); + sub_8108CB4(); + gTasks[taskId].func = sub_810B070; + return; + } + data[8]++; + } +} + +void sub_810B4BC(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (!gPaletteFade.active) + { + if (sub_810B180(taskId) == TRUE) + { + FreeRestoreBattleData(); + LoadPlayerParty(); + return; + } + switch (data[8]) + { + case 102: + gMain.newKeys = 0; + gMain.newAndRepeatedKeys = DPAD_DOWN; + ListMenu_ProcessInput(data[0]); + break; + case 204: + PlaySE(SE_SELECT); + bag_menu_print_cursor_(data[0], 2); + sub_8109140(1); + gSpecialVar_ItemId = ITEM_ANTIDOTE; + sub_8109890(taskId); + break; + case 306: + PlaySE(SE_SELECT); + sub_810BA3C(10); + sub_810BA3C(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + CopyWindowToVram(0, 1); + DestroyListMenuTask(data[0], NULL, NULL); + RestorePlayerBag(); + gItemUseCB = ItemUseCB_MedicineStep; + ItemMenu_SetExitCallback(ChooseMonForInBattleItem); + gTasks[taskId].func = sub_810B070; + return; + } + data[8]++; + } +} + +void sub_810B5D4(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (!gPaletteFade.active && sub_810B180(taskId) != TRUE) + { + switch (data[8]) + { + case 102: + PlaySE(SE_BAG2); + sub_81091D0(taskId, 1, 0); + break; + case 204: + gMain.newKeys = 0; + gMain.newAndRepeatedKeys = DPAD_DOWN; + ListMenu_ProcessInput(data[0]); + break; + case 306: + PlaySE(SE_SELECT); + bag_menu_print_cursor_(data[0], 2); + sub_8109140(1); + gSpecialVar_ItemId = ITEM_TM_CASE; + sub_8109890(taskId); + break; + case 408: + PlaySE(SE_SELECT); + sub_810BA3C(10); + sub_810BA3C(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + CopyWindowToVram(0, 1); + DestroyListMenuTask(data[0], NULL, NULL); + RestorePlayerBag(); + gUnknown_203AD10->exitCB = PokeDude_InitTMCase; + gTasks[taskId].func = sub_810B070; + return; + } + data[8]++; + } +} From 6e41dd7b2120f8024bb0cfff7a5ef25f0dce0366 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 19 Jan 2020 14:47:23 -0500 Subject: [PATCH 19/22] Document item_menu --- asm/pokemon_storage_system.s | 4 +- data/event_scripts.s | 2 +- data/graphics.s | 4 +- include/bag.h | 26 +- include/constants/item_menu.h | 18 + include/event_scripts.h | 2 +- include/graphics.h | 4 +- include/item_menu.h | 20 +- include/item_menu_icons.h | 18 +- include/menu_helpers.h | 2 +- include/strings.h | 3 + include/teachy_tv.h | 10 + include/tm_case.h | 10 + src/bag.c | 288 +++-- src/battle_controller_oak_old_man.c | 4 +- src/battle_controller_player.c | 2 +- src/battle_controller_pokedude.c | 11 +- src/berry_pouch.c | 6 +- src/item_menu.c | 1573 ++++++++++++++------------- src/item_menu_icons.c | 148 +-- src/item_pc.c | 12 +- src/item_use.c | 34 +- src/menu_helpers.c | 2 +- src/new_game.c | 2 +- src/party_menu.c | 12 +- src/player_pc.c | 2 +- src/shop.c | 2 +- src/teachy_tv.c | 14 +- src/tm_case.c | 6 +- sym_ewram.txt | 31 +- 30 files changed, 1139 insertions(+), 1133 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 358ea8b32..fc7fc398d 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -22001,7 +22001,7 @@ GetItemIconPic: @ 8096674 lsls r0, 16 lsrs r0, 16 movs r1, 0 - bl sub_8098974 + bl GetItemIconGfxPtr pop {r1} bx r1 thumb_func_end GetItemIconPic @@ -22012,7 +22012,7 @@ GetItemIconPalette: @ 8096684 lsls r0, 16 lsrs r0, 16 movs r1, 0x1 - bl sub_8098974 + bl GetItemIconGfxPtr pop {r1} bx r1 thumb_func_end GetItemIconPalette diff --git a/data/event_scripts.s b/data/event_scripts.s index f1d28077f..6e645aa75 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -1537,7 +1537,7 @@ EventScript_1A778C:: @ 81A778C releaseall end -gUnknown_81A77A0:: @ 81A77A0 +EventScript_BagItemCanBeRegistered:: @ 81A77A0 msgbox Text_BagItemCanBeRegistered, MSGBOX_SIGN end diff --git a/data/graphics.s b/data/graphics.s index cea2a0ab3..0c7b8f341 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -14004,11 +14004,11 @@ gUnknown_8E83444:: @ 8E83444 .incbin "graphics/item_menu/bag_tilemap2.bin.lz" @ PC deposit items .align 2 -gUnknown_8E835B4:: @ 8E835B4 +gBagBgPalette:: @ 8E835B4 .incbin "graphics/item_menu/bag_pal1.gbapal.lz" @ palette 1 (Boy + misc Pal) .align 2 -gUnknown_8E83604:: @ 8E83604 +gBagBgPalette_FemaleOverride:: @ 8E83604 .incbin "graphics/item_menu/bag_pal2.gbapal.lz" @ palette 2 (Girl) gUnknown_8E8362C:: @ 8E8362C diff --git a/include/bag.h b/include/bag.h index c48940173..fec9f67bf 100644 --- a/include/bag.h +++ b/include/bag.h @@ -3,18 +3,18 @@ #include "menu_helpers.h" -void sub_810B858(void); -void sub_810B8F0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); -void sub_810B958(const u8 * str, u8 unused); -void sub_810B994(void); -u8 sub_810B9DC(u8 a0, u8 a1); -void sub_810BA3C(u8 a0); -u8 sub_810BA70(u8 a0); -void sub_810BA9C(u8 a0); -u8 sub_810BAD8(u8 a0); -void sub_810BAE8(u8 taskId, const struct YesNoFuncTable * ptrs); -void sub_810BB14(u8 taskId, const struct YesNoFuncTable * ptrs); -void sub_810BB40(void); -void sub_810BB74(u8 windowId); +void InitBagWindows(void); +void BagPrintTextOnWindow(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); +void BagPrintTextOnWin1CenteredColor0(const u8 * str, u8 unused); +void BagDrawDepositItemTextBox(void); +u8 ShowBagWindow(u8 whichWindow, u8 nItems); +void HideBagWindow(u8 whichWindow); +u8 OpenBagWindow(u8 whichWindow); +void CloseBagWindow(u8 whichWindow); +u8 GetBagWindow(u8 whichWindow); +void BagCreateYesNoMenuBottomRight(u8 taskId, const struct YesNoFuncTable * ptrs); +void BagCreateYesNoMenuTopRight(u8 taskId, const struct YesNoFuncTable * ptrs); +void BagPrintMoneyAmount(void); +void BagDrawTextBoxOnWindow(u8 windowId); #endif //GUARD_BAG_H diff --git a/include/constants/item_menu.h b/include/constants/item_menu.h index 8e91d2a17..2a51b8c1b 100644 --- a/include/constants/item_menu.h +++ b/include/constants/item_menu.h @@ -1,6 +1,24 @@ #ifndef GUARD_CONSTANTS_ITEM_MENU_H #define GUARD_CONSTANTS_ITEM_MENU_H +#define OPEN_BAG_ITEMS 0 +#define OPEN_BAG_KEYITEMS 1 +#define OPEN_BAG_POKEBALLS 2 +#define OPEN_BAG_LAST 3 + +#define ITEMMENULOCATION_FIELD 0 +#define ITEMMENULOCATION_PARTY 1 +#define ITEMMENULOCATION_SHOP 2 +#define ITEMMENULOCATION_ITEMPC 3 +#define ITEMMENULOCATION_PCBOX 4 +#define ITEMMENULOCATION_BATTLE 5 +#define ITEMMENULOCATION_OLDMAN 6 +#define ITEMMENULOCATION_TTVSCR_STATUS 7 +#define ITEMMENULOCATION_TTVSCR_CATCHING 8 +#define ITEMMENULOCATION_TTVSCR_REGISTER 9 +#define ITEMMENULOCATION_TTVSCR_TMS 10 +#define ITEMMENULOCATION_LAST 11 + #define ITEMMENUACTION_USE 0 #define ITEMMENUACTION_TOSS 1 #define ITEMMENUACTION_REGISTER 2 diff --git a/include/event_scripts.h b/include/event_scripts.h index dcbe2c137..a597868b9 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -1195,6 +1195,6 @@ extern const u8 Text_1A5D31[]; extern const u8 Text_1A5D6E[]; extern const u8 Text_1A5DB1[]; -extern const u8 gUnknown_81A77A0[]; +extern const u8 EventScript_BagItemCanBeRegistered[]; #endif //GUARD_EVENT_SCRIPTS_H diff --git a/include/graphics.h b/include/graphics.h index eb9a9a20d..296dee465 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4861,7 +4861,7 @@ extern const u16 gUnknown_8D12404[]; extern const u32 gUnknown_8E830CC[]; extern const u32 gUnknown_8E832C0[]; extern const u32 gUnknown_8E83444[]; -extern const u32 gUnknown_8E835B4[]; -extern const u32 gUnknown_8E83604[]; +extern const u32 gBagBgPalette[]; +extern const u32 gBagBgPalette_FemaleOverride[]; #endif //GUARD_GRAPHICS_H diff --git a/include/item_menu.h b/include/item_menu.h index d8257ccf1..4720080da 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -13,13 +13,13 @@ struct BagStruct { void (*bagCallback)(void); u8 location; - u8 unk5; + u8 bagOpen; u16 pocket; u16 itemsAbove[3]; u16 cursorPos[3]; }; -extern struct BagStruct gUnknown_203ACFC; +extern struct BagStruct gBagMenuState; extern u16 gSpecialVar_ItemId; @@ -27,19 +27,19 @@ extern u16 gSpecialVar_ItemId; void sub_81AAC50(void); void sub_81AAC70(void); void CB2_SetUpReshowBattleScreenAfterMenu(void); -void sub_81089BC(void); -void sub_810B108(u8); +void ResetBagCursorPositions(void); +void InitPokeDudeBag(u8); void CB2_BagMenuFromStartMenu(void); void MoveItemSlotInList(struct ItemSlot * itemSlots_, u32 from, u32 to_); void ItemMenu_StartFadeToExitCallback(u8 taskId); -void sub_8108CB4(void); +void Bag_BeginCloseWin0Animation(void); void ItemMenu_SetExitCallback(void (*)(void)); void DisplayItemMessageInBag(u8 taskId, u8 fontId, const u8 * string, TaskFunc followUpFunc); -void sub_810A1F8(u8 taskId); -void sub_8107ECC(void); -void InitTutorialBag(void); -void sub_8108DC8(u8 pocketId); -void sub_81089F4(u8 pocketId); +void Task_ReturnToBagFromContextMenu(u8 taskId); +void CB2_BagMenuFromBattle(void); +void InitOldManBag(void); +void Pocket_CalculateNItemsAndMaxShowed(u8 pocketId); +void PocketCalculateInitialCursorPosAndItemsAbove(u8 pocketId); void GoToBagMenu(u8 menuType, u8 pocket, MainCallback callback); #endif //GUARD_ITEM_MENU_H diff --git a/include/item_menu_icons.h b/include/item_menu_icons.h index b5b5c6b0b..fd66a9375 100644 --- a/include/item_menu_icons.h +++ b/include/item_menu_icons.h @@ -3,28 +3,26 @@ #include "global.h" -extern void * gUnknown_2039884; - -extern const struct CompressedSpriteSheet gUnknown_83D41E4; -extern const struct CompressedSpriteSheet gUnknown_83D41EC; -extern const struct CompressedSpritePalette gUnknown_83D41F4; +extern const struct CompressedSpriteSheet gSpriteSheet_Backpack; +extern const struct CompressedSpriteSheet gSpriteSheet_Satchel; +extern const struct CompressedSpritePalette gSpritePalette_BagOrSatchel; extern const struct CompressedSpriteSheet gBagSwapSpriteSheet; extern const struct CompressedSpritePalette gBagSwapSpritePalette; void ResetItemMenuIconState(void); -void sub_80985E4(void); +void ItemMenuIcons_CreateInsertIndicatorBarHidden(void); void DestroyItemMenuIcon(bool8 a0); void CreateItemMenuIcon(u16 itemId, bool8 a0); void CopyItemIconPicTo4x4Buffer(const void *src, void *dest); u8 AddItemIconObject(u16 tilesTag, u16 paletteTag, u16 itemId); u8 AddItemIconObjectWithCustomObjectTemplate(const struct SpriteTemplate * origTemplate, u16 tilesTag, u16 paletteTag, u16 itemId); void sub_80989A0(u16 itemId, u8 idx); -void sub_80986A8(s16 x, u16 y); -void sub_8098660(u8); +void ItemMenuIcons_MoveInsertIndicatorBar(s16 x, u16 y); +void ItemMenuIcons_ToggleInsertIndicatorBarVisibility(bool8 invisible); void sub_8098528(u8); void sub_8098580(void); -const void * sub_8098974(u16 itemId, u8 ptrId); -void sub_80984FC(u8 animNum); +const void * GetItemIconGfxPtr(u16 itemId, u8 ptrId); +void CreateBagOrSatchelSprite(u8 animNum); #endif // GUARD_ITEM_MENU_ICONS diff --git a/include/menu_helpers.h b/include/menu_helpers.h index 90aeb95f6..d26f50483 100644 --- a/include/menu_helpers.h +++ b/include/menu_helpers.h @@ -20,7 +20,7 @@ bool8 sub_80BF748(void); bool8 MenuHelpers_LinkSomething(void); void SetVBlankHBlankCallbacksToNull(void); void ResetAllBgsCoordinatesAndBgCntRegs(void); -u8 sub_80BF8E4(void); +u8 GetDialogBoxFontId(void); bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1); void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 tileNum, u8 paletteNum, u8 fontId, u8 textSpeed, const u8 *string, void *taskFunc); void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 fontId, u8 left, u8 top, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo); diff --git a/include/strings.h b/include/strings.h index 852e88a5c..6241bd8a9 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1038,6 +1038,9 @@ extern const u8 gText_SaveFailedScreen_CheckingBackupMemory[]; extern const u8 gText_SaveFailedScreen_BackupMemoryDamaged[]; extern const u8 gText_SaveFailedScreen_SaveCompleted[]; +// bag +extern const u8 gText_DepositItem[]; + // item_menu extern const u8 gOtherText_Register[]; extern const u8 gOtherText_Walk[]; diff --git a/include/teachy_tv.h b/include/teachy_tv.h index 36bac6a67..3484f88c1 100644 --- a/include/teachy_tv.h +++ b/include/teachy_tv.h @@ -1,6 +1,16 @@ #ifndef GUARD_TEACHY_TV_H #define GUARD_TEACHY_TV_H +enum TeachyTvScript +{ + TTVSCR_BATTLE, + TTVSCR_STATUS, + TTVSCR_MATCHUPS, + TTVSCR_CATCHING, + TTVSCR_TMS, + TTVSCR_REGISTER +}; + void InitTeachyTvController(u8 mode, void (*cb)()); void CB2_ReturnToTeachyTV(void); void SetTeachyTvControllerModeToResume(void); diff --git a/include/tm_case.h b/include/tm_case.h index f77eae457..bb88fc4d1 100644 --- a/include/tm_case.h +++ b/include/tm_case.h @@ -1,6 +1,16 @@ #ifndef GUARD_TM_CASE_H #define GUARD_TM_CASE_H +enum TmCaseType +{ + TMCASE_FROMFIELD, + TMCASE_FROMPARTYGIVE, + TMCASE_FROMMARTSELL, + TMCASE_FROMPOKEMONSTORAGEPC, + TMCASE_FROMBATTLE, + TMCASE_NA +}; + void InitTMCase(u8 a0, void (* a1)(void), u8 a2); void ResetTMCaseCursorPos(void); void PokeDude_InitTMCase(void); diff --git a/src/bag.c b/src/bag.c index b5ba01b4d..7f000722a 100644 --- a/src/bag.c +++ b/src/bag.c @@ -10,17 +10,18 @@ #include "menu.h" #include "money.h" #include "bag.h" +#include "strings.h" -extern const u8 gText_DepositItem[]; +static const u16 sBagWindowPalF[] = INCBIN_U16("data/bag/bag_window_pal.gbapal"); -const u16 gUnknown_8453098[] = INCBIN_U16("data/bag/bag_window_pal.gbapal"); -const u8 gUnknown_84530B8[][3] = { +static const u8 sTextColors[][3] = { {0, 1, 2}, {0, 2, 3}, {0, 3, 2}, {0, 8, 9} }; -const struct WindowTemplate gUnknown_84530C4[] = { + +const struct WindowTemplate sDefaultBagWindowsStd[] = { { .bg = 0, .tilemapLeft = 0x0b, @@ -47,7 +48,8 @@ const struct WindowTemplate gUnknown_84530C4[] = { .baseBlock = 0x01f8 }, DUMMY_WIN_TEMPLATE }; -const struct WindowTemplate gUnknown_84530E4[] = { + +const struct WindowTemplate sDefaultBagWindowsDeposit[] = { { .bg = 0, .tilemapLeft = 0x0b, @@ -74,7 +76,8 @@ const struct WindowTemplate gUnknown_84530E4[] = { .baseBlock = 0x01f8 }, DUMMY_WIN_TEMPLATE }; -const struct WindowTemplate gUnknown_8453104[] = { + +const struct WindowTemplate sWindowTemplates[] = { { .bg = 0, .tilemapLeft = 24, @@ -99,122 +102,114 @@ const struct WindowTemplate gUnknown_8453104[] = { .height = 3, .paletteNum = 0xC, .baseBlock = 0x272 + }, { + .bg = 0, + .tilemapLeft = 23, + .tilemapTop = 15, + .width = 6, + .height = 4, + .paletteNum = 0xF, + .baseBlock = 0x28a + }, { + .bg = 0, + .tilemapLeft = 21, + .tilemapTop = 9, + .width = 6, + .height = 4, + .paletteNum = 0xF, + .baseBlock = 0x28a + }, { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 15, + .width = 26, + .height = 4, + .paletteNum = 0xF, + .baseBlock = 0x2a2 + }, { + .bg = 0, + .tilemapLeft = 6, + .tilemapTop = 15, + .width = 14, + .height = 4, + .paletteNum = 0xC, + .baseBlock = 0x2a2 + }, { + .bg = 0, + .tilemapLeft = 6, + .tilemapTop = 15, + .width = 15, + .height = 4, + .paletteNum = 0xC, + .baseBlock = 0x2da + }, { + .bg = 0, + .tilemapLeft = 6, + .tilemapTop = 15, + .width = 16, + .height = 4, + .paletteNum = 0xC, + .baseBlock = 0x316 + }, { + .bg = 0, + .tilemapLeft = 6, + .tilemapTop = 15, + .width = 23, + .height = 4, + .paletteNum = 0xC, + .baseBlock = 0x356 + }, { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 17, + .width = 7, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x20a + }, { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 15, + .width = 7, + .height = 4, + .paletteNum = 0xF, + .baseBlock = 0x20a + }, { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 13, + .width = 7, + .height = 6, + .paletteNum = 0xF, + .baseBlock = 0x20a + }, { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 11, + .width = 7, + .height = 8, + .paletteNum = 0xF, + .baseBlock = 0x20a } }; -const struct WindowTemplate gUnknown_845311C = { - .bg = 0, - .tilemapLeft = 23, - .tilemapTop = 15, - .width = 6, - .height = 4, - .paletteNum = 0xF, - .baseBlock = 0x28a -}; +static const u8 sUnused_8453174[] = {16, 8, 4}; -const struct WindowTemplate gUnknown_8453124 = { - .bg = 0, - .tilemapLeft = 21, - .tilemapTop = 9, - .width = 6, - .height = 4, - .paletteNum = 0xF, - .baseBlock = 0x28a -}; +static EWRAM_DATA u8 sOpenWindows[11] = {}; -const struct WindowTemplate gUnknown_845312C[] = { - { - .bg = 0x00, - .tilemapLeft = 0x02, - .tilemapTop = 0x0f, - .width = 0x1a, - .height = 0x04, - .paletteNum = 0x0f, - .baseBlock = 0x02a2 - }, { - .bg = 0x00, - .tilemapLeft = 0x06, - .tilemapTop = 0x0f, - .width = 0x0e, - .height = 0x04, - .paletteNum = 0x0c, - .baseBlock = 0x02a2 - }, { - .bg = 0x00, - .tilemapLeft = 0x06, - .tilemapTop = 0x0f, - .width = 0x0f, - .height = 0x04, - .paletteNum = 0x0c, - .baseBlock = 0x02da - }, { - .bg = 0x00, - .tilemapLeft = 0x06, - .tilemapTop = 0x0f, - .width = 0x10, - .height = 0x04, - .paletteNum = 0x0c, - .baseBlock = 0x0316 - }, { - .bg = 0x00, - .tilemapLeft = 0x06, - .tilemapTop = 0x0f, - .width = 0x17, - .height = 0x04, - .paletteNum = 0x0c, - .baseBlock = 0x0356 - }, { - .bg = 0x00, - .tilemapLeft = 0x16, - .tilemapTop = 0x11, - .width = 0x07, - .height = 0x02, - .paletteNum = 0x0f, - .baseBlock = 0x020a - }, { - .bg = 0x00, - .tilemapLeft = 0x16, - .tilemapTop = 0x0f, - .width = 0x07, - .height = 0x04, - .paletteNum = 0x0f, - .baseBlock = 0x020a - }, { - .bg = 0x00, - .tilemapLeft = 0x16, - .tilemapTop = 0x0d, - .width = 0x07, - .height = 0x06, - .paletteNum = 0x0f, - .baseBlock = 0x020a - }, { - .bg = 0x00, - .tilemapLeft = 0x16, - .tilemapTop = 0x0b, - .width = 0x07, - .height = 0x08, - .paletteNum = 0x0f, - .baseBlock = 0x020a - } -}; - -const u8 gUnknown_8453174[] = {16, 8, 4}; - -EWRAM_DATA u8 gUnknown_203AD34[11] = {}; - -void sub_810B858(void) +void InitBagWindows(void) { u8 i; - if (gUnknown_203ACFC.location != 3) - InitWindows(gUnknown_84530C4); + if (gBagMenuState.location != 3) + InitWindows(sDefaultBagWindowsStd); else - InitWindows(gUnknown_84530E4); + InitWindows(sDefaultBagWindowsDeposit); DeactivateAllTextPrinters(); TextWindow_SetUserSelectedFrame(0, 0x64, 0xE0); TextWindow_LoadResourcesStdFrame0(0, 0x6D, 0xD0); TextWindow_SetStdFrame0_WithPal(0, 0x81, 0xC0); - LoadPalette(gUnknown_8453098, 0xF0, 0x20); + LoadPalette(sBagWindowPalF, 0xF0, 0x20); for (i = 0; i < 3; i++) { FillWindowPixelBuffer(i, 0x00); @@ -223,22 +218,22 @@ void sub_810B858(void) ScheduleBgCopyTilemapToVram(0); for (i = 0; i < 11; i++) { - gUnknown_203AD34[i] = 0xFF; + sOpenWindows[i] = 0xFF; } } -void sub_810B8F0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx) +void BagPrintTextOnWindow(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx) { - AddTextPrinterParameterized4(windowId, fontId, x, y, letterSpacing, lineSpacing, gUnknown_84530B8[colorIdx], speed, str); + AddTextPrinterParameterized4(windowId, fontId, x, y, letterSpacing, lineSpacing, sTextColors[colorIdx], speed, str); } -void sub_810B958(const u8 * str, u8 unused) +void BagPrintTextOnWin1CenteredColor0(const u8 * str, u8 unused) { u32 x = 0x48 - GetStringWidth(1, str, 0); - AddTextPrinterParameterized3(2, 1, x / 2, 1, gUnknown_84530B8[0], 0, str); + AddTextPrinterParameterized3(2, 1, x / 2, 1, sTextColors[0], 0, str); } -void sub_810B994(void) +void BagDrawDepositItemTextBox(void) { u32 x; DrawStdFrameWithCustomTileAndPalette(2, FALSE, 0x081, 0x0C); @@ -246,77 +241,76 @@ void sub_810B994(void) AddTextPrinterParameterized(2, 0, gText_DepositItem, x / 2, 1, 0, NULL); } -u8 sub_810B9DC(u8 a0, u8 a1) +u8 ShowBagWindow(u8 whichWindow, u8 nItems) { - if (gUnknown_203AD34[a0] == 0xFF) + if (sOpenWindows[whichWindow] == 0xFF) { - gUnknown_203AD34[a0] = AddWindow(&gUnknown_8453104[a0 + a1]); - if (a0 != 6) + sOpenWindows[whichWindow] = AddWindow(&sWindowTemplates[whichWindow + nItems]); + if (whichWindow != 6) { - DrawStdFrameWithCustomTileAndPalette(gUnknown_203AD34[a0], FALSE, 0x064, 0x0E); + DrawStdFrameWithCustomTileAndPalette(sOpenWindows[whichWindow], FALSE, 0x064, 0xE); } else { - DrawStdFrameWithCustomTileAndPalette(gUnknown_203AD34[a0], FALSE, 0x081, 0x0C); + DrawStdFrameWithCustomTileAndPalette(sOpenWindows[whichWindow], FALSE, 0x081, 0xC); } ScheduleBgCopyTilemapToVram(0); } - return gUnknown_203AD34[a0]; + return sOpenWindows[whichWindow]; } -void sub_810BA3C(u8 a0) +void HideBagWindow(u8 whichWindow) { - ClearStdWindowAndFrameToTransparent(gUnknown_203AD34[a0], FALSE); - ClearWindowTilemap(gUnknown_203AD34[a0]); - RemoveWindow(gUnknown_203AD34[a0]); + ClearStdWindowAndFrameToTransparent(sOpenWindows[whichWindow], FALSE); + ClearWindowTilemap(sOpenWindows[whichWindow]); + RemoveWindow(sOpenWindows[whichWindow]); ScheduleBgCopyTilemapToVram(0); - gUnknown_203AD34[a0] = 0xFF; + sOpenWindows[whichWindow] = 0xFF; } -u8 sub_810BA70(u8 a0) +u8 OpenBagWindow(u8 whichWindow) { - if (gUnknown_203AD34[a0] == 0xFF) + if (sOpenWindows[whichWindow] == 0xFF) { - gUnknown_203AD34[a0] = AddWindow(&gUnknown_8453104[a0]); + sOpenWindows[whichWindow] = AddWindow(&sWindowTemplates[whichWindow]); } - return gUnknown_203AD34[a0]; + return sOpenWindows[whichWindow]; } -void sub_810BA9C(u8 a0) +void CloseBagWindow(u8 whichWindow) { - if (gUnknown_203AD34[a0] != 0xFF) + if (sOpenWindows[whichWindow] != 0xFF) { - ClearDialogWindowAndFrameToTransparent(gUnknown_203AD34[a0], FALSE); - ClearWindowTilemap(gUnknown_203AD34[a0]); - RemoveWindow(gUnknown_203AD34[a0]); + ClearDialogWindowAndFrameToTransparent(sOpenWindows[whichWindow], FALSE); + ClearWindowTilemap(sOpenWindows[whichWindow]); + RemoveWindow(sOpenWindows[whichWindow]); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); - gUnknown_203AD34[a0] = 0xFF; - + sOpenWindows[whichWindow] = 0xFF; } } -u8 sub_810BAD8(u8 a0) +u8 GetBagWindow(u8 whichWindow) { - return gUnknown_203AD34[a0]; + return sOpenWindows[whichWindow]; } -void sub_810BAE8(u8 taskId, const struct YesNoFuncTable * ptrs) +void BagCreateYesNoMenuBottomRight(u8 taskId, const struct YesNoFuncTable * ptrs) { - CreateYesNoMenuWithCallbacks(taskId, &gUnknown_845311C, 2, 0, 2, 0x64, 0x0E, ptrs); + CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates[3], 2, 0, 2, 0x064, 0x0E, ptrs); } -void sub_810BB14(u8 taskId, const struct YesNoFuncTable * ptrs) +void BagCreateYesNoMenuTopRight(u8 taskId, const struct YesNoFuncTable * ptrs) { - CreateYesNoMenuWithCallbacks(taskId, &gUnknown_8453124, 2, 0, 2, 0x064, 0x0E, ptrs); + CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates[4], 2, 0, 2, 0x064, 0x0E, ptrs); } -void sub_810BB40(void) +void BagPrintMoneyAmount(void) { - PrintMoneyAmountInMoneyBoxWithBorder(sub_810B9DC(2, 0), 0x081, 0x0C, GetMoney(&gSaveBlock1Ptr->money)); + PrintMoneyAmountInMoneyBoxWithBorder(ShowBagWindow(2, 0), 0x081, 0x0C, GetMoney(&gSaveBlock1Ptr->money)); } -void sub_810BB74(u8 windowId) +void BagDrawTextBoxOnWindow(u8 windowId) { DrawTextBorderOuter(windowId, 0x064, 0x0E); } diff --git a/src/battle_controller_oak_old_man.c b/src/battle_controller_oak_old_man.c index a027808af..0807018a2 100644 --- a/src/battle_controller_oak_old_man.c +++ b/src/battle_controller_oak_old_man.c @@ -379,9 +379,9 @@ static void OpenBagAndChooseItem(void) nullsub_44(); FreeAllWindowBuffers(); if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) - sub_8107ECC(); + CB2_BagMenuFromBattle(); else - InitTutorialBag(); + InitOldManBag(); } } diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 7f1f738a3..cb9e04a50 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1330,7 +1330,7 @@ static void OpenBagAndChooseItem(void) gBattlerControllerFuncs[gActiveBattler] = CompleteWhenChoseItem; nullsub_44(); FreeAllWindowBuffers(); - sub_8107ECC(); + CB2_BagMenuFromBattle(); } } diff --git a/src/battle_controller_pokedude.c b/src/battle_controller_pokedude.c index 86da27ee3..b9df7e1ed 100644 --- a/src/battle_controller_pokedude.c +++ b/src/battle_controller_pokedude.c @@ -23,6 +23,7 @@ #include "battle_interface.h" #include "battle_message.h" #include "reshow_battle_screen.h" +#include "teachy_tv.h" #include "constants/songs.h" #include "constants/items.h" #include "constants/moves.h" @@ -733,15 +734,15 @@ static void OpenBagAndChooseItem(void) FreeAllWindowBuffers(); switch (gSpecialVar_0x8004) { - case 1: + case TTVSCR_STATUS: default: - callbackId = 7; + callbackId = ITEMMENULOCATION_TTVSCR_STATUS; break; - case 3: - callbackId = 8; + case TTVSCR_CATCHING: + callbackId = ITEMMENULOCATION_TTVSCR_CATCHING; break; } - sub_810B108(callbackId); + InitPokeDudeBag(callbackId); } } diff --git a/src/berry_pouch.c b/src/berry_pouch.c index 711a17768..63677574b 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -1269,7 +1269,7 @@ static void Task_ContextMenu_Sell(u8 taskId) { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_OhNoICantBuyThat); - DisplayItemMessageInBerryPouch(taskId, sub_80BF8E4(), gStringVar4, Task_BerryPouch_DestroyDialogueWindowAndRefreshListMenu); + DisplayItemMessageInBerryPouch(taskId, GetDialogBoxFontId(), gStringVar4, Task_BerryPouch_DestroyDialogueWindowAndRefreshListMenu); } else { @@ -1285,7 +1285,7 @@ static void Task_ContextMenu_Sell(u8 taskId) data[2] = 99; CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_HowManyWouldYouLikeToSell); - DisplayItemMessageInBerryPouch(taskId, sub_80BF8E4(), gStringVar4, Task_Sell_PrintSelectMultipleUI); + DisplayItemMessageInBerryPouch(taskId, GetDialogBoxFontId(), gStringVar4, Task_Sell_PrintSelectMultipleUI); } } } @@ -1295,7 +1295,7 @@ static void Task_AskSellMultiple(u8 taskId) s16 * data = gTasks[taskId].data; ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_ICanPayThisMuch_WouldThatBeOkay); - DisplayItemMessageInBerryPouch(taskId, sub_80BF8E4(), gStringVar4, Task_SellMultiple_CreateYesNoMenu); + DisplayItemMessageInBerryPouch(taskId, GetDialogBoxFontId(), gStringVar4, Task_SellMultiple_CreateYesNoMenu); } static void Task_SellMultiple_CreateYesNoMenu(u8 taskId) diff --git a/src/item_menu.c b/src/item_menu.c index a2a6f865b..467ff4c6b 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -39,10 +39,10 @@ struct BagMenuAlloc { MainCallback exitCB; - u8 field_04; - u8 field_05_0:4; + u8 itemOriginalLocation; + u8 pocketSwitchMode:4; u8 itemMenuIcon:2; - u8 field_05_6:2; + u8 inhibitItemDescriptionPrint:2; u16 contextMenuSelectedItem; u8 pocketScrollArrowsTask; u8 pocketSwitchArrowsTask; @@ -62,103 +62,104 @@ struct BagSlots u16 pocket; }; -EWRAM_DATA struct BagStruct gUnknown_203ACFC = {}; -EWRAM_DATA struct BagMenuAlloc * gUnknown_203AD10 = NULL; -EWRAM_DATA void * gUnknown_203AD14 = NULL; -EWRAM_DATA struct ListMenuItem * gUnknown_203AD18 = NULL; -EWRAM_DATA u8 (*gUnknown_203AD1C)[19] = NULL; -EWRAM_DATA u8 gUnknown_203AD20[4] = {}; -EWRAM_DATA const u8 *gUnknown_203AD24 = NULL; -EWRAM_DATA u8 gUnknown_203AD28 = 0; -EWRAM_DATA struct BagSlots * gUnknown_203AD2C = NULL; +EWRAM_DATA struct BagStruct gBagMenuState = {}; +static EWRAM_DATA struct BagMenuAlloc * sBagMenuDisplay = NULL; +static EWRAM_DATA void * sBagBgTilemapBuffer = NULL; +static EWRAM_DATA struct ListMenuItem * sListMenuItems = NULL; +static EWRAM_DATA u8 (*sListMenuItemStrings)[19] = NULL; +static EWRAM_DATA u8 sContextMenuItemsBuffer[4] = {}; +static EWRAM_DATA const u8 *sContextMenuItemsPtr = NULL; +static EWRAM_DATA u8 sContextMenuNumItems = 0; +static EWRAM_DATA struct BagSlots * sBackupPlayerBag = NULL; +EWRAM_DATA u16 gSpecialVar_ItemId = ITEM_NONE; -void sub_8107F10(void); -bool8 sub_8107F3C(void); -void sub_810813C(void); -void sub_8108178(u8 taskId); -void sub_81081AC(void); -bool8 sub_81081D0(void); -bool8 sub_8108240(void); -u8 sub_8108388(u8 location); -bool8 sub_81083F4(void); -void sub_810842C(u8 pocket); -void sub_8108560(u8 *dest, u16 itemId); -void sub_81085A4(s32 itemIndex, bool8 onInit, struct ListMenu *list); -void sub_8108654(u8 windowId, s32 itemId, u8 y); -void bag_menu_print_cursor(u8 y, u8 colorIdx); -void sub_81087EC(void); -void sub_8108818(s32 itemIndex); -void sub_8108888(void); -void sub_81088D8(void); -void sub_810899C(void); -void sub_8108A68(void); -void sub_8108A84(void); -void sub_8108B04(void); -void sub_8108B8C(u8 taskId); -void sub_8108CFC(u8 taskId); -void sub_8108C10(void); -void sub_8108E54(void); -void sub_8108F0C(u8 taskId); -void sub_81090DC(u8 taskId); -void sub_8109140(u32 a0); -u8 sub_8109168(u8 taskId, u8 pocketId); -void sub_81091D0(u8 taskId, s16 direction, bool16 a2); -void sub_8109298(u8 taskId); -void sub_81093B8(u8 taskId, s16 itemIndex); -void sub_81094B0(u8 taskId); -void sub_81095AC(u8 taskId, u32 itemIndex); -void sub_810967C(u8 taskId, u32 itemIndex); -void sub_8109854(u8 a0); -void sub_8109BB8(u8 taskId); -void sub_8109BE4(u8 taskId); -void Task_ItemMenuAction_Use(u8 taskId); -void Task_ItemMenuAction_Toss(u8 taskId); -void sub_8109D38(u8 taskId); -void sub_8109DB0(u8 taskId); -void sub_8109DEC(u8 taskId); -void sub_8109EA8(u8 taskId); -void sub_8109F44(u8 taskId); -void Task_ItemMenuAction_ToggleSelect(u8 taskId); -void Task_ItemMenuAction_Give(u8 taskId); -void sub_810A170(u8 taskId); -void Task_ItemMenuAction_Cancel(u8 taskId); -void sub_810A18C(u8 taskId); -void sub_810A1D0(u8 taskId); -void sub_810A324(u8 taskId); -void sub_810A370(u8 taskId); -void sub_810A434(void); -void sub_810A448(void); -void sub_810A45C(void); -void sub_810A468(u8 taskId); -void sub_810A52C(void); -void sub_810A540(void); -void sub_810A554(void); -void sub_810A568(u8 taskId); -void sub_810A654(void); -void sub_810A668(void); -void sub_810A67C(void); -void sub_810A690(u8 taskId); -void sub_810A70C(u8 taskId); -void sub_810A720(u8 taskId); -void sub_810A770(u8 taskId); -void sub_810A834(s32 price); -void sub_810A85C(u8 taskId); -void sub_810A940(u8 taskId); -void sub_810A9D4(u8 taskId); -void sub_810AAF4(u8 taskId); -void sub_810AB40(u8 taskId); -void sub_810AB88(u8 taskId); -void sub_810AC40(u8 taskId); -bool8 sub_810ADAC(void); -void sub_810AF9C(u8 taskId); -void sub_810B070(u8 taskId); -void sub_810B0AC(u8 taskId); -void sub_810B1D4(u8 taskId); -void sub_810B378(u8 taskId); -void sub_810B4BC(u8 taskId); -void sub_810B5D4(u8 taskId); +static void CB2_OpenBagMenu(void); +static bool8 LoadBagMenuGraphics(void); +static void FadeOutOfBagMenu(void); +static void Task_WaitFadeOutOfBagMenu(u8 taskId); +static void NullBagMenuBufferPtrs(void); +static bool8 BagMenuInitBgsAndAllocTilemapBuffer(void); +static bool8 DoLoadBagGraphics(void); +static u8 CreateBagInputHandlerTask(u8 location); +static bool8 TryAllocListMenuBuffers(void); +static void Bag_BuildListMenuTemplate(u8 pocket); +static void BagListMenuGetItemNameColored(u8 *dest, u16 itemId); +static void BagListMenuMoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list); +static void BagListMenuItemPrintFunc(u8 windowId, s32 itemId, u8 y); +static void bag_menu_print_cursor(u8 y, u8 colorIdx); +static void PrintBagPocketName(void); +static void PrintItemDescriptionOnMessageWindow(s32 itemIndex); +static void CreatePocketScrollArrowPair(void); +static void CreatePocketSwitchArrowPair(void); +static void BagDestroyPocketSwitchArrowPair(void); +static void CalculateInitialCursorPosAndItemsAbove(void); +static void UpdatePocketScrollPositions(void); +static void DestroyBagMenuResources(void); +static void Task_ItemMenu_WaitFadeAndSwitchToExitCallback(u8 taskId); +static void Task_AnimateWin0v(u8 taskId); +static void ShowBagOrBeginWin0OpenTask(void); +static void All_CalculateNItemsAndMaxShowed(void); +static void Task_BagMenu_HandleInput(u8 taskId); +static void Task_ItemContextMenuByLocation(u8 taskId); +static void Bag_FillMessageBoxWithPalette(u32 a0); +static u8 ProcessPocketSwitchInput(u8 taskId, u8 pocketId); +static void SwitchPockets(u8 taskId, s16 direction, bool16 a2); +static void Task_AnimateSwitchPockets(u8 taskId); +static void BeginMovingItemInPocket(u8 taskId, s16 itemIndex); +static void Task_MoveItemInPocket_HandleInput(u8 taskId); +static void ExecuteMoveItemInPocket(u8 taskId, u32 itemIndex); +static void AbortMovingItemInPocket(u8 taskId, u32 itemIndex); +static void CopyBagListBgTileRowToTilemapBuffer(u8 a0); +static void Task_ItemContext_FieldOrBattle(u8 taskId); +static void Task_FieldItemContextMenuHandleInput(u8 taskId); +static void Task_ItemMenuAction_Use(u8 taskId); +static void Task_ItemMenuAction_Toss(u8 taskId); +static void Task_ConfirmTossItems(u8 taskId); +static void Task_TossItem_No(u8 taskId); +static void Task_SelectQuantityToToss(u8 taskId); +static void Task_TossItem_Yes(u8 taskId); +static void Task_WaitAB_RedrawAndReturnToBag(u8 taskId); +static void Task_ItemMenuAction_ToggleSelect(u8 taskId); +static void Task_ItemMenuAction_Give(u8 taskId); +static void Task_PrintThereIsNoPokemon(u8 taskId); +static void Task_ItemMenuAction_Cancel(u8 taskId); +static void Task_PrintItemCantBeHeld(u8 taskId); +static void Task_WaitAButtonAndCloseContextMenu(u8 taskId); +static void Task_ItemMenuAction_BattleUse(u8 taskId); +static void Task_ItemContext_FieldGive(u8 taskId); +static void GoToTMCase_Give(void); +static void GoToBerryPouch_Give(void); +static void ReturnToBagMenuFromSubmenu_Give(void); +static void Task_ItemContext_PcBoxGive(u8 taskId); +static void GoToTMCase_PCBox(void); +static void GoToBerryPouch_PCBox(void); +static void ReturnToBagMenuFromSubmenu_PCBox(void); +static void Task_ItemContext_Sell(u8 taskId); +static void GoToTMCase_Sell(void); +static void GoToBerryPouch_Sell(void); +static void ReturnToBagMenuFromSubmenu_Sell(void); +static void Task_PrintSaleConfirmationText(u8 taskId); +static void Task_ShowSellYesNoMenu(u8 taskId); +static void Task_SellItem_No(u8 taskId); +static void Task_InitSaleQuantitySelectInterface(u8 taskId); +static void UpdateSalePriceDisplay(s32 price); +static void Task_SelectQuantityToSell(u8 taskId); +static void Task_SellItem_Yes(u8 taskId); +static void Task_FinalizeSaleToShop(u8 taskId); +static void Task_WaitPressAB_AfterSell(u8 taskId); +static void Task_ItemContext_Deposit(u8 taskId); +static void Task_SelectQuantityToDeposit(u8 taskId); +static void Task_TryDoItemDeposit(u8 taskId); +static bool8 BagIsTutorial(void); +static void Task_Bag_OldManTutorial(u8 taskId); +static void Task_PokeDude_FadeFromBag(u8 taskId); +static void Task_PokeDude_WaitFadeAndExitBag(u8 taskId); +static void Task_Bag_TeachyTvRegister(u8 taskId); +static void Task_Bag_TeachyTvCatching(u8 taskId); +static void Task_Bag_TeachyTvStatus(u8 taskId); +static void Task_Bag_TeachyTvTMs(u8 taskId); -const struct BgTemplate gUnknown_8452CF4[2] = { +static const struct BgTemplate sBgTemplates[2] = { { .bg = 0, .charBaseIndex = 0, @@ -178,43 +179,43 @@ const struct BgTemplate gUnknown_8452CF4[2] = { } }; -const u8 *const sPocketNames[] = { +static const u8 *const sPocketNames[] = { gText_Items2, gText_KeyItems2, gText_PokeBalls2 }; -const u16 gUnknown_8452D08[][18] = { - [ITEMMENUACTION_USE] = INCBIN_U16("graphics/item_menu/bagmap_0.bin"), - [ITEMMENUACTION_TOSS] = INCBIN_U16("graphics/item_menu/bagmap_1.bin"), - [ITEMMENUACTION_REGISTER] = INCBIN_U16("graphics/item_menu/bagmap_2.bin"), - [ITEMMENUACTION_GIVE] = INCBIN_U16("graphics/item_menu/bagmap_3.bin"), - [ITEMMENUACTION_CANCEL] = INCBIN_U16("graphics/item_menu/bagmap_4.bin"), - [ITEMMENUACTION_BATTLE_USE] = INCBIN_U16("graphics/item_menu/bagmap_5.bin"), - [ITEMMENUACTION_CHECK] = INCBIN_U16("graphics/item_menu/bagmap_6.bin"), - [ITEMMENUACTION_OPEN] = INCBIN_U16("graphics/item_menu/bagmap_7.bin"), - [ITEMMENUACTION_OPEN_BERRIES] = INCBIN_U16("graphics/item_menu/bagmap_8.bin"), - [ITEMMENUACTION_WALK] = INCBIN_U16("graphics/item_menu/bagmap_9.bin"), - [ITEMMENUACTION_DESELECT] = INCBIN_U16("graphics/item_menu/bagmap_A.bin"), - [ITEMMENUACTION_DUMMY] = INCBIN_U16("graphics/item_menu/bagmap_B.bin") +static const u16 sBagListBgTiles[][18] = { + INCBIN_U16("graphics/item_menu/bagmap_0.bin"), + INCBIN_U16("graphics/item_menu/bagmap_1.bin"), + INCBIN_U16("graphics/item_menu/bagmap_2.bin"), + INCBIN_U16("graphics/item_menu/bagmap_3.bin"), + INCBIN_U16("graphics/item_menu/bagmap_4.bin"), + INCBIN_U16("graphics/item_menu/bagmap_5.bin"), + INCBIN_U16("graphics/item_menu/bagmap_6.bin"), + INCBIN_U16("graphics/item_menu/bagmap_7.bin"), + INCBIN_U16("graphics/item_menu/bagmap_8.bin"), + INCBIN_U16("graphics/item_menu/bagmap_9.bin"), + INCBIN_U16("graphics/item_menu/bagmap_A.bin"), + INCBIN_U16("graphics/item_menu/bagmap_B.bin") }; -const struct MenuAction gUnknown_8452EB8[] = { +static const struct MenuAction sItemMenuContextActions[] = { [ITEMMENUACTION_USE] = {gOtherText_Use, {.void_u8 = Task_ItemMenuAction_Use}}, [ITEMMENUACTION_TOSS] = {gOtherText_Toss, {.void_u8 = Task_ItemMenuAction_Toss}}, [ITEMMENUACTION_REGISTER] = {gOtherText_Register, {.void_u8 = Task_ItemMenuAction_ToggleSelect}}, [ITEMMENUACTION_GIVE] = {gOtherText_Give, {.void_u8 = Task_ItemMenuAction_Give}}, [ITEMMENUACTION_CANCEL] = {gFameCheckerText_Cancel, {.void_u8 = Task_ItemMenuAction_Cancel}}, - [ITEMMENUACTION_BATTLE_USE] = {gOtherText_Use, {.void_u8 = sub_810A324}}, + [ITEMMENUACTION_BATTLE_USE] = {gOtherText_Use, {.void_u8 = Task_ItemMenuAction_BattleUse}}, [ITEMMENUACTION_CHECK] = {gOtherText_Check, {.void_u8 = Task_ItemMenuAction_Use}}, [ITEMMENUACTION_OPEN] = {gOtherText_Open, {.void_u8 = Task_ItemMenuAction_Use}}, - [ITEMMENUACTION_OPEN_BERRIES] = {gOtherText_Open, {.void_u8 = sub_810A324}}, + [ITEMMENUACTION_OPEN_BERRIES] = {gOtherText_Open, {.void_u8 = Task_ItemMenuAction_BattleUse}}, [ITEMMENUACTION_WALK] = {gOtherText_Walk, {.void_u8 = Task_ItemMenuAction_Use}}, [ITEMMENUACTION_DESELECT] = {gOtherText_Deselect, {.void_u8 = Task_ItemMenuAction_ToggleSelect}}, [ITEMMENUACTION_DUMMY] = {gString_Dummy, {.void_u8 = NULL}} }; -const u8 gUnknown_8452F18[][4] = { +static const u8 sContextMenuItems_Field[][4] = { { ITEMMENUACTION_USE, ITEMMENUACTION_GIVE, @@ -233,14 +234,14 @@ const u8 gUnknown_8452F18[][4] = { } }; -const u8 gUnknown_8452F24[] = { +static const u8 sContextMenuItems_CheckGiveTossCancel[] = { ITEMMENUACTION_CHECK, ITEMMENUACTION_GIVE, ITEMMENUACTION_TOSS, ITEMMENUACTION_CANCEL }; -const u8 gUnknown_8452F28[][2] = { +static const u8 sContextMenuItems_GiveIfNotKeyItemPocket[][2] = { { ITEMMENUACTION_GIVE, ITEMMENUACTION_CANCEL @@ -253,46 +254,46 @@ const u8 gUnknown_8452F28[][2] = { } }; -const u8 gUnknown_8452F2E[] = { +static const u8 sContextMenuItems_Open[] = { ITEMMENUACTION_OPEN, ITEMMENUACTION_CANCEL }; -const u8 gUnknown_8452F30[] = { +static const u8 sContextMenuItems_BattleUse[] = { ITEMMENUACTION_BATTLE_USE, ITEMMENUACTION_CANCEL }; -const u8 gUnknown_8452F32[] = { +static const u8 sContextMenuItems_Cancel[] = { ITEMMENUACTION_CANCEL, ITEMMENUACTION_DUMMY }; -const TaskFunc gUnknown_8452F34[] = { - sub_8109BB8, - sub_810A370, - sub_810A568, - sub_810AB40, - sub_810A468, - sub_8109BB8, - NULL +static const TaskFunc sItemContextTaskFuncs[] = { + [ITEMMENULOCATION_FIELD] = Task_ItemContext_FieldOrBattle, + [ITEMMENULOCATION_PARTY] = Task_ItemContext_FieldGive, + [ITEMMENULOCATION_SHOP] = Task_ItemContext_Sell, + [ITEMMENULOCATION_ITEMPC] = Task_ItemContext_Deposit, + [ITEMMENULOCATION_PCBOX] = Task_ItemContext_PcBoxGive, + [ITEMMENULOCATION_BATTLE] = Task_ItemContext_FieldOrBattle, + [ITEMMENULOCATION_OLDMAN] = NULL }; -const struct YesNoFuncTable gUnknown_8452F50 = { - sub_8109EA8, - sub_8109DB0 +static const struct YesNoFuncTable sYesNoMenu_Toss = { + Task_TossItem_Yes, + Task_TossItem_No }; -const struct YesNoFuncTable gUnknown_8452F58 = { - sub_810A940, - sub_810A720 +static const struct YesNoFuncTable sYesNoMenu_Sell = { + Task_SellItem_Yes, + Task_SellItem_No }; -const u8 gUnknown_8452F60[] = _("{COLOR_HIGHLIGHT_SHADOW RED TRANSPARENT GREEN}"); +static const u8 sListItemTextColor_RegularItem[] = _("{COLOR_HIGHLIGHT_SHADOW RED TRANSPARENT GREEN}"); -const u8 gUnknown_8452F66[] = _("{COLOR_HIGHLIGHT_SHADOW LIGHT_GRAY TRANSPARENT BLACK}"); +static const u8 sListItemTextColor_TmCase_BerryPouch[] = _("{COLOR_HIGHLIGHT_SHADOW LIGHT_GRAY TRANSPARENT BLACK}"); -const struct ScrollArrowsTemplate gUnknown_8452F6C = { +static const struct ScrollArrowsTemplate sPocketSwitchArrowPairTemplate = { .firstArrowType = SCROLL_ARROW_LEFT, .firstX = 8, .firstY = 72, @@ -306,57 +307,57 @@ const struct ScrollArrowsTemplate gUnknown_8452F6C = { .palNum = 0, }; -const u8 gUnknown_8452F7C[] = INCBIN_U8("graphics/interface/select_button.4bpp"); +static const u8 sBlit_SelectButton[] = INCBIN_U8("graphics/interface/select_button.4bpp"); -void GoToBagMenu(u8 location, u8 a1, MainCallback a2) +void GoToBagMenu(u8 location, u8 pocket, MainCallback bagCallback) { u8 i; - sub_81081AC(); - gUnknown_203AD10 = Alloc(sizeof(struct BagMenuAlloc)); - if (gUnknown_203AD10 == NULL) - SetMainCallback2(a2); + NullBagMenuBufferPtrs(); + sBagMenuDisplay = Alloc(sizeof(struct BagMenuAlloc)); + if (sBagMenuDisplay == NULL) + SetMainCallback2(bagCallback); else { - if (location != 11) - gUnknown_203ACFC.location = location; - if (a2 != NULL) - gUnknown_203ACFC.bagCallback = a2; - gUnknown_203AD10->exitCB = NULL; - gUnknown_203AD10->field_04 = 0xFF; - gUnknown_203AD10->itemMenuIcon = 0; - gUnknown_203AD10->field_05_6 = 0; - gUnknown_203AD10->pocketScrollArrowsTask = 0xFF; - gUnknown_203AD10->pocketSwitchArrowsTask = 0xFF; - if (location == 3) - gUnknown_203AD10->field_05_0 = 1; - else if (location == 6) - gUnknown_203AD10->field_05_0 = 2; + if (location != ITEMMENULOCATION_LAST) + gBagMenuState.location = location; + if (bagCallback != NULL) + gBagMenuState.bagCallback = bagCallback; + sBagMenuDisplay->exitCB = NULL; + sBagMenuDisplay->itemOriginalLocation = 0xFF; + sBagMenuDisplay->itemMenuIcon = 0; + sBagMenuDisplay->inhibitItemDescriptionPrint = FALSE; + sBagMenuDisplay->pocketScrollArrowsTask = 0xFF; + sBagMenuDisplay->pocketSwitchArrowsTask = 0xFF; + if (location == ITEMMENULOCATION_ITEMPC) + sBagMenuDisplay->pocketSwitchMode = 1; + else if (location == ITEMMENULOCATION_OLDMAN) + sBagMenuDisplay->pocketSwitchMode = 2; else - gUnknown_203AD10->field_05_0 = 0; + sBagMenuDisplay->pocketSwitchMode = 0; for (i = 0; i < 4; i++) { - gUnknown_203AD10->data[i] = 0; + sBagMenuDisplay->data[i] = 0; } - if (a1 == 0 || a1 == 1 || a1 == 2) - gUnknown_203ACFC.pocket = a1; + if (pocket == OPEN_BAG_ITEMS || pocket == OPEN_BAG_KEYITEMS || pocket == OPEN_BAG_POKEBALLS) + gBagMenuState.pocket = pocket; gTextFlags.autoScroll = FALSE; gSpecialVar_ItemId = ITEM_NONE; - SetMainCallback2(sub_8107F10); + SetMainCallback2(CB2_OpenBagMenu); } } void CB2_BagMenuFromStartMenu(void) { - GoToBagMenu(0, 3, CB2_ReturnToFieldWithOpenMenu); + GoToBagMenu(ITEMMENULOCATION_FIELD, OPEN_BAG_LAST, CB2_ReturnToFieldWithOpenMenu); } -void sub_8107ECC(void) +void CB2_BagMenuFromBattle(void) { - GoToBagMenu(5, 3, SetCB2ToReshowScreenAfterMenu2); + GoToBagMenu(ITEMMENULOCATION_BATTLE, OPEN_BAG_LAST, SetCB2ToReshowScreenAfterMenu2); } -void sub_8107EE0(void) +static void CB2_BagMenuRun(void) { RunTasks(); AnimateSprites(); @@ -365,27 +366,27 @@ void sub_8107EE0(void) UpdatePaletteFade(); } -void sub_8107EFC(void) +static void VBlankCB_BagMenuRun(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -void sub_8107F10(void) +static void CB2_OpenBagMenu(void) { while (1) { if ((u8)sub_80BF72C() == TRUE) break; - if (sub_8107F3C() == TRUE) + if (LoadBagMenuGraphics() == TRUE) break; if (MenuHelpers_LinkSomething() == TRUE) break; } } -bool8 sub_8107F3C(void) +static bool8 LoadBagMenuGraphics(void) { u8 taskId; @@ -425,76 +426,76 @@ bool8 sub_8107F3C(void) gMain.state++; break; case 7: - if (sub_81081D0()) + if (BagMenuInitBgsAndAllocTilemapBuffer()) { - gUnknown_203AD10->data[0] = 0; + sBagMenuDisplay->data[0] = 0; gMain.state++; } else { - sub_810813C(); + FadeOutOfBagMenu(); return TRUE; } break; case 8: - if (sub_8108240() == TRUE) + if (DoLoadBagGraphics() == TRUE) gMain.state++; break; case 9: - sub_810B858(); + InitBagWindows(); gMain.state++; break; case 10: - sub_8108E54(); - sub_8108A68(); - sub_8108A84(); + All_CalculateNItemsAndMaxShowed(); + CalculateInitialCursorPosAndItemsAbove(); + UpdatePocketScrollPositions(); gMain.state++; break; case 11: - if (!sub_81083F4()) + if (!TryAllocListMenuBuffers()) { - sub_810813C(); + FadeOutOfBagMenu(); return TRUE; } gMain.state++; break; case 12: - sub_810842C(gUnknown_203ACFC.pocket); + Bag_BuildListMenuTemplate(gBagMenuState.pocket); gMain.state++; break; case 13: - if (gUnknown_203ACFC.location != 3) - sub_81087EC(); + if (gBagMenuState.location != ITEMMENULOCATION_ITEMPC) + PrintBagPocketName(); else - sub_810B994(); + BagDrawDepositItemTextBox(); gMain.state++; break; case 14: - taskId = sub_8108388(gUnknown_203ACFC.location); - gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + taskId = CreateBagInputHandlerTask(gBagMenuState.location); + gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagMenuState.cursorPos[gBagMenuState.pocket], gBagMenuState.itemsAbove[gBagMenuState.pocket]); gTasks[taskId].data[3] = 0; gTasks[taskId].data[8] = 0; gMain.state++; break; case 15: - sub_80984FC(gUnknown_203ACFC.pocket); + CreateBagOrSatchelSprite(gBagMenuState.pocket); gMain.state++; break; case 16: - sub_8108888(); - sub_81088D8(); + CreatePocketScrollArrowPair(); + CreatePocketSwitchArrowPair(); gMain.state++; break; case 17: - sub_80985E4(); + ItemMenuIcons_CreateInsertIndicatorBarHidden(); gMain.state++; break; case 18: - sub_8108C10(); + ShowBagOrBeginWin0OpenTask(); gMain.state++; break; case 19: - if (gUnknown_203ACFC.location == 3) + if (gBagMenuState.location == ITEMMENULOCATION_ITEMPC) HelpSystem_SetSomeVariable2(29); else HelpSystem_SetSomeVariable2(9); @@ -502,50 +503,50 @@ bool8 sub_8107F3C(void) gMain.state++; break; default: - SetVBlankCallback(sub_8107EFC); - SetMainCallback2(sub_8107EE0); + SetVBlankCallback(VBlankCB_BagMenuRun); + SetMainCallback2(CB2_BagMenuRun); return TRUE; } return FALSE; } -void sub_810813C(void) +static void FadeOutOfBagMenu(void) { BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); - CreateTask(sub_8108178, 0); - SetVBlankCallback(sub_8107EFC); - SetMainCallback2(sub_8107EE0); + CreateTask(Task_WaitFadeOutOfBagMenu, 0); + SetVBlankCallback(VBlankCB_BagMenuRun); + SetMainCallback2(CB2_BagMenuRun); } -void sub_8108178(u8 taskId) +static void Task_WaitFadeOutOfBagMenu(u8 taskId) { if (!gPaletteFade.active) { - SetMainCallback2(gUnknown_203ACFC.bagCallback); - sub_8108B04(); + SetMainCallback2(gBagMenuState.bagCallback); + DestroyBagMenuResources(); DestroyTask(taskId); } } -void sub_81081AC(void) +static void NullBagMenuBufferPtrs(void) { - gUnknown_203AD10 = NULL; - gUnknown_203AD14 = NULL; - gUnknown_203AD18 = NULL; - gUnknown_203AD1C = NULL; + sBagMenuDisplay = NULL; + sBagBgTilemapBuffer = NULL; + sListMenuItems = NULL; + sListMenuItemStrings = NULL; } -bool8 sub_81081D0(void) +static bool8 BagMenuInitBgsAndAllocTilemapBuffer(void) { void **buff; ResetAllBgsCoordinatesAndBgCntRegs(); - buff = &gUnknown_203AD14; + buff = &sBagBgTilemapBuffer; *buff = Alloc(0x800); if (*buff == NULL) return FALSE; memset(*buff, 0, 0x800); ResetBgsAndClearDma3BusyFlags(FALSE); - InitBgsFromTemplates(0, gUnknown_8452CF4, NELEMS(gUnknown_8452CF4)); + InitBgsFromTemplates(0, sBgTemplates, NELEMS(sBgTemplates)); SetBgTilemapBuffer(1, *buff); ScheduleBgCopyTilemapToVram(1); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON); @@ -555,101 +556,101 @@ bool8 sub_81081D0(void) return TRUE; } -bool8 sub_8108240(void) +static bool8 DoLoadBagGraphics(void) { - switch (gUnknown_203AD10->data[0]) + switch (sBagMenuDisplay->data[0]) { case 0: ResetTempTileDataBuffers(); DecompressAndCopyTileDataToVram(1, gUnknown_8E830CC, 0, 0, 0); - gUnknown_203AD10->data[0]++; + sBagMenuDisplay->data[0]++; break; case 1: if (FreeTempTileDataBuffersIfPossible() != TRUE) { - if (gUnknown_203ACFC.location != 3) - LZDecompressWram(gUnknown_8E832C0, gUnknown_203AD14); + if (gBagMenuState.location != ITEMMENULOCATION_ITEMPC) + LZDecompressWram(gUnknown_8E832C0, sBagBgTilemapBuffer); else - LZDecompressWram(gUnknown_8E83444, gUnknown_203AD14); - gUnknown_203AD10->data[0]++; + LZDecompressWram(gUnknown_8E83444, sBagBgTilemapBuffer); + sBagMenuDisplay->data[0]++; } break; case 2: - LoadCompressedPalette(gUnknown_8E835B4, 0x00, 0x60); - if (!sub_810ADAC() && gSaveBlock2Ptr->playerGender != MALE) - LoadCompressedPalette(gUnknown_8E83604, 0x00, 0x20); - gUnknown_203AD10->data[0]++; + LoadCompressedPalette(gBagBgPalette, 0x00, 0x60); + if (!BagIsTutorial() && gSaveBlock2Ptr->playerGender != MALE) + LoadCompressedPalette(gBagBgPalette_FemaleOverride, 0x00, 0x20); + sBagMenuDisplay->data[0]++; break; case 3: - if (sub_810ADAC() == TRUE || gSaveBlock2Ptr->playerGender == MALE) - LoadCompressedSpriteSheet(&gUnknown_83D41E4); + if (BagIsTutorial() == TRUE || gSaveBlock2Ptr->playerGender == MALE) + LoadCompressedSpriteSheet(&gSpriteSheet_Backpack); else - LoadCompressedSpriteSheet(&gUnknown_83D41EC); - gUnknown_203AD10->data[0]++; + LoadCompressedSpriteSheet(&gSpriteSheet_Satchel); + sBagMenuDisplay->data[0]++; break; case 4: - LoadCompressedSpritePalette(&gUnknown_83D41F4); - gUnknown_203AD10->data[0]++; + LoadCompressedSpritePalette(&gSpritePalette_BagOrSatchel); + sBagMenuDisplay->data[0]++; break; case 5: LoadCompressedSpriteSheet(&gBagSwapSpriteSheet); - gUnknown_203AD10->data[0]++; + sBagMenuDisplay->data[0]++; break; default: LoadCompressedSpritePalette(&gBagSwapSpritePalette); - gUnknown_203AD10->data[0] = 0; + sBagMenuDisplay->data[0] = 0; return TRUE; } return FALSE; } -u8 sub_8108388(u8 location) +static u8 CreateBagInputHandlerTask(u8 location) { switch (location) { - case 6: - return CreateTask(sub_810AF9C, 0); - case 9: - return CreateTask(sub_810B1D4, 0); - case 10: - return CreateTask(sub_810B5D4, 0); - case 7: - return CreateTask(sub_810B4BC, 0); - case 8: - return CreateTask(sub_810B378, 0); + case ITEMMENULOCATION_OLDMAN: + return CreateTask(Task_Bag_OldManTutorial, 0); + case ITEMMENULOCATION_TTVSCR_REGISTER: + return CreateTask(Task_Bag_TeachyTvRegister, 0); + case ITEMMENULOCATION_TTVSCR_TMS: + return CreateTask(Task_Bag_TeachyTvTMs, 0); + case ITEMMENULOCATION_TTVSCR_STATUS: + return CreateTask(Task_Bag_TeachyTvStatus, 0); + case ITEMMENULOCATION_TTVSCR_CATCHING: + return CreateTask(Task_Bag_TeachyTvCatching, 0); default: - return CreateTask(sub_8108F0C, 0); + return CreateTask(Task_BagMenu_HandleInput, 0); } } -bool8 sub_81083F4(void) +static bool8 TryAllocListMenuBuffers(void) { - gUnknown_203AD18 = Alloc(43 * sizeof(struct ListMenuItem)); - if (gUnknown_203AD18 == NULL) + sListMenuItems = Alloc(43 * sizeof(struct ListMenuItem)); + if (sListMenuItems == NULL) return FALSE; - gUnknown_203AD1C = Alloc(43 * 19); - if (gUnknown_203AD1C == NULL) + sListMenuItemStrings = Alloc(43 * 19); + if (sListMenuItemStrings == NULL) return FALSE; return TRUE; } -void sub_810842C(u8 pocket) +static void Bag_BuildListMenuTemplate(u8 pocket) { u16 i; struct BagPocket * bagPocket = &gBagPockets[pocket]; - for (i = 0; i < gUnknown_203AD10->nItems[pocket]; i++) + for (i = 0; i < sBagMenuDisplay->nItems[pocket]; i++) { - sub_8108560(gUnknown_203AD1C[i], bagPocket->itemSlots[i].itemId); - gUnknown_203AD18[i].label = gUnknown_203AD1C[i]; - gUnknown_203AD18[i].index = i; + BagListMenuGetItemNameColored(sListMenuItemStrings[i], bagPocket->itemSlots[i].itemId); + sListMenuItems[i].label = sListMenuItemStrings[i]; + sListMenuItems[i].index = i; } - StringCopy(gUnknown_203AD1C[i], gUnknown_8452F60); - StringAppend(gUnknown_203AD1C[i], gFameCheckerText_Cancel); - gUnknown_203AD18[i].label = gUnknown_203AD1C[i]; - gUnknown_203AD18[i].index = i; - gMultiuseListMenuTemplate.items = gUnknown_203AD18; - gMultiuseListMenuTemplate.totalItems = gUnknown_203AD10->nItems[pocket] + 1; + StringCopy(sListMenuItemStrings[i], sListItemTextColor_RegularItem); + StringAppend(sListMenuItemStrings[i], gFameCheckerText_Cancel); + sListMenuItems[i].label = sListMenuItemStrings[i]; + sListMenuItems[i].index = i; + gMultiuseListMenuTemplate.items = sListMenuItems; + gMultiuseListMenuTemplate.totalItems = sBagMenuDisplay->nItems[pocket] + 1; gMultiuseListMenuTemplate.windowId = 0; gMultiuseListMenuTemplate.header_X = 0; gMultiuseListMenuTemplate.item_X = 9; @@ -657,80 +658,80 @@ void sub_810842C(u8 pocket) gMultiuseListMenuTemplate.lettersSpacing = 0; gMultiuseListMenuTemplate.itemVerticalPadding = 2; gMultiuseListMenuTemplate.upText_Y = 2; - gMultiuseListMenuTemplate.maxShowed = gUnknown_203AD10->maxShowed[pocket]; + gMultiuseListMenuTemplate.maxShowed = sBagMenuDisplay->maxShowed[pocket]; gMultiuseListMenuTemplate.fontId = 2; gMultiuseListMenuTemplate.cursorPal = 2; gMultiuseListMenuTemplate.fillValue = 0; gMultiuseListMenuTemplate.cursorShadowPal = 3; - gMultiuseListMenuTemplate.moveCursorFunc = sub_81085A4; - gMultiuseListMenuTemplate.itemPrintFunc = sub_8108654; + gMultiuseListMenuTemplate.moveCursorFunc = BagListMenuMoveCursorFunc; + gMultiuseListMenuTemplate.itemPrintFunc = BagListMenuItemPrintFunc; gMultiuseListMenuTemplate.cursorKind = 0; gMultiuseListMenuTemplate.scrollMultiple = 0; } -void sub_8108560(u8 *dest, u16 itemId) +static void BagListMenuGetItemNameColored(u8 *dest, u16 itemId) { if (itemId == ITEM_TM_CASE || itemId == ITEM_BERRY_POUCH) - StringCopy(dest, gUnknown_8452F66); + StringCopy(dest, sListItemTextColor_TmCase_BerryPouch); else - StringCopy(dest, gUnknown_8452F60); + StringCopy(dest, sListItemTextColor_RegularItem); StringAppend(dest, ItemId_GetName(itemId)); } -void sub_81085A4(s32 itemIndex, bool8 onInit, struct ListMenu *list) +static void BagListMenuMoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list) { if (onInit != TRUE) { PlaySE(SE_BAG1); sub_8098580(); } - if (gUnknown_203AD10->field_04 == 0xFF) + if (sBagMenuDisplay->itemOriginalLocation == 0xFF) { - DestroyItemMenuIcon(gUnknown_203AD10->itemMenuIcon ^ 1); - if (gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket] != itemIndex) - CreateItemMenuIcon(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemIndex), gUnknown_203AD10->itemMenuIcon); + DestroyItemMenuIcon(sBagMenuDisplay->itemMenuIcon ^ 1); + if (sBagMenuDisplay->nItems[gBagMenuState.pocket] != itemIndex) + CreateItemMenuIcon(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, itemIndex), sBagMenuDisplay->itemMenuIcon); else - CreateItemMenuIcon(ITEM_N_A, gUnknown_203AD10->itemMenuIcon); - gUnknown_203AD10->itemMenuIcon ^= 1; - if (gUnknown_203AD10->field_05_6 == 0) - sub_8108818(itemIndex); + CreateItemMenuIcon(ITEM_N_A, sBagMenuDisplay->itemMenuIcon); + sBagMenuDisplay->itemMenuIcon ^= 1; + if (!sBagMenuDisplay->inhibitItemDescriptionPrint) + PrintItemDescriptionOnMessageWindow(itemIndex); } } -void sub_8108654(u8 windowId, s32 itemId, u8 y) +static void BagListMenuItemPrintFunc(u8 windowId, s32 itemId, u8 y) { u16 bagItemId; u16 bagItemQuantity; - if (gUnknown_203AD10->field_04 != 0xFF) + if (sBagMenuDisplay->itemOriginalLocation != 0xFF) { - if (gUnknown_203AD10->field_04 == (u8)itemId) + if (sBagMenuDisplay->itemOriginalLocation == (u8)itemId) bag_menu_print_cursor(y, 2); else bag_menu_print_cursor(y, 0xFF); } - if (itemId != -2 && gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket] != itemId) + if (itemId != -2 && sBagMenuDisplay->nItems[gBagMenuState.pocket] != itemId) { - bagItemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemId); - bagItemQuantity = BagGetQuantityByPocketPosition(gUnknown_203ACFC.pocket + 1, itemId); - if (gUnknown_203ACFC.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(bagItemId)) + bagItemId = BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, itemId); + bagItemQuantity = BagGetQuantityByPocketPosition(gBagMenuState.pocket + 1, itemId); + if (gBagMenuState.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(bagItemId)) { ConvertIntToDecimalStringN(gStringVar1, bagItemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - sub_810B8F0(windowId, 0, gStringVar4, 0x6e, y, 0, 0, 0xFF, 1); + BagPrintTextOnWindow(windowId, 0, gStringVar4, 0x6e, y, 0, 0, 0xFF, 1); } else if (gSaveBlock1Ptr->registeredItem != ITEM_NONE && gSaveBlock1Ptr->registeredItem == bagItemId) { - BlitBitmapToWindow(windowId, gUnknown_8452F7C, 0x70, y, 0x18, 0x10); + BlitBitmapToWindow(windowId, sBlit_SelectButton, 0x70, y, 0x18, 0x10); } } } -void bag_menu_print_cursor_(u8 taskId, u8 colorIdx) +static void bag_menu_print_cursor_(u8 taskId, u8 colorIdx) { bag_menu_print_cursor(ListMenuGetYCoordForPrintingArrowCursor(taskId), colorIdx); } -void bag_menu_print_cursor(u8 y, u8 colorIdx) +static void bag_menu_print_cursor(u8 y, u8 colorIdx) { if (colorIdx == 0xFF) { @@ -738,53 +739,53 @@ void bag_menu_print_cursor(u8 y, u8 colorIdx) } else { - sub_810B8F0(0, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, colorIdx); + BagPrintTextOnWindow(0, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, colorIdx); } } -void sub_81087EC(void) +static void PrintBagPocketName(void) { FillWindowPixelBuffer(2, PIXEL_FILL(0)); - sub_810B958(sPocketNames[gUnknown_203ACFC.pocket], gUnknown_203ACFC.pocket); + BagPrintTextOnWin1CenteredColor0(sPocketNames[gBagMenuState.pocket], gBagMenuState.pocket); } -void sub_8108818(s32 itemIndex) +static void PrintItemDescriptionOnMessageWindow(s32 itemIndex) { const u8 *description; - if (itemIndex != gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket]) - description = ItemId_GetDescription(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, itemIndex)); + if (itemIndex != sBagMenuDisplay->nItems[gBagMenuState.pocket]) + description = ItemId_GetDescription(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, itemIndex)); else description = gText_CloseBag; FillWindowPixelBuffer(1, PIXEL_FILL(0)); - sub_810B8F0(1, 2, description, 0, 3, 2, 0, 0, 0); + BagPrintTextOnWindow(1, 2, description, 0, 3, 2, 0, 0, 0); } -void sub_8108888(void) +static void CreatePocketScrollArrowPair(void) { - gUnknown_203AD10->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized( + sBagMenuDisplay->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized( SCROLL_ARROW_UP, 160, 8, 104, - gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket] - gUnknown_203AD10->maxShowed[gUnknown_203ACFC.pocket] + 1, + sBagMenuDisplay->nItems[gBagMenuState.pocket] - sBagMenuDisplay->maxShowed[gBagMenuState.pocket] + 1, 110, 110, - &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket] + &gBagMenuState.cursorPos[gBagMenuState.pocket] ); } -void sub_81088D8(void) +static void CreatePocketSwitchArrowPair(void) { - if (gUnknown_203AD10->field_05_0 != 1) + if (sBagMenuDisplay->pocketSwitchMode != 1) { - gUnknown_203AD10->pocketSwitchArrowsTask = AddScrollIndicatorArrowPair(&gUnknown_8452F6C, &gUnknown_203ACFC.pocket); + sBagMenuDisplay->pocketSwitchArrowsTask = AddScrollIndicatorArrowPair(&sPocketSwitchArrowPairTemplate, &gBagMenuState.pocket); } } -void sub_8108908(void) +static void CreatePocketScrollArrowPair_SellQuantity(void) { - gUnknown_203AD10->contextMenuSelectedItem = 1; - gUnknown_203AD10->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized( + sBagMenuDisplay->contextMenuSelectedItem = 1; + sBagMenuDisplay->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized( SCROLL_ARROW_UP, 152, 72, @@ -792,14 +793,14 @@ void sub_8108908(void) 2, 110, 110, - &gUnknown_203AD10->contextMenuSelectedItem + &sBagMenuDisplay->contextMenuSelectedItem ); } -void sub_8108940(void) +static void CreateArrowPair_QuantitySelect(void) { - gUnknown_203AD10->contextMenuSelectedItem = 1; - gUnknown_203AD10->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized( + sBagMenuDisplay->contextMenuSelectedItem = 1; + sBagMenuDisplay->pocketScrollArrowsTask = AddScrollIndicatorArrowPairParameterized( SCROLL_ARROW_UP, 212, 120, @@ -807,115 +808,115 @@ void sub_8108940(void) 2, 110, 110, - &gUnknown_203AD10->contextMenuSelectedItem + &sBagMenuDisplay->contextMenuSelectedItem ); } -void sub_8108978(void) +static void BagDestroyPocketScrollArrowPair(void) { - if (gUnknown_203AD10->pocketScrollArrowsTask != 0xFF) + if (sBagMenuDisplay->pocketScrollArrowsTask != 0xFF) { - RemoveScrollIndicatorArrowPair(gUnknown_203AD10->pocketScrollArrowsTask); - gUnknown_203AD10->pocketScrollArrowsTask = 0xFF; + RemoveScrollIndicatorArrowPair(sBagMenuDisplay->pocketScrollArrowsTask); + sBagMenuDisplay->pocketScrollArrowsTask = 0xFF; } - sub_810899C(); + BagDestroyPocketSwitchArrowPair(); } -void sub_810899C(void) +static void BagDestroyPocketSwitchArrowPair(void) { - if (gUnknown_203AD10->pocketSwitchArrowsTask != 0xFF) + if (sBagMenuDisplay->pocketSwitchArrowsTask != 0xFF) { - RemoveScrollIndicatorArrowPair(gUnknown_203AD10->pocketSwitchArrowsTask); - gUnknown_203AD10->pocketSwitchArrowsTask = 0xFF; + RemoveScrollIndicatorArrowPair(sBagMenuDisplay->pocketSwitchArrowsTask); + sBagMenuDisplay->pocketSwitchArrowsTask = 0xFF; } } -void sub_81089BC(void) +void ResetBagCursorPositions(void) { u8 i; - gUnknown_203ACFC.pocket = POCKET_ITEMS - 1; - gUnknown_203ACFC.unk5 = 0; + gBagMenuState.pocket = POCKET_ITEMS - 1; + gBagMenuState.bagOpen = 0; for (i = 0; i < 3; i++) { - gUnknown_203ACFC.itemsAbove[i] = 0; - gUnknown_203ACFC.cursorPos[i] = 0; + gBagMenuState.itemsAbove[i] = 0; + gBagMenuState.cursorPos[i] = 0; } } -void sub_81089F4(u8 pocketId) +void PocketCalculateInitialCursorPosAndItemsAbove(u8 pocketId) { - if (gUnknown_203ACFC.cursorPos[pocketId] != 0 && gUnknown_203ACFC.cursorPos[pocketId] + gUnknown_203AD10->maxShowed[pocketId] > gUnknown_203AD10->nItems[pocketId] + 1) + if (gBagMenuState.cursorPos[pocketId] != 0 && gBagMenuState.cursorPos[pocketId] + sBagMenuDisplay->maxShowed[pocketId] > sBagMenuDisplay->nItems[pocketId] + 1) { - gUnknown_203ACFC.cursorPos[pocketId] = (gUnknown_203AD10->nItems[pocketId] + 1) - gUnknown_203AD10->maxShowed[pocketId]; + gBagMenuState.cursorPos[pocketId] = (sBagMenuDisplay->nItems[pocketId] + 1) - sBagMenuDisplay->maxShowed[pocketId]; } - if (gUnknown_203ACFC.cursorPos[pocketId] + gUnknown_203ACFC.itemsAbove[pocketId] >= gUnknown_203AD10->nItems[pocketId] + 1) + if (gBagMenuState.cursorPos[pocketId] + gBagMenuState.itemsAbove[pocketId] >= sBagMenuDisplay->nItems[pocketId] + 1) { - if (gUnknown_203AD10->nItems[pocketId] + 1 < 2) - gUnknown_203ACFC.itemsAbove[pocketId] = 0; + if (sBagMenuDisplay->nItems[pocketId] + 1 < 2) + gBagMenuState.itemsAbove[pocketId] = 0; else - gUnknown_203ACFC.itemsAbove[pocketId] = gUnknown_203AD10->nItems[pocketId]; + gBagMenuState.itemsAbove[pocketId] = sBagMenuDisplay->nItems[pocketId]; } } -void sub_8108A68(void) +static void CalculateInitialCursorPosAndItemsAbove(void) { u8 i; for (i = 0; i < 3; i++) { - sub_81089F4(i); + PocketCalculateInitialCursorPosAndItemsAbove(i); } } -void sub_8108A84(void) +static void UpdatePocketScrollPositions(void) { u8 i; u8 j; for (i = 0; i < 3; i++) { - if (gUnknown_203ACFC.itemsAbove[i] > 3) + if (gBagMenuState.itemsAbove[i] > 3) { - for (j = 0; j <= gUnknown_203ACFC.itemsAbove[i] - 3; gUnknown_203ACFC.itemsAbove[i]--, gUnknown_203ACFC.cursorPos[i]++, j++) + for (j = 0; j <= gBagMenuState.itemsAbove[i] - 3; gBagMenuState.itemsAbove[i]--, gBagMenuState.cursorPos[i]++, j++) { - if (gUnknown_203ACFC.cursorPos[i] + gUnknown_203AD10->maxShowed[i] == gUnknown_203AD10->nItems[i] + 1) + if (gBagMenuState.cursorPos[i] + sBagMenuDisplay->maxShowed[i] == sBagMenuDisplay->nItems[i] + 1) break; } } } } -void sub_8108B04(void) +static void DestroyBagMenuResources(void) { - FREE_IF_SET(gUnknown_203AD10); - FREE_IF_SET(gUnknown_203AD14); - FREE_IF_SET(gUnknown_203AD18); - FREE_IF_SET(gUnknown_203AD1C); + FREE_IF_SET(sBagMenuDisplay); + FREE_IF_SET(sBagBgTilemapBuffer); + FREE_IF_SET(sListMenuItems); + FREE_IF_SET(sListMenuItemStrings); FreeAllWindowBuffers(); } void ItemMenu_StartFadeToExitCallback(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); - gTasks[taskId].func = sub_8108B8C; + gTasks[taskId].func = Task_ItemMenu_WaitFadeAndSwitchToExitCallback; } -void sub_8108B8C(u8 taskId) +static void Task_ItemMenu_WaitFadeAndSwitchToExitCallback(u8 taskId) { s16 *data = gTasks[taskId].data; - if (!gPaletteFade.active && FuncIsActiveTask(sub_8108CFC) != TRUE) + if (!gPaletteFade.active && FuncIsActiveTask(Task_AnimateWin0v) != TRUE) { - DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - if (gUnknown_203AD10->exitCB != NULL) - SetMainCallback2(gUnknown_203AD10->exitCB); + DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); + if (sBagMenuDisplay->exitCB != NULL) + SetMainCallback2(sBagMenuDisplay->exitCB); else - SetMainCallback2(gUnknown_203ACFC.bagCallback); - sub_8108978(); - sub_8108B04(); + SetMainCallback2(gBagMenuState.bagCallback); + BagDestroyPocketScrollArrowPair(); + DestroyBagMenuResources(); DestroyTask(taskId); } } -void sub_8108C10(void) +static void ShowBagOrBeginWin0OpenTask(void) { u16 paldata = RGB_BLACK; u8 taskId; @@ -925,7 +926,7 @@ void sub_8108C10(void) SetGpuReg(REG_OFFSET_WINOUT, 0x3F); BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - if (gUnknown_203ACFC.unk5 == 1) + if (gBagMenuState.bagOpen == 1) { SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 240)); SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 0)); @@ -934,28 +935,28 @@ void sub_8108C10(void) { SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 240)); SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 160)); - taskId = CreateTask(sub_8108CFC, 0); + taskId = CreateTask(Task_AnimateWin0v, 0); gTasks[taskId].data[0] = 192; gTasks[taskId].data[1] = -16; - gUnknown_203ACFC.unk5 = 1; + gBagMenuState.bagOpen = 1; } } -void sub_8108CB4(void) +void Bag_BeginCloseWin0Animation(void) { - u8 taskId = CreateTask(sub_8108CFC, 0); + u8 taskId = CreateTask(Task_AnimateWin0v, 0); gTasks[taskId].data[0] = -16; gTasks[taskId].data[1] = 16; - gUnknown_203ACFC.unk5 = 0; + gBagMenuState.bagOpen = 0; } void CB2_SetUpReshowBattleScreenAfterMenu(void) { - gUnknown_203ACFC.unk5 = 0; + gBagMenuState.bagOpen = 0; } -void sub_8108CFC(u8 taskId) +static void Task_AnimateWin0v(u8 taskId) { s16 *data = gTasks[taskId].data; data[0] += data[1]; @@ -993,35 +994,35 @@ void MoveItemSlotInList(struct ItemSlot * itemSlots_, u32 from, u32 to_) } } -void sub_8108DC8(u8 pocketId) +void Pocket_CalculateNItemsAndMaxShowed(u8 pocketId) { u16 i; struct BagPocket * pocket = &gBagPockets[pocketId]; BagPocketCompaction(pocket->itemSlots, pocket->capacity); - gUnknown_203AD10->nItems[pocketId] = 0; + sBagMenuDisplay->nItems[pocketId] = 0; for (i = 0; i < pocket->capacity; i++) { if (pocket->itemSlots[i].itemId == ITEM_NONE) break; - gUnknown_203AD10->nItems[pocketId]++; + sBagMenuDisplay->nItems[pocketId]++; } - if (gUnknown_203AD10->nItems[pocketId] + 1 > 6) - gUnknown_203AD10->maxShowed[pocketId] = 6; + if (sBagMenuDisplay->nItems[pocketId] + 1 > 6) + sBagMenuDisplay->maxShowed[pocketId] = 6; else - gUnknown_203AD10->maxShowed[pocketId] = gUnknown_203AD10->nItems[pocketId] + 1; + sBagMenuDisplay->maxShowed[pocketId] = sBagMenuDisplay->nItems[pocketId] + 1; } -void sub_8108E54(void) +static void All_CalculateNItemsAndMaxShowed(void) { u8 i; for (i = 0; i < 3; i++) - sub_8108DC8(i); + Pocket_CalculateNItemsAndMaxShowed(i); } void DisplayItemMessageInBag(u8 taskId, u8 fontId, const u8 * string, TaskFunc followUpFunc) { s16 *data = gTasks[taskId].data; - data[10] = sub_810BA70(5); + data[10] = OpenBagWindow(5); FillWindowPixelBuffer(data[10], PIXEL_FILL(1)); DisplayMessageAndContinueTask(taskId, data[10], 0x06D, 0x0D, fontId, GetTextSpeedSetting(), string, followUpFunc); ScheduleBgCopyTilemapToVram(0); @@ -1029,15 +1030,15 @@ void DisplayItemMessageInBag(u8 taskId, u8 fontId, const u8 * string, TaskFunc f void ItemMenu_SetExitCallback(MainCallback cb) { - gUnknown_203AD10->exitCB = cb; + sBagMenuDisplay->exitCB = cb; } -u8 sub_8108EEC(u8 a0) +static u8 GetSelectedItemIndex(u8 pocket) { - return gUnknown_203ACFC.cursorPos[a0] + gUnknown_203ACFC.itemsAbove[a0]; + return gBagMenuState.cursorPos[pocket] + gBagMenuState.itemsAbove[pocket]; } -void sub_8108F0C(u8 taskId) +static void Task_BagMenu_HandleInput(u8 taskId) { s16 *data = gTasks[taskId].data; u16 cursorPos; @@ -1046,33 +1047,33 @@ void sub_8108F0C(u8 taskId) if (gPaletteFade.active) return; - if (FuncIsActiveTask(sub_8108CFC) == TRUE) + if (FuncIsActiveTask(Task_AnimateWin0v) == TRUE) return; if ((u8)sub_80BF72C() == TRUE) return; - switch (sub_8109168(taskId, gUnknown_203ACFC.pocket)) + switch (ProcessPocketSwitchInput(taskId, gBagMenuState.pocket)) { case 1: - sub_81091D0(taskId, -1, FALSE); + SwitchPockets(taskId, -1, FALSE); return; case 2: - sub_81091D0(taskId, 1, FALSE); + SwitchPockets(taskId, 1, FALSE); return; default: - if (JOY_NEW(SELECT_BUTTON) && gUnknown_203ACFC.location == 0) + if (JOY_NEW(SELECT_BUTTON) && gBagMenuState.location == ITEMMENULOCATION_FIELD) { ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); - if (cursorPos + itemsAbove != gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket]) + if (cursorPos + itemsAbove != sBagMenuDisplay->nItems[gBagMenuState.pocket]) { PlaySE(SE_SELECT); - sub_81093B8(taskId, cursorPos + itemsAbove); + BeginMovingItemInPocket(taskId, cursorPos + itemsAbove); return; } } break; } input = ListMenu_ProcessInput(data[0]); - ListMenuGetScrollAndRow(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + ListMenuGetScrollAndRow(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); switch (input) { case LIST_NOTHING_CHOSEN: @@ -1080,54 +1081,54 @@ void sub_8108F0C(u8 taskId) case LIST_CANCEL: PlaySE(SE_SELECT); gSpecialVar_ItemId = ITEM_NONE; - sub_8108CB4(); + Bag_BeginCloseWin0Animation(); gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; break; default: PlaySE(SE_SELECT); - if (input == gUnknown_203AD10->nItems[gUnknown_203ACFC.pocket]) + if (input == sBagMenuDisplay->nItems[gBagMenuState.pocket]) { gSpecialVar_ItemId = ITEM_NONE; - sub_8108CB4(); + Bag_BeginCloseWin0Animation(); gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; } else { - sub_8108978(); + BagDestroyPocketScrollArrowPair(); bag_menu_print_cursor_(data[0], 2); data[1] = input; - data[2] = BagGetQuantityByPocketPosition(gUnknown_203ACFC.pocket + 1, input); - gSpecialVar_ItemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, input); - gTasks[taskId].func = sub_81090DC; + data[2] = BagGetQuantityByPocketPosition(gBagMenuState.pocket + 1, input); + gSpecialVar_ItemId = BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, input); + gTasks[taskId].func = Task_ItemContextMenuByLocation; } break; } } -void sub_81090DC(u8 taskId) +static void Task_ItemContextMenuByLocation(u8 taskId) { - sub_8109140(1); - gUnknown_8452F34[gUnknown_203ACFC.location](taskId); + Bag_FillMessageBoxWithPalette(1); + sItemContextTaskFuncs[gBagMenuState.location](taskId); } -void sub_810910C(u8 taskId) +static void Task_RedrawArrowsAndReturnToBagMenuSelect(u8 taskId) { - sub_8109140(0); - sub_8108888(); - sub_81088D8(); - gTasks[taskId].func = sub_8108F0C; + Bag_FillMessageBoxWithPalette(0); + CreatePocketScrollArrowPair(); + CreatePocketSwitchArrowPair(); + gTasks[taskId].func = Task_BagMenu_HandleInput; } -void sub_8109140(u32 a0) +static void Bag_FillMessageBoxWithPalette(u32 a0) { SetBgTilemapPalette(1, 0, 14, 30, 6, a0 + 1); ScheduleBgCopyTilemapToVram(1); } -u8 sub_8109168(u8 taskId, u8 pocketId) +static u8 ProcessPocketSwitchInput(u8 taskId, u8 pocketId) { u8 lrState; - if (gUnknown_203AD10->field_05_0 != 0) + if (sBagMenuDisplay->pocketSwitchMode != 0) return 0; lrState = GetLRKeysState(); if (JOY_NEW(DPAD_LEFT) || lrState == 1) @@ -1147,7 +1148,7 @@ u8 sub_8109168(u8 taskId, u8 pocketId) return 0; } -void sub_81091D0(u8 taskId, s16 direction, bool16 a2) +static void SwitchPockets(u8 taskId, s16 direction, bool16 a2) { s16 *data = gTasks[taskId].data; data[13] = 0; @@ -1158,33 +1159,33 @@ void sub_81091D0(u8 taskId, s16 direction, bool16 a2) ClearWindowTilemap(0); ClearWindowTilemap(1); ClearWindowTilemap(2); - DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); ScheduleBgCopyTilemapToVram(0); - DestroyItemMenuIcon(gUnknown_203AD10->itemMenuIcon ^ 1); - sub_8108978(); + DestroyItemMenuIcon(sBagMenuDisplay->itemMenuIcon ^ 1); + BagDestroyPocketScrollArrowPair(); } FillBgTilemapBufferRect_Palette0(1, 0x02D, 11, 1, 18, 12); ScheduleBgCopyTilemapToVram(1); - sub_8098528(gUnknown_203ACFC.pocket + direction); - SetTaskFuncWithFollowupFunc(taskId, sub_8109298, gTasks[taskId].func); + sub_8098528(gBagMenuState.pocket + direction); + SetTaskFuncWithFollowupFunc(taskId, Task_AnimateSwitchPockets, gTasks[taskId].func); } -void sub_8109298(u8 taskId) +static void Task_AnimateSwitchPockets(u8 taskId) { s16 *data = gTasks[taskId].data; - if (!MenuHelpers_LinkSomething() && !sub_810ADAC()) + if (!MenuHelpers_LinkSomething() && !BagIsTutorial()) { - switch (sub_8109168(taskId, gUnknown_203ACFC.pocket + data[11])) + switch (ProcessPocketSwitchInput(taskId, gBagMenuState.pocket + data[11])) { case 1: - gUnknown_203ACFC.pocket += data[11]; + gBagMenuState.pocket += data[11]; SwitchTaskToFollowupFunc(taskId); - sub_81091D0(taskId, -1, TRUE); + SwitchPockets(taskId, -1, TRUE); return; case 2: - gUnknown_203ACFC.pocket += data[11]; + gBagMenuState.pocket += data[11]; SwitchTaskToFollowupFunc(taskId); - sub_81091D0(taskId, 1, TRUE); + SwitchPockets(taskId, 1, TRUE); return; } } @@ -1194,7 +1195,7 @@ void sub_8109298(u8 taskId) if (data[12] != 0x7FFF) { data[12]++; - sub_8109854(data[12]); + CopyBagListBgTileRowToTilemapBuffer(data[12]); if (data[12] == 12) data[12] = 0x7FFF; } @@ -1202,21 +1203,21 @@ void sub_8109298(u8 taskId) data[13]++; break; case 1: - gUnknown_203ACFC.pocket += data[11]; - sub_81087EC(); - sub_810842C(gUnknown_203ACFC.pocket); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + gBagMenuState.pocket += data[11]; + PrintBagPocketName(); + Bag_BuildListMenuTemplate(gBagMenuState.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagMenuState.cursorPos[gBagMenuState.pocket], gBagMenuState.itemsAbove[gBagMenuState.pocket]); PutWindowTilemap(1); PutWindowTilemap(2); ScheduleBgCopyTilemapToVram(0); - sub_8108888(); - sub_81088D8(); + CreatePocketScrollArrowPair(); + CreatePocketSwitchArrowPair(); SwitchTaskToFollowupFunc(taskId); break; } } -void sub_81093B8(u8 taskId, s16 itemIndex) +static void BeginMovingItemInPocket(u8 taskId, s16 itemIndex) { u16 itemsAbove; u16 cursorPos; @@ -1224,19 +1225,19 @@ void sub_81093B8(u8 taskId, s16 itemIndex) ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); ListMenuSetUnkIndicatorsStructField(data[0], 0x10, 1); data[1] = itemIndex; - gUnknown_203AD10->field_04 = itemIndex; - StringCopy(gStringVar1, ItemId_GetName(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]))); + sBagMenuDisplay->itemOriginalLocation = itemIndex; + StringCopy(gStringVar1, ItemId_GetName(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1]))); StringExpandPlaceholders(gStringVar4, gOtherText_WhereShouldTheStrVar1BePlaced); FillWindowPixelBuffer(1, PIXEL_FILL(0)); - sub_810B8F0(1, 2, gStringVar4, 0, 3, 2, 0, 0, 0); - sub_80986A8(0, ListMenuGetYCoordForPrintingArrowCursor(data[0])); - sub_8098660(0); - sub_810899C(); + BagPrintTextOnWindow(1, 2, gStringVar4, 0, 3, 2, 0, 0, 0); + ItemMenuIcons_MoveInsertIndicatorBar(0, ListMenuGetYCoordForPrintingArrowCursor(data[0])); + ItemMenuIcons_ToggleInsertIndicatorBarVisibility(FALSE); + BagDestroyPocketSwitchArrowPair(); bag_menu_print_cursor_(data[0], 2); - gTasks[taskId].func = sub_81094B0; + gTasks[taskId].func = Task_MoveItemInPocket_HandleInput; } -void sub_81094B0(u8 taskId) +static void Task_MoveItemInPocket_HandleInput(u8 taskId) { s16 *data = gTasks[taskId].data; s32 input; @@ -1245,14 +1246,14 @@ void sub_81094B0(u8 taskId) if ((u8)sub_80BF72C() == TRUE) return; input = ListMenu_ProcessInput(data[0]); - ListMenuGetScrollAndRow(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - sub_80986A8(0, ListMenuGetYCoordForPrintingArrowCursor(data[0])); + ListMenuGetScrollAndRow(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); + ItemMenuIcons_MoveInsertIndicatorBar(0, ListMenuGetYCoordForPrintingArrowCursor(data[0])); if (JOY_NEW(SELECT_BUTTON)) { PlaySE(SE_SELECT); - gUnknown_203AD10->field_04 = 0xFF; + sBagMenuDisplay->itemOriginalLocation = 0xFF; ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); - sub_81095AC(taskId, cursorPos + itemsAbove); + ExecuteMoveItemInPocket(taskId, cursorPos + itemsAbove); return; } switch (input) @@ -1261,163 +1262,163 @@ void sub_81094B0(u8 taskId) return; case LIST_CANCEL: PlaySE(SE_SELECT); - gUnknown_203AD10->field_04 = 0xFF; + sBagMenuDisplay->itemOriginalLocation = 0xFF; ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); - sub_810967C(taskId, cursorPos + itemsAbove); + AbortMovingItemInPocket(taskId, cursorPos + itemsAbove); break; default: PlaySE(SE_SELECT); - gUnknown_203AD10->field_04 = 0xFF; - sub_81095AC(taskId, input); + sBagMenuDisplay->itemOriginalLocation = 0xFF; + ExecuteMoveItemInPocket(taskId, input); break; } } -void sub_81095AC(u8 taskId, u32 itemIndex) +static void ExecuteMoveItemInPocket(u8 taskId, u32 itemIndex) { s16 *data = gTasks[taskId].data; if (data[1] == itemIndex || data[1] == itemIndex - 1) { - sub_810967C(taskId, itemIndex); + AbortMovingItemInPocket(taskId, itemIndex); } else { - MoveItemSlotInList(gBagPockets[gUnknown_203ACFC.pocket].itemSlots, data[1], itemIndex); - DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + MoveItemSlotInList(gBagPockets[gBagMenuState.pocket].itemSlots, data[1], itemIndex); + DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); if (data[1] < itemIndex) - gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]--; - sub_810842C(gUnknown_203ACFC.pocket); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - sub_8098660(1); - sub_81088D8(); - gTasks[taskId].func = sub_8108F0C; + gBagMenuState.itemsAbove[gBagMenuState.pocket]--; + Bag_BuildListMenuTemplate(gBagMenuState.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagMenuState.cursorPos[gBagMenuState.pocket], gBagMenuState.itemsAbove[gBagMenuState.pocket]); + ItemMenuIcons_ToggleInsertIndicatorBarVisibility(TRUE); + CreatePocketSwitchArrowPair(); + gTasks[taskId].func = Task_BagMenu_HandleInput; } } -void sub_810967C(u8 taskId, u32 itemIndex) +static void AbortMovingItemInPocket(u8 taskId, u32 itemIndex) { s16 *data = gTasks[taskId].data; - DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); if (data[1] < itemIndex) - gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]--; - sub_810842C(gUnknown_203ACFC.pocket); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - sub_8098660(1); - sub_81088D8(); - gTasks[taskId].func = sub_8108F0C; + gBagMenuState.itemsAbove[gBagMenuState.pocket]--; + Bag_BuildListMenuTemplate(gBagMenuState.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagMenuState.cursorPos[gBagMenuState.pocket], gBagMenuState.itemsAbove[gBagMenuState.pocket]); + ItemMenuIcons_ToggleInsertIndicatorBarVisibility(TRUE); + CreatePocketSwitchArrowPair(); + gTasks[taskId].func = Task_BagMenu_HandleInput; } -void sub_810971C(u16 cursorPos, const u8 *str) +static void InitQuantityToTossOrDeposit(u16 cursorPos, const u8 *str) { u8 r4; - u8 r5 = sub_810B9DC(6, 2); - CopyItemName(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, cursorPos), gStringVar1); + u8 r5 = ShowBagWindow(6, 2); + CopyItemName(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, cursorPos), gStringVar1); StringExpandPlaceholders(gStringVar4, str); - sub_810B8F0(r5, 2, gStringVar4, 0, 2, 1, 0, 0, 1); - r4 = sub_810B9DC(0, 0); + BagPrintTextOnWindow(r5, 2, gStringVar4, 0, 2, 1, 0, 0, 1); + r4 = ShowBagWindow(0, 0); ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - sub_810B8F0(r4, 0, gStringVar4, 4, 10, 1, 0, 0, 1); - sub_8108940(); + BagPrintTextOnWindow(r4, 0, gStringVar4, 4, 10, 1, 0, 0, 1); + CreateArrowPair_QuantitySelect(); } -void sub_81097E4(s16 value, u8 ndigits) +static void UpdateQuantityToTossOrDeposit(s16 value, u8 ndigits) { - u8 r6 = sub_810BAD8(0); + u8 r6 = GetBagWindow(0); FillWindowPixelBuffer(r6, PIXEL_FILL(1)); ConvertIntToDecimalStringN(gStringVar1, value, STR_CONV_MODE_LEADING_ZEROS, ndigits); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - sub_810B8F0(r6, 0, gStringVar4, 4, 10, 1, 0, 0, 1); + BagPrintTextOnWindow(r6, 0, gStringVar4, 4, 10, 1, 0, 0, 1); } -void sub_8109854(u8 a0) +static void CopyBagListBgTileRowToTilemapBuffer(u8 frame) { - CopyToBgTilemapBufferRect(1, gUnknown_8452D08[12 - a0], 11, 13 - a0, 18, 1); + CopyToBgTilemapBufferRect(1, sBagListBgTiles[12 - frame], 11, 13 - frame, 18, 1); ScheduleBgCopyTilemapToVram(1); } -void sub_8109890(u8 taskId) +static void OpenContextMenu(u8 taskId) { u8 r6; u8 r4; - switch (gUnknown_203ACFC.location) + switch (gBagMenuState.location) { - case 5: - case 7: + case ITEMMENULOCATION_BATTLE: + case ITEMMENULOCATION_TTVSCR_STATUS: if (gSpecialVar_ItemId == ITEM_BERRY_POUCH) { - gUnknown_203AD20[0] = ITEMMENUACTION_OPEN_BERRIES; - gUnknown_203AD20[1] = ITEMMENUACTION_CANCEL; - gUnknown_203AD24 = gUnknown_203AD20; - gUnknown_203AD28 = 2; + sContextMenuItemsBuffer[0] = ITEMMENUACTION_OPEN_BERRIES; + sContextMenuItemsBuffer[1] = ITEMMENUACTION_CANCEL; + sContextMenuItemsPtr = sContextMenuItemsBuffer; + sContextMenuNumItems = 2; } else if (ItemId_GetBattleUsage(gSpecialVar_ItemId)) { - gUnknown_203AD24 = gUnknown_8452F30; - gUnknown_203AD28 = 2; + sContextMenuItemsPtr = sContextMenuItems_BattleUse; + sContextMenuNumItems = 2; } else { - gUnknown_203AD24 = gUnknown_8452F32; - gUnknown_203AD28 = 1; + sContextMenuItemsPtr = sContextMenuItems_Cancel; + sContextMenuNumItems = 1; } break; - case 6: - case 8: - gUnknown_203AD24 = gUnknown_8452F30; - gUnknown_203AD28 = 2; + case ITEMMENULOCATION_OLDMAN: + case ITEMMENULOCATION_TTVSCR_CATCHING: + sContextMenuItemsPtr = sContextMenuItems_BattleUse; + sContextMenuNumItems = 2; break; default: if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE) { if (gSpecialVar_ItemId == ITEM_TM_CASE || gSpecialVar_ItemId == ITEM_BERRY_POUCH) { - gUnknown_203AD24 = gUnknown_8452F2E; - gUnknown_203AD28 = 2; + sContextMenuItemsPtr = sContextMenuItems_Open; + sContextMenuNumItems = 2; } else { - if (gUnknown_203ACFC.pocket == POCKET_KEY_ITEMS - 1) - gUnknown_203AD28 = 1; + if (gBagMenuState.pocket == POCKET_KEY_ITEMS - 1) + sContextMenuNumItems = 1; else - gUnknown_203AD28 = 2; - gUnknown_203AD24 = gUnknown_8452F28[gUnknown_203ACFC.pocket]; + sContextMenuNumItems = 2; + sContextMenuItemsPtr = sContextMenuItems_GiveIfNotKeyItemPocket[gBagMenuState.pocket]; } } else { - switch (gUnknown_203ACFC.pocket) + switch (gBagMenuState.pocket) { - case POCKET_ITEMS - 1: - gUnknown_203AD28 = 4; + case OPEN_BAG_ITEMS: + sContextMenuNumItems = 4; if (ItemIsMail(gSpecialVar_ItemId) == TRUE) - gUnknown_203AD24 = gUnknown_8452F24; + sContextMenuItemsPtr = sContextMenuItems_CheckGiveTossCancel; else - gUnknown_203AD24 = gUnknown_8452F18[gUnknown_203ACFC.pocket]; + sContextMenuItemsPtr = sContextMenuItems_Field[gBagMenuState.pocket]; break; - case POCKET_KEY_ITEMS - 1: - gUnknown_203AD24 = gUnknown_203AD20; - gUnknown_203AD28 = 3; - gUnknown_203AD20[2] = ITEMMENUACTION_CANCEL; + case OPEN_BAG_KEYITEMS: + sContextMenuItemsPtr = sContextMenuItemsBuffer; + sContextMenuNumItems = 3; + sContextMenuItemsBuffer[2] = ITEMMENUACTION_CANCEL; if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId) - gUnknown_203AD20[1] = ITEMMENUACTION_DESELECT; + sContextMenuItemsBuffer[1] = ITEMMENUACTION_DESELECT; else - gUnknown_203AD20[1] = ITEMMENUACTION_REGISTER; + sContextMenuItemsBuffer[1] = ITEMMENUACTION_REGISTER; if (gSpecialVar_ItemId == ITEM_TM_CASE || gSpecialVar_ItemId == ITEM_BERRY_POUCH) - gUnknown_203AD20[0] = ITEMMENUACTION_OPEN; + sContextMenuItemsBuffer[0] = ITEMMENUACTION_OPEN; else if (gSpecialVar_ItemId == ITEM_BICYCLE && TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE | PLAYER_AVATAR_FLAG_MACH_BIKE)) - gUnknown_203AD20[0] = ITEMMENUACTION_WALK; + sContextMenuItemsBuffer[0] = ITEMMENUACTION_WALK; else - gUnknown_203AD20[0] = ITEMMENUACTION_USE; + sContextMenuItemsBuffer[0] = ITEMMENUACTION_USE; break; - case POCKET_POKE_BALLS - 1: - gUnknown_203AD24 = gUnknown_8452F18[gUnknown_203ACFC.pocket]; - gUnknown_203AD28 = 3; + case OPEN_BAG_POKEBALLS: + sContextMenuItemsPtr = sContextMenuItems_Field[gBagMenuState.pocket]; + sContextMenuNumItems = 3; break; } } } - r6 = sub_810B9DC(10, gUnknown_203AD28 - 1); + r6 = ShowBagWindow(10, sContextMenuNumItems - 1); AddItemMenuActionTextPrinters( r6, 2, @@ -1425,24 +1426,24 @@ void sub_8109890(u8 taskId) 2, GetFontAttribute(2, FONTATTR_LETTER_SPACING), GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, - gUnknown_203AD28, - gUnknown_8452EB8, - gUnknown_203AD24 + sContextMenuNumItems, + sItemMenuContextActions, + sContextMenuItemsPtr ); - Menu_InitCursor(r6, 2, 0, 2, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, gUnknown_203AD28, 0); - r4 = sub_810B9DC(6, 0); + Menu_InitCursor(r6, 2, 0, 2, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, sContextMenuNumItems, 0); + r4 = ShowBagWindow(6, 0); CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gOtherText_StrVar1); - sub_810B8F0(r4, 2, gStringVar4, 0, 2, 1, 0, 0, 1); + BagPrintTextOnWindow(r4, 2, gStringVar4, 0, 2, 1, 0, 0, 1); } -void sub_8109BB8(u8 taskId) +static void Task_ItemContext_FieldOrBattle(u8 taskId) { - sub_8109890(taskId); - gTasks[taskId].func = sub_8109BE4; + OpenContextMenu(taskId); + gTasks[taskId].func = Task_FieldItemContextMenuHandleInput; } -void sub_8109BE4(u8 taskId) +static void Task_FieldItemContextMenuHandleInput(u8 taskId) { s8 input; if ((u8)sub_80BF72C() != TRUE) @@ -1452,244 +1453,244 @@ void sub_8109BE4(u8 taskId) { case -1: PlaySE(SE_SELECT); - gUnknown_8452EB8[ITEMMENUACTION_CANCEL].func.void_u8(taskId); + sItemMenuContextActions[ITEMMENUACTION_CANCEL].func.void_u8(taskId); break; case -2: break; default: PlaySE(SE_SELECT); - gUnknown_8452EB8[gUnknown_203AD24[input]].func.void_u8(taskId); + sItemMenuContextActions[sContextMenuItemsPtr[input]].func.void_u8(taskId); break; } } } -void Task_ItemMenuAction_Use(u8 taskId) +static void Task_ItemMenuAction_Use(u8 taskId) { if (ItemId_GetFieldFunc(gSpecialVar_ItemId) != NULL) { - sub_810BA3C(10); - sub_810BA3C(6); + HideBagWindow(10); + HideBagWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gSpecialVar_ItemId) == 1) - sub_810A170(taskId); + Task_PrintThereIsNoPokemon(taskId); else ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId); } } -void Task_ItemMenuAction_Toss(u8 taskId) +static void Task_ItemMenuAction_Toss(u8 taskId) { s16 *data = gTasks[taskId].data; - ClearWindowTilemap(sub_810BAD8(10)); - ClearWindowTilemap(sub_810BAD8(6)); - sub_810BA3C(10); - sub_810BA3C(6); + ClearWindowTilemap(GetBagWindow(10)); + ClearWindowTilemap(GetBagWindow(6)); + HideBagWindow(10); + HideBagWindow(6); PutWindowTilemap(0); data[8] = 1; if (data[2] == 1) { - sub_8109D38(taskId); + Task_ConfirmTossItems(taskId); } else { - sub_810971C(data[1], gText_TossOutHowManyStrVar1s); - gTasks[taskId].func = sub_8109DEC; + InitQuantityToTossOrDeposit(data[1], gText_TossOutHowManyStrVar1s); + gTasks[taskId].func = Task_SelectQuantityToToss; } } -void sub_8109D38(u8 taskId) +static void Task_ConfirmTossItems(u8 taskId) { s16 *data = gTasks[taskId].data; ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_ThrowAwayStrVar2OfThisItemQM); - sub_810B8F0(sub_810B9DC(6, 1), 2, gStringVar4, 0, 2, 1, 0, 0, 1); - sub_810BAE8(taskId, &gUnknown_8452F50); + BagPrintTextOnWindow(ShowBagWindow(6, 1), 2, gStringVar4, 0, 2, 1, 0, 0, 1); + BagCreateYesNoMenuBottomRight(taskId, &sYesNoMenu_Toss); } -void sub_8109DB0(u8 taskId) +static void Task_TossItem_No(u8 taskId) { s16 *data = gTasks[taskId].data; - sub_810BA3C(6); + HideBagWindow(6); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); bag_menu_print_cursor_(data[0], 1); - sub_810910C(taskId); + Task_RedrawArrowsAndReturnToBagMenuSelect(taskId); } -void sub_8109DEC(u8 taskId) +static void Task_SelectQuantityToToss(u8 taskId) { s16 *data = gTasks[taskId].data; if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) { - sub_81097E4(data[8], 3); + UpdateQuantityToTossOrDeposit(data[8], 3); } else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - ClearWindowTilemap(sub_810BAD8(6)); - sub_810BA3C(6); - sub_810BA3C(0); + ClearWindowTilemap(GetBagWindow(6)); + HideBagWindow(6); + HideBagWindow(0); ScheduleBgCopyTilemapToVram(0); - sub_8108978(); - sub_8109D38(taskId); + BagDestroyPocketScrollArrowPair(); + Task_ConfirmTossItems(taskId); } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_810BA3C(6); - sub_810BA3C(0); + HideBagWindow(6); + HideBagWindow(0); PutWindowTilemap(0); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); bag_menu_print_cursor_(data[0], 1); - sub_8108978(); - sub_810910C(taskId); + BagDestroyPocketScrollArrowPair(); + Task_RedrawArrowsAndReturnToBagMenuSelect(taskId); } } -void sub_8109EA8(u8 taskId) +static void Task_TossItem_Yes(u8 taskId) { s16 *data = gTasks[taskId].data; - sub_810BA3C(6); - CopyItemName(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]), gStringVar1); + HideBagWindow(6); + CopyItemName(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1]), gStringVar1); ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_ThrewAwayStrVar2StrVar1s); - sub_810B8F0(sub_810B9DC(6, 3), 2, gStringVar4, 0, 2, 1, 0, 0, 1); - gTasks[taskId].func = sub_8109F44; + BagPrintTextOnWindow(ShowBagWindow(6, 3), 2, gStringVar4, 0, 2, 1, 0, 0, 1); + gTasks[taskId].func = Task_WaitAB_RedrawAndReturnToBag; } -void sub_8109F44(u8 taskId) +static void Task_WaitAB_RedrawAndReturnToBag(u8 taskId) { s16 *data = gTasks[taskId].data; if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); RemoveBagItem(gSpecialVar_ItemId, data[8]); - sub_810BA3C(6); - DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - sub_8108DC8(gUnknown_203ACFC.pocket); - sub_81089F4(gUnknown_203ACFC.pocket); - sub_810842C(gUnknown_203ACFC.pocket); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + HideBagWindow(6); + DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); + Pocket_CalculateNItemsAndMaxShowed(gBagMenuState.pocket); + PocketCalculateInitialCursorPosAndItemsAbove(gBagMenuState.pocket); + Bag_BuildListMenuTemplate(gBagMenuState.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagMenuState.cursorPos[gBagMenuState.pocket], gBagMenuState.itemsAbove[gBagMenuState.pocket]); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); bag_menu_print_cursor_(data[0], 1); - sub_810910C(taskId); + Task_RedrawArrowsAndReturnToBagMenuSelect(taskId); } } -void Task_ItemMenuAction_ToggleSelect(u8 taskId) +static void Task_ItemMenuAction_ToggleSelect(u8 taskId) { u16 itemId; s16 *data = gTasks[taskId].data; - itemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]); + itemId = BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1]); if (gSaveBlock1Ptr->registeredItem == itemId) gSaveBlock1Ptr->registeredItem = ITEM_NONE; else gSaveBlock1Ptr->registeredItem = itemId; - DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - sub_810842C(gUnknown_203ACFC.pocket); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); + Bag_BuildListMenuTemplate(gBagMenuState.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagMenuState.cursorPos[gBagMenuState.pocket], gBagMenuState.itemsAbove[gBagMenuState.pocket]); CopyWindowToVram(0, 1); Task_ItemMenuAction_Cancel(taskId); } -void Task_ItemMenuAction_Give(u8 taskId) +static void Task_ItemMenuAction_Give(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 itemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]); - sub_810BA3C(10); - sub_810BA3C(6); + u16 itemId = BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1]); + HideBagWindow(10); + HideBagWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); CopyWindowToVram(0, 1); if (!CanWriteMailHere(itemId)) - DisplayItemMessageInBag(taskId, 2, gText_CantWriteMailHere, sub_810A1D0); + DisplayItemMessageInBag(taskId, 2, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); else if (!itemid_is_unique(itemId)) { if (CalculatePlayerPartyCount() == 0) { - sub_810A170(taskId); + Task_PrintThereIsNoPokemon(taskId); } else { - gUnknown_203AD10->exitCB = CB2_ChooseMonToGiveItem; + sBagMenuDisplay->exitCB = CB2_ChooseMonToGiveItem; gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; } } else - sub_810A18C(taskId); + Task_PrintItemCantBeHeld(taskId); } -void sub_810A170(u8 taskId) +static void Task_PrintThereIsNoPokemon(u8 taskId) { - DisplayItemMessageInBag(taskId, 2, gText_ThereIsNoPokemon, sub_810A1D0); + DisplayItemMessageInBag(taskId, 2, gText_ThereIsNoPokemon, Task_WaitAButtonAndCloseContextMenu); } -void sub_810A18C(u8 taskId) +static void Task_PrintItemCantBeHeld(u8 taskId) { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_ItemCantBeHeld); - DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A1D0); + DisplayItemMessageInBag(taskId, 2, gStringVar4, Task_WaitAButtonAndCloseContextMenu); } -void sub_810A1D0(u8 taskId) +static void Task_WaitAButtonAndCloseContextMenu(u8 taskId) { if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - sub_810A1F8(taskId); + Task_ReturnToBagFromContextMenu(taskId); } } -void sub_810A1F8(u8 taskId) +void Task_ReturnToBagFromContextMenu(u8 taskId) { s16 *data = gTasks[taskId].data; - sub_810BA9C(5); - DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - sub_8108DC8(gUnknown_203ACFC.pocket); - sub_81089F4(gUnknown_203ACFC.pocket); - sub_810842C(gUnknown_203ACFC.pocket); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + CloseBagWindow(5); + DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); + Pocket_CalculateNItemsAndMaxShowed(gBagMenuState.pocket); + PocketCalculateInitialCursorPosAndItemsAbove(gBagMenuState.pocket); + Bag_BuildListMenuTemplate(gBagMenuState.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagMenuState.cursorPos[gBagMenuState.pocket], gBagMenuState.itemsAbove[gBagMenuState.pocket]); ScheduleBgCopyTilemapToVram(0); bag_menu_print_cursor_(data[0], 1); - sub_810910C(taskId); + Task_RedrawArrowsAndReturnToBagMenuSelect(taskId); } -void sub_810A288(u8 taskId) +static void unref_sub_810A288(u8 taskId) { s16 *data = gTasks[taskId].data; u16 itemsAbove; u16 cursorPos; ListMenuGetScrollAndRow(data[0], &cursorPos, &itemsAbove); - sub_8108818(cursorPos + itemsAbove); + PrintItemDescriptionOnMessageWindow(cursorPos + itemsAbove); PutWindowTilemap(0); ScheduleBgCopyTilemapToVram(0); bag_menu_print_cursor_(data[0], 1); - sub_810910C(taskId); + Task_RedrawArrowsAndReturnToBagMenuSelect(taskId); } -void Task_ItemMenuAction_Cancel(u8 taskId) +static void Task_ItemMenuAction_Cancel(u8 taskId) { - sub_810BA3C(10); - sub_810BA3C(6); + HideBagWindow(10); + HideBagWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); bag_menu_print_cursor_(gTasks[taskId].data[0], 1); - sub_810910C(taskId); + Task_RedrawArrowsAndReturnToBagMenuSelect(taskId); } -void sub_810A324(u8 taskId) +static void Task_ItemMenuAction_BattleUse(u8 taskId) { if (ItemId_GetBattleFunc(gSpecialVar_ItemId) != NULL) { - sub_810BA3C(10); - sub_810BA3C(6); + HideBagWindow(10); + HideBagWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); CopyWindowToVram(0, 1); @@ -1697,120 +1698,120 @@ void sub_810A324(u8 taskId) } } -void sub_810A370(u8 taskId) +static void Task_ItemContext_FieldGive(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 itemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]); + u16 itemId = BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1]); if (!CanWriteMailHere(itemId)) { - DisplayItemMessageInBag(taskId, 2, gText_CantWriteMailHere, sub_810A1D0); + DisplayItemMessageInBag(taskId, 2, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); } else if (itemId == ITEM_TM_CASE) { - ItemMenu_SetExitCallback(sub_810A434); + ItemMenu_SetExitCallback(GoToTMCase_Give); ItemMenu_StartFadeToExitCallback(taskId); } else if (itemId == ITEM_BERRY_POUCH) { - ItemMenu_SetExitCallback(sub_810A448); + ItemMenu_SetExitCallback(GoToBerryPouch_Give); ItemMenu_StartFadeToExitCallback(taskId); } - else if (gUnknown_203ACFC.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(itemId)) + else if (gBagMenuState.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(itemId)) { - sub_8108CB4(); + Bag_BeginCloseWin0Animation(); gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; } else { - sub_810A18C(taskId); + Task_PrintItemCantBeHeld(taskId); } } -void sub_810A434(void) +static void GoToTMCase_Give(void) { - InitTMCase(1, sub_810A45C, FALSE); + InitTMCase(TMCASE_FROMPARTYGIVE, ReturnToBagMenuFromSubmenu_Give, FALSE); } -void sub_810A448(void) +static void GoToBerryPouch_Give(void) { - InitBerryPouch(1, sub_810A45C, FALSE); + InitBerryPouch(BERRYPOUCH_FROMPARTYGIVE, ReturnToBagMenuFromSubmenu_Give, FALSE); } -void sub_810A45C(void) +static void ReturnToBagMenuFromSubmenu_Give(void) { CB2_SelectBagItemToGive(); } -void sub_810A468(u8 taskId) +static void Task_ItemContext_PcBoxGive(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 itemId = BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1]); + u16 itemId = BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1]); if (ItemIsMail(itemId) == TRUE) { - DisplayItemMessageInBag(taskId, 2, gText_CantWriteMailHere, sub_810A1D0); + DisplayItemMessageInBag(taskId, 2, gText_CantWriteMailHere, Task_WaitAButtonAndCloseContextMenu); } else if (itemId == ITEM_TM_CASE) { - ItemMenu_SetExitCallback(sub_810A52C); + ItemMenu_SetExitCallback(GoToTMCase_PCBox); ItemMenu_StartFadeToExitCallback(taskId); } else if (itemId == ITEM_BERRY_POUCH) { - ItemMenu_SetExitCallback(sub_810A540); + ItemMenu_SetExitCallback(GoToBerryPouch_PCBox); ItemMenu_StartFadeToExitCallback(taskId); } - else if (gUnknown_203ACFC.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(itemId)) + else if (gBagMenuState.pocket != POCKET_KEY_ITEMS - 1 && !itemid_is_unique(itemId)) { - sub_8108CB4(); + Bag_BeginCloseWin0Animation(); gTasks[taskId].func = ItemMenu_StartFadeToExitCallback; } else { - sub_810A18C(taskId); + Task_PrintItemCantBeHeld(taskId); } } -void sub_810A52C(void) +static void GoToTMCase_PCBox(void) { - InitTMCase(3, sub_810A554, FALSE); + InitTMCase(TMCASE_FROMPOKEMONSTORAGEPC, ReturnToBagMenuFromSubmenu_PCBox, FALSE); } -void sub_810A540(void) +static void GoToBerryPouch_PCBox(void) { - InitBerryPouch(3, sub_810A554, FALSE); + InitBerryPouch(BERRYPOUCH_FROMPOKEMONSTORAGEPC, ReturnToBagMenuFromSubmenu_PCBox, FALSE); } -void sub_810A554(void) +static void ReturnToBagMenuFromSubmenu_PCBox(void) { - GoToBagMenu(4, 3, sub_808CE60); + GoToBagMenu(ITEMMENULOCATION_PCBOX, OPEN_BAG_LAST, sub_808CE60); } -void sub_810A568(u8 taskId) +static void Task_ItemContext_Sell(u8 taskId) { s16 *data = gTasks[taskId].data; if (gSpecialVar_ItemId == ITEM_TM_CASE) { - ItemMenu_SetExitCallback(sub_810A654); + ItemMenu_SetExitCallback(GoToTMCase_Sell); ItemMenu_StartFadeToExitCallback(taskId); } else if (gSpecialVar_ItemId == ITEM_BERRY_POUCH) { - ItemMenu_SetExitCallback(sub_810A668); + ItemMenu_SetExitCallback(GoToBerryPouch_Sell); ItemMenu_StartFadeToExitCallback(taskId); } else if (itemid_get_market_price(gSpecialVar_ItemId) == 0) { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_OhNoICantBuyThat); - DisplayItemMessageInBag(taskId, sub_80BF8E4(), gStringVar4, sub_810A1F8); + DisplayItemMessageInBag(taskId, GetDialogBoxFontId(), gStringVar4, Task_ReturnToBagFromContextMenu); } else { data[8] = 1; if (data[2] == 1) { - sub_810BB40(); - sub_810A690(taskId); + BagPrintMoneyAmount(); + Task_PrintSaleConfirmationText(taskId); } else { @@ -1818,191 +1819,191 @@ void sub_810A568(u8 taskId) data[2] = 99; CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_HowManyWouldYouLikeToSell); - DisplayItemMessageInBag(taskId, sub_80BF8E4(), gStringVar4, sub_810A770); + DisplayItemMessageInBag(taskId, GetDialogBoxFontId(), gStringVar4, Task_InitSaleQuantitySelectInterface); } } } -void sub_810A654(void) +static void GoToTMCase_Sell(void) { - InitTMCase(2, sub_810A67C, FALSE); + InitTMCase(TMCASE_FROMMARTSELL, ReturnToBagMenuFromSubmenu_Sell, FALSE); } -void sub_810A668(void) +static void GoToBerryPouch_Sell(void) { - InitBerryPouch(2, sub_810A67C, FALSE); + InitBerryPouch(BERRYPOUCH_FROMMARTSELL, ReturnToBagMenuFromSubmenu_Sell, FALSE); } -void sub_810A67C(void) +static void ReturnToBagMenuFromSubmenu_Sell(void) { - GoToBagMenu(2, 3, CB2_ReturnToField); + GoToBagMenu(ITEMMENULOCATION_SHOP, OPEN_BAG_LAST, CB2_ReturnToField); } -void sub_810A690(u8 taskId) +static void Task_PrintSaleConfirmationText(u8 taskId) { s16 *data = gTasks[taskId].data; - ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_ICanPayThisMuch_WouldThatBeOkay); - DisplayItemMessageInBag(taskId, sub_80BF8E4(), gStringVar4, sub_810A70C); + DisplayItemMessageInBag(taskId, GetDialogBoxFontId(), gStringVar4, Task_ShowSellYesNoMenu); } -void sub_810A70C(u8 taskId) +static void Task_ShowSellYesNoMenu(u8 taskId) { - sub_810BB14(taskId, &gUnknown_8452F58); + BagCreateYesNoMenuTopRight(taskId, &sYesNoMenu_Sell); } -void sub_810A720(u8 taskId) +static void Task_SellItem_No(u8 taskId) { s16 *data = gTasks[taskId].data; - sub_810BA3C(2); - sub_810BA9C(5); + HideBagWindow(2); + CloseBagWindow(5); PutWindowTilemap(2); PutWindowTilemap(0); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); bag_menu_print_cursor_(data[0], 1); - sub_810910C(taskId); + Task_RedrawArrowsAndReturnToBagMenuSelect(taskId); } -void sub_810A770(u8 taskId) +static void Task_InitSaleQuantitySelectInterface(u8 taskId) { s16 *data = gTasks[taskId].data; - u8 r4 = sub_810B9DC(0, 1); + u8 r4 = ShowBagWindow(0, 1); ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - sub_810B8F0(r4, 0, gStringVar4, 4, 10, 1, 0, 0xFF, 1); - sub_810A834(itemid_get_market_price(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1])) / 2 * data[8]); - sub_810BB40(); - sub_8108908(); - gTasks[taskId].func = sub_810A85C; + BagPrintTextOnWindow(r4, 0, gStringVar4, 4, 10, 1, 0, 0xFF, 1); + UpdateSalePriceDisplay(itemid_get_market_price(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8]); + BagPrintMoneyAmount(); + CreatePocketScrollArrowPair_SellQuantity(); + gTasks[taskId].func = Task_SelectQuantityToSell; } -void sub_810A834(s32 amount) +static void UpdateSalePriceDisplay(s32 amount) { - PrintMoneyAmount(sub_810BAD8(0), 56, 10, amount, 0); + PrintMoneyAmount(GetBagWindow(0), 56, 10, amount, 0); } -void sub_810A85C(u8 taskId) +static void Task_SelectQuantityToSell(u8 taskId) { s16 *data = gTasks[taskId].data; if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) { - sub_81097E4(data[8], 2); - sub_810A834(itemid_get_market_price(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1])) / 2 * data[8]); + UpdateQuantityToTossOrDeposit(data[8], 2); + UpdateSalePriceDisplay(itemid_get_market_price(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8]); } else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - sub_810BA3C(0); + HideBagWindow(0); PutWindowTilemap(0); ScheduleBgCopyTilemapToVram(0); - sub_8108978(); - sub_810A690(taskId); + BagDestroyPocketScrollArrowPair(); + Task_PrintSaleConfirmationText(taskId); } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_810BA3C(0); - sub_810BA3C(2); - sub_810BA9C(5); + HideBagWindow(0); + HideBagWindow(2); + CloseBagWindow(5); PutWindowTilemap(2); PutWindowTilemap(0); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); - sub_8108978(); + BagDestroyPocketScrollArrowPair(); bag_menu_print_cursor_(data[0], 1); - sub_810910C(taskId); + Task_RedrawArrowsAndReturnToBagMenuSelect(taskId); } } -void sub_810A940(u8 taskId) +static void Task_SellItem_Yes(u8 taskId) { s16 *data = gTasks[taskId].data; PutWindowTilemap(0); ScheduleBgCopyTilemapToVram(0); CopyItemName(gSpecialVar_ItemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(gUnknown_203ACFC.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(gBagMenuState.pocket + 1, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_TurnedOverItemsWorthYen); - DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A9D4); + DisplayItemMessageInBag(taskId, 2, gStringVar4, Task_FinalizeSaleToShop); } -void sub_810A9D4(u8 taskId) +static void Task_FinalizeSaleToShop(u8 taskId) { s16 *data = gTasks[taskId].data; PlaySE(SE_SHOP); RemoveBagItem(gSpecialVar_ItemId, data[8]); AddMoney(&gSaveBlock1Ptr->money, itemid_get_market_price(gSpecialVar_ItemId) / 2 * data[8]); RecordItemPurchase(gSpecialVar_ItemId, data[8], 2); - DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - sub_8108DC8(gUnknown_203ACFC.pocket); - sub_81089F4(gUnknown_203ACFC.pocket); - gUnknown_203AD10->field_05_6 = 1; - sub_810842C(gUnknown_203ACFC.pocket); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); + DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); + Pocket_CalculateNItemsAndMaxShowed(gBagMenuState.pocket); + PocketCalculateInitialCursorPosAndItemsAbove(gBagMenuState.pocket); + sBagMenuDisplay->inhibitItemDescriptionPrint = TRUE; + Bag_BuildListMenuTemplate(gBagMenuState.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagMenuState.cursorPos[gBagMenuState.pocket], gBagMenuState.itemsAbove[gBagMenuState.pocket]); bag_menu_print_cursor_(data[0], 2); - sub_810BB74(sub_810BAD8(2)); - PrintMoneyAmountInMoneyBox(sub_810BAD8(2), GetMoney(&gSaveBlock1Ptr->money), 0); - gTasks[taskId].func = sub_810AAF4; + BagDrawTextBoxOnWindow(GetBagWindow(2)); + PrintMoneyAmountInMoneyBox(GetBagWindow(2), GetMoney(&gSaveBlock1Ptr->money), 0); + gTasks[taskId].func = Task_WaitPressAB_AfterSell; } -void sub_810AAF4(u8 taskId) +static void Task_WaitPressAB_AfterSell(u8 taskId) { if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_810BA3C(2); + HideBagWindow(2); PutWindowTilemap(2); - gUnknown_203AD10->field_05_6 = 0; - sub_810A1F8(taskId); + sBagMenuDisplay->inhibitItemDescriptionPrint = FALSE; + Task_ReturnToBagFromContextMenu(taskId); } } -void sub_810AB40(u8 taskId) +static void Task_ItemContext_Deposit(u8 taskId) { s16 *data = gTasks[taskId].data; data[8] = 1; if (data[2] == 1) { - sub_810AC40(taskId); + Task_TryDoItemDeposit(taskId); } else { - sub_810971C(data[1], gText_DepositHowManyStrVars1); - gTasks[taskId].func = sub_810AB88; + InitQuantityToTossOrDeposit(data[1], gText_DepositHowManyStrVars1); + gTasks[taskId].func = Task_SelectQuantityToDeposit; } } -void sub_810AB88(u8 taskId) +static void Task_SelectQuantityToDeposit(u8 taskId) { s16 *data = gTasks[taskId].data; if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) { - sub_81097E4(data[8], 3); + UpdateQuantityToTossOrDeposit(data[8], 3); } else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - ClearWindowTilemap(sub_810BAD8(6)); - sub_810BA3C(6); - sub_810BA3C(0); + ClearWindowTilemap(GetBagWindow(6)); + HideBagWindow(6); + HideBagWindow(0); ScheduleBgCopyTilemapToVram(0); - sub_8108978(); - sub_810AC40(taskId); + BagDestroyPocketScrollArrowPair(); + Task_TryDoItemDeposit(taskId); } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_810BA3C(6); - sub_810BA3C(0); + HideBagWindow(6); + HideBagWindow(0); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); bag_menu_print_cursor_(data[0], 1); - sub_8108978(); - sub_810910C(taskId); + BagDestroyPocketScrollArrowPair(); + Task_RedrawArrowsAndReturnToBagMenuSelect(taskId); } } -void sub_810AC40(u8 taskId) +static void Task_TryDoItemDeposit(u8 taskId) { s16 *data = gTasks[taskId].data; if (AddPCItem(gSpecialVar_ItemId, data[8]) == TRUE) @@ -2011,12 +2012,12 @@ void sub_810AC40(u8 taskId) CopyItemName(gSpecialVar_ItemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_DepositedStrVar2StrVar1s); - sub_810B8F0(sub_810B9DC(6, 3), 2, gStringVar4, 0, 2, 1, 0, 0, 1); - gTasks[taskId].func = sub_8109F44; + BagPrintTextOnWindow(ShowBagWindow(6, 3), 2, gStringVar4, 0, 2, 1, 0, 0, 1); + gTasks[taskId].func = Task_WaitAB_RedrawAndReturnToBag; } else { - DisplayItemMessageInBag(taskId, 2, gText_NoRoomToStoreItems, sub_810A1D0); + DisplayItemMessageInBag(taskId, 2, gText_NoRoomToStoreItems, Task_WaitAButtonAndCloseContextMenu); } } @@ -2042,63 +2043,69 @@ bool8 UseRegisteredKeyItemOnField(void) } gSaveBlock1Ptr->registeredItem = ITEM_NONE; } - ScriptContext1_SetupScript(gUnknown_81A77A0); + ScriptContext1_SetupScript(EventScript_BagItemCanBeRegistered); return TRUE; } -bool8 sub_810ADAC(void) +static bool8 BagIsTutorial(void) { - if (gUnknown_203ACFC.location == 6 || gUnknown_203ACFC.location == 8 || gUnknown_203ACFC.location == 7 || gUnknown_203ACFC.location == 9 || gUnknown_203ACFC.location == 10) + if ( + gBagMenuState.location == ITEMMENULOCATION_OLDMAN + || gBagMenuState.location == ITEMMENULOCATION_TTVSCR_CATCHING + || gBagMenuState.location == ITEMMENULOCATION_TTVSCR_STATUS + || gBagMenuState.location == ITEMMENULOCATION_TTVSCR_REGISTER + || gBagMenuState.location == ITEMMENULOCATION_TTVSCR_TMS + ) return TRUE; return FALSE; } -void BackUpPlayerBag(void) +static void BackUpPlayerBag(void) { u32 i; - gUnknown_203AD2C = AllocZeroed(sizeof(struct BagSlots)); - memcpy(gUnknown_203AD2C->bagPocket_Items, gSaveBlock1Ptr->bagPocket_Items, BAG_ITEMS_COUNT * sizeof(struct ItemSlot)); - memcpy(gUnknown_203AD2C->bagPocket_KeyItems, gSaveBlock1Ptr->bagPocket_KeyItems, BAG_KEYITEMS_COUNT * sizeof(struct ItemSlot)); - memcpy(gUnknown_203AD2C->bagPocket_PokeBalls, gSaveBlock1Ptr->bagPocket_PokeBalls, BAG_POKEBALLS_COUNT * sizeof(struct ItemSlot)); - gUnknown_203AD2C->registeredItem = gSaveBlock1Ptr->registeredItem; - gUnknown_203AD2C->pocket = gUnknown_203ACFC.pocket; + sBackupPlayerBag = AllocZeroed(sizeof(struct BagSlots)); + memcpy(sBackupPlayerBag->bagPocket_Items, gSaveBlock1Ptr->bagPocket_Items, BAG_ITEMS_COUNT * sizeof(struct ItemSlot)); + memcpy(sBackupPlayerBag->bagPocket_KeyItems, gSaveBlock1Ptr->bagPocket_KeyItems, BAG_KEYITEMS_COUNT * sizeof(struct ItemSlot)); + memcpy(sBackupPlayerBag->bagPocket_PokeBalls, gSaveBlock1Ptr->bagPocket_PokeBalls, BAG_POKEBALLS_COUNT * sizeof(struct ItemSlot)); + sBackupPlayerBag->registeredItem = gSaveBlock1Ptr->registeredItem; + sBackupPlayerBag->pocket = gBagMenuState.pocket; for (i = 0; i < 3; i++) { - gUnknown_203AD2C->itemsAbove[i] = gUnknown_203ACFC.itemsAbove[i]; - gUnknown_203AD2C->cursorPos[i] = gUnknown_203ACFC.cursorPos[i]; + sBackupPlayerBag->itemsAbove[i] = gBagMenuState.itemsAbove[i]; + sBackupPlayerBag->cursorPos[i] = gBagMenuState.cursorPos[i]; } ClearItemSlots(gSaveBlock1Ptr->bagPocket_Items, BAG_ITEMS_COUNT); ClearItemSlots(gSaveBlock1Ptr->bagPocket_KeyItems, BAG_KEYITEMS_COUNT); ClearItemSlots(gSaveBlock1Ptr->bagPocket_PokeBalls, BAG_POKEBALLS_COUNT); gSaveBlock1Ptr->registeredItem = ITEM_NONE; - sub_81089BC(); + ResetBagCursorPositions(); } -void RestorePlayerBag(void) +static void RestorePlayerBag(void) { u32 i; - memcpy(gSaveBlock1Ptr->bagPocket_Items, gUnknown_203AD2C->bagPocket_Items, BAG_ITEMS_COUNT * sizeof(struct ItemSlot)); - memcpy(gSaveBlock1Ptr->bagPocket_KeyItems, gUnknown_203AD2C->bagPocket_KeyItems, BAG_KEYITEMS_COUNT * sizeof(struct ItemSlot)); - memcpy(gSaveBlock1Ptr->bagPocket_PokeBalls, gUnknown_203AD2C->bagPocket_PokeBalls, BAG_POKEBALLS_COUNT * sizeof(struct ItemSlot)); - gSaveBlock1Ptr->registeredItem = gUnknown_203AD2C->registeredItem; - gUnknown_203ACFC.pocket = gUnknown_203AD2C->pocket; + memcpy(gSaveBlock1Ptr->bagPocket_Items, sBackupPlayerBag->bagPocket_Items, BAG_ITEMS_COUNT * sizeof(struct ItemSlot)); + memcpy(gSaveBlock1Ptr->bagPocket_KeyItems, sBackupPlayerBag->bagPocket_KeyItems, BAG_KEYITEMS_COUNT * sizeof(struct ItemSlot)); + memcpy(gSaveBlock1Ptr->bagPocket_PokeBalls, sBackupPlayerBag->bagPocket_PokeBalls, BAG_POKEBALLS_COUNT * sizeof(struct ItemSlot)); + gSaveBlock1Ptr->registeredItem = sBackupPlayerBag->registeredItem; + gBagMenuState.pocket = sBackupPlayerBag->pocket; for (i = 0; i < 3; i++) { - gUnknown_203ACFC.itemsAbove[i] = gUnknown_203AD2C->itemsAbove[i]; - gUnknown_203ACFC.cursorPos[i] = gUnknown_203AD2C->cursorPos[i]; + gBagMenuState.itemsAbove[i] = sBackupPlayerBag->itemsAbove[i]; + gBagMenuState.cursorPos[i] = sBackupPlayerBag->cursorPos[i]; } - Free(gUnknown_203AD2C); + Free(sBackupPlayerBag); } -void InitTutorialBag(void) +void InitOldManBag(void) { BackUpPlayerBag(); AddBagItem(ITEM_POTION, 1); AddBagItem(ITEM_POKE_BALL, 1); - GoToBagMenu(6, 0, SetCB2ToReshowScreenAfterMenu2); + GoToBagMenu(ITEMMENULOCATION_OLDMAN, OPEN_BAG_ITEMS, SetCB2ToReshowScreenAfterMenu2); } -void sub_810AF9C(u8 taskId) +static void Task_Bag_OldManTutorial(u8 taskId) { s16 *data = gTasks[taskId].data; if (!gPaletteFade.active) @@ -2108,53 +2115,53 @@ void sub_810AF9C(u8 taskId) case 102: case 204: PlaySE(SE_BAG2); - sub_81091D0(taskId, 1, FALSE); + SwitchPockets(taskId, 1, FALSE); break; case 306: PlaySE(SE_SELECT); bag_menu_print_cursor_(data[0], 2); - sub_8109140(1); + Bag_FillMessageBoxWithPalette(1); gSpecialVar_ItemId = ITEM_POKE_BALL; - sub_8109890(taskId); + OpenContextMenu(taskId); break; case 408: PlaySE(SE_SELECT); - sub_810BA3C(10); - sub_810BA3C(6); + HideBagWindow(10); + HideBagWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); CopyWindowToVram(0, 1); DestroyListMenuTask(data[0], NULL, NULL); RestorePlayerBag(); - sub_8108CB4(); - gTasks[taskId].func = sub_810B070; + Bag_BeginCloseWin0Animation(); + gTasks[taskId].func = Task_PokeDude_FadeFromBag; return; } data[8]++; } } -void sub_810B070(u8 taskId) +static void Task_PokeDude_FadeFromBag(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); - gTasks[taskId].func = sub_810B0AC; + gTasks[taskId].func = Task_PokeDude_WaitFadeAndExitBag; } -void sub_810B0AC(u8 taskId) +static void Task_PokeDude_WaitFadeAndExitBag(u8 taskId) { - if (!gPaletteFade.active && FuncIsActiveTask(sub_8108CFC) != TRUE) + if (!gPaletteFade.active && FuncIsActiveTask(Task_AnimateWin0v) != TRUE) { - if (gUnknown_203AD10->exitCB != NULL) - SetMainCallback2(gUnknown_203AD10->exitCB); + if (sBagMenuDisplay->exitCB != NULL) + SetMainCallback2(sBagMenuDisplay->exitCB); else - SetMainCallback2(gUnknown_203ACFC.bagCallback); - sub_8108978(); - sub_8108B04(); + SetMainCallback2(gBagMenuState.bagCallback); + BagDestroyPocketScrollArrowPair(); + DestroyBagMenuResources(); DestroyTask(taskId); } } -void sub_810B108(u8 a0) +void InitPokeDudeBag(u8 a0) { MainCallback cb2; u8 location; @@ -2174,24 +2181,24 @@ void sub_810B108(u8 a0) break; case 7: cb2 = SetCB2ToReshowScreenAfterMenu2; - location = 7; + location = ITEMMENULOCATION_TTVSCR_STATUS; break; case 8: cb2 = SetCB2ToReshowScreenAfterMenu2; - location = 8; + location = ITEMMENULOCATION_TTVSCR_CATCHING; break; } - GoToBagMenu(location, POCKET_ITEMS - 1, cb2); + GoToBagMenu(location, OPEN_BAG_ITEMS, cb2); } -bool8 sub_810B180(u8 taskId) +static bool8 Task_BButtonInterruptTeachyTv(u8 taskId) { if (JOY_NEW(B_BUTTON)) { RestorePlayerBag(); SetTeachyTvControllerModeToResume(); - gUnknown_203AD10->exitCB = CB2_ReturnToTeachyTV; - gTasks[taskId].func = sub_810B070; + sBagMenuDisplay->exitCB = CB2_ReturnToTeachyTV; + gTasks[taskId].func = Task_PokeDude_FadeFromBag; return TRUE; } else @@ -2200,23 +2207,23 @@ bool8 sub_810B180(u8 taskId) } } -void sub_810B1D4(u8 taskId) +static void Task_Bag_TeachyTvRegister(u8 taskId) { s16 *data = gTasks[taskId].data; - if (!gPaletteFade.active && sub_810B180(taskId) != TRUE) + if (!gPaletteFade.active && Task_BButtonInterruptTeachyTv(taskId) != TRUE) { switch (data[8]) { case 102: PlaySE(SE_BAG2); - sub_81091D0(taskId, 1, FALSE); + SwitchPockets(taskId, 1, FALSE); break; case 204: PlaySE(SE_SELECT); bag_menu_print_cursor_(data[0], 2); - sub_8109140(1); + Bag_FillMessageBoxWithPalette(1); gSpecialVar_ItemId = ITEM_TEACHY_TV; - sub_8109890(taskId); + OpenContextMenu(taskId); break; case 306: PlaySE(SE_SELECT); @@ -2225,14 +2232,14 @@ void sub_810B1D4(u8 taskId) case 408: PlaySE(SE_SELECT); gSaveBlock1Ptr->registeredItem = gSpecialVar_ItemId; - sub_810BA3C(10); - sub_810BA3C(6); + HideBagWindow(10); + HideBagWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); - DestroyListMenuTask(data[0], &gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], &gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - sub_810842C(gUnknown_203ACFC.pocket); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ACFC.cursorPos[gUnknown_203ACFC.pocket], gUnknown_203ACFC.itemsAbove[gUnknown_203ACFC.pocket]); - sub_8109140(0); + DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]); + Bag_BuildListMenuTemplate(gBagMenuState.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagMenuState.cursorPos[gBagMenuState.pocket], gBagMenuState.itemsAbove[gBagMenuState.pocket]); + Bag_FillMessageBoxWithPalette(0); bag_menu_print_cursor_(data[0], 1); CopyWindowToVram(0, 1); break; @@ -2246,20 +2253,20 @@ void sub_810B1D4(u8 taskId) PlaySE(SE_SELECT); DestroyListMenuTask(data[0], NULL, NULL); RestorePlayerBag(); - sub_8108CB4(); - gTasks[taskId].func = sub_810B070; + Bag_BeginCloseWin0Animation(); + gTasks[taskId].func = Task_PokeDude_FadeFromBag; return; } data[8]++; } } -void sub_810B378(u8 taskId) +static void Task_Bag_TeachyTvCatching(u8 taskId) { s16 *data = gTasks[taskId].data; if (!gPaletteFade.active) { - if (sub_810B180(taskId) == TRUE) + if (Task_BButtonInterruptTeachyTv(taskId) == TRUE) { FreeRestoreBattleData(); LoadPlayerParty(); @@ -2270,7 +2277,7 @@ void sub_810B378(u8 taskId) case 102: case 204: PlaySE(SE_BAG2); - sub_81091D0(taskId, 1, FALSE); + SwitchPockets(taskId, 1, FALSE); break; case 306: case 408: @@ -2287,33 +2294,33 @@ void sub_810B378(u8 taskId) case 714: PlaySE(SE_SELECT); bag_menu_print_cursor_(data[0], 2); - sub_8109140(1); + Bag_FillMessageBoxWithPalette(1); gSpecialVar_ItemId = ITEM_POKE_BALL; - sub_8109890(taskId); + OpenContextMenu(taskId); break; case 816: PlaySE(SE_SELECT); - sub_810BA3C(10); - sub_810BA3C(6); + HideBagWindow(10); + HideBagWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); CopyWindowToVram(0, 1); DestroyListMenuTask(data[0], NULL, NULL); RestorePlayerBag(); - sub_8108CB4(); - gTasks[taskId].func = sub_810B070; + Bag_BeginCloseWin0Animation(); + gTasks[taskId].func = Task_PokeDude_FadeFromBag; return; } data[8]++; } } -void sub_810B4BC(u8 taskId) +static void Task_Bag_TeachyTvStatus(u8 taskId) { s16 *data = gTasks[taskId].data; if (!gPaletteFade.active) { - if (sub_810B180(taskId) == TRUE) + if (Task_BButtonInterruptTeachyTv(taskId) == TRUE) { FreeRestoreBattleData(); LoadPlayerParty(); @@ -2329,14 +2336,14 @@ void sub_810B4BC(u8 taskId) case 204: PlaySE(SE_SELECT); bag_menu_print_cursor_(data[0], 2); - sub_8109140(1); + Bag_FillMessageBoxWithPalette(1); gSpecialVar_ItemId = ITEM_ANTIDOTE; - sub_8109890(taskId); + OpenContextMenu(taskId); break; case 306: PlaySE(SE_SELECT); - sub_810BA3C(10); - sub_810BA3C(6); + HideBagWindow(10); + HideBagWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); CopyWindowToVram(0, 1); @@ -2344,23 +2351,23 @@ void sub_810B4BC(u8 taskId) RestorePlayerBag(); gItemUseCB = ItemUseCB_MedicineStep; ItemMenu_SetExitCallback(ChooseMonForInBattleItem); - gTasks[taskId].func = sub_810B070; + gTasks[taskId].func = Task_PokeDude_FadeFromBag; return; } data[8]++; } } -void sub_810B5D4(u8 taskId) +static void Task_Bag_TeachyTvTMs(u8 taskId) { s16 *data = gTasks[taskId].data; - if (!gPaletteFade.active && sub_810B180(taskId) != TRUE) + if (!gPaletteFade.active && Task_BButtonInterruptTeachyTv(taskId) != TRUE) { switch (data[8]) { case 102: PlaySE(SE_BAG2); - sub_81091D0(taskId, 1, 0); + SwitchPockets(taskId, 1, 0); break; case 204: gMain.newKeys = 0; @@ -2370,21 +2377,21 @@ void sub_810B5D4(u8 taskId) case 306: PlaySE(SE_SELECT); bag_menu_print_cursor_(data[0], 2); - sub_8109140(1); + Bag_FillMessageBoxWithPalette(1); gSpecialVar_ItemId = ITEM_TM_CASE; - sub_8109890(taskId); + OpenContextMenu(taskId); break; case 408: PlaySE(SE_SELECT); - sub_810BA3C(10); - sub_810BA3C(6); + HideBagWindow(10); + HideBagWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); CopyWindowToVram(0, 1); DestroyListMenuTask(data[0], NULL, NULL); RestorePlayerBag(); - gUnknown_203AD10->exitCB = PokeDude_InitTMCase; - gTasks[taskId].func = sub_810B070; + sBagMenuDisplay->exitCB = PokeDude_InitTMCase; + gTasks[taskId].func = Task_PokeDude_FadeFromBag; return; } data[8]++; diff --git a/src/item_menu_icons.c b/src/item_menu_icons.c index 0c2c60437..d389c7781 100644 --- a/src/item_menu_icons.c +++ b/src/item_menu_icons.c @@ -5,14 +5,14 @@ #include "malloc.h" #include "constants/items.h" -static EWRAM_DATA u8 gUnknown_2039878[12] = {0}; -EWRAM_DATA void * gUnknown_2039884 = NULL; -static EWRAM_DATA void * gUnknown_2039888 = NULL; +static EWRAM_DATA u8 sItemMenuIconSpriteIds[12] = {0}; +static EWRAM_DATA void * sItemIconTilesBuffer = NULL; +static EWRAM_DATA void * sItemIconTilesBufferPadded = NULL; static void sub_8098560(struct Sprite * sprite); static void sub_80985BC(struct Sprite * sprite); -static const struct OamData gUnknown_83D416C = { +static const struct OamData sOamData_BagOrSatchel = { .affineMode = ST_OAM_AFFINE_NORMAL, .shape = ST_OAM_SQUARE, .size = 3, @@ -20,36 +20,36 @@ static const struct OamData gUnknown_83D416C = { .paletteNum = 0 }; -static const union AnimCmd gUnknown_83D4174[] = { +static const union AnimCmd sAnim_BagOrSatchel_OpenItemPocket[] = { ANIMCMD_FRAME( 0, 5), ANIMCMD_FRAME(0x40, 0), ANIMCMD_END }; -static const union AnimCmd gUnknown_83D4180[] = { +static const union AnimCmd sAnim_BagOrSatchel_OpenKeyItemPocket[] = { ANIMCMD_FRAME( 0, 5), ANIMCMD_FRAME(0x80, 0), ANIMCMD_END }; -static const union AnimCmd gUnknown_83D418C[] = { +static const union AnimCmd sAnim_BagOrSatchel_OpenPokeBallsPocket[] = { ANIMCMD_FRAME( 0, 5), ANIMCMD_FRAME(0xc0, 0), ANIMCMD_END }; -static const union AnimCmd *const gUnknown_83D4198[] = { - gUnknown_83D4180, - gUnknown_83D418C, - gUnknown_83D4174 +static const union AnimCmd *const sAnimTable_BagOrSatchel[] = { + sAnim_BagOrSatchel_OpenKeyItemPocket, + sAnim_BagOrSatchel_OpenPokeBallsPocket, + sAnim_BagOrSatchel_OpenItemPocket }; -static const union AffineAnimCmd gUnknown_83D41A4[] = { +static const union AffineAnimCmd sAffineAnim_Idle[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_END }; -static const union AffineAnimCmd gUnknown_83D41B4[] = { +static const union AffineAnimCmd sAffineAnim_Wobble[] = { AFFINEANIMCMD_FRAME(0, 0, -2, 2), AFFINEANIMCMD_FRAME(0, 0, 2, 4), AFFINEANIMCMD_FRAME(0, 0, -2, 4), @@ -57,35 +57,35 @@ static const union AffineAnimCmd gUnknown_83D41B4[] = { AFFINEANIMCMD_END }; -static const union AffineAnimCmd *const gUnknown_83D41DC[] = { - gUnknown_83D41A4, - gUnknown_83D41B4 +static const union AffineAnimCmd *const sAffineAnimTable_BagOrSatchel[] = { + sAffineAnim_Idle, + sAffineAnim_Wobble }; -const struct CompressedSpriteSheet gUnknown_83D41E4 = { +const struct CompressedSpriteSheet gSpriteSheet_Backpack = { gUnknown_8E8362C, 0x2000, 100 }; -const struct CompressedSpriteSheet gUnknown_83D41EC = { +const struct CompressedSpriteSheet gSpriteSheet_Satchel = { gUnknown_8E83DBC, 0x2000, 100 }; -const struct CompressedSpritePalette gUnknown_83D41F4 = { +const struct CompressedSpritePalette gSpritePalette_BagOrSatchel = { gUnknown_8E84560, 100 }; -static const struct SpriteTemplate gUnknown_83D41FC = { +static const struct SpriteTemplate sSpriteTemplate_BagOrSatchel = { 100, 100, - &gUnknown_83D416C, - gUnknown_83D4198, + &sOamData_BagOrSatchel, + sAnimTable_BagOrSatchel, NULL, - gUnknown_83D41DC, + sAffineAnimTable_BagOrSatchel, SpriteCallbackDummy }; @@ -139,7 +139,7 @@ static const struct SpriteTemplate gUnknown_83D4250 = { SpriteCallbackDummy }; -static const struct OamData gUnknown_83D4268 = { +static const struct OamData sOamData_ItemIcon = { .affineMode = ST_OAM_AFFINE_OFF, .shape = ST_OAM_SQUARE, .size = 2, @@ -147,26 +147,26 @@ static const struct OamData gUnknown_83D4268 = { .paletteNum = 2 }; -static const union AnimCmd gUnknown_83D4270[] = { +static const union AnimCmd sAnim_ItemIcon_0[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END }; -static const union AnimCmd *const gUnknown_83D4278[] = { - gUnknown_83D4270 +static const union AnimCmd *const sAnimTable_ItemIcon[] = { + sAnim_ItemIcon_0 }; -static const struct SpriteTemplate gUnknown_83D427C = { +static const struct SpriteTemplate sSpriteTemplate_ItemIcon = { 102, 102, - &gUnknown_83D4268, - gUnknown_83D4278, + &sOamData_ItemIcon, + sAnimTable_ItemIcon, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }; -static const void *const gUnknown_83D4294[][2] = { +static const void *const sItemIconGfxPtrs[][2] = { {gFile_graphics_items_icons_question_mark_sheet, gFile_graphics_items_icon_palettes_question_mark_palette}, {gFile_graphics_items_icons_master_ball_sheet, gFile_graphics_items_icon_palettes_master_ball_palette}, {gFile_graphics_items_icons_ultra_ball_sheet, gFile_graphics_items_icon_palettes_ultra_ball_palette}, @@ -549,19 +549,19 @@ void ResetItemMenuIconState(void) { u16 i; - for (i = 0; i < NELEMS(gUnknown_2039878); i++) - gUnknown_2039878[i] = 0xFF; + for (i = 0; i < NELEMS(sItemMenuIconSpriteIds); i++) + sItemMenuIconSpriteIds[i] = 0xFF; } -void sub_80984FC(u8 animNum) +void CreateBagOrSatchelSprite(u8 animNum) { - gUnknown_2039878[0] = CreateSprite(&gUnknown_83D41FC, 40, 68, 0); + sItemMenuIconSpriteIds[0] = CreateSprite(&sSpriteTemplate_BagOrSatchel, 40, 68, 0); sub_8098528(animNum); } void sub_8098528(u8 animNum) { - struct Sprite * sprite = &gSprites[gUnknown_2039878[0]]; + struct Sprite * sprite = &gSprites[sItemMenuIconSpriteIds[0]]; sprite->pos2.y = -5; sprite->callback = sub_8098560; StartSpriteAnim(sprite, animNum); @@ -577,7 +577,7 @@ static void sub_8098560(struct Sprite * sprite) void sub_8098580(void) { - struct Sprite * sprite = &gSprites[gUnknown_2039878[0]]; + struct Sprite * sprite = &gSprites[sItemMenuIconSpriteIds[0]]; if (sprite->affineAnimEnded) { StartSpriteAffineAnim(sprite, 1); @@ -594,40 +594,44 @@ static void sub_80985BC(struct Sprite * sprite) } } -void sub_80985E4(void) +void ItemMenuIcons_CreateInsertIndicatorBarHidden(void) { u8 i; - u8 * ptr = &gUnknown_2039878[1]; + u8 * ptr = &sItemMenuIconSpriteIds[1]; for (i = 0; i < 9; i++) { ptr[i] = CreateSprite(&gUnknown_83D4250, i * 16 + 0x60, 7, 0); - if (i != 0) + switch (i) { - if (i == 8) - StartSpriteAnim(&gSprites[ptr[i]], 2); - else - StartSpriteAnim(&gSprites[ptr[i]], 1); + case 0: + break; + case 8: + StartSpriteAnim(&gSprites[ptr[i]], 2); + break; + default: + StartSpriteAnim(&gSprites[ptr[i]], 1); + break; } gSprites[ptr[i]].invisible = TRUE; } } -void sub_8098660(u8 flag) +void ItemMenuIcons_ToggleInsertIndicatorBarVisibility(bool8 invisible) { u8 i; - u8 * ptr = &gUnknown_2039878[1]; + u8 * ptr = &sItemMenuIconSpriteIds[1]; for (i = 0; i < 9; i++) { - gSprites[ptr[i]].invisible = flag; + gSprites[ptr[i]].invisible = invisible; } } -void sub_80986A8(s16 x, u16 y) +void ItemMenuIcons_MoveInsertIndicatorBar(s16 x, u16 y) { u8 i; - u8 * ptr = &gUnknown_2039878[1]; + u8 * ptr = &sItemMenuIconSpriteIds[1]; for (i = 0; i < 9; i++) { @@ -636,15 +640,15 @@ void sub_80986A8(s16 x, u16 y) } } -static bool8 sub_80986EC(void) +static bool8 TryAllocItemIconTilesBuffers(void) { void ** ptr1, ** ptr2; - ptr1 = &gUnknown_2039884; + ptr1 = &sItemIconTilesBuffer; *ptr1 = Alloc(0x120); if (*ptr1 == NULL) return FALSE; - ptr2 = &gUnknown_2039888; + ptr2 = &sItemIconTilesBufferPadded; *ptr2 = AllocZeroed(0x200); if (*ptr2 == NULL) { @@ -671,27 +675,27 @@ u8 AddItemIconObject(u16 tilesTag, u16 paletteTag, u16 itemId) struct CompressedSpritePalette spritePalette; u8 spriteId; - if (!sub_80986EC()) + if (!TryAllocItemIconTilesBuffers()) return MAX_SPRITES; - LZDecompressWram(sub_8098974(itemId, 0), gUnknown_2039884); - CopyItemIconPicTo4x4Buffer(gUnknown_2039884, gUnknown_2039888); - spriteSheet.data = gUnknown_2039888; + LZDecompressWram(GetItemIconGfxPtr(itemId, 0), sItemIconTilesBuffer); + CopyItemIconPicTo4x4Buffer(sItemIconTilesBuffer, sItemIconTilesBufferPadded); + spriteSheet.data = sItemIconTilesBufferPadded; spriteSheet.size = 0x200; spriteSheet.tag = tilesTag; LoadSpriteSheet(&spriteSheet); - spritePalette.data = sub_8098974(itemId, 1); + spritePalette.data = GetItemIconGfxPtr(itemId, 1); spritePalette.tag = paletteTag; LoadCompressedSpritePalette(&spritePalette); - CpuCopy16(&gUnknown_83D427C, &template, sizeof(struct SpriteTemplate)); + CpuCopy16(&sSpriteTemplate_ItemIcon, &template, sizeof(struct SpriteTemplate)); template.tileTag = tilesTag; template.paletteTag = paletteTag; spriteId = CreateSprite(&template, 0, 0, 0); - Free(gUnknown_2039884); - Free(gUnknown_2039888); + Free(sItemIconTilesBuffer); + Free(sItemIconTilesBufferPadded); return spriteId; } @@ -702,17 +706,17 @@ u8 AddItemIconObjectWithCustomObjectTemplate(const struct SpriteTemplate * origT struct CompressedSpritePalette spritePalette; u8 spriteId; - if (!sub_80986EC()) + if (!TryAllocItemIconTilesBuffers()) return MAX_SPRITES; - LZDecompressWram(sub_8098974(itemId, 0), gUnknown_2039884); - CopyItemIconPicTo4x4Buffer(gUnknown_2039884, gUnknown_2039888); - spriteSheet.data = gUnknown_2039888; + LZDecompressWram(GetItemIconGfxPtr(itemId, 0), sItemIconTilesBuffer); + CopyItemIconPicTo4x4Buffer(sItemIconTilesBuffer, sItemIconTilesBufferPadded); + spriteSheet.data = sItemIconTilesBufferPadded; spriteSheet.size = 0x200; spriteSheet.tag = tilesTag; LoadSpriteSheet(&spriteSheet); - spritePalette.data = sub_8098974(itemId, 1); + spritePalette.data = GetItemIconGfxPtr(itemId, 1); spritePalette.tag = paletteTag; LoadCompressedSpritePalette(&spritePalette); @@ -721,14 +725,14 @@ u8 AddItemIconObjectWithCustomObjectTemplate(const struct SpriteTemplate * origT template.paletteTag = paletteTag; spriteId = CreateSprite(&template, 0, 0, 0); - Free(gUnknown_2039884); - Free(gUnknown_2039888); + Free(sItemIconTilesBuffer); + Free(sItemIconTilesBufferPadded); return spriteId; } void CreateItemMenuIcon(u16 itemId, u8 idx) { - u8 * ptr = &gUnknown_2039878[10]; + u8 * ptr = &sItemMenuIconSpriteIds[10]; u8 spriteId; if (ptr[idx] == 0xFF) @@ -747,7 +751,7 @@ void CreateItemMenuIcon(u16 itemId, u8 idx) void DestroyItemMenuIcon(u8 idx) { - u8 * ptr = &gUnknown_2039878[10]; + u8 * ptr = &sItemMenuIconSpriteIds[10]; if (ptr[idx] != 0xFF) { @@ -756,16 +760,16 @@ void DestroyItemMenuIcon(u8 idx) } } -const void * sub_8098974(u16 itemId, u8 attrId) +const void * GetItemIconGfxPtr(u16 itemId, u8 attrId) { if (itemId > ITEM_N_A) itemId = ITEM_NONE; - return gUnknown_83D4294[itemId][attrId]; + return sItemIconGfxPtrs[itemId][attrId]; } void sub_80989A0(u16 itemId, u8 idx) { - u8 * ptr = &gUnknown_2039878[10]; + u8 * ptr = &sItemMenuIconSpriteIds[10]; u8 spriteId; if (ptr[idx] == 0xFF) diff --git a/src/item_pc.c b/src/item_pc.c index 3134d9f6b..12a81f53e 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -348,7 +348,7 @@ static bool8 ItemPc_DoGfxSetup(void) gMain.state++; break; case 14: - sub_80985E4(); + ItemMenuIcons_CreateInsertIndicatorBarHidden(); gMain.state++; break; case 15: @@ -780,8 +780,8 @@ static void ItemPc_MoveItemModeInit(u8 taskId, s16 pos) StringExpandPlaceholders(gStringVar4, gOtherText_WhereShouldTheStrVar1BePlaced); FillWindowPixelBuffer(1, 0x00); ItemPc_AddTextPrinterParameterized(1, 2, gStringVar4, 0, 3, 2, 3, 0, 0); - sub_80986A8(-32, ListMenuGetYCoordForPrintingArrowCursor(data[0])); - sub_8098660(0); + ItemMenuIcons_MoveInsertIndicatorBar(-32, ListMenuGetYCoordForPrintingArrowCursor(data[0])); + ItemMenuIcons_ToggleInsertIndicatorBarVisibility(0); ItemPc_PrintOrRemoveCursor(data[0], 2); gTasks[taskId].func = Task_ItemPcMoveItemModeRun; } @@ -792,7 +792,7 @@ static void Task_ItemPcMoveItemModeRun(u8 taskId) ListMenu_ProcessInput(data[0]); ListMenuGetScrollAndRow(data[0], &sListMenuState.scroll, &sListMenuState.row); - sub_80986A8(-32, ListMenuGetYCoordForPrintingArrowCursor(data[0])); + ItemMenuIcons_MoveInsertIndicatorBar(-32, ListMenuGetYCoordForPrintingArrowCursor(data[0])); if (JOY_NEW(A_BUTTON | SELECT_BUTTON)) { PlaySE(SE_SELECT); @@ -820,7 +820,7 @@ static void ItemPc_InsertItemIntoNewSlot(u8 taskId, u32 pos) sListMenuState.row--; ItemPc_BuildListMenuTemplate(); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sListMenuState.scroll, sListMenuState.row); - sub_8098660(1); + ItemMenuIcons_ToggleInsertIndicatorBarVisibility(1); gTasks[taskId].func = Task_ItemPcMain; } } @@ -834,7 +834,7 @@ static void ItemPc_MoveItemModeCancel(u8 taskId, u32 pos) sListMenuState.row--; ItemPc_BuildListMenuTemplate(); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sListMenuState.scroll, sListMenuState.row); - sub_8098660(1); + ItemMenuIcons_ToggleInsertIndicatorBarVisibility(1); gTasks[taskId].func = Task_ItemPcMain; } diff --git a/src/item_use.c b/src/item_use.c index d5db22ca1..fc5703a75 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -154,7 +154,7 @@ static void sub_80A0FBC(u8 taskId) { ItemMenu_SetExitCallback(gUnknown_83E2954[itemType]); if (itemType == 1) - sub_8108CB4(); + Bag_BeginCloseWin0Animation(); ItemMenu_StartFadeToExitCallback(taskId); } } @@ -188,7 +188,7 @@ static void sub_80A10C4(u8 taskId, bool8 a1, u8 a2, const u8 * str) { StringExpandPlaceholders(gStringVar4, str); if (a1 == FALSE) - DisplayItemMessageInBag(taskId, a2, gStringVar4, sub_810A1F8); + DisplayItemMessageInBag(taskId, a2, gStringVar4, Task_ReturnToBagFromContextMenu); else DisplayItemMessageOnField(taskId, a2, gStringVar4, sub_80A112C); } @@ -345,7 +345,7 @@ void FieldUseFunc_CoinCase(u8 taskId) StringExpandPlaceholders(gStringVar4, gUnknown_8416537); ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, NULL, gSpecialVar_ItemId, 0xFFFF); if (gTasks[taskId].data[3] == 0) - DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A1F8); + DisplayItemMessageInBag(taskId, 2, gStringVar4, Task_ReturnToBagFromContextMenu); else DisplayItemMessageOnField(taskId, 2, gStringVar4, sub_80A112C); } @@ -356,7 +356,7 @@ void FieldUseFunc_PowderJar(u8 taskId) StringExpandPlaceholders(gStringVar4, gUnknown_8416644); ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, NULL, gSpecialVar_ItemId, 0xFFFF); if (gTasks[taskId].data[3] == 0) - DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A1F8); + DisplayItemMessageInBag(taskId, 2, gStringVar4, Task_ReturnToBagFromContextMenu); else DisplayItemMessageOnField(taskId, 2, gStringVar4, sub_80A112C); } @@ -384,7 +384,7 @@ void FieldUseFunc_PokeFlute(u8 taskId) { // Now that's a catchy tune! if (gTasks[taskId].data[3] == 0) - DisplayItemMessageInBag(taskId, 2, gUnknown_841665C, sub_810A1F8); + DisplayItemMessageInBag(taskId, 2, gUnknown_841665C, Task_ReturnToBagFromContextMenu); else DisplayItemMessageOnField(taskId, 2, gUnknown_841665C, sub_80A112C); } @@ -401,7 +401,7 @@ static void sub_80A1674(u8 taskId) if (WaitFanfare(FALSE)) { if (gTasks[taskId].data[3] == 0) - DisplayItemMessageInBag(taskId, 2, gUnknown_84166A7, sub_810A1F8); + DisplayItemMessageInBag(taskId, 2, gUnknown_84166A7, Task_ReturnToBagFromContextMenu); else DisplayItemMessageOnField(taskId, 2, gUnknown_84166A7, sub_80A112C); } @@ -518,7 +518,7 @@ void BattleUseFunc_BerryPouch(u8 taskId) static void InitBerryPouchFromBattle(void) { - InitBerryPouch(BERRYPOUCH_FROMBATTLE, sub_8107ECC, 0); + InitBerryPouch(BERRYPOUCH_FROMBATTLE, CB2_BagMenuFromBattle, 0); } void FieldUseFunc_TeachyTv(u8 taskId) @@ -562,7 +562,7 @@ void FieldUseFunc_SuperRepel(u8 taskId) } else // An earlier repel is still in effect - DisplayItemMessageInBag(taskId, 2, gUnknown_841659E, sub_810A1F8); + DisplayItemMessageInBag(taskId, 2, gUnknown_841659E, Task_ReturnToBagFromContextMenu); } static void sub_80A19E8(u8 taskId) @@ -572,15 +572,15 @@ static void sub_80A19E8(u8 taskId) ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, NULL, gSpecialVar_ItemId, 0xFFFF); VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gSpecialVar_ItemId)); sub_80A1A44(); - DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A1F8); + DisplayItemMessageInBag(taskId, 2, gStringVar4, Task_ReturnToBagFromContextMenu); } } static void sub_80A1A44(void) { RemoveBagItem(gSpecialVar_ItemId, 1); - sub_8108DC8(ItemId_GetPocket(gSpecialVar_ItemId)); - sub_81089F4(ItemId_GetPocket(gSpecialVar_ItemId)); + Pocket_CalculateNItemsAndMaxShowed(ItemId_GetPocket(gSpecialVar_ItemId)); + PocketCalculateInitialCursorPosAndItemsAbove(ItemId_GetPocket(gSpecialVar_ItemId)); CopyItemName(gSpecialVar_ItemId, gStringVar2); StringExpandPlaceholders(gStringVar4, gUnknown_841658C); } @@ -613,7 +613,7 @@ static void sub_80A1B48(u8 taskId) if (++gTasks[taskId].data[8] > 7) { PlaySE(SE_BIDORO); - DisplayItemMessageInBag(taskId, 2, gStringVar4, sub_810A1F8); + DisplayItemMessageInBag(taskId, 2, gStringVar4, Task_ReturnToBagFromContextMenu); } } @@ -745,18 +745,18 @@ void BattleUseFunc_PokeBallEtc(u8 taskId) if (!IsPlayerPartyAndPokemonStorageFull()) { RemoveBagItem(gSpecialVar_ItemId, 1); - sub_8108CB4(); + Bag_BeginCloseWin0Animation(); ItemMenu_StartFadeToExitCallback(taskId); } else { - DisplayItemMessageInBag(taskId, 2, gUnknown_8416631, sub_810A1F8); + DisplayItemMessageInBag(taskId, 2, gUnknown_8416631, Task_ReturnToBagFromContextMenu); } } void BattleUseFunc_PokeFlute(u8 taskId) { - sub_8108CB4(); + Bag_BeginCloseWin0Animation(); ItemMenu_StartFadeToExitCallback(taskId); } @@ -764,7 +764,7 @@ void BattleUseFunc_GuardSpec(u8 taskId) { if (ExecuteTableBasedItemEffect(&gPlayerParty[gBattlerPartyIndexes[gBattlerInMenuId]], gSpecialVar_ItemId, gBattlerPartyIndexes[gBattlerInMenuId], 0)) { - DisplayItemMessageInBag(taskId, 2, gText_WontHaveEffect, sub_810A1F8); + DisplayItemMessageInBag(taskId, 2, gText_WontHaveEffect, Task_ReturnToBagFromContextMenu); } else { @@ -790,7 +790,7 @@ static void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId) { if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { - sub_8108CB4(); + Bag_BeginCloseWin0Animation(); ItemMenu_StartFadeToExitCallback(taskId); } } diff --git a/src/menu_helpers.c b/src/menu_helpers.c index 53b9992a2..dedd7aa9e 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -242,7 +242,7 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1) return FALSE; } -u8 sub_80BF8E4(void) +u8 GetDialogBoxFontId(void) { if (!ContextNpcGetTextColor()) return 4; diff --git a/src/new_game.c b/src/new_game.c index 471c49e67..381ba28c8 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -98,7 +98,7 @@ void ResetMenuAndMonGlobals(void) gDifferentSaveFile = FALSE; ZeroPlayerPartyMons(); ZeroEnemyPartyMons(); - sub_81089BC(); + ResetBagCursorPositions(); ResetTMCaseCursorPos(); BerryPouch_CursorResetToTop(); ResetQuestLog(); diff --git a/src/party_menu.c b/src/party_menu.c index d12a17e6c..b6ec995ff 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -3451,7 +3451,7 @@ static void CursorCB_Give(u8 taskId) void CB2_SelectBagItemToGive(void) { - GoToBagMenu(1, 3, CB2_GiveHoldItem); + GoToBagMenu(ITEMMENULOCATION_PARTY, OPEN_BAG_LAST, CB2_GiveHoldItem); } void CB2_GiveHoldItem(void) @@ -4283,12 +4283,12 @@ void CB2_ShowPartyMenuForItemUse(void) static void CB2_ReturnToBagMenu(void) { - GoToBagMenu(11, 3, NULL); + GoToBagMenu(ITEMMENULOCATION_LAST, OPEN_BAG_LAST, NULL); } static void CB2_ReturnToTMCaseMenu(void) { - InitTMCase(5, NULL, 0xFF); + InitTMCase(TMCASE_NA, NULL, 0xFF); } static void CB2_ReturnToBerryPouchMenu(void) @@ -5904,7 +5904,7 @@ void OpenPartyMenuInBattle(void) void ChooseMonForInBattleItem(void) { - InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), PARTY_ACTION_REUSABLE_ITEM, FALSE, PARTY_MSG_USE_ON_WHICH_MON, sub_8120FCC, sub_8107ECC); + InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), PARTY_ACTION_REUSABLE_ITEM, FALSE, PARTY_MSG_USE_ON_WHICH_MON, sub_8120FCC, CB2_BagMenuFromBattle); nullsub_44(); UpdatePartyToBattleOrder(); } @@ -5919,7 +5919,7 @@ void sub_81279E0(void) FALSE, PARTY_MSG_NONE, sub_8120C3C, - sub_8107ECC); + CB2_BagMenuFromBattle); sub_80EB2F4(8); } else @@ -5929,7 +5929,7 @@ void sub_81279E0(void) if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH) callback = CB2_ReturnToBerryPouchMenu; else - callback = sub_8107ECC; + callback = CB2_BagMenuFromBattle; InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), PARTY_ACTION_USE_ITEM, diff --git a/src/player_pc.c b/src/player_pc.c index 00d41abe6..63870c86a 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -322,7 +322,7 @@ static void Task_DepositItem_WaitFadeAndGoToBag(u8 taskId) if (!gPaletteFade.active) { CleanupOverworldWindowsAndTilemaps(); - GoToBagMenu(3, POCKET_ITEMS - 1, CB2_ReturnToField); + GoToBagMenu(ITEMMENULOCATION_ITEMPC, OPEN_BAG_ITEMS, CB2_ReturnToField); gFieldCallback = CB2_ReturnFromDepositMenu; DestroyTask(taskId); } diff --git a/src/shop.c b/src/shop.c index b410b32b9..865688928 100644 --- a/src/shop.c +++ b/src/shop.c @@ -307,7 +307,7 @@ static void Task_HandleShopMenuSell(u8 taskId) static void CB2_GoToSellMenu(void) { - GoToBagMenu(2, POCKET_POKE_BALLS, CB2_ReturnToField); + GoToBagMenu(ITEMMENULOCATION_SHOP, OPEN_BAG_LAST, CB2_ReturnToField); gFieldCallback = MapPostLoadHook_ReturnToShopMenu; } diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 11d4a80b1..318803d88 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -34,16 +34,6 @@ #include "fieldmap.h" #include "strings.h" -enum TeachyTvScript -{ - TTVSCR_BATTLE, - TTVSCR_STATUS, - TTVSCR_MATCHUPS, - TTVSCR_CATCHING, - TTVSCR_TMS, - TTVSCR_REGISTER -}; - struct TeachyTvCtrlBlk { MainCallback callback; @@ -1103,9 +1093,9 @@ static void TTVcmd_TaskBattleOrFadeByOptionChosen(u8 taskId) static void TeachyTvSetupBagItemsByOptionChosen(void) { if (sStaticResources.whichScript == TTVSCR_TMS) - sub_810B108(10); + InitPokeDudeBag(10); else - sub_810B108(9); + InitPokeDudeBag(9); } static void TeachyTvPostBattleFadeControl(u8 taskId) diff --git a/src/tm_case.c b/src/tm_case.c index 40509ed1b..3da69c412 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -977,7 +977,7 @@ static void Task_SelectTMAction_FromSellMenu(u8 taskId) { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_OhNoICantBuyThat); - TMCase_PrintMessageWithFollowupTask(taskId, sub_80BF8E4(), gStringVar4, Subtask_CloseContextMenuAndReturnToMain); + TMCase_PrintMessageWithFollowupTask(taskId, GetDialogBoxFontId(), gStringVar4, Subtask_CloseContextMenuAndReturnToMain); } else { @@ -993,7 +993,7 @@ static void Task_SelectTMAction_FromSellMenu(u8 taskId) data[2] = 99; CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_HowManyWouldYouLikeToSell); - TMCase_PrintMessageWithFollowupTask(taskId, sub_80BF8E4(), gStringVar4, Task_InitQuantitySelectUI); + TMCase_PrintMessageWithFollowupTask(taskId, GetDialogBoxFontId(), gStringVar4, Task_InitQuantitySelectUI); } } } @@ -1004,7 +1004,7 @@ static void Task_AskConfirmSaleWithAmount(u8 taskId) ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_TM_CASE, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_ICanPayThisMuch_WouldThatBeOkay); - TMCase_PrintMessageWithFollowupTask(taskId, sub_80BF8E4(), gStringVar4, Task_PlaceYesNoBox); + TMCase_PrintMessageWithFollowupTask(taskId, GetDialogBoxFontId(), gStringVar4, Task_PlaceYesNoBox); } static void Task_PlaceYesNoBox(u8 taskId) diff --git a/sym_ewram.txt b/sym_ewram.txt index cb8a6f205..9ceae4842 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -335,36 +335,7 @@ gUnknown_203ACF0: @ 203ACF0 .align 2 .include "src/list_menu.o" .align 2 -gUnknown_203ACFC: @ 203ACFC - .space 0x14 - -gUnknown_203AD10: @ 203AD10 - .space 0x4 - -gUnknown_203AD14: @ 203AD14 - .space 0x4 - -gUnknown_203AD18: @ 203AD18 - .space 0x4 - -gUnknown_203AD1C: @ 203AD1C - .space 0x4 - -gUnknown_203AD20: @ 203AD20 - .space 0x4 - -gUnknown_203AD24: @ 203AD24 - .space 0x4 - -gUnknown_203AD28: @ 203AD28 - .space 0x4 - -gUnknown_203AD2C: @ 203AD2C - .space 0x4 - -gSpecialVar_ItemId: @ 203AD30 - .space 0x4 - + .include "src/item_menu.o" .align 2 .include "src/bag.o" .align 2 From 4723b1df96370705a695c7600ecb20de22bb7c70 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 19 Jan 2020 14:53:31 -0500 Subject: [PATCH 20/22] bag static rodata --- src/bag.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bag.c b/src/bag.c index 7f000722a..049aa9f8f 100644 --- a/src/bag.c +++ b/src/bag.c @@ -21,7 +21,7 @@ static const u8 sTextColors[][3] = { {0, 8, 9} }; -const struct WindowTemplate sDefaultBagWindowsStd[] = { +static const struct WindowTemplate sDefaultBagWindowsStd[] = { { .bg = 0, .tilemapLeft = 0x0b, @@ -49,7 +49,7 @@ const struct WindowTemplate sDefaultBagWindowsStd[] = { }, DUMMY_WIN_TEMPLATE }; -const struct WindowTemplate sDefaultBagWindowsDeposit[] = { +static const struct WindowTemplate sDefaultBagWindowsDeposit[] = { { .bg = 0, .tilemapLeft = 0x0b, @@ -77,7 +77,7 @@ const struct WindowTemplate sDefaultBagWindowsDeposit[] = { }, DUMMY_WIN_TEMPLATE }; -const struct WindowTemplate sWindowTemplates[] = { +static const struct WindowTemplate sWindowTemplates[] = { { .bg = 0, .tilemapLeft = 24, From 23949274b62c7b4c43b3012da89831662d8de6dd Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 19 Jan 2020 14:59:40 -0500 Subject: [PATCH 21/22] Use IML defines in InitPokeDudeBag args --- src/teachy_tv.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 318803d88..a8763333b 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -1093,9 +1093,9 @@ static void TTVcmd_TaskBattleOrFadeByOptionChosen(u8 taskId) static void TeachyTvSetupBagItemsByOptionChosen(void) { if (sStaticResources.whichScript == TTVSCR_TMS) - InitPokeDudeBag(10); + InitPokeDudeBag(ITEMMENULOCATION_TTVSCR_TMS); else - InitPokeDudeBag(9); + InitPokeDudeBag(ITEMMENULOCATION_TTVSCR_REGISTER); } static void TeachyTvPostBattleFadeControl(u8 taskId) From c365f58833d60606b2a759b190b1f35f09f7ee66 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 19 Jan 2020 16:19:35 -0500 Subject: [PATCH 22/22] Address review comments --- data/graphics.s | 4 +- data/text/teachy_tv.inc | 6 +-- include/constants/item_menu.h | 2 +- include/data.h | 2 +- include/graphics.h | 4 +- include/item_menu.h | 6 +-- include/strings.h | 6 +-- include/tm_case.h | 2 +- src/battle_controller_pokedude.c | 2 +- src/battle_main.c | 6 +-- src/battle_message.c | 4 +- src/data.c | 10 ++-- src/data/trainer_graphics/back_pic_anims.h | 8 +-- src/data/trainer_graphics/back_pic_tables.h | 4 +- src/graphics.c | 0 src/item_menu.c | 55 +++++++++++---------- src/item_pc.c | 6 +-- src/pokemon.c | 2 +- src/teachy_tv.c | 6 +-- src/tm_case.c | 28 +++++------ 20 files changed, 82 insertions(+), 81 deletions(-) create mode 100644 src/graphics.c diff --git a/data/graphics.s b/data/graphics.s index 0c7b8f341..809385e49 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -13476,7 +13476,7 @@ gTrainerBackPic_Leaf:: @ 8E6C6BC .incbin "graphics/trainers/back_pics/leaf_back_pic.4bpp" .align 2 -gTrainerBackPic_PokeDude:: @ 8E6EEBC +gTrainerBackPic_Pokedude:: @ 8E6EEBC .incbin "graphics/trainers/back_pics/pokedude_back_pic.4bpp" .align 2 @@ -13500,7 +13500,7 @@ gTrainerPalette_LeafBackPic:: @ 8E76EE4 .incbin "graphics/trainers/palettes/red_back_pic.gbapal.lz" .align 2 -gTrainerPalette_PokeDudeBackPic:: @ 8E76F0C +gTrainerPalette_PokedudeBackPic:: @ 8E76F0C .incbin "graphics/trainers/palettes/pokedude_back_pic.gbapal.lz" .align 2 diff --git a/data/text/teachy_tv.inc b/data/text/teachy_tv.inc index 3989aa5d1..ae0731142 100644 --- a/data/text/teachy_tv.inc +++ b/data/text/teachy_tv.inc @@ -19,7 +19,7 @@ gTeachyTvString_RegisterItem:: @ 841B81B gTeachyTvString_Cancel:: @ 841B836 .string "CANCEL$" -gTeachyTvText_PokeDudeSaysHello:: @ 841B83D +gTeachyTvText_PokedudeSaysHello:: @ 841B83D .string "Hey, all you TRAINERS out there!\n" .string "HELLO, TRAINERS!\p" .string "……… ……… ………\p" @@ -164,7 +164,7 @@ gTeachyTvText_TMsScript1:: @ 841C459 .string "You can check them out in detail,\n" .string "too.$" -gPokeDudeText_TMTypes:: @ 841C587 +gPokedudeText_TMTypes:: @ 841C587 .string "POKé DUDE: NORMAL, WATER, GRASS…\n" .string "TMs also come in types.\p" .string "Check the type and teach it to\n" @@ -175,7 +175,7 @@ gPokeDudeText_TMTypes:: @ 841C587 .string "GRASS-type POKéMON can learn.\p" .string "There's one other thing!$" -gPokeDudeText_ReadTMDescription:: @ 841C693 +gPokedudeText_ReadTMDescription:: @ 841C693 .string "Don't just look at the type, read\n" .string "the description, too.\p" .string "It will contain hints about what\n" diff --git a/include/constants/item_menu.h b/include/constants/item_menu.h index 2a51b8c1b..d173b9212 100644 --- a/include/constants/item_menu.h +++ b/include/constants/item_menu.h @@ -12,7 +12,7 @@ #define ITEMMENULOCATION_ITEMPC 3 #define ITEMMENULOCATION_PCBOX 4 #define ITEMMENULOCATION_BATTLE 5 -#define ITEMMENULOCATION_OLDMAN 6 +#define ITEMMENULOCATION_OLD_MAN 6 #define ITEMMENULOCATION_TTVSCR_STATUS 7 #define ITEMMENULOCATION_TTVSCR_CATCHING 8 #define ITEMMENULOCATION_TTVSCR_REGISTER 9 diff --git a/include/data.h b/include/data.h index 72e6b66fc..f308b044c 100644 --- a/include/data.h +++ b/include/data.h @@ -57,7 +57,7 @@ extern const struct SpriteFrameImage gUnknown_82346D8[]; extern const struct SpriteFrameImage gUnknown_82346F8[]; extern const struct SpriteFrameImage gTrainerBackPicTable_Red[]; extern const struct SpriteFrameImage gTrainerBackPicTable_Leaf[]; -extern const struct SpriteFrameImage gTrainerBackPicTable_PokeDude[]; +extern const struct SpriteFrameImage gTrainerBackPicTable_Pokedude[]; extern const struct SpriteFrameImage gTrainerBackPicTable_OldMan[]; extern const struct SpriteFrameImage gTrainerBackPicTable_RSBrendan[]; extern const struct SpriteFrameImage gTrainerBackPicTable_RSMay[]; diff --git a/include/graphics.h b/include/graphics.h index 296dee465..e87acb556 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -2652,7 +2652,7 @@ extern const u32 gTrainerPalette_RSBrendan1[]; extern const u32 gTrainerPalette_RSMay1[]; extern const u32 gTrainerPalette_LeafBackPic[]; extern const u32 gTrainerPalette_RedBackPic[]; -extern const u32 gTrainerPalette_PokeDudeBackPic[]; +extern const u32 gTrainerPalette_PokedudeBackPic[]; extern const u32 gTrainerPalette_OldManBackPic[]; extern const u32 gTrainerPalette_PokemonBreederM[]; extern const u32 gTrainerPalette_RSPokemonBreederF[]; @@ -4354,7 +4354,7 @@ extern const u8 gBerryPouchBg1Tilemap[]; extern const u8 gTrainerBackPic_Red[]; extern const u8 gTrainerBackPic_Leaf[]; -extern const u8 gTrainerBackPic_PokeDude[]; +extern const u8 gTrainerBackPic_Pokedude[]; extern const u8 gTrainerBackPic_OldMan[]; extern const u8 gTrainerBackPic_RSBrendan[]; extern const u8 gTrainerBackPic_RSMay[]; diff --git a/include/item_menu.h b/include/item_menu.h index 4720080da..27bd73e72 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -11,9 +11,9 @@ struct BagStruct { - void (*bagCallback)(void); + MainCallback bagCallback; u8 location; - u8 bagOpen; + bool8 bagOpen; u16 pocket; u16 itemsAbove[3]; u16 cursorPos[3]; @@ -28,7 +28,7 @@ void sub_81AAC50(void); void sub_81AAC70(void); void CB2_SetUpReshowBattleScreenAfterMenu(void); void ResetBagCursorPositions(void); -void InitPokeDudeBag(u8); +void InitPokedudeBag(u8); void CB2_BagMenuFromStartMenu(void); void MoveItemSlotInList(struct ItemSlot * itemSlots_, u32 from, u32 to_); void ItemMenu_StartFadeToExitCallback(u8 taskId); diff --git a/include/strings.h b/include/strings.h index 6241bd8a9..7e8a4fbb4 100644 --- a/include/strings.h +++ b/include/strings.h @@ -112,8 +112,8 @@ extern const u8 gText_OhNoICantBuyThat[]; extern const u8 gText_HowManyWouldYouLikeToSell[]; extern const u8 gText_ICanPayThisMuch_WouldThatBeOkay[]; extern const u8 gText_TurnedOverItemsWorthYen[]; -extern const u8 gPokeDudeText_TMTypes[]; -extern const u8 gPokeDudeText_ReadTMDescription[]; +extern const u8 gPokedudeText_TMTypes[]; +extern const u8 gPokedudeText_ReadTMDescription[]; extern const u8 gFameCheckerText_Cancel[]; extern const u8 gFameCheckerText_ListMenuCursor[]; extern const u8 gFameCheckerText_FameCheckerWillBeClosed[]; @@ -134,7 +134,7 @@ extern const u8 gTeachyTvString_CatchPkmn[]; extern const u8 gTeachyTvString_AboutTMs[]; extern const u8 gTeachyTvString_RegisterItem[]; extern const u8 gTeachyTvString_Cancel[]; -extern const u8 gTeachyTvText_PokeDudeSaysHello[]; +extern const u8 gTeachyTvText_PokedudeSaysHello[]; extern const u8 gTeachyTvText_BattleScript1[]; extern const u8 gTeachyTvText_StatusScript1[]; extern const u8 gTeachyTvText_MatchupsScript1[]; diff --git a/include/tm_case.h b/include/tm_case.h index bb88fc4d1..22fb021e0 100644 --- a/include/tm_case.h +++ b/include/tm_case.h @@ -13,6 +13,6 @@ enum TmCaseType void InitTMCase(u8 a0, void (* a1)(void), u8 a2); void ResetTMCaseCursorPos(void); -void PokeDude_InitTMCase(void); +void Pokedude_InitTMCase(void); #endif //GUARD_TM_CASE_H diff --git a/src/battle_controller_pokedude.c b/src/battle_controller_pokedude.c index b9df7e1ed..d8ebe5ba4 100644 --- a/src/battle_controller_pokedude.c +++ b/src/battle_controller_pokedude.c @@ -742,7 +742,7 @@ static void OpenBagAndChooseItem(void) callbackId = ITEMMENULOCATION_TTVSCR_CATCHING; break; } - InitPokeDudeBag(callbackId); + InitPokedudeBag(callbackId); } } diff --git a/src/battle_main.c b/src/battle_main.c index 9f3477659..15c264369 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -86,7 +86,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum); static void CB2_HandleStartBattle(void); static void TryCorrectShedinjaLanguage(struct Pokemon *mon); static void BattleMainCB1(void); -static void CB2_QuitPokeDudeBattle(void); +static void CB2_QuitPokedudeBattle(void); static void sub_80111FC(struct Sprite *sprite); static void sub_8011B94(void); static void sub_8011BB0(void); @@ -1438,7 +1438,7 @@ void BattleMainCB2(void) gSpecialVar_Result = gBattleOutcome = B_OUTCOME_DREW; ResetPaletteFadeControl(); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); - SetMainCallback2(CB2_QuitPokeDudeBattle); + SetMainCallback2(CB2_QuitPokedudeBattle); } } @@ -1454,7 +1454,7 @@ void FreeRestoreBattleData(void) FreeBattleResources(); } -static void CB2_QuitPokeDudeBattle(void) +static void CB2_QuitPokedudeBattle(void) { UpdatePaletteFade(); if (!gPaletteFade.active) diff --git a/src/battle_message.c b/src/battle_message.c index 568682031..5bc0f113f 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -463,7 +463,7 @@ const u8 *const gPokeblockWasTooXStringTable[] = { static const u8 sText_PlayerUsedItem[] = _("{B_PLAYER_NAME} used\n{B_LAST_ITEM}!"); static const u8 sText_OldManUsedItem[] = _("The old man used\n{B_LAST_ITEM}!"); -static const u8 sText_PokeDudeUsedItem[] = _("The POKé DUDE used\n{B_LAST_ITEM}!"); +static const u8 sText_PokedudeUsedItem[] = _("The POKé DUDE used\n{B_LAST_ITEM}!"); static const u8 sText_Trainer1UsedItem[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nused {B_LAST_ITEM}!"); static const u8 sText_TrainerBlockedBall[] = _("The TRAINER blocked the BALL!"); static const u8 sText_DontBeAThief[] = _("Don't be a thief!"); @@ -876,7 +876,7 @@ const u8 *const gBattleStringsTable[] = { Text_1A5D31, Text_1A5D6E, Text_1A5DB1, - sText_PokeDudeUsedItem, + sText_PokedudeUsedItem, gUnknown_83FDA4D, gUnknown_83FDA7A, gUnknown_83FDA8C, diff --git a/src/data.c b/src/data.c index dddeeac51..891c9f94f 100644 --- a/src/data.c +++ b/src/data.c @@ -60,12 +60,12 @@ const struct SpriteFrameImage gTrainerBackPicTable_Leaf[] = gTrainerBackPic_Leaf + 0x2000, 0x0800, }; -const struct SpriteFrameImage gTrainerBackPicTable_PokeDude[] = +const struct SpriteFrameImage gTrainerBackPicTable_Pokedude[] = { - gTrainerBackPic_PokeDude, 0x0800, - gTrainerBackPic_PokeDude + 0x0800, 0x0800, - gTrainerBackPic_PokeDude + 0x1000, 0x0800, - gTrainerBackPic_PokeDude + 0x1800, 0x0800, + gTrainerBackPic_Pokedude, 0x0800, + gTrainerBackPic_Pokedude + 0x0800, 0x0800, + gTrainerBackPic_Pokedude + 0x1000, 0x0800, + gTrainerBackPic_Pokedude + 0x1800, 0x0800, }; const struct SpriteFrameImage gTrainerBackPicTable_OldMan[] = diff --git a/src/data/trainer_graphics/back_pic_anims.h b/src/data/trainer_graphics/back_pic_anims.h index 2e107c21e..833a0cb28 100644 --- a/src/data/trainer_graphics/back_pic_anims.h +++ b/src/data/trainer_graphics/back_pic_anims.h @@ -16,7 +16,7 @@ static const union AnimCmd sAnimCmd_Leaf_1[] = { ANIMCMD_END }; -static const union AnimCmd sAnimCmd_PokeDude_1[] = { +static const union AnimCmd sAnimCmd_Pokedude_1[] = { ANIMCMD_FRAME(1, 24), ANIMCMD_FRAME(2, 9), ANIMCMD_FRAME(3, 24), @@ -60,9 +60,9 @@ const union AnimCmd *const sBackAnims_Leaf[] = { sAnimCmd_Leaf_1 }; -const union AnimCmd *const sBackAnims_PokeDude[] = { +const union AnimCmd *const sBackAnims_Pokedude[] = { sAnim_GeneralFrame0, - sAnimCmd_PokeDude_1 + sAnimCmd_Pokedude_1 }; const union AnimCmd *const sBackAnims_OldMan[] = { @@ -85,6 +85,6 @@ const union AnimCmd *const *const gTrainerBackAnimsPtrTable[] = { sBackAnims_Leaf, sBackAnims_RSBrendan, sBackAnims_RSMay, - sBackAnims_PokeDude, + sBackAnims_Pokedude, sBackAnims_OldMan }; diff --git a/src/data/trainer_graphics/back_pic_tables.h b/src/data/trainer_graphics/back_pic_tables.h index 86e7824c1..4d0c129a8 100644 --- a/src/data/trainer_graphics/back_pic_tables.h +++ b/src/data/trainer_graphics/back_pic_tables.h @@ -12,7 +12,7 @@ const struct CompressedSpriteSheet gTrainerBackPicTable[] = { { (const u32 *)gTrainerBackPic_Leaf, 0x2800, 1 }, { (const u32 *)gTrainerBackPic_RSBrendan, 0x2000, 2 }, { (const u32 *)gTrainerBackPic_RSMay, 0x2000, 3 }, - { (const u32 *)gTrainerBackPic_PokeDude, 0x2000, 4 }, + { (const u32 *)gTrainerBackPic_Pokedude, 0x2000, 4 }, { (const u32 *)gTrainerBackPic_OldMan, 0x2000, 5 } }; @@ -21,6 +21,6 @@ const struct CompressedSpritePalette gTrainerBackPicPaletteTable[] = { { gTrainerPalette_LeafBackPic, 1 }, { gTrainerPalette_RSBrendan1, 2 }, { gTrainerPalette_RSMay1, 3 }, - { gTrainerPalette_PokeDudeBackPic, 4 }, + { gTrainerPalette_PokedudeBackPic, 4 }, { gTrainerPalette_OldManBackPic, 5 } }; diff --git a/src/graphics.c b/src/graphics.c new file mode 100644 index 000000000..e69de29bb diff --git a/src/item_menu.c b/src/item_menu.c index 467ff4c6b..ffba2eae9 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -152,8 +152,8 @@ static void Task_SelectQuantityToDeposit(u8 taskId); static void Task_TryDoItemDeposit(u8 taskId); static bool8 BagIsTutorial(void); static void Task_Bag_OldManTutorial(u8 taskId); -static void Task_PokeDude_FadeFromBag(u8 taskId); -static void Task_PokeDude_WaitFadeAndExitBag(u8 taskId); +static void Task_Pokedude_FadeFromBag(u8 taskId); +static void Task_Pokedude_WaitFadeAndExitBag(u8 taskId); static void Task_Bag_TeachyTvRegister(u8 taskId); static void Task_Bag_TeachyTvCatching(u8 taskId); static void Task_Bag_TeachyTvStatus(u8 taskId); @@ -276,7 +276,7 @@ static const TaskFunc sItemContextTaskFuncs[] = { [ITEMMENULOCATION_ITEMPC] = Task_ItemContext_Deposit, [ITEMMENULOCATION_PCBOX] = Task_ItemContext_PcBoxGive, [ITEMMENULOCATION_BATTLE] = Task_ItemContext_FieldOrBattle, - [ITEMMENULOCATION_OLDMAN] = NULL + [ITEMMENULOCATION_OLD_MAN] = NULL }; static const struct YesNoFuncTable sYesNoMenu_Toss = { @@ -331,7 +331,7 @@ void GoToBagMenu(u8 location, u8 pocket, MainCallback bagCallback) sBagMenuDisplay->pocketSwitchArrowsTask = 0xFF; if (location == ITEMMENULOCATION_ITEMPC) sBagMenuDisplay->pocketSwitchMode = 1; - else if (location == ITEMMENULOCATION_OLDMAN) + else if (location == ITEMMENULOCATION_OLD_MAN) sBagMenuDisplay->pocketSwitchMode = 2; else sBagMenuDisplay->pocketSwitchMode = 0; @@ -609,7 +609,7 @@ static u8 CreateBagInputHandlerTask(u8 location) { switch (location) { - case ITEMMENULOCATION_OLDMAN: + case ITEMMENULOCATION_OLD_MAN: return CreateTask(Task_Bag_OldManTutorial, 0); case ITEMMENULOCATION_TTVSCR_REGISTER: return CreateTask(Task_Bag_TeachyTvRegister, 0); @@ -626,10 +626,11 @@ static u8 CreateBagInputHandlerTask(u8 location) static bool8 TryAllocListMenuBuffers(void) { - sListMenuItems = Alloc(43 * sizeof(struct ListMenuItem)); + // The items pocket has the highest capacity, + 1 for CANCEL + sListMenuItems = Alloc((BAG_ITEMS_COUNT + 1) * sizeof(struct ListMenuItem)); if (sListMenuItems == NULL) return FALSE; - sListMenuItemStrings = Alloc(43 * 19); + sListMenuItemStrings = Alloc((BAG_ITEMS_COUNT + 1) * sizeof(*sListMenuItemStrings)); if (sListMenuItemStrings == NULL) return FALSE; return TRUE; @@ -835,7 +836,7 @@ void ResetBagCursorPositions(void) { u8 i; gBagMenuState.pocket = POCKET_ITEMS - 1; - gBagMenuState.bagOpen = 0; + gBagMenuState.bagOpen = FALSE; for (i = 0; i < 3; i++) { gBagMenuState.itemsAbove[i] = 0; @@ -923,10 +924,10 @@ static void ShowBagOrBeginWin0OpenTask(void) LoadPalette(&paldata, 0x00, 0x02); SetGpuReg(REG_OFFSET_WININ, 0); - SetGpuReg(REG_OFFSET_WINOUT, 0x3F); + SetGpuReg(REG_OFFSET_WINOUT, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR); BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - if (gBagMenuState.bagOpen == 1) + if (gBagMenuState.bagOpen == TRUE) { SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 240)); SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 0)); @@ -938,7 +939,7 @@ static void ShowBagOrBeginWin0OpenTask(void) taskId = CreateTask(Task_AnimateWin0v, 0); gTasks[taskId].data[0] = 192; gTasks[taskId].data[1] = -16; - gBagMenuState.bagOpen = 1; + gBagMenuState.bagOpen = TRUE; } } @@ -948,12 +949,12 @@ void Bag_BeginCloseWin0Animation(void) u8 taskId = CreateTask(Task_AnimateWin0v, 0); gTasks[taskId].data[0] = -16; gTasks[taskId].data[1] = 16; - gBagMenuState.bagOpen = 0; + gBagMenuState.bagOpen = FALSE; } void CB2_SetUpReshowBattleScreenAfterMenu(void) { - gBagMenuState.bagOpen = 0; + gBagMenuState.bagOpen = FALSE; } static void Task_AnimateWin0v(u8 taskId) @@ -1363,7 +1364,7 @@ static void OpenContextMenu(u8 taskId) sContextMenuNumItems = 1; } break; - case ITEMMENULOCATION_OLDMAN: + case ITEMMENULOCATION_OLD_MAN: case ITEMMENULOCATION_TTVSCR_CATCHING: sContextMenuItemsPtr = sContextMenuItems_BattleUse; sContextMenuNumItems = 2; @@ -2050,7 +2051,7 @@ bool8 UseRegisteredKeyItemOnField(void) static bool8 BagIsTutorial(void) { if ( - gBagMenuState.location == ITEMMENULOCATION_OLDMAN + gBagMenuState.location == ITEMMENULOCATION_OLD_MAN || gBagMenuState.location == ITEMMENULOCATION_TTVSCR_CATCHING || gBagMenuState.location == ITEMMENULOCATION_TTVSCR_STATUS || gBagMenuState.location == ITEMMENULOCATION_TTVSCR_REGISTER @@ -2102,7 +2103,7 @@ void InitOldManBag(void) BackUpPlayerBag(); AddBagItem(ITEM_POTION, 1); AddBagItem(ITEM_POKE_BALL, 1); - GoToBagMenu(ITEMMENULOCATION_OLDMAN, OPEN_BAG_ITEMS, SetCB2ToReshowScreenAfterMenu2); + GoToBagMenu(ITEMMENULOCATION_OLD_MAN, OPEN_BAG_ITEMS, SetCB2ToReshowScreenAfterMenu2); } static void Task_Bag_OldManTutorial(u8 taskId) @@ -2134,20 +2135,20 @@ static void Task_Bag_OldManTutorial(u8 taskId) DestroyListMenuTask(data[0], NULL, NULL); RestorePlayerBag(); Bag_BeginCloseWin0Animation(); - gTasks[taskId].func = Task_PokeDude_FadeFromBag; + gTasks[taskId].func = Task_Pokedude_FadeFromBag; return; } data[8]++; } } -static void Task_PokeDude_FadeFromBag(u8 taskId) +static void Task_Pokedude_FadeFromBag(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); - gTasks[taskId].func = Task_PokeDude_WaitFadeAndExitBag; + gTasks[taskId].func = Task_Pokedude_WaitFadeAndExitBag; } -static void Task_PokeDude_WaitFadeAndExitBag(u8 taskId) +static void Task_Pokedude_WaitFadeAndExitBag(u8 taskId) { if (!gPaletteFade.active && FuncIsActiveTask(Task_AnimateWin0v) != TRUE) { @@ -2161,7 +2162,7 @@ static void Task_PokeDude_WaitFadeAndExitBag(u8 taskId) } } -void InitPokeDudeBag(u8 a0) +void InitPokedudeBag(u8 a0) { MainCallback cb2; u8 location; @@ -2198,7 +2199,7 @@ static bool8 Task_BButtonInterruptTeachyTv(u8 taskId) RestorePlayerBag(); SetTeachyTvControllerModeToResume(); sBagMenuDisplay->exitCB = CB2_ReturnToTeachyTV; - gTasks[taskId].func = Task_PokeDude_FadeFromBag; + gTasks[taskId].func = Task_Pokedude_FadeFromBag; return TRUE; } else @@ -2254,7 +2255,7 @@ static void Task_Bag_TeachyTvRegister(u8 taskId) DestroyListMenuTask(data[0], NULL, NULL); RestorePlayerBag(); Bag_BeginCloseWin0Animation(); - gTasks[taskId].func = Task_PokeDude_FadeFromBag; + gTasks[taskId].func = Task_Pokedude_FadeFromBag; return; } data[8]++; @@ -2308,7 +2309,7 @@ static void Task_Bag_TeachyTvCatching(u8 taskId) DestroyListMenuTask(data[0], NULL, NULL); RestorePlayerBag(); Bag_BeginCloseWin0Animation(); - gTasks[taskId].func = Task_PokeDude_FadeFromBag; + gTasks[taskId].func = Task_Pokedude_FadeFromBag; return; } data[8]++; @@ -2351,7 +2352,7 @@ static void Task_Bag_TeachyTvStatus(u8 taskId) RestorePlayerBag(); gItemUseCB = ItemUseCB_MedicineStep; ItemMenu_SetExitCallback(ChooseMonForInBattleItem); - gTasks[taskId].func = Task_PokeDude_FadeFromBag; + gTasks[taskId].func = Task_Pokedude_FadeFromBag; return; } data[8]++; @@ -2390,8 +2391,8 @@ static void Task_Bag_TeachyTvTMs(u8 taskId) CopyWindowToVram(0, 1); DestroyListMenuTask(data[0], NULL, NULL); RestorePlayerBag(); - sBagMenuDisplay->exitCB = PokeDude_InitTMCase; - gTasks[taskId].func = Task_PokeDude_FadeFromBag; + sBagMenuDisplay->exitCB = Pokedude_InitTMCase; + gTasks[taskId].func = Task_Pokedude_FadeFromBag; return; } data[8]++; diff --git a/src/item_pc.c b/src/item_pc.c index 12a81f53e..7c7abdce3 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -781,7 +781,7 @@ static void ItemPc_MoveItemModeInit(u8 taskId, s16 pos) FillWindowPixelBuffer(1, 0x00); ItemPc_AddTextPrinterParameterized(1, 2, gStringVar4, 0, 3, 2, 3, 0, 0); ItemMenuIcons_MoveInsertIndicatorBar(-32, ListMenuGetYCoordForPrintingArrowCursor(data[0])); - ItemMenuIcons_ToggleInsertIndicatorBarVisibility(0); + ItemMenuIcons_ToggleInsertIndicatorBarVisibility(FALSE); ItemPc_PrintOrRemoveCursor(data[0], 2); gTasks[taskId].func = Task_ItemPcMoveItemModeRun; } @@ -820,7 +820,7 @@ static void ItemPc_InsertItemIntoNewSlot(u8 taskId, u32 pos) sListMenuState.row--; ItemPc_BuildListMenuTemplate(); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sListMenuState.scroll, sListMenuState.row); - ItemMenuIcons_ToggleInsertIndicatorBarVisibility(1); + ItemMenuIcons_ToggleInsertIndicatorBarVisibility(TRUE); gTasks[taskId].func = Task_ItemPcMain; } } @@ -834,7 +834,7 @@ static void ItemPc_MoveItemModeCancel(u8 taskId, u32 pos) sListMenuState.row--; ItemPc_BuildListMenuTemplate(); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sListMenuState.scroll, sListMenuState.row); - ItemMenuIcons_ToggleInsertIndicatorBarVisibility(1); + ItemMenuIcons_ToggleInsertIndicatorBarVisibility(TRUE); gTasks[taskId].func = Task_ItemPcMain; } diff --git a/src/pokemon.c b/src/pokemon.c index 1270a25ed..5b715133b 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1547,7 +1547,7 @@ const struct SpriteTemplate gUnknown_825DF50[] = .paletteTag = 0, .oam = &gOamData_824F018, .anims = NULL, - .images = gTrainerBackPicTable_PokeDude, + .images = gTrainerBackPicTable_Pokedude, .affineAnims = gSpriteAffineAnimTable_82348C8, .callback = sub_80120C4, }, diff --git a/src/teachy_tv.c b/src/teachy_tv.c index a8763333b..1467131b0 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -795,7 +795,7 @@ static void TTVcmd_NpcMoveAndSetupTextPrinter(u8 taskId) if (spriteAddr->pos2.x == 0x78) { StartSpriteAnim(&gSprites[data[1]], 0); - TeachyTvInitTextPrinter(gTeachyTvText_PokeDudeSaysHello); + TeachyTvInitTextPrinter(gTeachyTvText_PokedudeSaysHello); data[2] = 0; ++data[3]; } @@ -1093,9 +1093,9 @@ static void TTVcmd_TaskBattleOrFadeByOptionChosen(u8 taskId) static void TeachyTvSetupBagItemsByOptionChosen(void) { if (sStaticResources.whichScript == TTVSCR_TMS) - InitPokeDudeBag(ITEMMENULOCATION_TTVSCR_TMS); + InitPokedudeBag(ITEMMENULOCATION_TTVSCR_TMS); else - InitPokeDudeBag(ITEMMENULOCATION_TTVSCR_REGISTER); + InitPokedudeBag(ITEMMENULOCATION_TTVSCR_REGISTER); } static void TeachyTvPostBattleFadeControl(u8 taskId) diff --git a/src/tm_case.c b/src/tm_case.c index 3da69c412..d45061bde 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -67,7 +67,7 @@ struct UnkStruct_203B11C static EWRAM_DATA struct UnkStruct_203B10C sTMCaseStaticResources = {}; static EWRAM_DATA struct UnkStruct_203B118 * sTMCaseDynamicResources = NULL; -static EWRAM_DATA struct UnkStruct_203B11C * sPokeDudePackBackup = NULL; +static EWRAM_DATA struct UnkStruct_203B11C * sPokedudePackBackup = NULL; static EWRAM_DATA void * sTilemapBuffer = NULL; // tilemap buffer static EWRAM_DATA struct ListMenuItem * sListMenuItemsBuffer = NULL; static EWRAM_DATA u8 (* sListMenuStringsBuffer)[29] = NULL; @@ -1133,13 +1133,13 @@ static void Task_AfterSale_ReturnToList(u8 taskId) } } -void PokeDude_InitTMCase(void) +void Pokedude_InitTMCase(void) { - sPokeDudePackBackup = AllocZeroed(sizeof(*sPokeDudePackBackup)); - memcpy(sPokeDudePackBackup->bagPocket_TMHM, gSaveBlock1Ptr->bagPocket_TMHM, sizeof(gSaveBlock1Ptr->bagPocket_TMHM)); - memcpy(sPokeDudePackBackup->bagPocket_KeyItems, gSaveBlock1Ptr->bagPocket_KeyItems, sizeof(gSaveBlock1Ptr->bagPocket_KeyItems)); - sPokeDudePackBackup->unk_160 = sTMCaseStaticResources.selectedRow; - sPokeDudePackBackup->unk_162 = sTMCaseStaticResources.scrollOffset; + sPokedudePackBackup = AllocZeroed(sizeof(*sPokedudePackBackup)); + memcpy(sPokedudePackBackup->bagPocket_TMHM, gSaveBlock1Ptr->bagPocket_TMHM, sizeof(gSaveBlock1Ptr->bagPocket_TMHM)); + memcpy(sPokedudePackBackup->bagPocket_KeyItems, gSaveBlock1Ptr->bagPocket_KeyItems, sizeof(gSaveBlock1Ptr->bagPocket_KeyItems)); + sPokedudePackBackup->unk_160 = sTMCaseStaticResources.selectedRow; + sPokedudePackBackup->unk_162 = sTMCaseStaticResources.scrollOffset; ClearItemSlots(gSaveBlock1Ptr->bagPocket_TMHM, NELEMS(gSaveBlock1Ptr->bagPocket_TMHM)); ClearItemSlots(gSaveBlock1Ptr->bagPocket_KeyItems, NELEMS(gSaveBlock1Ptr->bagPocket_KeyItems)); ResetTMCaseCursorPos(); @@ -1234,7 +1234,7 @@ static void Task_TMCaseDude_Playback(u8 taskId) break; case 8: FillBG2RowWithPalette_2timesNplus1(1); - TMCase_PrintMessageWithFollowupTask(taskId, 4, gPokeDudeText_TMTypes, 0); + TMCase_PrintMessageWithFollowupTask(taskId, 4, gPokedudeText_TMTypes, 0); gTasks[taskId].func = Task_TMCaseDude_Playback; data[8]++; break; @@ -1256,7 +1256,7 @@ static void Task_TMCaseDude_Playback(u8 taskId) break; case 18: FillBG2RowWithPalette_2timesNplus1(1); - TMCase_PrintMessageWithFollowupTask(taskId, 4, gPokeDudeText_ReadTMDescription, NULL); + TMCase_PrintMessageWithFollowupTask(taskId, 4, gPokedudeText_ReadTMDescription, NULL); gTasks[taskId].func = Task_TMCaseDude_Playback; // this function data[8]++; break; @@ -1267,12 +1267,12 @@ static void Task_TMCaseDude_Playback(u8 taskId) case 21: if (!gPaletteFade.active) { - memcpy(gSaveBlock1Ptr->bagPocket_TMHM, sPokeDudePackBackup->bagPocket_TMHM, sizeof(gSaveBlock1Ptr->bagPocket_TMHM)); - memcpy(gSaveBlock1Ptr->bagPocket_KeyItems, sPokeDudePackBackup->bagPocket_KeyItems, sizeof(gSaveBlock1Ptr->bagPocket_KeyItems)); + memcpy(gSaveBlock1Ptr->bagPocket_TMHM, sPokedudePackBackup->bagPocket_TMHM, sizeof(gSaveBlock1Ptr->bagPocket_TMHM)); + memcpy(gSaveBlock1Ptr->bagPocket_KeyItems, sPokedudePackBackup->bagPocket_KeyItems, sizeof(gSaveBlock1Ptr->bagPocket_KeyItems)); DestroyListMenuTask(data[0], NULL, NULL); - sTMCaseStaticResources.selectedRow = sPokeDudePackBackup->unk_160; - sTMCaseStaticResources.scrollOffset = sPokeDudePackBackup->unk_162; - Free(sPokeDudePackBackup); + sTMCaseStaticResources.selectedRow = sPokedudePackBackup->unk_160; + sTMCaseStaticResources.scrollOffset = sPokedudePackBackup->unk_162; + Free(sPokedudePackBackup); CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); CB2_SetUpReshowBattleScreenAfterMenu(); BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, 0);