ogrebattle64/src/_ob_rabid_jar.c

488 lines
13 KiB
C

#include "common.h"
#include "os_message.h"
typedef struct {
s32 field_0x0;
u8 field_0x4[0xA0];
s32 field_0x8;
} SomethingMalloc;
extern SomethingMalloc D_800E8300[];
extern s32* D_800C4804;
extern s32 D_800C480A;
extern s32 D_800C49D2;
extern s32* D_800C4AD4;
extern s32* D_800C4B24;
extern s32 D_800C4B28;
extern s32* D_800C4BAC;
extern s32 D_800C4BB0;
extern s32 D_800C4BD0;
extern s32* D_800C4BDC;
extern s32* D_800C4BE0;
extern s32* D_800C4BE8;
extern s32* D_800C4C0C;
extern s32* D_800C4C4C;
extern s32 D_800E797C;
extern s32 D_800E79BC;
extern s32* D_800E7A08;
extern s32 D_800E7A24;
extern s32* D_800E7D6C;
extern s32 D_800E8100;
extern s32* D_800E8108;
extern s32* D_800E9BC0;
extern s32 __CONTROLLER_0_BUTTON;
extern s32 __MAIN_START_BUT_CHECK;
extern u8 __SOMETHING_WITH_GFX;
extern u16 D_800C4C10[6];
extern struct {
s16 field_0x0;
s8 field_0x2;
s8 field_0x3;
s8 field_0x4;
} D_800AF0A0;
extern s32 D_800AF0B0;
extern s16 D_800C49D0;
extern s32 D_800C4C20;
extern s32 D_800E79A0;
extern u8 D_800E82C8[0x3F0];
extern s16 D_800AF0A6[4];
extern void* D_800AF090[4];
extern void* D_800C47F0[4];
extern void func_8007819C();
extern s32 func_80173B60(s32);
extern OSMesgQueue obUnpackQueue;
void UnpackProc(void*);
INCLUDE_ASM(const s32, "_ob_rabid_jar", __calls_loads_overlay_array);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80076150);
/* 6550 80076150 */
// s8 func_80076150(u16 arg0) {
// switch (arg0) {
// case 3:
// case 4:
// case 5:
// case 6:
// case 7:
// case 10:
// case 11:
// case 15:
// case 18:
// case 23:
// return 0;
// default:
// return 1;
// }
// }
/* 6588 80076188 */
OverlaySomething* func_80076188(void) {
return &D_800A872C;
}
/* 6594 80076194 */
void func_80076194(void) {
__maybeBlockingRetraceFunc = 0xFFFE;
}
/* 65A4 800761A4 */
void func_800761A4(void) {
func_80073164(0, 1, 1, 0x80, 1, 0x100, 0x2000);
}
INCLUDE_ASM(const s32, "_ob_rabid_jar", __loads_overlay_array);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80076324);
INCLUDE_ASM(const s32, "_ob_rabid_jar", __get_overlay_index);
/* 68E0 800764E0 */
void func_800764E0(void) {
u16 i;
osGetTime();
bzero(D_800E82C8, sizeof(D_800E82C8));
bzero(D_800C4C10, sizeof(D_800C4C10));
D_800C4C20 = 1;
D_800E79A0 = 8;
D_800C49D0 = 0;
D_800AF0B0 = 0;
D_800AF0A0.field_0x0 = 0;
D_800AF0A0.field_0x3 = 0;
D_800AF0A0.field_0x2 = 0;
D_800AF0A0.field_0x4 = 0;
for(i = 0; i < 4; i++) {
D_800AF0A6[i] = 0;
D_800AF090[i] = &D_800AF0A0;
}
obSetCurrentTime(osGetTime());
D_800AF0B0 = func_80173B60(D_800AF0B0);
func_8007819C();
}
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_800765D8);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80076AE8);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80076DC8);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80076E00);
/* 722C 80076E2C */
void func_80076E2C(void) {
D_800AF0B0 = func_80173B60(D_800AF0B0);
}
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80076E58);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80076EAC);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80076F00);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80076F5C);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_8007705C);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80077160);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80077200);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80077288);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80077314);
/* 7768 80077368 */
s32 UnusedMallocNo(s32 arg0) {
s32 var_a1;
SomethingMalloc** var_v1;
var_a1 = 0;
var_v1 = &D_800E8300[arg0];
loop_1:
if (*var_v1 != 0) {
var_a1 += 1;
var_v1 += 1;
if (var_a1 >= 10) {
osSyncPrintf("UnusedMallocNo(): 空きがない!\n");
while(1);
}
goto loop_1;
}
return var_a1;
}
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_800773D4);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_8007740C);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_8007745C);
/* 7894 80077494 */
void func_80077494(s32 arg0) {
if (arg0 == D_800C4C10[0]) {
D_800C4BE0 = D_800C47F0;
D_800E8108 = &__MAIN_START_BUT_CHECK;
D_800C4BDC = &D_800E8100;
D_800C4804 = &D_800C4BD0;
D_800C4C0C = &D_800E79BC;
D_800C4BE8 = &D_800C49D2;
D_800C4AD4 = &D_800E7A24;
D_800E9BC0 = &D_800E797C;
D_800E7A08 = &D_800C480A;
D_800C4BAC = &__SOMETHING_WITH_GFX + 4;
D_800C4B24 = &D_800C4B28;
D_800E7D6C = &D_800C4BB0;
D_800C4C4C = &__CONTROLLER_0_BUTTON;
} else {
D_800C4BE0 = D_800AF090;
D_800E8108 = &D_800AF0A6;
D_800C4BDC = &D_800AF0A6;
D_800C4804 = &D_800AF0A6;
D_800C4C0C = &D_800AF0A6;
D_800C4BE8 = &D_800AF0A6;
D_800C4AD4 = &D_800AF0A6;
D_800E9BC0 = &D_800AF0A6;
D_800E7A08 = &D_800AF0A6;
D_800C4BAC = &D_800AF0A6;
D_800C4B24 = &D_800AF0A6;
D_800E7D6C = &D_800AF0A6;
D_800C4C4C = &D_800AF0A6;
}
}
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_800775EC);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80077BF8);
void func_80077F80(void) { }
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80077F88);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_800780D4);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80078164);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_8007819C);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_800782EC);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80078300);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_8007834C);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80078658);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80078674);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_8007896C);
// s32 func_8007338C(); /* extern */
// extern s32 D_800E8210;
// /* 8D6C 8007896C */
// void func_8007896C(s16 arg0, s16 arg1, s16 arg2, s16 arg3) {
// s16 ulx;
// s16 uly;
// s16 lrx;
// s16 lry;
// // s32 temp_a0;
//
// lry = arg0;
// lrx = arg1;
// ulx = arg2;
// uly = arg3;
// if (func_8007338C() != 0) {
// if (arg0 < 0) {
// lry = 0;
// } else if (arg0 >= 320) {
// lry = 319;
// }
// if (lrx < 0) {
// lrx = 0;
// } else if (lrx >= 320) {
// lrx = 319;
// }
// if (ulx < 0) {
// ulx = 0;
// } else if (ulx >= 320) {
// ulx = 319;
// }
// if (uly < 0) {
// uly = 0;
// } else if (uly >= 240) {
// uly = 239;
// }
//
// gDPPipeSync(obPtrDisplayList++);
//
// // obPtrDisplayList = temp_v0 + 8;
// // temp_v0->unk8 = 0xE200001C;
// // temp_v0->unkC = 0;
// gDPSetRenderMode(obPtrDisplayList++, G_RM_NOOP, G_RM_NOOP2);
//
// gDPPipeSync(obPtrDisplayList++);
// gDPPipeSync(obPtrDisplayList++);
// gDPPipeSync(obPtrDisplayList++);
//
// // obPtrDisplayList = temp_v0 + 0x28;
// // temp_v0->unk28 = 0xE3000A01;
// // temp_v0->unk2C = 0x00300000;
// gDPSetCycleType(obPtrDisplayList++, G_CYC_FILL);
//
// // obPtrDisplayList = temp_v0 + 0x30;
// // temp_v0->unk30 = 0xE7000000U;
// // temp_v0->unk34 = 0;
// gDPPipeSync(obPtrDisplayList++);
//
// // obPtrDisplayList = temp_v0 + 0x38;
// // temp_v0->unk38 = 0xFE000000;
// // temp_v0->unk3C = temp_a0;
// gDPSetDepthImage(obPtrDisplayList++, D_800C4B20 - 0x80000000);
//
// // obPtrDisplayList = temp_v0 + 0x40;
// // temp_v0->unk40 = 0xFF10013F;
// // temp_v0->unk44 = temp_a0;
// gDPSetColorImage(obPtrDisplayList++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, D_800C4B20 - 0x80000000);
//
// // obPtrDisplayList = temp_v0 + 0x48;
// // temp_v0->unk48 = 0xF7000000;
// // temp_v0->unk4C = 0xFFFCFFFC;
// gDPSetFillColor(obPtrDisplayList++, 0xFFFCFFFC);
//
// // obPtrDisplayList = temp_v0 + 0x50;
// // temp_v0->unk50 = 0xE7000000U;
// // temp_v0->unk54 = 0;
// gDPPipeSync(obPtrDisplayList++);
//
// // obPtrDisplayList = temp_v0 + 0x58;
// // temp_v0->unk58 = (s32) (((ulx & 0x3FF) << 0xE) | (((uly & 0x3FF) * 4) | 0xF6000000));
// // temp_v0->unk5C = (s32) (((lry & 0x3FF) << 0xE) | ((lrx & 0x3FF) * 4));
// gDPFillRectangle(obPtrDisplayList++, ulx, uly, lrx, lry);
//
// // obPtrDisplayList = temp_v0 + 0x60;
// // temp_v0->unk60 = 0xE7000000U;
// // temp_v0->unk64 = 0;
// gDPPipeSync(obPtrDisplayList++);
//
// // obPtrDisplayList = temp_v0 + 0x68;
// // temp_v0->unk68 = 0xE7000000U;
// // temp_v0->unk6C = 0;
// gDPPipeSync(obPtrDisplayList++);
//
// // obPtrDisplayList = temp_v0 + 0x70;
// // temp_v0->unk70 = 0xE7000000U;
// // temp_v0->unk74 = 0;
// gDPPipeSync(obPtrDisplayList++);
//
// // obPtrDisplayList = temp_v0 + 0x78;
// // temp_v0->unk78 = 0xE7000000U;
// // temp_v0->unk7C = 0;
// gDPPipeSync(obPtrDisplayList++);
//
// // obPtrDisplayList = temp_v0 + 0x80;
// // temp_v0->unk80 = 0xFF10013F;
// // temp_v0->unk84 = (s32) (D_800E8210 - 0x80000000);
// gDPSetColorImage(obPtrDisplayList++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, D_800E8210 - 0x80000000);
//
// // obPtrDisplayList = temp_v0 + 0x88;
// // temp_v0->unk88 = 0xE7000000U;
// // temp_v0->unk8C = 0;
// gDPPipeSync(obPtrDisplayList++);
//
// // obPtrDisplayList = temp_v0 + 0x90;
// // temp_v0->unk90 = 0xE7000000U;
// // temp_v0->unk94 = 0;
// gDPPipeSync(obPtrDisplayList++);
//
// // obPtrDisplayList = temp_v0 + 0x98;
// // temp_v0->unk98 = 0xE3000A01;
// // temp_v0->unk9C = 0;
// gDPSetCycleType(obPtrDisplayList++, G_CYC_1CYCLE);
//
// // obPtrDisplayList = temp_v0 + 0xA0;
// // temp_v0->unkA0 = 0xE7000000U;
// // temp_v0->unkA4 = 0;
// gDPPipeSync(obPtrDisplayList++);
//
// // obPtrDisplayList = temp_v0 + 0xA8;
// }
// }
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80078C6C);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80079028);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_8007913C);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80079358);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80079380);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_8007938C);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80079618);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80079850);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_800798AC);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80079950);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80079AFC);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80079BD8);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80079CB4);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80079D60);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80079D98);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80079DF8);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80079E50);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80079E9C);
/* A29C 80079E9C */
// Arg_800712C4* func_80079E9C(Arg_800712C4* arg0) {
// Arg_800712C4* var_s0;
// var_s0 = arg0;
// if (var_s0 != NULL) {
// var_s0->field_0x10 = func_80079E9C(var_s0->field_0x10);
// var_s0->field_0x14 = func_80079E9C(var_s0->field_0x14);
// func_800712C4(var_s0->field_0x4);
// func_800712C4(var_s0);
// var_s0 = NULL;
// }
// return var_s0;
// }
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80079EF4);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_80079F70);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_8007A070);
INCLUDE_ASM(const s32, "_ob_rabid_jar", Unpack);
/* ABE0 8007A7E0 */
u32 __read_u32_le(u8* arg0) {
return (arg0[0] << 24) | (arg0[1] << 16) | (arg0[2] << 8) | arg0[3];
}
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_8007A80C);
INCLUDE_ASM(const s32, "_ob_rabid_jar", func_8007AB30);
/* AF7C 8007AB7C */
void obSendUnpackMesg(OBUnpackMesg* msg) {
msg->format = 1;
osSendMesg(&obUnpackQueue, msg, OS_MESG_BLOCK);
}
extern OSThread obThreadUnpackProc;
extern OBUnpackMesg obUnpackMesgBuf[8];
extern DECLARE_STACK(obStackUnpackProc, 0x80);
/* AFAC 8007ABAC */
void obUnpackThreadStart(OSId id, OSPri priority) {
osCreateMesgQueue(&obUnpackQueue, (OSMesg)&obUnpackMesgBuf, 8);
osCreateThread(&obThreadUnpackProc, id, UnpackProc, NULL, STACK_START(obStackUnpackProc), priority);
osStartThread(&obThreadUnpackProc);
}
/* B030 8007AC30 */
void UnpackProc(void* __unused) {
OBUnpackMesg *msg = NULL;
while(1) {
osRecvMesg(&obUnpackQueue, (OSMesg)&msg, 1);
if (msg->format == 1) {
Unpack(msg->buffer, msg->size);
osSendMesg(msg->queue, msg, OS_MESG_BLOCK);
} else {
osSyncPrintf("UnpackProc: no supported format %d\n", msg->format);
}
}
}