Enhanced multihit config.

This commit is contained in:
genxium 2023-01-01 22:51:46 +08:00
parent 325dbfb79c
commit 4c64c1984c
45 changed files with 5542 additions and 1195 deletions

View File

@ -92,7 +92,6 @@ type Room struct {
Capacity int Capacity int
collisionSpaceOffsetX float64 collisionSpaceOffsetX float64
collisionSpaceOffsetY float64 collisionSpaceOffsetY float64
playerOpPatternToSkillId map[int]int
Players map[int32]*Player Players map[int32]*Player
PlayersArr []*Player // ordered by joinIndex PlayersArr []*Player // ordered by joinIndex
Space *resolv.Space Space *resolv.Space
@ -397,18 +396,11 @@ func (pR *Room) StartBattle() {
pR.RenderFrameId = 0 pR.RenderFrameId = 0
// [WARNING] Only since battle starts do we have all players bound to certain joinIndexes.
for _, player := range pR.Players {
opJoinIndexPrefix := (int(player.JoinIndex) << uint(8))
pR.playerOpPatternToSkillId[opJoinIndexPrefix+0] = 1 // Hardcoded for now
}
// Initialize the "collisionSys" as well as "RenderFrameBuffer" // Initialize the "collisionSys" as well as "RenderFrameBuffer"
pR.CurDynamicsRenderFrameId = 0 pR.CurDynamicsRenderFrameId = 0
kickoffFrameJs := &battle.RoomDownsyncFrame{ kickoffFrameJs := &battle.RoomDownsyncFrame{
Id: pR.RenderFrameId, Id: pR.RenderFrameId,
PlayersArr: toJsPlayers(pR.Players), PlayersArr: toJsPlayers(pR.Players),
PlayerOpPatternToSkillId: pR.playerOpPatternToSkillId,
CountdownNanos: pR.BattleDurationNanos, CountdownNanos: pR.BattleDurationNanos,
} }
pR.RenderFrameBuffer.Put(kickoffFrameJs) pR.RenderFrameBuffer.Put(kickoffFrameJs)
@ -1270,7 +1262,7 @@ func (pR *Room) applyInputFrameDownsyncDynamics(fromRenderFrameId int32, toRende
} }
} }
nextRenderFrame := battle.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(pR.InputsBuffer, currRenderFrame, pR.Space, pR.CollisionSysMap, pR.InputDelayFrames, pR.InputScaleFrames, pR.collisionSpaceOffsetX, pR.collisionSpaceOffsetY, pR.SnapIntoPlatformOverlap, pR.SnapIntoPlatformThreshold, pR.WorldToVirtualGridRatio, pR.VirtualGridToWorldRatio, pR.playerOpPatternToSkillId) nextRenderFrame := battle.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(pR.InputsBuffer, currRenderFrame, pR.Space, pR.CollisionSysMap, pR.collisionSpaceOffsetX, pR.collisionSpaceOffsetY)
pR.RenderFrameBuffer.Put(nextRenderFrame) pR.RenderFrameBuffer.Put(nextRenderFrame)
pR.CurDynamicsRenderFrameId++ pR.CurDynamicsRenderFrameId++
} }
@ -1467,7 +1459,6 @@ func (pR *Room) downsyncToSinglePlayer(playerId int32, player *Player, refRender
} }
refRenderFrame := tmp.(*battle.RoomDownsyncFrame) refRenderFrame := tmp.(*battle.RoomDownsyncFrame)
refRenderFrame.PlayerOpPatternToSkillId = pR.playerOpPatternToSkillId
for i, player := range pR.PlayersArr { for i, player := range pR.PlayersArr {
refRenderFrame.PlayersArr[i].ColliderRadius = player.ColliderRadius // hardcoded for now refRenderFrame.PlayersArr[i].ColliderRadius = player.ColliderRadius // hardcoded for now
} }

View File

