From d672e3c71f7538ec9194e0840943590d17f71457 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Mon, 29 Jun 2020 18:13:40 +1000 Subject: [PATCH] Decompile modelGetPart --- src/files/setup/setupame.c | 2 +- src/files/setup/setupark.c | 6 +- src/files/setup/setupazt.c | 2 +- src/files/setup/setupimp.c | 2 +- src/files/setup/setuplee.c | 4 +- src/files/setup/setuprit.c | 2 +- src/files/setup/setupsho.c | 4 +- src/files/setup/setupwax.c | 6 +- src/game/camdraw.c | 6 +- src/game/chr/chr.c | 42 +++++------ src/game/chr/chraction.c | 42 +++++------ src/game/chr/chrai.c | 4 +- src/game/chr/chraicommands.c | 8 +-- src/game/game_00c490.c | 10 +-- src/game/game_02cde0.c | 6 +- src/game/game_097ba0.c | 58 +++++++-------- src/game/game_0f09f0.c | 10 +-- src/game/propobj.c | 104 +++++++++++++-------------- src/game/title.c | 40 +++++------ src/include/commands.h | 22 ++++-- src/include/constants.h | 10 +++ src/include/game/chr/chraction.h | 2 +- src/include/game/chr/chraicommands.h | 4 +- src/include/game/propobj.h | 2 +- src/include/lib/lib_1a500.h | 6 +- src/include/types.h | 17 +++-- src/lib/lib_1a500.c | 83 +++++++++------------ 27 files changed, 254 insertions(+), 250 deletions(-) diff --git a/src/files/setup/setupame.c b/src/files/setup/setupame.c index d4e3e9431..9d9d0ddbd 100644 --- a/src/files/setup/setupame.c +++ b/src/files/setup/setupame.c @@ -3275,7 +3275,7 @@ u8 func100f_check_necklace_collected[] = { endloop(0x04) label(0x2c) - remove_cass_necklace(CHR_CASS) + chr_toggle_modelpart(CHR_CASS, MODELPART_NECKLACE) set_ailist(CHR_SELF, GAILIST_IDLE) endlist }; diff --git a/src/files/setup/setupark.c b/src/files/setup/setupark.c index 5a486077c..417ee3213 100644 --- a/src/files/setup/setupark.c +++ b/src/files/setup/setupark.c @@ -1831,7 +1831,7 @@ u8 func0409_tech_conversation[] = { }; u8 func040d_cass_necklace[] = { - remove_cass_necklace(CHR_CASS) + chr_toggle_modelpart(CHR_CASS, MODELPART_NECKLACE) set_ailist(CHR_SELF, GAILIST_IDLE) endlist }; @@ -2089,7 +2089,7 @@ u8 func040d_cass[] = { label(0x2d) set_chr_hiddenflag(CHR_CASS, CHRHFLAG_00100000) - remove_cass_necklace(CHR_CASS) + chr_toggle_modelpart(CHR_CASS, MODELPART_NECKLACE) chr_move_to_pad(CHR_CASS, 0x0205, 0x00, /*goto*/ 0x00) dprint 'M','O','V','E',' ','F','A','I','L','\n',0, label(0x00) @@ -2418,7 +2418,7 @@ u8 func0412_outro[] = { dprint 'c','u','t',' ','s','c','e','n','e',' ','2',0, set_chr_chrflag(CHR_P1P2, CHRCFLAG_INVINCIBLE_TO_GUNFIRE) set_chr_chrflag(CHR_CASS, CHRCFLAG_INVINCIBLE_TO_GUNFIRE) - remove_cass_necklace(CHR_CASS) + chr_toggle_modelpart(CHR_CASS, MODELPART_NECKLACE) set_chr_chrflag(CHR_MRBLONDE, CHRCFLAG_INVINCIBLE_TO_GUNFIRE) set_chr_chrflag(CHR_OUTRO_GUARD1, CHRCFLAG_INVINCIBLE_TO_GUNFIRE) set_chr_chrflag(CHR_OUTRO_GUARD2, CHRCFLAG_INVINCIBLE_TO_GUNFIRE) diff --git a/src/files/setup/setupazt.c b/src/files/setup/setupazt.c index f10263767..accbdbe2b 100644 --- a/src/files/setup/setupazt.c +++ b/src/files/setup/setupazt.c @@ -1936,7 +1936,7 @@ u8 func1014_setup_skedar_shuttle[] = { yield show_object(OBJ_SKEDAR_SHUTTLE) set_object_flag3(OBJ_SKEDAR_SHUTTLE, OBJFLAG3_00000010) - set_object_part_visible(OBJ_SKEDAR_SHUTTLE, FALSE) + object_set_modelpart_visible(OBJ_SKEDAR_SHUTTLE, MODELPART_SKGANGWAY, FALSE) object_do_animation(0x0486, OBJ_SKEDAR_SHUTTLE, 0x01, 0xffff) set_ailist(CHR_SELF, GAILIST_IDLE) endlist diff --git a/src/files/setup/setupimp.c b/src/files/setup/setupimp.c index f01852517..543803730 100644 --- a/src/files/setup/setupimp.c +++ b/src/files/setup/setupimp.c @@ -3203,7 +3203,7 @@ u8 func1022_skedar_shuttle[] = { set_object_flag2(OBJ_SKEDAR_SHUTTLE, OBJFLAG2_04000000) set_object_flag3(OBJ_SKEDAR_SHUTTLE, OBJFLAG3_00000010) object_do_animation(0x045a, OBJ_SKEDAR_SHUTTLE, 0x04, 0xffff) - set_object_part_visible(OBJ_SKEDAR_SHUTTLE, FALSE) + object_set_modelpart_visible(OBJ_SKEDAR_SHUTTLE, MODELPART_SKGANGWAY, FALSE) set_object_flag(OBJ_SKEDAR_SHUTTLE, OBJFLAG_00000100) unset_chr_chrflag(CHR_BLONDE1, CHRCFLAG_HIDDEN) diff --git a/src/files/setup/setuplee.c b/src/files/setup/setuplee.c index b757a91eb..3254eb2fb 100644 --- a/src/files/setup/setuplee.c +++ b/src/files/setup/setuplee.c @@ -2819,7 +2819,7 @@ u8 func0c01_outro[] = { set_object_flag2(OBJ_OUTRO_SHUTTLE, OBJFLAG2_04000000) set_object_flag3(OBJ_OUTRO_SHUTTLE, OBJFLAG3_00000010) object_do_animation(0x01e4, OBJ_OUTRO_SHUTTLE, 0x04, 0xffff) - set_object_part_visible(OBJ_OUTRO_SHUTTLE, FALSE) + object_set_modelpart_visible(OBJ_OUTRO_SHUTTLE, MODELPART_SKGANGWAY, FALSE) show_nonessential_chrs(FALSE) restart_timer @@ -3375,7 +3375,7 @@ u8 func1002_hangar_shuttle[] = { yield show_object(OBJ_HANGAR_SHUTTLE) set_object_flag3(OBJ_HANGAR_SHUTTLE, OBJFLAG3_00000010) - set_object_part_visible(OBJ_HANGAR_SHUTTLE, FALSE) + object_set_modelpart_visible(OBJ_HANGAR_SHUTTLE, MODELPART_SKGANGWAY, FALSE) label(0x09) restart_timer diff --git a/src/files/setup/setuprit.c b/src/files/setup/setuprit.c index caef9bcde..91a19d9e2 100644 --- a/src/files/setup/setuprit.c +++ b/src/files/setup/setuprit.c @@ -3581,7 +3581,7 @@ u8 func1019_midcutscene[] = { set_object_flag2(0x19, OBJFLAG2_04000000) set_object_flag3(0x19, OBJFLAG3_00000010) object_do_animation(0x02e0, 0x19, 0x04, 0xffff) - set_object_part_visible(0x19, TRUE) + object_set_modelpart_visible(0x19, MODELPART_SKGANGWAY, TRUE) show_object(0x37) set_object_flag2(0x37, OBJFLAG2_04000000) diff --git a/src/files/setup/setupsho.c b/src/files/setup/setupsho.c index 805a91678..f822d6b4e 100644 --- a/src/files/setup/setupsho.c +++ b/src/files/setup/setupsho.c @@ -2690,7 +2690,7 @@ u8 func0c00_intro[] = { set_object_flag2(0x36, OBJFLAG2_04000000) set_object_flag3(0x36, OBJFLAG3_00000010) object_do_animation(0x02fa, 0x36, 0x01, 0xffff) - set_object_part_visible(0x36, FALSE) + object_set_modelpart_visible(0x36, MODELPART_SKGANGWAY, FALSE) beginloop(0x0e) if_camera_animating(/*goto*/ 0x2d) @@ -2759,7 +2759,7 @@ u8 func0c00_intro[] = { set_object_flag2(0x36, OBJFLAG2_04000000) set_object_flag3(0x36, OBJFLAG3_00000010) object_do_animation(0x0302, 0x36, 0x04, 0xffff) - set_object_part_visible(0x36, FALSE) + object_set_modelpart_visible(0x36, MODELPART_SKGANGWAY, FALSE) set_chr_chrflag(CHR_BOND, CHRCFLAG_UNPLAYABLE) set_chr_hiddenflag(CHR_BOND, CHRHFLAG_00020000) diff --git a/src/files/setup/setupwax.c b/src/files/setup/setupwax.c index f36b0681d..c7ee50075 100644 --- a/src/files/setup/setupwax.c +++ b/src/files/setup/setupwax.c @@ -1366,7 +1366,7 @@ u8 func0411_cass_in_office[] = { }; u8 func0413_cass_running[] = { - remove_cass_necklace(CHR_CASS) + chr_toggle_modelpart(CHR_CASS, MODELPART_NECKLACE) unset_self_chrflag(CHRCFLAG_INVINCIBLE_TO_GUNFIRE) set_shotlist(AILIST_CASS_RUNNING) if_chr_dead(CHR_CASS, /*goto*/ 0x06) @@ -2029,7 +2029,7 @@ u8 func0417_outro[] = { object_do_animation(0x0475, OBJ_SHUTTLE2, 0x04, 0xffff) show_nonessential_chrs(FALSE) restart_timer - set_object_part_visible(OBJ_SHUTTLE2, FALSE) + object_set_modelpart_visible(OBJ_SHUTTLE2, MODELPART_SKGANGWAY, FALSE) beginloop(0x08) if_camera_animating(/*goto*/ 0x2c) @@ -2120,7 +2120,7 @@ u8 func1011_shuttle_animation[] = { yield show_object(OBJ_SHUTTLE1) set_object_flag3(OBJ_SHUTTLE1, OBJFLAG3_00000010) - set_object_part_visible(OBJ_SHUTTLE1, FALSE) + object_set_modelpart_visible(OBJ_SHUTTLE1, MODELPART_SKGANGWAY, FALSE) label(0x09) restart_timer diff --git a/src/game/camdraw.c b/src/game/camdraw.c index b49aa6dc9..644c78cd5 100644 --- a/src/game/camdraw.c +++ b/src/game/camdraw.c @@ -6593,15 +6593,15 @@ glabel func0f14f07c /* f14f2c0: afbf001c */ sw $ra,0x1c($sp) /* f14f2c4: afa40058 */ sw $a0,0x58($sp) /* f14f2c8: afa60060 */ sw $a2,0x60($sp) -/* f14f2cc: 0c006a47 */ jal func0001a91c +/* f14f2cc: 0c006a47 */ jal modelGetPart /* f14f2d0: 24050190 */ addiu $a1,$zero,0x190 /* f14f2d4: afa20054 */ sw $v0,0x54($sp) /* f14f2d8: 8fa40058 */ lw $a0,0x58($sp) -/* f14f2dc: 0c006a47 */ jal func0001a91c +/* f14f2dc: 0c006a47 */ jal modelGetPart /* f14f2e0: 24050191 */ addiu $a1,$zero,0x191 /* f14f2e4: 8fa40058 */ lw $a0,0x58($sp) /* f14f2e8: 24050192 */ addiu $a1,$zero,0x192 -/* f14f2ec: 0c006a47 */ jal func0001a91c +/* f14f2ec: 0c006a47 */ jal modelGetPart /* f14f2f0: afa20050 */ sw $v0,0x50($sp) /* f14f2f4: 8fad0060 */ lw $t5,0x60($sp) /* f14f2f8: 8fa30050 */ lw $v1,0x50($sp) diff --git a/src/game/chr/chr.c b/src/game/chr/chr.c index 6ca87f080..da0dea762 100644 --- a/src/game/chr/chr.c +++ b/src/game/chr/chr.c @@ -2523,7 +2523,7 @@ struct prop *func0f020b14(struct prop *prop, struct model *model, struct chrdata *chr; struct coord testpos; f32 ground; - u32 value; + u32 nodetype; prop->type = PROPTYPE_CHR; @@ -2557,10 +2557,10 @@ struct prop *func0f020b14(struct prop *prop, struct model *model, func0f0220ac(chr); func0001ad34(model, &prop->pos); - value = chr->model->unk08->unk00->unk00; + nodetype = chr->model->unk08->rootnode->type; - if ((value & 0xff) == 1) { - struct model10 *thing = func0001aa1c(chr->model, chr->model->unk08->unk00); + if ((nodetype & 0xff) == MODELNODETYPE_ROOT) { + struct model10 *thing = func0001aa1c(chr->model, chr->model->unk08->rootnode); thing->ground = ground; } @@ -5911,7 +5911,7 @@ glabel var7f1a87d8 /* f0243c0: 8c880004 */ lw $t0,0x4($a0) /* f0243c4: 5728003e */ bnel $t9,$t0,.L0f0244c0 /* f0243c8: 8fb801f0 */ lw $t8,0x1f0($sp) -/* f0243cc: 0c006a47 */ jal func0001a91c +/* f0243cc: 0c006a47 */ jal modelGetPart /* f0243d0: 24050004 */ addiu $a1,$zero,0x4 /* f0243d4: 10400039 */ beqz $v0,.L0f0244bc /* f0243d8: 00402825 */ or $a1,$v0,$zero @@ -5925,7 +5925,7 @@ glabel var7f1a87d8 /* f0243f8: 24050001 */ addiu $a1,$zero,0x1 /* f0243fc: 51200030 */ beqzl $t1,.L0f0244c0 /* f024400: 8fb801f0 */ lw $t8,0x1f0($sp) -/* f024404: 0c006a47 */ jal func0001a91c +/* f024404: 0c006a47 */ jal modelGetPart /* f024408: 8c440000 */ lw $a0,0x0($v0) /* f02440c: 1040002b */ beqz $v0,.L0f0244bc /* f024410: 00402825 */ or $a1,$v0,$zero @@ -6031,16 +6031,16 @@ void chrSetHudpieceVisible(struct chrdata *chr, bool visible) struct model08 *model08 = chr->model->unk08; if (model08->unk04 == &stagethinglist_22e60) { - struct model08_00 *model08_00 = func0001a91c(model08, 4); + struct modelnode *node = modelGetPart(model08, MODELPART_HUDPIECE); - if (model08_00 && model08_00->unk00 == 0x17) { - struct model10 *model10 = func0001aa1c(chr->model, model08_00); + if (node && node->type == MODELNODETYPE_HEADSPOT) { + struct model10 *model10 = func0001aa1c(chr->model, node); if (model10->unk00.model08) { - struct model08_00 *model08_00_2 = func0001a91c(model10->unk00.model08, 4); + struct modelnode *node2 = modelGetPart(model10->unk00.model08, MODELPART_HUDPIECE); - if (model08_00_2) { - model10 = func0001aa1c(chr->model, model08_00_2); + if (node2) { + model10 = func0001aa1c(chr->model, node2); model10->unk00.u32 = visible; } } @@ -7355,12 +7355,12 @@ glabel var7f1a8900 /* f025980: 8c8f0004 */ lw $t7,0x4($a0) /* f025984: 570f0020 */ bnel $t8,$t7,.L0f025a08 /* f025988: 82020006 */ lb $v0,0x6($s0) -/* f02598c: 0c006a47 */ jal func0001a91c +/* f02598c: 0c006a47 */ jal modelGetPart /* f025990: 24050004 */ addiu $a1,$zero,0x4 /* f025994: 8fac0118 */ lw $t4,0x118($sp) /* f025998: 24050005 */ addiu $a1,$zero,0x5 /* f02599c: 8d840008 */ lw $a0,0x8($t4) -/* f0259a0: 0c006a47 */ jal func0001a91c +/* f0259a0: 0c006a47 */ jal modelGetPart /* f0259a4: afa20080 */ sw $v0,0x80($sp) /* f0259a8: 8fa60080 */ lw $a2,0x80($sp) /* f0259ac: 50c00016 */ beqzl $a2,.L0f025a08 @@ -7406,7 +7406,7 @@ glabel var7f1a8900 /* f025a3c: 8c890004 */ lw $t1,0x4($a0) /* f025a40: 55a9002f */ bnel $t5,$t1,.L0f025b00 /* f025a44: 920c02fe */ lbu $t4,0x2fe($s0) -/* f025a48: 0c006a47 */ jal func0001a91c +/* f025a48: 0c006a47 */ jal modelGetPart /* f025a4c: 24050004 */ addiu $a1,$zero,0x4 /* f025a50: 1040002a */ beqz $v0,.L0f025afc /* f025a54: 00402825 */ or $a1,$v0,$zero @@ -7421,12 +7421,12 @@ glabel var7f1a8900 /* f025a78: 51c00021 */ beqzl $t6,.L0f025b00 /* f025a7c: 920c02fe */ lbu $t4,0x2fe($s0) /* f025a80: 8c440000 */ lw $a0,0x0($v0) -/* f025a84: 0c006a47 */ jal func0001a91c +/* f025a84: 0c006a47 */ jal modelGetPart /* f025a88: afa2006c */ sw $v0,0x6c($sp) /* f025a8c: 8fa3006c */ lw $v1,0x6c($sp) /* f025a90: 24050003 */ addiu $a1,$zero,0x3 /* f025a94: 8c640000 */ lw $a0,0x0($v1) -/* f025a98: 0c006a47 */ jal func0001a91c +/* f025a98: 0c006a47 */ jal modelGetPart /* f025a9c: afa20068 */ sw $v0,0x68($sp) /* f025aa0: 8fa60068 */ lw $a2,0x68($sp) /* f025aa4: 50c00016 */ beqzl $a2,.L0f025b00 @@ -13977,7 +13977,7 @@ glabel func0f02b7d4 /* f02b848: 8d2a0004 */ lw $t2,0x4($t1) /* f02b84c: 24050067 */ addiu $a1,$zero,0x67 /* f02b850: 8d570018 */ lw $s7,0x18($t2) -/* f02b854: 0c006a47 */ jal func0001a91c +/* f02b854: 0c006a47 */ jal modelGetPart /* f02b858: 8ee40008 */ lw $a0,0x8($s7) /* f02b85c: afa20058 */ sw $v0,0x58($sp) .L0f02b860: @@ -14405,7 +14405,7 @@ glabel func0f02bdf8 /* f02be70: 24050067 */ addiu $a1,$zero,0x67 /* f02be74: 8df70018 */ lw $s7,0x18($t7) /* f02be78: 8ee40008 */ lw $a0,0x8($s7) -/* f02be7c: 0c006a47 */ jal func0001a91c +/* f02be7c: 0c006a47 */ jal modelGetPart /* f02be80: afb20154 */ sw $s2,0x154($sp) /* f02be84: 0040b025 */ or $s6,$v0,$zero .L0f02be88: @@ -15418,11 +15418,11 @@ glabel func0f02ccb4 /* f02cd1c: 24120001 */ addiu $s2,$zero,0x1 /* f02cd20: 8e640008 */ lw $a0,0x8($s3) .L0f02cd24: -/* f02cd24: 0c006a47 */ jal func0001a91c +/* f02cd24: 0c006a47 */ jal modelGetPart /* f02cd28: 02202825 */ or $a1,$s1,$zero /* f02cd2c: afa2005c */ sw $v0,0x5c($sp) /* f02cd30: 8e640008 */ lw $a0,0x8($s3) -/* f02cd34: 0c006a47 */ jal func0001a91c +/* f02cd34: 0c006a47 */ jal modelGetPart /* f02cd38: 26250006 */ addiu $a1,$s1,0x6 /* f02cd3c: afa20060 */ sw $v0,0x60($sp) /* f02cd40: 27b0005c */ addiu $s0,$sp,0x5c diff --git a/src/game/chr/chraction.c b/src/game/chr/chraction.c index 37498dd50..5c7efd565 100644 --- a/src/game/chr/chraction.c +++ b/src/game/chr/chraction.c @@ -14839,7 +14839,7 @@ glabel var7f1a8fc8 /* f03f2f8: 8c470018 */ lw $a3,0x18($v0) /* f03f2fc: afa00114 */ sw $zero,0x114($sp) /* f03f300: 8ce40008 */ lw $a0,0x8($a3) -/* f03f304: 0c006a47 */ jal func0001a91c +/* f03f304: 0c006a47 */ jal modelGetPart /* f03f308: afa70124 */ sw $a3,0x124($sp) /* f03f30c: 8fa70124 */ lw $a3,0x124($sp) /* f03f310: 10400026 */ beqz $v0,.L0f03f3ac @@ -14884,7 +14884,7 @@ glabel var7f1a8fc8 .L0f03f3ac: /* f03f3ac: 8ce40008 */ lw $a0,0x8($a3) /* f03f3b0: afa70124 */ sw $a3,0x124($sp) -/* f03f3b4: 0c006a47 */ jal func0001a91c +/* f03f3b4: 0c006a47 */ jal modelGetPart /* f03f3b8: 24050001 */ addiu $a1,$zero,0x1 /* f03f3bc: 8fa70124 */ lw $a3,0x124($sp) /* f03f3c0: 10400017 */ beqz $v0,.L0f03f420 @@ -15680,7 +15680,7 @@ glabel func0f03fde4 /* f03fe34: 8fbf001c */ lw $ra,0x1c($sp) /* f03fe38: 8ce40008 */ lw $a0,0x8($a3) /* f03fe3c: afa700bc */ sw $a3,0xbc($sp) -/* f03fe40: 0c006a47 */ jal func0001a91c +/* f03fe40: 0c006a47 */ jal modelGetPart /* f03fe44: afa000b8 */ sw $zero,0xb8($sp) /* f03fe48: 8fa600b8 */ lw $a2,0xb8($sp) /* f03fe4c: 8fa700bc */ lw $a3,0xbc($sp) @@ -15713,7 +15713,7 @@ glabel func0f03fde4 /* f03feb4: 8ce40008 */ lw $a0,0x8($a3) /* f03feb8: afa700bc */ sw $a3,0xbc($sp) /* f03febc: afa600b8 */ sw $a2,0xb8($sp) -/* f03fec0: 0c006a47 */ jal func0001a91c +/* f03fec0: 0c006a47 */ jal modelGetPart /* f03fec4: 24050001 */ addiu $a1,$zero,0x1 /* f03fec8: 8fa600b8 */ lw $a2,0xb8($sp) /* f03fecc: 8fa700bc */ lw $a3,0xbc($sp) @@ -18617,20 +18617,20 @@ void chrTickAttackAmount(struct chrdata *chr) */ void robotSetMuzzleFlash(struct chrdata *chr, bool right, bool enabled) { - struct model08_00 *model08_00; + struct modelnode *node; struct model10 *model10; - s32 value; + s32 partnum; if (right) { - value = 2; + partnum = MODELPART_MUZZLEFLASHRIGHT; } else { - value = 3; + partnum = MODELPART_MUZZLEFLASHLEFT; } - model08_00 = func0001a91c(chr->model->unk08, value); + node = modelGetPart(chr->model->unk08, partnum); - if (model08_00) { - model10 = func0001aa1c(chr->model, model08_00); + if (node) { + model10 = func0001aa1c(chr->model, node); } // @dangerous: model10 may be uninitialised @@ -26522,7 +26522,7 @@ bool chrMoveToPos(struct chrdata *chr, struct coord *pos, s16 *rooms, f32 arg3, struct coord pos2; s16 rooms2[8]; bool result = false; - u32 thing; + u32 nodetype; struct model10 *model10; struct player *player; f32 ground; @@ -26550,10 +26550,10 @@ bool chrMoveToPos(struct chrdata *chr, struct coord *pos, s16 *rooms, f32 arg3, func0f0220ac(chr); func0001ad34(chr->model, &pos2); - thing = chr->model->unk08->unk00->unk00; + nodetype = chr->model->unk08->rootnode->type; - if ((thing & 0xff) == 1) { - model10 = func0001aa1c(chr->model, chr->model->unk08->unk00); + if ((nodetype & 0xff) == MODELNODETYPE_ROOT) { + model10 = func0001aa1c(chr->model, chr->model->unk08->rootnode); model10->ground = ground; } @@ -27829,19 +27829,19 @@ s32 func0f004cd84(s32 arg0, s32 arg1) return arg0; } -void func0f04cf90(struct chrdata *chr, s32 arg1) +void chrToggleModelPart(struct chrdata *chr, s32 partnum) { if (chr && chr->model && chr->model->unk08) { - struct model08_00 *model08_00 = func0001a91c(chr->model->unk08, arg1); + struct modelnode *node = modelGetPart(chr->model->unk08, partnum); struct model10 *model10 = NULL; - if (model08_00) { - model10 = func0001aa1c(chr->model, model08_00); + if (node) { + model10 = func0001aa1c(chr->model, node); } if (model10) { - u32 value = model10->unk00.u32; - model10->unk00.u32 = (value == 0); + bool visible = model10->unk00.u32; + model10->unk00.u32 = !visible; } } } diff --git a/src/game/chr/chrai.c b/src/game/chr/chrai.c index a43b52d5a..131f00fe4 100644 --- a/src/game/chr/chrai.c +++ b/src/game/chr/chrai.c @@ -414,7 +414,7 @@ bool (*g_CommandPointers[])(void) = { /*0x0189*/ aiLiftGoToStop, /*0x018a*/ aiIfLiftAtStop, /*0x018b*/ aiConfigureRain, - /*0x018c*/ aiChrToggleProp, + /*0x018c*/ aiChrToggleModelPart, /*0x018d*/ aiActivateLift, /*0x018e*/ aiMiniSkedarTryPounce, /*0x018f*/ aiIfObjectDistanceToPadLessThan, @@ -483,7 +483,7 @@ bool (*g_CommandPointers[])(void) = { /*0x01ce*/ aiSetPassiveMode, /*0x01cf*/ aiChrSetFiringInCutscene, /*0x01d0*/ aiSetPortalFlag, - /*0x01d1*/ aiSetObjPartVisible, + /*0x01d1*/ aiObjSetModelPartVisible, /*0x01d2*/ aiChrEmitSparks, /*0x01d3*/ aiSetDrCarollImages, /*0x01d4*/ ai01d4, diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index 3544106a6..f73793ec1 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -10003,13 +10003,13 @@ bool aiConfigureSnow(void) /** * @cmd 018c */ -bool aiChrToggleProp(void) +bool aiChrToggleModelPart(void) { u8 *cmd = g_Vars.ailist + g_Vars.aioffset; struct chrdata *chr = chrFindById(g_Vars.chrdata, cmd[2]); if (chr) { - func0f04cf90(chr, cmd[3]); + chrToggleModelPart(chr, cmd[3]); } g_Vars.aioffset += 4; @@ -11092,13 +11092,13 @@ bool aiSetPortalFlag(void) /** * @cmd 01d1 */ -bool aiSetObjPartVisible(void) +bool aiObjSetModelPartVisible(void) { u8 *cmd = g_Vars.ailist + g_Vars.aioffset; struct defaultobj *obj = objFindByTagId(cmd[2]); if (obj && obj->prop) { - objSetPartVisible(obj, cmd[3], cmd[4]); + objSetModelPartVisible(obj, cmd[3], cmd[4]); } g_Vars.aioffset += 5; diff --git a/src/game/game_00c490.c b/src/game/game_00c490.c index b125f650d..a5168dbdb 100644 --- a/src/game/game_00c490.c +++ b/src/game/game_00c490.c @@ -2055,7 +2055,7 @@ glabel var7f1a8058 /* f00df24: 00000000 */ nop /* f00df28: 8c6f0018 */ lw $t7,0x18($v1) /* f00df2c: 00002825 */ or $a1,$zero,$zero -/* f00df30: 0c006a47 */ jal func0001a91c +/* f00df30: 0c006a47 */ jal modelGetPart /* f00df34: 8de40008 */ lw $a0,0x8($t7) /* f00df38: 8e190018 */ lw $t9,0x18($s0) /* f00df3c: 1000001a */ b .L0f00dfa8 @@ -2065,7 +2065,7 @@ glabel var7f1a8058 /* f00df48: 24010002 */ addiu $at,$zero,0x2 /* f00df4c: 8c6e0018 */ lw $t6,0x18($v1) /* f00df50: 24050001 */ addiu $a1,$zero,0x1 -/* f00df54: 0c006a47 */ jal func0001a91c +/* f00df54: 0c006a47 */ jal modelGetPart /* f00df58: 8dc40008 */ lw $a0,0x8($t6) /* f00df5c: 8e080018 */ lw $t0,0x18($s0) /* f00df60: 10000011 */ b .L0f00dfa8 @@ -2076,7 +2076,7 @@ glabel var7f1a8058 /* f00df70: 8c6b0018 */ lw $t3,0x18($v1) /* f00df74: 8c690018 */ lw $t1,0x18($v1) /* f00df78: 24050002 */ addiu $a1,$zero,0x2 -/* f00df7c: 0c006a47 */ jal func0001a91c +/* f00df7c: 0c006a47 */ jal modelGetPart /* f00df80: 8d240008 */ lw $a0,0x8($t1) /* f00df84: 8e0a0018 */ lw $t2,0x18($s0) /* f00df88: 10000007 */ b .L0f00dfa8 @@ -2084,7 +2084,7 @@ glabel var7f1a8058 /* f00df90: 8c6b0018 */ lw $t3,0x18($v1) .L0f00df94: /* f00df94: 24050003 */ addiu $a1,$zero,0x3 -/* f00df98: 0c006a47 */ jal func0001a91c +/* f00df98: 0c006a47 */ jal modelGetPart /* f00df9c: 8d640008 */ lw $a0,0x8($t3) /* f00dfa0: 8e0c0018 */ lw $t4,0x18($s0) /* f00dfa4: ad82001c */ sw $v0,0x1c($t4) @@ -4397,7 +4397,7 @@ glabel var7f1a8224 /* f00fdbc: 24050005 */ addiu $a1,$zero,0x5 /* f00fdc0: 50c0000d */ beqzl $a2,.L0f00fdf8 /* f00fdc4: 3c01bf80 */ lui $at,0xbf80 -/* f00fdc8: 0c006a47 */ jal func0001a91c +/* f00fdc8: 0c006a47 */ jal modelGetPart /* f00fdcc: 8cc40008 */ lw $a0,0x8($a2) /* f00fdd0: 10400008 */ beqz $v0,.L0f00fdf4 /* f00fdd4: 00402825 */ or $a1,$v0,$zero diff --git a/src/game/game_02cde0.c b/src/game/game_02cde0.c index 4d428264a..1d9be64fa 100644 --- a/src/game/game_02cde0.c +++ b/src/game/game_02cde0.c @@ -129,7 +129,7 @@ glabel var7f1a8a84 /* f02cf5c: 25adce40 */ addiu $t5,$t5,%lo(stagethinglist_22e60) /* f02cf60: 15a30090 */ bne $t5,$v1,.L0f02d1a4 /* f02cf64: 01802025 */ or $a0,$t4,$zero -/* f02cf68: 0c006a47 */ jal func0001a91c +/* f02cf68: 0c006a47 */ jal modelGetPart /* f02cf6c: 24050004 */ addiu $a1,$zero,0x4 /* f02cf70: 104000af */ beqz $v0,.L0f02d230 /* f02cf74: afa2003c */ sw $v0,0x3c($sp) @@ -367,7 +367,7 @@ glabel var7f1a8a84 /* f02d2dc: 8fbf0014 */ lw $ra,0x14($sp) /* f02d2e0: 15a00008 */ bnez $t5,.L0f02d304 /* f02d2e4: 01402025 */ or $a0,$t2,$zero -/* f02d2e8: 0c006a47 */ jal func0001a91c +/* f02d2e8: 0c006a47 */ jal modelGetPart /* f02d2ec: 00002825 */ or $a1,$zero,$zero /* f02d2f0: 10400004 */ beqz $v0,.L0f02d304 /* f02d2f4: 00402825 */ or $a1,$v0,$zero @@ -376,7 +376,7 @@ glabel var7f1a8a84 /* f02d300: ac400000 */ sw $zero,0x0($v0) .L0f02d304: /* f02d304: 8fa40054 */ lw $a0,0x54($sp) -/* f02d308: 0c006a47 */ jal func0001a91c +/* f02d308: 0c006a47 */ jal modelGetPart /* f02d30c: 24050004 */ addiu $a1,$zero,0x4 /* f02d310: 10400004 */ beqz $v0,.L0f02d324 /* f02d314: 00402825 */ or $a1,$v0,$zero diff --git a/src/game/game_097ba0.c b/src/game/game_097ba0.c index 5773b4abd..3dda321b6 100644 --- a/src/game/game_097ba0.c +++ b/src/game/game_097ba0.c @@ -536,7 +536,7 @@ glabel func0f097e74 /* f097ea8: 8de41594 */ lw $a0,0x1594($t7) /* f097eac: 5080001b */ beqzl $a0,.L0f097f1c /* f097eb0: 8fbf0014 */ lw $ra,0x14($sp) -/* f097eb4: 0c006a47 */ jal func0001a91c +/* f097eb4: 0c006a47 */ jal modelGetPart /* f097eb8: 87a5001a */ lh $a1,0x1a($sp) /* f097ebc: 50400017 */ beqzl $v0,.L0f097f1c /* f097ec0: 8fbf0014 */ lw $ra,0x14($sp) @@ -550,7 +550,7 @@ glabel func0f097e74 /* f097ee0: 1000000d */ b .L0f097f18 /* f097ee4: ac890000 */ sw $t1,0x0($a0) .L0f097ee8: -/* f097ee8: 0c006a47 */ jal func0001a91c +/* f097ee8: 0c006a47 */ jal modelGetPart /* f097eec: 87a5001a */ lh $a1,0x1a($sp) /* f097ef0: 5040000a */ beqzl $v0,.L0f097f1c /* f097ef4: 8fbf0014 */ lw $ra,0x14($sp) @@ -14565,7 +14565,7 @@ glabel func0f0a37b4 /* f0a37c8: 00a02025 */ or $a0,$a1,$zero /* f0a37cc: afa600a0 */ sw $a2,0xa0($sp) /* f0a37d0: afa700a4 */ sw $a3,0xa4($sp) -/* f0a37d4: 0c006a47 */ jal func0001a91c +/* f0a37d4: 0c006a47 */ jal modelGetPart /* f0a37d8: 24050034 */ addiu $a1,$zero,0x34 /* f0a37dc: 104000ac */ beqz $v0,.L0f0a3a90 /* f0a37e0: 00402025 */ or $a0,$v0,$zero @@ -14796,7 +14796,7 @@ glabel var7f1ac8b8 /* f0a3ab0: afbf002c */ sw $ra,0x2c($sp) /* f0a3ab4: afa5004c */ sw $a1,0x4c($sp) /* f0a3ab8: 00a02025 */ or $a0,$a1,$zero -/* f0a3abc: 0c006a47 */ jal func0001a91c +/* f0a3abc: 0c006a47 */ jal modelGetPart /* f0a3ac0: 2405002c */ addiu $a1,$zero,0x2c /* f0a3ac4: afa20044 */ sw $v0,0x44($sp) /* f0a3ac8: c6000244 */ lwc1 $f0,0x244($s0) @@ -15034,7 +15034,7 @@ glabel var7f1ac8b8 /* f0a3e30: 3c10800a */ lui $s0,%hi(var8009d0f0) /* f0a3e34: 2610d0f0 */ addiu $s0,$s0,%lo(var8009d0f0) /* f0a3e38: 8fa4004c */ lw $a0,0x4c($sp) -/* f0a3e3c: 0c006a47 */ jal func0001a91c +/* f0a3e3c: 0c006a47 */ jal modelGetPart /* f0a3e40: 2405002d */ addiu $a1,$zero,0x2d /* f0a3e44: 10400004 */ beqz $v0,.L0f0a3e58 /* f0a3e48: 00402025 */ or $a0,$v0,$zero @@ -15043,7 +15043,7 @@ glabel var7f1ac8b8 /* f0a3e54: ae020000 */ sw $v0,0x0($s0) .L0f0a3e58: /* f0a3e58: 8fa4004c */ lw $a0,0x4c($sp) -/* f0a3e5c: 0c006a47 */ jal func0001a91c +/* f0a3e5c: 0c006a47 */ jal modelGetPart /* f0a3e60: 2405002e */ addiu $a1,$zero,0x2e /* f0a3e64: 10400004 */ beqz $v0,.L0f0a3e78 /* f0a3e68: 00402025 */ or $a0,$v0,$zero @@ -15052,7 +15052,7 @@ glabel var7f1ac8b8 /* f0a3e74: ae020004 */ sw $v0,0x4($s0) .L0f0a3e78: /* f0a3e78: 8fa4004c */ lw $a0,0x4c($sp) -/* f0a3e7c: 0c006a47 */ jal func0001a91c +/* f0a3e7c: 0c006a47 */ jal modelGetPart /* f0a3e80: 2405002f */ addiu $a1,$zero,0x2f /* f0a3e84: 10400004 */ beqz $v0,.L0f0a3e98 /* f0a3e88: 00402025 */ or $a0,$v0,$zero @@ -15107,19 +15107,19 @@ glabel func0f0a3eac /* f0a3f38: 02002025 */ or $a0,$s0,$zero /* f0a3f3c: 46083283 */ div.s $f10,$f6,$f8 /* f0a3f40: 2405002a */ addiu $a1,$zero,0x2a -/* f0a3f44: 0c006a47 */ jal func0001a91c +/* f0a3f44: 0c006a47 */ jal modelGetPart /* f0a3f48: 460a8681 */ sub.s $f26,$f16,$f10 /* f0a3f4c: afa20098 */ sw $v0,0x98($sp) /* f0a3f50: 02002025 */ or $a0,$s0,$zero -/* f0a3f54: 0c006a47 */ jal func0001a91c +/* f0a3f54: 0c006a47 */ jal modelGetPart /* f0a3f58: 2405002b */ addiu $a1,$zero,0x2b /* f0a3f5c: afa2009c */ sw $v0,0x9c($sp) /* f0a3f60: 02002025 */ or $a0,$s0,$zero -/* f0a3f64: 0c006a47 */ jal func0001a91c +/* f0a3f64: 0c006a47 */ jal modelGetPart /* f0a3f68: 2405002c */ addiu $a1,$zero,0x2c /* f0a3f6c: afa200a0 */ sw $v0,0xa0($sp) /* f0a3f70: 02002025 */ or $a0,$s0,$zero -/* f0a3f74: 0c006a47 */ jal func0001a91c +/* f0a3f74: 0c006a47 */ jal modelGetPart /* f0a3f78: 2405002d */ addiu $a1,$zero,0x2d /* f0a3f7c: 3c0142c8 */ lui $at,0x42c8 /* f0a3f80: 4481c000 */ mtc1 $at,$f24 @@ -15210,7 +15210,7 @@ glabel var7f1ac8c0 /* f0a40a0: 00803825 */ or $a3,$a0,$zero /* f0a40a4: afa70038 */ sw $a3,0x38($sp) /* f0a40a8: 00c02025 */ or $a0,$a2,$zero -/* f0a40ac: 0c006a47 */ jal func0001a91c +/* f0a40ac: 0c006a47 */ jal modelGetPart /* f0a40b0: 24050028 */ addiu $a1,$zero,0x28 /* f0a40b4: 8fa70038 */ lw $a3,0x38($sp) /* f0a40b8: 10400034 */ beqz $v0,.L0f0a418c @@ -15329,7 +15329,7 @@ glabel var7f1ac8c4 /* f0a424c: ade10000 */ sw $at,0x0($t7) /* f0a4250: 8f010008 */ lw $at,0x8($t8) /* f0a4254: ade80004 */ sw $t0,0x4($t7) -/* f0a4258: 0c006a47 */ jal func0001a91c +/* f0a4258: 0c006a47 */ jal modelGetPart /* f0a425c: ade10008 */ sw $at,0x8($t7) /* f0a4260: 8faa0040 */ lw $t2,0x40($sp) /* f0a4264: 24090001 */ addiu $t1,$zero,0x1 @@ -15508,7 +15508,7 @@ glabel var7f1ac8c8 /* f0a44c4: 00000000 */ nop /* f0a44c8: 0007000d */ break 0x7 .L0f0a44cc: -/* f0a44cc: 0c006a47 */ jal func0001a91c +/* f0a44cc: 0c006a47 */ jal modelGetPart /* f0a44d0: 00000000 */ nop /* f0a44d4: 10400013 */ beqz $v0,.L0f0a4524 /* f0a44d8: 00402025 */ or $a0,$v0,$zero @@ -15606,22 +15606,22 @@ glabel func0f0a45d0 /* f0a4614: 10c00006 */ beqz $a2,.L0f0a4630 /* f0a4618: 8fa4001c */ lw $a0,0x1c($sp) /* f0a461c: 8fa4001c */ lw $a0,0x1c($sp) -/* f0a4620: 0c006a47 */ jal func0001a91c +/* f0a4620: 0c006a47 */ jal modelGetPart /* f0a4624: 2405002a */ addiu $a1,$zero,0x2a /* f0a4628: 1000000c */ b .L0f0a465c /* f0a462c: 00403825 */ or $a3,$v0,$zero .L0f0a4630: -/* f0a4630: 0c006a47 */ jal func0001a91c +/* f0a4630: 0c006a47 */ jal modelGetPart /* f0a4634: 24050037 */ addiu $a1,$zero,0x37 /* f0a4638: 10000008 */ b .L0f0a465c /* f0a463c: 00403825 */ or $a3,$v0,$zero .L0f0a4640: -/* f0a4640: 0c006a47 */ jal func0001a91c +/* f0a4640: 0c006a47 */ jal modelGetPart /* f0a4644: 2405002b */ addiu $a1,$zero,0x2b /* f0a4648: 10000004 */ b .L0f0a465c /* f0a464c: 00403825 */ or $a3,$v0,$zero .L0f0a4650: -/* f0a4650: 0c006a47 */ jal func0001a91c +/* f0a4650: 0c006a47 */ jal modelGetPart /* f0a4654: 2405002b */ addiu $a1,$zero,0x2b /* f0a4658: 00403825 */ or $a3,$v0,$zero .L0f0a465c: @@ -16407,7 +16407,7 @@ glabel var7f1ac934 /* f0a50d0: 27b10070 */ addiu $s1,$sp,0x70 /* f0a50d4: 8fa40120 */ lw $a0,0x120($sp) .L0f0a50d8: -/* f0a50d8: 0c006a47 */ jal func0001a91c +/* f0a50d8: 0c006a47 */ jal modelGetPart /* f0a50dc: 02402825 */ or $a1,$s2,$zero /* f0a50e0: 10400077 */ beqz $v0,.L0f0a52c0 /* f0a50e4: 00402025 */ or $a0,$v0,$zero @@ -16679,7 +16679,7 @@ glabel var7f1ac9e0 /* f0a5394: 10000001 */ b .L0f0a539c /* f0a5398: 24050030 */ addiu $a1,$zero,0x30 .L0f0a539c: -/* f0a539c: 0c006a47 */ jal func0001a91c +/* f0a539c: 0c006a47 */ jal modelGetPart /* f0a53a0: 00000000 */ nop /* f0a53a4: 10400017 */ beqz $v0,.L0f0a5404 /* f0a53a8: 00402025 */ or $a0,$v0,$zero @@ -17583,7 +17583,7 @@ glabel var7f1aca70 /* f0a5fd0: 2405005a */ addiu $a1,$zero,0x5a /* f0a5fd4: 8fa40280 */ lw $a0,0x280($sp) .L0f0a5fd8: -/* f0a5fd8: 0c006a47 */ jal func0001a91c +/* f0a5fd8: 0c006a47 */ jal modelGetPart /* f0a5fdc: afa50114 */ sw $a1,0x114($sp) /* f0a5fe0: 1040000c */ beqz $v0,.L0f0a6014 /* f0a5fe4: 8fa50114 */ lw $a1,0x114($sp) @@ -17837,7 +17837,7 @@ glabel var7f1aca70 /* f0a6370: 3c018006 */ lui $at,%hi(var8005efcc) /* f0a6374: ac20efcc */ sw $zero,%lo(var8005efcc)($at) /* f0a6378: 8fa40280 */ lw $a0,0x280($sp) -/* f0a637c: 0c006a47 */ jal func0001a91c +/* f0a637c: 0c006a47 */ jal modelGetPart /* f0a6380: 24050033 */ addiu $a1,$zero,0x33 /* f0a6384: 10400020 */ beqz $v0,.L0f0a6408 /* f0a6388: 00402025 */ or $a0,$v0,$zero @@ -17918,7 +17918,7 @@ glabel var7f1aca70 /* f0a6498: 8fa70280 */ lw $a3,0x280($sp) /* f0a649c: 8fa40280 */ lw $a0,0x280($sp) .L0f0a64a0: -/* f0a64a0: 0c006a47 */ jal func0001a91c +/* f0a64a0: 0c006a47 */ jal modelGetPart /* f0a64a4: 24050032 */ addiu $a1,$zero,0x32 /* f0a64a8: 8faa01c4 */ lw $t2,0x1c4($sp) /* f0a64ac: 24010014 */ addiu $at,$zero,0x14 @@ -17939,7 +17939,7 @@ glabel var7f1aca70 /* f0a64e4: 00a1001a */ div $zero,$a1,$at /* f0a64e8: 0000c810 */ mfhi $t9 /* f0a64ec: 2725001e */ addiu $a1,$t9,0x1e -/* f0a64f0: 0c006a47 */ jal func0001a91c +/* f0a64f0: 0c006a47 */ jal modelGetPart /* f0a64f4: 00000000 */ nop /* f0a64f8: 1000000a */ b .L0f0a6524 /* f0a64fc: 00402025 */ or $a0,$v0,$zero @@ -17950,7 +17950,7 @@ glabel var7f1aca70 /* f0a650c: 00a1001a */ div $zero,$a1,$at /* f0a6510: 00007810 */ mfhi $t7 /* f0a6514: 25e5001e */ addiu $a1,$t7,0x1e -/* f0a6518: 0c006a47 */ jal func0001a91c +/* f0a6518: 0c006a47 */ jal modelGetPart /* f0a651c: 00000000 */ nop /* f0a6520: 00402025 */ or $a0,$v0,$zero .L0f0a6524: @@ -18025,7 +18025,7 @@ glabel var7f1aca70 /* f0a6630: 1541001f */ bne $t2,$at,.L0f0a66b0 /* f0a6634: 26050620 */ addiu $a1,$s0,0x620 .L0f0a6638: -/* f0a6638: 0c006a47 */ jal func0001a91c +/* f0a6638: 0c006a47 */ jal modelGetPart /* f0a663c: 24050037 */ addiu $a1,$zero,0x37 /* f0a6640: 00402025 */ or $a0,$v0,$zero /* f0a6644: 0c006949 */ jal func0001a524 @@ -19104,12 +19104,12 @@ glabel var7f1aca90 /* f0a7548: 8fa300cc */ lw $v1,0xcc($sp) /* f0a754c: 24050010 */ addiu $a1,$zero,0x10 /* f0a7550: ac620004 */ sw $v0,0x4($v1) -/* f0a7554: 0c006a47 */ jal func0001a91c +/* f0a7554: 0c006a47 */ jal modelGetPart /* f0a7558: 8e04038c */ lw $a0,0x38c($s0) /* f0a755c: 10400014 */ beqz $v0,.L0f0a75b0 /* f0a7560: afa200e8 */ sw $v0,0xe8($sp) /* f0a7564: 8e04038c */ lw $a0,0x38c($s0) -/* f0a7568: 0c006a47 */ jal func0001a91c +/* f0a7568: 0c006a47 */ jal modelGetPart /* f0a756c: 24050011 */ addiu $a1,$zero,0x11 /* f0a7570: 8fa4003c */ lw $a0,0x3c($sp) /* f0a7574: 0c006a87 */ jal func0001aa1c @@ -19454,7 +19454,7 @@ glabel var7f1aca90 /* f0a7a48: 03257821 */ addu $t7,$t9,$a1 /* f0a7a4c: 15e10036 */ bne $t7,$at,.L0f0a7b28 /* f0a7a50: 24050041 */ addiu $a1,$zero,0x41 -/* f0a7a54: 0c006a47 */ jal func0001a91c +/* f0a7a54: 0c006a47 */ jal modelGetPart /* f0a7a58: 8e04038c */ lw $a0,0x38c($s0) /* f0a7a5c: 50400033 */ beqzl $v0,.L0f0a7b2c /* f0a7a60: 27a4010c */ addiu $a0,$sp,0x10c diff --git a/src/game/game_0f09f0.c b/src/game/game_0f09f0.c index 393dbf062..462f0da65 100644 --- a/src/game/game_0f09f0.c +++ b/src/game/game_0f09f0.c @@ -4065,7 +4065,7 @@ glabel var7f1b2948 /* f0f3e0c: 8c8e0004 */ lw $t6,0x4($a0) /* f0f3e10: 556e002f */ bnel $t3,$t6,.L0f0f3ed0 /* f0f3e14: 8faf02f4 */ lw $t7,0x2f4($sp) -/* f0f3e18: 0c006a47 */ jal func0001a91c +/* f0f3e18: 0c006a47 */ jal modelGetPart /* f0f3e1c: 24050006 */ addiu $a1,$zero,0x6 /* f0f3e20: 5040002b */ beqzl $v0,.L0f0f3ed0 /* f0f3e24: 8faf02f4 */ lw $t7,0x2f4($sp) @@ -4568,7 +4568,7 @@ glabel var7f1b2948 /* f0f4588: 8fb90448 */ lw $t9,0x448($sp) /* f0f458c: 8e040054 */ lw $a0,0x54($s0) .L0f0f4590: -/* f0f4590: 0c006a47 */ jal func0001a91c +/* f0f4590: 0c006a47 */ jal modelGetPart /* f0f4594: afa3028c */ sw $v1,0x28c($sp) /* f0f4598: 8fa3028c */ lw $v1,0x28c($sp) /* f0f459c: 1040000d */ beqz $v0,.L0f0f45d4 @@ -4930,7 +4930,7 @@ glabel var7f1b2948 /* f0f4ac8: 8c990004 */ lw $t9,0x4($a0) /* f0f4acc: 57190092 */ bnel $t8,$t9,.L0f0f4d18 /* f0f4ad0: 8fb80440 */ lw $t8,0x440($sp) -/* f0f4ad4: 0c006a47 */ jal func0001a91c +/* f0f4ad4: 0c006a47 */ jal modelGetPart /* f0f4ad8: 00002825 */ or $a1,$zero,$zero /* f0f4adc: 5040002e */ beqzl $v0,.L0f0f4b98 /* f0f4ae0: 8e040054 */ lw $a0,0x54($s0) @@ -4984,7 +4984,7 @@ glabel var7f1b2948 .L0f0f4b94: /* f0f4b94: 8e040054 */ lw $a0,0x54($s0) .L0f0f4b98: -/* f0f4b98: 0c006a47 */ jal func0001a91c +/* f0f4b98: 0c006a47 */ jal modelGetPart /* f0f4b9c: 24050002 */ addiu $a1,$zero,0x2 /* f0f4ba0: 10400019 */ beqz $v0,.L0f0f4c08 /* f0f4ba4: 00402025 */ or $a0,$v0,$zero @@ -5014,7 +5014,7 @@ glabel var7f1b2948 /* f0f4c04: 27a400e0 */ addiu $a0,$sp,0xe0 .L0f0f4c08: /* f0f4c08: 8e040054 */ lw $a0,0x54($s0) -/* f0f4c0c: 0c006a47 */ jal func0001a91c +/* f0f4c0c: 0c006a47 */ jal modelGetPart /* f0f4c10: 24050001 */ addiu $a1,$zero,0x1 /* f0f4c14: 1040003f */ beqz $v0,.L0f0f4d14 /* f0f4c18: 00402025 */ or $a0,$v0,$zero diff --git a/src/game/propobj.c b/src/game/propobj.c index 7de37b421..0ea3dff61 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -4606,7 +4606,7 @@ glabel func0f069cd8 /* f069cf4: 24120014 */ addiu $s2,$zero,0x14 .L0f069cf8: /* f069cf8: 8e240008 */ lw $a0,0x8($s1) -/* f069cfc: 0c006a47 */ jal func0001a91c +/* f069cfc: 0c006a47 */ jal modelGetPart /* f069d00: 260500c9 */ addiu $a1,$s0,0xc9 /* f069d04: 10400006 */ beqz $v0,.L0f069d20 /* f069d08: 00402825 */ or $a1,$v0,$zero @@ -4904,7 +4904,7 @@ glabel var7f1aa1fc /* f06a108: ae0b0008 */ sw $t3,0x8($s0) /* f06a10c: ae0e000c */ sw $t6,0xc($s0) /* f06a110: ae190010 */ sw $t9,0x10($s0) -/* f06a114: 0c006a47 */ jal func0001a91c +/* f06a114: 0c006a47 */ jal modelGetPart /* f06a118: 8d040008 */ lw $a0,0x8($t0) /* f06a11c: 10400004 */ beqz $v0,.L0f06a130 /* f06a120: 00402825 */ or $a1,$v0,$zero @@ -4915,7 +4915,7 @@ glabel var7f1aa1fc /* f06a130: 8e090018 */ lw $t1,0x18($s0) /* f06a134: 8fa500ac */ lw $a1,0xac($sp) /* f06a138: 8d240008 */ lw $a0,0x8($t1) -/* f06a13c: 0c006a47 */ jal func0001a91c +/* f06a13c: 0c006a47 */ jal modelGetPart /* f06a140: 24a500c9 */ addiu $a1,$a1,0xc9 /* f06a144: 10400005 */ beqz $v0,.L0f06a15c /* f06a148: 00402825 */ or $a1,$v0,$zero @@ -4947,7 +4947,7 @@ glabel func0f06a170 /* f06a19c: 24110014 */ addiu $s1,$zero,0x14 /* f06a1a0: 8e440008 */ lw $a0,0x8($s2) .L0f06a1a4: -/* f06a1a4: 0c006a47 */ jal func0001a91c +/* f06a1a4: 0c006a47 */ jal modelGetPart /* f06a1a8: 260500c9 */ addiu $a1,$s0,0xc9 /* f06a1ac: 10400007 */ beqz $v0,.L0f06a1cc /* f06a1b0: 02602025 */ or $a0,$s3,$zero @@ -6649,7 +6649,7 @@ glabel func0f06b610 /* f06b9bc: 000952c0 */ sll $t2,$t1,0xb /* f06b9c0: 05410046 */ bgez $t2,.L0f06badc /* f06b9c4: 00000000 */ nop -/* f06b9c8: 0c006a47 */ jal func0001a91c +/* f06b9c8: 0c006a47 */ jal modelGetPart /* f06b9cc: 8e840008 */ lw $a0,0x8($s4) /* f06b9d0: 10400042 */ beqz $v0,.L0f06badc /* f06b9d4: 00402825 */ or $a1,$v0,$zero @@ -19790,7 +19790,7 @@ glabel func0f07731c /* f0773cc: 8c8d0004 */ lw $t5,0x4($a0) /* f0773d0: 558d000c */ bnel $t4,$t5,.L0f077404 /* f0773d4: 8fb80034 */ lw $t8,0x34($sp) -/* f0773d8: 0c006a47 */ jal func0001a91c +/* f0773d8: 0c006a47 */ jal modelGetPart /* f0773dc: afa30024 */ sw $v1,0x24($sp) /* f0773e0: 8fa40020 */ lw $a0,0x20($sp) /* f0773e4: 0c006a87 */ jal func0001aa1c @@ -22928,7 +22928,7 @@ glabel var7f1aa588 /* f079d74: 0c0056f8 */ jal func00015be0 /* f079d78: 8fa50028 */ lw $a1,0x28($sp) /* f079d7c: 8e240008 */ lw $a0,0x8($s1) -/* f079d80: 0c006a47 */ jal func0001a91c +/* f079d80: 0c006a47 */ jal modelGetPart /* f079d84: 24050002 */ addiu $a1,$zero,0x2 /* f079d88: 8fa5005c */ lw $a1,0x5c($sp) /* f079d8c: 8c590004 */ lw $t9,0x4($v0) @@ -22965,7 +22965,7 @@ glabel var7f1aa588 /* f079e08: 02002825 */ or $a1,$s0,$zero .L0f079e0c: /* f079e0c: 8e240008 */ lw $a0,0x8($s1) -/* f079e10: 0c006a47 */ jal func0001a91c +/* f079e10: 0c006a47 */ jal modelGetPart /* f079e14: 24050003 */ addiu $a1,$zero,0x3 /* f079e18: 10400013 */ beqz $v0,.L0f079e68 /* f079e1c: 02202025 */ or $a0,$s1,$zero @@ -22989,7 +22989,7 @@ glabel var7f1aa588 /* f079e64: 02002825 */ or $a1,$s0,$zero .L0f079e68: /* f079e68: 8e240008 */ lw $a0,0x8($s1) -/* f079e6c: 0c006a47 */ jal func0001a91c +/* f079e6c: 0c006a47 */ jal modelGetPart /* f079e70: 24050004 */ addiu $a1,$zero,0x4 /* f079e74: 1040000d */ beqz $v0,.L0f079eac /* f079e78: 02202025 */ or $a0,$s1,$zero @@ -23007,7 +23007,7 @@ glabel var7f1aa588 /* f079ea8: 02002825 */ or $a1,$s0,$zero .L0f079eac: /* f079eac: 8e240008 */ lw $a0,0x8($s1) -/* f079eb0: 0c006a47 */ jal func0001a91c +/* f079eb0: 0c006a47 */ jal modelGetPart /* f079eb4: 24050006 */ addiu $a1,$zero,0x6 /* f079eb8: 10400013 */ beqz $v0,.L0f079f08 /* f079ebc: 02202025 */ or $a0,$s1,$zero @@ -23086,7 +23086,7 @@ glabel var7f1aa5a8 /* f079f84: afad018c */ sw $t5,0x18c($sp) /* f079f88: 8dc40008 */ lw $a0,0x8($t6) /* f079f8c: afa20194 */ sw $v0,0x194($sp) -/* f079f90: 0c006a47 */ jal func0001a91c +/* f079f90: 0c006a47 */ jal modelGetPart /* f079f94: afa20190 */ sw $v0,0x190($sp) /* f079f98: 1040000b */ beqz $v0,.L0f079fc8 /* f079f9c: 8fa30190 */ lw $v1,0x190($sp) @@ -23144,14 +23144,14 @@ glabel var7f1aa5a8 /* f07a05c: 8faf0184 */ lw $t7,0x184($sp) /* f07a060: 8fab0184 */ lw $t3,0x184($sp) /* f07a064: 24050007 */ addiu $a1,$zero,0x7 -/* f07a068: 0c006a47 */ jal func0001a91c +/* f07a068: 0c006a47 */ jal modelGetPart /* f07a06c: 8d640008 */ lw $a0,0x8($t3) /* f07a070: 14400006 */ bnez $v0,.L0f07a08c /* f07a074: 00403825 */ or $a3,$v0,$zero /* f07a078: 8faf0184 */ lw $t7,0x184($sp) .L0f07a07c: /* f07a07c: 24050005 */ addiu $a1,$zero,0x5 -/* f07a080: 0c006a47 */ jal func0001a91c +/* f07a080: 0c006a47 */ jal modelGetPart /* f07a084: 8de40008 */ lw $a0,0x8($t7) /* f07a088: 00403825 */ or $a3,$v0,$zero .L0f07a08c: @@ -23160,7 +23160,7 @@ glabel var7f1aa5a8 /* f07a094: 8fb80184 */ lw $t8,0x184($sp) /* f07a098: 24050003 */ addiu $a1,$zero,0x3 /* f07a09c: 8f040008 */ lw $a0,0x8($t8) -/* f07a0a0: 0c006a47 */ jal func0001a91c +/* f07a0a0: 0c006a47 */ jal modelGetPart /* f07a0a4: afa70120 */ sw $a3,0x120($sp) /* f07a0a8: 8fa70120 */ lw $a3,0x120($sp) /* f07a0ac: afa2011c */ sw $v0,0x11c($sp) @@ -23973,7 +23973,7 @@ glabel var7f1aa5a8 /* f07ac6c: 8fad0184 */ lw $t5,0x184($sp) .L0f07ac70: /* f07ac70: 24050005 */ addiu $a1,$zero,0x5 -/* f07ac74: 0c006a47 */ jal func0001a91c +/* f07ac74: 0c006a47 */ jal modelGetPart /* f07ac78: 8da40008 */ lw $a0,0x8($t5) /* f07ac7c: 10400005 */ beqz $v0,.L0f07ac94 /* f07ac80: 00402825 */ or $a1,$v0,$zero @@ -23984,7 +23984,7 @@ glabel var7f1aa5a8 .L0f07ac94: /* f07ac94: 8fab0184 */ lw $t3,0x184($sp) /* f07ac98: 24050007 */ addiu $a1,$zero,0x7 -/* f07ac9c: 0c006a47 */ jal func0001a91c +/* f07ac9c: 0c006a47 */ jal modelGetPart /* f07aca0: 8d640008 */ lw $a0,0x8($t3) /* f07aca4: 10400005 */ beqz $v0,.L0f07acbc /* f07aca8: 00402825 */ or $a1,$v0,$zero @@ -24783,7 +24783,7 @@ glabel var7f1aa610 /* f07b930: 8fa90114 */ lw $t1,0x114($sp) .L0f07b934: /* f07b934: 24050003 */ addiu $a1,$zero,0x3 -/* f07b938: 0c006a47 */ jal func0001a91c +/* f07b938: 0c006a47 */ jal modelGetPart /* f07b93c: 8d240008 */ lw $a0,0x8($t1) /* f07b940: 10400004 */ beqz $v0,.L0f07b954 /* f07b944: 00402825 */ or $a1,$v0,$zero @@ -27550,10 +27550,10 @@ void func0f07e058(struct prop *prop) struct defaultobj *obj = prop->obj; struct model *model = obj->model; - struct model08_00 *model08_00 = func0001a91c(model->unk08, 0x6e); + struct modelnode *node = modelGetPart(model->unk08, MODELPART_006E); - if (model08_00) { - struct model10 *model10 = func0001aa1c(model, model08_00); + if (node) { + struct model10 *model10 = func0001aa1c(model, node); u32 flags = obj->flags; model10->unk00.u32 = (flags & OBJFLAG_DEACTIVATED) == 0; @@ -28286,7 +28286,7 @@ s32 objTick(struct prop *prop) if (sp556 == false) { model->unk0c = func0f1679f4(model->unk08->unk0e * 64); func0f07e2cc(prop); - func0001cb0c(model, model->unk08->unk00); + func0001cb0c(model, model->unk08->rootnode); } prop->z = -model->unk0c->unk38; @@ -29850,7 +29850,7 @@ glabel func0f0809c4 /* f080a9c: 8fac0070 */ lw $t4,0x70($sp) /* f080aa0: 00002825 */ or $a1,$zero,$zero /* f080aa4: 8d840008 */ lw $a0,0x8($t4) -/* f080aa8: 0c006a47 */ jal func0001a91c +/* f080aa8: 0c006a47 */ jal modelGetPart /* f080aac: afa30060 */ sw $v1,0x60($sp) /* f080ab0: 8fa30060 */ lw $v1,0x60($sp) /* f080ab4: 8fa6005c */ lw $a2,0x5c($sp) @@ -29900,7 +29900,7 @@ glabel func0f0809c4 /* f080b58: 8fb80070 */ lw $t8,0x70($sp) /* f080b5c: 00002825 */ or $a1,$zero,$zero /* f080b60: 8f040008 */ lw $a0,0x8($t8) -/* f080b64: 0c006a47 */ jal func0001a91c +/* f080b64: 0c006a47 */ jal modelGetPart /* f080b68: afa30060 */ sw $v1,0x60($sp) /* f080b6c: 8fa30060 */ lw $v1,0x60($sp) /* f080b70: 8fa60058 */ lw $a2,0x58($sp) @@ -29936,7 +29936,7 @@ glabel func0f0809c4 /* f080be0: 8fad0070 */ lw $t5,0x70($sp) /* f080be4: 24050001 */ addiu $a1,$zero,0x1 /* f080be8: 8da40008 */ lw $a0,0x8($t5) -/* f080bec: 0c006a47 */ jal func0001a91c +/* f080bec: 0c006a47 */ jal modelGetPart /* f080bf0: afa30060 */ sw $v1,0x60($sp) /* f080bf4: 8fa30060 */ lw $v1,0x60($sp) /* f080bf8: 8fa60058 */ lw $a2,0x58($sp) @@ -29951,7 +29951,7 @@ glabel func0f0809c4 /* f080c1c: 8fb80070 */ lw $t8,0x70($sp) /* f080c20: 00408825 */ or $s1,$v0,$zero /* f080c24: 24050002 */ addiu $a1,$zero,0x2 -/* f080c28: 0c006a47 */ jal func0001a91c +/* f080c28: 0c006a47 */ jal modelGetPart /* f080c2c: 8f040008 */ lw $a0,0x8($t8) /* f080c30: 8fa30060 */ lw $v1,0x60($sp) /* f080c34: 8fa60058 */ lw $a2,0x58($sp) @@ -29966,7 +29966,7 @@ glabel func0f0809c4 /* f080c58: 8fae0070 */ lw $t6,0x70($sp) /* f080c5c: 00408825 */ or $s1,$v0,$zero /* f080c60: 24050003 */ addiu $a1,$zero,0x3 -/* f080c64: 0c006a47 */ jal func0001a91c +/* f080c64: 0c006a47 */ jal modelGetPart /* f080c68: 8dc40008 */ lw $a0,0x8($t6) /* f080c6c: 8fa30060 */ lw $v1,0x60($sp) /* f080c70: 8fa60058 */ lw $a2,0x58($sp) @@ -31077,7 +31077,7 @@ glabel func0f081c18 /* f081c34: 00808025 */ or $s0,$a0,$zero /* f081c38: 15cf0007 */ bne $t6,$t7,.L0f081c58 /* f081c3c: 00a08825 */ or $s1,$a1,$zero -/* f081c40: 0c006a47 */ jal func0001a91c +/* f081c40: 0c006a47 */ jal modelGetPart /* f081c44: 00002825 */ or $a1,$zero,$zero /* f081c48: 54510004 */ bnel $v0,$s1,.L0f081c5c /* f081c4c: 8e190004 */ lw $t9,0x4($s0) @@ -31090,19 +31090,19 @@ glabel func0f081c18 /* f081c60: 2718ae4c */ addiu $t8,$t8,%lo(stagethinglist_20e6c) /* f081c64: 17190013 */ bne $t8,$t9,.L0f081cb4 /* f081c68: 02002025 */ or $a0,$s0,$zero -/* f081c6c: 0c006a47 */ jal func0001a91c +/* f081c6c: 0c006a47 */ jal modelGetPart /* f081c70: 00002825 */ or $a1,$zero,$zero /* f081c74: 1051000d */ beq $v0,$s1,.L0f081cac /* f081c78: 02002025 */ or $a0,$s0,$zero -/* f081c7c: 0c006a47 */ jal func0001a91c +/* f081c7c: 0c006a47 */ jal modelGetPart /* f081c80: 24050001 */ addiu $a1,$zero,0x1 /* f081c84: 10510009 */ beq $v0,$s1,.L0f081cac /* f081c88: 02002025 */ or $a0,$s0,$zero -/* f081c8c: 0c006a47 */ jal func0001a91c +/* f081c8c: 0c006a47 */ jal modelGetPart /* f081c90: 24050002 */ addiu $a1,$zero,0x2 /* f081c94: 10510005 */ beq $v0,$s1,.L0f081cac /* f081c98: 02002025 */ or $a0,$s0,$zero -/* f081c9c: 0c006a47 */ jal func0001a91c +/* f081c9c: 0c006a47 */ jal modelGetPart /* f081ca0: 24050003 */ addiu $a1,$zero,0x3 /* f081ca4: 54510004 */ bnel $v0,$s1,.L0f081cb8 /* f081ca8: 24020001 */ addiu $v0,$zero,0x1 @@ -34849,7 +34849,7 @@ glabel func0f084e58 /* f084f30: 24050001 */ addiu $a1,$zero,0x1 /* f084f34: 8fac0088 */ lw $t4,0x88($sp) /* f084f38: 24050001 */ addiu $a1,$zero,0x1 -/* f084f3c: 0c006a47 */ jal func0001a91c +/* f084f3c: 0c006a47 */ jal modelGetPart /* f084f40: 8d840008 */ lw $a0,0x8($t4) /* f084f44: 8fa40088 */ lw $a0,0x88($sp) /* f084f48: 0c006a87 */ jal func0001aa1c @@ -34880,7 +34880,7 @@ glabel func0f084f64 /* f084f98: 8e240008 */ lw $a0,0x8($s1) /* f084f9c: 00408025 */ or $s0,$v0,$zero /* f084fa0: 8e240008 */ lw $a0,0x8($s1) -/* f084fa4: 0c006a47 */ jal func0001a91c +/* f084fa4: 0c006a47 */ jal modelGetPart /* f084fa8: 24050001 */ addiu $a1,$zero,0x1 /* f084fac: 02202025 */ or $a0,$s1,$zero /* f084fb0: 00402825 */ or $a1,$v0,$zero @@ -34913,7 +34913,7 @@ glabel func0f084f64 /* f085018: 0fc4f903 */ jal func0f13e40c /* f08501c: 24050001 */ addiu $a1,$zero,0x1 /* f085020: 8e240008 */ lw $a0,0x8($s1) -/* f085024: 0c006a47 */ jal func0001a91c +/* f085024: 0c006a47 */ jal modelGetPart /* f085028: 24050003 */ addiu $a1,$zero,0x3 /* f08502c: 02202025 */ or $a0,$s1,$zero /* f085030: 0c006a87 */ jal func0001aa1c @@ -35713,7 +35713,7 @@ glabel func0f0859a0 /* f085b20: 000e7ac0 */ sll $t7,$t6,0xb /* f085b24: 05e10048 */ bgez $t7,.L0f085c48 /* f085b28: 00000000 */ nop -/* f085b2c: 0c006a47 */ jal func0001a91c +/* f085b2c: 0c006a47 */ jal modelGetPart /* f085b30: 8ea40008 */ lw $a0,0x8($s5) /* f085b34: 10400044 */ beqz $v0,.L0f085c48 /* f085b38: 00408025 */ or $s0,$v0,$zero @@ -35827,7 +35827,7 @@ glabel func0f0859a0 /* f085cd4: 8c8c0004 */ lw $t4,0x4($a0) /* f085cd8: 154c0007 */ bne $t2,$t4,.L0f085cf8 /* f085cdc: 00000000 */ nop -/* f085ce0: 0c006a47 */ jal func0001a91c +/* f085ce0: 0c006a47 */ jal modelGetPart /* f085ce4: 24050003 */ addiu $a1,$zero,0x3 /* f085ce8: 8fab00d0 */ lw $t3,0xd0($sp) /* f085cec: 144b0002 */ bne $v0,$t3,.L0f085cf8 @@ -36374,7 +36374,7 @@ glabel func0f085eac /* f086494: 8c830004 */ lw $v1,0x4($a0) /* f086498: 1703000c */ bne $t8,$v1,.L0f0864cc /* f08649c: 00000000 */ nop -/* f0864a0: 0c006a47 */ jal func0001a91c +/* f0864a0: 0c006a47 */ jal modelGetPart /* f0864a4: afa600d0 */ sw $a2,0xd0($sp) /* f0864a8: 8fac0124 */ lw $t4,0x124($sp) /* f0864ac: 8fa600d0 */ lw $a2,0xd0($sp) @@ -36390,7 +36390,7 @@ glabel func0f085eac /* f0864d0: 2739ae34 */ addiu $t9,$t9,%lo(stagethinglist_20e54) /* f0864d4: 17230009 */ bne $t9,$v1,.L0f0864fc /* f0864d8: 24050001 */ addiu $a1,$zero,0x1 -/* f0864dc: 0c006a47 */ jal func0001a91c +/* f0864dc: 0c006a47 */ jal modelGetPart /* f0864e0: afa600d0 */ sw $a2,0xd0($sp) /* f0864e4: 8fab0124 */ lw $t3,0x124($sp) /* f0864e8: 8fa600d0 */ lw $a2,0xd0($sp) @@ -36499,7 +36499,7 @@ glabel func0f085eac /* f086664: 8c980004 */ lw $t8,0x4($a0) /* f086668: 1578000f */ bne $t3,$t8,.L0f0866a8 /* f08666c: 00000000 */ nop -/* f086670: 0c006a47 */ jal func0001a91c +/* f086670: 0c006a47 */ jal modelGetPart /* f086674: e7a200c0 */ swc1 $f2,0xc0($sp) /* f086678: 8fb90124 */ lw $t9,0x124($sp) /* f08667c: c7a200c0 */ lwc1 $f2,0xc0($sp) @@ -39946,7 +39946,7 @@ glabel func0f089c70 /* f089d1c: 24050006 */ addiu $a1,$zero,0x6 /* f089d20: ad490018 */ sw $t1,0x18($t2) /* f089d24: 8e2b0020 */ lw $t3,0x20($s1) -/* f089d28: 0c006a47 */ jal func0001a91c +/* f089d28: 0c006a47 */ jal modelGetPart /* f089d2c: 8d640008 */ lw $a0,0x8($t3) /* f089d30: 8e0c0018 */ lw $t4,0x18($s0) /* f089d34: 02402025 */ or $a0,$s2,$zero @@ -41292,7 +41292,7 @@ glabel func0f08ae54 /* f08af78: 8da40008 */ lw $a0,0x8($t5) /* f08af7c: afa80024 */ sw $t0,0x24($sp) /* f08af80: afa70028 */ sw $a3,0x28($sp) -/* f08af84: 0c006a47 */ jal func0001a91c +/* f08af84: 0c006a47 */ jal modelGetPart /* f08af88: afa60040 */ sw $a2,0x40($sp) /* f08af8c: 8fa60040 */ lw $a2,0x40($sp) /* f08af90: 8fa70028 */ lw $a3,0x28($sp) @@ -41306,7 +41306,7 @@ glabel func0f08ae54 /* f08afac: 8de40008 */ lw $a0,0x8($t7) /* f08afb0: afa80024 */ sw $t0,0x24($sp) /* f08afb4: afa70028 */ sw $a3,0x28($sp) -/* f08afb8: 0c006a47 */ jal func0001a91c +/* f08afb8: 0c006a47 */ jal modelGetPart /* f08afbc: afa60040 */ sw $a2,0x40($sp) /* f08afc0: 8fa60040 */ lw $a2,0x40($sp) /* f08afc4: 8fa70028 */ lw $a3,0x28($sp) @@ -41348,7 +41348,7 @@ glabel func0f08ae54 /* f08b044: 8de40008 */ lw $a0,0x8($t7) /* f08b048: afa80024 */ sw $t0,0x24($sp) /* f08b04c: afa70028 */ sw $a3,0x28($sp) -/* f08b050: 0c006a47 */ jal func0001a91c +/* f08b050: 0c006a47 */ jal modelGetPart /* f08b054: afa60040 */ sw $a2,0x40($sp) /* f08b058: 8fa60040 */ lw $a2,0x40($sp) /* f08b05c: 8fa70028 */ lw $a3,0x28($sp) @@ -41362,7 +41362,7 @@ glabel func0f08ae54 /* f08b078: 8f240008 */ lw $a0,0x8($t9) /* f08b07c: afa80024 */ sw $t0,0x24($sp) /* f08b080: afa70028 */ sw $a3,0x28($sp) -/* f08b084: 0c006a47 */ jal func0001a91c +/* f08b084: 0c006a47 */ jal modelGetPart /* f08b088: afa60040 */ sw $a2,0x40($sp) /* f08b08c: 8fa60040 */ lw $a2,0x40($sp) /* f08b090: 8fa70028 */ lw $a3,0x28($sp) @@ -42223,7 +42223,7 @@ glabel func0f08bb5c /* f08bba8: 8c980004 */ lw $t8,0x4($a0) /* f08bbac: 55f8001d */ bnel $t7,$t8,.L0f08bc24 /* f08bbb0: 8fad0024 */ lw $t5,0x24($sp) -/* f08bbb4: 0c006a47 */ jal func0001a91c +/* f08bbb4: 0c006a47 */ jal modelGetPart /* f08bbb8: 00002825 */ or $a1,$zero,$zero /* f08bbbc: 1040000a */ beqz $v0,.L0f08bbe8 /* f08bbc0: 00402825 */ or $a1,$v0,$zero @@ -42239,7 +42239,7 @@ glabel func0f08bb5c .L0f08bbe8: /* f08bbe8: 8e040008 */ lw $a0,0x8($s0) .L0f08bbec: -/* f08bbec: 0c006a47 */ jal func0001a91c +/* f08bbec: 0c006a47 */ jal modelGetPart /* f08bbf0: 24050002 */ addiu $a1,$zero,0x2 /* f08bbf4: 1040000a */ beqz $v0,.L0f08bc20 /* f08bbf8: 00402825 */ or $a1,$v0,$zero @@ -42288,7 +42288,7 @@ glabel func0f08bc5c /* f08bc84: 00002825 */ or $a1,$zero,$zero /* f08bc88: 55cf0016 */ bnel $t6,$t7,.L0f08bce4 /* f08bc8c: 00001025 */ or $v0,$zero,$zero -/* f08bc90: 0c006a47 */ jal func0001a91c +/* f08bc90: 0c006a47 */ jal modelGetPart /* f08bc94: afa60018 */ sw $a2,0x18($sp) /* f08bc98: 8fa60018 */ lw $a2,0x18($sp) /* f08bc9c: 10400005 */ beqz $v0,.L0f08bcb4 @@ -42300,7 +42300,7 @@ glabel func0f08bc5c .L0f08bcb4: /* f08bcb4: 8cc40008 */ lw $a0,0x8($a2) /* f08bcb8: afa60018 */ sw $a2,0x18($sp) -/* f08bcbc: 0c006a47 */ jal func0001a91c +/* f08bcbc: 0c006a47 */ jal modelGetPart /* f08bcc0: 24050002 */ addiu $a1,$zero,0x2 /* f08bcc4: 8fa60018 */ lw $a2,0x18($sp) /* f08bcc8: 10400005 */ beqz $v0,.L0f08bce0 @@ -48383,13 +48383,13 @@ glabel var7f1ab214 /* f091d80: 00000000 */ nop ); -void objSetPartVisible(struct defaultobj *obj, s32 partnum, bool visible) +void objSetModelPartVisible(struct defaultobj *obj, s32 partnum, bool visible) { if (obj && obj->model && obj->model->unk08) { - struct model08_00 *model08_00 = func0001a91c(obj->model->unk08, partnum); + struct modelnode *node = modelGetPart(obj->model->unk08, partnum); - if (model08_00) { - struct model10 *model10 = func0001aa1c(obj->model, model08_00); + if (node) { + struct model10 *model10 = func0001aa1c(obj->model, node); if (model10) { if (visible) { diff --git a/src/game/title.c b/src/game/title.c index 1bc4f133d..ecb5ceaaf 100644 --- a/src/game/title.c +++ b/src/game/title.c @@ -1450,7 +1450,7 @@ glabel func0f017248 /* f0172c0: 8de10000 */ lw $at,0x0($t7) /* f0172c4: 00002825 */ or $a1,$zero,$zero /* f0172c8: adc10000 */ sw $at,0x0($t6) -/* f0172cc: 0c006a47 */ jal func0001a91c +/* f0172cc: 0c006a47 */ jal modelGetPart /* f0172d0: 8ee40008 */ lw $a0,0x8($s7) /* f0172d4: 02e02025 */ or $a0,$s7,$zero /* f0172d8: 0c006a87 */ jal func0001aa1c @@ -1458,7 +1458,7 @@ glabel func0f017248 /* f0172e0: 8fac0158 */ lw $t4,0x158($sp) /* f0172e4: 24050001 */ addiu $a1,$zero,0x1 /* f0172e8: ac4c0000 */ sw $t4,0x0($v0) -/* f0172ec: 0c006a47 */ jal func0001a91c +/* f0172ec: 0c006a47 */ jal modelGetPart /* f0172f0: 8ee40008 */ lw $a0,0x8($s7) /* f0172f4: 02e02025 */ or $a0,$s7,$zero /* f0172f8: 0c006a87 */ jal func0001aa1c @@ -1548,11 +1548,11 @@ glabel func0f017248 /* f01741c: 8fad0108 */ lw $t5,0x108($sp) /* f017420: 15800009 */ bnez $t4,.L0f017448 /* f017424: 24010001 */ addiu $at,$zero,0x1 -/* f017428: 0c006a47 */ jal func0001a91c +/* f017428: 0c006a47 */ jal modelGetPart /* f01742c: 8ee40008 */ lw $a0,0x8($s7) /* f017430: 00408025 */ or $s0,$v0,$zero /* f017434: 8ee40008 */ lw $a0,0x8($s7) -/* f017438: 0c006a47 */ jal func0001a91c +/* f017438: 0c006a47 */ jal modelGetPart /* f01743c: 24050003 */ addiu $a1,$zero,0x3 /* f017440: 1000001f */ b .L0f0174c0 /* f017444: 00403025 */ or $a2,$v0,$zero @@ -1560,11 +1560,11 @@ glabel func0f017248 /* f017448: 15a1000a */ bne $t5,$at,.L0f017474 /* f01744c: 8fb90108 */ lw $t9,0x108($sp) /* f017450: 8ee40008 */ lw $a0,0x8($s7) -/* f017454: 0c006a47 */ jal func0001a91c +/* f017454: 0c006a47 */ jal modelGetPart /* f017458: 24050004 */ addiu $a1,$zero,0x4 /* f01745c: 00408025 */ or $s0,$v0,$zero /* f017460: 8ee40008 */ lw $a0,0x8($s7) -/* f017464: 0c006a47 */ jal func0001a91c +/* f017464: 0c006a47 */ jal modelGetPart /* f017468: 24050005 */ addiu $a1,$zero,0x5 /* f01746c: 10000014 */ b .L0f0174c0 /* f017470: 00403025 */ or $a2,$v0,$zero @@ -1573,20 +1573,20 @@ glabel func0f017248 /* f017478: 1721000a */ bne $t9,$at,.L0f0174a4 /* f01747c: 24050008 */ addiu $a1,$zero,0x8 /* f017480: 8ee40008 */ lw $a0,0x8($s7) -/* f017484: 0c006a47 */ jal func0001a91c +/* f017484: 0c006a47 */ jal modelGetPart /* f017488: 24050006 */ addiu $a1,$zero,0x6 /* f01748c: 00408025 */ or $s0,$v0,$zero /* f017490: 8ee40008 */ lw $a0,0x8($s7) -/* f017494: 0c006a47 */ jal func0001a91c +/* f017494: 0c006a47 */ jal modelGetPart /* f017498: 24050007 */ addiu $a1,$zero,0x7 /* f01749c: 10000008 */ b .L0f0174c0 /* f0174a0: 00403025 */ or $a2,$v0,$zero .L0f0174a4: -/* f0174a4: 0c006a47 */ jal func0001a91c +/* f0174a4: 0c006a47 */ jal modelGetPart /* f0174a8: 8ee40008 */ lw $a0,0x8($s7) /* f0174ac: 00408025 */ or $s0,$v0,$zero /* f0174b0: 8ee40008 */ lw $a0,0x8($s7) -/* f0174b4: 0c006a47 */ jal func0001a91c +/* f0174b4: 0c006a47 */ jal modelGetPart /* f0174b8: 24050009 */ addiu $a1,$zero,0x9 /* f0174bc: 00403025 */ or $a2,$v0,$zero .L0f0174c0: @@ -2834,7 +2834,7 @@ glabel var7f1a8468 /* f0186ec: a0620000 */ sb $v0,0x0($v1) /* f0186f0: afa000dc */ sw $zero,0xdc($sp) /* f0186f4: afa000d8 */ sw $zero,0xd8($sp) -/* f0186f8: 0c006a47 */ jal func0001a91c +/* f0186f8: 0c006a47 */ jal modelGetPart /* f0186fc: 8dc40008 */ lw $a0,0x8($t6) /* f018700: 10400027 */ beqz $v0,.L0f0187a0 /* f018704: 00402825 */ or $a1,$v0,$zero @@ -2879,7 +2879,7 @@ glabel var7f1a8468 .L0f0187a0: /* f0187a0: 8fb9022c */ lw $t9,0x22c($sp) /* f0187a4: 24050004 */ addiu $a1,$zero,0x4 -/* f0187a8: 0c006a47 */ jal func0001a91c +/* f0187a8: 0c006a47 */ jal modelGetPart /* f0187ac: 8f240008 */ lw $a0,0x8($t9) /* f0187b0: 10400037 */ beqz $v0,.L0f018890 /* f0187b4: 00402825 */ or $a1,$v0,$zero @@ -2941,7 +2941,7 @@ glabel var7f1a8468 .L0f018890: /* f018890: 8fb8022c */ lw $t8,0x22c($sp) /* f018894: 24050006 */ addiu $a1,$zero,0x6 -/* f018898: 0c006a47 */ jal func0001a91c +/* f018898: 0c006a47 */ jal modelGetPart /* f01889c: 8f040008 */ lw $a0,0x8($t8) /* f0188a0: 10400037 */ beqz $v0,.L0f018980 /* f0188a4: 00402825 */ or $a1,$v0,$zero @@ -3003,7 +3003,7 @@ glabel var7f1a8468 .L0f018980: /* f018980: 8fae022c */ lw $t6,0x22c($sp) /* f018984: 24050008 */ addiu $a1,$zero,0x8 -/* f018988: 0c006a47 */ jal func0001a91c +/* f018988: 0c006a47 */ jal modelGetPart /* f01898c: 8dc40008 */ lw $a0,0x8($t6) /* f018990: 10400037 */ beqz $v0,.L0f018a70 /* f018994: 00402825 */ or $a1,$v0,$zero @@ -4255,7 +4255,7 @@ glabel var7f1a84bc /* f01a0f4: 8e640000 */ lw $a0,0x0($s3) /* f01a0f8: 8e790000 */ lw $t9,0x0($s3) /* f01a0fc: 2405000b */ addiu $a1,$zero,0xb -/* f01a100: 0c006a47 */ jal func0001a91c +/* f01a100: 0c006a47 */ jal modelGetPart /* f01a104: 8f240008 */ lw $a0,0x8($t9) /* f01a108: 8e640000 */ lw $a0,0x0($s3) /* f01a10c: 0c006a87 */ jal func0001aa1c @@ -4266,7 +4266,7 @@ glabel var7f1a84bc /* f01a120: 8e780000 */ lw $t8,0x0($s3) .L0f01a124: /* f01a124: 2405000d */ addiu $a1,$zero,0xd -/* f01a128: 0c006a47 */ jal func0001a91c +/* f01a128: 0c006a47 */ jal modelGetPart /* f01a12c: 8f040008 */ lw $a0,0x8($t8) /* f01a130: 8e640000 */ lw $a0,0x0($s3) /* f01a134: 0c006a87 */ jal func0001aa1c @@ -4277,7 +4277,7 @@ glabel var7f1a84bc .L0f01a148: /* f01a148: 8e6f0000 */ lw $t7,0x0($s3) /* f01a14c: 2405000c */ addiu $a1,$zero,0xc -/* f01a150: 0c006a47 */ jal func0001a91c +/* f01a150: 0c006a47 */ jal modelGetPart /* f01a154: 8de40008 */ lw $a0,0x8($t7) /* f01a158: 8e640000 */ lw $a0,0x0($s3) /* f01a15c: 0c006a87 */ jal func0001aa1c @@ -4317,7 +4317,7 @@ glabel var7f1a84bc /* f01a1e0: 8e6b0000 */ lw $t3,0x0($s3) /* f01a1e4: 8fb4016c */ lw $s4,0x16c($sp) /* f01a1e8: 2405000b */ addiu $a1,$zero,0xb -/* f01a1ec: 0c006a47 */ jal func0001a91c +/* f01a1ec: 0c006a47 */ jal modelGetPart /* f01a1f0: 8d640008 */ lw $a0,0x8($t3) /* f01a1f4: 8e640000 */ lw $a0,0x0($s3) /* f01a1f8: 0c006a87 */ jal func0001aa1c @@ -4328,7 +4328,7 @@ glabel var7f1a84bc .L0f01a20c: /* f01a20c: 8e790000 */ lw $t9,0x0($s3) /* f01a210: 2405000d */ addiu $a1,$zero,0xd -/* f01a214: 0c006a47 */ jal func0001a91c +/* f01a214: 0c006a47 */ jal modelGetPart /* f01a218: 8f240008 */ lw $a0,0x8($t9) /* f01a21c: 8e640000 */ lw $a0,0x0($s3) /* f01a220: 0c006a87 */ jal func0001aa1c @@ -4339,7 +4339,7 @@ glabel var7f1a84bc /* f01a234: 8e780000 */ lw $t8,0x0($s3) .L0f01a238: /* f01a238: 2405000c */ addiu $a1,$zero,0xc -/* f01a23c: 0c006a47 */ jal func0001a91c +/* f01a23c: 0c006a47 */ jal modelGetPart /* f01a240: 8f040008 */ lw $a0,0x8($t8) /* f01a244: 8e640000 */ lw $a0,0x0($s3) /* f01a248: 0c006a87 */ jal func0001aa1c diff --git a/src/include/commands.h b/src/include/commands.h index a9a6847e0..c0973f107 100644 --- a/src/include/commands.h +++ b/src/include/commands.h @@ -3404,12 +3404,15 @@ value, /** - * Remove the necklace from the given chr. + * Toggle the visibility of part of the chr's model. It's used for Cassandra's + * necklace. + * + * modelpart should be a MODELPART constant, and refers to a node in the model. */ -#define remove_cass_necklace(chr) \ +#define chr_toggle_modelpart(chr, modelpart) \ mkshort(0x018c), \ chr, \ - 0x07, + modelpart, /** * Activate the given lift. @@ -3910,11 +3913,18 @@ mkshort(portal), \ flag, -#define set_object_part_visible(object, bool) \ +/** + * Shows or hides part of the object's model. + * + * modelpart should be a MODELPART constant, and refers to a node in the model. + * + * visible is a boolean. TRUE makes it visible. FALSE makes it invisible. + */ +#define object_set_modelpart_visible(object, modelpart, visible) \ mkshort(0x01d1), \ object, \ - 0xb7, \ - bool, + modelpart, \ + visible, /** * Emits sparks from the given chr. diff --git a/src/include/constants.h b/src/include/constants.h index 2a9670427..3953977d5 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -1458,6 +1458,16 @@ #define MODEL_CETANDOORSIDE 0x01b7 #define MODEL_BUDDYBRIDGE 0x01b8 +#define MODELNODETYPE_ROOT 0x01 +#define MODELNODETYPE_HEADSPOT 0x17 + +#define MODELPART_MUZZLEFLASHRIGHT 0x0002 +#define MODELPART_MUZZLEFLASHLEFT 0x0003 +#define MODELPART_HUDPIECE 0x0004 +#define MODELPART_NECKLACE 0x0007 +#define MODELPART_006E 0x006e +#define MODELPART_SKGANGWAY 0x00b7 + #define MOVEMODE_WALK 0 #define MOVEMODE_BIKE 3 #define MOVEMODE_GRAB 4 diff --git a/src/include/game/chr/chraction.h b/src/include/game/chr/chraction.h index 8339f5861..ab712c3d6 100644 --- a/src/include/game/chr/chraction.h +++ b/src/include/game/chr/chraction.h @@ -323,7 +323,7 @@ s16 *teamGetChrIds(s32 team_id); s16 *squadronGetChrIds(s32 squadron_id); void audioMarkAsRecentlyPlayed(s16 audioid); bool audioWasNotPlayedRecently(s16 audioid); -void func0f04cf90(struct chrdata *chr, s32 arg1); +void chrToggleModelPart(struct chrdata *chr, s32 partnum); bool chrIsAvoiding(struct chrdata *chr); void chrEmitSparks(struct chrdata *chr); diff --git a/src/include/game/chr/chraicommands.h b/src/include/game/chr/chraicommands.h index ee9b437d1..f2d4754fc 100644 --- a/src/include/game/chr/chraicommands.h +++ b/src/include/game/chr/chraicommands.h @@ -373,7 +373,7 @@ /*0x0189*/ bool aiLiftGoToStop(void); /*0x018a*/ bool aiIfLiftAtStop(void); /*0x018b*/ bool aiConfigureRain(void); -/*0x018c*/ bool aiChrToggleProp(void); +/*0x018c*/ bool aiChrToggleModelPart(void); /*0x018d*/ bool aiActivateLift(void); /*0x018e*/ bool aiMiniSkedarTryPounce(void); /*0x018f*/ bool aiIfObjectDistanceToPadLessThan(void); @@ -428,7 +428,7 @@ /*0x01ce*/ bool aiSetPassiveMode(void); /*0x01cf*/ bool aiChrSetFiringInCutscene(void); /*0x01d0*/ bool aiSetPortalFlag(void); -/*0x01d1*/ bool aiSetObjPartVisible(void); +/*0x01d1*/ bool aiObjSetModelPartVisible(void); /*0x01d2*/ bool aiChrEmitSparks(void); /*0x01d3*/ bool aiSetDrCarollImages(void); /*0x01d4*/ bool ai01d4(void); diff --git a/src/include/game/propobj.h b/src/include/game/propobj.h index de1c28964..d3d1d1f0e 100644 --- a/src/include/game/propobj.h +++ b/src/include/game/propobj.h @@ -338,6 +338,6 @@ u32 func0f091030(void); void func0f0910ac(void); u32 func0f091250(void); u32 func0f0912dc(void); -void objSetPartVisible(struct defaultobj *obj, s32 partnum, bool visible); +void objSetModelPartVisible(struct defaultobj *obj, s32 partnum, bool visible); #endif diff --git a/src/include/lib/lib_1a500.h b/src/include/lib/lib_1a500.h index adc24d5d1..a9ccc8924 100644 --- a/src/include/lib/lib_1a500.h +++ b/src/include/lib/lib_1a500.h @@ -14,10 +14,10 @@ u32 func0001a740(void); u32 func0001a784(void); u32 func0001a7cc(void); u32 func0001a85c(void); -struct model08_00 *func0001a91c(struct model08 *arg0, s32 arg1); +struct modelnode *modelGetPart(struct model08 *arg0, s32 partnum); struct modelthing *func0001a9bc(void *modelfiledata, s32 arg1); u32 func0001a9e8(void); -struct model10 *func0001aa1c(struct model *model, struct model08_00 *arg1); +struct model10 *func0001aa1c(struct model *model, struct modelnode *node); u32 func0001ab0c(void); u32 func0001abc4(void); void func0001ad0c(struct model *model, struct coord *coord); @@ -45,7 +45,7 @@ u32 func0001c81c(void); u32 func0001c868(void); u32 func0001c924(void); u32 func0001c950(void); -void func0001cb0c(struct model *model, struct model08_00 *arg1); +void func0001cb0c(struct model *model, struct modelnode *node); u32 func0001cc20(void); u32 func0001cd18(void); u32 func0001ce64(void); diff --git a/src/include/types.h b/src/include/types.h index d25277939..d08affdb8 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -155,16 +155,20 @@ struct stagethinglist { u16 *things; }; -struct model08_00 { - u16 unk00; +struct modelnode { + u16 type; u32 unk04; }; struct model08 { - struct model08_00 *unk00; + struct modelnode *rootnode; struct stagethinglist *unk04; - u32 unk08; - u16 unk0c; + + // This is a pointer to a variable length array of pointers to modelnodes, + // but the array is followed by an s16 array of part numbers. + struct modelnode **parts; + + s16 numparts; s16 unk0e; }; @@ -186,8 +190,7 @@ struct model0c { /*0x38*/ f32 unk38; }; -// This seems to be a model component which can be turned on and off, like a -// muzzle flash, Jo's hudpiece and probably Cass's necklace. +// Suspected to be multiple structs, or a union based on the node type struct model10 { union { u16 u16; diff --git a/src/lib/lib_1a500.c b/src/lib/lib_1a500.c index 8cf45217e..42b217ff2 100644 --- a/src/lib/lib_1a500.c +++ b/src/lib/lib_1a500.c @@ -638,62 +638,43 @@ glabel func0001a85c /* 1a918: 00601025 */ or $v0,$v1,$zero ); -GLOBAL_ASM( -glabel func0001a91c -/* 1a91c: 27bdfff8 */ addiu $sp,$sp,-8 -/* 1a920: afb00004 */ sw $s0,0x4($sp) -/* 1a924: 8482000c */ lh $v0,0xc($a0) -/* 1a928: 00a08025 */ or $s0,$a1,$zero -/* 1a92c: 00003025 */ or $a2,$zero,$zero -/* 1a930: 14400003 */ bnez $v0,.L0001a940 -/* 1a934: 00027080 */ sll $t6,$v0,0x2 -/* 1a938: 1000001d */ b .L0001a9b0 -/* 1a93c: 00001025 */ or $v0,$zero,$zero -.L0001a940: -/* 1a940: 8c850008 */ lw $a1,0x8($a0) -/* 1a944: 00403825 */ or $a3,$v0,$zero -/* 1a948: 04400018 */ bltz $v0,.L0001a9ac -/* 1a94c: 00ae1821 */ addu $v1,$a1,$t6 -/* 1a950: 00c72021 */ addu $a0,$a2,$a3 -.L0001a954: -/* 1a954: 04810003 */ bgez $a0,.L0001a964 -/* 1a958: 00047843 */ sra $t7,$a0,0x1 -/* 1a95c: 24810001 */ addiu $at,$a0,0x1 -/* 1a960: 00017843 */ sra $t7,$at,0x1 -.L0001a964: -/* 1a964: 000fc040 */ sll $t8,$t7,0x1 -/* 1a968: 0078c821 */ addu $t9,$v1,$t8 -/* 1a96c: 87280000 */ lh $t0,0x0($t9) -/* 1a970: 01e01025 */ or $v0,$t7,$zero -/* 1a974: 16080005 */ bne $s0,$t0,.L0001a98c -/* 1a978: 0208082a */ slt $at,$s0,$t0 -/* 1a97c: 000f4880 */ sll $t1,$t7,0x2 -/* 1a980: 00a95021 */ addu $t2,$a1,$t1 -/* 1a984: 1000000a */ b .L0001a9b0 -/* 1a988: 8d420000 */ lw $v0,0x0($t2) -.L0001a98c: -/* 1a98c: 50200004 */ beqzl $at,.L0001a9a0 -/* 1a990: 24460001 */ addiu $a2,$v0,0x1 -/* 1a994: 10000002 */ b .L0001a9a0 -/* 1a998: 2447ffff */ addiu $a3,$v0,-1 -/* 1a99c: 24460001 */ addiu $a2,$v0,0x1 -.L0001a9a0: -/* 1a9a0: 00e6082a */ slt $at,$a3,$a2 -/* 1a9a4: 5020ffeb */ beqzl $at,.L0001a954 -/* 1a9a8: 00c72021 */ addu $a0,$a2,$a3 -.L0001a9ac: -/* 1a9ac: 00001025 */ or $v0,$zero,$zero -.L0001a9b0: -/* 1a9b0: 8fb00004 */ lw $s0,0x4($sp) -/* 1a9b4: 03e00008 */ jr $ra -/* 1a9b8: 27bd0008 */ addiu $sp,$sp,0x8 -); +struct modelnode *modelGetPart(struct model08 *model08, s32 partnum) +{ + s32 upper; + s32 lower; + u32 i; + s16 *partnums; + + if (model08->numparts == 0) { + return NULL; + } + + partnums = (s16 *)&model08->parts[model08->numparts]; + lower = 0; + upper = model08->numparts; + + while (upper >= lower) { + i = (lower + upper) / 2; + + if (partnum == partnums[i]) { + return model08->parts[i]; + } + + if (partnum < partnums[i]) { + upper = i - 1; + } else { + lower = i + 1; + } + } + + return NULL; +} GLOBAL_ASM( glabel func0001a9bc /* 1a9bc: 27bdffe8 */ addiu $sp,$sp,-24 /* 1a9c0: afbf0014 */ sw $ra,0x14($sp) -/* 1a9c4: 0c006a47 */ jal func0001a91c +/* 1a9c4: 0c006a47 */ jal modelGetPart /* 1a9c8: 00000000 */ nop /* 1a9cc: 10400003 */ beqz $v0,.L0001a9dc /* 1a9d0: 8fbf0014 */ lw $ra,0x14($sp)