sub_80A6EFC

This commit is contained in:
DizzyEggg
2025-05-15 12:32:24 +02:00
parent 6760a529c8
commit e649cabbd3
3 changed files with 255 additions and 801 deletions

View File

@@ -7,776 +7,6 @@
thumb_func_start GroundSprite_ExtendPaletteAdd
GroundSprite_ExtendPaletteAdd:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x14
mov r10, r0
lsls r1, 16
lsrs r2, r1, 16
adds r5, r2, 0
movs r0, 0xC0
lsls r0, 2
ands r0, r2
cmp r0, 0
bne _080A6AB0
b _080A6C6C
_080A6AB0:
movs r0, 0x80
lsls r0, 3
ands r0, r2
cmp r0, 0
beq _080A6AD8
ldr r0, _080A6AD4
ldr r1, [r0]
movs r3, 0x86
lsls r3, 1
adds r4, r1, r3
ldrh r1, [r4]
adds r3, r0, 0
cmp r1, r2
bne _080A6B36
ldrh r0, [r4, 0x2]
adds r0, 0x1
strh r0, [r4, 0x2]
b _080A6C78
.align 2, 0
_080A6AD4: .4byte gUnknown_3001B7C
_080A6AD8:
movs r0, 0
mov r8, r0
ldr r1, _080A6B1C
ldr r0, [r1]
movs r2, 0x84
lsls r2, 1
adds r4, r0, r2
adds r3, r1, 0
movs r1, 0xE8
lsls r1, 13
_080A6AEC:
ldrh r0, [r4]
cmp r0, r5
bne _080A6B24
lsrs r1, 16
adds r3, r1, 0
ldrh r0, [r4, 0x2]
adds r0, 0x1
strh r0, [r4, 0x2]
mov r0, r10
cmp r0, 0
beq _080A6B08
subs r1, 0x10
adds r0, 0x68
strh r1, [r0]
_080A6B08:
adds r0, r3, 0
subs r0, 0x10
str r0, [sp]
str r5, [sp, 0x4]
movs r0, 0
ldr r1, _080A6B20
mov r2, r8
bl Log
b _080A6C78
.align 2, 0
_080A6B1C: .4byte gUnknown_3001B7C
_080A6B20: .4byte gUnknown_81177F4
_080A6B24:
movs r2, 0x80
lsls r2, 9
adds r1, r2
movs r0, 0x1
add r8, r0
adds r4, 0x4
mov r2, r8
cmp r2, 0x1
ble _080A6AEC
_080A6B36:
movs r0, 0x80
lsls r0, 3
ands r0, r5
cmp r0, 0
beq _080A6B68
movs r0, 0x1
mov r8, r0
ldr r0, [r3]
movs r1, 0x86
lsls r1, 1
adds r4, r0, r1
movs r2, 0x2
ldrsh r0, [r4, r2]
cmp r0, 0
ble _080A6BA8
ldr r0, _080A6B60
ldr r1, _080A6B64
adds r2, r5, 0
bl FatalError
.align 2, 0
_080A6B60: .4byte gUnknown_8117858
_080A6B64: .4byte gUnknown_8117864
_080A6B68:
movs r0, 0
mov r8, r0
ldr r0, [r3]
movs r1, 0x84
lsls r1, 1
adds r4, r0, r1
movs r2, 0x2
ldrsh r0, [r4, r2]
cmp r0, 0
ble _080A6B90
_080A6B7C:
movs r3, 0x1
add r8, r3
adds r4, 0x4
mov r0, r8
cmp r0, 0x1
bgt _080A6B96
movs r1, 0x2
ldrsh r0, [r4, r1]
cmp r0, 0
bgt _080A6B7C
_080A6B90:
mov r2, r8
cmp r2, 0x1
ble _080A6BA8
_080A6B96:
ldr r0, _080A6BA0
ldr r1, _080A6BA4
adds r2, r5, 0
bl FatalError
.align 2, 0
_080A6BA0: .4byte gUnknown_8117888
_080A6BA4: .4byte gUnknown_8117864
_080A6BA8:
mov r0, r8
adds r0, 0x1D
lsls r0, 16
lsrs r0, 16
str r0, [sp, 0xC]
mov r3, r8
lsls r0, r3, 20
movs r1, 0xE8
lsls r1, 17
adds r0, r1
lsrs r0, 16
str r0, [sp, 0x10]
movs r0, 0x80
lsls r0, 2
ands r0, r5
cmp r0, 0
beq _080A6BE8
ldr r0, _080A6BE0
ldr r1, _080A6BE4
bl OpenFileAndGetFileDataPtr
mov r9, r0
ldr r7, [r0, 0x4]
movs r0, 0xFF
ands r0, r5
lsls r0, 6
adds r7, r0
b _080A6BFE
.align 2, 0
_080A6BE0: .4byte gUnknown_81177EC
_080A6BE4: .4byte gMonsterFileArchive
_080A6BE8:
movs r0, 0xFF
ands r0, r5
lsls r0, 2
ldr r1, _080A6C60
adds r0, r1
ldr r0, [r0]
ldr r1, _080A6C64
bl OpenFileAndGetFileDataPtr
mov r9, r0
ldr r7, [r0, 0x4]
_080A6BFE:
movs r0, 0x80
lsls r0, 5
ands r0, r5
lsls r0, 16
lsrs r0, 16
negs r0, r0
lsrs r6, r0, 31
movs r0, 0x80
lsls r0, 6
ands r0, r5
cmp r0, 0
beq _080A6C1A
movs r0, 0x2
orrs r6, r0
_080A6C1A:
ldr r0, [sp, 0xC]
adds r1, r6, 0
bl sub_80997F4
ldr r0, [sp, 0x10]
adds r1, r7, 0
movs r2, 0x10
bl sub_809971C
strh r5, [r4]
movs r0, 0x1
strh r0, [r4, 0x2]
ldr r2, [sp, 0xC]
subs r2, 0x10
mov r3, r10
cmp r3, 0
beq _080A6C42
mov r0, r10
adds r0, 0x68
strh r2, [r0]
_080A6C42:
ldr r1, _080A6C68
str r2, [sp]
str r5, [sp, 0x4]
str r6, [sp, 0x8]
movs r0, 0
mov r2, r8
ldr r3, [sp, 0xC]
bl Log
mov r0, r9
cmp r0, 0
beq _080A6C78
bl CloseFile
b _080A6C78
.align 2, 0
_080A6C60: .4byte gUnknown_81178F4
_080A6C64: .4byte gOrnamentFileArchive
_080A6C68: .4byte gUnknown_8117894
_080A6C6C:
mov r1, r10
cmp r1, 0
beq _080A6C78
mov r0, r10
adds r0, 0x68
strh r5, [r0]
_080A6C78:
add sp, 0x14
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end GroundSprite_ExtendPaletteAdd
thumb_func_start GroundSprite_ExtendPaletteDelete
GroundSprite_ExtendPaletteDelete:
push {r4-r6,lr}
adds r2, r0, 0
cmp r2, 0
beq _080A6C9E
adds r0, 0x68
ldrh r0, [r0]
adds r5, r0, 0
subs r5, 0xD
cmp r5, 0
blt _080A6CE6
b _080A6CA0
_080A6C9E:
movs r5, 0x1
_080A6CA0:
ldr r0, _080A6CEC
lsls r1, r5, 2
movs r3, 0x84
lsls r3, 1
adds r1, r3
ldr r0, [r0]
adds r4, r0, r1
cmp r2, 0
beq _080A6CBA
adds r1, r2, 0
adds r1, 0x68
movs r0, 0
strh r0, [r1]
_080A6CBA:
ldrh r0, [r4, 0x2]
subs r0, 0x1
movs r6, 0
strh r0, [r4, 0x2]
lsls r0, 16
cmp r0, 0
bgt _080A6CE6
ldr r1, _080A6CF0
ldrh r3, [r4]
movs r0, 0
adds r2, r5, 0
bl Log
strh r6, [r4]
strh r6, [r4, 0x2]
adds r0, r5, 0
adds r0, 0x1D
lsls r0, 16
lsrs r0, 16
movs r1, 0
bl sub_80997F4
_080A6CE6:
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080A6CEC: .4byte gUnknown_3001B7C
_080A6CF0: .4byte gUnknown_81178C0
thumb_func_end GroundSprite_ExtendPaletteDelete
thumb_func_start sub_80A6CF4
sub_80A6CF4:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x68
movs r1, 0
mov r8, r1
movs r1, 0
ldrsh r2, [r0, r1]
mov r9, r2
movs r2, 0
mov r10, r2
movs r0, 0x1
negs r0, r0
str r0, [sp, 0x60]
str r0, [sp, 0x64]
add r4, sp, 0x58
adds r0, r4, 0
bl sub_809D248
movs r7, 0
ldr r0, _080A6D70
ldr r3, [r0]
movs r1, 0x80
lsls r1, 6
mov r12, r1
mov r4, sp
_080A6D2C:
ldr r0, [r3]
cmp r0, 0x1
bne _080A6DB4
ldr r2, [r3, 0x8]
adds r0, r2, 0
adds r0, 0x50
ldrh r1, [r0]
mov r0, r12
ands r0, r1
cmp r0, 0
bne _080A6DB4
ldr r0, [r2, 0x7C]
cmp r0, 0
blt _080A6DB4
ldr r1, [r2, 0x74]
cmp r1, 0
bge _080A6D50
adds r1, 0xFF
_080A6D50:
asrs r1, 8
ldr r0, [sp, 0x58]
subs r5, r1, r0
ldr r1, [r2, 0x78]
cmp r1, 0
bge _080A6D5E
adds r1, 0xFF
_080A6D5E:
asrs r1, 8
ldr r0, [sp, 0x5C]
subs r1, r0
adds r6, r1, 0
cmp r1, 0
ble _080A6D74
adds r0, r6, 0
adds r0, 0x28
b _080A6D78
.align 2, 0
_080A6D70: .4byte gUnknown_3001B7C
_080A6D74:
movs r0, 0x28
subs r0, r6
_080A6D78:
str r0, [r2, 0x7C]
cmp r5, 0
ble _080A6D88
ldr r0, [r2, 0x7C]
cmp r5, r0
ble _080A6D92
str r5, [r2, 0x7C]
b _080A6D92
_080A6D88:
negs r1, r5
ldr r0, [r2, 0x7C]
cmp r1, r0
ble _080A6D92
str r1, [r2, 0x7C]
_080A6D92:
adds r0, r2, 0
adds r0, 0x48
movs r1, 0
ldrsh r0, [r0, r1]
add r10, r0
cmp r0, r9
blt _080A6DAE
ldr r0, [r2, 0x7C]
ldr r1, [sp, 0x64]
cmp r1, r0
bge _080A6DAE
mov r1, r8
str r1, [sp, 0x60]
str r0, [sp, 0x64]
_080A6DAE:
stm r4!, {r2}
movs r2, 0x1
add r8, r2
_080A6DB4:
adds r0, r7, 0x1
lsls r0, 16
asrs r7, r0, 16
adds r3, 0xC
cmp r7, 0x15
ble _080A6D2C
cmp r10, r9
blt _080A6E54
ldr r0, [sp, 0x60]
cmp r0, 0
blt _080A6DD8
lsls r0, 2
add r0, sp
ldr r0, [r0]
bl sub_80A69FC
movs r0, 0x1
b _080A6E56
_080A6DD8:
mov r1, r8
cmp r1, 0
ble _080A6E54
_080A6DDE:
movs r5, 0x1
negs r5, r5
adds r3, r5, 0
movs r6, 0
mov r7, r8
subs r7, 0x1
mov r2, r8
cmp r2, 0
ble _080A6E08
mov r2, sp
mov r1, r8
_080A6DF4:
ldr r0, [r2]
ldr r0, [r0, 0x7C]
cmp r3, r0
bge _080A6E00
mov r5, r8
adds r3, r0, 0
_080A6E00:
adds r2, 0x4
subs r1, 0x1
cmp r1, 0
bne _080A6DF4
_080A6E08:
lsls r0, r5, 2
mov r1, sp
adds r4, r1, r0
ldr r0, [r4]
bl sub_80A69FC
mov r8, r7
adds r1, r5, 0
cmp r1, r8
bge _080A6E28
adds r2, r4, 0
_080A6E1E:
ldr r0, [r2, 0x4]
stm r2!, {r0}
adds r1, 0x1
cmp r1, r8
blt _080A6E1E
_080A6E28:
movs r1, 0
ldr r0, _080A6E40
ldr r3, [r0]
_080A6E2E:
ldr r0, [r3]
cmp r0, 0
bne _080A6E44
adds r6, 0x1
cmp r6, r9
blt _080A6E46
movs r0, 0x1
b _080A6E56
.align 2, 0
_080A6E40: .4byte gUnknown_3001B7C
_080A6E44:
movs r6, 0
_080A6E46:
adds r1, 0x1
adds r3, 0xC
cmp r1, 0x15
ble _080A6E2E
mov r2, r8
cmp r2, 0
bgt _080A6DDE
_080A6E54:
movs r0, 0
_080A6E56:
add sp, 0x68
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_80A6CF4
thumb_func_start sub_80A6E68
sub_80A6E68:
push {lr}
movs r0, 0
bl ResetSprites
movs r0, 0
bl nullsub_10
bl sub_800E970
pop {r0}
bx r0
thumb_func_end sub_80A6E68
thumb_func_start sub_80A6E80
sub_80A6E80:
push {r4,lr}
sub sp, 0x4
ldr r4, _080A6EC4
adds r0, r4, 0
bl sub_809D248
lsls r0, 24
lsrs r0, 24
cmp r0, 0
bne _080A6E98
str r0, [r4]
str r0, [r4, 0x4]
_080A6E98:
bl sub_80ABA7C
bl sub_80ACAD4
bl sub_80AD7AC
ldrh r1, [r4, 0x4]
lsls r1, 16
ldrh r0, [r4]
orrs r0, r1
str r0, [sp]
mov r0, sp
bl sub_800E90C
bl sub_8005180
bl nullsub_12
add sp, 0x4
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080A6EC4: .4byte gUnknown_2039DD8
thumb_func_end sub_80A6E80
thumb_func_start sub_80A6EC8
sub_80A6EC8:
push {lr}
adds r2, r0, 0
adds r0, 0x52
movs r3, 0
ldrsh r0, [r0, r3]
cmp r0, 0
ble _080A6EF6
adds r0, r2, 0
adds r0, 0x48
movs r3, 0
ldrsh r0, [r0, r3]
cmp r1, r0
bgt _080A6EE4
adds r1, r0, 0
_080A6EE4:
adds r0, r2, 0
adds r0, 0x64
movs r3, 0
ldrsh r0, [r0, r3]
cmp r0, r1
beq _080A6EF6
adds r0, r2, 0
adds r0, 0x66
strh r1, [r0]
_080A6EF6:
pop {r0}
bx r0
thumb_func_end sub_80A6EC8
thumb_func_start sub_80A6EFC
sub_80A6EFC:
push {r4-r7,lr}
sub sp, 0xC
adds r4, r0, 0
lsls r1, 16
asrs r7, r1, 16
lsls r2, 24
asrs r6, r2, 24
adds r0, 0x52
movs r1, 0
ldrsh r0, [r0, r1]
cmp r0, 0
bge _080A6F48
adds r5, r4, 0
adds r5, 0x66
movs r2, 0
ldrsh r0, [r5, r2]
cmp r0, 0
blt _080A6F28
adds r1, r4, 0
adds r1, 0x48
adds r2, r0, 0
b _080A6F62
_080A6F28:
adds r1, r4, 0
adds r1, 0x48
movs r2, 0
ldrsh r0, [r1, r2]
cmp r0, 0
bgt _080A6F36
b _080A7038
_080A6F36:
movs r2, 0x1
negs r2, r2
adds r0, r4, 0
bl sub_80A68F8
lsls r0, 24
cmp r0, 0
beq _080A7038
b _080A6F72
_080A6F48:
adds r5, r4, 0
adds r5, 0x66
movs r1, 0
ldrsh r0, [r5, r1]
cmp r0, 0
blt _080A6F72
adds r0, r4, 0
bl sub_80A69FC
adds r1, r4, 0
adds r1, 0x48
movs r0, 0
ldrsh r2, [r5, r0]
_080A6F62:
adds r0, r4, 0
bl sub_80A68F8
lsls r0, 24
cmp r0, 0
beq _080A7038
ldr r0, _080A6F8C
strh r0, [r5]
_080A6F72:
movs r0, 0x80
lsls r0, 3
ands r0, r7
lsls r0, 16
asrs r3, r0, 16
cmp r3, 0
beq _080A6F94
ldrh r1, [r4]
ldr r0, _080A6F90
ands r0, r1
strh r0, [r4]
b _080A7038
.align 2, 0
_080A6F8C: .4byte 0x0000ffff
_080A6F90: .4byte 0x0000efff
_080A6F94:
ldr r2, _080A6FE0
adds r0, r4, 0
adds r0, 0x52
movs r5, 0
ldrsh r1, [r0, r5]
lsls r0, r1, 1
adds r0, r1
lsls r0, 2
ldr r1, [r2]
adds r1, r0
mov r12, r1
adds r1, r4, 0
adds r1, 0x70
movs r0, 0x1
strb r0, [r1]
subs r0, 0x2
str r0, [r4, 0x7C]
movs r1, 0xE0
lsls r1, 3
ands r1, r7
movs r0, 0x80
lsls r0, 1
cmp r1, r0
beq _080A6FE4
cmp r1, r0
ble _080A6FEE
movs r0, 0x80
lsls r0, 2
cmp r1, r0
beq _080A6FFA
movs r0, 0xC0
lsls r0, 2
cmp r1, r0
bne _080A6FEE
adds r0, r4, 0
adds r0, 0x6C
strh r3, [r0]
b _080A7000
.align 2, 0
_080A6FE0: .4byte gUnknown_3001B7C
_080A6FE4:
adds r1, r4, 0
adds r1, 0x6C
movs r0, 0x80
strh r0, [r1]
b _080A7000
_080A6FEE:
adds r1, r4, 0
adds r1, 0x6C
movs r0, 0x80
lsls r0, 1
strh r0, [r1]
b _080A7000
_080A6FFA:
adds r0, r4, 0
adds r0, 0x6C
strh r1, [r0]
_080A7000:
adds r0, r4, 0
adds r0, 0x6E
movs r1, 0
strh r1, [r0]
ldr r5, [r4, 0x4C]
movs r0, 0xFF
ands r0, r7
adds r2, r6, 0
cmp r6, 0
bge _080A7016
adds r2, r6, 0x7
_080A7016:
asrs r2, 3
adds r2, r0, r2
movs r3, 0x7
ands r3, r6
mov r6, r12
ldr r0, [r6, 0x4]
str r0, [sp]
str r1, [sp, 0x4]
lsls r0, r7, 16
lsrs r0, 27
movs r1, 0x1
ands r0, r1
str r0, [sp, 0x8]
adds r0, r4, 0
adds r1, r5, 0
bl AxResInit
_080A7038:
add sp, 0xC
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_80A6EFC
thumb_func_start sub_80A7040
sub_80A7040:

