From 2d04363d69ab3714a86793b2f59ec428ad95319d Mon Sep 17 00:00:00 2001 From: genxium Date: Wed, 4 Jan 2023 23:48:00 +0800 Subject: [PATCH] Fixed frontend debug drawer. --- battle_srv/models/pb_type_convert.go | 7 + battle_srv/protos/room_downsync_frame.pb.go | 426 +++++++------ frontend/assets/plugin_scripts/jsexport.js | 104 ++-- .../animation/MonkGirl/MonkGirl.plist | 318 +++++----- .../animation/MonkGirl/MonkGirl.plist.meta | 560 +++++++++--------- .../resources/animation/MonkGirl/MonkGirl.png | Bin 97644 -> 97828 bytes .../resources/animation/MonkGirl/Walking.anim | 148 ++--- frontend/assets/resources/map/dungeon/map.tmx | 4 +- .../pbfiles/room_downsync_frame.proto | 13 +- .../prefabs/ControlledCharacter.prefab | 2 +- frontend/assets/scenes/offline_map.fire | 2 +- frontend/assets/scripts/Map.js | 184 +++--- frontend/assets/scripts/OfflineMap.js | 36 +- ...om_downsync_frame_proto_bundle.forcemsg.js | 87 ++- jsexport/battle/battle.go | 97 ++- jsexport/battle/characterConfig.go | 40 +- jsexport/battle/room_downsync_frame.go | 8 +- jsexport/main.go | 48 +- 18 files changed, 1127 insertions(+), 957 deletions(-) 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 9c31fbdc9b8f11fdec03a24e0efc099f5441f01b..098428119055b9473306670b4049ee75b4334588 100644 GIT binary patch literal 97828 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

v)`byIyN_CT*<*G) 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 RQ`!Ik002ovPDHLkV1i(me+U2o literal 97644 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 $>udZ@KF@B$ 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 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,