Refresh 1

This commit is contained in:
CoderStig
2021-02-28 22:54:49 -07:00
parent 630c47adff
commit 5ef48aa2eb
124 changed files with 25691 additions and 20740 deletions
+291 -1
View File
@@ -1,9 +1,100 @@
#include <ultra64.h>
#include <macros.h>
#include "types.h"
#include "variables.h"
extern void func_800C8F44(u16 arg0);
extern u16 D_800DC5A8;
struct UnkStruct80164490 {
s16 unk0;
s16 unk2;
s16 unk4;
};
extern struct UnkStruct80164490 *D_80164490;
struct UnkStruct8015F8D0 {
f32 unk0;
f32 unk4;
f32 unk8;
};
extern struct UnkStruct8015F8D0 D_8015F8D0;
extern struct Controller (*D_800DC4BC)[];
extern s32 D_800DC510;
extern s16 D_8015F6FE;
extern s16 D_800DC5B8;
extern s16 D_80152308;
extern s32 D_802BA038;
extern s16 D_802BA048;
extern s16 D_800DC5A4;
extern f32 D_8015F784;
extern s8 D_8018EDF3;
extern s8 gCupSelection;
extern u32 D_800DC604;
extern u32 D_800DC530;
extern u32 D_8015F730;
extern u32 D_8015F734;
extern u32 gPrevLoadedAddress;
extern u32 D_80150120;
extern s16 gCupTrackOrder[][4];
void func_800CA008(u8, u8);
extern f32 D_8015F738, D_8015F748, D_8015F758, D_8015F768, D_8015F778;
extern u32 *D_802B91C8;
void load_giant_egg(f32 *, f32, f32, f32);
extern u32 D_8000031C[];
// gfx?
extern u32 *D_0F04FE28;
extern u32 *D_0F050118;
extern u32 *D_0F051C54;
extern u32 *D_0F051FD8;
extern u32 *D_0F05232C;
extern u32 *D_0F0526B8;
extern u32 *D_0F052A20;
extern u32 *D_0F052D3C;
extern u32 *D_0F05300C;
extern u32 *D_0F0532F8;
extern u32 *D_0F05363C;
extern u32 *D_0F053950;
extern u32 *D_0F04F45C;
extern u32 *D_06009570;
extern u32 *D_06014330;
extern f32 D_8015F784;
extern u16 D_8015F900;
struct UnkStruct800DC64C {
s32 unk0;
s32 unk4;
s32 unk8;
};
extern struct UnkStruct800DC64C D_800DC64C;
struct UnkStruct800DC658 {
u16 unk0;
u16 unk2;
u16 unk4;
};
extern struct UnkStruct800DC658 D_800DC658;
extern s16 D_800DC5BC, D_800DC5C8;
extern u16 D_80150110;
void func_800029B0(void) {
switch(D_800DC5A8) {
case 0:
@@ -18,4 +109,203 @@ void func_800029B0(void) {
}
}
GLOBAL_ASM("asm/non_matchings/code_800029B0.s")
void func_80002A18(void) {
struct Controller *temp_v0;
int tmp;
gPlayerCountSelection1 = D_8018EDF3;
if (D_800DC50C != 4) {
D_800DC604 = 0;
}
if (D_800DC604 != 0) {
D_8015F784 = -1.0f;
} else {
D_8015F784 = 1.0f;
}
if (gModeSelection == 0) {
gCurrentCourseId = gCupTrackOrder[gCupSelection][gCourseSelection];
}
D_800DC52C = D_800DC530;
if (gCurrentCourseId != D_800DC5A4) {
D_80150120 = 0;
D_800DC5A4 = gCurrentCourseId;
gPrevLoadedAddress = D_8015F734;
load_course(gCurrentCourseId);
func_80295D88();
D_8015F730 = gPrevLoadedAddress;
} else {
gPrevLoadedAddress = D_8015F730;
}
func_802969F8();
func_80005310();
func_8003D080();
func_8006E9C0();
D_800DC510 = 0;
D_8015F6FE = 0;
D_800DC5B8 = 0;
D_80152308 = 0;
D_802BA038 = -1;
D_802BA048 = 0;
func_802A74BC();
func_802A4D18();
func_80091FA4();
func_8029E158();
if (gModeSelection != 3) {
D_8015F8D0.unk4 = (f32) (D_80164490->unk2 - 15);;
D_8015F8D0.unk8 = D_80164490->unk4;
if (gCurrentCourseId == COURSE_TOADS_TURNPIKE) {
D_8015F8D0.unk0 = (D_800DC604 != 0) ?
D_80164490->unk0 + 138.0f :
D_80164490->unk0 - 138.0f;
} else if (gCurrentCourseId == COURSE_WARIO_STADIUM) {
D_8015F8D0.unk0 = (D_800DC604 != 0) ?
D_80164490->unk0 + 12.0f :
D_80164490->unk0 - 12.0f;
} else {
D_8015F8D0.unk0 = D_80164490->unk0;
}
}
if (D_800DC51C == 0) {
func_800CA008(gPlayerCountSelection1 - 1, gCurrentCourseId + 4);
func_800CB2C4();
}
temp_v0 = *D_800DC4BC;
for (tmp = 0; tmp < 7; tmp++, temp_v0++){
temp_v0->unk0 = 0;
temp_v0->unk2 = 0;
temp_v0->buttonPressed = 0;
temp_v0->unk8 = 0;
temp_v0->unk4 = 0;
}
}
void func_80002DAC(void) {
switch (gCurrentCourseId) {
case COURSE_MARIO_RACEWAY:
load_giant_egg(&D_8015F748, -223.0f, 94.0f, -155.0f);
func_800C9D80(&D_8015F748, &D_802B91C8, 0x5103700B);
break;
case COURSE_ROYAL_RACEWAY:
load_giant_egg(&D_8015F748, 177.0f, 87.0f, -393.0f);
func_800C9D80(&D_8015F748, &D_802B91C8, 0x5103700B);
break;
case COURSE_LUIGI_RACEWAY:
load_giant_egg(&D_8015F748, 85.0f, 21.0f, -219.0f);
func_800C9D80(&D_8015F748, &D_802B91C8, 0x5103700B);
break;
case COURSE_WARIO_STADIUM:
load_giant_egg(&D_8015F748, 298.0f, 202.0f, -850.0f);
func_800C9D80(&D_8015F748, &D_802B91C8, 0x5103700B);
load_giant_egg(&D_8015F758, -1600.0f, 202.0f, -2430.0f);
func_800C9D80(&D_8015F758, &D_802B91C8, 0x5103700B);
load_giant_egg(&D_8015F768, -2708.0f, 202.0f, 1762.0f);
func_800C9D80(&D_8015F768, &D_802B91C8, 0x5103700B);
load_giant_egg(&D_8015F778, -775.0f, 202.0f, 1930.0f);
func_800C9D80(&D_8015F778, &D_802B91C8, 0x5103700B);
break;
case COURSE_KOOPA_BEACH:
load_giant_egg(&D_8015F738, 153.0f, 0.0f, 2319.0f);
func_800C9D80(&D_8015F738, &D_802B91C8, 0x51028001);
break;
case COURSE_DK_JUNGLE:
load_giant_egg(&D_8015F738, -790.0f, -255.0f, -447.0f);
func_800C9D80(&D_8015F738, &D_802B91C8, 0x51028001);
break;
default:
break;
}
}
void func_80003010(void) {
int i;
for (i = 0; i < 16; i++) {
D_8000031C[i] = 0;
}
}
void func_80003040(void) {
u32 pad[2];
f32 sp34;
struct UnkStruct800DC64C sp28;
struct UnkStruct800DC658 sp20;
sp28 = D_800DC64C;
sp20 = D_800DC658;
D_800DC5BC = 0;
D_800DC5C8 = 0;
D_80150110 = 0;
D_800DC604 = 0;
D_8015F784 = 1.0f;
gPlayerCountSelection1 = 1;
set_segment_base_addr(0x03, (gPrevLoadedAddress + 0xFFFF7000));
func_8029DAB8();
switch (gCurrentCourseId) {
case COURSE_MARIO_RACEWAY:
func_802A84F4(&D_0F04F45C, 0x35B, 0x800);
place_segment_06(&D_06009570);
break;
case COURSE_BOWSER_CASTLE:
func_802AF8BC(0x7001350, 0x32, 0, 0, 0);
break;
case COURSE_BANSHEE_BOARDWALK:
func_802AF8BC(0x7000878, -0x80, 0, 0, 0);
break;
case COURSE_YOSHI_VALLEY:
load_giant_egg(&sp34, -2300.0f, 0.0f, 634.0f);
sp34 *= D_8015F784;
func_8029EC88(&sp34, &sp20, &sp28, 9);
break;
case COURSE_MOO_MOO_FARM:
func_802A84F4(&D_0F04FE28, 0x3E8, 0x800);
func_802A84F4(&D_0F050118, 0x3E8, 0x800);
func_802A84F4(&D_0F051C54, 0x400, 0x800);
func_802A84F4(&D_0F051FD8, 0x400, 0x800);
func_802A84F4(&D_0F05232C, 0x400, 0x800);
func_802A84F4(&D_0F0526B8, 0x400, 0x800);
func_802A84F4(&D_0F052A20, 0x400, 0x800);
func_802A84F4(&D_0F052D3C, 0x400, 0x800);
func_802A84F4(&D_0F05300C, 0x400, 0x800);
func_802A84F4(&D_0F0532F8, 0x400, 0x800);
func_802A84F4(&D_0F05363C, 0x400, 0x800);
func_802A84F4(&D_0F053950, 0x400, 0x800);
place_segment_06(&D_06014330);
break;
case COURSE_SHERBET_LAND:
func_802AF8BC(0x7001EB8, -0x4C, 0xFF, 0xFF, 0xFF);
func_802AF8BC(0x7002308, -0x6A, 0xFF, 0xFF, 0xFF);
break;
case COURSE_RAINBOW_ROAD:
func_802AF8BC(0x7002068, -0x6A, 0xFF, 0xFF, 0xFF);
func_802AF8BC(0x7001E18, -0x6A, 0xFF, 0xFF, 0xFF);
func_802AF8BC(0x7001318, -1, 0xFF, 0xFF, 0);
break;
case COURSE_WARIO_STADIUM:
load_giant_egg(&sp34, -131.0f, 83.0f, 286.0f);
func_8029EC88(&sp34, &sp20, &sp28, 0x23);
load_giant_egg(&sp34, -2353.0f, 72.0f, -1608.0f);
func_8029EC88(&sp34, &sp20, &sp28, 0x23);
load_giant_egg(&sp34, -2622.0f, 79.0f, 739.0f);
func_8029EC88(&sp34, &sp20, &sp28, 0x23);
func_802AF8BC(0x7000C50, 0x64, 0xFF, 0xFF, 0xFF);
func_802AF8BC(0x7000BD8, 0x64, 0xFF, 0xFF, 0xFF);
func_802AF8BC(0x7000B60, 0x64, 0xFF, 0xFF, 0xFF);
func_802AF8BC(0x7000AE8, 0x64, 0xFF, 0xFF, 0xFF);
func_802AF8BC(0x7000CC8, 0x64, 0xFF, 0xFF, 0xFF);
func_802AF8BC(0x7000D50, 0x64, 0xFF, 0xFF, 0xFF);
func_802AF8BC(0x7000DD0, 0x64, 0xFF, 0xFF, 0xFF);
func_802AF8BC(0x7000E48, 0x64, 0xFF, 0xFF, 0xFF);
break;
case COURSE_DK_JUNGLE:
func_802AF8BC(0x7003FA8, 0x78, 0xFF, 0xFF, 0xFF);
break;
default:
break;
}
D_8015F900 = D_80150110;
}
+178
View File
@@ -0,0 +1,178 @@
#include <ultra64.h>
#include <macros.h>
#include "common_structs.h"
extern OSIoMesg D_8014F0A0;
extern OSMesgQueue D_8014EF58;
extern OSMesg D_8014F098;
extern u8 _kart_texturesSegmentRomStart[];
extern u32 gKartPalettes[];
// arrays?
extern u32 *D_802F1F80;
extern u32 *D_802DFB80;
extern s16 D_800DDEB0[];
extern s32 D_800DC52C;
// Structured like a 3D pointer array
extern u32 ***gKartTextureTable0, ***gKartTextureTable1, **gKartTextureGroup18s;
// some larger diffs that need resolving
#ifdef MIPS_TO_C
void func_80027040(Player *player, s8 arg1, s8 arg2, s8 arg3, s32 arg4) {
s32 temp_v0 = player->unk_0BC;
void *temp_s0;
// void *temp_v1;
if ((temp_v0 & 0x80) == 0x80 ||
(temp_v0 & 0x40) == 0x40 ||
(temp_v0 & 0x80000) == 0x80000 ||
(temp_v0 & 0x800000) == 0x800000 ||
(temp_v0 & 0x20000) == 0x20000 ||
(player->unk_044 & 0x800) != 0
) {
// temp_v1 = player + (arg2 * 2);
if (player->unk_244[arg2] == 0) {
temp_s0 = (arg4 * 0x9200) + (arg3 * 0x4900) + (arg1 * 0x920) + D_802DFB80;
osInvalDCache(temp_s0, D_800DDEB0[player->unk_254]);
osPiStartDma(&D_8014F0A0, 0, 0, &_kart_texturesSegmentRomStart[gKartTextureTable0[player->unk_254][player->unk_24C[arg2]][player->unk_244[arg2]] & 0xFFFFFF], temp_s0, D_800DDEB0[temp_v0], &D_8014EF58);
osRecvMesg(&D_8014EF58, &D_8014F098, 1);
} else {
temp_s0 = (arg4 * 0x9200) + (arg3 * 0x4900) + (arg1 * 0x920) + D_802DFB80;
osInvalDCache(temp_s0, D_800DDEB0[player->unk_254]);
osPiStartDma(&D_8014F0A0, 0, 0, &_kart_texturesSegmentRomStart[gKartTextureTable1[player->unk_254][player->unk_24C[arg2]][player->unk_244[arg2]] & 0xFFFFFF], temp_s0, D_800DDEB0[temp_v0], &D_8014EF58);
osRecvMesg(&D_8014EF58, &D_8014F098, 1);
}
}
else if ((temp_v0 & 0x400) == 0x400 ||
(temp_v0 & 0x1000000) == 0x1000000 ||
(temp_v0 & 0x2000000) == 0x2000000 ||
(temp_v0 & 0x10000) == 0x10000
) {
temp_s0 = (arg4 * 0x9200) + (arg3 * 0x4900) + (arg1 * 0x920) + D_802DFB80;
osInvalDCache(temp_s0, 0x780);
osPiStartDma(&D_8014F0A0, 0, 0, &_kart_texturesSegmentRomStart[gKartTextureGroup18s[player->unk_254][player->unk_0A8 >> 8] & 0xFFFFFF], temp_s0, 0x900, &D_8014EF58);
osRecvMesg(&D_8014EF58, &D_8014F098, 1);
} else {
temp_s0 = (arg4 * 0x9200) + (arg3 * 0x4900) + (arg1 * 0x920) + D_802DFB80;
osInvalDCache(temp_s0, D_800DDEB0[player->unk_254]);
osPiStartDma(&D_8014F0A0, 0, 0, &_kart_texturesSegmentRomStart[gKartTextureTable0[player->unk_254][player->unk_24C[arg2]][player->unk_244[arg2]] & 0xFFFFFF], temp_s0, D_800DDEB0[temp_v0], &D_8014EF58);
osRecvMesg(&D_8014EF58, &D_8014F098, 1);
}
}
#else
GLOBAL_ASM("asm/non_matchings/code_80027040/func_80027040.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit 3ec45aadfc2cb619035fb802d88c52eacfab0326
void func_80027560(Player *arg0, s8 arg1, s8 arg2, s8 arg3, s8 arg4) {
void *sp30;
s32 temp_v0;
s8 temp_a3;
u16 temp_v0;
u16 temp_v0;
u16 temp_v0;
void *temp_s0;
void *temp_s0_2;
void *temp_s0_3;
void *temp_s0_4;
void *temp_v1;
void *temp_v1_2;
temp_v0 = arg0->unkBC;
temp_a3 = arg3;
if ((temp_v0 & 0x80) == 0x80) {
block_6:
temp_v1_2 = arg0 + (arg2 * 2);
if (temp_v1_2->unk244 == 0) {
temp_s0_4 = (arg4 * 0x9200) + (temp_a3 * 0x4900) + (arg1 * 0x920) + 0x802DFB80;
sp30 = temp_v1_2;
osInvalDCache(temp_s0_4, *(&D_800DDEB0 + (arg0->unk254 * 2)));
temp_v0 = arg0->unk254;
osPiStartDma(&D_8014F0A0, 0, 0, (*(*(*(&gKartTextureTable0 + (temp_v0 * 4)) + (temp_v1_2->unk24C * 4)) + (temp_v1_2->unk244 * 4)) & 0xFFFFFF) + &_kart_texturesSegmentRomStart, temp_s0_4, *(&D_800DDEB0 + (temp_v0 * 2)), &D_8014EF58);
return;
}
temp_s0_3 = (arg4 * 0x9200) + (temp_a3 * 0x4900) + (arg1 * 0x920) + D_802DFB80;
sp30 = temp_v1_2;
osInvalDCache(temp_s0_3, *(&D_800DDEB0 + (arg0->unk254 * 2)));
temp_v0 = arg0->unk254;
osPiStartDma(&D_8014F0A0, 0, 0, (*(*(*(&gKartTextureTable1 + (temp_v0 * 4)) + (temp_v1_2->unk24C * 4)) + (temp_v1_2->unk244 * 4)) & 0xFFFFFF) + &_kart_texturesSegmentRomStart, temp_s0_3, *(&D_800DDEB0 + (temp_v0 * 2)), &D_8014EF58);
return;
}
if ((temp_v0 & 0x40) == 0x40) {
goto block_6;
}
if ((temp_v0 & 0x80000) == 0x80000) {
goto block_6;
}
if ((temp_v0 & 0x800000) == 0x800000) {
goto block_6;
}
if ((temp_v0 & 0x20000) == 0x20000) {
goto block_6;
}
if ((arg0->unk44 & 0x800) != 0) {
goto block_6;
}
if ((temp_v0 & 0x400) == 0x400) {
block_13:
temp_s0_2 = (arg4 * 0x9200) + (temp_a3 * 0x4900) + (arg1 * 0x920) + D_802DFB80;
osInvalDCache(temp_s0_2, 0x780);
osPiStartDma(&D_8014F0A0, 0, 0, (*(*(&gKartTextureGroup18s + (arg0->unk254 * 4)) + ((arg0->unkA8 >> 8) * 4)) & 0xFFFFFF) + &_kart_texturesSegmentRomStart, temp_s0_2, 0x900, &D_8014EF58);
return;
}
if ((temp_v0 & 0x1000000) == 0x1000000) {
goto block_13;
}
if ((temp_v0 & 0x2000000) == 0x2000000) {
goto block_13;
}
if ((temp_v0 & 0x10000) == 0x10000) {
goto block_13;
}
temp_s0 = (arg4 * 0x9200) + (temp_a3 * 0x4900) + (arg1 * 0x920) + D_802DFB80;
osInvalDCache(temp_s0, *(&D_800DDEB0 + (arg0->unk254 * 2)));
temp_v0 = arg0->unk254;
temp_v1 = arg0 + (arg2 * 2);
osPiStartDma(&D_8014F0A0, 0, 0, (*(*(*(&gKartTextureTable0 + (temp_v0 * 4)) + (temp_v1->unk24C * 4)) + (temp_v1->unk244 * 4)) & 0xFFFFFF) + &_kart_texturesSegmentRomStart, temp_s0, *(&D_800DDEB0 + (temp_v0 * 2)), &D_8014EF58);
}
#else
GLOBAL_ASM("asm/non_matchings/code_80027040/func_80027560.s")
#endif
// regalloc
#ifdef NON_MATCHING
void func_80027A20(Player *player, s8 arg1, s8 arg2, s8 arg3) {
void *temp_s0 = (arg3 << 0xE) + (arg2 << 0xC) + (arg1 << 9) + (s32)&D_802F1F80;
switch(D_800DC52C) {
case 0: case 1: case 2:
osInvalDCache(temp_s0, 0x200);
osPiStartDma(&D_8014F0A0, 0, 0, &_kart_texturesSegmentRomStart[gKartPalettes[player->unk_254] & 0x00FFFFFF], temp_s0, 0x200, &D_8014EF58);
osRecvMesg(&D_8014EF58, &D_8014F098, 1);
break;
case 3:
osInvalDCache(temp_s0, 0x200);
osPiStartDma(&D_8014F0A0, 0, 0, &_kart_texturesSegmentRomStart[gKartPalettes[player->unk_254] & 0x00FFFFFF], temp_s0, 0x200, &D_8014EF58);
osRecvMesg(&D_8014EF58, &D_8014F098, 1);
break;
default: break;
}
}
#else
GLOBAL_ASM("asm/non_matchings/code_80027040/func_80027A20.s")
#endif
void func_80027BDC(s32 arg0, s32 arg1, void *vAddr, u16 size) {
osInvalDCache(vAddr, size);
osPiStartDma(&D_8014F0A0, 0, 0, &_kart_texturesSegmentRomStart[arg1 & 0x00FFFFFF], vAddr, size, &D_8014EF58);
osRecvMesg(&D_8014EF58, &D_8014F098, 1);
}
void func_80027C74(s32 arg0, s32 arg1, void *vAddr, u16 size) {
osInvalDCache(vAddr, size);
osPiStartDma(&D_8014F0A0, 0, 0, &_kart_texturesSegmentRomStart[arg1 & 0x00FFFFFF], vAddr, size, &D_8014EF58);
}
+1242
View File
File diff suppressed because it is too large Load Diff
+165
View File
@@ -0,0 +1,165 @@
#include <ultra64.h>
#include <macros.h>
#include <PR/gu.h>
#include "main.h"
#include "types.h"
#include "code_80281780.h"
extern Gfx *gDisplayListHead;
extern f32 D_801646F0, D_801646F4, D_801646F8, D_801646FC,
D_80164700, D_80164704, D_80164708, D_8016470C, D_80164710;
extern f32 D_80150130, D_80150148, D_8015014C, D_80150150;
extern s16 D_800DC644;
extern u16 D_80150112;
extern u16 D_80164AF0;
extern u32 D_8018D120;
extern s32 gPrevLoadedAddress;
extern u16 D_800DC5C0, D_800DC5C4;
extern s32 D_802874A0;
extern u16 func_802B7830(f32, f32);
extern u16 D_80164714, D_80164716, D_80164718;
extern u16 D_800DC5E4;
extern u32 D_800DC524;
extern u32 D_800DC50C;
extern u32 D_802874FC;
extern u16 D_800DC518;
void func_80280000(void) {
func_802966A0();
func_80059AC8();
func_80059AC8();
func_8005A070();
}
void func_80280038(void) {
u16 sp44[38];
D_80150112 = 0;
D_80164AF0 = 0;
D_8018D120 = 0;
func_802A3E3C();
func_802A53A4();
func_802A3E3C();
func_80057FC4(0);
gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH);
guPerspective(&gGfxPool->buffer[8], &sp44[37], D_80150130, D_80150148, D_80150150, D_8015014C, 1.0f);
gDPHalf1(gDisplayListHead++, sp44[37]);
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->buffer[8]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
guLookAt(&gGfxPool->buffer[56], D_801646F0, D_801646F4, D_801646F8, D_801646FC, D_80164700, D_80164704, D_80164708, D_8016470C, D_80164710);
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->buffer[56]), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION);
gCurrentCourseId = D_800DC644;
func_802B53C8(&sp44);
func_802B4FF8(&sp44, 0);
func_80295A38(D_800DC5EC);
func_802A3008(D_800DC5EC);
func_80058090(0);
func_80058538(0);
func_80284CC0();
func_80281C40();
func_802A3E3C();
func_80093F10();
func_802A3E3C();
}
void func_80280268(s32 arg0) {
D_800DC5C0 = 1;
D_800DC5C4 = 5;
D_802874A0 = 1;
if ((arg0 < 0) || ((arg0 >= 0x14))) {
arg0 = 0;
}
D_800DC644 = arg0;
}
void func_802802AC(void) {
f32 sp20;
f32 temp_f12;
f32 temp;
f32 temp_f14;
D_802874A0 = 0;
if (D_800DC5C0 != 0) {
D_800DC5C4--;
if (D_800DC5C4 == 0) {
D_800DC5C0 = 0;
D_800DC524 = 9;
D_800DC50C = 0xFF;
}
} else {
D_802874FC = 0;
func_80283648(&D_801646F0);
temp_f12 = D_801646FC - D_801646F0;
temp = D_80164700 - D_801646F4;
temp_f14 = D_80164704 - D_801646F8;
D_80164716 = func_802B7830(temp_f12, temp_f14);
D_80164714 = func_802B7830(sqrtf((temp_f12 * temp_f12) + (temp_f14 * temp_f14)), temp);
D_80164718 = 0;
if (D_802874A0 != 0) {
D_800DC5E4++;
} else {
func_80280000();
func_80280038();
gDPFullSync(gDisplayListHead++);
gSPEndDisplayList(gDisplayListHead++);
}
}
}
void func_80280420(void) {
s32 temp_t1;
gCurrentCourseId = D_800DC644;
D_800DC5B4 = 1;
D_800DC518 = 1;
func_802A4D18();
func_802A74BC();
D_801647A4 = 60.0f;
D_80150130 = 60.0f;
D_800DC5EC->unk2C = 0x140;
D_800DC5EC->unk2E = 0xF0;
D_800DC5EC->unk30 = 0xA0;
D_800DC5EC->unk32 = 0x78;
D_800DC530 = 0;
D_800DC52C = 0;
gPrevLoadedAddress = D_8015F734;
load_course(gCurrentCourseId);
D_8015F730 = gPrevLoadedAddress;
set_segment_base_addr(0xB, func_802AA88C(&_data_821D10SegmentRomStart, &_data_825800SegmentRomStart));
D_8015F6EA = -0x15A1;
D_8015F6EE = -0x15A1;
D_8015F6F2 = -0x15A1;
D_8015F6E8 = 0x15A1;
D_8015F6EC = 0x15A1;
D_8015F6F0 = 0x15A1;
D_8015F59C = 0;
D_8015F5A0 = 0;
D_8015F58C = 0;
D_8015F588 = 0;
D_800DC5BC = 0;
D_800DC5C8 = 0;
D_8015F580 = gPrevLoadedAddress;
D_801646F0 = 1400.0f;
D_801646F4 = 300.0f;
D_801646F8 = 1400.0f;
D_801646FC = 0.0f;
D_80164700 = 0.0f;
D_80164704 = 0.0f;
D_80164708 = 0.0f;
D_8016470C = 1.0f;
D_80164710 = 0.0f;
func_80283430();
func_80003040();
func_8006E9C0();
func_80093E60();
func_80092688();
if (D_800DC5EC) {}
D_801625F8 = ((s32)gHeapEndPtr - gPrevLoadedAddress);
D_801625FC = ((f32)D_801625F8 / 1000.0f);
}
+51
View File
@@ -0,0 +1,51 @@
#include <ultra64.h>
#include <macros.h>
// guLookAt params
extern f32 D_801646F0, D_801646F4, D_801646F8, D_801646FC,
D_80164700, D_80164704, D_80164708, D_8016470C, D_80164710;
extern u16 D_80164714, D_80164716;
extern u16 D_80164718;
extern u16 func_802B7830(f32, f32);
void func_80281610(void) {
f32 sp1C;
f32 temp_f12;
f32 temp;
f32 temp_f14;
func_80283648(&D_801646F0);
temp_f12 = D_801646FC - D_801646F0;
temp = D_80164700 - D_801646F4;
temp_f14 = D_80164704 - D_801646F8;
D_80164716 = func_802B7830(temp_f12, temp_f14);
D_80164714 = func_802B7830(sqrtf((temp_f12 * temp_f12) + (temp_f14 * temp_f14)), temp);
D_80164718 = 0;
}
// guPerspective params
extern f32 D_80150130, D_80150148, D_8015014C, D_80150150;
// rodata that has not been found
extern const f32 D_80286B90, D_80286B94, D_80286B98, D_80286B9C, D_80286BA0;
// Two functions have evidence that this weird thing here is 8 floats,
// but over here they need to be array-indexed to match
void func_802816B8(void) {
(((f32 *)(&D_801646F0))[0]) = D_80286B90;
(((f32 *)(&D_801646F0))[1]) = 19.0f;
(((f32 *)(&D_801646F0))[2]) = D_80286B94;
(((f32 *)(&D_801646F0))[3]) = D_80286B98;
(((f32 *)(&D_801646F0))[4]) = 21.0f;
(((f32 *)(&D_801646F0))[5]) = -528.0f;
(((f32 *)(&D_801646F0))[6]) = 0.0f;
(((f32 *)(&D_801646F0))[7]) = 1.0f;
(((f32 *)(&D_801646F0))[8]) = 0.0f;
D_80150130 = 40.0f;
D_80150148 = D_80286B9C;
D_80150150 = 3.0f;
D_8015014C = D_80286BA0;
func_80283430();
}
+54 -151
View File
@@ -1,173 +1,77 @@
#include <ultra64.h>
#include <macros.h>
#include "types.h"
#include "variables.h"
extern void func_802A4D18();
extern void func_802A74BC();
extern void load_course();
extern void set_segment_base_addr();
extern int func_802AA88C();
extern void func_802AF5AC();
extern void func_80295C6C();
extern void func_80281780();
extern void func_802818BC();
extern void func_8003D080();
extern void func_8006E9C0();
extern void func_8001C05C();
extern void func_80280FB0();
extern void func_802816B8();
extern void func_80093E60();
extern void *gHeapEndPtr;
extern s16 gCurrentCourseId;
extern u16 D_800DC5B4;
extern s32 D_800DC604;
extern s32 D_800DC530;
extern s32 D_800DC52C;
extern s32 gModeSelection;
extern u16 D_800DC5BC;
extern u16 D_800DC5C8;
extern struct UnkStruct_800DC5EC *D_800DC5EC;
extern s32 D_80287550;
extern s32 D_80287554;
extern f32 D_801647A4;
extern f32 D_80150130;
extern s32 D_8015F728;
extern s32 D_8015F734;
extern s32 D_8015F730;
extern f32 D_8015F8E4;
extern s16 D_8015F6EA;
extern s16 D_8015F6EE;
extern s16 D_8015F6F2;
extern u16 D_8015F6E8;
extern u16 D_8015F6EC;
extern u16 D_8015F6F0;
extern s32 D_8015F59C;
extern s32 D_8015F5A0;
extern s32 D_8015F58C;
extern u16 D_8015F588;
extern s32 D_8015F580;
extern s32 D_00821D10;
extern s32 D_00825800;
extern s32 D_00831DC0;
extern s32 D_00835BA0;
extern s32 D_801625F8;
extern f32 D_801625FC;
#include "code_80281780.h"
extern s32 gPrevLoadedAddress;
// unk4 is buttonDown?
#ifdef MIPS_TO_C
//generated by mips_to_c commit 09d006c9da5d6bbcd31ac6ca5c9165c1a8533a83
void func_80281780(void) {
if (gEnableDebugMode != 0) {
if ((D_800DC4BC->unk4 & 0xF0F) != 0) {
if ((D_800DC4BC->unk4 & 8) != 0) {
D_800E86A8 = (u8)1;
if (D_800DC4BC->unk4 & 0x0F0F) {
if (D_800DC4BC->unk4 & 8) {
D_800E86A8[0] = 1;
}
else if (D_800DC4BC->unk4 & 2) {
D_800E86A8[0] = 2;
}
else if (D_800DC4BC->unk4 & 1) {
D_800E86A8[0] = 3;
}
else if (D_800DC4BC->unk4 & 4) {
D_800E86A8[0] = 4;
}
else if (D_800DC4BC->unk4 & 0x800) {
D_800E86A8[0] = 5;
}
else if (D_800DC4BC->unk4 & 0x200) {
D_800E86A8[0] = 6;
}
else if (D_800DC4BC->unk4 & 0x100) {
D_800E86A8[0] = 7;
} else {
if ((D_800DC4BC->unk4 & 2) != 0) {
D_800E86A8 = (u8)2;
} else {
if ((D_800DC4BC->unk4 & 1) != 0) {
D_800E86A8 = (u8)3;
} else {
if ((D_800DC4BC->unk4 & 4) != 0) {
D_800E86A8 = (u8)4;
} else {
if ((D_800DC4BC->unk4 & 0x800) != 0) {
D_800E86A8 = (u8)5;
} else {
if ((D_800DC4BC->unk4 & 0x200) != 0) {
D_800E86A8 = (u8)6;
} else {
if ((D_800DC4BC->unk4 & 0x100) != 0) {
D_800E86A8 = (u8)7;
} else {
*(void *)0x800F0000 = (u8)0;
}
}
}
}
}
}
D_800E86A8[0] = 0;
}
bcopy(&D_80284ED0, &D_8018D9D0, 8);
}
}
}
#else
GLOBAL_ASM("asm/non_matchings/code_80281780/func_80281780.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit 09d006c9da5d6bbcd31ac6ca5c9165c1a8533a83
s32 func_80281880(s32 arg0) {
s32 temp_v1;
void *phi_v0;
s32 phi_v1;
s32 phi_v1_2;
phi_v0 = &D_8018D9D0;
phi_v1 = 0;
loop_1:
phi_v1_2 = phi_v1;
if (*phi_v0 != (arg0 + 0x800F0000)->unk-7958) {
temp_v1 = phi_v1 + 1;
phi_v0 = phi_v0 + 1;
phi_v1 = temp_v1;
phi_v1_2 = temp_v1;
if (temp_v1 != 8) {
goto loop_1;
}
s32 i;
for (i = 0; i < 8; i++) {
if (D_8018D9D0[i] == D_800E86A8[arg0]) break;
}
return phi_v1_2;
return i;
}
#else
GLOBAL_ASM("asm/non_matchings/code_80281780/func_80281880.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit 09d006c9da5d6bbcd31ac6ca5c9165c1a8533a83
void func_802818BC(void) {
s32 sp24;
s32 temp_v0;
UNUSED s32 pad;
s32 sp1C;
s32 temp_ret;
s32 temp_ret_2;
s32 temp_v0_2;
if (D_8018EDF3 != 2) {
D_802874D8.unk1D = func_80281880(0);
D_802874D8.unk1E = (s8) D_800E86A8;
D_802874D8.unk_1D = func_80281880(0);
D_802874D8.unk_1E = D_800E86A8[0];
return;
}
temp_ret = func_80281880(0);
sp1C = temp_ret;
sp24 = temp_ret;
temp_ret_2 = func_80281880(1);
if (sp1C < temp_ret_2) {
D_802874D8.unk1E = (s8) D_800E86A8;
D_802874D8.unk1D = (s8) sp24;
return;
// weird pattern but if it matches it matches
temp_v0 = sp1C = func_80281880(0);
temp_v0_2 = func_80281880(1);
if (sp1C < temp_v0_2) {
D_802874D8.unk_1E = D_800E86A8[0];
D_802874D8.unk_1D = temp_v0;
} else {
D_802874D8.unk_1E = D_800E86A8[1];
D_802874D8.unk_1D = temp_v0_2;
}
D_802874D8.unk1E = (s8) D_800E86A9;
D_802874F5 = (s8) temp_ret_2;
}
#else
GLOBAL_ASM("asm/non_matchings/code_80281780/func_802818BC.s")
#endif
#ifdef NON_MATCHING
void *load_ending_sequence_royalraceway(void) {
s32 temp_t3;
f32 temp_f;
gCurrentCourseId = 7;
void load_ending_sequence_royalraceway(void) {
gCurrentCourseId = COURSE_ROYAL_RACEWAY;
D_800DC5B4 = (u16)1;
D_800DC604 = 0;
D_80287550 = 0xFFFF;
@@ -181,27 +85,30 @@ void *load_ending_sequence_royalraceway(void) {
D_800DC5EC->unk30 = (u16)0xA0;
D_800DC5EC->unk32 = (u16)0x78;
D_800DC530 = 0;
D_8015F728 = (s32) D_8015F734;
gPrevLoadedAddress = (s32) D_8015F734;
D_800DC52C = 0;
gModeSelection = 0;
load_course(gCurrentCourseId);
D_8015F730 = (s32) D_8015F728;
set_segment_base_addr(0xB, func_802AA88C(&D_00821D10, &D_00825800));
set_segment_base_addr(6, func_802AA88C(&D_00831DC0, &D_00835BA0));
D_8015F730 = (s32) gPrevLoadedAddress;
set_segment_base_addr(0xB, func_802AA88C(&_data_821D10SegmentRomStart, &_data_825800SegmentRomStart));
set_segment_base_addr(6, func_802AA88C(&_course_banshee_boardwalk_dl_mio0SegmentRomStart, &_course_yoshi_valley_dl_mio0SegmentRomStart));
D_8015F8E4 = -2000.0f;
D_8015F6EA = -0x15A1;
D_8015F6EE = -0x15A1;
D_8015F6F2 = -0x15A1;
D_8015F6E8 = 0x15A1;
D_8015F6EC = 0x15A1;
D_8015F6F0 = 0x15A1;
D_8015F59C = 0;
D_8015F5A0 = 0;
D_8015F58C = 0;
D_8015F588 = (u16)0;
D_800DC5BC = (u16)0;
D_800DC5C8 = (u16)0;
D_8015F580 = (s32) D_8015F728;
D_8015F580 = (s32) gPrevLoadedAddress;
func_802AF5AC(0x70067E8, -1);
func_802AF5AC(0x700AEF8, -1);
func_802AF5AC(0x700A970, 8);
@@ -221,10 +128,6 @@ void *load_ending_sequence_royalraceway(void) {
func_80280FB0();
func_802816B8();
func_80093E60();
D_801625F8 = (s32) gHeapEndPtr - D_8015F728;
D_801625F8 = (s32) gHeapEndPtr - gPrevLoadedAddress;
D_801625FC = ((f32) D_801625F8 / 1000.0f);
return &D_801625F8;
}
#else
GLOBAL_ASM("asm/non_matchings/code_80281780/load_ending_sequence_royalraceway.s")
#endif
+78
View File
@@ -0,0 +1,78 @@
#ifndef CODE_80281780_H
#define CODE_80281780_H
// variables found in code_80281780.c; not necessarily ones that belong there
extern void func_802A4D18();
extern void func_802A74BC();
extern void load_course();
extern u32 set_segment_base_addr();
extern int func_802AA88C();
extern void func_802AF5AC();
extern void func_80295C6C();
extern void func_80281780();
extern void func_802818BC();
extern void func_8003D080();
extern void func_8006E9C0();
extern void func_8001C05C();
extern void func_80280FB0();
extern void func_802816B8();
extern void func_80093E60();
extern void *gHeapEndPtr;
extern s16 gCurrentCourseId;
extern u16 D_800DC5B4;
extern s32 D_800DC604;
extern s32 D_800DC530;
extern s32 D_800DC52C;
extern s32 gModeSelection;
extern u16 D_800DC5BC;
extern u16 D_800DC5C8;
extern struct UnkStruct_800DC5EC *D_800DC5EC;
extern s32 D_80287550;
extern s32 D_80287554;
extern f32 D_801647A4;
extern f32 D_80150130;
extern s32 D_8015F728;
extern s32 D_8015F734;
extern s32 D_8015F730;
extern f32 D_8015F8E4;
extern s16 D_8015F6EA;
extern s16 D_8015F6EE;
extern s16 D_8015F6F2;
extern u16 D_8015F6E8;
extern u16 D_8015F6EC;
extern u16 D_8015F6F0;
extern s32 D_8015F59C;
extern s32 D_8015F5A0;
extern s32 D_8015F58C;
extern u16 D_8015F588;
extern s32 D_8015F580;
extern s32 D_00821D10;
extern s32 D_00825800;
extern s32 D_00831DC0;
extern s32 D_00835BA0;
extern s32 D_801625F8;
extern f32 D_801625FC;
extern struct Controller *D_800DC4BC;
extern s8 D_800E86A8[];
extern u16 gEnableDebugMode;
extern void *D_80284ED0;
extern s8 D_8018D9D0[];
extern s8 D_8018EDF3;
extern s32 _data_821D10SegmentRomStart;
extern s32 _data_825800SegmentRomStart;
extern s32 _course_banshee_boardwalk_dl_mio0SegmentRomStart;
extern s32 _course_yoshi_valley_dl_mio0SegmentRomStart;
#endif
+84
View File
@@ -0,0 +1,84 @@
#include <ultra64.h>
#include <PR/gu.h>
#include <macros.h>
#include "main.h"
extern Gfx *gDisplayListHead;
struct UnkStruct80287560 {
s16 unk0;
s16 unk2;
s32 unk4;
s32 unk8;
}; // 0xC
extern struct UnkStruct80287560 D_80287560[];
extern s32 D_802874FC;
extern u32 D_80287550;
extern s32 D_80287554;
extern u16 D_800DC5C0;
extern u32 D_800DC524;
extern Gfx D_00284F70[];
extern Gfx D_00284EE0[];
extern f32 D_801646F0, D_801646F4, D_801646F8, D_801646FC,
D_80164700, D_80164704, D_80164708, D_8016470C, D_80164710;
extern f32 D_80150130, D_80150148, D_8015014C, D_80150150;
void func_80281C40(void) {
s32 i;
for (i = 0; i < D_802874FC; i++) {
func_800579F8(D_80287560[i].unk0, D_80287560[i].unk2, D_80287560[i].unk8, D_80287560[i].unk4);
}
}
void func_80281CB4(s32 arg0, s32 arg1, s32 arg2, s32 arg3) {
if (D_802874FC < 0x1E) {
D_80287560[D_802874FC].unk0 = arg0;
D_80287560[D_802874FC].unk2 = arg1;
D_80287560[D_802874FC].unk4 = arg3;
D_80287560[D_802874FC].unk8 = arg2;
D_802874FC++;
}
}
void func_80281D00(void) {
// could be a struct,
// but for now we have the oddest way to match this function
u16 sp64[48];
func_802A53A4();
func_802A3E3C();
if (D_80287550 != 0xFFFF) {
func_80000D3C(0);
if (D_80287554 >= 4) {
D_800DC5C0 = 0;
D_800DC524 = D_80287550;
}
D_80287554++;
return;
}
func_8028150C();
gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH);
guPerspective((Mtx*) &gGfxPool->buffer[8], &sp64[39], D_80150130, D_80150148, D_80150150, D_8015014C, 1.0f);
gDPHalf1(gDisplayListHead++, sp64[39]);
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->buffer[8]), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
guLookAt((Mtx*) &gGfxPool->buffer[56], D_801646F0, D_801646F4, D_801646F8, D_801646FC, D_80164700, D_80164704, D_80164708, D_8016470C, D_80164710);
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->buffer[56]), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION);
func_802B53C8(&sp64[6]);
func_802B4FF8(&sp64[6], 0);
gSPDisplayList(gDisplayListHead++, &D_00284F70);
func_800212B4();
gSPDisplayList(gDisplayListHead++, &D_00284EE0);
// sp38 = &D_00284EE0;
func_80281438();
func_80058090(0);
func_80021B0C();
gSPDisplayList(gDisplayListHead++, &D_00284EE0);
func_80093F10();
func_80284CC0();
func_80281C40();
func_802A3E3C();
}
+388
View File
@@ -0,0 +1,388 @@
#include <ultra64.h>
#include <macros.h>
#include <types.h>
/*
struct D_800F2F90 D_800F2F90[] = {
L800C0124, L800C0078, L800C0140, L800C0150,
L800C0094, L800C035C, L800C03B4, L800C03EC,
L800C03EC, L800C0438, L800C0448, L800C03EC,
L800BFE40, L800BFE40, L800BFE40, L800C0468,
L800C048C, L800C049C, L800C01E8, L800C034C,
L800BFE40, L800BFE40, L800C02B4, L800C0298,
L800C0288, L800C026C, L800C0254, L800C0238,
L800C021C, L800C01B4, L800C0160, L800C0184,
L800C0304, L800C02D0, L800C0338, L800C04BC,
L800C04AC, L800C0518, L800C0528, L800C0590,
L800C0630, L800BFEC4, L800C00D0, L800C0608,
L800BFE40, L800BFE40, L800C0640, L800C0068,
L800C0040, L800BFFF8, L800BFFF8, L800BFFF8,
L800BFFA0, L800BFF90, L800BFF48, L800BFF10,
L800BFFA0, L800BFFA0, L800BFFA0, L800BFED4,
L800BFEB4, L800C0880, L800BFE7C
};
struct D_800F308C D_800F308C[] = {
L800C0684, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800C07E4, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800C0814, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800C0830, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800C0858, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800C06EC, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800C0708, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800C06BC, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800C06CC, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800C0714, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800C0760, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800BFE40, L800BFE40, L800BFE40, L800BFE40,
L800C077C
};
struct D_800F3350 D_800F3350[] = {
L800C0FF4, L800C0FE4, L800C0AE8, L800C0AE8,
L800C0FD4, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0FC4, L800C0F98, L800C0F98, L800C0F88,
L800C0F78, L800C0F4C, L800C0F30, L800C0F14,
L800C0AE8, L800C0EE8, L800C0DD4, L800C0E50,
L800C0D50, L800C0D50, L800C0D30, L800C0D2C,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0D1C, L800C0CF4, L800C0CAC, L800C0CAC,
L800C0CAC, L800C0C54, L800C0AE8, L800C0C0C,
L800C0BD4, L800C0C54, L800C0C54, L800C0C54,
L800C0B90, L800C0AE8, L800C0AE8, L800C0AE8,
};
struct D_800F3430 D_800F3430[] = {
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C1084, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C1090, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C1098, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C10A0, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8, L800C0AE8, L800C0AE8, L800C0AE8,
L800C0AE8,
0x00000000, 0x00000000, 0x00000000
};
float D_800F35C0 = 3.333333333;
struct D_800F35C4 D_800F35C4[] = {
L800C1A34, L800C1A34, L800C1A34, L800C1A34,
L800C1AEC, L800C1A34
};
float D_800F35DC = 0.1;
float D_800F35E0 = 100000.0;
float D_800F35E4 = 100000.0;
float D_800F35E8 = 0.85;
struct D_800F35EC D_800F35EC[] = {
L800C2A80, L800C2AB8, L800C2AD8, L800C2CDC,
L800C2E40, L800C2F04, L800C3008, L800C3118,
L800C3154, L800C31E4, L800C3218, L800C32B8,
L800C32EC, L800C3430, L800C3390, L800C33E0
};
struct D_800F362C D_800F362C[] = {
L800C3DEC, L800C3E10, L800C3E30, L800C3E70,
L800C3E98, L800C3EBC, L800C3F04
};
float D_800F3648 = 100000.0;
struct D_800F364C D_800F364C[] = {
L800C423C, L800C4268, L800C42A4, L800C42C8,
L800C42FC, L800C4330
};
float D_800F3664 = 100000.0;
float D_800F3668 = 100000.0;
float D_800F366C = 4000000.0;
float D_800F3670 = 10000000000.0;
float D_800F3674 = 0.6;
float D_800F3678 = 0.4;
float D_800F367C = 0.005000;
float D_800F3680 = 0.01;
float D_800F3684 = 12000.0;
float D_800F3688 = 0.03;
float D_800F368C = 0.03;
float D_800F3690 = 0.4;
struct D_800F3694 D_800F3694[] = {
L800C6544, L800C6618, L800C64E4, L800C65B8
L800C65B8, L800C65B8, L800C65B8, L800C65B8
L800C65B8, L800C65B8, L800C65B8, L800C65B8
L800C6544, L800C6544, L800C6618, L800C6618
L800C6544, L800C6618, L800C6618, L800C6618
L800C6618, L800C65B8, L800C65B8, L800C65B8
L800C6618, L800C6618, L800C6618, L800C6618
L800C65B8, L800C65B8, L800C65B8
};
float D_800F3710 = 0.2;
float D_800F3714 = 3500.0;
float D_800F3718 = 3000.0;
float D_800F371C = 0.4;
float D_800F3720 = 0.2;
float D_800F3724 = 0.06;
float D_800F3728 = 0.56;
float D_800F372C = 0.9;
float D_800F3730 = 0.6;
float D_800F3734 = 13000.0;
float D_800F3738 = 0.95;
struct D_800F373C D_800F373C[] = {
L800C69C8, L800C6A0C, L800C6910, L800C6C74,
L800C6CB8, L800C6CFC, L800C6D40, L800C6D84,
L800C6DC8, L800C6E0C, L800C6E50, L800C6E94,
L800C6FA4, L800C6E0C, L800C6A98, L800C6ADC,
L800C6A50, L800C6958, L800C6990, L800C6B20,
L800C7070, L800C6FA4, L800C6FE8, L800C702C,
L800C6B64, L800C6BA8, L800C6BEC, L800C6C30,
L800C6ED8, L800C6F1C, L800C6F60
};
float D_800F37B8 = 3500.0;
struct D_800F37BC
L800C718C, L800C7198, L800C71B0, L800C71BC,
L800C71A4, L800C71F4, L800C71F4, L800C71C8,
L800C71F4, L800C71F4, L800C71F4, L800C71F4,
L800C71EC, L800C71F4, L800C71D4, L800C71E0,
};
struct D_800F37FC D_800F37FC[] = {
L800C7238, L800C7244, L800C725C, L800C7268,
L800C7250, L800C7294, L800C7294, L800C7274,
L800C7294, L800C7294, L800C7294, L800C7294,
L800C7290, L800C7294, L800C7280, L800C7288,
};
struct D_800F383C D_800F383C[] = {
L800C72F8, L800C72B8, L800C742C, L800C73B8,
L800C7378, L800C742C, L800C7338, L800C7428,
L800C742C, L800C7418, L800C7420,
};
struct D_800F3868 D_800F3868[] = {
L800C7494, L800C7454, L800C75C8, L800C7554,
L800C7514, L800C75C8, L800C74D4, L800C75C4,
L800C75C8, L800C75B4, L800C75BC,
};
float D_800F3894 = 0.7;
float D_800F3898 = 0.1;
float D_800F389C = 0.03;
float D_800F38A0 = 0.16;
float D_800F38A4 = 0.15;
float D_800F38A8 = 0.03;
float D_800F38AC = 0.012000;
float D_800F38B0 = 0.85;
float D_800F38B4 = 0.85;
float D_800F38B8 = {
L800C9560, L800C9560, L800C95BC, L800C9618,
L800C9674, L800C96D0, L800C95BC, L800C96D0,
};
float D_800F38D8 = 0.35;
float D_800F38DC = 2.800000;
float D_800F38E0 = 3844.0;
float D_800F38E4 = -0.8;
float D_800F38E8 = 1568.979614;
float D_800F38EC = 1067.777832;
float D_800F38F0 = 2766.064941;
float D_800F38F4 = 0.6;
float D_800F38F8 = 3.200000;
float D_800F38FC = 3844.0;
float D_800F3900 = -1.700000;
float D_800F3904 = 1478.461548;
float D_800F3908 = 784.489807;
float D_800F390C = 12813.334961;
float D_800F3910 = 0.6;
float D_800F3914 = 2.800000;
float D_800F3918 = 3844.0;
float D_800F391C = -0.6;
float D_800F3920 = 1747.272827;
float D_800F3924 = 1130.588257;
float D_800F3928 = 3844.000977;
float D_800F392C = 0.2;
float D_800F3930 = 3844.0;
float D_800F3934 = -0.4;
float D_800F3938 = 2135.555664;
float D_800F393C = 1601.666626;
float D_800F3940 = 3203.333008;
float D_800F3944 = 0.4;
float D_800F3948 = 2.400000;
float D_800F394C = 3844.0;
float D_800F3950 = -0.8;
float D_800F3954 = 1922.0;
float D_800F3958 = 1201.250000;
float D_800F395C = 4805.0;
struct D_800F3960 = {
L800C9B3C, L800C9B3C, L800C9B68, L800C9B94,
L800C9BC0, L800C9BEC, L800C9B68, L800C9BEC,
};
float D_800F3980 = 0.35;
float D_800F3984 = 1568.979614;
float D_800F3988 = 0.6;
float D_800F398C = 1478.461548;
float D_800F3990 = 0.6;
float D_800F3994 = 1747.272827;
float D_800F3998 = 0.2;
float D_800F399C = 2135.555664;
float D_800F39A0 = 0.4;
float D_800F39A4 = 1922.0;
float D_800F39A8 = 0.55;
float D_800F39AC = 0.45;
float D_800F39B0 = 0.7;
float D_800F39B4 = 0.1;
struct D_800F39C0 D_800F39C0[] = {
L800CBE60, L800CBE78, L800CBE90, L800CBEA8,
L800CBEC0, L800CBECC, L800CBF08, L800CBEEC,
};
float D_800F39E0 = 0.017453292;
double D_800F39F0 = {
0.017453292222222222
0x00000000, 0x00000000
};
s8 D_800F3A00[] = {
0x00, 0x14, 0x18, 0x18, 0x1c, 0x1c, 0x1c, 0x1c,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x00, 0x04, 0x08, 0x08, 0x0c, 0x0c, 0x0c, 0x0c,
0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
};
struct D_800F3A20 D_800F3A20[] = {
L800D1668, L800D1630, L800D1610, L800D1474,
L800D1420, L800D15B4, L800D13E8, L800D13F4,
L800D1400,
0x00000000, 0x00000000, 0x00000000
};
struct D_800F3A50 D_800F3A50[] = {
L800D3480, L800D3374, L800D33B4, L800D34A0,
L800D34A0, L800D33F0, L800D3438, 0x00000000
};
double D_800F3A70[] = {
1.0,
-0.16666659550427756,
0.0083330662460821547,
-0.00019809602901937949,
2.6057806379680372e-06
};
double D_800F3A98 = 0.31830988618379069;
double D_800F3AA0 = 3.1415926218032837;
double D_800F3AA8 = 3.1786509547056392e-08;
float D_800F3AB0[] = {
0.0, 0x00000000, 0x00000000, 0x00000000
};
double D_800F3AC0[] = {
1.0,
-0.16666659550427756,
0.0083330662460821547,
-0.00019809602901937949,
2.6057806379680372e-06,
};
double D_800F3AE8 = 0.31830988618379069;
double D_800F3AF0 = 3.1415926218032837;
double D_800F3AF8 = 3.1786509547056392e-08;
float D_800F3B00[] = {
0.0, 0x00000000, 0x00000000, 0x00000000
};
char D_800F3B10[] = "hlL";
char D_800F3B14[] = " +-#0";
s32 D_800F3B1C[] = {
0x00000001, 0x00000002, 0x00000004, 0x00000008,
0x00000010, 0x00000000
};
u16 gCupTrackOrder[] = { // ISSUE CHECK WRONG PREVIEW TEXTURES
0x0008, 0x0009, 0x0006, 0x000b, // mushroom cup: LR, MMF, KTB, KD
0x000a, 0x0005, 0x0001, 0x0000, // flower cup: TT, FS, CM, MR
0x000e, 0x000c, 0x0007, 0x0002, // star cup: WS, SL, RRy, BC
0x0012, 0x0004, 0x0003, 0x000d, // special cup: DKJP, YV, BB, RRd
0x0013, 0x000f, 0x0011, 0x0010, // battle mode: BD, BF, DD, Sky
0x0100,
0x0000,
0x0001, 0x0304
};
s32 D_800F3B1C[] = {
0x00000001, 0x00000002, 0x00000004, 0x00000008, 0x00000010, 0x00000000,
};
*/
u16 D_800F3C10[] = {
0x0555, 0x0556, 0x0559, 0x055a, 0x0565, 0x0566, 0x0569, 0x056a,
0x0595, 0x0596, 0x0599, 0x059a, 0x05a5, 0x05a6, 0x05a9, 0x05aa,
0x0655, 0x0656, 0x0659, 0x065a, 0x0665, 0x0666, 0x0669, 0x066a,
0x0695, 0x0696, 0x0699, 0x069a, 0x06a5, 0x06a6, 0x06a9, 0x06aa,
0x0955, 0x0956, 0x0959, 0x095a, 0x0965, 0x0966, 0x0969, 0x096a,
0x0995, 0x0996, 0x0999, 0x099a, 0x09a5, 0x09a6, 0x09a9, 0x09aa,
0x0a55, 0x0a56, 0x0a59, 0x0a5a, 0x0a65, 0x0a66, 0x0a69, 0x0a6a,
0x0a95, 0x0a96, 0x0a99, 0x0a9a, 0x0aa5, 0x0aa6, 0x0aa9, 0x0aaa,
};
int D_800F3C90[] = {0x7f810000, 0x00000000, 0x00000000, 0x00000000 }; // NaN?
double D_800F3CA0[] = {
10.0, 100.0, 10000.0, 100000000.0, 10000000000000000.0,
1.0e+32, 1.0e+64, 1.0e+128, 1.0e+256
};
char D_800F3CE8[] = "NaN";
char D_800F3CEC[] = "Inf";
char D_800F3CF0[] = "0";
float D_800F3CF4 = 0x00000000; // .word
double D_800F3CF8 = 100000000.0;
+22
View File
@@ -0,0 +1,22 @@
#include <ultra64.h>
#include <macros.h>
#include "types.h"
#include "PR/gu.h"
extern s16 D_800E43A8;
extern Mtx D_0D008E98;
extern Gfx* gDisplayListHead;
extern Mtx* gGfxPool;
// rsp init
void gfx_func_80040D00(void) {
D_800E43A8 = 0;
gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE);
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
guFrustum((Mtx *) gGfxPool, 0.0f, 320.0f, 0.0f, 240.0f, -1.0f, 1.0f, 1.0f);
gDPHalf1(gDisplayListHead++, 0x0000FFFF);
gSPMatrix(gDisplayListHead++, (u32) gGfxPool & 0x1FFFFFFF, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
gSPMatrix(gDisplayListHead++, (u32) &D_0D008E98 & 0x1FFFFFFF, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
}
+452
View File
@@ -0,0 +1,452 @@
#include <ultra64.h>
#include <macros.h>
#include "types.h"
#include "kart_attributes.h"
// Mario Luigi Yoshi Toad D.K. Wario Peach Bowser
float D_800E2360[] = {
-10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0,
};
float D_800E2380[] = {
-15.0, -15.0, -15.0, -15.0, -15.0, -15.0, -15.0, -15.0,
};
float D_800E23A0[] = {
-20.0, -20.0, -20.0, -20.0, -20.0, -20.0, -20.0, -20.0,
};
float D_800E23C0[] = {
-15.0, -15.0, -15.0, -15.0, -15.0, -15.0, -15.0, -15.0,
};
float D_800E23E0[] = {
-30.0, -30.0, -30.0, -30.0, -30.0, -30.0, -30.0, -30.0,
};
struct D_800E2400 D_800E2400 = {
D_800E2360,
};
struct D_800E2404 D_800E2404 = {
D_800E2380, D_800E23A0, D_800E23C0,
};
struct D_800E2410 D_800E2410 = {
D_800E23E0,
};
// Mario Luigi Yoshi Toad D.K. Wario Peach Bowser
float D_800E2414[] = {
28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0,
};
float D_800E2434[] = {
28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0,
};
float D_800E2454[] = {
35.0, 35.0, 35.0, 35.0, 35.0, 35.0, 35.0, 35.0,
};
float D_800E2474[] = {
28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0,
};
float D_800E2494[] = {
48.0, 48.0, 48.0, 48.0, 48.0, 48.0, 48.0, 48.0,
};
struct D_800E24B4 D_800E24B4 = {
D_800E2414,
};
struct D_800E24B8 D_800E24B8 = {
D_800E2434, D_800E2454, D_800E2474,
};
struct D_800E24C4 D_800E24C4 = {
D_800E2494,
};
// Mario Luigi Yoshi Toad D.K. Wario Peach Bowser
float D_800E24C8[] = {
3364.0, 3364.0, 3457.0, 3457.0, 3364.0, 3364.0, 3457.0, 3364.0,
};
float D_800E24E8[] = {
3844.0, 3844.0, 3943.0, 3943.0, 3844.0, 3844.0, 3943.0, 3844.0,
};
float D_800E2508[] = {
4096.0, 4096.0, 4199.0, 4199.0, 4096.0, 4096.0, 4199.0, 4096.0,
};
float D_800E2528[] = {
3844.0, 3844.0, 3943.0, 3943.0, 3844.0, 3844.0, 3943.0, 3844.0,
};
float D_800E2548[] = {
2401.0, 2401.0, 2401.0, 2401.0, 2401.0, 2401.0, 2401.0, 2401.0,
};
struct D_800E2568 D_800E2568 = {
D_800E24C8,
};
struct D_800E256C D_800E256C = {
D_800E24E8, D_800E2508, D_800E2528,
};
struct D_800E2578 D_800E2578 = {
D_800E2548,
};
// Mario Luigi Yoshi Toad D.K. Wario Peach Bowser
float D_800E257C[] = { // 50CC
290.0, 290.0, 294.0, 294.0, 290.0, 290.0, 294.0, 290.0,
};
float D_800E259C[] = { // 100CC
310.0, 310.0, 314.0, 314.0, 310.0, 310.0, 314.0, 310.0,
};
float D_800E25BC[] = { // 150CC
320.0, 320.0, 324.0, 324.0, 320.0, 320.0, 324.0, 320.0,
};
float D_800E25DC[] = { // Extra
310.0, 310.0, 314.0, 314.0, 310.0, 310.0, 314.0, 310.0,
};
float D_800E25FC[] = { // Battle mode
245.0, 245.0, 245.0, 245.0, 245.0, 245.0, 245.0, 245.0,
};
struct D_800E261C D_800E261C = {
D_800E257C,
};
struct D_800E2620 D_800E2620 = {
D_800E259C, D_800E25BC, D_800E25DC,
};
struct D_800E262C D_800E262C = {
D_800E25FC,
};
// Mario Luigi Yoshi Toad D.K. Wario Peach Bowser
float gKartFrictionTable[] = {
5800.0, 5800.0, 5800.0, 5800.0, 5800.0, 5800.0, 5800.0, 5800.0,
};
float gKartGravityTable[] = {
2600.0, 2600.0, 2600.0, 2600.0, 2600.0, 2600.0, 2600.0, 2600.0,
};
float D_800E2670[] = {
0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12,
};
float gKartTopSpeedTable[] = {
9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0,
};
float gKartBoundingBoxTable[] = {
5.5, 5.5, 5.5, 5.5, 5.5, 6.0, 5.5, 6.0,
};
// Mario
float D_800E26D0[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.38, 0.38, 0.0, 0.38, 0.1, 0.0, 0.38, 0.0,
};
// Luigi
float D_800E270C[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.38, 0.38, 0.0, 0.38, 0.1, 0.0, 0.38, 0.0,
};
// Yoshi
float D_800E2748[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.38, 0.38, 0.0, 0.38, 0.1, 0.0, 0.38, 0.0,
};
// Toad
float D_800E2784[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.38, 0.38, 0.0, 0.38, 0.1, 0.0, 0.38, 0.0,
};
// Donkey Kong
float D_800E27C0[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.38, 0.38, 0.0, 0.38, 0.1, 0.0, 0.38, 0.0,
};
// Wario
float D_800E27FC[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.38, 0.38, 0.0, 0.38, 0.1, 0.0, 0.38, 0.0,
};
// Peach
float D_800E2838[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.38, 0.38, 0.0, 0.38, 0.1, 0.0, 0.38, 0.0,
};
// Bowser
float D_800E2874[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.38, 0.38, 0.0, 0.38, 0.1, 0.0, 0.38, 0.0,
};
// Mario
float D_800E28B0[] = {
0.0, 0.0, 0.3, 0.3, 0.0, 0.3, 0.0, 0.58, 0.58, 0.0, 0.58, 0.28, 0.0, 0.58, 0.0,
};
// Luigi
float D_800E28EC[] = {
0.0, 0.0, 0.3, 0.3, 0.0, 0.3, 0.0, 0.58, 0.58, 0.0, 0.58, 0.28, 0.0, 0.58, 0.0,
};
// Yoshi
float D_800E2928[] = {
0.0, 0.0, 0.3, 0.3, 0.0, 0.3, 0.0, 0.58, 0.58, 0.0, 0.58, 0.28, 0.0, 0.58, 0.0,
};
// Toad
float D_800E2964[] = {
0.0, 0.0, 0.3, 0.3, 0.0, 0.3, 0.0, 0.58, 0.58, 0.0, 0.58, 0.28, 0.0, 0.58, 0.0,
};
// Donkey Kong
float D_800E29A0[] = {
0.0, 0.0, 0.3, 0.3, 0.0, 0.3, 0.0, 0.58, 0.58, 0.0, 0.58, 0.28, 0.0, 0.58, 0.0,
};
// Wario
float D_800E29DC[] = {
0.0, 0.0, 0.3, 0.3, 0.0, 0.3, 0.0, 0.58, 0.58, 0.0, 0.58, 0.28, 0.0, 0.58, 0.0,
};
// Peach
float D_800E2A18[] = {
0.0, 0.0, 0.3, 0.3, 0.0, 0.3, 0.0, 0.58, 0.58, 0.0, 0.58, 0.28, 0.0, 0.58, 0.0,
};
// Bowser
float D_800E2A54[] = {
0.0, 0.0, 0.3, 0.3, 0.0, 0.3, 0.0, 0.58, 0.58, 0.0, 0.58, 0.28, 0.0, 0.58, 0.0,
};
struct D_800E2A90 D_800E2A90 = {
D_800E28B0, D_800E28EC, D_800E2928, D_800E2964,
D_800E29A0, D_800E29DC, D_800E2A18, D_800E2A54,
};
struct D_800E2AB0 D_800E2AB0 = {
D_800E26D0, D_800E270C, D_800E2748, D_800E2784,
D_800E27C0, D_800E27FC, D_800E2838, D_800E2874,
};
// Mario
float D_800E2AD0[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.03, 0.03, 0.0, 0.0, 0.03, 0.0, 0.03, 0.03,
};
// Luigi
float D_800E2B0C[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.03, 0.03, 0.0, 0.0, 0.03, 0.0, 0.03, 0.03,
};
// Yoshi
float D_800E2B48[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.02, 0.02, 0.0, 0.0, 0.02, 0.0, 0.02, 0.02,
};
// Toad
float D_800E2B84[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.02, 0.02, 0.0, 0.0, 0.02, 0.0, 0.02, 0.02,
};
// Donkey Kong
float D_800E2BC0[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.04, 0.04, 0.0, 0.0, 0.04, 0.0, 0.04, 0.04,
};
// Wario
float D_800E2BFC[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.04, 0.04, 0.0, 0.0, 0.04, 0.0, 0.04, 0.04,
};
// Peach
float D_800E2C38[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.02, 0.02, 0.0, 0.0, 0.02, 0.0, 0.02, 0.02,
};
// Bowser
float D_800E2C74[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.04, 0.04, 0.0, 0.0, 0.04, 0.0, 0.04, 0.04,
};
// Mario
float D_800E2CB0[] = {
0.0, 0.0, 0.0, 0.03, 0.0, 0.0, 0.0, 0.09, 0.09, 0.0, 0.0, 0.09, 0.0, 0.09, 0.09,
};
// Luigi
float D_800E2CEC[] = {
0.0, 0.0, 0.0, 0.03, 0.0, 0.0, 0.0, 0.09, 0.09, 0.0, 0.0, 0.09, 0.0, 0.09, 0.09,
};
// Yoshi
float D_800E2D28[] = {
0.0, 0.0, 0.0, 0.02, 0.0, 0.0, 0.0, 0.08, 0.08, 0.0, 0.0, 0.08, 0.0, 0.08, 0.08,
};
// Toad
float D_800E2D64[] = {
0.0, 0.0, 0.0, 0.02, 0.0, 0.0, 0.0, 0.08, 0.08, 0.0, 0.0, 0.08, 0.0, 0.08, 0.08,
};
// Donkey Kong
float D_800E2DA0[] = {
0.0, 0.0, 0.0, 0.04, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, 0.0, 0.1, 0.0, 0.1, 0.1,
};
// Wario
float D_800E2DDC[] = {
0.0, 0.0, 0.0, 0.04, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, 0.0, 0.1, 0.0, 0.1, 0.1,
};
// Peach
float D_800E2E18[] = {
0.0, 0.0, 0.0, 0.02, 0.0, 0.0, 0.0, 0.08, 0.08, 0.0, 0.0, 0.08, 0.0, 0.08, 0.08,
};
// Bowser
float D_800E2E54[] = {
0.0, 0.0, 0.0, 0.04, 0.0, 0.0, 0.0, 0.1, 0.1, 0.0, 0.0, 0.1, 0.0, 0.1, 0.1,
};
struct D_800E2E90 D_800E2E90 = {
D_800E2CB0, D_800E2CEC, D_800E2D28, D_800E2D64,
D_800E2DA0, D_800E2DDC, D_800E2E18, D_800E2E54,
};
struct D_800E2EB0 D_800E2EB0 = {
D_800E2AD0, D_800E2B0C, D_800E2B48, D_800E2B84,
D_800E2BC0, D_800E2BFC, D_800E2C38, D_800E2C74,
};
// accel1 accel2 accel3 accel4 accel5 accel6 accel7 accel8 accel9 accel10
float gKartAccelerationMario[] = {
2.0, 2.0, 2.0, 1.6, 1.4, 1.2, 1.0, 0.8, 0.6, 0.4,
};
float gKartAccelerationLuigi[] = {
2.0, 2.0, 2.0, 1.6, 1.4, 1.2, 1.0, 0.8, 0.6, 0.4,
};
float gKartAccelerationYoshi[] = {
2.0, 2.0, 2.5, 2.6, 2.6, 2.0, 1.5, 0.8, 0.8, 0.8,
};
float gKartAccelerationToad[] = {
2.0, 2.0, 2.5, 2.6, 2.6, 2.0, 1.5, 0.8, 0.8, 0.8,
};
float gKartAccelerationDK[] = {
2.0, 2.0, 2.0, 1.6, 1.0, 1.0, 1.0, 1.8, 1.8, 1.2,
};
float gKartAccelerationWario[] = {
2.0, 2.0, 2.0, 1.6, 1.0, 1.0, 1.0, 1.8, 1.8, 1.2,
};
float gKartAccelerationPeach[] = {
2.0, 2.0, 2.5, 2.6, 2.6, 2.0, 1.5, 0.8, 0.8, 0.8,
};
float gKartAccelerationBowser[] = {
2.0, 2.0, 2.0, 1.6, 1.0, 1.0, 1.0, 1.8, 1.8, 1.2,
};
struct gKartAccelerationTables gKartAccelerationTables = {
gKartAccelerationMario, gKartAccelerationLuigi, gKartAccelerationYoshi, gKartAccelerationToad,
gKartAccelerationDK, gKartAccelerationWario, gKartAccelerationPeach, gKartAccelerationBowser,
};
// Mario
float D_800E3030[] = {
0.0, 0.0, 0.2, 0.2, 0.0, 0.4, 0.1, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Luigi
float D_800E306C[] = {
0.0, 0.0, 0.2, 0.2, 0.0, 0.4, 0.1, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Yoshi
float D_800E30A8[] = {
0.0, 0.0, 0.2, 0.2, 0.0, 0.4, 0.1, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Toad
float D_800E30E4[] = {
0.0, 0.0, 0.2, 0.2, 0.0, 0.4, 0.1, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Donkey Kong
float D_800E3120[] = {
0.0, 0.0, 0.2, 0.2, 0.0, 0.4, 0.1, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Ware
float D_800E315C[] = {
0.0, 0.0, 0.2, 0.2, 0.0, 0.4, 0.1, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Peach
float D_800E3198[] = {
0.0, 0.0, 0.2, 0.2, 0.0, 0.4, 0.1, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Bowser
float D_800E31D4[] = {
0.0, 0.0, 0.2, 0.2, 0.0, 0.4, 0.1, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
struct D_800E3210 D_800E3210 = {
D_800E3030, D_800E306C, D_800E30A8, D_800E30E4,
D_800E3120, D_800E315C, D_800E3198, D_800E31D4,
};
// Mario
float D_800E3230[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Luigi
float D_800E326C[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Yoshi
float D_800E32A8[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Toad
float D_800E32E4[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Donkey Kong
float D_800E3320[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Wario
float D_800E335C[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Peach
float D_800E3398[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Bowser
float D_800E33D4[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
struct D_800E3410 D_800E3410 = {
D_800E3230, D_800E326C, D_800E32A8, D_800E32E4,
D_800E3320, D_800E335C, D_800E3398, D_800E33D4,
};
// Mario
float D_800E3430[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Luigi
float D_800E346C[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Yoshi
float D_800E34A8[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Toad
float D_800E34E4[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Donkey Kong
float D_800E3520[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Wario
float D_800E355C[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Peach
float D_800E3598[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
// Bowser
float D_800E35D4[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
struct D_800E3610 D_800E3610 = {
D_800E3430, D_800E346C, D_800E34A8, D_800E34E4,
D_800E3520, D_800E355C, D_800E3598, D_800E35D4,
};
// Mario Luigi Yoshi Toad D.K. Wario Peach Bowser
float gKartHandlingTable[] = {
1.25, 1.25, 1.28, 1.28, 1.15, 1.15, 1.28, 1.15,
};
float gKartTable800E3650[] = {
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
};
float gKartTurnSpeedReductionTable0[] = {
0.0, 0.0, 0.002, 0.002, -0.002, -0.002, 0.002, -0.002,
};
float gKartTurnSpeedReductionTable1[] = {
0.0, 0.0, 0.002, 0.002, -0.002, -0.002, 0.002, -0.002,
};
float gKartTable800E36B0[] = {
2.0, 2.0, 3.0, 3.0, 1.5, 1.5, 3.0, 3.0,
};
float gKartHopHeightTable[] = {
0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93,
};
float gKartHopFallSpeedTable[] = {
0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03,
};
float D_800E3710[] = {
2.2, 2.2, 2.2, 2.2, 2.2, 2.2, 2.2, 2.2,
};
float D_800E3730[] = {
0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002,
};
float D_800E3750[] = {
2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0,
};
float D_800E3770[] = {
0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002,
};
float D_800E3790[] = {
1.2, 1.45, 1.45, 1.45, 1.45, 1.45, 1.45, 1.45,
};
float D_800E37B0[] = {
0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01,
};
float D_800E37D0[] = {
3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5,
};
float D_800E37F0[] = {
0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002, 0.002,
};
+36 -41
View File
@@ -3,6 +3,9 @@
#include "types.h"
#include "config.h"
#include "profiler.h"
#include "main.h"
#include "segments.h"
#include "segment_symbols.h"
// Declarations (not in this file)
void func_8008C214(UNUSED int);
@@ -62,13 +65,17 @@ extern u64 gGfxSPTaskOutputBuffer[];
extern u32 gGfxSPTaskOutputBufferSize;
extern u8 gGfxSPTaskYieldBuffer[];
#define GFX_POOL_SIZE 6400
struct GfxPool {
Gfx buffer[GFX_POOL_SIZE];
struct SPTask spTask;
};
extern struct GfxPool *gGfxPool;
extern u32 gPrevLoadedAddress;
extern u32 D_8015F734;
extern u8 _data_segment2SegmentRomStart[];
extern u8 _data_segment2SegmentRomEnd[];
extern u8 _common_texturesSegmentRomStart[];
extern u8 _common_texturesSegmentRomEnd[];
extern u8 _data_802BA370SegmentRomStart[];
extern OSMesg *D_8014F098;
extern OSIoMesg *D_8014F0A0;
extern u32 gHeapEndPtr;
extern u32 *D_801978D0;
// Declarations (in this file)
void thread1_idle(void *arg0);
@@ -406,32 +413,21 @@ void *func_80000F34(void) {
GLOBAL_ASM("asm/non_matchings/main/func_80000F34.s")
#endif
// Code segment loading functions (relatively similar to SM64 in structure)
#ifdef MIPS_TO_C
// generated by mips_to_c commit cae1414eb1bf34873a831a523692fe29870a6f3b
void func_8000105C(void) {
bzero(0x80280000, 0xDF00);
bzero(SEG_80280000, 0xDF00);
osWritebackDCacheAll();
dma_copy(0x80280000, &_code_80280000SegmentRomStart, ((&_code_80280000SegmentRomEnd - &_code_80280000SegmentRomStart) + 0xF) & -0x10);
osInvalCache(0x80280000, 0xDF00);
osInvalDCache(0x80280000, 0xDF00);
dma_copy(SEG_80280000, &_code_80280000SegmentRomStart, ALIGN16((u32)&_code_80280000SegmentRomEnd - (u32)&_code_80280000SegmentRomStart));
osInvalCache(SEG_80280000, 0xDF00);
osInvalDCache(SEG_80280000, 0xDF00);
}
#else
GLOBAL_ASM("asm/non_matchings/main/func_8000105C.s")
#endif
#ifdef MIPS_TO_C
//generated by mips_to_c commit ffee479fae41a1cdc3e454e9b9d75bbd226a160f
void func_800010CC(void) {
bzero(0x8028DF00, 0x2C470);
bzero(SEG_8028DF00, 0x2C470);
osWritebackDCacheAll();
dma_copy(0x8028DF00, &_code_8028DF00SegmentRomStart, ((&_code_8028DF00SegmentRomEnd - &_code_8028DF00SegmentRomStart) + 0xF) & -0x10);
osInvalCache(0x8028DF00, 0x2C470);
osInvalDCache(0x8028DF00, 0x2C470);
dma_copy(SEG_8028DF00, &_code_8028DF00SegmentRomStart, ALIGN16((u32)&_code_8028DF00SegmentRomEnd - (u32)&_code_8028DF00SegmentRomStart));
osInvalCache(SEG_8028DF00, 0x2C470);
osInvalDCache(SEG_8028DF00, 0x2C470);
}
#else
GLOBAL_ASM("asm/non_matchings/main/func_800010CC.s")
#endif
// Similar to dma_read in SM64
#ifdef MIPS_TO_C
@@ -481,15 +477,14 @@ GLOBAL_ASM("asm/non_matchings/main/dma_copy.s")
#endif
// Resembles setup_game_memory from SM64
#ifdef MIPS_TO_C
// generated by mips_to_c commit cae1414eb1bf34873a831a523692fe29870a6f3b
#ifdef NON_MATCHING
void init_game(void) {
s32 sp40;
s32 sp38;
void *sp2C;
s32 temp_t2;
u32 *sp2C;
s32 temp_a1;
s32 temp_t7;
void *temp_t0;
s32 temp_t2;
func_800010CC();
gHeapEndPtr = 0x8028DF00;
@@ -500,17 +495,17 @@ void init_game(void) {
osPiStartDma(&D_8014F0A0, 0, 0, &_data_802BA370SegmentRomStart, 0x802BA370, 0x5810, &D_8014EF58);
osRecvMesg(&D_8014EF58, &D_8014F098, 1);
set_segment_base_addr(2, func_802A7D70(&_data_segment2SegmentRomStart, &_data_segment2SegmentRomEnd));
temp_t2 = ((&_common_texturesSegmentRomEnd - &_common_texturesSegmentRomStart) + 0xF) & -0x10;
temp_t0 = 0x8028DF00 - temp_t2;
sp2C = temp_t0;
osPiStartDma(&D_8014F0A0, 0, 0, &_common_texturesSegmentRomStart, temp_t0, temp_t2, &D_8014EF58);
temp_t2 = ALIGN16((u32)&_common_texturesSegmentRomEnd - (u32)&_common_texturesSegmentRomStart);
sp2C = 0x8028DF00 - temp_t2;
osPiStartDma(&D_8014F0A0, 0, 0, &_common_texturesSegmentRomStart, 0x8028DF00 - temp_t2, temp_t2, &D_8014EF58);
osRecvMesg(&D_8014EF58, &D_8014F098, 1);
sp38 = D_8015F728;
sp40 = (sp2C->unk4 + 0xF) & -0x10;
mio0decode(sp2C, D_8015F728);
set_segment_base_addr(0xD, D_8015F728);
temp_t7 = D_8015F728 + sp40;
D_8015F728 = temp_t7;
temp_a1 = gPrevLoadedAddress;
sp38 = temp_a1;
sp40 = ALIGN16(sp2C[1]);
mio0decode(sp2C, temp_a1);
set_segment_base_addr(0xD, temp_a1);
temp_t7 = sp40 + gPrevLoadedAddress;
gPrevLoadedAddress = temp_t7;
D_8015F734 = temp_t7;
}
#else
+14
View File
@@ -0,0 +1,14 @@
#ifndef MAIN_H
#define MAIN_H
#include "types.h"
#define GFX_POOL_SIZE 6400
struct GfxPool {
Gfx buffer[GFX_POOL_SIZE];
struct SPTask spTask;
};
extern struct GfxPool *gGfxPool;
#endif
+86
View File
@@ -0,0 +1,86 @@
#include <ultra64.h>
#include <PR/ultratypes.h>
#include <macros.h>
#include "types.h"
#include "memory.h"
// Includes from SM64
//#include "buffers/buffers.h"
//#include "decompress.h"
//#include "game_init.h"
//#include "main.h"
//#include "segment_symbols.h"
//#include "segments.h"
extern uintptr_t gSegmentTable[32];
u32 sPoolFreeSpace;
u8 *sPoolStart;
u8 *sPoolEnd;
struct MainPoolBlock *sPoolListHeadL;
struct MainPoolBlock *sPoolListHeadR;
extern s32 gPrevLoadedAddress;
extern s32 gPrevMainThreadTask;
extern s32 gDisplayListHead;
extern u32 D_8015F724;
u32 D_802BA278;
struct MainPoolBlock {
struct MainPoolBlock *prev;
struct MainPoolBlock *next;
};
#define ALIGN16(val) (((val) + 0xF) & ~0xF)
#define ALIGN32(val) (((val) + 0xF) & ~0xF)
s32 func_802A7B70(s32 segment) {
s32 old;
old = gPrevLoadedAddress;
segment = ALIGN16(segment);
gPrevLoadedAddress += segment;
return old;
}
uintptr_t set_segment_base_addr(s32 segment, void *addr) {
gSegmentTable[segment] = (uintptr_t) addr & 0x1FFFFFFF;
return gSegmentTable[segment];
}
void *get_segment_base_addr(s32 segment) {
return (void *) (gSegmentTable[segment] | 0x80000000);
}
s32 lookup_item(u32 segment) {
return (gSegmentTable[segment >> 0x18] + (segment & 0xFFFFFF)) | 0x80000000;
}
/*
void move_segment_table_to_dmem(void) {
s32 i;
for (i = 0; i < 16; i++) {
gSPSegment(gDisplayListHead++, i, gSegmentTable[i]);
}
}
void func_802A7CF0(u32 start, u32 end) {
sPoolStart = (u8 *) ALIGN32((uintptr_t) start);
sPoolEnd = (u8 *) ALIGN32((uintptr_t) end);
D_8015F724 = (u32) end - start;
gPrevLoadedAddress = (u32) start;
}
s32 func_802A7D1C(s32 arg0) {
s32 temp_t6;
s32 temp_v0;
temp_v0 = gPrevLoadedAddress;
temp_t6 = (arg0 + 0xF) & -0x10;
D_8015F724 = (s32) (D_8015F724 - temp_t6);
gPrevLoadedAddress = (s32) (temp_v0 + temp_t6);
return temp_v0;
}
*/
GLOBAL_ASM("asm/non_matchings/memory.s")
+17
View File
@@ -0,0 +1,17 @@
#ifndef MEMORY_H
#define MEMORY_H
#define MEMORY_POOL_LEFT 0
#define MEMORY_POOL_RIGHT 1
extern struct MemoryPool *gEffectsMemoryPool;
s32 func_802A7B70(s32 segment);
uintptr_t set_segment_base_addr(s32 segment, void *addr);
void *get_segment_base_addr(s32 segment);
s32 lookup_item(u32 segment);
#endif // MEMORY_H
+1 -1
View File
@@ -123,7 +123,7 @@ void func_80003AFC(void) {
Draw Profiler Mode 0. This mode renders bars over each other to make it
easier to see which processes take the longest.
Two lines were added to this function in Mario Kart 64
This function differs from the one in SM64 by two lines
Information: