From c45bce1724e7b5044a334afb779e0351de48388d Mon Sep 17 00:00:00 2001 From: Dethrace Labs <78985374+dethrace-labs@users.noreply.github.com> Date: Wed, 24 Sep 2025 18:17:34 +1200 Subject: [PATCH] ProcessLevitate effectively matching --- src/DETHRACE/common/opponent.c | 25 +++++++++++++++++-------- src/library_msvc.h | 3 +++ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/DETHRACE/common/opponent.c b/src/DETHRACE/common/opponent.c index cfa75c4b..2a03c080 100644 --- a/src/DETHRACE/common/opponent.c +++ b/src/DETHRACE/common/opponent.c @@ -1372,41 +1372,50 @@ void ProcessLevitate(tOpponent_spec* pOpponent_spec, tProcess_objective_command float terminal_time; float y; - if (pCommand == ePOC_start) { + switch (pCommand) { + case ePOC_start: dr_dprintf("%s: ProcessLevitate() - new objective started", pOpponent_spec->car_spec->driver_name); pOpponent_spec->levitate_data.waiting_to_levitate = 1; pOpponent_spec->car_spec->brake_force = 15.f * pOpponent_spec->car_spec->M; pOpponent_spec->car_spec->acc_force = 0.f; pOpponent_spec->levitate_data.time_started = gTime_stamp_for_this_munging; - } else if (pCommand == ePOC_run) { + break; + + case ePOC_run: if (pOpponent_spec->levitate_data.waiting_to_levitate) { if ((BrVector3Length(&pOpponent_spec->car_spec->v) < .01f && BrVector3Length(&pOpponent_spec->car_spec->omega) < 1.f) || gTime_stamp_for_this_munging - pOpponent_spec->levitate_data.time_started > 4000) { pOpponent_spec->levitate_data.waiting_to_levitate = 0; pOpponent_spec->levitate_data.time_started = gTime_stamp_for_this_munging; pOpponent_spec->levitate_data.initial_y = pOpponent_spec->car_spec->car_master_actor->t.t.translate.t.v[1]; if (pOpponent_spec->car_spec->has_been_stolen) { - NewTextHeadupSlot(eHeadupSlot_misc, 250, 2500, -4, GetMiscString(kMiscString_CarAddedToChangeCarList)); + NewTextHeadupSlot(eHeadupSlot_misc, 250, 5000, -4, GetMiscString(kMiscString_CarAddedToChangeCarList)); } } else { pOpponent_spec->car_spec->brake_force = 15.f * pOpponent_spec->car_spec->M; pOpponent_spec->car_spec->acc_force = 0.f; BrVector3InvScale(&pOpponent_spec->car_spec->omega, &pOpponent_spec->car_spec->omega, - pow(gFrame_period_for_this_munging / 1000.f, 2.f)); + pow(2.f, gFrame_period_for_this_munging / 1000.0)); } } if (!pOpponent_spec->levitate_data.waiting_to_levitate) { TurnOpponentPhysicsOff(pOpponent_spec); - t = (gTime_stamp_for_this_munging - pOpponent_spec->levitate_data.time_started) / 1000.f; - if (t < 20.f) { - y = .5f * t * t / 2.f; + t = (gTime_stamp_for_this_munging - pOpponent_spec->levitate_data.time_started) / 1000.0; + terminal_time = 20.f; + if (t < terminal_time) { + y = t * t * .5f / 2.f; } else { - y = 10.f * (t - 20.f) + 100.f; + y = terminal_time * terminal_time * 0.5 / 2.0 + (t - terminal_time) * 10.0; } pOpponent_spec->car_spec->car_master_actor->t.t.translate.t.v[1] = pOpponent_spec->levitate_data.initial_y + y; if (y > 200.f) { pOpponent_spec->finished_for_this_race = 1; } } + break; + case ePOC_die: + return; + default: + break; } } diff --git a/src/library_msvc.h b/src/library_msvc.h index da42fecd..272f84df 100644 --- a/src/library_msvc.h +++ b/src/library_msvc.h @@ -224,3 +224,6 @@ // GLOBAL: CARM95 0x0052D190 // _pctype + +// GLOBAL: CARM95 0x004EAB82 +// __CIpow