diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle_frontier_1.c | 118 | ||||
-rw-r--r-- | src/battle_palace.c | 187 | ||||
-rw-r--r-- | src/battle_pike.c | 4 |
3 files changed, 189 insertions, 120 deletions
diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c deleted file mode 100644 index c53f10dca..000000000 --- a/src/battle_frontier_1.c +++ /dev/null @@ -1,118 +0,0 @@ -#include "global.h" -#include "event_data.h" -#include "battle_setup.h" -#include "overworld.h" -#include "random.h" -#include "battle_tower.h" - -extern void SetBattleFacilityTrainerGfxId(u16, u8); - -extern void (* const gUnknown_0860DE50[])(void); -extern const u32 gUnknown_0860DE98[][2]; -extern const u32 gUnknown_0860DEA8[][2]; - -// code -void sub_8195960(void) -{ - gUnknown_0860DE50[gSpecialVar_0x8004](); -} - -void sub_8195980(void) -{ - u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - - gSaveBlock2Ptr->frontier.field_CA8 = 0; - gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0; - gSaveBlock2Ptr->frontier.field_CA9_a = 0; - gSaveBlock2Ptr->frontier.field_CA9_b = 0; - if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode])) - gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = 0; - - saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); - gTrainerBattleOpponent_A = 0; -} - -void sub_8195A38(void) -{ - u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - - switch (gSpecialVar_0x8005) - { - case 0: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_DC4[1]; - break; - case 1: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; - break; - case 2: - gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode]) != 0); - break; - } -} - -void sub_8195AE4(void) -{ - u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - - switch (gSpecialVar_0x8005) - { - case 0: - gSaveBlock2Ptr->frontier.field_DC4[1] = gSpecialVar_0x8006; - break; - case 1: - gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = gSpecialVar_0x8006; - break; - case 2: - if (gSpecialVar_0x8006) - gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_0860DE98[battleMode][lvlMode]; - else - gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_0860DEA8[battleMode][lvlMode]; - break; - } -} - -void sub_8195BB0(void) -{ - u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - - if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 50) - gSpecialVar_Result = Random() % 3; - else if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 99) - gSpecialVar_Result = 3; - else - gSpecialVar_Result = 4; -} - -void sub_8195C20(void) -{ - gTrainerBattleOpponent_A = 5 *(Random() % 255) / 64u; - SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); -} - -void sub_8195C50(void) -{ - if (gTrainerBattleOpponent_A < 300) - FrontierSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore); -} - -/* -void sub_8195C7C(void) -{ - u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - - if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 9999) - { - u16 wat = 0; - gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]++; - if (lvlMode < gSaveBlock2Ptr->frontier.field_DD0[battleMode][lvlMode]) - wat = 1; - if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][wat] != 0) - gSaveBlock2Ptr->frontier.field_DD0[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; - } -} -*/ diff --git a/src/battle_palace.c b/src/battle_palace.c new file mode 100644 index 000000000..d435f7e15 --- /dev/null +++ b/src/battle_palace.c @@ -0,0 +1,187 @@ +#include "global.h" +#include "event_data.h" +#include "battle_setup.h" +#include "overworld.h" +#include "random.h" +#include "battle_tower.h" +#include "frontier_util.h" +#include "item.h" +#include "constants/items.h" + +// This file's functions. +static void sub_8195980(void); +static void sub_8195A38(void); +static void sub_8195AE4(void); +static void sub_8195BB0(void); +static void sub_8195C20(void); +static void sub_8195C50(void); +static void sub_8195C7C(void); +static void sub_8195CE4(void); +static void sub_8195D28(void); +static void sub_8195DB8(void); + +// Const rom data. +static void (* const sBattlePalaceFunctions[])(void) = +{ + sub_8195980, + sub_8195A38, + sub_8195AE4, + sub_8195BB0, + sub_8195C20, + sub_8195C50, + sub_8195C7C, + sub_8195CE4, + sub_8195D28, + sub_8195DB8, +}; + +static const u16 gUnknown_0860DE78[] = {ITEM_HP_UP, ITEM_PROTEIN, ITEM_IRON, ITEM_CALCIUM, ITEM_CARBOS, ITEM_ZINC}; +static const u16 gUnknown_0860DE84[] = {ITEM_BRIGHT_POWDER, ITEM_WHITE_HERB, ITEM_QUICK_CLAW, ITEM_LEFTOVERS, ITEM_MENTAL_HERB, ITEM_KINGS_ROCK, ITEM_FOCUS_BAND, ITEM_SCOPE_LENS, ITEM_CHOICE_BAND}; + +static const u32 gUnknown_0860DE98[][2] = +{ + {0x10, 0x20}, + {0x400000, 0x800000}, +}; + +static const u32 gUnknown_0860DEA8[][2] = +{ + {~0x10, ~0x20}, + {~0x400000, ~0x800000}, +}; + +// code +void CallBattlePalaceFunction(void) +{ + sBattlePalaceFunctions[gSpecialVar_0x8004](); +} + +static void sub_8195980(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + gSaveBlock2Ptr->frontier.field_CA8 = 0; + gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0; + gSaveBlock2Ptr->frontier.field_CA9_a = 0; + gSaveBlock2Ptr->frontier.field_CA9_b = 0; + if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode])) + gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = 0; + + saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); + gTrainerBattleOpponent_A = 0; +} + +static void sub_8195A38(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + switch (gSpecialVar_0x8005) + { + case 0: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_DC6; + break; + case 1: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; + break; + case 2: + gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode]) != 0); + break; + } +} + +static void sub_8195AE4(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + switch (gSpecialVar_0x8005) + { + case 0: + gSaveBlock2Ptr->frontier.field_DC6 = gSpecialVar_0x8006; + break; + case 1: + gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = gSpecialVar_0x8006; + break; + case 2: + if (gSpecialVar_0x8006) + gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_0860DE98[battleMode][lvlMode]; + else + gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_0860DEA8[battleMode][lvlMode]; + break; + } +} + +static void sub_8195BB0(void) +{ + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 50) + gSpecialVar_Result = Random() % 3; + else if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 99) + gSpecialVar_Result = 3; + else + gSpecialVar_Result = 4; +} + +static void sub_8195C20(void) +{ + gTrainerBattleOpponent_A = 5 *(Random() % 255) / 64u; + SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); +} + +static void sub_8195C50(void) +{ + if (gTrainerBattleOpponent_A < 300) + FrontierSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore); +} + +static void sub_8195C7C(void) +{ + u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 9999) + { + gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]++; + + // Whatever GF planned to do here, they messed up big time. + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][(lvlMode > gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[battleMode][lvlMode]) ? 1 : 0]) + gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; + } +} + +static void sub_8195CE4(void) +{ + gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8005; + VarSet(VAR_TEMP_0, 0); + gSaveBlock2Ptr->frontier.field_CA9_a = 1; + sub_81A4C30(); +} + +static void sub_8195D28(void) +{ + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] > 41) + gSaveBlock2Ptr->frontier.field_DC6 = gUnknown_0860DE84[Random() % ARRAY_COUNT(gUnknown_0860DE84)]; + else + gSaveBlock2Ptr->frontier.field_DC6 = gUnknown_0860DE78[Random() % ARRAY_COUNT(gUnknown_0860DE78)]; +} + +static void sub_8195DB8(void) +{ + if (AddBagItem(gSaveBlock2Ptr->frontier.field_DC6, 1) == TRUE) + { + CopyItemName(gSaveBlock2Ptr->frontier.field_DC6, gStringVar1); + gSaveBlock2Ptr->frontier.field_DC6 = 0; + gSpecialVar_Result = TRUE; + } + else + { + gSpecialVar_Result = FALSE; + } +} diff --git a/src/battle_pike.c b/src/battle_pike.c index e9f8b3034..a0a50d86e 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -117,7 +117,7 @@ static const u8 gUnknown_086125DC[][4] = {0x15, 0x46, 0x23, 0x00}, }; -static void (* const gUnknown_086125F8[])(void) = +static void (* const sBattlePikeFunctions[])(void) = { sub_81A705C, sub_81A7140, @@ -172,7 +172,7 @@ static const u32 gUnknown_08612690[] = {0x400, 0x800}; // code void CallBattlePikeFunction(void) { - gUnknown_086125F8[gSpecialVar_0x8004](); + sBattlePikeFunctions[gSpecialVar_0x8004](); } static void sub_81A705C(void) |