From 2675036ce9413d0f1796f6fc338f4012c70c8a5a Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Fri, 25 Feb 2022 22:26:58 +1000 Subject: [PATCH] Attempt to decompile setupLoadBriefing --- src/game/game_00c490.c | 87 +++++++++++++++++++++++++++++++++- src/game/mainmenu.c | 2 +- src/include/constants.h | 1 + src/include/game/game_00c490.h | 2 +- 4 files changed, 88 insertions(+), 4 deletions(-) diff --git a/src/game/game_00c490.c b/src/game/game_00c490.c index 14e23fee5..bf48f295e 100644 --- a/src/game/game_00c490.c +++ b/src/game/game_00c490.c @@ -2664,7 +2664,7 @@ void setupHov(struct defaultobj *obj, struct hov *hov) #if VERSION >= VERSION_PAL_FINAL GLOBAL_ASM( -glabel func0f00e980 +glabel setupLoadBriefing /* f00e980: 27bdffc8 */ addiu $sp,$sp,-56 /* f00e984: afb5002c */ sw $s5,0x2c($sp) /* f00e988: afb30024 */ sw $s3,0x24($sp) @@ -2799,7 +2799,7 @@ glabel func0f00e980 ); #else GLOBAL_ASM( -glabel func0f00e980 +glabel setupLoadBriefing /* f00e980: 27bdffc8 */ addiu $sp,$sp,-56 /* f00e984: afb5002c */ sw $s5,0x2c($sp) /* f00e988: afb30024 */ sw $s3,0x24($sp) @@ -2934,6 +2934,89 @@ glabel func0f00e980 ); #endif +// Mismatch: for loop is handled differently, as is obj->type +//void setupLoadBriefing(s32 stagenum, u8 *buffer, s32 bufferlen, struct briefing *briefing) +//{ +// if (stagenum < STAGE_TITLE) { +// s32 stageindex = stageGetIndex(stagenum); +// struct defaultobj *obj; +// s32 setupfilenum; +// s32 setupfilesize; +// struct objective *objective; +// struct briefingobj *briefingobj; +// s32 i; +// u8 *langbuffer; +// s32 langbufferlen; +// struct stagesetup *setup; +// +// if (stageindex < 0) { +// stageindex = 0; +// } +// +// setupfilenum = g_Stages[stageindex].setupfileid; +// g_LoadType = LOADTYPE_LANG; +// +// if (g_Stages[stageindex].setupfileid); +// +// func0f167200(setupfilenum, 0x22, buffer, bufferlen); +// +// setup = (struct stagesetup *)buffer; +// setupfilesize = fileGetSize(setupfilenum); +// langbuffer = &buffer[setupfilesize]; +// langbufferlen = bufferlen - setupfilesize; +// +// briefing->langbank = langGetLangBankIndexFromStagenum(stagenum); +// +// langSetBank(briefing->langbank, langbuffer, langbufferlen); +// +// obj = (struct defaultobj *)((u32)setup + (u32)setup->props); +// +// if (obj != NULL) { +// s32 wanttype = BRIEFINGTYPE_TEXT_PA; +// +// if (lvGetDifficulty() == DIFF_A) { +// wanttype = BRIEFINGTYPE_TEXT_A; +// } +// +// if (lvGetDifficulty() == DIFF_SA) { +// wanttype = BRIEFINGTYPE_TEXT_SA; +// } +// +// for (i = 0; i < 6; i++) { +// briefing->objectivenames[i] = 0; +// } +// +// briefing->briefingtextnum = L_MISC_042; // "No briefing for this mission" +// +// while (obj->type != OBJTYPE_END) { +// switch (obj->type) { +// case OBJTYPE_BRIEFING: +// briefingobj = (struct briefingobj *)obj; +// +// if (briefingobj->type == BRIEFINGTYPE_TEXT_PA) { +// briefing->briefingtextnum = briefingobj->text; +// } +// +// if (briefingobj->type == wanttype) { +// briefing->briefingtextnum = briefingobj->text; +// } +// break; +// case OBJTYPE_BEGINOBJECTIVE: +// objective = (struct objective *)obj; +// +// if (objective->index < 7U) { +// briefing->objectivenames[objective->index] = objective->text; +// briefing->objectivedifficulties[objective->index] = objective->difficulties; +// } +// break; +// } +// +// obj = (struct defaultobj *)((u32 *)obj + setupGetCommandLength((u32 *)obj)); +// } +// } +// } +//} + void setupLoadFiles(s32 stagenum) { s32 i; diff --git a/src/game/mainmenu.c b/src/game/mainmenu.c index a6fd51de3..769656b61 100644 --- a/src/game/mainmenu.c +++ b/src/game/mainmenu.c @@ -800,7 +800,7 @@ s32 menudialog00103608(s32 operation, struct menudialogdef *dialogdef, union han case MENUOP_OPEN: g_Menus[g_MpPlayerNum].unk840.unk010 = 0; - func0f00e980(g_MissionConfig.stagenum, + setupLoadBriefing(g_MissionConfig.stagenum, g_Menus[g_MpPlayerNum].unk840.unk004, g_Menus[g_MpPlayerNum].unk840.unk008, &g_Briefing); break; diff --git a/src/include/constants.h b/src/include/constants.h index 9c8977d06..b13dc95bc 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -1337,6 +1337,7 @@ #define LOADTYPE_NONE 0 #define LOADTYPE_BG 1 #define LOADTYPE_TILES 2 +#define LOADTYPE_LANG 3 #define LOADTYPE_SETUP 4 #define LOADTYPE_PADS 5 #define LOADTYPE_MODEL 6 diff --git a/src/include/game/game_00c490.h b/src/include/game/game_00c490.h index 2a63d150a..479b06e03 100644 --- a/src/include/game/game_00c490.h +++ b/src/include/game/game_00c490.h @@ -27,7 +27,7 @@ s32 func0f00e1f8(s32 padnum); s32 func0f00e2b0(s32 padnum); void setupDoor(struct doorobj *door, s32 cmdindex); void setupHov(struct defaultobj *obj, struct hov *hov); -void func0f00e980(s32 stagenum, u8 *arg0, s32 arg1, struct briefing *briefing); +void setupLoadBriefing(s32 stagenum, u8 *buffer, s32 bufferlen, struct briefing *briefing); void setupLoadFiles(s32 stagenum); void setupParseObjects(s32 stagenum);