diff --git a/src/DETHRACE/CMakeLists.txt b/src/DETHRACE/CMakeLists.txt index bbbbfe62..b4da0658 100644 --- a/src/DETHRACE/CMakeLists.txt +++ b/src/DETHRACE/CMakeLists.txt @@ -193,8 +193,9 @@ if(MSVC_42_FOR_RECCMP) set_target_properties(dethrace PROPERTIES OUTPUT_NAME "CARM95") target_link_options(dethrace PRIVATE /INCREMENTAL:NO /subsystem:windows /ENTRY:mainCRTStartup) - # set_source_files_properties(common/utility.c PROPERTIES COMPILE_FLAGS "/FAs") - set_source_files_properties(common/brucetrk.c PROPERTIES COMPILE_FLAGS "/G5") + set_source_files_properties(common/car.c PROPERTIES COMPILE_FLAGS "/FAs") + + # set_source_files_properties(common/brucetrk.c PROPERTIES COMPILE_FLAGS "/G5") # set_source_files_properties(common/car.c PROPERTIES COMPILE_FLAGS "/GB") reccmp_add_target(dethrace ID CARM95) diff --git a/src/DETHRACE/common/car.c b/src/DETHRACE/common/car.c index aff9eb4c..585d7e66 100644 --- a/src/DETHRACE/common/car.c +++ b/src/DETHRACE/common/car.c @@ -959,18 +959,20 @@ void CalcEngineForce(tCar_spec* c, br_scalar dt) { if (c->revs == 0.0f) { c->gear = 0; } - sign = c->gear < 0 || (c->gear == 0 && c->velocity_car_space.v[2] > 0.5f); - if (c->keys.backwards != sign) { + + if (c->keys.backwards != (c->gear < 0 || (c->gear == 0 && c->velocity_car_space.v[2] > 0.5))) { c->keys.backwards = !c->keys.backwards; - temp_for_swap = c->keys.acc; - c->keys.acc = c->keys.dec; - c->keys.dec = temp_for_swap; + + // ye olde XOR swap + c->keys.acc = c->keys.acc ^ c->keys.dec; + c->keys.dec = c->keys.acc ^ c->keys.dec; + c->keys.acc = c->keys.acc ^ c->keys.dec; temp_for_swap = c->joystick.acc; c->joystick.acc = c->joystick.dec; c->joystick.dec = temp_for_swap; } - if (!c->gear && !c->keys.acc && c->joystick.acc <= 0 && (c->keys.dec || c->joystick.dec > 0) && !c->keys.backwards && fabs(c->velocity_car_space.v[2]) < 1.0) { + if (!c->gear && !c->keys.acc && c->joystick.acc <= 0 && (c->keys.dec || c->joystick.dec > 0) && !c->keys.backwards && (float)fabs(c->velocity_car_space.v[2]) < 1.0f) { c->keys.backwards = 1; c->keys.acc = c->keys.dec; c->keys.dec = 0; @@ -978,29 +980,28 @@ void CalcEngineForce(tCar_spec* c, br_scalar dt) { c->joystick.acc = c->joystick.dec; c->joystick.dec = temp_for_swap; } - c->torque = -(c->revs * c->revs / 100000000.0f) - 0.2f; + c->torque = -(c->revs * c->revs / 100000000.0f) - 0.2; if (c->keys.acc || c->joystick.acc >= 0) { if (fabs(c->curvature) > c->maxcurve / 2.0f && c->gear < 2 && c->gear && c->traction_control) { ts = 0.7f; - } else if (c->joystick.acc < 0) { - ts = 1.2; + } else if (c->joystick.acc >= 0) { + ts = c->joystick.acc / 54613.0; } else { - ts = c->joystick.acc / 54613.0f; + ts = 1.2; } - torque = c->engine_power_multiplier * ts * gEngine_powerup_factor[c->power_up_levels[1]]; + ts = (c->engine_power_multiplier * ts) * gEngine_powerup_factor[c->power_up_levels[1]]; if (c->damage_units[0].damage_level > 10) { - torque = (1.0f - (double)(c->damage_units[0].damage_level - 10) / 100.0f) * torque; + ts = (1.0f - (float)(c->damage_units[0].damage_level - 10) / 100.0f) * ts; } - c->torque += torque; + c->torque += ts; } else { c->traction_control = 1; } - if (!c->keys.dec && (!c->keys.acc || c->gear) && c->joystick.dec <= 0 && (c->joystick.acc <= 0 || c->gear)) { - c->brake_force = 0.0f; - } else { + if (c->keys.dec || (c->keys.acc && !c->gear) || c->joystick.dec > 0 || (c->joystick.acc > 0 && !c->gear)) { if (c->joystick.dec > 0) { - c->brake_force = (double)(c->joystick.dec / 0x10000) * c->brake_increase + c->initial_brake; + brake_temp = (double)(c->joystick.dec / 0x10000) * c->brake_increase; + c->brake_force = brake_temp + c->initial_brake; } if (c->brake_force == 0.0f) { c->brake_force = c->initial_brake; @@ -1010,16 +1011,25 @@ void CalcEngineForce(tCar_spec* c, br_scalar dt) { c->brake_force = c->initial_brake + c->brake_increase; } } + } else { + c->brake_force = 0.0f; } - if (c->gear) { - c->acc_force = c->force_torque_ratio * c->torque / (float)c->gear; - if (c->brake_force == 0.0f) { - if (c->revs - 1.0f > c->target_revs || c->revs + 1.0f < c->target_revs) { - ts2 = c->torque * dt / 0.0002 + c->revs - c->target_revs; - c->acc_force += ts2 / ((1.0f / (c->speed_revs_ratio * c->M) / (float)c->gear + 1.0 / (c->force_torque_ratio * 0.0002) * (double)c->gear) * dt); - } - } else { - c->revs = c->target_revs; + if (c->gear == 0) { + return; + } + c->acc_force = c->force_torque_ratio * c->torque / (float)c->gear; + if (c->gear >= 0) { + sign = 1; + } else { + sign = -1; + } + if (c->brake_force != 0.0f) { + c->revs = c->target_revs; + } else { + if (c->revs - 1.0f > c->target_revs || c->revs + 1.0f < c->target_revs) { + ts = (c->torque * dt / 0.0002) + (c->revs - c->target_revs); + ts2 = (1.0 / (c->speed_revs_ratio * c->M) / (float)c->gear + 1.0 / (c->force_torque_ratio * 0.0002) * (double)c->gear) * dt; + c->acc_force += ts / ts2; } } }