up to sub_800DE8C

This commit is contained in:
DizzyEggg 2025-07-08 14:20:36 +02:00
parent 0ee86ef843
commit b2f08ba1d3
8 changed files with 468 additions and 615 deletions

View File

@ -5,482 +5,7 @@
.text
thumb_func_start sub_800DD0C
sub_800DD0C:
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x8
adds r5, r0, 0
adds r6, r1, 0
movs r0, 0x58
adds r0, r5
mov r8, r0
ldrh r1, [r0]
movs r0, 0x80
lsls r0, 6
ands r0, r1
cmp r0, 0
beq _0800DD2E
movs r0, 0
b _0800DD30
_0800DD2E:
lsrs r0, r1, 15
_0800DD30:
cmp r0, 0
bne _0800DD64
adds r0, r5, 0
bl sub_800DCA8
ldr r0, [r5, 0x34]
cmp r0, 0x3
bne _0800DD60
movs r4, 0
b _0800DD46
_0800DD44:
adds r4, 0x1
_0800DD46:
cmp r4, 0x1
bgt _0800DD60
adds r0, r4, 0
bl sub_800F18C
adds r2, r0, 0
ldr r1, [r2]
ldr r0, [r5, 0x38]
cmp r1, r0
bne _0800DD44
ldr r0, [r2, 0x4]
subs r0, 0x1
str r0, [r2, 0x4]
_0800DD60:
movs r0, 0
b _0800DE28
_0800DD64:
mov r0, r8
bl RunAxAnimationFrame
movs r4, 0
ldr r0, [r5, 0x8]
movs r1, 0x7
ands r0, r1
cmp r0, 0
bne _0800DD88
ldr r0, [r5, 0x14]
cmp r0, 0x5
bgt _0800DD84
cmp r0, 0x3
blt _0800DD84
subs r4, 0x3
b _0800DD8A
_0800DD84:
adds r4, 0x3
b _0800DD8A
_0800DD88:
movs r4, 0x3
_0800DD8A:
movs r2, 0
ldr r1, [r5, 0x20]
movs r0, 0x1
negs r0, r0
cmp r1, r0
beq _0800DD9E
ldrh r0, [r5, 0x1E]
lsls r0, 16
ldrh r2, [r5, 0x1C]
orrs r2, r0
_0800DD9E:
lsls r0, r2, 16
asrs r1, r0, 16
adds r7, r0, 0
cmp r1, 0x63
beq _0800DE26
asrs r0, r2, 16
adds r2, r0, 0
cmp r2, 0x63
beq _0800DE26
ldr r3, [r5, 0x24]
ldr r0, _0800DE34
cmp r3, r0
bne _0800DDCA
movs r1, 0x1A
ldrsh r0, [r5, r1]
movs r3, 0x2
ldrsh r1, [r6, r3]
subs r0, r1
lsrs r1, r0, 31
adds r0, r1
asrs r0, 1
adds r3, r0, r4
_0800DDCA:
movs r4, 0x18
ldrsh r0, [r5, r4]
movs r4, 0
ldrsh r1, [r6, r4]
subs r0, r1
asrs r1, r7, 16
adds r4, r0, r1
movs r7, 0x1A
ldrsh r0, [r5, r7]
movs r7, 0x2
ldrsh r1, [r6, r7]
subs r0, r1
adds r2, r0, r2
adds r0, r5, 0
adds r0, 0xCC
ldrh r0, [r0]
ldrh r1, [r5, 0x18]
adds r0, r1
strh r0, [r5, 0x18]
adds r0, r5, 0
adds r0, 0xCE
ldrh r0, [r0]
ldrh r7, [r5, 0x1A]
adds r0, r7
strh r0, [r5, 0x1A]
adds r1, r4, 0
adds r1, 0x3F
movs r0, 0xB7
lsls r0, 1
cmp r1, r0
bhi _0800DE26
movs r0, 0x40
negs r0, r0
cmp r2, r0
ble _0800DE26
cmp r2, 0xDF
bgt _0800DE26
ldr r0, [r5, 0x3C]
str r0, [sp]
adds r0, r5, 0
adds r0, 0x28
str r0, [sp, 0x4]
mov r0, r8
adds r1, r4, 0
bl DoAxFrame_800558C
_0800DE26:
movs r0, 0x1
_0800DE28:
add sp, 0x8
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0800DE34: .4byte 0x0000ffff
thumb_func_end sub_800DD0C
thumb_func_start sub_800DE38
sub_800DE38:
push {r4,r5,lr}
adds r5, r0, 0
adds r0, 0x58
ldrh r1, [r0]
movs r0, 0x80
lsls r0, 6
ands r0, r1
cmp r0, 0
beq _0800DE4E
movs r0, 0
b _0800DE50
_0800DE4E:
lsrs r0, r1, 15
_0800DE50:
cmp r0, 0
bne _0800DE84
adds r0, r5, 0
bl sub_800DCA8
ldr r0, [r5, 0x34]
cmp r0, 0x3
bne _0800DE80
movs r4, 0
b _0800DE66
_0800DE64:
adds r4, 0x1
_0800DE66:
cmp r4, 0x1
bgt _0800DE80
adds r0, r4, 0
bl sub_800F18C
adds r2, r0, 0
ldr r1, [r2]
ldr r0, [r5, 0x38]
cmp r1, r0
bne _0800DE64
ldr r0, [r2, 0x4]
subs r0, 0x1
str r0, [r2, 0x4]
_0800DE80:
movs r0, 0
b _0800DE86
_0800DE84:
movs r0, 0x1
_0800DE86:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_800DE38
thumb_func_start sub_800DE8C
sub_800DE8C:
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x14
adds r6, r0, 0
movs r0, 0x94
adds r0, r6
mov r8, r0
ldr r4, [r0, 0x18]
cmp r4, 0
beq _0800DEA4
b _0800E09C
_0800DEA4:
ldr r1, [r0, 0x14]
movs r7, 0x1
str r7, [sp]
adds r0, r6, 0
adds r0, 0xAC
str r0, [sp, 0x4]
add r2, sp, 0xC
str r2, [sp, 0x8]
mov r0, r8
movs r2, 0
movs r3, 0
bl sub_8009A7C
lsls r0, 24
lsrs r5, r0, 24
cmp r5, 0
bne _0800DEC8
b _0800E030
_0800DEC8:
add r0, sp, 0xC
movs r1, 0
ldrsh r0, [r0, r1]
cmp r0, 0
beq _0800DEE8
adds r0, r6, 0
adds r0, 0xB4
strb r7, [r0]
ldr r0, _0800DF0C
ldr r0, [r0]
ldr r2, _0800DF10
adds r1, r0, r2
str r4, [r1]
ldr r1, _0800DF14
adds r0, r1
str r4, [r0]
_0800DEE8:
add r0, sp, 0xC
ldrh r0, [r0, 0x2]
lsls r0, 16
asrs r0, 16
cmp r0, 0
beq _0800DF6C
cmp r0, 0x63
bne _0800DF1C
ldr r0, _0800DF0C
ldr r0, [r0]
ldr r1, _0800DF10
adds r2, r0, r1
ldr r1, _0800DF18
str r1, [r2]
ldr r2, _0800DF14
adds r0, r2
str r4, [r0]
b _0800DF6C
.align 2, 0
_0800DF0C: .4byte gUnknown_203B0CC
_0800DF10: .4byte 0x00001a08
_0800DF14: .4byte 0x00001a0c
_0800DF18: .4byte 0x00000c1c
_0800DF1C:
cmp r0, 0
ble _0800DF50
ldr r0, _0800DF40
ldr r4, [r0]
ldr r0, _0800DF44
adds r5, r4, r0
ldr r1, _0800DF48
adds r4, r1
add r0, sp, 0xC
movs r2, 0x2
ldrsh r1, [r0, r2]
ldr r0, _0800DF4C
bl __divsi3
str r0, [r4]
str r0, [r5]
b _0800DF6C
.align 2, 0
_0800DF40: .4byte gUnknown_203B0CC
_0800DF44: .4byte 0x00001a08
_0800DF48: .4byte 0x00001a0c
_0800DF4C: .4byte 0x00000c1c
_0800DF50:
ldr r0, _0800DFA4
ldr r4, [r0]
ldr r0, _0800DFA8
adds r1, r4, r0
ldr r0, _0800DFAC
str r0, [r1]
ldr r1, _0800DFB0
adds r4, r1
add r1, sp, 0xC
movs r2, 0x2
ldrsh r1, [r1, r2]
bl __divsi3
str r0, [r4]
_0800DF6C:
mov r0, r8
adds r0, 0x20
ldrb r0, [r0]
cmp r0, 0
bne _0800DF78
b _0800E094
_0800DF78:
ldr r0, _0800DFA4
ldr r1, [r0]
ldr r2, _0800DFB4
adds r0, r1, r2
ldr r0, [r0]
cmp r0, 0
beq _0800DFB8
cmp r0, 0x1
bne _0800DFEA
adds r0, r6, 0
adds r0, 0xB8
ldr r0, [r0]
ldr r0, [r0, 0x4]
ldr r1, [r0, 0x10]
movs r0, 0xE0
lsls r0, 2
adds r1, r0
movs r0, 0xE0
movs r2, 0x10
bl sub_809971C
b _0800DFEA
.align 2, 0
_0800DFA4: .4byte gUnknown_203B0CC
_0800DFA8: .4byte 0x00001a08
_0800DFAC: .4byte 0x00000c1c
_0800DFB0: .4byte 0x00001a0c
_0800DFB4: .4byte 0x00001a04
_0800DFB8:
ldr r2, _0800E010
adds r0, r1, r2
ldr r0, [r0]
movs r1, 0x64
bl __divsi3
adds r7, r0, 0
movs r4, 0
adds r6, 0xB8
movs r5, 0xE0
lsls r5, 2
_0800DFCE:
adds r0, r4, 0
adds r0, 0xE0
ldr r1, [r6]
ldr r1, [r1, 0x4]
ldr r1, [r1, 0x10]
adds r1, r5
adds r2, r7, 0
movs r3, 0
bl SetBGPaletteBufferColorRGB
adds r5, 0x4
adds r4, 0x1
cmp r4, 0xF
ble _0800DFCE
_0800DFEA:
ldr r1, _0800E014
ldr r2, _0800E018
adds r0, r2, 0
strh r0, [r1]
ldr r0, _0800E01C
ldr r0, [r0]
ldr r1, _0800E010
adds r2, r0, r1
adds r1, 0x4
adds r0, r1
ldr r1, [r2]
ldr r0, [r0]
adds r1, r0
str r1, [r2]
cmp r1, 0
bge _0800E020
movs r0, 0
str r0, [r2]
b _0800E094
.align 2, 0
_0800E010: .4byte 0x00001a08
_0800E014: .4byte gUnknown_2026E4E
_0800E018: .4byte 0x00000a0a
_0800E01C: .4byte gUnknown_203B0CC
_0800E020:
ldr r0, _0800E02C
cmp r1, r0
ble _0800E094
str r0, [r2]
b _0800E094
.align 2, 0
_0800E02C: .4byte 0x00000c1c
_0800E030:
bl sub_8009BE4
adds r0, r6, 0
bl sub_800DCA8
bl sub_8000728
cmp r0, 0x1
bne _0800E058
bl LoadDungeonMapPalette
movs r0, 0
movs r1, 0
bl sub_803EAF0
movs r0, 0x80
lsls r0, 8
movs r1, 0
bl sub_800CD64
_0800E058:
ldr r4, _0800E084
ldr r0, [r4]
ldr r2, _0800E088
adds r0, r2
ldr r0, [r0]
bl sub_800CDA8
ldr r1, _0800E08C
ldr r0, [r4]
ldr r2, _0800E090
adds r0, r2
ldrh r0, [r0]
strh r0, [r1]
movs r0, 0x1
bl sub_800F18C
str r5, [r0, 0x4]
movs r1, 0x1
negs r1, r1
str r1, [r0]
movs r0, 0
b _0800E0A6
.align 2, 0
_0800E084: .4byte gUnknown_203B0CC
_0800E088: .4byte 0x00001a10
_0800E08C: .4byte gUnknown_2026E4E
_0800E090: .4byte 0x00001a14
_0800E094:
mov r1, r8
ldr r0, [r1, 0x14]
adds r0, 0x1
str r0, [r1, 0x14]
_0800E09C:
mov r2, r8
ldr r0, [r2, 0x18]
subs r0, 0x1
str r0, [r2, 0x18]
movs r0, 0x1
_0800E0A6:
add sp, 0x14
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_800DE8C
thumb_func_start sub_800E0B4
sub_800E0B4:

