diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index ec0f6641d..2304e00e1 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -6,296 +6,6 @@ .text - thumb_func_start DrawFieldMenu -DrawFieldMenu: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, _0805F994 - movs r0, 0 - strh r0, [r4, 0x18] - movs r1, 0x5 - strh r1, [r4, 0x1A] - strh r1, [r4, 0x1C] - strh r0, [r4, 0x1E] - strh r0, [r4, 0x4] - movs r1, 0x2 - strh r1, [r4, 0x6] - strh r0, [r4, 0xC] - strh r0, [r4, 0xE] - str r0, [r4] - strh r0, [r4, 0x14] - adds r0, r4, 0 - adds r0, 0x28 - bl sub_801317C - adds r0, r4, 0 - movs r1, 0x38 - bl sub_80137B0 - cmp r5, 0 - beq _0805F998 - movs r0, 0x7 - movs r1, 0 - bl sub_803EAF0 - b _0805F9A0 - .align 2, 0 -_0805F994: .4byte gUnknown_202EE10 -_0805F998: - movs r0, 0x6 - movs r1, 0 - bl sub_803EAF0 -_0805F9A0: - movs r0, 0 - bl sub_80073B8 - bl GetLeader - movs r1, 0x1 - bl ShouldMonsterRunAwayAndShowEffect - lsls r0, 24 - cmp r0, 0 - beq _0805F9CC - ldr r0, _0805F9C8 - movs r2, 0x2 - strb r2, [r0, 0x1] - strb r2, [r0, 0x2] - strb r2, [r0, 0x3] - movs r1, 0x7 - strb r1, [r0, 0x4] - strb r2, [r0, 0x5] - b _0805F9DA - .align 2, 0 -_0805F9C8: .4byte gUnknown_202749A -_0805F9CC: - ldr r1, _0805FBA0 - movs r0, 0x7 - strb r0, [r1, 0x1] - strb r0, [r1, 0x2] - strb r0, [r1, 0x3] - strb r0, [r1, 0x4] - strb r0, [r1, 0x5] -_0805F9DA: - ldr r4, _0805FBA4 - adds r0, r4, 0 - movs r1, 0 - bl sub_8013800 - adds r1, r0, 0 - ldr r0, _0805FBA8 - ldr r2, [r0] - movs r6, 0 - str r6, [sp] - movs r0, 0x8 - movs r3, 0 - bl xxx_call_draw_string - adds r0, r4, 0 - movs r1, 0x1 - bl sub_8013800 - adds r1, r0, 0 - ldr r0, _0805FBAC - ldr r2, [r0] - str r6, [sp] - movs r0, 0x8 - movs r3, 0 - bl xxx_call_draw_string - adds r0, r4, 0 - movs r1, 0x2 - bl sub_8013800 - adds r1, r0, 0 - ldr r0, _0805FBB0 - ldr r2, [r0] - str r6, [sp] - movs r0, 0x8 - movs r3, 0 - bl xxx_call_draw_string - adds r0, r4, 0 - movs r1, 0x3 - bl sub_8013800 - adds r1, r0, 0 - ldr r0, _0805FBB4 - ldr r2, [r0] - str r6, [sp] - movs r0, 0x8 - movs r3, 0 - bl xxx_call_draw_string - adds r0, r4, 0 - movs r1, 0x4 - bl sub_8013800 - adds r1, r0, 0 - ldr r0, _0805FBB8 - ldr r2, [r0] - str r6, [sp] - movs r0, 0x8 - movs r3, 0 - bl xxx_call_draw_string - movs r0, 0 - bl sub_80073E0 - cmp r5, 0 - bne _0805FA62 - b _0805FB92 -_0805FA62: - bl GetLeader - ldr r7, [r0, 0x70] - bl sub_805317C - adds r5, r0, 0 - bl sub_8008ED0 - movs r4, 0x88 - subs r4, r0 - lsrs r0, r4, 31 - adds r4, r0 - asrs r4, 1 - movs r0, 0x1 - bl sub_80073B8 - str r6, [sp] - adds r0, r4, 0 - movs r1, 0x2 - adds r2, r5, 0 - movs r3, 0x1 - bl xxx_call_draw_string - movs r0, 0x1 - bl sub_80073E0 - movs r0, 0x2 - bl sub_80073B8 - ldr r0, _0805FBBC - ldr r0, [r0] - add r2, sp, 0x8 - add r3, sp, 0xC - add r1, sp, 0x4 - bl DeconstructPlayTime - movs r1, 0x9E - lsls r1, 1 - adds r0, r7, r1 - ldr r0, [r0] - bl RoundUpFixedPoint - ldr r4, _0805FBC0 - str r0, [r4] - movs r2, 0xA0 - lsls r2, 1 - adds r0, r7, r2 - ldr r0, [r0] - bl RoundUpFixedPoint - str r0, [r4, 0x4] - ldr r0, _0805FBC4 - ldr r2, [r0] - str r6, [sp] - movs r0, 0x73 - movs r1, 0 - movs r3, 0x2 - bl xxx_format_and_draw - ldr r0, _0805FBC8 - ldr r0, [r0] - movs r1, 0x98 - lsls r1, 2 - adds r0, r1 - ldr r0, [r0] - str r0, [r4] - ldr r0, _0805FBCC - ldr r2, [r0] - str r6, [sp] - movs r0, 0x73 - movs r1, 0xC - movs r3, 0x2 - bl xxx_format_and_draw - ldr r5, _0805FBD0 - movs r0, 0 - bl GetApparentWeather - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl GetWeatherName - ldr r0, _0805FBD4 - ldr r2, [r0] - str r6, [sp] - movs r0, 0x73 - movs r1, 0x18 - movs r3, 0x2 - bl xxx_format_and_draw - ldr r0, [sp, 0x4] - str r0, [r4] - ldr r0, [sp, 0x8] - str r0, [r4, 0x4] - ldr r0, [sp, 0xC] - str r0, [r4, 0x8] - ldr r0, _0805FBD8 - ldr r2, [r0] - str r6, [sp] - movs r0, 0x73 - movs r1, 0x24 - movs r3, 0x2 - bl xxx_format_and_draw - movs r7, 0 - mov r8, r4 -_0805FB3A: - ldr r0, _0805FBDC - ldr r0, [r0] - lsls r1, r6, 2 - ldr r2, _0805FBE0 - adds r0, r2 - adds r0, r1 - ldr r5, [r0] - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0805FB86 - ldr r4, [r5, 0x70] - ldr r0, _0805FBD0 - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument - movs r1, 0xE - ldrsh r0, [r4, r1] - mov r2, r8 - str r0, [r2] - movs r1, 0x10 - ldrsh r0, [r4, r1] - str r0, [r2, 0x4] - ldr r0, _0805FBE4 - ldr r2, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x4 - adds r1, r7, 0 - movs r3, 0x2 - bl xxx_format_and_draw - adds r7, 0xC - cmp r7, 0x2F - bgt _0805FB8C -_0805FB86: - adds r6, 0x1 - cmp r6, 0x3 - ble _0805FB3A -_0805FB8C: - movs r0, 0x2 - bl sub_80073E0 -_0805FB92: - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0805FBA0: .4byte gUnknown_202749A -_0805FBA4: .4byte gUnknown_202EE10 -_0805FBA8: .4byte gFieldMenuMovesPtr -_0805FBAC: .4byte gFieldMenuItemsPtr -_0805FBB0: .4byte gFieldMenuTeamPtr -_0805FBB4: .4byte gFieldMenuOthersPtr -_0805FBB8: .4byte gFieldMenuGroundPtr -_0805FBBC: .4byte gPlayTimeRef -_0805FBC0: .4byte gUnknown_202DE30 -_0805FBC4: .4byte gUnknown_80F9174 -_0805FBC8: .4byte gTeamInventoryRef -_0805FBCC: .4byte gUnknown_80F9190 -_0805FBD0: .4byte gAvailablePokemonNames -_0805FBD4: .4byte gUnknown_80F91A8 -_0805FBD8: .4byte gUnknown_80F91C8 -_0805FBDC: .4byte gDungeon -_0805FBE0: .4byte 0x0001357c -_0805FBE4: .4byte gUnknown_80F91E0 - thumb_func_end DrawFieldMenu - thumb_func_start sub_805FBE8 sub_805FBE8: push {r4,r5,lr} diff --git a/src/code_805D8C8_1.c b/src/code_805D8C8_1.c index c1f342b32..7832e47f7 100644 --- a/src/code_805D8C8_1.c +++ b/src/code_805D8C8_1.c @@ -11,10 +11,12 @@ #include "dungeon_util.h" #include "pokemon.h" #include "code_8045A00.h" +#include "code_80130A8.h" #include "trap.h" #include "charge_move.h" #include "dungeon_map_access.h" #include "game_options.h" +#include "weather.h" #include "dungeon_items.h" #include "dungeon_leader.h" #include "tile_types.h" @@ -24,6 +26,8 @@ #include "menu_input.h" #include "music.h" #include "items.h" +#include "play_time.h" +#include "text2.h" #include "code_806CD90.h" #include "dungeon_capabilities.h" #include "constants/dungeon.h" @@ -85,7 +89,7 @@ void sub_803E724(s32 a0); void HandleTalkFieldAction(Entity *); bool8 sub_8044B28(void); bool8 IsNotAttacking(Entity *param_1, bool8 param_2); -void ShowFieldMenu(u8 a0, u8 a1); +void ShowFieldMenu(u8 a0, bool8 a1); bool8 sub_805EF60(Entity *a0, EntityInfo *a1); s32 GetTeamMemberEntityIndex(Entity *pokemon); bool8 sub_8070F80(Entity * pokemon, s32 direction); @@ -2854,10 +2858,9 @@ u16 GetLeaderActionId(void) return GetLeaderInfo()->action.action; } -void ShowFieldMenu(u8 a0_, u8 a1) +void ShowFieldMenu(u8 a0_, bool8 a1) { Item *item; - u16 action; s32 r10; u8 a0 = a0_; // Needed to match. s32 var_28; @@ -2918,6 +2921,8 @@ void ShowFieldMenu(u8 a0_, u8 a1) r10 = var_28; if (var_28 == 1) { + u16 action; + sub_8044C10(1); var_34.a0_8 = 0; var_34.a0_16 = 1; @@ -3223,4 +3228,118 @@ void ShowFieldMenu(u8 a0_, u8 a1) ResetUnusedInputStruct(); } -// +extern const u8 *const gFieldMenuMovesPtr; +extern const u8 *const gFieldMenuItemsPtr; +extern const u8 *const gFieldMenuTeamPtr; +extern const u8 *const gFieldMenuOthersPtr; +extern const u8 *const gFieldMenuGroundPtr; +extern const u8 *const gUnknown_80F9174; +extern const u8 *const gUnknown_80F9190; +extern const u8 *const gUnknown_80F91C8; +extern const u8 *const gUnknown_80F91E0; +extern const u8 *const gUnknown_80F91A8; + +const u8 *sub_805317C(void); +void GetWeatherName(u8 *dst, u8 weatherId); + +extern s32 gUnknown_202DE30[]; + +void DrawFieldMenu(u8 a0) +{ + s32 i, x, y, yLoop; + + gUnknown_202EE10.menuIndex = 0; + gUnknown_202EE10.unk1A = 5; + gUnknown_202EE10.unk1C = 5; + gUnknown_202EE10.unk1E = 0; + gUnknown_202EE10.unk4 = 0; + gUnknown_202EE10.unk6 = 2; + gUnknown_202EE10.unkC = 0; + gUnknown_202EE10.unkE = 0; + gUnknown_202EE10.unk0 = 0; + gUnknown_202EE10.unk14 = 0; + sub_801317C(&gUnknown_202EE10.unk28); + sub_80137B0(&gUnknown_202EE10, 0x38); + if (a0) { + sub_803EAF0(7, 0); + } + else { + sub_803EAF0(6, 0); + } + + sub_80073B8(0); + if (ShouldMonsterRunAwayAndShowEffect(GetLeader(), TRUE)) { + gUnknown_202749A[1] = 2; + gUnknown_202749A[2] = 2; + gUnknown_202749A[3] = 2; + gUnknown_202749A[4] = 7; + gUnknown_202749A[5] = 2; + } + else + { + gUnknown_202749A[1] = 7; + gUnknown_202749A[2] = 7; + gUnknown_202749A[3] = 7; + gUnknown_202749A[4] = 7; + gUnknown_202749A[5] = 7; + } + + y = sub_8013800(&gUnknown_202EE10, 0); + xxx_call_draw_string(8, y, gFieldMenuMovesPtr, 0, 0); + + y = sub_8013800(&gUnknown_202EE10, 1); + xxx_call_draw_string(8, y, gFieldMenuItemsPtr, 0, 0); + + y = sub_8013800(&gUnknown_202EE10, 2); + xxx_call_draw_string(8, y, gFieldMenuTeamPtr, 0, 0); + + y = sub_8013800(&gUnknown_202EE10, 3); + xxx_call_draw_string(8, y, gFieldMenuOthersPtr, 0, 0); + + y = sub_8013800(&gUnknown_202EE10, 4); + xxx_call_draw_string(8, y, gFieldMenuGroundPtr, 0, 0); + + sub_80073E0(0); + if (a0) { + u32 hours, minutes, seconds; + EntityInfo *leaderInfo = GetLeader()->info; + const u8 *dungeonName = sub_805317C(); + + x = (136 - sub_8008ED0(dungeonName)) / 2; + sub_80073B8(1); + xxx_call_draw_string(x, 2, dungeonName, 1, 0); + sub_80073E0(1); + sub_80073B8(2); + DeconstructPlayTime(gPlayTimeRef, &hours, &minutes, &seconds); + + gUnknown_202DE30[0] = RoundUpFixedPoint(leaderInfo->belly); + gUnknown_202DE30[1] = RoundUpFixedPoint(leaderInfo->maxBelly); + xxx_format_and_draw(0x73, 0, gUnknown_80F9174, 2, 0); + + gUnknown_202DE30[0] = gTeamInventoryRef->teamMoney; + xxx_format_and_draw(0x73, 12, gUnknown_80F9190, 2, 0); + + GetWeatherName(gAvailablePokemonNames, GetApparentWeather(NULL)); + xxx_format_and_draw(0x73, 24, gUnknown_80F91A8, 2, 0); + + gUnknown_202DE30[0] = hours; + gUnknown_202DE30[1] = minutes; + gUnknown_202DE30[2] = seconds; + xxx_format_and_draw(0x73, 36, gUnknown_80F91C8, 2, 0); + for (yLoop = 0, i = 0; i < MAX_TEAM_MEMBERS; i++) { + Entity *teamMon = gDungeon->teamPokemon[i]; + if (EntityExists(teamMon)) { + EntityInfo *monInfo = teamMon->info; + SetMessageArgument(gAvailablePokemonNames, teamMon, 0); + gUnknown_202DE30[0] = monInfo->HP; + gUnknown_202DE30[1] = monInfo->maxHPStat; + xxx_format_and_draw(4, yLoop, gUnknown_80F91E0, 2, 0); + yLoop += 12; + if (yLoop >= 12 * MAX_TEAM_MEMBERS) + break; + } + } + sub_80073E0(2); + } +} +