diff --git a/ld/gamefiles.ntsc-final.inc b/ld/gamefiles.ntsc-final.inc index bac7405dc..953009064 100644 --- a/ld/gamefiles.ntsc-final.inc +++ b/ld/gamefiles.ntsc-final.inc @@ -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); \ diff --git a/src/game/bondbike.c b/src/game/bondbike.c deleted file mode 100644 index c65d325cc..000000000 --- a/src/game/bondbike.c +++ /dev/null @@ -1,1019 +0,0 @@ -#include -#include "constants.h" -#include "game/bondbike.h" -#include "game/bondmove.h" -#include "game/camera.h" -#include "game/chraction.h" -#include "game/prop.h" -#include "game/setuputils.h" -#include "game/propsnd.h" -#include "game/quaternion.h" -#include "game/bondgun.h" -#include "game/tex.h" -#include "game/player.h" -#include "game/bondhead.h" -#include "game/lv.h" -#include "game/options.h" -#include "game/propobj.h" -#include "bss.h" -#include "lib/mtx.h" -#include "lib/anim.h" -#include "lib/collision.h" -#include "lib/joy.h" -#include "data.h" -#include "types.h" - -void bbikeInit(void) -{ - struct hoverbikeobj *hoverbike = (struct hoverbikeobj *)g_Vars.currentplayer->hoverbike->obj; - Mtxf matrix; - - g_Vars.currentplayer->bondmovemode = MOVEMODE_BIKE; - g_Vars.currentplayer->bondvehiclemode = 0; - g_Vars.currentplayer->guncloseroffset = 0; - g_Vars.currentplayer->gunextraaimx = 0; - g_Vars.currentplayer->gunextraaimy = 0; - - bbikeUpdateVehicleOffset(); - - g_Vars.currentplayer->bondentert = 0; - g_Vars.currentplayer->bondentert2 = 1; - g_Vars.currentplayer->bondenterpos.x = g_Vars.currentplayer->prop->pos.x; - g_Vars.currentplayer->bondenterpos.y = g_Vars.currentplayer->prop->pos.y; - g_Vars.currentplayer->bondenterpos.z = g_Vars.currentplayer->prop->pos.z; - - mtx3ToMtx4(hoverbike->base.realrot, &matrix); - mtx4SetTranslation(&hoverbike->base.prop->pos, &matrix); - mtx4TransformVec(&matrix, &g_Vars.currentplayer->bondvehicleoffset, &g_Vars.currentplayer->bondenteraim); - mtx00016b58(&g_Vars.currentplayer->bondentermtx, - 0, 0, 0, - -g_Vars.currentplayer->bond2.unk1c.x, -g_Vars.currentplayer->bond2.unk1c.y, -g_Vars.currentplayer->bond2.unk1c.z, - g_Vars.currentplayer->bond2.unk28.x, g_Vars.currentplayer->bond2.unk28.y, g_Vars.currentplayer->bond2.unk28.z); - - g_Vars.currentplayer->speedtheta = 0; - g_Vars.currentplayer->speedthetacontrol = 0; - g_Vars.currentplayer->speedforwards = 0; - g_Vars.currentplayer->speedsideways = 0; - - if (hoverbike->base.hidden & OBJHFLAG_PROJECTILE) { - struct projectile *projectile = hoverbike->base.projectile; - hoverbike->speed[0] = projectile->speed.x; - hoverbike->speed[1] = projectile->speed.z; - hoverbike->w = projectile->unk0dc; - } - - objFreeEmbedmentOrProjectile(g_Vars.currentplayer->hoverbike); - - hoverbike->base.hidden |= OBJHFLAG_MOUNTED; -} - -void bbikeExit(void) -{ - struct defaultobj *obj = g_Vars.currentplayer->hoverbike->obj; - struct hoverbikeobj *bikeobj = (struct hoverbikeobj *)g_Vars.currentplayer->hoverbike->obj; - struct coord speed; - f32 rotation; - - obj->hidden &= ~OBJHFLAG_MOUNTED; - - speed.x = bikeobj->speed[0]; - speed.y = 0; - speed.z = bikeobj->speed[1]; - rotation = bikeobj->w; - - objApplyMomentum(obj, &speed, rotation, false, false); - func0f0926bc(g_Vars.currentplayer->hoverbike, 1, 0xffff); - func0f0926bc(g_Vars.currentplayer->prop, 1, 0xffff); - propsnd0f0939f8(NULL, g_Vars.currentplayer->hoverbike, SFX_BIKE_PULSE, -1, - -1, 0, 0, 0, 0, -1, 0, -1, -1, -1, -1); - - obj->flags |= OBJFLAG_HOVERBIKE_MOVINGWHILEEMPTY; -} - -void bbikeUpdateVehicleOffset(void) -{ - struct defaultobj *hoverbike = g_Vars.currentplayer->hoverbike->obj; - - g_Vars.currentplayer->bondvehicleoffset.x = 0.0f / hoverbike->model->scale; - g_Vars.currentplayer->bondvehicleoffset.y = 80.0f / hoverbike->model->scale; - g_Vars.currentplayer->bondvehicleoffset.z = -50.0f / hoverbike->model->scale; -} - -void bbikeTryDismountAngle(f32 relativeangle, f32 distance) -{ - u32 stack; - struct hoverbikeobj *bike; - f32 angle; - struct coord pos; - s16 rooms[8]; - s32 result; - f32 ymax; - f32 ymin; - f32 radius; - - if (g_Vars.currentplayer->walkinitmove == 0) { - bike = (struct hoverbikeobj *)g_Vars.currentplayer->hoverbike->obj; - angle = hoverpropGetTurnAngle(&bike->base); - - playerGetBbox(g_Vars.currentplayer->prop, &radius, &ymax, &ymin); - - distance += radius + 10; - - angle += relativeangle; - - if (angle >= M_BADTAU) { - angle -= M_BADTAU; - } - - pos.x = g_Vars.currentplayer->hoverbike->pos.x + sinf(angle) * distance; - pos.y = g_Vars.currentplayer->hoverbike->pos.y; - pos.z = g_Vars.currentplayer->hoverbike->pos.z + cosf(angle) * distance; - - propSetPerimEnabled(g_Vars.currentplayer->hoverbike, false); - propSetPerimEnabled(g_Vars.currentplayer->prop, false); - - func0f065e74(&g_Vars.currentplayer->prop->pos, g_Vars.currentplayer->prop->rooms, &pos, rooms); - bmoveFindEnteredRoomsByPos(g_Vars.currentplayer, &pos, rooms); - - result = cdTestCylMove02(&g_Vars.currentplayer->prop->pos, g_Vars.currentplayer->prop->rooms, - &pos, rooms, CDTYPE_ALL, true, - ymax - g_Vars.currentplayer->prop->pos.y, - ymin - g_Vars.currentplayer->prop->pos.y); - - propSetPerimEnabled(g_Vars.currentplayer->hoverbike, true); - - if (result == CDRESULT_NOCOLLISION) { - result = cdTestVolume(&pos, radius, rooms, CDTYPE_ALL, CHECKVERTICAL_YES, - ymax - g_Vars.currentplayer->prop->pos.y, - ymin - g_Vars.currentplayer->prop->pos.y); - } - - if (result == CDRESULT_NOCOLLISION) { - g_Vars.currentplayer->walkinitmove = true; - - g_Vars.currentplayer->walkinitpos.x = pos.x; - g_Vars.currentplayer->walkinitpos.y = pos.y; - g_Vars.currentplayer->walkinitpos.z = pos.z; - - g_Vars.currentplayer->moveinitspeed.x = bike->speed[0]; - g_Vars.currentplayer->moveinitspeed.y = 0; - g_Vars.currentplayer->moveinitspeed.z = bike->speed[1]; - } - - propSetPerimEnabled(g_Vars.currentplayer->prop, true); - } -} - -void bbikeHandleActivate(void) -{ - if (g_Vars.currentplayer->bondvehiclemode == VEHICLEMODE_RUNNING - && g_Vars.lvframe60 - g_Vars.currentplayer->activatetimelast < TICKS(25)) { - struct hoverbikeobj *bike = (struct hoverbikeobj *)g_Vars.currentplayer->hoverbike->obj; - struct modelrodata_bbox *bbox = objFindBboxRodata(&bike->base); - - f32 sidedist = bbox->xmax * bike->base.model->scale; - f32 frontdist = bbox->zmax * bike->base.model->scale; - f32 diagdist = sqrtf(sidedist * sidedist + frontdist * frontdist); - - g_Vars.currentplayer->walkinitmove = false; - - bbikeTryDismountAngle(1.5705462694168f, sidedist); // 90 - left - bbikeTryDismountAngle(4.7116389274597f, sidedist); // 270 - right - bbikeTryDismountAngle(0.7852731347084f, diagdist); // 45 - front left - bbikeTryDismountAngle(5.4969120025635f, diagdist); // 315 - front right - bbikeTryDismountAngle(2.3558194637299f, diagdist); // 135 - back left - bbikeTryDismountAngle(3.9263656139374f, diagdist); // 225 - back right - bbikeTryDismountAngle(0, frontdist); // 0 - front - bbikeTryDismountAngle(3.1410925388336f, frontdist); // 180 - back - - if (g_Vars.currentplayer->walkinitmove) { - bmoveSetMode(MOVEMODE_WALK); - } - - g_Vars.currentplayer->bondactivateorreload = 0; - } -} - -void bbikeApplyMoveData(struct movedata *data) -{ - struct hoverbikeobj *bike = (struct hoverbikeobj *)g_Vars.currentplayer->hoverbike->obj; - s8 contnum = optionsGetContpadNum1(g_Vars.currentplayerstats->mpindex); - f32 value1; - f32 tmp; - - if ((optionsGetControlMode(g_Vars.currentplayerstats->mpindex) == CONTROLMODE_12 - || optionsGetControlMode(g_Vars.currentplayerstats->mpindex) == CONTROLMODE_14 - || optionsGetControlMode(g_Vars.currentplayerstats->mpindex) == CONTROLMODE_13 - || optionsGetControlMode(g_Vars.currentplayerstats->mpindex) == CONTROLMODE_11) - && !lvIsPaused()) { - data->digitalstepleft = joyCountButtonsOnSpecificSamples(0, contnum, 0 | L_CBUTTONS); - data->digitalstepright = joyCountButtonsOnSpecificSamples(0, contnum, 0 | R_CBUTTONS); - } - - // Forward/back - if (data->digitalstepforward) { - value1 = 1.0f - g_Vars.currentplayer->speedforwards; - - if (value1 > 0.1f * g_Vars.lvupdate60freal) { - value1 = 0.1f * g_Vars.lvupdate60freal; - } - - g_Vars.currentplayer->speedforwards += value1; - } else if (data->digitalstepback) { - value1 = -1.0f - g_Vars.currentplayer->speedforwards; - - if (value1 < -0.1f * g_Vars.lvupdate60freal) { - value1 = -0.1f * g_Vars.lvupdate60freal; - } - - g_Vars.currentplayer->speedforwards += value1; - } else if (data->canlookahead) { - g_Vars.currentplayer->speedforwards = data->analogwalk / 70.0f; - - if (g_Vars.currentplayer->speedforwards > 1.0f) { - g_Vars.currentplayer->speedforwards = 1.0f; - } else if (g_Vars.currentplayer->speedforwards < -1.0f) { - g_Vars.currentplayer->speedforwards = -1.0f; - } - } else { - g_Vars.currentplayer->speedforwards = 0; - } - - // Sideways - if (data->digitalstepleft) { - f32 value2 = -1.0f - g_Vars.currentplayer->speedsideways; - f32 tmp = data->digitalstepleft * PALUPF(-0.1f); - - if (value2 < tmp) { - value2 = tmp; - } - - g_Vars.currentplayer->speedsideways += value2; - } else if (data->digitalstepright) { - f32 value2 = 1.0f - g_Vars.currentplayer->speedsideways; - f32 tmp = data->digitalstepright * PALUPF(0.1f); - - if (value2 > tmp) { - value2 = tmp; - } - - g_Vars.currentplayer->speedsideways += value2; - } else if (data->unk14) { - g_Vars.currentplayer->speedsideways = data->analogstrafe / 70.0f; - - if (g_Vars.currentplayer->speedsideways > 1.0f) { - g_Vars.currentplayer->speedsideways = 1.0f; - } - - if (g_Vars.currentplayer->speedsideways < -1.0f) { - g_Vars.currentplayer->speedsideways = -1.0f; - } - } else { - g_Vars.currentplayer->speedsideways = 0; - } - - { - f32 sp3c; - struct coord sp30; - f32 sp28[2]; - - sp3c = -bike->exreal; - - if (bike->hov.unk14 < M_PI) { - sp3c += -bike->hov.unk14 * 0.8f; - } else { - sp3c += (M_BADTAU - bike->hov.unk14) * 0.8f; - } - - if (sp3c < 0) { - sp3c += M_BADTAU; - } else if (sp3c >= M_BADTAU) { - sp3c -= M_BADTAU; - } - - sp30.f[0] = 0; - sp30.f[1] = -sinf(sp3c); - sp30.f[2] = cosf(sp3c); - - cam0f0b4d04(&sp30, sp28); - - g_Vars.currentplayer->gunextraaimy = -((sp28[1] - camGetScreenTop()) * 2.0f / camGetScreenHeight() - 1.0f) * 0.75f; - } -} - -void bbike0f0d2b40(struct defaultobj *bike, struct coord *arg1, f32 arg2, struct defaultobj *obstacle) -{ - struct coord sp9c; - struct coord sp90; - struct coord sp84 = {0, 0, 0}; - struct coord sp78; - struct coord sp6c; - struct coord sp60; - struct coord sp54; - - cdGetEdge(&sp78, &sp6c, 333, "bondbike.c"); - - sp60.x = bike->prop->pos.x; - sp60.y = bike->prop->pos.y; - sp60.z = bike->prop->pos.z; - - sp54.x = obstacle->prop->pos.x - bike->prop->pos.x; - sp54.y = obstacle->prop->pos.y - bike->prop->pos.y; - sp54.z = obstacle->prop->pos.z - bike->prop->pos.z; - - func0f02e3dc(&sp78, &sp6c, &sp60, &sp54, &sp9c); - - sp90.x = arg1->f[0]; - sp90.y = 0; - sp90.z = arg1->f[2]; - - if (sp90.f[0] || sp90.f[2]) { - guNormalize(&sp90.x, &sp90.y, &sp90.z); - } else { - sp90.z = 1; - } - - if (arg1->x) { - sp84.x += arg1->x / g_Vars.lvupdate60freal; - } - - if (arg1->z) { - sp84.z += arg1->z / g_Vars.lvupdate60freal; - } - - func0f082e84(obstacle, &sp9c, &sp90, &sp84, false); - - if (arg2) { - f32 xdiff = sp9c.x - bike->prop->pos.x; - f32 zdiff = sp9c.z - bike->prop->pos.z; - f32 rotation = 0; - struct coord speed = {0, 0, 0}; - - f32 tmp = 1 / sqrtf(xdiff * xdiff + zdiff * zdiff); - - xdiff *= tmp; - zdiff *= tmp; - - arg2 = arg2 / g_Vars.lvupdate60freal; - - speed.x += -zdiff * arg2 * 40; - speed.z += xdiff * arg2 * 40; - - rotation += arg2 * 0.1f; - - objApplyMomentum(obstacle, &speed, rotation, true, true); - } -} - -s32 bbikeCalculateNewPosition(struct coord *vel, f32 angledelta) -{ - s32 result = CDRESULT_NOCOLLISION; - struct coord dstpos; - s16 dstrooms[8]; - struct hov hov; - bool hasvel = false; - struct hoverbikeobj *bike = (struct hoverbikeobj *) g_Vars.currentplayer->hoverbike->obj; - s16 spa8[20]; - f32 xdiff; - f32 zdiff; - f32 ymax; - f32 ymin; - f32 radius; - f32 halfradius; - - dstpos.x = g_Vars.currentplayer->hoverbike->pos.x; - dstpos.y = g_Vars.currentplayer->hoverbike->pos.y; - dstpos.z = g_Vars.currentplayer->hoverbike->pos.z; - - if (vel->x || vel->y || vel->z) { - propSetPerimEnabled(g_Vars.currentplayer->prop, false); - propSetPerimEnabled(g_Vars.currentplayer->hoverbike, false); - - dstpos.x += vel->x; - dstpos.z += vel->z; - - objGetBbox(g_Vars.currentplayer->hoverbike, &radius, &ymax, &ymin); - func0f065dfc(&g_Vars.currentplayer->hoverbike->pos, - g_Vars.currentplayer->hoverbike->rooms, - &dstpos, dstrooms, spa8, 20); - - setup0f09233c(&bike->base, &dstpos, bike->base.realrot, dstrooms); - - hasvel = true; - - hov = bike->hov; - - hovUpdateGround(&bike->base, &hov, &dstpos, dstrooms, bike->base.realrot); - - dstpos.y += hov.ground - bike->hov.ground; - - halfradius = radius * 0.5f; - xdiff = dstpos.x - g_Vars.currentplayer->hoverbike->pos.x; - zdiff = dstpos.z - g_Vars.currentplayer->hoverbike->pos.z; - - if (xdiff > halfradius || zdiff > halfradius || xdiff < -halfradius || zdiff < -halfradius) { - result = cdExamCylMove06(&g_Vars.currentplayer->hoverbike->pos, - g_Vars.currentplayer->hoverbike->rooms, - &dstpos, dstrooms, radius, CDTYPE_ALL, 1, - ymax - g_Vars.currentplayer->hoverbike->pos.y, - ymin - g_Vars.currentplayer->hoverbike->pos.y); - - if (result == CDRESULT_NOCOLLISION) { - result = cdExamCylMove02(&g_Vars.currentplayer->hoverbike->pos, - &dstpos, radius, dstrooms, CDTYPE_ALL, true, - ymax - g_Vars.currentplayer->hoverbike->pos.y, - ymin - g_Vars.currentplayer->hoverbike->pos.y); - } - } else { - result = cdExamCylMove02(&g_Vars.currentplayer->hoverbike->pos, - &dstpos, radius, spa8, CDTYPE_ALL, true, - ymax - g_Vars.currentplayer->hoverbike->pos.y, - ymin - g_Vars.currentplayer->hoverbike->pos.y); - } - - propSetPerimEnabled(g_Vars.currentplayer->prop, true); - propSetPerimEnabled(g_Vars.currentplayer->hoverbike, true); - } - - if (angledelta) { - u32 stack[2]; - f32 newangle = hoverpropGetTurnAngle(&bike->base) - angledelta; - Mtxf sp44; - - if (newangle >= M_BADTAU) { - newangle -= M_BADTAU; - } else if (newangle < 0.0f) { - newangle += M_BADTAU; - } - - hoverpropSetTurnAngle(&bike->base, newangle); - - mtx4LoadYRotation(newangle, &sp44); - mtx00015f04(bike->base.model->scale, &sp44); - mtx4ToMtx3(&sp44, bike->base.realrot); - } - - if (result == CDRESULT_NOCOLLISION && hasvel) { - g_Vars.currentplayer->hoverbike->pos.x = dstpos.x; - g_Vars.currentplayer->hoverbike->pos.z = dstpos.z; - - propDeregisterRooms(g_Vars.currentplayer->hoverbike); - roomsCopy(dstrooms, g_Vars.currentplayer->hoverbike->rooms); - - bike->hov = hov; - } - - return result; -} - -s32 bbikeCalculateNewPositionWithPush(struct coord *arg0, f32 arg1) -{ - s32 result = bbikeCalculateNewPosition(arg0, arg1); - - if (result != CDRESULT_NOCOLLISION) { - struct prop *obstacle = cdGetObstacleProp(); - - if (obstacle && g_Vars.lvupdate240 > 0) { - if (obstacle->type == PROPTYPE_CHR) { - // empty - } else if (obstacle->type == PROPTYPE_PLAYER) { - // empty - } 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)) { - bool pass = true; - struct defaultobj *bike = g_Vars.currentplayer->hoverbike->obj; - - if ((obj->hidden & OBJHFLAG_PROJECTILE) - && (obj->projectile->flags & PROJECTILEFLAG_00001000)) { - pass = false; - } - - if (pass) { - bbike0f0d2b40(bike, arg0, arg1, obj); - - if ((obj->hidden & OBJHFLAG_PROJECTILE) - && (obj->projectile->flags & PROJECTILEFLAG_SLIDING)) { - s32 somevalue; - bool embedded = false; - somevalue = projectileTick(obj, &embedded); - - if (obj->hidden & OBJHFLAG_PROJECTILE) { - obj->projectile->flags |= PROJECTILEFLAG_00001000; - - if (somevalue) { - obj->projectile->flags |= PROJECTILEFLAG_00002000; - } else { - obj->projectile->flags &= ~PROJECTILEFLAG_00002000; - } - } - - if (somevalue) { - result = bbikeCalculateNewPosition(arg0, arg1); - } - } - } - } - } - } - } - - return result; -} - -void bbikeUpdateVertical(struct coord *pos) -{ - struct defaultobj *bike = g_Vars.currentplayer->hoverbike->obj; - f32 angle; - s16 newrooms[8]; - bool newinlift; - struct prop *lift = NULL; - f32 ground; - - angle = hoverpropGetTurnAngle(bike); - - func0f065e74(&bike->prop->pos, bike->prop->rooms, pos, newrooms); - -#if VERSION < VERSION_NTSC_1_0 - { - s32 i; - - for (i = 0; newrooms[i] != -1; i++) { - if (g_Vars.currentplayer->floorroom == newrooms[i]) { - newrooms[0] = g_Vars.currentplayer->floorroom; - newrooms[1] = -1; - break; - } - } - } -#endif - - bmoveFindEnteredRoomsByPos(g_Vars.currentplayer, pos, newrooms); - propDeregisterRooms(g_Vars.currentplayer->prop); - roomsCopy(newrooms, g_Vars.currentplayer->prop->rooms); - - g_Vars.currentplayer->vv_theta = (M_BADTAU - angle) * 360.0f / M_BADTAU; - - g_Vars.currentplayer->prop->pos.x = pos->x; - g_Vars.currentplayer->prop->pos.y = pos->y; - g_Vars.currentplayer->prop->pos.z = pos->z; - - ground = cdFindGroundInfoAtCyl(&g_Vars.currentplayer->prop->pos, - g_Vars.currentplayer->bond2.radius, - g_Vars.currentplayer->prop->rooms, - &g_Vars.currentplayer->floorcol, - &g_Vars.currentplayer->floortype, - &g_Vars.currentplayer->floorflags, - &g_Vars.currentplayer->floorroom, - &newinlift, &lift); - - if (ground < -30000) { - ground = -30000; - } - - if (g_Vars.currentplayer->inlift && newinlift) { - f32 diff = ground - g_Vars.currentplayer->vv_ground; - - // If getting on the bike - if (g_Vars.currentplayer->bondvehiclemode == VEHICLEMODE_OFF) { - g_Vars.currentplayer->bondenterpos.y += diff; - } - } else { - lift = NULL; - } - - g_Vars.currentplayer->inlift = newinlift; - - if (newinlift) { - g_Vars.currentplayer->liftground = ground; - } - - g_Vars.currentplayer->lift = lift; - g_Vars.currentplayer->vv_ground = ground; - g_Vars.currentplayer->vv_height = g_Vars.currentplayer->headpos.y / g_Vars.currentplayer->standheight * g_Vars.currentplayer->vv_eyeheight; - g_Vars.currentplayer->vv_manground = g_Vars.currentplayer->prop->pos.y - g_Vars.currentplayer->vv_height; - - if (g_Vars.currentplayer->floorflags & GEOFLAG_DIE) { - playerDie(true); - } - - bmoveUpdateVerta(); -} - -s32 bbike0f0d363c(f32 arg0) -{ - struct coord coord = {0, 0, 0}; - - return bbikeCalculateNewPositionWithPush(&coord, arg0); -} - -s32 bbike0f0d3680(struct coord *arg0, struct coord *arg1, struct coord *arg2) -{ - s32 result = bbikeCalculateNewPositionWithPush(arg0, 0); - - if (!result) { -#if VERSION >= VERSION_NTSC_1_0 - cdGetEdge(arg1, arg2, 659, "bondbike.c"); -#else - cdGetEdge(arg1, arg2, 656, "bondbike.c"); -#endif - } - - return result; -} - -s32 bbike0f0d36d4(struct coord *arg0, struct coord *arg1, struct coord *arg2, struct coord *arg3, struct coord *arg4) -{ - if (cd00024ea4()) { - struct coord sp24; - f32 somefloat = cd00024e98(); - s32 someint; - - sp24.x = arg0->x * somefloat * 0.25f; - sp24.y = arg0->y * somefloat * 0.25f; - sp24.z = arg0->z * somefloat * 0.25f; - - someint = bbikeCalculateNewPositionWithPush(&sp24, 0); - - if (someint == 1) { - return 1; - } - - if (someint == 0) { -#if VERSION >= VERSION_NTSC_1_0 - cdGetEdge(arg3, arg4, 685, "bondbike.c"); -#else - cdGetEdge(arg3, arg4, 682, "bondbike.c"); -#endif - - if (arg3->f[0] != arg1->f[0] - || arg3->f[1] != arg1->f[1] - || arg3->f[2] != arg1->f[2] - || arg4->f[0] != arg2->f[0] - || arg4->f[1] != arg2->f[1] - || arg4->f[2] != arg2->f[2]) { - return 0; - } - } - } - - return -1; -} - -s32 bbike0f0d3840(struct coord *arg0, struct coord *arg1, struct coord *arg2) -{ - s32 result; - - if (arg1->f[0] != arg2->f[0] || arg1->f[2] != arg2->f[2]) { - struct coord sp30; - struct coord sp24; - f32 tmp; - - sp30.x = arg2->x - arg1->x; - sp30.z = arg2->z - arg1->z; - - tmp = sqrtf(sp30.f[0] * sp30.f[0] + sp30.f[2] * sp30.f[2]); - - sp30.x *= 1.0f / tmp; - sp30.z *= 1.0f / tmp; - - tmp = arg0->f[0] * sp30.f[0] + arg0->f[2] * sp30.f[2]; - - sp24.x = sp30.x * tmp; - sp24.y = 0; - sp24.z = sp30.z * tmp; - - result = bbikeCalculateNewPositionWithPush(&sp24, 0); - } else { - result = -1; - } - - return result; -} - -s32 bbike0f0d3940(struct coord *arg0, struct coord *arg1, struct coord *arg2) -{ - struct coord sp34; - struct coord sp28; - f32 ymax; - f32 ymin; - f32 tmp; - f32 radius; - - objGetBbox(g_Vars.currentplayer->hoverbike, &radius, &ymax, &ymin); - - sp34.x = arg1->x - (g_Vars.currentplayer->hoverbike->pos.x + arg0->f[0]); - sp34.z = arg1->z - (g_Vars.currentplayer->hoverbike->pos.z + arg0->f[2]); - - if (sp34.f[0] * sp34.f[0] + sp34.f[2] * sp34.f[2] <= radius * radius) { - if (arg1->f[0] != g_Vars.currentplayer->hoverbike->pos.f[0] || arg1->f[2] != g_Vars.currentplayer->hoverbike->pos.f[2]) { - sp34.x = -(arg1->z - g_Vars.currentplayer->hoverbike->pos.z); - sp34.y = 0; - sp34.z = arg1->x - g_Vars.currentplayer->hoverbike->pos.x; - - tmp = sqrtf(sp34.f[0] * sp34.f[0] + sp34.f[2] * sp34.f[2]); - - sp34.x = sp34.f[0] * (1.0f / tmp); - sp34.z = sp34.f[2] * (1.0f / tmp); - - tmp = arg0->f[0] * sp34.f[0] + arg0->f[2] * sp34.f[2]; - - sp34.x = sp34.x * tmp; - sp34.z = sp34.z * tmp; - - sp28.x = sp34.x; - sp28.y = 0; - sp28.z = sp34.z; - - if (bbikeCalculateNewPositionWithPush(&sp28, 0) == CDRESULT_NOCOLLISION) { - return true; - } - } - } else { - sp34.x = arg2->x - (g_Vars.currentplayer->hoverbike->pos.x + arg0->f[0]); - sp34.z = arg2->z - (g_Vars.currentplayer->hoverbike->pos.z + arg0->f[2]); - - if (sp34.f[0] * sp34.f[0] + sp34.f[2] * sp34.f[2] <= radius * radius) { - if (arg2->f[0] != g_Vars.currentplayer->hoverbike->pos.f[0] || arg2->f[2] != g_Vars.currentplayer->hoverbike->pos.f[2]) { - sp34.x = -(arg2->z - g_Vars.currentplayer->hoverbike->pos.z); - sp34.y = 0; - sp34.z = arg2->x - g_Vars.currentplayer->hoverbike->pos.x; - - tmp = sqrtf(sp34.f[0] * sp34.f[0] + sp34.f[2] * sp34.f[2]); - - sp34.x = sp34.f[0] * (1.0f / tmp); - sp34.z = sp34.f[2] * (1.0f / tmp); - - tmp = arg0->f[0] * sp34.f[0] + arg0->f[2] * sp34.f[2]; - - sp34.x = sp34.x * tmp; - sp34.z = sp34.z * tmp; - - sp28.x = sp34.x; - sp28.y = 0; - sp28.z = sp34.z; - - if (bbikeCalculateNewPositionWithPush(&sp28, 0) == CDRESULT_NOCOLLISION) { - return true; - } - } - } - } - - return false; -} - -void bbike0f0d3c60(struct coord *arg0) -{ - struct coord sp64; - struct coord sp58; - struct coord sp4c; - struct coord sp40; - s32 value; - struct coord sp30; - struct coord sp24; - - if (bbike0f0d3680(arg0, &sp64, &sp58) == 0) { - value = bbike0f0d36d4(arg0, &sp64, &sp58, &sp4c, &sp40); - - if (value > 0 || value < 0) { - if (bbike0f0d3840(arg0, &sp64, &sp58) <= 0 - && bbike0f0d3940(arg0, &sp64, &sp58) <= 0) { - // empty - } - } else if (value == 0) { - bbike0f0d36d4(arg0, &sp4c, &sp40, &sp30, &sp24); - - if (bbike0f0d3840(arg0, &sp4c, &sp40) <= 0 - && bbike0f0d3840(arg0, &sp64, &sp58) <= 0 - && bbike0f0d3940(arg0, &sp4c, &sp40) <= 0 - && bbike0f0d3940(arg0, &sp64, &sp58) <= 0) { - if (&arg0); - } - } - } -} - -void bbikeTick(void) -{ - struct defaultobj *obj = g_Vars.currentplayer->hoverbike->obj; - struct hoverbikeobj *bike = (struct hoverbikeobj *) g_Vars.currentplayer->hoverbike->obj; - struct coord sp20c; - struct prop *prop; - s32 i; - f32 sp200; - u32 stack; - f32 sp1f8; - f32 sp1f4; - struct coord sp1e8; - Mtxf sp1a8; -#if VERSION >= VERSION_NTSC_1_0 - s32 j; -#endif - Mtxf sp164; - Mtxf sp124; - Mtxf spe4; - f32 spd4[4]; - f32 spc4[4]; - f32 spb4[4]; - f32 spa4[4]; - f32 sp94[4]; - f32 sp84[4]; - struct coord pos; - f32 breathing; - f32 sp70; - f32 sqdist; - - static f32 var80070f04 = 0; - - if (g_Vars.lvupdate240 > 0) { - g_Vars.currentplayer->bondprevpos.x = g_Vars.currentplayer->prop->pos.x; - g_Vars.currentplayer->bondprevpos.y = g_Vars.currentplayer->prop->pos.y; - g_Vars.currentplayer->bondprevpos.z = g_Vars.currentplayer->prop->pos.z; - - g_Vars.currentplayer->bondbreathing -= (0.75f * g_Vars.lvupdate60freal) / 2700.0f; - - if (g_Vars.currentplayer->bondbreathing < 0.0f) { - g_Vars.currentplayer->bondbreathing = 0.0f; - } - - if (g_Vars.currentplayer->bondvehiclemode == VEHICLEMODE_OFF) { - hoverbikeUpdateMovement(bike, - g_Vars.currentplayer->speedforwards, - g_Vars.currentplayer->speedsideways, - g_Vars.currentplayer->speedtheta); - } else { - if (g_Vars.currentplayer->bondvehiclemode == VEHICLEMODE_ENGINESTART) { - g_Vars.currentplayer->bondvehiclemode = VEHICLEMODE_RUNNING; - } - - hoverbikeUpdateMovement(bike, - g_Vars.currentplayer->speedforwards, - g_Vars.currentplayer->speedsideways, - g_Vars.currentplayer->speedtheta); - } - - if (g_Vars.currentplayer->bondvehiclemode == VEHICLEMODE_RUNNING) { - sqdist = g_Vars.currentplayer->speedforwards * g_Vars.currentplayer->speedforwards - + g_Vars.currentplayer->speedsideways * g_Vars.currentplayer->speedsideways; - - if (sqdist > 1.0f) { - sqdist = 1.0f; - } - - for (i = 0; i < g_Vars.lvupdate240; i++) { - var80070f04 += (sqdist - var80070f04) * (PAL ? 0.003f : 0.0025f); - } - - sp200 = 1.0f - (var80070f04 + var80070f04); - - if (var80070f04 + var80070f04 > 1.0f) { - sp200 = 0.0f; - } - - sp200 *= 300.0f; - - func0f093630(g_Vars.currentplayer->hoverbike, var80070f04, -1); - func0f093790(g_Vars.currentplayer->hoverbike, var80070f04 * 300.0f); - func0f093790(g_Vars.currentplayer->prop, sp200); - } - - if (1); - - bbike0f0d363c(bike->w * g_Vars.lvupdate60freal); - - sp20c.x = bike->speed[0] * g_Vars.lvupdate60freal; - sp20c.y = 0.0f; - sp20c.z = bike->speed[1] * g_Vars.lvupdate60freal; - - bike->prevpos[0] = bike->base.prop->pos.x; - bike->prevpos[1] = bike->base.prop->pos.z; - - bbike0f0d3c60(&sp20c); - - sp1f8 = (bike->base.prop->pos.x - bike->prevpos[0]) / g_Vars.lvupdate60freal; - sp1f4 = (bike->base.prop->pos.z - bike->prevpos[1]) / g_Vars.lvupdate60freal; - - if (sp1f8 != 0.0f || sp1f4 != 0.0f) { - f32 tmp = sp1f8 * sp1f8 + sp1f4 * sp1f4; - - if (tmp > 0.0f) { - tmp = sqrtf((bike->speed[0] * bike->speed[0] + bike->speed[1] * bike->speed[1]) / tmp); - - if (tmp < 1.0f) { - sp1f8 *= tmp; - sp1f4 *= tmp; - } - } - } - - bike->speed[0] = sp1f8; - bike->speed[1] = sp1f4; - - hovTick(obj, &bike->hov); - func0f069c70(obj, true, true); - mtx3ToMtx4(obj->realrot, &sp1a8); - mtx4SetTranslation(&obj->prop->pos, &sp1a8); - mtx4TransformVec(&sp1a8, &g_Vars.currentplayer->bondvehicleoffset, &sp1e8); - - bbikeUpdateVertical(&sp1e8); - - prop = g_Vars.currentplayer->prop; - -#if VERSION >= VERSION_NTSC_1_0 - for (j = 0; prop->rooms[j] != -1; j++) { - if (prop->rooms[j] == g_Vars.currentplayer->floorroom) { - propDeregisterRooms(prop); - g_Vars.currentplayer->prop->rooms[0] = g_Vars.currentplayer->floorroom; - g_Vars.currentplayer->prop->rooms[1] = -1; - break; - } - } -#endif - } - - bheadAdjustAnimation(0); - bheadUpdate(0, 0); - mtx4LoadXRotation((360.0f - g_Vars.currentplayer->vv_verta360) * 0.017450513318181f, &sp164); - - mtx00016d58(&sp124, 0.0f, 0.0f, 0.0f, - -g_Vars.currentplayer->headlook.x, -g_Vars.currentplayer->headlook.y, -g_Vars.currentplayer->headlook.z, - g_Vars.currentplayer->headup.x, g_Vars.currentplayer->headup.y, g_Vars.currentplayer->headup.z); - - mtx4MultMtx4InPlace(&sp124, &sp164); - mtx3ToMtx4(obj->realrot, &sp124); - mtx00015f04(1.0f / obj->model->scale, &sp124); - mtx4LoadYRotation(hoverpropGetTurnAngle(obj), &spe4); - quaternion0f097044(&spe4, spd4); - quaternion0f097044(&sp124, spc4); - quaternion0f0976c0(spc4, spd4); - quaternionSlerp(spd4, spc4, 0.8f, spb4); - quaternionToMtx(spb4, &sp124); - mtx4MultMtx4InPlace(&sp124, &sp164); - - if (g_Vars.currentplayer->bondvehiclemode == VEHICLEMODE_OFF) { - g_Vars.currentplayer->bondentert += g_Vars.lvupdate60freal / 60.0f; - - if (g_Vars.currentplayer->bondentert >= 1.0f) { - g_Vars.currentplayer->bondentert = 1.0f; - } - - g_Vars.currentplayer->bondentert2 = (cosf(g_Vars.currentplayer->bondentert * M_BADTAU * 0.5f) + 1.0f) * 0.5f; - - if (g_Vars.currentplayer->bondentert >= 1.0f) { - g_Vars.currentplayer->bondvehiclemode = VEHICLEMODE_ENGINESTART; - - func0f0926bc(g_Vars.currentplayer->hoverbike, 1, 0xffff); - - propsnd0f0939f8(NULL, g_Vars.currentplayer->prop, SFX_BIKE_TAKEOFF, -1, - -1, 0, 0, 0, NULL, -1, NULL, -1, -1, -1, -1); - - propsnd0f0939f8(NULL, g_Vars.currentplayer->prop, SFX_BIKE_PULSE, -1, - -1, 0, 0, 0, NULL, -1, NULL, -1, -1, -1, -1); - - propsnd0f0939f8(NULL, g_Vars.currentplayer->hoverbike, SFX_BIKE_ENGINE, -1, - -1, 0, 0, 0, NULL, -1, NULL, -1, -1, -1, -1); - } - - quaternion0f097044(&g_Vars.currentplayer->bondentermtx, spa4); - quaternion0f097044(&sp164, sp94); - quaternion0f0976c0(sp94, spa4); - quaternionSlerp(spa4, sp94, 1.0f - g_Vars.currentplayer->bondentert2, sp84); - quaternionToMtx(sp84, &sp164); - } - - g_Vars.currentplayer->bond2.unk1c.x = sp164.m[2][0]; - g_Vars.currentplayer->bond2.unk1c.y = sp164.m[2][1]; - g_Vars.currentplayer->bond2.unk1c.z = sp164.m[2][2]; - g_Vars.currentplayer->bond2.unk28.x = sp164.m[1][0]; - g_Vars.currentplayer->bond2.unk28.y = sp164.m[1][1]; - g_Vars.currentplayer->bond2.unk28.z = sp164.m[1][2]; - - if (g_Vars.currentplayer->bondvehiclemode == VEHICLEMODE_OFF) { - pos.x = (g_Vars.currentplayer->bondenterpos.x - g_Vars.currentplayer->bondenteraim.x) * g_Vars.currentplayer->bondentert2 + g_Vars.currentplayer->prop->pos.x; - pos.y = (g_Vars.currentplayer->bondenterpos.y - g_Vars.currentplayer->prop->pos.y) * g_Vars.currentplayer->bondentert2 + g_Vars.currentplayer->prop->pos.y; - pos.z = (g_Vars.currentplayer->bondenterpos.z - g_Vars.currentplayer->bondenteraim.z) * g_Vars.currentplayer->bondentert2 + g_Vars.currentplayer->prop->pos.z; - - bmove0f0cc19c(&pos); - } else { - bmove0f0cc19c(&g_Vars.currentplayer->prop->pos); - } - - sp70 = g_Vars.currentplayer->speedverta / 0.7f; - breathing = bheadGetBreathingValue(); - - if (sp70 > 1.0f) { - sp70 = 1.0f; - } else if (sp70 < -1.0f) { - sp70 = -1.0f; - } - - bgun0f09d8dc(breathing, 0, sp70, 0.0f, g_Vars.currentplayer->speedsideways); - bgunSetAdjustPos(g_Vars.currentplayer->vv_verta360 * 0.017450513318181f); - playerUpdatePerimInfo(); - bmoveUpdateRooms(g_Vars.currentplayer); - doorsCheckAutomatic(); -} diff --git a/src/game/bondgrab.c b/src/game/bondgrab.c index 3ff76a790..2f0fb4a8b 100644 --- a/src/game/bondgrab.c +++ b/src/game/bondgrab.c @@ -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) { diff --git a/src/game/bondmove.c b/src/game/bondmove.c index 3420d7ce2..c0318f298 100644 --- a/src/game/bondmove.c +++ b/src/game/bondmove.c @@ -1,7 +1,6 @@ #include #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(); diff --git a/src/game/bondwalk.c b/src/game/bondwalk.c index de5db4233..333bd996d 100644 --- a/src/game/bondwalk.c +++ b/src/game/bondwalk.c @@ -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(); diff --git a/src/game/chr.c b/src/game/chr.c index 1ac25ab1c..d2c3c85a9 100644 --- a/src/game/chr.c +++ b/src/game/chr.c @@ -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(); } diff --git a/src/game/explosions.c b/src/game/explosions.c index 9534423e6..9ec2d86c9 100644 --- a/src/game/explosions.c +++ b/src/game/explosions.c @@ -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; diff --git a/src/game/player.c b/src/game/player.c index 133bc2cb4..56baa139e 100644 --- a/src/game/player.c +++ b/src/game/player.c @@ -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) { diff --git a/src/game/propobj.c b/src/game/propobj.c index c69f11006..741145ee5 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -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); } } diff --git a/src/game/propobjstop.c b/src/game/propobjstop.c index 3a3019ddc..95a95da47 100644 --- a/src/game/propobjstop.c +++ b/src/game/propobjstop.c @@ -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: diff --git a/src/game/setup.c b/src/game/setup.c index 2066a59d1..b725d5c63 100644 --- a/src/game/setup.c +++ b/src/game/setup.c @@ -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; diff --git a/src/game/setuputils.c b/src/game/setuputils.c index 7be7c6838..ca7162a56 100644 --- a/src/game/setuputils.c +++ b/src/game/setuputils.c @@ -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: diff --git a/src/include/game/bondbike.h b/src/include/game/bondbike.h deleted file mode 100644 index 18e44628c..000000000 --- a/src/include/game/bondbike.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef IN_GAME_BONDBIKE_H -#define IN_GAME_BONDBIKE_H -#include -#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 diff --git a/src/include/game/propobj.h b/src/include/game/propobj.h index b53064d30..812e315be 100644 --- a/src/include/game/propobj.h +++ b/src/include/game/propobj.h @@ -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); diff --git a/src/include/types.h b/src/include/types.h index a861dd8ce..5c36f310f 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -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;