some more decomp

This commit is contained in:
Seth Barberee 2022-04-24 11:01:01 -07:00
parent 6e4fce8608
commit 1255d15326
8 changed files with 155 additions and 319 deletions

View File

@ -5,317 +5,6 @@
.text
thumb_func_start CanSee_2
CanSee_2:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _08045A58
adds r0, r4, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _08045A58
adds r0, r4, 0
adds r0, 0x20
ldrb r0, [r0]
cmp r0, 0
beq _08045A58
ldr r0, [r4]
cmp r0, 0x1
bne _08045A5C
ldr r0, [r5]
cmp r0, 0x1
bne _08045A4E
adds r0, r5, 0
bl CanSeeInvisible
lsls r0, 24
cmp r0, 0
bne _08045A48
ldr r0, [r4, 0x70]
adds r0, 0xE4
ldrb r0, [r0]
cmp r0, 0x1
beq _08045A58
_08045A48:
ldr r0, [r5, 0x70]
adds r0, 0xE8
b _08045A52
_08045A4E:
ldr r0, [r4, 0x70]
adds r0, 0xE4
_08045A52:
ldrb r0, [r0]
cmp r0, 0x1
bne _08045A5C
_08045A58:
movs r0, 0
b _08045A68
_08045A5C:
adds r0, r5, 0x4
adds r1, r4, 0x4
bl InSameRoom_3
lsls r0, 24
lsrs r0, 24
_08045A68:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end CanSee_2
thumb_func_start sub_8045A70
sub_8045A70:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _08045AA4
adds r0, r4, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _08045AA4
adds r0, r4, 0
adds r0, 0x20
ldrb r0, [r0]
cmp r0, 0
beq _08045AA4
adds r0, r5, 0x4
adds r1, r4, 0x4
bl InSameRoom_2
lsls r0, 24
lsrs r0, 24
b _08045AA6
_08045AA4:
movs r0, 0
_08045AA6:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_8045A70
thumb_func_start sub_8045AAC
sub_8045AAC:
push {lr}
adds r0, 0x4
bl InSameRoom_2
lsls r0, 24
lsrs r0, 24
pop {r1}
bx r1
thumb_func_end sub_8045AAC
thumb_func_start InSameRoom
InSameRoom:
push {lr}
adds r0, 0x4
bl InSameRoom_3
lsls r0, 24
lsrs r0, 24
pop {r1}
bx r1
thumb_func_end InSameRoom
thumb_func_start sub_8045ACC
sub_8045ACC:
push {r4-r7,lr}
movs r6, 0
movs r5, 0
ldr r7, _08045B50
_08045AD4:
ldr r0, [r7]
lsls r1, r5, 2
ldr r2, _08045B54
adds r0, r2
adds r0, r1
ldr r4, [r0]
adds r0, r4, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _08045AFA
ldr r0, [r7]
lsls r1, r6, 2
ldr r2, _08045B58
adds r0, r2
adds r0, r1
str r4, [r0]
adds r6, 0x1
_08045AFA:
adds r5, 0x1
cmp r5, 0x3
ble _08045AD4
movs r5, 0
ldr r7, _08045B50
_08045B04:
ldr r0, [r7]
lsls r1, r5, 2
ldr r2, _08045B5C
adds r0, r2
adds r0, r1
ldr r4, [r0]
adds r0, r4, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _08045B2A
ldr r0, [r7]
lsls r1, r6, 2
ldr r2, _08045B58
adds r0, r2
adds r0, r1
str r4, [r0]
adds r6, 0x1
_08045B2A:
adds r5, 0x1
cmp r5, 0xF
ble _08045B04
cmp r6, 0x13
bgt _08045B4A
ldr r4, _08045B50
ldr r3, _08045B58
movs r2, 0
_08045B3A:
ldr r0, [r4]
lsls r1, r6, 2
adds r0, r3
adds r0, r1
str r2, [r0]
adds r6, 0x1
cmp r6, 0x13
ble _08045B3A
_08045B4A:
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08045B50: .4byte gDungeonGlobalData
_08045B54: .4byte 0x0001357c
_08045B58: .4byte 0x000135cc
_08045B5C: .4byte 0x0001358c
thumb_func_end sub_8045ACC
thumb_func_start sub_8045B60
sub_8045B60:
push {r4,lr}
adds r3, r0, 0
movs r2, 0
ldr r0, _08045B78
ldr r0, [r0]
ldr r4, _08045B7C
adds r1, r0, r4
_08045B6E:
ldr r0, [r1]
cmp r3, r0
bne _08045B80
adds r0, r2, 0
b _08045B8C
.align 2, 0
_08045B78: .4byte gDungeonGlobalData
_08045B7C: .4byte 0x0001357c
_08045B80:
adds r1, 0x4
adds r2, 0x1
cmp r2, 0x3
ble _08045B6E
movs r0, 0x1
negs r0, r0
_08045B8C:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_8045B60
thumb_func_start SetMessageArgument
SetMessageArgument:
push {r4-r6,lr}
adds r5, r0, 0
adds r4, r1, 0
adds r6, r2, 0
adds r0, r4, 0
bl GetEntityType
cmp r0, 0x2
beq _08045BD2
cmp r0, 0x2
bhi _08045BB0
cmp r0, 0x1
beq _08045BB6
b _08045BE2
_08045BB0:
cmp r0, 0x3
beq _08045BC2
b _08045BE2
_08045BB6:
ldr r1, [r4, 0x70]
adds r0, r5, 0
adds r2, r6, 0
bl SetMessageArgument_2
b _08045BEC
_08045BC2:
adds r0, r4, 0
bl sub_8045110
adds r1, r0, 0
adds r0, r5, 0
bl sub_8045BF8
b _08045BEC
_08045BD2:
adds r0, r4, 0
bl sub_804510C
ldrb r1, [r0]
adds r0, r5, 0
bl GetTrapName
b _08045BEC
_08045BE2:
ldr r0, _08045BF4
ldr r1, [r0]
adds r0, r5, 0
bl strcpy
_08045BEC:
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_08045BF4: .4byte gUnknown_80FE6F4
thumb_func_end SetMessageArgument
thumb_func_start sub_8045BF8
sub_8045BF8:
push {lr}
ldr r2, _08045C04
bl sub_8090E14
pop {r0}
bx r0
.align 2, 0
_08045C04: .4byte gUnknown_80F699C
thumb_func_end sub_8045BF8
thumb_func_start sub_8045C08
sub_8045C08:
push {lr}
ldr r2, _08045C14
bl sub_8090E14
pop {r0}
bx r0
.align 2, 0
_08045C14: .4byte gUnknown_80F69A8
thumb_func_end sub_8045C08
thumb_func_start sub_8045C18
sub_8045C18:
push {lr}
ldr r2, _08045C24
bl sub_8090E14
pop {r0}
bx r0
.align 2, 0
_08045C24: .4byte gUnknown_80F6990
thumb_func_end sub_8045C18
thumb_func_start sub_8045C28
sub_8045C28:
push {r4-r7,lr}
@ -2427,4 +2116,4 @@ _08046CA8: .4byte 0x0000052c
_08046CAC: .4byte 0x0000048c
thumb_func_end sub_804687C
.align 2, 0
.align 2, 0

