diff --git a/src/game/bondbike.c b/src/game/bondbike.c index 9cf61d1a5..3bcefd41f 100644 --- a/src/game/bondbike.c +++ b/src/game/bondbike.c @@ -46,22 +46,22 @@ void currentPlayerBikeInit(void) f32 matrix[16]; g_Vars.currentplayer->bondmovemode = MOVEMODE_BIKE; - g_Vars.currentplayer->unk1a7c = 0; + g_Vars.currentplayer->bondvehiclemode = 0; g_Vars.currentplayer->guncloseroffset = 0; g_Vars.currentplayer->gunextraaimx = 0; g_Vars.currentplayer->gunextraaimy = 0; func0f0d2294(); - g_Vars.currentplayer->unk1a80 = 0; - g_Vars.currentplayer->unk1a84 = 1; + g_Vars.currentplayer->bondentert = 0; + g_Vars.currentplayer->bondentert2 = 1; g_Vars.currentplayer->bondenterpos.x = g_Vars.currentplayer->prop->pos.x; g_Vars.currentplayer->bondenterpos.y = g_Vars.currentplayer->prop->pos.y; g_Vars.currentplayer->bondenterpos.z = g_Vars.currentplayer->prop->pos.z; func00015d54(hoverbike->base.realrot, matrix); func00015dd4(&hoverbike->base.prop->pos, matrix); - func00015b68(matrix, &g_Vars.currentplayer->unk1a70, &g_Vars.currentplayer->bondenteraim); + func00015b68(matrix, &g_Vars.currentplayer->bondvehicleoffset, &g_Vars.currentplayer->bondenteraim); func00016b58(g_Vars.currentplayer->bondentermtx, 0, 0, 0, -g_Vars.currentplayer->bond2.unk1c.x, -g_Vars.currentplayer->bond2.unk1c.y, -g_Vars.currentplayer->bond2.unk1c.z, @@ -111,9 +111,9 @@ void func0f0d2294(void) { struct defaultobj *hoverbike = g_Vars.currentplayer->hoverbike->obj; - g_Vars.currentplayer->unk1a70.x = 0.0f / hoverbike->model->unk14; - g_Vars.currentplayer->unk1a70.y = 80.0f / hoverbike->model->unk14; - g_Vars.currentplayer->unk1a70.z = -50.0f / hoverbike->model->unk14; + g_Vars.currentplayer->bondvehicleoffset.x = 0.0f / hoverbike->model->unk14; + g_Vars.currentplayer->bondvehicleoffset.y = 80.0f / hoverbike->model->unk14; + g_Vars.currentplayer->bondvehicleoffset.z = -50.0f / hoverbike->model->unk14; } void currentPlayerTryBikeDismountAngle(f32 relativeangle, f32 distance) @@ -181,112 +181,35 @@ void currentPlayerTryBikeDismountAngle(f32 relativeangle, f32 distance) } } -GLOBAL_ASM( -glabel func0f0d2558 -.late_rodata -glabel var7f1adb38 -.word 0x3fc907a9 -glabel var7f1adb3c -.word 0x4096c5bf -glabel var7f1adb40 -.word 0x3f4907a9 -glabel var7f1adb44 -.word 0x40afe6b4 -glabel var7f1adb48 -.word 0x4016c5bf -glabel var7f1adb4c -.word 0x407b4993 -glabel var7f1adb50 -.word 0x404907a9 -.text -/* f0d2558: 3c03800a */ lui $v1,%hi(g_Vars) -/* f0d255c: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars) -/* f0d2560: 27bdffc8 */ addiu $sp,$sp,-56 -/* f0d2564: 8c620284 */ lw $v0,0x284($v1) -/* f0d2568: afbf0024 */ sw $ra,0x24($sp) -/* f0d256c: f7b60018 */ sdc1 $f22,0x18($sp) -/* f0d2570: f7b40010 */ sdc1 $f20,0x10($sp) -/* f0d2574: 8c4e1a7c */ lw $t6,0x1a7c($v0) -/* f0d2578: 24010002 */ addiu $at,$zero,0x2 -/* f0d257c: 55c10047 */ bnel $t6,$at,.L0f0d269c -/* f0d2580: 8fbf0024 */ lw $ra,0x24($sp) -/* f0d2584: 8c6f0008 */ lw $t7,0x8($v1) -/* f0d2588: 8c58019c */ lw $t8,0x19c($v0) -/* f0d258c: 01f8c823 */ subu $t9,$t7,$t8 -/* f0d2590: 2b210019 */ slti $at,$t9,0x19 -/* f0d2594: 50200041 */ beqzl $at,.L0f0d269c -/* f0d2598: 8fbf0024 */ lw $ra,0x24($sp) -/* f0d259c: 8c481a6c */ lw $t0,0x1a6c($v0) -/* f0d25a0: 8d040004 */ lw $a0,0x4($t0) -/* f0d25a4: 0fc1a2bd */ jal func0f068af4 -/* f0d25a8: afa40034 */ sw $a0,0x34($sp) -/* f0d25ac: 8fa40034 */ lw $a0,0x34($sp) -/* f0d25b0: c4440008 */ lwc1 $f4,0x8($v0) -/* f0d25b4: c4460018 */ lwc1 $f6,0x18($v0) -/* f0d25b8: 8c890018 */ lw $t1,0x18($a0) -/* f0d25bc: c5200014 */ lwc1 $f0,0x14($t1) -/* f0d25c0: 46002382 */ mul.s $f14,$f4,$f0 -/* f0d25c4: 00000000 */ nop -/* f0d25c8: 46003502 */ mul.s $f20,$f6,$f0 -/* f0d25cc: 00000000 */ nop -/* f0d25d0: 460e7202 */ mul.s $f8,$f14,$f14 -/* f0d25d4: e7ae002c */ swc1 $f14,0x2c($sp) -/* f0d25d8: 4614a282 */ mul.s $f10,$f20,$f20 -/* f0d25dc: 0c012974 */ jal sqrtf -/* f0d25e0: 460a4300 */ add.s $f12,$f8,$f10 -/* f0d25e4: 3c0a800a */ lui $t2,%hi(g_Vars+0x284) -/* f0d25e8: 8d4aa244 */ lw $t2,%lo(g_Vars+0x284)($t2) -/* f0d25ec: c7ae002c */ lwc1 $f14,0x2c($sp) -/* f0d25f0: 3c017f1b */ lui $at,%hi(var7f1adb38) -/* f0d25f4: ad401af8 */ sw $zero,0x1af8($t2) -/* f0d25f8: 46000586 */ mov.s $f22,$f0 -/* f0d25fc: 0fc348be */ jal currentPlayerTryBikeDismountAngle -/* f0d2600: c42cdb38 */ lwc1 $f12,%lo(var7f1adb38)($at) -/* f0d2604: 3c017f1b */ lui $at,%hi(var7f1adb3c) -/* f0d2608: c7ae002c */ lwc1 $f14,0x2c($sp) -/* f0d260c: 0fc348be */ jal currentPlayerTryBikeDismountAngle -/* f0d2610: c42cdb3c */ lwc1 $f12,%lo(var7f1adb3c)($at) -/* f0d2614: 3c017f1b */ lui $at,%hi(var7f1adb40) -/* f0d2618: c42cdb40 */ lwc1 $f12,%lo(var7f1adb40)($at) -/* f0d261c: 0fc348be */ jal currentPlayerTryBikeDismountAngle -/* f0d2620: 4600b386 */ mov.s $f14,$f22 -/* f0d2624: 3c017f1b */ lui $at,%hi(var7f1adb44) -/* f0d2628: c42cdb44 */ lwc1 $f12,%lo(var7f1adb44)($at) -/* f0d262c: 0fc348be */ jal currentPlayerTryBikeDismountAngle -/* f0d2630: 4600b386 */ mov.s $f14,$f22 -/* f0d2634: 3c017f1b */ lui $at,%hi(var7f1adb48) -/* f0d2638: c42cdb48 */ lwc1 $f12,%lo(var7f1adb48)($at) -/* f0d263c: 0fc348be */ jal currentPlayerTryBikeDismountAngle -/* f0d2640: 4600b386 */ mov.s $f14,$f22 -/* f0d2644: 3c017f1b */ lui $at,%hi(var7f1adb4c) -/* f0d2648: c42cdb4c */ lwc1 $f12,%lo(var7f1adb4c)($at) -/* f0d264c: 0fc348be */ jal currentPlayerTryBikeDismountAngle -/* f0d2650: 4600b386 */ mov.s $f14,$f22 -/* f0d2654: 44806000 */ mtc1 $zero,$f12 -/* f0d2658: 0fc348be */ jal currentPlayerTryBikeDismountAngle -/* f0d265c: 4600a386 */ mov.s $f14,$f20 -/* f0d2660: 3c017f1b */ lui $at,%hi(var7f1adb50) -/* f0d2664: c42cdb50 */ lwc1 $f12,%lo(var7f1adb50)($at) -/* f0d2668: 0fc348be */ jal currentPlayerTryBikeDismountAngle -/* f0d266c: 4600a386 */ mov.s $f14,$f20 -/* f0d2670: 3c02800a */ lui $v0,%hi(g_Vars+0x284) -/* f0d2674: 8c42a244 */ lw $v0,%lo(g_Vars+0x284)($v0) -/* f0d2678: 8c4b1af8 */ lw $t3,0x1af8($v0) -/* f0d267c: 51600006 */ beqzl $t3,.L0f0d2698 -/* f0d2680: ac4000d0 */ sw $zero,0xd0($v0) -/* f0d2684: 0fc31f4c */ jal currentPlayerSetMoveMode -/* f0d2688: 00002025 */ or $a0,$zero,$zero -/* f0d268c: 3c02800a */ lui $v0,%hi(g_Vars+0x284) -/* f0d2690: 8c42a244 */ lw $v0,%lo(g_Vars+0x284)($v0) -/* f0d2694: ac4000d0 */ sw $zero,0xd0($v0) -.L0f0d2698: -/* f0d2698: 8fbf0024 */ lw $ra,0x24($sp) -.L0f0d269c: -/* f0d269c: d7b40010 */ ldc1 $f20,0x10($sp) -/* f0d26a0: d7b60018 */ ldc1 $f22,0x18($sp) -/* f0d26a4: 03e00008 */ jr $ra -/* f0d26a8: 27bd0038 */ addiu $sp,$sp,0x38 -); +void currentPlayerDismountBike(void) +{ + if (g_Vars.currentplayer->bondvehiclemode == 2 + && g_Vars.lvframe60 - g_Vars.currentplayer->activatetimelast < 25) { + struct hoverbikeobj *bike = (struct hoverbikeobj *)g_Vars.currentplayer->hoverbike->obj; + struct model08thing *thing = func0f068af4(&bike->base); + + f32 fVar5 = thing->unk08 * bike->base.model->unk14; + f32 fVar3 = thing->unk18 * bike->base.model->unk14; + f32 uVar4 = sqrtf(fVar5 * fVar5 + fVar3 * fVar3); + + g_Vars.currentplayer->walkinitmove = false; + + currentPlayerTryBikeDismountAngle(1.5705462694168f, fVar5); + currentPlayerTryBikeDismountAngle(4.7116389274597f, fVar5); + currentPlayerTryBikeDismountAngle(0.7852731347084f, uVar4); + currentPlayerTryBikeDismountAngle(5.4969120025635f, uVar4); + currentPlayerTryBikeDismountAngle(2.3558194637299f, uVar4); + currentPlayerTryBikeDismountAngle(3.9263656139374f, uVar4); + currentPlayerTryBikeDismountAngle(0, fVar3); + currentPlayerTryBikeDismountAngle(3.1410925388336f, fVar3); + + if (g_Vars.currentplayer->walkinitmove) { + currentPlayerSetMoveMode(MOVEMODE_WALK); + } + + g_Vars.currentplayer->unk00d0 = 0; + } +} GLOBAL_ASM( glabel currentPlayerUpdateSpeedBike diff --git a/src/game/bondmove.c b/src/game/bondmove.c index 999849342..47809c703 100644 --- a/src/game/bondmove.c +++ b/src/game/bondmove.c @@ -234,7 +234,7 @@ void setMoveModeForAllPlayers(u32 movemode) void func0f0c7f2c(void) { if (g_Vars.currentplayer->bondmovemode == MOVEMODE_BIKE) { - func0f0d2558(); + currentPlayerDismountBike(); } else if (g_Vars.currentplayer->bondmovemode == MOVEMODE_GRAB) { func0f0ce450(); } else if (g_Vars.currentplayer->bondmovemode == MOVEMODE_WALK) { @@ -5462,7 +5462,7 @@ void func0f0cc19c(struct coord *arg) if (cheatIsActive(CHEAT_SMALLJO)) { if (g_Vars.currentplayer->bondmovemode == MOVEMODE_BIKE) { - mult = g_Vars.currentplayer->unk1a80 * 0.6f + 0.4f; + mult = g_Vars.currentplayer->bondentert * 0.6f + 0.4f; } else if (g_Vars.currentplayer->bondmovemode == MOVEMODE_WALK && g_Vars.currentplayer->walkinitmove) { mult = (1.0f - g_Vars.currentplayer->walkinitt) * 0.6f + 0.4f; g_Vars.currentplayer->bond2.unk10.y += (g_Vars.currentplayer->crouchoffsetreal - g_Vars.currentplayer->crouchoffsetrealsmall) * g_Vars.currentplayer->walkinitt; diff --git a/src/game/game_0601b0.c b/src/game/game_0601b0.c index f2b869802..423e4be36 100644 --- a/src/game/game_0601b0.c +++ b/src/game/game_0601b0.c @@ -4662,7 +4662,7 @@ glabel var7f1a9f2c /* f064174: 27bd00f8 */ addiu $sp,$sp,0xf8 ); -void func0f064178(struct prop *prop, bool enable) +void func0f064178(struct prop *prop, s32 enable) { if (prop->type == PROPTYPE_CHR) { chrSetOrUnsetHiddenFlag00000100(prop->chr, enable); diff --git a/src/include/game/bondbike.h b/src/include/game/bondbike.h index 0a8948814..f4211b125 100644 --- a/src/include/game/bondbike.h +++ b/src/include/game/bondbike.h @@ -7,7 +7,7 @@ void currentPlayerBikeInit(void); void func0f0d2184(void); void func0f0d2294(void); void currentPlayerTryBikeDismountAngle(f32 relativeangle, f32 distance); -u32 func0f0d2558(void); +void currentPlayerDismountBike(void); void currentPlayerUpdateSpeedBike(struct movedata *data); u32 func0f0d2b40(void); u32 func0f0d2e18(void); diff --git a/src/include/types.h b/src/include/types.h index ba6da319e..defb32902 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -2721,12 +2721,12 @@ struct player { /*0x1a64*/ u32 unk1a64; /*0x1a68*/ u32 unk1a68; /*0x1a6c*/ struct prop *hoverbike; - /*0x1a70*/ struct coord unk1a70; - /*0x1a7c*/ u32 unk1a7c; - /*0x1a80*/ f32 unk1a80; - /*0x1a84*/ f32 unk1a84; - /*0x1a88*/ u32 unk1a88; - /*0x1a8c*/ u32 unk1a8c; + /*0x1a70*/ struct coord bondvehicleoffset; + /*0x1a7c*/ u32 bondvehiclemode; + /*0x1a80*/ f32 bondentert; + /*0x1a84*/ f32 bondentert2; + /*0x1a88*/ u32 bondentertheta; + /*0x1a8c*/ u32 bondenterverta; /*0x1a90*/ struct coord bondenterpos; /*0x1a9c*/ f32 bondentermtx[16]; /*0x1adc*/ struct coord bondenteraim; @@ -6522,7 +6522,12 @@ struct healthdamagetype { struct model08thing { u32 unk00; - f32 unk04[4]; + f32 unk04; + f32 unk08; + f32 unk0c; + f32 unk10; + u32 unk14; + f32 unk18; }; struct optiongroup {