start code 80A26CC

This commit is contained in:
DizzyEggg
2025-06-03 15:52:41 +02:00
parent 2510c60107
commit e859c2a065
5 changed files with 216 additions and 409 deletions

View File

@@ -5,415 +5,8 @@
.text
thumb_func_start sub_80A2B40
sub_80A2B40:
push {r4-r6,lr}
adds r5, r0, 0
ldr r2, _080A2BFC
adds r0, r5, r2
ldm r1!, {r2-r4}
stm r0!, {r2-r4}
ldm r1!, {r2-r4}
stm r0!, {r2-r4}
ldr r3, _080A2C00
adds r0, r5, r3
movs r4, 0
ldrsh r1, [r0, r4]
lsls r0, r1, 3
adds r0, r1
lsls r0, 1
movs r1, 0x6
bl MemoryAlloc
movs r2, 0xA9
lsls r2, 3
adds r1, r5, r2
str r0, [r1]
movs r6, 0
movs r3, 0xA7
lsls r3, 3
adds r0, r5, r3
movs r4, 0
ldrsh r0, [r0, r4]
cmp r6, r0
bge _080A2BC0
_080A2B7C:
lsls r4, r6, 2
ldr r0, _080A2C04
adds r2, r5, r0
adds r2, r4
ldr r1, _080A2C08
adds r0, r5, r1
movs r3, 0
ldrsh r0, [r0, r3]
adds r1, r6, 0x2
adds r0, r1
lsls r0, 11
ldr r1, _080A2C0C
adds r0, r1
str r0, [r2]
ldr r1, _080A2C10
adds r0, r5, r1
movs r2, 0
ldrsh r0, [r0, r2]
lsls r0, 7
movs r1, 0x6
bl MemoryAlloc
ldr r3, _080A2C14
adds r1, r5, r3
adds r1, r4
str r0, [r1]
adds r6, 0x1
movs r4, 0xA7
lsls r4, 3
adds r0, r5, r4
movs r1, 0
ldrsh r0, [r0, r1]
cmp r6, r0
blt _080A2B7C
_080A2BC0:
cmp r6, 0x1
bgt _080A2BD8
movs r1, 0
lsls r0, r6, 2
ldr r2, _080A2C14
adds r0, r2
adds r0, r5
_080A2BCE:
str r1, [r0, 0x8]
stm r0!, {r1}
adds r6, 0x1
cmp r6, 0x1
ble _080A2BCE
_080A2BD8:
movs r3, 0xA8
lsls r3, 3
adds r0, r5, r3
ldr r1, [r0]
cmp r1, 0
beq _080A2C20
ldr r4, _080A2C18
adds r0, r5, r4
movs r1, 0
ldrsh r0, [r0, r1]
lsls r0, 8
movs r1, 0x6
bl MemoryAlloc
ldr r2, _080A2C1C
adds r1, r5, r2
str r0, [r1]
b _080A2C26
.align 2, 0
_080A2BFC: .4byte 0x0000052c
_080A2C00: .4byte 0x00000534
_080A2C04: .4byte 0x00000554
_080A2C08: .4byte 0x00000536
_080A2C0C: .4byte gBgTilemaps
_080A2C10: .4byte 0x0000053c
_080A2C14: .4byte 0x0000054c
_080A2C18: .4byte 0x0000053a
_080A2C1C: .4byte 0x00000544
_080A2C20:
ldr r3, _080A2CF0
adds r0, r5, r3
str r1, [r0]
_080A2C26:
movs r4, 0x86
lsls r4, 3
adds r0, r5, r4
movs r1, 0
str r1, [r0]
ldr r2, _080A2CF4
adds r0, r5, r2
str r1, [r0]
movs r3, 0x87
lsls r3, 3
adds r0, r5, r3
str r1, [r0]
adds r4, 0xC
adds r0, r5, r4
str r1, [r0]
adds r2, 0xC
adds r0, r5, r2
str r1, [r0]
adds r3, 0xF2
adds r0, r5, r3
strb r1, [r0]
adds r4, 0x8
adds r2, r5, r4
ldr r0, _080A2CF8
strh r0, [r2]
movs r2, 0x8D
lsls r2, 3
adds r0, r5, r2
str r1, [r0]
subs r3, 0xE2
adds r0, r5, r3
strb r1, [r0]
adds r4, 0x5
adds r0, r5, r4
strb r1, [r0]
subs r2, 0x1E
adds r0, r5, r2
strb r1, [r0]
adds r3, 0x3
adds r0, r5, r3
strb r1, [r0]
adds r4, 0x3
adds r0, r5, r4
strb r1, [r0]
adds r2, 0x3
adds r0, r5, r2
strb r1, [r0]
adds r2, r5, 0
adds r3, 0x21
adds r0, r5, r3
str r1, [r0]
adds r4, 0x24
adds r0, r5, r4
strb r1, [r0]
adds r3, 0x5
adds r0, r5, r3
strb r1, [r0]
movs r0, 0
movs r1, 0xD
_080A2C9C:
strh r0, [r2]
strh r0, [r2, 0x2]
str r0, [r2, 0x8]
str r0, [r2, 0x4]
subs r1, 0x1
adds r2, 0x10
cmp r1, 0
bge _080A2C9C
movs r1, 0
movs r4, 0xF8
lsls r4, 2
adds r0, r5, r4
movs r2, 0x1
_080A2CB6:
strb r1, [r0]
strb r1, [r0, 0x1]
strh r1, [r0, 0x2]
strh r1, [r0, 0x4]
str r1, [r0, 0x8]
str r1, [r0, 0xC]
str r1, [r0, 0x14]
str r1, [r0, 0x10]
str r1, [r0, 0x1C]
str r1, [r0, 0x18]
str r1, [r0, 0x20]
str r1, [r0, 0x24]
adds r0, 0x28
subs r2, 0x1
cmp r2, 0
bge _080A2CB6
movs r4, 0
_080A2CD8:
adds r0, r5, 0
adds r1, r4, 0
ldr r2, _080A2CFC
bl sub_80A456C
adds r4, 0x1
cmp r4, 0x1
ble _080A2CD8
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080A2CF0: .4byte 0x00000544
_080A2CF4: .4byte 0x00000434
_080A2CF8: .4byte 0x0000ffff
_080A2CFC: .4byte gUnknown_81172B8
thumb_func_end sub_80A2B40
thumb_func_start sub_80A2D00
sub_80A2D00:
push {r4-r7,lr}
adds r6, r0, 0
bl sub_80A2DD4
ldr r0, _080A2D5C
adds r4, r6, r0
ldr r0, [r4]
cmp r0, 0
beq _080A2D1A
bl MemoryFree
movs r0, 0
str r0, [r4]
_080A2D1A:
movs r1, 0xA9
lsls r1, 3
adds r4, r6, r1
ldr r0, [r4]
bl MemoryFree
movs r0, 0
str r0, [r4]
movs r5, 0
movs r7, 0
_080A2D2E:
lsls r2, r5, 2
ldr r1, _080A2D60
adds r0, r6, r1
adds r1, r0, r2
ldr r0, [r1]
cmp r0, 0
beq _080A2D3E
str r7, [r1]
_080A2D3E:
ldr r1, _080A2D64
adds r0, r6, r1
adds r4, r0, r2
ldr r0, [r4]
cmp r0, 0
beq _080A2D50
bl MemoryFree
str r7, [r4]
_080A2D50:
adds r5, 0x1
cmp r5, 0x1
ble _080A2D2E
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080A2D5C: .4byte 0x00000544
_080A2D60: .4byte 0x00000554
_080A2D64: .4byte 0x0000054c
thumb_func_end sub_80A2D00
thumb_func_start sub_80A2D68
sub_80A2D68:
push {r4,lr}
ldr r1, _080A2D84
adds r4, r0, r1
ldr r0, [r4]
cmp r0, 0
beq _080A2D7C
bl MemoryFree
movs r0, 0
str r0, [r4]
_080A2D7C:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080A2D84: .4byte 0x00000544
thumb_func_end sub_80A2D68
thumb_func_start sub_80A2D88
sub_80A2D88:
push {r4-r7,lr}
adds r6, r0, 0
movs r0, 0xA8
lsls r0, 3
adds r7, r6, r0
ldr r0, [r7]
cmp r0, 0
beq _080A2DC6
movs r1, 0x89
lsls r1, 3
adds r5, r6, r1
ldr r2, _080A2DCC
adds r4, r6, r2
movs r1, 0
ldrsh r0, [r4, r1]
lsls r0, 8
movs r1, 0x6
bl MemoryAlloc
ldr r2, _080A2DD0
adds r1, r6, r2
str r0, [r1]
subs r2, 0xDC
adds r1, r6, r2
ldr r1, [r1]
movs r2, 0
ldrsh r3, [r4, r2]
ldr r4, [r7]
adds r2, r5, 0
bl _call_via_r4
_080A2DC6:
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080A2DCC: .4byte 0x0000053a
_080A2DD0: .4byte 0x00000544
thumb_func_end sub_80A2D88
thumb_func_start sub_80A2DD4
sub_80A2DD4:
push {r4-r6,lr}
adds r6, r0, 0
movs r0, 0xFA
lsls r0, 2
adds r4, r6, r0
movs r5, 0x1
_080A2DE0:
ldr r0, [r4]
cmp r0, 0
beq _080A2DEE
bl CloseFile
movs r0, 0
str r0, [r4]
_080A2DEE:
adds r4, 0x28
subs r5, 0x1
cmp r5, 0
bge _080A2DE0
ldr r0, _080A2E5C
adds r4, r6, r0
ldr r0, [r4]
cmp r0, 0
beq _080A2E08
bl CloseFile
movs r0, 0
str r0, [r4]
_080A2E08:
movs r0, 0x88
lsls r0, 3
adds r4, r6, r0
ldr r0, [r4]
cmp r0, 0
beq _080A2E1C
bl CloseFile
movs r0, 0
str r0, [r4]
_080A2E1C:
movs r0, 0x86
lsls r0, 3
adds r4, r6, r0
ldr r0, [r4]
cmp r0, 0
beq _080A2E30
bl CloseFile
movs r0, 0
str r0, [r4]
_080A2E30:
ldr r0, _080A2E60
adds r4, r6, r0
ldr r0, [r4]
cmp r0, 0
beq _080A2E42
bl CloseFile
movs r0, 0
str r0, [r4]
_080A2E42:
movs r0, 0x87
lsls r0, 3
adds r4, r6, r0
ldr r0, [r4]
cmp r0, 0
beq _080A2E56
bl CloseFile
movs r0, 0
str r0, [r4]
_080A2E56:
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080A2E5C: .4byte 0x0000043c
_080A2E60: .4byte 0x00000434
thumb_func_end sub_80A2DD4
thumb_func_start sub_80A2E64
sub_80A2E64:

