Fix some float precision diffs

This commit is contained in:
disinvite 2025-12-24 15:29:19 -05:00
parent d125d61cd6
commit e2c93d78a1
6 changed files with 54 additions and 54 deletions

View File

@ -1957,7 +1957,7 @@ void RotateCarFirstOrder(tCollision_info* c, br_scalar dt) {
rad_rate = BrVector3Length(&c->omega);
rad = rad_rate * dt;
if (rad < .0001f) {
if (rad < .0001) {
return;
}
BrVector3InvScale(&axis, &c->omega, rad_rate);
@ -2029,11 +2029,11 @@ void SteeringSelfCentre(tCar_spec* c, br_scalar dt, br_vector3* n) {
if (c->susp_height[1] > c->oldd[2] || c->susp_height[1] > c->oldd[3]) {
ts = -((c->omega.v[2] * n->v[2] + c->omega.v[1] * n->v[1] + c->omega.v[0] * n->v[0]) * (dt / (c->wpos[0].v[2] - c->wpos[2].v[2])));
ts2 = -(c->curvature * dt);
if (fabs(ts) < fabs(ts2) || (ts * ts2 < 0.0)) {
if (fabs(ts) < fabs(ts2) || (ts * ts2 < 0.0f)) {
ts = ts2;
}
c->curvature = c->curvature + ts;
if (c->curvature * ts > 0.0) {
if (c->curvature * ts > 0.0f) {
c->curvature = 0.0;
}
}
@ -2103,7 +2103,7 @@ void AddDrag(tCar_spec* c, br_scalar dt) {
drag_multiplier = -(dt * TIME_CONV_THING);
if (vol != NULL) {
if (c->underwater_ability) {
drag_multiplier = vol->viscosity_multiplier * drag_multiplier * .6f;
drag_multiplier = vol->viscosity_multiplier * drag_multiplier * .6;
} else {
drag_multiplier = vol->viscosity_multiplier * drag_multiplier;
}
@ -3419,7 +3419,7 @@ void SkidNoise(tCar_spec* pC, int pWheel_num, br_scalar pV, int material) {
return;
}
last_skid_vol[i] = pV * 10.0;
last_skid_vol[i] = pV * 10.0f;
if ((pWheel_num & 1) != 0) {
pos.v[0] = pC->bounds[1].max.v[0];
} else {
@ -3448,7 +3448,7 @@ void SkidNoise(tCar_spec* pC, int pWheel_num, br_scalar pV, int material) {
BrVector3Scale(&wvw, &pC->road_normal, ts);
BrVector3Add(&wv, &wv, &wvw);
BrMatrix34ApplyV(&wvw, &wv, &pC->car_master_actor->t.t.mat);
CreatePuffOfSmoke(&world_pos, &wvw, pV / 25.0, 1.0, 4, pC);
CreatePuffOfSmoke(&world_pos, &wvw, pV / 25.0f, 1.0, 4, pC);
}
}
@ -4895,7 +4895,7 @@ void SetPanningFieldOfView(void) {
camera_ptr = gCamera->type_data;
if (gPanning_camera_angle == 0) {
gPanning_camera_angle = BrDegreeToAngle(gCamera_angle) * 0.7f;
gPanning_camera_angle = BrDegreeToAngle(gCamera_angle) * 0.7;
}
camera_ptr->field_of_view = gPanning_camera_angle;
}
@ -5396,7 +5396,7 @@ void NormalPositionExternalCamera(tCar_spec* c, tU32 pTime) {
m1 = &gCamera->t.t.mat;
m2 = &c->car_master_actor->t.t.mat;
swoop = gCountdown && c->pos.v[1] + 0.001f < gCamera_height;
swoop = gCountdown && c->pos.v[1] + 0.001 < gCamera_height;
manual_swing = gOld_yaw__car != gCamera_yaw || swoop;
manual_zoom = (double)gOld_zoom != gCamera_zoom;
BrVector3Copy(&old_camera_pos, &gCamera->t.t.translate.t);
@ -5406,7 +5406,7 @@ void NormalPositionExternalCamera(tCar_spec* c, tU32 pTime) {
gCamera_yaw = 0;
manual_swing = 1;
}
if (fabs(c->speedo_speed) > 0.0006f && gCamera_mode > 0) {
if (fabs(c->speedo_speed) > 0.0006 && gCamera_mode > 0) {
gCamera_mode = -1;
gCamera_sign = BrVector3Dot((br_vector3*)m2->m[2], &c->direction) > 0.0f;
}
@ -6876,10 +6876,10 @@ void MungeCarsMass(tCollision_info* pCar, br_scalar pFactor) {
// FUNCTION: CARM95 0x0048fb97
void ModifyCarsMass(tCollision_info* pCar_1, tCollision_info* pCar_2) {
if (pCar_1->driver > eDriver_non_car && ((tCar_spec*)pCar_1)->collision_mass_multiplier != 1.0f) {
if (pCar_1->driver > eDriver_non_car && ((tCar_spec*)pCar_1)->collision_mass_multiplier != 1.0) {
MungeCarsMass(pCar_1, ((tCar_spec*)pCar_1)->collision_mass_multiplier);
}
if (pCar_2->driver > eDriver_non_car && ((tCar_spec*)pCar_2)->collision_mass_multiplier != 1.0f) {
if (pCar_2->driver > eDriver_non_car && ((tCar_spec*)pCar_2)->collision_mass_multiplier != 1.0) {
MungeCarsMass(pCar_2, ((tCar_spec*)pCar_2)->collision_mass_multiplier);
}
}
@ -6888,11 +6888,11 @@ void ModifyCarsMass(tCollision_info* pCar_1, tCollision_info* pCar_2) {
// FUNCTION: CARM95 0x0048fc7b
void ResetCarsMass(tCollision_info* pCar_1, tCollision_info* pCar_2) {
if (pCar_1->driver > eDriver_non_car && ((tCar_spec*)pCar_1)->collision_mass_multiplier != 1.0f) {
MungeCarsMass(pCar_1, 1.0f / ((tCar_spec*)pCar_1)->collision_mass_multiplier);
if (pCar_1->driver > eDriver_non_car && ((tCar_spec*)pCar_1)->collision_mass_multiplier != 1.0) {
MungeCarsMass(pCar_1, 1.0 / ((tCar_spec*)pCar_1)->collision_mass_multiplier);
}
if (pCar_2->driver > eDriver_non_car && ((tCar_spec*)pCar_2)->collision_mass_multiplier != 1.0f) {
MungeCarsMass(pCar_2, 1.0f / ((tCar_spec*)pCar_2)->collision_mass_multiplier);
if (pCar_2->driver > eDriver_non_car && ((tCar_spec*)pCar_2)->collision_mass_multiplier != 1.0) {
MungeCarsMass(pCar_2, 1.0 / ((tCar_spec*)pCar_2)->collision_mass_multiplier);
}
}

View File

@ -955,7 +955,7 @@ void TDamageRRWheel(void) {
// FUNCTION: CARM95 0x004a13a6
void MoveBonnetForward(void) {
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.translate.t.v[2] -= .005f;
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.translate.t.v[2] -= .005;
}
// IDA: void __cdecl SaveBonnet()
@ -973,77 +973,77 @@ void SaveBonnet(void) {
// FUNCTION: CARM95 0x004a142f
void MoveBonnetBackward(void) {
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.translate.t.v[2] += .005f;
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.translate.t.v[2] += .005;
}
// IDA: void __cdecl MoveBonnetLeft()
// FUNCTION: CARM95 0x004a1466
void MoveBonnetLeft(void) {
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.translate.t.v[0] -= .005f;
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.translate.t.v[0] -= .005;
}
// IDA: void __cdecl ShrinkBonnetX()
// FUNCTION: CARM95 0x004a149d
void ShrinkBonnetX(void) {
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.mat.m[0][0] *= .98f;
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.mat.m[0][0] *= .98;
}
// IDA: void __cdecl SwellBonnetX()
// FUNCTION: CARM95 0x004a14d4
void SwellBonnetX(void) {
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.mat.m[0][0] *= 1.02f;
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.mat.m[0][0] *= 1.02;
}
// IDA: void __cdecl ShrinkBonnetY()
// FUNCTION: CARM95 0x004a150b
void ShrinkBonnetY(void) {
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.mat.m[1][1] *= .98f;
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.mat.m[1][1] *= .98;
}
// IDA: void __cdecl SwellBonnetY()
// FUNCTION: CARM95 0x004a1542
void SwellBonnetY(void) {
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.mat.m[1][1] *= 1.02f;
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.mat.m[1][1] *= 1.02;
}
// IDA: void __cdecl ShrinkBonnetZ()
// FUNCTION: CARM95 0x004a1579
void ShrinkBonnetZ(void) {
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.mat.m[2][2] *= .98f;
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.mat.m[2][2] *= .98;
}
// IDA: void __cdecl SwellBonnetZ()
// FUNCTION: CARM95 0x004a15b0
void SwellBonnetZ(void) {
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.mat.m[2][2] *= 1.02f;
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.mat.m[2][2] *= 1.02;
}
// IDA: void __cdecl MoveBonnetDown()
// FUNCTION: CARM95 0x004a15e7
void MoveBonnetDown(void) {
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.translate.t.v[1] += .005f;
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.translate.t.v[1] += .005;
}
// IDA: void __cdecl MoveBonnetRight()
// FUNCTION: CARM95 0x004a161e
void MoveBonnetRight(void) {
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.translate.t.v[0] += .005f;
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.translate.t.v[0] += .005;
}
// IDA: void __cdecl MoveBonnetUp()
// FUNCTION: CARM95 0x004a1655
void MoveBonnetUp(void) {
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.translate.t.v[1] -= .005f;
gProgram_state.current_car.car_model_actors[gProgram_state.current_car.car_actor_count - 1].actor->t.t.translate.t.v[1] -= .005;
}
// IDA: void __cdecl TiltBonnetDownX()
@ -1808,7 +1808,7 @@ void FlipUpCar(tCar_spec* car) {
tv.v[0] = car->car_master_actor->t.t.mat.m[3][0] - car->last_safe_positions[0].m[3][0];
tv.v[1] = car->car_master_actor->t.t.mat.m[3][1] - car->last_safe_positions[0].m[3][1];
tv.v[2] = car->car_master_actor->t.t.mat.m[3][2] - car->last_safe_positions[0].m[3][2];
if (BrVector3LengthSquared(&tv) > 8.3015966) {
if (BrVector3LengthSquared(&tv) > 8.3015966f) {
new_pos = 0;
}
BrMatrix34Copy(&car->car_master_actor->t.t.mat, &car->last_safe_positions[new_pos]);
@ -1821,7 +1821,7 @@ void FlipUpCar(tCar_spec* car) {
dir.v[1] = 0.28985506;
dir.v[2] = 0.0;
FindFace(&car->car_master_actor->t.t.euler.t, &dir, &tv, &t, &material);
if (t > 1.0) {
if (t > 1.0f) {
car->car_master_actor->t.t.mat.m[3][0] += dir.v[0];
car->car_master_actor->t.t.mat.m[3][1] += dir.v[1];
car->car_master_actor->t.t.mat.m[3][2] += dir.v[2];
@ -2077,7 +2077,7 @@ void PollCameraControls(tU32 pTime_difference) {
flag = 0;
swirl_mode = gRace_finished && !gAction_replay_mode && (&gProgram_state.current_car == gCar_to_view || gCar_to_view->knackered);
up_and_down_mode = swirl_mode && !gCamera_has_collided;
going_up = gCamera_zoom > 1.0;
going_up = gCamera_zoom > 1.0f;
if (last_swirl_mode != swirl_mode) {
if (swirl_mode) {
SaveCameraPosition(0);
@ -2088,7 +2088,7 @@ void PollCameraControls(tU32 pTime_difference) {
}
if (!gMap_mode && !gProgram_state.cockpit_on && (!gAction_replay_mode || gAction_replay_camera_mode <= eAction_replay_standard)) {
if (KeyIsDown(31) || (up_and_down_mode && !going_up)) {
gCamera_zoom = (double)pTime_difference * TIME_CONV_THING / (double)(2 * swirl_mode + 1) + gCamera_zoom;
gCamera_zoom = pTime_difference * TIME_CONV_THING / (double)(2 * swirl_mode + 1) + gCamera_zoom;
if (gCamera_zoom > 2.0f) {
gCamera_zoom = 2.0f;
}
@ -2097,9 +2097,9 @@ void PollCameraControls(tU32 pTime_difference) {
}
}
if (KeyIsDown(30) || (up_and_down_mode && going_up)) {
gCamera_zoom = gCamera_zoom - (double)pTime_difference * TIME_CONV_THING / (double)(2 * swirl_mode + 1);
if (gCamera_zoom < 0.1) {
gCamera_zoom = 0.1;
gCamera_zoom = gCamera_zoom - pTime_difference * TIME_CONV_THING / (double)(2 * swirl_mode + 1);
if (gCamera_zoom < 0.1f) {
gCamera_zoom = 0.1f;
if (up_and_down_mode) {
if (gCamera_zoom < 1.0f) {
gCamera_zoom = 1.0f;

View File

@ -245,7 +245,7 @@ void CrushModelPoint(tCar_spec* pCar, int pModel_index, br_model* pModel, int pC
old_vector = *target_point;
for (bend_axis = 0; bend_axis < 3; bend_axis++) {
target_point->v[bend_axis] += (1.0f - the_neighbour->factor / 256.0f) * movement.v[bend_axis];
if (the_neighbour->factor <= 128) {
v12 = the_neighbour->factor / 128.0f;
} else {
@ -661,10 +661,10 @@ tImpact_location CalcModifiedLocation(tCar_spec* pCar) {
if (pCar->last_impact_location != eImpact_left && pCar->last_impact_location != eImpact_right && pCar->last_impact_location != eImpact_top && pCar->last_impact_location != eImpact_bottom) {
return pCar->last_impact_location;
}
if (pCar->last_col_prop_z < 0.25f) {
if (pCar->last_col_prop_z < 0.25) {
return eImpact_front;
}
if (pCar->last_col_prop_z > 0.75f) {
if (pCar->last_col_prop_z > 0.75) {
return eImpact_back;
} else {
return pCar->last_impact_location;
@ -742,9 +742,9 @@ void DamageSystems(tCar_spec* pCar, br_vector3* pImpact_point, br_vector3* pEner
return;
}
energy_magnitude = pCar->car_model_actors[pCar->principal_car_actor].crush_data.softness_factor * pure_energy_magnitude / 0.7f;
BrVector3InvScale(&crushed_car_bounds.min, &pCar->bounds[1].min, WORLD_SCALE);
BrVector3InvScale(&crushed_car_bounds.max, &pCar->bounds[1].max, WORLD_SCALE);
energy_magnitude = pCar->car_model_actors[pCar->principal_car_actor].crush_data.softness_factor * pure_energy_magnitude / 0.7;
BrVector3InvScale(&crushed_car_bounds.min, &pCar->bounds[1].min, WORLD_SCALE_D);
BrVector3InvScale(&crushed_car_bounds.max, &pCar->bounds[1].max, WORLD_SCALE_D);
x1 = pImpact_point->v[0] - crushed_car_bounds.min.v[0];
x2 = crushed_car_bounds.max.v[0] - pImpact_point->v[0];

View File

@ -1336,7 +1336,7 @@ void MungeClipPlane(br_vector3* pLight, tCar_spec* pCar, br_vector3* p1, br_vect
BrMatrix34ApplyP(&v2, p2, &pCar->car_master_actor->t.t.mat);
BrVector3Sub(&v3, p2, p1);
BrVector3Cross(&v4, &v3, pLight);
if (fabs(v4.v[0]) >= 0.01f || fabs(v4.v[1]) >= 0.01f || fabs(v4.v[2]) >= 0.01f) {
if (fabs(v4.v[0]) >= 0.01 || fabs(v4.v[1]) >= 0.01 || fabs(v4.v[2]) >= 0.01) {
BrVector3Copy(&v3, p1);
v3.v[1] -= pY_offset;
if (BrVector3Dot(&v3, &v4) > 0.f) {

View File

@ -941,9 +941,9 @@ void MungeShrapnel(tU32 pTime) {
DrMatrix34Rotate(mat, 182 * gShrapnel[i].age, &gShrapnel[i].axis);
BrMatrix34PreShearX(mat, gShrapnel[i].shear1, gShrapnel[i].shear2);
// bug: should this be using "&gShrapnel[i].v"??
ts = 1.0 - BrVector3Length(&gSparks[i].v) / 1.4 * pTime / 1000.0;
if (ts < 0.1) {
ts = 0.1;
ts = 1.0f - BrVector3Length(&gSparks[i].v) / 1.4f * pTime / 1000.0f;
if (ts < 0.1f) {
ts = 0.1f;
}
BrVector3Scale(&gShrapnel[i].v, &gShrapnel[i].v, ts);
AddShrapnelToPipingSession(i + ((gShrapnel[i].age > 1000 || gShrapnel[i].age < pTime) << 15), (br_vector3*)mat->m[3], gShrapnel[i].age - pTime, gShrapnel[i].actor->material);
@ -1360,7 +1360,7 @@ void GenerateContinuousSmoke(tCar_spec* pCar, int wheel, tU32 pTime) {
decay_factor = 1.0f;
}
BrVector3InvScale(&tv, &pCar->wpos[wheel], WORLD_SCALE);
tv.v[1] -= pCar->oldd[wheel] / WORLD_SCALE;
tv.v[1] -= pCar->oldd[wheel] / WORLD_SCALE_D;
alpha = -1000.0f;
if (vcs.v[2] > 0.0f) {
@ -1450,10 +1450,10 @@ void RenderSmoke(br_pixelmap* pRender_screen, br_pixelmap* pDepth_buffer, br_act
if ((gSmoke_flags & (1u << i)) != 0) {
if (gSmoke[i].strength > 0.0) {
if (gSmoke[i].time_sync) {
BrVector3Scale(&tv, &gSmoke[i].v, gSmoke[i].time_sync / 1000.0);
BrVector3Scale(&tv, &gSmoke[i].v, gSmoke[i].time_sync / 1000.0f);
gSmoke[i].time_sync = 0;
} else {
BrVector3Scale(&tv, &gSmoke[i].v, pTime / 1000.0);
BrVector3Scale(&tv, &gSmoke[i].v, pTime / 1000.0f);
}
BrVector3Accumulate(&gSmoke[i].pos, &tv);
} else {
@ -1480,7 +1480,7 @@ void RenderSmoke(br_pixelmap* pRender_screen, br_pixelmap* pDepth_buffer, br_act
if (((1u << i) & not_lonely) == 0) {
gSmoke[i].strength = gSmoke[i].strength / 2.0;
}
aspect = (gSmoke[i].radius - 0.05f) / 0.25f * 0.5f + 1.0f;
aspect = (gSmoke[i].radius - 0.05f) / 0.25f * 0.5 + 1.0;
if ((gSmoke[i].type & 0x10) != 0) {
SmokeCircle3D(&gSmoke[i].pos, gSmoke[i].radius / aspect, gSmoke[i].strength, 1.0, pRender_screen, pDepth_buffer, gShade_list[gSmoke[i].type & 0xf], pCamera);
} else {
@ -1489,13 +1489,13 @@ void RenderSmoke(br_pixelmap* pRender_screen, br_pixelmap* pDepth_buffer, br_act
if (gSmoke[i].pipe_me) {
AddSmokeToPipingSession(i, gSmoke[i].type, &gSmoke[i].pos, gSmoke[i].radius, gSmoke[i].strength);
}
gSmoke[i].radius = (double)pTime / 1000.0 * gSmoke[i].strength * 0.5 + gSmoke[i].radius;
gSmoke[i].strength = gSmoke[i].strength - (double)pTime * gSmoke[i].decay_factor / 1000.0;
gSmoke[i].radius = pTime / 1000.0f * gSmoke[i].strength * 0.5 + gSmoke[i].radius;
gSmoke[i].strength = gSmoke[i].strength - pTime * gSmoke[i].decay_factor / 1000.0f;
if (gSmoke[i].radius > 0.3f) {
gSmoke[i].radius = 0.3f;
}
if (gSmoke[i].strength > 0.0) {
ts = 1.0f - (double)pTime * 0.002f;
if (gSmoke[i].strength > 0.0f) {
ts = 1.0f - pTime * 0.002f;
if (ts < 0.5f) {
ts = 0.5f;
}

View File

@ -3560,7 +3560,7 @@ int PointOutOfSight(br_vector3* pPoint, br_scalar pMax_distance) {
&& gRearview_camera_to_world.m[2][2] * distance_vector.v[2]
+ gRearview_camera_to_world.m[2][1] * distance_vector.v[1]
+ gRearview_camera_to_world.m[2][0] * distance_vector.v[0]
< 0.0) {
< 0.0f) {
return 0;
}
}
@ -3568,7 +3568,7 @@ int PointOutOfSight(br_vector3* pPoint, br_scalar pMax_distance) {
distance_vector.v[1] = pPoint->v[1] - gCamera_to_world.m[3][1];
distance_vector.v[2] = pPoint->v[2] - gCamera_to_world.m[3][2];
return distance_vector.v[0] * distance_vector.v[0] + distance_vector.v[1] * distance_vector.v[1] + distance_vector.v[2] * distance_vector.v[2] >= pMax_distance
|| gCamera_to_world.m[2][2] * distance_vector.v[2] + gCamera_to_world.m[2][1] * distance_vector.v[1] + gCamera_to_world.m[2][0] * distance_vector.v[0] >= 0.0;
|| gCamera_to_world.m[2][2] * distance_vector.v[2] + gCamera_to_world.m[2][1] * distance_vector.v[1] + gCamera_to_world.m[2][0] * distance_vector.v[0] >= 0.0f;
}
// IDA: void __usercall PathGrooveBastard(tGroovidelic_spec *pGroove@<EAX>, tU32 pTime@<EDX>, br_matrix34 *pMat@<EBX>, int pInterrupt_it@<ECX>)