Attempt to decompile func0f04c874

This commit is contained in:
Ryan Dwyer 2021-02-06 14:36:52 +10:00
parent c1b455b15c
commit 17e48e7bb7
7 changed files with 141 additions and 28 deletions

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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);

View File

@ -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)