From 40592d833d1f123e638685a265ddf277bf8245e3 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Mon, 10 Feb 2020 00:09:24 +1000 Subject: [PATCH] Decompile propGetBbox and discover if_proppreset_height_lt AI command --- src/game/chr/chr.c | 32 ++++++++-------- src/game/chr/chraicommands.c | 12 +++--- src/game/data/data_0083d0.c | 2 +- src/game/game_0601b0.c | 57 +++++++--------------------- src/game/game_066310.c | 4 +- src/game/game_0b28d0.c | 2 +- src/game/game_0c37d0.c | 10 ++--- src/game/game_0c79f0.c | 8 ++-- src/game/game_0d1fe0.c | 6 +-- src/game/game_129900.c | 2 +- src/include/commands.h | 11 +++++- src/include/game/chr/chr.h | 2 +- src/include/game/chr/chraicommands.h | 2 +- src/include/game/game_0601b0.h | 2 +- src/include/game/game_066310.h | 2 +- src/include/game/game_0b28d0.h | 2 +- 16 files changed, 67 insertions(+), 89 deletions(-) diff --git a/src/game/chr/chr.c b/src/game/chr/chr.c index 3dbefd4f0..0e2a4897c 100644 --- a/src/game/chr/chr.c +++ b/src/game/chr/chr.c @@ -1446,7 +1446,7 @@ glabel func0f01e7f4 .L0f01e858: /* f01e858: 27a500cc */ addiu $a1,$sp,0xcc /* f01e85c: 27a600d4 */ addiu $a2,$sp,0xd4 -/* f01e860: 0fc0a277 */ jal func0f0289dc +/* f01e860: 0fc0a277 */ jal propChrGetBbox /* f01e864: 27a700d0 */ addiu $a3,$sp,0xd0 /* f01e868: 3c013f00 */ lui $at,0x3f00 /* f01e86c: 44813000 */ mtc1 $at,$f6 @@ -2140,7 +2140,7 @@ glabel func0f01f264 /* f01f2a0: c4aa0008 */ lwc1 $f10,0x8($a1) /* f01f2a4: 27a50034 */ addiu $a1,$sp,0x34 /* f01f2a8: e7aa0058 */ swc1 $f10,0x58($sp) -/* f01f2ac: 0fc0a277 */ jal func0f0289dc +/* f01f2ac: 0fc0a277 */ jal propChrGetBbox /* f01f2b0: 8c84001c */ lw $a0,0x1c($a0) /* f01f2b4: 02002025 */ or $a0,$s0,$zero /* f01f2b8: 8fa50068 */ lw $a1,0x68($sp) @@ -12360,7 +12360,7 @@ bool chrUpdateGeometry(struct prop *prop, struct geo **arg1, struct geo **arg2) } -void func0f0289dc(struct prop *prop, f32 *width, f32 *ymax, f32 *ymin) +void propChrGetBbox(struct prop *prop, f32 *width, f32 *ymax, f32 *ymin) { struct chrdata *chr = prop->chr; @@ -18842,7 +18842,7 @@ glabel func0f02e684 /* f02e694: afa40030 */ sw $a0,0x30($sp) /* f02e698: 27a6002c */ addiu $a2,$sp,0x2c /* f02e69c: 27a50024 */ addiu $a1,$sp,0x24 -/* f02e6a0: 0fc0a277 */ jal func0f0289dc +/* f02e6a0: 0fc0a277 */ jal propChrGetBbox /* f02e6a4: 27a70028 */ addiu $a3,$sp,0x28 /* f02e6a8: c7a4002c */ lwc1 $f4,0x2c($sp) /* f02e6ac: c7a60028 */ lwc1 $f6,0x28($sp) @@ -27408,7 +27408,7 @@ glabel func0f03645c /* f03647c: 27a70044 */ addiu $a3,$sp,0x44 /* f036480: 27a60048 */ addiu $a2,$sp,0x48 /* f036484: 27a50040 */ addiu $a1,$sp,0x40 -/* f036488: 0fc0a277 */ jal func0f0289dc +/* f036488: 0fc0a277 */ jal propChrGetBbox /* f03648c: afa4002c */ sw $a0,0x2c($sp) /* f036490: 8fa40050 */ lw $a0,0x50($sp) /* f036494: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100 @@ -27478,7 +27478,7 @@ glabel func0f03654c /* f036580: 02402025 */ or $a0,$s2,$zero /* f036584: 27a50068 */ addiu $a1,$sp,0x68 /* f036588: 27a60070 */ addiu $a2,$sp,0x70 -/* f03658c: 0fc0a277 */ jal func0f0289dc +/* f03658c: 0fc0a277 */ jal propChrGetBbox /* f036590: 27a7006c */ addiu $a3,$sp,0x6c /* f036594: 8fa700a0 */ lw $a3,0xa0($sp) /* f036598: 8fae00ac */ lw $t6,0xac($sp) @@ -28738,7 +28738,7 @@ glabel func0f0375e8 /* f037704: 8e04001c */ lw $a0,0x1c($s0) /* f037708: 27a5010c */ addiu $a1,$sp,0x10c /* f03770c: 27a60114 */ addiu $a2,$sp,0x114 -/* f037710: 0fc0a277 */ jal func0f0289dc +/* f037710: 0fc0a277 */ jal propChrGetBbox /* f037714: 27a70110 */ addiu $a3,$sp,0x110 /* f037718: 8fab00f0 */ lw $t3,0xf0($sp) /* f03771c: 8e050024 */ lw $a1,0x24($s0) @@ -30368,7 +30368,7 @@ glabel func0f038b9c /* f038c34: 27a50070 */ addiu $a1,$sp,0x70 /* f038c38: 27a60078 */ addiu $a2,$sp,0x78 /* f038c3c: 27a70074 */ addiu $a3,$sp,0x74 -/* f038c40: 0fc0a277 */ jal func0f0289dc +/* f038c40: 0fc0a277 */ jal propChrGetBbox /* f038c44: a7b9007c */ sh $t9,0x7c($sp) /* f038c48: 02602025 */ or $a0,$s3,$zero /* f038c4c: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100 @@ -32689,7 +32689,7 @@ glabel func0f03afac /* f03b084: 46065401 */ sub.s $f16,$f10,$f6 /* f03b088: e7b00070 */ swc1 $f16,0x70($sp) /* f03b08c: c612000c */ lwc1 $f18,0xc($s0) -/* f03b090: 0fc19881 */ jal func0f066204 +/* f03b090: 0fc19881 */ jal propGetBbox /* f03b094: e7b2006c */ swc1 $f18,0x6c($sp) /* f03b098: 240e0001 */ addiu $t6,$zero,0x1 /* f03b09c: afae0010 */ sw $t6,0x10($sp) @@ -32912,12 +32912,12 @@ glabel func0f03b1e0 /* f03b3b8: 02002025 */ or $a0,$s0,$zero /* f03b3bc: 27a50088 */ addiu $a1,$sp,0x88 /* f03b3c0: 27a60090 */ addiu $a2,$sp,0x90 -/* f03b3c4: 0fc19881 */ jal func0f066204 +/* f03b3c4: 0fc19881 */ jal propGetBbox /* f03b3c8: 27a7008c */ addiu $a3,$sp,0x8c /* f03b3cc: 02602025 */ or $a0,$s3,$zero /* f03b3d0: 27a5007c */ addiu $a1,$sp,0x7c /* f03b3d4: 27a60084 */ addiu $a2,$sp,0x84 -/* f03b3d8: 0fc19881 */ jal func0f066204 +/* f03b3d8: 0fc19881 */ jal propGetBbox /* f03b3dc: 27a70080 */ addiu $a3,$sp,0x80 /* f03b3e0: c7aa0084 */ lwc1 $f10,0x84($sp) /* f03b3e4: c7b00080 */ lwc1 $f16,0x80($sp) @@ -43294,7 +43294,7 @@ glabel func0f044c38 /* f044c64: 27a50078 */ addiu $a1,$sp,0x78 /* f044c68: 27a7007c */ addiu $a3,$sp,0x7c /* f044c6c: 27a60080 */ addiu $a2,$sp,0x80 -/* f044c70: 0fc0a277 */ jal func0f0289dc +/* f044c70: 0fc0a277 */ jal propChrGetBbox /* f044c74: afa4003c */ sw $a0,0x3c($sp) /* f044c78: 8fa200ec */ lw $v0,0xec($sp) /* f044c7c: c6060000 */ lwc1 $f6,0x0($s0) @@ -43659,7 +43659,7 @@ glabel func0f0451a8 /* f0451d4: 27a50078 */ addiu $a1,$sp,0x78 /* f0451d8: 27a7007c */ addiu $a3,$sp,0x7c /* f0451dc: 27a60080 */ addiu $a2,$sp,0x80 -/* f0451e0: 0fc0a277 */ jal func0f0289dc +/* f0451e0: 0fc0a277 */ jal propChrGetBbox /* f0451e4: afa4003c */ sw $a0,0x3c($sp) /* f0451e8: 8fa200f4 */ lw $v0,0xf4($sp) /* f0451ec: c6060000 */ lwc1 $f6,0x0($s0) @@ -46237,7 +46237,7 @@ glabel func0f047700 .L0f04777c: /* f04777c: 27a50064 */ addiu $a1,$sp,0x64 /* f047780: 27a60060 */ addiu $a2,$sp,0x60 -/* f047784: 0fc0a277 */ jal func0f0289dc +/* f047784: 0fc0a277 */ jal propChrGetBbox /* f047788: 27a7005c */ addiu $a3,$sp,0x5c /* f04778c: 02002025 */ or $a0,$s0,$zero /* f047790: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100 @@ -51613,7 +51613,7 @@ glabel func0f04c874 /* f04c9cc: c6320010 */ lwc1 $f18,0x10($s1) /* f04c9d0: 46109100 */ add.s $f4,$f18,$f16 /* f04c9d4: e6040008 */ swc1 $f4,0x8($s0) -/* f04c9d8: 0fc0a277 */ jal func0f0289dc +/* f04c9d8: 0fc0a277 */ jal propChrGetBbox /* f04c9dc: 8e64001c */ lw $a0,0x1c($s3) /* f04c9e0: c7a800cc */ lwc1 $f8,0xcc($sp) /* f04c9e4: c7a600a0 */ lwc1 $f6,0xa0($sp) @@ -52165,7 +52165,7 @@ glabel func0f04d000 /* f04d29c: 27a70070 */ addiu $a3,$sp,0x70 /* f04d2a0: 46064280 */ add.s $f10,$f8,$f6 /* f04d2a4: e7aa0044 */ swc1 $f10,0x44($sp) -/* f04d2a8: 0fc0a277 */ jal func0f0289dc +/* f04d2a8: 0fc0a277 */ jal propChrGetBbox /* f04d2ac: 8e04001c */ lw $a0,0x1c($s0) /* f04d2b0: 3c013f00 */ lui $at,0x3f00 /* f04d2b4: 44819000 */ mtc1 $at,$f18 diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index c2dbdbdb3..4f678374c 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -7992,17 +7992,17 @@ glabel aiRemoveObjectAtPropPreset /** * @cmd 0105 */ -bool ai0105(void) +bool aiIfPropPresetHeightLessThan(void) { u8 *cmd = g_Vars.ailist + g_Vars.aioffset; struct prop *prop = &g_Vars.props[g_Vars.chrdata->proppreset1]; f32 value = cmd[3] | (cmd[2] << 8); - f32 sp32; - f32 sp28; - f32 sp24; - func0f066204(prop, &sp24, &sp32, &sp28); + f32 ymax; + f32 ymin; + f32 width; + propGetBbox(prop, &width, &ymax, &ymin); - if (sp32 - sp28 < value) { + if (ymax - ymin < value) { g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[4]); } else { g_Vars.aioffset += 5; diff --git a/src/game/data/data_0083d0.c b/src/game/data/data_0083d0.c index e0362982d..3dedb7903 100644 --- a/src/game/data/data_0083d0.c +++ b/src/game/data/data_0083d0.c @@ -6480,7 +6480,7 @@ bool (*g_CommandPointers[])(void) = { /*0x0102*/ aiSetLights, /*0x0103*/ ai0103, /*0x0104*/ aiRemoveObjectAtPropPreset, - /*0x0105*/ ai0105, + /*0x0105*/ aiIfPropPresetHeightLessThan, /*0x0106*/ aiSetTarget, /*0x0107*/ aiIfPresetsTargetIsNotMyTarget, /*0x0108*/ aiIfChrTarget, diff --git a/src/game/game_0601b0.c b/src/game/game_0601b0.c index c8e0775a2..fa477d5db 100644 --- a/src/game/game_0601b0.c +++ b/src/game/game_0601b0.c @@ -7000,49 +7000,20 @@ glabel func0f066054 /* f066200: 00000000 */ sll $zero,$zero,0x0 ); -GLOBAL_ASM( -glabel func0f066204 -/* f066204: 27bdffe8 */ addiu $sp,$sp,-24 -/* f066208: afbf0014 */ sw $ra,0x14($sp) -/* f06620c: 90820000 */ lbu $v0,0x0($a0) -/* f066210: 24010003 */ addiu $at,$zero,0x3 -/* f066214: 54410006 */ bnel $v0,$at,.L0f066230 -/* f066218: 24010006 */ addiu $at,$zero,0x6 -/* f06621c: 0fc0a277 */ jal func0f0289dc -/* f066220: 00000000 */ sll $zero,$zero,0x0 -/* f066224: 10000017 */ beqz $zero,.L0f066284 -/* f066228: 8fbf0014 */ lw $ra,0x14($sp) -/* f06622c: 24010006 */ addiu $at,$zero,0x6 -.L0f066230: -/* f066230: 54410006 */ bnel $v0,$at,.L0f06624c -/* f066234: 24010001 */ addiu $at,$zero,0x1 -/* f066238: 0fc3082e */ jal func0f0c20b8 -/* f06623c: 00000000 */ sll $zero,$zero,0x0 -/* f066240: 10000010 */ beqz $zero,.L0f066284 -/* f066244: 8fbf0014 */ lw $ra,0x14($sp) -/* f066248: 24010001 */ addiu $at,$zero,0x1 -.L0f06624c: -/* f06624c: 10410003 */ beq $v0,$at,.L0f06625c -/* f066250: 24010002 */ addiu $at,$zero,0x2 -/* f066254: 54410006 */ bnel $v0,$at,.L0f066270 -/* f066258: 44800000 */ mtc1 $zero,$f0 -.L0f06625c: -/* f06625c: 0fc21d5b */ jal func0f08756c -/* f066260: 00000000 */ sll $zero,$zero,0x0 -/* f066264: 10000007 */ beqz $zero,.L0f066284 -/* f066268: 8fbf0014 */ lw $ra,0x14($sp) -/* f06626c: 44800000 */ mtc1 $zero,$f0 -.L0f066270: -/* f066270: 00000000 */ sll $zero,$zero,0x0 -/* f066274: e4a00000 */ swc1 $f0,0x0($a1) -/* f066278: e4e00000 */ swc1 $f0,0x0($a3) -/* f06627c: e4c00000 */ swc1 $f0,0x0($a2) -/* f066280: 8fbf0014 */ lw $ra,0x14($sp) -.L0f066284: -/* f066284: 27bd0018 */ addiu $sp,$sp,0x18 -/* f066288: 03e00008 */ jr $ra -/* f06628c: 00000000 */ sll $zero,$zero,0x0 -); +void propGetBbox(struct prop *prop, f32 *width, f32 *ymax, f32 *ymin) +{ + if (prop->type == PROPTYPE_CHR) { + propChrGetBbox(prop, width, ymax, ymin); + } else if (prop->type == PROPTYPE_PLAYER) { + propPlayerGetBbox(prop, width, ymax, ymin); + } else if (prop->type == PROPTYPE_OBJ || prop->type == PROPTYPE_DOOR) { + propObjGetBbox(prop, width, ymax, ymin); + } else { + *width = 0; + *ymin = 0; + *ymax = 0; + } +} GLOBAL_ASM( glabel func0f066290 diff --git a/src/game/game_066310.c b/src/game/game_066310.c index 46dcaa4cb..5b5b6a4ec 100644 --- a/src/game/game_066310.c +++ b/src/game/game_066310.c @@ -13929,7 +13929,7 @@ glabel func0f0714b8 /* f0715b0: 0561000c */ bgez $t3,.L0f0715e4 /* f0715b4: 27a50088 */ addiu $a1,$sp,0x88 /* f0715b8: 27a60084 */ addiu $a2,$sp,0x84 -/* f0715bc: 0fc21d5b */ jal func0f08756c +/* f0715bc: 0fc21d5b */ jal propObjGetBbox /* f0715c0: 27a70080 */ addiu $a3,$sp,0x80 /* f0715c4: 3c017f1b */ lui $at,%hi(var7f1aa2cc) /* f0715c8: c422a2cc */ lwc1 $f2,%lo(var7f1aa2cc)($at) @@ -38316,7 +38316,7 @@ glabel func0f087458 ); GLOBAL_ASM( -glabel func0f08756c +glabel propObjGetBbox /* f08756c: 27bdffe0 */ addiu $sp,$sp,-32 /* f087570: afbf0014 */ sw $ra,0x14($sp) /* f087574: 8c820004 */ lw $v0,0x4($a0) diff --git a/src/game/game_0b28d0.c b/src/game/game_0b28d0.c index e1584c070..763ce9cf8 100644 --- a/src/game/game_0b28d0.c +++ b/src/game/game_0b28d0.c @@ -17398,7 +17398,7 @@ glabel func0f0c1ff4 ); GLOBAL_ASM( -glabel func0f0c20b8 +glabel propPlayerGetBbox /* f0c20b8: 27bdffe8 */ addiu $sp,$sp,-24 /* f0c20bc: afbf0014 */ sw $ra,0x14($sp) /* f0c20c0: afa5001c */ sw $a1,0x1c($sp) diff --git a/src/game/game_0c37d0.c b/src/game/game_0c37d0.c index f1c06280e..15e582c04 100644 --- a/src/game/game_0c37d0.c +++ b/src/game/game_0c37d0.c @@ -445,7 +445,7 @@ glabel func0f0c3c8c .L0f0c3d0c: /* f0c3d0c: afac0040 */ sw $t4,0x40($sp) .L0f0c3d10: -/* f0c3d10: 0fc3082e */ jal func0f0c20b8 +/* f0c3d10: 0fc3082e */ jal propPlayerGetBbox /* f0c3d14: 8c4400bc */ lw $a0,0xbc($v0) /* f0c3d18: 8e0d0284 */ lw $t5,0x284($s0) /* f0c3d1c: 27a60058 */ addiu $a2,$sp,0x58 @@ -602,7 +602,7 @@ glabel func0f0c3e14 .L0f0c3f50: /* f0c3f50: 8e0d0284 */ lw $t5,0x284($s0) /* f0c3f54: 27a70058 */ addiu $a3,$sp,0x58 -/* f0c3f58: 0fc3082e */ jal func0f0c20b8 +/* f0c3f58: 0fc3082e */ jal propPlayerGetBbox /* f0c3f5c: 8da400bc */ lw $a0,0xbc($t5) /* f0c3f60: c7a40054 */ lwc1 $f4,0x54($sp) /* f0c3f64: c7a600c4 */ lwc1 $f6,0xc4($sp) @@ -1373,7 +1373,7 @@ glabel func0f0c4a5c /* f0c4a88: 27a70040 */ addiu $a3,$sp,0x40 /* f0c4a8c: 27a60044 */ addiu $a2,$sp,0x44 /* f0c4a90: 27a50038 */ addiu $a1,$sp,0x38 -/* f0c4a94: 0fc3082e */ jal func0f0c20b8 +/* f0c4a94: 0fc3082e */ jal propPlayerGetBbox /* f0c4a98: 8dc400bc */ lw $a0,0xbc($t6) /* f0c4a9c: 3c03800a */ lui $v1,0x800a /* f0c4aa0: 8c63a244 */ lw $v1,-0x5dbc($v1) @@ -1749,7 +1749,7 @@ glabel func0f0c4fd8 /* f0c4ff8: 27a500fc */ addiu $a1,$sp,0xfc /* f0c4ffc: 27a600f8 */ addiu $a2,$sp,0xf8 /* f0c5000: 27a700f4 */ addiu $a3,$sp,0xf4 -/* f0c5004: 0fc3082e */ jal func0f0c20b8 +/* f0c5004: 0fc3082e */ jal propPlayerGetBbox /* f0c5008: 8dc400bc */ lw $a0,0xbc($t6) /* f0c500c: 8e0f029c */ lw $t7,0x29c($s0) /* f0c5010: 05e00026 */ bltz $t7,.L0f0c50ac @@ -4105,7 +4105,7 @@ glabel func0f0c69b8 /* f0c7210: e466029c */ swc1 $f6,0x29c($v1) /* f0c7214: 8c6400bc */ lw $a0,0xbc($v1) .L0f0c7218: -/* f0c7218: 0fc3082e */ jal func0f0c20b8 +/* f0c7218: 0fc3082e */ jal propPlayerGetBbox /* f0c721c: e7a00074 */ swc1 $f0,0x74($sp) /* f0c7220: 3c08800a */ lui $t0,%hi(g_Vars) /* f0c7224: 3c017f1b */ lui $at,%hi(var7f1ad840) diff --git a/src/game/game_0c79f0.c b/src/game/game_0c79f0.c index 595b1d624..aa64c7ffc 100644 --- a/src/game/game_0c79f0.c +++ b/src/game/game_0c79f0.c @@ -1050,7 +1050,7 @@ glabel func0f0c8598 /* f0c8604: 8e0400bc */ lw $a0,0xbc($s0) /* f0c8608: 27a50144 */ addiu $a1,$sp,0x144 /* f0c860c: 27a6014c */ addiu $a2,$sp,0x14c -/* f0c8610: 0fc3082e */ jal func0f0c20b8 +/* f0c8610: 0fc3082e */ jal propPlayerGetBbox /* f0c8614: 27a70148 */ addiu $a3,$sp,0x148 /* f0c8618: 3c10800a */ lui $s0,%hi(var800a0004) /* f0c861c: 8e10a244 */ lw $s0,-0x5dbc($s0) @@ -6309,7 +6309,7 @@ glabel func0f0cd05c /* f0cd09c: 8c5800bc */ lw $t8,0xbc($v0) /* f0cd0a0: c70a0010 */ lwc1 $f10,0x10($t8) /* f0cd0a4: e7aa0058 */ swc1 $f10,0x58($sp) -/* f0cd0a8: 0fc3082e */ jal func0f0c20b8 +/* f0cd0a8: 0fc3082e */ jal propPlayerGetBbox /* f0cd0ac: 8c4400bc */ lw $a0,0xbc($v0) /* f0cd0b0: 8e190284 */ lw $t9,0x284($s0) /* f0cd0b4: 27a60050 */ addiu $a2,$sp,0x50 @@ -6396,7 +6396,7 @@ glabel func0f0cd1a4 /* f0cd1e4: 27a600c4 */ addiu $a2,$sp,0xc4 /* f0cd1e8: 27a500bc */ addiu $a1,$sp,0xbc /* f0cd1ec: 27a700c0 */ addiu $a3,$sp,0xc0 -/* f0cd1f0: 0fc3082e */ jal func0f0c20b8 +/* f0cd1f0: 0fc3082e */ jal propPlayerGetBbox /* f0cd1f4: 8de400bc */ lw $a0,0xbc($t7) /* f0cd1f8: 8e180284 */ lw $t8,0x284($s0) /* f0cd1fc: 00002825 */ or $a1,$zero,$zero @@ -7216,7 +7216,7 @@ glabel func0f0cdb68 /* f0cdddc: 000c6980 */ sll $t5,$t4,0x6 /* f0cdde0: 05a30017 */ bgezl $t5,.L0f0cde40 /* f0cdde4: c7ac00b0 */ lwc1 $f12,0xb0($sp) -/* f0cdde8: 0fc21d5b */ jal func0f08756c +/* f0cdde8: 0fc21d5b */ jal propObjGetBbox /* f0cddec: e7ae0060 */ swc1 $f14,0x60($sp) /* f0cddf0: 3c02800a */ lui $v0,%hi(var8009de78) /* f0cddf4: 2442de78 */ addiu $v0,$v0,%lo(var8009de78) diff --git a/src/game/game_0d1fe0.c b/src/game/game_0d1fe0.c index fe426571f..5768a58db 100644 --- a/src/game/game_0d1fe0.c +++ b/src/game/game_0d1fe0.c @@ -283,7 +283,7 @@ glabel func0f0d22f8 /* f0d233c: 27a60040 */ addiu $a2,$sp,0x40 /* f0d2340: 8f0400bc */ lw $a0,0xbc($t8) /* f0d2344: e7a00064 */ swc1 $f0,0x64($sp) -/* f0d2348: 0fc3082e */ jal func0f0c20b8 +/* f0d2348: 0fc3082e */ jal propPlayerGetBbox /* f0d234c: 27a7003c */ addiu $a3,$sp,0x3c /* f0d2350: 3c017f1b */ lui $at,%hi(var7f1adb34) /* f0d2354: c420db34 */ lwc1 $f0,%lo(var7f1adb34)($at) @@ -1086,7 +1086,7 @@ glabel func0f0d2e18 /* f0d2ef8: c4500008 */ lwc1 $f16,0x8($v0) /* f0d2efc: 46105480 */ add.s $f18,$f10,$f16 /* f0d2f00: e7b20130 */ swc1 $f18,0x130($sp) -/* f0d2f04: 0fc21d5b */ jal func0f08756c +/* f0d2f04: 0fc21d5b */ jal propObjGetBbox /* f0d2f08: 8d041a6c */ lw $a0,0x1a6c($t0) /* f0d2f0c: 8e290284 */ lw $t1,0x284($s1) /* f0d2f10: 27aa00a8 */ addiu $t2,$sp,0xa8 @@ -1809,7 +1809,7 @@ glabel func0f0d3940 /* f0d3968: 27a6003c */ addiu $a2,$sp,0x3c /* f0d396c: 27a50030 */ addiu $a1,$sp,0x30 /* f0d3970: 27a70038 */ addiu $a3,$sp,0x38 -/* f0d3974: 0fc21d5b */ jal func0f08756c +/* f0d3974: 0fc21d5b */ jal propObjGetBbox /* f0d3978: 8dc41a6c */ lw $a0,0x1a6c($t6) /* f0d397c: 3c03800a */ lui $v1,0x800a /* f0d3980: 8c63a244 */ lw $v1,-0x5dbc($v1) diff --git a/src/game/game_129900.c b/src/game/game_129900.c index a128a279a..b79e82abf 100644 --- a/src/game/game_129900.c +++ b/src/game/game_129900.c @@ -3024,7 +3024,7 @@ glabel func0f12b0e0 /* f12b8cc: 27a600dc */ addiu $a2,$sp,0xdc /* f12b8d0: 45000026 */ bc1f .L0f12b96c /* f12b8d4: 00000000 */ sll $zero,$zero,0x0 -/* f12b8d8: 0fc19881 */ jal func0f066204 +/* f12b8d8: 0fc19881 */ jal propGetBbox /* f12b8dc: 27a700d8 */ addiu $a3,$sp,0xd8 /* f12b8e0: 3c0141a0 */ lui $at,0x41a0 /* f12b8e4: c7a000e0 */ lwc1 $f0,0xe0($sp) diff --git a/src/include/commands.h b/src/include/commands.h index b4822659f..10b74454d 100644 --- a/src/include/commands.h +++ b/src/include/commands.h @@ -2210,9 +2210,16 @@ #define remove_object_at_proppreset \ mkshort(0x0104), -#define cmd0105(u1, label) \ +/** + * Checks if the height (bounding box height, not Y value) of the current chr's + * proppreset is less than the given value. + * + * If the prop is invalid, the computed height will be zero which causes the + * check to pass. + */ +#define if_proppreset_height_lt(height, label) \ mkshort(0x0105), \ - mkshort(u1), \ + mkshort(height), \ label, /** diff --git a/src/include/game/chr/chr.h b/src/include/game/chr/chr.h index 33f69bb7c..5f94f5c5c 100644 --- a/src/include/game/chr/chr.h +++ b/src/include/game/chr/chr.h @@ -94,7 +94,7 @@ u32 func0f028590(void); struct prop *chrGetEquippedWeaponProp(struct chrdata *chr, s32 hand); struct prop *chrGetEquippedWeaponPropWithCheck(struct chrdata *chr, s32 hand); bool chrUpdateGeometry(struct prop *prop, struct geo **arg1, struct geo **arg2); -void func0f0289dc(struct prop *prop, f32 *width, f32 *ymax, f32 *ymin); +void propChrGetBbox(struct prop *prop, f32 *width, f32 *ymax, f32 *ymin); u32 func0f028a50(void); u32 func0f028d50(void); u32 func0f028e18(void); diff --git a/src/include/game/chr/chraicommands.h b/src/include/game/chr/chraicommands.h index ad864d424..c21f6cb64 100644 --- a/src/include/game/chr/chraicommands.h +++ b/src/include/game/chr/chraicommands.h @@ -261,7 +261,7 @@ /*0x0102*/ bool aiSetLights(void); /*0x0103*/ bool ai0103(void); /*0x0104*/ bool aiRemoveObjectAtPropPreset(void); -/*0x0105*/ bool ai0105(void); +/*0x0105*/ bool aiIfPropPresetHeightLessThan(void); /*0x0106*/ bool aiSetTarget(void); /*0x0107*/ bool aiIfPresetsTargetIsNotMyTarget(void); /*0x0108*/ bool aiIfChrTarget(void); diff --git a/src/include/game/game_0601b0.h b/src/include/game/game_0601b0.h index 0d76b507e..166e4aa16 100644 --- a/src/include/game/game_0601b0.h +++ b/src/include/game/game_0601b0.h @@ -55,7 +55,7 @@ u32 func0f065e74(void); u32 func0f065e98(void); u32 func0f065f80(void); u32 func0f066054(void); -void func0f066204(struct prop *prop, f32 *arg1, f32 *arg2, f32 *arg3); +void propGetBbox(struct prop *prop, f32 *width, f32 *ymax, f32 *ymin); u32 func0f066290(void); #endif diff --git a/src/include/game/game_066310.h b/src/include/game/game_066310.h index f064d03f1..5132066c5 100644 --- a/src/include/game/game_066310.h +++ b/src/include/game/game_066310.h @@ -232,7 +232,7 @@ u32 func0f086d60(void); void func0f086f40(struct prop *prop); u32 func0f087420(void); u32 func0f087458(void); -u32 func0f08756c(void); +void propObjGetBbox(struct prop *prop, f32 *width, f32 *ymax, f32 *ymin); u32 func0f087638(void); u32 func0f087668(void); u32 func0f08791c(void); diff --git a/src/include/game/game_0b28d0.h b/src/include/game/game_0b28d0.h index 0c9781330..acae3aaed 100644 --- a/src/include/game/game_0b28d0.h +++ b/src/include/game/game_0b28d0.h @@ -158,7 +158,7 @@ void func0f0c1d20(void); u32 func0f0c1e54(void); u32 func0f0c1f08(void); u32 func0f0c1ff4(void); -u32 func0f0c20b8(void); +void propPlayerGetBbox(struct prop *prop, f32 *width, f32 *ymax, f32 *ymin); u32 func0f0c2194(void); u32 func0f0c21a4(void); u32 func0f0c2210(void);