Document most of camdraw.c

This commit is contained in:
Ryan Dwyer 2024-09-05 17:48:21 +10:00
parent 7408435d92
commit 6f5a361610
18 changed files with 1462 additions and 1525 deletions

View File

@ -192,7 +192,7 @@ struct model *body_instantiate_model_to_addr(s32 bodynum, s32 headnum, struct mo
if (node != NULL) {
if (headnum < 0) {
headmodeldef = func0f18e57c(-1 - headnum, &headnum);
headmodeldef = mp_get_phead_modeldef(-1 - headnum, &headnum);
bodymodeldef->rwdatalen += headmodeldef->rwdatalen;
} else if (headnum > 0) {
if (headmodeldef == NULL) {
@ -402,7 +402,7 @@ void body_instantiate_chr(s32 stagenum, struct packedchr *packed, s32 cmdindex)
index = -1 - headnum;
if (index >= 0 && index < 22) {
headmodeldef = func0f18e57c(index, &headnum);
headmodeldef = mp_get_phead_modeldef(index, &headnum);
}
model = body_instantiate_model_to_addr(bodynum, headnum, NULL, headmodeldef, false, NULL, false, false);

File diff suppressed because it is too large Load Diff

View File

@ -398,7 +398,7 @@ char *cheat_get_name_if_unlocked(struct menuitem *item)
MenuDialogHandlerResult cheat_menu_handle_dialog(s32 operation, struct menudialogdef *dialogdef, union handlerdata *data)
{
if (operation == MENUOP_OPEN) {
func0f14a52c();
camdraw_start_gbpaks();
if (gbpak_is_any_perfect_dark()) {
gamefile_set_flag(GAMEFILEFLAG_USED_TRANSFERPAK);
@ -434,7 +434,7 @@ MenuDialogHandlerResult cheat_menu_handle_dialog(s32 operation, struct menudialo
gamefile_set_flag(GAMEFILEFLAG_USED_TRANSFERPAK);
}
func0f14a560();
camdraw_stop_gbpaks();
}
return 0;

View File

@ -371,7 +371,7 @@ struct textureconfig *phead_get_texture(s32 playernum, s32 fileid, u16 deviceser
g_Menus[playernum].fm.headtextures->lastupdated240 = g_Vars.thisframestart240;
func0f15015c(device, fileid, g_Menus[playernum].fm.headtextures->unk000[freeslot]);
camdraw_get_filemgr_preview(device, fileid, g_Menus[playernum].fm.headtextures->unk000[freeslot]);
g_Menus[playernum].fm.headtextures->fileguids[freeslot].fileid = fileid;
g_Menus[playernum].fm.headtextures->fileguids[freeslot].deviceserial = deviceserial;

View File

@ -460,7 +460,7 @@ void lv_reset(s32 stagenum)
}
if (IS8MB()) {
phead_reset();
camdraw_reset();
}
modelmgr_set_lv_resetting(false);

View File

@ -1782,7 +1782,7 @@ Gfx *menu_render_model(Gfx *gdl, struct menumodel *menumodel, s32 modeltype)
if (mpheadnum < mp_get_num_heads2()) {
headnum = mp_get_head_id(mpheadnum);
} else {
headnum = func0f14a9f8(mpheadnum - mp_get_num_heads2());
headnum = phead_get_unk3a4(mpheadnum - mp_get_num_heads2());
headnum = mp_get_beau_head_id(headnum);
menumodel->perfectheadnum = (mpheadnum - mp_get_num_heads2()) & 0xff;
}

View File

@ -2522,10 +2522,10 @@ Gfx *menuitem_carousel_render(Gfx *gdl, struct menurendercontext *context)
gdl = menugfx_draw_carousel_chevron(gdl, context->x + context->width, context->y + context->height / 2, 8, 3, -1, colour);
// This part of the function is unused because param2 is always zero.
// Setting it to 0x7b causes a crash.
// 0x7c and 0x7d don't do anything with the option value, so it's probable
// Setting it to 123 causes a crash.
// 124 and 125 don't do anything with the option value, so it's probable
// that the original source has a commented function call in that block.
if (context->item->param2 == 0x7b && context->item->handler) {
if (context->item->param2 == 123 && context->item->handler) {
union handlerdata data;
s32 headorbodynum = 0;
@ -2535,7 +2535,7 @@ Gfx *menuitem_carousel_render(Gfx *gdl, struct menurendercontext *context)
gdl = func0f14f07c(gdl, headorbodynum,
context->x + context->width / 2 - 32, context->y,
context->x + context->width / 2 + 32, context->y + 64);
} else if ((context->item->param2 == 0x7c || context->item->param2 == 0x7d) && context->item->handler) {
} else if ((context->item->param2 == 124 || context->item->param2 == 125) && context->item->handler) {
union handlerdata data;
context->item->handler(MENUOP_GETSELECTEDINDEX, context->item, &data);
}

View File

@ -42,7 +42,7 @@ struct mpsetup g_MpSetup;
struct bossfile g_BossFile;
u32 var800acc1c;
struct mplockinfo g_MpLockInfo;
struct modeldef *var800acc28[18];
struct modeldef *g_PheadModeldefs[18];
// Forward declaractions
struct mpweaponset g_MpWeaponSets[12];
@ -1630,7 +1630,7 @@ struct mphead g_MpHeads[] = {
{ /*0x00*/ HEAD_DARK_COMBAT, 0 },
{ /*0x01*/ HEAD_DARK_FROCK, MPFEATURE_CHR_CI },
{ /*0x02*/ HEAD_DARKAQUA, MPFEATURE_CHR_PELAGIC },
{ /*0x03*/ HEAD_DARK_SNOW, MPFEATURE_CHR_DARKSNOW },
{ /*0x03*/ HEAD_DARK_SNOW, MPFEATURE_CHR_DARKSNOW },
{ /*0x04*/ HEAD_ELVIS, MPFEATURE_CHR_ELVIS },
{ /*0x05*/ HEAD_ELVIS_GOGS, MPFEATURE_CHR_ELVIS },
{ /*0x06*/ HEAD_CARRINGTON, 0 },
@ -3386,7 +3386,7 @@ void mpplayerfile_save_wad(s32 playernum, struct savebuffer *buffer)
if (g_PlayerConfigsArray[playernum].base.mpheadnum >= mp_get_num_heads2()) {
struct fileguid guid;
ph_get_guid(g_PlayerConfigsArray[playernum].base.mpheadnum - mp_get_num_heads2(), &guid);
phead_get_guid(g_PlayerConfigsArray[playernum].base.mpheadnum - mp_get_num_heads2(), &guid);
savebuffer_write_guid(buffer, &guid);
} else {
struct fileguid guid;
@ -3654,7 +3654,6 @@ const char var7f1b8c9c[] = "SaveMultiGameFile : PakId=0x%x, FileId=0x%x\n";
const char var7f1b8ccc[] = "SaveGame Result: %d New GUID: %x\n";
const char var7f1b8cf0[] = "LoadMultiGameFile : PakId=0x%x, FileId=0x%x\n";
const char var7f1b8d20[] = "LoadGame Result: %d\n";
const char var7f1b8d38[] = "GBCHead: Call to create head for slot %d (gbcheadobjs[slotno]=%x)\n";
#endif // >= VERSION_NTSC_1_0
void mp_apply_config(struct mpconfigfull *config)
@ -3930,16 +3929,20 @@ s32 mpsetupfile_load(s32 device, s32 fileid, u16 deviceserial)
return -1;
}
void func0f18e558(void)
void mp_reset_phead_modeldefs(void)
{
s32 i;
for (i = 0; i < ARRAYCOUNT(var800acc28); i++) {
var800acc28[i] = NULL;
for (i = 0; i < ARRAYCOUNT(g_PheadModeldefs); i++) {
g_PheadModeldefs[i] = NULL;
}
}
struct modeldef *func0f18e57c(s32 index, s32 *headnum)
struct modeldef *mp_get_phead_modeldef(s32 index, s32 *headnum)
{
return var800acc28[index];
#if VERSION >= VERSION_NTSC_1_0
osSyncPrintf("GBCHead: Call to create head for slot %d (gbcheadobjs[slotno]=%x)\n", index, g_PheadModeldefs[index]);
#endif
return g_PheadModeldefs[index];
}

View File

@ -1902,7 +1902,7 @@ MenuItemHandlerResult mp_character_head_menu_handler(s32 operation, struct menui
g_Menus[g_MpPlayerNum].menumodel.newparams = MENUMODELPARAMS_SET_FILENUM(g_HeadsAndBodies[headnum].filenum);
g_Menus[g_MpPlayerNum].menumodel.isperfecthead = false;
} else {
headnum = mp_get_beau_head_id(func0f14a9f8(mpheadnum - mp_get_num_heads2()));
headnum = mp_get_beau_head_id(phead_get_unk3a4(mpheadnum - mp_get_num_heads2()));
g_Menus[g_MpPlayerNum].menumodel.newparams = MENUMODELPARAMS_SET_FILENUM(g_HeadsAndBodies[headnum].filenum);
g_Menus[g_MpPlayerNum].menumodel.isperfecthead = true;

View File

@ -4959,7 +4959,7 @@ bool gbpak0f11cef8(s8 device)
if (pak->unk2b9);
pak0f11d118(sp2c, pak->unk2b9, func0f14aa70());
pak0f11d118(sp2c, pak->unk2b9, phead_get_unk3b8());
pak0f11d174(device, sp2c);
sp2c[0] |= 1;
@ -5021,10 +5021,10 @@ void pak0f11d174(s8 device, u8 *arg1)
u8 tmp1;
s32 tmp2;
pak0f11d118(arg1, g_Paks[device].unk2b9, func0f14aa70());
pak0f11d118(arg1, g_Paks[device].unk2b9, phead_get_unk3b8());
tmp1 = func0f14ad38(device);
tmp2 = func0f14ad14(device);
tmp1 = editor_get_unk060(device);
tmp2 = editor_get_unk05c(device);
arg1[1] = (arg1[1] & 0xe0) + tmp1;
arg1[2] = (tmp2 >> 8) & 0xff;
@ -5610,7 +5610,7 @@ void pak_tick_state(s8 device)
g_Paks[device].state = PAKSTATE_READY;
break;
case PAKSTATE_GB_PRE_PREPARE:
if (func0f14aea0(device)) {
if (editor_needs_gbpak(device)) {
g_Paks[device].state = PAKSTATE_GB_PREPARE;
}
break;
@ -5788,7 +5788,7 @@ void pak0f117f94nb(s8 device)
}
if (!pak->unk2b8_05) {
func0f14cf6c();
editor_stop_autocalibrate();
pak->unk008 = PAK008_12;
return;
}

View File

@ -1149,7 +1149,7 @@ void players_tick_all_chr_bodies(void)
set_current_player_num(prevplayernum);
}
void player_choose_body_and_head(s32 *bodynum, s32 *headnum, s32 *arg2)
void player_choose_body_and_head(s32 *bodynum, s32 *headnum, bool *isperfecthead)
{
s32 outfit;
bool solo;
@ -1169,8 +1169,8 @@ void player_choose_body_and_head(s32 *bodynum, s32 *headnum, s32 *arg2)
} else {
*headnum = g_PlayerConfigsArray[g_Vars.currentplayerstats->mpindex].base.mpheadnum - mp_get_num_heads2();
if (arg2) {
*arg2 = true;
if (isperfecthead) {
*isperfecthead = true;
}
}
@ -1333,13 +1333,13 @@ void player_tick_chr_body(void)
s32 weaponnum = bgun_get_weapon_num2(HAND_RIGHT);
s32 bodynum = BODY_DARK_COMBAT;
s32 headnum = HEAD_DARK_COMBAT;
bool sp60 = false;
bool isperfecthead = false;
struct model *model = NULL;
u32 *rwdatas;
u32 stack3[2];
g_Vars.currentplayer->haschrbody = true;
player_choose_body_and_head(&bodynum, &headnum, &sp60);
player_choose_body_and_head(&bodynum, &headnum, &isperfecthead);
if (g_Vars.tickmode == TICKMODE_CUTSCENE) {
weaponnum = g_DefaultWeapons[0];
@ -1445,8 +1445,8 @@ void player_tick_chr_body(void)
if (g_HeadsAndBodies[bodynum].unk00_01) {
headnum = -1;
} else if (sp60) {
headmodeldef = func0f18e57c(headnum, &headnum);
} else if (isperfecthead) {
headmodeldef = mp_get_phead_modeldef(headnum, &headnum);
} else if (g_Vars.normmplayerisrunning && IS8MB()) {
g_HeadsAndBodies[headnum].modeldef = modeldef_load_to_new(g_HeadsAndBodies[headnum].filenum);
headmodeldef = g_HeadsAndBodies[headnum].modeldef;

View File

@ -125,7 +125,7 @@ void player_reset(void)
s32 headnum;
player_reset_lo_res_if_4mb();
func0f18e558();
mp_reset_phead_modeldefs();
g_InCutscene = false;
@ -471,7 +471,8 @@ void player_reset(void)
g_Vars.aibuddies[i] = NULL;
}
player_choose_body_and_head(&bodynum, &headnum, 0);
player_choose_body_and_head(&bodynum, &headnum, NULL);
g_Vars.currentplayer->prop->chr->bodynum = bodynum;
g_Vars.currentplayer->prop->chr->headnum = headnum;
}

View File

@ -3222,7 +3222,7 @@
#define OBJTYPE_SAFE 0x2b
#define OBJTYPE_SAFEITEM 0x2c
#define OBJTYPE_TANK 0x2d
#define OBJTYPE_CAMERAPRESET 0x2e
#define OBJTYPE_CAMERAPRESET 0x2e
#define OBJTYPE_TINTEDGLASS 0x2f
#define OBJTYPE_LIFT 0x30
#define OBJTYPE_CONDITIONALSCENERY 0x31

View File

@ -4,21 +4,21 @@
#include "data.h"
#include "types.h"
void phead_init(void);
void phead_reset(void);
void func0f14a52c(void);
void func0f14a560(void);
s32 func0f14a9f8(s32 index);
s32 func0f14aa70(void);
u16 func0f14ad14(s32 device);
s32 func0f14ad38(s32 device);
bool func0f14aea0(s32 device);
void camdraw_init(void);
void camdraw_reset(void);
void camdraw_start_gbpaks(void);
void camdraw_stop_gbpaks(void);
s32 phead_get_unk3a4(s32 index);
s32 phead_get_unk3b8(void);
u16 editor_get_unk05c(s32 device);
s32 editor_get_unk060(s32 device);
bool editor_needs_gbpak(s32 device);
void func0f14aed0(s32 device);
void func0f14cf6c(void);
void editor_stop_autocalibrate(void);
Gfx *func0f14f07c(Gfx *gdl, s32 headorbodynum, s32 x1, s32 y1, s32 x2, s32 y2);
bool func0f15015c(s8 device, s32 filenum, u8 *arg2);
void ph_get_guid(s32 index, struct fileguid *guid);
void phead_init2(void);
bool camdraw_get_filemgr_preview(s8 device, s32 filenum, u8 *arg2);
void phead_get_guid(s32 index, struct fileguid *guid);
void camdraw_init_afterpaks(void);
extern const char var7f1b6050[];
extern const char var7f1b6058[];

View File

@ -90,7 +90,7 @@ void mp0f18dec4(s32 arg0);
void mpsetupfile_get_overview(char *arg0, char *filename, u16 *numsims, u16 *stagenum, u16 *scenarionum);
s32 mpsetupfile_save(s32 device, s32 filenum, u16 deviceserial);
s32 mpsetupfile_load(s32 device, s32 filenum, u16 deviceserial);
void func0f18e558(void);
struct modeldef *func0f18e57c(s32 index, s32 *headnum);
void mp_reset_phead_modeldefs(void);
struct modeldef *mp_get_phead_modeldef(s32 index, s32 *headnum);
#endif

View File

@ -10,7 +10,7 @@ void player_start_new_life(void);
void player_load_defaults(void);
void player_spawn(void);
void player_reset_bond(struct playerbond *pb, struct coord *pos);
void player_choose_body_and_head(s32 *bodynum, s32 *headnum, s32 *arg2);
void player_choose_body_and_head(s32 *bodynum, s32 *headnum, bool *isperfecthead);
void player_remove_chr_body(void);
void player_start_cutscene(s16 anim_id);
void player_reorient_for_cutscene_stop(s32 tweenduration60);

View File

@ -5653,209 +5653,6 @@ struct shotdata {
/*0x3c*/ struct hit hits[10];
};
struct var800a45a0 {
/*0x000*/ u32 unk000;
/*0x004*/ u32 unk004;
/*0x008*/ u32 unk008;
/*0x00c*/ s32 unk00c;
/*0x010*/ s32 unk010;
/*0x014*/ u32 unk014[4];
/*0x024*/ u32 unk024;
/*0x028*/ u32 unk028;
/*0x02c*/ u32 unk02c;
/*0x030*/ u32 unk030;
/*0x034*/ u32 unk034;
/*0x038*/ u32 unk038;
/*0x03c*/ u32 unk03c;
/*0x040*/ u32 unk040;
/*0x044*/ u32 unk044;
/*0x048*/ u32 unk048;
/*0x04c*/ u32 unk04c;
/*0x050*/ u32 unk050;
/*0x054*/ u32 unk054;
/*0x058*/ u32 unk058;
/*0x05c*/ u32 unk05c;
/*0x060*/ u32 unk060;
/*0x064*/ u32 unk064;
/*0x068*/ u32 unk068;
/*0x06c*/ s32 unk06c[8][8];
/*0x16c*/ u32 unk16c;
/*0x170*/ u32 unk170;
/*0x174*/ u32 unk174;
/*0x178*/ u32 unk178;
/*0x17c*/ f32 unk17c[8][8];
/*0x27c*/ f32 unk27c[8][8];
/*0x37c*/ s32 unk37c;
/*0x380*/ u8 *unk380[1];
/*0x384*/ u32 unk384;
/*0x388*/ u32 unk388;
/*0x38c*/ u32 unk38c;
/*0x390*/ u32 unk390;
/*0x394*/ u32 unk394;
/*0x398*/ u32 unk398;
/*0x39c*/ u32 unk39c;
/*0x3a0*/ u32 unk3a0;
/*0x3a4*/ u32 unk3a4;
/*0x3a8*/ u32 unk3a8;
/*0x3ac*/ u32 unk3ac;
/*0x3b0*/ u32 unk3b0;
/*0x3b4*/ u32 unk3b4;
/*0x3b8*/ u32 unk3b8;
/*0x3bc*/ u32 unk3bc;
/*0x3c0*/ u32 unk3c0;
/*0x3c4*/ u32 unk3c4;
/*0x3c8*/ u32 unk3c8;
/*0x3cc*/ u32 unk3cc;
/*0x3d0*/ u32 unk3d0;
/*0x3d4*/ u32 unk3d4;
/*0x3d8*/ u32 unk3d8;
/*0x3dc*/ u32 unk3dc;
/*0x3e0*/ u32 unk3e0;
/*0x3e4*/ u32 unk3e4;
/*0x3e8*/ u32 unk3e8;
/*0x3ec*/ u32 unk3ec;
/*0x3f0*/ u32 unk3f0;
/*0x3f4*/ u32 unk3f4;
/*0x3f8*/ u32 unk3f8[1];
/*0x3fc*/ u32 unk3fc;
/*0x400*/ u32 unk400;
/*0x404*/ u32 unk404;
/*0x408*/ u32 unk408;
/*0x40c*/ u32 unk40c;
/*0x410*/ u32 unk410;
/*0x414*/ u32 unk414;
/*0x418*/ u32 unk418;
/*0x41c*/ u32 unk41c;
/*0x420*/ u32 unk420;
/*0x424*/ u32 unk424;
/*0x428*/ u32 unk428;
/*0x42c*/ u32 unk42c;
/*0x430*/ u32 unk430;
/*0x434*/ u32 unk434;
/*0x438*/ u32 unk438;
/*0x43c*/ u32 unk43c;
/*0x440*/ u32 unk440;
/*0x444*/ u32 unk444;
/*0x448*/ u32 unk448;
/*0x44c*/ u32 unk44c;
/*0x450*/ u32 unk450;
/*0x454*/ u32 unk454;
/*0x458*/ u32 unk458;
/*0x45c*/ u32 unk45c;
/*0x460*/ u32 unk460;
/*0x464*/ u32 unk464;
/*0x468*/ u32 unk468;
/*0x46c*/ u32 unk46c;
/*0x470*/ u8 *unk470;
/*0x474*/ u8 *unk474;
/*0x478*/ u8 *unk478;
/*0x47c*/ u8 *unk47c;
/*0x480*/ u8 *unk480;
/*0x484*/ struct textureconfig *unk484;
/*0x488*/ struct textureconfig *unk488;
/*0x48c*/ u32 unk48c;
};
struct var8007f8e0 { // perfect head?
/*0x000*/ u32 unk000;
/*0x004*/ struct textureconfig unk004;
/*0x010*/ struct textureconfig unk010;
/*0x01c*/ u8 *unk01c;
/*0x020*/ u8 *unk020;
/*0x024*/ u8 *unk024;
/*0x028*/ u32 unk028;
/*0x02c*/ u32 unk02c;
/*0x030*/ f32 unk030;
/*0x034*/ u16 unk034;
/*0x036*/ u8 unk036;
/*0x038*/ u32 unk038;
/*0x03c*/ u32 unk03c;
/*0x040*/ u8 unk040[200];
/*0x108*/ u8 unk108[500];
/*0x2fc*/ u8 unk2fc[160];
/*0x39c*/ s32 colournum;
/*0x3a0*/ s32 stylenum;
/*0x3a4*/ s32 unk3a4;
/*0x3a8*/ s32 unk3a8;
/*0x3ac*/ s32 unk3ac;
/*0x3b0*/ s32 unk3b0;
/*0x3b4*/ s32 unk3b4;
/*0x3b8*/ s32 unk3b8;
/*0x3bc*/ s32 unk3bc;
/*0x3c0*/ s32 unk3c0;
/*0x3c4*/ s32 unk3c4;
/*0x3c8*/ s32 unk3c8;
/*0x3cc*/ s32 unk3cc;
/*0x3d0*/ f32 unk3d0[7];
/*0x3ec*/ s32 unk3ec;
/*0x3f0*/ s32 unk3f0;
/*0x3f4*/ u16 unk3f4_00 : 1;
/*0x3f4*/ u16 unk3f4_01 : 1;
/*0x3f4*/ u16 unk3f4_02 : 1;
/*0x3f4*/ u16 unk3f4_03 : 1;
/*0x3f4*/ u16 unk3f4_04 : 1;
/*0x3f8*/ struct fileguid fileguid;
};
struct var8007f8dc {
/*0x000*/ u32 unk000;
/*0x004*/ f32 unk004;
/*0x008*/ f32 unk008;
/*0x00c*/ f32 unk00c;
/*0x010*/ f32 unk010;
/*0x014*/ f32 unk014;
/*0x018*/ f32 unk018;
/*0x01c*/ f32 unk01c;
/*0x020*/ f32 unk020;
/*0x024*/ f32 unk024;
/*0x028*/ f32 unk028;
/*0x02c*/ f32 unk02c;
/*0x030*/ f32 unk030;
/*0x034*/ f32 unk034;
/*0x038*/ f32 unk038;
/*0x03c*/ f32 unk03c;
/*0x040*/ f32 unk040;
/*0x044*/ f32 unk044;
/*0x048*/ f32 unk048;
/*0x04c*/ f32 unk04c;
/*0x050*/ f32 unk050;
/*0x054*/ s32 unk054;
/*0x058*/ u32 unk058;
/*0x05c*/ s32 unk05c;
/*0x060*/ s32 unk060;
/*0x064*/ s32 unk064;
/*0x068*/ u32 unk068;
/*0x06c*/ u32 unk06c;
/*0x070*/ u32 unk070;
/*0x074*/ s32 unk074;
/*0x078*/ u32 unk078;
/*0x07c*/ s32 unk07c;
/*0x080*/ s32 unk080;
/*0x084*/ u32 unk084;
/*0x088*/ s32 unk088;
/*0x08c*/ u32 unk08c;
/*0x090*/ s32 unk090;
/*0x094*/ u32 unk094;
/*0x098*/ u8 unk098[30];
/*0x0b6*/ u8 unk0b6[30];
/*0x0d4*/ u8 unk0d4_00 : 1;
/*0x0d4*/ u8 unk0d4_01 : 1;
/*0x0d4*/ u8 unk0d4_02 : 1;
/*0x0d4*/ u8 unk0d4_03 : 1;
/*0x0d4*/ u8 unk0d4_04 : 1;
/*0x0d8*/ void *unk0d8;
/*0x0dc*/ u32 *unk0dc;
/*0x0e0*/ u32 unk0e0;
/*0x0e4*/ u32 unk0e4;
/*0x0e8*/ u32 unk0e8;
/*0x0ec*/ u32 unk0ec;
/*0x0f0*/ u32 unk0f0;
/*0x0f4*/ u32 unk0f4;
/*0x0f8*/ u32 unk0f8;
/*0x0fc*/ u32 unk0fc;
/*0x100*/ u32 unk100;
};
struct hatposition {
f32 x;
f32 y;

View File

@ -663,9 +663,9 @@ void main_init(void)
stub0f000910();
stub0f000840();
mp_init();
phead_init();
camdraw_init();
paks_init();
phead_init2();
camdraw_init_afterpaks();
anims_init();
races_init();
bodies_init();