mirror of
https://gitlab.com/ryandwyer/perfect-dark
synced 2026-05-26 23:46:42 -04:00
327 lines
11 KiB
C
327 lines
11 KiB
C
#include <ultra64.h>
|
|
#include "constants.h"
|
|
#include "game/debug.h"
|
|
#include "lib/lib_13790.h"
|
|
#include "bss.h"
|
|
#include "data.h"
|
|
#include "types.h"
|
|
|
|
s32 g_DMenuSelectedOption = 0;
|
|
s32 g_DMenuNumOptions = 0;
|
|
char **g_DMenuCurLabels = NULL;
|
|
s32 (*g_DMenuCurPositions)[2] = NULL;
|
|
|
|
u32 var80078130nb = 0;
|
|
u32 var80078134nb = 0;
|
|
u32 var80078138nb = 2;
|
|
u8 var8007813cnb[] = { 4, 4, 4 };
|
|
u8 var80078140nb[] = { 7, 7, 7 };
|
|
|
|
void dmenu0f118c80nb(void)
|
|
{
|
|
// empty
|
|
}
|
|
|
|
GLOBAL_ASM(
|
|
glabel dmenuSetScaleIndex
|
|
/* f118c88: 3c018008 */ lui $at,0x8008
|
|
/* f118c8c: 03e00008 */ jr $ra
|
|
/* f118c90: ac248138 */ sw $a0,-0x7ec8($at)
|
|
);
|
|
|
|
GLOBAL_ASM(
|
|
glabel dmenuSetMenu
|
|
/* f118c94: 3c018008 */ lui $at,0x8008
|
|
/* f118c98: ac248128 */ sw $a0,-0x7ed8($at)
|
|
/* f118c9c: 3c018008 */ lui $at,0x8008
|
|
/* f118ca0: ac25812c */ sw $a1,-0x7ed4($at)
|
|
/* f118ca4: 3c018008 */ lui $at,0x8008
|
|
/* f118ca8: ac268134 */ sw $a2,-0x7ecc($at)
|
|
/* f118cac: 8cce0000 */ lw $t6,0x0($a2)
|
|
/* f118cb0: 00001025 */ or $v0,$zero,$zero
|
|
/* f118cb4: 00c01825 */ or $v1,$a2,$zero
|
|
/* f118cb8: 05c20007 */ bltzl $t6,.NB0f118cd8
|
|
/* f118cbc: 0002c080 */ sll $t8,$v0,0x2
|
|
/* f118cc0: 8c6f0004 */ lw $t7,0x4($v1)
|
|
.NB0f118cc4:
|
|
/* f118cc4: 24420001 */ addiu $v0,$v0,0x1
|
|
/* f118cc8: 24630004 */ addiu $v1,$v1,0x4
|
|
/* f118ccc: 05e3fffd */ bgezl $t7,.NB0f118cc4
|
|
/* f118cd0: 8c6f0004 */ lw $t7,0x4($v1)
|
|
/* f118cd4: 0002c080 */ sll $t8,$v0,0x2
|
|
.NB0f118cd8:
|
|
/* f118cd8: 00d8c821 */ addu $t9,$a2,$t8
|
|
/* f118cdc: 8f28fffc */ lw $t0,-0x4($t9)
|
|
/* f118ce0: 3c018008 */ lui $at,0x8008
|
|
/* f118ce4: ac288124 */ sw $t0,-0x7edc($at)
|
|
/* f118ce8: 3c018008 */ lui $at,0x8008
|
|
/* f118cec: 03e00008 */ jr $ra
|
|
/* f118cf0: ac228130 */ sw $v0,-0x7ed0($at)
|
|
);
|
|
|
|
Gfx *dmenuRender(Gfx *gdl)
|
|
{
|
|
s32 xscale = var8007813cnb[var80078138nb];
|
|
s32 yscale = var80078140nb[var80078138nb];
|
|
s32 i;
|
|
|
|
gDPSetTextureLUT(gdl++, G_TT_NONE);
|
|
|
|
// Render unselected/gray options
|
|
for (i = 0; i < g_DMenuNumOptions; i++) {
|
|
dmenu0f118c80nb();
|
|
|
|
if (i != g_DMenuSelectedOption) {
|
|
func000137bc(0xc0, 0xc0, 0xc0, 0xc0);
|
|
func000137b0((g_DMenuCurPositions[i][0] * xscale - 20) / 4, (g_DMenuCurPositions[i][1] * yscale - 8) / 7);
|
|
func000137fc(g_DMenuCurLabels[i]);
|
|
}
|
|
}
|
|
|
|
// Render selected/red option
|
|
for (i = 0; i < g_DMenuNumOptions; i++) {
|
|
dmenu0f118c80nb();
|
|
|
|
if (i == g_DMenuSelectedOption) {
|
|
func000137bc(0xc0, 0, 0, 0xc0);
|
|
func000137b0((g_DMenuCurPositions[i][0] * xscale - 20) / 4, (g_DMenuCurPositions[i][1] * yscale - 8) / 7);
|
|
func000137fc(g_DMenuCurLabels[i]);
|
|
}
|
|
}
|
|
|
|
return gdl;
|
|
}
|
|
|
|
GLOBAL_ASM(
|
|
glabel dmenuGetSelectedOption
|
|
/* f118f70: 3c028008 */ lui $v0,0x8008
|
|
/* f118f74: 03e00008 */ jr $ra
|
|
/* f118f78: 8c428120 */ lw $v0,-0x7ee0($v0)
|
|
);
|
|
|
|
GLOBAL_ASM(
|
|
glabel dmenuSetSelectedOption
|
|
/* f118f7c: 3c018008 */ lui $at,0x8008
|
|
/* f118f80: 03e00008 */ jr $ra
|
|
/* f118f84: ac248120 */ sw $a0,-0x7ee0($at)
|
|
);
|
|
|
|
GLOBAL_ASM(
|
|
glabel dmenuNavigateUp
|
|
/* f118f88: 3c068008 */ lui $a2,0x8008
|
|
/* f118f8c: 24c68120 */ addiu $a2,$a2,-32480
|
|
/* f118f90: 8cce0000 */ lw $t6,0x0($a2)
|
|
/* f118f94: 3c188008 */ lui $t8,0x8008
|
|
/* f118f98: 3c048008 */ lui $a0,0x8008
|
|
/* f118f9c: 25c2ffff */ addiu $v0,$t6,-1
|
|
/* f118fa0: 04410006 */ bgez $v0,.NB0f118fbc
|
|
/* f118fa4: acc20000 */ sw $v0,0x0($a2)
|
|
/* f118fa8: 8f188134 */ lw $t8,-0x7ecc($t8)
|
|
/* f118fac: 8f190000 */ lw $t9,0x0($t8)
|
|
/* f118fb0: 2728ffff */ addiu $t0,$t9,-1
|
|
/* f118fb4: 03e00008 */ jr $ra
|
|
/* f118fb8: acc80000 */ sw $t0,0x0($a2)
|
|
.NB0f118fbc:
|
|
/* f118fbc: 8c848130 */ lw $a0,-0x7ed0($a0)
|
|
/* f118fc0: 00001825 */ or $v1,$zero,$zero
|
|
/* f118fc4: 3c058008 */ lui $a1,0x8008
|
|
/* f118fc8: 1880000d */ blez $a0,.NB0f119000
|
|
/* f118fcc: 00000000 */ sll $zero,$zero,0x0
|
|
/* f118fd0: 8ca58134 */ lw $a1,-0x7ecc($a1)
|
|
.NB0f118fd4:
|
|
/* f118fd4: 8caa0000 */ lw $t2,0x0($a1)
|
|
/* f118fd8: 24630001 */ addiu $v1,$v1,0x1
|
|
/* f118fdc: 24490001 */ addiu $t1,$v0,0x1
|
|
/* f118fe0: 152a0005 */ bne $t1,$t2,.NB0f118ff8
|
|
/* f118fe4: 0064082a */ slt $at,$v1,$a0
|
|
/* f118fe8: 8cab0004 */ lw $t3,0x4($a1)
|
|
/* f118fec: 256cffff */ addiu $t4,$t3,-1
|
|
/* f118ff0: 03e00008 */ jr $ra
|
|
/* f118ff4: accc0000 */ sw $t4,0x0($a2)
|
|
.NB0f118ff8:
|
|
/* f118ff8: 1420fff6 */ bnez $at,.NB0f118fd4
|
|
/* f118ffc: 24a50004 */ addiu $a1,$a1,0x4
|
|
.NB0f119000:
|
|
/* f119000: 03e00008 */ jr $ra
|
|
/* f119004: 00000000 */ sll $zero,$zero,0x0
|
|
);
|
|
|
|
GLOBAL_ASM(
|
|
glabel dmenuNavigateDown
|
|
/* f119008: 3c078008 */ lui $a3,0x8008
|
|
/* f11900c: 24e78120 */ addiu $a3,$a3,-32480
|
|
/* f119010: 8cee0000 */ lw $t6,0x0($a3)
|
|
/* f119014: 3c038008 */ lui $v1,0x8008
|
|
/* f119018: 3c058008 */ lui $a1,0x8008
|
|
/* f11901c: 25c20001 */ addiu $v0,$t6,0x1
|
|
/* f119020: ace20000 */ sw $v0,0x0($a3)
|
|
/* f119024: 8c638134 */ lw $v1,-0x7ecc($v1)
|
|
/* f119028: 8c780000 */ lw $t8,0x0($v1)
|
|
/* f11902c: 14580003 */ bne $v0,$t8,.NB0f11903c
|
|
/* f119030: 00000000 */ sll $zero,$zero,0x0
|
|
/* f119034: 03e00008 */ jr $ra
|
|
/* f119038: ace00000 */ sw $zero,0x0($a3)
|
|
.NB0f11903c:
|
|
/* f11903c: 8ca58130 */ lw $a1,-0x7ed0($a1)
|
|
/* f119040: 00002025 */ or $a0,$zero,$zero
|
|
/* f119044: 00603025 */ or $a2,$v1,$zero
|
|
/* f119048: 18a0000b */ blez $a1,.NB0f119078
|
|
/* f11904c: 00000000 */ sll $zero,$zero,0x0
|
|
.NB0f119050:
|
|
/* f119050: 8cd90000 */ lw $t9,0x0($a2)
|
|
/* f119054: 24840001 */ addiu $a0,$a0,0x1
|
|
/* f119058: 0085082a */ slt $at,$a0,$a1
|
|
/* f11905c: 14590004 */ bne $v0,$t9,.NB0f119070
|
|
/* f119060: 00000000 */ sll $zero,$zero,0x0
|
|
/* f119064: 8cc8fffc */ lw $t0,-0x4($a2)
|
|
/* f119068: 03e00008 */ jr $ra
|
|
/* f11906c: ace80000 */ sw $t0,0x0($a3)
|
|
.NB0f119070:
|
|
/* f119070: 1420fff7 */ bnez $at,.NB0f119050
|
|
/* f119074: 24c60004 */ addiu $a2,$a2,0x4
|
|
.NB0f119078:
|
|
/* f119078: 03e00008 */ jr $ra
|
|
/* f11907c: 00000000 */ sll $zero,$zero,0x0
|
|
);
|
|
|
|
GLOBAL_ASM(
|
|
glabel dmenuNavigateRight
|
|
/* f119080: 3c038008 */ lui $v1,0x8008
|
|
/* f119084: 8c638134 */ lw $v1,-0x7ecc($v1)
|
|
/* f119088: 3c088008 */ lui $t0,0x8008
|
|
/* f11908c: 25088120 */ addiu $t0,$t0,-32480
|
|
/* f119090: 8d020000 */ lw $v0,0x0($t0)
|
|
/* f119094: 8c640000 */ lw $a0,0x0($v1)
|
|
/* f119098: 3c0e8008 */ lui $t6,0x8008
|
|
/* f11909c: 0044082a */ slt $at,$v0,$a0
|
|
/* f1190a0: 1020000d */ beqz $at,.NB0f1190d8
|
|
/* f1190a4: 00000000 */ sll $zero,$zero,0x0
|
|
/* f1190a8: 8dce8130 */ lw $t6,-0x7ed0($t6)
|
|
/* f1190ac: 00447821 */ addu $t7,$v0,$a0
|
|
/* f1190b0: 29c10002 */ slti $at,$t6,0x2
|
|
/* f1190b4: 1420002d */ bnez $at,.NB0f11916c
|
|
/* f1190b8: 00000000 */ sll $zero,$zero,0x0
|
|
/* f1190bc: ad0f0000 */ sw $t7,0x0($t0)
|
|
/* f1190c0: 8c650004 */ lw $a1,0x4($v1)
|
|
/* f1190c4: 01e5082a */ slt $at,$t7,$a1
|
|
/* f1190c8: 14200028 */ bnez $at,.NB0f11916c
|
|
/* f1190cc: 24b9ffff */ addiu $t9,$a1,-1
|
|
/* f1190d0: 03e00008 */ jr $ra
|
|
/* f1190d4: ad190000 */ sw $t9,0x0($t0)
|
|
.NB0f1190d8:
|
|
/* f1190d8: 3c048008 */ lui $a0,0x8008
|
|
/* f1190dc: 8c848130 */ lw $a0,-0x7ed0($a0)
|
|
/* f1190e0: 00002825 */ or $a1,$zero,$zero
|
|
/* f1190e4: 00603025 */ or $a2,$v1,$zero
|
|
/* f1190e8: 18800020 */ blez $a0,.NB0f11916c
|
|
/* f1190ec: 00000000 */ sll $zero,$zero,0x0
|
|
.NB0f1190f0:
|
|
/* f1190f0: 8cc70000 */ lw $a3,0x0($a2)
|
|
/* f1190f4: 24a50001 */ addiu $a1,$a1,0x1
|
|
/* f1190f8: 0047082a */ slt $at,$v0,$a3
|
|
/* f1190fc: 50200019 */ beqzl $at,.NB0f119164
|
|
/* f119100: 00a4082a */ slt $at,$a1,$a0
|
|
/* f119104: 8ccafffc */ lw $t2,-0x4($a2)
|
|
/* f119108: 00474821 */ addu $t1,$v0,$a3
|
|
/* f11910c: 012a5823 */ subu $t3,$t1,$t2
|
|
/* f119110: ad0b0000 */ sw $t3,0x0($t0)
|
|
/* f119114: 8cc40004 */ lw $a0,0x4($a2)
|
|
/* f119118: 0483000b */ bgezl $a0,.NB0f119148
|
|
/* f11911c: 8d190000 */ lw $t9,0x0($t0)
|
|
/* f119120: 8ccd0000 */ lw $t5,0x0($a2)
|
|
/* f119124: 016d7023 */ subu $t6,$t3,$t5
|
|
/* f119128: ad0e0000 */ sw $t6,0x0($t0)
|
|
/* f11912c: 8c640000 */ lw $a0,0x0($v1)
|
|
/* f119130: 01c4082a */ slt $at,$t6,$a0
|
|
/* f119134: 1420000d */ bnez $at,.NB0f11916c
|
|
/* f119138: 2498ffff */ addiu $t8,$a0,-1
|
|
/* f11913c: 03e00008 */ jr $ra
|
|
/* f119140: ad180000 */ sw $t8,0x0($t0)
|
|
/* f119144: 8d190000 */ lw $t9,0x0($t0)
|
|
.NB0f119148:
|
|
/* f119148: 2489ffff */ addiu $t1,$a0,-1
|
|
/* f11914c: 0324082a */ slt $at,$t9,$a0
|
|
/* f119150: 14200006 */ bnez $at,.NB0f11916c
|
|
/* f119154: 00000000 */ sll $zero,$zero,0x0
|
|
/* f119158: 03e00008 */ jr $ra
|
|
/* f11915c: ad090000 */ sw $t1,0x0($t0)
|
|
/* f119160: 00a4082a */ slt $at,$a1,$a0
|
|
.NB0f119164:
|
|
/* f119164: 1420ffe2 */ bnez $at,.NB0f1190f0
|
|
/* f119168: 24c60004 */ addiu $a2,$a2,0x4
|
|
.NB0f11916c:
|
|
/* f11916c: 03e00008 */ jr $ra
|
|
/* f119170: 00000000 */ sll $zero,$zero,0x0
|
|
);
|
|
|
|
GLOBAL_ASM(
|
|
glabel dmenuNavigateLeft
|
|
/* f119174: 3c038008 */ lui $v1,0x8008
|
|
/* f119178: 8c638134 */ lw $v1,-0x7ecc($v1)
|
|
/* f11917c: 3c078008 */ lui $a3,0x8008
|
|
/* f119180: 24e78120 */ addiu $a3,$a3,-32480
|
|
/* f119184: 8ce20000 */ lw $v0,0x0($a3)
|
|
/* f119188: 8c640000 */ lw $a0,0x0($v1)
|
|
/* f11918c: 3c058008 */ lui $a1,0x8008
|
|
/* f119190: 0044082a */ slt $at,$v0,$a0
|
|
/* f119194: 50200017 */ beqzl $at,.NB0f1191f4
|
|
/* f119198: 0044082a */ slt $at,$v0,$a0
|
|
/* f11919c: 8ca58130 */ lw $a1,-0x7ed0($a1)
|
|
/* f1191a0: 00002025 */ or $a0,$zero,$zero
|
|
/* f1191a4: 24a5ffff */ addiu $a1,$a1,-1
|
|
/* f1191a8: 18a00005 */ blez $a1,.NB0f1191c0
|
|
/* f1191ac: 00000000 */ sll $zero,$zero,0x0
|
|
/* f1191b0: 24840001 */ addiu $a0,$a0,0x1
|
|
.NB0f1191b4:
|
|
/* f1191b4: 0085082a */ slt $at,$a0,$a1
|
|
/* f1191b8: 5420fffe */ bnezl $at,.NB0f1191b4
|
|
/* f1191bc: 24840001 */ addiu $a0,$a0,0x1
|
|
.NB0f1191c0:
|
|
/* f1191c0: 18800026 */ blez $a0,.NB0f11925c
|
|
/* f1191c4: 00047080 */ sll $t6,$a0,0x2
|
|
/* f1191c8: 006e2821 */ addu $a1,$v1,$t6
|
|
/* f1191cc: 8caffffc */ lw $t7,-0x4($a1)
|
|
/* f1191d0: 004fc021 */ addu $t8,$v0,$t7
|
|
/* f1191d4: acf80000 */ sw $t8,0x0($a3)
|
|
/* f1191d8: 8ca60000 */ lw $a2,0x0($a1)
|
|
/* f1191dc: 0306082a */ slt $at,$t8,$a2
|
|
/* f1191e0: 1420001e */ bnez $at,.NB0f11925c
|
|
/* f1191e4: 24c8ffff */ addiu $t0,$a2,-1
|
|
/* f1191e8: 03e00008 */ jr $ra
|
|
/* f1191ec: ace80000 */ sw $t0,0x0($a3)
|
|
/* f1191f0: 0044082a */ slt $at,$v0,$a0
|
|
.NB0f1191f4:
|
|
/* f1191f4: 14200008 */ bnez $at,.NB0f119218
|
|
/* f1191f8: 00002825 */ or $a1,$zero,$zero
|
|
/* f1191fc: 00602025 */ or $a0,$v1,$zero
|
|
/* f119200: 8c890004 */ lw $t1,0x4($a0)
|
|
.NB0f119204:
|
|
/* f119204: 24a50001 */ addiu $a1,$a1,0x1
|
|
/* f119208: 24840004 */ addiu $a0,$a0,0x4
|
|
/* f11920c: 0049082a */ slt $at,$v0,$t1
|
|
/* f119210: 5020fffc */ beqzl $at,.NB0f119204
|
|
/* f119214: 8c890004 */ lw $t1,0x4($a0)
|
|
.NB0f119218:
|
|
/* f119218: 00055080 */ sll $t2,$a1,0x2
|
|
/* f11921c: 006a2021 */ addu $a0,$v1,$t2
|
|
/* f119220: 8c8bfffc */ lw $t3,-0x4($a0)
|
|
/* f119224: 24adfffe */ addiu $t5,$a1,-2
|
|
/* f119228: 004b6023 */ subu $t4,$v0,$t3
|
|
/* f11922c: 05a00004 */ bltz $t5,.NB0f119240
|
|
/* f119230: acec0000 */ sw $t4,0x0($a3)
|
|
/* f119234: 8c8ffff8 */ lw $t7,-0x8($a0)
|
|
/* f119238: 018fc021 */ addu $t8,$t4,$t7
|
|
/* f11923c: acf80000 */ sw $t8,0x0($a3)
|
|
.NB0f119240:
|
|
/* f119240: 8c82fffc */ lw $v0,-0x4($a0)
|
|
/* f119244: 8cf90000 */ lw $t9,0x0($a3)
|
|
/* f119248: 2448ffff */ addiu $t0,$v0,-1
|
|
/* f11924c: 0322082a */ slt $at,$t9,$v0
|
|
/* f119250: 14200002 */ bnez $at,.NB0f11925c
|
|
/* f119254: 00000000 */ sll $zero,$zero,0x0
|
|
/* f119258: ace80000 */ sw $t0,0x0($a3)
|
|
.NB0f11925c:
|
|
/* f11925c: 03e00008 */ jr $ra
|
|
/* f119260: 00000000 */ sll $zero,$zero,0x0
|
|
);
|