mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-25 15:46:18 -05:00
some more decomp
This commit is contained in:
parent
6e4fce8608
commit
1255d15326
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
92
src/code_8045A00.c
Normal 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);
|
||||
}
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user