mirror of
https://gitlab.com/ryandwyer/perfect-dark
synced 2026-06-27 01:35:07 -04:00
Remove hoverbike
This commit is contained in:
@@ -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
File diff suppressed because it is too large
Load Diff
+3
-18
@@ -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
@@ -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
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user