mirror of
https://github.com/pret/pmd-red.git
synced 2026-10-05 17:02:34 -04:00
3433 lines
86 KiB
C
3433 lines
86 KiB
C
#include "global.h"
|
|
#include "structs/str_dungeon.h"
|
|
#include "number_util.h"
|
|
#include "input.h"
|
|
#include "structs/map.h"
|
|
#include "code_80521D0.h"
|
|
#include "dungeon_action.h"
|
|
#include "dungeon_ai_targeting.h"
|
|
#include "dungeon_pokemon_attributes.h"
|
|
#include "dungeon_random.h"
|
|
#include "dungeon_util.h"
|
|
#include "pokemon.h"
|
|
#include "code_8045A00.h"
|
|
#include "code_80130A8.h"
|
|
#include "code_803E46C.h"
|
|
#include "code_801602C.h"
|
|
#include "code_800D090.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"
|
|
#include "dungeon_visibility.h"
|
|
#include "dungeon_movement.h"
|
|
#include "bg_control.h"
|
|
#include "menu_input.h"
|
|
#include "music.h"
|
|
#include "items.h"
|
|
#include "play_time.h"
|
|
#include "text2.h"
|
|
#include "text1.h"
|
|
#include "code_806CD90.h"
|
|
#include "dungeon_capabilities.h"
|
|
#include "constants/dungeon.h"
|
|
#include "constants/status.h"
|
|
#include "constants/iq_skill.h"
|
|
#include "constants/dungeon_action.h"
|
|
#include "structs/struct_sub80095e4.h"
|
|
#include "structs/str_text.h"
|
|
|
|
struct UnkMenuBitsStruct {
|
|
u8 a0_8;
|
|
u8 a0_16;
|
|
u8 a0_24;
|
|
u8 a0_32;
|
|
};
|
|
|
|
extern void PrintFieldMessage(u32, const u8 *, u32);
|
|
extern void HandleSetItemAction(Entity *,bool8);
|
|
extern void HandleUnsetItemAction(Entity *,bool8);
|
|
extern bool8 sub_8048A68(Entity *param_1,Item *item);
|
|
extern bool8 sub_8048950(Entity *param_1,Item *item);
|
|
extern bool8 sub_8048B9C(Entity *param_1,Item *item);
|
|
extern Item *sub_8044D90(Entity *, s32, u32);
|
|
extern void sub_8083D44(void);
|
|
extern void sub_8083D30(void);
|
|
extern void sub_8083D08(void);
|
|
extern void sub_805239C(Entity *, const u8 *);
|
|
extern void sub_806A6E8(Entity *);
|
|
extern bool8 sub_8047084(s32 itemFlag);
|
|
extern void sub_807FE9C(Entity *pokemon, Position *pos, int param_3, char param_4);
|
|
extern void sub_8045DB4(Position *, u32);
|
|
extern s32 sub_8052B8C(u32, const u8 *, u32);
|
|
bool8 sub_807EF48(void);
|
|
void sub_806A2BC(Entity *a0, u8 a1);
|
|
bool8 sub_805E874(void);
|
|
bool8 sub_80701A4(Entity *a0);
|
|
void sub_80647F0(Entity *a0);
|
|
void sub_805E738(Entity *a0);
|
|
void sub_803E708(s32 a0, s32 a1);
|
|
void sub_8040A78(void);
|
|
void sub_805E804(void);
|
|
void sub_8049ED4(void);
|
|
void sub_8064BE0(void);
|
|
void sub_8075680(u32);
|
|
void sub_8094C88(void);
|
|
void sub_8040A84(void);
|
|
void sub_8047158(void);
|
|
void sub_804AA60(void);
|
|
void sub_80532B4(void);
|
|
void sub_806A914(u8 a0, u8 a1, u8 a2);
|
|
void sub_8044C10(u8 a0);
|
|
u16 GetLeaderActionId(void);
|
|
void sub_80978C8(s16 a0);
|
|
void sub_8044C50(u16 a0);
|
|
void sub_805E2C4(Entity *leader);
|
|
bool8 sub_8094C48(void);
|
|
void sub_8052210(u8 a0);
|
|
bool8 sub_805EC4C(Entity *a0, u8 a1);
|
|
void sub_803E724(s32 a0);
|
|
void HandleTalkFieldAction(Entity *);
|
|
bool8 sub_8044B28(void);
|
|
bool8 IsNotAttacking(Entity *param_1, bool8 param_2);
|
|
void ShowFieldMenu(u8 a0, bool8 a1);
|
|
bool8 sub_805EF60(Entity *a0, EntityInfo *a1);
|
|
s32 GetTeamMemberEntityIndex(Entity *pokemon);
|
|
bool8 sub_8070F80(Entity * pokemon, s32 direction);
|
|
void DrawFieldMenu(u8 a0);
|
|
bool8 sub_805FD74(Entity * a0, struct UnkMenuBitsStruct *a1);
|
|
bool8 sub_805FD3C(struct UnkMenuBitsStruct *a0);
|
|
void sub_8060D24(UNUSED ActionContainer *a0);
|
|
bool8 sub_8060E38(Entity *a0);
|
|
void sub_8062D8C(ActionContainer *a0);
|
|
void sub_80637E8(ActionContainer *a0);
|
|
void sub_8063B54(ActionContainer *a0);
|
|
void sub_8063BB4(ActionContainer *a0);
|
|
void sub_806752C(ActionContainer *a0);
|
|
bool8 sub_8061A38(ActionContainer *a0, bool8 a1);
|
|
void sub_8063A70(ActionContainer *a0, bool8 a1);
|
|
void sub_8063CF0(ActionContainer *a0, bool8 a1);
|
|
void sub_8067768(UNUSED ActionContainer *a0);
|
|
void sub_80615E8(ActionContainer *a0);
|
|
void sub_804A728(Position *pos, s32 a1, u8 a2, u8 a3);
|
|
extern bool8 sub_8071A8C(Entity *pokemon);
|
|
extern void sub_80643AC(Entity *pokemon);
|
|
extern u8 sub_8062F90(Entity *, u32, u32, u32, u32);
|
|
|
|
extern Entity *gLeaderPointer;
|
|
|
|
extern u8 gUnknown_202F22D;
|
|
extern u8 gUnknown_202F22C;
|
|
extern u8 gUnknown_202F230;
|
|
extern u8 gUnknown_202F231;
|
|
extern u8 gUnknown_202EE00;
|
|
extern u16 gUnknown_202F22E;
|
|
|
|
extern const u8 *gUnknown_80F8A84;
|
|
extern const u8 *gUnknown_80F8A6C;
|
|
extern const u8 *gUnknown_80F8ADC;
|
|
extern const u8 *gUnknown_80F8AB0;
|
|
extern const u8 *gUnknown_80F8B0C;
|
|
extern const u8 *gUnknown_80FD4B0;
|
|
extern const u8 *gUnknown_80F8A4C;
|
|
extern const u8 *gUnknown_80F8A28;
|
|
extern const u8 *gUnknown_8100208;
|
|
extern const u8 *gUnknown_80F9BD8;
|
|
extern const u8 *gUnknown_80F9C08;
|
|
extern const u8 *gUnknown_80F9C2C;
|
|
extern const u8 *gUnknown_80F9BB0;
|
|
extern const u8 *gUnknown_80FDE18;
|
|
|
|
#ifdef NONMATCHING
|
|
|
|
void sub_805D8C8(void)
|
|
{
|
|
struct UnkMenuBitsStruct r6;
|
|
s32 i; //r4
|
|
s32 j; // r3
|
|
u32 r7;
|
|
s32 r9;
|
|
s32 r5;
|
|
Entity *leader; // r10
|
|
EntityInfo *leaderInfo; // r8
|
|
u32 buttonsR1, buttonsR2; // r1 r2
|
|
const u8 *msg; // r3
|
|
bool32 r3;
|
|
s32 r4;
|
|
s32 prevMapOption; // r4
|
|
|
|
// Stack
|
|
u8 sp0[5];
|
|
s32 frames;
|
|
s32 var_38;
|
|
unkDungeonGlobal_unk181E8_sub *unkPtr;
|
|
|
|
unkPtr = &gDungeon->unk181e8;
|
|
var_38 = 3;
|
|
gDungeon->unk12 = 0;
|
|
sub_806A2BC(GetLeader(), 1);
|
|
if (sub_80701A4(GetLeader())) {
|
|
sub_803E708(60, 16);
|
|
return;
|
|
}
|
|
|
|
gDungeon->unk673 = 0;
|
|
sub_8040A78();
|
|
if (gDungeon->unk1 != 0) {
|
|
gDungeon->unk1 = 0;
|
|
if (!ShouldMonsterRunAwayAndShowEffect(GetLeader(), TRUE)) {
|
|
sub_8044C10(1);
|
|
sub_805E804();
|
|
sub_80647F0(GetLeader());
|
|
ResetRepeatTimers();
|
|
ResetUnusedInputStruct();
|
|
if (GetLeaderActionId() != 0) {
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
sub_806A914(1, 1, 1);
|
|
while (1) {
|
|
|
|
leader = GetLeader();
|
|
leaderInfo = leader->info;
|
|
|
|
sub_80978C8(leaderInfo->id);
|
|
if (gDungeon->unk66C != 0) {
|
|
if (sub_805E874() != 0) {
|
|
leaderInfo->action.action = 2;
|
|
leaderInfo->action.unk4[0].actionUseIndex = 0;
|
|
break;
|
|
}
|
|
sub_805E804();
|
|
}
|
|
gUnknown_202F22D = 0;
|
|
gUnknown_202F22C = 0;
|
|
if (gDungeon->unk5C0 >= 0) {
|
|
r6.a0_8 = 1;
|
|
}
|
|
else {
|
|
r6.a0_8 = 0;
|
|
}
|
|
r6.a0_16 = 0;
|
|
r6.a0_24 = 0;
|
|
|
|
frames = 0;
|
|
sub_8044C50(0);
|
|
gUnknown_202F230 = 0;
|
|
gUnknown_202F231 = 0;
|
|
while (r6.a0_8 == 0) {
|
|
bool32 alwaysFalse = FALSE;
|
|
|
|
gUnknown_202F22E++;
|
|
if (unkPtr->unk1821A != 0) {
|
|
frames = 0;
|
|
}
|
|
else {
|
|
frames++;
|
|
}
|
|
|
|
if (var_38 != 0 && --var_38 == 0) {
|
|
sub_8075680(0);
|
|
}
|
|
|
|
sub_805E2C4(leader);
|
|
r7 = 0;
|
|
{
|
|
s32 i;
|
|
for (i = 0; i < 5; i++) {
|
|
sp0[i] = 0;
|
|
}
|
|
}
|
|
|
|
if (gRealInputs.held & A_BUTTON && gRealInputs.held & B_BUTTON && RoundUpFixedPoint(leaderInfo->belly) != 0) {
|
|
sub_8044C50(1);
|
|
gDungeon->unk673 = 1;
|
|
break;
|
|
}
|
|
|
|
r9 = 0;
|
|
if (gRealInputs.pressed & A_BUTTON) {
|
|
if (gRealInputs.held & B_BUTTON) {
|
|
if (RoundUpFixedPoint(leaderInfo->belly) != 0) {
|
|
sub_8044C50(1);
|
|
gDungeon->unk673 = 1;
|
|
break;
|
|
}
|
|
}
|
|
else if (ShouldMonsterRunAwayAndShowEffect(leader, TRUE)) {
|
|
SendMessage(leader, gUnknown_80FD4B0);
|
|
sub_8044C50(1);
|
|
gDungeon->unk673 = 1;
|
|
break;
|
|
}
|
|
else {
|
|
if (gRealInputs.held & L_BUTTON) {
|
|
register bool32 r7;
|
|
|
|
for (i = 0; i < MAX_MON_MOVES; i++) {
|
|
if (!(leaderInfo->moves[i].moveFlags & 1))
|
|
continue;
|
|
if (leaderInfo->moves[i].moveFlags & 8)
|
|
break;
|
|
}
|
|
if (i == MAX_MON_MOVES) {
|
|
SendMessage(leader, gUnknown_80F8A28);
|
|
break;
|
|
}
|
|
|
|
for (j = 0; j < MAX_MON_MOVES; j++) {
|
|
|
|
if (!(leaderInfo->moves[j].moveFlags & 1))
|
|
continue;
|
|
if (leaderInfo->moves[j].PP != 0)
|
|
break;
|
|
}
|
|
if (j == MAX_MON_MOVES) {
|
|
SetMonsterActionFields(&leaderInfo->action, 0x17);
|
|
break;
|
|
}
|
|
|
|
r7 = 0;
|
|
for (j = i; j < MAX_MON_MOVES; j++) {
|
|
if (j != i && !(leaderInfo->moves[j].moveFlags & 2))
|
|
break;
|
|
if (leaderInfo->moves[j].PP != 0) {
|
|
r7 = 1;
|
|
break;
|
|
}
|
|
}
|
|
if (r7 == 0) {
|
|
SendMessage(leader, gUnknown_80F8A4C);
|
|
}
|
|
else {
|
|
SetMonsterActionFields(&leaderInfo->action, 0x14);
|
|
leaderInfo->action.unk4[0].actionUseIndex = GetTeamMemberEntityIndex(leader);
|
|
leaderInfo->action.unk4[1].actionUseIndex = i;
|
|
}
|
|
break;
|
|
}
|
|
else {
|
|
if (!sub_805EF60(leader, leaderInfo)) {
|
|
SetMonsterActionFields(&leaderInfo->action, 0x32);
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (gRealInputs.shortPress & B_BUTTON) {
|
|
r6.a0_8 = 1;
|
|
r6.a0_16 = 0;
|
|
r6.a0_24 = 0;
|
|
break;
|
|
}
|
|
else if (sp0[1] != 0) { // Opens moves menu
|
|
gDungeon->unk5C0 = 0;
|
|
r6.a0_8 = 1;
|
|
r6.a0_16 = 0;
|
|
r6.a0_24 = 1;
|
|
break;
|
|
}
|
|
else if (sp0[2] != 0) { // Opens item menu
|
|
gDungeon->unk5C0 = 1;
|
|
r6.a0_8 = 1;
|
|
r6.a0_16 = 0;
|
|
r6.a0_24 = 1;
|
|
break;
|
|
}
|
|
else if (sp0[3] != 0) { // Opens pokemon menu
|
|
gDungeon->unk5C0 = 2;
|
|
r6.a0_8 = 1;
|
|
r6.a0_16 = 0;
|
|
r6.a0_24 = 1;
|
|
break;
|
|
}
|
|
else if (sp0[4] != 0) { // Opens regular menu
|
|
|
|
r6.a0_8 = 1;
|
|
r6.a0_16 = 0;
|
|
r6.a0_24 = 1;
|
|
break;
|
|
}
|
|
else if (frames > 0x707) { // Opens simple menu when idling
|
|
|
|
r6.a0_8 = 1;
|
|
r6.a0_16 = 1;
|
|
r6.a0_24 = 0;
|
|
break;
|
|
}
|
|
|
|
r4 = gGameOptionsRef->unk9;
|
|
if (r4 == 0) {
|
|
|
|
// 0 != 0 comparision here...
|
|
if ((gRealInputs.pressed & B_BUTTON || (r7 == 0 && alwaysFalse != FALSE)) && unkPtr->unk1821A != 0) {
|
|
sub_804AA60();
|
|
gUnknown_202F22D = r4;
|
|
ResetRepeatTimers();
|
|
ResetUnusedInputStruct();
|
|
}
|
|
}
|
|
if (gRealInputs.held & L_BUTTON) {
|
|
if (gRealInputs.pressed & B_BUTTON) {
|
|
sub_80532B4();
|
|
ResetRepeatTimers();
|
|
ResetUnusedInputStruct();
|
|
}
|
|
}
|
|
r4 = 0;
|
|
if (gRealInputs.held & R_BUTTON) {
|
|
if (gUnknown_202F22C == 0) {
|
|
gUnknown_202F22E = 0;
|
|
}
|
|
gUnknown_202F22C = 1;
|
|
}
|
|
else {
|
|
gUnknown_202F22C = 0;
|
|
}
|
|
|
|
r3 = FALSE;
|
|
if (gGameOptionsRef->unk9 == 0) {
|
|
if (gRealInputs.shortPress & R_BUTTON || r9 != 0 || gRealInputs.pressed & START_BUTTON) {
|
|
r3 = TRUE;
|
|
}
|
|
}
|
|
if (r3) {
|
|
sub_805E738(leader);
|
|
gUnknown_202F22D = 1;
|
|
unkPtr->unk1821B = leaderInfo->action.direction;
|
|
unkPtr->unk1821C = 0xFF;
|
|
ResetRepeatTimers();
|
|
}
|
|
|
|
if ((gRealInputs.held & L_BUTTON) == L_BUTTON && (gRealInputs.pressed & R_BUTTON) == R_BUTTON) {
|
|
r4 = 1;
|
|
}
|
|
if (sp0[0] != 0) {
|
|
r4 = 1;
|
|
}
|
|
if (r4) {
|
|
for (i = 0; i < INVENTORY_SIZE; i++) {
|
|
if (!(gTeamInventoryRef->teamItems[i].flags & ITEM_FLAG_EXISTS))
|
|
continue;
|
|
if (gTeamInventoryRef->teamItems[i].flags & ITEM_FLAG_SET) {
|
|
sub_8044C50(11);
|
|
leaderInfo->action.unk4[0].actionUseIndex = i + 1;
|
|
leaderInfo->action.unk4[0].lastItemThrowPosition.x = 0;
|
|
leaderInfo->action.unk4[0].lastItemThrowPosition.y = 0;
|
|
break;
|
|
}
|
|
}
|
|
if (leaderInfo->action.action != 0) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
// SELECT button
|
|
if (!gDungeon->unk181e8.blinded && gGameOptionsRef->mapOption != 6 && gRealInputs.pressed & SELECT_BUTTON) {
|
|
prevMapOption = gGameOptionsRef->mapOption;
|
|
gUnknown_202EE00 = 1;
|
|
gDungeon->unk181e8.unk18214 = 1;
|
|
if (!sub_8094C48()) {
|
|
sub_8094C88();
|
|
}
|
|
sub_8052210(1);
|
|
sub_8040A84();
|
|
SetBGOBJEnableFlags(0x1E);
|
|
sub_803E708(0xA, 0x2F);
|
|
while (1) {
|
|
sub_803E46C(0x2F);
|
|
if (gRealInputs.pressed & SELECT_BUTTON)
|
|
break;
|
|
if (gRealInputs.pressed & B_BUTTON)
|
|
break;
|
|
|
|
if (gRealInputs.pressed & A_BUTTON) {
|
|
gUnknown_202EE00 = (gUnknown_202EE00 == 0) ? 1 : 0;
|
|
sub_8040A84();
|
|
}
|
|
}
|
|
gDungeon->unk181e8.unk18214 = 0;
|
|
gGameOptionsRef->mapOption = prevMapOption;
|
|
gUnknown_202EE00 = 1;
|
|
sub_8040A84();
|
|
SetBGOBJEnableFlags(0);
|
|
sub_803E46C(0x2F);
|
|
sub_803E46C(0x2F);
|
|
}
|
|
|
|
if (gDungeon->unk66D != 0 && gUnknown_202F22C == 0) {
|
|
buttonsR1 = buttonsR2 = gRealInputs.pressed;
|
|
}
|
|
else {
|
|
buttonsR1 = gRealInputs.held;
|
|
buttonsR2 = (unkPtr->unk1821A == 0) ? gRealInputs.held : gRealInputs.pressed;
|
|
}
|
|
|
|
buttonsR1 &= DPAD_ANY;
|
|
buttonsR2 &= DPAD_ANY;
|
|
r5 = -1;
|
|
if (buttonsR1 == (DPAD_UP | DPAD_RIGHT))
|
|
r5 = 3;
|
|
if (buttonsR1 == (DPAD_UP | DPAD_LEFT))
|
|
r5 = 5;
|
|
if (buttonsR1 == (DPAD_DOWN | DPAD_RIGHT))
|
|
r5 = 1;
|
|
if (buttonsR1 == (DPAD_DOWN | DPAD_LEFT))
|
|
r5 = 7;
|
|
|
|
if (buttonsR2 == DPAD_UP)
|
|
r5 = 4;
|
|
if (buttonsR2 == DPAD_DOWN)
|
|
r5 = 0;
|
|
if (buttonsR2 == DPAD_RIGHT)
|
|
r5 = 2;
|
|
if (buttonsR2 == DPAD_LEFT)
|
|
r5 = 6;
|
|
|
|
if (r5 >= 0 && (gUnknown_202F22C == 0 || (r5 & 1))) {
|
|
bool32 aaa = 0;
|
|
bool32 register r7 = (leaderInfo->action.direction != r5);
|
|
leaderInfo->action.direction = r5 & 7;
|
|
if (gUnknown_202F22D != 0) {
|
|
unkPtr->unk1821B = r5;
|
|
sub_806CDD4(leader, sub_806CEBC(leader), r5);
|
|
}
|
|
else {
|
|
|
|
r4 = 0;
|
|
|
|
msg = NULL;
|
|
if (sub_805EC4C(leader, 1))
|
|
break;
|
|
|
|
if (leaderInfo->immobilize.immobilizeStatus == 2) {
|
|
msg = gUnknown_80F8A84, r4 = 1;
|
|
}
|
|
else if (leaderInfo->immobilize.immobilizeStatus == 7) {
|
|
msg = gUnknown_80F8A6C, r4 = 1;
|
|
}
|
|
else if (leaderInfo->immobilize.immobilizeStatus == 5) {
|
|
msg = gUnknown_80F8AB0, r4 = 1;
|
|
}
|
|
else if (leaderInfo->immobilize.immobilizeStatus == 3) {
|
|
msg = gUnknown_80F8ADC, r4 = 1;
|
|
}
|
|
else if (leaderInfo->immobilize.immobilizeStatus == 4) {
|
|
msg = gUnknown_80F8B0C, r4 = 1;
|
|
}
|
|
if (!CanMoveInDirection(leader, r5))
|
|
r4 |= 2;
|
|
|
|
if (r7) {
|
|
sub_806CDD4(leader, sub_806CEBC(leader), r5);
|
|
}
|
|
// Note to self: r7 is set to 2, but I guess it's because the variable is not used anymore?
|
|
//r7 = 2;
|
|
if (!(r4 & 2)) {
|
|
|
|
//r9 = 1;
|
|
if (r4 & 1) {
|
|
if (msg != NULL) {
|
|
SendMessage(leader, msg);
|
|
}
|
|
sub_8044C50(1);
|
|
gDungeon->unk673 = 1; // or r9?
|
|
break;
|
|
}
|
|
sub_8044C50(2);
|
|
|
|
// mov r0, cmp r0, #0 wtf
|
|
if ((gRealInputs.held & B_BUTTON || aaa != 0) && RoundUpFixedPoint(leaderInfo->belly) != 0) {
|
|
if (leader->info->volatileStatus.volatileStatus != 2) {
|
|
gDungeon->unk66C = 1; // or r9?
|
|
}
|
|
leaderInfo->action.unk4[0].actionUseIndex = 0;
|
|
break;
|
|
}
|
|
leaderInfo->action.unk4[0].actionUseIndex = 1;
|
|
break;
|
|
}
|
|
|
|
if (r4 & 1)
|
|
sub_803E724(0x23);
|
|
}
|
|
}
|
|
|
|
sub_803E46C(0xF);
|
|
}
|
|
|
|
if (unkPtr->unk1821A != 0) {
|
|
sub_804AA60();
|
|
}
|
|
|
|
if (leaderInfo->action.action == 0x2D || leaderInfo->action.action == 0x13) {
|
|
HandleTalkFieldAction(leader);
|
|
if (sub_8044B28())
|
|
break;
|
|
sub_8044C50(0);
|
|
}
|
|
else if ((r6.a0_8) == 0) {
|
|
gDungeon->unk66D = 0;
|
|
if (leaderInfo->action.action != 0) {
|
|
if (!IsNotAttacking(leader, FALSE)) {
|
|
sub_803E46C(0xF);
|
|
}
|
|
break;
|
|
}
|
|
sub_803E46C(0xF);
|
|
}
|
|
else {
|
|
u8 r2;
|
|
sub_803E46C(0xF);
|
|
sub_8047158();
|
|
r2 = (r6.a0_16 == 0) ? 1 : 0;
|
|
ShowFieldMenu(r2, r6.a0_24);
|
|
ResetRepeatTimers();
|
|
ResetUnusedInputStruct();
|
|
gUnknown_202F22D = 0;
|
|
unkPtr->unk1821A = 0;
|
|
sub_804AA60();
|
|
if (sub_8044B28())
|
|
break;
|
|
if (leaderInfo->action.action != 0) {
|
|
if (leaderInfo->action.action == 0x2B) {
|
|
gDungeon->unk4 = 1;
|
|
gDungeon->unk3 = 1;
|
|
}
|
|
if (leaderInfo->action.action == 0x2E) {
|
|
gDungeon->unk4 = 1;
|
|
gDungeon->unk3 = 0;
|
|
}
|
|
break;
|
|
}
|
|
sub_803E46C(0xF);
|
|
if (gDungeon->unk4 != 0)
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
#else
|
|
NAKED void sub_805D8C8(void)
|
|
{
|
|
asm_unified("push {r4-r7,lr}\n"
|
|
"mov r7, r10\n"
|
|
"mov r6, r9\n"
|
|
"mov r5, r8\n"
|
|
"push {r5-r7}\n"
|
|
"sub sp, 0x24\n"
|
|
"ldr r4, _0805D90C\n"
|
|
"ldr r1, [r4]\n"
|
|
"ldr r0, _0805D910\n"
|
|
"adds r0, r1, r0\n"
|
|
"str r0, [sp, 0x10]\n"
|
|
"movs r2, 0x3\n"
|
|
"str r2, [sp, 0xC]\n"
|
|
"movs r5, 0\n"
|
|
"movs r0, 0\n"
|
|
"strh r0, [r1, 0x12]\n"
|
|
"bl GetLeader\n"
|
|
"movs r1, 0x1\n"
|
|
"bl sub_806A2BC\n"
|
|
"bl GetLeader\n"
|
|
"bl sub_80701A4\n"
|
|
"lsls r0, 24\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805D928\n"
|
|
"movs r0, 0x3C\n"
|
|
"movs r1, 0x10\n"
|
|
"bl sub_803E708\n"
|
|
"bl _0805E2B0\n"
|
|
".align 2, 0\n"
|
|
"_0805D90C: .4byte gDungeon\n"
|
|
"_0805D910: .4byte 0x000181e8\n"
|
|
"_0805D914:\n"
|
|
"mov r1, r8\n"
|
|
"adds r1, 0x44\n"
|
|
"movs r2, 0\n"
|
|
"movs r0, 0x2\n"
|
|
"strh r0, [r1]\n"
|
|
"mov r0, r8\n"
|
|
"adds r0, 0x48\n"
|
|
"strb r2, [r0]\n"
|
|
"bl _0805E2B0\n"
|
|
"_0805D928:\n"
|
|
"ldr r0, [r4]\n"
|
|
"ldr r3, _0805D9D4\n"
|
|
"adds r0, r3\n"
|
|
"strb r5, [r0]\n"
|
|
"bl sub_8040A78\n"
|
|
"ldr r1, [r4]\n"
|
|
"ldrb r0, [r1, 0x1]\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805D976\n"
|
|
"strb r5, [r1, 0x1]\n"
|
|
"bl GetLeader\n"
|
|
"movs r1, 0x1\n"
|
|
"bl ShouldMonsterRunAwayAndShowEffect\n"
|
|
"lsls r0, 24\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805D976\n"
|
|
"movs r0, 0x1\n"
|
|
"bl sub_8044C10\n"
|
|
"bl sub_805E804\n"
|
|
"bl GetLeader\n"
|
|
"bl sub_80647F0\n"
|
|
"bl ResetRepeatTimers\n"
|
|
"bl ResetUnusedInputStruct\n"
|
|
"bl GetLeaderActionId\n"
|
|
"lsls r0, 16\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805D976\n"
|
|
"bl _0805E2B0\n"
|
|
"_0805D976:\n"
|
|
"movs r0, 0x1\n"
|
|
"movs r1, 0x1\n"
|
|
"movs r2, 0x1\n"
|
|
"bl sub_806A914\n"
|
|
"_0805D980:\n"
|
|
"bl GetLeader\n"
|
|
"mov r10, r0\n"
|
|
"ldr r5, [r0, 0x70]\n"
|
|
"mov r8, r5\n"
|
|
"movs r1, 0x2\n"
|
|
"ldrsh r0, [r5, r1]\n"
|
|
"bl sub_80978C8\n"
|
|
"ldr r2, _0805D9D8\n"
|
|
"ldr r0, [r2]\n"
|
|
"ldr r3, _0805D9DC\n"
|
|
"adds r0, r3\n"
|
|
"ldrb r0, [r0]\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805D9AE\n"
|
|
"bl sub_805E874\n"
|
|
"lsls r0, 24\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805D914\n"
|
|
"bl sub_805E804\n"
|
|
"_0805D9AE:\n"
|
|
"ldr r0, _0805D9E0\n"
|
|
"movs r1, 0\n"
|
|
"strb r1, [r0]\n"
|
|
"ldr r0, _0805D9E4\n"
|
|
"strb r1, [r0]\n"
|
|
"ldr r5, _0805D9D8\n"
|
|
"ldr r0, [r5]\n"
|
|
"movs r1, 0xB8\n"
|
|
"lsls r1, 3\n"
|
|
"adds r0, r1\n"
|
|
"ldr r0, [r0]\n"
|
|
"cmp r0, 0\n"
|
|
"bge _0805D9CA\n"
|
|
"b _0805DAE8\n"
|
|
"_0805D9CA:\n"
|
|
"ldr r0, _0805D9E8\n"
|
|
"ands r6, r0\n"
|
|
"movs r2, 0x1\n"
|
|
"orrs r6, r2\n"
|
|
"b _0805DAEC\n"
|
|
".align 2, 0\n"
|
|
"_0805D9D4: .4byte 0x00000673\n"
|
|
"_0805D9D8: .4byte gDungeon\n"
|
|
"_0805D9DC: .4byte 0x0000066c\n"
|
|
"_0805D9E0: .4byte gUnknown_202F22D\n"
|
|
"_0805D9E4: .4byte gUnknown_202F22C\n"
|
|
"_0805D9E8: .4byte 0xffffff00\n"
|
|
"_0805D9EC:\n"
|
|
"movs r0, 0x1\n"
|
|
"bl sub_8044C50\n"
|
|
"ldr r3, _0805DA00\n"
|
|
"ldr r0, [r3]\n"
|
|
"ldr r5, _0805DA04\n"
|
|
"adds r0, r5\n"
|
|
"strb r4, [r0]\n"
|
|
"b _0805E1AE\n"
|
|
".align 2, 0\n"
|
|
"_0805DA00: .4byte gDungeon\n"
|
|
"_0805DA04: .4byte 0x00000673\n"
|
|
"_0805DA08:\n"
|
|
"ldr r0, _0805DA14\n"
|
|
"ldr r1, [r0]\n"
|
|
"mov r0, r10\n"
|
|
"bl SendMessage\n"
|
|
"b _0805DBDA\n"
|
|
".align 2, 0\n"
|
|
"_0805DA14: .4byte gUnknown_80FD4B0\n"
|
|
"_0805DA18:\n"
|
|
"ldr r0, _0805DA1C\n"
|
|
"b _0805DCBC\n"
|
|
".align 2, 0\n"
|
|
"_0805DA1C: .4byte gUnknown_80F8A28\n"
|
|
"_0805DA20:\n"
|
|
"ldr r0, [sp, 0x1C]\n"
|
|
"movs r1, 0x17\n"
|
|
"bl SetMonsterActionFields\n"
|
|
"b _0805E1AE\n"
|
|
"_0805DA2A:\n"
|
|
"ldr r0, _0805DA38\n"
|
|
"ands r6, r0\n"
|
|
"movs r3, 0x1\n"
|
|
"orrs r6, r3\n"
|
|
"ldr r0, _0805DA3C\n"
|
|
"ands r6, r0\n"
|
|
"b _0805DAD6\n"
|
|
".align 2, 0\n"
|
|
"_0805DA38: .4byte 0xffffff00\n"
|
|
"_0805DA3C: .4byte 0xffff00ff\n"
|
|
"_0805DA40:\n"
|
|
"ldr r5, _0805DA58\n"
|
|
"ldr r0, [r5]\n"
|
|
"movs r2, 0xB8\n"
|
|
"lsls r2, 3\n"
|
|
"adds r0, r2\n"
|
|
"str r1, [r0]\n"
|
|
"ldr r0, _0805DA5C\n"
|
|
"ands r6, r0\n"
|
|
"movs r3, 0x1\n"
|
|
"orrs r6, r3\n"
|
|
"b _0805DAA8\n"
|
|
".align 2, 0\n"
|
|
"_0805DA58: .4byte gDungeon\n"
|
|
"_0805DA5C: .4byte 0xffffff00\n"
|
|
"_0805DA60:\n"
|
|
"ldr r5, _0805DA78\n"
|
|
"ldr r0, [r5]\n"
|
|
"movs r1, 0xB8\n"
|
|
"lsls r1, 3\n"
|
|
"adds r0, r1\n"
|
|
"movs r2, 0x1\n"
|
|
"str r2, [r0]\n"
|
|
"ldr r0, _0805DA7C\n"
|
|
"ands r6, r0\n"
|
|
"orrs r6, r2\n"
|
|
"b _0805DAA8\n"
|
|
".align 2, 0\n"
|
|
"_0805DA78: .4byte gDungeon\n"
|
|
"_0805DA7C: .4byte 0xffffff00\n"
|
|
"_0805DA80:\n"
|
|
"ldr r3, _0805DA98\n"
|
|
"ldr r0, [r3]\n"
|
|
"movs r5, 0xB8\n"
|
|
"lsls r5, 3\n"
|
|
"adds r0, r5\n"
|
|
"str r2, [r0]\n"
|
|
"ldr r0, _0805DA9C\n"
|
|
"ands r6, r0\n"
|
|
"movs r0, 0x1\n"
|
|
"orrs r6, r0\n"
|
|
"b _0805DAA8\n"
|
|
".align 2, 0\n"
|
|
"_0805DA98: .4byte gDungeon\n"
|
|
"_0805DA9C: .4byte 0xffffff00\n"
|
|
"_0805DAA0:\n"
|
|
"ldr r0, _0805DAB8\n"
|
|
"ands r6, r0\n"
|
|
"movs r1, 0x1\n"
|
|
"orrs r6, r1\n"
|
|
"_0805DAA8:\n"
|
|
"ldr r0, _0805DABC\n"
|
|
"ands r6, r0\n"
|
|
"ldr r0, _0805DAC0\n"
|
|
"ands r6, r0\n"
|
|
"movs r0, 0x80\n"
|
|
"lsls r0, 9\n"
|
|
"orrs r6, r0\n"
|
|
"b _0805E1AE\n"
|
|
".align 2, 0\n"
|
|
"_0805DAB8: .4byte 0xffffff00\n"
|
|
"_0805DABC: .4byte 0xffff00ff\n"
|
|
"_0805DAC0: .4byte 0xff00ffff\n"
|
|
"_0805DAC4:\n"
|
|
"ldr r0, _0805DADC\n"
|
|
"ands r6, r0\n"
|
|
"movs r2, 0x1\n"
|
|
"orrs r6, r2\n"
|
|
"ldr r0, _0805DAE0\n"
|
|
"ands r6, r0\n"
|
|
"movs r0, 0x80\n"
|
|
"lsls r0, 1\n"
|
|
"orrs r6, r0\n"
|
|
"_0805DAD6:\n"
|
|
"ldr r0, _0805DAE4\n"
|
|
"ands r6, r0\n"
|
|
"b _0805E1AE\n"
|
|
".align 2, 0\n"
|
|
"_0805DADC: .4byte 0xffffff00\n"
|
|
"_0805DAE0: .4byte 0xffff00ff\n"
|
|
"_0805DAE4: .4byte 0xff00ffff\n"
|
|
"_0805DAE8:\n"
|
|
"ldr r0, _0805DB3C\n"
|
|
"ands r6, r0\n"
|
|
"_0805DAEC:\n"
|
|
"ldr r0, _0805DB40\n"
|
|
"ands r6, r0\n"
|
|
"ldr r0, _0805DB44\n"
|
|
"ands r6, r0\n"
|
|
"movs r3, 0\n"
|
|
"str r3, [sp, 0x8]\n"
|
|
"movs r0, 0\n"
|
|
"bl sub_8044C50\n"
|
|
"ldr r0, _0805DB48\n"
|
|
"mov r5, sp\n"
|
|
"ldrb r5, [r5, 0x8]\n"
|
|
"strb r5, [r0]\n"
|
|
"ldr r0, _0805DB4C\n"
|
|
"mov r1, sp\n"
|
|
"ldrb r1, [r1, 0x8]\n"
|
|
"strb r1, [r0]\n"
|
|
"lsls r0, r6, 24\n"
|
|
"mov r2, r8\n"
|
|
"adds r2, 0x44\n"
|
|
"str r2, [sp, 0x1C]\n"
|
|
"str r0, [sp, 0x14]\n"
|
|
"ldr r3, [sp, 0x10]\n"
|
|
"adds r3, 0x32\n"
|
|
"str r3, [sp, 0x18]\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DB24\n"
|
|
"b _0805E1AE\n"
|
|
"_0805DB24:\n"
|
|
"ldr r0, _0805DB50\n"
|
|
"ldrh r1, [r0]\n"
|
|
"adds r1, 0x1\n"
|
|
"strh r1, [r0]\n"
|
|
"ldr r5, [sp, 0x18]\n"
|
|
"ldrb r0, [r5]\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DB54\n"
|
|
"movs r0, 0\n"
|
|
"str r0, [sp, 0x8]\n"
|
|
"b _0805DB5A\n"
|
|
".align 2, 0\n"
|
|
"_0805DB3C: .4byte 0xffffff00\n"
|
|
"_0805DB40: .4byte 0xffff00ff\n"
|
|
"_0805DB44: .4byte 0xff00ffff\n"
|
|
"_0805DB48: .4byte gUnknown_202F230\n"
|
|
"_0805DB4C: .4byte gUnknown_202F231\n"
|
|
"_0805DB50: .4byte gUnknown_202F22E\n"
|
|
"_0805DB54:\n"
|
|
"ldr r1, [sp, 0x8]\n"
|
|
"adds r1, 0x1\n"
|
|
"str r1, [sp, 0x8]\n"
|
|
"_0805DB5A:\n"
|
|
"ldr r2, [sp, 0xC]\n"
|
|
"cmp r2, 0\n"
|
|
"beq _0805DB6E\n"
|
|
"subs r2, 0x1\n"
|
|
"str r2, [sp, 0xC]\n"
|
|
"cmp r2, 0\n"
|
|
"bne _0805DB6E\n"
|
|
"movs r0, 0\n"
|
|
"bl sub_8075680\n"
|
|
"_0805DB6E:\n"
|
|
"mov r0, r10\n"
|
|
"bl sub_805E2C4\n"
|
|
"movs r7, 0\n"
|
|
"movs r1, 0\n"
|
|
"add r0, sp, 0x4\n"
|
|
"_0805DB7A:\n"
|
|
"strb r1, [r0]\n"
|
|
"subs r0, 0x1\n"
|
|
"cmp r0, sp\n"
|
|
"bge _0805DB7A\n"
|
|
"ldr r0, _0805DBEC\n"
|
|
"ldrh r1, [r0]\n"
|
|
"movs r4, 0x1\n"
|
|
"movs r0, 0x1\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DBAA\n"
|
|
"movs r0, 0x2\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DBAA\n"
|
|
"movs r0, 0x9E\n"
|
|
"lsls r0, 1\n"
|
|
"add r0, r8\n"
|
|
"ldr r0, [r0]\n"
|
|
"bl RoundUpFixedPoint\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DBAA\n"
|
|
"b _0805D9EC\n"
|
|
"_0805DBAA:\n"
|
|
"movs r3, 0\n"
|
|
"mov r9, r3\n"
|
|
"ldr r4, _0805DBEC\n"
|
|
"ldrh r1, [r4, 0x2]\n"
|
|
"movs r5, 0x1\n"
|
|
"movs r0, 0x1\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805DBBE\n"
|
|
"b _0805DD02\n"
|
|
"_0805DBBE:\n"
|
|
"ldrh r1, [r4]\n"
|
|
"movs r0, 0x2\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DBF8\n"
|
|
"movs r0, 0x9E\n"
|
|
"lsls r0, 1\n"
|
|
"add r0, r8\n"
|
|
"ldr r0, [r0]\n"
|
|
"bl RoundUpFixedPoint\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805DBDA\n"
|
|
"b _0805DD02\n"
|
|
"_0805DBDA:\n"
|
|
"movs r0, 0x1\n"
|
|
"bl sub_8044C50\n"
|
|
"ldr r1, _0805DBF0\n"
|
|
"ldr r0, [r1]\n"
|
|
"ldr r2, _0805DBF4\n"
|
|
"adds r0, r2\n"
|
|
"strb r5, [r0]\n"
|
|
"b _0805E1AE\n"
|
|
".align 2, 0\n"
|
|
"_0805DBEC: .4byte gRealInputs\n"
|
|
"_0805DBF0: .4byte gDungeon\n"
|
|
"_0805DBF4: .4byte 0x00000673\n"
|
|
"_0805DBF8:\n"
|
|
"mov r0, r10\n"
|
|
"movs r1, 0x1\n"
|
|
"bl ShouldMonsterRunAwayAndShowEffect\n"
|
|
"lsls r0, 24\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DC08\n"
|
|
"b _0805DA08\n"
|
|
"_0805DC08:\n"
|
|
"ldrh r0, [r4]\n"
|
|
"movs r3, 0x80\n"
|
|
"lsls r3, 2\n"
|
|
"adds r1, r3, 0\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DCE8\n"
|
|
"movs r4, 0\n"
|
|
"movs r2, 0x8C\n"
|
|
"lsls r2, 1\n"
|
|
"add r2, r8\n"
|
|
"movs r3, 0x8\n"
|
|
"_0805DC20:\n"
|
|
"ldrb r1, [r2]\n"
|
|
"movs r0, 0x1\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DC32\n"
|
|
"adds r0, r3, 0\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805DC3A\n"
|
|
"_0805DC32:\n"
|
|
"adds r2, 0x8\n"
|
|
"adds r4, 0x1\n"
|
|
"cmp r4, 0x3\n"
|
|
"ble _0805DC20\n"
|
|
"_0805DC3A:\n"
|
|
"cmp r4, 0x4\n"
|
|
"bne _0805DC40\n"
|
|
"b _0805DA18\n"
|
|
"_0805DC40:\n"
|
|
"movs r3, 0\n"
|
|
"movs r5, 0x8C\n"
|
|
"lsls r5, 1\n"
|
|
"movs r7, 0x1\n"
|
|
"mov r2, r8\n"
|
|
"_0805DC4A:\n"
|
|
"lsls r0, r3, 3\n"
|
|
"add r0, r8\n"
|
|
"adds r0, r5\n"
|
|
"ldrb r1, [r0]\n"
|
|
"adds r0, r7, 0\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DC66\n"
|
|
"movs r1, 0x8E\n"
|
|
"lsls r1, 1\n"
|
|
"adds r0, r2, r1\n"
|
|
"ldrb r0, [r0]\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805DC6E\n"
|
|
"_0805DC66:\n"
|
|
"adds r2, 0x8\n"
|
|
"adds r3, 0x1\n"
|
|
"cmp r3, 0x3\n"
|
|
"ble _0805DC4A\n"
|
|
"_0805DC6E:\n"
|
|
"cmp r3, 0x4\n"
|
|
"bne _0805DC74\n"
|
|
"b _0805DA20\n"
|
|
"_0805DC74:\n"
|
|
"movs r7, 0\n"
|
|
"adds r3, r4, 0\n"
|
|
"cmp r4, 0x3\n"
|
|
"bgt _0805DCB6\n"
|
|
"lsls r0, r4, 3\n"
|
|
"adds r2, r0, 0\n"
|
|
"add r2, r8\n"
|
|
"mov r12, r2\n"
|
|
"movs r5, 0x8E\n"
|
|
"lsls r5, 1\n"
|
|
"adds r0, r5\n"
|
|
"mov r1, r8\n"
|
|
"adds r2, r0, r1\n"
|
|
"movs r5, 0x2\n"
|
|
"_0805DC90:\n"
|
|
"ldrb r0, [r2]\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805DCCC\n"
|
|
"movs r0, 0x8\n"
|
|
"add r12, r0\n"
|
|
"adds r2, 0x8\n"
|
|
"adds r3, 0x1\n"
|
|
"cmp r3, 0x3\n"
|
|
"bgt _0805DCB6\n"
|
|
"cmp r3, r4\n"
|
|
"beq _0805DC90\n"
|
|
"movs r0, 0x8C\n"
|
|
"lsls r0, 1\n"
|
|
"add r0, r12\n"
|
|
"ldrb r1, [r0]\n"
|
|
"adds r0, r5, 0\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805DC90\n"
|
|
"_0805DCB6:\n"
|
|
"cmp r7, 0\n"
|
|
"bne _0805DCCC\n"
|
|
"ldr r0, _0805DCC8\n"
|
|
"_0805DCBC:\n"
|
|
"ldr r1, [r0]\n"
|
|
"mov r0, r10\n"
|
|
"bl SendMessage\n"
|
|
"b _0805E1AE\n"
|
|
".align 2, 0\n"
|
|
"_0805DCC8: .4byte gUnknown_80F8A4C\n"
|
|
"_0805DCCC:\n"
|
|
"ldr r0, [sp, 0x1C]\n"
|
|
"movs r1, 0x14\n"
|
|
"bl SetMonsterActionFields\n"
|
|
"mov r0, r10\n"
|
|
"bl GetTeamMemberEntityIndex\n"
|
|
"mov r1, r8\n"
|
|
"adds r1, 0x48\n"
|
|
"strb r0, [r1]\n"
|
|
"mov r0, r8\n"
|
|
"adds r0, 0x50\n"
|
|
"strb r4, [r0]\n"
|
|
"b _0805E1AE\n"
|
|
"_0805DCE8:\n"
|
|
"mov r0, r10\n"
|
|
"mov r1, r8\n"
|
|
"bl sub_805EF60\n"
|
|
"lsls r0, 24\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DCF8\n"
|
|
"b _0805E1AE\n"
|
|
"_0805DCF8:\n"
|
|
"ldr r0, [sp, 0x1C]\n"
|
|
"movs r1, 0x32\n"
|
|
"bl SetMonsterActionFields\n"
|
|
"b _0805E1AE\n"
|
|
"_0805DD02:\n"
|
|
"ldr r3, _0805DDC8\n"
|
|
"ldrh r1, [r3, 0x6]\n"
|
|
"movs r2, 0x2\n"
|
|
"adds r0, r2, 0\n"
|
|
"ands r0, r1\n"
|
|
"lsls r0, 16\n"
|
|
"lsrs r1, r0, 16\n"
|
|
"cmp r1, 0\n"
|
|
"beq _0805DD16\n"
|
|
"b _0805DA2A\n"
|
|
"_0805DD16:\n"
|
|
"mov r0, sp\n"
|
|
"ldrb r0, [r0, 0x1]\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DD20\n"
|
|
"b _0805DA40\n"
|
|
"_0805DD20:\n"
|
|
"mov r0, sp\n"
|
|
"ldrb r0, [r0, 0x2]\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DD2A\n"
|
|
"b _0805DA60\n"
|
|
"_0805DD2A:\n"
|
|
"mov r0, sp\n"
|
|
"ldrb r0, [r0, 0x3]\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DD34\n"
|
|
"b _0805DA80\n"
|
|
"_0805DD34:\n"
|
|
"mov r0, sp\n"
|
|
"ldrb r0, [r0, 0x4]\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DD3E\n"
|
|
"b _0805DAA0\n"
|
|
"_0805DD3E:\n"
|
|
"ldr r0, _0805DDCC\n"
|
|
"ldr r1, [sp, 0x8]\n"
|
|
"cmp r1, r0\n"
|
|
"ble _0805DD48\n"
|
|
"b _0805DAC4\n"
|
|
"_0805DD48:\n"
|
|
"ldr r0, _0805DDD0\n"
|
|
"ldr r0, [r0]\n"
|
|
"ldrb r4, [r0, 0x9]\n"
|
|
"cmp r4, 0\n"
|
|
"bne _0805DD7E\n"
|
|
"ldrh r1, [r3, 0x2]\n"
|
|
"adds r0, r2, 0\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805DD66\n"
|
|
"cmp r7, 0\n"
|
|
"bne _0805DD7E\n"
|
|
"movs r2, 0\n"
|
|
"cmp r2, 0\n"
|
|
"beq _0805DD7E\n"
|
|
"_0805DD66:\n"
|
|
"ldr r3, [sp, 0x18]\n"
|
|
"ldrb r0, [r3]\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DD7E\n"
|
|
"bl sub_804AA60\n"
|
|
"ldr r0, _0805DDD4\n"
|
|
"strb r4, [r0]\n"
|
|
"bl ResetRepeatTimers\n"
|
|
"bl ResetUnusedInputStruct\n"
|
|
"_0805DD7E:\n"
|
|
"ldr r2, _0805DDC8\n"
|
|
"ldrh r0, [r2]\n"
|
|
"movs r5, 0x80\n"
|
|
"lsls r5, 2\n"
|
|
"adds r1, r5, 0\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DDA4\n"
|
|
"ldrh r1, [r2, 0x2]\n"
|
|
"movs r0, 0x2\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DDA4\n"
|
|
"bl sub_80532B4\n"
|
|
"bl ResetRepeatTimers\n"
|
|
"bl ResetUnusedInputStruct\n"
|
|
"_0805DDA4:\n"
|
|
"movs r4, 0\n"
|
|
"ldr r0, _0805DDC8\n"
|
|
"ldrh r0, [r0]\n"
|
|
"movs r2, 0x80\n"
|
|
"lsls r2, 1\n"
|
|
"adds r1, r2, 0\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DDFA\n"
|
|
"ldr r1, _0805DDD8\n"
|
|
"ldrb r0, [r1]\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805DDC2\n"
|
|
"ldr r0, _0805DDDC\n"
|
|
"strh r4, [r0]\n"
|
|
"_0805DDC2:\n"
|
|
"movs r3, 0x1\n"
|
|
"strb r3, [r1]\n"
|
|
"b _0805DDFE\n"
|
|
".align 2, 0\n"
|
|
"_0805DDC8: .4byte gRealInputs\n"
|
|
"_0805DDCC: .4byte 0x00000707\n"
|
|
"_0805DDD0: .4byte gGameOptionsRef\n"
|
|
"_0805DDD4: .4byte gUnknown_202F22D\n"
|
|
"_0805DDD8: .4byte gUnknown_202F22C\n"
|
|
"_0805DDDC: .4byte gUnknown_202F22E\n"
|
|
"_0805DDE0:\n"
|
|
"movs r0, 0xB\n"
|
|
"bl sub_8044C50\n"
|
|
"adds r2, r4, 0x1\n"
|
|
"mov r0, r8\n"
|
|
"adds r0, 0x48\n"
|
|
"movs r1, 0\n"
|
|
"strb r2, [r0]\n"
|
|
"adds r0, 0x4\n"
|
|
"strh r1, [r0]\n"
|
|
"adds r0, 0x2\n"
|
|
"strh r1, [r0]\n"
|
|
"b _0805DE92\n"
|
|
"_0805DDFA:\n"
|
|
"ldr r0, _0805DEF8\n"
|
|
"strb r4, [r0]\n"
|
|
"_0805DDFE:\n"
|
|
"movs r3, 0\n"
|
|
"ldr r0, _0805DEFC\n"
|
|
"ldr r0, [r0]\n"
|
|
"ldrb r0, [r0, 0x9]\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805DE2C\n"
|
|
"ldr r2, _0805DF00\n"
|
|
"ldrh r0, [r2, 0x6]\n"
|
|
"movs r5, 0x80\n"
|
|
"lsls r5, 1\n"
|
|
"adds r1, r5, 0\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805DE2A\n"
|
|
"mov r0, r9\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805DE2A\n"
|
|
"ldrh r1, [r2, 0x2]\n"
|
|
"movs r0, 0x8\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DE2C\n"
|
|
"_0805DE2A:\n"
|
|
"movs r3, 0x1\n"
|
|
"_0805DE2C:\n"
|
|
"cmp r3, 0\n"
|
|
"beq _0805DE54\n"
|
|
"mov r0, r10\n"
|
|
"bl sub_805E738\n"
|
|
"ldr r0, _0805DF04\n"
|
|
"movs r1, 0x1\n"
|
|
"strb r1, [r0]\n"
|
|
"mov r0, r8\n"
|
|
"adds r0, 0x46\n"
|
|
"ldrb r0, [r0]\n"
|
|
"ldr r1, [sp, 0x10]\n"
|
|
"adds r1, 0x33\n"
|
|
"strb r0, [r1]\n"
|
|
"ldr r1, [sp, 0x10]\n"
|
|
"adds r1, 0x34\n"
|
|
"movs r0, 0xFF\n"
|
|
"strb r0, [r1]\n"
|
|
"bl ResetRepeatTimers\n"
|
|
"_0805DE54:\n"
|
|
"ldr r0, _0805DF00\n"
|
|
"ldr r1, [r0]\n"
|
|
"ldr r0, _0805DF08\n"
|
|
"ands r1, r0\n"
|
|
"cmp r1, r0\n"
|
|
"bne _0805DE62\n"
|
|
"movs r4, 0x1\n"
|
|
"_0805DE62:\n"
|
|
"mov r0, sp\n"
|
|
"ldrb r0, [r0]\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DE6C\n"
|
|
"movs r4, 0x1\n"
|
|
"_0805DE6C:\n"
|
|
"cmp r4, 0\n"
|
|
"beq _0805DE9C\n"
|
|
"movs r4, 0\n"
|
|
"ldr r0, _0805DF0C\n"
|
|
"ldr r2, [r0]\n"
|
|
"movs r3, 0x10\n"
|
|
"_0805DE78:\n"
|
|
"ldrb r1, [r2]\n"
|
|
"movs r0, 0x1\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DE8A\n"
|
|
"adds r0, r3, 0\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805DDE0\n"
|
|
"_0805DE8A:\n"
|
|
"adds r2, 0x4\n"
|
|
"adds r4, 0x1\n"
|
|
"cmp r4, 0x13\n"
|
|
"ble _0805DE78\n"
|
|
"_0805DE92:\n"
|
|
"ldr r2, [sp, 0x1C]\n"
|
|
"ldrh r0, [r2]\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DE9C\n"
|
|
"b _0805E1AE\n"
|
|
"_0805DE9C:\n"
|
|
"ldr r5, _0805DF10\n"
|
|
"ldr r3, [r5]\n"
|
|
"ldr r1, _0805DF14\n"
|
|
"adds r0, r3, r1\n"
|
|
"ldrb r0, [r0]\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805DF82\n"
|
|
"ldr r0, _0805DEFC\n"
|
|
"ldr r2, [r0]\n"
|
|
"ldrb r0, [r2, 0x4]\n"
|
|
"cmp r0, 0x6\n"
|
|
"beq _0805DF82\n"
|
|
"ldr r0, _0805DF00\n"
|
|
"ldrh r1, [r0, 0x2]\n"
|
|
"movs r0, 0x4\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DF82\n"
|
|
"ldrb r4, [r2, 0x4]\n"
|
|
"ldr r0, _0805DF18\n"
|
|
"movs r2, 0x1\n"
|
|
"strb r2, [r0]\n"
|
|
"ldr r5, _0805DF1C\n"
|
|
"adds r0, r3, r5\n"
|
|
"strb r2, [r0]\n"
|
|
"bl sub_8094C48\n"
|
|
"lsls r0, 24\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805DEDC\n"
|
|
"bl sub_8094C88\n"
|
|
"_0805DEDC:\n"
|
|
"movs r0, 0x1\n"
|
|
"bl sub_8052210\n"
|
|
"bl sub_8040A84\n"
|
|
"movs r0, 0x1E\n"
|
|
"bl SetBGOBJEnableFlags\n"
|
|
"movs r0, 0xA\n"
|
|
"movs r1, 0x2F\n"
|
|
"bl sub_803E708\n"
|
|
"b _0805DF3A\n"
|
|
".align 2, 0\n"
|
|
"_0805DEF8: .4byte gUnknown_202F22C\n"
|
|
"_0805DEFC: .4byte gGameOptionsRef\n"
|
|
"_0805DF00: .4byte gRealInputs\n"
|
|
"_0805DF04: .4byte gUnknown_202F22D\n"
|
|
"_0805DF08: .4byte 0x01000200\n"
|
|
"_0805DF0C: .4byte gTeamInventoryRef\n"
|
|
"_0805DF10: .4byte gDungeon\n"
|
|
"_0805DF14: .4byte 0x0001820a\n"
|
|
"_0805DF18: .4byte gUnknown_202EE00\n"
|
|
"_0805DF1C: .4byte 0x00018214\n"
|
|
"_0805DF20:\n"
|
|
"movs r0, 0x1\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DF3A\n"
|
|
"ldr r2, _0805DFA0\n"
|
|
"movs r1, 0\n"
|
|
"ldrb r0, [r2]\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805DF34\n"
|
|
"movs r1, 0x1\n"
|
|
"_0805DF34:\n"
|
|
"strb r1, [r2]\n"
|
|
"bl sub_8040A84\n"
|
|
"_0805DF3A:\n"
|
|
"movs r0, 0x2F\n"
|
|
"bl sub_803E46C\n"
|
|
"ldr r0, _0805DFA4\n"
|
|
"ldrh r1, [r0, 0x2]\n"
|
|
"movs r0, 0x4\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805DF54\n"
|
|
"movs r0, 0x2\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DF20\n"
|
|
"_0805DF54:\n"
|
|
"ldr r1, _0805DFA8\n"
|
|
"ldr r0, [r1]\n"
|
|
"ldr r2, _0805DFAC\n"
|
|
"adds r0, r2\n"
|
|
"movs r1, 0\n"
|
|
"strb r1, [r0]\n"
|
|
"ldr r0, _0805DFB0\n"
|
|
"ldr r0, [r0]\n"
|
|
"strb r4, [r0, 0x4]\n"
|
|
"ldr r0, _0805DFA0\n"
|
|
"movs r3, 0x1\n"
|
|
"strb r3, [r0]\n"
|
|
"bl sub_8040A84\n"
|
|
"movs r0, 0\n"
|
|
"bl SetBGOBJEnableFlags\n"
|
|
"movs r0, 0x2F\n"
|
|
"bl sub_803E46C\n"
|
|
"movs r0, 0x2F\n"
|
|
"bl sub_803E46C\n"
|
|
"_0805DF82:\n"
|
|
"ldr r5, _0805DFA8\n"
|
|
"ldr r0, [r5]\n"
|
|
"ldr r1, _0805DFB4\n"
|
|
"adds r0, r1\n"
|
|
"ldrb r0, [r0]\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DFBC\n"
|
|
"ldr r0, _0805DFB8\n"
|
|
"ldrb r0, [r0]\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805DFBC\n"
|
|
"ldr r0, _0805DFA4\n"
|
|
"ldrh r2, [r0, 0x2]\n"
|
|
"adds r1, r2, 0\n"
|
|
"b _0805DFCC\n"
|
|
".align 2, 0\n"
|
|
"_0805DFA0: .4byte gUnknown_202EE00\n"
|
|
"_0805DFA4: .4byte gRealInputs\n"
|
|
"_0805DFA8: .4byte gDungeon\n"
|
|
"_0805DFAC: .4byte 0x00018214\n"
|
|
"_0805DFB0: .4byte gGameOptionsRef\n"
|
|
"_0805DFB4: .4byte 0x0000066d\n"
|
|
"_0805DFB8: .4byte gUnknown_202F22C\n"
|
|
"_0805DFBC:\n"
|
|
"ldr r3, _0805E05C\n"
|
|
"ldrh r1, [r3]\n"
|
|
"ldr r2, [sp, 0x18]\n"
|
|
"ldrb r0, [r2]\n"
|
|
"adds r2, r1, 0\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805DFCC\n"
|
|
"ldrh r2, [r3, 0x2]\n"
|
|
"_0805DFCC:\n"
|
|
"movs r0, 0xF0\n"
|
|
"ands r1, r0\n"
|
|
"ands r2, r0\n"
|
|
"movs r5, 0x1\n"
|
|
"negs r5, r5\n"
|
|
"cmp r1, 0x50\n"
|
|
"bne _0805DFDC\n"
|
|
"movs r5, 0x3\n"
|
|
"_0805DFDC:\n"
|
|
"cmp r1, 0x60\n"
|
|
"bne _0805DFE2\n"
|
|
"movs r5, 0x5\n"
|
|
"_0805DFE2:\n"
|
|
"cmp r1, 0x90\n"
|
|
"bne _0805DFE8\n"
|
|
"movs r5, 0x1\n"
|
|
"_0805DFE8:\n"
|
|
"cmp r1, 0xA0\n"
|
|
"bne _0805DFEE\n"
|
|
"movs r5, 0x7\n"
|
|
"_0805DFEE:\n"
|
|
"cmp r2, 0x40\n"
|
|
"bne _0805DFF4\n"
|
|
"movs r5, 0x4\n"
|
|
"_0805DFF4:\n"
|
|
"cmp r2, 0x80\n"
|
|
"bne _0805DFFA\n"
|
|
"movs r5, 0\n"
|
|
"_0805DFFA:\n"
|
|
"cmp r2, 0x10\n"
|
|
"bne _0805E000\n"
|
|
"movs r5, 0x2\n"
|
|
"_0805E000:\n"
|
|
"cmp r2, 0x20\n"
|
|
"bne _0805E006\n"
|
|
"movs r5, 0x6\n"
|
|
"_0805E006:\n"
|
|
"cmp r5, 0\n"
|
|
"bge _0805E00C\n"
|
|
"b _0805E1A0\n"
|
|
"_0805E00C:\n"
|
|
"ldr r0, _0805E060\n"
|
|
"ldrb r0, [r0]\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805E020\n"
|
|
"adds r0, r5, 0\n"
|
|
"movs r3, 0x1\n"
|
|
"ands r0, r3\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805E020\n"
|
|
"b _0805E1A0\n"
|
|
"_0805E020:\n"
|
|
"mov r2, r8\n"
|
|
"adds r2, 0x46\n"
|
|
"ldrb r1, [r2]\n"
|
|
"eors r1, r5\n"
|
|
"negs r0, r1\n"
|
|
"orrs r0, r1\n"
|
|
"lsrs r7, r0, 31\n"
|
|
"movs r1, 0x7\n"
|
|
"adds r0, r5, 0\n"
|
|
"ands r0, r1\n"
|
|
"strb r0, [r2]\n"
|
|
"ldr r0, _0805E064\n"
|
|
"ldrb r0, [r0]\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805E068\n"
|
|
"ldr r0, [sp, 0x10]\n"
|
|
"adds r0, 0x33\n"
|
|
"strb r5, [r0]\n"
|
|
"mov r0, r10\n"
|
|
"bl sub_806CEBC\n"
|
|
"adds r1, r0, 0\n"
|
|
"lsls r1, 24\n"
|
|
"lsrs r1, 24\n"
|
|
"mov r0, r10\n"
|
|
"adds r2, r5, 0\n"
|
|
"bl sub_806CDD4\n"
|
|
"b _0805E1A0\n"
|
|
".align 2, 0\n"
|
|
"_0805E05C: .4byte gRealInputs\n"
|
|
"_0805E060: .4byte gUnknown_202F22C\n"
|
|
"_0805E064: .4byte gUnknown_202F22D\n"
|
|
"_0805E068:\n"
|
|
"movs r4, 0\n"
|
|
"movs r3, 0\n"
|
|
"mov r0, r10\n"
|
|
"movs r1, 0x1\n"
|
|
"str r3, [sp, 0x20]\n"
|
|
"bl sub_805EC4C\n"
|
|
"lsls r0, 24\n"
|
|
"ldr r3, [sp, 0x20]\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805E080\n"
|
|
"b _0805E1AE\n"
|
|
"_0805E080:\n"
|
|
"mov r0, r8\n"
|
|
"adds r0, 0xB0\n"
|
|
"ldrb r0, [r0]\n"
|
|
"cmp r0, 0x2\n"
|
|
"bne _0805E094\n"
|
|
"ldr r0, _0805E090\n"
|
|
"b _0805E0BE\n"
|
|
".align 2, 0\n"
|
|
"_0805E090: .4byte gUnknown_80F8A84\n"
|
|
"_0805E094:\n"
|
|
"cmp r0, 0x7\n"
|
|
"bne _0805E0A0\n"
|
|
"ldr r0, _0805E09C\n"
|
|
"b _0805E0BE\n"
|
|
".align 2, 0\n"
|
|
"_0805E09C: .4byte gUnknown_80F8A6C\n"
|
|
"_0805E0A0:\n"
|
|
"cmp r0, 0x5\n"
|
|
"bne _0805E0AC\n"
|
|
"ldr r0, _0805E0A8\n"
|
|
"b _0805E0BE\n"
|
|
".align 2, 0\n"
|
|
"_0805E0A8: .4byte gUnknown_80F8AB0\n"
|
|
"_0805E0AC:\n"
|
|
"cmp r0, 0x3\n"
|
|
"bne _0805E0B8\n"
|
|
"ldr r0, _0805E0B4\n"
|
|
"b _0805E0BE\n"
|
|
".align 2, 0\n"
|
|
"_0805E0B4: .4byte gUnknown_80F8ADC\n"
|
|
"_0805E0B8:\n"
|
|
"cmp r0, 0x4\n"
|
|
"bne _0805E0C2\n"
|
|
"ldr r0, _0805E128\n"
|
|
"_0805E0BE:\n"
|
|
"ldr r3, [r0]\n"
|
|
"movs r4, 0x1\n"
|
|
"_0805E0C2:\n"
|
|
"mov r0, r10\n"
|
|
"adds r1, r5, 0\n"
|
|
"str r3, [sp, 0x20]\n"
|
|
"bl CanMoveInDirection\n"
|
|
"lsls r0, 24\n"
|
|
"ldr r3, [sp, 0x20]\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805E0D8\n"
|
|
"movs r0, 0x2\n"
|
|
"orrs r4, r0\n"
|
|
"_0805E0D8:\n"
|
|
"cmp r7, 0\n"
|
|
"beq _0805E0F4\n"
|
|
"mov r0, r10\n"
|
|
"str r3, [sp, 0x20]\n"
|
|
"bl sub_806CEBC\n"
|
|
"adds r1, r0, 0\n"
|
|
"lsls r1, 24\n"
|
|
"lsrs r1, 24\n"
|
|
"mov r0, r10\n"
|
|
"adds r2, r5, 0\n"
|
|
"bl sub_806CDD4\n"
|
|
"ldr r3, [sp, 0x20]\n"
|
|
"_0805E0F4:\n"
|
|
"movs r7, 0x2\n"
|
|
"adds r0, r4, 0\n"
|
|
"ands r0, r7\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805E192\n"
|
|
"movs r5, 0x1\n"
|
|
"mov r9, r5\n"
|
|
"ands r5, r4\n"
|
|
"cmp r5, 0\n"
|
|
"beq _0805E134\n"
|
|
"cmp r3, 0\n"
|
|
"beq _0805E114\n"
|
|
"mov r0, r10\n"
|
|
"adds r1, r3, 0\n"
|
|
"bl SendMessage\n"
|
|
"_0805E114:\n"
|
|
"movs r0, 0x1\n"
|
|
"bl sub_8044C50\n"
|
|
"ldr r1, _0805E12C\n"
|
|
"ldr r0, [r1]\n"
|
|
"ldr r2, _0805E130\n"
|
|
"adds r0, r2\n"
|
|
"mov r3, r9\n"
|
|
"strb r3, [r0]\n"
|
|
"b _0805E1AE\n"
|
|
".align 2, 0\n"
|
|
"_0805E128: .4byte gUnknown_80F8B0C\n"
|
|
"_0805E12C: .4byte gDungeon\n"
|
|
"_0805E130: .4byte 0x00000673\n"
|
|
"_0805E134:\n"
|
|
"movs r0, 0x2\n"
|
|
"bl sub_8044C50\n"
|
|
"ldr r0, _0805E17C\n"
|
|
"ldrh r1, [r0]\n"
|
|
"adds r0, r7, 0\n"
|
|
"ands r0, r1\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805E14C\n"
|
|
"movs r0, 0\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805E188\n"
|
|
"_0805E14C:\n"
|
|
"movs r0, 0x9E\n"
|
|
"lsls r0, 1\n"
|
|
"add r0, r8\n"
|
|
"ldr r0, [r0]\n"
|
|
"bl RoundUpFixedPoint\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805E188\n"
|
|
"mov r1, r10\n"
|
|
"ldr r0, [r1, 0x70]\n"
|
|
"adds r0, 0xBC\n"
|
|
"ldrb r0, [r0]\n"
|
|
"cmp r0, 0x2\n"
|
|
"beq _0805E174\n"
|
|
"ldr r2, _0805E180\n"
|
|
"ldr r0, [r2]\n"
|
|
"ldr r3, _0805E184\n"
|
|
"adds r0, r3\n"
|
|
"mov r1, r9\n"
|
|
"strb r1, [r0]\n"
|
|
"_0805E174:\n"
|
|
"mov r0, r8\n"
|
|
"adds r0, 0x48\n"
|
|
"strb r5, [r0]\n"
|
|
"b _0805E1AE\n"
|
|
".align 2, 0\n"
|
|
"_0805E17C: .4byte gRealInputs\n"
|
|
"_0805E180: .4byte gDungeon\n"
|
|
"_0805E184: .4byte 0x0000066c\n"
|
|
"_0805E188:\n"
|
|
"mov r0, r8\n"
|
|
"adds r0, 0x48\n"
|
|
"movs r2, 0x1\n"
|
|
"strb r2, [r0]\n"
|
|
"b _0805E1AE\n"
|
|
"_0805E192:\n"
|
|
"movs r3, 0x1\n"
|
|
"ands r4, r3\n"
|
|
"cmp r4, 0\n"
|
|
"beq _0805E1A0\n"
|
|
"movs r0, 0x23\n"
|
|
"bl sub_803E724\n"
|
|
"_0805E1A0:\n"
|
|
"movs r0, 0xF\n"
|
|
"bl sub_803E46C\n"
|
|
"ldr r5, [sp, 0x14]\n"
|
|
"cmp r5, 0\n"
|
|
"bne _0805E1AE\n"
|
|
"b _0805DB24\n"
|
|
"_0805E1AE:\n"
|
|
"ldr r1, [sp, 0x18]\n"
|
|
"ldrb r0, [r1]\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805E1BA\n"
|
|
"bl sub_804AA60\n"
|
|
"_0805E1BA:\n"
|
|
"ldr r4, [sp, 0x1C]\n"
|
|
"ldrh r0, [r4]\n"
|
|
"cmp r0, 0x2D\n"
|
|
"beq _0805E1C6\n"
|
|
"cmp r0, 0x13\n"
|
|
"bne _0805E1E0\n"
|
|
"_0805E1C6:\n"
|
|
"mov r0, r10\n"
|
|
"bl HandleTalkFieldAction\n"
|
|
"bl sub_8044B28\n"
|
|
"lsls r0, 24\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805E2B0\n"
|
|
"movs r0, 0\n"
|
|
"bl sub_8044C50\n"
|
|
"bl _0805D980\n"
|
|
"_0805E1E0:\n"
|
|
"lsls r0, r6, 24\n"
|
|
"lsrs r1, r0, 24\n"
|
|
"cmp r1, 0\n"
|
|
"bne _0805E222\n"
|
|
"ldr r2, _0805E210\n"
|
|
"ldr r0, [r2]\n"
|
|
"ldr r3, _0805E214\n"
|
|
"adds r0, r3\n"
|
|
"strb r1, [r0]\n"
|
|
"ldrh r0, [r4]\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805E218\n"
|
|
"mov r0, r10\n"
|
|
"movs r1, 0\n"
|
|
"bl IsNotAttacking\n"
|
|
"lsls r0, 24\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805E2B0\n"
|
|
"movs r0, 0xF\n"
|
|
"bl sub_803E46C\n"
|
|
"b _0805E2B0\n"
|
|
".align 2, 0\n"
|
|
"_0805E210: .4byte gDungeon\n"
|
|
"_0805E214: .4byte 0x0000066d\n"
|
|
"_0805E218:\n"
|
|
"movs r0, 0xF\n"
|
|
"bl sub_803E46C\n"
|
|
"bl _0805D980\n"
|
|
"_0805E222:\n"
|
|
"movs r0, 0xF\n"
|
|
"bl sub_803E46C\n"
|
|
"bl sub_8047158\n"
|
|
"movs r2, 0\n"
|
|
"lsrs r0, r6, 8\n"
|
|
"lsls r0, 24\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805E238\n"
|
|
"movs r2, 0x1\n"
|
|
"_0805E238:\n"
|
|
"lsrs r1, r6, 16\n"
|
|
"lsls r1, 24\n"
|
|
"lsrs r1, 24\n"
|
|
"adds r0, r2, 0\n"
|
|
"bl ShowFieldMenu\n"
|
|
"bl ResetRepeatTimers\n"
|
|
"bl ResetUnusedInputStruct\n"
|
|
"ldr r1, _0805E294\n"
|
|
"movs r0, 0\n"
|
|
"strb r0, [r1]\n"
|
|
"movs r0, 0\n"
|
|
"ldr r5, [sp, 0x18]\n"
|
|
"strb r0, [r5]\n"
|
|
"bl sub_804AA60\n"
|
|
"bl sub_8044B28\n"
|
|
"lsls r0, 24\n"
|
|
"lsrs r1, r0, 24\n"
|
|
"cmp r1, 0\n"
|
|
"bne _0805E2B0\n"
|
|
"ldrh r0, [r4]\n"
|
|
"cmp r0, 0\n"
|
|
"beq _0805E29C\n"
|
|
"cmp r0, 0x2B\n"
|
|
"bne _0805E27E\n"
|
|
"ldr r2, _0805E298\n"
|
|
"ldr r0, [r2]\n"
|
|
"movs r3, 0x1\n"
|
|
"strb r3, [r0, 0x4]\n"
|
|
"ldr r0, [r2]\n"
|
|
"strb r3, [r0, 0x3]\n"
|
|
"_0805E27E:\n"
|
|
"ldr r5, [sp, 0x1C]\n"
|
|
"ldrh r0, [r5]\n"
|
|
"cmp r0, 0x2E\n"
|
|
"bne _0805E2B0\n"
|
|
"ldr r2, _0805E298\n"
|
|
"ldr r0, [r2]\n"
|
|
"movs r3, 0x1\n"
|
|
"strb r3, [r0, 0x4]\n"
|
|
"ldr r0, [r2]\n"
|
|
"strb r1, [r0, 0x3]\n"
|
|
"b _0805E2B0\n"
|
|
".align 2, 0\n"
|
|
"_0805E294: .4byte gUnknown_202F22D\n"
|
|
"_0805E298: .4byte gDungeon\n"
|
|
"_0805E29C:\n"
|
|
"movs r0, 0xF\n"
|
|
"bl sub_803E46C\n"
|
|
"ldr r5, _0805E2C0\n"
|
|
"ldr r0, [r5]\n"
|
|
"ldrb r0, [r0, 0x4]\n"
|
|
"cmp r0, 0\n"
|
|
"bne _0805E2B0\n"
|
|
"bl _0805D980\n"
|
|
"_0805E2B0:\n"
|
|
"add sp, 0x24\n"
|
|
"pop {r3-r5}\n"
|
|
"mov r8, r3\n"
|
|
"mov r9, r4\n"
|
|
"mov r10, r5\n"
|
|
"pop {r4-r7}\n"
|
|
"pop {r0}\n"
|
|
"bx r0\n"
|
|
".align 2, 0\n"
|
|
"_0805E2C0: .4byte gDungeon\n");
|
|
}
|
|
|
|
#endif
|
|
|
|
/* Nope
|
|
void sub_805E2C4(Entity *leader)
|
|
{
|
|
unkDungeonGlobal_unk181E8_sub *unkPtr;
|
|
|
|
unkPtr = &gDungeon->unk181e8;
|
|
if (gUnknown_202F22C == 0) {
|
|
|
|
}
|
|
}
|
|
*/
|
|
|
|
NAKED void sub_805E2C4(Entity *leader)
|
|
{
|
|
asm_unified( "\n"
|
|
" push {r4-r7,lr}\n"
|
|
" mov r7, r10\n"
|
|
" mov r6, r9\n"
|
|
" mov r5, r8\n"
|
|
" push {r5-r7}\n"
|
|
" sub sp, 0x28\n"
|
|
" str r0, [sp, 0x10]\n"
|
|
" ldr r0, _0805E47C\n"
|
|
" ldr r1, [r0]\n"
|
|
" ldr r0, _0805E480\n"
|
|
" adds r0, r1, r0\n"
|
|
" str r0, [sp, 0x14]\n"
|
|
" ldr r0, _0805E484\n"
|
|
" ldrb r0, [r0]\n"
|
|
" cmp r0, 0\n"
|
|
" bne _0805E2E6\n"
|
|
" b _0805E4C4\n"
|
|
"_0805E2E6:\n"
|
|
" movs r1, 0\n"
|
|
" str r1, [sp, 0x18]\n"
|
|
" mov r7, sp\n"
|
|
" ldr r2, _0805E488\n"
|
|
" mov r10, r2\n"
|
|
"_0805E2F0:\n"
|
|
" ldrh r0, [r7]\n"
|
|
" ldr r3, _0805E48C\n"
|
|
" adds r1, r3, 0\n"
|
|
" ands r1, r0\n"
|
|
" ldr r0, [sp]\n"
|
|
" mov r4, r10\n"
|
|
" ands r0, r4\n"
|
|
" orrs r0, r1\n"
|
|
" str r0, [sp]\n"
|
|
" ldrh r1, [r7]\n"
|
|
" mov r2, r10\n"
|
|
" ands r2, r0\n"
|
|
" orrs r2, r1\n"
|
|
" str r2, [sp]\n"
|
|
" ldrh r0, [r7]\n"
|
|
" ldr r5, _0805E490\n"
|
|
" adds r1, r5, 0\n"
|
|
" ands r1, r0\n"
|
|
" mov r0, r10\n"
|
|
" ands r0, r2\n"
|
|
" orrs r0, r1\n"
|
|
" str r0, [sp]\n"
|
|
" ldrh r2, [r7]\n"
|
|
" mov r1, r10\n"
|
|
" ands r1, r0\n"
|
|
" orrs r1, r2\n"
|
|
" str r1, [sp]\n"
|
|
" ldrh r2, [r7]\n"
|
|
" ldr r0, _0805E494\n"
|
|
" ands r0, r2\n"
|
|
" mov r3, r10\n"
|
|
" ands r3, r1\n"
|
|
" orrs r3, r0\n"
|
|
" str r3, [sp]\n"
|
|
" ldrh r1, [r7]\n"
|
|
" movs r0, 0x80\n"
|
|
" lsls r0, 3\n"
|
|
" orrs r0, r1\n"
|
|
" movs r6, 0\n"
|
|
" orrs r0, r6\n"
|
|
" mov r2, r10\n"
|
|
" ands r2, r3\n"
|
|
" orrs r2, r0\n"
|
|
" str r2, [sp]\n"
|
|
" ldrh r0, [r7]\n"
|
|
" ldr r3, _0805E498\n"
|
|
" adds r1, r3, 0\n"
|
|
" ands r1, r0\n"
|
|
" mov r0, r10\n"
|
|
" ands r0, r2\n"
|
|
" orrs r0, r1\n"
|
|
" str r0, [sp]\n"
|
|
" ldrh r1, [r7]\n"
|
|
" mov r2, r10\n"
|
|
" ands r2, r0\n"
|
|
" orrs r2, r1\n"
|
|
" str r2, [sp]\n"
|
|
" ldrh r0, [r7]\n"
|
|
" ldr r4, _0805E49C\n"
|
|
" adds r1, r4, 0\n"
|
|
" ands r1, r0\n"
|
|
" mov r0, r10\n"
|
|
" ands r0, r2\n"
|
|
" orrs r0, r1\n"
|
|
" str r0, [sp]\n"
|
|
" ldrh r1, [r7]\n"
|
|
" mov r2, r10\n"
|
|
" ands r2, r0\n"
|
|
" orrs r2, r1\n"
|
|
" str r2, [sp]\n"
|
|
" ldrh r1, [r7]\n"
|
|
" ldr r0, _0805E4A0\n"
|
|
" ands r0, r1\n"
|
|
" mov r1, r10\n"
|
|
" ands r1, r2\n"
|
|
" orrs r1, r0\n"
|
|
" str r1, [sp]\n"
|
|
" ldrh r2, [r7]\n"
|
|
" mov r0, r10\n"
|
|
" ands r0, r1\n"
|
|
" orrs r0, r2\n"
|
|
" str r0, [sp]\n"
|
|
" ldr r1, _0805E4A4\n"
|
|
" ldr r5, [sp, 0x18]\n"
|
|
" lsls r0, r5, 3\n"
|
|
" adds r0, r1\n"
|
|
" mov r12, r0\n"
|
|
" ldrb r1, [r0, 0x4]\n"
|
|
" negs r0, r1\n"
|
|
" orrs r0, r1\n"
|
|
" asrs r1, r0, 31\n"
|
|
" movs r0, 0x8\n"
|
|
" ands r1, r0\n"
|
|
" mov r6, r12\n"
|
|
" ldrb r0, [r6, 0x5]\n"
|
|
" cmp r0, 0\n"
|
|
" beq _0805E3B4\n"
|
|
" adds r1, 0x10\n"
|
|
"_0805E3B4:\n"
|
|
" movs r0, 0x1F\n"
|
|
" ands r1, r0\n"
|
|
" lsls r1, 9\n"
|
|
" ldrh r3, [r7, 0x2]\n"
|
|
" ldr r2, _0805E4A8\n"
|
|
" adds r0, r2, 0\n"
|
|
" ands r3, r0\n"
|
|
" orrs r3, r1\n"
|
|
" ldr r4, _0805E4A0\n"
|
|
" ands r3, r4\n"
|
|
" strh r3, [r7, 0x2]\n"
|
|
" ldr r2, _0805E4AC\n"
|
|
" ldrh r0, [r7, 0x4]\n"
|
|
" movs r5, 0xFC\n"
|
|
" lsls r5, 8\n"
|
|
" adds r1, r5, 0\n"
|
|
" ands r0, r1\n"
|
|
" orrs r0, r2\n"
|
|
" movs r6, 0\n"
|
|
" orrs r0, r6\n"
|
|
" movs r1, 0x80\n"
|
|
" lsls r1, 4\n"
|
|
" ldr r2, _0805E494\n"
|
|
" ands r0, r2\n"
|
|
" orrs r0, r1\n"
|
|
" orrs r0, r6\n"
|
|
" ldr r4, _0805E4B0\n"
|
|
" mov r9, r4\n"
|
|
" ands r0, r4\n"
|
|
" strh r0, [r7, 0x4]\n"
|
|
" ldrh r4, [r7, 0x6]\n"
|
|
" ldr r5, _0805E4B4\n"
|
|
" adds r0, r5, 0\n"
|
|
" ands r4, r0\n"
|
|
" ldr r6, _0805E4B8\n"
|
|
" adds r0, r6, 0\n"
|
|
" ands r4, r0\n"
|
|
" strh r4, [r7, 0x6]\n"
|
|
" mov r0, r12\n"
|
|
" movs r1, 0\n"
|
|
" ldrsh r5, [r0, r1]\n"
|
|
" lsls r2, r5, 2\n"
|
|
" adds r2, r5\n"
|
|
" lsls r2, 1\n"
|
|
" ldr r6, _0805E4BC\n"
|
|
" mov r8, r6\n"
|
|
" movs r1, 0\n"
|
|
" ldrsh r0, [r6, r1]\n"
|
|
" lsrs r1, r0, 31\n"
|
|
" adds r0, r1\n"
|
|
" asrs r0, 1\n"
|
|
" movs r6, 0x7\n"
|
|
" ands r0, r6\n"
|
|
" muls r0, r5\n"
|
|
" adds r0, r2\n"
|
|
" adds r0, 0x74\n"
|
|
" ldr r1, _0805E4C0\n"
|
|
" ands r0, r1\n"
|
|
" movs r2, 0xFE\n"
|
|
" lsls r2, 8\n"
|
|
" adds r1, r2, 0\n"
|
|
" ands r3, r1\n"
|
|
" orrs r3, r0\n"
|
|
" strh r3, [r7, 0x2]\n"
|
|
" mov r5, r12\n"
|
|
" movs r0, 0x2\n"
|
|
" ldrsh r3, [r5, r0]\n"
|
|
" lsls r2, r3, 2\n"
|
|
" adds r2, r3\n"
|
|
" lsls r2, 1\n"
|
|
" mov r1, r8\n"
|
|
" movs r5, 0\n"
|
|
" ldrsh r0, [r1, r5]\n"
|
|
" lsrs r1, r0, 31\n"
|
|
" adds r0, r1\n"
|
|
" asrs r0, 1\n"
|
|
" ands r0, r6\n"
|
|
" muls r0, r3\n"
|
|
" adds r0, r2\n"
|
|
" adds r0, 0x52\n"
|
|
" mov r6, r9\n"
|
|
" ands r0, r6\n"
|
|
" lsls r0, 4\n"
|
|
" movs r1, 0xF\n"
|
|
" ands r4, r1\n"
|
|
" orrs r4, r0\n"
|
|
" strh r4, [r7, 0x6]\n"
|
|
" mov r0, sp\n"
|
|
" adds r1, 0xF1\n"
|
|
" movs r2, 0\n"
|
|
" movs r3, 0\n"
|
|
" bl AddSprite\n"
|
|
" ldr r2, [sp, 0x18]\n"
|
|
" adds r2, 0x1\n"
|
|
" str r2, [sp, 0x18]\n"
|
|
" cmp r2, 0x3\n"
|
|
" bgt _0805E47A\n"
|
|
" b _0805E2F0\n"
|
|
"_0805E47A:\n"
|
|
" b _0805E6AC\n"
|
|
" .align 2, 0\n"
|
|
"_0805E47C: .4byte gDungeon\n"
|
|
"_0805E480: .4byte 0x000181e8\n"
|
|
"_0805E484: .4byte gUnknown_202F22C\n"
|
|
"_0805E488: .4byte 0xffff0000\n"
|
|
"_0805E48C: .4byte 0x0000feff\n"
|
|
"_0805E490: .4byte 0x0000fdff\n"
|
|
"_0805E494: .4byte 0x0000f3ff\n"
|
|
"_0805E498: .4byte 0x0000efff\n"
|
|
"_0805E49C: .4byte 0x0000dfff\n"
|
|
"_0805E4A0: .4byte 0x00003fff\n"
|
|
"_0805E4A4: .4byte gUnknown_8106AC8\n"
|
|
"_0805E4A8: .4byte 0x0000c1ff\n"
|
|
"_0805E4AC: .4byte 0x00000213\n"
|
|
"_0805E4B0: .4byte 0x00000fff\n"
|
|
"_0805E4B4: .4byte 0x0000fffe\n"
|
|
"_0805E4B8: .4byte 0x0000fffd\n"
|
|
"_0805E4BC: .4byte gUnknown_202F22E\n"
|
|
"_0805E4C0: .4byte 0x000001ff\n"
|
|
"_0805E4C4:\n"
|
|
" ldr r3, _0805E6E4\n"
|
|
" adds r0, r1, r3\n"
|
|
" ldrb r0, [r0]\n"
|
|
" cmp r0, 0\n"
|
|
" bne _0805E4D0\n"
|
|
" b _0805E6AC\n"
|
|
"_0805E4D0:\n"
|
|
" ldr r4, _0805E6E8\n"
|
|
" adds r0, r1, r4\n"
|
|
" ldrb r0, [r0]\n"
|
|
" str r0, [sp, 0x1C]\n"
|
|
" cmp r0, 0x7\n"
|
|
" bls _0805E4DE\n"
|
|
" b _0805E6AC\n"
|
|
"_0805E4DE:\n"
|
|
" ldr r0, _0805E6EC\n"
|
|
" ldrb r0, [r0]\n"
|
|
" movs r7, 0x1\n"
|
|
" cmp r0, 0\n"
|
|
" beq _0805E4F2\n"
|
|
" ldr r0, _0805E6F0\n"
|
|
" ldrb r0, [r0]\n"
|
|
" cmp r0, 0\n"
|
|
" beq _0805E4F2\n"
|
|
" movs r7, 0x3\n"
|
|
"_0805E4F2:\n"
|
|
" ldr r5, _0805E6F4\n"
|
|
" mov r12, r5\n"
|
|
" ldr r6, [sp, 0x1C]\n"
|
|
" lsls r5, r6, 1\n"
|
|
" adds r3, r5, r6\n"
|
|
" lsls r3, 2\n"
|
|
" add r3, r12\n"
|
|
" movs r0, 0\n"
|
|
" ldrsh r4, [r3, r0]\n"
|
|
" lsls r1, r4, 2\n"
|
|
" adds r1, r4\n"
|
|
" lsls r1, 1\n"
|
|
" ldr r0, _0805E6F8\n"
|
|
" movs r6, 0\n"
|
|
" ldrsh r2, [r0, r6]\n"
|
|
" lsrs r0, r2, 31\n"
|
|
" adds r2, r0\n"
|
|
" asrs r2, 1\n"
|
|
" movs r0, 0x7\n"
|
|
" ands r2, r0\n"
|
|
" adds r0, r4, 0\n"
|
|
" muls r0, r2\n"
|
|
" adds r0, r1\n"
|
|
" adds r0, 0x74\n"
|
|
" str r0, [sp, 0x20]\n"
|
|
" movs r1, 0x2\n"
|
|
" ldrsh r0, [r3, r1]\n"
|
|
" lsls r1, r0, 2\n"
|
|
" adds r1, r0\n"
|
|
" lsls r1, 1\n"
|
|
" muls r0, r2\n"
|
|
" adds r0, r1\n"
|
|
" adds r0, 0x52\n"
|
|
" mov r10, r0\n"
|
|
" str r5, [sp, 0x24]\n"
|
|
" cmp r7, 0\n"
|
|
" bne _0805E53E\n"
|
|
" b _0805E6AC\n"
|
|
"_0805E53E:\n"
|
|
" add r6, sp, 0x8\n"
|
|
" ldr r2, _0805E6FC\n"
|
|
" mov r8, r2\n"
|
|
" mov r9, r7\n"
|
|
"_0805E546:\n"
|
|
" ldrh r0, [r6]\n"
|
|
" ldr r3, _0805E700\n"
|
|
" adds r1, r3, 0\n"
|
|
" ands r1, r0\n"
|
|
" ldr r0, [sp, 0x8]\n"
|
|
" mov r4, r8\n"
|
|
" ands r0, r4\n"
|
|
" orrs r0, r1\n"
|
|
" str r0, [sp, 0x8]\n"
|
|
" ldrh r1, [r6]\n"
|
|
" mov r2, r8\n"
|
|
" ands r2, r0\n"
|
|
" orrs r2, r1\n"
|
|
" str r2, [sp, 0x8]\n"
|
|
" ldrh r0, [r6]\n"
|
|
" ldr r5, _0805E704\n"
|
|
" adds r1, r5, 0\n"
|
|
" ands r1, r0\n"
|
|
" mov r0, r8\n"
|
|
" ands r0, r2\n"
|
|
" orrs r0, r1\n"
|
|
" str r0, [sp, 0x8]\n"
|
|
" ldrh r2, [r6]\n"
|
|
" mov r1, r8\n"
|
|
" ands r1, r0\n"
|
|
" orrs r1, r2\n"
|
|
" str r1, [sp, 0x8]\n"
|
|
" ldrh r2, [r6]\n"
|
|
" ldr r0, _0805E708\n"
|
|
" ands r0, r2\n"
|
|
" mov r3, r8\n"
|
|
" ands r3, r1\n"
|
|
" orrs r3, r0\n"
|
|
" str r3, [sp, 0x8]\n"
|
|
" ldrh r1, [r6]\n"
|
|
" movs r0, 0x80\n"
|
|
" lsls r0, 3\n"
|
|
" orrs r0, r1\n"
|
|
" movs r1, 0\n"
|
|
" orrs r0, r1\n"
|
|
" mov r2, r8\n"
|
|
" ands r2, r3\n"
|
|
" orrs r2, r0\n"
|
|
" str r2, [sp, 0x8]\n"
|
|
" ldrh r0, [r6]\n"
|
|
" ldr r3, _0805E70C\n"
|
|
" adds r1, r3, 0\n"
|
|
" ands r1, r0\n"
|
|
" mov r0, r8\n"
|
|
" ands r0, r2\n"
|
|
" orrs r0, r1\n"
|
|
" str r0, [sp, 0x8]\n"
|
|
" ldrh r1, [r6]\n"
|
|
" mov r2, r8\n"
|
|
" ands r2, r0\n"
|
|
" orrs r2, r1\n"
|
|
" str r2, [sp, 0x8]\n"
|
|
" ldrh r0, [r6]\n"
|
|
" ldr r4, _0805E710\n"
|
|
" adds r1, r4, 0\n"
|
|
" ands r1, r0\n"
|
|
" mov r0, r8\n"
|
|
" ands r0, r2\n"
|
|
" orrs r0, r1\n"
|
|
" str r0, [sp, 0x8]\n"
|
|
" ldrh r1, [r6]\n"
|
|
" mov r2, r8\n"
|
|
" ands r2, r0\n"
|
|
" orrs r2, r1\n"
|
|
" str r2, [sp, 0x8]\n"
|
|
" ldrh r1, [r6]\n"
|
|
" ldr r0, _0805E714\n"
|
|
" ands r0, r1\n"
|
|
" mov r1, r8\n"
|
|
" ands r1, r2\n"
|
|
" orrs r1, r0\n"
|
|
" str r1, [sp, 0x8]\n"
|
|
" ldrh r2, [r6]\n"
|
|
" mov r0, r8\n"
|
|
" ands r0, r1\n"
|
|
" orrs r0, r2\n"
|
|
" str r0, [sp, 0x8]\n"
|
|
" ldr r5, [sp, 0x24]\n"
|
|
" ldr r1, [sp, 0x1C]\n"
|
|
" adds r0, r5, r1\n"
|
|
" lsls r2, r0, 2\n"
|
|
" ldr r3, _0805E6F4\n"
|
|
" adds r7, r2, r3\n"
|
|
" ldrb r1, [r7, 0x8]\n"
|
|
" negs r0, r1\n"
|
|
" orrs r0, r1\n"
|
|
" asrs r1, r0, 31\n"
|
|
" movs r0, 0x8\n"
|
|
" ands r1, r0\n"
|
|
" ldrb r0, [r7, 0x9]\n"
|
|
" cmp r0, 0\n"
|
|
" beq _0805E60A\n"
|
|
" adds r1, 0x10\n"
|
|
"_0805E60A:\n"
|
|
" movs r0, 0x1F\n"
|
|
" ands r1, r0\n"
|
|
" lsls r1, 9\n"
|
|
" ldrh r3, [r6, 0x2]\n"
|
|
" ldr r4, _0805E718\n"
|
|
" adds r0, r4, 0\n"
|
|
" ands r3, r0\n"
|
|
" orrs r3, r1\n"
|
|
" ldr r5, _0805E714\n"
|
|
" ands r3, r5\n"
|
|
" strh r3, [r6, 0x2]\n"
|
|
" ldr r1, _0805E71C\n"
|
|
" adds r0, r2, r1\n"
|
|
" ldr r2, [r0]\n"
|
|
" ldr r0, _0805E720\n"
|
|
" ands r2, r0\n"
|
|
" ldrh r0, [r6, 0x4]\n"
|
|
" movs r4, 0xFC\n"
|
|
" lsls r4, 8\n"
|
|
" adds r1, r4, 0\n"
|
|
" ands r0, r1\n"
|
|
" orrs r0, r2\n"
|
|
" movs r1, 0x80\n"
|
|
" lsls r1, 4\n"
|
|
" ldr r5, _0805E708\n"
|
|
" ands r0, r5\n"
|
|
" orrs r0, r1\n"
|
|
" movs r1, 0\n"
|
|
" orrs r0, r1\n"
|
|
" movs r2, 0xF\n"
|
|
" mov r12, r2\n"
|
|
" ldr r4, _0805E724\n"
|
|
" ands r0, r4\n"
|
|
" strh r0, [r6, 0x4]\n"
|
|
" ldrh r1, [r6, 0x6]\n"
|
|
" ldr r5, _0805E728\n"
|
|
" adds r0, r5, 0\n"
|
|
" ands r1, r0\n"
|
|
" ldr r2, _0805E72C\n"
|
|
" adds r0, r2, 0\n"
|
|
" ands r1, r0\n"
|
|
" ldr r0, _0805E730\n"
|
|
" ldr r5, [sp, 0x20]\n"
|
|
" ands r0, r5\n"
|
|
" movs r5, 0xFE\n"
|
|
" lsls r5, 8\n"
|
|
" adds r2, r5, 0\n"
|
|
" ands r3, r2\n"
|
|
" orrs r3, r0\n"
|
|
" strh r3, [r6, 0x2]\n"
|
|
" mov r0, r10\n"
|
|
" ands r0, r4\n"
|
|
" lsls r0, 4\n"
|
|
" mov r2, r12\n"
|
|
" ands r1, r2\n"
|
|
" orrs r1, r0\n"
|
|
" strh r1, [r6, 0x6]\n"
|
|
" adds r0, r6, 0\n"
|
|
" movs r1, 0x80\n"
|
|
" lsls r1, 1\n"
|
|
" movs r2, 0\n"
|
|
" movs r3, 0\n"
|
|
" bl AddSprite\n"
|
|
" movs r3, 0\n"
|
|
" ldrsh r0, [r7, r3]\n"
|
|
" lsls r0, 2\n"
|
|
" ldr r4, [sp, 0x20]\n"
|
|
" adds r4, r0\n"
|
|
" str r4, [sp, 0x20]\n"
|
|
" movs r5, 0x2\n"
|
|
" ldrsh r0, [r7, r5]\n"
|
|
" lsls r0, 2\n"
|
|
" add r10, r0\n"
|
|
" movs r0, 0x1\n"
|
|
" negs r0, r0\n"
|
|
" add r9, r0\n"
|
|
" mov r1, r9\n"
|
|
" cmp r1, 0\n"
|
|
" beq _0805E6AC\n"
|
|
" b _0805E546\n"
|
|
"_0805E6AC:\n"
|
|
" ldr r4, _0805E734\n"
|
|
" ldrb r0, [r4]\n"
|
|
" cmp r0, 0\n"
|
|
" beq _0805E6D4\n"
|
|
" ldr r2, [sp, 0x14]\n"
|
|
" adds r2, 0x34\n"
|
|
" ldr r3, [sp, 0x14]\n"
|
|
" adds r3, 0x33\n"
|
|
" ldrb r1, [r3]\n"
|
|
" ldrb r0, [r2]\n"
|
|
" cmp r0, r1\n"
|
|
" beq _0805E6D4\n"
|
|
" strb r1, [r2]\n"
|
|
" ldr r0, [sp, 0x10]\n"
|
|
" adds r0, 0x4\n"
|
|
" ldrb r1, [r3]\n"
|
|
" ldrb r3, [r4]\n"
|
|
" movs r2, 0\n"
|
|
" bl sub_804A728\n"
|
|
"_0805E6D4:\n"
|
|
" add sp, 0x28\n"
|
|
" pop {r3-r5}\n"
|
|
" mov r8, r3\n"
|
|
" mov r9, r4\n"
|
|
" mov r10, r5\n"
|
|
" pop {r4-r7}\n"
|
|
" pop {r0}\n"
|
|
" bx r0\n"
|
|
" .align 2, 0\n"
|
|
"_0805E6E4: .4byte 0x0001821a\n"
|
|
"_0805E6E8: .4byte 0x0001821b\n"
|
|
"_0805E6EC: .4byte gUnknown_202F231\n"
|
|
"_0805E6F0: .4byte gUnknown_202F230\n"
|
|
"_0805E6F4: .4byte gUnknown_8106AE8\n"
|
|
"_0805E6F8: .4byte gUnknown_202F22E\n"
|
|
"_0805E6FC: .4byte 0xffff0000\n"
|
|
"_0805E700: .4byte 0x0000feff\n"
|
|
"_0805E704: .4byte 0x0000fdff\n"
|
|
"_0805E708: .4byte 0x0000f3ff\n"
|
|
"_0805E70C: .4byte 0x0000efff\n"
|
|
"_0805E710: .4byte 0x0000dfff\n"
|
|
"_0805E714: .4byte 0x00003fff\n"
|
|
"_0805E718: .4byte 0x0000c1ff\n"
|
|
"_0805E71C: .4byte gUnknown_8106AEC\n"
|
|
"_0805E720: .4byte 0x000003ff\n"
|
|
"_0805E724: .4byte 0x00000fff\n"
|
|
"_0805E728: .4byte 0x0000fffe\n"
|
|
"_0805E72C: .4byte 0x0000fffd\n"
|
|
"_0805E730: .4byte 0x000001ff\n"
|
|
"_0805E734: .4byte gUnknown_202F22D"
|
|
);
|
|
}
|
|
|
|
void sub_805E738(Entity *a0)
|
|
{
|
|
Tile *tile;
|
|
s32 i, j;
|
|
EntityInfo *entityInfo = a0->info;
|
|
if (entityInfo->eyesightStatus.eyesightStatus != 1 && entityInfo->eyesightStatus.eyesightStatus != 2) {
|
|
// What???
|
|
for (i = 0; i < 1; i++) {
|
|
bool8 r9 = FALSE;
|
|
u32 r5 = entityInfo->action.direction;
|
|
r5++;
|
|
for (j = 1; j < 8; j++, r5++) {
|
|
r5 &= 7;
|
|
tile = GetTile(a0->pos.x + gAdjacentTileOffsets[r5].x, a0->pos.y + gAdjacentTileOffsets[r5].y);
|
|
if (tile->monster != NULL && GetEntityType(tile->monster) == ENTITY_MONSTER) {
|
|
EntityInfo *tileMonsterInfo = tile->monster->info;
|
|
if (CanSeeTarget(a0, tile->monster)) {
|
|
if (i != 0 || tileMonsterInfo->isNotTeamMember) {
|
|
r9 = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (r9) {
|
|
a0->info->action.direction = r5 & 7;
|
|
sub_806CDD4(a0, sub_806CEBC(a0), r5);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void sub_805E804(void)
|
|
{
|
|
gDungeon->unk66D |= gDungeon->unk66C;
|
|
gDungeon->unk66C = 0;
|
|
while (gDungeon->unk66D != 0 && gRealInputs.held & R_BUTTON) {
|
|
sub_803E46C(0x54);
|
|
}
|
|
}
|
|
|
|
extern bool8 sub_8070F14(Entity * pokemon, s32 direction);
|
|
bool8 sub_805EC2C(Entity *a0, s32 x, s32 y);
|
|
|
|
bool8 sub_805E874(void)
|
|
{
|
|
u8 r7, r8, r0;
|
|
s32 i, j, k;
|
|
s32 xArray[3];
|
|
s32 yArray[3];
|
|
Dungeon *dungeon = gDungeon;
|
|
Entity *leader = GetLeader();
|
|
s32 direction = leader->info->action.direction;
|
|
s32 x = leader->pos.x;
|
|
s32 y = leader->pos.y;
|
|
Tile *leaderTile = GetTile(x, y);
|
|
s32 xAdjacent = x + gAdjacentTileOffsets[direction].x;
|
|
s32 yAdjacent = y + gAdjacentTileOffsets[direction].y;
|
|
s32 room;
|
|
|
|
if (dungeon->unk66C == 0)
|
|
return FALSE;
|
|
if (leaderTile->object != NULL)
|
|
return FALSE;
|
|
if (sub_805EC2C(leader, x, y))
|
|
return FALSE;
|
|
if (!sub_8070F14(leader, direction))
|
|
return FALSE;
|
|
|
|
room = leaderTile->room;
|
|
if (room == 0xFF) {
|
|
if (GetTile(xAdjacent, yAdjacent)->room != 0xFF)
|
|
return FALSE;
|
|
}
|
|
else {
|
|
if (leaderTile->terrainType & TERRAIN_TYPE_NATURAL_JUNCTION)
|
|
return FALSE;
|
|
}
|
|
|
|
for (j = -1; j < 2; j++) {
|
|
Tile *tile = GetTile(x + gAdjacentTileOffsets[(direction + j) & 7].x, y + gAdjacentTileOffsets[(direction + j) & 7].y);
|
|
if (tile->monster != NULL)
|
|
return FALSE;
|
|
if (tile->terrainType & TERRAIN_TYPE_STAIRS)
|
|
return FALSE;
|
|
}
|
|
|
|
xArray[0] = x + gAdjacentTileOffsets[(direction + 3) & 7].x;
|
|
xArray[1] = x + gAdjacentTileOffsets[(direction + 4) & 7].x;
|
|
xArray[2] = x + gAdjacentTileOffsets[(direction + 5) & 7].x;
|
|
|
|
yArray[0] = y + gAdjacentTileOffsets[(direction + 3) & 7].y;
|
|
yArray[1] = y + gAdjacentTileOffsets[(direction + 4) & 7].y;
|
|
yArray[2] = y + gAdjacentTileOffsets[(direction + 5) & 7].y;
|
|
|
|
for (i = -1; i < 2; i++) {
|
|
for (j = -1; j < 2; j++) {
|
|
Tile *tile = GetTile(x + i, y + j);
|
|
if (tile->object != NULL) {
|
|
for (k = 0; k < 3; k++) {
|
|
if (x + i == xArray[k] && y + j == yArray[k])
|
|
break;
|
|
}
|
|
if (k == 3 && GetEntityType(tile->object) == ENTITY_ITEM)
|
|
return FALSE;
|
|
}
|
|
|
|
if (direction & 1) {
|
|
// This doesn't really have to be called two times...
|
|
if (tile->object != NULL && GetEntityType(tile->object) == ENTITY_TRAP && GetEntityType(tile->object) == ENTITY_TRAP) {
|
|
if (tile->object->isVisible)
|
|
return FALSE;
|
|
if (gDungeon->unk181e8.unk1820F)
|
|
return FALSE;
|
|
}
|
|
}
|
|
else if (i == 0 || j == 0) {
|
|
if (tile->object != NULL && GetEntityType(tile->object) == ENTITY_TRAP) {
|
|
if (tile->object->isVisible)
|
|
return FALSE;
|
|
if (gDungeon->unk181e8.unk1820F)
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
if (i != 0 && j != 0) continue;
|
|
if (i == 0 && j == 0) continue;
|
|
|
|
if ((xArray[1] != x + i || yArray[1] != y + j) && !sub_805EC2C(leader, x + i, y + j) && room != 0xFF && room != tile->room)
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
if (!(direction & 1)) {
|
|
if (direction == 0 || direction == 4) {
|
|
r8 = sub_805EC2C(leader, x - 1, y - 1);
|
|
r7 = sub_805EC2C(leader, x - 1, y);
|
|
r0 = sub_805EC2C(leader, x - 1, y + 1);
|
|
if (r7 == 0) {
|
|
if (r8 != 0 || r7 != r0)
|
|
return FALSE;
|
|
}
|
|
|
|
r8 = sub_805EC2C(leader, x + 1, y - 1);
|
|
r7 = sub_805EC2C(leader, x + 1, y);
|
|
r0 = sub_805EC2C(leader, x + 1, y + 1);
|
|
if (r7 == 0) {
|
|
if (r8 != 0 || r7 != r0)
|
|
return FALSE;
|
|
}
|
|
}
|
|
else {
|
|
r8 = sub_805EC2C(leader, x - 1, y - 1);
|
|
r7 = sub_805EC2C(leader, x, y - 1);
|
|
r0 = sub_805EC2C(leader, x + 1, y - 1);
|
|
if (r7 == 0) {
|
|
if (r8 != 0 || r7 != r0)
|
|
return FALSE;
|
|
}
|
|
|
|
r8 = sub_805EC2C(leader, x - 1, y + 1);
|
|
r7 = sub_805EC2C(leader, x, y + 1);
|
|
r0 = sub_805EC2C(leader, x + 1, y + 1);
|
|
if (r7 == 0) {
|
|
if (r8 != 0 || r7 != r0)
|
|
return FALSE;
|
|
}
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
bool8 sub_805EC2C(Entity *a0, s32 x, s32 y)
|
|
{
|
|
Position pos = {.x = x, .y = y};
|
|
return sub_8070564(a0, &pos);
|
|
}
|
|
|
|
static inline bool8 IsClientOrTeamBase(s32 joinedDungeon)
|
|
{
|
|
if (joinedDungeon == DUNGEON_JOIN_LOCATION_CLIENT_POKEMON || joinedDungeon == DUNGEON_RESCUE_TEAM_BASE)
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
bool8 sub_805EC4C(Entity *a0, u8 a1)
|
|
{
|
|
Position pos;
|
|
Tile *tile;
|
|
EntityInfo *tileMonsterInfo;
|
|
Entity *tileMonster;
|
|
EntityInfo *entityInfo = a0->info;
|
|
|
|
pos.x = a0->pos.x + gAdjacentTileOffsets[entityInfo->action.direction].x;
|
|
pos.y = a0->pos.y + gAdjacentTileOffsets[entityInfo->action.direction].y;
|
|
tile = GetTile(pos.x, pos.y);
|
|
tileMonster = tile->monster;
|
|
|
|
if (tileMonster == NULL) return FALSE;
|
|
if (GetEntityType(tileMonster) != ENTITY_MONSTER) return FALSE;
|
|
|
|
tileMonsterInfo = tileMonster->info;
|
|
if (tileMonsterInfo->isNotTeamMember
|
|
&& (tileMonsterInfo->shopkeeper != 1 && tileMonsterInfo->shopkeeper != 2)
|
|
&& !IsClientOrTeamBase(tileMonsterInfo->joinedAt.joinedAt)
|
|
&& tileMonsterInfo->clientType != 1) {
|
|
return FALSE;
|
|
}
|
|
|
|
if (entityInfo->immobilize.immobilizeStatus == STATUS_SHADOW_HOLD) return FALSE;
|
|
if (entityInfo->immobilize.immobilizeStatus == STATUS_FROZEN) return FALSE;
|
|
if (entityInfo->immobilize.immobilizeStatus == STATUS_CONSTRICTION) return FALSE;
|
|
if (entityInfo->immobilize.immobilizeStatus == STATUS_INGRAIN) return FALSE;
|
|
if (entityInfo->immobilize.immobilizeStatus == STATUS_WRAP) return FALSE;
|
|
if (entityInfo->immobilize.immobilizeStatus == STATUS_WRAPPED) return FALSE;
|
|
|
|
if (tileMonsterInfo->immobilize.immobilizeStatus == STATUS_SHADOW_HOLD) return FALSE;
|
|
if (tileMonsterInfo->immobilize.immobilizeStatus == STATUS_FROZEN) return FALSE;
|
|
if (tileMonsterInfo->immobilize.immobilizeStatus == STATUS_CONSTRICTION) return FALSE;
|
|
if (tileMonsterInfo->immobilize.immobilizeStatus == STATUS_INGRAIN) return FALSE;
|
|
if (tileMonsterInfo->immobilize.immobilizeStatus == STATUS_WRAP) return FALSE;
|
|
if (tileMonsterInfo->immobilize.immobilizeStatus == STATUS_WRAPPED) return FALSE;
|
|
|
|
if (entityInfo->volatileStatus.volatileStatus == STATUS_CONFUSED) return FALSE;
|
|
if (tileMonsterInfo->volatileStatus.volatileStatus == STATUS_CONFUSED) return FALSE;
|
|
|
|
if (tileMonsterInfo->sleep.sleep != STATUS_NONE && tileMonsterInfo->sleep.sleep != STATUS_SLEEPLESS && tileMonsterInfo->sleep.sleep != STATUS_YAWNING) return FALSE;
|
|
if (entityInfo->sleep.sleep != STATUS_NONE && entityInfo->sleep.sleep != STATUS_SLEEPLESS && entityInfo->sleep.sleep != STATUS_YAWNING) return FALSE;
|
|
|
|
if (IsCharging(tileMonster, FALSE)) return FALSE;
|
|
if (!sub_8070F80(a0, entityInfo->action.direction)) return FALSE;
|
|
|
|
if (a1 != 0 && sub_807049C(tileMonster, &a0->pos) && !sub_8052B8C(0, gUnknown_8100208, 0)) return FALSE;
|
|
|
|
SetMonsterActionFields(&entityInfo->action, ACTION_WALK);
|
|
if (gRealInputs.held & B_BUTTON) {
|
|
entityInfo->action.unk4[0].actionUseIndex = 0;
|
|
}
|
|
else {
|
|
entityInfo->action.unk4[0].actionUseIndex = 1;
|
|
}
|
|
entityInfo->flags |= 0x8000;
|
|
|
|
SetMonsterActionFields(&tileMonsterInfo->action, ACTION_WALK);
|
|
tileMonsterInfo->action.unk4[0].actionUseIndex = 0;
|
|
tileMonsterInfo->action.direction = (entityInfo->action.direction + 4) & 7;
|
|
tileMonsterInfo->flags |= 0x8000;
|
|
tileMonsterInfo->targetPos.x = tileMonster->pos.x;
|
|
tileMonsterInfo->targetPos.y = tileMonster->pos.y;
|
|
gDungeon->unkE = 1;
|
|
return TRUE;
|
|
}
|
|
|
|
void sub_805EE30(void)
|
|
{
|
|
Entity *tileObject;
|
|
Tile *tile;
|
|
Entity *leader = GetLeader();
|
|
if (leader == NULL)
|
|
return;
|
|
if (sub_8044B28())
|
|
return;
|
|
|
|
tile = GetTileAtEntitySafe(leader);
|
|
if (IQSkillIsEnabled(leader, IQ_SUPER_MOBILE) && leader->info->transformStatus.transformStatus != STATUS_MOBILE && !HasHeldItem(leader, ITEM_MOBILE_SCARF))
|
|
sub_804AE84(&leader->pos);
|
|
if (tile->terrainType & TERRAIN_TYPE_STAIRS)
|
|
gDungeon->unk1 = 1;
|
|
|
|
tileObject = tile->object;
|
|
if (tileObject == NULL)
|
|
return;
|
|
switch (GetEntityType(tileObject))
|
|
{
|
|
case ENTITY_TRAP: {
|
|
Trap *trap = GetTrapData(tileObject);
|
|
bool32 r8 = FALSE;
|
|
bool32 r7 = FALSE;
|
|
if (IQSkillIsEnabled(leader, IQ_TRAP_SEER) && !tileObject->isVisible) {
|
|
tileObject->isVisible = TRUE;
|
|
sub_8049ED4();
|
|
r7 = TRUE;
|
|
}
|
|
if (trap->unk1 != 0) {
|
|
if (trap->unk1 == 1)
|
|
break;
|
|
if (trap->unk1 == 2)
|
|
r8 = TRUE;
|
|
if (r8 == FALSE)
|
|
break;
|
|
}
|
|
if (!r7) {
|
|
sub_807FE9C(leader, &leader->pos, 0, 1);
|
|
}
|
|
}
|
|
break;
|
|
case ENTITY_ITEM: {
|
|
Item *item = GetItemData(tileObject);
|
|
if (!(item->flags & ITEM_FLAG_IN_SHOP)) {
|
|
sub_8045DB4(&leader->pos, 1);
|
|
}
|
|
else {
|
|
gDungeon->unk5C0 = 4;
|
|
}
|
|
}
|
|
break;
|
|
case ENTITY_NOTHING:
|
|
case ENTITY_MONSTER:
|
|
case ENTITY_UNK_4:
|
|
case ENTITY_UNK_5:
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
extern Entity *sub_80696A8(Entity *a0);
|
|
extern u8 sub_806A538(s32);
|
|
|
|
bool8 sub_805EF60(Entity *a0, EntityInfo *a1)
|
|
{
|
|
Entity *r4 = sub_80696A8(a0);
|
|
|
|
if (r4 == NULL)
|
|
return FALSE;
|
|
if (GetEntityType(r4) != ENTITY_MONSTER)
|
|
return FALSE;
|
|
if (!sub_8070BC0(a0))
|
|
return FALSE;
|
|
if (r4->info->isNotTeamMember && r4->info->clientType != 1 && r4->info->shopkeeper != 1)
|
|
return FALSE;
|
|
|
|
SetMonsterActionFields(&a1->action, ACTION_TALK_FIELD);
|
|
return TRUE;
|
|
}
|
|
|
|
void sub_805EFB4(Entity *a0, bool8 a1)
|
|
{
|
|
s32 i;
|
|
EntityInfo *leaderInfo = GetLeaderInfo();
|
|
if (a1 && leaderInfo->volatileStatus.volatileStatus == STATUS_COWERING) {
|
|
leaderInfo->action.direction += 4;
|
|
leaderInfo->action.direction &= 7;
|
|
}
|
|
else if (leaderInfo->volatileStatus.volatileStatus == STATUS_CONFUSED) {
|
|
s32 rnd = DungeonRandInt(8);
|
|
for (i = 0; i < 8; i++) {
|
|
if (a1 || CanMoveInDirection(a0, rnd)) {
|
|
leaderInfo->action.direction = rnd & 7;
|
|
return;
|
|
}
|
|
rnd = (rnd + 1) & 7;
|
|
}
|
|
}
|
|
}
|
|
|
|
extern void sub_803EAF0(u32, u8 *);
|
|
extern void sub_803F508(Entity *);
|
|
extern void sub_8041AD0(Entity *pokemon);
|
|
extern void sub_8041AE0(Entity *pokemon);
|
|
extern void sub_807EC28(bool8);
|
|
extern void sub_8083CE0(u8 param_1);
|
|
|
|
extern u8 gAvailablePokemonNames[];
|
|
|
|
extern u8 gUnknown_202749A[];
|
|
extern u32 gUnknown_202F260;
|
|
extern MenuInputStruct gUnknown_202EE10;
|
|
|
|
void sub_805F02C(void)
|
|
{
|
|
s32 i;
|
|
Entity *r7 = gDungeon->unkBC;
|
|
Entity *leader = GetLeader();
|
|
EntityInfo *r8 = r7->info;
|
|
EntityInfo *leaderInfo = leader->info;
|
|
|
|
if (r8->isTeamLeader) {
|
|
sub_805239C(r7, gUnknown_80F9BD8);
|
|
}
|
|
else if (sub_8047084(ITEM_FLAG_IN_SHOP) || sub_807EF48()) {
|
|
sub_805239C(r7, gUnknown_80F9C08);
|
|
}
|
|
else if (gDungeon->unk66E) {
|
|
sub_805239C(r7, gUnknown_80F9C2C);
|
|
}
|
|
else {
|
|
gDungeon->unk679 = 0;
|
|
r8->isTeamLeader = TRUE;
|
|
leaderInfo->isTeamLeader = FALSE;
|
|
for (i = 0; i < 4; i++) {
|
|
PokemonStruct2 *mon = &gRecruitedPokemonRef->pokemon2[i];
|
|
PokemonStruct1 *r5 = NULL;
|
|
|
|
if ((u8)mon->unk0 & 1) {
|
|
if (!sub_806A538(mon->unkA)) {
|
|
r5 = &gRecruitedPokemonRef->pokemon[mon->unkA];
|
|
}
|
|
if (i == r8->teamIndex) {
|
|
mon->isTeamLeader = TRUE;
|
|
if (r5 != NULL) {
|
|
r5->isTeamLeader = TRUE;
|
|
}
|
|
}
|
|
else {
|
|
mon->isTeamLeader = FALSE;
|
|
if (r5 != NULL) {
|
|
r5->isTeamLeader = FALSE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
gLeaderPointer = NULL;
|
|
r8->action = leaderInfo->action;
|
|
sub_803F508(r7);
|
|
sub_8041AD0(leader);
|
|
sub_8041AE0(GetLeader());
|
|
SetMessageArgument(gAvailablePokemonNames, r7, 0);
|
|
SendMessage(r7, gUnknown_80F9BB0);
|
|
sub_807EC28(FALSE);
|
|
r8->unk64 = 0;
|
|
leaderInfo->unk64 = 0;
|
|
sub_806A6E8(leader);
|
|
sub_806A6E8(r7);
|
|
}
|
|
}
|
|
|
|
ActionContainer *GetLeaderActionContainer(void)
|
|
{
|
|
return &GetLeaderInfo()->action;
|
|
}
|
|
|
|
u16 GetLeaderActionId(void)
|
|
{
|
|
return GetLeaderInfo()->action.action;
|
|
}
|
|
|
|
void ShowFieldMenu(u8 a0_, bool8 a1)
|
|
{
|
|
Item *item;
|
|
s32 r10;
|
|
u8 a0 = a0_; // Needed to match.
|
|
s32 var_28;
|
|
s32 var_24;
|
|
struct UnkMenuBitsStruct var_30;
|
|
struct UnkMenuBitsStruct var_34;
|
|
|
|
r10 = gDungeon->unk5C0;
|
|
var_28 = 0;
|
|
var_24 = (gDungeon->unk5C0 > - 1);
|
|
gDungeon->unk5C0 = -1;
|
|
if (r10 >= 0) {
|
|
var_28 = r10;
|
|
}
|
|
|
|
if (a1) {
|
|
PlayFanfareSE(0x137, 0x100);
|
|
}
|
|
else {
|
|
sub_8083D44();
|
|
}
|
|
|
|
while (1) {
|
|
if (r10 < 0) {
|
|
sub_8044C10(1);
|
|
gUnknown_202F260 = -1;
|
|
DrawFieldMenu(a0);
|
|
sub_806A2BC(GetLeader(), 0);
|
|
while (1) {
|
|
AddMenuCursorSprite(&gUnknown_202EE10);
|
|
sub_803E46C(0x1D);
|
|
if (gRealInputs.repeated & DPAD_DOWN) {
|
|
sub_8083CE0(1);
|
|
sub_80136E0(&gUnknown_202EE10, 1);
|
|
}
|
|
if (gRealInputs.repeated & DPAD_UP) {
|
|
sub_8083CE0(1);
|
|
sub_8013744(&gUnknown_202EE10, 1);
|
|
}
|
|
if ((gRealInputs.pressed & A_BUTTON || gUnknown_202EE10.unk28.a_button)) {
|
|
if (gUnknown_202749A[gUnknown_202EE10.menuIndex + 1] == 7) {
|
|
sub_8083D08();
|
|
var_28 = gUnknown_202EE10.menuIndex;
|
|
break;
|
|
}
|
|
sub_8083D30();
|
|
}
|
|
if ((gRealInputs.pressed & B_BUTTON) || gUnknown_202EE10.unk28.b_button) {
|
|
sub_8083D30();
|
|
var_28 = -1;
|
|
break;
|
|
}
|
|
}
|
|
AddMenuCursorSprite(&gUnknown_202EE10);
|
|
sub_803E46C(0x1D);
|
|
a0 = 1;
|
|
}
|
|
|
|
r10 = var_28;
|
|
if (var_28 == 1) {
|
|
u16 action;
|
|
|
|
sub_8044C10(1);
|
|
var_34.a0_8 = 0;
|
|
var_34.a0_16 = 1;
|
|
var_34.a0_24 = 0;
|
|
var_34.a0_32 = 0;
|
|
if (sub_805FD74(GetLeader(), &var_34)) {
|
|
r10 = -1;
|
|
}
|
|
if (sub_805FD3C(&var_34) && sub_805FD74(GetLeader(), &var_34)) {
|
|
sub_8044C10(1);
|
|
}
|
|
action = GetLeaderActionId();
|
|
if (action == 12) {
|
|
sub_8044D90(GetLeader(), 0, 12)->flags |= ITEM_FLAG_UNPAID;
|
|
sub_8060D24(GetLeaderActionContainer());
|
|
sub_8044C10(1);
|
|
}
|
|
else if (action == 53) {
|
|
item = sub_8044D90(GetLeader(), 0, 13);
|
|
if (!sub_8048A68(GetLeader(), item)) {
|
|
sub_8044C10(1);
|
|
}
|
|
}
|
|
else if (action == 16) {
|
|
item = sub_8044D90(GetLeader(), 0, 14);
|
|
if (!sub_8048950(GetLeader(), item)) {
|
|
sub_8044C10(1);
|
|
}
|
|
}
|
|
else if (action == 44) {
|
|
item = sub_8044D90(GetLeader(), 0, 15);
|
|
if (!sub_8048B9C(GetLeader(), item)) {
|
|
sub_8044C10(1);
|
|
}
|
|
}
|
|
else if (action == 60) {
|
|
HandleSetItemAction(GetLeader(), TRUE);
|
|
sub_8044C10(1);
|
|
sub_803E708(0x50, 0x4D);
|
|
sub_8052210(0);
|
|
break;
|
|
}
|
|
else if (action == 61) {
|
|
HandleUnsetItemAction(GetLeader(), TRUE);
|
|
sub_8044C10(1);
|
|
sub_803E708(0x50, 0x4D);
|
|
sub_8052210(0);
|
|
break;
|
|
}
|
|
|
|
if (GetLeaderActionId() != 0)
|
|
break;
|
|
}
|
|
else if (var_28 == 2) {
|
|
sub_8044C10(1);
|
|
if (sub_8060E38(GetLeader())) {
|
|
r10 = -1;
|
|
}
|
|
|
|
if (GetLeaderActionId() == 0x1B) {
|
|
sub_8061A38(GetLeaderActionContainer(), FALSE);
|
|
sub_8044C10(1);
|
|
}
|
|
else if (GetLeaderActionId() == 0x1C) {
|
|
sub_806752C(GetLeaderActionContainer());
|
|
sub_8044C10(1);
|
|
}
|
|
else if (GetLeaderActionId() == 0x34) {
|
|
sub_8067768(GetLeaderActionContainer());
|
|
sub_8044C10(1);
|
|
}
|
|
else if (GetLeaderActionId() == 0x1A) {
|
|
sub_80615E8(GetLeaderActionContainer());
|
|
sub_8044C10(1);
|
|
}
|
|
else if (GetLeaderActionId() == 0x30) {
|
|
sub_8061A38(GetLeaderActionContainer(), TRUE);
|
|
sub_8044C10(1);
|
|
}
|
|
else if (GetLeaderActionId() == 0x19) {
|
|
s32 i, count;
|
|
|
|
sub_8062D8C(GetLeaderActionContainer());
|
|
count = 0;
|
|
for (i = 0; i < MAX_TEAM_MEMBERS; i++) {
|
|
Entity *teamMon = gDungeon->teamPokemon[i];
|
|
if (EntityExists(teamMon)) {
|
|
if (i == GetLeaderActionContainer()->unk4[0].actionUseIndex) {
|
|
gUnknown_202F260 = count;
|
|
if (GetLeaderActionId() != 0) {
|
|
sub_806A2BC(teamMon, 0);
|
|
}
|
|
break;
|
|
}
|
|
count++;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (GetLeaderActionId() != 0)
|
|
break;
|
|
}
|
|
else if (var_28 == 0) {
|
|
s32 i, r7, r8, r9, r4;
|
|
Entity *r6;
|
|
|
|
r7 = 0;
|
|
sub_8044C10(1);
|
|
for (i = 0; i < MAX_TEAM_MEMBERS; i++) {
|
|
Entity *teamMon = gDungeon->teamPokemon[i];
|
|
if (EntityExists(teamMon)) {
|
|
if (teamMon->info->isTeamLeader) {
|
|
r7 = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
while (1) {
|
|
sub_8044C10(0);
|
|
LOOP_START_NO_CALL: // Actions 6 and 7 don't call sub_8044C10
|
|
r6 = NULL;
|
|
r9 = 0;
|
|
r8 = 0;
|
|
for (i = 0; i < MAX_TEAM_MEMBERS; i++) {
|
|
Entity *teamMon = gDungeon->teamPokemon[i];
|
|
if (sub_8071A8C(teamMon)) {
|
|
if (i == r7) {
|
|
r9 = r8;
|
|
r6 = teamMon;
|
|
}
|
|
r8++;
|
|
}
|
|
}
|
|
if (r6 == NULL) {
|
|
r6 = GetLeader();
|
|
}
|
|
|
|
sub_806A2BC(r6, 0);
|
|
sub_804A728(&r6->pos, 0, 1, 1);
|
|
GetLeaderInfo()->action.unk4[0].actionUseIndex = r7;
|
|
sub_8044C10(0);
|
|
if (sub_8062F90(r6, 0, 1, r9, r8)) {
|
|
r10 = -1;
|
|
}
|
|
|
|
if (GetLeaderActionId() == 6) {
|
|
r4 = r7;
|
|
for (i = 0; i < MAX_TEAM_MEMBERS; i++) {
|
|
if (++r7 >= MAX_TEAM_MEMBERS) {
|
|
r7 = 0;
|
|
}
|
|
r6 = gDungeon->teamPokemon[r7];
|
|
if (sub_8071A8C(r6))
|
|
break;
|
|
}
|
|
GetLeaderInfo()->action.unk4[0].actionUseIndex = r7;
|
|
if (r4 != r7) {
|
|
sub_8083CE0(0);
|
|
}
|
|
goto LOOP_START_NO_CALL;
|
|
}
|
|
else if (GetLeaderActionId() == 7) {
|
|
r4 = r7;
|
|
for (i = 0; i < MAX_TEAM_MEMBERS; i++) {
|
|
if (--r7 < 0) {
|
|
r7 = MAX_TEAM_MEMBERS - 1;
|
|
}
|
|
r6 = gDungeon->teamPokemon[r7];
|
|
if (sub_8071A8C(r6))
|
|
break;
|
|
}
|
|
GetLeaderInfo()->action.unk4[0].actionUseIndex = r7;
|
|
if (r4 != r7) {
|
|
sub_8083CE0(0);
|
|
}
|
|
goto LOOP_START_NO_CALL;
|
|
}
|
|
else if (GetLeaderActionId() == 0x1D) {
|
|
sub_80637E8(GetLeaderActionContainer());
|
|
|
|
}
|
|
else if (GetLeaderActionId() == 0x1E || GetLeaderActionId() == 0x33) {
|
|
sub_8063A70(GetLeaderActionContainer(), FALSE);
|
|
|
|
}
|
|
else if (GetLeaderActionId() == 0x1F) {
|
|
sub_8063B54(GetLeaderActionContainer());
|
|
|
|
}
|
|
else if (GetLeaderActionId() == 0x20) {
|
|
sub_8063BB4(GetLeaderActionContainer());
|
|
|
|
}
|
|
else if (GetLeaderActionId() == 0x21) {
|
|
sub_8063CF0(GetLeaderActionContainer(), FALSE);
|
|
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
sub_806A2BC(GetLeader(), 0);
|
|
sub_804A728(&GetLeader()->pos, 0, 1, 1);
|
|
if (GetLeaderActionId() != 0)
|
|
break;
|
|
}
|
|
else if (var_28 == 4) {
|
|
Entity *leader = GetLeader();
|
|
Tile *tile = GetTile(leader->pos.x, leader->pos.y);
|
|
Entity *tileObject = tile->object;
|
|
if (tileObject != NULL) {
|
|
if (GetEntityType(tileObject) == ENTITY_ITEM) {
|
|
u16 action;
|
|
|
|
sub_8044C10(1);
|
|
var_30.a0_8 = 0;
|
|
var_30.a0_16 = 1;
|
|
var_30.a0_24 = 1;
|
|
var_30.a0_32 = 1;
|
|
if (sub_805FD74(GetLeader(), &var_30)) {
|
|
// This actually doesn't do anything, it's just there to make the code match as the compiler does a `lsl r0, r0, #0x10, mov r0, r4`
|
|
leader = 0; leader = leader;
|
|
}
|
|
if (sub_805FD3C(&var_30) && sub_805FD74(GetLeader(), &var_30)) {
|
|
sub_8044C10(1);
|
|
}
|
|
|
|
action = GetLeaderActionId();
|
|
if (action == 0xC) {
|
|
sub_8044D90(GetLeader(), 0, 0x10)->flags |= ITEM_FLAG_UNPAID;
|
|
sub_8060D24(GetLeaderActionContainer());
|
|
sub_8044C10(1);
|
|
}
|
|
else if (action == 0x35) {
|
|
item = sub_8044D90(GetLeader(), 0, 0x11);
|
|
if (!sub_8048A68(GetLeader(), item)) {
|
|
sub_8044C10(1);
|
|
}
|
|
}
|
|
else if (action == 0x10) {
|
|
item = sub_8044D90(GetLeader(), 0, 0x12);
|
|
if (!sub_8048950(GetLeader(), item)) {
|
|
sub_8044C10(1);
|
|
}
|
|
}
|
|
else if (action == 0x2C) {
|
|
item = sub_8044D90(GetLeader(), 0, 0x13);
|
|
if (!sub_8048B9C(GetLeader(), item)) {
|
|
sub_8044C10(1);
|
|
}
|
|
}
|
|
if (GetLeaderActionId() != 0)
|
|
break;
|
|
}
|
|
else if (GetEntityType(tileObject) == ENTITY_TRAP) {
|
|
sub_8044C10(1);
|
|
sub_80643AC(GetLeader());
|
|
if (GetLeaderActionId() != 0)
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (tile->terrainType & TERRAIN_TYPE_STAIRS) {
|
|
sub_8044C10(1);
|
|
sub_80647F0(GetLeader());
|
|
if (GetLeaderActionId() != 0)
|
|
break;
|
|
}
|
|
else {
|
|
SetMessageArgument(gAvailablePokemonNames, GetLeader(), 0);
|
|
PrintFieldMessage(0, gUnknown_80FDE18, 1);
|
|
}
|
|
}
|
|
r10 = -1;
|
|
}
|
|
else if (var_28 == 3) {
|
|
sub_8064BE0();
|
|
if (gDungeon->unk4)
|
|
break;
|
|
if (GetLeaderActionId() != 0)
|
|
break;
|
|
r10 = -1;
|
|
}
|
|
|
|
if (var_28 < 0)
|
|
break;
|
|
|
|
if (var_24 == 0) {
|
|
ResetRepeatTimers();
|
|
ResetUnusedInputStruct();
|
|
}
|
|
else {
|
|
sub_806A2BC(GetLeader(), 0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
sub_803EAF0(0, NULL);
|
|
ResetRepeatTimers();
|
|
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.x = 0;
|
|
sub_801317C(&gUnknown_202EE10.unk28);
|
|
sub_80137B0(&gUnknown_202EE10, 0x38);
|
|
if (a0) {
|
|
sub_803EAF0(7, NULL);
|
|
}
|
|
else {
|
|
sub_803EAF0(6, NULL);
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
|
|
bool8 sub_805FBE8(u8 *a0)
|
|
{
|
|
s32 r4;
|
|
sub_803EAF0(8, a0);
|
|
do
|
|
{
|
|
sub_803E46C(0xE);
|
|
xxx_draw_string_80144C4();
|
|
r4 = sub_8016080();
|
|
} while (r4 == 0);
|
|
CleanConfirmNameMenu();
|
|
sub_803E46C(0xE);
|
|
sub_803EAF0(0, NULL);
|
|
if (r4 == 3 && *a0 != 0)
|
|
return TRUE;
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
extern u8 *sub_8044EC8(s32 param_1);
|
|
extern bool8 sub_8044F3C(s32 param_1);
|
|
extern s32 gUnknown_202EE6C;
|
|
extern const u8 gUnknown_8106B50[];
|
|
|
|
extern void sub_803ECB4(struct UnkTextStruct2 *a0, u8 a1);
|
|
|
|
// Inline needed to match.
|
|
static inline void SetUpTxtStructs(struct UnkTextStruct2 *sp, struct UnkTextStruct2 *a0, u32 size)
|
|
{
|
|
memset(sp, 0, size);
|
|
sp[0].unk4 = 3;
|
|
sp[1].unk4 = 3;
|
|
sp[1].unk8.unk0.separate.unk0 = 0x16;
|
|
sp[1].unk8.unk0.separate.unk2 = 4;
|
|
sp[1].unkC = 6;
|
|
sp[1].unkE = 4;
|
|
sp[1].unk10 = 4;
|
|
sp[2].unk4 = 3;
|
|
sp[3].unk4 = 3;
|
|
}
|
|
|
|
void sub_805FC30(struct UnkTextStruct2 *a0, s32 a1)
|
|
{
|
|
s32 i;
|
|
struct UnkTextStruct2 sp[4];
|
|
|
|
SetUpTxtStructs(sp, a0, sizeof(sp));
|
|
sp[0] = a0[0];
|
|
sp[0].unk0 = 0x80;
|
|
|
|
gUnknown_202EE10.menuIndex = 0;
|
|
gUnknown_202EE10.unk1C = gUnknown_202EE6C;
|
|
gUnknown_202EE10.unk1A = gUnknown_202EE6C;
|
|
gUnknown_202EE10.unk1E = 0;
|
|
gUnknown_202EE10.unk20 = 0;
|
|
gUnknown_202EE10.unk4 = 0;
|
|
gUnknown_202EE10.unk6 = 0;
|
|
gUnknown_202EE10.unk0 = 1;
|
|
gUnknown_202EE10.unkC = 0;
|
|
gUnknown_202EE10.unkE = 0;
|
|
gUnknown_202EE10.unk14 = gUnknown_202EE10.unk8;
|
|
|
|
sub_801317C(&gUnknown_202EE10.unk28);
|
|
|
|
sp[1].unk8.unk0.separate.unk0 = a1;
|
|
sp[1].unkC = 28 - a1;
|
|
sp[1].unkE = sp[1].unk10 = sub_80095E4(gUnknown_202EE10.unk1C, 0);
|
|
sub_803ECB4(sp, 0);
|
|
sub_80137B0(&gUnknown_202EE10, sp[1].unkE * 8);
|
|
sub_80073B8(1);
|
|
|
|
for (i = 0; i < gUnknown_202EE6C; i++) {
|
|
s32 r4, y;
|
|
u8 text[20];
|
|
|
|
r4 = (sub_8044F3C(i) != 0) ? 7 : 2;
|
|
sprintfStatic(text, gUnknown_8106B50, r4, sub_8044EC8(i));
|
|
y = sub_8013800(&gUnknown_202EE10, i);
|
|
xxx_call_draw_string(8, y, text, 1, 0);
|
|
}
|
|
sub_80073E0(1);
|
|
}
|