From 69683f957288ae28114300552787d0f5355cd0fe Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 12 Nov 2018 15:41:19 +0100 Subject: [PATCH] Decompile Battle Palace --- asm/battle_frontier_1.s | 174 ---------------- data/battle_frontier_1.s | 25 --- .../scripts.inc | 2 +- .../scripts.inc | 2 +- .../scripts.inc | 8 +- .../scripts.inc | 2 +- .../scripts.inc | 16 +- data/specials.inc | 2 +- include/global.h | 3 +- ld_script.txt | 3 +- src/battle_frontier_1.c | 118 ----------- src/battle_palace.c | 187 ++++++++++++++++++ src/battle_pike.c | 4 +- 13 files changed, 209 insertions(+), 337 deletions(-) delete mode 100644 src/battle_frontier_1.c create mode 100644 src/battle_palace.c diff --git a/asm/battle_frontier_1.s b/asm/battle_frontier_1.s index a5e52f04e..c47ca5d76 100644 --- a/asm/battle_frontier_1.s +++ b/asm/battle_frontier_1.s @@ -7,180 +7,6 @@ - thumb_func_start sub_8195C7C -sub_8195C7C: @ 8195C7C - push {r4-r7,lr} - ldr r4, =gSaveBlock2Ptr - ldr r0, [r4] - ldr r1, =0x00000ca9 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 30 - lsrs r7, r0, 30 - ldr r0, =0x000040ce - bl VarGet - lsls r0, 24 - ldr r4, [r4] - lsls r1, r7, 1 - lsrs r5, r0, 22 - adds r1, r5 - ldr r3, =0x00000dc8 - adds r6, r4, r3 - adds r3, r6, r1 - ldrh r2, [r3] - ldr r0, =0x0000270e - cmp r2, r0 - bhi _08195CCA - adds r2, 0x1 - strh r2, [r3] - movs r3, 0xDD - lsls r3, 4 - adds r0, r4, r3 - adds r1, r0, r1 - adds r0, r5, 0 - ldrh r3, [r1] - cmp r7, r3 - bls _08195CC0 - adds r0, 0x2 -_08195CC0: - adds r0, r6, r0 - ldrh r0, [r0] - cmp r0, 0 - beq _08195CCA - strh r2, [r1] -_08195CCA: - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8195C7C - - thumb_func_start sub_8195CE4 -sub_8195CE4: @ 8195CE4 - push {r4,lr} - ldr r4, =gSaveBlock2Ptr - ldr r0, [r4] - ldr r1, =gSpecialVar_0x8005 - ldrh r1, [r1] - ldr r2, =0x00000ca8 - adds r0, r2 - strb r1, [r0] - movs r0, 0x80 - lsls r0, 7 - movs r1, 0 - bl VarSet - ldr r1, [r4] - ldr r0, =0x00000ca9 - adds r1, r0 - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - bl sub_81A4C30 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8195CE4 - - thumb_func_start sub_8195D28 -sub_8195D28: @ 8195D28 - push {r4,r5,lr} - ldr r0, =0x000040ce - bl VarGet - lsls r0, 16 - ldr r4, =gSaveBlock2Ptr - ldr r2, [r4] - ldr r3, =0x00000ca9 - adds r1, r2, r3 - ldrb r1, [r1] - lsls r1, 30 - lsrs r1, 29 - lsrs r0, 14 - adds r1, r0 - ldr r0, =0x00000dc8 - adds r2, r0 - adds r2, r1 - ldrh r0, [r2] - cmp r0, 0x29 - bls _08195D88 - bl Random - ldr r4, [r4] - ldr r5, =gUnknown_0860DE84 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x9 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 15 - adds r0, r5 - ldrh r0, [r0] - ldr r1, =0x00000dc6 - adds r4, r1 - b _08195DA6 - .pool -_08195D88: - bl Random - ldr r4, [r4] - ldr r5, =gUnknown_0860DE78 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x6 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 15 - adds r0, r5 - ldrh r0, [r0] - ldr r3, =0x00000dc6 - adds r4, r3 -_08195DA6: - strh r0, [r4] - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8195D28 - - thumb_func_start sub_8195DB8 -sub_8195DB8: @ 8195DB8 - push {r4,r5,lr} - ldr r4, =gSaveBlock2Ptr - ldr r0, [r4] - ldr r1, =0x00000dc6 - adds r0, r1 - ldrh r0, [r0] - movs r1, 0x1 - bl AddBagItem - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x1 - bne _08195E00 - ldr r0, [r4] - ldr r1, =0x00000dc6 - adds r0, r1 - ldrh r0, [r0] - ldr r1, =gStringVar1 - bl CopyItemName - ldr r0, [r4] - ldr r1, =0x00000dc6 - adds r0, r1 - movs r1, 0 - strh r1, [r0] - ldr r0, =gSpecialVar_Result - strh r5, [r0] - b _08195E06 - .pool -_08195E00: - ldr r1, =gSpecialVar_Result - movs r0, 0 - strh r0, [r1] -_08195E06: - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8195DB8 - thumb_func_start sub_8195E10 sub_8195E10: @ 8195E10 push {lr} diff --git a/data/battle_frontier_1.s b/data/battle_frontier_1.s index 4074c360c..b1375e05f 100644 --- a/data/battle_frontier_1.s +++ b/data/battle_frontier_1.s @@ -5,31 +5,6 @@ .section .rodata - .align 2 -gUnknown_0860DE50:: @ 860DE50 - .4byte sub_8195980 - .4byte sub_8195A38 - .4byte sub_8195AE4 - .4byte sub_8195BB0 - .4byte sub_8195C20 - .4byte sub_8195C50 - .4byte sub_8195C7C - .4byte sub_8195CE4 - .4byte sub_8195D28 - .4byte sub_8195DB8 - -gUnknown_0860DE78:: @ 860DE78 - .2byte 0x003f, 0x0040, 0x0041, 0x0043, 0x0042, 0x0046 - -gUnknown_0860DE84:: @ 860DE84 - .2byte 0x00b3, 0x00b4, 0x00b7, 0x00c8, 0x00b9, 0x00bb, 0x00c4, 0x00c6, 0x00ba, 0x0000 - -gUnknown_0860DE98:: @ 860DE98 - .4byte 0x00000010, 0x00000020, 0x00400000, 0x00800000 - -gUnknown_0860DEA8:: @ 860DEA8 - .4byte 0xffffffef, 0xffffffdf, 0xffbfffff, 0xff7fffff - .align 2 gUnknown_0860DEB8:: @ 860DEB8 //struct .2byte 0x0025, 0x0000, 0x0108, 0x0208, 0x0308, 0x0103, 0x0008, 0x0108, 0x0208, 0x0000 diff --git a/data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc index bce2de516..84f0ebeea 100644 --- a/data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleArenaBattleRoom/scripts.inc @@ -88,7 +88,7 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_25752E:: @ 825752E applymovement 7, BattleFrontier_BattleArenaBattleRoom_Movement_257BF2 waitmovement 0 setvar VAR_0x8004, 5 - special sub_8195960 + special CallBattlePalaceFunction msgbox gStringVar4, 4 waitmessage call BattleFrontier_BattleArenaBattleRoom_EventScript_257B6C diff --git a/data/maps/BattleFrontier_BattleFactoryBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleFactoryBattleRoom/scripts.inc index 96d53d42f..74b10e0f0 100644 --- a/data/maps/BattleFrontier_BattleFactoryBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleFactoryBattleRoom/scripts.inc @@ -80,7 +80,7 @@ BattleFrontier_BattleFactoryBattleRoom_EventScript_25AEA7:: @ 825AEA7 compare VAR_TEMP_F, 0 goto_if 5, BattleFrontier_BattleFactoryBattleRoom_EventScript_25AF9C setvar VAR_0x8004, 5 - special sub_8195960 + special CallBattlePalaceFunction lockall msgbox gStringVar4, 4 waitmessage diff --git a/data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc index 5cfc4c88b..a179aec55 100644 --- a/data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattlePalaceBattleRoom/scripts.inc @@ -60,7 +60,7 @@ BattleFrontier_BattlePalaceBattleRoom_EventScript_24F8BF:: @ 824F8BF applymovement 2, BattleFrontier_BattlePalaceBattleRoom_Movement_24FEA1 waitmovement 0 setvar VAR_0x8004, 5 - special sub_8195960 + special CallBattlePalaceFunction msgbox gStringVar4, 4 waitmessage call BattleFrontier_BattlePalaceBattleRoom_EventScript_24FDF7 @@ -189,7 +189,7 @@ BattleFrontier_BattlePalaceBattleRoom_EventScript_24FB3F:: @ 824FB3F waitmessage setvar VAR_0x8004, 7 setvar VAR_0x8005, 2 - special sub_8195960 + special CallBattlePalaceFunction playse SE_SAVE waitse fadescreen 1 @@ -263,7 +263,7 @@ BattleFrontier_BattlePalaceBattleRoom_EventScript_24FCAA:: @ 824FCAA BattleFrontier_BattlePalaceBattleRoom_EventScript_24FCC7:: @ 824FCC7 setvar VAR_0x8004, 6 - special sub_8195960 + special CallBattlePalaceFunction setvar VAR_0x8004, 12 special CallFrontierUtilFunc compare VAR_RESULT, 0 @@ -306,7 +306,7 @@ BattleFrontier_BattlePalaceBattleRoom_EventScript_24FD67:: @ 824FD67 BattleFrontier_BattlePalaceBattleRoom_EventScript_24FD84:: @ 824FD84 setvar VAR_0x8004, 6 - special sub_8195960 + special CallBattlePalaceFunction setvar VAR_0x8004, 12 special CallFrontierUtilFunc compare VAR_RESULT, 2 diff --git a/data/maps/BattleFrontier_BattlePalaceCorridor/scripts.inc b/data/maps/BattleFrontier_BattlePalaceCorridor/scripts.inc index bd916e931..23bad0421 100644 --- a/data/maps/BattleFrontier_BattlePalaceCorridor/scripts.inc +++ b/data/maps/BattleFrontier_BattlePalaceCorridor/scripts.inc @@ -13,7 +13,7 @@ BattleFrontier_BattlePalaceCorridor_EventScript_24F4B3:: @ 824F4B3 waitmovement 0 lockall setvar VAR_0x8004, 3 - special sub_8195960 + special CallBattlePalaceFunction compare VAR_RESULT, 0 call_if 1, BattleFrontier_BattlePalaceCorridor_EventScript_24F58B compare VAR_RESULT, 1 diff --git a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc index 804fd7bce..82d3aa5cf 100644 --- a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc @@ -32,11 +32,11 @@ BattleFrontier_BattlePalaceLobby_EventScript_24D7D0:: @ 824D7D0 setvar VAR_0x8004, 2 setvar VAR_0x8005, 1 setvar VAR_0x8006, 0 - special sub_8195960 + special CallBattlePalaceFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 2 setvar VAR_0x8006, 0 - special sub_8195960 + special CallBattlePalaceFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 0 setvar VAR_0x8006, 0 @@ -78,7 +78,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_24D873:: @ 824D873 setvar VAR_0x8004, 2 setvar VAR_0x8005, 2 setvar VAR_0x8006, 0 - special sub_8195960 + special CallBattlePalaceFunction call BattleFrontier_BattlePalaceLobby_EventScript_24D8A1 msgbox BattleFrontier_BattlePalaceLobby_Text_24E0D8, 4 closemessage @@ -93,7 +93,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_24D8A1:: @ 824D8A1 special HealPlayerParty setvar VAR_0x8004, 7 setvar VAR_0x8005, 0 - special sub_8195960 + special CallBattlePalaceFunction playse SE_SAVE waitse call BattleFrontier_BattlePalaceLobby_EventScript_23E8E0 @@ -120,7 +120,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_24D908:: @ 824D908 waitmessage setvar VAR_0x8004, 7 setvar VAR_0x8005, 1 - special sub_8195960 + special CallBattlePalaceFunction playse SE_SAVE waitse setvar VAR_0x8004, 2 @@ -149,7 +149,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_24D956:: @ 824D956 BattleFrontier_BattlePalaceLobby_EventScript_24D968:: @ 824D968 setvar VAR_0x8004, 1 setvar VAR_0x8005, 0 - special sub_8195960 + special CallBattlePalaceFunction compare VAR_RESULT, 0 goto_if 5, BattleFrontier_BattlePalaceLobby_EventScript_24D817 special SavePlayerParty @@ -207,11 +207,11 @@ BattleFrontier_BattlePalaceLobby_EventScript_24DA87:: @ 824DA87 setvar VAR_0x8005, 4 special CallFrontierUtilFunc setvar VAR_0x8004, 0 - special sub_8195960 + special CallBattlePalaceFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 2 setvar VAR_0x8006, 1 - special sub_8195960 + special CallBattlePalaceFunction setvar VAR_0x8004, 2 setvar VAR_0x8005, 0 setvar VAR_0x8006, 1 diff --git a/data/specials.inc b/data/specials.inc index 9207e508f..0d3afce8b 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -245,7 +245,7 @@ gSpecials:: @ 81DBA64 def_special CallFrontierUtilFunc def_special sub_8161F74 def_special CallBattleDomeFunction - def_special sub_8195960 + def_special CallBattlePalaceFunction def_special CopyEReaderTrainerGreeting def_special DoSpecialTrainerBattle def_special CallBattleArenaFunction diff --git a/include/global.h b/include/global.h index 748021556..3fb137425 100644 --- a/include/global.h +++ b/include/global.h @@ -424,7 +424,8 @@ struct BattleFrontier /*0xD1C*/ u16 domeTotalChampionships[2][2]; /*0xD24*/ struct BattleDomeTrainer domeTrainers[DOME_TOURNAMENT_TRAINERS_COUNT]; /*0xD64*/ u16 domeMonIds[DOME_TOURNAMENT_TRAINERS_COUNT][3]; - /*0xD64*/ u16 field_DC4[2]; + /*0xDC4*/ u16 field_DC4; + /*0xDC6*/ u16 field_DC6; /*0xDC8*/ u16 palaceWinStreaks[2][2]; /*0xDD0*/ u16 palaceRecordWinStreaks[2][2]; /*0xDD8*/ u16 field_DD8; diff --git a/ld_script.txt b/ld_script.txt index 780d48d14..0454dc86b 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -259,7 +259,7 @@ SECTIONS { src/trainer_pokemon_sprites.o(.text); src/lilycove_lady.o(.text); src/battle_dome.o(.text); - src/battle_frontier_1.o(.text); + src/battle_palace.o(.text); asm/battle_frontier_1.o(.text); src/menu.o(.text); src/battle_factory_screen.o(.text); @@ -567,6 +567,7 @@ SECTIONS { src/trainer_pokemon_sprites.o(.rodata); src/lilycove_lady.o(.rodata); src/battle_dome.o(.rodata); + src/battle_palace.o(.rodata); data/battle_frontier_1.o(.rodata); src/menu.o(.rodata); src/battle_factory_screen.o(.rodata); 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)