diff --git a/battle_srv/models/pb_type_convert.go b/battle_srv/models/pb_type_convert.go index f005607..d07b663 100644 --- a/battle_srv/models/pb_type_convert.go +++ b/battle_srv/models/pb_type_convert.go @@ -12,7 +12,9 @@ func toPbRoomDownsyncFrame(rdf *battle.RoomDownsyncFrame) *pb.RoomDownsyncFrame ret := &pb.RoomDownsyncFrame{ Id: rdf.Id, PlayersArr: make([]*pb.PlayerDownsync, len(rdf.PlayersArr), len(rdf.PlayersArr)), + BulletLocalIdCounter: rdf.BulletLocalIdCounter, MeleeBullets: make([]*pb.MeleeBullet, len(rdf.MeleeBullets), len(rdf.MeleeBullets)), + FireballBullets: make([]*pb.FireballBullet, len(rdf.FireballBullets), len(rdf.FireballBullets)), CountdownNanos: rdf.CountdownNanos, BackendUnconfirmedMask: rdf.BackendUnconfirmedMask, ShouldForceResync: rdf.ShouldForceResync, @@ -20,34 +22,37 @@ func toPbRoomDownsyncFrame(rdf *battle.RoomDownsyncFrame) *pb.RoomDownsyncFrame for i, last := range rdf.PlayersArr { pbPlayer := &pb.PlayerDownsync{ - Id: last.Id, - VirtualGridX: last.VirtualGridX, - VirtualGridY: last.VirtualGridY, - DirX: last.DirX, - DirY: last.DirY, - VelX: last.VelX, - VelY: last.VelY, - FramesToRecover: last.FramesToRecover, - FramesInChState: last.FramesInChState, - ActiveSkillId: last.ActiveSkillId, - ActiveSkillHit: last.ActiveSkillHit, - FramesInvinsible: last.FramesInvinsible, - Speed: last.Speed, - BattleState: last.BattleState, - CharacterState: last.CharacterState, - InAir: last.InAir, - JoinIndex: last.JoinIndex, - Hp: last.Hp, - MaxHp: last.MaxHp, - ColliderRadius: last.ColliderRadius, - Score: last.Score, - Removed: last.Removed, + Id: last.Id, + VirtualGridX: last.VirtualGridX, + VirtualGridY: last.VirtualGridY, + DirX: last.DirX, + DirY: last.DirY, + VelX: last.VelX, + VelY: last.VelY, + FramesToRecover: last.FramesToRecover, + FramesInChState: last.FramesInChState, + ActiveSkillId: last.ActiveSkillId, + ActiveSkillHit: last.ActiveSkillHit, + FramesInvinsible: last.FramesInvinsible, + Speed: last.Speed, + BattleState: last.BattleState, + CharacterState: last.CharacterState, + InAir: last.InAir, + JoinIndex: last.JoinIndex, + BulletTeamId: last.BulletTeamId, + ChCollisionTeamId: last.ChCollisionTeamId, + Hp: last.Hp, + MaxHp: last.MaxHp, + ColliderRadius: last.ColliderRadius, + Score: last.Score, + Removed: last.Removed, } ret.PlayersArr[i] = pbPlayer } for i, last := range rdf.MeleeBullets { pbBullet := &pb.MeleeBullet{ + BulletLocalId: last.BulletLocalId, OriginatedRenderFrameId: last.OriginatedRenderFrameId, OffenderJoinIndex: last.OffenderJoinIndex, @@ -71,10 +76,50 @@ func toPbRoomDownsyncFrame(rdf *battle.RoomDownsyncFrame) *pb.RoomDownsyncFrame HitboxSizeY: last.HitboxSizeY, BlowUp: last.BlowUp, + TeamId: last.TeamId, } ret.MeleeBullets[i] = pbBullet } + for i, last := range rdf.FireballBullets { + pbBullet := &pb.FireballBullet{ + BulletLocalId: last.BulletLocalId, + OriginatedRenderFrameId: last.OriginatedRenderFrameId, + OffenderJoinIndex: last.OffenderJoinIndex, + + StartupFrames: last.StartupFrames, + CancellableStFrame: last.CancellableStFrame, + CancellableEdFrame: last.CancellableEdFrame, + ActiveFrames: last.ActiveFrames, + + HitStunFrames: last.HitStunFrames, + BlockStunFrames: last.BlockStunFrames, + PushbackVelX: last.PushbackVelX, + PushbackVelY: last.PushbackVelY, + Damage: last.Damage, + + SelfLockVelX: last.SelfLockVelX, + SelfLockVelY: last.SelfLockVelY, + + HitboxOffsetX: last.HitboxOffsetX, + HitboxOffsetY: last.HitboxOffsetY, + HitboxSizeX: last.HitboxSizeX, + HitboxSizeY: last.HitboxSizeY, + + BlowUp: last.BlowUp, + TeamId: last.TeamId, + + VirtualGridX: last.VirtualGridX, + VirtualGridY: last.VirtualGridY, + DirX: last.DirX, + DirY: last.DirY, + VelX: last.VelX, + VelY: last.VelY, + Speed: last.Speed, + } + ret.FireballBullets[i] = pbBullet + } + return ret } @@ -86,26 +131,28 @@ func toPbPlayers(modelInstances map[int32]*Player, withMetaInfo bool) []*pb.Play for _, last := range modelInstances { pbPlayer := &pb.PlayerDownsync{ - Id: last.Id, - VirtualGridX: last.VirtualGridX, - VirtualGridY: last.VirtualGridY, - DirX: last.DirX, - DirY: last.DirY, - VelX: last.VelX, - VelY: last.VelY, - FramesToRecover: last.FramesToRecover, - FramesInChState: last.FramesInChState, - ActiveSkillId: last.ActiveSkillId, - ActiveSkillHit: last.ActiveSkillHit, - FramesInvinsible: last.FramesInvinsible, - Speed: last.Speed, - BattleState: last.BattleState, - CharacterState: last.CharacterState, - InAir: last.InAir, - JoinIndex: last.JoinIndex, - ColliderRadius: last.ColliderRadius, - Score: last.Score, - Removed: last.Removed, + Id: last.Id, + VirtualGridX: last.VirtualGridX, + VirtualGridY: last.VirtualGridY, + DirX: last.DirX, + DirY: last.DirY, + VelX: last.VelX, + VelY: last.VelY, + FramesToRecover: last.FramesToRecover, + FramesInChState: last.FramesInChState, + ActiveSkillId: last.ActiveSkillId, + ActiveSkillHit: last.ActiveSkillHit, + FramesInvinsible: last.FramesInvinsible, + Speed: last.Speed, + BattleState: last.BattleState, + CharacterState: last.CharacterState, + InAir: last.InAir, + JoinIndex: last.JoinIndex, + BulletTeamId: last.BulletTeamId, + ChCollisionTeamId: last.ChCollisionTeamId, + ColliderRadius: last.ColliderRadius, + Score: last.Score, + Removed: last.Removed, } if withMetaInfo { pbPlayer.Name = last.Name @@ -126,28 +173,30 @@ func toJsPlayers(modelInstances map[int32]*Player) []*battle.PlayerDownsync { for _, last := range modelInstances { toRet[last.JoinIndex-1] = &battle.PlayerDownsync{ - Id: last.Id, - VirtualGridX: last.VirtualGridX, - VirtualGridY: last.VirtualGridY, - DirX: last.DirX, - DirY: last.DirY, - VelX: last.VelX, - VelY: last.VelY, - FramesToRecover: last.FramesToRecover, - FramesInChState: last.FramesInChState, - ActiveSkillId: last.ActiveSkillId, - ActiveSkillHit: last.ActiveSkillHit, - FramesInvinsible: last.FramesInvinsible, - Speed: last.Speed, - BattleState: last.BattleState, - CharacterState: last.CharacterState, - JoinIndex: last.JoinIndex, - Hp: last.Hp, - MaxHp: last.MaxHp, - ColliderRadius: last.ColliderRadius, - InAir: last.InAir, - Score: last.Score, - Removed: last.Removed, + Id: last.Id, + VirtualGridX: last.VirtualGridX, + VirtualGridY: last.VirtualGridY, + DirX: last.DirX, + DirY: last.DirY, + VelX: last.VelX, + VelY: last.VelY, + FramesToRecover: last.FramesToRecover, + FramesInChState: last.FramesInChState, + ActiveSkillId: last.ActiveSkillId, + ActiveSkillHit: last.ActiveSkillHit, + FramesInvinsible: last.FramesInvinsible, + Speed: last.Speed, + BattleState: last.BattleState, + CharacterState: last.CharacterState, + JoinIndex: last.JoinIndex, + BulletTeamId: last.BulletTeamId, + ChCollisionTeamId: last.ChCollisionTeamId, + Hp: last.Hp, + MaxHp: last.MaxHp, + ColliderRadius: last.ColliderRadius, + InAir: last.InAir, + Score: last.Score, + Removed: last.Removed, } } diff --git a/battle_srv/models/room.go b/battle_srv/models/room.go index 4fe3e7f..d6f7259 100644 --- a/battle_srv/models/room.go +++ b/battle_srv/models/room.go @@ -381,6 +381,9 @@ func (pR *Room) StartBattle() { for _, player := range pR.Players { speciesId := int(player.JoinIndex - 1) // FIXME: Hardcoded the values for now + if player.JoinIndex == 2 { + speciesId = 4096 + } chosenCh := battle.Characters[speciesId] pR.CharacterConfigsArr[player.JoinIndex-1] = chosenCh pR.SpeciesIdList[player.JoinIndex-1] = int32(speciesId) diff --git a/battle_srv/protos/room_downsync_frame.pb.go b/battle_srv/protos/room_downsync_frame.pb.go index 083e557..b2bbdb6 100644 --- a/battle_srv/protos/room_downsync_frame.pb.go +++ b/battle_srv/protos/room_downsync_frame.pb.go @@ -49,6 +49,8 @@ type PlayerDownsync struct { ActiveSkillId int32 `protobuf:"varint,21,opt,name=activeSkillId,proto3" json:"activeSkillId,omitempty"` ActiveSkillHit int32 `protobuf:"varint,22,opt,name=activeSkillHit,proto3" json:"activeSkillHit,omitempty"` FramesInvinsible int32 `protobuf:"varint,23,opt,name=framesInvinsible,proto3" json:"framesInvinsible,omitempty"` + BulletTeamId int32 `protobuf:"varint,24,opt,name=bulletTeamId,proto3" json:"bulletTeamId,omitempty"` + ChCollisionTeamId int32 `protobuf:"varint,25,opt,name=chCollisionTeamId,proto3" json:"chCollisionTeamId,omitempty"` Name string `protobuf:"bytes,997,opt,name=name,proto3" json:"name,omitempty"` DisplayName string `protobuf:"bytes,998,opt,name=displayName,proto3" json:"displayName,omitempty"` Avatar string `protobuf:"bytes,999,opt,name=avatar,proto3" json:"avatar,omitempty"` @@ -247,6 +249,20 @@ func (x *PlayerDownsync) GetFramesInvinsible() int32 { return 0 } +func (x *PlayerDownsync) GetBulletTeamId() int32 { + if x != nil { + return x.BulletTeamId + } + return 0 +} + +func (x *PlayerDownsync) GetChCollisionTeamId() int32 { + if x != nil { + return x.ChCollisionTeamId + } + return 0 +} + func (x *PlayerDownsync) GetName() string { if x != nil { return x.Name @@ -789,6 +805,8 @@ type MeleeBullet struct { HitboxSizeX int32 `protobuf:"varint,16,opt,name=hitboxSizeX,proto3" json:"hitboxSizeX,omitempty"` HitboxSizeY int32 `protobuf:"varint,17,opt,name=hitboxSizeY,proto3" json:"hitboxSizeY,omitempty"` BlowUp bool `protobuf:"varint,18,opt,name=blowUp,proto3" json:"blowUp,omitempty"` + TeamId int32 `protobuf:"varint,19,opt,name=teamId,proto3" json:"teamId,omitempty"` + BulletLocalId int32 `protobuf:"varint,20,opt,name=bulletLocalId,proto3" json:"bulletLocalId,omitempty"` } func (x *MeleeBullet) Reset() { @@ -949,6 +967,275 @@ func (x *MeleeBullet) GetBlowUp() bool { return false } +func (x *MeleeBullet) GetTeamId() int32 { + if x != nil { + return x.TeamId + } + return 0 +} + +func (x *MeleeBullet) GetBulletLocalId() int32 { + if x != nil { + return x.BulletLocalId + } + return 0 +} + +type FireballBullet struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OriginatedRenderFrameId int32 `protobuf:"varint,1,opt,name=originatedRenderFrameId,proto3" json:"originatedRenderFrameId,omitempty"` + OffenderJoinIndex int32 `protobuf:"varint,2,opt,name=offenderJoinIndex,proto3" json:"offenderJoinIndex,omitempty"` + StartupFrames int32 `protobuf:"varint,3,opt,name=startupFrames,proto3" json:"startupFrames,omitempty"` + CancellableStFrame int32 `protobuf:"varint,4,opt,name=cancellableStFrame,proto3" json:"cancellableStFrame,omitempty"` + CancellableEdFrame int32 `protobuf:"varint,5,opt,name=cancellableEdFrame,proto3" json:"cancellableEdFrame,omitempty"` + ActiveFrames int32 `protobuf:"varint,6,opt,name=activeFrames,proto3" json:"activeFrames,omitempty"` + HitStunFrames int32 `protobuf:"varint,7,opt,name=hitStunFrames,proto3" json:"hitStunFrames,omitempty"` + BlockStunFrames int32 `protobuf:"varint,8,opt,name=blockStunFrames,proto3" json:"blockStunFrames,omitempty"` + PushbackVelX int32 `protobuf:"varint,9,opt,name=pushbackVelX,proto3" json:"pushbackVelX,omitempty"` + PushbackVelY int32 `protobuf:"varint,10,opt,name=pushbackVelY,proto3" json:"pushbackVelY,omitempty"` + Damage int32 `protobuf:"varint,11,opt,name=damage,proto3" json:"damage,omitempty"` + SelfLockVelX int32 `protobuf:"varint,12,opt,name=selfLockVelX,proto3" json:"selfLockVelX,omitempty"` + SelfLockVelY int32 `protobuf:"varint,13,opt,name=selfLockVelY,proto3" json:"selfLockVelY,omitempty"` + HitboxOffsetX int32 `protobuf:"varint,14,opt,name=hitboxOffsetX,proto3" json:"hitboxOffsetX,omitempty"` + HitboxOffsetY int32 `protobuf:"varint,15,opt,name=hitboxOffsetY,proto3" json:"hitboxOffsetY,omitempty"` + HitboxSizeX int32 `protobuf:"varint,16,opt,name=hitboxSizeX,proto3" json:"hitboxSizeX,omitempty"` + HitboxSizeY int32 `protobuf:"varint,17,opt,name=hitboxSizeY,proto3" json:"hitboxSizeY,omitempty"` + BlowUp bool `protobuf:"varint,18,opt,name=blowUp,proto3" json:"blowUp,omitempty"` + TeamId int32 `protobuf:"varint,19,opt,name=teamId,proto3" json:"teamId,omitempty"` + BulletLocalId int32 `protobuf:"varint,20,opt,name=bulletLocalId,proto3" json:"bulletLocalId,omitempty"` + VirtualGridX int32 `protobuf:"varint,999,opt,name=virtualGridX,proto3" json:"virtualGridX,omitempty"` + VirtualGridY int32 `protobuf:"varint,1000,opt,name=virtualGridY,proto3" json:"virtualGridY,omitempty"` + DirX int32 `protobuf:"varint,1001,opt,name=dirX,proto3" json:"dirX,omitempty"` + DirY int32 `protobuf:"varint,1002,opt,name=dirY,proto3" json:"dirY,omitempty"` + VelX int32 `protobuf:"varint,1003,opt,name=velX,proto3" json:"velX,omitempty"` + VelY int32 `protobuf:"varint,1004,opt,name=velY,proto3" json:"velY,omitempty"` + Speed int32 `protobuf:"varint,1005,opt,name=speed,proto3" json:"speed,omitempty"` +} + +func (x *FireballBullet) Reset() { + *x = FireballBullet{} + if protoimpl.UnsafeEnabled { + mi := &file_room_downsync_frame_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FireballBullet) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FireballBullet) ProtoMessage() {} + +func (x *FireballBullet) ProtoReflect() protoreflect.Message { + mi := &file_room_downsync_frame_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FireballBullet.ProtoReflect.Descriptor instead. +func (*FireballBullet) Descriptor() ([]byte, []int) { + return file_room_downsync_frame_proto_rawDescGZIP(), []int{9} +} + +func (x *FireballBullet) GetOriginatedRenderFrameId() int32 { + if x != nil { + return x.OriginatedRenderFrameId + } + return 0 +} + +func (x *FireballBullet) GetOffenderJoinIndex() int32 { + if x != nil { + return x.OffenderJoinIndex + } + return 0 +} + +func (x *FireballBullet) GetStartupFrames() int32 { + if x != nil { + return x.StartupFrames + } + return 0 +} + +func (x *FireballBullet) GetCancellableStFrame() int32 { + if x != nil { + return x.CancellableStFrame + } + return 0 +} + +func (x *FireballBullet) GetCancellableEdFrame() int32 { + if x != nil { + return x.CancellableEdFrame + } + return 0 +} + +func (x *FireballBullet) GetActiveFrames() int32 { + if x != nil { + return x.ActiveFrames + } + return 0 +} + +func (x *FireballBullet) GetHitStunFrames() int32 { + if x != nil { + return x.HitStunFrames + } + return 0 +} + +func (x *FireballBullet) GetBlockStunFrames() int32 { + if x != nil { + return x.BlockStunFrames + } + return 0 +} + +func (x *FireballBullet) GetPushbackVelX() int32 { + if x != nil { + return x.PushbackVelX + } + return 0 +} + +func (x *FireballBullet) GetPushbackVelY() int32 { + if x != nil { + return x.PushbackVelY + } + return 0 +} + +func (x *FireballBullet) GetDamage() int32 { + if x != nil { + return x.Damage + } + return 0 +} + +func (x *FireballBullet) GetSelfLockVelX() int32 { + if x != nil { + return x.SelfLockVelX + } + return 0 +} + +func (x *FireballBullet) GetSelfLockVelY() int32 { + if x != nil { + return x.SelfLockVelY + } + return 0 +} + +func (x *FireballBullet) GetHitboxOffsetX() int32 { + if x != nil { + return x.HitboxOffsetX + } + return 0 +} + +func (x *FireballBullet) GetHitboxOffsetY() int32 { + if x != nil { + return x.HitboxOffsetY + } + return 0 +} + +func (x *FireballBullet) GetHitboxSizeX() int32 { + if x != nil { + return x.HitboxSizeX + } + return 0 +} + +func (x *FireballBullet) GetHitboxSizeY() int32 { + if x != nil { + return x.HitboxSizeY + } + return 0 +} + +func (x *FireballBullet) GetBlowUp() bool { + if x != nil { + return x.BlowUp + } + return false +} + +func (x *FireballBullet) GetTeamId() int32 { + if x != nil { + return x.TeamId + } + return 0 +} + +func (x *FireballBullet) GetBulletLocalId() int32 { + if x != nil { + return x.BulletLocalId + } + return 0 +} + +func (x *FireballBullet) GetVirtualGridX() int32 { + if x != nil { + return x.VirtualGridX + } + return 0 +} + +func (x *FireballBullet) GetVirtualGridY() int32 { + if x != nil { + return x.VirtualGridY + } + return 0 +} + +func (x *FireballBullet) GetDirX() int32 { + if x != nil { + return x.DirX + } + return 0 +} + +func (x *FireballBullet) GetDirY() int32 { + if x != nil { + return x.DirY + } + return 0 +} + +func (x *FireballBullet) GetVelX() int32 { + if x != nil { + return x.VelX + } + return 0 +} + +func (x *FireballBullet) GetVelY() int32 { + if x != nil { + return x.VelY + } + return 0 +} + +func (x *FireballBullet) GetSpeed() int32 { + if x != nil { + return x.Speed + } + return 0 +} + type BattleColliderInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -967,13 +1254,13 @@ type BattleColliderInfo struct { SpaceOffsetX float64 `protobuf:"fixed64,11,opt,name=spaceOffsetX,proto3" json:"spaceOffsetX,omitempty"` SpaceOffsetY float64 `protobuf:"fixed64,12,opt,name=spaceOffsetY,proto3" json:"spaceOffsetY,omitempty"` CollisionMinStep int32 `protobuf:"varint,13,opt,name=collisionMinStep,proto3" json:"collisionMinStep,omitempty"` - FrameDataLoggingEnabled bool `protobuf:"varint,999,opt,name=frameDataLoggingEnabled,proto3" json:"frameDataLoggingEnabled,omitempty"` + FrameDataLoggingEnabled bool `protobuf:"varint,1024,opt,name=frameDataLoggingEnabled,proto3" json:"frameDataLoggingEnabled,omitempty"` } func (x *BattleColliderInfo) Reset() { *x = BattleColliderInfo{} if protoimpl.UnsafeEnabled { - mi := &file_room_downsync_frame_proto_msgTypes[9] + mi := &file_room_downsync_frame_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -986,7 +1273,7 @@ func (x *BattleColliderInfo) String() string { func (*BattleColliderInfo) ProtoMessage() {} func (x *BattleColliderInfo) ProtoReflect() protoreflect.Message { - mi := &file_room_downsync_frame_proto_msgTypes[9] + mi := &file_room_downsync_frame_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -999,7 +1286,7 @@ func (x *BattleColliderInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use BattleColliderInfo.ProtoReflect.Descriptor instead. func (*BattleColliderInfo) Descriptor() ([]byte, []int) { - return file_room_downsync_frame_proto_rawDescGZIP(), []int{9} + return file_room_downsync_frame_proto_rawDescGZIP(), []int{10} } func (x *BattleColliderInfo) GetStageName() string { @@ -1108,16 +1395,18 @@ type RoomDownsyncFrame struct { Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` PlayersArr []*PlayerDownsync `protobuf:"bytes,2,rep,name=playersArr,proto3" json:"playersArr,omitempty"` CountdownNanos int64 `protobuf:"varint,3,opt,name=countdownNanos,proto3" json:"countdownNanos,omitempty"` - MeleeBullets []*MeleeBullet `protobuf:"bytes,4,rep,name=meleeBullets,proto3" json:"meleeBullets,omitempty"` // I don't know how to mimic inheritance/composition in protobuf by far, thus using an array for each type of bullet as a compromise - BackendUnconfirmedMask uint64 `protobuf:"varint,5,opt,name=backendUnconfirmedMask,proto3" json:"backendUnconfirmedMask,omitempty"` // Indexed by "joinIndex", same compression concern as stated in InputFrameDownsync - ShouldForceResync bool `protobuf:"varint,6,opt,name=shouldForceResync,proto3" json:"shouldForceResync,omitempty"` - SpeciesIdList []int32 `protobuf:"varint,7,rep,packed,name=speciesIdList,proto3" json:"speciesIdList,omitempty"` + MeleeBullets []*MeleeBullet `protobuf:"bytes,4,rep,name=meleeBullets,proto3" json:"meleeBullets,omitempty"` // I don't know how to mimic inheritance/composition in protobuf by far, thus using an array for each type of bullet as a compromise + FireballBullets []*FireballBullet `protobuf:"bytes,5,rep,name=fireballBullets,proto3" json:"fireballBullets,omitempty"` + BackendUnconfirmedMask uint64 `protobuf:"varint,1024,opt,name=backendUnconfirmedMask,proto3" json:"backendUnconfirmedMask,omitempty"` // Indexed by "joinIndex", same compression concern as stated in InputFrameDownsync + ShouldForceResync bool `protobuf:"varint,1025,opt,name=shouldForceResync,proto3" json:"shouldForceResync,omitempty"` + SpeciesIdList []int32 `protobuf:"varint,1026,rep,packed,name=speciesIdList,proto3" json:"speciesIdList,omitempty"` + BulletLocalIdCounter int32 `protobuf:"varint,1027,opt,name=bulletLocalIdCounter,proto3" json:"bulletLocalIdCounter,omitempty"` } func (x *RoomDownsyncFrame) Reset() { *x = RoomDownsyncFrame{} if protoimpl.UnsafeEnabled { - mi := &file_room_downsync_frame_proto_msgTypes[10] + mi := &file_room_downsync_frame_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1130,7 +1419,7 @@ func (x *RoomDownsyncFrame) String() string { func (*RoomDownsyncFrame) ProtoMessage() {} func (x *RoomDownsyncFrame) ProtoReflect() protoreflect.Message { - mi := &file_room_downsync_frame_proto_msgTypes[10] + mi := &file_room_downsync_frame_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1143,7 +1432,7 @@ func (x *RoomDownsyncFrame) ProtoReflect() protoreflect.Message { // Deprecated: Use RoomDownsyncFrame.ProtoReflect.Descriptor instead. func (*RoomDownsyncFrame) Descriptor() ([]byte, []int) { - return file_room_downsync_frame_proto_rawDescGZIP(), []int{10} + return file_room_downsync_frame_proto_rawDescGZIP(), []int{11} } func (x *RoomDownsyncFrame) GetId() int32 { @@ -1174,6 +1463,13 @@ func (x *RoomDownsyncFrame) GetMeleeBullets() []*MeleeBullet { return nil } +func (x *RoomDownsyncFrame) GetFireballBullets() []*FireballBullet { + if x != nil { + return x.FireballBullets + } + return nil +} + func (x *RoomDownsyncFrame) GetBackendUnconfirmedMask() uint64 { if x != nil { return x.BackendUnconfirmedMask @@ -1195,13 +1491,20 @@ func (x *RoomDownsyncFrame) GetSpeciesIdList() []int32 { return nil } +func (x *RoomDownsyncFrame) GetBulletLocalIdCounter() int32 { + if x != nil { + return x.BulletLocalIdCounter + } + return 0 +} + var File_room_downsync_frame_proto protoreflect.FileDescriptor var file_room_downsync_frame_proto_rawDesc = []byte{ 0x0a, 0x19, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x1a, 0x0e, 0x67, 0x65, 0x6f, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0x97, 0x06, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x6f, + 0x6f, 0x74, 0x6f, 0x22, 0xe9, 0x06, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x47, 0x72, 0x69, 0x64, 0x58, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x76, 0x69, @@ -1245,199 +1548,276 @@ var file_room_downsync_frame_proto_rawDesc = []byte{ 0x52, 0x0e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x48, 0x69, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x49, 0x6e, 0x76, 0x69, 0x6e, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x66, 0x72, 0x61, 0x6d, - 0x65, 0x73, 0x49, 0x6e, 0x76, 0x69, 0x6e, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x13, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xe5, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, - 0x18, 0xe6, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0xe7, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x22, 0x6f, 0x0a, - 0x11, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x63, 0x6f, 0x64, - 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, - 0x64, 0x78, 0x12, 0x0e, 0x0a, 0x02, 0x64, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, - 0x64, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x74, 0x6e, 0x41, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x62, 0x74, 0x6e, 0x41, 0x4c, 0x65, 0x76, 0x65, 0x6c, - 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x74, 0x6e, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x62, 0x74, 0x6e, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x50, - 0x0a, 0x10, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, - 0x6e, 0x63, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, - 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, - 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, - 0x22, 0x7c, 0x0a, 0x12, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, - 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, - 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x04, 0x52, 0x09, 0x69, - 0x6e, 0x70, 0x75, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3b, - 0x0a, 0x0f, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x55, 0x70, 0x73, 0x79, 0x6e, - 0x63, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xb8, 0x02, 0x0a, 0x05, - 0x57, 0x73, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x61, 0x63, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6a, 0x6f, 0x69, - 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6a, 0x6f, - 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x6b, 0x69, 0x6e, - 0x67, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, - 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, - 0x12, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, - 0x65, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x61, 0x63, 0x6b, 0x69, 0x6e, - 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x4e, 0x0a, - 0x15, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, 0x6e, - 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, - 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x52, 0x15, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, - 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x27, 0x0a, - 0x02, 0x68, 0x62, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x55, 0x70, 0x73, 0x79, - 0x6e, 0x63, 0x52, 0x02, 0x68, 0x62, 0x22, 0x89, 0x02, 0x0a, 0x06, 0x57, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, - 0x72, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x63, 0x68, 0x6f, 0x65, 0x64, 0x4d, 0x73, 0x67, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x65, 0x63, 0x68, 0x6f, 0x65, 0x64, - 0x4d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x03, 0x61, 0x63, 0x74, 0x12, 0x2b, 0x0a, 0x03, 0x72, 0x64, 0x66, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x52, 0x6f, - 0x6f, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x52, - 0x03, 0x72, 0x64, 0x66, 0x12, 0x54, 0x0a, 0x17, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, - 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x49, - 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, - 0x63, 0x52, 0x17, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, - 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x36, 0x0a, 0x08, 0x62, 0x63, - 0x69, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6c, - 0x69, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x62, 0x63, 0x69, 0x46, 0x72, 0x61, - 0x6d, 0x65, 0x22, 0xf4, 0x01, 0x0a, 0x14, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x42, 0x75, 0x66, - 0x66, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x72, - 0x65, 0x66, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, - 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x75, 0x6e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0f, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4d, 0x61, 0x73, - 0x6b, 0x12, 0x58, 0x0a, 0x19, 0x74, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, - 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x49, 0x6e, - 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, - 0x52, 0x19, 0x74, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, - 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x73, - 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x46, 0x6f, - 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x22, 0xbf, 0x05, 0x0a, 0x0b, 0x4d, 0x65, - 0x6c, 0x65, 0x65, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x17, 0x6f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, - 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x6f, 0x72, 0x69, 0x67, - 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, - 0x65, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4a, - 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, - 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4a, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x46, 0x72, 0x61, 0x6d, - 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, - 0x70, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, - 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, - 0x53, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, - 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x64, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, - 0x45, 0x64, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x68, - 0x69, 0x74, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0d, 0x68, 0x69, 0x74, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, - 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, - 0x61, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x70, - 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x12, - 0x22, 0x0a, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x59, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, - 0x65, 0x6c, 0x59, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, - 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x12, - 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x59, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, - 0x65, 0x6c, 0x59, 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x58, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x68, 0x69, 0x74, 0x62, - 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x69, 0x74, - 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x59, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x59, 0x12, - 0x20, 0x0a, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x58, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, 0x7a, 0x65, - 0x58, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x59, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, - 0x7a, 0x65, 0x59, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x18, 0x12, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x22, 0xc9, 0x05, 0x0a, 0x12, - 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x54, 0x6f, 0x50, 0x69, - 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x54, 0x6f, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x34, 0x0a, 0x15, 0x77, 0x69, 0x6c, 0x6c, - 0x4b, 0x69, 0x63, 0x6b, 0x49, 0x66, 0x49, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x6f, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x77, 0x69, 0x6c, 0x6c, 0x4b, 0x69, 0x63, - 0x6b, 0x49, 0x66, 0x49, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x6f, 0x72, 0x12, 0x20, - 0x0a, 0x0b, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0b, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, - 0x12, 0x30, 0x0a, 0x13, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x62, - 0x61, 0x74, 0x74, 0x6c, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6e, - 0x6f, 0x73, 0x12, 0x46, 0x0a, 0x1e, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, - 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x54, 0x6f, 0x6c, 0x65, 0x72, - 0x61, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1e, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x44, 0x65, 0x6c, 0x61, - 0x79, 0x54, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x48, 0x0a, 0x1f, 0x6d, 0x61, - 0x78, 0x43, 0x68, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, - 0x61, 0x6d, 0x65, 0x73, 0x50, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x1f, 0x6d, 0x61, 0x78, 0x43, 0x68, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x50, 0x65, 0x72, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x19, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, - 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x44, 0x74, 0x4d, 0x69, 0x6c, 0x6c, 0x69, - 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x19, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, - 0x6b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x44, 0x74, 0x4d, 0x69, 0x6c, 0x6c, - 0x69, 0x73, 0x12, 0x3a, 0x0a, 0x18, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x45, 0x73, - 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x44, 0x74, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x45, 0x73, - 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x44, 0x74, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x12, 0x28, - 0x0a, 0x0f, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, - 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, 0x12, 0x22, 0x0a, 0x0c, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x59, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x0c, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x59, - 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x6c, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, - 0x53, 0x74, 0x65, 0x70, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x63, 0x6f, 0x6c, 0x6c, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x53, 0x74, 0x65, 0x70, 0x12, 0x39, 0x0a, 0x17, - 0x66, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0xe7, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, - 0x66, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, - 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xc8, 0x02, 0x0a, 0x11, 0x52, 0x6f, 0x6f, 0x6d, - 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x36, 0x0a, - 0x0a, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x41, 0x72, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x52, 0x0a, 0x70, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x73, 0x41, 0x72, 0x72, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, - 0x77, 0x6e, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x12, 0x37, 0x0a, - 0x0c, 0x6d, 0x65, 0x6c, 0x65, 0x65, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x4d, 0x65, 0x6c, - 0x65, 0x65, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x0c, 0x6d, 0x65, 0x6c, 0x65, 0x65, 0x42, - 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x16, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, - 0x64, 0x55, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4d, 0x61, 0x73, 0x6b, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x55, - 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x2c, - 0x0a, 0x11, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, - 0x79, 0x6e, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x73, 0x68, 0x6f, 0x75, 0x6c, - 0x64, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x24, 0x0a, 0x0d, - 0x73, 0x70, 0x65, 0x63, 0x69, 0x65, 0x73, 0x49, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x07, 0x20, - 0x03, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x70, 0x65, 0x63, 0x69, 0x65, 0x73, 0x49, 0x64, 0x4c, 0x69, - 0x73, 0x74, 0x42, 0x13, 0x5a, 0x11, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x5f, 0x73, 0x72, 0x76, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x73, 0x49, 0x6e, 0x76, 0x69, 0x6e, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x0c, + 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x18, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0c, 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x64, + 0x12, 0x2c, 0x0a, 0x11, 0x63, 0x68, 0x43, 0x6f, 0x6c, 0x6c, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x54, + 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x63, 0x68, 0x43, + 0x6f, 0x6c, 0x6c, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x13, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xe5, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0xe6, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, + 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, + 0x18, 0xe7, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x22, + 0x6f, 0x0a, 0x11, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x63, + 0x6f, 0x64, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x64, 0x78, 0x12, 0x0e, 0x0a, 0x02, 0x64, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x02, 0x64, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x74, 0x6e, 0x41, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x62, 0x74, 0x6e, 0x41, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x74, 0x6e, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x62, 0x74, 0x6e, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, + 0x22, 0x50, 0x0a, 0x10, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, + 0x73, 0x79, 0x6e, 0x63, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, + 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x69, 0x6e, 0x70, 0x75, + 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x63, 0x6f, + 0x64, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x65, 0x6e, 0x63, 0x6f, 0x64, + 0x65, 0x64, 0x22, 0x7c, 0x0a, 0x12, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, + 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x70, 0x75, + 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, + 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, + 0x69, 0x6e, 0x70, 0x75, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x04, 0x52, + 0x09, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, + 0x22, 0x3b, 0x0a, 0x0f, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x55, 0x70, 0x73, + 0x79, 0x6e, 0x63, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xb8, 0x02, + 0x0a, 0x05, 0x57, 0x73, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x61, 0x63, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6a, + 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x6a, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x6b, + 0x69, 0x6e, 0x67, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0d, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, + 0x2e, 0x0a, 0x12, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, + 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x61, 0x63, 0x6b, + 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, + 0x4e, 0x0a, 0x15, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, 0x73, + 0x79, 0x6e, 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, + 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x52, 0x15, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, + 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, + 0x27, 0x0a, 0x02, 0x68, 0x62, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x55, 0x70, + 0x73, 0x79, 0x6e, 0x63, 0x52, 0x02, 0x68, 0x62, 0x22, 0x89, 0x02, 0x0a, 0x06, 0x57, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x03, 0x72, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x63, 0x68, 0x6f, 0x65, 0x64, 0x4d, + 0x73, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x65, 0x63, 0x68, 0x6f, + 0x65, 0x64, 0x4d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x61, 0x63, 0x74, 0x12, 0x2b, 0x0a, 0x03, 0x72, 0x64, 0x66, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, + 0x52, 0x6f, 0x6f, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x61, 0x6d, + 0x65, 0x52, 0x03, 0x72, 0x64, 0x66, 0x12, 0x54, 0x0a, 0x17, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, + 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, + 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, + 0x79, 0x6e, 0x63, 0x52, 0x17, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, + 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x36, 0x0a, 0x08, + 0x62, 0x63, 0x69, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x43, 0x6f, + 0x6c, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x62, 0x63, 0x69, 0x46, + 0x72, 0x61, 0x6d, 0x65, 0x22, 0xf4, 0x01, 0x0a, 0x14, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x42, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x2a, 0x0a, + 0x10, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6e, 0x64, + 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x75, 0x6e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0f, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4d, + 0x61, 0x73, 0x6b, 0x12, 0x58, 0x0a, 0x19, 0x74, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x49, 0x6e, 0x70, + 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, + 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, + 0x6e, 0x63, 0x52, 0x19, 0x74, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, + 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x73, 0x12, 0x2c, 0x0a, + 0x11, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x79, + 0x6e, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, + 0x46, 0x6f, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x22, 0xfd, 0x05, 0x0a, 0x0b, + 0x4d, 0x65, 0x6c, 0x65, 0x65, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x17, 0x6f, + 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, + 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x6f, 0x72, + 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, + 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x64, 0x65, + 0x72, 0x4a, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x11, 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4a, 0x6f, 0x69, 0x6e, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x46, 0x72, + 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x75, 0x70, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x61, 0x6e, + 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x53, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x61, 0x6e, + 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x64, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x45, 0x64, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x24, 0x0a, + 0x0d, 0x68, 0x69, 0x74, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x68, 0x69, 0x74, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, + 0x6d, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x75, 0x6e, + 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, + 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, + 0x58, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, + 0x59, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, + 0x6b, 0x56, 0x65, 0x6c, 0x59, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, + 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, + 0x58, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, + 0x59, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, + 0x6b, 0x56, 0x65, 0x6c, 0x59, 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x68, 0x69, + 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, 0x12, 0x24, 0x0a, 0x0d, 0x68, + 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x59, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x59, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x58, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, + 0x7a, 0x65, 0x58, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, 0x7a, + 0x65, 0x59, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, + 0x53, 0x69, 0x7a, 0x65, 0x59, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x18, + 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x12, 0x16, 0x0a, + 0x06, 0x74, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x74, + 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x4c, + 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x62, 0x75, + 0x6c, 0x6c, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x22, 0xb5, 0x07, 0x0a, 0x0e, + 0x46, 0x69, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x6c, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x38, + 0x0a, 0x17, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x6e, 0x64, + 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x17, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x6e, 0x64, 0x65, + 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x6f, 0x66, 0x66, 0x65, + 0x6e, 0x64, 0x65, 0x72, 0x4a, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x11, 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4a, 0x6f, 0x69, + 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, + 0x70, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x12, + 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x46, 0x72, 0x61, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x12, + 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x64, 0x46, 0x72, 0x61, + 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x64, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, + 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x69, 0x74, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, + 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x68, 0x69, 0x74, 0x53, 0x74, 0x75, 0x6e, + 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, + 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, + 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, + 0x56, 0x65, 0x6c, 0x58, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, + 0x56, 0x65, 0x6c, 0x59, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x70, 0x75, 0x73, 0x68, + 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x59, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x61, 0x6d, 0x61, + 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, + 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, + 0x56, 0x65, 0x6c, 0x58, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, + 0x56, 0x65, 0x6c, 0x59, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x66, + 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x59, 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x69, 0x74, 0x62, + 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, 0x12, 0x24, + 0x0a, 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x59, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x59, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, + 0x7a, 0x65, 0x58, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, + 0x78, 0x53, 0x69, 0x7a, 0x65, 0x58, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, + 0x53, 0x69, 0x7a, 0x65, 0x59, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x68, 0x69, 0x74, + 0x62, 0x6f, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x59, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x77, + 0x55, 0x70, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x77, 0x55, 0x70, + 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x74, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x62, 0x75, 0x6c, 0x6c, + 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0d, 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x23, + 0x0a, 0x0c, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x47, 0x72, 0x69, 0x64, 0x58, 0x18, 0xe7, + 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x47, 0x72, + 0x69, 0x64, 0x58, 0x12, 0x23, 0x0a, 0x0c, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x47, 0x72, + 0x69, 0x64, 0x59, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x76, 0x69, 0x72, 0x74, + 0x75, 0x61, 0x6c, 0x47, 0x72, 0x69, 0x64, 0x59, 0x12, 0x13, 0x0a, 0x04, 0x64, 0x69, 0x72, 0x58, + 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x64, 0x69, 0x72, 0x58, 0x12, 0x13, 0x0a, + 0x04, 0x64, 0x69, 0x72, 0x59, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x64, 0x69, + 0x72, 0x59, 0x12, 0x13, 0x0a, 0x04, 0x76, 0x65, 0x6c, 0x58, 0x18, 0xeb, 0x07, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x76, 0x65, 0x6c, 0x58, 0x12, 0x13, 0x0a, 0x04, 0x76, 0x65, 0x6c, 0x59, 0x18, + 0xec, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x76, 0x65, 0x6c, 0x59, 0x12, 0x15, 0x0a, 0x05, + 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x70, + 0x65, 0x65, 0x64, 0x22, 0xc9, 0x05, 0x0a, 0x12, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x43, 0x6f, + 0x6c, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, + 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, + 0x74, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x76, 0x61, 0x6c, 0x54, 0x6f, 0x50, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x54, 0x6f, 0x50, 0x69, 0x6e, 0x67, + 0x12, 0x34, 0x0a, 0x15, 0x77, 0x69, 0x6c, 0x6c, 0x4b, 0x69, 0x63, 0x6b, 0x49, 0x66, 0x49, 0x6e, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x15, 0x77, 0x69, 0x6c, 0x6c, 0x4b, 0x69, 0x63, 0x6b, 0x49, 0x66, 0x49, 0x6e, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x46, 0x6f, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, + 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x62, 0x61, 0x74, 0x74, + 0x6c, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x12, 0x46, 0x0a, 0x1e, 0x69, 0x6e, + 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x44, 0x65, + 0x6c, 0x61, 0x79, 0x54, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x1e, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, + 0x73, 0x79, 0x6e, 0x63, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x54, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, + 0x63, 0x65, 0x12, 0x48, 0x0a, 0x1f, 0x6d, 0x61, 0x78, 0x43, 0x68, 0x61, 0x73, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x50, 0x65, 0x72, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1f, 0x6d, 0x61, 0x78, + 0x43, 0x68, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, + 0x6d, 0x65, 0x73, 0x50, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x19, + 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, + 0x64, 0x44, 0x74, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x19, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, + 0x65, 0x64, 0x44, 0x74, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x12, 0x3a, 0x0a, 0x18, 0x72, 0x6f, + 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x44, + 0x74, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x72, 0x6f, + 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x44, + 0x74, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, + 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0f, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, + 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x58, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x59, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x59, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x6c, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x53, 0x74, 0x65, 0x70, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x10, 0x63, 0x6f, 0x6c, 0x6c, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, + 0x53, 0x74, 0x65, 0x70, 0x12, 0x39, 0x0a, 0x17, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, + 0x80, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, + 0xc2, 0x03, 0x0a, 0x11, 0x52, 0x6f, 0x6f, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, + 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x0a, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, + 0x41, 0x72, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, + 0x63, 0x52, 0x0a, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x41, 0x72, 0x72, 0x12, 0x26, 0x0a, + 0x0e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, + 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x6d, 0x65, 0x6c, 0x65, 0x65, 0x42, 0x75, + 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x4d, 0x65, 0x6c, 0x65, 0x65, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, + 0x52, 0x0c, 0x6d, 0x65, 0x6c, 0x65, 0x65, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x40, + 0x0a, 0x0f, 0x66, 0x69, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x6c, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, + 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, + 0x2e, 0x46, 0x69, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x6c, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x52, + 0x0f, 0x66, 0x69, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x6c, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, + 0x12, 0x37, 0x0a, 0x16, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x55, 0x6e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x18, 0x80, 0x08, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x16, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x55, 0x6e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x2d, 0x0a, 0x11, 0x73, 0x68, 0x6f, + 0x75, 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x81, + 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x46, 0x6f, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x25, 0x0a, 0x0d, 0x73, 0x70, 0x65, 0x63, + 0x69, 0x65, 0x73, 0x49, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x82, 0x08, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x0d, 0x73, 0x70, 0x65, 0x63, 0x69, 0x65, 0x73, 0x49, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x33, 0x0a, 0x14, 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x83, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, + 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x65, 0x72, 0x42, 0x13, 0x5a, 0x11, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x5f, 0x73, + 0x72, 0x76, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -1452,7 +1832,7 @@ func file_room_downsync_frame_proto_rawDescGZIP() []byte { return file_room_downsync_frame_proto_rawDescData } -var file_room_downsync_frame_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_room_downsync_frame_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_room_downsync_frame_proto_goTypes = []interface{}{ (*PlayerDownsync)(nil), // 0: protos.PlayerDownsync (*InputFrameDecoded)(nil), // 1: protos.InputFrameDecoded @@ -1463,23 +1843,25 @@ var file_room_downsync_frame_proto_goTypes = []interface{}{ (*WsResp)(nil), // 6: protos.WsResp (*InputsBufferSnapshot)(nil), // 7: protos.InputsBufferSnapshot (*MeleeBullet)(nil), // 8: protos.MeleeBullet - (*BattleColliderInfo)(nil), // 9: protos.BattleColliderInfo - (*RoomDownsyncFrame)(nil), // 10: protos.RoomDownsyncFrame + (*FireballBullet)(nil), // 9: protos.FireballBullet + (*BattleColliderInfo)(nil), // 10: protos.BattleColliderInfo + (*RoomDownsyncFrame)(nil), // 11: protos.RoomDownsyncFrame } var file_room_downsync_frame_proto_depIdxs = []int32{ 2, // 0: protos.WsReq.inputFrameUpsyncBatch:type_name -> protos.InputFrameUpsync 4, // 1: protos.WsReq.hb:type_name -> protos.HeartbeatUpsync - 10, // 2: protos.WsResp.rdf:type_name -> protos.RoomDownsyncFrame + 11, // 2: protos.WsResp.rdf:type_name -> protos.RoomDownsyncFrame 3, // 3: protos.WsResp.inputFrameDownsyncBatch:type_name -> protos.InputFrameDownsync - 9, // 4: protos.WsResp.bciFrame:type_name -> protos.BattleColliderInfo + 10, // 4: protos.WsResp.bciFrame:type_name -> protos.BattleColliderInfo 3, // 5: protos.InputsBufferSnapshot.toSendInputFrameDownsyncs:type_name -> protos.InputFrameDownsync 0, // 6: protos.RoomDownsyncFrame.playersArr:type_name -> protos.PlayerDownsync 8, // 7: protos.RoomDownsyncFrame.meleeBullets:type_name -> protos.MeleeBullet - 8, // [8:8] is the sub-list for method output_type - 8, // [8:8] is the sub-list for method input_type - 8, // [8:8] is the sub-list for extension type_name - 8, // [8:8] is the sub-list for extension extendee - 0, // [0:8] is the sub-list for field type_name + 9, // 8: protos.RoomDownsyncFrame.fireballBullets:type_name -> protos.FireballBullet + 9, // [9:9] is the sub-list for method output_type + 9, // [9:9] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name } func init() { file_room_downsync_frame_proto_init() } @@ -1597,7 +1979,7 @@ func file_room_downsync_frame_proto_init() { } } file_room_downsync_frame_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BattleColliderInfo); i { + switch v := v.(*FireballBullet); i { case 0: return &v.state case 1: @@ -1609,6 +1991,18 @@ func file_room_downsync_frame_proto_init() { } } file_room_downsync_frame_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BattleColliderInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_room_downsync_frame_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RoomDownsyncFrame); i { case 0: return &v.state @@ -1627,7 +2021,7 @@ func file_room_downsync_frame_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_room_downsync_frame_proto_rawDesc, NumEnums: 0, - NumMessages: 11, + NumMessages: 12, NumExtensions: 0, NumServices: 0, }, diff --git a/dnmshared/go.mod b/dnmshared/go.mod index dac3d35..ab87fc2 100644 --- a/dnmshared/go.mod +++ b/dnmshared/go.mod @@ -4,8 +4,10 @@ go 1.18 require ( resolv v0.0.0 + jsexport v0.0.0 ) replace ( resolv => ../resolv_tailored + jsexport => ../jsexport ) diff --git a/frontend/assets/plugin_scripts/jsexport.js b/frontend/assets/plugin_scripts/jsexport.js index 8b7380f..5088366 100644 --- a/frontend/assets/plugin_scripts/jsexport.js +++ b/frontend/assets/plugin_scripts/jsexport.js @@ -9,8 +9,8 @@ $packages["runtime"]=(function(){var $pkg={},$init,A,C,D,AT,AZ,BD,AM,E,AU;A=$pac $packages["math/bits"]=(function(){var $pkg={},$init;$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:}return;}if($f===undefined){$f={$blk:$init};}$f.$s=$s;$f.$r=$r;return $f;};$pkg.$init=$init;return $pkg;})(); $packages["math"]=(function(){var $pkg={},$init,B,A,IT,IU,IV,IW,FL,FM,FN,FO,FP,HH,EX,EY,FK,GA,GH,GK,GL,GM,GS,GT,GW,GX,GZ,HA,HD,HI,HL,HM;B=$packages["github.com/gopherjs/gopherjs/js"];A=$packages["math/bits"];IT=$arrayType($Uint32,2);IU=$arrayType($Float32,2);IV=$arrayType($Float64,1);IW=$structType("math",[{prop:"uint32array",name:"uint32array",embedded:false,exported:false,typ:IT,tag:""},{prop:"float32array",name:"float32array",embedded:false,exported:false,typ:IU,tag:""},{prop:"float64array",name:"float64array",embedded:false,exported:false,typ:IV,tag:""}]);EX=function(av,aw){var av,aw;if(GL(av,1)||GL(aw,1)){return GK(1);}else if(GM(av)||GM(aw)){return GW();}else if((av===0)&&(av===aw)){if(GZ(av)){return aw;}return av;}if(av>aw){return av;}return aw;};EY=function(av,aw){var av,aw;if(GL(av,-1)||GL(aw,-1)){return GK(-1);}else if(GM(av)||GM(aw)){return GW();}else if((av===0)&&(av===aw)){if(GZ(av)){return av;}return aw;}if(av>>0)));};$pkg.Abs=FK;GA=function(av){var av;return $parseFloat(FL.cos(av));};$pkg.Cos=GA;GH=function(av){var av;return $parseFloat(FL.floor(av));};$pkg.Floor=GH;GK=function(av){var av;if(av>=0){return FN;}else{return FO;}};$pkg.Inf=GK;GL=function(av,aw){var av,aw;if(av===FN){return aw>=0;}if(av===FO){return aw<=0;}return false;};$pkg.IsInf=GL;GM=function(av){var av,aw;aw=false;aw=!((av===av));return aw;};$pkg.IsNaN=GM;GS=function(av,aw){var av,aw;return EX(av,aw);};$pkg.Max=GS;GT=function(av,aw){var av,aw;return EY(av,aw);};$pkg.Min=GT;GW=function(){return FP;};$pkg.NaN=GW;GX=function(av,aw){var av,aw;if((av===1)||((av===-1)&&((aw===FN)||(aw===FO)))){return 1;}return $parseFloat(FL.pow(av,aw));};$pkg.Pow=GX;GZ=function(av){var av;return av<0||(1/av===FO);};$pkg.Signbit=GZ;HA=function(av){var av;return $parseFloat(FL.sin(av));};$pkg.Sin=HA;HD=function(av){var av;return $parseFloat(FL.sqrt(av));};$pkg.Sqrt=HD;HI=function(){var av;av=new($global.ArrayBuffer)(8);HH.uint32array=new($global.Uint32Array)(av);HH.float32array=new($global.Float32Array)(av);HH.float64array=new($global.Float64Array)(av);};HL=function(av){var av,aw,ax;HH.float64array[0]=av;return(aw=$shiftLeft64((new $Uint64(0,HH.uint32array[1])),32),ax=(new $Uint64(0,HH.uint32array[0])),new $Uint64(aw.$high+ax.$high,aw.$low+ax.$low));};$pkg.Float64bits=HL;HM=function(av){var av;HH.uint32array[0]=((av.$low>>>0));HH.uint32array[1]=(($shiftRightUint64(av,32).$low>>>0));return HH.float64array[0];};$pkg.Float64frombits=HM;$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:$r=B.$init();$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}$r=A.$init();$s=2;case 2:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}HH=new IW.ptr(IT.zero(),IU.zero(),IV.zero());FL=$global.Math;FM=0;FN=1/FM;FO=-1/FM;FP=$parseFloat($NaN);HI();}return;}if($f===undefined){$f={$blk:$init};}$f.$s=$s;$f.$r=$r;return $f;};$pkg.$init=$init;return $pkg;})(); $packages["resolv"]=(function(){var $pkg={},$init,A,B,C,N,P,Q,S,U,X,Z,AA,AE,AG,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR,AS,AT,AU,AV,AW,AX,AY,K,O,R,T,V,W,Y,AB,AC,AD,AF,AH;A=$packages["math"];B=$pkg.Vector=$newType(12,$kindSlice,"resolv.Vector",true,"resolv",true,null);C=$pkg.Axis=$newType(4,$kindInt,"resolv.Axis",true,"resolv",true,null);N=$pkg.Space=$newType(0,$kindStruct,"resolv.Space",true,"resolv",true,function(Cells_,CellWidth_,CellHeight_){this.$val=this;if(arguments.length===0){this.Cells=AL.nil;this.CellWidth=0;this.CellHeight=0;return;}this.Cells=Cells_;this.CellWidth=CellWidth_;this.CellHeight=CellHeight_;});P=$pkg.Shape=$newType(8,$kindInterface,"resolv.Shape",true,"resolv",true,null);Q=$pkg.Line=$newType(0,$kindStruct,"resolv.Line",true,"resolv",true,function(Start_,End_){this.$val=this;if(arguments.length===0){this.Start=B.nil;this.End=B.nil;return;}this.Start=Start_;this.End=End_;});S=$pkg.ConvexPolygon=$newType(0,$kindStruct,"resolv.ConvexPolygon",true,"resolv",true,function(Points_,X_,Y_,Closed_){this.$val=this;if(arguments.length===0){this.Points=AP.nil;this.X=0;this.Y=0;this.Closed=false;return;}this.Points=Points_;this.X=X_;this.Y=Y_;this.Closed=Closed_;});U=$pkg.ContactSet=$newType(0,$kindStruct,"resolv.ContactSet",true,"resolv",true,function(Points_,MTV_,Center_){this.$val=this;if(arguments.length===0){this.Points=AP.nil;this.MTV=B.nil;this.Center=B.nil;return;}this.Points=Points_;this.MTV=MTV_;this.Center=Center_;});X=$pkg.Circle=$newType(0,$kindStruct,"resolv.Circle",true,"resolv",true,function(X_,Y_,Radius_){this.$val=this;if(arguments.length===0){this.X=0;this.Y=0;this.Radius=0;return;}this.X=X_;this.Y=Y_;this.Radius=Radius_;});Z=$pkg.Projection=$newType(0,$kindStruct,"resolv.Projection",true,"resolv",true,function(Min_,Max_){this.$val=this;if(arguments.length===0){this.Min=0;this.Max=0;return;}this.Min=Min_;this.Max=Max_;});AA=$pkg.Object=$newType(0,$kindStruct,"resolv.Object",true,"resolv",true,function(Shape_,Space_,X_,Y_,W_,H_,TouchingCells_,Data_,ignoreList_,tags_){this.$val=this;if(arguments.length===0){this.Shape=$ifaceNil;this.Space=AM.nil;this.X=0;this.Y=0;this.W=0;this.H=0;this.TouchingCells=AK.nil;this.Data=$ifaceNil;this.ignoreList=false;this.tags=AV.nil;return;}this.Shape=Shape_;this.Space=Space_;this.X=X_;this.Y=Y_;this.W=W_;this.H=H_;this.TouchingCells=TouchingCells_;this.Data=Data_;this.ignoreList=ignoreList_;this.tags=tags_;});AE=$pkg.Collision=$newType(0,$kindStruct,"resolv.Collision",true,"resolv",true,function(checkingObject_,dx_,dy_,Objects_,Cells_){this.$val=this;if(arguments.length===0){this.checkingObject=AN.nil;this.dx=0;this.dy=0;this.Objects=AO.nil;this.Cells=AK.nil;return;}this.checkingObject=checkingObject_;this.dx=dx_;this.dy=dy_;this.Objects=Objects_;this.Cells=Cells_;});AG=$pkg.Cell=$newType(0,$kindStruct,"resolv.Cell",true,"resolv",true,function(X_,Y_,Objects_){this.$val=this;if(arguments.length===0){this.X=0;this.Y=0;this.Objects=AO.nil;return;}this.X=X_;this.Y=Y_;this.Objects=Objects_;});AI=$sliceType($Float64);AJ=$ptrType(AG);AK=$sliceType(AJ);AL=$sliceType(AK);AM=$ptrType(N);AN=$ptrType(AA);AO=$sliceType(AN);AP=$sliceType(B);AQ=$ptrType(Q);AR=$sliceType(AQ);AS=$ptrType(X);AT=$ptrType(S);AU=$ptrType(U);AV=$sliceType($String);AW=$ptrType(AE);AX=$sliceType(C);AY=$mapType(AN,$Bool);B.prototype.Clone=function(){var a,b;a=this;b=$makeSlice(B,a.$length);$copySlice(b,a);return b;};$ptrType(B).prototype.Clone=function(){return this.$get().Clone();};B.prototype.Add=function(a){var a,b,c,d,e,f;b=this;c=b.$length;d=a;e=0;while(true){if(!(e=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]).$length>c){AC($convertSliceType(b,AI),1,$convertSliceType(b,AI),$convertSliceType($subslice(((f<0||f>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]),0,c),AI));}else{AC($convertSliceType(b,AI),1,$convertSliceType(b,AI),$convertSliceType(((f<0||f>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]),AI));}e++;}return b;};$ptrType(B).prototype.Add=function(a){return this.$get().Add(a);};B.prototype.Sub=function(a){var a,b,c,d,e,f;b=this;c=b.$length;d=a;e=0;while(true){if(!(e=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]).$length>c){AC($convertSliceType(b,AI),-1,$convertSliceType($subslice(((f<0||f>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]),0,c),AI),$convertSliceType(b,AI));}else{AC($convertSliceType(b,AI),-1,$convertSliceType(((f<0||f>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]),AI),$convertSliceType(b,AI));}e++;}return b;};$ptrType(B).prototype.Sub=function(a){return this.$get().Sub(a);};B.prototype.Scale=function(a){var a,b;b=this;AD($convertSliceType(b,AI),a,$convertSliceType(b,AI));return b;};$ptrType(B).prototype.Scale=function(a){return this.$get().Scale(a);};B.prototype.Equal=function(a){var a,b,c,d,e;b=this;if(!((b.$length===a.$length))){return false;}c=b;d=0;while(true){if(!(d=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+e])-((e<0||e>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+e]))>1e-08){return false;}d++;}return true;};$ptrType(B).prototype.Equal=function(a){return this.$get().Equal(a);};B.prototype.Magnitude=function(){var a;a=this;return A.Sqrt(a.Magnitude2());};$ptrType(B).prototype.Magnitude=function(){return this.$get().Magnitude();};B.prototype.Magnitude2=function(){var a,b,c,d,e;a=this;b=0;c=a;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);b=b+(e*e);d++;}return b;};$ptrType(B).prototype.Magnitude2=function(){return this.$get().Magnitude2();};B.prototype.Unit=function(){var a,b,c,d,e;a=this;b=a.Magnitude();if(b<1e-08){return a;}c=a;d=0;while(true){if(!(d=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+e]=((e<0||e>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+e])/b);d++;}return a;};$ptrType(B).prototype.Unit=function(){return this.$get().Unit();};K=function(a,b){var a,b,c,d,e,f,g,h,i,j,k;c=0;d=a.$length;e=b.$length;f=c;g=d;h=e;if(g>h){b=$appendSlice(b,$convertSliceType($makeSlice(B,(g-h>>0)),AI));}if(g>0)),AI));}i=a;j=0;while(true){if(!(j=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+k])*((k<0||k>=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+k]));j++;}return f;};$pkg.Dot=K;B.prototype.Dot=function(a){var a,b;b=this;return K(b,a);};$ptrType(B).prototype.Dot=function(a){return this.$get().Dot(a);};B.prototype.Cross=function(a){var a,b;b=this;if(!((b.$length===3))||!((a.$length===3))){return B.nil;}return new B([(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1])*(2>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+2])-(2>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+2])*(1>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+1]),(2>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+2])*(0>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+0])-(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])*(2>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+2]),(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])*(2>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+2])-(2>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+2])*(0>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+0])]);};$ptrType(B).prototype.Cross=function(a){return this.$get().Cross(a);};B.prototype.Rotate=function(a,b){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;c=this;d=2;e=c.$length;f=d;g=e;if(g===0){return c;}if(b.$length>0){f=(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0]);}if((g===1)&&!((f===2))){c=$append(c,0,0);}if((g<2&&(f===2))||((g===2)&&!((f===2)))){c=$append(c,0);}h=(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]);i=(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]);j=h;k=i;l=A.Cos(a);m=A.Sin(a);n=l;o=m;p=f;if(p===(0)){q=(2>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+2]);(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]=k*n-q*o);(2>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+2]=k*o+q*n);}else if(p===(1)){r=(2>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+2]);(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]=j*n+r*o);(2>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+2]=-j*o+r*n);}else if(p===(2)){(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]=j*n-k*o);(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]=j*o+k*n);}if(g>3){return $subslice(c,0,3);}return c;};$ptrType(B).prototype.Rotate=function(a,b){return this.$get().Rotate(a,b);};B.prototype.X=function(){var a;a=this;if(a.$length<1){return 0;}return(0>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+0]);};$ptrType(B).prototype.X=function(){return this.$get().X();};B.prototype.Y=function(){var a;a=this;if(a.$length<2){return 0;}return(1>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+1]);};$ptrType(B).prototype.Y=function(){return this.$get().Y();};B.prototype.Z=function(){var a;a=this;if(a.$length<3){return 0;}return(2>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+2]);};$ptrType(B).prototype.Z=function(){return this.$get().Z();};O=function(a,b,c,d){var a,b,c,d,e,f,g;e=new N.ptr(AL.nil,c,d);e.Resize((f=a/c,(f===f&&f!==1/0&&f!==-1/0)?f>>0:$throwRuntimeError("integer divide by zero")),(g=b/d,(g===g&&g!==1/0&&g!==-1/0)?g>>0:$throwRuntimeError("integer divide by zero")));return e;};$pkg.NewSpace=O;N.ptr.prototype.Add=function(a){var{a,b,c,d,e,$s,$r,$c}=$restore(this,{a});$s=$s||0;s:while(true){switch($s){case 0:b=this;if(b===AM.nil){$panic(new $String("ERROR: space is nil"));}c=a;d=0;case 1:if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);e.Space=b;$r=e.Update();$s=3;case 3:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}d++;$s=1;continue;case 2:$s=-1;return;}return;}var $f={$blk:N.ptr.prototype.Add,$c:true,$r,a,b,c,d,e,$s};return $f;};N.prototype.Add=function(a){return this.$val.Add(a);};N.ptr.prototype.Remove=function(a){var a,b,c,d,e,f,g,h;b=this;if(b===AM.nil){$panic(new $String("ERROR: space is nil"));}c=a;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);f=e.TouchingCells;g=0;while(true){if(!(g=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+g]);h.unregister(e);g++;}e.TouchingCells=new AK([]);e.Space=AM.nil;d++;}};N.prototype.Remove=function(a){return this.$val.Remove(a);};N.ptr.prototype.Objects=function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;a=this;b=$makeMap(AN.keyFor,[]);c=new AO([]);d=a.Cells;e=0;while(true){if(!(e=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+f]));i=0;while(true){if(!(i=m.$length)?($throwRuntimeError("index out of range"),undefined):m.$array[m.$offset+f])),((j<0||j>=l.$length)?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+j])).Objects;n=0;while(true){if(!(n=k.$length)?($throwRuntimeError("index out of range"),undefined):k.$array[k.$offset+n]);p=(q=b[AN.keyFor(o)],q!==undefined?[q.v,true]:[false,false]);r=p[1];if(!r){c=$append(c,o);s=o;(b||$throwRuntimeError("assignment to entry in nil map"))[AN.keyFor(s)]={k:s,v:true};}n++;}i++;}e++;}return c;};N.prototype.Objects=function(){return this.$val.Objects();};N.ptr.prototype.Resize=function(a,b){var a,b,c,d,e,f,g;c=this;c.Cells=new AL([]);d=0;while(true){if(!(d=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+d]=$append((f=c.Cells,((d<0||d>=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+d])),AH(e,d))));e=e+(1)>>0;}d=d+(1)>>0;}};N.prototype.Resize=function(a,b){return this.$val.Resize(a,b);};N.ptr.prototype.Cell=function(a,b){var a,b,c,d,e,f;c=this;if(b>=0&&b=0&&a<(d=c.Cells,((b<0||b>=d.$length)?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+b])).$length){return(e=(f=c.Cells,((b<0||b>=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+b])),((a<0||a>=e.$length)?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+a]));}return AJ.nil;};N.prototype.Cell=function(a,b){return this.$val.Cell(a,b);};N.ptr.prototype.CheckCells=function(a,b,c,d,e){var a,b,c,d,e,f,g,h,i,j,k,l,m;f=this;g=a;while(true){if(!(g<(a+c>>0))){break;}h=b;while(true){if(!(h<(b+d>>0))){break;}i=f.Cell(g,h);if(!(i===AJ.nil)){if(e.$length>0){if(i.ContainsTags(e)){j=i.Objects;k=0;while(true){if(!(k=j.$length)?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+k]);if(l.HasTags(e)){return l;}k++;}}}else if(i.Occupied()){return(m=i.Objects,(0>=m.$length?($throwRuntimeError("index out of range"),undefined):m.$array[m.$offset+0]));}}h=h+(1)>>0;}g=g+(1)>>0;}return AN.nil;};N.prototype.CheckCells=function(a,b,c,d,e){return this.$val.CheckCells(a,b,c,d,e);};N.ptr.prototype.CheckCellsWorld=function(a,b,c,d,e){var a,b,c,d,e,f,g,h,i,j,k,l;f=this;g=f.WorldToSpace(a,b);h=g[0];i=g[1];j=f.WorldToSpace(c,d);k=j[0];l=j[1];return f.CheckCells(h,i,k,l,e);};N.prototype.CheckCellsWorld=function(a,b,c,d,e){return this.$val.CheckCellsWorld(a,b,c,d,e);};N.ptr.prototype.UnregisterAllObjects=function(){var a,b,c,d,e,f,g;a=this;b=0;while(true){if(!(b=d.$length)?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+b])).$length)){break;}g=(e=(f=a.Cells,((b<0||b>=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+b])),((c<0||c>=e.$length)?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+c]));a.Remove(g.Objects);c=c+(1)>>0;}b=b+(1)>>0;}};N.prototype.UnregisterAllObjects=function(){return this.$val.UnregisterAllObjects();};N.ptr.prototype.WorldToSpace=function(a,b){var a,b,c,d,e;c=this;d=((A.Floor(a/(c.CellWidth))>>0));e=((A.Floor(b/(c.CellHeight))>>0));return[d,e];};N.prototype.WorldToSpace=function(a,b){return this.$val.WorldToSpace(a,b);};N.ptr.prototype.SpaceToWorld=function(a,b){var a,b,c,d,e;c=this;d=(($imul(a,c.CellWidth)));e=(($imul(b,c.CellHeight)));return[d,e];};N.prototype.SpaceToWorld=function(a,b){return this.$val.SpaceToWorld(a,b);};N.ptr.prototype.Height=function(){var a;a=this;return a.Cells.$length;};N.prototype.Height=function(){return this.$val.Height();};N.ptr.prototype.Width=function(){var a,b;a=this;if(a.Cells.$length>0){return(b=a.Cells,(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])).$length;}return 0;};N.prototype.Width=function(){return this.$val.Width();};N.ptr.prototype.CellsInLine=function(a,b,c,d){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;e=this;f=new AK([]);g=e.Cell(a,b);h=e.Cell(c,d);if(!(g===AJ.nil)&&!(h===AJ.nil)){i=new B([((c-a>>0)),((d-b>>0))]).Unit();(0>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+0]=(0>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+0])*(((j=e.CellWidth/2,(j===j&&j!==1/0&&j!==-1/0)?j>>0:$throwRuntimeError("integer divide by zero")))));(1>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+1]=(1>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+1])*(((k=e.CellHeight/2,(k===k&&k!==1/0&&k!==-1/0)?k>>0:$throwRuntimeError("integer divide by zero")))));l=e.SpaceToWorld(a,b);m=l[0];n=l[1];q=new B([m+((o=e.CellWidth/2,(o===o&&o!==1/0&&o!==-1/0)?o>>0:$throwRuntimeError("integer divide by zero"))),n+((p=e.CellHeight/2,(p===p&&p!==1/0&&p!==-1/0)?p>>0:$throwRuntimeError("integer divide by zero")))]);r=false;while(true){if(!(!(g===AJ.nil))){break;}if(g===h){f=$append(f,g);break;}f=$append(f,g);if(r){(1>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+1]=(1>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+1])+((1>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+1])));}else{(0>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+0]=(0>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+0])+((0>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+0])));}s=e.WorldToSpace((0>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+0]),(1>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+1]));t=s[0];u=s[1];v=e.Cell(t,u);if(!(v===g)){g=v;}r=!r;}}return f;};N.prototype.CellsInLine=function(a,b,c,d){return this.$val.CellsInLine(a,b,c,d);};R=function(a,b,c,d){var a,b,c,d;return new Q.ptr(new B([a,b]),new B([c,d]));};$pkg.NewLine=R;Q.ptr.prototype.Project=function(a){var a,b;b=this;return b.Vector().Scale(a.Dot(b.Start.Sub(new AP([b.End]))));};Q.prototype.Project=function(a){return this.$val.Project(a);};Q.ptr.prototype.Normal=function(){var a,b;a=this;b=a.Vector();return new B([(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1]),-(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])]).Unit();};Q.prototype.Normal=function(){return this.$val.Normal();};Q.ptr.prototype.Vector=function(){var a;a=this;return a.End.Clone().Sub(new AP([a.Start])).Unit();};Q.prototype.Vector=function(){return this.$val.Vector();};Q.ptr.prototype.IntersectionPointsLine=function(a){var a,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;b=this;k=((c=b.End,(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]))-(d=b.Start,(0>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+0])))*((e=a.End,(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1]))-(f=a.Start,(1>=f.$length?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+1])))-((g=a.End,(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0]))-(h=a.Start,(0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0])))*((i=b.End,(1>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+1]))-(j=b.Start,(1>=j.$length?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+1])));if(!((k===0))){t=((((l=b.Start,(1>=l.$length?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+1]))-(m=a.Start,(1>=m.$length?($throwRuntimeError("index out of range"),undefined):m.$array[m.$offset+1])))*((n=a.End,(0>=n.$length?($throwRuntimeError("index out of range"),undefined):n.$array[n.$offset+0]))-(o=a.Start,(0>=o.$length?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+0]))))-(((p=b.Start,(0>=p.$length?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+0]))-(q=a.Start,(0>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+0])))*((r=a.End,(1>=r.$length?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+1]))-(s=a.Start,(1>=s.$length?($throwRuntimeError("index out of range"),undefined):s.$array[s.$offset+1]))))+1)/k;ac=((((u=b.Start,(1>=u.$length?($throwRuntimeError("index out of range"),undefined):u.$array[u.$offset+1]))-(v=a.Start,(1>=v.$length?($throwRuntimeError("index out of range"),undefined):v.$array[v.$offset+1])))*((w=b.End,(0>=w.$length?($throwRuntimeError("index out of range"),undefined):w.$array[w.$offset+0]))-(x=b.Start,(0>=x.$length?($throwRuntimeError("index out of range"),undefined):x.$array[x.$offset+0]))))-(((y=b.Start,(0>=y.$length?($throwRuntimeError("index out of range"),undefined):y.$array[y.$offset+0]))-(z=a.Start,(0>=z.$length?($throwRuntimeError("index out of range"),undefined):z.$array[z.$offset+0])))*((aa=b.End,(1>=aa.$length?($throwRuntimeError("index out of range"),undefined):aa.$array[aa.$offset+1]))-(ab=b.Start,(1>=ab.$length?($throwRuntimeError("index out of range"),undefined):ab.$array[ab.$offset+1]))))+1)/k;if((0=ad.$length?($throwRuntimeError("index out of range"),undefined):ad.$array[ad.$offset+0]))-(ae=b.Start,(0>=ae.$length?($throwRuntimeError("index out of range"),undefined):ae.$array[ae.$offset+0]));ai=(ag=b.End,(1>=ag.$length?($throwRuntimeError("index out of range"),undefined):ag.$array[ag.$offset+1]))-(ah=b.Start,(1>=ah.$length?($throwRuntimeError("index out of range"),undefined):ah.$array[ah.$offset+1]));return new B([(aj=b.Start,(0>=aj.$length?($throwRuntimeError("index out of range"),undefined):aj.$array[aj.$offset+0]))+(t*af),(ak=b.Start,(1>=ak.$length?($throwRuntimeError("index out of range"),undefined):ak.$array[ak.$offset+1]))+(t*ai)]);}}return B.nil;};Q.prototype.IntersectionPointsLine=function(a){return this.$val.IntersectionPointsLine(a);};Q.ptr.prototype.IntersectionPointsCircle=function(a){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;b=this;c=new AP([]);d=new B([a.X,a.Y]);e=b.Start.Sub(new AP([d]));f=b.End.Sub(new AP([d]));g=f.Sub(new AP([e]));h=(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0])*(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0])+(1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1])*(1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1]);i=2*(((0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0])*(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0]))+((1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1])*(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1])));j=((0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0])*(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0]))+((1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1])*(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1]))-(a.Radius*a.Radius);k=i*i-(4*h*j);if(k<0){}else if(k===0){l=-i/(2*h);if(l>=0&&l<=1){c=$append(c,new B([(m=b.Start,(0>=m.$length?($throwRuntimeError("index out of range"),undefined):m.$array[m.$offset+0]))+l*(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0]),(n=b.Start,(1>=n.$length?($throwRuntimeError("index out of range"),undefined):n.$array[n.$offset+1]))+l*(1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1])]));}}else{o=(-i+A.Sqrt(k))/(2*h);if(o>=0&&o<=1){c=$append(c,new B([(p=b.Start,(0>=p.$length?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+0]))+o*(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0]),(q=b.Start,(1>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+1]))+o*(1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1])]));}o=(-i-A.Sqrt(k))/(2*h);if(o>=0&&o<=1){c=$append(c,new B([(r=b.Start,(0>=r.$length?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+0]))+o*(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0]),(s=b.Start,(1>=s.$length?($throwRuntimeError("index out of range"),undefined):s.$array[s.$offset+1]))+o*(1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1])]));}}return c;};Q.prototype.IntersectionPointsCircle=function(a){return this.$val.IntersectionPointsCircle(a);};T=function(a){var a,b;b=new S.ptr(new AP([]),0,0,true);b.AddPoints(a);return b;};$pkg.NewConvexPolygon=T;S.ptr.prototype.Clone=function(){var a,b,c,d,e,f;a=this;b=new AP([]);c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);b=$append(b,e.Clone());d++;}f=T(AI.nil);f.X=a.X;f.Y=a.Y;f.AddPointsVec(b);f.Closed=a.Closed;return f;};S.prototype.Clone=function(){return this.$val.Clone();};S.ptr.prototype.AddPointsVec=function(a){var a,b;b=this;b.Points=$appendSlice(b.Points,a);};S.prototype.AddPointsVec=function(a){return this.$val.AddPointsVec(a);};S.ptr.prototype.AddPoints=function(a){var a,b,c,d;b=this;c=0;while(true){if(!(c=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+c]),(d=c+1>>0,((d<0||d>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+d]))]));c=c+(2)>>0;}};S.prototype.AddPoints=function(a){return this.$val.AddPoints(a);};S.ptr.prototype.Lines=function(){var a,b,c,d,e,f,g,h,i,j;a=this;b=new AR([]);c=a.Transformed();d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);f=(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]);g=e;h=f;if(d<(c.$length-1>>0)){h=(i=d+1>>0,((i<0||i>=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+i]));}else if(!a.Closed){break;}j=R((0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0]),(1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1]),(0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0]),(1>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+1]));b=$append(b,j);d=d+(1)>>0;}return b;};S.prototype.Lines=function(){return this.$val.Lines();};S.ptr.prototype.Transformed=function(){var a,b,c,d,e;a=this;b=new AP([]);c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);b=$append(b,new B([(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0])+a.X,(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1])+a.Y]));d++;}return b;};S.prototype.Transformed=function(){return this.$val.Transformed();};S.ptr.prototype.Bounds=function(){var a,b,c,d,e,f,g,h;a=this;b=a.Transformed();e=new B([(c=(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0]),(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0])),(d=(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0]),(1>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+1]))]);f=e.Clone();g=0;while(true){if(!(g=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+g]);if((0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0])<(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0])){(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0]=(0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0]));}else if((0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0])>(0>=f.$length?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+0])){(0>=f.$length?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+0]=(0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0]));}if((1>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+1])<(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1])){(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1]=(1>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+1]));}else if((1>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+1])>(1>=f.$length?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+1])){(1>=f.$length?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+1]=(1>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+1]));}g=g+(1)>>0;}return[e,f];};S.prototype.Bounds=function(){return this.$val.Bounds();};S.ptr.prototype.Position=function(){var a;a=this;return[a.X,a.Y];};S.prototype.Position=function(){return this.$val.Position();};S.ptr.prototype.SetPosition=function(a,b){var a,b,c;c=this;c.X=a;c.Y=b;};S.prototype.SetPosition=function(a,b){return this.$val.SetPosition(a,b);};S.ptr.prototype.SetPositionVec=function(a){var a,b;b=this;b.X=a.X();b.Y=a.Y();};S.prototype.SetPositionVec=function(a){return this.$val.SetPositionVec(a);};S.ptr.prototype.Move=function(a,b){var a,b,c;c=this;c.X=c.X+(a);c.Y=c.Y+(b);};S.prototype.Move=function(a,b){return this.$val.Move(a,b);};S.ptr.prototype.MoveVec=function(a){var a,b;b=this;b.X=b.X+(a.X());b.Y=b.Y+(a.Y());};S.prototype.MoveVec=function(a){return this.$val.MoveVec(a);};S.ptr.prototype.Center=function(){var a,b,c,d,e;a=this;b=new B([0,0]);c=a.Transformed();d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);b.Add(new AP([e]));d++;}(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0]=(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])/((a.Transformed().$length)));(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1]=(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1])/((a.Transformed().$length)));return b;};S.prototype.Center=function(){return this.$val.Center();};S.ptr.prototype.Project=function(a){var a,b,c,d,e,f,g,h,i,j,k;b=this;a=a.Unit();c=b.Transformed();f=a.Dot(new B([(d=(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]),(0>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+0])),(e=(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]),(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1]))]));g=f;h=1;while(true){if(!(h=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+h]),(0>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+0])),(j=((h<0||h>=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+h]),(1>=j.$length?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+1]))]));if(kg){g=k;}h=h+(1)>>0;}return new Z.ptr(f,g);};S.prototype.Project=function(a){return this.$val.Project(a);};S.ptr.prototype.SATAxes=function(){var a,b,c,d,e;a=this;b=new AP([]);c=a.Lines();d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);b=$append(b,e.Normal());d++;}return b;};S.prototype.SATAxes=function(){return this.$val.SATAxes();};S.ptr.prototype.PointInside=function(a){var a,b,c,d,e,f,g;b=this;c=R((0>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+0]),(1>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+1]),(0>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+0])+9.99999999999e+11,(1>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+1]));d=0;e=b.Lines();f=0;while(true){if(!(f=e.$length)?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+f]);if(!(g.IntersectionPointsLine(c)===B.nil)){d=d+(1)>>0;}f++;}return d===1;};S.prototype.PointInside=function(a){return this.$val.PointInside(a);};V=function(){return new U.ptr(new AP([]),new B([0,0]),new B([0,0]));};$pkg.NewContactSet=V;U.ptr.prototype.LeftmostPoint=function(){var a,b,c,d,e;a=this;b=B.nil;c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(b===B.nil||(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0])<(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])){b=e;}d++;}return b;};U.prototype.LeftmostPoint=function(){return this.$val.LeftmostPoint();};U.ptr.prototype.RightmostPoint=function(){var a,b,c,d,e;a=this;b=B.nil;c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(b===B.nil||(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0])>(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])){b=e;}d++;}return b;};U.prototype.RightmostPoint=function(){return this.$val.RightmostPoint();};U.ptr.prototype.TopmostPoint=function(){var a,b,c,d,e;a=this;b=B.nil;c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(b===B.nil||(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1])<(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1])){b=e;}d++;}return b;};U.prototype.TopmostPoint=function(){return this.$val.TopmostPoint();};U.ptr.prototype.BottommostPoint=function(){var a,b,c,d,e;a=this;b=B.nil;c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(b===B.nil||(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1])>(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1])){b=e;}d++;}return b;};U.prototype.BottommostPoint=function(){return this.$val.BottommostPoint();};S.ptr.prototype.Intersection=function(a,b,c){var a,aa,ab,ac,ad,ae,af,ag,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;d=this;e=V();f=d.X;g=d.Y;d.X=d.X+(a);d.Y=d.Y+(b);h=$assertType(c,AS,true);i=h[0];j=h[1];if(j){k=d.Lines();l=0;while(true){if(!(l=k.$length)?($throwRuntimeError("index out of range"),undefined):k.$array[k.$offset+l]);e.Points=$appendSlice(e.Points,m.IntersectionPointsCircle(i));l++;}}else{n=$assertType(c,AT,true);o=n[0];p=n[1];if(p){q=d.Lines();r=0;while(true){if(!(r=q.$length)?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+r]);t=o.Lines();u=0;while(true){if(!(u=t.$length)?($throwRuntimeError("index out of range"),undefined):t.$array[t.$offset+u]);w=s.IntersectionPointsLine(v);if(!(w===B.nil)){e.Points=$append(e.Points,w);}u++;}r++;}}}if(e.Points.$length>0){x=e.Points;y=0;while(true){if(!(y=x.$length)?($throwRuntimeError("index out of range"),undefined):x.$array[x.$offset+y]);e.Center=e.Center.Add(new AP([z]));y++;}(ab=e.Center,(0>=ab.$length?($throwRuntimeError("index out of range"),undefined):ab.$array[ab.$offset+0]=(aa=e.Center,(0>=aa.$length?($throwRuntimeError("index out of range"),undefined):aa.$array[aa.$offset+0]))/((e.Points.$length))));(ad=e.Center,(1>=ad.$length?($throwRuntimeError("index out of range"),undefined):ad.$array[ad.$offset+1]=(ac=e.Center,(1>=ac.$length?($throwRuntimeError("index out of range"),undefined):ac.$array[ac.$offset+1]))/((e.Points.$length))));ae=d.calculateMTV(e,c);if(!(ae===B.nil)){e.MTV=ae;}}else{e=AU.nil;}if(!(e===AU.nil)&&(!((a===0))||!((b===0)))){af=new B([a,b]).Magnitude();ag=e.MTV.Magnitude();e.MTV=e.MTV.Unit().Scale(ag-af);}d.X=f;d.Y=g;return e;};S.prototype.Intersection=function(a,b,c){return this.$val.Intersection(a,b,c);};S.ptr.prototype.calculateMTV=function(a,b){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o;c=this;d=new B([0,0]);e=new B([1.7976931348623157e+308,0]);f=b;if($assertType(f,AT,true)[1]){g=f.$val;h=c.SATAxes();i=0;while(true){if(!(i=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+i]);if(!$clone(c.Project(j),Z).Overlapping($clone(g.Project(j),Z))){return B.nil;}k=$clone(c.Project(j),Z).Overlap($clone(g.Project(j),Z));if(e.Magnitude()>k){e=j.Scale(k);}i++;}l=g.SATAxes();m=0;while(true){if(!(m=l.$length)?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+m]);if(!$clone(c.Project(n),Z).Overlapping($clone(g.Project(n),Z))){return B.nil;}o=$clone(c.Project(n),Z).Overlap($clone(g.Project(n),Z));if(e.Magnitude()>o){e=n.Scale(o);}m++;}}(0>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+0]=(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0]));(1>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+1]=(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1]));return d;};S.prototype.calculateMTV=function(a,b){return this.$val.calculateMTV(a,b);};S.ptr.prototype.ContainedBy=function(a){var a,b,c,d,e,f,g,h,i,j;b=this;c=a;if($assertType(c,AT,true)[1]){d=c.$val;e=b.SATAxes();f=0;while(true){if(!(f=e.$length)?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+f]);if(!$clone(b.Project(g),Z).IsInside($clone(d.Project(g),Z))){return false;}f++;}h=d.SATAxes();i=0;while(true){if(!(i=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+i]);if(!$clone(b.Project(j),Z).IsInside($clone(d.Project(j),Z))){return false;}i++;}}return true;};S.prototype.ContainedBy=function(a){return this.$val.ContainedBy(a);};S.ptr.prototype.FlipH=function(){var a,b,c,d;a=this;b=a.Points;c=0;while(true){if(!(c=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+c]);(0>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+0]=-(0>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+0]));c++;}a.ReverseVertexOrder();};S.prototype.FlipH=function(){return this.$val.FlipH();};S.ptr.prototype.FlipV=function(){var a,b,c,d;a=this;b=a.Points;c=0;while(true){if(!(c=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+c]);(1>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+1]=-(1>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+1]));c++;}a.ReverseVertexOrder();};S.prototype.FlipV=function(){return this.$val.FlipV();};S.ptr.prototype.ReverseVertexOrder=function(){var a,b,c,d,e;a=this;c=new AP([(b=a.Points,(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0]))]);d=a.Points.$length-1>>0;while(true){if(!(d>=1)){break;}c=$append(c,(e=a.Points,((d<0||d>=e.$length)?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+d])));d=d-(1)>>0;}a.Points=c;};S.prototype.ReverseVertexOrder=function(){return this.$val.ReverseVertexOrder();};W=function(a,b,c,d){var a,b,c,d;return T(new AI([a,b,a+c,b,a+c,b+d,a,b+d]));};$pkg.NewRectangle=W;Y=function(a,b,c){var a,b,c,d;d=new X.ptr(a,b,c);return d;};$pkg.NewCircle=Y;X.ptr.prototype.Clone=function(){var a;a=this;return Y(a.X,a.Y,a.Radius);};X.prototype.Clone=function(){return this.$val.Clone();};X.ptr.prototype.Bounds=function(){var a;a=this;return[new B([a.X-a.Radius,a.Y-a.Radius]),new B([a.X+a.Radius,a.Y+a.Radius])];};X.prototype.Bounds=function(){return this.$val.Bounds();};X.ptr.prototype.Intersection=function(a,b,c){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;d=this;e=AU.nil;f=d.X;g=d.Y;d.X=d.X+(a);d.Y=d.Y+(b);h=c;if($assertType(h,AT,true)[1]){i=h.$val;e=i.Intersection(-a,-b,d);if(!(e===AU.nil)){e.MTV=e.MTV.Scale(-1);}}else if($assertType(h,AS,true)[1]){j=h.$val;e=V();e.Points=d.IntersectionPointsCircle(j);if(e.Points.$length===0){return AU.nil;}e.MTV=new B([d.X-j.X,d.Y-j.Y]);k=e.MTV.Magnitude();e.MTV=e.MTV.Unit().Scale(d.Radius+j.Radius-k);l=e.Points;m=0;while(true){if(!(m=l.$length)?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+m]);e.Center=e.Center.Add(new AP([n]));m++;}(p=e.Center,(0>=p.$length?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+0]=(o=e.Center,(0>=o.$length?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+0]))/((e.Points.$length))));(r=e.Center,(1>=r.$length?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+1]=(q=e.Center,(1>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+1]))/((e.Points.$length))));}d.X=f;d.Y=g;return e;};X.prototype.Intersection=function(a,b,c){return this.$val.Intersection(a,b,c);};X.ptr.prototype.Move=function(a,b){var a,b,c;c=this;c.X=c.X+(a);c.Y=c.Y+(b);};X.prototype.Move=function(a,b){return this.$val.Move(a,b);};X.ptr.prototype.MoveVec=function(a){var a,b;b=this;b.X=b.X+(a.X());b.Y=b.Y+(a.Y());};X.prototype.MoveVec=function(a){return this.$val.MoveVec(a);};X.ptr.prototype.SetPosition=function(a,b){var a,b,c;c=this;c.X=a;c.Y=b;};X.prototype.SetPosition=function(a,b){return this.$val.SetPosition(a,b);};X.ptr.prototype.SetPositionVec=function(a){var a,b;b=this;b.X=a.X();b.Y=a.Y();};X.prototype.SetPositionVec=function(a){return this.$val.SetPositionVec(a);};X.ptr.prototype.Position=function(){var a;a=this;return[a.X,a.Y];};X.prototype.Position=function(){return this.$val.Position();};X.ptr.prototype.PointInside=function(a){var a,b;b=this;return a.Sub(new AP([new B([b.X,b.Y])])).Magnitude()<=b.Radius;};X.prototype.PointInside=function(a){return this.$val.PointInside(a);};X.ptr.prototype.IntersectionPointsCircle=function(a){var a,b,c,d,e,f,g;b=this;c=A.Sqrt(A.Pow(a.X-b.X,2)+A.Pow(a.Y-b.Y,2));if(c>b.Radius+a.Radius||c0;};Z.prototype.Overlapping=function(a){return this.$val.Overlapping(a);};Z.ptr.prototype.Overlap=function(a){var a,b;b=this;return A.Min(b.Max,a.Max)-A.Max(b.Min,a.Min);};Z.prototype.Overlap=function(a){return this.$val.Overlap(a);};Z.ptr.prototype.IsInside=function(a){var a,b;b=this;return b.Min>=a.Min&&b.Max<=a.Max;};Z.prototype.IsInside=function(a){return this.$val.IsInside(a);};AB=function(a,b,c,d,e){var a,b,c,d,e,f;f=new AA.ptr($ifaceNil,AM.nil,a,b,c,d,AK.nil,$ifaceNil,$makeMap(AN.keyFor,[]),new AV([]));if(e.$length>0){f.AddTags(e);}return f;};$pkg.NewObject=AB;AA.ptr.prototype.Clone=function(){var{a,b,c,d,e,f,g,h,$s,$r,$c}=$restore(this,{});$s=$s||0;s:while(true){switch($s){case 0:a=this;b=AB(a.X,a.Y,a.W,a.H,a.Tags());b.Data=a.Data;if(!($interfaceIsEqual(a.Shape,$ifaceNil))){$s=1;continue;}$s=2;continue;case 1:c=a.Shape.Clone();$s=3;case 3:if($c){$c=false;c=c.$blk();}if(c&&c.$blk!==undefined){break s;}$r=b.SetShape(c);$s=4;case 4:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}case 2:d=a.ignoreList;e=0;f=$keys(d);while(true){if(!(e>0;}h=h+(1)>>0;}}if(!($interfaceIsEqual(a.Shape,$ifaceNil))){$s=1;continue;}$s=2;continue;case 1:$r=a.Shape.SetPosition(a.X,a.Y);$s=3;case 3:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}case 2:$s=-1;return;}return;}var $f={$blk:AA.ptr.prototype.Update,$c:true,$r,a,b,c,d,e,f,g,h,i,j,$s};return $f;};AA.prototype.Update=function(){return this.$val.Update();};AA.ptr.prototype.AddTags=function(a){var a,b;b=this;b.tags=$appendSlice(b.tags,a);};AA.prototype.AddTags=function(a){return this.$val.AddTags(a);};AA.ptr.prototype.RemoveTags=function(a){var a,b,c,d,e,f,g,h,i;b=this;c=a;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);f=b.tags;g=0;while(true){if(!(g=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+g]);if(i===e){b.tags=$appendSlice($subslice(b.tags,0,h),$subslice(b.tags,(h+1>>0)));break;}g++;}d++;}};AA.prototype.RemoveTags=function(a){return this.$val.RemoveTags(a);};AA.ptr.prototype.HasTags=function(a){var a,b,c,d,e,f,g,h;b=this;c=a;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);f=b.tags;g=0;while(true){if(!(g=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+g]);if(h===e){return true;}g++;}d++;}return false;};AA.prototype.HasTags=function(a){return this.$val.HasTags(a);};AA.ptr.prototype.Tags=function(){var a;a=this;return $appendSlice(new AV([]),a.tags);};AA.prototype.Tags=function(){return this.$val.Tags();};AA.ptr.prototype.SetShape=function(a){var{a,b,$s,$r,$c}=$restore(this,{a});$s=$s||0;s:while(true){switch($s){case 0:b=this;if(!($interfaceIsEqual(b.Shape,a))){$s=1;continue;}$s=2;continue;case 1:b.Shape=a;$r=b.Update();$s=3;case 3:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}case 2:$s=-1;return;}return;}var $f={$blk:AA.ptr.prototype.SetShape,$c:true,$r,a,b,$s};return $f;};AA.prototype.SetShape=function(a){return this.$val.SetShape(a);};AA.ptr.prototype.BoundsToSpace=function(a,b){var a,b,c,d,e,f,g,h,i;c=this;d=c.Space.WorldToSpace(c.X+a,c.Y+b);e=d[0];f=d[1];g=c.Space.WorldToSpace(c.X+c.W+a-1,c.Y+c.H+b-1);h=g[0];i=g[1];return[e,f,h,i];};AA.prototype.BoundsToSpace=function(a,b){return this.$val.BoundsToSpace(a,b);};AA.ptr.prototype.SharesCells=function(a){var a,b,c,d,e;b=this;c=b.TouchingCells;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(e.Contains(a)){return true;}d++;}return false;};AA.prototype.SharesCells=function(a){return this.$val.SharesCells(a);};AA.ptr.prototype.SharesCellsTags=function(a){var a,b,c,d,e;b=this;c=b.TouchingCells;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(e.ContainsTags(a)){return true;}d++;}return false;};AA.prototype.SharesCellsTags=function(a){return this.$val.SharesCellsTags(a);};AA.ptr.prototype.Center=function(){var a;a=this;return[a.X+(a.W/2),a.Y+(a.H/2)];};AA.prototype.Center=function(){return this.$val.Center();};AA.ptr.prototype.SetCenter=function(a,b){var a,b,c;c=this;c.X=a-(c.W/2);c.Y=b-(c.H/2);};AA.prototype.SetCenter=function(a,b){return this.$val.SetCenter(a,b);};AA.ptr.prototype.CellPosition=function(){var a,b;a=this;b=a.Center();return a.Space.WorldToSpace(b[0],b[1]);};AA.prototype.CellPosition=function(){return this.$val.CellPosition();};AA.ptr.prototype.SetRight=function(a){var a,b;b=this;b.X=a-b.W;};AA.prototype.SetRight=function(a){return this.$val.SetRight(a);};AA.ptr.prototype.SetBottom=function(a){var a,b;b=this;b.Y=a-b.H;};AA.prototype.SetBottom=function(a){return this.$val.SetBottom(a);};AA.ptr.prototype.Bottom=function(){var a;a=this;return a.Y+a.H;};AA.prototype.Bottom=function(){return this.$val.Bottom();};AA.ptr.prototype.Right=function(){var a;a=this;return a.X+a.W;};AA.prototype.Right=function(){return this.$val.Right();};AA.ptr.prototype.SetBounds=function(a,b){var a,b,c;c=this;c.X=(0>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+0]);c.Y=(1>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+1]);c.W=(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])-c.X;c.H=(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1])-c.Y;};AA.prototype.SetBounds=function(a,b){return this.$val.SetBounds(a,b);};AA.ptr.prototype.Check=function(a,b,c){var a,aa,ab,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;d=this;if(d.Space===AM.nil){return AW.nil;}e=AF();e.checkingObject=d;if(a<0){a=A.Min(a,-1);}else if(a>0){a=A.Max(a,1);}if(b<0){b=A.Min(b,-1);}else if(b>0){b=A.Max(b,1);}e.dx=a;e.dy=b;f=d.BoundsToSpace(a,b);g=f[0];h=f[1];i=f[2];j=f[3];k=$makeMap(AN.keyFor,[]);l=$makeMap(AJ.keyFor,[]);m=h;while(true){if(!(m<=j)){break;}n=g;while(true){if(!(n<=i)){break;}o=d.Space.Cell(n,m);if(!(o===AJ.nil)){p=o.Objects;q=0;while(true){if(!(q=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+q]);t=(s=d.ignoreList[AN.keyFor(r)],s!==undefined?s.v:false);if(r===d||t){q++;continue;}u=(v=k[AN.keyFor(r)],v!==undefined?[v.v,true]:[false,false]);w=u[1];if(((c.$length===0)||r.HasTags(c))&&!w){e.Objects=$append(e.Objects,r);x=r;(k||$throwRuntimeError("assignment to entry in nil map"))[AN.keyFor(x)]={k:x,v:true};y=(z=l[AJ.keyFor(o)],z!==undefined?[z.v,true]:[false,false]);aa=y[1];if(!aa){e.Cells=$append(e.Cells,o);ab=o;(l||$throwRuntimeError("assignment to entry in nil map"))[AJ.keyFor(ab)]={k:ab,v:true};}q++;continue;}q++;}}n=n+(1)>>0;}m=m+(1)>>0;}if(e.Objects.$length===0){return AW.nil;}return e;};AA.prototype.Check=function(a,b,c){return this.$val.Check(a,b,c);};AA.ptr.prototype.Overlaps=function(a){var a,b;b=this;return a.X<=b.X+b.W&&a.X+a.W>=b.X&&a.Y<=b.Y+b.H&&a.Y+a.H>=b.Y;};AA.prototype.Overlaps=function(a){return this.$val.Overlaps(a);};AA.ptr.prototype.AddToIgnoreList=function(a){var a,b,c;b=this;c=a;(b.ignoreList||$throwRuntimeError("assignment to entry in nil map"))[AN.keyFor(c)]={k:c,v:true};};AA.prototype.AddToIgnoreList=function(a){return this.$val.AddToIgnoreList(a);};AA.ptr.prototype.RemoveFromIgnoreList=function(a){var a,b;b=this;delete b.ignoreList[AN.keyFor(a)];};AA.prototype.RemoveFromIgnoreList=function(a){return this.$val.RemoveFromIgnoreList(a);};AC=function(a,b,c,d){var a,b,c,d,e,f,g,h,i;e=d.$length;f=c;g=0;while(true){if(!(g=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+g]);if(h===e){return;}((h<0||h>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+h]=b*i+((h<0||h>=d.$length)?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+h]));g++;}};AD=function(a,b,c){var a,b,c,d,e,f;d=c;e=0;while(true){if(!(e=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]=((f<0||f>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f])*(b));e++;}};AF=function(){return new AE.ptr(AN.nil,0,0,new AO([]),AK.nil);};$pkg.NewCollision=AF;AE.ptr.prototype.HasTags=function(a){var a,b,c,d,e;b=this;c=b.Objects;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(e===b.checkingObject){d++;continue;}if(e.HasTags(a)){return true;}d++;}return false;};AE.prototype.HasTags=function(a){return this.$val.HasTags(a);};AE.ptr.prototype.ObjectsByTags=function(a){var a,b,c,d,e,f;b=this;c=new AO([]);d=b.Objects;e=0;while(true){if(!(e=d.$length)?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+e]);if(f===b.checkingObject){e++;continue;}if(f.HasTags(a)){c=$append(c,f);}e++;}return c;};AE.prototype.ObjectsByTags=function(a){return this.$val.ObjectsByTags(a);};AE.ptr.prototype.ContactWithObject=function(a){var a,b,c;b=this;c=new B([0,0]);if(b.dx<0){(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]=a.X+a.W-b.checkingObject.X);}else if(b.dx>0){(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]=a.X-b.checkingObject.W-b.checkingObject.X);}if(b.dy<0){(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]=a.Y+a.H-b.checkingObject.Y);}else if(b.dy>0){(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]=a.Y-b.checkingObject.H-b.checkingObject.Y);}return c;};AE.prototype.ContactWithObject=function(a){return this.$val.ContactWithObject(a);};AE.ptr.prototype.ContactWithCell=function(a){var a,b,c,d,e;b=this;c=new B([0,0]);d=(($imul(a.X,b.checkingObject.Space.CellWidth)));e=(($imul(a.Y,b.checkingObject.Space.CellHeight)));if(b.dx<0){(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]=d+(b.checkingObject.Space.CellWidth)-b.checkingObject.X);}else if(b.dx>0){(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]=d-b.checkingObject.W-b.checkingObject.X);}if(b.dy<0){(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]=e+(b.checkingObject.Space.CellHeight)-b.checkingObject.Y);}else if(b.dy>0){(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]=e-b.checkingObject.H-b.checkingObject.Y);}return c;};AE.prototype.ContactWithCell=function(a){return this.$val.ContactWithCell(a);};AE.ptr.prototype.SlideAgainstCell=function(a,b){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;c=this;d=c.checkingObject.Space;f=(e=c.Cells,(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0]));g=d.SpaceToWorld(f.X,f.Y);h=g[0];i=g[1];j=(d.CellWidth)/2;k=(d.CellHeight)/2;h=h+(j);i=i+(k);l=c.checkingObject.Center();m=l[0];n=l[1];o=m-h;p=n-i;q=d.Cell(f.X-1>>0,f.Y);r=d.Cell(f.X+1>>0,f.Y);s=d.Cell(f.X,f.Y-1>>0);t=d.Cell(f.X,f.Y+1>>0);u=new B([0,0]);if(!((c.dy===0))){if(o>0&&(r===AJ.nil||!r.ContainsTags(b))){(0>=u.$length?($throwRuntimeError("index out of range"),undefined):u.$array[u.$offset+0]=h+j-c.checkingObject.X);}else if(o<0&&(q===AJ.nil||!q.ContainsTags(b))){(0>=u.$length?($throwRuntimeError("index out of range"),undefined):u.$array[u.$offset+0]=h-j-(c.checkingObject.X+c.checkingObject.W));}else{return B.nil;}}if(!((c.dx===0))){if(p>0&&(t===AJ.nil||!t.ContainsTags(b))){(1>=u.$length?($throwRuntimeError("index out of range"),undefined):u.$array[u.$offset+1]=i+k-c.checkingObject.Y);}else if(p<0&&(s===AJ.nil||!s.ContainsTags(b))){(1>=u.$length?($throwRuntimeError("index out of range"),undefined):u.$array[u.$offset+1]=i-k-(c.checkingObject.Y+c.checkingObject.H));}else{return B.nil;}}return u;};AE.prototype.SlideAgainstCell=function(a,b){return this.$val.SlideAgainstCell(a,b);};AH=function(a,b){var a,b;return new AG.ptr(a,b,new AO([]));};AG.ptr.prototype.register=function(a){var a,b;b=this;if(!b.Contains(a)){b.Objects=$append(b.Objects,a);}};AG.prototype.register=function(a){return this.$val.register(a);};AG.ptr.prototype.unregister=function(a){var a,b,c,d,e,f,g,h,i;b=this;c=b.Objects;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(f===a){(i=b.Objects,((e<0||e>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+e]=(g=b.Objects,h=b.Objects.$length-1>>0,((h<0||h>=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+h]))));b.Objects=$subslice(b.Objects,0,(b.Objects.$length-1>>0));break;}d++;}};AG.prototype.unregister=function(a){return this.$val.unregister(a);};AG.ptr.prototype.Contains=function(a){var a,b,c,d,e;b=this;c=b.Objects;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(e===a){return true;}d++;}return false;};AG.prototype.Contains=function(a){return this.$val.Contains(a);};AG.ptr.prototype.ContainsTags=function(a){var a,b,c,d,e;b=this;c=b.Objects;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(e.HasTags(a)){return true;}d++;}return false;};AG.prototype.ContainsTags=function(a){return this.$val.ContainsTags(a);};AG.ptr.prototype.Occupied=function(){var a;a=this;return a.Objects.$length>0;};AG.prototype.Occupied=function(){return this.$val.Occupied();};B.methods=[{prop:"Clone",name:"Clone",pkg:"",typ:$funcType([],[B],false)},{prop:"Add",name:"Add",pkg:"",typ:$funcType([AP],[B],true)},{prop:"Sub",name:"Sub",pkg:"",typ:$funcType([AP],[B],true)},{prop:"Scale",name:"Scale",pkg:"",typ:$funcType([$Float64],[B],false)},{prop:"Equal",name:"Equal",pkg:"",typ:$funcType([B],[$Bool],false)},{prop:"Magnitude",name:"Magnitude",pkg:"",typ:$funcType([],[$Float64],false)},{prop:"Magnitude2",name:"Magnitude2",pkg:"",typ:$funcType([],[$Float64],false)},{prop:"Unit",name:"Unit",pkg:"",typ:$funcType([],[B],false)},{prop:"Dot",name:"Dot",pkg:"",typ:$funcType([B],[$Float64],false)},{prop:"Cross",name:"Cross",pkg:"",typ:$funcType([B],[B],false)},{prop:"Rotate",name:"Rotate",pkg:"",typ:$funcType([$Float64,AX],[B],true)},{prop:"X",name:"X",pkg:"",typ:$funcType([],[$Float64],false)},{prop:"Y",name:"Y",pkg:"",typ:$funcType([],[$Float64],false)},{prop:"Z",name:"Z",pkg:"",typ:$funcType([],[$Float64],false)}];AM.methods=[{prop:"Add",name:"Add",pkg:"",typ:$funcType([AO],[],true)},{prop:"Remove",name:"Remove",pkg:"",typ:$funcType([AO],[],true)},{prop:"Objects",name:"Objects",pkg:"",typ:$funcType([],[AO],false)},{prop:"Resize",name:"Resize",pkg:"",typ:$funcType([$Int,$Int],[],false)},{prop:"Cell",name:"Cell",pkg:"",typ:$funcType([$Int,$Int],[AJ],false)},{prop:"CheckCells",name:"CheckCells",pkg:"",typ:$funcType([$Int,$Int,$Int,$Int,AV],[AN],true)},{prop:"CheckCellsWorld",name:"CheckCellsWorld",pkg:"",typ:$funcType([$Float64,$Float64,$Float64,$Float64,AV],[AN],true)},{prop:"UnregisterAllObjects",name:"UnregisterAllObjects",pkg:"",typ:$funcType([],[],false)},{prop:"WorldToSpace",name:"WorldToSpace",pkg:"",typ:$funcType([$Float64,$Float64],[$Int,$Int],false)},{prop:"SpaceToWorld",name:"SpaceToWorld",pkg:"",typ:$funcType([$Int,$Int],[$Float64,$Float64],false)},{prop:"Height",name:"Height",pkg:"",typ:$funcType([],[$Int],false)},{prop:"Width",name:"Width",pkg:"",typ:$funcType([],[$Int],false)},{prop:"CellsInLine",name:"CellsInLine",pkg:"",typ:$funcType([$Int,$Int,$Int,$Int],[AK],false)}];AQ.methods=[{prop:"Project",name:"Project",pkg:"",typ:$funcType([B],[B],false)},{prop:"Normal",name:"Normal",pkg:"",typ:$funcType([],[B],false)},{prop:"Vector",name:"Vector",pkg:"",typ:$funcType([],[B],false)},{prop:"IntersectionPointsLine",name:"IntersectionPointsLine",pkg:"",typ:$funcType([AQ],[B],false)},{prop:"IntersectionPointsCircle",name:"IntersectionPointsCircle",pkg:"",typ:$funcType([AS],[AP],false)}];AT.methods=[{prop:"Clone",name:"Clone",pkg:"",typ:$funcType([],[P],false)},{prop:"AddPointsVec",name:"AddPointsVec",pkg:"",typ:$funcType([AP],[],true)},{prop:"AddPoints",name:"AddPoints",pkg:"",typ:$funcType([AI],[],true)},{prop:"Lines",name:"Lines",pkg:"",typ:$funcType([],[AR],false)},{prop:"Transformed",name:"Transformed",pkg:"",typ:$funcType([],[AP],false)},{prop:"Bounds",name:"Bounds",pkg:"",typ:$funcType([],[B,B],false)},{prop:"Position",name:"Position",pkg:"",typ:$funcType([],[$Float64,$Float64],false)},{prop:"SetPosition",name:"SetPosition",pkg:"",typ:$funcType([$Float64,$Float64],[],false)},{prop:"SetPositionVec",name:"SetPositionVec",pkg:"",typ:$funcType([B],[],false)},{prop:"Move",name:"Move",pkg:"",typ:$funcType([$Float64,$Float64],[],false)},{prop:"MoveVec",name:"MoveVec",pkg:"",typ:$funcType([B],[],false)},{prop:"Center",name:"Center",pkg:"",typ:$funcType([],[B],false)},{prop:"Project",name:"Project",pkg:"",typ:$funcType([B],[Z],false)},{prop:"SATAxes",name:"SATAxes",pkg:"",typ:$funcType([],[AP],false)},{prop:"PointInside",name:"PointInside",pkg:"",typ:$funcType([B],[$Bool],false)},{prop:"Intersection",name:"Intersection",pkg:"",typ:$funcType([$Float64,$Float64,P],[AU],false)},{prop:"calculateMTV",name:"calculateMTV",pkg:"resolv",typ:$funcType([AU,P],[B],false)},{prop:"ContainedBy",name:"ContainedBy",pkg:"",typ:$funcType([P],[$Bool],false)},{prop:"FlipH",name:"FlipH",pkg:"",typ:$funcType([],[],false)},{prop:"FlipV",name:"FlipV",pkg:"",typ:$funcType([],[],false)},{prop:"ReverseVertexOrder",name:"ReverseVertexOrder",pkg:"",typ:$funcType([],[],false)}];AU.methods=[{prop:"LeftmostPoint",name:"LeftmostPoint",pkg:"",typ:$funcType([],[B],false)},{prop:"RightmostPoint",name:"RightmostPoint",pkg:"",typ:$funcType([],[B],false)},{prop:"TopmostPoint",name:"TopmostPoint",pkg:"",typ:$funcType([],[B],false)},{prop:"BottommostPoint",name:"BottommostPoint",pkg:"",typ:$funcType([],[B],false)}];AS.methods=[{prop:"Clone",name:"Clone",pkg:"",typ:$funcType([],[P],false)},{prop:"Bounds",name:"Bounds",pkg:"",typ:$funcType([],[B,B],false)},{prop:"Intersection",name:"Intersection",pkg:"",typ:$funcType([$Float64,$Float64,P],[AU],false)},{prop:"Move",name:"Move",pkg:"",typ:$funcType([$Float64,$Float64],[],false)},{prop:"MoveVec",name:"MoveVec",pkg:"",typ:$funcType([B],[],false)},{prop:"SetPosition",name:"SetPosition",pkg:"",typ:$funcType([$Float64,$Float64],[],false)},{prop:"SetPositionVec",name:"SetPositionVec",pkg:"",typ:$funcType([B],[],false)},{prop:"Position",name:"Position",pkg:"",typ:$funcType([],[$Float64,$Float64],false)},{prop:"PointInside",name:"PointInside",pkg:"",typ:$funcType([B],[$Bool],false)},{prop:"IntersectionPointsCircle",name:"IntersectionPointsCircle",pkg:"",typ:$funcType([AS],[AP],false)}];Z.methods=[{prop:"Overlapping",name:"Overlapping",pkg:"",typ:$funcType([Z],[$Bool],false)},{prop:"Overlap",name:"Overlap",pkg:"",typ:$funcType([Z],[$Float64],false)},{prop:"IsInside",name:"IsInside",pkg:"",typ:$funcType([Z],[$Bool],false)}];AN.methods=[{prop:"Clone",name:"Clone",pkg:"",typ:$funcType([],[AN],false)},{prop:"Update",name:"Update",pkg:"",typ:$funcType([],[],false)},{prop:"AddTags",name:"AddTags",pkg:"",typ:$funcType([AV],[],true)},{prop:"RemoveTags",name:"RemoveTags",pkg:"",typ:$funcType([AV],[],true)},{prop:"HasTags",name:"HasTags",pkg:"",typ:$funcType([AV],[$Bool],true)},{prop:"Tags",name:"Tags",pkg:"",typ:$funcType([],[AV],false)},{prop:"SetShape",name:"SetShape",pkg:"",typ:$funcType([P],[],false)},{prop:"BoundsToSpace",name:"BoundsToSpace",pkg:"",typ:$funcType([$Float64,$Float64],[$Int,$Int,$Int,$Int],false)},{prop:"SharesCells",name:"SharesCells",pkg:"",typ:$funcType([AN],[$Bool],false)},{prop:"SharesCellsTags",name:"SharesCellsTags",pkg:"",typ:$funcType([AV],[$Bool],true)},{prop:"Center",name:"Center",pkg:"",typ:$funcType([],[$Float64,$Float64],false)},{prop:"SetCenter",name:"SetCenter",pkg:"",typ:$funcType([$Float64,$Float64],[],false)},{prop:"CellPosition",name:"CellPosition",pkg:"",typ:$funcType([],[$Int,$Int],false)},{prop:"SetRight",name:"SetRight",pkg:"",typ:$funcType([$Float64],[],false)},{prop:"SetBottom",name:"SetBottom",pkg:"",typ:$funcType([$Float64],[],false)},{prop:"Bottom",name:"Bottom",pkg:"",typ:$funcType([],[$Float64],false)},{prop:"Right",name:"Right",pkg:"",typ:$funcType([],[$Float64],false)},{prop:"SetBounds",name:"SetBounds",pkg:"",typ:$funcType([B,B],[],false)},{prop:"Check",name:"Check",pkg:"",typ:$funcType([$Float64,$Float64,AV],[AW],true)},{prop:"Overlaps",name:"Overlaps",pkg:"",typ:$funcType([AN],[$Bool],false)},{prop:"AddToIgnoreList",name:"AddToIgnoreList",pkg:"",typ:$funcType([AN],[],false)},{prop:"RemoveFromIgnoreList",name:"RemoveFromIgnoreList",pkg:"",typ:$funcType([AN],[],false)}];AW.methods=[{prop:"HasTags",name:"HasTags",pkg:"",typ:$funcType([AV],[$Bool],true)},{prop:"ObjectsByTags",name:"ObjectsByTags",pkg:"",typ:$funcType([AV],[AO],true)},{prop:"ContactWithObject",name:"ContactWithObject",pkg:"",typ:$funcType([AN],[B],false)},{prop:"ContactWithCell",name:"ContactWithCell",pkg:"",typ:$funcType([AJ],[B],false)},{prop:"SlideAgainstCell",name:"SlideAgainstCell",pkg:"",typ:$funcType([AJ,AV],[B],true)}];AJ.methods=[{prop:"register",name:"register",pkg:"resolv",typ:$funcType([AN],[],false)},{prop:"unregister",name:"unregister",pkg:"resolv",typ:$funcType([AN],[],false)},{prop:"Contains",name:"Contains",pkg:"",typ:$funcType([AN],[$Bool],false)},{prop:"ContainsTags",name:"ContainsTags",pkg:"",typ:$funcType([AV],[$Bool],true)},{prop:"Occupied",name:"Occupied",pkg:"",typ:$funcType([],[$Bool],false)}];B.init($Float64);N.init("",[{prop:"Cells",name:"Cells",embedded:false,exported:true,typ:AL,tag:""},{prop:"CellWidth",name:"CellWidth",embedded:false,exported:true,typ:$Int,tag:""},{prop:"CellHeight",name:"CellHeight",embedded:false,exported:true,typ:$Int,tag:""}]);P.init([{prop:"Bounds",name:"Bounds",pkg:"",typ:$funcType([],[B,B],false)},{prop:"Clone",name:"Clone",pkg:"",typ:$funcType([],[P],false)},{prop:"Intersection",name:"Intersection",pkg:"",typ:$funcType([$Float64,$Float64,P],[AU],false)},{prop:"Position",name:"Position",pkg:"",typ:$funcType([],[$Float64,$Float64],false)},{prop:"SetPosition",name:"SetPosition",pkg:"",typ:$funcType([$Float64,$Float64],[],false)}]);Q.init("",[{prop:"Start",name:"Start",embedded:false,exported:true,typ:B,tag:""},{prop:"End",name:"End",embedded:false,exported:true,typ:B,tag:""}]);S.init("",[{prop:"Points",name:"Points",embedded:false,exported:true,typ:AP,tag:""},{prop:"X",name:"X",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Y",name:"Y",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Closed",name:"Closed",embedded:false,exported:true,typ:$Bool,tag:""}]);U.init("",[{prop:"Points",name:"Points",embedded:false,exported:true,typ:AP,tag:""},{prop:"MTV",name:"MTV",embedded:false,exported:true,typ:B,tag:""},{prop:"Center",name:"Center",embedded:false,exported:true,typ:B,tag:""}]);X.init("",[{prop:"X",name:"X",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Y",name:"Y",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Radius",name:"Radius",embedded:false,exported:true,typ:$Float64,tag:""}]);Z.init("",[{prop:"Min",name:"Min",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Max",name:"Max",embedded:false,exported:true,typ:$Float64,tag:""}]);AA.init("resolv",[{prop:"Shape",name:"Shape",embedded:false,exported:true,typ:P,tag:""},{prop:"Space",name:"Space",embedded:false,exported:true,typ:AM,tag:""},{prop:"X",name:"X",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Y",name:"Y",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"W",name:"W",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"H",name:"H",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"TouchingCells",name:"TouchingCells",embedded:false,exported:true,typ:AK,tag:""},{prop:"Data",name:"Data",embedded:false,exported:true,typ:$emptyInterface,tag:""},{prop:"ignoreList",name:"ignoreList",embedded:false,exported:false,typ:AY,tag:""},{prop:"tags",name:"tags",embedded:false,exported:false,typ:AV,tag:""}]);AE.init("resolv",[{prop:"checkingObject",name:"checkingObject",embedded:false,exported:false,typ:AN,tag:""},{prop:"dx",name:"dx",embedded:false,exported:false,typ:$Float64,tag:""},{prop:"dy",name:"dy",embedded:false,exported:false,typ:$Float64,tag:""},{prop:"Objects",name:"Objects",embedded:false,exported:true,typ:AO,tag:""},{prop:"Cells",name:"Cells",embedded:false,exported:true,typ:AK,tag:""}]);AG.init("",[{prop:"X",name:"X",embedded:false,exported:true,typ:$Int,tag:""},{prop:"Y",name:"Y",embedded:false,exported:true,typ:$Int,tag:""},{prop:"Objects",name:"Objects",embedded:false,exported:true,typ:AO,tag:""}]);$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:$r=A.$init();$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}}return;}if($f===undefined){$f={$blk:$init};}$f.$s=$s;$f.$r=$r;return $f;};$pkg.$init=$init;return $pkg;})(); -$packages["jsexport/battle"]=(function(){var $pkg={},$init,A,B,C,D,E,F,H,I,J,K,L,M,N,O,Q,R,AE,AV,AW,AX,AY,AZ,BA,BB,BC,BD,BE,BF,BG,BH,BI,BJ,BK,BL,BM,BN,BO,BP,BQ,BR,BS,BT,BU,BV,BW,S,T,U,V,W,P,Y,Z,AA,AB,AC,AD,AF,AG,AH,AI,AJ,AK,AL,AM,AO,AP,AQ,AR,AS,AT,AU;A=$packages["math"];B=$packages["resolv"];C=$pkg.Vec2D=$newType(0,$kindStruct,"battle.Vec2D",true,"jsexport/battle",true,function(X_,Y_){this.$val=this;if(arguments.length===0){this.X=0;this.Y=0;return;}this.X=X_;this.Y=Y_;});D=$pkg.Polygon2D=$newType(0,$kindStruct,"battle.Polygon2D",true,"jsexport/battle",true,function(Anchor_,Points_){this.$val=this;if(arguments.length===0){this.Anchor=BS.nil;this.Points=BT.nil;return;}this.Anchor=Anchor_;this.Points=Points_;});E=$pkg.PlayerDownsync=$newType(0,$kindStruct,"battle.PlayerDownsync",true,"jsexport/battle",true,function(Id_,VirtualGridX_,VirtualGridY_,DirX_,DirY_,VelX_,VelY_,Speed_,BattleState_,JoinIndex_,ColliderRadius_,Removed_,Score_,LastMoveGmtMillis_,FramesToRecover_,FramesInChState_,Hp_,MaxHp_,CharacterState_,InAir_,ActiveSkillId_,ActiveSkillHit_,FramesInvinsible_){this.$val=this;if(arguments.length===0){this.Id=0;this.VirtualGridX=0;this.VirtualGridY=0;this.DirX=0;this.DirY=0;this.VelX=0;this.VelY=0;this.Speed=0;this.BattleState=0;this.JoinIndex=0;this.ColliderRadius=0;this.Removed=false;this.Score=0;this.LastMoveGmtMillis=0;this.FramesToRecover=0;this.FramesInChState=0;this.Hp=0;this.MaxHp=0;this.CharacterState=0;this.InAir=false;this.ActiveSkillId=0;this.ActiveSkillHit=0;this.FramesInvinsible=0;return;}this.Id=Id_;this.VirtualGridX=VirtualGridX_;this.VirtualGridY=VirtualGridY_;this.DirX=DirX_;this.DirY=DirY_;this.VelX=VelX_;this.VelY=VelY_;this.Speed=Speed_;this.BattleState=BattleState_;this.JoinIndex=JoinIndex_;this.ColliderRadius=ColliderRadius_;this.Removed=Removed_;this.Score=Score_;this.LastMoveGmtMillis=LastMoveGmtMillis_;this.FramesToRecover=FramesToRecover_;this.FramesInChState=FramesInChState_;this.Hp=Hp_;this.MaxHp=MaxHp_;this.CharacterState=CharacterState_;this.InAir=InAir_;this.ActiveSkillId=ActiveSkillId_;this.ActiveSkillHit=ActiveSkillHit_;this.FramesInvinsible=FramesInvinsible_;});F=$pkg.InputFrameDecoded=$newType(0,$kindStruct,"battle.InputFrameDecoded",true,"jsexport/battle",true,function(Dx_,Dy_,BtnALevel_,BtnBLevel_){this.$val=this;if(arguments.length===0){this.Dx=0;this.Dy=0;this.BtnALevel=0;this.BtnBLevel=0;return;}this.Dx=Dx_;this.Dy=Dy_;this.BtnALevel=BtnALevel_;this.BtnBLevel=BtnBLevel_;});H=$pkg.Barrier=$newType(0,$kindStruct,"battle.Barrier",true,"jsexport/battle",true,function(Boundary_){this.$val=this;if(arguments.length===0){this.Boundary=BU.nil;return;}this.Boundary=Boundary_;});I=$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;if(arguments.length===0){this.OriginatedRenderFrameId=0;this.OffenderJoinIndex=0;this.StartupFrames=0;this.CancellableStFrame=0;this.CancellableEdFrame=0;this.ActiveFrames=0;this.HitStunFrames=0;this.BlockStunFrames=0;this.PushbackVelX=0;this.PushbackVelY=0;this.Damage=0;this.SelfLockVelX=0;this.SelfLockVelY=0;this.HitboxOffsetX=0;this.HitboxOffsetY=0;this.HitboxSizeX=0;this.HitboxSizeY=0;this.BlowUp=false;this.CancelTransit=false;return;}this.OriginatedRenderFrameId=OriginatedRenderFrameId_;this.OffenderJoinIndex=OffenderJoinIndex_;this.StartupFrames=StartupFrames_;this.CancellableStFrame=CancellableStFrame_;this.CancellableEdFrame=CancellableEdFrame_;this.ActiveFrames=ActiveFrames_;this.HitStunFrames=HitStunFrames_;this.BlockStunFrames=BlockStunFrames_;this.PushbackVelX=PushbackVelX_;this.PushbackVelY=PushbackVelY_;this.Damage=Damage_;this.SelfLockVelX=SelfLockVelX_;this.SelfLockVelY=SelfLockVelY_;this.HitboxOffsetX=HitboxOffsetX_;this.HitboxOffsetY=HitboxOffsetY_;this.HitboxSizeX=HitboxSizeX_;this.HitboxSizeY=HitboxSizeY_;this.BlowUp=BlowUp_;this.CancelTransit=CancelTransit_;});J=$pkg.MeleeBullet=$newType(0,$kindStruct,"battle.MeleeBullet",true,"jsexport/battle",true,function(Bullet_){this.$val=this;if(arguments.length===0){this.Bullet=new I.ptr(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,false,false);return;}this.Bullet=Bullet_;});K=$pkg.FireballBullet=$newType(0,$kindStruct,"battle.FireballBullet",true,"jsexport/battle",true,function(VirtualGridX_,VirtualGridY_,DirX_,DirY_,VelX_,VelY_,Speed_,Bullet_){this.$val=this;if(arguments.length===0){this.VirtualGridX=0;this.VirtualGridY=0;this.DirX=0;this.DirY=0;this.VelX=0;this.VelY=0;this.Speed=0;this.Bullet=new I.ptr(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,false,false);return;}this.VirtualGridX=VirtualGridX_;this.VirtualGridY=VirtualGridY_;this.DirX=DirX_;this.DirY=DirY_;this.VelX=VelX_;this.VelY=VelY_;this.Speed=Speed_;this.Bullet=Bullet_;});L=$pkg.Skill=$newType(0,$kindStruct,"battle.Skill",true,"jsexport/battle",true,function(BattleLocalId_,RecoveryFrames_,RecoveryFramesOnBlock_,RecoveryFramesOnHit_,ReleaseTriggerType_,BoundChState_,Hits_){this.$val=this;if(arguments.length===0){this.BattleLocalId=0;this.RecoveryFrames=0;this.RecoveryFramesOnBlock=0;this.RecoveryFramesOnHit=0;this.ReleaseTriggerType=0;this.BoundChState=0;this.Hits=AX.nil;return;}this.BattleLocalId=BattleLocalId_;this.RecoveryFrames=RecoveryFrames_;this.RecoveryFramesOnBlock=RecoveryFramesOnBlock_;this.RecoveryFramesOnHit=RecoveryFramesOnHit_;this.ReleaseTriggerType=ReleaseTriggerType_;this.BoundChState=BoundChState_;this.Hits=Hits_;});M=$pkg.RoomDownsyncFrame=$newType(0,$kindStruct,"battle.RoomDownsyncFrame",true,"jsexport/battle",true,function(Id_,PlayersArr_,CountdownNanos_,MeleeBullets_,FireballBullets_,BackendUnconfirmedMask_,ShouldForceResync_,PlayerOpPatternToSkillId_){this.$val=this;if(arguments.length===0){this.Id=0;this.PlayersArr=BJ.nil;this.CountdownNanos=new $Int64(0,0);this.MeleeBullets=BK.nil;this.FireballBullets=BQ.nil;this.BackendUnconfirmedMask=new $Uint64(0,0);this.ShouldForceResync=false;this.PlayerOpPatternToSkillId=false;return;}this.Id=Id_;this.PlayersArr=PlayersArr_;this.CountdownNanos=CountdownNanos_;this.MeleeBullets=MeleeBullets_;this.FireballBullets=FireballBullets_;this.BackendUnconfirmedMask=BackendUnconfirmedMask_;this.ShouldForceResync=ShouldForceResync_;this.PlayerOpPatternToSkillId=PlayerOpPatternToSkillId_;});N=$pkg.InputFrameDownsync=$newType(0,$kindStruct,"battle.InputFrameDownsync",true,"jsexport/battle",true,function(InputFrameId_,InputList_,ConfirmedList_){this.$val=this;if(arguments.length===0){this.InputFrameId=0;this.InputList=BI.nil;this.ConfirmedList=new $Uint64(0,0);return;}this.InputFrameId=InputFrameId_;this.InputList=InputList_;this.ConfirmedList=ConfirmedList_;});O=$pkg.RingBuffer=$newType(0,$kindStruct,"battle.RingBuffer",true,"jsexport/battle",true,function(Ed_,St_,EdFrameId_,StFrameId_,N_,Cnt_,Eles_){this.$val=this;if(arguments.length===0){this.Ed=0;this.St=0;this.EdFrameId=0;this.StFrameId=0;this.N=0;this.Cnt=0;this.Eles=AX.nil;return;}this.Ed=Ed_;this.St=St_;this.EdFrameId=EdFrameId_;this.StFrameId=StFrameId_;this.N=N_;this.Cnt=Cnt_;this.Eles=Eles_;});Q=$pkg.SkillMapperType=$newType(4,$kindFunc,"battle.SkillMapperType",true,"jsexport/battle",true,null);R=$pkg.CharacterConfig=$newType(0,$kindStruct,"battle.CharacterConfig",true,"jsexport/battle",true,function(SpeciesId_,SpeciesName_,InAirIdleFrameIdxTurningPoint_,InAirIdleFrameIdxTurnedCycle_,LayDownFrames_,LayDownFramesToRecover_,GetUpInvinsibleFrames_,GetUpFramesToRecover_,Speed_,JumpingInitVelY_,SkillMapper_){this.$val=this;if(arguments.length===0){this.SpeciesId=0;this.SpeciesName="";this.InAirIdleFrameIdxTurningPoint=0;this.InAirIdleFrameIdxTurnedCycle=0;this.LayDownFrames=0;this.LayDownFramesToRecover=0;this.GetUpInvinsibleFrames=0;this.GetUpFramesToRecover=0;this.Speed=0;this.JumpingInitVelY=0;this.SkillMapper=$throwNilPointerError;return;}this.SpeciesId=SpeciesId_;this.SpeciesName=SpeciesName_;this.InAirIdleFrameIdxTurningPoint=InAirIdleFrameIdxTurningPoint_;this.InAirIdleFrameIdxTurnedCycle=InAirIdleFrameIdxTurnedCycle_;this.LayDownFrames=LayDownFrames_;this.LayDownFramesToRecover=LayDownFramesToRecover_;this.GetUpInvinsibleFrames=GetUpInvinsibleFrames_;this.GetUpFramesToRecover=GetUpFramesToRecover_;this.Speed=Speed_;this.JumpingInitVelY=JumpingInitVelY_;this.SkillMapper=SkillMapper_;});AE=$pkg.SatResult=$newType(0,$kindStruct,"battle.SatResult",true,"jsexport/battle",true,function(Overlap_,OverlapX_,OverlapY_,AContainedInB_,BContainedInA_,Axis_){this.$val=this;if(arguments.length===0){this.Overlap=0;this.OverlapX=0;this.OverlapY=0;this.AContainedInB=false;this.BContainedInA=false;this.Axis=B.Vector.nil;return;}this.Overlap=Overlap_;this.OverlapX=OverlapX_;this.OverlapY=OverlapY_;this.AContainedInB=AContainedInB_;this.BContainedInA=BContainedInA_;this.Axis=Axis_;});AV=$sliceType($Int32);AW=$sliceType(AV);AX=$sliceType($emptyInterface);AY=$ptrType(L);AZ=$ptrType(J);BA=$ptrType(AE);BB=$sliceType(C);BC=$sliceType($String);BD=$ptrType(B.Collision);BE=$ptrType(BB);BF=$ptrType(E);BG=$ptrType(B.ConvexPolygon);BH=$ptrType(N);BI=$sliceType($Uint64);BJ=$sliceType(BF);BK=$sliceType(AZ);BL=$sliceType(BE);BM=$sliceType($Bool);BN=$ptrType(B.Object);BO=$sliceType(BN);BP=$ptrType(K);BQ=$sliceType(BP);BR=$sliceType($Float64);BS=$ptrType(C);BT=$sliceType(BS);BU=$ptrType(D);BV=$mapType($Int,$Int);BW=$ptrType(O);P=function(a){var a;return new O.ptr(0,0,0,0,a,0,$makeSlice(AX,a));};$pkg.NewRingBuffer=P;O.ptr.prototype.Put=function(a){var a,b,c,d;b=this;while(true){if(!(0=b.N)){break;}b.Pop();}(c=b.Eles,d=b.Ed,((d<0||d>=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]=a));b.EdFrameId=b.EdFrameId+(1)>>0;b.Cnt=b.Cnt+(1)>>0;b.Ed=b.Ed+(1)>>0;if(b.Ed>=b.N){b.Ed=b.Ed-(b.N)>>0;}};O.prototype.Put=function(a){return this.$val.Put(a);};O.ptr.prototype.Pop=function(){var a,b,c,d;a=this;if(0===a.Cnt){return $ifaceNil;}d=(b=a.Eles,c=a.St,((c<0||c>=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+c]));a.StFrameId=a.StFrameId+(1)>>0;a.Cnt=a.Cnt-(1)>>0;a.St=a.St+(1)>>0;if(a.St>=a.N){a.St=a.St-(a.N)>>0;}return d;};O.prototype.Pop=function(){return this.$val.Pop();};O.ptr.prototype.GetArrIdxByOffset=function(a){var a,b,c;b=this;if((0===b.Cnt)||0>a){return-1;}c=b.St+a>>0;if(b.St=b.N){c=c-(b.N)>>0;}if(c>=b.St||c=d.$length)?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+c]));};O.prototype.GetByOffset=function(a){return this.$val.GetByOffset(a);};O.ptr.prototype.GetByFrameId=function(a){var a,b;b=this;if(a>=b.EdFrameId||a>0);};O.prototype.GetByFrameId=function(a){return this.$val.GetByFrameId(a);};O.ptr.prototype.SetByFrameId=function(a,b){var a,b,c,d,e,f,g,h,i,j,k,l,m,n;c=this;d=c.StFrameId;e=c.EdFrameId;f=d;g=e;if(bb){h=c.GetArrIdxByOffset(b-c.StFrameId>>0);if(!((-1===h))){(i=c.Eles,((h<0||h>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+h]=a));return[0,f,g];}}j=0;if(g>0))>>2>>0);};$pkg.ConvertToDelayedInputFrameId=Z;AA=function(a){var a;return(a>>2>>0);};$pkg.ConvertToNoDelayInputFrameId=AA;AB=function(a){var a;return(((a<<2>>0))+8>>0);};$pkg.ConvertToFirstUsedRenderFrameId=AB;AC=function(a){var a;return(((((a<<2>>0))+8>>0)+4>>0)-1>>0);};$pkg.ConvertToLastUsedRenderFrameId=AC;AD=function(a){var a,b,c,d,e,f,g,h;b=new $Uint64(a.$high&0,(a.$low&15)>>>0);d=(((c=$shiftRightUint64(a,4),new $Uint64(c.$high&0,(c.$low&1)>>>0)).$low>>0));f=(((e=$shiftRightUint64(a,5),new $Uint64(e.$high&0,(e.$low&1)>>>0)).$low>>0));return new F.ptr((g=(($flatten64(b)<0||$flatten64(b)>=$pkg.DIRECTION_DECODER.$length)?($throwRuntimeError("index out of range"),undefined):$pkg.DIRECTION_DECODER.$array[$pkg.DIRECTION_DECODER.$offset+$flatten64(b)]),(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0])),(h=(($flatten64(b)<0||$flatten64(b)>=$pkg.DIRECTION_DECODER.$length)?($throwRuntimeError("index out of range"),undefined):$pkg.DIRECTION_DECODER.$array[$pkg.DIRECTION_DECODER.$offset+$flatten64(b)]),(1>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+1])),d,f);};AF=function(a,b,c,d){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,$s,$deferred,$r,$c}=$restore(this,{a,b,c,d});$s=$s||0;var $err=null;try{s:while(true){switch($s){case 0:$deferred=[];$curGoroutine.deferStack.push($deferred);c=[c];e=[e];f=[f];g=c[0].Position();e[0]=g[0];f[0]=g[1];$deferred.push([(function(c,e,f){return function(){c[0].SetPosition(e[0],f[0]);};})(c,e,f),[]]);c[0].SetPosition(e[0]+a,f[0]+b);h=new AE.ptr(0,0,0,true,true,new B.Vector([0,0]));i=AG(c[0],d,h);if(i){$s=1;continue;}$s=2;continue;case 1:j=h.Overlap*h.OverlapX;k=h.Overlap*h.OverlapY;l=j;m=k;n=[true,l,m,h];$s=4;case 4:return n;case 2:o=[false,0,0,h];$s=5;case 5:return o;case 3:$s=-1;return[false,0,0,BA.nil];}return;}}catch(err){$err=err;$s=-1;return[false,0,0,BA.nil];}finally{$callDeferred($deferred,$err);if($curGoroutine.asleep){var $f={$blk:AF,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,$s,$deferred};return $f;}}};$pkg.CalcPushbacks=AF;AG=function(a,b,c){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;d=a.Points.$length;e=b.Points.$length;f=d;g=e;if((1===f)&&(1===g)){if(!(BA.nil===c)){c.Overlap=0;}return((h=(i=a.Points,(0>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+0])),(0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0]))===(j=(k=b.Points,(0>=k.$length?($throwRuntimeError("index out of range"),undefined):k.$array[k.$offset+0])),(0>=j.$length?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+0])))&&((l=(m=a.Points,(0>=m.$length?($throwRuntimeError("index out of range"),undefined):m.$array[m.$offset+0])),(1>=l.$length?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+1]))===(n=(o=b.Points,(0>=o.$length?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+0])),(1>=n.$length?($throwRuntimeError("index out of range"),undefined):n.$array[n.$offset+1])));}if(1=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+q]);if(AH(a,b,r.Unit(),c)){return false;}q++;}}if(1=s.$length)?($throwRuntimeError("index out of range"),undefined):s.$array[s.$offset+t]);if(AH(a,b,u.Unit(),c)){return false;}t++;}}return true;};AH=function(a,b,c,d){var a,aa,ab,ac,ad,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;e=1.7e+308;f=-1.7e+308;g=1.7e+308;h=-1.7e+308;i=e;j=f;k=g;l=h;m=a.Points;n=0;while(true){if(!(n=m.$length)?($throwRuntimeError("index out of range"),undefined):m.$array[m.$offset+n]);p=((0>=o.$length?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+0])+a.X)*(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0])+((1>=o.$length?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+1])+a.Y)*(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]);if(i>p){i=p;}if(j=q.$length)?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+r]);t=((0>=s.$length?($throwRuntimeError("index out of range"),undefined):s.$array[s.$offset+0])+b.X)*(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0])+((1>=s.$length?($throwRuntimeError("index out of range"),undefined):s.$array[s.$offset+1])+b.Y)*(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]);if(k>t){k=t;}if(ll||jl){u=i-l;d.AContainedInB=false;}else{x=j-k;y=l-i;if(x=ab.$length?($throwRuntimeError("index out of range"),undefined):ab.$array[ab.$offset+0])))&&(0===(ac=d.Axis,(1>=ac.$length?($throwRuntimeError("index out of range"),undefined):ac.$array[ac.$offset+1]))))||z>aa){ad=1;if(u<0){ad=-1;}d.Overlap=aa;d.OverlapX=(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0])*ad;d.OverlapY=(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1])*ad;}d.Axis=c;}return false;};AI=function(a,b){var a,b,c,d;c=((A.Floor(a*100)>>0));d=((A.Floor(b*100)>>0));return[c,d];};$pkg.WorldToVirtualGridPos=AI;AJ=function(a,b){var a,b,c,d;c=(a)*0.01;d=(b)*0.01;return[c,d];};$pkg.VirtualGridToWorldPos=AJ;AK=function(a,b,c,d,e,f,g,h,i,j){var a,b,c,d,e,f,g,h,i,j;return[a-c-g+i,b-d-f+j];};$pkg.WorldToPolygonColliderBLPos=AK;AL=function(a,b,c,d,e,f,g,h,i,j){var a,b,c,d,e,f,g,h,i,j;return[a+c+g-i,b+d+f-j];};$pkg.PolygonColliderBLToWorldPos=AL;AM=function(a,b,c,d,e,f,g,h,i,j){var a,b,c,d,e,f,g,h,i,j,k,l,m;k=AL(a,b,c,d,e,f,g,h,i,j);l=k[0];m=k[1];return AI(l,m);};$pkg.PolygonColliderBLToVirtualGridPos=AM;AO=function(a,b,c,d,e){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,$s,$r,$c}=$restore(this,{a,b,c,d,e});$s=$s||0;s:while(true){switch($s){case 0:f=[f];f[0]=$makeSlice(BB,0,10);g=b.Check(0,0,new BC([]));if(BD.nil===g){$s=-1;return(f.$ptr||(f.$ptr=new BE(function(){return this.$target[0];},function($v){this.$target[0]=$v;},f)));}h=g.Objects;i=0;case 1:if(!(i=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+i]);k=false;l=j.Data;if($assertType(l,BF,true)[1]){}else if($assertType(l,AZ,true)[1]){}else{k=true;}if(!k){i++;$s=1;continue;}m=$assertType(j.Shape,BG);o=AF(0,0,c,m);$s=3;case 3:if($c){$c=false;o=o.$blk();}if(o&&o.$blk!==undefined){break s;}n=o;p=n[0];q=n[1];r=n[2];s=n[3];if(!p){i++;$s=1;continue;}t=(s.Overlap-d)*s.OverlapX;u=(s.Overlap-d)*s.OverlapY;q=t;r=u;f[0]=$append(f[0],new C.ptr(s.OverlapX,s.OverlapY));e.X=e.X+(q);e.Y=e.Y+(r);i++;$s=1;continue;case 2:$s=-1;return(f.$ptr||(f.$ptr=new BE(function(){return this.$target[0];},function($v){this.$target[0]=$v;},f)));}return;}var $f={$blk:AO,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,$s};return $f;};AP=function(a,b,c,d){var a,aa,ab,ac,ad,ae,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;e=Z(c.Id);f=Z(c.Id-1>>0);if(0>=e){return[-2,false,0,0];}g=(h=U[$Int32.keyFor(a.CharacterState)],h!==undefined?[h.v,true]:[false,false]);i=g[1];if(i){return[-2,false,0,0];}j=$assertType(d.GetByFrameId(e),BH).InputList;k=BI.nil;if(0>0,((n<0||n>=j.$length)?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+n])));p=0;q=0;r=p;s=q;t=0;u=0;v=t;w=u;if(!(BI.nil===k)){y=AD((x=m-1>>0,((x<0||x>=k.$length)?($throwRuntimeError("index out of range"),undefined):k.$array[k.$offset+x])));v=y.BtnALevel;w=y.BtnBLevel;}if(0===a.FramesToRecover){z=o.Dx;aa=o.Dy;r=z;s=aa;if(o.BtnBLevel>w){ab=(ac=T[$Int32.keyFor(a.CharacterState)],ac!==undefined?[ac.v,true]:[false,false]);ad=ab[1];if(!ad){l=true;}}}ae=-1;if(o.BtnALevel>v){ae=1;}return[ae,l,r,s];};AQ=function(a,b,c,d,e,f,g){var{a,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az,b,ba,bb,bc,bd,be,bf,bg,bh,bi,bj,bk,bl,bm,bn,bo,bp,bq,br,bs,bt,bu,bv,bw,bx,by,bz,c,ca,cb,cc,cd,ce,cf,cg,ch,ci,cj,ck,cl,cm,cn,co,cp,cq,cr,cs,ct,cu,cv,cw,cx,cy,cz,d,da,db,dc,dd,de,df,dg,dh,di,dj,dk,dl,dm,dn,dp,dq,dr,ds,dt,du,dv,dw,dx,dy,dz,e,ea,eb,ec,ed,ee,ef,eg,eh,ei,ej,ek,el,em,en,eo,ep,eq,er,es,et,eu,ev,ew,ex,ey,ez,f,fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn,fo,fp,fq,fr,fs,ft,fu,fv,fw,fx,fy,fz,g,ga,gb,gc,gd,ge,gf,gg,gh,gi,gj,gk,gl,gm,gn,go,gp,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,$s,$r,$c}=$restore(this,{a,b,c,d,e,f,g});$s=$s||0;s:while(true){switch($s){case 0:h=b.PlayersArr.$length;i=$makeSlice(BJ,h);j=b.PlayersArr;k=0;while(true){if(!(k=j.$length)?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+k]);((l<0||l>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+l]=new E.ptr(m.Id,m.VirtualGridX,m.VirtualGridY,m.DirX,m.DirY,m.VelX,m.VelY,m.Speed,m.BattleState,m.JoinIndex,m.ColliderRadius,m.Removed,m.Score,0,m.FramesToRecover-1>>0,m.FramesInChState+1>>0,m.Hp,m.MaxHp,m.CharacterState,true,m.ActiveSkillId,m.ActiveSkillHit,m.FramesInvinsible-1>>0));if(((l<0||l>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+l]).FramesToRecover<0){((l<0||l>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+l]).FramesToRecover=0;}if(((l<0||l>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+l]).FramesInvinsible<0){((l<0||l>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+l]).FramesInvinsible=0;}k++;}n=$makeSlice(BK,0,b.MeleeBullets.$length);o=$makeSlice(BB,h);p=$makeSlice(BL,h);q=$makeSlice(BM,h);r=b.PlayersArr;s=0;case 1:if(!(s=r.$length)?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+s]);((u<0||u>=q.$length)?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+u]=false);w=((u<0||u>=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+u]);x=((u<0||u>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+u]);y=AP(v,x,b,a);z=y[0];aa=y[1];ab=y[2];ac=y[3];if(aa){x.VelY=(w.JumpingInitVelY);((u<0||u>=q.$length)?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+u]=true);}ad=v.JoinIndex;ae=w.SkillMapper(z,v);$s=3;case 3:if($c){$c=false;ae=ae.$blk();}if(ae&&ae.$blk!==undefined){break s;}af=ae;ag=(ah=S[$Int.keyFor(af)],ah!==undefined?[ah.v,true]:[AY.nil,false]);ai=ag[0];aj=ag[1];if(aj){x.ActiveSkillId=((af>>0));x.ActiveSkillHit=0;ak=(al=ai.Hits,am=x.ActiveSkillHit,((am<0||am>=al.$length)?($throwRuntimeError("index out of range"),undefined):al.$array[al.$offset+am]));if($assertType(ak,AZ,true)[1]){an=ak.$val;t[0]=$clone(an,J);t[0].Bullet.OriginatedRenderFrameId=b.Id;t[0].Bullet.OffenderJoinIndex=ad;n=$append(n,t[0]);x.FramesToRecover=ai.RecoveryFrames;ao=false;if(!((-1===an.Bullet.SelfLockVelX))){ao=true;ap=1;if(0>x.DirX){ap=-ap;}x.VelX=$imul(ap,an.Bullet.SelfLockVelX);}if(!((-1===an.Bullet.SelfLockVelY))){ao=true;x.VelY=an.Bullet.SelfLockVelY;}if(false===ao){if(false===v.InAir){x.VelX=0;}}}x.CharacterState=ai.BoundChState;s++;$s=1;continue;}if(0===v.FramesToRecover){if(!((0===ab))||!((0===ac))){aq=ab;ar=ac;x.DirX=aq;x.DirY=ar;x.VelX=$imul(ab,v.Speed);x.CharacterState=1;}else{x.CharacterState=0;x.VelX=0;}}s++;$s=1;continue;case 2:as=$makeSlice(BO,b.PlayersArr.$length,b.PlayersArr.$length);at=b.PlayersArr;au=0;case 4:if(!(au=at.$length)?($throwRuntimeError("index out of range"),undefined):at.$array[at.$offset+au]);ax=aw.JoinIndex;ay=0;az=0;(ba=ax-1>>0,((ba<0||ba>=o.$length)?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+ba])).X=ay;(bb=ax-1>>0,((bb<0||bb>=o.$length)?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+bb])).Y=az;bc=((av<0||av>=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+av]);bd=aw.VirtualGridX+aw.VelX>>0;be=aw.VirtualGridY+aw.VelY>>0;bf=bd;bg=be;if(((av<0||av>=q.$length)?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+av])){bg=bg+(bc.JumpingInitVelY)>>0;}bh=AJ(bf,bg);bi=bh[0];bj=bh[1];bk=$imul(aw.ColliderRadius,2);bl=$imul(aw.ColliderRadius,4);bm=bk;bn=bl;bo=aw.CharacterState;if(bo===(9)){bp=$imul(aw.ColliderRadius,4);bq=$imul(aw.ColliderRadius,2);bm=bp;bn=bq;}else if((bo===(8))||(bo===(4))||(bo===(5))){br=$imul(aw.ColliderRadius,2);bs=$imul(aw.ColliderRadius,2);bm=br;bn=bs;}bt=AJ(bm,bn);bu=bt[0];bv=bt[1];bw=AR(bi,bj,bu,bv,0.1,0.1,0.1,0.1,e,f,aw,"Player");$s=6;case 6:if($c){$c=false;bw=bw.$blk();}if(bw&&bw.$blk!==undefined){break s;}bx=bw;((av<0||av>=as.$length)?($throwRuntimeError("index out of range"),undefined):as.$array[as.$offset+av]=bx);$r=c.Add(new BO([bx]));$s=7;case 7:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}by=((av<0||av>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+av]);if(aw.InAir){by.VelX=by.VelX+(0)>>0;by.VelY=by.VelY+(-50)>>0;}au++;$s=4;continue;case 5:bz=$makeSlice(BO,0,b.MeleeBullets.$length);ca=b.MeleeBullets;cb=0;case 8:if(!(cb=ca.$length)?($throwRuntimeError("index out of range"),undefined):ca.$array[ca.$offset+cb]);if(((cc.Bullet.OriginatedRenderFrameId+cc.Bullet.StartupFrames>>0)<=b.Id)&&(((cc.Bullet.OriginatedRenderFrameId+cc.Bullet.StartupFrames>>0)+cc.Bullet.ActiveFrames>>0)>b.Id)){$s=10;continue;}$s=11;continue;case 10:cf=(cd=b.PlayersArr,ce=cc.Bullet.OffenderJoinIndex-1>>0,((ce<0||ce>=cd.$length)?($throwRuntimeError("index out of range"),undefined):cd.$array[cd.$offset+ce]));cg=1;if(0>cf.DirX){cg=-cg;}ch=AJ(cf.VirtualGridX+($imul(cg,cc.Bullet.HitboxOffsetX))>>0,cf.VirtualGridY);ci=ch[0];cj=ch[1];ck=AJ(cc.Bullet.HitboxSizeX,cc.Bullet.HitboxSizeY);cl=ck[0];cm=ck[1];cn=AR(ci,cj,cl,cm,0.1,0.1,0.1,0.1,e,f,cc,"MeleeBullet");$s=13;case 13:if($c){$c=false;cn=cn.$blk();}if(cn&&cn.$blk!==undefined){break s;}co=cn;$r=c.Add(new BO([co]));$s=14;case 14:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}bz=$append(bz,co);$s=12;continue;case 11:n=$append(n,cc);case 12:cb++;$s=8;continue;case 9:cp=b.PlayersArr;cq=0;case 15:if(!(cq=cp.$length)?($throwRuntimeError("index out of range"),undefined):cp.$array[cp.$offset+cq]);ct=cs.JoinIndex;cu=((cr<0||cr>=as.$length)?($throwRuntimeError("index out of range"),undefined):as.$array[as.$offset+cr]);cv=$assertType(cu.Shape,BG);cx=AO(ct,cu,cv,0.1,(cw=ct-1>>0,((cw<0||cw>=o.$length)?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+cw])));$s=17;case 17:if($c){$c=false;cx=cx.$blk();}if(cx&&cx.$blk!==undefined){break s;}(cy=ct-1>>0,((cy<0||cy>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+cy]=cx));cz=((cr<0||cr>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+cr]);da=((cr<0||cr>=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+cr]);db=false;dc=cu.Check(0,0,new BC([]));if(!(BD.nil===dc)){$s=18;continue;}$s=19;continue;case 18:dd=dc.Objects;de=0;case 20:if(!(de=dd.$length)?($throwRuntimeError("index out of range"),undefined):dd.$array[dd.$offset+de]);dg=false;dh=false;di=false;dj=dg;dk=dh;dl=di;dm=df.Data;if($assertType(dm,BF,true)[1]){dk=true;}else if($assertType(dm,AZ,true)[1]){dl=true;}else{dj=true;}if(dl){de++;$s=20;continue;}dn=$assertType(df.Shape,BG);dq=AF(0,0,cv,dn);$s=22;case 22:if($c){$c=false;dq=dq.$blk();}if(dq&&dq.$blk!==undefined){break s;}dp=dq;dr=dp[0];ds=dp[1];dt=dp[2];du=dp[3];if(!dr){de++;$s=20;continue;}dv=du.OverlapX*0+du.OverlapY*-1;if(dk){dw=(du.Overlap-0.2)*du.OverlapX;dx=(du.Overlap-0.2)*du.OverlapY;ds=dw;dt=dx;}dy=(dz=ct-1>>0,((dz<0||dz>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+dz])).$get();ea=0;while(true){if(!(ea=dy.$length)?($throwRuntimeError("index out of range"),undefined):dy.$array[dy.$offset+ea]),C);ec=ds*eb.X+dt*eb.Y;if(dj||(dk&&0>ec)){ds=ds-(ec*eb.X);dt=dt-(ec*eb.Y);}ea++;}ed=ct-1>>0;((ed<0||ed>=o.$length)?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+ed]).X=((ed<0||ed>=o.$length)?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+ed]).X+(ds);ee=ct-1>>0;((ee<0||ee>=o.$length)?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+ee]).Y=((ee<0||ee>=o.$length)?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+ee]).Y+(dt);if(0.5=cs.VelY){cz.VelY=0;cz.VelX=0;ef=(eg=W[$Int32.keyFor(cz.CharacterState)],eg!==undefined?[eg.v,true]:[false,false]);eh=ef[1];if(eh){if(8===cz.CharacterState){cz.CharacterState=9;cz.FramesToRecover=da.LayDownFramesToRecover;}else{ei=0;ej=cs.ColliderRadius;ek=ei;el=ej;em=AJ(ek,el);en=em[1];eo=ct-1>>0;((eo<0||eo>=o.$length)?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+eo]).Y=((eo<0||eo>=o.$length)?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+eo]).Y-(en);cz.CharacterState=0;}}}else{ep=(eq=W[$Int32.keyFor(cz.CharacterState)],eq!==undefined?[eq.v,true]:[false,false]);er=ep[1];if(er){if(9===cz.CharacterState){if(0===cz.FramesToRecover){cz.CharacterState=10;cz.FramesToRecover=da.GetUpFramesToRecover;}}else if(10===cz.CharacterState){if(0===cz.FramesToRecover){cz.CharacterState=0;cz.FramesInvinsible=da.GetUpInvinsibleFrames;}}}}}cq++;$s=15;continue;case 16:es=bz;et=0;case 23:if(!(et=es.$length)?($throwRuntimeError("index out of range"),undefined):es.$array[es.$offset+et]);ev=eu.Check(0,0,new BC([]));eu.Space.Remove(new BO([eu]));ew=eu.Data;if($assertType(ew,AZ,true)[1]){$s=25;continue;}$s=26;continue;case 25:ex=ew.$val;if(BD.nil===ev){n=$append(n,ex);et++;$s=23;continue;}ey=$assertType(eu.Shape,BG);fb=(ez=b.PlayersArr,fa=ex.Bullet.OffenderJoinIndex-1>>0,((fa<0||fa>=ez.$length)?($throwRuntimeError("index out of range"),undefined):ez.$array[ez.$offset+fa]));fc=ev.Objects;fd=0;case 27:if(!(fd=fc.$length)?($throwRuntimeError("index out of range"),undefined):fc.$array[fc.$offset+fd]);ff=$assertType(fe.Shape,BG);fg=fe.Data;if($assertType(fg,BF,true)[1]){$s=29;continue;}$s=30;continue;case 29:fh=fg.$val;if(ex.Bullet.OffenderJoinIndex===fh.JoinIndex){fd++;$s=27;continue;}fj=(fk=V[$Int32.keyFor(fh.CharacterState)],fk!==undefined?[fk.v,true]:[false,false]);fl=fj[1];if(fl){fd++;$s=27;continue;}if(0fb.DirX){fp=-fp;}fq=$imul(fp,ex.Bullet.PushbackVelX);fr=ex.Bullet.PushbackVelY;fs=fq;ft=fr;fv=(fu=fh.JoinIndex-1>>0,((fu<0||fu>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+fu]));fv.VelX=fs;fv.VelY=ft;if(ex.Bullet.BlowUp){fv.CharacterState=8;}else{fv.CharacterState=3;}fx=(fw=fh.JoinIndex-1>>0,((fw<0||fw>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+fw])).FramesToRecover;if(ex.Bullet.HitStunFrames>fx){fv.FramesToRecover=ex.Bullet.HitStunFrames;}$s=31;continue;case 30:fi=fg;case 31:fd++;$s=27;continue;case 28:case 26:et++;$s=23;continue;case 24:fy=b.PlayersArr;fz=0;while(true){if(!(fz=fy.$length)?($throwRuntimeError("index out of range"),undefined):fy.$array[fy.$offset+fz]);gc=gb.JoinIndex;gd=((ga<0||ga>=as.$length)?($throwRuntimeError("index out of range"),undefined):as.$array[as.$offset+ga]);ge=((ga<0||ga>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+ga]);gf=AM(gd.X-(gg=gc-1>>0,((gg<0||gg>=o.$length)?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+gg])).X,gd.Y-(gh=gc-1>>0,((gh<0||gh>=o.$length)?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+gh])).Y,gd.W*0.5,gd.H*0.5,0,0,0,0,e,f);ge.VirtualGridX=gf[0];ge.VirtualGridY=gf[1];if(ge.InAir){gi=ge.CharacterState;gj=gi;if((gj===(0))||(gj===(1))){if(((ga<0||ga>=q.$length)?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+ga])||(5===gb.CharacterState)){ge.CharacterState=5;}else{ge.CharacterState=4;}}else if(gj===(2)){ge.CharacterState=6;}else if(gj===(3)){ge.CharacterState=7;}}if(!((ge.CharacterState===gb.CharacterState))){ge.FramesInChState=0;}gk=(gl=W[$Int32.keyFor(ge.CharacterState)],gl!==undefined?[gl.v,true]:[false,false]);gm=gk[1];if(gm){ge.ActiveSkillId=-1;ge.ActiveSkillHit=-1;}fz++;}gn=as;go=0;while(true){if(!(go=gn.$length)?($throwRuntimeError("index out of range"),undefined):gn.$array[gn.$offset+go]);gp.Space.Remove(new BO([gp]));go++;}$s=-1;return new M.ptr(b.Id+1>>0,i,new $Int64(0,0),n,BQ.nil,new $Uint64(0,0),false,false);}return;}var $f={$blk:AQ,$c:true,$r,a,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az,b,ba,bb,bc,bd,be,bf,bg,bh,bi,bj,bk,bl,bm,bn,bo,bp,bq,br,bs,bt,bu,bv,bw,bx,by,bz,c,ca,cb,cc,cd,ce,cf,cg,ch,ci,cj,ck,cl,cm,cn,co,cp,cq,cr,cs,ct,cu,cv,cw,cx,cy,cz,d,da,db,dc,dd,de,df,dg,dh,di,dj,dk,dl,dm,dn,dp,dq,dr,ds,dt,du,dv,dw,dx,dy,dz,e,ea,eb,ec,ed,ee,ef,eg,eh,ei,ej,ek,el,em,en,eo,ep,eq,er,es,et,eu,ev,ew,ex,ey,ez,f,fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn,fo,fp,fq,fr,fs,ft,fu,fv,fw,fx,fy,fz,g,ga,gb,gc,gd,ge,gf,gg,gh,gi,gj,gk,gl,gm,gn,go,gp,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,$s};return $f;};$pkg.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame=AQ;AR=function(a,b,c,d,e,f,g,h,i,j,k,l){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,$s,$r,$c}=$restore(this,{a,b,c,d,e,f,g,h,i,j,k,l});$s=$s||0;s:while(true){switch($s){case 0:m=AK(a,b,c*0.5,d*0.5,e,f,g,h,i,j);n=m[0];o=m[1];p=AS(n,o,g+c+h,f+d+e,k,l);$s=1;case 1:if($c){$c=false;p=p.$blk();}if(p&&p.$blk!==undefined){break s;}q=p;$s=2;case 2:return q;}return;}var $f={$blk:AR,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,$s};return $f;};$pkg.GenerateRectCollider=AR;AS=function(a,b,c,d,e,f){var{a,b,c,d,e,f,g,h,$s,$r,$c}=$restore(this,{a,b,c,d,e,f});$s=$s||0;s:while(true){switch($s){case 0:g=B.NewObject(a,b,c,d,new BC([f]));h=B.NewRectangle(0,0,c,d);$r=g.SetShape(h);$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}g.Data=e;$s=-1;return g;}return;}var $f={$blk:AS,$c:true,$r,a,b,c,d,e,f,g,h,$s};return $f;};AT=function(a,b,c,d,e){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,$s,$r,$c}=$restore(this,{a,b,c,d,e});$s=$s||0;s:while(true){switch($s){case 0:f=AU(a);g=0;h=0;i=g;j=h;k=B.NewConvexPolygon(BR.nil);l=f.Points;m=0;while(true){if(!(m=l.$length)?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+m]);p=f.Points;q=0;while(true){if(!(q=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+q]);if(n===r){q++;continue;}if(A.Abs(s.X-o.X)>i){i=A.Abs(s.X-o.X);}if(A.Abs(s.Y-o.Y)>j){j=A.Abs(s.Y-o.Y);}q++;}m++;}t=0;while(true){if(!(t=u.$length)?($throwRuntimeError("index out of range"),undefined):u.$array[u.$offset+t]));k.AddPoints(new BR([v.X,v.Y]));t=t+(1)>>0;}w=B.NewObject(f.Anchor.X+b,f.Anchor.Y+c,i,j,new BC([e]));$r=w.SetShape(k);$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}w.Data=d;$s=-1;return w;}return;}var $f={$blk:AT,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,$s};return $f;};$pkg.GenerateConvexPolygonCollider=AT;AU=function(a){var a,b,c,d,e,f,g,h,i,j,k;b=new C.ptr(1.7e+308,1.7e+308);c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(e.X=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+h]);(k=f.Points,((i<0||i>=k.$length)?($throwRuntimeError("index out of range"),undefined):k.$array[k.$offset+i]=new C.ptr(j.X-b.X,j.Y-b.Y)));h++;}return f;};$pkg.AlignPolygon2DToBoundingBox=AU;BW.methods=[{prop:"Put",name:"Put",pkg:"",typ:$funcType([$emptyInterface],[],false)},{prop:"Pop",name:"Pop",pkg:"",typ:$funcType([],[$emptyInterface],false)},{prop:"GetArrIdxByOffset",name:"GetArrIdxByOffset",pkg:"",typ:$funcType([$Int32],[$Int32],false)},{prop:"GetByOffset",name:"GetByOffset",pkg:"",typ:$funcType([$Int32],[$emptyInterface],false)},{prop:"GetByFrameId",name:"GetByFrameId",pkg:"",typ:$funcType([$Int32],[$emptyInterface],false)},{prop:"SetByFrameId",name:"SetByFrameId",pkg:"",typ:$funcType([$emptyInterface,$Int32],[$Int32,$Int32,$Int32],false)}];C.init("",[{prop:"X",name:"X",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Y",name:"Y",embedded:false,exported:true,typ:$Float64,tag:""}]);D.init("",[{prop:"Anchor",name:"Anchor",embedded:false,exported:true,typ:BS,tag:""},{prop:"Points",name:"Points",embedded:false,exported:true,typ:BT,tag:""}]);E.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:""},{prop:"FramesInvinsible",name:"FramesInvinsible",embedded:false,exported:true,typ:$Int32,tag:""}]);F.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:""}]);H.init("",[{prop:"Boundary",name:"Boundary",embedded:false,exported:true,typ:BU,tag:""}]);I.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:BV,tag:""}]);J.init("",[{prop:"Bullet",name:"Bullet",embedded:true,exported:true,typ:I,tag:""}]);K.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:I,tag:""}]);L.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:AX,tag:""}]);M.init("",[{prop:"Id",name:"Id",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"PlayersArr",name:"PlayersArr",embedded:false,exported:true,typ:BJ,tag:""},{prop:"CountdownNanos",name:"CountdownNanos",embedded:false,exported:true,typ:$Int64,tag:""},{prop:"MeleeBullets",name:"MeleeBullets",embedded:false,exported:true,typ:BK,tag:""},{prop:"FireballBullets",name:"FireballBullets",embedded:false,exported:true,typ:BQ,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:BV,tag:""}]);N.init("",[{prop:"InputFrameId",name:"InputFrameId",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"InputList",name:"InputList",embedded:false,exported:true,typ:BI,tag:""},{prop:"ConfirmedList",name:"ConfirmedList",embedded:false,exported:true,typ:$Uint64,tag:""}]);O.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:AX,tag:""}]);Q.init([$Int,BF],[$Int],false);R.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:"GetUpInvinsibleFrames",name:"GetUpInvinsibleFrames",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"GetUpFramesToRecover",name:"GetUpFramesToRecover",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Speed",name:"Speed",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:Q,tag:""}]);AE.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:B.Vector,tag:""}]);$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:$r=A.$init();$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}$r=B.$init();$s=2;case 2:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}$pkg.DIRECTION_DECODER=new AW([new AV([0,0]),new AV([0,2]),new AV([0,-2]),new AV([2,0]),new AV([-2,0]),new AV([1,1]),new AV([-1,-1]),new AV([1,-1]),new AV([-1,1])]);S=$makeMap($Int.keyFor,[{k:1,v:new L.ptr(0,30,30,30,1,2,new AX([new J.ptr(new I.ptr(0,0,7,13,30,22,13,9,50,0,5,5,-1,1200,0,2400,3200,false,$makeMap($Int.keyFor,[{k:1,v:2}])))]))},{k:2,v:new L.ptr(0,36,36,36,1,11,new AX([new J.ptr(new I.ptr(0,0,18,22,36,18,18,9,50,0,5,10,-1,1800,0,2400,3200,false,$makeMap($Int.keyFor,[{k:1,v:3}])))]))},{k:3,v:new L.ptr(0,50,50,50,1,12,new AX([new J.ptr(new I.ptr(0,0,15,0,0,30,999999999,9,200,700,10,50,500,3200,0,4800,3200,true,false))]))},{k:4,v:new L.ptr(0,30,30,30,1,2,new AX([new J.ptr(new I.ptr(0,0,7,13,30,22,13,9,50,0,5,5,-1,1200,0,2400,3200,false,$makeMap($Int.keyFor,[{k:1,v:5}])))]))},{k:5,v:new L.ptr(0,36,36,36,1,11,new AX([new J.ptr(new I.ptr(0,0,18,22,36,18,18,9,50,0,5,10,-1,1800,0,2400,3200,false,$makeMap($Int.keyFor,[{k:1,v:6}])))]))},{k:6,v:new L.ptr(0,45,45,45,1,12,new AX([new J.ptr(new I.ptr(0,0,15,0,0,28,999999999,9,200,700,10,-10,-1,2400,0,3200,3200,true,false))]))},{k:255,v:new L.ptr(0,30,30,30,1,6,new AX([new J.ptr(new I.ptr(0,0,3,0,0,20,18,9,50,0,5,-1,-1,1200,0,3200,2400,false,false))]))},{k:256,v:new L.ptr(0,20,20,20,1,6,new AX([new J.ptr(new I.ptr(0,0,3,0,0,10,15,9,50,0,5,-1,-1,1200,0,3200,2400,false,false))]))}]);$pkg.Characters=$makeMap($Int.keyFor,[{k:0,v:new R.ptr(0,"MonkGirl",11,1,16,16,10,27,120,800,(function(a,b){var a,b,c,d,e,f,g,h,i,j,k,l,m,n;if(1===a){if(0===b.FramesToRecover){if(b.InAir){return 255;}else{return 1;}}else{c=(d=S[$Int.keyFor(((b.ActiveSkillId>>0)))],d!==undefined?[d.v,true]:[AY.nil,false]);e=c[0];f=c[1];if(f){g=(h=e.Hits,i=b.ActiveSkillHit,((i<0||i>=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+i]));if($assertType(g,AZ,true)[1]){j=g.$val;if(j.Bullet.CancellableStFrame<=b.FramesInChState&&b.FramesInChState>0)))],d!==undefined?[d.v,true]:[AY.nil,false]);e=c[0];f=c[1];if(f){g=(h=e.Hits,i=b.ActiveSkillHit,((i<0||i>=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+i]));if($assertType(g,AZ,true)[1]){j=g.$val;if(j.Bullet.CancellableStFrame<=b.FramesInChState&&b.FramesInChState=d.$length)?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+e]);g=A.MakeFullWrapper(f);$s=3;case 3:if($c){$c=false;g=g.$blk();}if(g&&g.$blk!==undefined){break s;}c=$append(c,g);e++;$s=1;continue;case 2:$s=-1;return c;}return;}var $f={$blk:M,$c:true,$r,a,b,c,d,e,f,g,$s};return $f;};$pkg.GetCollisionSpaceObjsJs=M;N=function(a,b,c,d,e,f,g,h){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,$s,$r,$c}=$restore(this,{a,b,c,d,e,f,g,h});$s=$s||0;s:while(true){switch($s){case 0:i=0.1;j=0.1;k=0.1;l=0.1;m=i;n=j;o=k;p=l;q=B.GenerateRectCollider(a,b,c,d,m,n,o,p,e,f,g,h);$s=1;case 1:if($c){$c=false;q=q.$blk();}if(q&&q.$blk!==undefined){break s;}r=A.MakeFullWrapper(q);$s=2;case 2:if($c){$c=false;r=r.$blk();}if(r&&r.$blk!==undefined){break s;}s=r;$s=3;case 3:return s;}return;}var $f={$blk:N,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,$s};return $f;};$pkg.GenerateRectColliderJs=N;O=function(a,b,c,d,e){var{a,b,c,d,e,f,g,h,$s,$r,$c}=$restore(this,{a,b,c,d,e});$s=$s||0;s:while(true){switch($s){case 0:f=B.GenerateConvexPolygonCollider(a,b,c,d,e);$s=1;case 1:if($c){$c=false;f=f.$blk();}if(f&&f.$blk!==undefined){break s;}g=A.MakeFullWrapper(f);$s=2;case 2:if($c){$c=false;g=g.$blk();}if(g&&g.$blk!==undefined){break s;}h=g;$s=3;case 3:return h;}return;}var $f={$blk:O,$c:true,$r,a,b,c,d,e,f,g,h,$s};return $f;};$pkg.GenerateConvexPolygonColliderJs=O;P=function(a){var{a,b,c,d,e,f,g,h,$s,$r,$c}=$restore(this,{a});$s=$s||0;s:while(true){switch($s){case 0:b=$makeSlice(AD,a.$length,a.$length);c=a;d=0;case 1:if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);h=A.MakeFullWrapper((g=B.Characters[$Int.keyFor(f)],g!==undefined?g.v:AE.nil));$s=3;case 3:if($c){$c=false;h=h.$blk();}if(h&&h.$blk!==undefined){break s;}((e<0||e>=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+e]=h);d++;$s=1;continue;case 2:$s=-1;return b;}return;}var $f={$blk:P,$c:true,$r,a,b,c,d,e,f,g,h,$s};return $f;};$pkg.GetCharacterConfigsOrderedByJoinIndex=P;Q=function(a,b,c,d,e,f,g){var{a,b,c,d,e,f,g,h,i,j,$s,$r,$c}=$restore(this,{a,b,c,d,e,f,g});$s=$s||0;s:while(true){switch($s){case 0:h=B.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(a,b,c,d,e,f,g);$s=1;case 1:if($c){$c=false;h=h.$blk();}if(h&&h.$blk!==undefined){break s;}i=A.MakeFullWrapper(h);$s=2;case 2:if($c){$c=false;i=i.$blk();}if(i&&i.$blk!==undefined){break s;}j=i;$s=3;case 3:return j;}return;}var $f={$blk:Q,$c:true,$r,a,b,c,d,e,f,g,h,i,j,$s};return $f;};$pkg.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs=Q;R=function(){$global.gopkgs=$externalize($makeMap($String.keyFor,[{k:"NewVec2DJs",v:new AF(G)},{k:"NewPolygon2DJs",v:new AG(H)},{k:"NewBarrierJs",v:new AH(I)},{k:"NewPlayerDownsyncJs",v:new AI(J)},{k:"NewMeleeBulletJs",v:new AJ(K)},{k:"NewRoomDownsyncFrameJs",v:new AK(L)},{k:"NewCollisionSpaceJs",v:new AL(F)},{k:"NewInputFrameDownsync",v:new AM(D)},{k:"NewRingBufferJs",v:new AN(E)},{k:"GenerateRectColliderJs",v:new AO(N)},{k:"GenerateConvexPolygonColliderJs",v:new AP(O)},{k:"GetCollisionSpaceObjsJs",v:new AR(M)},{k:"WorldToPolygonColliderBLPos",v:new AS(B.WorldToPolygonColliderBLPos)},{k:"PolygonColliderBLToWorldPos",v:new AS(B.PolygonColliderBLToWorldPos)},{k:"WorldToVirtualGridPos",v:new AT(B.WorldToVirtualGridPos)},{k:"VirtualGridToWorldPos",v:new AU(B.VirtualGridToWorldPos)},{k:"GetCharacterConfigsOrderedByJoinIndex",v:new AW(P)},{k:"ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs",v:new BC(Q)},{k:"ConvertToDelayedInputFrameId",v:new BD(B.ConvertToDelayedInputFrameId)},{k:"ConvertToNoDelayInputFrameId",v:new BD(B.ConvertToNoDelayInputFrameId)},{k:"ConvertToFirstUsedRenderFrameId",v:new BD(B.ConvertToFirstUsedRenderFrameId)},{k:"ConvertToLastUsedRenderFrameId",v:new BD(B.ConvertToLastUsedRenderFrameId)},{k:"ShouldGenerateInputFrameUpsync",v:new BE(B.ShouldGenerateInputFrameUpsync)}]),BF);};$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:$r=A.$init();$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}$r=B.$init();$s=2;case 2:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}$r=C.$init();$s=3;case 3:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}if($pkg===$mainPkg){R();$mainFinished=true;}}return;}if($f===undefined){$f={$blk:$init};}$f.$s=$s;$f.$r=$r;return $f;};$pkg.$init=$init;return $pkg;})(); +$packages["jsexport/battle"]=(function(){var $pkg={},$init,A,B,C,D,E,F,H,I,J,K,L,M,N,O,P,R,S,AF,AW,AX,AY,AZ,BA,BB,BC,BD,BE,BF,BG,BH,BI,BJ,BK,BL,BM,BN,BO,BP,BQ,BR,BS,BT,BU,BV,BW,BX,T,U,V,W,X,Q,Z,AA,AB,AC,AD,AE,AG,AH,AI,AJ,AK,AL,AM,AN,AP,AQ,AR,AS,AT,AU,AV;A=$packages["math"];B=$packages["resolv"];C=$pkg.Vec2D=$newType(0,$kindStruct,"battle.Vec2D",true,"jsexport/battle",true,function(X_,Y_){this.$val=this;if(arguments.length===0){this.X=0;this.Y=0;return;}this.X=X_;this.Y=Y_;});D=$pkg.Polygon2D=$newType(0,$kindStruct,"battle.Polygon2D",true,"jsexport/battle",true,function(Anchor_,Points_){this.$val=this;if(arguments.length===0){this.Anchor=BT.nil;this.Points=BU.nil;return;}this.Anchor=Anchor_;this.Points=Points_;});E=$pkg.PlayerDownsync=$newType(0,$kindStruct,"battle.PlayerDownsync",true,"jsexport/battle",true,function(Id_,VirtualGridX_,VirtualGridY_,DirX_,DirY_,VelX_,VelY_,Speed_,BattleState_,JoinIndex_,ColliderRadius_,Removed_,Score_,LastMoveGmtMillis_,FramesToRecover_,FramesInChState_,Hp_,MaxHp_,CharacterState_,InAir_,ActiveSkillId_,ActiveSkillHit_,FramesInvinsible_,BulletTeamId_,ChCollisionTeamId_){this.$val=this;if(arguments.length===0){this.Id=0;this.VirtualGridX=0;this.VirtualGridY=0;this.DirX=0;this.DirY=0;this.VelX=0;this.VelY=0;this.Speed=0;this.BattleState=0;this.JoinIndex=0;this.ColliderRadius=0;this.Removed=false;this.Score=0;this.LastMoveGmtMillis=0;this.FramesToRecover=0;this.FramesInChState=0;this.Hp=0;this.MaxHp=0;this.CharacterState=0;this.InAir=false;this.ActiveSkillId=0;this.ActiveSkillHit=0;this.FramesInvinsible=0;this.BulletTeamId=0;this.ChCollisionTeamId=0;return;}this.Id=Id_;this.VirtualGridX=VirtualGridX_;this.VirtualGridY=VirtualGridY_;this.DirX=DirX_;this.DirY=DirY_;this.VelX=VelX_;this.VelY=VelY_;this.Speed=Speed_;this.BattleState=BattleState_;this.JoinIndex=JoinIndex_;this.ColliderRadius=ColliderRadius_;this.Removed=Removed_;this.Score=Score_;this.LastMoveGmtMillis=LastMoveGmtMillis_;this.FramesToRecover=FramesToRecover_;this.FramesInChState=FramesInChState_;this.Hp=Hp_;this.MaxHp=MaxHp_;this.CharacterState=CharacterState_;this.InAir=InAir_;this.ActiveSkillId=ActiveSkillId_;this.ActiveSkillHit=ActiveSkillHit_;this.FramesInvinsible=FramesInvinsible_;this.BulletTeamId=BulletTeamId_;this.ChCollisionTeamId=ChCollisionTeamId_;});F=$pkg.InputFrameDecoded=$newType(0,$kindStruct,"battle.InputFrameDecoded",true,"jsexport/battle",true,function(Dx_,Dy_,BtnALevel_,BtnBLevel_){this.$val=this;if(arguments.length===0){this.Dx=0;this.Dy=0;this.BtnALevel=0;this.BtnBLevel=0;return;}this.Dx=Dx_;this.Dy=Dy_;this.BtnALevel=BtnALevel_;this.BtnBLevel=BtnBLevel_;});H=$pkg.Barrier=$newType(0,$kindStruct,"battle.Barrier",true,"jsexport/battle",true,function(Boundary_){this.$val=this;if(arguments.length===0){this.Boundary=BV.nil;return;}this.Boundary=Boundary_;});I=$pkg.Bullet=$newType(0,$kindStruct,"battle.Bullet",true,"jsexport/battle",true,function(BulletLocalId_,OriginatedRenderFrameId_,OffenderJoinIndex_,StartupFrames_,CancellableStFrame_,CancellableEdFrame_,ActiveFrames_,HitStunFrames_,BlockStunFrames_,PushbackVelX_,PushbackVelY_,Damage_,SelfLockVelX_,SelfLockVelY_,HitboxOffsetX_,HitboxOffsetY_,HitboxSizeX_,HitboxSizeY_,BlowUp_,CancelTransit_,TeamId_){this.$val=this;if(arguments.length===0){this.BulletLocalId=0;this.OriginatedRenderFrameId=0;this.OffenderJoinIndex=0;this.StartupFrames=0;this.CancellableStFrame=0;this.CancellableEdFrame=0;this.ActiveFrames=0;this.HitStunFrames=0;this.BlockStunFrames=0;this.PushbackVelX=0;this.PushbackVelY=0;this.Damage=0;this.SelfLockVelX=0;this.SelfLockVelY=0;this.HitboxOffsetX=0;this.HitboxOffsetY=0;this.HitboxSizeX=0;this.HitboxSizeY=0;this.BlowUp=false;this.CancelTransit=false;this.TeamId=0;return;}this.BulletLocalId=BulletLocalId_;this.OriginatedRenderFrameId=OriginatedRenderFrameId_;this.OffenderJoinIndex=OffenderJoinIndex_;this.StartupFrames=StartupFrames_;this.CancellableStFrame=CancellableStFrame_;this.CancellableEdFrame=CancellableEdFrame_;this.ActiveFrames=ActiveFrames_;this.HitStunFrames=HitStunFrames_;this.BlockStunFrames=BlockStunFrames_;this.PushbackVelX=PushbackVelX_;this.PushbackVelY=PushbackVelY_;this.Damage=Damage_;this.SelfLockVelX=SelfLockVelX_;this.SelfLockVelY=SelfLockVelY_;this.HitboxOffsetX=HitboxOffsetX_;this.HitboxOffsetY=HitboxOffsetY_;this.HitboxSizeX=HitboxSizeX_;this.HitboxSizeY=HitboxSizeY_;this.BlowUp=BlowUp_;this.CancelTransit=CancelTransit_;this.TeamId=TeamId_;});J=$pkg.MeleeBullet=$newType(0,$kindStruct,"battle.MeleeBullet",true,"jsexport/battle",true,function(Bullet_){this.$val=this;if(arguments.length===0){this.Bullet=new I.ptr(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,false,false,0);return;}this.Bullet=Bullet_;});K=$pkg.FireballBullet=$newType(0,$kindStruct,"battle.FireballBullet",true,"jsexport/battle",true,function(VirtualGridX_,VirtualGridY_,DirX_,DirY_,VelX_,VelY_,Speed_,Bullet_){this.$val=this;if(arguments.length===0){this.VirtualGridX=0;this.VirtualGridY=0;this.DirX=0;this.DirY=0;this.VelX=0;this.VelY=0;this.Speed=0;this.Bullet=new I.ptr(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,false,false,0);return;}this.VirtualGridX=VirtualGridX_;this.VirtualGridY=VirtualGridY_;this.DirX=DirX_;this.DirY=DirY_;this.VelX=VelX_;this.VelY=VelY_;this.Speed=Speed_;this.Bullet=Bullet_;});L=$pkg.Skill=$newType(0,$kindStruct,"battle.Skill",true,"jsexport/battle",true,function(BattleLocalId_,RecoveryFrames_,RecoveryFramesOnBlock_,RecoveryFramesOnHit_,ReleaseTriggerType_,BoundChState_,Hits_){this.$val=this;if(arguments.length===0){this.BattleLocalId=0;this.RecoveryFrames=0;this.RecoveryFramesOnBlock=0;this.RecoveryFramesOnHit=0;this.ReleaseTriggerType=0;this.BoundChState=0;this.Hits=AY.nil;return;}this.BattleLocalId=BattleLocalId_;this.RecoveryFrames=RecoveryFrames_;this.RecoveryFramesOnBlock=RecoveryFramesOnBlock_;this.RecoveryFramesOnHit=RecoveryFramesOnHit_;this.ReleaseTriggerType=ReleaseTriggerType_;this.BoundChState=BoundChState_;this.Hits=Hits_;});M=$pkg.RoomDownsyncFrame=$newType(0,$kindStruct,"battle.RoomDownsyncFrame",true,"jsexport/battle",true,function(Id_,PlayersArr_,CountdownNanos_,MeleeBullets_,FireballBullets_,BackendUnconfirmedMask_,ShouldForceResync_,BulletLocalIdCounter_){this.$val=this;if(arguments.length===0){this.Id=0;this.PlayersArr=BL.nil;this.CountdownNanos=new $Int64(0,0);this.MeleeBullets=BM.nil;this.FireballBullets=BN.nil;this.BackendUnconfirmedMask=new $Uint64(0,0);this.ShouldForceResync=false;this.BulletLocalIdCounter=0;return;}this.Id=Id_;this.PlayersArr=PlayersArr_;this.CountdownNanos=CountdownNanos_;this.MeleeBullets=MeleeBullets_;this.FireballBullets=FireballBullets_;this.BackendUnconfirmedMask=BackendUnconfirmedMask_;this.ShouldForceResync=ShouldForceResync_;this.BulletLocalIdCounter=BulletLocalIdCounter_;});N=$pkg.InputFrameDownsync=$newType(0,$kindStruct,"battle.InputFrameDownsync",true,"jsexport/battle",true,function(InputFrameId_,InputList_,ConfirmedList_){this.$val=this;if(arguments.length===0){this.InputFrameId=0;this.InputList=BK.nil;this.ConfirmedList=new $Uint64(0,0);return;}this.InputFrameId=InputFrameId_;this.InputList=InputList_;this.ConfirmedList=ConfirmedList_;});O=$pkg.NpcPatrolCue=$newType(0,$kindStruct,"battle.NpcPatrolCue",true,"jsexport/battle",true,function(FlAct_,FrAct_,X_,Y_){this.$val=this;if(arguments.length===0){this.FlAct=new $Uint64(0,0);this.FrAct=new $Uint64(0,0);this.X=0;this.Y=0;return;}this.FlAct=FlAct_;this.FrAct=FrAct_;this.X=X_;this.Y=Y_;});P=$pkg.RingBuffer=$newType(0,$kindStruct,"battle.RingBuffer",true,"jsexport/battle",true,function(Ed_,St_,EdFrameId_,StFrameId_,N_,Cnt_,Eles_){this.$val=this;if(arguments.length===0){this.Ed=0;this.St=0;this.EdFrameId=0;this.StFrameId=0;this.N=0;this.Cnt=0;this.Eles=AY.nil;return;}this.Ed=Ed_;this.St=St_;this.EdFrameId=EdFrameId_;this.StFrameId=StFrameId_;this.N=N_;this.Cnt=Cnt_;this.Eles=Eles_;});R=$pkg.SkillMapperType=$newType(4,$kindFunc,"battle.SkillMapperType",true,"jsexport/battle",true,null);S=$pkg.CharacterConfig=$newType(0,$kindStruct,"battle.CharacterConfig",true,"jsexport/battle",true,function(SpeciesId_,SpeciesName_,InAirIdleFrameIdxTurningPoint_,InAirIdleFrameIdxTurnedCycle_,LayDownFrames_,LayDownFramesToRecover_,GetUpInvinsibleFrames_,GetUpFramesToRecover_,Speed_,JumpingInitVelY_,SkillMapper_){this.$val=this;if(arguments.length===0){this.SpeciesId=0;this.SpeciesName="";this.InAirIdleFrameIdxTurningPoint=0;this.InAirIdleFrameIdxTurnedCycle=0;this.LayDownFrames=0;this.LayDownFramesToRecover=0;this.GetUpInvinsibleFrames=0;this.GetUpFramesToRecover=0;this.Speed=0;this.JumpingInitVelY=0;this.SkillMapper=$throwNilPointerError;return;}this.SpeciesId=SpeciesId_;this.SpeciesName=SpeciesName_;this.InAirIdleFrameIdxTurningPoint=InAirIdleFrameIdxTurningPoint_;this.InAirIdleFrameIdxTurnedCycle=InAirIdleFrameIdxTurnedCycle_;this.LayDownFrames=LayDownFrames_;this.LayDownFramesToRecover=LayDownFramesToRecover_;this.GetUpInvinsibleFrames=GetUpInvinsibleFrames_;this.GetUpFramesToRecover=GetUpFramesToRecover_;this.Speed=Speed_;this.JumpingInitVelY=JumpingInitVelY_;this.SkillMapper=SkillMapper_;});AF=$pkg.SatResult=$newType(0,$kindStruct,"battle.SatResult",true,"jsexport/battle",true,function(Overlap_,OverlapX_,OverlapY_,AContainedInB_,BContainedInA_,Axis_){this.$val=this;if(arguments.length===0){this.Overlap=0;this.OverlapX=0;this.OverlapY=0;this.AContainedInB=false;this.BContainedInA=false;this.Axis=B.Vector.nil;return;}this.Overlap=Overlap_;this.OverlapX=OverlapX_;this.OverlapY=OverlapY_;this.AContainedInB=AContainedInB_;this.BContainedInA=BContainedInA_;this.Axis=Axis_;});AW=$sliceType($Int32);AX=$sliceType(AW);AY=$sliceType($emptyInterface);AZ=$ptrType(L);BA=$ptrType(J);BB=$ptrType(AF);BC=$sliceType(C);BD=$sliceType($String);BE=$ptrType(B.Collision);BF=$ptrType(BC);BG=$ptrType(E);BH=$ptrType(K);BI=$ptrType(B.ConvexPolygon);BJ=$ptrType(N);BK=$sliceType($Uint64);BL=$sliceType(BG);BM=$sliceType(BA);BN=$sliceType(BH);BO=$sliceType(BF);BP=$sliceType($Bool);BQ=$ptrType(B.Object);BR=$sliceType(BQ);BS=$sliceType($Float64);BT=$ptrType(C);BU=$sliceType(BT);BV=$ptrType(D);BW=$mapType($Int,$Int);BX=$ptrType(P);Q=function(a){var a;return new P.ptr(0,0,0,0,a,0,$makeSlice(AY,a));};$pkg.NewRingBuffer=Q;P.ptr.prototype.Put=function(a){var a,b,c,d;b=this;while(true){if(!(0=b.N)){break;}b.Pop();}(c=b.Eles,d=b.Ed,((d<0||d>=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]=a));b.EdFrameId=b.EdFrameId+(1)>>0;b.Cnt=b.Cnt+(1)>>0;b.Ed=b.Ed+(1)>>0;if(b.Ed>=b.N){b.Ed=b.Ed-(b.N)>>0;}};P.prototype.Put=function(a){return this.$val.Put(a);};P.ptr.prototype.Pop=function(){var a,b,c,d;a=this;if(0===a.Cnt){return $ifaceNil;}d=(b=a.Eles,c=a.St,((c<0||c>=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+c]));a.StFrameId=a.StFrameId+(1)>>0;a.Cnt=a.Cnt-(1)>>0;a.St=a.St+(1)>>0;if(a.St>=a.N){a.St=a.St-(a.N)>>0;}return d;};P.prototype.Pop=function(){return this.$val.Pop();};P.ptr.prototype.GetArrIdxByOffset=function(a){var a,b,c;b=this;if((0===b.Cnt)||0>a){return-1;}c=b.St+a>>0;if(b.St=b.N){c=c-(b.N)>>0;}if(c>=b.St||c=d.$length)?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+c]));};P.prototype.GetByOffset=function(a){return this.$val.GetByOffset(a);};P.ptr.prototype.GetByFrameId=function(a){var a,b;b=this;if(a>=b.EdFrameId||a>0);};P.prototype.GetByFrameId=function(a){return this.$val.GetByFrameId(a);};P.ptr.prototype.SetByFrameId=function(a,b){var a,b,c,d,e,f,g,h,i,j,k,l,m,n;c=this;d=c.StFrameId;e=c.EdFrameId;f=d;g=e;if(bb){h=c.GetArrIdxByOffset(b-c.StFrameId>>0);if(!((-1===h))){(i=c.Eles,((h<0||h>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+h]=a));return[0,f,g];}}j=0;if(g>0))>>2>>0);};$pkg.ConvertToDelayedInputFrameId=AA;AB=function(a){var a;return(a>>2>>0);};$pkg.ConvertToNoDelayInputFrameId=AB;AC=function(a){var a;return(((a<<2>>0))+8>>0);};$pkg.ConvertToFirstUsedRenderFrameId=AC;AD=function(a){var a;return(((((a<<2>>0))+8>>0)+4>>0)-1>>0);};$pkg.ConvertToLastUsedRenderFrameId=AD;AE=function(a){var a,b,c,d,e,f,g,h;b=new $Uint64(a.$high&0,(a.$low&15)>>>0);d=(((c=$shiftRightUint64(a,4),new $Uint64(c.$high&0,(c.$low&1)>>>0)).$low>>0));f=(((e=$shiftRightUint64(a,5),new $Uint64(e.$high&0,(e.$low&1)>>>0)).$low>>0));return new F.ptr((g=(($flatten64(b)<0||$flatten64(b)>=$pkg.DIRECTION_DECODER.$length)?($throwRuntimeError("index out of range"),undefined):$pkg.DIRECTION_DECODER.$array[$pkg.DIRECTION_DECODER.$offset+$flatten64(b)]),(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0])),(h=(($flatten64(b)<0||$flatten64(b)>=$pkg.DIRECTION_DECODER.$length)?($throwRuntimeError("index out of range"),undefined):$pkg.DIRECTION_DECODER.$array[$pkg.DIRECTION_DECODER.$offset+$flatten64(b)]),(1>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+1])),d,f);};AG=function(a,b,c,d){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,$s,$deferred,$r,$c}=$restore(this,{a,b,c,d});$s=$s||0;var $err=null;try{s:while(true){switch($s){case 0:$deferred=[];$curGoroutine.deferStack.push($deferred);c=[c];e=[e];f=[f];g=c[0].Position();e[0]=g[0];f[0]=g[1];$deferred.push([(function(c,e,f){return function(){c[0].SetPosition(e[0],f[0]);};})(c,e,f),[]]);c[0].SetPosition(e[0]+a,f[0]+b);h=new AF.ptr(0,0,0,true,true,new B.Vector([0,0]));i=AH(c[0],d,h);if(i){$s=1;continue;}$s=2;continue;case 1:j=h.Overlap*h.OverlapX;k=h.Overlap*h.OverlapY;l=j;m=k;n=[true,l,m,h];$s=4;case 4:return n;case 2:o=[false,0,0,h];$s=5;case 5:return o;case 3:$s=-1;return[false,0,0,BB.nil];}return;}}catch(err){$err=err;$s=-1;return[false,0,0,BB.nil];}finally{$callDeferred($deferred,$err);if($curGoroutine.asleep){var $f={$blk:AG,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,$s,$deferred};return $f;}}};$pkg.CalcPushbacks=AG;AH=function(a,b,c){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;d=a.Points.$length;e=b.Points.$length;f=d;g=e;if((1===f)&&(1===g)){if(!(BB.nil===c)){c.Overlap=0;}return((h=(i=a.Points,(0>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+0])),(0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0]))===(j=(k=b.Points,(0>=k.$length?($throwRuntimeError("index out of range"),undefined):k.$array[k.$offset+0])),(0>=j.$length?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+0])))&&((l=(m=a.Points,(0>=m.$length?($throwRuntimeError("index out of range"),undefined):m.$array[m.$offset+0])),(1>=l.$length?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+1]))===(n=(o=b.Points,(0>=o.$length?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+0])),(1>=n.$length?($throwRuntimeError("index out of range"),undefined):n.$array[n.$offset+1])));}if(1=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+q]);if(AI(a,b,r.Unit(),c)){return false;}q++;}}if(1=s.$length)?($throwRuntimeError("index out of range"),undefined):s.$array[s.$offset+t]);if(AI(a,b,u.Unit(),c)){return false;}t++;}}return true;};AI=function(a,b,c,d){var a,aa,ab,ac,ad,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;e=1.7e+308;f=-1.7e+308;g=1.7e+308;h=-1.7e+308;i=e;j=f;k=g;l=h;m=a.Points;n=0;while(true){if(!(n=m.$length)?($throwRuntimeError("index out of range"),undefined):m.$array[m.$offset+n]);p=((0>=o.$length?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+0])+a.X)*(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0])+((1>=o.$length?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+1])+a.Y)*(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]);if(i>p){i=p;}if(j=q.$length)?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+r]);t=((0>=s.$length?($throwRuntimeError("index out of range"),undefined):s.$array[s.$offset+0])+b.X)*(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0])+((1>=s.$length?($throwRuntimeError("index out of range"),undefined):s.$array[s.$offset+1])+b.Y)*(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]);if(k>t){k=t;}if(ll||jl){u=i-l;d.AContainedInB=false;}else{x=j-k;y=l-i;if(x=ab.$length?($throwRuntimeError("index out of range"),undefined):ab.$array[ab.$offset+0])))&&(0===(ac=d.Axis,(1>=ac.$length?($throwRuntimeError("index out of range"),undefined):ac.$array[ac.$offset+1]))))||z>aa){ad=1;if(u<0){ad=-1;}d.Overlap=aa;d.OverlapX=(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0])*ad;d.OverlapY=(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1])*ad;}d.Axis=c;}return false;};AJ=function(a,b){var a,b,c,d;c=((A.Floor(a*100)>>0));d=((A.Floor(b*100)>>0));return[c,d];};$pkg.WorldToVirtualGridPos=AJ;AK=function(a,b){var a,b,c,d;c=(a)*0.01;d=(b)*0.01;return[c,d];};$pkg.VirtualGridToWorldPos=AK;AL=function(a,b,c,d,e,f,g,h,i,j){var a,b,c,d,e,f,g,h,i,j;return[a-c-g+i,b-d-f+j];};$pkg.WorldToPolygonColliderBLPos=AL;AM=function(a,b,c,d,e,f,g,h,i,j){var a,b,c,d,e,f,g,h,i,j;return[a+c+g-i,b+d+f-j];};$pkg.PolygonColliderBLToWorldPos=AM;AN=function(a,b,c,d,e,f,g,h,i,j){var a,b,c,d,e,f,g,h,i,j,k,l,m;k=AM(a,b,c,d,e,f,g,h,i,j);l=k[0];m=k[1];return AJ(l,m);};$pkg.PolygonColliderBLToVirtualGridPos=AN;AP=function(a,b,c,d,e){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,$s,$r,$c}=$restore(this,{a,b,c,d,e});$s=$s||0;s:while(true){switch($s){case 0:f=[f];f[0]=$makeSlice(BC,0,10);g=b.Check(0,0,new BD([]));if(BE.nil===g){$s=-1;return(f.$ptr||(f.$ptr=new BF(function(){return this.$target[0];},function($v){this.$target[0]=$v;},f)));}h=g.Objects;i=0;case 1:if(!(i=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+i]);k=false;l=j.Data;if($assertType(l,BG,true)[1]){}else if($assertType(l,BA,true)[1]||$assertType(l,BH,true)[1]){}else{k=true;}if(!k){i++;$s=1;continue;}m=$assertType(j.Shape,BI);o=AG(0,0,c,m);$s=3;case 3:if($c){$c=false;o=o.$blk();}if(o&&o.$blk!==undefined){break s;}n=o;p=n[0];q=n[1];r=n[2];s=n[3];if(!p){i++;$s=1;continue;}t=(s.Overlap-d)*s.OverlapX;u=(s.Overlap-d)*s.OverlapY;q=t;r=u;f[0]=$append(f[0],new C.ptr(s.OverlapX,s.OverlapY));e.X=e.X+(q);e.Y=e.Y+(r);i++;$s=1;continue;case 2:$s=-1;return(f.$ptr||(f.$ptr=new BF(function(){return this.$target[0];},function($v){this.$target[0]=$v;},f)));}return;}var $f={$blk:AP,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,$s};return $f;};AQ=function(a,b,c,d){var a,aa,ab,ac,ad,ae,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;e=AA(c.Id);f=AA(c.Id-1>>0);if(0>=e){return[-2,false,0,0];}g=(h=V[$Int32.keyFor(a.CharacterState)],h!==undefined?[h.v,true]:[false,false]);i=g[1];if(i){return[-2,false,0,0];}j=$assertType(d.GetByFrameId(e),BJ).InputList;k=BK.nil;if(0>0,((n<0||n>=j.$length)?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+n])));p=0;q=0;r=p;s=q;t=0;u=0;v=t;w=u;if(!(BK.nil===k)){y=AE((x=m-1>>0,((x<0||x>=k.$length)?($throwRuntimeError("index out of range"),undefined):k.$array[k.$offset+x])));v=y.BtnALevel;w=y.BtnBLevel;}if(0===a.FramesToRecover){z=o.Dx;aa=o.Dy;r=z;s=aa;if(o.BtnBLevel>w){ab=(ac=U[$Int32.keyFor(a.CharacterState)],ac!==undefined?[ac.v,true]:[false,false]);ad=ab[1];if(!ad){l=true;}}}ae=-1;if(o.BtnALevel>v){ae=1;}return[ae,l,r,s];};AR=function(a,b,c,d,e,f,g){var{a,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az,b,ba,bb,bc,bd,be,bf,bg,bh,bi,bj,bk,bl,bm,bn,bo,bp,bq,br,bs,bt,bu,bv,bw,bx,by,bz,c,ca,cb,cc,cd,ce,cf,cg,ch,ci,cj,ck,cl,cm,cn,co,cp,cq,cr,cs,ct,cu,cv,cw,cx,cy,cz,d,da,db,dc,dd,de,df,dg,dh,di,dj,dk,dl,dm,dn,dp,dq,dr,ds,dt,du,dv,dw,dx,dy,dz,e,ea,eb,ec,ed,ee,ef,eg,eh,ei,ej,ek,el,em,en,eo,ep,eq,er,es,et,eu,ev,ew,ex,ey,ez,f,fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn,fo,fp,fq,fr,fs,ft,fu,fv,fw,fx,fy,fz,g,ga,gb,gc,gd,ge,gf,gg,gh,gi,gj,gk,gl,gm,gn,go,gp,gq,gr,gs,gt,gu,gv,gw,gx,gy,gz,h,ha,hb,hc,hd,he,hf,hg,hh,hi,hj,hk,hl,hm,hn,ho,hp,hq,hr,hs,ht,hu,hv,hw,hx,hy,hz,i,ia,ib,ic,id,ie,ig,ih,ii,ij,ik,il,im,io,ip,iq,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,$s,$r,$c}=$restore(this,{a,b,c,d,e,f,g});$s=$s||0;s:while(true){switch($s){case 0:h=b.PlayersArr.$length;i=$makeSlice(BL,h);j=b.PlayersArr;k=0;while(true){if(!(k=j.$length)?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+k]);((l<0||l>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+l]=new E.ptr(m.Id,m.VirtualGridX,m.VirtualGridY,m.DirX,m.DirY,m.VelX,m.VelY,m.Speed,m.BattleState,m.JoinIndex,m.ColliderRadius,m.Removed,m.Score,0,m.FramesToRecover-1>>0,m.FramesInChState+1>>0,m.Hp,m.MaxHp,m.CharacterState,true,m.ActiveSkillId,m.ActiveSkillHit,m.FramesInvinsible-1>>0,0,0));if(((l<0||l>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+l]).FramesToRecover<0){((l<0||l>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+l]).FramesToRecover=0;}if(((l<0||l>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+l]).FramesInvinsible<0){((l<0||l>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+l]).FramesInvinsible=0;}k++;}n=$makeSlice(BM,0,b.MeleeBullets.$length);o=$makeSlice(BN,0,b.FireballBullets.$length);p=$makeSlice(BC,h);q=$makeSlice(BO,h);r=$makeSlice(BP,h);s=b.BulletLocalIdCounter;t=b.PlayersArr;u=0;case 1:if(!(u=t.$length)?($throwRuntimeError("index out of range"),undefined):t.$array[t.$offset+u]);((x<0||x>=r.$length)?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+x]=false);z=((x<0||x>=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+x]);aa=((x<0||x>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+x]);ab=AQ(y,aa,b,a);ac=ab[0];ad=ab[1];ae=ab[2];af=ab[3];if(ad){aa.VelY=(z.JumpingInitVelY);((x<0||x>=r.$length)?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+x]=true);}ag=y.JoinIndex;ah=z.SkillMapper(ac,y);$s=3;case 3:if($c){$c=false;ah=ah.$blk();}if(ah&&ah.$blk!==undefined){break s;}ai=ah;aj=(ak=T[$Int.keyFor(ai)],ak!==undefined?[ak.v,true]:[AZ.nil,false]);al=aj[0];am=aj[1];if(am){aa.ActiveSkillId=((ai>>0));aa.ActiveSkillHit=0;aa.FramesToRecover=al.RecoveryFrames;an=1;if(0>aa.DirX){an=-an;}ao=false;ap=(aq=al.Hits,ar=aa.ActiveSkillHit,((ar<0||ar>=aq.$length)?($throwRuntimeError("index out of range"),undefined):aq.$array[aq.$offset+ar]));if($assertType(ap,BA,true)[1]){as=ap.$val;v[0]=$clone(as,J);v[0].Bullet.BulletLocalId=s;s=s+(1)>>0;v[0].Bullet.OriginatedRenderFrameId=b.Id;v[0].Bullet.OffenderJoinIndex=ag;n=$append(n,v[0]);if(!((-1===as.Bullet.SelfLockVelX))){ao=true;aa.VelX=$imul(an,as.Bullet.SelfLockVelX);}if(!((-1===as.Bullet.SelfLockVelY))){ao=true;aa.VelY=as.Bullet.SelfLockVelY;}}else if($assertType(ap,BH,true)[1]){at=ap.$val;w[0]=$clone(at,K);w[0].Bullet.BulletLocalId=s;s=s+(1)>>0;au=1;if(0>aa.DirX){au=-au;}av=y.VirtualGridX+($imul(au,w[0].Bullet.HitboxOffsetX))>>0;aw=y.VirtualGridY;w[0].VirtualGridX=av;w[0].VirtualGridY=aw;w[0].Bullet.OriginatedRenderFrameId=b.Id;w[0].Bullet.OffenderJoinIndex=ag;w[0].VelX=$imul(w[0].Speed,au);w[0].VelY=0;o=$append(o,w[0]);if(!((-1===at.Bullet.SelfLockVelX))){ao=true;aa.VelX=$imul(au,at.Bullet.SelfLockVelX);}if(!((-1===at.Bullet.SelfLockVelY))){ao=true;aa.VelY=at.Bullet.SelfLockVelY;}}if(false===ao&&false===y.InAir){aa.VelX=0;}aa.CharacterState=al.BoundChState;u++;$s=1;continue;}if(0===y.FramesToRecover){if(!((0===ae))||!((0===af))){ax=ae;ay=af;aa.DirX=ax;aa.DirY=ay;aa.VelX=$imul(ae,y.Speed);aa.CharacterState=1;}else{aa.CharacterState=0;aa.VelX=0;}}u++;$s=1;continue;case 2:az=$makeSlice(BR,b.PlayersArr.$length,b.PlayersArr.$length);ba=b.PlayersArr;bb=0;case 4:if(!(bb=ba.$length)?($throwRuntimeError("index out of range"),undefined):ba.$array[ba.$offset+bb]);be=bd.JoinIndex;bf=0;bg=0;(bh=be-1>>0,((bh<0||bh>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+bh])).X=bf;(bi=be-1>>0,((bi<0||bi>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+bi])).Y=bg;bj=((bc<0||bc>=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+bc]);bk=bd.VirtualGridX+bd.VelX>>0;bl=bd.VirtualGridY+bd.VelY>>0;bm=bk;bn=bl;if(((bc<0||bc>=r.$length)?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+bc])){bn=bn+(bj.JumpingInitVelY)>>0;}bo=AK(bm,bn);bp=bo[0];bq=bo[1];br=$imul(bd.ColliderRadius,2);bs=$imul(bd.ColliderRadius,4);bt=br;bu=bs;bv=bd.CharacterState;if(bv===(9)){bw=$imul(bd.ColliderRadius,4);bx=$imul(bd.ColliderRadius,2);bt=bw;bu=bx;}else if((bv===(8))||(bv===(4))||(bv===(5))){by=$imul(bd.ColliderRadius,2);bz=$imul(bd.ColliderRadius,2);bt=by;bu=bz;}ca=AK(bt,bu);cb=ca[0];cc=ca[1];cd=AS(bp,bq,cb,cc,0.1,0.1,0.1,0.1,e,f,bd,"Player");$s=6;case 6:if($c){$c=false;cd=cd.$blk();}if(cd&&cd.$blk!==undefined){break s;}ce=cd;((bc<0||bc>=az.$length)?($throwRuntimeError("index out of range"),undefined):az.$array[az.$offset+bc]=ce);$r=c.Add(new BR([ce]));$s=7;case 7:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}cf=((bc<0||bc>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+bc]);if(bd.InAir){cf.VelX=cf.VelX+(0)>>0;cf.VelY=cf.VelY+(-50)>>0;}bb++;$s=4;continue;case 5:cg=$makeSlice(BR,0,b.MeleeBullets.$length);ch=b.MeleeBullets;ci=0;case 8:if(!(ci=ch.$length)?($throwRuntimeError("index out of range"),undefined):ch.$array[ch.$offset+ci]);if(((cj.Bullet.OriginatedRenderFrameId+cj.Bullet.StartupFrames>>0)<=b.Id)&&(((cj.Bullet.OriginatedRenderFrameId+cj.Bullet.StartupFrames>>0)+cj.Bullet.ActiveFrames>>0)>b.Id)){$s=10;continue;}if(((cj.Bullet.OriginatedRenderFrameId+cj.Bullet.StartupFrames>>0)+cj.Bullet.ActiveFrames>>0)>b.Id){$s=11;continue;}$s=12;continue;case 10:cm=(ck=b.PlayersArr,cl=cj.Bullet.OffenderJoinIndex-1>>0,((cl<0||cl>=ck.$length)?($throwRuntimeError("index out of range"),undefined):ck.$array[ck.$offset+cl]));cn=1;if(0>cm.DirX){cn=-cn;}co=AK(cm.VirtualGridX+($imul(cn,cj.Bullet.HitboxOffsetX))>>0,cm.VirtualGridY);cp=co[0];cq=co[1];cr=AK(cj.Bullet.HitboxSizeX,cj.Bullet.HitboxSizeY);cs=cr[0];ct=cr[1];cu=AS(cp,cq,cs,ct,0.1,0.1,0.1,0.1,e,f,cj,"MeleeBullet");$s=13;case 13:if($c){$c=false;cu=cu.$blk();}if(cu&&cu.$blk!==undefined){break s;}cv=cu;$r=c.Add(new BR([cv]));$s=14;case 14:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}cg=$append(cg,cv);$s=12;continue;case 11:n=$append(n,cj);case 12:ci++;$s=8;continue;case 9:cw=b.FireballBullets;cx=0;case 15:if(!(cx=cw.$length)?($throwRuntimeError("index out of range"),undefined):cw.$array[cw.$offset+cx]);if(((cy.Bullet.OriginatedRenderFrameId+cy.Bullet.StartupFrames>>0)>0)+cy.Bullet.ActiveFrames>>0)>b.Id)){$s=17;continue;}if(((cy.Bullet.OriginatedRenderFrameId+cy.Bullet.StartupFrames>>0)+cy.Bullet.ActiveFrames>>0)>b.Id){$s=18;continue;}$s=19;continue;case 17:cz=AK(cy.VirtualGridX,cy.VirtualGridY);da=cz[0];db=cz[1];dc=AK(cy.Bullet.HitboxSizeX,cy.Bullet.HitboxSizeY);dd=dc[0];de=dc[1];df=AS(da,db,dd,de,0.1,0.1,0.1,0.1,e,f,cy,"FireballBullet");$s=20;case 20:if($c){$c=false;df=df.$blk();}if(df&&df.$blk!==undefined){break s;}dg=df;$r=c.Add(new BR([dg]));$s=21;case 21:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}cg=$append(cg,dg);$s=19;continue;case 18:o=$append(o,cy);case 19:cx++;$s=15;continue;case 16:dh=b.PlayersArr;di=0;case 22:if(!(di=dh.$length)?($throwRuntimeError("index out of range"),undefined):dh.$array[dh.$offset+di]);dl=dk.JoinIndex;dm=((dj<0||dj>=az.$length)?($throwRuntimeError("index out of range"),undefined):az.$array[az.$offset+dj]);dn=$assertType(dm.Shape,BI);dq=AP(dl,dm,dn,0.1,(dp=dl-1>>0,((dp<0||dp>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+dp])));$s=24;case 24:if($c){$c=false;dq=dq.$blk();}if(dq&&dq.$blk!==undefined){break s;}(dr=dl-1>>0,((dr<0||dr>=q.$length)?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+dr]=dq));ds=((dj<0||dj>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+dj]);dt=((dj<0||dj>=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+dj]);du=false;dv=dm.Check(0,0,new BD([]));if(!(BE.nil===dv)){$s=25;continue;}$s=26;continue;case 25:dw=dv.Objects;dx=0;case 27:if(!(dx=dw.$length)?($throwRuntimeError("index out of range"),undefined):dw.$array[dw.$offset+dx]);dz=false;ea=false;eb=false;ec=dz;ed=ea;ee=eb;ef=dy.Data;if($assertType(ef,BG,true)[1]){ed=true;}else if($assertType(ef,BA,true)[1]||$assertType(ef,BH,true)[1]){ee=true;}else{ec=true;}if(ee){dx++;$s=27;continue;}eg=$assertType(dy.Shape,BI);ei=AG(0,0,dn,eg);$s=29;case 29:if($c){$c=false;ei=ei.$blk();}if(ei&&ei.$blk!==undefined){break s;}eh=ei;ej=eh[0];ek=eh[1];el=eh[2];em=eh[3];if(!ej){dx++;$s=27;continue;}en=em.OverlapX*0+em.OverlapY*-1;if(ed){eo=(em.Overlap-0.2)*em.OverlapX;ep=(em.Overlap-0.2)*em.OverlapY;ek=eo;el=ep;}eq=(er=dl-1>>0,((er<0||er>=q.$length)?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+er])).$get();es=0;while(true){if(!(es=eq.$length)?($throwRuntimeError("index out of range"),undefined):eq.$array[eq.$offset+es]),C);eu=ek*et.X+el*et.Y;if(ec||(ed&&0>eu)){ek=ek-(eu*et.X);el=el-(eu*et.Y);}es++;}ev=dl-1>>0;((ev<0||ev>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+ev]).X=((ev<0||ev>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+ev]).X+(ek);ew=dl-1>>0;((ew<0||ew>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+ew]).Y=((ew<0||ew>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+ew]).Y+(el);if(0.5=dk.VelY){ds.VelY=0;ds.VelX=0;ex=(ey=X[$Int32.keyFor(ds.CharacterState)],ey!==undefined?[ey.v,true]:[false,false]);ez=ex[1];if(ez){if(8===ds.CharacterState){ds.CharacterState=9;ds.FramesToRecover=dt.LayDownFramesToRecover;}else{fa=0;fb=dk.ColliderRadius;fc=fa;fd=fb;fe=AK(fc,fd);ff=fe[1];fg=dl-1>>0;((fg<0||fg>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+fg]).Y=((fg<0||fg>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+fg]).Y-(ff);ds.CharacterState=0;}}}else{fh=(fi=X[$Int32.keyFor(ds.CharacterState)],fi!==undefined?[fi.v,true]:[false,false]);fj=fh[1];if(fj){if(9===ds.CharacterState){if(0===ds.FramesToRecover){ds.CharacterState=10;ds.FramesToRecover=dt.GetUpFramesToRecover;}}else if(10===ds.CharacterState){if(0===ds.FramesToRecover){ds.CharacterState=0;ds.FramesInvinsible=dt.GetUpInvinsibleFrames;}}}}}di++;$s=22;continue;case 23:fk=cg;fl=0;case 30:if(!(fl=fk.$length)?($throwRuntimeError("index out of range"),undefined):fk.$array[fk.$offset+fl]);fn=fm.Check(0,0,new BD([]));fm.Space.Remove(new BR([fm]));fo=true;if(!(BE.nil===fn)){$s=32;continue;}$s=33;continue;case 32:fp=fm.Data;if($assertType(fp,BA,true)[1]){$s=34;continue;}if($assertType(fp,BH,true)[1]){$s=35;continue;}$s=36;continue;case 34:fq=fp.$val;fs=$assertType(fm.Shape,BI);fv=(ft=b.PlayersArr,fu=fq.Bullet.OffenderJoinIndex-1>>0,((fu<0||fu>=ft.$length)?($throwRuntimeError("index out of range"),undefined):ft.$array[ft.$offset+fu]));fw=fn.Objects;fx=0;case 37:if(!(fx=fw.$length)?($throwRuntimeError("index out of range"),undefined):fw.$array[fw.$offset+fx]);fz=$assertType(fy.Shape,BI);ga=fy.Data;if($assertType(ga,BG,true)[1]){$s=39;continue;}$s=40;continue;case 39:gb=ga.$val;if(fq.Bullet.OffenderJoinIndex===gb.JoinIndex){fx++;$s=37;continue;}ge=AG(0,0,fs,fz);$s=42;case 42:if($c){$c=false;ge=ge.$blk();}if(ge&&ge.$blk!==undefined){break s;}gd=ge;gf=gd[0];if(!gf){fx++;$s=37;continue;}fo=false;gg=(gh=W[$Int32.keyFor(gb.CharacterState)],gh!==undefined?[gh.v,true]:[false,false]);gi=gg[1];if(gi){fx++;$s=37;continue;}if(0fv.DirX){gj=-gj;}gk=$imul(gj,fq.Bullet.PushbackVelX);gl=fq.Bullet.PushbackVelY;gm=gk;gn=gl;gp=(go=gb.JoinIndex-1>>0,((go<0||go>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+go]));gp.VelX=gm;gp.VelY=gn;if(fq.Bullet.BlowUp){gp.CharacterState=8;}else{gp.CharacterState=3;}gr=(gq=gb.JoinIndex-1>>0,((gq<0||gq>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+gq])).FramesToRecover;if(fq.Bullet.HitStunFrames>gr){gp.FramesToRecover=fq.Bullet.HitStunFrames;}$s=41;continue;case 40:gc=ga;fo=false;case 41:fx++;$s=37;continue;case 38:$s=36;continue;case 35:fr=fp.$val;gs=$assertType(fm.Shape,BI);gv=(gt=b.PlayersArr,gu=fr.Bullet.OffenderJoinIndex-1>>0,((gu<0||gu>=gt.$length)?($throwRuntimeError("index out of range"),undefined):gt.$array[gt.$offset+gu]));gw=fn.Objects;gx=0;case 43:if(!(gx=gw.$length)?($throwRuntimeError("index out of range"),undefined):gw.$array[gw.$offset+gx]);gz=$assertType(gy.Shape,BI);ha=gy.Data;if($assertType(ha,BG,true)[1]){$s=45;continue;}$s=46;continue;case 45:hb=ha.$val;if(fr.Bullet.OffenderJoinIndex===hb.JoinIndex){gx++;$s=43;continue;}he=AG(0,0,gs,gz);$s=48;case 48:if($c){$c=false;he=he.$blk();}if(he&&he.$blk!==undefined){break s;}hd=he;hf=hd[0];if(!hf){gx++;$s=43;continue;}fo=false;hg=(hh=W[$Int32.keyFor(hb.CharacterState)],hh!==undefined?[hh.v,true]:[false,false]);hi=hg[1];if(hi){gx++;$s=43;continue;}if(0gv.DirX){hj=-hj;}hk=$imul(hj,fr.Bullet.PushbackVelX);hl=fr.Bullet.PushbackVelY;hm=hk;hn=hl;hp=(ho=hb.JoinIndex-1>>0,((ho<0||ho>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+ho]));hp.VelX=hm;hp.VelY=hn;if(fr.Bullet.BlowUp){hp.CharacterState=8;}else{hp.CharacterState=3;}hr=(hq=hb.JoinIndex-1>>0,((hq<0||hq>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+hq])).FramesToRecover;if(fr.Bullet.HitStunFrames>hr){hp.FramesToRecover=fr.Bullet.HitStunFrames;}$s=47;continue;case 46:hc=ha;fo=false;case 47:gx++;$s=43;continue;case 44:case 36:case 33:if(fo){hs=fm.Data;if($assertType(hs,BA,true)[1]){ht=hs.$val;n=$append(n,ht);}else if($assertType(hs,BH,true)[1]){hu=hs.$val;hv=hu.VirtualGridX+hu.VelX>>0;hw=hu.VirtualGridY+hu.VelY>>0;hu.VirtualGridX=hv;hu.VirtualGridY=hw;o=$append(o,hu);}}fl++;$s=30;continue;case 31:hx=b.PlayersArr;hy=0;while(true){if(!(hy=hx.$length)?($throwRuntimeError("index out of range"),undefined):hx.$array[hx.$offset+hy]);ib=ia.JoinIndex;ic=((hz<0||hz>=az.$length)?($throwRuntimeError("index out of range"),undefined):az.$array[az.$offset+hz]);id=((hz<0||hz>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+hz]);ie=AN(ic.X-(ig=ib-1>>0,((ig<0||ig>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+ig])).X,ic.Y-(ih=ib-1>>0,((ih<0||ih>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+ih])).Y,ic.W*0.5,ic.H*0.5,0,0,0,0,e,f);id.VirtualGridX=ie[0];id.VirtualGridY=ie[1];if(id.InAir){ii=id.CharacterState;ij=ii;if((ij===(0))||(ij===(1))){if(((hz<0||hz>=r.$length)?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+hz])||(5===ia.CharacterState)){id.CharacterState=5;}else{id.CharacterState=4;}}else if(ij===(2)){id.CharacterState=6;}else if(ij===(3)){id.CharacterState=7;}}if(!((id.CharacterState===ia.CharacterState))){id.FramesInChState=0;}ik=(il=X[$Int32.keyFor(id.CharacterState)],il!==undefined?[il.v,true]:[false,false]);im=ik[1];if(im){id.ActiveSkillId=-1;id.ActiveSkillHit=-1;}hy++;}io=az;ip=0;while(true){if(!(ip=io.$length)?($throwRuntimeError("index out of range"),undefined):io.$array[io.$offset+ip]);iq.Space.Remove(new BR([iq]));ip++;}$s=-1;return new M.ptr(b.Id+1>>0,i,new $Int64(0,0),n,o,new $Uint64(0,0),false,0);}return;}var $f={$blk:AR,$c:true,$r,a,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az,b,ba,bb,bc,bd,be,bf,bg,bh,bi,bj,bk,bl,bm,bn,bo,bp,bq,br,bs,bt,bu,bv,bw,bx,by,bz,c,ca,cb,cc,cd,ce,cf,cg,ch,ci,cj,ck,cl,cm,cn,co,cp,cq,cr,cs,ct,cu,cv,cw,cx,cy,cz,d,da,db,dc,dd,de,df,dg,dh,di,dj,dk,dl,dm,dn,dp,dq,dr,ds,dt,du,dv,dw,dx,dy,dz,e,ea,eb,ec,ed,ee,ef,eg,eh,ei,ej,ek,el,em,en,eo,ep,eq,er,es,et,eu,ev,ew,ex,ey,ez,f,fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn,fo,fp,fq,fr,fs,ft,fu,fv,fw,fx,fy,fz,g,ga,gb,gc,gd,ge,gf,gg,gh,gi,gj,gk,gl,gm,gn,go,gp,gq,gr,gs,gt,gu,gv,gw,gx,gy,gz,h,ha,hb,hc,hd,he,hf,hg,hh,hi,hj,hk,hl,hm,hn,ho,hp,hq,hr,hs,ht,hu,hv,hw,hx,hy,hz,i,ia,ib,ic,id,ie,ig,ih,ii,ij,ik,il,im,io,ip,iq,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,$s};return $f;};$pkg.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame=AR;AS=function(a,b,c,d,e,f,g,h,i,j,k,l){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,$s,$r,$c}=$restore(this,{a,b,c,d,e,f,g,h,i,j,k,l});$s=$s||0;s:while(true){switch($s){case 0:m=AL(a,b,c*0.5,d*0.5,e,f,g,h,i,j);n=m[0];o=m[1];p=AT(n,o,g+c+h,f+d+e,k,l);$s=1;case 1:if($c){$c=false;p=p.$blk();}if(p&&p.$blk!==undefined){break s;}q=p;$s=2;case 2:return q;}return;}var $f={$blk:AS,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,$s};return $f;};$pkg.GenerateRectCollider=AS;AT=function(a,b,c,d,e,f){var{a,b,c,d,e,f,g,h,$s,$r,$c}=$restore(this,{a,b,c,d,e,f});$s=$s||0;s:while(true){switch($s){case 0:g=B.NewObject(a,b,c,d,new BD([f]));h=B.NewRectangle(0,0,c,d);$r=g.SetShape(h);$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}g.Data=e;$s=-1;return g;}return;}var $f={$blk:AT,$c:true,$r,a,b,c,d,e,f,g,h,$s};return $f;};AU=function(a,b,c,d,e){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,$s,$r,$c}=$restore(this,{a,b,c,d,e});$s=$s||0;s:while(true){switch($s){case 0:f=AV(a);g=0;h=0;i=g;j=h;k=B.NewConvexPolygon(BS.nil);l=f.Points;m=0;while(true){if(!(m=l.$length)?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+m]);p=f.Points;q=0;while(true){if(!(q=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+q]);if(n===r){q++;continue;}if(A.Abs(s.X-o.X)>i){i=A.Abs(s.X-o.X);}if(A.Abs(s.Y-o.Y)>j){j=A.Abs(s.Y-o.Y);}q++;}m++;}t=0;while(true){if(!(t=u.$length)?($throwRuntimeError("index out of range"),undefined):u.$array[u.$offset+t]));k.AddPoints(new BS([v.X,v.Y]));t=t+(1)>>0;}w=B.NewObject(f.Anchor.X+b,f.Anchor.Y+c,i,j,new BD([e]));$r=w.SetShape(k);$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}w.Data=d;$s=-1;return w;}return;}var $f={$blk:AU,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,$s};return $f;};$pkg.GenerateConvexPolygonCollider=AU;AV=function(a){var a,b,c,d,e,f,g,h,i,j,k;b=new C.ptr(1.7e+308,1.7e+308);c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(e.X=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+h]);(k=f.Points,((i<0||i>=k.$length)?($throwRuntimeError("index out of range"),undefined):k.$array[k.$offset+i]=new C.ptr(j.X-b.X,j.Y-b.Y)));h++;}return f;};$pkg.AlignPolygon2DToBoundingBox=AV;BX.methods=[{prop:"Put",name:"Put",pkg:"",typ:$funcType([$emptyInterface],[],false)},{prop:"Pop",name:"Pop",pkg:"",typ:$funcType([],[$emptyInterface],false)},{prop:"GetArrIdxByOffset",name:"GetArrIdxByOffset",pkg:"",typ:$funcType([$Int32],[$Int32],false)},{prop:"GetByOffset",name:"GetByOffset",pkg:"",typ:$funcType([$Int32],[$emptyInterface],false)},{prop:"GetByFrameId",name:"GetByFrameId",pkg:"",typ:$funcType([$Int32],[$emptyInterface],false)},{prop:"SetByFrameId",name:"SetByFrameId",pkg:"",typ:$funcType([$emptyInterface,$Int32],[$Int32,$Int32,$Int32],false)}];C.init("",[{prop:"X",name:"X",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Y",name:"Y",embedded:false,exported:true,typ:$Float64,tag:""}]);D.init("",[{prop:"Anchor",name:"Anchor",embedded:false,exported:true,typ:BT,tag:""},{prop:"Points",name:"Points",embedded:false,exported:true,typ:BU,tag:""}]);E.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:""},{prop:"FramesInvinsible",name:"FramesInvinsible",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"BulletTeamId",name:"BulletTeamId",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"ChCollisionTeamId",name:"ChCollisionTeamId",embedded:false,exported:true,typ:$Int32,tag:""}]);F.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:""}]);H.init("",[{prop:"Boundary",name:"Boundary",embedded:false,exported:true,typ:BV,tag:""}]);I.init("",[{prop:"BulletLocalId",name:"BulletLocalId",embedded:false,exported:true,typ:$Int32,tag:""},{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:BW,tag:""},{prop:"TeamId",name:"TeamId",embedded:false,exported:true,typ:$Int32,tag:""}]);J.init("",[{prop:"Bullet",name:"Bullet",embedded:true,exported:true,typ:I,tag:""}]);K.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:I,tag:""}]);L.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:AY,tag:""}]);M.init("",[{prop:"Id",name:"Id",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"PlayersArr",name:"PlayersArr",embedded:false,exported:true,typ:BL,tag:""},{prop:"CountdownNanos",name:"CountdownNanos",embedded:false,exported:true,typ:$Int64,tag:""},{prop:"MeleeBullets",name:"MeleeBullets",embedded:false,exported:true,typ:BM,tag:""},{prop:"FireballBullets",name:"FireballBullets",embedded:false,exported:true,typ:BN,tag:""},{prop:"BackendUnconfirmedMask",name:"BackendUnconfirmedMask",embedded:false,exported:true,typ:$Uint64,tag:""},{prop:"ShouldForceResync",name:"ShouldForceResync",embedded:false,exported:true,typ:$Bool,tag:""},{prop:"BulletLocalIdCounter",name:"BulletLocalIdCounter",embedded:false,exported:true,typ:$Int32,tag:""}]);N.init("",[{prop:"InputFrameId",name:"InputFrameId",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"InputList",name:"InputList",embedded:false,exported:true,typ:BK,tag:""},{prop:"ConfirmedList",name:"ConfirmedList",embedded:false,exported:true,typ:$Uint64,tag:""}]);O.init("",[{prop:"FlAct",name:"FlAct",embedded:false,exported:true,typ:$Uint64,tag:""},{prop:"FrAct",name:"FrAct",embedded:false,exported:true,typ:$Uint64,tag:""},{prop:"X",name:"X",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Y",name:"Y",embedded:false,exported:true,typ:$Float64,tag:""}]);P.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:AY,tag:""}]);R.init([$Int,BG],[$Int],false);S.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:"GetUpInvinsibleFrames",name:"GetUpInvinsibleFrames",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"GetUpFramesToRecover",name:"GetUpFramesToRecover",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Speed",name:"Speed",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:R,tag:""}]);AF.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:B.Vector,tag:""}]);$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:$r=A.$init();$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}$r=B.$init();$s=2;case 2:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}$pkg.DIRECTION_DECODER=new AX([new AW([0,0]),new AW([0,2]),new AW([0,-2]),new AW([2,0]),new AW([-2,0]),new AW([1,1]),new AW([-1,-1]),new AW([1,-1]),new AW([-1,1])]);T=$makeMap($Int.keyFor,[{k:1,v:new L.ptr(0,30,30,30,1,2,new AY([new J.ptr(new I.ptr(0,0,0,7,13,30,22,13,9,50,0,5,5,-1,1200,0,2400,3200,false,$makeMap($Int.keyFor,[{k:1,v:2}]),0))]))},{k:2,v:new L.ptr(0,36,36,36,1,11,new AY([new J.ptr(new I.ptr(0,0,0,18,22,36,18,18,9,50,0,5,10,-1,1800,0,2400,3200,false,$makeMap($Int.keyFor,[{k:1,v:3}]),0))]))},{k:3,v:new L.ptr(0,50,50,50,1,12,new AY([new J.ptr(new I.ptr(0,0,0,15,0,0,30,999999999,9,200,700,10,50,500,3200,0,4800,3200,true,false,0))]))},{k:4,v:new L.ptr(0,30,30,30,1,2,new AY([new J.ptr(new I.ptr(0,0,0,7,13,30,22,13,9,50,0,5,5,-1,1200,0,2400,3200,false,$makeMap($Int.keyFor,[{k:1,v:5}]),0))]))},{k:5,v:new L.ptr(0,36,36,36,1,11,new AY([new J.ptr(new I.ptr(0,0,0,18,22,36,18,18,9,50,0,5,10,-1,1800,0,2400,3200,false,$makeMap($Int.keyFor,[{k:1,v:6}]),0))]))},{k:6,v:new L.ptr(0,45,45,45,1,12,new AY([new J.ptr(new I.ptr(0,0,0,15,0,0,28,999999999,9,200,700,10,-10,-1,2400,0,3200,3200,true,false,0))]))},{k:7,v:new L.ptr(0,30,30,30,1,2,new AY([new J.ptr(new I.ptr(0,0,0,7,13,30,22,13,9,50,0,5,5,-1,1200,0,2400,3200,false,$makeMap($Int.keyFor,[{k:1,v:2}]),0))]))},{k:8,v:new L.ptr(0,36,36,36,1,11,new AY([new J.ptr(new I.ptr(0,0,0,18,22,36,18,18,9,50,0,5,10,-1,1800,0,2400,3200,false,$makeMap($Int.keyFor,[{k:1,v:3}]),0))]))},{k:9,v:new L.ptr(0,50,50,50,1,12,new AY([new J.ptr(new I.ptr(0,0,0,15,0,0,30,999999999,9,200,700,10,50,500,3200,0,4800,3200,false,false,0))]))},{k:10,v:new L.ptr(0,40,40,40,1,13,new AY([new K.ptr(0,0,0,0,0,0,800,new I.ptr(0,0,0,15,0,0,999999999,15,9,200,0,20,-1,-1,3200,0,4800,3200,false,false,0))]))},{k:255,v:new L.ptr(0,30,30,30,1,6,new AY([new J.ptr(new I.ptr(0,0,0,3,0,0,20,18,9,50,0,5,-1,-1,1200,0,3200,2400,false,false,0))]))},{k:256,v:new L.ptr(0,20,20,20,1,6,new AY([new J.ptr(new I.ptr(0,0,0,3,0,0,10,15,9,50,0,5,-1,-1,1200,0,3200,2400,false,false,0))]))},{k:257,v:new L.ptr(0,30,30,30,1,6,new AY([new J.ptr(new I.ptr(0,0,0,3,0,0,20,18,9,50,0,5,-1,-1,1200,0,3200,2400,false,false,0))]))}]);$pkg.Characters=$makeMap($Int.keyFor,[{k:0,v:new S.ptr(0,"MonkGirl",11,1,16,16,10,27,120,800,(function(a,b){var a,b,c,d,e,f,g,h,i,j,k,l,m,n;if(1===a){if(0===b.FramesToRecover){if(b.InAir){return 255;}else{return 1;}}else{c=(d=T[$Int.keyFor(((b.ActiveSkillId>>0)))],d!==undefined?[d.v,true]:[AZ.nil,false]);e=c[0];f=c[1];if(f){g=(h=e.Hits,i=b.ActiveSkillHit,((i<0||i>=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+i]));if($assertType(g,BA,true)[1]){j=g.$val;if(j.Bullet.CancellableStFrame<=b.FramesInChState&&b.FramesInChState>0)))],d!==undefined?[d.v,true]:[AZ.nil,false]);e=c[0];f=c[1];if(f){g=(h=e.Hits,i=b.ActiveSkillHit,((i<0||i>=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+i]));if($assertType(g,BA,true)[1]){j=g.$val;if(j.Bullet.CancellableStFrame<=b.FramesInChState&&b.FramesInChState>0)))],d!==undefined?[d.v,true]:[AZ.nil,false]);e=c[0];f=c[1];if(f){g=(h=e.Hits,i=b.ActiveSkillHit,((i<0||i>=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+i]));if($assertType(g,BA,true)[1]){j=g.$val;if(j.Bullet.CancellableStFrame<=b.FramesInChState&&b.FramesInChState=d.$length)?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+e]);g=A.MakeFullWrapper(f);$s=3;case 3:if($c){$c=false;g=g.$blk();}if(g&&g.$blk!==undefined){break s;}c=$append(c,g);e++;$s=1;continue;case 2:$s=-1;return c;}return;}var $f={$blk:O,$c:true,$r,a,b,c,d,e,f,g,$s};return $f;};$pkg.GetCollisionSpaceObjsJs=O;P=function(a,b,c,d,e,f,g,h){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,$s,$r,$c}=$restore(this,{a,b,c,d,e,f,g,h});$s=$s||0;s:while(true){switch($s){case 0:i=0.1;j=0.1;k=0.1;l=0.1;m=i;n=j;o=k;p=l;q=B.GenerateRectCollider(a,b,c,d,m,n,o,p,e,f,g,h);$s=1;case 1:if($c){$c=false;q=q.$blk();}if(q&&q.$blk!==undefined){break s;}r=A.MakeFullWrapper(q);$s=2;case 2:if($c){$c=false;r=r.$blk();}if(r&&r.$blk!==undefined){break s;}s=r;$s=3;case 3:return s;}return;}var $f={$blk:P,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,$s};return $f;};$pkg.GenerateRectColliderJs=P;Q=function(a,b,c,d,e){var{a,b,c,d,e,f,g,h,$s,$r,$c}=$restore(this,{a,b,c,d,e});$s=$s||0;s:while(true){switch($s){case 0:f=B.GenerateConvexPolygonCollider(a,b,c,d,e);$s=1;case 1:if($c){$c=false;f=f.$blk();}if(f&&f.$blk!==undefined){break s;}g=A.MakeFullWrapper(f);$s=2;case 2:if($c){$c=false;g=g.$blk();}if(g&&g.$blk!==undefined){break s;}h=g;$s=3;case 3:return h;}return;}var $f={$blk:Q,$c:true,$r,a,b,c,d,e,f,g,h,$s};return $f;};$pkg.GenerateConvexPolygonColliderJs=Q;R=function(a){var{a,b,c,d,e,f,g,h,$s,$r,$c}=$restore(this,{a});$s=$s||0;s:while(true){switch($s){case 0:b=$makeSlice(AF,a.$length,a.$length);c=a;d=0;case 1:if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);h=A.MakeFullWrapper((g=B.Characters[$Int.keyFor(f)],g!==undefined?g.v:AG.nil));$s=3;case 3:if($c){$c=false;h=h.$blk();}if(h&&h.$blk!==undefined){break s;}((e<0||e>=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+e]=h);d++;$s=1;continue;case 2:$s=-1;return b;}return;}var $f={$blk:R,$c:true,$r,a,b,c,d,e,f,g,h,$s};return $f;};$pkg.GetCharacterConfigsOrderedByJoinIndex=R;S=function(a,b,c,d,e,f,g){var{a,b,c,d,e,f,g,h,i,j,$s,$r,$c}=$restore(this,{a,b,c,d,e,f,g});$s=$s||0;s:while(true){switch($s){case 0:h=B.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(a,b,c,d,e,f,g);$s=1;case 1:if($c){$c=false;h=h.$blk();}if(h&&h.$blk!==undefined){break s;}i=A.MakeFullWrapper(h);$s=2;case 2:if($c){$c=false;i=i.$blk();}if(i&&i.$blk!==undefined){break s;}j=i;$s=3;case 3:return j;}return;}var $f={$blk:S,$c:true,$r,a,b,c,d,e,f,g,h,i,j,$s};return $f;};$pkg.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs=S;T=function(){$global.gopkgs=$externalize($makeMap($String.keyFor,[{k:"NewVec2DJs",v:new AH(G)},{k:"NewPolygon2DJs",v:new AI(H)},{k:"NewBarrierJs",v:new AJ(I)},{k:"NewPlayerDownsyncJs",v:new AK(J)},{k:"NewMeleeBulletJs",v:new AL(K)},{k:"NewFireballBulletJs",v:new AM(L)},{k:"NewNpcPatrolCue",v:new AN(M)},{k:"NewRoomDownsyncFrameJs",v:new AO(N)},{k:"NewCollisionSpaceJs",v:new AP(F)},{k:"NewInputFrameDownsync",v:new AQ(D)},{k:"NewRingBufferJs",v:new AR(E)},{k:"GenerateRectColliderJs",v:new AS(P)},{k:"GenerateConvexPolygonColliderJs",v:new AT(Q)},{k:"GetCollisionSpaceObjsJs",v:new AV(O)},{k:"WorldToPolygonColliderBLPos",v:new AW(B.WorldToPolygonColliderBLPos)},{k:"PolygonColliderBLToWorldPos",v:new AW(B.PolygonColliderBLToWorldPos)},{k:"WorldToVirtualGridPos",v:new AX(B.WorldToVirtualGridPos)},{k:"VirtualGridToWorldPos",v:new AY(B.VirtualGridToWorldPos)},{k:"GetCharacterConfigsOrderedByJoinIndex",v:new BA(R)},{k:"ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs",v:new BG(S)},{k:"ConvertToDelayedInputFrameId",v:new BH(B.ConvertToDelayedInputFrameId)},{k:"ConvertToNoDelayInputFrameId",v:new BH(B.ConvertToNoDelayInputFrameId)},{k:"ConvertToFirstUsedRenderFrameId",v:new BH(B.ConvertToFirstUsedRenderFrameId)},{k:"ConvertToLastUsedRenderFrameId",v:new BH(B.ConvertToLastUsedRenderFrameId)},{k:"ShouldGenerateInputFrameUpsync",v:new BI(B.ShouldGenerateInputFrameUpsync)}]),BJ);};$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:$r=A.$init();$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}$r=B.$init();$s=2;case 2:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}$r=C.$init();$s=3;case 3:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}if($pkg===$mainPkg){T();$mainFinished=true;}}return;}if($f===undefined){$f={$blk:$init};}$f.$s=$s;$f.$r=$r;return $f;};$pkg.$init=$init;return $pkg;})(); $synthesizeMethods(); $initAllLinknames(); var $mainPkg = $packages["jsexport"]; diff --git a/frontend/assets/resources/animation/Monk.meta b/frontend/assets/resources/animation/Monk.meta new file mode 100644 index 0000000..bb6da70 --- /dev/null +++ b/frontend/assets/resources/animation/Monk.meta @@ -0,0 +1,7 @@ +{ + "ver": "1.0.1", + "uuid": "e0e9bbc6-e22a-4277-b674-1308432d9734", + "isSubpackage": false, + "subpackageName": "", + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/Atk1.anim b/frontend/assets/resources/animation/Monk/Atk1.anim new file mode 100644 index 0000000..6953d60 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/Atk1.anim @@ -0,0 +1,61 @@ +{ + "__type__": "cc.AnimationClip", + "_name": "Atk1", + "_objFlags": 0, + "_native": "", + "_duration": 0.5, + "sample": 60, + "speed": 1, + "wrapMode": 1, + "curveData": { + "comps": { + "cc.Sprite": { + "spriteFrame": [ + { + "frame": 0, + "value": { + "__uuid__": "c7107ebe-c5c1-4ba6-8ef4-6eb768f7faf9" + } + }, + { + "frame": 0.06666666666666667, + "value": { + "__uuid__": "e0e20918-ff59-43bc-aeaf-035087934092" + } + }, + { + "frame": 0.2, + "value": { + "__uuid__": "5896a135-36da-4fa9-9257-a9042ba4b546" + } + }, + { + "frame": 0.26666666666666666, + "value": { + "__uuid__": "4a16667a-f3b3-405c-8565-d65a4281cfc8" + } + }, + { + "frame": 0.35, + "value": { + "__uuid__": "5ad9858c-52aa-4742-be68-d680210e0d0a" + } + }, + { + "frame": 0.43333333333333335, + "value": { + "__uuid__": "e54dbc94-3eeb-450a-9206-655e960771d2" + } + }, + { + "frame": 0.48333333333333334, + "value": { + "__uuid__": "f79260b7-7702-4f15-8f12-eb19f018aff1" + } + } + ] + } + } + }, + "events": [] +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/Atk1.anim.meta b/frontend/assets/resources/animation/Monk/Atk1.anim.meta new file mode 100644 index 0000000..6a1be76 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/Atk1.anim.meta @@ -0,0 +1,5 @@ +{ + "ver": "2.1.0", + "uuid": "d044ab74-be6a-49a2-85ab-eba41922c2cd", + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/Atk2.anim b/frontend/assets/resources/animation/Monk/Atk2.anim new file mode 100644 index 0000000..6b67043 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/Atk2.anim @@ -0,0 +1,103 @@ +{ + "__type__": "cc.AnimationClip", + "_name": "Atk2", + "_objFlags": 0, + "_native": "", + "_duration": 0.6166666666666667, + "sample": 60, + "speed": 1, + "wrapMode": 1, + "curveData": { + "comps": { + "cc.Sprite": { + "spriteFrame": [ + { + "frame": 0, + "value": { + "__uuid__": "549e581f-5121-4cbb-96e9-b3b8b5b0f227" + } + }, + { + "frame": 0.06666666666666667, + "value": { + "__uuid__": "0355243d-755f-497b-b1ff-4ec105f4efe7" + } + }, + { + "frame": 0.11666666666666667, + "value": { + "__uuid__": "22386328-484b-441e-9675-6553ede6118c" + } + }, + { + "frame": 0.15, + "value": { + "__uuid__": "1ed0eb22-5a20-405f-a15e-8a66348bd025" + } + }, + { + "frame": 0.18333333333333332, + "value": { + "__uuid__": "6e12225f-2300-4e0e-bcf6-00049bfbc48f" + } + }, + { + "frame": 0.21666666666666667, + "value": { + "__uuid__": "08e1ec2a-500f-4a16-a19d-383de218cc14" + } + }, + { + "frame": 0.25, + "value": { + "__uuid__": "024b3ae9-7d24-4057-83d7-4b58f8651ce0" + } + }, + { + "frame": 0.3, + "value": { + "__uuid__": "57f241ae-ce40-49ed-bf63-71d016e41e2f" + } + }, + { + "frame": 0.35, + "value": { + "__uuid__": "d2685f61-3365-4c14-9fb1-d7b2311871c4" + } + }, + { + "frame": 0.4, + "value": { + "__uuid__": "59587d34-25af-42bd-ba0c-747c5f5fa697" + } + }, + { + "frame": 0.45, + "value": { + "__uuid__": "3bceacb5-309a-41e0-bdad-26e85bcf859a" + } + }, + { + "frame": 0.5, + "value": { + "__uuid__": "57f6da9e-f131-4fab-9a3d-f2e894d203aa" + } + }, + { + "frame": 0.55, + "value": { + "__uuid__": "c35454f3-535b-4aec-b408-b8174a74556a" + } + }, + { + "frame": 0.6, + "value": { + "__uuid__": "24f5b898-42dc-4f67-b6fc-946cdb5e369f" + } + } + ] + } + } + }, + "events": [] +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/Atk2.anim.meta b/frontend/assets/resources/animation/Monk/Atk2.anim.meta new file mode 100644 index 0000000..e233128 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/Atk2.anim.meta @@ -0,0 +1,5 @@ +{ + "ver": "2.1.0", + "uuid": "2cab337d-df23-476d-8a98-b5f115a52d04", + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/Atk3.anim b/frontend/assets/resources/animation/Monk/Atk3.anim new file mode 100644 index 0000000..2d3e973 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/Atk3.anim @@ -0,0 +1,103 @@ +{ + "__type__": "cc.AnimationClip", + "_name": "Atk3", + "_objFlags": 0, + "_native": "", + "_duration": 0.6333333333333333, + "sample": 60, + "speed": 1, + "wrapMode": 1, + "curveData": { + "comps": { + "cc.Sprite": { + "spriteFrame": [ + { + "frame": 0, + "value": { + "__uuid__": "318745eb-06b1-4e7f-88d1-e23e02d99e67" + } + }, + { + "frame": 0.06666666666666667, + "value": { + "__uuid__": "a64b6f59-fa72-4f5d-89dc-81a469244ea5" + } + }, + { + "frame": 0.11666666666666667, + "value": { + "__uuid__": "f800d4a1-2396-4aa5-a578-11481db1d8bf" + } + }, + { + "frame": 0.16666666666666666, + "value": { + "__uuid__": "d97f6a5f-8e63-40d7-bd14-9dc71e15e5db" + } + }, + { + "frame": 0.23333333333333334, + "value": { + "__uuid__": "196bcbf9-e89f-4b26-b736-73e2fa787e50" + } + }, + { + "frame": 0.3, + "value": { + "__uuid__": "3229e023-e63d-4a4e-af72-2b1409ea43c5" + } + }, + { + "frame": 0.36666666666666664, + "value": { + "__uuid__": "e2d6e8b8-b468-4edb-b8c3-860bd85ebeae" + } + }, + { + "frame": 0.4166666666666667, + "value": { + "__uuid__": "bba6f088-0e1f-4a12-9872-41670be1152a" + } + }, + { + "frame": 0.45, + "value": { + "__uuid__": "2c5de5b2-9009-48fa-bef4-ae34cc94f876" + } + }, + { + "frame": 0.48333333333333334, + "value": { + "__uuid__": "6f27b252-6eaf-4b4b-9c5a-46ba899e4845" + } + }, + { + "frame": 0.5166666666666667, + "value": { + "__uuid__": "4ebd5c60-efa6-4950-a4c8-74a7a8517333" + } + }, + { + "frame": 0.55, + "value": { + "__uuid__": "a207290f-4556-4adb-8a11-e1d5ba342550" + } + }, + { + "frame": 0.5833333333333334, + "value": { + "__uuid__": "e9d442d2-981d-437d-87c0-085162017de7" + } + }, + { + "frame": 0.6166666666666667, + "value": { + "__uuid__": "9b4d5c8c-5ec0-4fd7-a45e-6b0bc8ff9119" + } + } + ] + } + } + }, + "events": [] +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/Atk3.anim.meta b/frontend/assets/resources/animation/Monk/Atk3.anim.meta new file mode 100644 index 0000000..dfd6165 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/Atk3.anim.meta @@ -0,0 +1,5 @@ +{ + "ver": "2.1.0", + "uuid": "504dd9c8-7850-44e8-a944-bbdb2260b18a", + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/Atk4.anim b/frontend/assets/resources/animation/Monk/Atk4.anim new file mode 100644 index 0000000..107a2b0 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/Atk4.anim @@ -0,0 +1,115 @@ +{ + "__type__": "cc.AnimationClip", + "_name": "Atk4", + "_objFlags": 0, + "_native": "", + "_duration": 0.6833333333333333, + "sample": 60, + "speed": 1, + "wrapMode": 1, + "curveData": { + "comps": { + "cc.Sprite": { + "spriteFrame": [ + { + "frame": 0, + "value": { + "__uuid__": "a4f724de-140f-472a-be83-731520d3da38" + } + }, + { + "frame": 0.03333333333333333, + "value": { + "__uuid__": "3594a12d-5b5c-4dc6-8138-1b48eacf0798" + } + }, + { + "frame": 0.05, + "value": { + "__uuid__": "cdef413d-f009-45d3-aeb6-423652fc366d" + } + }, + { + "frame": 0.08333333333333333, + "value": { + "__uuid__": "688682c4-ea77-4d2c-b1e4-079f5880d3cd" + } + }, + { + "frame": 0.11666666666666667, + "value": { + "__uuid__": "ca9f0a44-9977-4b24-8243-ac5536f14bc8" + } + }, + { + "frame": 0.15, + "value": { + "__uuid__": "6b4dbc7c-a872-40d6-be0e-4d1a96eddd44" + } + }, + { + "frame": 0.2, + "value": { + "__uuid__": "b43c8a38-1d55-4d6b-b6a1-fc888a9e53b5" + } + }, + { + "frame": 0.25, + "value": { + "__uuid__": "0eb3d73a-a724-46f3-b1f1-56d315150320" + } + }, + { + "frame": 0.3, + "value": { + "__uuid__": "ddac83f4-f0bf-460e-9a83-cc75c69ef024" + } + }, + { + "frame": 0.35, + "value": { + "__uuid__": "8e673fdc-2cc8-435c-8a0d-38dcfc7b8600" + } + }, + { + "frame": 0.4, + "value": { + "__uuid__": "7a345895-6501-4388-88f6-984992a3799b" + } + }, + { + "frame": 0.4666666666666667, + "value": { + "__uuid__": "99b4e340-52ca-4f3e-a86f-ca385ff8797a" + } + }, + { + "frame": 0.5166666666666667, + "value": { + "__uuid__": "554d0862-0d1c-4f61-8d47-03362cd9eb1d" + } + }, + { + "frame": 0.5666666666666667, + "value": { + "__uuid__": "cd15a283-cf0d-48d4-9162-2d72202baf82" + } + }, + { + "frame": 0.6166666666666667, + "value": { + "__uuid__": "b2bb7fdf-2532-408f-a3d1-fe8bf0e34f61" + } + }, + { + "frame": 0.6666666666666666, + "value": { + "__uuid__": "435c0195-a5c3-4a8f-9d44-e6f026649b70" + } + } + ] + } + } + }, + "events": [] +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/Atk4.anim.meta b/frontend/assets/resources/animation/Monk/Atk4.anim.meta new file mode 100644 index 0000000..ad85427 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/Atk4.anim.meta @@ -0,0 +1,5 @@ +{ + "ver": "2.1.0", + "uuid": "7e0a1e98-ee5a-446f-bec2-7d72b6916503", + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/Atked1.anim b/frontend/assets/resources/animation/Monk/Atked1.anim new file mode 100644 index 0000000..cfb9f41 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/Atked1.anim @@ -0,0 +1,31 @@ +{ + "__type__": "cc.AnimationClip", + "_name": "Atked1", + "_objFlags": 0, + "_native": "", + "_duration": 0.06666666666666667, + "sample": 60, + "speed": 1, + "wrapMode": 1, + "curveData": { + "comps": { + "cc.Sprite": { + "spriteFrame": [ + { + "frame": 0, + "value": { + "__uuid__": "7ceb8a79-f5bf-4918-afa1-d76a85a571b0" + } + }, + { + "frame": 0.05, + "value": { + "__uuid__": "23ce7632-8b44-4138-b3b2-3e296ba9184c" + } + } + ] + } + } + }, + "events": [] +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/Atked1.anim.meta b/frontend/assets/resources/animation/Monk/Atked1.anim.meta new file mode 100644 index 0000000..a98ce13 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/Atked1.anim.meta @@ -0,0 +1,5 @@ +{ + "ver": "2.1.0", + "uuid": "488ad635-2683-4884-9e93-d1ee67bd0e49", + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/BlownUp1.anim b/frontend/assets/resources/animation/Monk/BlownUp1.anim new file mode 100644 index 0000000..7ccb1e0 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/BlownUp1.anim @@ -0,0 +1,133 @@ +{ + "__type__": "cc.AnimationClip", + "_name": "BlownUp1", + "_objFlags": 0, + "_native": "", + "_duration": 0.55, + "sample": 60, + "speed": 1, + "wrapMode": 1, + "curveData": { + "comps": { + "cc.Sprite": { + "spriteFrame": [ + { + "frame": 0, + "value": { + "__uuid__": "ba708108-b18f-4ec0-81f6-0e516e4f832b" + } + }, + { + "frame": 0.016666666666666666, + "value": { + "__uuid__": "aeeaa976-f3b4-4b77-a18b-b08ddd28d812" + } + }, + { + "frame": 0.03333333333333333, + "value": { + "__uuid__": "89d06edf-8838-4ab4-adbd-059acf21dc8c" + } + }, + { + "frame": 0.05, + "value": { + "__uuid__": "c2f38b89-f7a0-477b-921c-f56ee385b737" + } + }, + { + "frame": 0.08333333333333333, + "value": { + "__uuid__": "90186972-a736-449d-8e64-d15c4ebcbfd1" + } + }, + { + "frame": 0.11666666666666667, + "value": { + "__uuid__": "1d64b1f5-5f08-4247-a43c-ffe2d58e09df" + } + }, + { + "frame": 0.15, + "value": { + "__uuid__": "cf158505-bb9c-4836-b45f-2b253dfef117" + } + }, + { + "frame": 0.18333333333333332, + "value": { + "__uuid__": "a2984de9-99db-40bf-9969-0b163a97d9eb" + } + }, + { + "frame": 0.21666666666666667, + "value": { + "__uuid__": "66f0b5dc-4e0e-4597-a7f9-b9ee6752bc98" + } + }, + { + "frame": 0.25, + "value": { + "__uuid__": "3cf0f5bd-0104-4315-a750-55b5fb26e1ec" + } + }, + { + "frame": 0.2833333333333333, + "value": { + "__uuid__": "a31b8683-ca31-4268-80d6-5b117af86ee6" + } + }, + { + "frame": 0.31666666666666665, + "value": { + "__uuid__": "a7ab4cb1-2221-4aba-8ced-dc93d8dca2f3" + } + }, + { + "frame": 0.35, + "value": { + "__uuid__": "2ac3a00d-059a-4e15-a9cb-378bd671c9f3" + } + }, + { + "frame": 0.38333333333333336, + "value": { + "__uuid__": "2b5cab9a-420c-406a-bef4-6aaee4ae6e8f" + } + }, + { + "frame": 0.4166666666666667, + "value": { + "__uuid__": "6df0a35f-062b-49ec-aa73-146f8b2207a7" + } + }, + { + "frame": 0.45, + "value": { + "__uuid__": "afaac620-4293-4336-9a44-bf7927c6751c" + } + }, + { + "frame": 0.48333333333333334, + "value": { + "__uuid__": "410823b3-14e4-475b-b658-dc4d5325f307" + } + }, + { + "frame": 0.5166666666666667, + "value": { + "__uuid__": "34a43c48-497b-4495-97c9-8de53cbcc229" + } + }, + { + "frame": 0.5333333333333333, + "value": { + "__uuid__": "c7ffc314-70ae-4a2b-9238-db1778a336d1" + } + } + ] + } + } + }, + "events": [] +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/BlownUp1.anim.meta b/frontend/assets/resources/animation/Monk/BlownUp1.anim.meta new file mode 100644 index 0000000..39a104f --- /dev/null +++ b/frontend/assets/resources/animation/Monk/BlownUp1.anim.meta @@ -0,0 +1,5 @@ +{ + "ver": "2.1.0", + "uuid": "8e17dfc6-68d0-47fe-af06-d30dc2790a6b", + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/GetUp1.anim b/frontend/assets/resources/animation/Monk/GetUp1.anim new file mode 100644 index 0000000..4aadb33 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/GetUp1.anim @@ -0,0 +1,91 @@ +{ + "__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__": "ec0d05f4-3c30-4107-b9b4-3ccff5fb9a02" + } + }, + { + "frame": 0.03333333333333333, + "value": { + "__uuid__": "3e0fa075-ffdc-490f-872c-b77e202df224" + } + }, + { + "frame": 0.06666666666666667, + "value": { + "__uuid__": "f3c8e924-c86a-426b-a3de-ffc6e19060f3" + } + }, + { + "frame": 0.1, + "value": { + "__uuid__": "35b847f0-f3f7-4ec9-ba93-5616f763d658" + } + }, + { + "frame": 0.13333333333333333, + "value": { + "__uuid__": "a018eecc-27e6-4d60-973f-ed9fe86a147e" + } + }, + { + "frame": 0.18333333333333332, + "value": { + "__uuid__": "3d70f10e-a3f7-4b7a-aedb-a010ad946abe" + } + }, + { + "frame": 0.23333333333333334, + "value": { + "__uuid__": "b860cb8a-2445-49bc-96f0-aac4396be922" + } + }, + { + "frame": 0.2833333333333333, + "value": { + "__uuid__": "bddec025-747e-4602-9352-6fc3bf921dc0" + } + }, + { + "frame": 0.3333333333333333, + "value": { + "__uuid__": "22053496-5240-40d3-98bd-49e16d05f7f9" + } + }, + { + "frame": 0.4, + "value": { + "__uuid__": "9de8f787-3059-403d-bdcb-f7d4bd59ba65" + } + }, + { + "frame": 0.45, + "value": { + "__uuid__": "471de8d2-34ee-4605-b8c5-9f3983db8a04" + } + }, + { + "frame": 0.5, + "value": { + "__uuid__": "a4cb5179-60eb-41f8-bcef-56ce3299da19" + } + } + ] + } + } + }, + "events": [] +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/GetUp1.anim.meta b/frontend/assets/resources/animation/Monk/GetUp1.anim.meta new file mode 100644 index 0000000..ced9fb6 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/GetUp1.anim.meta @@ -0,0 +1,5 @@ +{ + "ver": "2.1.0", + "uuid": "da6a7cc1-9709-42f4-b6d0-17c1917a08a3", + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/Idle1.anim b/frontend/assets/resources/animation/Monk/Idle1.anim new file mode 100644 index 0000000..b2a5d69 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/Idle1.anim @@ -0,0 +1,67 @@ +{ + "__type__": "cc.AnimationClip", + "_name": "Idle1", + "_objFlags": 0, + "_native": "", + "_duration": 0.8333333333333334, + "sample": 60, + "speed": 1, + "wrapMode": 2, + "curveData": { + "comps": { + "cc.Sprite": { + "spriteFrame": [ + { + "frame": 0, + "value": { + "__uuid__": "2c5f2d24-01f1-4a0f-8ddc-eacfbc9b6208" + } + }, + { + "frame": 0.13333333333333333, + "value": { + "__uuid__": "fd29846b-1998-49ba-89f6-f665b9ea7002" + } + }, + { + "frame": 0.23333333333333334, + "value": { + "__uuid__": "e3b30506-3a86-462e-b265-e7f6c7c09dc5" + } + }, + { + "frame": 0.36666666666666664, + "value": { + "__uuid__": "84f15682-b73e-443d-8d9f-f530f152bcce" + } + }, + { + "frame": 0.5, + "value": { + "__uuid__": "45249fea-e7e7-4b68-8971-49d825960248" + } + }, + { + "frame": 0.6166666666666667, + "value": { + "__uuid__": "ca561428-9e45-41a9-8d66-c0468d4c85d9" + } + }, + { + "frame": 0.7166666666666667, + "value": { + "__uuid__": "062f3bd5-beca-435a-8d82-524fd51a88a0" + } + }, + { + "frame": 0.8166666666666667, + "value": { + "__uuid__": "23068811-a6e5-4ef5-960f-7e6dea328c84" + } + } + ] + } + } + }, + "events": [] +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/Idle1.anim.meta b/frontend/assets/resources/animation/Monk/Idle1.anim.meta new file mode 100644 index 0000000..589c73b --- /dev/null +++ b/frontend/assets/resources/animation/Monk/Idle1.anim.meta @@ -0,0 +1,5 @@ +{ + "ver": "2.1.0", + "uuid": "2d402c67-e47d-4de0-8a80-40bc12073ffc", + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/InAirAtk1.anim b/frontend/assets/resources/animation/Monk/InAirAtk1.anim new file mode 100644 index 0000000..5cef3c0 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/InAirAtk1.anim @@ -0,0 +1,79 @@ +{ + "__type__": "cc.AnimationClip", + "_name": "InAirAtk1", + "_objFlags": 0, + "_native": "", + "_duration": 0.6, + "sample": 60, + "speed": 1, + "wrapMode": 1, + "curveData": { + "comps": { + "cc.Sprite": { + "spriteFrame": [ + { + "frame": 0, + "value": { + "__uuid__": "70adb814-3dca-492f-a0fe-36d4d6b37e01" + } + }, + { + "frame": 0.06666666666666667, + "value": { + "__uuid__": "7c67ab61-96e0-4c43-a2d8-742fa1021107" + } + }, + { + "frame": 0.15, + "value": { + "__uuid__": "beb4bc62-b6bf-4a07-973e-1b91e3942ab3" + } + }, + { + "frame": 0.21666666666666667, + "value": { + "__uuid__": "422441bd-8551-46d3-9383-162553035080" + } + }, + { + "frame": 0.3, + "value": { + "__uuid__": "312f8dd2-7d02-4a80-a960-17d197c96da4" + } + }, + { + "frame": 0.35, + "value": { + "__uuid__": "42597d6a-b982-43aa-90bd-2e9a01063628" + } + }, + { + "frame": 0.45, + "value": { + "__uuid__": "487b65c3-44e3-4b0e-9350-e0d1c952785b" + } + }, + { + "frame": 0.5, + "value": { + "__uuid__": "9a5357ae-a160-4198-a6d5-cc9631fde754" + } + }, + { + "frame": 0.5333333333333333, + "value": { + "__uuid__": "d08fc3b2-f6e8-4ff8-bba4-69ce3eb771df" + } + }, + { + "frame": 0.5833333333333334, + "value": { + "__uuid__": "9f8ef3e0-6f56-41d2-97d1-ac7f3cc690ee" + } + } + ] + } + } + }, + "events": [] +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/InAirAtk1.anim.meta b/frontend/assets/resources/animation/Monk/InAirAtk1.anim.meta new file mode 100644 index 0000000..4d8202b --- /dev/null +++ b/frontend/assets/resources/animation/Monk/InAirAtk1.anim.meta @@ -0,0 +1,5 @@ +{ + "ver": "2.1.0", + "uuid": "5035ddfe-ff75-4dff-a506-89cbb26220da", + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/InAirAtked1.anim b/frontend/assets/resources/animation/Monk/InAirAtked1.anim new file mode 100644 index 0000000..5812852 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/InAirAtked1.anim @@ -0,0 +1,49 @@ +{ + "__type__": "cc.AnimationClip", + "_name": "InAirAtked1", + "_objFlags": 0, + "_native": "", + "_duration": 0.25, + "sample": 60, + "speed": 1, + "wrapMode": 1, + "curveData": { + "comps": { + "cc.Sprite": { + "spriteFrame": [ + { + "frame": 0, + "value": { + "__uuid__": "39c94369-a78d-459d-9305-13a2b9c15225" + } + }, + { + "frame": 0.05, + "value": { + "__uuid__": "c85b7940-7bb2-4597-a309-155b7a116f94" + } + }, + { + "frame": 0.11666666666666667, + "value": { + "__uuid__": "78f498f8-6517-4e28-91f9-b70ee87beff9" + } + }, + { + "frame": 0.18333333333333332, + "value": { + "__uuid__": "02247899-3345-411a-aaa3-65e2f5e0b3e6" + } + }, + { + "frame": 0.23333333333333334, + "value": { + "__uuid__": "bec5291d-8f6e-426c-8e16-1d0239a69bad" + } + } + ] + } + } + }, + "events": [] +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/InAirAtked1.anim.meta b/frontend/assets/resources/animation/Monk/InAirAtked1.anim.meta new file mode 100644 index 0000000..85f8a0a --- /dev/null +++ b/frontend/assets/resources/animation/Monk/InAirAtked1.anim.meta @@ -0,0 +1,5 @@ +{ + "ver": "2.1.0", + "uuid": "ac0fa38d-d3ad-4dff-841d-4d98ee5017db", + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/InAirIdle1ByJump.anim b/frontend/assets/resources/animation/Monk/InAirIdle1ByJump.anim new file mode 100644 index 0000000..19f7630 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/InAirIdle1ByJump.anim @@ -0,0 +1,91 @@ +{ + "__type__": "cc.AnimationClip", + "_name": "InAirIdle1ByJump", + "_objFlags": 0, + "_native": "", + "_duration": 0.7833333333333333, + "sample": 60, + "speed": 1, + "wrapMode": 1, + "curveData": { + "comps": { + "cc.Sprite": { + "spriteFrame": [ + { + "frame": 0, + "value": { + "__uuid__": "493a132d-af22-4621-842a-9fdc645b3e43" + } + }, + { + "frame": 0.05, + "value": { + "__uuid__": "06d18871-0cb6-41eb-a484-5c6a4c04d5d5" + } + }, + { + "frame": 0.11666666666666667, + "value": { + "__uuid__": "f298ff82-ad9d-4945-ab19-14c3e3d54c95" + } + }, + { + "frame": 0.18333333333333332, + "value": { + "__uuid__": "bb5924a6-40cf-4e43-8c94-e51b27861656" + } + }, + { + "frame": 0.25, + "value": { + "__uuid__": "fc4b5181-77af-44ec-836e-c14eec8d20c4" + } + }, + { + "frame": 0.3333333333333333, + "value": { + "__uuid__": "5ddd3db3-79b2-4f0c-bb76-2446801ff665" + } + }, + { + "frame": 0.4166666666666667, + "value": { + "__uuid__": "032785ce-c911-479b-be1c-2e0899a586d0" + } + }, + { + "frame": 0.48333333333333334, + "value": { + "__uuid__": "d651269d-1c08-49f8-bc38-d301bf26b0e1" + } + }, + { + "frame": 0.5666666666666667, + "value": { + "__uuid__": "e270563e-d98d-4a80-82db-837183053ae3" + } + }, + { + "frame": 0.6333333333333333, + "value": { + "__uuid__": "aec31ef8-46dc-4f0e-9cba-18f6c96c5c33" + } + }, + { + "frame": 0.7, + "value": { + "__uuid__": "e64b3a8d-41a9-45f6-9aeb-9e49b6317080" + } + }, + { + "frame": 0.7666666666666667, + "value": { + "__uuid__": "cf886091-24a9-4cfb-8cb9-e3db977035ab" + } + } + ] + } + } + }, + "events": [] +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/InAirIdle1ByJump.anim.meta b/frontend/assets/resources/animation/Monk/InAirIdle1ByJump.anim.meta new file mode 100644 index 0000000..07d6283 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/InAirIdle1ByJump.anim.meta @@ -0,0 +1,5 @@ +{ + "ver": "2.1.0", + "uuid": "a4315723-e7b6-40e7-9a3c-bac959378b90", + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/InAirIdle1NoJump.anim b/frontend/assets/resources/animation/Monk/InAirIdle1NoJump.anim new file mode 100644 index 0000000..afeb00a --- /dev/null +++ b/frontend/assets/resources/animation/Monk/InAirIdle1NoJump.anim @@ -0,0 +1,31 @@ +{ + "__type__": "cc.AnimationClip", + "_name": "InAirIdle1NoJump", + "_objFlags": 0, + "_native": "", + "_duration": 0.2833333333333333, + "sample": 60, + "speed": 1, + "wrapMode": 2, + "curveData": { + "comps": { + "cc.Sprite": { + "spriteFrame": [ + { + "frame": 0, + "value": { + "__uuid__": "e64b3a8d-41a9-45f6-9aeb-9e49b6317080" + } + }, + { + "frame": 0.26666666666666666, + "value": { + "__uuid__": "cf886091-24a9-4cfb-8cb9-e3db977035ab" + } + } + ] + } + } + }, + "events": [] +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/InAirIdle1NoJump.anim.meta b/frontend/assets/resources/animation/Monk/InAirIdle1NoJump.anim.meta new file mode 100644 index 0000000..caf0c1b --- /dev/null +++ b/frontend/assets/resources/animation/Monk/InAirIdle1NoJump.anim.meta @@ -0,0 +1,5 @@ +{ + "ver": "2.1.0", + "uuid": "53b0ae11-f77f-4c3a-9e6d-76159d135c2c", + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/LayDown1.anim b/frontend/assets/resources/animation/Monk/LayDown1.anim new file mode 100644 index 0000000..b785db8 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/LayDown1.anim @@ -0,0 +1,97 @@ +{ + "__type__": "cc.AnimationClip", + "_name": "LayDown1", + "_objFlags": 0, + "_native": "", + "_duration": 0.23333333333333334, + "sample": 60, + "speed": 1, + "wrapMode": 1, + "curveData": { + "comps": { + "cc.Sprite": { + "spriteFrame": [ + { + "frame": 0, + "value": { + "__uuid__": "b521e99d-b206-4453-bcb7-55d0049a229a" + } + }, + { + "frame": 0.016666666666666666, + "value": { + "__uuid__": "04656482-51fb-4a3d-aa3a-28c682ff4852" + } + }, + { + "frame": 0.03333333333333333, + "value": { + "__uuid__": "44b85e26-64bb-47d9-90ba-4ae8c10fd9f1" + } + }, + { + "frame": 0.05, + "value": { + "__uuid__": "2afb056b-e83a-4074-ac6c-ac6edaa0ff37" + } + }, + { + "frame": 0.08333333333333333, + "value": { + "__uuid__": "0ca0d5ca-01d3-4013-8819-1f79be60fa91" + } + }, + { + "frame": 0.1, + "value": { + "__uuid__": "50902f57-47ef-4e07-beec-f633a96c5116" + } + }, + { + "frame": 0.11666666666666667, + "value": { + "__uuid__": "78914b1e-5202-4b2a-86b8-696bc989d43a" + } + }, + { + "frame": 0.13333333333333333, + "value": { + "__uuid__": "5dd8649a-7fd4-4c82-b4c9-17739901e637" + } + }, + { + "frame": 0.15, + "value": { + "__uuid__": "76fcd7e0-0841-4308-a152-a561aec76659" + } + }, + { + "frame": 0.16666666666666666, + "value": { + "__uuid__": "32b61366-3f7e-4e83-88f1-9c63d6fb45de" + } + }, + { + "frame": 0.18333333333333332, + "value": { + "__uuid__": "8b692f1c-570e-4c35-a40d-e3b6b5973396" + } + }, + { + "frame": 0.2, + "value": { + "__uuid__": "756ff6b2-3c2d-4a5b-87f3-1e37073d80e5" + } + }, + { + "frame": 0.21666666666666667, + "value": { + "__uuid__": "dc43217f-afeb-42fb-bdea-04b18ffee56f" + } + } + ] + } + } + }, + "events": [] +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/LayDown1.anim.meta b/frontend/assets/resources/animation/Monk/LayDown1.anim.meta new file mode 100644 index 0000000..51816cf --- /dev/null +++ b/frontend/assets/resources/animation/Monk/LayDown1.anim.meta @@ -0,0 +1,5 @@ +{ + "ver": "2.1.0", + "uuid": "e4faa04d-28f5-40b0-b1a5-99cd902e5fd6", + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/Monk.plist b/frontend/assets/resources/animation/Monk/Monk.plist new file mode 100644 index 0000000..012af0b --- /dev/null +++ b/frontend/assets/resources/animation/Monk/Monk.plist @@ -0,0 +1,2201 @@ + + + + + frames + + Atk1_1.png + + aliases + + spriteOffset + {0,0} + spriteSize + {121,107} + spriteSourceSize + {121,107} + textureRect + {{322,604},{121,107}} + textureRotated + + + Atk1_2.png + + aliases + + spriteOffset + {0,0} + spriteSize + {121,107} + spriteSourceSize + {121,107} + textureRect + {{340,1813},{121,107}} + textureRotated + + + Atk1_3.png + + aliases + + spriteOffset + {0,0} + spriteSize + {121,107} + spriteSourceSize + {121,107} + textureRect + {{503,1080},{121,107}} + textureRotated + + + Atk1_4.png + + aliases + + spriteOffset + {0,0} + spriteSize + {121,107} + spriteSourceSize + {121,107} + textureRect + {{503,1080},{121,107}} + textureRotated + + + Atk1_5.png + + aliases + + spriteOffset + {0,0} + spriteSize + {121,107} + spriteSourceSize + {121,107} + textureRect + {{503,1080},{121,107}} + textureRotated + + + Atk1_6.png + + aliases + + spriteOffset + {0,0} + spriteSize + {121,107} + spriteSourceSize + {121,107} + textureRect + {{503,1187},{121,107}} + textureRotated + + + Atk1_7.png + + aliases + + spriteOffset + {0,0} + spriteSize + {121,107} + spriteSourceSize + {121,107} + textureRect + {{368,1294},{121,107}} + textureRotated + + + Atk2_1.png + + aliases + + spriteOffset + {0,0} + spriteSize + {123,113} + spriteSourceSize + {123,113} + textureRect + {{245,1260},{123,113}} + textureRotated + + + Atk2_10.png + + aliases + + spriteOffset + {0,0} + spriteSize + {123,113} + spriteSourceSize + {123,113} + textureRect + {{245,1373},{123,113}} + textureRotated + + + Atk2_11.png + + aliases + + spriteOffset + {0,0} + spriteSize + {123,113} + spriteSourceSize + {123,113} + textureRect + {{245,1486},{123,113}} + textureRotated + + + Atk2_12.png + + aliases + + spriteOffset + {0,0} + spriteSize + {123,113} + spriteSourceSize + {123,113} + textureRect + {{245,1599},{123,113}} + textureRotated + + + Atk2_13.png + + aliases + + spriteOffset + {0,0} + spriteSize + {123,113} + spriteSourceSize + {123,113} + textureRect + {{380,741},{123,113}} + textureRotated + + + Atk2_14.png + + aliases + + spriteOffset + {0,0} + spriteSize + {123,113} + spriteSourceSize + {123,113} + textureRect + {{380,854},{123,113}} + textureRotated + + + Atk2_2.png + + aliases + + spriteOffset + {0,0} + spriteSize + {123,113} + spriteSourceSize + {123,113} + textureRect + {{503,741},{123,113}} + textureRotated + + + Atk2_3.png + + aliases + + spriteOffset + {0,0} + spriteSize + {123,113} + spriteSourceSize + {123,113} + textureRect + {{380,967},{123,113}} + textureRotated + + + Atk2_4.png + + aliases + + spriteOffset + {0,0} + spriteSize + {123,113} + spriteSourceSize + {123,113} + textureRect + {{503,854},{123,113}} + textureRotated + + + Atk2_5.png + + aliases + + spriteOffset + {0,0} + spriteSize + {123,113} + spriteSourceSize + {123,113} + textureRect + {{380,1080},{123,113}} + textureRotated + + + Atk2_6.png + + aliases + + spriteOffset + {0,0} + spriteSize + {123,113} + spriteSourceSize + {123,113} + textureRect + {{380,1080},{123,113}} + textureRotated + + + Atk2_7.png + + aliases + + spriteOffset + {0,0} + spriteSize + {123,113} + spriteSourceSize + {123,113} + textureRect + {{503,967},{123,113}} + textureRotated + + + Atk2_8.png + + aliases + + spriteOffset + {0,0} + spriteSize + {123,113} + spriteSourceSize + {123,113} + textureRect + {{503,967},{123,113}} + textureRotated + + + Atk2_9.png + + aliases + + spriteOffset + {0,0} + spriteSize + {123,113} + spriteSourceSize + {123,113} + textureRect + {{245,1373},{123,113}} + textureRotated + + + Atk3_1.png + + aliases + + spriteOffset + {0,0} + spriteSize + {101,123} + spriteSourceSize + {101,123} + textureRect + {{245,1712},{101,123}} + textureRotated + + + Atk3_10.png + + aliases + + spriteOffset + {0,0} + spriteSize + {101,123} + spriteSourceSize + {101,123} + textureRect + {{380,1193},{101,123}} + textureRotated + + + Atk3_11.png + + aliases + + spriteOffset + {0,0} + spriteSize + {101,123} + spriteSourceSize + {101,123} + textureRect + {{368,1401},{101,123}} + textureRotated + + + Atk3_12.png + + aliases + + spriteOffset + {0,0} + spriteSize + {101,123} + spriteSourceSize + {101,123} + textureRect + {{489,1294},{101,123}} + textureRotated + + + Atk3_13.png + + aliases + + spriteOffset + {0,0} + spriteSize + {101,123} + spriteSourceSize + {101,123} + textureRect + {{368,1524},{101,123}} + textureRotated + + + Atk3_14.png + + aliases + + spriteOffset + {0,0} + spriteSize + {101,123} + spriteSourceSize + {101,123} + textureRect + {{368,1647},{101,123}} + textureRotated + + + Atk3_2.png + + aliases + + spriteOffset + {0,0} + spriteSize + {101,123} + spriteSourceSize + {101,123} + textureRect + {{626,743},{101,123}} + textureRotated + + + Atk3_3.png + + aliases + + spriteOffset + {0,0} + spriteSize + {101,123} + spriteSourceSize + {101,123} + textureRect + {{626,866},{101,123}} + textureRotated + + + Atk3_4.png + + aliases + + spriteOffset + {0,0} + spriteSize + {101,123} + spriteSourceSize + {101,123} + textureRect + {{727,743},{101,123}} + textureRotated + + + Atk3_5.png + + aliases + + spriteOffset + {0,0} + spriteSize + {101,123} + spriteSourceSize + {101,123} + textureRect + {{727,866},{101,123}} + textureRotated + + + Atk3_6.png + + aliases + + spriteOffset + {0,0} + spriteSize + {101,123} + spriteSourceSize + {101,123} + textureRect + {{828,743},{101,123}} + textureRotated + + + Atk3_7.png + + aliases + + spriteOffset + {0,0} + spriteSize + {101,123} + spriteSourceSize + {101,123} + textureRect + {{828,743},{101,123}} + textureRotated + + + Atk3_8.png + + aliases + + spriteOffset + {0,0} + spriteSize + {101,123} + spriteSourceSize + {101,123} + textureRect + {{828,866},{101,123}} + textureRotated + + + Atk3_9.png + + aliases + + spriteOffset + {0,0} + spriteSize + {101,123} + spriteSourceSize + {101,123} + textureRect + {{626,989},{101,123}} + textureRotated + + + Atk4_1.png + + aliases + + spriteOffset + {0,0} + spriteSize + {135,107} + spriteSourceSize + {135,107} + textureRect + {{322,469},{135,107}} + textureRotated + + + Atk4_10.png + + aliases + + spriteOffset + {0,0} + spriteSize + {135,107} + spriteSourceSize + {135,107} + textureRect + {{707,422},{135,107}} + textureRotated + + + Atk4_11.png + + aliases + + spriteOffset + {0,0} + spriteSize + {135,107} + spriteSourceSize + {135,107} + textureRect + {{842,422},{135,107}} + textureRotated + + + Atk4_12.png + + aliases + + spriteOffset + {0,0} + spriteSize + {135,107} + spriteSourceSize + {135,107} + textureRect + {{429,527},{135,107}} + textureRotated + + + Atk4_13.png + + aliases + + spriteOffset + {0,0} + spriteSize + {135,107} + spriteSourceSize + {135,107} + textureRect + {{564,527},{135,107}} + textureRotated + + + Atk4_14.png + + aliases + + spriteOffset + {0,0} + spriteSize + {135,107} + spriteSourceSize + {135,107} + textureRect + {{699,529},{135,107}} + textureRotated + + + Atk4_15.png + + aliases + + spriteOffset + {0,0} + spriteSize + {135,107} + spriteSourceSize + {135,107} + textureRect + {{834,529},{135,107}} + textureRotated + + + Atk4_16.png + + aliases + + spriteOffset + {0,0} + spriteSize + {135,107} + spriteSourceSize + {135,107} + textureRect + {{429,634},{135,107}} + textureRotated + + + Atk4_2.png + + aliases + + spriteOffset + {0,0} + spriteSize + {135,107} + spriteSourceSize + {135,107} + textureRect + {{564,634},{135,107}} + textureRotated + + + Atk4_3.png + + aliases + + spriteOffset + {0,0} + spriteSize + {135,107} + spriteSourceSize + {135,107} + textureRect + {{699,636},{135,107}} + textureRotated + + + Atk4_4.png + + aliases + + spriteOffset + {0,0} + spriteSize + {135,107} + spriteSourceSize + {135,107} + textureRect + {{834,636},{135,107}} + textureRotated + + + Atk4_5.png + + aliases + + spriteOffset + {0,0} + spriteSize + {135,107} + spriteSourceSize + {135,107} + textureRect + {{245,725},{135,107}} + textureRotated + + + Atk4_6.png + + aliases + + spriteOffset + {0,0} + spriteSize + {135,107} + spriteSourceSize + {135,107} + textureRect + {{245,832},{135,107}} + textureRotated + + + Atk4_7.png + + aliases + + spriteOffset + {0,0} + spriteSize + {135,107} + spriteSourceSize + {135,107} + textureRect + {{245,939},{135,107}} + textureRotated + + + Atk4_8.png + + aliases + + spriteOffset + {0,0} + spriteSize + {135,107} + spriteSourceSize + {135,107} + textureRect + {{245,1046},{135,107}} + textureRotated + + + Atk4_9.png + + aliases + + spriteOffset + {0,0} + spriteSize + {135,107} + spriteSourceSize + {135,107} + textureRect + {{245,1153},{135,107}} + textureRotated + + + Atked1_1.png + + aliases + + spriteOffset + {0,0} + spriteSize + {86,104} + spriteSourceSize + {86,104} + textureRect + {{664,1659},{86,104}} + textureRotated + + + Atked1_2.png + + aliases + + spriteOffset + {0,0} + spriteSize + {86,104} + spriteSourceSize + {86,104} + textureRect + {{756,1806},{86,104}} + textureRotated + + + BlownUp1_1.png + + aliases + + spriteOffset + {0,0} + spriteSize + {140,114} + spriteSourceSize + {140,114} + textureRect + {{296,136},{140,114}} + textureRotated + + + BlownUp1_10.png + + aliases + + spriteOffset + {0,0} + spriteSize + {140,114} + spriteSourceSize + {140,114} + textureRect + {{444,0},{140,114}} + textureRotated + + + BlownUp1_11.png + + aliases + + spriteOffset + {0,0} + spriteSize + {140,114} + spriteSourceSize + {140,114} + textureRect + {{0,544},{140,114}} + textureRotated + + + BlownUp1_12.png + + aliases + + spriteOffset + {0,0} + spriteSize + {140,114} + spriteSourceSize + {140,114} + textureRect + {{148,408},{140,114}} + textureRotated + + + BlownUp1_13.png + + aliases + + spriteOffset + {0,0} + spriteSize + {140,114} + spriteSourceSize + {140,114} + textureRect + {{296,250},{140,114}} + textureRotated + + + BlownUp1_14.png + + aliases + + spriteOffset + {0,0} + spriteSize + {140,114} + spriteSourceSize + {140,114} + textureRect + {{584,0},{140,114}} + textureRotated + + + BlownUp1_15.png + + aliases + + spriteOffset + {0,0} + spriteSize + {140,114} + spriteSourceSize + {140,114} + textureRect + {{0,658},{140,114}} + textureRotated + + + BlownUp1_16.png + + aliases + + spriteOffset + {0,0} + spriteSize + {140,114} + spriteSourceSize + {140,114} + textureRect + {{724,0},{140,114}} + textureRotated + + + BlownUp1_17.png + + aliases + + spriteOffset + {0,0} + spriteSize + {140,114} + spriteSourceSize + {140,114} + textureRect + {{0,772},{140,114}} + textureRotated + + + BlownUp1_18.png + + aliases + + spriteOffset + {0,0} + spriteSize + {140,114} + spriteSourceSize + {140,114} + textureRect + {{864,0},{140,114}} + textureRotated + + + BlownUp1_19.png + + aliases + + spriteOffset + {0,0} + spriteSize + {140,114} + spriteSourceSize + {140,114} + textureRect + {{0,886},{140,114}} + textureRotated + + + BlownUp1_2.png + + aliases + + spriteOffset + {0,0} + spriteSize + {140,114} + spriteSourceSize + {140,114} + textureRect + {{0,1000},{140,114}} + textureRotated + + + BlownUp1_3.png + + aliases + + spriteOffset + {0,0} + spriteSize + {140,114} + spriteSourceSize + {140,114} + textureRect + {{0,1114},{140,114}} + textureRotated + + + BlownUp1_4.png + + aliases + + spriteOffset + {0,0} + spriteSize + {140,114} + spriteSourceSize + {140,114} + textureRect + {{0,1228},{140,114}} + textureRotated + + + BlownUp1_5.png + + aliases + + spriteOffset + {0,0} + spriteSize + {140,114} + spriteSourceSize + {140,114} + textureRect + {{0,1342},{140,114}} + textureRotated + + + BlownUp1_6.png + + aliases + + spriteOffset + {0,0} + spriteSize + {140,114} + spriteSourceSize + {140,114} + textureRect + {{0,1456},{140,114}} + textureRotated + + + BlownUp1_7.png + + aliases + + spriteOffset + {0,0} + spriteSize + {140,114} + spriteSourceSize + {140,114} + textureRect + {{0,1570},{140,114}} + textureRotated + + + BlownUp1_8.png + + aliases + + spriteOffset + {0,0} + spriteSize + {140,114} + spriteSourceSize + {140,114} + textureRect + {{0,1684},{140,114}} + textureRotated + + + BlownUp1_9.png + + aliases + + spriteOffset + {0,0} + spriteSize + {140,114} + spriteSourceSize + {140,114} + textureRect + {{0,1798},{140,114}} + textureRotated + + + GetUp1_1.png + + aliases + + spriteOffset + {0,0} + spriteSize + {137,105} + spriteSourceSize + {137,105} + textureRect + {{140,721},{137,105}} + textureRotated + + + GetUp1_10.png + + aliases + + spriteOffset + {0,0} + spriteSize + {137,105} + spriteSourceSize + {137,105} + textureRect + {{140,858},{137,105}} + textureRotated + + + GetUp1_11.png + + aliases + + spriteOffset + {0,0} + spriteSize + {137,105} + spriteSourceSize + {137,105} + textureRect + {{140,995},{137,105}} + textureRotated + + + GetUp1_12.png + + aliases + + spriteOffset + {0,0} + spriteSize + {137,105} + spriteSourceSize + {137,105} + textureRect + {{140,1132},{137,105}} + textureRotated + + + GetUp1_2.png + + aliases + + spriteOffset + {0,0} + spriteSize + {137,105} + spriteSourceSize + {137,105} + textureRect + {{140,1269},{137,105}} + textureRotated + + + GetUp1_3.png + + aliases + + spriteOffset + {0,0} + spriteSize + {137,105} + spriteSourceSize + {137,105} + textureRect + {{140,1406},{137,105}} + textureRotated + + + GetUp1_4.png + + aliases + + spriteOffset + {0,0} + spriteSize + {137,105} + spriteSourceSize + {137,105} + textureRect + {{140,1543},{137,105}} + textureRotated + + + GetUp1_5.png + + aliases + + spriteOffset + {0,0} + spriteSize + {137,105} + spriteSourceSize + {137,105} + textureRect + {{140,1680},{137,105}} + textureRotated + + + GetUp1_6.png + + aliases + + spriteOffset + {0,0} + spriteSize + {137,105} + spriteSourceSize + {137,105} + textureRect + {{217,522},{137,105}} + textureRotated + + + GetUp1_7.png + + aliases + + spriteOffset + {0,0} + spriteSize + {137,105} + spriteSourceSize + {137,105} + textureRect + {{296,364},{137,105}} + textureRotated + + + GetUp1_8.png + + aliases + + spriteOffset + {0,0} + spriteSize + {137,105} + spriteSourceSize + {137,105} + textureRect + {{433,422},{137,105}} + textureRotated + + + GetUp1_9.png + + aliases + + spriteOffset + {0,0} + spriteSize + {137,105} + spriteSourceSize + {137,105} + textureRect + {{570,422},{137,105}} + textureRotated + + + Idle1_1.png + + aliases + + spriteOffset + {0,0} + spriteSize + {78,111} + spriteSourceSize + {78,111} + textureRect + {{855,1200},{78,111}} + textureRotated + + + Idle1_10.png + + aliases + + spriteOffset + {0,0} + spriteSize + {78,111} + spriteSourceSize + {78,111} + textureRect + {{933,1200},{78,111}} + textureRotated + + + Idle1_2.png + + aliases + + spriteOffset + {0,0} + spriteSize + {78,111} + spriteSourceSize + {78,111} + textureRect + {{859,1311},{78,111}} + textureRotated + + + Idle1_3.png + + aliases + + spriteOffset + {0,0} + spriteSize + {78,111} + spriteSourceSize + {78,111} + textureRect + {{859,1422},{78,111}} + textureRotated + + + Idle1_4.png + + aliases + + spriteOffset + {0,0} + spriteSize + {78,111} + spriteSourceSize + {78,111} + textureRect + {{937,1311},{78,111}} + textureRotated + + + Idle1_5.png + + aliases + + spriteOffset + {0,0} + spriteSize + {78,111} + spriteSourceSize + {78,111} + textureRect + {{937,1422},{78,111}} + textureRotated + + + Idle1_6.png + + aliases + + spriteOffset + {0,0} + spriteSize + {78,111} + spriteSourceSize + {78,111} + textureRect + {{859,1533},{78,111}} + textureRotated + + + Idle1_7.png + + aliases + + spriteOffset + {0,0} + spriteSize + {78,111} + spriteSourceSize + {78,111} + textureRect + {{853,1611},{78,111}} + textureRotated + + + Idle1_8.png + + aliases + + spriteOffset + {0,0} + spriteSize + {78,111} + spriteSourceSize + {78,111} + textureRect + {{856,1689},{78,111}} + textureRotated + + + Idle1_9.png + + aliases + + spriteOffset + {0,0} + spriteSize + {78,111} + spriteSourceSize + {78,111} + textureRect + {{860,1800},{78,111}} + textureRotated + + + InAirAtk1_1.png + + aliases + + spriteOffset + {0,0} + spriteSize + {148,136} + spriteSourceSize + {148,136} + textureRect + {{0,0},{148,136}} + textureRotated + + + InAirAtk1_10.png + + aliases + + spriteOffset + {0,0} + spriteSize + {148,136} + spriteSourceSize + {148,136} + textureRect + {{0,136},{148,136}} + textureRotated + + + InAirAtk1_2.png + + aliases + + spriteOffset + {0,0} + spriteSize + {148,136} + spriteSourceSize + {148,136} + textureRect + {{148,0},{148,136}} + textureRotated + + + InAirAtk1_3.png + + aliases + + spriteOffset + {0,0} + spriteSize + {148,136} + spriteSourceSize + {148,136} + textureRect + {{0,272},{148,136}} + textureRotated + + + InAirAtk1_4.png + + aliases + + spriteOffset + {0,0} + spriteSize + {148,136} + spriteSourceSize + {148,136} + textureRect + {{0,272},{148,136}} + textureRotated + + + InAirAtk1_5.png + + aliases + + spriteOffset + {0,0} + spriteSize + {148,136} + spriteSourceSize + {148,136} + textureRect + {{148,136},{148,136}} + textureRotated + + + InAirAtk1_6.png + + aliases + + spriteOffset + {0,0} + spriteSize + {148,136} + spriteSourceSize + {148,136} + textureRect + {{148,136},{148,136}} + textureRotated + + + InAirAtk1_7.png + + aliases + + spriteOffset + {0,0} + spriteSize + {148,136} + spriteSourceSize + {148,136} + textureRect + {{296,0},{148,136}} + textureRotated + + + InAirAtk1_8.png + + aliases + + spriteOffset + {0,0} + spriteSize + {148,136} + spriteSourceSize + {148,136} + textureRect + {{0,408},{148,136}} + textureRotated + + + InAirAtk1_9.png + + aliases + + spriteOffset + {0,0} + spriteSize + {148,136} + spriteSourceSize + {148,136} + textureRect + {{148,272},{148,136}} + textureRotated + + + InAirAtked1_1.png + + aliases + + spriteOffset + {0,0} + spriteSize + {103,100} + spriteSourceSize + {103,100} + textureRect + {{140,1817},{103,100}} + textureRotated + + + InAirAtked1_2.png + + aliases + + spriteOffset + {0,0} + spriteSize + {103,100} + spriteSourceSize + {103,100} + textureRect + {{240,1817},{103,100}} + textureRotated + + + InAirAtked1_3.png + + aliases + + spriteOffset + {0,0} + spriteSize + {103,100} + spriteSourceSize + {103,100} + textureRect + {{656,1763},{103,100}} + textureRotated + + + InAirAtked1_4.png + + aliases + + spriteOffset + {0,0} + spriteSize + {103,100} + spriteSourceSize + {103,100} + textureRect + {{750,1603},{103,100}} + textureRotated + + + InAirAtked1_5.png + + aliases + + spriteOffset + {0,0} + spriteSize + {103,100} + spriteSourceSize + {103,100} + textureRect + {{756,1703},{103,100}} + textureRotated + + + InAirIdle1_1.png + + aliases + + spriteOffset + {0,0} + spriteSize + {83,131} + spriteSourceSize + {83,131} + textureRect + {{749,989},{83,131}} + textureRotated + + + InAirIdle1_10.png + + aliases + + spriteOffset + {0,0} + spriteSize + {83,131} + spriteSourceSize + {83,131} + textureRect + {{612,1314},{83,131}} + textureRotated + + + InAirIdle1_11.png + + aliases + + spriteOffset + {0,0} + spriteSize + {83,131} + spriteSourceSize + {83,131} + textureRect + {{929,743},{83,131}} + textureRotated + + + InAirIdle1_12.png + + aliases + + spriteOffset + {0,0} + spriteSize + {83,131} + spriteSourceSize + {83,131} + textureRect + {{929,874},{83,131}} + textureRotated + + + InAirIdle1_2.png + + aliases + + spriteOffset + {0,0} + spriteSize + {83,131} + spriteSourceSize + {83,131} + textureRect + {{469,1401},{83,131}} + textureRotated + + + InAirIdle1_3.png + + aliases + + spriteOffset + {0,0} + spriteSize + {83,131} + spriteSourceSize + {83,131} + textureRect + {{469,1532},{83,131}} + textureRotated + + + InAirIdle1_4.png + + aliases + + spriteOffset + {0,0} + spriteSize + {83,131} + spriteSourceSize + {83,131} + textureRect + {{469,1663},{83,131}} + textureRotated + + + InAirIdle1_5.png + + aliases + + spriteOffset + {0,0} + spriteSize + {83,131} + spriteSourceSize + {83,131} + textureRect + {{664,1397},{83,131}} + textureRotated + + + InAirIdle1_6.png + + aliases + + spriteOffset + {0,0} + spriteSize + {83,131} + spriteSourceSize + {83,131} + textureRect + {{664,1528},{83,131}} + textureRotated + + + InAirIdle1_7.png + + aliases + + spriteOffset + {0,0} + spriteSize + {83,131} + spriteSourceSize + {83,131} + textureRect + {{573,1733},{83,131}} + textureRotated + + + InAirIdle1_8.png + + aliases + + spriteOffset + {0,0} + spriteSize + {83,131} + spriteSourceSize + {83,131} + textureRect + {{880,1005},{83,131}} + textureRotated + + + InAirIdle1_9.png + + aliases + + spriteOffset + {0,0} + spriteSize + {83,131} + spriteSourceSize + {83,131} + textureRect + {{749,1072},{83,131}} + textureRotated + + + LayDown1_1.png + + aliases + + spriteOffset + {0,0} + spriteSize + {177,77} + spriteSourceSize + {177,77} + textureRect + {{444,114},{177,77}} + textureRotated + + + LayDown1_10.png + + aliases + + spriteOffset + {0,0} + spriteSize + {177,77} + spriteSourceSize + {177,77} + textureRect + {{621,114},{177,77}} + textureRotated + + + LayDown1_11.png + + aliases + + spriteOffset + {0,0} + spriteSize + {177,77} + spriteSourceSize + {177,77} + textureRect + {{798,114},{177,77}} + textureRotated + + + LayDown1_12.png + + aliases + + spriteOffset + {0,0} + spriteSize + {177,77} + spriteSourceSize + {177,77} + textureRect + {{436,191},{177,77}} + textureRotated + + + LayDown1_13.png + + aliases + + spriteOffset + {0,0} + spriteSize + {177,77} + spriteSourceSize + {177,77} + textureRect + {{436,268},{177,77}} + textureRotated + + + LayDown1_2.png + + aliases + + spriteOffset + {0,0} + spriteSize + {177,77} + spriteSourceSize + {177,77} + textureRect + {{613,191},{177,77}} + textureRotated + + + LayDown1_3.png + + aliases + + spriteOffset + {0,0} + spriteSize + {177,77} + spriteSourceSize + {177,77} + textureRect + {{613,268},{177,77}} + textureRotated + + + LayDown1_4.png + + aliases + + spriteOffset + {0,0} + spriteSize + {177,77} + spriteSourceSize + {177,77} + textureRect + {{790,191},{177,77}} + textureRotated + + + LayDown1_5.png + + aliases + + spriteOffset + {0,0} + spriteSize + {177,77} + spriteSourceSize + {177,77} + textureRect + {{790,268},{177,77}} + textureRotated + + + LayDown1_6.png + + aliases + + spriteOffset + {0,0} + spriteSize + {177,77} + spriteSourceSize + {177,77} + textureRect + {{436,345},{177,77}} + textureRotated + + + LayDown1_7.png + + aliases + + spriteOffset + {0,0} + spriteSize + {177,77} + spriteSourceSize + {177,77} + textureRect + {{613,345},{177,77}} + textureRotated + + + LayDown1_8.png + + aliases + + spriteOffset + {0,0} + spriteSize + {177,77} + spriteSourceSize + {177,77} + textureRect + {{790,345},{177,77}} + textureRotated + + + LayDown1_9.png + + aliases + + spriteOffset + {0,0} + spriteSize + {177,77} + spriteSourceSize + {177,77} + textureRect + {{140,544},{177,77}} + textureRotated + + + Walking_1.png + + aliases + + spriteOffset + {0,0} + spriteSize + {112,112} + spriteSourceSize + {112,112} + textureRect + {{624,1090},{112,112}} + textureRotated + + + Walking_10.png + + aliases + + spriteOffset + {0,0} + spriteSize + {112,112} + spriteSourceSize + {112,112} + textureRect + {{624,1202},{112,112}} + textureRotated + + + Walking_11.png + + aliases + + spriteOffset + {0,0} + spriteSize + {112,112} + spriteSourceSize + {112,112} + textureRect + {{461,1794},{112,112}} + textureRotated + + + Walking_2.png + + aliases + + spriteOffset + {0,0} + spriteSize + {112,112} + spriteSourceSize + {112,112} + textureRect + {{552,1397},{112,112}} + textureRotated + + + Walking_3.png + + aliases + + spriteOffset + {0,0} + spriteSize + {112,112} + spriteSourceSize + {112,112} + textureRect + {{552,1509},{112,112}} + textureRotated + + + Walking_4.png + + aliases + + spriteOffset + {0,0} + spriteSize + {112,112} + spriteSourceSize + {112,112} + textureRect + {{552,1621},{112,112}} + textureRotated + + + Walking_5.png + + aliases + + spriteOffset + {0,0} + spriteSize + {112,112} + spriteSourceSize + {112,112} + textureRect + {{736,1155},{112,112}} + textureRotated + + + Walking_6.png + + aliases + + spriteOffset + {0,0} + spriteSize + {112,112} + spriteSourceSize + {112,112} + textureRect + {{880,1088},{112,112}} + textureRotated + + + Walking_7.png + + aliases + + spriteOffset + {0,0} + spriteSize + {112,112} + spriteSourceSize + {112,112} + textureRect + {{743,1267},{112,112}} + textureRotated + + + Walking_8.png + + aliases + + spriteOffset + {0,0} + spriteSize + {112,112} + spriteSourceSize + {112,112} + textureRect + {{747,1379},{112,112}} + textureRotated + + + Walking_9.png + + aliases + + spriteOffset + {0,0} + spriteSize + {112,112} + spriteSourceSize + {112,112} + textureRect + {{747,1491},{112,112}} + textureRotated + + + + metadata + + format + 3 + pixelFormat + RGBA8888 + premultiplyAlpha + + realTextureFileName + Monk.png + size + {1015,1920} + smartupdate + $TexturePacker:SmartUpdate:d8280b540dab8e1bf109a3736f81929b:4a17a531d96d501ac7dc0f1beee57a61:0d538e391a81baa9ecb48d28b418b896$ + textureFileName + Monk.png + + + diff --git a/frontend/assets/resources/animation/Monk/Monk.plist.meta b/frontend/assets/resources/animation/Monk/Monk.plist.meta new file mode 100644 index 0000000..18f8426 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/Monk.plist.meta @@ -0,0 +1,3202 @@ +{ + "ver": "1.2.4", + "uuid": "6dcd5722-8ef9-47fd-9520-861d2713e274", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "size": { + "width": 1015, + "height": 1920 + }, + "type": "Texture Packer", + "subMetas": { + "Atk1_1.png": { + "ver": "1.0.4", + "uuid": "c7107ebe-c5c1-4ba6-8ef4-6eb768f7faf9", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 322, + "trimY": 604, + "width": 121, + "height": 107, + "rawWidth": 121, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk1_2.png": { + "ver": "1.0.4", + "uuid": "e0e20918-ff59-43bc-aeaf-035087934092", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 340, + "trimY": 1813, + "width": 121, + "height": 107, + "rawWidth": 121, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk1_3.png": { + "ver": "1.0.4", + "uuid": "5896a135-36da-4fa9-9257-a9042ba4b546", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 503, + "trimY": 1080, + "width": 121, + "height": 107, + "rawWidth": 121, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk1_4.png": { + "ver": "1.0.4", + "uuid": "4a16667a-f3b3-405c-8565-d65a4281cfc8", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 503, + "trimY": 1080, + "width": 121, + "height": 107, + "rawWidth": 121, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk1_5.png": { + "ver": "1.0.4", + "uuid": "5ad9858c-52aa-4742-be68-d680210e0d0a", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 503, + "trimY": 1080, + "width": 121, + "height": 107, + "rawWidth": 121, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk1_6.png": { + "ver": "1.0.4", + "uuid": "e54dbc94-3eeb-450a-9206-655e960771d2", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 503, + "trimY": 1187, + "width": 121, + "height": 107, + "rawWidth": 121, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk1_7.png": { + "ver": "1.0.4", + "uuid": "f79260b7-7702-4f15-8f12-eb19f018aff1", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 368, + "trimY": 1294, + "width": 121, + "height": 107, + "rawWidth": 121, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk2_1.png": { + "ver": "1.0.4", + "uuid": "0355243d-755f-497b-b1ff-4ec105f4efe7", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 245, + "trimY": 1260, + "width": 123, + "height": 113, + "rawWidth": 123, + "rawHeight": 113, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk2_10.png": { + "ver": "1.0.4", + "uuid": "59587d34-25af-42bd-ba0c-747c5f5fa697", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 245, + "trimY": 1373, + "width": 123, + "height": 113, + "rawWidth": 123, + "rawHeight": 113, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk2_11.png": { + "ver": "1.0.4", + "uuid": "3bceacb5-309a-41e0-bdad-26e85bcf859a", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 245, + "trimY": 1486, + "width": 123, + "height": 113, + "rawWidth": 123, + "rawHeight": 113, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk2_12.png": { + "ver": "1.0.4", + "uuid": "57f6da9e-f131-4fab-9a3d-f2e894d203aa", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 245, + "trimY": 1599, + "width": 123, + "height": 113, + "rawWidth": 123, + "rawHeight": 113, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk2_13.png": { + "ver": "1.0.4", + "uuid": "c35454f3-535b-4aec-b408-b8174a74556a", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 380, + "trimY": 741, + "width": 123, + "height": 113, + "rawWidth": 123, + "rawHeight": 113, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk2_14.png": { + "ver": "1.0.4", + "uuid": "24f5b898-42dc-4f67-b6fc-946cdb5e369f", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 380, + "trimY": 854, + "width": 123, + "height": 113, + "rawWidth": 123, + "rawHeight": 113, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk2_2.png": { + "ver": "1.0.4", + "uuid": "22386328-484b-441e-9675-6553ede6118c", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 503, + "trimY": 741, + "width": 123, + "height": 113, + "rawWidth": 123, + "rawHeight": 113, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk2_3.png": { + "ver": "1.0.4", + "uuid": "1ed0eb22-5a20-405f-a15e-8a66348bd025", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 380, + "trimY": 967, + "width": 123, + "height": 113, + "rawWidth": 123, + "rawHeight": 113, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk2_4.png": { + "ver": "1.0.4", + "uuid": "6e12225f-2300-4e0e-bcf6-00049bfbc48f", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 503, + "trimY": 854, + "width": 123, + "height": 113, + "rawWidth": 123, + "rawHeight": 113, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk2_5.png": { + "ver": "1.0.4", + "uuid": "549e581f-5121-4cbb-96e9-b3b8b5b0f227", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 380, + "trimY": 1080, + "width": 123, + "height": 113, + "rawWidth": 123, + "rawHeight": 113, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk2_6.png": { + "ver": "1.0.4", + "uuid": "08e1ec2a-500f-4a16-a19d-383de218cc14", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 380, + "trimY": 1080, + "width": 123, + "height": 113, + "rawWidth": 123, + "rawHeight": 113, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk2_7.png": { + "ver": "1.0.4", + "uuid": "024b3ae9-7d24-4057-83d7-4b58f8651ce0", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 503, + "trimY": 967, + "width": 123, + "height": 113, + "rawWidth": 123, + "rawHeight": 113, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk2_8.png": { + "ver": "1.0.4", + "uuid": "57f241ae-ce40-49ed-bf63-71d016e41e2f", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 503, + "trimY": 967, + "width": 123, + "height": 113, + "rawWidth": 123, + "rawHeight": 113, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk2_9.png": { + "ver": "1.0.4", + "uuid": "d2685f61-3365-4c14-9fb1-d7b2311871c4", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 245, + "trimY": 1373, + "width": 123, + "height": 113, + "rawWidth": 123, + "rawHeight": 113, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk3_1.png": { + "ver": "1.0.4", + "uuid": "a64b6f59-fa72-4f5d-89dc-81a469244ea5", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 245, + "trimY": 1712, + "width": 101, + "height": 123, + "rawWidth": 101, + "rawHeight": 123, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk3_10.png": { + "ver": "1.0.4", + "uuid": "6f27b252-6eaf-4b4b-9c5a-46ba899e4845", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 380, + "trimY": 1193, + "width": 101, + "height": 123, + "rawWidth": 101, + "rawHeight": 123, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk3_11.png": { + "ver": "1.0.4", + "uuid": "4ebd5c60-efa6-4950-a4c8-74a7a8517333", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 368, + "trimY": 1401, + "width": 101, + "height": 123, + "rawWidth": 101, + "rawHeight": 123, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk3_12.png": { + "ver": "1.0.4", + "uuid": "a207290f-4556-4adb-8a11-e1d5ba342550", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 489, + "trimY": 1294, + "width": 101, + "height": 123, + "rawWidth": 101, + "rawHeight": 123, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk3_13.png": { + "ver": "1.0.4", + "uuid": "e9d442d2-981d-437d-87c0-085162017de7", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 368, + "trimY": 1524, + "width": 101, + "height": 123, + "rawWidth": 101, + "rawHeight": 123, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk3_14.png": { + "ver": "1.0.4", + "uuid": "9b4d5c8c-5ec0-4fd7-a45e-6b0bc8ff9119", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 368, + "trimY": 1647, + "width": 101, + "height": 123, + "rawWidth": 101, + "rawHeight": 123, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk3_2.png": { + "ver": "1.0.4", + "uuid": "f800d4a1-2396-4aa5-a578-11481db1d8bf", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 626, + "trimY": 743, + "width": 101, + "height": 123, + "rawWidth": 101, + "rawHeight": 123, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk3_3.png": { + "ver": "1.0.4", + "uuid": "d97f6a5f-8e63-40d7-bd14-9dc71e15e5db", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 626, + "trimY": 866, + "width": 101, + "height": 123, + "rawWidth": 101, + "rawHeight": 123, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk3_4.png": { + "ver": "1.0.4", + "uuid": "196bcbf9-e89f-4b26-b736-73e2fa787e50", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 727, + "trimY": 743, + "width": 101, + "height": 123, + "rawWidth": 101, + "rawHeight": 123, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk3_5.png": { + "ver": "1.0.4", + "uuid": "3229e023-e63d-4a4e-af72-2b1409ea43c5", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 727, + "trimY": 866, + "width": 101, + "height": 123, + "rawWidth": 101, + "rawHeight": 123, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk3_6.png": { + "ver": "1.0.4", + "uuid": "e2d6e8b8-b468-4edb-b8c3-860bd85ebeae", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 828, + "trimY": 743, + "width": 101, + "height": 123, + "rawWidth": 101, + "rawHeight": 123, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk3_7.png": { + "ver": "1.0.4", + "uuid": "318745eb-06b1-4e7f-88d1-e23e02d99e67", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 828, + "trimY": 743, + "width": 101, + "height": 123, + "rawWidth": 101, + "rawHeight": 123, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk3_8.png": { + "ver": "1.0.4", + "uuid": "bba6f088-0e1f-4a12-9872-41670be1152a", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 828, + "trimY": 866, + "width": 101, + "height": 123, + "rawWidth": 101, + "rawHeight": 123, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk3_9.png": { + "ver": "1.0.4", + "uuid": "2c5de5b2-9009-48fa-bef4-ae34cc94f876", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 626, + "trimY": 989, + "width": 101, + "height": 123, + "rawWidth": 101, + "rawHeight": 123, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk4_1.png": { + "ver": "1.0.4", + "uuid": "3594a12d-5b5c-4dc6-8138-1b48eacf0798", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 322, + "trimY": 469, + "width": 135, + "height": 107, + "rawWidth": 135, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk4_10.png": { + "ver": "1.0.4", + "uuid": "7a345895-6501-4388-88f6-984992a3799b", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 707, + "trimY": 422, + "width": 135, + "height": 107, + "rawWidth": 135, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk4_11.png": { + "ver": "1.0.4", + "uuid": "99b4e340-52ca-4f3e-a86f-ca385ff8797a", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 842, + "trimY": 422, + "width": 135, + "height": 107, + "rawWidth": 135, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk4_12.png": { + "ver": "1.0.4", + "uuid": "554d0862-0d1c-4f61-8d47-03362cd9eb1d", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 429, + "trimY": 527, + "width": 135, + "height": 107, + "rawWidth": 135, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk4_13.png": { + "ver": "1.0.4", + "uuid": "cd15a283-cf0d-48d4-9162-2d72202baf82", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 564, + "trimY": 527, + "width": 135, + "height": 107, + "rawWidth": 135, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk4_14.png": { + "ver": "1.0.4", + "uuid": "b2bb7fdf-2532-408f-a3d1-fe8bf0e34f61", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 699, + "trimY": 529, + "width": 135, + "height": 107, + "rawWidth": 135, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk4_15.png": { + "ver": "1.0.4", + "uuid": "435c0195-a5c3-4a8f-9d44-e6f026649b70", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 834, + "trimY": 529, + "width": 135, + "height": 107, + "rawWidth": 135, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk4_16.png": { + "ver": "1.0.4", + "uuid": "a4f724de-140f-472a-be83-731520d3da38", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 429, + "trimY": 634, + "width": 135, + "height": 107, + "rawWidth": 135, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk4_2.png": { + "ver": "1.0.4", + "uuid": "cdef413d-f009-45d3-aeb6-423652fc366d", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 564, + "trimY": 634, + "width": 135, + "height": 107, + "rawWidth": 135, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk4_3.png": { + "ver": "1.0.4", + "uuid": "688682c4-ea77-4d2c-b1e4-079f5880d3cd", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 699, + "trimY": 636, + "width": 135, + "height": 107, + "rawWidth": 135, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk4_4.png": { + "ver": "1.0.4", + "uuid": "ca9f0a44-9977-4b24-8243-ac5536f14bc8", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 834, + "trimY": 636, + "width": 135, + "height": 107, + "rawWidth": 135, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk4_5.png": { + "ver": "1.0.4", + "uuid": "6b4dbc7c-a872-40d6-be0e-4d1a96eddd44", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 245, + "trimY": 725, + "width": 135, + "height": 107, + "rawWidth": 135, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk4_6.png": { + "ver": "1.0.4", + "uuid": "b43c8a38-1d55-4d6b-b6a1-fc888a9e53b5", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 245, + "trimY": 832, + "width": 135, + "height": 107, + "rawWidth": 135, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk4_7.png": { + "ver": "1.0.4", + "uuid": "0eb3d73a-a724-46f3-b1f1-56d315150320", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 245, + "trimY": 939, + "width": 135, + "height": 107, + "rawWidth": 135, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk4_8.png": { + "ver": "1.0.4", + "uuid": "ddac83f4-f0bf-460e-9a83-cc75c69ef024", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 245, + "trimY": 1046, + "width": 135, + "height": 107, + "rawWidth": 135, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk4_9.png": { + "ver": "1.0.4", + "uuid": "8e673fdc-2cc8-435c-8a0d-38dcfc7b8600", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 245, + "trimY": 1153, + "width": 135, + "height": 107, + "rawWidth": 135, + "rawHeight": 107, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atked1_1.png": { + "ver": "1.0.4", + "uuid": "7ceb8a79-f5bf-4918-afa1-d76a85a571b0", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 664, + "trimY": 1659, + "width": 86, + "height": 104, + "rawWidth": 86, + "rawHeight": 104, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atked1_2.png": { + "ver": "1.0.4", + "uuid": "23ce7632-8b44-4138-b3b2-3e296ba9184c", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 756, + "trimY": 1806, + "width": 86, + "height": 104, + "rawWidth": 86, + "rawHeight": 104, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "BlownUp1_1.png": { + "ver": "1.0.4", + "uuid": "ba708108-b18f-4ec0-81f6-0e516e4f832b", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 296, + "trimY": 136, + "width": 140, + "height": 114, + "rawWidth": 140, + "rawHeight": 114, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "BlownUp1_10.png": { + "ver": "1.0.4", + "uuid": "3cf0f5bd-0104-4315-a750-55b5fb26e1ec", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 444, + "trimY": 0, + "width": 140, + "height": 114, + "rawWidth": 140, + "rawHeight": 114, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "BlownUp1_11.png": { + "ver": "1.0.4", + "uuid": "a31b8683-ca31-4268-80d6-5b117af86ee6", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 544, + "width": 140, + "height": 114, + "rawWidth": 140, + "rawHeight": 114, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "BlownUp1_12.png": { + "ver": "1.0.4", + "uuid": "a7ab4cb1-2221-4aba-8ced-dc93d8dca2f3", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 148, + "trimY": 408, + "width": 140, + "height": 114, + "rawWidth": 140, + "rawHeight": 114, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "BlownUp1_13.png": { + "ver": "1.0.4", + "uuid": "2ac3a00d-059a-4e15-a9cb-378bd671c9f3", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 296, + "trimY": 250, + "width": 140, + "height": 114, + "rawWidth": 140, + "rawHeight": 114, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "BlownUp1_14.png": { + "ver": "1.0.4", + "uuid": "2b5cab9a-420c-406a-bef4-6aaee4ae6e8f", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 584, + "trimY": 0, + "width": 140, + "height": 114, + "rawWidth": 140, + "rawHeight": 114, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "BlownUp1_15.png": { + "ver": "1.0.4", + "uuid": "6df0a35f-062b-49ec-aa73-146f8b2207a7", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 658, + "width": 140, + "height": 114, + "rawWidth": 140, + "rawHeight": 114, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "BlownUp1_16.png": { + "ver": "1.0.4", + "uuid": "afaac620-4293-4336-9a44-bf7927c6751c", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 724, + "trimY": 0, + "width": 140, + "height": 114, + "rawWidth": 140, + "rawHeight": 114, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "BlownUp1_17.png": { + "ver": "1.0.4", + "uuid": "410823b3-14e4-475b-b658-dc4d5325f307", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 772, + "width": 140, + "height": 114, + "rawWidth": 140, + "rawHeight": 114, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "BlownUp1_18.png": { + "ver": "1.0.4", + "uuid": "34a43c48-497b-4495-97c9-8de53cbcc229", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 864, + "trimY": 0, + "width": 140, + "height": 114, + "rawWidth": 140, + "rawHeight": 114, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "BlownUp1_19.png": { + "ver": "1.0.4", + "uuid": "c7ffc314-70ae-4a2b-9238-db1778a336d1", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 886, + "width": 140, + "height": 114, + "rawWidth": 140, + "rawHeight": 114, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "BlownUp1_2.png": { + "ver": "1.0.4", + "uuid": "aeeaa976-f3b4-4b77-a18b-b08ddd28d812", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 1000, + "width": 140, + "height": 114, + "rawWidth": 140, + "rawHeight": 114, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "BlownUp1_3.png": { + "ver": "1.0.4", + "uuid": "89d06edf-8838-4ab4-adbd-059acf21dc8c", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 1114, + "width": 140, + "height": 114, + "rawWidth": 140, + "rawHeight": 114, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "BlownUp1_4.png": { + "ver": "1.0.4", + "uuid": "c2f38b89-f7a0-477b-921c-f56ee385b737", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 1228, + "width": 140, + "height": 114, + "rawWidth": 140, + "rawHeight": 114, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "BlownUp1_5.png": { + "ver": "1.0.4", + "uuid": "90186972-a736-449d-8e64-d15c4ebcbfd1", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 1342, + "width": 140, + "height": 114, + "rawWidth": 140, + "rawHeight": 114, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "BlownUp1_6.png": { + "ver": "1.0.4", + "uuid": "1d64b1f5-5f08-4247-a43c-ffe2d58e09df", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 1456, + "width": 140, + "height": 114, + "rawWidth": 140, + "rawHeight": 114, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "BlownUp1_7.png": { + "ver": "1.0.4", + "uuid": "cf158505-bb9c-4836-b45f-2b253dfef117", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 1570, + "width": 140, + "height": 114, + "rawWidth": 140, + "rawHeight": 114, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "BlownUp1_8.png": { + "ver": "1.0.4", + "uuid": "a2984de9-99db-40bf-9969-0b163a97d9eb", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 1684, + "width": 140, + "height": 114, + "rawWidth": 140, + "rawHeight": 114, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "BlownUp1_9.png": { + "ver": "1.0.4", + "uuid": "66f0b5dc-4e0e-4597-a7f9-b9ee6752bc98", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 1798, + "width": 140, + "height": 114, + "rawWidth": 140, + "rawHeight": 114, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "GetUp1_1.png": { + "ver": "1.0.4", + "uuid": "ec0d05f4-3c30-4107-b9b4-3ccff5fb9a02", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 140, + "trimY": 721, + "width": 137, + "height": 105, + "rawWidth": 137, + "rawHeight": 105, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "GetUp1_10.png": { + "ver": "1.0.4", + "uuid": "9de8f787-3059-403d-bdcb-f7d4bd59ba65", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 140, + "trimY": 858, + "width": 137, + "height": 105, + "rawWidth": 137, + "rawHeight": 105, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "GetUp1_11.png": { + "ver": "1.0.4", + "uuid": "471de8d2-34ee-4605-b8c5-9f3983db8a04", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 140, + "trimY": 995, + "width": 137, + "height": 105, + "rawWidth": 137, + "rawHeight": 105, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "GetUp1_12.png": { + "ver": "1.0.4", + "uuid": "a4cb5179-60eb-41f8-bcef-56ce3299da19", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 140, + "trimY": 1132, + "width": 137, + "height": 105, + "rawWidth": 137, + "rawHeight": 105, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "GetUp1_2.png": { + "ver": "1.0.4", + "uuid": "3e0fa075-ffdc-490f-872c-b77e202df224", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 140, + "trimY": 1269, + "width": 137, + "height": 105, + "rawWidth": 137, + "rawHeight": 105, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "GetUp1_3.png": { + "ver": "1.0.4", + "uuid": "f3c8e924-c86a-426b-a3de-ffc6e19060f3", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 140, + "trimY": 1406, + "width": 137, + "height": 105, + "rawWidth": 137, + "rawHeight": 105, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "GetUp1_4.png": { + "ver": "1.0.4", + "uuid": "35b847f0-f3f7-4ec9-ba93-5616f763d658", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 140, + "trimY": 1543, + "width": 137, + "height": 105, + "rawWidth": 137, + "rawHeight": 105, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "GetUp1_5.png": { + "ver": "1.0.4", + "uuid": "a018eecc-27e6-4d60-973f-ed9fe86a147e", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 140, + "trimY": 1680, + "width": 137, + "height": 105, + "rawWidth": 137, + "rawHeight": 105, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "GetUp1_6.png": { + "ver": "1.0.4", + "uuid": "3d70f10e-a3f7-4b7a-aedb-a010ad946abe", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 217, + "trimY": 522, + "width": 137, + "height": 105, + "rawWidth": 137, + "rawHeight": 105, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "GetUp1_7.png": { + "ver": "1.0.4", + "uuid": "b860cb8a-2445-49bc-96f0-aac4396be922", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 296, + "trimY": 364, + "width": 137, + "height": 105, + "rawWidth": 137, + "rawHeight": 105, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "GetUp1_8.png": { + "ver": "1.0.4", + "uuid": "bddec025-747e-4602-9352-6fc3bf921dc0", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 433, + "trimY": 422, + "width": 137, + "height": 105, + "rawWidth": 137, + "rawHeight": 105, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "GetUp1_9.png": { + "ver": "1.0.4", + "uuid": "22053496-5240-40d3-98bd-49e16d05f7f9", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 570, + "trimY": 422, + "width": 137, + "height": 105, + "rawWidth": 137, + "rawHeight": 105, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Idle1_1.png": { + "ver": "1.0.4", + "uuid": "a5c02b13-8d8b-42d1-830b-81b37d37afe5", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 855, + "trimY": 1200, + "width": 78, + "height": 111, + "rawWidth": 78, + "rawHeight": 111, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Idle1_10.png": { + "ver": "1.0.4", + "uuid": "262583c0-7b65-4ddf-b2cc-24b0e4e1f52c", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 933, + "trimY": 1200, + "width": 78, + "height": 111, + "rawWidth": 78, + "rawHeight": 111, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Idle1_2.png": { + "ver": "1.0.4", + "uuid": "fd29846b-1998-49ba-89f6-f665b9ea7002", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 859, + "trimY": 1311, + "width": 78, + "height": 111, + "rawWidth": 78, + "rawHeight": 111, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Idle1_3.png": { + "ver": "1.0.4", + "uuid": "e3b30506-3a86-462e-b265-e7f6c7c09dc5", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 859, + "trimY": 1422, + "width": 78, + "height": 111, + "rawWidth": 78, + "rawHeight": 111, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Idle1_4.png": { + "ver": "1.0.4", + "uuid": "84f15682-b73e-443d-8d9f-f530f152bcce", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 937, + "trimY": 1311, + "width": 78, + "height": 111, + "rawWidth": 78, + "rawHeight": 111, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Idle1_5.png": { + "ver": "1.0.4", + "uuid": "45249fea-e7e7-4b68-8971-49d825960248", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 937, + "trimY": 1422, + "width": 78, + "height": 111, + "rawWidth": 78, + "rawHeight": 111, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Idle1_6.png": { + "ver": "1.0.4", + "uuid": "ca561428-9e45-41a9-8d66-c0468d4c85d9", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 859, + "trimY": 1533, + "width": 78, + "height": 111, + "rawWidth": 78, + "rawHeight": 111, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Idle1_7.png": { + "ver": "1.0.4", + "uuid": "062f3bd5-beca-435a-8d82-524fd51a88a0", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 853, + "trimY": 1611, + "width": 78, + "height": 111, + "rawWidth": 78, + "rawHeight": 111, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Idle1_8.png": { + "ver": "1.0.4", + "uuid": "2c5f2d24-01f1-4a0f-8ddc-eacfbc9b6208", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 856, + "trimY": 1689, + "width": 78, + "height": 111, + "rawWidth": 78, + "rawHeight": 111, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Idle1_9.png": { + "ver": "1.0.4", + "uuid": "23068811-a6e5-4ef5-960f-7e6dea328c84", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 860, + "trimY": 1800, + "width": 78, + "height": 111, + "rawWidth": 78, + "rawHeight": 111, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirAtk1_1.png": { + "ver": "1.0.4", + "uuid": "70adb814-3dca-492f-a0fe-36d4d6b37e01", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 0, + "width": 148, + "height": 136, + "rawWidth": 148, + "rawHeight": 136, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirAtk1_10.png": { + "ver": "1.0.4", + "uuid": "9f8ef3e0-6f56-41d2-97d1-ac7f3cc690ee", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 136, + "width": 148, + "height": 136, + "rawWidth": 148, + "rawHeight": 136, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirAtk1_2.png": { + "ver": "1.0.4", + "uuid": "7c67ab61-96e0-4c43-a2d8-742fa1021107", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 148, + "trimY": 0, + "width": 148, + "height": 136, + "rawWidth": 148, + "rawHeight": 136, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirAtk1_3.png": { + "ver": "1.0.4", + "uuid": "beb4bc62-b6bf-4a07-973e-1b91e3942ab3", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 272, + "width": 148, + "height": 136, + "rawWidth": 148, + "rawHeight": 136, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirAtk1_4.png": { + "ver": "1.0.4", + "uuid": "422441bd-8551-46d3-9383-162553035080", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 272, + "width": 148, + "height": 136, + "rawWidth": 148, + "rawHeight": 136, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirAtk1_5.png": { + "ver": "1.0.4", + "uuid": "312f8dd2-7d02-4a80-a960-17d197c96da4", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 148, + "trimY": 136, + "width": 148, + "height": 136, + "rawWidth": 148, + "rawHeight": 136, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirAtk1_6.png": { + "ver": "1.0.4", + "uuid": "42597d6a-b982-43aa-90bd-2e9a01063628", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 148, + "trimY": 136, + "width": 148, + "height": 136, + "rawWidth": 148, + "rawHeight": 136, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirAtk1_7.png": { + "ver": "1.0.4", + "uuid": "487b65c3-44e3-4b0e-9350-e0d1c952785b", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 296, + "trimY": 0, + "width": 148, + "height": 136, + "rawWidth": 148, + "rawHeight": 136, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirAtk1_8.png": { + "ver": "1.0.4", + "uuid": "9a5357ae-a160-4198-a6d5-cc9631fde754", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 0, + "trimY": 408, + "width": 148, + "height": 136, + "rawWidth": 148, + "rawHeight": 136, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirAtk1_9.png": { + "ver": "1.0.4", + "uuid": "d08fc3b2-f6e8-4ff8-bba4-69ce3eb771df", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 148, + "trimY": 272, + "width": 148, + "height": 136, + "rawWidth": 148, + "rawHeight": 136, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirAtked1_1.png": { + "ver": "1.0.4", + "uuid": "39c94369-a78d-459d-9305-13a2b9c15225", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 140, + "trimY": 1817, + "width": 103, + "height": 100, + "rawWidth": 103, + "rawHeight": 100, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirAtked1_2.png": { + "ver": "1.0.4", + "uuid": "c85b7940-7bb2-4597-a309-155b7a116f94", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 240, + "trimY": 1817, + "width": 103, + "height": 100, + "rawWidth": 103, + "rawHeight": 100, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirAtked1_3.png": { + "ver": "1.0.4", + "uuid": "78f498f8-6517-4e28-91f9-b70ee87beff9", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 656, + "trimY": 1763, + "width": 103, + "height": 100, + "rawWidth": 103, + "rawHeight": 100, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirAtked1_4.png": { + "ver": "1.0.4", + "uuid": "02247899-3345-411a-aaa3-65e2f5e0b3e6", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 750, + "trimY": 1603, + "width": 103, + "height": 100, + "rawWidth": 103, + "rawHeight": 100, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirAtked1_5.png": { + "ver": "1.0.4", + "uuid": "bec5291d-8f6e-426c-8e16-1d0239a69bad", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 756, + "trimY": 1703, + "width": 103, + "height": 100, + "rawWidth": 103, + "rawHeight": 100, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirIdle1_1.png": { + "ver": "1.0.4", + "uuid": "06d18871-0cb6-41eb-a484-5c6a4c04d5d5", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 749, + "trimY": 989, + "width": 83, + "height": 131, + "rawWidth": 83, + "rawHeight": 131, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirIdle1_10.png": { + "ver": "1.0.4", + "uuid": "aec31ef8-46dc-4f0e-9cba-18f6c96c5c33", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 612, + "trimY": 1314, + "width": 83, + "height": 131, + "rawWidth": 83, + "rawHeight": 131, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirIdle1_11.png": { + "ver": "1.0.4", + "uuid": "e64b3a8d-41a9-45f6-9aeb-9e49b6317080", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 929, + "trimY": 743, + "width": 83, + "height": 131, + "rawWidth": 83, + "rawHeight": 131, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirIdle1_12.png": { + "ver": "1.0.4", + "uuid": "cf886091-24a9-4cfb-8cb9-e3db977035ab", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 929, + "trimY": 874, + "width": 83, + "height": 131, + "rawWidth": 83, + "rawHeight": 131, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirIdle1_2.png": { + "ver": "1.0.4", + "uuid": "f298ff82-ad9d-4945-ab19-14c3e3d54c95", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 469, + "trimY": 1401, + "width": 83, + "height": 131, + "rawWidth": 83, + "rawHeight": 131, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirIdle1_3.png": { + "ver": "1.0.4", + "uuid": "bb5924a6-40cf-4e43-8c94-e51b27861656", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 469, + "trimY": 1532, + "width": 83, + "height": 131, + "rawWidth": 83, + "rawHeight": 131, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirIdle1_4.png": { + "ver": "1.0.4", + "uuid": "fc4b5181-77af-44ec-836e-c14eec8d20c4", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 469, + "trimY": 1663, + "width": 83, + "height": 131, + "rawWidth": 83, + "rawHeight": 131, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirIdle1_5.png": { + "ver": "1.0.4", + "uuid": "493a132d-af22-4621-842a-9fdc645b3e43", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 664, + "trimY": 1397, + "width": 83, + "height": 131, + "rawWidth": 83, + "rawHeight": 131, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirIdle1_6.png": { + "ver": "1.0.4", + "uuid": "5ddd3db3-79b2-4f0c-bb76-2446801ff665", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 664, + "trimY": 1528, + "width": 83, + "height": 131, + "rawWidth": 83, + "rawHeight": 131, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirIdle1_7.png": { + "ver": "1.0.4", + "uuid": "032785ce-c911-479b-be1c-2e0899a586d0", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 573, + "trimY": 1733, + "width": 83, + "height": 131, + "rawWidth": 83, + "rawHeight": 131, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirIdle1_8.png": { + "ver": "1.0.4", + "uuid": "d651269d-1c08-49f8-bc38-d301bf26b0e1", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 880, + "trimY": 1005, + "width": 83, + "height": 131, + "rawWidth": 83, + "rawHeight": 131, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "InAirIdle1_9.png": { + "ver": "1.0.4", + "uuid": "e270563e-d98d-4a80-82db-837183053ae3", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 749, + "trimY": 1072, + "width": 83, + "height": 131, + "rawWidth": 83, + "rawHeight": 131, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "LayDown1_1.png": { + "ver": "1.0.4", + "uuid": "04656482-51fb-4a3d-aa3a-28c682ff4852", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 444, + "trimY": 114, + "width": 177, + "height": 77, + "rawWidth": 177, + "rawHeight": 77, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "LayDown1_10.png": { + "ver": "1.0.4", + "uuid": "8b692f1c-570e-4c35-a40d-e3b6b5973396", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 621, + "trimY": 114, + "width": 177, + "height": 77, + "rawWidth": 177, + "rawHeight": 77, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "LayDown1_11.png": { + "ver": "1.0.4", + "uuid": "756ff6b2-3c2d-4a5b-87f3-1e37073d80e5", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 798, + "trimY": 114, + "width": 177, + "height": 77, + "rawWidth": 177, + "rawHeight": 77, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "LayDown1_12.png": { + "ver": "1.0.4", + "uuid": "dc43217f-afeb-42fb-bdea-04b18ffee56f", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 436, + "trimY": 191, + "width": 177, + "height": 77, + "rawWidth": 177, + "rawHeight": 77, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "LayDown1_13.png": { + "ver": "1.0.4", + "uuid": "b521e99d-b206-4453-bcb7-55d0049a229a", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 436, + "trimY": 268, + "width": 177, + "height": 77, + "rawWidth": 177, + "rawHeight": 77, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "LayDown1_2.png": { + "ver": "1.0.4", + "uuid": "44b85e26-64bb-47d9-90ba-4ae8c10fd9f1", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 613, + "trimY": 191, + "width": 177, + "height": 77, + "rawWidth": 177, + "rawHeight": 77, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "LayDown1_3.png": { + "ver": "1.0.4", + "uuid": "2afb056b-e83a-4074-ac6c-ac6edaa0ff37", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 613, + "trimY": 268, + "width": 177, + "height": 77, + "rawWidth": 177, + "rawHeight": 77, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "LayDown1_4.png": { + "ver": "1.0.4", + "uuid": "0ca0d5ca-01d3-4013-8819-1f79be60fa91", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 790, + "trimY": 191, + "width": 177, + "height": 77, + "rawWidth": 177, + "rawHeight": 77, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "LayDown1_5.png": { + "ver": "1.0.4", + "uuid": "50902f57-47ef-4e07-beec-f633a96c5116", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 790, + "trimY": 268, + "width": 177, + "height": 77, + "rawWidth": 177, + "rawHeight": 77, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "LayDown1_6.png": { + "ver": "1.0.4", + "uuid": "78914b1e-5202-4b2a-86b8-696bc989d43a", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 436, + "trimY": 345, + "width": 177, + "height": 77, + "rawWidth": 177, + "rawHeight": 77, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "LayDown1_7.png": { + "ver": "1.0.4", + "uuid": "5dd8649a-7fd4-4c82-b4c9-17739901e637", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 613, + "trimY": 345, + "width": 177, + "height": 77, + "rawWidth": 177, + "rawHeight": 77, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "LayDown1_8.png": { + "ver": "1.0.4", + "uuid": "76fcd7e0-0841-4308-a152-a561aec76659", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 790, + "trimY": 345, + "width": 177, + "height": 77, + "rawWidth": 177, + "rawHeight": 77, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "LayDown1_9.png": { + "ver": "1.0.4", + "uuid": "32b61366-3f7e-4e83-88f1-9c63d6fb45de", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 140, + "trimY": 544, + "width": 177, + "height": 77, + "rawWidth": 177, + "rawHeight": 77, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Walking_1.png": { + "ver": "1.0.4", + "uuid": "a47f518e-62fb-4549-8897-4f2d387bd145", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 624, + "trimY": 1090, + "width": 112, + "height": 112, + "rawWidth": 112, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Walking_10.png": { + "ver": "1.0.4", + "uuid": "e919100a-50ba-46ce-9ddb-e29f524da610", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 624, + "trimY": 1202, + "width": 112, + "height": 112, + "rawWidth": 112, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Walking_11.png": { + "ver": "1.0.4", + "uuid": "c6e2cfeb-1d9d-4793-86fa-bc9a2f80f67a", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 461, + "trimY": 1794, + "width": 112, + "height": 112, + "rawWidth": 112, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Walking_2.png": { + "ver": "1.0.4", + "uuid": "2b694de4-addf-4960-a765-b422da36e3a7", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 552, + "trimY": 1397, + "width": 112, + "height": 112, + "rawWidth": 112, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Walking_3.png": { + "ver": "1.0.4", + "uuid": "7cc4b946-7646-4377-b2ac-b75c047dfe1c", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 552, + "trimY": 1509, + "width": 112, + "height": 112, + "rawWidth": 112, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Walking_4.png": { + "ver": "1.0.4", + "uuid": "758814fe-7feb-4daa-8ecf-f0ba412f87dc", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 552, + "trimY": 1621, + "width": 112, + "height": 112, + "rawWidth": 112, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Walking_5.png": { + "ver": "1.0.4", + "uuid": "3794c342-1ddb-423e-85ca-09f14fbd2cfb", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 736, + "trimY": 1155, + "width": 112, + "height": 112, + "rawWidth": 112, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Walking_6.png": { + "ver": "1.0.4", + "uuid": "c3899480-a64e-4e16-897b-562b76d0d85c", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 880, + "trimY": 1088, + "width": 112, + "height": 112, + "rawWidth": 112, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Walking_7.png": { + "ver": "1.0.4", + "uuid": "509a8985-2442-4326-9cd9-d77cad6e4e66", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 743, + "trimY": 1267, + "width": 112, + "height": 112, + "rawWidth": 112, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Walking_8.png": { + "ver": "1.0.4", + "uuid": "bdb51693-f9cc-4828-ab25-e131939b358d", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 747, + "trimY": 1379, + "width": 112, + "height": 112, + "rawWidth": 112, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Walking_9.png": { + "ver": "1.0.4", + "uuid": "c47e6d89-5e15-4f9c-a4ee-ec10e3b04295", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 747, + "trimY": 1491, + "width": 112, + "height": 112, + "rawWidth": 112, + "rawHeight": 112, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + } + } +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/Monk.png b/frontend/assets/resources/animation/Monk/Monk.png new file mode 100644 index 0000000..b4fd2f2 Binary files /dev/null and b/frontend/assets/resources/animation/Monk/Monk.png differ diff --git a/frontend/assets/resources/animation/Monk/Monk.png.meta b/frontend/assets/resources/animation/Monk/Monk.png.meta new file mode 100644 index 0000000..e714051 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/Monk.png.meta @@ -0,0 +1,12 @@ +{ + "ver": "2.3.3", + "uuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "type": "raw", + "wrapMode": "clamp", + "filterMode": "bilinear", + "premultiplyAlpha": false, + "genMipmaps": false, + "packable": true, + "platformSettings": {}, + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/Walking.anim b/frontend/assets/resources/animation/Monk/Walking.anim new file mode 100644 index 0000000..1a6a30a --- /dev/null +++ b/frontend/assets/resources/animation/Monk/Walking.anim @@ -0,0 +1,85 @@ +{ + "__type__": "cc.AnimationClip", + "_name": "Walking", + "_objFlags": 0, + "_native": "", + "_duration": 0.85, + "sample": 60, + "speed": 1, + "wrapMode": 2, + "curveData": { + "comps": { + "cc.Sprite": { + "spriteFrame": [ + { + "frame": 0, + "value": { + "__uuid__": "a47f518e-62fb-4549-8897-4f2d387bd145" + } + }, + { + "frame": 0.08333333333333333, + "value": { + "__uuid__": "2b694de4-addf-4960-a765-b422da36e3a7" + } + }, + { + "frame": 0.16666666666666666, + "value": { + "__uuid__": "7cc4b946-7646-4377-b2ac-b75c047dfe1c" + } + }, + { + "frame": 0.25, + "value": { + "__uuid__": "758814fe-7feb-4daa-8ecf-f0ba412f87dc" + } + }, + { + "frame": 0.3333333333333333, + "value": { + "__uuid__": "3794c342-1ddb-423e-85ca-09f14fbd2cfb" + } + }, + { + "frame": 0.4166666666666667, + "value": { + "__uuid__": "c3899480-a64e-4e16-897b-562b76d0d85c" + } + }, + { + "frame": 0.5, + "value": { + "__uuid__": "509a8985-2442-4326-9cd9-d77cad6e4e66" + } + }, + { + "frame": 0.5833333333333334, + "value": { + "__uuid__": "bdb51693-f9cc-4828-ab25-e131939b358d" + } + }, + { + "frame": 0.6666666666666666, + "value": { + "__uuid__": "c47e6d89-5e15-4f9c-a4ee-ec10e3b04295" + } + }, + { + "frame": 0.75, + "value": { + "__uuid__": "e919100a-50ba-46ce-9ddb-e29f524da610" + } + }, + { + "frame": 0.8333333333333334, + "value": { + "__uuid__": "c6e2cfeb-1d9d-4793-86fa-bc9a2f80f67a" + } + } + ] + } + } + }, + "events": [] +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/Walking.anim.meta b/frontend/assets/resources/animation/Monk/Walking.anim.meta new file mode 100644 index 0000000..463da51 --- /dev/null +++ b/frontend/assets/resources/animation/Monk/Walking.anim.meta @@ -0,0 +1,5 @@ +{ + "ver": "2.1.0", + "uuid": "18d10aad-93ee-44e8-9048-1f26c136492b", + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/resources/map/dungeon/map.tmx b/frontend/assets/resources/map/dungeon/map.tmx index d679abd..2963547 100644 --- a/frontend/assets/resources/map/dungeon/map.tmx +++ b/frontend/assets/resources/map/dungeon/map.tmx @@ -1,11 +1,11 @@ - + - eJzt3LGK1EAcwOGwYnPF4SEKWl8h+BLWV52Ndlb3AqKNVoL4ADYW9r6nu5BAXHeS7OwkM8l8xQfH3RLu8vtPLhOWfdQ0zSMAAAAAAAAAAAAAAAAAAIhw1cr9e7Cch56u/0OFcnfI2X/X6vp/2LsL2G2Q/v/2D9F/e/r970b6XxXQSv/5+p+i/7Yd/vZnrVPn5viakLuV/sv2r4H++ufukLP/0wi5m+mft/+WZkB//XN3WGP/kuhfZ3/rv+7+KWZA//Wy/vXXv97+KWZA//Tntnum+P1Cc699/fXXfx39X7T0r6d/v3f/a/311z9f/ycjUvbv0z9v/7Hup/r/2nt3pq6/+79y+k9tf9+4/1+Lqf2ntt/pvypj/U81fr13HWh/3P/Y/Zn0z9f/VPvrnuPuc/R/vnerfzH9h677/f6p6V9u/5h7xHPpv3z/KTNwfC5T9h2Tsv+ugBYl9k91jofEtNd/O/3PmZE5jq3/5TPwJ1GLVMfRP13/KTOg/zrpr39J3XL1z91Bf/3X3P9nQvqvr/+a6V83/eumf930r5v+ddO/bvrXTf+66V83/eumf930r5v+5boN0L+M/nO9XzTUfY450L+c/jcjHgfov43+Oegf31v/dSv9/k//7fUP/W/vfv42of4xQ9cn7/8e9751fL3vvp97DV+6/vUfNvQ/f039T10j9B8W2nMdjO3XbiYcP2f7rn/uDqX27zq/usCl+/M52+s//7lP8Yxmrvb6p3+eFuqfYwam7BFq77/U+u8s9Zxo6h5R/2X7dzMw5+e9nPOMQP//pbyfH9o/hHyLENNe//F+l85BTP+YGfgRSf9pYufgZRPX//BZAJ8DrTtf9z62r9V/3v6x9v3fxPY/+NSE+3/pve7Q8ndL/+n9yd8BAAAAAAAAAAAAAAAAWN5f3AoF6w== + eJzt3LFu00AcwOEoFUuHigqBBANTByRegrlTWWBj6gsgWGBCqngAFgZ23hNHsiXj5mLncs6dfd/wSVUbWa1/f199VpSLzWZzAQAAAAAAAAAAAAAAAAAAES5buX8Pzue+p+t/X6HcHXL237a6/p8atwHbFdL///4h+q9Pv//tSP/LAlrpP1//ffRft93f/ry179wM14TcrfQ/b/8a6K9/7g45+z+LkLuZ/nn7r2kG9Nc/d4cl9i+J/nX2d/3X3T/FDOi/XK5//fWvt3+KGdA//bntnik+nGjua19//fVfRv+XLf3r6d/v3f9af/31z9f/6YiU/fv0z9t/rPu+/r8bH47U9Xf/V07/qe3vNu7/l2Jq/6ntt/ovylj/fY3fNq4C7Yf9h+6OpH++/vvaX/UMu8/R/0XjRv9i+h9a9/v9U9O/3P4x94jH0v/8/afMwPBcpuw7JmX/bQEtSuyf6hwfEtNe//X0P2ZG5ji2/qfPwN9ELVIdR/90/afMgP7LpL/+JXXL1T93B/31X3L/Xwnpv7z+S6Z/3fSvm/51079u+tdN/7rpXzf966Z/3fSvm/51079u+pfrJkD/MvrP9X7RUPc55kD/cvpfj3gSoP86+uegf3xv/Zet9Ps//dfXP/S/vfv5+4T6xwytT97/Pe5ja7jed9/PfQ2fev3rf9ih//nD/q8LaBqyb43QP2zXMrTn2hnbr12PHD93+65/7g6l9u86vznBqfvzOdvr/3i9Tr1+p3hGM1d7/dM/Twv1zzEDU/YItfefu8Fwts71nGjqHlH/8/bvZmDOz3s55hmB/o+lvJ8/tH8I+REhpr3+4/1OnYOY/jEz8DOS/tPEzsGrTVz/3WcBfA207nxvfG5fq/+8/WM1/d/F9t/5sgn3/9Z73a7ln5b+0/uTvwMAAAAAAAAAAAAAAABwfv8AQJoGWw== @@ -16,6 +16,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/assets/resources/pbfiles/room_downsync_frame.proto b/frontend/assets/resources/pbfiles/room_downsync_frame.proto index 4226fa8..a182622 100644 --- a/frontend/assets/resources/pbfiles/room_downsync_frame.proto +++ b/frontend/assets/resources/pbfiles/room_downsync_frame.proto @@ -29,6 +29,9 @@ message PlayerDownsync { int32 activeSkillHit = 22; int32 framesInvinsible = 23; + int32 bulletTeamId = 24; + int32 chCollisionTeamId = 25; + string name = 997; string displayName = 998; string avatar = 999; @@ -111,6 +114,46 @@ message MeleeBullet { int32 hitboxSizeY = 17; bool blowUp = 18; + int32 teamId = 19; + + int32 bulletLocalId = 20; +} + +message FireballBullet { + int32 originatedRenderFrameId = 1; + int32 offenderJoinIndex = 2; + + int32 startupFrames = 3; + int32 cancellableStFrame = 4; + int32 cancellableEdFrame = 5; + int32 activeFrames = 6; + + int32 hitStunFrames = 7; + int32 blockStunFrames = 8; + int32 pushbackVelX = 9; + int32 pushbackVelY = 10; + int32 damage = 11; + + int32 selfLockVelX = 12; + int32 selfLockVelY = 13; + + int32 hitboxOffsetX = 14; + int32 hitboxOffsetY = 15; + int32 hitboxSizeX = 16; + int32 hitboxSizeY = 17; + + bool blowUp = 18; + int32 teamId = 19; + + int32 bulletLocalId = 20; + + int32 virtualGridX = 999; + int32 virtualGridY = 1000; + int32 dirX = 1001; + int32 dirY = 1002; + int32 velX = 1003; + int32 velY = 1004; + int32 speed = 1005; } message BattleColliderInfo { @@ -130,7 +173,7 @@ message BattleColliderInfo { double spaceOffsetY = 12; int32 collisionMinStep = 13; - bool frameDataLoggingEnabled = 999; + bool frameDataLoggingEnabled = 1024; } message RoomDownsyncFrame { @@ -138,7 +181,11 @@ message RoomDownsyncFrame { repeated PlayerDownsync playersArr = 2; int64 countdownNanos = 3; repeated MeleeBullet meleeBullets = 4; // I don't know how to mimic inheritance/composition in protobuf by far, thus using an array for each type of bullet as a compromise - uint64 backendUnconfirmedMask = 5; // Indexed by "joinIndex", same compression concern as stated in InputFrameDownsync - bool shouldForceResync = 6; - repeated int32 speciesIdList = 7; + repeated FireballBullet fireballBullets = 5; + + uint64 backendUnconfirmedMask = 1024; // Indexed by "joinIndex", same compression concern as stated in InputFrameDownsync + bool shouldForceResync = 1025; + repeated int32 speciesIdList = 1026; + + int32 bulletLocalIdCounter = 1027; } diff --git a/frontend/assets/resources/prefabs/ControlledCharacter.prefab b/frontend/assets/resources/prefabs/ControlledCharacter.prefab index 5a5db55..e740a9e 100644 --- a/frontend/assets/resources/prefabs/ControlledCharacter.prefab +++ b/frontend/assets/resources/prefabs/ControlledCharacter.prefab @@ -25,22 +25,19 @@ }, { "__id__": 8 - }, - { - "__id__": 11 } ], "_active": true, "_components": [ { - "__id__": 21 + "__id__": 22 }, { - "__id__": 22 + "__id__": 23 } ], "_prefab": { - "__id__": 23 + "__id__": 24 }, "_opacity": 255, "_color": { @@ -194,180 +191,6 @@ "fileId": "5apzDmIE9IuaMOyF3z06sc", "sync": false }, - { - "__type__": "cc.Node", - "_name": "particlesystem", - "_objFlags": 0, - "_parent": { - "__id__": 1 - }, - "_children": [], - "_active": false, - "_components": [ - { - "__id__": 6 - } - ], - "_prefab": { - "__id__": 7 - }, - "_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, - 0, - 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__": "cc.ParticleSystem", - "_name": "", - "_objFlags": 0, - "node": { - "__id__": 5 - }, - "_enabled": true, - "_materials": [], - "_srcBlendFactor": 770, - "_dstBlendFactor": 1, - "_custom": true, - "_file": { - "__uuid__": "b2687ac4-099e-403c-a192-ff477686f4f5" - }, - "_spriteFrame": { - "__uuid__": "472df5d3-35e7-4184-9e6c-7f41bee65ee3" - }, - "_texture": null, - "_stopped": true, - "playOnLoad": true, - "autoRemoveOnFinish": false, - "totalParticles": 200, - "duration": -1, - "emissionRate": 999.999985098839, - "life": 0.20000000298023224, - "lifeVar": 0.5, - "_startColor": { - "__type__": "cc.Color", - "r": 202, - "g": 200, - "b": 86, - "a": 163 - }, - "_startColorVar": { - "__type__": "cc.Color", - "r": 229, - "g": 255, - "b": 173, - "a": 198 - }, - "_endColor": { - "__type__": "cc.Color", - "r": 173, - "g": 161, - "b": 19, - "a": 214 - }, - "_endColorVar": { - "__type__": "cc.Color", - "r": 107, - "g": 249, - "b": 249, - "a": 188 - }, - "angle": 360, - "angleVar": 360, - "startSize": 3.369999885559082, - "startSizeVar": 50, - "endSize": 30.31999969482422, - "endSizeVar": 0, - "startSpin": -47.369998931884766, - "startSpinVar": 0, - "endSpin": -47.369998931884766, - "endSpinVar": -142.11000061035156, - "sourcePos": { - "__type__": "cc.Vec2", - "x": 0, - "y": 0 - }, - "posVar": { - "__type__": "cc.Vec2", - "x": 7, - "y": 7 - }, - "_positionType": 1, - "positionType": 1, - "emitterMode": 0, - "gravity": { - "__type__": "cc.Vec2", - "x": 0.25, - "y": 0.8600000143051147 - }, - "speed": 0, - "speedVar": 190.7899932861328, - "tangentialAccel": -92.11000061035156, - "tangentialAccelVar": 65.79000091552734, - "radialAccel": -671.0499877929688, - "radialAccelVar": 65.79000091552734, - "rotationIsDir": false, - "startRadius": 0, - "startRadiusVar": 0, - "endRadius": 0, - "endRadiusVar": 0, - "rotatePerS": 0, - "rotatePerSVar": 0, - "_N$preview": true, - "_id": "" - }, - { - "__type__": "cc.PrefabInfo", - "root": { - "__id__": 1 - }, - "asset": { - "__uuid__": "59bff7a2-23e1-4d69-bce7-afb37eae196a" - }, - "fileId": "04uxaznclAmLRL13XKszPJ", - "sync": false - }, { "__type__": "cc.Node", "_name": "arrowTip", @@ -379,11 +202,11 @@ "_active": true, "_components": [ { - "__id__": 9 + "__id__": 6 } ], "_prefab": { - "__id__": 10 + "__id__": 7 }, "_opacity": 255, "_color": { @@ -437,7 +260,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 8 + "__id__": 5 }, "_enabled": true, "_materials": [ @@ -486,16 +309,19 @@ }, "_children": [ { - "__id__": 12 + "__id__": 9 }, { - "__id__": 16 + "__id__": 13 + }, + { + "__id__": 17 } ], "_active": true, "_components": [], "_prefab": { - "__id__": 20 + "__id__": 21 }, "_opacity": 255, "_color": { @@ -549,20 +375,20 @@ "_name": "MonkGirl", "_objFlags": 0, "_parent": { - "__id__": 11 + "__id__": 8 }, "_children": [], "_active": false, "_components": [ { - "__id__": 13 + "__id__": 10 }, { - "__id__": 14 + "__id__": 11 } ], "_prefab": { - "__id__": 15 + "__id__": 12 }, "_opacity": 255, "_color": { @@ -616,7 +442,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 12 + "__id__": 9 }, "_enabled": true, "_defaultClip": null, @@ -669,7 +495,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 12 + "__id__": 9 }, "_enabled": true, "_materials": [ @@ -712,20 +538,20 @@ "_name": "KnifeGirl", "_objFlags": 0, "_parent": { - "__id__": 11 + "__id__": 8 }, "_children": [], "_active": false, "_components": [ { - "__id__": 17 + "__id__": 14 }, { - "__id__": 18 + "__id__": 15 } ], "_prefab": { - "__id__": 19 + "__id__": 16 }, "_opacity": 255, "_color": { @@ -779,7 +605,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 16 + "__id__": 13 }, "_enabled": true, "_defaultClip": null, @@ -832,7 +658,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 16 + "__id__": 13 }, "_enabled": true, "_materials": [ @@ -870,6 +696,168 @@ "fileId": "bdCx1wrTtJ1KaGHUmgL7iA", "sync": false }, + { + "__type__": "cc.Node", + "_name": "Monk", + "_objFlags": 0, + "_parent": { + "__id__": 8 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 18 + }, + { + "__id__": 19 + } + ], + "_prefab": { + "__id__": 20 + }, + "_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 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -24, + 0, + 0, + 0, + 0, + 1, + 0.65, + 0.55, + 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__": 17 + }, + "_enabled": true, + "_defaultClip": null, + "_clips": [ + { + "__uuid__": "2d402c67-e47d-4de0-8a80-40bc12073ffc" + }, + { + "__uuid__": "18d10aad-93ee-44e8-9048-1f26c136492b" + }, + { + "__uuid__": "d044ab74-be6a-49a2-85ab-eba41922c2cd" + }, + { + "__uuid__": "488ad635-2683-4884-9e93-d1ee67bd0e49" + }, + { + "__uuid__": "53b0ae11-f77f-4c3a-9e6d-76159d135c2c" + }, + { + "__uuid__": "a4315723-e7b6-40e7-9a3c-bac959378b90" + }, + { + "__uuid__": "5035ddfe-ff75-4dff-a506-89cbb26220da" + }, + { + "__uuid__": "ac0fa38d-d3ad-4dff-841d-4d98ee5017db" + }, + { + "__uuid__": "8e17dfc6-68d0-47fe-af06-d30dc2790a6b" + }, + { + "__uuid__": "e4faa04d-28f5-40b0-b1a5-99cd902e5fd6" + }, + { + "__uuid__": "da6a7cc1-9709-42f4-b6d0-17c1917a08a3" + }, + { + "__uuid__": "2cab337d-df23-476d-8a98-b5f115a52d04" + }, + { + "__uuid__": "504dd9c8-7850-44e8-a944-bbdb2260b18a" + }, + { + "__uuid__": "7e0a1e98-ee5a-446f-bec2-7d72b6916503" + } + ], + "playOnLoad": false, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 17 + }, + "_enabled": true, + "_materials": [], + "_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__": "6dcd5722-8ef9-47fd-9520-861d2713e274" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__uuid__": "59bff7a2-23e1-4d69-bce7-afb37eae196a" + }, + "fileId": "45OnfvPXBMSb4XkS+kny9/", + "sync": false + }, { "__type__": "cc.PrefabInfo", "root": { @@ -917,10 +905,10 @@ "_enabled": true, "lastMovedAt": 0, "animNode": { - "__id__": 11 + "__id__": 8 }, "arrowTipNode": { - "__id__": 8 + "__id__": 5 }, "coordLabel": { "__id__": 3 diff --git a/frontend/assets/resources/prefabs/NpcCharacter.prefab b/frontend/assets/resources/prefabs/NpcCharacter.prefab new file mode 100644 index 0000000..3185579 --- /dev/null +++ b/frontend/assets/resources/prefabs/NpcCharacter.prefab @@ -0,0 +1,597 @@ +[ + { + "__type__": "cc.Prefab", + "_name": "", + "_objFlags": 0, + "_native": "", + "data": { + "__id__": 1 + }, + "optimizationPolicy": 0, + "asyncLoadAssets": false, + "readonly": false + }, + { + "__type__": "cc.Node", + "_name": "Root", + "_objFlags": 0, + "_parent": null, + "_children": [ + { + "__id__": 2 + }, + { + "__id__": 5 + }, + { + "__id__": 8 + } + ], + "_active": true, + "_components": [ + { + "__id__": 14 + }, + { + "__id__": 15 + } + ], + "_prefab": { + "__id__": 16 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 120, + "height": 120 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 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": 2, + "groupIndex": 2, + "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "CoordinateLabel", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 3 + } + ], + "_prefab": { + "__id__": 4 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 28.01, + "height": 15.12 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 45, + 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__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_useOriginalSize": false, + "_string": "(0, 0)", + "_N$string": "(0, 0)", + "_fontSize": 12, + "_lineHeight": 12, + "_enableWrapText": true, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_batchAsBitmap": false, + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 0, + "_N$cacheMode": 0, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__uuid__": "4c12c853-b743-4c11-a452-e384834a1c18" + }, + "fileId": "5apzDmIE9IuaMOyF3z06sc", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "arrowTip", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 6 + } + ], + "_prefab": { + "__id__": 7 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 24, + "height": 24 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 3, + 60, + 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__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 5 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" + } + ], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": { + "__uuid__": "a2170e4c-df31-41ef-be73-f4f605e75821" + }, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "030d9286-e8a2-40cf-98f8-baf713f0b8c4" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__uuid__": "4c12c853-b743-4c11-a452-e384834a1c18" + }, + "fileId": "e4mum5GwxNiZ0T8ouw95jJ", + "sync": false + }, + { + "__type__": "cc.Node", + "_name": "animNode", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [ + { + "__id__": 9 + } + ], + "_active": true, + "_components": [], + "_prefab": { + "__id__": 13 + }, + "_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, + 0, + 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__": "cc.Node", + "_name": "Monk", + "_objFlags": 0, + "_parent": { + "__id__": 8 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 10 + }, + { + "__id__": 11 + } + ], + "_prefab": { + "__id__": 12 + }, + "_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 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + -24, + 0, + 0, + 0, + 0, + 1, + 0.65, + 0.55, + 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__": 9 + }, + "_enabled": true, + "_defaultClip": null, + "_clips": [ + { + "__uuid__": "2d402c67-e47d-4de0-8a80-40bc12073ffc" + }, + { + "__uuid__": "18d10aad-93ee-44e8-9048-1f26c136492b" + }, + { + "__uuid__": "d044ab74-be6a-49a2-85ab-eba41922c2cd" + }, + { + "__uuid__": "488ad635-2683-4884-9e93-d1ee67bd0e49" + }, + { + "__uuid__": "53b0ae11-f77f-4c3a-9e6d-76159d135c2c" + }, + { + "__uuid__": "a4315723-e7b6-40e7-9a3c-bac959378b90" + }, + { + "__uuid__": "5035ddfe-ff75-4dff-a506-89cbb26220da" + }, + { + "__uuid__": "ac0fa38d-d3ad-4dff-841d-4d98ee5017db" + }, + { + "__uuid__": "8e17dfc6-68d0-47fe-af06-d30dc2790a6b" + }, + { + "__uuid__": "e4faa04d-28f5-40b0-b1a5-99cd902e5fd6" + }, + { + "__uuid__": "da6a7cc1-9709-42f4-b6d0-17c1917a08a3" + }, + { + "__uuid__": "2cab337d-df23-476d-8a98-b5f115a52d04" + }, + { + "__uuid__": "504dd9c8-7850-44e8-a944-bbdb2260b18a" + }, + { + "__uuid__": "7e0a1e98-ee5a-446f-bec2-7d72b6916503" + } + ], + "playOnLoad": false, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 9 + }, + "_enabled": true, + "_materials": [], + "_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__": "6dcd5722-8ef9-47fd-9520-861d2713e274" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__uuid__": "4c12c853-b743-4c11-a452-e384834a1c18" + }, + "fileId": "c51nwF45ZA/LZDNZ0GKpTi", + "sync": false + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__uuid__": "4c12c853-b743-4c11-a452-e384834a1c18" + }, + "fileId": "7aN7Gcc/tBw5EGlTJVBj2+", + "sync": false + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "_materials": [], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": null, + "_type": 0, + "_sizeMode": 0, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": null, + "_id": "" + }, + { + "__type__": "b74b05YDqZFRo4OkZRFZX8k", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "lastMovedAt": 0, + "animNode": { + "__id__": 8 + }, + "arrowTipNode": { + "__id__": 5 + }, + "coordLabel": { + "__id__": 3 + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__uuid__": "4c12c853-b743-4c11-a452-e384834a1c18" + }, + "fileId": "4cx75uwJJFa7U8QL187QCL", + "sync": false + } +] \ No newline at end of file diff --git a/frontend/assets/resources/prefabs/NpcCharacter.prefab.meta b/frontend/assets/resources/prefabs/NpcCharacter.prefab.meta new file mode 100644 index 0000000..b8f2cce --- /dev/null +++ b/frontend/assets/resources/prefabs/NpcCharacter.prefab.meta @@ -0,0 +1,8 @@ +{ + "ver": "1.2.5", + "uuid": "4c12c853-b743-4c11-a452-e384834a1c18", + "optimizationPolicy": "AUTO", + "asyncLoadAssets": false, + "readonly": false, + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/scenes/login.fire b/frontend/assets/scenes/login.fire index e3c7ca3..8e744bd 100644 --- a/frontend/assets/scenes/login.fire +++ b/frontend/assets/scenes/login.fire @@ -440,7 +440,7 @@ "array": [ 0, 0, - 210.60543794365393, + 215.64032554232523, 0, 0, 0, diff --git a/frontend/assets/scenes/offline_map.fire b/frontend/assets/scenes/offline_map.fire index 257018c..a0d54b2 100644 --- a/frontend/assets/scenes/offline_map.fire +++ b/frontend/assets/scenes/offline_map.fire @@ -461,7 +461,7 @@ "array": [ 0, 0, - 217.36724690689908, + 215.64032554232523, 0, 0, 0, diff --git a/frontend/assets/scripts/AttackingCharacter.js b/frontend/assets/scripts/AttackingCharacter.js index da57a40..5687760 100644 --- a/frontend/assets/scripts/AttackingCharacter.js +++ b/frontend/assets/scripts/AttackingCharacter.js @@ -14,6 +14,7 @@ window.ATK_CHARACTER_STATE = { GetUp1: [10, "GetUp1"], Atk2: [11, "Atk2"], Atk3: [12, "Atk3"], + Atk4: [13, "Atk4"], }; window.ATK_CHARACTER_STATE_ARR = []; diff --git a/frontend/assets/scripts/Map.js b/frontend/assets/scripts/Map.js index d81652b..152e859 100644 --- a/frontend/assets/scripts/Map.js +++ b/frontend/assets/scripts/Map.js @@ -384,7 +384,7 @@ cc.Class({ window.mapIns = self; window.forceBigEndianFloatingNumDecoding = self.forceBigEndianFloatingNumDecoding; - self.showCriticalCoordinateLabels = false; + self.showCriticalCoordinateLabels = true; console.warn("+++++++ Map onLoad()"); @@ -575,21 +575,27 @@ cc.Class({ }, onRoomDownsyncFrame(pbRdf /* pb.RoomDownsyncFrame */ , accompaniedInputFrameDownsyncBatch /* pb.InputFrameDownsyncBatch */ ) { - const jsPlayersArr = new Array().fill(null); - for (let k in pbRdf.playersArr) { + const jsPlayersArr = new Array(pbRdf.playersArr.length).fill(null); + for (let k = 0; k < pbRdf.playersArr.length; ++k) { const pbPlayer = pbRdf.playersArr[k]; const jsPlayer = gopkgs.NewPlayerDownsyncJs(pbPlayer.id, pbPlayer.virtualGridX, pbPlayer.virtualGridY, pbPlayer.dirX, pbPlayer.dirY, pbPlayer.velX, pbPlayer.velY, pbPlayer.framesToRecover, pbPlayer.framesInChState, pbPlayer.activeSkillId, pbPlayer.activeSkillHit, pbPlayer.framesInvinsible, pbPlayer.speed, pbPlayer.battleState, pbPlayer.characterState, pbPlayer.joinIndex, pbPlayer.hp, pbPlayer.maxHp, pbPlayer.colliderRadius, pbPlayer.inAir); jsPlayersArr[k] = jsPlayer; } - const jsMeleeBulletsArr = []; - for (let k in pbRdf.meleeBullets) { + const jsMeleeBulletsArr = new Array(pbRdf.meleeBullets.length).fill(null); + for (let k = 0; k < pbRdf.meleeBullets.length; ++k) { const pbBullet = pbRdf.meleeBullets[k]; - const jsBullet = gopkgs.NewMeleeBulletJs(pbBullet.originatedRenderFrameId, pbBullet.offenderJoinIndex, pbBullet.startupFrames, pbBullet.cancellableStFrame, pbBullet.cancellableEdFrame, pbBullet.activeFrames, pbBullet.hitStunFrames, pbBullet.blockStunFrames, pbBullet.pushbackVelX, pbBullet.pushbackVelY, pbBullet.damage, pbBullet.selfLockVelX, pbBullet.selfLockVelY, pbBullet.hitboxOffsetX, pbBullet.hitboxOffsetY, pbBullet.hitboxSizeX, pbBullet.hitboxSizeY, pbBullet.blowUp); - jsMeleeBulletsArr.push(jsBullet); + const jsMeleeBullet = gopkgs.NewMeleeBulletJs(pbBullet.bulletLocalId, pbBullet.originatedRenderFrameId, pbBullet.offenderJoinIndex, pbBullet.startupFrames, pbBullet.cancellableStFrame, pbBullet.cancellableEdFrame, pbBullet.activeFrames, pbBullet.hitStunFrames, pbBullet.blockStunFrames, pbBullet.pushbackVelX, pbBullet.pushbackVelY, pbBullet.damage, pbBullet.selfLockVelX, pbBullet.selfLockVelY, pbBullet.hitboxOffsetX, pbBullet.hitboxOffsetY, pbBullet.hitboxSizeX, pbBullet.hitboxSizeY, pbBullet.blowUp); + jsMeleeBulletsArr[k] = jsMeleeBullet; + } + const jsFireballBulletsArr = new Array(pbRdf.fireballBullets.length).fill(null); + for (let k = 0; k < pbRdf.fireballBullets.length; ++k) { + const pbBullet = pbRdf.fireballBullets[k]; + const jsFireballBullet = gopkgs.NewFireballBulletJs(pbBullet.bulletLocalId, pbBullet.originatedRenderFrameId, pbBullet.offenderJoinIndex, pbBullet.startupFrames, pbBullet.cancellableStFrame, pbBullet.cancellableEdFrame, pbBullet.activeFrames, pbBullet.hitStunFrames, pbBullet.blockStunFrames, pbBullet.pushbackVelX, pbBullet.pushbackVelY, pbBullet.damage, pbBullet.selfLockVelX, pbBullet.selfLockVelY, pbBullet.hitboxOffsetX, pbBullet.hitboxOffsetY, pbBullet.hitboxSizeX, pbBullet.hitboxSizeY, pbBullet.blowUp, pbBullet.teamId, pbBullet.virtualGridX, pbBullet.virtualGridY, pbBullet.dirX, pbBullet.dirY, pbBullet.velX, pbBullet.velY, pbBullet.speed); + jsFireballBulletsArr[k] = jsFireballBullet; } // This function is also applicable to "re-joining". - const rdf = gopkgs.NewRoomDownsyncFrameJs(pbRdf.id, jsPlayersArr, jsMeleeBulletsArr); + const rdf = gopkgs.NewRoomDownsyncFrameJs(pbRdf.id, jsPlayersArr, pbRdf.bulletLocalIdCounter, jsMeleeBulletsArr, jsFireballBulletsArr); const self = window.mapIns; self.onInputFrameDownsyncBatch(accompaniedInputFrameDownsyncBatch); // Important to do this step before setting IN_BATTLE if (!self.recentRenderCache) { @@ -1285,6 +1291,34 @@ actuallyUsedinputList:{${self.inputFrameDownsyncStr(actuallyUsedInputClone)}}`); g2.stroke(); } } + + for (let k in rdf.FireballBullets) { + const fireballBullet = rdf.FireballBullets[k]; + if ( + fireballBullet.Bullet.OriginatedRenderFrameId + fireballBullet.Bullet.StartupFrames <= rdf.Id + && + fireballBullet.Bullet.OriginatedRenderFrameId + fireballBullet.Bullet.StartupFrames + fireballBullet.Bullet.ActiveFrames > rdf.Id + ) { + const offender = rdf.PlayersArr[fireballBullet.Bullet.OffenderJoinIndex - 1]; + if (1 == offender.JoinIndex) { + g2.strokeColor = cc.Color.BLUE; + } else { + g2.strokeColor = cc.Color.RED; + } + + const [bulletWx, bulletWy] = gopkgs.VirtualGridToWorldPos(fireballBullet.VirtualGridX, fireballBullet.VirtualGridY); + const [halfColliderWidth, halfColliderHeight] = gopkgs.VirtualGridToWorldPos((fireballBullet.Bullet.HitboxSizeX >> 1), (fireballBullet.Bullet.HitboxSizeY >> 1)); + const [bulletCx, bulletCy] = gopkgs.WorldToPolygonColliderBLPos(bulletWx, bulletWy, halfColliderWidth, halfColliderHeight, topPadding, bottomPadding, leftPadding, rightPadding, 0, 0); + const pts = [[0, 0], [leftPadding + halfColliderWidth * 2 + rightPadding, 0], [leftPadding + halfColliderWidth * 2 + rightPadding, bottomPadding + halfColliderHeight * 2 + topPadding], [0, bottomPadding + halfColliderHeight * 2 + topPadding]]; + + g2.moveTo(bulletCx, bulletCy); + for (let j = 0; j < pts.length; j += 1) { + g2.lineTo(pts[j][0] + bulletCx, pts[j][1] + bulletCy); + } + g2.lineTo(bulletCx, bulletCy); + g2.stroke(); + } + } } }, }); diff --git a/frontend/assets/scripts/OfflineMap.js b/frontend/assets/scripts/OfflineMap.js index fe495e0..c13b031 100644 --- a/frontend/assets/scripts/OfflineMap.js +++ b/frontend/assets/scripts/OfflineMap.js @@ -13,7 +13,7 @@ cc.Class({ onLoad() { const self = this; window.mapIns = self; - self.showCriticalCoordinateLabels = false; + self.showCriticalCoordinateLabels = true; const mapNode = self.node; const canvasNode = mapNode.parent; @@ -129,7 +129,7 @@ cc.Class({ inAir: true, }), ], - speciesIdList: [1, 0], + speciesIdList: [4096, 0], }); self.selfPlayerInfo = { diff --git a/frontend/assets/scripts/TileCollisionManagerSingleton.js b/frontend/assets/scripts/TileCollisionManagerSingleton.js index 169b2fa..fc56496 100644 --- a/frontend/assets/scripts/TileCollisionManagerSingleton.js +++ b/frontend/assets/scripts/TileCollisionManagerSingleton.js @@ -110,6 +110,8 @@ TileCollisionManager.prototype.extractBoundaryObjects = function(withTiledMapNod let toRet = { playerStartingPositions: [], barriers: [], + npcStartingPositions: [], + npcPatrolCues: [], }; const tiledMapIns = withTiledMapNode.getComponent(cc.TiledMap); // This is a magic name. @@ -128,6 +130,38 @@ TileCollisionManager.prototype.extractBoundaryObjects = function(withTiledMapNod toRet.playerStartingPositions.push(wpos); } break; + case "NpcPatrolCue": + for (let j = 0; j < allObjects.length; ++j) { + const cccMaskedX = allObjects[j].x, + cccMaskedY = allObjects[j].y; + const origX = cccMaskedX, + origY = withTiledMapNode.getContentSize().height - cccMaskedY; + let wpos = this.continuousObjLayerOffsetToContinuousMapNodePos(withTiledMapNode, cc.v2(origX, origY)); + const cue = { + x: wpos.x, + y: wpos.y, + flAct: parseInt(allObjects[j].flAct), + frAct: parseInt(allObjects[j].frAct), + }; + toRet.npcPatrolCues.push(cue); + } + break; + case "NpcStartingPos": + for (let j = 0; j < allObjects.length; ++j) { + const cccMaskedX = allObjects[j].x, + cccMaskedY = allObjects[j].y; + const origX = cccMaskedX, + origY = withTiledMapNode.getContentSize().height - cccMaskedY; + let wpos = this.continuousObjLayerOffsetToContinuousMapNodePos(withTiledMapNode, cc.v2(origX, origY)); + const npc = { + x: wpos.x, + y: wpos.y, + speciesId: parseInt(allObjects[j].speciesId), + dirX: parseInt(allObjects[j].dirX), + }; + toRet.npcStartingPositions.push(npc); + } + break; case "Barrier": for (let j = 0; j < allObjects.length; ++j) { let object = allObjects[j]; @@ -205,30 +239,6 @@ TileCollisionManager.prototype.initMapNodeByTiledBoundaries = function(mapScript mapScriptIns.barrierColliders.push(newBarrierColliderIns); mapScriptIns.node.addChild(newBarrier); } - - const allLayers = tiledMapIns.getLayers(); - for (let layer of allLayers) { - const layerType = layer.getProperty("type"); - switch (layerType) { - case "barrier_and_shelter": - setLocalZOrder(layer.node, 3); - break; - default: - break; - } - } - - const allObjectGroups = tiledMapIns.getObjectGroups(); - for (let objectGroup of allObjectGroups) { - const objectGroupType = objectGroup.getProperty("type"); - switch (objectGroupType) { - case "barrier_and_shelter": - setLocalZOrder(objectGroup.node, 3); - break; - default: - break; - } - } } window.tileCollisionManager = new TileCollisionManager(); diff --git a/frontend/assets/scripts/modules/room_downsync_frame_proto_bundle.forcemsg.js b/frontend/assets/scripts/modules/room_downsync_frame_proto_bundle.forcemsg.js index 474499d..f5e476b 100644 --- a/frontend/assets/scripts/modules/room_downsync_frame_proto_bundle.forcemsg.js +++ b/frontend/assets/scripts/modules/room_downsync_frame_proto_bundle.forcemsg.js @@ -1214,6 +1214,8 @@ $root.protos = (function() { * @property {number|null} [activeSkillId] PlayerDownsync activeSkillId * @property {number|null} [activeSkillHit] PlayerDownsync activeSkillHit * @property {number|null} [framesInvinsible] PlayerDownsync framesInvinsible + * @property {number|null} [bulletTeamId] PlayerDownsync bulletTeamId + * @property {number|null} [chCollisionTeamId] PlayerDownsync chCollisionTeamId * @property {string|null} [name] PlayerDownsync name * @property {string|null} [displayName] PlayerDownsync displayName * @property {string|null} [avatar] PlayerDownsync avatar @@ -1418,6 +1420,22 @@ $root.protos = (function() { */ PlayerDownsync.prototype.framesInvinsible = 0; + /** + * PlayerDownsync bulletTeamId. + * @member {number} bulletTeamId + * @memberof protos.PlayerDownsync + * @instance + */ + PlayerDownsync.prototype.bulletTeamId = 0; + + /** + * PlayerDownsync chCollisionTeamId. + * @member {number} chCollisionTeamId + * @memberof protos.PlayerDownsync + * @instance + */ + PlayerDownsync.prototype.chCollisionTeamId = 0; + /** * PlayerDownsync name. * @member {string} name @@ -1512,6 +1530,10 @@ $root.protos = (function() { writer.uint32(/* id 22, wireType 0 =*/176).int32(message.activeSkillHit); if (message.framesInvinsible != null && Object.hasOwnProperty.call(message, "framesInvinsible")) writer.uint32(/* id 23, wireType 0 =*/184).int32(message.framesInvinsible); + if (message.bulletTeamId != null && Object.hasOwnProperty.call(message, "bulletTeamId")) + writer.uint32(/* id 24, wireType 0 =*/192).int32(message.bulletTeamId); + if (message.chCollisionTeamId != null && Object.hasOwnProperty.call(message, "chCollisionTeamId")) + writer.uint32(/* id 25, wireType 0 =*/200).int32(message.chCollisionTeamId); if (message.name != null && Object.hasOwnProperty.call(message, "name")) writer.uint32(/* id 997, wireType 2 =*/7978).string(message.name); if (message.displayName != null && Object.hasOwnProperty.call(message, "displayName")) @@ -1644,6 +1666,14 @@ $root.protos = (function() { message.framesInvinsible = reader.int32(); break; } + case 24: { + message.bulletTeamId = reader.int32(); + break; + } + case 25: { + message.chCollisionTeamId = reader.int32(); + break; + } case 997: { message.name = reader.string(); break; @@ -1760,6 +1790,12 @@ $root.protos = (function() { if (message.framesInvinsible != null && message.hasOwnProperty("framesInvinsible")) if (!$util.isInteger(message.framesInvinsible)) return "framesInvinsible: integer expected"; + if (message.bulletTeamId != null && message.hasOwnProperty("bulletTeamId")) + if (!$util.isInteger(message.bulletTeamId)) + return "bulletTeamId: integer expected"; + if (message.chCollisionTeamId != null && message.hasOwnProperty("chCollisionTeamId")) + if (!$util.isInteger(message.chCollisionTeamId)) + return "chCollisionTeamId: integer expected"; if (message.name != null && message.hasOwnProperty("name")) if (!$util.isString(message.name)) return "name: string expected"; @@ -1830,6 +1866,10 @@ $root.protos = (function() { message.activeSkillHit = object.activeSkillHit | 0; if (object.framesInvinsible != null) message.framesInvinsible = object.framesInvinsible | 0; + if (object.bulletTeamId != null) + message.bulletTeamId = object.bulletTeamId | 0; + if (object.chCollisionTeamId != null) + message.chCollisionTeamId = object.chCollisionTeamId | 0; if (object.name != null) message.name = String(object.name); if (object.displayName != null) @@ -1876,6 +1916,8 @@ $root.protos = (function() { object.activeSkillId = 0; object.activeSkillHit = 0; object.framesInvinsible = 0; + object.bulletTeamId = 0; + object.chCollisionTeamId = 0; object.name = ""; object.displayName = ""; object.avatar = ""; @@ -1926,6 +1968,10 @@ $root.protos = (function() { object.activeSkillHit = message.activeSkillHit; if (message.framesInvinsible != null && message.hasOwnProperty("framesInvinsible")) object.framesInvinsible = message.framesInvinsible; + if (message.bulletTeamId != null && message.hasOwnProperty("bulletTeamId")) + object.bulletTeamId = message.bulletTeamId; + if (message.chCollisionTeamId != null && message.hasOwnProperty("chCollisionTeamId")) + object.chCollisionTeamId = message.chCollisionTeamId; if (message.name != null && message.hasOwnProperty("name")) object.name = message.name; if (message.displayName != null && message.hasOwnProperty("displayName")) @@ -4070,6 +4116,8 @@ $root.protos = (function() { * @property {number|null} [hitboxSizeX] MeleeBullet hitboxSizeX * @property {number|null} [hitboxSizeY] MeleeBullet hitboxSizeY * @property {boolean|null} [blowUp] MeleeBullet blowUp + * @property {number|null} [teamId] MeleeBullet teamId + * @property {number|null} [bulletLocalId] MeleeBullet bulletLocalId */ /** @@ -4231,6 +4279,22 @@ $root.protos = (function() { */ MeleeBullet.prototype.blowUp = false; + /** + * MeleeBullet teamId. + * @member {number} teamId + * @memberof protos.MeleeBullet + * @instance + */ + MeleeBullet.prototype.teamId = 0; + + /** + * MeleeBullet bulletLocalId. + * @member {number} bulletLocalId + * @memberof protos.MeleeBullet + * @instance + */ + MeleeBullet.prototype.bulletLocalId = 0; + /** * Creates a new MeleeBullet instance using the specified properties. * @function create @@ -4291,6 +4355,10 @@ $root.protos = (function() { writer.uint32(/* id 17, wireType 0 =*/136).int32(message.hitboxSizeY); if (message.blowUp != null && Object.hasOwnProperty.call(message, "blowUp")) writer.uint32(/* id 18, wireType 0 =*/144).bool(message.blowUp); + if (message.teamId != null && Object.hasOwnProperty.call(message, "teamId")) + writer.uint32(/* id 19, wireType 0 =*/152).int32(message.teamId); + if (message.bulletLocalId != null && Object.hasOwnProperty.call(message, "bulletLocalId")) + writer.uint32(/* id 20, wireType 0 =*/160).int32(message.bulletLocalId); return writer; }; @@ -4397,6 +4465,14 @@ $root.protos = (function() { message.blowUp = reader.bool(); break; } + case 19: { + message.teamId = reader.int32(); + break; + } + case 20: { + message.bulletLocalId = reader.int32(); + break; + } default: reader.skipType(tag & 7); break; @@ -4486,6 +4562,12 @@ $root.protos = (function() { if (message.blowUp != null && message.hasOwnProperty("blowUp")) if (typeof message.blowUp !== "boolean") return "blowUp: boolean expected"; + if (message.teamId != null && message.hasOwnProperty("teamId")) + if (!$util.isInteger(message.teamId)) + return "teamId: integer expected"; + if (message.bulletLocalId != null && message.hasOwnProperty("bulletLocalId")) + if (!$util.isInteger(message.bulletLocalId)) + return "bulletLocalId: integer expected"; return null; }; @@ -4537,6 +4619,10 @@ $root.protos = (function() { message.hitboxSizeY = object.hitboxSizeY | 0; if (object.blowUp != null) message.blowUp = Boolean(object.blowUp); + if (object.teamId != null) + message.teamId = object.teamId | 0; + if (object.bulletLocalId != null) + message.bulletLocalId = object.bulletLocalId | 0; return message; }; @@ -4572,6 +4658,8 @@ $root.protos = (function() { object.hitboxSizeX = 0; object.hitboxSizeY = 0; object.blowUp = false; + object.teamId = 0; + object.bulletLocalId = 0; } if (message.originatedRenderFrameId != null && message.hasOwnProperty("originatedRenderFrameId")) object.originatedRenderFrameId = message.originatedRenderFrameId; @@ -4609,6 +4697,10 @@ $root.protos = (function() { object.hitboxSizeY = message.hitboxSizeY; if (message.blowUp != null && message.hasOwnProperty("blowUp")) object.blowUp = message.blowUp; + if (message.teamId != null && message.hasOwnProperty("teamId")) + object.teamId = message.teamId; + if (message.bulletLocalId != null && message.hasOwnProperty("bulletLocalId")) + object.bulletLocalId = message.bulletLocalId; return object; }; @@ -4641,6 +4733,808 @@ $root.protos = (function() { return MeleeBullet; })(); + protos.FireballBullet = (function() { + + /** + * Properties of a FireballBullet. + * @memberof protos + * @interface IFireballBullet + * @property {number|null} [originatedRenderFrameId] FireballBullet originatedRenderFrameId + * @property {number|null} [offenderJoinIndex] FireballBullet offenderJoinIndex + * @property {number|null} [startupFrames] FireballBullet startupFrames + * @property {number|null} [cancellableStFrame] FireballBullet cancellableStFrame + * @property {number|null} [cancellableEdFrame] FireballBullet cancellableEdFrame + * @property {number|null} [activeFrames] FireballBullet activeFrames + * @property {number|null} [hitStunFrames] FireballBullet hitStunFrames + * @property {number|null} [blockStunFrames] FireballBullet blockStunFrames + * @property {number|null} [pushbackVelX] FireballBullet pushbackVelX + * @property {number|null} [pushbackVelY] FireballBullet pushbackVelY + * @property {number|null} [damage] FireballBullet damage + * @property {number|null} [selfLockVelX] FireballBullet selfLockVelX + * @property {number|null} [selfLockVelY] FireballBullet selfLockVelY + * @property {number|null} [hitboxOffsetX] FireballBullet hitboxOffsetX + * @property {number|null} [hitboxOffsetY] FireballBullet hitboxOffsetY + * @property {number|null} [hitboxSizeX] FireballBullet hitboxSizeX + * @property {number|null} [hitboxSizeY] FireballBullet hitboxSizeY + * @property {boolean|null} [blowUp] FireballBullet blowUp + * @property {number|null} [teamId] FireballBullet teamId + * @property {number|null} [bulletLocalId] FireballBullet bulletLocalId + * @property {number|null} [virtualGridX] FireballBullet virtualGridX + * @property {number|null} [virtualGridY] FireballBullet virtualGridY + * @property {number|null} [dirX] FireballBullet dirX + * @property {number|null} [dirY] FireballBullet dirY + * @property {number|null} [velX] FireballBullet velX + * @property {number|null} [velY] FireballBullet velY + * @property {number|null} [speed] FireballBullet speed + */ + + /** + * Constructs a new FireballBullet. + * @memberof protos + * @classdesc Represents a FireballBullet. + * @implements IFireballBullet + * @constructor + * @param {protos.IFireballBullet=} [properties] Properties to set + */ + function FireballBullet(properties) { + if (properties) + for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * FireballBullet originatedRenderFrameId. + * @member {number} originatedRenderFrameId + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.originatedRenderFrameId = 0; + + /** + * FireballBullet offenderJoinIndex. + * @member {number} offenderJoinIndex + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.offenderJoinIndex = 0; + + /** + * FireballBullet startupFrames. + * @member {number} startupFrames + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.startupFrames = 0; + + /** + * FireballBullet cancellableStFrame. + * @member {number} cancellableStFrame + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.cancellableStFrame = 0; + + /** + * FireballBullet cancellableEdFrame. + * @member {number} cancellableEdFrame + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.cancellableEdFrame = 0; + + /** + * FireballBullet activeFrames. + * @member {number} activeFrames + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.activeFrames = 0; + + /** + * FireballBullet hitStunFrames. + * @member {number} hitStunFrames + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.hitStunFrames = 0; + + /** + * FireballBullet blockStunFrames. + * @member {number} blockStunFrames + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.blockStunFrames = 0; + + /** + * FireballBullet pushbackVelX. + * @member {number} pushbackVelX + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.pushbackVelX = 0; + + /** + * FireballBullet pushbackVelY. + * @member {number} pushbackVelY + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.pushbackVelY = 0; + + /** + * FireballBullet damage. + * @member {number} damage + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.damage = 0; + + /** + * FireballBullet selfLockVelX. + * @member {number} selfLockVelX + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.selfLockVelX = 0; + + /** + * FireballBullet selfLockVelY. + * @member {number} selfLockVelY + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.selfLockVelY = 0; + + /** + * FireballBullet hitboxOffsetX. + * @member {number} hitboxOffsetX + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.hitboxOffsetX = 0; + + /** + * FireballBullet hitboxOffsetY. + * @member {number} hitboxOffsetY + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.hitboxOffsetY = 0; + + /** + * FireballBullet hitboxSizeX. + * @member {number} hitboxSizeX + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.hitboxSizeX = 0; + + /** + * FireballBullet hitboxSizeY. + * @member {number} hitboxSizeY + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.hitboxSizeY = 0; + + /** + * FireballBullet blowUp. + * @member {boolean} blowUp + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.blowUp = false; + + /** + * FireballBullet teamId. + * @member {number} teamId + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.teamId = 0; + + /** + * FireballBullet bulletLocalId. + * @member {number} bulletLocalId + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.bulletLocalId = 0; + + /** + * FireballBullet virtualGridX. + * @member {number} virtualGridX + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.virtualGridX = 0; + + /** + * FireballBullet virtualGridY. + * @member {number} virtualGridY + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.virtualGridY = 0; + + /** + * FireballBullet dirX. + * @member {number} dirX + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.dirX = 0; + + /** + * FireballBullet dirY. + * @member {number} dirY + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.dirY = 0; + + /** + * FireballBullet velX. + * @member {number} velX + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.velX = 0; + + /** + * FireballBullet velY. + * @member {number} velY + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.velY = 0; + + /** + * FireballBullet speed. + * @member {number} speed + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.speed = 0; + + /** + * Creates a new FireballBullet instance using the specified properties. + * @function create + * @memberof protos.FireballBullet + * @static + * @param {protos.IFireballBullet=} [properties] Properties to set + * @returns {protos.FireballBullet} FireballBullet instance + */ + FireballBullet.create = function create(properties) { + return new FireballBullet(properties); + }; + + /** + * Encodes the specified FireballBullet message. Does not implicitly {@link protos.FireballBullet.verify|verify} messages. + * @function encode + * @memberof protos.FireballBullet + * @static + * @param {protos.FireballBullet} message FireballBullet message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + FireballBullet.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.originatedRenderFrameId != null && Object.hasOwnProperty.call(message, "originatedRenderFrameId")) + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.originatedRenderFrameId); + if (message.offenderJoinIndex != null && Object.hasOwnProperty.call(message, "offenderJoinIndex")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.offenderJoinIndex); + if (message.startupFrames != null && Object.hasOwnProperty.call(message, "startupFrames")) + writer.uint32(/* id 3, wireType 0 =*/24).int32(message.startupFrames); + if (message.cancellableStFrame != null && Object.hasOwnProperty.call(message, "cancellableStFrame")) + writer.uint32(/* id 4, wireType 0 =*/32).int32(message.cancellableStFrame); + if (message.cancellableEdFrame != null && Object.hasOwnProperty.call(message, "cancellableEdFrame")) + writer.uint32(/* id 5, wireType 0 =*/40).int32(message.cancellableEdFrame); + if (message.activeFrames != null && Object.hasOwnProperty.call(message, "activeFrames")) + writer.uint32(/* id 6, wireType 0 =*/48).int32(message.activeFrames); + if (message.hitStunFrames != null && Object.hasOwnProperty.call(message, "hitStunFrames")) + writer.uint32(/* id 7, wireType 0 =*/56).int32(message.hitStunFrames); + if (message.blockStunFrames != null && Object.hasOwnProperty.call(message, "blockStunFrames")) + writer.uint32(/* id 8, wireType 0 =*/64).int32(message.blockStunFrames); + if (message.pushbackVelX != null && Object.hasOwnProperty.call(message, "pushbackVelX")) + writer.uint32(/* id 9, wireType 0 =*/72).int32(message.pushbackVelX); + if (message.pushbackVelY != null && Object.hasOwnProperty.call(message, "pushbackVelY")) + writer.uint32(/* id 10, wireType 0 =*/80).int32(message.pushbackVelY); + if (message.damage != null && Object.hasOwnProperty.call(message, "damage")) + writer.uint32(/* id 11, wireType 0 =*/88).int32(message.damage); + if (message.selfLockVelX != null && Object.hasOwnProperty.call(message, "selfLockVelX")) + writer.uint32(/* id 12, wireType 0 =*/96).int32(message.selfLockVelX); + if (message.selfLockVelY != null && Object.hasOwnProperty.call(message, "selfLockVelY")) + writer.uint32(/* id 13, wireType 0 =*/104).int32(message.selfLockVelY); + if (message.hitboxOffsetX != null && Object.hasOwnProperty.call(message, "hitboxOffsetX")) + writer.uint32(/* id 14, wireType 0 =*/112).int32(message.hitboxOffsetX); + if (message.hitboxOffsetY != null && Object.hasOwnProperty.call(message, "hitboxOffsetY")) + writer.uint32(/* id 15, wireType 0 =*/120).int32(message.hitboxOffsetY); + if (message.hitboxSizeX != null && Object.hasOwnProperty.call(message, "hitboxSizeX")) + writer.uint32(/* id 16, wireType 0 =*/128).int32(message.hitboxSizeX); + if (message.hitboxSizeY != null && Object.hasOwnProperty.call(message, "hitboxSizeY")) + writer.uint32(/* id 17, wireType 0 =*/136).int32(message.hitboxSizeY); + if (message.blowUp != null && Object.hasOwnProperty.call(message, "blowUp")) + writer.uint32(/* id 18, wireType 0 =*/144).bool(message.blowUp); + if (message.teamId != null && Object.hasOwnProperty.call(message, "teamId")) + writer.uint32(/* id 19, wireType 0 =*/152).int32(message.teamId); + if (message.bulletLocalId != null && Object.hasOwnProperty.call(message, "bulletLocalId")) + writer.uint32(/* id 20, wireType 0 =*/160).int32(message.bulletLocalId); + if (message.virtualGridX != null && Object.hasOwnProperty.call(message, "virtualGridX")) + writer.uint32(/* id 999, wireType 0 =*/7992).int32(message.virtualGridX); + if (message.virtualGridY != null && Object.hasOwnProperty.call(message, "virtualGridY")) + writer.uint32(/* id 1000, wireType 0 =*/8000).int32(message.virtualGridY); + if (message.dirX != null && Object.hasOwnProperty.call(message, "dirX")) + writer.uint32(/* id 1001, wireType 0 =*/8008).int32(message.dirX); + if (message.dirY != null && Object.hasOwnProperty.call(message, "dirY")) + writer.uint32(/* id 1002, wireType 0 =*/8016).int32(message.dirY); + if (message.velX != null && Object.hasOwnProperty.call(message, "velX")) + writer.uint32(/* id 1003, wireType 0 =*/8024).int32(message.velX); + if (message.velY != null && Object.hasOwnProperty.call(message, "velY")) + writer.uint32(/* id 1004, wireType 0 =*/8032).int32(message.velY); + if (message.speed != null && Object.hasOwnProperty.call(message, "speed")) + writer.uint32(/* id 1005, wireType 0 =*/8040).int32(message.speed); + return writer; + }; + + /** + * Encodes the specified FireballBullet message, length delimited. Does not implicitly {@link protos.FireballBullet.verify|verify} messages. + * @function encodeDelimited + * @memberof protos.FireballBullet + * @static + * @param {protos.FireballBullet} message FireballBullet message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + FireballBullet.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a FireballBullet message from the specified reader or buffer. + * @function decode + * @memberof protos.FireballBullet + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {protos.FireballBullet} FireballBullet + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + FireballBullet.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.protos.FireballBullet(); + while (reader.pos < end) { + var tag = reader.uint32(); + switch (tag >>> 3) { + case 1: { + message.originatedRenderFrameId = reader.int32(); + break; + } + case 2: { + message.offenderJoinIndex = reader.int32(); + break; + } + case 3: { + message.startupFrames = reader.int32(); + break; + } + case 4: { + message.cancellableStFrame = reader.int32(); + break; + } + case 5: { + message.cancellableEdFrame = reader.int32(); + break; + } + case 6: { + message.activeFrames = reader.int32(); + break; + } + case 7: { + message.hitStunFrames = reader.int32(); + break; + } + case 8: { + message.blockStunFrames = reader.int32(); + break; + } + case 9: { + message.pushbackVelX = reader.int32(); + break; + } + case 10: { + message.pushbackVelY = reader.int32(); + break; + } + case 11: { + message.damage = reader.int32(); + break; + } + case 12: { + message.selfLockVelX = reader.int32(); + break; + } + case 13: { + message.selfLockVelY = reader.int32(); + break; + } + case 14: { + message.hitboxOffsetX = reader.int32(); + break; + } + case 15: { + message.hitboxOffsetY = reader.int32(); + break; + } + case 16: { + message.hitboxSizeX = reader.int32(); + break; + } + case 17: { + message.hitboxSizeY = reader.int32(); + break; + } + case 18: { + message.blowUp = reader.bool(); + break; + } + case 19: { + message.teamId = reader.int32(); + break; + } + case 20: { + message.bulletLocalId = reader.int32(); + break; + } + case 999: { + message.virtualGridX = reader.int32(); + break; + } + case 1000: { + message.virtualGridY = reader.int32(); + break; + } + case 1001: { + message.dirX = reader.int32(); + break; + } + case 1002: { + message.dirY = reader.int32(); + break; + } + case 1003: { + message.velX = reader.int32(); + break; + } + case 1004: { + message.velY = reader.int32(); + break; + } + case 1005: { + message.speed = reader.int32(); + break; + } + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a FireballBullet message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof protos.FireballBullet + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {protos.FireballBullet} FireballBullet + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + FireballBullet.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a FireballBullet message. + * @function verify + * @memberof protos.FireballBullet + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + FireballBullet.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.originatedRenderFrameId != null && message.hasOwnProperty("originatedRenderFrameId")) + if (!$util.isInteger(message.originatedRenderFrameId)) + return "originatedRenderFrameId: integer expected"; + if (message.offenderJoinIndex != null && message.hasOwnProperty("offenderJoinIndex")) + if (!$util.isInteger(message.offenderJoinIndex)) + return "offenderJoinIndex: integer expected"; + if (message.startupFrames != null && message.hasOwnProperty("startupFrames")) + if (!$util.isInteger(message.startupFrames)) + return "startupFrames: integer expected"; + if (message.cancellableStFrame != null && message.hasOwnProperty("cancellableStFrame")) + if (!$util.isInteger(message.cancellableStFrame)) + return "cancellableStFrame: integer expected"; + if (message.cancellableEdFrame != null && message.hasOwnProperty("cancellableEdFrame")) + if (!$util.isInteger(message.cancellableEdFrame)) + return "cancellableEdFrame: integer expected"; + if (message.activeFrames != null && message.hasOwnProperty("activeFrames")) + if (!$util.isInteger(message.activeFrames)) + return "activeFrames: integer expected"; + if (message.hitStunFrames != null && message.hasOwnProperty("hitStunFrames")) + if (!$util.isInteger(message.hitStunFrames)) + return "hitStunFrames: integer expected"; + if (message.blockStunFrames != null && message.hasOwnProperty("blockStunFrames")) + if (!$util.isInteger(message.blockStunFrames)) + return "blockStunFrames: integer expected"; + if (message.pushbackVelX != null && message.hasOwnProperty("pushbackVelX")) + if (!$util.isInteger(message.pushbackVelX)) + return "pushbackVelX: integer expected"; + if (message.pushbackVelY != null && message.hasOwnProperty("pushbackVelY")) + if (!$util.isInteger(message.pushbackVelY)) + return "pushbackVelY: integer expected"; + if (message.damage != null && message.hasOwnProperty("damage")) + if (!$util.isInteger(message.damage)) + return "damage: integer expected"; + if (message.selfLockVelX != null && message.hasOwnProperty("selfLockVelX")) + if (!$util.isInteger(message.selfLockVelX)) + return "selfLockVelX: integer expected"; + if (message.selfLockVelY != null && message.hasOwnProperty("selfLockVelY")) + if (!$util.isInteger(message.selfLockVelY)) + return "selfLockVelY: integer expected"; + if (message.hitboxOffsetX != null && message.hasOwnProperty("hitboxOffsetX")) + if (!$util.isInteger(message.hitboxOffsetX)) + return "hitboxOffsetX: integer expected"; + if (message.hitboxOffsetY != null && message.hasOwnProperty("hitboxOffsetY")) + if (!$util.isInteger(message.hitboxOffsetY)) + return "hitboxOffsetY: integer expected"; + if (message.hitboxSizeX != null && message.hasOwnProperty("hitboxSizeX")) + if (!$util.isInteger(message.hitboxSizeX)) + return "hitboxSizeX: integer expected"; + if (message.hitboxSizeY != null && message.hasOwnProperty("hitboxSizeY")) + if (!$util.isInteger(message.hitboxSizeY)) + return "hitboxSizeY: integer expected"; + if (message.blowUp != null && message.hasOwnProperty("blowUp")) + if (typeof message.blowUp !== "boolean") + return "blowUp: boolean expected"; + if (message.teamId != null && message.hasOwnProperty("teamId")) + if (!$util.isInteger(message.teamId)) + return "teamId: integer expected"; + if (message.bulletLocalId != null && message.hasOwnProperty("bulletLocalId")) + if (!$util.isInteger(message.bulletLocalId)) + return "bulletLocalId: integer expected"; + if (message.virtualGridX != null && message.hasOwnProperty("virtualGridX")) + if (!$util.isInteger(message.virtualGridX)) + return "virtualGridX: integer expected"; + if (message.virtualGridY != null && message.hasOwnProperty("virtualGridY")) + if (!$util.isInteger(message.virtualGridY)) + return "virtualGridY: integer expected"; + if (message.dirX != null && message.hasOwnProperty("dirX")) + if (!$util.isInteger(message.dirX)) + return "dirX: integer expected"; + if (message.dirY != null && message.hasOwnProperty("dirY")) + if (!$util.isInteger(message.dirY)) + return "dirY: integer expected"; + if (message.velX != null && message.hasOwnProperty("velX")) + if (!$util.isInteger(message.velX)) + return "velX: integer expected"; + if (message.velY != null && message.hasOwnProperty("velY")) + if (!$util.isInteger(message.velY)) + return "velY: integer expected"; + if (message.speed != null && message.hasOwnProperty("speed")) + if (!$util.isInteger(message.speed)) + return "speed: integer expected"; + return null; + }; + + /** + * Creates a FireballBullet message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof protos.FireballBullet + * @static + * @param {Object.} object Plain object + * @returns {protos.FireballBullet} FireballBullet + */ + FireballBullet.fromObject = function fromObject(object) { + if (object instanceof $root.protos.FireballBullet) + return object; + var message = new $root.protos.FireballBullet(); + if (object.originatedRenderFrameId != null) + message.originatedRenderFrameId = object.originatedRenderFrameId | 0; + if (object.offenderJoinIndex != null) + message.offenderJoinIndex = object.offenderJoinIndex | 0; + if (object.startupFrames != null) + message.startupFrames = object.startupFrames | 0; + if (object.cancellableStFrame != null) + message.cancellableStFrame = object.cancellableStFrame | 0; + if (object.cancellableEdFrame != null) + message.cancellableEdFrame = object.cancellableEdFrame | 0; + if (object.activeFrames != null) + message.activeFrames = object.activeFrames | 0; + if (object.hitStunFrames != null) + message.hitStunFrames = object.hitStunFrames | 0; + if (object.blockStunFrames != null) + message.blockStunFrames = object.blockStunFrames | 0; + if (object.pushbackVelX != null) + message.pushbackVelX = object.pushbackVelX | 0; + if (object.pushbackVelY != null) + message.pushbackVelY = object.pushbackVelY | 0; + if (object.damage != null) + message.damage = object.damage | 0; + if (object.selfLockVelX != null) + message.selfLockVelX = object.selfLockVelX | 0; + if (object.selfLockVelY != null) + message.selfLockVelY = object.selfLockVelY | 0; + if (object.hitboxOffsetX != null) + message.hitboxOffsetX = object.hitboxOffsetX | 0; + if (object.hitboxOffsetY != null) + message.hitboxOffsetY = object.hitboxOffsetY | 0; + if (object.hitboxSizeX != null) + message.hitboxSizeX = object.hitboxSizeX | 0; + if (object.hitboxSizeY != null) + message.hitboxSizeY = object.hitboxSizeY | 0; + if (object.blowUp != null) + message.blowUp = Boolean(object.blowUp); + if (object.teamId != null) + message.teamId = object.teamId | 0; + if (object.bulletLocalId != null) + message.bulletLocalId = object.bulletLocalId | 0; + if (object.virtualGridX != null) + message.virtualGridX = object.virtualGridX | 0; + if (object.virtualGridY != null) + message.virtualGridY = object.virtualGridY | 0; + if (object.dirX != null) + message.dirX = object.dirX | 0; + if (object.dirY != null) + message.dirY = object.dirY | 0; + if (object.velX != null) + message.velX = object.velX | 0; + if (object.velY != null) + message.velY = object.velY | 0; + if (object.speed != null) + message.speed = object.speed | 0; + return message; + }; + + /** + * Creates a plain object from a FireballBullet message. Also converts values to other types if specified. + * @function toObject + * @memberof protos.FireballBullet + * @static + * @param {protos.FireballBullet} message FireballBullet + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + FireballBullet.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + object.originatedRenderFrameId = 0; + object.offenderJoinIndex = 0; + object.startupFrames = 0; + object.cancellableStFrame = 0; + object.cancellableEdFrame = 0; + object.activeFrames = 0; + object.hitStunFrames = 0; + object.blockStunFrames = 0; + object.pushbackVelX = 0; + object.pushbackVelY = 0; + object.damage = 0; + object.selfLockVelX = 0; + object.selfLockVelY = 0; + object.hitboxOffsetX = 0; + object.hitboxOffsetY = 0; + object.hitboxSizeX = 0; + object.hitboxSizeY = 0; + object.blowUp = false; + object.teamId = 0; + object.bulletLocalId = 0; + object.virtualGridX = 0; + object.virtualGridY = 0; + object.dirX = 0; + object.dirY = 0; + object.velX = 0; + object.velY = 0; + object.speed = 0; + } + if (message.originatedRenderFrameId != null && message.hasOwnProperty("originatedRenderFrameId")) + object.originatedRenderFrameId = message.originatedRenderFrameId; + if (message.offenderJoinIndex != null && message.hasOwnProperty("offenderJoinIndex")) + object.offenderJoinIndex = message.offenderJoinIndex; + if (message.startupFrames != null && message.hasOwnProperty("startupFrames")) + object.startupFrames = message.startupFrames; + if (message.cancellableStFrame != null && message.hasOwnProperty("cancellableStFrame")) + object.cancellableStFrame = message.cancellableStFrame; + if (message.cancellableEdFrame != null && message.hasOwnProperty("cancellableEdFrame")) + object.cancellableEdFrame = message.cancellableEdFrame; + if (message.activeFrames != null && message.hasOwnProperty("activeFrames")) + object.activeFrames = message.activeFrames; + if (message.hitStunFrames != null && message.hasOwnProperty("hitStunFrames")) + object.hitStunFrames = message.hitStunFrames; + if (message.blockStunFrames != null && message.hasOwnProperty("blockStunFrames")) + object.blockStunFrames = message.blockStunFrames; + if (message.pushbackVelX != null && message.hasOwnProperty("pushbackVelX")) + object.pushbackVelX = message.pushbackVelX; + if (message.pushbackVelY != null && message.hasOwnProperty("pushbackVelY")) + object.pushbackVelY = message.pushbackVelY; + if (message.damage != null && message.hasOwnProperty("damage")) + object.damage = message.damage; + if (message.selfLockVelX != null && message.hasOwnProperty("selfLockVelX")) + object.selfLockVelX = message.selfLockVelX; + if (message.selfLockVelY != null && message.hasOwnProperty("selfLockVelY")) + object.selfLockVelY = message.selfLockVelY; + if (message.hitboxOffsetX != null && message.hasOwnProperty("hitboxOffsetX")) + object.hitboxOffsetX = message.hitboxOffsetX; + if (message.hitboxOffsetY != null && message.hasOwnProperty("hitboxOffsetY")) + object.hitboxOffsetY = message.hitboxOffsetY; + if (message.hitboxSizeX != null && message.hasOwnProperty("hitboxSizeX")) + object.hitboxSizeX = message.hitboxSizeX; + if (message.hitboxSizeY != null && message.hasOwnProperty("hitboxSizeY")) + object.hitboxSizeY = message.hitboxSizeY; + if (message.blowUp != null && message.hasOwnProperty("blowUp")) + object.blowUp = message.blowUp; + if (message.teamId != null && message.hasOwnProperty("teamId")) + object.teamId = message.teamId; + if (message.bulletLocalId != null && message.hasOwnProperty("bulletLocalId")) + object.bulletLocalId = message.bulletLocalId; + if (message.virtualGridX != null && message.hasOwnProperty("virtualGridX")) + object.virtualGridX = message.virtualGridX; + if (message.virtualGridY != null && message.hasOwnProperty("virtualGridY")) + object.virtualGridY = message.virtualGridY; + if (message.dirX != null && message.hasOwnProperty("dirX")) + object.dirX = message.dirX; + if (message.dirY != null && message.hasOwnProperty("dirY")) + object.dirY = message.dirY; + if (message.velX != null && message.hasOwnProperty("velX")) + object.velX = message.velX; + if (message.velY != null && message.hasOwnProperty("velY")) + object.velY = message.velY; + if (message.speed != null && message.hasOwnProperty("speed")) + object.speed = message.speed; + return object; + }; + + /** + * Converts this FireballBullet to JSON. + * @function toJSON + * @memberof protos.FireballBullet + * @instance + * @returns {Object.} JSON object + */ + FireballBullet.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + /** + * Gets the default type url for FireballBullet + * @function getTypeUrl + * @memberof protos.FireballBullet + * @static + * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com") + * @returns {string} The default type url + */ + FireballBullet.getTypeUrl = function getTypeUrl(typeUrlPrefix) { + if (typeUrlPrefix === undefined) { + typeUrlPrefix = "type.googleapis.com"; + } + return typeUrlPrefix + "/protos.FireballBullet"; + }; + + return FireballBullet; + })(); + protos.BattleColliderInfo = (function() { /** @@ -4841,7 +5735,7 @@ $root.protos = (function() { if (message.collisionMinStep != null && Object.hasOwnProperty.call(message, "collisionMinStep")) writer.uint32(/* id 13, wireType 0 =*/104).int32(message.collisionMinStep); if (message.frameDataLoggingEnabled != null && Object.hasOwnProperty.call(message, "frameDataLoggingEnabled")) - writer.uint32(/* id 999, wireType 0 =*/7992).bool(message.frameDataLoggingEnabled); + writer.uint32(/* id 1024, wireType 0 =*/8192).bool(message.frameDataLoggingEnabled); return writer; }; @@ -4928,7 +5822,7 @@ $root.protos = (function() { message.collisionMinStep = reader.int32(); break; } - case 999: { + case 1024: { message.frameDataLoggingEnabled = reader.bool(); break; } @@ -5182,9 +6076,11 @@ $root.protos = (function() { * @property {Array.|null} [playersArr] RoomDownsyncFrame playersArr * @property {number|Long|null} [countdownNanos] RoomDownsyncFrame countdownNanos * @property {Array.|null} [meleeBullets] RoomDownsyncFrame meleeBullets + * @property {Array.|null} [fireballBullets] RoomDownsyncFrame fireballBullets * @property {number|Long|null} [backendUnconfirmedMask] RoomDownsyncFrame backendUnconfirmedMask * @property {boolean|null} [shouldForceResync] RoomDownsyncFrame shouldForceResync * @property {Array.|null} [speciesIdList] RoomDownsyncFrame speciesIdList + * @property {number|null} [bulletLocalIdCounter] RoomDownsyncFrame bulletLocalIdCounter */ /** @@ -5198,6 +6094,7 @@ $root.protos = (function() { function RoomDownsyncFrame(properties) { this.playersArr = []; this.meleeBullets = []; + this.fireballBullets = []; this.speciesIdList = []; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) @@ -5237,6 +6134,14 @@ $root.protos = (function() { */ RoomDownsyncFrame.prototype.meleeBullets = $util.emptyArray; + /** + * RoomDownsyncFrame fireballBullets. + * @member {Array.} fireballBullets + * @memberof protos.RoomDownsyncFrame + * @instance + */ + RoomDownsyncFrame.prototype.fireballBullets = $util.emptyArray; + /** * RoomDownsyncFrame backendUnconfirmedMask. * @member {number|Long} backendUnconfirmedMask @@ -5261,6 +6166,14 @@ $root.protos = (function() { */ RoomDownsyncFrame.prototype.speciesIdList = $util.emptyArray; + /** + * RoomDownsyncFrame bulletLocalIdCounter. + * @member {number} bulletLocalIdCounter + * @memberof protos.RoomDownsyncFrame + * @instance + */ + RoomDownsyncFrame.prototype.bulletLocalIdCounter = 0; + /** * Creates a new RoomDownsyncFrame instance using the specified properties. * @function create @@ -5295,16 +6208,21 @@ $root.protos = (function() { if (message.meleeBullets != null && message.meleeBullets.length) for (var i = 0; i < message.meleeBullets.length; ++i) $root.protos.MeleeBullet.encode(message.meleeBullets[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim(); + if (message.fireballBullets != null && message.fireballBullets.length) + for (var i = 0; i < message.fireballBullets.length; ++i) + $root.protos.FireballBullet.encode(message.fireballBullets[i], writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim(); if (message.backendUnconfirmedMask != null && Object.hasOwnProperty.call(message, "backendUnconfirmedMask")) - writer.uint32(/* id 5, wireType 0 =*/40).uint64(message.backendUnconfirmedMask); + writer.uint32(/* id 1024, wireType 0 =*/8192).uint64(message.backendUnconfirmedMask); if (message.shouldForceResync != null && Object.hasOwnProperty.call(message, "shouldForceResync")) - writer.uint32(/* id 6, wireType 0 =*/48).bool(message.shouldForceResync); + writer.uint32(/* id 1025, wireType 0 =*/8200).bool(message.shouldForceResync); if (message.speciesIdList != null && message.speciesIdList.length) { - writer.uint32(/* id 7, wireType 2 =*/58).fork(); + writer.uint32(/* id 1026, wireType 2 =*/8210).fork(); for (var i = 0; i < message.speciesIdList.length; ++i) writer.int32(message.speciesIdList[i]); writer.ldelim(); } + if (message.bulletLocalIdCounter != null && Object.hasOwnProperty.call(message, "bulletLocalIdCounter")) + writer.uint32(/* id 1027, wireType 0 =*/8216).int32(message.bulletLocalIdCounter); return writer; }; @@ -5360,14 +6278,20 @@ $root.protos = (function() { break; } case 5: { + if (!(message.fireballBullets && message.fireballBullets.length)) + message.fireballBullets = []; + message.fireballBullets.push($root.protos.FireballBullet.decode(reader, reader.uint32())); + break; + } + case 1024: { message.backendUnconfirmedMask = reader.uint64(); break; } - case 6: { + case 1025: { message.shouldForceResync = reader.bool(); break; } - case 7: { + case 1026: { if (!(message.speciesIdList && message.speciesIdList.length)) message.speciesIdList = []; if ((tag & 7) === 2) { @@ -5378,6 +6302,10 @@ $root.protos = (function() { message.speciesIdList.push(reader.int32()); break; } + case 1027: { + message.bulletLocalIdCounter = reader.int32(); + break; + } default: reader.skipType(tag & 7); break; @@ -5437,6 +6365,15 @@ $root.protos = (function() { return "meleeBullets." + error; } } + if (message.fireballBullets != null && message.hasOwnProperty("fireballBullets")) { + if (!Array.isArray(message.fireballBullets)) + return "fireballBullets: array expected"; + for (var i = 0; i < message.fireballBullets.length; ++i) { + var error = $root.protos.FireballBullet.verify(message.fireballBullets[i]); + if (error) + return "fireballBullets." + error; + } + } if (message.backendUnconfirmedMask != null && message.hasOwnProperty("backendUnconfirmedMask")) if (!$util.isInteger(message.backendUnconfirmedMask) && !(message.backendUnconfirmedMask && $util.isInteger(message.backendUnconfirmedMask.low) && $util.isInteger(message.backendUnconfirmedMask.high))) return "backendUnconfirmedMask: integer|Long expected"; @@ -5450,6 +6387,9 @@ $root.protos = (function() { if (!$util.isInteger(message.speciesIdList[i])) return "speciesIdList: integer[] expected"; } + if (message.bulletLocalIdCounter != null && message.hasOwnProperty("bulletLocalIdCounter")) + if (!$util.isInteger(message.bulletLocalIdCounter)) + return "bulletLocalIdCounter: integer expected"; return null; }; @@ -5496,6 +6436,16 @@ $root.protos = (function() { message.meleeBullets[i] = $root.protos.MeleeBullet.fromObject(object.meleeBullets[i]); } } + if (object.fireballBullets) { + if (!Array.isArray(object.fireballBullets)) + throw TypeError(".protos.RoomDownsyncFrame.fireballBullets: array expected"); + message.fireballBullets = []; + for (var i = 0; i < object.fireballBullets.length; ++i) { + if (typeof object.fireballBullets[i] !== "object") + throw TypeError(".protos.RoomDownsyncFrame.fireballBullets: object expected"); + message.fireballBullets[i] = $root.protos.FireballBullet.fromObject(object.fireballBullets[i]); + } + } if (object.backendUnconfirmedMask != null) if ($util.Long) (message.backendUnconfirmedMask = $util.Long.fromValue(object.backendUnconfirmedMask)).unsigned = true; @@ -5514,6 +6464,8 @@ $root.protos = (function() { for (var i = 0; i < object.speciesIdList.length; ++i) message.speciesIdList[i] = object.speciesIdList[i] | 0; } + if (object.bulletLocalIdCounter != null) + message.bulletLocalIdCounter = object.bulletLocalIdCounter | 0; return message; }; @@ -5533,6 +6485,7 @@ $root.protos = (function() { if (options.arrays || options.defaults) { object.playersArr = []; object.meleeBullets = []; + object.fireballBullets = []; object.speciesIdList = []; } if (options.defaults) { @@ -5548,6 +6501,7 @@ $root.protos = (function() { } else object.backendUnconfirmedMask = options.longs === String ? "0" : 0; object.shouldForceResync = false; + object.bulletLocalIdCounter = 0; } if (message.id != null && message.hasOwnProperty("id")) object.id = message.id; @@ -5566,6 +6520,11 @@ $root.protos = (function() { for (var j = 0; j < message.meleeBullets.length; ++j) object.meleeBullets[j] = $root.protos.MeleeBullet.toObject(message.meleeBullets[j], options); } + if (message.fireballBullets && message.fireballBullets.length) { + object.fireballBullets = []; + for (var j = 0; j < message.fireballBullets.length; ++j) + object.fireballBullets[j] = $root.protos.FireballBullet.toObject(message.fireballBullets[j], options); + } if (message.backendUnconfirmedMask != null && message.hasOwnProperty("backendUnconfirmedMask")) if (typeof message.backendUnconfirmedMask === "number") object.backendUnconfirmedMask = options.longs === String ? String(message.backendUnconfirmedMask) : message.backendUnconfirmedMask; @@ -5578,6 +6537,8 @@ $root.protos = (function() { for (var j = 0; j < message.speciesIdList.length; ++j) object.speciesIdList[j] = message.speciesIdList[j]; } + if (message.bulletLocalIdCounter != null && message.hasOwnProperty("bulletLocalIdCounter")) + object.bulletLocalIdCounter = message.bulletLocalIdCounter; return object; }; diff --git a/jsexport/battle/battle.go b/jsexport/battle/battle.go index 36853b3..ffc4ad9 100644 --- a/jsexport/battle/battle.go +++ b/jsexport/battle/battle.go @@ -64,6 +64,7 @@ const ( ATK_CHARACTER_STATE_ATK2 = int32(11) ATK_CHARACTER_STATE_ATK3 = int32(12) + ATK_CHARACTER_STATE_ATK4 = int32(13) ) var inAirSet = map[int32]bool{ @@ -357,9 +358,9 @@ func calcHardPushbacksNorms(joinIndex int32, playerCollider *resolv.Object, play isBarrier := false switch obj.Data.(type) { case *PlayerDownsync: - case *MeleeBullet: + case *MeleeBullet, *FireballBullet: default: - // By default it's a regular barrier, even if data is nil, note that Golang syntax of switch-case is kind of confusing, this "default" condition is met only if "!*PlayerDownsync && !*MeleeBullet". + // By default it's a regular barrier, even if data is nil, note that Golang syntax of switch-case is kind of confusing, this "default" condition is met only if "!*PlayerDownsync && !*MeleeBullet && !*FireballBullet". isBarrier = true } @@ -470,10 +471,12 @@ func ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(inputsBuffer *RingBuffer } nextRenderFrameMeleeBullets := make([]*MeleeBullet, 0, len(currRenderFrame.MeleeBullets)) // Is there any better way to reduce malloc/free impact, e.g. smart prediction for fixed memory allocation? + nextRenderFrameFireballBullets := make([]*FireballBullet, 0, len(currRenderFrame.FireballBullets)) effPushbacks := make([]Vec2D, roomCapacity) hardPushbackNorms := make([]*[]Vec2D, roomCapacity) jumpedOrNotList := make([]bool, roomCapacity) + bulletLocalId := currRenderFrame.BulletLocalIdCounter // 1. Process player inputs for i, currPlayerDownsync := range currRenderFrame.PlayersArr { jumpedOrNotList[i] = false @@ -490,36 +493,57 @@ func ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(inputsBuffer *RingBuffer if skillConfig, existent := skills[skillId]; existent { thatPlayerInNextFrame.ActiveSkillId = int32(skillId) thatPlayerInNextFrame.ActiveSkillHit = 0 + thatPlayerInNextFrame.FramesToRecover = skillConfig.RecoveryFrames + xfac := int32(1) + if 0 > thatPlayerInNextFrame.DirX { + xfac = -xfac + } + hasLockVel := false // Hardcoded to use only the first hit for now switch v := skillConfig.Hits[thatPlayerInNextFrame.ActiveSkillHit].(type) { case *MeleeBullet: var newBullet MeleeBullet = *v // Copied primitive fields into an onstack variable + newBullet.BulletLocalId = bulletLocalId + bulletLocalId++ newBullet.OriginatedRenderFrameId = currRenderFrame.Id newBullet.OffenderJoinIndex = joinIndex nextRenderFrameMeleeBullets = append(nextRenderFrameMeleeBullets, &newBullet) - thatPlayerInNextFrame.FramesToRecover = skillConfig.RecoveryFrames - - hasLockVel := false if NO_LOCK_VEL != v.SelfLockVelX { hasLockVel = true - xfac := int32(1) - if 0 > thatPlayerInNextFrame.DirX { - xfac = -xfac - } thatPlayerInNextFrame.VelX = xfac * v.SelfLockVelX } if NO_LOCK_VEL != v.SelfLockVelY { hasLockVel = true thatPlayerInNextFrame.VelY = v.SelfLockVelY } - if false == hasLockVel { - if false == currPlayerDownsync.InAir { - thatPlayerInNextFrame.VelX = 0 - } + case *FireballBullet: + var newBullet FireballBullet = *v // Copied primitive fields into an onstack variable + newBullet.BulletLocalId = bulletLocalId + bulletLocalId++ + xfac := int32(1) + if 0 > thatPlayerInNextFrame.DirX { + xfac = -xfac + } + newBullet.VirtualGridX, newBullet.VirtualGridY = currPlayerDownsync.VirtualGridX+xfac*newBullet.HitboxOffsetX, currPlayerDownsync.VirtualGridY + newBullet.OriginatedRenderFrameId = currRenderFrame.Id + newBullet.OffenderJoinIndex = joinIndex + newBullet.VelX = newBullet.Speed * xfac + newBullet.VelY = 0 + nextRenderFrameFireballBullets = append(nextRenderFrameFireballBullets, &newBullet) + if NO_LOCK_VEL != v.SelfLockVelX { + hasLockVel = true + thatPlayerInNextFrame.VelX = xfac * v.SelfLockVelX + } + if NO_LOCK_VEL != v.SelfLockVelY { + hasLockVel = true + thatPlayerInNextFrame.VelY = v.SelfLockVelY } } + if false == hasLockVel && false == currPlayerDownsync.InAir { + thatPlayerInNextFrame.VelX = 0 + } thatPlayerInNextFrame.CharacterState = skillConfig.BoundChState continue // Don't allow movement if skill is used } @@ -588,11 +612,23 @@ func ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(inputsBuffer *RingBuffer newBulletCollider := GenerateRectCollider(bulletWx, bulletWy, hitboxSizeWx, hitboxSizeWy, SNAP_INTO_PLATFORM_OVERLAP, SNAP_INTO_PLATFORM_OVERLAP, SNAP_INTO_PLATFORM_OVERLAP, SNAP_INTO_PLATFORM_OVERLAP, collisionSpaceOffsetX, collisionSpaceOffsetY, meleeBullet, "MeleeBullet") collisionSys.Add(newBulletCollider) bulletColliders = append(bulletColliders, newBulletCollider) - } else { + } else if meleeBullet.OriginatedRenderFrameId+meleeBullet.StartupFrames+meleeBullet.ActiveFrames > currRenderFrame.Id { nextRenderFrameMeleeBullets = append(nextRenderFrameMeleeBullets, meleeBullet) } } + for _, fireballBullet := range currRenderFrame.FireballBullets { + if (fireballBullet.OriginatedRenderFrameId+fireballBullet.StartupFrames < currRenderFrame.Id) && (fireballBullet.OriginatedRenderFrameId+fireballBullet.StartupFrames+fireballBullet.ActiveFrames > currRenderFrame.Id) { + bulletWx, bulletWy := VirtualGridToWorldPos(fireballBullet.VirtualGridX, fireballBullet.VirtualGridY) + hitboxSizeWx, hitboxSizeWy := VirtualGridToWorldPos(fireballBullet.HitboxSizeX, fireballBullet.HitboxSizeY) + newBulletCollider := GenerateRectCollider(bulletWx, bulletWy, hitboxSizeWx, hitboxSizeWy, SNAP_INTO_PLATFORM_OVERLAP, SNAP_INTO_PLATFORM_OVERLAP, SNAP_INTO_PLATFORM_OVERLAP, SNAP_INTO_PLATFORM_OVERLAP, collisionSpaceOffsetX, collisionSpaceOffsetY, fireballBullet, "FireballBullet") + collisionSys.Add(newBulletCollider) + bulletColliders = append(bulletColliders, newBulletCollider) + } else if fireballBullet.OriginatedRenderFrameId+fireballBullet.StartupFrames+fireballBullet.ActiveFrames > currRenderFrame.Id { + nextRenderFrameFireballBullets = append(nextRenderFrameFireballBullets, fireballBullet) + } + } + // 4. Calc pushbacks for each player (after its movement) w/o bullets for i, currPlayerDownsync := range currRenderFrame.PlayersArr { joinIndex := currPlayerDownsync.JoinIndex @@ -609,7 +645,7 @@ func ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(inputsBuffer *RingBuffer switch obj.Data.(type) { case *PlayerDownsync: isAnotherPlayer = true - case *MeleeBullet: + case *MeleeBullet, *FireballBullet: isBullet = true default: // By default it's a regular barrier, even if data is nil @@ -686,50 +722,102 @@ func ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(inputsBuffer *RingBuffer for _, bulletCollider := range bulletColliders { collision := bulletCollider.Check(0, 0) bulletCollider.Space.Remove(bulletCollider) // Make sure that the bulletCollider is always removed for each renderFrame - switch v := bulletCollider.Data.(type) { - case *MeleeBullet: - if nil == collision { - nextRenderFrameMeleeBullets = append(nextRenderFrameMeleeBullets, v) - continue - } - bulletShape := bulletCollider.Shape.(*resolv.ConvexPolygon) - offender := currRenderFrame.PlayersArr[v.OffenderJoinIndex-1] - for _, obj := range collision.Objects { - defenderShape := obj.Shape.(*resolv.ConvexPolygon) - switch t := obj.Data.(type) { - case *PlayerDownsync: - if v.OffenderJoinIndex == t.JoinIndex { - continue + addToNextRenderFrame := true + if nil != collision { + switch v := bulletCollider.Data.(type) { + case *MeleeBullet: + bulletShape := bulletCollider.Shape.(*resolv.ConvexPolygon) + offender := currRenderFrame.PlayersArr[v.OffenderJoinIndex-1] + for _, obj := range collision.Objects { + defenderShape := obj.Shape.(*resolv.ConvexPolygon) + switch t := obj.Data.(type) { + case *PlayerDownsync: + if v.OffenderJoinIndex == t.JoinIndex { + continue + } + overlapped, _, _, _ := CalcPushbacks(0, 0, bulletShape, defenderShape) + if !overlapped { + continue + } + addToNextRenderFrame = false + if _, existent := invinsibleSet[t.CharacterState]; existent { + continue + } + if 0 < t.FramesInvinsible { + continue + } + xfac := int32(1) // By now, straight Punch offset doesn't respect "y-axis" + if 0 > offender.DirX { + xfac = -xfac + } + pushbackVelX, pushbackVelY := xfac*v.PushbackVelX, v.PushbackVelY + atkedPlayerInNextFrame := nextRenderFramePlayers[t.JoinIndex-1] + atkedPlayerInNextFrame.VelX = pushbackVelX + atkedPlayerInNextFrame.VelY = pushbackVelY + if v.BlowUp { + atkedPlayerInNextFrame.CharacterState = ATK_CHARACTER_STATE_BLOWN_UP1 + } else { + atkedPlayerInNextFrame.CharacterState = ATK_CHARACTER_STATE_ATKED1 + } + oldFramesToRecover := nextRenderFramePlayers[t.JoinIndex-1].FramesToRecover + if v.HitStunFrames > oldFramesToRecover { + atkedPlayerInNextFrame.FramesToRecover = v.HitStunFrames + } + default: + addToNextRenderFrame = false } - if _, existent := invinsibleSet[t.CharacterState]; existent { - continue - } - if 0 < t.FramesInvinsible { - continue - } - overlapped, _, _, _ := CalcPushbacks(0, 0, bulletShape, defenderShape) - if !overlapped { - continue - } - xfac := int32(1) // By now, straight Punch offset doesn't respect "y-axis" - if 0 > offender.DirX { - xfac = -xfac - } - pushbackVelX, pushbackVelY := xfac*v.PushbackVelX, v.PushbackVelY - atkedPlayerInNextFrame := nextRenderFramePlayers[t.JoinIndex-1] - atkedPlayerInNextFrame.VelX = pushbackVelX - atkedPlayerInNextFrame.VelY = pushbackVelY - if v.BlowUp { - atkedPlayerInNextFrame.CharacterState = ATK_CHARACTER_STATE_BLOWN_UP1 - } else { - atkedPlayerInNextFrame.CharacterState = ATK_CHARACTER_STATE_ATKED1 - } - oldFramesToRecover := nextRenderFramePlayers[t.JoinIndex-1].FramesToRecover - if v.HitStunFrames > oldFramesToRecover { - atkedPlayerInNextFrame.FramesToRecover = v.HitStunFrames - } - default: } + case *FireballBullet: + bulletShape := bulletCollider.Shape.(*resolv.ConvexPolygon) + offender := currRenderFrame.PlayersArr[v.OffenderJoinIndex-1] + for _, obj := range collision.Objects { + defenderShape := obj.Shape.(*resolv.ConvexPolygon) + switch t := obj.Data.(type) { + case *PlayerDownsync: + if v.OffenderJoinIndex == t.JoinIndex { + continue + } + overlapped, _, _, _ := CalcPushbacks(0, 0, bulletShape, defenderShape) + if !overlapped { + continue + } + addToNextRenderFrame = false + if _, existent := invinsibleSet[t.CharacterState]; existent { + continue + } + if 0 < t.FramesInvinsible { + continue + } + xfac := int32(1) // By now, straight Punch offset doesn't respect "y-axis" + if 0 > offender.DirX { + xfac = -xfac + } + pushbackVelX, pushbackVelY := xfac*v.PushbackVelX, v.PushbackVelY + atkedPlayerInNextFrame := nextRenderFramePlayers[t.JoinIndex-1] + atkedPlayerInNextFrame.VelX = pushbackVelX + atkedPlayerInNextFrame.VelY = pushbackVelY + if v.BlowUp { + atkedPlayerInNextFrame.CharacterState = ATK_CHARACTER_STATE_BLOWN_UP1 + } else { + atkedPlayerInNextFrame.CharacterState = ATK_CHARACTER_STATE_ATKED1 + } + oldFramesToRecover := nextRenderFramePlayers[t.JoinIndex-1].FramesToRecover + if v.HitStunFrames > oldFramesToRecover { + atkedPlayerInNextFrame.FramesToRecover = v.HitStunFrames + } + default: + addToNextRenderFrame = false + } + } + } + } + if addToNextRenderFrame { + switch v := bulletCollider.Data.(type) { + case *MeleeBullet: + nextRenderFrameMeleeBullets = append(nextRenderFrameMeleeBullets, v) + case *FireballBullet: + v.VirtualGridX, v.VirtualGridY = v.VirtualGridX+v.VelX, v.VirtualGridY+v.VelY + nextRenderFrameFireballBullets = append(nextRenderFrameFireballBullets, v) } } } @@ -777,9 +865,10 @@ func ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(inputsBuffer *RingBuffer } return &RoomDownsyncFrame{ - Id: currRenderFrame.Id + 1, - PlayersArr: nextRenderFramePlayers, - MeleeBullets: nextRenderFrameMeleeBullets, + Id: currRenderFrame.Id + 1, + PlayersArr: nextRenderFramePlayers, + MeleeBullets: nextRenderFrameMeleeBullets, + FireballBullets: nextRenderFrameFireballBullets, } } diff --git a/jsexport/battle/characterConfig.go b/jsexport/battle/characterConfig.go index c8ab482..d94ea4f 100644 --- a/jsexport/battle/characterConfig.go +++ b/jsexport/battle/characterConfig.go @@ -104,6 +104,49 @@ var Characters = map[int]*CharacterConfig{ } } + // By default no skill can be fired + return NO_SKILL + }, + }, + 4096: &CharacterConfig{ + SpeciesId: 4096, + SpeciesName: "Monk", + + InAirIdleFrameIdxTurningPoint: 42, + InAirIdleFrameIdxTurnedCycle: 2, + + LayDownFrames: int32(14), + LayDownFramesToRecover: int32(14), + + GetUpInvinsibleFrames: int32(8), + GetUpFramesToRecover: int32(30), + + Speed: int32(float64(1.0) * WORLD_TO_VIRTUAL_GRID_RATIO), + JumpingInitVelY: int32(float64(9) * WORLD_TO_VIRTUAL_GRID_RATIO), + + SkillMapper: func(patternId int, currPlayerDownsync *PlayerDownsync) int { + if 1 == patternId { + if 0 == currPlayerDownsync.FramesToRecover { + if currPlayerDownsync.InAir { + return 257 + } else { + return 10 + } + } 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 }, @@ -293,6 +336,123 @@ var skills = map[int]*Skill{ }, }, }, + 7: &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), + SelfLockVelX: int32(float64(0.05) * WORLD_TO_VIRTUAL_GRID_RATIO), + SelfLockVelY: NO_LOCK_VEL, + 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: 2, + }, + // TODO: Use non-zero "selfLockVel" + }, + }, + }, + }, + 8: &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), + SelfLockVelX: int32(float64(0.1) * WORLD_TO_VIRTUAL_GRID_RATIO), + SelfLockVelY: NO_LOCK_VEL, + 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: 3, + }, + }, + }, + }, + }, + 9: &Skill{ + RecoveryFrames: int32(50), + RecoveryFramesOnBlock: int32(50), + RecoveryFramesOnHit: int32(50), + ReleaseTriggerType: int32(1), + BoundChState: ATK_CHARACTER_STATE_ATK3, + Hits: []interface{}{ + &MeleeBullet{ + Bullet: Bullet{ + StartupFrames: int32(15), + ActiveFrames: int32(30), + HitStunFrames: MAX_INT32, + BlockStunFrames: int32(9), + Damage: int32(10), + SelfLockVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO), + SelfLockVelY: int32(float64(5) * WORLD_TO_VIRTUAL_GRID_RATIO), + PushbackVelX: int32(float64(2) * WORLD_TO_VIRTUAL_GRID_RATIO), + PushbackVelY: int32(float64(7) * WORLD_TO_VIRTUAL_GRID_RATIO), + HitboxOffsetX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), + HitboxOffsetY: int32(0), + HitboxSizeX: int32(float64(48) * WORLD_TO_VIRTUAL_GRID_RATIO), + HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), + }, + }, + }, + }, + 10: &Skill{ + RecoveryFrames: int32(40), + RecoveryFramesOnBlock: int32(40), + RecoveryFramesOnHit: int32(40), + ReleaseTriggerType: int32(1), + BoundChState: ATK_CHARACTER_STATE_ATK4, + Hits: []interface{}{ + &FireballBullet{ + Speed: int32(float64(8) * WORLD_TO_VIRTUAL_GRID_RATIO), + Bullet: Bullet{ + StartupFrames: int32(15), + ActiveFrames: MAX_INT32, + HitStunFrames: int32(15), + BlockStunFrames: int32(9), + Damage: int32(20), + SelfLockVelX: NO_LOCK_VEL, + SelfLockVelY: NO_LOCK_VEL, + PushbackVelX: int32(float64(2) * WORLD_TO_VIRTUAL_GRID_RATIO), + PushbackVelY: int32(0), + HitboxOffsetX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), + HitboxOffsetY: int32(0), + HitboxSizeX: int32(float64(48) * WORLD_TO_VIRTUAL_GRID_RATIO), + HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), + }, + }, + }, + }, 255: &Skill{ RecoveryFrames: int32(30), RecoveryFramesOnBlock: int32(30), @@ -345,4 +505,30 @@ var skills = map[int]*Skill{ }, }, }, + 257: &Skill{ + RecoveryFrames: int32(30), + RecoveryFramesOnBlock: int32(30), + RecoveryFramesOnHit: int32(30), + 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), + SelfLockVelX: NO_LOCK_VEL, + SelfLockVelY: NO_LOCK_VEL, + 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), + }, + }, + }, + }, } diff --git a/jsexport/battle/room_downsync_frame.go b/jsexport/battle/room_downsync_frame.go index 52f99fd..6206e6a 100644 --- a/jsexport/battle/room_downsync_frame.go +++ b/jsexport/battle/room_downsync_frame.go @@ -38,6 +38,9 @@ type PlayerDownsync struct { ActiveSkillHit int32 FramesInvinsible int32 + + BulletTeamId int32 + ChCollisionTeamId int32 // not the same as "BulletTeamId", because even in the same team, we should allow inter-character collisions } type InputFrameDecoded struct { @@ -57,6 +60,8 @@ type Barrier struct { } type Bullet struct { + BulletLocalId int32 // for referencing cached nodes in frontend rendering + // for offender OriginatedRenderFrameId int32 // Copied from the first bullet for all subsequent bullets OffenderJoinIndex int32 // Copied to favor collision handling of the dispatched bullet @@ -83,6 +88,8 @@ type Bullet struct { BlowUp bool CancelTransit map[int]int + + TeamId int32 } type MeleeBullet struct { @@ -111,14 +118,15 @@ type Skill struct { } type RoomDownsyncFrame struct { - Id int32 - PlayersArr []*PlayerDownsync - CountdownNanos int64 - MeleeBullets []*MeleeBullet - FireballBullets []*FireballBullet - BackendUnconfirmedMask uint64 - ShouldForceResync bool - PlayerOpPatternToSkillId map[int]int + Id int32 + PlayersArr []*PlayerDownsync + CountdownNanos int64 + MeleeBullets []*MeleeBullet + FireballBullets []*FireballBullet + BackendUnconfirmedMask uint64 + ShouldForceResync bool + + BulletLocalIdCounter int32 } type InputFrameDownsync struct { @@ -126,3 +134,10 @@ type InputFrameDownsync struct { InputList []uint64 ConfirmedList uint64 } + +type NpcPatrolCue struct { + FlAct uint64 // Encoded input when collided with this cue & facing left + FrAct uint64 // Encoded input when collided with this cue & facing right + X float64 + Y float64 +} diff --git a/jsexport/main.go b/jsexport/main.go index 73c1ed8..49fc767 100644 --- a/jsexport/main.go +++ b/jsexport/main.go @@ -42,34 +42,37 @@ func NewBarrierJs(boundary *Polygon2D) *js.Object { }) } -func NewPlayerDownsyncJs(id, virtualGridX, virtualGridY, dirX, dirY, velX, velY, framesToRecover, framesInChState, activeSkillId, activeSkillHit, framesInvinsible, speed, battleState, characterState, joinIndex, hp, maxHp, colliderRadius int32, inAir bool) *js.Object { +func NewPlayerDownsyncJs(id, virtualGridX, virtualGridY, dirX, dirY, velX, velY, framesToRecover, framesInChState, activeSkillId, activeSkillHit, framesInvinsible, speed, battleState, characterState, joinIndex, hp, maxHp, colliderRadius int32, inAir bool, bulletTeamId, chCollisionTeamId int32) *js.Object { return js.MakeWrapper(&PlayerDownsync{ - Id: id, - VirtualGridX: virtualGridX, - VirtualGridY: virtualGridY, - DirX: dirX, - DirY: dirY, - VelX: velX, - VelY: velY, - FramesToRecover: framesToRecover, - FramesInChState: framesInChState, - ActiveSkillId: activeSkillId, - ActiveSkillHit: activeSkillHit, - FramesInvinsible: framesInvinsible, - Speed: speed, - BattleState: battleState, - CharacterState: characterState, - JoinIndex: joinIndex, - Hp: hp, - MaxHp: maxHp, - ColliderRadius: colliderRadius, - InAir: inAir, + Id: id, + VirtualGridX: virtualGridX, + VirtualGridY: virtualGridY, + DirX: dirX, + DirY: dirY, + VelX: velX, + VelY: velY, + FramesToRecover: framesToRecover, + FramesInChState: framesInChState, + ActiveSkillId: activeSkillId, + ActiveSkillHit: activeSkillHit, + FramesInvinsible: framesInvinsible, + Speed: speed, + BattleState: battleState, + CharacterState: characterState, + JoinIndex: joinIndex, + Hp: hp, + MaxHp: maxHp, + ColliderRadius: colliderRadius, + InAir: inAir, + BulletTeamId: bulletTeamId, + ChCollisionTeamId: chCollisionTeamId, }) } -func NewMeleeBulletJs(originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY int32, blowUp bool) *js.Object { +func NewMeleeBulletJs(bulletLocalId, originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY int32, blowUp bool, teamId int32) *js.Object { return js.MakeWrapper(&MeleeBullet{ Bullet: Bullet{ + BulletLocalId: bulletLocalId, OriginatedRenderFrameId: originatedRenderFrameId, OffenderJoinIndex: offenderJoinIndex, @@ -93,16 +96,69 @@ func NewMeleeBulletJs(originatedRenderFrameId, offenderJoinIndex, startupFrames, HitboxSizeY: hitboxSizeY, BlowUp: blowUp, + + TeamId: teamId, }, }) } -func NewRoomDownsyncFrameJs(id int32, playersArr []*PlayerDownsync, meleeBullets []*MeleeBullet) *js.Object { +func NewFireballBulletJs(bulletLocalId, originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY int32, blowUp bool, teamId int32, virtualGridX, virtualGridY, dirX, dirY, velX, velY, speed int32) *js.Object { + return js.MakeWrapper(&FireballBullet{ + VirtualGridX: virtualGridX, + VirtualGridY: virtualGridY, + DirX: dirX, + DirY: dirY, + VelX: velX, + VelY: velY, + Speed: speed, + Bullet: Bullet{ + BulletLocalId: bulletLocalId, + OriginatedRenderFrameId: originatedRenderFrameId, + OffenderJoinIndex: offenderJoinIndex, + + StartupFrames: startupFrames, + CancellableStFrame: cancellableStFrame, + CancellableEdFrame: cancellableEdFrame, + ActiveFrames: activeFrames, + + HitStunFrames: hitStunFrames, + BlockStunFrames: blockStunFrames, + PushbackVelX: pushbackVelX, + PushbackVelY: pushbackVelY, + Damage: damage, + + SelfLockVelX: selfLockVelX, + SelfLockVelY: selfLockVelY, + + HitboxOffsetX: hitboxOffsetX, + HitboxOffsetY: hitboxOffsetY, + HitboxSizeX: hitboxSizeX, + HitboxSizeY: hitboxSizeY, + + BlowUp: blowUp, + + TeamId: teamId, + }, + }) +} + +func NewNpcPatrolCue(flAct, frAct uint64, x, y float64) *js.Object { + return js.MakeFullWrapper(&NpcPatrolCue{ + FlAct: flAct, + FrAct: frAct, + X: x, + Y: y, + }) +} + +func NewRoomDownsyncFrameJs(id int32, playersArr []*PlayerDownsync, bulletLocalIdCounter int32, meleeBullets []*MeleeBullet, fireballBullets []*FireballBullet) *js.Object { // [WARNING] Avoid using "pb.RoomDownsyncFrame" here, in practive "MakeFullWrapper" doesn't expose the public fields for a "protobuf struct" as expected and requires helper functions like "GetCollisionSpaceObjsJs". return js.MakeFullWrapper(&RoomDownsyncFrame{ - Id: id, - PlayersArr: playersArr, - MeleeBullets: meleeBullets, + Id: id, + PlayersArr: playersArr, + BulletLocalIdCounter: bulletLocalIdCounter, + MeleeBullets: meleeBullets, + FireballBullets: fireballBullets, }) } @@ -157,6 +213,8 @@ func main() { "NewBarrierJs": NewBarrierJs, "NewPlayerDownsyncJs": NewPlayerDownsyncJs, "NewMeleeBulletJs": NewMeleeBulletJs, + "NewFireballBulletJs": NewFireballBulletJs, + "NewNpcPatrolCue": NewNpcPatrolCue, "NewRoomDownsyncFrameJs": NewRoomDownsyncFrameJs, "NewCollisionSpaceJs": NewCollisionSpaceJs, "NewInputFrameDownsync": NewInputFrameDownsync,