sub_8073D14

This commit is contained in:
DizzyEggg
2024-09-12 16:58:58 +02:00
parent 1cdff31053
commit 1de0617082
4 changed files with 178 additions and 453 deletions

View File

@@ -5,451 +5,6 @@
.text
thumb_func_start sub_8073D14
sub_8073D14:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0xB0
adds r6, r0, 0
ldr r4, [r6, 0x70]
bl GetTileAtEntitySafe
ldr r5, [r0, 0x14]
cmp r5, 0
bne _08073D30
b _0807407A
_08073D30:
bl sub_8044B28
lsls r0, 24
cmp r0, 0
beq _08073D3C
b _0807407A
_08073D3C:
ldr r0, _08073D68
adds r1, r6, 0
movs r2, 0
bl SetMessageArgument
ldrb r0, [r4, 0x7]
cmp r0, 0
beq _08073D4E
b _0807407A
_08073D4E:
ldrb r0, [r4, 0x8]
cmp r0, 0x1
bne _08073D56
b _0807407A
_08073D56:
adds r0, r4, 0
adds r0, 0x40
ldrb r0, [r0]
cmp r0, 0x4A
beq _08073D64
cmp r0, 0x47
bne _08073D6C
_08073D64:
movs r0, 0x1
b _08073D6E
.align 2, 0
_08073D68: .4byte gAvailablePokemonNames
_08073D6C:
movs r0, 0
_08073D6E:
cmp r0, 0
beq _08073D74
b _0807407A
_08073D74:
adds r0, r4, 0
adds r0, 0xA4
ldrb r0, [r0]
cmp r0, 0x1
bne _08073D80
b _0807407A
_08073D80:
ldr r0, [r6, 0x70]
mov r10, r0
adds r0, r5, 0
bl GetItemData
adds r5, r0, 0
ldrb r1, [r5]
movs r0, 0x2
ands r0, r1
cmp r0, 0
beq _08073D98
b _0807407A
_08073D98:
adds r0, r6, 0
movs r1, 0x1
bl ShouldMonsterRunAwayAndShowEffect
lsls r0, 24
cmp r0, 0
beq _08073DC8
ldr r0, _08073DBC
adds r1, r5, 0
bl sub_8045BF8
ldr r0, _08073DC0
adds r1, r6, 0
movs r2, 0
bl SetMessageArgument
ldr r0, _08073DC4
b _0807404C
.align 2, 0
_08073DBC: .4byte gUnknown_202DE58
_08073DC0: .4byte gAvailablePokemonNames
_08073DC4: .4byte gUnknown_80F8F88
_08073DC8:
mov r1, r10
ldrb r0, [r1, 0x6]
cmp r0, 0
bne _08073E24
ldrb r0, [r5, 0x2]
bl GetItemCategory
lsls r0, 24
lsrs r0, 24
cmp r0, 0x6
bne _08073E24
mov r7, r10
ldrb r0, [r7, 0x6]
cmp r0, 0
beq _08073DF4
ldr r0, _08073DF0
bl PlaySoundEffect
b _08073DFC
.align 2, 0
_08073DF0: .4byte 0x0000014b
_08073DF4:
movs r0, 0xA6
lsls r0, 1
bl PlaySoundEffect
_08073DFC:
adds r0, r5, 0
bl GetMoneyValue
bl AddToTeamMoney
ldr r0, _08073E1C
adds r1, r5, 0
bl sub_8045BF8
adds r0, r6, 0x4
movs r1, 0x1
bl sub_80461C8
ldr r0, _08073E20
b _0807404C
.align 2, 0
_08073E1C: .4byte gUnknown_202DE58
_08073E20: .4byte gUnknown_80F9054
_08073E24:
ldr r0, _08073E64
ldr r0, [r0]
ldr r1, _08073E68
adds r0, r1
ldrb r0, [r0]
cmp r0, 0
beq _08073E70
mov r7, r10
ldrb r0, [r7, 0x6]
cmp r0, 0
bne _08073E70
movs r4, 0
add r2, sp, 0x54
adds r7, 0x60
ldr r0, _08073E6C
mov r1, sp
ldr r0, [r0]
adds r3, r2, 0
_08073E48:
stm r3!, {r0}
stm r1!, {r4}
adds r0, 0x4
adds r4, 0x1
cmp r4, 0x13
ble _08073E48
str r7, [r2, 0x50]
movs r0, 0x1
negs r0, r0
str r0, [sp, 0x50]
movs r0, 0x15
mov r8, r0
b _08073E80
.align 2, 0
_08073E64: .4byte gDungeon
_08073E68: .4byte 0x0000065b
_08073E6C: .4byte gTeamInventoryRef
_08073E70:
mov r0, r10
adds r0, 0x60
str r0, [sp, 0x54]
movs r0, 0x1
negs r0, r0
str r0, [sp]
movs r1, 0x1
mov r8, r1
_08073E80:
ldrb r0, [r5, 0x2]
add r7, sp, 0xA8
strb r0, [r7]
adds r0, r7, 0
ldrb r0, [r0]
cmp r0, 0x8
bls _08073E90
b _08073FA8
_08073E90:
ldrb r1, [r5]
movs r0, 0x2
ands r0, r1
cmp r0, 0
beq _08073E9C
b _08073FA8
_08073E9C:
movs r1, 0x1
negs r1, r1
mov r12, r1
mov r7, r12
str r7, [sp, 0xAC]
movs r4, 0
cmp r4, r8
bge _08073EEC
ldr r0, _08073F94
mov r9, r0
add r3, sp, 0x54
_08073EB2:
ldr r2, [r3]
ldrb r1, [r2]
movs r0, 0x1
ands r0, r1
cmp r0, 0
beq _08073EE4
movs r0, 0x2
ands r0, r1
cmp r0, 0
bne _08073EE4
ldr r1, [r5]
mov r7, r9
ands r1, r7
ldr r0, [r2]
ands r0, r7
cmp r1, r0
bne _08073EE4
ldrb r0, [r2, 0x1]
cmp r0, 0x63
beq _08073EE4
ldr r1, [sp, 0xAC]
cmp r1, r0
bge _08073EE4
str r0, [sp, 0xAC]
mov r12, r4
_08073EE4:
adds r3, 0x4
adds r4, 0x1
cmp r4, r8
blt _08073EB2
_08073EEC:
movs r0, 0x1
negs r0, r0
cmp r12, r0
bne _08073F40
mov r7, r12
str r7, [sp, 0xAC]
movs r4, 0
cmp r4, r8
bge _08073F38
add r0, sp, 0xA8
ldrb r0, [r0]
mov r9, r0
add r3, sp, 0x54
_08073F06:
ldr r2, [r3]
ldrb r1, [r2]
movs r0, 0x1
ands r0, r1
cmp r0, 0
beq _08073F30
movs r0, 0x2
ands r0, r1
cmp r0, 0
bne _08073F30
ldrb r1, [r2, 0x2]
cmp r9, r1
bne _08073F30
ldrb r0, [r2, 0x1]
cmp r0, 0x63
beq _08073F30
ldr r7, [sp, 0xAC]
cmp r7, r0
bge _08073F30
str r0, [sp, 0xAC]
mov r12, r4
_08073F30:
adds r3, 0x4
adds r4, 0x1
cmp r4, r8
blt _08073F06
_08073F38:
movs r0, 0x1
negs r0, r0
cmp r12, r0
beq _08073FA8
_08073F40:
add r0, sp, 0x54
mov r1, r12
lsls r4, r1, 2
adds r3, r0, r4
ldr r2, [r3]
ldrb r1, [r2, 0x1]
ldrb r0, [r5, 0x1]
adds r1, r0
cmp r1, 0x62
ble _08073F56
movs r1, 0x63
_08073F56:
strb r1, [r2, 0x1]
ldrb r1, [r5]
movs r0, 0x8
ands r0, r1
cmp r0, 0
beq _08073F6C
ldr r0, [r3]
ldrb r1, [r0]
movs r2, 0x8
orrs r1, r2
strb r1, [r0]
_08073F6C:
ldr r0, _08073F98
adds r1, r5, 0
bl sub_8045BF8
adds r0, r6, 0x4
movs r1, 0x1
bl sub_80461C8
movs r0, 0xA5
lsls r0, 1
bl PlaySoundEffect
mov r7, sp
adds r0, r7, r4
ldr r0, [r0]
cmp r0, 0
bge _08073FA0
ldr r0, _08073F9C
b _0807404C
.align 2, 0
_08073F94: .4byte 0x00ff0008
_08073F98: .4byte gUnknown_202DE58
_08073F9C: .4byte gUnknown_80F9018
_08073FA0:
ldr r0, _08073FA4
b _0807404C
.align 2, 0
_08073FA4: .4byte gUnknown_80F9050
_08073FA8:
movs r4, 0
cmp r4, r8
bge _08073FD2
ldr r0, [sp, 0x54]
ldrb r1, [r0]
movs r0, 0x1
ands r0, r1
cmp r0, 0
beq _08073FD2
movs r3, 0x1
add r2, sp, 0x54
_08073FBE:
adds r2, 0x4
adds r4, 0x1
cmp r4, r8
bge _08073FD2
ldr r0, [r2]
ldrb r1, [r0]
adds r0, r3, 0
ands r0, r1
cmp r0, 0
bne _08073FBE
_08073FD2:
cmp r4, r8
bne _08073FEC
ldr r0, _08073FE4
adds r1, r5, 0
bl sub_8045BF8
ldr r0, _08073FE8
b _0807404C
.align 2, 0
_08073FE4: .4byte gUnknown_202DE58
_08073FE8: .4byte gUnknown_80F8F54
_08073FEC:
mov r1, r10
ldrb r0, [r1, 0x6]
cmp r0, 0
beq _08074000
ldr r0, _08073FFC
bl PlaySoundEffect
b _08074008
.align 2, 0
_08073FFC: .4byte 0x0000014b
_08074000:
movs r0, 0xA5
lsls r0, 1
bl PlaySoundEffect
_08074008:
lsls r0, r4, 2
add r0, sp
ldr r0, [r0]
cmp r0, 0
bge _08074034
ldr r0, [r5]
mov r7, r10
str r0, [r7, 0x60]
ldr r0, _0807402C
adds r1, r5, 0
bl sub_8045BF8
adds r0, r6, 0x4
movs r1, 0x1
bl sub_80461C8
ldr r0, _08074030
b _0807404C
.align 2, 0
_0807402C: .4byte gUnknown_202DE58
_08074030: .4byte gUnknown_80F9018
_08074034:
adds r0, r5, 0
bl AddItemToInventory
lsls r0, 24
cmp r0, 0
beq _08074060
ldr r0, _08074058
adds r1, r6, 0
movs r2, 0
bl SetMessageArgument
ldr r0, _0807405C
_0807404C:
ldr r1, [r0]
adds r0, r6, 0
bl sub_805239C
b _0807407A
.align 2, 0
_08074058: .4byte gAvailablePokemonNames
_0807405C: .4byte gUnknown_80F8FAC
_08074060:
ldr r0, _0807408C
adds r1, r5, 0
bl sub_8045BF8
adds r0, r6, 0x4
movs r1, 0x1
bl sub_80461C8
ldr r0, _08074090
ldr r1, [r0]
adds r0, r6, 0
bl sub_805239C
_0807407A:
add sp, 0xB0
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0807408C: .4byte gUnknown_202DE58
_08074090: .4byte gUnknown_80F9050
thumb_func_end sub_8073D14
thumb_func_start sub_8074094
sub_8074094:
push {r4-r7,lr}

