diff options
Diffstat (limited to 'src/field')
-rw-r--r-- | src/field/battle_tower.c | 239 | ||||
-rw-r--r-- | src/field/berry.c | 601 | ||||
-rw-r--r-- | src/field/choose_party.c | 121 | ||||
-rw-r--r-- | src/field/event_object_movement.c | 794 | ||||
-rw-r--r-- | src/field/field_player_avatar.c | 221 | ||||
-rw-r--r-- | src/field/field_weather.c | 251 | ||||
-rw-r--r-- | src/field/fldeff_cut.c | 141 | ||||
-rw-r--r-- | src/field/fldeff_flash.c | 30 | ||||
-rw-r--r-- | src/field/fldeff_secretpower.c | 128 | ||||
-rw-r--r-- | src/field/item.c | 27 | ||||
-rw-r--r-- | src/field/item_menu.c | 558 | ||||
-rw-r--r-- | src/field/mauville_man.c | 103 | ||||
-rw-r--r-- | src/field/overworld.c | 2 | ||||
-rw-r--r-- | src/field/party_menu.c | 1531 | ||||
-rw-r--r-- | src/field/pokeblock.c | 6 | ||||
-rw-r--r-- | src/field/region_map.c | 202 | ||||
-rw-r--r-- | src/field/secret_base.c | 511 | ||||
-rw-r--r-- | src/field/shop.c | 52 | ||||
-rw-r--r-- | src/field/slot_machine.c | 3741 | ||||
-rw-r--r-- | src/field/start_menu.c | 370 | ||||
-rw-r--r-- | src/field/tv.c | 10 |
21 files changed, 2377 insertions, 7262 deletions
diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c index 41d5ae9d1..d4dbba120 100644 --- a/src/field/battle_tower.c +++ b/src/field/battle_tower.c @@ -33,7 +33,8 @@ #include "../data/battle_tower/trainers_de.h" #endif -static const u16 sBattleTowerHeldItems[] = { +static const u16 sBattleTowerHeldItems[] = +{ ITEM_NONE, ITEM_KINGS_ROCK, ITEM_SITRUS_BERRY, @@ -102,7 +103,8 @@ static const u16 sBattleTowerHeldItems[] = { #include "../data/battle_tower/level_50_mons.h" #include "../data/battle_tower/level_100_mons.h" -static const u8 sMaleTrainerClasses[] = { +static const u8 sMaleTrainerClasses[] = +{ FACILITY_CLASS_RUIN_MANIAC, FACILITY_CLASS_TUBER_M, FACILITY_CLASS_COOL_TRAINER_M, @@ -135,7 +137,8 @@ static const u8 sMaleTrainerClasses[] = { FACILITY_CLASS_HIKER, }; -static const u8 sFemaleTrainerClasses[] = { +static const u8 sFemaleTrainerClasses[] = +{ FACILITY_CLASS_AROMA_LADY, FACILITY_CLASS_TUBER_F, FACILITY_CLASS_COOL_TRAINER_F, @@ -158,7 +161,8 @@ static const u8 sFemaleTrainerClasses[] = { FACILITY_CLASS_LASS, }; -static const u8 sMaleTrainerGfxIds[] = { +static const u8 sMaleTrainerGfxIds[] = +{ MAP_OBJ_GFX_HIKER, MAP_OBJ_GFX_TUBER_M, MAP_OBJ_GFX_MAN_4, @@ -191,7 +195,8 @@ static const u8 sMaleTrainerGfxIds[] = { MAP_OBJ_GFX_HIKER, }; -static const u8 sFemaleTrainerGfxIds[] = { +static const u8 sFemaleTrainerGfxIds[] = +{ MAP_OBJ_GFX_WOMAN_3, MAP_OBJ_GFX_TUBER_F, MAP_OBJ_GFX_WOMAN_7, @@ -214,7 +219,8 @@ static const u8 sFemaleTrainerGfxIds[] = { MAP_OBJ_GFX_LASS, }; -const u16 gBattleTowerBannedSpecies[] = { +const u16 gBattleTowerBannedSpecies[] = +{ SPECIES_MEW, SPECIES_MEWTWO, SPECIES_HO_OH, @@ -229,7 +235,8 @@ const u16 gBattleTowerBannedSpecies[] = { }; // Item prizes for battle tower streaks of 5 or fewer sets. -/*static*/ const u16 sShortStreakPrizes[] = { +static const u16 sShortStreakPrizes[] = +{ ITEM_HP_UP, ITEM_PROTEIN, ITEM_IRON, @@ -239,7 +246,8 @@ const u16 gBattleTowerBannedSpecies[] = { }; // Item prizes for battle tower streaks of greater than 5 sets. -/*static*/ const u16 sLongStreakPrizes[] = { +static const u16 sLongStreakPrizes[] = +{ ITEM_BRIGHT_POWDER, ITEM_WHITE_HERB, ITEM_QUICK_CLAW, @@ -259,7 +267,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 *); @@ -293,9 +300,7 @@ void sub_8134548(void) default: ResetBattleTowerStreak(levelType); if (!var1) - { VarSet(VAR_TEMP_0, 5); - } break; case 1: ResetBattleTowerStreak(levelType); @@ -321,10 +326,8 @@ void sub_8134548(void) } if ((gSaveBlock2.battleTower.var_4AE[0] == 3 || gSaveBlock2.battleTower.var_4AE[0] == 6) - && (gSaveBlock2.battleTower.var_4AE[1] == 3 || gSaveBlock2.battleTower.var_4AE[1] == 6)) - { + && (gSaveBlock2.battleTower.var_4AE[1] == 3 || gSaveBlock2.battleTower.var_4AE[1] == 6)) VarSet(VAR_TEMP_0, 5); - } ValidateBattleTowerRecordChecksums(); } @@ -351,23 +354,18 @@ bool8 ShouldBattleEReaderTrainer(u8 levelType, u16 winStreak) ValidateEReaderTrainer(); if (gSpecialVar_Result != 0 || gSaveBlock2.battleTower.ereaderTrainer.winStreak != winStreak) - { return FALSE; - } - trainerTeamLevel = 50; if (levelType != 0) - { trainerTeamLevel = 100; - } + else + trainerTeamLevel = 50; for (i = 0; i < 3; i++) { monLevel = gSaveBlock2.battleTower.ereaderTrainer.party[i].level; if (gSaveBlock2.battleTower.ereaderTrainer.party[i].level != trainerTeamLevel) - { return FALSE; - } CheckMonBattleTowerBanlist( gSaveBlock2.battleTower.ereaderTrainer.party[i].species, @@ -380,7 +378,7 @@ bool8 ShouldBattleEReaderTrainer(u8 levelType, u16 winStreak) &numValid); } - return numValid == 3; + return (numValid == 3); } bool8 sub_81346F4(void) @@ -409,6 +407,7 @@ bool8 sub_81346F4(void) struct BattleTowerRecord *record = &gSaveBlock2.battleTower.records[recordIndex]; u32 recordHasData = 0; u32 checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32) - 1; i++) { recordHasData |= ((u32 *)record)[i]; @@ -416,9 +415,9 @@ bool8 sub_81346F4(void) } if (gSaveBlock2.battleTower.records[recordIndex].winStreak == winStreak - && gSaveBlock2.battleTower.records[recordIndex].battleTowerLevelType == battleTowerLevelType - && recordHasData - && gSaveBlock2.battleTower.records[recordIndex].checksum == checksum) + && gSaveBlock2.battleTower.records[recordIndex].battleTowerLevelType == battleTowerLevelType + && recordHasData + && gSaveBlock2.battleTower.records[recordIndex].checksum == checksum) { trainerIds[numCandidates] = recordIndex; numCandidates++; @@ -785,19 +784,17 @@ void SetBattleTowerTrainerGfxId(u8 trainerIndex) u8 trainerClass; if (trainerIndex < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { trainerClass = gBattleTowerTrainers[trainerIndex].trainerClass; - } else if (trainerIndex < BATTLE_TOWER_EREADER_TRAINER_ID) - { trainerClass = gSaveBlock2.battleTower.records[trainerIndex - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass; - } else - { trainerClass = gSaveBlock2.battleTower.ereaderTrainer.trainerClass; - } - for (i = 0; i < 30 && sMaleTrainerClasses[i] != trainerClass; i++); + for (i = 0; i < 30; i++) + { + if (sMaleTrainerClasses[i] == trainerClass) + break; + } if (i != 30) { u8 trainerObjectGfxId = sMaleTrainerGfxIds[i]; @@ -805,7 +802,11 @@ void SetBattleTowerTrainerGfxId(u8 trainerIndex) return; } - for (i = 0; i < 20 && sFemaleTrainerClasses[i] != trainerClass; i++); + for (i = 0; i < 20; i++) + { + if (sFemaleTrainerClasses[i] == trainerClass) + break; + } if (i != 20) { u8 trainerObjectGfxId = sFemaleTrainerGfxIds[i]; @@ -1144,33 +1145,21 @@ _08134C70: .4byte gSaveBlock2\n\ u8 get_trainer_class_pic_index(void) { if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; - } else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { return gTrainerClassToPicIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass]; - } else - { return gTrainerClassToPicIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass]; - } } u8 get_trainer_class_name_index(void) { if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; - } else if (gSaveBlock2.battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { return gTrainerClassToNameIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass]; - } else - { return gTrainerClassToNameIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass]; - } } void get_trainer_name(u8* dest) @@ -1180,26 +1169,20 @@ void get_trainer_name(u8* dest) if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) { for (i = 0; i < 7; i++) - { dest[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; - } } else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) { for (i = 0; i < 7; i++) - { dest[i] = gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].name[i]; - } } else { for (i = 0; i < 7; i++) - { dest[i] = gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].name[i]; - } } - dest[i] = 0xFF; + dest[i] = EOS; } void FillBattleTowerTrainerParty(void) @@ -1267,10 +1250,7 @@ void FillBattleTowerTrainerParty(void) { // Load E-Reader trainer's party. for (partyIndex = 0; partyIndex < 3; partyIndex++) - { sub_803ADE8(&gEnemyParty[partyIndex], &gSaveBlock2.battleTower.ereaderTrainer.party[partyIndex]); - } - return; } else @@ -1282,7 +1262,6 @@ void FillBattleTowerTrainerParty(void) &gEnemyParty[partyIndex], &gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].party[partyIndex]); } - return; } @@ -1330,10 +1309,8 @@ void FillBattleTowerTrainerParty(void) for (i = 0; i < partyIndex; i++) { if (GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) != 0 - && GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) == sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]) - { + && GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) == sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]) break; - } } if (i != partyIndex) @@ -1342,7 +1319,12 @@ void FillBattleTowerTrainerParty(void) // Ensure this exact pokemon index isn't a duplicate. This check doesn't seem necessary // because the species and held items were already checked directly above. Perhaps this // is leftover code before the logic for duplicate species and held items was added. - for (i = 0; i < partyIndex && chosenMonIndices[i] != battleMonIndex; i++); + //for (i = 0; i < partyIndex && chosenMonIndices[i] != battleMonIndex; i++); + for (i = 0; i < partyIndex; i++) + { + if (chosenMonIndices[i] == battleMonIndex) + break; + } if (i != partyIndex) continue; @@ -1362,10 +1344,7 @@ void FillBattleTowerTrainerParty(void) { SetMonMoveSlot(&gEnemyParty[partyIndex], battleTowerMons[battleMonIndex].moves[i], i); if (battleTowerMons[battleMonIndex].moves[i] == MOVE_FRUSTRATION) - { - // MOVE_FRUSTRATION is more powerful the lower the pokemon's friendship is. - friendship = 0; - } + friendship = 0; // MOVE_FRUSTRATION is more powerful the lower the pokemon's friendship is. } SetMonData(&gEnemyParty[partyIndex], MON_DATA_FRIENDSHIP, &friendship); @@ -1386,9 +1365,7 @@ u32 CountBattleTowerBanlistCaught(void) for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++) { if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleTowerBannedSpecies[i]), FLAG_GET_CAUGHT)) - { numCaught++; - } } return numCaught; @@ -1399,7 +1376,6 @@ u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 curIndexToAppend, s32 numT if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) { curIndexToAppend++; - switch (curIndexToAppend - 1) { case 0: @@ -1409,24 +1385,15 @@ u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 curIndexToAppend, s32 numT case 8: case 10: if (numToAppend == curIndexToAppend) - { StringAppend(gStringVar1, BattleText_Format3); - } else if (numToAppend > curIndexToAppend) - { StringAppend(gStringVar1, BattleText_Format4); - } break; case 1: if (curIndexToAppend == numToAppend) - { StringAppend(gStringVar1, BattleText_Format3); - } else - { StringAppend(gStringVar1, BattleText_Format4); - } - StringAppend(gStringVar1, BattleText_Format7); break; case 3: @@ -1435,18 +1402,12 @@ u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 curIndexToAppend, s32 numT case 9: default: if (curIndexToAppend == numToAppend) - { StringAppend(gStringVar1, BattleText_Format3); - } else - { StringAppend(gStringVar1, BattleText_Format4); - } - StringAppend(gStringVar1, BattleText_Format6); break; } - StringAppend(gStringVar1, gSpeciesNames[species]); } @@ -1464,7 +1425,7 @@ void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 battleTowe while (1) { if (gBattleTowerBannedSpecies[counter] == 0xFFFF) - goto EXIT2; // Couldn't get the code to match without this GOTO + break; if (gBattleTowerBannedSpecies[counter] == species) break; @@ -1475,7 +1436,6 @@ void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 battleTowe if (gBattleTowerBannedSpecies[counter] != 0xFFFF) return; - EXIT2: if (battleTowerLevelType == 0 && monLevel > 50) return; @@ -1528,9 +1488,7 @@ void CheckPartyBattleTowerBanlist(void) numBanlistCaught = CountBattleTowerBanlistCaught(); for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++) - { counter = AppendBattleTowerBannedSpeciesName(gBattleTowerBannedSpecies[i], counter, numBanlistCaught); - } if (counter == 0) { @@ -1561,17 +1519,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); - } + PrintBattleTowerTrainerMessage((u16 *)gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].greeting); else - { - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].greeting.easyChat); - } + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].greeting); } void sub_81354CC(void) @@ -1643,9 +1595,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 +1633,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 +1662,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 +1730,7 @@ void SetBattleTowerParty(void) s32 i; for (i = 0; i < 3; i++) - { gSelectedOrderFromParty[i] = gSaveBlock2.battleTower.selectedPartyMons[i]; - } ReducePlayerPartyToThree(); } @@ -1858,14 +1792,10 @@ void sub_8135AC4(void) playerRecord->winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); for (i = 0; i < 6; i++) - { - playerRecord->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i]; - } + playerRecord->greeting[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 +1808,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 +1817,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 +1838,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 +1861,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 +1869,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 +1881,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 +1890,9 @@ u16 GetCurrentBattleTowerWinStreak(u8 battleTowerLevelType) + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; if (winStreak > 9999) - { return 9999; - } - - return winStreak; + else + return winStreak; } void DetermineBattleTowerPrize(void) @@ -2019,11 +1929,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 +1951,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 +1983,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 +2010,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 +2027,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 +2037,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 +2052,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 +2060,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 +2085,7 @@ void TryEnableBravoTrainerBattleTower(void) for (i = 0; i < 2; i++) { if (gSaveBlock2.battleTower.var_4AE[i] == 1) - { sub_80BFD20(); - } } } @@ -2206,17 +2093,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 33effb4ce..9313c458b 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/choose_party.c b/src/field/choose_party.c index 7529c4271..4766b2fbb 100644 --- a/src/field/choose_party.c +++ b/src/field/choose_party.c @@ -23,7 +23,7 @@ extern u8 gPlayerPartyCount; extern u8 gLastFieldPokeMenuOpened; extern u8 gUnknown_020384F0; -extern struct UnknownPokemonStruct2 gUnknown_02023A00[]; +extern struct UnknownPokemonStruct2 gUnknown_02023A00[3]; extern u8 gUnknown_0202E8F6; extern struct Pokemon gUnknown_030042FC[]; extern const u16 gBattleTowerBannedSpecies[]; @@ -529,104 +529,31 @@ static void BattleTowerEntryMenuCallback_Exit(u8 taskId) } #if DEBUG -__attribute__((naked)) -void debug_sub_81381B4() + +void debug_sub_81381B4(void) { - asm( - " push {r4, r5, r6, r7, lr}\n" - " mov r7, r9\n" - " mov r6, r8\n" - " push {r6, r7}\n" - " ldr r4, ._189 @ gUnknown_02023A00\n" - " add r0, r4, #0\n" - " mov r1, #0x0\n" - " mov r2, #0x60\n" - " bl memset\n" - " mov r7, #0x0\n" - " mov r8, r4\n" - " mov r0, #0x4\n" - " add r0, r0, r8\n" - " mov r9, r0\n" - "._188:\n" - " mov r0, #0x64\n" - " add r1, r7, #0\n" - " mul r1, r1, r0\n" - " ldr r0, ._189 + 4 @ gPlayerParty\n" - " add r5, r1, r0\n" - " add r0, r5, #0\n" - " mov r1, #0x41\n" - " bl GetMonData\n" - " lsl r4, r7, #0x5\n" - " mov r1, r8\n" - " add r6, r4, r1\n" - " strh r0, [r6]\n" - " lsl r0, r0, #0x10\n" - " cmp r0, #0\n" - " beq ._187 @cond_branch\n" - " add r0, r5, #0\n" - " mov r1, #0x38\n" - " bl GetMonData\n" - " strb r0, [r6, #0xf]\n" - " add r0, r5, #0\n" - " mov r1, #0x39\n" - " bl GetMonData\n" - " strh r0, [r6, #0x10]\n" - " add r0, r5, #0\n" - " mov r1, #0x3a\n" - " bl GetMonData\n" - " strh r0, [r6, #0x12]\n" - " add r0, r5, #0\n" - " mov r1, #0x37\n" - " bl GetMonData\n" - " mov r1, r8\n" - " add r1, r1, #0x14\n" - " add r1, r4, r1\n" - " str r0, [r1]\n" - " add r0, r5, #0\n" - " mov r1, #0xc\n" - " bl GetMonData\n" - " strh r0, [r6, #0x2]\n" - " add r0, r5, #0\n" - " mov r1, #0x0\n" - " bl GetMonData\n" - " mov r1, r8\n" - " add r1, r1, #0x18\n" - " add r1, r4, r1\n" - " str r0, [r1]\n" - " add r0, r5, #0\n" - " bl GetMonGender\n" - " strb r0, [r6, #0x1c]\n" - " add r4, r4, r9\n" - " add r0, r5, #0\n" - " mov r1, #0x2\n" - " add r2, r4, #0\n" - " bl GetMonData\n" - " add r0, r4, #0\n" - " bl Text_StripExtCtrlCodes\n" - " add r0, r5, #0\n" - " mov r1, #0x3\n" - " bl GetMonData\n" - " strb r0, [r6, #0x1d]\n" - "._187:\n" - " add r0, r7, #1\n" - " lsl r0, r0, #0x18\n" - " lsr r7, r0, #0x18\n" - " cmp r7, #0x2\n" - " bls ._188 @cond_branch\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" - "._190:\n" - " .align 2, 0\n" - "._189:\n" - " .word gUnknown_02023A00\n" - " .word gPlayerParty+0x12c\n" - "\n" - ); + u8 i; + + memset(gUnknown_02023A00, 0, sizeof(gUnknown_02023A00)); + for (i = 0; i < 3; i++) + { + gUnknown_02023A00[i].species = GetMonData(&gPlayerParty[3 + i], MON_DATA_SPECIES2); + if (gUnknown_02023A00[i].species != 0) + { + gUnknown_02023A00[i].level = GetMonData(&gPlayerParty[3 + i], MON_DATA_LEVEL); + gUnknown_02023A00[i].hp = GetMonData(&gPlayerParty[3 + i], MON_DATA_HP); + gUnknown_02023A00[i].maxhp = GetMonData(&gPlayerParty[3 + i], MON_DATA_MAX_HP); + gUnknown_02023A00[i].status = GetMonData(&gPlayerParty[3 + i], MON_DATA_STATUS); + gUnknown_02023A00[i].heldItem = GetMonData(&gPlayerParty[3 + i], MON_DATA_HELD_ITEM); + gUnknown_02023A00[i].personality = GetMonData(&gPlayerParty[3 + i], MON_DATA_PERSONALITY); + gUnknown_02023A00[i].gender = GetMonGender(&gPlayerParty[3 + i]); + GetMonData(&gPlayerParty[3 + i], MON_DATA_NICKNAME, gUnknown_02023A00[i].nickname); + Text_StripExtCtrlCodes(gUnknown_02023A00[i].nickname); + gUnknown_02023A00[i].language = GetMonData(&gPlayerParty[3 + i], MON_DATA_LANGUAGE); + } + } } + #endif bool8 SetupLinkMultiBattlePartyMenu(void) diff --git a/src/field/event_object_movement.c b/src/field/event_object_movement.c index 1236cd9b6..7a5f62456 100644 --- a/src/field/event_object_movement.c +++ b/src/field/event_object_movement.c @@ -1908,7 +1908,7 @@ static u16 gUnknown_030005A6; struct MapObject gMapObjects[16]; #if DEBUG -u8 gUnknown_Debug_03004BC0[4]; // unknown type +u8 gUnknown_Debug_03004BC0; #endif void npc_clear_ids_and_state(struct MapObject *mapObj) @@ -1920,48 +1920,16 @@ void npc_clear_ids_and_state(struct MapObject *mapObj) mapObj->mapobj_unk_1C = 0xFF; } -#if DEBUG -__attribute__((naked)) -void npcs_clear_ids_and_state() -{ - asm( - " push {r4, r5, lr}\n" - " mov r4, #0x0\n" - " ldr r5, ._2 @ gMapObjects\n" - "._1:\n" - " lsl r0, r4, #0x3\n" - " add r0, r0, r4\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r5\n" - " bl npc_clear_ids_and_state\n" - " add r0, r4, #1\n" - " lsl r0, r0, #0x18\n" - " lsr r4, r0, #0x18\n" - " cmp r4, #0xf\n" - " bls ._1 @cond_branch\n" - " ldr r1, ._2 + 4 @ gUnknown_Debug_03004BC0\n" - " mov r0, #0x0\n" - " strb r0, [r1]\n" - " pop {r4, r5}\n" - " pop {r0}\n" - " bx r0\n" - "._3:\n" - " .align 2, 0\n" - "._2:\n" - " .word gMapObjects\n" - " .word gUnknown_Debug_03004BC0\n" - "\n" - ); -} -#else void npcs_clear_ids_and_state(void) { u8 i; for (i = 0; i < 16; i++) npc_clear_ids_and_state(&gMapObjects[i]); -} +#if DEBUG + gUnknown_Debug_03004BC0 = 0; #endif +} void sub_805AA98(void) { @@ -2004,7 +1972,7 @@ u8 sub_805AB54(void) u8 GetFieldObjectIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { - if (localId <= 0xFE) + if (localId < 255) return GetFieldObjectIdByLocalIdAndMapInternal(localId, mapNum, mapGroup); else return GetFieldObjectIdByLocalId(localId); @@ -2055,190 +2023,80 @@ u8 GetFieldObjectIdByLocalId(u8 localId) return 16; } -#if DEBUG -__attribute__((naked)) -u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 c) -{ - asm( - " push {r4, r5, r6, r7, lr}\n" - " mov r7, r9\n" - " mov r6, r8\n" - " push {r6, r7}\n" - " add sp, sp, #0xfffffffc\n" - " add r5, r0, #0\n" - " lsl r1, r1, #0x18\n" - " lsr r6, r1, #0x18\n" - " lsl r2, r2, #0x18\n" - " lsr r7, r2, #0x18\n" - " ldrb r0, [r5]\n" - " add r1, r6, #0\n" - " add r2, r7, #0\n" - " mov r3, sp\n" - " bl GetAvailableFieldObjectSlot\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " beq ._35 @cond_branch\n" - " mov r0, #0x10\n" - " b ._36\n" - "._35:\n" - " mov r0, sp\n" - " ldrb r1, [r0]\n" - " lsl r0, r1, #0x3\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " ldr r1, ._40 @ gMapObjects\n" - " add r4, r0, r1\n" - " add r0, r4, #0\n" - " bl npc_clear_ids_and_state\n" - " ldrh r3, [r5, #0x4]\n" - " add r3, r3, #0x7\n" - " lsl r3, r3, #0x10\n" - " lsr r3, r3, #0x10\n" - " ldrh r2, [r5, #0x6]\n" - " add r2, r2, #0x7\n" - " lsl r2, r2, #0x10\n" - " lsr r2, r2, #0x10\n" - " ldrb r0, [r4]\n" - " mov r1, #0x1\n" - " orr r0, r0, r1\n" - " mov r1, #0x4\n" - " orr r0, r0, r1\n" - " strb r0, [r4]\n" - " ldrb r0, [r5, #0x1]\n" - " strb r0, [r4, #0x5]\n" - " ldrb r0, [r5, #0x9]\n" - " strb r0, [r4, #0x6]\n" - " ldrb r0, [r5]\n" - " strb r0, [r4, #0x8]\n" - " strb r6, [r4, #0x9]\n" - " strb r7, [r4, #0xa]\n" - " strh r3, [r4, #0xc]\n" - " strh r2, [r4, #0xe]\n" - " strh r3, [r4, #0x10]\n" - " strh r2, [r4, #0x12]\n" - " strh r3, [r4, #0x14]\n" - " strh r2, [r4, #0x16]\n" - " ldrb r0, [r5, #0x8]\n" - " mov r7, #0xf\n" - " add r1, r7, #0\n" - " and r1, r1, r0\n" - " ldrb r2, [r4, #0xb]\n" - " mov r0, #0x10\n" - " neg r0, r0\n" - " mov r8, r0\n" - " and r0, r0, r2\n" - " orr r0, r0, r1\n" - " strb r0, [r4, #0xb]\n" - " ldrb r1, [r5, #0x8]\n" - " lsl r1, r1, #0x4\n" - " and r0, r0, r7\n" - " orr r0, r0, r1\n" - " strb r0, [r4, #0xb]\n" - " ldrb r1, [r5, #0xa]\n" - " lsl r1, r1, #0x1c\n" - " mov r0, #0xf\n" - " mov r9, r0\n" - " lsr r1, r1, #0x1c\n" - " ldrb r2, [r4, #0x19]\n" - " mov r0, r8\n" - " and r0, r0, r2\n" - " orr r0, r0, r1\n" - " strb r0, [r4, #0x19]\n" - " ldrb r1, [r5, #0xa]\n" - " lsr r1, r1, #0x4\n" - " lsl r1, r1, #0x4\n" - " and r0, r0, r7\n" - " orr r0, r0, r1\n" - " strb r0, [r4, #0x19]\n" - " ldrh r0, [r5, #0xc]\n" - " strb r0, [r4, #0x7]\n" - " ldrh r0, [r5, #0xe]\n" - " strb r0, [r4, #0x1d]\n" - " ldr r1, ._40 + 4 @ gUnknown_0836DC09\n" - " ldrb r0, [r5, #0x9]\n" - " add r0, r0, r1\n" - " ldrb r1, [r0]\n" - " add r0, r4, #0\n" - " add r0, r0, #0x20\n" - " strb r1, [r0]\n" - " ldrb r1, [r0]\n" - " add r0, r4, #0\n" - " bl FieldObjectSetDirection\n" - " add r0, r4, #0\n" - " bl FieldObjectHandleDynamicGraphicsId\n" - " ldr r1, ._40 + 8 @ gUnknown_0836DBBC\n" - " ldrb r0, [r4, #0x6]\n" - " add r0, r0, r1\n" - " ldrb r0, [r0]\n" - " cmp r0, #0\n" - " beq ._39 @cond_branch\n" - " ldrb r2, [r4, #0x19]\n" - " add r0, r7, #0\n" - " and r0, r0, r2\n" - " cmp r0, #0\n" - " bne ._38 @cond_branch\n" - " lsl r0, r2, #0x1c\n" - " lsr r0, r0, #0x1c\n" - " add r0, r0, #0x1\n" - " mov r1, r9\n" - " and r0, r0, r1\n" - " mov r1, r8\n" - " and r1, r1, r2\n" - " orr r1, r1, r0\n" - " strb r1, [r4, #0x19]\n" - "._38:\n" - " ldrb r2, [r4, #0x19]\n" - " mov r0, #0xf0\n" - " and r0, r0, r2\n" - " cmp r0, #0\n" - " bne ._39 @cond_branch\n" - " lsr r1, r2, #0x4\n" - " add r1, r1, #0x1\n" - " lsl r1, r1, #0x4\n" - " add r0, r7, #0\n" - " and r0, r0, r2\n" - " orr r0, r0, r1\n" - " strb r0, [r4, #0x19]\n" - "._39:\n" - " ldr r1, ._40 + 12 @ gUnknown_Debug_03004BC0\n" - " ldrb r0, [r1]\n" - " add r0, r0, #0x1\n" - " strb r0, [r1]\n" - " mov r0, sp\n" - " ldrb r0, [r0]\n" - "._36:\n" - " add sp, sp, #0x4\n" - " pop {r3, r4}\n" - " mov r8, r3\n" - " mov r9, r4\n" - " pop {r4, r5, r6, r7}\n" - " pop {r1}\n" - " bx r1\n" - "._41:\n" - " .align 2, 0\n" - "._40:\n" - " .word gMapObjects\n" - " .word gUnknown_0836DC09\n" - " .word gUnknown_0836DBBC\n" - " .word gUnknown_Debug_03004BC0\n" - "\n" - ); -} -#else -#ifdef NONMATCHING +// The bitfield at 0x18 needs to be u16 for this function to match +struct MapObjectAlt +{ + /*0x00*/ u32 active:1; + u32 mapobj_bit_1:1; + u32 mapobj_bit_2:1; + u32 mapobj_bit_3:1; + u32 mapobj_bit_4:1; + u32 mapobj_bit_5:1; + u32 mapobj_bit_6:1; + u32 mapobj_bit_7:1; + /*0x01*/ u32 mapobj_bit_8:1; + u32 mapobj_bit_9:1; + u32 mapobj_bit_10:1; + u32 mapobj_bit_11:1; + u32 mapobj_bit_12:1; + u32 mapobj_bit_13:1; + u32 mapobj_bit_14:1; + u32 mapobj_bit_15:1; + /*0x02*/ u32 mapobj_bit_16:1; + u32 mapobj_bit_17:1; + u32 mapobj_bit_18:1; + u32 mapobj_bit_19:1; + u32 mapobj_bit_20:1; + u32 mapobj_bit_21:1; + u32 mapobj_bit_22:1; + u32 mapobj_bit_23:1; + /*0x03*/ u32 mapobj_bit_24:1; + u32 mapobj_bit_25:1; + u32 mapobj_bit_26:1; + u32 mapobj_bit_27:1; + u32 mapobj_bit_28:1; + u32 mapobj_bit_29:1; + u32 mapobj_bit_30:1; + u32 mapobj_bit_31:1; + /*0x04*/ u8 spriteId; + /*0x05*/ u8 graphicsId; + /*0x06*/ u8 animPattern; + /*0x07*/ u8 trainerType; + /*0x08*/ u8 localId; + /*0x09*/ u8 mapNum; + /*0x0A*/ u8 mapGroup; + /*0x0B*/ u8 mapobj_unk_0B_0:4; + u8 elevation:4; + /*0x0C*/ struct Coords16 coords1; + /*0x10*/ struct Coords16 coords2; + /*0x14*/ struct Coords16 coords3; + /*0x18*/ u16 mapobj_unk_18:4; //current direction? + /*0x18*/ u16 placeholder18:4; + /*0x19*/ u16 rangeX:4; + /*0x19*/ u16 rangeY:4; + /*0x1A*/ u8 mapobj_unk_1A; + /*0x1B*/ u8 mapobj_unk_1B; + /*0x1C*/ u8 mapobj_unk_1C; + /*0x1D*/ u8 trainerRange_berryTreeId; + /*0x1E*/ u8 mapobj_unk_1E; + /*0x1F*/ u8 mapobj_unk_1F; + /*0x20*/ u8 mapobj_unk_20; + /*0x21*/ u8 mapobj_unk_21; + /*0x22*/ u8 animId; + /*size = 0x24*/ +}; + u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 c) { - struct MapObject *mapObj; //TODO: resolve the mapobj_unk_19b weirdness + struct MapObjectAlt *mapObj; //TODO: resolve the mapobj_unk_19b weirdness u8 var; - u16 r3; - u16 r2; + s16 r3; + s16 r2; - //asm("nop"::"r"(b)); if (GetAvailableFieldObjectSlot(template->localId, b, c, &var) != 0) return 16; - //_0805ACCE - mapObj = &gMapObjects[var]; - npc_clear_ids_and_state(mapObj); + mapObj = (void *)&gMapObjects[var]; + npc_clear_ids_and_state((struct MapObject *)mapObj); r3 = template->x + 7; r2 = template->y + 7; mapObj->active = TRUE; @@ -2247,6 +2105,7 @@ u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 mapObj->animPattern = template->movementType; mapObj->localId = template->localId; mapObj->mapNum = b; + asm("":::"r6"); mapObj->mapGroup = c; mapObj->coords1.x = r3; mapObj->coords1.y = r2; @@ -2256,186 +2115,26 @@ u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 mapObj->coords3.y = r2; mapObj->mapobj_unk_0B_0 = template->elevation; mapObj->elevation = template->elevation; - mapObj->range.as_nybbles.x = template->unkA_0; - mapObj->range.as_nybbles.y = template->unkA_4; + mapObj->rangeX = template->unkA_0; + mapObj->rangeY = template->unkA_4; mapObj->trainerType = template->unkC; mapObj->trainerRange_berryTreeId = template->unkE; mapObj->mapobj_unk_20 = gUnknown_0836DC09[template->movementType]; FieldObjectSetDirection((struct MapObject *)mapObj, mapObj->mapobj_unk_20); - FieldObjectHandleDynamicGraphicsId(mapObj); - //asm("":::"r5","r6"); + asm("":::"r5","r6"); + FieldObjectHandleDynamicGraphicsId((struct MapObject *)mapObj); if (gUnknown_0836DBBC[mapObj->animPattern] != 0) { - if (mapObj->range.as_nybbles.x == 0) - mapObj->range.as_nybbles.x++; - if (mapObj->range.as_nybbles.y == 0) - mapObj->range.as_nybbles.y++; + if (mapObj->rangeX == 0) + mapObj->rangeX++; + if (mapObj->rangeY == 0) + mapObj->rangeY++; } +#if DEBUG + gUnknown_Debug_03004BC0++; +#endif return var; } -#else -__attribute__((naked)) -u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 c) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - sub sp, 0x4\n\ - adds r5, r0, 0\n\ - lsls r1, 24\n\ - lsrs r6, r1, 24\n\ - lsls r2, 24\n\ - lsrs r7, r2, 24\n\ - ldrb r0, [r5]\n\ - adds r1, r6, 0\n\ - adds r2, r7, 0\n\ - mov r3, sp\n\ - bl GetAvailableFieldObjectSlot\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _0805ACCE\n\ - movs r0, 0x10\n\ - b _0805ADC2\n\ -_0805ACCE:\n\ - mov r0, sp\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 3\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - ldr r1, _0805ADD0 @ =gMapObjects\n\ - adds r4, r0, r1\n\ - adds r0, r4, 0\n\ - bl npc_clear_ids_and_state\n\ - ldrh r3, [r5, 0x4]\n\ - adds r3, 0x7\n\ - lsls r3, 16\n\ - lsrs r3, 16\n\ - ldrh r2, [r5, 0x6]\n\ - adds r2, 0x7\n\ - lsls r2, 16\n\ - lsrs r2, 16\n\ - ldrb r0, [r4]\n\ - movs r1, 0x1\n\ - orrs r0, r1\n\ - movs r1, 0x4\n\ - orrs r0, r1\n\ - strb r0, [r4]\n\ - ldrb r0, [r5, 0x1]\n\ - strb r0, [r4, 0x5]\n\ - ldrb r0, [r5, 0x9]\n\ - strb r0, [r4, 0x6]\n\ - ldrb r0, [r5]\n\ - strb r0, [r4, 0x8]\n\ - strb r6, [r4, 0x9]\n\ - strb r7, [r4, 0xA]\n\ - strh r3, [r4, 0xC]\n\ - strh r2, [r4, 0xE]\n\ - strh r3, [r4, 0x10]\n\ - strh r2, [r4, 0x12]\n\ - strh r3, [r4, 0x14]\n\ - strh r2, [r4, 0x16]\n\ - ldrb r0, [r5, 0x8]\n\ - movs r7, 0xF\n\ - adds r1, r7, 0\n\ - ands r1, r0\n\ - ldrb r2, [r4, 0xB]\n\ - movs r0, 0x10\n\ - negs r0, r0\n\ - mov r8, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r4, 0xB]\n\ - ldrb r1, [r5, 0x8]\n\ - lsls r1, 4\n\ - ands r0, r7\n\ - orrs r0, r1\n\ - strb r0, [r4, 0xB]\n\ - ldrb r1, [r5, 0xA]\n\ - lsls r1, 28\n\ - movs r0, 0xF\n\ - mov r9, r0\n\ - lsrs r1, 28\n\ - ldrb r2, [r4, 0x19]\n\ - mov r0, r8\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r4, 0x19]\n\ - ldrb r1, [r5, 0xA]\n\ - lsrs r1, 4\n\ - lsls r1, 4\n\ - ands r0, r7\n\ - orrs r0, r1\n\ - strb r0, [r4, 0x19]\n\ - ldrh r0, [r5, 0xC]\n\ - strb r0, [r4, 0x7]\n\ - ldrh r0, [r5, 0xE]\n\ - strb r0, [r4, 0x1D]\n\ - ldr r1, _0805ADD4 @ =gUnknown_0836DC09\n\ - ldrb r0, [r5, 0x9]\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - adds r0, r4, 0\n\ - adds r0, 0x20\n\ - strb r1, [r0]\n\ - ldrb r1, [r0]\n\ - adds r0, r4, 0\n\ - bl FieldObjectSetDirection\n\ - adds r0, r4, 0\n\ - bl FieldObjectHandleDynamicGraphicsId\n\ - ldr r1, _0805ADD8 @ =gUnknown_0836DBBC\n\ - ldrb r0, [r4, 0x6]\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - beq _0805ADBE\n\ - ldrb r2, [r4, 0x19]\n\ - adds r0, r7, 0\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - bne _0805ADA6\n\ - lsls r0, r2, 28\n\ - lsrs r0, 28\n\ - adds r0, 0x1\n\ - mov r1, r9\n\ - ands r0, r1\n\ - mov r1, r8\n\ - ands r1, r2\n\ - orrs r1, r0\n\ - strb r1, [r4, 0x19]\n\ -_0805ADA6:\n\ - ldrb r2, [r4, 0x19]\n\ - movs r0, 0xF0\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - bne _0805ADBE\n\ - lsrs r1, r2, 4\n\ - adds r1, 0x1\n\ - lsls r1, 4\n\ - adds r0, r7, 0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r4, 0x19]\n\ -_0805ADBE:\n\ - mov r0, sp\n\ - ldrb r0, [r0]\n\ -_0805ADC2:\n\ - add sp, 0x4\n\ - pop {r3,r4}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_0805ADD0: .4byte gMapObjects\n\ -_0805ADD4: .4byte gUnknown_0836DC09\n\ -_0805ADD8: .4byte gUnknown_0836DBBC\n\ - .syntax divided\n"); -} -#endif -#endif u8 sub_805ADDC(u8 localId) { @@ -2475,38 +2174,14 @@ u8 GetAvailableFieldObjectSlot(u16 a, u8 b, u8 c, u8 *d) return 0; } -#if DEBUG -__attribute__((naked)) -void RemoveFieldObject(struct MapObject *mapObject) -{ - asm( - " push {lr}\n" - " ldrb r2, [r0]\n" - " mov r1, #0x2\n" - " neg r1, r1\n" - " and r1, r1, r2\n" - " strb r1, [r0]\n" - " bl RemoveFieldObjectInternal\n" - " ldr r1, ._72 @ gUnknown_Debug_03004BC0\n" - " ldrb r0, [r1]\n" - " sub r0, r0, #0x1\n" - " strb r0, [r1]\n" - " pop {r0}\n" - " bx r0\n" - "._73:\n" - " .align 2, 0\n" - "._72:\n" - " .word gUnknown_Debug_03004BC0\n" - "\n" - ); -} -#else void RemoveFieldObject(struct MapObject *mapObject) { mapObject->active = FALSE; RemoveFieldObjectInternal(mapObject); -} +#if DEBUG + gUnknown_Debug_03004BC0--; #endif +} void RemoveFieldObjectByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { @@ -2539,226 +2214,6 @@ void npc_hide_all_but_player(void) } } -#if DEBUG -__attribute__((naked)) -u8 sub_805AFCC(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate *sprTemplate, u8 c, u8 d, s16 e, s16 f) -{ - 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" - " add r7, r1, #0\n" - " add r1, r2, #0\n" - " add r2, r3, #0\n" - " ldr r3, [sp, #0x20]\n" - " ldr r4, [sp, #0x24]\n" - " lsl r1, r1, #0x18\n" - " lsr r1, r1, #0x18\n" - " lsl r2, r2, #0x18\n" - " lsr r2, r2, #0x18\n" - " lsl r3, r3, #0x10\n" - " lsr r3, r3, #0x10\n" - " mov r9, r3\n" - " lsl r4, r4, #0x10\n" - " lsr r4, r4, #0x10\n" - " mov sl, r4\n" - " bl InitFieldObjectStateFromTemplate\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " mov r8, r0\n" - " cmp r0, #0x10\n" - " bne ._83 @cond_branch\n" - " mov r0, #0x10\n" - " b ._92\n" - "._83:\n" - " mov r0, r8\n" - " lsl r4, r0, #0x3\n" - " add r0, r4, r0\n" - " lsl r0, r0, #0x2\n" - " ldr r1, ._87 @ gMapObjects\n" - " add r5, r0, r1\n" - " ldrb r0, [r5, #0x5]\n" - " bl GetFieldObjectGraphicsInfo\n" - " add r6, r0, #0\n" - " ldrb r1, [r6, #0xc]\n" - " mov r0, #0xf\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._85 @cond_branch\n" - " ldrh r0, [r6, #0x2]\n" - " lsl r1, r1, #0x1c\n" - " lsr r1, r1, #0x1c\n" - " bl npc_load_two_palettes__no_record\n" - " b ._89\n" - "._88:\n" - " .align 2, 0\n" - "._87:\n" - " .word gMapObjects\n" - "._85:\n" - " cmp r0, #0xa\n" - " bne ._89 @cond_branch\n" - " ldrh r0, [r6, #0x2]\n" - " lsl r1, r1, #0x1c\n" - " lsr r1, r1, #0x1c\n" - " bl npc_load_two_palettes__and_record\n" - "._89:\n" - " ldrb r0, [r5, #0x6]\n" - " cmp r0, #0x4c\n" - " bne ._90 @cond_branch\n" - " ldrb r0, [r5, #0x1]\n" - " mov r1, #0x20\n" - " orr r0, r0, r1\n" - " strb r0, [r5, #0x1]\n" - "._90:\n" - " ldr r1, ._93 @ 0xffff\n" - " add r0, r1, #0\n" - " strh r0, [r7, #0x2]\n" - " add r0, r7, #0\n" - " mov r1, #0x0\n" - " mov r2, #0x0\n" - " mov r3, #0x0\n" - " bl CreateSprite\n" - " lsl r0, r0, #0x18\n" - " lsr r7, r0, #0x18\n" - " cmp r7, #0x40\n" - " bne ._91 @cond_branch\n" - " ldr r1, ._93 + 4 @ gUnknown_Debug_03004BC0\n" - " ldrb r0, [r1]\n" - " sub r0, r0, #0x1\n" - " strb r0, [r1]\n" - " ldr r0, ._93 + 8 @ gMapObjects\n" - " mov r2, r8\n" - " add r1, r4, r2\n" - " lsl r1, r1, #0x2\n" - " add r1, r1, r0\n" - " ldrb r2, [r1]\n" - " mov r0, #0x2\n" - " neg r0, r0\n" - " and r0, r0, r2\n" - " strb r0, [r1]\n" - " mov r0, #0x10\n" - " b ._92\n" - "._94:\n" - " .align 2, 0\n" - "._93:\n" - " .word 0xffff\n" - " .word gUnknown_Debug_03004BC0\n" - " .word gMapObjects\n" - "._91:\n" - " lsl r0, r7, #0x4\n" - " add r0, r0, r7\n" - " lsl r0, r0, #0x2\n" - " ldr r1, ._96 @ gSprites\n" - " add r4, r0, r1\n" - " mov r1, r9\n" - " lsl r0, r1, #0x10\n" - " asr r0, r0, #0x10\n" - " ldrh r2, [r5, #0x10]\n" - " add r0, r0, r2\n" - " lsl r0, r0, #0x10\n" - " asr r0, r0, #0x10\n" - " mov r2, sl\n" - " lsl r1, r2, #0x10\n" - " asr r1, r1, #0x10\n" - " ldrh r2, [r5, #0x12]\n" - " add r1, r1, r2\n" - " lsl r1, r1, #0x10\n" - " asr r1, r1, #0x10\n" - " add r2, r4, #0\n" - " add r2, r2, #0x20\n" - " add r3, r4, #0\n" - " add r3, r3, #0x22\n" - " bl sub_8060388\n" - " ldrh r0, [r6, #0x8]\n" - " lsl r0, r0, #0x10\n" - " asr r0, r0, #0x11\n" - " neg r0, r0\n" - " add r1, r4, #0\n" - " add r1, r1, #0x28\n" - " strb r0, [r1]\n" - " ldrh r0, [r6, #0xa]\n" - " lsl r0, r0, #0x10\n" - " asr r0, r0, #0x11\n" - " neg r0, r0\n" - " add r2, r4, #0\n" - " add r2, r2, #0x29\n" - " strb r0, [r2]\n" - " ldrh r0, [r4, #0x20]\n" - " add r0, r0, #0x8\n" - " strh r0, [r4, #0x20]\n" - " ldrh r1, [r4, #0x22]\n" - " add r1, r1, #0x10\n" - " mov r0, #0x0\n" - " ldsb r0, [r2, r0]\n" - " add r0, r0, r1\n" - " strh r0, [r4, #0x22]\n" - " ldrb r1, [r6, #0xc]\n" - " lsl r1, r1, #0x1c\n" - " lsr r1, r1, #0x18\n" - " ldrb r2, [r4, #0x5]\n" - " mov r0, #0xf\n" - " and r0, r0, r2\n" - " orr r0, r0, r1\n" - " strb r0, [r4, #0x5]\n" - " add r2, r4, #0\n" - " add r2, r2, #0x3e\n" - " ldrb r0, [r2]\n" - " mov r1, #0x2\n" - " orr r0, r0, r1\n" - " strb r0, [r2]\n" - " mov r0, r8\n" - " strh r0, [r4, #0x2e]\n" - " strb r7, [r5, #0x4]\n" - " ldrb r1, [r6, #0xc]\n" - " lsl r1, r1, #0x19\n" - " lsr r1, r1, #0x1f\n" - " lsl r1, r1, #0x4\n" - " ldrb r2, [r5, #0x1]\n" - " mov r0, #0x11\n" - " neg r0, r0\n" - " and r0, r0, r2\n" - " orr r0, r0, r1\n" - " strb r0, [r5, #0x1]\n" - " lsl r0, r0, #0x1b\n" - " cmp r0, #0\n" - " blt ._95 @cond_branch\n" - " ldrb r0, [r5, #0x18]\n" - " lsl r0, r0, #0x1c\n" - " lsr r0, r0, #0x1c\n" - " bl FieldObjectDirectionToImageAnimId\n" - " add r1, r0, #0\n" - " lsl r1, r1, #0x18\n" - " lsr r1, r1, #0x18\n" - " add r0, r4, #0\n" - " bl StartSpriteAnim\n" - "._95:\n" - " ldrb r0, [r5, #0xb]\n" - " lsr r0, r0, #0x4\n" - " add r1, r4, #0\n" - " mov r2, #0x1\n" - " bl SetObjectSubpriorityByZCoord\n" - " add r0, r5, #0\n" - " add r1, r4, #0\n" - " bl sub_80634D0\n" - " mov r0, r8\n" - "._92:\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 {r1}\n" - " bx r1\n" - "._97:\n" - " .align 2, 0\n" - "._96:\n" - " .word gSprites\n" - "\n" - ); -} -#else u8 sub_805AFCC(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate *sprTemplate, u8 c, u8 d, s16 e, s16 f) { u8 mapObjectId; @@ -2788,6 +2243,9 @@ u8 sub_805AFCC(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate * spriteId = CreateSprite(sprTemplate, 0, 0, 0); if (spriteId == 64) { +#if DEBUG + gUnknown_Debug_03004BC0--; +#endif gMapObjects[mapObjectId].active = FALSE; return 16; } @@ -2808,7 +2266,6 @@ u8 sub_805AFCC(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate * sub_80634D0(mapObject, sprite); return mapObjectId; } -#endif u8 SpawnFieldObject(struct MapObjectTemplate *mapObjTemplate, u8 b, u8 c, s16 d, s16 e) { @@ -3031,79 +2488,26 @@ void RemoveFieldObjectIfOutsideView(struct MapObject *mapObject) void sub_805B75C(u8, s16, s16); -#if DEBUG -__attribute__((naked)) -void sub_805B710(u16 u161, u16 u162) -{ - asm( - " push {r4, r5, r6, r7, lr}\n" - " mov r7, r8\n" - " push {r7}\n" - " add r4, r0, #0\n" - " add r5, r1, #0\n" - " lsl r4, r4, #0x10\n" - " lsr r4, r4, #0x10\n" - " lsl r5, r5, #0x10\n" - " lsr r5, r5, #0x10\n" - " ldr r6, ._153 @ gUnknown_Debug_03004BC0\n" - " mov r0, #0x0\n" - " strb r0, [r6]\n" - " bl ClearPlayerAvatarInfo\n" - " mov r7, #0x0\n" - " ldr r0, ._153 + 4 @ gMapObjects\n" - " mov r8, r0\n" - " lsl r4, r4, #0x10\n" - " lsl r5, r5, #0x10\n" - "._152:\n" - " lsl r0, r7, #0x3\n" - " add r0, r0, r7\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r8\n" - " ldrb r0, [r0]\n" - " lsl r0, r0, #0x1f\n" - " cmp r0, #0\n" - " beq ._151 @cond_branch\n" - " add r0, r7, #0\n" - " asr r1, r4, #0x10\n" - " asr r2, r5, #0x10\n" - " bl sub_805B75C\n" - " ldrb r0, [r6]\n" - " add r0, r0, #0x1\n" - " strb r0, [r6]\n" - "._151:\n" - " add r0, r7, #1\n" - " lsl r0, r0, #0x18\n" - " lsr r7, r0, #0x18\n" - " cmp r7, #0xf\n" - " bls ._152 @cond_branch\n" - " bl sub_805AAB0\n" - " pop {r3}\n" - " mov r8, r3\n" - " pop {r4, r5, r6, r7}\n" - " pop {r0}\n" - " bx r0\n" - "._154:\n" - " .align 2, 0\n" - "._153:\n" - " .word gUnknown_Debug_03004BC0\n" - " .word gMapObjects\n" - "\n" - ); -} -#else void sub_805B710(u16 a, u16 b) { u8 i; +#if DEBUG + gUnknown_Debug_03004BC0 = 0; +#endif ClearPlayerAvatarInfo(); for (i = 0; i < 16; i++) { if (gMapObjects[i].active) + { sub_805B75C(i, a, b); +#if DEBUG + gUnknown_Debug_03004BC0++; +#endif + } } sub_805AAB0(); } -#endif extern void SetPlayerAvatarFieldObjectIdAndObjectId(u8, u8); extern void sub_805B914(struct MapObject *); diff --git a/src/field/field_player_avatar.c b/src/field/field_player_avatar.c index c4ba8902e..1552381b2 100644 --- a/src/field/field_player_avatar.c +++ b/src/field/field_player_avatar.c @@ -10,6 +10,7 @@ #include "constants/map_objects.h" #include "menu.h" #include "metatile_behavior.h" +#include "new_game.h" #include "party_menu.h" #include "random.h" #include "overworld.h" @@ -30,9 +31,9 @@ static void npc_clear_strange_bits(struct MapObject *a); static void MovePlayerAvatarUsingKeypadInput(u8 a, u16 b, u16 c); static void PlayerAllowForcedMovementIfMovingSameDirection(void); static bool8 TryDoMetatileBehaviorForcedMovement(void); -/*static*/ u8 GetForcedMovementByMetatileBehavior(void); +static u8 GetForcedMovementByMetatileBehavior(void); static void MovePlayerNotOnBike(u8 a, u16 b); -/*static*/ u8 CheckMovementInputNotOnBike(u8 a); +static u8 CheckMovementInputNotOnBike(u8 a); static u8 CheckForPlayerAvatarCollision(u8 a); static u8 sub_8058EF0(s16 a, s16 b, u8 c); static bool8 ShouldJumpLedge(s16 a, s16 b, u8 c); @@ -49,6 +50,8 @@ static void sub_8059D60(struct MapObject *a); static void StartStrengthAnim(u8 a, u8 b); static void DoPlayerMatJump(void); static void sub_805A06C(void); +u8 debug_sub_805F2B0(u8); +u8 debug_sub_805F2DC(u8); static bool8 (*const gUnknown_0830FB58[])(u8) = { @@ -258,59 +261,16 @@ static void PlayerAllowForcedMovementIfMovingSameDirection(void) gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_5; } -#if DEBUG -__attribute__((naked)) -u8 TryDoMetatileBehaviorForcedMovement() -{ - asm( - " push {r4, lr}\n" - " ldr r0, ._27 @ gUnknown_020297ED\n" - " ldrb r0, [r0]\n" - " cmp r0, #0\n" - " beq ._25 @cond_branch\n" - " ldr r0, ._27 + 4 @ gMain\n" - " ldrh r1, [r0, #0x2c]\n" - " mov r0, #0x80\n" - " lsl r0, r0, #0x1\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._25 @cond_branch\n" - " mov r0, #0x0\n" - " b ._26\n" - "._28:\n" - " .align 2, 0\n" - "._27:\n" - " .word gUnknown_020297ED\n" - " .word gMain\n" - "._25:\n" - " ldr r4, ._29 @ gUnknown_0830FBA0\n" - " bl GetForcedMovementByMetatileBehavior\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x16\n" - " add r0, r0, r4\n" - " ldr r0, [r0]\n" - " bl _call_via_r0\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - "._26:\n" - " pop {r4}\n" - " pop {r1}\n" - " bx r1\n" - "._30:\n" - " .align 2, 0\n" - "._29:\n" - " .word gUnknown_0830FBA0\n" - "\n" - ); -} -#else static bool8 TryDoMetatileBehaviorForcedMovement(void) { +#if DEBUG + if (gUnknown_020297ED != 0 && (gMain.heldKeys & 0x100)) + return 0; +#endif return gUnknown_0830FBA0[GetForcedMovementByMetatileBehavior()](); } -#endif -/*static*/ u8 GetForcedMovementByMetatileBehavior(void) +static u8 GetForcedMovementByMetatileBehavior(void) { u8 i; @@ -481,57 +441,16 @@ bool8 ForcedMovement_MuddySlope(void) } } -#if DEBUG -__attribute__((naked)) -void MovePlayerNotOnBike(u8 u81, u16 u161) -{ - asm( - " push {r4, r5, r6, lr}\n" - " lsl r0, r0, #0x18\n" - " lsr r2, r0, #0x18\n" - " add r5, r2, #0\n" - " lsl r1, r1, #0x10\n" - " lsr r6, r1, #0x10\n" - " ldr r0, ._84 @ gUnknown_020297ED\n" - " ldrb r0, [r0]\n" - " cmp r0, #0\n" - " beq ._82 @cond_branch\n" - " add r0, r2, #0\n" - " bl debug_sub_805F2B0\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bne ._83 @cond_branch\n" - "._82:\n" - " ldr r4, ._84 + 4 @ gUnknown_0830FBEC\n" - " add r0, r5, #0\n" - " bl CheckMovementInputNotOnBike\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x16\n" - " add r0, r0, r4\n" - " ldr r2, [r0]\n" - " add r0, r5, #0\n" - " add r1, r6, #0\n" - " bl _call_via_r2\n" - "._83:\n" - " pop {r4, r5, r6}\n" - " pop {r0}\n" - " bx r0\n" - "._85:\n" - " .align 2, 0\n" - "._84:\n" - " .word gUnknown_020297ED\n" - " .word gUnknown_0830FBEC\n" - "\n" - ); -} -#else static void MovePlayerNotOnBike(u8 direction, u16 heldKeys) { +#if DEBUG + if (gUnknown_020297ED != 0 && debug_sub_805F2B0(direction) != 0) + return; +#endif gUnknown_0830FBEC[CheckMovementInputNotOnBike(direction)](direction, heldKeys); } -#endif -/*static*/ u8 CheckMovementInputNotOnBike(u8 direction) +static u8 CheckMovementInputNotOnBike(u8 direction) { if (direction == DIR_NONE) { @@ -1855,96 +1774,24 @@ static void sub_805A954(void) } #if DEBUG -__attribute__((naked)) -void debug_sub_805F2B0() -{ - asm( - " push {lr}\n" - " lsl r0, r0, #0x18\n" - " lsr r2, r0, #0x18\n" - " ldr r0, ._422 @ gMain\n" - " ldrh r1, [r0, #0x2c]\n" - " mov r0, #0x80\n" - " lsl r0, r0, #0x1\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._420 @cond_branch\n" - " mov r0, #0x0\n" - " b ._421\n" - "._423:\n" - " .align 2, 0\n" - "._422:\n" - " .word gMain\n" - "._420:\n" - " add r0, r2, #0\n" - " bl debug_sub_805F2DC\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - "._421:\n" - " pop {r1}\n" - " bx r1\n" - "\n" - ); -} - -__attribute__((naked)) -void debug_sub_805F2DC() -{ - asm( - " push {r4, lr}\n" - " lsl r0, r0, #0x18\n" - " lsr r4, r0, #0x18\n" - " cmp r4, #0\n" - " bne ._424 @cond_branch\n" - " ldr r2, ._426 @ gMapObjects\n" - " ldr r0, ._426 + 4 @ gPlayerAvatar\n" - " ldrb r1, [r0, #0x5]\n" - " lsl r0, r1, #0x3\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r2\n" - " ldrb r0, [r0, #0x18]\n" - " lsr r0, r0, #0x4\n" - " bl PlayerFaceDirection\n" - " b ._430\n" - "._427:\n" - " .align 2, 0\n" - "._426:\n" - " .word gMapObjects\n" - " .word gPlayerAvatar\n" - "._424:\n" - " ldr r2, ._431 @ gMapObjects\n" - " ldr r0, ._431 + 4 @ gPlayerAvatar\n" - " ldrb r1, [r0, #0x5]\n" - " lsl r0, r1, #0x3\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r2\n" - " ldrb r0, [r0, #0x1]\n" - " lsr r0, r0, #0x7\n" - " cmp r0, #0\n" - " beq ._429 @cond_branch\n" - " add r0, r4, #0\n" - " bl CanCameraMoveInDirection\n" - " cmp r0, #0\n" - " bne ._429 @cond_branch\n" - " add r0, r4, #0\n" - " bl PlayerOnBikeCollide\n" - " b ._430\n" - "._432:\n" - " .align 2, 0\n" - "._431:\n" - " .word gMapObjects\n" - " .word gPlayerAvatar\n" - "._429:\n" - " add r0, r4, #0\n" - " bl PlayerGoSpeed4\n" - "._430:\n" - " mov r0, #0x1\n" - " pop {r4}\n" - " pop {r1}\n" - " bx r1\n" - "\n" - ); + +u8 debug_sub_805F2B0(u8 a) +{ + if (gMain.heldKeys & 0x100) + return debug_sub_805F2DC(a); + else + return 0; } + +u8 debug_sub_805F2DC(u8 a) +{ + if (a == 0) + PlayerFaceDirection(gMapObjects[gPlayerAvatar.mapObjectId].placeholder18); + else if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_15 && !CanCameraMoveInDirection(a)) + PlayerOnBikeCollide(a); + else + PlayerGoSpeed4(a); + return 1; +} + #endif diff --git a/src/field/field_weather.c b/src/field/field_weather.c index 3f500ba50..5857145ef 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 "event_object_movement.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 5bf2c5c43..c8f942fe5 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_flash.c b/src/field/fldeff_flash.c index 8c0f09bd9..30ddd0f6c 100644 --- a/src/field/fldeff_flash.c +++ b/src/field/fldeff_flash.c @@ -72,33 +72,15 @@ static const u16 gCaveTransitionTilemap[] = INCBIN_U16("graphics/misc/cave_trans static const u8 gCaveTransitionTiles[] = INCBIN_U8("graphics/misc/cave_transition.4bpp.lz"); #if DEBUG -__attribute__((naked)) + void debug_sub_8122080(void) { - asm("\ - push {lr}\n\ - ldr r0, ._4 @ gMapHeader\n\ - ldrb r0, [r0, #0x15]\n\ - cmp r0, #0x1\n\ - bne ._2 @cond_branch\n\ - ldr r0, ._4 + 4 @ 0x828\n\ - bl FlagGet\n\ - lsl r0, r0, #0x18\n\ - cmp r0, #0\n\ - bne ._2 @cond_branch\n\ - bl sub_810CBFC\n\ - b ._3\n\ -._5:\n\ - .align 2, 0\n\ -._4:\n\ - .word gMapHeader\n\ - .word 0x828\n\ -._2:\n\ - bl ScriptContext2_Disable\n\ -._3:\n\ - pop {r0}\n\ - bx r0"); + if (gMapHeader.cave == 1 && !FlagGet(FLAG_SYS_USE_FLASH)) + sub_810CBFC(); + else + ScriptContext2_Disable(); } + #endif bool8 SetUpFieldMove_Flash(void) diff --git a/src/field/fldeff_secretpower.c b/src/field/fldeff_secretpower.c index 0e91bb55c..d1df03d84 100644 --- a/src/field/fldeff_secretpower.c +++ b/src/field/fldeff_secretpower.c @@ -245,98 +245,44 @@ void sub_80C6280(void) #if DEBUG -__attribute__((naked)) -void debug_sub_80D93F4() -{ - asm("\ - push {r4, lr}\n\ - bl sub_80BB63C\n\ - ldr r0, ._98 @ gSpecialVar_Result\n\ - ldrh r0, [r0]\n\ - cmp r0, #0x1\n\ - beq ._95 @cond_branch\n\ - bl player_get_direction_lower_nybble\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - cmp r0, #0x2\n\ - beq ._96 @cond_branch\n\ -._95:\n\ - bl ScriptContext2_Disable\n\ - b ._109\n\ -._99:\n\ - .align 2, 0\n\ -._98:\n\ - .word gSpecialVar_Result\n\ -._96:\n\ - ldr r4, ._102 @ gUnknown_0203923C\n\ - add r1, r4, #2\n\ - add r0, r4, #0\n\ - bl GetXYCoordsOneStepInFrontOfPlayer\n\ - mov r1, #0x0\n\ - ldsh r0, [r4, r1]\n\ - mov r2, #0x2\n\ - ldsh r1, [r4, r2]\n\ - bl MapGridGetMetatileBehaviorAt\n\ - lsl r0, r0, #0x18\n\ - lsr r4, r0, #0x18\n\ - add r0, r4, #0\n\ - bl MetatileBehavior_IsSecretBaseCave\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - cmp r0, #0x1\n\ - bne ._100 @cond_branch\n\ - bl sub_80C6264\n\ - ldr r1, ._102 + 4 @ gLastFieldPokeMenuOpened\n\ - mov r0, #0x0\n\ - strb r0, [r1]\n\ - bl sub_80C639C\n\ - b ._109\n\ -._103:\n\ - .align 2, 0\n\ -._102:\n\ - .word gUnknown_0203923C\n\ - .word gLastFieldPokeMenuOpened\n\ -._100:\n\ - add r0, r4, #0\n\ - bl MetatileBehavior_IsSecretBaseTree\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - cmp r0, #0x1\n\ - bne ._104 @cond_branch\n\ - bl sub_80C6264\n\ - ldr r1, ._106 @ gLastFieldPokeMenuOpened\n\ - mov r0, #0x0\n\ - strb r0, [r1]\n\ - bl sub_80C64A8\n\ - b ._109\n\ -._107:\n\ - .align 2, 0\n\ -._106:\n\ - .word gLastFieldPokeMenuOpened\n\ -._104:\n\ - add r0, r4, #0\n\ - bl MetatileBehavior_IsSecretBaseShrub\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - cmp r0, #0x1\n\ - bne ._108 @cond_branch\n\ - bl sub_80C6264\n\ - ldr r1, ._110 @ gLastFieldPokeMenuOpened\n\ - mov r0, #0x0\n\ - strb r0, [r1]\n\ - bl sub_80C660C\n\ - b ._109\n\ -._111:\n\ - .align 2, 0\n\ -._110:\n\ - .word gLastFieldPokeMenuOpened\n\ -._108:\n\ - bl ScriptContext2_Disable\n\ -._109:\n\ - pop {r4}\n\ - pop {r0}\n\ - bx r0"); +void debug_sub_80D93F4(void) +{ + u8 metatile; + + sub_80BB63C(); + + if (gSpecialVar_Result == 1 || player_get_direction_lower_nybble() != 2) + { + 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(); + } + else if (MetatileBehavior_IsSecretBaseTree(metatile) == TRUE) + { + sub_80C6264(); + gLastFieldPokeMenuOpened = 0; + sub_80C64A8(); + } + else if (MetatileBehavior_IsSecretBaseShrub(metatile) == TRUE) + { + sub_80C6264(); + gLastFieldPokeMenuOpened = 0; + sub_80C660C(); + } + else + { + ScriptContext2_Disable(); + } } + #endif bool8 SetUpFieldMove_SecretPower(void) diff --git a/src/field/item.c b/src/field/item.c index 78f5ce12d..af05c0a21 100644 --- a/src/field/item.c +++ b/src/field/item.c @@ -8,6 +8,24 @@ #include "string_util.h" #include "strings.h" +struct Item +{ + u8 name[14]; + u16 itemId; + u16 price; + u8 holdEffect; + u8 holdEffectParam; + const u8 *description; + u8 importance; + u8 unk19; + u8 pocket; + u8 type; + ItemUseFunc fieldUseFunc; + u8 battleUsage; + ItemUseFunc battleUseFunc; + u8 secondaryId; +}; + extern u8 gUnknown_02038560; extern struct BagPocket gBagPockets[NUM_BAG_POCKETS]; @@ -49,7 +67,9 @@ void CopyItemName(u16 itemId, u8 *string) StringAppend(string, gOtherText_Berry2); } else - StringCopy(string, ItemId_GetItem(itemId)->name); + { + StringCopy(string, ItemId_GetName(itemId)); + } } //Unreferenced @@ -579,9 +599,9 @@ static u16 SanitizeItemId(u16 itemId) return itemId; } -const struct Item *ItemId_GetItem(u16 itemId) +const u8 *ItemId_GetName(u16 itemId) { - return &gItems[SanitizeItemId(itemId)]; + return gItems[SanitizeItemId(itemId)].name; } u16 ItemId_GetId(u16 itemId) @@ -640,6 +660,7 @@ u8 ItemId_GetImportance(u16 itemId) return gItems[SanitizeItemId(itemId)].importance; } +// unused u8 ItemId_GetUnknownValue(u16 itemId) { return gItems[SanitizeItemId(itemId)].unk19; diff --git a/src/field/item_menu.c b/src/field/item_menu.c index 774fdf4b2..32b14e021 100644 --- a/src/field/item_menu.c +++ b/src/field/item_menu.c @@ -289,24 +289,6 @@ static void sub_80A6618(u8); const struct YesNoFuncTable gUnknown_083C16FC = {sub_80A65AC, sub_80A6618}; -#if DEBUG -const struct {u16 item; u8 unk;} gUnknown_Debug_083EBC68[12+48] = -{ - {ITEM_POKE_BALL, 10}, - {ITEM_ULTRA_BALL, 15}, - {ITEM_GREAT_BALL, 20}, - {ITEM_MASTER_BALL, 25}, - {ITEM_ACRO_BIKE, 1 }, - {ITEM_OLD_ROD, 1 }, - {ITEM_GOOD_ROD, 1 }, - {ITEM_SUPER_ROD, 1 }, - {ITEM_POKEBLOCK_CASE, 1 }, - {ITEM_WAILMER_PAIL, 1 }, - {ITEM_ITEMFINDER, 1 }, - {ITEM_NONE, 1 }, -}; -#endif - void sub_80A34E8(void); static bool8 LoadBagGraphicsMultistep(void); static void sub_80A362C(void); @@ -393,390 +375,6 @@ static void sub_80A3134(void) DmaCopy16Defvars(3, gBGTilemapBuffers[2], (void *)(VRAM + 0x6000), 0x800); } -#if DEBUG -__attribute__((naked)) -static bool8 SetupBagMultistep(void) -{ - asm("\ - push {r4, r5, lr}\n\ - add sp, sp, #0xfffffffc\n\ - ldr r0, ._5 @ gMain\n\ - ldr r1, ._5 + 4 @ 0x43c\n\ - add r0, r0, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, #0x10\n\ - bls ._3 @cond_branch\n\ - b ._66\n\ -._3:\n\ - lsl r0, r0, #0x2\n\ - ldr r1, ._5 + 8 @ \n\ - add r0, r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ -._6:\n\ - .align 2, 0\n\ -._5:\n\ - .word gMain\n\ - .word 0x43c\n\ - .word ._7\n\ -._7:\n\ - .word ._8\n\ - .word ._9\n\ - .word ._10\n\ - .word ._11\n\ - .word ._12\n\ - .word ._13\n\ - .word ._14\n\ - .word ._15\n\ - .word ._16\n\ - .word ._17\n\ - .word ._18\n\ - .word ._19\n\ - .word ._20\n\ - .word ._21\n\ - .word ._22\n\ - .word ._23\n\ - .word ._24\n\ -._8:\n\ - bl ClearVideoCallbacks\n\ - bl sub_80A34E8\n\ - b ._61\n\ -._9:\n\ - bl ScanlineEffect_Stop\n\ - ldr r1, ._27 @ gMain\n\ - ldr r0, ._27 + 4 @ 0x43c\n\ - add r1, r1, r0\n\ - b ._62\n\ -._28:\n\ - .align 2, 0\n\ -._27:\n\ - .word gMain\n\ - .word 0x43c\n\ -._10:\n\ - bl gpu_pal_allocator_reset__manage_upper_four\n\ - b ._61\n\ -._11:\n\ - bl ClearBGTilemapBuffers\n\ - ldr r0, ._31 @ \n\ - ldr r1, ._31 + 4 @ \n\ - add r0, r0, r1\n\ - mov r1, #0x0\n\ - strb r1, [r0]\n\ - b ._61\n\ -._32:\n\ - .align 2, 0\n\ -._31:\n\ - .word +0x2000000\n\ - .word 0x1ffff\n\ -._12:\n\ - bl ResetPaletteFade\n\ - ldr r2, ._34 @ gPaletteFade\n\ - ldrb r0, [r2, #0x8]\n\ - mov r1, #0x80\n\ - orr r0, r0, r1\n\ - strb r0, [r2, #0x8]\n\ - ldr r1, ._34 + 4 @ gMain\n\ - ldr r0, ._34 + 8 @ 0x43c\n\ - add r1, r1, r0\n\ - b ._62\n\ -._35:\n\ - .align 2, 0\n\ -._34:\n\ - .word gPaletteFade\n\ - .word gMain\n\ - .word 0x43c\n\ -._13:\n\ - bl ResetSpriteData\n\ - b ._61\n\ -._14:\n\ - bl LoadBagGraphicsMultistep\n\ - lsl r0, r0, #0x18\n\ - cmp r0, #0\n\ - bne ._37 @cond_branch\n\ - b ._66\n\ -._37:\n\ - ldr r1, ._40 @ gMain\n\ - ldr r0, ._40 + 4 @ 0x43c\n\ - add r1, r1, r0\n\ - b ._62\n\ -._41:\n\ - .align 2, 0\n\ -._40:\n\ - .word gMain\n\ - .word 0x43c\n\ -._15:\n\ - ldr r0, ._43 @ gWindowTemplate_81E6DFC\n\ - bl Text_LoadWindowTemplate\n\ - b ._61\n\ -._44:\n\ - .align 2, 0\n\ -._43:\n\ - .word gWindowTemplate_81E6DFC\n\ -._16:\n\ - ldr r0, ._46 @ gWindowTemplate_81E6DFC\n\ - bl MultistepInitMenuWindowBegin\n\ - ldr r1, ._46 + 4 @ gMain\n\ - ldr r0, ._46 + 8 @ 0x43c\n\ - add r1, r1, r0\n\ - b ._62\n\ -._47:\n\ - .align 2, 0\n\ -._46:\n\ - .word gWindowTemplate_81E6DFC\n\ - .word gMain\n\ - .word 0x43c\n\ -._17:\n\ - bl MultistepInitMenuWindowContinue\n\ - cmp r0, #0\n\ - bne ._48 @cond_branch\n\ - b ._66\n\ -._48:\n\ - b ._61\n\ -._18:\n\ - bl ClearVerticalScrollIndicatorPalettes\n\ - bl LoadScrollIndicatorPalette\n\ - mov r0, #0x0\n\ - mov r1, #0xac\n\ - mov r2, #0xc\n\ - bl CreateVerticalScrollIndicators\n\ - mov r0, #0x1\n\ - mov r1, #0xac\n\ - mov r2, #0x94\n\ - bl CreateVerticalScrollIndicators\n\ - mov r0, #0x2\n\ - mov r1, #0x1c\n\ - mov r2, #0x58\n\ - bl CreateVerticalScrollIndicators\n\ - mov r0, #0x3\n\ - mov r1, #0x64\n\ - mov r2, #0x58\n\ - bl CreateVerticalScrollIndicators\n\ - mov r0, #0x0\n\ - mov r1, #0x2\n\ - bl SetVerticalScrollIndicatorPriority\n\ - mov r0, #0x1\n\ - mov r1, #0x2\n\ - bl SetVerticalScrollIndicatorPriority\n\ - mov r0, #0x2\n\ - mov r1, #0x2\n\ - bl SetVerticalScrollIndicatorPriority\n\ - mov r0, #0x3\n\ - mov r1, #0x2\n\ - bl SetVerticalScrollIndicatorPriority\n\ - ldr r0, ._53 @ sReturnLocation\n\ - ldrb r0, [r0]\n\ - sub r0, r0, #0x4\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - cmp r0, #0x1\n\ - bhi ._51 @cond_branch\n\ - mov r0, #0x2\n\ - mov r1, #0x1\n\ - bl SetVerticalScrollIndicators\n\ - mov r0, #0x3\n\ - mov r1, #0x1\n\ - bl SetVerticalScrollIndicators\n\ -._51:\n\ - ldr r1, ._53 + 4 @ gMain\n\ - ldr r0, ._53 + 8 @ 0x43c\n\ - add r1, r1, r0\n\ - b ._62\n\ -._54:\n\ - .align 2, 0\n\ -._53:\n\ - .word sReturnLocation\n\ - .word gMain\n\ - .word 0x43c\n\ -._19:\n\ - ldr r1, ._56 @ gUnknown_0203855A\n\ - mov r0, #0x10\n\ - strb r0, [r1]\n\ - ldr r4, ._56 + 4 @ gBGTilemapBuffers\n\ - ldr r5, ._56 + 8 @ sCurrentBagPocket\n\ - ldrb r1, [r5]\n\ - add r1, r1, #0x1\n\ - lsl r1, r1, #0x18\n\ - lsr r1, r1, #0x18\n\ - add r0, r4, #0\n\ - bl sub_80A39B8\n\ - ldrb r1, [r5]\n\ - add r0, r4, #0\n\ - bl DrawPocketIndicatorDots\n\ - bl UpdateAllBagPockets\n\ - ldr r4, ._56 + 12 @ gBagPockets\n\ - ldr r0, [r4, #0x10]\n\ - ldr r1, [r4, #0x14]\n\ - bl SortItemSlots\n\ - ldr r0, [r4, #0x18]\n\ - ldr r1, [r4, #0x1c]\n\ - bl SortItemSlots\n\ - bl sub_80A3D40\n\ - ldr r1, ._56 + 16 @ gCurrentBagPocketItemSlots\n\ - mov r0, #0x0\n\ - ldsb r0, [r5, r0]\n\ - lsl r0, r0, #0x3\n\ - add r0, r0, r4\n\ - ldr r0, [r0]\n\ - str r0, [r1]\n\ - bl sub_80A362C\n\ - b ._61\n\ -._57:\n\ - .align 2, 0\n\ -._56:\n\ - .word gUnknown_0203855A\n\ - .word gBGTilemapBuffers+0x1000\n\ - .word sCurrentBagPocket\n\ - .word gBagPockets\n\ - .word gCurrentBagPocketItemSlots\n\ -._20:\n\ - ldr r0, ._59 @ 0xffff\n\ - mov r1, #0x0\n\ - mov r2, #0x7\n\ - bl sub_80A48E8\n\ - ldr r1, ._59 + 4 @ gBagPocketScrollStates\n\ - ldr r4, ._59 + 8 @ sCurrentBagPocket\n\ - mov r0, #0x0\n\ - ldsb r0, [r4, r0]\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldrb r1, [r0, #0x1]\n\ - ldrb r0, [r0]\n\ - add r1, r1, r0\n\ - ldr r0, ._59 + 12 @ gCurrentBagPocketItemSlots\n\ - ldr r0, [r0]\n\ - lsl r1, r1, #0x2\n\ - add r1, r1, r0\n\ - mov r2, #0x0\n\ - ldsh r0, [r1, r2]\n\ - bl ItemListMenu_InitDescription\n\ - bl ItemListMenu_InitMenu\n\ - ldr r1, ._59 + 16 @ gUnknown_0203855B\n\ - ldrb r0, [r4]\n\ - add r0, r0, #0x1\n\ - strb r0, [r1]\n\ - ldr r1, ._59 + 20 @ gUnknown_0203855C\n\ - mov r0, #0x0\n\ - strb r0, [r1]\n\ - ldr r1, ._59 + 24 @ gMain\n\ - ldr r0, ._59 + 28 @ 0x43c\n\ - add r1, r1, r0\n\ - b ._62\n\ -._60:\n\ - .align 2, 0\n\ -._59:\n\ - .word 0xffff\n\ - .word gBagPocketScrollStates\n\ - .word sCurrentBagPocket\n\ - .word gCurrentBagPocketItemSlots\n\ - .word gUnknown_0203855B\n\ - .word gUnknown_0203855C\n\ - .word gMain\n\ - .word 0x43c\n\ -._21:\n\ - bl CreateBagSprite\n\ - mov r0, #0x0\n\ - bl CreateBagPokeballSprite\n\ - bl sub_80A3740\n\ - b ._61\n\ -._22:\n\ - ldr r3, ._63 @ 0x4000208\n\ - ldrh r2, [r3]\n\ - mov r0, #0x0\n\ - strh r0, [r3]\n\ - ldr r4, ._63 + 4 @ 0x4000200\n\ - ldrh r0, [r4]\n\ - mov r1, #0x1\n\ - orr r0, r0, r1\n\ - strh r0, [r4]\n\ - strh r2, [r3]\n\ - ldr r2, ._63 + 8 @ 0x4000004\n\ - ldrh r0, [r2]\n\ - mov r1, #0x8\n\ - orr r0, r0, r1\n\ - strh r0, [r2]\n\ - mov r0, #0x1\n\ - neg r0, r0\n\ - mov r1, #0x0\n\ - str r1, [sp]\n\ - mov r2, #0x10\n\ - mov r3, #0x0\n\ - bl BeginNormalPaletteFade\n\ - ldr r2, ._63 + 12 @ gPaletteFade\n\ - ldrb r1, [r2, #0x8]\n\ - mov r0, #0x7f\n\ - and r0, r0, r1\n\ - strb r0, [r2, #0x8]\n\ - ldr r1, ._63 + 16 @ gMain\n\ - ldr r0, ._63 + 20 @ 0x43c\n\ - add r1, r1, r0\n\ - b ._62\n\ -._64:\n\ - .align 2, 0\n\ -._63:\n\ - .word 0x4000208\n\ - .word 0x4000200\n\ - .word 0x4000004\n\ - .word gPaletteFade\n\ - .word gMain\n\ - .word 0x43c\n\ -._23:\n\ - bl sub_8055870\n\ - cmp r0, #0x1\n\ - beq ._66 @cond_branch\n\ -._61:\n\ - ldr r1, ._67 @ gMain\n\ - ldr r2, ._67 + 4 @ 0x43c\n\ - add r1, r1, r2\n\ -._62:\n\ - ldrb r0, [r1]\n\ - add r0, r0, #0x1\n\ - strb r0, [r1]\n\ - b ._66\n\ -._68:\n\ - .align 2, 0\n\ -._67:\n\ - .word gMain\n\ - .word 0x43c\n\ -._24:\n\ - ldr r0, ._71 @ sub_80A3134\n\ - bl SetVBlankCallback\n\ - ldr r0, ._71 + 4 @ sub_80A3118\n\ - bl SetMainCallback2\n\ - bl sub_80A751C\n\ - bl sub_80A7630\n\ - bl sub_80A770C\n\ - bl sub_80A7828\n\ - bl sub_80A78B8\n\ - ldr r0, ._71 + 8 @ gLinkOpen\n\ - ldrb r0, [r0]\n\ - cmp r0, #0x1\n\ - bne ._69 @cond_branch\n\ - ldr r0, ._71 + 12 @ 0x600f5e0\n\ - mov r1, #0x80\n\ - lsl r1, r1, #0x8\n\ - ldr r2, ._71 + 16 @ 0x600f800\n\ - mov r3, #0x0\n\ - bl debug_sub_8008218\n\ -._69:\n\ - mov r0, #0x1\n\ - b ._70\n\ -._72:\n\ - .align 2, 0\n\ -._71:\n\ - .word sub_80A3134+1\n\ - .word sub_80A3118+1\n\ - .word gLinkOpen\n\ - .word 0x600f5e0\n\ - .word 0x600f800\n\ -._66:\n\ - mov r0, #0x0\n\ -._70:\n\ - add sp, sp, #0x4\n\ - pop {r4, r5}\n\ - pop {r1}\n\ - bx r1"); -} -#else static bool8 SetupBagMultistep(void) { u32 index; @@ -897,11 +495,14 @@ static bool8 SetupBagMultistep(void) sub_80A770C(); sub_80A7828(); sub_80A78B8(); +#if DEBUG + if (gLinkOpen == TRUE) + debug_sub_8008218((void *)(VRAM + 0xF5E0), 0x8000, (void *)(VRAM + 0xF800), 0); +#endif return TRUE; } return FALSE; } -#endif static bool8 sub_80A34B4(void) { @@ -1029,76 +630,42 @@ void ClearBag(void) } #if DEBUG -__attribute__((naked)) -void debug_sub_80A3714() -{ - asm("\ - push {r4, r5, r6, lr}\n\ - add sp, sp, #0xfffffff4\n\ - mov r5, #0x0\n\ - ldr r2, ._138 @ gUnknown_Debug_083EBC68\n\ - mov r1, #0x0\n\ -._134:\n\ - lsl r0, r5, #0x1\n\ - add r0, r0, sp\n\ - strh r1, [r0]\n\ - add r0, r5, #1\n\ - lsl r0, r0, #0x10\n\ - lsr r5, r0, #0x10\n\ - cmp r5, #0x4\n\ - bls ._134 @cond_branch\n\ - mov r5, #0x0\n\ - ldrh r0, [r2]\n\ - cmp r0, #0\n\ - beq ._136 @cond_branch\n\ - add r6, r2, #0\n\ -._137:\n\ - lsl r4, r5, #0x2\n\ - add r4, r4, r6\n\ - ldrh r0, [r4]\n\ - bl ItemId_GetPocket\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x8\n\ - ldr r1, ._138 + 4 @ 0xffff0000\n\ - add r0, r0, r1\n\ - lsr r0, r0, #0x10\n\ - ldr r1, ._138 + 8 @ gBagPockets\n\ - lsl r2, r0, #0x3\n\ - add r2, r2, r1\n\ - lsl r0, r0, #0x1\n\ - mov r1, sp\n\ - add r3, r1, r0\n\ - ldrh r1, [r3]\n\ - ldr r0, [r2]\n\ - lsl r1, r1, #0x2\n\ - add r1, r1, r0\n\ - ldr r0, [r4]\n\ - str r0, [r1]\n\ - ldrh r0, [r3]\n\ - add r0, r0, #0x1\n\ - strh r0, [r3]\n\ - add r0, r5, #1\n\ - lsl r0, r0, #0x10\n\ - lsr r5, r0, #0x10\n\ - cmp r5, #0x3b\n\ - bhi ._136 @cond_branch\n\ - lsl r0, r5, #0x2\n\ - add r0, r0, r6\n\ - ldrh r0, [r0]\n\ - cmp r0, #0\n\ - bne ._137 @cond_branch\n\ -._136:\n\ - add sp, sp, #0xc\n\ - pop {r4, r5, r6}\n\ - pop {r0}\n\ - bx r0\n\ -._139:\n\ - .align 2, 0\n\ -._138:\n\ - .word gUnknown_Debug_083EBC68\n\ - .word 0xffff0000\n\ - .word gBagPockets"); + +const struct ItemSlot gUnknown_Debug_083EBC68[60] = +{ + {ITEM_POKE_BALL, 10}, + {ITEM_ULTRA_BALL, 15}, + {ITEM_GREAT_BALL, 20}, + {ITEM_MASTER_BALL, 25}, + {ITEM_ACRO_BIKE, 1 }, + {ITEM_OLD_ROD, 1 }, + {ITEM_GOOD_ROD, 1 }, + {ITEM_SUPER_ROD, 1 }, + {ITEM_POKEBLOCK_CASE, 1 }, + {ITEM_WAILMER_PAIL, 1 }, + {ITEM_ITEMFINDER, 1 }, + {ITEM_NONE, 1 }, +}; + +void debug_sub_80A3714(void) +{ + u16 arr[5]; + u16 i; + + for (i = 0; i < 5; i++) + arr[i] = 0; + for (i = 0; i < ARRAY_COUNT(gUnknown_Debug_083EBC68); i++) + { + u16 pocket; + + if (gUnknown_Debug_083EBC68[i].itemId == ITEM_NONE) + break; + pocket = ItemId_GetPocket(gUnknown_Debug_083EBC68[i].itemId) - 1; + gBagPockets[pocket].itemSlots[arr[pocket]] = gUnknown_Debug_083EBC68[i]; + arr[pocket]++; + } } + #endif static void sub_80A3740(void) @@ -1612,7 +1179,7 @@ static void sub_80A4380(u16 a, int b, int c, int d) r5 = i * 2 + 2; text = gStringVar1; text = sub_80A425C(a, text, i); - text = sub_8072C74(text, ItemId_GetItem(gCurrentBagPocketItemSlots[r4].itemId)->name, 0x66, 0); + text = sub_8072C74(text, ItemId_GetName(gCurrentBagPocketItemSlots[r4].itemId), 0x66, 0); *text++ = CHAR_MULT_SIGN; sub_8072C14(text, gCurrentBagPocketItemSlots[r4].quantity, 0x78, 1); Menu_PrintText(gStringVar1, 14, r5); @@ -1636,9 +1203,9 @@ static void sub_80A444C(u16 a, int b, int c, int d) text = gStringVar1; text = sub_80A425C(a, text, i); #if ENGLISH - sub_8072C74(text, ItemId_GetItem(gCurrentBagPocketItemSlots[r4].itemId)->name, 0x60, 0); + sub_8072C74(text, ItemId_GetName(gCurrentBagPocketItemSlots[r4].itemId), 0x60, 0); #else - sub_8072C74(text, ItemId_GetItem(gCurrentBagPocketItemSlots[r4].itemId)->name, 0x63, 0); + sub_8072C74(text, ItemId_GetName(gCurrentBagPocketItemSlots[r4].itemId), 0x63, 0); #endif Menu_PrintText(gStringVar1, 14, r5); if (gUnknown_02038558 != 0) @@ -4040,49 +3607,16 @@ static void sub_80A73FC(void) MenuCursor_Destroy814AD44(); } -#if DEBUG -__attribute__((naked)) -static void sub_80A740C(void) -{ - asm("\ - push {lr}\n\ - add sp, sp, #0xfffffffc\n\ - bl sub_80A75E4\n\ - bl sub_80A7768\n\ - bl sub_80A7420\n\ - ldr r0, ._931 @ gLinkOpen\n\ - ldrb r0, [r0]\n\ - cmp r0, #0x1\n\ - bne ._930 @cond_branch\n\ - ldr r0, ._931 + 4 @ gLink\n\ - ldr r1, ._931 + 8 @ 0xfbd\n\ - add r0, r0, r1\n\ - ldrb r0, [r0]\n\ - mov r1, #0x0\n\ - str r1, [sp]\n\ - mov r1, #0x1\n\ - mov r2, #0x1\n\ - mov r3, #0x2\n\ - bl debug_sub_8008264\n\ -._930:\n\ - add sp, sp, #0x4\n\ - pop {r0}\n\ - bx r0\n\ -._932:\n\ - .align 2, 0\n\ -._931:\n\ - .word gLinkOpen\n\ - .word gLink\n\ - .word 0xfbd"); -} -#else static void sub_80A740C(void) { sub_80A75E4(); sub_80A7768(); sub_80A7420(); -} +#if DEBUG + if (gLinkOpen == TRUE) + debug_sub_8008264(gLink.recvQueue.count, 1, 1, 2, 0); #endif +} static void sub_80A7420(void) { diff --git a/src/field/mauville_man.c b/src/field/mauville_man.c index b42c50513..a68d5071d 100644 --- a/src/field/mauville_man.c +++ b/src/field/mauville_man.c @@ -251,83 +251,34 @@ void SetupMauvilleOldMan(void) } #if DEBUG -__attribute__((naked)) -void debug_sub_810B32C() +void debug_sub_810B32C(u8 a) { - asm( - " push {r4, lr}\n" - " add sp, sp, #0xfffffff8\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " cmp r0, #0x4\n" - " bhi ._37 @cond_branch\n" - " lsl r0, r0, #0x2\n" - " ldr r1, ._23 @ \n" - " add r0, r0, r1\n" - " ldr r0, [r0]\n" - " mov pc, r0\n" - "._24:\n" - " .align 2, 0\n" - "._23:\n" - " .word ._22\n" - "._22:\n" - " .word ._25\n" - " .word ._26\n" - " .word ._27\n" - " .word ._28\n" - " .word ._29\n" - "._25:\n" - " bl SetupBard\n" - " b ._37\n" - "._26:\n" - " mov r2, #0x0\n" - " ldr r3, ._34 @ gSaveBlock1\n" - "._31:\n" - " mov r0, sp\n" - " add r1, r0, r2\n" - " add r0, r2, r3\n" - " ldrb r0, [r0]\n" - " strb r0, [r1]\n" - " add r0, r2, #1\n" - " lsl r0, r0, #0x18\n" - " lsr r2, r0, #0x18\n" - " cmp r2, #0x7\n" - " bls ._31 @cond_branch\n" - " bl SetupHipster\n" - " mov r2, #0x0\n" - " ldr r3, ._34 @ gSaveBlock1\n" - "._32:\n" - " add r1, r2, r3\n" - " mov r4, sp\n" - " add r0, r4, r2\n" - " ldrb r0, [r0]\n" - " strb r0, [r1]\n" - " add r0, r2, #1\n" - " lsl r0, r0, #0x18\n" - " lsr r2, r0, #0x18\n" - " cmp r2, #0x7\n" - " bls ._32 @cond_branch\n" - " b ._37\n" - "._35:\n" - " .align 2, 0\n" - "._34:\n" - " .word gSaveBlock1+0x2d8c\n" - "._27:\n" - " bl SetupTrader\n" - " b ._37\n" - "._28:\n" - " bl SetupStoryteller\n" - " b ._37\n" - "._29:\n" - " bl SetupGiddy\n" - "._37:\n" - " bl sub_80F83D0\n" - " add sp, sp, #0x8\n" - " pop {r4}\n" - " pop {r0}\n" - " bx r0\n" - "\n" - ); + u8 i; + u8 savedArr[8]; + + switch (a) + { + case 0: + SetupBard(); + break; + case 1: + for (i = 0; i < 8; i++) + savedArr[i] = gSaveBlock1.unk2D8C[i]; + SetupHipster(); + for (i = 0; i < 8; i++) + gSaveBlock1.unk2D8C[i] = savedArr[i]; + break; + case 2: + SetupTrader(); + break; + case 3: + SetupStoryteller(); + break; + case 4: + SetupGiddy(); + break; + } + sub_80F83D0(); } #endif diff --git a/src/field/overworld.c b/src/field/overworld.c index 8ca8aeea9..6376aa1af 100644 --- a/src/field/overworld.c +++ b/src/field/overworld.c @@ -2233,7 +2233,7 @@ u16 sub_80554E4(u32 a1) return 23; } -u32 sub_80554F8(void) +s32 sub_80554F8(void) { if (sub_8054FC0(0x83) == TRUE) return 2; diff --git a/src/field/party_menu.c b/src/field/party_menu.c index 66e7e2319..9caaa05b9 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -1,4 +1,8 @@ #include "global.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/songs.h" +#include "constants/species.h" #include "party_menu.h" #include "battle.h" #include "battle_interface.h" @@ -11,12 +15,11 @@ #include "item.h" #include "item_use.h" #include "item_menu.h" -#include "constants/items.h" +#include "link.h" #include "mail_data.h" #include "main.h" #include "menu.h" #include "menu_helpers.h" -#include "constants/moves.h" #include "palette.h" #include "pokemon.h" #include "pokemon_icon.h" @@ -25,9 +28,7 @@ #include "pokemon_summary_screen.h" #include "rom_8077ABC.h" #include "rom_8094928.h" -#include "constants/songs.h" #include "sound.h" -#include "constants/species.h" #include "sprite.h" #include "string_util.h" #include "strings.h" @@ -397,7 +398,8 @@ static const u16 PartyMonOAMSettings_RightColumn[] = { }; // Controls where and how the mons' text appears in the party menu screen (nickname, HP, and level). -static struct PartyMonTextSettingsStruct const PartyMonTextSettings[4][6] = { +static struct PartyMonTextSettingsStruct const PartyMonTextSettings[4][6] = +{ { // PARTY_MENU_LAYOUT_STANDARD { 1, 4, PartyMonOAMSettings_LeftColumn}, {12, 1, PartyMonOAMSettings_RightColumn}, @@ -432,7 +434,8 @@ static struct PartyMonTextSettingsStruct const PartyMonTextSettings[4][6] = { }, }; -static const struct PartyMenuHandlersStruct PartyMenuHandlers[] = { +static const struct PartyMenuHandlersStruct PartyMenuHandlers[] = +{ {HandleDefaultPartyMenu, SetupDefaultPartyMenu, 0}, // PARTY_MENU_TYPE_STANDARD {HandleBattlePartyMenu, SetUpBattlePartyMenu, 0}, // PARTY_MENU_TYPE_BATTLE {HandleSelectPartyMenu, SetupContestPartyMenu, 0}, // PARTY_MENU_TYPE_CONTEST @@ -493,71 +496,6 @@ extern const u8 gStatusPal_Icons[]; #define WINDOW_RIGHT (29) #endif -#if DEBUG -__attribute__((naked)) -void CB2_PartyMenuMain(void) -{ - asm("\ - push {r4, r5, r6, lr}\n\ - add sp, sp, #0xfffffffc\n\ - bl AnimateSprites\n\ - bl BuildOamBuffer\n\ - ldr r0, ._3 @ gPartyMenuType\n\ - ldrb r1, [r0]\n\ - lsl r0, r1, #0x1\n\ - add r0, r0, r1\n\ - lsl r0, r0, #0x4\n\ - ldr r1, ._3 + 4 @ PartyMonTextSettings\n\ - add r5, r0, r1\n\ - mov r6, #0x0\n\ -._1:\n\ - ldrb r0, [r5]\n\ - lsl r0, r0, #0x3\n\ - ldrb r1, [r5, #0x1]\n\ - lsl r1, r1, #0x3\n\ - ldr r2, [r5, #0x4]\n\ - lsl r3, r6, #0x5\n\ - mov r4, #0x80\n\ - lsl r4, r4, #0x2\n\ - orr r3, r3, r4\n\ - str r3, [sp]\n\ - mov r3, #0x0\n\ - bl DrawPartyMenuMonText\n\ - add r5, r5, #0x8\n\ - add r6, r6, #0x1\n\ - cmp r6, #0x5\n\ - ble ._1 @cond_branch\n\ - bl RunTasks\n\ - bl UpdatePaletteFade\n\ - ldr r0, ._3 + 8 @ gLinkOpen\n\ - ldrb r0, [r0]\n\ - cmp r0, #0x1\n\ - bne ._2 @cond_branch\n\ - ldr r0, ._3 + 12 @ gLink\n\ - ldr r1, ._3 + 16 @ 0xfbd\n\ - add r0, r0, r1\n\ - ldrb r0, [r0]\n\ - mov r1, #0x2\n\ - str r1, [sp]\n\ - mov r1, #0x1\n\ - mov r2, #0x1\n\ - mov r3, #0x2\n\ - bl debug_sub_8008264\n\ -._2:\n\ - add sp, sp, #0x4\n\ - pop {r4, r5, r6}\n\ - pop {r0}\n\ - bx r0\n\ -._4:\n\ - .align 2, 0\n\ -._3:\n\ - .word gPartyMenuType\n\ - .word PartyMonTextSettings\n\ - .word gLinkOpen\n\ - .word gLink\n\ - .word 0xfbd"); -} -#else void CB2_PartyMenuMain(void) { const struct PartyMonTextSettingsStruct *textSettings; @@ -581,8 +519,12 @@ void CB2_PartyMenuMain(void) RunTasks(); UpdatePaletteFade(); -} + +#if DEBUG + if (gLinkOpen == TRUE) + debug_sub_8008264(gLink.recvQueue.count, 1, 1, 2, 2); #endif +} void VBlankCB_PartyMenu(void) { @@ -621,14 +563,16 @@ bool8 SetupDefaultPartyMenu(void) switch (ewram1B000_alt.setupState) { case 0: - if (ewram1B000_alt.monIndex < gPlayerPartyCount) { + if (ewram1B000_alt.monIndex < gPlayerPartyCount) + { TryCreatePartyMenuMonIcon(ewram1B000_alt.menuHandlerTaskId, ewram1B000_alt.monIndex, &gPlayerParty[ewram1B000_alt.monIndex]); ewram1B000_alt.monIndex++; - } else { + } + else + { ewram1B000_alt.monIndex = 0; ewram1B000_alt.setupState++; } - break; case 1: LoadHeldItemIconGraphics(); @@ -648,7 +592,6 @@ bool8 SetupDefaultPartyMenu(void) ewram1B000_alt.monIndex = 0; ewram1B000_alt.setupState++; } - break; case 4: PartyMenuPrintMonsLevelOrStatus(); @@ -687,425 +630,6 @@ bool8 SetupDefaultPartyMenu(void) return FALSE; } -#if DEBUG -__attribute__((naked)) -bool8 InitPartyMenu(void) -{ - asm("\ - push {r4, r5, r6, r7, lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - add sp, sp, #0xfffffff4\n\ - ldr r0, ._55 @ gMain\n\ - ldr r1, ._55 + 4 @ 0x43c\n\ - add r0, r0, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, #0x11\n\ - bls ._53 @cond_branch\n\ - b ._125\n\ -._53:\n\ - lsl r0, r0, #0x2\n\ - ldr r1, ._55 + 8 @ \n\ - add r0, r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ -._56:\n\ - .align 2, 0\n\ -._55:\n\ - .word gMain\n\ - .word 0x43c\n\ - .word ._57\n\ -._57:\n\ - .word ._58\n\ - .word ._59\n\ - .word ._60\n\ - .word ._61\n\ - .word ._62\n\ - .word ._63\n\ - .word ._64\n\ - .word ._65\n\ - .word ._66\n\ - .word ._67\n\ - .word ._68\n\ - .word ._69\n\ - .word ._70\n\ - .word ._71\n\ - .word ._72\n\ - .word ._73\n\ - .word ._74\n\ - .word ._75\n\ -._58:\n\ - mov r0, #0x0\n\ - bl SetVBlankCallback\n\ - mov r3, #0xc0\n\ - lsl r3, r3, #0x13\n\ - mov r4, #0xc0\n\ - lsl r4, r4, #0x9\n\ - add r2, sp, #0x8\n\ - mov r8, r2\n\ - add r2, sp, #0x4\n\ - mov r6, #0x0\n\ - ldr r1, ._78 @ 0x40000d4\n\ - mov r5, #0x80\n\ - lsl r5, r5, #0x5\n\ - ldr r7, ._78 + 4 @ 0x81000800\n\ - mov r0, #0x81\n\ - lsl r0, r0, #0x18\n\ - mov ip, r0\n\ -._76:\n\ - strh r6, [r2]\n\ - add r0, sp, #0x4\n\ - str r0, [r1]\n\ - str r3, [r1, #0x4]\n\ - str r7, [r1, #0x8]\n\ - ldr r0, [r1, #0x8]\n\ - add r3, r3, r5\n\ - sub r4, r4, r5\n\ - cmp r4, r5\n\ - bhi ._76 @cond_branch\n\ - strh r6, [r2]\n\ - add r2, sp, #0x4\n\ - str r2, [r1]\n\ - str r3, [r1, #0x4]\n\ - lsr r0, r4, #0x1\n\ - mov r3, ip\n\ - orr r0, r0, r3\n\ - str r0, [r1, #0x8]\n\ - ldr r0, [r1, #0x8]\n\ - mov r0, #0xe0\n\ - lsl r0, r0, #0x13\n\ - mov r3, #0x80\n\ - lsl r3, r3, #0x3\n\ - mov r4, #0x0\n\ - str r4, [sp, #0x8]\n\ - ldr r2, ._78 @ 0x40000d4\n\ - mov r1, r8\n\ - str r1, [r2]\n\ - str r0, [r2, #0x4]\n\ - lsr r0, r3, #0x2\n\ - mov r1, #0x85\n\ - lsl r1, r1, #0x18\n\ - orr r0, r0, r1\n\ - str r0, [r2, #0x8]\n\ - ldr r0, [r2, #0x8]\n\ - mov r1, #0xa0\n\ - lsl r1, r1, #0x13\n\ - add r0, sp, #0x4\n\ - strh r4, [r0]\n\ - str r0, [r2]\n\ - str r1, [r2, #0x4]\n\ - lsr r3, r3, #0x1\n\ - mov r0, #0x81\n\ - lsl r0, r0, #0x18\n\ - orr r3, r3, r0\n\ - str r3, [r2, #0x8]\n\ - ldr r0, [r2, #0x8]\n\ - ldr r2, ._78 + 8 @ gPaletteFade\n\ - ldrb r0, [r2, #0x8]\n\ - mov r1, #0x80\n\ - orr r0, r0, r1\n\ - strb r0, [r2, #0x8]\n\ - ldr r1, ._78 + 12 @ gMain\n\ - ldr r2, ._78 + 16 @ 0x43c\n\ - add r1, r1, r2\n\ - b ._122\n\ -._79:\n\ - .align 2, 0\n\ -._78:\n\ - .word 0x40000d4\n\ - .word 0x81000800\n\ - .word gPaletteFade\n\ - .word gMain\n\ - .word 0x43c\n\ -._59:\n\ - bl ScanlineEffect_Stop\n\ - b ._115\n\ -._60:\n\ - bl sub_806B4A8\n\ - ldr r1, ._82 @ \n\ - mov r2, #0x99\n\ - lsl r2, r2, #0x2\n\ - add r0, r1, r2\n\ - mov r2, #0x0\n\ - strh r2, [r0]\n\ - ldr r3, ._82 + 4 @ \n\ - add r0, r1, r3\n\ - strh r2, [r0]\n\ - mov r0, #0x9a\n\ - lsl r0, r0, #0x2\n\ - add r1, r1, r0\n\ - strh r2, [r1]\n\ - ldr r1, ._82 + 8 @ \n\ - ldr r2, ._82 + 12 @ \n\ - add r1, r1, r2\n\ - b ._122\n\ -._83:\n\ - .align 2, 0\n\ -._82:\n\ - .word +0x201b000\n\ - .word 0x266\n\ - .word gMain\n\ - .word 0x43c\n\ -._61:\n\ - bl ResetSpriteData\n\ - b ._115\n\ -._62:\n\ - ldr r0, ._88 @ \n\ - mov r1, #0x96\n\ - lsl r1, r1, #0x2\n\ - add r0, r0, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, #0x1\n\ - beq ._86 @cond_branch\n\ - cmp r0, #0x5\n\ - beq ._86 @cond_branch\n\ - bl ResetTasks\n\ -._86:\n\ - ldr r1, ._88 + 4 @ \n\ - ldr r2, ._88 + 8 @ \n\ - add r1, r1, r2\n\ - b ._122\n\ -._89:\n\ - .align 2, 0\n\ -._88:\n\ - .word +0x201b000\n\ - .word gMain\n\ - .word 0x43c\n\ -._63:\n\ - bl FreeAllSpritePalettes\n\ - b ._115\n\ -._64:\n\ - ldr r4, ._92 @ \n\ - mov r1, #0x97\n\ - lsl r1, r1, #0x2\n\ - add r0, r4, r1\n\ - ldr r0, [r0]\n\ - mov r1, #0x0\n\ - bl CreateTask\n\ - mov r2, #0x98\n\ - lsl r2, r2, #0x2\n\ - add r1, r4, r2\n\ - strb r0, [r1]\n\ - b ._115\n\ -._93:\n\ - .align 2, 0\n\ -._92:\n\ - .word +0x201b000\n\ -._65:\n\ - ldr r0, ._95 @ gWindowTemplate_81E6C90\n\ - bl Text_LoadWindowTemplate\n\ - ldr r1, ._95 + 4 @ gMain\n\ - ldr r0, ._95 + 8 @ 0x43c\n\ - add r1, r1, r0\n\ - b ._122\n\ -._96:\n\ - .align 2, 0\n\ -._95:\n\ - .word gWindowTemplate_81E6C90\n\ - .word gMain\n\ - .word 0x43c\n\ -._66:\n\ - ldr r4, ._98 @ gUnknown_03004210\n\ - ldr r1, ._98 + 4 @ gWindowTemplate_81E6C90\n\ - add r0, r4, #0\n\ - bl Text_InitWindowWithTemplate\n\ - add r0, r4, #0\n\ - mov r1, #0x1\n\ - bl MultistepInitWindowTileData\n\ - ldr r1, ._98 + 8 @ gMain\n\ - ldr r2, ._98 + 12 @ 0x43c\n\ - add r1, r1, r2\n\ - b ._122\n\ -._99:\n\ - .align 2, 0\n\ -._98:\n\ - .word gUnknown_03004210\n\ - .word gWindowTemplate_81E6C90\n\ - .word gMain\n\ - .word 0x43c\n\ -._67:\n\ - bl MultistepLoadFont\n\ - cmp r0, #0\n\ - bne ._100 @cond_branch\n\ - b ._125\n\ -._100:\n\ - ldr r0, ._103 @ \n\ - mov r3, #0x99\n\ - lsl r3, r3, #0x2\n\ - add r0, r0, r3\n\ - mov r1, #0x1\n\ - strh r1, [r0]\n\ - ldr r1, ._103 + 4 @ \n\ - ldr r0, ._103 + 8 @ \n\ - add r1, r1, r0\n\ - b ._122\n\ -._104:\n\ - .align 2, 0\n\ -._103:\n\ - .word +0x201b000\n\ - .word gMain\n\ - .word 0x43c\n\ -._68:\n\ - ldr r0, ._107 @ \n\ - mov r1, #0x99\n\ - lsl r1, r1, #0x2\n\ - add r4, r0, r1\n\ - ldrb r0, [r4]\n\ - bl LoadPartyMenuGraphics\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - cmp r0, #0x1\n\ - bne ._105 @cond_branch\n\ - mov r0, #0x0\n\ - strh r0, [r4]\n\ - ldr r1, ._107 + 4 @ \n\ - ldr r2, ._107 + 8 @ \n\ - add r1, r1, r2\n\ - b ._122\n\ -._108:\n\ - .align 2, 0\n\ -._107:\n\ - .word +0x201b000\n\ - .word gMain\n\ - .word 0x43c\n\ -._105:\n\ - ldrh r0, [r4]\n\ - add r0, r0, #0x1\n\ - strh r0, [r4]\n\ - b ._125\n\ -._69:\n\ - bl sub_809D51C\n\ - b ._115\n\ -._70:\n\ - ldr r2, ._113 @ PartyMenuHandlers\n\ - ldr r0, ._113 + 4 @ \n\ - mov r1, #0x96\n\ - lsl r1, r1, #0x2\n\ - add r0, r0, r1\n\ - ldrb r1, [r0]\n\ - lsl r0, r1, #0x1\n\ - add r0, r0, r1\n\ - lsl r0, r0, #0x2\n\ - add r2, r2, #0x4\n\ - add r0, r0, r2\n\ - ldr r0, [r0]\n\ - bl _call_via_r0\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - cmp r0, #0x1\n\ - bne ._125 @cond_branch\n\ - ldr r1, ._113 + 8 @ \n\ - ldr r2, ._113 + 12 @ \n\ - add r1, r1, r2\n\ - b ._122\n\ -._114:\n\ - .align 2, 0\n\ -._113:\n\ - .word PartyMenuHandlers\n\ - .word +0x201b000\n\ - .word gMain\n\ - .word 0x43c\n\ -._71:\n\ - ldr r0, ._116 @ gWindowTemplate_81E6CC8\n\ - bl MultistepInitMenuWindowBegin\n\ - b ._115\n\ -._117:\n\ - .align 2, 0\n\ -._116:\n\ - .word gWindowTemplate_81E6CC8\n\ -._72:\n\ - bl MultistepInitMenuWindowContinue\n\ - cmp r0, #0\n\ - beq ._125 @cond_branch\n\ - ldr r1, ._120 @ gMain\n\ - ldr r0, ._120 + 4 @ 0x43c\n\ - add r1, r1, r0\n\ - b ._122\n\ -._121:\n\ - .align 2, 0\n\ -._120:\n\ - .word gMain\n\ - .word 0x43c\n\ -._73:\n\ - ldr r0, ._123 @ \n\ - ldr r1, ._123 + 4 @ \n\ - add r0, r0, r1\n\ - ldrb r0, [r0]\n\ - mov r1, #0x0\n\ - bl PrintPartyMenuPromptText\n\ - ldr r1, ._123 + 8 @ \n\ - ldr r2, ._123 + 12 @ \n\ - add r1, r1, r2\n\ - b ._122\n\ -._124:\n\ - .align 2, 0\n\ -._123:\n\ - .word +0x201b000\n\ - .word 0x259\n\ - .word gMain\n\ - .word 0x43c\n\ -._74:\n\ - mov r0, #0x1\n\ - neg r0, r0\n\ - mov r1, #0x0\n\ - str r1, [sp]\n\ - mov r2, #0x10\n\ - mov r3, #0x0\n\ - bl BeginNormalPaletteFade\n\ - ldr r2, ._126 @ gPaletteFade\n\ - ldrb r1, [r2, #0x8]\n\ - mov r0, #0x7f\n\ - and r0, r0, r1\n\ - strb r0, [r2, #0x8]\n\ -._115:\n\ - ldr r1, ._126 + 4 @ gMain\n\ - ldr r3, ._126 + 8 @ 0x43c\n\ - add r1, r1, r3\n\ -._122:\n\ - ldrb r0, [r1]\n\ - add r0, r0, #0x1\n\ - strb r0, [r1]\n\ - b ._125\n\ -._127:\n\ - .align 2, 0\n\ -._126:\n\ - .word gPaletteFade\n\ - .word gMain\n\ - .word 0x43c\n\ -._75:\n\ - ldr r0, ._130 @ VBlankCB_PartyMenu\n\ - bl SetVBlankCallback\n\ - ldr r0, ._130 + 4 @ gLinkOpen\n\ - ldrb r0, [r0]\n\ - cmp r0, #0x1\n\ - bne ._128 @cond_branch\n\ - ldr r0, ._130 + 8 @ 0x600e5e0\n\ - mov r1, #0x80\n\ - lsl r1, r1, #0x8\n\ - ldr r2, ._130 + 12 @ 0x6007800\n\ - mov r3, #0x2\n\ - bl debug_sub_8008218\n\ -._128:\n\ - mov r0, #0x1\n\ - b ._129\n\ -._131:\n\ - .align 2, 0\n\ -._130:\n\ - .word VBlankCB_PartyMenu+1\n\ - .word gLinkOpen\n\ - .word 0x600e5e0\n\ - .word 0x6007800\n\ -._125:\n\ - mov r0, #0x0\n\ -._129:\n\ - add sp, sp, #0xc\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4, r5, r6, r7}\n\ - pop {r1}\n\ - bx r1"); -} -#else bool8 InitPartyMenu(void) { switch (gMain.state) @@ -1115,7 +639,6 @@ bool8 InitPartyMenu(void) DmaFill16Large(3, 0, (void *)(VRAM + 0x0), VRAM_SIZE, 0x1000); DmaClear32(3, OAM, OAM_SIZE); DmaClear16(3, PLTT, PLTT_SIZE); - gPaletteFade.bufferTransferDisabled = 1; gMain.state++; break; @@ -1136,10 +659,7 @@ bool8 InitPartyMenu(void) break; case 4: if (ewram1B000.menuType != PARTY_MENU_TYPE_BATTLE && ewram1B000.menuType != PARTY_MENU_TYPE_LINK_MULTI_BATTLE) - { ResetTasks(); - } - gMain.state++; break; case 5: @@ -1183,9 +703,7 @@ bool8 InitPartyMenu(void) break; case 12: if (PartyMenuHandlers[ewram1B000.menuType].menuSetup() == TRUE) - { gMain.state++; - } break; case 13: MultistepInitMenuWindowBegin(&gWindowTemplate_81E6CC8); @@ -1193,9 +711,7 @@ bool8 InitPartyMenu(void) break; case 14: if (MultistepInitMenuWindowContinue()) - { gMain.state++; - } break; case 15: PrintPartyMenuPromptText(ewram1B000.promptTextId, 0); @@ -1208,27 +724,26 @@ bool8 InitPartyMenu(void) break; case 17: SetVBlankCallback(VBlankCB_PartyMenu); +#if DEBUG + if (gLinkOpen == TRUE) + debug_sub_8008218((void *)(VRAM + 0xE5E0), 0x8000, (void *)(VRAM + 0x7800), 2); +#endif return TRUE; } return FALSE; } -#endif void CB2_InitPartyMenu(void) { while (InitPartyMenu() != TRUE) { if (sub_80F9344() == TRUE) - { return; - } } if (ewram1B000.menuType != PARTY_MENU_TYPE_LINK_MULTI_BATTLE) - { ChangePartyMenuSelection(ewram1B000.menuHandlerTaskId, 0); - } SetMainCallback2(CB2_PartyMenuMain); } @@ -1269,9 +784,7 @@ void ReDrawPartyMonBackgrounds(void) DmaCopy16Defvars(3, gBGTilemapBuffers[2], (void *)(BG_VRAM + 0x3000), 0x800); if (ewram1B000.unk261 == 2) - { ewram1B000.unk261 = 0; - } } } @@ -1298,119 +811,172 @@ bool8 DrawPartyMonBackground(u8 monIndex) sub_806BF24(&arr[0], 0, 3, 0); break; case 2: - if (!IsDoubleBattle()) { - if (gPlayerPartyCount > 1) { + if (!IsDoubleBattle()) + { + if (gPlayerPartyCount > 1) + { sub_806BA94(arr[2], arr[3], 0, 3); sub_806BF24(&arr[2], 1, 3, 0); - } else { + } + else + { sub_806BA94(arr[2], arr[3], 1, 3); } - } else if (IsLinkDoubleBattle() == TRUE) { + } + else if (IsLinkDoubleBattle() == TRUE) + { sub_806B9A4(arr[2], arr[3], 4); sub_806BF24(&arr[2], 1, 4, 0); - } else { + } + else + { sub_806B9A4(arr[2], arr[3], 3); sub_806BF24(&arr[2], 1, 3, 0); } - break; case 3: - if (!IsDoubleBattle()) { - if (gPlayerPartyCount > 2) { + if (!IsDoubleBattle()) + { + if (gPlayerPartyCount > 2) + { sub_806BA94(arr[4], arr[5], 0, 3); sub_806BF24(&arr[4], 2, 3, 0); - } else { + } + else + { sub_806BA94(arr[4], arr[5], 1, 3); } - } else if (IsLinkDoubleBattle() == TRUE) { - if (GetMonData(&gPlayerParty[2], MON_DATA_SPECIES)) { + } + else if (IsLinkDoubleBattle() == TRUE) + { + if (GetMonData(&gPlayerParty[2], MON_DATA_SPECIES)) + { sub_806BA94(arr[4], arr[5], 0, 3); sub_806BF24(&arr[4], 2, 3, 0); - } else { + } + else + { sub_806BA94(arr[4], arr[5], 1, 3); } - } else if (gPlayerPartyCount > 2) { + } + else if (gPlayerPartyCount > 2) + { sub_806BA94(arr[4], arr[5], 0, 3); sub_806BF24(&arr[4], 2, 3, 0); - } else { + } + else + { sub_806BA94(arr[4], arr[5], 1, 3); } - break; case 4: - if (!IsDoubleBattle()) { - if (gPlayerPartyCount > 3) { + if (!IsDoubleBattle()) + { + if (gPlayerPartyCount > 3) + { sub_806BA94(arr[6], arr[7], 0, 3); sub_806BF24(&arr[6], 3, 3, 0); - } else { + } + else + { sub_806BA94(arr[6], arr[7], 1, 3); } - } else if (IsLinkDoubleBattle() == TRUE) { - if (GetMonData(&gPlayerParty[3], MON_DATA_SPECIES)) { + } + else if (IsLinkDoubleBattle() == TRUE) + { + if (GetMonData(&gPlayerParty[3], MON_DATA_SPECIES)) + { sub_806BA94(arr[6], arr[7], 0, 3); sub_806BF24(&arr[6], 3, 3, 0); - } else { + } + else + { sub_806BA94(arr[6], arr[7], 1, 3); } - } else if (gPlayerPartyCount > 3) { + } + else if (gPlayerPartyCount > 3) + { sub_806BA94(arr[6], arr[7], 0, 3); sub_806BF24(&arr[6], 3, 3, 0); - } else { + } + else + { sub_806BA94(arr[6], arr[7], 1, 3); } - break; case 5: - if (!IsDoubleBattle()) { - if (gPlayerPartyCount > 4) { + if (!IsDoubleBattle()) + { + if (gPlayerPartyCount > 4) + { sub_806BA94(arr[8], arr[9], 0, 3); sub_806BF24(&arr[8], 4, 3, 0); - } else { + } + else + { sub_806BA94(arr[8], arr[9], 1, 3); } - } else if (IsLinkDoubleBattle() == TRUE) { - if (GetMonData(&gPlayerParty[4], MON_DATA_SPECIES)) { + } + else if (IsLinkDoubleBattle() == TRUE) + { + if (GetMonData(&gPlayerParty[4], MON_DATA_SPECIES)) + { sub_806BA94(arr[8], arr[9], 0, 4); sub_806BF24(&arr[8], 4, 4, 0); - } else { + } + else + { sub_806BA94(arr[8], arr[9], 1, 4); } - } else if (gPlayerPartyCount > 4) { + } + else if (gPlayerPartyCount > 4) + { sub_806BA94(arr[8], arr[9], 0, 3); sub_806BF24(&arr[8], 4, 3, 0); - } else { + } + else + { sub_806BA94(arr[8], arr[9], 1, 3); } - break; case 6: - if (!IsDoubleBattle()) { - if (gPlayerPartyCount > 5) { + if (!IsDoubleBattle()) + { + if (gPlayerPartyCount > 5) + { sub_806BA94(arr[10], arr[11], 0, 3); sub_806BF24(&arr[10], 5, 3, 0); - } else { + } + else + { sub_806BA94(arr[10], arr[11], 1, 3); } - } else if (IsLinkDoubleBattle() == TRUE) { - if (GetMonData(&gPlayerParty[5], MON_DATA_SPECIES)) { + } + else if (IsLinkDoubleBattle() == TRUE) + { + if (GetMonData(&gPlayerParty[5], MON_DATA_SPECIES)) + { sub_806BA94(arr[10], arr[11], 0, 4); sub_806BF24(&arr[10], 5, 4, 0); - } else { + } + else + { sub_806BA94(arr[10], arr[11], 1, 4); } - } else if (gPlayerPartyCount > 5) { + } + else if (gPlayerPartyCount > 5) + { sub_806BA94(arr[10], arr[11], 0, 3); sub_806BF24(&arr[10], 5, 3, 0); - } else { + } + else + { sub_806BA94(arr[10], arr[11], 1, 3); } - break; case 7: - if (ewram1B000.menuType == PARTY_MENU_TYPE_BATTLE_TOWER) { + if (ewram1B000.menuType == PARTY_MENU_TYPE_BATTLE_TOWER) sub_806BB9C(1); - } - sub_806BBEC(1); break; case 8: @@ -1533,9 +1099,7 @@ void sub_806B9A4(s16 a, u16 b, u8 c) for (; j <= 10 && a + j <= 0x1F; j++) { if (a + j >= 0) - { gBGTilemapBuffers[2][var1 + (i * 32) + (a + j)] = (c << 12) | gUnknown_083769D8[i * 11 + j]; - } } } } @@ -1555,9 +1119,7 @@ void sub_806BA34(s16 a, u16 b) for (; j <= 10 && a + j <= 0x1F; j++) { if (a + j >= 0) - { gBGTilemapBuffers[2][var1 + (i * 32) + (a + j)] = 0; - } } } } @@ -1569,15 +1131,13 @@ void sub_806BA94(s16 a, u16 b, u8 c, u8 d) const u8 *arr; u16 var1; - arr = gUnknown_08376A5E; if (c == 0) - { arr = gUnknown_08376A25; - } + else + arr = gUnknown_08376A5E; var1 = b * 32; - for (i = 0; i < 3; i++) { u8 j = 0; @@ -1622,11 +1182,13 @@ void sub_806BB3C(s16 a, u16 b) void sub_806BB9C(u8 a) { u8 i; - u16 arr[12] = { + u16 arr[12] = + { 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, }; u16 *vramPtr = (u16 *)(BG_VRAM + 0x3C30); + for (i = 0; i < PARTY_SIZE; i++) { vramPtr[i] = arr[i] + (a << 12); @@ -1637,11 +1199,13 @@ void sub_806BB9C(u8 a) void sub_806BBEC(u8 a) { u8 i; - u16 arr[12] = { + u16 arr[12] = + { 0x2A, 0x0B, 0x0C, 0x0D, 0x0E, 0x2F, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, }; u16 *vramPtr = (u16 *)(BG_VRAM + 0x3CB0); + for (i = 0; i < PARTY_SIZE; i++) { vramPtr[i] = arr[i] + (a << 12); @@ -1671,9 +1235,7 @@ void unref_sub_806BCB8(u8 a) u8 i; for (i = 0; i < gPlayerPartyCount; i++) - { sub_806BC3C(i, a); - } } // This is ultimately unreferenced, since it's caller is unreferenced. @@ -1685,8 +1247,7 @@ void sub_806BCE8() { if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) { - u8 gender = GetMonGender(&gPlayerParty[i]); - switch (gender) + switch (GetMonGender(&gPlayerParty[i])) { case MON_MALE: sub_806BC3C(i, 0x54); @@ -1893,8 +1454,7 @@ u16 HandleBattleTowerPartyMenuInput(u8 taskId) if (menuDirectionPressed == 0) { - u8 var1 = sub_80F92BC(); - switch (var1) + switch (sub_80F92BC()) { case 1: menuDirectionPressed = 0xFF; @@ -1923,9 +1483,7 @@ u16 HandleBattleTowerPartyMenuInput(u8 taskId) if (gMain.newKeys & A_BUTTON) { if (gSprites[sub_806CA00(taskId)].data[0] == 7) - { return B_BUTTON; - } } } } @@ -1989,31 +1547,19 @@ void ChangePartyMenuSelection(u8 taskId, s8 directionPressed) u8 isDoubleBattle = IsDoubleBattle(); if (menuIndex < PARTY_SIZE) - { sub_806BF24(&gUnknown_083769A8[isDoubleBattle * 12 + menuIndex * 2], menuIndex, 3, 0); - } else - { sub_806BBEC(1); - } if (!isDoubleBattle) - { ChangeDefaultPartyMenuSelection(spriteId, menuIndex, directionPressed); - } else - { ChangeDoubleBattlePartyMenuSelection(spriteId, menuIndex, directionPressed); - } if (gSprites[spriteId].data[0] < PARTY_SIZE) - { sub_806BF24(&gUnknown_083769A8[isDoubleBattle * 12 + gSprites[spriteId].data[0] * 2], gSprites[spriteId].data[0], 3, 1); - } else - { sub_806BBEC(2); - } ewram1B000.unk261 = 2; @@ -2024,9 +1570,7 @@ void ChangePartyMenuSelection(u8 taskId, s8 directionPressed) UpdateMonIconFrame_806DA44(taskId, gSprites[spriteId].data[0], 1); if (menuIndex != gSprites[spriteId].data[0]) - { - PlaySE(5); - } + PlaySE(SE_SELECT); } void ChangeDefaultPartyMenuSelection(u8 spriteId, u8 menuIndex, s8 directionPressed) @@ -2040,27 +1584,35 @@ void ChangeDefaultPartyMenuSelection(u8 spriteId, u8 menuIndex, s8 directionPres gSprites[spriteId].data[1] = 0; break; case 1: // moving up - if (menuIndex == 0) { + if (menuIndex == 0) + { gSprites[spriteId].data[0] = 7; - } else if (menuIndex == 7) { + } + else if (menuIndex == 7) + { gSprites[spriteId].data[0] = gPlayerPartyCount - 1; - } else { + } + else + { s8 diff = directionPressed; gSprites[spriteId].data[0] += diff; } - gSprites[spriteId].data[1] = 0; break; case 3: // moving down - if (menuIndex == gPlayerPartyCount - 1) { + if (menuIndex == gPlayerPartyCount - 1) + { gSprites[spriteId].data[0] = 7; - } else if (menuIndex == 7) { + } + else if (menuIndex == 7) + { gSprites[spriteId].data[0] = 0; - } else { + } + else + { s8 diff = directionPressed; gSprites[spriteId].data[0] += diff; } - gSprites[spriteId].data[1] = 0; break; case 4: // moving right @@ -2068,14 +1620,14 @@ void ChangeDefaultPartyMenuSelection(u8 spriteId, u8 menuIndex, s8 directionPres { if (gSprites[spriteId].data[1] == 0) gSprites[spriteId].data[1] = 1; - gSprites[spriteId].data[0] = gSprites[spriteId].data[1]; } break; case 0: // moving left // Only move the selection to the left side if one of the mons in the right-hand column are currently selected nextIndex = menuIndex - 1; - if (nextIndex <= 4) { + if (nextIndex <= 4) + { gSprites[spriteId].data[0] = 0; gSprites[spriteId].data[1] = menuIndex; } @@ -2094,32 +1646,42 @@ void ChangeDoubleBattlePartyMenuSelection(u8 spriteId, u8 menuIndex, s8 directio gSprites[spriteId].data[1] = 0; break; case 3: // moving down - if (menuIndex == 7) { + if (menuIndex == 7) + { gSprites[spriteId].data[0] = 0; - } else if (menuIndex == gPlayerPartyCount - 1) { + } + else if (menuIndex == gPlayerPartyCount - 1) + { gSprites[spriteId].data[0] = 7; - } else { + } + else + { s8 diff = directionPressed; gSprites[spriteId].data[0] += diff; } - gSprites[spriteId].data[1] = 0; break; case 1: // moving up - if (menuIndex == 0) { + if (menuIndex == 0) + { gSprites[spriteId].data[0] = 7; - } else if (menuIndex == 7) { + } + else if (menuIndex == 7) + { gSprites[spriteId].data[0] = gPlayerPartyCount - 1; - } else { + } + else + { s8 diff = directionPressed; gSprites[spriteId].data[0] += diff; } - gSprites[spriteId].data[1] = 0; break; case 4: // moving right - if (menuIndex == 0) { - if (gPlayerPartyCount > 2) { + if (menuIndex == 0) + { + if (gPlayerPartyCount > 2) + { u16 var1 = gSprites[spriteId].data[1] - 2; if (var1 > 1) gSprites[spriteId].data[0] = 2; @@ -2127,8 +1689,10 @@ void ChangeDoubleBattlePartyMenuSelection(u8 spriteId, u8 menuIndex, s8 directio gSprites[spriteId].data[0] = gSprites[spriteId].data[1]; } } - else if (menuIndex == 1) { - if (gPlayerPartyCount > 4) { + else if (menuIndex == 1) + { + if (gPlayerPartyCount > 4) + { u16 var1 = gSprites[spriteId].data[1] - 4; if (var1 <= 1) gSprites[spriteId].data[0] = gSprites[spriteId].data[1]; @@ -2139,12 +1703,16 @@ void ChangeDoubleBattlePartyMenuSelection(u8 spriteId, u8 menuIndex, s8 directio break; case 0: // moving left var1 = menuIndex - 2; - if (var1 <= 1) { + if (var1 <= 1) + { gSprites[spriteId].data[0] = 0; gSprites[spriteId].data[1] = menuIndex; - } else { + } + else + { u8 var2 = menuIndex - 4; - if (var2 <= 1) { + if (var2 <= 1) + { gSprites[spriteId].data[0] = 1; gSprites[spriteId].data[1] = menuIndex; } @@ -2497,54 +2065,41 @@ void ChangeBattleTowerPartyMenuSelection(u8 taskId, s8 directionPressed) UpdateMonIconFrame_806DA44(taskId, menuIndex, 0); if (menuIndex < PARTY_SIZE) - { sub_806BF24(&gUnknown_083769A8[menuIndex * 2], menuIndex, 3, 0); - } else if (menuIndex == PARTY_SIZE) - { sub_806BB9C(1); - } else - { sub_806BBEC(1); - } menuMovement = directionPressed + 2; - switch (menuMovement) { case 2: // no movement gSprites[spriteId].data[1] = 0; break; case 1: // moving up - if (menuIndex == 0) { + if (menuIndex == 0) gSprites[spriteId].data[0] = 7; - } else if (menuIndex == PARTY_SIZE) { + else if (menuIndex == PARTY_SIZE) gSprites[spriteId].data[0] = gPlayerPartyCount - 1; - } else { + else gSprites[spriteId].data[0] += directionPressed; - } - gSprites[spriteId].data[1] = 0; break; case 3: // moving down - if (menuIndex == gPlayerPartyCount - 1) { + if (menuIndex == gPlayerPartyCount - 1) gSprites[spriteId].data[0] = 6; - } else if (menuIndex == 7) { + else if (menuIndex == 7) gSprites[spriteId].data[0] = 0; - } else { + else gSprites[spriteId].data[0] += directionPressed; - } - gSprites[spriteId].data[1] = 0; break; case 4: // moving right if (gPlayerPartyCount > 1 && menuIndex == 0) { - if (gSprites[spriteId].data[1] == 0) { + if (gSprites[spriteId].data[1] == 0) gSprites[spriteId].data[1] = 1; - } - gSprites[spriteId].data[0] = gSprites[spriteId].data[1]; } break; @@ -2564,17 +2119,11 @@ void ChangeBattleTowerPartyMenuSelection(u8 taskId, s8 directionPressed) newMenuIndex = gSprites[spriteId].data[0]; if (gSprites[spriteId].data[0] < PARTY_SIZE) - { sub_806BF24(&gUnknown_083769A8[gSprites[spriteId].data[0] * 2], newMenuIndex, 3, 1); - } else if (gSprites[spriteId].data[0] == PARTY_SIZE) - { sub_806BB9C(2); - } else - { sub_806BBEC(2); - } ewram1B000.unk261 = 2; @@ -2582,9 +2131,7 @@ void ChangeBattleTowerPartyMenuSelection(u8 taskId, s8 directionPressed) UpdateMonIconFrame_806DA44(taskId, newMenuIndex2, 1); if (menuIndex != gSprites[spriteId].data[0]) - { - PlaySE(5); - } + PlaySE(SE_SELECT); } // Selects the "OK" button in the Battle Tower party menu. @@ -2598,13 +2145,9 @@ void SelectBattleTowerOKButton(u8 taskId) UpdateMonIconFrame_806DA44(taskId, menuIndex, 0); if (menuIndex < PARTY_SIZE) - { sub_806BF24(&gUnknown_083769A8[menuIndex * 2], menuIndex, 3, 0); - } else - { sub_806BBEC(1); - } gSprites[spriteId].data[1] = 0; gSprites[spriteId].data[0] = 6; @@ -2614,7 +2157,7 @@ void SelectBattleTowerOKButton(u8 taskId) sub_806BB9C(2); ewram1B000.unk261 = 2; - PlaySE(5); + PlaySE(SE_SELECT); } } @@ -2625,24 +2168,28 @@ void sub_806C92C(u8 spriteId) if (!IsDoubleBattle()) { - if (menuIndex1 < 1) { - if (menuIndex2 < 1) { + if (menuIndex1 < 1) + { + if (menuIndex2 < 1) menuIndex2 = 1; - } - } else { - if (menuIndex2 >= 1) { + } + else + { + if (menuIndex2 >= 1) menuIndex2 = 0; - } } - } else { - if (menuIndex1 < 2) { - if (menuIndex2 < 2) { + } + else + { + if (menuIndex1 < 2) + { + if (menuIndex2 < 2) menuIndex2 = 2; - } - } else { - if (menuIndex2 >= 2) { + } + else + { + if (menuIndex2 >= 2) menuIndex2 = 0; - } } } @@ -2709,13 +2256,9 @@ void ChangePartyMenuSwitchPokemonSelection(u8 taskId, s16 menuDirectionPressed) ChangePartyMenuSelection(taskId, menuDirectionPressed); if (sprite1->data[0] != sprite2->data[0]) - { sub_806BF24(&gUnknown_083769A8[sprite1->data[0] * 2], sprite1->data[0], 6, 1); - } else - { sub_806BF24(&gUnknown_083769A8[sprite1->data[0] * 2], sprite1->data[0], 6, 0); - } } void HandlePartyMenuSwitchPokemonInput(u8 taskId) @@ -2772,14 +2315,9 @@ void sub_806CCE4() u8 monIndex2 = gSprites[ewram01000.unk2].data[0]; if (monIndex1 <= 5) - { sub_806BF24(&gUnknown_083769A8[monIndex1 * 2], monIndex1, 3, 0); - } - if (monIndex2 <= 5) - { sub_806BF24(&gUnknown_083769A8[monIndex2 * 2], monIndex2, 3, 1); - } } void sub_806CD44(u8 taskId) @@ -2988,9 +2526,7 @@ void sub_806D05C(u8 taskId) sub_806CFA0(taskId, 1); if (ewram01000.unk8 == 0 && ewram01000.unkA == 11) - { gTasks[taskId].func = sub_806D198; - } } void sub_806D098(u8 a, u8 b) @@ -3032,9 +2568,7 @@ void sub_806D15C(u8 taskId) sub_806D098(taskId, 1); if (ewram01000.unk8 == 11 && ewram01000.unkA == 11) - { gTasks[taskId].func = sub_806D198; - } } void sub_806D198(u8 taskId) @@ -3104,22 +2638,14 @@ void sub_806D3B4(u8 taskId, u16 species1, u16 species2) sub_806B9A4(var1[2] + gTasks[taskId].data[0], var1[3], 4); if (species1) - { sub_806BA94(var1[8] + gTasks[taskId].data[0], var1[9], 0, 4); - } else - { sub_806BA94(var1[8] + gTasks[taskId].data[0], var1[9], 1, 4); - } if (species2) - { sub_806BA94(var1[10] + gTasks[taskId].data[0], var1[11], 0, 4); - } else - { sub_806BA94(var1[10] + gTasks[taskId].data[0], var1[11], 1, 4); - } } void sub_806D4AC(u8 taskId, u16 species, u8 c) @@ -3203,19 +2729,13 @@ bool8 LoadPartyMenuGraphics(u8 a) bool8 retVal = FALSE; if (a < 2) - { LZDecompressVram(gPartyMenuMisc_Gfx, (void *)BG_VRAM); - } if (a == 2 || a == 0) - { LZDecompressVram(gPartyMenuMisc_Tilemap, (void *)(BG_VRAM + 0x3800)); - } if (a == 3 || a == 0) - { LoadCompressedPalette(gPartyMenuMisc_Pal, 0, 0x160); - } if (a == 4 || a == 0) { @@ -3224,19 +2744,13 @@ bool8 LoadPartyMenuGraphics(u8 a) } if (a == 5 || a == 0) - { LZDecompressVram(gPartyMenuHpBar_Gfx, (void *)(BG_VRAM + 0x6000)); - } if (a == 6 || a == 0) - { LZDecompressVram(gPartyMenuOrderText_Gfx, (void *)(BG_VRAM + 0x6180)); - } if (a == 7 || a == 0) - { LZDecompressVram(gStatusGfx_Icons, (void *)(BG_VRAM + 0x7180)); - } if (a == 8 || a == 0) { @@ -3255,21 +2769,13 @@ void SetMonIconAnimByHP(u8 spriteId, u16 currentHP, u16 maxHP) if (currentHP != maxHP) { if (hpBarLevel == 3) - { animNum = 1; - } else if (hpBarLevel == 2) - { animNum = 2; - } else if (hpBarLevel == 1) - { animNum = 3; - } else - { animNum = 4; - } } sub_809D824(&gSprites[spriteId], animNum); @@ -3300,25 +2806,19 @@ void TryCreatePartyMenuMonIcon(u8 taskId, u8 monIndex, struct Pokemon *pokemon) { if (GetMonData(pokemon, MON_DATA_SPECIES)) { - bool8 isLinkDoubleBattle = IsLinkDoubleBattle(); - if (isLinkDoubleBattle == TRUE) - { + if (IsLinkDoubleBattle() == TRUE) CreatePartyMenuMonIcon(taskId, monIndex, PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE, pokemon); - } else - { CreatePartyMenuMonIcon(taskId, monIndex, IsDoubleBattle(), pokemon); - } } } void unref_sub_806D964(u8 taskId) { u8 i; + for (i = 0; i < gPlayerPartyCount; i++) - { TryCreatePartyMenuMonIcon(taskId, i, &gPlayerParty[i]); - } } void CreateMonIcon_LinkMultiBattle(u8 taskId, u8 monIndex, u8 menuType, struct UnknownPokemonStruct2 *pokemon) @@ -3333,19 +2833,14 @@ void CreateMonIcon_LinkMultiBattle(u8 taskId, u8 monIndex, u8 menuType, struct U void UpdateMonIconFrame_806DA0C(struct Sprite *sprite) { - u8 var1; + u8 var1 = UpdateMonIconFrame(sprite); - var1 = UpdateMonIconFrame(sprite); if (var1) { if (var1 & 1) - { sprite->pos2.y = -3; - } else - { sprite->pos2.y = 1; - } } } @@ -3365,13 +2860,9 @@ void UpdateMonIconFrame_806DA44(u8 taskId, u8 monIndex, u8 c) gSprites[spriteId].data[0] = 0; if (!c) - { gSprites[spriteId].callback = UpdateMonIconFrame_806DA38; - } else - { gSprites[spriteId].callback = UpdateMonIconFrame_806DA0C; - } } } @@ -3383,8 +2874,8 @@ void LoadHeldItemIconGraphics(void) void SpriteCB_HeldItemIcon(struct Sprite *sprite) { - u8 data7 = sprite->data[7]; + if (gSprites[data7].invisible) { sprite->invisible = 1; @@ -3422,29 +2913,19 @@ void CreateHeldItemIcons(u8 *a, u8 *b, u8 c) switch (c) { case 0: - i = 0; - while (i < a[0]) + for (i = 0; i < a[0]; i++) { heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); if (heldItem) - { CreateHeldItemIcon(b[i], ItemIsMail(heldItem)); - } - - i++; } break; case 1: - i = 0; - while (i < a[1]) + for (i = 0; i < a[1]; i++) { heldItem = GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM); if (heldItem) - { CreateHeldItemIcon(b[i + 6], ItemIsMail(heldItem)); - } - - i++; } break; } @@ -3495,13 +2976,9 @@ void CreateHeldItemIcon_806DCD4(u8 taskId, u8 monIndex, u16 item) else { if (ItemIsMail(item)) - { StartSpriteAnim(&gSprites[heldItemSpriteId], 1); - } else - { StartSpriteAnim(&gSprites[heldItemSpriteId], 0); - } gSprites[heldItemSpriteId].invisible = 0; } @@ -3611,25 +3088,25 @@ u8 GetMonIconSpriteId(u8 taskId, u8 monIndex) { switch (monIndex) { - case 1: - return gTasks[taskId].data[0]; - break; - case 2: - return gTasks[taskId].data[1] >> 8; - break; - case 3: - return gTasks[taskId].data[1]; - break; - case 4: - return gTasks[taskId].data[2] >> 8; - break; - case 5: - return gTasks[taskId].data[2]; - break; - case 0: - default: - return gTasks[taskId].data[0] >> 8; - break; + case 1: + return gTasks[taskId].data[0]; + break; + case 2: + return gTasks[taskId].data[1] >> 8; + break; + case 3: + return gTasks[taskId].data[1]; + break; + case 4: + return gTasks[taskId].data[2] >> 8; + break; + case 5: + return gTasks[taskId].data[2]; + break; + case 0: + default: + return gTasks[taskId].data[0] >> 8; + break; } } @@ -3637,24 +3114,24 @@ void SetMonIconSpriteId(u8 taskId, u8 monIndex, u8 spriteId) { switch (monIndex) { - case 0: - gTasks[taskId].data[0] = (u8)gTasks[taskId].data[0] | (spriteId << 8); - break; - case 1: - gTasks[taskId].data[0] = (gTasks[taskId].data[0] & -0x100) | spriteId; - break; - case 2: - gTasks[taskId].data[1] = (u8)gTasks[taskId].data[1] | (spriteId << 8); - break; - case 3: - gTasks[taskId].data[1] = (gTasks[taskId].data[1] & -0x100) | spriteId; - break; - case 4: - gTasks[taskId].data[2] = (u8)gTasks[taskId].data[2] | (spriteId << 8); - break; - case 5: - gTasks[taskId].data[2] = (gTasks[taskId].data[2] & -0x100) | spriteId; - break; + case 0: + gTasks[taskId].data[0] = (u8)gTasks[taskId].data[0] | (spriteId << 8); + break; + case 1: + gTasks[taskId].data[0] = (gTasks[taskId].data[0] & -0x100) | spriteId; + break; + case 2: + gTasks[taskId].data[1] = (u8)gTasks[taskId].data[1] | (spriteId << 8); + break; + case 3: + gTasks[taskId].data[1] = (gTasks[taskId].data[1] & -0x100) | spriteId; + break; + case 4: + gTasks[taskId].data[2] = (u8)gTasks[taskId].data[2] | (spriteId << 8); + break; + case 5: + gTasks[taskId].data[2] = (gTasks[taskId].data[2] & -0x100) | spriteId; + break; } } @@ -3799,15 +3276,10 @@ void TryPrintPartyMenuMonNickname(u8 monIndex, struct Pokemon *pokemon) { if (GetMonData(pokemon, MON_DATA_SPECIES)) { - bool8 isLinkDoubleBattle = IsLinkDoubleBattle(); - if (isLinkDoubleBattle == TRUE) - { + if (IsLinkDoubleBattle() == TRUE) PrintPartyMenuMonNickname(monIndex, PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE, pokemon); - } else - { PrintPartyMenuMonNickname(monIndex, IsDoubleBattle(), pokemon); - } } } @@ -3816,9 +3288,7 @@ void PrintPartyMenuMonNicknames(void) u8 i; for (i = 0; i < PARTY_SIZE; i++) - { TryPrintPartyMenuMonNickname(i, &gPlayerParty[i]); - } } u8 *GetMonNickname(struct Pokemon *pokemon, u8 *stringBuffer) @@ -3836,38 +3306,28 @@ void PartyMenuPutStatusTilemap(u8 monIndex, u8 menuLayout, u8 status) u8 var1 = status * 4; for (i = 0; i < 4; i++) - { vramPtr[i] = (0x18C + var1 + i) | -0x5000; - } } static void PartyMenuClearLevelStatusTilemap(u8 monIndex) { - bool8 isLinkDoubleBattle; u8 menuLayout; u8 x; u8 y; u16 *vramPtr; u8 i; - isLinkDoubleBattle = IsLinkDoubleBattle(); - if (isLinkDoubleBattle == TRUE) - { + if (IsLinkDoubleBattle() == TRUE) menuLayout = PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE; - } else - { menuLayout = IsDoubleBattle(); - } x = gUnknown_08376738[menuLayout][monIndex].x - 1; y = gUnknown_08376738[menuLayout][monIndex].y + 1; vramPtr = (u16*)(VRAM + 0xF000) + (x + y * 32); for (i = 0; i < 4; i++) - { vramPtr[i] = 0; - } } static void PartyMenuWriteTilemap(u8 a, u8 x, u8 y) @@ -3908,30 +3368,18 @@ void PartyMenuPrintMonLevelOrStatus(u8 monIndex, struct Pokemon *pokemon) { if (GetMonData(pokemon, MON_DATA_SPECIES) && !GetMonData(pokemon, MON_DATA_IS_EGG)) { - u8 statusAndPkrs; - bool8 isLinkDoubleBattle; + u8 statusAndPkrs = GetMonStatusAndPokerus(pokemon); u8 menuLayout; - statusAndPkrs = GetMonStatusAndPokerus(pokemon); - - isLinkDoubleBattle = IsLinkDoubleBattle(); - if (isLinkDoubleBattle == TRUE) - { + if (IsLinkDoubleBattle() == TRUE) menuLayout = PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE; - } else - { menuLayout = IsDoubleBattle(); - } if (statusAndPkrs != 0 && statusAndPkrs != 6) - { PartyMenuPutStatusTilemap(monIndex, menuLayout, statusAndPkrs - 1); - } else - { PartyMenuPrintLevel(monIndex, menuLayout, pokemon); - } PartyMenuPrintGenderIcon(monIndex, menuLayout, pokemon); } @@ -3942,9 +3390,7 @@ void PartyMenuPrintMonsLevelOrStatus(void) u8 i; for (i = 0; i < PARTY_SIZE; i++) - { PartyMenuPrintMonLevelOrStatus(i, &gPlayerParty[i]); - } } void PartyMenuDoPrintGenderIcon(u16 species, u8 gender, u8 menuLayout, u8 monIndex, u8 *nickname) @@ -3956,12 +3402,12 @@ void PartyMenuDoPrintGenderIcon(u16 species, u8 gender, u8 menuLayout, u8 monInd switch (gender) { - case MON_MALE: - PartyMenuWriteTilemap(0x42, x, y); - break; - case MON_FEMALE: - PartyMenuWriteTilemap(0x44, x, y); - break; + case MON_MALE: + PartyMenuWriteTilemap(0x42, x, y); + break; + case MON_FEMALE: + PartyMenuWriteTilemap(0x44, x, y); + break; } } } @@ -3994,11 +3440,8 @@ void PartyMenuDoPrintHP(u8 monIndex, u8 b, u16 currentHP, u16 maxHP) void PartyMenuPrintHP(u8 monIndex, u8 b, struct Pokemon *pokemon) { - u16 currentHP; - u16 maxHP; - - currentHP = GetMonData(pokemon, MON_DATA_HP); - maxHP = GetMonData(pokemon, MON_DATA_MAX_HP); + u16 currentHP = GetMonData(pokemon, MON_DATA_HP); + u16 maxHP = GetMonData(pokemon, MON_DATA_MAX_HP); PartyMenuDoPrintHP(monIndex, b, currentHP, maxHP); } @@ -4007,15 +3450,10 @@ void PartyMenuTryPrintHP(u8 monIndex, struct Pokemon *pokemon) { if (GetMonData(pokemon, MON_DATA_SPECIES) && !GetMonData(pokemon, MON_DATA_IS_EGG)) { - bool8 isLinkDoubleBattle = IsLinkDoubleBattle(); - if (isLinkDoubleBattle == TRUE) - { + if (IsLinkDoubleBattle() == TRUE) PartyMenuPrintHP(monIndex, PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE, pokemon); - } else - { PartyMenuPrintHP(monIndex, IsDoubleBattle(), pokemon); - } } } @@ -4024,9 +3462,7 @@ void PartyMenuTryPrintMonsHP(void) u8 i; for (i = 0; i < PARTY_SIZE; i++) - { PartyMenuTryPrintHP(i, &gPlayerParty[i]); - } } void unref_sub_806E564(void) { } @@ -4046,17 +3482,11 @@ void PartyMenuDoDrawHPBar(u8 monIndex, u8 menuLayout, u16 currentHP, u16 maxHP) hpBarLevel = GetHPBarLevel(currentHP, maxHP); if (hpBarLevel > 2) - { battleInterface.unkC_0 = 4; - } if (hpBarLevel == 2) - { battleInterface.unkC_0 = 5; - } if (hpBarLevel < 2) - { battleInterface.unkC_0 = 6; - } battleInterface.unk10 = 0x100; @@ -4082,15 +3512,10 @@ void PartyMenuTryDrawHPBar(u8 monIndex, struct Pokemon *pokemon) { if (GetMonData(pokemon, MON_DATA_SPECIES) && !GetMonData(pokemon, MON_DATA_IS_EGG)) { - bool8 isDoubleBattle = IsLinkDoubleBattle(); - if (isDoubleBattle == TRUE) - { + if (IsLinkDoubleBattle() == TRUE) PartyMenuDrawHPBar(monIndex, PARTY_MENU_LAYOUT_LINK_DOUBLE_BATTLE, pokemon); - } else - { PartyMenuDrawHPBar(monIndex, IsDoubleBattle(), pokemon); - } } } @@ -4099,9 +3524,7 @@ void PartyMenuDrawHPBars(void) u8 i; for (i = 0; i < PARTY_SIZE; i++) - { PartyMenuTryDrawHPBar(i, &gPlayerParty[i]); - } } void SwapPokemon(struct Pokemon *a, struct Pokemon *b) @@ -4871,64 +4294,64 @@ void GetMedicineItemEffectMessage(u16 item) { switch (GetItemEffectType(item)) { - case 3: - StringExpandPlaceholders(gStringVar4, gOtherText_CuredPoisoning); - break; - case 4: - StringExpandPlaceholders(gStringVar4, gOtherText_WokeUp); - break; - case 5: - StringExpandPlaceholders(gStringVar4, gOtherText_BurnHealed); - break; - case 6: - StringExpandPlaceholders(gStringVar4, gOtherText_ThawedOut); - break; - case 7: - StringExpandPlaceholders(gStringVar4, gOtherText_CuredParalysis); - break; - case 8: - StringExpandPlaceholders(gStringVar4, gOtherText_SnapConfusion); - break; - case 9: - StringExpandPlaceholders(gStringVar4, gOtherText_GotOverLove); - break; - case 11: - StringExpandPlaceholders(gStringVar4, gOtherText_BecameHealthy); - break; - case 13: - StringCopy(gStringVar2, gOtherText_Hp2); - StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); - break; - case 12: - StringCopy(gStringVar2, gOtherText_Attack); - StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); - break; - case 17: - StringCopy(gStringVar2, gOtherText_Defense); - StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); - break; - case 16: - StringCopy(gStringVar2, gOtherText_Speed); - StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); - break; - case 14: - StringCopy(gStringVar2, gOtherText_SpAtk2); - StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); - break; - case 15: - StringCopy(gStringVar2, gOtherText_SpDef2); - StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); - break; - case 19: - case 20: - StringExpandPlaceholders(gStringVar4, gOtherText_PPIncreased); - break; - case 21: - StringExpandPlaceholders(gStringVar4, gOtherText_PPRestored); - break; - default: - StringExpandPlaceholders(gStringVar4, gOtherText_WontHaveAnyEffect); - break; + case 3: + StringExpandPlaceholders(gStringVar4, gOtherText_CuredPoisoning); + break; + case 4: + StringExpandPlaceholders(gStringVar4, gOtherText_WokeUp); + break; + case 5: + StringExpandPlaceholders(gStringVar4, gOtherText_BurnHealed); + break; + case 6: + StringExpandPlaceholders(gStringVar4, gOtherText_ThawedOut); + break; + case 7: + StringExpandPlaceholders(gStringVar4, gOtherText_CuredParalysis); + break; + case 8: + StringExpandPlaceholders(gStringVar4, gOtherText_SnapConfusion); + break; + case 9: + StringExpandPlaceholders(gStringVar4, gOtherText_GotOverLove); + break; + case 11: + StringExpandPlaceholders(gStringVar4, gOtherText_BecameHealthy); + break; + case 13: + StringCopy(gStringVar2, gOtherText_Hp2); + StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); + break; + case 12: + StringCopy(gStringVar2, gOtherText_Attack); + StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); + break; + case 17: + StringCopy(gStringVar2, gOtherText_Defense); + StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); + break; + case 16: + StringCopy(gStringVar2, gOtherText_Speed); + StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); + break; + case 14: + StringCopy(gStringVar2, gOtherText_SpAtk2); + StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); + break; + case 15: + StringCopy(gStringVar2, gOtherText_SpDef2); + StringExpandPlaceholders(gStringVar4, gOtherText_WasRaised); + break; + case 19: + case 20: + StringExpandPlaceholders(gStringVar4, gOtherText_PPIncreased); + break; + case 21: + StringExpandPlaceholders(gStringVar4, gOtherText_PPRestored); + break; + default: + StringExpandPlaceholders(gStringVar4, gOtherText_WontHaveAnyEffect); + break; } } @@ -5025,9 +4448,9 @@ void UseMedicine(u8 taskId, u16 item, TaskFunc func) bool8 IsBlueYellowRedFlute(u16 item) { - if (item == 0x27 - || item == 0x29 - || item == 0x28) + if (item == ITEM_BLUE_FLUTE + || item == ITEM_RED_FLUTE + || item == ITEM_YELLOW_FLUTE) return TRUE; else return FALSE; @@ -5339,7 +4762,6 @@ void Task_RareCandy2(u8 taskId) } } -#if ENGLISH void PrintStatGrowthsInLevelUpWindow(u8 taskId) { u8 i; @@ -5351,6 +4773,9 @@ void PrintStatGrowthsInLevelUpWindow(u8 taskId) u8 x; u8 y; u32 stat; +#if GERMAN + u8 *ptr; +#endif stat = GetMonData(ewram1C000.pokemon, StatDataTypes[i]); @@ -5360,142 +4785,31 @@ void PrintStatGrowthsInLevelUpWindow(u8 taskId) x = (i / 3) * 9 + 11; y = ((i % 3) << 1) + 1; +#if GERMAN + ptr = StringCopy(gStringVar1, StatNames[i]); + *ptr++ = EXT_CTRL_CODE_BEGIN; + *ptr++ = 0x13; + *ptr++ = 0x2E; + ptr = StringCopy(ptr, gOtherText_TallPlusAndRightArrow); + *ptr++ = EXT_CTRL_CODE_BEGIN; + *ptr++ = 0x13; + *ptr++ = 0x34; + ConvertIntToDecimalStringN(ptr, ewram1B000.statGrowths[i], 1, 2); + Menu_PrintText(gStringVar1, x + 1, y); +#else Menu_PrintTextPixelCoords(StatNames[i], (x + 1) * 8, y * 8, 1); - if (i == 2) Menu_PrintTextPixelCoords(gOtherText_TallPlusAndRightArrow, (x + 6) * 8 + 6, y * 8, 0); else Menu_PrintTextPixelCoords(gOtherText_TallPlusAndRightArrow, (x + 6) * 8 + 6, y * 8, 1); - gStringVar1[0] = EXT_CTRL_CODE_BEGIN; gStringVar1[1] = 0x14; gStringVar1[2] = 0x06; - ConvertIntToDecimalStringN(gStringVar1 + 3, ewram1B000.statGrowths[i], 1, 2); - Menu_PrintTextPixelCoords(gStringVar1, (x + 6) * 8 + 12, y * 8, 0); +#endif } } -#elif GERMAN -__attribute__((naked)) -void PrintStatGrowthsInLevelUpWindow(u8 taskId) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - movs r0, 0xB\n\ - movs r1, 0\n\ - movs r2, 0x1D\n\ - movs r3, 0x7\n\ - bl Menu_DrawStdWindowFrame\n\ - movs r7, 0\n\ - ldr r0, _0807092C @ =gStringVar1\n\ - mov r10, r0\n\ - movs r1, 0xFC\n\ - mov r9, r1\n\ - movs r2, 0x13\n\ - mov r8, r2\n\ -_0807086C:\n\ - ldr r1, _08070930 @ =gSharedMem + 0x1C000\n\ - ldr r0, [r1]\n\ - ldr r1, _08070934 @ =StatDataTypes\n\ - adds r1, r7, r1\n\ - ldrb r1, [r1]\n\ - bl GetMonData\n\ - adds r1, r7, 0x6\n\ - lsls r1, 1\n\ - ldr r2, _08070938 @ =gSharedMem + 0x1B264\n\ - adds r1, r2, r1\n\ - strh r0, [r1]\n\ - lsls r6, r7, 1\n\ - adds r6, r2, r6\n\ - ldrh r1, [r6]\n\ - subs r0, r1\n\ - strh r0, [r6]\n\ - adds r0, r7, 0\n\ - movs r1, 0x3\n\ - bl __udivsi3\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - lsls r4, r0, 3\n\ - adds r4, r0\n\ - adds r4, 0xB\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - adds r0, r7, 0\n\ - movs r1, 0x3\n\ - bl __umodsi3\n\ - adds r5, r0, 0\n\ - lsls r5, 1\n\ - adds r5, 0x1\n\ - lsls r5, 24\n\ - lsrs r5, 24\n\ - ldr r1, _0807093C @ =StatNames\n\ - lsls r0, r7, 2\n\ - adds r0, r1\n\ - ldr r1, [r0]\n\ - mov r0, r10\n\ - bl StringCopy\n\ - adds r2, r0, 0\n\ - mov r0, r9\n\ - strb r0, [r2]\n\ - adds r2, 0x1\n\ - mov r1, r8\n\ - strb r1, [r2]\n\ - adds r2, 0x1\n\ - movs r0, 0x2E\n\ - strb r0, [r2]\n\ - adds r2, 0x1\n\ - adds r0, r2, 0\n\ - ldr r1, _08070940 @ =gOtherText_TallPlusAndRightArrow\n\ - bl StringCopy\n\ - adds r2, r0, 0\n\ - mov r0, r9\n\ - strb r0, [r2]\n\ - adds r2, 0x1\n\ - mov r1, r8\n\ - strb r1, [r2]\n\ - adds r2, 0x1\n\ - movs r0, 0x34\n\ - strb r0, [r2]\n\ - adds r2, 0x1\n\ - movs r0, 0\n\ - ldrsh r1, [r6, r0]\n\ - adds r0, r2, 0\n\ - movs r2, 0x1\n\ - movs r3, 0x2\n\ - bl ConvertIntToDecimalStringN\n\ - adds r4, 0x1\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - mov r0, r10\n\ - adds r1, r4, 0\n\ - adds r2, r5, 0\n\ - bl Menu_PrintText\n\ - adds r0, r7, 0x1\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - cmp r7, 0x5\n\ - bls _0807086C\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0807092C: .4byte gStringVar1\n\ -_08070930: .4byte gSharedMem + 0x1C000\n\ -_08070934: .4byte StatDataTypes\n\ -_08070938: .4byte gSharedMem + 0x1B264\n\ -_0807093C: .4byte StatNames\n\ -_08070940: .4byte gOtherText_TallPlusAndRightArrow\n\ - .syntax divided\n"); -} -#endif void PrintNewStatsInLevelUpWindow(u8 taskId) { @@ -5526,24 +4840,13 @@ void PrintNewStatsInLevelUpWindow(u8 taskId) void RedrawPokemonInfoInMenu(u8 monIndex, struct Pokemon *pokemon) { - u8 statusAndPkrs; - bool8 isDoubleBattle; - u16 currentHP; - u16 maxHP; + u8 statusAndPkrs = GetMonStatusAndPokerus(pokemon); u8 icon; - statusAndPkrs = GetMonStatusAndPokerus(pokemon); if (statusAndPkrs == 0 || statusAndPkrs == 6) - { PartyMenuUpdateLevelOrStatus(pokemon, monIndex); - } - - isDoubleBattle = IsDoubleBattle(); - currentHP = GetMonData(pokemon, MON_DATA_HP); - maxHP = GetMonData(pokemon, MON_DATA_MAX_HP); - - PartyMenuDoPrintHP(monIndex, isDoubleBattle, currentHP, maxHP); + PartyMenuDoPrintHP(monIndex, IsDoubleBattle(), GetMonData(pokemon, MON_DATA_HP), GetMonData(pokemon, MON_DATA_MAX_HP)); PartyMenuTryDrawHPBar(monIndex, pokemon); icon = GetMonIconSpriteId(ewram1C000.unk4, monIndex); @@ -5569,45 +4872,45 @@ void Task_RareCandy3(u8 taskId) switch (learnedMove) { - case 0: - // No move is learned. - evolutionSpecies = GetEvolutionTargetSpecies(ewram1C000.pokemon, 0, 0); - if (evolutionSpecies != 0) - { - gCB2_AfterEvolution = sub_80A53F8; - BeginEvolutionScene(ewram1C000.pokemon, evolutionSpecies, TRUE, ewram1C000.unk5); - DestroyTask(taskId); - } - else - { - sub_8070D90(taskId); - } - break; - case 0xFFFF: - // Mon already knows 4 moves. - GetMonNickname(ewram1C000.pokemon, gStringVar1); - StringCopy(gStringVar2, gMoveNames[gMoveToLearn]); - - StringExpandPlaceholders(gStringVar4, gOtherText_WantsToLearn); - sub_806E834(gStringVar4, 1); - - ewram1C000.unk8 = gMoveToLearn; - gTasks[taskId].func = sub_806F358; - break; - case 0xFFFE: - // Move was already known by the mon. - gTasks[taskId].func = TeachMonMoveInPartyMenu; - break; - default: - // Mon automatically learned a move because it knew less than four moves. - GetMonNickname(ewram1C000.pokemon, gStringVar1); - StringCopy(gStringVar2, gMoveNames[learnedMove]); - - StringExpandPlaceholders(gStringVar4, gOtherText_LearnedMove); - sub_806E834(gStringVar4, 1); - - gTasks[taskId].func = Task_TeamMonTMMove3; - break; + case 0: + // No move is learned. + evolutionSpecies = GetEvolutionTargetSpecies(ewram1C000.pokemon, 0, 0); + if (evolutionSpecies != 0) + { + gCB2_AfterEvolution = sub_80A53F8; + BeginEvolutionScene(ewram1C000.pokemon, evolutionSpecies, TRUE, ewram1C000.unk5); + DestroyTask(taskId); + } + else + { + sub_8070D90(taskId); + } + break; + case 0xFFFF: + // Mon already knows 4 moves. + GetMonNickname(ewram1C000.pokemon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[gMoveToLearn]); + + StringExpandPlaceholders(gStringVar4, gOtherText_WantsToLearn); + sub_806E834(gStringVar4, 1); + + ewram1C000.unk8 = gMoveToLearn; + gTasks[taskId].func = sub_806F358; + break; + case 0xFFFE: + // Move was already known by the mon. + gTasks[taskId].func = TeachMonMoveInPartyMenu; + break; + default: + // Mon automatically learned a move because it knew less than four moves. + GetMonNickname(ewram1C000.pokemon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[learnedMove]); + + StringExpandPlaceholders(gStringVar4, gOtherText_LearnedMove); + sub_806E834(gStringVar4, 1); + + gTasks[taskId].func = Task_TeamMonTMMove3; + break; } } } @@ -5621,45 +4924,45 @@ void TeachMonMoveInPartyMenu(u8 taskId) learnedMove = MonTryLearningNewMove(ewram1C000.pokemon, FALSE); switch (learnedMove) { - case 0: - // No move is learned. - evolutionSpecies = GetEvolutionTargetSpecies(ewram1C000.pokemon, 0, 0); - if (evolutionSpecies != 0) - { - gCB2_AfterEvolution = sub_80A53F8; - BeginEvolutionScene(ewram1C000.pokemon, evolutionSpecies, TRUE, ewram1C000.unk5); - DestroyTask(taskId); - } - else - { - sub_8070D90(taskId); - } - break; - case 0xFFFF: - // Mon already knows 4 moves. - GetMonNickname(ewram1C000.pokemon, gStringVar1); - StringCopy(gStringVar2, gMoveNames[gMoveToLearn]); + case 0: + // No move is learned. + evolutionSpecies = GetEvolutionTargetSpecies(ewram1C000.pokemon, 0, 0); + if (evolutionSpecies != 0) + { + gCB2_AfterEvolution = sub_80A53F8; + BeginEvolutionScene(ewram1C000.pokemon, evolutionSpecies, TRUE, ewram1C000.unk5); + DestroyTask(taskId); + } + else + { + sub_8070D90(taskId); + } + break; + case 0xFFFF: + // Mon already knows 4 moves. + GetMonNickname(ewram1C000.pokemon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[gMoveToLearn]); - StringExpandPlaceholders(gStringVar4, gOtherText_WantsToLearn); - sub_806E834(gStringVar4, 1); + StringExpandPlaceholders(gStringVar4, gOtherText_WantsToLearn); + sub_806E834(gStringVar4, 1); - ewram1C000.unk8 = gMoveToLearn; - gTasks[taskId].func = sub_806F358; - break; - case 0xFFFE: - // Move was already known by the mon. Go on the the next move to be learned. - TeachMonMoveInPartyMenu(taskId); - break; - default: - // Mon automatically learned a move because it knew less than four moves. - GetMonNickname(ewram1C000.pokemon, gStringVar1); - StringCopy(gStringVar2, gMoveNames[learnedMove]); + ewram1C000.unk8 = gMoveToLearn; + gTasks[taskId].func = sub_806F358; + break; + case 0xFFFE: + // Move was already known by the mon. Go on the the next move to be learned. + TeachMonMoveInPartyMenu(taskId); + break; + default: + // Mon automatically learned a move because it knew less than four moves. + GetMonNickname(ewram1C000.pokemon, gStringVar1); + StringCopy(gStringVar2, gMoveNames[learnedMove]); - StringExpandPlaceholders(gStringVar4, gOtherText_LearnedMove); - sub_806E834(gStringVar4, 1); + StringExpandPlaceholders(gStringVar4, gOtherText_LearnedMove); + sub_806E834(gStringVar4, 1); - gTasks[taskId].func = Task_TeamMonTMMove3; - break; + gTasks[taskId].func = Task_TeamMonTMMove3; + break; } } diff --git a/src/field/pokeblock.c b/src/field/pokeblock.c index b4be44aa2..6804f55d6 100644 --- a/src/field/pokeblock.c +++ b/src/field/pokeblock.c @@ -462,7 +462,7 @@ void debug_sub_8120F98(void) static void sub_810BB0C(void) { BasicInitMenuWindow(&gWindowTemplate_81E6E34); - sub_8072BD8(ItemId_GetItem(ITEM_POKEBLOCK_CASE)->name, 2, 1, 0x48); + sub_8072BD8(ItemId_GetName(ITEM_POKEBLOCK_CASE), 2, 1, 0x48); } static void sub_810BB30(void) @@ -481,7 +481,7 @@ static void sub_810BB88(u8 a0) u8 y; u8 *buf; BasicInitMenuWindow(&gWindowTemplate_81E6E34); - for (i=a0; i<=a0+8; i++) + for (i = a0; i <= a0 + 8; i++) { y = (i - a0) << 1; if (i == gUnknown_02039248.unk2) @@ -1070,7 +1070,7 @@ s8 GetFirstFreePokeblockSlot(void) return -1; } -bool8 sub_810CA34(struct Pokeblock *pokeblock) +bool8 sub_810CA34(const struct Pokeblock *pokeblock) { s8 idx = GetFirstFreePokeblockSlot(); if (idx == -1) diff --git a/src/field/region_map.c b/src/field/region_map.c index 7bfda1a81..6d50701d6 100644 --- a/src/field/region_map.c +++ b/src/field/region_map.c @@ -1411,22 +1411,26 @@ static const u8 sUnknown_083E7920[][3] = {0, 49, 0}, }; -struct UnknownStruct4 +static const u8 *const sEverGrandeCityAreaNames[] = { - const u8 *const *unk0; - u16 mapSectionId; - u16 flag; + OtherText_PokeLeague, + OtherText_PokeCenter, }; -static const u8 *const sEverGrandeCityAreaNames[] = {OtherText_PokeLeague, OtherText_PokeCenter}; +struct MultiPartMapSection +{ + const u8 *const *partNames; + u16 mapSectionId; + u16 requiredFlag; +}; -const struct UnknownStruct4 gUnknown_083E79C0[1] = +// Map sections that are divided into multiple parts. Ever Grande City is the only one. +static const struct MultiPartMapSection sMultiPartMapSections[1] = { {sEverGrandeCityAreaNames, MAPSEC_EVER_GRANDE_CITY, FLAG_SYS_POKEMON_LEAGUE_FLY}, }; -// XXX: what is this? -static u8 *const ewram_ = gSharedMem; +static struct UnknownStruct3 *const sFlyDataPtr = (struct UnknownStruct3 *)gSharedMem; static const struct SpritePalette sFlyTargetIconSpritePalette = {sFlyTargetIcons_Pal, 2}; @@ -1547,10 +1551,10 @@ void CB2_InitFlyRegionMap(void) Menu_EraseScreen(); break; case 3: - InitRegionMap(&ewram0_3.regionMap, 0); + InitRegionMap(&sFlyDataPtr->regionMap, 0); CreateRegionMapCursor(0, 0); CreateRegionMapPlayerIcon(1, 1); - ewram0_3.unk6 = ewram0_3.regionMap.mapSectionId; + sFlyDataPtr->unk6 = sFlyDataPtr->regionMap.mapSectionId; StringFill(ewramBlankMapName, CHAR_SPACE, 12); PrintFlyTargetName(); break; @@ -1593,36 +1597,34 @@ static void VBlankCB_FlyRegionMap(void) void CB2_FlyRegionMap(void) { - ewram0_3.unk0(); + sFlyDataPtr->unk0(); AnimateSprites(); BuildOamBuffer(); } void sub_80FC244(void (*func)(void)) { - ewram0_3.unk0 = func; - ewram0_3.unk4 = 0; + sFlyDataPtr->unk0 = func; + sFlyDataPtr->unk4 = 0; } static void PrintFlyTargetName(void) { - if (ewram0_3.regionMap.unk16 == 2 || ewram0_3.regionMap.unk16 == 4) + if (sFlyDataPtr->regionMap.unk16 == 2 || sFlyDataPtr->regionMap.unk16 == 4) { + bool8 drawFrameDisabled = FALSE; u16 i; - bool32 drawFrameDisabled = FALSE; - for (i = 0; i < ARRAY_COUNT(gUnknown_083E79C0); i++) + for (i = 0; i < ARRAY_COUNT(sMultiPartMapSections); i++) { - const struct UnknownStruct4 *r4 = &gUnknown_083E79C0[i]; - - if (ewram0_3.regionMap.mapSectionId == r4->mapSectionId) + if (sFlyDataPtr->regionMap.mapSectionId == sMultiPartMapSections[i].mapSectionId) { - if (FlagGet(r4->flag)) + if (FlagGet(sMultiPartMapSections[i].requiredFlag)) { Menu_DrawStdWindowFrame(16, 14, 29, 19); - Menu_PrintText(ewram0_3.regionMap.mapSectionName, 17, 15); - MenuPrint_RightAligned(r4->unk0[ewram0_3.regionMap.everGrandeCityArea], 29, 17); - return; + Menu_PrintText(sFlyDataPtr->regionMap.mapSectionName, 17, 15); + MenuPrint_RightAligned(sMultiPartMapSections[i].partNames[sFlyDataPtr->regionMap.everGrandeCityArea], 29, 17); + drawFrameDisabled = TRUE; } break; } @@ -1631,7 +1633,7 @@ static void PrintFlyTargetName(void) if (!drawFrameDisabled) { Menu_DrawStdWindowFrame(16, 16, 29, 19); - Menu_PrintText(ewram0_3.regionMap.mapSectionName, 17, 17); + Menu_PrintText(sFlyDataPtr->regionMap.mapSectionName, 17, 17); Menu_EraseWindowRect(16, 14, 29, 15); } } @@ -1732,7 +1734,7 @@ static void CreateSpecialAreaFlyTargetIcons(void) static void SpriteCB_FlyTargetIcons(struct Sprite *sprite) { // Blink if our mapSectionId is the one selected on the map - if (ewram0_3.regionMap.mapSectionId == sprite->data[0]) + if (sFlyDataPtr->regionMap.mapSectionId == sprite->data[0]) { // Toggle visibility every 16 frames sprite->data[1]++; @@ -1751,11 +1753,11 @@ static void SpriteCB_FlyTargetIcons(struct Sprite *sprite) static void sub_80FC5B4(void) { - switch (ewram0_3.unk4) + switch (sFlyDataPtr->unk4) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); - ewram0_3.unk4++; + sFlyDataPtr->unk4++; break; case 1: if (UpdatePaletteFade() != 0) @@ -1767,7 +1769,7 @@ static void sub_80FC5B4(void) static void sub_80FC600(void) { - if (ewram0_3.unk4 == 0) + if (sFlyDataPtr->unk4 == 0) { switch (sub_80FAB60()) { @@ -1779,7 +1781,7 @@ static void sub_80FC600(void) PrintFlyTargetName(); break; case INPUT_EVENT_A_BUTTON: - if (ewram0_3.regionMap.unk16 == 2 || ewram0_3.regionMap.unk16 == 4) + if (sFlyDataPtr->regionMap.unk16 == 2 || sFlyDataPtr->regionMap.unk16 == 4) { m4aSongNumStart(SE_SELECT); ewramA6E = 1; @@ -1797,11 +1799,11 @@ static void sub_80FC600(void) void sub_80FC69C(void) { - switch (ewram0_3.unk4) + switch (sFlyDataPtr->unk4) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - ewram0_3.unk4++; + sFlyDataPtr->unk4++; break; case 1: if (UpdatePaletteFade() != 0) @@ -1809,7 +1811,7 @@ void sub_80FC69C(void) FreeRegionMapIconResources(); if (ewramA6E != 0) { - switch (ewram0_3.regionMap.mapSectionId) + switch (sFlyDataPtr->regionMap.mapSectionId) { case MAPSEC_SOUTHERN_ISLAND: sub_8053538(22); @@ -1821,13 +1823,13 @@ void sub_80FC69C(void) sub_8053538((gSaveBlock2.playerGender == MALE) ? 12 : 13); break; case MAPSEC_EVER_GRANDE_CITY: - sub_8053538((FlagGet(FLAG_SYS_POKEMON_LEAGUE_FLY) && ewram0_3.regionMap.everGrandeCityArea == 0) ? 20 : 11); + sub_8053538((FlagGet(FLAG_SYS_POKEMON_LEAGUE_FLY) && sFlyDataPtr->regionMap.everGrandeCityArea == 0) ? 20 : 11); break; default: - if (sUnknown_083E7920[ewram0_3.regionMap.mapSectionId][2] != 0) - sub_8053538(sUnknown_083E7920[ewram0_3.regionMap.mapSectionId][2]); + if (sUnknown_083E7920[sFlyDataPtr->regionMap.mapSectionId][2] != 0) + sub_8053538(sUnknown_083E7920[sFlyDataPtr->regionMap.mapSectionId][2]); else - warp1_set_2(sUnknown_083E7920[ewram0_3.regionMap.mapSectionId][0], sUnknown_083E7920[ewram0_3.regionMap.mapSectionId][1], -1); + warp1_set_2(sUnknown_083E7920[sFlyDataPtr->regionMap.mapSectionId][0], sUnknown_083E7920[sFlyDataPtr->regionMap.mapSectionId][1], -1); break; } sub_80865BC(); @@ -1839,3 +1841,131 @@ void sub_80FC69C(void) break; } } + +#if DEBUG + +void debug_sub_8110CCC(void) +{ + bool8 r7 = FALSE; + u16 i; + s16 indent; + + for (i = 0; i < ARRAY_COUNT(sMultiPartMapSections); i++) + { + if (sFlyDataPtr->regionMap.mapSectionId == sMultiPartMapSections[i].mapSectionId) + { + if (FlagGet(sMultiPartMapSections[i].requiredFlag)) + { + indent = 12 - StringLength(sMultiPartMapSections[i].partNames[sFlyDataPtr->regionMap.everGrandeCityArea]); + if (indent < 0) + indent = 0; + r7 = TRUE; + Menu_DrawStdWindowFrame(16, 14, 29, 19); + Menu_PrintText(sFlyDataPtr->regionMap.mapSectionName, 17, 15); + Menu_PrintText(sMultiPartMapSections[i].partNames[sFlyDataPtr->regionMap.everGrandeCityArea], 17 + indent, 17); + } + break; + } + } + if (!r7) + { + Menu_DrawStdWindowFrame(16, 16, 29, 19); + Menu_PrintText(sFlyDataPtr->regionMap.mapSectionName, 17, 17); + Menu_EraseWindowRect(16, 14, 29, 15); + } +} + +void debug_sub_8110D84(void) +{ + switch (sFlyDataPtr->unk4) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + sFlyDataPtr->unk4++; + break; + case 1: + if (!UpdatePaletteFade()) + sFlyDataPtr->unk4++; + break; + case 2: + switch (sub_80FAB60()) + { + case 0: + break; + case 3: + debug_sub_8110CCC(); + break; + case 4: + if (sFlyDataPtr->regionMap.unk16 != 0) + { + m4aSongNumStart(SE_SELECT); + gSharedMem[0xA6E] = 1; // TODO: what is this? + sub_80FC244(sub_80FC69C); + } + break; + case 5: + m4aSongNumStart(SE_SELECT); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + sFlyDataPtr->unk4++; + break; + } + break; + case 3: + if (!UpdatePaletteFade()) + SetMainCallback2(sub_805469C); + break; + case 4: + if (sub_80FAB60() != 0) + { + debug_sub_8110CCC(); + } + else if (gMain.newKeys & A_BUTTON) + { + sub_80FBCA0(); + sub_80FAEC4(); + sFlyDataPtr->unk4++; + } + break; + case 5: + if (sub_80FAFC0() == 0) + { + CreateRegionMapCursor(0, 0); + sFlyDataPtr->unk4++; + } + break; + case 6: + if (sub_80FAB60() != 0) + { + debug_sub_8110CCC(); + } + if (gMain.newKeys & A_BUTTON) // no "else if" like above? + { + sub_80FBCA0(); + sub_80FAEC4(); + sFlyDataPtr->unk4++; + } + break; + case 7: + if (sub_80FAFC0() == 0) + { + CreateRegionMapCursor(0, 0); + sFlyDataPtr->unk4 = 3; + } + break; + } +} + +void debug_sub_8110F28(void) +{ + CB2_InitFlyRegionMap(); + + if (gMain.callback2 == CB2_FlyRegionMap) + { + sub_80FBF94(); + sub_80FC244(debug_sub_8110D84); + debug_sub_8110CCC(); + } +} + +#endif + diff --git a/src/field/secret_base.c b/src/field/secret_base.c index 8b67a2cd9..210d49835 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -23,6 +23,7 @@ #include "menu.h" #include "menu_helpers.h" #include "metatile_behavior.h" +#include "new_game.h" #include "palette.h" #include "pokemon.h" #include "overworld.h" @@ -127,10 +128,11 @@ void ClearSecretBase(struct SecretBaseRecord *record) { u16 i; u16 j; + record->secretBaseId = 0; - for (i=0; i<OT_NAME_LENGTH; i++) + for (i = 0; i < OT_NAME_LENGTH; i++) record->playerName[i] = 0xff; - for (i=0; i<4; i++) + for (i = 0; i < 4; i++) record->trainerId[i] = 0x00; record->sbr_field_e = 0; record->sbr_field_10 = 0; @@ -139,14 +141,15 @@ void ClearSecretBase(struct SecretBaseRecord *record) record->gender = 0; record->sbr_field_1_5 = 0; record->sbr_field_1_6 = 0; - for (i=0; i<16; i++) { + for (i = 0; i < 16; i++) + { record->decorations[i] = 0; record->decorationPos[i] = 0; } - for (i=0; i<6; i++) { - for (j=0; j<4; j++) { + for (i = 0; i < 6; i++) + { + for (j = 0; j < 4; j++) record->partyMoves[i * 4 + j] = 0; - } record->partyPersonality[i] = 0; record->partyEVs[i] = 0; record->partySpecies[i] = 0; @@ -175,17 +178,20 @@ void sub_80BB5D0(void) void sub_80BB5E4(void) { u16 i; + gSpecialVar_Result = 0; - for (i = 0; i < MAX_SECRET_BASES; i++) { - if (gUnknown_020387DC != gSaveBlock1.secretBases[i].secretBaseId) - continue; - gSpecialVar_Result = 1; - VarSet(VAR_CURRENT_SECRET_BASE, i); - break; + for (i = 0; i < MAX_SECRET_BASES; i++) + { + if (gUnknown_020387DC == gSaveBlock1.secretBases[i].secretBaseId) + { + gSpecialVar_Result = 1; + VarSet(VAR_CURRENT_SECRET_BASE, i); + break; + } } } -void sub_80BB63C(void) // 80bb63c +void sub_80BB63C(void) { if (gSaveBlock1.secretBases[0].secretBaseId) gSpecialVar_Result = 1; @@ -193,7 +199,7 @@ void sub_80BB63C(void) // 80bb63c gSpecialVar_Result = 0; } -u8 sub_80BB66C(void) // 80bb66c +u8 sub_80BB66C(void) { s16 x, y; s16 v0; @@ -214,7 +220,7 @@ u8 sub_80BB66C(void) // 80bb66c return 0; } -void sub_80BB70C(void) // 80bb70c +void sub_80BB70C(void) { gSpecialVar_0x8007 = sub_80BB66C(); } @@ -222,9 +228,11 @@ void sub_80BB70C(void) // 80bb70c s16 unref_sub_80BB724(u16 *a0, u8 a1) { u16 v2; - for (v2=0; v2<0x200; v2++) { + + for (v2 = 0; v2 < 0x200; v2++) + { if ((a0[v2] & 0xFFF) == a1) - return (s16)v2; + return v2; } return -1; } @@ -232,9 +240,13 @@ s16 unref_sub_80BB724(u16 *a0, u8 a1) void sub_80BB764(s16 *arg1, s16 *arg2, u16 arg3) { s16 x, y; - for (y=0; y<gMapHeader.mapData->height; y++) { - for (x=0; x<gMapHeader.mapData->width; x++) { - if ((gMapHeader.mapData->map[y * gMapHeader.mapData->width + x] & 0x3ff) == arg3) { + + for (y=0; y<gMapHeader.mapData->height; y++) + { + for (x=0; x<gMapHeader.mapData->width; x++) + { + if ((gMapHeader.mapData->map[y * gMapHeader.mapData->width + x] & 0x3ff) == arg3) + { *arg1 = x; *arg2 = y; return; @@ -248,17 +260,22 @@ void sub_80BB800(void) s16 x, y; s16 tile_id; u16 idx; + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); tile_id = MapGridGetMetatileIdAt(x, y); - for (idx=0; idx<7; idx++) { - if (gUnknown_083D1358[idx].unk_083D1358_0 == tile_id) { + for (idx = 0; idx < 7; idx++) + { + if (gUnknown_083D1358[idx].unk_083D1358_0 == tile_id) + { MapGridSetMetatileIdAt(x, y, gUnknown_083D1358[idx].unk_083D1358_1 | 0xc00); CurrentMapDrawMetatileAt(x, y); return; } } - for (idx=0; idx<7; idx++) { - if (gUnknown_083D1358[idx].unk_083D1358_1 == tile_id) { + for (idx = 0; idx < 7; idx++) + { + if (gUnknown_083D1358[idx].unk_083D1358_1 == tile_id) + { MapGridSetMetatileIdAt(x, y, gUnknown_083D1358[idx].unk_083D1358_0 | 0xc00); CurrentMapDrawMetatileAt(x, y); return; @@ -269,7 +286,9 @@ void sub_80BB800(void) u8 sub_80BB8A8(u8 *arg1) { u8 idx; - for (idx=0; idx<7; idx++) { + + for (idx=0; idx<7; idx++) + { if (arg1[idx] == EOS) return idx; } @@ -280,10 +299,10 @@ void sub_80BB8CC(void) { u8 nameLength; u16 idx; + gSaveBlock1.secretBases[0].secretBaseId = gUnknown_020387DC; - for (idx=0; idx<4; idx++) { + for (idx=0; idx<4; idx++) gSaveBlock1.secretBases[0].trainerId[idx] = gSaveBlock2.playerTrainerId[idx]; - } VarSet(VAR_CURRENT_SECRET_BASE, 0); nameLength = sub_80BB8A8(gSaveBlock2.playerName); memset(gSaveBlock1.secretBases[0].playerName, 0xFF, OT_NAME_LENGTH); @@ -296,13 +315,20 @@ void sub_80BB970(struct MapEvents *events) { u16 bgevidx, idx, jdx; s16 tile_id; - for (bgevidx=0; bgevidx<events->bgEventCount; bgevidx++) { - if (events->bgEvents[bgevidx].kind == 8) { - for (jdx=0; jdx<MAX_SECRET_BASES; jdx++) { - if (gSaveBlock1.secretBases[jdx].secretBaseId == events->bgEvents[bgevidx].bgUnion.secretBaseId) { + + for (bgevidx = 0; bgevidx < events->bgEventCount; bgevidx++) + { + if (events->bgEvents[bgevidx].kind == 8) + { + for (jdx = 0; jdx < MAX_SECRET_BASES; jdx++) + { + if (gSaveBlock1.secretBases[jdx].secretBaseId == events->bgEvents[bgevidx].bgUnion.secretBaseId) + { tile_id = MapGridGetMetatileIdAt(events->bgEvents[bgevidx].x + 7, events->bgEvents[bgevidx].y + 7); - for (idx=0; idx<7; idx++) { - if (gUnknown_083D1358[idx].unk_083D1358_0 == tile_id) { + for (idx = 0; idx < 7; idx++) + { + if (gUnknown_083D1358[idx].unk_083D1358_0 == tile_id) + { MapGridSetMetatileIdAt(events->bgEvents[bgevidx].x + 7, events->bgEvents[bgevidx].y + 7, gUnknown_083D1358[idx].unk_083D1358_1 | 0xc00); break; } @@ -323,14 +349,14 @@ void sub_80BBA14(void) void sub_80BBA48(u8 taskid) { u16 curbaseid; - switch (gTasks[taskid].data[0]) { + switch (gTasks[taskid].data[0]) + { case 0: gTasks[taskid].data[0] = 1; break; case 1: - if (!gPaletteFade.active) { + if (!gPaletteFade.active) gTasks[taskid].data[0] = 2; - } break; case 2: curbaseid = VarGet(VAR_CURRENT_SECRET_BASE); @@ -362,7 +388,8 @@ bool8 sub_80BBB24(void) void sub_80BBB50(u8 taskid) { FieldObjectTurn(&(gMapObjects[gPlayerAvatar.mapObjectId]), 2); - if (IsWeatherNotFadingIn() == 1) { + if (IsWeatherNotFadingIn() == 1) + { EnableBothScriptContexts(); DestroyTask(taskid); } @@ -371,6 +398,7 @@ void sub_80BBB50(u8 taskid) void sub_80BBB90(void) { s16 x, y; + ScriptContext2_Enable(); HideMapNamePopup(); sub_80BB764(&x, &y, 0x220); @@ -383,7 +411,9 @@ void sub_80BBB90(void) void sub_80BBBEC(u8 taskid) { s8 idx; - if (!gPaletteFade.active) { + + if (!gPaletteFade.active) + { idx = 4 * (gUnknown_020387DC / 10); Overworld_SetWarpDestination(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, gUnknown_083D1374[idx + 2], gUnknown_083D1374[idx + 3]); warp_in(); @@ -411,17 +441,29 @@ void sub_80BBCCC(u8 flagIn) { u16 curBaseId; u16 x, y; - if (CurrentMapIsSecretBase()) { + + if (CurrentMapIsSecretBase()) + { curBaseId = VarGet(VAR_CURRENT_SECRET_BASE); - for (x=0; x<16; x++) { - if (gSaveBlock1.secretBases[curBaseId].decorations[x] > 0 && gSaveBlock1.secretBases[curBaseId].decorations[x] <= 0x78 && gDecorations[gSaveBlock1.secretBases[curBaseId].decorations[x]].permission != DECORPERM_SOLID_MAT) { - sub_80FF394((gSaveBlock1.secretBases[curBaseId].decorationPos[x] >> 4) + 7, (gSaveBlock1.secretBases[curBaseId].decorationPos[x] & 0xF) + 7, gSaveBlock1.secretBases[curBaseId].decorations[x]); + for (x = 0; x < 16; x++) + { + if (gSaveBlock1.secretBases[curBaseId].decorations[x] > 0 + && gSaveBlock1.secretBases[curBaseId].decorations[x] <= 0x78 + && gDecorations[gSaveBlock1.secretBases[curBaseId].decorations[x]].permission != DECORPERM_SOLID_MAT) + { + sub_80FF394( + (gSaveBlock1.secretBases[curBaseId].decorationPos[x] >> 4) + 7, + (gSaveBlock1.secretBases[curBaseId].decorationPos[x] & 0xF) + 7, + gSaveBlock1.secretBases[curBaseId].decorations[x]); } } - if (curBaseId != 0) { + if (curBaseId != 0) + { sub_80BB764(&x, &y, 0x220); MapGridSetMetatileIdAt(x + 7, y + 7, 0xe21); - } else if (flagIn == 1 && VarGet(VAR_0x4089) == 1) { + } + else if (flagIn == 1 && VarGet(VAR_0x4089) == 1) + { sub_80BB764(&x, &y, 0x220); MapGridSetMetatileIdAt(x + 7, y + 7, 0xe0a); } @@ -438,38 +480,47 @@ void sub_80BBDD0(void) u8 permission; u8 ndecor; u16 curBase = VarGet(VAR_CURRENT_SECRET_BASE); - if (!CurrentMapIsSecretBase()) { + + if (!CurrentMapIsSecretBase()) + { roomdecor = gSaveBlock1.playerRoomDecor; roomdecorpos = gSaveBlock1.playerRoomDecorPos; ndecor = 12; - } else { + } + else + { roomdecor = gSaveBlock1.secretBases[curBase].decorations; roomdecorpos = gSaveBlock1.secretBases[curBase].decorationPos; ndecor = 16; } - for (decidx=0; decidx<ndecor; decidx++) { - if (roomdecor[decidx] != DECOR_NONE) { + for (decidx = 0; decidx < ndecor; decidx++) + { + if (roomdecor[decidx] != DECOR_NONE) + { permission = gDecorations[roomdecor[decidx]].permission; if (permission == DECORPERM_SOLID_MAT) { - for (objid=0; objid<gMapHeader.events->mapObjectCount; objid++) { + for (objid = 0; objid < gMapHeader.events->mapObjectCount; objid++) + { if (gMapHeader.events->mapObjects[objid].flagId == gSpecialVar_0x8004 + 0xAE) break; } - if (objid == gMapHeader.events->mapObjectCount) - continue; - gSpecialVar_0x8006 = roomdecorpos[decidx] >> 4; - gSpecialVar_0x8007 = roomdecorpos[decidx] & 0xF; - metatile = MapGridGetMetatileBehaviorAt(gSpecialVar_0x8006 + 7, gSpecialVar_0x8007 + 7); - if (sub_80572D8(metatile) == TRUE || sub_80572EC(metatile) == TRUE) { - gSpecialVar_Result = gMapHeader.events->mapObjects[objid].graphicsId + VAR_0x3F20; - VarSet(gSpecialVar_Result, gDecorations[roomdecor[decidx]].tiles[0]); - gSpecialVar_Result = gMapHeader.events->mapObjects[objid].localId; - FlagClear(gSpecialVar_0x8004 + 0xAE); - show_sprite(gSpecialVar_Result, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); - sub_805C0F8(gSpecialVar_Result, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, gSpecialVar_0x8006, gSpecialVar_0x8007); - sub_805C78C(gSpecialVar_Result, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); - gSpecialVar_0x8004 ++; + if (objid != gMapHeader.events->mapObjectCount) + { + gSpecialVar_0x8006 = roomdecorpos[decidx] >> 4; + gSpecialVar_0x8007 = roomdecorpos[decidx] & 0xF; + metatile = MapGridGetMetatileBehaviorAt(gSpecialVar_0x8006 + 7, gSpecialVar_0x8007 + 7); + if (sub_80572D8(metatile) == TRUE || sub_80572EC(metatile) == TRUE) + { + gSpecialVar_Result = gMapHeader.events->mapObjects[objid].graphicsId + VAR_0x3F20; + VarSet(gSpecialVar_Result, gDecorations[roomdecor[decidx]].tiles[0]); + gSpecialVar_Result = gMapHeader.events->mapObjects[objid].localId; + FlagClear(gSpecialVar_0x8004 + 0xAE); + show_sprite(gSpecialVar_Result, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); + sub_805C0F8(gSpecialVar_Result, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, gSpecialVar_0x8006, gSpecialVar_0x8007); + sub_805C78C(gSpecialVar_Result, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); + gSpecialVar_0x8004 ++; + } } } } @@ -485,8 +536,12 @@ void sub_80BBFA4(void) void sub_80BBFD8(struct MapPosition *position, struct MapEvents *events) { s16 bgevtidx; - for (bgevtidx=0; bgevtidx<events->bgEventCount; bgevtidx++) { - if (events->bgEvents[bgevtidx].kind == 8 && position->x == events->bgEvents[bgevtidx].x + 7 && position->y == events->bgEvents[bgevtidx].y + 7) { + + for (bgevtidx = 0; bgevtidx < events->bgEventCount; bgevtidx++) + { + if (events->bgEvents[bgevtidx].kind == 8 && position->x == events->bgEvents[bgevtidx].x + 7 + && position->y == events->bgEvents[bgevtidx].y + 7) + { gUnknown_020387DC = events->bgEvents[bgevtidx].bgUnion.secretBaseId; break; } @@ -511,15 +566,15 @@ bool8 sub_80BC050(void) void sub_80BC074(u8 taskid) { - switch (gTasks[taskid].data[0]) { + switch (gTasks[taskid].data[0]) + { case 0: ScriptContext2_Enable(); gTasks[taskid].data[0] = 1; break; case 1: - if (!gPaletteFade.active) { + if (!gPaletteFade.active) gTasks[taskid].data[0] = 2; - } break; case 2: copy_saved_warp2_bank_and_enter_x_to_warp1(0x7E); @@ -532,12 +587,14 @@ void sub_80BC074(u8 taskid) } } -void sub_80BC0F8(void) { +void sub_80BC0F8(void) +{ CreateTask(sub_80BC074, 0); FadeScreen(1, 0); } -void sub_80BC114(void) { +void sub_80BC114(void) +{ if (gSaveBlock1.secretBases[0].secretBaseId != gUnknown_020387DC) gSpecialVar_Result = 1; else @@ -547,14 +604,17 @@ void sub_80BC114(void) { u8 sub_80BC14C(u8 sbid) { s16 idx; - for (idx=0; idx<MAX_SECRET_BASES; idx++) { + + for (idx = 0; idx < MAX_SECRET_BASES; idx++) + { if (gSaveBlock1.secretBases[idx].secretBaseId == sbid) return idx; } return 0; } -u8 *sub_80BC190(u8 *dest, u8 arg1) { // 80bc190 +u8 *sub_80BC190(u8 *dest, u8 arg1) +{ u8 local1; u8 *str; @@ -570,12 +630,14 @@ u8 *sub_80BC190(u8 *dest, u8 arg1) { // 80bc190 #endif } -u8 *GetSecretBaseMapName(u8 *dest) { +u8 *GetSecretBaseMapName(u8 *dest) +{ gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(VAR_CURRENT_SECRET_BASE)].secretBaseId; return sub_80BC190(dest, VarGet(VAR_CURRENT_SECRET_BASE)); } -void BufferSecretBaseOwnerName(void) { +void BufferSecretBaseOwnerName(void) +{ u8 *var0 = gSaveBlock1.secretBases[(u8)VarGet(VAR_CURRENT_SECRET_BASE)].playerName; u8 *var1 = gStringVar1; u8 var2 = sub_80BB8A8(var0); @@ -583,13 +645,16 @@ void BufferSecretBaseOwnerName(void) { *var3 = EOS; } -bool8 sub_80BC268(u8 i) { // 80bc268 +bool8 sub_80BC268(u8 i) +{ if (gSaveBlock1.secretBases[i].sbr_field_1_6) return TRUE; - return FALSE; + else + return FALSE; } -u8 sub_80BC298(struct Pokemon *mon) { // 80bc298 +u8 sub_80BC298(struct Pokemon *mon) +{ u16 evsum = GetMonData(mon, MON_DATA_HP_EV); evsum += GetMonData(mon, MON_DATA_ATK_EV); evsum += GetMonData(mon, MON_DATA_DEF_EV); @@ -804,10 +869,11 @@ void sub_80BC474(void) { u16 eventId; struct MapEvents *mapEvents = gMapHeader.events; + for (eventId = 0; eventId < mapEvents->bgEventCount; eventId++) { if (mapEvents->bgEvents[eventId].kind == 8 - && gSaveBlock1.secretBases[0].secretBaseId == mapEvents->bgEvents[eventId].bgUnion.secretBaseId) + && gSaveBlock1.secretBases[0].secretBaseId == mapEvents->bgEvents[eventId].bgUnion.secretBaseId) { u16 i; s16 tileId = MapGridGetMetatileIdAt(mapEvents->bgEvents[eventId].x + 7, mapEvents->bgEvents[eventId].y + 7); @@ -845,33 +911,23 @@ u8 sub_80BC538(void) { s16 secretBaseIndex; u8 retVal = 0; - + for (secretBaseIndex = 1; secretBaseIndex < MAX_SECRET_BASES; secretBaseIndex++) { if (sub_80BC268(secretBaseIndex) == TRUE) - { retVal++; - } } - return retVal; } void sub_80BC56C(void) { - u8 secretBaseIndex = sub_80BC14C(gUnknown_020387DC); - if (sub_80BC268(secretBaseIndex) == TRUE) - { + if (sub_80BC268(sub_80BC14C(gUnknown_020387DC)) == TRUE) gSpecialVar_Result = 1; - } else if (sub_80BC538() > 9) - { gSpecialVar_Result = 2; - } else - { gSpecialVar_Result = 0; - } } void sub_80BC5BC(void) @@ -897,18 +953,15 @@ void Task_SecretBasePC_Registry(u8 taskId) ScriptContext2_Enable(); ClearVerticalScrollIndicatorPalettes(); LoadScrollIndicatorPalette(); - + taskData = gTasks[taskId].data; taskData[0] = sub_80BC538(); if (taskData[0] != 0) { - if (taskData[0] > 7) { + if (taskData[0] > 7) taskData[3] = 7; - } else - { taskData[3] = taskData[0]; - } taskData[1] = 0; taskData[2] = 0; @@ -964,7 +1017,9 @@ void sub_80BC6B0(u8 taskId) Menu_BlankWindowRect(18, ((n << 25) + (1 << 26)) >> 24, 28, 18); // the shifts are needed to match } else + { CreateVerticalScrollIndicators(BOTTOM_ARROW, 0xbc, 0x98); + } if (taskData[2] == 0) DestroyVerticalScrollIndicator(TOP_ARROW); @@ -989,12 +1044,12 @@ void sub_80BC824(u8 taskId) { if (taskData[1]) { - PlaySE(5); + PlaySE(SE_SELECT); taskData[1] = Menu_MoveCursor(-1); } else if (taskData[2]) { - PlaySE(5); + PlaySE(SE_SELECT); taskData[2]--; sub_80BC6B0(taskId); } @@ -1005,20 +1060,20 @@ void sub_80BC824(u8 taskId) { if (taskData[2] + taskData[1] != taskData[0]) { - PlaySE(5); + PlaySE(SE_SELECT); taskData[2]++; sub_80BC6B0(taskId); } } else { - PlaySE(5); + PlaySE(SE_SELECT); taskData[1] = Menu_MoveCursor(1); } } else if (gMain.newKeys & A_BUTTON) { - PlaySE(5); + PlaySE(SE_SELECT); if (taskData[1] + taskData[2] == taskData[0]) { Menu_DestroyCursor(); @@ -1034,7 +1089,7 @@ void sub_80BC824(u8 taskId) } else if (gMain.newKeys & B_BUTTON) { - PlaySE(5); + PlaySE(SE_SELECT); Menu_DestroyCursor(); Menu_EraseWindowRect(0, 0, 29, 19); sub_80BCC54(taskId); @@ -1078,7 +1133,7 @@ void sub_80BC9E4(u8 taskId) { if (Menu_GetCursorPos()) { - PlaySE(5); + PlaySE(SE_SELECT); Menu_MoveCursor(-1); } } @@ -1086,18 +1141,18 @@ void sub_80BC9E4(u8 taskId) { if (Menu_GetCursorPos() != 1) { - PlaySE(5); + PlaySE(SE_SELECT); Menu_MoveCursor(1); } } else if (gMain.newKeys & A_BUTTON) { - PlaySE(5); + PlaySE(SE_SELECT); gUnknown_083D13D4[Menu_GetCursorPos()].func(taskId); } else if (gMain.newKeys & B_BUTTON) { - PlaySE(5); + PlaySE(SE_SELECT); sub_80BCBF8(taskId); } } @@ -1132,14 +1187,10 @@ void sub_80BCB10(u8 taskId) taskData[0]--; if (taskData[2] > 0) - { taskData[2]--; - } if (taskData[0] < 8) - { taskData[3]--; - } sub_80BC7D8(taskId); gTasks[taskId].func = sub_80BC824; @@ -1180,13 +1231,9 @@ void sub_80BCC54(u8 taskId) DestroyVerticalScrollIndicator(BOTTOM_ARROW); if (curBaseIndex == 0) - { ScriptContext1_SetupScript(gUnknown_0815F399); - } else - { ScriptContext1_SetupScript(gUnknown_0815F49A); - } DestroyTask(taskId); } @@ -1216,7 +1263,8 @@ const u8 *GetSecretBaseTrainerLoseText(void) void unref_sub_80BCD7C(u8 secretBaseIndex) { u16 i; - for (i = 0; i == 0; i++) + + for (i = 0; i < 1; i++) { gSaveBlock1.secretBases[secretBaseIndex].partyPersonality[i] = i + 1; gSaveBlock1.secretBases[secretBaseIndex].partyMoves[i * 4] = i + 1; @@ -1230,8 +1278,8 @@ void unref_sub_80BCD7C(u8 secretBaseIndex) void sub_80BCE1C(void) { u16 curBaseIndex = VarGet(VAR_CURRENT_SECRET_BASE); - sub_810FB10(1); + sub_810FB10(1); CreateSecretBaseEnemyParty(&gSaveBlock1.secretBases[curBaseIndex]); } @@ -1249,9 +1297,7 @@ void sub_80BCE90() u8 i; for (i = 0; i < MAX_SECRET_BASES; i++) - { gSaveBlock1.secretBases[i].sbr_field_1_5 = 0; - } FlagSet(FLAG_DAILY_UNKNOWN_8C2); } @@ -1281,28 +1327,18 @@ void sub_80BCF1C(u8 taskId) behavior = MapGridGetMetatileBehaviorAt(x, y); if (sub_8057350(behavior) == TRUE) - { DoYellowCave4Sparkle(); - } else if (sub_8057314(behavior) == TRUE) - { sub_80C68A4(MapGridGetMetatileIdAt(x, y), x, y); - } else if (sub_8057328(behavior) == TRUE) - { sub_80C6A54(x, y); - } else if (sub_805733C(behavior) == TRUE) - { DoDecorationSoundEffect(MapGridGetMetatileIdAt(x, y)); - } } break; case 2: if (!FieldEffectActiveListContains(taskData[4])) - { taskData[1] = 1; - } break; } } @@ -1320,9 +1356,7 @@ bool8 sub_80BD070(struct SecretBaseRecord *baseA, struct SecretBaseRecord *baseB for (i = 0; i < 4; i++) { if (baseA->trainerId[i] != baseB->trainerId[i]) - { return FALSE; - } } return TRUE; @@ -1335,9 +1369,7 @@ bool8 sub_80BD0A0(struct SecretBaseRecord *baseA, struct SecretBaseRecord *baseB for (i = 0; i < OT_NAME_LENGTH && (baseA->playerName[i] != 0xFF || baseB->playerName[i] != 0xFF); i++) { if (baseA->playerName[i] != baseB->playerName[i]) - { return FALSE; - } } return TRUE; @@ -1346,12 +1378,9 @@ bool8 sub_80BD0A0(struct SecretBaseRecord *baseA, struct SecretBaseRecord *baseB bool8 sub_80BD0EC(struct SecretBaseRecord *baseA, struct SecretBaseRecord *baseB) { if (baseA->gender == baseB->gender && sub_80BD070(baseA, baseB) && sub_80BD0A0(baseA, baseB)) - { return TRUE; - } - - - return FALSE; + else + return FALSE; } s16 sub_80BD12C(u8 secretBaseId) @@ -1361,9 +1390,7 @@ s16 sub_80BD12C(u8 secretBaseId) for (i = 0; i < MAX_SECRET_BASES; i++) { if (gSaveBlock1.secretBases[i].secretBaseId == secretBaseId) - { return i; - } } return -1; @@ -1376,9 +1403,7 @@ u8 sub_80BD170(void) for (i = 1; i < MAX_SECRET_BASES; i++) { if (gSaveBlock1.secretBases[i].secretBaseId == 0) - { return i; - } } return 0; @@ -1391,9 +1416,7 @@ u8 sub_80BD1B0(void) for (i = 1; i < MAX_SECRET_BASES; i++) { if (gSaveBlock1.secretBases[i].sbr_field_1_6 == 0 && gSaveBlock1.secretBases[i].sbr_field_1_0 == 0) - { return i; - } } return 0; @@ -1404,9 +1427,7 @@ u8 sub_80BD1FC(struct SecretBaseRecord *secretBase) s16 secretBaseIndex; if (secretBase->secretBaseId == 0) - { return 0; - } secretBaseIndex = sub_80BD12C(secretBase->secretBaseId); if (secretBaseIndex != 0) @@ -1414,11 +1435,9 @@ u8 sub_80BD1FC(struct SecretBaseRecord *secretBase) if (secretBaseIndex != -1) { if (gSaveBlock1.secretBases[secretBaseIndex].sbr_field_1_0 == 1) - { return 0; - } if (gSaveBlock1.secretBases[secretBaseIndex].sbr_field_1_6 != 2 - || secretBase->sbr_field_1_0 == 1) + || secretBase->sbr_field_1_0 == 1) { sub_80BD034(secretBaseIndex, secretBase); return secretBaseIndex; @@ -1456,7 +1475,7 @@ void sub_80BD280(void) for (j = i + 1; j < MAX_SECRET_BASES; j++) { if ((!secretBases[i].sbr_field_1_6 && secretBases[j].sbr_field_1_6 == 1) - || (secretBases[i].sbr_field_1_6 == 2 && secretBases[j].sbr_field_1_6 != 2)) + || (secretBases[i].sbr_field_1_6 == 2 && secretBases[j].sbr_field_1_6 != 2)) { temp = secretBases[i]; secretBases[i] = secretBases[j]; @@ -1473,9 +1492,7 @@ void sub_80BD328(struct SecretBaseRecord *secretBases, u8 b) for (i = 1; i < MAX_SECRET_BASES; i++) { if (secretBases[i].sbr_field_1_6 == b) - { sub_80BD1FC(&secretBases[i]); - } } } @@ -1540,9 +1557,7 @@ void sub_80BD3DC(struct SecretBaseRecord *basesA, struct SecretBaseRecord *bases } if (var1 == 7) - { break; - } } } @@ -1588,16 +1603,12 @@ void sub_80BD514(struct SecretBaseRecord *basesA, struct SecretBaseRecord *bases if (basesA[i].secretBaseId) { if (basesA[i].sbr_field_1_6 == 1) - { basesA[i].sbr_field_1_0 = 1; - } if (!sub_80BD494(&basesA[i], basesB, i)) { if (!sub_80BD494(&basesA[i], basesC, i)) - { sub_80BD494(&basesA[i], basesD, i); - } } } } @@ -1609,9 +1620,7 @@ void sub_80BD514(struct SecretBaseRecord *basesA, struct SecretBaseRecord *bases basesB[i].sbr_field_1_5 = 0; if (!sub_80BD494(&basesB[i], basesC, i)) - { sub_80BD494(&basesB[i], basesD, i); - } } } @@ -1624,9 +1633,7 @@ void sub_80BD514(struct SecretBaseRecord *basesA, struct SecretBaseRecord *bases } if (basesD[i].secretBaseId) - { basesD[i].sbr_field_1_5 = 0; - } } } @@ -1648,183 +1655,16 @@ void sub_80BD610(struct SecretBaseRecord *basesA, struct SecretBaseRecord *bases sub_80BD328(basesC, 0); } -#if DEBUG -__attribute__((naked)) -void sub_80BD674(void *playerRecords, u32 size, u8 c) -{ - asm("\ - push {r4, r5, r6, r7, lr}\n\ - add r6, r0, #0\n\ - add r5, r1, #0\n\ - lsl r2, r2, #0x18\n\ - lsr r7, r2, #0x18\n\ - ldr r0, ._503 @ gUnknown_020297ED\n\ - ldrb r0, [r0]\n\ - cmp r0, #0\n\ - bne ._498 @cond_branch\n\ - mov r0, #0x60\n\ - bl FlagGet\n\ - lsl r0, r0, #0x18\n\ - cmp r0, #0\n\ - bne ._498 @cond_branch\n\ - b ._520\n\ -._498:\n\ - bl GetLinkPlayerCount\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - cmp r0, #0x2\n\ - beq ._500 @cond_branch\n\ - cmp r0, #0x3\n\ - beq ._501 @cond_branch\n\ - b ._505\n\ -._504:\n\ - .align 2, 0\n\ -._503:\n\ - .word gUnknown_020297ED\n\ -._500:\n\ - lsl r4, r5, #0x1\n\ - add r0, r6, r4\n\ - mov r1, #0x0\n\ - add r2, r5, #0\n\ - bl memset\n\ - add r4, r4, r5\n\ - add r4, r6, r4\n\ - add r0, r4, #0\n\ - mov r1, #0x0\n\ - add r2, r5, #0\n\ - bl memset\n\ - b ._505\n\ -._501:\n\ - lsl r0, r5, #0x1\n\ - add r0, r0, r5\n\ - add r0, r6, r0\n\ - mov r1, #0x0\n\ - add r2, r5, #0\n\ - bl memset\n\ -._505:\n\ - cmp r7, #0x1\n\ - beq ._506 @cond_branch\n\ - cmp r7, #0x1\n\ - bgt ._507 @cond_branch\n\ - cmp r7, #0\n\ - beq ._508 @cond_branch\n\ - b ._515\n\ -._507:\n\ - cmp r7, #0x2\n\ - beq ._510 @cond_branch\n\ - cmp r7, #0x3\n\ - beq ._511 @cond_branch\n\ - b ._515\n\ -._508:\n\ - add r0, r6, r5\n\ - lsl r2, r5, #0x1\n\ - add r1, r6, r2\n\ - add r2, r2, r5\n\ - add r2, r6, r2\n\ - bl sub_80BD610\n\ - b ._515\n\ -._506:\n\ - lsl r1, r5, #0x1\n\ - add r0, r6, r1\n\ - add r1, r1, r5\n\ - add r1, r6, r1\n\ - add r2, r6, #0\n\ - bl sub_80BD610\n\ - b ._515\n\ -._510:\n\ - lsl r0, r5, #0x1\n\ - add r0, r0, r5\n\ - add r0, r6, r0\n\ - add r2, r6, r5\n\ - add r1, r6, #0\n\ - bl sub_80BD610\n\ - b ._515\n\ -._511:\n\ - add r1, r6, r5\n\ - lsl r2, r5, #0x1\n\ - add r2, r6, r2\n\ - add r0, r6, #0\n\ - bl sub_80BD610\n\ -._515:\n\ - mov r3, #0x1\n\ - ldr r6, ._521 @ gSaveBlock1\n\ - mov r5, #0x10\n\ - neg r5, r5\n\ - ldr r4, ._521 + 4 @ 0x1a09\n\ -._517:\n\ - lsl r0, r3, #0x2\n\ - add r0, r0, r3\n\ - lsl r0, r0, #0x5\n\ - add r0, r0, r6\n\ - add r2, r0, r4\n\ - ldrb r1, [r2]\n\ - lsl r0, r1, #0x1c\n\ - lsr r0, r0, #0x1c\n\ - cmp r0, #0x1\n\ - bne ._516 @cond_branch\n\ - mov r0, #0x3f\n\ - and r0, r0, r1\n\ - mov r1, #0x40\n\ - orr r0, r0, r1\n\ - and r0, r0, r5\n\ - strb r0, [r2]\n\ -._516:\n\ - add r0, r3, #1\n\ - lsl r0, r0, #0x10\n\ - lsr r3, r0, #0x10\n\ - cmp r3, #0x13\n\ - bls ._517 @cond_branch\n\ - bl sub_80BD280\n\ - mov r3, #0x1\n\ - ldr r4, ._521 @ gSaveBlock1\n\ - ldr r6, ._521 + 4 @ 0x1a09\n\ - add r7, r4, #0\n\ - mov r5, #0x3f\n\ -._519:\n\ - lsl r0, r3, #0x2\n\ - add r0, r0, r3\n\ - lsl r0, r0, #0x5\n\ - add r0, r0, r4\n\ - add r2, r0, r6\n\ - ldrb r1, [r2]\n\ - lsr r0, r1, #0x6\n\ - cmp r0, #0x2\n\ - bne ._518 @cond_branch\n\ - add r0, r5, #0\n\ - and r0, r0, r1\n\ - strb r0, [r2]\n\ -._518:\n\ - add r0, r3, #1\n\ - lsl r0, r0, #0x10\n\ - lsr r3, r0, #0x10\n\ - cmp r3, #0x13\n\ - bls ._519 @cond_branch\n\ - ldr r0, ._521 + 8 @ 0x1a16\n\ - add r2, r7, r0\n\ - ldrh r1, [r2]\n\ - ldr r0, ._521 + 12 @ 0xffff\n\ - cmp r1, r0\n\ - beq ._520 @cond_branch\n\ - add r0, r1, #1\n\ - strh r0, [r2]\n\ -._520:\n\ - pop {r4, r5, r6, r7}\n\ - pop {r0}\n\ - bx r0\n\ -._522:\n\ - .align 2, 0\n\ -._521:\n\ - .word gSaveBlock1\n\ - .word 0x1a09\n\ - .word 0x1a16\n\ - .word 0xffff"); -} -#else void sub_80BD674(void *playerRecords, u32 size, u8 c) { - if (FlagGet(FLAG_RECEIVED_SECRET_POWER)) + if ( +#if DEBUG + gUnknown_020297ED != 0 || +#endif + FlagGet(FLAG_RECEIVED_SECRET_POWER)) { u16 i; + u8 numLinkedPlayers = GetLinkPlayerCount(); switch (numLinkedPlayers) { @@ -1867,15 +1707,10 @@ void sub_80BD674(void *playerRecords, u32 size, u8 c) for (i = 1; i < MAX_SECRET_BASES; i++) { if (gSaveBlock1.secretBases[i].sbr_field_1_6 == 2) - { gSaveBlock1.secretBases[i].sbr_field_1_6 = 0; - } } if (gSaveBlock1.secretBases[0].sbr_field_e != 0xFFFF) - { gSaveBlock1.secretBases[0].sbr_field_e++; - } } } -#endif diff --git a/src/field/shop.c b/src/field/shop.c index 0f53eef17..87dbbeb97 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/slot_machine.c b/src/field/slot_machine.c index 2c97c146d..8075f24e4 100644 --- a/src/field/slot_machine.c +++ b/src/field/slot_machine.c @@ -8,6 +8,7 @@ #include "sound.h" #include "main.h" #include "slot_machine.h" +#include "string_util.h" #include "decompress.h" #include "trig.h" #include "graphics.h" @@ -17,6 +18,93 @@ #include "menu.h" #include "ewram.h" +enum +{ + SLOT_MACHINE_TAG_7_RED, + SLOT_MACHINE_TAG_7_BLUE, + SLOT_MACHINE_TAG_AZURILL, + SLOT_MACHINE_TAG_LOTAD, + SLOT_MACHINE_TAG_CHERRY, + SLOT_MACHINE_TAG_POWER, + SLOT_MACHINE_TAG_REPLAY +}; + +enum +{ + SLOT_MACHINE_MATCHED_1CHERRY, + SLOT_MACHINE_MATCHED_2CHERRY, + SLOT_MACHINE_MATCHED_REPLAY, + SLOT_MACHINE_MATCHED_LOTAD, + SLOT_MACHINE_MATCHED_AZURILL, + SLOT_MACHINE_MATCHED_POWER, + SLOT_MACHINE_MATCHED_777_MIXED, + SLOT_MACHINE_MATCHED_777_RED, + SLOT_MACHINE_MATCHED_777_BLUE, + SLOT_MACHINE_MATCHED_NONE +}; + +struct SlotMachineEwramStruct +{ + /*0x00*/ u8 state; + /*0x01*/ u8 unk01; + /*0x02*/ u8 pikaPower; + /*0x03*/ u8 unk03; + /*0x04*/ u8 unk04; + /*0x05*/ u8 unk05; + /*0x06*/ u8 unk06; + /*0x07*/ u8 unk07; + /*0x08*/ u16 matchedSymbols; + /*0x0A*/ u8 unk0A; + /*0x0B*/ u8 unk0B; + /*0x0C*/ s16 coins; + /*0x0E*/ s16 payout; + /*0x10*/ s16 unk10; + /*0x12*/ s16 bet; + /*0x14*/ s16 unk14; + /*0x16*/ s16 unk16; + /*0x18*/ s16 unk18; + /*0x1A*/ s16 unk1A; + /*0x1C*/ s16 unk1C[3]; + /*0x22*/ u16 unk22[3]; + /*0x28*/ s16 reelPositions[3]; + /*0x2E*/ s16 unk2E[3]; + /*0x34*/ s16 unk34[3]; + /*0x3A*/ u8 reelTasks[3]; + /*0x3D*/ u8 unk3D; + /*0x3E*/ u8 unk3E; + /*0x3F*/ u8 unk3F; + /*0x40*/ u8 unk40; + /*0x41*/ u8 unk41; + /*0x42*/ u8 unk42; + /*0x43*/ u8 unk43; + /*0x44*/ u8 unk44[5]; + /*0x49*/ u8 unk49[2]; + /*0x49*/ u8 unk4B[3]; + /*0x4E*/ u8 unk4E[2]; + /*0x50*/ u8 unk50[2]; + /*0x52*/ u8 unk52[2]; + /*0x54*/ u8 unk54[4]; + /*0x58*/ u16 win0h; + /*0x5a*/ u16 win0v; + /*0x5c*/ u16 winIn; + /*0x5e*/ u16 winOut; + /*0x60*/ u16 backupMapMusic; + /*0x64*/ MainCallback prevMainCb; +#if DEBUG + u32 unk68; + u32 unk6C; + u32 unk70; + u32 unk74; + u32 unk78; + u32 unk7C; + u32 unk80; + u32 unk84; + u32 unk88; + u32 unk8C; + s32 unk90; +#endif +}; + struct UnkStruct1 { /*0x00*/ u8 unk00; @@ -30,9 +118,6 @@ struct UnkStruct1 #define SLOTMACHINE_GFX_TILES 236 #endif -// TODO: figure out which functions are static and which are not. -#define static - static void CB2_SlotMachineSetup(void); static void CB2_SlotMachineLoop(void); static void PlaySlotMachine_Internal(u8 arg0, MainCallback cb); @@ -79,7 +164,9 @@ static bool8 sub_81023E0(struct Task *task); static bool8 sub_81023FC(struct Task *task); static bool8 sub_8102424(struct Task *task); static bool8 sub_8102460(struct Task *task); +#if DEBUG static bool8 debug_sub_8116E74(struct Task *); +#endif static void sub_8102484(void); static void sub_81024F0(void); static bool8 sub_8102540(void); @@ -227,12 +314,21 @@ static void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4); static void sub_81065DC(void); #if DEBUG -__attribute__((section(".bss"))) u8 unk_debug_bss_1_0 = 0; -__attribute__((section(".bss"))) u8 unk_debug_bss_1_1 = 0; -__attribute__((section(".bss"))) u8 unk_debug_bss_1_2 = 0; -__attribute__((section(".bss"))) u8 unk_debug_bss_1_3 = 0; -__attribute__((section(".bss"))) u8 unk_debug_bss_1_4 = 0; -__attribute__((section(".bss"))) u32 unk_debug_bss_1_8 = 0; +static void debug_sub_811B5D0(void); +static void debug_sub_811B620(void); +static void debug_sub_811B5B4(s32 *, s32); +static void debug_sub_811B894(void); +static u8 debug_sub_811B634(void); +static void debug_sub_811B654(u8 taskId); +#endif + +#if DEBUG +static u8 unk_debug_bss_1_0; +static u8 unk_debug_bss_1_1; +static u8 unk_debug_bss_1_2; +static u8 unk_debug_bss_1_3; +static u8 unk_debug_bss_1_4; +static u32 unk_debug_bss_1_8; #endif static const struct UnkStruct1 *const gUnknown_083ED048[]; @@ -391,135 +487,6 @@ static void SlotMachineSetup_2_1(void) static const s16 gUnknown_083ECCF8[][2]; -#if DEBUG -__attribute__((naked)) -static void SlotMachineSetup_0_1(void) -{ - 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\ - bl sub_81019EC\n\ - ldr r5, ._43 @ \n\ - mov r4, #0x0\n\ - strb r4, [r5]\n\ - strb r4, [r5, #0x2]\n\ - bl Random\n\ - mov r1, #0x1\n\ - and r1, r1, r0\n\ - strb r1, [r5, #0x3]\n\ - strb r4, [r5, #0x4]\n\ - mov r0, #0x0\n\ - strh r4, [r5, #0x8]\n\ - strb r0, [r5, #0xa]\n\ - strb r0, [r5, #0xb]\n\ - ldr r0, ._43 + 4 @ \n\ - ldr r1, ._43 + 8 @ \n\ - add r0, r0, r1\n\ - ldrh r0, [r0]\n\ - strh r0, [r5, #0xc]\n\ - strh r4, [r5, #0xe]\n\ - strh r4, [r5, #0x10]\n\ - strh r4, [r5, #0x12]\n\ - strh r4, [r5, #0x18]\n\ - mov r0, #0x8\n\ - strh r0, [r5, #0x1a]\n\ - add r1, r5, #0\n\ - add r1, r1, #0x58\n\ - mov r0, #0xf0\n\ - strh r0, [r1]\n\ - add r1, r1, #0x2\n\ - mov r0, #0xa0\n\ - strh r0, [r1]\n\ - add r0, r5, #0\n\ - add r0, r0, #0x5c\n\ - mov r1, #0x3f\n\ - strh r1, [r0]\n\ - add r0, r0, #0x2\n\ - strh r1, [r0]\n\ - bl GetCurrentMapMusic\n\ - add r1, r5, #0\n\ - add r1, r1, #0x60\n\ - strh r0, [r1]\n\ - mov r7, #0x0\n\ - add r6, r5, #0\n\ - ldr r2, ._43 + 12 @ \n\ - mov sl, r2\n\ - mov r0, #0x1c\n\ - add r0, r0, r6\n\ - mov r9, r0\n\ -._41:\n\ - lsl r5, r7, #0x1\n\ - mov r1, #0x22\n\ - add r1, r1, r6\n\ - mov r8, r1\n\ - add r1, r5, r1\n\ - mov r0, #0x0\n\ - strh r0, [r1]\n\ - add r4, r6, #0\n\ - add r4, r4, #0x28\n\ - add r4, r5, r4\n\ - ldrb r0, [r6, #0x3]\n\ - lsl r0, r0, #0x1\n\ - lsl r1, r7, #0x2\n\ - add r0, r0, r1\n\ - add r0, r0, sl\n\ - mov r2, #0x0\n\ - ldsh r0, [r0, r2]\n\ - mov r1, #0x15\n\ - bl __modsi3\n\ - strh r0, [r4]\n\ - add r5, r5, r9\n\ - mov r1, #0x0\n\ - ldsh r0, [r4, r1]\n\ - lsl r1, r0, #0x1\n\ - add r1, r1, r0\n\ - lsl r1, r1, #0x3\n\ - mov r2, #0xfc\n\ - lsl r2, r2, #0x1\n\ - add r0, r2, #0\n\ - sub r0, r0, r1\n\ - strh r0, [r5]\n\ - mov r1, #0x0\n\ - ldsh r0, [r5, r1]\n\ - add r1, r2, #0\n\ - bl __modsi3\n\ - strh r0, [r5]\n\ - add r0, r7, #1\n\ - lsl r0, r0, #0x18\n\ - lsr r7, r0, #0x18\n\ - cmp r7, #0x2\n\ - bls ._41 @cond_branch\n\ - bl debug_sub_811B5D0\n\ - ldr r0, ._43 + 16 @ \n\ - ldrb r0, [r0]\n\ - cmp r0, #0\n\ - beq ._42 @cond_branch\n\ - mov r1, r8\n\ - sub r1, r1, #0x22\n\ - mov r0, #0xfa\n\ - lsl r0, r0, #0x2\n\ - strh r0, [r1, #0xc]\n\ -._42:\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\ -._44:\n\ - .align 2, 0\n\ -._43:\n\ - .word +0x2000000\n\ - .word gSaveBlock1\n\ - .word 0x494\n\ - .word gUnknown_083ECCF8\n\ - .word unk_debug_bss_1_1"); -} -#else static void SlotMachineSetup_0_1(void) { u8 i; @@ -550,8 +517,12 @@ static void SlotMachineSetup_0_1(void) eSlotMachine->unk1C[i] = 0x1f8 - eSlotMachine->reelPositions[i] * 24; eSlotMachine->unk1C[i] %= 0x1f8; } -} +#if DEBUG + debug_sub_811B5D0(); + if (unk_debug_bss_1_1 != 0) + eSlotMachine->coins = 1000; #endif +} static void SlotMachineSetup_3_0(void) { @@ -634,7 +605,8 @@ static bool8 (*const gUnknown_083ECAAC[])(struct Task *task) = static void sub_8101D24(u8 taskId) { - while (gUnknown_083ECAAC[eSlotMachine->state](gTasks + taskId)); + while (gUnknown_083ECAAC[eSlotMachine->state](gTasks + taskId)) + ; } static bool8 sub_8101D5C(struct Task *task) @@ -648,9 +620,7 @@ static bool8 sub_8101D5C(struct Task *task) static bool8 sub_8101D8C(struct Task *task) { if (!gPaletteFade.active) - { eSlotMachine->state++; - } return FALSE; } @@ -676,265 +646,53 @@ static bool8 sub_8101DB0(struct Task *task) static bool8 sub_8101DF4(struct Task *task) { if (sub_8104E18()) - { eSlotMachine->state = 4; - } return FALSE; } -#if DEBUG -__attribute__((naked)) -static bool8 sub_8101E10(struct Task *task) -{ - asm("\ - push {lr}\n\ - mov r0, #0x0\n\ - bl sub_8104CAC\n\ - ldr r2, ._70 @ \n\ - mov r0, #0x5\n\ - strb r0, [r2]\n\ - ldr r0, ._70 + 4 @ \n\ - ldrb r0, [r0]\n\ - cmp r0, #0\n\ - beq ._67 @cond_branch\n\ - ldr r0, ._70 + 8 @ \n\ - ldrb r0, [r0]\n\ - cmp r0, #0\n\ - bne ._69 @cond_branch\n\ -._67:\n\ - mov r0, #0xc\n\ - ldsh r1, [r2, r0]\n\ - ldr r0, ._70 + 12 @ \n\ - cmp r1, r0\n\ - ble ._69 @cond_branch\n\ - mov r0, #0x17\n\ - strb r0, [r2]\n\ -._69:\n\ - mov r0, #0x1\n\ - pop {r1}\n\ - bx r1\n\ -._71:\n\ - .align 2, 0\n\ -._70:\n\ - .word +0x2000000\n\ - .word unk_debug_bss_1_1\n\ - .word unk_debug_bss_1_4\n\ - .word 0x270e"); -} -#else static bool8 sub_8101E10(struct Task *task) { sub_8104CAC(0); eSlotMachine->state = 5; - if (eSlotMachine->coins >= 9999) - { + if ( +#if DEBUG + (unk_debug_bss_1_1 == 0 || unk_debug_bss_1_4 == 0) && +#endif + eSlotMachine->coins >= 9999) eSlotMachine->state = 23; - } return TRUE; } -#endif -#if DEBUG -__attribute__((naked)) -static bool8 sub_8101E3C(struct Task *task) -{ - asm("\ - push {r4, r5, lr}\n\ - ldr r0, ._77 @ unk_debug_bss_1_1\n\ - ldrb r1, [r0]\n\ - add r3, r0, #0\n\ - ldr r5, ._77 + 4 @ gMain\n\ - cmp r1, #0\n\ - beq ._76 @cond_branch\n\ - ldr r2, ._77 + 8 @ unk_debug_bss_1_4\n\ - ldrb r0, [r2]\n\ - cmp r0, #0\n\ - beq ._76 @cond_branch\n\ - ldr r4, ._77 + 12 @ \n\ - mov r1, #0xc\n\ - ldsh r0, [r4, r1]\n\ - cmp r0, #0x3\n\ - ble ._74 @cond_branch\n\ - ldrh r1, [r5, #0x2c]\n\ - mov r0, #0x2\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._75 @cond_branch\n\ -._74:\n\ - mov r0, #0x0\n\ - strb r0, [r2]\n\ - b ._76\n\ -._78:\n\ - .align 2, 0\n\ -._77:\n\ - .word unk_debug_bss_1_1\n\ - .word gMain\n\ - .word unk_debug_bss_1_4\n\ - .word +0x2000000\n\ -._75:\n\ - mov r0, #0x0\n\ - bl sub_8103D50\n\ - mov r0, #0x1\n\ - bl sub_8103D50\n\ - mov r0, #0x2\n\ - bl sub_8103D50\n\ - ldrh r0, [r4, #0xc]\n\ - sub r0, r0, #0x3\n\ - strh r0, [r4, #0xc]\n\ - mov r0, #0x3\n\ - strh r0, [r4, #0x12]\n\ - mov r0, #0x9\n\ - strb r0, [r4]\n\ - b ._102\n\ -._76:\n\ - ldrb r0, [r3]\n\ - cmp r0, #0\n\ - beq ._81 @cond_branch\n\ - ldrh r1, [r5, #0x2e]\n\ - mov r0, #0x8\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._81 @cond_branch\n\ - bl debug_sub_811B620\n\ - ldr r1, ._83 @ \n\ - mov r0, #0x1d\n\ - strb r0, [r1]\n\ - b ._102\n\ -._84:\n\ - .align 2, 0\n\ -._83:\n\ - .word +0x2000000\n\ -._81:\n\ - ldrh r1, [r5, #0x2e]\n\ - mov r0, #0x4\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._85 @cond_branch\n\ - mov r0, #0x0\n\ - bl sub_8104AB8\n\ - ldr r1, ._87 @ \n\ - mov r0, #0x8\n\ - strb r0, [r1]\n\ - b ._102\n\ -._88:\n\ - .align 2, 0\n\ -._87:\n\ - .word +0x2000000\n\ -._85:\n\ - mov r0, #0x80\n\ - lsl r0, r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._89 @cond_branch\n\ - ldr r2, ._94 @ \n\ - mov r3, #0xc\n\ - ldsh r0, [r2, r3]\n\ - sub r0, r0, #0x3\n\ - mov r3, #0x12\n\ - ldsh r1, [r2, r3]\n\ - add r0, r0, r1\n\ - cmp r0, #0\n\ - blt ._90 @cond_branch\n\ - ldrh r4, [r2, #0x12]\n\ - add r0, r1, #0\n\ - cmp r0, #0x2\n\ - bgt ._91 @cond_branch\n\ -._92:\n\ - lsl r0, r4, #0x18\n\ - lsr r0, r0, #0x18\n\ - bl sub_8103D50\n\ - lsl r0, r4, #0x10\n\ - mov r2, #0x80\n\ - lsl r2, r2, #0x9\n\ - add r0, r0, r2\n\ - lsr r4, r0, #0x10\n\ - asr r0, r0, #0x10\n\ - cmp r0, #0x2\n\ - ble ._92 @cond_branch\n\ -._91:\n\ - ldr r1, ._94 @ \n\ - ldrh r0, [r1, #0xc]\n\ - sub r0, r0, #0x3\n\ - ldrh r3, [r1, #0x12]\n\ - add r0, r0, r3\n\ - strh r0, [r1, #0xc]\n\ - mov r0, #0x3\n\ - strh r0, [r1, #0x12]\n\ - mov r0, #0x9\n\ - strb r0, [r1]\n\ - mov r0, #0x5f\n\ - bl PlaySE\n\ - b ._102\n\ -._95:\n\ - .align 2, 0\n\ -._94:\n\ - .word +0x2000000\n\ -._90:\n\ - mov r0, #0x6\n\ - b ._96\n\ -._89:\n\ - mov r0, #0x80\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._98 @cond_branch\n\ - ldr r4, ._103 @ \n\ - mov r1, #0xc\n\ - ldsh r0, [r4, r1]\n\ - cmp r0, #0\n\ - beq ._98 @cond_branch\n\ - mov r0, #0x5f\n\ - bl PlaySE\n\ - ldrb r0, [r4, #0x12]\n\ - bl sub_8103D50\n\ - ldrh r0, [r4, #0xc]\n\ - sub r0, r0, #0x1\n\ - strh r0, [r4, #0xc]\n\ - ldrh r0, [r4, #0x12]\n\ - add r0, r0, #0x1\n\ - strh r0, [r4, #0x12]\n\ -._98:\n\ - ldr r0, ._103 @ \n\ - mov r2, #0x12\n\ - ldsh r1, [r0, r2]\n\ - add r2, r0, #0\n\ - ldr r5, ._103 + 4 @ \n\ - cmp r1, #0x2\n\ - bgt ._99 @cond_branch\n\ - cmp r1, #0\n\ - beq ._101 @cond_branch\n\ - ldrh r1, [r5, #0x2e]\n\ - mov r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._101 @cond_branch\n\ -._99:\n\ - mov r0, #0x9\n\ - strb r0, [r2]\n\ -._101:\n\ - ldrh r1, [r5, #0x2e]\n\ - mov r0, #0x2\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._102 @cond_branch\n\ - mov r0, #0x15\n\ -._96:\n\ - strb r0, [r2]\n\ -._102:\n\ - mov r0, #0x0\n\ - pop {r4, r5}\n\ - pop {r1}\n\ - bx r1\n\ -._104:\n\ - .align 2, 0\n\ -._103:\n\ - .word +0x2000000\n\ - .word gMain"); -} -#else static bool8 sub_8101E3C(struct Task *task) { s16 i; +#if DEBUG + if (unk_debug_bss_1_1 != 0 && unk_debug_bss_1_4 != 0) + { + if (eSlotMachine->coins <= 3 || (gMain.heldKeys & B_BUTTON)) + { + unk_debug_bss_1_4 = 0; + } + else + { + sub_8103D50(0); + sub_8103D50(1); + sub_8103D50(2); + eSlotMachine->coins -= 3; + eSlotMachine->bet = 3; + eSlotMachine->state = 9; + return 0; + } + } + if (unk_debug_bss_1_1 != 0 && (gMain.newKeys & 8)) + { + debug_sub_811B620(); + eSlotMachine->state = 29; + return 0; + } +#endif + if (gMain.newKeys & SELECT_BUTTON) { sub_8104AB8(0); @@ -945,9 +703,7 @@ static bool8 sub_8101E3C(struct Task *task) if (eSlotMachine->coins - (3 - eSlotMachine->bet) >= 0) { for (i = eSlotMachine->bet; i < 3; i++) - { sub_8103D50(i); - } eSlotMachine->coins -= (3 - eSlotMachine->bet); eSlotMachine->bet = 3; eSlotMachine->state = 9; @@ -968,17 +724,12 @@ static bool8 sub_8101E3C(struct Task *task) eSlotMachine->bet++; } if (eSlotMachine->bet >= 3 || (eSlotMachine->bet != 0 && gMain.newKeys & A_BUTTON)) - { eSlotMachine->state = 9; - } if (gMain.newKeys & B_BUTTON) - { eSlotMachine->state = 21; - } } return FALSE; } -#endif static void sub_8101F2C(const u8 *str) { @@ -1006,77 +757,10 @@ static bool8 sub_8101F60(struct Task *task) static bool8 sub_8101F88(struct Task *task) { if (sub_8104AEC()) - { eSlotMachine->state = 5; - } return FALSE; } -#if DEBUG -__attribute__((naked)) -static bool8 sub_8101FA4(struct Task *task) -{ - asm("\ - push {r4, lr}\n\ - add r4, r0, #0\n\ - bl sub_8102484\n\ - bl sub_8104DA4\n\ - mov r0, #0x0\n\ - bl sub_8102DEC\n\ - mov r0, #0x1\n\ - bl sub_8102DEC\n\ - mov r0, #0x2\n\ - bl sub_8102DEC\n\ - mov r0, #0x0\n\ - strh r0, [r4, #0x8]\n\ - ldr r4, ._115 @ \n\ - ldrb r1, [r4, #0x4]\n\ - mov r0, #0x20\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._113 @cond_branch\n\ - bl sub_810430C\n\ - mov r0, #0xa\n\ - b ._114\n\ -._116:\n\ - .align 2, 0\n\ -._115:\n\ - .word +0x2000000\n\ -._113:\n\ - mov r0, #0x1\n\ - bl sub_8104CAC\n\ - mov r0, #0xb\n\ -._114:\n\ - strb r0, [r4]\n\ - ldr r4, ._119 @ \n\ - mov r0, #0x8\n\ - strh r0, [r4, #0x1a]\n\ - ldrb r0, [r4, #0xa]\n\ - cmp r0, #0\n\ - beq ._117 @cond_branch\n\ - bl dp15_jump_random_unknown\n\ - strh r0, [r4, #0x1a]\n\ -._117:\n\ - ldr r0, ._119 + 4 @ \n\ - ldrb r0, [r0]\n\ - cmp r0, #0\n\ - beq ._118 @cond_branch\n\ - add r0, r4, #0\n\ - add r0, r0, #0x68\n\ - mov r1, #0x1\n\ - bl debug_sub_811B5B4\n\ -._118:\n\ - mov r0, #0x0\n\ - pop {r4}\n\ - pop {r1}\n\ - bx r1\n\ -._120:\n\ - .align 2, 0\n\ -._119:\n\ - .word +0x2000000\n\ - .word unk_debug_bss_1_1"); -} -#else static bool8 sub_8101FA4(struct Task *task) { sub_8102484(); @@ -1097,12 +781,13 @@ static bool8 sub_8101FA4(struct Task *task) } eSlotMachine->unk1A = 8; if (eSlotMachine->unk0A) - { eSlotMachine->unk1A = dp15_jump_random_unknown(); - } +#if DEBUG + if (unk_debug_bss_1_1 != 0) + debug_sub_811B5B4(&eSlotMachine->unk68, 1); +#endif return FALSE; } -#endif static bool8 sub_8102008(struct Task *task) { @@ -1115,134 +800,38 @@ static bool8 sub_8102008(struct Task *task) return FALSE; } -#if DEBUG -__attribute__((naked)) -static bool8 sub_8102034(struct Task *task) -{ - asm("\ - push {r4, lr}\n\ - ldrh r1, [r0, #0x8]\n\ - add r1, r1, #0x1\n\ - strh r1, [r0, #0x8]\n\ - lsl r1, r1, #0x10\n\ - asr r1, r1, #0x10\n\ - cmp r1, #0x1d\n\ - ble ._124 @cond_branch\n\ - ldr r0, ._127 @ unk_debug_bss_1_1\n\ - ldrb r0, [r0]\n\ - cmp r0, #0\n\ - beq ._126 @cond_branch\n\ - ldr r0, ._127 + 4 @ unk_debug_bss_1_4\n\ - ldrb r0, [r0]\n\ - cmp r0, #0\n\ - beq ._126 @cond_branch\n\ - ldr r4, ._127 + 8 @ unk_debug_bss_1_8\n\ - bl Random\n\ - mov r1, #0x1f\n\ - and r1, r1, r0\n\ - add r1, r1, #0x1\n\ - str r1, [r4]\n\ -._126:\n\ - bl sub_81024F0\n\ - ldr r1, ._127 + 12 @ \n\ - mov r0, #0xc\n\ - strb r0, [r1]\n\ -._124:\n\ - mov r0, #0x0\n\ - pop {r4}\n\ - pop {r1}\n\ - bx r1\n\ -._128:\n\ - .align 2, 0\n\ -._127:\n\ - .word unk_debug_bss_1_1\n\ - .word unk_debug_bss_1_4\n\ - .word unk_debug_bss_1_8\n\ - .word +0x2000000"); -} -#else static bool8 sub_8102034(struct Task *task) { if (++task->data[0] >= 30) { +#if DEBUG + if (unk_debug_bss_1_1 != 0 && unk_debug_bss_1_4 != 0) + unk_debug_bss_1_8 = (Random() & 0x1F) + 1; +#endif sub_81024F0(); eSlotMachine->state = 12; } return FALSE; } -#endif -#if DEBUG -__attribute__((naked)) -static bool8 sub_8102058(struct Task *task) -{ - asm("\ - push {r4, r5, lr}\n\ - ldr r0, ._133 @ unk_debug_bss_1_1\n\ - ldrb r0, [r0]\n\ - cmp r0, #0\n\ - beq ._130 @cond_branch\n\ - ldr r0, ._133 + 4 @ unk_debug_bss_1_4\n\ - ldrb r0, [r0]\n\ - cmp r0, #0\n\ - beq ._130 @cond_branch\n\ - ldr r5, ._133 + 8 @ unk_debug_bss_1_8\n\ - ldr r0, [r5]\n\ - sub r0, r0, #0x1\n\ - str r0, [r5]\n\ - cmp r0, #0\n\ - bne ._135 @cond_branch\n\ - mov r0, #0x18\n\ - bl PlaySE\n\ - ldr r4, ._133 + 12 @ \n\ - ldrb r0, [r4, #0x18]\n\ - bl sub_8102E1C\n\ - ldrb r0, [r4, #0x18]\n\ - bl sub_8103C14\n\ - bl Random\n\ - mov r1, #0x1f\n\ - and r1, r1, r0\n\ - add r1, r1, #0x1\n\ - str r1, [r5]\n\ - b ._132\n\ -._134:\n\ - .align 2, 0\n\ -._133:\n\ - .word unk_debug_bss_1_1\n\ - .word unk_debug_bss_1_4\n\ - .word unk_debug_bss_1_8\n\ - .word +0x2000000\n\ -._130:\n\ - ldr r0, ._136 @ gMain\n\ - ldrh r1, [r0, #0x2e]\n\ - mov r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._135 @cond_branch\n\ - mov r0, #0x18\n\ - bl PlaySE\n\ - ldr r4, ._136 + 4 @ \n\ - ldrb r0, [r4, #0x18]\n\ - bl sub_8102E1C\n\ - ldrb r0, [r4, #0x18]\n\ - bl sub_8103C14\n\ -._132:\n\ - mov r0, #0xd\n\ - strb r0, [r4]\n\ -._135:\n\ - mov r0, #0x0\n\ - pop {r4, r5}\n\ - pop {r1}\n\ - bx r1\n\ -._137:\n\ - .align 2, 0\n\ -._136:\n\ - .word gMain\n\ - .word +0x2000000"); -} -#else static bool8 sub_8102058(struct Task *task) { +#if DEBUG + if (unk_debug_bss_1_1 != 0 && unk_debug_bss_1_4 != 0) + { + unk_debug_bss_1_8--; + if (unk_debug_bss_1_8 == 0) + { + PlaySE(0x18); + sub_8102E1C(eSlotMachine->unk18); + sub_8103C14(eSlotMachine->unk18); + unk_debug_bss_1_8 = (Random() & 0x1F) + 1; + eSlotMachine->state = 13; + } + return FALSE; + } +#endif + if (gMain.newKeys & A_BUTTON) { PlaySE(SE_JYUNI); @@ -1252,121 +841,7 @@ static bool8 sub_8102058(struct Task *task) } return FALSE; } -#endif -#if DEBUG -__attribute__((naked)) -static bool8 sub_8102090(struct Task *task) -{ - asm("\ - push {r4, lr}\n\ - ldr r4, ._146 @ \n\ - ldrb r0, [r4, #0x18]\n\ - bl sub_8102E40\n\ - lsl r0, r0, #0x18\n\ - lsr r2, r0, #0x18\n\ - cmp r2, #0\n\ - bne ._138 @cond_branch\n\ - ldrh r0, [r4, #0x18]\n\ - add r0, r0, #0x1\n\ - strh r0, [r4, #0x18]\n\ - mov r1, #0xc\n\ - strb r1, [r4]\n\ - lsl r0, r0, #0x10\n\ - asr r0, r0, #0x10\n\ - cmp r0, #0x2\n\ - ble ._161 @cond_branch\n\ - mov r0, #0xe\n\ - strb r0, [r4]\n\ - ldr r0, ._146 + 4 @ \n\ - ldrb r0, [r0]\n\ - cmp r0, #0x8\n\ - beq ._140 @cond_branch\n\ - cmp r0, #0x8\n\ - bgt ._141 @cond_branch\n\ - cmp r0, #0x2\n\ - beq ._142 @cond_branch\n\ - cmp r0, #0x2\n\ - bgt ._143 @cond_branch\n\ - cmp r0, #0x1\n\ - beq ._144 @cond_branch\n\ - b ._161\n\ -._147:\n\ - .align 2, 0\n\ -._146:\n\ - .word +0x2000000\n\ - .word unk_debug_bss_1_0\n\ -._143:\n\ - cmp r0, #0x4\n\ - beq ._148 @cond_branch\n\ - b ._161\n\ -._141:\n\ - cmp r0, #0x40\n\ - beq ._150 @cond_branch\n\ - cmp r0, #0x40\n\ - bgt ._151 @cond_branch\n\ - cmp r0, #0x10\n\ - beq ._152 @cond_branch\n\ - b ._161\n\ -._151:\n\ - cmp r0, #0x80\n\ - beq ._154 @cond_branch\n\ - b ._161\n\ -._142:\n\ - mov r0, #0x14\n\ - strh r0, [r4, #0x28]\n\ - strh r0, [r4, #0x2a]\n\ - mov r0, #0x12\n\ - b ._160\n\ -._144:\n\ - mov r0, #0x14\n\ - strh r0, [r4, #0x28]\n\ - strh r0, [r4, #0x2a]\n\ - mov r0, #0x12\n\ - b ._160\n\ -._148:\n\ - mov r0, #0x3\n\ - strh r0, [r4, #0x28]\n\ - mov r0, #0x1\n\ - strh r0, [r4, #0x2a]\n\ - mov r0, #0x2\n\ - b ._160\n\ -._140:\n\ - strh r2, [r4, #0x28]\n\ - mov r0, #0x2\n\ - strh r0, [r4, #0x2a]\n\ - mov r0, #0x3\n\ - b ._160\n\ -._152:\n\ - mov r0, #0x2\n\ - strh r0, [r4, #0x28]\n\ - mov r0, #0x5\n\ - strh r0, [r4, #0x2a]\n\ - mov r0, #0x14\n\ - b ._160\n\ -._150:\n\ - mov r0, #0x13\n\ - strh r0, [r4, #0x28]\n\ - strh r0, [r4, #0x2a]\n\ - strh r2, [r4, #0x2c]\n\ - b ._161\n\ -._154:\n\ - mov r0, #0x13\n\ - strh r0, [r4, #0x28]\n\ - strh r0, [r4, #0x2a]\n\ -._160:\n\ - strh r0, [r4, #0x2c]\n\ -._161:\n\ - mov r0, #0x1\n\ - b ._162\n\ -._138:\n\ - mov r0, #0x0\n\ -._162:\n\ - pop {r4}\n\ - pop {r1}\n\ - bx r1"); -} -#else static bool8 sub_8102090(struct Task *task) { if (!sub_8102E40(eSlotMachine->unk18)) @@ -1376,173 +851,52 @@ static bool8 sub_8102090(struct Task *task) if (eSlotMachine->unk18 > 2) { eSlotMachine->state = 14; +#if DEBUG + switch (unk_debug_bss_1_0) + { + case 2: + eSlotMachine->reelPositions[0] = 20; + eSlotMachine->reelPositions[1] = 20; + eSlotMachine->reelPositions[2] = 18; + break; + case 1: + eSlotMachine->reelPositions[0] = 20; + eSlotMachine->reelPositions[1] = 20; + eSlotMachine->reelPositions[2] = 18; + break; + case 4: + eSlotMachine->reelPositions[0] = 3; + eSlotMachine->reelPositions[1] = 1; + eSlotMachine->reelPositions[2] = 2; + break; + case 8: + eSlotMachine->reelPositions[0] = 0; + eSlotMachine->reelPositions[1] = 2; + eSlotMachine->reelPositions[2] = 3; + break; + case 0x10: + eSlotMachine->reelPositions[0] = 2; + eSlotMachine->reelPositions[1] = 5; + eSlotMachine->reelPositions[2] = 20; + break; + case 0x40: + eSlotMachine->reelPositions[0] = 19; + eSlotMachine->reelPositions[1] = 19; + eSlotMachine->reelPositions[2] = 0; + break; + case 0x80: + eSlotMachine->reelPositions[0] = 19; + eSlotMachine->reelPositions[1] = 19; + eSlotMachine->reelPositions[2] = 19; + break; + } +#endif } return TRUE; } return FALSE; } -#endif -#if DEBUG -__attribute__((naked)) -bool8 sub_81020C8(struct Task *task) -{ - asm("\ - push {r4, lr}\n\ - ldr r4, ._165 @ \n\ - ldrb r1, [r4, #0x4]\n\ - mov r0, #0xc0\n\ - and r0, r0, r1\n\ - strb r0, [r4, #0x4]\n\ - bl CheckMatch\n\ - ldrb r0, [r4, #0xa]\n\ - cmp r0, #0\n\ - beq ._163 @cond_branch\n\ - sub r0, r0, #0x1\n\ - strb r0, [r4, #0xa]\n\ - ldrb r0, [r4, #0xb]\n\ - add r0, r0, #0x1\n\ - strb r0, [r4, #0xb]\n\ - b ._164\n\ -._166:\n\ - .align 2, 0\n\ -._165:\n\ - .word +0x2000000\n\ -._163:\n\ - bl debug_sub_811B894\n\ -._164:\n\ - ldr r4, ._171 @ \n\ - ldrh r0, [r4, #0x8]\n\ - cmp r0, #0\n\ - beq ._167 @cond_branch\n\ - add r0, r4, #0\n\ - add r0, r0, #0x6c\n\ - mov r2, #0xe\n\ - ldsh r1, [r4, r2]\n\ - bl debug_sub_811B5B4\n\ - mov r0, #0xf\n\ - strb r0, [r4]\n\ - bl sub_8102A24\n\ - bl sub_8103F70\n\ - ldrh r0, [r4, #0x10]\n\ - ldrh r1, [r4, #0xe]\n\ - sub r0, r0, r1\n\ - strh r0, [r4, #0x10]\n\ - lsl r0, r0, #0x10\n\ - cmp r0, #0\n\ - bge ._168 @cond_branch\n\ - mov r0, #0x0\n\ - strh r0, [r4, #0x10]\n\ -._168:\n\ - ldrh r1, [r4, #0x8]\n\ - mov r0, #0xc0\n\ - lsl r0, r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._169 @cond_branch\n\ - ldr r0, ._171 + 4 @ \n\ - bl PlayFanfare\n\ - mov r0, #0x6\n\ - bl sub_8104CAC\n\ - b ._174\n\ -._172:\n\ - .align 2, 0\n\ -._171:\n\ - .word +0x2000000\n\ - .word 0x185\n\ -._169:\n\ - mov r0, #0x40\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._173 @cond_branch\n\ - ldr r0, ._175 @ 0x185\n\ - bl PlayFanfare\n\ - mov r0, #0x5\n\ - bl sub_8104CAC\n\ - b ._174\n\ -._176:\n\ - .align 2, 0\n\ -._175:\n\ - .word 0x185\n\ -._173:\n\ - mov r0, #0xc3\n\ - lsl r0, r0, #0x1\n\ - bl PlayFanfare\n\ - mov r0, #0x2\n\ - bl sub_8104CAC\n\ -._174:\n\ - ldr r1, ._183 @ \n\ - ldrh r3, [r1, #0x8]\n\ - mov r0, #0xe0\n\ - lsl r0, r0, #0x1\n\ - and r0, r0, r3\n\ - add r2, r1, #0\n\ - cmp r0, #0\n\ - beq ._179 @cond_branch\n\ - ldrb r1, [r2, #0x4]\n\ - mov r0, #0x3f\n\ - and r0, r0, r1\n\ - mov r1, #0x0\n\ - strb r0, [r2, #0x4]\n\ - mov r0, #0xc0\n\ - lsl r0, r0, #0x1\n\ - and r0, r0, r3\n\ - cmp r0, #0\n\ - beq ._179 @cond_branch\n\ - strb r1, [r2, #0xa]\n\ - strb r1, [r2, #0xb]\n\ - strb r1, [r2, #0x3]\n\ - mov r0, #0x80\n\ - lsl r0, r0, #0x1\n\ - and r0, r0, r3\n\ - cmp r0, #0\n\ - beq ._179 @cond_branch\n\ - mov r0, #0x1\n\ - strb r0, [r2, #0x3]\n\ -._179:\n\ - ldrh r1, [r2, #0x8]\n\ - mov r0, #0x20\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._185 @cond_branch\n\ - ldrb r0, [r2, #0x2]\n\ - cmp r0, #0xf\n\ - bhi ._185 @cond_branch\n\ - add r0, r0, #0x1\n\ - strb r0, [r2, #0x2]\n\ - ldrb r0, [r2, #0x2]\n\ - bl sub_8104064\n\ - b ._185\n\ -._184:\n\ - .align 2, 0\n\ -._183:\n\ - .word +0x2000000\n\ -._167:\n\ - mov r0, #0x3\n\ - bl sub_8104CAC\n\ - mov r0, #0x14\n\ - strb r0, [r4]\n\ - ldrh r0, [r4, #0x12]\n\ - ldrh r1, [r4, #0x10]\n\ - add r0, r0, r1\n\ - strh r0, [r4, #0x10]\n\ - lsl r0, r0, #0x10\n\ - asr r0, r0, #0x10\n\ - ldr r1, ._186 @ 0x270f\n\ - cmp r0, r1\n\ - ble ._185 @cond_branch\n\ - strh r1, [r4, #0x10]\n\ -._185:\n\ - mov r0, #0x0\n\ - pop {r4}\n\ - pop {r1}\n\ - bx r1\n\ -._187:\n\ - .align 2, 0\n\ -._186:\n\ - .word 0x270f"); -} -#else bool8 sub_81020C8(struct Task *task) { eSlotMachine->unk04 &= 0xc0; @@ -1552,8 +906,18 @@ bool8 sub_81020C8(struct Task *task) eSlotMachine->unk0A--; eSlotMachine->unk0B++; } +#if DEBUG + else + { + debug_sub_811B894(); + } +#endif + if (eSlotMachine->matchedSymbols) { +#if DEBUG + debug_sub_811B5B4(&eSlotMachine->unk6C, eSlotMachine->payout); +#endif eSlotMachine->state = 15; sub_8102A24(); sub_8103F70(); @@ -1585,9 +949,7 @@ bool8 sub_81020C8(struct Task *task) eSlotMachine->unk0B = 0; eSlotMachine->unk03 = 0; if (eSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_777_BLUE)) - { eSlotMachine->unk03 = 1; - } } } if (eSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_POWER) && eSlotMachine->pikaPower < 16) @@ -1601,20 +963,15 @@ bool8 sub_81020C8(struct Task *task) sub_8104CAC(3); eSlotMachine->state = 20; if ((eSlotMachine->unk10 += eSlotMachine->bet) > 9999) - { eSlotMachine->unk10 = 9999; - } } return FALSE; } -#endif static bool8 sub_81021E0(struct Task *task) { if (sub_8102A44()) - { eSlotMachine->state = 16; - } return FALSE; } @@ -1624,18 +981,14 @@ static bool8 sub_81021FC(struct Task *task) { eSlotMachine->state = 19; if (eSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_RED) | (1 << SLOT_MACHINE_MATCHED_777_BLUE))) - { IncrementGameStat(GAME_STAT_SLOT_JACKPOTS); - } if (eSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY)) { eSlotMachine->unk18 = 0; eSlotMachine->state = 9; } if (eSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_POWER)) - { eSlotMachine->state = 17; - } if (eSlotMachine->unk0A && eSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY)) { sub_8104CAC(4); @@ -1758,56 +1111,18 @@ static bool8 sub_81023FC(struct Task *task) return FALSE; } -#if DEBUG -__attribute__((naked)) static bool8 sub_8102424(struct Task *task) { - asm("\ - push {lr}\n\ - add sp, sp, #0xfffffffc\n\ - ldr r0, ._234 @ unk_debug_bss_1_1\n\ - ldrb r0, [r0]\n\ - cmp r0, #0\n\ - bne ._233 @cond_branch\n\ - ldr r0, ._234 + 4 @ gSaveBlock1\n\ - ldr r1, ._234 + 8 @ \n\ - ldrh r1, [r1, #0xc]\n\ - ldr r2, ._234 + 12 @ \n\ - add r0, r0, r2\n\ - strh r1, [r0]\n\ -._233:\n\ - mov r0, #0x1\n\ - neg r0, r0\n\ - mov r1, #0x0\n\ - str r1, [sp]\n\ - mov r2, #0x0\n\ - mov r3, #0x10\n\ - bl BeginNormalPaletteFade\n\ - ldr r1, ._234 + 8 @ \n\ - ldrb r0, [r1]\n\ - add r0, r0, #0x1\n\ - strb r0, [r1]\n\ - mov r0, #0x0\n\ - add sp, sp, #0x4\n\ - pop {r1}\n\ - bx r1\n\ -._235:\n\ - .align 2, 0\n\ -._234:\n\ - .word unk_debug_bss_1_1\n\ - .word gSaveBlock1\n\ - .word +0x2000000\n\ - .word 0x494"); -} +#if DEBUG + if (unk_debug_bss_1_1 == 0) + gSaveBlock1.coins = eSlotMachine->coins; #else -static bool8 sub_8102424(struct Task *task) -{ gSaveBlock1.coins = eSlotMachine->coins; +#endif BeginNormalPaletteFade(-1, 0, 0, 16, 0); eSlotMachine->state++; return FALSE; } -#endif static bool8 sub_8102460(struct Task *task) { @@ -1819,271 +1134,91 @@ static bool8 sub_8102460(struct Task *task) } #if DEBUG -__attribute__((naked)) + static bool8 debug_sub_8116E74(struct Task *task) { - asm("\ - push {lr}\n\ - bl debug_sub_811B634\n\ - lsl r0, r0, #0x18\n\ - cmp r0, #0\n\ - beq ._239 @cond_branch\n\ - ldr r1, ._240 @ \n\ - mov r0, #0x5\n\ - strb r0, [r1]\n\ -._239:\n\ - mov r0, #0x0\n\ - pop {r1}\n\ - bx r1\n\ -._241:\n\ - .align 2, 0\n\ -._240:\n\ - .word +0x2000000"); + if (debug_sub_811B634() != 0) + eSlotMachine->state = 5; + return FALSE; } + #endif -#if DEBUG -__attribute__((naked)) static void sub_8102484(void) { - asm("\ - push {r4, r5, r6, lr}\n\ - ldr r0, ._256 @ \n\ - ldrb r2, [r0, #0xa]\n\ - add r4, r0, #0\n\ - cmp r2, #0\n\ - beq ._242 @cond_branch\n\ - b ._270\n\ -._242:\n\ - ldr r0, ._256 + 4 @ \n\ - ldrb r0, [r0]\n\ - cmp r0, #0\n\ - beq ._245 @cond_branch\n\ - ldr r3, ._256 + 8 @ \n\ - ldrb r0, [r3]\n\ - cmp r0, #0\n\ - beq ._245 @cond_branch\n\ - ldr r0, ._256 + 12 @ \n\ - ldrb r1, [r0]\n\ - strb r1, [r4, #0x4]\n\ - strb r2, [r3]\n\ - strb r2, [r0]\n\ - mov r0, #0x80\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._246 @cond_branch\n\ - add r0, r4, #0\n\ - add r0, r0, #0x88\n\ - mov r1, #0x1\n\ - bl debug_sub_811B5B4\n\ -._246:\n\ - ldrb r1, [r4, #0x4]\n\ - mov r0, #0x40\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._247 @cond_branch\n\ - add r0, r4, #0\n\ - add r0, r0, #0x84\n\ - mov r1, #0x1\n\ - bl debug_sub_811B5B4\n\ -._247:\n\ - ldrb r1, [r4, #0x4]\n\ - mov r0, #0x20\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._248 @cond_branch\n\ - add r0, r4, #0\n\ - add r0, r0, #0x8c\n\ - mov r1, #0x1\n\ - bl debug_sub_811B5B4\n\ -._248:\n\ - ldrb r1, [r4, #0x4]\n\ - mov r0, #0x10\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._249 @cond_branch\n\ - add r0, r4, #0\n\ - add r0, r0, #0x80\n\ - mov r1, #0x1\n\ - bl debug_sub_811B5B4\n\ -._249:\n\ - ldrb r1, [r4, #0x4]\n\ - mov r0, #0x8\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._250 @cond_branch\n\ - add r0, r4, #0\n\ - add r0, r0, #0x7c\n\ - mov r1, #0x1\n\ - bl debug_sub_811B5B4\n\ -._250:\n\ - ldrb r1, [r4, #0x4]\n\ - mov r0, #0x4\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._251 @cond_branch\n\ - add r0, r4, #0\n\ - add r0, r0, #0x78\n\ - mov r1, #0x1\n\ - bl debug_sub_811B5B4\n\ -._251:\n\ - ldrb r1, [r4, #0x4]\n\ - mov r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._252 @cond_branch\n\ - add r0, r4, #0\n\ - add r0, r0, #0x74\n\ - mov r1, #0x1\n\ - bl debug_sub_811B5B4\n\ -._252:\n\ - ldrb r1, [r4, #0x4]\n\ - mov r0, #0x2\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._253 @cond_branch\n\ - b ._270\n\ -._253:\n\ - add r0, r4, #0\n\ - add r0, r0, #0x70\n\ - mov r1, #0x1\n\ - bl debug_sub_811B5B4\n\ - b ._270\n\ -._257:\n\ - .align 2, 0\n\ -._256:\n\ - .word +0x2000000\n\ - .word unk_debug_bss_1_1\n\ - .word unk_debug_bss_1_2\n\ - .word unk_debug_bss_1_3\n\ -._245:\n\ - add r5, r4, #0\n\ - ldrb r1, [r5, #0x4]\n\ - mov r0, #0xc0\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._270 @cond_branch\n\ - bl sub_8102540\n\ - lsl r0, r0, #0x18\n\ - cmp r0, #0\n\ - beq ._260 @cond_branch\n\ - bl sub_8102578\n\ - lsl r0, r0, #0x18\n\ - lsr r6, r0, #0x18\n\ - cmp r6, #0x3\n\ - beq ._260 @cond_branch\n\ - ldr r1, ._271 @ gUnknown_083ECE42\n\ - lsl r0, r6, #0x1\n\ - add r0, r0, r1\n\ - ldrb r1, [r0]\n\ - ldrb r0, [r5, #0x4]\n\ - orr r0, r0, r1\n\ - strb r0, [r5, #0x4]\n\ - mov r1, #0x80\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._261 @cond_branch\n\ - add r0, r5, #0\n\ - add r0, r0, #0x88\n\ - mov r1, #0x1\n\ - bl debug_sub_811B5B4\n\ -._261:\n\ - ldrb r1, [r5, #0x4]\n\ - mov r0, #0x40\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._262 @cond_branch\n\ - add r0, r5, #0\n\ - add r0, r0, #0x84\n\ - mov r1, #0x1\n\ - bl debug_sub_811B5B4\n\ -._262:\n\ - ldrb r1, [r4, #0x4]\n\ - mov r0, #0x20\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._263 @cond_branch\n\ - add r0, r4, #0\n\ - add r0, r0, #0x8c\n\ - mov r1, #0x1\n\ - bl debug_sub_811B5B4\n\ -._263:\n\ - cmp r6, #0x1\n\ - bne ._270 @cond_branch\n\ -._260:\n\ - bl sub_81025BC\n\ - lsl r0, r0, #0x18\n\ - lsr r6, r0, #0x18\n\ - cmp r6, #0x5\n\ - beq ._270 @cond_branch\n\ - ldr r4, ._271 + 4 @ \n\ - ldr r1, ._271 + 8 @ \n\ - lsl r0, r6, #0x1\n\ - add r0, r0, r1\n\ - ldrb r1, [r0]\n\ - ldrb r0, [r4, #0x4]\n\ - orr r0, r0, r1\n\ - strb r0, [r4, #0x4]\n\ - mov r1, #0x10\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._266 @cond_branch\n\ - add r0, r4, #0\n\ - add r0, r0, #0x80\n\ - mov r1, #0x1\n\ - bl debug_sub_811B5B4\n\ -._266:\n\ - ldrb r1, [r4, #0x4]\n\ - mov r0, #0x8\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._267 @cond_branch\n\ - add r0, r4, #0\n\ - add r0, r0, #0x7c\n\ - mov r1, #0x1\n\ - bl debug_sub_811B5B4\n\ -._267:\n\ - ldrb r1, [r4, #0x4]\n\ - mov r0, #0x4\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._268 @cond_branch\n\ - add r0, r4, #0\n\ - add r0, r0, #0x78\n\ - mov r1, #0x1\n\ - bl debug_sub_811B5B4\n\ -._268:\n\ - ldrb r1, [r4, #0x4]\n\ - mov r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._269 @cond_branch\n\ - add r0, r4, #0\n\ - add r0, r0, #0x74\n\ - mov r1, #0x1\n\ - bl debug_sub_811B5B4\n\ -._269:\n\ - ldrb r1, [r4, #0x4]\n\ - mov r0, #0x2\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._270 @cond_branch\n\ - add r0, r4, #0\n\ - add r0, r0, #0x70\n\ - mov r1, #0x1\n\ - bl debug_sub_811B5B4\n\ -._270:\n\ - pop {r4, r5, r6}\n\ - pop {r0}\n\ - bx r0\n\ -._272:\n\ - .align 2, 0\n\ -._271:\n\ - .word gUnknown_083ECE42\n\ - .word +0x2000000\n\ - .word gUnknown_083ECE48"); + u8 r3; + + if (eSlotMachine->unk0A == 0) + { +#if DEBUG + if (unk_debug_bss_1_1 != 0 && unk_debug_bss_1_2 != 0) + { + eSlotMachine->unk04 = unk_debug_bss_1_3; + unk_debug_bss_1_2 = 0; + unk_debug_bss_1_3 = 0; + if (eSlotMachine->unk04 & 0x80) + debug_sub_811B5B4(&eSlotMachine->unk88, 1); + if (eSlotMachine->unk04 & 0x40) + debug_sub_811B5B4(&eSlotMachine->unk84, 1); + if (eSlotMachine->unk04 & 0x20) + debug_sub_811B5B4(&eSlotMachine->unk8C, 1); + if (eSlotMachine->unk04 & 0x10) + debug_sub_811B5B4(&eSlotMachine->unk80, 1); + if (eSlotMachine->unk04 & 8) + debug_sub_811B5B4(&eSlotMachine->unk7C, 1); + if (eSlotMachine->unk04 & 4) + debug_sub_811B5B4(&eSlotMachine->unk78, 1); + if (eSlotMachine->unk04 & 1) + debug_sub_811B5B4(&eSlotMachine->unk74, 1); + if (eSlotMachine->unk04 & 2) + debug_sub_811B5B4(&eSlotMachine->unk70, 1); + return; + } +#endif + if (!(eSlotMachine->unk04 & 0xc0)) + { + if (sub_8102540()) + { + r3 = sub_8102578(); + if (r3 != 3) + { + eSlotMachine->unk04 |= gUnknown_083ECE42[r3]; +#if DEBUG + if (eSlotMachine->unk04 & 0x80) + debug_sub_811B5B4(&eSlotMachine->unk88, 1); + if (eSlotMachine->unk04 & 0x40) + debug_sub_811B5B4(&eSlotMachine->unk84, 1); + if (eSlotMachine->unk04 & 0x20) + debug_sub_811B5B4(&eSlotMachine->unk8C, 1); +#endif + if (r3 != 1) + { + return; + } + } + } + r3 = sub_81025BC(); + if (r3 != 5) + { + eSlotMachine->unk04 |= gUnknown_083ECE48[r3]; +#if DEBUG + if (eSlotMachine->unk04 & 0x10) + debug_sub_811B5B4(&eSlotMachine->unk80, 1); + if (eSlotMachine->unk04 & 8) + debug_sub_811B5B4(&eSlotMachine->unk7C, 1); + if (eSlotMachine->unk04 & 4) + debug_sub_811B5B4(&eSlotMachine->unk78, 1); + if (eSlotMachine->unk04 & 1) + debug_sub_811B5B4(&eSlotMachine->unk74, 1); + if (eSlotMachine->unk04 & 2) + debug_sub_811B5B4(&eSlotMachine->unk70, 1); +#endif + } + } + } } -#else + +/* static void sub_8102484(void) { u8 r3; @@ -2109,15 +1244,13 @@ static void sub_8102484(void) } } } -#endif +*/ static void sub_81024F0(void) { eSlotMachine->unk06 = 0; if (eSlotMachine->unk04) - { eSlotMachine->unk06 = 1; - } } static u8 sub_810250C(u8 a0) @@ -2127,9 +1260,7 @@ static u8 sub_810250C(u8 a0) for (i = 0; i < 8; i++) { if (a0 & 1) - { return gUnknown_083ECE3A[i]; - } a0 >>= 1; } return 0; @@ -2139,9 +1270,7 @@ static bool8 sub_8102540(void) { u8 rval = Random(); if (gUnknown_083ECD04[eSlotMachine->unk01][eSlotMachine->bet - 1] > rval) - { return TRUE; - } return FALSE; } @@ -2156,9 +1285,7 @@ static u8 sub_8102578(void) s16 rval = Random() & 0xff; s16 value = gUnknown_083ECD16[i][eSlotMachine->unk01]; if (value > rval) - { break; - } } return i; } @@ -2177,22 +1304,16 @@ static u8 sub_81025BC(void) { r3 += 10; if (r3 > 0x100) - { r3 = 0x100; - } } else if (i == 4 && eSlotMachine->unk03 == 1) { r3 -= 10; if (r3 < 0) - { r3 = 0; - } } if (r3 > rval) - { break; - } } return i; } @@ -2203,10 +1324,9 @@ static const u8 gUnknown_083ECDAC[][17]; static u8 sub_810264C(u8 a0) { if (eSlotMachine->unk03 == 0) - { return gUnknown_083ECD46[a0][eSlotMachine->pikaPower]; - } - return gUnknown_083ECDAC[a0][eSlotMachine->pikaPower]; + else + return gUnknown_083ECDAC[a0][eSlotMachine->pikaPower]; } static void sub_8102680(void) @@ -2217,16 +1337,12 @@ static void sub_8102680(void) eSlotMachine->unk05 = 0; rval = Random(); if (rval < sub_810264C(0)) - { return; - } for (i = 5; i > 0; i--) { rval = Random(); if (rval < sub_810264C(i)) - { break; - } } eSlotMachine->unk05 = i; } @@ -2237,10 +1353,9 @@ static bool8 sub_81026DC(u16 a0) { u16 rval = Random() & 0xff; if (rval < gUnknown_083ECE12[a0]) - { return TRUE; - } - return FALSE; + else + return FALSE; } static const u16 gUnknown_083ECE1C[][2]; @@ -2252,33 +1367,21 @@ static u16 dp15_jump_random_unknown(void) u8 rval; u8 value; if (eSlotMachine->unk10 >= 300) - { r4 = 4; - } else if (eSlotMachine->unk10 >= 250) - { r4 = 3; - } else if (eSlotMachine->unk10 >= 200) - { r4 = 2; - } else if (eSlotMachine->unk10 >= 150) - { r4 = 1; - } rval = Random() % 100; value = gUnknown_083ECE1C[r4][0]; if (rval < value) - { return 4; - } rval = Random() % 100; value = gUnknown_083ECE1C[r4][1] + gUnknown_083ECE30[eSlotMachine->unk0B]; if (rval < value) - { return 2; - } return 8; } @@ -2287,13 +1390,9 @@ static void CheckMatch(void) eSlotMachine->matchedSymbols = 0; CheckMatch_CenterRow(); if (eSlotMachine->bet > 1) - { CheckMatch_TopAndBottom(); - } if (eSlotMachine->bet > 2) - { CheckMatch_Diagonals(); - } } static const u16 sSlotMatchFlags[]; @@ -2326,9 +1425,7 @@ static void CheckMatch_TopAndBottom(void) if (match != SLOT_MACHINE_MATCHED_NONE) { if (match == SLOT_MACHINE_MATCHED_1CHERRY) - { match = SLOT_MACHINE_MATCHED_2CHERRY; - } eSlotMachine->payout += sSlotPayouts[match]; eSlotMachine->matchedSymbols |= sSlotMatchFlags[match]; sub_8103E04(1); @@ -2340,9 +1437,7 @@ static void CheckMatch_TopAndBottom(void) if (match != SLOT_MACHINE_MATCHED_NONE) { if (match == SLOT_MACHINE_MATCHED_1CHERRY) - { match = SLOT_MACHINE_MATCHED_2CHERRY; - } eSlotMachine->payout += sSlotPayouts[match]; eSlotMachine->matchedSymbols |= sSlotMatchFlags[match]; sub_8103E04(2); @@ -2386,21 +1481,13 @@ static const u8 sSym2Match[]; static u8 GetMatchFromSymbolsInRow(u8 c1, u8 c2, u8 c3) { if (c1 == c2 && c1 == c3) - { return sSym2Match[c1]; - } if (c1 == SLOT_MACHINE_TAG_7_RED && c2 == SLOT_MACHINE_TAG_7_RED && c3 == SLOT_MACHINE_TAG_7_BLUE) - { return SLOT_MACHINE_MATCHED_777_MIXED; - } if (c1 == SLOT_MACHINE_TAG_7_BLUE && c2 == SLOT_MACHINE_TAG_7_BLUE && c3 == SLOT_MACHINE_TAG_7_RED) - { return SLOT_MACHINE_MATCHED_777_MIXED; - } if (c1 == SLOT_MACHINE_TAG_CHERRY) - { return SLOT_MACHINE_MATCHED_1CHERRY; - } return SLOT_MACHINE_MATCHED_NONE; } @@ -2412,13 +1499,13 @@ static void sub_8102A24(void) static bool8 sub_8102A44(void) { if (FindTaskIdByFunc(sub_8102A64) == 0xff) - { return TRUE; - } - return FALSE; + else + return FALSE; } -static bool8 (*const gUnknown_083ECB20[])(struct Task *task) = { +static bool8 (*const gUnknown_083ECB20[])(struct Task *task) = +{ sub_8102A9C, sub_8102AD0, sub_8102B80 @@ -2426,7 +1513,8 @@ static bool8 (*const gUnknown_083ECB20[])(struct Task *task) = { static void sub_8102A64(u8 taskId) { - while (gUnknown_083ECB20[gTasks[taskId].data[0]](gTasks + taskId)); + while (gUnknown_083ECB20[gTasks[taskId].data[0]](gTasks + taskId)) + ; } static bool8 sub_8102A9C(struct Task *task) @@ -2448,43 +1536,31 @@ static bool8 sub_8102AD0(struct Task *task) if (!task->data[1]--) { if (IsFanfareTaskInactive()) - { PlaySE(SE_PIN); - } eSlotMachine->payout--; if (eSlotMachine->coins < 9999) - { eSlotMachine->coins++; - } task->data[1] = 8; if (gMain.heldKeys & A_BUTTON) - { task->data[1] = 4; - } } if (IsFanfareTaskInactive() && gMain.newKeys & START_BUTTON) { PlaySE(SE_PIN); eSlotMachine->coins += eSlotMachine->payout; if (eSlotMachine->coins > 9999) - { eSlotMachine->coins = 9999; - } eSlotMachine->payout = 0; } if (eSlotMachine->payout == 0) - { task->data[0]++; - } return FALSE; } static bool8 sub_8102B80(struct Task *task) { if (sub_8103E7C()) - { DestroyTask(FindTaskIdByFunc(sub_8102A64)); - } return FALSE; } @@ -2494,9 +1570,7 @@ static u8 GetTagOfReelSymbolOnScreenAtPos(u8 x, s16 y) { s16 offset = (eSlotMachine->reelPositions[x] + y) % 21; if (offset < 0) - { offset += 21; - } return sReelSymbols[x][offset]; } @@ -2586,7 +1660,8 @@ static bool8 sub_8102E40(u8 a0) return gTasks[eSlotMachine->reelTasks[a0]].data[14]; } -static bool8 (*const gUnknown_083ECB2C[])(struct Task *task) = { +static bool8 (*const gUnknown_083ECB2C[])(struct Task *task) = +{ sub_8102EA0, sub_8102EA4, sub_8102EC0, @@ -2596,7 +1671,8 @@ static bool8 (*const gUnknown_083ECB2C[])(struct Task *task) = { static void sub_8102E68(u8 taskId) { - while (gUnknown_083ECB2C[gTasks[taskId].data[0]](gTasks + taskId)); + while (gUnknown_083ECB2C[gTasks[taskId].data[0]](gTasks + taskId)) + ; } static bool8 sub_8102EA0(struct Task *task) @@ -2610,12 +1686,15 @@ static bool8 sub_8102EA4(struct Task *task) return FALSE; } -static bool8 (*const gUnknown_083ECB40[])(void) = { +static bool8 (*const gUnknown_083ECB40[])(void) = +{ sub_810305C, sub_81032C0, sub_81033DC }; -static void (*const gUnknown_083ECB4C[])(void) = { + +static void (*const gUnknown_083ECB4C[])(void) = +{ sub_81034F4, sub_8103540, sub_810380C @@ -2640,9 +1719,7 @@ static bool8 sub_8102F4C(struct Task *task) u16 sp[] = {2, 4, 4, 4, 8}; s16 r2 = eSlotMachine->unk1C[task->data[15]] % 24; if (r2 != 0) - { r2 = sub_8102CCC(task->data[15], eSlotMachine->unk1A); - } else if (eSlotMachine->unk2E[task->data[15]]) { eSlotMachine->unk2E[task->data[15]]--; @@ -2664,9 +1741,7 @@ static bool8 sub_8103008(struct Task *task) task->data[1] = -task->data[1]; task->data[2]++; if ((task->data[2] & 0x3) == 0) - { task->data[1] >>= 1; - } if (task->data[1] == 0) { task->data[0] = 0; @@ -2676,7 +1751,8 @@ static bool8 sub_8103008(struct Task *task) return FALSE; } -static bool8 (*const gUnknown_083ECB64[])(u8 a0, u8 a1) = { +static bool8 (*const gUnknown_083ECB64[])(u8 a0, u8 a1) = +{ sub_8103154, sub_81031B4, sub_81031B4 @@ -2708,19 +1784,17 @@ static bool8 sub_81030A4(s16 y, u8 tag1, u8 tag2) static bool8 sub_81030E0(s16 y) { if (GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, 1 - y) == 4 || GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, 2 - y) == 4 || GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, 3 - y) == 4) - { return TRUE; - } - return FALSE; + else + return FALSE; } static bool8 sub_8103134(void) { if (eSlotMachine->unk04 & 0xc2) - { return TRUE; - } - return FALSE; + else + return FALSE; } static bool8 sub_8103154(u8 a0, u8 a1) @@ -2783,7 +1857,8 @@ static bool8 sub_81031B4(u8 tag1, u8 tag2) return FALSE; } -static bool8 (*const gUnknown_083ECB70[])(void) = { +static bool8 (*const gUnknown_083ECB70[])(void) = +{ sub_81032E8, sub_81032E8, sub_810333C @@ -2845,7 +1920,8 @@ static bool8 sub_810333C(void) return FALSE; } -static bool8 (*const gUnknown_083ECB7C[])(u8 a0) = { +static bool8 (*const gUnknown_083ECB7C[])(u8 a0) = +{ sub_810341C, sub_810341C, sub_810347C @@ -2887,14 +1963,11 @@ static bool8 sub_810347C(u8 a0) s16 i; s16 r8; if (eSlotMachine->unk34[0] == eSlotMachine->unk34[1]) - { return sub_810341C(a0); - } - r8 = 1; if (eSlotMachine->unk34[0] == 1) - { r8 = 3; - } + else + r8 = 1; for (i = 0; i < 5; i++) { if (GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, r8 - i) == a0) @@ -2909,8 +1982,10 @@ static bool8 sub_810347C(u8 a0) static void sub_81034F4(void) { - s16 i; - for (i = 0; sub_81030E0(i); i++); + s16 i = 0; + + while (sub_81030E0(i) != 0) + i++; eSlotMachine->unk2E[0] = i; } @@ -2929,7 +2004,8 @@ static bool8 sub_8103520(u8 *a0) return FALSE; } -static void (*const gUnknown_083ECB88[])(void) = { +static void (*const gUnknown_083ECB88[])(void) = +{ sub_8103564, j5_08111E84, sub_8103668 @@ -3050,19 +2126,17 @@ static void sub_8103668(void) static bool8 sub_8103764(u8 a0, u8 a1) { if ((a0 == 0 && a1 == 1) || (a0 == 1 && a1 == 0)) - { return TRUE; - } - return FALSE; + else + return FALSE; } static bool8 sub_810378C(u8 a0, u8 a1, u8 a2) { if ((a0 == 0 && a1 == 1 && a2 == 0) || (a0 == 1 && a1 == 0 && a2 == 1)) - { return TRUE; - } - return FALSE; + else + return FALSE; } static bool8 sub_81037BC(u8 a0, u8 a1, u8 a2) @@ -3078,7 +2152,8 @@ static bool8 sub_81037BC(u8 a0, u8 a1, u8 a2) return TRUE; } -static void (*const gUnknown_083ECB94[])(void) = { +static void (*const gUnknown_083ECB94[])(void) = +{ sub_8103830, sub_8103910, sub_8103A78 @@ -3100,9 +2175,7 @@ static void sub_8103830(void) { u8 r0; if (!(r5 == (r0 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, 2 - i)) || (r5 == 0 && r0 == 1) || (r5 == 1 && r0 == 0))) - { break; - } i++; } } @@ -3123,9 +2196,7 @@ static void sub_8103830(void) while (1) { if (r5 != GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, 2 - i)) - { break; - } i++; } } @@ -3172,9 +2243,7 @@ static void sub_8103910(void) } } if (r8 == 0) - { break; - } sp0++; } eSlotMachine->unk2E[2] = sp0; @@ -3236,7 +2305,8 @@ static void sub_8103C14(u8 a0) sub_8103C48(taskId); } -static void (*const gUnknown_083ECBA0[])(struct Task *task, u8 taskId) = { +static void (*const gUnknown_083ECBA0[])(struct Task *task, u8 taskId) = +{ sub_8103C78, sub_8103CAC, sub_8103CC8 @@ -3288,18 +2358,14 @@ static void sub_8103D50(u8 a0) { u8 i; for (i = 0; i < gUnknown_083EDD3B[a0]; i++) - { sub_8103D00(gUnknown_083EDD35[a0][i]); - } } static void sub_8103D8C(u8 a0) { u8 i; for (i = 0; i < gUnknown_083EDD3B[a0]; i++) - { sub_8103D28(gUnknown_083EDD35[a0][i]); - } } static void sub_8103DC8(void) @@ -3329,7 +2395,7 @@ static bool8 sub_8103E38(void) u8 i; for (i = 0; i < 5; i++) { - struct Sprite *sprite = gSprites + eSlotMachine->unk44[i]; + struct Sprite *sprite = &gSprites[eSlotMachine->unk44[i]]; if (sprite->data[1] && sprite->data[2]) return FALSE; } @@ -3416,9 +2482,7 @@ static void sub_8103FE8(u8 taskId) task->data[1] = 4; task->data[2] += task->data[3]; if (task->data[2] == 0 || task->data[2] == 2) - { task->data[3] = -task->data[3]; - } } LoadPalette(gUnknown_083EDDA0[task->data[2]], 0x10, 0x20); } @@ -3450,7 +2514,8 @@ static bool8 sub_81040C8(void) return gTasks[eSlotMachine->unk3E].data[15]; } -static void (*const gUnknown_083ECBB4[])(struct Task *task) = { +static void (*const gUnknown_083ECBB4[])(struct Task *task) = +{ nullsub_68, sub_810411C, sub_8104144, @@ -3464,7 +2529,6 @@ static void sub_81040E8(u8 taskId) static void nullsub_68(struct Task *task) { - } static void sub_810411C(struct Task *task) @@ -3473,10 +2537,11 @@ static void sub_810411C(struct Task *task) task->data[0]++; } -static const u16 gUnknown_083ECBC4[][2] = { +static const u16 gUnknown_083ECBC4[][2] = +{ {0x9e, 0x6e}, {0x9f, 0x6f}, - {0xaf, 0x7f} + {0xaf, 0x7f}, }; static void sub_8104144(struct Task *task) @@ -3568,7 +2633,8 @@ static bool8 sub_810432C(void) return FALSE; } -static void (*const gUnknown_083ECBD0[])(struct Task *task) = { +static void (*const gUnknown_083ECBD0[])(struct Task *task) = +{ sub_810437C, sub_81043EC, sub_8104468, @@ -3705,9 +2771,7 @@ static void sub_81045CC(struct Task *task) if (eSlotMachine->unk05) { if (eSlotMachine->unk0A <= task->data[6]) - { task->data[0]++; - } } else if (task->data[6] > 3) { @@ -3774,9 +2838,7 @@ static void sub_81046C0(struct Task *task) static void sub_8104764(struct Task *task) { if ((task->data[4] == 0 || --task->data[4] == 0) && !sub_81040C8()) - { task->data[0]++; - } } static void sub_8104794(struct Task *task) @@ -3788,13 +2850,9 @@ static void sub_8104794(struct Task *task) r4 = ((task->data[1] - 8) & 0xff) >> 3; REG_BG1HOFS = task->data[1] & 0x1ff; if (task->data[3] >> 3 <= 25) - { sub_8104A88(r4); - } else - { task->data[0]++; - } } static void sub_81047EC(struct Task *task) @@ -3825,21 +2883,15 @@ static void sub_81047EC(struct Task *task) static void sub_8104860(struct Task *task) { if (eSlotMachine->unk1A == task->data[1]) - { task->data[0]++; - } else if (eSlotMachine->unk1C[0] % 24 == 0 && (++task->data[2]& 0x07) == 0) - { eSlotMachine->unk1A >>= 1; - } } static void sub_81048A8(struct Task *task) { if (sub_8104E18()) - { DestroyTask(FindTaskIdByFunc(sub_810434C)); - } } static void sub_81048CC(struct Task *task) @@ -3935,10 +2987,12 @@ static bool8 sub_8104AEC(void) { if (FindTaskIdByFunc(sub_8104B0C) == 0xFF) return TRUE; - return FALSE; + else + return FALSE; } -static void (*const gUnknown_083ECC30[])(struct Task *task) = { +static void (*const gUnknown_083ECC30[])(struct Task *task) = +{ sub_8104B3C, sub_8104B60, sub_8104B80, @@ -3964,9 +3018,7 @@ static void sub_8104B3C(struct Task *task) static void sub_8104B60(struct Task *task) { if (!gPaletteFade.active) - { task->data[0]++; - } } static void sub_8104B80(struct Task *task) @@ -4013,9 +3065,7 @@ static void sub_8104C5C(void) task = gTasks + i; task->data[1] = -1; for (i = 4; i < 16; i++) - { task->data[i] = MAX_SPRITES; - } } static void LoadSlotMachineWheelOverlay(void); @@ -4094,8 +3144,9 @@ static bool8 sub_8104E18(void) return TRUE; } -static void (*const gUnknown_083ECC54[])(struct Task *task) = { - nullsub_69 +static void (*const gUnknown_083ECC54[])(struct Task *task) = +{ + nullsub_69, }; static void sub_8104E74(u8 taskId) @@ -4105,7 +3156,6 @@ static void sub_8104E74(u8 taskId) static void nullsub_69(struct Task *task) { - } static const struct SpriteTemplate gSpriteTemplate_83ED414; @@ -4141,14 +3191,11 @@ static void sub_8104F8C(void) { s16 i; s16 x; + for (x = 203, i = 1; i < 10000; i *= 10, x -= 7) - { sub_8104FF4(x, 23, 0, i); - } for (x = 235, i = 1; i < 10000; i *= 10, x -= 7) - { sub_8104FF4(x, 23, 1, i); - } } static const struct SpriteTemplate gSpriteTemplate_83ED42C; @@ -4211,9 +3258,7 @@ static void sub_8105170(struct Sprite *sprite) { sprite->pos2.y = sprite->pos2.x = 8; if ((sprite->animCmdIndex != 0 && sprite->animDelayCounter != 0) || (sprite->animCmdIndex == 0 && sprite->animDelayCounter == 0)) - { sprite->pos2.y = -8; - } } } @@ -4225,14 +3270,14 @@ static const struct SubspriteTable gSubspriteTables_83ED75C[]; static void sub_81051C0(void) { u8 spriteId = CreateSprite(&gSpriteTemplate_83ED474, 0x170, 0x34, 7); - struct Sprite *sprite = gSprites + spriteId; + struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->coordOffsetEnabled = TRUE; SetSubspriteTables(sprite, gSubspriteTables_83ED73C); eSlotMachine->unk49[0] = spriteId; spriteId = CreateSprite(&gSpriteTemplate_83ED48C, 0x170, 0x54, 7); - sprite = gSprites + spriteId; + sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->coordOffsetEnabled = TRUE; SetSubspriteTables(sprite, gSubspriteTables_83ED75C); @@ -4245,7 +3290,7 @@ static const struct SubspriteTable gSubspriteTables_83ED78C[]; static void sub_8105284(void) { u8 spriteId = CreateSprite(&gSpriteTemplate_83ED4A4, 0xa8 - gSpriteCoordOffsetX, 0x50, 7); - struct Sprite *sprite = gSprites + spriteId; + struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->coordOffsetEnabled = TRUE; SetSubspriteTables(sprite, gSubspriteTables_83ED78C); @@ -4261,7 +3306,7 @@ static void sub_81052EC(void) for (i = 0, r5 = 0; i < 3; i++, r5 += 20) { u8 spriteId = CreateSprite(&gSpriteTemplate_83ED4BC, 0x170, 0x00, 10); - struct Sprite *sprite = gSprites + spriteId; + struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->coordOffsetEnabled = TRUE; sprite->data[7] = r5; @@ -4283,14 +3328,14 @@ static const struct SubspriteTable gSubspriteTables_83ED7B4[]; static void sub_81053A0(void) { u8 spriteId = CreateSprite(&gSpriteTemplate_83ED4D4, 0x170, 0x64, 9); - struct Sprite *sprite = gSprites + spriteId; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = 1; SetSubspriteTables(sprite, gSubspriteTables_83ED7B4); eSlotMachine->unk4E[0] = spriteId; spriteId = CreateSprite(&gSpriteTemplate_83ED4D4, 0x120, 0x68, 4); - sprite = gSprites + spriteId; + sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = 1; SetSubspriteTables(sprite, gSubspriteTables_83ED7B4); @@ -4303,7 +3348,7 @@ static const struct SubspriteTable gSubspriteTables_83ED7D4[]; static void sub_810545C(void) { u8 spriteId = CreateSprite(&gSpriteTemplate_83ED4EC, 0x170, 0x4c, 11); - struct Sprite *sprite = gSprites + spriteId; + struct Sprite *sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = 1; SetSubspriteTables(sprite, gSubspriteTables_83ED7D4); @@ -4314,29 +3359,24 @@ static void sub_81054B8(void) { u8 i; - DestroySprite(gSprites + eSlotMachine->unk40); + DestroySprite(&gSprites[eSlotMachine->unk40]); for (i = 0; i < 2; i++) - { - DestroySprite(gSprites + eSlotMachine->unk49[i]); - } + DestroySprite(&gSprites[eSlotMachine->unk49[i]]); for (i = 0; i < 3; i++) - { - DestroySprite(gSprites + eSlotMachine->unk4B[i]); - } + DestroySprite(&gSprites[eSlotMachine->unk4B[i]]); } static void sub_8105524(void) { u8 i; + for (i = 0; i < 2; i++) - { - DestroySprite(gSprites + eSlotMachine->unk4E[i]); - } + DestroySprite(&gSprites[eSlotMachine->unk4E[i]]); } static void sub_8105554(void) { - DestroySprite(gSprites + eSlotMachine->unk42); + DestroySprite(&gSprites[eSlotMachine->unk42]); } static const struct SpriteTemplate gSpriteTemplate_83ED504; @@ -4344,7 +3384,7 @@ static const struct SpriteTemplate gSpriteTemplate_83ED504; static void sub_8105578(void) { u8 spriteId = CreateSprite(&gSpriteTemplate_83ED504, 0x98, 0x20, 5); - struct Sprite *sprite = gSprites + spriteId; + struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->hFlip = TRUE; eSlotMachine->unk50[0] = spriteId; @@ -4354,7 +3394,7 @@ static void sub_8105578(void) sprite->data[7] = 0x20; spriteId = CreateSprite(&gSpriteTemplate_83ED504, 0xb8, 0x20, 5); - sprite = gSprites + spriteId; + sprite = &gSprites[spriteId]; sprite->oam.priority = 1; eSlotMachine->unk50[1] = spriteId; sprite->data[1] = 1; @@ -4395,9 +3435,7 @@ static void sub_81056C0(void) u8 i; for (i = 0; i < 2; i++) - { - DestroySprite(gSprites + eSlotMachine->unk50[i]); - } + DestroySprite(&gSprites[eSlotMachine->unk50[i]]); } static const struct SpriteTemplate gSpriteTemplate_83ED51C; @@ -4442,9 +3480,7 @@ static void sub_8105804(void) u8 i; MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(7) << 4) + 0x103, 0, 0, 0); for (i = 0; i < 2; i++) - { - DestroySprite(gSprites + eSlotMachine->unk52[i]); - } + DestroySprite(&gSprites[eSlotMachine->unk52[i]]); } static const struct SpriteTemplate gSpriteTemplate_83ED534; @@ -4463,7 +3499,7 @@ static void sub_8105894(struct Sprite *sprite) static void sub_81058A0(void) { - DestroySprite(gSprites + eSlotMachine->unk41); + DestroySprite(&gSprites[eSlotMachine->unk41]); } static const struct SpriteTemplate gSpriteTemplate_83ED54C; @@ -4475,7 +3511,7 @@ static void sub_81058C4(void) for (i = 0; i < 4; i++) { u8 spriteId = CreateSprite(&gSpriteTemplate_83ED54C, 0x50 - gSpriteCoordOffsetX, 0x44, 0); - struct Sprite *sprite = gSprites + spriteId; + struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->coordOffsetEnabled = TRUE; sprite->data[0] = sp[i]; @@ -4506,7 +3542,7 @@ static void sub_81059B8(void) u8 i; for (i = 0; i < 4; i++) { - DestroySprite(gSprites + eSlotMachine->unk54[i]); + DestroySprite(&gSprites[eSlotMachine->unk54[i]]); } } @@ -4515,7 +3551,7 @@ static const struct SpriteTemplate gSpriteTemplate_83ED564; static void sub_81059E8(void) { u8 spriteId = CreateSprite(&gSpriteTemplate_83ED564, 0xa8, 0x3c, 8); - struct Sprite *sprite = gSprites + spriteId; + struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; InitSpriteAffineAnim(sprite); @@ -4556,7 +3592,7 @@ u8 sub_8105ACC(void) static void sub_8105AEC(void) { - struct Sprite *sprite = gSprites + eSlotMachine->unk43; + struct Sprite *sprite = &gSprites[eSlotMachine->unk43]; FreeOamMatrix(sprite->oam.matrixNum); DestroySprite(sprite); } @@ -4566,7 +3602,7 @@ static const struct SpriteTemplate gSpriteTemplate_83ED6CC; static u8 sub_8105B1C(s16 x, s16 y) { u8 spriteId = CreateSprite(&gSpriteTemplate_83ED6CC, x, y, 12); - struct Sprite *sprite = gSprites + spriteId; + struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 2; sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; InitSpriteAffineAnim(sprite); @@ -4581,7 +3617,7 @@ static void sub_8105B70(struct Sprite *sprite) static void sub_8105B88(u8 spriteId) { - struct Sprite *sprite = gSprites + spriteId; + struct Sprite *sprite = &gSprites[spriteId]; FreeOamMatrix(sprite->oam.matrixNum); DestroySprite(sprite); } @@ -4600,7 +3636,7 @@ static const struct SubspriteTable *const gUnknown_083EDBC4[]; static u8 sub_8105BF8(u8 templateIdx, SpriteCallback callback, s16 x, s16 y, s16 a4) { u8 spriteId = CreateSprite(gUnknown_083EDB5C[templateIdx], x, y, 16); - struct Sprite *sprite = gSprites + spriteId; + struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 3; sprite->callback = callback; sprite->data[6] = a4; @@ -4657,30 +3693,26 @@ static void sub_8105D3C(struct Sprite *sprite) { switch (sprite->data[0]) { - case 0: - sprite->pos1.x += 4; - if (sprite->pos1.x >= 0xd0) - { - sprite->pos1.x = 0xd0; - sprite->data[0]++; - } - break; - case 1: - if (++sprite->data[1] > 90) - { - sprite->data[0]++; - } - break; - case 2: - sprite->pos1.x += 4; - if (sprite->pos1.x >= 0x110) - { - sprite->data[0]++; - } - break; - case 3: - sprite->data[7] = 0; - break; + case 0: + sprite->pos1.x += 4; + if (sprite->pos1.x >= 0xd0) + { + sprite->pos1.x = 0xd0; + sprite->data[0]++; + } + break; + case 1: + if (++sprite->data[1] > 90) + sprite->data[0]++; + break; + case 2: + sprite->pos1.x += 4; + if (sprite->pos1.x >= 0x110) + sprite->data[0]++; + break; + case 3: + sprite->data[7] = 0; + break; } } @@ -4688,30 +3720,26 @@ static void sub_8105DA4(struct Sprite *sprite) { switch (sprite->data[0]) { - case 0: - sprite->pos1.x -= 4; - if (sprite->pos1.x <= 0xd0) - { - sprite->pos1.x = 0xd0; - sprite->data[0]++; - } - break; - case 1: - if (++sprite->data[1] > 90) - { - sprite->data[0]++; - } - break; - case 2: - sprite->pos1.x -= 4; - if (sprite->pos1.x <= 0x90) - { - sprite->data[0]++; - } - break; - case 3: - sprite->data[7] = 0; - break; + case 0: + sprite->pos1.x -= 4; + if (sprite->pos1.x <= 0xd0) + { + sprite->pos1.x = 0xd0; + sprite->data[0]++; + } + break; + case 1: + if (++sprite->data[1] > 90) + sprite->data[0]++; + break; + case 2: + sprite->pos1.x -= 4; + if (sprite->pos1.x <= 0x90) + sprite->data[0]++; + break; + case 3: + sprite->data[7] = 0; + break; } } @@ -4719,41 +3747,37 @@ static void sub_8105E08(struct Sprite *sprite) { switch (sprite->data[0]) { - case 0: - StartSpriteAnim(sprite, eSlotMachine->unk0A - 1); + case 0: + StartSpriteAnim(sprite, eSlotMachine->unk0A - 1); + sprite->data[0]++; + // fallthrough + case 1: + if (++sprite->data[1] >= 4) + { sprite->data[0]++; - // fallthrough - case 1: - if (++sprite->data[1] >= 4) - { - sprite->data[0]++; - sprite->data[1] = 0; - } - break; - case 2: - sprite->pos1.x += 4; - if (sprite->pos1.x >= 0xd0) - { - sprite->pos1.x = 0xd0; - sprite->data[0]++; - } - break; - case 3: - if (++sprite->data[1] > 90) - { - sprite->data[0]++; - } - break; - case 4: - sprite->pos1.x += 4; - if (sprite->pos1.x >= 0xf8) - { - sprite->data[0]++; - } - break; - case 5: - sprite->data[7] = 0; - break; + sprite->data[1] = 0; + } + break; + case 2: + sprite->pos1.x += 4; + if (sprite->pos1.x >= 0xd0) + { + sprite->pos1.x = 0xd0; + sprite->data[0]++; + } + break; + case 3: + if (++sprite->data[1] > 90) + sprite->data[0]++; + break; + case 4: + sprite->pos1.x += 4; + if (sprite->pos1.x >= 0xf8) + sprite->data[0]++; + break; + case 5: + sprite->data[7] = 0; + break; } } @@ -4761,39 +3785,39 @@ static void sub_8105EB4(struct Sprite *sprite) { switch (sprite->data[0]) { - case 0: - sprite->animPaused = TRUE; + case 0: + sprite->animPaused = TRUE; + sprite->data[0]++; + // fallthrough + case 1: + sprite->pos1.y += 8; + if (sprite->pos1.y >= 0x70) + { + sprite->pos1.y = 0x70; + sprite->data[1] = 16; sprite->data[0]++; - // fallthrough - case 1: - sprite->pos1.y += 8; - if (sprite->pos1.y >= 0x70) - { - sprite->pos1.y = 0x70; - sprite->data[1] = 16; - sprite->data[0]++; - } - break; - case 2: - if (sprite->data[2] == 0) + } + break; + case 2: + if (sprite->data[2] == 0) + { + sprite->pos1.y -= sprite->data[1]; + sprite->data[1] = -sprite->data[1]; + if (++sprite->data[3] >= 2) { - sprite->pos1.y -= sprite->data[1]; - sprite->data[1] = -sprite->data[1]; - if (++sprite->data[3] >= 2) + sprite->data[1] >>= 2; + sprite->data[3] = 0; + if (sprite->data[1] == 0) { - sprite->data[1] >>= 2; - sprite->data[3] = 0; - if (sprite->data[1] == 0) - { - sprite->data[0]++; - sprite->data[7] = 0; - sprite->animPaused = FALSE; - } + sprite->data[0]++; + sprite->data[7] = 0; + sprite->animPaused = FALSE; } } - sprite->data[2]++; - sprite->data[2] &= 0x07; - break; + } + sprite->data[2]++; + sprite->data[2] &= 0x07; + break; } } @@ -4801,21 +3825,19 @@ static void sub_8105F54(struct Sprite *sprite) { switch (sprite->data[0]) { - case 0: - if (++sprite->data[1] > 8) - { - sprite->data[0]++; - } - break; - case 1: - sprite->pos1.y += 2; - if (sprite->pos1.y >= 0x30) - { - sprite->pos1.y = 0x30; - sprite->data[0]++; - sprite->data[7] = 0; - } - break; + case 0: + if (++sprite->data[1] > 8) + sprite->data[0]++; + break; + case 1: + sprite->pos1.y += 2; + if (sprite->pos1.y >= 0x30) + { + sprite->pos1.y = 0x30; + sprite->data[0]++; + sprite->data[7] = 0; + } + break; } } @@ -4823,35 +3845,33 @@ static void sub_8105F9C(struct Sprite *sprite) { switch (sprite->data[0]) { - case 0: - sprite->invisible = TRUE; - if (++sprite->data[1] > 0x20) - { - sprite->data[0]++; - sprite->data[1] = 5; - sprite->oam.mosaic = TRUE; - sprite->invisible = FALSE; - StartSpriteAnim(sprite, 1); - REG_MOSAIC = ((sprite->data[1] << 4) | sprite->data[1]) << 8; - } - break; - case 1: - sprite->data[1] -= (sprite->data[2] >> 8); - if (sprite->data[1] < 0) - { - sprite->data[1] = 0; - } + case 0: + sprite->invisible = TRUE; + if (++sprite->data[1] > 0x20) + { + sprite->data[0]++; + sprite->data[1] = 5; + sprite->oam.mosaic = TRUE; + sprite->invisible = FALSE; + StartSpriteAnim(sprite, 1); REG_MOSAIC = ((sprite->data[1] << 4) | sprite->data[1]) << 8; - sprite->data[2] &= 0xff; - sprite->data[2] += 0x80; - if (sprite->data[1] == 0) - { - sprite->data[0]++; - sprite->data[7] = 0; - sprite->oam.mosaic = FALSE; - StartSpriteAnim(sprite, 0); - } - break; + } + break; + case 1: + sprite->data[1] -= (sprite->data[2] >> 8); + if (sprite->data[1] < 0) + sprite->data[1] = 0; + REG_MOSAIC = ((sprite->data[1] << 4) | sprite->data[1]) << 8; + sprite->data[2] &= 0xff; + sprite->data[2] += 0x80; + if (sprite->data[1] == 0) + { + sprite->data[0]++; + sprite->data[7] = 0; + sprite->oam.mosaic = FALSE; + StartSpriteAnim(sprite, 0); + } + break; } } @@ -4889,40 +3909,30 @@ static void sub_81060FC(struct Sprite *sprite) switch (sprite->data[0]) { - case 0: - sprite->pos2.x = sp00[sprite->data[6]]; - sprite->pos2.y = sp10[sprite->data[6]]; - sprite->data[1] = sp20[sprite->data[6]]; + case 0: + sprite->pos2.x = sp00[sprite->data[6]]; + sprite->pos2.y = sp10[sprite->data[6]]; + sprite->data[1] = sp20[sprite->data[6]]; + sprite->data[0]++; + // fallthrough + case 1: + if (sprite->data[1]-- == 0) sprite->data[0]++; - // fallthrough - case 1: - if (sprite->data[1]-- == 0) - { - sprite->data[0]++; - } - break; - case 2: - if (sprite->pos2.x > 0) - { - sprite->pos2.x -= 4; - } - else if (sprite->pos2.x < 0) - { - sprite->pos2.x += 4; - } - if (sprite->pos2.y > 0) - { - sprite->pos2.y -= 4; - } - else if (sprite->pos2.y < 0) - { - sprite->pos2.y += 4; - } - if (sprite->pos2.x == 0 && sprite->pos2.y == 0) - { - sprite->data[0]++; - } - break; + break; + case 2: + if (sprite->pos2.x > 0) + sprite->pos2.x -= 4; + else if (sprite->pos2.x < 0) + sprite->pos2.x += 4; + + if (sprite->pos2.y > 0) + sprite->pos2.y -= 4; + else if (sprite->pos2.y < 0) + sprite->pos2.y += 4; + + if (sprite->pos2.x == 0 && sprite->pos2.y == 0) + sprite->data[0]++; + break; } } @@ -4937,10 +3947,8 @@ static void sub_81061C8(struct Sprite *sprite) } sprite->pos2.x = Cos(sp0[sprite->data[6]], sprite->data[1]); sprite->pos2.y = Sin(sp0[sprite->data[6]], sprite->data[1]); - if (sprite->data[1]) - { + if (sprite->data[1] != 0) sprite->data[1]--; - } } static void sub_8106230(struct Sprite *sprite) @@ -4959,13 +3967,9 @@ static void sub_8106230(struct Sprite *sprite) sprite->data[2] = sprite->data[1] + 0xb0; sprite->data[3] = 0xf0 - sprite->data[1]; if (sprite->data[2] > 0xd0) - { sprite->data[2] = 0xd0; - } if (sprite->data[3] < 0xd0) - { sprite->data[3] = 0xd0; - } eSlotMachine->win0h = (sprite->data[2] << 8) | sprite->data[3]; if (sprite->data[1] > 0x33) { @@ -4975,9 +3979,7 @@ static void sub_8106230(struct Sprite *sprite) break; case 2: if (eSlotMachine->bet == 0) - { break; - } sub_8104D30(5, SpriteCallbackDummy, 0xd0, 0x74, 0); eSlotMachine->win0h = 0xc0e0; eSlotMachine->win0v = 0x6880; @@ -4990,13 +3992,9 @@ static void sub_8106230(struct Sprite *sprite) sprite->data[2] = sprite->data[1] + 0xc0; sprite->data[3] = 0xe0 - sprite->data[1]; if (sprite->data[2] > 0xd0) - { sprite->data[2] = 0xd0; - } if (sprite->data[3] < 0xd0) - { sprite->data[3] = 0xd0; - } eSlotMachine->win0h = (sprite->data[2] << 8) | sprite->data[3]; if (sprite->data[1] > 0x0f) { @@ -5009,7 +4007,6 @@ static void sub_8106230(struct Sprite *sprite) static void nullsub_70(void) { - } static void sub_8106364(void) @@ -5058,14 +4055,13 @@ static void sub_8106404(void) { u8 j; for (j = 0; j < 0x20; j++, dest++) - { *dest = src[j]; - } } LoadSpriteSheet(sheet); } -static void sub_8106448(void) { +static void sub_8106448(void) +{ LZDecompressWram(gSlotMachine_Gfx, eSlotMachineGfxBuffer); DmaCopyLarge16(3, eSlotMachineGfxBuffer, BG_VRAM, SLOTMACHINE_GFX_TILES * 32, 0x1000); @@ -5074,12 +4070,14 @@ static void sub_8106448(void) { LoadPalette(gPalette_83EDE24, 208, 32); } -static void sub_81064B8(void) { +static void sub_81064B8(void) +{ CpuCopy16(gUnknown_08E95AB8, BG_SCREEN_ADDR(29), 20 * 32 * 2); LoadSlotMachineWheelOverlay(); } -static void LoadSlotMachineWheelOverlay(void) { +static void LoadSlotMachineWheelOverlay(void) +{ s16 x, y, dx; u16 *screen; @@ -5099,13 +4097,12 @@ static void LoadSlotMachineWheelOverlay(void) { screen[12 * 32 + x] = 0x28BE; for (y = 7; y <= 11; y++) - { screen[y * 32 + x] = 0x20BF; - } } } -static void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4) { +static void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4) +{ u16 *vram = BG_SCREEN_ADDR(29); vram[15 * 32 + arg0] = arg1; @@ -5125,1230 +4122,10 @@ static void sub_81065DC(void) for (y = 0; y < 20; y++) { for (x = 0; x < 30; x++) - { screen[x + y * 32] = 0; - } } } -#if DEBUG -__attribute__((naked)) -void debug_sub_811B1C4() -{ - asm( - " ldr r1, .__1_\n" - " ldrb r0, [r1]\n" - " mov r3, #0x2\n" - " orr r0, r0, r3\n" - " strb r0, [r1]\n" - " ldr r2, .__1_ + 4\n" - " ldrb r1, [r2]\n" - " mov r0, #0x2\n" - " eor r1, r1, r0\n" - " neg r0, r1\n" - " orr r0, r0, r1\n" - " asr r0, r0, #0x1f\n" - " and r0, r0, r3\n" - " strb r0, [r2]\n" - " bx lr\n" - ".__2_:\n" - " .align 2, 0\n" - ".__1_:\n" - " .word unk_debug_bss_1_3\n" - " .word unk_debug_bss_1_0\n" - "\n" - ); -} - -__attribute__((naked)) -void debug_sub_811B1EC() -{ - asm( - " ldr r2, .__3\n" - " ldrb r0, [r2]\n" - " mov r1, #0x1\n" - " orr r0, r0, r1\n" - " strb r0, [r2]\n" - " ldr r2, .__3 + 4\n" - " ldrb r0, [r2]\n" - " mov r1, #0x1\n" - " eor r0, r0, r1\n" - " neg r0, r0\n" - " lsr r0, r0, #0x1f\n" - " strb r0, [r2]\n" - " bx lr\n" - ".__4:\n" - " .align 2, 0\n" - ".__3:\n" - " .word unk_debug_bss_1_3\n" - " .word unk_debug_bss_1_0\n" - "\n" - ); -} - -__attribute__((naked)) -void debug_sub_811B210() -{ - asm( - " ldr r1, .__5\n" - " ldrb r0, [r1]\n" - " mov r3, #0x4\n" - " orr r0, r0, r3\n" - " strb r0, [r1]\n" - " ldr r2, .__5 + 4\n" - " ldrb r1, [r2]\n" - " mov r0, #0x4\n" - " eor r1, r1, r0\n" - " neg r0, r1\n" - " orr r0, r0, r1\n" - " asr r0, r0, #0x1f\n" - " and r0, r0, r3\n" - " strb r0, [r2]\n" - " bx lr\n" - ".__6:\n" - " .align 2, 0\n" - ".__5:\n" - " .word unk_debug_bss_1_3\n" - " .word unk_debug_bss_1_0\n" - "\n" - ); -} - -__attribute__((naked)) -void debug_sub_811B238() -{ - asm( - " ldr r1, .__7\n" - " ldrb r0, [r1]\n" - " mov r3, #0x8\n" - " orr r0, r0, r3\n" - " strb r0, [r1]\n" - " ldr r2, .__7 + 4\n" - " ldrb r1, [r2]\n" - " mov r0, #0x8\n" - " eor r1, r1, r0\n" - " neg r0, r1\n" - " orr r0, r0, r1\n" - " asr r0, r0, #0x1f\n" - " and r0, r0, r3\n" - " strb r0, [r2]\n" - " bx lr\n" - ".__8:\n" - " .align 2, 0\n" - ".__7:\n" - " .word unk_debug_bss_1_3\n" - " .word unk_debug_bss_1_0\n" - "\n" - ); -} - -__attribute__((naked)) -void debug_sub_811B260() -{ - asm( - " ldr r1, .__9\n" - " ldrb r0, [r1]\n" - " mov r3, #0x10\n" - " orr r0, r0, r3\n" - " strb r0, [r1]\n" - " ldr r2, .__9 + 4\n" - " ldrb r1, [r2]\n" - " mov r0, #0x10\n" - " eor r1, r1, r0\n" - " neg r0, r1\n" - " orr r0, r0, r1\n" - " asr r0, r0, #0x1f\n" - " and r0, r0, r3\n" - " strb r0, [r2]\n" - " bx lr\n" - ".__10:\n" - " .align 2, 0\n" - ".__9:\n" - " .word unk_debug_bss_1_3\n" - " .word unk_debug_bss_1_0\n" - "\n" - ); -} - -__attribute__((naked)) -void debug_sub_811B288() -{ - asm( - " ldr r1, .__11\n" - " ldrb r0, [r1]\n" - " mov r3, #0x40\n" - " orr r0, r0, r3\n" - " strb r0, [r1]\n" - " ldr r2, .__11 + 4\n" - " ldrb r1, [r2]\n" - " mov r0, #0x40\n" - " eor r1, r1, r0\n" - " neg r0, r1\n" - " orr r0, r0, r1\n" - " asr r0, r0, #0x1f\n" - " and r0, r0, r3\n" - " strb r0, [r2]\n" - " bx lr\n" - ".__12:\n" - " .align 2, 0\n" - ".__11:\n" - " .word unk_debug_bss_1_3\n" - " .word unk_debug_bss_1_0\n" - "\n" - ); -} - -__attribute__((naked)) -void debug_sub_811B2B0() -{ - asm( - " ldr r1, .__13\n" - " ldrb r0, [r1]\n" - " mov r3, #0x80\n" - " orr r0, r0, r3\n" - " strb r0, [r1]\n" - " ldr r2, .__13 + 4\n" - " ldrb r1, [r2]\n" - " mov r0, #0x80\n" - " eor r1, r1, r0\n" - " neg r0, r1\n" - " orr r0, r0, r1\n" - " asr r0, r0, #0x1f\n" - " and r0, r0, r3\n" - " strb r0, [r2]\n" - " bx lr\n" - ".__14:\n" - " .align 2, 0\n" - ".__13:\n" - " .word unk_debug_bss_1_3\n" - " .word unk_debug_bss_1_0\n" - "\n" - ); -} - -__attribute__((naked)) -void debug_sub_811B2D8() -{ - asm( - " ldr r0, .__15\n" - " ldrb r1, [r0]\n" - " mov r2, #0x20\n" - " orr r1, r1, r2\n" - " strb r1, [r0]\n" - " bx lr\n" - ".__16:\n" - " .align 2, 0\n" - ".__15:\n" - " .word unk_debug_bss_1_3\n" - "\n" - ); -} - -__attribute__((naked)) -void debug_sub_811B2E8() -{ - asm( - " push {lr}\n" - " add sp, sp, #0xfffffffc\n" - " ldr r0, .__17\n" - " ldrb r1, [r0, #0x1]\n" - " add r1, r1, #0x1\n" - " mov r0, sp\n" - " mov r2, #0x2\n" - " mov r3, #0x1\n" - " bl ConvertIntToDecimalStringN\n" - " mov r0, sp\n" - " mov r1, #0x6\n" - " mov r2, #0x1\n" - " bl Menu_PrintText\n" - " add sp, sp, #0x4\n" - " pop {r0}\n" - " bx r0\n" - ".__18:\n" - " .align 2, 0\n" - ".__17:\n" - " .word +0x2000000\n" - "\n" - ); -} - -__attribute__((naked)) -void debug_sub_811B310() -{ - asm( - " push {r4, lr}\n" - " add sp, sp, #0xfffffff8\n" - " ldr r0, .__21\n" - " mov r1, #0x1\n" - " mov r2, #0x1\n" - " bl Menu_PrintText\n" - " ldr r0, .__21 + 4\n" - " mov r1, #0x1\n" - " mov r2, #0x3\n" - " bl Menu_PrintText\n" - " ldr r0, .__21 + 8\n" - " mov r1, #0x1\n" - " mov r2, #0x5\n" - " bl Menu_PrintText\n" - " ldr r0, .__21 + 12\n" - " mov r1, #0x1\n" - " mov r2, #0x7\n" - " bl Menu_PrintText\n" - " ldr r0, .__21 + 16\n" - " mov r1, #0x1\n" - " mov r2, #0x9\n" - " bl Menu_PrintText\n" - " ldr r0, .__21 + 20\n" - " mov r1, #0x1\n" - " mov r2, #0xb\n" - " bl Menu_PrintText\n" - " ldr r0, .__21 + 24\n" - " mov r1, #0x1\n" - " mov r2, #0xd\n" - " bl Menu_PrintText\n" - " ldr r0, .__21 + 28\n" - " mov r1, #0x1\n" - " mov r2, #0xf\n" - " bl Menu_PrintText\n" - " ldr r0, .__21 + 32\n" - " mov r1, #0x1\n" - " mov r2, #0x11\n" - " bl Menu_PrintText\n" - " ldr r0, .__21 + 36\n" - " mov r1, #0xf\n" - " mov r2, #0x1\n" - " bl Menu_PrintText\n" - " ldr r0, .__21 + 40\n" - " mov r1, #0xf\n" - " mov r2, #0x3\n" - " bl Menu_PrintText\n" - " ldr r0, .__21 + 44\n" - " mov r1, #0xf\n" - " mov r2, #0x5\n" - " bl Menu_PrintText\n" - " ldr r0, .__21 + 48\n" - " mov r1, #0xf\n" - " mov r2, #0x7\n" - " bl Menu_PrintText\n" - " ldr r0, .__21 + 52\n" - " mov r1, #0xf\n" - " mov r2, #0x9\n" - " bl Menu_PrintText\n" - " ldr r0, .__21 + 56\n" - " mov r1, #0xf\n" - " mov r2, #0xb\n" - " bl Menu_PrintText\n" - " ldr r0, .__21 + 60\n" - " mov r1, #0xf\n" - " mov r2, #0xd\n" - " bl Menu_PrintText\n" - " ldr r0, .__21 + 64\n" - " mov r1, #0xf\n" - " mov r2, #0xf\n" - " bl Menu_PrintText\n" - " ldr r0, .__21 + 68\n" - " mov r1, #0xf\n" - " mov r2, #0x11\n" - " bl Menu_PrintText\n" - " ldr r0, .__21 + 72\n" - " ldrb r0, [r0, #0x3]\n" - " cmp r0, #0\n" - " bne .__19 @cond_branch\n" - " ldr r0, .__21 + 76\n" - " mov r1, #0xa\n" - " mov r2, #0x9\n" - " bl Menu_PrintText\n" - " b .__20\n" - ".__22:\n" - " .align 2, 0\n" - ".__21:\n" - " .word Str_841B1C4\n" - " .word Str_841B1CB\n" - " .word Str_841B1D4\n" - " .word Str_841B1DB\n" - " .word Str_841B1E2\n" - " .word Str_841B1E8\n" - " .word Str_841B1F3\n" - " .word Str_841B202\n" - " .word Str_841B24C\n" - " .word Str_841B211\n" - " .word Str_841B219\n" - " .word Str_841B220\n" - " .word Str_841B227\n" - " .word Str_841B22E\n" - " .word Str_841B235\n" - " .word Str_841B23B\n" - " .word Str_841B23F\n" - " .word Str_841B243\n" - " .word +0x2000000\n" - " .word Str_841B246\n" - ".__19:\n" - " ldr r0, .__30\n" - " mov r1, #0xa\n" - " mov r2, #0x9\n" - " bl Menu_PrintText\n" - ".__20:\n" - " ldr r4, .__30 + 4\n" - " ldr r1, [r4, #0x68]\n" - " mov r0, sp\n" - " mov r2, #0x2\n" - " mov r3, #0x4\n" - " bl ConvertIntToDecimalStringN\n" - " mov r0, sp\n" - " mov r1, #0xa\n" - " mov r2, #0x3\n" - " bl Menu_PrintText\n" - " ldr r1, [r4, #0x6c]\n" - " mov r0, sp\n" - " mov r2, #0x2\n" - " mov r3, #0x4\n" - " bl ConvertIntToDecimalStringN\n" - " mov r0, sp\n" - " mov r1, #0xa\n" - " mov r2, #0x5\n" - " bl Menu_PrintText\n" - " mov r0, #0x10\n" - " ldsh r1, [r4, r0]\n" - " mov r0, sp\n" - " mov r2, #0x2\n" - " mov r3, #0x4\n" - " bl ConvertIntToDecimalStringN\n" - " mov r0, sp\n" - " mov r1, #0xa\n" - " mov r2, #0x7\n" - " bl Menu_PrintText\n" - " ldr r1, [r4, #0x70]\n" - " mov r0, sp\n" - " mov r2, #0x2\n" - " mov r3, #0x4\n" - " bl ConvertIntToDecimalStringN\n" - " mov r0, sp\n" - " mov r1, #0x14\n" - " mov r2, #0x3\n" - " bl Menu_PrintText\n" - " ldr r1, [r4, #0x74]\n" - " mov r0, sp\n" - " mov r2, #0x2\n" - " mov r3, #0x4\n" - " bl ConvertIntToDecimalStringN\n" - " mov r0, sp\n" - " mov r1, #0x14\n" - " mov r2, #0x5\n" - " bl Menu_PrintText\n" - " ldr r1, [r4, #0x78]\n" - " mov r0, sp\n" - " mov r2, #0x2\n" - " mov r3, #0x4\n" - " bl ConvertIntToDecimalStringN\n" - " mov r0, sp\n" - " mov r1, #0x14\n" - " mov r2, #0x7\n" - " bl Menu_PrintText\n" - " ldr r1, [r4, #0x7c]\n" - " mov r0, sp\n" - " mov r2, #0x2\n" - " mov r3, #0x4\n" - " bl ConvertIntToDecimalStringN\n" - " mov r0, sp\n" - " mov r1, #0x14\n" - " mov r2, #0x9\n" - " bl Menu_PrintText\n" - " add r0, r4, #0\n" - " add r0, r0, #0x80\n" - " ldr r1, [r0]\n" - " mov r0, sp\n" - " mov r2, #0x2\n" - " mov r3, #0x4\n" - " bl ConvertIntToDecimalStringN\n" - " mov r0, sp\n" - " mov r1, #0x14\n" - " mov r2, #0xb\n" - " bl Menu_PrintText\n" - " add r0, r4, #0\n" - " add r0, r0, #0x84\n" - " ldr r1, [r0]\n" - " mov r0, sp\n" - " mov r2, #0x2\n" - " mov r3, #0x4\n" - " bl ConvertIntToDecimalStringN\n" - " mov r0, sp\n" - " mov r1, #0x14\n" - " mov r2, #0xd\n" - " bl Menu_PrintText\n" - " add r0, r4, #0\n" - " add r0, r0, #0x88\n" - " ldr r1, [r0]\n" - " mov r0, sp\n" - " mov r2, #0x2\n" - " mov r3, #0x4\n" - " bl ConvertIntToDecimalStringN\n" - " mov r0, sp\n" - " mov r1, #0x14\n" - " mov r2, #0xf\n" - " bl Menu_PrintText\n" - " add r0, r4, #0\n" - " add r0, r0, #0x8c\n" - " ldr r1, [r0]\n" - " mov r0, sp\n" - " mov r2, #0x2\n" - " mov r3, #0x4\n" - " bl ConvertIntToDecimalStringN\n" - " mov r0, sp\n" - " mov r1, #0x14\n" - " mov r2, #0x11\n" - " bl Menu_PrintText\n" - " ldr r1, .__30 + 8\n" - " ldrb r0, [r1]\n" - " cmp r0, #0\n" - " beq .__23 @cond_branch\n" - " mov r2, #0x0\n" - " cmp r0, #0x8\n" - " beq .__24 @cond_branch\n" - " cmp r0, #0x8\n" - " bgt .__25 @cond_branch\n" - " cmp r0, #0x2\n" - " beq .__26 @cond_branch\n" - " cmp r0, #0x2\n" - " bgt .__27 @cond_branch\n" - " cmp r0, #0x1\n" - " beq .__28 @cond_branch\n" - " b .__45\n" - ".__31:\n" - " .align 2, 0\n" - ".__30:\n" - " .word Str_841B249\n" - " .word +0x2000000\n" - " .word unk_debug_bss_1_0\n" - ".__27:\n" - " cmp r0, #0x4\n" - " beq .__32 @cond_branch\n" - " b .__45\n" - ".__25:\n" - " cmp r0, #0x40\n" - " beq .__34 @cond_branch\n" - " cmp r0, #0x40\n" - " bgt .__35 @cond_branch\n" - " cmp r0, #0x10\n" - " beq .__36 @cond_branch\n" - " b .__45\n" - ".__35:\n" - " cmp r0, #0x80\n" - " beq .__38 @cond_branch\n" - " b .__45\n" - ".__26:\n" - " mov r2, #0x3\n" - " b .__45\n" - ".__28:\n" - " mov r2, #0x5\n" - " b .__45\n" - ".__32:\n" - " mov r2, #0x7\n" - " b .__45\n" - ".__24:\n" - " mov r2, #0x9\n" - " b .__45\n" - ".__36:\n" - " mov r2, #0xb\n" - " b .__45\n" - ".__34:\n" - " mov r2, #0xd\n" - " b .__45\n" - ".__38:\n" - " mov r2, #0xf\n" - ".__45:\n" - " ldr r0, .__46\n" - " mov r1, #0x17\n" - " bl Menu_PrintText\n" - ".__23:\n" - " bl debug_sub_811B2E8\n" - " add sp, sp, #0x8\n" - " pop {r4}\n" - " pop {r0}\n" - " bx r0\n" - ".__47:\n" - " .align 2, 0\n" - ".__46:\n" - " .word Str_841B26D\n" - "\n" - ); -} - -__attribute__((naked)) -void debug_sub_811B5B4() -{ - asm( - " push {lr}\n" - " add r2, r0, #0\n" - " ldr r0, [r2]\n" - " add r0, r0, r1\n" - " str r0, [r2]\n" - " ldr r1, .__49\n" - " cmp r0, r1\n" - " ble .__48 @cond_branch\n" - " str r1, [r2]\n" - ".__48:\n" - " pop {r0}\n" - " bx r0\n" - ".__50:\n" - " .align 2, 0\n" - ".__49:\n" - " .word 0x270f\n" - "\n" - ); -} - -__attribute__((naked)) -void debug_sub_811B5D0() -{ - asm( - " ldr r0, .__51\n" - " mov r1, #0x0\n" - " strb r1, [r0]\n" - " ldr r0, .__51 + 4\n" - " strb r1, [r0]\n" - " ldr r0, .__51 + 8\n" - " strb r1, [r0]\n" - " ldr r0, .__51 + 12\n" - " strb r1, [r0]\n" - " ldr r2, .__51 + 16\n" - " mov r0, #0x0\n" - " str r0, [r2, #0x68]\n" - " str r0, [r2, #0x6c]\n" - " str r0, [r2, #0x70]\n" - " str r0, [r2, #0x74]\n" - " str r0, [r2, #0x78]\n" - " str r0, [r2, #0x7c]\n" - " add r1, r2, #0\n" - " add r1, r1, #0x80\n" - " str r0, [r1]\n" - " add r1, r1, #0x4\n" - " str r0, [r1]\n" - " add r1, r1, #0x4\n" - " str r0, [r1]\n" - " add r1, r1, #0x4\n" - " str r0, [r1]\n" - " add r1, r1, #0x4\n" - " str r0, [r1]\n" - " bx lr\n" - ".__52:\n" - " .align 2, 0\n" - ".__51:\n" - " .word unk_debug_bss_1_0\n" - " .word unk_debug_bss_1_2\n" - " .word unk_debug_bss_1_3\n" - " .word unk_debug_bss_1_4\n" - " .word +0x2000000\n" - "\n" - ); -} - -__attribute__((naked)) -void debug_sub_811B620() -{ - asm( - " push {lr}\n" - " ldr r0, .__53\n" - " mov r1, #0x0\n" - " bl CreateTask\n" - " pop {r0}\n" - " bx r0\n" - ".__54:\n" - " .align 2, 0\n" - ".__53:\n" - " .word debug_sub_811B654+1\n" - "\n" - ); -} - -__attribute__((naked)) -void debug_sub_811B634() -{ - asm( - " push {lr}\n" - " ldr r0, .__57\n" - " bl FindTaskIdByFunc\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " cmp r0, #0xff\n" - " beq .__55 @cond_branch\n" - " mov r0, #0x0\n" - " b .__56\n" - ".__58:\n" - " .align 2, 0\n" - ".__57:\n" - " .word debug_sub_811B654+1\n" - ".__55:\n" - " mov r0, #0x1\n" - ".__56:\n" - " pop {r1}\n" - " bx r1\n" - "\n" - ); -} - -__attribute__((naked)) -void debug_sub_811B654() -{ - asm( - " push {r4, r5, r6, r7, lr}\n" - " add sp, sp, #0xfffffff8\n" - " lsl r0, r0, #0x18\n" - " lsr r6, r0, #0x18\n" - " lsl r0, r6, #0x2\n" - " add r0, r0, r6\n" - " lsl r0, r0, #0x3\n" - " ldr r1, .__63\n" - " add r5, r0, r1\n" - " mov r0, #0x8\n" - " ldsh r1, [r5, r0]\n" - " cmp r1, #0x1\n" - " beq .__59 @cond_branch\n" - " cmp r1, #0x1\n" - " bgt .__60 @cond_branch\n" - " cmp r1, #0\n" - " beq .__61 @cond_branch\n" - " b .__116\n" - ".__64:\n" - " .align 2, 0\n" - ".__63:\n" - " .word gTasks\n" - ".__60:\n" - " cmp r1, #0x2\n" - " bne .__65 @cond_branch\n" - " b .__66\n" - ".__65:\n" - " cmp r1, #0x3\n" - " bne .__67 @cond_branch\n" - " b .__68\n" - ".__67:\n" - " b .__116\n" - ".__61:\n" - " mov r0, #0x0\n" - " mov r1, #0x0\n" - " mov r2, #0x18\n" - " mov r3, #0x13\n" - " bl Menu_DrawStdWindowFrame\n" - " bl debug_sub_811B310\n" - " ldrh r0, [r5, #0x8]\n" - " add r0, r0, #0x1\n" - " strh r0, [r5, #0x8]\n" - " b .__116\n" - ".__59:\n" - " ldr r7, .__76\n" - " ldrh r2, [r7, #0x2e]\n" - " mov r0, #0x2\n" - " and r0, r0, r2\n" - " cmp r0, #0\n" - " beq .__71 @cond_branch\n" - " b .__94\n" - ".__71:\n" - " mov r0, #0x20\n" - " and r0, r0, r2\n" - " lsl r0, r0, #0x10\n" - " lsr r3, r0, #0x10\n" - " cmp r3, #0\n" - " beq .__73 @cond_branch\n" - " ldr r1, .__76 + 4\n" - " ldrb r0, [r1, #0x1]\n" - " sub r0, r0, #0x1\n" - " strb r0, [r1, #0x1]\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bge .__79 @cond_branch\n" - " mov r0, #0x5\n" - " strb r0, [r1, #0x1]\n" - " b .__79\n" - ".__77:\n" - " .align 2, 0\n" - ".__76:\n" - " .word gMain\n" - " .word +0x2000000\n" - ".__73:\n" - " mov r0, #0x10\n" - " and r0, r0, r2\n" - " cmp r0, #0\n" - " beq .__78 @cond_branch\n" - " ldr r1, .__81\n" - " ldrb r0, [r1, #0x1]\n" - " add r0, r0, #0x1\n" - " strb r0, [r1, #0x1]\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " cmp r0, #0x5\n" - " bls .__79 @cond_branch\n" - " strb r3, [r1, #0x1]\n" - ".__79:\n" - " bl debug_sub_811B2E8\n" - " b .__116\n" - ".__82:\n" - " .align 2, 0\n" - ".__81:\n" - " .word +0x2000000\n" - ".__78:\n" - " and r1, r1, r2\n" - " lsl r0, r1, #0x10\n" - " lsr r4, r0, #0x10\n" - " cmp r4, #0\n" - " beq .__83 @cond_branch\n" - " mov r0, #0x3\n" - " strh r0, [r5, #0x8]\n" - " bl Menu_EraseScreen\n" - " mov r0, #0x0\n" - " mov r1, #0x0\n" - " mov r2, #0x9\n" - " mov r3, #0x5\n" - " bl Menu_DrawStdWindowFrame\n" - " ldr r0, .__85\n" - " mov r1, #0x1\n" - " mov r2, #0x1\n" - " bl Menu_PrintText\n" - " ldr r0, .__85 + 4\n" - " mov r1, #0x1\n" - " mov r2, #0x3\n" - " bl Menu_PrintText\n" - " b .__116\n" - ".__86:\n" - " .align 2, 0\n" - ".__85:\n" - " .word Str_841B25C\n" - " .word Str_841B264\n" - ".__83:\n" - " mov r0, #0x4\n" - " and r0, r0, r2\n" - " cmp r0, #0\n" - " beq .__87 @cond_branch\n" - " ldr r0, .__91\n" - " strb r4, [r0]\n" - " ldr r0, .__91 + 4\n" - " strb r4, [r0]\n" - " bl Menu_EraseScreen\n" - " mov r0, #0x0\n" - " mov r1, #0x0\n" - " mov r2, #0xa\n" - " mov r3, #0x13\n" - " bl Menu_DrawStdWindowFrame\n" - " ldr r0, .__91 + 8\n" - " mov r1, #0x1\n" - " mov r2, #0x1\n" - " bl Menu_PrintText\n" - " ldr r3, .__91 + 12\n" - " mov r0, #0x2\n" - " mov r1, #0x3\n" - " mov r2, #0x8\n" - " bl Menu_PrintItems\n" - " str r4, [sp]\n" - " mov r0, #0x9\n" - " str r0, [sp, #0x4]\n" - " mov r0, #0x0\n" - " mov r1, #0x1\n" - " mov r2, #0x3\n" - " mov r3, #0x8\n" - " bl InitMenu\n" - " ldrh r0, [r5, #0x8]\n" - " add r0, r0, #0x1\n" - " strh r0, [r5, #0x8]\n" - ".__87:\n" - " ldrh r1, [r7, #0x2e]\n" - " mov r0, #0x8\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne .__88 @cond_branch\n" - " b .__116\n" - ".__88:\n" - " ldr r1, .__91 + 16\n" - " mov r0, #0x1\n" - " strb r0, [r1]\n" - " b .__94\n" - ".__92:\n" - " .align 2, 0\n" - ".__91:\n" - " .word unk_debug_bss_1_2\n" - " .word unk_debug_bss_1_3\n" - " .word Str_841B254\n" - " .word _841B270\n" - " .word unk_debug_bss_1_4\n" - ".__66:\n" - " bl Menu_ProcessInput\n" - " lsl r0, r0, #0x18\n" - " asr r2, r0, #0x18\n" - " mov r0, #0x2\n" - " neg r0, r0\n" - " cmp r2, r0\n" - " beq .__116 @cond_branch\n" - " add r0, r0, #0x1\n" - " cmp r2, r0\n" - " beq .__94 @cond_branch\n" - " ldr r1, .__96\n" - " mov r0, #0x1\n" - " strb r0, [r1]\n" - " ldr r0, .__96 + 4\n" - " lsl r1, r2, #0x3\n" - " add r0, r0, #0x4\n" - " add r1, r1, r0\n" - " ldr r0, [r1]\n" - " bl _call_via_r0\n" - ".__94:\n" - " bl Menu_EraseScreen\n" - " add r0, r6, #0\n" - " bl DestroyTask\n" - " b .__116\n" - ".__97:\n" - " .align 2, 0\n" - ".__96:\n" - " .word unk_debug_bss_1_2\n" - " .word _841B270\n" - ".__68:\n" - " ldr r2, .__100\n" - " ldrh r1, [r2, #0x30]\n" - " mov r0, #0x80\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq .__98 @cond_branch\n" - " ldr r2, .__100 + 4\n" - " ldrh r0, [r2, #0xc]\n" - " add r0, r0, #0x64\n" - " b .__99\n" - ".__101:\n" - " .align 2, 0\n" - ".__100:\n" - " .word gMain\n" - " .word +0x2000000\n" - ".__98:\n" - " mov r0, #0x40\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq .__102 @cond_branch\n" - " ldr r1, .__104\n" - " ldrh r0, [r1, #0xc]\n" - " sub r0, r0, #0x64\n" - " b .__103\n" - ".__105:\n" - " .align 2, 0\n" - ".__104:\n" - " .word +0x2000000\n" - ".__102:\n" - " mov r0, #0x20\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq .__106 @cond_branch\n" - " ldr r1, .__109\n" - " ldr r2, .__109 + 4\n" - " add r0, r2, #0\n" - " ldrh r2, [r1, #0xc]\n" - " add r0, r0, r2\n" - ".__103:\n" - " strh r0, [r1, #0xc]\n" - " lsl r0, r0, #0x10\n" - " cmp r0, #0\n" - " bgt .__116 @cond_branch\n" - " ldr r0, .__109 + 8\n" - " strh r0, [r1, #0xc]\n" - " b .__116\n" - ".__110:\n" - " .align 2, 0\n" - ".__109:\n" - " .word +0x2000000\n" - " .word 0xfffffc18\n" - " .word 0x270f\n" - ".__106:\n" - " mov r0, #0x10\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq .__111 @cond_branch\n" - " ldr r2, .__114\n" - " mov r1, #0xfa\n" - " lsl r1, r1, #0x2\n" - " add r0, r1, #0\n" - " ldrh r1, [r2, #0xc]\n" - " add r0, r0, r1\n" - ".__99:\n" - " strh r0, [r2, #0xc]\n" - " lsl r0, r0, #0x10\n" - " asr r0, r0, #0x10\n" - " ldr r1, .__114 + 4\n" - " cmp r0, r1\n" - " ble .__116 @cond_branch\n" - " strh r1, [r2, #0xc]\n" - " b .__116\n" - ".__115:\n" - " .align 2, 0\n" - ".__114:\n" - " .word +0x2000000\n" - " .word 0x270f\n" - ".__111:\n" - " ldrh r1, [r2, #0x2e]\n" - " mov r0, #0x2\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq .__116 @cond_branch\n" - " bl Menu_EraseScreen\n" - " add r0, r6, #0\n" - " bl DestroyTask\n" - ".__116:\n" - " add sp, sp, #0x8\n" - " pop {r4, r5, r6, r7}\n" - " pop {r0}\n" - " bx r0\n" - "\n" - ); -} - -__attribute__((naked)) -void debug_sub_811B894() -{ - 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" - " add sp, sp, #0xfffffffc\n" - " ldr r1, .__122\n" - " ldrh r2, [r1, #0x8]\n" - " mov r0, #0xc0\n" - " lsl r0, r0, #0x1\n" - " and r0, r0, r2\n" - " add r4, r1, #0\n" - " cmp r0, #0\n" - " beq .__117 @cond_branch\n" - " add r1, r1, #0x90\n" - " ldr r0, [r1]\n" - " add r0, r0, #0x1\n" - " str r0, [r1]\n" - " ldr r2, .__122 + 4\n" - " cmp r0, r2\n" - " ble .__118 @cond_branch\n" - " str r2, [r1]\n" - ".__118:\n" - " add r0, r4, #0\n" - " add r0, r0, #0x88\n" - " ldr r1, [r1]\n" - " ldr r0, [r0]\n" - " cmp r1, r0\n" - " beq .__119 @cond_branch\n" - " ldr r0, .__122 + 8\n" - " mov r1, #0x4\n" - " mov r2, #0xf\n" - " bl Menu_PrintText\n" - " ldr r1, .__122 + 12\n" - " mov r0, #0x0\n" - " strb r0, [r1]\n" - ".__119:\n" - " ldrb r1, [r4, #0x4]\n" - " mov r0, #0x80\n" - " and r0, r0, r1\n" - " lsl r0, r0, #0x18\n" - " lsr r4, r0, #0x18\n" - " cmp r4, #0\n" - " bne .__126 @cond_branch\n" - " ldr r0, .__122 + 16\n" - " mov r1, #0x4\n" - " mov r2, #0x11\n" - " b .__121\n" - ".__123:\n" - " .align 2, 0\n" - ".__122:\n" - " .word +0x2000000\n" - " .word 0x270f\n" - " .word Str_841B2B0\n" - " .word unk_debug_bss_1_4\n" - " .word Str_841B2D3\n" - ".__117:\n" - " lsl r0, r2, #0x10\n" - " cmp r0, #0\n" - " beq .__127 @cond_branch\n" - " ldrb r1, [r4, #0x4]\n" - " mov r0, #0x80\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq .__126 @cond_branch\n" - " mov r4, #0x3\n" - " and r4, r4, r2\n" - " cmp r4, #0\n" - " bne .__126 @cond_branch\n" - " ldr r0, .__163\n" - " mov r1, #0x4\n" - " mov r2, #0x2\n" - ".__121:\n" - " bl Menu_PrintText\n" - " ldr r0, .__163 + 4\n" - " strb r4, [r0]\n" - ".__126:\n" - " ldr r0, .__163 + 8\n" - " ldrh r1, [r0, #0x8]\n" - " add r4, r0, #0\n" - " cmp r1, #0\n" - " beq .__127 @cond_branch\n" - " b .__162\n" - ".__127:\n" - " mov r1, #0x12\n" - " ldsh r0, [r4, r1]\n" - " cmp r0, #0x3\n" - " beq .__129 @cond_branch\n" - " b .__162\n" - ".__129:\n" - " ldrb r1, [r4, #0x4]\n" - " mov r0, #0x80\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq .__131 @cond_branch\n" - " b .__162\n" - ".__131:\n" - " mov r0, #0x0\n" - " mov r1, #0x1\n" - " bl GetTagOfReelSymbolOnScreenAtPos\n" - " lsl r0, r0, #0x18\n" - " lsr r7, r0, #0x18\n" - " mov r0, #0x0\n" - " mov r1, #0x2\n" - " bl GetTagOfReelSymbolOnScreenAtPos\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " str r0, [sp]\n" - " mov r0, #0x0\n" - " mov r1, #0x3\n" - " bl GetTagOfReelSymbolOnScreenAtPos\n" - " lsl r0, r0, #0x18\n" - " lsr r6, r0, #0x18\n" - " mov r0, #0x1\n" - " mov r1, #0x1\n" - " bl GetTagOfReelSymbolOnScreenAtPos\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " mov r9, r0\n" - " mov r0, #0x1\n" - " mov r1, #0x2\n" - " bl GetTagOfReelSymbolOnScreenAtPos\n" - " lsl r0, r0, #0x18\n" - " lsr r4, r0, #0x18\n" - " mov r0, #0x1\n" - " mov r1, #0x3\n" - " bl GetTagOfReelSymbolOnScreenAtPos\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " mov sl, r0\n" - " mov r0, #0x2\n" - " mov r1, #0x1\n" - " bl GetTagOfReelSymbolOnScreenAtPos\n" - " lsl r0, r0, #0x18\n" - " lsr r5, r0, #0x18\n" - " mov r0, #0x2\n" - " mov r1, #0x2\n" - " bl GetTagOfReelSymbolOnScreenAtPos\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " mov r8, r0\n" - " mov r0, #0x2\n" - " mov r1, #0x3\n" - " bl GetTagOfReelSymbolOnScreenAtPos\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " cmp r7, #0\n" - " bne .__134 @cond_branch\n" - " mov r1, r9\n" - " cmp r1, #0x1\n" - " bne .__134 @cond_branch\n" - " cmp r5, #0\n" - " beq .__159 @cond_branch\n" - ".__134:\n" - " ldr r1, [sp]\n" - " cmp r1, #0\n" - " bne .__137 @cond_branch\n" - " cmp r4, #0x1\n" - " bne .__137 @cond_branch\n" - " mov r1, r8\n" - " cmp r1, #0\n" - " beq .__159 @cond_branch\n" - ".__137:\n" - " cmp r6, #0\n" - " bne .__140 @cond_branch\n" - " mov r1, sl\n" - " cmp r1, #0x1\n" - " bne .__140 @cond_branch\n" - " cmp r0, #0\n" - " beq .__159 @cond_branch\n" - ".__140:\n" - " cmp r7, #0\n" - " bne .__143 @cond_branch\n" - " cmp r4, #0x1\n" - " bne .__143 @cond_branch\n" - " cmp r0, #0\n" - " beq .__159 @cond_branch\n" - ".__143:\n" - " cmp r6, #0\n" - " bne .__146 @cond_branch\n" - " cmp r4, #0x1\n" - " bne .__146 @cond_branch\n" - " cmp r5, #0\n" - " beq .__159 @cond_branch\n" - ".__146:\n" - " cmp r7, #0x1\n" - " bne .__149 @cond_branch\n" - " mov r1, r9\n" - " cmp r1, #0\n" - " bne .__149 @cond_branch\n" - " cmp r5, #0x1\n" - " beq .__159 @cond_branch\n" - ".__149:\n" - " ldr r1, [sp]\n" - " cmp r1, #0x1\n" - " bne .__152 @cond_branch\n" - " cmp r4, #0\n" - " bne .__152 @cond_branch\n" - " mov r1, r8\n" - " cmp r1, #0x1\n" - " beq .__159 @cond_branch\n" - ".__152:\n" - " cmp r6, #0x1\n" - " bne .__155 @cond_branch\n" - " mov r1, sl\n" - " cmp r1, #0\n" - " bne .__155 @cond_branch\n" - " cmp r0, #0x1\n" - " beq .__159 @cond_branch\n" - ".__155:\n" - " cmp r7, #0x1\n" - " bne .__158 @cond_branch\n" - " cmp r4, #0\n" - " bne .__158 @cond_branch\n" - " cmp r0, #0x1\n" - " beq .__159 @cond_branch\n" - ".__158:\n" - " cmp r6, #0x1\n" - " bne .__162 @cond_branch\n" - " cmp r4, #0\n" - " bne .__162 @cond_branch\n" - " cmp r5, #0x1\n" - " bne .__162 @cond_branch\n" - ".__159:\n" - " ldr r0, .__163 + 12\n" - " mov r1, #0x4\n" - " mov r2, #0x0\n" - " bl Menu_PrintText\n" - " ldr r1, .__163 + 4\n" - " mov r0, #0x0\n" - " strb r0, [r1]\n" - ".__162:\n" - " add sp, sp, #0x4\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" - ".__164:\n" - " .align 2, 0\n" - ".__163:\n" - " .word Str_841B2E4\n" - " .word unk_debug_bss_1_4\n" - " .word +0x2000000\n" - " .word Str_841B2BF\n" - "\n" - ); -} -#endif - static const u8 sReelSymbols[][21] = { { @@ -6373,7 +4150,8 @@ static const u8 sReelSymbols[][21] = SLOT_MACHINE_TAG_POWER, SLOT_MACHINE_TAG_LOTAD, SLOT_MACHINE_TAG_REPLAY - }, { + }, + { SLOT_MACHINE_TAG_7_RED, SLOT_MACHINE_TAG_CHERRY, SLOT_MACHINE_TAG_REPLAY, @@ -6395,7 +4173,8 @@ static const u8 sReelSymbols[][21] = SLOT_MACHINE_TAG_LOTAD, SLOT_MACHINE_TAG_REPLAY, SLOT_MACHINE_TAG_CHERRY - }, { + }, + { SLOT_MACHINE_TAG_7_RED, SLOT_MACHINE_TAG_POWER, SLOT_MACHINE_TAG_7_BLUE, @@ -6417,7 +4196,7 @@ static const u8 sReelSymbols[][21] = SLOT_MACHINE_TAG_REPLAY, SLOT_MACHINE_TAG_LOTAD, SLOT_MACHINE_TAG_CHERRY - } + }, }; static const u8 gUnknown_083ECCF1[] = { @@ -7782,33 +5561,204 @@ static const u16 sReelTimeWindowTilemap[] = INCBIN_U16("graphics/slot_machine/re #if DEBUG -const u8 Str_841B1C4[] = _("SETTEI"); -const u8 Str_841B1CB[] = _("MAWASITA"); -const u8 Str_841B1D4[] = _("MODOSI"); -const u8 Str_841B1DB[] = _("NOMARE"); -const u8 Str_841B1E2[] = _("MAE 7"); -const u8 Str_841B1E8[] = _("LR HENKOU"); -const u8 Str_841B1F3[] = _("START JIDOUSU"); -const u8 Str_841B202[] = _("SELECT SETTEI"); -const u8 Str_841B211[] = _("TYUHSEN"); -const u8 Str_841B219[] = _("CHERRY"); -const u8 Str_841B220[] = _("REPLAY"); -const u8 Str_841B227[] = _("HASUBO"); -const u8 Str_841B22E[] = _("RURIRI"); -const u8 Str_841B235[] = _("INAZU"); -const u8 Str_841B23B[] = _("REG"); -const u8 Str_841B23F[] = _("BIG"); -const u8 Str_841B243[] = _("BD"); -const u8 Str_841B246[] = _("R7"); -const u8 Str_841B249[] = _("B7"); -const u8 Str_841B24C[] = _("A COIN"); -const u8 Str_841B254[] = _("TYUHSEN"); -const u8 Str_841B25C[] = _("UD 100"); -const u8 Str_841B264[] = _("LR 1000"); -const u8 Str_841B26D[] = _("×"); - -// Is this MenuAction2? I'm not sure. -const struct {const u8 *text; void (*func)();} _841B270[] = +static void debug_sub_811B1C4(void) +{ + unk_debug_bss_1_3 |= 2; + unk_debug_bss_1_0 = (unk_debug_bss_1_0 == 2) ? 0 : 2; +} + +static void debug_sub_811B1EC(void) +{ + unk_debug_bss_1_3 |= 1; + unk_debug_bss_1_0 = (unk_debug_bss_1_0 == 1) ? 0 : 1; +} + +static void debug_sub_811B210(void) +{ + unk_debug_bss_1_3 |= 4; + unk_debug_bss_1_0 = (unk_debug_bss_1_0 == 4) ? 0 : 4; +} + +static void debug_sub_811B238(void) +{ + unk_debug_bss_1_3 |= 8; + unk_debug_bss_1_0 = (unk_debug_bss_1_0 == 8) ? 0 : 8; +} + +static void debug_sub_811B260(void) +{ + unk_debug_bss_1_3 |= 0x10; + unk_debug_bss_1_0 = (unk_debug_bss_1_0 == 0x10) ? 0 : 0x10; +} + +static void debug_sub_811B288(void) +{ + unk_debug_bss_1_3 |= 0x40; + unk_debug_bss_1_0 = (unk_debug_bss_1_0 == 0x40) ? 0 : 0x40; +} + +static void debug_sub_811B2B0(void) +{ + unk_debug_bss_1_3 |= 0x80; + unk_debug_bss_1_0 = (unk_debug_bss_1_0 == 0x80) ? 0 : 0x80; +} + +static void debug_sub_811B2D8(void) +{ + unk_debug_bss_1_3 |= 0x20; +} + +static void debug_sub_811B2E8(void) +{ + u8 text[2]; + + ConvertIntToDecimalStringN(text, eSlotMachine->unk01 + 1, 2, 1); + Menu_PrintText(text, 6, 1); +} + +static const u8 Str_841B1C4[] = _("SETTEI"); +static const u8 Str_841B1CB[] = _("MAWASITA"); +static const u8 Str_841B1D4[] = _("MODOSI"); +static const u8 Str_841B1DB[] = _("NOMARE"); +static const u8 Str_841B1E2[] = _("MAE 7"); +static const u8 Str_841B1E8[] = _("LR HENKOU"); +static const u8 Str_841B1F3[] = _("START JIDOUSU"); +static const u8 Str_841B202[] = _("SELECT SETTEI"); +static const u8 Str_841B211[] = _("TYUHSEN"); +static const u8 Str_841B219[] = _("CHERRY"); +static const u8 Str_841B220[] = _("REPLAY"); +static const u8 Str_841B227[] = _("HASUBO"); +static const u8 Str_841B22E[] = _("RURIRI"); +static const u8 Str_841B235[] = _("INAZU"); +static const u8 Str_841B23B[] = _("REG"); +static const u8 Str_841B23F[] = _("BIG"); +static const u8 Str_841B243[] = _("BD"); +static const u8 Str_841B246[] = _("R7"); +static const u8 Str_841B249[] = _("B7"); +static const u8 Str_841B24C[] = _("A COIN"); +static const u8 Str_841B254[] = _("TYUHSEN"); +static const u8 Str_841B25C[] = _("UD 100"); +static const u8 Str_841B264[] = _("LR 1000"); +static const u8 Str_841B26D[] = _("×"); + +void debug_sub_811B310(void) +{ + u8 text[5]; + + Menu_PrintText(Str_841B1C4, 1, 1); + Menu_PrintText(Str_841B1CB, 1, 3); + Menu_PrintText(Str_841B1D4, 1, 5); + Menu_PrintText(Str_841B1DB, 1, 7); + Menu_PrintText(Str_841B1E2, 1, 9); + Menu_PrintText(Str_841B1E8, 1, 11); + Menu_PrintText(Str_841B1F3, 1, 13); + Menu_PrintText(Str_841B202, 1, 15); + Menu_PrintText(Str_841B24C, 1, 17); + Menu_PrintText(Str_841B211, 15, 1); + Menu_PrintText(Str_841B219, 15, 3); + Menu_PrintText(Str_841B220, 15, 5); + Menu_PrintText(Str_841B227, 15, 7); + Menu_PrintText(Str_841B22E, 15, 9); + Menu_PrintText(Str_841B235, 15, 11); + Menu_PrintText(Str_841B23B, 15, 13); + Menu_PrintText(Str_841B23F, 15, 15); + Menu_PrintText(Str_841B243, 15, 17); + if (eSlotMachine->unk03 == 0) + Menu_PrintText(Str_841B246, 10, 9); + else + Menu_PrintText(Str_841B249, 10, 9); + +#define PRINT_NUMBER(n, x, y) \ + ConvertIntToDecimalStringN(text, n, 2, 4); \ + Menu_PrintText(text, x, y); + + PRINT_NUMBER(eSlotMachine->unk68, 10, 3); + PRINT_NUMBER(eSlotMachine->unk6C, 10, 5); + PRINT_NUMBER(eSlotMachine->unk10, 10, 7); + PRINT_NUMBER(eSlotMachine->unk70, 20, 3); + PRINT_NUMBER(eSlotMachine->unk74, 20, 5); + PRINT_NUMBER(eSlotMachine->unk78, 20, 7); + PRINT_NUMBER(eSlotMachine->unk7C, 20, 9); + PRINT_NUMBER(eSlotMachine->unk80, 20, 11); + PRINT_NUMBER(eSlotMachine->unk84, 20, 13); + PRINT_NUMBER(eSlotMachine->unk88, 20, 15); + PRINT_NUMBER(eSlotMachine->unk8C, 20, 17); + +#undef PRINT_NUMBER + + if (unk_debug_bss_1_0 != 0) + { + u8 y = 0; + + switch (unk_debug_bss_1_0) + { + case 2: + y = 3; + break; + case 1: + y = 5; + break; + case 4: + y = 7; + break; + case 8: + y = 9; + break; + case 16: + y = 11; + break; + case 64: + y = 13; + break; + case 128: + y = 15; + break; + } + Menu_PrintText(Str_841B26D, 23, y); + } + debug_sub_811B2E8(); +} + +static void debug_sub_811B5B4(s32 *a, s32 b) +{ + *a += b; + if (*a > 9999) + *a = 9999; +} + +static void debug_sub_811B5D0(void) +{ + unk_debug_bss_1_0 = 0; + unk_debug_bss_1_2 = 0; + unk_debug_bss_1_3 = 0; + unk_debug_bss_1_4 = 0; + eSlotMachine->unk68 = 0; + eSlotMachine->unk6C = 0; + eSlotMachine->unk70 = 0; + eSlotMachine->unk74 = 0; + eSlotMachine->unk78 = 0; + eSlotMachine->unk7C = 0; + eSlotMachine->unk80 = 0; + eSlotMachine->unk84 = 0; + eSlotMachine->unk88 = 0; + eSlotMachine->unk8C = 0; + eSlotMachine->unk90 = 0; +} + +static void debug_sub_811B620(void) +{ + CreateTask(debug_sub_811B654, 0); +} + +static u8 debug_sub_811B634(void) +{ + if (FindTaskIdByFunc(debug_sub_811B654) == 0xFF) + return 1; + else + return 0; +} + +static const struct {const u8 *text; void (*func)();} _841B270[] = { {Str_841B219, debug_sub_811B1C4}, {Str_841B220, debug_sub_811B1EC}, @@ -7820,9 +5770,178 @@ const struct {const u8 *text; void (*func)();} _841B270[] = {Str_841B243, debug_sub_811B2D8}, }; -const u8 Str_841B2B0[] = _("·カウントエラーがおきました"); -const u8 Str_841B2BF[] = _("·リールそうさで エラーが おきました"); -const u8 Str_841B2D3[] = _("·フラグオフエラーが おきました"); -const u8 Str_841B2E4[] = _("·ボーナスこやくの エラーが おきました"); +static void debug_sub_811B654(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + s8 selection; + + switch (task->data[0]) + { + case 0: + Menu_DrawStdWindowFrame(0, 0, 24, 19); + debug_sub_811B310(); + task->data[0]++; + break; + case 1: + if (gMain.newKeys & B_BUTTON) + { + Menu_EraseScreen(); + DestroyTask(taskId); + break; + } + if (gMain.newKeys & 0x20) + { + eSlotMachine->unk01--; + if ((s8)eSlotMachine->unk01 < 0) // Why? It's unsigned + eSlotMachine->unk01 = 5; + debug_sub_811B2E8(); + break; + } + if (gMain.newKeys & 0x10) + { + eSlotMachine->unk01++; + if (eSlotMachine->unk01 > 5) + eSlotMachine->unk01 = 0; + debug_sub_811B2E8(); + break; + } + if (gMain.newKeys & A_BUTTON) + { + task->data[0] = 3; + Menu_EraseScreen(); + Menu_DrawStdWindowFrame(0, 0, 9, 5); + Menu_PrintText(Str_841B25C, 1, 1); + Menu_PrintText(Str_841B264, 1, 3); + break; + } + if (gMain.newKeys & 4) + { + unk_debug_bss_1_2 = 0; + unk_debug_bss_1_3 = 0; + Menu_EraseScreen(); + Menu_DrawStdWindowFrame(0, 0, 10, 19); + Menu_PrintText(Str_841B254, 1, 1); + Menu_PrintItems(2, 3, 8, (void *)_841B270); + InitMenu(0, 1, 3, 8, 0, 9); + task->data[0]++; + } + if (gMain.newKeys & 8) + { + unk_debug_bss_1_4 = 1; + Menu_EraseScreen(); + DestroyTask(taskId); + } + break; + case 2: + selection = Menu_ProcessInput(); + if (selection == -2) + break; + if (selection != -1) + { + unk_debug_bss_1_2 = 1; + _841B270[selection].func(); + } + Menu_EraseScreen(); + DestroyTask(taskId); + break; + case 3: + if (gMain.newAndRepeatedKeys & 0x80) + { + eSlotMachine->coins += 100; + if (eSlotMachine->coins > 9999) + eSlotMachine->coins = 9999; + break; + } + if (gMain.newAndRepeatedKeys & 0x40) + { + eSlotMachine->coins -= 100; + if (eSlotMachine->coins <= 0) + eSlotMachine->coins = 9999; + break; + } + if (gMain.newAndRepeatedKeys & 0x20) + { + eSlotMachine->coins -= 1000; + if (eSlotMachine->coins <= 0) + eSlotMachine->coins = 9999; + break; + } + if (gMain.newAndRepeatedKeys & 0x10) + { + eSlotMachine->coins += 1000; + if (eSlotMachine->coins > 9999) + eSlotMachine->coins = 9999; + break; + } + if (gMain.newKeys & B_BUTTON) + { + Menu_EraseScreen(); + DestroyTask(taskId); + } + break; + } +} + +static const u8 Str_841B2B0[] = _("·カウントエラーがおきました"); +static const u8 Str_841B2BF[] = _("·リールそうさで エラーが おきました"); +static const u8 Str_841B2D3[] = _("·フラグオフエラーが おきました"); +static const u8 Str_841B2E4[] = _("·ボーナスこやくの エラーが おきました"); + +static void debug_sub_811B894(void) +{ + if (eSlotMachine->matchedSymbols & 0x180) + { + eSlotMachine->unk90++; + if (eSlotMachine->unk90 > 9999) + eSlotMachine->unk90 = 9999; + if (eSlotMachine->unk90 != eSlotMachine->unk88) + { + Menu_PrintText(Str_841B2B0, 4, 15); + unk_debug_bss_1_4 = 0; + } + if (!(eSlotMachine->unk04 & 0x80)) + { + Menu_PrintText(Str_841B2D3, 4, 17); + unk_debug_bss_1_4 = 0; + } + } + else if (eSlotMachine->matchedSymbols != 0) + { + if ((eSlotMachine->unk04 & 0x80) && !(eSlotMachine->matchedSymbols & 3)) + { + Menu_PrintText(Str_841B2E4, 4, 2); + unk_debug_bss_1_4 = 0; + } + } + if (eSlotMachine->matchedSymbols == 0 && eSlotMachine->bet == 3 && !(eSlotMachine->unk04 & 0x80)) + { + u8 sym_0_1 = GetTagOfReelSymbolOnScreenAtPos(0, 1); + u8 sym_0_2 = GetTagOfReelSymbolOnScreenAtPos(0, 2); + u8 sym_0_3 = GetTagOfReelSymbolOnScreenAtPos(0, 3); + + u8 sym_1_1 = GetTagOfReelSymbolOnScreenAtPos(1, 1); + u8 sym_1_2 = GetTagOfReelSymbolOnScreenAtPos(1, 2); + u8 sym_1_3 = GetTagOfReelSymbolOnScreenAtPos(1, 3); + + u8 sym_2_1 = GetTagOfReelSymbolOnScreenAtPos(2, 1); + u8 sym_2_2 = GetTagOfReelSymbolOnScreenAtPos(2, 2); + u8 sym_2_3 = GetTagOfReelSymbolOnScreenAtPos(2, 3); + + if ((sym_0_1 == 0 && sym_1_1 == 1 && sym_2_1 == 0) + || (sym_0_2 == 0 && sym_1_2 == 1 && sym_2_2 == 0) + || (sym_0_3 == 0 && sym_1_3 == 1 && sym_2_3 == 0) + || (sym_0_1 == 0 && sym_1_2 == 1 && sym_2_3 == 0) + || (sym_0_3 == 0 && sym_1_2 == 1 && sym_2_1 == 0) + || (sym_0_1 == 1 && sym_1_1 == 0 && sym_2_1 == 1) + || (sym_0_2 == 1 && sym_1_2 == 0 && sym_2_2 == 1) + || (sym_0_3 == 1 && sym_1_3 == 0 && sym_2_3 == 1) + || (sym_0_1 == 1 && sym_1_2 == 0 && sym_2_3 == 1) + || (sym_0_3 == 1 && sym_1_2 == 0 && sym_2_1 == 1)) + { + Menu_PrintText(Str_841B2BF, 4, 0); + unk_debug_bss_1_4 = 0; + } + } +} #endif diff --git a/src/field/start_menu.c b/src/field/start_menu.c index 75b600da0..f2d53eb7f 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_player_avatar.h" @@ -6,9 +7,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" @@ -137,302 +140,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) diff --git a/src/field/tv.c b/src/field/tv.c index ebf304a6e..6c24170ae 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -3050,7 +3050,7 @@ void DoTVShowTodaysSmartShopper(void) break; case 1: TVShowConvertInternationalString(gStringVar1, smartShopper->playerName, smartShopper->language); - StringCopy(gStringVar2, ItemId_GetItem(smartShopper->itemIds[0])->name); + StringCopy(gStringVar2, ItemId_GetName(smartShopper->itemIds[0])); sub_80BF088(2, smartShopper->itemAmounts[0]); sTVShowState += (Random() % 4) + 1; break; @@ -3070,7 +3070,7 @@ void DoTVShowTodaysSmartShopper(void) sTVShowState = 10; break; case 6: - StringCopy(gStringVar2, ItemId_GetItem(smartShopper->itemIds[1])->name); + StringCopy(gStringVar2, ItemId_GetName(smartShopper->itemIds[1])); sub_80BF088(2, smartShopper->itemAmounts[1]); if (smartShopper->itemIds[2] != 0) sTVShowState = 7; @@ -3080,7 +3080,7 @@ void DoTVShowTodaysSmartShopper(void) sTVShowState = 9; break; case 7: - StringCopy(gStringVar2, ItemId_GetItem(smartShopper->itemIds[2])->name); + StringCopy(gStringVar2, ItemId_GetName(smartShopper->itemIds[2])); sub_80BF088(2, smartShopper->itemAmounts[2]); if (smartShopper->priceReduced == 1) sTVShowState = 8; @@ -3105,7 +3105,7 @@ void DoTVShowTodaysSmartShopper(void) break; case 11: TVShowConvertInternationalString(gStringVar1, smartShopper->playerName, smartShopper->language); - StringCopy(gStringVar2, ItemId_GetItem(smartShopper->itemIds[0])->name); + StringCopy(gStringVar2, ItemId_GetName(smartShopper->itemIds[0])); if (smartShopper->priceReduced == 1) sTVShowState = 8; else @@ -3237,7 +3237,7 @@ void DoTVShowPokemonTodaySuccessfulCapture(void) sTVShowState = 2; break; case 2: - StringCopy(gStringVar2, ItemId_GetItem(pokemonToday->ball)->name); + StringCopy(gStringVar2, ItemId_GetName(pokemonToday->ball)); sub_80BF088(2, pokemonToday->var12); if (pokemonToday->var12 < 4) sTVShowState = 3; |