sub_80A3BB0

This commit is contained in:
DizzyEggg
2025-06-05 18:49:56 +02:00
parent 3c29ff0535
commit f0e6dc79cb
3 changed files with 104 additions and 247 deletions

View File

@@ -6,245 +6,6 @@
.text
thumb_func_start sub_80A3B80
sub_80A3B80:
push {r4,lr}
adds r3, r0, 0
lsls r1, 24
lsrs r1, 24
lsls r2, 24
lsrs r2, 24
ldr r4, _080A3BA8
adds r0, r3, r4
ldr r0, [r0]
cmp r0, 0
beq _080A3BA2
adds r4, 0x4
adds r0, r3, r4
strb r1, [r0]
ldr r1, _080A3BAC
adds r0, r3, r1
strb r2, [r0]
_080A3BA2:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080A3BA8: .4byte 0x0000046c
_080A3BAC: .4byte 0x00000471
thumb_func_end sub_80A3B80
thumb_func_start sub_80A3BB0
sub_80A3BB0:
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x4
adds r5, r0, 0
lsls r1, 16
asrs r1, 16
adds r6, r1, 0
movs r0, 0x91
lsls r0, 3
adds r0, r5
mov r8, r0
cmp r1, 0
blt _080A3BD4
cmp r1, 0x1
ble _080A3BD4
cmp r1, 0x4
ble _080A3C00
_080A3BD4:
ldr r1, _080A3BFC
adds r0, r5, r1
movs r1, 0x1
str r1, [r0]
movs r2, 0xA7
lsls r2, 3
adds r0, r5, r2
movs r1, 0
ldrsh r3, [r0, r1]
movs r0, 0
cmp r6, 0x1
bne _080A3BEE
movs r0, 0x1
_080A3BEE:
str r0, [sp]
mov r0, r8
adds r1, r5, 0
movs r2, 0
bl sub_80A3D40
b _080A3C48
.align 2, 0
_080A3BFC: .4byte 0x00000474
_080A3C00:
ldr r2, _080A3C88
adds r0, r5, r2
movs r7, 0x2
str r7, [r0]
movs r0, 0xA7
lsls r0, 3
adds r4, r5, r0
movs r2, 0
ldrsh r0, [r4, r2]
subs r3, r0, 0x1
movs r0, 0
cmp r1, 0x4
bne _080A3C1C
movs r0, 0x1
_080A3C1C:
str r0, [sp]
mov r0, r8
adds r1, r5, 0
movs r2, 0
bl sub_80A3D40
movs r1, 0x9B
lsls r1, 3
adds r0, r5, r1
movs r1, 0
ldrsh r2, [r4, r1]
subs r2, 0x1
adds r3, r7, 0
eors r3, r6
negs r1, r3
orrs r1, r3
lsrs r1, 31
str r1, [sp]
adds r1, r5, 0
movs r3, 0x1
bl sub_80A3D40
_080A3C48:
movs r6, 0
ldr r2, _080A3C88
adds r0, r5, r2
ldr r0, [r0]
cmp r6, r0
bge _080A3CF0
movs r0, 0x8F
lsls r0, 3
adds r7, r5, r0
mov r4, r8
_080A3C5C:
adds r0, r5, 0
adds r1, r6, 0
ldr r2, _080A3C8C
bl sub_80A456C
movs r1, 0x4
ldrsh r0, [r4, r1]
cmp r0, 0x1
beq _080A3C72
cmp r0, 0x2
beq _080A3CB4
_080A3C72:
movs r2, 0
ldrsh r0, [r4, r2]
cmp r0, 0x1
beq _080A3C94
cmp r0, 0x1
ble _080A3C82
cmp r0, 0x2
beq _080A3C9C
_080A3C82:
ldr r0, _080A3C90
b _080A3CD6
.align 2, 0
_080A3C88: .4byte 0x00000474
_080A3C8C: .4byte gUnknown_8117314
_080A3C90: .4byte sub_80A3EBC
_080A3C94:
ldr r0, _080A3C98
b _080A3CD6
.align 2, 0
_080A3C98: .4byte sub_80A3EF4
_080A3C9C:
ldrb r0, [r4, 0x6]
ldr r1, _080A3CAC
cmp r0, 0
beq _080A3CA6
ldr r1, _080A3CB0
_080A3CA6:
str r1, [r4, 0x18]
b _080A3CD8
.align 2, 0
_080A3CAC: .4byte sub_80A4088
_080A3CB0: .4byte sub_80A41C4
_080A3CB4:
movs r1, 0
ldrsh r0, [r4, r1]
cmp r0, 0x1
beq _080A3CCC
cmp r0, 0x1
ble _080A3CC4
cmp r0, 0x2
beq _080A3CD4
_080A3CC4:
ldr r0, _080A3CC8
b _080A3CD6
.align 2, 0
_080A3CC8: .4byte sub_80A3ED4
_080A3CCC:
ldr r0, _080A3CD0
b _080A3CD6
.align 2, 0
_080A3CD0: .4byte sub_80A3F94
_080A3CD4:
ldr r0, _080A3D34
_080A3CD6:
str r0, [r4, 0x18]
_080A3CD8:
adds r0, r4, 0
adds r1, r7, 0
bl sub_80A3E14
adds r7, 0x8
adds r4, 0x50
adds r6, 0x1
ldr r2, _080A3D38
adds r0, r5, r2
ldr r0, [r0]
cmp r6, r0
blt _080A3C5C
_080A3CF0:
ldr r1, _080A3D38
adds r0, r5, r1
ldr r6, [r0]
cmp r6, 0x1
bgt _080A3D26
lsls r0, r6, 2
adds r0, r6
lsls r0, 4
mov r2, r8
adds r4, r0, r2
_080A3D04:
adds r0, r5, 0
adds r1, r6, 0
ldr r2, _080A3D3C
bl sub_80A456C
movs r0, 0
str r0, [sp]
adds r0, r4, 0
adds r1, r5, 0
movs r2, 0
movs r3, 0
bl sub_80A3D40
adds r4, 0x50
adds r6, 0x1
cmp r6, 0x1
ble _080A3D04
_080A3D26:
add sp, 0x4
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080A3D34: .4byte sub_80A4358
_080A3D38: .4byte 0x00000474
_080A3D3C: .4byte gUnknown_8117314
thumb_func_end sub_80A3BB0
thumb_func_start sub_80A3D40
sub_80A3D40:
push {r4-r7,lr}

