diff options
-rw-r--r-- | asm/pokemon_summary_screen.s | 151 | ||||
-rw-r--r-- | include/menu.h | 2 | ||||
-rw-r--r-- | src/menu.c | 2 | ||||
-rw-r--r-- | src/pokemon_summary_screen.c | 72 |
4 files changed, 74 insertions, 153 deletions
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s index c1f0fab6d..bfbafc4be 100644 --- a/asm/pokemon_summary_screen.s +++ b/asm/pokemon_summary_screen.s @@ -5739,157 +5739,6 @@ _080A065C: .4byte 0x0000044c _080A0660: .4byte 0x0000103d thumb_func_end sub_80A057C - thumb_func_start PokemonSummaryScreen_CheckOT -PokemonSummaryScreen_CheckOT: @ 80A0664 - push {r4-r6,lr} - adds r6, r0, 0 - ldr r0, _080A06A0 @ =0x02018000 - ldr r1, [r0] - ldr r0, _080A06A4 @ =gEnemyParty - cmp r1, r0 - bne _080A06B0 - bl GetMultiplayerId - movs r1, 0x1 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080A06A8 @ =gLinkPlayers - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r0, r2, 0x4 - adds r0, r1, r0 - ldrh r5, [r0] - ldr r4, _080A06AC @ =gStringVar1 - adds r2, 0x8 - adds r1, r2 - adds r0, r4, 0 - bl StringCopy - adds r0, r4, 0 - bl StripExtCtrlCodes - b _080A06C2 - .align 2, 0 -_080A06A0: .4byte 0x02018000 -_080A06A4: .4byte gEnemyParty -_080A06A8: .4byte gLinkPlayers -_080A06AC: .4byte gStringVar1 -_080A06B0: - bl GetPlayerTrainerId - adds r5, r0, 0 - ldr r0, _080A06F0 @ =0x0000ffff - ands r5, r0 - ldr r0, _080A06F4 @ =gStringVar1 - ldr r1, _080A06F8 @ =gSaveBlock2 - bl StringCopy -_080A06C2: - adds r0, r6, 0 - movs r1, 0x1 - bl GetMonData - ldr r1, _080A06F0 @ =0x0000ffff - ands r1, r0 - cmp r5, r1 - bne _080A06EA - ldr r4, _080A06FC @ =gStringVar2 - adds r0, r6, 0 - movs r1, 0x7 - adds r2, r4, 0 - bl GetMonData - ldr r0, _080A06F4 @ =gStringVar1 - adds r1, r4, 0 - bl StringCompareWithoutExtCtrlCodes - cmp r0, 0 - beq _080A0700 -_080A06EA: - movs r0, 0 - b _080A0702 - .align 2, 0 -_080A06F0: .4byte 0x0000ffff -_080A06F4: .4byte gStringVar1 -_080A06F8: .4byte gSaveBlock2 -_080A06FC: .4byte gStringVar2 -_080A0700: - movs r0, 0x1 -_080A0702: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end PokemonSummaryScreen_CheckOT - - thumb_func_start sub_80A0708 -sub_80A0708: @ 80A0708 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r4, r0, 0 - lsls r1, 24 - lsrs r5, r1, 24 - mov r9, r5 - lsls r2, 24 - lsrs r6, r2, 24 - mov r8, r6 - movs r1, 0x25 - bl GetMonData - lsls r0, 24 - movs r1, 0xFF - lsls r1, 24 - adds r0, r1 - lsrs r0, 24 - cmp r0, 0x2 - bls _080A073C - ldr r0, _080A0738 @ =gOtherText_EggObtainedInTrade - b _080A076E - .align 2, 0 -_080A0738: .4byte gOtherText_EggObtainedInTrade -_080A073C: - adds r0, r4, 0 - movs r1, 0x23 - bl GetMonData - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0xFF - bne _080A0754 - ldr r0, _080A0750 @ =gOtherText_EggNicePlace - b _080A076E - .align 2, 0 -_080A0750: .4byte gOtherText_EggNicePlace -_080A0754: - adds r0, r4, 0 - bl PokemonSummaryScreen_CheckOT - lsls r0, 24 - cmp r0, 0 - bne _080A0768 - ldr r0, _080A0764 @ =gOtherText_EggObtainedInTrade - b _080A076E - .align 2, 0 -_080A0764: .4byte gOtherText_EggObtainedInTrade -_080A0768: - cmp r7, 0xFD - bne _080A077C - ldr r0, _080A0778 @ =gOtherText_EggHotSprings -_080A076E: - adds r1, r5, 0 - adds r2, r6, 0 - bl MenuPrint - b _080A0786 - .align 2, 0 -_080A0778: .4byte gOtherText_EggHotSprings -_080A077C: - ldr r0, _080A0794 @ =gOtherText_EggDayCare - mov r1, r9 - mov r2, r8 - bl MenuPrint -_080A0786: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080A0794: .4byte gOtherText_EggDayCare - thumb_func_end sub_80A0708 - .section .text_80A0958 thumb_func_start sub_80A0958 diff --git a/include/menu.h b/include/menu.h index 05c675097..0e4860791 100644 --- a/include/menu.h +++ b/include/menu.h @@ -18,7 +18,7 @@ void unref_sub_8071DA4(struct WindowConfig *, u16); void MenuLoadTextWindowGraphics_OverrideFrameType(u8); void MenuLoadTextWindowGraphics(void); void BasicInitMenuWindow(const struct WindowConfig *); -void MenuPrint(u8 *, u8, u8); +void MenuPrint(const u8 *, u8, u8); void MenuZeroFillWindowRect(u8, u8, u8, u8); void MenuFillWindowRectWithBlankTile(u8, u8, u8, u8); void MenuZeroFillScreen(void); diff --git a/src/menu.c b/src/menu.c index 4bb4dbec2..31841146d 100644 --- a/src/menu.c +++ b/src/menu.c @@ -143,7 +143,7 @@ void BasicInitMenuWindow(const struct WindowConfig *winConfig) gMenuWindowPtr->tileDataStartOffset = gMenuTextTileOffset; } -void MenuPrint(u8 *str, u8 left, u8 top) +void MenuPrint(const u8 *str, u8 left, u8 top) { sub_8003460(gMenuWindowPtr, str, gMenuTextTileOffset, left, top); } diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 58573e97e..7ac26fc72 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -3,10 +3,13 @@ #include "menu.h" #include "pokemon.h" #include "string_util.h" +#include "link.h" extern u8 gStringVar1[]; extern u8 gStringVar4[]; +extern struct Pokemon *unk_2018000; + extern u8 *(gNatureNames[]); extern const u8 gOtherText_Terminator4[]; extern const u8 gOtherText_Nature[]; @@ -16,10 +19,79 @@ extern const u8 gOtherText_Egg2[]; extern const u8 gOtherText_ObtainedInTrade[]; extern const u8 gOtherText_FatefulEncounter[]; extern const u8 gOtherText_Met2[]; +extern const u8 gOtherText_EggDayCare[]; +extern const u8 gOtherText_EggNicePlace[]; +extern const u8 gOtherText_EggObtainedInTrade[]; +extern const u8 gOtherText_EggHotSprings[]; u8 *sub_80A1E9C(u8 *dest, u8 *src, u8); u8 PokemonSummaryScreen_CheckOT(struct Pokemon *pokemon); u8 *PokemonSummaryScreen_CopyPokemonLevel(u8 *dest, u8 level); +u32 GetPlayerTrainerId(void); + +bool8 PokemonSummaryScreen_CheckOT(struct Pokemon *mon) +{ + u32 trainerId; + + if (unk_2018000 == gEnemyParty) + { + u8 enemyId = GetMultiplayerId() ^ 1; + trainerId = gLinkPlayers[enemyId].trainerId & 0xFFFF; + StringCopy(gStringVar1, gLinkPlayers[enemyId].name); + StripExtCtrlCodes(gStringVar1); + } + else + { + trainerId = GetPlayerTrainerId() & 0xFFFF; + StringCopy(gStringVar1, gSaveBlock2.playerName); + } + + if (trainerId != (GetMonData(mon, MON_DATA_OT_ID) & 0xFFFF)) + return FALSE; + + GetMonData(mon, MON_DATA_OT_NAME, gStringVar2); + + if (!StringCompareWithoutExtCtrlCodes(gStringVar1, gStringVar2)) + return TRUE; + + return FALSE; +} + +void sub_80A0708(struct Pokemon *mon, u8 left, u8 top) +{ + u8 locationMet; + u8 gameMet = GetMonData(mon, MON_DATA_MET_GAME); + + if (!(gameMet == VERSION_RUBY || gameMet == VERSION_SAPPHIRE || gameMet == VERSION_EMERALD)) + { + MenuPrint(gOtherText_EggObtainedInTrade, left, top); + return; + } + + locationMet = GetMonData(mon, MON_DATA_MET_LOCATION); + + if (locationMet == 255) + { + MenuPrint(gOtherText_EggNicePlace, left, top); + return; + } + + if (!PokemonSummaryScreen_CheckOT(mon)) + { + MenuPrint(gOtherText_EggObtainedInTrade, left, top); + return; + } + + asm(""); // needed to match for some reason + + if (locationMet == 253) + { + MenuPrint(gOtherText_EggHotSprings, left, top); + return; + } + + MenuPrint(gOtherText_EggDayCare, left, top); +} void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *pokemon, u8 left, u8 top) { u8 locationMet; |