horsegen: generate enumerations and lists

This commit is contained in:
2026-01-27 21:50:57 -05:00
parent 98afe7384a
commit 542d4198e7
4 changed files with 1712 additions and 0 deletions

View File

@@ -8,6 +8,167 @@ import std/data/rb-map
import horse/game-id import horse/game-id
pub import horse/character pub import horse/character
// Enumeration of all characters for type-safe programming.
pub type character
Special-Week
Silence-Suzuka
Tokai-Teio
Maruzensky
Fuji-Kiseki
Oguri-Cap
Gold-Ship
Vodka
Daiwa-Scarlet
Taiki-Shuttle
Grass-Wonder
Hishi-Amazon
Mejiro-McQueen
El-Condor-Pasa
TM-Opera-O
Narita-Brian
Symboli-Rudolf
Air-Groove
Agnes-Digital
Seiun-Sky
Tamamo-Cross
Fine-Motion
Biwa-Hayahide
Mayano-Top-Gun
Manhattan-Cafe
Mihono-Bourbon
Mejiro-Ryan
Hishi-Akebono
Rice-Shower
Agnes-Tachyon
Admire-Vega
Inari-One
Winning-Ticket
Eishin-Flash
Curren-Chan
Kawakami-Princess
Gold-City
Sakura-Bakushin-O
Sweep-Tosho
Super-Creek
Smart-Falcon
Tosen-Jordan
Narita-Taishin
Nishino-Flower
Haru-Urara
Matikanefukukitaru
Meisho-Doto
Mejiro-Dober
Nice-Nature
King-Halo
// Get the character ID for a character.
pub fun character-id(c: character): character-id
match c
Special-Week -> Character-id(1001)
Silence-Suzuka -> Character-id(1002)
Tokai-Teio -> Character-id(1003)
Maruzensky -> Character-id(1004)
Fuji-Kiseki -> Character-id(1005)
Oguri-Cap -> Character-id(1006)
Gold-Ship -> Character-id(1007)
Vodka -> Character-id(1008)
Daiwa-Scarlet -> Character-id(1009)
Taiki-Shuttle -> Character-id(1010)
Grass-Wonder -> Character-id(1011)
Hishi-Amazon -> Character-id(1012)
Mejiro-McQueen -> Character-id(1013)
El-Condor-Pasa -> Character-id(1014)
TM-Opera-O -> Character-id(1015)
Narita-Brian -> Character-id(1016)
Symboli-Rudolf -> Character-id(1017)
Air-Groove -> Character-id(1018)
Agnes-Digital -> Character-id(1019)
Seiun-Sky -> Character-id(1020)
Tamamo-Cross -> Character-id(1021)
Fine-Motion -> Character-id(1022)
Biwa-Hayahide -> Character-id(1023)
Mayano-Top-Gun -> Character-id(1024)
Manhattan-Cafe -> Character-id(1025)
Mihono-Bourbon -> Character-id(1026)
Mejiro-Ryan -> Character-id(1027)
Hishi-Akebono -> Character-id(1028)
Rice-Shower -> Character-id(1030)
Agnes-Tachyon -> Character-id(1032)
Admire-Vega -> Character-id(1033)
Inari-One -> Character-id(1034)
Winning-Ticket -> Character-id(1035)
Eishin-Flash -> Character-id(1037)
Curren-Chan -> Character-id(1038)
Kawakami-Princess -> Character-id(1039)
Gold-City -> Character-id(1040)
Sakura-Bakushin-O -> Character-id(1041)
Sweep-Tosho -> Character-id(1044)
Super-Creek -> Character-id(1045)
Smart-Falcon -> Character-id(1046)
Tosen-Jordan -> Character-id(1048)
Narita-Taishin -> Character-id(1050)
Nishino-Flower -> Character-id(1051)
Haru-Urara -> Character-id(1052)
Matikanefukukitaru -> Character-id(1056)
Meisho-Doto -> Character-id(1058)
Mejiro-Dober -> Character-id(1059)
Nice-Nature -> Character-id(1060)
King-Halo -> Character-id(1061)
// List of all characters in ID order for easy iterating.
pub val all = [
Special-Week,
Silence-Suzuka,
Tokai-Teio,
Maruzensky,
Fuji-Kiseki,
Oguri-Cap,
Gold-Ship,
Vodka,
Daiwa-Scarlet,
Taiki-Shuttle,
Grass-Wonder,
Hishi-Amazon,
Mejiro-McQueen,
El-Condor-Pasa,
TM-Opera-O,
Narita-Brian,
Symboli-Rudolf,
Air-Groove,
Agnes-Digital,
Seiun-Sky,
Tamamo-Cross,
Fine-Motion,
Biwa-Hayahide,
Mayano-Top-Gun,
Manhattan-Cafe,
Mihono-Bourbon,
Mejiro-Ryan,
Hishi-Akebono,
Rice-Shower,
Agnes-Tachyon,
Admire-Vega,
Inari-One,
Winning-Ticket,
Eishin-Flash,
Curren-Chan,
Kawakami-Princess,
Gold-City,
Sakura-Bakushin-O,
Sweep-Tosho,
Super-Creek,
Smart-Falcon,
Tosen-Jordan,
Narita-Taishin,
Nishino-Flower,
Haru-Urara,
Matikanefukukitaru,
Meisho-Doto,
Mejiro-Dober,
Nice-Nature,
King-Halo,
]
val name2id: rbmap<string, character-id> = rb-map/empty() val name2id: rbmap<string, character-id> = rb-map/empty()
.set("Special Week", Character-id(1001)) .set("Special Week", Character-id(1001))
.set("Silence Suzuka", Character-id(1002)) .set("Silence Suzuka", Character-id(1002))

