diff --git a/battle_srv/models/pb_type_convert.go b/battle_srv/models/pb_type_convert.go index b7ce3f0..8049373 100644 --- a/battle_srv/models/pb_type_convert.go +++ b/battle_srv/models/pb_type_convert.go @@ -31,6 +31,8 @@ func toPbRoomDownsyncFrame(rdf *battle.RoomDownsyncFrame) *pb.RoomDownsyncFrame FramesInChState: last.FramesInChState, ActiveSkillId: last.ActiveSkillId, ActiveSkillHit: last.ActiveSkillHit, + FramesInvinsible: last.FramesInvinsible, + FramesSelfLockVel: last.FramesSelfLockVel, Speed: last.Speed, BattleState: last.BattleState, CharacterState: last.CharacterState, @@ -63,6 +65,7 @@ func toPbRoomDownsyncFrame(rdf *battle.RoomDownsyncFrame) *pb.RoomDownsyncFrame SelfLockVelX: last.SelfLockVelX, SelfLockVelY: last.SelfLockVelY, + FramesSelfLockVel: last.FramesSelfLockVel, HitboxOffsetX: last.HitboxOffsetX, HitboxOffsetY: last.HitboxOffsetY, @@ -96,6 +99,8 @@ func toPbPlayers(modelInstances map[int32]*Player, withMetaInfo bool) []*pb.Play FramesInChState: last.FramesInChState, ActiveSkillId: last.ActiveSkillId, ActiveSkillHit: last.ActiveSkillHit, + FramesInvinsible: last.FramesInvinsible, + FramesSelfLockVel: last.FramesSelfLockVel, Speed: last.Speed, BattleState: last.BattleState, CharacterState: last.CharacterState, @@ -135,6 +140,8 @@ func toJsPlayers(modelInstances map[int32]*Player) []*battle.PlayerDownsync { FramesInChState: last.FramesInChState, ActiveSkillId: last.ActiveSkillId, ActiveSkillHit: last.ActiveSkillHit, + FramesInvinsible: last.FramesInvinsible, + FramesSelfLockVel: last.FramesSelfLockVel, Speed: last.Speed, BattleState: last.BattleState, CharacterState: last.CharacterState, diff --git a/battle_srv/protos/room_downsync_frame.pb.go b/battle_srv/protos/room_downsync_frame.pb.go index a93f289..529846a 100644 --- a/battle_srv/protos/room_downsync_frame.pb.go +++ b/battle_srv/protos/room_downsync_frame.pb.go @@ -48,6 +48,8 @@ type PlayerDownsync struct { 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"` + FramesInvinsible int32 `protobuf:"varint,23,opt,name=framesInvinsible,proto3" json:"framesInvinsible,omitempty"` + FramesSelfLockVel int32 `protobuf:"varint,24,opt,name=framesSelfLockVel,proto3" json:"framesSelfLockVel,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"` @@ -239,6 +241,20 @@ func (x *PlayerDownsync) GetActiveSkillHit() int32 { return 0 } +func (x *PlayerDownsync) GetFramesInvinsible() int32 { + if x != nil { + return x.FramesInvinsible + } + return 0 +} + +func (x *PlayerDownsync) GetFramesSelfLockVel() int32 { + if x != nil { + return x.FramesSelfLockVel + } + return 0 +} + func (x *PlayerDownsync) GetName() string { if x != nil { return x.Name @@ -776,11 +792,12 @@ type MeleeBullet struct { 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"` + FramesSelfLockVel int32 `protobuf:"varint,14,opt,name=framesSelfLockVel,proto3" json:"framesSelfLockVel,omitempty"` + HitboxOffsetX int32 `protobuf:"varint,15,opt,name=hitboxOffsetX,proto3" json:"hitboxOffsetX,omitempty"` + HitboxOffsetY int32 `protobuf:"varint,16,opt,name=hitboxOffsetY,proto3" json:"hitboxOffsetY,omitempty"` + HitboxSizeX int32 `protobuf:"varint,17,opt,name=hitboxSizeX,proto3" json:"hitboxSizeX,omitempty"` + HitboxSizeY int32 `protobuf:"varint,18,opt,name=hitboxSizeY,proto3" json:"hitboxSizeY,omitempty"` + BlowUp bool `protobuf:"varint,19,opt,name=blowUp,proto3" json:"blowUp,omitempty"` } func (x *MeleeBullet) Reset() { @@ -906,6 +923,13 @@ func (x *MeleeBullet) GetSelfLockVelY() int32 { return 0 } +func (x *MeleeBullet) GetFramesSelfLockVel() int32 { + if x != nil { + return x.FramesSelfLockVel + } + return 0 +} + func (x *MeleeBullet) GetHitboxOffsetX() int32 { if x != nil { return x.HitboxOffsetX @@ -1193,7 +1217,7 @@ 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, 0xeb, 0x05, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x6f, + 0x6f, 0x74, 0x6f, 0x22, 0xc5, 0x06, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x47, 0x72, 0x69, 0x64, 0x58, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x76, 0x69, @@ -1235,199 +1259,207 @@ var file_room_downsync_frame_proto_rawDesc = []byte{ 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, + 0x12, 0x2a, 0x0a, 0x10, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x49, 0x6e, 0x76, 0x69, 0x6e, 0x73, + 0x69, 0x62, 0x6c, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x66, 0x72, 0x61, 0x6d, + 0x65, 0x73, 0x49, 0x6e, 0x76, 0x69, 0x6e, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x2c, 0x0a, 0x11, + 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x53, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, + 0x6c, 0x18, 0x18, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x53, + 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 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, 0x12, 0x4e, 0x0a, 0x15, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x55, - 0x70, 0x73, 0x79, 0x6e, 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, - 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x52, 0x15, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x12, 0x27, 0x0a, 0x02, 0x68, 0x62, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, - 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x52, 0x02, 0x68, 0x62, 0x22, 0x89, 0x02, 0x0a, 0x06, 0x57, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x03, 0x72, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x63, 0x68, 0x6f, 0x65, - 0x64, 0x4d, 0x73, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x65, 0x63, - 0x68, 0x6f, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x61, 0x63, 0x74, 0x12, 0x2b, 0x0a, 0x03, 0x72, - 0x64, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x73, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x46, 0x72, - 0x61, 0x6d, 0x65, 0x52, 0x03, 0x72, 0x64, 0x66, 0x12, 0x54, 0x0a, 0x17, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, - 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x52, 0x17, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, - 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x36, - 0x0a, 0x08, 0x62, 0x63, 0x69, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, - 0x43, 0x6f, 0x6c, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x62, 0x63, - 0x69, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x22, 0xf4, 0x01, 0x0a, 0x14, 0x49, 0x6e, 0x70, 0x75, 0x74, - 0x73, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, - 0x2a, 0x0a, 0x10, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, - 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x72, 0x65, 0x66, 0x52, 0x65, - 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x75, - 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, - 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x58, 0x0a, 0x19, 0x74, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x49, - 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, - 0x63, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x73, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, - 0x73, 0x79, 0x6e, 0x63, 0x52, 0x19, 0x74, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x49, 0x6e, 0x70, 0x75, - 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x73, 0x12, - 0x2c, 0x0a, 0x11, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x79, 0x6e, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x73, 0x68, 0x6f, 0x75, - 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x22, 0xbf, 0x05, - 0x0a, 0x0b, 0x4d, 0x65, 0x6c, 0x65, 0x65, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x38, 0x0a, - 0x17, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, - 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, - 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x6f, 0x66, 0x66, 0x65, 0x6e, - 0x64, 0x65, 0x72, 0x4a, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x11, 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4a, 0x6f, 0x69, 0x6e, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, - 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x75, 0x70, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x63, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x46, 0x72, 0x61, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, - 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x63, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x64, 0x46, 0x72, 0x61, 0x6d, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, - 0x61, 0x62, 0x6c, 0x65, 0x45, 0x64, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, - 0x24, 0x0a, 0x0d, 0x68, 0x69, 0x74, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x68, 0x69, 0x74, 0x53, 0x74, 0x75, 0x6e, 0x46, - 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x74, - 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, - 0x22, 0x0a, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, - 0x65, 0x6c, 0x58, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, - 0x65, 0x6c, 0x59, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, - 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x59, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x61, 0x6d, 0x61, 0x67, - 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x12, - 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, - 0x65, 0x6c, 0x58, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, - 0x65, 0x6c, 0x59, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, - 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x59, 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, - 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, - 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, 0x12, 0x24, 0x0a, - 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x59, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x59, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, 0x7a, - 0x65, 0x58, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, - 0x53, 0x69, 0x7a, 0x65, 0x58, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, - 0x69, 0x7a, 0x65, 0x59, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x68, 0x69, 0x74, 0x62, - 0x6f, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x59, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x77, 0x55, - 0x70, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x22, - 0xc9, 0x05, 0x0a, 0x12, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x69, 0x64, - 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x67, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x67, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, - 0x54, 0x6f, 0x50, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x54, 0x6f, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x34, 0x0a, 0x15, - 0x77, 0x69, 0x6c, 0x6c, 0x4b, 0x69, 0x63, 0x6b, 0x49, 0x66, 0x49, 0x6e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x46, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x77, 0x69, 0x6c, - 0x6c, 0x4b, 0x69, 0x63, 0x6b, 0x49, 0x66, 0x49, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, - 0x6f, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x6f, 0x6f, 0x6d, 0x49, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x6f, - 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x13, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x12, 0x46, 0x0a, 0x1e, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, - 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x54, - 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1e, - 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, - 0x44, 0x65, 0x6c, 0x61, 0x79, 0x54, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x48, - 0x0a, 0x1f, 0x6d, 0x61, 0x78, 0x43, 0x68, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x6e, 0x64, - 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x50, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1f, 0x6d, 0x61, 0x78, 0x43, 0x68, 0x61, 0x73, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x50, - 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x19, 0x72, 0x6f, 0x6c, 0x6c, - 0x62, 0x61, 0x63, 0x6b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x44, 0x74, 0x4d, - 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x19, 0x72, 0x6f, 0x6c, - 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x44, 0x74, - 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x12, 0x3a, 0x0a, 0x18, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, - 0x63, 0x6b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x44, 0x74, 0x4e, 0x61, 0x6e, - 0x6f, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, - 0x63, 0x6b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x44, 0x74, 0x4e, 0x61, 0x6e, - 0x6f, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x72, 0x65, 0x6e, - 0x64, 0x65, 0x72, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0c, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x0c, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, - 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x59, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x59, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x6c, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x4d, 0x69, 0x6e, 0x53, 0x74, 0x65, 0x70, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, + 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, 0xed, 0x05, 0x0a, 0x0b, 0x4d, 0x65, 0x6c, 0x65, + 0x65, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x17, 0x6f, 0x72, 0x69, 0x67, 0x69, + 0x6e, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, + 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, + 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4a, 0x6f, 0x69, + 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x6f, 0x66, + 0x66, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4a, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, + 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x46, + 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, + 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x45, 0x64, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x64, + 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, + 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x69, 0x74, + 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0d, 0x68, 0x69, 0x74, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, + 0x28, 0x0a, 0x0f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, + 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, + 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x75, 0x73, + 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x12, 0x22, 0x0a, + 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x59, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, + 0x59, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x6c, + 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x12, 0x22, 0x0a, + 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x59, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, + 0x59, 0x12, 0x2c, 0x0a, 0x11, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x53, 0x65, 0x6c, 0x66, 0x4c, + 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x66, 0x72, + 0x61, 0x6d, 0x65, 0x73, 0x53, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x12, + 0x24, 0x0a, 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, + 0x18, 0x0f, 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, 0x10, 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, 0x11, 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, 0x12, 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, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x06, 0x62, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x22, 0xc9, 0x05, 0x0a, 0x12, 0x42, 0x61, 0x74, 0x74, + 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, + 0x0a, 0x09, 0x73, 0x74, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x54, 0x6f, 0x50, 0x69, 0x6e, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x54, 0x6f, + 0x50, 0x69, 0x6e, 0x67, 0x12, 0x34, 0x0a, 0x15, 0x77, 0x69, 0x6c, 0x6c, 0x4b, 0x69, 0x63, 0x6b, + 0x49, 0x66, 0x49, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x6f, 0x72, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x15, 0x77, 0x69, 0x6c, 0x6c, 0x4b, 0x69, 0x63, 0x6b, 0x49, 0x66, 0x49, + 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x6f, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0b, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x13, + 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, + 0x6e, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x62, 0x61, 0x74, 0x74, 0x6c, + 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x12, 0x46, + 0x0a, 0x1e, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, + 0x6e, 0x63, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x54, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1e, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, + 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x54, 0x6f, 0x6c, + 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x48, 0x0a, 0x1f, 0x6d, 0x61, 0x78, 0x43, 0x68, 0x61, + 0x73, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, + 0x50, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x1f, 0x6d, 0x61, 0x78, 0x43, 0x68, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x6e, 0x64, 0x65, + 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x50, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x12, 0x3c, 0x0a, 0x19, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x45, 0x73, 0x74, 0x69, + 0x6d, 0x61, 0x74, 0x65, 0x64, 0x44, 0x74, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x19, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x45, 0x73, 0x74, + 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x44, 0x74, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x12, 0x3a, + 0x0a, 0x18, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, + 0x74, 0x65, 0x64, 0x44, 0x74, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x18, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, + 0x74, 0x65, 0x64, 0x44, 0x74, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, + 0x6e, 0x64, 0x65, 0x72, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0f, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x58, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x59, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x59, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x6c, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x53, 0x74, 0x65, 0x70, - 0x12, 0x39, 0x0a, 0x17, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x6f, 0x67, - 0x67, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0xe7, 0x07, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x17, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x6f, 0x67, - 0x67, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xc8, 0x02, 0x0a, 0x11, - 0x52, 0x6f, 0x6f, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x61, 0x6d, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x36, 0x0a, 0x0a, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x41, 0x72, 0x72, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x50, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x52, 0x0a, 0x70, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x41, 0x72, 0x72, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x4e, 0x61, 0x6e, 0x6f, - 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x6d, 0x65, 0x6c, 0x65, 0x65, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, - 0x2e, 0x4d, 0x65, 0x6c, 0x65, 0x65, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x0c, 0x6d, 0x65, - 0x6c, 0x65, 0x65, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x16, 0x62, 0x61, - 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x55, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, - 0x4d, 0x61, 0x73, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x62, 0x61, 0x63, 0x6b, - 0x65, 0x6e, 0x64, 0x55, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4d, 0x61, - 0x73, 0x6b, 0x12, 0x2c, 0x0a, 0x11, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x73, - 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, - 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x70, 0x65, 0x63, 0x69, 0x65, 0x73, 0x49, 0x64, 0x4c, 0x69, 0x73, - 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x70, 0x65, 0x63, 0x69, 0x65, 0x73, - 0x49, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x13, 0x5a, 0x11, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, - 0x5f, 0x73, 0x72, 0x76, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x63, 0x6f, 0x6c, 0x6c, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x4d, 0x69, 0x6e, 0x53, 0x74, 0x65, 0x70, 0x12, 0x39, 0x0a, 0x17, 0x66, 0x72, 0x61, 0x6d, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x18, 0xe7, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x66, 0x72, 0x61, 0x6d, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x22, 0xc8, 0x02, 0x0a, 0x11, 0x52, 0x6f, 0x6f, 0x6d, 0x44, 0x6f, 0x77, 0x6e, + 0x73, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x0a, 0x70, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x73, 0x41, 0x72, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x6f, 0x77, + 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x52, 0x0a, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x41, 0x72, + 0x72, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x4e, 0x61, + 0x6e, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x64, 0x6f, 0x77, 0x6e, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x6d, 0x65, 0x6c, + 0x65, 0x65, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x4d, 0x65, 0x6c, 0x65, 0x65, 0x42, 0x75, + 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x0c, 0x6d, 0x65, 0x6c, 0x65, 0x65, 0x42, 0x75, 0x6c, 0x6c, 0x65, + 0x74, 0x73, 0x12, 0x36, 0x0a, 0x16, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x55, 0x6e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x16, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x55, 0x6e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x2c, 0x0a, 0x11, 0x73, 0x68, + 0x6f, 0x75, 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x46, 0x6f, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x70, 0x65, 0x63, + 0x69, 0x65, 0x73, 0x49, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x05, 0x52, + 0x0d, 0x73, 0x70, 0x65, 0x63, 0x69, 0x65, 0x73, 0x49, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x13, + 0x5a, 0x11, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x5f, 0x73, 0x72, 0x76, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/frontend/assets/plugin_scripts/jsexport.js b/frontend/assets/plugin_scripts/jsexport.js index 2c5ffa7..6962eff 100644 --- a/frontend/assets/plugin_scripts/jsexport.js +++ b/frontend/assets/plugin_scripts/jsexport.js @@ -4747,7 +4747,7 @@ $packages["jsexport/battle"] = (function() { this.Anchor = Anchor_; this.Points = Points_; }); - PlayerDownsync = $pkg.PlayerDownsync = $newType(0, $kindStruct, "battle.PlayerDownsync", true, "jsexport/battle", true, function(Id_, VirtualGridX_, VirtualGridY_, DirX_, DirY_, VelX_, VelY_, Speed_, BattleState_, JoinIndex_, ColliderRadius_, Removed_, Score_, LastMoveGmtMillis_, FramesToRecover_, FramesInChState_, Hp_, MaxHp_, CharacterState_, InAir_, ActiveSkillId_, ActiveSkillHit_) { + PlayerDownsync = $pkg.PlayerDownsync = $newType(0, $kindStruct, "battle.PlayerDownsync", true, "jsexport/battle", true, function(Id_, VirtualGridX_, VirtualGridY_, DirX_, DirY_, VelX_, VelY_, Speed_, BattleState_, JoinIndex_, ColliderRadius_, Removed_, Score_, LastMoveGmtMillis_, FramesToRecover_, FramesInChState_, Hp_, MaxHp_, CharacterState_, InAir_, ActiveSkillId_, ActiveSkillHit_, FramesInvinsible_, FramesSelfLockVel_) { this.$val = this; if (arguments.length === 0) { this.Id = 0; @@ -4772,6 +4772,8 @@ $packages["jsexport/battle"] = (function() { this.InAir = false; this.ActiveSkillId = 0; this.ActiveSkillHit = 0; + this.FramesInvinsible = 0; + this.FramesSelfLockVel = 0; return; } this.Id = Id_; @@ -4796,6 +4798,8 @@ $packages["jsexport/battle"] = (function() { this.InAir = InAir_; this.ActiveSkillId = ActiveSkillId_; this.ActiveSkillHit = ActiveSkillHit_; + this.FramesInvinsible = FramesInvinsible_; + this.FramesSelfLockVel = FramesSelfLockVel_; }); InputFrameDecoded = $pkg.InputFrameDecoded = $newType(0, $kindStruct, "battle.InputFrameDecoded", true, "jsexport/battle", true, function(Dx_, Dy_, BtnALevel_, BtnBLevel_) { this.$val = this; @@ -4819,7 +4823,7 @@ $packages["jsexport/battle"] = (function() { } this.Boundary = Boundary_; }); - Bullet = $pkg.Bullet = $newType(0, $kindStruct, "battle.Bullet", true, "jsexport/battle", true, function(OriginatedRenderFrameId_, OffenderJoinIndex_, StartupFrames_, CancellableStFrame_, CancellableEdFrame_, ActiveFrames_, HitStunFrames_, BlockStunFrames_, PushbackVelX_, PushbackVelY_, Damage_, SelfLockVelX_, SelfLockVelY_, HitboxOffsetX_, HitboxOffsetY_, HitboxSizeX_, HitboxSizeY_, BlowUp_, CancelTransit_) { + Bullet = $pkg.Bullet = $newType(0, $kindStruct, "battle.Bullet", true, "jsexport/battle", true, function(OriginatedRenderFrameId_, OffenderJoinIndex_, StartupFrames_, CancellableStFrame_, CancellableEdFrame_, ActiveFrames_, HitStunFrames_, BlockStunFrames_, PushbackVelX_, PushbackVelY_, Damage_, SelfLockVelX_, SelfLockVelY_, FramesSelfLockVel_, HitboxOffsetX_, HitboxOffsetY_, HitboxSizeX_, HitboxSizeY_, BlowUp_, CancelTransit_) { this.$val = this; if (arguments.length === 0) { this.OriginatedRenderFrameId = 0; @@ -4835,6 +4839,7 @@ $packages["jsexport/battle"] = (function() { this.Damage = 0; this.SelfLockVelX = 0; this.SelfLockVelY = 0; + this.FramesSelfLockVel = 0; this.HitboxOffsetX = 0; this.HitboxOffsetY = 0; this.HitboxSizeX = 0; @@ -4856,6 +4861,7 @@ $packages["jsexport/battle"] = (function() { this.Damage = Damage_; this.SelfLockVelX = SelfLockVelX_; this.SelfLockVelY = SelfLockVelY_; + this.FramesSelfLockVel = FramesSelfLockVel_; this.HitboxOffsetX = HitboxOffsetX_; this.HitboxOffsetY = HitboxOffsetY_; this.HitboxSizeX = HitboxSizeX_; @@ -4866,7 +4872,7 @@ $packages["jsexport/battle"] = (function() { MeleeBullet = $pkg.MeleeBullet = $newType(0, $kindStruct, "battle.MeleeBullet", true, "jsexport/battle", true, function(Bullet_) { this.$val = this; if (arguments.length === 0) { - this.Bullet = new Bullet.ptr(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false, false); + this.Bullet = new Bullet.ptr(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false, false); return; } this.Bullet = Bullet_; @@ -4881,7 +4887,7 @@ $packages["jsexport/battle"] = (function() { this.VelX = 0; this.VelY = 0; this.Speed = 0; - this.Bullet = new Bullet.ptr(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false, false); + this.Bullet = new Bullet.ptr(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false, false); return; } this.VirtualGridX = VirtualGridX_; @@ -4968,7 +4974,7 @@ $packages["jsexport/battle"] = (function() { this.Eles = Eles_; }); SkillMapperType = $pkg.SkillMapperType = $newType(4, $kindFunc, "battle.SkillMapperType", true, "jsexport/battle", true, null); - CharacterConfig = $pkg.CharacterConfig = $newType(0, $kindStruct, "battle.CharacterConfig", true, "jsexport/battle", true, function(SpeciesId_, SpeciesName_, InAirIdleFrameIdxTurningPoint_, InAirIdleFrameIdxTurnedCycle_, LayDownFrames_, LayDownFramesToRecover_, GetUpFrames_, GetUpFramesToRecover_, Speed_, JumpingInitVelY_, SkillMapper_) { + CharacterConfig = $pkg.CharacterConfig = $newType(0, $kindStruct, "battle.CharacterConfig", true, "jsexport/battle", true, function(SpeciesId_, SpeciesName_, InAirIdleFrameIdxTurningPoint_, InAirIdleFrameIdxTurnedCycle_, LayDownFrames_, LayDownFramesToRecover_, GetUpInvinsibleFrames_, GetUpFramesToRecover_, Speed_, JumpingInitVelY_, SkillMapper_) { this.$val = this; if (arguments.length === 0) { this.SpeciesId = 0; @@ -4977,7 +4983,7 @@ $packages["jsexport/battle"] = (function() { this.InAirIdleFrameIdxTurnedCycle = 0; this.LayDownFrames = 0; this.LayDownFramesToRecover = 0; - this.GetUpFrames = 0; + this.GetUpInvinsibleFrames = 0; this.GetUpFramesToRecover = 0; this.Speed = 0; this.JumpingInitVelY = 0; @@ -4990,7 +4996,7 @@ $packages["jsexport/battle"] = (function() { this.InAirIdleFrameIdxTurnedCycle = InAirIdleFrameIdxTurnedCycle_; this.LayDownFrames = LayDownFrames_; this.LayDownFramesToRecover = LayDownFramesToRecover_; - this.GetUpFrames = GetUpFrames_; + this.GetUpInvinsibleFrames = GetUpInvinsibleFrames_; this.GetUpFramesToRecover = GetUpFramesToRecover_; this.Speed = Speed_; this.JumpingInitVelY = JumpingInitVelY_; @@ -5483,7 +5489,7 @@ $packages["jsexport/battle"] = (function() { return [patternId, jumpedOrNot, effDx, effDy]; }; ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame = function(inputsBuffer, currRenderFrame, collisionSys, collisionSysMap, collisionSpaceOffsetX, collisionSpaceOffsetY, chConfigsOrderedByJoinIndex) { - var {_1, _2, _entry, _entry$1, _entry$2, _i, _i$1, _i$10, _i$2, _i$3, _i$4, _i$5, _i$6, _i$7, _i$8, _i$9, _index, _index$1, _index$2, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _ref, _ref$1, _ref$10, _ref$11, _ref$12, _ref$13, _ref$14, _ref$2, _ref$3, _ref$4, _ref$5, _ref$6, _ref$7, _ref$8, _ref$9, _tmp, _tmp$1, _tmp$10, _tmp$11, _tmp$12, _tmp$13, _tmp$14, _tmp$15, _tmp$16, _tmp$17, _tmp$18, _tmp$19, _tmp$2, _tmp$20, _tmp$3, _tmp$4, _tmp$5, _tmp$6, _tmp$7, _tmp$8, _tmp$9, _tuple, _tuple$1, _tuple$10, _tuple$11, _tuple$2, _tuple$3, _tuple$4, _tuple$5, _tuple$6, _tuple$7, _tuple$8, _tuple$9, atkedPlayerInNextFrame, bShape, bulletCollider, bulletColliders, bulletShape, bulletWx, bulletWy, chConfig, chConfig$1, chConfig$2, chConfigsOrderedByJoinIndex, colliderHeight, colliderWidth, colliderWorldHeight, colliderWorldWidth, collision, collision$1, collisionSpaceOffsetX, collisionSpaceOffsetY, collisionSys, collisionSysMap, currPlayerDownsync, currPlayerDownsync$1, currPlayerDownsync$2, currPlayerDownsync$3, currPlayerDownsync$4, currRenderFrame, defenderShape, effDx, effDy, effPushbacks, existent, existent$1, existent$2, halfColliderHeightDiff, halfColliderWidthDiff, halfColliderWorldHeightDiff, hardPushbackNorm, hardPushbackNorms, hitboxSizeWx, hitboxSizeWy, i, i$1, i$2, i$3, i$4, inputsBuffer, isAnotherPlayer, isBarrier, isBullet, joinIndex, joinIndex$1, joinIndex$2, joinIndex$3, jumpedOrNot, jumpedOrNotList, landedOnGravityPushback, meleeBullet, newBullet, newBulletCollider, newVx, newVy, nextRenderFrameMeleeBullets, nextRenderFramePlayers, normAlignmentWithGravity, obj, obj$1, offender, offender$1, oldFramesToRecover, oldNextCharacterState, overlapResult, overlapped, overlapped$1, patternId, playerCollider, playerCollider$1, playerCollider$2, playerCollider$3, playerColliders, playerShape, projectedMagnitude, pushbackVelX, pushbackVelY, pushbackX, pushbackY, roomCapacity, skillConfig, skillId, t, t$1, thatPlayerInNextFrame, thatPlayerInNextFrame$1, thatPlayerInNextFrame$2, thatPlayerInNextFrame$3, v, v$1, wx, wy, x, x$1, x$10, x$11, x$12, x$13, x$14, x$2, x$3, x$4, x$5, x$6, x$7, x$8, x$9, xfac, xfac$1, $s, $r, $c} = $restore(this, {inputsBuffer, currRenderFrame, collisionSys, collisionSysMap, collisionSpaceOffsetX, collisionSpaceOffsetY, chConfigsOrderedByJoinIndex}); + var {_1, _2, _entry, _entry$1, _entry$2, _i, _i$1, _i$10, _i$2, _i$3, _i$4, _i$5, _i$6, _i$7, _i$8, _i$9, _index, _index$1, _index$2, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _ref, _ref$1, _ref$10, _ref$11, _ref$12, _ref$13, _ref$14, _ref$2, _ref$3, _ref$4, _ref$5, _ref$6, _ref$7, _ref$8, _ref$9, _tmp, _tmp$1, _tmp$10, _tmp$11, _tmp$12, _tmp$13, _tmp$14, _tmp$15, _tmp$16, _tmp$17, _tmp$18, _tmp$19, _tmp$2, _tmp$20, _tmp$3, _tmp$4, _tmp$5, _tmp$6, _tmp$7, _tmp$8, _tmp$9, _tuple, _tuple$1, _tuple$10, _tuple$11, _tuple$2, _tuple$3, _tuple$4, _tuple$5, _tuple$6, _tuple$7, _tuple$8, _tuple$9, atkedPlayerInNextFrame, bShape, bulletCollider, bulletColliders, bulletShape, bulletWx, bulletWy, chConfig, chConfig$1, chConfig$2, chConfigsOrderedByJoinIndex, colliderHeight, colliderWidth, colliderWorldHeight, colliderWorldWidth, collision, collision$1, collisionSpaceOffsetX, collisionSpaceOffsetY, collisionSys, collisionSysMap, currPlayerDownsync, currPlayerDownsync$1, currPlayerDownsync$2, currPlayerDownsync$3, currPlayerDownsync$4, currRenderFrame, defenderShape, effDx, effDy, effPushbacks, existent, existent$1, existent$2, halfColliderHeightDiff, halfColliderWidthDiff, halfColliderWorldHeightDiff, hardPushbackNorm, hardPushbackNorms, hasLockVel, hitboxSizeWx, hitboxSizeWy, i, i$1, i$2, i$3, i$4, inputsBuffer, isAnotherPlayer, isBarrier, isBullet, joinIndex, joinIndex$1, joinIndex$2, joinIndex$3, jumpedOrNot, jumpedOrNotList, landedOnGravityPushback, meleeBullet, newBullet, newBulletCollider, newVx, newVy, nextRenderFrameMeleeBullets, nextRenderFramePlayers, normAlignmentWithGravity, obj, obj$1, offender, offender$1, oldFramesToRecover, oldNextCharacterState, overlapResult, overlapped, overlapped$1, patternId, playerCollider, playerCollider$1, playerCollider$2, playerCollider$3, playerColliders, playerShape, projectedMagnitude, pushbackVelX, pushbackVelY, pushbackX, pushbackY, roomCapacity, skillConfig, skillId, t, t$1, thatPlayerInNextFrame, thatPlayerInNextFrame$1, thatPlayerInNextFrame$2, thatPlayerInNextFrame$3, v, v$1, wx, wy, x, x$1, x$10, x$11, x$12, x$13, x$14, x$2, x$3, x$4, x$5, x$6, x$7, x$8, x$9, xfac, xfac$1, xfac$2, $s, $r, $c} = $restore(this, {inputsBuffer, currRenderFrame, collisionSys, collisionSysMap, collisionSpaceOffsetX, collisionSpaceOffsetY, chConfigsOrderedByJoinIndex}); /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: roomCapacity = currRenderFrame.PlayersArr.$length; nextRenderFramePlayers = $makeSlice(sliceType$6, roomCapacity); @@ -5493,10 +5499,16 @@ $packages["jsexport/battle"] = (function() { if (!(_i < _ref.$length)) { break; } i = _i; currPlayerDownsync = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); - ((i < 0 || i >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i] = new PlayerDownsync.ptr(currPlayerDownsync.Id, currPlayerDownsync.VirtualGridX, currPlayerDownsync.VirtualGridY, currPlayerDownsync.DirX, currPlayerDownsync.DirY, currPlayerDownsync.VelX, currPlayerDownsync.VelY, currPlayerDownsync.Speed, currPlayerDownsync.BattleState, currPlayerDownsync.JoinIndex, currPlayerDownsync.ColliderRadius, currPlayerDownsync.Removed, currPlayerDownsync.Score, 0, currPlayerDownsync.FramesToRecover - 1 >> 0, currPlayerDownsync.FramesInChState + 1 >> 0, currPlayerDownsync.Hp, currPlayerDownsync.MaxHp, currPlayerDownsync.CharacterState, true, currPlayerDownsync.ActiveSkillId, currPlayerDownsync.ActiveSkillHit)); + ((i < 0 || i >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i] = new PlayerDownsync.ptr(currPlayerDownsync.Id, currPlayerDownsync.VirtualGridX, currPlayerDownsync.VirtualGridY, currPlayerDownsync.DirX, currPlayerDownsync.DirY, currPlayerDownsync.VelX, currPlayerDownsync.VelY, currPlayerDownsync.Speed, currPlayerDownsync.BattleState, currPlayerDownsync.JoinIndex, currPlayerDownsync.ColliderRadius, currPlayerDownsync.Removed, currPlayerDownsync.Score, 0, currPlayerDownsync.FramesToRecover - 1 >> 0, currPlayerDownsync.FramesInChState + 1 >> 0, currPlayerDownsync.Hp, currPlayerDownsync.MaxHp, currPlayerDownsync.CharacterState, true, currPlayerDownsync.ActiveSkillId, currPlayerDownsync.ActiveSkillHit, currPlayerDownsync.FramesInvinsible - 1 >> 0, currPlayerDownsync.FramesSelfLockVel - 1 >> 0)); if (((i < 0 || i >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i]).FramesToRecover < 0) { ((i < 0 || i >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i]).FramesToRecover = 0; } + if (((i < 0 || i >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i]).FramesInvinsible < 0) { + ((i < 0 || i >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i]).FramesInvinsible = 0; + } + if (((i < 0 || i >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i]).FramesSelfLockVel < 0) { + ((i < 0 || i >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i]).FramesSelfLockVel = 0; + } _i++; } nextRenderFrameMeleeBullets = $makeSlice(sliceType$7, 0, currRenderFrame.MeleeBullets.$length); @@ -5539,11 +5551,28 @@ $packages["jsexport/battle"] = (function() { newBullet[0].Bullet.OffenderJoinIndex = joinIndex; nextRenderFrameMeleeBullets = $append(nextRenderFrameMeleeBullets, newBullet[0]); thatPlayerInNextFrame.FramesToRecover = skillConfig.RecoveryFrames; + hasLockVel = false; + if (!((-1 === v.Bullet.SelfLockVelX))) { + hasLockVel = true; + xfac = 1; + if (0 > thatPlayerInNextFrame.DirX) { + xfac = -xfac; + } + thatPlayerInNextFrame.VelX = $imul(xfac, v.Bullet.SelfLockVelX); + thatPlayerInNextFrame.FramesSelfLockVel = v.Bullet.FramesSelfLockVel; + } + if (!((-1 === v.Bullet.SelfLockVelY))) { + hasLockVel = true; + thatPlayerInNextFrame.VelY = v.Bullet.SelfLockVelY; + thatPlayerInNextFrame.FramesSelfLockVel = v.Bullet.FramesSelfLockVel; + } + if (false === hasLockVel) { + if (false === currPlayerDownsync$1.InAir) { + thatPlayerInNextFrame.VelX = 0; + } + } } thatPlayerInNextFrame.CharacterState = skillConfig.BoundChState; - if (false === currPlayerDownsync$1.InAir) { - thatPlayerInNextFrame.VelX = 0; - } _i$1++; /* continue; */ $s = 1; continue; } @@ -5627,11 +5656,11 @@ $packages["jsexport/battle"] = (function() { /* */ $s = 11; continue; /* if (((meleeBullet.Bullet.OriginatedRenderFrameId + meleeBullet.Bullet.StartupFrames >> 0) <= currRenderFrame.Id) && (((meleeBullet.Bullet.OriginatedRenderFrameId + meleeBullet.Bullet.StartupFrames >> 0) + meleeBullet.Bullet.ActiveFrames >> 0) > currRenderFrame.Id)) { */ case 10: offender = (x$4 = currRenderFrame.PlayersArr, x$5 = meleeBullet.Bullet.OffenderJoinIndex - 1 >> 0, ((x$5 < 0 || x$5 >= x$4.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$4.$array[x$4.$offset + x$5])); - xfac = 1; + xfac$1 = 1; if (0 > offender.DirX) { - xfac = -xfac; + xfac$1 = -xfac$1; } - _tuple$4 = VirtualGridToWorldPos(offender.VirtualGridX + ($imul(xfac, meleeBullet.Bullet.HitboxOffsetX)) >> 0, offender.VirtualGridY); + _tuple$4 = VirtualGridToWorldPos(offender.VirtualGridX + ($imul(xfac$1, meleeBullet.Bullet.HitboxOffsetX)) >> 0, offender.VirtualGridY); bulletWx = _tuple$4[0]; bulletWy = _tuple$4[1]; _tuple$5 = VirtualGridToWorldPos(meleeBullet.Bullet.HitboxSizeX, meleeBullet.Bullet.HitboxSizeY); @@ -5757,8 +5786,9 @@ $packages["jsexport/battle"] = (function() { thatPlayerInNextFrame$2.FramesToRecover = chConfig$2.GetUpFramesToRecover; } } else if (10 === thatPlayerInNextFrame$2.CharacterState) { - if (thatPlayerInNextFrame$2.FramesInChState === chConfig$2.GetUpFrames) { + if (0 === thatPlayerInNextFrame$2.FramesToRecover) { thatPlayerInNextFrame$2.CharacterState = 0; + thatPlayerInNextFrame$2.FramesInvinsible = chConfig$2.GetUpInvinsibleFrames; } } } @@ -5806,6 +5836,10 @@ $packages["jsexport/battle"] = (function() { _i$8++; /* continue; */ $s = 27; continue; } + if (0 < t.FramesInvinsible) { + _i$8++; + /* continue; */ $s = 27; continue; + } _r$5 = CalcPushbacks(0, 0, bulletShape, defenderShape); /* */ $s = 32; case 32: if($c) { $c = false; _r$5 = _r$5.$blk(); } if (_r$5 && _r$5.$blk !== undefined) { break s; } _tuple$9 = _r$5; overlapped$1 = _tuple$9[0]; @@ -5813,11 +5847,11 @@ $packages["jsexport/battle"] = (function() { _i$8++; /* continue; */ $s = 27; continue; } - xfac$1 = 1; + xfac$2 = 1; if (0 > offender$1.DirX) { - xfac$1 = -xfac$1; + xfac$2 = -xfac$2; } - _tmp$19 = $imul(xfac$1, v$1.Bullet.PushbackVelX); + _tmp$19 = $imul(xfac$2, v$1.Bullet.PushbackVelX); _tmp$20 = v$1.Bullet.PushbackVelY; pushbackVelX = _tmp$19; pushbackVelY = _tmp$20; @@ -5891,7 +5925,7 @@ $packages["jsexport/battle"] = (function() { _i$10++; } $s = -1; return new RoomDownsyncFrame.ptr(currRenderFrame.Id + 1 >> 0, nextRenderFramePlayers, new $Int64(0, 0), nextRenderFrameMeleeBullets, sliceType$11.nil, new $Uint64(0, 0), false, false); - /* */ } return; } var $f = {$blk: ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame, $c: true, $r, _1, _2, _entry, _entry$1, _entry$2, _i, _i$1, _i$10, _i$2, _i$3, _i$4, _i$5, _i$6, _i$7, _i$8, _i$9, _index, _index$1, _index$2, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _ref, _ref$1, _ref$10, _ref$11, _ref$12, _ref$13, _ref$14, _ref$2, _ref$3, _ref$4, _ref$5, _ref$6, _ref$7, _ref$8, _ref$9, _tmp, _tmp$1, _tmp$10, _tmp$11, _tmp$12, _tmp$13, _tmp$14, _tmp$15, _tmp$16, _tmp$17, _tmp$18, _tmp$19, _tmp$2, _tmp$20, _tmp$3, _tmp$4, _tmp$5, _tmp$6, _tmp$7, _tmp$8, _tmp$9, _tuple, _tuple$1, _tuple$10, _tuple$11, _tuple$2, _tuple$3, _tuple$4, _tuple$5, _tuple$6, _tuple$7, _tuple$8, _tuple$9, atkedPlayerInNextFrame, bShape, bulletCollider, bulletColliders, bulletShape, bulletWx, bulletWy, chConfig, chConfig$1, chConfig$2, chConfigsOrderedByJoinIndex, colliderHeight, colliderWidth, colliderWorldHeight, colliderWorldWidth, collision, collision$1, collisionSpaceOffsetX, collisionSpaceOffsetY, collisionSys, collisionSysMap, currPlayerDownsync, currPlayerDownsync$1, currPlayerDownsync$2, currPlayerDownsync$3, currPlayerDownsync$4, currRenderFrame, defenderShape, effDx, effDy, effPushbacks, existent, existent$1, existent$2, halfColliderHeightDiff, halfColliderWidthDiff, halfColliderWorldHeightDiff, hardPushbackNorm, hardPushbackNorms, hitboxSizeWx, hitboxSizeWy, i, i$1, i$2, i$3, i$4, inputsBuffer, isAnotherPlayer, isBarrier, isBullet, joinIndex, joinIndex$1, joinIndex$2, joinIndex$3, jumpedOrNot, jumpedOrNotList, landedOnGravityPushback, meleeBullet, newBullet, newBulletCollider, newVx, newVy, nextRenderFrameMeleeBullets, nextRenderFramePlayers, normAlignmentWithGravity, obj, obj$1, offender, offender$1, oldFramesToRecover, oldNextCharacterState, overlapResult, overlapped, overlapped$1, patternId, playerCollider, playerCollider$1, playerCollider$2, playerCollider$3, playerColliders, playerShape, projectedMagnitude, pushbackVelX, pushbackVelY, pushbackX, pushbackY, roomCapacity, skillConfig, skillId, t, t$1, thatPlayerInNextFrame, thatPlayerInNextFrame$1, thatPlayerInNextFrame$2, thatPlayerInNextFrame$3, v, v$1, wx, wy, x, x$1, x$10, x$11, x$12, x$13, x$14, x$2, x$3, x$4, x$5, x$6, x$7, x$8, x$9, xfac, xfac$1, $s};return $f; + /* */ } return; } var $f = {$blk: ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame, $c: true, $r, _1, _2, _entry, _entry$1, _entry$2, _i, _i$1, _i$10, _i$2, _i$3, _i$4, _i$5, _i$6, _i$7, _i$8, _i$9, _index, _index$1, _index$2, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _ref, _ref$1, _ref$10, _ref$11, _ref$12, _ref$13, _ref$14, _ref$2, _ref$3, _ref$4, _ref$5, _ref$6, _ref$7, _ref$8, _ref$9, _tmp, _tmp$1, _tmp$10, _tmp$11, _tmp$12, _tmp$13, _tmp$14, _tmp$15, _tmp$16, _tmp$17, _tmp$18, _tmp$19, _tmp$2, _tmp$20, _tmp$3, _tmp$4, _tmp$5, _tmp$6, _tmp$7, _tmp$8, _tmp$9, _tuple, _tuple$1, _tuple$10, _tuple$11, _tuple$2, _tuple$3, _tuple$4, _tuple$5, _tuple$6, _tuple$7, _tuple$8, _tuple$9, atkedPlayerInNextFrame, bShape, bulletCollider, bulletColliders, bulletShape, bulletWx, bulletWy, chConfig, chConfig$1, chConfig$2, chConfigsOrderedByJoinIndex, colliderHeight, colliderWidth, colliderWorldHeight, colliderWorldWidth, collision, collision$1, collisionSpaceOffsetX, collisionSpaceOffsetY, collisionSys, collisionSysMap, currPlayerDownsync, currPlayerDownsync$1, currPlayerDownsync$2, currPlayerDownsync$3, currPlayerDownsync$4, currRenderFrame, defenderShape, effDx, effDy, effPushbacks, existent, existent$1, existent$2, halfColliderHeightDiff, halfColliderWidthDiff, halfColliderWorldHeightDiff, hardPushbackNorm, hardPushbackNorms, hasLockVel, hitboxSizeWx, hitboxSizeWy, i, i$1, i$2, i$3, i$4, inputsBuffer, isAnotherPlayer, isBarrier, isBullet, joinIndex, joinIndex$1, joinIndex$2, joinIndex$3, jumpedOrNot, jumpedOrNotList, landedOnGravityPushback, meleeBullet, newBullet, newBulletCollider, newVx, newVy, nextRenderFrameMeleeBullets, nextRenderFramePlayers, normAlignmentWithGravity, obj, obj$1, offender, offender$1, oldFramesToRecover, oldNextCharacterState, overlapResult, overlapped, overlapped$1, patternId, playerCollider, playerCollider$1, playerCollider$2, playerCollider$3, playerColliders, playerShape, projectedMagnitude, pushbackVelX, pushbackVelY, pushbackX, pushbackY, roomCapacity, skillConfig, skillId, t, t$1, thatPlayerInNextFrame, thatPlayerInNextFrame$1, thatPlayerInNextFrame$2, thatPlayerInNextFrame$3, v, v$1, wx, wy, x, x$1, x$10, x$11, x$12, x$13, x$14, x$2, x$3, x$4, x$5, x$6, x$7, x$8, x$9, xfac, xfac$1, xfac$2, $s};return $f; }; $pkg.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame = ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame; GenerateRectCollider = function(wx, wy, w, h, topPadding, bottomPadding, leftPadding, rightPadding, spaceOffsetX, spaceOffsetY, data, tag) { @@ -5997,10 +6031,10 @@ $packages["jsexport/battle"] = (function() { ptrType$12.methods = [{prop: "Put", name: "Put", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "Pop", name: "Pop", pkg: "", typ: $funcType([], [$emptyInterface], false)}, {prop: "GetArrIdxByOffset", name: "GetArrIdxByOffset", pkg: "", typ: $funcType([$Int32], [$Int32], false)}, {prop: "GetByOffset", name: "GetByOffset", pkg: "", typ: $funcType([$Int32], [$emptyInterface], false)}, {prop: "GetByFrameId", name: "GetByFrameId", pkg: "", typ: $funcType([$Int32], [$emptyInterface], false)}, {prop: "SetByFrameId", name: "SetByFrameId", pkg: "", typ: $funcType([$emptyInterface, $Int32], [$Int32, $Int32, $Int32], false)}]; Vec2D.init("", [{prop: "X", name: "X", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "Y", name: "Y", embedded: false, exported: true, typ: $Float64, tag: ""}]); Polygon2D.init("", [{prop: "Anchor", name: "Anchor", embedded: false, exported: true, typ: ptrType$10, tag: ""}, {prop: "Points", name: "Points", embedded: false, exported: true, typ: sliceType$13, tag: ""}]); - PlayerDownsync.init("", [{prop: "Id", name: "Id", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VirtualGridX", name: "VirtualGridX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VirtualGridY", name: "VirtualGridY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirX", name: "DirX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirY", name: "DirY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelX", name: "VelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelY", name: "VelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Speed", name: "Speed", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BattleState", name: "BattleState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "JoinIndex", name: "JoinIndex", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ColliderRadius", name: "ColliderRadius", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Removed", name: "Removed", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "Score", name: "Score", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "LastMoveGmtMillis", name: "LastMoveGmtMillis", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "FramesToRecover", name: "FramesToRecover", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "FramesInChState", name: "FramesInChState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Hp", name: "Hp", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "MaxHp", name: "MaxHp", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "CharacterState", name: "CharacterState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "InAir", name: "InAir", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "ActiveSkillId", name: "ActiveSkillId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ActiveSkillHit", name: "ActiveSkillHit", embedded: false, exported: true, typ: $Int32, tag: ""}]); + PlayerDownsync.init("", [{prop: "Id", name: "Id", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VirtualGridX", name: "VirtualGridX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VirtualGridY", name: "VirtualGridY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirX", name: "DirX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirY", name: "DirY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelX", name: "VelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelY", name: "VelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Speed", name: "Speed", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BattleState", name: "BattleState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "JoinIndex", name: "JoinIndex", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ColliderRadius", name: "ColliderRadius", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Removed", name: "Removed", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "Score", name: "Score", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "LastMoveGmtMillis", name: "LastMoveGmtMillis", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "FramesToRecover", name: "FramesToRecover", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "FramesInChState", name: "FramesInChState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Hp", name: "Hp", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "MaxHp", name: "MaxHp", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "CharacterState", name: "CharacterState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "InAir", name: "InAir", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "ActiveSkillId", name: "ActiveSkillId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ActiveSkillHit", name: "ActiveSkillHit", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "FramesInvinsible", name: "FramesInvinsible", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "FramesSelfLockVel", name: "FramesSelfLockVel", embedded: false, exported: true, typ: $Int32, tag: ""}]); InputFrameDecoded.init("", [{prop: "Dx", name: "Dx", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Dy", name: "Dy", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BtnALevel", name: "BtnALevel", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BtnBLevel", name: "BtnBLevel", embedded: false, exported: true, typ: $Int32, tag: ""}]); Barrier.init("", [{prop: "Boundary", name: "Boundary", embedded: false, exported: true, typ: ptrType$11, tag: ""}]); - Bullet.init("", [{prop: "OriginatedRenderFrameId", name: "OriginatedRenderFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "OffenderJoinIndex", name: "OffenderJoinIndex", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "StartupFrames", name: "StartupFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "CancellableStFrame", name: "CancellableStFrame", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "CancellableEdFrame", name: "CancellableEdFrame", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ActiveFrames", name: "ActiveFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitStunFrames", name: "HitStunFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BlockStunFrames", name: "BlockStunFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "PushbackVelX", name: "PushbackVelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "PushbackVelY", name: "PushbackVelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Damage", name: "Damage", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "SelfLockVelX", name: "SelfLockVelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "SelfLockVelY", name: "SelfLockVelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxOffsetX", name: "HitboxOffsetX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxOffsetY", name: "HitboxOffsetY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxSizeX", name: "HitboxSizeX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxSizeY", name: "HitboxSizeY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BlowUp", name: "BlowUp", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "CancelTransit", name: "CancelTransit", embedded: false, exported: true, typ: mapType, tag: ""}]); + Bullet.init("", [{prop: "OriginatedRenderFrameId", name: "OriginatedRenderFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "OffenderJoinIndex", name: "OffenderJoinIndex", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "StartupFrames", name: "StartupFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "CancellableStFrame", name: "CancellableStFrame", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "CancellableEdFrame", name: "CancellableEdFrame", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ActiveFrames", name: "ActiveFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitStunFrames", name: "HitStunFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BlockStunFrames", name: "BlockStunFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "PushbackVelX", name: "PushbackVelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "PushbackVelY", name: "PushbackVelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Damage", name: "Damage", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "SelfLockVelX", name: "SelfLockVelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "SelfLockVelY", name: "SelfLockVelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "FramesSelfLockVel", name: "FramesSelfLockVel", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxOffsetX", name: "HitboxOffsetX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxOffsetY", name: "HitboxOffsetY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxSizeX", name: "HitboxSizeX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxSizeY", name: "HitboxSizeY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BlowUp", name: "BlowUp", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "CancelTransit", name: "CancelTransit", embedded: false, exported: true, typ: mapType, tag: ""}]); MeleeBullet.init("", [{prop: "Bullet", name: "Bullet", embedded: true, exported: true, typ: Bullet, tag: ""}]); FireballBullet.init("", [{prop: "VirtualGridX", name: "VirtualGridX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VirtualGridY", name: "VirtualGridY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirX", name: "DirX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirY", name: "DirY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelX", name: "VelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelY", name: "VelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Speed", name: "Speed", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Bullet", name: "Bullet", embedded: true, exported: true, typ: Bullet, tag: ""}]); Skill.init("", [{prop: "BattleLocalId", name: "BattleLocalId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "RecoveryFrames", name: "RecoveryFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "RecoveryFramesOnBlock", name: "RecoveryFramesOnBlock", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "RecoveryFramesOnHit", name: "RecoveryFramesOnHit", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ReleaseTriggerType", name: "ReleaseTriggerType", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BoundChState", name: "BoundChState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Hits", name: "Hits", embedded: false, exported: true, typ: sliceType$2, tag: ""}]); @@ -6008,7 +6042,7 @@ $packages["jsexport/battle"] = (function() { InputFrameDownsync.init("", [{prop: "InputFrameId", name: "InputFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "InputList", name: "InputList", embedded: false, exported: true, typ: sliceType$5, tag: ""}, {prop: "ConfirmedList", name: "ConfirmedList", embedded: false, exported: true, typ: $Uint64, tag: ""}]); RingBuffer.init("", [{prop: "Ed", name: "Ed", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "St", name: "St", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "EdFrameId", name: "EdFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "StFrameId", name: "StFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "N", name: "N", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Cnt", name: "Cnt", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Eles", name: "Eles", embedded: false, exported: true, typ: sliceType$2, tag: ""}]); SkillMapperType.init([$Int, ptrType$5], [$Int], false); - CharacterConfig.init("", [{prop: "SpeciesId", name: "SpeciesId", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "SpeciesName", name: "SpeciesName", embedded: false, exported: true, typ: $String, tag: ""}, {prop: "InAirIdleFrameIdxTurningPoint", name: "InAirIdleFrameIdxTurningPoint", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "InAirIdleFrameIdxTurnedCycle", name: "InAirIdleFrameIdxTurnedCycle", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "LayDownFrames", name: "LayDownFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "LayDownFramesToRecover", name: "LayDownFramesToRecover", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "GetUpFrames", name: "GetUpFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "GetUpFramesToRecover", name: "GetUpFramesToRecover", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Speed", name: "Speed", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "JumpingInitVelY", name: "JumpingInitVelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "SkillMapper", name: "SkillMapper", embedded: false, exported: true, typ: SkillMapperType, tag: ""}]); + CharacterConfig.init("", [{prop: "SpeciesId", name: "SpeciesId", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "SpeciesName", name: "SpeciesName", embedded: false, exported: true, typ: $String, tag: ""}, {prop: "InAirIdleFrameIdxTurningPoint", name: "InAirIdleFrameIdxTurningPoint", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "InAirIdleFrameIdxTurnedCycle", name: "InAirIdleFrameIdxTurnedCycle", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "LayDownFrames", name: "LayDownFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "LayDownFramesToRecover", name: "LayDownFramesToRecover", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "GetUpInvinsibleFrames", name: "GetUpInvinsibleFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "GetUpFramesToRecover", name: "GetUpFramesToRecover", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Speed", name: "Speed", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "JumpingInitVelY", name: "JumpingInitVelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "SkillMapper", name: "SkillMapper", embedded: false, exported: true, typ: SkillMapperType, tag: ""}]); SatResult.init("", [{prop: "Overlap", name: "Overlap", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "OverlapX", name: "OverlapX", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "OverlapY", name: "OverlapY", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "AContainedInB", name: "AContainedInB", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "BContainedInA", name: "BContainedInA", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "Axis", name: "Axis", embedded: false, exported: true, typ: resolv.Vector, tag: ""}]); $init = function() { $pkg.$init = function() {}; @@ -6016,8 +6050,8 @@ $packages["jsexport/battle"] = (function() { $r = math.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } $r = resolv.$init(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } $pkg.DIRECTION_DECODER = new sliceType$1([new sliceType([0, 0]), new sliceType([0, 2]), new sliceType([0, -2]), new sliceType([2, 0]), new sliceType([-2, 0]), new sliceType([1, 1]), new sliceType([-1, -1]), new sliceType([1, -1]), new sliceType([-1, 1])]); - skills = $makeMap($Int.keyFor, [{ k: 1, v: new Skill.ptr(0, 30, 30, 30, 1, 2, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 7, 13, 30, 22, 13, 9, 50, 0, 5, 0, 0, 1200, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 2 }])))])) }, { k: 2, v: new Skill.ptr(0, 36, 36, 36, 1, 11, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 18, 22, 36, 18, 18, 9, 50, 0, 5, 0, 0, 1800, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 3 }])))])) }, { k: 3, v: new Skill.ptr(0, 60, 60, 60, 1, 12, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 15, 0, 0, 40, 999999999, 9, 200, 700, 10, 0, 0, 2400, 0, 3200, 3200, true, false))])) }, { k: 4, v: new Skill.ptr(0, 30, 30, 30, 1, 2, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 7, 13, 30, 22, 13, 9, 50, 0, 5, 0, 0, 1200, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 5 }])))])) }, { k: 5, v: new Skill.ptr(0, 36, 36, 36, 1, 11, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 18, 22, 36, 18, 18, 9, 50, 0, 5, 0, 0, 1800, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 6 }])))])) }, { k: 6, v: new Skill.ptr(0, 60, 60, 60, 1, 12, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 15, 0, 0, 40, 999999999, 9, 200, 700, 10, 0, 0, 2400, 0, 3200, 3200, true, false))])) }, { k: 255, v: new Skill.ptr(0, 34, 34, 34, 1, 6, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 3, 0, 0, 20, 18, 9, 50, 0, 5, 0, 0, 1200, 0, 3200, 2400, false, false))])) }, { k: 256, v: new Skill.ptr(0, 34, 34, 34, 1, 6, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 3, 0, 0, 20, 18, 9, 50, 0, 5, 0, 0, 1200, 0, 3200, 2400, false, false))])) }]); - $pkg.Characters = $makeMap($Int.keyFor, [{ k: 0, v: new CharacterConfig.ptr(0, "MonkGirl", 11, 1, 16, 16, 33, 30, 120, 800, (function(patternId, currPlayerDownsync) { + skills = $makeMap($Int.keyFor, [{ k: 1, v: new Skill.ptr(0, 30, 30, 30, 1, 2, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 7, 13, 30, 22, 13, 9, 50, 0, 5, 5, -1, 0, 1200, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 2 }])))])) }, { k: 2, v: new Skill.ptr(0, 36, 36, 36, 1, 11, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 18, 22, 36, 18, 18, 9, 50, 0, 5, 10, -1, 0, 1800, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 3 }])))])) }, { k: 3, v: new Skill.ptr(0, 70, 70, 70, 1, 12, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 15, 0, 0, 30, 999999999, 9, 200, 700, 10, -1, -1, 0, 3200, 0, 4800, 3200, true, false))])) }, { k: 4, v: new Skill.ptr(0, 30, 30, 30, 1, 2, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 7, 13, 30, 22, 13, 9, 50, 0, 5, 5, -1, 0, 1200, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 5 }])))])) }, { k: 5, v: new Skill.ptr(0, 36, 36, 36, 1, 11, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 18, 22, 36, 18, 18, 9, 50, 0, 5, 10, -1, 0, 1800, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 6 }])))])) }, { k: 6, v: new Skill.ptr(0, 60, 60, 60, 1, 12, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 15, 0, 0, 40, 999999999, 9, 200, 700, 10, -10, -1, 0, 2400, 0, 3200, 3200, true, false))])) }, { k: 255, v: new Skill.ptr(0, 34, 34, 34, 1, 6, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 3, 0, 0, 20, 18, 9, 50, 0, 5, -1, -1, 0, 1200, 0, 3200, 2400, false, false))])) }, { k: 256, v: new Skill.ptr(0, 34, 34, 34, 1, 6, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 3, 0, 0, 20, 18, 9, 50, 0, 5, -1, -1, 0, 1200, 0, 3200, 2400, false, false))])) }]); + $pkg.Characters = $makeMap($Int.keyFor, [{ k: 0, v: new CharacterConfig.ptr(0, "MonkGirl", 11, 1, 16, 16, 10, 27, 120, 800, (function(patternId, currPlayerDownsync) { var _entry, _entry$1, _ref, _tuple, _tuple$1, currPlayerDownsync, existent1, existent2, nextSkillId, patternId, skillConfig, v, x, x$1; if (1 === patternId) { if (0 === currPlayerDownsync.FramesToRecover) { @@ -6047,7 +6081,7 @@ $packages["jsexport/battle"] = (function() { } } return -1; - })) }, { k: 1, v: new CharacterConfig.ptr(1, "KnifeGirl", 9, 1, 16, 16, 30, 27, 140, 750, (function(patternId, currPlayerDownsync) { + })) }, { k: 1, v: new CharacterConfig.ptr(1, "KnifeGirl", 9, 1, 16, 16, 10, 27, 140, 750, (function(patternId, currPlayerDownsync) { var _entry, _entry$1, _ref, _tuple, _tuple$1, currPlayerDownsync, existent1, existent2, nextSkillId, patternId, skillConfig, v, x, x$1; if (1 === patternId) { if (0 === currPlayerDownsync.FramesToRecover) { @@ -6081,7 +6115,7 @@ $packages["jsexport/battle"] = (function() { inAirSet = $makeMap($Int32.keyFor, [{ k: 4, v: true }, { k: 5, v: true }, { k: 6, v: true }, { k: 7, v: true }, { k: 8, v: true }]); noOpSet = $makeMap($Int32.keyFor, [{ k: 3, v: true }, { k: 7, v: true }, { k: 8, v: true }, { k: 9, v: true }]); invinsibleSet = $makeMap($Int32.keyFor, [{ k: 8, v: true }, { k: 9, v: true }, { k: 10, v: true }]); - nonAttackingSet = $makeMap($Int32.keyFor, []); + nonAttackingSet = $makeMap($Int32.keyFor, [{ k: 0, v: true }, { k: 1, v: true }, { k: 4, v: true }, { k: 5, v: true }, { k: 3, v: true }, { k: 7, v: true }, { k: 8, v: true }, { k: 9, v: true }, { k: 10, v: true }]); /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f; }; $pkg.$init = $init; @@ -6108,8 +6142,8 @@ $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, $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$3 = $funcType([$Int32, $Int32, $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, $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); funcType$7 = $funcType([$Int32, sliceType, $Uint64], [ptrType$5], false); @@ -6178,14 +6212,14 @@ $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, 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)); + NewPlayerDownsyncJs = function(id, virtualGridX, virtualGridY, dirX, dirY, velX, velY, framesToRecover, framesInChState, activeSkillId, activeSkillHit, framesInvinsible, framesSelfLockVel, speed, battleState, characterState, joinIndex, hp, maxHp, colliderRadius, inAir) { + var activeSkillHit, activeSkillId, battleState, characterState, colliderRadius, dirX, dirY, framesInChState, framesInvinsible, framesSelfLockVel, 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, framesInvinsible, 0)); }; $pkg.NewPlayerDownsyncJs = NewPlayerDownsyncJs; - NewMeleeBulletJs = function(originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp) { - var activeFrames, blockStunFrames, blowUp, cancellableEdFrame, cancellableStFrame, damage, hitStunFrames, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, offenderJoinIndex, originatedRenderFrameId, pushbackVelX, pushbackVelY, selfLockVelX, selfLockVelY, startupFrames; - return js.MakeWrapper(new battle.MeleeBullet.ptr(new battle.Bullet.ptr(originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp, false))); + NewMeleeBulletJs = function(originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, framesSelfLockVel, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp) { + var activeFrames, blockStunFrames, blowUp, cancellableEdFrame, cancellableStFrame, damage, framesSelfLockVel, hitStunFrames, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, offenderJoinIndex, originatedRenderFrameId, pushbackVelX, pushbackVelY, selfLockVelX, selfLockVelY, startupFrames; + return js.MakeWrapper(new battle.MeleeBullet.ptr(new battle.Bullet.ptr(originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, framesSelfLockVel, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp, false))); }; $pkg.NewMeleeBulletJs = NewMeleeBulletJs; NewRoomDownsyncFrameJs = function(id, playersArr, meleeBullets) { diff --git a/frontend/assets/resources/animation/MonkGirl/MonkGirl.plist b/frontend/assets/resources/animation/MonkGirl/MonkGirl.plist index a7ecf2c..155a5aa 100644 --- a/frontend/assets/resources/animation/MonkGirl/MonkGirl.plist +++ b/frontend/assets/resources/animation/MonkGirl/MonkGirl.plist @@ -15,7 +15,7 @@ spriteSourceSize {62,92} textureRect - {{1211,188},{62,92}} + {{1277,188},{62,92}} textureRotated @@ -30,9 +30,9 @@ spriteSourceSize {77,99} textureRect - {{603,325},{77,99}} + {{748,0},{77,99}} textureRotated - + Atk1_2.png @@ -45,7 +45,7 @@ spriteSourceSize {112,99} textureRect - {{407,227},{112,99}} + {{408,348},{112,99}} textureRotated @@ -60,7 +60,7 @@ spriteSourceSize {96,100} textureRect - {{727,101},{96,100}} + {{664,315},{96,100}} textureRotated @@ -75,7 +75,7 @@ spriteSourceSize {62,92} textureRect - {{1211,188},{62,92}} + {{1277,188},{62,92}} textureRotated @@ -90,7 +90,7 @@ spriteSourceSize {58,97} textureRect - {{770,402},{58,97}} + {{1023,194},{58,97}} textureRotated @@ -105,7 +105,7 @@ spriteSourceSize {60,90} textureRect - {{1324,435},{60,90}} + {{1393,141},{60,90}} textureRotated @@ -120,7 +120,7 @@ spriteSourceSize {84,96} textureRect - {{823,100},{84,96}} + {{1087,97},{84,96}} textureRotated @@ -135,7 +135,7 @@ spriteSourceSize {55,100} textureRect - {{776,0},{55,100}} + {{731,101},{55,100}} textureRotated @@ -150,9 +150,9 @@ spriteSourceSize {63,100} textureRect - {{407,339},{63,100}} + {{717,206},{63,100}} textureRotated - + Atk2_5.png @@ -165,7 +165,7 @@ spriteSourceSize {66,101} textureRect - {{710,0},{66,101}} + {{682,0},{66,101}} textureRotated @@ -180,7 +180,7 @@ spriteSourceSize {80,95} textureRect - {{907,96},{80,95}} + {{1126,0},{80,95}} textureRotated @@ -195,9 +195,9 @@ spriteSourceSize {116,109} textureRect - {{340,402},{116,109}} + {{315,119},{116,109}} textureRotated - + Atk2_8.png @@ -210,7 +210,7 @@ spriteSourceSize {102,96} textureRect - {{646,210},{102,96}} + {{621,213},{102,96}} textureRotated @@ -225,7 +225,7 @@ spriteSourceSize {75,102} textureRect - {{0,437},{75,102}} + {{139,421},{75,102}} textureRotated @@ -240,7 +240,7 @@ spriteSourceSize {66,109} textureRect - {{456,402},{66,109}} + {{469,110},{66,109}} textureRotated @@ -255,7 +255,7 @@ spriteSourceSize {66,113} textureRect - {{403,114},{66,113}} + {{355,235},{66,113}} textureRotated @@ -330,7 +330,7 @@ spriteSourceSize {78,131} textureRect - {{78,0},{78,131}} + {{137,290},{78,131}} textureRotated @@ -345,9 +345,9 @@ spriteSourceSize {59,139} textureRect - {{78,290},{59,139}} + {{0,437},{59,139}} textureRotated - + Atk3_8.png @@ -360,7 +360,7 @@ spriteSourceSize {59,139} textureRect - {{137,290},{59,139}} + {{78,290},{59,139}} textureRotated @@ -375,9 +375,9 @@ spriteSourceSize {62,97} textureRect - {{708,402},{62,97}} + {{507,434},{62,97}} textureRotated - + Atked1_1.png @@ -390,7 +390,7 @@ spriteSourceSize {73,95} textureRect - {{1001,190},{73,95}} + {{1171,95},{73,95}} textureRotated @@ -405,7 +405,7 @@ spriteSourceSize {90,89} textureRect - {{1260,93},{90,89}} + {{1324,0},{90,89}} textureRotated @@ -420,7 +420,7 @@ spriteSourceSize {95,80} textureRect - {{896,394},{95,80}} + {{1084,291},{95,80}} textureRotated @@ -435,7 +435,7 @@ spriteSourceSize {80,95} textureRect - {{976,0},{80,95}} + {{1010,388},{80,95}} textureRotated @@ -450,9 +450,9 @@ spriteSourceSize {83,92} textureRect - {{194,429},{83,92}} + {{1208,382},{83,92}} textureRotated - + BlownUp1_3.png @@ -465,9 +465,9 @@ spriteSourceSize {92,83} textureRect - {{102,429},{92,83}} + {{1224,284},{92,83}} textureRotated - + GetUp1_0.png @@ -480,7 +480,7 @@ spriteSourceSize {112,45} textureRect - {{508,0},{112,45}} + {{424,115},{112,45}} textureRotated @@ -495,7 +495,7 @@ spriteSourceSize {88,69} textureRect - {{1236,435},{88,69}} + {{604,427},{88,69}} textureRotated @@ -510,9 +510,9 @@ spriteSourceSize {91,90} textureRect - {{702,312},{91,90}} + {{1303,93},{91,90}} textureRotated - + GetUp1_3.png @@ -525,7 +525,7 @@ spriteSourceSize {120,93} textureRect - {{254,124},{120,93}} + {{222,123},{120,93}} textureRotated @@ -540,9 +540,9 @@ spriteSourceSize {100,112} textureRect - {{408,0},{100,112}} + {{241,396},{100,112}} textureRotated - + GetUp1_5.png @@ -555,7 +555,7 @@ spriteSourceSize {106,93} textureRect - {{553,0},{106,93}} + {{507,328},{106,93}} textureRotated @@ -570,7 +570,7 @@ spriteSourceSize {106,79} textureRect - {{567,219},{106,79}} + {{542,217},{106,79}} textureRotated @@ -585,9 +585,9 @@ spriteSourceSize {73,87} textureRect - {{1262,0},{73,87}} + {{1307,280},{73,87}} textureRotated - + GetUp1_8.png @@ -600,7 +600,7 @@ spriteSourceSize {67,90} textureRect - {{1341,368},{67,90}} + {{1413,74},{67,90}} textureRotated @@ -615,7 +615,7 @@ spriteSourceSize {58,97} textureRect - {{770,402},{58,97}} + {{1023,194},{58,97}} textureRotated @@ -630,7 +630,7 @@ spriteSourceSize {58,95} textureRect - {{1050,381},{58,95}} + {{1090,386},{58,95}} textureRotated @@ -645,7 +645,7 @@ spriteSourceSize {58,97} textureRect - {{742,201},{58,97}} + {{1029,97},{58,97}} textureRotated @@ -660,7 +660,7 @@ spriteSourceSize {60,94} textureRect - {{1146,284},{60,94}} + {{1148,386},{60,94}} textureRotated @@ -675,7 +675,7 @@ spriteSourceSize {58,97} textureRect - {{793,298},{58,97}} + {{1081,194},{58,97}} textureRotated @@ -690,7 +690,7 @@ spriteSourceSize {58,97} textureRect - {{800,201},{58,97}} + {{1068,0},{58,97}} textureRotated @@ -705,7 +705,7 @@ spriteSourceSize {60,95} textureRect - {{1065,95},{60,95}} + {{1206,0},{60,95}} textureRotated @@ -720,7 +720,7 @@ spriteSourceSize {60,94} textureRect - {{1151,189},{60,94}} + {{1164,288},{60,94}} textureRotated @@ -735,7 +735,7 @@ spriteSourceSize {59,93} textureRect - {{1203,0},{59,93}} + {{789,403},{59,93}} textureRotated @@ -750,7 +750,7 @@ spriteSourceSize {58,93} textureRect - {{1206,283},{58,93}} + {{1266,0},{58,93}} textureRotated @@ -765,7 +765,7 @@ spriteSourceSize {59,93} textureRect - {{1177,378},{59,93}} + {{1244,95},{59,93}} textureRotated @@ -780,7 +780,7 @@ spriteSourceSize {60,94} textureRect - {{1200,94},{60,94}} + {{1217,190},{60,94}} textureRotated @@ -795,9 +795,9 @@ spriteSourceSize {77,68} textureRect - {{1264,341},{77,68}} + {{1437,417},{77,68}} textureRotated - + InAirAtk1_1.png @@ -810,7 +810,7 @@ spriteSourceSize {118,76} textureRect - {{267,284},{118,76}} + {{215,278},{118,76}} textureRotated @@ -825,7 +825,7 @@ spriteSourceSize {104,65} textureRect - {{595,106},{104,65}} + {{617,0},{104,65}} textureRotated @@ -840,7 +840,7 @@ spriteSourceSize {80,66} textureRect - {{1349,0},{80,66}} + {{1380,285},{80,66}} textureRotated @@ -855,7 +855,7 @@ spriteSourceSize {102,67} textureRect - {{660,104},{102,67}} + {{664,104},{102,67}} textureRotated @@ -870,9 +870,9 @@ spriteSourceSize {79,66} textureRect - {{1349,66},{79,66}} + {{1339,201},{79,66}} textureRotated - + InAirAtk1_3.png @@ -885,7 +885,7 @@ spriteSourceSize {124,64} textureRect - {{156,0},{124,64}} + {{78,0},{124,64}} textureRotated @@ -900,7 +900,7 @@ spriteSourceSize {104,64} textureRect - {{646,0},{104,64}} + {{600,323},{104,64}} textureRotated @@ -915,9 +915,9 @@ spriteSourceSize {79,61} textureRect - {{1264,280},{79,61}} + {{1376,417},{79,61}} textureRotated - + InAirAtk1_6.png @@ -930,7 +930,7 @@ spriteSourceSize {124,64} textureRect - {{160,124},{124,64}} + {{142,0},{124,64}} textureRotated @@ -945,7 +945,7 @@ spriteSourceSize {106,67} textureRect - {{641,402},{106,67}} + {{597,107},{106,67}} textureRotated @@ -960,7 +960,7 @@ spriteSourceSize {79,66} textureRect - {{1349,132},{79,66}} + {{1380,351},{79,66}} textureRotated @@ -975,7 +975,7 @@ spriteSourceSize {118,64} textureRect - {{343,244},{118,64}} + {{291,243},{118,64}} textureRotated @@ -990,7 +990,7 @@ spriteSourceSize {71,119} textureRect - {{282,0},{71,119}} + {{242,0},{71,119}} textureRotated @@ -1005,7 +1005,7 @@ spriteSourceSize {71,119} textureRect - {{196,284},{71,119}} + {{313,0},{71,119}} textureRotated @@ -1020,7 +1020,7 @@ spriteSourceSize {55,114} textureRect - {{353,0},{55,114}} + {{353,361},{55,114}} textureRotated @@ -1035,7 +1035,7 @@ spriteSourceSize {62,124} textureRect - {{220,0},{62,124}} + {{160,124},{62,124}} textureRotated @@ -1050,9 +1050,9 @@ spriteSourceSize {74,90} textureRect - {{1273,183},{74,90}} + {{1413,0},{74,90}} textureRotated - + InAirIdle1_3.png @@ -1065,7 +1065,7 @@ spriteSourceSize {110,54} textureRect - {{286,402},{110,54}} + {{440,0},{110,54}} textureRotated @@ -1080,9 +1080,9 @@ spriteSourceSize {85,88} textureRect - {{1343,283},{85,88}} + {{1291,376},{85,88}} textureRotated - + InAirIdle1_5.png @@ -1095,7 +1095,7 @@ spriteSourceSize {64,112} textureRect - {{469,112},{64,112}} + {{421,235},{64,112}} textureRotated @@ -1110,7 +1110,7 @@ spriteSourceSize {62,107} textureRect - {{533,112},{62,107}} + {{555,0},{62,107}} textureRotated @@ -1125,9 +1125,9 @@ spriteSourceSize {85,84} textureRect - {{1347,198},{85,84}} + {{1405,201},{85,84}} textureRotated - + InAirIdle1_8.png @@ -1140,7 +1140,7 @@ spriteSourceSize {109,61} textureRect - {{506,224},{109,61}} + {{494,0},{109,61}} textureRotated @@ -1155,7 +1155,7 @@ spriteSourceSize {78,95} textureRect - {{916,292},{78,95}} + {{1139,193},{78,95}} textureRotated @@ -1170,7 +1170,7 @@ spriteSourceSize {115,56} textureRect - {{347,119},{115,56}} + {{384,0},{115,56}} textureRotated @@ -1185,7 +1185,7 @@ spriteSourceSize {109,57} textureRect - {{522,402},{109,57}} + {{485,219},{109,57}} textureRotated @@ -1200,7 +1200,7 @@ spriteSourceSize {108,62} textureRect - {{579,402},{108,62}} + {{535,109},{108,62}} textureRotated @@ -1215,9 +1215,9 @@ spriteSourceSize {123,36} textureRect - {{160,248},{123,36}} + {{206,0},{123,36}} textureRotated - + LayDown1_4.png @@ -1230,22 +1230,7 @@ spriteSourceSize {123,30} textureRect - {{224,124},{123,30}} - textureRotated - - - Walking_0.png - - aliases - - spriteOffset - {0,0} - spriteSize - {78,95} - spriteSourceSize - {78,95} - textureRect - {{923,191},{78,95}} + {{160,248},{123,30}} textureRotated @@ -1256,13 +1241,13 @@ spriteOffset {0,0} spriteSize - {75,96} + {81,97} spriteSourceSize - {75,96} + {81,97} textureRect - {{831,0},{75,96}} + {{692,415},{81,97}} textureRotated - + Walking_10.png @@ -1271,11 +1256,11 @@ spriteOffset {0,0} spriteSize - {65,96} + {81,97} spriteSourceSize - {65,96} + {81,97} textureRect - {{851,298},{65,96}} + {{760,306},{81,97}} textureRotated @@ -1286,11 +1271,11 @@ spriteOffset {0,0} spriteSize - {65,96} + {81,97} spriteSourceSize - {65,96} + {81,97} textureRect - {{858,196},{65,96}} + {{780,201},{81,97}} textureRotated @@ -1301,11 +1286,11 @@ spriteOffset {0,0} spriteSize - {74,95} + {81,97} spriteSourceSize - {74,95} + {81,97} textureRect - {{976,387},{74,95}} + {{786,99},{81,97}} textureRotated @@ -1316,11 +1301,11 @@ spriteOffset {0,0} spriteSize - {75,94} + {81,97} spriteSourceSize - {75,94} + {81,97} textureRect - {{1125,95},{75,94}} + {{825,0},{81,97}} textureRotated @@ -1331,11 +1316,11 @@ spriteOffset {0,0} spriteSize - {70,94} + {81,97} spriteSourceSize - {70,94} + {81,97} textureRect - {{1133,0},{70,94}} + {{841,298},{81,97}} textureRotated @@ -1346,11 +1331,26 @@ spriteOffset {0,0} spriteSize - {78,94} + {81,97} spriteSourceSize - {78,94} + {81,97} textureRect - {{1068,285},{78,94}} + {{848,395},{81,97}} + textureRotated + + + Walking_16.png + + aliases + + spriteOffset + {0,0} + spriteSize + {81,97} + spriteSourceSize + {81,97} + textureRect + {{861,196},{81,97}} textureRotated @@ -1361,13 +1361,13 @@ spriteOffset {0,0} spriteSize - {69,96} + {81,97} spriteSourceSize - {69,96} + {81,97} textureRect - {{507,333},{69,96}} + {{867,97},{81,97}} textureRotated - + Walking_3.png @@ -1376,11 +1376,11 @@ spriteOffset {0,0} spriteSize - {70,96} + {81,97} spriteSourceSize - {70,96} + {81,97} textureRect - {{906,0},{70,96}} + {{906,0},{81,97}} textureRotated @@ -1391,11 +1391,11 @@ spriteOffset {0,0} spriteSize - {78,95} + {81,97} spriteSourceSize - {78,95} + {81,97} textureRect - {{987,95},{78,95}} + {{922,293},{81,97}} textureRotated @@ -1406,11 +1406,11 @@ spriteOffset {0,0} spriteSize - {77,95} + {81,97} spriteSourceSize - {77,95} + {81,97} textureRect - {{1056,0},{77,95}} + {{942,194},{81,97}} textureRotated @@ -1421,11 +1421,11 @@ spriteOffset {0,0} spriteSize - {69,94} + {81,97} spriteSourceSize - {69,94} + {81,97} textureRect - {{1108,379},{69,94}} + {{948,97},{81,97}} textureRotated @@ -1436,11 +1436,11 @@ spriteOffset {0,0} spriteSize - {77,94} + {81,97} spriteSourceSize - {77,94} + {81,97} textureRect - {{1074,190},{77,94}} + {{987,0},{81,97}} textureRotated @@ -1451,11 +1451,11 @@ spriteOffset {0,0} spriteSize - {74,95} + {81,97} spriteSourceSize - {74,95} + {81,97} textureRect - {{994,286},{74,95}} + {{929,390},{81,97}} textureRotated @@ -1466,11 +1466,11 @@ spriteOffset {0,0} spriteSize - {68,96} + {81,97} spriteSourceSize - {68,96} + {81,97} textureRect - {{828,395},{68,96}} + {{1003,291},{81,97}} textureRotated @@ -1486,9 +1486,9 @@ realTextureFileName MonkGirl.png size - {1431,512} + {1505,496} smartupdate - $TexturePacker:SmartUpdate:b61c8127138360fc5127f38c3072d44e:e6a91336f913f21d08fc641d99741429:7b088363a1f16e4f4ff313aecc52227b$ + $TexturePacker:SmartUpdate:8383576ddc6ed0fb9e6adcbc98ec9c07:b0caf27c9f592741053365a3d87b3473:7b088363a1f16e4f4ff313aecc52227b$ textureFileName MonkGirl.png diff --git a/frontend/assets/resources/animation/MonkGirl/MonkGirl.plist.meta b/frontend/assets/resources/animation/MonkGirl/MonkGirl.plist.meta index d76ba3e..e72a3d5 100644 --- a/frontend/assets/resources/animation/MonkGirl/MonkGirl.plist.meta +++ b/frontend/assets/resources/animation/MonkGirl/MonkGirl.plist.meta @@ -3,8 +3,8 @@ "uuid": "725c90f9-56f8-48ea-9159-4d2949cd3ce0", "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "size": { - "width": 1431, - "height": 512 + "width": 1505, + "height": 496 }, "type": "Texture Packer", "subMetas": { @@ -17,7 +17,7 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1211, + "trimX": 1277, "trimY": 188, "width": 62, "height": 92, @@ -36,11 +36,11 @@ "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 603, - "trimY": 325, + "trimX": 748, + "trimY": 0, "width": 77, "height": 99, "rawWidth": 77, @@ -61,8 +61,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 407, - "trimY": 227, + "trimX": 408, + "trimY": 348, "width": 112, "height": 99, "rawWidth": 112, @@ -83,8 +83,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 727, - "trimY": 101, + "trimX": 664, + "trimY": 315, "width": 96, "height": 100, "rawWidth": 96, @@ -105,7 +105,7 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1211, + "trimX": 1277, "trimY": 188, "width": 62, "height": 92, @@ -127,8 +127,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 770, - "trimY": 402, + "trimX": 1023, + "trimY": 194, "width": 58, "height": 97, "rawWidth": 58, @@ -149,8 +149,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1324, - "trimY": 435, + "trimX": 1393, + "trimY": 141, "width": 60, "height": 90, "rawWidth": 60, @@ -171,8 +171,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 823, - "trimY": 100, + "trimX": 1087, + "trimY": 97, "width": 84, "height": 96, "rawWidth": 84, @@ -193,8 +193,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 776, - "trimY": 0, + "trimX": 731, + "trimY": 101, "width": 55, "height": 100, "rawWidth": 55, @@ -212,11 +212,11 @@ "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 407, - "trimY": 339, + "trimX": 717, + "trimY": 206, "width": 63, "height": 100, "rawWidth": 63, @@ -237,7 +237,7 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 710, + "trimX": 682, "trimY": 0, "width": 66, "height": 101, @@ -259,8 +259,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 907, - "trimY": 96, + "trimX": 1126, + "trimY": 0, "width": 80, "height": 95, "rawWidth": 80, @@ -278,11 +278,11 @@ "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 340, - "trimY": 402, + "trimX": 315, + "trimY": 119, "width": 116, "height": 109, "rawWidth": 116, @@ -303,8 +303,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 646, - "trimY": 210, + "trimX": 621, + "trimY": 213, "width": 102, "height": 96, "rawWidth": 102, @@ -325,8 +325,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 0, - "trimY": 437, + "trimX": 139, + "trimY": 421, "width": 75, "height": 102, "rawWidth": 75, @@ -347,8 +347,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 456, - "trimY": 402, + "trimX": 469, + "trimY": 110, "width": 66, "height": 109, "rawWidth": 66, @@ -369,8 +369,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 403, - "trimY": 114, + "trimX": 355, + "trimY": 235, "width": 66, "height": 113, "rawWidth": 66, @@ -479,8 +479,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 78, - "trimY": 0, + "trimX": 137, + "trimY": 290, "width": 78, "height": 131, "rawWidth": 78, @@ -498,11 +498,11 @@ "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 78, - "trimY": 290, + "trimX": 0, + "trimY": 437, "width": 59, "height": 139, "rawWidth": 59, @@ -523,7 +523,7 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 137, + "trimX": 78, "trimY": 290, "width": 59, "height": 139, @@ -542,11 +542,11 @@ "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 708, - "trimY": 402, + "trimX": 507, + "trimY": 434, "width": 62, "height": 97, "rawWidth": 62, @@ -567,8 +567,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1001, - "trimY": 190, + "trimX": 1171, + "trimY": 95, "width": 73, "height": 95, "rawWidth": 73, @@ -589,8 +589,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1260, - "trimY": 93, + "trimX": 1324, + "trimY": 0, "width": 90, "height": 89, "rawWidth": 90, @@ -611,8 +611,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 896, - "trimY": 394, + "trimX": 1084, + "trimY": 291, "width": 95, "height": 80, "rawWidth": 95, @@ -633,8 +633,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 976, - "trimY": 0, + "trimX": 1010, + "trimY": 388, "width": 80, "height": 95, "rawWidth": 80, @@ -652,11 +652,11 @@ "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 194, - "trimY": 429, + "trimX": 1208, + "trimY": 382, "width": 83, "height": 92, "rawWidth": 83, @@ -674,11 +674,11 @@ "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 102, - "trimY": 429, + "trimX": 1224, + "trimY": 284, "width": 92, "height": 83, "rawWidth": 92, @@ -699,8 +699,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 508, - "trimY": 0, + "trimX": 424, + "trimY": 115, "width": 112, "height": 45, "rawWidth": 112, @@ -721,8 +721,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1236, - "trimY": 435, + "trimX": 604, + "trimY": 427, "width": 88, "height": 69, "rawWidth": 88, @@ -740,11 +740,11 @@ "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 702, - "trimY": 312, + "trimX": 1303, + "trimY": 93, "width": 91, "height": 90, "rawWidth": 91, @@ -765,8 +765,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 254, - "trimY": 124, + "trimX": 222, + "trimY": 123, "width": 120, "height": 93, "rawWidth": 120, @@ -784,11 +784,11 @@ "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 408, - "trimY": 0, + "trimX": 241, + "trimY": 396, "width": 100, "height": 112, "rawWidth": 100, @@ -809,8 +809,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 553, - "trimY": 0, + "trimX": 507, + "trimY": 328, "width": 106, "height": 93, "rawWidth": 106, @@ -831,8 +831,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 567, - "trimY": 219, + "trimX": 542, + "trimY": 217, "width": 106, "height": 79, "rawWidth": 106, @@ -850,11 +850,11 @@ "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1262, - "trimY": 0, + "trimX": 1307, + "trimY": 280, "width": 73, "height": 87, "rawWidth": 73, @@ -875,8 +875,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1341, - "trimY": 368, + "trimX": 1413, + "trimY": 74, "width": 67, "height": 90, "rawWidth": 67, @@ -897,8 +897,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 770, - "trimY": 402, + "trimX": 1023, + "trimY": 194, "width": 58, "height": 97, "rawWidth": 58, @@ -919,8 +919,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1050, - "trimY": 381, + "trimX": 1090, + "trimY": 386, "width": 58, "height": 95, "rawWidth": 58, @@ -941,8 +941,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 742, - "trimY": 201, + "trimX": 1029, + "trimY": 97, "width": 58, "height": 97, "rawWidth": 58, @@ -963,8 +963,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1146, - "trimY": 284, + "trimX": 1148, + "trimY": 386, "width": 60, "height": 94, "rawWidth": 60, @@ -985,8 +985,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 793, - "trimY": 298, + "trimX": 1081, + "trimY": 194, "width": 58, "height": 97, "rawWidth": 58, @@ -1007,8 +1007,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 800, - "trimY": 201, + "trimX": 1068, + "trimY": 0, "width": 58, "height": 97, "rawWidth": 58, @@ -1029,8 +1029,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1065, - "trimY": 95, + "trimX": 1206, + "trimY": 0, "width": 60, "height": 95, "rawWidth": 60, @@ -1051,8 +1051,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1151, - "trimY": 189, + "trimX": 1164, + "trimY": 288, "width": 60, "height": 94, "rawWidth": 60, @@ -1073,8 +1073,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1203, - "trimY": 0, + "trimX": 789, + "trimY": 403, "width": 59, "height": 93, "rawWidth": 59, @@ -1095,8 +1095,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1206, - "trimY": 283, + "trimX": 1266, + "trimY": 0, "width": 58, "height": 93, "rawWidth": 58, @@ -1117,8 +1117,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1177, - "trimY": 378, + "trimX": 1244, + "trimY": 95, "width": 59, "height": 93, "rawWidth": 59, @@ -1139,8 +1139,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1200, - "trimY": 94, + "trimX": 1217, + "trimY": 190, "width": 60, "height": 94, "rawWidth": 60, @@ -1158,11 +1158,11 @@ "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1264, - "trimY": 341, + "trimX": 1437, + "trimY": 417, "width": 77, "height": 68, "rawWidth": 77, @@ -1183,8 +1183,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 267, - "trimY": 284, + "trimX": 215, + "trimY": 278, "width": 118, "height": 76, "rawWidth": 118, @@ -1205,8 +1205,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 595, - "trimY": 106, + "trimX": 617, + "trimY": 0, "width": 104, "height": 65, "rawWidth": 104, @@ -1227,8 +1227,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1349, - "trimY": 0, + "trimX": 1380, + "trimY": 285, "width": 80, "height": 66, "rawWidth": 80, @@ -1249,7 +1249,7 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 660, + "trimX": 664, "trimY": 104, "width": 102, "height": 67, @@ -1268,11 +1268,11 @@ "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1349, - "trimY": 66, + "trimX": 1339, + "trimY": 201, "width": 79, "height": 66, "rawWidth": 79, @@ -1293,7 +1293,7 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 156, + "trimX": 78, "trimY": 0, "width": 124, "height": 64, @@ -1315,8 +1315,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 646, - "trimY": 0, + "trimX": 600, + "trimY": 323, "width": 104, "height": 64, "rawWidth": 104, @@ -1334,11 +1334,11 @@ "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1264, - "trimY": 280, + "trimX": 1376, + "trimY": 417, "width": 79, "height": 61, "rawWidth": 79, @@ -1359,8 +1359,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 160, - "trimY": 124, + "trimX": 142, + "trimY": 0, "width": 124, "height": 64, "rawWidth": 124, @@ -1381,8 +1381,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 641, - "trimY": 402, + "trimX": 597, + "trimY": 107, "width": 106, "height": 67, "rawWidth": 106, @@ -1403,8 +1403,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1349, - "trimY": 132, + "trimX": 1380, + "trimY": 351, "width": 79, "height": 66, "rawWidth": 79, @@ -1425,8 +1425,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 343, - "trimY": 244, + "trimX": 291, + "trimY": 243, "width": 118, "height": 64, "rawWidth": 118, @@ -1447,7 +1447,7 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 282, + "trimX": 242, "trimY": 0, "width": 71, "height": 119, @@ -1469,8 +1469,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 196, - "trimY": 284, + "trimX": 313, + "trimY": 0, "width": 71, "height": 119, "rawWidth": 71, @@ -1492,7 +1492,7 @@ "offsetX": 0, "offsetY": 0, "trimX": 353, - "trimY": 0, + "trimY": 361, "width": 55, "height": 114, "rawWidth": 55, @@ -1513,8 +1513,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 220, - "trimY": 0, + "trimX": 160, + "trimY": 124, "width": 62, "height": 124, "rawWidth": 62, @@ -1532,11 +1532,11 @@ "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 1273, - "trimY": 183, + "trimX": 1413, + "trimY": 0, "width": 74, "height": 90, "rawWidth": 74, @@ -1557,8 +1557,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 286, - "trimY": 402, + "trimX": 440, + "trimY": 0, "width": 110, "height": 54, "rawWidth": 110, @@ -1576,11 +1576,11 @@ "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1343, - "trimY": 283, + "trimX": 1291, + "trimY": 376, "width": 85, "height": 88, "rawWidth": 85, @@ -1601,8 +1601,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 469, - "trimY": 112, + "trimX": 421, + "trimY": 235, "width": 64, "height": 112, "rawWidth": 64, @@ -1623,8 +1623,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 533, - "trimY": 112, + "trimX": 555, + "trimY": 0, "width": 62, "height": 107, "rawWidth": 62, @@ -1642,11 +1642,11 @@ "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1347, - "trimY": 198, + "trimX": 1405, + "trimY": 201, "width": 85, "height": 84, "rawWidth": 85, @@ -1667,8 +1667,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 506, - "trimY": 224, + "trimX": 494, + "trimY": 0, "width": 109, "height": 61, "rawWidth": 109, @@ -1689,8 +1689,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 916, - "trimY": 292, + "trimX": 1139, + "trimY": 193, "width": 78, "height": 95, "rawWidth": 78, @@ -1711,8 +1711,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 347, - "trimY": 119, + "trimX": 384, + "trimY": 0, "width": 115, "height": 56, "rawWidth": 115, @@ -1733,8 +1733,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 522, - "trimY": 402, + "trimX": 485, + "trimY": 219, "width": 109, "height": 57, "rawWidth": 109, @@ -1755,8 +1755,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 579, - "trimY": 402, + "trimX": 535, + "trimY": 109, "width": 108, "height": 62, "rawWidth": 108, @@ -1774,11 +1774,11 @@ "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 160, - "trimY": 248, + "trimX": 206, + "trimY": 0, "width": 123, "height": 36, "rawWidth": 123, @@ -1796,11 +1796,11 @@ "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 224, - "trimY": 124, + "trimX": 160, + "trimY": 248, "width": 123, "height": 30, "rawWidth": 123, @@ -1812,43 +1812,21 @@ "spriteType": "normal", "subMetas": {} }, - "Walking_0.png": { - "ver": "1.0.4", - "uuid": "95e3dc3c-ee98-4ae8-899f-3d6539a649cb", - "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", - "trimType": "auto", - "trimThreshold": 1, - "rotated": false, - "offsetX": 0, - "offsetY": 0, - "trimX": 923, - "trimY": 191, - "width": 78, - "height": 95, - "rawWidth": 78, - "rawHeight": 95, - "borderTop": 0, - "borderBottom": 0, - "borderLeft": 0, - "borderRight": 0, - "spriteType": "normal", - "subMetas": {} - }, "Walking_1.png": { "ver": "1.0.4", "uuid": "7515ef50-3a14-4e58-8811-a0c890fc40f3", "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 831, - "trimY": 0, - "width": 75, - "height": 96, - "rawWidth": 75, - "rawHeight": 96, + "trimX": 692, + "trimY": 415, + "width": 81, + "height": 97, + "rawWidth": 81, + "rawHeight": 97, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -1865,12 +1843,12 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 851, - "trimY": 298, - "width": 65, - "height": 96, - "rawWidth": 65, - "rawHeight": 96, + "trimX": 760, + "trimY": 306, + "width": 81, + "height": 97, + "rawWidth": 81, + "rawHeight": 97, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -1887,12 +1865,12 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 858, - "trimY": 196, - "width": 65, - "height": 96, - "rawWidth": 65, - "rawHeight": 96, + "trimX": 780, + "trimY": 201, + "width": 81, + "height": 97, + "rawWidth": 81, + "rawHeight": 97, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -1909,12 +1887,12 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 976, - "trimY": 387, - "width": 74, - "height": 95, - "rawWidth": 74, - "rawHeight": 95, + "trimX": 786, + "trimY": 99, + "width": 81, + "height": 97, + "rawWidth": 81, + "rawHeight": 97, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -1931,12 +1909,12 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1125, - "trimY": 95, - "width": 75, - "height": 94, - "rawWidth": 75, - "rawHeight": 94, + "trimX": 825, + "trimY": 0, + "width": 81, + "height": 97, + "rawWidth": 81, + "rawHeight": 97, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -1953,12 +1931,12 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1133, - "trimY": 0, - "width": 70, - "height": 94, - "rawWidth": 70, - "rawHeight": 94, + "trimX": 841, + "trimY": 298, + "width": 81, + "height": 97, + "rawWidth": 81, + "rawHeight": 97, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -1975,12 +1953,34 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1068, - "trimY": 285, - "width": 78, - "height": 94, - "rawWidth": 78, - "rawHeight": 94, + "trimX": 848, + "trimY": 395, + "width": 81, + "height": 97, + "rawWidth": 81, + "rawHeight": 97, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Walking_16.png": { + "ver": "1.0.4", + "uuid": "60f04127-1580-4dda-828b-57d82e991398", + "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 861, + "trimY": 196, + "width": 81, + "height": 97, + "rawWidth": 81, + "rawHeight": 97, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -1994,15 +1994,15 @@ "rawTextureUuid": "8d4cf214-f71c-4237-bdc1-ca0069909248", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 507, - "trimY": 333, - "width": 69, - "height": 96, - "rawWidth": 69, - "rawHeight": 96, + "trimX": 867, + "trimY": 97, + "width": 81, + "height": 97, + "rawWidth": 81, + "rawHeight": 97, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -2021,10 +2021,10 @@ "offsetY": 0, "trimX": 906, "trimY": 0, - "width": 70, - "height": 96, - "rawWidth": 70, - "rawHeight": 96, + "width": 81, + "height": 97, + "rawWidth": 81, + "rawHeight": 97, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -2041,12 +2041,12 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 987, - "trimY": 95, - "width": 78, - "height": 95, - "rawWidth": 78, - "rawHeight": 95, + "trimX": 922, + "trimY": 293, + "width": 81, + "height": 97, + "rawWidth": 81, + "rawHeight": 97, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -2063,12 +2063,12 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1056, - "trimY": 0, - "width": 77, - "height": 95, - "rawWidth": 77, - "rawHeight": 95, + "trimX": 942, + "trimY": 194, + "width": 81, + "height": 97, + "rawWidth": 81, + "rawHeight": 97, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -2085,12 +2085,12 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1108, - "trimY": 379, - "width": 69, - "height": 94, - "rawWidth": 69, - "rawHeight": 94, + "trimX": 948, + "trimY": 97, + "width": 81, + "height": 97, + "rawWidth": 81, + "rawHeight": 97, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -2107,12 +2107,12 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 1074, - "trimY": 190, - "width": 77, - "height": 94, - "rawWidth": 77, - "rawHeight": 94, + "trimX": 987, + "trimY": 0, + "width": 81, + "height": 97, + "rawWidth": 81, + "rawHeight": 97, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -2129,12 +2129,12 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 994, - "trimY": 286, - "width": 74, - "height": 95, - "rawWidth": 74, - "rawHeight": 95, + "trimX": 929, + "trimY": 390, + "width": 81, + "height": 97, + "rawWidth": 81, + "rawHeight": 97, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, @@ -2151,12 +2151,12 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 828, - "trimY": 395, - "width": 68, - "height": 96, - "rawWidth": 68, - "rawHeight": 96, + "trimX": 1003, + "trimY": 291, + "width": 81, + "height": 97, + "rawWidth": 81, + "rawHeight": 97, "borderTop": 0, "borderBottom": 0, "borderLeft": 0, diff --git a/frontend/assets/resources/animation/MonkGirl/MonkGirl.png b/frontend/assets/resources/animation/MonkGirl/MonkGirl.png index 9c31fbd..0984281 100644 Binary files a/frontend/assets/resources/animation/MonkGirl/MonkGirl.png and b/frontend/assets/resources/animation/MonkGirl/MonkGirl.png differ diff --git a/frontend/assets/resources/animation/MonkGirl/Walking.anim b/frontend/assets/resources/animation/MonkGirl/Walking.anim index 4b11534..6235387 100644 --- a/frontend/assets/resources/animation/MonkGirl/Walking.anim +++ b/frontend/assets/resources/animation/MonkGirl/Walking.anim @@ -3,9 +3,9 @@ "_name": "Walking", "_objFlags": 0, "_native": "", - "_duration": 0.26666666666666666, + "_duration": 0.6666666666666666, "sample": 60, - "speed": 0.25, + "speed": 1, "wrapMode": 2, "curveData": { "comps": { @@ -14,102 +14,116 @@ { "frame": 0, "value": { - "__uuid__": "275387d0-70fd-47f5-b82e-14165a14c45a" - } - }, - { - "frame": 0.016666666666666666, - "value": { - "__uuid__": "95e3dc3c-ee98-4ae8-899f-3d6539a649cb" - } - }, - { - "frame": 0.03333333333333333, - "value": { - "__uuid__": "7515ef50-3a14-4e58-8811-a0c890fc40f3" + "__uuid__": "60f04127-1580-4dda-828b-57d82e991398" } }, { "frame": 0.05, - "value": { - "__uuid__": "fa3d6703-1cfc-4f40-b61e-7ebf0fdac56a" - } - }, - { - "frame": 0.06666666666666667, "value": { "__uuid__": "37eea7f3-5a1d-4172-be38-9b492399ef44" } }, - { - "frame": 0.08333333333333333, - "value": { - "__uuid__": "0e2ad2ed-2b21-4e14-9607-5a341d9ed7e4" - } - }, { "frame": 0.1, "value": { - "__uuid__": "e1625aba-a6fc-4883-a696-2d9d56d3050d" - } - }, - { - "frame": 0.11666666666666667, - "value": { - "__uuid__": "86f805a2-a27c-4c96-8e11-acc448b0bdd0" - } - }, - { - "frame": 0.13333333333333333, - "value": { - "__uuid__": "63bcaa39-1cc5-461f-a175-0d7a0abd3510" + "__uuid__": "0e2ad2ed-2b21-4e14-9607-5a341d9ed7e4" } }, { "frame": 0.15, "value": { - "__uuid__": "691383d5-9199-4bd5-9803-403216331d7f" - } - }, - { - "frame": 0.16666666666666666, - "value": { - "__uuid__": "602818c2-1242-4a24-87ba-77f6accccbc3" - } - }, - { - "frame": 0.18333333333333332, - "value": { - "__uuid__": "650b8ccb-2a82-4972-bb5b-79a2cb4a3503" + "__uuid__": "e1625aba-a6fc-4883-a696-2d9d56d3050d" } }, { "frame": 0.2, "value": { - "__uuid__": "b264bcc2-71c7-45a6-8c94-be049bb0d163" - } - }, - { - "frame": 0.21666666666666667, - "value": { - "__uuid__": "a75af05e-3b54-45d8-b7ad-cbcf2b65b2a9" - } - }, - { - "frame": 0.23333333333333334, - "value": { - "__uuid__": "3e2e26f7-007a-4130-8d90-154dfcde96d3" + "__uuid__": "86f805a2-a27c-4c96-8e11-acc448b0bdd0" } }, { "frame": 0.25, + "value": { + "__uuid__": "63bcaa39-1cc5-461f-a175-0d7a0abd3510" + } + }, + { + "frame": 0.3, + "value": { + "__uuid__": "691383d5-9199-4bd5-9803-403216331d7f" + } + }, + { + "frame": 0.35, + "value": { + "__uuid__": "602818c2-1242-4a24-87ba-77f6accccbc3" + } + }, + { + "frame": 0.4, + "value": { + "__uuid__": "650b8ccb-2a82-4972-bb5b-79a2cb4a3503" + } + }, + { + "frame": 0.45, + "value": { + "__uuid__": "b264bcc2-71c7-45a6-8c94-be049bb0d163" + } + }, + { + "frame": 0.5, + "value": { + "__uuid__": "3e2e26f7-007a-4130-8d90-154dfcde96d3" + } + }, + { + "frame": 0.55, + "value": { + "__uuid__": "275387d0-70fd-47f5-b82e-14165a14c45a" + } + }, + { + "frame": 0.6, "value": { "__uuid__": "9cf71d99-7262-4a6c-8c27-06167d841a24" } + }, + { + "frame": 0.65, + "value": { + "__uuid__": "60f04127-1580-4dda-828b-57d82e991398" + } } ] } } }, - "events": [] + "events": [ + { + "frame": 0, + "func": "", + "params": [] + }, + { + "frame": 0, + "func": "", + "params": [] + }, + { + "frame": 0, + "func": "", + "params": [] + }, + { + "frame": 0, + "func": "", + "params": [] + }, + { + "frame": 0, + "func": "", + "params": [] + } + ] } \ No newline at end of file diff --git a/frontend/assets/resources/map/dungeon/map.tmx b/frontend/assets/resources/map/dungeon/map.tmx index 3639788..508e49e 100644 --- a/frontend/assets/resources/map/dungeon/map.tmx +++ b/frontend/assets/resources/map/dungeon/map.tmx @@ -9,10 +9,10 @@ - + - + diff --git a/frontend/assets/resources/pbfiles/room_downsync_frame.proto b/frontend/assets/resources/pbfiles/room_downsync_frame.proto index 7551b66..4c6c6e9 100644 --- a/frontend/assets/resources/pbfiles/room_downsync_frame.proto +++ b/frontend/assets/resources/pbfiles/room_downsync_frame.proto @@ -27,6 +27,8 @@ message PlayerDownsync { int32 framesInChState = 20; // number of frames elapsed in the current character state int32 activeSkillId = 21; int32 activeSkillHit = 22; + int32 framesInvinsible = 23; + int32 framesSelfLockVel = 24; string name = 997; string displayName = 998; @@ -103,13 +105,14 @@ message MeleeBullet { int32 selfLockVelX = 12; int32 selfLockVelY = 13; + int32 framesSelfLockVel = 14; - int32 hitboxOffsetX = 14; - int32 hitboxOffsetY = 15; - int32 hitboxSizeX = 16; - int32 hitboxSizeY = 17; + int32 hitboxOffsetX = 15; + int32 hitboxOffsetY = 16; + int32 hitboxSizeX = 17; + int32 hitboxSizeY = 18; - bool blowUp = 18; + bool blowUp = 19; } message BattleColliderInfo { diff --git a/frontend/assets/resources/prefabs/ControlledCharacter.prefab b/frontend/assets/resources/prefabs/ControlledCharacter.prefab index 5a5db55..80d2db2 100644 --- a/frontend/assets/resources/prefabs/ControlledCharacter.prefab +++ b/frontend/assets/resources/prefabs/ControlledCharacter.prefab @@ -552,7 +552,7 @@ "__id__": 11 }, "_children": [], - "_active": false, + "_active": true, "_components": [ { "__id__": 13 diff --git a/frontend/assets/scenes/offline_map.fire b/frontend/assets/scenes/offline_map.fire index 33d98c7..7059ef0 100644 --- a/frontend/assets/scenes/offline_map.fire +++ b/frontend/assets/scenes/offline_map.fire @@ -461,7 +461,7 @@ "array": [ 0, 0, - 209.83528025849938, + 216.50635094610968, 0, 0, 0, diff --git a/frontend/assets/scripts/Map.js b/frontend/assets/scripts/Map.js index 63a8d52..154e56f 100644 --- a/frontend/assets/scripts/Map.js +++ b/frontend/assets/scripts/Map.js @@ -329,6 +329,56 @@ cc.Class({ } }, + initDebugDrawers() { + const self = this; + if (self.showCriticalCoordinateLabels) { + const drawer1 = new cc.Node(); + drawer1.setPosition(cc.v2(0, 0)) + safelyAddChild(self.node, drawer1); + setLocalZOrder(drawer1, 999); + const g1 = drawer1.addComponent(cc.Graphics); + g1.lineWidth = 2; + self.g1 = g1; + + const collisionSpaceObjs = gopkgs.GetCollisionSpaceObjsJs(self.gopkgsCollisionSys); // This step is slow according to Chrome profiling, and we only need draw it once for those static barriers + for (let k in collisionSpaceObjs) { + const body = collisionSpaceObjs[k]; + let padding = 0; + if (null != body.Data && null != body.Data.JoinIndex) { + // character + if (1 == body.Data.JoinIndex) { + g1.strokeColor = cc.Color.BLUE; + } else { + g1.strokeColor = cc.Color.RED; + } + padding = self.snapIntoPlatformOverlap; + } else { + // barrier + g1.strokeColor = cc.Color.WHITE; + } + const points = body.Shape.Points; + const wpos = [body.X - self.spaceOffsetX, body.Y - self.spaceOffsetY]; + g1.moveTo(wpos[0], wpos[1]); + const cnt = points.length; + for (let j = 0; j < cnt; j += 1) { + const x = wpos[0] + points[j][0], + y = wpos[1] + points[j][1]; + g1.lineTo(x, y); + } + g1.lineTo(wpos[0], wpos[1]); + g1.stroke(); + } + + const drawer2 = new cc.Node(); + drawer2.setPosition(cc.v2(0, 0)) + safelyAddChild(self.node, drawer2); + setLocalZOrder(drawer2, 999); + const g2 = drawer2.addComponent(cc.Graphics); + g2.lineWidth = 2; + self.g2 = g2; + } + }, + onLoad() { const self = this; window.mapIns = self; @@ -418,16 +468,6 @@ cc.Class({ mapNode.removeAllChildren(); self._resetCurrentMatch(); - if (self.showCriticalCoordinateLabels) { - const drawer = new cc.Node(); - drawer.setPosition(cc.v2(0, 0)) - safelyAddChild(self.node, drawer); - setLocalZOrder(drawer, 999); - const g = drawer.addComponent(cc.Graphics); - g.lineWidth = 2; - self.g = g; - } - tiledMapIns.tmxAsset = tmxAsset; const newMapSize = tiledMapIns.getMapSize(); const newTileSize = tiledMapIns.getTileSize(); @@ -456,37 +496,6 @@ cc.Class({ const newBarrierCollider = gopkgs.GenerateConvexPolygonColliderJs(gopkgsBoundary, self.spaceOffsetX, self.spaceOffsetY, gopkgsBarrier, "Barrier"); self.gopkgsCollisionSys.Add(newBarrierCollider); - if (false && self.showCriticalCoordinateLabels) { - for (let i = 0; i < boundaryObj.length; ++i) { - const barrierVertLabelNode = new cc.Node(); - switch (i % 4) { - case 0: - barrierVertLabelNode.color = cc.Color.RED; - break; - case 1: - barrierVertLabelNode.color = cc.Color.GRAY; - break; - case 2: - barrierVertLabelNode.color = cc.Color.BLACK; - break; - default: - barrierVertLabelNode.color = cc.Color.MAGENTA; - break; - } - const wx = boundaryObj.anchor.x + boundaryObj[i].x, - wy = boundaryObj.anchor.y + boundaryObj[i].y; - barrierVertLabelNode.setPosition(cc.v2(wx, wy)); - const barrierVertLabel = barrierVertLabelNode.addComponent(cc.Label); - barrierVertLabel.fontSize = 12; - barrierVertLabel.lineHeight = barrierVertLabel.fontSize + 1; - barrierVertLabel.string = `(${wx.toFixed(1)}, ${wy.toFixed(1)})`; - safelyAddChild(self.node, barrierVertLabelNode); - setLocalZOrder(barrierVertLabelNode, 5); - - barrierVertLabelNode.active = true; - } - - } // console.log("Created barrier: ", newBarrierCollider); ++barrierIdCounter; const collisionBarrierIndex = (self.collisionBarrierIndexPrefix + barrierIdCounter); @@ -496,7 +505,7 @@ cc.Class({ Object.assign(self.selfPlayerInfo, { Id: self.selfPlayerInfo.playerId }); - + self.initDebugDrawers(); const reqData = window.pb.protos.WsReq.encode({ msgId: Date.now(), act: window.UPSYNC_MSG_ACT_PLAYER_COLLIDER_ACK, @@ -569,13 +578,13 @@ 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.activeSkillId, pbPlayer.activeSkillHit, 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.framesInvinsible, pbPlayer.framesSelfLockVel, pbPlayer.speed, pbPlayer.battleState, pbPlayer.characterState, pbPlayer.joinIndex, pbPlayer.hp, pbPlayer.maxHp, pbPlayer.colliderRadius, pbPlayer.inAir); jsPlayersArr[k] = jsPlayer; } const jsMeleeBulletsArr = []; for (let k in pbRdf.meleeBullets) { const pbBullet = pbRdf.meleeBullets[k]; - const jsBullet = gopkgs.NewMeleeBulletJs(pbBullet.originatedRenderFrameId, pbBullet.offenderJoinIndex, pbBullet.startupFrames, pbBullet.cancellableStFrame, pbBullet.cancellableEdFrame, pbBullet.activeFrames, pbBullet.hitStunFrames, pbBullet.blockStunFrames, pbBullet.pushbackVelX, pbBullet.pushbackVelY, pbBullet.damage, pbBullet.selfLockVelX, pbBullet.selfLockVelY, pbBullet.hitboxOffsetX, pbBullet.hitboxOffsetY, pbBullet.hitboxSizeX, pbBullet.hitboxSizeY, pbBullet.blowUp); + const jsBullet = gopkgs.NewMeleeBulletJs(pbBullet.originatedRenderFrameId, pbBullet.offenderJoinIndex, pbBullet.startupFrames, pbBullet.cancellableStFrame, pbBullet.cancellableEdFrame, pbBullet.activeFrames, pbBullet.hitStunFrames, pbBullet.blockStunFrames, pbBullet.pushbackVelX, pbBullet.pushbackVelY, pbBullet.damage, pbBullet.selfLockVelX, pbBullet.selfLockVelY, pbBullet.framesSelfLockVel, pbBullet.hitboxOffsetX, pbBullet.hitboxOffsetY, pbBullet.hitboxSizeX, pbBullet.hitboxSizeY, pbBullet.blowUp); jsMeleeBulletsArr.push(jsBullet); } @@ -849,7 +858,7 @@ batchInputFrameIdRange=[${batch[0].inputFrameId}, ${batch[batch.length - 1].inpu let st = performance.now(); let prevSelfInput = null, currSelfInput = null; - const noDelayInputFrameId = gopkgs.ConvertToNoDelayInputFrameId(self.renderFrameId); + const noDelayInputFrameId = gopkgs.ConvertToNoDelayInputFrameId(self.renderFrameId); if (gopkgs.ShouldGenerateInputFrameUpsync(self.renderFrameId)) { [prevSelfInput, currSelfInput] = self.getOrPrefabInputFrameUpsync(noDelayInputFrameId); } @@ -1207,71 +1216,42 @@ actuallyUsedinputList:{${self.inputFrameDownsyncStr(actuallyUsedInputClone)}}`); rightPadding = 0.1, topPadding = 0.1, bottomPadding = 0.1; - if (self.showCriticalCoordinateLabels) { - let g = self.g; - g.clear(); - - const collisionSpaceObjs = gopkgs.GetCollisionSpaceObjsJs(self.gopkgsCollisionSys); - for (let k in collisionSpaceObjs) { - const body = collisionSpaceObjs[k]; - let padding = 0; - if (null != body.Data && null != body.Data.JoinIndex) { - // character - if (1 == body.Data.JoinIndex) { - g.strokeColor = cc.Color.BLUE; - } else { - g.strokeColor = cc.Color.RED; - } - padding = self.snapIntoPlatformOverlap; - } else { - // barrier - g.strokeColor = cc.Color.WHITE; - } - const points = body.Shape.Points; - const wpos = [body.X - self.spaceOffsetX, body.Y - self.spaceOffsetY]; - g.moveTo(wpos[0], wpos[1]); - const cnt = points.length; - for (let j = 0; j < cnt; j += 1) { - const x = wpos[0] + points[j][0], - y = wpos[1] + points[j][1]; - g.lineTo(x, y); - } - g.lineTo(wpos[0], wpos[1]); - g.stroke(); - } + if (self.showCriticalCoordinateLabels && self.g2) { + let g2 = self.g2; + g2.clear(); for (let k in rdf.PlayersArr) { const player = rdf.PlayersArr[k]; if (1 == player.JoinIndex) { - g.strokeColor = cc.Color.BLUE; + g2.strokeColor = cc.Color.BLUE; } else { - g.strokeColor = cc.Color.RED; + g2.strokeColor = cc.Color.RED; } - let [colliderWidth, colliderHeight] = [player.ColliderRadius*2, player.ColliderRadius*4]; - switch (player.CharacterState) { - case ATK_CHARACTER_STATE.LayDown1[0]: - [colliderWidth, colliderHeight] = [player.ColliderRadius*4, player.ColliderRadius*2]; + let [colliderWidth, colliderHeight] = [player.ColliderRadius * 2, player.ColliderRadius * 4]; + switch (player.CharacterState) { + case ATK_CHARACTER_STATE.LayDown1[0]: + [colliderWidth, colliderHeight] = [player.ColliderRadius * 4, player.ColliderRadius * 2]; break; - case ATK_CHARACTER_STATE.BlownUp1[0]: - case ATK_CHARACTER_STATE.InAirIdle1NoJump[0]: - case ATK_CHARACTER_STATE.InAirIdle1ByJump[0]: - [colliderWidth, colliderHeight] = [player.ColliderRadius*2, player.ColliderRadius*2]; + case ATK_CHARACTER_STATE.BlownUp1[0]: + case ATK_CHARACTER_STATE.InAirIdle1NoJump[0]: + case ATK_CHARACTER_STATE.InAirIdle1ByJump[0]: + [colliderWidth, colliderHeight] = [player.ColliderRadius * 2, player.ColliderRadius * 2]; break; - } + } - const [halfColliderWidth, halfColliderHeight] = gopkgs.VirtualGridToWorldPos((colliderWidth >> 1), (colliderHeight >> 1)); + const [halfColliderWidth, halfColliderHeight] = gopkgs.VirtualGridToWorldPos((colliderWidth >> 1), (colliderHeight >> 1)); const [wx, wy] = gopkgs.VirtualGridToWorldPos(player.VirtualGridX, player.VirtualGridY); const [cx, cy] = gopkgs.WorldToPolygonColliderBLPos(wx, wy, halfColliderWidth, halfColliderHeight, topPadding, bottomPadding, leftPadding, rightPadding, 0, 0); - const pts = [[0, 0], [leftPadding + halfColliderWidth*2 + rightPadding, 0], [leftPadding + halfColliderWidth*2 + rightPadding, bottomPadding + halfColliderHeight*2 + topPadding], [0, bottomPadding + halfColliderHeight*2 + topPadding]]; + const pts = [[0, 0], [leftPadding + halfColliderWidth * 2 + rightPadding, 0], [leftPadding + halfColliderWidth * 2 + rightPadding, bottomPadding + halfColliderHeight * 2 + topPadding], [0, bottomPadding + halfColliderHeight * 2 + topPadding]]; - g.moveTo(cx, cy); + g2.moveTo(cx, cy); for (let j = 0; j < pts.length; j += 1) { - g.lineTo(pts[j][0] + cx, pts[j][1] + cy); + g2.lineTo(pts[j][0] + cx, pts[j][1] + cy); } - g.lineTo(cx, cy); - g.stroke(); + g2.lineTo(cx, cy); + g2.stroke(); } for (let k in rdf.MeleeBullets) { @@ -1281,11 +1261,11 @@ actuallyUsedinputList:{${self.inputFrameDownsyncStr(actuallyUsedInputClone)}}`); && meleeBullet.Bullet.OriginatedRenderFrameId + meleeBullet.Bullet.StartupFrames + meleeBullet.Bullet.ActiveFrames > rdf.Id ) { - const offender = rdf.PlayersArr[meleeBullet.Bullet.OffenderJoinIndex-1]; + const offender = rdf.PlayersArr[meleeBullet.Bullet.OffenderJoinIndex - 1]; if (1 == offender.JoinIndex) { - g.strokeColor = cc.Color.BLUE; + g2.strokeColor = cc.Color.BLUE; } else { - g.strokeColor = cc.Color.RED; + g2.strokeColor = cc.Color.RED; } let xfac = 1; // By now, straight Punch offset doesn't respect "y-axis" @@ -1295,14 +1275,14 @@ actuallyUsedinputList:{${self.inputFrameDownsyncStr(actuallyUsedInputClone)}}`); const [bulletWx, bulletWy] = gopkgs.VirtualGridToWorldPos(offender.VirtualGridX + xfac * meleeBullet.Bullet.HitboxOffsetX, offender.VirtualGridY); const [halfColliderWidth, halfColliderHeight] = gopkgs.VirtualGridToWorldPos((meleeBullet.Bullet.HitboxSizeX >> 1), (meleeBullet.Bullet.HitboxSizeY >> 1)); const [bulletCx, bulletCy] = gopkgs.WorldToPolygonColliderBLPos(bulletWx, bulletWy, halfColliderWidth, halfColliderHeight, topPadding, bottomPadding, leftPadding, rightPadding, 0, 0); - const pts = [[0, 0], [leftPadding + halfColliderWidth*2 + rightPadding, 0], [leftPadding + halfColliderWidth*2 + rightPadding, bottomPadding + halfColliderHeight*2 + topPadding], [0, bottomPadding + halfColliderHeight*2 + topPadding]]; + const pts = [[0, 0], [leftPadding + halfColliderWidth * 2 + rightPadding, 0], [leftPadding + halfColliderWidth * 2 + rightPadding, bottomPadding + halfColliderHeight * 2 + topPadding], [0, bottomPadding + halfColliderHeight * 2 + topPadding]]; - g.moveTo(bulletCx, bulletCy); + g2.moveTo(bulletCx, bulletCy); for (let j = 0; j < pts.length; j += 1) { - g.lineTo(pts[j][0] + bulletCx, pts[j][1] + bulletCy); + g2.lineTo(pts[j][0] + bulletCx, pts[j][1] + bulletCy); } - g.lineTo(bulletCx, bulletCy); - g.stroke(); + g2.lineTo(bulletCx, bulletCy); + g2.stroke(); } } } diff --git a/frontend/assets/scripts/OfflineMap.js b/frontend/assets/scripts/OfflineMap.js index ca75172..97e2a8a 100644 --- a/frontend/assets/scripts/OfflineMap.js +++ b/frontend/assets/scripts/OfflineMap.js @@ -13,7 +13,7 @@ cc.Class({ onLoad() { const self = this; window.mapIns = self; - self.showCriticalCoordinateLabels = false; + self.showCriticalCoordinateLabels = true; const mapNode = self.node; const canvasNode = mapNode.parent; @@ -83,42 +83,12 @@ cc.Class({ const newBarrierCollider = gopkgs.GenerateConvexPolygonColliderJs(gopkgsBoundary, self.spaceOffsetX, self.spaceOffsetY, gopkgsBarrier, "Barrier"); self.gopkgsCollisionSys.Add(newBarrierCollider); - if (false && self.showCriticalCoordinateLabels) { - for (let i = 0; i < boundaryObj.length; ++i) { - const barrierVertLabelNode = new cc.Node(); - switch (i % 4) { - case 0: - barrierVertLabelNode.color = cc.Color.RED; - break; - case 1: - barrierVertLabelNode.color = cc.Color.GRAY; - break; - case 2: - barrierVertLabelNode.color = cc.Color.BLACK; - break; - default: - barrierVertLabelNode.color = cc.Color.MAGENTA; - break; - } - const wx = boundaryObj.anchor.x + boundaryObj[i].x, - wy = boundaryObj.anchor.y + boundaryObj[i].y; - barrierVertLabelNode.setPosition(cc.v2(wx, wy)); - const barrierVertLabel = barrierVertLabelNode.addComponent(cc.Label); - barrierVertLabel.fontSize = 12; - barrierVertLabel.lineHeight = barrierVertLabel.fontSize + 1; - barrierVertLabel.string = `(${wx.toFixed(1)}, ${wy.toFixed(1)})`; - safelyAddChild(self.node, barrierVertLabelNode); - setLocalZOrder(barrierVertLabelNode, 5); - - barrierVertLabelNode.active = true; - } - - } // console.log("Created barrier: ", newBarrierCollider); ++barrierIdCounter; const collisionBarrierIndex = (self.collisionBarrierIndexPrefix + barrierIdCounter); self.gopkgsCollisionSysMap[collisionBarrierIndex] = newBarrierCollider; } + self.initDebugDrawers(); const p1Vpos = gopkgs.WorldToVirtualGridPos(boundaryObjs.playerStartingPositions[0].x, boundaryObjs.playerStartingPositions[0].y); const p2Vpos = gopkgs.WorldToVirtualGridPos(boundaryObjs.playerStartingPositions[1].x, boundaryObjs.playerStartingPositions[1].y); @@ -159,7 +129,7 @@ cc.Class({ inAir: true, }), ], - speciesIdList: [1, 0], + speciesIdList: [0, 1], }); self.selfPlayerInfo = { 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 3546a90..bacd9a9 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 @@ -1213,6 +1213,8 @@ $root.protos = (function() { * @property {number|null} [framesInChState] PlayerDownsync framesInChState * @property {number|null} [activeSkillId] PlayerDownsync activeSkillId * @property {number|null} [activeSkillHit] PlayerDownsync activeSkillHit + * @property {number|null} [framesInvinsible] PlayerDownsync framesInvinsible + * @property {number|null} [framesSelfLockVel] PlayerDownsync framesSelfLockVel * @property {string|null} [name] PlayerDownsync name * @property {string|null} [displayName] PlayerDownsync displayName * @property {string|null} [avatar] PlayerDownsync avatar @@ -1409,6 +1411,22 @@ $root.protos = (function() { */ PlayerDownsync.prototype.activeSkillHit = 0; + /** + * PlayerDownsync framesInvinsible. + * @member {number} framesInvinsible + * @memberof protos.PlayerDownsync + * @instance + */ + PlayerDownsync.prototype.framesInvinsible = 0; + + /** + * PlayerDownsync framesSelfLockVel. + * @member {number} framesSelfLockVel + * @memberof protos.PlayerDownsync + * @instance + */ + PlayerDownsync.prototype.framesSelfLockVel = 0; + /** * PlayerDownsync name. * @member {string} name @@ -1501,6 +1519,10 @@ $root.protos = (function() { 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.framesInvinsible != null && Object.hasOwnProperty.call(message, "framesInvinsible")) + writer.uint32(/* id 23, wireType 0 =*/184).int32(message.framesInvinsible); + if (message.framesSelfLockVel != null && Object.hasOwnProperty.call(message, "framesSelfLockVel")) + writer.uint32(/* id 24, wireType 0 =*/192).int32(message.framesSelfLockVel); 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")) @@ -1629,6 +1651,14 @@ $root.protos = (function() { message.activeSkillHit = reader.int32(); break; } + case 23: { + message.framesInvinsible = reader.int32(); + break; + } + case 24: { + message.framesSelfLockVel = reader.int32(); + break; + } case 997: { message.name = reader.string(); break; @@ -1742,6 +1772,12 @@ $root.protos = (function() { if (message.activeSkillHit != null && message.hasOwnProperty("activeSkillHit")) if (!$util.isInteger(message.activeSkillHit)) return "activeSkillHit: integer expected"; + if (message.framesInvinsible != null && message.hasOwnProperty("framesInvinsible")) + if (!$util.isInteger(message.framesInvinsible)) + return "framesInvinsible: integer expected"; + if (message.framesSelfLockVel != null && message.hasOwnProperty("framesSelfLockVel")) + if (!$util.isInteger(message.framesSelfLockVel)) + return "framesSelfLockVel: integer expected"; if (message.name != null && message.hasOwnProperty("name")) if (!$util.isString(message.name)) return "name: string expected"; @@ -1810,6 +1846,10 @@ $root.protos = (function() { message.activeSkillId = object.activeSkillId | 0; if (object.activeSkillHit != null) message.activeSkillHit = object.activeSkillHit | 0; + if (object.framesInvinsible != null) + message.framesInvinsible = object.framesInvinsible | 0; + if (object.framesSelfLockVel != null) + message.framesSelfLockVel = object.framesSelfLockVel | 0; if (object.name != null) message.name = String(object.name); if (object.displayName != null) @@ -1855,6 +1895,8 @@ $root.protos = (function() { object.framesInChState = 0; object.activeSkillId = 0; object.activeSkillHit = 0; + object.framesInvinsible = 0; + object.framesSelfLockVel = 0; object.name = ""; object.displayName = ""; object.avatar = ""; @@ -1903,6 +1945,10 @@ $root.protos = (function() { object.activeSkillId = message.activeSkillId; if (message.activeSkillHit != null && message.hasOwnProperty("activeSkillHit")) object.activeSkillHit = message.activeSkillHit; + if (message.framesInvinsible != null && message.hasOwnProperty("framesInvinsible")) + object.framesInvinsible = message.framesInvinsible; + if (message.framesSelfLockVel != null && message.hasOwnProperty("framesSelfLockVel")) + object.framesSelfLockVel = message.framesSelfLockVel; if (message.name != null && message.hasOwnProperty("name")) object.name = message.name; if (message.displayName != null && message.hasOwnProperty("displayName")) @@ -4042,6 +4088,7 @@ $root.protos = (function() { * @property {number|null} [damage] MeleeBullet damage * @property {number|null} [selfLockVelX] MeleeBullet selfLockVelX * @property {number|null} [selfLockVelY] MeleeBullet selfLockVelY + * @property {number|null} [framesSelfLockVel] MeleeBullet framesSelfLockVel * @property {number|null} [hitboxOffsetX] MeleeBullet hitboxOffsetX * @property {number|null} [hitboxOffsetY] MeleeBullet hitboxOffsetY * @property {number|null} [hitboxSizeX] MeleeBullet hitboxSizeX @@ -4168,6 +4215,14 @@ $root.protos = (function() { */ MeleeBullet.prototype.selfLockVelY = 0; + /** + * MeleeBullet framesSelfLockVel. + * @member {number} framesSelfLockVel + * @memberof protos.MeleeBullet + * @instance + */ + MeleeBullet.prototype.framesSelfLockVel = 0; + /** * MeleeBullet hitboxOffsetX. * @member {number} hitboxOffsetX @@ -4258,16 +4313,18 @@ $root.protos = (function() { 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.framesSelfLockVel != null && Object.hasOwnProperty.call(message, "framesSelfLockVel")) + writer.uint32(/* id 14, wireType 0 =*/112).int32(message.framesSelfLockVel); if (message.hitboxOffsetX != null && Object.hasOwnProperty.call(message, "hitboxOffsetX")) - writer.uint32(/* id 14, wireType 0 =*/112).int32(message.hitboxOffsetX); + writer.uint32(/* id 15, wireType 0 =*/120).int32(message.hitboxOffsetX); if (message.hitboxOffsetY != null && Object.hasOwnProperty.call(message, "hitboxOffsetY")) - writer.uint32(/* id 15, wireType 0 =*/120).int32(message.hitboxOffsetY); + writer.uint32(/* id 16, wireType 0 =*/128).int32(message.hitboxOffsetY); if (message.hitboxSizeX != null && Object.hasOwnProperty.call(message, "hitboxSizeX")) - writer.uint32(/* id 16, wireType 0 =*/128).int32(message.hitboxSizeX); + writer.uint32(/* id 17, wireType 0 =*/136).int32(message.hitboxSizeX); if (message.hitboxSizeY != null && Object.hasOwnProperty.call(message, "hitboxSizeY")) - writer.uint32(/* id 17, wireType 0 =*/136).int32(message.hitboxSizeY); + writer.uint32(/* id 18, wireType 0 =*/144).int32(message.hitboxSizeY); if (message.blowUp != null && Object.hasOwnProperty.call(message, "blowUp")) - writer.uint32(/* id 18, wireType 0 =*/144).bool(message.blowUp); + writer.uint32(/* id 19, wireType 0 =*/152).bool(message.blowUp); return writer; }; @@ -4355,22 +4412,26 @@ $root.protos = (function() { break; } case 14: { - message.hitboxOffsetX = reader.int32(); + message.framesSelfLockVel = reader.int32(); break; } case 15: { - message.hitboxOffsetY = reader.int32(); + message.hitboxOffsetX = reader.int32(); break; } case 16: { - message.hitboxSizeX = reader.int32(); + message.hitboxOffsetY = reader.int32(); break; } case 17: { - message.hitboxSizeY = reader.int32(); + message.hitboxSizeX = reader.int32(); break; } case 18: { + message.hitboxSizeY = reader.int32(); + break; + } + case 19: { message.blowUp = reader.bool(); break; } @@ -4448,6 +4509,9 @@ $root.protos = (function() { if (message.selfLockVelY != null && message.hasOwnProperty("selfLockVelY")) if (!$util.isInteger(message.selfLockVelY)) return "selfLockVelY: integer expected"; + if (message.framesSelfLockVel != null && message.hasOwnProperty("framesSelfLockVel")) + if (!$util.isInteger(message.framesSelfLockVel)) + return "framesSelfLockVel: integer expected"; if (message.hitboxOffsetX != null && message.hasOwnProperty("hitboxOffsetX")) if (!$util.isInteger(message.hitboxOffsetX)) return "hitboxOffsetX: integer expected"; @@ -4504,6 +4568,8 @@ $root.protos = (function() { message.selfLockVelX = object.selfLockVelX | 0; if (object.selfLockVelY != null) message.selfLockVelY = object.selfLockVelY | 0; + if (object.framesSelfLockVel != null) + message.framesSelfLockVel = object.framesSelfLockVel | 0; if (object.hitboxOffsetX != null) message.hitboxOffsetX = object.hitboxOffsetX | 0; if (object.hitboxOffsetY != null) @@ -4544,6 +4610,7 @@ $root.protos = (function() { object.damage = 0; object.selfLockVelX = 0; object.selfLockVelY = 0; + object.framesSelfLockVel = 0; object.hitboxOffsetX = 0; object.hitboxOffsetY = 0; object.hitboxSizeX = 0; @@ -4576,6 +4643,8 @@ $root.protos = (function() { object.selfLockVelX = message.selfLockVelX; if (message.selfLockVelY != null && message.hasOwnProperty("selfLockVelY")) object.selfLockVelY = message.selfLockVelY; + if (message.framesSelfLockVel != null && message.hasOwnProperty("framesSelfLockVel")) + object.framesSelfLockVel = message.framesSelfLockVel; if (message.hitboxOffsetX != null && message.hasOwnProperty("hitboxOffsetX")) object.hitboxOffsetX = message.hitboxOffsetX; if (message.hitboxOffsetY != null && message.hasOwnProperty("hitboxOffsetY")) diff --git a/jsexport/battle/battle.go b/jsexport/battle/battle.go index 34e2ad0..95f82d9 100644 --- a/jsexport/battle/battle.go +++ b/jsexport/battle/battle.go @@ -32,6 +32,8 @@ const ( NO_SKILL = -1 NO_SKILL_HIT = -1 + + NO_LOCK_VEL = int32(-1) ) // These directions are chosen such that when speed is changed to "(speedX+delta, speedY+delta)" for any of them, the direction is unchanged. @@ -86,7 +88,17 @@ var invinsibleSet = map[int32]bool{ ATK_CHARACTER_STATE_GET_UP1: true, } -var nonAttackingSet = map[int32]bool{} +var nonAttackingSet = map[int32]bool{ + ATK_CHARACTER_STATE_IDLE1: true, + ATK_CHARACTER_STATE_WALKING: true, + ATK_CHARACTER_STATE_INAIR_IDLE1_NO_JUMP: true, + ATK_CHARACTER_STATE_INAIR_IDLE1_BY_JUMP: true, + ATK_CHARACTER_STATE_ATKED1: true, + ATK_CHARACTER_STATE_INAIR_ATKED1: true, + ATK_CHARACTER_STATE_BLOWN_UP1: true, + ATK_CHARACTER_STATE_LAY_DOWN1: true, + ATK_CHARACTER_STATE_GET_UP1: true, +} func ShouldPrefabInputFrameDownsync(prevRenderFrameId int32, renderFrameId int32) (bool, int32) { for i := prevRenderFrameId + 1; i <= renderFrameId; i++ { @@ -426,31 +438,39 @@ func ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(inputsBuffer *RingBuffer // Make a copy first for i, currPlayerDownsync := range currRenderFrame.PlayersArr { nextRenderFramePlayers[i] = &PlayerDownsync{ - Id: currPlayerDownsync.Id, - VirtualGridX: currPlayerDownsync.VirtualGridX, - VirtualGridY: currPlayerDownsync.VirtualGridY, - DirX: currPlayerDownsync.DirX, - DirY: currPlayerDownsync.DirY, - VelX: currPlayerDownsync.VelX, - VelY: currPlayerDownsync.VelY, - CharacterState: currPlayerDownsync.CharacterState, - InAir: true, - Speed: currPlayerDownsync.Speed, - BattleState: currPlayerDownsync.BattleState, - Score: currPlayerDownsync.Score, - Removed: currPlayerDownsync.Removed, - JoinIndex: currPlayerDownsync.JoinIndex, - Hp: currPlayerDownsync.Hp, - MaxHp: currPlayerDownsync.MaxHp, - FramesToRecover: currPlayerDownsync.FramesToRecover - 1, - FramesInChState: currPlayerDownsync.FramesInChState + 1, - ActiveSkillId: currPlayerDownsync.ActiveSkillId, - ActiveSkillHit: currPlayerDownsync.ActiveSkillHit, - ColliderRadius: currPlayerDownsync.ColliderRadius, + Id: currPlayerDownsync.Id, + VirtualGridX: currPlayerDownsync.VirtualGridX, + VirtualGridY: currPlayerDownsync.VirtualGridY, + DirX: currPlayerDownsync.DirX, + DirY: currPlayerDownsync.DirY, + VelX: currPlayerDownsync.VelX, + VelY: currPlayerDownsync.VelY, + CharacterState: currPlayerDownsync.CharacterState, + InAir: true, + Speed: currPlayerDownsync.Speed, + BattleState: currPlayerDownsync.BattleState, + Score: currPlayerDownsync.Score, + Removed: currPlayerDownsync.Removed, + JoinIndex: currPlayerDownsync.JoinIndex, + Hp: currPlayerDownsync.Hp, + MaxHp: currPlayerDownsync.MaxHp, + FramesToRecover: currPlayerDownsync.FramesToRecover - 1, + FramesInChState: currPlayerDownsync.FramesInChState + 1, + ActiveSkillId: currPlayerDownsync.ActiveSkillId, + ActiveSkillHit: currPlayerDownsync.ActiveSkillHit, + FramesInvinsible: currPlayerDownsync.FramesInvinsible - 1, + FramesSelfLockVel: currPlayerDownsync.FramesSelfLockVel - 1, + ColliderRadius: currPlayerDownsync.ColliderRadius, } if nextRenderFramePlayers[i].FramesToRecover < 0 { nextRenderFramePlayers[i].FramesToRecover = 0 } + if nextRenderFramePlayers[i].FramesInvinsible < 0 { + nextRenderFramePlayers[i].FramesInvinsible = 0 + } + if nextRenderFramePlayers[i].FramesSelfLockVel < 0 { + nextRenderFramePlayers[i].FramesSelfLockVel = 0 + } } nextRenderFrameMeleeBullets := make([]*MeleeBullet, 0, len(currRenderFrame.MeleeBullets)) // Is there any better way to reduce malloc/free impact, e.g. smart prediction for fixed memory allocation? @@ -475,8 +495,6 @@ func ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(inputsBuffer *RingBuffer thatPlayerInNextFrame.ActiveSkillId = int32(skillId) thatPlayerInNextFrame.ActiveSkillHit = 0 - // TODO: Respect non-zero "selfLockVel" - // Hardcoded to use only the first hit for now switch v := skillConfig.Hits[thatPlayerInNextFrame.ActiveSkillHit].(type) { case *MeleeBullet: @@ -485,12 +503,30 @@ func ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(inputsBuffer *RingBuffer newBullet.OffenderJoinIndex = joinIndex nextRenderFrameMeleeBullets = append(nextRenderFrameMeleeBullets, &newBullet) thatPlayerInNextFrame.FramesToRecover = skillConfig.RecoveryFrames + + hasLockVel := false + if NO_LOCK_VEL != v.SelfLockVelX { + hasLockVel = true + xfac := int32(1) + if 0 > thatPlayerInNextFrame.DirX { + xfac = -xfac + } + thatPlayerInNextFrame.VelX = xfac * v.SelfLockVelX + thatPlayerInNextFrame.FramesSelfLockVel = v.FramesSelfLockVel + } + if NO_LOCK_VEL != v.SelfLockVelY { + hasLockVel = true + thatPlayerInNextFrame.VelY = v.SelfLockVelY + thatPlayerInNextFrame.FramesSelfLockVel = v.FramesSelfLockVel + } + if false == hasLockVel { + if false == currPlayerDownsync.InAir { + thatPlayerInNextFrame.VelX = 0 + } + } } thatPlayerInNextFrame.CharacterState = skillConfig.BoundChState - if false == currPlayerDownsync.InAir { - thatPlayerInNextFrame.VelX = 0 - } continue // Don't allow movement if skill is used } @@ -640,9 +676,9 @@ func ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(inputsBuffer *RingBuffer thatPlayerInNextFrame.FramesToRecover = chConfig.GetUpFramesToRecover } } else if ATK_CHARACTER_STATE_GET_UP1 == thatPlayerInNextFrame.CharacterState { - if thatPlayerInNextFrame.FramesInChState == chConfig.GetUpFrames { - // [WARNING] Before reaching here, the player had 3 invinsible frames to either attack or jump, if it ever took any action then this condition wouldn't have been met, thus we hereby only transit it back to IDLE as it took no action + if 0 == thatPlayerInNextFrame.FramesToRecover { thatPlayerInNextFrame.CharacterState = ATK_CHARACTER_STATE_IDLE1 + thatPlayerInNextFrame.FramesInvinsible = chConfig.GetUpInvinsibleFrames } } } @@ -671,6 +707,9 @@ func ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(inputsBuffer *RingBuffer if _, existent := invinsibleSet[t.CharacterState]; existent { continue } + if 0 < t.FramesInvinsible { + continue + } overlapped, _, _, _ := CalcPushbacks(0, 0, bulletShape, defenderShape) if !overlapped { continue diff --git a/jsexport/battle/characterConfig.go b/jsexport/battle/characterConfig.go index 8e8feaa..d72c52b 100644 --- a/jsexport/battle/characterConfig.go +++ b/jsexport/battle/characterConfig.go @@ -12,8 +12,8 @@ type CharacterConfig struct { LayDownFrames int32 LayDownFramesToRecover int32 - GetUpFrames int32 - GetUpFramesToRecover int32 + GetUpInvinsibleFrames int32 + GetUpFramesToRecover int32 Speed int32 JumpingInitVelY int32 @@ -32,8 +32,8 @@ var Characters = map[int]*CharacterConfig{ LayDownFrames: int32(16), LayDownFramesToRecover: int32(16), - GetUpFrames: int32(33), - GetUpFramesToRecover: int32(30), // 3 invinsible frames for just-blown-up character to make a comeback + GetUpInvinsibleFrames: int32(10), + GetUpFramesToRecover: int32(27), Speed: int32(float64(1.2) * WORLD_TO_VIRTUAL_GRID_RATIO), JumpingInitVelY: int32(float64(8) * WORLD_TO_VIRTUAL_GRID_RATIO), @@ -75,8 +75,8 @@ var Characters = map[int]*CharacterConfig{ LayDownFrames: int32(16), LayDownFramesToRecover: int32(16), - GetUpFrames: int32(30), - GetUpFramesToRecover: int32(27), // 3 invinsible frames for just-blown-up character to make a comeback + GetUpInvinsibleFrames: int32(10), + GetUpFramesToRecover: int32(27), Speed: int32(float64(1.4) * WORLD_TO_VIRTUAL_GRID_RATIO), JumpingInitVelY: int32(float64(7.5) * WORLD_TO_VIRTUAL_GRID_RATIO), @@ -125,6 +125,8 @@ var skills = map[int]*Skill{ HitStunFrames: int32(13), BlockStunFrames: int32(9), Damage: int32(5), + SelfLockVelX: int32(float64(0.05) * WORLD_TO_VIRTUAL_GRID_RATIO), + SelfLockVelY: NO_LOCK_VEL, PushbackVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO), PushbackVelY: int32(0), HitboxOffsetX: int32(float64(12) * WORLD_TO_VIRTUAL_GRID_RATIO), @@ -156,6 +158,8 @@ var skills = map[int]*Skill{ HitStunFrames: int32(18), BlockStunFrames: int32(9), Damage: int32(5), + SelfLockVelX: int32(float64(0.1) * WORLD_TO_VIRTUAL_GRID_RATIO), + SelfLockVelY: NO_LOCK_VEL, PushbackVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO), PushbackVelY: int32(0), HitboxOffsetX: int32(float64(18) * WORLD_TO_VIRTUAL_GRID_RATIO), @@ -172,24 +176,26 @@ var skills = map[int]*Skill{ }, }, 3: &Skill{ - RecoveryFrames: int32(60), - RecoveryFramesOnBlock: int32(60), - RecoveryFramesOnHit: int32(60), + RecoveryFrames: int32(70), + RecoveryFramesOnBlock: int32(70), + RecoveryFramesOnHit: int32(70), ReleaseTriggerType: int32(1), BoundChState: ATK_CHARACTER_STATE_ATK3, Hits: []interface{}{ &MeleeBullet{ Bullet: Bullet{ StartupFrames: int32(15), - ActiveFrames: int32(40), + ActiveFrames: int32(30), HitStunFrames: MAX_INT32, BlockStunFrames: int32(9), Damage: int32(10), + SelfLockVelX: NO_LOCK_VEL, + SelfLockVelY: NO_LOCK_VEL, PushbackVelX: int32(float64(2) * WORLD_TO_VIRTUAL_GRID_RATIO), PushbackVelY: int32(float64(7) * WORLD_TO_VIRTUAL_GRID_RATIO), - HitboxOffsetX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO), + HitboxOffsetX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxOffsetY: int32(0), - HitboxSizeX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), + HitboxSizeX: int32(float64(48) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO), BlowUp: true, }, @@ -210,6 +216,8 @@ var skills = map[int]*Skill{ HitStunFrames: int32(13), BlockStunFrames: int32(9), Damage: int32(5), + SelfLockVelX: int32(float64(0.05) * WORLD_TO_VIRTUAL_GRID_RATIO), + SelfLockVelY: NO_LOCK_VEL, PushbackVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO), PushbackVelY: int32(0), HitboxOffsetX: int32(float64(12) * WORLD_TO_VIRTUAL_GRID_RATIO), @@ -241,6 +249,8 @@ var skills = map[int]*Skill{ HitStunFrames: int32(18), BlockStunFrames: int32(9), Damage: int32(5), + SelfLockVelX: int32(float64(0.1) * WORLD_TO_VIRTUAL_GRID_RATIO), + SelfLockVelY: NO_LOCK_VEL, PushbackVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO), PushbackVelY: int32(0), HitboxOffsetX: int32(float64(18) * WORLD_TO_VIRTUAL_GRID_RATIO), @@ -270,6 +280,8 @@ var skills = map[int]*Skill{ HitStunFrames: MAX_INT32, BlockStunFrames: int32(9), Damage: int32(10), + SelfLockVelX: int32(float64(-0.1) * WORLD_TO_VIRTUAL_GRID_RATIO), + SelfLockVelY: NO_LOCK_VEL, PushbackVelX: int32(float64(2) * WORLD_TO_VIRTUAL_GRID_RATIO), PushbackVelY: int32(float64(7) * WORLD_TO_VIRTUAL_GRID_RATIO), HitboxOffsetX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO), @@ -295,6 +307,8 @@ var skills = map[int]*Skill{ HitStunFrames: int32(18), BlockStunFrames: int32(9), Damage: int32(5), + SelfLockVelX: NO_LOCK_VEL, + SelfLockVelY: NO_LOCK_VEL, PushbackVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO), PushbackVelY: int32(0), HitboxOffsetX: int32(float64(12) * WORLD_TO_VIRTUAL_GRID_RATIO), @@ -319,6 +333,8 @@ var skills = map[int]*Skill{ HitStunFrames: int32(18), BlockStunFrames: int32(9), Damage: int32(5), + SelfLockVelX: NO_LOCK_VEL, + SelfLockVelY: NO_LOCK_VEL, PushbackVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO), PushbackVelY: int32(0), HitboxOffsetX: int32(float64(12) * WORLD_TO_VIRTUAL_GRID_RATIO), diff --git a/jsexport/battle/room_downsync_frame.go b/jsexport/battle/room_downsync_frame.go index 110bf99..39465a3 100644 --- a/jsexport/battle/room_downsync_frame.go +++ b/jsexport/battle/room_downsync_frame.go @@ -36,6 +36,9 @@ type PlayerDownsync struct { ActiveSkillId int32 ActiveSkillHit int32 + + FramesInvinsible int32 + FramesSelfLockVel int32 } type InputFrameDecoded struct { @@ -70,8 +73,9 @@ type Bullet struct { PushbackVelY int32 Damage int32 - SelfLockVelX int32 - SelfLockVelY int32 + SelfLockVelX int32 + SelfLockVelY int32 + FramesSelfLockVel int32 HitboxOffsetX int32 HitboxOffsetY int32 diff --git a/jsexport/main.go b/jsexport/main.go index 275f902..2516d25 100644 --- a/jsexport/main.go +++ b/jsexport/main.go @@ -42,31 +42,32 @@ func NewBarrierJs(boundary *Polygon2D) *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 { +func NewPlayerDownsyncJs(id, virtualGridX, virtualGridY, dirX, dirY, velX, velY, framesToRecover, framesInChState, activeSkillId, activeSkillHit, framesInvinsible, framesSelfLockVel, speed, battleState, characterState, joinIndex, hp, maxHp, colliderRadius int32, inAir bool) *js.Object { return js.MakeWrapper(&PlayerDownsync{ - Id: id, - VirtualGridX: virtualGridX, - VirtualGridY: virtualGridY, - DirX: dirX, - DirY: dirY, - VelX: velX, - VelY: velY, - FramesToRecover: framesToRecover, - FramesInChState: framesInChState, - ActiveSkillId: activeSkillId, - ActiveSkillHit: activeSkillHit, - Speed: speed, - BattleState: battleState, - CharacterState: characterState, - JoinIndex: joinIndex, - Hp: hp, - MaxHp: maxHp, - ColliderRadius: colliderRadius, - InAir: inAir, + Id: id, + VirtualGridX: virtualGridX, + VirtualGridY: virtualGridY, + DirX: dirX, + DirY: dirY, + VelX: velX, + VelY: velY, + FramesToRecover: framesToRecover, + FramesInChState: framesInChState, + ActiveSkillId: activeSkillId, + ActiveSkillHit: activeSkillHit, + FramesInvinsible: framesInvinsible, + Speed: speed, + BattleState: battleState, + CharacterState: characterState, + JoinIndex: joinIndex, + Hp: hp, + MaxHp: maxHp, + ColliderRadius: colliderRadius, + InAir: inAir, }) } -func NewMeleeBulletJs(originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY int32, blowUp bool) *js.Object { +func NewMeleeBulletJs(originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, framesSelfLockVel, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY int32, blowUp bool) *js.Object { return js.MakeWrapper(&MeleeBullet{ Bullet: Bullet{ OriginatedRenderFrameId: originatedRenderFrameId, @@ -83,8 +84,9 @@ func NewMeleeBulletJs(originatedRenderFrameId, offenderJoinIndex, startupFrames, PushbackVelY: pushbackVelY, Damage: damage, - SelfLockVelX: selfLockVelX, - SelfLockVelY: selfLockVelY, + SelfLockVelX: selfLockVelX, + SelfLockVelY: selfLockVelY, + FramesSelfLockVel: framesSelfLockVel, HitboxOffsetX: hitboxOffsetX, HitboxOffsetY: hitboxOffsetY,