axObject info union

This commit is contained in:
Kermalis
2024-11-10 19:43:27 -05:00
parent 2ec9296cc5
commit afa4b04abc
16 changed files with 551 additions and 679 deletions

View File

@@ -5,650 +5,6 @@
.text
thumb_func_start sub_80453AC
sub_80453AC:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
lsls r0, 16
asrs r0, 16
mov r8, r0
movs r0, 0x1
negs r0, r0
mov r9, r0
mov r0, r8
bl GetBodySize
lsls r0, 24
lsrs r6, r0, 24
movs r5, 0
movs r0, 0x6
subs r3, r0, r6
ldr r4, _080453D8
b _080453DE
.align 2, 0
_080453D8: .4byte gUnknown_202EE70
_080453DC:
adds r5, 0x1
_080453DE:
cmp r5, r3
bgt _08045400
movs r2, 0
cmp r2, r6
bge _080453FA
adds r1, r5, r4
b _080453F4
_080453EC:
adds r1, 0x1
adds r2, 0x1
cmp r2, r6
bge _080453FA
_080453F4:
ldrb r0, [r1]
cmp r0, 0
beq _080453EC
_080453FA:
cmp r2, r6
bne _080453DC
mov r9, r5
_08045400:
movs r0, 0x1
negs r0, r0
cmp r9, r0
beq _080454FC
movs r5, 0
ldr r7, _080454DC
_0804540C:
ldr r1, _080454E0
ldr r0, [r1]
lsls r1, r5, 2
ldr r2, _080454E4
adds r0, r2
adds r0, r1
ldr r4, [r0]
adds r0, r4, 0
bl EntityExists
lsls r0, 24
lsrs r0, 24
mov r10, r0
cmp r0, 0
bne _080454F0
movs r0, 0x1
str r0, [r4]
adds r0, r4, 0
adds r0, 0x24
strb r5, [r0]
ldr r1, _080454E0
ldr r0, [r1]
adds r0, r7
str r0, [r4, 0x70]
mov r2, r8
strh r2, [r0, 0x2]
movs r0, 0
mov r1, r8
bl GetMonsterApparentID
ldr r1, [r4, 0x70]
strh r0, [r1, 0x4]
ldr r0, [r4, 0x70]
movs r5, 0
strb r5, [r0, 0x6]
movs r0, 0
mov r1, r8
bl GetMonsterApparentID
lsls r0, 16
asrs r0, 16
bl GetSpriteData
str r0, [r4, 0x64]
mov r1, r9
lsls r0, r1, 4
adds r0, 0x40
adds r1, r4, 0
adds r1, 0x68
strh r0, [r1]
adds r1, 0x2
movs r0, 0x7
strb r0, [r1]
adds r0, r4, 0
adds r0, 0x6C
movs r2, 0
strb r2, [r0]
adds r1, 0x1
movs r0, 0xFF
strb r0, [r1]
adds r0, r4, 0
adds r0, 0x6D
movs r5, 0x1
strb r5, [r0]
adds r0, 0x2
strb r5, [r0]
mov r0, r10
str r0, [r4, 0x1C]
bl sub_8045ACC
ldr r0, [r4, 0x70]
ldr r1, _080454E8
adds r0, r1
mov r2, r9
strb r2, [r0]
ldr r0, [r4, 0x70]
movs r5, 0xB4
lsls r5, 1
adds r0, r5
strb r6, [r0]
cmp r6, 0
beq _080454C6
ldr r3, _080454EC
movs r2, 0x1
adds r1, r6, 0
_080454B6:
mov r5, r9
adds r0, r5, r3
strb r2, [r0]
movs r0, 0x1
add r9, r0
subs r1, 0x1
cmp r1, 0
bne _080454B6
_080454C6:
ldr r1, _080454E0
ldr r0, [r1]
movs r2, 0xCD
lsls r2, 3
adds r0, r2
ldrh r2, [r0]
adds r1, r2, 0x1
strh r1, [r0]
strh r2, [r4, 0x26]
adds r0, r4, 0
b _080454FE
.align 2, 0
_080454DC: .4byte 0x0000069c
_080454E0: .4byte gDungeon
_080454E4: .4byte 0x0001357c
_080454E8: .4byte 0x00000167
_080454EC: .4byte gUnknown_202EE70
_080454F0:
movs r0, 0x82
lsls r0, 2
adds r7, r0
adds r5, 0x1
cmp r5, 0x3
ble _0804540C
_080454FC:
movs r0, 0
_080454FE:
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_80453AC
thumb_func_start sub_804550C
sub_804550C:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x8
lsls r0, 16
asrs r0, 16
mov r8, r0
movs r0, 0x1
negs r0, r0
mov r9, r0
mov r0, r8
bl GetBodySize
lsls r0, 24
lsrs r7, r0, 24
movs r5, 0
movs r0, 0x10
subs r3, r0, r7
ldr r4, _08045538
b _0804553E
.align 2, 0
_08045538: .4byte gUnknown_202EE76
_0804553C:
adds r5, 0x1
_0804553E:
cmp r5, r3
bgt _08045560
movs r2, 0
cmp r2, r7
bge _0804555A
adds r1, r5, r4
b _08045554
_0804554C:
adds r1, 0x1
adds r2, 0x1
cmp r2, r7
bge _0804555A
_08045554:
ldrb r0, [r1]
cmp r0, 0
beq _0804554C
_0804555A:
cmp r2, r7
bne _0804553C
mov r9, r5
_08045560:
movs r0, 0x1
negs r0, r0
cmp r9, r0
bne _0804556A
b _08045670
_0804556A:
movs r5, 0
movs r1, 0x1
mov r10, r1
ldr r2, _08045650
mov r3, r9
lsls r0, r3, 4
adds r0, 0xA0
str r0, [sp]
_0804557A:
ldr r1, _08045654
ldr r0, [r1]
lsls r1, r5, 2
ldr r3, _08045658
adds r0, r3
adds r0, r1
ldr r4, [r0]
adds r0, r4, 0
str r2, [sp, 0x4]
bl EntityExists
lsls r0, 24
lsrs r6, r0, 24
ldr r2, [sp, 0x4]
cmp r6, 0
bne _08045664
mov r0, r10
str r0, [r4]
adds r0, r4, 0
adds r0, 0x24
strb r5, [r0]
subs r0, 0x2
strb r6, [r0]
ldr r1, _08045654
ldr r0, [r1]
adds r0, r2
str r0, [r4, 0x70]
mov r2, r8
strh r2, [r0, 0x2]
movs r0, 0
mov r1, r8
bl GetMonsterApparentID
ldr r1, [r4, 0x70]
strh r0, [r1, 0x4]
ldr r0, [r4, 0x70]
mov r3, r10
strb r3, [r0, 0x6]
movs r0, 0
mov r1, r8
bl GetMonsterApparentID
lsls r0, 16
asrs r0, 16
bl GetSpriteData
str r0, [r4, 0x64]
adds r0, r4, 0
adds r0, 0x68
mov r5, sp
ldrh r5, [r5]
strh r5, [r0]
adds r1, r4, 0
adds r1, 0x6A
movs r0, 0x7
strb r0, [r1]
adds r0, r4, 0
adds r0, 0x6C
movs r1, 0
strb r1, [r0]
adds r1, r4, 0
adds r1, 0x6B
movs r0, 0xFF
strb r0, [r1]
adds r0, r4, 0
adds r0, 0x6D
mov r2, r10
strb r2, [r0]
adds r0, 0x2
strb r2, [r0]
str r6, [r4, 0x1C]
ldr r0, [r4, 0x70]
ldr r3, _0804565C
adds r0, r3
mov r5, r9
strb r5, [r0]
ldr r0, [r4, 0x70]
movs r1, 0xB4
lsls r1, 1
adds r0, r1
strb r7, [r0]
cmp r7, 0
beq _08045636
ldr r3, _08045660
movs r2, 0x1
adds r1, r7, 0
_08045626:
mov r5, r9
adds r0, r5, r3
strb r2, [r0]
movs r0, 0x1
add r9, r0
subs r1, 0x1
cmp r1, 0
bne _08045626
_08045636:
bl sub_8045ACC
ldr r1, _08045654
ldr r0, [r1]
movs r2, 0xCD
lsls r2, 3
adds r0, r2
ldrh r2, [r0]
adds r1, r2, 0x1
strh r1, [r0]
strh r2, [r4, 0x26]
adds r0, r4, 0
b _08045672
.align 2, 0
_08045650: .4byte 0x00000ebc
_08045654: .4byte gDungeon
_08045658: .4byte 0x0001358c
_0804565C: .4byte 0x00000167
_08045660: .4byte gUnknown_202EE76
_08045664:
movs r3, 0x82
lsls r3, 2
adds r2, r3
adds r5, 0x1
cmp r5, 0xF
ble _0804557A
_08045670:
movs r0, 0
_08045672:
add sp, 0x8
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_804550C
thumb_func_start sub_8045684
sub_8045684:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
mov r10, r1
lsls r0, 24
lsrs r0, 24
mov r8, r0
lsls r2, 24
lsrs r2, 24
mov r9, r2
movs r5, 0
ldr r7, _080456E4
ldr r6, _080456E8
_080456A2:
ldr r0, [r7]
lsls r1, r5, 2
ldr r2, _080456EC
adds r0, r2
adds r0, r1
ldr r4, [r0]
adds r0, r4, 0
bl EntityExists
lsls r0, 24
lsrs r1, r0, 24
cmp r1, 0
bne _080456F0
movs r0, 0x2
str r0, [r4]
ldr r0, [r7]
adds r0, r6
str r0, [r4, 0x70]
mov r2, r8
strb r2, [r0]
ldr r0, [r4, 0x70]
mov r2, r9
strb r2, [r0, 0x1]
str r1, [r4, 0x1C]
adds r0, r4, 0
adds r0, 0x22
strb r1, [r0]
mov r2, r10
ldr r0, [r2]
str r0, [r4, 0x4]
strh r1, [r4, 0x26]
adds r0, r4, 0
b _080456FA
.align 2, 0
_080456E4: .4byte gDungeon
_080456E8: .4byte 0x00003908
_080456EC: .4byte 0x0001371c
_080456F0:
adds r6, 0x4
adds r5, 0x1
cmp r5, 0x3F
ble _080456A2
movs r0, 0
_080456FA:
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_8045684
thumb_func_start sub_8045708
sub_8045708:
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
mov r8, r0
ldr r1, _08045744
ldr r0, _08045748
ldr r0, [r0]
ldr r2, _0804574C
adds r0, r2
movs r3, 0
ldrsh r0, [r0, r3]
adds r0, r1
ldrb r0, [r0]
cmp r0, 0x1
bne _0804579C
mov r1, r8
movs r2, 0
ldrsh r0, [r1, r2]
movs r3, 0x2
ldrsh r1, [r1, r3]
bl GetTileSafe
ldrh r1, [r0]
movs r0, 0x3
ands r0, r1
cmp r0, 0x2
bne _0804579C
b _080457C4
.align 2, 0
_08045744: .4byte gDungeonWaterType
_08045748: .4byte gDungeon
_0804574C: .4byte 0x00003a0e
_08045750:
movs r0, 0x3
str r0, [r4]
ldr r0, _08045798
adds r1, r6, r0
mov r2, r9
ldr r0, [r2]
adds r0, r1
str r0, [r4, 0x70]
mov r3, r8
ldr r0, [r3]
str r0, [r4, 0x4]
movs r1, 0
ldrsh r0, [r3, r1]
lsls r1, r0, 1
adds r1, r0
lsls r1, 3
adds r1, 0x4
lsls r1, 8
movs r2, 0x2
ldrsh r0, [r3, r2]
lsls r2, r0, 1
adds r2, r0
lsls r2, 3
adds r2, 0x4
lsls r2, 8
adds r0, r4, 0
bl SetEntityPixelPos
movs r0, 0
strh r7, [r4, 0x26]
adds r1, r4, 0
adds r1, 0x22
strb r0, [r1]
str r7, [r4, 0x1C]
adds r0, r4, 0
b _080457C6
.align 2, 0
_08045798: .4byte 0x00003804
_0804579C:
movs r5, 0
ldr r3, _080457D4
mov r9, r3
_080457A2:
mov r1, r9
ldr r0, [r1]
lsls r6, r5, 2
ldr r2, _080457D8
adds r0, r2
adds r0, r6
ldr r4, [r0]
adds r0, r4, 0
bl EntityExists
lsls r0, 24
lsrs r7, r0, 24
cmp r7, 0
beq _08045750
adds r5, 0x1
cmp r5, 0x3F
ble _080457A2
_080457C4:
movs r0, 0
_080457C6:
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_080457D4: .4byte gDungeon
_080457D8: .4byte 0x0001361c
thumb_func_end sub_8045708
thumb_func_start sub_80457DC
sub_80457DC:
push {r4-r6,lr}
adds r4, r0, 0
movs r0, 0x5
str r0, [r4]
movs r6, 0
movs r5, 0
strh r5, [r4, 0x4]
strh r5, [r4, 0x6]
adds r0, r4, 0
movs r1, 0
movs r2, 0
bl SetEntityPixelPos
strh r5, [r4, 0x26]
adds r4, 0x22
strb r6, [r4]
pop {r4-r6}
pop {r0}
bx r0
thumb_func_end sub_80457DC
thumb_func_start sub_8045804
sub_8045804:
push {r4-r6,lr}
adds r4, r0, 0
bl GetEntityType
cmp r0, 0x1
beq _0804581C
cmp r0, 0x1
bcc _08045880
cmp r0, 0x5
beq _08045880
_08045818:
movs r0, 0x1
b _08045882
_0804581C:
adds r0, r4, 0
adds r0, 0x20
ldrb r0, [r0]
cmp r0, 0
beq _08045880
ldr r0, _08045874
ldr r1, [r0]
ldr r0, _08045878
adds r2, r1, r0
ldr r5, [r2, 0x10]
ldr r3, [r4, 0x70]
ldrb r0, [r3, 0x6]
cmp r0, 0
beq _08045818
ldr r6, _0804587C
adds r0, r1, r6
ldrb r0, [r0]
cmp r0, 0
bne _0804584C
adds r0, r3, 0
adds r0, 0xE4
ldrb r0, [r0]
cmp r0, 0x1
beq _08045880
_0804584C:
adds r0, r2, 0
adds r0, 0x23
ldrb r0, [r0]
cmp r0, 0
bne _08045818
adds r0, r2, 0
adds r0, 0x25
ldrb r0, [r0]
cmp r0, 0
bne _08045818
cmp r5, 0
beq _08045880
adds r1, r4, 0x4
adds r0, r2, 0
bl IsPositionActuallyInSight
lsls r0, 24
lsrs r0, 24
b _08045882
.align 2, 0
_08045874: .4byte gDungeon
_08045878: .4byte 0x000181e8
_0804587C: .4byte 0x0001820f
_08045880:
movs r0, 0
_08045882:
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_8045804
thumb_func_start sub_8045888
sub_8045888:
push {r4,r5,lr}