File diff suppressed because it is too large Load Diff

View File

@@ -9,6 +9,26 @@ import std/data/rb-map
import horse/game-id import horse/game-id
pub import horse/character pub import horse/character
// Enumeration of all characters for type-safe programming.
pub type character
{{- range $uma := $.Characters }}
{{ kkenum $uma.Name }}
{{- end }}
// Get the character ID for a character.
pub fun character-id(c: character): character-id
match c
{{- range $uma := $.Characters }}
{{ kkenum $uma.Name }} -> Character-id({{ $uma.ID }})
{{- end }}
// List of all characters in ID order for easy iterating.
pub val all = [
{{- range $uma := $.Characters }}
{{ kkenum $uma.Name }},
{{- end }}
]
val name2id: rbmap<string, character-id> = rb-map/empty() val name2id: rbmap<string, character-id> = rb-map/empty()
{{- range $uma := $.Characters }} {{- range $uma := $.Characters }}
.set({{ printf "%q" $uma.Name }}, Character-id({{ $uma.ID}})) .set({{ printf "%q" $uma.Name }}, Character-id({{ $uma.ID}}))

View File

@@ -9,6 +9,26 @@ import horse/game-id
import horse/movement import horse/movement
pub import horse/skill pub import horse/skill
// Enumeration of all skills for type-safe programming.
pub type skill
{{- range $s := $.Skills }}
{{ kkenum $s.Name }}{{ if $s.InheritID }}-Inherit{{ end }}
{{- end }}
// Get the skill ID for a skill.
pub fun skill-id(s: skill): skill-id
match s
{{- range $s := $.Skills }}
{{ kkenum $s.Name }}{{ if $s.InheritID }}-Inherit{{ end }} -> Skill-id({{ $s.ID }})
{{- end }}
// List of all skills in ID order for easy iterating.
pub val all = [
{{- range $s := $.Skills }}
{{ kkenum $s.Name }}{{ if $s.InheritID }}-Inherit{{ end }},
{{- end }}
]
val name2id: rbmap<string, skill-id> = rb-map/empty() val name2id: rbmap<string, skill-id> = rb-map/empty()
{{- range $s := $.Skills }} {{- range $s := $.Skills }}
.set({{ printf "%q" $s.Name }}{{ if $s.InheritID }} ++ " (Inherited)"{{ end }}, Skill-id({{ $s.ID }})) .set({{ printf "%q" $s.Name }}{{ if $s.InheritID }} ++ " (Inherited)"{{ end }}, Skill-id({{ $s.ID }}))