From 912fa4f55468fe0fc293ca19fee6d39d0615b105 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sun, 12 Jan 2020 09:44:22 +1000 Subject: [PATCH] Decompile mpObjIsSafe --- src/game/game_187770.c | 86 ++++++++++++---------------------- src/include/game/game_187770.h | 2 +- src/include/types.h | 4 +- 3 files changed, 34 insertions(+), 58 deletions(-) diff --git a/src/game/game_187770.c b/src/game/game_187770.c index 16b28eff0..f5d323031 100644 --- a/src/game/game_187770.c +++ b/src/game/game_187770.c @@ -11308,61 +11308,35 @@ glabel func0f190be4 /* f191190: 00000000 */ sll $zero,$zero,0x0 ); -GLOBAL_ASM( -glabel func0f191194 -/* f191194: 54800004 */ bnezl $a0,.L0f1911a8 -/* f191198: 90820003 */ lbu $v0,0x3($a0) -/* f19119c: 03e00008 */ jr $ra -/* f1911a0: 00001025 */ or $v0,$zero,$zero -/* f1911a4: 90820003 */ lbu $v0,0x3($a0) -.L0f1911a8: -/* f1911a8: 24010007 */ addiu $at,$zero,0x7 -/* f1911ac: 10410005 */ beq $v0,$at,.L0f1911c4 -/* f1911b0: 24010014 */ addiu $at,$zero,0x14 -/* f1911b4: 10410003 */ beq $v0,$at,.L0f1911c4 -/* f1911b8: 24010015 */ addiu $at,$zero,0x15 -/* f1911bc: 54410004 */ bnel $v0,$at,.L0f1911d0 -/* f1911c0: 24010008 */ addiu $at,$zero,0x8 -.L0f1911c4: -/* f1911c4: 03e00008 */ jr $ra -/* f1911c8: 24020001 */ addiu $v0,$zero,0x1 -/* f1911cc: 24010008 */ addiu $at,$zero,0x8 -.L0f1911d0: -/* f1911d0: 5441001c */ bnel $v0,$at,.L0f191244 -/* f1911d4: 00001025 */ or $v0,$zero,$zero -/* f1911d8: 9082005c */ lbu $v0,0x5c($a0) -/* f1911dc: 2401001f */ addiu $at,$zero,0x1f -/* f1911e0: 10410013 */ beq $v0,$at,.L0f191230 -/* f1911e4: 2401001e */ addiu $at,$zero,0x1e -/* f1911e8: 10410011 */ beq $v0,$at,.L0f191230 -/* f1911ec: 24010055 */ addiu $at,$zero,0x55 -/* f1911f0: 1041000f */ beq $v0,$at,.L0f191230 -/* f1911f4: 24010021 */ addiu $at,$zero,0x21 -/* f1911f8: 1041000d */ beq $v0,$at,.L0f191230 -/* f1911fc: 24010022 */ addiu $at,$zero,0x22 -/* f191200: 1041000b */ beq $v0,$at,.L0f191230 -/* f191204: 24010020 */ addiu $at,$zero,0x20 -/* f191208: 10410009 */ beq $v0,$at,.L0f191230 -/* f19120c: 24010058 */ addiu $at,$zero,0x58 -/* f191210: 10410007 */ beq $v0,$at,.L0f191230 -/* f191214: 2401000f */ addiu $at,$zero,0xf -/* f191218: 14410007 */ bne $v0,$at,.L0f191238 -/* f19121c: 00000000 */ sll $zero,$zero,0x0 -/* f191220: 908e005f */ lbu $t6,0x5f($a0) -/* f191224: 24010001 */ addiu $at,$zero,0x1 -/* f191228: 15c10003 */ bne $t6,$at,.L0f191238 -/* f19122c: 00000000 */ sll $zero,$zero,0x0 -.L0f191230: -/* f191230: 03e00008 */ jr $ra -/* f191234: 00001025 */ or $v0,$zero,$zero -.L0f191238: -/* f191238: 03e00008 */ jr $ra -/* f19123c: 24020001 */ addiu $v0,$zero,0x1 -/* f191240: 00001025 */ or $v0,$zero,$zero -.L0f191244: -/* f191244: 03e00008 */ jr $ra -/* f191248: 00000000 */ sll $zero,$zero,0x0 -); +s32 mpObjIsSafe(struct defaultobj *obj) +{ + if (!obj) { + return false; + } + + if (obj->type == OBJTYPE_07 || obj->type == OBJTYPE_MULTIAMMOCRATE || obj->type == OBJTYPE_SHIELD) { + return true; + } + + if (obj->type == OBJTYPE_WEAPON) { + struct weaponobj *weapon = (struct weaponobj *)obj; + + if (weapon->weapon_id == WEAPON_NBOMB || + weapon->weapon_id == WEAPON_GRENADE || + weapon->weapon_id == WEAPON_GRENADEROUND || + weapon->weapon_id == WEAPON_PROXIMITYMINE || + weapon->weapon_id == WEAPON_REMOTEMINE || + weapon->weapon_id == WEAPON_TIMEDMINE || + weapon->weapon_id == WEAPON_ROCKET2 || + (weapon->weapon_id == WEAPON_DRAGON && weapon->dragonthrown == 1)) { + return false; + } + + return true; + } + + return false; +} GLOBAL_ASM( glabel func0f19124c @@ -11450,7 +11424,7 @@ glabel func0f19124c /* f191380: 51e00010 */ beqzl $t7,.L0f1913c4 /* f191384: 86220002 */ lh $v0,0x2($s1) .L0f191388: -/* f191388: 0fc64465 */ jal func0f191194 +/* f191388: 0fc64465 */ jal mpObjIsSafe /* f19138c: 00000000 */ sll $zero,$zero,0x0 /* f191390: 1040000b */ beqz $v0,.L0f1913c0 /* f191394: 02002025 */ or $a0,$s0,$zero diff --git a/src/include/game/game_187770.h b/src/include/game/game_187770.h index 7180bd885..1acdf7164 100644 --- a/src/include/game/game_187770.h +++ b/src/include/game/game_187770.h @@ -128,7 +128,7 @@ u32 func0f190708(void); u32 func0f190774(void); u32 func0f190784(void); u32 func0f190be4(void); -u32 func0f191194(void); +s32 mpObjIsSafe(struct defaultobj *obj); u32 func0f19124c(void); u32 func0f1913f8(void); u32 func0f191448(void); diff --git a/src/include/types.h b/src/include/types.h index 628b3c088..c0b809bd1 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -645,7 +645,9 @@ struct weaponobj { // objtype 0x08 /*0x5a*/ u8 numtiles; /*0x5b*/ u8 unk5b; /*0x5c*/ u8 weapon_id; - /*0x5e*/ s16 unk5e; + /*0x5d*/ s8 unk5d; + /*0x5e*/ s8 unk5e; + /*0x5f*/ u8 dragonthrown; /*0x60*/ s16 unk60; /*0x62*/ s16 team; };