diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/debug/start_menu_debug.c | 10 | ||||
-rw-r--r-- | src/field/battle_tower.c | 104 | ||||
-rw-r--r-- | src/field/berry.c | 601 | ||||
-rw-r--r-- | src/field/field_weather.c | 251 | ||||
-rw-r--r-- | src/field/fldeff_cut.c | 141 | ||||
-rw-r--r-- | src/field/fldeff_secretpower.c | 24 | ||||
-rw-r--r-- | src/field/shop.c | 52 | ||||
-rw-r--r-- | src/field/start_menu.c | 370 |
8 files changed, 355 insertions, 1198 deletions
diff --git a/src/debug/start_menu_debug.c b/src/debug/start_menu_debug.c index 04bfb30d1..9b12c1cc1 100644 --- a/src/debug/start_menu_debug.c +++ b/src/debug/start_menu_debug.c @@ -1433,7 +1433,7 @@ u8 DebugMenu_8077434() " ldr r0, ._157 @ Str_839BE0F\n" " mov r1, #0x1\n" " mov r2, #0x4\n" - " bl GetEnigmaBerryChecksum\n" + " bl debug_sub_80C2C18\n" " mov r0, #0xff\n" " str r0, [sp]\n" " str r0, [sp, #0x4]\n" @@ -1450,7 +1450,7 @@ u8 DebugMenu_8077434() " ldr r0, ._160 @ Str_839BE12\n" " mov r1, #0x2\n" " mov r2, #0x0\n" - " bl GetEnigmaBerryChecksum\n" + " bl debug_sub_80C2C18\n" " mov r0, #0xff\n" " str r0, [sp]\n" " str r0, [sp, #0x4]\n" @@ -1465,7 +1465,7 @@ u8 DebugMenu_8077434() " ldr r0, ._163 @ Str_839BE16\n" " mov r1, #0x3\n" " mov r2, #0x0\n" - " bl GetEnigmaBerryChecksum\n" + " bl debug_sub_80C2C18\n" " mov r0, #0xff\n" " str r0, [sp]\n" " str r0, [sp, #0x4]\n" @@ -1479,7 +1479,7 @@ u8 DebugMenu_8077434() " ldr r0, ._166 @ Str_839BE1A\n" " mov r1, #0x4\n" " mov r2, #0x0\n" - " bl GetEnigmaBerryChecksum\n" + " bl debug_sub_80C2C18\n" " mov r0, #0xff\n" " str r0, [sp]\n" " str r0, [sp, #0x4]\n" @@ -1499,7 +1499,7 @@ u8 DebugMenu_8077434() " ldr r0, ._168 @ Str_839BE1E\n" " mov r1, #0x4\n" " mov r2, #0x0\n" - " bl GetEnigmaBerryChecksum\n" + " bl debug_sub_80C2C18\n" " mov r0, #0xff\n" " str r0, [sp]\n" " str r0, [sp, #0x4]\n" diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c index 41d5ae9d1..1853abbee 100644 --- a/src/field/battle_tower.c +++ b/src/field/battle_tower.c @@ -259,7 +259,6 @@ static void SaveCurrentWinStreak(void); static void sub_8135CFC(void); static void CheckMonBattleTowerBanlist(u16, u16, u16, u8, u8, u16 *, u16 *, u8 *); static void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *); -void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer); static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *); static void ClearBattleTowerRecord(struct BattleTowerRecord *); @@ -1561,17 +1560,11 @@ void PrintBattleTowerTrainerMessage(u16 *easyChat) void PrintBattleTowerTrainerGreeting(void) { if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); - } + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting); else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { PrintBattleTowerTrainerMessage((u16 *)gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].greeting.easyChat); - } else - { PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].greeting.easyChat); - } } void sub_81354CC(void) @@ -1643,9 +1636,7 @@ void StartSpecialBattle(void) ZeroEnemyPartyMons(); for (i = 0; i < 3; i++) - { sub_803ADE8(&gEnemyParty[i], &gSaveBlock2.battleTower.ereaderTrainer.party[i]); - } gBattleTypeFlags = (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER); gTrainerBattleOpponent = 0; @@ -1683,34 +1674,22 @@ void SetBattleTowerProperty(void) break; case 5: for (i = 0; i < 3; i++) - { gSaveBlock2.battleTower.selectedPartyMons[i] = gSelectedOrderFromParty[i]; - } break; case 6: if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer); - } - if (gSaveBlock2.battleTower.totalBattleTowerWins < 9999) - { gSaveBlock2.battleTower.totalBattleTowerWins++; - } - gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]++; SaveCurrentWinStreak(); gSpecialVar_Result = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; - gStringVar1[0] = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] + 0xA1; gStringVar1[1] = 0xFF; break; case 7: if (gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] < 1430) - { gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]++; - } - SaveCurrentWinStreak(); gSpecialVar_Result = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; break; @@ -1724,9 +1703,7 @@ void SetBattleTowerProperty(void) break; case 11: if (gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] != 3) - { ResetBattleTowerStreak(battleTowerLevelType); - } break; case 12: gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; @@ -1794,9 +1771,7 @@ void SetBattleTowerParty(void) s32 i; for (i = 0; i < 3; i++) - { gSelectedOrderFromParty[i] = gSaveBlock2.battleTower.selectedPartyMons[i]; - } ReducePlayerPartyToThree(); } @@ -1858,14 +1833,10 @@ void sub_8135AC4(void) playerRecord->winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); for (i = 0; i < 6; i++) - { playerRecord->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i]; - } for (i = 0; i < 3; i++) - { sub_803AF78(&gUnknown_030042FC[gSaveBlock2.battleTower.selectedPartyMons[i]], &playerRecord->party[i]); - } SetBattleTowerRecordChecksum(&gSaveBlock2.battleTower.playerRecord); SaveCurrentWinStreak(); @@ -1878,10 +1849,8 @@ void SaveBattleTowerProgress(void) if (gSpecialVar_0x8004 == 3 || gSpecialVar_0x8004 == 0) { if (gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] > 1 - || gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] > 1) - { + || gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] > 1) sub_8135AC4(); - } } sub_8135CFC(); @@ -1889,9 +1858,7 @@ void SaveBattleTowerProgress(void) gSaveBlock2.battleTower.battleOutcome = gBattleOutcome; if (gSpecialVar_0x8004 != 3) - { gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8004; - } VarSet(VAR_TEMP_0, 0); gSaveBlock2.battleTower.unk_554 = 1; @@ -1912,28 +1879,20 @@ void ValidateBattleTowerRecordChecksums(void) checksum = 0; for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) - { checksum += ((u32 *)&gSaveBlock2.battleTower.playerRecord)[i]; - } if (gSaveBlock2.battleTower.playerRecord.checksum != checksum) - { ClearBattleTowerRecord(&gSaveBlock2.battleTower.playerRecord); - } for (recordIndex = 0; recordIndex < 5; recordIndex++) { record = &gSaveBlock2.battleTower.records[recordIndex]; checksum = 0; for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) - { checksum += ((u32 *)record)[i]; - } if (gSaveBlock2.battleTower.records[recordIndex].checksum != checksum) - { ClearBattleTowerRecord(&gSaveBlock2.battleTower.records[recordIndex]); - } } } @@ -1943,9 +1902,7 @@ void SetBattleTowerRecordChecksum(struct BattleTowerRecord *record) record->checksum = 0; for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) - { record->checksum += ((u32 *)record)[i]; - } } void ClearBattleTowerRecord(struct BattleTowerRecord *record) @@ -1953,9 +1910,7 @@ void ClearBattleTowerRecord(struct BattleTowerRecord *record) u32 i; for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32); i++) - { ((u32 *)record)[i] = 0; - } } void sub_8135CFC(void) @@ -1967,9 +1922,7 @@ void sub_8135CFC(void) gSaveBlock2.battleTower.firstMonSpecies = gBattleMons[0].species; for (i = 0; i < POKEMON_NAME_LENGTH; i++) - { gSaveBlock2.battleTower.firstMonNickname[i] = gBattleMons[0].nickname[i]; - } } u16 GetCurrentBattleTowerWinStreak(u8 battleTowerLevelType) @@ -1978,11 +1931,9 @@ u16 GetCurrentBattleTowerWinStreak(u8 battleTowerLevelType) + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; if (winStreak > 9999) - { return 9999; - } - - return winStreak; + else + return winStreak; } void DetermineBattleTowerPrize(void) @@ -2019,11 +1970,10 @@ void AwardBattleTowerRibbons(void) u8 ribbonType; u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - ribbonType = MON_DATA_WINNING_RIBBON; if (battleTowerLevelType != 0) - { ribbonType = MON_DATA_VICTORY_RIBBON; - } + else + ribbonType = MON_DATA_WINNING_RIBBON; gSpecialVar_Result = 0; @@ -2042,9 +1992,7 @@ void AwardBattleTowerRibbons(void) } if (gSpecialVar_Result != 0) - { IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS); - } } // This is a leftover debugging function that is used to populate the E-Reader @@ -2076,16 +2024,14 @@ void Debug_FillEReaderTrainerWithPlayerData(void) j = 7; for (i = 0; i < 6; i++) { - ereaderTrainer->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i]; - ereaderTrainer->farewellPlayerLost.easyChat[i] = j; - ereaderTrainer->farewellPlayerWon.easyChat[i] = j + 6; + ereaderTrainer->greeting[i] = gSaveBlock1.easyChats.unk2B28[i]; + ereaderTrainer->farewellPlayerLost[i] = j; + ereaderTrainer->farewellPlayerWon[i] = j + 6; j++; } for (i = 0; i < 3; i++) - { sub_803AF78(&gPlayerParty[i], &ereaderTrainer->party[i]); - } SetEReaderTrainerChecksum(ereaderTrainer); } @@ -2105,9 +2051,7 @@ void SetEReaderTrainerName(u8 *trainerName) s32 i; for (i = 0; i < 7; i++) - { trainerName[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; - } trainerName[i] = 0xFF; } @@ -2124,9 +2068,7 @@ void ValidateEReaderTrainer(void) checksum = 0; for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) - { checksum |= ((u32 *)ereaderTrainer)[i]; - } if (checksum == 0) { @@ -2136,9 +2078,7 @@ void ValidateEReaderTrainer(void) checksum = 0; for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) - { checksum += ((u32 *)ereaderTrainer)[i]; - } if (gSaveBlock2.battleTower.ereaderTrainer.checksum != checksum) { @@ -2153,9 +2093,7 @@ void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer) ereaderTrainer->checksum = 0; for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) - { ereaderTrainer->checksum += ((u32 *)ereaderTrainer)[i]; - } } void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer) @@ -2163,30 +2101,22 @@ void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer) u32 i; for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32); i++) - { ((u32 *)ereaderTrainer)[i] = 0; - } } void PrintEReaderTrainerGreeting(void) { - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting); } void PrintEReaderTrainerFarewellMessage(void) { if (gBattleOutcome == BATTLE_DREW) - { - gStringVar4[0] = 0xFF; - } + gStringVar4[0] = EOS; else if (gBattleOutcome == BATTLE_WON) - { - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerWon.easyChat); - } + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerWon); else - { - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerLost.easyChat); - } + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerLost); } void TryEnableBravoTrainerBattleTower(void) @@ -2196,9 +2126,7 @@ void TryEnableBravoTrainerBattleTower(void) for (i = 0; i < 2; i++) { if (gSaveBlock2.battleTower.var_4AE[i] == 1) - { sub_80BFD20(); - } } } @@ -2206,17 +2134,11 @@ void TryEnableBravoTrainerBattleTower(void) u8 de_sub_81364AC(void) { if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { return gSaveBlock2.battleTower.ereaderTrainer.trainerClass; - } else if (gSaveBlock2.battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { return gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass; - } else - { return gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass; - } } u8 de_sub_81364F8(void) diff --git a/src/field/berry.c b/src/field/berry.c index 588807755..a0ec9836a 100644 --- a/src/field/berry.c +++ b/src/field/berry.c @@ -8,7 +8,9 @@ #include "item_use.h" #include "constants/items.h" #include "main.h" +#include "menu.h" #include "random.h" +#include "task.h" #include "text.h" #define BERRY_NAME_LENGTH 6 @@ -1000,63 +1002,27 @@ static u8 CalcBerryYield(struct BerryTree *tree); static u16 GetStageDurationByBerryType(u8 berry); #if DEBUG -__attribute__((naked)) -void debug_sub_80C2B04() + +extern u8 sub_80B47D8(u16 var); + +u8 debug_sub_80C2B04(void) { - asm( - " push {lr}\n" - " mov r0, #0x0\n" - " bl sub_80B47D8\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " ldr r2, ._1 @ gTasks\n" - " lsl r1, r0, #0x2\n" - " add r1, r1, r0\n" - " lsl r1, r1, #0x3\n" - " add r1, r1, r2\n" - " ldrh r0, [r1, #0x10]\n" - " sub r0, r0, #0x1\n" - " strh r0, [r1, #0x10]\n" - " bl CloseMenu\n" - " mov r0, #0x1\n" - " pop {r1}\n" - " bx r1\n" - "._2:\n" - " .align 2, 0\n" - "._1:\n" - " .word gTasks\n" - "\n" - ); + u8 taskId = sub_80B47D8(0); + + gTasks[taskId].data[4]--; + CloseMenu(); + return 1; } -__attribute__((naked)) -void debug_sub_80C2B30() +u8 debug_sub_80C2B30(void) { - asm( - " push {lr}\n" - " mov r0, #0x1\n" - " bl sub_80B47D8\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " ldr r2, ._3 @ gTasks\n" - " lsl r1, r0, #0x2\n" - " add r1, r1, r0\n" - " lsl r1, r1, #0x3\n" - " add r1, r1, r2\n" - " ldrh r0, [r1, #0x10]\n" - " sub r0, r0, #0x1\n" - " strh r0, [r1, #0x10]\n" - " bl CloseMenu\n" - " mov r0, #0x1\n" - " pop {r1}\n" - " bx r1\n" - "._4:\n" - " .align 2, 0\n" - "._3:\n" - " .word gTasks\n" - "\n" - ); + u8 taskId = sub_80B47D8(1); + + gTasks[taskId].data[4]--; + CloseMenu(); + return 1; } + #endif // unused @@ -1082,180 +1048,6 @@ void SetEnigmaBerry(u8 *src) gSaveBlock1.enigmaBerry.berry.description2 = gSaveBlock1.enigmaBerry.description2; } -#if DEBUG -__attribute__((naked)) -void debug_sub_80C2BD0() -{ - asm( - " push {r4, r5, r6, r7, lr}\n" - " ldr r3, ._11 @ gSaveBlock1\n" - " ldr r1, ._11 + 4 @ 0x316c\n" - " add r4, r3, r1\n" - " ldr r6, [r4]\n" - " add r1, r1, #0x4\n" - " add r2, r3, r1\n" - " ldr r7, [r2]\n" - " mov r1, #0x0\n" - " str r1, [r4]\n" - " str r1, [r2]\n" - " add r4, r0, #0\n" - " mov r2, #0x0\n" - " ldr r5, ._11 + 8 @ 0x52b\n" - "._10:\n" - " add r0, r4, r1\n" - " ldrb r0, [r0]\n" - " add r2, r2, r0\n" - " add r1, r1, #0x1\n" - " cmp r1, r5\n" - " bls ._10 @cond_branch\n" - " ldr r1, ._11 + 4 @ 0x316c\n" - " add r0, r3, r1\n" - " str r6, [r0]\n" - " add r1, r1, #0x4\n" - " add r0, r3, r1\n" - " str r7, [r0]\n" - " add r0, r2, #0\n" - " pop {r4, r5, r6, r7}\n" - " pop {r1}\n" - " bx r1\n" - "._12:\n" - " .align 2, 0\n" - "._11:\n" - " .word gSaveBlock1\n" - " .word 0x316c\n" - " .word 0x52b\n" - "\n" - ); -} -#endif - -#if DEBUG -__attribute__((naked)) -u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry) -{ - asm( - " push {r4, r5, r6, r7, lr}\n" - " mov r7, r9\n" - " mov r6, r8\n" - " push {r6, r7}\n" - " add r3, r0, #0\n" - " lsl r1, r1, #0x18\n" - " lsr r1, r1, #0x18\n" - " mov r9, r1\n" - " lsl r2, r2, #0x18\n" - " lsr r2, r2, #0x18\n" - " mov r8, r2\n" - " ldr r4, ._16 @ gSaveBlock1\n" - " ldr r1, ._16 + 4 @ 0x3160\n" - " add r0, r4, r1\n" - " add r2, r0, #0\n" - " ldr r1, ._16 + 8 @ gBerries\n" - " ldmia r1!, {r5, r6, r7}\n" - " stmia r2!, {r5, r6, r7}\n" - " ldmia r1!, {r5, r6, r7}\n" - " stmia r2!, {r5, r6, r7}\n" - " ldr r1, [r1]\n" - " str r1, [r2]\n" - " add r1, r3, #0\n" - " bl StringCopy\n" - " ldr r0, ._16 + 12 @ 0x361c\n" - " add r6, r4, r0\n" - " ldr r1, ._16 + 16 @ gUnknown_Debug_083F7F84\n" - " add r0, r6, #0\n" - " bl StringCopy\n" - " ldr r1, ._16 + 20 @ 0x3649\n" - " add r5, r4, r1\n" - " ldr r1, ._16 + 24 @ gUnknown_Debug_083F7F90\n" - " add r0, r5, #0\n" - " bl StringCopy\n" - " ldr r2, ._16 + 28 @ 0x316c\n" - " add r0, r4, r2\n" - " str r6, [r0]\n" - " ldr r6, ._16 + 32 @ 0x3170\n" - " add r0, r4, r6\n" - " str r5, [r0]\n" - " mov r2, #0x0\n" - " ldr r6, ._16 + 36 @ 0x47f\n" - " ldr r7, ._16 + 40 @ 0x317c\n" - " add r5, r4, r7\n" - " ldr r3, ._16 + 44 @ gSpriteImage_UnusedCherry\n" - "._13:\n" - " add r0, r2, r5\n" - " add r1, r2, r3\n" - " ldrb r1, [r1]\n" - " strb r1, [r0]\n" - " add r2, r2, #0x1\n" - " cmp r2, r6\n" - " ble ._13 @cond_branch\n" - " ldr r0, ._16 @ gSaveBlock1\n" - " ldr r3, ._16 + 48 @ gSpritePalette_UnusedCherry\n" - " ldr r2, ._16 + 52 @ 0x35fc\n" - " add r1, r0, r2\n" - " mov r2, #0xf\n" - "._14:\n" - " ldrh r0, [r3]\n" - " strh r0, [r1]\n" - " add r3, r3, #0x2\n" - " add r1, r1, #0x2\n" - " sub r2, r2, #0x1\n" - " cmp r2, #0\n" - " bge ._14 @cond_branch\n" - " mov r2, #0x0\n" - " ldr r5, ._16 + 56 @ gSaveBlock1\n" - " ldr r3, ._16 + 60 @ gUnknown_Debug_839B6CE\n" - "._15:\n" - " add r0, r2, r5\n" - " add r1, r2, r3\n" - " ldrb r1, [r1]\n" - " strb r1, [r0]\n" - " add r2, r2, #0x1\n" - " cmp r2, #0x11\n" - " ble ._15 @cond_branch\n" - " ldr r5, ._16 + 64 @ 0x3688\n" - " add r0, r4, r5\n" - " mov r6, r9\n" - " strb r6, [r0]\n" - " ldr r7, ._16 + 68 @ 0x3689\n" - " add r0, r4, r7\n" - " mov r1, r8\n" - " strb r1, [r0]\n" - " ldr r2, ._16 + 4 @ 0x3160\n" - " add r0, r4, r2\n" - " bl debug_sub_80C2BD0\n" - " add r5, r5, #0x4\n" - " add r1, r4, r5\n" - " str r0, [r1]\n" - " pop {r3, r4}\n" - " mov r8, r3\n" - " mov r9, r4\n" - " pop {r4, r5, r6, r7}\n" - " pop {r0}\n" - " bx r0\n" - "._17:\n" - " .align 2, 0\n" - "._16:\n" - " .word gSaveBlock1\n" - " .word 0x3160\n" - " .word gBerries\n" - " .word 0x361c\n" - " .word gUnknown_Debug_083F7F84\n" - " .word 0x3649\n" - " .word gUnknown_Debug_083F7F90\n" - " .word 0x316c\n" - " .word 0x3170\n" - " .word 0x47f\n" - " .word 0x317c\n" - " .word gSpriteImage_UnusedCherry\n" - " .word gSpritePalette_UnusedCherry\n" - " .word 0x35fc\n" - " .word gSaveBlock1+0x3676\n" - " .word gUnknown_Debug_839B6CE\n" - " .word 0x3688\n" - " .word 0x3689\n" - "\n" - ); -} -#else static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry) { const u8 *description1; @@ -1275,9 +1067,7 @@ static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry) dest = (u8*)enigmaBerry; checksum = 0; for (i = 0; i < ((u32)&gSaveBlock1.enigmaBerry.checksum - (u32)&gSaveBlock1.enigmaBerry); i++) - { checksum += dest[i]; - } // the checksum is calculated: the descriptions are safe to restore now. gSaveBlock1.enigmaBerry.berry.description1 = description1; @@ -1285,110 +1075,52 @@ static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry) return checksum; } -#endif #if DEBUG -__attribute__((naked)) -void debug_sub_80C2D24() + +extern const u8 gSpriteImage_UnusedCherry[]; +extern const u16 gSpritePalette_UnusedCherry[]; +extern u8 gUnknown_Debug_839B6CE[]; + +static const u8 gUnknown_Debug_083F7F84[] = _("そとから きた きのみ"); +static const u8 gUnknown_Debug_083F7F90[] = _("ただいま かいはつちゅう"); + +void debug_sub_80C2C18(u8 *name, u8 holdEffect, u8 holdEffectParam) { - asm( - " push {r4, r5, r6, r7, lr}\n" - " mov r7, r8\n" - " push {r7}\n" - " ldr r6, [sp, #0x18]\n" - " ldr r4, [sp, #0x1c]\n" - " mov r8, r4\n" - " ldr r5, ._18 @ gSaveBlock1\n" - " ldr r7, ._18 + 4 @ 0x3175\n" - " add r4, r5, r7\n" - " strb r0, [r4]\n" - " ldr r4, ._18 + 8 @ 0x3176\n" - " add r0, r5, r4\n" - " strb r1, [r0]\n" - " add r7, r7, #0x2\n" - " add r0, r5, r7\n" - " strb r2, [r0]\n" - " ldr r1, ._18 + 12 @ 0x3178\n" - " add r0, r5, r1\n" - " strb r3, [r0]\n" - " add r4, r4, #0x3\n" - " add r0, r5, r4\n" - " strb r6, [r0]\n" - " add r7, r7, #0x3\n" - " add r0, r5, r7\n" - " mov r1, r8\n" - " strb r1, [r0]\n" - " sub r4, r4, #0x19\n" - " add r0, r5, r4\n" - " bl debug_sub_80C2BD0\n" - " ldr r7, ._18 + 16 @ 0x368c\n" - " add r5, r5, r7\n" - " str r0, [r5]\n" - " pop {r3}\n" - " mov r8, r3\n" - " pop {r4, r5, r6, r7}\n" - " pop {r0}\n" - " bx r0\n" - "._19:\n" - " .align 2, 0\n" - "._18:\n" - " .word gSaveBlock1\n" - " .word 0x3175\n" - " .word 0x3176\n" - " .word 0x3178\n" - " .word 0x368c\n" - "\n" - ); + s32 i; + + gSaveBlock1.enigmaBerry.berry = gBerries[0]; + StringCopy(gSaveBlock1.enigmaBerry.berry.name, name); + StringCopy(gSaveBlock1.enigmaBerry.description1, gUnknown_Debug_083F7F84); + StringCopy(gSaveBlock1.enigmaBerry.description2, gUnknown_Debug_083F7F90); + gSaveBlock1.enigmaBerry.berry.description1 = gSaveBlock1.enigmaBerry.description1; + gSaveBlock1.enigmaBerry.berry.description2 = gSaveBlock1.enigmaBerry.description2; + for (i = 0; i < 0x480; i++) + gSaveBlock1.enigmaBerry.pic[i] = gSpriteImage_UnusedCherry[i]; + for (i = 0; i < 16; i++) + gSaveBlock1.enigmaBerry.palette[i] = gSpritePalette_UnusedCherry[i]; + for (i = 0; i < 18; i++) + gSaveBlock1.enigmaBerry.itemEffect[i] = gUnknown_Debug_839B6CE[i]; + gSaveBlock1.enigmaBerry.holdEffect = holdEffect; + gSaveBlock1.enigmaBerry.holdEffectParam = holdEffectParam; + gSaveBlock1.enigmaBerry.checksum = GetEnigmaBerryChecksum(&gSaveBlock1.enigmaBerry); } + +void debug_sub_80C2D24(u8 spicy, u8 dry, u8 sweet, u8 bitter, u8 sour, u8 smoothness) +{ + gSaveBlock1.enigmaBerry.berry.spicy = spicy; + gSaveBlock1.enigmaBerry.berry.dry = dry; + gSaveBlock1.enigmaBerry.berry.sweet = sweet; + gSaveBlock1.enigmaBerry.berry.bitter = bitter; + gSaveBlock1.enigmaBerry.berry.sour = sour; + gSaveBlock1.enigmaBerry.berry.smoothness = smoothness; + gSaveBlock1.enigmaBerry.checksum = GetEnigmaBerryChecksum(&gSaveBlock1.enigmaBerry); +} + #endif // due to e-reader scans being particularly volatile to failure, it is a requirement to check for // their integrity here due to scans possibly failing to produce the correct result. -#if DEBUG -__attribute__((naked)) -bool32 IsEnigmaBerryValid() -{ - asm( - " push {r4, lr}\n" - " ldr r4, ._24 @ gSaveBlock1\n" - " ldr r1, ._24 + 4 @ 0x3174\n" - " add r0, r4, r1\n" - " ldrb r0, [r0]\n" - " cmp r0, #0\n" - " beq ._22 @cond_branch\n" - " ldr r2, ._24 + 8 @ 0x316a\n" - " add r0, r4, r2\n" - " ldrb r0, [r0]\n" - " cmp r0, #0\n" - " beq ._22 @cond_branch\n" - " ldr r1, ._24 + 12 @ 0x3160\n" - " add r0, r4, r1\n" - " bl debug_sub_80C2BD0\n" - " ldr r2, ._24 + 16 @ 0x368c\n" - " add r1, r4, r2\n" - " ldr r1, [r1]\n" - " cmp r0, r1\n" - " bne ._22 @cond_branch\n" - " mov r0, #0x1\n" - " b ._23\n" - "._25:\n" - " .align 2, 0\n" - "._24:\n" - " .word gSaveBlock1\n" - " .word 0x3174\n" - " .word 0x316a\n" - " .word 0x3160\n" - " .word 0x368c\n" - "._22:\n" - " mov r0, #0x0\n" - "._23:\n" - " pop {r4}\n" - " pop {r1}\n" - " bx r1\n" - "\n" - ); -} -#else bool32 IsEnigmaBerryValid(void) { if (gSaveBlock1.enigmaBerry.berry.stageDuration == 0) @@ -1399,7 +1131,6 @@ bool32 IsEnigmaBerryValid(void) return FALSE; return TRUE; } -#endif const struct Berry *GetBerryInfo(u8 berry) { @@ -1410,9 +1141,9 @@ const struct Berry *GetBerryInfo(u8 berry) return &gSaveBlock1.enigmaBerry.berry; else { - // invalid berries will be flattened into a cheri berry. Interestingly, if your berry was + // invalid berries will be flattened into a cheri berry. Interestingly, if your berry was // an enigma berry whos checksum failed, the game will use the Enigma Berry information - // for this: meaning if you see the Enigma Berry information, its actually because the + // for this: meaning if you see the Enigma Berry information, its actually because the // checksum failed. if (berry == BERRY_NONE || berry > GETBERRYID(LAST_BERRY)) berry = GETBERRYID(FIRST_BERRY); @@ -1526,8 +1257,8 @@ void BerryTreeTimeUpdate(s32 minutesPassed) if (tree->berry != BERRY_NONE && tree->stage != BERRY_STAGE_NO_BERRY && tree->growthSparkle == FALSE) { // the player has waited too long to water the berry. Reset the tree. This is because - // if the berry state is not in the unwatered state, the tree will grow anyway despite this - // check, which means BerryTreeGrow will handle the regrow process for this, removing the + // if the berry state is not in the unwatered state, the tree will grow anyway despite this + // check, which means BerryTreeGrow will handle the regrow process for this, removing the // need for this check. This only handles the unwatered soil state. if (minutesPassed >= GetStageDurationByBerryType(tree->berry) * 71) { @@ -1546,7 +1277,7 @@ void BerryTreeTimeUpdate(s32 minutesPassed) // its been X minutes since the last berry update, so update // minutesUntilNextStage appropriately to match the time offset // that has passed since the update. - tree->minutesUntilNextStage -= time; + tree->minutesUntilNextStage -= time; break; } // perform the subtraction the other way around to get the number of minutes since @@ -1712,7 +1443,7 @@ void FieldObjectInteractionGetBerryTreeData(void) // we cannot allow the player to grow/interact with the tree while the tree // is undergoing the sparkling effect, so set the special var to the sparkling // state and let the event script process the flag. - gSpecialVar_0x8004 = BERRY_STAGE_SPARKLING; + gSpecialVar_0x8004 = BERRY_STAGE_SPARKLING; } else gSpecialVar_0x8004 = GetStageByBerryTreeId(id); @@ -1754,173 +1485,53 @@ bool8 PlayerHasBerries(void) } #if DEBUG -void debug_sub_80C33FC(u8 *buffer, s32 value, u8 n) +void debug_sub_80C33FC(const u8 *buffer, s32 value, u8 n) { StringAppend(gStringVar4, buffer); ConvertIntToDecimalStringN(gStringVar1, value, STR_CONV_MODE_LEADING_ZEROS, n); StringAppend(gStringVar4, gStringVar1); } -extern const u8 gUnknown_Debug_083F7F9D[]; -extern const u8 gUnknown_Debug_083F7FA2[]; -extern const u8 gUnknown_Debug_083F7FA9[]; -extern const u8 gUnknown_Debug_083F7FB0[]; -extern const u8 gUnknown_Debug_083F7FB7[]; -extern const u8 gUnknown_Debug_083F7FBE[]; -extern const u8 gUnknown_Debug_083F7FC5[]; -extern const u8 gUnknown_Debug_083F7FCC[]; -extern const u8 gUnknown_Debug_083F7FD3[]; -extern const u8 gUnknown_Debug_083F7FD3[]; -extern const u8 gUnknown_Debug_083F7FD3[]; - -#ifdef NONMATCHING +static const u8 gUnknown_Debug_083F7F9D[] = _("POS:"); +static const u8 gUnknown_Debug_083F7FA2[] = _("\nTYPE:"); +static const u8 gUnknown_Debug_083F7FA9[] = _("\nGROW:"); +static const u8 gUnknown_Debug_083F7FB0[] = _("\nTIME:"); +static const u8 gUnknown_Debug_083F7FB7[] = _("\nFCNT:"); +static const u8 gUnknown_Debug_083F7FBE[] = _("\nSCNT:"); +static const u8 gUnknown_Debug_083F7FC5[] = _("\nHOOK:"); +static const u8 gUnknown_Debug_083F7FCC[] = _("\nWBIT:"); +static const u8 gUnknown_Debug_083F7FD3[] = _(""); + u8* DebugOpenBerryInfo(void) { - s32 i; - u8 berryTreeId; - struct BerryTree *berryTree; - - if (GetFieldObjectScriptPointerPlayerFacing() != &S_BerryTree) + if (GetFieldObjectScriptPointerPlayerFacing() != S_BerryTree) + { return NULL; - - berryTreeId = FieldObjectGetBerryTreeId(gSelectedMapObject); - berryTree = GetBerryTreeInfo(berryTreeId); - - for (i = 0; i < 500; i++) - gStringVar4[i] |= 0xFF; - - debug_sub_80C33FC(gUnknown_Debug_083F7F9D, berryTreeId, 3); - debug_sub_80C33FC(gUnknown_Debug_083F7FA2, berryTree->berry, 2); - debug_sub_80C33FC(gUnknown_Debug_083F7FA9, berryTree->stage, 2); - debug_sub_80C33FC(gUnknown_Debug_083F7FB0, berryTree->secondsUntilNextStage, 5); - debug_sub_80C33FC(gUnknown_Debug_083F7FB7, berryTree->berryYield, 2); - debug_sub_80C33FC(gUnknown_Debug_083F7FBE, berryTree->regrowthCount, 3); - debug_sub_80C33FC(gUnknown_Debug_083F7FC5, berryTree->growthSparkle, 1); - debug_sub_80C33FC(gUnknown_Debug_083F7FCC, berryTree->watered1, 1); - debug_sub_80C33FC(gUnknown_Debug_083F7FD3, berryTree->watered2, 1); - debug_sub_80C33FC(gUnknown_Debug_083F7FD3, berryTree->watered3, 1); - debug_sub_80C33FC(gUnknown_Debug_083F7FD3, berryTree->watered4, 1); - - return gStringVar4; -} -#else -__attribute__((naked)) -void DebugOpenBerryInfo() -{ - asm( - " push {r4, r5, r6, r7, lr}\n" - " bl GetFieldObjectScriptPointerPlayerFacing\n" - " ldr r1, ._138 @ S_BerryTree\n" - " cmp r0, r1\n" - " beq ._136 @cond_branch\n" - " mov r0, #0x0\n" - " b ._137\n" - "._139:\n" - " .align 2, 0\n" - "._138:\n" - " .word S_BerryTree\n" - "._136:\n" - " ldr r0, ._141 @ gSelectedMapObject\n" - " ldrb r0, [r0]\n" - " bl FieldObjectGetBerryTreeId\n" - " lsl r0, r0, #0x18\n" - " lsr r6, r0, #0x18\n" - " add r0, r6, #0\n" - " bl GetBerryTreeInfo\n" - " add r5, r0, #0\n" - " mov r2, #0x0\n" - " ldr r7, ._141 + 4 @ 0x1f3\n" - " ldr r4, ._141 + 8 @ gStringVar4\n" - " mov r3, #0xff\n" - "._140:\n" - " add r1, r2, r4\n" - " ldrb r0, [r1]\n" - " orr r0, r0, r3\n" - " strb r0, [r1]\n" - " add r2, r2, #0x1\n" - " cmp r2, r7\n" - " ble ._140 @cond_branch\n" - " ldr r0, ._141 + 12 @ gUnknown_Debug_083F7F9D\n" - " add r1, r6, #0\n" - " mov r2, #0x3\n" - " bl debug_sub_80C33FC\n" - " ldr r0, ._141 + 16 @ gUnknown_Debug_083F7FA2\n" - " ldrb r1, [r5]\n" - " mov r2, #0x2\n" - " bl debug_sub_80C33FC\n" - " ldr r0, ._141 + 20 @ gUnknown_Debug_083F7FA9\n" - " ldrb r1, [r5, #0x1]\n" - " lsl r1, r1, #0x19\n" - " lsr r1, r1, #0x19\n" - " mov r2, #0x2\n" - " bl debug_sub_80C33FC\n" - " ldr r0, ._141 + 24 @ gUnknown_Debug_083F7FB0\n" - " ldrh r1, [r5, #0x2]\n" - " mov r2, #0x5\n" - " bl debug_sub_80C33FC\n" - " ldr r0, ._141 + 28 @ gUnknown_Debug_083F7FB7\n" - " ldrb r1, [r5, #0x4]\n" - " mov r2, #0x2\n" - " bl debug_sub_80C33FC\n" - " ldr r0, ._141 + 32 @ gUnknown_Debug_083F7FBE\n" - " ldrb r1, [r5, #0x5]\n" - " lsl r1, r1, #0x1c\n" - " lsr r1, r1, #0x1c\n" - " mov r2, #0x3\n" - " bl debug_sub_80C33FC\n" - " ldr r0, ._141 + 36 @ gUnknown_Debug_083F7FC5\n" - " ldrb r1, [r5, #0x1]\n" - " lsr r1, r1, #0x7\n" - " mov r2, #0x1\n" - " bl debug_sub_80C33FC\n" - " ldr r0, ._141 + 40 @ gUnknown_Debug_083F7FCC\n" - " ldrb r1, [r5, #0x5]\n" - " lsl r1, r1, #0x1b\n" - " lsr r1, r1, #0x1f\n" - " mov r2, #0x1\n" - " bl debug_sub_80C33FC\n" - " ldr r4, ._141 + 44 @ gUnknown_Debug_083F7FD3\n" - " ldrb r1, [r5, #0x5]\n" - " lsl r1, r1, #0x1a\n" - " lsr r1, r1, #0x1f\n" - " add r0, r4, #0\n" - " mov r2, #0x1\n" - " bl debug_sub_80C33FC\n" - " ldrb r1, [r5, #0x5]\n" - " lsl r1, r1, #0x19\n" - " lsr r1, r1, #0x1f\n" - " add r0, r4, #0\n" - " mov r2, #0x1\n" - " bl debug_sub_80C33FC\n" - " ldrb r1, [r5, #0x5]\n" - " lsr r1, r1, #0x7\n" - " add r0, r4, #0\n" - " mov r2, #0x1\n" - " bl debug_sub_80C33FC\n" - " ldr r0, ._141 + 8 @ gStringVar4\n" - "._137:\n" - " pop {r4, r5, r6, r7}\n" - " pop {r1}\n" - " bx r1\n" - "._142:\n" - " .align 2, 0\n" - "._141:\n" - " .word gSelectedMapObject\n" - " .word 0x1f3\n" - " .word gStringVar4\n" - " .word gUnknown_Debug_083F7F9D\n" - " .word gUnknown_Debug_083F7FA2\n" - " .word gUnknown_Debug_083F7FA9\n" - " .word gUnknown_Debug_083F7FB0\n" - " .word gUnknown_Debug_083F7FB7\n" - " .word gUnknown_Debug_083F7FBE\n" - " .word gUnknown_Debug_083F7FC5\n" - " .word gUnknown_Debug_083F7FCC\n" - " .word gUnknown_Debug_083F7FD3\n" - "\n" - ); + } + else + { + u32 berryTreeId = FieldObjectGetBerryTreeId(gSelectedMapObject); + struct BerryTree *berryTree = GetBerryTreeInfo(berryTreeId); + s32 i; + + for (i = 0; i < 500; i++) + gStringVar4[i] = EOS; + + debug_sub_80C33FC(gUnknown_Debug_083F7F9D, berryTreeId, 3); + debug_sub_80C33FC(gUnknown_Debug_083F7FA2, berryTree->berry, 2); + debug_sub_80C33FC(gUnknown_Debug_083F7FA9, berryTree->stage, 2); + debug_sub_80C33FC(gUnknown_Debug_083F7FB0, berryTree->minutesUntilNextStage, 5); + debug_sub_80C33FC(gUnknown_Debug_083F7FB7, berryTree->berryYield, 2); + debug_sub_80C33FC(gUnknown_Debug_083F7FBE, berryTree->regrowthCount, 3); + debug_sub_80C33FC(gUnknown_Debug_083F7FC5, berryTree->growthSparkle, 1); + debug_sub_80C33FC(gUnknown_Debug_083F7FCC, berryTree->watered1, 1); + debug_sub_80C33FC(gUnknown_Debug_083F7FD3, berryTree->watered2, 1); + debug_sub_80C33FC(gUnknown_Debug_083F7FD3, berryTree->watered3, 1); + debug_sub_80C33FC(gUnknown_Debug_083F7FD3, berryTree->watered4, 1); + + return gStringVar4; + } } -#endif #endif @@ -1952,17 +1563,3 @@ void ResetBerryTreeSparkleFlags(void) } } } - -#if DEBUG -static const u8 gUnknown_Debug_083F7F84[] = _("そとから きた きのみ"); -static const u8 gUnknown_Debug_083F7F90[] = _("ただいま かいはつちゅう"); -static const u8 gUnknown_Debug_083F7F9D[] = _("POS:"); -static const u8 gUnknown_Debug_083F7FA2[] = _("\nTYPE:"); -static const u8 gUnknown_Debug_083F7FA9[] = _("\nGROW:"); -static const u8 gUnknown_Debug_083F7FB0[] = _("\nTIME:"); -static const u8 gUnknown_Debug_083F7FB7[] = _("\nFCNT:"); -static const u8 gUnknown_Debug_083F7FBE[] = _("\nSCNT:"); -static const u8 gUnknown_Debug_083F7FC5[] = _("\nHOOK:"); -static const u8 gUnknown_Debug_083F7FCC[] = _("\nWBIT:"); -static const u8 gUnknown_Debug_083F7FD3[] = _(""); -#endif diff --git a/src/field/field_weather.c b/src/field/field_weather.c index fbc5431ae..b125ff7da 100644 --- a/src/field/field_weather.c +++ b/src/field/field_weather.c @@ -1,12 +1,15 @@ #include "global.h" +#include "constants/songs.h" +#include "constants/weather.h" #include "blend_palette.h" #include "field_map_obj.h" #include "field_weather.h" +#include "main.h" +#include "menu.h" #include "palette.h" #include "random.h" #include "script.h" -#include "constants/weather.h" -#include "constants/songs.h" +#include "start_menu.h" #include "sound.h" #include "sprite.h" #include "task.h" @@ -15,7 +18,8 @@ #define MACRO1(color) ((((color) >> 1) & 0xF) | (((color) >> 2) & 0xF0) | (((color) >> 3) & 0xF00)) -enum { +enum +{ GAMMA_NONE, GAMMA_NORMAL, GAMMA_ALT, @@ -44,9 +48,6 @@ struct WeatherCallbacks EWRAM_DATA struct Weather gWeather = {0}; EWRAM_DATA u8 gFieldEffectPaletteGammaTypes[32] = {0}; EWRAM_DATA u16 gUnknown_0202FF58 = 0; -#if DEBUG -EWRAM_DATA u16 gUnknown_Debug_20301FE = 0; -#endif static const u8 *sPaletteGammaTypes; @@ -215,39 +216,39 @@ static const u8 sBasePaletteGammaTypes[32] = #if DEBUG -const u8 gDebugText_Weather_0[] = _("なし "); -const u8 gDebugText_Weather_1[] = _("はれ "); -const u8 gDebugText_Weather_2[] = _("はれ2 "); -const u8 gDebugText_Weather_3[] = _("あめ "); -const u8 gDebugText_Weather_4[] = _("ゆき "); -const u8 gDebugText_Weather_5[] = _("かみなり "); -const u8 gDebugText_Weather_6[] = _("きり "); -const u8 gDebugText_Weather_7[] = _("かざんばい"); -const u8 gDebugText_Weather_8[] = _("すなあらし"); -const u8 gDebugText_Weather_9[] = _("きり2 "); -const u8 gDebugText_Weather_10[] = _("かいてい "); -const u8 gDebugText_Weather_11[] = _("くもり "); -const u8 gDebugText_Weather_12[] = _("はれ3 "); -const u8 gDebugText_Weather_13[] = _("おおあめ"); -const u8 gDebugText_Weather_14[] = _("かいてい2"); - -const u8 *const gDebugText_Weather[] = +static const u8 sDebugText_Weather_None[] = _("なし "); // "none" +static const u8 sDebugText_Weather_Clear[] = _("はれ "); // "clear" +static const u8 sDebugText_Weather_Clear2[] = _("はれ2 "); // "clear2" +static const u8 sDebugText_Weather_Rain[] = _("あめ "); // "rain" +static const u8 sDebugText_Weather_Snow[] = _("ゆき "); // "snow" +static const u8 sDebugText_Weather_Lightning[] = _("かみなり "); // "lightning" +static const u8 sDebugText_Weather_Fog[] = _("きり "); // "fog" +static const u8 sDebugText_Weather_VolcanicAsh[] = _("かざんばい"); // "volcanic ash" +static const u8 sDebugText_Weather_Sandstorm[] = _("すなあらし"); // "sandstorm +static const u8 sDebugText_Weather_Fog2[] = _("きり2 "); // "fog2" +static const u8 sDebugText_Weather_Underwater[] = _("かいてい "); // "undersea" +static const u8 sDebugText_Weather_Cloudy[] = _("くもり "); // "cloudy" +static const u8 sDebugText_Weather_Clear3[] = _("はれ3 "); // "clear3" +static const u8 sDebugText_Weather_HeavyRain[] = _("おおあめ"); // "heavy rain" +static const u8 sDebugText_Weather_Underwater2[] = _("かいてい2"); // "undersea2" + +static const u8 *const sDebugText_Weather[] = { - gDebugText_Weather_0, - gDebugText_Weather_1, - gDebugText_Weather_2, - gDebugText_Weather_3, - gDebugText_Weather_4, - gDebugText_Weather_5, - gDebugText_Weather_6, - gDebugText_Weather_7, - gDebugText_Weather_8, - gDebugText_Weather_9, - gDebugText_Weather_10, - gDebugText_Weather_11, - gDebugText_Weather_12, - gDebugText_Weather_13, - gDebugText_Weather_14, + [WEATHER_NONE] = sDebugText_Weather_None, + [WEATHER_CLOUDS] = sDebugText_Weather_Clear, + [WEATHER_SUNNY] = sDebugText_Weather_Clear2, + [WEATHER_RAIN_LIGHT] = sDebugText_Weather_Rain, + [WEATHER_SNOW] = sDebugText_Weather_Snow, + [WEATHER_RAIN_MED] = sDebugText_Weather_Lightning, + [WEATHER_FOG_1] = sDebugText_Weather_Fog, + [WEATHER_ASH] = sDebugText_Weather_VolcanicAsh, + [WEATHER_SANDSTORM] = sDebugText_Weather_Sandstorm, + [WEATHER_FOG_2] = sDebugText_Weather_Fog2, + [WEATHER_FOG_3] = sDebugText_Weather_Underwater, + [WEATHER_SHADE] = sDebugText_Weather_Cloudy, + [WEATHER_DROUGHT] = sDebugText_Weather_Clear3, + [WEATHER_RAIN_HEAVY] = sDebugText_Weather_HeavyRain, + [WEATHER_BUBBLES] = sDebugText_Weather_Underwater2, }; #endif @@ -1258,142 +1259,52 @@ void ResetPreservedPalettesInWeather(void) #if DEBUG -__attribute__((naked)) -u8 debug_sub_8085564(void) +EWRAM_DATA static u8 sSelectedDebugWeather = 0; + +bool8 debug_sub_8085564(void) { - asm("\ - push {lr}\n\ - mov r2, #0x0\n\ - ldr r0, ._375 @ gMain\n\ - ldrh r1, [r0, #0x2e]\n\ - mov r0, #0x80\n\ - lsl r0, r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._370 @cond_branch\n\ - ldr r1, ._375 + 4 @ gUnknown_Debug_20301FE\n\ - ldrb r0, [r1]\n\ - add r0, r0, #0x1\n\ - strb r0, [r1]\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - cmp r0, #0xf\n\ - bne ._371 @cond_branch\n\ - strb r2, [r1]\n\ -._371:\n\ - mov r2, #0x1\n\ -._370:\n\ - ldr r0, ._375 @ gMain\n\ - ldrh r1, [r0, #0x2e]\n\ - mov r0, #0x80\n\ - lsl r0, r0, #0x2\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._372 @cond_branch\n\ - ldr r1, ._375 + 4 @ gUnknown_Debug_20301FE\n\ - ldrb r0, [r1]\n\ - cmp r0, #0\n\ - beq ._373 @cond_branch\n\ - sub r0, r0, #0x1\n\ - b ._374\n\ -._376:\n\ - .align 2, 0\n\ -._375:\n\ - .word gMain\n\ - .word gUnknown_Debug_20301FE\n\ -._373:\n\ - mov r0, #0xe\n\ -._374:\n\ - strb r0, [r1]\n\ - mov r2, #0x1\n\ -._372:\n\ - cmp r2, #0\n\ - beq ._377 @cond_branch\n\ - mov r0, #0x16\n\ - mov r1, #0x1\n\ - mov r2, #0x1c\n\ - mov r3, #0x2\n\ - bl Menu_BlankWindowRect\n\ - ldr r1, ._380 @ gDebugText_Weather\n\ - ldr r0, ._380 + 4 @ gUnknown_Debug_20301FE\n\ - ldrb r0, [r0]\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldr r0, [r0]\n\ - mov r1, #0x17\n\ - mov r2, #0x1\n\ - bl Menu_PrintText\n\ -._377:\n\ - ldr r0, ._380 + 8 @ gMain\n\ - ldrh r1, [r0, #0x2e]\n\ - mov r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._378 @cond_branch\n\ - mov r0, #0x0\n\ - b ._379\n\ -._381:\n\ - .align 2, 0\n\ -._380:\n\ - .word gDebugText_Weather\n\ - .word gUnknown_Debug_20301FE\n\ - .word gMain\n\ -._378:\n\ - ldr r0, ._382 @ gUnknown_Debug_20301FE\n\ - ldrb r0, [r0]\n\ - bl ChangeWeather\n\ - bl CloseMenu\n\ - mov r0, #0x1\n\ -._379:\n\ - pop {r1}\n\ - bx r1\n\ -._383:\n\ - .align 2, 0\n\ -._382:\n\ - .word gUnknown_Debug_20301FE"); + bool8 changed = FALSE; + + if (gMain.newKeys & R_BUTTON) + { + sSelectedDebugWeather++; + if (sSelectedDebugWeather == 15) + sSelectedDebugWeather = 0; + changed = TRUE; + } + if (gMain.newKeys & L_BUTTON) + { + if (sSelectedDebugWeather != 0) + sSelectedDebugWeather--; + else + sSelectedDebugWeather = 14; + changed = TRUE; + } + + if (changed) + { + Menu_BlankWindowRect(22, 1, 28, 2); + Menu_PrintText(sDebugText_Weather[sSelectedDebugWeather], 23, 1); + } + + if (gMain.newKeys & A_BUTTON) + { + ChangeWeather(sSelectedDebugWeather); + CloseMenu(); + return TRUE; + } + + return FALSE; } -__attribute__((naked)) -u8 debug_sub_808560C(void) +bool8 debug_sub_808560C(void) { - asm("\ - push {r4, lr}\n\ - ldr r4, ._384 @ gUnknown_Debug_20301FE\n\ - ldr r0, ._384 + 4 @ gWeather\n\ - mov r1, #0xda\n\ - lsl r1, r1, #0x3\n\ - add r0, r0, r1\n\ - ldrb r0, [r0]\n\ - strb r0, [r4]\n\ - bl Menu_EraseScreen\n\ - mov r0, #0x16\n\ - mov r1, #0x1\n\ - mov r2, #0x1c\n\ - mov r3, #0x2\n\ - bl Menu_BlankWindowRect\n\ - ldr r1, ._384 + 8 @ gDebugText_Weather\n\ - ldrb r0, [r4]\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldr r0, [r0]\n\ - mov r1, #0x17\n\ - mov r2, #0x1\n\ - bl Menu_PrintText\n\ - ldr r1, ._384 + 12 @ gMenuCallback\n\ - ldr r0, ._384 + 16 @ debug_sub_8085564\n\ - str r0, [r1]\n\ - mov r0, #0x0\n\ - pop {r4}\n\ - pop {r1}\n\ - bx r1\n\ -._385:\n\ - .align 2, 0\n\ -._384:\n\ - .word gUnknown_Debug_20301FE\n\ - .word gWeather\n\ - .word gDebugText_Weather\n\ - .word gMenuCallback\n\ - .word debug_sub_8085564+1"); + sSelectedDebugWeather = gWeather.currWeather; + Menu_EraseScreen(); + Menu_BlankWindowRect(22, 1, 28, 2); + Menu_PrintText(sDebugText_Weather[sSelectedDebugWeather], 23, 1); + gMenuCallback = debug_sub_8085564; + return FALSE; } #endif diff --git a/src/field/fldeff_cut.c b/src/field/fldeff_cut.c index 5d39b87a9..84914b444 100644 --- a/src/field/fldeff_cut.c +++ b/src/field/fldeff_cut.c @@ -73,112 +73,43 @@ static const struct SpriteTemplate gSpriteTemplate_CutGrass = }; #if DEBUG -__attribute__((naked)) -void debug_sub_80AFEE4() + +void debug_sub_80AFEE4(void) { - asm( - " push {r4, r5, r6, r7, lr}\n" - " mov r7, r8\n" - " push {r7}\n" - " mov r0, #0x52\n" - " bl npc_before_player_of_type\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " cmp r0, #0x1\n" - " bne ._1 @cond_branch\n" - " ldr r1, ._3 @ gLastFieldPokeMenuOpened\n" - " mov r0, #0x0\n" - " strb r0, [r1]\n" - " bl sub_80A2634\n" - " b ._8\n" - "._4:\n" - " .align 2, 0\n" - "._3:\n" - " .word gLastFieldPokeMenuOpened\n" - "._1:\n" - " ldr r4, ._9 @ gUnknown_0203923C\n" - " add r1, r4, #2\n" - " add r0, r4, #0\n" - " bl PlayerGetDestCoords\n" - " mov r7, #0x0\n" - " mov r8, r4\n" - "._12:\n" - " ldr r1, ._9 + 4 @ 0xffff\n" - " add r0, r7, r1\n" - " mov r2, r8\n" - " ldrh r2, [r2, #0x2]\n" - " add r0, r0, r2\n" - " mov r6, #0x0\n" - " lsl r0, r0, #0x10\n" - " asr r5, r0, #0x10\n" - "._11:\n" - " ldr r1, ._9 + 4 @ 0xffff\n" - " add r0, r6, r1\n" - " mov r2, r8\n" - " ldrh r2, [r2]\n" - " add r0, r0, r2\n" - " lsl r0, r0, #0x10\n" - " asr r4, r0, #0x10\n" - " add r0, r4, #0\n" - " add r1, r5, #0\n" - " bl MapGridGetZCoordAt\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " mov r2, r8\n" - " mov r1, #0x4\n" - " ldsb r1, [r2, r1]\n" - " cmp r0, r1\n" - " bne ._7 @cond_branch\n" - " add r0, r4, #0\n" - " add r1, r5, #0\n" - " bl MapGridGetMetatileBehaviorAt\n" - " lsl r0, r0, #0x18\n" - " lsr r4, r0, #0x18\n" - " add r0, r4, #0\n" - " bl MetatileBehavior_IsPokeGrass\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " cmp r0, #0x1\n" - " beq ._6 @cond_branch\n" - " add r0, r4, #0\n" - " bl MetatileBehavior_IsAshGrass\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " cmp r0, #0x1\n" - " bne ._7 @cond_branch\n" - "._6:\n" - " ldr r1, ._9 + 8 @ gLastFieldPokeMenuOpened\n" - " mov r0, #0x0\n" - " strb r0, [r1]\n" - " bl sub_80A25E8\n" - " b ._8\n" - "._10:\n" - " .align 2, 0\n" - "._9:\n" - " .word gUnknown_0203923C\n" - " .word 0xffff\n" - " .word gLastFieldPokeMenuOpened\n" - "._7:\n" - " add r0, r6, #1\n" - " lsl r0, r0, #0x18\n" - " lsr r6, r0, #0x18\n" - " cmp r6, #0x2\n" - " bls ._11 @cond_branch\n" - " add r0, r7, #1\n" - " lsl r0, r0, #0x18\n" - " lsr r7, r0, #0x18\n" - " cmp r7, #0x2\n" - " bls ._12 @cond_branch\n" - " bl ScriptContext2_Disable\n" - "._8:\n" - " pop {r3}\n" - " mov r8, r3\n" - " pop {r4, r5, r6, r7}\n" - " pop {r0}\n" - " bx r0\n" - "\n" - ); + s16 x, y; + u8 i, j; + u8 metatile; + + if (npc_before_player_of_type(0x52) == TRUE) + { + gLastFieldPokeMenuOpened = 0; + sub_80A2634(); + return; + } + + PlayerGetDestCoords(&gUnknown_0203923C.x, &gUnknown_0203923C.y); + for (i = 0; i < 3; i++) + { + y = i - 1 + gUnknown_0203923C.y; + for (j = 0; j < 3; j++) + { + x = j - 1 + gUnknown_0203923C.x; + if (MapGridGetZCoordAt(x, y) == gUnknown_0203923C.height) + { + metatile = MapGridGetMetatileBehaviorAt(x, y); + if (MetatileBehavior_IsPokeGrass(metatile) == TRUE + || MetatileBehavior_IsAshGrass(metatile) == TRUE) + { + gLastFieldPokeMenuOpened = 0; + sub_80A25E8(); + return; + } + } + } + } + ScriptContext2_Disable(); } + #endif bool8 SetUpFieldMove_Cut(void) @@ -202,7 +133,7 @@ bool8 SetUpFieldMove_Cut(void) for(j = 0; j < 3; j++) { x = j - 1 + gUnknown_0203923C.x; - if(MapGridGetZCoordAt(x, y) == (s8)gUnknown_0203923C.height) + if(MapGridGetZCoordAt(x, y) == gUnknown_0203923C.height) { tileBehavior = MapGridGetMetatileBehaviorAt(x, y); if(MetatileBehavior_IsPokeGrass(tileBehavior) == TRUE diff --git a/src/field/fldeff_secretpower.c b/src/field/fldeff_secretpower.c index c998448a4..d1df03d84 100644 --- a/src/field/fldeff_secretpower.c +++ b/src/field/fldeff_secretpower.c @@ -253,33 +253,33 @@ void debug_sub_80D93F4(void) if (gSpecialVar_Result == 1 || player_get_direction_lower_nybble() != 2) { - ScriptContext2_Disable(); - return; + ScriptContext2_Disable(); + return; } GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203923C.x, &gUnknown_0203923C.y); metatile = MapGridGetMetatileBehaviorAt(gUnknown_0203923C.x, gUnknown_0203923C.y); if (MetatileBehavior_IsSecretBaseCave(metatile) == TRUE) { - sub_80C6264(); - gLastFieldPokeMenuOpened = 0; - sub_80C639C(); + sub_80C6264(); + gLastFieldPokeMenuOpened = 0; + sub_80C639C(); } else if (MetatileBehavior_IsSecretBaseTree(metatile) == TRUE) { - sub_80C6264(); - gLastFieldPokeMenuOpened = 0; - sub_80C64A8(); + sub_80C6264(); + gLastFieldPokeMenuOpened = 0; + sub_80C64A8(); } else if (MetatileBehavior_IsSecretBaseShrub(metatile) == TRUE) { - sub_80C6264(); - gLastFieldPokeMenuOpened = 0; - sub_80C660C(); + sub_80C6264(); + gLastFieldPokeMenuOpened = 0; + sub_80C660C(); } else { - ScriptContext2_Disable(); + ScriptContext2_Disable(); } } diff --git a/src/field/shop.c b/src/field/shop.c index fdee31178..7cd69e62d 100644 --- a/src/field/shop.c +++ b/src/field/shop.c @@ -115,7 +115,7 @@ static void SetShopMenuCallback(void *callbackPtr) gMartInfo.callback = callbackPtr; } -static void SetShopItemsForSale(u16 *items) +static void SetShopItemsForSale(const u16 *items) { u16 i = 0; @@ -153,13 +153,9 @@ static void Task_DoBuySellMenu(u8 taskId) { PlaySE(SE_SELECT); if (gMartInfo.martType == MART_TYPE_0) - { sBuySellQuitMenuActions[gMartBuySellOptionList[gMartInfo.cursor]].func(taskIdConst); - } else - { sBuySellQuitMenuActions[gMartBuyNoSellOptionList[gMartInfo.cursor]].func(taskIdConst); - } } else if (gMain.newKeys & B_BUTTON) { @@ -366,15 +362,15 @@ static void BuyMenuDrawMapMetatile(int var1, int var2, u16 *var3, s32 var4) switch (tempVar4) { - case 0: // _080B335C + case 0: BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[2], offset1, offset2, var3); BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[1], offset1, offset2, var3 + 4); break; - case 1: // _080B3364 + case 1: BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[3], offset1, offset2, var3); BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[2], offset1, offset2, var3 + 4); break; - case 2: // _080B3398 + case 2: BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[3], offset1, offset2, var3); BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[1], offset1, offset2, var3 + 4); break; @@ -550,7 +546,7 @@ static void Shop_DisplayNormalPriceInList(u16 itemId, u8 var2, bool32 hasControl { u8 *stringPtr = gStringVar1; - if (hasControlCode != FALSE) + if (hasControlCode) { stringPtr[0] = EXT_CTRL_CODE_BEGIN; stringPtr[1] = 0x1; @@ -563,7 +559,7 @@ static void Shop_DisplayNormalPriceInList(u16 itemId, u8 var2, bool32 hasControl sub_8072A18(&gStringVar1[0], 0x70, var2 << 3, 0x58, 0x1); stringPtr = gStringVar1; - if (hasControlCode != FALSE) + if (hasControlCode) stringPtr = &gStringVar1[3]; GetMoneyAmountText(stringPtr, (ItemId_GetPrice(itemId) >> GetPriceReduction(1)), 0x4); @@ -574,7 +570,7 @@ static void Shop_DisplayDecorationPriceInList(u16 itemId, u8 var2, bool32 hasCon { u8 *stringPtr = gStringVar1; - if (hasControlCode != FALSE) + if (hasControlCode) { stringPtr[0] = EXT_CTRL_CODE_BEGIN; stringPtr[1] = 0x1; @@ -586,7 +582,7 @@ static void Shop_DisplayDecorationPriceInList(u16 itemId, u8 var2, bool32 hasCon sub_8072A18(&gStringVar1[0], 0x70, var2 << 3, 0x58, 0x1); stringPtr = gStringVar1; - if (hasControlCode != FALSE) + if (hasControlCode) stringPtr = &gStringVar1[3]; // some names are the maximum string length for a shop item. Because there is no room for @@ -632,8 +628,10 @@ static void Shop_PrintItemDescText(void) 0x4, 0x68, 0x68, 0x30, 0); } else + { sub_8072AB0(gDecorations[gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]].description, 0x4, 0x68, 0x68, 0x30, 0); + } } else { @@ -687,7 +685,9 @@ static void Task_DoItemPurchase(u8 taskId) Task_UpdatePurchaseHistory(taskId); } else + { DisplayItemMessageOnField(taskId, gOtherText_NoRoomFor, Shop_DoPricePrintAndReturnToBuyMenu, 0xC3E1); + } } else // a normal mart is only type 0, so types 1 and 2 are decoration marts. { @@ -706,7 +706,9 @@ static void Task_DoItemPurchase(u8 taskId) } } else + { DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, Shop_DoPricePrintAndReturnToBuyMenu, 0xC3E1); + } } static void Shop_DoYesNoPurchase(u8 taskId) @@ -1129,19 +1131,17 @@ static void Shop_DoCursorAction(u8 taskId) ConvertIntToDecimalStringN(gStringVar2, gMartTotalCost, 0, 0x8); if (gMartInfo.martType == MART_TYPE_1) - { StringExpandPlaceholders(gStringVar4, gOtherText_ThatWillBe2); - } else - { StringExpandPlaceholders(gStringVar4, gOtherText_ThatWillBe3); - } DisplayItemMessageOnField(taskId, gStringVar4, Shop_DoYesNoPurchase, 0xC3E1); } } } else + { Task_ExitBuyMenu(taskId); + } } else if (gMain.newKeys & B_BUTTON) // go back to buy/sell/exit menu { @@ -1240,22 +1240,12 @@ void Shop_CreateDecorationShop2Menu(u16 *itemList) } #if DEBUG -__attribute__((naked)) + void debug_sub_80C2818(void) { - asm("\ - push {lr}\n\ - mov r0, #0x0\n\ - bl CreateShopMenu\n\ - ldr r0, ._290 @ gMartBuyNoSellOptionList\n\ - bl SetShopItemsForSale\n\ - mov r0, #0x0\n\ - bl SetShopMenuCallback\n\ - pop {r0}\n\ - bx r0\n\ -._291:\n\ - .align 2, 0\n\ -._290:\n\ - .word gMartBuyNoSellOptionList+0x3"); + CreateShopMenu(MART_TYPE_0); + SetShopItemsForSale(gUnusedMartArray); + SetShopMenuCallback(NULL); } + #endif diff --git a/src/field/start_menu.c b/src/field/start_menu.c index 4904f4a80..8a182aaf4 100644 --- a/src/field/start_menu.c +++ b/src/field/start_menu.c @@ -1,4 +1,5 @@ #include "global.h" +#include "battle_tower.h" #include "start_menu.h" #include "event_data.h" #include "field_map_obj_helpers.h" @@ -7,9 +8,11 @@ #include "fieldmap.h" #include "item_menu.h" #include "load_save.h" +#include "m4a.h" #include "main.h" #include "map_obj_lock.h" #include "menu.h" +#include "new_game.h" #include "option_menu.h" #include "palette.h" #include "pokedex.h" @@ -138,302 +141,105 @@ static void sub_8071B54(void); static void Task_8071B64(u8 taskId); #if DEBUG -__attribute__((naked)) -void debug_sub_8075C30() + +void debug_sub_8075D9C(void); + +u8 debug_sub_8075C30(void) { - asm( - " push {lr}\n" - " bl CloseMenu\n" - " bl debug_sub_8075D9C\n" - " mov r0, #0x1\n" - " pop {r1}\n" - " bx r1\n" - "\n" - ); + CloseMenu(); + debug_sub_8075D9C(); + return 1; } -__attribute__((naked)) -void debug_sub_8075C40() +extern const u8 gUnknown_Debug_839B6D8[]; + +void debug_sub_8075C40(u8 taskId) { - asm( - " push {r4, r5, r6, r7, lr}\n" - " mov r7, sl\n" - " mov r6, r9\n" - " mov r5, r8\n" - " push {r5, r6, r7}\n" - " lsl r0, r0, #0x18\n" - " lsr r4, r0, #0x18\n" - " lsl r0, r4, #0x2\n" - " add r0, r0, r4\n" - " lsl r0, r0, #0x3\n" - " ldr r1, ._5 @ gTasks\n" - " add r5, r0, r1\n" - " mov r1, #0x0\n" - " ldsh r0, [r5, r1]\n" - " cmp r0, #0x1\n" - " beq ._1 @cond_branch\n" - " cmp r0, #0x1\n" - " bgt ._2 @cond_branch\n" - " cmp r0, #0\n" - " beq ._3 @cond_branch\n" - " b ._18\n" - "._6:\n" - " .align 2, 0\n" - "._5:\n" - " .word gTasks+0x8\n" - "._2:\n" - " cmp r0, #0x2\n" - " beq ._7 @cond_branch\n" - " cmp r0, #0x3\n" - " beq ._8 @cond_branch\n" - " b ._18\n" - "._3:\n" - " bl m4aSoundVSyncOff\n" - " b ._12\n" - "._1:\n" - " ldr r1, ._13 @ 0x4000208\n" - " ldrh r0, [r1]\n" - " mov sl, r0\n" - " mov r0, #0x0\n" - " strh r0, [r1]\n" - " ldr r1, ._13 + 4 @ 0x4000108\n" - " strh r0, [r1]\n" - " mov r0, #0x83\n" - " lsl r0, r0, #0x10\n" - " str r0, [r1]\n" - " ldr r4, ._13 + 8 @ 0xc34f\n" - " mov r9, r4\n" - " ldr r2, ._13 + 12 @ 0x40000b0\n" - " ldr r0, ._13 + 16 @ gScanlineEffectRegBuffers\n" - " mov ip, r0\n" - " ldr r1, ._13 + 20 @ 0xc5ff\n" - " mov r8, r1\n" - " ldr r7, ._13 + 24 @ 0x7fff\n" - " mov r3, r9\n" - " add r3, r3, #0x1\n" - " ldr r6, ._13 + 28 @ 0x4000040\n" - " ldr r4, ._13 + 32 @ 0xa2600001\n" - "._11:\n" - " mov r0, ip\n" - " str r0, [r2]\n" - " str r6, [r2, #0x4]\n" - " str r4, [r2, #0x8]\n" - " ldr r0, [r2, #0x8]\n" - " ldrh r1, [r2, #0xa]\n" - " mov r0, r8\n" - " and r0, r0, r1\n" - " strh r0, [r2, #0xa]\n" - " ldrh r1, [r2, #0xa]\n" - " add r0, r7, #0\n" - " and r0, r0, r1\n" - " strh r0, [r2, #0xa]\n" - " ldrh r0, [r2, #0xa]\n" - " sub r3, r3, #0x1\n" - " cmp r3, #0\n" - " bne ._11 @cond_branch\n" - " mov r3, r9\n" - " add r3, r3, #0x1\n" - " ldr r0, ._13 + 36 @ 0x400010a\n" - " mov r2, #0x0\n" - " strh r2, [r0]\n" - " ldr r1, ._13 + 4 @ 0x4000108\n" - " ldrh r0, [r1]\n" - " ldr r4, ._13 + 40 @ _debugStartMenu_0\n" - " str r0, [r4]\n" - " strh r2, [r1]\n" - " ldr r0, ._13 @ 0x4000208\n" - " mov r1, sl\n" - " strh r1, [r0]\n" - " ldr r4, ._13 + 44 @ _debugStartMenu_1\n" - " str r3, [r4]\n" - " bl m4aSoundVSyncOn\n" - " b ._12\n" - "._14:\n" - " .align 2, 0\n" - "._13:\n" - " .word 0x4000208\n" - " .word 0x4000108\n" - " .word 0xc34f\n" - " .word 0x40000b0\n" - " .word gScanlineEffectRegBuffers\n" - " .word 0xc5ff\n" - " .word 0x7fff\n" - " .word 0x4000040\n" - " .word 0xa2600001\n" - " .word 0x400010a\n" - " .word _debugStartMenu_0\n" - " .word _debugStartMenu_1\n" - "._7:\n" - " mov r0, #0x15\n" - " bl PlaySE\n" - " ldr r0, ._16 @ gStringVar1\n" - " ldr r1, ._16 + 4 @ _debugStartMenu_1\n" - " ldr r1, [r1]\n" - " mov r2, #0x1\n" - " mov r3, #0x8\n" - " bl ConvertIntToDecimalStringN\n" - " ldr r0, ._16 + 8 @ gStringVar2\n" - " ldr r1, ._16 + 12 @ _debugStartMenu_0\n" - " ldr r1, [r1]\n" - " mov r2, #0x1\n" - " mov r3, #0x8\n" - " bl ConvertIntToDecimalStringN\n" - " bl Menu_DisplayDialogueFrame\n" - " ldr r0, ._16 + 16 @ gUnknown_Debug_839B6D8\n" - " mov r1, #0x2\n" - " mov r2, #0xf\n" - " bl Menu_PrintText\n" - "._12:\n" - " ldrh r0, [r5]\n" - " add r0, r0, #0x1\n" - " strh r0, [r5]\n" - " b ._18\n" - "._17:\n" - " .align 2, 0\n" - "._16:\n" - " .word gStringVar1\n" - " .word _debugStartMenu_1\n" - " .word gStringVar2\n" - " .word _debugStartMenu_0\n" - " .word gUnknown_Debug_839B6D8\n" - "._8:\n" - " ldr r0, ._19 @ gMain\n" - " ldrh r1, [r0, #0x2e]\n" - " mov r0, #0x1\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._18 @cond_branch\n" - " bl Menu_EraseScreen\n" - " bl ScriptContext2_Disable\n" - " add r0, r4, #0\n" - " bl DestroyTask\n" - "._18:\n" - " pop {r3, r4, r5}\n" - " mov r8, r3\n" - " mov r9, r4\n" - " mov sl, r5\n" - " pop {r4, r5, r6, r7}\n" - " pop {r0}\n" - " bx r0\n" - "._20:\n" - " .align 2, 0\n" - "._19:\n" - " .word gMain\n" - "\n" - ); + s16 *data = gTasks[taskId].data; + u16 savedIme; + s32 i; + + switch (data[0]) + { + case 0: + m4aSoundVSyncOff(); + data[0]++; + break; + case 1: + savedIme = REG_IME; + REG_IME = 0; + REG_TM2CNT_L = 0; + REG_TM2CNT = 0x830000; + for (i = 0; i < 0xC350; i++) + { + DmaSet( + 0, + gScanlineEffectRegBuffers, + ®_WIN0H, + ((DMA_ENABLE | DMA_START_HBLANK | DMA_16BIT | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_RELOAD) << 16) | 1); + DmaStop(0); + } + REG_TM2CNT_H = 0; + _debugStartMenu_0 = REG_TM2CNT_L; + REG_TM2CNT_L = 0; + REG_IME = savedIme; + _debugStartMenu_1 = i; + m4aSoundVSyncOn(); + data[0]++; + break; + case 2: + PlaySE(0x15); + ConvertIntToDecimalStringN(gStringVar1, _debugStartMenu_1, 1, 8); + ConvertIntToDecimalStringN(gStringVar2, _debugStartMenu_0, 1, 8); + Menu_DisplayDialogueFrame(); + Menu_PrintText(gUnknown_Debug_839B6D8, 2, 15); + data[0]++; + break; + case 3: + if (gMain.newKeys & A_BUTTON) + { + Menu_EraseScreen(); + ScriptContext2_Disable(); + DestroyTask(taskId); + } + break; + } } -__attribute__((naked)) -void debug_sub_8075D9C() +void debug_sub_8075D9C(void) { - asm( - " push {lr}\n" - " ldr r0, ._21 @ debug_sub_8075C40\n" - " mov r1, #0xa\n" - " bl CreateTask\n" - " bl ScriptContext2_Enable\n" - " pop {r0}\n" - " bx r0\n" - "._22:\n" - " .align 2, 0\n" - "._21:\n" - " .word debug_sub_8075C40+1\n" - "\n" - ); + CreateTask(debug_sub_8075C40, 10); + ScriptContext2_Enable(); } -__attribute__((naked)) -void debug_sub_8075DB4() +void debug_sub_8075DB4(struct BattleTowerEReaderTrainer *ereaderTrainer, const u8 *b, u32 trainerId) { - asm( - " push {r4, r5, r6, lr}\n" - " add r6, r0, #0\n" - " add r5, r1, #0\n" - " add r4, r2, #0\n" - " add r0, r4, #0\n" - " mov r1, #0x4d\n" - " bl __umodsi3\n" - " strb r0, [r6, #0x1]\n" - " add r1, r6, #0\n" - " add r1, r1, #0xc\n" - " add r0, r4, #0\n" - " bl write_word_to_mem\n" - " add r0, r6, #4\n" - " add r1, r5, #0\n" - " bl StringCopy8\n" - " mov r3, #0x7\n" - " mov r4, #0x0\n" - " ldr r0, ._25 @ gSaveBlock1\n" - " ldr r1, ._25 + 4 @ 0x2b28\n" - " add r5, r0, r1\n" - " add r2, r6, #0\n" - " add r2, r2, #0x10\n" - " add r1, r6, #0\n" - " add r1, r1, #0x1c\n" - "._23:\n" - " ldrh r0, [r5]\n" - " strh r0, [r2]\n" - " strh r3, [r1]\n" - " add r0, r3, #6\n" - " strh r0, [r1, #0xc]\n" - " add r3, r3, #0x1\n" - " add r5, r5, #0x2\n" - " add r2, r2, #0x2\n" - " add r1, r1, #0x2\n" - " add r4, r4, #0x1\n" - " cmp r4, #0x5\n" - " ble ._23 @cond_branch\n" - " mov r4, #0x0\n" - "._24:\n" - " mov r0, #0x64\n" - " mul r0, r0, r4\n" - " ldr r1, ._25 + 8 @ gPlayerParty\n" - " add r0, r0, r1\n" - " mov r1, #0x2c\n" - " mul r1, r1, r4\n" - " add r1, r1, #0x34\n" - " add r1, r6, r1\n" - " bl sub_803AF78\n" - " add r4, r4, #0x1\n" - " cmp r4, #0x2\n" - " ble ._24 @cond_branch\n" - " add r0, r6, #0\n" - " bl SetEReaderTrainerChecksum\n" - " pop {r4, r5, r6}\n" - " pop {r0}\n" - " bx r0\n" - "._26:\n" - " .align 2, 0\n" - "._25:\n" - " .word gSaveBlock1\n" - " .word 0x2b28\n" - " .word gPlayerParty\n" - "\n" - ); + s32 i; + s32 r3; + + ereaderTrainer->trainerClass = trainerId % 77; + write_word_to_mem(trainerId, ereaderTrainer->trainerId); + StringCopy8(ereaderTrainer->name, b); + r3 = 7; + for (i = 0; i < 6; i++) + { + ereaderTrainer->greeting[i] = gSaveBlock1.easyChats.unk2B28[i]; + ereaderTrainer->farewellPlayerLost[i] = r3; + ereaderTrainer->farewellPlayerWon[i] = r3 + 6; + r3++; + } + for (i = 0; i < 3; i++) + sub_803AF78(&gPlayerParty[i], &ereaderTrainer->party[i]); + SetEReaderTrainerChecksum(ereaderTrainer); } -__attribute__((naked)) -void unref_sub_8070F90() +void unref_sub_8070F90(void) { - asm( - " push {lr}\n" - " ldr r0, ._27 @ 0x801\n" - " bl FlagSet\n" - " mov r0, #0x80\n" - " lsl r0, r0, #0x4\n" - " bl FlagSet\n" - " ldr r0, ._27 + 4 @ 0x802\n" - " bl FlagSet\n" - " pop {r0}\n" - " bx r0\n" - "._28:\n" - " .align 2, 0\n" - "._27:\n" - " .word 0x801\n" - " .word 0x802\n" - "\n" - ); + FlagSet(FLAG_SYS_POKEDEX_GET); + FlagSet(FLAG_SYS_POKEMON_GET); + FlagSet(FLAG_SYS_POKENAV_GET); } + #endif static void BuildStartMenuActions(void) |