diff --git a/src/Marble.hx b/src/Marble.hx index f69ecc19..0c673bef 100644 --- a/src/Marble.hx +++ b/src/Marble.hx @@ -1793,6 +1793,10 @@ class Marble extends GameObject { } else { this.level.pickUpPowerUp(cast this, this.level.powerUps[p.powerUpId]); } + if (p.moveQueueSize == 0 && this.connection != null) { + // Pad null move on client + this.connection.moveManager.duplicateLastMove(); + } // if (this.controllable && Net.isClient) { // // We are client, need to do something about the queue diff --git a/src/net/MoveManager.hx b/src/net/MoveManager.hx index 0d38de5b..80b93aac 100644 --- a/src/net/MoveManager.hx +++ b/src/net/MoveManager.hx @@ -47,12 +47,12 @@ class MoveManager { var maxMoves = 45; var maxSendMoveListSize = 30; - var serverTargetMoveListSize = 3; - var serverMaxMoveListSize = 8; - var serverAvgMoveListSize = 3.0; + var serverTargetMoveListSize = 4; + var serverMaxMoveListSize = 16; + var serverAvgMoveListSize = 4.0; var serverSmoothMoveAvg = 0.15; var serverMoveListSizeSlack = 1.5; - var serverDefaultMinTargetMoveListSize = 3; + var serverDefaultMinTargetMoveListSize = 4; var serverAbnormalMoveCount = 0; var serverLastRecvMove = 0; var serverLastAckMove = 0; @@ -144,6 +144,12 @@ class MoveManager { queuedMoves[to].motionDir.load(queuedMoves[from].motionDir); } + public inline function duplicateLastMove() { + if (queuedMoves.length == 0) + return; + queuedMoves.insert(0, queuedMoves[0]); + } + public static inline function packMove(m:NetMove, b:OutputBitStream) { b.writeUInt16(m.id); b.writeByte(Std.int((m.move.d.x * 16) + 16));