176 lines
4.7 KiB
Plaintext
176 lines
4.7 KiB
Plaintext
module horse/spark
|
|
|
|
import std/num/decimal
|
|
import horse/game-id
|
|
import horse/movement
|
|
|
|
// A spark on a veteran.
|
|
pub struct spark-detail
|
|
spark-id: spark-id
|
|
typ: spark-type
|
|
rarity: rarity
|
|
|
|
pub fun detail(id: spark-id, ?spark/spark-type: (spark-id) -> spark-type, ?spark/rarity: (spark-id) -> rarity): spark-detail
|
|
Spark-detail(id, id.spark-type, id.rarity)
|
|
|
|
pub fun spark-detail/show(s: spark-detail, ?spark/show: (spark-id) -> string): string
|
|
s.spark-id.show ++ " " ++ "\u2605".repeat(s.rarity.int)
|
|
|
|
// The category of a spark; roughly, blue, pink, green, or white, with some
|
|
// further subdivisions.
|
|
pub type spark-type
|
|
Stat // blue
|
|
Aptitude // red/pink
|
|
Unique // green
|
|
Race
|
|
Skill
|
|
// skip Carnival Bonus
|
|
Scenario
|
|
Surface
|
|
Distance
|
|
Style
|
|
Hidden
|
|
|
|
// Spark targets and effects.
|
|
pub type spark-effect
|
|
Stat-Up(s: stat, amount: int)
|
|
SP-Up(amount: int)
|
|
// skip Carnival Bonus
|
|
Random-Stat-Up(amount: int)
|
|
Aptitude-Up(a: aptitude, amount: int)
|
|
Skill-Hint(s: skill-id, levels: int)
|
|
Stat-Cap-Up(s: stat, amount: int)
|
|
|
|
// Get the base probability for a spark to trigger during a single inheritance.
|
|
pub fun decimal/base-proc(id: spark-id, ?spark-type: (spark-id) -> spark-type, ?rarity: (spark-id) -> rarity): decimal
|
|
val t = id.spark-type
|
|
val r = id.rarity
|
|
match (t, r)
|
|
(Stat, One) -> 70.decimal(-2)
|
|
(Stat, Two) -> 80.decimal(-2)
|
|
(Stat, Three) -> 90.decimal(-2)
|
|
(Aptitude, One) -> 1.decimal(-2)
|
|
(Aptitude, Two) -> 3.decimal(-2)
|
|
(Aptitude, Three) -> 5.decimal(-2)
|
|
(Unique, One) -> 5.decimal(-2)
|
|
(Unique, Two) -> 10.decimal(-2)
|
|
(Unique, Three) -> 15.decimal(-2)
|
|
(Race, One) -> 1.decimal(-2)
|
|
(Race, Two) -> 2.decimal(-2)
|
|
(Race, Three) -> 3.decimal(-2)
|
|
(_, One) -> 3.decimal(-2)
|
|
(_, Two) -> 6.decimal(-2)
|
|
(_, Three) -> 9.decimal(-2)
|
|
|
|
// The level or star count of a spark.
|
|
pub type rarity
|
|
One
|
|
Two
|
|
Three
|
|
|
|
pub fun rarity/int(l: rarity): int
|
|
match l
|
|
One -> 1
|
|
Two -> 2
|
|
Three -> 3
|
|
|
|
pub fun rarity/show(l: rarity): string
|
|
match l
|
|
One -> "1"
|
|
Two -> "2"
|
|
Three -> "3"
|
|
|
|
// Stat (blue) spark.
|
|
pub type stat
|
|
Speed
|
|
Stamina
|
|
Power
|
|
Guts
|
|
Wit
|
|
|
|
// Automatically generated.
|
|
// Shows a string representation of the `stat` type.
|
|
pub fun stat/show(this : stat) : e string
|
|
match this
|
|
Speed -> "Speed"
|
|
Stamina -> "Stamina"
|
|
Power -> "Power"
|
|
Guts -> "Guts"
|
|
Wit -> "Wit"
|
|
|
|
// Aptitude (red/pink) spark.
|
|
pub type aptitude
|
|
Turf
|
|
Dirt
|
|
Sprint
|
|
Mile
|
|
Medium
|
|
Long
|
|
Front-Runner
|
|
Pace-Chaser
|
|
Late-Surger
|
|
End-Closer
|
|
|
|
// Automatically generated.
|
|
// Fip comparison of the `aptitude` type.
|
|
pub fun aptitude/order2(this : aptitude, other : aptitude) : e order2<aptitude>
|
|
match (this, other)
|
|
(Turf, Turf) -> Eq2(Turf)
|
|
(Turf, other') -> Lt2(Turf, other')
|
|
(this', Turf) -> Gt2(Turf, this')
|
|
(Dirt, Dirt) -> Eq2(Dirt)
|
|
(Dirt, other') -> Lt2(Dirt, other')
|
|
(this', Dirt) -> Gt2(Dirt, this')
|
|
(Sprint, Sprint) -> Eq2(Sprint)
|
|
(Sprint, other') -> Lt2(Sprint, other')
|
|
(this', Sprint) -> Gt2(Sprint, this')
|
|
(Mile, Mile) -> Eq2(Mile)
|
|
(Mile, other') -> Lt2(Mile, other')
|
|
(this', Mile) -> Gt2(Mile, this')
|
|
(Medium, Medium) -> Eq2(Medium)
|
|
(Medium, other') -> Lt2(Medium, other')
|
|
(this', Medium) -> Gt2(Medium, this')
|
|
(Long, Long) -> Eq2(Long)
|
|
(Long, other') -> Lt2(Long, other')
|
|
(this', Long) -> Gt2(Long, this')
|
|
(Front-Runner, Front-Runner) -> Eq2(Front-Runner)
|
|
(Front-Runner, other') -> Lt2(Front-Runner, other')
|
|
(this', Front-Runner) -> Gt2(Front-Runner, this')
|
|
(Pace-Chaser, Pace-Chaser) -> Eq2(Pace-Chaser)
|
|
(Pace-Chaser, other') -> Lt2(Pace-Chaser, other')
|
|
(this', Pace-Chaser) -> Gt2(Pace-Chaser, this')
|
|
(Late-Surger, Late-Surger) -> Eq2(Late-Surger)
|
|
(Late-Surger, other') -> Lt2(Late-Surger, other')
|
|
(this', Late-Surger) -> Gt2(Late-Surger, this')
|
|
(End-Closer, End-Closer) -> Eq2(End-Closer)
|
|
|
|
// Automatically generated.
|
|
// Equality comparison of the `aptitude` type.
|
|
pub fun aptitude/(==)(this : aptitude, other : aptitude) : e bool
|
|
match (this, other)
|
|
(Turf, Turf) -> True
|
|
(Dirt, Dirt) -> True
|
|
(Sprint, Sprint) -> True
|
|
(Mile, Mile) -> True
|
|
(Medium, Medium) -> True
|
|
(Long, Long) -> True
|
|
(Front-Runner, Front-Runner) -> True
|
|
(Pace-Chaser, Pace-Chaser) -> True
|
|
(Late-Surger, Late-Surger) -> True
|
|
(End-Closer, End-Closer) -> True
|
|
(_, _) -> False
|
|
|
|
// Shows a string representation of the `aptitude` type.
|
|
pub fun aptitude/show(this : aptitude): string
|
|
match this
|
|
Turf -> "Turf"
|
|
Dirt -> "Dirt"
|
|
Sprint -> "Sprint"
|
|
Mile -> "Mile"
|
|
Medium -> "Medium"
|
|
Long -> "Long"
|
|
Front-Runner -> "Front Runner"
|
|
Pace-Chaser -> "Pace Chaser"
|
|
Late-Surger -> "Late Surger"
|
|
End-Closer -> "End Closer"
|