Mover fails to detect that its move is blocked by player entity

Issue #148 resolved
Carsten Fuchs
created an issue

In map Kidney, if the player stands in the frame of the open door (in the attached screenshot at the very right, close to the wall near the blue light) so that it blocks the door's lower half and thus prevents it from closing, the door actually fails to detect that it is blocked: it closes anyway, causing the player to get stuck (until it re-opens).

This only happens if the player stands on the floor at the very right. If the player stands further left on the part of the door that sticks out, the problem does not occur.

Comments (3)

  1. Carsten Fuchs reporter

    It turns out that this problem begins in function GetEntityPosCat() in GameSys/CompMover.cpp, which calls ClipWorldT::TraceConvexSolid().

    This method first examines the world's collision model, determines (correctly) that the player is standing on the floor, and yields a resulting Fraction of 0.0 (while being clear of any solids). It then uses the 0.0 fraction as an argument to stop early, that is, to not bother examining the collision models of any other entities such as the door's lower half. This is wrong, because this causes the method to miss the fact that the player is actually ''stuck'' in the door's lower half. This failure propagates upwards, causing the described problem.

  2. Anonymous
    • assigned issue to True
    • changed status to resolved

    In [changeset:"9d7bc31866c9f5419a57209b7b7f62d6cd476849/git"]: {{{

    !CommitTicketReference repository="git" revision="9d7bc31866c9f5419a57209b7b7f62d6cd476849"

    ClipSys: In TraceResultT, clarify that Fraction == 0.0 is still different from StartSolid == true.

    The code formerly assumed that Fraction == 0.0 and StartSolid == true were equivalent. However, as described in #148, this possibly caused us to miss and thus fail to report actual starts in solid if a previous trace already yielded a "legit" fraction of 0.0 (without being stuck in solid at this time).

    Fixes #148. }}}

  3. Log in to comment