DrawFieldMenu

This commit is contained in:
DizzyEggg
2024-07-23 09:40:05 +02:00
parent f88189a2b1
commit f3626e764c
2 changed files with 123 additions and 294 deletions

View File

@@ -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}

View File

@@ -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);
}
}