From fafde86c22baf4ec78ca77173fb7e7da0c916b22 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 11 Feb 2020 17:24:16 +1000 Subject: [PATCH] Decompile aiObjectMoveToPad --- src/game/chr/chraicommands.c | 106 ++++++++------------------- src/game/data/data_0083d0.c | 2 +- src/include/game/chr/chraicommands.h | 2 +- src/include/game/game_066310.h | 2 +- src/include/library/library_159b0.h | 2 +- src/include/library/library_16110.h | 2 +- src/include/types.h | 2 +- 7 files changed, 35 insertions(+), 83 deletions(-) diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index 201dc9f33..b60b35564 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -3167,83 +3167,35 @@ bool aiGiveObjectToChr(void) /** * @cmd 006b */ -GLOBAL_ASM( -glabel ai006b -/* f052080: 3c02800a */ lui $v0,%hi(g_Vars) -/* f052084: 24429fc0 */ addiu $v0,$v0,%lo(g_Vars) -/* f052088: 8c4e0434 */ lw $t6,0x434($v0) -/* f05208c: 8c4f0438 */ lw $t7,0x438($v0) -/* f052090: 27bdff28 */ addiu $sp,$sp,-216 -/* f052094: afbf002c */ sw $ra,0x2c($sp) -/* f052098: 01cf1821 */ addu $v1,$t6,$t7 -/* f05209c: 90640002 */ lbu $a0,0x2($v1) -/* f0520a0: 0fc2556c */ jal objFindByTagId -/* f0520a4: afa300d4 */ sw $v1,0xd4($sp) -/* f0520a8: 8fa300d4 */ lw $v1,0xd4($sp) -/* f0520ac: afa200d0 */ sw $v0,0xd0($sp) -/* f0520b0: 90780003 */ lbu $t8,0x3($v1) -/* f0520b4: 90680004 */ lbu $t0,0x4($v1) -/* f0520b8: 0018ca00 */ sll $t9,$t8,0x8 -/* f0520bc: 03283825 */ or $a3,$t9,$t0 -/* f0520c0: 1040002e */ beqz $v0,.L0f05217c -/* f0520c4: 30e9ffff */ andi $t1,$a3,0xffff -/* f0520c8: 8c4a0014 */ lw $t2,0x14($v0) -/* f0520cc: 01202025 */ or $a0,$t1,$zero -/* f0520d0: 2405004e */ addiu $a1,$zero,0x4e -/* f0520d4: 11400029 */ beqz $t2,.L0f05217c -/* f0520d8: 00000000 */ sll $zero,$zero,0x0 -/* f0520dc: 0fc456ac */ jal padUnpack -/* f0520e0: 27a60038 */ addiu $a2,$sp,0x38 -/* f0520e4: c7a40044 */ lwc1 $f4,0x44($sp) -/* f0520e8: 44800000 */ mtc1 $zero,$f0 -/* f0520ec: c7a80048 */ lwc1 $f8,0x48($sp) -/* f0520f0: 46002187 */ neg.s $f6,$f4 -/* f0520f4: c7b0004c */ lwc1 $f16,0x4c($sp) -/* f0520f8: 46004287 */ neg.s $f10,$f8 -/* f0520fc: e7a60010 */ swc1 $f6,0x10($sp) -/* f052100: c7a60054 */ lwc1 $f6,0x54($sp) -/* f052104: c7a80058 */ lwc1 $f8,0x58($sp) -/* f052108: c7a40050 */ lwc1 $f4,0x50($sp) -/* f05210c: 46008487 */ neg.s $f18,$f16 -/* f052110: 44050000 */ mfc1 $a1,$f0 -/* f052114: 44060000 */ mfc1 $a2,$f0 -/* f052118: 44070000 */ mfc1 $a3,$f0 -/* f05211c: e7b20018 */ swc1 $f18,0x18($sp) -/* f052120: e7aa0014 */ swc1 $f10,0x14($sp) -/* f052124: 27a4008c */ addiu $a0,$sp,0x8c -/* f052128: e7a60020 */ swc1 $f6,0x20($sp) -/* f05212c: e7a80024 */ swc1 $f8,0x24($sp) -/* f052130: 0c005b56 */ jal func00016d58 -/* f052134: e7a4001c */ swc1 $f4,0x1c($sp) -/* f052138: 8fab00d0 */ lw $t3,0xd0($sp) -/* f05213c: 27a5008c */ addiu $a1,$sp,0x8c -/* f052140: 8d620018 */ lw $v0,0x18($t3) -/* f052144: 50400004 */ beqzl $v0,.L0f052158 -/* f052148: 8fac0080 */ lw $t4,0x80($sp) -/* f05214c: 0c0057c1 */ jal func00015f04 -/* f052150: c44c0014 */ lwc1 $f12,0x14($v0) -/* f052154: 8fac0080 */ lw $t4,0x80($sp) -.L0f052158: -/* f052158: 27a50038 */ addiu $a1,$sp,0x38 -/* f05215c: 240dffff */ addiu $t5,$zero,-1 -/* f052160: a7ad0036 */ sh $t5,0x36($sp) -/* f052164: afa50010 */ sw $a1,0x10($sp) -/* f052168: 8fa400d0 */ lw $a0,0xd0($sp) -/* f05216c: 27a6008c */ addiu $a2,$sp,0x8c -/* f052170: 27a70034 */ addiu $a3,$sp,0x34 -/* f052174: 0fc1a9cc */ jal func0f06a730 -/* f052178: a7ac0034 */ sh $t4,0x34($sp) -.L0f05217c: -/* f05217c: 3c03800a */ lui $v1,%hi(g_Vars) -/* f052180: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars) -/* f052184: 8c6e0438 */ lw $t6,0x438($v1) -/* f052188: 8fbf002c */ lw $ra,0x2c($sp) -/* f05218c: 27bd00d8 */ addiu $sp,$sp,0xd8 -/* f052190: 25cf0005 */ addiu $t7,$t6,0x5 -/* f052194: ac6f0438 */ sw $t7,0x438($v1) -/* f052198: 03e00008 */ jr $ra -/* f05219c: 00001025 */ or $v0,$zero,$zero -); +bool aiObjectMoveToPad(void) +{ + u8 *cmd = g_Vars.ailist + g_Vars.aioffset; + struct defaultobj *obj = objFindByTagId(cmd[2]); + u16 padnum = cmd[4] | (cmd[3] << 8); + f32 matrix[16]; + struct pad pad; + s16 rooms[2]; + + if (obj && obj->prop) { + padUnpack(padnum, PADFIELD_POS | PADFIELD_LOOK | PADFIELD_UP | PADFIELD_ROOM, &pad); + func00016d58(matrix, + 0, 0, 0, + -pad.look.x, -pad.look.y, -pad.look.z, + pad.up.x, pad.up.y, pad.up.z); + + if (obj->unk18) { + func00015f04(obj->unk18->unk14, matrix); + } + + rooms[0] = pad.room; + rooms[1] = -1; + func0f06a730(obj, &pad, matrix, rooms, &pad); + } + + g_Vars.aioffset += 5; + + return false; +} /** * @cmd 006c diff --git a/src/game/data/data_0083d0.c b/src/game/data/data_0083d0.c index fa4b284f3..f4562470d 100644 --- a/src/game/data/data_0083d0.c +++ b/src/game/data/data_0083d0.c @@ -6326,7 +6326,7 @@ bool (*g_CommandPointers[])(void) = { /*0x0068*/ aiChrDropItems, /*0x0069*/ aiChrDropWeapon, /*0x006a*/ aiGiveObjectToChr, - /*0x006b*/ ai006b, + /*0x006b*/ aiObjectMoveToPad, /*0x006c*/ aiOpenDoor, /*0x006d*/ aiCloseDoor, /*0x006e*/ aiIfDoorState, diff --git a/src/include/game/chr/chraicommands.h b/src/include/game/chr/chraicommands.h index 19be9bb1a..e94ccf43f 100644 --- a/src/include/game/chr/chraicommands.h +++ b/src/include/game/chr/chraicommands.h @@ -109,7 +109,7 @@ /*0x0068*/ bool aiChrDropItems(void); /*0x0069*/ bool aiChrDropWeapon(void); /*0x006a*/ bool aiGiveObjectToChr(void); -/*0x006b*/ bool ai006b(void); +/*0x006b*/ bool aiObjectMoveToPad(void); /*0x006c*/ bool aiOpenDoor(void); /*0x006d*/ bool aiCloseDoor(void); /*0x006e*/ bool aiIfDoorState(void); diff --git a/src/include/game/game_066310.h b/src/include/game/game_066310.h index de0c3335f..8ec9b4891 100644 --- a/src/include/game/game_066310.h +++ b/src/include/game/game_066310.h @@ -89,7 +89,7 @@ u32 func0f06a52c(void); u32 func0f06a550(void); u32 func0f06a580(void); u32 func0f06a620(void); -u32 func0f06a730(void); +void func0f06a730(struct defaultobj *obj, struct pad *newpad, f32 *matrix, s16 *arg3, struct pad *arg4); u32 func0f06ab60(void); u32 func0f06ac40(void); void func0f06ac90(struct prop *prop); diff --git a/src/include/library/library_159b0.h b/src/include/library/library_159b0.h index a72955903..9cf8a5c5b 100644 --- a/src/include/library/library_159b0.h +++ b/src/include/library/library_159b0.h @@ -20,7 +20,7 @@ u32 func00015e4c(void); u32 func00015e80(void); u32 func00015ea8(void); u32 func00015edc(void); -u32 func00015f04(void); +void func00015f04(f32 arg0, f32 *arg1); u32 func00015f4c(void); u32 func00015f88(void); u32 func00015fd0(void); diff --git a/src/include/library/library_16110.h b/src/include/library/library_16110.h index db0c292fb..de4543bb1 100644 --- a/src/include/library/library_16110.h +++ b/src/include/library/library_16110.h @@ -25,7 +25,7 @@ u32 func00016820(void); u32 func00016874(void); u32 func00016ae4(void); u32 func00016b58(void); -u32 func00016d58(void); +void func00016d58(f32 *matrix, f32 posx, f32 posy, f32 posz, f32 lookx, f32 looky, f32 lookz, f32 upx, f32 upy, f32 upz); u32 func00016dcc(void); u32 func00016e98(void); u32 func00017028(void); diff --git a/src/include/types.h b/src/include/types.h index 2059a5e0e..669a08470 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -131,7 +131,7 @@ struct chr020 { /*0x08*/ u32 unk08; /*0x0c*/ u32 unk0c; /*0x10*/ u32 unk10; - /*0x14*/ u32 unk14; + /*0x14*/ f32 unk14; /*0x18*/ u32 unk18; /*0x1c*/ u32 unk1c; /*0x20*/ struct anim *anim;