From 71a5a7b727e217b119a46a0d4e2cd6d346e3b799 Mon Sep 17 00:00:00 2001 From: genxium Date: Wed, 11 Jan 2023 22:24:31 +0800 Subject: [PATCH] Drafted anti-air attack for Monk. --- frontend/assets/plugin_scripts/jsexport.js | 146 ++++++++++-------- .../assets/resources/animation/Monk/Atk3.anim | 46 ++---- .../assets/resources/animation/Monk/Atk5.anim | 85 ++++++++++ .../resources/animation/Monk/Atk5.anim.meta | 5 + .../prefabs/ControlledCharacter.prefab | 3 + frontend/assets/scenes/offline_map.fire | 2 +- frontend/assets/scripts/AttackingCharacter.js | 1 + frontend/assets/scripts/Fireball.js | 25 ++- frontend/assets/scripts/Map.js | 8 +- jsexport/battle/battle.go | 22 ++- jsexport/battle/characterConfig.go | 76 ++++++--- 11 files changed, 286 insertions(+), 133 deletions(-) create mode 100644 frontend/assets/resources/animation/Monk/Atk5.anim create mode 100644 frontend/assets/resources/animation/Monk/Atk5.anim.meta diff --git a/frontend/assets/plugin_scripts/jsexport.js b/frontend/assets/plugin_scripts/jsexport.js index fe5a621..16020ca 100644 --- a/frontend/assets/plugin_scripts/jsexport.js +++ b/frontend/assets/plugin_scripts/jsexport.js @@ -5506,12 +5506,18 @@ $packages["jsexport/battle"] = (function() { } patternId = -1; if (decodedInput.BtnALevel > prevBtnALevel) { - patternId = 1; + if (0 > effDy) { + patternId = 3; + } else if (0 < effDy) { + patternId = 2; + } else { + patternId = 1; + } } return [patternId, jumpedOrNot, effDx, effDy]; }; ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame = function(inputsBuffer, currRenderFrame, collisionSys, collisionSysMap, collisionSpaceOffsetX, collisionSpaceOffsetY, chConfigsOrderedByJoinIndex) { - var {_1, _2, _entry, _entry$1, _entry$2, _entry$3, _entry$4, _entry$5, _i, _i$1, _i$10, _i$11, _i$12, _i$2, _i$3, _i$4, _i$5, _i$6, _i$7, _i$8, _i$9, _index, _index$1, _index$2, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _r$6, _r$7, _ref, _ref$1, _ref$10, _ref$11, _ref$12, _ref$13, _ref$14, _ref$15, _ref$16, _ref$17, _ref$18, _ref$2, _ref$3, _ref$4, _ref$5, _ref$6, _ref$7, _ref$8, _ref$9, _tmp, _tmp$1, _tmp$10, _tmp$11, _tmp$12, _tmp$13, _tmp$14, _tmp$15, _tmp$16, _tmp$17, _tmp$18, _tmp$19, _tmp$2, _tmp$20, _tmp$21, _tmp$22, _tmp$23, _tmp$24, _tmp$25, _tmp$26, _tmp$3, _tmp$4, _tmp$5, _tmp$6, _tmp$7, _tmp$8, _tmp$9, _tuple, _tuple$1, _tuple$10, _tuple$11, _tuple$12, _tuple$13, _tuple$14, _tuple$15, _tuple$16, _tuple$17, _tuple$2, _tuple$3, _tuple$4, _tuple$5, _tuple$6, _tuple$7, _tuple$8, _tuple$9, addToNextRenderFrame, atkedPlayerInNextFrame, atkedPlayerInNextFrame$1, bShape, bulletCollider, bulletColliders, bulletLocalId, bulletShape, bulletShape$1, bulletWx, bulletWx$1, bulletWy, bulletWy$1, chConfig, chConfig$1, chConfig$2, chConfigsOrderedByJoinIndex, colliderHeight, colliderWidth, colliderWorldHeight, colliderWorldWidth, collision, collision$1, collisionSpaceOffsetX, collisionSpaceOffsetY, collisionSys, collisionSysMap, currPlayerDownsync, currPlayerDownsync$1, currPlayerDownsync$2, currPlayerDownsync$3, currPlayerDownsync$4, currRenderFrame, defenderShape, defenderShape$1, effDx, effDy, effPushbacks, existent, existent$1, existent$2, existent$3, existent$4, existent$5, fireballBullet, halfColliderHeightDiff, halfColliderWidthDiff, halfColliderWorldHeightDiff, hardPushbackNorm, hardPushbackNorms, hasLockVel, hitboxSizeWx, hitboxSizeWx$1, hitboxSizeWy, hitboxSizeWy$1, i, i$1, i$2, i$3, i$4, inputsBuffer, isAnotherPlayer, isBarrier, isBullet, joinIndex, joinIndex$1, joinIndex$2, joinIndex$3, jumpedOrNot, jumpedOrNotList, landedOnGravityPushback, meleeBullet, newBullet, newBullet$1, newBulletCollider, newBulletCollider$1, newVx, newVy, nextRenderFrameFireballBullets, nextRenderFrameMeleeBullets, nextRenderFramePlayers, normAlignmentWithGravity, obj, obj$1, obj$2, offender, offender$1, offender$2, oldFramesToRecover, oldFramesToRecover$1, oldNextCharacterState, overlapResult, overlapped, overlapped$1, overlapped$2, patternId, playerCollider, playerCollider$1, playerCollider$2, playerCollider$3, playerColliders, playerShape, projectedMagnitude, pushbackVelX, pushbackVelX$1, pushbackVelY, pushbackVelY$1, pushbackX, pushbackY, roomCapacity, skillConfig, skillId, t, t$1, t$2, t$3, thatPlayerInNextFrame, thatPlayerInNextFrame$1, thatPlayerInNextFrame$2, thatPlayerInNextFrame$3, v, v$1, v$2, v$3, v$4, v$5, wx, wy, x, x$1, x$10, x$11, x$12, x$13, x$14, x$15, x$16, x$17, x$18, x$2, x$3, x$4, x$5, x$6, x$7, x$8, x$9, xfac, xfac$1, xfac$2, xfac$3, xfac$4, $s, $r, $c} = $restore(this, {inputsBuffer, currRenderFrame, collisionSys, collisionSysMap, collisionSpaceOffsetX, collisionSpaceOffsetY, chConfigsOrderedByJoinIndex}); + var {_1, _2, _entry, _entry$1, _entry$2, _entry$3, _entry$4, _entry$5, _i, _i$1, _i$10, _i$11, _i$12, _i$2, _i$3, _i$4, _i$5, _i$6, _i$7, _i$8, _i$9, _index, _index$1, _index$2, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _r$6, _r$7, _ref, _ref$1, _ref$10, _ref$11, _ref$12, _ref$13, _ref$14, _ref$15, _ref$16, _ref$17, _ref$18, _ref$2, _ref$3, _ref$4, _ref$5, _ref$6, _ref$7, _ref$8, _ref$9, _tmp, _tmp$1, _tmp$10, _tmp$11, _tmp$12, _tmp$13, _tmp$14, _tmp$15, _tmp$16, _tmp$17, _tmp$18, _tmp$19, _tmp$2, _tmp$20, _tmp$21, _tmp$22, _tmp$23, _tmp$24, _tmp$3, _tmp$4, _tmp$5, _tmp$6, _tmp$7, _tmp$8, _tmp$9, _tuple, _tuple$1, _tuple$10, _tuple$11, _tuple$12, _tuple$13, _tuple$14, _tuple$15, _tuple$16, _tuple$17, _tuple$2, _tuple$3, _tuple$4, _tuple$5, _tuple$6, _tuple$7, _tuple$8, _tuple$9, addToNextRenderFrame, atkedPlayerInNextFrame, atkedPlayerInNextFrame$1, bShape, bulletCollider, bulletColliders, bulletLocalId, bulletShape, bulletShape$1, bulletWx, bulletWx$1, bulletWy, bulletWy$1, chConfig, chConfig$1, chConfig$2, chConfigsOrderedByJoinIndex, colliderHeight, colliderWidth, colliderWorldHeight, colliderWorldWidth, collision, collision$1, collisionSpaceOffsetX, collisionSpaceOffsetY, collisionSys, collisionSysMap, currPlayerDownsync, currPlayerDownsync$1, currPlayerDownsync$2, currPlayerDownsync$3, currPlayerDownsync$4, currRenderFrame, defenderShape, defenderShape$1, effDx, effDy, effPushbacks, existent, existent$1, existent$2, existent$3, existent$4, existent$5, fireballBullet, halfColliderHeightDiff, halfColliderWidthDiff, halfColliderWorldHeightDiff, hardPushbackNorm, hardPushbackNorms, hasLockVel, hitboxSizeWx, hitboxSizeWx$1, hitboxSizeWy, hitboxSizeWy$1, i, i$1, i$2, i$3, i$4, inputsBuffer, isAnotherPlayer, isBarrier, isBullet, joinIndex, joinIndex$1, joinIndex$2, joinIndex$3, jumpedOrNot, jumpedOrNotList, landedOnGravityPushback, meleeBullet, newBullet, newBullet$1, newBulletCollider, newBulletCollider$1, newVx, newVy, nextRenderFrameFireballBullets, nextRenderFrameMeleeBullets, nextRenderFramePlayers, normAlignmentWithGravity, obj, obj$1, obj$2, offender, offender$1, offender$2, oldFramesToRecover, oldFramesToRecover$1, oldNextCharacterState, overlapResult, overlapped, overlapped$1, overlapped$2, patternId, playerCollider, playerCollider$1, playerCollider$2, playerCollider$3, playerColliders, playerShape, projectedMagnitude, pushbackVelX, pushbackVelX$1, pushbackVelY, pushbackVelY$1, pushbackX, pushbackY, roomCapacity, skillConfig, skillId, t, t$1, t$2, t$3, thatPlayerInNextFrame, thatPlayerInNextFrame$1, thatPlayerInNextFrame$2, thatPlayerInNextFrame$3, v, v$1, v$2, v$3, v$4, v$5, wx, wy, x, x$1, x$10, x$11, x$12, x$13, x$14, x$15, x$16, x$17, x$18, x$2, x$3, x$4, x$5, x$6, x$7, x$8, x$9, xfac, xfac$1, xfac$2, xfac$3, $s, $r, $c} = $restore(this, {inputsBuffer, currRenderFrame, collisionSys, collisionSysMap, collisionSpaceOffsetX, collisionSpaceOffsetY, chConfigsOrderedByJoinIndex}); /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: roomCapacity = currRenderFrame.PlayersArr.$length; nextRenderFramePlayers = $makeSlice(sliceType$6, roomCapacity); @@ -5593,22 +5599,20 @@ $packages["jsexport/battle"] = (function() { newBullet$1[0] = $clone(v$1, FireballBullet); newBullet$1[0].Bullet.BulletLocalId = bulletLocalId; bulletLocalId = bulletLocalId + (1) >> 0; - xfac$1 = 1; - if (0 > thatPlayerInNextFrame.DirX) { - xfac$1 = -xfac$1; - } - _tmp = currPlayerDownsync$1.VirtualGridX + ($imul(xfac$1, newBullet$1[0].Bullet.HitboxOffsetX)) >> 0; - _tmp$1 = currPlayerDownsync$1.VirtualGridY; + _tmp = currPlayerDownsync$1.VirtualGridX + ($imul(xfac, newBullet$1[0].Bullet.HitboxOffsetX)) >> 0; + _tmp$1 = currPlayerDownsync$1.VirtualGridY + newBullet$1[0].Bullet.HitboxOffsetY >> 0; newBullet$1[0].VirtualGridX = _tmp; newBullet$1[0].VirtualGridY = _tmp$1; newBullet$1[0].Bullet.OriginatedRenderFrameId = currRenderFrame.Id; newBullet$1[0].Bullet.OffenderJoinIndex = joinIndex; - newBullet$1[0].VelX = $imul(newBullet$1[0].Speed, xfac$1); + newBullet$1[0].DirX = xfac; + newBullet$1[0].DirY = 0; + newBullet$1[0].VelX = $imul(newBullet$1[0].Speed, xfac); newBullet$1[0].VelY = 0; nextRenderFrameFireballBullets = $append(nextRenderFrameFireballBullets, newBullet$1[0]); if (!((-1 === v$1.Bullet.SelfLockVelX))) { hasLockVel = true; - thatPlayerInNextFrame.VelX = $imul(xfac$1, v$1.Bullet.SelfLockVelX); + thatPlayerInNextFrame.VelX = $imul(xfac, v$1.Bullet.SelfLockVelX); } if (!((-1 === v$1.Bullet.SelfLockVelY))) { hasLockVel = true; @@ -5624,10 +5628,10 @@ $packages["jsexport/battle"] = (function() { } if (0 === currPlayerDownsync$1.FramesToRecover) { if (!((0 === effDx)) || !((0 === effDy))) { - _tmp$2 = effDx; - _tmp$3 = effDy; - thatPlayerInNextFrame.DirX = _tmp$2; - thatPlayerInNextFrame.DirY = _tmp$3; + if (!((0 === effDx))) { + thatPlayerInNextFrame.DirX = effDx; + } + thatPlayerInNextFrame.DirY = effDy; thatPlayerInNextFrame.VelX = $imul(effDx, currPlayerDownsync$1.Speed); thatPlayerInNextFrame.CharacterState = 1; } else { @@ -5646,36 +5650,36 @@ $packages["jsexport/battle"] = (function() { i$2 = _i$2; currPlayerDownsync$2 = ((_i$2 < 0 || _i$2 >= _ref$3.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$3.$array[_ref$3.$offset + _i$2]); joinIndex$1 = currPlayerDownsync$2.JoinIndex; - _tmp$4 = 0; - _tmp$5 = 0; - (x$2 = joinIndex$1 - 1 >> 0, ((x$2 < 0 || x$2 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + x$2])).X = _tmp$4; - (x$3 = joinIndex$1 - 1 >> 0, ((x$3 < 0 || x$3 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + x$3])).Y = _tmp$5; + _tmp$2 = 0; + _tmp$3 = 0; + (x$2 = joinIndex$1 - 1 >> 0, ((x$2 < 0 || x$2 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + x$2])).X = _tmp$2; + (x$3 = joinIndex$1 - 1 >> 0, ((x$3 < 0 || x$3 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + x$3])).Y = _tmp$3; chConfig$1 = ((i$2 < 0 || i$2 >= chConfigsOrderedByJoinIndex.$length) ? ($throwRuntimeError("index out of range"), undefined) : chConfigsOrderedByJoinIndex.$array[chConfigsOrderedByJoinIndex.$offset + i$2]); - _tmp$6 = currPlayerDownsync$2.VirtualGridX + currPlayerDownsync$2.VelX >> 0; - _tmp$7 = currPlayerDownsync$2.VirtualGridY + currPlayerDownsync$2.VelY >> 0; - newVx = _tmp$6; - newVy = _tmp$7; + _tmp$4 = currPlayerDownsync$2.VirtualGridX + currPlayerDownsync$2.VelX >> 0; + _tmp$5 = currPlayerDownsync$2.VirtualGridY + currPlayerDownsync$2.VelY >> 0; + newVx = _tmp$4; + newVy = _tmp$5; if (((i$2 < 0 || i$2 >= jumpedOrNotList.$length) ? ($throwRuntimeError("index out of range"), undefined) : jumpedOrNotList.$array[jumpedOrNotList.$offset + i$2])) { newVy = newVy + (chConfig$1.JumpingInitVelY) >> 0; } _tuple$2 = VirtualGridToWorldPos(newVx, newVy); wx = _tuple$2[0]; wy = _tuple$2[1]; - _tmp$8 = $imul(currPlayerDownsync$2.ColliderRadius, 2); - _tmp$9 = $imul(currPlayerDownsync$2.ColliderRadius, 4); - colliderWidth = _tmp$8; - colliderHeight = _tmp$9; + _tmp$6 = $imul(currPlayerDownsync$2.ColliderRadius, 2); + _tmp$7 = $imul(currPlayerDownsync$2.ColliderRadius, 4); + colliderWidth = _tmp$6; + colliderHeight = _tmp$7; _1 = currPlayerDownsync$2.CharacterState; if (_1 === (9)) { - _tmp$10 = $imul(currPlayerDownsync$2.ColliderRadius, 4); + _tmp$8 = $imul(currPlayerDownsync$2.ColliderRadius, 4); + _tmp$9 = $imul(currPlayerDownsync$2.ColliderRadius, 2); + colliderWidth = _tmp$8; + colliderHeight = _tmp$9; + } else if ((_1 === (8)) || (_1 === (4)) || (_1 === (5))) { + _tmp$10 = $imul(currPlayerDownsync$2.ColliderRadius, 2); _tmp$11 = $imul(currPlayerDownsync$2.ColliderRadius, 2); colliderWidth = _tmp$10; colliderHeight = _tmp$11; - } else if ((_1 === (8)) || (_1 === (4)) || (_1 === (5))) { - _tmp$12 = $imul(currPlayerDownsync$2.ColliderRadius, 2); - _tmp$13 = $imul(currPlayerDownsync$2.ColliderRadius, 2); - colliderWidth = _tmp$12; - colliderHeight = _tmp$13; } _tuple$3 = VirtualGridToWorldPos(colliderWidth, colliderHeight); colliderWorldWidth = _tuple$3[0]; @@ -5703,11 +5707,11 @@ $packages["jsexport/battle"] = (function() { /* */ $s = 12; continue; /* if (((meleeBullet.Bullet.OriginatedRenderFrameId + meleeBullet.Bullet.StartupFrames >> 0) <= currRenderFrame.Id) && (((meleeBullet.Bullet.OriginatedRenderFrameId + meleeBullet.Bullet.StartupFrames >> 0) + meleeBullet.Bullet.ActiveFrames >> 0) > currRenderFrame.Id)) { */ case 10: offender = (x$4 = currRenderFrame.PlayersArr, x$5 = meleeBullet.Bullet.OffenderJoinIndex - 1 >> 0, ((x$5 < 0 || x$5 >= x$4.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$4.$array[x$4.$offset + x$5])); - xfac$2 = 1; + xfac$1 = 1; if (0 > offender.DirX) { - xfac$2 = -xfac$2; + xfac$1 = -xfac$1; } - _tuple$4 = VirtualGridToWorldPos(offender.VirtualGridX + ($imul(xfac$2, meleeBullet.Bullet.HitboxOffsetX)) >> 0, offender.VirtualGridY); + _tuple$4 = VirtualGridToWorldPos(offender.VirtualGridX + ($imul(xfac$1, meleeBullet.Bullet.HitboxOffsetX)) >> 0, offender.VirtualGridY); bulletWx = _tuple$4[0]; bulletWy = _tuple$4[1]; _tuple$5 = VirtualGridToWorldPos(meleeBullet.Bullet.HitboxSizeX, meleeBullet.Bullet.HitboxSizeY); @@ -5773,12 +5777,12 @@ $packages["jsexport/battle"] = (function() { /* while (true) { */ case 27: /* if (!(_i$6 < _ref$7.$length)) { break; } */ if(!(_i$6 < _ref$7.$length)) { $s = 28; continue; } obj = ((_i$6 < 0 || _i$6 >= _ref$7.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$7.$array[_ref$7.$offset + _i$6]); + _tmp$12 = false; + _tmp$13 = false; _tmp$14 = false; - _tmp$15 = false; - _tmp$16 = false; - isBarrier = _tmp$14; - isAnotherPlayer = _tmp$15; - isBullet = _tmp$16; + isBarrier = _tmp$12; + isAnotherPlayer = _tmp$13; + isBullet = _tmp$14; _ref$8 = obj.Data; if ($assertType(_ref$8, ptrType$5, true)[1]) { isAnotherPlayer = true; @@ -5804,10 +5808,10 @@ $packages["jsexport/battle"] = (function() { } normAlignmentWithGravity = overlapResult.OverlapX * 0 + overlapResult.OverlapY * -1; if (isAnotherPlayer) { - _tmp$17 = (overlapResult.Overlap - 0.2) * overlapResult.OverlapX; - _tmp$18 = (overlapResult.Overlap - 0.2) * overlapResult.OverlapY; - pushbackX = _tmp$17; - pushbackY = _tmp$18; + _tmp$15 = (overlapResult.Overlap - 0.2) * overlapResult.OverlapX; + _tmp$16 = (overlapResult.Overlap - 0.2) * overlapResult.OverlapY; + pushbackX = _tmp$15; + pushbackY = _tmp$16; } _ref$9 = (x$8 = joinIndex$2 - 1 >> 0, ((x$8 < 0 || x$8 >= hardPushbackNorms.$length) ? ($throwRuntimeError("index out of range"), undefined) : hardPushbackNorms.$array[hardPushbackNorms.$offset + x$8])).$get(); _i$7 = 0; @@ -5844,10 +5848,10 @@ $packages["jsexport/battle"] = (function() { thatPlayerInNextFrame$2.CharacterState = 9; thatPlayerInNextFrame$2.FramesToRecover = chConfig$2.LayDownFramesToRecover; } else { - _tmp$19 = 0; - _tmp$20 = currPlayerDownsync$3.ColliderRadius; - halfColliderWidthDiff = _tmp$19; - halfColliderHeightDiff = _tmp$20; + _tmp$17 = 0; + _tmp$18 = currPlayerDownsync$3.ColliderRadius; + halfColliderWidthDiff = _tmp$17; + halfColliderHeightDiff = _tmp$18; _tuple$10 = VirtualGridToWorldPos(halfColliderWidthDiff, halfColliderHeightDiff); halfColliderWorldHeightDiff = _tuple$10[1]; _index$2 = joinIndex$2 - 1 >> 0; @@ -5928,14 +5932,14 @@ $packages["jsexport/battle"] = (function() { _i$9++; /* continue; */ $s = 37; continue; } - xfac$3 = 1; + xfac$2 = 1; if (0 > offender$1.DirX) { - xfac$3 = -xfac$3; + xfac$2 = -xfac$2; } - _tmp$21 = $imul(xfac$3, v$2.Bullet.PushbackVelX); - _tmp$22 = v$2.Bullet.PushbackVelY; - pushbackVelX = _tmp$21; - pushbackVelY = _tmp$22; + _tmp$19 = $imul(xfac$2, v$2.Bullet.PushbackVelX); + _tmp$20 = v$2.Bullet.PushbackVelY; + pushbackVelX = _tmp$19; + pushbackVelY = _tmp$20; atkedPlayerInNextFrame = (x$11 = t.JoinIndex - 1 >> 0, ((x$11 < 0 || x$11 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + x$11])); atkedPlayerInNextFrame.VelX = pushbackVelX; atkedPlayerInNextFrame.VelY = pushbackVelY; @@ -5994,14 +5998,14 @@ $packages["jsexport/battle"] = (function() { _i$10++; /* continue; */ $s = 43; continue; } - xfac$4 = 1; + xfac$3 = 1; if (0 > offender$2.DirX) { - xfac$4 = -xfac$4; + xfac$3 = -xfac$3; } - _tmp$23 = $imul(xfac$4, v$3.Bullet.PushbackVelX); - _tmp$24 = v$3.Bullet.PushbackVelY; - pushbackVelX$1 = _tmp$23; - pushbackVelY$1 = _tmp$24; + _tmp$21 = $imul(xfac$3, v$3.Bullet.PushbackVelX); + _tmp$22 = v$3.Bullet.PushbackVelY; + pushbackVelX$1 = _tmp$21; + pushbackVelY$1 = _tmp$22; atkedPlayerInNextFrame$1 = (x$15 = t$2.JoinIndex - 1 >> 0, ((x$15 < 0 || x$15 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + x$15])); atkedPlayerInNextFrame$1.VelX = pushbackVelX$1; atkedPlayerInNextFrame$1.VelY = pushbackVelY$1; @@ -6031,10 +6035,10 @@ $packages["jsexport/battle"] = (function() { nextRenderFrameMeleeBullets = $append(nextRenderFrameMeleeBullets, v$4); } else if ($assertType(_ref$16, ptrType$6, true)[1]) { v$5 = _ref$16.$val; - _tmp$25 = v$5.VirtualGridX + v$5.VelX >> 0; - _tmp$26 = v$5.VirtualGridY + v$5.VelY >> 0; - v$5.VirtualGridX = _tmp$25; - v$5.VirtualGridY = _tmp$26; + _tmp$23 = v$5.VirtualGridX + v$5.VelX >> 0; + _tmp$24 = v$5.VirtualGridY + v$5.VelY >> 0; + v$5.VirtualGridX = _tmp$23; + v$5.VirtualGridY = _tmp$24; nextRenderFrameFireballBullets = $append(nextRenderFrameFireballBullets, v$5); } } @@ -6088,7 +6092,7 @@ $packages["jsexport/battle"] = (function() { _i$12++; } $s = -1; return new RoomDownsyncFrame.ptr(currRenderFrame.Id + 1 >> 0, nextRenderFramePlayers, new $Int64(0, 0), nextRenderFrameMeleeBullets, nextRenderFrameFireballBullets, new $Uint64(0, 0), false, bulletLocalId); - /* */ } return; } var $f = {$blk: ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame, $c: true, $r, _1, _2, _entry, _entry$1, _entry$2, _entry$3, _entry$4, _entry$5, _i, _i$1, _i$10, _i$11, _i$12, _i$2, _i$3, _i$4, _i$5, _i$6, _i$7, _i$8, _i$9, _index, _index$1, _index$2, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _r$6, _r$7, _ref, _ref$1, _ref$10, _ref$11, _ref$12, _ref$13, _ref$14, _ref$15, _ref$16, _ref$17, _ref$18, _ref$2, _ref$3, _ref$4, _ref$5, _ref$6, _ref$7, _ref$8, _ref$9, _tmp, _tmp$1, _tmp$10, _tmp$11, _tmp$12, _tmp$13, _tmp$14, _tmp$15, _tmp$16, _tmp$17, _tmp$18, _tmp$19, _tmp$2, _tmp$20, _tmp$21, _tmp$22, _tmp$23, _tmp$24, _tmp$25, _tmp$26, _tmp$3, _tmp$4, _tmp$5, _tmp$6, _tmp$7, _tmp$8, _tmp$9, _tuple, _tuple$1, _tuple$10, _tuple$11, _tuple$12, _tuple$13, _tuple$14, _tuple$15, _tuple$16, _tuple$17, _tuple$2, _tuple$3, _tuple$4, _tuple$5, _tuple$6, _tuple$7, _tuple$8, _tuple$9, addToNextRenderFrame, atkedPlayerInNextFrame, atkedPlayerInNextFrame$1, bShape, bulletCollider, bulletColliders, bulletLocalId, bulletShape, bulletShape$1, bulletWx, bulletWx$1, bulletWy, bulletWy$1, chConfig, chConfig$1, chConfig$2, chConfigsOrderedByJoinIndex, colliderHeight, colliderWidth, colliderWorldHeight, colliderWorldWidth, collision, collision$1, collisionSpaceOffsetX, collisionSpaceOffsetY, collisionSys, collisionSysMap, currPlayerDownsync, currPlayerDownsync$1, currPlayerDownsync$2, currPlayerDownsync$3, currPlayerDownsync$4, currRenderFrame, defenderShape, defenderShape$1, effDx, effDy, effPushbacks, existent, existent$1, existent$2, existent$3, existent$4, existent$5, fireballBullet, halfColliderHeightDiff, halfColliderWidthDiff, halfColliderWorldHeightDiff, hardPushbackNorm, hardPushbackNorms, hasLockVel, hitboxSizeWx, hitboxSizeWx$1, hitboxSizeWy, hitboxSizeWy$1, i, i$1, i$2, i$3, i$4, inputsBuffer, isAnotherPlayer, isBarrier, isBullet, joinIndex, joinIndex$1, joinIndex$2, joinIndex$3, jumpedOrNot, jumpedOrNotList, landedOnGravityPushback, meleeBullet, newBullet, newBullet$1, newBulletCollider, newBulletCollider$1, newVx, newVy, nextRenderFrameFireballBullets, nextRenderFrameMeleeBullets, nextRenderFramePlayers, normAlignmentWithGravity, obj, obj$1, obj$2, offender, offender$1, offender$2, oldFramesToRecover, oldFramesToRecover$1, oldNextCharacterState, overlapResult, overlapped, overlapped$1, overlapped$2, patternId, playerCollider, playerCollider$1, playerCollider$2, playerCollider$3, playerColliders, playerShape, projectedMagnitude, pushbackVelX, pushbackVelX$1, pushbackVelY, pushbackVelY$1, pushbackX, pushbackY, roomCapacity, skillConfig, skillId, t, t$1, t$2, t$3, thatPlayerInNextFrame, thatPlayerInNextFrame$1, thatPlayerInNextFrame$2, thatPlayerInNextFrame$3, v, v$1, v$2, v$3, v$4, v$5, wx, wy, x, x$1, x$10, x$11, x$12, x$13, x$14, x$15, x$16, x$17, x$18, x$2, x$3, x$4, x$5, x$6, x$7, x$8, x$9, xfac, xfac$1, xfac$2, xfac$3, xfac$4, $s};return $f; + /* */ } return; } var $f = {$blk: ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame, $c: true, $r, _1, _2, _entry, _entry$1, _entry$2, _entry$3, _entry$4, _entry$5, _i, _i$1, _i$10, _i$11, _i$12, _i$2, _i$3, _i$4, _i$5, _i$6, _i$7, _i$8, _i$9, _index, _index$1, _index$2, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _r$6, _r$7, _ref, _ref$1, _ref$10, _ref$11, _ref$12, _ref$13, _ref$14, _ref$15, _ref$16, _ref$17, _ref$18, _ref$2, _ref$3, _ref$4, _ref$5, _ref$6, _ref$7, _ref$8, _ref$9, _tmp, _tmp$1, _tmp$10, _tmp$11, _tmp$12, _tmp$13, _tmp$14, _tmp$15, _tmp$16, _tmp$17, _tmp$18, _tmp$19, _tmp$2, _tmp$20, _tmp$21, _tmp$22, _tmp$23, _tmp$24, _tmp$3, _tmp$4, _tmp$5, _tmp$6, _tmp$7, _tmp$8, _tmp$9, _tuple, _tuple$1, _tuple$10, _tuple$11, _tuple$12, _tuple$13, _tuple$14, _tuple$15, _tuple$16, _tuple$17, _tuple$2, _tuple$3, _tuple$4, _tuple$5, _tuple$6, _tuple$7, _tuple$8, _tuple$9, addToNextRenderFrame, atkedPlayerInNextFrame, atkedPlayerInNextFrame$1, bShape, bulletCollider, bulletColliders, bulletLocalId, bulletShape, bulletShape$1, bulletWx, bulletWx$1, bulletWy, bulletWy$1, chConfig, chConfig$1, chConfig$2, chConfigsOrderedByJoinIndex, colliderHeight, colliderWidth, colliderWorldHeight, colliderWorldWidth, collision, collision$1, collisionSpaceOffsetX, collisionSpaceOffsetY, collisionSys, collisionSysMap, currPlayerDownsync, currPlayerDownsync$1, currPlayerDownsync$2, currPlayerDownsync$3, currPlayerDownsync$4, currRenderFrame, defenderShape, defenderShape$1, effDx, effDy, effPushbacks, existent, existent$1, existent$2, existent$3, existent$4, existent$5, fireballBullet, halfColliderHeightDiff, halfColliderWidthDiff, halfColliderWorldHeightDiff, hardPushbackNorm, hardPushbackNorms, hasLockVel, hitboxSizeWx, hitboxSizeWx$1, hitboxSizeWy, hitboxSizeWy$1, i, i$1, i$2, i$3, i$4, inputsBuffer, isAnotherPlayer, isBarrier, isBullet, joinIndex, joinIndex$1, joinIndex$2, joinIndex$3, jumpedOrNot, jumpedOrNotList, landedOnGravityPushback, meleeBullet, newBullet, newBullet$1, newBulletCollider, newBulletCollider$1, newVx, newVy, nextRenderFrameFireballBullets, nextRenderFrameMeleeBullets, nextRenderFramePlayers, normAlignmentWithGravity, obj, obj$1, obj$2, offender, offender$1, offender$2, oldFramesToRecover, oldFramesToRecover$1, oldNextCharacterState, overlapResult, overlapped, overlapped$1, overlapped$2, patternId, playerCollider, playerCollider$1, playerCollider$2, playerCollider$3, playerColliders, playerShape, projectedMagnitude, pushbackVelX, pushbackVelX$1, pushbackVelY, pushbackVelY$1, pushbackX, pushbackY, roomCapacity, skillConfig, skillId, t, t$1, t$2, t$3, thatPlayerInNextFrame, thatPlayerInNextFrame$1, thatPlayerInNextFrame$2, thatPlayerInNextFrame$3, v, v$1, v$2, v$3, v$4, v$5, wx, wy, x, x$1, x$10, x$11, x$12, x$13, x$14, x$15, x$16, x$17, x$18, x$2, x$3, x$4, x$5, x$6, x$7, x$8, x$9, xfac, xfac$1, xfac$2, xfac$3, $s};return $f; }; $pkg.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame = ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame; GenerateRectCollider = function(wx, wy, w, h, topPadding, bottomPadding, leftPadding, rightPadding, spaceOffsetX, spaceOffsetY, data, tag) { @@ -6214,7 +6218,7 @@ $packages["jsexport/battle"] = (function() { $r = math.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } $r = resolv.$init(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } $pkg.DIRECTION_DECODER = new sliceType$1([new sliceType([0, 0]), new sliceType([0, 2]), new sliceType([0, -2]), new sliceType([2, 0]), new sliceType([-2, 0]), new sliceType([1, 1]), new sliceType([-1, -1]), new sliceType([1, -1]), new sliceType([-1, 1])]); - skills = $makeMap($Int.keyFor, [{ k: 1, v: new Skill.ptr(0, 30, 30, 30, 1, 2, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 7, 13, 30, 22, 13, 9, 50, 0, 5, 5, -1, 1200, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 2 }]), 0))])) }, { k: 2, v: new Skill.ptr(0, 36, 36, 36, 1, 11, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 18, 22, 36, 18, 18, 9, 50, 0, 5, 10, -1, 1800, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 3 }]), 0))])) }, { k: 3, v: new Skill.ptr(0, 50, 50, 50, 1, 12, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 15, 0, 0, 30, 999999999, 9, 200, 700, 10, 50, 500, 3200, 0, 4800, 3200, true, false, 0))])) }, { k: 4, v: new Skill.ptr(0, 30, 30, 30, 1, 2, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 7, 13, 30, 22, 13, 9, 50, 0, 5, 5, -1, 1200, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 5 }]), 0))])) }, { k: 5, v: new Skill.ptr(0, 36, 36, 36, 1, 11, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 18, 22, 36, 18, 18, 9, 50, 0, 5, 10, -1, 1800, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 6 }]), 0))])) }, { k: 6, v: new Skill.ptr(0, 45, 45, 45, 1, 12, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 15, 0, 0, 28, 999999999, 9, 200, 700, 10, -10, -1, 2400, 0, 3200, 3200, true, false, 0))])) }, { k: 7, v: new Skill.ptr(0, 30, 30, 30, 1, 2, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 7, 13, 30, 22, 13, 9, 50, 0, 5, 5, -1, 1200, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 2 }]), 0))])) }, { k: 8, v: new Skill.ptr(0, 36, 36, 36, 1, 11, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 18, 22, 36, 18, 18, 9, 50, 0, 5, 10, -1, 1800, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 3 }]), 0))])) }, { k: 9, v: new Skill.ptr(0, 50, 50, 50, 1, 12, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 15, 0, 0, 30, 999999999, 9, 200, 700, 10, 50, 500, 3200, 0, 4800, 3200, false, false, 0))])) }, { k: 10, v: new Skill.ptr(0, 40, 40, 40, 1, 13, new sliceType$2([new FireballBullet.ptr(0, 0, 0, 0, 0, 0, 800, 1, new Bullet.ptr(0, 0, 0, 15, 0, 0, 999999999, 15, 9, 200, 0, 20, -1, -1, 3200, 0, 4800, 3200, false, false, 0))])) }, { k: 255, v: new Skill.ptr(0, 30, 30, 30, 1, 6, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 3, 0, 0, 20, 18, 9, 50, 0, 5, -1, -1, 1200, 0, 3200, 2400, false, false, 0))])) }, { k: 256, v: new Skill.ptr(0, 20, 20, 20, 1, 6, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 3, 0, 0, 10, 15, 9, 50, 0, 5, -1, -1, 1200, 0, 3200, 2400, false, false, 0))])) }, { k: 257, v: new Skill.ptr(0, 30, 30, 30, 1, 6, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 3, 0, 0, 20, 18, 9, 50, 0, 5, -1, -1, 1200, 0, 3200, 2400, false, false, 0))])) }]); + skills = $makeMap($Int.keyFor, [{ k: 1, v: new Skill.ptr(0, 30, 30, 30, 1, 2, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 7, 13, 30, 22, 13, 9, 50, 0, 5, 5, -1, 1200, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 2 }]), 0))])) }, { k: 2, v: new Skill.ptr(0, 36, 36, 36, 1, 11, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 18, 22, 36, 18, 18, 9, 50, 0, 5, 10, -1, 1800, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 3 }]), 0))])) }, { k: 3, v: new Skill.ptr(0, 50, 50, 50, 1, 12, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 8, 0, 0, 30, 999999999, 9, 200, 700, 10, 50, 500, 1600, 800, 3200, 3200, true, false, 0))])) }, { k: 4, v: new Skill.ptr(0, 30, 30, 30, 1, 2, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 7, 13, 30, 22, 13, 9, 50, 0, 5, 5, -1, 1200, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 5 }]), 0))])) }, { k: 5, v: new Skill.ptr(0, 36, 36, 36, 1, 11, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 18, 22, 36, 18, 18, 9, 50, 0, 5, 10, -1, 1800, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 6 }]), 0))])) }, { k: 6, v: new Skill.ptr(0, 45, 45, 45, 1, 12, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 8, 0, 0, 28, 999999999, 9, 200, -1, 10, -10, -1, 2400, 0, 3200, 3200, true, false, 0))])) }, { k: 7, v: new Skill.ptr(0, 30, 30, 30, 1, 2, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 7, 13, 30, 22, 13, 9, 50, 0, 5, -1, -1, 1200, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 8 }]), 0))])) }, { k: 8, v: new Skill.ptr(0, 36, 36, 36, 1, 11, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 18, 22, 36, 18, 18, 9, 50, 0, 5, 10, -1, 1800, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 9 }]), 0))])) }, { k: 9, v: new Skill.ptr(0, 40, 40, 40, 1, 12, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 7, 0, 0, 30, 999999999, 9, 200, 400, 10, 100, -1, 1000, 0, 3200, 3200, true, false, 0))])) }, { k: 10, v: new Skill.ptr(0, 40, 40, 40, 1, 13, new sliceType$2([new FireballBullet.ptr(0, 0, 0, 0, 0, 0, 800, 1, new Bullet.ptr(0, 0, 0, 15, 0, 0, 999999999, 15, 9, 200, 0, 20, -1, -1, 3200, 500, 4800, 3200, false, false, 0))])) }, { k: 11, v: new Skill.ptr(0, 60, 60, 60, 1, 14, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 3, 0, 0, 25, 999999999, 9, 200, 700, 30, 100, 800, 800, 0, 4000, 6400, true, false, 0))])) }, { k: 255, v: new Skill.ptr(0, 30, 30, 30, 1, 6, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 3, 0, 0, 20, 18, 9, 50, 0, 5, -1, -1, 1200, 0, 3200, 2400, false, false, 0))])) }, { k: 256, v: new Skill.ptr(0, 20, 20, 20, 1, 6, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 3, 0, 0, 10, 15, 9, 50, 0, 5, -1, -1, 1200, 0, 3200, 2400, false, false, 0))])) }, { k: 257, v: new Skill.ptr(0, 30, 30, 30, 1, 6, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 3, 0, 0, 20, 18, 9, 50, 0, 5, -1, -1, 1200, 0, 3200, 2400, false, false, 0))])) }]); $pkg.Characters = $makeMap($Int.keyFor, [{ k: 0, v: new CharacterConfig.ptr(0, "MonkGirl", 11, 1, 16, 16, 10, 27, 120, 800, (function(patternId, currPlayerDownsync) { var _entry, _entry$1, _ref, _tuple, _tuple$1, currPlayerDownsync, existent1, existent2, nextSkillId, patternId, skillConfig, v, x, x$1; if (1 === patternId) { @@ -6282,7 +6286,7 @@ $packages["jsexport/battle"] = (function() { if (currPlayerDownsync.InAir) { return 257; } else { - return 10; + return 7; } } else { _tuple = (_entry = skills[$Int.keyFor(((currPlayerDownsync.ActiveSkillId >> 0)))], _entry !== undefined ? [_entry.v, true] : [ptrType.nil, false]); @@ -6303,6 +6307,14 @@ $packages["jsexport/battle"] = (function() { } } } + } else if (2 === patternId) { + if (!currPlayerDownsync.InAir) { + return 11; + } + } else if (3 === patternId) { + if (!currPlayerDownsync.InAir) { + return 10; + } } return -1; })) }]); diff --git a/frontend/assets/resources/animation/Monk/Atk3.anim b/frontend/assets/resources/animation/Monk/Atk3.anim index 2d3e973..08ef99b 100644 --- a/frontend/assets/resources/animation/Monk/Atk3.anim +++ b/frontend/assets/resources/animation/Monk/Atk3.anim @@ -3,7 +3,7 @@ "_name": "Atk3", "_objFlags": 0, "_native": "", - "_duration": 0.6333333333333333, + "_duration": 0.5333333333333333, "sample": 60, "speed": 1, "wrapMode": 1, @@ -13,84 +13,72 @@ "spriteFrame": [ { "frame": 0, - "value": { - "__uuid__": "318745eb-06b1-4e7f-88d1-e23e02d99e67" - } - }, - { - "frame": 0.06666666666666667, - "value": { - "__uuid__": "a64b6f59-fa72-4f5d-89dc-81a469244ea5" - } - }, - { - "frame": 0.11666666666666667, - "value": { - "__uuid__": "f800d4a1-2396-4aa5-a578-11481db1d8bf" - } - }, - { - "frame": 0.16666666666666666, "value": { "__uuid__": "d97f6a5f-8e63-40d7-bd14-9dc71e15e5db" } }, { - "frame": 0.23333333333333334, + "frame": 0.03333333333333333, "value": { "__uuid__": "196bcbf9-e89f-4b26-b736-73e2fa787e50" } }, { - "frame": 0.3, + "frame": 0.08333333333333333, "value": { "__uuid__": "3229e023-e63d-4a4e-af72-2b1409ea43c5" } }, { - "frame": 0.36666666666666664, + "frame": 0.11666666666666667, "value": { "__uuid__": "e2d6e8b8-b468-4edb-b8c3-860bd85ebeae" } }, { - "frame": 0.4166666666666667, + "frame": 0.16666666666666666, + "value": { + "__uuid__": "318745eb-06b1-4e7f-88d1-e23e02d99e67" + } + }, + { + "frame": 0.21666666666666667, "value": { "__uuid__": "bba6f088-0e1f-4a12-9872-41670be1152a" } }, { - "frame": 0.45, + "frame": 0.26666666666666666, "value": { "__uuid__": "2c5de5b2-9009-48fa-bef4-ae34cc94f876" } }, { - "frame": 0.48333333333333334, + "frame": 0.31666666666666665, "value": { "__uuid__": "6f27b252-6eaf-4b4b-9c5a-46ba899e4845" } }, { - "frame": 0.5166666666666667, + "frame": 0.36666666666666664, "value": { "__uuid__": "4ebd5c60-efa6-4950-a4c8-74a7a8517333" } }, { - "frame": 0.55, + "frame": 0.4166666666666667, "value": { "__uuid__": "a207290f-4556-4adb-8a11-e1d5ba342550" } }, { - "frame": 0.5833333333333334, + "frame": 0.4666666666666667, "value": { "__uuid__": "e9d442d2-981d-437d-87c0-085162017de7" } }, { - "frame": 0.6166666666666667, + "frame": 0.5166666666666667, "value": { "__uuid__": "9b4d5c8c-5ec0-4fd7-a45e-6b0bc8ff9119" } diff --git a/frontend/assets/resources/animation/Monk/Atk5.anim b/frontend/assets/resources/animation/Monk/Atk5.anim new file mode 100644 index 0000000..de24421 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/Atk5.anim @@ -0,0 +1,85 @@ +{ + "__type__": "cc.AnimationClip", + "_name": "Atk5", + "_objFlags": 0, + "_native": "", + "_duration": 1.0166666666666666, + "sample": 60, + "speed": 1, + "wrapMode": 1, + "curveData": { + "comps": { + "cc.Sprite": { + "spriteFrame": [ + { + "frame": 0, + "value": { + "__uuid__": "6aa88bb9-0427-496f-ae7d-dc06410e904e" + } + }, + { + "frame": 0.08333333333333333, + "value": { + "__uuid__": "cdc65f83-c526-48b6-8a96-758b098568fe" + } + }, + { + "frame": 0.16666666666666666, + "value": { + "__uuid__": "927636af-2d1d-4801-a546-857f5eeb256d" + } + }, + { + "frame": 0.26666666666666666, + "value": { + "__uuid__": "2aeeb833-9151-4160-9775-9e08a376fd63" + } + }, + { + "frame": 0.36666666666666664, + "value": { + "__uuid__": "2bd1de9e-30e5-4bc5-b6c3-5c286754b0b7" + } + }, + { + "frame": 0.4666666666666667, + "value": { + "__uuid__": "15a6ebb3-289a-46fb-ac94-f6efa0d90510" + } + }, + { + "frame": 0.5833333333333334, + "value": { + "__uuid__": "6ca922c0-cb62-4b1b-8773-79685a58bbd6" + } + }, + { + "frame": 0.7, + "value": { + "__uuid__": "d60ceb6f-3a45-47dd-8d3f-bcfe8c919d85" + } + }, + { + "frame": 0.8, + "value": { + "__uuid__": "c313f6a1-e0fa-4321-8336-c32f471b2592" + } + }, + { + "frame": 0.9, + "value": { + "__uuid__": "bb886d03-7f3e-45c8-acfd-393091f09adb" + } + }, + { + "frame": 1, + "value": { + "__uuid__": "1be255c3-f8c9-43ae-be68-2e500e7f1125" + } + } + ] + } + } + }, + "events": [] +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/Atk5.anim.meta b/frontend/assets/resources/animation/Monk/Atk5.anim.meta new file mode 100644 index 0000000..98eaa58 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/Atk5.anim.meta @@ -0,0 +1,5 @@ +{ + "ver": "2.1.0", + "uuid": "0abbd156-980e-475e-9994-3c958bd913fc", + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/resources/prefabs/ControlledCharacter.prefab b/frontend/assets/resources/prefabs/ControlledCharacter.prefab index a0a6592..2d0aa61 100644 --- a/frontend/assets/resources/prefabs/ControlledCharacter.prefab +++ b/frontend/assets/resources/prefabs/ControlledCharacter.prefab @@ -811,6 +811,9 @@ }, { "__uuid__": "7e0a1e98-ee5a-446f-bec2-7d72b6916503" + }, + { + "__uuid__": "0abbd156-980e-475e-9994-3c958bd913fc" } ], "playOnLoad": false, diff --git a/frontend/assets/scenes/offline_map.fire b/frontend/assets/scenes/offline_map.fire index 4ebd00f..0e41cfd 100644 --- a/frontend/assets/scenes/offline_map.fire +++ b/frontend/assets/scenes/offline_map.fire @@ -464,7 +464,7 @@ "array": [ 0, 0, - 210.49935741157617, + 216.63421096211545, 0, 0, 0, diff --git a/frontend/assets/scripts/AttackingCharacter.js b/frontend/assets/scripts/AttackingCharacter.js index 5687760..269fe0a 100644 --- a/frontend/assets/scripts/AttackingCharacter.js +++ b/frontend/assets/scripts/AttackingCharacter.js @@ -15,6 +15,7 @@ window.ATK_CHARACTER_STATE = { Atk2: [11, "Atk2"], Atk3: [12, "Atk3"], Atk4: [13, "Atk4"], + Atk5: [14, "Atk5"], }; window.ATK_CHARACTER_STATE_ARR = []; diff --git a/frontend/assets/scripts/Fireball.js b/frontend/assets/scripts/Fireball.js index 6d7d727..8777af9 100644 --- a/frontend/assets/scripts/Fireball.js +++ b/frontend/assets/scripts/Fireball.js @@ -7,20 +7,33 @@ cc.Class({ this.speciesName = null; }, - setSpecies(speciesName) { + setSpecies(speciesName, fireballBullet, rdf) { if (speciesName == this.speciesName) return; this.speciesName = speciesName; this.effAnimNode = this.node.getChildByName(this.speciesName); this.animComp = this.effAnimNode.getComponent(cc.Animation); this.effAnimNode.active = true; for (let k in this.children) { - const child = this.children[k]; - if (!child.active) continue; - if (child == effAnimNode || child.name == speciesName) continue; - child.active = false; + const child = this.children[k]; + if (!child.active) continue; + if (child == effAnimNode || child.name == speciesName) continue; + child.active = false; } + this.updateAnim(speciesName, fireballBullet, rdf); }, - onLoad() { + onLoad() {}, + + updateAnim(speciesName, fireballBullet, rdf) { + // Update directions + if (this.animComp && this.animComp.node) { + if (0 > fireballBullet.DirX) { + this.effAnimNode.scaleX = (-1.0); + } else if (0 < fireballBullet.DirX) { + this.effAnimNode.scaleX = (1.0); + } + } + + this.animComp.play(speciesName); }, }); diff --git a/frontend/assets/scripts/Map.js b/frontend/assets/scripts/Map.js index 236169a..06aed96 100644 --- a/frontend/assets/scripts/Map.js +++ b/frontend/assets/scripts/Map.js @@ -1067,7 +1067,7 @@ othersForcedDownsyncRenderFrame=${JSON.stringify(othersForcedDownsyncRenderFrame } }, - _renderFireballBullet(fireballBullet) { + _renderFireballBullet(fireballBullet, rdf) { const self = this; let pqNode = self.cachedFireballs.popAny(fireballBullet.Bullet.BulletLocalId); const speciesName = `Fireball${fireballBullet.SpeciesId}`; @@ -1078,7 +1078,7 @@ othersForcedDownsyncRenderFrame=${JSON.stringify(othersForcedDownsyncRenderFrame console.log(`Using a cached fireball node for rendering for bulletLocalId=${fireballBullet.Bullet.BulletLocalId}`); } const cachedFireball = pqNode.value; - cachedFireball.setSpecies(speciesName); + cachedFireball.setSpecies(speciesName, fireballBullet, rdf); cachedFireball.lastUsed = self.renderFrameId; cachedFireball.bulletLocalId = fireballBullet.Bullet.BulletLocalId; @@ -1111,7 +1111,9 @@ othersForcedDownsyncRenderFrame=${JSON.stringify(othersForcedDownsyncRenderFrame const fireballBullets = rdf.FireballBullets; for (let k in fireballBullets) { const fireballBullet = fireballBullets[k]; - self._renderFireballBullet(fireballBullet); + if ((fireballBullet.Bullet.OriginatedRenderFrameId + fireballBullet.Bullet.StartupFrames <= rdf.Id) && (fireballBullet.Bullet.OriginatedRenderFrameId + fireballBullet.Bullet.StartupFrames + fireballBullet.Bullet.ActiveFrames > rdf.Id)) { + self._renderFireballBullet(fireballBullet, rdf); + } } // Update countdown diff --git a/jsexport/battle/battle.go b/jsexport/battle/battle.go index ad011d0..50d7a69 100644 --- a/jsexport/battle/battle.go +++ b/jsexport/battle/battle.go @@ -65,6 +65,7 @@ const ( ATK_CHARACTER_STATE_ATK2 = int32(11) ATK_CHARACTER_STATE_ATK3 = int32(12) ATK_CHARACTER_STATE_ATK4 = int32(13) + ATK_CHARACTER_STATE_ATK5 = int32(14) ) var inAirSet = map[int32]bool{ @@ -425,7 +426,13 @@ func deriveOpPattern(currPlayerDownsync, thatPlayerInNextFrame *PlayerDownsync, patternId := PATTERN_ID_NO_OP if decodedInput.BtnALevel > prevBtnALevel { - patternId = 1 + if 0 > effDy { + patternId = 3 + } else if 0 < effDy { + patternId = 2 + } else { + patternId = 1 + } } return patternId, jumpedOrNot, effDx, effDy @@ -521,13 +528,11 @@ func ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(inputsBuffer *RingBuffer var newBullet FireballBullet = *v // Copied primitive fields into an onstack variable newBullet.BulletLocalId = bulletLocalId bulletLocalId++ - xfac := int32(1) - if 0 > thatPlayerInNextFrame.DirX { - xfac = -xfac - } - newBullet.VirtualGridX, newBullet.VirtualGridY = currPlayerDownsync.VirtualGridX+xfac*newBullet.HitboxOffsetX, currPlayerDownsync.VirtualGridY + newBullet.VirtualGridX, newBullet.VirtualGridY = currPlayerDownsync.VirtualGridX+xfac*newBullet.HitboxOffsetX, currPlayerDownsync.VirtualGridY+newBullet.HitboxOffsetY newBullet.OriginatedRenderFrameId = currRenderFrame.Id newBullet.OffenderJoinIndex = joinIndex + newBullet.DirX = xfac + newBullet.DirY = 0 newBullet.VelX = newBullet.Speed * xfac newBullet.VelY = 0 nextRenderFrameFireballBullets = append(nextRenderFrameFireballBullets, &newBullet) @@ -550,7 +555,10 @@ func ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(inputsBuffer *RingBuffer if 0 == currPlayerDownsync.FramesToRecover { if 0 != effDx || 0 != effDy { - thatPlayerInNextFrame.DirX, thatPlayerInNextFrame.DirY = effDx, effDy + if 0 != effDx { + thatPlayerInNextFrame.DirX = effDx + } + thatPlayerInNextFrame.DirY = effDy thatPlayerInNextFrame.VelX = effDx * currPlayerDownsync.Speed thatPlayerInNextFrame.CharacterState = ATK_CHARACTER_STATE_WALKING } else { diff --git a/jsexport/battle/characterConfig.go b/jsexport/battle/characterConfig.go index 3f8026d..73902a9 100644 --- a/jsexport/battle/characterConfig.go +++ b/jsexport/battle/characterConfig.go @@ -130,7 +130,7 @@ var Characters = map[int]*CharacterConfig{ if currPlayerDownsync.InAir { return 257 } else { - return 10 + return 7 } } else { // Now that "0 < FramesToRecover", we're only able to fire any skill if it's a cancellation @@ -145,6 +145,14 @@ var Characters = map[int]*CharacterConfig{ } } } + } else if 2 == patternId { + if !currPlayerDownsync.InAir { + return 11 + } + } else if 3 == patternId { + if !currPlayerDownsync.InAir { + return 10 + } } // By default no skill can be fired @@ -227,7 +235,7 @@ var skills = map[int]*Skill{ Hits: []interface{}{ &MeleeBullet{ Bullet: Bullet{ - StartupFrames: int32(15), + StartupFrames: int32(8), ActiveFrames: int32(30), HitStunFrames: MAX_INT32, BlockStunFrames: int32(9), @@ -236,9 +244,9 @@ var skills = map[int]*Skill{ SelfLockVelY: int32(float64(5) * WORLD_TO_VIRTUAL_GRID_RATIO), PushbackVelX: int32(float64(2) * WORLD_TO_VIRTUAL_GRID_RATIO), PushbackVelY: int32(float64(7) * WORLD_TO_VIRTUAL_GRID_RATIO), - HitboxOffsetX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), - HitboxOffsetY: int32(0), - HitboxSizeX: int32(float64(48) * WORLD_TO_VIRTUAL_GRID_RATIO), + HitboxOffsetX: int32(float64(16) * WORLD_TO_VIRTUAL_GRID_RATIO), + HitboxOffsetY: int32(float64(8) * WORLD_TO_VIRTUAL_GRID_RATIO), + HitboxSizeX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), BlowUp: true, }, @@ -318,7 +326,7 @@ var skills = map[int]*Skill{ Hits: []interface{}{ &MeleeBullet{ Bullet: Bullet{ - StartupFrames: int32(15), + StartupFrames: int32(8), ActiveFrames: int32(28), HitStunFrames: MAX_INT32, BlockStunFrames: int32(9), @@ -326,7 +334,7 @@ var skills = map[int]*Skill{ SelfLockVelX: int32(float64(-0.1) * WORLD_TO_VIRTUAL_GRID_RATIO), SelfLockVelY: NO_LOCK_VEL, PushbackVelX: int32(float64(2) * WORLD_TO_VIRTUAL_GRID_RATIO), - PushbackVelY: int32(float64(7) * WORLD_TO_VIRTUAL_GRID_RATIO), + PushbackVelY: NO_LOCK_VEL, HitboxOffsetX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxOffsetY: int32(0), HitboxSizeX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), @@ -350,7 +358,7 @@ var skills = map[int]*Skill{ HitStunFrames: int32(13), BlockStunFrames: int32(9), Damage: int32(5), - SelfLockVelX: int32(float64(0.05) * WORLD_TO_VIRTUAL_GRID_RATIO), + SelfLockVelX: NO_LOCK_VEL, SelfLockVelY: NO_LOCK_VEL, PushbackVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO), PushbackVelY: int32(0), @@ -362,7 +370,7 @@ var skills = map[int]*Skill{ CancellableEdFrame: int32(30), CancelTransit: map[int]int{ - 1: 2, + 1: 8, }, // TODO: Use non-zero "selfLockVel" }, @@ -394,34 +402,35 @@ var skills = map[int]*Skill{ CancellableStFrame: int32(22), CancellableEdFrame: int32(36), CancelTransit: map[int]int{ - 1: 3, + 1: 9, }, }, }, }, }, 9: &Skill{ - RecoveryFrames: int32(50), - RecoveryFramesOnBlock: int32(50), - RecoveryFramesOnHit: int32(50), + RecoveryFrames: int32(40), + RecoveryFramesOnBlock: int32(40), + RecoveryFramesOnHit: int32(40), ReleaseTriggerType: int32(1), BoundChState: ATK_CHARACTER_STATE_ATK3, Hits: []interface{}{ &MeleeBullet{ Bullet: Bullet{ - StartupFrames: int32(15), + StartupFrames: int32(7), ActiveFrames: int32(30), HitStunFrames: MAX_INT32, BlockStunFrames: int32(9), Damage: int32(10), - SelfLockVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO), - SelfLockVelY: int32(float64(5) * WORLD_TO_VIRTUAL_GRID_RATIO), + SelfLockVelX: int32(float64(1) * WORLD_TO_VIRTUAL_GRID_RATIO), + SelfLockVelY: NO_LOCK_VEL, PushbackVelX: int32(float64(2) * WORLD_TO_VIRTUAL_GRID_RATIO), - PushbackVelY: int32(float64(7) * WORLD_TO_VIRTUAL_GRID_RATIO), - HitboxOffsetX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), + PushbackVelY: int32(float64(4) * WORLD_TO_VIRTUAL_GRID_RATIO), + HitboxOffsetX: int32(float64(10) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxOffsetY: int32(0), - HitboxSizeX: int32(float64(48) * WORLD_TO_VIRTUAL_GRID_RATIO), + HitboxSizeX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), + BlowUp: true, }, }, }, @@ -447,13 +456,40 @@ var skills = map[int]*Skill{ PushbackVelX: int32(float64(2) * WORLD_TO_VIRTUAL_GRID_RATIO), PushbackVelY: int32(0), HitboxOffsetX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), - HitboxOffsetY: int32(0), + HitboxOffsetY: int32(float64(5) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxSizeX: int32(float64(48) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), }, }, }, }, + 11: &Skill{ + RecoveryFrames: int32(60), + RecoveryFramesOnBlock: int32(60), + RecoveryFramesOnHit: int32(60), + ReleaseTriggerType: int32(1), + BoundChState: ATK_CHARACTER_STATE_ATK5, + Hits: []interface{}{ + &MeleeBullet{ + Bullet: Bullet{ + StartupFrames: int32(3), + ActiveFrames: int32(25), + HitStunFrames: MAX_INT32, + BlockStunFrames: int32(9), + Damage: int32(30), + SelfLockVelX: int32(float64(1) * WORLD_TO_VIRTUAL_GRID_RATIO), + SelfLockVelY: int32(float64(8) * WORLD_TO_VIRTUAL_GRID_RATIO), + PushbackVelX: int32(float64(2) * WORLD_TO_VIRTUAL_GRID_RATIO), + PushbackVelY: int32(float64(7) * WORLD_TO_VIRTUAL_GRID_RATIO), + HitboxOffsetX: int32(float64(8) * WORLD_TO_VIRTUAL_GRID_RATIO), + HitboxOffsetY: int32(0), + HitboxSizeX: int32(float64(40) * WORLD_TO_VIRTUAL_GRID_RATIO), + HitboxSizeY: int32(float64(64) * WORLD_TO_VIRTUAL_GRID_RATIO), + BlowUp: true, + }, + }, + }, + }, 255: &Skill{ RecoveryFrames: int32(30), RecoveryFramesOnBlock: int32(30),