Remove hoverbike

This commit is contained in:
Ryan Dwyer
2022-11-05 11:24:29 +10:00
parent 05fe244f60
commit 67bc74f08f
15 changed files with 429 additions and 2035 deletions
-1
View File
@@ -115,7 +115,6 @@
build/ROMID/game/bondwalk.o (section); \
build/ROMID/game/bondmove.o (section); \
build/ROMID/game/bondgrab.o (section); \
build/ROMID/game/bondbike.o (section); \
build/ROMID/game/savebuffer.o (section); \
build/ROMID/game/healthbar.o (section); \
build/ROMID/game/sight.o (section); \
-1019
View File
File diff suppressed because it is too large Load Diff
+3 -18
View File
@@ -74,9 +74,6 @@ void bgrabInit(void)
if (obj->type == OBJTYPE_HOVERPROP) {
struct hoverpropobj *hoverprop = (struct hoverpropobj *)prop->obj;
hov = &hoverprop->hov;
} else if (obj->type == OBJTYPE_HOVERBIKE) {
struct hoverbikeobj *hoverprop = (struct hoverbikeobj *)prop->obj;
hov = &hoverprop->hov;
}
if (hov) {
@@ -435,9 +432,6 @@ s32 bgrabCalculateNewPosition(struct coord *delta, f32 angle, bool arg2)
if (obj->type == OBJTYPE_HOVERPROP) {
struct hoverpropobj *tmp = (struct hoverpropobj *)g_Vars.currentplayer->grabbedprop->obj;
hov = &tmp->hov;
} else if (obj->type == OBJTYPE_HOVERBIKE) {
struct hoverbikeobj *tmp = (struct hoverbikeobj *)g_Vars.currentplayer->grabbedprop->obj;
hov = &tmp->hov;
}
if (hov != NULL) {
@@ -550,9 +544,7 @@ bool bgrabCalculateNewPositiontWithPush(struct coord *delta, f32 angle, bool arg
} else if (obstacle->type == PROPTYPE_OBJ) {
struct defaultobj *obj = obstacle->obj;
if ((obj->hidden & OBJHFLAG_MOUNTED) == 0
&& (obj->hidden & OBJHFLAG_GRABBED) == 0
&& (obj->flags3 & OBJFLAG3_PUSHABLE)) {
if ((obj->hidden & OBJHFLAG_GRABBED) == 0 && (obj->flags3 & OBJFLAG3_PUSHABLE)) {
bool canpush = true;
g_Vars.currentplayer->speedmaxtime60 = 0;
@@ -887,12 +879,8 @@ void bgrabUpdateVertical(void)
void bgrabHandleActivate(void)
{
if (currentPlayerTryMountHoverbike(g_Vars.currentplayer->grabbedprop)) {
g_Vars.currentplayer->bondactivateorreload = 0;
} else {
g_Vars.currentplayer->bondactivateorreload = 0;
bmoveSetMode(MOVEMODE_WALK);
}
g_Vars.currentplayer->bondactivateorreload = 0;
bmoveSetMode(MOVEMODE_WALK);
}
void bgrabUpdateSpeedSideways(f32 targetspeed, f32 accelspeed, s32 mult)
@@ -1174,9 +1162,6 @@ void bgrabTick(void)
if (obj->type == OBJTYPE_HOVERPROP) {
struct hoverpropobj *hoverprop = (struct hoverpropobj *)g_Vars.currentplayer->grabbedprop->obj;
hov = &hoverprop->hov;
} else if (obj->type == OBJTYPE_HOVERBIKE) {
struct hoverbikeobj *hoverbike = (struct hoverbikeobj *)g_Vars.currentplayer->grabbedprop->obj;
hov = &hoverbike->hov;
}
if (hov) {
+6 -36
View File
@@ -1,7 +1,6 @@
#include <ultra64.h>
#include "constants.h"
#include "game/activemenu.h"
#include "game/bondbike.h"
#include "game/bondgrab.h"
#include "game/bondmove.h"
#include "game/bondwalk.h"
@@ -164,15 +163,6 @@ void bmoveUpdateAutoAimXProp(struct prop *prop, f32 autoaimx)
g_Vars.currentplayer->autoaimx = autoaimx;
}
struct prop *bmoveGetHoverbike(void)
{
if (g_Vars.currentplayer->bondmovemode == MOVEMODE_BIKE) {
return g_Vars.currentplayer->hoverbike;
}
return NULL;
}
struct prop *bmoveGetGrabbedProp(void)
{
if (g_Vars.currentplayer->bondmovemode == MOVEMODE_GRAB) {
@@ -186,7 +176,7 @@ void bmoveGrabProp(struct prop *prop)
{
struct defaultobj *obj = prop->obj;
if ((obj->hidden & OBJHFLAG_MOUNTED) == 0 && (obj->hidden & OBJHFLAG_GRABBED) == 0) {
if ((obj->hidden & OBJHFLAG_GRABBED) == 0) {
g_Vars.currentplayer->grabbedprop = prop;
bgrabInit();
}
@@ -196,13 +186,9 @@ void bmoveSetMode(u32 movemode)
{
if (g_Vars.currentplayer->bondmovemode == MOVEMODE_GRAB) {
bgrabExit();
} else if (g_Vars.currentplayer->bondmovemode == MOVEMODE_BIKE) {
bbikeExit();
}
if (movemode == MOVEMODE_BIKE) {
bbikeInit();
} else if (movemode == MOVEMODE_GRAB) {
if (movemode == MOVEMODE_GRAB) {
bgrabInit();
} else if (movemode == MOVEMODE_CUTSCENE) {
bcutsceneInit();
@@ -226,20 +212,14 @@ void bmoveSetModeForAllPlayers(u32 movemode)
void bmoveHandleActivate(void)
{
if (g_Vars.currentplayer->bondmovemode == MOVEMODE_BIKE) {
bbikeHandleActivate();
} else if (g_Vars.currentplayer->bondmovemode == MOVEMODE_GRAB) {
if (g_Vars.currentplayer->bondmovemode == MOVEMODE_GRAB) {
bgrabHandleActivate();
} else if (g_Vars.currentplayer->bondmovemode == MOVEMODE_WALK) {
bwalkHandleActivate();
}
}
void bmoveApplyMoveData(struct movedata *data)
{
if (g_Vars.currentplayer->bondmovemode == MOVEMODE_BIKE) {
bbikeApplyMoveData(data);
} else if (g_Vars.currentplayer->bondmovemode == MOVEMODE_GRAB) {
if (g_Vars.currentplayer->bondmovemode == MOVEMODE_GRAB) {
bgrabApplyMoveData(data);
} else if (g_Vars.currentplayer->bondmovemode == MOVEMODE_WALK) {
bwalkApplyMoveData(data);
@@ -248,9 +228,7 @@ void bmoveApplyMoveData(struct movedata *data)
void bmoveUpdateSpeedTheta(void)
{
if (g_Vars.currentplayer->bondmovemode == MOVEMODE_BIKE) {
// empty
} else if (g_Vars.currentplayer->bondmovemode == MOVEMODE_GRAB) {
if (g_Vars.currentplayer->bondmovemode == MOVEMODE_GRAB) {
bgrabUpdateSpeedTheta();
} else if (g_Vars.currentplayer->bondmovemode == MOVEMODE_WALK) {
bwalkUpdateSpeedTheta();
@@ -1603,12 +1581,6 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i
}
}
#if VERSION >= VERSION_NTSC_1_0
if (g_Vars.currentplayer->bondmovemode == MOVEMODE_BIKE) {
g_Vars.currentplayer->docentreupdown = false;
}
#endif
if (g_Vars.currentplayer->docentreupdown) {
if (offbike) {
// Determine direction for lookahead increment
@@ -1906,9 +1878,7 @@ void bmoveTick(bool allowc1x, bool allowc1y, bool allowc1buttons, bool ignorec2)
bmoveProcessInput(allowc1x, allowc1y, allowc1buttons, ignorec2);
if (g_Vars.currentplayer->bondmovemode == MOVEMODE_BIKE) {
bbikeTick();
} else if (g_Vars.currentplayer->bondmovemode == MOVEMODE_GRAB) {
if (g_Vars.currentplayer->bondmovemode == MOVEMODE_GRAB) {
bgrabTick();
} else if (g_Vars.currentplayer->bondmovemode == MOVEMODE_CUTSCENE) {
bcutsceneTick();
+281 -363
View File
@@ -91,26 +91,7 @@ void bwalkInit(void)
g_Vars.currentplayer->speedthetacontrol = 0;
}
if (g_Vars.currentplayer->walkinitmove) {
struct coord delta;
mtx00016b58(&g_Vars.currentplayer->walkinitmtx,
0, 0, 0,
-g_Vars.currentplayer->bond2.unk1c.x, -g_Vars.currentplayer->bond2.unk1c.y, -g_Vars.currentplayer->bond2.unk1c.z,
g_Vars.currentplayer->bond2.unk28.x, g_Vars.currentplayer->bond2.unk28.y, g_Vars.currentplayer->bond2.unk28.z);
g_Vars.currentplayer->walkinitt = 0;
g_Vars.currentplayer->walkinitt2 = 0;
g_Vars.currentplayer->walkinitstart.x = g_Vars.currentplayer->prop->pos.x;
g_Vars.currentplayer->walkinitstart.y = g_Vars.currentplayer->prop->pos.y;
g_Vars.currentplayer->walkinitstart.z = g_Vars.currentplayer->prop->pos.z;
delta.x = g_Vars.currentplayer->walkinitpos.x - g_Vars.currentplayer->prop->pos.x;
delta.y = 0;
delta.z = g_Vars.currentplayer->walkinitpos.z - g_Vars.currentplayer->prop->pos.z;
propSetPerimEnabled(g_Vars.currentplayer->hoverbike, false);
bwalkCalculateNewPositionWithPush(&delta, 0, true, 0, CDTYPE_ALL);
propSetPerimEnabled(g_Vars.currentplayer->hoverbike, true);
} else if (prevmode != MOVEMODE_GRAB && prevmode != MOVEMODE_WALK) {
if (prevmode != MOVEMODE_GRAB && prevmode != MOVEMODE_WALK) {
g_Vars.currentplayer->moveinitspeed.x = 0;
g_Vars.currentplayer->moveinitspeed.y = 0;
g_Vars.currentplayer->moveinitspeed.z = 0;
@@ -448,7 +429,7 @@ bool bwalkCalculateNewPositionWithPush(struct coord *delta, f32 rotateamount, bo
struct defaultobj *obj = obstacle->obj;
bool dothething;
if ((obj->hidden & OBJHFLAG_MOUNTED) == 0 && (obj->hidden & OBJHFLAG_GRABBED) == 0) {
if ((obj->hidden & OBJHFLAG_GRABBED) == 0) {
if (g_Vars.currentplayer->unk1af0 == 0 && obj->type == OBJTYPE_TANK) {
g_Vars.currentplayer->tank = obstacle;
} else if (obj->flags3 & OBJFLAG3_PUSHABLE) {
@@ -804,10 +785,6 @@ void bwalkUpdateVertical(void)
}
}
}
if (g_Vars.currentplayer->walkinitmove) {
g_Vars.currentplayer->walkinitstart.y += moveamount;
}
}
} else {
lift = NULL;
@@ -868,24 +845,6 @@ void bwalkUpdateVertical(void)
if (bwalkTryMoveUpwards(sumground - g_Vars.currentplayer->vv_manground) == CDRESULT_NOCOLLISION) {
g_Vars.currentplayer->vv_manground = sumground;
}
#if VERSION >= VERSION_NTSC_1_0
else {
// Not enough room above. If on a hoverbike, blow it up
prop = cdGetObstacleProp();
if (prop
&& g_Vars.currentplayer->prop->pos.y < prop->pos.y
&& prop->type == PROPTYPE_OBJ) {
obj = prop->obj;
if (obj->modelnum == MODEL_HOVBIKE) {
amount = (obj->maxdamage - obj->damage + 1) / 250.0f;
obj->flags &= ~OBJFLAG_INVINCIBLE;
objDamage(obj, amount, &obj->prop->pos, WEAPON_REMOTEMINE, -1);
}
}
}
#endif
}
// Kill player if standing on tile with GEOFLAG_DIE
@@ -1241,92 +1200,83 @@ void bwalkUpdatePrevPos(void)
roomsCopy(g_Vars.currentplayer->prop->rooms, g_Vars.currentplayer->bondprevrooms);
}
void bwalkHandleActivate(void)
{
if (g_Vars.currentplayer->walkinitmove) {
g_Vars.currentplayer->bondactivateorreload = 0;
}
}
void bwalkApplyMoveData(struct movedata *data)
{
if (g_Vars.currentplayer->walkinitmove == false) {
// Sideways
if (data->digitalstepleft) {
bwalkUpdateSpeedSideways(-1, 0.2f, data->digitalstepleft);
} else if (data->digitalstepright) {
bwalkUpdateSpeedSideways(1, 0.2f, data->digitalstepright);
} else if (data->unk14 == false) {
bwalkUpdateSpeedSideways(0, 0.2f, g_Vars.lvupdate60);
}
// Sideways
if (data->digitalstepleft) {
bwalkUpdateSpeedSideways(-1, 0.2f, data->digitalstepleft);
} else if (data->digitalstepright) {
bwalkUpdateSpeedSideways(1, 0.2f, data->digitalstepright);
} else if (data->unk14 == false) {
bwalkUpdateSpeedSideways(0, 0.2f, g_Vars.lvupdate60);
}
if (data->unk14) {
bwalkUpdateSpeedSideways(data->analogstrafe * 0.014285714365542f, 0.2f, g_Vars.lvupdate60);
}
if (data->unk14) {
bwalkUpdateSpeedSideways(data->analogstrafe * 0.014285714365542f, 0.2f, g_Vars.lvupdate60);
}
// Forward/back
if (data->digitalstepforward) {
bwalkUpdateSpeedForwards(1, 1);
// Forward/back
if (data->digitalstepforward) {
bwalkUpdateSpeedForwards(1, 1);
g_Vars.currentplayer->speedmaxtime60 += g_Vars.lvupdate60;
} else if (data->digitalstepback) {
bwalkUpdateSpeedForwards(-1, 1);
} else if (data->canlookahead == false) {
bwalkUpdateSpeedForwards(0, 1);
}
if (data->canlookahead) {
bwalkUpdateSpeedForwards(data->analogwalk * 0.014285714365542f, 1);
if (data->analogwalk > 60) {
g_Vars.currentplayer->speedmaxtime60 += g_Vars.lvupdate60;
} else if (data->digitalstepback) {
bwalkUpdateSpeedForwards(-1, 1);
} else if (data->canlookahead == false) {
bwalkUpdateSpeedForwards(0, 1);
}
if (data->canlookahead) {
bwalkUpdateSpeedForwards(data->analogwalk * 0.014285714365542f, 1);
if (data->analogwalk > 60) {
g_Vars.currentplayer->speedmaxtime60 += g_Vars.lvupdate60;
} else {
g_Vars.currentplayer->speedmaxtime60 = 0;
}
}
// Force speeds to range -1 to 1
if (g_Vars.currentplayer->speedforwards > 1) {
g_Vars.currentplayer->speedforwards = 1;
}
if (g_Vars.currentplayer->speedforwards < -1) {
g_Vars.currentplayer->speedforwards = -1;
}
if (g_Vars.currentplayer->speedsideways > 1) {
g_Vars.currentplayer->speedsideways = 1;
}
if (g_Vars.currentplayer->speedsideways < -1) {
g_Vars.currentplayer->speedsideways = -1;
}
g_Vars.currentplayer->speedforwards *= 1.08f;
g_Vars.currentplayer->speedforwards *= g_Vars.currentplayer->speedboost;
if ((data->canlookahead == false && data->digitalstepforward == false) ||
bmoveGetCrouchPos() != CROUCHPOS_STAND) {
} else {
g_Vars.currentplayer->speedmaxtime60 = 0;
}
if (data->rleanleft) {
bwalkSetSwayTarget(-1);
} else if (data->rleanright) {
bwalkSetSwayTarget(1);
} else {
bwalkSetSwayTarget(0);
}
while (data->crouchdown-- > 0) {
bwalkAdjustCrouchPos(-1);
}
while (data->crouchup-- > 0) {
bwalkAdjustCrouchPos(1);
}
g_Vars.currentplayer->eyesshut = data->eyesshut;
}
// Force speeds to range -1 to 1
if (g_Vars.currentplayer->speedforwards > 1) {
g_Vars.currentplayer->speedforwards = 1;
}
if (g_Vars.currentplayer->speedforwards < -1) {
g_Vars.currentplayer->speedforwards = -1;
}
if (g_Vars.currentplayer->speedsideways > 1) {
g_Vars.currentplayer->speedsideways = 1;
}
if (g_Vars.currentplayer->speedsideways < -1) {
g_Vars.currentplayer->speedsideways = -1;
}
g_Vars.currentplayer->speedforwards *= 1.08f;
g_Vars.currentplayer->speedforwards *= g_Vars.currentplayer->speedboost;
if ((data->canlookahead == false && data->digitalstepforward == false) ||
bmoveGetCrouchPos() != CROUCHPOS_STAND) {
g_Vars.currentplayer->speedmaxtime60 = 0;
}
if (data->rleanleft) {
bwalkSetSwayTarget(-1);
} else if (data->rleanright) {
bwalkSetSwayTarget(1);
} else {
bwalkSetSwayTarget(0);
}
while (data->crouchdown-- > 0) {
bwalkAdjustCrouchPos(-1);
}
while (data->crouchup-- > 0) {
bwalkAdjustCrouchPos(1);
}
g_Vars.currentplayer->eyesshut = data->eyesshut;
}
void bwalkUpdateSpeedTheta(void)
@@ -1395,273 +1345,255 @@ void bwalk0f0c69b8(void)
spc0 *= 1.25f;
}
if (g_Vars.currentplayer->walkinitmove) {
g_Vars.currentplayer->walkinitt += g_Vars.lvupdate60freal * (1.0f / 60.0f);
bwalkApplyCrouchSpeed();
bwalkUpdateCrouchOffset();
if (g_Vars.currentplayer->walkinitt >= 1.0f) {
g_Vars.currentplayer->walkinitt = 1.0f;
g_Vars.currentplayer->walkinitmove = false;
}
bmove0f0cba88(&spc8, &spc4,
&g_Vars.currentplayer->bondshotspeed,
g_Vars.currentplayer->vv_sintheta, g_Vars.currentplayer->vv_costheta);
g_Vars.currentplayer->walkinitt2 = 1.0f - (cosf(g_Vars.currentplayer->walkinitt * M_BADPI) + 1.0f) * 0.5f;
tmp1 = -g_Vars.currentplayer->swaytarget * g_Vars.currentplayer->bond2.unk00.f[2];
tmp2 = g_Vars.currentplayer->swaytarget * g_Vars.currentplayer->bond2.unk00.f[0];
tmp1 *= spc0;
tmp2 *= spc0;
spa8 = 0.0f;
bmoveUpdateHead(0.0f, 0.0f, 0.0f, &g_Vars.currentplayer->walkinitmtx, 1.0f - g_Vars.currentplayer->walkinitt2);
if (g_Vars.currentplayer->crouchoffset < -45.0f) {
tmp1 *= 0.35f;
tmp2 *= 0.35f;
} else if (g_Vars.currentplayer->crouchoffset < 0.0f) {
tmp1 *= 0.5f;
tmp2 *= 0.5f;
}
g_Vars.currentplayer->gunspeed = 0.0f;
spb4 = tmp1 - g_Vars.currentplayer->swayoffset0;
spb0 = tmp2 - g_Vars.currentplayer->swayoffset2;
bmoveUpdateMoveInitSpeed(&spcc);
bwalkCalculateNewPositionWithPush(&spcc, 0.0f, true, 0.0f, CDTYPE_ALL);
dist = sqrtf(spb4 * spb4 + spb0 * spb0);
if (g_Vars.lvupdate60freal > PALUPF(4)) {
lvupdate60f = PALUPF(4);
lvupdate240 = 4;
} else {
bwalkApplyCrouchSpeed();
bwalkUpdateCrouchOffset();
lvupdate60f = g_Vars.lvupdate60freal;
lvupdate240 = g_Vars.lvupdate60;
}
bmove0f0cba88(&spc8, &spc4,
&g_Vars.currentplayer->bondshotspeed,
g_Vars.currentplayer->vv_sintheta, g_Vars.currentplayer->vv_costheta);
for (i = 0; i < lvupdate240; i++) {
spa8 += (dist - spa8) * PALUPF(0.1f);
}
tmp1 = -g_Vars.currentplayer->swaytarget * g_Vars.currentplayer->bond2.unk00.f[2];
tmp2 = g_Vars.currentplayer->swaytarget * g_Vars.currentplayer->bond2.unk00.f[0];
tmp1 *= spc0;
tmp2 *= spc0;
spa8 = 0.0f;
spa8 += 3.75f * lvupdate60f;
if (g_Vars.currentplayer->crouchoffset < -45.0f) {
tmp1 *= 0.35f;
tmp2 *= 0.35f;
} else if (g_Vars.currentplayer->crouchoffset < 0.0f) {
tmp1 *= 0.5f;
tmp2 *= 0.5f;
}
if (g_Vars.currentplayer->crouchoffset < -45.0f) {
spa8 *= 0.35f;
} else if (g_Vars.currentplayer->crouchoffset < 0.0f) {
spa8 *= 0.5f;
}
spb4 = tmp1 - g_Vars.currentplayer->swayoffset0;
spb0 = tmp2 - g_Vars.currentplayer->swayoffset2;
if (spa8 < dist) {
spa8 /= dist;
spb4 *= spa8;
spb0 *= spa8;
}
dist = sqrtf(spb4 * spb4 + spb0 * spb0);
speedsideways = (g_Vars.currentplayer->speedsideways + spc4) * 0.8f;
speedforwards = g_Vars.currentplayer->speedforwards + spc8;
speedtheta = g_Vars.currentplayer->speedtheta * 0.8f;
if (g_Vars.lvupdate60freal > PALUPF(4)) {
lvupdate60f = PALUPF(4);
lvupdate240 = 4;
} else {
lvupdate60f = g_Vars.lvupdate60freal;
lvupdate240 = g_Vars.lvupdate60;
}
if (speedsideways < 0.0f) {
speedsideways = -speedsideways;
}
for (i = 0; i < lvupdate240; i++) {
spa8 += (dist - spa8) * PALUPF(0.1f);
}
if (speedforwards < 0.0f) {
speedforwards = -speedforwards;
}
spa8 += 3.75f * lvupdate60f;
if (speedtheta < 0.0f) {
speedtheta = -speedtheta;
}
if (g_Vars.currentplayer->crouchoffset < -45.0f) {
spa8 *= 0.35f;
} else if (g_Vars.currentplayer->crouchoffset < 0.0f) {
spa8 *= 0.5f;
}
maxspeed = speedforwards;
if (spa8 < dist) {
spa8 /= dist;
spb4 *= spa8;
spb0 *= spa8;
}
if (speedsideways > maxspeed) {
maxspeed = speedsideways;
}
speedsideways = (g_Vars.currentplayer->speedsideways + spc4) * 0.8f;
speedforwards = g_Vars.currentplayer->speedforwards + spc8;
speedtheta = g_Vars.currentplayer->speedtheta * 0.8f;
if (speedtheta > maxspeed) {
maxspeed = speedtheta;
}
if (speedsideways < 0.0f) {
speedsideways = -speedsideways;
}
if (dist >= 0.1f && maxspeed < 0.8f) {
maxspeed = 0.8f;
}
if (speedforwards < 0.0f) {
speedforwards = -speedforwards;
}
if (maxspeed >= 0.75f) {
g_Vars.currentplayer->bondbreathing += (maxspeed - 0.75f) * g_Vars.lvupdate60freal / 900;
} else {
g_Vars.currentplayer->bondbreathing -= (0.75f - maxspeed) * g_Vars.lvupdate60freal / 2700;
}
if (speedtheta < 0.0f) {
speedtheta = -speedtheta;
}
if (g_Vars.currentplayer->bondbreathing < 0.0f) {
g_Vars.currentplayer->bondbreathing = 0.0f;
} else if (g_Vars.currentplayer->bondbreathing > 1.0f) {
g_Vars.currentplayer->bondbreathing = 1.0f;
}
maxspeed = speedforwards;
mult = var80075c00[1].unk0c * 0.5f * g_Vars.lvupdate60freal;
spe0 = (g_Vars.currentplayer->speedsideways * spc0 + spc4) * mult;
if (speedsideways > maxspeed) {
maxspeed = speedsideways;
}
bmove0f0cc654(maxspeed, g_Vars.currentplayer->speedforwards * spc0 + spc8, spe0);
if (speedtheta > maxspeed) {
maxspeed = speedtheta;
}
g_Vars.currentplayer->gunspeed = maxspeed;
if (dist >= 0.1f && maxspeed < 0.8f) {
maxspeed = 0.8f;
}
spdc = g_Vars.currentplayer->headpos.x;
spd8 = g_Vars.currentplayer->headpos.z;
if (maxspeed >= 0.75f) {
g_Vars.currentplayer->bondbreathing += (maxspeed - 0.75f) * g_Vars.lvupdate60freal / 900;
} else {
g_Vars.currentplayer->bondbreathing -= (0.75f - maxspeed) * g_Vars.lvupdate60freal / 2700;
}
spcc.f[0] += (spd8 * g_Vars.currentplayer->bond2.unk00.f[0] - spdc * g_Vars.currentplayer->bond2.unk00.f[2]) * g_Vars.lvupdate60freal;
spcc.f[2] += (spd8 * g_Vars.currentplayer->bond2.unk00.f[2] + spdc * g_Vars.currentplayer->bond2.unk00.f[0]) * g_Vars.lvupdate60freal;
spcc.f[0] += spb4;
spcc.f[2] += spb0;
if (g_Vars.currentplayer->bondbreathing < 0.0f) {
g_Vars.currentplayer->bondbreathing = 0.0f;
} else if (g_Vars.currentplayer->bondbreathing > 1.0f) {
g_Vars.currentplayer->bondbreathing = 1.0f;
}
bmoveUpdateMoveInitSpeed(&spcc);
mult = var80075c00[1].unk0c * 0.5f * g_Vars.lvupdate60freal;
spe0 = (g_Vars.currentplayer->speedsideways * spc0 + spc4) * mult;
if (g_Vars.currentplayer->bondforcespeed.f[0] != 0.0f || g_Vars.currentplayer->bondforcespeed.f[2] != 0.0f) {
spcc.f[0] += g_Vars.currentplayer->bondforcespeed.f[0] * g_Vars.lvupdate60freal;
spcc.f[2] += g_Vars.currentplayer->bondforcespeed.f[2] * g_Vars.lvupdate60freal;
}
bmove0f0cc654(maxspeed, g_Vars.currentplayer->speedforwards * spc0 + spc8, spe0);
if (g_Vars.currentplayer->onladder) {
guNormalize(&g_Vars.currentplayer->laddernormal.x, &g_Vars.currentplayer->laddernormal.y, &g_Vars.currentplayer->laddernormal.z);
g_Vars.currentplayer->gunspeed = maxspeed;
sp74 = -(spcc.f[0] * g_Vars.currentplayer->laddernormal.f[0] + spcc.f[2] * g_Vars.currentplayer->laddernormal.f[2]);
spdc = g_Vars.currentplayer->headpos.x;
spd8 = g_Vars.currentplayer->headpos.z;
if (-4.0f * g_Vars.lvupdate60freal < sp74) {
if (sp74 < 0.0f) {
spcc.f[0] += sp74 * g_Vars.currentplayer->laddernormal.f[0];
spcc.f[2] += sp74 * g_Vars.currentplayer->laddernormal.f[2];
g_Vars.currentplayer->ladderupdown = sp74 * 0.3f;
} else {
playerGetBbox(g_Vars.currentplayer->prop, &radius, &ymax, &ymin);
spcc.f[0] += (spd8 * g_Vars.currentplayer->bond2.unk00.f[0] - spdc * g_Vars.currentplayer->bond2.unk00.f[2]) * g_Vars.lvupdate60freal;
spcc.f[2] += (spd8 * g_Vars.currentplayer->bond2.unk00.f[2] + spdc * g_Vars.currentplayer->bond2.unk00.f[0]) * g_Vars.lvupdate60freal;
spcc.f[0] += spb4;
spcc.f[2] += spb0;
bmoveUpdateMoveInitSpeed(&spcc);
if (g_Vars.currentplayer->bondforcespeed.f[0] != 0.0f || g_Vars.currentplayer->bondforcespeed.f[2] != 0.0f) {
spcc.f[0] += g_Vars.currentplayer->bondforcespeed.f[0] * g_Vars.lvupdate60freal;
spcc.f[2] += g_Vars.currentplayer->bondforcespeed.f[2] * g_Vars.lvupdate60freal;
}
if (g_Vars.currentplayer->onladder) {
guNormalize(&g_Vars.currentplayer->laddernormal.x, &g_Vars.currentplayer->laddernormal.y, &g_Vars.currentplayer->laddernormal.z);
sp74 = -(spcc.f[0] * g_Vars.currentplayer->laddernormal.f[0] + spcc.f[2] * g_Vars.currentplayer->laddernormal.f[2]);
if (-4.0f * g_Vars.lvupdate60freal < sp74) {
if (sp74 < 0.0f) {
if (!cd0002a13c(&g_Vars.currentplayer->prop->pos,
radius * 1.1f, ymax - g_Vars.currentplayer->prop->pos.y,
(g_Vars.currentplayer->vv_manground - g_Vars.currentplayer->prop->pos.y) + 1.0f,
g_Vars.currentplayer->prop->rooms, GEOFLAG_LADDER | GEOFLAG_LADDER_PLAYERONLY)) {
g_Vars.currentplayer->ladderupdown = 0.0f;
} else {
spcc.f[0] += sp74 * g_Vars.currentplayer->laddernormal.f[0];
spcc.f[2] += sp74 * g_Vars.currentplayer->laddernormal.f[2];
g_Vars.currentplayer->ladderupdown = sp74 * 0.3f;
} else {
playerGetBbox(g_Vars.currentplayer->prop, &radius, &ymax, &ymin);
if (!cd0002a13c(&g_Vars.currentplayer->prop->pos,
radius * 1.1f, ymax - g_Vars.currentplayer->prop->pos.y,
(g_Vars.currentplayer->vv_manground - g_Vars.currentplayer->prop->pos.y) + 1.0f,
g_Vars.currentplayer->prop->rooms, GEOFLAG_LADDER | GEOFLAG_LADDER_PLAYERONLY)) {
g_Vars.currentplayer->ladderupdown = 0.0f;
} else {
spcc.f[0] += sp74 * g_Vars.currentplayer->laddernormal.f[0];
spcc.f[2] += sp74 * g_Vars.currentplayer->laddernormal.f[2];
g_Vars.currentplayer->ladderupdown = sp74 * 0.3f;
}
}
spcc.x *= 0.3f;
spcc.z *= 0.3f;
} else {
g_Vars.currentplayer->ladderupdown = 0.0f;
}
}
if (g_Vars.currentplayer->lift) {
esc = (struct escalatorobj *) g_Vars.currentplayer->lift->obj;
if (esc->base.type == OBJTYPE_ESCASTEP) {
spcc.x += esc->base.prop->pos.x - esc->prevpos.x;
spcc.z += esc->base.prop->pos.z - esc->prevpos.z;
}
}
sp8c = g_Vars.currentplayer->prop->pos.x;
sp88 = g_Vars.currentplayer->prop->pos.z;
bwalk0f0c63bc(&spcc, g_Vars.currentplayer->swaytarget == 0.0f, CDTYPE_ALL);
xdelta = g_Vars.currentplayer->prop->pos.x - g_Vars.currentplayer->bondprevpos.x;
zdelta = g_Vars.currentplayer->prop->pos.z - g_Vars.currentplayer->bondprevpos.z;
sp54 = -xdelta * g_Vars.currentplayer->bond2.unk00.f[2] + zdelta * g_Vars.currentplayer->bond2.unk00.f[0];
sp50 = xdelta * g_Vars.currentplayer->bond2.unk00.f[0] + zdelta * g_Vars.currentplayer->bond2.unk00.f[2];
sp4c = -spcc.f[0] * g_Vars.currentplayer->bond2.unk00.f[2] + spcc.f[2] * g_Vars.currentplayer->bond2.unk00.f[0];
sp48 = spcc.f[0] * g_Vars.currentplayer->bond2.unk00.f[0] + spcc.f[2] * g_Vars.currentplayer->bond2.unk00.f[2];
if (xdelta >= 0.0f) {
if (g_Vars.currentplayer->bondshotspeed.f[0] > 0.0f) {
if (spcc.f[0] >= 0.0f && xdelta < spcc.f[0]) {
g_Vars.currentplayer->bondshotspeed.f[0] *= xdelta / spcc.f[0];
}
} else {
if (spcc.f[0] < 0.0f) {
g_Vars.currentplayer->bondshotspeed.f[0] = 0.0f;
}
}
spcc.x *= 0.3f;
spcc.z *= 0.3f;
} else {
if (g_Vars.currentplayer->bondshotspeed.f[0] < 0.0f) {
if (spcc.f[0] <= 0.0f && spcc.f[0] < xdelta) {
g_Vars.currentplayer->bondshotspeed.f[0] *= xdelta / spcc.f[0];
}
} else {
if (spcc.f[0] > 0.0f) {
g_Vars.currentplayer->bondshotspeed.f[0] = 0.0f;
}
}
g_Vars.currentplayer->ladderupdown = 0.0f;
}
if (zdelta >= 0.0f) {
if (g_Vars.currentplayer->bondshotspeed.f[2] > 0.0f) {
if (spcc.f[2] >= 0.0f && zdelta < spcc.f[2]) {
g_Vars.currentplayer->bondshotspeed.f[2] *= zdelta / spcc.f[2];
}
} else {
if (spcc.f[2] < 0.0f) {
g_Vars.currentplayer->bondshotspeed.f[2] = 0.0f;
}
}
} else {
if (g_Vars.currentplayer->bondshotspeed.f[2] < 0.0f) {
if (spcc.f[2] <= 0.0f && spcc.f[2] < zdelta) {
g_Vars.currentplayer->bondshotspeed.f[2] *= zdelta / spcc.f[2];
}
} else {
if (spcc.f[2] > 0.0f) {
g_Vars.currentplayer->bondshotspeed.f[2] = 0.0f;
}
}
}
if (sp4c != 0.0f && g_Vars.currentplayer->speedstrafe * sp4c > 0.0f) {
sp54 /= sp4c;
if (sp54 <= 0.0f) {
g_Vars.currentplayer->speedstrafe = 0.0f;
} else if (sp54 < 1.0f) {
g_Vars.currentplayer->speedstrafe *= sp54;
}
}
if (sp48 != 0.0f) {
if (g_Vars.currentplayer->speedgo * sp48 > 0.0f) {
sp50 /= sp48;
if (sp50 <= 0.0f) {
g_Vars.currentplayer->speedgo = 0.0f;
} else if (sp50 < 1.0f) {
g_Vars.currentplayer->speedgo *= sp50;
}
}
}
xdiff = g_Vars.currentplayer->prop->pos.x - sp8c;
zdiff = g_Vars.currentplayer->prop->pos.z - sp88;
f0 = spcc.f[0] * spcc.f[0] + spcc.f[2] * spcc.f[2];
if (f0 != 0.0f) {
f0 = (xdiff * xdiff + zdiff * zdiff) / f0;
}
f0 = sqrtf(f0);
g_Vars.currentplayer->swayoffset0 += f0 * spb4;
g_Vars.currentplayer->swayoffset2 += f0 * spb0;
}
if (g_Vars.currentplayer->lift) {
esc = (struct escalatorobj *) g_Vars.currentplayer->lift->obj;
if (esc->base.type == OBJTYPE_ESCASTEP) {
spcc.x += esc->base.prop->pos.x - esc->prevpos.x;
spcc.z += esc->base.prop->pos.z - esc->prevpos.z;
}
}
sp8c = g_Vars.currentplayer->prop->pos.x;
sp88 = g_Vars.currentplayer->prop->pos.z;
bwalk0f0c63bc(&spcc, g_Vars.currentplayer->swaytarget == 0.0f, CDTYPE_ALL);
xdelta = g_Vars.currentplayer->prop->pos.x - g_Vars.currentplayer->bondprevpos.x;
zdelta = g_Vars.currentplayer->prop->pos.z - g_Vars.currentplayer->bondprevpos.z;
sp54 = -xdelta * g_Vars.currentplayer->bond2.unk00.f[2] + zdelta * g_Vars.currentplayer->bond2.unk00.f[0];
sp50 = xdelta * g_Vars.currentplayer->bond2.unk00.f[0] + zdelta * g_Vars.currentplayer->bond2.unk00.f[2];
sp4c = -spcc.f[0] * g_Vars.currentplayer->bond2.unk00.f[2] + spcc.f[2] * g_Vars.currentplayer->bond2.unk00.f[0];
sp48 = spcc.f[0] * g_Vars.currentplayer->bond2.unk00.f[0] + spcc.f[2] * g_Vars.currentplayer->bond2.unk00.f[2];
if (xdelta >= 0.0f) {
if (g_Vars.currentplayer->bondshotspeed.f[0] > 0.0f) {
if (spcc.f[0] >= 0.0f && xdelta < spcc.f[0]) {
g_Vars.currentplayer->bondshotspeed.f[0] *= xdelta / spcc.f[0];
}
} else {
if (spcc.f[0] < 0.0f) {
g_Vars.currentplayer->bondshotspeed.f[0] = 0.0f;
}
}
} else {
if (g_Vars.currentplayer->bondshotspeed.f[0] < 0.0f) {
if (spcc.f[0] <= 0.0f && spcc.f[0] < xdelta) {
g_Vars.currentplayer->bondshotspeed.f[0] *= xdelta / spcc.f[0];
}
} else {
if (spcc.f[0] > 0.0f) {
g_Vars.currentplayer->bondshotspeed.f[0] = 0.0f;
}
}
}
if (zdelta >= 0.0f) {
if (g_Vars.currentplayer->bondshotspeed.f[2] > 0.0f) {
if (spcc.f[2] >= 0.0f && zdelta < spcc.f[2]) {
g_Vars.currentplayer->bondshotspeed.f[2] *= zdelta / spcc.f[2];
}
} else {
if (spcc.f[2] < 0.0f) {
g_Vars.currentplayer->bondshotspeed.f[2] = 0.0f;
}
}
} else {
if (g_Vars.currentplayer->bondshotspeed.f[2] < 0.0f) {
if (spcc.f[2] <= 0.0f && spcc.f[2] < zdelta) {
g_Vars.currentplayer->bondshotspeed.f[2] *= zdelta / spcc.f[2];
}
} else {
if (spcc.f[2] > 0.0f) {
g_Vars.currentplayer->bondshotspeed.f[2] = 0.0f;
}
}
}
if (sp4c != 0.0f && g_Vars.currentplayer->speedstrafe * sp4c > 0.0f) {
sp54 /= sp4c;
if (sp54 <= 0.0f) {
g_Vars.currentplayer->speedstrafe = 0.0f;
} else if (sp54 < 1.0f) {
g_Vars.currentplayer->speedstrafe *= sp54;
}
}
if (sp48 != 0.0f) {
if (g_Vars.currentplayer->speedgo * sp48 > 0.0f) {
sp50 /= sp48;
if (sp50 <= 0.0f) {
g_Vars.currentplayer->speedgo = 0.0f;
} else if (sp50 < 1.0f) {
g_Vars.currentplayer->speedgo *= sp50;
}
}
}
xdiff = g_Vars.currentplayer->prop->pos.x - sp8c;
zdiff = g_Vars.currentplayer->prop->pos.z - sp88;
f0 = spcc.f[0] * spcc.f[0] + spcc.f[2] * spcc.f[2];
if (f0 != 0.0f) {
f0 = (xdiff * xdiff + zdiff * zdiff) / f0;
}
f0 = sqrtf(f0);
g_Vars.currentplayer->swayoffset0 += f0 * spb4;
g_Vars.currentplayer->swayoffset2 += f0 * spb0;
sp44 = g_Vars.currentplayer->speedtheta;
sp40 = g_Vars.currentplayer->speedverta / 0.7f + g_Vars.currentplayer->crouchspeed / PALUPF(5.0f);
sp3c = g_Vars.currentplayer->gunspeed;
@@ -1707,21 +1639,7 @@ void bwalkTick(void)
bmoveUpdateRooms(g_Vars.currentplayer);
if (g_Vars.currentplayer->walkinitmove) {
struct coord coord;
coord.x = (g_Vars.currentplayer->walkinitstart.x - g_Vars.currentplayer->walkinitpos.x)
* (1.0f - g_Vars.currentplayer->walkinitt2) + g_Vars.currentplayer->prop->pos.x;
coord.y = (g_Vars.currentplayer->walkinitstart.y - g_Vars.currentplayer->prop->pos.y)
* (1.0f - g_Vars.currentplayer->walkinitt2) + g_Vars.currentplayer->prop->pos.y;
coord.z = (g_Vars.currentplayer->walkinitstart.z - g_Vars.currentplayer->walkinitpos.z)
* (1.0f - g_Vars.currentplayer->walkinitt2) + g_Vars.currentplayer->prop->pos.z;
bmove0f0cc19c(&coord);
} else {
bmove0f0cc19c(&g_Vars.currentplayer->prop->pos);
}
bmove0f0cc19c(&g_Vars.currentplayer->prop->pos);
playerUpdatePerimInfo();
doorsCheckAutomatic();
-21
View File
@@ -2270,7 +2270,6 @@ s32 chrTick(struct prop *prop)
struct player *player;
struct coord sp17c;
f32 sp178;
struct hoverbikeobj *bike;
u8 stack[0x28];
if (prop->flags & PROPFLAG_NOTYETTICKED) {
@@ -2528,26 +2527,6 @@ s32 chrTick(struct prop *prop)
mtx4LoadTranslation(&sp190, &sp1a8);
mtx4MultMtx4InPlace(camGetWorldToScreenMtxf(), &sp1a8);
sp210.unk00 = &sp1a8;
} else if (prop->type == PROPTYPE_PLAYER) {
u8 stack[0x14];
f32 sp130;
player = g_Vars.players[playermgrGetPlayerNumByProp(prop)];
if (player->bondmovemode == MOVEMODE_BIKE) {
sp178 = chrGetInverseTheta(chr);
bike = (struct hoverbikeobj *)player->hoverbike->obj;
sp130 = bike->w * 1000;
sp17c.x = cosf(sp178) * sp130;
sp17c.y = ABS(bike->w) * 200 + 25;
sp17c.z = sinf(-sp178) * sp130;
mtx4LoadTranslation(&sp17c, &sp1a8);
mtx4MultMtx4InPlace(camGetWorldToScreenMtxf(), &sp1a8);
sp210.unk00 = &sp1a8;
} else {
sp210.unk00 = camGetWorldToScreenMtxf();
}
} else {
sp210.unk00 = camGetWorldToScreenMtxf();
}
+1 -3
View File
@@ -851,9 +851,7 @@ void explosionInflictDamage(struct prop *expprop)
}
// Give object momentum if it's a hover obj
if ((obj->hidden & OBJHFLAG_MOUNTED) == 0
&& (obj->hidden & OBJHFLAG_GRABBED) == 0
&& (obj->flags3 & OBJFLAG3_PUSHABLE)) {
if ((obj->hidden & OBJHFLAG_GRABBED) == 0 && (obj->flags3 & OBJFLAG3_PUSHABLE)) {
f32 dist;
struct coord spf4;
spf4.x = prop->pos.x - expprop->pos.x;
+112 -145
View File
@@ -4141,8 +4141,6 @@ void playerDieByShooter(u32 shooter, bool force)
if (g_Vars.currentplayer->unk1af0) {
g_Vars.currentplayer->bondtankexplode = true;
}
} else if (g_Vars.currentplayer->bondmovemode == MOVEMODE_BIKE) {
g_Vars.currentplayer->bondtankexplode = true;
}
bmoveSetMode(MOVEMODE_WALK);
@@ -4399,8 +4397,6 @@ void playerSetPerimEnabled(struct prop *prop, bool enable)
if (g_Vars.currentplayer->unk1af0) {
objSetPerimEnabled(g_Vars.currentplayer->unk1af0, enable);
}
} else if (g_Vars.currentplayer->bondmovemode == MOVEMODE_BIKE) {
objSetPerimEnabled(g_Vars.currentplayer->hoverbike, enable);
}
g_Vars.players[playernum]->bondperimenabled = enable;
@@ -4795,149 +4791,120 @@ void playerChooseThirdPersonAnimation(struct chrdata *chr, s32 crouchpos, f32 sp
} else {
struct prop *chrprop = chr->prop;
if (chrprop->type == PROPTYPE_PLAYER
&& g_Vars.players[playermgrGetPlayerNumByProp(chrprop)]->bondmovemode == MOVEMODE_BIKE) {
// Player on a hoverbike
if (leftprop && rightprop) {
wieldmode = WIELDMODE_DUALGUNS;
} else if (!leftprop && !rightprop) {
wieldmode = WIELDMODE_UNARMED;
} else if (leftgun && weaponHasFlag(leftgun->weaponnum, WEAPONFLAG_ONEHANDED)) {
wieldmode = WIELDMODE_PISTOL;
} else if (rightgun && weaponHasFlag(rightgun->weaponnum, WEAPONFLAG_ONEHANDED)) {
wieldmode = WIELDMODE_PISTOL;
} else {
wieldmode = WIELDMODE_HEAVY;
}
if (wieldmode == WIELDMODE_PISTOL) {
animnum = ANIM_ONBIKE_PISTOL;
} else if (wieldmode == WIELDMODE_DUALGUNS) {
animnum = ANIM_ONBIKE_DUALGUNS;
} else if (wieldmode == WIELDMODE_HEAVY) {
animnum = ANIM_ONBIKE_HEAVYGUN;
} else {
animnum = ANIM_ONBIKE_UNARMED;
}
speed = 0.5f;
animcfg = NULL;
// Player or bot on foot
if (leftprop && rightprop) {
wieldmode = WIELDMODE_DUALGUNS;
} else if (!leftprop && !rightprop) {
wieldmode = WIELDMODE_UNARMED;
} else if (leftgun && !weaponHasFlag(leftgun->weaponnum, WEAPONFLAG_AICANUSE)) {
wieldmode = WIELDMODE_UNARMED;
} else if (rightgun && !weaponHasFlag(rightgun->weaponnum, WEAPONFLAG_AICANUSE)) {
wieldmode = WIELDMODE_UNARMED;
} else if (leftgun && weaponHasFlag(leftgun->weaponnum, WEAPONFLAG_ONEHANDED)) {
wieldmode = WIELDMODE_PISTOL;
} else if (rightgun && weaponHasFlag(rightgun->weaponnum, WEAPONFLAG_ONEHANDED)) {
wieldmode = WIELDMODE_PISTOL;
} else {
// Player or bot on foot
if (leftprop && rightprop) {
wieldmode = WIELDMODE_DUALGUNS;
} else if (!leftprop && !rightprop) {
wieldmode = WIELDMODE_UNARMED;
} else if (leftgun && !weaponHasFlag(leftgun->weaponnum, WEAPONFLAG_AICANUSE)) {
wieldmode = WIELDMODE_UNARMED;
} else if (rightgun && !weaponHasFlag(rightgun->weaponnum, WEAPONFLAG_AICANUSE)) {
wieldmode = WIELDMODE_UNARMED;
} else if (leftgun && weaponHasFlag(leftgun->weaponnum, WEAPONFLAG_ONEHANDED)) {
wieldmode = WIELDMODE_PISTOL;
} else if (rightgun && weaponHasFlag(rightgun->weaponnum, WEAPONFLAG_ONEHANDED)) {
wieldmode = WIELDMODE_PISTOL;
} else {
wieldmode = WIELDMODE_HEAVY;
}
turnspeed = sqrtf(speedsideways * speedsideways + speedforwards * speedforwards);
if (speedtheta < 0) {
speedtheta = -speedtheta;
}
if (turnspeed < speedtheta) {
turnspeed = speedtheta;
}
if (turnspeed < 0.05f) {
if (crouchpos == CROUCHPOS_SQUAT) {
turnmode = TURNMODE_SQUAT_NOTURN;
} else if (crouchpos == CROUCHPOS_DUCK) {
turnmode = TURNMODE_DUCK_NOTURN;
} else {
turnmode = TURNMODE_STAND_NOTURN;
}
row = &var80070ba4[wieldmode][turnmode];
speed = 1.0f;
angle = 0.0f;
} else {
angle = atan2f(speedsideways, speedforwards);
if (angle >= M_BADPI) {
angle -= M_BADTAU;
}
if (crouchpos == CROUCHPOS_SQUAT) {
turnmode = TURNMODE_SQUAT_TURN;
speed = turnspeed * 2.8571429252625f;
if (speed > 1.2f) {
speed = 1.2f;
}
} else if (crouchpos == CROUCHPOS_DUCK) {
turnmode = TURNMODE_DUCK_TURN;
speed = turnspeed * 2;
if (speed > 1.2f) {
speed = 1.2f;
}
} else if (turnspeed < 0.4f
|| (chr->prop->type == PROPTYPE_PLAYER
&& g_Vars.players[playermgrGetPlayerNumByProp(chr->prop)]->headanim == 0)) {
turnmode = TURNMODE_STAND_SOFTTURN;
speed = 2.0f * turnspeed;
if (speed > 1.2f) {
speed = 1.2f;
}
} else {
turnmode = TURNMODE_STAND_HARDTURN;
speed = turnspeed;
if (speed > 1.2f) {
speed = 1.2f;
}
}
if (angle < -1.6333680152893f) {
angle += M_BADPI;
speed = -speed;
} else if (angle > 1.6333680152893f) {
angle -= M_BADPI;
speed = -speed;
}
row = &var80070ba4[wieldmode][turnmode];
if (angle < -row->unk14) {
angle = -row->unk14;
} else if (angle > row->unk14) {
angle = row->unk14;
}
}
limit = g_Vars.lvupdate60freal * 0.10470308363438f;
if (angle - *angleoffset > limit) {
*angleoffset += limit;
} else if (angle - *angleoffset < -limit) {
*angleoffset -= limit;
} else {
*angleoffset = angle;
}
animcfg = row->animcfg;
if (row->animnum) {
animnum = row->animnum;
}
speed *= row->speed;
startframe = row->startframe;
endframe = row->endframe;
wieldmode = WIELDMODE_HEAVY;
}
turnspeed = sqrtf(speedsideways * speedsideways + speedforwards * speedforwards);
if (speedtheta < 0) {
speedtheta = -speedtheta;
}
if (turnspeed < speedtheta) {
turnspeed = speedtheta;
}
if (turnspeed < 0.05f) {
if (crouchpos == CROUCHPOS_SQUAT) {
turnmode = TURNMODE_SQUAT_NOTURN;
} else if (crouchpos == CROUCHPOS_DUCK) {
turnmode = TURNMODE_DUCK_NOTURN;
} else {
turnmode = TURNMODE_STAND_NOTURN;
}
row = &var80070ba4[wieldmode][turnmode];
speed = 1.0f;
angle = 0.0f;
} else {
angle = atan2f(speedsideways, speedforwards);
if (angle >= M_BADPI) {
angle -= M_BADTAU;
}
if (crouchpos == CROUCHPOS_SQUAT) {
turnmode = TURNMODE_SQUAT_TURN;
speed = turnspeed * 2.8571429252625f;
if (speed > 1.2f) {
speed = 1.2f;
}
} else if (crouchpos == CROUCHPOS_DUCK) {
turnmode = TURNMODE_DUCK_TURN;
speed = turnspeed * 2;
if (speed > 1.2f) {
speed = 1.2f;
}
} else if (turnspeed < 0.4f
|| (chr->prop->type == PROPTYPE_PLAYER
&& g_Vars.players[playermgrGetPlayerNumByProp(chr->prop)]->headanim == 0)) {
turnmode = TURNMODE_STAND_SOFTTURN;
speed = 2.0f * turnspeed;
if (speed > 1.2f) {
speed = 1.2f;
}
} else {
turnmode = TURNMODE_STAND_HARDTURN;
speed = turnspeed;
if (speed > 1.2f) {
speed = 1.2f;
}
}
if (angle < -1.6333680152893f) {
angle += M_BADPI;
speed = -speed;
} else if (angle > 1.6333680152893f) {
angle -= M_BADPI;
speed = -speed;
}
row = &var80070ba4[wieldmode][turnmode];
if (angle < -row->unk14) {
angle = -row->unk14;
} else if (angle > row->unk14) {
angle = row->unk14;
}
}
limit = g_Vars.lvupdate60freal * 0.10470308363438f;
if (angle - *angleoffset > limit) {
*angleoffset += limit;
} else if (angle - *angleoffset < -limit) {
*angleoffset -= limit;
} else {
*angleoffset = angle;
}
animcfg = row->animcfg;
if (row->animnum) {
animnum = row->animnum;
}
speed *= row->speed;
startframe = row->startframe;
endframe = row->endframe;
}
if (animcfg != NULL && animnum == 0) {
+24 -357
View File
@@ -1693,7 +1693,6 @@ void func0f069850(struct defaultobj *obj, struct coord *pos, f32 rot[3][3], stru
Mtxf mtx;
struct modelrodata_bbox *bbox = objFindBboxRodata(obj);
struct modelrodata_type19 *rodata19 = NULL;
struct hoverbikeobj *hoverbike;
struct hoverpropobj *hoverprop;
mtx3ToMtx4(rot, &mtx);
@@ -1710,11 +1709,7 @@ void func0f069850(struct defaultobj *obj, struct coord *pos, f32 rot[3][3], stru
cyl->header.type = GEOTYPE_CYL;
cyl->header.flags = GEOFLAG_WALL | GEOFLAG_BLOCK_SIGHT | GEOFLAG_BLOCK_SHOOT;
if (obj->type == OBJTYPE_HOVERBIKE) {
hoverbike = (struct hoverbikeobj *)obj;
cyl->ymax = hoverbike->hov.ground + g_HovTypes[hoverbike->hov.type].unk00 + objGetLocalYMax(bbox) * obj->model->scale;
cyl->ymin = hoverbike->hov.ground + 20.0f;
} else if (obj->type == OBJTYPE_HOVERPROP) {
if (obj->type == OBJTYPE_HOVERPROP) {
hoverprop = (struct hoverpropobj *)obj;
cyl->ymax = hoverprop->hov.ground + g_HovTypes[hoverprop->hov.type].unk00 + objGetLocalYMax(bbox) * obj->model->scale;
cyl->ymin = hoverprop->hov.ground + 20.0f;
@@ -1733,11 +1728,7 @@ void func0f069850(struct defaultobj *obj, struct coord *pos, f32 rot[3][3], stru
objCalculateGeoBlockFromBboxAndMtx(bbox, &mtx, (struct geoblock *)cyl);
}
if (obj->type == OBJTYPE_HOVERBIKE) {
hoverbike = (struct hoverbikeobj *)obj;
cyl->ymax = hoverbike->hov.ground + g_HovTypes[hoverbike->hov.type].unk00 + objGetLocalYMax(bbox) * obj->model->scale;
cyl->ymin = hoverbike->hov.ground + 20.0f;
} else if (obj->type == OBJTYPE_HOVERPROP) {
if (obj->type == OBJTYPE_HOVERPROP) {
hoverprop = (struct hoverpropobj *)obj;
cyl->ymax = hoverprop->hov.ground + g_HovTypes[hoverprop->hov.type].unk00 + objGetLocalYMax(bbox) * obj->model->scale;
cyl->ymin = hoverprop->hov.ground + 20.0f;
@@ -2410,7 +2401,7 @@ void objFree(struct defaultobj *obj, bool freeprop, bool canregen)
for (i = 0; i < PLAYERCOUNT(); i++) {
setCurrentPlayerNum(i);
if (obj->prop == bmoveGetGrabbedProp() || obj->prop == bmoveGetHoverbike()) {
if (obj->prop == bmoveGetGrabbedProp()) {
bmoveSetMode(MOVEMODE_WALK);
}
@@ -5894,9 +5885,6 @@ f32 objGetHov04(struct defaultobj *obj)
if (obj->type == OBJTYPE_HOVERPROP) {
struct hoverpropobj *tmp = (struct hoverpropobj *) obj;
hov = &tmp->hov;
} else if (obj->type == OBJTYPE_HOVERBIKE) {
struct hoverbikeobj *tmp = (struct hoverbikeobj *) obj;
hov = &tmp->hov;
}
if (hov) {
@@ -6051,10 +6039,6 @@ void hovTick(struct defaultobj *obj, struct hov *hov)
hov->unk04 = hov->unk08 = type->unk00;
hov->unk30 = spac;
hov->flags &= ~1;
if (obj->type == OBJTYPE_HOVERBIKE) {
propsnd0f0939f8(NULL, obj->prop, SFX_BIKE_PULSE, -1, -1, 0, 0, 0, 0, -1.0f, 0, -1, -1.0f, -1.0f, -1.0f);
}
}
applySpeed(&hov->unk04, hov->unk08, &hov->unk0c, type->unk0c, type->unk0c, type->unk10);
@@ -6124,18 +6108,10 @@ void hovTick(struct defaultobj *obj, struct hov *hov)
} else {
f0 *= f12;
if (obj->hidden & OBJHFLAG_MOUNTED) {
if (f0 > 10.0f) {
f0 = 10.0f;
} else if (f0 < -10.0f) {
f0 = -10.0f;
}
} else {
if (f0 > 5.0f) {
f0 = 5.0f;
} else if (f0 < -5.0f) {
f0 = -5.0f;
}
if (f0 > 5.0f) {
f0 = 5.0f;
} else if (f0 < -5.0f) {
f0 = -5.0f;
}
}
@@ -6173,31 +6149,13 @@ void hovTick(struct defaultobj *obj, struct hov *hov)
mtx4LoadYRotation(hov->unk10, &sp108);
mtx00015be0(&sp108, &sp148);
mtx00015f04(obj->model->scale, &sp148);
if (obj->type == OBJTYPE_HOVERBIKE) {
struct hoverbikeobj *bike = (struct hoverbikeobj *) obj;
f32 ezreal = bike->ezreal + bike->ezreal2;
if (bike->exreal != 0.0f) {
mtx4LoadXRotation(bike->exreal, &sp108);
mtx00015be4(&sp148, &sp108, &spc8);
mtx4Copy(&spc8, &sp148);
}
if (ezreal != 0.0f) {
mtx4LoadZRotation(ezreal, &sp108);
mtx00015be4(&sp148, &sp108, &spc8);
mtx4Copy(&spc8, &sp148);
}
}
mtx4ToMtx3(&sp148, obj->realrot);
}
}
s32 objIsHoverpropOrBike(struct defaultobj *obj)
{
return obj->type == OBJTYPE_HOVERPROP || obj->type == OBJTYPE_HOVERBIKE;
return obj->type == OBJTYPE_HOVERPROP;
}
f32 hoverpropGetTurnAngle(struct defaultobj *obj)
@@ -6207,9 +6165,6 @@ f32 hoverpropGetTurnAngle(struct defaultobj *obj)
if (obj->type == OBJTYPE_HOVERPROP) {
struct hoverpropobj *hoverprop = (struct hoverpropobj *)obj;
angle = hoverprop->hov.unk10;
} else if (obj->type == OBJTYPE_HOVERBIKE) {
struct hoverbikeobj *hoverbike = (struct hoverbikeobj *)obj;
angle = hoverbike->hov.unk10;
}
return angle;
@@ -6220,9 +6175,6 @@ void hoverpropSetTurnAngle(struct defaultobj *obj, f32 angle)
if (obj->type == OBJTYPE_HOVERPROP) {
struct hoverpropobj *hoverprop = (struct hoverpropobj *)obj;
hoverprop->hov.unk10 = angle;
} else if (obj->type == OBJTYPE_HOVERBIKE) {
struct hoverbikeobj *hoverbike = (struct hoverbikeobj *)obj;
hoverbike->hov.unk10 = angle;
}
}
@@ -6237,7 +6189,6 @@ s32 func0f072144(struct defaultobj *obj, struct coord *arg1, f32 arg2, bool arg3
struct hov *hov = NULL;
union geounion geounion;
struct prop *prop = obj->prop;
struct hoverbikeobj *hoverbike;
Mtxf spa4;
Mtxf sp64;
f32 sp40[3][3];
@@ -6289,10 +6240,7 @@ s32 func0f072144(struct defaultobj *obj, struct coord *arg1, f32 arg2, bool arg3
func0f065e74(&prop->pos, prop->rooms, &pos, rooms);
setup0f09233c(obj, &pos, sp460, rooms);
if (obj->type == OBJTYPE_HOVERBIKE) {
hoverbike = (struct hoverbikeobj *) obj;
hov = &hoverbike->hov;
} else if (obj->type == OBJTYPE_HOVERPROP) {
if (obj->type == OBJTYPE_HOVERPROP) {
hov = &((struct hoverpropobj *) obj)->hov;
}
@@ -6438,9 +6386,7 @@ f32 objCollide(struct defaultobj *movingobj, struct coord *movingvel, f32 rotati
} else if (obstacle->type == PROPTYPE_OBJ) {
struct defaultobj *obstacleobj = obstacle->obj;
if ((obstacleobj->hidden & OBJHFLAG_MOUNTED) == 0
&& (obstacleobj->hidden & OBJHFLAG_GRABBED) == 0
&& (obstacleobj->flags3 & OBJFLAG3_PUSHABLE)) {
if ((obstacleobj->hidden & OBJHFLAG_GRABBED) == 0 && (obstacleobj->flags3 & OBJFLAG3_PUSHABLE)) {
struct coord sp88;
struct coord obstaclevel = {0, 0, 0};
struct coord sp70;
@@ -6508,189 +6454,6 @@ f32 objCollide(struct defaultobj *movingobj, struct coord *movingvel, f32 rotati
return force;
}
void hoverbikeUpdateMovement(struct hoverbikeobj *bike, f32 speedforwards, f32 speedsideways, f32 speedtheta)
{
f32 f12;
f32 angle;
f32 sinangle;
f32 cosangle;
f32 f2;
f32 sp70 = 0;
f32 sp6c = 0;
f32 sp68 = 0;
s32 i;
u32 stack[6];
f32 tmp;
tmp = speedtheta * 0.04362628236413f;
if (speedforwards < 0) {
tmp *= 1.0f - speedforwards * 0.5f;
}
for (i = 0; i < g_Vars.lvupdate60; i++) {
bike->w += (tmp - bike->w) * (PAL ? 0.0893f : 0.075f);
}
sp6c += bike->w * 12;
angle = hoverpropGetTurnAngle(&bike->base);
sinangle = sinf(angle);
cosangle = cosf(angle);
if (speedforwards >= 0) {
f2 = (speedforwards + 0.1f) * 0.3f * g_Vars.lvupdate60freal;
} else {
f2 = (0.1f - speedforwards) * 0.3f * g_Vars.lvupdate60freal;
}
if (bike->rels[1] < speedforwards * 0.5f) {
bike->rels[1] += f2;
if (bike->rels[1] > speedforwards * 0.5f) {
bike->rels[1] = speedforwards * 0.5f;
}
} else {
bike->rels[1] -= f2;
if (bike->rels[1] < speedforwards * 0.5f) {
bike->rels[1] = speedforwards * 0.5f;
}
}
bike->leandiff *= 0.93f;
bike->leandiff += speedforwards - bike->leanspeed;
bike->leanspeed = speedforwards;
f2 = bike->leandiff * 5;
if (f2 > 1.0f) {
f2 = 1.0f;
} else if (f2 < -1.0f) {
f2 = -1.0f;
}
if (speedforwards >= 0) {
if (f2 > 0) {
f12 = speedforwards * 0.3f + speedforwards * 0.7f * f2;
} else {
f12 = speedforwards * 0.3f;
}
} else {
if (f2 < 0) {
f12 = speedforwards * 0.5f - speedforwards * 0.5f * f2;
} else {
f12 = speedforwards * 0.5f;
}
}
sp70 += f12 * 0.04f * M_BADTAU;
if (speedsideways >= 0) {
f12 = (speedsideways + 0.1f) * 0.3f * g_Vars.lvupdate60freal;
} else {
f12 = (0.1f - speedsideways) * 0.3f * g_Vars.lvupdate60freal;
}
if (bike->rels[0] < 0.4f * speedsideways) {
bike->rels[0] += f12;
if (bike->rels[0] > speedsideways * 0.4f) {
bike->rels[0] = speedsideways * 0.4f;
}
} else {
bike->rels[0] -= f12;
if (bike->rels[0] < speedsideways * 0.4f) {
bike->rels[0] = speedsideways * 0.4f;
}
}
sp68 += speedsideways * 0.2512874007225f;
for (i = 0; i < g_Vars.lvupdate60; i++) {
bike->speedabs[1] *= PAL ? 0.964f : 0.97f;
bike->speedabs[0] *= PAL ? 0.964f : 0.97f;
bike->speedabs[1] += bike->rels[1] * cosangle * PALUPF(1.08f);
bike->speedabs[0] += bike->rels[1] * sinangle * PALUPF(1.08f);
bike->speedabs[1] += bike->rels[0] * sinangle * PALUPF(0.72f);
bike->speedabs[0] += -bike->rels[0] * cosangle * PALUPF(0.72f);
}
for (i = 0; i < g_Vars.lvupdate60; i++) {
bike->exreal += (sp70 - bike->exreal) * (PAL ? 0.0478f : 0.04f);
bike->ezreal += (sp6c - bike->ezreal) * (PAL ? 0.177f : 0.15f);
bike->ezreal2 += (sp68 - bike->ezreal2) * (PAL ? 0.0478f : 0.04f);
}
if (speedforwards >= 0.99f) {
bike->maxspeedtime240 += g_Vars.lvupdate240;
if (bike->maxspeedtime240 > TICKS(2400)) {
bike->maxspeedtime240 = TICKS(2400);
}
} else if (bike->maxspeedtime240 > 0) {
if (speedforwards >= 0.8f) {
// empty
} else if (speedforwards >= -0.1f) {
bike->maxspeedtime240 -= g_Vars.lvupdate240;
if (bike->maxspeedtime240 < 0) {
bike->maxspeedtime240 = 0;
}
} else {
bike->maxspeedtime240 = 0;
}
}
bike->speedrel[1] = bike->maxspeedtime240 * 5000.0f / TICKS(2400000);
bike->speed[1] = bike->speedabs[1] + bike->speedrel[1] * cosangle + bike->speedrel[0] * sinangle;
bike->speed[0] = bike->speedabs[0] + bike->speedrel[1] * sinangle - bike->speedrel[0] * cosangle;
if (bike->base.flags & OBJFLAG_HOVERBIKE_MOVINGWHILEEMPTY) {
if (bike->speed[0] > 0.1f
|| bike->speed[1] > 0.1f
|| bike->w > 0.001f
|| bike->rels[0] > 0.001f
|| bike->rels[1] > 0.001f
|| bike->exreal > 0.001f
|| bike->ezreal > 0.001f
|| bike->ezreal2 > 0.001f
|| bike->leandiff > 0.1f
|| bike->speed[0] < -0.1f
|| bike->speed[1] < -0.1f
|| bike->w < -0.001f
|| bike->rels[0] < -0.001f
|| bike->rels[1] < -0.001f
|| bike->exreal < -0.001f
|| bike->ezreal < -0.001f
|| bike->ezreal2 < -0.001f
|| bike->leandiff < -0.1f) {
// still moving
} else {
bike->speed[0] = 0;
bike->speed[1] = 0;
bike->w = 0;
bike->rels[0] = 0;
bike->rels[1] = 0;
bike->exreal = 0;
bike->ezreal = 0;
bike->ezreal2 = 0;
bike->leanspeed = 0;
bike->leandiff = 0;
bike->maxspeedtime240 = 0;
bike->speedabs[0] = 0;
bike->speedabs[1] = 0;
bike->speedrel[0] = 0;
bike->speedrel[1] = 0;
if (1);
bike->base.flags &= ~OBJFLAG_HOVERBIKE_MOVINGWHILEEMPTY;
}
}
}
void platformDisplaceProps2(struct prop *platform, Mtxf *arg1)
{
struct prop *prop;
@@ -8550,9 +8313,6 @@ void platformDisplaceProps(struct prop *platform, s16 *propnums, struct coord *p
if (obj->type == OBJTYPE_HOVERPROP) {
struct hoverpropobj *hoverobj = (struct hoverpropobj *)obj;
hov = &hoverobj->hov;
} else if (obj->type == OBJTYPE_HOVERBIKE) {
struct hoverbikeobj *bike = (struct hoverbikeobj *)obj;
hov = &bike->hov;
}
if (hov) {
@@ -8660,10 +8420,6 @@ void platformDisplaceProps(struct prop *platform, s16 *propnums, struct coord *p
playerUpdatePerimInfo();
bmoveUpdateRooms(g_Vars.players[playernum]);
setCurrentPlayerNum(prevplayernum);
if (g_Vars.players[playernum]->walkinitmove) {
g_Vars.players[playernum]->walkinitstart.y += ydist;
}
}
}
}
@@ -11271,22 +11027,6 @@ void hoverpropTick(struct prop *prop, bool arg1)
}
}
void hoverbikeTick(struct prop *prop, bool arg1)
{
struct hoverbikeobj *obj = (struct hoverbikeobj *)prop->obj;
if ((obj->base.hidden & OBJHFLAG_MOUNTED) == 0) {
if ((obj->base.hidden & OBJHFLAG_GRABBED) == 0
&& (arg1 || (prop->flags & PROPFLAG_ONANYSCREENPREVTICK))) {
hovTick(&obj->base, &obj->hov);
}
if (obj->base.flags & OBJFLAG_HOVERBIKE_MOVINGWHILEEMPTY) {
hoverbikeUpdateMovement(obj, 0, 0, 0);
}
}
}
/**
* Show or hide the CI dropship's interior features depending on whether the
* dropship object's deactivated flag is set.
@@ -11654,8 +11394,6 @@ s32 objTickPlayer(struct prop *prop)
if (obj->type == OBJTYPE_HOVERPROP) {
hov = &((struct hoverpropobj *)obj)->hov;
} else if (obj->type == OBJTYPE_HOVERBIKE) {
hov = &((struct hoverbikeobj *)obj)->hov;
}
if (hov) {
@@ -11817,8 +11555,6 @@ s32 objTickPlayer(struct prop *prop)
}
} else if (obj->type == OBJTYPE_HOVERPROP) {
hoverpropTick(prop, sp592);
} else if (obj->type == OBJTYPE_HOVERBIKE) {
hoverbikeTick(prop, sp592);
}
}
@@ -11830,7 +11566,7 @@ s32 objTickPlayer(struct prop *prop)
if (sp552) {
pass2 = false;
} else if (prop == bmoveGetHoverbike() || prop == bmoveGetGrabbedProp()) {
} else if (prop == bmoveGetGrabbedProp()) {
pass2 = posIsInDrawDistance(&prop->pos);
} else if (obj->flags2 & OBJFLAG2_04000000) {
pass2 = posIsInDrawDistance(&prop->pos);
@@ -14316,7 +14052,6 @@ Gfx *objRender(struct prop *prop, Gfx *gdl, bool xlupass)
if (xlupass) {
if (obj->type == OBJTYPE_HOVERPROP
|| obj->type == OBJTYPE_HOVERBIKE
|| obj->modelnum == MODEL_HOOVERBOT
|| obj->modelnum == MODEL_TESTERBOT) {
gdl = objRenderShadow(obj, gdl);
@@ -14725,7 +14460,7 @@ void objApplyMomentum(struct defaultobj *obj, struct coord *speed, f32 rotation,
projectile->unk0dc = rotation;
}
if (obj->type == OBJTYPE_HOVERPROP || obj->type == OBJTYPE_HOVERBIKE) {
if (obj->type == OBJTYPE_HOVERPROP) {
if (obj->flags & OBJFLAG_20000000) {
projectile->unk08c = 0.8f;
projectile->unk098 = 0.0027777778f;
@@ -15757,7 +15492,6 @@ bool func0f085158(struct defaultobj *obj)
case OBJTYPE_SAFE:
case OBJTYPE_TINTEDGLASS:
case OBJTYPE_LIFT:
case OBJTYPE_HOVERBIKE:
case OBJTYPE_HOVERPROP:
case OBJTYPE_FAN:
case OBJTYPE_HOVERCAR:
@@ -16376,7 +16110,7 @@ void objHit(struct shotdata *shotdata, struct hit *hit)
objDropRecursively(hit->prop, false);
// Handle pushing and bouncing
if ((obj->hidden & OBJHFLAG_MOUNTED) == 0 && (obj->hidden & OBJHFLAG_GRABBED) == 0) {
if ((obj->hidden & OBJHFLAG_GRABBED) == 0) {
if (obj->flags3 & OBJFLAG3_PUSHABLE) {
struct coord spb0;
struct coord spa4;
@@ -16439,14 +16173,6 @@ bool objTestForInteract(struct prop *prop)
|| (obj->flags3 & (OBJFLAG3_HTMTERMINAL | OBJFLAG3_INTERACTABLE))
|| (obj->hidden & (OBJHFLAG_LIFTDOOR | OBJHFLAG_00000002))) {
maybe = true;
} else if (obj->type == OBJTYPE_HOVERBIKE) {
if (g_Vars.currentplayer->bondmovemode == MOVEMODE_GRAB) {
maybe = true;
} else if (g_Vars.currentplayer->bondmovemode == MOVEMODE_WALK
&& bmoveGetCrouchPos() == CROUCHPOS_STAND
&& g_Vars.currentplayer->crouchoffset == 0.0f) {
maybe = true;
}
} else if ((obj->flags3 & OBJFLAG3_GRABBABLE)
&& g_Vars.currentplayer->bondmovemode == MOVEMODE_WALK
&& bmoveGetCrouchPos() == CROUCHPOS_STAND
@@ -16454,10 +16180,6 @@ bool objTestForInteract(struct prop *prop)
maybe = true;
}
if (maybe && (obj->hidden & OBJHFLAG_MOUNTED) && prop == bmoveGetHoverbike()) {
maybe = false;
}
if (maybe
&& (prop->flags & PROPFLAG_ONTHISSCREENTHISTICK)
&& objIsHealthy(obj)
@@ -16503,55 +16225,6 @@ bool objTestForInteract(struct prop *prop)
return true;
}
bool currentPlayerTryMountHoverbike(struct prop *prop)
{
struct defaultobj *obj = prop->obj;
bool mount = false;
u32 stack[2];
if (obj->type == OBJTYPE_HOVERBIKE
&& g_Vars.lvframe60 - g_Vars.currentplayer->activatetimelast < TICKS(30)
&& (obj->hidden & OBJHFLAG_MOUNTED) == 0) {
if (obj->hidden & OBJHFLAG_GRABBED) {
if (bmoveGetGrabbedProp() == prop) {
mount = true;
} else {
mount = false;
}
} else {
mount = true;
}
}
if (mount && g_Vars.currentplayer->bondmovemode != MOVEMODE_GRAB) {
if (g_Vars.currentplayer->bondmovemode != MOVEMODE_WALK
|| bmoveGetCrouchPos() != CROUCHPOS_STAND
|| g_Vars.currentplayer->crouchoffset != 0) {
mount = false;
}
}
if (mount) {
f32 angle = atan2f(
prop->pos.x - g_Vars.currentplayer->prop->pos.x,
prop->pos.z - g_Vars.currentplayer->prop->pos.z);
angle -= hoverpropGetTurnAngle(obj);
if (angle < 0) {
angle += M_BADTAU;
}
if ((angle > 0.3926365673542f && angle < 2.3558194637299f)
|| (angle < 5.8895483016968f && angle > 3.9263656139374f)) {
g_Vars.currentplayer->hoverbike = prop;
bmoveSetMode(MOVEMODE_BIKE);
return true;
}
}
return false;
}
bool propobjInteract(struct prop *prop)
{
struct defaultobj *obj = prop->obj;
@@ -16592,8 +16265,7 @@ bool propobjInteract(struct prop *prop)
} else {
result = propPickupByPlayer(prop, 1);
}
} else if (currentPlayerTryMountHoverbike(prop) == false
&& (obj->flags3 & OBJFLAG3_GRABBABLE)
} else if ((obj->flags3 & OBJFLAG3_GRABBABLE)
&& g_Vars.currentplayer->bondmovemode == MOVEMODE_WALK
&& bmoveGetCrouchPos() == CROUCHPOS_STAND
&& g_Vars.currentplayer->crouchoffset == 0
@@ -19249,11 +18921,11 @@ bool doorIsUnlocked(struct prop *playerprop, struct prop *doorprop)
return canopen;
}
bool doorIsPosInRange(struct doorobj *door, struct coord *pos, f32 distance, bool isbike)
bool doorIsPosInRange(struct doorobj *door, struct coord *pos, f32 distance)
{
struct coord range;
if ((door->doorflags & DOORFLAG_LONGRANGE) || isbike) {
if (door->doorflags & DOORFLAG_LONGRANGE) {
distance += 400;
} else {
distance += 200;
@@ -19274,7 +18946,7 @@ bool doorIsPosInRange(struct doorobj *door, struct coord *pos, f32 distance, boo
return false;
}
bool doorIsObjInRange(struct doorobj *door, struct defaultobj *obj, bool isbike)
bool doorIsObjInRange(struct doorobj *door, struct defaultobj *obj)
{
struct modelrodata_bbox *bbox = objFindBboxRodata(obj);
f32 scale = 0;
@@ -19305,7 +18977,7 @@ bool doorIsObjInRange(struct doorobj *door, struct defaultobj *obj, bool isbike)
scale *= obj->model->scale;
return doorIsPosInRange(door, &obj->prop->pos, scale, isbike);
return doorIsPosInRange(door, &obj->prop->pos, scale);
}
/**
@@ -19345,12 +19017,11 @@ bool doorIsRangeEmpty(struct doorobj *door)
struct prop *prop = &g_Vars.props[*propnumptr];
if (prop->type == PROPTYPE_CHR || prop->type == PROPTYPE_PLAYER) {
if (doorIsPosInRange(door, &prop->pos, 0, false)) {
if (doorIsPosInRange(door, &prop->pos, 0)) {
return false;
}
} else if (prop->type == PROPTYPE_OBJ) {
if (prop->obj->hidden & (OBJHFLAG_MOUNTED | OBJHFLAG_GRABBED)
&& doorIsObjInRange(door, prop->obj, (prop->obj->hidden & OBJHFLAG_MOUNTED) != 0)) {
if (prop->obj->hidden & (OBJHFLAG_GRABBED) && doorIsObjInRange(door, prop->obj)) {
return false;
}
}
@@ -19384,21 +19055,17 @@ void doorsCheckAutomatic(void)
&& (door->mode == DOORMODE_CLOSING || (door->mode == DOORMODE_IDLE && door->frac <= 0))) {
bool canopen = false;
struct defaultobj *obj = NULL;
bool isbike = false;
struct doorobj *sibling;
if (g_Vars.currentplayer->bondmovemode == MOVEMODE_GRAB) {
obj = bmoveGetGrabbedProp()->obj;
} else if (g_Vars.currentplayer->bondmovemode == MOVEMODE_BIKE) {
obj = bmoveGetHoverbike()->obj;
isbike = true;
}
if ((posIsInFrontOfDoor(&g_Vars.currentplayer->prop->pos, door) != vectorIsInFrontOfDoor(door, &g_Vars.currentplayer->bond2.unk00)) != 0) {
canopen = doorIsPosInRange(door, &g_Vars.currentplayer->prop->pos, 0, isbike);
canopen = doorIsPosInRange(door, &g_Vars.currentplayer->prop->pos, 0);
if (!canopen && obj) {
canopen = doorIsObjInRange(door, obj, isbike);
canopen = doorIsObjInRange(door, obj);
}
}
@@ -19406,10 +19073,10 @@ void doorsCheckAutomatic(void)
while (sibling && sibling != door && !canopen) {
if ((posIsInFrontOfDoor(&g_Vars.currentplayer->prop->pos, sibling) != vectorIsInFrontOfDoor(sibling, &g_Vars.currentplayer->bond2.unk00)) != 0) {
canopen = doorIsPosInRange(sibling, &g_Vars.currentplayer->prop->pos, 0, isbike);
canopen = doorIsPosInRange(sibling, &g_Vars.currentplayer->prop->pos, 0);
if (!canopen && obj) {
canopen = doorIsObjInRange(door, obj, isbike);
canopen = doorIsObjInRange(door, obj);
}
}
-1
View File
@@ -36,7 +36,6 @@ void objsStop(void)
case OBJTYPE_TANK:
case OBJTYPE_TINTEDGLASS:
case OBJTYPE_LIFT:
case OBJTYPE_HOVERBIKE:
case OBJTYPE_HOVERPROP:
case OBJTYPE_FAN:
case OBJTYPE_HOVERCAR:
-25
View File
@@ -1291,7 +1291,6 @@ void setupLoadFiles(s32 stagenum)
numobjs += setupCountCommandType(OBJTYPE_TRUCK);
numobjs += setupCountCommandType(OBJTYPE_TANK);
numobjs += setupCountCommandType(OBJTYPE_LIFT);
numobjs += setupCountCommandType(OBJTYPE_HOVERBIKE);
numobjs += setupCountCommandType(OBJTYPE_HOVERPROP);
numobjs += setupCountCommandType(OBJTYPE_FAN);
numobjs += setupCountCommandType(OBJTYPE_HOVERCAR);
@@ -1560,30 +1559,6 @@ void setupCreateProps(s32 stagenum)
setupCreateHov(obj, &hoverprop->hov);
}
break;
case OBJTYPE_HOVERBIKE:
if (withobjs && (obj->flags2 & diffflag) == 0) {
struct hoverbikeobj *bike = (struct hoverbikeobj *)obj;
setupCreateObject(obj, index);
setupCreateHov(obj, &bike->hov);
bike->speed[0] = 0;
bike->speed[1] = 0;
bike->w = 0;
bike->rels[0] = 0;
bike->rels[1] = 0;
bike->exreal = 0;
bike->ezreal = 0;
bike->ezreal2 = 0;
bike->leanspeed = 0;
bike->leandiff = 0;
bike->maxspeedtime240 = 0;
bike->speedabs[0] = 0;
bike->speedabs[1] = 0;
bike->speedrel[0] = 0;
bike->speedrel[1] = 0;
}
break;
case OBJTYPE_FAN:
if (withobjs && (obj->flags2 & diffflag) == 0) {
struct fanobj *fan = (struct fanobj *)obj;
-2
View File
@@ -71,7 +71,6 @@ u32 setupGetCmdLength(u32 *cmd)
case OBJTYPE_LIFT: return 37;
case OBJTYPE_CONDITIONALSCENERY: return 5;
case OBJTYPE_BLOCKEDPATH: return 4;
case OBJTYPE_HOVERBIKE: return 56;
case OBJTYPE_HOVERPROP: return 39;
case OBJTYPE_FAN: return 29;
case OBJTYPE_HOVERCAR: return 38;
@@ -240,7 +239,6 @@ struct defaultobj *setupGetObjByCmdIndex(u32 cmdindex)
case OBJTYPE_TANK:
case OBJTYPE_TINTEDGLASS:
case OBJTYPE_LIFT:
case OBJTYPE_HOVERBIKE:
case OBJTYPE_HOVERPROP:
case OBJTYPE_FAN:
case OBJTYPE_HOVERCAR:
-24
View File
@@ -1,24 +0,0 @@
#ifndef IN_GAME_BONDBIKE_H
#define IN_GAME_BONDBIKE_H
#include <ultra64.h>
#include "data.h"
#include "types.h"
void bbikeInit(void);
void bbikeExit(void);
void bbikeUpdateVehicleOffset(void);
void bbikeTryDismountAngle(f32 relativeangle, f32 distance);
void bbikeHandleActivate(void);
void bbikeApplyMoveData(struct movedata *data);
void bbike0f0d2b40(struct defaultobj *bike, struct coord *arg1, f32 arg2, struct defaultobj *obstacle);
s32 bbikeCalculateNewPosition(struct coord *arg0, f32 arg1);
s32 bbikeCalculateNewPositionWithPush(struct coord *arg0, f32 arg1);
void bbikeUpdateVertical(struct coord *pos);
s32 bbike0f0d3680(struct coord *arg0, struct coord *arg1, struct coord *arg2);
s32 bbike0f0d36d4(struct coord *arg0, struct coord *arg1, struct coord *arg2, struct coord *arg3, struct coord *arg4);
s32 bbike0f0d3840(struct coord *arg0, struct coord *arg1, struct coord *arg2);
s32 bbike0f0d3940(struct coord *arg0, struct coord *arg1, struct coord *arg2);
void bbike0f0d3c60(struct coord *arg0);
void bbikeTick(void);
#endif
+2 -3
View File
@@ -153,7 +153,6 @@ void hovercarFindNextPath(struct hovercarobj *hovercar);
void hovercarStartNextPath(struct hovercarobj *hovercar);
void hovercarIncrementStep(struct hovercarobj *hovercar);
f32 objCollide(struct defaultobj *obj, struct coord *arg1, f32 arg2);
void hoverbikeUpdateMovement(struct hoverbikeobj *hoverbike, f32 arg1, f32 arg2, f32 arg3);
void platformDisplaceProps2(struct prop *platform, Mtxf *arg1);
bool rocketTickFbw(struct weaponobj *rocket);
s32 projectileLaunch(struct defaultobj *obj, struct projectile *projectile, struct coord *arg2, struct coord *arg3);
@@ -294,8 +293,8 @@ void weaponSetGunfireVisible(struct prop *prop, bool visible, s16 room);
bool weaponIsGunfireVisible(struct prop *prop);
s32 hatGetType(struct prop *prop);
bool doorIsUnlocked(struct prop *playerprop, struct prop *doorprop);
bool doorIsPosInRange(struct doorobj *door, struct coord *pos, f32 arg2, bool isbike);
bool doorIsObjInRange(struct doorobj *door, struct defaultobj *obj, bool isbike);
bool doorIsPosInRange(struct doorobj *door, struct coord *pos, f32 arg2);
bool doorIsObjInRange(struct doorobj *door, struct defaultobj *obj);
bool vectorIsInFrontOfDoor(struct doorobj *door, struct coord *vector);
bool doorIsRangeEmpty(struct doorobj *door);
void doorsCheckAutomatic(void);
-17
View File
@@ -1830,23 +1830,6 @@ struct blockedpathobj { // objtype 0x32
struct blockedpathobj *next;
};
struct hoverbikeobj { // objtype 0x33
struct defaultobj base;
struct hov hov;
/*0x09c*/ f32 speed[2];
/*0x0a4*/ f32 prevpos[2];
/*0x0ac*/ f32 w;
/*0x0b0*/ f32 rels[2];
/*0x0b8*/ f32 exreal;
/*0x0bc*/ f32 ezreal;
/*0x0c0*/ f32 ezreal2;
/*0x0c4*/ f32 leanspeed;
/*0x0c8*/ f32 leandiff;
/*0x0cc*/ s32 maxspeedtime240;
/*0x0d0*/ f32 speedabs[2];
/*0x0d8*/ f32 speedrel[2];
};
struct hoverpropobj { // objtype 0x35
struct defaultobj base;
struct hov hov;