Initial commit

This commit is contained in:
Pixelstyx
2026-07-22 00:12:36 -04:00
parent f02bd74646
commit 8e0fa062e2
9 changed files with 141 additions and 299 deletions

View File

@@ -55,3 +55,5 @@
.public ov01_0220476C
.public ov01_022047DC
.public ov01_02204834
.public ov01_022040C0
.public ov01_022040E4

View File

@@ -14,283 +14,6 @@
.text
thumb_func_start ov01_02204004
ov01_02204004: ; 0x02204004
push {r3, r4, r5, r6, r7, lr}
add r6, r1, #0
mov r1, #0x1c
add r7, r0, #0
add r5, r2, #0
str r3, [sp]
bl Heap_Alloc
add r4, r0, #0
mov r0, #0
str r0, [r4, #0x10]
str r6, [r4, #0x14]
ldr r0, [sp]
str r5, [r4, #0x18]
str r0, [r4, #4]
add r0, r7, #0
add r1, r6, #0
bl Heap_Alloc
mov r2, #0
str r0, [r4]
cmp r6, #0
ble _0220403E
mov r1, #0xff
_02204034:
ldr r0, [r4]
strb r1, [r0, r2]
add r2, r2, #1
cmp r2, r6
blt _02204034
_0220403E:
mov r0, #0x5c
add r6, r5, #0
mul r6, r0
add r0, r7, #0
add r1, r6, #0
bl Heap_Alloc
str r0, [r4, #8]
ldr r1, [r4, #8]
mov r0, #0
add r2, r6, #0
bl MIi_CpuClearFast
add r0, r7, #0
lsl r1, r5, #2
bl Heap_Alloc
mov r6, #0
str r0, [r4, #0xc]
cmp r5, #0
ble _0220407E
add r2, r6, #0
add r3, r6, #0
_0220406C:
ldr r0, [r4, #8]
add r6, r6, #1
add r1, r0, r2
ldr r0, [r4, #0xc]
add r2, #0x5c
str r1, [r0, r3]
add r3, r3, #4
cmp r6, r5
blt _0220406C
_0220407E:
add r0, r4, #0
pop {r3, r4, r5, r6, r7, pc}
.balign 4, 0
thumb_func_end ov01_02204004
thumb_func_start ov01_02204084
ov01_02204084: ; 0x02204084
push {r4, lr}
add r4, r0, #0
ldr r0, [r4]
bl Heap_Free
ldr r0, [r4, #8]
bl Heap_Free
ldr r0, [r4, #0xc]
bl Heap_Free
add r0, r4, #0
bl Heap_Free
pop {r4, pc}
.balign 4, 0
thumb_func_end ov01_02204084
thumb_func_start ov01_022040A4
ov01_022040A4: ; 0x022040A4
push {r3, lr}
add r2, r1, #0
ldr r3, [r0, #0x10]
ldr r1, [r0]
strb r3, [r1, r2]
ldr r3, [r0, #4]
lsl r1, r2, #2
ldr r1, [r3, r1]
str r1, [sp]
add r1, sp, #0
bl ov01_02204168
pop {r3, pc}
.balign 4, 0
thumb_func_end ov01_022040A4
thumb_func_start ov01_022040C0
ov01_022040C0: ; 0x022040C0
ldr r2, [r0, #0x10]
sub r3, r2, #1
str r3, [r0, #0x10]
ldr r2, [r0, #0xc]
lsl r0, r3, #2
str r1, [r2, r0]
bx lr
.balign 4, 0
thumb_func_end ov01_022040C0
thumb_func_start Field3dObjectList_GetRenderObjectByID
Field3dObjectList_GetRenderObjectByID: ; 0x022040D0
ldr r2, [r0]
ldrb r2, [r2, r1]
cmp r2, #0xff
beq _022040E0
ldr r1, [r0, #0xc]
lsl r0, r2, #2
ldr r0, [r1, r0]
bx lr
_022040E0:
mov r0, #0
bx lr
thumb_func_end Field3dObjectList_GetRenderObjectByID
thumb_func_start ov01_022040E4
ov01_022040E4: ; 0x022040E4
push {r3, lr}
add r2, r1, #0
ldr r3, [r0, #4]
lsl r1, r2, #2
ldr r1, [r3, r1]
str r1, [sp]
add r1, sp, #0
bl ov01_02204168
pop {r3, pc}
thumb_func_end ov01_022040E4
thumb_func_start ov01_022040F8
ov01_022040F8: ; 0x022040F8
push {r3, r4, r5, lr}
add r5, r0, #0
add r4, r1, #0
bl ov01_02204144
cmp r0, #0
beq _02204110
add r0, r5, #0
add r1, r4, #0
bl Field3dObjectList_GetRenderObjectByID
pop {r3, r4, r5, pc}
_02204110:
add r0, r5, #0
add r1, r4, #0
bl ov01_022040E4
pop {r3, r4, r5, pc}
.balign 4, 0
thumb_func_end ov01_022040F8
thumb_func_start ov01_0220411C
ov01_0220411C: ; 0x0220411C
push {r3, r4, r5, lr}
add r5, r0, #0
add r4, r1, #0
bne _02204128
mov r0, #0
pop {r3, r4, r5, pc}
_02204128:
ldr r1, [r4, #0x58]
bl ov01_02204144
cmp r0, #0
bne _0220413E
add r0, r5, #0
add r1, r4, #0
bl ov01_022040C0
mov r0, #1
pop {r3, r4, r5, pc}
_0220413E:
mov r0, #0
pop {r3, r4, r5, pc}
.balign 4, 0
thumb_func_end ov01_0220411C
thumb_func_start ov01_02204144
ov01_02204144: ; 0x02204144
ldr r0, [r0]
ldrb r0, [r0, r1]
cmp r0, #0xff
beq _02204150
mov r0, #1
bx lr
_02204150:
mov r0, #0
bx lr
thumb_func_end ov01_02204144
thumb_func_start ov01_02204154
ov01_02204154: ; 0x02204154
ldr r2, [r0, #4]
lsl r0, r1, #2
ldr r0, [r2, r0]
cmp r0, #0
beq _02204162
mov r0, #1
bx lr
_02204162:
mov r0, #0
bx lr
.balign 4, 0
thumb_func_end ov01_02204154
thumb_func_start ov01_02204168
ov01_02204168: ; 0x02204168
push {r3, r4, r5, lr}
add r5, r0, #0
ldr r0, [r1]
add r4, r2, #0
bl NNS_G3dGetMdlSet
cmp r0, #0
beq _02204198
add r2, r0, #0
add r2, #8
beq _0220418C
ldrb r1, [r0, #9]
cmp r1, #0
bls _0220418C
ldrh r1, [r0, #0xe]
add r1, r2, r1
add r1, r1, #4
b _0220418E
_0220418C:
mov r1, #0
_0220418E:
cmp r1, #0
beq _02204198
ldr r1, [r1]
add r2, r0, r1
b _0220419A
_02204198:
mov r2, #0
_0220419A:
ldr r0, [r5, #0x10]
ldr r1, [r5, #0xc]
lsl r0, r0, #2
ldr r0, [r1, r0]
str r2, [r0, #0x54]
ldr r0, [r5, #0x10]
ldr r1, [r5, #0xc]
lsl r0, r0, #2
ldr r0, [r1, r0]
ldr r1, [r0, #0x54]
bl NNS_G3dRenderObjInit
ldr r1, [r5, #0x10]
ldr r2, [r5, #0xc]
lsl r0, r1, #2
ldr r0, [r2, r0]
add r1, r1, #1
str r1, [r5, #0x10]
str r4, [r0, #0x58]
pop {r3, r4, r5, pc}
.balign 4, 0
thumb_func_end ov01_02204168
thumb_func_start ov01_022041C4
ov01_022041C4: ; 0x022041C4
push {r3, lr}
mov r1, #0x10
bl Heap_Alloc
mov r1, #0
str r1, [r0, #0xc]
str r1, [r0]
str r1, [r0, #4]
str r1, [r0, #8]
pop {r3, pc}
thumb_func_end ov01_022041C4
thumb_func_start ov01_022041D8
ov01_022041D8: ; 0x022041D8
push {r3, r4, r5, r6, r7, lr}

View File

@@ -2,15 +2,10 @@
#define POKEHEARTGOLD_FIELD_OVERLAY_01_021E8744_H
#include <nnsys.h>
#include "field/overlay_01_02204004.h"
typedef struct UnkStruct_ov01_021E8B04 UnkStruct_ov01_021E8B04;
typedef struct UnkStruct_FieldSysC0_SubC {
NNSG3dRenderObj renderObj;
NNSG3dResMdl *model;
NNSG3dResFileHeader *resFileHeader;
} UnkStruct_FieldSysC0_SubC;
void ov01_021E8970(int modelNum, int animNum, int a2, UnkStruct_FieldSysC0_SubC *renderObj, void *fsysUnk54);
UnkStruct_ov01_021E8B04 *ov01_021E8B04(int modelNum, int animNum, void *fsysUnk54);
void ov01_021E8B84(UnkStruct_ov01_021E8B04 *anim, int a1);

View File

@@ -3,13 +3,24 @@
#include <nnsys.h>
#include "field/overlay_01_021E8744.h"
#include "heap.h"
typedef struct FieldSystemUnkSubC8 {
u32 unk0;
u32 unk4;
u32 unk8;
u32 unkC;
} FieldSystemUnkSubC8;
typedef struct UnkStruct_FieldSysC0_SubC {
NNSG3dRenderObj renderObj;
NNSG3dResMdl *model;
int index;
} UnkStruct_FieldSysC0_SubC;
typedef struct UnkStruct_FieldSysC0 {
u8 *modelNumToLoadedSlot;
NNSG3dResFileHeader *resFileHeader;
NNSG3dResFileHeader **resFileHeaders;
UnkStruct_FieldSysC0_SubC *objectHeap;
UnkStruct_FieldSysC0_SubC **objects;
int numObjects;
@@ -17,7 +28,22 @@ typedef struct UnkStruct_FieldSysC0 {
int objectMax;
} UnkStruct_FieldSysC0;
UnkStruct_FieldSysC0 ov01_02204004(enum HeapID heapID, int indexMax, int objectMax, NNSG3dResFileHeader *a3);
UnkStruct_FieldSysC0_SubC *Field3dObjectList_GetRenderObjectByID(UnkStruct_FieldSysC0 *a0, int a1);
UnkStruct_FieldSysC0 *ov01_02204004(enum HeapID heapID, int indexMax, int objectMax, NNSG3dResFileHeader **fileResHeader); // FieldSysC0_New
void ov01_02204084(UnkStruct_FieldSysC0 *unkC0); // FieldSysC0_Free
UnkStruct_FieldSysC0_SubC *ov01_022040A4(UnkStruct_FieldSysC0 *unkC0, int index);
UnkStruct_FieldSysC0_SubC *Field3dObjectList_GetRenderObjectByID(UnkStruct_FieldSysC0 *unkC0, int index);
UnkStruct_FieldSysC0_SubC *ov01_022040F8(UnkStruct_FieldSysC0 *unkC0, int index);
BOOL ov01_0220411C(UnkStruct_FieldSysC0 *unkC0, UnkStruct_FieldSysC0_SubC *object);
BOOL ov01_02204154(UnkStruct_FieldSysC0 *unkC0, int index);
FieldSystemUnkSubC8 *ov01_022041C4(enum HeapID heapID);
void ov01_02204278(FieldSystemUnkSubC8 *unkSubC8);
void ov01_02204350(FieldSystemUnkSubC8 *unkSubC8);
void ov01_022043D8(FieldSystemUnkSubC8 *unkSubC8);
void ov01_02204424(FieldSystemUnkSubC8 *unkSubC8);
void *ov01_0220460C(FieldSystemUnkSubC8 *unkSubC8);
void ov01_02204634(void *unkCC);
void *ov01_02204744(enum HeapID heapID);
void ov01_02204764(void *unk104);
void ov01_022047DC(void *unk104);
#endif // POKEHEARTGOLD_FIELD_OVERLAY_01_02204004_H

View File

@@ -3,6 +3,7 @@
#include "field/draw_map_name.h"
#include "field/overlay_01_021E66E4.h"
#include "field/overlay_01_02204004.h"
#include "bag_cursor.h"
#include "battle_regulation.h"
@@ -16,7 +17,6 @@
#include "map_matrix.h"
#include "menu_input_state.h"
#include "overlay_01_021EB1E8.h"
#include "overlay_01_02204004.h"
#include "overlay_manager.h"
#include "photo_types_def.h"
#include "save_pokegear.h"
@@ -157,7 +157,7 @@ struct FieldSystem {
u8 unkBC[4];
void *unkC0;
int unkC4;
FieldSystemUnkC8 *unk_C8;
FieldSystemUnkSubC8 *unk_C8;
u8 filler_CC[0x4];
u16 lastTouchMenuInput;
u8 unkD2_0 : 6;

View File

@@ -1,9 +0,0 @@
#ifndef POKEHEARTGOLD_OVERLAY_01_02204004_H
#define POKEHEARTGOLD_OVERLAY_01_02204004_H
typedef struct FieldSystemUnkC8 FieldSystemUnkC8;
void ov01_022043D8(FieldSystemUnkC8 *a0);
void ov01_02204424(FieldSystemUnkC8 *a0);
#endif // POKEHEARTGOLD_OVERLAY_01_02204004_H

View File

@@ -557,6 +557,7 @@ Overlay field
Object asm/overlay_01_022031C0.o
Object asm/overlay_01_02203A18.o
Object asm/overlay_01_02203E40.o
Object src/field/overlay_01_02204004_thumb.o
Object asm/overlay_01_02204004.o
Object src/field/overlay_01_apricorn_tree_anim.o
Object src/field/overlay_01_rock_smash_item.o

View File

@@ -4,6 +4,7 @@
#include "demo/legend.naix"
#include "field/overlay_01_021E66E4.h"
#include "field/overlay_01_021E8744.h"
#include "field/overlay_01_021FB878.h"
#include "field/overlay_01_02204004.h"
#include "fielddata/script/scr_seq/event_D17R0110.h"

View File

@@ -0,0 +1,103 @@
#include "field/overlay_01_02204004.h"
#include "global.h"
static BOOL ov01_02204144(UnkStruct_FieldSysC0 *unkC0, int index);
static UnkStruct_FieldSysC0_SubC *ov01_02204168(UnkStruct_FieldSysC0 *unkC0, NNSG3dResFileHeader **resFileHeader, int index);
UnkStruct_FieldSysC0 *ov01_02204004(enum HeapID heapID, int indexMax, int objectMax, NNSG3dResFileHeader **resFileHeaders) { // FieldSysC0_New
UnkStruct_FieldSysC0 *unkC0 = Heap_Alloc(heapID, sizeof(UnkStruct_FieldSysC0));
unkC0->numObjects = 0;
unkC0->indexMax = indexMax;
unkC0->objectMax = objectMax;
unkC0->resFileHeaders = resFileHeaders;
unkC0->modelNumToLoadedSlot = Heap_Alloc(heapID, indexMax);
int i;
for (i = 0; i < indexMax; i++) {
unkC0->modelNumToLoadedSlot[i] = 0xFF;
}
int size = objectMax * 0x5C;
unkC0->objectHeap = Heap_Alloc(heapID, size);
MIi_CpuClearFast(0, (u32*)unkC0->objectHeap, size);
unkC0->objects = Heap_Alloc(heapID, objectMax * 4);
for (i = 0; i < objectMax; i++) {
unkC0->objects[i] = &unkC0->objectHeap[i];
}
return unkC0;
}
void ov01_02204084(UnkStruct_FieldSysC0 *unkC0) { // FieldSysC0_Free
Heap_Free(unkC0->modelNumToLoadedSlot);
Heap_Free(unkC0->objectHeap);
Heap_Free(unkC0->objects);
Heap_Free(unkC0);
}
UnkStruct_FieldSysC0_SubC *ov01_022040A4(UnkStruct_FieldSysC0 *unkC0, int index) {
unkC0->modelNumToLoadedSlot[index] = unkC0->numObjects;
NNSG3dResFileHeader *resFileHeader = unkC0->resFileHeaders[index];
return ov01_02204168(unkC0, &resFileHeader, index);
}
static void ov01_022040C0(UnkStruct_FieldSysC0 *unkC0, UnkStruct_FieldSysC0_SubC *object) {
unkC0->numObjects--;
unkC0->objects[unkC0->numObjects] = object;
}
UnkStruct_FieldSysC0_SubC *Field3dObjectList_GetRenderObjectByID(UnkStruct_FieldSysC0 *unkC0, int id) {
u8 index = unkC0->modelNumToLoadedSlot[id];
if (index != 0xFF) {
return unkC0->objects[index];
}
return NULL;
}
static UnkStruct_FieldSysC0_SubC *ov01_022040E4(UnkStruct_FieldSysC0 *unkC0, int index) {
NNSG3dResFileHeader *resFileHeader = unkC0->resFileHeaders[index];
return ov01_02204168(unkC0, &resFileHeader, index);
}
UnkStruct_FieldSysC0_SubC *ov01_022040F8(UnkStruct_FieldSysC0 *unkC0, int index) {
if (ov01_02204144(unkC0, index)) {
return Field3dObjectList_GetRenderObjectByID(unkC0, index);
}
return ov01_022040E4(unkC0, index);
}
BOOL ov01_0220411C(UnkStruct_FieldSysC0 *unkC0, UnkStruct_FieldSysC0_SubC *object) {
if (object == NULL) {
return FALSE;
}
if (ov01_02204144(unkC0, object->index) == FALSE) {
ov01_022040C0(unkC0, object);
return TRUE;
}
return FALSE;
}
static BOOL ov01_02204144(UnkStruct_FieldSysC0 *unkC0, int index) {
return unkC0->modelNumToLoadedSlot[index] != 0xFF;
}
BOOL ov01_02204154(UnkStruct_FieldSysC0 *unkC0, int index) {
return unkC0->resFileHeaders[index] != NULL;
}
static UnkStruct_FieldSysC0_SubC *ov01_02204168(UnkStruct_FieldSysC0 *unkC0, NNSG3dResFileHeader **resFileHeader, int index) {
unkC0->objects[unkC0->numObjects]->model = NNS_G3dGetMdlByIdx(NNS_G3dGetMdlSet(*resFileHeader), 0);
NNS_G3dRenderObjInit(&unkC0->objects[unkC0->numObjects]->renderObj, unkC0->objects[unkC0->numObjects]->model);
UnkStruct_FieldSysC0_SubC *object = unkC0->objects[unkC0->numObjects];
unkC0->numObjects++;
object->index = index;
return object;
}
FieldSystemUnkSubC8 *ov01_022041C4(enum HeapID heapID) { // FieldSystemUnkSubC8_New
FieldSystemUnkSubC8 *unkC8 = Heap_Alloc(heapID, sizeof(FieldSystemUnkSubC8));
unkC8->unkC = 0;
unkC8->unk0 = 0;
unkC8->unk4 = 0;
unkC8->unk8 = 0;
}