View File

@@ -12,4 +12,12 @@ OpenedFile *OpenFileAndGetFileDataPtr(const u8 *filename, const FileArchive *arc
u32 sub_800A8F8(u32 value);
#define CLOSE_FILE_AND_SET_NULL(filePtr) \
{ \
CloseFile(filePtr); \
filePtr = NULL; \
}
#define TRY_CLOSE_FILE_AND_SET_NULL(filePtr) if (filePtr != NULL) CLOSE_FILE_AND_SET_NULL(filePtr)
#endif //GUARD_FILE_SYSTEM_H

View File

@@ -1,10 +1,82 @@
#ifndef GUARD_GROUND_MAP_H
#define GUARD_GROUND_MAP_H
#include "structs/str_file_system.h"
typedef struct SubStruct_0
{
u16 unk0;
u16 unk2;
s32 unk4;
s32 unk8;
u8 fillC;
} SubStruct_0;
typedef struct SubStruct_3E0
{
u8 unk0;
u8 unk1;
u16 unk2;
u16 unk4;
OpenedFile *unk8;
s32 unkC;
s32 unk10;
s32 unk12;
s32 unk14;
s32 unk1C;
s32 unk20;
s32 unk24;
} SubStruct_3E0;
// size: 0x18?
typedef struct SubStruct_52C
{
u8 fill0[8]; // 0x52C
s16 unk8; // 0x534
s16 unkA; // 0x536
s16 unkC; // 0x538
s16 unkE; // 0x53A
s16 unk10; // 0x53C
s16 unk12; // 0x53E
void (*unk14)(void *, s32, void *, s32); // TODO: fix void * to proper ptr types 0x540
} SubStruct_52C;
#define UNK_0_ARR_COUNT 14
#define UNK_3E0_ARR_COUNT 2
#define UNK_54C_ARR_COUNT 2
// size: 0x55C
typedef struct unkStruct_3001B70
{
u8 fill0[0x55C - 0x0];
SubStruct_0 unk0[UNK_0_ARR_COUNT];
u8 fillUnk[0x300];
SubStruct_3E0 unk3E0[UNK_3E0_ARR_COUNT];
OpenedFile *unk430;
OpenedFile *unk434;
OpenedFile *unk438;
OpenedFile *unk43C;
OpenedFile *unk440;
s16 unk444;
u8 fill446[2];
u8 unk448;
u8 unk449;
u8 unk44A;
u8 unk44B;
u8 unk44C;
u8 unk44D;
u8 fill44E[0x468-0x44E];
s32 unk468;
s32 unk46C;
u8 unk470;
u8 unk471;
u8 fill472[0x52A-0x472];
u8 unk52A;
SubStruct_52C unk52C;
void *unk544;
void *unk548;
void *unk54C[UNK_54C_ARR_COUNT];
u16 *unk554[UNK_54C_ARR_COUNT];
} unkStruct_3001B70;
extern unkStruct_3001B70 *gGroundMapDungeon_3001B70;
@@ -16,4 +88,4 @@ void FreeGroundMapAction(void);
void sub_80A4B38(void);
void sub_80A4B54(void);
#endif // GUARD_GROUND_MAP_H
#endif // GUARD_GROUND_MAP_H

View File

@@ -13,4 +13,12 @@ void MemoryCopy32(u32 *dest, u32 *src, s32 size);
void *MemoryAlloc(s32 size, s32 group);
void MemoryFree(void *a);
#define FREE_AND_SET_NULL(ptr) \
{ \
MemoryFree(ptr); \
ptr = NULL; \
}
#define TRY_FREE_AND_SET_NULL(ptr) if (ptr != NULL) FREE_AND_SET_NULL(ptr)
#endif // GUARD_MEMORY_H

View File

@@ -462,3 +462,129 @@ UNUSED static const u8 *sub_80A2B28(u16 r0)
{
return sub_80A2B18(GetScriptVarValue(NULL, GROUND_PLACE));
}
#include "ground_map.h"
#include "text_1.h"
#include "memory.h"
#include "file_system.h"
extern void sub_80A456C(unkStruct_3001B70 *, u32, const PixelPos *);
extern const PixelPos gUnknown_81172B8;
void sub_80A2B40(unkStruct_3001B70 *mapPtr, const SubStruct_52C *a1)
{
SubStruct_0 *unk0Ptr;
s32 id, unk0Id, unk3E0Id;
s32 i;
mapPtr->unk52C = *a1;
mapPtr->unk548 = MemoryAlloc(mapPtr->unk52C.unk8 * 18, 6);
for (id = 0; id < mapPtr->unk52C.unkC; id++) {
mapPtr->unk554[id] = &gBgTilemaps[2 + mapPtr->unk52C.unkA + id][0][0];
mapPtr->unk54C[id] = MemoryAlloc(mapPtr->unk52C.unk10 * 128, 6);
}
for (; id < UNK_54C_ARR_COUNT; id++) {
mapPtr->unk554[id] = NULL;
mapPtr->unk54C[id] = NULL;
}
if (mapPtr->unk52C.unk14 != NULL) {
mapPtr->unk544 = MemoryAlloc(mapPtr->unk52C.unkE * 256, 6);
}
else {
mapPtr->unk544 = NULL;
}
mapPtr->unk430 = NULL;
mapPtr->unk434 = NULL;
mapPtr->unk438 = NULL;
mapPtr->unk43C = NULL;
mapPtr->unk440 = NULL;
mapPtr->unk52A = 0;
mapPtr->unk444 = -1;
mapPtr->unk468 = 0;
mapPtr->unk448 = 0;
mapPtr->unk449 = 0;
mapPtr->unk44A = 0;
mapPtr->unk44B = 0;
mapPtr->unk44C = 0;
mapPtr->unk44D = 0;
unk0Ptr = &mapPtr->unk0[0];
mapPtr->unk46C = 0;
mapPtr->unk470 = 0;
mapPtr->unk471 = 0;
for (unk0Id = 0; unk0Id < UNK_0_ARR_COUNT; unk0Id++, unk0Ptr++) {
unk0Ptr->unk0 = 0;
unk0Ptr->unk2 = 0;
unk0Ptr->unk8 = 0;
unk0Ptr->unk4 = 0;
}
for (unk3E0Id = 0; unk3E0Id < UNK_3E0_ARR_COUNT; unk3E0Id++) {
SubStruct_3E0 *unkPtr = &mapPtr->unk3E0[unk3E0Id];
unkPtr->unk0 = 0;
unkPtr->unk1 = 0;
unkPtr->unk2 = 0;
unkPtr->unk4 = 0;
unkPtr->unk8 = NULL;
unkPtr->unkC = 0;
unkPtr->unk12 = 0;
unkPtr->unk10 = 0;
unkPtr->unk1C = 0;
unkPtr->unk14 = 0;
unkPtr->unk20 = 0;
unkPtr->unk24 = 0;
}
for (i = 0; i < 2; i++) {
sub_80A456C(mapPtr, i, &gUnknown_81172B8);
}
}
void sub_80A2DD4(unkStruct_3001B70 *mapPtr);
void sub_80A2D00(unkStruct_3001B70 *mapPtr)
{
s32 i;
sub_80A2DD4(mapPtr);
TRY_FREE_AND_SET_NULL(mapPtr->unk544);
FREE_AND_SET_NULL(mapPtr->unk548);
for (i = 0; i < UNK_54C_ARR_COUNT; i++) {
if (mapPtr->unk554[i] != NULL) {
mapPtr->unk554[i] = NULL;
}
TRY_FREE_AND_SET_NULL(mapPtr->unk54C[i]);
}
}
void sub_80A2D68(unkStruct_3001B70 *mapPtr)
{
TRY_FREE_AND_SET_NULL(mapPtr->unk544);
}
void sub_80A2D88(unkStruct_3001B70 *mapPtr)
{
if (mapPtr->unk52C.unk14 != NULL) {
void *unk448 = &mapPtr->unk448;
mapPtr->unk544 = MemoryAlloc(mapPtr->unk52C.unkE * 256, 6);
mapPtr->unk52C.unk14(mapPtr->unk544, mapPtr->unk468, unk448, mapPtr->unk52C.unkE);
}
}
void sub_80A2DD4(unkStruct_3001B70 *mapPtr)
{
s32 i;
for (i = 0; i < UNK_3E0_ARR_COUNT; i++) {
SubStruct_3E0 *unkPtr = &mapPtr->unk3E0[i];
TRY_CLOSE_FILE_AND_SET_NULL(unkPtr->unk8);
}
TRY_CLOSE_FILE_AND_SET_NULL(mapPtr->unk43C);
TRY_CLOSE_FILE_AND_SET_NULL(mapPtr->unk440);
TRY_CLOSE_FILE_AND_SET_NULL(mapPtr->unk430);
TRY_CLOSE_FILE_AND_SET_NULL(mapPtr->unk434);
TRY_CLOSE_FILE_AND_SET_NULL(mapPtr->unk438);
}