@ -4724,7 +4724,7 @@ $packages["resolv"] = (function() {
return $pkg; return $pkg;
})(); })();
$packages["jsexport/battle"] = (function() { $packages["jsexport/battle"] = (function() {
var $pkg = {}, $init, math, resolv, Vec2D, Polygon2D, PlayerDownsync, InputFrameDecoded, Barrier, Bullet, MeleeBullet, FireballBullet, Skill, RoomDownsyncFrame, InputFrameDownsync, RingBuffer, CharacterConfig, SatResult, sliceType, sliceType$1, sliceType$2, ptrType, sliceType$3, sliceType$4, ptrType$1, ptrType$2, ptrType$3, ptrType$4, ptrType$5, ptrType$6, sliceType$5, ptrType$7, sliceType$6, sliceType$7, sliceType$8, sliceType$9, ptrType$8, sliceType$10, ptrType$9, sliceType$11, sliceType$12, ptrType$10, sliceType$13, ptrType$11, mapType, ptrType$12, skills, inAirSet, noOpSet, invinsibleSet, nonAttackingSet, NewRingBuffer, ConvertToInputFrameId, decodeInput, CalcPushbacks, isPolygonPairOverlapped, isPolygonPairSeparatedByDir, WorldToVirtualGridPos, VirtualGridToWorldPos, WorldToPolygonColliderBLPos, PolygonColliderBLToWorldPos, PolygonColliderBLToVirtualGridPos, VirtualGridToPolygonColliderBLPos, calcHardPushbacksNorms, deriveOpPattern, ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame, GenerateRectCollider, generateRectColliderInCollisionSpace, GenerateConvexPolygonCollider, AlignPolygon2DToBoundingBox; var $pkg = {}, $init, math, resolv, Vec2D, Polygon2D, PlayerDownsync, InputFrameDecoded, Barrier, Bullet, MeleeBullet, FireballBullet, Skill, RoomDownsyncFrame, InputFrameDownsync, RingBuffer, SkillMapperType, CharacterConfig, SatResult, sliceType, sliceType$1, sliceType$2, ptrType, ptrType$1, ptrType$2, sliceType$3, sliceType$4, ptrType$3, ptrType$4, ptrType$5, ptrType$6, ptrType$7, sliceType$5, sliceType$6, sliceType$7, sliceType$8, sliceType$9, ptrType$8, sliceType$10, ptrType$9, sliceType$11, sliceType$12, ptrType$10, sliceType$13, ptrType$11, mapType, ptrType$12, skills, inAirSet, noOpSet, invinsibleSet, nonAttackingSet, NewRingBuffer, ConvertToInputFrameId, decodeInput, CalcPushbacks, isPolygonPairOverlapped, isPolygonPairSeparatedByDir, WorldToVirtualGridPos, VirtualGridToWorldPos, WorldToPolygonColliderBLPos, PolygonColliderBLToWorldPos, PolygonColliderBLToVirtualGridPos, VirtualGridToPolygonColliderBLPos, calcHardPushbacksNorms, deriveOpPattern, ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame, GenerateRectCollider, generateRectColliderInCollisionSpace, GenerateConvexPolygonCollider, AlignPolygon2DToBoundingBox;
math = $packages["math"]; math = $packages["math"];
resolv = $packages["resolv"]; resolv = $packages["resolv"];
Vec2D = $pkg.Vec2D = $newType(0, $kindStruct, "battle.Vec2D", true, "jsexport/battle", true, function(X_, Y_) { Vec2D = $pkg.Vec2D = $newType(0, $kindStruct, "battle.Vec2D", true, "jsexport/battle", true, function(X_, Y_) {
@ -4819,7 +4819,7 @@ $packages["jsexport/battle"] = (function() {
} }
this.Boundary = Boundary_; this.Boundary = Boundary_;
}); });
Bullet = $pkg.Bullet = $newType(0, $kindStruct, "battle.Bullet", true, "jsexport/battle", true, function(OriginatedRenderFrameId_, OffenderJoinIndex_, StartupFrames_, CancellableStFrame_, CancellableEdFrame_, ActiveFrames_, HitStunFrames_, BlockStunFrames_, PushbackVelX_, PushbackVelY_, Damage_, SelfLockVelX_, SelfLockVelY_, HitboxOffsetX_, HitboxOffsetY_, HitboxSizeX_, HitboxSizeY_, BlowUp_) { Bullet = $pkg.Bullet = $newType(0, $kindStruct, "battle.Bullet", true, "jsexport/battle", true, function(OriginatedRenderFrameId_, OffenderJoinIndex_, StartupFrames_, CancellableStFrame_, CancellableEdFrame_, ActiveFrames_, HitStunFrames_, BlockStunFrames_, PushbackVelX_, PushbackVelY_, Damage_, SelfLockVelX_, SelfLockVelY_, HitboxOffsetX_, HitboxOffsetY_, HitboxSizeX_, HitboxSizeY_, BlowUp_, CancelTransit_) {
this.$val = this; this.$val = this;
if (arguments.length === 0) { if (arguments.length === 0) {
this.OriginatedRenderFrameId = 0; this.OriginatedRenderFrameId = 0;
@ -4840,6 +4840,7 @@ $packages["jsexport/battle"] = (function() {
this.HitboxSizeX = 0; this.HitboxSizeX = 0;
this.HitboxSizeY = 0; this.HitboxSizeY = 0;
this.BlowUp = false; this.BlowUp = false;
this.CancelTransit = false;
return; return;
} }
this.OriginatedRenderFrameId = OriginatedRenderFrameId_; this.OriginatedRenderFrameId = OriginatedRenderFrameId_;
@ -4860,11 +4861,12 @@ $packages["jsexport/battle"] = (function() {
this.HitboxSizeX = HitboxSizeX_; this.HitboxSizeX = HitboxSizeX_;
this.HitboxSizeY = HitboxSizeY_; this.HitboxSizeY = HitboxSizeY_;
this.BlowUp = BlowUp_; this.BlowUp = BlowUp_;
this.CancelTransit = CancelTransit_;
}); });
MeleeBullet = $pkg.MeleeBullet = $newType(0, $kindStruct, "battle.MeleeBullet", true, "jsexport/battle", true, function(Bullet_) { MeleeBullet = $pkg.MeleeBullet = $newType(0, $kindStruct, "battle.MeleeBullet", true, "jsexport/battle", true, function(Bullet_) {
this.$val = this; this.$val = this;
if (arguments.length === 0) { if (arguments.length === 0) {
this.Bullet = new Bullet.ptr(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false); this.Bullet = new Bullet.ptr(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false, false);
return; return;
} }
this.Bullet = Bullet_; this.Bullet = Bullet_;
@ -4879,7 +4881,7 @@ $packages["jsexport/battle"] = (function() {
this.VelX = 0; this.VelX = 0;
this.VelY = 0; this.VelY = 0;
this.Speed = 0; this.Speed = 0;
this.Bullet = new Bullet.ptr(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false); this.Bullet = new Bullet.ptr(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false, false);
return; return;
} }
this.VirtualGridX = VirtualGridX_; this.VirtualGridX = VirtualGridX_;
@ -4891,7 +4893,7 @@ $packages["jsexport/battle"] = (function() {
this.Speed = Speed_; this.Speed = Speed_;
this.Bullet = Bullet_; this.Bullet = Bullet_;
}); });
Skill = $pkg.Skill = $newType(0, $kindStruct, "battle.Skill", true, "jsexport/battle", true, function(BattleLocalId_, RecoveryFrames_, RecoveryFramesOnBlock_, RecoveryFramesOnHit_, ReleaseTriggerType_, Hits_) { Skill = $pkg.Skill = $newType(0, $kindStruct, "battle.Skill", true, "jsexport/battle", true, function(BattleLocalId_, RecoveryFrames_, RecoveryFramesOnBlock_, RecoveryFramesOnHit_, ReleaseTriggerType_, BoundChState_, Hits_) {
this.$val = this; this.$val = this;
if (arguments.length === 0) { if (arguments.length === 0) {
this.BattleLocalId = 0; this.BattleLocalId = 0;
@ -4899,7 +4901,8 @@ $packages["jsexport/battle"] = (function() {
this.RecoveryFramesOnBlock = 0; this.RecoveryFramesOnBlock = 0;
this.RecoveryFramesOnHit = 0; this.RecoveryFramesOnHit = 0;
this.ReleaseTriggerType = 0; this.ReleaseTriggerType = 0;
this.Hits = sliceType.nil; this.BoundChState = 0;
this.Hits = sliceType$2.nil;
return; return;
} }
this.BattleLocalId = BattleLocalId_; this.BattleLocalId = BattleLocalId_;
@ -4907,6 +4910,7 @@ $packages["jsexport/battle"] = (function() {
this.RecoveryFramesOnBlock = RecoveryFramesOnBlock_; this.RecoveryFramesOnBlock = RecoveryFramesOnBlock_;
this.RecoveryFramesOnHit = RecoveryFramesOnHit_; this.RecoveryFramesOnHit = RecoveryFramesOnHit_;
this.ReleaseTriggerType = ReleaseTriggerType_; this.ReleaseTriggerType = ReleaseTriggerType_;
this.BoundChState = BoundChState_;
this.Hits = Hits_; this.Hits = Hits_;
}); });
RoomDownsyncFrame = $pkg.RoomDownsyncFrame = $newType(0, $kindStruct, "battle.RoomDownsyncFrame", true, "jsexport/battle", true, function(Id_, PlayersArr_, CountdownNanos_, MeleeBullets_, FireballBullets_, BackendUnconfirmedMask_, ShouldForceResync_, PlayerOpPatternToSkillId_) { RoomDownsyncFrame = $pkg.RoomDownsyncFrame = $newType(0, $kindStruct, "battle.RoomDownsyncFrame", true, "jsexport/battle", true, function(Id_, PlayersArr_, CountdownNanos_, MeleeBullets_, FireballBullets_, BackendUnconfirmedMask_, ShouldForceResync_, PlayerOpPatternToSkillId_) {
@ -4952,7 +4956,7 @@ $packages["jsexport/battle"] = (function() {
this.StFrameId = 0; this.StFrameId = 0;
this.N = 0; this.N = 0;
this.Cnt = 0; this.Cnt = 0;
this.Eles = sliceType.nil; this.Eles = sliceType$2.nil;
return; return;
} }
this.Ed = Ed_; this.Ed = Ed_;
@ -4963,7 +4967,8 @@ $packages["jsexport/battle"] = (function() {
this.Cnt = Cnt_; this.Cnt = Cnt_;
this.Eles = Eles_; this.Eles = Eles_;
}); });
CharacterConfig = $pkg.CharacterConfig = $newType(0, $kindStruct, "battle.CharacterConfig", true, "jsexport/battle", true, function(SpeciesId_, SpeciesName_, InAirIdleFrameIdxTurningPoint_, InAirIdleFrameIdxTurnedCycle_, LayDownFrames_, LayDownFramesToRecover_, GetUpFrames_, GetUpFramesToRecover_, JumpingInitVelY_, PatternIdToSkillId_) { SkillMapperType = $pkg.SkillMapperType = $newType(4, $kindFunc, "battle.SkillMapperType", true, "jsexport/battle", true, null);
CharacterConfig = $pkg.CharacterConfig = $newType(0, $kindStruct, "battle.CharacterConfig", true, "jsexport/battle", true, function(SpeciesId_, SpeciesName_, InAirIdleFrameIdxTurningPoint_, InAirIdleFrameIdxTurnedCycle_, LayDownFrames_, LayDownFramesToRecover_, GetUpFrames_, GetUpFramesToRecover_, JumpingInitVelY_, SkillMapper_) {
this.$val = this; this.$val = this;
if (arguments.length === 0) { if (arguments.length === 0) {
this.SpeciesId = 0; this.SpeciesId = 0;
@ -4975,7 +4980,7 @@ $packages["jsexport/battle"] = (function() {
this.GetUpFrames = 0; this.GetUpFrames = 0;
this.GetUpFramesToRecover = 0; this.GetUpFramesToRecover = 0;
this.JumpingInitVelY = 0; this.JumpingInitVelY = 0;
this.PatternIdToSkillId = false; this.SkillMapper = $throwNilPointerError;
return; return;
} }
this.SpeciesId = SpeciesId_; this.SpeciesId = SpeciesId_;
@ -4987,7 +4992,7 @@ $packages["jsexport/battle"] = (function() {
this.GetUpFrames = GetUpFrames_; this.GetUpFrames = GetUpFrames_;
this.GetUpFramesToRecover = GetUpFramesToRecover_; this.GetUpFramesToRecover = GetUpFramesToRecover_;
this.JumpingInitVelY = JumpingInitVelY_; this.JumpingInitVelY = JumpingInitVelY_;
this.PatternIdToSkillId = PatternIdToSkillId_; this.SkillMapper = SkillMapper_;
}); });
SatResult = $pkg.SatResult = $newType(0, $kindStruct, "battle.SatResult", true, "jsexport/battle", true, function(Overlap_, OverlapX_, OverlapY_, AContainedInB_, BContainedInA_, Axis_) { SatResult = $pkg.SatResult = $newType(0, $kindStruct, "battle.SatResult", true, "jsexport/battle", true, function(Overlap_, OverlapX_, OverlapY_, AContainedInB_, BContainedInA_, Axis_) {
this.$val = this; this.$val = this;
@ -5007,23 +5012,23 @@ $packages["jsexport/battle"] = (function() {
this.BContainedInA = BContainedInA_; this.BContainedInA = BContainedInA_;
this.Axis = Axis_; this.Axis = Axis_;
}); });
sliceType = $sliceType($emptyInterface); sliceType = $sliceType($Int32);
sliceType$1 = $sliceType($Int32); sliceType$1 = $sliceType(sliceType);
sliceType$2 = $sliceType(sliceType$1); sliceType$2 = $sliceType($emptyInterface);
ptrType = $ptrType(SatResult); ptrType = $ptrType(Skill);
ptrType$1 = $ptrType(MeleeBullet);
ptrType$2 = $ptrType(SatResult);
sliceType$3 = $sliceType(Vec2D); sliceType$3 = $sliceType(Vec2D);
sliceType$4 = $sliceType($String); sliceType$4 = $sliceType($String);
ptrType$1 = $ptrType(resolv.Collision); ptrType$3 = $ptrType(resolv.Collision);
ptrType$2 = $ptrType(sliceType$3); ptrType$4 = $ptrType(sliceType$3);
ptrType$3 = $ptrType(PlayerDownsync); ptrType$5 = $ptrType(PlayerDownsync);
ptrType$4 = $ptrType(MeleeBullet); ptrType$6 = $ptrType(resolv.ConvexPolygon);
ptrType$5 = $ptrType(resolv.ConvexPolygon); ptrType$7 = $ptrType(InputFrameDownsync);
ptrType$6 = $ptrType(InputFrameDownsync);
sliceType$5 = $sliceType($Uint64); sliceType$5 = $sliceType($Uint64);
ptrType$7 = $ptrType(Skill); sliceType$6 = $sliceType(ptrType$5);
sliceType$6 = $sliceType(ptrType$3); sliceType$7 = $sliceType(ptrType$1);
sliceType$7 = $sliceType(ptrType$4); sliceType$8 = $sliceType(ptrType$4);
sliceType$8 = $sliceType(ptrType$2);
sliceType$9 = $sliceType($Bool); sliceType$9 = $sliceType($Bool);
ptrType$8 = $ptrType(resolv.Object); ptrType$8 = $ptrType(resolv.Object);
sliceType$10 = $sliceType(ptrType$8); sliceType$10 = $sliceType(ptrType$8);
@ -5037,7 +5042,7 @@ $packages["jsexport/battle"] = (function() {
ptrType$12 = $ptrType(RingBuffer); ptrType$12 = $ptrType(RingBuffer);
NewRingBuffer = function(n) { NewRingBuffer = function(n) {
var n; var n;
return new RingBuffer.ptr(0, 0, 0, 0, n, 0, $makeSlice(sliceType, n)); return new RingBuffer.ptr(0, 0, 0, 0, n, 0, $makeSlice(sliceType$2, n));
}; };
$pkg.NewRingBuffer = NewRingBuffer; $pkg.NewRingBuffer = NewRingBuffer;
RingBuffer.ptr.prototype.Put = function(pItem) { RingBuffer.ptr.prototype.Put = function(pItem) {
@ -5190,8 +5195,8 @@ $packages["jsexport/battle"] = (function() {
$24r$1 = [false, 0, 0, overlapResult]; $24r$1 = [false, 0, 0, overlapResult];
$s = 5; case 5: return $24r$1; $s = 5; case 5: return $24r$1;
/* } */ case 3: /* } */ case 3:
$s = -1; return [false, 0, 0, ptrType.nil]; $s = -1; return [false, 0, 0, ptrType$2.nil];
/* */ } return; } } catch(err) { $err = err; $s = -1; return [false, 0, 0, ptrType.nil]; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: CalcPushbacks, $c: true, $r, $24r, $24r$1, _tmp, _tmp$1, _tuple, barrierShape, oldDx, oldDy, origX, origY, overlapResult, overlapped, playerShape, pushbackX, pushbackY, $s, $deferred};return $f; } } /* */ } return; } } catch(err) { $err = err; $s = -1; return [false, 0, 0, ptrType$2.nil]; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: CalcPushbacks, $c: true, $r, $24r, $24r$1, _tmp, _tmp$1, _tuple, barrierShape, oldDx, oldDy, origX, origY, overlapResult, overlapped, playerShape, pushbackX, pushbackY, $s, $deferred};return $f; } }
}; };
$pkg.CalcPushbacks = CalcPushbacks; $pkg.CalcPushbacks = CalcPushbacks;
isPolygonPairOverlapped = function(a, b, result) { isPolygonPairOverlapped = function(a, b, result) {
@ -5201,7 +5206,7 @@ $packages["jsexport/battle"] = (function() {
aCnt = _tmp; aCnt = _tmp;
bCnt = _tmp$1; bCnt = _tmp$1;
if ((1 === aCnt) && (1 === bCnt)) { if ((1 === aCnt) && (1 === bCnt)) {
if (!(ptrType.nil === result)) { if (!(ptrType$2.nil === result)) {
result.Overlap = 0; result.Overlap = 0;
} }
return ((x = (x$1 = a.Points, (0 >= x$1.$length ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + 0])), (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0])) === (x$2 = (x$3 = b.Points, (0 >= x$3.$length ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + 0])), (0 >= x$2.$length ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + 0]))) && ((x$4 = (x$5 = a.Points, (0 >= x$5.$length ? ($throwRuntimeError("index out of range"), undefined) : x$5.$array[x$5.$offset + 0])), (1 >= x$4.$length ? ($throwRuntimeError("index out of range"), undefined) : x$4.$array[x$4.$offset + 1])) === (x$6 = (x$7 = b.Points, (0 >= x$7.$length ? ($throwRuntimeError("index out of range"), undefined) : x$7.$array[x$7.$offset + 0])), (1 >= x$6.$length ? ($throwRuntimeError("index out of range"), undefined) : x$6.$array[x$6.$offset + 1]))); return ((x = (x$1 = a.Points, (0 >= x$1.$length ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + 0])), (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0])) === (x$2 = (x$3 = b.Points, (0 >= x$3.$length ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + 0])), (0 >= x$2.$length ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + 0]))) && ((x$4 = (x$5 = a.Points, (0 >= x$5.$length ? ($throwRuntimeError("index out of range"), undefined) : x$5.$array[x$5.$offset + 0])), (1 >= x$4.$length ? ($throwRuntimeError("index out of range"), undefined) : x$4.$array[x$4.$offset + 1])) === (x$6 = (x$7 = b.Points, (0 >= x$7.$length ? ($throwRuntimeError("index out of range"), undefined) : x$7.$array[x$7.$offset + 0])), (1 >= x$6.$length ? ($throwRuntimeError("index out of range"), undefined) : x$6.$array[x$6.$offset + 1])));
@ -5273,7 +5278,7 @@ $packages["jsexport/battle"] = (function() {
if (aStart > bEnd || aEnd < bStart) { if (aStart > bEnd || aEnd < bStart) {
return true; return true;
} }
if (!(ptrType.nil === result)) { if (!(ptrType$2.nil === result)) {
overlap = 0; overlap = 0;
if (aStart < bStart) { if (aStart < bStart) {
result.AContainedInB = false; result.AContainedInB = false;
@ -5368,8 +5373,8 @@ $packages["jsexport/battle"] = (function() {
ret = [ret]; ret = [ret];
ret[0] = $makeSlice(sliceType$3, 0, 10); ret[0] = $makeSlice(sliceType$3, 0, 10);
collision = playerCollider.Check(0, 0, new sliceType$4([])); collision = playerCollider.Check(0, 0, new sliceType$4([]));
if (ptrType$1.nil === collision) { if (ptrType$3.nil === collision) {
$s = -1; return (ret.$ptr || (ret.$ptr = new ptrType$2(function() { return this.$target[0]; }, function($v) { this.$target[0] = $v; }, ret))); $s = -1; return (ret.$ptr || (ret.$ptr = new ptrType$4(function() { return this.$target[0]; }, function($v) { this.$target[0] = $v; }, ret)));
} }
_ref = collision.Objects; _ref = collision.Objects;
_i = 0; _i = 0;
@ -5378,8 +5383,8 @@ $packages["jsexport/battle"] = (function() {
obj = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); obj = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]);
isBarrier = false; isBarrier = false;
_ref$1 = obj.Data; _ref$1 = obj.Data;
if ($assertType(_ref$1, ptrType$3, true)[1]) { if ($assertType(_ref$1, ptrType$5, true)[1]) {
} else if ($assertType(_ref$1, ptrType$4, true)[1]) { } else if ($assertType(_ref$1, ptrType$1, true)[1]) {
} else { } else {
isBarrier = true; isBarrier = true;
} }
@ -5387,7 +5392,7 @@ $packages["jsexport/battle"] = (function() {
_i++; _i++;
/* continue; */ $s = 1; continue; /* continue; */ $s = 1; continue;
} }
barrierShape = $assertType(obj.Shape, ptrType$5); barrierShape = $assertType(obj.Shape, ptrType$6);
_r = CalcPushbacks(0, 0, playerShape, barrierShape); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } _r = CalcPushbacks(0, 0, playerShape, barrierShape); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
_tuple = _r; _tuple = _r;
overlapped = _tuple[0]; overlapped = _tuple[0];
@ -5408,11 +5413,11 @@ $packages["jsexport/battle"] = (function() {
_i++; _i++;
$s = 1; continue; $s = 1; continue;
case 2: case 2:
$s = -1; return (ret.$ptr || (ret.$ptr = new ptrType$2(function() { return this.$target[0]; }, function($v) { this.$target[0] = $v; }, ret))); $s = -1; return (ret.$ptr || (ret.$ptr = new ptrType$4(function() { return this.$target[0]; }, function($v) { this.$target[0] = $v; }, ret)));
/* */ } return; } var $f = {$blk: calcHardPushbacksNorms, $c: true, $r, _i, _r, _ref, _ref$1, _tmp, _tmp$1, _tuple, barrierShape, collision, isBarrier, joinIndex, obj, overlapResult, overlapped, pEffPushback, playerCollider, playerShape, pushbackX, pushbackY, ret, snapIntoPlatformOverlap, $s};return $f; /* */ } return; } var $f = {$blk: calcHardPushbacksNorms, $c: true, $r, _i, _r, _ref, _ref$1, _tmp, _tmp$1, _tuple, barrierShape, collision, isBarrier, joinIndex, obj, overlapResult, overlapped, pEffPushback, playerCollider, playerShape, pushbackX, pushbackY, ret, snapIntoPlatformOverlap, $s};return $f;
}; };
deriveOpPattern = function(currPlayerDownsync, thatPlayerInNextFrame, currRenderFrame, inputsBuffer, inputDelayFrames, inputScaleFrames) { deriveOpPattern = function(currPlayerDownsync, thatPlayerInNextFrame, currRenderFrame, inputsBuffer, inputDelayFrames, inputScaleFrames) {
var _entry, _entry$1, _entry$2, _ref, _tmp, _tmp$1, _tmp$2, _tmp$3, _tmp$4, _tmp$5, _tuple, _tuple$1, currPlayerDownsync, currRenderFrame, decodedInput, delayedInputFrameId, delayedInputFrameIdForPrevRdf, delayedInputList, delayedInputListForPrevRdf, effDx, effDy, existent, existent$1, inputDelayFrames, inputScaleFrames, inputsBuffer, joinIndex, jumpedOrNot, patternId, prevBtnALevel, prevBtnBLevel, prevDecodedInput, skillConfig, thatPlayerInNextFrame, v, x, x$1, x$2, x$3; var _entry, _entry$1, _tmp, _tmp$1, _tmp$2, _tmp$3, _tmp$4, _tmp$5, _tuple, _tuple$1, currPlayerDownsync, currRenderFrame, decodedInput, delayedInputFrameId, delayedInputFrameIdForPrevRdf, delayedInputList, delayedInputListForPrevRdf, effDx, effDy, existent, existent$1, inputDelayFrames, inputScaleFrames, inputsBuffer, joinIndex, jumpedOrNot, patternId, prevBtnALevel, prevBtnBLevel, prevDecodedInput, thatPlayerInNextFrame, x, x$1;
delayedInputFrameId = ConvertToInputFrameId(currRenderFrame.Id, inputDelayFrames, inputScaleFrames); delayedInputFrameId = ConvertToInputFrameId(currRenderFrame.Id, inputDelayFrames, inputScaleFrames);
delayedInputFrameIdForPrevRdf = ConvertToInputFrameId(currRenderFrame.Id - 1 >> 0, inputDelayFrames, inputScaleFrames); delayedInputFrameIdForPrevRdf = ConvertToInputFrameId(currRenderFrame.Id - 1 >> 0, inputDelayFrames, inputScaleFrames);
if (0 >= delayedInputFrameId) { if (0 >= delayedInputFrameId) {
@ -5423,10 +5428,10 @@ $packages["jsexport/battle"] = (function() {
if (existent) { if (existent) {
return [-2, false, 0, 0]; return [-2, false, 0, 0];
} }
delayedInputList = $assertType(inputsBuffer.GetByFrameId(delayedInputFrameId), ptrType$6).InputList; delayedInputList = $assertType(inputsBuffer.GetByFrameId(delayedInputFrameId), ptrType$7).InputList;
delayedInputListForPrevRdf = sliceType$5.nil; delayedInputListForPrevRdf = sliceType$5.nil;
if (0 < delayedInputFrameIdForPrevRdf) { if (0 < delayedInputFrameIdForPrevRdf) {
delayedInputListForPrevRdf = $assertType(inputsBuffer.GetByFrameId(delayedInputFrameIdForPrevRdf), ptrType$6).InputList; delayedInputListForPrevRdf = $assertType(inputsBuffer.GetByFrameId(delayedInputFrameIdForPrevRdf), ptrType$7).InputList;
} }
jumpedOrNot = false; jumpedOrNot = false;
joinIndex = currPlayerDownsync.JoinIndex; joinIndex = currPlayerDownsync.JoinIndex;
@ -5459,27 +5464,12 @@ $packages["jsexport/battle"] = (function() {
} }
patternId = -1; patternId = -1;
if (decodedInput.BtnALevel > prevBtnALevel) { if (decodedInput.BtnALevel > prevBtnALevel) {
if (currPlayerDownsync.InAir) { patternId = 1;
patternId = 255;
} else {
patternId = 1;
}
}
if (!((-1 === patternId)) && 0 < currPlayerDownsync.FramesToRecover) {
patternId = -1;
skillConfig = (_entry$2 = skills[$Int.keyFor(((currPlayerDownsync.ActiveSkillId >> 0)))], _entry$2 !== undefined ? _entry$2.v : ptrType$7.nil);
_ref = (x$2 = skillConfig.Hits, x$3 = currPlayerDownsync.ActiveSkillHit, ((x$3 < 0 || x$3 >= x$2.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + x$3]));
if ($assertType(_ref, ptrType$4, true)[1]) {
v = _ref.$val;
if (v.Bullet.CancellableStFrame <= currPlayerDownsync.FramesInChState && currPlayerDownsync.FramesInChState < v.Bullet.CancellableEdFrame) {
patternId = (((currPlayerDownsync.ActiveSkillId + 1 >> 0) >> 0));
}
}
} }
return [patternId, jumpedOrNot, effDx, effDy]; return [patternId, jumpedOrNot, effDx, effDy];
}; };
ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame = function(inputsBuffer, currRenderFrame, collisionSys, collisionSysMap, collisionSpaceOffsetX, collisionSpaceOffsetY, chConfigsOrderedByJoinIndex) { ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame = function(inputsBuffer, currRenderFrame, collisionSys, collisionSysMap, collisionSpaceOffsetX, collisionSpaceOffsetY, chConfigsOrderedByJoinIndex) {
var {_1, _2, _entry, _entry$1, _entry$2, _entry$3, _entry$4, _entry$5, _entry$6, _i, _i$1, _i$2, _i$3, _i$4, _i$5, _i$6, _i$7, _i$8, _i$9, _index, _index$1, _r, _r$1, _r$2, _r$3, _ref, _ref$1, _ref$10, _ref$11, _ref$12, _ref$13, _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$2, _tmp$3, _tmp$4, _tmp$5, _tmp$6, _tmp$7, _tmp$8, _tmp$9, _tuple, _tuple$1, _tuple$2, _tuple$3, _tuple$4, _tuple$5, _tuple$6, _tuple$7, _tuple$8, _tuple$9, atkedPlayerInNextFrame, bShape, bulletCollider, bulletColliders, bulletShape, bulletWx, bulletWy, chConfig, chConfig$1, chConfig$2, chConfigsOrderedByJoinIndex, collision, collision$1, collisionPlayerIndex, collisionPlayerIndex$1, collisionPlayerIndex$2, collisionSpaceOffsetX, collisionSpaceOffsetY, collisionSys, collisionSysMap, currPlayerDownsync, currPlayerDownsync$1, currPlayerDownsync$2, currPlayerDownsync$3, currPlayerDownsync$4, currRenderFrame, defenderShape, effDx, effDy, effPushbacks, existent, existent$1, existent$2, hardPushbackNorm, hardPushbackNorms, hitboxSizeWx, hitboxSizeWy, 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, newBulletCollider, newVx, newVy, nextRenderFrameMeleeBullets, nextRenderFramePlayers, normAlignmentWithGravity, obj, obj$1, offender, offender$1, oldFramesToRecover, oldNextCharacterState, overlapResult, overlapped, overlapped$1, patternId, playerCollider, playerCollider$1, playerCollider$2, playerShape, projectedMagnitude, pushbackVelX, pushbackVelY, pushbackX, pushbackY, roomCapacity, skillConfig, skillId, t, t$1, thatPlayerInNextFrame, thatPlayerInNextFrame$1, thatPlayerInNextFrame$2, thatPlayerInNextFrame$3, v, v$1, x, x$1, x$10, x$11, x$12, x$13, x$14, x$2, x$3, x$4, x$5, x$6, x$7, x$8, x$9, xfac, xfac$1, $s, $r, $c} = $restore(this, {inputsBuffer, currRenderFrame, collisionSys, collisionSysMap, collisionSpaceOffsetX, collisionSpaceOffsetY, chConfigsOrderedByJoinIndex}); var {_1, _entry, _entry$1, _entry$2, _entry$3, _entry$4, _entry$5, _i, _i$1, _i$2, _i$3, _i$4, _i$5, _i$6, _i$7, _i$8, _i$9, _index, _index$1, _r, _r$1, _r$2, _r$3, _r$4, _ref, _ref$1, _ref$10, _ref$11, _ref$12, _ref$13, _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$2, _tmp$3, _tmp$4, _tmp$5, _tmp$6, _tmp$7, _tmp$8, _tmp$9, _tuple, _tuple$1, _tuple$2, _tuple$3, _tuple$4, _tuple$5, _tuple$6, _tuple$7, _tuple$8, _tuple$9, atkedPlayerInNextFrame, bShape, bulletCollider, bulletColliders, bulletShape, bulletWx, bulletWy, chConfig, chConfig$1, chConfig$2, chConfigsOrderedByJoinIndex, collision, collision$1, collisionPlayerIndex, collisionPlayerIndex$1, collisionPlayerIndex$2, collisionSpaceOffsetX, collisionSpaceOffsetY, collisionSys, collisionSysMap, currPlayerDownsync, currPlayerDownsync$1, currPlayerDownsync$2, currPlayerDownsync$3, currPlayerDownsync$4, currRenderFrame, defenderShape, effDx, effDy, effPushbacks, existent, existent$1, existent$2, hardPushbackNorm, hardPushbackNorms, hitboxSizeWx, hitboxSizeWy, 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, newBulletCollider, newVx, newVy, nextRenderFrameMeleeBullets, nextRenderFramePlayers, normAlignmentWithGravity, obj, obj$1, offender, offender$1, oldFramesToRecover, oldNextCharacterState, overlapResult, overlapped, overlapped$1, patternId, playerCollider, playerCollider$1, playerCollider$2, playerShape, projectedMagnitude, pushbackVelX, pushbackVelY, pushbackX, pushbackY, roomCapacity, skillConfig, skillId, t, t$1, thatPlayerInNextFrame, thatPlayerInNextFrame$1, thatPlayerInNextFrame$2, thatPlayerInNextFrame$3, v, v$1, x, x$1, x$10, x$11, x$12, x$13, x$14, x$2, x$3, x$4, x$5, x$6, x$7, x$8, x$9, xfac, xfac$1, $s, $r, $c} = $restore(this, {inputsBuffer, currRenderFrame, collisionSys, collisionSysMap, collisionSpaceOffsetX, collisionSpaceOffsetY, chConfigsOrderedByJoinIndex});
/* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
roomCapacity = currRenderFrame.PlayersArr.$length; roomCapacity = currRenderFrame.PlayersArr.$length;
nextRenderFramePlayers = $makeSlice(sliceType$6, roomCapacity); nextRenderFramePlayers = $makeSlice(sliceType$6, roomCapacity);
@ -5501,8 +5491,8 @@ $packages["jsexport/battle"] = (function() {
jumpedOrNotList = $makeSlice(sliceType$9, roomCapacity); jumpedOrNotList = $makeSlice(sliceType$9, roomCapacity);
_ref$1 = currRenderFrame.PlayersArr; _ref$1 = currRenderFrame.PlayersArr;
_i$1 = 0; _i$1 = 0;
while (true) { /* while (true) { */ case 1:
if (!(_i$1 < _ref$1.$length)) { break; } /* if (!(_i$1 < _ref$1.$length)) { break; } */ if(!(_i$1 < _ref$1.$length)) { $s = 2; continue; }
newBullet = [newBullet]; newBullet = [newBullet];
i$1 = _i$1; i$1 = _i$1;
currPlayerDownsync$1 = ((_i$1 < 0 || _i$1 >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i$1]); currPlayerDownsync$1 = ((_i$1 < 0 || _i$1 >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i$1]);
@ -5519,37 +5509,29 @@ $packages["jsexport/battle"] = (function() {
((i$1 < 0 || i$1 >= jumpedOrNotList.$length) ? ($throwRuntimeError("index out of range"), undefined) : jumpedOrNotList.$array[jumpedOrNotList.$offset + i$1] = true); ((i$1 < 0 || i$1 >= jumpedOrNotList.$length) ? ($throwRuntimeError("index out of range"), undefined) : jumpedOrNotList.$array[jumpedOrNotList.$offset + i$1] = true);
} }
joinIndex = currPlayerDownsync$1.JoinIndex; joinIndex = currPlayerDownsync$1.JoinIndex;
if (!((-1 === patternId))) { _r = chConfig.SkillMapper(patternId, currPlayerDownsync$1); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
_tuple$1 = (_entry = chConfig.PatternIdToSkillId[$Int.keyFor(patternId)], _entry !== undefined ? [_entry.v, true] : [0, false]); skillId = _r;
skillId = _tuple$1[0]; _tuple$1 = (_entry = skills[$Int.keyFor(skillId)], _entry !== undefined ? [_entry.v, true] : [ptrType.nil, false]);
existent = _tuple$1[1]; skillConfig = _tuple$1[0];
if (existent) { existent = _tuple$1[1];
skillConfig = (_entry$1 = skills[$Int.keyFor(skillId)], _entry$1 !== undefined ? _entry$1.v : ptrType$7.nil); if (existent) {
thatPlayerInNextFrame.ActiveSkillId = ((skillId >> 0)); thatPlayerInNextFrame.ActiveSkillId = ((skillId >> 0));
thatPlayerInNextFrame.ActiveSkillHit = 0; thatPlayerInNextFrame.ActiveSkillHit = 0;
_ref$2 = (x = skillConfig.Hits, x$1 = thatPlayerInNextFrame.ActiveSkillHit, ((x$1 < 0 || x$1 >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + x$1])); _ref$2 = (x = skillConfig.Hits, x$1 = thatPlayerInNextFrame.ActiveSkillHit, ((x$1 < 0 || x$1 >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + x$1]));
if ($assertType(_ref$2, ptrType$4, true)[1]) { if ($assertType(_ref$2, ptrType$1, true)[1]) {
v = _ref$2.$val; v = _ref$2.$val;
newBullet[0] = $clone(v, MeleeBullet); newBullet[0] = $clone(v, MeleeBullet);
newBullet[0].Bullet.OriginatedRenderFrameId = currRenderFrame.Id; newBullet[0].Bullet.OriginatedRenderFrameId = currRenderFrame.Id;
newBullet[0].Bullet.OffenderJoinIndex = joinIndex; newBullet[0].Bullet.OffenderJoinIndex = joinIndex;
nextRenderFrameMeleeBullets = $append(nextRenderFrameMeleeBullets, newBullet[0]); nextRenderFrameMeleeBullets = $append(nextRenderFrameMeleeBullets, newBullet[0]);
thatPlayerInNextFrame.FramesToRecover = skillConfig.RecoveryFrames; thatPlayerInNextFrame.FramesToRecover = skillConfig.RecoveryFrames;
}
_1 = skillId;
if (_1 === (1)) {
thatPlayerInNextFrame.CharacterState = 2;
} else if (_1 === (2)) {
thatPlayerInNextFrame.CharacterState = 11;
} else if (_1 === (3)) {
thatPlayerInNextFrame.CharacterState = 12;
}
if (false === currPlayerDownsync$1.InAir) {
thatPlayerInNextFrame.VelX = 0;
}
_i$1++;
continue;
} }
thatPlayerInNextFrame.CharacterState = skillConfig.BoundChState;
if (false === currPlayerDownsync$1.InAir) {
thatPlayerInNextFrame.VelX = 0;
}
_i$1++;
/* continue; */ $s = 1; continue;
} }
if (0 === currPlayerDownsync$1.FramesToRecover) { if (0 === currPlayerDownsync$1.FramesToRecover) {
if (!((0 === effDx)) || !((0 === effDy))) { if (!((0 === effDx)) || !((0 === effDy))) {
@ -5565,11 +5547,12 @@ $packages["jsexport/battle"] = (function() {
} }
} }
_i$1++; _i$1++;
} $s = 1; continue;
case 2:
_ref$3 = currRenderFrame.PlayersArr; _ref$3 = currRenderFrame.PlayersArr;
_i$2 = 0; _i$2 = 0;
/* while (true) { */ case 1: /* while (true) { */ case 4:
/* if (!(_i$2 < _ref$3.$length)) { break; } */ if(!(_i$2 < _ref$3.$length)) { $s = 2; continue; } /* if (!(_i$2 < _ref$3.$length)) { break; } */ if(!(_i$2 < _ref$3.$length)) { $s = 5; continue; }
i$2 = _i$2; 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]); 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; joinIndex$1 = currPlayerDownsync$2.JoinIndex;
@ -5578,7 +5561,7 @@ $packages["jsexport/battle"] = (function() {
(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$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; (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;
collisionPlayerIndex = 131072 + joinIndex$1 >> 0; collisionPlayerIndex = 131072 + joinIndex$1 >> 0;
playerCollider = (_entry$2 = collisionSysMap[$Int32.keyFor(collisionPlayerIndex)], _entry$2 !== undefined ? _entry$2.v : ptrType$8.nil); playerCollider = (_entry$1 = collisionSysMap[$Int32.keyFor(collisionPlayerIndex)], _entry$1 !== undefined ? _entry$1.v : ptrType$8.nil);
thatPlayerInNextFrame$1 = ((i$2 < 0 || i$2 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i$2]); thatPlayerInNextFrame$1 = ((i$2 < 0 || i$2 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i$2]);
chConfig$1 = ((i$2 < 0 || i$2 >= chConfigsOrderedByJoinIndex.$length) ? ($throwRuntimeError("index out of range"), undefined) : chConfigsOrderedByJoinIndex.$array[chConfigsOrderedByJoinIndex.$offset + i$2]); chConfig$1 = ((i$2 < 0 || i$2 >= chConfigsOrderedByJoinIndex.$length) ? ($throwRuntimeError("index out of range"), undefined) : chConfigsOrderedByJoinIndex.$array[chConfigsOrderedByJoinIndex.$offset + i$2]);
_tmp$4 = currPlayerDownsync$2.VirtualGridX + currPlayerDownsync$2.VelX >> 0; _tmp$4 = currPlayerDownsync$2.VirtualGridX + currPlayerDownsync$2.VelX >> 0;
@ -5591,23 +5574,23 @@ $packages["jsexport/battle"] = (function() {
_tuple$2 = VirtualGridToPolygonColliderBLPos(newVx, newVy, playerCollider.W * 0.5, playerCollider.H * 0.5, 0, 0, 0, 0, collisionSpaceOffsetX, collisionSpaceOffsetY); _tuple$2 = VirtualGridToPolygonColliderBLPos(newVx, newVy, playerCollider.W * 0.5, playerCollider.H * 0.5, 0, 0, 0, 0, collisionSpaceOffsetX, collisionSpaceOffsetY);
playerCollider.X = _tuple$2[0]; playerCollider.X = _tuple$2[0];
playerCollider.Y = _tuple$2[1]; playerCollider.Y = _tuple$2[1];
$r = playerCollider.Update(); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } $r = playerCollider.Update(); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
if (currPlayerDownsync$2.InAir) { if (currPlayerDownsync$2.InAir) {
thatPlayerInNextFrame$1.VelX = thatPlayerInNextFrame$1.VelX + (0) >> 0; thatPlayerInNextFrame$1.VelX = thatPlayerInNextFrame$1.VelX + (0) >> 0;
thatPlayerInNextFrame$1.VelY = thatPlayerInNextFrame$1.VelY + (-50) >> 0; thatPlayerInNextFrame$1.VelY = thatPlayerInNextFrame$1.VelY + (-50) >> 0;
} }
_i$2++; _i$2++;
$s = 1; continue; $s = 4; continue;
case 2: case 5:
bulletColliders = $makeSlice(sliceType$10, 0, currRenderFrame.MeleeBullets.$length); bulletColliders = $makeSlice(sliceType$10, 0, currRenderFrame.MeleeBullets.$length);
_ref$4 = currRenderFrame.MeleeBullets; _ref$4 = currRenderFrame.MeleeBullets;
_i$3 = 0; _i$3 = 0;
/* while (true) { */ case 4: /* while (true) { */ case 7:
/* if (!(_i$3 < _ref$4.$length)) { break; } */ if(!(_i$3 < _ref$4.$length)) { $s = 5; continue; } /* if (!(_i$3 < _ref$4.$length)) { break; } */ if(!(_i$3 < _ref$4.$length)) { $s = 8; continue; }
meleeBullet = ((_i$3 < 0 || _i$3 >= _ref$4.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$4.$array[_ref$4.$offset + _i$3]); meleeBullet = ((_i$3 < 0 || _i$3 >= _ref$4.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$4.$array[_ref$4.$offset + _i$3]);
/* */ if (((meleeBullet.Bullet.OriginatedRenderFrameId + meleeBullet.Bullet.StartupFrames >> 0) <= currRenderFrame.Id) && (((meleeBullet.Bullet.OriginatedRenderFrameId + meleeBullet.Bullet.StartupFrames >> 0) + meleeBullet.Bullet.ActiveFrames >> 0) > currRenderFrame.Id)) { $s = 6; continue; } /* */ if (((meleeBullet.Bullet.OriginatedRenderFrameId + meleeBullet.Bullet.StartupFrames >> 0) <= currRenderFrame.Id) && (((meleeBullet.Bullet.OriginatedRenderFrameId + meleeBullet.Bullet.StartupFrames >> 0) + meleeBullet.Bullet.ActiveFrames >> 0) > currRenderFrame.Id)) { $s = 9; continue; }
/* */ $s = 7; continue; /* */ $s = 10; 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 6: /* if (((meleeBullet.Bullet.OriginatedRenderFrameId + meleeBullet.Bullet.StartupFrames >> 0) <= currRenderFrame.Id) && (((meleeBullet.Bullet.OriginatedRenderFrameId + meleeBullet.Bullet.StartupFrames >> 0) + meleeBullet.Bullet.ActiveFrames >> 0) > currRenderFrame.Id)) { */ case 9:
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])); 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 = 1; xfac = 1;
if (0 > offender.DirX) { if (0 > offender.DirX) {
@ -5619,40 +5602,40 @@ $packages["jsexport/battle"] = (function() {
_tuple$4 = VirtualGridToWorldPos(meleeBullet.Bullet.HitboxSizeX, meleeBullet.Bullet.HitboxSizeY); _tuple$4 = VirtualGridToWorldPos(meleeBullet.Bullet.HitboxSizeX, meleeBullet.Bullet.HitboxSizeY);
hitboxSizeWx = _tuple$4[0]; hitboxSizeWx = _tuple$4[0];
hitboxSizeWy = _tuple$4[1]; hitboxSizeWy = _tuple$4[1];
_r = GenerateRectCollider(bulletWx, bulletWy, hitboxSizeWx, hitboxSizeWy, 0.1, 0.1, 0.1, 0.1, collisionSpaceOffsetX, collisionSpaceOffsetY, meleeBullet, "MeleeBullet"); /* */ $s = 9; case 9: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } _r$1 = GenerateRectCollider(bulletWx, bulletWy, hitboxSizeWx, hitboxSizeWy, 0.1, 0.1, 0.1, 0.1, collisionSpaceOffsetX, collisionSpaceOffsetY, meleeBullet, "MeleeBullet"); /* */ $s = 12; case 12: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
newBulletCollider = _r; newBulletCollider = _r$1;
$r = collisionSys.Add(new sliceType$10([newBulletCollider])); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } $r = collisionSys.Add(new sliceType$10([newBulletCollider])); /* */ $s = 13; case 13: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
bulletColliders = $append(bulletColliders, newBulletCollider); bulletColliders = $append(bulletColliders, newBulletCollider);
$s = 8; continue; $s = 11; continue;
/* } else { */ case 7: /* } else { */ case 10:
nextRenderFrameMeleeBullets = $append(nextRenderFrameMeleeBullets, meleeBullet); nextRenderFrameMeleeBullets = $append(nextRenderFrameMeleeBullets, meleeBullet);
/* } */ case 8: /* } */ case 11:
_i$3++; _i$3++;
$s = 4; continue; $s = 7; continue;
case 5: case 8:
_ref$5 = currRenderFrame.PlayersArr; _ref$5 = currRenderFrame.PlayersArr;
_i$4 = 0; _i$4 = 0;
/* while (true) { */ case 11: /* while (true) { */ case 14:
/* if (!(_i$4 < _ref$5.$length)) { break; } */ if(!(_i$4 < _ref$5.$length)) { $s = 12; continue; } /* if (!(_i$4 < _ref$5.$length)) { break; } */ if(!(_i$4 < _ref$5.$length)) { $s = 15; continue; }
i$3 = _i$4; i$3 = _i$4;
currPlayerDownsync$3 = ((_i$4 < 0 || _i$4 >= _ref$5.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$5.$array[_ref$5.$offset + _i$4]); currPlayerDownsync$3 = ((_i$4 < 0 || _i$4 >= _ref$5.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$5.$array[_ref$5.$offset + _i$4]);
joinIndex$2 = currPlayerDownsync$3.JoinIndex; joinIndex$2 = currPlayerDownsync$3.JoinIndex;
collisionPlayerIndex$1 = 131072 + joinIndex$2 >> 0; collisionPlayerIndex$1 = 131072 + joinIndex$2 >> 0;
playerCollider$1 = (_entry$3 = collisionSysMap[$Int32.keyFor(collisionPlayerIndex$1)], _entry$3 !== undefined ? _entry$3.v : ptrType$8.nil); playerCollider$1 = (_entry$2 = collisionSysMap[$Int32.keyFor(collisionPlayerIndex$1)], _entry$2 !== undefined ? _entry$2.v : ptrType$8.nil);
playerShape = $assertType(playerCollider$1.Shape, ptrType$5); playerShape = $assertType(playerCollider$1.Shape, ptrType$6);
_r$1 = calcHardPushbacksNorms(joinIndex$2, playerCollider$1, playerShape, 0.1, (x$6 = joinIndex$2 - 1 >> 0, ((x$6 < 0 || x$6 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + x$6]))); /* */ $s = 13; case 13: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; } _r$2 = calcHardPushbacksNorms(joinIndex$2, playerCollider$1, playerShape, 0.1, (x$6 = joinIndex$2 - 1 >> 0, ((x$6 < 0 || x$6 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + x$6]))); /* */ $s = 16; case 16: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
(x$7 = joinIndex$2 - 1 >> 0, ((x$7 < 0 || x$7 >= hardPushbackNorms.$length) ? ($throwRuntimeError("index out of range"), undefined) : hardPushbackNorms.$array[hardPushbackNorms.$offset + x$7] = _r$1)); (x$7 = joinIndex$2 - 1 >> 0, ((x$7 < 0 || x$7 >= hardPushbackNorms.$length) ? ($throwRuntimeError("index out of range"), undefined) : hardPushbackNorms.$array[hardPushbackNorms.$offset + x$7] = _r$2));
thatPlayerInNextFrame$2 = ((i$3 < 0 || i$3 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i$3]); thatPlayerInNextFrame$2 = ((i$3 < 0 || i$3 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i$3]);
chConfig$2 = ((i$3 < 0 || i$3 >= chConfigsOrderedByJoinIndex.$length) ? ($throwRuntimeError("index out of range"), undefined) : chConfigsOrderedByJoinIndex.$array[chConfigsOrderedByJoinIndex.$offset + i$3]); chConfig$2 = ((i$3 < 0 || i$3 >= chConfigsOrderedByJoinIndex.$length) ? ($throwRuntimeError("index out of range"), undefined) : chConfigsOrderedByJoinIndex.$array[chConfigsOrderedByJoinIndex.$offset + i$3]);
landedOnGravityPushback = false; landedOnGravityPushback = false;
collision = playerCollider$1.Check(0, 0, new sliceType$4([])); collision = playerCollider$1.Check(0, 0, new sliceType$4([]));
/* */ if (!(ptrType$1.nil === collision)) { $s = 14; continue; } /* */ if (!(ptrType$3.nil === collision)) { $s = 17; continue; }
/* */ $s = 15; continue; /* */ $s = 18; continue;
/* if (!(ptrType$1.nil === collision)) { */ case 14: /* if (!(ptrType$3.nil === collision)) { */ case 17:
_ref$6 = collision.Objects; _ref$6 = collision.Objects;
_i$5 = 0; _i$5 = 0;
/* while (true) { */ case 16: /* while (true) { */ case 19:
/* if (!(_i$5 < _ref$6.$length)) { break; } */ if(!(_i$5 < _ref$6.$length)) { $s = 17; continue; } /* if (!(_i$5 < _ref$6.$length)) { break; } */ if(!(_i$5 < _ref$6.$length)) { $s = 20; continue; }
obj = ((_i$5 < 0 || _i$5 >= _ref$6.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$6.$array[_ref$6.$offset + _i$5]); obj = ((_i$5 < 0 || _i$5 >= _ref$6.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$6.$array[_ref$6.$offset + _i$5]);
_tmp$6 = false; _tmp$6 = false;
_tmp$7 = false; _tmp$7 = false;
@ -5661,27 +5644,27 @@ $packages["jsexport/battle"] = (function() {
isAnotherPlayer = _tmp$7; isAnotherPlayer = _tmp$7;
isBullet = _tmp$8; isBullet = _tmp$8;
_ref$7 = obj.Data; _ref$7 = obj.Data;
if ($assertType(_ref$7, ptrType$3, true)[1]) { if ($assertType(_ref$7, ptrType$5, true)[1]) {
isAnotherPlayer = true; isAnotherPlayer = true;
} else if ($assertType(_ref$7, ptrType$4, true)[1]) { } else if ($assertType(_ref$7, ptrType$1, true)[1]) {
isBullet = true; isBullet = true;
} else { } else {
isBarrier = true; isBarrier = true;
} }
if (isBullet) { if (isBullet) {
_i$5++; _i$5++;
/* continue; */ $s = 16; continue; /* continue; */ $s = 19; continue;
} }
bShape = $assertType(obj.Shape, ptrType$5); bShape = $assertType(obj.Shape, ptrType$6);
_r$2 = CalcPushbacks(0, 0, playerShape, bShape); /* */ $s = 18; case 18: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; } _r$3 = CalcPushbacks(0, 0, playerShape, bShape); /* */ $s = 21; case 21: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; }
_tuple$5 = _r$2; _tuple$5 = _r$3;
overlapped = _tuple$5[0]; overlapped = _tuple$5[0];
pushbackX = _tuple$5[1]; pushbackX = _tuple$5[1];
pushbackY = _tuple$5[2]; pushbackY = _tuple$5[2];
overlapResult = _tuple$5[3]; overlapResult = _tuple$5[3];
if (!overlapped) { if (!overlapped) {
_i$5++; _i$5++;
/* continue; */ $s = 16; continue; /* continue; */ $s = 19; continue;
} }
normAlignmentWithGravity = overlapResult.OverlapX * 0 + overlapResult.OverlapY * -1; normAlignmentWithGravity = overlapResult.OverlapX * 0 + overlapResult.OverlapY * -1;
if (isAnotherPlayer) { if (isAnotherPlayer) {
@ -5710,9 +5693,9 @@ $packages["jsexport/battle"] = (function() {
landedOnGravityPushback = true; landedOnGravityPushback = true;
} }
_i$5++; _i$5++;
$s = 16; continue; $s = 19; continue;
case 17: case 20:
/* } */ case 15: /* } */ case 18:
if (landedOnGravityPushback) { if (landedOnGravityPushback) {
thatPlayerInNextFrame$2.InAir = false; thatPlayerInNextFrame$2.InAir = false;
if (currPlayerDownsync$3.InAir && 0 >= currPlayerDownsync$3.VelY) { if (currPlayerDownsync$3.InAir && 0 >= currPlayerDownsync$3.VelY) {
@ -5739,54 +5722,54 @@ $packages["jsexport/battle"] = (function() {
} }
} }
_i$4++; _i$4++;
$s = 11; continue; $s = 14; continue;
case 12: case 15:
_ref$9 = bulletColliders; _ref$9 = bulletColliders;
_i$7 = 0; _i$7 = 0;
/* while (true) { */ case 19: /* while (true) { */ case 22:
/* if (!(_i$7 < _ref$9.$length)) { break; } */ if(!(_i$7 < _ref$9.$length)) { $s = 20; continue; } /* if (!(_i$7 < _ref$9.$length)) { break; } */ if(!(_i$7 < _ref$9.$length)) { $s = 23; continue; }
bulletCollider = ((_i$7 < 0 || _i$7 >= _ref$9.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$9.$array[_ref$9.$offset + _i$7]); bulletCollider = ((_i$7 < 0 || _i$7 >= _ref$9.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$9.$array[_ref$9.$offset + _i$7]);
collision$1 = bulletCollider.Check(0, 0, new sliceType$4([])); collision$1 = bulletCollider.Check(0, 0, new sliceType$4([]));
bulletCollider.Space.Remove(new sliceType$10([bulletCollider])); bulletCollider.Space.Remove(new sliceType$10([bulletCollider]));
_ref$10 = bulletCollider.Data; _ref$10 = bulletCollider.Data;
/* */ if ($assertType(_ref$10, ptrType$4, true)[1]) { $s = 21; continue; } /* */ if ($assertType(_ref$10, ptrType$1, true)[1]) { $s = 24; continue; }
/* */ $s = 22; continue; /* */ $s = 25; continue;
/* if ($assertType(_ref$10, ptrType$4, true)[1]) { */ case 21: /* if ($assertType(_ref$10, ptrType$1, true)[1]) { */ case 24:
v$1 = _ref$10.$val; v$1 = _ref$10.$val;
if (ptrType$1.nil === collision$1) { if (ptrType$3.nil === collision$1) {
nextRenderFrameMeleeBullets = $append(nextRenderFrameMeleeBullets, v$1); nextRenderFrameMeleeBullets = $append(nextRenderFrameMeleeBullets, v$1);
_i$7++; _i$7++;
/* continue; */ $s = 19; continue; /* continue; */ $s = 22; continue;
} }
bulletShape = $assertType(bulletCollider.Shape, ptrType$5); bulletShape = $assertType(bulletCollider.Shape, ptrType$6);
offender$1 = (x$9 = currRenderFrame.PlayersArr, x$10 = v$1.Bullet.OffenderJoinIndex - 1 >> 0, ((x$10 < 0 || x$10 >= x$9.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$9.$array[x$9.$offset + x$10])); offender$1 = (x$9 = currRenderFrame.PlayersArr, x$10 = v$1.Bullet.OffenderJoinIndex - 1 >> 0, ((x$10 < 0 || x$10 >= x$9.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$9.$array[x$9.$offset + x$10]));
_ref$11 = collision$1.Objects; _ref$11 = collision$1.Objects;
_i$8 = 0; _i$8 = 0;
/* while (true) { */ case 23: /* while (true) { */ case 26:
/* if (!(_i$8 < _ref$11.$length)) { break; } */ if(!(_i$8 < _ref$11.$length)) { $s = 24; continue; } /* if (!(_i$8 < _ref$11.$length)) { break; } */ if(!(_i$8 < _ref$11.$length)) { $s = 27; continue; }
obj$1 = ((_i$8 < 0 || _i$8 >= _ref$11.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$11.$array[_ref$11.$offset + _i$8]); obj$1 = ((_i$8 < 0 || _i$8 >= _ref$11.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$11.$array[_ref$11.$offset + _i$8]);
defenderShape = $assertType(obj$1.Shape, ptrType$5); defenderShape = $assertType(obj$1.Shape, ptrType$6);
_ref$12 = obj$1.Data; _ref$12 = obj$1.Data;
/* */ if ($assertType(_ref$12, ptrType$3, true)[1]) { $s = 25; continue; } /* */ if ($assertType(_ref$12, ptrType$5, true)[1]) { $s = 28; continue; }
/* */ $s = 26; continue; /* */ $s = 29; continue;
/* if ($assertType(_ref$12, ptrType$3, true)[1]) { */ case 25: /* if ($assertType(_ref$12, ptrType$5, true)[1]) { */ case 28:
t = _ref$12.$val; t = _ref$12.$val;
if (v$1.Bullet.OffenderJoinIndex === t.JoinIndex) { if (v$1.Bullet.OffenderJoinIndex === t.JoinIndex) {
_i$8++; _i$8++;
/* continue; */ $s = 23; continue; /* continue; */ $s = 26; continue;
} }
_tuple$6 = (_entry$4 = invinsibleSet[$Int32.keyFor(t.CharacterState)], _entry$4 !== undefined ? [_entry$4.v, true] : [false, false]); _tuple$6 = (_entry$3 = invinsibleSet[$Int32.keyFor(t.CharacterState)], _entry$3 !== undefined ? [_entry$3.v, true] : [false, false]);
existent$1 = _tuple$6[1]; existent$1 = _tuple$6[1];
if (existent$1) { if (existent$1) {
_i$8++; _i$8++;
/* continue; */ $s = 23; continue; /* continue; */ $s = 26; continue;
} }
_r$3 = CalcPushbacks(0, 0, bulletShape, defenderShape); /* */ $s = 28; case 28: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; } _r$4 = CalcPushbacks(0, 0, bulletShape, defenderShape); /* */ $s = 31; case 31: if($c) { $c = false; _r$4 = _r$4.$blk(); } if (_r$4 && _r$4.$blk !== undefined) { break s; }
_tuple$7 = _r$3; _tuple$7 = _r$4;
overlapped$1 = _tuple$7[0]; overlapped$1 = _tuple$7[0];
if (!overlapped$1) { if (!overlapped$1) {
_i$8++; _i$8++;
/* continue; */ $s = 23; continue; /* continue; */ $s = 26; continue;
} }
xfac$1 = 1; xfac$1 = 1;
if (0 > offender$1.DirX) { if (0 > offender$1.DirX) {
@ -5808,17 +5791,17 @@ $packages["jsexport/battle"] = (function() {
if (v$1.Bullet.HitStunFrames > oldFramesToRecover) { if (v$1.Bullet.HitStunFrames > oldFramesToRecover) {
atkedPlayerInNextFrame.FramesToRecover = v$1.Bullet.HitStunFrames; atkedPlayerInNextFrame.FramesToRecover = v$1.Bullet.HitStunFrames;
} }
$s = 27; continue; $s = 30; continue;
/* } else { */ case 26: /* } else { */ case 29:
t$1 = _ref$12; t$1 = _ref$12;
/* } */ case 27: /* } */ case 30:
_i$8++; _i$8++;
$s = 23; continue; $s = 26; continue;
case 24: case 27:
/* } */ case 22: /* } */ case 25:
_i$7++; _i$7++;
$s = 19; continue; $s = 22; continue;
case 20: case 23:
_ref$13 = currRenderFrame.PlayersArr; _ref$13 = currRenderFrame.PlayersArr;
_i$9 = 0; _i$9 = 0;
while (true) { while (true) {
@ -5827,30 +5810,30 @@ $packages["jsexport/battle"] = (function() {
currPlayerDownsync$4 = ((_i$9 < 0 || _i$9 >= _ref$13.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$13.$array[_ref$13.$offset + _i$9]); currPlayerDownsync$4 = ((_i$9 < 0 || _i$9 >= _ref$13.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$13.$array[_ref$13.$offset + _i$9]);
joinIndex$3 = currPlayerDownsync$4.JoinIndex; joinIndex$3 = currPlayerDownsync$4.JoinIndex;
collisionPlayerIndex$2 = 131072 + joinIndex$3 >> 0; collisionPlayerIndex$2 = 131072 + joinIndex$3 >> 0;
playerCollider$2 = (_entry$5 = collisionSysMap[$Int32.keyFor(collisionPlayerIndex$2)], _entry$5 !== undefined ? _entry$5.v : ptrType$8.nil); playerCollider$2 = (_entry$4 = collisionSysMap[$Int32.keyFor(collisionPlayerIndex$2)], _entry$4 !== undefined ? _entry$4.v : ptrType$8.nil);
thatPlayerInNextFrame$3 = ((i$4 < 0 || i$4 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i$4]); thatPlayerInNextFrame$3 = ((i$4 < 0 || i$4 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i$4]);
_tuple$8 = PolygonColliderBLToVirtualGridPos(playerCollider$2.X - (x$13 = joinIndex$3 - 1 >> 0, ((x$13 < 0 || x$13 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + x$13])).X, playerCollider$2.Y - (x$14 = joinIndex$3 - 1 >> 0, ((x$14 < 0 || x$14 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + x$14])).Y, playerCollider$2.W * 0.5, playerCollider$2.H * 0.5, 0, 0, 0, 0, collisionSpaceOffsetX, collisionSpaceOffsetY); _tuple$8 = PolygonColliderBLToVirtualGridPos(playerCollider$2.X - (x$13 = joinIndex$3 - 1 >> 0, ((x$13 < 0 || x$13 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + x$13])).X, playerCollider$2.Y - (x$14 = joinIndex$3 - 1 >> 0, ((x$14 < 0 || x$14 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + x$14])).Y, playerCollider$2.W * 0.5, playerCollider$2.H * 0.5, 0, 0, 0, 0, collisionSpaceOffsetX, collisionSpaceOffsetY);
thatPlayerInNextFrame$3.VirtualGridX = _tuple$8[0]; thatPlayerInNextFrame$3.VirtualGridX = _tuple$8[0];
thatPlayerInNextFrame$3.VirtualGridY = _tuple$8[1]; thatPlayerInNextFrame$3.VirtualGridY = _tuple$8[1];
if (thatPlayerInNextFrame$3.InAir) { if (thatPlayerInNextFrame$3.InAir) {
oldNextCharacterState = thatPlayerInNextFrame$3.CharacterState; oldNextCharacterState = thatPlayerInNextFrame$3.CharacterState;
_2 = oldNextCharacterState; _1 = oldNextCharacterState;
if ((_2 === (0)) || (_2 === (1))) { if ((_1 === (0)) || (_1 === (1))) {
if (((i$4 < 0 || i$4 >= jumpedOrNotList.$length) ? ($throwRuntimeError("index out of range"), undefined) : jumpedOrNotList.$array[jumpedOrNotList.$offset + i$4]) || (5 === currPlayerDownsync$4.CharacterState)) { if (((i$4 < 0 || i$4 >= jumpedOrNotList.$length) ? ($throwRuntimeError("index out of range"), undefined) : jumpedOrNotList.$array[jumpedOrNotList.$offset + i$4]) || (5 === currPlayerDownsync$4.CharacterState)) {
thatPlayerInNextFrame$3.CharacterState = 5; thatPlayerInNextFrame$3.CharacterState = 5;
} else { } else {
thatPlayerInNextFrame$3.CharacterState = 4; thatPlayerInNextFrame$3.CharacterState = 4;
} }
} else if (_2 === (2)) { } else if (_1 === (2)) {
thatPlayerInNextFrame$3.CharacterState = 6; thatPlayerInNextFrame$3.CharacterState = 6;
} else if (_2 === (3)) { } else if (_1 === (3)) {
thatPlayerInNextFrame$3.CharacterState = 7; thatPlayerInNextFrame$3.CharacterState = 7;
} }
} }
if (!((thatPlayerInNextFrame$3.CharacterState === currPlayerDownsync$4.CharacterState))) { if (!((thatPlayerInNextFrame$3.CharacterState === currPlayerDownsync$4.CharacterState))) {
thatPlayerInNextFrame$3.FramesInChState = 0; thatPlayerInNextFrame$3.FramesInChState = 0;
} }
_tuple$9 = (_entry$6 = nonAttackingSet[$Int32.keyFor(thatPlayerInNextFrame$3.CharacterState)], _entry$6 !== undefined ? [_entry$6.v, true] : [false, false]); _tuple$9 = (_entry$5 = nonAttackingSet[$Int32.keyFor(thatPlayerInNextFrame$3.CharacterState)], _entry$5 !== undefined ? [_entry$5.v, true] : [false, false]);
existent$2 = _tuple$9[1]; existent$2 = _tuple$9[1];
if (existent$2) { if (existent$2) {
thatPlayerInNextFrame$3.ActiveSkillId = -1; thatPlayerInNextFrame$3.ActiveSkillId = -1;
@ -5859,7 +5842,7 @@ $packages["jsexport/battle"] = (function() {
_i$9++; _i$9++;
} }
$s = -1; return new RoomDownsyncFrame.ptr(currRenderFrame.Id + 1 >> 0, nextRenderFramePlayers, new $Int64(0, 0), nextRenderFrameMeleeBullets, sliceType$11.nil, new $Uint64(0, 0), false, false); $s = -1; return new RoomDownsyncFrame.ptr(currRenderFrame.Id + 1 >> 0, nextRenderFramePlayers, new $Int64(0, 0), nextRenderFrameMeleeBullets, sliceType$11.nil, new $Uint64(0, 0), false, false);
/* */ } return; } var $f = {$blk: ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame, $c: true, $r, _1, _2, _entry, _entry$1, _entry$2, _entry$3, _entry$4, _entry$5, _entry$6, _i, _i$1, _i$2, _i$3, _i$4, _i$5, _i$6, _i$7, _i$8, _i$9, _index, _index$1, _r, _r$1, _r$2, _r$3, _ref, _ref$1, _ref$10, _ref$11, _ref$12, _ref$13, _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$2, _tmp$3, _tmp$4, _tmp$5, _tmp$6, _tmp$7, _tmp$8, _tmp$9, _tuple, _tuple$1, _tuple$2, _tuple$3, _tuple$4, _tuple$5, _tuple$6, _tuple$7, _tuple$8, _tuple$9, atkedPlayerInNextFrame, bShape, bulletCollider, bulletColliders, bulletShape, bulletWx, bulletWy, chConfig, chConfig$1, chConfig$2, chConfigsOrderedByJoinIndex, collision, collision$1, collisionPlayerIndex, collisionPlayerIndex$1, collisionPlayerIndex$2, collisionSpaceOffsetX, collisionSpaceOffsetY, collisionSys, collisionSysMap, currPlayerDownsync, currPlayerDownsync$1, currPlayerDownsync$2, currPlayerDownsync$3, currPlayerDownsync$4, currRenderFrame, defenderShape, effDx, effDy, effPushbacks, existent, existent$1, existent$2, hardPushbackNorm, hardPushbackNorms, hitboxSizeWx, hitboxSizeWy, 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, newBulletCollider, newVx, newVy, nextRenderFrameMeleeBullets, nextRenderFramePlayers, normAlignmentWithGravity, obj, obj$1, offender, offender$1, oldFramesToRecover, oldNextCharacterState, overlapResult, overlapped, overlapped$1, patternId, playerCollider, playerCollider$1, playerCollider$2, playerShape, projectedMagnitude, pushbackVelX, pushbackVelY, pushbackX, pushbackY, roomCapacity, skillConfig, skillId, t, t$1, thatPlayerInNextFrame, thatPlayerInNextFrame$1, thatPlayerInNextFrame$2, thatPlayerInNextFrame$3, v, v$1, x, x$1, x$10, x$11, x$12, x$13, x$14, x$2, x$3, x$4, x$5, x$6, x$7, x$8, x$9, xfac, xfac$1, $s};return $f; /* */ } return; } var $f = {$blk: ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame, $c: true, $r, _1, _entry, _entry$1, _entry$2, _entry$3, _entry$4, _entry$5, _i, _i$1, _i$2, _i$3, _i$4, _i$5, _i$6, _i$7, _i$8, _i$9, _index, _index$1, _r, _r$1, _r$2, _r$3, _r$4, _ref, _ref$1, _ref$10, _ref$11, _ref$12, _ref$13, _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$2, _tmp$3, _tmp$4, _tmp$5, _tmp$6, _tmp$7, _tmp$8, _tmp$9, _tuple, _tuple$1, _tuple$2, _tuple$3, _tuple$4, _tuple$5, _tuple$6, _tuple$7, _tuple$8, _tuple$9, atkedPlayerInNextFrame, bShape, bulletCollider, bulletColliders, bulletShape, bulletWx, bulletWy, chConfig, chConfig$1, chConfig$2, chConfigsOrderedByJoinIndex, collision, collision$1, collisionPlayerIndex, collisionPlayerIndex$1, collisionPlayerIndex$2, collisionSpaceOffsetX, collisionSpaceOffsetY, collisionSys, collisionSysMap, currPlayerDownsync, currPlayerDownsync$1, currPlayerDownsync$2, currPlayerDownsync$3, currPlayerDownsync$4, currRenderFrame, defenderShape, effDx, effDy, effPushbacks, existent, existent$1, existent$2, hardPushbackNorm, hardPushbackNorms, hitboxSizeWx, hitboxSizeWy, 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, newBulletCollider, newVx, newVy, nextRenderFrameMeleeBullets, nextRenderFramePlayers, normAlignmentWithGravity, obj, obj$1, offender, offender$1, oldFramesToRecover, oldNextCharacterState, overlapResult, overlapped, overlapped$1, patternId, playerCollider, playerCollider$1, playerCollider$2, playerShape, projectedMagnitude, pushbackVelX, pushbackVelY, pushbackX, pushbackY, roomCapacity, skillConfig, skillId, t, t$1, thatPlayerInNextFrame, thatPlayerInNextFrame$1, thatPlayerInNextFrame$2, thatPlayerInNextFrame$3, v, v$1, x, x$1, x$10, x$11, x$12, x$13, x$14, x$2, x$3, x$4, x$5, x$6, x$7, x$8, x$9, xfac, xfac$1, $s};return $f;
}; };
$pkg.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame = ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame; $pkg.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame = ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame;
GenerateRectCollider = function(wx, wy, w, h, topPadding, bottomPadding, leftPadding, rightPadding, spaceOffsetX, spaceOffsetY, data, tag) { GenerateRectCollider = function(wx, wy, w, h, topPadding, bottomPadding, leftPadding, rightPadding, spaceOffsetX, spaceOffsetY, data, tag) {
@ -5968,23 +5951,84 @@ $packages["jsexport/battle"] = (function() {
PlayerDownsync.init("", [{prop: "Id", name: "Id", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VirtualGridX", name: "VirtualGridX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VirtualGridY", name: "VirtualGridY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirX", name: "DirX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirY", name: "DirY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelX", name: "VelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelY", name: "VelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Speed", name: "Speed", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BattleState", name: "BattleState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "JoinIndex", name: "JoinIndex", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ColliderRadius", name: "ColliderRadius", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Removed", name: "Removed", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "Score", name: "Score", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "LastMoveGmtMillis", name: "LastMoveGmtMillis", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "FramesToRecover", name: "FramesToRecover", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "FramesInChState", name: "FramesInChState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Hp", name: "Hp", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "MaxHp", name: "MaxHp", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "CharacterState", name: "CharacterState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "InAir", name: "InAir", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "ActiveSkillId", name: "ActiveSkillId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ActiveSkillHit", name: "ActiveSkillHit", embedded: false, exported: true, typ: $Int32, tag: ""}]); PlayerDownsync.init("", [{prop: "Id", name: "Id", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VirtualGridX", name: "VirtualGridX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VirtualGridY", name: "VirtualGridY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirX", name: "DirX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirY", name: "DirY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelX", name: "VelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelY", name: "VelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Speed", name: "Speed", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BattleState", name: "BattleState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "JoinIndex", name: "JoinIndex", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ColliderRadius", name: "ColliderRadius", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Removed", name: "Removed", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "Score", name: "Score", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "LastMoveGmtMillis", name: "LastMoveGmtMillis", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "FramesToRecover", name: "FramesToRecover", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "FramesInChState", name: "FramesInChState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Hp", name: "Hp", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "MaxHp", name: "MaxHp", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "CharacterState", name: "CharacterState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "InAir", name: "InAir", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "ActiveSkillId", name: "ActiveSkillId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ActiveSkillHit", name: "ActiveSkillHit", embedded: false, exported: true, typ: $Int32, tag: ""}]);
InputFrameDecoded.init("", [{prop: "Dx", name: "Dx", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Dy", name: "Dy", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BtnALevel", name: "BtnALevel", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BtnBLevel", name: "BtnBLevel", embedded: false, exported: true, typ: $Int32, tag: ""}]); InputFrameDecoded.init("", [{prop: "Dx", name: "Dx", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Dy", name: "Dy", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BtnALevel", name: "BtnALevel", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BtnBLevel", name: "BtnBLevel", embedded: false, exported: true, typ: $Int32, tag: ""}]);
Barrier.init("", [{prop: "Boundary", name: "Boundary", embedded: false, exported: true, typ: ptrType$11, tag: ""}]); Barrier.init("", [{prop: "Boundary", name: "Boundary", embedded: false, exported: true, typ: ptrType$11, tag: ""}]);
Bullet.init("", [{prop: "OriginatedRenderFrameId", name: "OriginatedRenderFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "OffenderJoinIndex", name: "OffenderJoinIndex", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "StartupFrames", name: "StartupFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "CancellableStFrame", name: "CancellableStFrame", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "CancellableEdFrame", name: "CancellableEdFrame", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ActiveFrames", name: "ActiveFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitStunFrames", name: "HitStunFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BlockStunFrames", name: "BlockStunFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "PushbackVelX", name: "PushbackVelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "PushbackVelY", name: "PushbackVelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Damage", name: "Damage", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "SelfLockVelX", name: "SelfLockVelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "SelfLockVelY", name: "SelfLockVelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxOffsetX", name: "HitboxOffsetX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxOffsetY", name: "HitboxOffsetY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxSizeX", name: "HitboxSizeX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxSizeY", name: "HitboxSizeY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BlowUp", name: "BlowUp", embedded: false, exported: true, typ: $Bool, tag: ""}]); Bullet.init("", [{prop: "OriginatedRenderFrameId", name: "OriginatedRenderFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "OffenderJoinIndex", name: "OffenderJoinIndex", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "StartupFrames", name: "StartupFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "CancellableStFrame", name: "CancellableStFrame", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "CancellableEdFrame", name: "CancellableEdFrame", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ActiveFrames", name: "ActiveFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitStunFrames", name: "HitStunFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BlockStunFrames", name: "BlockStunFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "PushbackVelX", name: "PushbackVelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "PushbackVelY", name: "PushbackVelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Damage", name: "Damage", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "SelfLockVelX", name: "SelfLockVelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "SelfLockVelY", name: "SelfLockVelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxOffsetX", name: "HitboxOffsetX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxOffsetY", name: "HitboxOffsetY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxSizeX", name: "HitboxSizeX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxSizeY", name: "HitboxSizeY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BlowUp", name: "BlowUp", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "CancelTransit", name: "CancelTransit", embedded: false, exported: true, typ: mapType, tag: ""}]);
MeleeBullet.init("", [{prop: "Bullet", name: "Bullet", embedded: true, exported: true, typ: Bullet, tag: ""}]); MeleeBullet.init("", [{prop: "Bullet", name: "Bullet", embedded: true, exported: true, typ: Bullet, tag: ""}]);
FireballBullet.init("", [{prop: "VirtualGridX", name: "VirtualGridX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VirtualGridY", name: "VirtualGridY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirX", name: "DirX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirY", name: "DirY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelX", name: "VelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelY", name: "VelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Speed", name: "Speed", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Bullet", name: "Bullet", embedded: true, exported: true, typ: Bullet, tag: ""}]); FireballBullet.init("", [{prop: "VirtualGridX", name: "VirtualGridX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VirtualGridY", name: "VirtualGridY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirX", name: "DirX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirY", name: "DirY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelX", name: "VelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelY", name: "VelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Speed", name: "Speed", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Bullet", name: "Bullet", embedded: true, exported: true, typ: Bullet, tag: ""}]);
Skill.init("", [{prop: "BattleLocalId", name: "BattleLocalId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "RecoveryFrames", name: "RecoveryFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "RecoveryFramesOnBlock", name: "RecoveryFramesOnBlock", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "RecoveryFramesOnHit", name: "RecoveryFramesOnHit", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ReleaseTriggerType", name: "ReleaseTriggerType", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Hits", name: "Hits", embedded: false, exported: true, typ: sliceType, tag: ""}]); Skill.init("", [{prop: "BattleLocalId", name: "BattleLocalId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "RecoveryFrames", name: "RecoveryFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "RecoveryFramesOnBlock", name: "RecoveryFramesOnBlock", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "RecoveryFramesOnHit", name: "RecoveryFramesOnHit", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ReleaseTriggerType", name: "ReleaseTriggerType", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BoundChState", name: "BoundChState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Hits", name: "Hits", embedded: false, exported: true, typ: sliceType$2, tag: ""}]);
RoomDownsyncFrame.init("", [{prop: "Id", name: "Id", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "PlayersArr", name: "PlayersArr", embedded: false, exported: true, typ: sliceType$6, tag: ""}, {prop: "CountdownNanos", name: "CountdownNanos", embedded: false, exported: true, typ: $Int64, tag: ""}, {prop: "MeleeBullets", name: "MeleeBullets", embedded: false, exported: true, typ: sliceType$7, tag: ""}, {prop: "FireballBullets", name: "FireballBullets", embedded: false, exported: true, typ: sliceType$11, tag: ""}, {prop: "BackendUnconfirmedMask", name: "BackendUnconfirmedMask", embedded: false, exported: true, typ: $Uint64, tag: ""}, {prop: "ShouldForceResync", name: "ShouldForceResync", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "PlayerOpPatternToSkillId", name: "PlayerOpPatternToSkillId", embedded: false, exported: true, typ: mapType, tag: ""}]); RoomDownsyncFrame.init("", [{prop: "Id", name: "Id", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "PlayersArr", name: "PlayersArr", embedded: false, exported: true, typ: sliceType$6, tag: ""}, {prop: "CountdownNanos", name: "CountdownNanos", embedded: false, exported: true, typ: $Int64, tag: ""}, {prop: "MeleeBullets", name: "MeleeBullets", embedded: false, exported: true, typ: sliceType$7, tag: ""}, {prop: "FireballBullets", name: "FireballBullets", embedded: false, exported: true, typ: sliceType$11, tag: ""}, {prop: "BackendUnconfirmedMask", name: "BackendUnconfirmedMask", embedded: false, exported: true, typ: $Uint64, tag: ""}, {prop: "ShouldForceResync", name: "ShouldForceResync", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "PlayerOpPatternToSkillId", name: "PlayerOpPatternToSkillId", embedded: false, exported: true, typ: mapType, tag: ""}]);
InputFrameDownsync.init("", [{prop: "InputFrameId", name: "InputFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "InputList", name: "InputList", embedded: false, exported: true, typ: sliceType$5, tag: ""}, {prop: "ConfirmedList", name: "ConfirmedList", embedded: false, exported: true, typ: $Uint64, tag: ""}]); InputFrameDownsync.init("", [{prop: "InputFrameId", name: "InputFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "InputList", name: "InputList", embedded: false, exported: true, typ: sliceType$5, tag: ""}, {prop: "ConfirmedList", name: "ConfirmedList", embedded: false, exported: true, typ: $Uint64, tag: ""}]);
RingBuffer.init("", [{prop: "Ed", name: "Ed", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "St", name: "St", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "EdFrameId", name: "EdFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "StFrameId", name: "StFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "N", name: "N", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Cnt", name: "Cnt", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Eles", name: "Eles", embedded: false, exported: true, typ: sliceType, tag: ""}]); RingBuffer.init("", [{prop: "Ed", name: "Ed", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "St", name: "St", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "EdFrameId", name: "EdFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "StFrameId", name: "StFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "N", name: "N", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Cnt", name: "Cnt", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Eles", name: "Eles", embedded: false, exported: true, typ: sliceType$2, tag: ""}]);
CharacterConfig.init("", [{prop: "SpeciesId", name: "SpeciesId", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "SpeciesName", name: "SpeciesName", embedded: false, exported: true, typ: $String, tag: ""}, {prop: "InAirIdleFrameIdxTurningPoint", name: "InAirIdleFrameIdxTurningPoint", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "InAirIdleFrameIdxTurnedCycle", name: "InAirIdleFrameIdxTurnedCycle", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "LayDownFrames", name: "LayDownFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "LayDownFramesToRecover", name: "LayDownFramesToRecover", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "GetUpFrames", name: "GetUpFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "GetUpFramesToRecover", name: "GetUpFramesToRecover", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "JumpingInitVelY", name: "JumpingInitVelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "PatternIdToSkillId", name: "PatternIdToSkillId", embedded: false, exported: true, typ: mapType, tag: ""}]); SkillMapperType.init([$Int, ptrType$5], [$Int], false);
CharacterConfig.init("", [{prop: "SpeciesId", name: "SpeciesId", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "SpeciesName", name: "SpeciesName", embedded: false, exported: true, typ: $String, tag: ""}, {prop: "InAirIdleFrameIdxTurningPoint", name: "InAirIdleFrameIdxTurningPoint", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "InAirIdleFrameIdxTurnedCycle", name: "InAirIdleFrameIdxTurnedCycle", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "LayDownFrames", name: "LayDownFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "LayDownFramesToRecover", name: "LayDownFramesToRecover", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "GetUpFrames", name: "GetUpFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "GetUpFramesToRecover", name: "GetUpFramesToRecover", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "JumpingInitVelY", name: "JumpingInitVelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "SkillMapper", name: "SkillMapper", embedded: false, exported: true, typ: SkillMapperType, tag: ""}]);
SatResult.init("", [{prop: "Overlap", name: "Overlap", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "OverlapX", name: "OverlapX", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "OverlapY", name: "OverlapY", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "AContainedInB", name: "AContainedInB", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "BContainedInA", name: "BContainedInA", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "Axis", name: "Axis", embedded: false, exported: true, typ: resolv.Vector, tag: ""}]); SatResult.init("", [{prop: "Overlap", name: "Overlap", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "OverlapX", name: "OverlapX", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "OverlapY", name: "OverlapY", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "AContainedInB", name: "AContainedInB", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "BContainedInA", name: "BContainedInA", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "Axis", name: "Axis", embedded: false, exported: true, typ: resolv.Vector, tag: ""}]);
$init = function() { $init = function() {
$pkg.$init = function() {}; $pkg.$init = function() {};
/* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0: /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0:
$r = math.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } $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; } $r = resolv.$init(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
$pkg.Characters = $makeMap($Int.keyFor, [{ k: 0, v: new CharacterConfig.ptr(0, "MonkGirl", 11, 1, 16, 16, 33, 30, 800, $makeMap($Int.keyFor, [{ k: 1, v: 1 }, { k: 2, v: 2 }, { k: 3, v: 3 }, { k: 255, v: 255 }])) }]); $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, 20, 20, 20, 1, new sliceType([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 5, 8, 20, 10, 13, 9, 50, 0, 5, 0, 0, 1200, 0, 2400, 3200, false))])) }, { k: 2, v: new Skill.ptr(0, 36, 36, 36, 1, new sliceType([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 3, 18, 36, 20, 18, 9, 50, 0, 5, 0, 0, 1800, 0, 2400, 3200, false))])) }, { k: 3, v: new Skill.ptr(0, 60, 60, 60, 1, new sliceType([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 1, 0, 0, 30, 999999999, 9, 100, 400, 10, 0, 0, 2400, 0, 3200, 3200, true))])) }, { k: 255, v: new Skill.ptr(0, 34, 34, 34, 1, new sliceType([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 3, 0, 0, 20, 18, 9, 50, 0, 5, 0, 0, 1200, 0, 3200, 2400, false))])) }]); 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, 7, 13, 30, 22, 13, 9, 50, 0, 5, 0, 0, 1200, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 2 }])))])) }, { k: 2, v: new Skill.ptr(0, 36, 36, 36, 1, 11, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 18, 22, 36, 18, 18, 9, 50, 0, 5, 0, 0, 1800, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 3 }])))])) }, { k: 3, v: new Skill.ptr(0, 60, 60, 60, 1, 12, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 15, 0, 0, 40, 999999999, 9, 200, 700, 10, 0, 0, 2400, 0, 3200, 3200, true, false))])) }, { k: 4, v: new Skill.ptr(0, 30, 30, 30, 1, 2, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 7, 13, 30, 22, 13, 9, 50, 0, 5, 0, 0, 1200, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 5 }])))])) }, { k: 5, v: new Skill.ptr(0, 36, 36, 36, 1, 11, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 18, 22, 36, 18, 18, 9, 50, 0, 5, 0, 0, 1800, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 6 }])))])) }, { k: 6, v: new Skill.ptr(0, 60, 60, 60, 1, 12, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 15, 0, 0, 40, 999999999, 9, 200, 700, 10, 0, 0, 2400, 0, 3200, 3200, true, false))])) }, { k: 255, v: new Skill.ptr(0, 34, 34, 34, 1, 6, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 3, 0, 0, 20, 18, 9, 50, 0, 5, 0, 0, 1200, 0, 3200, 2400, false, false))])) }, { k: 256, v: new Skill.ptr(0, 34, 34, 34, 1, 6, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 3, 0, 0, 20, 18, 9, 50, 0, 5, 0, 0, 1200, 0, 3200, 2400, false, false))])) }]);
$pkg.DIRECTION_DECODER = new sliceType$2([new sliceType$1([0, 0]), new sliceType$1([0, 2]), new sliceType$1([0, -2]), new sliceType$1([2, 0]), new sliceType$1([-2, 0]), new sliceType$1([1, 1]), new sliceType$1([-1, -1]), new sliceType$1([1, -1]), new sliceType$1([-1, 1])]); $pkg.Characters = $makeMap($Int.keyFor, [{ k: 0, v: new CharacterConfig.ptr(0, "MonkGirl", 11, 1, 16, 16, 33, 30, 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) {
if (0 === currPlayerDownsync.FramesToRecover) {
if (currPlayerDownsync.InAir) {
return 255;
} else {
return 1;
}
} else {
_tuple = (_entry = skills[$Int.keyFor(((currPlayerDownsync.ActiveSkillId >> 0)))], _entry !== undefined ? [_entry.v, true] : [ptrType.nil, false]);
skillConfig = _tuple[0];
existent1 = _tuple[1];
if (existent1) {
_ref = (x = skillConfig.Hits, x$1 = currPlayerDownsync.ActiveSkillHit, ((x$1 < 0 || x$1 >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + x$1]));
if ($assertType(_ref, ptrType$1, true)[1]) {
v = _ref.$val;
if (v.Bullet.CancellableStFrame <= currPlayerDownsync.FramesInChState && currPlayerDownsync.FramesInChState < v.Bullet.CancellableEdFrame) {
_tuple$1 = (_entry$1 = v.Bullet.CancelTransit[$Int.keyFor(patternId)], _entry$1 !== undefined ? [_entry$1.v, true] : [0, false]);
nextSkillId = _tuple$1[0];
existent2 = _tuple$1[1];
if (existent2) {
return nextSkillId;
}
}
}
}
}
}
return -1;
})) }, { k: 1, v: new CharacterConfig.ptr(1, "KnifeGirl", 9, 1, 16, 16, 30, 27, 750, (function(patternId, currPlayerDownsync) {
var _entry, _entry$1, _ref, _tuple, _tuple$1, currPlayerDownsync, existent1, existent2, nextSkillId, patternId, skillConfig, v, x, x$1;
if (1 === patternId) {
if (0 === currPlayerDownsync.FramesToRecover) {
if (currPlayerDownsync.InAir) {
return 256;
} else {
return 4;
}
} else {
_tuple = (_entry = skills[$Int.keyFor(((currPlayerDownsync.ActiveSkillId >> 0)))], _entry !== undefined ? [_entry.v, true] : [ptrType.nil, false]);
skillConfig = _tuple[0];
existent1 = _tuple[1];
if (existent1) {
_ref = (x = skillConfig.Hits, x$1 = currPlayerDownsync.ActiveSkillHit, ((x$1 < 0 || x$1 >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + x$1]));
if ($assertType(_ref, ptrType$1, true)[1]) {
v = _ref.$val;
if (v.Bullet.CancellableStFrame <= currPlayerDownsync.FramesInChState && currPlayerDownsync.FramesInChState < v.Bullet.CancellableEdFrame) {
_tuple$1 = (_entry$1 = v.Bullet.CancelTransit[$Int.keyFor(patternId)], _entry$1 !== undefined ? [_entry$1.v, true] : [0, false]);
nextSkillId = _tuple$1[0];
existent2 = _tuple$1[1];
if (existent2) {
return nextSkillId;
}
}
}
}
}
}
return -1;
})) }]);
inAirSet = $makeMap($Int32.keyFor, [{ k: 4, v: true }, { k: 5, v: true }, { k: 6, v: true }, { k: 7, v: true }, { k: 8, v: true }]); inAirSet = $makeMap($Int32.keyFor, [{ k: 4, v: true }, { k: 5, v: true }, { k: 6, v: true }, { k: 7, v: true }, { k: 8, v: true }]);
noOpSet = $makeMap($Int32.keyFor, [{ k: 3, v: true }, { k: 7, v: true }, { k: 8, v: true }, { k: 9, v: true }]); noOpSet = $makeMap($Int32.keyFor, [{ k: 3, v: true }, { k: 7, v: true }, { k: 8, v: true }, { k: 9, v: true }]);
invinsibleSet = $makeMap($Int32.keyFor, [{ k: 8, v: true }, { k: 9, v: true }, { k: 10, v: true }]); invinsibleSet = $makeMap($Int32.keyFor, [{ k: 8, v: true }, { k: 9, v: true }, { k: 10, v: true }]);
@ -6090,7 +6134,7 @@ $packages["jsexport"] = (function() {
$pkg.NewPlayerDownsyncJs = NewPlayerDownsyncJs; $pkg.NewPlayerDownsyncJs = NewPlayerDownsyncJs;
NewMeleeBulletJs = function(originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp) { NewMeleeBulletJs = function(originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp) {
var activeFrames, blockStunFrames, blowUp, cancellableEdFrame, cancellableStFrame, damage, hitStunFrames, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, offenderJoinIndex, originatedRenderFrameId, pushbackVelX, pushbackVelY, selfLockVelX, selfLockVelY, startupFrames; var activeFrames, blockStunFrames, blowUp, cancellableEdFrame, cancellableStFrame, damage, hitStunFrames, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, offenderJoinIndex, originatedRenderFrameId, pushbackVelX, pushbackVelY, selfLockVelX, selfLockVelY, startupFrames;
return js.MakeWrapper(new battle.MeleeBullet.ptr(new battle.Bullet.ptr(originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp))); return js.MakeWrapper(new battle.MeleeBullet.ptr(new battle.Bullet.ptr(originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp, false)));
}; };
$pkg.NewMeleeBulletJs = NewMeleeBulletJs; $pkg.NewMeleeBulletJs = NewMeleeBulletJs;
NewRoomDownsyncFrameJs = function(id, playersArr, meleeBullets) { NewRoomDownsyncFrameJs = function(id, playersArr, meleeBullets) {

View File

@ -0,0 +1,7 @@
{
"ver": "1.0.1",
"uuid": "15043c55-01a9-408c-b985-910c5de144c7",
"isSubpackage": false,
"subpackageName": "",
"subMetas": {}
}

View File

@ -0,0 +1,91 @@
{
"__type__": "cc.AnimationClip",
"_name": "Atk1",
"_objFlags": 0,
"_native": "",
"_duration": 0.6,
"sample": 60,
"speed": 1,
"wrapMode": 1,
"curveData": {
"comps": {
"cc.Sprite": {
"spriteFrame": [
{
"frame": 0,
"value": {
"__uuid__": "6b2a1a09-8236-4972-8aee-1781b6547d4e"
}
},
{
"frame": 0.06666666666666667,
"value": {
"__uuid__": "5b269b2e-0800-4bf5-b5db-055b78cf318d"
}
},
{
"frame": 0.11666666666666667,
"value": {
"__uuid__": "e184f831-3f90-47cb-8ca5-ad9446ba0398"
}
},
{
"frame": 0.18333333333333332,
"value": {
"__uuid__": "f260f82b-10cf-49af-b46c-cd8dc7a3503f"
}
},
{
"frame": 0.23333333333333334,
"value": {
"__uuid__": "09f43e75-0986-4b8f-907b-e5a5a73b7c54"
}
},
{
"frame": 0.2833333333333333,
"value": {
"__uuid__": "d7432402-fcbd-4e2e-b2c1-33364f31948b"
}
},
{
"frame": 0.3333333333333333,
"value": {
"__uuid__": "8acf1c5a-6910-47d6-aa18-1e6f07546d7a"
}
},
{
"frame": 0.38333333333333336,
"value": {
"__uuid__": "76120dbd-6390-4706-9580-dcec9687e83e"
}
},
{
"frame": 0.43333333333333335,
"value": {
"__uuid__": "f9a7a04a-2369-4946-8313-c2da896da51e"
}
},
{
"frame": 0.48333333333333334,
"value": {
"__uuid__": "c8fb14e2-745e-4a2b-b235-d43195052652"
}
},
{
"frame": 0.5333333333333333,
"value": {
"__uuid__": "1f23e0e5-830c-4d07-8f80-cbb98a2a1954"
}
},
{
"frame": 0.5833333333333334,
"value": {
"__uuid__": "4c512398-4290-4fdf-bb21-2b0062a9071b"
}
}
]
}
}
},
"events": []
}

View File

@ -0,0 +1,5 @@
{
"ver": "2.1.0",
"uuid": "829b17c6-9365-4e97-b14f-fa266bd5ecbe",
"subMetas": {}
}

View File

@ -0,0 +1,91 @@
{
"__type__": "cc.AnimationClip",
"_name": "Atk2",
"_objFlags": 0,
"_native": "",
"_duration": 1.0166666666666666,
"sample": 60,
"speed": 1,
"wrapMode": 1,
"curveData": {
"comps": {
"cc.Sprite": {
"spriteFrame": [
{
"frame": 0,
"value": {
"__uuid__": "60f9f7d4-5cf7-4098-9455-0f6a74963fc6"
}
},
{
"frame": 0.06666666666666667,
"value": {
"__uuid__": "dd9a00aa-ddbc-4b01-a7cb-3c43c3a655b6"
}
},
{
"frame": 0.11666666666666667,
"value": {
"__uuid__": "f66e83bd-1afc-4957-bb16-488d70566ed1"
}
},
{
"frame": 0.16666666666666666,
"value": {
"__uuid__": "bd682c41-dc62-49ff-a96a-18b33e50a6de"
}
},
{
"frame": 0.23333333333333334,
"value": {
"__uuid__": "94ccab85-e32f-4e13-b0e5-72c798f78ad1"
}
},
{
"frame": 0.3,
"value": {
"__uuid__": "e80d3a01-5048-42b7-a280-cb6aa01602c2"
}
},
{
"frame": 0.36666666666666664,
"value": {
"__uuid__": "d899088c-be62-47b4-9ebf-0a89a2261565"
}
},
{
"frame": 0.4166666666666667,
"value": {
"__uuid__": "5b1e5aa7-fd82-47ae-a5b2-6d4983d848ed"
}
},
{
"frame": 0.48333333333333334,
"value": {
"__uuid__": "c2945988-b4bb-4583-a5ef-2fa02b23a347"
}
},
{
"frame": 0.5666666666666667,
"value": {
"__uuid__": "070ea1e3-9c07-4735-8b94-515ef70216ad"
}
},
{
"frame": 0.6666666666666666,
"value": {
"__uuid__": "3b8bc5c0-26df-4218-b7dc-134a36080a35"
}
},
{
"frame": 1,
"value": {
"__uuid__": "3898259f-a3b0-490d-b260-f86ab5109dfe"
}
}
]
}
}
},
"events": []
}

View File

@ -0,0 +1,5 @@
{
"ver": "2.1.0",
"uuid": "52b8e47d-715c-4c12-a2c9-6f553e14dc42",
"subMetas": {}
}

View File

@ -0,0 +1,97 @@
{
"__type__": "cc.AnimationClip",
"_name": "Atk3",
"_objFlags": 0,
"_native": "",
"_duration": 1.0333333333333334,
"sample": 60,
"speed": 1,
"wrapMode": 1,
"curveData": {
"comps": {
"cc.Sprite": {
"spriteFrame": [
{
"frame": 0,
"value": {
"__uuid__": "98276733-6f8d-4cac-8a7e-31883834c240"
}
},
{
"frame": 0.06666666666666667,
"value": {
"__uuid__": "51ab185b-2271-48b5-a897-af79721d566c"
}
},
{
"frame": 0.15,
"value": {
"__uuid__": "c29fd95d-7467-4138-9e01-6421af63dd68"
}
},
{
"frame": 0.21666666666666667,
"value": {
"__uuid__": "3285b5eb-c6be-4cb9-ac60-c506645fee4b"
}
},
{
"frame": 0.3,
"value": {
"__uuid__": "13fd4a87-71f4-4b69-a5b3-413d564c35e6"
}
},
{
"frame": 0.38333333333333336,
"value": {
"__uuid__": "7189e229-00d6-427a-8ea1-d05fbd97824f"
}
},
{
"frame": 0.4666666666666667,
"value": {
"__uuid__": "d9ccfe33-3db7-4b3a-807c-adb2121fb7c7"
}
},
{
"frame": 0.55,
"value": {
"__uuid__": "a51cbc29-0826-46f7-a38b-8b0f996fbace"
}
},
{
"frame": 0.65,
"value": {
"__uuid__": "7e9f3a24-6abc-4b49-a5c5-a0c100865ffc"
}
},
{
"frame": 0.7333333333333333,
"value": {
"__uuid__": "ecbaeb43-1118-483a-91c9-ff1ff01b7b33"
}
},
{
"frame": 0.8166666666666667,
"value": {
"__uuid__": "58afa365-a916-4ec6-aab3-1c87f5332b12"
}
},
{
"frame": 0.9166666666666666,
"value": {
"__uuid__": "7ada26fa-c72d-46f6-9b3a-ae9d7ba5eaf4"
}
},
{
"frame": 1.0166666666666666,
"value": {
"__uuid__": "ee5e4a85-6dda-4d1e-a469-5be1db6a8913"
}
}
]
}
}
},
"events": []
}

View File

@ -0,0 +1,5 @@
{
"ver": "2.1.0",
"uuid": "9b500cb0-8048-4715-81db-cc975c914225",
"subMetas": {}
}

View File

@ -0,0 +1,43 @@
{
"__type__": "cc.AnimationClip",
"_name": "Atked1",
"_objFlags": 0,
"_native": "",
"_duration": 0.26666666666666666,
"sample": 60,
"speed": 1,
"wrapMode": 1,
"curveData": {
"comps": {
"cc.Sprite": {
"spriteFrame": [
{
"frame": 0,
"value": {
"__uuid__": "9b90ae89-7fbe-4bb6-ab15-fc08462f54c5"
}
},
{
"frame": 0.1,
"value": {
"__uuid__": "aeb3553a-6de4-4197-9f06-d7cc3fa7c4cf"
}
},
{
"frame": 0.16666666666666666,
"value": {
"__uuid__": "07650461-a7c0-4638-92fc-fa436752c045"
}
},
{
"frame": 0.25,
"value": {
"__uuid__": "ca22d473-83aa-4146-b732-89d0246a2968"
}
}
]
}
}
},
"events": []
}

View File

@ -0,0 +1,5 @@
{
"ver": "2.1.0",
"uuid": "2a50c853-000b-46f3-ae59-1dfb793de814",
"subMetas": {}
}

View File

@ -0,0 +1,43 @@
{
"__type__": "cc.AnimationClip",
"_name": "BlownUp1",
"_objFlags": 0,
"_native": "",
"_duration": 0.45,
"sample": 60,
"speed": 1,
"wrapMode": 2,
"curveData": {
"comps": {
"cc.Sprite": {
"spriteFrame": [
{
"frame": 0,
"value": {
"__uuid__": "8e2e03e0-7e2f-4bbb-b039-e232ef586232"
}
},
{
"frame": 0.15,
"value": {
"__uuid__": "0ea84f61-4a2f-4ca2-a0b8-b580e027c142"
}
},
{
"frame": 0.3,
"value": {
"__uuid__": "a3a31fcd-a162-456a-9c26-1f32413f87f3"
}
},
{
"frame": 0.43333333333333335,
"value": {
"__uuid__": "da4ee0a0-ba66-455c-99d3-9c803a3d0f17"
}
}
]
}
}
},
"events": []
}

View File

@ -0,0 +1,5 @@
{
"ver": "2.1.0",
"uuid": "0892a3ea-9da1-4157-825b-0c8ef1c73eeb",
"subMetas": {}
}

View File

@ -0,0 +1,49 @@
{
"__type__": "cc.AnimationClip",
"_name": "GetUp1",
"_objFlags": 0,
"_native": "",
"_duration": 0.5166666666666667,
"sample": 60,
"speed": 1,
"wrapMode": 1,
"curveData": {
"comps": {
"cc.Sprite": {
"spriteFrame": [
{
"frame": 0,
"value": {
"__uuid__": "57640cd8-17eb-4279-a118-1ea40174da3c"
}
},
{
"frame": 0.15,
"value": {
"__uuid__": "d08a4f50-8707-4da2-8b12-83d1bf4fa2ca"
}
},
{
"frame": 0.3,
"value": {
"__uuid__": "3f26b0a4-db13-4a14-b885-5a812073eccf"
}
},
{
"frame": 0.4,
"value": {
"__uuid__": "23eb42d6-52a2-458d-98a3-2f692dd79398"
}
},
{
"frame": 0.5,
"value": {
"__uuid__": "7bd4428c-44f9-4ff8-8d00-d3448a27a0c4"
}
}
]
}
}
},
"events": []
}

View File

@ -0,0 +1,5 @@
{
"ver": "2.1.0",
"uuid": "7d69868f-d474-4d86-a262-01f1cdd49021",
"subMetas": {}
}

View File

@ -0,0 +1,85 @@
{
"__type__": "cc.AnimationClip",
"_name": "Idle1",
"_objFlags": 0,
"_native": "",
"_duration": 2.0166666666666666,
"sample": 60,
"speed": 1,
"wrapMode": 2,
"curveData": {
"comps": {
"cc.Sprite": {
"spriteFrame": [
{
"frame": 0,
"value": {
"__uuid__": "9ecbf97e-34bc-4c5e-b9e8-4d885a02e0d3"
}
},
{
"frame": 0.21666666666666667,
"value": {
"__uuid__": "92852885-b66d-42fe-a8e0-153e6c494bd2"
}
},
{
"frame": 0.4166666666666667,
"value": {
"__uuid__": "b0f1ecf7-be41-46a8-bccb-92ee53b4ef88"
}
},
{
"frame": 0.6166666666666667,
"value": {
"__uuid__": "944adaee-5e11-4c55-9573-1d529f21ed4b"
}
},
{
"frame": 0.8,
"value": {
"__uuid__": "ede36130-8312-46a2-abe5-ba102bc97822"
}
},
{
"frame": 1.0166666666666666,
"value": {
"__uuid__": "32dbb977-301c-4fbd-a19c-14a5ce0e2f5b"
}
},
{
"frame": 1.2,
"value": {
"__uuid__": "581c7ab1-451d-46b0-9eeb-24cf3b898924"
}
},
{
"frame": 1.4,
"value": {
"__uuid__": "27005132-eda8-4c3f-9f4a-3a6004245e9f"
}
},
{
"frame": 1.5833333333333333,
"value": {
"__uuid__": "2b339657-aa80-4ab6-a4dd-83e9c12b6a54"
}
},
{
"frame": 1.7833333333333334,
"value": {
"__uuid__": "08e25a99-158d-4159-8152-6c9047fe9d54"
}
},
{
"frame": 2,
"value": {
"__uuid__": "ab739541-39b5-4758-9b93-6681d6038730"
}
}
]
}
}
},
"events": []
}

View File

@ -0,0 +1,5 @@
{
"ver": "2.1.0",
"uuid": "5afe50e0-d03f-4d48-a7c0-a350c36e14d4",
"subMetas": {}
}

View File

@ -0,0 +1,55 @@
{
"__type__": "cc.AnimationClip",
"_name": "InAirAtk1",
"_objFlags": 0,
"_native": "",
"_duration": 0.38333333333333336,
"sample": 60,
"speed": 1,
"wrapMode": 1,
"curveData": {
"comps": {
"cc.Sprite": {
"spriteFrame": [
{
"frame": 0,
"value": {
"__uuid__": "e6a3099f-b4c3-425f-a66b-9b992ae1c7b0"
}
},
{
"frame": 0.05,
"value": {
"__uuid__": "cade5a52-282e-47e5-aca9-5abb4f6afd14"
}
},
{
"frame": 0.1,
"value": {
"__uuid__": "96b0b028-3045-4a04-bf9c-c957f8c9e9ab"
}
},
{
"frame": 0.25,
"value": {
"__uuid__": "567f6bb7-c764-4c1d-bfec-f5c0c9812192"
}
},
{
"frame": 0.31666666666666665,
"value": {
"__uuid__": "5d0c32b4-52ce-4157-9b91-dd400a7ed07a"
}
},
{
"frame": 0.36666666666666664,
"value": {
"__uuid__": "fcef9c9b-dc71-459c-a541-9273b6e3923a"
}
}
]
}
}
},
"events": []
}

View File

@ -0,0 +1,5 @@
{
"ver": "2.1.0",
"uuid": "0e7468cc-b90d-4f68-91ce-0be126b406dd",
"subMetas": {}
}

View File

@ -0,0 +1,31 @@
{
"__type__": "cc.AnimationClip",
"_name": "InAirAtked1",
"_objFlags": 0,
"_native": "",
"_duration": 0.08333333333333333,
"sample": 60,
"speed": 1,
"wrapMode": 1,
"curveData": {
"comps": {
"cc.Sprite": {
"spriteFrame": [
{
"frame": 0,
"value": {
"__uuid__": "01e8b938-03cb-4519-a417-384c31131a27"
}
},
{
"frame": 0.06666666666666667,
"value": {
"__uuid__": "d7970a18-f3af-44c6-b216-ee55b9a1b32c"
}
}
]
}
}
},
"events": []
}

View File

@ -0,0 +1,5 @@
{
"ver": "2.1.0",
"uuid": "c86debde-118b-46b8-b483-f5ccec337315",
"subMetas": {}
}

View File

@ -0,0 +1,79 @@
{
"__type__": "cc.AnimationClip",
"_name": "InAirIdle1ByJump",
"_objFlags": 0,
"_native": "",
"_duration": 0.4666666666666667,
"sample": 60,
"speed": 1,
"wrapMode": 1,
"curveData": {
"comps": {
"cc.Sprite": {
"spriteFrame": [
{
"frame": 0,
"value": {
"__uuid__": "6ff7b4e6-80ec-4673-b47b-e0bba7567c3c"
}
},
{
"frame": 0.05,
"value": {
"__uuid__": "4ff35932-9869-4c78-9f75-b304eee46647"
}
},
{
"frame": 0.1,
"value": {
"__uuid__": "6b1355c5-a750-4e37-9018-de1b84238f6c"
}
},
{
"frame": 0.15,
"value": {
"__uuid__": "01193448-adb0-4364-94f3-ca810897f397"
}
},
{
"frame": 0.2,
"value": {
"__uuid__": "f4f0cd5d-835b-44c3-8cc9-2651dd00cd37"
}
},
{
"frame": 0.25,
"value": {
"__uuid__": "4c32b2d6-346f-4d6e-a92e-6678e4c4b1ad"
}
},
{
"frame": 0.3,
"value": {
"__uuid__": "30ef09b2-366a-4946-b556-2c0fac359c0b"
}
},
{
"frame": 0.35,
"value": {
"__uuid__": "6ab33993-124f-429e-ba4c-b0f6824ea6c7"
}
},
{
"frame": 0.4,
"value": {
"__uuid__": "e0612a37-a743-40fe-83ff-f189971f1992"
}
},
{
"frame": 0.45,
"value": {
"__uuid__": "6ff230eb-44e8-4ca9-97d0-1b059aa1e21b"
}
}
]
}
}
},
"events": []
}

View File

@ -0,0 +1,5 @@
{
"ver": "2.1.0",
"uuid": "c4ddf3ea-2292-4511-a320-5486934ac361",
"subMetas": {}
}

View File

@ -0,0 +1,25 @@
{
"__type__": "cc.AnimationClip",
"_name": "InAirIdle1NoJump",
"_objFlags": 0,
"_native": "",
"_duration": 0.016666666666666666,
"sample": 60,
"speed": 1,
"wrapMode": 2,
"curveData": {
"comps": {
"cc.Sprite": {
"spriteFrame": [
{
"frame": 0,
"value": {
"__uuid__": "6ff230eb-44e8-4ca9-97d0-1b059aa1e21b"
}
}
]
}
}
},
"events": []
}

View File

@ -0,0 +1,5 @@
{
"ver": "2.1.0",
"uuid": "bc461a02-4d1a-46a4-9f3c-7370adc6c1c8",
"subMetas": {}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

View File

@ -0,0 +1,12 @@
{
"ver": "2.3.3",
"uuid": "385b0a2b-765c-43fc-9243-977baccfd37a",
"type": "raw",
"wrapMode": "clamp",
"filterMode": "bilinear",
"premultiplyAlpha": false,
"genMipmaps": false,
"packable": true,
"platformSettings": {},
"subMetas": {}
}

View File

@ -0,0 +1,37 @@
{
"__type__": "cc.AnimationClip",
"_name": "LayDown1",
"_objFlags": 0,
"_native": "",
"_duration": 0.25,
"sample": 60,
"speed": 1,
"wrapMode": 1,
"curveData": {
"comps": {
"cc.Sprite": {
"spriteFrame": [
{
"frame": 0,
"value": {
"__uuid__": "7effc101-0b6c-4399-beea-7c9ef6e9df7e"
}
},
{
"frame": 0.11666666666666667,
"value": {
"__uuid__": "4e8a4f3c-5406-4700-9230-b2abc29a1093"
}
},
{
"frame": 0.23333333333333334,
"value": {
"__uuid__": "1ae5e6f6-ba82-485d-b3c7-59fd16ece3d5"
}
}
]
}
}
},
"events": []
}

View File

@ -0,0 +1,5 @@
{
"ver": "2.1.0",
"uuid": "0a6478a6-f4cc-47cb-a1c6-761cf9141eb2",
"subMetas": {}
}

View File

@ -0,0 +1,97 @@
{
"__type__": "cc.AnimationClip",
"_name": "Walking",
"_objFlags": 0,
"_native": "",
"_duration": 1.1166666666666667,
"sample": 60,
"speed": 1.2,
"wrapMode": 2,
"curveData": {
"comps": {
"cc.Sprite": {
"spriteFrame": [
{
"frame": 0,
"value": {
"__uuid__": "30546064-1a11-499e-8523-a82c83951c73"
}
},
{
"frame": 0.08333333333333333,
"value": {
"__uuid__": "cbbd2ddc-9ed3-40bf-ab87-2f9d26c2dd85"
}
},
{
"frame": 0.16666666666666666,
"value": {
"__uuid__": "9435195e-4560-495e-b1ae-083c0c87e8a0"
}
},
{
"frame": 0.25,
"value": {
"__uuid__": "ec048360-7a17-4f22-ba52-eb86ec1acae8"
}
},
{
"frame": 0.3333333333333333,
"value": {
"__uuid__": "82bb81e3-667c-4280-8710-211f4904ef2f"
}
},
{
"frame": 0.4166666666666667,
"value": {
"__uuid__": "c3b14ecc-a6d9-4cb3-8637-ca7b407a0f5c"
}
},
{
"frame": 0.5166666666666667,
"value": {
"__uuid__": "f958fb7f-ef5a-4918-81f3-564004572f45"
}
},
{
"frame": 0.6166666666666667,
"value": {
"__uuid__": "8a0ecf92-db26-4206-9a80-20e749055def"
}
},
{
"frame": 0.7333333333333333,
"value": {
"__uuid__": "942f2e02-a700-4fbf-877e-08c93e4d4010"
}
},
{
"frame": 0.8333333333333334,
"value": {
"__uuid__": "515bb75f-7a1f-4500-8aa9-c895915ce19f"
}
},
{
"frame": 0.9166666666666666,
"value": {
"__uuid__": "9100da6b-7582-4afb-9698-3d67d3b2012d"
}
},
{
"frame": 1.0166666666666666,
"value": {
"__uuid__": "1257f72d-0cb3-4750-ae70-13c2d8eb2269"
}
},
{
"frame": 1.1,
"value": {
"__uuid__": "1d34b6db-27ba-4e26-864d-0f00d501765e"
}
}
]
}
}
},
"events": []
}

View File

@ -0,0 +1,5 @@
{
"ver": "2.1.0",
"uuid": "f7f60d3f-32c0-4b56-901e-6eec9f73fa83",
"subMetas": {}
}

View File

@ -3,7 +3,7 @@
"_name": "Atk1", "_name": "Atk1",
"_objFlags": 0, "_objFlags": 0,
"_native": "", "_native": "",
"_duration": 0.2833333333333333, "_duration": 0.5,
"sample": 60, "sample": 60,
"speed": 1, "speed": 1,
"wrapMode": 1, "wrapMode": 1,
@ -24,19 +24,19 @@
} }
}, },
{ {
"frame": 0.1, "frame": 0.11666666666666667,
"value": { "value": {
"__uuid__": "72bc74a1-6e8c-48bb-9ab2-9b8f502ceffb" "__uuid__": "72bc74a1-6e8c-48bb-9ab2-9b8f502ceffb"
} }
}, },
{ {
"frame": 0.25, "frame": 0.43333333333333335,
"value": { "value": {
"__uuid__": "7e619896-100d-4903-b256-e30ddb5ad397" "__uuid__": "7e619896-100d-4903-b256-e30ddb5ad397"
} }
}, },
{ {
"frame": 0.26666666666666666, "frame": 0.48333333333333334,
"value": { "value": {
"__uuid__": "4a35e0f5-95c4-445b-8f9b-6514a060a72d" "__uuid__": "4a35e0f5-95c4-445b-8f9b-6514a060a72d"
} }

View File

@ -3,7 +3,7 @@
"_name": "Atk3", "_name": "Atk3",
"_objFlags": 0, "_objFlags": 0,
"_native": "", "_native": "",
"_duration": 1, "_duration": 1.0166666666666666,
"sample": 60, "sample": 60,
"speed": 1, "speed": 1,
"wrapMode": 1, "wrapMode": 1,
@ -13,69 +13,57 @@
"spriteFrame": [ "spriteFrame": [
{ {
"frame": 0, "frame": 0,
"value": {
"__uuid__": "4e1a3e61-dc3e-4de1-9385-bce2c5f54764"
}
},
{
"frame": 0.05,
"value": { "value": {
"__uuid__": "39ba4413-6f4a-49a5-a7ca-d11140dfe7dd" "__uuid__": "39ba4413-6f4a-49a5-a7ca-d11140dfe7dd"
} }
}, },
{ {
"frame": 0.11666666666666667, "frame": 0.08333333333333333,
"value": { "value": {
"__uuid__": "26b646c7-bdbc-495e-adaf-9d52ef1b5c84" "__uuid__": "26b646c7-bdbc-495e-adaf-9d52ef1b5c84"
} }
}, },
{ {
"frame": 0.21666666666666667, "frame": 0.16666666666666666,
"value": { "value": {
"__uuid__": "5a5208a0-1c29-446f-8375-739aef09fe65" "__uuid__": "5a5208a0-1c29-446f-8375-739aef09fe65"
} }
}, },
{ {
"frame": 0.3, "frame": 0.2833333333333333,
"value": { "value": {
"__uuid__": "414628f0-13ec-4f01-83a0-b94f6a13fff1" "__uuid__": "414628f0-13ec-4f01-83a0-b94f6a13fff1"
} }
}, },
{ {
"frame": 0.43333333333333335, "frame": 0.4166666666666667,
"value": { "value": {
"__uuid__": "c494965a-e7e6-4c99-ac61-60642e6247dc" "__uuid__": "c494965a-e7e6-4c99-ac61-60642e6247dc"
} }
}, },
{ {
"frame": 0.5666666666666667, "frame": 0.5333333333333333,
"value": { "value": {
"__uuid__": "04cafb17-39ab-4f2b-9830-3eaf42cab254" "__uuid__": "04cafb17-39ab-4f2b-9830-3eaf42cab254"
} }
}, },
{ {
"frame": 0.7166666666666667, "frame": 0.6666666666666666,
"value": { "value": {
"__uuid__": "fd9c7d8a-1038-4cab-a0e6-699e404701db" "__uuid__": "fd9c7d8a-1038-4cab-a0e6-699e404701db"
} }
}, },
{ {
"frame": 0.8333333333333334, "frame": 0.8,
"value": { "value": {
"__uuid__": "2447c6b3-292b-43b4-84e5-acc35df0c1f5" "__uuid__": "2447c6b3-292b-43b4-84e5-acc35df0c1f5"
} }
}, },
{ {
"frame": 0.9333333333333333, "frame": 1,
"value": { "value": {
"__uuid__": "00275818-b9b6-41ab-a792-f21ff10747fa" "__uuid__": "00275818-b9b6-41ab-a792-f21ff10747fa"
} }
},
{
"frame": 0.9833333333333333,
"value": {
"__uuid__": "11a06f33-cdfa-46cf-aae4-41e72a6711c2"
}
} }
] ]
} }

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

After

Width:  |  Height:  |  Size: 95 KiB

View File

@ -33,14 +33,14 @@
"_active": true, "_active": true,
"_components": [ "_components": [
{ {
"__id__": 27 "__id__": 21
}, },
{ {
"__id__": 28 "__id__": 22
} }
], ],
"_prefab": { "_prefab": {
"__id__": 29 "__id__": 23
}, },
"_opacity": 255, "_opacity": 255,
"_color": { "_color": {
@ -489,19 +489,13 @@
"__id__": 12 "__id__": 12
}, },
{ {
"__id__": 15 "__id__": 16
},
{
"__id__": 18
},
{
"__id__": 22
} }
], ],
"_active": true, "_active": true,
"_components": [], "_components": [],
"_prefab": { "_prefab": {
"__id__": 26 "__id__": 20
}, },
"_opacity": 255, "_opacity": 255,
"_color": { "_color": {
@ -550,381 +544,6 @@
"groupIndex": 0, "groupIndex": 0,
"_id": "" "_id": ""
}, },
{
"__type__": "cc.Node",
"_name": "SoldierWaterGhost",
"_objFlags": 0,
"_parent": {
"__id__": 11
},
"_children": [],
"_active": false,
"_components": [
{
"__id__": 13
}
],
"_prefab": {
"__id__": 14
},
"_opacity": 255,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_contentSize": {
"__type__": "cc.Size",
"width": 0,
"height": 0
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_trs": {
"__type__": "TypedArray",
"ctor": "Float64Array",
"array": [
0,
-24,
0,
0,
0,
0,
1,
1,
1,
1
]
},
"_eulerAngles": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_skewX": 0,
"_skewY": 0,
"_is3DNode": false,
"_groupIndex": 0,
"groupIndex": 0,
"_id": ""
},
{
"__type__": "dragonBones.ArmatureDisplay",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 12
},
"_enabled": true,
"_materials": [
{
"__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
}
],
"_armatureName": "SoldierWaterGhost",
"_animationName": "Idle1",
"_preCacheMode": 0,
"_cacheMode": 0,
"playTimes": -1,
"premultipliedAlpha": false,
"_armatureKey": "2ae76843-1f61-48cf-bbfb-384c0dcf77e1#e9e703e9-3589-4713-b889-28b23406d220",
"_accTime": 0,
"_playCount": 0,
"_frameCache": null,
"_curFrame": null,
"_playing": false,
"_armatureCache": null,
"_N$dragonAsset": {
"__uuid__": "2ae76843-1f61-48cf-bbfb-384c0dcf77e1"
},
"_N$dragonAtlasAsset": {
"__uuid__": "e9e703e9-3589-4713-b889-28b23406d220"
},
"_N$_defaultArmatureIndex": 0,
"_N$_animationIndex": 8,
"_N$_defaultCacheMode": 0,
"_N$timeScale": 1,
"_N$debugBones": false,
"_N$enableBatch": false,
"_id": ""
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__uuid__": "59bff7a2-23e1-4d69-bce7-afb37eae196a"
},
"fileId": "42Rmp/YOdMOYWzJwr3ET1h",
"sync": false
},
{
"__type__": "cc.Node",
"_name": "SoldierFireGhost",
"_objFlags": 0,
"_parent": {
"__id__": 11
},
"_children": [],
"_active": false,
"_components": [
{
"__id__": 16
}
],
"_prefab": {
"__id__": 17
},
"_opacity": 255,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_contentSize": {
"__type__": "cc.Size",
"width": 0,
"height": 0
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_trs": {
"__type__": "TypedArray",
"ctor": "Float64Array",
"array": [
0,
-24,
0,
0,
0,
0,
1,
1,
1,
1
]
},
"_eulerAngles": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_skewX": 0,
"_skewY": 0,
"_is3DNode": false,
"_groupIndex": 0,
"groupIndex": 0,
"_id": ""
},
{
"__type__": "dragonBones.ArmatureDisplay",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 15
},
"_enabled": true,
"_materials": [
{
"__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
}
],
"_armatureName": "SoldierFireGhost",
"_animationName": "Idle1",
"_preCacheMode": 0,
"_cacheMode": 0,
"playTimes": -1,
"premultipliedAlpha": false,
"_armatureKey": "36230012-8df3-4e85-afad-76ec47d0e4d7#4a9187d5-a9ad-4464-a03c-d2f3cc277051",
"_accTime": 0,
"_playCount": 0,
"_frameCache": null,
"_curFrame": null,
"_playing": false,
"_armatureCache": null,
"_N$dragonAsset": {
"__uuid__": "36230012-8df3-4e85-afad-76ec47d0e4d7"
},
"_N$dragonAtlasAsset": {
"__uuid__": "4a9187d5-a9ad-4464-a03c-d2f3cc277051"
},
"_N$_defaultArmatureIndex": 0,
"_N$_animationIndex": 8,
"_N$_defaultCacheMode": 0,
"_N$timeScale": 1,
"_N$debugBones": false,
"_N$enableBatch": false,
"_id": ""
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__uuid__": "59bff7a2-23e1-4d69-bce7-afb37eae196a"
},
"fileId": "3b2LJFABVL7ozO2U81FC4U",
"sync": false
},
{
"__type__": "cc.Node",
"_name": "UltramanTiga",
"_objFlags": 0,
"_parent": {
"__id__": 11
},
"_children": [],
"_active": false,
"_components": [
{
"__id__": 19
},
{
"__id__": 20
}
],
"_prefab": {
"__id__": 21
},
"_opacity": 255,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_contentSize": {
"__type__": "cc.Size",
"width": 1425,
"height": 1024
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_trs": {
"__type__": "TypedArray",
"ctor": "Float64Array",
"array": [
0,
0,
0,
0,
0,
0,
1,
0.7,
0.7,
1
]
},
"_eulerAngles": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_skewX": 0,
"_skewY": 0,
"_is3DNode": false,
"_groupIndex": 0,
"groupIndex": 0,
"_id": ""
},
{
"__type__": "cc.Animation",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 18
},
"_enabled": true,
"_defaultClip": null,
"_clips": [
{
"__uuid__": "252b321f-81f4-485c-85bd-ea44d298cb76"
},
{
"__uuid__": "f51bb583-0010-48f3-a6a1-451a78ac2d65"
},
{
"__uuid__": "c738236a-0702-45f8-aa38-99457b051997"
},
{
"__uuid__": "c69bcceb-d7d1-4e33-9623-e2a374a0a6b6"
},
{
"__uuid__": "43dbf141-be76-48c3-bdef-29233ccbe30d"
},
{
"__uuid__": "8710591c-3f5e-4911-83e7-42cc18be6af9"
},
{
"__uuid__": "c69bcceb-d7d1-4e33-9623-e2a374a0a6b6"
}
],
"playOnLoad": false,
"_id": ""
},
{
"__type__": "cc.Sprite",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 18
},
"_enabled": true,
"_materials": [
{
"__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
}
],
"_srcBlendFactor": 770,
"_dstBlendFactor": 771,
"_spriteFrame": null,
"_type": 0,
"_sizeMode": 1,
"_fillType": 0,
"_fillCenter": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_fillStart": 0,
"_fillRange": 0,
"_isTrimmedMode": true,
"_atlas": {
"__uuid__": "5d522f7b-359b-4f38-ac35-55fdbee56cae"
},
"_id": ""
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__uuid__": "59bff7a2-23e1-4d69-bce7-afb37eae196a"
},
"fileId": "17JdhftghBYr81MfV9i6cy",
"sync": false
},
{ {
"__type__": "cc.Node", "__type__": "cc.Node",
"_name": "MonkGirl", "_name": "MonkGirl",
@ -933,17 +552,17 @@
"__id__": 11 "__id__": 11
}, },
"_children": [], "_children": [],
"_active": true, "_active": false,
"_components": [ "_components": [
{ {
"__id__": 23 "__id__": 13
}, },
{ {
"__id__": 24 "__id__": 14
} }
], ],
"_prefab": { "_prefab": {
"__id__": 25 "__id__": 15
}, },
"_opacity": 255, "_opacity": 255,
"_color": { "_color": {
@ -997,7 +616,7 @@
"_name": "", "_name": "",
"_objFlags": 0, "_objFlags": 0,
"node": { "node": {
"__id__": 22 "__id__": 12
}, },
"_enabled": true, "_enabled": true,
"_defaultClip": null, "_defaultClip": null,
@ -1050,7 +669,7 @@
"_name": "", "_name": "",
"_objFlags": 0, "_objFlags": 0,
"node": { "node": {
"__id__": 22 "__id__": 12
}, },
"_enabled": true, "_enabled": true,
"_materials": [ "_materials": [
@ -1088,6 +707,169 @@
"fileId": "6cGpRwF5ZPjpJdtoqbrnta", "fileId": "6cGpRwF5ZPjpJdtoqbrnta",
"sync": false "sync": false
}, },
{
"__type__": "cc.Node",
"_name": "KnifeGirl",
"_objFlags": 0,
"_parent": {
"__id__": 11
},
"_children": [],
"_active": false,
"_components": [
{
"__id__": 17
},
{
"__id__": 18
}
],
"_prefab": {
"__id__": 19
},
"_opacity": 255,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_contentSize": {
"__type__": "cc.Size",
"width": 1425,
"height": 1024
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_trs": {
"__type__": "TypedArray",
"ctor": "Float64Array",
"array": [
0,
0,
0,
0,
0,
0,
1,
0.7,
0.7,
1
]
},
"_eulerAngles": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_skewX": 0,
"_skewY": 0,
"_is3DNode": false,
"_groupIndex": 0,
"groupIndex": 0,
"_id": ""
},
{
"__type__": "cc.Animation",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 16
},
"_enabled": true,
"_defaultClip": null,
"_clips": [
{
"__uuid__": "5afe50e0-d03f-4d48-a7c0-a350c36e14d4"
},
{
"__uuid__": "f7f60d3f-32c0-4b56-901e-6eec9f73fa83"
},
{
"__uuid__": "829b17c6-9365-4e97-b14f-fa266bd5ecbe"
},
{
"__uuid__": "2a50c853-000b-46f3-ae59-1dfb793de814"
},
{
"__uuid__": "bc461a02-4d1a-46a4-9f3c-7370adc6c1c8"
},
{
"__uuid__": "c4ddf3ea-2292-4511-a320-5486934ac361"
},
{
"__uuid__": "0e7468cc-b90d-4f68-91ce-0be126b406dd"
},
{
"__uuid__": "c86debde-118b-46b8-b483-f5ccec337315"
},
{
"__uuid__": "0892a3ea-9da1-4157-825b-0c8ef1c73eeb"
},
{
"__uuid__": "0a6478a6-f4cc-47cb-a1c6-761cf9141eb2"
},
{
"__uuid__": "7d69868f-d474-4d86-a262-01f1cdd49021"
},
{
"__uuid__": "52b8e47d-715c-4c12-a2c9-6f553e14dc42"
},
{
"__uuid__": "9b500cb0-8048-4715-81db-cc975c914225"
}
],
"playOnLoad": false,
"_id": ""
},
{
"__type__": "cc.Sprite",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 16
},
"_enabled": true,
"_materials": [
{
"__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432"
}
],
"_srcBlendFactor": 770,
"_dstBlendFactor": 771,
"_spriteFrame": null,
"_type": 0,
"_sizeMode": 1,
"_fillType": 0,
"_fillCenter": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_fillStart": 0,
"_fillRange": 0,
"_isTrimmedMode": true,
"_atlas": {
"__uuid__": "579bc0c1-f5e2-4a5d-889b-9d567e53b0e6"
},
"_id": ""
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__uuid__": "59bff7a2-23e1-4d69-bce7-afb37eae196a"
},
"fileId": "bdCx1wrTtJ1KaGHUmgL7iA",
"sync": false
},
{ {
"__type__": "cc.PrefabInfo", "__type__": "cc.PrefabInfo",
"root": { "root": {

View File

@ -461,7 +461,7 @@
"array": [ "array": [
0, 0,
0, 0,
216.50635094610968, 216.05530045313827,
0, 0,
0, 0,
0, 0,

View File

@ -80,9 +80,9 @@ cc.Class({
// Update directions // Update directions
if (this.animComp && this.animComp.node) { if (this.animComp && this.animComp.node) {
if (0 > rdfPlayer.DirX) { if (0 > rdfPlayer.DirX) {
this.animComp.node.scaleX = (-1.0); this.animNode.scaleX = (-1.0);
} else if (0 < rdfPlayer.DirX) { } else if (0 < rdfPlayer.DirX) {
this.animComp.node.scaleX = (1.0); this.animNode.scaleX = (1.0);
} }
} }

View File

@ -161,7 +161,7 @@ cc.Class({
inAir: true, inAir: true,
}), }),
], ],
speciesIdList: [0, 0], speciesIdList: [1, 0],
}); });
self.selfPlayerInfo = { self.selfPlayerInfo = {

View File

@ -28,8 +28,8 @@ const (
SNAP_INTO_PLATFORM_OVERLAP = float64(0.1) SNAP_INTO_PLATFORM_OVERLAP = float64(0.1)
SNAP_INTO_PLATFORM_THRESHOLD = float64(0.5) SNAP_INTO_PLATFORM_THRESHOLD = float64(0.5)
NO_SKILL = int32(-1) NO_SKILL = -1
NO_SKILL_HIT = int32(-1) NO_SKILL_HIT = -1
) )
// These directions are chosen such that when speed is changed to "(speedX+delta, speedY+delta)" for any of them, the direction is unchanged. // These directions are chosen such that when speed is changed to "(speedX+delta, speedY+delta)" for any of them, the direction is unchanged.
@ -383,30 +383,9 @@ func deriveOpPattern(currPlayerDownsync, thatPlayerInNextFrame *PlayerDownsync,
} }
} }
/*
As long as the current "CharacterState" is not in "noOpSet", we have 2 cases where attacking is allowed:
1. it happens when the player is IDLE or Walking, i.e. "0 == currPlayerDownsync.FramesToRecover", which is just the normal case
2. it happens when the player is having non-empty "ActiveSkillId" which might be cancellable
*/
patternId := PATTERN_ID_NO_OP patternId := PATTERN_ID_NO_OP
if decodedInput.BtnALevel > prevBtnALevel { if decodedInput.BtnALevel > prevBtnALevel {
if currPlayerDownsync.InAir { patternId = 1
patternId = 255
} else {
patternId = 1
}
}
if PATTERN_ID_NO_OP != patternId && 0 < currPlayerDownsync.FramesToRecover {
// [WARN] Handle skill cancellation
patternId = PATTERN_ID_NO_OP // First, reset the patternId to no-op as it should be by default not cancelling anything
skillConfig := skills[int(currPlayerDownsync.ActiveSkillId)]
switch v := skillConfig.Hits[currPlayerDownsync.ActiveSkillHit].(type) {
case *MeleeBullet:
if v.CancellableStFrame <= currPlayerDownsync.FramesInChState && currPlayerDownsync.FramesInChState < v.CancellableEdFrame {
patternId = int(currPlayerDownsync.ActiveSkillId + 1) // if "currPlayerDownsync.InAir", it won't map to a valid skill in the next step and thus act as PATTERN_ID_NO_OP
}
}
} }
return patternId, jumpedOrNot, effDx, effDy return patternId, jumpedOrNot, effDx, effDy
@ -463,38 +442,28 @@ func ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(inputsBuffer *RingBuffer
jumpedOrNotList[i] = true jumpedOrNotList[i] = true
} }
joinIndex := currPlayerDownsync.JoinIndex joinIndex := currPlayerDownsync.JoinIndex
if PATTERN_ID_NO_OP != patternId { skillId := chConfig.SkillMapper(patternId, currPlayerDownsync)
if skillId, existent := chConfig.PatternIdToSkillId[patternId]; existent { if skillConfig, existent := skills[skillId]; existent {
skillConfig := skills[skillId] thatPlayerInNextFrame.ActiveSkillId = int32(skillId)
thatPlayerInNextFrame.ActiveSkillId = int32(skillId) thatPlayerInNextFrame.ActiveSkillHit = 0
thatPlayerInNextFrame.ActiveSkillHit = 0
// TODO: Respect non-zero "selfLockVel" // TODO: Respect non-zero "selfLockVel"
// Hardcoded to use only the first hit for now // Hardcoded to use only the first hit for now
switch v := skillConfig.Hits[thatPlayerInNextFrame.ActiveSkillHit].(type) { switch v := skillConfig.Hits[thatPlayerInNextFrame.ActiveSkillHit].(type) {
case *MeleeBullet: case *MeleeBullet:
var newBullet MeleeBullet = *v // Copied primitive fields into an onstack variable var newBullet MeleeBullet = *v // Copied primitive fields into an onstack variable
newBullet.OriginatedRenderFrameId = currRenderFrame.Id newBullet.OriginatedRenderFrameId = currRenderFrame.Id
newBullet.OffenderJoinIndex = joinIndex newBullet.OffenderJoinIndex = joinIndex
nextRenderFrameMeleeBullets = append(nextRenderFrameMeleeBullets, &newBullet) nextRenderFrameMeleeBullets = append(nextRenderFrameMeleeBullets, &newBullet)
thatPlayerInNextFrame.FramesToRecover = skillConfig.RecoveryFrames thatPlayerInNextFrame.FramesToRecover = skillConfig.RecoveryFrames
}
// TODO: How to differentiate skill cancellable among different characters, e.g. some characters might be allowed to have 4-cancellation-combo or more?
switch skillId {
case 1:
thatPlayerInNextFrame.CharacterState = ATK_CHARACTER_STATE_ATK1
case 2:
thatPlayerInNextFrame.CharacterState = ATK_CHARACTER_STATE_ATK2
case 3:
thatPlayerInNextFrame.CharacterState = ATK_CHARACTER_STATE_ATK3
}
if false == currPlayerDownsync.InAir {
thatPlayerInNextFrame.VelX = 0
}
continue // Don't allow movement if skill is used
} }
thatPlayerInNextFrame.CharacterState = skillConfig.BoundChState
if false == currPlayerDownsync.InAir {
thatPlayerInNextFrame.VelX = 0
}
continue // Don't allow movement if skill is used
} }
if 0 == currPlayerDownsync.FramesToRecover { if 0 == currPlayerDownsync.FramesToRecover {
@ -720,8 +689,8 @@ func ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(inputsBuffer *RingBuffer
// Remove any active skill if not attacking // Remove any active skill if not attacking
if _, existent := nonAttackingSet[thatPlayerInNextFrame.CharacterState]; existent { if _, existent := nonAttackingSet[thatPlayerInNextFrame.CharacterState]; existent {
thatPlayerInNextFrame.ActiveSkillId = NO_SKILL thatPlayerInNextFrame.ActiveSkillId = int32(NO_SKILL)
thatPlayerInNextFrame.ActiveSkillHit = NO_SKILL_HIT thatPlayerInNextFrame.ActiveSkillHit = int32(NO_SKILL_HIT)
} }
} }

View File

@ -1,5 +1,7 @@
package battle package battle
type SkillMapperType func(patternId int, currPlayerDownsync *PlayerDownsync) int
type CharacterConfig struct { type CharacterConfig struct {
SpeciesId int SpeciesId int
SpeciesName string SpeciesName string
@ -15,7 +17,7 @@ type CharacterConfig struct {
JumpingInitVelY int32 JumpingInitVelY int32
PatternIdToSkillId map[int]int SkillMapper SkillMapperType
} }
var Characters = map[int]*CharacterConfig{ var Characters = map[int]*CharacterConfig{
@ -34,26 +36,89 @@ var Characters = map[int]*CharacterConfig{
JumpingInitVelY: int32(float64(8) * WORLD_TO_VIRTUAL_GRID_RATIO), JumpingInitVelY: int32(float64(8) * WORLD_TO_VIRTUAL_GRID_RATIO),
PatternIdToSkillId: map[int]int{ SkillMapper: func(patternId int, currPlayerDownsync *PlayerDownsync) int {
1: 1, // Atk1 if 1 == patternId {
2: 2, // Atk2 if 0 == currPlayerDownsync.FramesToRecover {
3: 3, // Atk3 if currPlayerDownsync.InAir {
255: 255, // InAirAtk1 return 255
} else {
return 1
}
} else {
// Now that "0 < FramesToRecover", we're only able to fire any skill if it's a cancellation
if skillConfig, existent1 := skills[int(currPlayerDownsync.ActiveSkillId)]; existent1 {
switch v := skillConfig.Hits[currPlayerDownsync.ActiveSkillHit].(type) {
case *MeleeBullet:
if v.CancellableStFrame <= currPlayerDownsync.FramesInChState && currPlayerDownsync.FramesInChState < v.CancellableEdFrame {
if nextSkillId, existent2 := v.CancelTransit[patternId]; existent2 {
return nextSkillId
}
}
}
}
}
}
// By default no skill can be fired
return NO_SKILL
},
},
1: &CharacterConfig{
SpeciesId: 1,
SpeciesName: "KnifeGirl",
InAirIdleFrameIdxTurningPoint: 9,
InAirIdleFrameIdxTurnedCycle: 1,
LayDownFrames: int32(16),
LayDownFramesToRecover: int32(16),
GetUpFrames: int32(30),
GetUpFramesToRecover: int32(27), // 3 invinsible frames for just-blown-up character to make a comeback
JumpingInitVelY: int32(float64(7.5) * WORLD_TO_VIRTUAL_GRID_RATIO),
SkillMapper: func(patternId int, currPlayerDownsync *PlayerDownsync) int {
if 1 == patternId {
if 0 == currPlayerDownsync.FramesToRecover {
if currPlayerDownsync.InAir {
return 256
} else {
return 4
}
} else {
// Now that "0 < FramesToRecover", we're only able to fire any skill if it's a cancellation
if skillConfig, existent1 := skills[int(currPlayerDownsync.ActiveSkillId)]; existent1 {
switch v := skillConfig.Hits[currPlayerDownsync.ActiveSkillHit].(type) {
case *MeleeBullet:
if v.CancellableStFrame <= currPlayerDownsync.FramesInChState && currPlayerDownsync.FramesInChState < v.CancellableEdFrame {
if nextSkillId, existent2 := v.CancelTransit[patternId]; existent2 {
return nextSkillId
}
}
}
}
}
}
// By default no skill can be fired
return NO_SKILL
}, },
}, },
} }
var skills = map[int]*Skill{ var skills = map[int]*Skill{
1: &Skill{ 1: &Skill{
RecoveryFrames: int32(20), RecoveryFrames: int32(30),
RecoveryFramesOnBlock: int32(20), RecoveryFramesOnBlock: int32(30),
RecoveryFramesOnHit: int32(20), RecoveryFramesOnHit: int32(30),
ReleaseTriggerType: int32(1), ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_ATK1,
Hits: []interface{}{ Hits: []interface{}{
&MeleeBullet{ &MeleeBullet{
Bullet: Bullet{ Bullet: Bullet{
StartupFrames: int32(5), StartupFrames: int32(7),
ActiveFrames: int32(10), ActiveFrames: int32(22),
HitStunFrames: int32(13), HitStunFrames: int32(13),
BlockStunFrames: int32(9), BlockStunFrames: int32(9),
Damage: int32(5), Damage: int32(5),
@ -63,8 +128,12 @@ var skills = map[int]*Skill{
HitboxOffsetY: int32(0), HitboxOffsetY: int32(0),
HitboxSizeX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxSizeX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
CancellableStFrame: int32(8), CancellableStFrame: int32(13),
CancellableEdFrame: int32(20), CancellableEdFrame: int32(30),
CancelTransit: map[int]int{
1: 2,
},
// TODO: Use non-zero "selfLockVel" // TODO: Use non-zero "selfLockVel"
}, },
}, },
@ -75,11 +144,12 @@ var skills = map[int]*Skill{
RecoveryFramesOnBlock: int32(36), RecoveryFramesOnBlock: int32(36),
RecoveryFramesOnHit: int32(36), RecoveryFramesOnHit: int32(36),
ReleaseTriggerType: int32(1), ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_ATK2,
Hits: []interface{}{ Hits: []interface{}{
&MeleeBullet{ &MeleeBullet{
Bullet: Bullet{ Bullet: Bullet{
StartupFrames: int32(3), StartupFrames: int32(18),
ActiveFrames: int32(20), ActiveFrames: int32(18),
HitStunFrames: int32(18), HitStunFrames: int32(18),
BlockStunFrames: int32(9), BlockStunFrames: int32(9),
Damage: int32(5), Damage: int32(5),
@ -89,8 +159,11 @@ var skills = map[int]*Skill{
HitboxOffsetY: int32(0), HitboxOffsetY: int32(0),
HitboxSizeX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxSizeX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
CancellableStFrame: int32(18), CancellableStFrame: int32(22),
CancellableEdFrame: int32(36), CancellableEdFrame: int32(36),
CancelTransit: map[int]int{
1: 3,
},
}, },
}, },
}, },
@ -100,16 +173,102 @@ var skills = map[int]*Skill{
RecoveryFramesOnBlock: int32(60), RecoveryFramesOnBlock: int32(60),
RecoveryFramesOnHit: int32(60), RecoveryFramesOnHit: int32(60),
ReleaseTriggerType: int32(1), ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_ATK3,
Hits: []interface{}{ Hits: []interface{}{
&MeleeBullet{ &MeleeBullet{
Bullet: Bullet{ Bullet: Bullet{
StartupFrames: int32(1), StartupFrames: int32(15),
ActiveFrames: int32(30), ActiveFrames: int32(40),
HitStunFrames: MAX_INT32, HitStunFrames: MAX_INT32,
BlockStunFrames: int32(9), BlockStunFrames: int32(9),
Damage: int32(10), Damage: int32(10),
PushbackVelX: int32(float64(1) * WORLD_TO_VIRTUAL_GRID_RATIO), PushbackVelX: int32(float64(2) * WORLD_TO_VIRTUAL_GRID_RATIO),
PushbackVelY: int32(float64(4) * WORLD_TO_VIRTUAL_GRID_RATIO), PushbackVelY: int32(float64(7) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetY: int32(0),
HitboxSizeX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
BlowUp: true,
},
},
},
},
4: &Skill{
RecoveryFrames: int32(30),
RecoveryFramesOnBlock: int32(30),
RecoveryFramesOnHit: int32(30),
ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_ATK1,
Hits: []interface{}{
&MeleeBullet{
Bullet: Bullet{
StartupFrames: int32(7),
ActiveFrames: int32(22),
HitStunFrames: int32(13),
BlockStunFrames: int32(9),
Damage: int32(5),
PushbackVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO),
PushbackVelY: int32(0),
HitboxOffsetX: int32(float64(12) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetY: int32(0),
HitboxSizeX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
CancellableStFrame: int32(13),
CancellableEdFrame: int32(30),
CancelTransit: map[int]int{
1: 5,
},
// TODO: Use non-zero "selfLockVel"
},
},
},
},
5: &Skill{
RecoveryFrames: int32(36),
RecoveryFramesOnBlock: int32(36),
RecoveryFramesOnHit: int32(36),
ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_ATK2,
Hits: []interface{}{
&MeleeBullet{
Bullet: Bullet{
StartupFrames: int32(18),
ActiveFrames: int32(18),
HitStunFrames: int32(18),
BlockStunFrames: int32(9),
Damage: int32(5),
PushbackVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO),
PushbackVelY: int32(0),
HitboxOffsetX: int32(float64(18) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetY: int32(0),
HitboxSizeX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
CancellableStFrame: int32(22),
CancellableEdFrame: int32(36),
CancelTransit: map[int]int{
1: 6,
},
},
},
},
},
6: &Skill{
RecoveryFrames: int32(60),
RecoveryFramesOnBlock: int32(60),
RecoveryFramesOnHit: int32(60),
ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_ATK3,
Hits: []interface{}{
&MeleeBullet{
Bullet: Bullet{
StartupFrames: int32(15),
ActiveFrames: int32(40),
HitStunFrames: MAX_INT32,
BlockStunFrames: int32(9),
Damage: int32(10),
PushbackVelX: int32(float64(2) * WORLD_TO_VIRTUAL_GRID_RATIO),
PushbackVelY: int32(float64(7) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxOffsetX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetY: int32(0), HitboxOffsetY: int32(0),
HitboxSizeX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxSizeX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
@ -124,6 +283,31 @@ var skills = map[int]*Skill{
RecoveryFramesOnBlock: int32(34), RecoveryFramesOnBlock: int32(34),
RecoveryFramesOnHit: int32(34), RecoveryFramesOnHit: int32(34),
ReleaseTriggerType: int32(1), ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_INAIR_ATK1,
Hits: []interface{}{
&MeleeBullet{
Bullet: Bullet{
StartupFrames: int32(3),
ActiveFrames: int32(20),
HitStunFrames: int32(18),
BlockStunFrames: int32(9),
Damage: int32(5),
PushbackVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO),
PushbackVelY: int32(0),
HitboxOffsetX: int32(float64(12) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetY: int32(0),
HitboxSizeX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxSizeY: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
},
},
},
},
256: &Skill{
RecoveryFrames: int32(34),
RecoveryFramesOnBlock: int32(34),
RecoveryFramesOnHit: int32(34),
ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_INAIR_ATK1,
Hits: []interface{}{ Hits: []interface{}{
&MeleeBullet{ &MeleeBullet{
Bullet: Bullet{ Bullet: Bullet{

View File

@ -79,6 +79,8 @@ type Bullet struct {
HitboxSizeY int32 HitboxSizeY int32
BlowUp bool BlowUp bool
CancelTransit map[int]int
} }
type MeleeBullet struct { type MeleeBullet struct {
@ -101,7 +103,8 @@ type Skill struct {
RecoveryFrames int32 RecoveryFrames int32
RecoveryFramesOnBlock int32 RecoveryFramesOnBlock int32
RecoveryFramesOnHit int32 RecoveryFramesOnHit int32
ReleaseTriggerType int32 // 1: rising-edge, 2: falling-edge ReleaseTriggerType int32 // 1: rising-edge, 2: falling-edge
BoundChState int32
Hits []interface{} // Hits within a "Skill" are automatically triggered Hits []interface{} // Hits within a "Skill" are automatically triggered
} }