Arx Libertatis Bug Tracker
star_faded.png
Please log in to bookmark issues
bug_report_small.png
OPEN  Bug report #31  -  You can get stuck in the elevator in the second level
Posted Apr 27, 2011 - updated Jun 30, 2018   Shortlink: http://arx.vg/31
action_vote_minus_faded.png
0
Votes
action_vote_plus_faded.png
Issue details
  • Type of issue
    Bug report
  • Status
     
    New
  • Assigned to
    Not assigned to anyone
  • Progress
       
  • Type of bug
    Not triaged
  • Likelihood
    Not triaged
  • Effect
    Not triaged
  • Posted by
     Daniel Scharrer
  • Owned by
    Not owned by anyone
  • Estimated time
    Not estimated
  • Category
    Physics
  • Resolution
    Not determined
  • Priority
    Not determined
  • Reproducability
    Not determined
  • Severity
    Normal
  • Targetted for
    icon_milestones.png Not determined
  • OS
    icon_customdatatype.png Not determined
  • Architecture
    icon_customdatatype.png Not determined
  • Fixed in
    icon_customdatatype.png Not determined
Issue description
Nothing entered.
Steps to reproduce this issue
Nothing entered.

#1
icon_reply.pngReply
Comment posted by
 TheAncientGoat
Oct 03, 08:43
Yup, just standing still on the elevator makes me fall through, I have to jump at a point for it to work, but if I jump twice, I get stuck, and have to load an old save.
#2
icon_reply.pngReply
Comment posted by
 adejr
Nov 14, 01:55
the physics issue i think is that the frame deltas are too high, but i haven't looked much at that code

normally what you'd do in that case is just start to divide each integration, that's called piece-wise linear approximation, standard method used by newton, etc

there should be a value like "max delta" defined, and in the case where the delta is greater it's divided until it is below, coefficients divided by the same amount

unfortunately the physics are tied directly into the graphical frame-rate and they need to be separated to work correctly.

otherwise, it would be something like {
 float physics_steps = floorf(frame_delta / max_delta);
 for (int i = 0; i < physics_steps; i++)
 {
  animate(max_delta);
 }
 animate(frame_delta - max_delta * physics_steps);
 draw_frame(frame_delta);
}

of course it depends upon whether it's more correct to minimize intra-frame jitter or inter-frame jitter.
#3
icon_reply.pngReply
Comment posted by
 adejr
Nov 28, 15:09
experimentation with this seems to show some improvement, but it seems there is something more complex going on.

there are cases of higher than first-order integration some places that could be solved correctly.

most of the player physics seems to take place in two functions where physics code is unfortunately mixed with animation and other code.

timing values are read from multiple sources and have the potential to disagree which could cause some issues.

i hope that eventually in the player_cleanup branch animation updates, status updates and physics can be separated completely which should make the functions much easier to deal with.
#9
icon_reply.pngReply
Comment posted by
 Daniel Scharrer
Jan 03, 09:58
Is this still a problem? For me the player character seems to start falling through the elevator but consistenly gets pushed back on top of it.