diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-11-24 10:45:15 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-24 10:45:15 -0600 |
commit | 80116a80fd98679c0449efe33c4e460947f4b8d0 (patch) | |
tree | 312a72b8513694aab4db01941cc5d2b37b53dd4e /src/quest_log_battle.c | |
parent | 2ed26ab8fcd4e302ab4aac6bb01dba7b5c985914 (diff) | |
parent | bc6416ddd96182d5f786add8d1c1945a2f82f2b9 (diff) |
Merge pull request #22 from PikalaxALT/quest_log
Quest log
Diffstat (limited to 'src/quest_log_battle.c')
-rw-r--r-- | src/quest_log_battle.c | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/src/quest_log_battle.c b/src/quest_log_battle.c new file mode 100644 index 000000000..c702b6a5c --- /dev/null +++ b/src/quest_log_battle.c @@ -0,0 +1,164 @@ +#include "global.h" +#include "constants/species.h" +#include "malloc.h" +#include "battle.h" +#include "link.h" +#include "overworld.h" +#include "quest_log.h" + +struct QuestLogStruct_TrainerBattleRecord +{ + u16 v0; + u16 v2; + u16 v4; + u8 v6; + u8 v7; +}; + +struct QuestLogStruct_WildBattleRecord +{ + u16 v0; + u16 v2; + u8 v4; +}; + +void sub_812C334(s32 *, s32 *); + +void sub_812BFDC(void) +{ + if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_DOME)) && (gUnknown_2023E8A == 1 || gUnknown_2023E8A == 7)) + { + struct QuestLogStruct_TrainerBattleRecord * questLogTrainerBattleRecord = Alloc(sizeof(struct QuestLogStruct_TrainerBattleRecord)); + struct QuestLogStruct_WildBattleRecord * questLogWildBattleRecord = Alloc(sizeof(struct QuestLogStruct_WildBattleRecord)); + 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); + } +} + +struct QuestLogStruct_LinkBattleRecord +{ + u8 v0; + u8 v1[3][7]; +}; + +void sub_812C224(void) +{ + s32 sp0; + s32 sp4[2]; + u16 r8; + s32 r3; + u32 r0; + + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + struct QuestLogStruct_LinkBattleRecord * r5 = Alloc(sizeof(struct QuestLogStruct_LinkBattleRecord)); + r5->v0 = gUnknown_2023E8A - 1; + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + r8 = 15; + sub_812C334(&sp0, sp4); + for (r3 = 0; r3 < 7; r3++) + { + r5->v1[0][r3] = gLinkPlayers[sp0].name[r3]; + r5->v1[1][r3] = gLinkPlayers[sp4[0]].name[r3]; + r5->v1[2][r3] = gLinkPlayers[sp4[1]].name[r3]; + } + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + r8 = 14; + else + { + r0 = InUnionRoom(); + r8 = 13; + if (r0 == TRUE) + r8 = 19; + } + for (r3 = 0; r3 < 7; r3++) + { + r5->v1[0][r3] = gLinkPlayers[gBattleStruct->field_B5 ^ 1].name[r3]; + } + } + sub_8113550(r8, (const u16 *)r5); + Free(r5); + } +} + +void sub_812C334(s32 * a0, s32 * a1) +{ + s32 r5; + s32 _optimized_out = 0; + u8 r2 = gLinkPlayers[gBattleStruct->field_B5].id ^ 2; + for (r5 = 0; r5 < 4; r5++) + { + if (r2 == gLinkPlayers[r5].id) + a0[0] = r5; + else if (r5 != gBattleStruct->field_B5) + a1[_optimized_out++] = r5; + } +} |