diff --git a/src/game/game_176d70.c b/src/game/game_176d70.c index 460efbc23..3a24333cc 100644 --- a/src/game/game_176d70.c +++ b/src/game/game_176d70.c @@ -10643,7 +10643,7 @@ s32 scenarioHtbRadar(s32 value) return value; } -bool scenarioHtbCallback24(s32 *displaylist, struct prop *prop) +bool scenarioHtbRadar2(s32 *displaylist, struct prop *prop) { if ((g_MpSetup.options & MPOPTION_SHOWONRADAR1) && g_ScenarioData.htb.token && @@ -10668,7 +10668,7 @@ bool scenarioHtbCallback24(s32 *displaylist, struct prop *prop) return false; } -bool scenarioHtbCallback28(struct prop *prop, u32 *colour) +bool scenarioHtbHighlight(struct prop *prop, u32 *colour) { if ((g_MpSetup.options & MPOPTION_HIGHLIGHTBRIEFCASE) && prop == g_ScenarioData.htb.token) { colour[0] = 0; @@ -11180,7 +11180,7 @@ s32 scenarioCtcRadar(s32 value) return value; } -bool scenarioCtcCallback24(s32 *displaylist, struct prop *prop) +bool scenarioCtcRadar2(s32 *displaylist, struct prop *prop) { s32 i; @@ -11204,7 +11204,7 @@ bool scenarioCtcCallback24(s32 *displaylist, struct prop *prop) } GLOBAL_ASM( -glabel scenarioCtcCallback28 +glabel scenarioCtcHighlight /* f181764: 90860000 */ lbu $a2,0x0($a0) /* f181768: 8c830004 */ lw $v1,0x4($a0) /* f18176c: 24010001 */ addiu $at,$zero,0x1 @@ -11248,7 +11248,7 @@ glabel scenarioCtcCallback28 /* f1817fc: 00000000 */ sll $zero,$zero,0x0 ); -//bool scenarioCtcCallback28(struct prop *prop, u32 *colour) +//bool scenarioCtcHighlight(struct prop *prop, u32 *colour) //{ // if (prop->type == PROPTYPE_OBJ || prop->type == PROPTYPE_WEAPON || prop->type == PROPTYPE_DOOR) { // if (prop->obj->type == OBJTYPE_WEAPON && prop->weapon->weapon_id == WEAPON_BRIEFCASE2) { @@ -13920,7 +13920,7 @@ glabel scenarioHtmRadar /* f184214: 27bd00a8 */ addiu $sp,$sp,0xa8 ); -bool scenarioHtmCallback24(s32 *displaylist, struct prop *prop) +bool scenarioHtmRadar2(s32 *displaylist, struct prop *prop) { if ((g_MpSetup.options & MPOPTION_SHOWONRADAR3) && g_ScenarioData.htm.uplink) { if (prop == g_ScenarioData.htm.uplink && @@ -13944,51 +13944,36 @@ bool scenarioHtmCallback24(s32 *displaylist, struct prop *prop) return false; } -GLOBAL_ASM( -glabel scenarioHtmCallback28 -/* f184344: 3c0e800b */ lui $t6,0x800b -/* f184348: 8dcecb94 */ lw $t6,-0x346c($t6) -/* f18434c: 00a03025 */ or $a2,$a1,$zero -/* f184350: 3c18800b */ lui $t8,0x800b -/* f184354: 000e7b80 */ sll $t7,$t6,0xe -/* f184358: 05e3001c */ bgezl $t7,.L0f1843cc -/* f18435c: 00001025 */ or $v0,$zero,$zero -/* f184360: 8f18c24c */ lw $t8,-0x3db4($t8) -/* f184364: 3c05800b */ lui $a1,%hi(g_ScenarioData) -/* f184368: 00001025 */ or $v0,$zero,$zero -/* f18436c: 14980003 */ bne $a0,$t8,.L0f18437c -/* f184370: 24a5c110 */ addiu $a1,$a1,%lo(g_ScenarioData) -/* f184374: 1000000b */ beqz $zero,.L0f1843a4 -/* f184378: 24020001 */ addiu $v0,$zero,0x1 -.L0f18437c: -/* f18437c: 3c03800b */ lui $v1,0x800b -/* f184380: 2463c11c */ addiu $v1,$v1,-16100 -/* f184384: 8cb90080 */ lw $t9,0x80($a1) -.L0f184388: -/* f184388: 24a5000c */ addiu $a1,$a1,0xc -/* f18438c: 14990003 */ bne $a0,$t9,.L0f18439c -/* f184390: 00000000 */ sll $zero,$zero,0x0 -/* f184394: 10000003 */ beqz $zero,.L0f1843a4 -/* f184398: 24020001 */ addiu $v0,$zero,0x1 -.L0f18439c: -/* f18439c: 54a3fffa */ bnel $a1,$v1,.L0f184388 -/* f1843a0: 8cb90080 */ lw $t9,0x80($a1) -.L0f1843a4: -/* f1843a4: 10400008 */ beqz $v0,.L0f1843c8 -/* f1843a8: 240800ff */ addiu $t0,$zero,0xff -/* f1843ac: 24090040 */ addiu $t1,$zero,0x40 -/* f1843b0: acc00000 */ sw $zero,0x0($a2) -/* f1843b4: acc80004 */ sw $t0,0x4($a2) -/* f1843b8: acc00008 */ sw $zero,0x8($a2) -/* f1843bc: acc9000c */ sw $t1,0xc($a2) -/* f1843c0: 03e00008 */ jr $ra -/* f1843c4: 24020001 */ addiu $v0,$zero,0x1 -.L0f1843c8: -/* f1843c8: 00001025 */ or $v0,$zero,$zero -.L0f1843cc: -/* f1843cc: 03e00008 */ jr $ra -/* f1843d0: 00000000 */ sll $zero,$zero,0x0 -); +bool scenarioHtmHighlight(struct prop *prop, u32 *colour) +{ + if (g_MpSetup.options & MPOPTION_HIGHLIGHTTERMINAL) { + bool highlight = false; + + if (prop == g_ScenarioData.htm.uplink) { + highlight = true; + } else { + s32 i; + + for (i = 0; i < 1; i++) { + if (g_ScenarioData.htm.unk080[i].prop == prop) { + highlight = true; + break; + } + } + } + + if (highlight) { + colour[0] = 0; + colour[1] = 0xff; + colour[2] = 0; + colour[3] = 0x40; + + return true; + } + } + + return false; +} GLOBAL_ASM( glabel scenarioPacChooseVictims @@ -14122,7 +14107,7 @@ void scenarioPacReset(void) } GLOBAL_ASM( -glabel scenarioPacCallback28 +glabel scenarioPacHighlight /* f18452c: 3c0e800b */ lui $t6,0x800b /* f184530: 8dcecb94 */ lw $t6,-0x346c($t6) /* f184534: 000e7b00 */ sll $t7,$t6,0xc @@ -14687,7 +14672,7 @@ s32 scenarioPacRadar(s32 value) } GLOBAL_ASM( -glabel scenarioPacCallback24 +glabel scenarioPacRadar2 /* f184d8c: 3c03800b */ lui $v1,0x800b /* f184d90: 8c63cb94 */ lw $v1,-0x346c($v1) /* f184d94: 27bdffb8 */ addiu $sp,$sp,-72 @@ -14772,7 +14757,7 @@ glabel scenarioPacCallback24 // Mismatch because the game jumps to pac properties directly // while decomp loads the base pac address then uses offsets. -//bool scenarioPacCallback24(s32 *displaylist, struct prop *prop) +//bool scenarioPacRadar2(s32 *displaylist, struct prop *prop) //{ // if ((g_MpSetup.options & MPOPTION_SHOWONRADAR4) && g_ScenarioData.pac.victimindex >= 0) { // s32 index = g_ScenarioData.pac.victimindex; @@ -15725,10 +15710,10 @@ s32 scenarioRadar(s32 value) return value; } -bool scenarioCallback24(void *arg0, struct prop *prop) +bool scenarioRadar2(s32 *displaylist, struct prop *prop) { - if (g_Vars.unk000318 && g_MpScenarios[g_MpSetup.scenario].unk24) { - return g_MpScenarios[g_MpSetup.scenario].unk24(arg0, prop); + if (g_Vars.unk000318 && g_MpScenarios[g_MpSetup.scenario].radar2func) { + return g_MpScenarios[g_MpSetup.scenario].radar2func(displaylist, prop); } return false; diff --git a/src/game/game_187770.c b/src/game/game_187770.c index 97efdc473..29dfd1ac2 100644 --- a/src/game/game_187770.c +++ b/src/game/game_187770.c @@ -9890,7 +9890,7 @@ glabel func0f18f874 /* f18fc58: 000d7080 */ sll $t6,$t5,0x2 /* f18fc5c: 05c20037 */ bltzl $t6,.L0f18fd3c /* f18fc60: 8fad007c */ lw $t5,0x7c($sp) -/* f18fc64: 0fc61770 */ jal scenarioCallback24 +/* f18fc64: 0fc61770 */ jal scenarioRadar2 /* f18fc68: afa9003c */ sw $t1,0x3c($sp) /* f18fc6c: 14400032 */ bnez $v0,.L0f18fd38 /* f18fc70: 8fa9003c */ lw $t1,0x3c($sp) @@ -10036,7 +10036,7 @@ glabel func0f18f874 /* f18fe7c: 000fc880 */ sll $t9,$t7,0x2 /* f18fe80: 07200030 */ bltz $t9,.L0f18ff44 /* f18fe84: 00000000 */ sll $zero,$zero,0x0 -/* f18fe88: 0fc61770 */ jal scenarioCallback24 +/* f18fe88: 0fc61770 */ jal scenarioRadar2 /* f18fe8c: 8c65001c */ lw $a1,0x1c($v1) /* f18fe90: 1440002c */ bnez $v0,.L0f18ff44 /* f18fe94: 00000000 */ sll $zero,$zero,0x0 @@ -10110,7 +10110,7 @@ glabel func0f18f874 /* f18ff98: 8e480284 */ lw $t0,0x284($s2) /* f18ff9c: 27a40088 */ addiu $a0,$sp,0x88 .L0f18ffa0: -/* f18ffa0: 0fc61770 */ jal scenarioCallback24 +/* f18ffa0: 0fc61770 */ jal scenarioRadar2 /* f18ffa4: 8d0500bc */ lw $a1,0xbc($t0) /* f18ffa8: 54400024 */ bnezl $v0,.L0f19003c /* f18ffac: 240c0001 */ addiu $t4,$zero,0x1 diff --git a/src/include/game/game_176d70.h b/src/include/game/game_176d70.h index 0ce4b53fd..e3a870ca6 100644 --- a/src/include/game/game_176d70.h +++ b/src/include/game/game_176d70.h @@ -91,8 +91,8 @@ void scenarioHtbCallback14(struct chrdata *chr); u32 scenarioHtbCallback18(void); void scenarioHtbKill(struct mpchr *mpchr, s32 arg1, s32 *score, s32 *arg3); s32 scenarioHtbRadar(s32 value); -bool scenarioHtbCallback24(s32 *displaylist, struct prop *prop); -bool scenarioHtbCallback28(struct prop *prop, u32 *colour); +bool scenarioHtbRadar2(s32 *displaylist, struct prop *prop); +bool scenarioHtbHighlight(struct prop *prop, u32 *colour); void scenarioCtcInit(void); s32 scenarioCtcCallback08(void); void scenarioCtcCallback10(void); @@ -100,8 +100,8 @@ void scenarioCtcCallback14(); void scenarioCtcReset(void); void scenarioCtcKill(struct mpchr *mpchr, s32 arg1, s32 *score, s32 *arg3); s32 scenarioCtcRadar(s32 value); -bool scenarioCtcCallback24(s32 *displaylist, struct prop *prop); -bool scenarioCtcCallback28(struct prop *prop, u32 *colour); +bool scenarioCtcRadar2(s32 *displaylist, struct prop *prop); +bool scenarioCtcHighlight(struct prop *prop, u32 *colour); u32 func0f181800(void); bool scenarioCtcCallback2c(f32 arg0, s32 arg1, s32 arg2, s32 arg3, f32 *arg4); s32 scenarioCtcCallback30(void); @@ -129,19 +129,19 @@ void scenarioHtmCallback14(struct chrdata *chr); u32 scenarioHtmCallback18(void); void scenarioHtmKill(struct mpchr *mpchr, s32 arg1, s32 *score, s32 *arg3); s32 scenarioHtmRadar(s32 value); -bool scenarioHtmCallback24(s32 *displaylist, struct prop *prop); -u32 scenarioHtmCallback28(void); +bool scenarioHtmRadar2(s32 *displaylist, struct prop *prop); +bool scenarioHtmHighlight(struct prop *prop, u32 *colour); void scenarioPacChooseVictims(void); void scenarioPacInit(void); void scenarioPacReset(void); -u32 scenarioPacCallback28(void); +bool scenarioPacHighlight(struct prop *prop, u32 *colour); void func0f1845bc(void); u32 func0f1847b8(void); void scenarioPacCallback10(void); u32 scenarioPacCallback18(void); void scenarioPacKill(struct mpchr *mpchr, s32 arg1, s32 *score, s32 *arg3); s32 scenarioPacRadar(s32 value); -bool scenarioPacCallback24(s32 *displaylist, struct prop *prop); +bool scenarioPacRadar2(s32 *displaylist, struct prop *prop); u32 func0f184fb0(void); u32 func0f18500c(void); void scenarioCallback40(s32 *arg0); @@ -155,7 +155,7 @@ void scenarioCallback14(struct chrdata *chr); u32 func0f185774(void); u32 func0f185c14(void); s32 scenarioRadar(s32 value); -bool scenarioCallback24(void *arg0, struct prop *prop); +bool scenarioRadar2(s32 *displaylist, struct prop *prop); u32 func0f185e20(void); f32 scenarioCallback2c(f32 arg0, s32 arg1, s32 arg2, s32 arg3); u32 func0f18620c(void); diff --git a/src/include/types.h b/src/include/types.h index d665519f1..83a536e5c 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -4119,8 +4119,8 @@ struct mpscenario { void *unk18; void (*killfunc)(struct mpchr *mpchr, s32 arg1, s32 *score, s32 *arg3); s32 (*radarfunc)(s32 value); - bool (*unk24)(void *arg0, struct prop *prop); - bool (*unk28)(struct prop *prop, u32 *colour); + bool (*radar2func)(s32 *displaylist, struct prop *prop); + bool (*highlightfunc)(struct prop *prop, u32 *colour); bool (*unk2c)(f32 arg0, s32 arg1, s32 arg2, s32 arg3, f32 *arg4); s32 (*unk30)(void); bool (*unk34)(s16 arg0); @@ -4354,6 +4354,12 @@ struct scenariodata_htb { struct coord pos; }; +struct htmthing { + struct prop *prop; + u32 unk04; + u32 unk08; +}; + struct scenariodata_htm { /*0x800ac110*/ u32 unk000; /*0x800ac114*/ u32 unk004; @@ -4387,9 +4393,7 @@ struct scenariodata_htm { /*0x800ac184*/ u32 unk074; /*0x800ac188*/ u32 unk078; /*0x800ac18c*/ u32 unk07c; - /*0x800ac190*/ u32 unk080; - /*0x800ac194*/ u32 unk084; - /*0x800ac198*/ u32 unk088; + /*0x800ac190*/ struct htmthing unk080[1]; /*0x800ac19c*/ u32 unk08c; /*0x800ac1a0*/ u32 unk090; /*0x800ac1a4*/ u32 unk094; diff --git a/src/setup/setup_020df0.c b/src/setup/setup_020df0.c index 33d3fa821..11e77cc1c 100644 --- a/src/setup/setup_020df0.c +++ b/src/setup/setup_020df0.c @@ -11547,12 +11547,12 @@ struct menu_dialog menudialog_mppopacapoptions = { // 2cfb8 struct mpscenario g_MpScenarios[] = { - { &menudialog_mpcombatoptions, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }, - { &menudialog_mpbriefcaseoptions, scenarioHtbInit, scenarioHtbCallback08, scenarioHtbReset, scenarioHtbCallback10, scenarioHtbCallback14, scenarioHtbCallback18, scenarioHtbKill, scenarioHtbRadar, scenarioHtbCallback24, scenarioHtbCallback28, NULL, NULL, NULL, NULL, NULL, NULL, NULL }, - { &menudialog_mphackeroptions, scenarioHtmInit, scenarioHtmCallback08, scenarioHtmReset, scenarioHtmCallback10, scenarioHtmCallback14, scenarioHtmCallback18, scenarioHtmKill, scenarioHtmRadar, scenarioHtmCallback24, scenarioHtmCallback28, NULL, NULL, NULL, NULL, NULL, NULL, NULL }, - { &menudialog_mppopacapoptions, scenarioPacInit, NULL, scenarioPacReset, scenarioPacCallback10, NULL, scenarioPacCallback18, scenarioPacKill, scenarioPacRadar, scenarioPacCallback24, scenarioPacCallback28, NULL, NULL, NULL, NULL, NULL, NULL, NULL }, - { &menudialog_mphilloptions, scenarioKohInit, NULL, scenarioKohReset, scenarioKohCallback10, NULL, scenarioKohCallback18, scenarioKohKill, scenarioKohRadar, NULL, NULL, NULL, NULL, scenarioKohCallback34, scenarioKohCallback38, NULL, scenarioKohCallback40, scenarioKohCallback44 }, - { &menudialog_mpcaptureoptions, scenarioCtcInit, scenarioCtcCallback08, scenarioCtcReset, scenarioCtcCallback10, scenarioCtcCallback14, NULL, scenarioCtcKill, scenarioCtcRadar, scenarioCtcCallback24, scenarioCtcCallback28, scenarioCtcCallback2c, scenarioCtcCallback30, scenarioCtcCallback34, scenarioCtcCallback38, NULL, NULL, NULL }, + { &menudialog_mpcombatoptions, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }, + { &menudialog_mpbriefcaseoptions, scenarioHtbInit, scenarioHtbCallback08, scenarioHtbReset, scenarioHtbCallback10, scenarioHtbCallback14, scenarioHtbCallback18, scenarioHtbKill, scenarioHtbRadar, scenarioHtbRadar2, scenarioHtbHighlight, NULL, NULL, NULL, NULL, NULL, NULL, NULL }, + { &menudialog_mphackeroptions, scenarioHtmInit, scenarioHtmCallback08, scenarioHtmReset, scenarioHtmCallback10, scenarioHtmCallback14, scenarioHtmCallback18, scenarioHtmKill, scenarioHtmRadar, scenarioHtmRadar2, scenarioHtmHighlight, NULL, NULL, NULL, NULL, NULL, NULL, NULL }, + { &menudialog_mppopacapoptions, scenarioPacInit, NULL, scenarioPacReset, scenarioPacCallback10, NULL, scenarioPacCallback18, scenarioPacKill, scenarioPacRadar, scenarioPacRadar2, scenarioPacHighlight, NULL, NULL, NULL, NULL, NULL, NULL, NULL }, + { &menudialog_mphilloptions, scenarioKohInit, NULL, scenarioKohReset, scenarioKohCallback10, NULL, scenarioKohCallback18, scenarioKohKill, scenarioKohRadar, NULL, NULL, NULL, NULL, scenarioKohCallback34, scenarioKohCallback38, NULL, scenarioKohCallback40, scenarioKohCallback44 }, + { &menudialog_mpcaptureoptions, scenarioCtcInit, scenarioCtcCallback08, scenarioCtcReset, scenarioCtcCallback10, scenarioCtcCallback14, NULL, scenarioCtcKill, scenarioCtcRadar, scenarioCtcRadar2, scenarioCtcHighlight, scenarioCtcCallback2c, scenarioCtcCallback30, scenarioCtcCallback34, scenarioCtcCallback38, NULL, NULL, NULL }, }; // 2d168