mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-03 09:10:20 -05:00
676 lines
15 KiB
C
676 lines
15 KiB
C
#include "global.h"
|
|
#include "structs/str_dungeon.h"
|
|
#include "code_803E724.h"
|
|
#include "code_80450F8.h"
|
|
#include "dungeon_map_access.h"
|
|
#include "dungeon_range.h"
|
|
#include "dungeon_util.h"
|
|
#include "tile_types.h"
|
|
|
|
// Related to sub_80828E0
|
|
// 93.08% https://decomp.me/scratch/AYGBN
|
|
/*Entity *sub_80453AC(s16 id)
|
|
{
|
|
s32 something; // r1
|
|
s32 uVar8; // r2
|
|
Entity *entity; // r4
|
|
s32 r5;
|
|
u8 bodySize; // r6
|
|
s32 id_; // r8
|
|
//register s32 id_ asm("r8"); // r8
|
|
s32 r9;
|
|
|
|
id_ = id; // SpeciesId() ?
|
|
r9 = -1;
|
|
bodySize = GetBodySize(id_);
|
|
|
|
for (r5 = 0; r5 <= MAX_TEAM_BODY_SIZE - bodySize; r5++) {
|
|
for (uVar8 = 0; uVar8 < bodySize; uVar8++) {
|
|
if (gUnknown_202EE70[r5 + uVar8] != 0)
|
|
break;
|
|
}
|
|
|
|
if (uVar8 == bodySize) {
|
|
r9 = r5;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (r9 != -1) {
|
|
for (r5 = 0; r5 < MAX_TEAM_MEMBERS; r5++) {
|
|
entity = gDungeon->teamPokemon[r5];
|
|
if (!EntityExists(entity)) {
|
|
entity->type = ENTITY_MONSTER;
|
|
entity->unk24 = r5;
|
|
entity->axObj.info = &gDungeon->unk69C[r5];
|
|
entity->axObj.info->id = id_;
|
|
entity->axObj.info->apparentID = sub_8069F54(NULL, id_);
|
|
entity->axObj.info->isNotTeamMember = FALSE;
|
|
|
|
entity->axObj.spriteFile = GetSpriteData(sub_8069F54(NULL, id_));
|
|
entity->axObj.unk40_maybeAnimTimer = (r9 * 0x10) + 0x40;
|
|
entity->axObj.unk42_animId1 = 7;
|
|
entity->axObj.unk44_direction1 = 0;
|
|
entity->axObj.unk43_animId2 = 0xFF;
|
|
entity->axObj.unk45_orientation = 1;
|
|
entity->axObj.unk47 = 1;
|
|
|
|
entity->unk1C = 0;
|
|
sub_8045ACC();
|
|
entity->axObj.info->unk167 = r9;
|
|
entity->axObj.info->unk168 = bodySize;
|
|
|
|
for (something = 0; something < bodySize; something++) {
|
|
gUnknown_202EE70[r9] = 1;
|
|
r9++;
|
|
}
|
|
|
|
entity->spawnGenID = gDungeon->unk668++;
|
|
return entity;
|
|
}
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}*/
|
|
NAKED
|
|
Entity *sub_80453AC(s16 id)
|
|
{
|
|
asm_unified(
|
|
" push {r4-r7,lr}\n"
|
|
" mov r7, r10\n"
|
|
" mov r6, r9\n"
|
|
" mov r5, r8\n"
|
|
" push {r5-r7}\n"
|
|
" lsls r0, 16\n"
|
|
" asrs r0, 16\n"
|
|
" mov r8, r0\n"
|
|
" movs r0, 0x1\n"
|
|
" negs r0, r0\n"
|
|
" mov r9, r0\n"
|
|
" mov r0, r8\n"
|
|
" bl GetBodySize\n"
|
|
" lsls r0, 24\n"
|
|
" lsrs r6, r0, 24\n"
|
|
" movs r5, 0\n"
|
|
" movs r0, 0x6\n"
|
|
" subs r3, r0, r6\n"
|
|
" ldr r4, _080453D8\n"
|
|
" b _080453DE\n"
|
|
" .align 2, 0\n"
|
|
"_080453D8: .4byte gUnknown_202EE70\n"
|
|
"_080453DC:\n"
|
|
" adds r5, 0x1\n"
|
|
"_080453DE:\n"
|
|
" cmp r5, r3\n"
|
|
" bgt _08045400\n"
|
|
" movs r2, 0\n"
|
|
" cmp r2, r6\n"
|
|
" bge _080453FA\n"
|
|
" adds r1, r5, r4\n"
|
|
" b _080453F4\n"
|
|
"_080453EC:\n"
|
|
" adds r1, 0x1\n"
|
|
" adds r2, 0x1\n"
|
|
" cmp r2, r6\n"
|
|
" bge _080453FA\n"
|
|
"_080453F4:\n"
|
|
" ldrb r0, [r1]\n"
|
|
" cmp r0, 0\n"
|
|
" beq _080453EC\n"
|
|
"_080453FA:\n"
|
|
" cmp r2, r6\n"
|
|
" bne _080453DC\n"
|
|
" mov r9, r5\n"
|
|
"_08045400:\n"
|
|
" movs r0, 0x1\n"
|
|
" negs r0, r0\n"
|
|
" cmp r9, r0\n"
|
|
" beq _080454FC\n"
|
|
" movs r5, 0\n"
|
|
" ldr r7, _080454DC\n"
|
|
"_0804540C:\n"
|
|
" ldr r1, _080454E0\n"
|
|
" ldr r0, [r1]\n"
|
|
" lsls r1, r5, 2\n"
|
|
" ldr r2, _080454E4\n"
|
|
" adds r0, r2\n"
|
|
" adds r0, r1\n"
|
|
" ldr r4, [r0]\n"
|
|
" adds r0, r4, 0\n"
|
|
" bl EntityExists\n"
|
|
" lsls r0, 24\n"
|
|
" lsrs r0, 24\n"
|
|
" mov r10, r0\n"
|
|
" cmp r0, 0\n"
|
|
" bne _080454F0\n"
|
|
" movs r0, 0x1\n"
|
|
" str r0, [r4]\n"
|
|
" adds r0, r4, 0\n"
|
|
" adds r0, 0x24\n"
|
|
" strb r5, [r0]\n"
|
|
" ldr r1, _080454E0\n"
|
|
" ldr r0, [r1]\n"
|
|
" adds r0, r7\n"
|
|
" str r0, [r4, 0x70]\n"
|
|
" mov r2, r8\n"
|
|
" strh r2, [r0, 0x2]\n"
|
|
" movs r0, 0\n"
|
|
" mov r1, r8\n"
|
|
" bl GetMonsterApparentID\n"
|
|
" ldr r1, [r4, 0x70]\n"
|
|
" strh r0, [r1, 0x4]\n"
|
|
" ldr r0, [r4, 0x70]\n"
|
|
" movs r5, 0\n"
|
|
" strb r5, [r0, 0x6]\n"
|
|
" movs r0, 0\n"
|
|
" mov r1, r8\n"
|
|
" bl GetMonsterApparentID\n"
|
|
" lsls r0, 16\n"
|
|
" asrs r0, 16\n"
|
|
" bl GetSpriteData\n"
|
|
" str r0, [r4, 0x64]\n"
|
|
" mov r1, r9\n"
|
|
" lsls r0, r1, 4\n"
|
|
" adds r0, 0x40\n"
|
|
" adds r1, r4, 0\n"
|
|
" adds r1, 0x68\n"
|
|
" strh r0, [r1]\n"
|
|
" adds r1, 0x2\n"
|
|
" movs r0, 0x7\n"
|
|
" strb r0, [r1]\n"
|
|
" adds r0, r4, 0\n"
|
|
" adds r0, 0x6C\n"
|
|
" movs r2, 0\n"
|
|
" strb r2, [r0]\n"
|
|
" adds r1, 0x1\n"
|
|
" movs r0, 0xFF\n"
|
|
" strb r0, [r1]\n"
|
|
" adds r0, r4, 0\n"
|
|
" adds r0, 0x6D\n"
|
|
" movs r5, 0x1\n"
|
|
" strb r5, [r0]\n"
|
|
" adds r0, 0x2\n"
|
|
" strb r5, [r0]\n"
|
|
" mov r0, r10\n"
|
|
" str r0, [r4, 0x1C]\n"
|
|
" bl sub_8045ACC\n"
|
|
" ldr r0, [r4, 0x70]\n"
|
|
" ldr r1, _080454E8\n"
|
|
" adds r0, r1\n"
|
|
" mov r2, r9\n"
|
|
" strb r2, [r0]\n"
|
|
" ldr r0, [r4, 0x70]\n"
|
|
" movs r5, 0xB4\n"
|
|
" lsls r5, 1\n"
|
|
" adds r0, r5\n"
|
|
" strb r6, [r0]\n"
|
|
" cmp r6, 0\n"
|
|
" beq _080454C6\n"
|
|
" ldr r3, _080454EC\n"
|
|
" movs r2, 0x1\n"
|
|
" adds r1, r6, 0\n"
|
|
"_080454B6:\n"
|
|
" mov r5, r9\n"
|
|
" adds r0, r5, r3\n"
|
|
" strb r2, [r0]\n"
|
|
" movs r0, 0x1\n"
|
|
" add r9, r0\n"
|
|
" subs r1, 0x1\n"
|
|
" cmp r1, 0\n"
|
|
" bne _080454B6\n"
|
|
"_080454C6:\n"
|
|
" ldr r1, _080454E0\n"
|
|
" ldr r0, [r1]\n"
|
|
" movs r2, 0xCD\n"
|
|
" lsls r2, 3\n"
|
|
" adds r0, r2\n"
|
|
" ldrh r2, [r0]\n"
|
|
" adds r1, r2, 0x1\n"
|
|
" strh r1, [r0]\n"
|
|
" strh r2, [r4, 0x26]\n"
|
|
" adds r0, r4, 0\n"
|
|
" b _080454FE\n"
|
|
" .align 2, 0\n"
|
|
"_080454DC: .4byte 0x0000069c\n"
|
|
"_080454E0: .4byte gDungeon\n"
|
|
"_080454E4: .4byte 0x0001357c\n"
|
|
"_080454E8: .4byte 0x00000167\n"
|
|
"_080454EC: .4byte gUnknown_202EE70\n"
|
|
"_080454F0:\n"
|
|
" movs r0, 0x82\n"
|
|
" lsls r0, 2\n"
|
|
" adds r7, r0\n"
|
|
" adds r5, 0x1\n"
|
|
" cmp r5, 0x3\n"
|
|
" ble _0804540C\n"
|
|
"_080454FC:\n"
|
|
" movs r0, 0\n"
|
|
"_080454FE:\n"
|
|
" pop {r3-r5}\n"
|
|
" mov r8, r3\n"
|
|
" mov r9, r4\n"
|
|
" mov r10, r5\n"
|
|
" pop {r4-r7}\n"
|
|
" pop {r1}\n"
|
|
" bx r1"
|
|
);
|
|
}
|
|
|
|
// Related to sub_8082A08
|
|
// 91.51% https://decomp.me/scratch/Fp0Kw
|
|
/*Entity *sub_804550C(s16 a)
|
|
{
|
|
s32 something; // r1
|
|
s32 uVar8; // r2
|
|
Entity *entity; // r4
|
|
s32 r5;
|
|
u8 r6;
|
|
s32 id; // r8
|
|
s32 r9;
|
|
s32 timer; // sp0
|
|
|
|
id = a; // SpeciesId() ?
|
|
r9 = -1;
|
|
r6 = GetBodySize(id);
|
|
|
|
for (r5 = 0; r5 <= DUNGEON_MAX_WILD_POKEMON_BODY_SIZE - r6; r5++) {
|
|
for (uVar8 = 0; uVar8 < r6; uVar8++) {
|
|
if (gUnknown_202EE76[r5 + uVar8] != 0)
|
|
break;
|
|
}
|
|
|
|
if (uVar8 == r6) {
|
|
r9 = r5;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (r9 != -1) {
|
|
for (r5 = 0; r5 < DUNGEON_MAX_WILD_POKEMON_BODY_SIZE; r5++) {
|
|
timer = (r9 * 0x10) + 0xA0;
|
|
entity = gDungeon->wildPokemon[r5];
|
|
if (!EntityExists(entity)) {
|
|
entity->type = ENTITY_MONSTER;
|
|
entity->unk24 = r5;
|
|
entity->unk22 = 0;
|
|
entity->axObj.info = &gDungeon->unkEBC[r5];
|
|
entity->axObj.info->id = id;
|
|
entity->axObj.info->apparentID = sub_8069F54(NULL, id);
|
|
entity->axObj.info->isNotTeamMember = TRUE;
|
|
|
|
entity->axObj.spriteFile = GetSpriteData(sub_8069F54(NULL, id));
|
|
entity->axObj.unk40_maybeAnimTimer = timer;
|
|
entity->axObj.unk42_animId1 = 7;
|
|
entity->axObj.unk44_direction1 = 0;
|
|
entity->axObj.unk43_animId2 = 0xFF;
|
|
entity->axObj.unk45_orientation = 1;
|
|
entity->axObj.unk47 = 1;
|
|
|
|
entity->unk1C = 0;
|
|
|
|
entity->axObj.info->unk167 = r9;
|
|
entity->axObj.info->unk168 = r6;
|
|
|
|
for (something = 0; something < r6; something++) {
|
|
gUnknown_202EE76[r9] = 1;
|
|
r9++;
|
|
}
|
|
|
|
sub_8045ACC();
|
|
|
|
entity->spawnGenID = gDungeon->unk668++;
|
|
return entity;
|
|
}
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}*/
|
|
NAKED
|
|
Entity *sub_804550C(s16 a)
|
|
{
|
|
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, 0x8\n"
|
|
" lsls r0, 16\n"
|
|
" asrs r0, 16\n"
|
|
" mov r8, r0\n"
|
|
" movs r0, 0x1\n"
|
|
" negs r0, r0\n"
|
|
" mov r9, r0\n"
|
|
" mov r0, r8\n"
|
|
" bl GetBodySize\n"
|
|
" lsls r0, 24\n"
|
|
" lsrs r7, r0, 24\n"
|
|
" movs r5, 0\n"
|
|
" movs r0, 0x10\n"
|
|
" subs r3, r0, r7\n"
|
|
" ldr r4, _08045538\n"
|
|
" b _0804553E\n"
|
|
" .align 2, 0\n"
|
|
"_08045538: .4byte gUnknown_202EE76\n"
|
|
"_0804553C:\n"
|
|
" adds r5, 0x1\n"
|
|
"_0804553E:\n"
|
|
" cmp r5, r3\n"
|
|
" bgt _08045560\n"
|
|
" movs r2, 0\n"
|
|
" cmp r2, r7\n"
|
|
" bge _0804555A\n"
|
|
" adds r1, r5, r4\n"
|
|
" b _08045554\n"
|
|
"_0804554C:\n"
|
|
" adds r1, 0x1\n"
|
|
" adds r2, 0x1\n"
|
|
" cmp r2, r7\n"
|
|
" bge _0804555A\n"
|
|
"_08045554:\n"
|
|
" ldrb r0, [r1]\n"
|
|
" cmp r0, 0\n"
|
|
" beq _0804554C\n"
|
|
"_0804555A:\n"
|
|
" cmp r2, r7\n"
|
|
" bne _0804553C\n"
|
|
" mov r9, r5\n"
|
|
"_08045560:\n"
|
|
" movs r0, 0x1\n"
|
|
" negs r0, r0\n"
|
|
" cmp r9, r0\n"
|
|
" bne _0804556A\n"
|
|
" b _08045670\n"
|
|
"_0804556A:\n"
|
|
" movs r5, 0\n"
|
|
" movs r1, 0x1\n"
|
|
" mov r10, r1\n"
|
|
" ldr r2, _08045650\n"
|
|
" mov r3, r9\n"
|
|
" lsls r0, r3, 4\n"
|
|
" adds r0, 0xA0\n"
|
|
" str r0, [sp]\n"
|
|
"_0804557A:\n"
|
|
" ldr r1, _08045654\n"
|
|
" ldr r0, [r1]\n"
|
|
" lsls r1, r5, 2\n"
|
|
" ldr r3, _08045658\n"
|
|
" adds r0, r3\n"
|
|
" adds r0, r1\n"
|
|
" ldr r4, [r0]\n"
|
|
" adds r0, r4, 0\n"
|
|
" str r2, [sp, 0x4]\n"
|
|
" bl EntityExists\n"
|
|
" lsls r0, 24\n"
|
|
" lsrs r6, r0, 24\n"
|
|
" ldr r2, [sp, 0x4]\n"
|
|
" cmp r6, 0\n"
|
|
" bne _08045664\n"
|
|
" mov r0, r10\n"
|
|
" str r0, [r4]\n"
|
|
" adds r0, r4, 0\n"
|
|
" adds r0, 0x24\n"
|
|
" strb r5, [r0]\n"
|
|
" subs r0, 0x2\n"
|
|
" strb r6, [r0]\n"
|
|
" ldr r1, _08045654\n"
|
|
" ldr r0, [r1]\n"
|
|
" adds r0, r2\n"
|
|
" str r0, [r4, 0x70]\n"
|
|
" mov r2, r8\n"
|
|
" strh r2, [r0, 0x2]\n"
|
|
" movs r0, 0\n"
|
|
" mov r1, r8\n"
|
|
" bl GetMonsterApparentID\n"
|
|
" ldr r1, [r4, 0x70]\n"
|
|
" strh r0, [r1, 0x4]\n"
|
|
" ldr r0, [r4, 0x70]\n"
|
|
" mov r3, r10\n"
|
|
" strb r3, [r0, 0x6]\n"
|
|
" movs r0, 0\n"
|
|
" mov r1, r8\n"
|
|
" bl GetMonsterApparentID\n"
|
|
" lsls r0, 16\n"
|
|
" asrs r0, 16\n"
|
|
" bl GetSpriteData\n"
|
|
" str r0, [r4, 0x64]\n"
|
|
" adds r0, r4, 0\n"
|
|
" adds r0, 0x68\n"
|
|
" mov r5, sp\n"
|
|
" ldrh r5, [r5]\n"
|
|
" strh r5, [r0]\n"
|
|
" adds r1, r4, 0\n"
|
|
" adds r1, 0x6A\n"
|
|
" movs r0, 0x7\n"
|
|
" strb r0, [r1]\n"
|
|
" adds r0, r4, 0\n"
|
|
" adds r0, 0x6C\n"
|
|
" movs r1, 0\n"
|
|
" strb r1, [r0]\n"
|
|
" adds r1, r4, 0\n"
|
|
" adds r1, 0x6B\n"
|
|
" movs r0, 0xFF\n"
|
|
" strb r0, [r1]\n"
|
|
" adds r0, r4, 0\n"
|
|
" adds r0, 0x6D\n"
|
|
" mov r2, r10\n"
|
|
" strb r2, [r0]\n"
|
|
" adds r0, 0x2\n"
|
|
" strb r2, [r0]\n"
|
|
" str r6, [r4, 0x1C]\n"
|
|
" ldr r0, [r4, 0x70]\n"
|
|
" ldr r3, _0804565C\n"
|
|
" adds r0, r3\n"
|
|
" mov r5, r9\n"
|
|
" strb r5, [r0]\n"
|
|
" ldr r0, [r4, 0x70]\n"
|
|
" movs r1, 0xB4\n"
|
|
" lsls r1, 1\n"
|
|
" adds r0, r1\n"
|
|
" strb r7, [r0]\n"
|
|
" cmp r7, 0\n"
|
|
" beq _08045636\n"
|
|
" ldr r3, _08045660\n"
|
|
" movs r2, 0x1\n"
|
|
" adds r1, r7, 0\n"
|
|
"_08045626:\n"
|
|
" mov r5, r9\n"
|
|
" adds r0, r5, r3\n"
|
|
" strb r2, [r0]\n"
|
|
" movs r0, 0x1\n"
|
|
" add r9, r0\n"
|
|
" subs r1, 0x1\n"
|
|
" cmp r1, 0\n"
|
|
" bne _08045626\n"
|
|
"_08045636:\n"
|
|
" bl sub_8045ACC\n"
|
|
" ldr r1, _08045654\n"
|
|
" ldr r0, [r1]\n"
|
|
" movs r2, 0xCD\n"
|
|
" lsls r2, 3\n"
|
|
" adds r0, r2\n"
|
|
" ldrh r2, [r0]\n"
|
|
" adds r1, r2, 0x1\n"
|
|
" strh r1, [r0]\n"
|
|
" strh r2, [r4, 0x26]\n"
|
|
" adds r0, r4, 0\n"
|
|
" b _08045672\n"
|
|
" .align 2, 0\n"
|
|
"_08045650: .4byte 0x00000ebc\n"
|
|
"_08045654: .4byte gDungeon\n"
|
|
"_08045658: .4byte 0x0001358c\n"
|
|
"_0804565C: .4byte 0x00000167\n"
|
|
"_08045660: .4byte gUnknown_202EE76\n"
|
|
"_08045664:\n"
|
|
" movs r3, 0x82\n"
|
|
" lsls r3, 2\n"
|
|
" adds r2, r3\n"
|
|
" adds r5, 0x1\n"
|
|
" cmp r5, 0xF\n"
|
|
" ble _0804557A\n"
|
|
"_08045670:\n"
|
|
" movs r0, 0\n"
|
|
"_08045672:\n"
|
|
" add sp, 0x8\n"
|
|
" pop {r3-r5}\n"
|
|
" mov r8, r3\n"
|
|
" mov r9, r4\n"
|
|
" mov r10, r5\n"
|
|
" pop {r4-r7}\n"
|
|
" pop {r1}\n"
|
|
" bx r1"
|
|
);
|
|
}
|
|
|
|
Entity *sub_8045684(u8 trapID, Position *pos, u8 c)
|
|
{
|
|
Entity *entity;
|
|
s32 i;
|
|
|
|
for (i = 0; i < DUNGEON_MAX_TRAPS; i++) {
|
|
entity = gDungeon->traps[i];
|
|
if (!EntityExists(entity)) {
|
|
entity->type = ENTITY_TRAP;
|
|
entity->axObj.info.trap = &gDungeon->unk3908[i];
|
|
entity->axObj.info.trap->id = trapID;
|
|
entity->axObj.info.trap->unk1 = c;
|
|
|
|
entity->unk1C = 0;
|
|
entity->unk22 = 0;
|
|
entity->pos = *pos;
|
|
entity->spawnGenID = 0;
|
|
return entity;
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
Entity *sub_8045708(Position *pos)
|
|
{
|
|
s32 i;
|
|
Entity *ent;
|
|
|
|
if (gDungeonWaterType[gDungeon->tileset] == DUNGEON_WATER_TYPE_LAVA
|
|
&& (GetTileSafe(pos->x, pos->y)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == TERRAIN_TYPE_SECONDARY) {
|
|
return NULL;
|
|
}
|
|
|
|
for (i = 0; i < DUNGEON_MAX_ITEMS; i++) {
|
|
ent = gDungeon->items[i];
|
|
if (!EntityExists(ent)) {
|
|
ent->type = ENTITY_ITEM;
|
|
ent->axObj.info.item = &gDungeon->unk3804[i];
|
|
|
|
ent->pos = *pos;
|
|
SetEntityPixelPos(ent, ((pos->x * 24) + 4) * 0x100, ((pos->y * 24) + 4) * 0x100);
|
|
ent->spawnGenID = 0;
|
|
ent->unk22 = 0;
|
|
ent->unk1C = 0;
|
|
return ent;
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
void sub_80457DC(Entity* ent)
|
|
{
|
|
ent->type = ENTITY_UNK_5;
|
|
ent->pos.x = 0;
|
|
ent->pos.y = 0;
|
|
SetEntityPixelPos(ent, 0, 0);
|
|
ent->spawnGenID = 0;
|
|
ent->unk22 = 0;
|
|
}
|
|
|
|
bool8 sub_8045804(Entity *ent)
|
|
{
|
|
UnkDungeonGlobal_unk181E8_sub* saveTyping;
|
|
Entity* camTarget;
|
|
EntityInfo *monInfo;
|
|
|
|
switch (GetEntityType(ent)) {
|
|
case ENTITY_MONSTER: {
|
|
if (ent->isVisible) {
|
|
saveTyping = &gDungeon->unk181e8;
|
|
camTarget = saveTyping->cameraTarget;
|
|
monInfo = GetEntInfo(ent);
|
|
|
|
if (!monInfo->isNotTeamMember)
|
|
return TRUE;
|
|
|
|
if (!saveTyping->unk1820F && monInfo->transformStatus.transformStatus == STATUS_INVISIBLE)
|
|
return FALSE;
|
|
|
|
if (saveTyping->unk1820B || saveTyping->unk1820D)
|
|
return TRUE;
|
|
|
|
if (camTarget != NULL)
|
|
return IsPositionActuallyInSight(&saveTyping->cameraPos, &ent->pos);
|
|
}
|
|
return FALSE;
|
|
}
|
|
/*case ENTITY_TRAP:
|
|
case ENTITY_ITEM:
|
|
case ENTITY_UNK_4:*/
|
|
default: {
|
|
return TRUE;
|
|
}
|
|
case ENTITY_NOTHING:
|
|
case ENTITY_UNK_5: {
|
|
return FALSE;
|
|
}
|
|
}
|
|
}
|
|
|
|
bool8 sub_8045888(Entity *ent)
|
|
{
|
|
if (ent->isVisible) {
|
|
s32 x = (ent->pixelPos.x / 256) - gDungeon->unk181e8.cameraPixelPos.x;
|
|
s32 y = (ent->pixelPos.y / 256) - gDungeon->unk181e8.cameraPixelPos.y;
|
|
|
|
if (x >= -32 && y >= -32 && x <= 272 && y <= 192) {
|
|
UnkDungeonGlobal_unk181E8_sub *saveTyping = &gDungeon->unk181e8;
|
|
|
|
switch (GetEntityType(ent)) {
|
|
case ENTITY_ITEM: {
|
|
if (!saveTyping->unk1820E && !sub_803F428(&ent->pos))
|
|
return FALSE;
|
|
break;
|
|
}
|
|
case ENTITY_MONSTER: {
|
|
EntityInfo *monInfo = GetEntInfo(ent);
|
|
|
|
if (monInfo->isNotTeamMember) {
|
|
if (!gDungeon->unk181e8.unk1820F && monInfo->transformStatus.transformStatus == STATUS_INVISIBLE)
|
|
return FALSE;
|
|
|
|
if (!saveTyping->unk1820D && !sub_803F428(&ent->pos))
|
|
return FALSE;
|
|
}
|
|
break;
|
|
}
|
|
case ENTITY_TRAP: {
|
|
if (!gDungeon->unk181e8.unk1820F && !ent->isVisible)
|
|
return FALSE;
|
|
break;
|
|
}
|
|
case ENTITY_NOTHING:
|
|
case ENTITY_UNK_5: {
|
|
return FALSE;
|
|
}
|
|
case ENTITY_UNK_4:
|
|
default: {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
} |