181 lines
5.1 KiB
C
181 lines
5.1 KiB
C
#include <ultra64.h>
|
|
#include "functions.h"
|
|
#include "variables.h"
|
|
|
|
#define NC_CAMERA_NODE_LIST_CAPACITY 0x46
|
|
|
|
typedef struct {
|
|
s32 type:24;
|
|
s32 valid:8;
|
|
s32 data_ptr;
|
|
} Struct_Core2_32DB0_0s;
|
|
|
|
void __ncCameraNodeList_removeNode(s32 arg0);
|
|
s32 ncCameraNodeList_nodeIsValid(s32 arg0);
|
|
void func_802B9EBC(s32 arg0, s32 arg1);
|
|
|
|
/* .bss */
|
|
Struct_Core2_32DB0_0s ncCameraNodeList[NC_CAMERA_NODE_LIST_CAPACITY];
|
|
|
|
/* .code */
|
|
void ncCameraNodeList_init(void){
|
|
int i;
|
|
for(i = 0; i< NC_CAMERA_NODE_LIST_CAPACITY; i++){
|
|
ncCameraNodeList[i].valid = FALSE;
|
|
}
|
|
}
|
|
|
|
void ncCameraNodeList_free(void){
|
|
int i;
|
|
|
|
for(i=0; i< NC_CAMERA_NODE_LIST_CAPACITY; i++){
|
|
if(ncCameraNodeList_nodeIsValid(i))
|
|
__ncCameraNodeList_removeNode(i);
|
|
}
|
|
}
|
|
|
|
void __ncCameraNodeList_addNode(s32 camera_node_index){
|
|
ncCameraNodeList[camera_node_index].valid = TRUE;
|
|
ncCameraNodeList[camera_node_index].type = 0;
|
|
|
|
}
|
|
|
|
void __ncCameraNodeList_removeNode(s32 camera_node_index){
|
|
func_802B9EBC(camera_node_index, 0);
|
|
ncCameraNodeList[camera_node_index].valid = 0;
|
|
}
|
|
|
|
//ncCameraNodeList_getdata_ptr_type4
|
|
s32 func_802B9E34(s32 camera_node_index){
|
|
return ncCameraNodeList[camera_node_index].data_ptr;
|
|
}
|
|
|
|
//ncCameraNodeList_getdata_ptr_type3
|
|
s32 func_802B9E48(s32 camera_node_index){
|
|
return ncCameraNodeList[camera_node_index].data_ptr;
|
|
}
|
|
|
|
//ncCameraNodeList_getdata_ptr_type1
|
|
s32 func_802B9E5C(s32 camera_node_index){
|
|
return ncCameraNodeList[camera_node_index].data_ptr;
|
|
}
|
|
|
|
//ncCameraNodeList_getdata_ptr_type2
|
|
s32 func_802B9E70(s32 camera_node_index){
|
|
return ncCameraNodeList[camera_node_index].data_ptr;
|
|
}
|
|
|
|
s32 ncCameraNodeList_capacity(void){
|
|
return NC_CAMERA_NODE_LIST_CAPACITY;
|
|
}
|
|
|
|
s32 ncCameraNodeList_getNodeType(s32 camera_node_index){
|
|
return ncCameraNodeList[camera_node_index].type;
|
|
}
|
|
|
|
s32 ncCameraNodeList_nodeIsValid(s32 camera_node_index){
|
|
return ncCameraNodeList[camera_node_index].valid;
|
|
}
|
|
|
|
void func_802B9EBC(s32 camera_node_index, s32 arg1){
|
|
if(arg1 == ncCameraNodeList[camera_node_index].type)
|
|
return;
|
|
//remove old cameraNodedata_ptr
|
|
switch(ncCameraNodeList[camera_node_index].type){
|
|
case 4:// L802B9F08
|
|
func_802BA214(ncCameraNodeList[camera_node_index].data_ptr);
|
|
break;
|
|
case 3:// L802B9F18
|
|
func_802BA398(ncCameraNodeList[camera_node_index].data_ptr);
|
|
break;
|
|
case 1:// L802B9F28
|
|
func_802BA76C(ncCameraNodeList[camera_node_index].data_ptr);
|
|
break;
|
|
case 2:// L802B9F38
|
|
ncCameraNodeType2_free(ncCameraNodeList[camera_node_index].data_ptr);
|
|
break;
|
|
case 0:// L802B9F40
|
|
break;
|
|
}
|
|
ncCameraNodeList[camera_node_index].type = arg1;
|
|
|
|
//init new camera node data_ptr
|
|
switch (arg1)
|
|
{
|
|
case 4:// L802B9F80
|
|
ncCameraNodeList[camera_node_index].data_ptr = func_802BA1E0();
|
|
break;
|
|
case 3:// L802B9F90
|
|
ncCameraNodeList[camera_node_index].data_ptr = func_802BA2F4();
|
|
break;
|
|
case 1:// L802B9FA0
|
|
ncCameraNodeList[camera_node_index].data_ptr = func_802BA6D4();
|
|
break;
|
|
case 2:// L802B9FB0
|
|
ncCameraNodeList[camera_node_index].data_ptr = ncCameraNodeType2_new();
|
|
break;
|
|
case 0:// L802B9FBC
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
void __ncCameraNodeList_nodeFromFile(File *file_ptr, s32 arg1){
|
|
u8 sp27;
|
|
__ncCameraNodeList_addNode(arg1);
|
|
file_getByte_ifExpected(file_ptr, 2, &sp27);
|
|
func_802B9EBC(arg1, sp27);
|
|
switch(ncCameraNodeList_getNodeType(arg1)){
|
|
case 4:// L802BA030
|
|
func_802BA244(file_ptr, func_802B9E34(arg1));
|
|
break;
|
|
case 3:// L802BA04C
|
|
func_802BA550(file_ptr, func_802B9E48(arg1));
|
|
break;
|
|
case 1:// L802BA068
|
|
func_802BA93C(file_ptr, func_802B9E5C(arg1));
|
|
break;
|
|
case 2:// L802BA084
|
|
ncCameraNodeType2_fromFile(file_ptr, func_802B9E70(arg1));
|
|
break;
|
|
case 0:// L802BA098
|
|
break;
|
|
}
|
|
}
|
|
|
|
void ncCameraNodeList_fromFile(File *file_ptr){
|
|
s16 sp26;
|
|
ncCameraNodeList_free();
|
|
ncCameraNodeList_init();
|
|
while(!file_isNextByteExpected(file_ptr, 0)){
|
|
if(file_getShort_ifExpected(file_ptr, 1, &sp26))
|
|
__ncCameraNodeList_nodeFromFile(file_ptr, sp26);
|
|
}
|
|
|
|
}
|
|
|
|
void ncCameraNodeList_defrag(void){
|
|
int i;
|
|
for(i = 0; i< NC_CAMERA_NODE_LIST_CAPACITY; i++){
|
|
if(ncCameraNodeList[i].valid){
|
|
switch(ncCameraNodeList[i].type){
|
|
case 4:// L802BA17C
|
|
ncCameraNodeList[i].data_ptr = defrag(ncCameraNodeList[i].data_ptr);
|
|
break;
|
|
case 3:// L802BA18C
|
|
ncCameraNodeList[i].data_ptr = defrag(ncCameraNodeList[i].data_ptr);
|
|
break;
|
|
case 1:// L802BA19C
|
|
ncCameraNodeList[i].data_ptr = defrag(ncCameraNodeList[i].data_ptr);
|
|
break;
|
|
case 2:// L802BA1AC
|
|
ncCameraNodeList[i].data_ptr = defrag(ncCameraNodeList[i].data_ptr);
|
|
break;
|
|
case 0:// L802BA1B8
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|