2022-12-31 07:47:45 +00:00
|
|
|
package battle
|
|
|
|
|
2023-01-01 14:51:46 +00:00
|
|
|
type SkillMapperType func(patternId int, currPlayerDownsync *PlayerDownsync) int
|
|
|
|
|
2023-01-01 07:43:25 +00:00
|
|
|
type CharacterConfig struct {
|
|
|
|
SpeciesId int
|
|
|
|
SpeciesName string
|
|
|
|
|
|
|
|
InAirIdleFrameIdxTurningPoint int
|
|
|
|
InAirIdleFrameIdxTurnedCycle int
|
|
|
|
|
|
|
|
LayDownFrames int32
|
|
|
|
LayDownFramesToRecover int32
|
|
|
|
|
2023-01-04 15:48:00 +00:00
|
|
|
GetUpInvinsibleFrames int32
|
|
|
|
GetUpFramesToRecover int32
|
2023-01-01 07:43:25 +00:00
|
|
|
|
2023-01-02 15:35:56 +00:00
|
|
|
Speed int32
|
2023-01-01 07:43:25 +00:00
|
|
|
JumpingInitVelY int32
|
|
|
|
|
2023-01-01 14:51:46 +00:00
|
|
|
SkillMapper SkillMapperType
|
2023-01-01 07:43:25 +00:00
|
|
|
}
|
|
|
|
|
2022-12-31 07:47:45 +00:00
|
|
|
var Characters = map[int]*CharacterConfig{
|
|
|
|
0: &CharacterConfig{
|
|
|
|
SpeciesId: 0,
|
|
|
|
SpeciesName: "MonkGirl",
|
|
|
|
|
|
|
|
InAirIdleFrameIdxTurningPoint: 11,
|
|
|
|
InAirIdleFrameIdxTurnedCycle: 1,
|
|
|
|
|
2023-01-01 07:43:25 +00:00
|
|
|
LayDownFrames: int32(16),
|
|
|
|
LayDownFramesToRecover: int32(16),
|
2022-12-31 07:47:45 +00:00
|
|
|
|
2023-01-04 15:48:00 +00:00
|
|
|
GetUpInvinsibleFrames: int32(10),
|
|
|
|
GetUpFramesToRecover: int32(27),
|
2022-12-31 07:47:45 +00:00
|
|
|
|
2023-01-02 15:35:56 +00:00
|
|
|
Speed: int32(float64(1.2) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
2023-01-01 07:43:25 +00:00
|
|
|
JumpingInitVelY: int32(float64(8) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
2022-12-31 07:47:45 +00:00
|
|
|
|
2023-01-01 14:51:46 +00:00
|
|
|
SkillMapper: func(patternId int, currPlayerDownsync *PlayerDownsync) int {
|
|
|
|
if 1 == patternId {
|
|
|
|
if 0 == currPlayerDownsync.FramesToRecover {
|
|
|
|
if currPlayerDownsync.InAir {
|
|
|
|
return 255
|
|
|
|
} else {
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
// Now that "0 < FramesToRecover", we're only able to fire any skill if it's a cancellation
|
|
|
|
if skillConfig, existent1 := skills[int(currPlayerDownsync.ActiveSkillId)]; existent1 {
|
|
|
|
switch v := skillConfig.Hits[currPlayerDownsync.ActiveSkillHit].(type) {
|
|
|
|
case *MeleeBullet:
|
|
|
|
if v.CancellableStFrame <= currPlayerDownsync.FramesInChState && currPlayerDownsync.FramesInChState < v.CancellableEdFrame {
|
|
|
|
if nextSkillId, existent2 := v.CancelTransit[patternId]; existent2 {
|
|
|
|
return nextSkillId
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// By default no skill can be fired
|
|
|
|
return NO_SKILL
|
|
|
|
},
|
|
|
|
},
|
|
|
|
1: &CharacterConfig{
|
|
|
|
SpeciesId: 1,
|
|
|
|
SpeciesName: "KnifeGirl",
|
|
|
|
|
|
|
|
InAirIdleFrameIdxTurningPoint: 9,
|
|
|
|
InAirIdleFrameIdxTurnedCycle: 1,
|
|
|
|
|
|
|
|
LayDownFrames: int32(16),
|
|
|
|
LayDownFramesToRecover: int32(16),
|
|
|
|
|
2023-01-04 15:48:00 +00:00
|
|
|
GetUpInvinsibleFrames: int32(10),
|
|
|
|
GetUpFramesToRecover: int32(27),
|
2023-01-01 14:51:46 +00:00
|
|
|
|
2023-01-02 15:35:56 +00:00
|
|
|
Speed: int32(float64(1.4) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
2023-01-01 14:51:46 +00:00
|
|
|
JumpingInitVelY: int32(float64(7.5) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
|
|
|
|
SkillMapper: func(patternId int, currPlayerDownsync *PlayerDownsync) int {
|
|
|
|
if 1 == patternId {
|
|
|
|
if 0 == currPlayerDownsync.FramesToRecover {
|
|
|
|
if currPlayerDownsync.InAir {
|
|
|
|
return 256
|
|
|
|
} else {
|
|
|
|
return 4
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
// Now that "0 < FramesToRecover", we're only able to fire any skill if it's a cancellation
|
|
|
|
if skillConfig, existent1 := skills[int(currPlayerDownsync.ActiveSkillId)]; existent1 {
|
|
|
|
switch v := skillConfig.Hits[currPlayerDownsync.ActiveSkillHit].(type) {
|
|
|
|
case *MeleeBullet:
|
|
|
|
if v.CancellableStFrame <= currPlayerDownsync.FramesInChState && currPlayerDownsync.FramesInChState < v.CancellableEdFrame {
|
|
|
|
if nextSkillId, existent2 := v.CancelTransit[patternId]; existent2 {
|
|
|
|
return nextSkillId
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// By default no skill can be fired
|
|
|
|
return NO_SKILL
|
2022-12-31 07:47:45 +00:00
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
2023-01-01 07:43:25 +00:00
|
|
|
var skills = map[int]*Skill{
|
|
|
|
1: &Skill{
|
2023-01-01 14:51:46 +00:00
|
|
|
RecoveryFrames: int32(30),
|
|
|
|
RecoveryFramesOnBlock: int32(30),
|
|
|
|
RecoveryFramesOnHit: int32(30),
|
2023-01-01 07:43:25 +00:00
|
|
|
ReleaseTriggerType: int32(1),
|
2023-01-01 14:51:46 +00:00
|
|
|
BoundChState: ATK_CHARACTER_STATE_ATK1,
|
2023-01-01 07:43:25 +00:00
|
|
|
Hits: []interface{}{
|
|
|
|
&MeleeBullet{
|
|
|
|
Bullet: Bullet{
|
2023-01-01 14:51:46 +00:00
|
|
|
StartupFrames: int32(7),
|
|
|
|
ActiveFrames: int32(22),
|
2023-01-01 12:18:35 +00:00
|
|
|
HitStunFrames: int32(13),
|
|
|
|
BlockStunFrames: int32(9),
|
|
|
|
Damage: int32(5),
|
2023-01-04 15:48:00 +00:00
|
|
|
SelfLockVelX: int32(float64(0.05) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
SelfLockVelY: NO_LOCK_VEL,
|
2023-01-01 12:18:35 +00:00
|
|
|
PushbackVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
PushbackVelY: int32(0),
|
|
|
|
HitboxOffsetX: int32(float64(12) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
HitboxOffsetY: int32(0),
|
|
|
|
HitboxSizeX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
2023-01-01 14:51:46 +00:00
|
|
|
CancellableStFrame: int32(13),
|
|
|
|
CancellableEdFrame: int32(30),
|
|
|
|
|
|
|
|
CancelTransit: map[int]int{
|
|
|
|
1: 2,
|
|
|
|
},
|
2023-01-01 12:18:35 +00:00
|
|
|
// TODO: Use non-zero "selfLockVel"
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
2: &Skill{
|
|
|
|
RecoveryFrames: int32(36),
|
|
|
|
RecoveryFramesOnBlock: int32(36),
|
|
|
|
RecoveryFramesOnHit: int32(36),
|
|
|
|
ReleaseTriggerType: int32(1),
|
2023-01-01 14:51:46 +00:00
|
|
|
BoundChState: ATK_CHARACTER_STATE_ATK2,
|
2023-01-01 12:18:35 +00:00
|
|
|
Hits: []interface{}{
|
|
|
|
&MeleeBullet{
|
|
|
|
Bullet: Bullet{
|
2023-01-01 14:51:46 +00:00
|
|
|
StartupFrames: int32(18),
|
|
|
|
ActiveFrames: int32(18),
|
2023-01-01 12:18:35 +00:00
|
|
|
HitStunFrames: int32(18),
|
|
|
|
BlockStunFrames: int32(9),
|
|
|
|
Damage: int32(5),
|
2023-01-04 15:48:00 +00:00
|
|
|
SelfLockVelX: int32(float64(0.1) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
SelfLockVelY: NO_LOCK_VEL,
|
2023-01-01 12:18:35 +00:00
|
|
|
PushbackVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
PushbackVelY: int32(0),
|
|
|
|
HitboxOffsetX: int32(float64(18) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
HitboxOffsetY: int32(0),
|
|
|
|
HitboxSizeX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
2023-01-01 14:51:46 +00:00
|
|
|
CancellableStFrame: int32(22),
|
2023-01-01 12:18:35 +00:00
|
|
|
CancellableEdFrame: int32(36),
|
2023-01-01 14:51:46 +00:00
|
|
|
CancelTransit: map[int]int{
|
|
|
|
1: 3,
|
|
|
|
},
|
2023-01-01 12:18:35 +00:00
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
3: &Skill{
|
2023-01-05 02:20:01 +00:00
|
|
|
RecoveryFrames: int32(50),
|
|
|
|
RecoveryFramesOnBlock: int32(50),
|
|
|
|
RecoveryFramesOnHit: int32(50),
|
2023-01-01 12:18:35 +00:00
|
|
|
ReleaseTriggerType: int32(1),
|
2023-01-01 14:51:46 +00:00
|
|
|
BoundChState: ATK_CHARACTER_STATE_ATK3,
|
2023-01-01 12:18:35 +00:00
|
|
|
Hits: []interface{}{
|
|
|
|
&MeleeBullet{
|
|
|
|
Bullet: Bullet{
|
2023-01-01 14:51:46 +00:00
|
|
|
StartupFrames: int32(15),
|
2023-01-04 15:48:00 +00:00
|
|
|
ActiveFrames: int32(30),
|
2023-01-01 12:18:35 +00:00
|
|
|
HitStunFrames: MAX_INT32,
|
2023-01-01 07:43:25 +00:00
|
|
|
BlockStunFrames: int32(9),
|
2023-01-01 12:18:35 +00:00
|
|
|
Damage: int32(10),
|
2023-01-05 02:20:01 +00:00
|
|
|
SelfLockVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
SelfLockVelY: int32(float64(5) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
2023-01-01 14:51:46 +00:00
|
|
|
PushbackVelX: int32(float64(2) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
PushbackVelY: int32(float64(7) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
2023-01-04 15:48:00 +00:00
|
|
|
HitboxOffsetX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
2023-01-01 14:51:46 +00:00
|
|
|
HitboxOffsetY: int32(0),
|
2023-01-04 15:48:00 +00:00
|
|
|
HitboxSizeX: int32(float64(48) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
2023-01-01 14:51:46 +00:00
|
|
|
HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
BlowUp: true,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
4: &Skill{
|
|
|
|
RecoveryFrames: int32(30),
|
|
|
|
RecoveryFramesOnBlock: int32(30),
|
|
|
|
RecoveryFramesOnHit: int32(30),
|
|
|
|
ReleaseTriggerType: int32(1),
|
|
|
|
BoundChState: ATK_CHARACTER_STATE_ATK1,
|
|
|
|
Hits: []interface{}{
|
|
|
|
&MeleeBullet{
|
|
|
|
Bullet: Bullet{
|
|
|
|
StartupFrames: int32(7),
|
|
|
|
ActiveFrames: int32(22),
|
|
|
|
HitStunFrames: int32(13),
|
|
|
|
BlockStunFrames: int32(9),
|
|
|
|
Damage: int32(5),
|
2023-01-04 15:48:00 +00:00
|
|
|
SelfLockVelX: int32(float64(0.05) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
SelfLockVelY: NO_LOCK_VEL,
|
2023-01-01 14:51:46 +00:00
|
|
|
PushbackVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
PushbackVelY: int32(0),
|
|
|
|
HitboxOffsetX: int32(float64(12) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
HitboxOffsetY: int32(0),
|
|
|
|
HitboxSizeX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
CancellableStFrame: int32(13),
|
|
|
|
CancellableEdFrame: int32(30),
|
|
|
|
|
|
|
|
CancelTransit: map[int]int{
|
|
|
|
1: 5,
|
|
|
|
},
|
|
|
|
// TODO: Use non-zero "selfLockVel"
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
5: &Skill{
|
|
|
|
RecoveryFrames: int32(36),
|
|
|
|
RecoveryFramesOnBlock: int32(36),
|
|
|
|
RecoveryFramesOnHit: int32(36),
|
|
|
|
ReleaseTriggerType: int32(1),
|
|
|
|
BoundChState: ATK_CHARACTER_STATE_ATK2,
|
|
|
|
Hits: []interface{}{
|
|
|
|
&MeleeBullet{
|
|
|
|
Bullet: Bullet{
|
|
|
|
StartupFrames: int32(18),
|
|
|
|
ActiveFrames: int32(18),
|
|
|
|
HitStunFrames: int32(18),
|
|
|
|
BlockStunFrames: int32(9),
|
|
|
|
Damage: int32(5),
|
2023-01-04 15:48:00 +00:00
|
|
|
SelfLockVelX: int32(float64(0.1) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
SelfLockVelY: NO_LOCK_VEL,
|
2023-01-01 14:51:46 +00:00
|
|
|
PushbackVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
PushbackVelY: int32(0),
|
|
|
|
HitboxOffsetX: int32(float64(18) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
HitboxOffsetY: int32(0),
|
|
|
|
HitboxSizeX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
CancellableStFrame: int32(22),
|
|
|
|
CancellableEdFrame: int32(36),
|
|
|
|
CancelTransit: map[int]int{
|
|
|
|
1: 6,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
6: &Skill{
|
2023-01-05 02:20:01 +00:00
|
|
|
RecoveryFrames: int32(45),
|
|
|
|
RecoveryFramesOnBlock: int32(45),
|
|
|
|
RecoveryFramesOnHit: int32(45),
|
2023-01-01 14:51:46 +00:00
|
|
|
ReleaseTriggerType: int32(1),
|
|
|
|
BoundChState: ATK_CHARACTER_STATE_ATK3,
|
|
|
|
Hits: []interface{}{
|
|
|
|
&MeleeBullet{
|
|
|
|
Bullet: Bullet{
|
|
|
|
StartupFrames: int32(15),
|
2023-01-05 02:20:01 +00:00
|
|
|
ActiveFrames: int32(28),
|
2023-01-01 14:51:46 +00:00
|
|
|
HitStunFrames: MAX_INT32,
|
|
|
|
BlockStunFrames: int32(9),
|
|
|
|
Damage: int32(10),
|
2023-01-04 15:48:00 +00:00
|
|
|
SelfLockVelX: int32(float64(-0.1) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
SelfLockVelY: NO_LOCK_VEL,
|
2023-01-01 14:51:46 +00:00
|
|
|
PushbackVelX: int32(float64(2) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
PushbackVelY: int32(float64(7) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
2023-01-01 12:18:35 +00:00
|
|
|
HitboxOffsetX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
2023-01-01 07:43:25 +00:00
|
|
|
HitboxOffsetY: int32(0),
|
2023-01-01 12:18:35 +00:00
|
|
|
HitboxSizeX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
2023-01-01 07:43:25 +00:00
|
|
|
HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
2023-01-01 12:18:35 +00:00
|
|
|
BlowUp: true,
|
2023-01-01 07:43:25 +00:00
|
|
|
},
|
|
|
|
},
|
2022-12-31 07:47:45 +00:00
|
|
|
},
|
|
|
|
},
|
2023-01-01 12:18:35 +00:00
|
|
|
255: &Skill{
|
2023-01-05 02:20:01 +00:00
|
|
|
RecoveryFrames: int32(30),
|
|
|
|
RecoveryFramesOnBlock: int32(30),
|
|
|
|
RecoveryFramesOnHit: int32(30),
|
2023-01-01 07:43:25 +00:00
|
|
|
ReleaseTriggerType: int32(1),
|
2023-01-01 14:51:46 +00:00
|
|
|
BoundChState: ATK_CHARACTER_STATE_INAIR_ATK1,
|
|
|
|
Hits: []interface{}{
|
|
|
|
&MeleeBullet{
|
|
|
|
Bullet: Bullet{
|
|
|
|
StartupFrames: int32(3),
|
|
|
|
ActiveFrames: int32(20),
|
|
|
|
HitStunFrames: int32(18),
|
|
|
|
BlockStunFrames: int32(9),
|
|
|
|
Damage: int32(5),
|
2023-01-04 15:48:00 +00:00
|
|
|
SelfLockVelX: NO_LOCK_VEL,
|
|
|
|
SelfLockVelY: NO_LOCK_VEL,
|
2023-01-01 14:51:46 +00:00
|
|
|
PushbackVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
PushbackVelY: int32(0),
|
|
|
|
HitboxOffsetX: int32(float64(12) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
HitboxOffsetY: int32(0),
|
|
|
|
HitboxSizeX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
HitboxSizeY: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
256: &Skill{
|
2023-01-05 02:20:01 +00:00
|
|
|
RecoveryFrames: int32(20),
|
|
|
|
RecoveryFramesOnBlock: int32(20),
|
|
|
|
RecoveryFramesOnHit: int32(20),
|
2023-01-01 14:51:46 +00:00
|
|
|
ReleaseTriggerType: int32(1),
|
|
|
|
BoundChState: ATK_CHARACTER_STATE_INAIR_ATK1,
|
2023-01-01 07:43:25 +00:00
|
|
|
Hits: []interface{}{
|
|
|
|
&MeleeBullet{
|
|
|
|
Bullet: Bullet{
|
|
|
|
StartupFrames: int32(3),
|
2023-01-05 02:20:01 +00:00
|
|
|
ActiveFrames: int32(10),
|
|
|
|
HitStunFrames: int32(15),
|
2023-01-01 07:43:25 +00:00
|
|
|
BlockStunFrames: int32(9),
|
|
|
|
Damage: int32(5),
|
2023-01-04 15:48:00 +00:00
|
|
|
SelfLockVelX: NO_LOCK_VEL,
|
|
|
|
SelfLockVelY: NO_LOCK_VEL,
|
2023-01-01 12:18:35 +00:00
|
|
|
PushbackVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
PushbackVelY: int32(0),
|
2023-01-01 07:43:25 +00:00
|
|
|
HitboxOffsetX: int32(float64(12) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
HitboxOffsetY: int32(0),
|
|
|
|
HitboxSizeX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
HitboxSizeY: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
|
|
|
|
},
|
|
|
|
},
|
2022-12-31 07:47:45 +00:00
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|