mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-03 01:00:09 -05:00
sub_805EE30
This commit is contained in:
parent
c79dc3e37b
commit
becf24b4ec
|
|
@ -5,420 +5,6 @@
|
|||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_805EC2C
|
||||
sub_805EC2C:
|
||||
push {lr}
|
||||
sub sp, 0x4
|
||||
lsls r1, 16
|
||||
lsls r2, 16
|
||||
lsrs r1, 16
|
||||
orrs r1, r2
|
||||
str r1, [sp]
|
||||
mov r1, sp
|
||||
bl sub_8070564
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
add sp, 0x4
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_805EC2C
|
||||
|
||||
thumb_func_start sub_805EC4C
|
||||
sub_805EC4C:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
adds r5, r0, 0
|
||||
lsls r1, 24
|
||||
lsrs r1, 24
|
||||
mov r10, r1
|
||||
ldr r7, [r5, 0x70]
|
||||
ldr r1, _0805ECC8
|
||||
adds r0, r7, 0
|
||||
adds r0, 0x46
|
||||
ldrb r0, [r0]
|
||||
lsls r0, 2
|
||||
adds r0, r1
|
||||
ldrh r1, [r0]
|
||||
ldrh r3, [r5, 0x4]
|
||||
adds r1, r3
|
||||
lsls r1, 16
|
||||
ldrh r0, [r0, 0x2]
|
||||
ldrh r3, [r5, 0x6]
|
||||
adds r0, r3
|
||||
lsls r0, 16
|
||||
lsrs r2, r1, 16
|
||||
orrs r2, r0
|
||||
lsls r0, r2, 16
|
||||
asrs r0, 16
|
||||
asrs r1, r2, 16
|
||||
bl GetTile
|
||||
ldr r0, [r0, 0x10]
|
||||
mov r8, r0
|
||||
cmp r0, 0
|
||||
bne _0805EC94
|
||||
b _0805ED96
|
||||
_0805EC94:
|
||||
mov r0, r8
|
||||
bl GetEntityType
|
||||
cmp r0, 0x1
|
||||
bne _0805ED96
|
||||
mov r0, r8
|
||||
ldr r6, [r0, 0x70]
|
||||
ldrb r0, [r6, 0x6]
|
||||
cmp r0, 0
|
||||
beq _0805ECDC
|
||||
ldrb r0, [r6, 0x8]
|
||||
subs r0, 0x1
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x1
|
||||
bls _0805ECDC
|
||||
adds r0, r6, 0
|
||||
adds r0, 0x40
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x4A
|
||||
beq _0805ECC2
|
||||
cmp r0, 0x47
|
||||
bne _0805ECCC
|
||||
_0805ECC2:
|
||||
movs r0, 0x1
|
||||
b _0805ECCE
|
||||
.align 2, 0
|
||||
_0805ECC8: .4byte gAdjacentTileOffsets
|
||||
_0805ECCC:
|
||||
movs r0, 0
|
||||
_0805ECCE:
|
||||
cmp r0, 0
|
||||
bne _0805ECDC
|
||||
adds r0, r6, 0
|
||||
adds r0, 0xA4
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x1
|
||||
bne _0805ED96
|
||||
_0805ECDC:
|
||||
adds r0, r7, 0
|
||||
adds r0, 0xB0
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x2
|
||||
beq _0805ED96
|
||||
cmp r0, 0x1
|
||||
beq _0805ED96
|
||||
cmp r0, 0x7
|
||||
beq _0805ED96
|
||||
cmp r0, 0x5
|
||||
beq _0805ED96
|
||||
cmp r0, 0x3
|
||||
beq _0805ED96
|
||||
cmp r0, 0x4
|
||||
beq _0805ED96
|
||||
adds r0, r6, 0
|
||||
adds r0, 0xB0
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x2
|
||||
beq _0805ED96
|
||||
cmp r0, 0x1
|
||||
beq _0805ED96
|
||||
cmp r0, 0x7
|
||||
beq _0805ED96
|
||||
cmp r0, 0x5
|
||||
beq _0805ED96
|
||||
cmp r0, 0x3
|
||||
beq _0805ED96
|
||||
cmp r0, 0x4
|
||||
beq _0805ED96
|
||||
adds r0, r7, 0
|
||||
adds r0, 0xBC
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x2
|
||||
beq _0805ED96
|
||||
adds r0, r6, 0
|
||||
adds r0, 0xBC
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x2
|
||||
beq _0805ED96
|
||||
adds r0, r6, 0
|
||||
adds r0, 0xA8
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _0805ED3E
|
||||
cmp r0, 0x2
|
||||
beq _0805ED3E
|
||||
cmp r0, 0x4
|
||||
bne _0805ED96
|
||||
_0805ED3E:
|
||||
adds r0, r7, 0
|
||||
adds r0, 0xA8
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _0805ED50
|
||||
cmp r0, 0x2
|
||||
beq _0805ED50
|
||||
cmp r0, 0x4
|
||||
bne _0805ED96
|
||||
_0805ED50:
|
||||
mov r0, r8
|
||||
movs r1, 0
|
||||
bl IsCharging
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0805ED96
|
||||
adds r4, r7, 0
|
||||
adds r4, 0x46
|
||||
ldrb r1, [r4]
|
||||
adds r0, r5, 0
|
||||
bl sub_8070F80
|
||||
lsls r0, 24
|
||||
mov r9, r4
|
||||
cmp r0, 0
|
||||
beq _0805ED96
|
||||
mov r1, r10
|
||||
cmp r1, 0
|
||||
beq _0805EDA0
|
||||
adds r1, r5, 0x4
|
||||
mov r0, r8
|
||||
bl sub_807049C
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0805EDA0
|
||||
ldr r0, _0805ED9C
|
||||
ldr r1, [r0]
|
||||
movs r0, 0
|
||||
movs r2, 0
|
||||
bl sub_8052B8C
|
||||
cmp r0, 0
|
||||
bne _0805EDA0
|
||||
_0805ED96:
|
||||
movs r0, 0
|
||||
b _0805EE1E
|
||||
.align 2, 0
|
||||
_0805ED9C: .4byte gUnknown_8100208
|
||||
_0805EDA0:
|
||||
adds r0, r7, 0
|
||||
adds r0, 0x44
|
||||
movs r1, 0x2
|
||||
bl SetMonsterActionFields
|
||||
ldr r0, _0805EDC0
|
||||
ldrh r1, [r0]
|
||||
movs r0, 0x2
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0805EDC4
|
||||
adds r1, r7, 0
|
||||
adds r1, 0x48
|
||||
movs r0, 0
|
||||
b _0805EDCA
|
||||
.align 2, 0
|
||||
_0805EDC0: .4byte gRealInputs
|
||||
_0805EDC4:
|
||||
adds r1, r7, 0
|
||||
adds r1, 0x48
|
||||
movs r0, 0x1
|
||||
_0805EDCA:
|
||||
strb r0, [r1]
|
||||
ldrh r0, [r7]
|
||||
movs r2, 0x80
|
||||
lsls r2, 8
|
||||
adds r5, r2, 0
|
||||
movs r4, 0
|
||||
orrs r0, r5
|
||||
strh r0, [r7]
|
||||
adds r0, r6, 0
|
||||
adds r0, 0x44
|
||||
movs r1, 0x2
|
||||
bl SetMonsterActionFields
|
||||
adds r0, r6, 0
|
||||
adds r0, 0x48
|
||||
strb r4, [r0]
|
||||
mov r3, r9
|
||||
ldrb r0, [r3]
|
||||
adds r0, 0x4
|
||||
movs r1, 0x7
|
||||
ands r0, r1
|
||||
adds r1, r6, 0
|
||||
adds r1, 0x46
|
||||
strb r0, [r1]
|
||||
ldrh r0, [r6]
|
||||
orrs r0, r5
|
||||
strh r0, [r6]
|
||||
mov r0, r8
|
||||
ldrh r1, [r0, 0x4]
|
||||
movs r2, 0xB6
|
||||
lsls r2, 1
|
||||
adds r0, r6, r2
|
||||
strh r1, [r0]
|
||||
mov r3, r8
|
||||
ldrh r0, [r3, 0x6]
|
||||
adds r2, 0x2
|
||||
adds r1, r6, r2
|
||||
strh r0, [r1]
|
||||
ldr r0, _0805EE2C
|
||||
ldr r1, [r0]
|
||||
movs r0, 0x1
|
||||
strb r0, [r1, 0xE]
|
||||
_0805EE1E:
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0805EE2C: .4byte gDungeon
|
||||
thumb_func_end sub_805EC4C
|
||||
|
||||
thumb_func_start sub_805EE30
|
||||
sub_805EE30:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
bl GetLeader
|
||||
adds r5, r0, 0
|
||||
cmp r5, 0
|
||||
bne _0805EE42
|
||||
b _0805EF52
|
||||
_0805EE42:
|
||||
bl sub_8044B28
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0805EE4E
|
||||
b _0805EF52
|
||||
_0805EE4E:
|
||||
adds r0, r5, 0
|
||||
bl GetTileAtEntitySafe
|
||||
adds r4, r0, 0
|
||||
adds r0, r5, 0
|
||||
movs r1, 0xD
|
||||
bl IQSkillIsEnabled
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0805EE82
|
||||
ldr r0, [r5, 0x70]
|
||||
adds r0, 0xE4
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x3
|
||||
beq _0805EE82
|
||||
adds r0, r5, 0
|
||||
movs r1, 0x9
|
||||
bl HasHeldItem
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0805EE82
|
||||
adds r0, r5, 0x4
|
||||
bl sub_804AE84
|
||||
_0805EE82:
|
||||
ldrh r1, [r4]
|
||||
movs r0, 0x80
|
||||
lsls r0, 2
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0805EE96
|
||||
ldr r0, _0805EEB0
|
||||
ldr r1, [r0]
|
||||
movs r0, 0x1
|
||||
strb r0, [r1, 0x1]
|
||||
_0805EE96:
|
||||
ldr r4, [r4, 0x14]
|
||||
cmp r4, 0
|
||||
beq _0805EF52
|
||||
adds r0, r4, 0
|
||||
bl GetEntityType
|
||||
cmp r0, 0x5
|
||||
bhi _0805EF52
|
||||
lsls r0, 2
|
||||
ldr r1, _0805EEB4
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_0805EEB0: .4byte gDungeon
|
||||
_0805EEB4: .4byte _0805EEB8
|
||||
.align 2, 0
|
||||
_0805EEB8:
|
||||
.4byte _0805EF52
|
||||
.4byte _0805EF52
|
||||
.4byte _0805EED0
|
||||
.4byte _0805EF2A
|
||||
.4byte _0805EF52
|
||||
.4byte _0805EF52
|
||||
_0805EED0:
|
||||
adds r0, r4, 0
|
||||
bl GetTrapData
|
||||
adds r6, r0, 0
|
||||
movs r0, 0
|
||||
mov r8, r0
|
||||
movs r7, 0
|
||||
adds r0, r5, 0
|
||||
movs r1, 0x13
|
||||
bl IQSkillIsEnabled
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0805EF00
|
||||
adds r1, r4, 0
|
||||
adds r1, 0x20
|
||||
ldrb r0, [r1]
|
||||
cmp r0, 0
|
||||
bne _0805EF00
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
bl sub_8049ED4
|
||||
movs r7, 0x1
|
||||
_0805EF00:
|
||||
ldrb r0, [r6, 0x1]
|
||||
cmp r0, 0
|
||||
beq _0805EF18
|
||||
cmp r0, 0x1
|
||||
beq _0805EF52
|
||||
cmp r0, 0x2
|
||||
bne _0805EF12
|
||||
movs r1, 0x1
|
||||
mov r8, r1
|
||||
_0805EF12:
|
||||
mov r0, r8
|
||||
cmp r0, 0
|
||||
beq _0805EF52
|
||||
_0805EF18:
|
||||
cmp r7, 0
|
||||
bne _0805EF52
|
||||
adds r1, r5, 0x4
|
||||
adds r0, r5, 0
|
||||
movs r2, 0
|
||||
movs r3, 0x1
|
||||
bl sub_807FE9C
|
||||
b _0805EF52
|
||||
_0805EF2A:
|
||||
adds r0, r4, 0
|
||||
bl GetItemData
|
||||
ldrb r1, [r0]
|
||||
movs r0, 0x2
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
bne _0805EF44
|
||||
adds r0, r5, 0x4
|
||||
movs r1, 0x1
|
||||
bl sub_8045DB4
|
||||
b _0805EF52
|
||||
_0805EF44:
|
||||
ldr r0, _0805EF5C
|
||||
ldr r0, [r0]
|
||||
movs r1, 0xB8
|
||||
lsls r1, 3
|
||||
adds r0, r1
|
||||
movs r1, 0x4
|
||||
str r1, [r0]
|
||||
_0805EF52:
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_0805EF5C: .4byte gDungeon
|
||||
thumb_func_end sub_805EE30
|
||||
|
||||
thumb_func_start sub_805EF60
|
||||
sub_805EF60:
|
||||
push {r4-r6,lr}
|
||||
|
|
|
|||
|
|
@ -6,16 +6,29 @@
|
|||
#include "code_80521D0.h"
|
||||
#include "dungeon_action.h"
|
||||
#include "dungeon_ai_targeting.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "trap.h"
|
||||
#include "charge_move.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "game_options.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 "items.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"
|
||||
|
||||
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);
|
||||
void sub_806A2BC(Entity *a0, u8 a1);
|
||||
bool8 sub_805E874(void);
|
||||
bool8 sub_80701A4(Entity *a0);
|
||||
|
|
@ -24,6 +37,7 @@ 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_8075680(u32);
|
||||
void sub_8094C88(void);
|
||||
void sub_8040A84(void);
|
||||
|
|
@ -39,7 +53,7 @@ void sub_805E2C4(Entity *leader);
|
|||
bool8 sub_8094C48(void);
|
||||
void sub_8052210(u8 a0);
|
||||
void sub_803E46C(s32 a0);
|
||||
bool8 sub_805EC4C(Entity *a0, u16 a1);
|
||||
bool8 sub_805EC4C(Entity *a0, u8 a1);
|
||||
void sub_803E724(s32 a0);
|
||||
void HandleTalkFieldAction(Entity *);
|
||||
bool8 sub_8044B28(void);
|
||||
|
|
@ -47,6 +61,7 @@ bool8 IsNotAttacking(Entity *param_1, bool8 param_2);
|
|||
void ShowFieldMenu(u8 a0, u8 a1);
|
||||
bool8 sub_805EF60(Entity *a0, EntityInfo *a1);
|
||||
s32 GetTeamMemberEntityIndex(Entity *pokemon);
|
||||
bool8 sub_8070F80(Entity * pokemon, s32 direction);
|
||||
|
||||
extern u8 gUnknown_202F22D;
|
||||
extern u8 gUnknown_202F22C;
|
||||
|
|
@ -63,6 +78,7 @@ 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;
|
||||
|
||||
#ifdef NONMATCHING
|
||||
|
||||
|
|
@ -2525,3 +2541,147 @@ bool8 sub_805E874(void)
|
|||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user