View File

@@ -25,7 +25,7 @@ struct UnkGroundSpriteStruct
u8 unk5A;
s32 unk5C;
s32 unk60;
u16 unk64;
s16 unk64;
s16 unk66;
u16 unk68;
u16 unk6A;

View File

@@ -24,10 +24,16 @@ EWRAM_DATA u32 gUnknown_2039DD4 = {0};
EWRAM_INIT OpenedFile *gUnknown_203B4B4 = {NULL};
// data_8115F5C.s
extern const u8 gUnknown_81177CC[];
extern const u8 gUnknown_81177D8[];
extern const u8 gUnknown_81177EC[];
extern const u8 *gUnknown_81178F4[];
extern const char gUnknown_81177CC[];
extern const char gUnknown_81177D8[];
extern const char gUnknown_81177F4[];
extern const char gUnknown_8117864[];
extern const char gUnknown_81177EC[];
extern const char gUnknown_8117894[];
extern const char gUnknown_81178C0[];
extern const char *gUnknown_81178F4[];
extern const DebugLocation gUnknown_8117858;
extern const DebugLocation gUnknown_8117888;
// code_8098BDC.s
extern void sub_809971C(u16, const u8 *, s16);
@@ -160,7 +166,8 @@ void sub_80A64A4(void)
r2 = file->data + (r5 & 0xFF) * 0x40;
}
else {
file = OpenFileAndGetFileDataPtr((r5 & 0xFF)[gUnknown_81178F4], &gOrnamentFileArchive);
u32 id = r5 & 0xFF;
file = OpenFileAndGetFileDataPtr(id[gUnknown_81178F4], &gOrnamentFileArchive);
r2 = file->data;
}
@@ -452,28 +459,21 @@ void sub_80A69FC(struct UnkGroundSpriteStruct *ptr)
}
}
extern const char gUnknown_81177F4[];
extern const char gUnknown_8117864[];
extern const char gUnknown_81177EC[];
extern const char *gUnknown_81178F4[];
extern const DebugLocation gUnknown_8117858;
extern const DebugLocation gUnknown_8117888;
void GroundSprite_ExtendPaletteAdd(struct UnkGroundSpriteStruct *ptr, u16 a1)
{
OpenedFile *file;
s32 r1, r8;
s32 r8;
unkStruct_3001B7C_sub108 *sub108Ptr;
s32 var_24;
s32 var_28;
s32 r6;
u16 var_28;
u16 var_24;
u16 r6;
const void *r7;
s32 r2;
if (a1 & (0x100 | 0x200)) {
if (a1 & 0x400) {
sub108Ptr = &gUnknown_3001B7C->unk108[0];
if (sub108Ptr->unk0 != a1) {
sub108Ptr = &gUnknown_3001B7C->unk108[1];
if (sub108Ptr->unk0 == a1) {
sub108Ptr->unk2++;
return;
}
@@ -481,14 +481,14 @@ void GroundSprite_ExtendPaletteAdd(struct UnkGroundSpriteStruct *ptr, u16 a1)
else {
r8 = 0;
sub108Ptr = &gUnknown_3001B7C->unk108[0];
r1 = 29;
for (; r8 < UNK_3001B7C_SUB108_COUNT; r1 = (s16)(r1 + 1), r8++, sub108Ptr++) {
for (; r8 < UNK_3001B7C_SUB108_COUNT; r8++, sub108Ptr++) {
if (sub108Ptr->unk0 == a1) {
u16 r1 = r8 + 29;
sub108Ptr->unk2++;
if (ptr != NULL) {
ptr->unk68 = id - 16;
ptr->unk68 = r1 - 16;
}
Log(0, gUnknown_81177F4, r8, r1 - 16, a1);
Log(0, gUnknown_81177F4, r8, r1, r1 - 16, a1);
return;
}
}
@@ -496,8 +496,8 @@ void GroundSprite_ExtendPaletteAdd(struct UnkGroundSpriteStruct *ptr, u16 a1)
if (a1 & 0x400) {
r8 = 1;
sub108Ptr = &gUnknown_3001B7C->unk108[0];
if (sub108Ptr.unk2 < 0) {
sub108Ptr = &gUnknown_3001B7C->unk108[1];
if (sub108Ptr->unk2 > 0) {
FatalError(&gUnknown_8117858, gUnknown_8117864, a1);
}
}
@@ -505,25 +505,26 @@ void GroundSprite_ExtendPaletteAdd(struct UnkGroundSpriteStruct *ptr, u16 a1)
r8 = 0;
sub108Ptr = &gUnknown_3001B7C->unk108[0];
for (; r8 < UNK_3001B7C_SUB108_COUNT; r8++, sub108Ptr++) {
if (sub108Ptr.unk2 < 0) {
if (sub108Ptr->unk2 <= 0) {
break;
}
}
if (r8 >= UNK_3001B7C_SUB0_COUNT) {
if (r8 >= UNK_3001B7C_SUB108_COUNT) {
FatalError(&gUnknown_8117888, gUnknown_8117864, a1);
}
}
var_28 = (u16)(r8 + 29);
var_24 = (u16)((r8 * 16) + 29);
var_28 = r8 + 29;
var_24 = (r8 * 16) + 464;
if (a1 & 0x200) {
file = OpenFileAndGetFileDataPtr(gUnknown_81177EC, &gMonsterFileArchive);
r7 = file->data;
r7 += (a1 & 0xFF) * 32;
r7 += (a1 & 0xFF) * 64;
}
else {
file = OpenFileAndGetFileDataPtr(gUnknown_81178F4[a1 & 0xFF], &gMonsterFileArchive);
u32 id = a1 & 0xff;
file = OpenFileAndGetFileDataPtr(id[gUnknown_81178F4], &gOrnamentFileArchive);
r7 = file->data;
}
@@ -557,3 +558,226 @@ void GroundSprite_ExtendPaletteAdd(struct UnkGroundSpriteStruct *ptr, u16 a1)
}
}
}
void GroundSprite_ExtendPaletteDelete(struct UnkGroundSpriteStruct *ptr)
{
s32 r5;
unkStruct_3001B7C_sub108 *sub108Ptr;
if (ptr != NULL) {
r5 = ptr->unk68 - 13;
if (r5 < 0)
return;
}
else {
r5 = 1;
}
sub108Ptr = &gUnknown_3001B7C->unk108[r5];
if (ptr != NULL) {
ptr->unk68 = 0;
}
if (--sub108Ptr->unk2 <= 0) {
Log(0, gUnknown_81178C0, r5, sub108Ptr->unk0);
sub108Ptr->unk0 = 0;
sub108Ptr->unk2 = 0;
sub_80997F4(r5 + 29, 0);
}
}
bool8 sub_80A6CF4(struct UnkGroundSpriteSubStructx48 *a0)
{
struct UnkGroundSpriteStruct *spArray[UNK_3001B7C_SUB0_COUNT];
s32 i;
unkStruct_3001B7C_sub0 *sub0Ptr;
PixelPos pixelPos;
s32 count = 0;
s32 r9 = a0->unk0;
s32 r10 = 0;
s32 var_28 = -1;
s32 var_24 = -1;
sub_809D248(&pixelPos);
for (i = 0, sub0Ptr = &gUnknown_3001B7C->unk0[0]; i < UNK_3001B7C_SUB0_COUNT; i = (s16)(i+1), sub0Ptr++) {
if (sub0Ptr->unk0 == 1) {
struct UnkGroundSpriteStruct *ptr = sub0Ptr->unk8;
if (!(ptr->unk50 & 0x2000) && ptr->unk7C >= 0) {
PixelPos resultPos;
resultPos.x = (sub0Ptr->unk8->unk74 / 256) - pixelPos.x;
resultPos.y = (sub0Ptr->unk8->unk78 / 256) - pixelPos.y;
if (resultPos.y > 0) {
ptr->unk7C = 0x28 + resultPos.y;
}
else {
ptr->unk7C = 0x28 - resultPos.y;
}
if (resultPos.x > 0) {
if (resultPos.x > ptr->unk7C) {
ptr->unk7C = resultPos.x;
}
}
else {
if (-resultPos.x > ptr->unk7C) {
ptr->unk7C = -resultPos.x;
}
}
r10 += ptr->unk48.unk0;
if (ptr->unk48.unk0 >= r9 && var_24 < ptr->unk7C) {
var_28 = count;
var_24 = ptr->unk7C;
}
spArray[count++] = ptr;
}
}
}
if (r10 < r9)
return FALSE;
if (var_28 >= 0) {
sub_80A69FC(spArray[var_28]);
return TRUE;
}
while (count > 0) {
s32 i;
s32 r5 = -1;
s32 r3 = -1;
s32 r6 = 0;
for (i = 0; i < count; i++) {
if (r3 < spArray[i]->unk7C) {
r5 = count; // This looks like a mistake to me? I believe it should be r5 = i instead, however I cannot verify the behavior in-game as I can't find where, if anywhere, this function runs.
r3 = spArray[i]->unk7C;
}
}
sub_80A69FC(spArray[r5]);
count--;
for (i = r5; i < count; i++) {
spArray[i] = spArray[i + 1];
}
for (i = 0, sub0Ptr = &gUnknown_3001B7C->unk0[0]; i < UNK_3001B7C_SUB0_COUNT; i++, sub0Ptr++) {
if (sub0Ptr->unk0 == 0) {
if (++r6 >= r9) {
return TRUE;
}
}
else {
r6 = 0;
}
}
}
return FALSE;
}
extern void sub_800E970(void);
extern PixelPos gUnknown_2039DD8;
void sub_80A6E68(void)
{
ResetSprites(FALSE);
nullsub_10(FALSE);
sub_800E970();
}
void sub_80ABA7C(void);
void sub_80ACAD4(void);
void sub_80AD7AC(void);
void sub_80A6E80(void)
{
DungeonPos pos;
if (!sub_809D248(&gUnknown_2039DD8)) {
gUnknown_2039DD8.x = 0;
gUnknown_2039DD8.y = 0;
}
sub_80ABA7C();
sub_80ACAD4();
sub_80AD7AC();
pos.x = gUnknown_2039DD8.x;
pos.y = gUnknown_2039DD8.y;
sub_800E90C(&pos);
sub_8005180();
nullsub_12();
}
void sub_80A6EC8(struct UnkGroundSpriteStruct *ptr, s32 a1)
{
if (ptr->unk52 > 0) {
if (a1 <= ptr->unk48.unk0) {
a1 = ptr->unk48.unk0;
}
if (ptr->unk64 != a1) {
ptr->unk66 = a1;
}
}
}
void sub_80A6EFC(struct UnkGroundSpriteStruct *ptr, s32 a1_, s32 a2_)
{
s32 flagResult;
unkStruct_3001B7C_sub0 *sub0Ptr;
s32 a1 = (s16) a1_;
s32 a2 = (s8) a2_;
if (ptr->unk52 < 0) {
if (ptr->unk66 >= 0) {
if (!sub_80A68F8(ptr, &ptr->unk48, ptr->unk66))
return;
ptr->unk66 = -1;
}
else {
if (ptr->unk48.unk0 <= 0)
return;
if (!sub_80A68F8(ptr, &ptr->unk48, -1))
return;
}
}
else {
if (ptr->unk66 >= 0) {
sub_80A69FC(ptr);
if (!sub_80A68F8(ptr, &ptr->unk48, ptr->unk66))
return;
ptr->unk66 = -1;
}
}
// s16 memes...
flagResult = a1 & 0x400;
if ((s16)flagResult) {
ptr->unk0 &= ~(0x1000);
return;
}
sub0Ptr = &gUnknown_3001B7C->unk0[ptr->unk52];
ptr->unk70 = 1;
ptr->unk7C = -1;
switch ((a1 & 0x700)) {
case 0x300:
ptr->unk6C = 0;
break;
case 0x100:
ptr->unk6C = 0x80;
break;
case 0:
default:
ptr->unk6C = 0x100;
break;
case 0x200:
ptr->unk6C = 0x200;
break;
}
ptr->unk6E = 0;
AxResInit((void *)ptr, (void *) ptr->unk48.unk4, (a1 & 0xFF) + a2 / 8, a2 & 7, sub0Ptr->unk4, 0, ((u16)a1 & 0x800) != 0); // TODO: fix...
}