summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCameron Hall <cameronghall@cox.net>2018-02-17 15:32:57 -0600
committerCameron Hall <cameronghall@cox.net>2018-02-17 15:32:57 -0600
commitb9f8d43825463363a67be0ce9fcd00b23d264e05 (patch)
treeb5368c25e1e3fd7a13ed08f628520449e447131c /src
parent0687469f88a3eeac097cf440f3d12a4b3f2986f3 (diff)
decompile more debug code
Diffstat (limited to 'src')
-rw-r--r--src/debug/start_menu_debug.c10
-rw-r--r--src/field/battle_tower.c104
-rw-r--r--src/field/berry.c601
-rw-r--r--src/field/field_weather.c251
-rw-r--r--src/field/fldeff_cut.c141
-rw-r--r--src/field/fldeff_secretpower.c24
-rw-r--r--src/field/shop.c52
-rw-r--r--src/field/start_menu.c370
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,
+ &REG_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)