View File

@ -505,7 +505,7 @@ _0805DCCC:
movs r1, 0x14
bl SetAction
mov r0, r10
bl sub_8045B60
bl GetTeamMemberEntityIndex
mov r1, r8
adds r1, 0x48
strb r0, [r1]
@ -11139,7 +11139,7 @@ _080632BC:
beq _080632DE
_080632CC:
mov r0, r8
bl sub_8045B60
bl GetTeamMemberEntityIndex
adds r2, r0, 0
adds r0, r7, 0
adds r1, r6, 0
@ -11202,7 +11202,7 @@ _0806334A:
cmp r0, 0
beq _08063384
mov r0, r8
bl sub_8045B60
bl GetTeamMemberEntityIndex
adds r1, r0, 0
adds r0, r4, 0
bl sub_80637A4
@ -24560,4 +24560,4 @@ _08069D6C:
bx r0
thumb_func_end sub_8069D4C
.align 2, 0
.align 2, 0

View File

@ -12,5 +12,6 @@ u32 GetEntityType(struct DungeonEntity *entity);
struct DungeonEntityData *GetTrapData(struct DungeonEntity *entity);
struct ItemSlot *GetItemData(struct DungeonEntity *entity);
struct MapTile *GetMapTileForDungeonEntity_2(struct DungeonEntity *entity);
struct ItemSlot *GetItemData_1(struct DungeonEntity *entity);
#endif

View File

@ -4,5 +4,9 @@
#include "dungeon_entity.h"
bool8 CanSee(struct DungeonEntity *entity, struct DungeonEntity *targetEntity);
bool8 CanSee_2(struct DungeonEntity *entity, struct DungeonEntity *targetEntity);
bool8 sub_8045A70(struct DungeonEntity *entity, struct DungeonEntity *targetEntity);
bool8 sub_8045AAC(struct DungeonEntity *entity, struct Position *pos);
bool8 InSameRoom(struct DungeonEntity *entity, struct Position *pos);
#endif

View File

