From 02b571be8d145375ee5851a6be26f3d7b6355fa9 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Thu, 13 Aug 2020 20:34:36 +1000 Subject: [PATCH] Decompile dtDeviceListMenuHandler --- src/game/data/data_02e820.c | 2 +- src/game/game_1a3340.c | 96 ++++++++++------------------------ src/include/game/game_1a3340.h | 2 +- 3 files changed, 29 insertions(+), 71 deletions(-) diff --git a/src/game/data/data_02e820.c b/src/game/data/data_02e820.c index 2661af923..ded02d657 100644 --- a/src/game/data/data_02e820.c +++ b/src/game/data/data_02e820.c @@ -275,7 +275,7 @@ struct menudialog menudialog_2f3c0 = { // 2f3d8 struct menuitem menuitems_devicelist[] = { - { MENUITEMTYPE_CUSTOM, 0, 0x00000008, 0x000000a0, 0x00000000, menuhandler001a63e4 }, + { MENUITEMTYPE_CUSTOM, 0, 0x00000008, 0x000000a0, 0x00000000, dtDeviceListMenuHandler }, { MENUITEMTYPE_END, 0, 0x00000000, 0x00000000, 0x00000000, NULL }, }; diff --git a/src/game/game_1a3340.c b/src/game/game_1a3340.c index 353a7977f..3b21815d8 100644 --- a/src/game/game_1a3340.c +++ b/src/game/game_1a3340.c @@ -3014,75 +3014,33 @@ char *ciMenuTextMiscBioName(struct menuitem *item) return g_StringPointer; } -GLOBAL_ASM( -glabel menuhandler001a63e4 -.late_rodata -glabel var7f1b997c -.word menuhandler001a63e4+0x30 # f1a6414 -glabel var7f1b9980 -.word menuhandler001a63e4+0x94 # f1a6478 -glabel var7f1b9984 -.word menuhandler001a63e4+0x44 # f1a6428 -glabel var7f1b9988 -.word menuhandler001a63e4+0x9c # f1a6480 -glabel var7f1b998c -.word menuhandler001a63e4+0xa4 # f1a6488 -glabel var7f1b9990 -.word menuhandler001a63e4+0x64 # f1a6448 -glabel var7f1b9994 -.word menuhandler001a63e4+0x84 # f1a6468 -.text -/* f1a63e4: 248effff */ addiu $t6,$a0,-1 -/* f1a63e8: 27bdffe8 */ addiu $sp,$sp,-24 -/* f1a63ec: 2dc10007 */ sltiu $at,$t6,0x7 -/* f1a63f0: afbf0014 */ sw $ra,0x14($sp) -/* f1a63f4: 10200025 */ beqz $at,.L0f1a648c -/* f1a63f8: afa5001c */ sw $a1,0x1c($sp) -/* f1a63fc: 000e7080 */ sll $t6,$t6,0x2 -/* f1a6400: 3c017f1c */ lui $at,%hi(var7f1b997c) -/* f1a6404: 002e0821 */ addu $at,$at,$t6 -/* f1a6408: 8c2e997c */ lw $t6,%lo(var7f1b997c)($at) -/* f1a640c: 01c00008 */ jr $t6 -/* f1a6410: 00000000 */ nop -/* f1a6414: 0fc68744 */ jal dtGetNumAvailable -/* f1a6418: afa60020 */ sw $a2,0x20($sp) -/* f1a641c: 8fa60020 */ lw $a2,0x20($sp) -/* f1a6420: 1000001a */ b .L0f1a648c -/* f1a6424: acc20000 */ sw $v0,0x0($a2) -/* f1a6428: 0fc6875a */ jal dtGetIndexBySlot -/* f1a642c: 8cc40000 */ lw $a0,0x0($a2) -/* f1a6430: 0fc68778 */ jal dtGetWeaponByDeviceIndex -/* f1a6434: 00402025 */ or $a0,$v0,$zero -/* f1a6438: 0fc28857 */ jal weaponGetName -/* f1a643c: 00402025 */ or $a0,$v0,$zero -/* f1a6440: 10000014 */ b .L0f1a6494 -/* f1a6444: 8fbf0014 */ lw $ra,0x14($sp) -/* f1a6448: 8ccf0000 */ lw $t7,0x0($a2) -/* f1a644c: 3c018009 */ lui $at,%hi(g_DtSlot) -/* f1a6450: 3c048009 */ lui $a0,%hi(g_DeviceTrainingDetailsMenuDialog) -/* f1a6454: 2484947c */ addiu $a0,$a0,%lo(g_DeviceTrainingDetailsMenuDialog) -/* f1a6458: 0fc3cbd3 */ jal menuPushDialog -/* f1a645c: a02f8ad8 */ sb $t7,%lo(g_DtSlot)($at) -/* f1a6460: 1000000b */ b .L0f1a6490 -/* f1a6464: 00001025 */ or $v0,$zero,$zero -/* f1a6468: 3c188009 */ lui $t8,%hi(g_DtSlot) -/* f1a646c: 93188ad8 */ lbu $t8,%lo(g_DtSlot)($t8) -/* f1a6470: 10000006 */ b .L0f1a648c -/* f1a6474: acd80000 */ sw $t8,0x0($a2) -/* f1a6478: 10000004 */ b .L0f1a648c -/* f1a647c: acc00000 */ sw $zero,0x0($a2) -/* f1a6480: 10000003 */ b .L0f1a6490 -/* f1a6484: 00001025 */ or $v0,$zero,$zero -/* f1a6488: acc00008 */ sw $zero,0x8($a2) -.L0f1a648c: -/* f1a648c: 00001025 */ or $v0,$zero,$zero -.L0f1a6490: -/* f1a6490: 8fbf0014 */ lw $ra,0x14($sp) -.L0f1a6494: -/* f1a6494: 27bd0018 */ addiu $sp,$sp,0x18 -/* f1a6498: 03e00008 */ jr $ra -/* f1a649c: 00000000 */ nop -); +char *dtDeviceListMenuHandler(u32 operation, struct menuitem *item, s32 *value) +{ + switch (operation) { + case MENUOP_GETOPTIONCOUNT: + *value = dtGetNumAvailable(); + break; + case MENUOP_GETOPTIONTEXT: + return weaponGetName(dtGetWeaponByDeviceIndex(dtGetIndexBySlot(*value))); + case MENUOP_SET: + g_DtSlot = *value; + menuPushDialog(&g_DeviceTrainingDetailsMenuDialog); + break; + case MENUOP_GETOPTIONVALUE: + *value = g_DtSlot; + break; + case MENUOP_GETOPTGROUPCOUNT: + *value = 0; + break; + case MENUOP_GETOPTGROUPTEXT: + return NULL; + case MENUOP_GETGROUPSTARTINDEX: + value[2] = 0; + break; + } + + return NULL; +} char *dtMenuTextName(struct menuitem *item) { diff --git a/src/include/game/game_1a3340.h b/src/include/game/game_1a3340.h index 65836532b..61ded5331 100644 --- a/src/include/game/game_1a3340.h +++ b/src/include/game/game_1a3340.h @@ -51,7 +51,7 @@ s32 menuhandler001a348c(u32, u32, u32 *); s32 menuhandler001a44c0(u32, u32, u32 *); s32 menuhandlerFrFailedContinue(u32 operation, struct menuitem *item, s32 *value); s32 menuhandler001a5dc0(u32, u32, u32 *); -s32 menuhandler001a63e4(u32, u32, u32 *); +char *dtDeviceListMenuHandler(u32 operation, struct menuitem *item, s32 *value); s32 menuhandlerDtOkOrResume(u32 operation, struct menuitem *item, s32 *value); s32 menuhandler001a6514(u32 operation, struct menuitem *item, s32 *value); char *htHoloListMenuHandler(u32 operation, struct menuitem *item, s32 *value);