diff --git a/config/parked.json b/config/parked.json index 23e7e4a7..5b7af3db 100644 --- a/config/parked.json +++ b/config/parked.json @@ -3022,25 +3022,6 @@ "objdiff_percent": 96.454544 } }, - { - "unit": "source/effects/player_effects", - "function": "_player_effect_start", - "class": "instruction-scheduling", - "evidence": "Fuzzy-parked under the current house rule after reconstructing the complete typed public damage-feedback entry point from January's ABI, assert, random-seed lock lifetime, definition fields, calls, branch topology, and indicator math, with the preserved Opus donor at 608c66380 and independent HCEA code at 570c83fd corroborating the behavior and semantic name. Target and candidate both occupy 736 padded bytes, contain 247 instructions, and carry the same 35 ordered relocation identities; objdiff reports 99.99187 percent similarity. The only instruction-byte difference is the interchangeable load side of one commutative multiplication in the inlined camera-left dot product. The source retains typed player, unit, object, tag, observer, sound, rumble, and math access; uses the authenticated bit-8 damage-indicator enum name; and keeps owner prototypes in player_effects.h and random_math.h. A shared owner-header enum insertion was rejected because a full rebuild reopened the protected units.obj node-orientation sentinel; the named constant is therefore TU-private. No raw offset, false type or prototype, representation pun, volatile/register forcing, barrier, pragma, assembly, fake dependency, forced inline, undefined behavior, or nonsensical branch is retained. Reopen only for authoritative January source/local records or natural same-compiler evidence for the final commutative operand order.", - "measurements": { - "target": { - "size": 736, - "relocation_count": 35, - "normalized_sha256": "33e471ae9bb2e73c5aaabb039c2c574847ed5f611ef728aefd5af9394e526b08" - }, - "base": { - "size": 736, - "relocation_count": 35, - "normalized_sha256": "997d1f3474a758ef05783af0fb2927e46cf5e3e1505e340540f171b47ad13b21" - }, - "objdiff_percent": 99.99187 - } - }, { "unit": "source/objects/damage", "function": "_area_of_effect_cause_damage_to_object", diff --git a/source/ai/actor_moving.c b/source/ai/actor_moving.c index 008e1e65..b8e50047 100644 --- a/source/ai/actor_moving.c +++ b/source/ai/actor_moving.c @@ -1130,10 +1130,10 @@ void actor_get_stopping_distances( if (actor->input.vehicle_index != NONE) { - long vehicle_driver_type = actor->input.vehicle_driver_type; - - if (vehicle_driver_type >= _actor_vehicle_driver_hovering_ground && - vehicle_driver_type <= _actor_vehicle_driver_nondirectional_ground) + switch (actor->input.vehicle_driver_type) + { + case _actor_vehicle_driver_hovering_ground: + case _actor_vehicle_driver_nondirectional_ground: { struct unit_datum *vehicle = vehicle_get(actor->input.vehicle_index); struct vehicle_definition *definition = @@ -1145,6 +1145,8 @@ void actor_get_stopping_distances( reference_speed = definition->maximum_forward_speed; deceleration = definition->speed_acceleration; stopping_deceleration = deceleration; + break; + } } } else if (actor->meta.unit_index != NONE) diff --git a/source/effects/player_effects.c b/source/effects/player_effects.c index 6b8ee708..5c234df9 100644 --- a/source/effects/player_effects.c +++ b/source/effects/player_effects.c @@ -1235,9 +1235,10 @@ void player_effect_start( &delta); cross_product3d(&camera->forward, &camera->up, &left); - relative.i = dot_product3d(&left, &delta); - relative.j = dot_product3d(&delta, &camera->forward); - relative.k = dot_product3d(&delta, &camera->up); + set_real_vector3d(&relative, + dot_product3d(&left, &delta), + dot_product3d(&delta, &camera->forward), + dot_product3d(&delta, &camera->up)); if (normalize3d(&relative) != 0.0f) {