View File

@@ -3,6 +3,7 @@
#include "structs/str_file_system.h"
#include "structs/str_202EE8C.h"
#include "structs/str_position.h"
typedef struct SubStruct_0
{
@@ -31,9 +32,17 @@ typedef struct SubStruct_3E0
typedef struct SubStruct_488
{
u8 fill0[0x18];
s16 unk0;
u16 unk2;
s16 unk4;
u8 unk6;
s32 unk8;
s32 unkC;
s32 unk10;
s32 unk14;
void (*unk18)(struct SubStruct_488 *);
u8 fill1C[0x84];
s32 unk1C;
u8 fill1C[0x30];
} SubStruct_488;
// size: 0x18?
@@ -68,6 +77,7 @@ typedef struct SubStruct_448
#define UNK_0_ARR_COUNT 14
#define UNK_E0_ARR_COUNT 32
#define UNK_3E0_ARR_COUNT 2
#define UNK_488_ARR_COUNT 2
#define UNK_54C_ARR_COUNT 2
#define UNK_545_UNK6_ARR_COUNT 4
@@ -99,8 +109,9 @@ typedef struct unkStruct_3001B70
const void *unk46C;
u8 unk470;
u8 unk471;
u8 fill472[0x488-0x472];
struct SubStruct_488 unk488;
s32 unk474;
PixelPos unk478[UNK_488_ARR_COUNT];
struct SubStruct_488 unk488[UNK_488_ARR_COUNT];
u16 unk528;
u8 unk52A;
SubStruct_52C unk52C;

View File

@@ -463,7 +463,7 @@ UNUSED static const u8 *sub_80A2B28(u16 r0)
return sub_80A2B18(GetScriptVarValue(NULL, GROUND_PLACE));
}
// TODO: Figure out if a new file starts here
// TODO: Figure out if a new file starts here. Edit: new file indeed starts here
#include "ground_map.h"
#include "text_1.h"
@@ -657,7 +657,7 @@ void sub_80A2E64(unkStruct_3001B70 *mapPtr)
}
sub_80A3BB0(mapPtr, 0);
sub_80A3EB0(&mapPtr->unk488);
sub_80A3EB0(mapPtr->unk488);
mapPtr->unk52A = 1;
}
@@ -859,7 +859,7 @@ void sub_80A2FBC(unkStruct_3001B70 *mapPtr, s32 a1_)
}
sub_80A3BB0(mapPtr, 0);
sub_80A3EB0(&mapPtr->unk488);
sub_80A3EB0(mapPtr->unk488);
mapPtr->unk52A = 1;
}
@@ -996,7 +996,7 @@ void sub_80A3440(unkStruct_3001B70 *mapPtr, s32 a1_, DungeonLocation *dungLoc, s
sub3E0->unk24 = 0;
}
sub_80A3BB0(mapPtr, 0);
sub_80A3EB0(&mapPtr->unk488);
sub_80A3EB0(mapPtr->unk488);
mapPtr->unk52A = 1;
// bad sp alloc for compiler generated variables...
ASM_MATCH_TRICK(mapPtr_454->unk6[0]);
@@ -1149,4 +1149,89 @@ const u8 *sub_80A3908(u16 **dstArray, const void *src_, SubStruct_52C *a2, SubSt
return src;
}
void sub_80A3B80(unkStruct_3001B70 *mapPtr, u8 a1, u8 a2)
{
if (mapPtr->unk46C != NULL) {
mapPtr->unk470 = a1;
mapPtr->unk471 = a2;
}
}
extern const PixelPos gUnknown_8117314;
void sub_80A3D40(SubStruct_488 *a0, unkStruct_3001B70 *mapPtr, s32 a2, s32 a3, bool8 a4);
void sub_80A3E14(SubStruct_488 *a0, PixelPos *a1);
void sub_80A3EBC(SubStruct_488 *a0);
void sub_80A3EF4(SubStruct_488 *a0);
void sub_80A4088(SubStruct_488 *a0);
void sub_80A41C4(SubStruct_488 *a0);
void sub_80A3ED4(SubStruct_488 *a0);
void sub_80A3F94(SubStruct_488 *a0);
void sub_80A4358(SubStruct_488 *a0);
void sub_80A3BB0(unkStruct_3001B70 *mapPtr, s32 a0_)
{
s32 i;
// s16 memes strike yet again
s32 a0Match = (s16) a0_;
s32 a0 = a0Match;
SubStruct_488 *map488 = mapPtr->unk488;
switch (a0) {
default:
case 0:
case 1:
mapPtr->unk474 = 1;
sub_80A3D40(&map488[0], mapPtr, 0, mapPtr->unk52C.unkC, (a0 == 1));
break;
case 2:
case 3:
case 4:
mapPtr->unk474 = 2;
sub_80A3D40(&map488[0], mapPtr, 0, mapPtr->unk52C.unkC - 1, (a0 == 4));
sub_80A3D40(&map488[1], mapPtr, mapPtr->unk52C.unkC - 1, 1, (a0 != 2));
break;
}
for (i = 0; i < mapPtr->unk474; i++) {
sub_80A456C(mapPtr, i, &gUnknown_8117314);
switch (map488[i].unk4) {
default:
case 1:
switch (map488[i].unk0) {
default:
case 0:
map488[i].unk18 = sub_80A3EBC;
break;
case 1:
map488[i].unk18 = sub_80A3EF4;
break;
case 2:
map488[i].unk18 = (map488[i].unk6 != 0) ? sub_80A41C4 : sub_80A4088;
break;
}
break;
case 2:
switch (map488[i].unk0) {
default:
case 0:
map488[i].unk18 = sub_80A3ED4;
break;
case 1:
map488[i].unk18 = sub_80A3F94;
break;
case 2:
map488[i].unk18 = sub_80A4358;
break;
}
break;
}
sub_80A3E14(&map488[i], &mapPtr->unk478[i]);
}
for (i = mapPtr->unk474; i < UNK_488_ARR_COUNT; i++) {
sub_80A456C(mapPtr, i, &gUnknown_8117314);
sub_80A3D40(&map488[i], mapPtr, 0, 0, FALSE);
}
}
//