DelayNoMore/jsexport/battle/characterConfig.go

805 lines
26 KiB
Go
Raw Normal View History

package battle
2023-01-01 14:51:46 +00:00
type SkillMapperType func(patternId int, currPlayerDownsync *PlayerDownsync) int
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-19 01:20:52 +00:00
Speed int32
JumpingInitVelY int32
JumpingFramesToRecover int32 // Not used yet
2023-01-12 08:09:20 +00:00
DashingEnabled bool
OnWallEnabled bool
WallJumpingFramesToRecover int32
WallJumpingInitVelX int32
WallJumpingInitVelY int32
WallSlidingVelY int32
2023-01-11 23:22:14 +00:00
2023-01-20 03:29:27 +00:00
InertiaFramesToRecover int32
2023-01-19 01:20:52 +00:00
2023-01-01 14:51:46 +00:00
SkillMapper SkillMapperType
}
var Characters = map[int]*CharacterConfig{
0: &CharacterConfig{
SpeciesId: 0,
SpeciesName: "MonkGirl",
InAirIdleFrameIdxTurningPoint: 11,
InAirIdleFrameIdxTurnedCycle: 1,
LayDownFrames: int32(16),
LayDownFramesToRecover: int32(16),
2023-01-04 15:48:00 +00:00
GetUpInvinsibleFrames: int32(10),
GetUpFramesToRecover: int32(27),
Speed: int32(float64(2.1) * WORLD_TO_VIRTUAL_GRID_RATIO),
2023-01-19 01:20:52 +00:00
JumpingInitVelY: int32(float64(8) * WORLD_TO_VIRTUAL_GRID_RATIO),
JumpingFramesToRecover: int32(2),
2023-01-22 06:32:32 +00:00
InertiaFramesToRecover: int32(9),
2023-02-06 09:18:51 +00:00
DashingEnabled: true,
OnWallEnabled: true,
WallJumpingFramesToRecover: int32(8), // 8 would be the minimum for an avg human
WallJumpingInitVelX: int32(float64(2.8) * WORLD_TO_VIRTUAL_GRID_RATIO), // Default is "appeared facing right", but actually holding ctrl against left
WallJumpingInitVelY: int32(float64(7) * WORLD_TO_VIRTUAL_GRID_RATIO),
WallSlidingVelY: int32(float64(-1) * WORLD_TO_VIRTUAL_GRID_RATIO),
2023-01-11 23:22:14 +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:
2023-01-13 03:25:20 +00:00
if v.Bullet.CancellableStFrame <= currPlayerDownsync.FramesInChState && currPlayerDownsync.FramesInChState < v.Bullet.CancellableEdFrame {
if nextSkillId, existent2 := v.Bullet.CancelTransit[patternId]; existent2 {
2023-01-01 14:51:46 +00:00
return nextSkillId
}
}
}
}
}
2023-02-06 09:18:51 +00:00
} else if 3 == patternId {
if 0 == currPlayerDownsync.FramesToRecover && !currPlayerDownsync.InAir {
return 15
}
} else if 5 == patternId {
// Dashing is already constrained by "FramesToRecover & CapturedByInertia" in "deriveOpPattern"
if !currPlayerDownsync.InAir {
return 12
}
2023-01-01 14:51:46 +00:00
}
// 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
Speed: int32(float64(2.19) * WORLD_TO_VIRTUAL_GRID_RATIO), // I don't know why "2.2" is so special that it throws a compile error
2023-01-19 01:20:52 +00:00
JumpingInitVelY: int32(float64(7.5) * WORLD_TO_VIRTUAL_GRID_RATIO),
JumpingFramesToRecover: int32(2),
2023-01-22 06:32:32 +00:00
InertiaFramesToRecover: int32(9),
2023-01-01 14:51:46 +00:00
2023-01-12 08:09:20 +00:00
DashingEnabled: true,
OnWallEnabled: true,
2023-01-19 01:20:52 +00:00
WallJumpingFramesToRecover: int32(8), // 8 would be the minimum for an avg human
WallJumpingInitVelX: int32(float64(2.8) * WORLD_TO_VIRTUAL_GRID_RATIO), // Default is "appeared facing right", but actually holding ctrl against left
2023-01-12 08:09:20 +00:00
WallJumpingInitVelY: int32(float64(7) * WORLD_TO_VIRTUAL_GRID_RATIO),
WallSlidingVelY: int32(float64(-1) * WORLD_TO_VIRTUAL_GRID_RATIO),
2023-01-11 23:22:14 +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 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:
2023-01-13 03:25:20 +00:00
if v.Bullet.CancellableStFrame <= currPlayerDownsync.FramesInChState && currPlayerDownsync.FramesInChState < v.Bullet.CancellableEdFrame {
if nextSkillId, existent2 := v.Bullet.CancelTransit[patternId]; existent2 {
2023-01-01 14:51:46 +00:00
return nextSkillId
}
}
}
}
}
2023-02-06 09:18:51 +00:00
} else if 3 == patternId {
if 0 == currPlayerDownsync.FramesToRecover && !currPlayerDownsync.InAir {
return 16
}
} else if 5 == patternId {
2023-02-06 09:18:51 +00:00
// Air dash allowed for this character
2023-01-21 02:40:13 +00:00
// Dashing is already constrained by "FramesToRecover & CapturedByInertia" in "deriveOpPattern"
2023-02-06 09:18:51 +00:00
return 13
2023-01-01 14:51:46 +00:00
}
2023-01-08 12:34:29 +00:00
// By default no skill can be fired
return NO_SKILL
},
},
2023-01-10 04:08:15 +00:00
4096: &CharacterConfig{
SpeciesId: 4096,
2023-01-08 12:34:29 +00:00
SpeciesName: "Monk",
InAirIdleFrameIdxTurningPoint: 42,
InAirIdleFrameIdxTurnedCycle: 2,
LayDownFrames: int32(14),
LayDownFramesToRecover: int32(14),
GetUpInvinsibleFrames: int32(8),
GetUpFramesToRecover: int32(30),
Speed: int32(float64(1.8) * WORLD_TO_VIRTUAL_GRID_RATIO),
JumpingInitVelY: int32(float64(7.8) * WORLD_TO_VIRTUAL_GRID_RATIO),
2023-01-19 01:20:52 +00:00
JumpingFramesToRecover: int32(2),
2023-01-22 06:32:32 +00:00
InertiaFramesToRecover: int32(9),
2023-01-08 12:34:29 +00:00
2023-02-06 09:18:51 +00:00
DashingEnabled: true,
2023-01-11 23:22:14 +00:00
OnWallEnabled: false,
2023-01-08 12:34:29 +00:00
SkillMapper: func(patternId int, currPlayerDownsync *PlayerDownsync) int {
if 1 == patternId {
if 0 == currPlayerDownsync.FramesToRecover {
if currPlayerDownsync.InAir {
return 257
} else {
2023-01-11 14:24:31 +00:00
return 7
2023-01-08 12:34:29 +00:00
}
} 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:
2023-01-13 03:25:20 +00:00
if v.Bullet.CancellableStFrame <= currPlayerDownsync.FramesInChState && currPlayerDownsync.FramesInChState < v.Bullet.CancellableEdFrame {
if nextSkillId, existent2 := v.Bullet.CancelTransit[patternId]; existent2 {
2023-01-08 12:34:29 +00:00
return nextSkillId
}
}
}
}
}
2023-01-11 14:24:31 +00:00
} else if 2 == patternId {
2023-01-21 02:40:13 +00:00
if 0 == currPlayerDownsync.FramesToRecover && !currPlayerDownsync.InAir {
2023-01-11 14:24:31 +00:00
return 11
}
} else if 3 == patternId {
2023-01-21 02:40:13 +00:00
if 0 == currPlayerDownsync.FramesToRecover && !currPlayerDownsync.InAir {
2023-01-11 14:24:31 +00:00
return 10
}
2023-02-06 09:18:51 +00:00
} else if 5 == patternId {
// Dashing is already constrained by "FramesToRecover & CapturedByInertia" in "deriveOpPattern"
if !currPlayerDownsync.InAir {
return 14
}
2023-01-08 12:34:29 +00:00
}
2023-01-01 14:51:46 +00:00
// By default no skill can be fired
return NO_SKILL
},
},
}
var skills = map[int]*Skill{
1: &Skill{
2023-01-01 14:51:46 +00:00
RecoveryFrames: int32(30),
RecoveryFramesOnBlock: int32(30),
RecoveryFramesOnHit: int32(30),
ReleaseTriggerType: int32(1),
2023-01-01 14:51:46 +00:00
BoundChState: ATK_CHARACTER_STATE_ATK1,
Hits: []interface{}{
&MeleeBullet{
2023-01-13 03:25:20 +00:00
Bullet: &BulletConfig{
2023-01-01 14:51:46 +00:00
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,
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,
},
BlowUp: false,
ExplosionFrames: 9,
SpeciesId: int32(1),
},
},
},
},
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,
Hits: []interface{}{
&MeleeBullet{
2023-01-13 03:25:20 +00:00
Bullet: &BulletConfig{
2023-01-01 14:51:46 +00:00
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,
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),
CancellableEdFrame: int32(36),
2023-01-01 14:51:46 +00:00
CancelTransit: map[int]int{
1: 3,
},
BlowUp: false,
ExplosionFrames: 9,
SpeciesId: int32(1),
},
},
},
},
3: &Skill{
2023-01-05 02:20:01 +00:00
RecoveryFrames: int32(50),
RecoveryFramesOnBlock: int32(50),
RecoveryFramesOnHit: int32(50),
ReleaseTriggerType: int32(1),
2023-01-01 14:51:46 +00:00
BoundChState: ATK_CHARACTER_STATE_ATK3,
Hits: []interface{}{
&MeleeBullet{
2023-01-13 03:25:20 +00:00
Bullet: &BulletConfig{
2023-01-11 14:24:31 +00:00
StartupFrames: int32(8),
2023-01-04 15:48:00 +00:00
ActiveFrames: int32(30),
HitStunFrames: MAX_INT32,
BlockStunFrames: int32(9),
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-11 14:24:31 +00:00
HitboxOffsetX: int32(float64(16) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetY: int32(float64(8) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxSizeX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
2023-01-01 14:51:46 +00:00
HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
BlowUp: true,
ExplosionFrames: 9,
SpeciesId: int32(1),
2023-01-01 14:51:46 +00:00
},
},
},
},
4: &Skill{
RecoveryFrames: int32(30),
RecoveryFramesOnBlock: int32(30),
RecoveryFramesOnHit: int32(30),
ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_ATK1,
Hits: []interface{}{
&MeleeBullet{
2023-01-13 03:25:20 +00:00
Bullet: &BulletConfig{
2023-01-01 14:51:46 +00:00
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),
2023-01-17 15:29:05 +00:00
CancellableStFrame: int32(13),
2023-01-01 14:51:46 +00:00
CancellableEdFrame: int32(30),
CancelTransit: map[int]int{
1: 5,
},
BlowUp: false,
ExplosionFrames: 15,
SpeciesId: int32(2),
2023-01-01 14:51:46 +00:00
},
},
},
},
5: &Skill{
RecoveryFrames: int32(36),
RecoveryFramesOnBlock: int32(36),
RecoveryFramesOnHit: int32(36),
ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_ATK2,
Hits: []interface{}{
&MeleeBullet{
2023-01-13 03:25:20 +00:00
Bullet: &BulletConfig{
2023-01-01 14:51:46 +00:00
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),
2023-01-17 15:29:05 +00:00
CancellableStFrame: int32(23),
2023-01-01 14:51:46 +00:00
CancellableEdFrame: int32(36),
CancelTransit: map[int]int{
1: 6,
},
BlowUp: false,
ExplosionFrames: 15,
SpeciesId: int32(2),
2023-01-01 14:51:46 +00:00
},
},
},
},
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{
2023-01-13 03:25:20 +00:00
Bullet: &BulletConfig{
2023-01-11 14:24:31 +00:00
StartupFrames: int32(8),
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-11 23:22:14 +00:00
SelfLockVelX: NO_LOCK_VEL,
2023-01-04 15:48:00 +00:00
SelfLockVelY: NO_LOCK_VEL,
2023-01-01 14:51:46 +00:00
PushbackVelX: int32(float64(2) * WORLD_TO_VIRTUAL_GRID_RATIO),
2023-01-11 23:22:14 +00:00
PushbackVelY: int32(float64(3) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetY: int32(0),
HitboxSizeX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
BlowUp: true,
ExplosionFrames: 15,
SpeciesId: int32(2),
},
},
},
},
2023-01-08 12:34:29 +00:00
7: &Skill{
RecoveryFrames: int32(30),
RecoveryFramesOnBlock: int32(30),
RecoveryFramesOnHit: int32(30),
ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_ATK1,
Hits: []interface{}{
&MeleeBullet{
2023-01-13 03:25:20 +00:00
Bullet: &BulletConfig{
2023-01-08 12:34:29 +00:00
StartupFrames: int32(7),
ActiveFrames: int32(22),
HitStunFrames: int32(13),
BlockStunFrames: int32(9),
Damage: int32(5),
2023-01-11 14:24:31 +00:00
SelfLockVelX: NO_LOCK_VEL,
2023-01-08 12:34:29 +00:00
SelfLockVelY: NO_LOCK_VEL,
PushbackVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO),
PushbackVelY: int32(0),
HitboxOffsetX: int32(float64(12) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetY: int32(0),
HitboxSizeX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
CancellableStFrame: int32(13),
CancellableEdFrame: int32(30),
CancelTransit: map[int]int{
2023-01-11 14:24:31 +00:00
1: 8,
2023-01-08 12:34:29 +00:00
},
BlowUp: false,
ExplosionFrames: 9,
SpeciesId: int32(1),
2023-01-08 12:34:29 +00:00
},
},
},
},
8: &Skill{
RecoveryFrames: int32(36),
RecoveryFramesOnBlock: int32(36),
RecoveryFramesOnHit: int32(36),
ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_ATK2,
Hits: []interface{}{
&MeleeBullet{
2023-01-13 03:25:20 +00:00
Bullet: &BulletConfig{
2023-01-08 12:34:29 +00:00
StartupFrames: int32(18),
ActiveFrames: int32(18),
HitStunFrames: int32(18),
BlockStunFrames: int32(9),
Damage: int32(5),
SelfLockVelX: int32(float64(0.1) * WORLD_TO_VIRTUAL_GRID_RATIO),
SelfLockVelY: NO_LOCK_VEL,
PushbackVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO),
PushbackVelY: int32(0),
HitboxOffsetX: int32(float64(18) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetY: int32(0),
HitboxSizeX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
CancellableStFrame: int32(22),
CancellableEdFrame: int32(36),
CancelTransit: map[int]int{
2023-01-11 14:24:31 +00:00
1: 9,
2023-01-08 12:34:29 +00:00
},
BlowUp: false,
ExplosionFrames: 9,
SpeciesId: int32(1),
2023-01-08 12:34:29 +00:00
},
},
},
},
9: &Skill{
2023-01-11 14:24:31 +00:00
RecoveryFrames: int32(40),
RecoveryFramesOnBlock: int32(40),
RecoveryFramesOnHit: int32(40),
2023-01-08 12:34:29 +00:00
ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_ATK3,
Hits: []interface{}{
&MeleeBullet{
2023-01-13 03:25:20 +00:00
Bullet: &BulletConfig{
2023-01-11 14:24:31 +00:00
StartupFrames: int32(7),
2023-01-08 12:34:29 +00:00
ActiveFrames: int32(30),
HitStunFrames: MAX_INT32,
BlockStunFrames: int32(9),
Damage: int32(10),
2023-01-11 14:24:31 +00:00
SelfLockVelX: int32(float64(1) * WORLD_TO_VIRTUAL_GRID_RATIO),
SelfLockVelY: NO_LOCK_VEL,
2023-01-08 12:34:29 +00:00
PushbackVelX: int32(float64(2) * WORLD_TO_VIRTUAL_GRID_RATIO),
2023-01-11 14:24:31 +00:00
PushbackVelY: int32(float64(4) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetX: int32(float64(10) * WORLD_TO_VIRTUAL_GRID_RATIO),
2023-01-08 12:34:29 +00:00
HitboxOffsetY: int32(0),
2023-01-11 14:24:31 +00:00
HitboxSizeX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
2023-01-08 12:34:29 +00:00
HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
2023-01-11 14:24:31 +00:00
BlowUp: true,
ExplosionFrames: 9,
SpeciesId: int32(1),
2023-01-08 12:34:29 +00:00
},
},
},
},
10: &Skill{
2023-02-06 09:18:51 +00:00
RecoveryFrames: int32(38),
RecoveryFramesOnBlock: int32(38),
RecoveryFramesOnHit: int32(38),
2023-01-08 12:34:29 +00:00
ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_ATK4,
Hits: []interface{}{
&FireballBullet{
2023-02-06 09:18:51 +00:00
Speed: int32(float64(6) * WORLD_TO_VIRTUAL_GRID_RATIO),
2023-01-13 03:25:20 +00:00
Bullet: &BulletConfig{
2023-02-06 09:18:51 +00:00
StartupFrames: int32(10),
2023-01-10 04:08:15 +00:00
ActiveFrames: MAX_INT32,
2023-01-08 12:34:29 +00:00
HitStunFrames: int32(15),
BlockStunFrames: int32(9),
2023-02-06 09:18:51 +00:00
Damage: int32(22),
2023-01-10 04:08:15 +00:00
SelfLockVelX: NO_LOCK_VEL,
SelfLockVelY: NO_LOCK_VEL,
2023-01-08 12:34:29 +00:00
PushbackVelX: int32(float64(2) * WORLD_TO_VIRTUAL_GRID_RATIO),
2023-01-10 04:08:15 +00:00
PushbackVelY: int32(0),
2023-02-06 09:18:51 +00:00
HitboxOffsetX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetY: int32(float64(10) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxSizeX: int32(float64(64) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxSizeY: int32(float64(48) * WORLD_TO_VIRTUAL_GRID_RATIO),
BlowUp: false,
2023-02-11 04:08:01 +00:00
ExplosionFrames: 30,
SpeciesId: int32(1),
2023-01-08 12:34:29 +00:00
},
},
},
},
2023-01-11 14:24:31 +00:00
11: &Skill{
RecoveryFrames: int32(60),
RecoveryFramesOnBlock: int32(60),
RecoveryFramesOnHit: int32(60),
ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_ATK5,
Hits: []interface{}{
&MeleeBullet{
2023-01-13 03:25:20 +00:00
Bullet: &BulletConfig{
2023-01-11 14:24:31 +00:00
StartupFrames: int32(3),
ActiveFrames: int32(25),
HitStunFrames: MAX_INT32,
BlockStunFrames: int32(9),
2023-02-06 09:18:51 +00:00
Damage: int32(35),
2023-01-11 14:24:31 +00:00
SelfLockVelX: int32(float64(1) * WORLD_TO_VIRTUAL_GRID_RATIO),
SelfLockVelY: int32(float64(8) * WORLD_TO_VIRTUAL_GRID_RATIO),
PushbackVelX: int32(float64(2) * WORLD_TO_VIRTUAL_GRID_RATIO),
PushbackVelY: int32(float64(7) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetX: int32(float64(8) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetY: int32(0),
HitboxSizeX: int32(float64(40) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxSizeY: int32(float64(64) * WORLD_TO_VIRTUAL_GRID_RATIO),
BlowUp: true,
ExplosionFrames: 15,
SpeciesId: int32(3),
2023-01-11 14:24:31 +00:00
},
},
},
},
12: &Skill{
2023-02-06 09:18:51 +00:00
RecoveryFrames: int32(10),
RecoveryFramesOnBlock: int32(10),
RecoveryFramesOnHit: int32(10),
ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_DASHING,
Hits: []interface{}{
&MeleeBullet{
Bullet: &BulletConfig{
StartupFrames: int32(3),
ActiveFrames: int32(0),
HitStunFrames: int32(0),
BlockStunFrames: int32(0),
Damage: int32(0),
2023-02-08 08:15:05 +00:00
SelfLockVelX: int32(float64(6) * WORLD_TO_VIRTUAL_GRID_RATIO),
2023-02-06 09:18:51 +00:00
SelfLockVelY: int32(0),
PushbackVelX: NO_LOCK_VEL,
PushbackVelY: NO_LOCK_VEL,
HitboxOffsetX: int32(0),
HitboxOffsetY: int32(0),
HitboxSizeX: int32(0),
HitboxSizeY: int32(0),
BlowUp: false,
},
},
},
},
13: &Skill{
2023-01-22 03:34:02 +00:00
RecoveryFrames: int32(12),
RecoveryFramesOnBlock: int32(12),
RecoveryFramesOnHit: int32(12),
ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_DASHING,
Hits: []interface{}{
&MeleeBullet{
Bullet: &BulletConfig{
2023-02-06 09:18:51 +00:00
StartupFrames: int32(3),
ActiveFrames: int32(0),
2023-02-06 09:18:51 +00:00
HitStunFrames: int32(0),
BlockStunFrames: int32(0),
Damage: int32(0),
2023-02-08 08:15:05 +00:00
SelfLockVelX: int32(float64(8) * WORLD_TO_VIRTUAL_GRID_RATIO),
SelfLockVelY: int32(0),
PushbackVelX: NO_LOCK_VEL,
PushbackVelY: NO_LOCK_VEL,
HitboxOffsetX: int32(0),
HitboxOffsetY: int32(0),
HitboxSizeX: int32(0),
HitboxSizeY: int32(0),
BlowUp: false,
},
},
},
},
2023-02-06 09:18:51 +00:00
14: &Skill{
2023-02-08 08:15:05 +00:00
RecoveryFrames: int32(8),
RecoveryFramesOnBlock: int32(8),
RecoveryFramesOnHit: int32(8),
2023-02-06 09:18:51 +00:00
ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_DASHING,
Hits: []interface{}{
&MeleeBullet{
Bullet: &BulletConfig{
2023-02-08 08:15:05 +00:00
StartupFrames: int32(4),
2023-02-06 09:18:51 +00:00
ActiveFrames: int32(0),
HitStunFrames: MAX_INT32,
BlockStunFrames: int32(0),
Damage: int32(0),
2023-02-08 08:15:05 +00:00
SelfLockVelX: int32(float64(5) * WORLD_TO_VIRTUAL_GRID_RATIO),
2023-02-06 09:18:51 +00:00
SelfLockVelY: int32(0),
PushbackVelX: NO_LOCK_VEL,
PushbackVelY: NO_LOCK_VEL,
HitboxOffsetX: int32(0),
HitboxOffsetY: int32(0),
HitboxSizeX: int32(0),
HitboxSizeY: int32(0),
BlowUp: false,
},
},
},
},
15: &Skill{
RecoveryFrames: int32(48),
RecoveryFramesOnBlock: int32(48),
RecoveryFramesOnHit: int32(48),
ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_ATK4,
Hits: []interface{}{
&FireballBullet{
Speed: int32(float64(4) * WORLD_TO_VIRTUAL_GRID_RATIO),
Bullet: &BulletConfig{
StartupFrames: int32(12),
ActiveFrames: MAX_INT32,
HitStunFrames: int32(15),
BlockStunFrames: int32(9),
Damage: int32(18),
SelfLockVelX: NO_LOCK_VEL,
SelfLockVelY: NO_LOCK_VEL,
PushbackVelX: int32(float64(3) * WORLD_TO_VIRTUAL_GRID_RATIO),
PushbackVelY: int32(0),
HitboxOffsetX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetY: int32(float64(8) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxSizeX: int32(float64(48) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxSizeY: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
BlowUp: false,
ExplosionFrames: 30,
SpeciesId: int32(2),
},
},
},
},
16: &Skill{
RecoveryFrames: int32(60),
RecoveryFramesOnBlock: int32(60),
RecoveryFramesOnHit: int32(60),
ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_ATK4,
Hits: []interface{}{
&FireballBullet{
Speed: int32(float64(4) * WORLD_TO_VIRTUAL_GRID_RATIO),
Bullet: &BulletConfig{
StartupFrames: int32(16),
ActiveFrames: MAX_INT32,
HitStunFrames: MAX_INT32,
BlockStunFrames: int32(9),
Damage: int32(30),
SelfLockVelX: NO_LOCK_VEL,
SelfLockVelY: NO_LOCK_VEL,
PushbackVelX: int32(float64(3) * WORLD_TO_VIRTUAL_GRID_RATIO),
PushbackVelY: int32(float64(7) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetX: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetY: int32(float64(8) * 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,
ExplosionFrames: 30,
SpeciesId: int32(3),
},
},
},
},
255: &Skill{
2023-01-05 02:20:01 +00:00
RecoveryFrames: int32(30),
RecoveryFramesOnBlock: int32(30),
RecoveryFramesOnHit: int32(30),
ReleaseTriggerType: int32(1),
2023-01-01 14:51:46 +00:00
BoundChState: ATK_CHARACTER_STATE_INAIR_ATK1,
Hits: []interface{}{
&MeleeBullet{
2023-01-13 03:25:20 +00:00
Bullet: &BulletConfig{
2023-01-01 14:51:46 +00:00
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),
BlowUp: false,
ExplosionFrames: 9,
SpeciesId: int32(1),
2023-01-01 14:51:46 +00:00
},
},
},
},
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,
Hits: []interface{}{
&MeleeBullet{
2023-01-13 03:25:20 +00:00
Bullet: &BulletConfig{
StartupFrames: int32(3),
2023-01-05 02:20:01 +00:00
ActiveFrames: int32(10),
HitStunFrames: int32(15),
BlockStunFrames: int32(9),
Damage: int32(5),
2023-01-04 15:48:00 +00:00
SelfLockVelX: NO_LOCK_VEL,
SelfLockVelY: NO_LOCK_VEL,
PushbackVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO),
PushbackVelY: int32(0),
HitboxOffsetX: int32(float64(12) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetY: int32(0),
HitboxSizeX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxSizeY: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
BlowUp: false,
ExplosionFrames: 15,
SpeciesId: int32(2),
},
},
},
},
2023-01-08 12:34:29 +00:00
257: &Skill{
RecoveryFrames: int32(30),
RecoveryFramesOnBlock: int32(30),
RecoveryFramesOnHit: int32(30),
ReleaseTriggerType: int32(1),
BoundChState: ATK_CHARACTER_STATE_INAIR_ATK1,
Hits: []interface{}{
&MeleeBullet{
2023-01-13 03:25:20 +00:00
Bullet: &BulletConfig{
2023-02-11 04:08:01 +00:00
StartupFrames: int32(4),
2023-01-08 12:34:29 +00:00
ActiveFrames: int32(20),
2023-02-11 04:08:01 +00:00
HitStunFrames: int32(9),
BlockStunFrames: int32(5),
2023-01-08 12:34:29 +00:00
Damage: int32(5),
SelfLockVelX: NO_LOCK_VEL,
SelfLockVelY: NO_LOCK_VEL,
PushbackVelX: int32(float64(0.5) * WORLD_TO_VIRTUAL_GRID_RATIO),
PushbackVelY: int32(0),
HitboxOffsetX: int32(float64(12) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxOffsetY: int32(0),
HitboxSizeX: int32(float64(32) * WORLD_TO_VIRTUAL_GRID_RATIO),
HitboxSizeY: int32(float64(24) * WORLD_TO_VIRTUAL_GRID_RATIO),
BlowUp: false,
ExplosionFrames: 9,
SpeciesId: int32(1),
2023-01-08 12:34:29 +00:00
},
},
},
},
}