From 9235f27286a18ff45c2c4501c9208aabbfeaf47c Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sun, 29 Mar 2020 10:56:49 +1000 Subject: [PATCH] Decompile propobjInteract --- src/game/chr/chraicommands.c | 16 +- src/game/data/data_00e460.c | 2 +- src/game/game_00c490.c | 8 +- src/game/game_015010.c | 2 +- src/game/game_0601b0.c | 2 +- src/game/game_091e10.c | 4 +- src/game/game_190260.c | 2 +- src/game/game_19c990.c | 4 +- src/game/propobj.c | 471 ++++++++-------------------- src/include/constants.h | 4 +- src/include/game/data/data_00e460.h | 2 +- src/include/game/game_097ba0.h | 4 +- src/include/game/game_0f09f0.h | 2 +- src/include/game/game_179060.h | 2 +- src/include/game/propobj.h | 4 +- src/include/types.h | 1 + 16 files changed, 155 insertions(+), 375 deletions(-) diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index b902e9687..3300417bd 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -67,9 +67,9 @@ */ bool aiGoToNext(void) { - u8 *buffer = g_Vars.ailist + g_Vars.aioffset; - g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, buffer[2]); - osSyncPrintf(" (%d)\n", g_Vars.aioffset); + u8 *cmd = g_Vars.ailist + g_Vars.aioffset; + g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[2]); + osSyncPrintf(" (%d)\n", cmd[2]); return false; } @@ -79,9 +79,9 @@ bool aiGoToNext(void) */ bool aiGoToFirst(void) { - u8 *buffer = g_Vars.ailist + g_Vars.aioffset; - g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, 0, buffer[2]); - osSyncPrintf(" (%d)\n", g_Vars.aioffset); + u8 *cmd = g_Vars.ailist + g_Vars.aioffset; + g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, 0, cmd[2]); + osSyncPrintf(" (%d)\n", cmd[2]); return false; } @@ -2330,7 +2330,7 @@ bool ai0065(void) if (obj->prop->type == PROPTYPE_DOOR) { doorActivateWrapper(obj->prop, 0); } else if (obj->prop->type == PROPTYPE_OBJ || obj->prop->type == PROPTYPE_WEAPON) { - func0f086f40(obj->prop); + propobjInteract(obj->prop); } } @@ -2350,7 +2350,7 @@ bool aiDestroyObject(void) if (obj && obj->prop && func0f0687b8(obj) == 0) { struct defaultobj *entity = obj->prop->obj; - if (entity->obj == 0xeb) { + if (entity->obj == MODEL_ELVIS_SAUCER) { obj->flags = (obj->flags & ~OBJFLAG_00010000) | OBJFLAG_INVINCIBLE; func0f129900(entity->prop, &entity->prop->pos, &entity->prop->rooms[0], 3, 0); func0f12e714(entity->prop, 0x16); diff --git a/src/game/data/data_00e460.c b/src/game/data/data_00e460.c index f72a75654..4f5ee7b31 100644 --- a/src/game/data/data_00e460.c +++ b/src/game/data/data_00e460.c @@ -1052,7 +1052,7 @@ u32 var80069958 = 0x3f800000; f32 g_AmmoMultiplier = 1; u32 var80069960 = 0x00000000; u32 var80069964 = 0xffffffff; -u32 var80069968 = 0x00000000; +struct autogunobj *g_ThrownLaptops = NULL; u32 var8006996c = 0x00000000; u32 var80069970 = 0x00000000; u32 var80069974 = 0x00000000; diff --git a/src/game/game_00c490.c b/src/game/game_00c490.c index 1cbc2ed62..67d13f3c8 100644 --- a/src/game/game_00c490.c +++ b/src/game/game_00c490.c @@ -529,8 +529,8 @@ glabel func0f00c490 /* f00cb78: 3c078007 */ lui $a3,%hi(var80069970) /* f00cb7c: 24e79970 */ addiu $a3,$a3,%lo(var80069970) /* f00cb80: 8ce40000 */ lw $a0,0x0($a3) -/* f00cb84: 3c068007 */ lui $a2,%hi(var80069968) -/* f00cb88: 24c69968 */ addiu $a2,$a2,%lo(var80069968) +/* f00cb84: 3c068007 */ lui $a2,%hi(g_ThrownLaptops) +/* f00cb88: 24c69968 */ addiu $a2,$a2,%lo(g_ThrownLaptops) /* f00cb8c: 00047880 */ sll $t7,$a0,0x2 /* f00cb90: 01e47823 */ subu $t7,$t7,$a0 /* f00cb94: 000f7880 */ sll $t7,$t7,0x2 @@ -547,8 +547,8 @@ glabel func0f00c490 /* f00cbc0: ac22996c */ sw $v0,%lo(var8006996c)($at) /* f00cbc4: 24e79970 */ addiu $a3,$a3,%lo(var80069970) /* f00cbc8: 8ced0000 */ lw $t5,0x0($a3) -/* f00cbcc: 3c068007 */ lui $a2,%hi(var80069968) -/* f00cbd0: 24c69968 */ addiu $a2,$a2,%lo(var80069968) +/* f00cbcc: 3c068007 */ lui $a2,%hi(g_ThrownLaptops) +/* f00cbd0: 24c69968 */ addiu $a2,$a2,%lo(g_ThrownLaptops) /* f00cbd4: 19a0000b */ blez $t5,.L0f00cc04 /* f00cbd8: 8fa3001c */ lw $v1,0x1c($sp) /* f00cbdc: 00001025 */ or $v0,$zero,$zero diff --git a/src/game/game_015010.c b/src/game/game_015010.c index 6e829d52f..41417031c 100644 --- a/src/game/game_015010.c +++ b/src/game/game_015010.c @@ -23,7 +23,7 @@ void setupParseObjects(void) case OBJTYPE_DOOR: case OBJTYPE_BASIC: case OBJTYPE_KEY: - case OBJTYPE_05: + case OBJTYPE_ALARM: case OBJTYPE_CAMERA: case OBJTYPE_AMMOCRATE: case OBJTYPE_WEAPON: diff --git a/src/game/game_0601b0.c b/src/game/game_0601b0.c index 553eee1ea..dd510e1e0 100644 --- a/src/game/game_0601b0.c +++ b/src/game/game_0601b0.c @@ -3301,7 +3301,7 @@ glabel var7f1a9f14 /* f062eac: 8c2f9ef8 */ lw $t7,%lo(var7f1a9ef8)($at) /* f062eb0: 01e00008 */ jr $t7 /* f062eb4: 00000000 */ sll $zero,$zero,0x0 -/* f062eb8: 0fc21bd0 */ jal func0f086f40 +/* f062eb8: 0fc21bd0 */ jal propobjInteract /* f062ebc: 8fa4001c */ lw $a0,0x1c($sp) /* f062ec0: 10000004 */ beqz $zero,.L0f062ed4 /* f062ec4: 00402825 */ or $a1,$v0,$zero diff --git a/src/game/game_091e10.c b/src/game/game_091e10.c index 02ad6562f..cc6957e28 100644 --- a/src/game/game_091e10.c +++ b/src/game/game_091e10.c @@ -30,7 +30,7 @@ u32 setupGetCommandLength(u32 *cmd) case OBJTYPE_2B: return 23; case OBJTYPE_24: return 23; case OBJTYPE_KEY: return 24; - case OBJTYPE_05: return 23; + case OBJTYPE_ALARM: return 23; case OBJTYPE_CAMERA: return 49; case OBJTYPE_AMMOCRATE: return 24; case OBJTYPE_WEAPON: return 26; @@ -356,7 +356,7 @@ struct defaultobj *setupCommandGetObject(u32 cmdindex) case OBJTYPE_DOOR: case OBJTYPE_BASIC: case OBJTYPE_KEY: - case OBJTYPE_05: + case OBJTYPE_ALARM: case OBJTYPE_CAMERA: case OBJTYPE_AMMOCRATE: case OBJTYPE_WEAPON: diff --git a/src/game/game_190260.c b/src/game/game_190260.c index eae17e002..119d4927d 100644 --- a/src/game/game_190260.c +++ b/src/game/game_190260.c @@ -602,7 +602,7 @@ u32 propobjHandlePickupByAibot(struct prop *prop, struct chrdata *chr) } return 3; case OBJTYPE_BASIC: - case OBJTYPE_05: + case OBJTYPE_ALARM: case OBJTYPE_CAMERA: case OBJTYPE_CHR: case OBJTYPE_SINGLEMONITOR: diff --git a/src/game/game_19c990.c b/src/game/game_19c990.c index aab8a83c0..7c7d627a1 100644 --- a/src/game/game_19c990.c +++ b/src/game/game_19c990.c @@ -2719,8 +2719,8 @@ glabel func0f19ecdc /* f19ed70: 0fc678f8 */ jal func0f19e3e0 /* f19ed74: 00000000 */ sll $zero,$zero,0x0 .L0f19ed78: -/* f19ed78: 3c048007 */ lui $a0,%hi(var80069968) -/* f19ed7c: 8c849968 */ lw $a0,%lo(var80069968)($a0) +/* f19ed78: 3c048007 */ lui $a0,%hi(g_ThrownLaptops) +/* f19ed7c: 8c849968 */ lw $a0,%lo(g_ThrownLaptops)($a0) /* f19ed80: 8c890014 */ lw $t1,0x14($a0) /* f19ed84: 51200004 */ beqzl $t1,.L0f19ed98 /* f19ed88: 8e8a0284 */ lw $t2,0x284($s4) diff --git a/src/game/propobj.c b/src/game/propobj.c index c534d72e3..177e96452 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -35785,7 +35785,7 @@ bool func0f085158(struct defaultobj *obj) switch (obj->type) { case OBJTYPE_DOOR: case OBJTYPE_BASIC: - case OBJTYPE_05: + case OBJTYPE_ALARM: case OBJTYPE_CAMERA: case OBJTYPE_SINGLEMONITOR: case OBJTYPE_MULTIMONITOR: @@ -37466,7 +37466,7 @@ glabel func0f085eac ); GLOBAL_ASM( -glabel func0f086918 +glabel propobjGetCiTagId /* f086918: 27bdffc0 */ addiu $sp,$sp,-64 /* f08691c: afbf0024 */ sw $ra,0x24($sp) /* f086920: afb20020 */ sw $s2,0x20($sp) @@ -37537,7 +37537,7 @@ glabel var7f1aab3c /* f0869d4: 8c860004 */ lw $a2,0x4($a0) /* f0869d8: afa00024 */ sw $zero,0x24($sp) /* f0869dc: afa40030 */ sw $a0,0x30($sp) -/* f0869e0: 0fc21a46 */ jal func0f086918 +/* f0869e0: 0fc21a46 */ jal propobjGetCiTagId /* f0869e4: afa60028 */ sw $a2,0x28($sp) /* f0869e8: 8fa50024 */ lw $a1,0x24($sp) /* f0869ec: 10400003 */ beqz $v0,.L0f0869fc @@ -37924,347 +37924,126 @@ glabel var7f1aab50 /* f086f3c: 00000000 */ sll $zero,$zero,0x0 ); -GLOBAL_ASM( -glabel func0f086f40 -/* f086f40: 27bdffc8 */ addiu $sp,$sp,-56 -/* f086f44: afbf0024 */ sw $ra,0x24($sp) -/* f086f48: 8c8e0004 */ lw $t6,0x4($a0) -/* f086f4c: afa00030 */ sw $zero,0x30($sp) -/* f086f50: afa40038 */ sw $a0,0x38($sp) -/* f086f54: 0fc21a46 */ jal func0f086918 -/* f086f58: afae0034 */ sw $t6,0x34($sp) -/* f086f5c: 1040008c */ beqz $v0,.L0f087190 -/* f086f60: afa2002c */ sw $v0,0x2c($sp) -/* f086f64: 0fc67264 */ jal ciIsTourDone -/* f086f68: a3a0002b */ sb $zero,0x2b($sp) -/* f086f6c: 5040003f */ beqzl $v0,.L0f08706c -/* f086f70: 93ac002b */ lbu $t4,0x2b($sp) -/* f086f74: 8fa2002c */ lw $v0,0x2c($sp) -/* f086f78: 24010010 */ addiu $at,$zero,0x10 -/* f086f7c: 54410015 */ bnel $v0,$at,.L0f086fd4 -/* f086f80: 24010045 */ addiu $at,$zero,0x45 -/* f086f84: 0fc68606 */ jal getDeviceTrainingData -/* f086f88: 00000000 */ sll $zero,$zero,0x0 -/* f086f8c: 240f0001 */ addiu $t7,$zero,0x1 -/* f086f90: a3af002b */ sb $t7,0x2b($sp) -/* f086f94: 8c580000 */ lw $t8,0x0($v0) -/* f086f98: 3c048009 */ lui $a0,%hi(g_DeviceTrainingListMenuDialog) -/* f086f9c: 2405000d */ addiu $a1,$zero,0xd -/* f086fa0: 0018cfc2 */ srl $t9,$t8,0x1f -/* f086fa4: 13200006 */ beqz $t9,.L0f086fc0 -/* f086fa8: 248493e0 */ addiu $a0,$a0,%lo(g_DeviceTrainingListMenuDialog) -/* f086fac: 3c048009 */ lui $a0,%hi(g_DeviceTrainingDetailsMenuDialog) -/* f086fb0: 0fc3e178 */ jal func0f0f85e0 -/* f086fb4: 2484947c */ addiu $a0,$a0,%lo(g_DeviceTrainingDetailsMenuDialog) -/* f086fb8: 1000002c */ beqz $zero,.L0f08706c -/* f086fbc: 93ac002b */ lbu $t4,0x2b($sp) -.L0f086fc0: -/* f086fc0: 0fc3e178 */ jal func0f0f85e0 -/* f086fc4: 2405000d */ addiu $a1,$zero,0xd -/* f086fc8: 10000028 */ beqz $zero,.L0f08706c -/* f086fcc: 93ac002b */ lbu $t4,0x2b($sp) -/* f086fd0: 24010045 */ addiu $at,$zero,0x45 -.L0f086fd4: -/* f086fd4: 54410015 */ bnel $v0,$at,.L0f08702c -/* f086fd8: 2401007f */ addiu $at,$zero,0x7f -/* f086fdc: 0fc687f8 */ jal getHoloTrainingData -/* f086fe0: 00000000 */ sll $zero,$zero,0x0 -/* f086fe4: 24080001 */ addiu $t0,$zero,0x1 -/* f086fe8: a3a8002b */ sb $t0,0x2b($sp) -/* f086fec: 8c490000 */ lw $t1,0x0($v0) -/* f086ff0: 3c048009 */ lui $a0,%hi(g_HoloTrainingListMenuDialog) -/* f086ff4: 2405000d */ addiu $a1,$zero,0xd -/* f086ff8: 000957c2 */ srl $t2,$t1,0x1f -/* f086ffc: 11400006 */ beqz $t2,.L0f087018 -/* f087000: 248495dc */ addiu $a0,$a0,%lo(g_HoloTrainingListMenuDialog) -/* f087004: 3c048009 */ lui $a0,%hi(g_HoloTrainingDetailsMenuDialog) -/* f087008: 0fc3e178 */ jal func0f0f85e0 -/* f08700c: 2484966c */ addiu $a0,$a0,%lo(g_HoloTrainingDetailsMenuDialog) -/* f087010: 10000016 */ beqz $zero,.L0f08706c -/* f087014: 93ac002b */ lbu $t4,0x2b($sp) -.L0f087018: -/* f087018: 0fc3e178 */ jal func0f0f85e0 -/* f08701c: 2405000d */ addiu $a1,$zero,0xd -/* f087020: 10000012 */ beqz $zero,.L0f08706c -/* f087024: 93ac002b */ lbu $t4,0x2b($sp) -/* f087028: 2401007f */ addiu $at,$zero,0x7f -.L0f08702c: -/* f08702c: 1441000e */ bne $v0,$at,.L0f087068 -/* f087030: 240b0001 */ addiu $t3,$zero,0x1 -/* f087034: 0fc6830c */ jal func0f1a0c30 -/* f087038: a3ab002b */ sb $t3,0x2b($sp) -/* f08703c: 10400007 */ beqz $v0,.L0f08705c -/* f087040: 3c048009 */ lui $a0,%hi(g_FrWeaponListMenuDialog) -/* f087044: 3c048009 */ lui $a0,%hi(g_FrTrainingInfoMenuDialog) -/* f087048: 24848e6c */ addiu $a0,$a0,%lo(g_FrTrainingInfoMenuDialog) -/* f08704c: 0fc3e178 */ jal func0f0f85e0 -/* f087050: 2405000d */ addiu $a1,$zero,0xd -/* f087054: 10000005 */ beqz $zero,.L0f08706c -/* f087058: 93ac002b */ lbu $t4,0x2b($sp) -.L0f08705c: -/* f08705c: 24848d78 */ addiu $a0,$a0,%lo(g_FrWeaponListMenuDialog) -/* f087060: 0fc3e178 */ jal func0f0f85e0 -/* f087064: 2405000d */ addiu $a1,$zero,0xd -.L0f087068: -/* f087068: 93ac002b */ lbu $t4,0x2b($sp) -.L0f08706c: -/* f08706c: 8fa2002c */ lw $v0,0x2c($sp) -/* f087070: 2401000e */ addiu $at,$zero,0xe -/* f087074: 55800031 */ bnezl $t4,.L0f08713c -/* f087078: 93a8002b */ lbu $t0,0x2b($sp) -/* f08707c: 14410008 */ bne $v0,$at,.L0f0870a0 -/* f087080: 240d0001 */ addiu $t5,$zero,0x1 -/* f087084: 3c048009 */ lui $a0,%hi(menudialog_information) -/* f087088: a3ad002b */ sb $t5,0x2b($sp) -/* f08708c: 248491e8 */ addiu $a0,$a0,%lo(menudialog_information) -/* f087090: 0fc3e178 */ jal func0f0f85e0 -/* f087094: 2405000d */ addiu $a1,$zero,0xd -/* f087098: 10000028 */ beqz $zero,.L0f08713c -/* f08709c: 93a8002b */ lbu $t0,0x2b($sp) -.L0f0870a0: -/* f0870a0: 2401000f */ addiu $at,$zero,0xf -/* f0870a4: 14410008 */ bne $v0,$at,.L0f0870c8 -/* f0870a8: 240e0001 */ addiu $t6,$zero,0x1 -/* f0870ac: 3c048007 */ lui $a0,%hi(g_CheatsMenuDialog) -/* f0870b0: a3ae002b */ sb $t6,0x2b($sp) -/* f0870b4: 24844368 */ addiu $a0,$a0,%lo(g_CheatsMenuDialog) -/* f0870b8: 0fc3e178 */ jal func0f0f85e0 -/* f0870bc: 2405000d */ addiu $a1,$zero,0xd -/* f0870c0: 1000001e */ beqz $zero,.L0f08713c -/* f0870c4: 93a8002b */ lbu $t0,0x2b($sp) -.L0f0870c8: -/* f0870c8: 2401001b */ addiu $at,$zero,0x1b -/* f0870cc: 14410008 */ bne $v0,$at,.L0f0870f0 -/* f0870d0: 240f0001 */ addiu $t7,$zero,0x1 -/* f0870d4: 3c048007 */ lui $a0,%hi(menudialog_weaponsavailable) -/* f0870d8: a3af002b */ sb $t7,0x2b($sp) -/* f0870dc: 2484352c */ addiu $a0,$a0,%lo(menudialog_weaponsavailable) -/* f0870e0: 0fc3e178 */ jal func0f0f85e0 -/* f0870e4: 2405000d */ addiu $a1,$zero,0xd -/* f0870e8: 10000014 */ beqz $zero,.L0f08713c -/* f0870ec: 93a8002b */ lbu $t0,0x2b($sp) -.L0f0870f0: -/* f0870f0: 24010047 */ addiu $at,$zero,0x47 -/* f0870f4: 14410008 */ bne $v0,$at,.L0f087118 -/* f0870f8: 24180001 */ addiu $t8,$zero,0x1 -/* f0870fc: 3c048007 */ lui $a0,%hi(g_MainMenuMenuDialog) -/* f087100: a3b8002b */ sb $t8,0x2b($sp) -/* f087104: 24843a5c */ addiu $a0,$a0,%lo(g_MainMenuMenuDialog) -/* f087108: 0fc3e178 */ jal func0f0f85e0 -/* f08710c: 24050002 */ addiu $a1,$zero,0x2 -/* f087110: 1000000a */ beqz $zero,.L0f08713c -/* f087114: 93a8002b */ lbu $t0,0x2b($sp) -.L0f087118: -/* f087118: 24010046 */ addiu $at,$zero,0x46 -/* f08711c: 14410006 */ bne $v0,$at,.L0f087138 -/* f087120: 24190001 */ addiu $t9,$zero,0x1 -/* f087124: 3c048009 */ lui $a0,%hi(menudialog_hangarinformation) -/* f087128: a3b9002b */ sb $t9,0x2b($sp) -/* f08712c: 24849970 */ addiu $a0,$a0,%lo(menudialog_hangarinformation) -/* f087130: 0fc3e178 */ jal func0f0f85e0 -/* f087134: 2405000d */ addiu $a1,$zero,0xd -.L0f087138: -/* f087138: 93a8002b */ lbu $t0,0x2b($sp) -.L0f08713c: -/* f08713c: 3c048009 */ lui $a0,%hi(var80095200) -/* f087140: 24058118 */ addiu $a1,$zero,-32488 -/* f087144: 1100000d */ beqz $t0,.L0f08717c -/* f087148: 00003025 */ or $a2,$zero,$zero -/* f08714c: 3c01bf80 */ lui $at,0xbf80 -/* f087150: 44812000 */ mtc1 $at,$f4 -/* f087154: 2409ffff */ addiu $t1,$zero,-1 -/* f087158: 240affff */ addiu $t2,$zero,-1 -/* f08715c: 240bffff */ addiu $t3,$zero,-1 -/* f087160: afab001c */ sw $t3,0x1c($sp) -/* f087164: afaa0018 */ sw $t2,0x18($sp) -/* f087168: afa90010 */ sw $t1,0x10($sp) -/* f08716c: 8c845200 */ lw $a0,%lo(var80095200)($a0) -/* f087170: 2407ffff */ addiu $a3,$zero,-1 -/* f087174: 0c004241 */ jal func00010904 -/* f087178: e7a40014 */ swc1 $f4,0x14($sp) -.L0f08717c: -/* f08717c: 8fa40038 */ lw $a0,0x38($sp) -/* f087180: 0fc3f525 */ jal func0f0fd494 -/* f087184: 24840008 */ addiu $a0,$a0,8 -/* f087188: 10000080 */ beqz $zero,.L0f08738c -/* f08718c: 00000000 */ sll $zero,$zero,0x0 -.L0f087190: -/* f087190: 8fac0034 */ lw $t4,0x34($sp) -/* f087194: 24010005 */ addiu $at,$zero,0x5 -/* f087198: 3c048009 */ lui $a0,%hi(var80095200) -/* f08719c: 91820003 */ lbu $v0,0x3($t4) -/* f0871a0: 240500ba */ addiu $a1,$zero,0xba -/* f0871a4: 00003025 */ or $a2,$zero,$zero -/* f0871a8: 14410019 */ bne $v0,$at,.L0f087210 -/* f0871ac: 8fb80034 */ lw $t8,0x34($sp) -/* f0871b0: 3c01bf80 */ lui $at,0xbf80 -/* f0871b4: 44813000 */ mtc1 $at,$f6 -/* f0871b8: 240dffff */ addiu $t5,$zero,-1 -/* f0871bc: 240effff */ addiu $t6,$zero,-1 -/* f0871c0: 240fffff */ addiu $t7,$zero,-1 -/* f0871c4: afaf001c */ sw $t7,0x1c($sp) -/* f0871c8: afae0018 */ sw $t6,0x18($sp) -/* f0871cc: afad0010 */ sw $t5,0x10($sp) -/* f0871d0: 8c845200 */ lw $a0,%lo(var80095200)($a0) -/* f0871d4: 2407ffff */ addiu $a3,$zero,-1 -/* f0871d8: 0c004241 */ jal func00010904 -/* f0871dc: e7a60014 */ swc1 $f6,0x14($sp) -/* f0871e0: 0fc2410e */ jal alarmIsActive -/* f0871e4: 00000000 */ sll $zero,$zero,0x0 -/* f0871e8: 10400005 */ beqz $v0,.L0f087200 -/* f0871ec: 00000000 */ sll $zero,$zero,0x0 -/* f0871f0: 0fc24105 */ jal alarmDeactivate -/* f0871f4: 00000000 */ sll $zero,$zero,0x0 -/* f0871f8: 10000064 */ beqz $zero,.L0f08738c -/* f0871fc: 00000000 */ sll $zero,$zero,0x0 -.L0f087200: -/* f087200: 0fc240ec */ jal alarmActivate -/* f087204: 00000000 */ sll $zero,$zero,0x0 -/* f087208: 10000060 */ beqz $zero,.L0f08738c -/* f08720c: 00000000 */ sll $zero,$zero,0x0 -.L0f087210: -/* f087210: 8f190008 */ lw $t9,0x8($t8) -/* f087214: 2401000d */ addiu $at,$zero,0xd -/* f087218: 00194300 */ sll $t0,$t9,0xc -/* f08721c: 0501003d */ bgez $t0,.L0f087314 -/* f087220: 00000000 */ sll $zero,$zero,0x0 -/* f087224: 14410037 */ bne $v0,$at,.L0f087304 -/* f087228: 8fa40038 */ lw $a0,0x38($sp) -/* f08722c: 3c09800a */ lui $t1,%hi(g_Vars+0x318) -/* f087230: 8d29a2d8 */ lw $t1,%lo(g_Vars+0x318)($t1) -/* f087234: 3c0a800a */ lui $t2,%hi(g_Vars+0x284) -/* f087238: 3c03800a */ lui $v1,%hi(g_Vars+0x28c) -/* f08723c: 11200007 */ beqz $t1,.L0f08725c -/* f087240: 00000000 */ sll $zero,$zero,0x0 -/* f087244: 8d4aa244 */ lw $t2,%lo(g_Vars+0x284)($t2) -/* f087248: 8d4b00bc */ lw $t3,0xbc($t2) -/* f08724c: 0fc633fe */ jal mpPlayerGetIndex -/* f087250: 8d640004 */ lw $a0,0x4($t3) -/* f087254: 10000002 */ beqz $zero,.L0f087260 -/* f087258: 00401825 */ or $v1,$v0,$zero -.L0f08725c: -/* f08725c: 8c63a24c */ lw $v1,%lo(g_Vars+0x28c)($v1) -.L0f087260: -/* f087260: 0460004a */ bltz $v1,.L0f08738c -/* f087264: 8fac0034 */ lw $t4,0x34($sp) -/* f087268: 00036880 */ sll $t5,$v1,0x2 -/* f08726c: 01a36823 */ subu $t5,$t5,$v1 -/* f087270: 000d6880 */ sll $t5,$t5,0x2 -/* f087274: 01a36823 */ subu $t5,$t5,$v1 -/* f087278: 3c0e8007 */ lui $t6,%hi(var80069968) -/* f08727c: 8dce9968 */ lw $t6,%lo(var80069968)($t6) -/* f087280: 000d6880 */ sll $t5,$t5,0x2 -/* f087284: 01a36823 */ subu $t5,$t5,$v1 -/* f087288: 000d6880 */ sll $t5,$t5,0x2 -/* f08728c: 01ae7821 */ addu $t7,$t5,$t6 -/* f087290: 158f003e */ bne $t4,$t7,.L0f08738c -/* f087294: 00000000 */ sll $zero,$zero,0x0 -/* f087298: 8d980040 */ lw $t8,0x40($t4) -/* f08729c: 2404000e */ addiu $a0,$zero,0xe -/* f0872a0: 37190004 */ ori $t9,$t8,0x4 -/* f0872a4: 0fc44762 */ jal currentPlayerGiveWeapon -/* f0872a8: ad990040 */ sw $t9,0x40($t4) -/* f0872ac: 2404000e */ addiu $a0,$zero,0xe -/* f0872b0: 0fc221f2 */ jal func0f0887c8 -/* f0872b4: 00002825 */ or $a1,$zero,$zero -/* f0872b8: 0fc21f44 */ jal func0f087d10 -/* f0872bc: 2404000e */ addiu $a0,$zero,0xe -/* f0872c0: 8fa80034 */ lw $t0,0x34($sp) -/* f0872c4: 240100ff */ addiu $at,$zero,0xff -/* f0872c8: 910200a9 */ lbu $v0,0xa9($t0) -/* f0872cc: 1840002f */ blez $v0,.L0f08738c -/* f0872d0: 00000000 */ sll $zero,$zero,0x0 -/* f0872d4: 1041002d */ beq $v0,$at,.L0f08738c -/* f0872d8: 2404000e */ addiu $a0,$zero,0xe -/* f0872dc: 0fc2a69d */ jal func0f0a9a74 -/* f0872e0: 00002825 */ or $a1,$zero,$zero -/* f0872e4: 8fa90034 */ lw $t1,0x34($sp) -/* f0872e8: 2404000e */ addiu $a0,$zero,0xe -/* f0872ec: 00002825 */ or $a1,$zero,$zero -/* f0872f0: 912a00a9 */ lbu $t2,0xa9($t1) -/* f0872f4: 0fc2a6b1 */ jal func0f0a9ac4 -/* f0872f8: 004a3021 */ addu $a2,$v0,$t2 -/* f0872fc: 10000023 */ beqz $zero,.L0f08738c -/* f087300: 00000000 */ sll $zero,$zero,0x0 -.L0f087304: -/* f087304: 0fc22210 */ jal func0f088840 -/* f087308: 24050001 */ addiu $a1,$zero,0x1 -/* f08730c: 1000001f */ beqz $zero,.L0f08738c -/* f087310: afa20030 */ sw $v0,0x30($sp) -.L0f087314: -/* f087314: 0fc21b58 */ jal func0f086d60 -/* f087318: 8fa40038 */ lw $a0,0x38($sp) -/* f08731c: 1440001b */ bnez $v0,.L0f08738c -/* f087320: 8fab0034 */ lw $t3,0x34($sp) -/* f087324: 8d6d0010 */ lw $t5,0x10($t3) -/* f087328: 3c0f800a */ lui $t7,%hi(g_Vars+0x284) -/* f08732c: 31ae0002 */ andi $t6,$t5,0x2 -/* f087330: 11c00016 */ beqz $t6,.L0f08738c -/* f087334: 00000000 */ sll $zero,$zero,0x0 -/* f087338: 8defa244 */ lw $t7,%lo(g_Vars+0x284)($t7) -/* f08733c: 8df801b0 */ lw $t8,0x1b0($t7) -/* f087340: 17000012 */ bnez $t8,.L0f08738c -/* f087344: 00000000 */ sll $zero,$zero,0x0 -/* f087348: 0fc331a0 */ jal currentPlayerGetCrouchPos -/* f08734c: 00000000 */ sll $zero,$zero,0x0 -/* f087350: 24010002 */ addiu $at,$zero,0x2 -/* f087354: 1441000d */ bne $v0,$at,.L0f08738c -/* f087358: 3c02800a */ lui $v0,%hi(g_Vars+0x284) -/* f08735c: 8c42a244 */ lw $v0,%lo(g_Vars+0x284)($v0) -/* f087360: 44804000 */ mtc1 $zero,$f8 -/* f087364: c44a00b4 */ lwc1 $f10,0xb4($v0) -/* f087368: 460a4032 */ c.eq.s $f8,$f10 -/* f08736c: 00000000 */ sll $zero,$zero,0x0 -/* f087370: 45000006 */ bc1f .L0f08738c -/* f087374: 00000000 */ sll $zero,$zero,0x0 -/* f087378: 8c5902ac */ lw $t9,0x2ac($v0) -/* f08737c: 17200003 */ bnez $t9,.L0f08738c -/* f087380: 00000000 */ sll $zero,$zero,0x0 -/* f087384: 0fc31f3c */ jal currentPlayerGrabProp -/* f087388: 8fa40038 */ lw $a0,0x38($sp) -.L0f08738c: -/* f08738c: 3c03800a */ lui $v1,%hi(g_Vars) -/* f087390: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars) -/* f087394: 8c6c0318 */ lw $t4,0x318($v1) -/* f087398: 51800009 */ beqzl $t4,.L0f0873c0 -/* f08739c: 8c62028c */ lw $v0,0x28c($v1) -/* f0873a0: 8c680284 */ lw $t0,0x284($v1) -/* f0873a4: 8fa50038 */ lw $a1,0x38($sp) -/* f0873a8: 8d0900bc */ lw $t1,0xbc($t0) -/* f0873ac: 0fc61db9 */ jal func0f1876e4 -/* f0873b0: 8d240004 */ lw $a0,0x4($t1) -/* f0873b4: 10000013 */ beqz $zero,.L0f087404 -/* f0873b8: 8fa40038 */ lw $a0,0x38($sp) -/* f0873bc: 8c62028c */ lw $v0,0x28c($v1) -.L0f0873c0: -/* f0873c0: 8c6a0298 */ lw $t2,0x298($v1) -/* f0873c4: 55420008 */ bnel $t2,$v0,.L0f0873e8 -/* f0873c8: 8c6e0294 */ lw $t6,0x294($v1) -/* f0873cc: 8fa20034 */ lw $v0,0x34($sp) -/* f0873d0: 3c010004 */ lui $at,0x4 -/* f0873d4: 8c4b0040 */ lw $t3,0x40($v0) -/* f0873d8: 01616825 */ or $t5,$t3,$at -/* f0873dc: 10000008 */ beqz $zero,.L0f087400 -/* f0873e0: ac4d0040 */ sw $t5,0x40($v0) -/* f0873e4: 8c6e0294 */ lw $t6,0x294($v1) -.L0f0873e8: -/* f0873e8: 55c20006 */ bnel $t6,$v0,.L0f087404 -/* f0873ec: 8fa40038 */ lw $a0,0x38($sp) -/* f0873f0: 8fa20034 */ lw $v0,0x34($sp) -/* f0873f4: 8c4f0040 */ lw $t7,0x40($v0) -/* f0873f8: 35f84000 */ ori $t8,$t7,0x4000 -/* f0873fc: ac580040 */ sw $t8,0x40($v0) -.L0f087400: -/* f087400: 8fa40038 */ lw $a0,0x38($sp) -.L0f087404: -/* f087404: 0fc198c4 */ jal func0f066310 -/* f087408: 00002825 */ or $a1,$zero,$zero -/* f08740c: 8fbf0024 */ lw $ra,0x24($sp) -/* f087410: 8fa20030 */ lw $v0,0x30($sp) -/* f087414: 27bd0038 */ addiu $sp,$sp,0x38 -/* f087418: 03e00008 */ jr $ra -/* f08741c: 00000000 */ sll $zero,$zero,0x0 -); +bool propobjInteract(struct prop *prop) +{ + struct defaultobj *obj = prop->obj; + bool result = false; + u32 tag_id = propobjGetCiTagId(prop); + + if (tag_id) { + // CI object - terminals etc + u8 handled = false; + + if (ciIsTourDone()) { + if (tag_id == 0x10) { + struct trainingdata *data = getDeviceTrainingData(); + handled = true; + + if (data->intraining) { + func0f0f85e0(&g_DeviceTrainingDetailsMenuDialog, MENUROOT_TRAINING); + } else { + func0f0f85e0(&g_DeviceTrainingListMenuDialog, MENUROOT_TRAINING); + } + } else if (tag_id == 0x45) { + struct trainingdata *data = getHoloTrainingData(); + handled = true; + + if (data->intraining) { + func0f0f85e0(&g_HoloTrainingDetailsMenuDialog, MENUROOT_TRAINING); + } else { + func0f0f85e0(&g_HoloTrainingListMenuDialog, MENUROOT_TRAINING); + } + } else if (tag_id == 0x7f) { + handled = true; + + if (func0f1a0c30()) { + func0f0f85e0(&g_FrTrainingInfoMenuDialog, MENUROOT_TRAINING); + } else { + func0f0f85e0(&g_FrWeaponListMenuDialog, MENUROOT_TRAINING); + } + } + } + + if (!handled) { + if (tag_id == 0x0e) { + handled = true; + func0f0f85e0(&menudialog_information, MENUROOT_TRAINING); + } else if (tag_id == 0x0f) { + handled = true; + func0f0f85e0(&g_CheatsMenuDialog, MENUROOT_TRAINING); + } else if (tag_id == 0x1b) { + handled = true; + func0f0f85e0(&menudialog_weaponsavailable, MENUROOT_TRAINING); + } else if (tag_id == 0x47) { + handled = true; + func0f0f85e0(&g_MainMenuMenuDialog, MENUROOT_SOLOPAUSE); + } else if (tag_id == 0x46) { + handled = true; + func0f0f85e0(&menudialog_hangarinformation, MENUROOT_TRAINING); + } + } + + if (handled) { + func00010904(var80095200, -32488, 0, -1, -1, -1, -1, -1); + } + + func0f0fd494(&prop->pos); + } else if (obj->type == OBJTYPE_ALARM) { + func00010904(var80095200, 0xba, 0, -1, -1, -1, -1, -1); + + if (alarmIsActive()) { + alarmDeactivate(); + } else { + alarmActivate(); + } + } else if (obj->flags & OBJFLAG_00080000) { + // Thrown laptop + if (obj->type == OBJTYPE_AUTOGUN) { + struct autogunobj *laptop = (struct autogunobj *)obj; + s32 playernum; + + if (g_Vars.normmplayerisrunning) { + playernum = mpPlayerGetIndex(g_Vars.currentplayer->prop->chr); + } else { + playernum = g_Vars.currentplayernum; + } + + if (playernum >= 0 && laptop == &g_ThrownLaptops[playernum]) { + obj->hidden |= OBJHFLAG_00000004; + currentPlayerGiveWeapon(WEAPON_LAPTOPGUN); + func0f0887c8(WEAPON_LAPTOPGUN, 0); + func0f087d10(WEAPON_LAPTOPGUN); + + if (laptop->unka9 > 0 && laptop->unka9 != 255) { + func0f0a9ac4(WEAPON_LAPTOPGUN, 0, func0f0a9a74(WEAPON_LAPTOPGUN, 0) + laptop->unka9); + } + } + } else { + result = func0f088840(prop, 1); + } + } else if (func0f086d60(prop) == 0 + && (obj->flags3 & OBJFLAG3_GRABBABLE) + && g_Vars.currentplayer->bondmovemode == MOVEMODE_WALK + && currentPlayerGetCrouchPos() == CROUCH_STAND + && g_Vars.currentplayer->crouchoffset == 0 + && g_Vars.currentplayer->onladder == false) { + currentPlayerGrabProp(prop); + } + + if (g_Vars.normmplayerisrunning) { + func0f1876e4(g_Vars.currentplayer->prop->chr, prop); + } else { + if (g_Vars.currentplayernum == g_Vars.coopplayernum) { + obj->hidden |= OBJHFLAG_ACTIVATED_BY_COOP; + } else if (g_Vars.currentplayernum == g_Vars.bondplayernum) { + obj->hidden |= OBJHFLAG_ACTIVATED_BY_BOND; + } + } + + func0f066310(prop, 0); + + return result; +} void propObjSetOrUnsetHiddenFlag00400000(struct prop *prop, bool enable) { @@ -42873,10 +42652,10 @@ glabel var7f1aae98 /* f08b2f8: 000b5880 */ sll $t3,$t3,0x2 /* f08b2fc: 001940c0 */ sll $t0,$t9,0x3 /* f08b300: 01284821 */ addu $t1,$t1,$t0 -/* f08b304: 3c0c8007 */ lui $t4,%hi(var80069968) +/* f08b304: 3c0c8007 */ lui $t4,%hi(g_ThrownLaptops) /* f08b308: 016a5823 */ subu $t3,$t3,$t2 /* f08b30c: 8d29b06c */ lw $t1,%lo(g_Props)($t1) -/* f08b310: 8d8c9968 */ lw $t4,%lo(var80069968)($t4) +/* f08b310: 8d8c9968 */ lw $t4,%lo(g_ThrownLaptops)($t4) /* f08b314: 000b5880 */ sll $t3,$t3,0x2 /* f08b318: 016a5823 */ subu $t3,$t3,$t2 /* f08b31c: 000b5880 */ sll $t3,$t3,0x2 diff --git a/src/include/constants.h b/src/include/constants.h index 7c57d6c90..475e20c40 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -1477,7 +1477,7 @@ #define OBJFLAG_00010000 0x00010000 // Not used in scripts #define OBJFLAG_INVINCIBLE 0x00020000 #define OBJFLAG_COLLECTABLE 0x00040000 -#define OBJFLAG_00080000 0x00080000 // Not used in scripts +#define OBJFLAG_00080000 0x00080000 // Thrown laptop? #define OBJFLAG_UNCOLLECTABLE 0x00100000 #define OBJFLAG_00200000 0x00200000 // Editor: "Bounce and Destroy If Shot" #define OBJFLAG_00400000 0x00400000 // Not used in scripts @@ -1581,7 +1581,7 @@ #define OBJTYPE_DOORSCALE 0x02 #define OBJTYPE_BASIC 0x03 #define OBJTYPE_KEY 0x04 -#define OBJTYPE_05 0x05 +#define OBJTYPE_ALARM 0x05 #define OBJTYPE_CAMERA 0x06 #define OBJTYPE_AMMOCRATE 0x07 #define OBJTYPE_WEAPON 0x08 diff --git a/src/include/game/data/data_00e460.h b/src/include/game/data/data_00e460.h index 1a64e5f52..dfd0739e8 100644 --- a/src/include/game/data/data_00e460.h +++ b/src/include/game/data/data_00e460.h @@ -45,7 +45,7 @@ extern u32 var8006992c; extern u32 var8006993c; extern f32 g_AmmoMultiplier; extern u32 var80069964; -extern u32 var80069968; +extern struct autogunobj *g_ThrownLaptops; extern u32 var80069970; extern u32 var80069974; extern u32 var80069978; diff --git a/src/include/game/game_097ba0.h b/src/include/game/game_097ba0.h index c3b6550cf..c362d3918 100644 --- a/src/include/game/game_097ba0.h +++ b/src/include/game/game_097ba0.h @@ -158,8 +158,8 @@ s32 ammotypeGetMaxCapacity(u32 ammotype); bool ammotypeAllowsUnlimitedAmmo(u32 ammotype); u32 func0f0a9980(void); s32 weaponGetAmmoType(s32 weaponnum, u32 func); -u32 func0f0a9a74(void); -u32 func0f0a9ac4(void); +s32 func0f0a9a74(s32 weaponnum, s32 arg1); +void func0f0a9ac4(s32 weaponnum, s32 arg1, s32 arg2); u32 func0f0a9b10(void); u32 func0f0a9b68(void); u32 func0f0a9d2c(void); diff --git a/src/include/game/game_0f09f0.h b/src/include/game/game_0f09f0.h index 3f9507aa3..c71c1d8ec 100644 --- a/src/include/game/game_0f09f0.h +++ b/src/include/game/game_0f09f0.h @@ -75,7 +75,7 @@ char *menuTextSaveDeviceName(struct menu_item *item); u32 func0f0fd118(u32 arg0); bool func0f0fd1f4(u32 arg0, u32 arg1); u32 func0f0fd320(void); -u32 func0f0fd494(void); +void func0f0fd494(struct coord *pos); void func0f0fd548(s32 arg0); u32 func0f0fd570(void); bool currentPlayerIsInTraining(void); diff --git a/src/include/game/game_179060.h b/src/include/game/game_179060.h index 1f2cd9597..b1dd534e8 100644 --- a/src/include/game/game_179060.h +++ b/src/include/game/game_179060.h @@ -114,7 +114,7 @@ u32 func0f186780(void); u32 chrGiveBriefcase(struct chrdata *chr, struct prop *prop); u32 func0f187288(void); bool chrGiveUplink(struct chrdata *chr, struct prop *prop); -u32 func0f1876e4(void); +void func0f1876e4(struct chrdata *chr, struct prop *prop); s32 menuhandlerMpDropOut(u32 operation, struct menu_item *item, s32 *value); s32 menuhandlerMpTeamsLabel(u32 operation, struct menu_item *item, s32 *value); u32 func0f1790fc(void); diff --git a/src/include/game/propobj.h b/src/include/game/propobj.h index 4e8b4a391..6cf83109f 100644 --- a/src/include/game/propobj.h +++ b/src/include/game/propobj.h @@ -225,11 +225,11 @@ void func0f0852ac(struct defaultobj *obj, f32 damage, struct coord *pos, s32 arg u32 func0f0859a0(void); u32 func0f085e00(void); u32 func0f085eac(void); -u32 func0f086918(void); +u32 propobjGetCiTagId(struct prop *prop); u32 objIsHealthy(struct defaultobj *obj); u32 func0f0869cc(void); bool func0f086d60(struct prop *prop); -void func0f086f40(struct prop *prop); +bool propobjInteract(struct prop *prop); void propObjSetOrUnsetHiddenFlag00400000(struct prop *prop, bool enable); u32 func0f087458(void); void propObjGetBbox(struct prop *prop, f32 *width, f32 *ymax, f32 *ymin); diff --git a/src/include/types.h b/src/include/types.h index 233ea2a00..82fa6cb15 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -958,6 +958,7 @@ struct autogunobj { // objtype 0d /*0xa0*/ u32 unka0; /*0xa4*/ u32 unka4; /*0xa8*/ u8 autogun_type; + /*0xa9*/ u8 unka9; }; struct multiammocrateobj { // objtype 14