diff options
-rw-r--r-- | asm/quest_log_battle.s | 286 | ||||
-rw-r--r-- | include/overworld.h | 3 | ||||
-rw-r--r-- | include/quest_log.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/quest_log.c | 2 | ||||
-rw-r--r-- | src/quest_log_battle.c | 97 |
6 files changed, 102 insertions, 288 deletions
diff --git a/asm/quest_log_battle.s b/asm/quest_log_battle.s index 1870395e9..1afadbf5f 100644 --- a/asm/quest_log_battle.s +++ b/asm/quest_log_battle.s @@ -5,292 +5,6 @@ .text - thumb_func_start sub_812BFDC -sub_812BFDC: @ 812BFDC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r4, _0812C03C @ =gBattleTypeFlags - ldr r0, [r4] - ldr r1, _0812C040 @ =0x00010202 - ands r0, r1 - cmp r0, 0 - beq _0812BFF4 - b _0812C212 -_0812BFF4: - ldr r5, _0812C044 @ =gUnknown_2023E8A - ldrb r0, [r5] - cmp r0, 0x1 - beq _0812C002 - cmp r0, 0x7 - beq _0812C002 - b _0812C212 -_0812C002: - movs r0, 0x8 - bl Alloc - adds r7, r0, 0 - movs r0, 0x8 - bl Alloc - mov r9, r0 - ldr r4, [r4] - movs r0, 0x8 - ands r4, r0 - cmp r4, 0 - bne _0812C01E - b _0812C1CC -_0812C01E: - ldr r3, _0812C048 @ =gTrainers - ldr r2, _0812C04C @ =gTrainerBattleOpponent_A - ldrh r1, [r2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r3 - ldrb r1, [r0, 0x1] - cmp r1, 0x57 - beq _0812C060 - cmp r1, 0x57 - bgt _0812C050 - cmp r1, 0x54 - beq _0812C056 - b _0812C066 - .align 2, 0 -_0812C03C: .4byte gBattleTypeFlags -_0812C040: .4byte 0x00010202 -_0812C044: .4byte gUnknown_2023E8A -_0812C048: .4byte gTrainers -_0812C04C: .4byte gTrainerBattleOpponent_A -_0812C050: - cmp r1, 0x5A - beq _0812C05C - b _0812C066 -_0812C056: - movs r0, 0x1E - mov r10, r0 - b _0812C06A -_0812C05C: - movs r1, 0x21 - b _0812C068 -_0812C060: - movs r0, 0x20 - mov r10, r0 - b _0812C06A -_0812C066: - movs r1, 0x22 -_0812C068: - mov r10, r1 -_0812C06A: - ldrh r0, [r2] - strh r0, [r7] - ldr r0, _0812C0AC @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0812C150 - ldr r0, _0812C0B0 @ =gBattleResults - ldrh r0, [r0, 0x20] - strh r0, [r7, 0x2] - ldr r4, _0812C0B4 @ =gBattleStruct - ldr r0, [r4] - movs r1, 0xC1 - lsls r1, 1 - adds r0, r1 - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _0812C0BC - ldr r2, _0812C0B8 @ =gBattleMons - ldr r0, [r4] - movs r1, 0xC1 - lsls r1, 1 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x58 - muls r0, r1 - adds r0, r2 - b _0812C0EA - .align 2, 0 -_0812C0AC: .4byte gBattleTypeFlags -_0812C0B0: .4byte gBattleResults -_0812C0B4: .4byte gBattleStruct -_0812C0B8: .4byte gBattleMons -_0812C0BC: - ldr r5, _0812C0D8 @ =gBattleMons - movs r0, 0 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - movs r4, 0x58 - muls r0, r4 - adds r0, r5 - ldrh r0, [r0, 0x28] - cmp r0, 0 - beq _0812C0DC - movs r0, 0 - b _0812C0DE - .align 2, 0 -_0812C0D8: .4byte gBattleMons -_0812C0DC: - movs r0, 0x2 -_0812C0DE: - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - muls r0, r4 - adds r0, r5 -_0812C0EA: - ldrh r0, [r0] - strh r0, [r7, 0x4] - movs r0, 0 - bl GetBattlerAtPosition - adds r4, r0, 0 - movs r0, 0x2 - bl GetBattlerAtPosition - ldr r6, _0812C14C @ =gBattleMons - lsls r4, 24 - lsrs r4, 24 - movs r5, 0x58 - adds r1, r4, 0 - muls r1, r5 - adds r1, r6 - lsls r0, 24 - lsrs r0, 24 - muls r0, r5 - adds r0, r6 - ldrh r0, [r0, 0x28] - ldrh r1, [r1, 0x28] - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - movs r0, 0 - bl GetBattlerAtPosition - adds r4, r0, 0 - movs r0, 0x2 - bl GetBattlerAtPosition - lsls r4, 24 - lsrs r4, 24 - adds r1, r4, 0 - muls r1, r5 - adds r1, r6 - lsls r0, 24 - lsrs r0, 24 - muls r0, r5 - adds r0, r6 - ldrh r0, [r0, 0x2C] - ldrh r1, [r1, 0x2C] - adds r0, r1 - lsls r0, 16 - lsrs r4, r0, 16 - b _0812C18E - .align 2, 0 -_0812C14C: .4byte gBattleMons -_0812C150: - ldr r0, _0812C1C4 @ =gBattleResults - ldrh r0, [r0, 0x20] - strh r0, [r7, 0x2] - movs r0, 0 - bl GetBattlerAtPosition - ldr r5, _0812C1C8 @ =gBattleMons - lsls r0, 24 - lsrs r0, 24 - movs r4, 0x58 - muls r0, r4 - adds r0, r5 - ldrh r0, [r0] - strh r0, [r7, 0x4] - movs r0, 0 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - muls r0, r4 - adds r0, r5 - ldrh r0, [r0, 0x28] - mov r8, r0 - movs r0, 0 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - muls r0, r4 - adds r0, r5 - ldrh r4, [r0, 0x2C] -_0812C18E: - bl sav1_map_get_name - movs r1, 0 - strb r0, [r7, 0x7] - strb r1, [r7, 0x6] - adds r0, r4, 0 - movs r1, 0x3 - bl __udivsi3 - lsls r0, 16 - lsrs r1, r0, 16 - lsls r0, r1, 1 - cmp r8, r0 - bge _0812C1AE - movs r0, 0x1 - strb r0, [r7, 0x6] -_0812C1AE: - cmp r8, r1 - bcs _0812C1B8 - ldrb r0, [r7, 0x6] - adds r0, 0x1 - strb r0, [r7, 0x6] -_0812C1B8: - mov r0, r10 - adds r1, r7, 0 - bl sub_8113550 - b _0812C206 - .align 2, 0 -_0812C1C4: .4byte gBattleResults -_0812C1C8: .4byte gBattleMons -_0812C1CC: - ldrb r0, [r5] - cmp r0, 0x1 - bne _0812C1E8 - ldr r0, _0812C1E4 @ =gEnemyParty - movs r1, 0xB - bl GetMonData - mov r1, r9 - strh r0, [r1] - strh r4, [r1, 0x2] - b _0812C1F8 - .align 2, 0 -_0812C1E4: .4byte gEnemyParty -_0812C1E8: - mov r0, r9 - strh r4, [r0] - ldr r0, _0812C220 @ =gEnemyParty - movs r1, 0xB - bl GetMonData - mov r1, r9 - strh r0, [r1, 0x2] -_0812C1F8: - bl sav1_map_get_name - mov r1, r9 - strb r0, [r1, 0x4] - movs r0, 0x1F - bl sub_8113550 -_0812C206: - adds r0, r7, 0 - bl Free - mov r0, r9 - bl Free -_0812C212: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812C220: .4byte gEnemyParty - thumb_func_end sub_812BFDC - thumb_func_start sub_812C224 sub_812C224: @ 812C224 push {r4-r7,lr} diff --git a/include/overworld.h b/include/overworld.h index 05ff5e03c..8cae07bdc 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -70,7 +70,6 @@ void c2_load_new_map(void); void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused); void mapldr_default(void); -void IncrementGameStat(u8); u32 GetGameStat(u8); void sub_8056938(void); @@ -80,6 +79,8 @@ void sub_805726C(void); void sub_8057430(void); void sub_8055DC4(void); +u8 sav1_map_get_name(void); + extern u8 gUnknown_2031DD8; extern u8 gUnknown_2036E28; diff --git a/include/quest_log.h b/include/quest_log.h index b2a750725..9f8a0ea21 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -20,5 +20,6 @@ extern struct UnkStruct_3005E90 gUnknown_3005E90; extern struct UnkStruct_203AE98 * gUnknown_3005E94; void sub_8112720(u8); +void sub_8113550(u16, const u16 *); #endif //GUARD_QUEST_LOG_H diff --git a/ld_script.txt b/ld_script.txt index 3d59b2459..070eb444a 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -225,6 +225,7 @@ SECTIONS { asm/party_menu.o(.text); asm/union_room_chat.o(.text); asm/help_system_812B1E0.o(.text); + src/quest_log_battle.o(.text); asm/quest_log_battle.o(.text); asm/fame_checker.o(.text); asm/menu2.o(.text); diff --git a/src/quest_log.c b/src/quest_log.c index ed7214bdd..546ff6e05 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -2820,7 +2820,7 @@ static u16 * (*const sQuestLogStorageCBs[])(u16 *, const u16 *) = { }; #ifdef NONMATCHING -void sub_8113550(u16 a0, u16 * a1) +void sub_8113550(u16 a0, const u16 * a1) { u16 * r1; diff --git a/src/quest_log_battle.c b/src/quest_log_battle.c new file mode 100644 index 000000000..c5d8ec2af --- /dev/null +++ b/src/quest_log_battle.c @@ -0,0 +1,97 @@ +#include "global.h" +#include "constants/species.h" +#include "malloc.h" +#include "battle.h" +#include "overworld.h" +#include "quest_log.h" + +struct QuestLogStruct_01 +{ + u16 v0; + u16 v2; + u16 v4; + u8 v6; + u8 v7; +}; + +struct QuestLogStruct_02 +{ + u16 v0; + u16 v2; + u8 v4; +}; + +void sub_812BFDC(void) +{ + if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_DOME)) && (gUnknown_2023E8A == 1 || gUnknown_2023E8A == 7)) + { + struct QuestLogStruct_01 * questLogTrainerBattleRecord = Alloc(sizeof(struct QuestLogStruct_01)); + struct QuestLogStruct_02 * questLogWildBattleRecord = Alloc(sizeof(struct QuestLogStruct_02)); + u16 questLogMessageType; + u16 playerEndingHP; + u16 playerMaxHP; + + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + switch (gTrainers[gTrainerBattleOpponent_A].trainerClass) + { + case 0x54: + questLogMessageType = 30; + break; + case 0x5a: + questLogMessageType = 33; + break; + case 0x57: + questLogMessageType = 32; + break; + default: + questLogMessageType = 34; + break; + } + questLogTrainerBattleRecord->v0 = gTrainerBattleOpponent_A; + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + questLogTrainerBattleRecord->v2 = gBattleResults.lastOpponentSpecies; + if (GetBattlerSide(gBattleStruct->field_182) == B_SIDE_PLAYER) + questLogTrainerBattleRecord->v4 = gBattleMons[gBattleStruct->field_182].species; + else if (gBattleMons[GetBattlerAtPosition(0)].hp != 0) + questLogTrainerBattleRecord->v4 = gBattleMons[GetBattlerAtPosition(0)].species; + else + questLogTrainerBattleRecord->v4 = gBattleMons[GetBattlerAtPosition(2)].species; + playerEndingHP = gBattleMons[GetBattlerAtPosition(0)].hp + gBattleMons[GetBattlerAtPosition(2)].hp; + playerMaxHP = gBattleMons[GetBattlerAtPosition(0)].maxHP + gBattleMons[GetBattlerAtPosition(2)].maxHP; + } + else + { + questLogTrainerBattleRecord->v2 = gBattleResults.lastOpponentSpecies; + questLogTrainerBattleRecord->v4 = gBattleMons[GetBattlerAtPosition(0)].species; + playerEndingHP = gBattleMons[GetBattlerAtPosition(0)].hp; + playerMaxHP = gBattleMons[GetBattlerAtPosition(0)].maxHP; + } + questLogTrainerBattleRecord->v7 = sav1_map_get_name(); + questLogTrainerBattleRecord->v6 = 0; + if (playerEndingHP < playerMaxHP / 3 * 2) + questLogTrainerBattleRecord->v6 = 1; + if (playerEndingHP < playerMaxHP / 3) + questLogTrainerBattleRecord->v6++; + sub_8113550(questLogMessageType, (const u16 *)questLogTrainerBattleRecord); + } + else + { + if (gUnknown_2023E8A == 1) + { + questLogWildBattleRecord->v0 = GetMonData(gEnemyParty + 0, MON_DATA_SPECIES); + questLogWildBattleRecord->v2 = SPECIES_NONE; + } + else + { + questLogWildBattleRecord->v0 = SPECIES_NONE; + questLogWildBattleRecord->v2 = GetMonData(gEnemyParty + 0, MON_DATA_SPECIES); + } + questLogWildBattleRecord->v4 = sav1_map_get_name(); + sub_8113550(31, (const u16 *)questLogWildBattleRecord); + } + Free(questLogTrainerBattleRecord); + Free(questLogWildBattleRecord); + } +} |