Hi, Am Mittwoch, den 19.09.2012, 20:56 +0200 schrieb Joachim Breitner: > Am Mittwoch, den 19.09.2012, 10:09 +0200 schrieb Joachim Breitner: > > Hmm, it seems that the server for redeeming the key is down or blocked > > by my firewall, I’ll try from at home. > > yes, here it works. I can play the game, but I also have occasional > lock-ups of some or all the control keys. Sometimes, but not always, I > can fix it by Esc → Continue, or Esc → Restart from beginning. No idea > about when it happens, though. I have started to debug this. I found that when this happens (at least when it happens right at the start of the level), then nikki’s state is not Wait but State {action = Airborne, direction = HRight, feetVelocity = -0.0, jumpInformation = JumpInformation {jumpStartTime = Nothing, jumpCollisionAngle = Nothing, jumpNikkiVelocity = Vector 0.0 0.0, jumpButtonDirection = Nothing}, ghostTimes = GhostTimes {standingGhostTime_ = Nothing, wallSlideGhostTime_ = Nothing}} which seems to be the initial state. So for some reason, the jump does not end. The function getJumpingForces does the same thing in both cases (return Vector 0 0). The state changes in the beginning in the good case are: State {action = Airborne, direction = HRight, feetVelocity = 0.0, jumpInformation = JumpInformation {jumpStartTime = Nothing, jumpCollisionAngle = Nothing, jumpNikkiVelocity = Vector 0.0 0.0, jumpButtonDirection = Nothing}, ghostTimes = GhostTimes {standingGhostTime_ = Nothing, wallSlideGhostTime_ = Nothing}} State {action = Airborne, direction = HRight, feetVelocity = -0.0, jumpInformation = JumpInformation {jumpStartTime = Nothing, jumpCollisionAngle = Nothing, jumpNikkiVelocity = Vector 0.0 0.0, jumpButtonDirection = Nothing}, ghostTimes = GhostTimes {standingGhostTime_ = Nothing, wallSlideGhostTime_ = Nothing}} State {action = Wait {collision = NikkiCollision {nikkiCollisionShape = <Shape>, nikkiCollisionAngle = 0.0, nikkiCollisionPosition = Vector (-208.0) (-64.0), nikkiCollisionType = NikkiLegsCT}, ghost = False}, direction = HRight, feetVelocity = 0.0, jumpInformation = JumpInformation {jumpStartTime = Nothing, jumpCollisionAngle = Nothing, jumpNikkiVelocity = Vector 0.0 0.0, jumpButtonDirection = Nothing}, ghostTimes = GhostTimes {standingGhostTime_ = Nothing, wallSlideGhostTime_ = Nothing}} in the bad case, it does not enter NikkiCollision. Maybe a rounding error? In the cood case, "nikkiCollisions contacts" returns [NikkiCollision {nikkiCollisionShape = <Shape>, nikkiCollisionAngle = 0.0, nikkiCollisionPosition = Vector (-208.0) (-64.0), nikkiCollisionType = NikkiLegsCT}] and in the base case nothing. So what does contacts contain? Contacts {nikkiCollisions = [], nikkiTouchesDeadly = False, triggers = fromList [], terminals = fromList [], batteries = fromList [], fallingTiles = fromList [], nearestSign = Nothing} in the bad case and Contacts {nikkiCollisions = [NikkiCollision {nikkiCollisionShape = <Shape>, nikkiCollisionAngle = 0.0, nikkiCollisionPosition = Vector (-208.0) (-64.0), nikkiCollisionType = NikkiLegsCT}], nikkiTouchesDeadly = False, triggers = fromList [], terminals = fromList [], batteries = fromList [], fallingTiles = fromList [], nearestSign = Just (<Shape>,86.0)} in the good case. Ok, nothing new. Maybe the Chipmunk callbacks are broken? I suspected that maybe resetContactRef was called too early or too often but that does not seem to be the case. Anyways, enough for now. Guess I’m not very helpful. But in any case I can reliably reproduce it by just restarting a level until Nikki hangs in mid-air with in the jumping state. I can turn him around, but not move him or make him jump. If you, Söhnke, cannot reproduce it then it might be a library version issue. This is libchipmunk 5.3.4-1 here. Greetings, Joachim -- Joachim "nomeata" Breitner Debian Developer nomeata@debian.org | ICQ# 74513189 | GPG-Keyid: 4743206C JID: nomeata@joachim-breitner.de | http://people.debian.org/~nomeata
Attachment:
signature.asc
Description: This is a digitally signed message part