10
include/code_80450F8.h Normal file
View File

@@ -0,0 +1,10 @@
#ifndef GUARD_CODE_80227B8_H
#define GUARD_CODE_80227B8_H
#include "structs/dungeon_entity.h"
Entity *sub_8045684(u8 a, Position *pos, u8 c);
Entity *sub_8045708(Position *pos);
void sub_80457DC(Entity* ent);
#endif // GUARD_CODE_80227B8_H

View File

@@ -84,7 +84,12 @@ struct axObject
u8 unk45_orientation;
u8 unk46;
u8 unk47;
/* 0x48 */ struct EntityInfo* info;
/* 0x48 */ union
{
struct Item* item;
struct EntityInfo* monster;
struct EntTrapInfo* trap;
} info;
};
// size: 0x80? (assuming it's the last sub-struct of GroundLives)

View File

@@ -1,15 +1,15 @@
#ifndef GUARD_DUNGEON_ENTITY_H
#define GUARD_DUNGEON_ENTITY_H
#include "constants/global.h"
#include "constants/dungeon_action.h"
#include "structs/str_position.h"
#include "sprite.h"
#include "constants/global.h"
#include "constants/status.h"
#include "structs/axdata.h"
#include "structs/str_items.h"
#include "structs/str_moves.h"
#include "structs/axdata.h"
#include "structs/str_position.h"
#include "number_util.h"
#include "sprite.h"
#define MAX_STAT_STAGE 20
#define STAT_MULTIPLIER_THRESHOLD 63
@@ -352,6 +352,13 @@ typedef struct EntityInfo
u8 unk204;
} EntityInfo;
// size: 0x4
typedef struct EntTrapInfo
{
/* 0x0 */ u8 unk0;
/* 0x0 */ u8 unk1;
} EntTrapInfo;
// size: 0x74 | Used for Pokémon, items, and traps.
typedef struct Entity
{
@@ -472,7 +479,7 @@ static inline void SetExpMultplier(EntityInfo *info)
static inline EntityInfo *GetEntInfo(Entity *ent)
{
return ent->axObj.info;
return ent->axObj.info.monster;
}
#endif

View File

@@ -354,9 +354,9 @@ typedef struct Dungeon
/* 0x37FE */ bool8 unk37FF;
// dungeon_serializer.c refers to this as a u16 but elsewhere it's handled as a s16
/* 0x3800 */ s16 deoxysForm;
EntityInfo *unk3804[DUNGEON_MAX_ITEMS]; // TODO: ItemInfo[DUNGEON_MAX_ITEMS]
Item unk3804[DUNGEON_MAX_ITEMS];
/* 0x3904 */ s16 unk3904;
EntityInfo *unk3908[DUNGEON_MAX_TRAPS]; // TODO: TrapInfo[DUNGEON_MAX_TRAPS]
EntTrapInfo unk3908[DUNGEON_MAX_TRAPS];
/* 0x3A08 */ bool8 unk3A08;
/* 0x3A09 */ bool8 unk3A09;
/* 0x3A0A */ bool8 unk3A0A;

View File

@@ -7,10 +7,10 @@
#define DUNGEON_WATER_TYPE_LAVA 1
#define DUNGEON_WATER_TYPE_WATER 2
extern const u8 gDungeonWaterType[];
extern const u8 gDungeonWaterType[76];
void sub_804AE84(Position *pos);
bool8 IsTileGround(Tile *tile);
bool8 IsWaterTileset();
#endif
#endif // GUARD_TILE_TYPES_H

View File

@@ -216,6 +216,7 @@ SECTIONS {
src/dungeon_action.o(.text);
src/code_8044CC8.o(.text);
src/dungeon_util.o(.text);
src/code_80450F8.o(.text);
asm/code_80450F8.o(.text);
src/dungeon_visibility.o(.text);
src/code_8045A00.o(.text);

491
src/code_80450F8.c Normal file
View File

@@ -0,0 +1,491 @@
#include "global.h"
#include "structs/str_dungeon.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
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
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 a, 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->unk0 = a;
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 *entInfo;
switch (GetEntityType(ent)) {
case ENTITY_MONSTER: {
if (ent->isVisible) {
saveTyping = &gDungeon->unk181e8;
camTarget = saveTyping->cameraTarget;
entInfo = GetEntInfo(ent);
if (!entInfo->isNotTeamMember)
return TRUE;
if (!saveTyping->unk1820F && entInfo->transformStatus.transformStatus == STATUS_INVISIBLE)
return FALSE;
if (saveTyping->unk1820B || saveTyping->unk1820D)
return TRUE;
if (camTarget != NULL)
return IsPositionActuallyInSight(&saveTyping->cameraPos, &ent->pos);
}
return FALSE;
}
default: {
return TRUE;
}
case ENTITY_NOTHING:
case ENTITY_UNK_5: {
return FALSE;
}
}
}

View File

@@ -2297,7 +2297,7 @@ typedef struct UnkTextStruct3 {
} UnkTextStruct3;
extern void sub_803ECB4(UnkTextStruct3 *a0, u8 a1);
void CreateFieldItemMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, UnkTextStruct3 *a4, UnkTextStruct2_sub2 *a5);
static void CreateFieldItemMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, UnkTextStruct3 *a4, UnkTextStruct2_sub2 *a5);
// Inline needed to (fake?)match.
static inline void sub_805FC30_SetUpTxtStruct(UnkTextStruct3 *src)
@@ -2660,7 +2660,7 @@ bool8 sub_805FD74(Entity * a0, struct UnkMenuBitsStruct *a1)
extern const struct UnkTextStruct2 gUnknown_8106B6C;
extern const struct unkStruct_8090F58 gUnknown_8106B60;
void CreateFieldItemMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, UnkTextStruct3 *a4, UnkTextStruct2_sub2 *a5)
static void CreateFieldItemMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, UnkTextStruct3 *a4, UnkTextStruct2_sub2 *a5)
{
s32 i, x, y;
s32 r10;
@@ -2785,8 +2785,9 @@ void CreateFieldItemMenu(s32 a0, Entity *a1, bool8 a2, bool8 a3, UnkTextStruct3
default: {
Entity *chosenTeamMember = gDungeon->teamPokemon[sUnknown_202F248[a0] - MAX_TEAM_MEMBERS];
if (EntityExists(chosenTeamMember)) {
Item *item = &GetEntInfo(chosenTeamMember)->heldItem;
SetMessageArgument_2(gFormatBuffer_Monsters[0], chosenTeamMember->axObj.info, 0);
EntityInfo *monInfo = GetEntInfo(chosenTeamMember);
Item *item = &monInfo->heldItem;
SetMessageArgument_2(gFormatBuffer_Monsters[0], monInfo, 0);
PrintFormattedStringOnWindow(x, 0, gUnknown_80FE940, 0, 0);
if (item->flags & ITEM_FLAG_EXISTS) {
gUnknown_202EE10.unk1A++;

View File

@@ -17,6 +17,7 @@
#include "status.h"
#include "type_chart.h"
#include "dungeon_random.h"
#include "code_80450F8.h"
#include "code_8045A00.h"
#include "dungeon_items.h"
#include "structs/str_damage.h"
@@ -30,7 +31,6 @@ extern bool8 sub_806E100(struct unkStruct_80943A8 *param_1, Entity *pokemon, Ent
extern void sub_8041B74(Entity *pokemon);
extern void sub_8041B5C(Entity *pokemon);
extern void HandleDealingDamage(Entity *attacker, Entity *target, struct DamageStruct *dmgStruct, bool32 isFalseSwipe, bool32 giveExp, s16 arg4, bool32 arg8, s32 argC);
extern void sub_80457DC(Entity *);
extern const s32 gUnknown_80F54B4[NUM_EFFECTIVENESS][NUM_EFFECTIVENESS];
extern const s32 gUnknown_80F504C[];

View File

@@ -5,6 +5,7 @@
#include "dungeon_leader.h"
#include "dungeon_message.h"
#include "code_8041AD0.h"
#include "code_80450F8.h"
#include "code_8045A00.h"
#include "code_8077274_1.h"
#include "constants/dungeon.h"

View File

@@ -1,6 +1,7 @@
#include "global.h"
#include "globaldata.h"
#include "code_800F958.h"
#include "code_80450F8.h"
#include "code_8045A00.h"
#include "code_805D8C8.h"
#include "code_806CD90.h"
@@ -133,7 +134,6 @@ static Entity* sub_8082A08(s16 id, s16 apparentID, s32 index);
// These externs are from other files
extern u8 GetBodySize(s16 index);
extern Entity *sub_8045684(u8, Position *, u8);
extern void sub_80460F8(Position *, Item *, u32);
void SaveDungeonState(u8 *buffer, u32 bufLen)
@@ -1145,10 +1145,10 @@ static Entity* sub_80828E0(s16 id, s16 apparentID, s32 index)
entity = gDungeon->teamPokemon[index];
entity->type = ENTITY_MONSTER;
entity->unk24 = index;
entity->axObj.info = &gDungeon->unk69C[index];
entity->axObj.info->id = id_;
entity->axObj.info->apparentID = appID;
entity->axObj.info->isNotTeamMember = FALSE;
entity->axObj.info.monster = &gDungeon->unk69C[index];
entity->axObj.info.monster->id = id_;
entity->axObj.info.monster->apparentID = appID;
entity->axObj.info.monster->isNotTeamMember = FALSE;
entity->axObj.spriteFile = GetSpriteData(appID);
entity->axObj.unk40_maybeAnimTimer = (r4 * 0x10) + 0x40;
@@ -1160,8 +1160,8 @@ static Entity* sub_80828E0(s16 id, s16 apparentID, s32 index)
entity->unk1C = 0;
sub_8045ACC();
entity->axObj.info->unk167 = r4;
entity->axObj.info->unk168 = apparentBodySize;
entity->axObj.info.monster->unk167 = r4;
entity->axObj.info.monster->unk168 = apparentBodySize;
for (r1 = 0; r1 < apparentBodySize; r1++) {
gUnknown_202EE70[r4] = 1;
@@ -1213,10 +1213,10 @@ static Entity* sub_8082A08(s16 id, s16 apparentID, s32 index)
entity->type = ENTITY_MONSTER;
entity->unk24 = index;
entity->unk22 = 0;
entity->axObj.info = &gDungeon->unkEBC[index];
entity->axObj.info->id = id_;
entity->axObj.info->apparentID = appID;
entity->axObj.info->isNotTeamMember = TRUE;
entity->axObj.info.monster = &gDungeon->unkEBC[index];
entity->axObj.info.monster->id = id_;
entity->axObj.info.monster->apparentID = appID;
entity->axObj.info.monster->isNotTeamMember = TRUE;
entity->axObj.spriteFile = GetSpriteData(appID);
entity->axObj.unk40_maybeAnimTimer = (r8 * 0x10) + 0xA0;
@@ -1227,8 +1227,8 @@ static Entity* sub_8082A08(s16 id, s16 apparentID, s32 index)
entity->axObj.unk47 = 1;
entity->unk1C = 0;
entity->axObj.info->unk167 = r8;
entity->axObj.info->unk168 = apparentBodySize;
entity->axObj.info.monster->unk167 = r8;
entity->axObj.info.monster->unk168 = apparentBodySize;
for (r1 = 0; r1 < apparentBodySize; r1++) {
gUnknown_202EE76[r8] = 1;

View File

@@ -3,6 +3,7 @@
#include "code_803E46C.h"
#include "code_803E668.h"
#include "code_80450F8.h"
#include "code_806CD90.h"
#include "constants/direction.h"
#include "constants/dungeon.h"
@@ -21,7 +22,6 @@ extern void sub_803F4A0(u32);
extern void sub_803F878(s32, s32);
extern void sub_8068FE0(Entity *, u32, Entity*);
extern void sub_80457DC(Entity *);
extern void sub_80694C0(Entity *, s32, s32, u32);

View File

@@ -186,7 +186,7 @@ extern void sub_806F370(Entity *r0, Entity *r1, u32, u32, u8 *, u8, s32, u32, u3
extern void sub_804652C(Entity *, Entity *, Item *, u32, Position *);
extern void CalcDamage(Entity *, Entity *, u8, u32, u32, s32 *, u32, u16, u32);
extern void sub_8045C28(Item *, u8 , u8);
extern void sub_805A7D4(Entity *, Entity *, Item *, Position *);
static void sub_805A7D4(Entity *, Entity *, Item *, Position *);
extern void MudWaterSportEffect(u32);
extern void CalcDamage(Entity *, Entity *, u8, u32, u32, s32 *, u32, u16, u32);
extern void sub_806A6E8(Entity *);
@@ -2632,7 +2632,7 @@ bool8 KnockOffMoveAction(Entity *pokemon, Entity *target, Move *move, u32 param_
}
}
void sub_805A7D4(Entity * pokemon, Entity * target, Item *item, Position *pos)
static void sub_805A7D4(Entity * pokemon, Entity * target, Item *item, Position *pos)
{
Entity stackEntity;
@@ -2640,7 +2640,7 @@ void sub_805A7D4(Entity * pokemon, Entity * target, Item *item, Position *pos)
stackEntity.unk24 = 0;
stackEntity.isVisible = TRUE;
stackEntity.unk22 = 0;
stackEntity.axObj.info = (EntityInfo*) item;
stackEntity.axObj.info.item = item;
stackEntity.pos.x = target->pos.x + pos->x;
stackEntity.pos.y = target->pos.y + pos->y;
SetEntityPixelPos(&stackEntity,(target->pos.x * 0x18 + 4) * 0x100,

View File

@@ -5,7 +5,7 @@
#include "dungeon_map_access.h"
#include "dungeon_util.h"
const u8 gDungeonWaterType[] = {
const u8 gDungeonWaterType[76] = {
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,

View File

@@ -2,6 +2,7 @@
#include "trap.h"
#include "code_803E668.h"
#include "code_80450F8.h"
#include "code_8041AD0.h"
#include "code_8045A00.h"
#include "dungeon_message.h"
@@ -85,7 +86,6 @@ void sub_8071DA4(Entity *);
extern u8 sub_803F428(Position *pos);
void sub_806A1E8(Entity *pokemon);
u8 sub_803D6FC(void);
Entity *sub_8045684(u8, Position *, u8);
extern void sub_807DF38(Entity *pokemon, Entity *target, Position *pos, u32, u8 moveType, s16);
void sub_807FC3C(Position *pos, u32 trapID, u32 param_3)