@ -195,6 +195,7 @@ SECTIONS {
src/dungeon_util.o(.text);
asm/code_80450F8.o(.text);
src/dungeon_visibility.o(.text);
src/code_8045A00.o(.text);
asm/code_8045A00.o(.text);
src/dungeon_items.o(.text);
asm/code_8046CE4.o(.text);

92
src/code_8045A00.c Normal file
View File

@ -0,0 +1,92 @@
#include "global.h"
#include "dungeon_global_data.h"
#include "dungeon_util.h"
extern u8 *gUnknown_80FE6F4[];
extern struct unkStruct_8090F58 gUnknown_80F699C;
extern struct unkStruct_8090F58 gUnknown_80F69A8;
extern struct unkStruct_8090F58 gUnknown_80F6990;
extern struct DungeonEntityData* GetTrapData_1(struct DungeonEntity *entity);
extern void SetMessageArgument_2(u8 *, struct DungeonEntityData *, u32);
extern void GetTrapName(u8 *, u8);
void sub_8045BF8(u8 *, struct ItemSlot *);
void sub_8045ACC(void)
{
struct DungeonEntity *uVar2;
s32 index;
s32 pokeCount;
pokeCount = 0;
for(index = 0; index < MAX_TEAM_MEMBERS; index++)
{
uVar2 = gDungeonGlobalData->teamPokemon[index];
if (EntityExists(uVar2)) {
gDungeonGlobalData->allPokemon[pokeCount] = uVar2;
pokeCount++;
}
}
for(index = 0; index < DUNGEON_MAX_WILD_POKEMON; index++)
{
uVar2 = gDungeonGlobalData->wildPokemon[index];
if (EntityExists(uVar2)) {
gDungeonGlobalData->allPokemon[pokeCount] = uVar2;
pokeCount++;
}
}
for (; pokeCount < DUNGEON_MAX_POKEMON; pokeCount++) {
gDungeonGlobalData->allPokemon[pokeCount] = NULL;
}
}
s32 GetTeamMemberEntityIndex(struct DungeonEntity *entity)
{
struct DungeonEntity *uVar2;
s32 index;
for(index = 0; index < MAX_TEAM_MEMBERS; index++)
{
uVar2 = gDungeonGlobalData->teamPokemon[index];
if (entity == uVar2)
return index;
}
return -1;
}
void SetMessageArgument(char *buffer, struct DungeonEntity *entity, u32 param_3)
{
switch(GetEntityType(entity))
{
case ENTITY_POKEMON:
SetMessageArgument_2(buffer, entity->entityData, param_3);
break;
case ENTITY_ITEM:
sub_8045BF8(buffer, GetItemData_1(entity));
break;
case ENTITY_TRAP:
GetTrapName(buffer, *((u8 *)GetTrapData_1(entity)));
break;
default:
strcpy(buffer, *gUnknown_80FE6F4);
break;
}
}
void sub_8045BF8(u8 *buffer, struct ItemSlot *item)
{
sub_8090E14(buffer, item, &gUnknown_80F699C);
}
void sub_8045C08(u8 *buffer, struct ItemSlot *item)
{
sub_8090E14(buffer, item, &gUnknown_80F69A8);
}
void sub_8045C18(u8 *buffer, struct ItemSlot *item)
{
sub_8090E14(buffer, item, &gUnknown_80F6990);
}

View File

@ -43,14 +43,14 @@ struct ItemSlot* GetItemData(struct DungeonEntity *entity)
return (struct ItemSlot *)entity->entityData;
}
struct DungeonEntityData* sub_804510C(struct DungeonEntity *entity)
struct DungeonEntityData* GetTrapData_1(struct DungeonEntity *entity)
{
return entity->entityData;
}
struct DungeonEntityData* sub_8045110(struct DungeonEntity *entity)
struct ItemSlot* GetItemData_1(struct DungeonEntity *entity)
{
return entity->entityData;
return (struct ItemSlot*)entity->entityData;
}
struct MapTile* GetMapTileForDungeonEntity_1(struct DungeonEntity *entity)

View File

@ -6,6 +6,8 @@
#include "dungeon_range.h"
#include "dungeon_util.h"
extern bool8 InSameRoom_3(struct Position *pos1, struct Position *pos2);
bool8 CanSee(struct DungeonEntity *entity, struct DungeonEntity *targetEntity)
{
if (!EntityExists(entity) || !EntityExists(targetEntity) || !targetEntity->visible)
@ -32,3 +34,50 @@ bool8 CanSee(struct DungeonEntity *entity, struct DungeonEntity *targetEntity)
}
return InSameRoom_2(&entity->posWorld, &targetEntity->posWorld);
}
bool8 CanSee_2(struct DungeonEntity *entity, struct DungeonEntity *targetEntity)
{
if (!EntityExists(entity) || !EntityExists(targetEntity) || !targetEntity->visible)
{
return FALSE;
}
if (targetEntity->entityType == ENTITY_POKEMON)
{
if (entity->entityType == ENTITY_POKEMON)
{
if (!CanSeeInvisible(entity) && targetEntity->entityData->transformStatus == TRANSFORM_STATUS_INVISIBLE)
{
return FALSE;
}
if (entity->entityData->eyesightStatus == EYESIGHT_STATUS_BLINKER)
{
return FALSE;
}
}
else if (targetEntity->entityData->transformStatus == TRANSFORM_STATUS_INVISIBLE)
{
return FALSE;
}
}
return InSameRoom_3(&entity->posWorld, &targetEntity->posWorld);
}
bool8 sub_8045A70(struct DungeonEntity *entity, struct DungeonEntity *targetEntity)
{
if (EntityExists(entity) && EntityExists(targetEntity) && targetEntity->visible)
{
return InSameRoom_2(&entity->posWorld, &targetEntity->posWorld);
}
return FALSE;
}
bool8 sub_8045AAC(struct DungeonEntity *entity, struct Position *pos)
{
return InSameRoom_2(&entity->posWorld, pos);
}
bool8 InSameRoom(struct DungeonEntity *entity, struct Position *pos)
{
return InSameRoom_3(&entity->posWorld, pos);
}