View File

@ -6,6 +6,17 @@
#include "structs/str_position.h"
#include "structs/str_file_system.h"
struct unkStruct_203B0CC_x94
{
s32 unk0;
u16 **unk4;
u8 fill8[0x14-0x8];
s32 unk14;
s32 unk18;
s32 fill1C;
u8 unk20;
};
struct unkStruct_203B0CC_sub
{
// size: 0xD0
@ -28,23 +39,25 @@ struct unkStruct_203B0CC_sub
s32 unk50;
u8 unk54;
u8 fill55[0x58 - 0x55];
axObject unk58;
u8 fillA4[0xB8 - 0xA4];
axdata unk58;
struct unkStruct_203B0CC_x94 unk94;
OpenedFile *unkB8;
u8 fillBC[0xCC - 0xBC];
s16 unkCC[2]; // NOTE: might be DungeonPos
s16 unkCC[2];
};
#define UNK_203B0CC_ARR_COUNT 0x20
struct unkStruct_203B0CC
{
// size: 0x1A18
struct unkStruct_203B0CC_sub unk0[0x20];
u32 unk1A00;
struct unkStruct_203B0CC_sub unk0[UNK_203B0CC_ARR_COUNT];
s32 unk1A00;
/* 0x1A04 */ u32 fileSelection;
u32 unk1A08;
u32 unk1A0C;
u32 unk1A10;
u8 fill1A14[0x1A18 - 0x1A14];
s32 unk1A08;
s32 unk1A0C;
s32 unk1A10;
u16 unk1A14;
};
bool8 sub_800E9A8(s32 a0);

