Decompile playerExecutePreparedWarp

This commit is contained in:
Ryan Dwyer 2022-08-19 21:26:22 +10:00
parent 9517024fed
commit 71c317cd40
4 changed files with 129 additions and 360 deletions

View File

@ -4843,7 +4843,7 @@ bool aiWarpJoToPad(void)
{
u8 *cmd = g_Vars.ailist + g_Vars.aioffset;
u16 pad_id = cmd[3] | (cmd[2] << 8);
playerPrepareWarpToPad(pad_id);
playerPrepareWarpType1(pad_id);
g_Vars.aioffset += 4;
@ -5104,8 +5104,8 @@ bool ai00df(void)
s32 cmdindex = setupGetCmdIndexByTag(tag);
if (cmdindex >= 0) {
void *ptr = setupGetCmdByIndex(cmdindex + tag->cmdoffset);
playerPrepareWarpType2(ptr, cmd[4] | (cmd[3] << 8), cmd[6] | (cmd[5] << 8));
struct warpparams *params = (struct warpparams *) setupGetCmdByIndex(cmdindex + tag->cmdoffset);
playerPrepareWarpType2(params, cmd[4] | (cmd[3] << 8), cmd[6] | (cmd[5] << 8));
}
}
@ -5517,14 +5517,14 @@ bool ai00f4(void)
{
u8 *cmd = g_Vars.ailist + g_Vars.aioffset;
s32 a = cmd[3] | (cmd[2] << 8);
s16 b = cmd[5] | (cmd[4] << 8);
s16 c = cmd[7] | (cmd[6] << 8);
s32 d = cmd[9] | (cmd[8] << 8);
s16 e = cmd[11] | (cmd[10] << 8);
s32 f = cmd[13] | (cmd[12] << 8);
s32 range = cmd[3] | (cmd[2] << 8);
s16 height1 = cmd[5] | (cmd[4] << 8);
s16 rotangle = cmd[7] | (cmd[6] << 8);
s32 padnum = cmd[9] | (cmd[8] << 8);
s16 height2 = cmd[11] | (cmd[10] << 8);
s32 posangle = cmd[13] | (cmd[12] << 8);
playerPrepareWarpType3(f * M_BADTAU / 65536, c * M_BADTAU / 65536, a, b, e, d);
playerPrepareWarpType3(posangle * M_BADTAU / 65536, rotangle * M_BADTAU / 65536, range, height1, height2, padnum);
g_Vars.aioffset += 14;

View File

@ -72,16 +72,16 @@ f32 g_MpSwirlRotateSpeed;
f32 g_MpSwirlAngleDegrees;
f32 g_MpSwirlForwardSpeed;
f32 g_MpSwirlDistance;
s16 g_WarpPadId;
struct var8009ddec *var8009ddec;
f32 var8009ddf0;
f32 var8009ddf4;
f32 var8009ddf8;
f32 var8009ddfc;
f32 var8009de00;
u32 var8009de04;
s32 var8009de08;
u32 var8009de0c;
s16 g_WarpType1Pad;
struct warpparams *g_WarpType2Params;
f32 g_WarpType3PosAngle;
f32 g_WarpType3RotAngle;
f32 g_WarpType3Range;
f32 g_WarpType3Height;
f32 g_WarpType3MoreHeight;
u32 g_WarpType3Pad;
s32 g_WarpType2HasDirection;
u32 g_WarpType2Arg2;
s32 g_CutsceneCurAnimFrame60;
#if VERSION == VERSION_JPN_FINAL
@ -1663,364 +1663,130 @@ void playerEndCutscene(void)
}
}
void playerPrepareWarpToPad(s16 pad)
void playerPrepareWarpType1(s16 pad)
{
playerSetTickMode(TICKMODE_WARP);
g_PlayerTriggerGeFadeIn = false;
bmoveSetModeForAllPlayers(MOVEMODE_CUTSCENE);
playersClearMemCamRoom();
g_WarpPadId = pad;
g_WarpType1Pad = pad;
}
void playerPrepareWarpType2(struct var8009ddec *cmd, s32 arg1, s32 arg2)
void playerPrepareWarpType2(struct warpparams *cmd, bool hasdir, s32 arg2)
{
playerSetTickMode(TICKMODE_WARP);
g_PlayerTriggerGeFadeIn = false;
bmoveSetModeForAllPlayers(MOVEMODE_CUTSCENE);
playersClearMemCamRoom();
g_WarpPadId = -1;
var8009ddec = cmd;
var8009de08 = arg1;
var8009de0c = arg2;
g_WarpType1Pad = -1;
g_WarpType2Params = cmd;
g_WarpType2HasDirection = hasdir;
g_WarpType2Arg2 = arg2;
}
void playerPrepareWarpType3(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, s32 arg5)
void playerPrepareWarpType3(f32 posangle, f32 rotangle, f32 range, f32 height1, f32 height2, s32 padnum)
{
playerSetTickMode(TICKMODE_WARP);
g_PlayerTriggerGeFadeIn = false;
bmoveSetModeForAllPlayers(MOVEMODE_CUTSCENE);
playersClearMemCamRoom();
g_WarpPadId = -1;
var8009ddec = NULL;
var8009ddf0 = arg0;
var8009ddf4 = arg1;
var8009ddf8 = arg2;
var8009ddfc = arg3;
var8009de00 = arg4;
var8009de04 = arg5;
g_WarpType1Pad = -1;
g_WarpType2Params = NULL;
g_WarpType3PosAngle = posangle;
g_WarpType3RotAngle = rotangle;
g_WarpType3Range = range;
g_WarpType3Height = height1;
g_WarpType3MoreHeight = height2;
g_WarpType3Pad = padnum;
}
u32 var80070818 = 0x00000000;
u32 var8007081c = 0x00000000;
u32 var80070820 = 0x00000000;
u32 var80070824 = 0x00000000;
u32 var80070828 = 0x00000000;
u32 var8007082c = 0x3f800000;
u32 var80070830 = 0x00000000;
u32 var80070834 = 0x3f800000;
u32 var80070838 = 0x00000000;
u32 var8007083c = 0x00000000;
u32 g_GlobalMenuRoot = 0;
void playerExecutePreparedWarp(void)
{
struct pad pad;
struct coord pos = {0, 0, 0};
struct coord look = {0, 0, 1};
struct coord up = {0, 1, 0};
s32 room;
struct coord memcampos;
GLOBAL_ASM(
glabel playerExecutePreparedWarp
.late_rodata
glabel var7f1ad5cc
.word 0x40c907a9
.text
/* f0b9cbc: 27bdff48 */ addiu $sp,$sp,-184
/* f0b9cc0: 3c0f8007 */ lui $t7,%hi(var80070818)
/* f0b9cc4: afbf0024 */ sw $ra,0x24($sp)
/* f0b9cc8: afb00020 */ sw $s0,0x20($sp)
/* f0b9ccc: 25ef0818 */ addiu $t7,$t7,%lo(var80070818)
/* f0b9cd0: 8de10000 */ lw $at,0x0($t7)
/* f0b9cd4: 27ae0058 */ addiu $t6,$sp,0x58
/* f0b9cd8: 8de80004 */ lw $t0,0x4($t7)
/* f0b9cdc: adc10000 */ sw $at,0x0($t6)
/* f0b9ce0: 8de10008 */ lw $at,0x8($t7)
/* f0b9ce4: 3c0a8007 */ lui $t2,%hi(var80070824)
/* f0b9ce8: 254a0824 */ addiu $t2,$t2,%lo(var80070824)
/* f0b9cec: adc80004 */ sw $t0,0x4($t6)
/* f0b9cf0: adc10008 */ sw $at,0x8($t6)
/* f0b9cf4: 8d410000 */ lw $at,0x0($t2)
/* f0b9cf8: 27a9004c */ addiu $t1,$sp,0x4c
/* f0b9cfc: 8d4d0004 */ lw $t5,0x4($t2)
/* f0b9d00: ad210000 */ sw $at,0x0($t1)
/* f0b9d04: 8d410008 */ lw $at,0x8($t2)
/* f0b9d08: 3c188007 */ lui $t8,%hi(var80070830)
/* f0b9d0c: 27180830 */ addiu $t8,$t8,%lo(var80070830)
/* f0b9d10: ad2d0004 */ sw $t5,0x4($t1)
/* f0b9d14: ad210008 */ sw $at,0x8($t1)
/* f0b9d18: 8f010000 */ lw $at,0x0($t8)
/* f0b9d1c: 27b90040 */ addiu $t9,$sp,0x40
/* f0b9d20: 8f080004 */ lw $t0,0x4($t8)
/* f0b9d24: af210000 */ sw $at,0x0($t9)
/* f0b9d28: 8f010008 */ lw $at,0x8($t8)
/* f0b9d2c: 24040001 */ addiu $a0,$zero,0x1
/* f0b9d30: af280004 */ sw $t0,0x4($t9)
/* f0b9d34: 0fc3060c */ jal playerSetCameraMode
/* f0b9d38: af210008 */ sw $at,0x8($t9)
/* f0b9d3c: 3c04800a */ lui $a0,%hi(g_WarpPadId)
/* f0b9d40: 8484dde8 */ lh $a0,%lo(g_WarpPadId)($a0)
/* f0b9d44: 3c10800a */ lui $s0,%hi(var8009ddec)
/* f0b9d48: 24050042 */ addiu $a1,$zero,0x42
/* f0b9d4c: 0480000f */ bltz $a0,.L0f0b9d8c
/* f0b9d50: 2610ddec */ addiu $s0,$s0,%lo(var8009ddec)
/* f0b9d54: 0fc456ac */ jal padUnpack
/* f0b9d58: 27a60064 */ addiu $a2,$sp,0x64
/* f0b9d5c: c7a20064 */ lwc1 $f2,0x64($sp)
/* f0b9d60: c7ae0068 */ lwc1 $f14,0x68($sp)
/* f0b9d64: c7b0006c */ lwc1 $f16,0x6c($sp)
/* f0b9d68: 8fac00ac */ lw $t4,0xac($sp)
/* f0b9d6c: e7a20058 */ swc1 $f2,0x58($sp)
/* f0b9d70: e7a20030 */ swc1 $f2,0x30($sp)
/* f0b9d74: e7ae005c */ swc1 $f14,0x5c($sp)
/* f0b9d78: e7ae0034 */ swc1 $f14,0x34($sp)
/* f0b9d7c: e7b00060 */ swc1 $f16,0x60($sp)
/* f0b9d80: e7b00038 */ swc1 $f16,0x38($sp)
/* f0b9d84: 10000096 */ b .L0f0b9fe0
/* f0b9d88: afac003c */ sw $t4,0x3c($sp)
.L0f0b9d8c:
/* f0b9d8c: 8e020000 */ lw $v0,0x0($s0)
/* f0b9d90: 3c04800a */ lui $a0,%hi(var8009de04)
/* f0b9d94: 24050042 */ addiu $a1,$zero,0x42
/* f0b9d98: 10400030 */ beqz $v0,.L0f0b9e5c
/* f0b9d9c: 27a60064 */ addiu $a2,$sp,0x64
/* f0b9da0: c4440004 */ lwc1 $f4,0x4($v0)
/* f0b9da4: 24050042 */ addiu $a1,$zero,0x42
/* f0b9da8: 27a60064 */ addiu $a2,$sp,0x64
/* f0b9dac: e7a40058 */ swc1 $f4,0x58($sp)
/* f0b9db0: c4460008 */ lwc1 $f6,0x8($v0)
/* f0b9db4: e7a6005c */ swc1 $f6,0x5c($sp)
/* f0b9db8: c448000c */ lwc1 $f8,0xc($v0)
/* f0b9dbc: e7a80060 */ swc1 $f8,0x60($sp)
/* f0b9dc0: 0fc456ac */ jal padUnpack
/* f0b9dc4: 8c440018 */ lw $a0,0x18($v0)
/* f0b9dc8: 3c09800a */ lui $t1,%hi(var8009de08)
/* f0b9dcc: 8d29de08 */ lw $t1,%lo(var8009de08)($t1)
/* f0b9dd0: 8fab00ac */ lw $t3,0xac($sp)
/* f0b9dd4: c7a20064 */ lwc1 $f2,0x64($sp)
/* f0b9dd8: c7ae0068 */ lwc1 $f14,0x68($sp)
/* f0b9ddc: c7b0006c */ lwc1 $f16,0x6c($sp)
/* f0b9de0: 24010001 */ addiu $at,$zero,0x1
/* f0b9de4: afab003c */ sw $t3,0x3c($sp)
/* f0b9de8: e7a20030 */ swc1 $f2,0x30($sp)
/* f0b9dec: e7ae0034 */ swc1 $f14,0x34($sp)
/* f0b9df0: 1121007b */ beq $t1,$at,.L0f0b9fe0
/* f0b9df4: e7b00038 */ swc1 $f16,0x38($sp)
/* f0b9df8: 8e0a0000 */ lw $t2,0x0($s0)
/* f0b9dfc: 0c0068f4 */ jal cosf
/* f0b9e00: c54c0014 */ lwc1 $f12,0x14($t2)
/* f0b9e04: 8e0d0000 */ lw $t5,0x0($s0)
/* f0b9e08: e7a0002c */ swc1 $f0,0x2c($sp)
/* f0b9e0c: 0c0068f7 */ jal sinf
/* f0b9e10: c5ac0010 */ lwc1 $f12,0x10($t5)
/* f0b9e14: c7aa002c */ lwc1 $f10,0x2c($sp)
/* f0b9e18: 8e0f0000 */ lw $t7,0x0($s0)
/* f0b9e1c: 460a0482 */ mul.s $f18,$f0,$f10
/* f0b9e20: e7b2004c */ swc1 $f18,0x4c($sp)
/* f0b9e24: 0c0068f7 */ jal sinf
/* f0b9e28: c5ec0014 */ lwc1 $f12,0x14($t7)
/* f0b9e2c: 8e0e0000 */ lw $t6,0x0($s0)
/* f0b9e30: e7a00050 */ swc1 $f0,0x50($sp)
/* f0b9e34: 0c0068f4 */ jal cosf
/* f0b9e38: c5cc0014 */ lwc1 $f12,0x14($t6)
/* f0b9e3c: 8e190000 */ lw $t9,0x0($s0)
/* f0b9e40: e7a0002c */ swc1 $f0,0x2c($sp)
/* f0b9e44: 0c0068f4 */ jal cosf
/* f0b9e48: c72c0010 */ lwc1 $f12,0x10($t9)
/* f0b9e4c: c7a4002c */ lwc1 $f4,0x2c($sp)
/* f0b9e50: 46040182 */ mul.s $f6,$f0,$f4
/* f0b9e54: 10000062 */ b .L0f0b9fe0
/* f0b9e58: e7a60054 */ swc1 $f6,0x54($sp)
.L0f0b9e5c:
/* f0b9e5c: 0fc456ac */ jal padUnpack
/* f0b9e60: 8c84de04 */ lw $a0,%lo(var8009de04)($a0)
/* f0b9e64: 8fb800ac */ lw $t8,0xac($sp)
/* f0b9e68: c7a20064 */ lwc1 $f2,0x64($sp)
/* f0b9e6c: c7ae0068 */ lwc1 $f14,0x68($sp)
/* f0b9e70: c7b0006c */ lwc1 $f16,0x6c($sp)
/* f0b9e74: 3c10800a */ lui $s0,%hi(var8009ddf0)
/* f0b9e78: 2610ddf0 */ addiu $s0,$s0,%lo(var8009ddf0)
/* f0b9e7c: c60c0000 */ lwc1 $f12,0x0($s0)
/* f0b9e80: afb8003c */ sw $t8,0x3c($sp)
/* f0b9e84: e7a20030 */ swc1 $f2,0x30($sp)
/* f0b9e88: e7ae0034 */ swc1 $f14,0x34($sp)
/* f0b9e8c: 0c0068f7 */ jal sinf
/* f0b9e90: e7b00038 */ swc1 $f16,0x38($sp)
/* f0b9e94: e7a0002c */ swc1 $f0,0x2c($sp)
/* f0b9e98: 0c0068f4 */ jal cosf
/* f0b9e9c: c60c0000 */ lwc1 $f12,0x0($s0)
/* f0b9ea0: 3c01800a */ lui $at,%hi(var8009ddf8)
/* f0b9ea4: c42addf8 */ lwc1 $f10,%lo(var8009ddf8)($at)
/* f0b9ea8: c7a8002c */ lwc1 $f8,0x2c($sp)
/* f0b9eac: 3c01800a */ lui $at,%hi(var8009de00)
/* f0b9eb0: c7ae0034 */ lwc1 $f14,0x34($sp)
/* f0b9eb4: 460a4482 */ mul.s $f18,$f8,$f10
/* f0b9eb8: c426de00 */ lwc1 $f6,%lo(var8009de00)($at)
/* f0b9ebc: c7a20030 */ lwc1 $f2,0x30($sp)
/* f0b9ec0: 3c01800a */ lui $at,%hi(var8009ddfc)
/* f0b9ec4: c42addfc */ lwc1 $f10,%lo(var8009ddfc)($at)
/* f0b9ec8: 46067200 */ add.s $f8,$f14,$f6
/* f0b9ecc: c60c0000 */ lwc1 $f12,0x0($s0)
/* f0b9ed0: 46121100 */ add.s $f4,$f2,$f18
/* f0b9ed4: 460a4480 */ add.s $f18,$f8,$f10
/* f0b9ed8: e7a40058 */ swc1 $f4,0x58($sp)
/* f0b9edc: 0c0068f4 */ jal cosf
/* f0b9ee0: e7b2005c */ swc1 $f18,0x5c($sp)
/* f0b9ee4: e7a0002c */ swc1 $f0,0x2c($sp)
/* f0b9ee8: 0c0068f7 */ jal sinf
/* f0b9eec: c60c0000 */ lwc1 $f12,0x0($s0)
/* f0b9ef0: 3c01800a */ lui $at,%hi(var8009ddf8)
/* f0b9ef4: c426ddf8 */ lwc1 $f6,%lo(var8009ddf8)($at)
/* f0b9ef8: c7a4002c */ lwc1 $f4,0x2c($sp)
/* f0b9efc: c7b00038 */ lwc1 $f16,0x38($sp)
/* f0b9f00: c60c0000 */ lwc1 $f12,0x0($s0)
/* f0b9f04: 46062202 */ mul.s $f8,$f4,$f6
/* f0b9f08: 46088280 */ add.s $f10,$f16,$f8
/* f0b9f0c: 0c0068f4 */ jal cosf
/* f0b9f10: e7aa0060 */ swc1 $f10,0x60($sp)
/* f0b9f14: 3c01800a */ lui $at,%hi(var8009de00)
/* f0b9f18: c7ae0034 */ lwc1 $f14,0x34($sp)
/* f0b9f1c: c426de00 */ lwc1 $f6,%lo(var8009de00)($at)
/* f0b9f20: c7a20030 */ lwc1 $f2,0x30($sp)
/* f0b9f24: c7b20058 */ lwc1 $f18,0x58($sp)
/* f0b9f28: 46067200 */ add.s $f8,$f14,$f6
/* f0b9f2c: c7aa005c */ lwc1 $f10,0x5c($sp)
/* f0b9f30: c60c0000 */ lwc1 $f12,0x0($s0)
/* f0b9f34: 46121101 */ sub.s $f4,$f2,$f18
/* f0b9f38: 460a4481 */ sub.s $f18,$f8,$f10
/* f0b9f3c: e7a4004c */ swc1 $f4,0x4c($sp)
/* f0b9f40: 0c0068f7 */ jal sinf
/* f0b9f44: e7b20050 */ swc1 $f18,0x50($sp)
/* f0b9f48: 3c017f1b */ lui $at,%hi(var7f1ad5cc)
/* f0b9f4c: c42cd5cc */ lwc1 $f12,%lo(var7f1ad5cc)($at)
/* f0b9f50: 3c01800a */ lui $at,%hi(var8009ddf4)
/* f0b9f54: c428ddf4 */ lwc1 $f8,%lo(var8009ddf4)($at)
/* f0b9f58: 3c01800a */ lui $at,%hi(g_Vars+0x4c)
/* f0b9f5c: c42aa00c */ lwc1 $f10,%lo(g_Vars+0x4c)($at)
/* f0b9f60: c7b00038 */ lwc1 $f16,0x38($sp)
/* f0b9f64: c7a40060 */ lwc1 $f4,0x60($sp)
/* f0b9f68: 460a4482 */ mul.s $f18,$f8,$f10
/* f0b9f6c: 44800000 */ mtc1 $zero,$f0
/* f0b9f70: 46048181 */ sub.s $f6,$f16,$f4
/* f0b9f74: c6040000 */ lwc1 $f4,0x0($s0)
/* f0b9f78: e7a60054 */ swc1 $f6,0x54($sp)
/* f0b9f7c: 46122180 */ add.s $f6,$f4,$f18
/* f0b9f80: e6060000 */ swc1 $f6,0x0($s0)
/* f0b9f84: c6020000 */ lwc1 $f2,0x0($s0)
/* f0b9f88: 4602603e */ c.le.s $f12,$f2
/* f0b9f8c: 00000000 */ nop
/* f0b9f90: 45020009 */ bc1fl .L0f0b9fb8
/* f0b9f94: 4600103c */ c.lt.s $f2,$f0
/* f0b9f98: 460c1201 */ sub.s $f8,$f2,$f12
.L0f0b9f9c:
/* f0b9f9c: e6080000 */ swc1 $f8,0x0($s0)
/* f0b9fa0: c6020000 */ lwc1 $f2,0x0($s0)
/* f0b9fa4: 4602603e */ c.le.s $f12,$f2
/* f0b9fa8: 00000000 */ nop
/* f0b9fac: 4503fffb */ bc1tl .L0f0b9f9c
/* f0b9fb0: 460c1201 */ sub.s $f8,$f2,$f12
/* f0b9fb4: 4600103c */ c.lt.s $f2,$f0
.L0f0b9fb8:
/* f0b9fb8: 00000000 */ nop
/* f0b9fbc: 45020009 */ bc1fl .L0f0b9fe4
/* f0b9fc0: 8fa8003c */ lw $t0,0x3c($sp)
/* f0b9fc4: 460c1280 */ add.s $f10,$f2,$f12
.L0f0b9fc8:
/* f0b9fc8: e60a0000 */ swc1 $f10,0x0($s0)
/* f0b9fcc: c6020000 */ lwc1 $f2,0x0($s0)
/* f0b9fd0: 4600103c */ c.lt.s $f2,$f0
/* f0b9fd4: 00000000 */ nop
/* f0b9fd8: 4503fffb */ bc1tl .L0f0b9fc8
/* f0b9fdc: 460c1280 */ add.s $f10,$f2,$f12
.L0f0b9fe0:
/* f0b9fe0: 8fa8003c */ lw $t0,0x3c($sp)
.L0f0b9fe4:
/* f0b9fe4: 27a40058 */ addiu $a0,$sp,0x58
/* f0b9fe8: 27a50040 */ addiu $a1,$sp,0x40
/* f0b9fec: 27a6004c */ addiu $a2,$sp,0x4c
/* f0b9ff0: 27a70030 */ addiu $a3,$sp,0x30
/* f0b9ff4: 0fc306e9 */ jal player0f0c1ba4
/* f0b9ff8: afa80010 */ sw $t0,0x10($sp)
/* f0b9ffc: 8fbf0024 */ lw $ra,0x24($sp)
/* f0ba000: 8fb00020 */ lw $s0,0x20($sp)
/* f0ba004: 27bd00b8 */ addiu $sp,$sp,0xb8
/* f0ba008: 03e00008 */ jr $ra
/* f0ba00c: 00000000 */ nop
);
playerSetCameraMode(CAMERAMODE_THIRDPERSON);
// Mismatch: Can't match the last section's pos
//void playerExecutePreparedWarp(void)
//{
// struct pad pad; // 64
// struct coord pos = {0, 0, 0}; // 58
// struct coord look = {0, 0, 1}; // 4c
// struct coord up = {0, 1, 0}; // 40
// s32 room; // 3c
// struct coord memcampos; // 30
//
// playerSetCameraMode(CAMERAMODE_THIRDPERSON);
//
// // d4c
// if (g_WarpPadId >= 0) {
// // Used by device and holo training to warp player back to room
// padUnpack(g_WarpPadId, PADFIELD_POS | PADFIELD_ROOM, &pad);
//
// pos.x = pad.pos.x;
// pos.y = pad.pos.y;
// pos.z = pad.pos.z;
//
// memcampos.x = pad.pos.x;
// memcampos.y = pad.pos.y;
// memcampos.z = pad.pos.z;
//
// room = pad.room;
// } else /*d98*/ if (var8009ddec) {
// // Used by AI command 00df, but that command is not used
// pos.x = var8009ddec->pos.x;
// pos.y = var8009ddec->pos.y;
// pos.z = var8009ddec->pos.z;
//
// padUnpack(var8009ddec->pad, PADFIELD_POS | PADFIELD_ROOM, &pad);
//
// room = pad.room;
//
// memcampos.x = pad.pos.x;
// memcampos.y = pad.pos.y;
// memcampos.z = pad.pos.z;
//
// if (var8009de08 != 1) {
// look.x = cosf(var8009ddec->look[1]) * sinf(var8009ddec->look[0]);
// look.y = sinf(var8009ddec->look[1]);
// look.z = cosf(var8009ddec->look[1]) * cosf(var8009ddec->look[0]);
// }
// } else {
// // e5c
// // Used by AI command 00f4, but that command is not used
// padUnpack(var8009de04, PADFIELD_POS | PADFIELD_ROOM, &pad);
//
// room = pad.room;
//
// memcampos.f[0] = pad.pos.f[0];
// memcampos.f[1] = pad.pos.f[1];
// memcampos.f[2] = pad.pos.f[2];
//
// pos.f[0] = sinf(var8009ddf0); cosf(var8009ddf0);
// pos.f[0] = pos.f[0] * var8009ddf8 + memcampos.f[0];
// pos.f[1] = memcampos.f[1] + var8009de00 + var8009ddfc;
// pos.f[2] = cosf(var8009ddf0); sinf(var8009ddf0);
// pos.f[2] = pos.f[2] * var8009ddf8 + memcampos.f[2];
//
// cosf(var8009ddf0);
// look.x = memcampos.f[0] - pos.f[0];
// look.y = memcampos.f[1] + var8009de00 - pos.f[1];
// sinf(var8009ddf0);
// look.z = memcampos.f[2] - pos.f[2];
//
// var8009ddf0 += var8009ddf4 * g_Vars.lvupdate240freal;
//
// while (var8009ddf0 >= M_BADTAU) {
// var8009ddf0 -= M_BADTAU;
// }
//
// while (var8009ddf0 < 0) {
// var8009ddf0 += M_BADTAU;
// }
// }
//
// player0f0c1ba4(&pos, &up, &look, &memcampos, room);
//}
if (g_WarpType1Pad >= 0) {
// Warp to an exact position with a static direction of 0, 0, 1.
// Used by device and holo training to warp player back to room,
// and Deep Sea teleports
padUnpack(g_WarpType1Pad, PADFIELD_POS | PADFIELD_ROOM, &pad);
memcampos.x = pad.pos.x;
memcampos.y = pad.pos.y;
memcampos.z = pad.pos.z;
pos.x = memcampos.f[0];
pos.y = memcampos.f[1];
pos.z = memcampos.f[2];
room = pad.room;
} else if (g_WarpType2Params) {
// Warp to an exact position with an optional direction.
// Used by AI command 00df, but that command is not used.
pos.x = g_WarpType2Params->pos.x;
pos.y = g_WarpType2Params->pos.y;
pos.z = g_WarpType2Params->pos.z;
padUnpack(g_WarpType2Params->pad, PADFIELD_POS | PADFIELD_ROOM, &pad);
room = pad.room;
memcampos.x = pad.pos.x;
memcampos.y = pad.pos.y;
memcampos.z = pad.pos.z;
if (1);
if (g_WarpType2HasDirection != 1) {
look.x = cosf(g_WarpType2Params->look[1]) * sinf(g_WarpType2Params->look[0]);
look.y = sinf(g_WarpType2Params->look[1]);
look.z = cosf(g_WarpType2Params->look[1]) * cosf(g_WarpType2Params->look[0]);
}
} else {
// Warp to a location within a specified range and angle of the pad,
// with options for the direction and height offset from the pad.
// Used by AI command 00f4, but that command is not used.
padUnpack(g_WarpType3Pad, PADFIELD_POS | PADFIELD_ROOM, &pad);
room = pad.room;
memcampos.x = pad.pos.x;
memcampos.y = pad.pos.y;
memcampos.z = pad.pos.z;
pos.x = memcampos.x + sinf(g_WarpType3PosAngle) * g_WarpType3Range + cosf(g_WarpType3PosAngle) * 0.0f;
pos.y = memcampos.y + g_WarpType3MoreHeight + g_WarpType3Height;
pos.z = memcampos.z + cosf(g_WarpType3PosAngle) * g_WarpType3Range + sinf(g_WarpType3PosAngle) * 0.0f;
look.x = memcampos.x + cosf(g_WarpType3PosAngle) * 0.0f - pos.f[0];
look.y = memcampos.y + g_WarpType3MoreHeight - pos.f[1];
look.z = memcampos.z + sinf(g_WarpType3PosAngle) * 0.0f - pos.f[2];
g_WarpType3PosAngle += g_WarpType3RotAngle * g_Vars.lvupdate240freal;
while (g_WarpType3PosAngle >= M_BADTAU) {
g_WarpType3PosAngle -= M_BADTAU;
}
while (g_WarpType3PosAngle < 0) {
g_WarpType3PosAngle += M_BADTAU;
}
}
player0f0c1ba4(&pos, &up, &look, &memcampos, room);
}
void playerStartCutscene2(void)
{
@ -2382,6 +2148,9 @@ void playerStopAudioForPause(void)
}
}
u32 var8007083c = 0;
u32 g_GlobalMenuRoot = 0;
void playerTickPauseMenu(void)
{
bool opened = false;
@ -3908,7 +3677,7 @@ void playerTick(bool arg0)
} else if (g_Vars.currentplayer->teleportstate == TELEPORTSTATE_WHITE) {
// Deep Sea teleport
playerTickChrBody();
g_WarpPadId = g_Vars.currentplayer->teleportcamerapad;
g_WarpType1Pad = g_Vars.currentplayer->teleportcamerapad;
bmoveTick(0, 0, 0, 1);
playerExecutePreparedWarp();
} else if (g_Vars.currentplayer->visionmode == (u32)VISIONMODE_SLAYERROCKET) {

View File

@ -86,9 +86,9 @@ void playerBeginGeFadeIn(void);
void playersBeginMpSwirl(void);
void player0f0b9a20(void);
void playerEndCutscene(void);
void playerPrepareWarpToPad(s16 pad_id);
void playerPrepareWarpType2(struct var8009ddec *cmd, s32 arg1, s32 arg2);
void playerPrepareWarpType3(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, s32 arg5);
void playerPrepareWarpType1(s16 pad_id);
void playerPrepareWarpType2(struct warpparams *cmd, bool hasdir, s32 arg2);
void playerPrepareWarpType3(f32 posangle, f32 rotangle, f32 range, f32 height1, f32 height2, s32 padnum);
void playerStartCutscene2(void);
void playerSetFadeColour(s32 r, s32 g, s32 b, f32 a);
void playerAdjustFade(f32 maxfadetime, s32 r, s32 g, s32 b, f32 frac);

View File

@ -5972,7 +5972,7 @@ struct rdptask {
u32 unk5c;
};
struct var8009ddec {
struct warpparams {
/*0x00*/ u32 unk00;
/*0x04*/ struct coord pos;
/*0x10*/ f32 look[2];