diff --git a/src/game/bondbike.c b/src/game/bondbike.c index 57a5d1a65..41d10d6a7 100644 --- a/src/game/bondbike.c +++ b/src/game/bondbike.c @@ -177,20 +177,20 @@ void bbikeHandleActivate(void) struct hoverbikeobj *bike = (struct hoverbikeobj *)g_Vars.currentplayer->hoverbike->obj; struct model08thing *thing = func0f068af4(&bike->base); - f32 fVar5 = thing->unk04[1] * bike->base.model->unk14; - f32 fVar3 = thing->unk18 * bike->base.model->unk14; - f32 uVar4 = sqrtf(fVar5 * fVar5 + fVar3 * fVar3); + f32 sidedist = thing->unk04[1] * bike->base.model->unk14; + f32 frontdist = thing->unk18 * bike->base.model->unk14; + f32 diagdist = sqrtf(sidedist * sidedist + frontdist * frontdist); g_Vars.currentplayer->walkinitmove = false; - bbikeTryDismountAngle(1.5705462694168f, fVar5); - bbikeTryDismountAngle(4.7116389274597f, fVar5); - bbikeTryDismountAngle(0.7852731347084f, uVar4); - bbikeTryDismountAngle(5.4969120025635f, uVar4); - bbikeTryDismountAngle(2.3558194637299f, uVar4); - bbikeTryDismountAngle(3.9263656139374f, uVar4); - bbikeTryDismountAngle(0, fVar3); - bbikeTryDismountAngle(3.1410925388336f, fVar3); + bbikeTryDismountAngle(1.5705462694168f, sidedist); // 90 - left + bbikeTryDismountAngle(4.7116389274597f, sidedist); // 270 - right + bbikeTryDismountAngle(0.7852731347084f, diagdist); // 45 - front left + bbikeTryDismountAngle(5.4969120025635f, diagdist); // 315 - front right + bbikeTryDismountAngle(2.3558194637299f, diagdist); // 135 - back left + bbikeTryDismountAngle(3.9263656139374f, diagdist); // 225 - back right + bbikeTryDismountAngle(0, frontdist); // 0 - front + bbikeTryDismountAngle(3.1410925388336f, frontdist); // 180 - back if (g_Vars.currentplayer->walkinitmove) { bmoveSetMode(MOVEMODE_WALK); diff --git a/src/game/bondmove.c b/src/game/bondmove.c index 6f1022a6b..569cdf768 100644 --- a/src/game/bondmove.c +++ b/src/game/bondmove.c @@ -471,7 +471,7 @@ glabel var7f1ad8b4 /* f0c86f0: 02002025 */ or $a0,$s0,$zero /* f0c86f4: 3c067f1b */ lui $a2,%hi(var7f1ad860) /* f0c86f8: 24c6d860 */ addiu $a2,$a2,%lo(var7f1ad860) -/* f0c86fc: 0c0093af */ jal func00024ebc +/* f0c86fc: 0c0093af */ jal cdGetPos /* f0c8700: 240501c7 */ addiu $a1,$zero,0x1c7 /* f0c8704: 0c0093c4 */ jal func00024f10 /* f0c8708: 00000000 */ nop diff --git a/src/game/chr/chraction.c b/src/game/chr/chraction.c index 350e622ff..04e668d8a 100644 --- a/src/game/chr/chraction.c +++ b/src/game/chr/chraction.c @@ -340,7 +340,7 @@ glabel func0f02e550 .L0f02e61c: /* f02e61c: 3c067f1b */ lui $a2,%hi(var7f1a8acc) /* f02e620: 24c68acc */ addiu $a2,$a2,%lo(var7f1a8acc) -/* f02e624: 0c0093af */ jal func00024ebc +/* f02e624: 0c0093af */ jal cdGetPos /* f02e628: 24050949 */ addiu $a1,$zero,0x949 /* f02e62c: c7a8003c */ lwc1 $f8,0x3c($sp) /* f02e630: c60a0008 */ lwc1 $f10,0x8($s0) @@ -11049,7 +11049,7 @@ bool chrTryRunFromTarget(struct chrdata *chr) // If dst runs into a wall, set it to closest valid spot if (!func0002d7c0(&prop->pos, prop->rooms, &dst, 0x33, 1, ymax - prop->pos.y, ymin - prop->pos.y)) { - func00024ebc(&dst, 8788, "chraction.c"); + cdGetPos(&dst, 8788, "chraction.c"); } // Adjust dst to be two chr widths closer to avoid collision with wall @@ -16324,7 +16324,7 @@ glabel var7f1a9184 /* f040b1c: afad0224 */ sw $t5,0x224($sp) /* f040b20: 24c68af4 */ addiu $a2,$a2,%lo(var7f1a8af4) /* f040b24: 27a40228 */ addiu $a0,$sp,0x228 -/* f040b28: 0c0093af */ jal func00024ebc +/* f040b28: 0c0093af */ jal cdGetPos /* f040b2c: 24052f28 */ addiu $a1,$zero,0x2f28 /* f040b30: 0c0093ac */ jal cdGetObstacle /* f040b34: 00000000 */ nop @@ -26447,7 +26447,7 @@ bool chrRunFromPos(struct chrdata *chr, u32 speed, f32 rundist, struct coord *fr chrSetOrUnsetHiddenFlag00000100(chr, false); if (cdTestAToB4(&chr->prop->pos, chr->prop->rooms, &delta, CDTYPE_ALL, 4) == CDRESULT_COLLISION) { - func00024ebc(&delta, 18547, "chraction.c"); + cdGetPos(&delta, 18547, "chraction.c"); } chrSetOrUnsetHiddenFlag00000100(chr, true); @@ -26657,7 +26657,7 @@ glabel var7f1a942c /* f04ca20: 02002025 */ or $a0,$s0,$zero /* f04ca24: 3c067f1b */ lui $a2,%hi(var7f1a8ce4) /* f04ca28: 24c68ce4 */ addiu $a2,$a2,%lo(var7f1a8ce4) -/* f04ca2c: 0c0093af */ jal func00024ebc +/* f04ca2c: 0c0093af */ jal cdGetPos /* f04ca30: 240548fe */ addiu $a1,$zero,0x48fe /* f04ca34: c6040000 */ lwc1 $f4,0x0($s0) /* f04ca38: c7a600c8 */ lwc1 $f6,0xc8($sp) @@ -26781,6 +26781,119 @@ glabel var7f1a942c /* f04cc00: 24020001 */ addiu $v0,$zero,0x1 ); +// Mismatch: Probably due to variable reuse. +//bool func0f04c874(struct chrdata *chr, u32 angle360, struct coord *pos, u8 arg3, u8 arg4) +//{ +// struct prop *target = chrGetTargetProp(chr); +// f32 fVar7 = 0; +// f32 uVar9 = func0f04c784(chr); +// struct coord chrpos; // c8, cc, d0 +// struct coord saved; // a8, ac, b0 +// f32 ymax; // a0 +// f32 ymin; // 9c +// f32 width; // 98 +// f32 cosine; +// f32 sine; +// f32 xdiff; +// f32 ydiff; +// f32 zdiff; +// f32 xdiff2; +// f32 ydiff2; +// f32 zdiff2; +// f32 scale; +// bool again; +// +// chrpos.x = chr->prop->pos.x; +// chrpos.y = chr->prop->pos.y; +// chrpos.z = chr->prop->pos.z; +// +// do { +// s32 result; +// f32 angle360f = angle360; +// +// if (angle360f > 180) { +// angle360f -= 360; +// } +// +// cosine = cosf((angle360f - uVar9) * 0.017450513318181f); +// sine = sinf((angle360f - uVar9) * 0.017450513318181f); +// xdiff = chrpos.x - target->pos.x; +// zdiff = chrpos.z - target->pos.z; +// +// pos->x = target->pos.x + (xdiff * cosine - zdiff * sine); +// pos->y = chrpos.y; +// pos->z = target->pos.z + (xdiff * sine + zdiff * cosine); +// +// propChrGetBbox(chr->prop, &width, &ymax, &ymin); +// +// // a14 +// result = func0002d7c0(&chrpos, chr->prop->rooms, pos, +// CDTYPE_BG | CDTYPE_OBJS | CDTYPE_DOORS, 1, +// ymax - chrpos.y, +// ymin - chrpos.y); +// +// if (result == CDRESULT_COLLISION) { +// f32 xdiff; +// f32 zdiff; +// f32 tmp; +// cdGetPos(pos, 18686, "chraction.c"); +// +// xdiff = pos->x - chrpos.x; +// zdiff = pos->z - chrpos.z; +// tmp = sqrtf(xdiff * xdiff + zdiff * zdiff); +// scale = (tmp - 50.0f) / tmp; +// +// if (scale < 0) { +// pos->x = chrpos.x; +// pos->y = chrpos.y; +// pos->z = chrpos.z; +// } else { +// pos->x = chrpos.x + xdiff * scale; +// pos->y = chrpos.y; +// pos->z = chrpos.z + zdiff * scale; +// } +// } +// +// // ac8 +// if (arg3) { +// xdiff2 = chrpos.x - pos->x; +// ydiff2 = chrpos.y - pos->y; +// zdiff2 = chrpos.z - pos->z; +// +// saved.x = pos->x; +// saved.y = pos->y; +// saved.z = pos->z; +// +// fVar7 = xdiff2 * xdiff2 + ydiff2 * ydiff2 + zdiff2 * zdiff2; +// +// angle360 = 360 - angle360; +// again = true; +// arg3 = 0; +// } else { +// again = false; +// } +// } while (again); +// +// if (fVar7 != 0) { +// f32 tmp; +// xdiff2 = chrpos.x - pos->x; +// ydiff2 = chrpos.y - pos->y; +// zdiff2 = chrpos.z - pos->z; +// +// tmp = xdiff2 * xdiff2 + ydiff2 * ydiff2 + zdiff2 * zdiff2; +// +// if (tmp < fVar7) { +// pos->x = saved.x; +// pos->y = saved.y; +// pos->z = saved.z; +// } +// } +// +// func0f03abd0(chr, pos, arg4); +// +// return true; +//} + GLOBAL_ASM( glabel rebuildTeams /* f04cc04: 27bdffc0 */ addiu $sp,$sp,-64 diff --git a/src/game/propobj.c b/src/game/propobj.c index 1df0c5dc4..be3755916 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -6074,7 +6074,7 @@ glabel func0f06b488 /* f06b4d0: 3c067f1b */ lui $a2,%hi(var7f1a9f88) /* f06b4d4: 24c69f88 */ addiu $a2,$a2,%lo(var7f1a9f88) /* f06b4d8: 27a40020 */ addiu $a0,$sp,0x20 -/* f06b4dc: 0c0093af */ jal func00024ebc +/* f06b4dc: 0c0093af */ jal cdGetPos /* f06b4e0: 24050b5e */ addiu $a1,$zero,0xb5e /* f06b4e4: 8fa2004c */ lw $v0,0x4c($sp) /* f06b4e8: c7a40020 */ lwc1 $f4,0x20($sp) @@ -7965,7 +7965,7 @@ glabel var7f1aa268 /* f06cfb4: 3c067f1b */ lui $a2,%hi(var7f1a9f94) /* f06cfb8: 24100001 */ addiu $s0,$zero,0x1 /* f06cfbc: 24c69f94 */ addiu $a2,$a2,%lo(var7f1a9f94) -/* f06cfc0: 0c0093af */ jal func00024ebc +/* f06cfc0: 0c0093af */ jal cdGetPos /* f06cfc4: 240510a1 */ addiu $a1,$zero,0x10a1 /* f06cfc8: 0c0093ba */ jal func00024ee8 /* f06cfcc: 27a401dc */ addiu $a0,$sp,0x1dc @@ -22322,7 +22322,7 @@ glabel var7f1aa5a8 /* f07a308: 27a4013c */ addiu $a0,$sp,0x13c /* f07a30c: 3c067f1b */ lui $a2,%hi(var7f1aa020) /* f07a310: 24c6a020 */ addiu $a2,$a2,%lo(var7f1aa020) -/* f07a314: 0c0093af */ jal func00024ebc +/* f07a314: 0c0093af */ jal cdGetPos /* f07a318: 24052cc2 */ addiu $a1,$zero,0x2cc2 /* f07a31c: 0c0093ac */ jal cdGetObstacle /* f07a320: 00000000 */ nop @@ -22464,7 +22464,7 @@ glabel var7f1aa5a8 /* f07a514: 27a4013c */ addiu $a0,$sp,0x13c /* f07a518: 3c067f1b */ lui $a2,%hi(var7f1aa02c) /* f07a51c: 24c6a02c */ addiu $a2,$a2,%lo(var7f1aa02c) -/* f07a520: 0c0093af */ jal func00024ebc +/* f07a520: 0c0093af */ jal cdGetPos /* f07a524: 24052cf9 */ addiu $a1,$zero,0x2cf9 /* f07a528: 0c0093ac */ jal cdGetObstacle /* f07a52c: 00000000 */ nop @@ -22531,7 +22531,7 @@ glabel var7f1aa5a8 /* f07a610: 27a4013c */ addiu $a0,$sp,0x13c /* f07a614: 3c067f1b */ lui $a2,%hi(var7f1aa038) /* f07a618: 24c6a038 */ addiu $a2,$a2,%lo(var7f1aa038) -/* f07a61c: 0c0093af */ jal func00024ebc +/* f07a61c: 0c0093af */ jal cdGetPos /* f07a620: 24052d13 */ addiu $a1,$zero,0x2d13 /* f07a624: 24080001 */ addiu $t0,$zero,0x1 /* f07a628: afa80148 */ sw $t0,0x148($sp) @@ -24685,7 +24685,7 @@ glabel var7f1aa698 /* f07c638: 46104481 */ sub.s $f18,$f8,$f16 /* f07c63c: 27a40064 */ addiu $a0,$sp,0x64 /* f07c640: 240530a1 */ addiu $a1,$zero,0x30a1 -/* f07c644: 0c0093af */ jal func00024ebc +/* f07c644: 0c0093af */ jal cdGetPos /* f07c648: e632000c */ swc1 $f18,0xc($s1) /* f07c64c: 3c0141a0 */ lui $at,0x41a0 /* f07c650: 44813000 */ mtc1 $at,$f6 @@ -48036,7 +48036,7 @@ glabel var7f1ab214 /* f091884: afaa01fc */ sw $t2,0x1fc($sp) /* f091888: 24c6a1c0 */ addiu $a2,$a2,%lo(var7f1aa1c0) /* f09188c: 27a401f0 */ addiu $a0,$sp,0x1f0 -/* f091890: 0c0093af */ jal func00024ebc +/* f091890: 0c0093af */ jal cdGetPos /* f091894: 24055fa2 */ addiu $a1,$zero,0x5fa2 /* f091898: 0c0093ac */ jal cdGetObstacle /* f09189c: 00000000 */ nop diff --git a/src/include/game/chr/chraction.h b/src/include/game/chr/chraction.h index 3b6b532e8..eb6df79b2 100644 --- a/src/include/game/chr/chraction.h +++ b/src/include/game/chr/chraction.h @@ -100,7 +100,7 @@ bool chrTryAttackRun(struct chrdata *chr); bool chrTryAttackRoll(struct chrdata *chr); bool chrTryAttackAmount(struct chrdata *chr, u32 arg1, u32 arg2, u8 arg3, u8 arg4); bool chrGoToPad(struct chrdata *chr, s32 padnum, u32 speed); -u32 func0f03abd0(void); +void func0f03abd0(struct chrdata *chr, struct coord *pos, s32 arg2); s32 func0f03aca0(struct chrdata *chr, f32 arg1, u8 arg2); bool chrTryRunFromTarget(struct chrdata *chr); u32 func0f03b1e0(struct chrdata *chr); @@ -202,7 +202,7 @@ s32 func0f04ba34(struct chrdata *chr, u16 arg1, u32 arg2); u32 func0f04bffc(struct chrdata *chr, s32 arg1, s32 arg2); bool chrRunFromPos(struct chrdata *chr, u32 speed, f32 distance, struct coord *frompos); f32 func0f04c784(struct chrdata *chr); -void func0f04c874(struct chrdata *chr, u32 flags, struct coord *pos, s32 arg3, s32 arg4); +bool func0f04c874(struct chrdata *chr, u32 angle360, struct coord *pos, u8 arg3, u8 arg4); u32 rebuildTeams(void); u32 rebuildSquadrons(void); u32 func0f04d000(struct chrdata *chr); diff --git a/src/include/lib/lib_233c0.h b/src/include/lib/lib_233c0.h index 68b7fd5df..c307587ce 100644 --- a/src/include/lib/lib_233c0.h +++ b/src/include/lib/lib_233c0.h @@ -27,7 +27,7 @@ void func00024e4c(struct coord *arg0, struct coord *arg1, u32 line, char *file); f32 func00024e98(void); u32 func00024ea4(void); struct prop *cdGetObstacle(void); -void func00024ebc(struct coord *pos, u32 line, char *file); +void cdGetPos(struct coord *pos, u32 line, char *file); u32 func00024ee8(void); u32 func00024f10(void); void func00024f6c(void); diff --git a/src/lib/lib_233c0.c b/src/lib/lib_233c0.c index c7265bd0e..a719939b5 100644 --- a/src/lib/lib_233c0.c +++ b/src/lib/lib_233c0.c @@ -1926,7 +1926,7 @@ struct prop *cdGetObstacle(void) } GLOBAL_ASM( -glabel func00024ebc +glabel cdGetPos /* 24ebc: 3c02800a */ lui $v0,%hi(var8009a8e0) /* 24ec0: 2442a8e0 */ addiu $v0,$v0,%lo(var8009a8e0) /* 24ec4: c4440000 */ lwc1 $f4,0x0($v0)