diff --git a/battle_srv/models/pb_type_convert.go b/battle_srv/models/pb_type_convert.go index a1a03dc..cacfe48 100644 --- a/battle_srv/models/pb_type_convert.go +++ b/battle_srv/models/pb_type_convert.go @@ -16,7 +16,6 @@ func toPbRoomDownsyncFrame(rdf *battle.RoomDownsyncFrame) *pb.RoomDownsyncFrame CountdownNanos: rdf.CountdownNanos, BackendUnconfirmedMask: rdf.BackendUnconfirmedMask, ShouldForceResync: rdf.ShouldForceResync, - PlayerOpPatternToSkillId: make(map[int32]int32), } for i, last := range rdf.PlayersArr { @@ -28,55 +27,57 @@ func toPbRoomDownsyncFrame(rdf *battle.RoomDownsyncFrame) *pb.RoomDownsyncFrame DirY: last.DirY, VelX: last.VelX, VelY: last.VelY, + FramesToRecover: last.FramesToRecover, + FramesInChState: last.FramesInChState, + ActiveSkillId: last.ActiveSkillId, + ActiveSkillHit: last.ActiveSkillHit, Speed: last.Speed, BattleState: last.BattleState, CharacterState: last.CharacterState, InAir: last.InAir, JoinIndex: last.JoinIndex, - ColliderRadius: last.ColliderRadius, - Score: last.Score, Hp: last.Hp, MaxHp: last.MaxHp, + ColliderRadius: last.ColliderRadius, + Score: last.Score, Removed: last.Removed, - FramesToRecover: last.FramesToRecover, - FramesInChState: last.FramesInChState, } ret.PlayersArr[i] = pbPlayer } for i, last := range rdf.MeleeBullets { pbBullet := &pb.MeleeBullet{ - BattleLocalId: last.BattleLocalId, + OriginatedRenderFrameId: last.OriginatedRenderFrameId, + OffenderJoinIndex: last.OffenderJoinIndex, + StartupFrames: last.StartupFrames, + CancellableStFrame: last.CancellableStFrame, + CancellableEdFrame: last.CancellableEdFrame, ActiveFrames: last.ActiveFrames, - RecoveryFrames: last.RecoveryFrames, - RecoveryFramesOnBlock: last.RecoveryFramesOnBlock, - RecoveryFramesOnHit: last.RecoveryFramesOnHit, - HitboxOffset: last.HitboxOffset, + HitStunFrames: last.HitStunFrames, BlockStunFrames: last.BlockStunFrames, - Pushback: last.Pushback, - ReleaseTriggerType: last.ReleaseTriggerType, + PushbackVelX: last.PushbackVelX, + PushbackVelY: last.PushbackVelY, Damage: last.Damage, - SelfMoveforwardX: last.SelfMoveforwardX, - SelfMoveforwardY: last.SelfMoveforwardY, - HitboxSizeX: last.HitboxSizeX, - HitboxSizeY: last.HitboxSizeY, + SelfLockVelX: last.SelfLockVelX, + SelfLockVelY: last.SelfLockVelY, - OffenderJoinIndex: last.OffenderJoinIndex, - OffenderPlayerId: last.OffenderPlayerId, + HitboxOffsetX: last.HitboxOffsetX, + HitboxOffsetY: last.HitboxOffsetY, + HitboxSizeX: last.HitboxSizeX, + HitboxSizeY: last.HitboxSizeY, + + BlowUp: last.BlowUp, } ret.MeleeBullets[i] = pbBullet } - for i, last := range rdf.PlayerOpPatternToSkillId { - ret.PlayerOpPatternToSkillId[int32(i)] = int32(last) - } - return ret } +/* func toPbPlayers(modelInstances map[int32]*Player, withMetaInfo bool) []*pb.PlayerDownsync { toRet := make([]*pb.PlayerDownsync, len(modelInstances), len(modelInstances)) if nil == modelInstances { @@ -113,6 +114,7 @@ func toPbPlayers(modelInstances map[int32]*Player, withMetaInfo bool) []*pb.Play return toRet } +*/ func toJsPlayers(modelInstances map[int32]*Player) []*battle.PlayerDownsync { toRet := make([]*battle.PlayerDownsync, len(modelInstances), len(modelInstances)) @@ -129,12 +131,18 @@ func toJsPlayers(modelInstances map[int32]*Player) []*battle.PlayerDownsync { DirY: last.DirY, VelX: last.VelX, VelY: last.VelY, + FramesToRecover: last.FramesToRecover, + FramesInChState: last.FramesInChState, + ActiveSkillId: last.ActiveSkillId, + ActiveSkillHit: last.ActiveSkillHit, Speed: last.Speed, BattleState: last.BattleState, CharacterState: last.CharacterState, - InAir: last.InAir, JoinIndex: last.JoinIndex, + 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 c2391ca..ec362cd 100644 --- a/battle_srv/models/room.go +++ b/battle_srv/models/room.go @@ -49,7 +49,7 @@ const ( ) const ( - DEFAULT_PLAYER_RADIUS = float64(12) + DEFAULT_PLAYER_RADIUS = int32(float64(12) * battle.WORLD_TO_VIRTUAL_GRID_RATIO) ) type RoomBattleState struct { @@ -90,8 +90,6 @@ func calRoomScore(inRoomPlayerCount int32, roomPlayerCnt int, currentRoomBattleS type Room struct { Id int32 Capacity int - collisionSpaceOffsetX float64 - collisionSpaceOffsetY float64 Players map[int32]*Player PlayersArr []*Player // ordered by joinIndex Space *resolv.Space @@ -288,35 +286,14 @@ func (pR *Room) ChooseStage() error { //Logger.Info("parsed tmx:", zap.Any("stageDiscreteW", stageDiscreteW), zap.Any("strToVec2DListMap", strToVec2DListMap), zap.Any("strToPolygon2DListMap", strToPolygon2DListMap)) - pR.StageDiscreteW = stageDiscreteW - pR.StageDiscreteH = stageDiscreteH - pR.StageTileW = stageTileW - pR.StageTileH = stageTileH + pR.SpaceOffsetX = float64((stageDiscreteW*stageTileW) >> 1) + pR.SpaceOffsetY = float64((stageDiscreteH*stageTileH) >> 1) pR.TmxPointsMap = strToVec2DListMap pR.TmxPolygonsMap = strToPolygon2DListMap return nil } -func (pR *Room) ConvertToInputFrameId(renderFrameId int32, inputDelayFrames int32) int32 { - if renderFrameId < inputDelayFrames { - return 0 - } - return ((renderFrameId - inputDelayFrames) >> pR.InputScaleFrames) -} - -func (pR *Room) ConvertToGeneratingRenderFrameId(inputFrameId int32) int32 { - return (inputFrameId << pR.InputScaleFrames) -} - -func (pR *Room) ConvertToFirstUsedRenderFrameId(inputFrameId int32, inputDelayFrames int32) int32 { - return ((inputFrameId << pR.InputScaleFrames) + inputDelayFrames) -} - -func (pR *Room) ConvertToLastUsedRenderFrameId(inputFrameId int32, inputDelayFrames int32) int32 { - return ((inputFrameId << pR.InputScaleFrames) + inputDelayFrames + (1 << pR.InputScaleFrames) - 1) -} - func (pR *Room) RenderFrameBufferString() string { return fmt.Sprintf("{renderFrameId: %d, stRenderFrameId: %d, edRenderFrameId: %d, curDynamicsRenderFrameId: %d}", pR.RenderFrameId, pR.RenderFrameBuffer.StFrameId, pR.RenderFrameBuffer.EdFrameId, pR.CurDynamicsRenderFrameId) } @@ -406,11 +383,7 @@ func (pR *Room) StartBattle() { pR.RenderFrameBuffer.Put(kickoffFrameJs) // Refresh "Colliders" - spaceW := pR.StageDiscreteW * pR.StageTileW - spaceH := pR.StageDiscreteH * pR.StageTileH - - pR.collisionSpaceOffsetX, pR.collisionSpaceOffsetY = float64(spaceW)*0.5, float64(spaceH)*0.5 - pR.refreshColliders(spaceW, spaceH) + pR.refreshColliders() /* Will be triggered from a goroutine which executes the critical `Room.AddPlayerIfPossible`, thus the `battleMainLoop` should be detached. @@ -424,7 +397,7 @@ func (pR *Room) StartBattle() { Logger.Error("battleMainLoop, recovery spot#1, recovered from: ", zap.Any("roomId", pR.Id), zap.Any("panic", r)) } pR.StopBattleForSettlement() - Logger.Info(fmt.Sprintf("The `battleMainLoop` for roomId=%v is stopped@renderFrameId=%v, with battleDurationFrames=%v:\n%v", pR.Id, pR.RenderFrameId, pR.BattleDurationFrames, pR.InputsBufferString(false))) // This takes sometime to print + Logger.Info(fmt.Sprintf("The `battleMainLoop` for roomId=%v is stopped@renderFrameId=%v:\n%v", pR.Id, pR.RenderFrameId, pR.InputsBufferString(false))) // This takes sometime to print if pR.FrameDataLoggingEnabled { rdfIdToActuallyUsedInputDump := pR.rdfIdToActuallyUsedInputString() os.WriteFile(fmt.Sprintf("room_%d.txt", pR.Id), []byte(rdfIdToActuallyUsedInputDump), 0644) // DEBUG ONLY @@ -1030,15 +1003,6 @@ func (pR *Room) sendSafely(roomDownsyncFrame *pb.RoomDownsyncFrame, toSendInputF } } -func (pR *Room) shouldPrefabInputFrameDownsync(prevRenderFrameId int32, renderFrameId int32) (bool, int32) { - for i := prevRenderFrameId + 1; i <= renderFrameId; i++ { - if (0 <= i) && (0 == (i & ((1 << pR.InputScaleFrames) - 1))) { - return true, i - } - } - return false, -1 -} - func (pR *Room) getOrPrefabInputFrameDownsync(inputFrameId int32) *battle.InputFrameDownsync { /* [WARNING] This function MUST BE called while "pR.InputsBufferLock" is locked. @@ -1157,7 +1121,7 @@ func (pR *Room) markConfirmationIfApplicable(inputFrameUpsyncBatch []*pb.InputFr */ snapshotStFrameId := (pR.LastAllConfirmedInputFrameId - newAllConfirmedCount) refRenderFrameIdIfNeeded := pR.CurDynamicsRenderFrameId - 1 - refSnapshotStFrameId := pR.ConvertToInputFrameId(refRenderFrameIdIfNeeded, pR.InputDelayFrames) + refSnapshotStFrameId := battle.ConvertToInputFrameId(refRenderFrameIdIfNeeded, battle.INPUT_DELAY_FRAMES, battle.INPUT_SCALE_FRAMES) if refSnapshotStFrameId < snapshotStFrameId { snapshotStFrameId = refSnapshotStFrameId } @@ -1224,7 +1188,7 @@ func (pR *Room) produceInputsBufferSnapshotWithCurDynamicsRenderFrameAsRef(uncon } } -func (pR *Room) applyInputFrameDownsyncDynamics(fromRenderFrameId int32, toRenderFrameId int32, spaceOffsetX, spaceOffsetY float64) { +func (pR *Room) applyInputFrameDownsyncDynamics(fromRenderFrameId int32, toRenderFrameId int32) { // [WARNING] This function MUST BE called while "pR.InputsBufferLock" is locked! if fromRenderFrameId >= toRenderFrameId { return @@ -1238,7 +1202,7 @@ func (pR *Room) applyInputFrameDownsyncDynamics(fromRenderFrameId int32, toRende panic(fmt.Sprintf("collisionSysRenderFrameId=%v doesn't exist for roomId=%v, this is abnormal because it's to be used for applying dynamics to [fromRenderFrameId:%v, toRenderFrameId:%v)! RenderFrameBuffer=%v", collisionSysRenderFrameId, pR.Id, fromRenderFrameId, toRenderFrameId, pR.RenderFrameBufferString())) } currRenderFrame := currRenderFrameTmp.(*battle.RoomDownsyncFrame) - delayedInputFrameId := pR.ConvertToInputFrameId(collisionSysRenderFrameId, pR.InputDelayFrames) + delayedInputFrameId := battle.ConvertToDelayedInputFrameId(collisionSysRenderFrameId) if 0 <= delayedInputFrameId { if delayedInputFrameId > pR.LastAllConfirmedInputFrameId { panic(fmt.Sprintf("delayedInputFrameId=%v is not yet all-confirmed for roomId=%v, this is abnormal because it's to be used for applying dynamics to [fromRenderFrameId:%v, toRenderFrameId:%v) @ collisionSysRenderFrameId=%v! InputsBuffer=%v", delayedInputFrameId, pR.Id, fromRenderFrameId, toRenderFrameId, collisionSysRenderFrameId, pR.InputsBufferString(false))) @@ -1262,18 +1226,16 @@ func (pR *Room) applyInputFrameDownsyncDynamics(fromRenderFrameId int32, toRende } } - nextRenderFrame := battle.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(pR.InputsBuffer, currRenderFrame, pR.Space, pR.CollisionSysMap, pR.collisionSpaceOffsetX, pR.collisionSpaceOffsetY) + nextRenderFrame := battle.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(pR.InputsBuffer, currRenderFrame, pR.Space, pR.CollisionSysMap, pR.SpaceOffsetX, pR.SpaceOffsetY) pR.RenderFrameBuffer.Put(nextRenderFrame) pR.CurDynamicsRenderFrameId++ } } -func (pR *Room) refreshColliders(spaceW, spaceH int32) { +func (pR *Room) refreshColliders() { // Kindly note that by now, we've already got all the shapes in the tmx file into "pR.(Players | Barriers)" from "ParseTmxLayersAndGroups" - topPadding, bottomPadding, leftPadding, rightPadding := pR.SnapIntoPlatformOverlap, pR.SnapIntoPlatformOverlap, pR.SnapIntoPlatformOverlap, pR.SnapIntoPlatformOverlap - - pR.Space = resolv.NewSpace(int(spaceW), int(spaceH), int(pR.CollisionMinStep), int(pR.CollisionMinStep)) // allocate a new collision space everytime after a battle is settled + pR.Space = resolv.NewSpace(int(pR.SpaceOffsetX*2), int(pR.SpaceOffsetY*2), int(pR.CollisionMinStep), int(pR.CollisionMinStep)) // allocate a new collision space everytime after a battle is settled for _, player := range pR.Players { joinIndex := player.JoinIndex @@ -1305,8 +1267,8 @@ func (pR *Room) doBattleMainLoopPerTickBackendDynamicsWithProperLocking(prevRend Logger.Debug(fmt.Sprintf("doBattleMainLoopPerTickBackendDynamicsWithProperLocking-InputsBufferLock unlocked: roomId=%v", pR.Id)) }() - if ok, thatRenderFrameId := pR.shouldPrefabInputFrameDownsync(prevRenderFrameId, pR.RenderFrameId); ok { - noDelayInputFrameId := pR.ConvertToInputFrameId(thatRenderFrameId, 0) + if ok, thatRenderFrameId := battle.ShouldPrefabInputFrameDownsync(prevRenderFrameId, pR.RenderFrameId); ok { + noDelayInputFrameId := battle.ConvertToNoDelayInputFrameId(thatRenderFrameId) pR.getOrPrefabInputFrameDownsync(noDelayInputFrameId) } @@ -1317,9 +1279,9 @@ func (pR *Room) doBattleMainLoopPerTickBackendDynamicsWithProperLocking(prevRend if 0 <= pR.LastAllConfirmedInputFrameId { dynamicsStartedAt := utils.UnixtimeNano() // Apply "all-confirmed inputFrames" to move forward "pR.CurDynamicsRenderFrameId" - nextDynamicsRenderFrameId := pR.ConvertToLastUsedRenderFrameId(pR.LastAllConfirmedInputFrameId, pR.InputDelayFrames) + 1 + nextDynamicsRenderFrameId := battle.ConvertToLastUsedRenderFrameId(pR.LastAllConfirmedInputFrameId) + 1 Logger.Debug(fmt.Sprintf("roomId=%v, room.RenderFrameId=%v, room.CurDynamicsRenderFrameId=%v, LastAllConfirmedInputFrameId=%v, InputDelayFrames=%v, nextDynamicsRenderFrameId=%v", pR.Id, pR.RenderFrameId, pR.CurDynamicsRenderFrameId, pR.LastAllConfirmedInputFrameId, pR.InputDelayFrames, nextDynamicsRenderFrameId)) - pR.applyInputFrameDownsyncDynamics(pR.CurDynamicsRenderFrameId, nextDynamicsRenderFrameId, pR.collisionSpaceOffsetX, pR.collisionSpaceOffsetY) + pR.applyInputFrameDownsyncDynamics(pR.CurDynamicsRenderFrameId, nextDynamicsRenderFrameId) *pDynamicsDuration = utils.UnixtimeNano() - dynamicsStartedAt } @@ -1336,7 +1298,7 @@ func (pR *Room) doBattleMainLoopPerTickBackendDynamicsWithProperLocking(prevRend if 0 < unconfirmedMask { // [WARNING] As "pR.CurDynamicsRenderFrameId" was just incremented above, "refSnapshotStFrameId" is most possibly larger than "oldLastAllConfirmedInputFrameId + 1", therefore this initial assignment is critical for `ACTIVE NORMAL TICKER`s to receive consecutive ids of inputFrameDownsync. snapshotStFrameId := oldLastAllConfirmedInputFrameId + 1 - refSnapshotStFrameId := pR.ConvertToInputFrameId(pR.CurDynamicsRenderFrameId-1, pR.InputDelayFrames) + refSnapshotStFrameId := battle.ConvertToDelayedInputFrameId(pR.CurDynamicsRenderFrameId-1) if refSnapshotStFrameId < snapshotStFrameId { snapshotStFrameId = refSnapshotStFrameId } diff --git a/battle_srv/protos/room_downsync_frame.pb.go b/battle_srv/protos/room_downsync_frame.pb.go index 238161a..9f5f3f5 100644 --- a/battle_srv/protos/room_downsync_frame.pb.go +++ b/battle_srv/protos/room_downsync_frame.pb.go @@ -26,29 +26,31 @@ type PlayerDownsync struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - VirtualGridX int32 `protobuf:"varint,2,opt,name=virtualGridX,proto3" json:"virtualGridX,omitempty"` - VirtualGridY int32 `protobuf:"varint,3,opt,name=virtualGridY,proto3" json:"virtualGridY,omitempty"` - DirX int32 `protobuf:"varint,4,opt,name=dirX,proto3" json:"dirX,omitempty"` - DirY int32 `protobuf:"varint,5,opt,name=dirY,proto3" json:"dirY,omitempty"` // "dirX" and "dirY" determines character facing - VelX int32 `protobuf:"varint,6,opt,name=velX,proto3" json:"velX,omitempty"` - VelY int32 `protobuf:"varint,7,opt,name=velY,proto3" json:"velY,omitempty"` // "velX" and "velY" is used to record the accumulated effect by accelerations (including gravity) - Speed int32 `protobuf:"varint,8,opt,name=speed,proto3" json:"speed,omitempty"` // this is the instantaneous scalar attribute of a character, different from but will be accounted in "velX" and "velY" - BattleState int32 `protobuf:"varint,9,opt,name=battleState,proto3" json:"battleState,omitempty"` - JoinIndex int32 `protobuf:"varint,10,opt,name=joinIndex,proto3" json:"joinIndex,omitempty"` - ColliderRadius float64 `protobuf:"fixed64,11,opt,name=colliderRadius,proto3" json:"colliderRadius,omitempty"` - Removed bool `protobuf:"varint,12,opt,name=removed,proto3" json:"removed,omitempty"` - Score int32 `protobuf:"varint,13,opt,name=score,proto3" json:"score,omitempty"` - LastMoveGmtMillis int32 `protobuf:"varint,14,opt,name=lastMoveGmtMillis,proto3" json:"lastMoveGmtMillis,omitempty"` - FramesToRecover int32 `protobuf:"varint,15,opt,name=framesToRecover,proto3" json:"framesToRecover,omitempty"` - Hp int32 `protobuf:"varint,16,opt,name=hp,proto3" json:"hp,omitempty"` - MaxHp int32 `protobuf:"varint,17,opt,name=maxHp,proto3" json:"maxHp,omitempty"` - CharacterState int32 `protobuf:"varint,18,opt,name=characterState,proto3" json:"characterState,omitempty"` - InAir bool `protobuf:"varint,19,opt,name=inAir,proto3" json:"inAir,omitempty"` // by design a standalone field only inferred by the collision result of "applyInputFrameDownsyncDynamicsOnSingleRenderFrame" instead of "characterState", because we need check the transition for "characterState" from this field, i.e. "inAir (prev -> curr)" - FramesInChState int32 `protobuf:"varint,20,opt,name=framesInChState,proto3" json:"framesInChState,omitempty"` // number of frames elapsed in the current character state - 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"` + Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + VirtualGridX int32 `protobuf:"varint,2,opt,name=virtualGridX,proto3" json:"virtualGridX,omitempty"` + VirtualGridY int32 `protobuf:"varint,3,opt,name=virtualGridY,proto3" json:"virtualGridY,omitempty"` + DirX int32 `protobuf:"varint,4,opt,name=dirX,proto3" json:"dirX,omitempty"` + DirY int32 `protobuf:"varint,5,opt,name=dirY,proto3" json:"dirY,omitempty"` // "dirX" and "dirY" determines character facing + VelX int32 `protobuf:"varint,6,opt,name=velX,proto3" json:"velX,omitempty"` + VelY int32 `protobuf:"varint,7,opt,name=velY,proto3" json:"velY,omitempty"` // "velX" and "velY" is used to record the accumulated effect by accelerations (including gravity) + Speed int32 `protobuf:"varint,8,opt,name=speed,proto3" json:"speed,omitempty"` // this is the instantaneous scalar attribute of a character, different from but will be accounted in "velX" and "velY" + BattleState int32 `protobuf:"varint,9,opt,name=battleState,proto3" json:"battleState,omitempty"` + JoinIndex int32 `protobuf:"varint,10,opt,name=joinIndex,proto3" json:"joinIndex,omitempty"` + ColliderRadius int32 `protobuf:"varint,11,opt,name=colliderRadius,proto3" json:"colliderRadius,omitempty"` + Removed bool `protobuf:"varint,12,opt,name=removed,proto3" json:"removed,omitempty"` + Score int32 `protobuf:"varint,13,opt,name=score,proto3" json:"score,omitempty"` + LastMoveGmtMillis int32 `protobuf:"varint,14,opt,name=lastMoveGmtMillis,proto3" json:"lastMoveGmtMillis,omitempty"` + FramesToRecover int32 `protobuf:"varint,15,opt,name=framesToRecover,proto3" json:"framesToRecover,omitempty"` + Hp int32 `protobuf:"varint,16,opt,name=hp,proto3" json:"hp,omitempty"` + MaxHp int32 `protobuf:"varint,17,opt,name=maxHp,proto3" json:"maxHp,omitempty"` + CharacterState int32 `protobuf:"varint,18,opt,name=characterState,proto3" json:"characterState,omitempty"` + InAir bool `protobuf:"varint,19,opt,name=inAir,proto3" json:"inAir,omitempty"` // by design a standalone field only inferred by the collision result of "applyInputFrameDownsyncDynamicsOnSingleRenderFrame" instead of "characterState", because we need check the transition for "characterState" from this field, i.e. "inAir (prev -> curr)" + FramesInChState int32 `protobuf:"varint,20,opt,name=framesInChState,proto3" json:"framesInChState,omitempty"` // number of frames elapsed in the current character state + ActiveSkillId int32 `protobuf:"varint,21,opt,name=activeSkillId,proto3" json:"activeSkillId,omitempty"` + ActiveSkillHit int32 `protobuf:"varint,22,opt,name=activeSkillHit,proto3" json:"activeSkillHit,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"` } func (x *PlayerDownsync) Reset() { @@ -153,7 +155,7 @@ func (x *PlayerDownsync) GetJoinIndex() int32 { return 0 } -func (x *PlayerDownsync) GetColliderRadius() float64 { +func (x *PlayerDownsync) GetColliderRadius() int32 { if x != nil { return x.ColliderRadius } @@ -223,6 +225,20 @@ func (x *PlayerDownsync) GetFramesInChState() int32 { return 0 } +func (x *PlayerDownsync) GetActiveSkillId() int32 { + if x != nil { + return x.ActiveSkillId + } + return 0 +} + +func (x *PlayerDownsync) GetActiveSkillHit() int32 { + if x != nil { + return x.ActiveSkillHit + } + return 0 +} + func (x *PlayerDownsync) GetName() string { if x != nil { return x.Name @@ -747,26 +763,24 @@ type MeleeBullet struct { unknownFields protoimpl.UnknownFields // for offender - BattleLocalId int32 `protobuf:"varint,1,opt,name=battleLocalId,proto3" json:"battleLocalId,omitempty"` - StartupFrames int32 `protobuf:"varint,2,opt,name=startupFrames,proto3" json:"startupFrames,omitempty"` - ActiveFrames int32 `protobuf:"varint,3,opt,name=activeFrames,proto3" json:"activeFrames,omitempty"` - RecoveryFrames int32 `protobuf:"varint,4,opt,name=recoveryFrames,proto3" json:"recoveryFrames,omitempty"` - RecoveryFramesOnBlock int32 `protobuf:"varint,5,opt,name=recoveryFramesOnBlock,proto3" json:"recoveryFramesOnBlock,omitempty"` - RecoveryFramesOnHit int32 `protobuf:"varint,6,opt,name=recoveryFramesOnHit,proto3" json:"recoveryFramesOnHit,omitempty"` - HitboxOffset float64 `protobuf:"fixed64,7,opt,name=hitboxOffset,proto3" json:"hitboxOffset,omitempty"` - OriginatedRenderFrameId int32 `protobuf:"varint,8,opt,name=originatedRenderFrameId,proto3" json:"originatedRenderFrameId,omitempty"` - // for defender - HitStunFrames int32 `protobuf:"varint,9,opt,name=hitStunFrames,proto3" json:"hitStunFrames,omitempty"` - BlockStunFrames int32 `protobuf:"varint,10,opt,name=blockStunFrames,proto3" json:"blockStunFrames,omitempty"` - Pushback float64 `protobuf:"fixed64,11,opt,name=pushback,proto3" json:"pushback,omitempty"` - ReleaseTriggerType int32 `protobuf:"varint,12,opt,name=releaseTriggerType,proto3" json:"releaseTriggerType,omitempty"` // 1: rising-edge, 2: falling-edge - Damage int32 `protobuf:"varint,13,opt,name=damage,proto3" json:"damage,omitempty"` - OffenderJoinIndex int32 `protobuf:"varint,14,opt,name=offenderJoinIndex,proto3" json:"offenderJoinIndex,omitempty"` - OffenderPlayerId int32 `protobuf:"varint,15,opt,name=offenderPlayerId,proto3" json:"offenderPlayerId,omitempty"` - HitboxSizeX float64 `protobuf:"fixed64,16,opt,name=hitboxSizeX,proto3" json:"hitboxSizeX,omitempty"` - HitboxSizeY float64 `protobuf:"fixed64,17,opt,name=hitboxSizeY,proto3" json:"hitboxSizeY,omitempty"` - SelfMoveforwardX float64 `protobuf:"fixed64,18,opt,name=selfMoveforwardX,proto3" json:"selfMoveforwardX,omitempty"` - SelfMoveforwardY float64 `protobuf:"fixed64,19,opt,name=selfMoveforwardY,proto3" json:"selfMoveforwardY,omitempty"` + 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"` } func (x *MeleeBullet) Reset() { @@ -801,9 +815,16 @@ func (*MeleeBullet) Descriptor() ([]byte, []int) { return file_room_downsync_frame_proto_rawDescGZIP(), []int{8} } -func (x *MeleeBullet) GetBattleLocalId() int32 { +func (x *MeleeBullet) GetOriginatedRenderFrameId() int32 { if x != nil { - return x.BattleLocalId + return x.OriginatedRenderFrameId + } + return 0 +} + +func (x *MeleeBullet) GetOffenderJoinIndex() int32 { + if x != nil { + return x.OffenderJoinIndex } return 0 } @@ -815,6 +836,20 @@ func (x *MeleeBullet) GetStartupFrames() int32 { return 0 } +func (x *MeleeBullet) GetCancellableStFrame() int32 { + if x != nil { + return x.CancellableStFrame + } + return 0 +} + +func (x *MeleeBullet) GetCancellableEdFrame() int32 { + if x != nil { + return x.CancellableEdFrame + } + return 0 +} + func (x *MeleeBullet) GetActiveFrames() int32 { if x != nil { return x.ActiveFrames @@ -822,41 +857,6 @@ func (x *MeleeBullet) GetActiveFrames() int32 { return 0 } -func (x *MeleeBullet) GetRecoveryFrames() int32 { - if x != nil { - return x.RecoveryFrames - } - return 0 -} - -func (x *MeleeBullet) GetRecoveryFramesOnBlock() int32 { - if x != nil { - return x.RecoveryFramesOnBlock - } - return 0 -} - -func (x *MeleeBullet) GetRecoveryFramesOnHit() int32 { - if x != nil { - return x.RecoveryFramesOnHit - } - return 0 -} - -func (x *MeleeBullet) GetHitboxOffset() float64 { - if x != nil { - return x.HitboxOffset - } - return 0 -} - -func (x *MeleeBullet) GetOriginatedRenderFrameId() int32 { - if x != nil { - return x.OriginatedRenderFrameId - } - return 0 -} - func (x *MeleeBullet) GetHitStunFrames() int32 { if x != nil { return x.HitStunFrames @@ -871,16 +871,16 @@ func (x *MeleeBullet) GetBlockStunFrames() int32 { return 0 } -func (x *MeleeBullet) GetPushback() float64 { +func (x *MeleeBullet) GetPushbackVelX() int32 { if x != nil { - return x.Pushback + return x.PushbackVelX } return 0 } -func (x *MeleeBullet) GetReleaseTriggerType() int32 { +func (x *MeleeBullet) GetPushbackVelY() int32 { if x != nil { - return x.ReleaseTriggerType + return x.PushbackVelY } return 0 } @@ -892,46 +892,53 @@ func (x *MeleeBullet) GetDamage() int32 { return 0 } -func (x *MeleeBullet) GetOffenderJoinIndex() int32 { +func (x *MeleeBullet) GetSelfLockVelX() int32 { if x != nil { - return x.OffenderJoinIndex + return x.SelfLockVelX } return 0 } -func (x *MeleeBullet) GetOffenderPlayerId() int32 { +func (x *MeleeBullet) GetSelfLockVelY() int32 { if x != nil { - return x.OffenderPlayerId + return x.SelfLockVelY } return 0 } -func (x *MeleeBullet) GetHitboxSizeX() float64 { +func (x *MeleeBullet) GetHitboxOffsetX() int32 { + if x != nil { + return x.HitboxOffsetX + } + return 0 +} + +func (x *MeleeBullet) GetHitboxOffsetY() int32 { + if x != nil { + return x.HitboxOffsetY + } + return 0 +} + +func (x *MeleeBullet) GetHitboxSizeX() int32 { if x != nil { return x.HitboxSizeX } return 0 } -func (x *MeleeBullet) GetHitboxSizeY() float64 { +func (x *MeleeBullet) GetHitboxSizeY() int32 { if x != nil { return x.HitboxSizeY } return 0 } -func (x *MeleeBullet) GetSelfMoveforwardX() float64 { +func (x *MeleeBullet) GetBlowUp() bool { if x != nil { - return x.SelfMoveforwardX + return x.BlowUp } - return 0 -} - -func (x *MeleeBullet) GetSelfMoveforwardY() float64 { - if x != nil { - return x.SelfMoveforwardY - } - return 0 + return false } type BattleColliderInfo struct { @@ -940,34 +947,18 @@ type BattleColliderInfo struct { unknownFields protoimpl.UnknownFields StageName string `protobuf:"bytes,1,opt,name=stageName,proto3" json:"stageName,omitempty"` - StageDiscreteW int32 `protobuf:"varint,2,opt,name=stageDiscreteW,proto3" json:"stageDiscreteW,omitempty"` - StageDiscreteH int32 `protobuf:"varint,3,opt,name=stageDiscreteH,proto3" json:"stageDiscreteH,omitempty"` - StageTileW int32 `protobuf:"varint,4,opt,name=stageTileW,proto3" json:"stageTileW,omitempty"` - StageTileH int32 `protobuf:"varint,5,opt,name=stageTileH,proto3" json:"stageTileH,omitempty"` - IntervalToPing int32 `protobuf:"varint,6,opt,name=intervalToPing,proto3" json:"intervalToPing,omitempty"` - WillKickIfInactiveFor int32 `protobuf:"varint,7,opt,name=willKickIfInactiveFor,proto3" json:"willKickIfInactiveFor,omitempty"` - BoundRoomId int32 `protobuf:"varint,8,opt,name=boundRoomId,proto3" json:"boundRoomId,omitempty"` - BattleDurationFrames int32 `protobuf:"varint,9,opt,name=battleDurationFrames,proto3" json:"battleDurationFrames,omitempty"` - BattleDurationNanos int64 `protobuf:"varint,10,opt,name=battleDurationNanos,proto3" json:"battleDurationNanos,omitempty"` - ServerFps int32 `protobuf:"varint,11,opt,name=serverFps,proto3" json:"serverFps,omitempty"` - InputDelayFrames int32 `protobuf:"varint,12,opt,name=inputDelayFrames,proto3" json:"inputDelayFrames,omitempty"` // in the count of render frames - InputScaleFrames uint32 `protobuf:"varint,13,opt,name=inputScaleFrames,proto3" json:"inputScaleFrames,omitempty"` // inputDelayedAndScaledFrameId = ((originalFrameId - InputDelayFrames) >> InputScaleFrames) - NstDelayFrames int32 `protobuf:"varint,14,opt,name=nstDelayFrames,proto3" json:"nstDelayFrames,omitempty"` // network-single-trip delay in the count of render frames, proposed to be (InputDelayFrames >> 1) because we expect a round-trip delay to be exactly "InputDelayFrames" - InputFrameUpsyncDelayTolerance int32 `protobuf:"varint,15,opt,name=inputFrameUpsyncDelayTolerance,proto3" json:"inputFrameUpsyncDelayTolerance,omitempty"` - MaxChasingRenderFramesPerUpdate int32 `protobuf:"varint,16,opt,name=maxChasingRenderFramesPerUpdate,proto3" json:"maxChasingRenderFramesPerUpdate,omitempty"` - PlayerBattleState int32 `protobuf:"varint,17,opt,name=playerBattleState,proto3" json:"playerBattleState,omitempty"` - RollbackEstimatedDtMillis float64 `protobuf:"fixed64,18,opt,name=rollbackEstimatedDtMillis,proto3" json:"rollbackEstimatedDtMillis,omitempty"` - RollbackEstimatedDtNanos int64 `protobuf:"varint,19,opt,name=rollbackEstimatedDtNanos,proto3" json:"rollbackEstimatedDtNanos,omitempty"` - WorldToVirtualGridRatio float64 `protobuf:"fixed64,20,opt,name=worldToVirtualGridRatio,proto3" json:"worldToVirtualGridRatio,omitempty"` - VirtualGridToWorldRatio float64 `protobuf:"fixed64,21,opt,name=virtualGridToWorldRatio,proto3" json:"virtualGridToWorldRatio,omitempty"` - SpAtkLookupFrames int32 `protobuf:"varint,22,opt,name=spAtkLookupFrames,proto3" json:"spAtkLookupFrames,omitempty"` - RenderCacheSize int32 `protobuf:"varint,23,opt,name=renderCacheSize,proto3" json:"renderCacheSize,omitempty"` - SnapIntoPlatformOverlap float64 `protobuf:"fixed64,24,opt,name=snapIntoPlatformOverlap,proto3" json:"snapIntoPlatformOverlap,omitempty"` - SnapIntoPlatformThreshold float64 `protobuf:"fixed64,25,opt,name=snapIntoPlatformThreshold,proto3" json:"snapIntoPlatformThreshold,omitempty"` - JumpingInitVelY int32 `protobuf:"varint,26,opt,name=jumpingInitVelY,proto3" json:"jumpingInitVelY,omitempty"` - GravityX int32 `protobuf:"varint,27,opt,name=gravityX,proto3" json:"gravityX,omitempty"` - GravityY int32 `protobuf:"varint,28,opt,name=gravityY,proto3" json:"gravityY,omitempty"` - CollisionMinStep int32 `protobuf:"varint,29,opt,name=collisionMinStep,proto3" json:"collisionMinStep,omitempty"` + IntervalToPing int32 `protobuf:"varint,2,opt,name=intervalToPing,proto3" json:"intervalToPing,omitempty"` + WillKickIfInactiveFor int32 `protobuf:"varint,3,opt,name=willKickIfInactiveFor,proto3" json:"willKickIfInactiveFor,omitempty"` + BoundRoomId int32 `protobuf:"varint,4,opt,name=boundRoomId,proto3" json:"boundRoomId,omitempty"` + BattleDurationNanos int64 `protobuf:"varint,5,opt,name=battleDurationNanos,proto3" json:"battleDurationNanos,omitempty"` + InputFrameUpsyncDelayTolerance int32 `protobuf:"varint,6,opt,name=inputFrameUpsyncDelayTolerance,proto3" json:"inputFrameUpsyncDelayTolerance,omitempty"` + MaxChasingRenderFramesPerUpdate int32 `protobuf:"varint,7,opt,name=maxChasingRenderFramesPerUpdate,proto3" json:"maxChasingRenderFramesPerUpdate,omitempty"` + RollbackEstimatedDtMillis float64 `protobuf:"fixed64,8,opt,name=rollbackEstimatedDtMillis,proto3" json:"rollbackEstimatedDtMillis,omitempty"` + RollbackEstimatedDtNanos int64 `protobuf:"varint,9,opt,name=rollbackEstimatedDtNanos,proto3" json:"rollbackEstimatedDtNanos,omitempty"` + RenderCacheSize int32 `protobuf:"varint,10,opt,name=renderCacheSize,proto3" json:"renderCacheSize,omitempty"` + 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"` } @@ -1010,34 +1001,6 @@ func (x *BattleColliderInfo) GetStageName() string { return "" } -func (x *BattleColliderInfo) GetStageDiscreteW() int32 { - if x != nil { - return x.StageDiscreteW - } - return 0 -} - -func (x *BattleColliderInfo) GetStageDiscreteH() int32 { - if x != nil { - return x.StageDiscreteH - } - return 0 -} - -func (x *BattleColliderInfo) GetStageTileW() int32 { - if x != nil { - return x.StageTileW - } - return 0 -} - -func (x *BattleColliderInfo) GetStageTileH() int32 { - if x != nil { - return x.StageTileH - } - return 0 -} - func (x *BattleColliderInfo) GetIntervalToPing() int32 { if x != nil { return x.IntervalToPing @@ -1059,13 +1022,6 @@ func (x *BattleColliderInfo) GetBoundRoomId() int32 { return 0 } -func (x *BattleColliderInfo) GetBattleDurationFrames() int32 { - if x != nil { - return x.BattleDurationFrames - } - return 0 -} - func (x *BattleColliderInfo) GetBattleDurationNanos() int64 { if x != nil { return x.BattleDurationNanos @@ -1073,34 +1029,6 @@ func (x *BattleColliderInfo) GetBattleDurationNanos() int64 { return 0 } -func (x *BattleColliderInfo) GetServerFps() int32 { - if x != nil { - return x.ServerFps - } - return 0 -} - -func (x *BattleColliderInfo) GetInputDelayFrames() int32 { - if x != nil { - return x.InputDelayFrames - } - return 0 -} - -func (x *BattleColliderInfo) GetInputScaleFrames() uint32 { - if x != nil { - return x.InputScaleFrames - } - return 0 -} - -func (x *BattleColliderInfo) GetNstDelayFrames() int32 { - if x != nil { - return x.NstDelayFrames - } - return 0 -} - func (x *BattleColliderInfo) GetInputFrameUpsyncDelayTolerance() int32 { if x != nil { return x.InputFrameUpsyncDelayTolerance @@ -1115,13 +1043,6 @@ func (x *BattleColliderInfo) GetMaxChasingRenderFramesPerUpdate() int32 { return 0 } -func (x *BattleColliderInfo) GetPlayerBattleState() int32 { - if x != nil { - return x.PlayerBattleState - } - return 0 -} - func (x *BattleColliderInfo) GetRollbackEstimatedDtMillis() float64 { if x != nil { return x.RollbackEstimatedDtMillis @@ -1136,27 +1057,6 @@ func (x *BattleColliderInfo) GetRollbackEstimatedDtNanos() int64 { return 0 } -func (x *BattleColliderInfo) GetWorldToVirtualGridRatio() float64 { - if x != nil { - return x.WorldToVirtualGridRatio - } - return 0 -} - -func (x *BattleColliderInfo) GetVirtualGridToWorldRatio() float64 { - if x != nil { - return x.VirtualGridToWorldRatio - } - return 0 -} - -func (x *BattleColliderInfo) GetSpAtkLookupFrames() int32 { - if x != nil { - return x.SpAtkLookupFrames - } - return 0 -} - func (x *BattleColliderInfo) GetRenderCacheSize() int32 { if x != nil { return x.RenderCacheSize @@ -1164,37 +1064,16 @@ func (x *BattleColliderInfo) GetRenderCacheSize() int32 { return 0 } -func (x *BattleColliderInfo) GetSnapIntoPlatformOverlap() float64 { +func (x *BattleColliderInfo) GetSpaceOffsetX() float64 { if x != nil { - return x.SnapIntoPlatformOverlap + return x.SpaceOffsetX } return 0 } -func (x *BattleColliderInfo) GetSnapIntoPlatformThreshold() float64 { +func (x *BattleColliderInfo) GetSpaceOffsetY() float64 { if x != nil { - return x.SnapIntoPlatformThreshold - } - return 0 -} - -func (x *BattleColliderInfo) GetJumpingInitVelY() int32 { - if x != nil { - return x.JumpingInitVelY - } - return 0 -} - -func (x *BattleColliderInfo) GetGravityX() int32 { - if x != nil { - return x.GravityX - } - return 0 -} - -func (x *BattleColliderInfo) GetGravityY() int32 { - if x != nil { - return x.GravityY + return x.SpaceOffsetY } return 0 } @@ -1218,13 +1097,12 @@ type RoomDownsyncFrame struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - 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"` - PlayerOpPatternToSkillId map[int32]int32 `protobuf:"bytes,7,rep,name=playerOpPatternToSkillId,proto3" json:"playerOpPatternToSkillId,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + 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"` } func (x *RoomDownsyncFrame) Reset() { @@ -1301,20 +1179,13 @@ func (x *RoomDownsyncFrame) GetShouldForceResync() bool { return false } -func (x *RoomDownsyncFrame) GetPlayerOpPatternToSkillId() map[int32]int32 { - if x != nil { - return x.PlayerOpPatternToSkillId - } - return nil -} - 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, 0x9d, 0x05, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x6f, + 0x6f, 0x74, 0x6f, 0x22, 0xeb, 0x05, 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, @@ -1332,7 +1203,7 @@ var file_room_downsync_frame_proto_rawDesc = []byte{ 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6a, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6a, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6c, 0x6c, 0x69, 0x64, 0x65, 0x72, - 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x63, 0x6f, + 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, @@ -1351,258 +1222,201 @@ var file_room_downsync_frame_proto_rawDesc = []byte{ 0x08, 0x52, 0x05, 0x69, 0x6e, 0x41, 0x69, 0x72, 0x12, 0x28, 0x0a, 0x0f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x49, 0x6e, 0x43, 0x68, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x49, 0x6e, 0x43, 0x68, 0x53, 0x74, 0x61, - 0x74, 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, - 0x95, 0x06, 0x0a, 0x0b, 0x4d, 0x65, 0x6c, 0x65, 0x65, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x12, - 0x24, 0x0a, 0x0d, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x4c, 0x6f, - 0x63, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, - 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x75, 0x70, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x69, 0x6c, + 0x6c, 0x49, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x48, 0x69, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x48, 0x69, 0x74, + 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, - 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x72, 0x65, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x4f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, - 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x4f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x30, 0x0a, - 0x13, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x4f, - 0x6e, 0x48, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x72, 0x65, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x4f, 0x6e, 0x48, 0x69, 0x74, 0x12, - 0x22, 0x0a, 0x0c, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, - 0x73, 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, 0x08, - 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, 0x24, 0x0a, - 0x0d, 0x68, 0x69, 0x74, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x09, - 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, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1a, 0x0a, - 0x08, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, - 0x08, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x2e, 0x0a, 0x12, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x54, 0x72, - 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x61, 0x6d, - 0x61, 0x67, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x64, 0x61, 0x6d, 0x61, 0x67, - 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4a, 0x6f, 0x69, - 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x6f, 0x66, - 0x66, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4a, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, - 0x2a, 0x0a, 0x10, 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x6f, 0x66, 0x66, 0x65, 0x6e, - 0x64, 0x65, 0x72, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x68, - 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x58, 0x18, 0x10, 0x20, 0x01, 0x28, 0x01, - 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, 0x01, 0x52, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x59, 0x12, - 0x2a, 0x0a, 0x10, 0x73, 0x65, 0x6c, 0x66, 0x4d, 0x6f, 0x76, 0x65, 0x66, 0x6f, 0x72, 0x77, 0x61, - 0x72, 0x64, 0x58, 0x18, 0x12, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x73, 0x65, 0x6c, 0x66, 0x4d, - 0x6f, 0x76, 0x65, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x58, 0x12, 0x2a, 0x0a, 0x10, 0x73, - 0x65, 0x6c, 0x66, 0x4d, 0x6f, 0x76, 0x65, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x59, 0x18, - 0x13, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x73, 0x65, 0x6c, 0x66, 0x4d, 0x6f, 0x76, 0x65, 0x66, - 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x59, 0x22, 0x8d, 0x0b, 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, - 0x73, 0x74, 0x61, 0x67, 0x65, 0x44, 0x69, 0x73, 0x63, 0x72, 0x65, 0x74, 0x65, 0x57, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x73, 0x74, 0x61, 0x67, 0x65, 0x44, 0x69, 0x73, 0x63, 0x72, - 0x65, 0x74, 0x65, 0x57, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x67, 0x65, 0x44, 0x69, 0x73, - 0x63, 0x72, 0x65, 0x74, 0x65, 0x48, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x73, 0x74, - 0x61, 0x67, 0x65, 0x44, 0x69, 0x73, 0x63, 0x72, 0x65, 0x74, 0x65, 0x48, 0x12, 0x1e, 0x0a, 0x0a, - 0x73, 0x74, 0x61, 0x67, 0x65, 0x54, 0x69, 0x6c, 0x65, 0x57, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0a, 0x73, 0x74, 0x61, 0x67, 0x65, 0x54, 0x69, 0x6c, 0x65, 0x57, 0x12, 0x1e, 0x0a, 0x0a, - 0x73, 0x74, 0x61, 0x67, 0x65, 0x54, 0x69, 0x6c, 0x65, 0x48, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0a, 0x73, 0x74, 0x61, 0x67, 0x65, 0x54, 0x69, 0x6c, 0x65, 0x48, 0x12, 0x26, 0x0a, 0x0e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x54, 0x6f, 0x50, 0x69, 0x6e, 0x67, 0x18, 0x06, - 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, 0x07, 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, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0b, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x14, - 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x72, - 0x61, 0x6d, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x62, 0x61, 0x74, 0x74, - 0x6c, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, - 0x12, 0x30, 0x0a, 0x13, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x0a, 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, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46, 0x70, 0x73, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46, 0x70, 0x73, - 0x12, 0x2a, 0x0a, 0x10, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x46, 0x72, - 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x10, - 0x69, 0x6e, 0x70, 0x75, 0x74, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x53, 0x63, 0x61, - 0x6c, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x6e, 0x73, 0x74, 0x44, - 0x65, 0x6c, 0x61, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0e, 0x6e, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 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, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1e, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, + 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, 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, 0x10, 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, 0x2c, 0x0a, 0x11, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x42, 0x61, 0x74, 0x74, - 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x70, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x53, 0x74, 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, 0x12, 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, 0x13, 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, 0x38, 0x0a, 0x17, 0x77, 0x6f, - 0x72, 0x6c, 0x64, 0x54, 0x6f, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x47, 0x72, 0x69, 0x64, - 0x52, 0x61, 0x74, 0x69, 0x6f, 0x18, 0x14, 0x20, 0x01, 0x28, 0x01, 0x52, 0x17, 0x77, 0x6f, 0x72, - 0x6c, 0x64, 0x54, 0x6f, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x47, 0x72, 0x69, 0x64, 0x52, - 0x61, 0x74, 0x69, 0x6f, 0x12, 0x38, 0x0a, 0x17, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x47, - 0x72, 0x69, 0x64, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x18, - 0x15, 0x20, 0x01, 0x28, 0x01, 0x52, 0x17, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x47, 0x72, - 0x69, 0x64, 0x54, 0x6f, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x12, 0x2c, - 0x0a, 0x11, 0x73, 0x70, 0x41, 0x74, 0x6b, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x46, 0x72, 0x61, - 0x6d, 0x65, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x73, 0x70, 0x41, 0x74, 0x6b, - 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0f, - 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, - 0x17, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x61, 0x63, - 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x38, 0x0a, 0x17, 0x73, 0x6e, 0x61, 0x70, 0x49, 0x6e, - 0x74, 0x6f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, - 0x70, 0x18, 0x18, 0x20, 0x01, 0x28, 0x01, 0x52, 0x17, 0x73, 0x6e, 0x61, 0x70, 0x49, 0x6e, 0x74, - 0x6f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, - 0x12, 0x3c, 0x0a, 0x19, 0x73, 0x6e, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x6f, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x19, 0x20, - 0x01, 0x28, 0x01, 0x52, 0x19, 0x73, 0x6e, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x6f, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x28, - 0x0a, 0x0f, 0x6a, 0x75, 0x6d, 0x70, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x69, 0x74, 0x56, 0x65, 0x6c, - 0x59, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x6a, 0x75, 0x6d, 0x70, 0x69, 0x6e, 0x67, - 0x49, 0x6e, 0x69, 0x74, 0x56, 0x65, 0x6c, 0x59, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x72, 0x61, 0x76, - 0x69, 0x74, 0x79, 0x58, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x67, 0x72, 0x61, 0x76, - 0x69, 0x74, 0x79, 0x58, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x79, 0x59, - 0x18, 0x1c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x79, 0x59, - 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x6c, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, - 0x53, 0x74, 0x65, 0x70, 0x18, 0x1d, 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, 0xe4, 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, 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, 0x73, 0x0a, 0x18, - 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x54, - 0x6f, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, - 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, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x4f, 0x70, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x54, 0x6f, 0x53, 0x6b, 0x69, 0x6c, 0x6c, - 0x49, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x18, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, - 0x70, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x54, 0x6f, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, - 0x64, 0x1a, 0x4b, 0x0a, 0x1d, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4f, 0x70, 0x50, 0x61, 0x74, - 0x74, 0x65, 0x72, 0x6e, 0x54, 0x6f, 0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x49, 0x64, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 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, + 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, 0xa2, 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, + 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 ( @@ -1617,7 +1431,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, 12) +var file_room_downsync_frame_proto_msgTypes = make([]protoimpl.MessageInfo, 11) var file_room_downsync_frame_proto_goTypes = []interface{}{ (*PlayerDownsync)(nil), // 0: protos.PlayerDownsync (*InputFrameDecoded)(nil), // 1: protos.InputFrameDecoded @@ -1630,7 +1444,6 @@ var file_room_downsync_frame_proto_goTypes = []interface{}{ (*MeleeBullet)(nil), // 8: protos.MeleeBullet (*BattleColliderInfo)(nil), // 9: protos.BattleColliderInfo (*RoomDownsyncFrame)(nil), // 10: protos.RoomDownsyncFrame - nil, // 11: protos.RoomDownsyncFrame.PlayerOpPatternToSkillIdEntry } var file_room_downsync_frame_proto_depIdxs = []int32{ 2, // 0: protos.WsReq.inputFrameUpsyncBatch:type_name -> protos.InputFrameUpsync @@ -1641,12 +1454,11 @@ var file_room_downsync_frame_proto_depIdxs = []int32{ 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 - 11, // 8: protos.RoomDownsyncFrame.playerOpPatternToSkillId:type_name -> protos.RoomDownsyncFrame.PlayerOpPatternToSkillIdEntry - 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 + 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 } func init() { file_room_downsync_frame_proto_init() } @@ -1794,7 +1606,7 @@ func file_room_downsync_frame_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_room_downsync_frame_proto_rawDesc, NumEnums: 0, - NumMessages: 12, + NumMessages: 11, NumExtensions: 0, NumServices: 0, }, diff --git a/battle_srv/ws/serve.go b/battle_srv/ws/serve.go index b6f6215..1c5c03f 100644 --- a/battle_srv/ws/serve.go +++ b/battle_srv/ws/serve.go @@ -242,34 +242,21 @@ func Serve(c *gin.Context) { bciFrame := &pb.BattleColliderInfo{ BoundRoomId: pRoom.Id, StageName: pRoom.StageName, - StageDiscreteW: pRoom.StageDiscreteW, - StageDiscreteH: pRoom.StageDiscreteH, - StageTileW: pRoom.StageTileW, - StageTileH: pRoom.StageTileH, IntervalToPing: int32(Constants.Ws.IntervalToPing), WillKickIfInactiveFor: int32(Constants.Ws.WillKickIfInactiveFor), BattleDurationNanos: pRoom.BattleDurationNanos, - ServerFps: pRoom.ServerFps, - InputDelayFrames: pRoom.InputDelayFrames, - InputScaleFrames: pRoom.InputScaleFrames, - NstDelayFrames: pRoom.NstDelayFrames, + InputFrameUpsyncDelayTolerance: pRoom.InputFrameUpsyncDelayTolerance, MaxChasingRenderFramesPerUpdate: pRoom.MaxChasingRenderFramesPerUpdate, PlayerBattleState: pThePlayer.BattleState, // For frontend to know whether it's rejoining RollbackEstimatedDtMillis: pRoom.RollbackEstimatedDtMillis, RollbackEstimatedDtNanos: pRoom.RollbackEstimatedDtNanos, - WorldToVirtualGridRatio: pRoom.WorldToVirtualGridRatio, - VirtualGridToWorldRatio: pRoom.VirtualGridToWorldRatio, + InputDelayFrames: pRoom.InputDelayFrames, + InputScaleFrames: pRoom.InputScaleFrames, - SpAtkLookupFrames: pRoom.SpAtkLookupFrames, RenderCacheSize: pRoom.RenderCacheSize, - SnapIntoPlatformOverlap: pRoom.SnapIntoPlatformOverlap, - SnapIntoPlatformThreshold: pRoom.SnapIntoPlatformThreshold, - JumpingInitVelY: pRoom.JumpingInitVelY, - GravityX: pRoom.GravityX, - GravityY: pRoom.GravityY, CollisionMinStep: pRoom.CollisionMinStep, FrameDataLoggingEnabled: pRoom.FrameDataLoggingEnabled, diff --git a/frontend/assets/plugin_scripts/jsexport.js b/frontend/assets/plugin_scripts/jsexport.js index f31517a..c0aab2b 100644 --- a/frontend/assets/plugin_scripts/jsexport.js +++ b/frontend/assets/plugin_scripts/jsexport.js @@ -4724,7 +4724,7 @@ $packages["resolv"] = (function() { return $pkg; })(); $packages["jsexport/battle"] = (function() { - var $pkg = {}, $init, math, resolv, Vec2D, Polygon2D, PlayerDownsync, InputFrameDecoded, Barrier, Bullet, MeleeBullet, FireballBullet, Skill, RoomDownsyncFrame, InputFrameDownsync, RingBuffer, SkillMapperType, CharacterConfig, SatResult, sliceType, sliceType$1, sliceType$2, ptrType, ptrType$1, ptrType$2, sliceType$3, sliceType$4, ptrType$3, ptrType$4, ptrType$5, ptrType$6, ptrType$7, sliceType$5, sliceType$6, sliceType$7, sliceType$8, sliceType$9, ptrType$8, sliceType$10, ptrType$9, sliceType$11, sliceType$12, ptrType$10, sliceType$13, ptrType$11, mapType, ptrType$12, skills, inAirSet, noOpSet, invinsibleSet, nonAttackingSet, NewRingBuffer, ConvertToInputFrameId, decodeInput, CalcPushbacks, isPolygonPairOverlapped, isPolygonPairSeparatedByDir, WorldToVirtualGridPos, VirtualGridToWorldPos, WorldToPolygonColliderBLPos, PolygonColliderBLToWorldPos, PolygonColliderBLToVirtualGridPos, calcHardPushbacksNorms, deriveOpPattern, ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame, GenerateRectCollider, generateRectColliderInCollisionSpace, GenerateConvexPolygonCollider, AlignPolygon2DToBoundingBox; + var $pkg = {}, $init, math, resolv, Vec2D, Polygon2D, PlayerDownsync, InputFrameDecoded, Barrier, Bullet, MeleeBullet, FireballBullet, Skill, RoomDownsyncFrame, InputFrameDownsync, RingBuffer, SkillMapperType, CharacterConfig, SatResult, sliceType, sliceType$1, sliceType$2, ptrType, ptrType$1, ptrType$2, sliceType$3, sliceType$4, ptrType$3, ptrType$4, ptrType$5, ptrType$6, ptrType$7, sliceType$5, sliceType$6, sliceType$7, sliceType$8, sliceType$9, ptrType$8, sliceType$10, ptrType$9, sliceType$11, sliceType$12, ptrType$10, sliceType$13, ptrType$11, mapType, ptrType$12, skills, inAirSet, noOpSet, invinsibleSet, nonAttackingSet, NewRingBuffer, ShouldGenerateInputFrameUpsync, ConvertToDelayedInputFrameId, ConvertToNoDelayInputFrameId, ConvertToFirstUsedRenderFrameId, ConvertToLastUsedRenderFrameId, decodeInput, CalcPushbacks, isPolygonPairOverlapped, isPolygonPairSeparatedByDir, WorldToVirtualGridPos, VirtualGridToWorldPos, WorldToPolygonColliderBLPos, PolygonColliderBLToWorldPos, PolygonColliderBLToVirtualGridPos, calcHardPushbacksNorms, deriveOpPattern, ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame, GenerateRectCollider, generateRectColliderInCollisionSpace, GenerateConvexPolygonCollider, AlignPolygon2DToBoundingBox; math = $packages["math"]; resolv = $packages["resolv"]; Vec2D = $pkg.Vec2D = $newType(0, $kindStruct, "battle.Vec2D", true, "jsexport/battle", true, function(X_, Y_) { @@ -5152,14 +5152,34 @@ $packages["jsexport/battle"] = (function() { return [ret, oldStFrameId, oldEdFrameId]; }; RingBuffer.prototype.SetByFrameId = function(pItem, frameId) { return this.$val.SetByFrameId(pItem, frameId); }; - ConvertToInputFrameId = function(renderFrameId, inputDelayFrames, inputScaleFrames) { - var inputDelayFrames, inputScaleFrames, renderFrameId; - if (renderFrameId < inputDelayFrames) { + ShouldGenerateInputFrameUpsync = function(renderFrameId) { + var renderFrameId; + return (((renderFrameId & 3)) === 0); + }; + $pkg.ShouldGenerateInputFrameUpsync = ShouldGenerateInputFrameUpsync; + ConvertToDelayedInputFrameId = function(renderFrameId) { + var renderFrameId; + if (renderFrameId < 8) { return 0; } - return ((((renderFrameId - inputDelayFrames >> 0)) >> $min(inputScaleFrames, 31)) >> 0); + return (((renderFrameId - 8 >> 0)) >> 2 >> 0); }; - $pkg.ConvertToInputFrameId = ConvertToInputFrameId; + $pkg.ConvertToDelayedInputFrameId = ConvertToDelayedInputFrameId; + ConvertToNoDelayInputFrameId = function(renderFrameId) { + var renderFrameId; + return (renderFrameId >> 2 >> 0); + }; + $pkg.ConvertToNoDelayInputFrameId = ConvertToNoDelayInputFrameId; + ConvertToFirstUsedRenderFrameId = function(inputFrameId) { + var inputFrameId; + return (((inputFrameId << 2 >> 0)) + 8 >> 0); + }; + $pkg.ConvertToFirstUsedRenderFrameId = ConvertToFirstUsedRenderFrameId; + ConvertToLastUsedRenderFrameId = function(inputFrameId) { + var inputFrameId; + return (((((inputFrameId << 2 >> 0)) + 8 >> 0) + 4 >> 0) - 1 >> 0); + }; + $pkg.ConvertToLastUsedRenderFrameId = ConvertToLastUsedRenderFrameId; decodeInput = function(encodedInput) { var btnALevel, btnBLevel, encodedDirection, encodedInput, x, x$1, x$2, x$3; encodedDirection = new $Uint64(encodedInput.$high & 0, (encodedInput.$low & 15) >>> 0); @@ -5408,10 +5428,10 @@ $packages["jsexport/battle"] = (function() { $s = -1; return (ret.$ptr || (ret.$ptr = new ptrType$4(function() { return this.$target[0]; }, function($v) { this.$target[0] = $v; }, ret))); /* */ } return; } var $f = {$blk: calcHardPushbacksNorms, $c: true, $r, _i, _r, _ref, _ref$1, _tmp, _tmp$1, _tuple, barrierShape, collision, isBarrier, joinIndex, obj, overlapResult, overlapped, pEffPushback, playerCollider, playerShape, pushbackX, pushbackY, ret, snapIntoPlatformOverlap, $s};return $f; }; - deriveOpPattern = function(currPlayerDownsync, thatPlayerInNextFrame, currRenderFrame, inputsBuffer, inputDelayFrames, inputScaleFrames) { - var _entry, _entry$1, _tmp, _tmp$1, _tmp$2, _tmp$3, _tmp$4, _tmp$5, _tuple, _tuple$1, currPlayerDownsync, currRenderFrame, decodedInput, delayedInputFrameId, delayedInputFrameIdForPrevRdf, delayedInputList, delayedInputListForPrevRdf, effDx, effDy, existent, existent$1, inputDelayFrames, inputScaleFrames, inputsBuffer, joinIndex, jumpedOrNot, patternId, prevBtnALevel, prevBtnBLevel, prevDecodedInput, thatPlayerInNextFrame, x, x$1; - delayedInputFrameId = ConvertToInputFrameId(currRenderFrame.Id, inputDelayFrames, inputScaleFrames); - delayedInputFrameIdForPrevRdf = ConvertToInputFrameId(currRenderFrame.Id - 1 >> 0, inputDelayFrames, inputScaleFrames); + deriveOpPattern = function(currPlayerDownsync, thatPlayerInNextFrame, currRenderFrame, inputsBuffer) { + var _entry, _entry$1, _tmp, _tmp$1, _tmp$2, _tmp$3, _tmp$4, _tmp$5, _tuple, _tuple$1, currPlayerDownsync, currRenderFrame, decodedInput, delayedInputFrameId, delayedInputFrameIdForPrevRdf, delayedInputList, delayedInputListForPrevRdf, effDx, effDy, existent, existent$1, inputsBuffer, joinIndex, jumpedOrNot, patternId, prevBtnALevel, prevBtnBLevel, prevDecodedInput, thatPlayerInNextFrame, x, x$1; + delayedInputFrameId = ConvertToDelayedInputFrameId(currRenderFrame.Id); + delayedInputFrameIdForPrevRdf = ConvertToDelayedInputFrameId(currRenderFrame.Id - 1 >> 0); if (0 >= delayedInputFrameId) { return [-2, false, 0, 0]; } @@ -5491,7 +5511,7 @@ $packages["jsexport/battle"] = (function() { ((i$1 < 0 || i$1 >= jumpedOrNotList.$length) ? ($throwRuntimeError("index out of range"), undefined) : jumpedOrNotList.$array[jumpedOrNotList.$offset + i$1] = false); chConfig = ((i$1 < 0 || i$1 >= chConfigsOrderedByJoinIndex.$length) ? ($throwRuntimeError("index out of range"), undefined) : chConfigsOrderedByJoinIndex.$array[chConfigsOrderedByJoinIndex.$offset + i$1]); thatPlayerInNextFrame = ((i$1 < 0 || i$1 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i$1]); - _tuple = deriveOpPattern(currPlayerDownsync$1, thatPlayerInNextFrame, currRenderFrame, inputsBuffer, 8, 2); + _tuple = deriveOpPattern(currPlayerDownsync$1, thatPlayerInNextFrame, currRenderFrame, inputsBuffer); patternId = _tuple[0]; jumpedOrNot = _tuple[1]; effDx = _tuple[2]; @@ -6066,7 +6086,7 @@ $packages["jsexport/battle"] = (function() { return $pkg; })(); $packages["jsexport"] = (function() { - var $pkg = {}, $init, js, battle, resolv, sliceType, ptrType, sliceType$1, ptrType$1, ptrType$2, sliceType$2, ptrType$3, sliceType$3, ptrType$4, sliceType$4, ptrType$5, sliceType$5, ptrType$6, funcType, funcType$1, funcType$2, funcType$3, funcType$4, funcType$5, funcType$6, funcType$7, funcType$8, funcType$9, funcType$10, ptrType$7, funcType$11, funcType$12, funcType$13, funcType$14, sliceType$6, funcType$15, ptrType$8, ptrType$9, ptrType$10, mapType, sliceType$7, funcType$16, mapType$1, NewInputFrameDownsync, NewRingBufferJs, NewCollisionSpaceJs, NewVec2DJs, NewPolygon2DJs, NewBarrierJs, NewPlayerDownsyncJs, NewMeleeBulletJs, NewRoomDownsyncFrameJs, GetCollisionSpaceObjsJs, GenerateRectColliderJs, GenerateConvexPolygonColliderJs, GetCharacterConfigsOrderedByJoinIndex, ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs, main; + var $pkg = {}, $init, js, battle, resolv, sliceType, ptrType, sliceType$1, ptrType$1, ptrType$2, sliceType$2, ptrType$3, sliceType$3, ptrType$4, sliceType$4, ptrType$5, sliceType$5, ptrType$6, funcType, funcType$1, funcType$2, funcType$3, funcType$4, funcType$5, funcType$6, funcType$7, funcType$8, funcType$9, funcType$10, ptrType$7, funcType$11, funcType$12, funcType$13, funcType$14, sliceType$6, funcType$15, ptrType$8, ptrType$9, ptrType$10, mapType, sliceType$7, funcType$16, funcType$17, funcType$18, mapType$1, NewInputFrameDownsync, NewRingBufferJs, NewCollisionSpaceJs, NewVec2DJs, NewPolygon2DJs, NewBarrierJs, NewPlayerDownsyncJs, NewMeleeBulletJs, NewRoomDownsyncFrameJs, GetCollisionSpaceObjsJs, GenerateRectColliderJs, GenerateConvexPolygonColliderJs, GetCharacterConfigsOrderedByJoinIndex, ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs, main; js = $packages["github.com/gopherjs/gopherjs/js"]; battle = $packages["jsexport/battle"]; resolv = $packages["resolv"]; @@ -6086,7 +6106,7 @@ $packages["jsexport"] = (function() { funcType = $funcType([$Float64, $Float64], [ptrType$5], false); funcType$1 = $funcType([ptrType, sliceType$1], [ptrType$5], false); funcType$2 = $funcType([ptrType$1], [ptrType$5], false); - funcType$3 = $funcType([$Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Bool], [ptrType$5], false); + funcType$3 = $funcType([$Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Bool], [ptrType$5], false); funcType$4 = $funcType([$Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Bool], [ptrType$5], false); funcType$5 = $funcType([$Int32, sliceType$2, sliceType$3], [ptrType$5], false); funcType$6 = $funcType([$Int, $Int, $Int, $Int], [ptrType$5], false); @@ -6107,6 +6127,8 @@ $packages["jsexport"] = (function() { mapType = $mapType($Int32, ptrType$10); sliceType$7 = $sliceType(ptrType$6); funcType$16 = $funcType([ptrType$8, ptrType$9, ptrType$7, mapType, $Float64, $Float64, sliceType$7], [ptrType$5], false); + funcType$17 = $funcType([$Int32], [$Int32], false); + funcType$18 = $funcType([$Int32], [$Bool], false); mapType$1 = $mapType($String, $emptyInterface); NewInputFrameDownsync = function(inputFrameId, inputList, confirmedList) { var {$24r, _r, confirmedList, inputFrameId, inputList, $s, $r, $c} = $restore(this, {inputFrameId, inputList, confirmedList}); @@ -6154,9 +6176,9 @@ $packages["jsexport"] = (function() { return js.MakeWrapper(new battle.Barrier.ptr(boundary)); }; $pkg.NewBarrierJs = NewBarrierJs; - NewPlayerDownsyncJs = function(id, virtualGridX, virtualGridY, dirX, dirY, velX, velY, framesToRecover, framesInChState, speed, battleState, characterState, joinIndex, hp, maxHp, colliderRadius, inAir) { - var battleState, characterState, colliderRadius, dirX, dirY, framesInChState, framesToRecover, hp, id, inAir, joinIndex, maxHp, speed, velX, velY, virtualGridX, virtualGridY; - return js.MakeWrapper(new battle.PlayerDownsync.ptr(id, virtualGridX, virtualGridY, dirX, dirY, velX, velY, speed, battleState, joinIndex, colliderRadius, false, 0, 0, framesToRecover, framesInChState, hp, maxHp, characterState, inAir, 0, 0)); + NewPlayerDownsyncJs = function(id, virtualGridX, virtualGridY, dirX, dirY, velX, velY, framesToRecover, framesInChState, activeSkillId, activeSkillHit, speed, battleState, characterState, joinIndex, hp, maxHp, colliderRadius, inAir) { + var activeSkillHit, activeSkillId, battleState, characterState, colliderRadius, dirX, dirY, framesInChState, framesToRecover, hp, id, inAir, joinIndex, maxHp, speed, velX, velY, virtualGridX, virtualGridY; + return js.MakeWrapper(new battle.PlayerDownsync.ptr(id, virtualGridX, virtualGridY, dirX, dirY, velX, velY, speed, battleState, joinIndex, colliderRadius, false, 0, 0, framesToRecover, framesInChState, hp, maxHp, characterState, inAir, activeSkillId, activeSkillHit)); }; $pkg.NewPlayerDownsyncJs = NewPlayerDownsyncJs; NewMeleeBulletJs = function(originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp) { @@ -6250,7 +6272,7 @@ $packages["jsexport"] = (function() { }; $pkg.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs = ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs; main = function() { - $global.gopkgs = $externalize($makeMap($String.keyFor, [{ k: "NewVec2DJs", v: new funcType(NewVec2DJs) }, { k: "NewPolygon2DJs", v: new funcType$1(NewPolygon2DJs) }, { k: "NewBarrierJs", v: new funcType$2(NewBarrierJs) }, { k: "NewPlayerDownsyncJs", v: new funcType$3(NewPlayerDownsyncJs) }, { k: "NewMeleeBulletJs", v: new funcType$4(NewMeleeBulletJs) }, { k: "NewRoomDownsyncFrameJs", v: new funcType$5(NewRoomDownsyncFrameJs) }, { k: "NewCollisionSpaceJs", v: new funcType$6(NewCollisionSpaceJs) }, { k: "NewInputFrameDownsync", v: new funcType$7(NewInputFrameDownsync) }, { k: "NewRingBufferJs", v: new funcType$8(NewRingBufferJs) }, { k: "GenerateRectColliderJs", v: new funcType$9(GenerateRectColliderJs) }, { k: "GenerateConvexPolygonColliderJs", v: new funcType$10(GenerateConvexPolygonColliderJs) }, { k: "GetCollisionSpaceObjsJs", v: new funcType$11(GetCollisionSpaceObjsJs) }, { k: "WorldToPolygonColliderBLPos", v: new funcType$12(battle.WorldToPolygonColliderBLPos) }, { k: "PolygonColliderBLToWorldPos", v: new funcType$12(battle.PolygonColliderBLToWorldPos) }, { k: "WorldToVirtualGridPos", v: new funcType$13(battle.WorldToVirtualGridPos) }, { k: "VirtualGridToWorldPos", v: new funcType$14(battle.VirtualGridToWorldPos) }, { k: "GetCharacterConfigsOrderedByJoinIndex", v: new funcType$15(GetCharacterConfigsOrderedByJoinIndex) }, { k: "ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs", v: new funcType$16(ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs) }]), mapType$1); + $global.gopkgs = $externalize($makeMap($String.keyFor, [{ k: "NewVec2DJs", v: new funcType(NewVec2DJs) }, { k: "NewPolygon2DJs", v: new funcType$1(NewPolygon2DJs) }, { k: "NewBarrierJs", v: new funcType$2(NewBarrierJs) }, { k: "NewPlayerDownsyncJs", v: new funcType$3(NewPlayerDownsyncJs) }, { k: "NewMeleeBulletJs", v: new funcType$4(NewMeleeBulletJs) }, { k: "NewRoomDownsyncFrameJs", v: new funcType$5(NewRoomDownsyncFrameJs) }, { k: "NewCollisionSpaceJs", v: new funcType$6(NewCollisionSpaceJs) }, { k: "NewInputFrameDownsync", v: new funcType$7(NewInputFrameDownsync) }, { k: "NewRingBufferJs", v: new funcType$8(NewRingBufferJs) }, { k: "GenerateRectColliderJs", v: new funcType$9(GenerateRectColliderJs) }, { k: "GenerateConvexPolygonColliderJs", v: new funcType$10(GenerateConvexPolygonColliderJs) }, { k: "GetCollisionSpaceObjsJs", v: new funcType$11(GetCollisionSpaceObjsJs) }, { k: "WorldToPolygonColliderBLPos", v: new funcType$12(battle.WorldToPolygonColliderBLPos) }, { k: "PolygonColliderBLToWorldPos", v: new funcType$12(battle.PolygonColliderBLToWorldPos) }, { k: "WorldToVirtualGridPos", v: new funcType$13(battle.WorldToVirtualGridPos) }, { k: "VirtualGridToWorldPos", v: new funcType$14(battle.VirtualGridToWorldPos) }, { k: "GetCharacterConfigsOrderedByJoinIndex", v: new funcType$15(GetCharacterConfigsOrderedByJoinIndex) }, { k: "ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs", v: new funcType$16(ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs) }, { k: "ConvertToDelayedInputFrameId", v: new funcType$17(battle.ConvertToDelayedInputFrameId) }, { k: "ConvertToNoDelayInputFrameId", v: new funcType$17(battle.ConvertToNoDelayInputFrameId) }, { k: "ConvertToFirstUsedRenderFrameId", v: new funcType$17(battle.ConvertToFirstUsedRenderFrameId) }, { k: "ConvertToLastUsedRenderFrameId", v: new funcType$17(battle.ConvertToLastUsedRenderFrameId) }, { k: "ShouldGenerateInputFrameUpsync", v: new funcType$18(battle.ShouldGenerateInputFrameUpsync) }]), mapType$1); }; $init = function() { $pkg.$init = function() {}; diff --git a/frontend/assets/resources/pbfiles/room_downsync_frame.proto b/frontend/assets/resources/pbfiles/room_downsync_frame.proto index f8b58dd..b22bc48 100644 --- a/frontend/assets/resources/pbfiles/room_downsync_frame.proto +++ b/frontend/assets/resources/pbfiles/room_downsync_frame.proto @@ -15,7 +15,7 @@ message PlayerDownsync { int32 speed = 8; // this is the instantaneous scalar attribute of a character, different from but will be accounted in "velX" and "velY" int32 battleState = 9; int32 joinIndex = 10; - double colliderRadius = 11; + int32 colliderRadius = 11; bool removed = 12; int32 score = 13; int32 lastMoveGmtMillis = 14; @@ -25,6 +25,8 @@ message PlayerDownsync { int32 characterState = 18; bool inAir = 19; // by design a standalone field only inferred by the collision result of "applyInputFrameDownsyncDynamicsOnSingleRenderFrame" instead of "characterState", because we need check the transition for "characterState" from this field, i.e. "inAir (prev -> curr)" int32 framesInChState = 20; // number of frames elapsed in the current character state + int32 activeSkillId = 21; + int32 activeSkillHit = 22; string name = 997; string displayName = 998; @@ -85,33 +87,29 @@ message MeleeBullet { // ALL lengths are in world coordinate // for offender - int32 battleLocalId = 1; - int32 startupFrames = 2; - int32 activeFrames = 3; - int32 recoveryFrames = 4; - int32 recoveryFramesOnBlock = 5; - int32 recoveryFramesOnHit = 6; - double hitboxOffset = 7; - int32 originatedRenderFrameId = 8; + int32 originatedRenderFrameId = 1; + int32 offenderJoinIndex = 2; - // for defender - int32 hitStunFrames = 9; - int32 blockStunFrames = 10; - double pushbackX = 11; - double pushbackY = 12; + int32 startupFrames = 3; + int32 cancellableStFrame = 4; + int32 cancellableEdFrame = 5; + int32 activeFrames = 6; - int32 damage = 13; + int32 hitStunFrames = 7; + int32 blockStunFrames = 8; + int32 pushbackVelX = 9; + int32 pushbackVelY = 10; + int32 damage = 11; - int32 offenderJoinIndex = 14; - int32 offenderPlayerId = 15; + int32 selfLockVelX = 12; + int32 selfLockVelY = 13; - double hitboxSizeX = 16; - double hitboxSizeY = 17; + int32 hitboxOffsetX = 14; + int32 hitboxOffsetY = 15; + int32 hitboxSizeX = 16; + int32 hitboxSizeY = 17; - double selfLockVelX = 18; - double selfLockVelY = 19; - - int32 releaseTriggerType = 999; // 1: rising-edge, 2: falling-edge + bool blowUp = 18; } message BattleColliderInfo { @@ -127,8 +125,8 @@ message BattleColliderInfo { int64 rollbackEstimatedDtNanos = 9; int32 renderCacheSize = 10; - int32 spaceOffsetX = 11; - int32 spaceOffsetY = 12; + double spaceOffsetX = 11; + double spaceOffsetY = 12; int32 collisionMinStep = 13; bool frameDataLoggingEnabled = 999; @@ -141,5 +139,4 @@ message RoomDownsyncFrame { 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; - map playerOpPatternToSkillId = 7; } diff --git a/frontend/assets/scenes/offline_map.fire b/frontend/assets/scenes/offline_map.fire index 2a2d80b..de9f2b1 100644 --- a/frontend/assets/scenes/offline_map.fire +++ b/frontend/assets/scenes/offline_map.fire @@ -461,7 +461,7 @@ "array": [ 0, 0, - 210.4189861023336, + 210.4441731196186, 0, 0, 0, diff --git a/frontend/assets/scripts/Map.js b/frontend/assets/scripts/Map.js index ff7d3c1..3d29d8f 100644 --- a/frontend/assets/scripts/Map.js +++ b/frontend/assets/scripts/Map.js @@ -107,23 +107,6 @@ cc.Class({ return (0 == inputFrameId % 10); }, - _convertToInputFrameId(renderFrameId, inputDelayFrames) { - if (renderFrameId < inputDelayFrames) return 0; - return ((renderFrameId - inputDelayFrames) >> this.inputScaleFrames); - }, - - _convertToFirstUsedRenderFrameId(inputFrameId, inputDelayFrames) { - return ((inputFrameId << this.inputScaleFrames) + inputDelayFrames); - }, - - _convertToLastUsedRenderFrameId(inputFrameId, inputDelayFrames) { - return ((inputFrameId << this.inputScaleFrames) + inputDelayFrames + (1 << this.inputScaleFrames) - 1); - }, - - shouldGenerateInputFrameUpsync(renderFrameId) { - return ((renderFrameId & ((1 << this.inputScaleFrames) - 1)) == 0); - }, - _allConfirmed(confirmedList) { return (confirmedList + 1) == (1 << this.playerRichInfoDict.size); }, @@ -586,7 +569,7 @@ cc.Class({ const jsPlayersArr = new Array().fill(null); for (let k in pbRdf.playersArr) { 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.speed, pbPlayer.battleState, pbPlayer.characterState, pbPlayer.joinIndex, pbPlayer.hp, pbPlayer.maxHp, pbPlayer.colliderRadius, pbPlayer.inAir); + 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.speed, pbPlayer.battleState, pbPlayer.characterState, pbPlayer.joinIndex, pbPlayer.hp, pbPlayer.maxHp, pbPlayer.colliderRadius, pbPlayer.inAir); jsPlayersArr[k] = jsPlayer; } const jsMeleeBulletsArr = []; @@ -770,7 +753,7 @@ cc.Class({ } if (null == firstPredictedYetIncorrectInputFrameId) return; - const renderFrameId1 = self._convertToFirstUsedRenderFrameId(firstPredictedYetIncorrectInputFrameId, self.inputDelayFrames) - 1; + const renderFrameId1 = gopkgs.ConvertToFirstUsedRenderFrameId(firstPredictedYetIncorrectInputFrameId) - 1; if (renderFrameId1 >= self.chaserRenderFrameId) return; /* @@ -866,8 +849,8 @@ batchInputFrameIdRange=[${batch[0].inputFrameId}, ${batch[batch.length - 1].inpu let st = performance.now(); let prevSelfInput = null, currSelfInput = null; - const noDelayInputFrameId = self._convertToInputFrameId(self.renderFrameId, 0); // It's important that "inputDelayFrames == 0" here - if (self.shouldGenerateInputFrameUpsync(self.renderFrameId)) { + const noDelayInputFrameId = gopkgs.ConvertToNoDelayInputFrameId(self.renderFrameId); + if (gopkgs.ShouldGenerateInputFrameUpsync(self.renderFrameId)) { [prevSelfInput, currSelfInput] = self.getOrPrefabInputFrameUpsync(noDelayInputFrameId); } @@ -902,7 +885,7 @@ batchInputFrameIdRange=[${batch[0].inputFrameId}, ${batch[batch.length - 1].inpu */ // [WARNING] Don't try to get "prevRdf(i.e. renderFrameId == latest-1)" by "self.recentRenderCache.getByFrameId(...)" here, as the cache might have been updated by asynchronous "onRoomDownsyncFrame(...)" calls! if (self.othersForcedDownsyncRenderFrameDict.has(rdf.id)) { - const delayedInputFrameId = self._convertToInputFrameId(rdf.id, 0); + const delayedInputFrameId = gopkgs.ConvertToDelayedInputFrameId(rdf.id); const othersForcedDownsyncRenderFrame = self.othersForcedDownsyncRenderFrameDict.get(rdf.id); if (self.lastAllConfirmedInputFrameId >= delayedInputFrameId && !self.equalRoomDownsyncFrames(othersForcedDownsyncRenderFrame, rdf)) { console.warn(`Mismatched render frame@rdf.id=${rdf.id} w/ inputFrameId=${delayedInputFrameId}: @@ -1071,14 +1054,14 @@ othersForcedDownsyncRenderFrame=${JSON.stringify(othersForcedDownsyncRenderFrame if (null == currRdf) { throw `Couldn't find renderFrame for i=${i} to rollback (are you using Firefox?), self.renderFrameId=${self.renderFrameId}, lastAllConfirmedInputFrameId=${self.lastAllConfirmedInputFrameId}, might've been interruptted by onRoomDownsyncFrame`; } - const j = self._convertToInputFrameId(i, self.inputDelayFrames); + const j = gopkgs.ConvertToDelayedInputFrameId(i); const delayedInputFrame = self.recentInputCache.GetByFrameId(j); // Don't make prediction here, the inputFrameDownsyncs in recentInputCache was already predicted while prefabbing if (null == delayedInputFrame) { // Shouldn't happen! throw `Failed to get cached delayedInputFrame for i=${i}, j=${j}, renderFrameId=${self.renderFrameId}, lastUpsyncInputFrameId=${self.lastUpsyncInputFrameId}, lastAllConfirmedInputFrameId=${self.lastAllConfirmedInputFrameId}, chaserRenderFrameId=${self.chaserRenderFrameId}; recentRenderCache=${self._stringifyRecentRenderCache(false)}, recentInputCache=${self._stringifyRecentInputCache(false)}`; } - const jPrev = self._convertToInputFrameId(i - 1, self.inputDelayFrames); + const jPrev = gopkgs.ConvertToDelayedInputFrameId(i - 1); if (self.frameDataLoggingEnabled) { const actuallyUsedInputClone = delayedInputFrame.InputList.slice(); const inputFrameDownsyncClone = { diff --git a/frontend/assets/scripts/OfflineMap.js b/frontend/assets/scripts/OfflineMap.js index 061ee53..ca75172 100644 --- a/frontend/assets/scripts/OfflineMap.js +++ b/frontend/assets/scripts/OfflineMap.js @@ -28,8 +28,6 @@ cc.Class({ /** Init required prefab ended. */ - self.inputDelayFrames = 8; - self.inputScaleFrames = 2; self.inputFrameUpsyncDelayTolerance = 2; self.collisionMinStep = 8; @@ -188,8 +186,8 @@ cc.Class({ let st = performance.now(); let prevSelfInput = null, currSelfInput = null; - const noDelayInputFrameId = self._convertToInputFrameId(self.renderFrameId, 0); // It's important that "inputDelayFrames == 0" here - if (self.shouldGenerateInputFrameUpsync(self.renderFrameId)) { + const noDelayInputFrameId = gopkgs.ConvertToNoDelayInputFrameId(self.renderFrameId); // It's important that "inputDelayFrames == 0" here + if (gopkgs.ShouldGenerateInputFrameUpsync(self.renderFrameId)) { const prevAndCurrInputs = self.getOrPrefabInputFrameUpsync(noDelayInputFrameId); prevSelfInput = prevAndCurrInputs[0]; currSelfInput = prevAndCurrInputs[1]; 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 3ee05c7..ee15c16 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 @@ -1211,6 +1211,8 @@ $root.protos = (function() { * @property {number|null} [characterState] PlayerDownsync characterState * @property {boolean|null} [inAir] PlayerDownsync inAir * @property {number|null} [framesInChState] PlayerDownsync framesInChState + * @property {number|null} [activeSkillId] PlayerDownsync activeSkillId + * @property {number|null} [activeSkillHit] PlayerDownsync activeSkillHit * @property {string|null} [name] PlayerDownsync name * @property {string|null} [displayName] PlayerDownsync displayName * @property {string|null} [avatar] PlayerDownsync avatar @@ -1391,6 +1393,22 @@ $root.protos = (function() { */ PlayerDownsync.prototype.framesInChState = 0; + /** + * PlayerDownsync activeSkillId. + * @member {number} activeSkillId + * @memberof protos.PlayerDownsync + * @instance + */ + PlayerDownsync.prototype.activeSkillId = 0; + + /** + * PlayerDownsync activeSkillHit. + * @member {number} activeSkillHit + * @memberof protos.PlayerDownsync + * @instance + */ + PlayerDownsync.prototype.activeSkillHit = 0; + /** * PlayerDownsync name. * @member {string} name @@ -1460,7 +1478,7 @@ $root.protos = (function() { if (message.joinIndex != null && Object.hasOwnProperty.call(message, "joinIndex")) writer.uint32(/* id 10, wireType 0 =*/80).int32(message.joinIndex); if (message.colliderRadius != null && Object.hasOwnProperty.call(message, "colliderRadius")) - writer.uint32(/* id 11, wireType 1 =*/89).double(message.colliderRadius); + writer.uint32(/* id 11, wireType 0 =*/88).int32(message.colliderRadius); if (message.removed != null && Object.hasOwnProperty.call(message, "removed")) writer.uint32(/* id 12, wireType 0 =*/96).bool(message.removed); if (message.score != null && Object.hasOwnProperty.call(message, "score")) @@ -1479,6 +1497,10 @@ $root.protos = (function() { writer.uint32(/* id 19, wireType 0 =*/152).bool(message.inAir); if (message.framesInChState != null && Object.hasOwnProperty.call(message, "framesInChState")) writer.uint32(/* id 20, wireType 0 =*/160).int32(message.framesInChState); + if (message.activeSkillId != null && Object.hasOwnProperty.call(message, "activeSkillId")) + writer.uint32(/* id 21, wireType 0 =*/168).int32(message.activeSkillId); + if (message.activeSkillHit != null && Object.hasOwnProperty.call(message, "activeSkillHit")) + writer.uint32(/* id 22, wireType 0 =*/176).int32(message.activeSkillHit); 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")) @@ -1560,7 +1582,7 @@ $root.protos = (function() { break; } case 11: { - message.colliderRadius = reader.double(); + message.colliderRadius = reader.int32(); break; } case 12: { @@ -1599,6 +1621,14 @@ $root.protos = (function() { message.framesInChState = reader.int32(); break; } + case 21: { + message.activeSkillId = reader.int32(); + break; + } + case 22: { + message.activeSkillHit = reader.int32(); + break; + } case 997: { message.name = reader.string(); break; @@ -1677,8 +1707,8 @@ $root.protos = (function() { if (!$util.isInteger(message.joinIndex)) return "joinIndex: integer expected"; if (message.colliderRadius != null && message.hasOwnProperty("colliderRadius")) - if (typeof message.colliderRadius !== "number") - return "colliderRadius: number expected"; + if (!$util.isInteger(message.colliderRadius)) + return "colliderRadius: integer expected"; if (message.removed != null && message.hasOwnProperty("removed")) if (typeof message.removed !== "boolean") return "removed: boolean expected"; @@ -1706,6 +1736,12 @@ $root.protos = (function() { if (message.framesInChState != null && message.hasOwnProperty("framesInChState")) if (!$util.isInteger(message.framesInChState)) return "framesInChState: integer expected"; + if (message.activeSkillId != null && message.hasOwnProperty("activeSkillId")) + if (!$util.isInteger(message.activeSkillId)) + return "activeSkillId: integer expected"; + if (message.activeSkillHit != null && message.hasOwnProperty("activeSkillHit")) + if (!$util.isInteger(message.activeSkillHit)) + return "activeSkillHit: integer expected"; if (message.name != null && message.hasOwnProperty("name")) if (!$util.isString(message.name)) return "name: string expected"; @@ -1751,7 +1787,7 @@ $root.protos = (function() { if (object.joinIndex != null) message.joinIndex = object.joinIndex | 0; if (object.colliderRadius != null) - message.colliderRadius = Number(object.colliderRadius); + message.colliderRadius = object.colliderRadius | 0; if (object.removed != null) message.removed = Boolean(object.removed); if (object.score != null) @@ -1770,6 +1806,10 @@ $root.protos = (function() { message.inAir = Boolean(object.inAir); if (object.framesInChState != null) message.framesInChState = object.framesInChState | 0; + if (object.activeSkillId != null) + message.activeSkillId = object.activeSkillId | 0; + if (object.activeSkillHit != null) + message.activeSkillHit = object.activeSkillHit | 0; if (object.name != null) message.name = String(object.name); if (object.displayName != null) @@ -1813,6 +1853,8 @@ $root.protos = (function() { object.characterState = 0; object.inAir = false; object.framesInChState = 0; + object.activeSkillId = 0; + object.activeSkillHit = 0; object.name = ""; object.displayName = ""; object.avatar = ""; @@ -1838,7 +1880,7 @@ $root.protos = (function() { if (message.joinIndex != null && message.hasOwnProperty("joinIndex")) object.joinIndex = message.joinIndex; if (message.colliderRadius != null && message.hasOwnProperty("colliderRadius")) - object.colliderRadius = options.json && !isFinite(message.colliderRadius) ? String(message.colliderRadius) : message.colliderRadius; + object.colliderRadius = message.colliderRadius; if (message.removed != null && message.hasOwnProperty("removed")) object.removed = message.removed; if (message.score != null && message.hasOwnProperty("score")) @@ -1857,6 +1899,10 @@ $root.protos = (function() { object.inAir = message.inAir; if (message.framesInChState != null && message.hasOwnProperty("framesInChState")) object.framesInChState = message.framesInChState; + if (message.activeSkillId != null && message.hasOwnProperty("activeSkillId")) + object.activeSkillId = message.activeSkillId; + if (message.activeSkillHit != null && message.hasOwnProperty("activeSkillHit")) + object.activeSkillHit = message.activeSkillHit; if (message.name != null && message.hasOwnProperty("name")) object.name = message.name; if (message.displayName != null && message.hasOwnProperty("displayName")) @@ -3983,25 +4029,24 @@ $root.protos = (function() { * Properties of a MeleeBullet. * @memberof protos * @interface IMeleeBullet - * @property {number|null} [battleLocalId] MeleeBullet battleLocalId - * @property {number|null} [startupFrames] MeleeBullet startupFrames - * @property {number|null} [activeFrames] MeleeBullet activeFrames - * @property {number|null} [recoveryFrames] MeleeBullet recoveryFrames - * @property {number|null} [recoveryFramesOnBlock] MeleeBullet recoveryFramesOnBlock - * @property {number|null} [recoveryFramesOnHit] MeleeBullet recoveryFramesOnHit - * @property {number|null} [hitboxOffset] MeleeBullet hitboxOffset * @property {number|null} [originatedRenderFrameId] MeleeBullet originatedRenderFrameId + * @property {number|null} [offenderJoinIndex] MeleeBullet offenderJoinIndex + * @property {number|null} [startupFrames] MeleeBullet startupFrames + * @property {number|null} [cancellableStFrame] MeleeBullet cancellableStFrame + * @property {number|null} [cancellableEdFrame] MeleeBullet cancellableEdFrame + * @property {number|null} [activeFrames] MeleeBullet activeFrames * @property {number|null} [hitStunFrames] MeleeBullet hitStunFrames * @property {number|null} [blockStunFrames] MeleeBullet blockStunFrames - * @property {number|null} [pushback] MeleeBullet pushback - * @property {number|null} [releaseTriggerType] MeleeBullet releaseTriggerType + * @property {number|null} [pushbackVelX] MeleeBullet pushbackVelX + * @property {number|null} [pushbackVelY] MeleeBullet pushbackVelY * @property {number|null} [damage] MeleeBullet damage - * @property {number|null} [offenderJoinIndex] MeleeBullet offenderJoinIndex - * @property {number|null} [offenderPlayerId] MeleeBullet offenderPlayerId + * @property {number|null} [selfLockVelX] MeleeBullet selfLockVelX + * @property {number|null} [selfLockVelY] MeleeBullet selfLockVelY + * @property {number|null} [hitboxOffsetX] MeleeBullet hitboxOffsetX + * @property {number|null} [hitboxOffsetY] MeleeBullet hitboxOffsetY * @property {number|null} [hitboxSizeX] MeleeBullet hitboxSizeX * @property {number|null} [hitboxSizeY] MeleeBullet hitboxSizeY - * @property {number|null} [selfMoveforwardX] MeleeBullet selfMoveforwardX - * @property {number|null} [selfMoveforwardY] MeleeBullet selfMoveforwardY + * @property {boolean|null} [blowUp] MeleeBullet blowUp */ /** @@ -4020,12 +4065,20 @@ $root.protos = (function() { } /** - * MeleeBullet battleLocalId. - * @member {number} battleLocalId + * MeleeBullet originatedRenderFrameId. + * @member {number} originatedRenderFrameId * @memberof protos.MeleeBullet * @instance */ - MeleeBullet.prototype.battleLocalId = 0; + MeleeBullet.prototype.originatedRenderFrameId = 0; + + /** + * MeleeBullet offenderJoinIndex. + * @member {number} offenderJoinIndex + * @memberof protos.MeleeBullet + * @instance + */ + MeleeBullet.prototype.offenderJoinIndex = 0; /** * MeleeBullet startupFrames. @@ -4035,6 +4088,22 @@ $root.protos = (function() { */ MeleeBullet.prototype.startupFrames = 0; + /** + * MeleeBullet cancellableStFrame. + * @member {number} cancellableStFrame + * @memberof protos.MeleeBullet + * @instance + */ + MeleeBullet.prototype.cancellableStFrame = 0; + + /** + * MeleeBullet cancellableEdFrame. + * @member {number} cancellableEdFrame + * @memberof protos.MeleeBullet + * @instance + */ + MeleeBullet.prototype.cancellableEdFrame = 0; + /** * MeleeBullet activeFrames. * @member {number} activeFrames @@ -4043,46 +4112,6 @@ $root.protos = (function() { */ MeleeBullet.prototype.activeFrames = 0; - /** - * MeleeBullet recoveryFrames. - * @member {number} recoveryFrames - * @memberof protos.MeleeBullet - * @instance - */ - MeleeBullet.prototype.recoveryFrames = 0; - - /** - * MeleeBullet recoveryFramesOnBlock. - * @member {number} recoveryFramesOnBlock - * @memberof protos.MeleeBullet - * @instance - */ - MeleeBullet.prototype.recoveryFramesOnBlock = 0; - - /** - * MeleeBullet recoveryFramesOnHit. - * @member {number} recoveryFramesOnHit - * @memberof protos.MeleeBullet - * @instance - */ - MeleeBullet.prototype.recoveryFramesOnHit = 0; - - /** - * MeleeBullet hitboxOffset. - * @member {number} hitboxOffset - * @memberof protos.MeleeBullet - * @instance - */ - MeleeBullet.prototype.hitboxOffset = 0; - - /** - * MeleeBullet originatedRenderFrameId. - * @member {number} originatedRenderFrameId - * @memberof protos.MeleeBullet - * @instance - */ - MeleeBullet.prototype.originatedRenderFrameId = 0; - /** * MeleeBullet hitStunFrames. * @member {number} hitStunFrames @@ -4100,20 +4129,20 @@ $root.protos = (function() { MeleeBullet.prototype.blockStunFrames = 0; /** - * MeleeBullet pushback. - * @member {number} pushback + * MeleeBullet pushbackVelX. + * @member {number} pushbackVelX * @memberof protos.MeleeBullet * @instance */ - MeleeBullet.prototype.pushback = 0; + MeleeBullet.prototype.pushbackVelX = 0; /** - * MeleeBullet releaseTriggerType. - * @member {number} releaseTriggerType + * MeleeBullet pushbackVelY. + * @member {number} pushbackVelY * @memberof protos.MeleeBullet * @instance */ - MeleeBullet.prototype.releaseTriggerType = 0; + MeleeBullet.prototype.pushbackVelY = 0; /** * MeleeBullet damage. @@ -4124,20 +4153,36 @@ $root.protos = (function() { MeleeBullet.prototype.damage = 0; /** - * MeleeBullet offenderJoinIndex. - * @member {number} offenderJoinIndex + * MeleeBullet selfLockVelX. + * @member {number} selfLockVelX * @memberof protos.MeleeBullet * @instance */ - MeleeBullet.prototype.offenderJoinIndex = 0; + MeleeBullet.prototype.selfLockVelX = 0; /** - * MeleeBullet offenderPlayerId. - * @member {number} offenderPlayerId + * MeleeBullet selfLockVelY. + * @member {number} selfLockVelY * @memberof protos.MeleeBullet * @instance */ - MeleeBullet.prototype.offenderPlayerId = 0; + MeleeBullet.prototype.selfLockVelY = 0; + + /** + * MeleeBullet hitboxOffsetX. + * @member {number} hitboxOffsetX + * @memberof protos.MeleeBullet + * @instance + */ + MeleeBullet.prototype.hitboxOffsetX = 0; + + /** + * MeleeBullet hitboxOffsetY. + * @member {number} hitboxOffsetY + * @memberof protos.MeleeBullet + * @instance + */ + MeleeBullet.prototype.hitboxOffsetY = 0; /** * MeleeBullet hitboxSizeX. @@ -4156,20 +4201,12 @@ $root.protos = (function() { MeleeBullet.prototype.hitboxSizeY = 0; /** - * MeleeBullet selfMoveforwardX. - * @member {number} selfMoveforwardX + * MeleeBullet blowUp. + * @member {boolean} blowUp * @memberof protos.MeleeBullet * @instance */ - MeleeBullet.prototype.selfMoveforwardX = 0; - - /** - * MeleeBullet selfMoveforwardY. - * @member {number} selfMoveforwardY - * @memberof protos.MeleeBullet - * @instance - */ - MeleeBullet.prototype.selfMoveforwardY = 0; + MeleeBullet.prototype.blowUp = false; /** * Creates a new MeleeBullet instance using the specified properties. @@ -4195,44 +4232,42 @@ $root.protos = (function() { MeleeBullet.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); - if (message.battleLocalId != null && Object.hasOwnProperty.call(message, "battleLocalId")) - writer.uint32(/* id 1, wireType 0 =*/8).int32(message.battleLocalId); - if (message.startupFrames != null && Object.hasOwnProperty.call(message, "startupFrames")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.startupFrames); - if (message.activeFrames != null && Object.hasOwnProperty.call(message, "activeFrames")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.activeFrames); - if (message.recoveryFrames != null && Object.hasOwnProperty.call(message, "recoveryFrames")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.recoveryFrames); - if (message.recoveryFramesOnBlock != null && Object.hasOwnProperty.call(message, "recoveryFramesOnBlock")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.recoveryFramesOnBlock); - if (message.recoveryFramesOnHit != null && Object.hasOwnProperty.call(message, "recoveryFramesOnHit")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.recoveryFramesOnHit); - if (message.hitboxOffset != null && Object.hasOwnProperty.call(message, "hitboxOffset")) - writer.uint32(/* id 7, wireType 1 =*/57).double(message.hitboxOffset); if (message.originatedRenderFrameId != null && Object.hasOwnProperty.call(message, "originatedRenderFrameId")) - writer.uint32(/* id 8, wireType 0 =*/64).int32(message.originatedRenderFrameId); - if (message.hitStunFrames != null && Object.hasOwnProperty.call(message, "hitStunFrames")) - writer.uint32(/* id 9, wireType 0 =*/72).int32(message.hitStunFrames); - if (message.blockStunFrames != null && Object.hasOwnProperty.call(message, "blockStunFrames")) - writer.uint32(/* id 10, wireType 0 =*/80).int32(message.blockStunFrames); - if (message.pushback != null && Object.hasOwnProperty.call(message, "pushback")) - writer.uint32(/* id 11, wireType 1 =*/89).double(message.pushback); - if (message.releaseTriggerType != null && Object.hasOwnProperty.call(message, "releaseTriggerType")) - writer.uint32(/* id 12, wireType 0 =*/96).int32(message.releaseTriggerType); - if (message.damage != null && Object.hasOwnProperty.call(message, "damage")) - writer.uint32(/* id 13, wireType 0 =*/104).int32(message.damage); + writer.uint32(/* id 1, wireType 0 =*/8).int32(message.originatedRenderFrameId); if (message.offenderJoinIndex != null && Object.hasOwnProperty.call(message, "offenderJoinIndex")) - writer.uint32(/* id 14, wireType 0 =*/112).int32(message.offenderJoinIndex); - if (message.offenderPlayerId != null && Object.hasOwnProperty.call(message, "offenderPlayerId")) - writer.uint32(/* id 15, wireType 0 =*/120).int32(message.offenderPlayerId); + 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 1 =*/129).double(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 1 =*/137).double(message.hitboxSizeY); - if (message.selfMoveforwardX != null && Object.hasOwnProperty.call(message, "selfMoveforwardX")) - writer.uint32(/* id 18, wireType 1 =*/145).double(message.selfMoveforwardX); - if (message.selfMoveforwardY != null && Object.hasOwnProperty.call(message, "selfMoveforwardY")) - writer.uint32(/* id 19, wireType 1 =*/153).double(message.selfMoveforwardY); + 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); return writer; }; @@ -4268,79 +4303,75 @@ $root.protos = (function() { var tag = reader.uint32(); switch (tag >>> 3) { case 1: { - message.battleLocalId = reader.int32(); - break; - } - case 2: { - message.startupFrames = reader.int32(); - break; - } - case 3: { - message.activeFrames = reader.int32(); - break; - } - case 4: { - message.recoveryFrames = reader.int32(); - break; - } - case 5: { - message.recoveryFramesOnBlock = reader.int32(); - break; - } - case 6: { - message.recoveryFramesOnHit = reader.int32(); - break; - } - case 7: { - message.hitboxOffset = reader.double(); - break; - } - case 8: { message.originatedRenderFrameId = reader.int32(); break; } - case 9: { - message.hitStunFrames = reader.int32(); - break; - } - case 10: { - message.blockStunFrames = reader.int32(); - break; - } - case 11: { - message.pushback = reader.double(); - break; - } - case 12: { - message.releaseTriggerType = reader.int32(); - break; - } - case 13: { - message.damage = reader.int32(); - break; - } - case 14: { + 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.offenderPlayerId = reader.int32(); + message.hitboxOffsetY = reader.int32(); break; } case 16: { - message.hitboxSizeX = reader.double(); + message.hitboxSizeX = reader.int32(); break; } case 17: { - message.hitboxSizeY = reader.double(); + message.hitboxSizeY = reader.int32(); break; } case 18: { - message.selfMoveforwardX = reader.double(); - break; - } - case 19: { - message.selfMoveforwardY = reader.double(); + message.blowUp = reader.bool(); break; } default: @@ -4378,63 +4409,60 @@ $root.protos = (function() { MeleeBullet.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; - if (message.battleLocalId != null && message.hasOwnProperty("battleLocalId")) - if (!$util.isInteger(message.battleLocalId)) - return "battleLocalId: integer expected"; - if (message.startupFrames != null && message.hasOwnProperty("startupFrames")) - if (!$util.isInteger(message.startupFrames)) - return "startupFrames: integer expected"; - if (message.activeFrames != null && message.hasOwnProperty("activeFrames")) - if (!$util.isInteger(message.activeFrames)) - return "activeFrames: integer expected"; - if (message.recoveryFrames != null && message.hasOwnProperty("recoveryFrames")) - if (!$util.isInteger(message.recoveryFrames)) - return "recoveryFrames: integer expected"; - if (message.recoveryFramesOnBlock != null && message.hasOwnProperty("recoveryFramesOnBlock")) - if (!$util.isInteger(message.recoveryFramesOnBlock)) - return "recoveryFramesOnBlock: integer expected"; - if (message.recoveryFramesOnHit != null && message.hasOwnProperty("recoveryFramesOnHit")) - if (!$util.isInteger(message.recoveryFramesOnHit)) - return "recoveryFramesOnHit: integer expected"; - if (message.hitboxOffset != null && message.hasOwnProperty("hitboxOffset")) - if (typeof message.hitboxOffset !== "number") - return "hitboxOffset: number 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.pushback != null && message.hasOwnProperty("pushback")) - if (typeof message.pushback !== "number") - return "pushback: number expected"; - if (message.releaseTriggerType != null && message.hasOwnProperty("releaseTriggerType")) - if (!$util.isInteger(message.releaseTriggerType)) - return "releaseTriggerType: 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.offenderJoinIndex != null && message.hasOwnProperty("offenderJoinIndex")) - if (!$util.isInteger(message.offenderJoinIndex)) - return "offenderJoinIndex: integer expected"; - if (message.offenderPlayerId != null && message.hasOwnProperty("offenderPlayerId")) - if (!$util.isInteger(message.offenderPlayerId)) - return "offenderPlayerId: 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 (typeof message.hitboxSizeX !== "number") - return "hitboxSizeX: number expected"; + if (!$util.isInteger(message.hitboxSizeX)) + return "hitboxSizeX: integer expected"; if (message.hitboxSizeY != null && message.hasOwnProperty("hitboxSizeY")) - if (typeof message.hitboxSizeY !== "number") - return "hitboxSizeY: number expected"; - if (message.selfMoveforwardX != null && message.hasOwnProperty("selfMoveforwardX")) - if (typeof message.selfMoveforwardX !== "number") - return "selfMoveforwardX: number expected"; - if (message.selfMoveforwardY != null && message.hasOwnProperty("selfMoveforwardY")) - if (typeof message.selfMoveforwardY !== "number") - return "selfMoveforwardY: number expected"; + 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"; return null; }; @@ -4450,44 +4478,42 @@ $root.protos = (function() { if (object instanceof $root.protos.MeleeBullet) return object; var message = new $root.protos.MeleeBullet(); - if (object.battleLocalId != null) - message.battleLocalId = object.battleLocalId | 0; - if (object.startupFrames != null) - message.startupFrames = object.startupFrames | 0; - if (object.activeFrames != null) - message.activeFrames = object.activeFrames | 0; - if (object.recoveryFrames != null) - message.recoveryFrames = object.recoveryFrames | 0; - if (object.recoveryFramesOnBlock != null) - message.recoveryFramesOnBlock = object.recoveryFramesOnBlock | 0; - if (object.recoveryFramesOnHit != null) - message.recoveryFramesOnHit = object.recoveryFramesOnHit | 0; - if (object.hitboxOffset != null) - message.hitboxOffset = Number(object.hitboxOffset); 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.pushback != null) - message.pushback = Number(object.pushback); - if (object.releaseTriggerType != null) - message.releaseTriggerType = object.releaseTriggerType | 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.offenderJoinIndex != null) - message.offenderJoinIndex = object.offenderJoinIndex | 0; - if (object.offenderPlayerId != null) - message.offenderPlayerId = object.offenderPlayerId | 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 = Number(object.hitboxSizeX); + message.hitboxSizeX = object.hitboxSizeX | 0; if (object.hitboxSizeY != null) - message.hitboxSizeY = Number(object.hitboxSizeY); - if (object.selfMoveforwardX != null) - message.selfMoveforwardX = Number(object.selfMoveforwardX); - if (object.selfMoveforwardY != null) - message.selfMoveforwardY = Number(object.selfMoveforwardY); + message.hitboxSizeY = object.hitboxSizeY | 0; + if (object.blowUp != null) + message.blowUp = Boolean(object.blowUp); return message; }; @@ -4505,64 +4531,61 @@ $root.protos = (function() { options = {}; var object = {}; if (options.defaults) { - object.battleLocalId = 0; - object.startupFrames = 0; - object.activeFrames = 0; - object.recoveryFrames = 0; - object.recoveryFramesOnBlock = 0; - object.recoveryFramesOnHit = 0; - object.hitboxOffset = 0; 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.pushback = 0; - object.releaseTriggerType = 0; + object.pushbackVelX = 0; + object.pushbackVelY = 0; object.damage = 0; - object.offenderJoinIndex = 0; - object.offenderPlayerId = 0; + object.selfLockVelX = 0; + object.selfLockVelY = 0; + object.hitboxOffsetX = 0; + object.hitboxOffsetY = 0; object.hitboxSizeX = 0; object.hitboxSizeY = 0; - object.selfMoveforwardX = 0; - object.selfMoveforwardY = 0; + object.blowUp = false; } - if (message.battleLocalId != null && message.hasOwnProperty("battleLocalId")) - object.battleLocalId = message.battleLocalId; - if (message.startupFrames != null && message.hasOwnProperty("startupFrames")) - object.startupFrames = message.startupFrames; - if (message.activeFrames != null && message.hasOwnProperty("activeFrames")) - object.activeFrames = message.activeFrames; - if (message.recoveryFrames != null && message.hasOwnProperty("recoveryFrames")) - object.recoveryFrames = message.recoveryFrames; - if (message.recoveryFramesOnBlock != null && message.hasOwnProperty("recoveryFramesOnBlock")) - object.recoveryFramesOnBlock = message.recoveryFramesOnBlock; - if (message.recoveryFramesOnHit != null && message.hasOwnProperty("recoveryFramesOnHit")) - object.recoveryFramesOnHit = message.recoveryFramesOnHit; - if (message.hitboxOffset != null && message.hasOwnProperty("hitboxOffset")) - object.hitboxOffset = options.json && !isFinite(message.hitboxOffset) ? String(message.hitboxOffset) : message.hitboxOffset; 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.pushback != null && message.hasOwnProperty("pushback")) - object.pushback = options.json && !isFinite(message.pushback) ? String(message.pushback) : message.pushback; - if (message.releaseTriggerType != null && message.hasOwnProperty("releaseTriggerType")) - object.releaseTriggerType = message.releaseTriggerType; + 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.offenderJoinIndex != null && message.hasOwnProperty("offenderJoinIndex")) - object.offenderJoinIndex = message.offenderJoinIndex; - if (message.offenderPlayerId != null && message.hasOwnProperty("offenderPlayerId")) - object.offenderPlayerId = message.offenderPlayerId; + 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 = options.json && !isFinite(message.hitboxSizeX) ? String(message.hitboxSizeX) : message.hitboxSizeX; + object.hitboxSizeX = message.hitboxSizeX; if (message.hitboxSizeY != null && message.hasOwnProperty("hitboxSizeY")) - object.hitboxSizeY = options.json && !isFinite(message.hitboxSizeY) ? String(message.hitboxSizeY) : message.hitboxSizeY; - if (message.selfMoveforwardX != null && message.hasOwnProperty("selfMoveforwardX")) - object.selfMoveforwardX = options.json && !isFinite(message.selfMoveforwardX) ? String(message.selfMoveforwardX) : message.selfMoveforwardX; - if (message.selfMoveforwardY != null && message.hasOwnProperty("selfMoveforwardY")) - object.selfMoveforwardY = options.json && !isFinite(message.selfMoveforwardY) ? String(message.selfMoveforwardY) : message.selfMoveforwardY; + object.hitboxSizeY = message.hitboxSizeY; + if (message.blowUp != null && message.hasOwnProperty("blowUp")) + object.blowUp = message.blowUp; return object; }; @@ -4602,33 +4625,17 @@ $root.protos = (function() { * @memberof protos * @interface IBattleColliderInfo * @property {string|null} [stageName] BattleColliderInfo stageName - * @property {number|null} [stageDiscreteW] BattleColliderInfo stageDiscreteW - * @property {number|null} [stageDiscreteH] BattleColliderInfo stageDiscreteH - * @property {number|null} [stageTileW] BattleColliderInfo stageTileW - * @property {number|null} [stageTileH] BattleColliderInfo stageTileH * @property {number|null} [intervalToPing] BattleColliderInfo intervalToPing * @property {number|null} [willKickIfInactiveFor] BattleColliderInfo willKickIfInactiveFor * @property {number|null} [boundRoomId] BattleColliderInfo boundRoomId - * @property {number|null} [battleDurationFrames] BattleColliderInfo battleDurationFrames * @property {number|Long|null} [battleDurationNanos] BattleColliderInfo battleDurationNanos - * @property {number|null} [serverFps] BattleColliderInfo serverFps - * @property {number|null} [inputDelayFrames] BattleColliderInfo inputDelayFrames - * @property {number|null} [inputScaleFrames] BattleColliderInfo inputScaleFrames - * @property {number|null} [nstDelayFrames] BattleColliderInfo nstDelayFrames * @property {number|null} [inputFrameUpsyncDelayTolerance] BattleColliderInfo inputFrameUpsyncDelayTolerance * @property {number|null} [maxChasingRenderFramesPerUpdate] BattleColliderInfo maxChasingRenderFramesPerUpdate - * @property {number|null} [playerBattleState] BattleColliderInfo playerBattleState * @property {number|null} [rollbackEstimatedDtMillis] BattleColliderInfo rollbackEstimatedDtMillis * @property {number|Long|null} [rollbackEstimatedDtNanos] BattleColliderInfo rollbackEstimatedDtNanos - * @property {number|null} [worldToVirtualGridRatio] BattleColliderInfo worldToVirtualGridRatio - * @property {number|null} [virtualGridToWorldRatio] BattleColliderInfo virtualGridToWorldRatio - * @property {number|null} [spAtkLookupFrames] BattleColliderInfo spAtkLookupFrames * @property {number|null} [renderCacheSize] BattleColliderInfo renderCacheSize - * @property {number|null} [snapIntoPlatformOverlap] BattleColliderInfo snapIntoPlatformOverlap - * @property {number|null} [snapIntoPlatformThreshold] BattleColliderInfo snapIntoPlatformThreshold - * @property {number|null} [jumpingInitVelY] BattleColliderInfo jumpingInitVelY - * @property {number|null} [gravityX] BattleColliderInfo gravityX - * @property {number|null} [gravityY] BattleColliderInfo gravityY + * @property {number|null} [spaceOffsetX] BattleColliderInfo spaceOffsetX + * @property {number|null} [spaceOffsetY] BattleColliderInfo spaceOffsetY * @property {number|null} [collisionMinStep] BattleColliderInfo collisionMinStep * @property {boolean|null} [frameDataLoggingEnabled] BattleColliderInfo frameDataLoggingEnabled */ @@ -4656,38 +4663,6 @@ $root.protos = (function() { */ BattleColliderInfo.prototype.stageName = ""; - /** - * BattleColliderInfo stageDiscreteW. - * @member {number} stageDiscreteW - * @memberof protos.BattleColliderInfo - * @instance - */ - BattleColliderInfo.prototype.stageDiscreteW = 0; - - /** - * BattleColliderInfo stageDiscreteH. - * @member {number} stageDiscreteH - * @memberof protos.BattleColliderInfo - * @instance - */ - BattleColliderInfo.prototype.stageDiscreteH = 0; - - /** - * BattleColliderInfo stageTileW. - * @member {number} stageTileW - * @memberof protos.BattleColliderInfo - * @instance - */ - BattleColliderInfo.prototype.stageTileW = 0; - - /** - * BattleColliderInfo stageTileH. - * @member {number} stageTileH - * @memberof protos.BattleColliderInfo - * @instance - */ - BattleColliderInfo.prototype.stageTileH = 0; - /** * BattleColliderInfo intervalToPing. * @member {number} intervalToPing @@ -4712,14 +4687,6 @@ $root.protos = (function() { */ BattleColliderInfo.prototype.boundRoomId = 0; - /** - * BattleColliderInfo battleDurationFrames. - * @member {number} battleDurationFrames - * @memberof protos.BattleColliderInfo - * @instance - */ - BattleColliderInfo.prototype.battleDurationFrames = 0; - /** * BattleColliderInfo battleDurationNanos. * @member {number|Long} battleDurationNanos @@ -4728,38 +4695,6 @@ $root.protos = (function() { */ BattleColliderInfo.prototype.battleDurationNanos = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - /** - * BattleColliderInfo serverFps. - * @member {number} serverFps - * @memberof protos.BattleColliderInfo - * @instance - */ - BattleColliderInfo.prototype.serverFps = 0; - - /** - * BattleColliderInfo inputDelayFrames. - * @member {number} inputDelayFrames - * @memberof protos.BattleColliderInfo - * @instance - */ - BattleColliderInfo.prototype.inputDelayFrames = 0; - - /** - * BattleColliderInfo inputScaleFrames. - * @member {number} inputScaleFrames - * @memberof protos.BattleColliderInfo - * @instance - */ - BattleColliderInfo.prototype.inputScaleFrames = 0; - - /** - * BattleColliderInfo nstDelayFrames. - * @member {number} nstDelayFrames - * @memberof protos.BattleColliderInfo - * @instance - */ - BattleColliderInfo.prototype.nstDelayFrames = 0; - /** * BattleColliderInfo inputFrameUpsyncDelayTolerance. * @member {number} inputFrameUpsyncDelayTolerance @@ -4776,14 +4711,6 @@ $root.protos = (function() { */ BattleColliderInfo.prototype.maxChasingRenderFramesPerUpdate = 0; - /** - * BattleColliderInfo playerBattleState. - * @member {number} playerBattleState - * @memberof protos.BattleColliderInfo - * @instance - */ - BattleColliderInfo.prototype.playerBattleState = 0; - /** * BattleColliderInfo rollbackEstimatedDtMillis. * @member {number} rollbackEstimatedDtMillis @@ -4800,30 +4727,6 @@ $root.protos = (function() { */ BattleColliderInfo.prototype.rollbackEstimatedDtNanos = $util.Long ? $util.Long.fromBits(0,0,false) : 0; - /** - * BattleColliderInfo worldToVirtualGridRatio. - * @member {number} worldToVirtualGridRatio - * @memberof protos.BattleColliderInfo - * @instance - */ - BattleColliderInfo.prototype.worldToVirtualGridRatio = 0; - - /** - * BattleColliderInfo virtualGridToWorldRatio. - * @member {number} virtualGridToWorldRatio - * @memberof protos.BattleColliderInfo - * @instance - */ - BattleColliderInfo.prototype.virtualGridToWorldRatio = 0; - - /** - * BattleColliderInfo spAtkLookupFrames. - * @member {number} spAtkLookupFrames - * @memberof protos.BattleColliderInfo - * @instance - */ - BattleColliderInfo.prototype.spAtkLookupFrames = 0; - /** * BattleColliderInfo renderCacheSize. * @member {number} renderCacheSize @@ -4833,44 +4736,20 @@ $root.protos = (function() { BattleColliderInfo.prototype.renderCacheSize = 0; /** - * BattleColliderInfo snapIntoPlatformOverlap. - * @member {number} snapIntoPlatformOverlap + * BattleColliderInfo spaceOffsetX. + * @member {number} spaceOffsetX * @memberof protos.BattleColliderInfo * @instance */ - BattleColliderInfo.prototype.snapIntoPlatformOverlap = 0; + BattleColliderInfo.prototype.spaceOffsetX = 0; /** - * BattleColliderInfo snapIntoPlatformThreshold. - * @member {number} snapIntoPlatformThreshold + * BattleColliderInfo spaceOffsetY. + * @member {number} spaceOffsetY * @memberof protos.BattleColliderInfo * @instance */ - BattleColliderInfo.prototype.snapIntoPlatformThreshold = 0; - - /** - * BattleColliderInfo jumpingInitVelY. - * @member {number} jumpingInitVelY - * @memberof protos.BattleColliderInfo - * @instance - */ - BattleColliderInfo.prototype.jumpingInitVelY = 0; - - /** - * BattleColliderInfo gravityX. - * @member {number} gravityX - * @memberof protos.BattleColliderInfo - * @instance - */ - BattleColliderInfo.prototype.gravityX = 0; - - /** - * BattleColliderInfo gravityY. - * @member {number} gravityY - * @memberof protos.BattleColliderInfo - * @instance - */ - BattleColliderInfo.prototype.gravityY = 0; + BattleColliderInfo.prototype.spaceOffsetY = 0; /** * BattleColliderInfo collisionMinStep. @@ -4914,62 +4793,30 @@ $root.protos = (function() { writer = $Writer.create(); if (message.stageName != null && Object.hasOwnProperty.call(message, "stageName")) writer.uint32(/* id 1, wireType 2 =*/10).string(message.stageName); - if (message.stageDiscreteW != null && Object.hasOwnProperty.call(message, "stageDiscreteW")) - writer.uint32(/* id 2, wireType 0 =*/16).int32(message.stageDiscreteW); - if (message.stageDiscreteH != null && Object.hasOwnProperty.call(message, "stageDiscreteH")) - writer.uint32(/* id 3, wireType 0 =*/24).int32(message.stageDiscreteH); - if (message.stageTileW != null && Object.hasOwnProperty.call(message, "stageTileW")) - writer.uint32(/* id 4, wireType 0 =*/32).int32(message.stageTileW); - if (message.stageTileH != null && Object.hasOwnProperty.call(message, "stageTileH")) - writer.uint32(/* id 5, wireType 0 =*/40).int32(message.stageTileH); if (message.intervalToPing != null && Object.hasOwnProperty.call(message, "intervalToPing")) - writer.uint32(/* id 6, wireType 0 =*/48).int32(message.intervalToPing); + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.intervalToPing); if (message.willKickIfInactiveFor != null && Object.hasOwnProperty.call(message, "willKickIfInactiveFor")) - writer.uint32(/* id 7, wireType 0 =*/56).int32(message.willKickIfInactiveFor); + writer.uint32(/* id 3, wireType 0 =*/24).int32(message.willKickIfInactiveFor); if (message.boundRoomId != null && Object.hasOwnProperty.call(message, "boundRoomId")) - writer.uint32(/* id 8, wireType 0 =*/64).int32(message.boundRoomId); - if (message.battleDurationFrames != null && Object.hasOwnProperty.call(message, "battleDurationFrames")) - writer.uint32(/* id 9, wireType 0 =*/72).int32(message.battleDurationFrames); + writer.uint32(/* id 4, wireType 0 =*/32).int32(message.boundRoomId); if (message.battleDurationNanos != null && Object.hasOwnProperty.call(message, "battleDurationNanos")) - writer.uint32(/* id 10, wireType 0 =*/80).int64(message.battleDurationNanos); - if (message.serverFps != null && Object.hasOwnProperty.call(message, "serverFps")) - writer.uint32(/* id 11, wireType 0 =*/88).int32(message.serverFps); - if (message.inputDelayFrames != null && Object.hasOwnProperty.call(message, "inputDelayFrames")) - writer.uint32(/* id 12, wireType 0 =*/96).int32(message.inputDelayFrames); - if (message.inputScaleFrames != null && Object.hasOwnProperty.call(message, "inputScaleFrames")) - writer.uint32(/* id 13, wireType 0 =*/104).uint32(message.inputScaleFrames); - if (message.nstDelayFrames != null && Object.hasOwnProperty.call(message, "nstDelayFrames")) - writer.uint32(/* id 14, wireType 0 =*/112).int32(message.nstDelayFrames); + writer.uint32(/* id 5, wireType 0 =*/40).int64(message.battleDurationNanos); if (message.inputFrameUpsyncDelayTolerance != null && Object.hasOwnProperty.call(message, "inputFrameUpsyncDelayTolerance")) - writer.uint32(/* id 15, wireType 0 =*/120).int32(message.inputFrameUpsyncDelayTolerance); + writer.uint32(/* id 6, wireType 0 =*/48).int32(message.inputFrameUpsyncDelayTolerance); if (message.maxChasingRenderFramesPerUpdate != null && Object.hasOwnProperty.call(message, "maxChasingRenderFramesPerUpdate")) - writer.uint32(/* id 16, wireType 0 =*/128).int32(message.maxChasingRenderFramesPerUpdate); - if (message.playerBattleState != null && Object.hasOwnProperty.call(message, "playerBattleState")) - writer.uint32(/* id 17, wireType 0 =*/136).int32(message.playerBattleState); + writer.uint32(/* id 7, wireType 0 =*/56).int32(message.maxChasingRenderFramesPerUpdate); if (message.rollbackEstimatedDtMillis != null && Object.hasOwnProperty.call(message, "rollbackEstimatedDtMillis")) - writer.uint32(/* id 18, wireType 1 =*/145).double(message.rollbackEstimatedDtMillis); + writer.uint32(/* id 8, wireType 1 =*/65).double(message.rollbackEstimatedDtMillis); if (message.rollbackEstimatedDtNanos != null && Object.hasOwnProperty.call(message, "rollbackEstimatedDtNanos")) - writer.uint32(/* id 19, wireType 0 =*/152).int64(message.rollbackEstimatedDtNanos); - if (message.worldToVirtualGridRatio != null && Object.hasOwnProperty.call(message, "worldToVirtualGridRatio")) - writer.uint32(/* id 20, wireType 1 =*/161).double(message.worldToVirtualGridRatio); - if (message.virtualGridToWorldRatio != null && Object.hasOwnProperty.call(message, "virtualGridToWorldRatio")) - writer.uint32(/* id 21, wireType 1 =*/169).double(message.virtualGridToWorldRatio); - if (message.spAtkLookupFrames != null && Object.hasOwnProperty.call(message, "spAtkLookupFrames")) - writer.uint32(/* id 22, wireType 0 =*/176).int32(message.spAtkLookupFrames); + writer.uint32(/* id 9, wireType 0 =*/72).int64(message.rollbackEstimatedDtNanos); if (message.renderCacheSize != null && Object.hasOwnProperty.call(message, "renderCacheSize")) - writer.uint32(/* id 23, wireType 0 =*/184).int32(message.renderCacheSize); - if (message.snapIntoPlatformOverlap != null && Object.hasOwnProperty.call(message, "snapIntoPlatformOverlap")) - writer.uint32(/* id 24, wireType 1 =*/193).double(message.snapIntoPlatformOverlap); - if (message.snapIntoPlatformThreshold != null && Object.hasOwnProperty.call(message, "snapIntoPlatformThreshold")) - writer.uint32(/* id 25, wireType 1 =*/201).double(message.snapIntoPlatformThreshold); - if (message.jumpingInitVelY != null && Object.hasOwnProperty.call(message, "jumpingInitVelY")) - writer.uint32(/* id 26, wireType 0 =*/208).int32(message.jumpingInitVelY); - if (message.gravityX != null && Object.hasOwnProperty.call(message, "gravityX")) - writer.uint32(/* id 27, wireType 0 =*/216).int32(message.gravityX); - if (message.gravityY != null && Object.hasOwnProperty.call(message, "gravityY")) - writer.uint32(/* id 28, wireType 0 =*/224).int32(message.gravityY); + writer.uint32(/* id 10, wireType 0 =*/80).int32(message.renderCacheSize); + if (message.spaceOffsetX != null && Object.hasOwnProperty.call(message, "spaceOffsetX")) + writer.uint32(/* id 11, wireType 1 =*/89).double(message.spaceOffsetX); + if (message.spaceOffsetY != null && Object.hasOwnProperty.call(message, "spaceOffsetY")) + writer.uint32(/* id 12, wireType 1 =*/97).double(message.spaceOffsetY); if (message.collisionMinStep != null && Object.hasOwnProperty.call(message, "collisionMinStep")) - writer.uint32(/* id 29, wireType 0 =*/232).int32(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); return writer; @@ -5011,114 +4858,50 @@ $root.protos = (function() { break; } case 2: { - message.stageDiscreteW = reader.int32(); - break; - } - case 3: { - message.stageDiscreteH = reader.int32(); - break; - } - case 4: { - message.stageTileW = reader.int32(); - break; - } - case 5: { - message.stageTileH = reader.int32(); - break; - } - case 6: { message.intervalToPing = reader.int32(); break; } - case 7: { + case 3: { message.willKickIfInactiveFor = reader.int32(); break; } - case 8: { + case 4: { message.boundRoomId = reader.int32(); break; } - case 9: { - message.battleDurationFrames = reader.int32(); - break; - } - case 10: { + case 5: { message.battleDurationNanos = reader.int64(); break; } - case 11: { - message.serverFps = reader.int32(); - break; - } - case 12: { - message.inputDelayFrames = reader.int32(); - break; - } - case 13: { - message.inputScaleFrames = reader.uint32(); - break; - } - case 14: { - message.nstDelayFrames = reader.int32(); - break; - } - case 15: { + case 6: { message.inputFrameUpsyncDelayTolerance = reader.int32(); break; } - case 16: { + case 7: { message.maxChasingRenderFramesPerUpdate = reader.int32(); break; } - case 17: { - message.playerBattleState = reader.int32(); - break; - } - case 18: { + case 8: { message.rollbackEstimatedDtMillis = reader.double(); break; } - case 19: { + case 9: { message.rollbackEstimatedDtNanos = reader.int64(); break; } - case 20: { - message.worldToVirtualGridRatio = reader.double(); - break; - } - case 21: { - message.virtualGridToWorldRatio = reader.double(); - break; - } - case 22: { - message.spAtkLookupFrames = reader.int32(); - break; - } - case 23: { + case 10: { message.renderCacheSize = reader.int32(); break; } - case 24: { - message.snapIntoPlatformOverlap = reader.double(); + case 11: { + message.spaceOffsetX = reader.double(); break; } - case 25: { - message.snapIntoPlatformThreshold = reader.double(); + case 12: { + message.spaceOffsetY = reader.double(); break; } - case 26: { - message.jumpingInitVelY = reader.int32(); - break; - } - case 27: { - message.gravityX = reader.int32(); - break; - } - case 28: { - message.gravityY = reader.int32(); - break; - } - case 29: { + case 13: { message.collisionMinStep = reader.int32(); break; } @@ -5164,18 +4947,6 @@ $root.protos = (function() { if (message.stageName != null && message.hasOwnProperty("stageName")) if (!$util.isString(message.stageName)) return "stageName: string expected"; - if (message.stageDiscreteW != null && message.hasOwnProperty("stageDiscreteW")) - if (!$util.isInteger(message.stageDiscreteW)) - return "stageDiscreteW: integer expected"; - if (message.stageDiscreteH != null && message.hasOwnProperty("stageDiscreteH")) - if (!$util.isInteger(message.stageDiscreteH)) - return "stageDiscreteH: integer expected"; - if (message.stageTileW != null && message.hasOwnProperty("stageTileW")) - if (!$util.isInteger(message.stageTileW)) - return "stageTileW: integer expected"; - if (message.stageTileH != null && message.hasOwnProperty("stageTileH")) - if (!$util.isInteger(message.stageTileH)) - return "stageTileH: integer expected"; if (message.intervalToPing != null && message.hasOwnProperty("intervalToPing")) if (!$util.isInteger(message.intervalToPing)) return "intervalToPing: integer expected"; @@ -5185,66 +4956,30 @@ $root.protos = (function() { if (message.boundRoomId != null && message.hasOwnProperty("boundRoomId")) if (!$util.isInteger(message.boundRoomId)) return "boundRoomId: integer expected"; - if (message.battleDurationFrames != null && message.hasOwnProperty("battleDurationFrames")) - if (!$util.isInteger(message.battleDurationFrames)) - return "battleDurationFrames: integer expected"; if (message.battleDurationNanos != null && message.hasOwnProperty("battleDurationNanos")) if (!$util.isInteger(message.battleDurationNanos) && !(message.battleDurationNanos && $util.isInteger(message.battleDurationNanos.low) && $util.isInteger(message.battleDurationNanos.high))) return "battleDurationNanos: integer|Long expected"; - if (message.serverFps != null && message.hasOwnProperty("serverFps")) - if (!$util.isInteger(message.serverFps)) - return "serverFps: integer expected"; - if (message.inputDelayFrames != null && message.hasOwnProperty("inputDelayFrames")) - if (!$util.isInteger(message.inputDelayFrames)) - return "inputDelayFrames: integer expected"; - if (message.inputScaleFrames != null && message.hasOwnProperty("inputScaleFrames")) - if (!$util.isInteger(message.inputScaleFrames)) - return "inputScaleFrames: integer expected"; - if (message.nstDelayFrames != null && message.hasOwnProperty("nstDelayFrames")) - if (!$util.isInteger(message.nstDelayFrames)) - return "nstDelayFrames: integer expected"; if (message.inputFrameUpsyncDelayTolerance != null && message.hasOwnProperty("inputFrameUpsyncDelayTolerance")) if (!$util.isInteger(message.inputFrameUpsyncDelayTolerance)) return "inputFrameUpsyncDelayTolerance: integer expected"; if (message.maxChasingRenderFramesPerUpdate != null && message.hasOwnProperty("maxChasingRenderFramesPerUpdate")) if (!$util.isInteger(message.maxChasingRenderFramesPerUpdate)) return "maxChasingRenderFramesPerUpdate: integer expected"; - if (message.playerBattleState != null && message.hasOwnProperty("playerBattleState")) - if (!$util.isInteger(message.playerBattleState)) - return "playerBattleState: integer expected"; if (message.rollbackEstimatedDtMillis != null && message.hasOwnProperty("rollbackEstimatedDtMillis")) if (typeof message.rollbackEstimatedDtMillis !== "number") return "rollbackEstimatedDtMillis: number expected"; if (message.rollbackEstimatedDtNanos != null && message.hasOwnProperty("rollbackEstimatedDtNanos")) if (!$util.isInteger(message.rollbackEstimatedDtNanos) && !(message.rollbackEstimatedDtNanos && $util.isInteger(message.rollbackEstimatedDtNanos.low) && $util.isInteger(message.rollbackEstimatedDtNanos.high))) return "rollbackEstimatedDtNanos: integer|Long expected"; - if (message.worldToVirtualGridRatio != null && message.hasOwnProperty("worldToVirtualGridRatio")) - if (typeof message.worldToVirtualGridRatio !== "number") - return "worldToVirtualGridRatio: number expected"; - if (message.virtualGridToWorldRatio != null && message.hasOwnProperty("virtualGridToWorldRatio")) - if (typeof message.virtualGridToWorldRatio !== "number") - return "virtualGridToWorldRatio: number expected"; - if (message.spAtkLookupFrames != null && message.hasOwnProperty("spAtkLookupFrames")) - if (!$util.isInteger(message.spAtkLookupFrames)) - return "spAtkLookupFrames: integer expected"; if (message.renderCacheSize != null && message.hasOwnProperty("renderCacheSize")) if (!$util.isInteger(message.renderCacheSize)) return "renderCacheSize: integer expected"; - if (message.snapIntoPlatformOverlap != null && message.hasOwnProperty("snapIntoPlatformOverlap")) - if (typeof message.snapIntoPlatformOverlap !== "number") - return "snapIntoPlatformOverlap: number expected"; - if (message.snapIntoPlatformThreshold != null && message.hasOwnProperty("snapIntoPlatformThreshold")) - if (typeof message.snapIntoPlatformThreshold !== "number") - return "snapIntoPlatformThreshold: number expected"; - if (message.jumpingInitVelY != null && message.hasOwnProperty("jumpingInitVelY")) - if (!$util.isInteger(message.jumpingInitVelY)) - return "jumpingInitVelY: integer expected"; - if (message.gravityX != null && message.hasOwnProperty("gravityX")) - if (!$util.isInteger(message.gravityX)) - return "gravityX: integer expected"; - if (message.gravityY != null && message.hasOwnProperty("gravityY")) - if (!$util.isInteger(message.gravityY)) - return "gravityY: integer expected"; + if (message.spaceOffsetX != null && message.hasOwnProperty("spaceOffsetX")) + if (typeof message.spaceOffsetX !== "number") + return "spaceOffsetX: number expected"; + if (message.spaceOffsetY != null && message.hasOwnProperty("spaceOffsetY")) + if (typeof message.spaceOffsetY !== "number") + return "spaceOffsetY: number expected"; if (message.collisionMinStep != null && message.hasOwnProperty("collisionMinStep")) if (!$util.isInteger(message.collisionMinStep)) return "collisionMinStep: integer expected"; @@ -5268,22 +5003,12 @@ $root.protos = (function() { var message = new $root.protos.BattleColliderInfo(); if (object.stageName != null) message.stageName = String(object.stageName); - if (object.stageDiscreteW != null) - message.stageDiscreteW = object.stageDiscreteW | 0; - if (object.stageDiscreteH != null) - message.stageDiscreteH = object.stageDiscreteH | 0; - if (object.stageTileW != null) - message.stageTileW = object.stageTileW | 0; - if (object.stageTileH != null) - message.stageTileH = object.stageTileH | 0; if (object.intervalToPing != null) message.intervalToPing = object.intervalToPing | 0; if (object.willKickIfInactiveFor != null) message.willKickIfInactiveFor = object.willKickIfInactiveFor | 0; if (object.boundRoomId != null) message.boundRoomId = object.boundRoomId | 0; - if (object.battleDurationFrames != null) - message.battleDurationFrames = object.battleDurationFrames | 0; if (object.battleDurationNanos != null) if ($util.Long) (message.battleDurationNanos = $util.Long.fromValue(object.battleDurationNanos)).unsigned = false; @@ -5293,20 +5018,10 @@ $root.protos = (function() { message.battleDurationNanos = object.battleDurationNanos; else if (typeof object.battleDurationNanos === "object") message.battleDurationNanos = new $util.LongBits(object.battleDurationNanos.low >>> 0, object.battleDurationNanos.high >>> 0).toNumber(); - if (object.serverFps != null) - message.serverFps = object.serverFps | 0; - if (object.inputDelayFrames != null) - message.inputDelayFrames = object.inputDelayFrames | 0; - if (object.inputScaleFrames != null) - message.inputScaleFrames = object.inputScaleFrames >>> 0; - if (object.nstDelayFrames != null) - message.nstDelayFrames = object.nstDelayFrames | 0; if (object.inputFrameUpsyncDelayTolerance != null) message.inputFrameUpsyncDelayTolerance = object.inputFrameUpsyncDelayTolerance | 0; if (object.maxChasingRenderFramesPerUpdate != null) message.maxChasingRenderFramesPerUpdate = object.maxChasingRenderFramesPerUpdate | 0; - if (object.playerBattleState != null) - message.playerBattleState = object.playerBattleState | 0; if (object.rollbackEstimatedDtMillis != null) message.rollbackEstimatedDtMillis = Number(object.rollbackEstimatedDtMillis); if (object.rollbackEstimatedDtNanos != null) @@ -5318,24 +5033,12 @@ $root.protos = (function() { message.rollbackEstimatedDtNanos = object.rollbackEstimatedDtNanos; else if (typeof object.rollbackEstimatedDtNanos === "object") message.rollbackEstimatedDtNanos = new $util.LongBits(object.rollbackEstimatedDtNanos.low >>> 0, object.rollbackEstimatedDtNanos.high >>> 0).toNumber(); - if (object.worldToVirtualGridRatio != null) - message.worldToVirtualGridRatio = Number(object.worldToVirtualGridRatio); - if (object.virtualGridToWorldRatio != null) - message.virtualGridToWorldRatio = Number(object.virtualGridToWorldRatio); - if (object.spAtkLookupFrames != null) - message.spAtkLookupFrames = object.spAtkLookupFrames | 0; if (object.renderCacheSize != null) message.renderCacheSize = object.renderCacheSize | 0; - if (object.snapIntoPlatformOverlap != null) - message.snapIntoPlatformOverlap = Number(object.snapIntoPlatformOverlap); - if (object.snapIntoPlatformThreshold != null) - message.snapIntoPlatformThreshold = Number(object.snapIntoPlatformThreshold); - if (object.jumpingInitVelY != null) - message.jumpingInitVelY = object.jumpingInitVelY | 0; - if (object.gravityX != null) - message.gravityX = object.gravityX | 0; - if (object.gravityY != null) - message.gravityY = object.gravityY | 0; + if (object.spaceOffsetX != null) + message.spaceOffsetX = Number(object.spaceOffsetX); + if (object.spaceOffsetY != null) + message.spaceOffsetY = Number(object.spaceOffsetY); if (object.collisionMinStep != null) message.collisionMinStep = object.collisionMinStep | 0; if (object.frameDataLoggingEnabled != null) @@ -5358,81 +5061,45 @@ $root.protos = (function() { var object = {}; if (options.defaults) { object.stageName = ""; - object.stageDiscreteW = 0; - object.stageDiscreteH = 0; - object.stageTileW = 0; - object.stageTileH = 0; object.intervalToPing = 0; object.willKickIfInactiveFor = 0; object.boundRoomId = 0; - object.battleDurationFrames = 0; if ($util.Long) { var long = new $util.Long(0, 0, false); object.battleDurationNanos = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; } else object.battleDurationNanos = options.longs === String ? "0" : 0; - object.serverFps = 0; - object.inputDelayFrames = 0; - object.inputScaleFrames = 0; - object.nstDelayFrames = 0; object.inputFrameUpsyncDelayTolerance = 0; object.maxChasingRenderFramesPerUpdate = 0; - object.playerBattleState = 0; object.rollbackEstimatedDtMillis = 0; if ($util.Long) { var long = new $util.Long(0, 0, false); object.rollbackEstimatedDtNanos = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; } else object.rollbackEstimatedDtNanos = options.longs === String ? "0" : 0; - object.worldToVirtualGridRatio = 0; - object.virtualGridToWorldRatio = 0; - object.spAtkLookupFrames = 0; object.renderCacheSize = 0; - object.snapIntoPlatformOverlap = 0; - object.snapIntoPlatformThreshold = 0; - object.jumpingInitVelY = 0; - object.gravityX = 0; - object.gravityY = 0; + object.spaceOffsetX = 0; + object.spaceOffsetY = 0; object.collisionMinStep = 0; object.frameDataLoggingEnabled = false; } if (message.stageName != null && message.hasOwnProperty("stageName")) object.stageName = message.stageName; - if (message.stageDiscreteW != null && message.hasOwnProperty("stageDiscreteW")) - object.stageDiscreteW = message.stageDiscreteW; - if (message.stageDiscreteH != null && message.hasOwnProperty("stageDiscreteH")) - object.stageDiscreteH = message.stageDiscreteH; - if (message.stageTileW != null && message.hasOwnProperty("stageTileW")) - object.stageTileW = message.stageTileW; - if (message.stageTileH != null && message.hasOwnProperty("stageTileH")) - object.stageTileH = message.stageTileH; if (message.intervalToPing != null && message.hasOwnProperty("intervalToPing")) object.intervalToPing = message.intervalToPing; if (message.willKickIfInactiveFor != null && message.hasOwnProperty("willKickIfInactiveFor")) object.willKickIfInactiveFor = message.willKickIfInactiveFor; if (message.boundRoomId != null && message.hasOwnProperty("boundRoomId")) object.boundRoomId = message.boundRoomId; - if (message.battleDurationFrames != null && message.hasOwnProperty("battleDurationFrames")) - object.battleDurationFrames = message.battleDurationFrames; if (message.battleDurationNanos != null && message.hasOwnProperty("battleDurationNanos")) if (typeof message.battleDurationNanos === "number") object.battleDurationNanos = options.longs === String ? String(message.battleDurationNanos) : message.battleDurationNanos; else object.battleDurationNanos = options.longs === String ? $util.Long.prototype.toString.call(message.battleDurationNanos) : options.longs === Number ? new $util.LongBits(message.battleDurationNanos.low >>> 0, message.battleDurationNanos.high >>> 0).toNumber() : message.battleDurationNanos; - if (message.serverFps != null && message.hasOwnProperty("serverFps")) - object.serverFps = message.serverFps; - if (message.inputDelayFrames != null && message.hasOwnProperty("inputDelayFrames")) - object.inputDelayFrames = message.inputDelayFrames; - if (message.inputScaleFrames != null && message.hasOwnProperty("inputScaleFrames")) - object.inputScaleFrames = message.inputScaleFrames; - if (message.nstDelayFrames != null && message.hasOwnProperty("nstDelayFrames")) - object.nstDelayFrames = message.nstDelayFrames; if (message.inputFrameUpsyncDelayTolerance != null && message.hasOwnProperty("inputFrameUpsyncDelayTolerance")) object.inputFrameUpsyncDelayTolerance = message.inputFrameUpsyncDelayTolerance; if (message.maxChasingRenderFramesPerUpdate != null && message.hasOwnProperty("maxChasingRenderFramesPerUpdate")) object.maxChasingRenderFramesPerUpdate = message.maxChasingRenderFramesPerUpdate; - if (message.playerBattleState != null && message.hasOwnProperty("playerBattleState")) - object.playerBattleState = message.playerBattleState; if (message.rollbackEstimatedDtMillis != null && message.hasOwnProperty("rollbackEstimatedDtMillis")) object.rollbackEstimatedDtMillis = options.json && !isFinite(message.rollbackEstimatedDtMillis) ? String(message.rollbackEstimatedDtMillis) : message.rollbackEstimatedDtMillis; if (message.rollbackEstimatedDtNanos != null && message.hasOwnProperty("rollbackEstimatedDtNanos")) @@ -5440,24 +5107,12 @@ $root.protos = (function() { object.rollbackEstimatedDtNanos = options.longs === String ? String(message.rollbackEstimatedDtNanos) : message.rollbackEstimatedDtNanos; else object.rollbackEstimatedDtNanos = options.longs === String ? $util.Long.prototype.toString.call(message.rollbackEstimatedDtNanos) : options.longs === Number ? new $util.LongBits(message.rollbackEstimatedDtNanos.low >>> 0, message.rollbackEstimatedDtNanos.high >>> 0).toNumber() : message.rollbackEstimatedDtNanos; - if (message.worldToVirtualGridRatio != null && message.hasOwnProperty("worldToVirtualGridRatio")) - object.worldToVirtualGridRatio = options.json && !isFinite(message.worldToVirtualGridRatio) ? String(message.worldToVirtualGridRatio) : message.worldToVirtualGridRatio; - if (message.virtualGridToWorldRatio != null && message.hasOwnProperty("virtualGridToWorldRatio")) - object.virtualGridToWorldRatio = options.json && !isFinite(message.virtualGridToWorldRatio) ? String(message.virtualGridToWorldRatio) : message.virtualGridToWorldRatio; - if (message.spAtkLookupFrames != null && message.hasOwnProperty("spAtkLookupFrames")) - object.spAtkLookupFrames = message.spAtkLookupFrames; if (message.renderCacheSize != null && message.hasOwnProperty("renderCacheSize")) object.renderCacheSize = message.renderCacheSize; - if (message.snapIntoPlatformOverlap != null && message.hasOwnProperty("snapIntoPlatformOverlap")) - object.snapIntoPlatformOverlap = options.json && !isFinite(message.snapIntoPlatformOverlap) ? String(message.snapIntoPlatformOverlap) : message.snapIntoPlatformOverlap; - if (message.snapIntoPlatformThreshold != null && message.hasOwnProperty("snapIntoPlatformThreshold")) - object.snapIntoPlatformThreshold = options.json && !isFinite(message.snapIntoPlatformThreshold) ? String(message.snapIntoPlatformThreshold) : message.snapIntoPlatformThreshold; - if (message.jumpingInitVelY != null && message.hasOwnProperty("jumpingInitVelY")) - object.jumpingInitVelY = message.jumpingInitVelY; - if (message.gravityX != null && message.hasOwnProperty("gravityX")) - object.gravityX = message.gravityX; - if (message.gravityY != null && message.hasOwnProperty("gravityY")) - object.gravityY = message.gravityY; + if (message.spaceOffsetX != null && message.hasOwnProperty("spaceOffsetX")) + object.spaceOffsetX = options.json && !isFinite(message.spaceOffsetX) ? String(message.spaceOffsetX) : message.spaceOffsetX; + if (message.spaceOffsetY != null && message.hasOwnProperty("spaceOffsetY")) + object.spaceOffsetY = options.json && !isFinite(message.spaceOffsetY) ? String(message.spaceOffsetY) : message.spaceOffsetY; if (message.collisionMinStep != null && message.hasOwnProperty("collisionMinStep")) object.collisionMinStep = message.collisionMinStep; if (message.frameDataLoggingEnabled != null && message.hasOwnProperty("frameDataLoggingEnabled")) @@ -5506,7 +5161,6 @@ $root.protos = (function() { * @property {Array.|null} [meleeBullets] RoomDownsyncFrame meleeBullets * @property {number|Long|null} [backendUnconfirmedMask] RoomDownsyncFrame backendUnconfirmedMask * @property {boolean|null} [shouldForceResync] RoomDownsyncFrame shouldForceResync - * @property {Object.|null} [playerOpPatternToSkillId] RoomDownsyncFrame playerOpPatternToSkillId */ /** @@ -5520,7 +5174,6 @@ $root.protos = (function() { function RoomDownsyncFrame(properties) { this.playersArr = []; this.meleeBullets = []; - this.playerOpPatternToSkillId = {}; if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) if (properties[keys[i]] != null) @@ -5575,14 +5228,6 @@ $root.protos = (function() { */ RoomDownsyncFrame.prototype.shouldForceResync = false; - /** - * RoomDownsyncFrame playerOpPatternToSkillId. - * @member {Object.} playerOpPatternToSkillId - * @memberof protos.RoomDownsyncFrame - * @instance - */ - RoomDownsyncFrame.prototype.playerOpPatternToSkillId = $util.emptyObject; - /** * Creates a new RoomDownsyncFrame instance using the specified properties. * @function create @@ -5621,9 +5266,6 @@ $root.protos = (function() { writer.uint32(/* id 5, wireType 0 =*/40).uint64(message.backendUnconfirmedMask); if (message.shouldForceResync != null && Object.hasOwnProperty.call(message, "shouldForceResync")) writer.uint32(/* id 6, wireType 0 =*/48).bool(message.shouldForceResync); - if (message.playerOpPatternToSkillId != null && Object.hasOwnProperty.call(message, "playerOpPatternToSkillId")) - for (var keys = Object.keys(message.playerOpPatternToSkillId), i = 0; i < keys.length; ++i) - writer.uint32(/* id 7, wireType 2 =*/58).fork().uint32(/* id 1, wireType 0 =*/8).int32(keys[i]).uint32(/* id 2, wireType 0 =*/16).int32(message.playerOpPatternToSkillId[keys[i]]).ldelim(); return writer; }; @@ -5654,7 +5296,7 @@ $root.protos = (function() { RoomDownsyncFrame.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.RoomDownsyncFrame(), key, value; + var end = length === undefined ? reader.len : reader.pos + length, message = new $root.protos.RoomDownsyncFrame(); while (reader.pos < end) { var tag = reader.uint32(); switch (tag >>> 3) { @@ -5686,29 +5328,6 @@ $root.protos = (function() { message.shouldForceResync = reader.bool(); break; } - case 7: { - if (message.playerOpPatternToSkillId === $util.emptyObject) - message.playerOpPatternToSkillId = {}; - var end2 = reader.uint32() + reader.pos; - key = 0; - value = 0; - while (reader.pos < end2) { - var tag2 = reader.uint32(); - switch (tag2 >>> 3) { - case 1: - key = reader.int32(); - break; - case 2: - value = reader.int32(); - break; - default: - reader.skipType(tag2 & 7); - break; - } - } - message.playerOpPatternToSkillId[key] = value; - break; - } default: reader.skipType(tag & 7); break; @@ -5774,17 +5393,6 @@ $root.protos = (function() { if (message.shouldForceResync != null && message.hasOwnProperty("shouldForceResync")) if (typeof message.shouldForceResync !== "boolean") return "shouldForceResync: boolean expected"; - if (message.playerOpPatternToSkillId != null && message.hasOwnProperty("playerOpPatternToSkillId")) { - if (!$util.isObject(message.playerOpPatternToSkillId)) - return "playerOpPatternToSkillId: object expected"; - var key = Object.keys(message.playerOpPatternToSkillId); - for (var i = 0; i < key.length; ++i) { - if (!$util.key32Re.test(key[i])) - return "playerOpPatternToSkillId: integer key{k:int32} expected"; - if (!$util.isInteger(message.playerOpPatternToSkillId[key[i]])) - return "playerOpPatternToSkillId: integer{k:int32} expected"; - } - } return null; }; @@ -5842,13 +5450,6 @@ $root.protos = (function() { message.backendUnconfirmedMask = new $util.LongBits(object.backendUnconfirmedMask.low >>> 0, object.backendUnconfirmedMask.high >>> 0).toNumber(true); if (object.shouldForceResync != null) message.shouldForceResync = Boolean(object.shouldForceResync); - if (object.playerOpPatternToSkillId) { - if (typeof object.playerOpPatternToSkillId !== "object") - throw TypeError(".protos.RoomDownsyncFrame.playerOpPatternToSkillId: object expected"); - message.playerOpPatternToSkillId = {}; - for (var keys = Object.keys(object.playerOpPatternToSkillId), i = 0; i < keys.length; ++i) - message.playerOpPatternToSkillId[keys[i]] = object.playerOpPatternToSkillId[keys[i]] | 0; - } return message; }; @@ -5869,8 +5470,6 @@ $root.protos = (function() { object.playersArr = []; object.meleeBullets = []; } - if (options.objects || options.defaults) - object.playerOpPatternToSkillId = {}; if (options.defaults) { object.id = 0; if ($util.Long) { @@ -5909,12 +5508,6 @@ $root.protos = (function() { object.backendUnconfirmedMask = options.longs === String ? $util.Long.prototype.toString.call(message.backendUnconfirmedMask) : options.longs === Number ? new $util.LongBits(message.backendUnconfirmedMask.low >>> 0, message.backendUnconfirmedMask.high >>> 0).toNumber(true) : message.backendUnconfirmedMask; if (message.shouldForceResync != null && message.hasOwnProperty("shouldForceResync")) object.shouldForceResync = message.shouldForceResync; - var keys2; - if (message.playerOpPatternToSkillId && (keys2 = Object.keys(message.playerOpPatternToSkillId)).length) { - object.playerOpPatternToSkillId = {}; - for (var j = 0; j < keys2.length; ++j) - object.playerOpPatternToSkillId[keys2[j]] = message.playerOpPatternToSkillId[keys2[j]]; - } return object; }; diff --git a/jsexport/battle/battle.go b/jsexport/battle/battle.go index cfe2148..0385853 100644 --- a/jsexport/battle/battle.go +++ b/jsexport/battle/battle.go @@ -86,11 +86,36 @@ var invinsibleSet = map[int32]bool{ var nonAttackingSet = map[int32]bool{} -func ConvertToInputFrameId(renderFrameId int32, inputDelayFrames int32, inputScaleFrames uint32) int32 { - if renderFrameId < inputDelayFrames { +func ShouldPrefabInputFrameDownsync(prevRenderFrameId int32, renderFrameId int32) (bool, int32) { + for i := prevRenderFrameId + 1; i <= renderFrameId; i++ { + if (0 <= i) && (0 == (i & ((1 << INPUT_SCALE_FRAMES) - 1))) { + return true, i + } + } + return false, -1 +} + +func ShouldGenerateInputFrameUpsync(renderFrameId int32) bool { + return ((renderFrameId & ((1 << INPUT_SCALE_FRAMES) - 1)) == 0) +} + +func ConvertToDelayedInputFrameId(renderFrameId int32) int32 { + if renderFrameId < INPUT_DELAY_FRAMES { return 0 } - return ((renderFrameId - inputDelayFrames) >> inputScaleFrames) + return ((renderFrameId - INPUT_DELAY_FRAMES) >> INPUT_SCALE_FRAMES) +} + +func ConvertToNoDelayInputFrameId(renderFrameId int32) int32 { + return (renderFrameId >> INPUT_SCALE_FRAMES) +} + +func ConvertToFirstUsedRenderFrameId(inputFrameId int32) int32 { + return ((inputFrameId << INPUT_SCALE_FRAMES) + INPUT_DELAY_FRAMES) +} + +func ConvertToLastUsedRenderFrameId(inputFrameId int32) int32 { + return ((inputFrameId << INPUT_SCALE_FRAMES) + INPUT_DELAY_FRAMES + (1 << INPUT_SCALE_FRAMES) - 1) } func decodeInput(encodedInput uint64) *InputFrameDecoded { @@ -343,10 +368,10 @@ func calcHardPushbacksNorms(joinIndex int32, playerCollider *resolv.Object, play return &ret } -func deriveOpPattern(currPlayerDownsync, thatPlayerInNextFrame *PlayerDownsync, currRenderFrame *RoomDownsyncFrame, inputsBuffer *RingBuffer, inputDelayFrames int32, inputScaleFrames uint32) (int, bool, int32, int32) { +func deriveOpPattern(currPlayerDownsync, thatPlayerInNextFrame *PlayerDownsync, currRenderFrame *RoomDownsyncFrame, inputsBuffer *RingBuffer) (int, bool, int32, int32) { // returns (patternId, jumpedOrNot, effectiveDx, effectiveDy) - delayedInputFrameId := ConvertToInputFrameId(currRenderFrame.Id, inputDelayFrames, inputScaleFrames) - delayedInputFrameIdForPrevRdf := ConvertToInputFrameId(currRenderFrame.Id-1, inputDelayFrames, inputScaleFrames) + delayedInputFrameId := ConvertToDelayedInputFrameId(currRenderFrame.Id) + delayedInputFrameIdForPrevRdf := ConvertToDelayedInputFrameId(currRenderFrame.Id-1) if 0 >= delayedInputFrameId { return PATTERN_ID_UNABLE_TO_OP, false, 0, 0 @@ -436,7 +461,7 @@ func ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(inputsBuffer *RingBuffer jumpedOrNotList[i] = false chConfig := chConfigsOrderedByJoinIndex[i] thatPlayerInNextFrame := nextRenderFramePlayers[i] - patternId, jumpedOrNot, effDx, effDy := deriveOpPattern(currPlayerDownsync, thatPlayerInNextFrame, currRenderFrame, inputsBuffer, INPUT_DELAY_FRAMES, INPUT_SCALE_FRAMES) + patternId, jumpedOrNot, effDx, effDy := deriveOpPattern(currPlayerDownsync, thatPlayerInNextFrame, currRenderFrame, inputsBuffer) if jumpedOrNot { thatPlayerInNextFrame.VelY = int32(chConfig.JumpingInitVelY) diff --git a/jsexport/main.go b/jsexport/main.go index 3cc8ceb..6286ea6 100644 --- a/jsexport/main.go +++ b/jsexport/main.go @@ -42,7 +42,7 @@ func NewBarrierJs(boundary *Polygon2D) *js.Object { }) } -func NewPlayerDownsyncJs(id, virtualGridX, virtualGridY, dirX, dirY, velX, velY, framesToRecover, framesInChState, 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, speed, battleState, characterState, joinIndex, hp, maxHp, colliderRadius int32, inAir bool) *js.Object { return js.MakeWrapper(&PlayerDownsync{ Id: id, VirtualGridX: virtualGridX, @@ -53,13 +53,15 @@ func NewPlayerDownsyncJs(id, virtualGridX, virtualGridY, dirX, dirY, velX, velY, VelY: velY, FramesToRecover: framesToRecover, FramesInChState: framesInChState, + ActiveSkillId: activeSkillId, + ActiveSkillHit: activeSkillHit, Speed: speed, BattleState: battleState, + CharacterState: characterState, JoinIndex: joinIndex, - ColliderRadius: colliderRadius, Hp: hp, MaxHp: maxHp, - CharacterState: characterState, + ColliderRadius: colliderRadius, InAir: inAir, }) } @@ -167,5 +169,10 @@ func main() { "VirtualGridToWorldPos": VirtualGridToWorldPos, "GetCharacterConfigsOrderedByJoinIndex": GetCharacterConfigsOrderedByJoinIndex, "ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs": ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs, + "ConvertToDelayedInputFrameId": ConvertToDelayedInputFrameId, + "ConvertToNoDelayInputFrameId": ConvertToNoDelayInputFrameId, + "ConvertToFirstUsedRenderFrameId": ConvertToFirstUsedRenderFrameId, + "ConvertToLastUsedRenderFrameId": ConvertToLastUsedRenderFrameId, + "ShouldGenerateInputFrameUpsync": ShouldGenerateInputFrameUpsync, }) }