View File

@@ -108,4 +108,12 @@ enum DungeonID
NUM_DUNGEONS
};
static inline bool8 IsClientOrTeamBase(s32 joinedDungeon)
{
if (joinedDungeon == DUNGEON_JOIN_LOCATION_CLIENT_POKEMON || joinedDungeon == DUNGEON_RESCUE_TEAM_BASE)
return TRUE;
else
return FALSE;
}
#endif

View File

@@ -2616,14 +2616,6 @@ bool8 sub_805EC2C(Entity *a0, s32 x, s32 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;

View File

@@ -1,9 +1,23 @@
#include "global.h"
#include "dungeon_util.h"
#include "items.h"
#include "dungeon_ai_targeting.h"
#include "code_8045A00.h"
#include "structs/dungeon_entity.h"
#include "structs/map.h"
#include "dungeon_music.h"
#include "constants/dungeon.h"
extern bool8 sub_8044B28(void);
extern void sub_8067110(Entity *);
extern void sub_80671A0(Entity *);
extern void sub_8073D14(Entity *);
extern void sub_8045BF8(u8 *, Item *);
extern void sub_805239C(Entity *, const u8 *);
extern bool8 sub_80461C8(Position *, u32);
extern u8 gUnknown_202DE58[];
extern u8 gAvailablePokemonNames[];
void HandleEatAIAction(Entity *pokemon)
{
@@ -20,3 +34,159 @@ void HandlePickUpAIAction(Entity *pokemon)
sub_8073D14(pokemon);
}
extern const u8 *gUnknown_80F8F88;
extern const u8 *gUnknown_80F9054;
extern const u8 *gUnknown_80F9018;
extern const u8 *gUnknown_80F9050;
extern const u8 *gUnknown_80F8F54;
extern const u8 *gUnknown_80F8FAC;
void sub_8073D14(Entity *entity)
{
Item *groundItem;
EntityInfo *_entityInfo;
EntityInfo *entityInfo = entity->info;
Entity *tileObject = GetTileAtEntitySafe(entity)->object;
if (tileObject == NULL)
return;
if (sub_8044B28())
return;
SetMessageArgument(gAvailablePokemonNames, entity, 0);
if (entityInfo->isTeamLeader)
return;
if (entityInfo->shopkeeper == 1)
return;
if (IsClientOrTeamBase(entityInfo->joinedAt.joinedAt))
return;
if (entityInfo->clientType == 1)
return;
_entityInfo = entity->info; // Reloaded as a new variable for some reason.
groundItem = GetItemData(tileObject);
if (groundItem->flags & ITEM_FLAG_IN_SHOP)
return;
if (ShouldMonsterRunAwayAndShowEffect(entity, TRUE)) {
sub_8045BF8(gUnknown_202DE58, groundItem);
SetMessageArgument(gAvailablePokemonNames, entity, 0);
sub_805239C(entity, gUnknown_80F8F88);
}
else if (!_entityInfo->isNotTeamMember && GetItemCategory(groundItem->id) == CATEGORY_POKE) {
// Why check the same thing again?
if (_entityInfo->isNotTeamMember) {
PlaySoundEffect(0x14B);
}
else {
PlaySoundEffect(0x14C);
}
AddToTeamMoney(GetMoneyValue(groundItem));
sub_8045BF8(gUnknown_202DE58, groundItem);
sub_80461C8(&entity->pos, 1);
sub_805239C(entity, gUnknown_80F9054);
}
else {
s32 i, nItems, newInventoryId;
s32 inventoryIds[INVENTORY_SIZE + 1]; // plus held
Item *carriedItems[INVENTORY_SIZE + 1]; // plus held
s32 newQuantity;
if (gDungeon->unk65B && !_entityInfo->isNotTeamMember) {
for (i = 0; i < INVENTORY_SIZE; i++) {
carriedItems[i] = &gTeamInventoryRef->teamItems[i];
inventoryIds[i] = i;
}
carriedItems[INVENTORY_SIZE] = &_entityInfo->heldItem;
inventoryIds[INVENTORY_SIZE] = -1;
nItems = INVENTORY_SIZE + 1;
}
else {
carriedItems[0] = &_entityInfo->heldItem;
inventoryIds[0] = -1;
nItems = 1;
}
if ((groundItem->id < 9) && !(groundItem->flags & ITEM_FLAG_IN_SHOP)) {
newInventoryId = -1;
newQuantity = -1;
for (i = 0; i < nItems; i++) {
if (carriedItems[i]->flags & ITEM_FLAG_EXISTS
&& !(carriedItems[i]->flags & ITEM_FLAG_IN_SHOP)
&& ((groundItem->id == carriedItems[i]->id) && (groundItem->flags & ITEM_FLAG_STICKY) == (carriedItems[i]->flags & ITEM_FLAG_STICKY))
&& carriedItems[i]->quantity != 99 && newQuantity < carriedItems[i]->quantity)
{
newQuantity = carriedItems[i]->quantity;
newInventoryId = i;
}
}
if (newInventoryId == -1) {
newQuantity = -1;
for (i = 0; i < nItems; i++) {
if (carriedItems[i]->flags & ITEM_FLAG_EXISTS
&& !(carriedItems[i]->flags & ITEM_FLAG_IN_SHOP)
&& groundItem->id == carriedItems[i]->id
&& carriedItems[i]->quantity != 99
&& newQuantity < carriedItems[i]->quantity)
{
newQuantity = carriedItems[i]->quantity;
newInventoryId = i;
}
}
}
if (newInventoryId != -1) {
s32 quantity = carriedItems[newInventoryId]->quantity + groundItem->quantity;
if (quantity >= 99)
quantity = 99;
carriedItems[newInventoryId]->quantity = quantity;
if (groundItem->flags & ITEM_FLAG_STICKY)
carriedItems[newInventoryId]->flags |= ITEM_FLAG_STICKY;
sub_8045BF8(gUnknown_202DE58, groundItem);
sub_80461C8(&entity->pos, 1);
PlaySoundEffect(0x14A);
if (inventoryIds[newInventoryId] <= -1)
sub_805239C(entity, gUnknown_80F9018);
else
sub_805239C(entity, gUnknown_80F9050);
return;
}
}
for (i = 0; i < nItems; i++) {
if (!(carriedItems[i]->flags & ITEM_FLAG_EXISTS))
break;
}
if (i == nItems) {
sub_8045BF8(gUnknown_202DE58, groundItem);
sub_805239C(entity, gUnknown_80F8F54);
}
else {
if (_entityInfo->isNotTeamMember) {
PlaySoundEffect(0x14B);
}
else {
PlaySoundEffect(0x14A);
}
if (inventoryIds[i] <= -1) {
_entityInfo->heldItem = *groundItem;
sub_8045BF8(gUnknown_202DE58, groundItem);
sub_80461C8(&entity->pos, 1);
sub_805239C(entity, gUnknown_80F9018);
}
else if (AddItemToInventory(groundItem)) {
SetMessageArgument(gAvailablePokemonNames, entity, 0);
sub_805239C(entity, gUnknown_80F8FAC);
}
else {
sub_8045BF8(gUnknown_202DE58, groundItem);
sub_80461C8(&entity->pos, 1);
sub_805239C(entity, gUnknown_80F9050);
}
}
}
}