View File

@ -57,4 +57,17 @@ void sub_800569C(DungeonPos *, axdata *, u8);
void sub_8005700(DungeonPos *dstPos, axdata *axData);
void sub_8005770(s32, const RGB *color, s32 brightness, const RGB *ramp);
static inline bool8 AxFlag8000(axdata *ax)
{
return (ax->flags & 0x8000) != 0;
}
static inline bool8 AxFlag8000_Not2000(axdata *ax)
{
if (ax->flags & 0x2000)
return FALSE;
else
return (ax->flags & 0x8000) != 0;
}
#endif // GUARD_SPRITE_H

View File

@ -11,6 +11,8 @@
#include "main_loops.h"
#include "memory.h"
#include "sprite.h"
#include "bg_palette_buffer.h"
#include "cpu.h"
EWRAM_INIT struct unkStruct_203B0CC *gUnknown_203B0CC = NULL;
@ -39,128 +41,113 @@ extern void sub_800F094();
void sub_800DAC0(u32 fileSelection)
{
s32 index;
OpenedFile *filePtr;
struct unkStruct_203B0CC_sub *preload;
s32 i;
OpenedFile *filePtr;
struct unkStruct_203B0CC_sub *ptr;
if (gUnknown_203B0CC != NULL) {
sub_800DB7C();
}
gUnknown_203B0CC = MemoryAlloc(sizeof(struct unkStruct_203B0CC), 0xb);
MemoryClear8(gUnknown_203B0CC, sizeof(struct unkStruct_203B0CC));
gUnknown_203B0CC->fileSelection = fileSelection;
for(index = 0, preload = &gUnknown_203B0CC->unk0[index]; index < 0x20; index++, preload++)
{
preload->unk4 = -1;
}
sub_800ED38(fileSelection);
sub_800F034();
if (gUnknown_203B0CC != NULL) {
sub_800DB7C();
}
gUnknown_203B0CC = MemoryAlloc(sizeof(struct unkStruct_203B0CC), 0xb);
MemoryClear8(gUnknown_203B0CC, sizeof(struct unkStruct_203B0CC));
gUnknown_203B0CC->fileSelection = fileSelection;
for (i = 0, ptr = &gUnknown_203B0CC->unk0[i]; i < 0x20; i++, ptr++) {
ptr->unk4 = -1;
}
sub_800ED38(fileSelection);
sub_800F034();
switch(gUnknown_203B0CC->fileSelection)
{
case 1:
filePtr = Call_OpenFileAndGetFileDataPtr(gefob001_string, &gEffectFileArchive);
if (filePtr != NULL) {
sub_8005610(filePtr,0x248,0x1f,0);
CloseFile(filePtr);
}
break;
case 0:
filePtr = Call_OpenFileAndGetFileDataPtr(gefob000_string, &gEffectFileArchive);
if (filePtr != NULL) {
sub_8005610(filePtr,0x248,0x1f,0);
CloseFile(filePtr);
}
break;
}
switch (gUnknown_203B0CC->fileSelection) {
case 1:
filePtr = Call_OpenFileAndGetFileDataPtr(gefob001_string, &gEffectFileArchive);
if (filePtr != NULL) {
sub_8005610(filePtr,0x248,0x1f,0);
CloseFile(filePtr);
}
break;
case 0:
filePtr = Call_OpenFileAndGetFileDataPtr(gefob000_string, &gEffectFileArchive);
if (filePtr != NULL) {
sub_8005610(filePtr,0x248,0x1f,0);
CloseFile(filePtr);
}
break;
}
}
void sub_800DB7C(void)
{
s32 index;
struct unkStruct_203B0CC_sub *preload;
s32 i;
struct unkStruct_203B0CC_sub *ptr;
for(index = 0, preload = &gUnknown_203B0CC->unk0[index]; index < 0x20; index++, preload++)
{
if(preload->unk4 != -1)
sub_800DC14(preload->unk4);
}
for (i = 0, ptr = &gUnknown_203B0CC->unk0[i]; i < UNK_203B0CC_ARR_COUNT; i++, ptr++) {
if (ptr->unk4 != -1)
sub_800DC14(ptr->unk4);
}
sub_800F078();
sub_800ED64();
if(gUnknown_203B0CC != NULL)
{
MemoryFree(gUnknown_203B0CC);
gUnknown_203B0CC = NULL;
}
sub_800F078();
sub_800ED64();
TRY_FREE_AND_SET_NULL(gUnknown_203B0CC);
}
void sub_800DBBC(void)
{
s32 index1;
s32 index2;
struct unkStruct_203B0CC_sub *preload;
struct unkStruct_203B0CC_sub *preload2;
s32 i1, i2;
struct unkStruct_203B0CC_sub *ptr1, *ptr2;
for(index1 = 0, preload = &gUnknown_203B0CC->unk0[index1]; index1 < 0x20; index1++, preload++)
{
if(preload->unk4 != -1)
sub_800DC14(preload->unk4);
}
for (i1 = 0, ptr1 = &gUnknown_203B0CC->unk0[i1]; i1 < UNK_203B0CC_ARR_COUNT; i1++, ptr1++) {
if (ptr1->unk4 != -1) {
sub_800DC14(ptr1->unk4);
}
}
for (i2 = 0, ptr2 = &gUnknown_203B0CC->unk0[i2]; i2 < UNK_203B0CC_ARR_COUNT; i2++, ptr2++) {
ptr2->unk4 = -1;
}
for(index2 = 0, preload2 = &gUnknown_203B0CC->unk0[index2]; index2 < 0x20; index2++, preload2++)
{
preload2->unk4 = -1;
}
sub_800ED80();
sub_800F094();
sub_800ED80();
sub_800F094();
}
bool8 sub_800DCC0(void)
{
return gUnknown_203B0CC != NULL;
return gUnknown_203B0CC != NULL;
}
void sub_800DC14(s32 param_1)
{
s32 index1;
s32 index2;
struct unkStruct_800F18C *piVar3;
struct unkStruct_800F18C *puVar4;
struct unkStruct_203B0CC_sub *preload;
index1 = sub_800E2C0(param_1);
if (index1 != -1) {
preload = &gUnknown_203B0CC->unk0[index1];
if (preload->unk34 == 4) {
sub_8009BE4();
if (sub_8000728() == 1) {
LoadDungeonMapPalette();
sub_803EAF0(0, NULL);
sub_800CD64(0x8000,0);
}
}
if (preload->unk34 == 3) {
for (index2 = 0; index2 < 2; index2 = index2 + 1) {
piVar3 = sub_800F18C(index2);
if (piVar3->effectID == preload->effectID) {
piVar3->counter--;
break;
s32 index1 = sub_800E2C0(param_1);
if (index1 != -1) {
struct unkStruct_203B0CC_sub *ptr = &gUnknown_203B0CC->unk0[index1];
if (ptr->unk34 == 4) {
sub_8009BE4();
if (sub_8000728() == 1) {
LoadDungeonMapPalette();
sub_803EAF0(0, NULL);
sub_800CD64(0x8000,0);
}
}
}
if (ptr->unk34 == 3) {
s32 i;
for (i = 0; i < 2; i = i + 1) {
struct unkStruct_800F18C *piVar3 = sub_800F18C(i);
if (piVar3->effectID == ptr->effectID) {
piVar3->counter--;
break;
}
}
}
else {
struct unkStruct_800F18C *puVar4 = sub_800F18C(1);
puVar4->counter = 0;
puVar4->effectID = -1;
}
sub_800DCA8(ptr);
}
else {
puVar4 = sub_800F18C(1);
puVar4->counter = 0;
puVar4->effectID = -1;
}
sub_800DCA8(preload);
}
}
u32 sub_800DC9C(void) {
u32 sub_800DC9C(void)
{
return sub_800E900();
}
@ -168,8 +155,7 @@ void sub_800DCA8(struct unkStruct_203B0CC_sub *param_1)
{
param_1->unk4 = -1;
param_1->unk54 = 0;
if(param_1->unkB8 != NULL)
{
if (param_1->unkB8 != NULL) {
sub_800F204(param_1->unkB8);
param_1->unkB8 = NULL;
}
@ -177,14 +163,351 @@ void sub_800DCA8(struct unkStruct_203B0CC_sub *param_1)
void sub_800DCD0(struct unkStruct_203B0CC_sub *param_1)
{
if ((param_1->unk4C != -1) && (param_1->unk50 == 0)) {
if (sub_8000728() != 2) {
PlaySound(param_1->unk4C);
if (param_1->unk4C != -1 && param_1->unk50 == 0) {
if (sub_8000728() != 2) {
PlaySound(param_1->unk4C);
}
param_1->unk4C = -1;
param_1->unk50 = -1;
}
if (param_1->unk50 > 0) {
param_1->unk50--;
}
param_1->unk4C = -1;
param_1->unk50 = -1;
}
if (param_1->unk50 > 0) {
param_1->unk50--;
}
}
#ifdef NONMATCHING
bool8 sub_800DD0C(struct unkStruct_203B0CC_sub *param_1, DungeonPos *posArg)
{
struct axObject *axObj = &param_1->unk58;
if (!AxFlag8000_Not2000(&axObj->axdata)) {
sub_800DCA8(param_1);
if (param_1->unk34 == 3) {
s32 i;
for (i = 0; i < 2; i++) {
struct unkStruct_800F18C *puVar4 = sub_800F18C(i);
if (puVar4->effectID == param_1->effectID) {
puVar4->counter--;
break;
}
}
}
return FALSE;
}
else {
DungeonPos pos;
s32 unkYAdd;
RunAxAnimationFrame(&axObj->axdata);
unkYAdd = 0;
if ((param_1->unk8 % 8) == 0) {
switch (param_1->unk14) {
case 3:
case 4:
case 5:
unkYAdd -= 3;
break;
default:
unkYAdd += 3;
break;
}
}
else {
unkYAdd += 3;
}
pos = (DungeonPos) {0, 0};
if (param_1->unk20 != -1) {
pos.x = param_1->unk1c.x;
pos.y = param_1->unk1c.y;
}
if (pos.x != 99 && pos.y != 99) {
s32 x, y;
s32 unkY = param_1->unk24;
if (unkY == 0xffff) {
unkY = (param_1->unk18.y - posArg->y) / 2 + unkYAdd;
}
x = param_1->unk18.x - posArg->x + pos.x;
y = param_1->unk18.y - posArg->y + pos.y;
param_1->unk18.x += param_1->unkCC[0];
param_1->unk18.y += param_1->unkCC[1];
if (x > -64 && x < 304 && y > -64 && y < 224) {
DoAxFrame_800558C(&axObj->axdata,x,y,unkY,param_1->paletteNum,&param_1->spriteMasks);
}
}
return TRUE;
}
}
#else
NAKED bool8 sub_800DD0C(struct unkStruct_203B0CC_sub *param_1, DungeonPos *posArg)
{
asm_unified(" push {r4-r7,lr}\n"
" mov r7, r8\n"
" push {r7}\n"
" sub sp, 0x8\n"
" adds r5, r0, 0\n"
" adds r6, r1, 0\n"
" movs r0, 0x58\n"
" adds r0, r5\n"
" mov r8, r0\n"
" ldrh r1, [r0]\n"
" movs r0, 0x80\n"
" lsls r0, 6\n"
" ands r0, r1\n"
" cmp r0, 0\n"
" beq _0800DD2E\n"
" movs r0, 0\n"
" b _0800DD30\n"
"_0800DD2E:\n"
" lsrs r0, r1, 15\n"
"_0800DD30:\n"
" cmp r0, 0\n"
" bne _0800DD64\n"
" adds r0, r5, 0\n"
" bl sub_800DCA8\n"
" ldr r0, [r5, 0x34]\n"
" cmp r0, 0x3\n"
" bne _0800DD60\n"
" movs r4, 0\n"
" b _0800DD46\n"
"_0800DD44:\n"
" adds r4, 0x1\n"
"_0800DD46:\n"
" cmp r4, 0x1\n"
" bgt _0800DD60\n"
" adds r0, r4, 0\n"
" bl sub_800F18C\n"
" adds r2, r0, 0\n"
" ldr r1, [r2]\n"
" ldr r0, [r5, 0x38]\n"
" cmp r1, r0\n"
" bne _0800DD44\n"
" ldr r0, [r2, 0x4]\n"
" subs r0, 0x1\n"
" str r0, [r2, 0x4]\n"
"_0800DD60:\n"
" movs r0, 0\n"
" b _0800DE28\n"
"_0800DD64:\n"
" mov r0, r8\n"
" bl RunAxAnimationFrame\n"
" movs r4, 0\n"
" ldr r0, [r5, 0x8]\n"
" movs r1, 0x7\n"
" ands r0, r1\n"
" cmp r0, 0\n"
" bne _0800DD88\n"
" ldr r0, [r5, 0x14]\n"
" cmp r0, 0x5\n"
" bgt _0800DD84\n"
" cmp r0, 0x3\n"
" blt _0800DD84\n"
" subs r4, 0x3\n"
" b _0800DD8A\n"
"_0800DD84:\n"
" adds r4, 0x3\n"
" b _0800DD8A\n"
"_0800DD88:\n"
" movs r4, 0x3\n"
"_0800DD8A:\n"
" movs r2, 0\n"
" ldr r1, [r5, 0x20]\n"
" movs r0, 0x1\n"
" negs r0, r0\n"
" cmp r1, r0\n"
" beq _0800DD9E\n"
" ldrh r0, [r5, 0x1E]\n"
" lsls r0, 16\n"
" ldrh r2, [r5, 0x1C]\n"
" orrs r2, r0\n"
"_0800DD9E:\n"
" lsls r0, r2, 16\n"
" asrs r1, r0, 16\n"
" adds r7, r0, 0\n"
" cmp r1, 0x63\n"
" beq _0800DE26\n"
" asrs r0, r2, 16\n"
" adds r2, r0, 0\n"
" cmp r2, 0x63\n"
" beq _0800DE26\n"
" ldr r3, [r5, 0x24]\n"
" ldr r0, _0800DE34\n"
" cmp r3, r0\n"
" bne _0800DDCA\n"
" movs r1, 0x1A\n"
" ldrsh r0, [r5, r1]\n"
" movs r3, 0x2\n"
" ldrsh r1, [r6, r3]\n"
" subs r0, r1\n"
" lsrs r1, r0, 31\n"
" adds r0, r1\n"
" asrs r0, 1\n"
" adds r3, r0, r4\n"
"_0800DDCA:\n"
" movs r4, 0x18\n"
" ldrsh r0, [r5, r4]\n"
" movs r4, 0\n"
" ldrsh r1, [r6, r4]\n"
" subs r0, r1\n"
" asrs r1, r7, 16\n"
" adds r4, r0, r1\n"
" movs r7, 0x1A\n"
" ldrsh r0, [r5, r7]\n"
" movs r7, 0x2\n"
" ldrsh r1, [r6, r7]\n"
" subs r0, r1\n"
" adds r2, r0, r2\n"
" adds r0, r5, 0\n"
" adds r0, 0xCC\n"
" ldrh r0, [r0]\n"
" ldrh r1, [r5, 0x18]\n"
" adds r0, r1\n"
" strh r0, [r5, 0x18]\n"
" adds r0, r5, 0\n"
" adds r0, 0xCE\n"
" ldrh r0, [r0]\n"
" ldrh r7, [r5, 0x1A]\n"
" adds r0, r7\n"
" strh r0, [r5, 0x1A]\n"
" adds r1, r4, 0\n"
" adds r1, 0x3F\n"
" movs r0, 0xB7\n"
" lsls r0, 1\n"
" cmp r1, r0\n"
" bhi _0800DE26\n"
" movs r0, 0x40\n"
" negs r0, r0\n"
" cmp r2, r0\n"
" ble _0800DE26\n"
" cmp r2, 0xDF\n"
" bgt _0800DE26\n"
" ldr r0, [r5, 0x3C]\n"
" str r0, [sp]\n"
" adds r0, r5, 0\n"
" adds r0, 0x28\n"
" str r0, [sp, 0x4]\n"
" mov r0, r8\n"
" adds r1, r4, 0\n"
" bl DoAxFrame_800558C\n"
"_0800DE26:\n"
" movs r0, 0x1\n"
"_0800DE28:\n"
" add sp, 0x8\n"
" pop {r3}\n"
" mov r8, r3\n"
" pop {r4-r7}\n"
" pop {r1}\n"
" bx r1\n"
" .align 2, 0\n"
"_0800DE34: .4byte 0x0000ffff");
}
#endif // NONMATCHING
bool8 sub_800DE38(struct unkStruct_203B0CC_sub *a1)
{
s32 i;
if (!AxFlag8000_Not2000(&a1->unk58)) {
sub_800DCA8(a1);
if (a1->unk34 == 3) {
for (i = 0; i < 2; i++) {
struct unkStruct_800F18C *strPtr = sub_800F18C(i);
if (strPtr->effectID == a1->effectID) {
strPtr->counter--;
break;
}
}
}
return FALSE;
}
return TRUE;
}
extern s16 gUnknown_2026E4E;
extern bool8 sub_8009A7C(void *a0, s32 a1, s32 a2, s32 a3, bool8 a4, s32 *a5, s16 *a6);
extern void sub_809971C(u16 a0, const RGB *a1, int a2);
static inline const EfoFileData *GetFileEfo(struct unkStruct_203B0CC_sub *a0)
{
return a0->unkB8->data;
}
bool8 sub_800DE8C(struct unkStruct_203B0CC_sub *a0, DungeonPos *unused)
{
s16 sp[4];
struct unkStruct_203B0CC_x94 *r8 = &a0->unk94;
if (r8->unk18 == 0) {
if (sub_8009A7C(r8, r8->unk14, 0, 0, TRUE, &r8->unk18, sp)) {
if (sp[0] != 0) {
r8->unk20 = 1;
gUnknown_203B0CC->unk1A08 = 0;
gUnknown_203B0CC->unk1A0C = 0;
}
if (sp[1] != 0) {
if (sp[1] == 99) {
gUnknown_203B0CC->unk1A08 = 3100;
gUnknown_203B0CC->unk1A0C = 0;
}
else if (sp[1] > 0) {
gUnknown_203B0CC->unk1A08 = gUnknown_203B0CC->unk1A0C = 3100 / sp[1];
}
else {
gUnknown_203B0CC->unk1A08 = 3100;
gUnknown_203B0CC->unk1A0C = 3100 / sp[1];
}
}
if (r8->unk20 != 0) {
switch (gUnknown_203B0CC->fileSelection) {
case 1:
sub_809971C(224, &GetFileEfo(a0)->unk10->pal[224],16);
break;
case 0: {
s32 i;
s32 brightness = gUnknown_203B0CC->unk1A08 / 100;
for (i = 0; i < 16; i++) {
SetBGPaletteBufferColorRGB(i + 224, &GetFileEfo(a0)->unk10->pal[i + 224], brightness, NULL);
}
break;
}
}
gUnknown_2026E4E = 2570;
gUnknown_203B0CC->unk1A08 += gUnknown_203B0CC->unk1A0C;
if (gUnknown_203B0CC->unk1A08 < 0) {
gUnknown_203B0CC->unk1A08 = 0;
}
else if (gUnknown_203B0CC->unk1A08 > 3100) {
gUnknown_203B0CC->unk1A08 = 3100;
}
}
}
else {
struct unkStruct_800F18C *strPtr;
sub_8009BE4();
sub_800DCA8(a0);
if (sub_8000728() == 1) {
LoadDungeonMapPalette();
sub_803EAF0(0, 0);
sub_800CD64(0x8000, FALSE);
}
sub_800CDA8(gUnknown_203B0CC->unk1A10);
gUnknown_2026E4E = gUnknown_203B0CC->unk1A14;
strPtr = sub_800F18C(1);
strPtr->counter = 0;
strPtr->effectID = -1;
return FALSE;
}
r8->unk14++;
}
r8->unk18--;
return TRUE;
}
//

View File

@ -45,14 +45,6 @@ extern s32 gDungeonFramesCounter;
extern void sub_8042EC8(Entity *a0, s32 a1);
static inline u16 GetUnkFlag(Entity *entity)
{
if ((entity->axObj.axdata.flags & 0x2000))
return 0;
else
return entity->axObj.axdata.flags >> 15;
}
void sub_806C51C(Entity *entity)
{
s32 x, y, y2;
@ -82,7 +74,7 @@ void sub_806C51C(Entity *entity)
if (entity->axObj.unk43_animId2 == entity->axObj.unk42_animId1 && entity->axObj.unk45_orientation == entity->axObj.unk44_direction1 && entity->axObj.unk47 == 0) {
bool8 r2 = FALSE;
if (!GetUnkFlag(entity))
if (!AxFlag8000_Not2000(&entity->axObj.axdata))
r2 = TRUE;
if (r2) {

View File

@ -25,11 +25,6 @@
#include "text_2.h"
#include "text_3.h"
static inline bool8 CheckAxFlag8000(axdata *ptr)
{
return (ptr->flags & 0x8000) != 0;
}
static inline bool8 ResetFlags(axdata *ptr)
{
return ptr->flags = 0;
@ -124,7 +119,7 @@ static void AnimateSprites(void)
}
for (dir = 0; dir < NUM_DIRECTIONS; dir++) {
if (CheckAxFlag8000(&gFriendAreasMapPtr->arrowSprites[dir])) {
if (AxFlag8000(&gFriendAreasMapPtr->arrowSprites[dir])) {
RunAxAnimationFrame(&gFriendAreasMapPtr->arrowSprites[dir]);
// Hide non-diagonal arrows when R button is pressed.
if ((gRealInputs.held & R_BUTTON) && (dir % 2) == 0)

View File

@ -257,7 +257,7 @@ struct Struct_8009A7C
u16 **unk4;
};
bool8 sub_8009A7C(struct Struct_8009A7C *a0, s32 a1, s32 a2, s32 a3, bool8 a4, s32 *a5, u16 *a6)
bool8 sub_8009A7C(struct Struct_8009A7C *a0, s32 a1, s32 a2, s32 a3, bool8 a4, s32 *a5, s16 *a6)
{
s32 countY;
s32 yId;

View File

@ -531,20 +531,12 @@ static void AxResInitUnoriented(axdata *a0, axmain *a1, u32 a2, u32 a3, u32 spri
a0->positions = NULL;
}
static inline s16 check_flag_for_80054BC(u16 flags)
{
if (flags & 0x2000)
return 0;
else
return flags >> 15;
}
// arm9.bin::02001AC4
void RunAxAnimationFrame(axdata *a0)
{
const ax_anim *aData;
if (!check_flag_for_80054BC(a0->flags))
if (!AxFlag8000_Not2000(a0))
return;
if (a0->sub1.poseId >= 0) {