horsegen: skill activation duration scaling
This commit is contained in:
38
horse/durscale_string.go
Normal file
38
horse/durscale_string.go
Normal file
@@ -0,0 +1,38 @@
|
||||
// Code generated by "stringer -type DurScale -trimprefix Duration -linecomment"; DO NOT EDIT.
|
||||
|
||||
package horse
|
||||
|
||||
import "strconv"
|
||||
|
||||
func _() {
|
||||
// An "invalid array index" compiler error signifies that the constant values have changed.
|
||||
// Re-run the stringer command to generate them again.
|
||||
var x [1]struct{}
|
||||
_ = x[DurationDirect-1]
|
||||
_ = x[DurationFrontDistance-2]
|
||||
_ = x[DurationRemainingHP-3]
|
||||
_ = x[DurationIncrementPass-4]
|
||||
_ = x[DurationMidSideBlock-5]
|
||||
_ = x[DurationRemainingHP2-7]
|
||||
}
|
||||
|
||||
const (
|
||||
_DurScale_name_0 = "directlyscaling with distance from the frontscaling with remaining HPincreasing with each pass while activescaling with mid-race phase blocked side time"
|
||||
_DurScale_name_1 = "scaling with remaining HP"
|
||||
)
|
||||
|
||||
var (
|
||||
_DurScale_index_0 = [...]uint8{0, 8, 44, 69, 107, 152}
|
||||
)
|
||||
|
||||
func (i DurScale) String() string {
|
||||
switch {
|
||||
case 1 <= i && i <= 5:
|
||||
i -= 1
|
||||
return _DurScale_name_0[_DurScale_index_0[i]:_DurScale_index_0[i+1]]
|
||||
case i == 7:
|
||||
return _DurScale_name_1
|
||||
default:
|
||||
return "DurScale(" + strconv.FormatInt(int64(i), 10) + ")"
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -46,6 +46,7 @@ type Activation struct {
|
||||
Precondition string
|
||||
Condition string
|
||||
Duration TenThousandths
|
||||
DurScale DurScale
|
||||
Cooldown TenThousandths
|
||||
Abilities []Ability
|
||||
}
|
||||
@@ -126,6 +127,18 @@ func (a Ability) String() string {
|
||||
return string(r)
|
||||
}
|
||||
|
||||
type DurScale int8
|
||||
|
||||
//go:generate go run golang.org/x/tools/cmd/stringer@v0.41.0 -type DurScale -trimprefix Duration -linecomment
|
||||
const (
|
||||
DurationDirect DurScale = 1 // directly
|
||||
DurationFrontDistance DurScale = 2 // scaling with distance from the front
|
||||
DurationRemainingHP DurScale = 3 // scaling with remaining HP
|
||||
DurationIncrementPass DurScale = 4 // increasing with each pass while active
|
||||
DurationMidSideBlock DurScale = 5 // scaling with mid-race phase blocked side time
|
||||
DurationRemainingHP2 DurScale = 7 // scaling with remaining HP
|
||||
)
|
||||
|
||||
type AbilityType int8
|
||||
|
||||
//go:generate go run golang.org/x/tools/cmd/stringer@v0.41.0 -type AbilityType -trimprefix Ability -linecomment
|
||||
|
||||
@@ -85,17 +85,40 @@ pub struct activation
|
||||
precondition: condition
|
||||
condition: condition
|
||||
duration: decimal // seconds
|
||||
dur-scale: dur-scale
|
||||
cooldown: decimal // seconds
|
||||
abilities: list<ability> // one to three elements
|
||||
|
||||
pub fun activation/show(a: activation, ?character/show: (character-id) -> string): string
|
||||
match a
|
||||
Activation("", condition, duration, _, abilities) | !duration.is-pos -> condition ++ " -> " ++ abilities.show
|
||||
Activation("", condition, duration, cooldown, abilities) | cooldown >= 500.decimal -> condition ++ " -> for " ++ duration.show ++ "s, " ++ abilities.show
|
||||
Activation("", condition, duration, cooldown, abilities) -> condition ++ " -> for " ++ duration.show ++ "s on " ++ cooldown.show ++ "s cooldown, " ++ abilities.show
|
||||
Activation(precondition, condition, duration, _, abilities) | !duration.is-pos -> precondition ++ " -> " ++ condition ++ " -> " ++ abilities.show
|
||||
Activation(precondition, condition, duration, cooldown, abilities) | cooldown >= 500.decimal -> precondition ++ " -> " ++ condition ++ " -> for " ++ duration.show ++ "s, " ++ abilities.show
|
||||
Activation(precondition, condition, duration, cooldown, abilities) -> precondition ++ " -> " ++ condition ++ " -> for " ++ duration.show ++ "s on " ++ cooldown.show ++ "s cooldown, " ++ abilities.show
|
||||
Activation("", condition, duration, _, _, abilities) | !duration.is-pos -> condition ++ " -> " ++ abilities.show
|
||||
Activation("", condition, duration, Direct-Dur, cooldown, abilities) | cooldown >= 500.decimal -> condition ++ " -> for " ++ duration.show ++ "s, " ++ abilities.show
|
||||
Activation("", condition, duration, dur-scale, cooldown, abilities) | cooldown >= 500.decimal -> condition ++ " -> for " ++ duration.show ++ "s " ++ dur-scale.show ++ ", " ++ abilities.show
|
||||
Activation("", condition, duration, Direct-Dur, cooldown, abilities) -> condition ++ " -> for " ++ duration.show ++ "s on " ++ cooldown.show ++ "s cooldown, " ++ abilities.show
|
||||
Activation("", condition, duration, dur-scale, cooldown, abilities) -> condition ++ " -> for " ++ duration.show ++ "s " ++ dur-scale.show ++ " on " ++ cooldown.show ++ "s cooldown, " ++ abilities.show
|
||||
Activation(precondition, condition, duration, _, _, abilities) | !duration.is-pos -> precondition ++ " -> " ++ condition ++ " -> " ++ abilities.show
|
||||
Activation(precondition, condition, duration, Direct-Dur, cooldown, abilities) | cooldown >= 500.decimal -> precondition ++ " -> " ++ condition ++ " -> for " ++ duration.show ++ "s, " ++ abilities.show
|
||||
Activation(precondition, condition, duration, dur-scale, cooldown, abilities) | cooldown >= 500.decimal -> precondition ++ " -> " ++ condition ++ " -> for " ++ duration.show ++ "s " ++ dur-scale.show ++ ", " ++ abilities.show
|
||||
Activation(precondition, condition, duration, Direct-Dur, cooldown, abilities) -> precondition ++ " -> " ++ condition ++ " -> for " ++ duration.show ++ "s on " ++ cooldown.show ++ "s cooldown, " ++ abilities.show
|
||||
Activation(precondition, condition, duration, dur-scale, cooldown, abilities) -> precondition ++ " -> " ++ condition ++ " -> for " ++ duration.show ++ "s " ++ dur-scale.show ++ " on " ++ cooldown.show ++ "s cooldown, " ++ abilities.show
|
||||
|
||||
// Special scaling types for skill activation durations.
|
||||
pub type dur-scale
|
||||
Direct-Dur
|
||||
Front-Distance-Dur
|
||||
Multiply-Remaining-HP
|
||||
Increment-Pass
|
||||
Midrace-Side-Block-Time-Dur
|
||||
Multiply-Remaining-HP2
|
||||
|
||||
pub fun dur-scale/show(s: dur-scale): string
|
||||
match s
|
||||
Direct-Dur -> "with no scaling"
|
||||
Front-Distance-Dur -> "scaling with distance from the front"
|
||||
Multiply-Remaining-HP -> "scaling with remaining HP"
|
||||
Increment-Pass -> "increasing with each pass while active"
|
||||
Midrace-Side-Block-Time-Dur -> "scaling with mid-race phase blocked side time"
|
||||
Multiply-Remaining-HP2 -> "scaling with remaining HP"
|
||||
|
||||
// Effects of activating a skill.
|
||||
pub struct ability
|
||||
|
||||
@@ -216,6 +216,7 @@ type SkillActivation struct {
|
||||
Precondition string
|
||||
Condition string
|
||||
Duration int
|
||||
DurScale int
|
||||
Cooldown int
|
||||
Abilities [3]SkillAbility
|
||||
}
|
||||
@@ -264,67 +265,69 @@ func Skills(ctx context.Context, db *sqlitex.Pool) ([]Skill, error) {
|
||||
Precondition: stmt.ColumnText(9),
|
||||
Condition: stmt.ColumnText(10),
|
||||
Duration: stmt.ColumnInt(11),
|
||||
Cooldown: stmt.ColumnInt(12),
|
||||
DurScale: stmt.ColumnInt(12),
|
||||
Cooldown: stmt.ColumnInt(13),
|
||||
Abilities: [3]SkillAbility{
|
||||
{
|
||||
Type: stmt.ColumnInt(13),
|
||||
ValueUsage: stmt.ColumnInt(14),
|
||||
Value: stmt.ColumnInt(15),
|
||||
Target: stmt.ColumnInt(16),
|
||||
TargetValue: stmt.ColumnInt(17),
|
||||
Type: stmt.ColumnInt(14),
|
||||
ValueUsage: stmt.ColumnInt(15),
|
||||
Value: stmt.ColumnInt(16),
|
||||
Target: stmt.ColumnInt(17),
|
||||
TargetValue: stmt.ColumnInt(18),
|
||||
},
|
||||
{
|
||||
Type: stmt.ColumnInt(18),
|
||||
ValueUsage: stmt.ColumnInt(19),
|
||||
Value: stmt.ColumnInt(20),
|
||||
Target: stmt.ColumnInt(21),
|
||||
TargetValue: stmt.ColumnInt(22),
|
||||
Type: stmt.ColumnInt(19),
|
||||
ValueUsage: stmt.ColumnInt(20),
|
||||
Value: stmt.ColumnInt(21),
|
||||
Target: stmt.ColumnInt(22),
|
||||
TargetValue: stmt.ColumnInt(23),
|
||||
},
|
||||
{
|
||||
Type: stmt.ColumnInt(23),
|
||||
ValueUsage: stmt.ColumnInt(24),
|
||||
Value: stmt.ColumnInt(25),
|
||||
Target: stmt.ColumnInt(26),
|
||||
TargetValue: stmt.ColumnInt(27),
|
||||
Type: stmt.ColumnInt(24),
|
||||
ValueUsage: stmt.ColumnInt(25),
|
||||
Value: stmt.ColumnInt(26),
|
||||
Target: stmt.ColumnInt(27),
|
||||
TargetValue: stmt.ColumnInt(28),
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Precondition: stmt.ColumnText(28),
|
||||
Condition: stmt.ColumnText(29),
|
||||
Duration: stmt.ColumnInt(30),
|
||||
Cooldown: stmt.ColumnInt(31),
|
||||
Precondition: stmt.ColumnText(29),
|
||||
Condition: stmt.ColumnText(30),
|
||||
Duration: stmt.ColumnInt(31),
|
||||
DurScale: stmt.ColumnInt(32),
|
||||
Cooldown: stmt.ColumnInt(33),
|
||||
Abilities: [3]SkillAbility{
|
||||
{
|
||||
Type: stmt.ColumnInt(32),
|
||||
ValueUsage: stmt.ColumnInt(33),
|
||||
Value: stmt.ColumnInt(34),
|
||||
Target: stmt.ColumnInt(35),
|
||||
TargetValue: stmt.ColumnInt(36),
|
||||
Type: stmt.ColumnInt(34),
|
||||
ValueUsage: stmt.ColumnInt(35),
|
||||
Value: stmt.ColumnInt(36),
|
||||
Target: stmt.ColumnInt(37),
|
||||
TargetValue: stmt.ColumnInt(38),
|
||||
},
|
||||
{
|
||||
Type: stmt.ColumnInt(37),
|
||||
ValueUsage: stmt.ColumnInt(38),
|
||||
Value: stmt.ColumnInt(39),
|
||||
Target: stmt.ColumnInt(40),
|
||||
TargetValue: stmt.ColumnInt(41),
|
||||
Type: stmt.ColumnInt(39),
|
||||
ValueUsage: stmt.ColumnInt(40),
|
||||
Value: stmt.ColumnInt(41),
|
||||
Target: stmt.ColumnInt(42),
|
||||
TargetValue: stmt.ColumnInt(43),
|
||||
},
|
||||
{
|
||||
Type: stmt.ColumnInt(42),
|
||||
ValueUsage: stmt.ColumnInt(43),
|
||||
Value: stmt.ColumnInt(44),
|
||||
Target: stmt.ColumnInt(45),
|
||||
TargetValue: stmt.ColumnInt(46),
|
||||
Type: stmt.ColumnInt(44),
|
||||
ValueUsage: stmt.ColumnInt(45),
|
||||
Value: stmt.ColumnInt(46),
|
||||
Target: stmt.ColumnInt(47),
|
||||
TargetValue: stmt.ColumnInt(48),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
SPCost: stmt.ColumnInt(47),
|
||||
InheritID: stmt.ColumnInt(48),
|
||||
UniqueOwnerID: stmt.ColumnInt(49),
|
||||
UniqueOwner: stmt.ColumnText(50),
|
||||
IconID: stmt.ColumnInt(51),
|
||||
Index: stmt.ColumnInt(52),
|
||||
SPCost: stmt.ColumnInt(49),
|
||||
InheritID: stmt.ColumnInt(50),
|
||||
UniqueOwnerID: stmt.ColumnInt(51),
|
||||
UniqueOwner: stmt.ColumnText(52),
|
||||
IconID: stmt.ColumnInt(53),
|
||||
Index: stmt.ColumnInt(54),
|
||||
}
|
||||
r = append(r, s)
|
||||
}
|
||||
|
||||
@@ -39,6 +39,7 @@ var AllSkills = map[SkillID]Skill{
|
||||
{{- end }}
|
||||
Condition: {{ printf "%q" $a.Condition }},
|
||||
Duration: {{ $a.Duration }},
|
||||
DurScale: {{ $a.DurScale }},
|
||||
{{- if $a.Cooldown }}
|
||||
Cooldown: {{ $a.Cooldown }},
|
||||
{{- end }}
|
||||
|
||||
@@ -116,6 +116,14 @@ pub fun activations(s: skill-id): list<activation>
|
||||
precondition = {{ printf "%q" $a.Precondition }},
|
||||
condition = {{ printf "%q" $a.Condition }},
|
||||
duration = {{ $a.Duration }}.decimal{{ if gt $a.Duration 0 }}(-4){{ end }},
|
||||
dur-scale = {{ if eq $a.DurScale 1 }}Direct-Dur
|
||||
{{- else if eq $a.DurScale 2 }}Front-Distance-Dur
|
||||
{{- else if eq $a.DurScale 3 }}Multiply-Remaining-HP
|
||||
{{- else if eq $a.DurScale 4 }}Increment-Pass
|
||||
{{- else if eq $a.DurScale 5 }}Midrace-Side-Block-Time-Dur
|
||||
{{- else if eq $a.DurScale 7 }}Multiply-Remaining-HP2
|
||||
{{- else }}??? $a.DurScale={{ $a.DurScale }}
|
||||
{{- end }},
|
||||
cooldown = {{ $a.Cooldown }}.decimal{{ if gt $a.Cooldown 0 }}(-4){{ end }},
|
||||
abilities = [
|
||||
{{- range $abil := $a.Abilities }}
|
||||
|
||||
@@ -45,6 +45,7 @@ SELECT
|
||||
d.precondition_1,
|
||||
d.condition_1,
|
||||
d.float_ability_time_1,
|
||||
d.ability_time_usage_1,
|
||||
d.float_cooldown_time_1,
|
||||
d.ability_type_1_1,
|
||||
d.ability_value_usage_1_1,
|
||||
@@ -64,6 +65,7 @@ SELECT
|
||||
d.precondition_2,
|
||||
d.condition_2,
|
||||
d.float_ability_time_2,
|
||||
d.ability_time_usage_2,
|
||||
d.float_cooldown_time_2,
|
||||
d.ability_type_2_1,
|
||||
d.ability_value_usage_2_1,
|
||||
|
||||
Reference in New Issue
Block a user