ogrebattle64/src/main.c

466 lines
12 KiB
C

#include "common.h"
#include "libmus.h"
extern u16 D_800AEDE2;
INCLUDE_ASM(const s32, "main", func_80070C60);
INCLUDE_ASM(const s32, "main", AddHeap);
INCLUDE_ASM(const s32, "main", func_80070F14);
INCLUDE_ASM(const s32, "main", __virtual_mem_alloc);
INCLUDE_ASM(const s32, "main", func_800710DC);
/* 1688 80071288 */
void* func_80071288(u32 arg0) {
u16 temp_s0;
void* ret;
temp_s0 = D_800AEDE2;
D_800AEDE2 = 1;
ret = __virtual_mem_alloc(arg0);
D_800AEDE2 = temp_s0;
return ret;
}
INCLUDE_ASM(const s32, "main", func_800712C4);
INCLUDE_ASM(const s32, "main", func_800713EC);
INCLUDE_ASM(const s32, "main", HIsAllocatedPointer);
INCLUDE_ASM(const s32, "main", func_80071634);
INCLUDE_ASM(const s32, "main", func_8007163C);
INCLUDE_ASM(const s32, "main", func_80071644);
INCLUDE_ASM(const s32, "main", func_80071950);
INCLUDE_ASM(const s32, "main", func_800719E8);
INCLUDE_ASM(const s32, "main", func_80071A3C);
INCLUDE_ASM(const s32, "main", func_80071A74);
INCLUDE_ASM(const s32, "main", func_80071B9C);
INCLUDE_ASM(const s32, "main", func_80071C04);
INCLUDE_ASM(const s32, "main", func_80071E74);
typedef struct {
u8 field_0x0;
u8 field_0x1;
u8 field_0x2;
} Unknown0;
typedef struct {
s16 field_0x0[9];
} Unknown1;
void __calls_copy_controller_data(); /* extern */
void __calls_loads_overlay_array(); /* extern */
void __calls_osViSwapBuffer_8007307C(void**); /* extern */
void __dma_load_loop(s32); /* extern */
void __initialize_song_mem(); /* extern */
void __set_fp_8008A660(void(*)(u16)); /* extern */
void __set_obPtrPtrDisplayList(Gfx**); /* extern */
void __set_vi_mode(s32); /* extern */
void func_80070C60(s32*, s32); /* extern */
void func_80072710(); /* extern */
void func_800727D8(); /* extern */
u8 func_800728BC(); /* extern */
u8 func_80072900(); /* extern */
s32 func_80073F58(); /* extern */
void func_800746C8(); /* extern */
void func_800749C0(s32); /* extern */
void func_800764E0(); /* extern */
void func_80079380(); /* extern */
void func_8008A040(); /* extern */
void func_8008A1B0(); /* extern */
s8 func_8008A260(); /* extern */
void func_8009DAEC(); /* extern */
void func_800E9CEC(); /* extern */
void func_800EA714(); /* extern */
void func_800EA8E0(); /* extern */
void func_8016C900(); /* extern */
void func_8016CD50(s32); /* extern */
void func_80179060(); /* extern */
void func_8017BDC0(); /* extern */
void func_80184D70(); /* extern */
void obControllerInit(); /* extern */
extern s32 D_800A81F4;
extern s32 D_800A8204;
extern Unknown1 D_800ABD80;
extern Unknown1 D_800E9C08;
extern s8 D_800A8213;
extern u8 D_800AEF98;
extern s8 D_800AEF99;
extern s8 D_800AEF9A;
extern s8 D_800AEFA0;
extern s32 D_800AEFA4;
extern s8 D_800C4808;
extern s32 D_800C4BCC;
extern s8 D_800C4CE4;
extern s8 D_800E7A0C;
extern s8 D_800E810C;
extern s8 D_800E82C4;
extern s32 D_800EB8F0;
extern s32 D_8018FDC0;
extern s32 D_80190F10;
extern s32 D_80243DB0;
extern s8 D_800A8210;
extern s8 D_800A8211;
extern s8 D_800A8212;
extern s8 D_800A8213;
extern OSContPad __GLOBAL_CONTROLLER_DATA_COPY[4];
extern struct {
// s32 field_0x0;
// s32 field_0x4;
// s32 field_0x8;
OSContPad* field_0xc[4];
} D_800C47F0;
extern u16 __MAIN_START_BUT_CHECK;
extern s16 __MAIN_START_BUT_STATE;
extern void func_8007284C(u16);
extern void func_8016AF80();
extern void func_80197B70();
extern struct {
s8 field_0x0;
s8 field_0x1;
s8 field_0x2;
} D_800A81F0;
DECLARE_SEGMENT(segment_song);
DECLARE_SEGMENT(segment_obdata);
INCLUDE_ASM(const s32, "main", obMain);
INCLUDE_ASM(const s32, "main", func_80072398);
/* 2B10 80072710 */
void func_80072710(void) {
if ((u32)(osTvType - 1) >= OS_TV_TYPE_MPAL) {
while(1);
}
}
INCLUDE_ASM(const s32, "main", __set_vi_mode);
/* 2BD8 800727D8 */
void func_800727D8(void) {
s16* var_a0;
s16* var_a2;
s16* var_a3;
s16* var_v1;
s32 var_a1;
s32 var_t0;
var_t0 = 0;
var_a3 = &D_800AEF10;
var_a2 = &D_800AEE90;
do {
var_a1 = 0;
var_a0 = var_a2;
var_v1 = var_a3;
loop_2:
*var_v1 = 0;
*var_a0 = 0;
var_a0 += 1;
var_a1 += 1;
var_v1 += 1;
if (var_a1 < 0x10) {
goto loop_2;
}
var_a3 += 0x10;
var_t0 += 1;
var_a2 += 0x10;
} while (var_t0 < 4);
bzero(__GLOBAL_CONTROLLER_DATA_COPY, sizeof(__GLOBAL_CONTROLLER_DATA_COPY));
}
extern s8 D_800AEF9A;
void func_8007284C(u16 __unused) {
const u16 pattern_a = CONT_A | CONT_B | CONT_L | CONT_START;
const u16 pattern_b = CONT_A | CONT_B | CONT_G | CONT_START;
if ((D_800AEF9A & 1) && !(D_800AEF9A & 4)) {
if (D_800AEF9A & 2) {
if (__GLOBAL_CONTROLLER_DATA[0].button == 0) {
D_800AEF9A = D_800AEF9A & 0xFD;
}
} else if (__GLOBAL_CONTROLLER_DATA[0].button == pattern_a ||
__GLOBAL_CONTROLLER_DATA[0].button == pattern_b) {
D_800AEF9A = D_800AEF9A | 6;
}
}
}
u8 func_800728BC(void) {
s32 mask;
u8 temp_s0;
mask = osSetIntMask(OS_IM_NONE);
temp_s0 = D_800AEF9A | 1;
D_800AEF9A = temp_s0;
osSetIntMask(mask);
return temp_s0;
}
u8 func_80072900(void) {
s32 mask;
u8 temp_s0;
mask = osSetIntMask(OS_IM_NONE);
temp_s0 = D_800AEF9A & 0xFA;
D_800AEF9A = temp_s0;
osSetIntMask(mask);
return temp_s0;
}
s32 func_80072944(void) {
u8 temp_s0;
s32 mask;
mask = osSetIntMask(OS_IM_NONE);
temp_s0 = D_800AEF9A;
osSetIntMask(mask);
return temp_s0 & 4;
}
INCLUDE_ASM(const s32, "main", __calls_copy_controller_data);
extern u8 __reset_compared_osTvType(); /* extern */
extern void* D_800C4BB8;
/* 347C 8007307C */
void __calls_osViSwapBuffer_8007307C(void** buffers)
{
u8 prev;
D_800C4BB8 = buffers[3];
prev = __reset_compared_osTvType();
if (prev == OS_TV_TYPE_MPAL)
{
switch(osTvType)
{
case OS_TV_TYPE_NTSC:
osViSetMode(&osViModeNtscHpf1);
break;
case OS_TV_TYPE_MPAL:
osViSetMode(&osViModeMpalHpf1);
break;
}
}
else if (prev == OS_TV_TYPE_NTSC)
{
if (osTvType == prev) goto ntsc;
if(osTvType == OS_TV_TYPE_MPAL) goto pal;
goto next;
ntsc:
osViSetMode(&osViModeNtscLan1);
goto next;
pal:
osViSetMode(&osViModeMpalLan1);
goto next;
}
next:
if (prev != OS_TV_TYPE_PAL)
osViSetSpecialFeatures(OS_VI_DIVOT_ON | OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF | OS_VI_GAMMA_DITHER_OFF);
osViSwapBuffer(buffers[3]);
}
/* 3564 80073164 */
void func_80073164(u8 arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, s16 arg5, s16 arg6) {
if (arg0 == 0) {
if ((arg1 << 0x10) >= 0) {
D_800C4C08 = arg1;
}
if ((arg2 << 0x10) >= 0) {
D_800E7D68 = arg2;
}
if ((arg3 << 0x10) >= 0) {
D_800C4A18 = arg3;
}
if ((arg4 << 0x10) >= 0) {
D_800E7A1C = arg4;
}
if ((arg5 << 0x10) >= 0) {
D_800C4BCA = arg5;
}
if ((arg6 << 0x10) >= 0) {
D_800C4AD8 = arg6;
}
} else {
D_800C4C08 += arg1;
D_800E7D68 += arg2;
D_800C4A18 += arg3;
D_800E7A1C += arg4;
D_800C4BCA += arg5;
D_800C4AD8 += arg6;
}
D_800AEE72 = 2;
}
/* 368C 8007328C */
void func_8007328C(void) {
s32 index;
for(index = 0; index < 2; index++) {
func_800712C4(D_800A81C0[index].field_0x0);
func_800712C4(D_800A81C0[index].field_0x4);
func_800712C4(D_800A81C0[index].field_0x8);
func_800712C4(D_800A81C0[index].field_0xc);
func_800712C4(D_800A81C0[index].field_0x10);
func_800712C4(D_800A81C0[index].field_0x14);
}
D_800C4C08 = 0;
D_800E7D68 = 0;
D_800C4A18 = 0;
D_800E7A1C = 0;
D_800C4BCA = 0;
D_800C4AD8 = 0;
D_800AEE72 = 2;
bzero(&D_800A81C0, 0x30);
D_800A81F0.field_0x0 = 0;
}
/* 377C 8007337C */
void func_8007337C(void) {
D_800A8213 = 1;
}
/* 378C 8007338C */
u8 func_8007338C(void) {
return D_800A8213;
}
// INCLUDE_ASM(const s32, "main", func_80073398);
void func_8007328C(); /* extern */
extern s8 D_800A8210;
extern s8 D_800A8211;
extern s8 D_800A8212;
extern s8 D_800A8213;
extern Arg_800712C4* D_800AEF9C;
void func_80073398(void) {
func_80089A10();
func_8007328C();
D_800A8213 = 0;
D_800A8212 = 0;
D_800A8211 = 0;
D_800A8210 = 0;
D_800AEF9C = func_800712C4(D_800AEF9C);
D_800C4B20 = 0;
}
INCLUDE_ASM(const s32, "main", func_800733F8);
/* 3BA0 800737A0 */
void func_800737A0(void) {
gDPPipeSync(obPtrDisplayList++);
gSPSegment(obPtrDisplayList++, 0, 0);
gDPPipeSync(obPtrDisplayList++);
gSPDisplayList(obPtrDisplayList++, DISPLAY_LIST_80186E70);
gSPDisplayList(obPtrDisplayList++, DISPLAY_LIST_801869C8);
}
INCLUDE_ASM(const s32, "main", func_8007382C);
INCLUDE_ASM(const s32, "main", func_80073AE4);
/* 3FD0 80073BD0 */
void func_80073BD0(void) {
osViSetSpecialFeatures(OS_VI_DIVOT_ON | OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF | OS_VI_GAMMA_DITHER_OFF);
gDPPipeSync(obPtrDisplayList++);
gDPSetColorDither(obPtrDisplayList++, G_CD_MAGICSQ);
gDPSetAlphaDither(obPtrDisplayList++, G_AD_DISABLE);
}
INCLUDE_ASM(const s32, "main", func_80073C48);
INCLUDE_ASM(const s32, "main", func_80073CB0);
extern s32 D_800A81F4;
extern s32 D_800A81F8;
extern s32 D_800C4BCC;
/* 42D8 80073ED8 */
void func_80073ED8(void) {
if (D_800A81F4 == 0) {
__MAYBE_SONG_800EB0B0.field_0x2c = 0;
__MAYBE_SONG_800EB100.field_0x2c = 0;
__MAYBE_SONG_800EB150.field_0x2c = 0;
__MAYBE_SONG_800EB1A0.field_0x2c = 0;
__MAYBE_SONG_800EB1F0.field_0x2c = 0;
__MAYBE_SONG_800EB240.field_0x2c = 0;
__MAYBE_SONG_800EB290.field_0x2c = 0;
MusStop(MUSFLAG_SONGS | MUSFLAG_EFFECTS, 12);
D_800A81F4 = 12;
D_800A81F8 = D_800C4BCC;
}
}
INCLUDE_ASM(const s32, "main", func_80073F58);
/* 43D4 80073FD4 */
void __initialize_song_mem(void) {
s32 mask;
s32 count;
mask = osSetIntMask(OS_IM_NONE);
for(count = 0; count < 7; count++) {
__MAYBE_SONG_ARRAY_800A8218[count]->field_0x2c = 0;
__MAYBE_SONG_ARRAY_800A8218[count]->field_0x30 = 0;
__MAYBE_SONG_ARRAY_800A8218[count]->field_0x34 = 0;
__MAYBE_SONG_ARRAY_800A8218[count]->field_0x38 = 0;
__MAYBE_SONG_ARRAY_800A8218[count]->field_0x3c = 0;
__MAYBE_SONG_ARRAY_800A8218[count]->field_0x40 = 0;
__MAYBE_SONG_ARRAY_800A8218[count]->field_0x4c = 0;
}
osSetIntMask(mask);
}
INCLUDE_ASM(const s32, "main", func_80074050);
INCLUDE_ASM(const s32, "main", func_80074080);
INCLUDE_ASM(const s32, "main", func_800740F0);
INCLUDE_ASM(const s32, "main", func_800741A8);
INCLUDE_ASM(const s32, "main", func_8007422C);
INCLUDE_ASM(const s32, "main", func_800742F4);
INCLUDE_ASM(const s32, "main", func_80074494);