horsegen: generate alternate races/saddles with ids

This commit is contained in:
2026-02-10 13:55:47 -05:00
parent b55e1bc200
commit a534975601
8 changed files with 393 additions and 390 deletions

View File

@@ -29,10 +29,10 @@ const (
RaceAsahiHaiFuturityStakes RaceID = 1022 // Asahi Hai Futurity Stakes RaceAsahiHaiFuturityStakes RaceID = 1022 // Asahi Hai Futurity Stakes
RaceArimaKinen RaceID = 1023 // Arima Kinen RaceArimaKinen RaceID = 1023 // Arima Kinen
RaceHopefulStakes RaceID = 1024 // Hopeful Stakes RaceHopefulStakes RaceID = 1024 // Hopeful Stakes
RaceTakarazukaKinenAlternate RaceID = 1025 // Takarazuka Kinen RaceTakarazukaKinenAlt1025 RaceID = 1025 // Takarazuka Kinen
RaceKikukaShoAlternate RaceID = 1026 // Kikuka Sho RaceKikukaShoAlt1026 RaceID = 1026 // Kikuka Sho
RaceTennoShoSpringAlternate RaceID = 1027 // Tenno Sho (Spring) RaceTennoShoSpringAlt1027 RaceID = 1027 // Tenno Sho (Spring)
RaceSatsukiShoAlternate RaceID = 1028 // Satsuki Sho RaceSatsukiShoAlt1028 RaceID = 1028 // Satsuki Sho
RaceTeioSho RaceID = 1101 // Teio Sho RaceTeioSho RaceID = 1101 // Teio Sho
RaceJapanDirtDerby RaceID = 1102 // Japan Dirt Derby RaceJapanDirtDerby RaceID = 1102 // Japan Dirt Derby
RaceJBCLadiesClassic RaceID = 1103 // JBC Ladies Classic RaceJBCLadiesClassic RaceID = 1103 // JBC Ladies Classic
@@ -73,7 +73,7 @@ const (
RaceDailyHaiJuniorStakes RaceID = 2032 // Daily Hai Junior Stakes RaceDailyHaiJuniorStakes RaceID = 2032 // Daily Hai Junior Stakes
RaceStayersStakes RaceID = 2033 // Stayers Stakes RaceStayersStakes RaceID = 2033 // Stayers Stakes
RaceHanshinCup RaceID = 2034 // Hanshin Cup RaceHanshinCup RaceID = 2034 // Hanshin Cup
RaceSpringStakesAlternate RaceID = 2035 // Spring Stakes RaceSpringStakesAlt2035 RaceID = 2035 // Spring Stakes
RaceKyotoKimpai RaceID = 3001 // Kyoto Kimpai RaceKyotoKimpai RaceID = 3001 // Kyoto Kimpai
RaceNakayamaKimpai RaceID = 3002 // Nakayama Kimpai RaceNakayamaKimpai RaceID = 3002 // Nakayama Kimpai
RaceShinzanKinen RaceID = 3003 // Shinzan Kinen RaceShinzanKinen RaceID = 3003 // Shinzan Kinen
@@ -413,27 +413,27 @@ var AllRaces = map[RaceID]Race{
Name: "Hopeful Stakes", Name: "Hopeful Stakes",
Thumbnail: 1024, Thumbnail: 1024,
}, },
RaceTakarazukaKinenAlternate: { RaceTakarazukaKinenAlt1025: {
ID: 1025, ID: 1025,
Name: "Takarazuka Kinen" + " (Alternate)", Name: "Takarazuka Kinen" + " (Alternate 1025)",
Thumbnail: 1012, Thumbnail: 1012,
Primary: 1012, Primary: 1012,
}, },
RaceKikukaShoAlternate: { RaceKikukaShoAlt1026: {
ID: 1026, ID: 1026,
Name: "Kikuka Sho" + " (Alternate)", Name: "Kikuka Sho" + " (Alternate 1026)",
Thumbnail: 1015, Thumbnail: 1015,
Primary: 1015, Primary: 1015,
}, },
RaceTennoShoSpringAlternate: { RaceTennoShoSpringAlt1027: {
ID: 1027, ID: 1027,
Name: "Tenno Sho (Spring)" + " (Alternate)", Name: "Tenno Sho (Spring)" + " (Alternate 1027)",
Thumbnail: 1027, Thumbnail: 1027,
Primary: 1006, Primary: 1006,
}, },
RaceSatsukiShoAlternate: { RaceSatsukiShoAlt1028: {
ID: 1028, ID: 1028,
Name: "Satsuki Sho" + " (Alternate)", Name: "Satsuki Sho" + " (Alternate 1028)",
Thumbnail: 1028, Thumbnail: 1028,
Primary: 1005, Primary: 1005,
}, },
@@ -637,9 +637,9 @@ var AllRaces = map[RaceID]Race{
Name: "Hanshin Cup", Name: "Hanshin Cup",
Thumbnail: 2034, Thumbnail: 2034,
}, },
RaceSpringStakesAlternate: { RaceSpringStakesAlt2035: {
ID: 2035, ID: 2035,
Name: "Spring Stakes" + " (Alternate)", Name: "Spring Stakes" + " (Alternate 2035)",
Thumbnail: 2010, Thumbnail: 2010,
Primary: 2010, Primary: 2010,
}, },
@@ -1726,289 +1726,289 @@ var AllRaces = map[RaceID]Race{
} }
var RaceNameToID = map[string]RaceID{ var RaceNameToID = map[string]RaceID{
"February Stakes": 1001, "February Stakes": 1001,
"Takamatsunomiya Kinen": 1002, "Takamatsunomiya Kinen": 1002,
"Osaka Hai": 1003, "Osaka Hai": 1003,
"Oka Sho": 1004, "Oka Sho": 1004,
"Satsuki Sho": 1005, "Satsuki Sho": 1005,
"Tenno Sho (Spring)": 1006, "Tenno Sho (Spring)": 1006,
"NHK Mile Cup": 1007, "NHK Mile Cup": 1007,
"Victoria Mile": 1008, "Victoria Mile": 1008,
"Japanese Oaks": 1009, "Japanese Oaks": 1009,
"Tokyo Yushun (Japanese Derby)": 1010, "Tokyo Yushun (Japanese Derby)": 1010,
"Yasuda Kinen": 1011, "Yasuda Kinen": 1011,
"Takarazuka Kinen": 1012, "Takarazuka Kinen": 1012,
"Sprinters Stakes": 1013, "Sprinters Stakes": 1013,
"Shuka Sho": 1014, "Shuka Sho": 1014,
"Kikuka Sho": 1015, "Kikuka Sho": 1015,
"Tenno Sho (Autumn)": 1016, "Tenno Sho (Autumn)": 1016,
"Queen Elizabeth II Cup": 1017, "Queen Elizabeth II Cup": 1017,
"Mile Championship": 1018, "Mile Championship": 1018,
"Japan Cup": 1019, "Japan Cup": 1019,
"Champions Cup": 1020, "Champions Cup": 1020,
"Hanshin Juvenile Fillies": 1021, "Hanshin Juvenile Fillies": 1021,
"Asahi Hai Futurity Stakes": 1022, "Asahi Hai Futurity Stakes": 1022,
"Arima Kinen": 1023, "Arima Kinen": 1023,
"Hopeful Stakes": 1024, "Hopeful Stakes": 1024,
"Takarazuka Kinen" + " (Alternate)": 1025, "Takarazuka Kinen" + " (Alternate 1025)": 1025,
"Kikuka Sho" + " (Alternate)": 1026, "Kikuka Sho" + " (Alternate 1026)": 1026,
"Tenno Sho (Spring)" + " (Alternate)": 1027, "Tenno Sho (Spring)" + " (Alternate 1027)": 1027,
"Satsuki Sho" + " (Alternate)": 1028, "Satsuki Sho" + " (Alternate 1028)": 1028,
"Teio Sho": 1101, "Teio Sho": 1101,
"Japan Dirt Derby": 1102, "Japan Dirt Derby": 1102,
"JBC Ladies Classic": 1103, "JBC Ladies Classic": 1103,
"JBC Sprint": 1104, "JBC Sprint": 1104,
"JBC Classic": 1105, "JBC Classic": 1105,
"Tokyo Daishoten": 1106, "Tokyo Daishoten": 1106,
"Nikkei Shinshun Hai": 2001, "Nikkei Shinshun Hai": 2001,
"Tokai Stakes": 2002, "Tokai Stakes": 2002,
"American JCC": 2003, "American JCC": 2003,
"Kyoto Kinen": 2004, "Kyoto Kinen": 2004,
"Nakayama Kinen": 2005, "Nakayama Kinen": 2005,
"Yayoi Sho": 2006, "Yayoi Sho": 2006,
"Kinko Sho": 2007, "Kinko Sho": 2007,
"Fillies' Revue": 2008, "Fillies' Revue": 2008,
"Hanshin Daishoten": 2009, "Hanshin Daishoten": 2009,
"Spring Stakes": 2010, "Spring Stakes": 2010,
"Nikkei Sho": 2011, "Nikkei Sho": 2011,
"Hanshin Umamusume Stakes": 2012, "Hanshin Umamusume Stakes": 2012,
"New Zealand Trophy": 2013, "New Zealand Trophy": 2013,
"Milers Cup": 2014, "Milers Cup": 2014,
"Flora Stakes": 2015, "Flora Stakes": 2015,
"Aoba Sho": 2016, "Aoba Sho": 2016,
"Kyoto Shimbun Hai": 2017, "Kyoto Shimbun Hai": 2017,
"Keio Hai Spring Cup": 2018, "Keio Hai Spring Cup": 2018,
"Meguro Kinen": 2019, "Meguro Kinen": 2019,
"Sapporo Kinen": 2020, "Sapporo Kinen": 2020,
"Centaur Stakes": 2021, "Centaur Stakes": 2021,
"Rose Stakes": 2022, "Rose Stakes": 2022,
"St. Lite Kinen": 2023, "St. Lite Kinen": 2023,
"Kobe Shimbun Hai": 2024, "Kobe Shimbun Hai": 2024,
"All Comers": 2025, "All Comers": 2025,
"Mainichi Okan": 2026, "Mainichi Okan": 2026,
"Kyoto Daishoten": 2027, "Kyoto Daishoten": 2027,
"Fuchu Umamusume Stakes": 2028, "Fuchu Umamusume Stakes": 2028,
"Swan Stakes": 2029, "Swan Stakes": 2029,
"Keio Hai Junior Stakes": 2030, "Keio Hai Junior Stakes": 2030,
"Copa Republica Argentina": 2031, "Copa Republica Argentina": 2031,
"Daily Hai Junior Stakes": 2032, "Daily Hai Junior Stakes": 2032,
"Stayers Stakes": 2033, "Stayers Stakes": 2033,
"Hanshin Cup": 2034, "Hanshin Cup": 2034,
"Spring Stakes" + " (Alternate)": 2035, "Spring Stakes" + " (Alternate 2035)": 2035,
"Kyoto Kimpai": 3001, "Kyoto Kimpai": 3001,
"Nakayama Kimpai": 3002, "Nakayama Kimpai": 3002,
"Shinzan Kinen": 3003, "Shinzan Kinen": 3003,
"Fairy Stakes": 3004, "Fairy Stakes": 3004,
"Aichi Hai": 3005, "Aichi Hai": 3005,
"Keisei Hai": 3006, "Keisei Hai": 3006,
"Silk Road Stakes": 3007, "Silk Road Stakes": 3007,
"Negishi Stakes": 3008, "Negishi Stakes": 3008,
"Kisaragi Sho": 3009, "Kisaragi Sho": 3009,
"Tokyo Shimbun Hai": 3010, "Tokyo Shimbun Hai": 3010,
"Queen Cup": 3011, "Queen Cup": 3011,
"Kyodo News Hai": 3012, "Kyodo News Hai": 3012,
"Kyoto Umamusume Stakes": 3013, "Kyoto Umamusume Stakes": 3013,
"Diamond Stakes": 3014, "Diamond Stakes": 3014,
"Kokura Daishoten": 3015, "Kokura Daishoten": 3015,
"Arlington Cup": 3016, "Arlington Cup": 3016,
"Hankyu Hai": 3017, "Hankyu Hai": 3017,
"Tulip Sho": 3018, "Tulip Sho": 3018,
"Ocean Stakes": 3019, "Ocean Stakes": 3019,
"Nakayama Umamusume Stakes": 3020, "Nakayama Umamusume Stakes": 3020,
"Falcon Stakes": 3021, "Falcon Stakes": 3021,
"Flower Cup": 3022, "Flower Cup": 3022,
"Mainichi Hai": 3023, "Mainichi Hai": 3023,
"March Stakes": 3024, "March Stakes": 3024,
"Lord Derby Challenge Trophy": 3025, "Lord Derby Challenge Trophy": 3025,
"Antares Stakes": 3026, "Antares Stakes": 3026,
"Fukushima Umamusume Stakes": 3027, "Fukushima Umamusume Stakes": 3027,
"Niigata Daishoten": 3028, "Niigata Daishoten": 3028,
"Heian Stakes": 3029, "Heian Stakes": 3029,
"Naruo Kinen": 3030, "Naruo Kinen": 3030,
"Mermaid Stakes": 3031, "Mermaid Stakes": 3031,
"Epsom Cup": 3032, "Epsom Cup": 3032,
"Unicorn Stakes": 3033, "Unicorn Stakes": 3033,
"Hakodate Sprint Stakes": 3034, "Hakodate Sprint Stakes": 3034,
"CBC Sho": 3035, "CBC Sho": 3035,
"Radio Nikkei Sho": 3036, "Radio Nikkei Sho": 3036,
"Procyon Stakes": 3037, "Procyon Stakes": 3037,
"Tanabata Sho": 3038, "Tanabata Sho": 3038,
"Hakodate Kinen": 3039, "Hakodate Kinen": 3039,
"Chukyo Kinen": 3040, "Chukyo Kinen": 3040,
"Hakodate Junior Stakes": 3041, "Hakodate Junior Stakes": 3041,
"Ibis Summer Dash": 3042, "Ibis Summer Dash": 3042,
"Queen Stakes": 3043, "Queen Stakes": 3043,
"Kokura Kinen": 3044, "Kokura Kinen": 3044,
"Leopard Stakes": 3045, "Leopard Stakes": 3045,
"Sekiya Kinen": 3046, "Sekiya Kinen": 3046,
"Elm Stakes": 3047, "Elm Stakes": 3047,
"Kitakyushu Kinen": 3048, "Kitakyushu Kinen": 3048,
"Niigata Junior Stakes": 3049, "Niigata Junior Stakes": 3049,
"Keeneland Cup": 3050, "Keeneland Cup": 3050,
"Sapporo Junior Stakes": 3051, "Sapporo Junior Stakes": 3051,
"Kokura Junior Stakes": 3052, "Kokura Junior Stakes": 3052,
"Niigata Kinen": 3053, "Niigata Kinen": 3053,
"Shion Stakes": 3054, "Shion Stakes": 3054,
"Keisei Hai Autumn Handicap": 3055, "Keisei Hai Autumn Handicap": 3055,
"Sirius Stakes": 3056, "Sirius Stakes": 3056,
"Saudi Arabia Royal Cup": 3057, "Saudi Arabia Royal Cup": 3057,
"Fuji Stakes": 3058, "Fuji Stakes": 3058,
"Artemis Stakes": 3059, "Artemis Stakes": 3059,
"Fantasy Stakes": 3060, "Fantasy Stakes": 3060,
"Miyako Stakes": 3061, "Miyako Stakes": 3061,
"Musashino Stakes": 3062, "Musashino Stakes": 3062,
"Fukushima Kinen": 3063, "Fukushima Kinen": 3063,
"Tokyo Sports Hai Junior Stakes": 3064, "Tokyo Sports Hai Junior Stakes": 3064,
"Kyoto Junior Stakes": 3065, "Kyoto Junior Stakes": 3065,
"Keihan Hai": 3066, "Keihan Hai": 3066,
"Challenge Cup": 3067, "Challenge Cup": 3067,
"Chunichi Shimbun Hai": 3068, "Chunichi Shimbun Hai": 3068,
"Capella Stakes": 3069, "Capella Stakes": 3069,
"Turquoise Stakes": 3070, "Turquoise Stakes": 3070,
"Manyo Stakes": 4001, "Manyo Stakes": 4001,
"Junior Cup": 4002, "Junior Cup": 4002,
"Yodo Tankyori Stakes": 4003, "Yodo Tankyori Stakes": 4003,
"Pollux Stakes": 4004, "Pollux Stakes": 4004,
"January Stakes": 4005, "January Stakes": 4005,
"New Year Stakes": 4006, "New Year Stakes": 4006,
"Kobai Stakes": 4007, "Kobai Stakes": 4007,
"Subaru Stakes": 4008, "Subaru Stakes": 4008,
"Wakagoma Stakes": 4009, "Wakagoma Stakes": 4009,
"Carbuncle Stakes": 4010, "Carbuncle Stakes": 4010,
"Shirafuji Stakes": 4011, "Shirafuji Stakes": 4011,
"Crocus Stakes": 4012, "Crocus Stakes": 4012,
"Yamato Stakes": 4013, "Yamato Stakes": 4013,
"Elfin Stakes": 4014, "Elfin Stakes": 4014,
"Rakuyo Stakes": 4015, "Rakuyo Stakes": 4015,
"Aldebaran Stakes": 4016, "Aldebaran Stakes": 4016,
"Valentine Stakes": 4017, "Valentine Stakes": 4017,
"Hyacinth Stakes": 4018, "Hyacinth Stakes": 4018,
"Sobu Stakes": 4019, "Sobu Stakes": 4019,
"Sumire Stakes": 4020, "Sumire Stakes": 4020,
"Osakajo Stakes": 4021, "Osakajo Stakes": 4021,
"Polaris Stakes": 4022, "Polaris Stakes": 4022,
"Nigawa Stakes": 4023, "Nigawa Stakes": 4023,
"Anemone Stakes": 4024, "Anemone Stakes": 4024,
"Shoryu Stakes": 4025, "Shoryu Stakes": 4025,
"Kochi Stakes": 4026, "Kochi Stakes": 4026,
"Wakaba Stakes": 4027, "Wakaba Stakes": 4027,
"Chiba Stakes": 4028, "Chiba Stakes": 4028,
"Rokko Stakes": 4030, "Rokko Stakes": 4030,
"Coral Stakes": 4031, "Coral Stakes": 4031,
"Marguerite Stakes": 4032, "Marguerite Stakes": 4032,
"Fukuryu Stakes": 4033, "Fukuryu Stakes": 4033,
"Wasurenagusa Sho": 4035, "Wasurenagusa Sho": 4035,
"Keiyo Stakes": 4036, "Keiyo Stakes": 4036,
"Shunrai Stakes": 4037, "Shunrai Stakes": 4037,
"Fukushima Mimpo Hai": 4038, "Fukushima Mimpo Hai": 4038,
"Tachibana Stakes": 4039, "Tachibana Stakes": 4039,
"Oasis Stakes": 4040, "Oasis Stakes": 4040,
"Tennozan Stakes": 4041, "Tennozan Stakes": 4041,
"Tango Stakes": 4042, "Tango Stakes": 4042,
"Sweetpea Stakes": 4043, "Sweetpea Stakes": 4043,
"Tanigawadake Stakes": 4044, "Tanigawadake Stakes": 4044,
"Principal Stakes": 4045, "Principal Stakes": 4045,
"Metropolitan Stakes": 4046, "Metropolitan Stakes": 4046,
"Kurama Stakes": 4047, "Kurama Stakes": 4047,
"Brilliant Stakes": 4048, "Brilliant Stakes": 4048,
"Miyakooji Stakes": 4049, "Miyakooji Stakes": 4049,
"Aoi Stakes": 4050, "Aoi Stakes": 4050,
"Ritto Stakes": 4051, "Ritto Stakes": 4051,
"Seiryu Stakes": 4052, "Seiryu Stakes": 4052,
"May Stakes": 4053, "May Stakes": 4053,
"Hosu Stakes": 4054, "Hosu Stakes": 4054,
"Idaten Stakes": 4055, "Idaten Stakes": 4055,
"Shirayuri Stakes": 4056, "Shirayuri Stakes": 4056,
"Keyaki Stakes": 4057, "Keyaki Stakes": 4057,
"Azuchijo Stakes": 4058, "Azuchijo Stakes": 4058,
"Akhalteke Stakes": 4059, "Akhalteke Stakes": 4059,
"Tempozan Stakes": 4060, "Tempozan Stakes": 4060,
"Yonago Stakes": 4061, "Yonago Stakes": 4061,
"Onuma Stakes": 4062, "Onuma Stakes": 4062,
"Paradise Stakes": 4063, "Paradise Stakes": 4063,
"Tomoe Sho": 4064, "Tomoe Sho": 4064,
"Marine Stakes": 4065, "Marine Stakes": 4065,
"Meitetsu Hai": 4066, "Meitetsu Hai": 4066,
"Chukyo Junior Stakes": 4068, "Chukyo Junior Stakes": 4068,
"Fukushima TV Open": 4069, "Fukushima TV Open": 4069,
"Dahlia Sho": 4070, "Dahlia Sho": 4070,
"Sapporo Nikkei Open": 4071, "Sapporo Nikkei Open": 4071,
"UHB Sho": 4072, "UHB Sho": 4072,
"Aso Stakes": 4073, "Aso Stakes": 4073,
"Phoenix Sho": 4074, "Phoenix Sho": 4074,
"Cosmos Sho": 4075, "Cosmos Sho": 4075,
"NST Sho": 4076, "NST Sho": 4076,
"Clover Sho": 4077, "Clover Sho": 4077,
"Himawari Sho": 4078, "Himawari Sho": 4078,
"BSN Sho": 4079, "BSN Sho": 4079,
"Kokura Nikkei Open": 4080, "Kokura Nikkei Open": 4080,
"Toki Stakes": 4081, "Toki Stakes": 4081,
"Tancho Stakes": 4082, "Tancho Stakes": 4082,
"Suzuran Sho": 4083, "Suzuran Sho": 4083,
"Enif Stakes": 4084, "Enif Stakes": 4084,
"Nojigiku Stakes": 4085, "Nojigiku Stakes": 4085,
"Radio Nippon Sho": 4086, "Radio Nippon Sho": 4086,
"Kikyo Stakes": 4087, "Kikyo Stakes": 4087,
"Fuyo Stakes": 4088, "Fuyo Stakes": 4088,
"Canna Stakes": 4089, "Canna Stakes": 4089,
"Port Island Stakes": 4090, "Port Island Stakes": 4090,
"Opal Stakes": 4091, "Opal Stakes": 4091,
"Green Channel Cup": 4092, "Green Channel Cup": 4092,
"Momiji Stakes": 4093, "Momiji Stakes": 4093,
"October Stakes": 4094, "October Stakes": 4094,
"Shinetsu Stakes": 4095, "Shinetsu Stakes": 4095,
"Ivy Stakes": 4096, "Ivy Stakes": 4096,
"Muromachi Stakes": 4097, "Muromachi Stakes": 4097,
"Brazil Cup": 4098, "Brazil Cup": 4098,
"Hagi Stakes": 4099, "Hagi Stakes": 4099,
"Cassiopeia Stakes": 4100, "Cassiopeia Stakes": 4100,
"Lumiere Autumn Dash": 4101, "Lumiere Autumn Dash": 4101,
"Oro Cup": 4102, "Oro Cup": 4102,
"Fukushima Junior Stakes": 4103, "Fukushima Junior Stakes": 4103,
"Andromeda Stakes": 4104, "Andromeda Stakes": 4104,
"Shimotsuki Stakes": 4105, "Shimotsuki Stakes": 4105,
"Fukushima Minyu Cup": 4106, "Fukushima Minyu Cup": 4106,
"Capital Stakes": 4107, "Capital Stakes": 4107,
"Autumn Leaf Stakes": 4108, "Autumn Leaf Stakes": 4108,
"Lapis Lazuli Stakes": 4109, "Lapis Lazuli Stakes": 4109,
"Shiwasu Stakes": 4110, "Shiwasu Stakes": 4110,
"Rigel Stakes": 4111, "Rigel Stakes": 4111,
"Tanzanite Stakes": 4112, "Tanzanite Stakes": 4112,
"December Stakes": 4113, "December Stakes": 4113,
"Christmas Rose Stakes": 4114, "Christmas Rose Stakes": 4114,
"Galaxy Stakes": 4115, "Galaxy Stakes": 4115,
"Betelgeuse Stakes": 4116, "Betelgeuse Stakes": 4116,
"Kitakyushu Tankyori Stakes": 4118, "Kitakyushu Tankyori Stakes": 4118,
"Azumakofuji Stakes": 4119, "Azumakofuji Stakes": 4119,
"Sleipnir Stakes": 4120, "Sleipnir Stakes": 4120,
"Sannomiya Stakes": 4121, "Sannomiya Stakes": 4121,
"Kanetsu Stakes": 4122, "Kanetsu Stakes": 4122,
"Nagatsuki Stakes": 4123, "Nagatsuki Stakes": 4123,
"Uzumasa Stakes": 4124, "Uzumasa Stakes": 4124,
"Aster Sho": 4501, "Aster Sho": 4501,
"Saffron Sho": 4502, "Saffron Sho": 4502,
"Rindo Sho": 4503, "Rindo Sho": 4503,
"Shigiku Sho": 4504, "Shigiku Sho": 4504,
"Platanus Sho": 4505, "Platanus Sho": 4505,
"Nadeshiko Sho": 4506, "Nadeshiko Sho": 4506,
"Hyakunichiso Tokubetsu": 4507, "Hyakunichiso Tokubetsu": 4507,
"Kimmokusei Tokubetsu": 4508, "Kimmokusei Tokubetsu": 4508,
"Oxalis Sho": 4509, "Oxalis Sho": 4509,
"Kigiku Sho": 4510, "Kigiku Sho": 4510,
"Mochinoki Sho": 4511, "Mochinoki Sho": 4511,
"Akamatsu Sho": 4512, "Akamatsu Sho": 4512,
"Shumeigiku Sho": 4513, "Shumeigiku Sho": 4513,
"Cattleya Sho": 4514, "Cattleya Sho": 4514,
"Begonia Sho": 4515, "Begonia Sho": 4515,
"Shiragiku Sho": 4516, "Shiragiku Sho": 4516,
"Habotan Sho": 4517, "Habotan Sho": 4517,
"Koyamaki Sho": 4518, "Koyamaki Sho": 4518,
"Manryo Sho": 4519, "Manryo Sho": 4519,
"Kuromatsu Sho": 4520, "Kuromatsu Sho": 4520,
"Erica Sho": 4521, "Erica Sho": 4521,
"Tsuwabuki Sho": 4522, "Tsuwabuki Sho": 4522,
"Hiiragi Sho": 4523, "Hiiragi Sho": 4523,
"Sazanka Sho": 4524, "Sazanka Sho": 4524,
"Kantsubaki Sho": 4525, "Kantsubaki Sho": 4525,
"Senryo Sho": 4526, "Senryo Sho": 4526,
} }

View File

@@ -32,10 +32,10 @@ pub type race
Asahi-Hai-Futurity-Stakes Asahi-Hai-Futurity-Stakes
Arima-Kinen Arima-Kinen
Hopeful-Stakes Hopeful-Stakes
Takarazuka-Kinen-Alternate Takarazuka-Kinen-Alt1025
Kikuka-Sho-Alternate Kikuka-Sho-Alt1026
Tenno-Sho-Spring-Alternate Tenno-Sho-Spring-Alt1027
Satsuki-Sho-Alternate Satsuki-Sho-Alt1028
Teio-Sho Teio-Sho
Japan-Dirt-Derby Japan-Dirt-Derby
JBC-Ladies-Classic JBC-Ladies-Classic
@@ -76,7 +76,7 @@ pub type race
Daily-Hai-Junior-Stakes Daily-Hai-Junior-Stakes
Stayers-Stakes Stayers-Stakes
Hanshin-Cup Hanshin-Cup
Spring-Stakes-Alternate Spring-Stakes-Alt2035
Kyoto-Kimpai Kyoto-Kimpai
Nakayama-Kimpai Nakayama-Kimpai
Shinzan-Kinen Shinzan-Kinen
@@ -321,10 +321,10 @@ pub fun race-id(r: race): race-id
Asahi-Hai-Futurity-Stakes -> Race-id(1022) Asahi-Hai-Futurity-Stakes -> Race-id(1022)
Arima-Kinen -> Race-id(1023) Arima-Kinen -> Race-id(1023)
Hopeful-Stakes -> Race-id(1024) Hopeful-Stakes -> Race-id(1024)
Takarazuka-Kinen-Alternate -> Race-id(1025) Takarazuka-Kinen-Alt1025 -> Race-id(1025)
Kikuka-Sho-Alternate -> Race-id(1026) Kikuka-Sho-Alt1026 -> Race-id(1026)
Tenno-Sho-Spring-Alternate -> Race-id(1027) Tenno-Sho-Spring-Alt1027 -> Race-id(1027)
Satsuki-Sho-Alternate -> Race-id(1028) Satsuki-Sho-Alt1028 -> Race-id(1028)
Teio-Sho -> Race-id(1101) Teio-Sho -> Race-id(1101)
Japan-Dirt-Derby -> Race-id(1102) Japan-Dirt-Derby -> Race-id(1102)
JBC-Ladies-Classic -> Race-id(1103) JBC-Ladies-Classic -> Race-id(1103)
@@ -365,7 +365,7 @@ pub fun race-id(r: race): race-id
Daily-Hai-Junior-Stakes -> Race-id(2032) Daily-Hai-Junior-Stakes -> Race-id(2032)
Stayers-Stakes -> Race-id(2033) Stayers-Stakes -> Race-id(2033)
Hanshin-Cup -> Race-id(2034) Hanshin-Cup -> Race-id(2034)
Spring-Stakes-Alternate -> Race-id(2035) Spring-Stakes-Alt2035 -> Race-id(2035)
Kyoto-Kimpai -> Race-id(3001) Kyoto-Kimpai -> Race-id(3001)
Nakayama-Kimpai -> Race-id(3002) Nakayama-Kimpai -> Race-id(3002)
Shinzan-Kinen -> Race-id(3003) Shinzan-Kinen -> Race-id(3003)
@@ -609,10 +609,10 @@ pub val all = [
Asahi-Hai-Futurity-Stakes, Asahi-Hai-Futurity-Stakes,
Arima-Kinen, Arima-Kinen,
Hopeful-Stakes, Hopeful-Stakes,
Takarazuka-Kinen-Alternate, Takarazuka-Kinen-Alt1025,
Kikuka-Sho-Alternate, Kikuka-Sho-Alt1026,
Tenno-Sho-Spring-Alternate, Tenno-Sho-Spring-Alt1027,
Satsuki-Sho-Alternate, Satsuki-Sho-Alt1028,
Teio-Sho, Teio-Sho,
Japan-Dirt-Derby, Japan-Dirt-Derby,
JBC-Ladies-Classic, JBC-Ladies-Classic,
@@ -653,7 +653,7 @@ pub val all = [
Daily-Hai-Junior-Stakes, Daily-Hai-Junior-Stakes,
Stayers-Stakes, Stayers-Stakes,
Hanshin-Cup, Hanshin-Cup,
Spring-Stakes-Alternate, Spring-Stakes-Alt2035,
Kyoto-Kimpai, Kyoto-Kimpai,
Nakayama-Kimpai, Nakayama-Kimpai,
Shinzan-Kinen, Shinzan-Kinen,
@@ -897,10 +897,10 @@ val name2id: rbmap<string, race-id> = rb-map/empty()
.set("Asahi Hai Futurity Stakes", Race-id(1022)) .set("Asahi Hai Futurity Stakes", Race-id(1022))
.set("Arima Kinen", Race-id(1023)) .set("Arima Kinen", Race-id(1023))
.set("Hopeful Stakes", Race-id(1024)) .set("Hopeful Stakes", Race-id(1024))
.set("Takarazuka Kinen" ++ " (Alternate)", Race-id(1025)) .set("Takarazuka Kinen" ++ " (Alternate 1025)", Race-id(1025))
.set("Kikuka Sho" ++ " (Alternate)", Race-id(1026)) .set("Kikuka Sho" ++ " (Alternate 1026)", Race-id(1026))
.set("Tenno Sho (Spring)" ++ " (Alternate)", Race-id(1027)) .set("Tenno Sho (Spring)" ++ " (Alternate 1027)", Race-id(1027))
.set("Satsuki Sho" ++ " (Alternate)", Race-id(1028)) .set("Satsuki Sho" ++ " (Alternate 1028)", Race-id(1028))
.set("Teio Sho", Race-id(1101)) .set("Teio Sho", Race-id(1101))
.set("Japan Dirt Derby", Race-id(1102)) .set("Japan Dirt Derby", Race-id(1102))
.set("JBC Ladies Classic", Race-id(1103)) .set("JBC Ladies Classic", Race-id(1103))
@@ -941,7 +941,7 @@ val name2id: rbmap<string, race-id> = rb-map/empty()
.set("Daily Hai Junior Stakes", Race-id(2032)) .set("Daily Hai Junior Stakes", Race-id(2032))
.set("Stayers Stakes", Race-id(2033)) .set("Stayers Stakes", Race-id(2033))
.set("Hanshin Cup", Race-id(2034)) .set("Hanshin Cup", Race-id(2034))
.set("Spring Stakes" ++ " (Alternate)", Race-id(2035)) .set("Spring Stakes" ++ " (Alternate 2035)", Race-id(2035))
.set("Kyoto Kimpai", Race-id(3001)) .set("Kyoto Kimpai", Race-id(3001))
.set("Nakayama Kimpai", Race-id(3002)) .set("Nakayama Kimpai", Race-id(3002))
.set("Shinzan Kinen", Race-id(3003)) .set("Shinzan Kinen", Race-id(3003))
@@ -1160,13 +1160,13 @@ val name2id: rbmap<string, race-id> = rb-map/empty()
.set("Senryo Sho", Race-id(4526)) .set("Senryo Sho", Race-id(4526))
// Get the race ID that has the given exact name. // Get the race ID that has the given exact name.
// Alternate versions of races have " (Alternate)" in their names. // Alternate versions of races have an indication of their ID in their names.
// If no race matches the name, the result is an invalid ID. // If no race matches the name, the result is an invalid ID.
pub fun from-name(name: string): race-id pub fun from-name(name: string): race-id
name2id.lookup(name).default(Race-id(0)) name2id.lookup(name).default(Race-id(0))
// Get the name for a race. // Get the name for a race.
// Alternate versions of races have " (Alternate)" in their names. // Alternate versions of races have an indication of their ID in their names.
// If no race matches the ID, the result is the numeric ID. // If no race matches the ID, the result is the numeric ID.
pub fun show(r: race-id): string pub fun show(r: race-id): string
match r.game-id match r.game-id
@@ -1194,10 +1194,10 @@ pub fun show(r: race-id): string
1022 -> "Asahi Hai Futurity Stakes" 1022 -> "Asahi Hai Futurity Stakes"
1023 -> "Arima Kinen" 1023 -> "Arima Kinen"
1024 -> "Hopeful Stakes" 1024 -> "Hopeful Stakes"
1025 -> "Takarazuka Kinen" ++ " (Alternate)" 1025 -> "Takarazuka Kinen" ++ " (Alternate 1025)"
1026 -> "Kikuka Sho" ++ " (Alternate)" 1026 -> "Kikuka Sho" ++ " (Alternate 1026)"
1027 -> "Tenno Sho (Spring)" ++ " (Alternate)" 1027 -> "Tenno Sho (Spring)" ++ " (Alternate 1027)"
1028 -> "Satsuki Sho" ++ " (Alternate)" 1028 -> "Satsuki Sho" ++ " (Alternate 1028)"
1101 -> "Teio Sho" 1101 -> "Teio Sho"
1102 -> "Japan Dirt Derby" 1102 -> "Japan Dirt Derby"
1103 -> "JBC Ladies Classic" 1103 -> "JBC Ladies Classic"
@@ -1238,7 +1238,7 @@ pub fun show(r: race-id): string
2032 -> "Daily Hai Junior Stakes" 2032 -> "Daily Hai Junior Stakes"
2033 -> "Stayers Stakes" 2033 -> "Stayers Stakes"
2034 -> "Hanshin Cup" 2034 -> "Hanshin Cup"
2035 -> "Spring Stakes" ++ " (Alternate)" 2035 -> "Spring Stakes" ++ " (Alternate 2035)"
3001 -> "Kyoto Kimpai" 3001 -> "Kyoto Kimpai"
3002 -> "Nakayama Kimpai" 3002 -> "Nakayama Kimpai"
3003 -> "Shinzan Kinen" 3003 -> "Shinzan Kinen"

View File

@@ -151,18 +151,18 @@ pub type saddle
Chunichi-Shimbun-Hai Chunichi-Shimbun-Hai
Capella-S Capella-S
Turquoise-S Turquoise-S
Classic-Triple-Crown-Alt1 Classic-Triple-Crown-Alt144
Senior-Spring-Triple-Crown-Alt1 Senior-Spring-Triple-Crown-Alt145
Dual-Grand-Prix-Alt1 Dual-Grand-Prix-Alt146
Takarazuka-Kinen-Alt1 Takarazuka-Kinen-Alt147
Kikuka-Sho-Alt1 Kikuka-Sho-Alt148
Spring-S-Alt1 Spring-S-Alt149
Aoi-S Aoi-S
Senior-Spring-Triple-Crown-Alt2 Senior-Spring-Triple-Crown-Alt151
Tenno-Sweep-Alt1 Tenno-Sweep-Alt152
Tenno-Sho-Spring-Alt1 Tenno-Sho-Spring-Alt153
Classic-Triple-Crown-Alt2 Classic-Triple-Crown-Alt154
Satsuki-Sho-Alt1 Satsuki-Sho-Alt155
// Get the saddle ID for a saddle. // Get the saddle ID for a saddle.
pub fun saddle-id(s: saddle): saddle-id pub fun saddle-id(s: saddle): saddle-id
@@ -310,18 +310,18 @@ pub fun saddle-id(s: saddle): saddle-id
Chunichi-Shimbun-Hai -> Saddle-id(141) Chunichi-Shimbun-Hai -> Saddle-id(141)
Capella-S -> Saddle-id(142) Capella-S -> Saddle-id(142)
Turquoise-S -> Saddle-id(143) Turquoise-S -> Saddle-id(143)
Classic-Triple-Crown-Alt1 -> Saddle-id(144) Classic-Triple-Crown-Alt144 -> Saddle-id(144)
Senior-Spring-Triple-Crown-Alt1 -> Saddle-id(145) Senior-Spring-Triple-Crown-Alt145 -> Saddle-id(145)
Dual-Grand-Prix-Alt1 -> Saddle-id(146) Dual-Grand-Prix-Alt146 -> Saddle-id(146)
Takarazuka-Kinen-Alt1 -> Saddle-id(147) Takarazuka-Kinen-Alt147 -> Saddle-id(147)
Kikuka-Sho-Alt1 -> Saddle-id(148) Kikuka-Sho-Alt148 -> Saddle-id(148)
Spring-S-Alt1 -> Saddle-id(149) Spring-S-Alt149 -> Saddle-id(149)
Aoi-S -> Saddle-id(150) Aoi-S -> Saddle-id(150)
Senior-Spring-Triple-Crown-Alt2 -> Saddle-id(151) Senior-Spring-Triple-Crown-Alt151 -> Saddle-id(151)
Tenno-Sweep-Alt1 -> Saddle-id(152) Tenno-Sweep-Alt152 -> Saddle-id(152)
Tenno-Sho-Spring-Alt1 -> Saddle-id(153) Tenno-Sho-Spring-Alt153 -> Saddle-id(153)
Classic-Triple-Crown-Alt2 -> Saddle-id(154) Classic-Triple-Crown-Alt154 -> Saddle-id(154)
Satsuki-Sho-Alt1 -> Saddle-id(155) Satsuki-Sho-Alt155 -> Saddle-id(155)
// List of all saddles in ID order for easy iterating. // List of all saddles in ID order for easy iterating.
pub val all = [ pub val all = [
@@ -468,22 +468,22 @@ pub val all = [
Chunichi-Shimbun-Hai, Chunichi-Shimbun-Hai,
Capella-S, Capella-S,
Turquoise-S, Turquoise-S,
Classic-Triple-Crown-Alt1, Classic-Triple-Crown-Alt144,
Senior-Spring-Triple-Crown-Alt1, Senior-Spring-Triple-Crown-Alt145,
Dual-Grand-Prix-Alt1, Dual-Grand-Prix-Alt146,
Takarazuka-Kinen-Alt1, Takarazuka-Kinen-Alt147,
Kikuka-Sho-Alt1, Kikuka-Sho-Alt148,
Spring-S-Alt1, Spring-S-Alt149,
Aoi-S, Aoi-S,
Senior-Spring-Triple-Crown-Alt2, Senior-Spring-Triple-Crown-Alt151,
Tenno-Sweep-Alt1, Tenno-Sweep-Alt152,
Tenno-Sho-Spring-Alt1, Tenno-Sho-Spring-Alt153,
Classic-Triple-Crown-Alt2, Classic-Triple-Crown-Alt154,
Satsuki-Sho-Alt1, Satsuki-Sho-Alt155,
] ]
// Get the name for a saddle. // Get the name for a saddle.
// Alternate versions of saddles have an indication of such in their names. // Alternate versions of saddles have an indication of their ID in their names.
// If no saddle matches the ID, the result contains the numeric ID. // If no saddle matches the ID, the result contains the numeric ID.
pub fun show(s: saddle-id): string pub fun show(s: saddle-id): string
match s.game-id match s.game-id
@@ -630,18 +630,18 @@ pub fun show(s: saddle-id): string
141 -> "Chunichi Shimbun Hai" 141 -> "Chunichi Shimbun Hai"
142 -> "Capella S." 142 -> "Capella S."
143 -> "Turquoise S." 143 -> "Turquoise S."
144 -> "Classic Triple Crown" ++ " (Alternate 1)" 144 -> "Classic Triple Crown" ++ " (Alternate 144)"
145 -> "Senior Spring Triple Crown" ++ " (Alternate 1)" 145 -> "Senior Spring Triple Crown" ++ " (Alternate 145)"
146 -> "Dual Grand Prix" ++ " (Alternate 1)" 146 -> "Dual Grand Prix" ++ " (Alternate 146)"
147 -> "Takarazuka Kinen" ++ " (Alternate 1)" 147 -> "Takarazuka Kinen" ++ " (Alternate 147)"
148 -> "Kikuka Sho" ++ " (Alternate 1)" 148 -> "Kikuka Sho" ++ " (Alternate 148)"
149 -> "Spring S." ++ " (Alternate 1)" 149 -> "Spring S." ++ " (Alternate 149)"
150 -> "Aoi S." 150 -> "Aoi S."
151 -> "Senior Spring Triple Crown" ++ " (Alternate 2)" 151 -> "Senior Spring Triple Crown" ++ " (Alternate 151)"
152 -> "Tenno Sweep" ++ " (Alternate 1)" 152 -> "Tenno Sweep" ++ " (Alternate 152)"
153 -> "Tenno Sho (Spring)" ++ " (Alternate 1)" 153 -> "Tenno Sho (Spring)" ++ " (Alternate 153)"
154 -> "Classic Triple Crown" ++ " (Alternate 2)" 154 -> "Classic Triple Crown" ++ " (Alternate 154)"
155 -> "Satsuki Sho" ++ " (Alternate 1)" 155 -> "Satsuki Sho" ++ " (Alternate 155)"
x -> "saddle " ++ x.show x -> "saddle " ++ x.show
// Get the list of races that entitle a horse to a saddle. // Get the list of races that entitle a horse to a saddle.

View File

@@ -328,6 +328,7 @@ type Race struct {
Grade int Grade int
ThumbnailID int ThumbnailID int
Primary int Primary int
Alternate int
} }
func Races(ctx context.Context, db *sqlitex.Pool) ([]Race, error) { func Races(ctx context.Context, db *sqlitex.Pool) ([]Race, error) {
@@ -357,6 +358,7 @@ func Races(ctx context.Context, db *sqlitex.Pool) ([]Race, error) {
Grade: stmt.ColumnInt(2), Grade: stmt.ColumnInt(2),
ThumbnailID: stmt.ColumnInt(3), ThumbnailID: stmt.ColumnInt(3),
Primary: stmt.ColumnInt(4), Primary: stmt.ColumnInt(4),
Alternate: stmt.ColumnInt(5),
} }
r = append(r, race) r = append(r, race)
} }

View File

@@ -7,15 +7,15 @@ import . "git.sunturtle.xyz/zephyr/horse/horse"
const ( const (
{{- range $r := $.Races }} {{- range $r := $.Races }}
Race{{ goenum $r.Name }}{{ if ne $r.Primary $r.ID }}Alternate{{ end }} RaceID = {{ $r.ID }} // {{ $r.Name }} Race{{ goenum $r.Name }}{{ if $r.Alternate }}Alt{{ $r.ID }}{{ end }} RaceID = {{ $r.ID }} // {{ $r.Name }}
{{- end }} {{- end }}
) )
var AllRaces = map[RaceID]Race{ var AllRaces = map[RaceID]Race{
{{- range $r := $.Races }} {{- range $r := $.Races }}
Race{{ goenum $r.Name }}{{ if ne $r.Primary $r.ID }}Alternate{{ end }}: { Race{{ goenum $r.Name }}{{ if $r.Alternate }}Alt{{ $r.ID }}{{ end }}: {
ID: {{ $r.ID }}, ID: {{ $r.ID }},
Name: {{ printf "%q" $r.Name }}{{ if ne $r.Primary $r.ID }} + " (Alternate)"{{ end }}, Name: {{ printf "%q" $r.Name }}{{ if $r.Alternate }} + " (Alternate {{ $r.ID }})"{{ end }},
Thumbnail: {{ $r.ThumbnailID }}, Thumbnail: {{ $r.ThumbnailID }},
{{- if ne $r.Primary $r.ID }} {{- if ne $r.Primary $r.ID }}
Primary: {{ $r.Primary }}, Primary: {{ $r.Primary }},
@@ -26,7 +26,7 @@ var AllRaces = map[RaceID]Race{
var RaceNameToID = map[string]RaceID{ var RaceNameToID = map[string]RaceID{
{{- range $r := $.Races }} {{- range $r := $.Races }}
{{ printf "%q" $r.Name }}{{ if ne $r.Primary $r.ID }} + " (Alternate)"{{ end }}: {{ $r.ID }}, {{ printf "%q" $r.Name }}{{ if $r.Alternate }} + " (Alternate {{ $r.ID }})"{{ end }}: {{ $r.ID }},
{{- end }} {{- end }}
} }
{{ end }} {{ end }}

View File

@@ -10,41 +10,41 @@ pub import horse/race
// Enumeration of all races for type-safe programming. // Enumeration of all races for type-safe programming.
pub type race pub type race
{{- range $r := $.Races }} {{- range $r := $.Races }}
{{ kkenum $r.Name }}{{ if ne $r.Primary $r.ID }}-Alternate{{ end }} {{ kkenum $r.Name }}{{ if $r.Alternate }}-Alt{{ $r.ID }}{{ end }}
{{- end }} {{- end }}
// Get the race ID for a race. // Get the race ID for a race.
pub fun race-id(r: race): race-id pub fun race-id(r: race): race-id
match r match r
{{- range $r := $.Races }} {{- range $r := $.Races }}
{{ kkenum $r.Name }}{{ if ne $r.Primary $r.ID }}-Alternate{{ end }} -> Race-id({{ $r.ID }}) {{ kkenum $r.Name }}{{ if $r.Alternate }}-Alt{{ $r.ID }}{{ end }} -> Race-id({{ $r.ID }})
{{- end }} {{- end }}
// List of all races in ID order for easy iterating. // List of all races in ID order for easy iterating.
pub val all = [ pub val all = [
{{- range $r := $.Races }} {{- range $r := $.Races }}
{{ kkenum $r.Name }}{{ if ne $r.Primary $r.ID }}-Alternate{{ end }}, {{ kkenum $r.Name }}{{ if $r.Alternate }}-Alt{{ $r.ID }}{{ end }},
{{- end }} {{- end }}
] ]
val name2id: rbmap<string, race-id> = rb-map/empty() val name2id: rbmap<string, race-id> = rb-map/empty()
{{- range $r := $.Races }} {{- range $r := $.Races }}
.set({{ printf "%q" $r.Name }}{{ if ne $r.Primary $r.ID }} ++ " (Alternate)"{{ end }}, Race-id({{ $r.ID }})) .set({{ printf "%q" $r.Name }}{{ if $r.Alternate }} ++ " (Alternate {{ $r.ID }})"{{ end }}, Race-id({{ $r.ID }}))
{{- end }} {{- end }}
// Get the race ID that has the given exact name. // Get the race ID that has the given exact name.
// Alternate versions of races have " (Alternate)" in their names. // Alternate versions of races have an indication of their ID in their names.
// If no race matches the name, the result is an invalid ID. // If no race matches the name, the result is an invalid ID.
pub fun from-name(name: string): race-id pub fun from-name(name: string): race-id
name2id.lookup(name).default(Race-id(0)) name2id.lookup(name).default(Race-id(0))
// Get the name for a race. // Get the name for a race.
// Alternate versions of races have " (Alternate)" in their names. // Alternate versions of races have an indication of their ID in their names.
// If no race matches the ID, the result is the numeric ID. // If no race matches the ID, the result is the numeric ID.
pub fun show(r: race-id): string pub fun show(r: race-id): string
match r.game-id match r.game-id
{{- range $r := $.Races }} {{- range $r := $.Races }}
{{ $r.ID }} -> {{ printf "%q" $r.Name }}{{ if ne $r.Primary $r.ID }} ++ " (Alternate)"{{ end }} {{ $r.ID }} -> {{ printf "%q" $r.Name }}{{ if $r.Alternate }} ++ " (Alternate {{ $r.ID }})"{{ end }}
{{- end }} {{- end }}
x -> "race " ++ x.show x -> "race " ++ x.show
@@ -72,7 +72,7 @@ pub fun thumbnail(r: race-id): race-thumbnail-id
pub fun primary(r: race-id): race-id pub fun primary(r: race-id): race-id
match r.game-id match r.game-id
{{- range $r := $.Races }} {{- range $r := $.Races }}
{{- if ne $r.ID $r.Primary }} {{- if $r.Alternate }}
{{ $r.ID }} -> Race-id({{ $r.Primary }}) {{ $r.ID }} -> Race-id({{ $r.Primary }})
{{- end }} {{- end }}
{{- end }} {{- end }}

View File

@@ -6,7 +6,8 @@ SELECT
race_names.name, race_names.name,
race.grade, race.grade,
race.thumbnail_id, race.thumbnail_id,
MIN(race.id) OVER (PARTITION BY race_names.name) AS "primary" MIN(race.id) OVER (PARTITION BY race_names.name) AS "primary",
ROW_NUMBER() OVER (PARTITION BY race_names.name ORDER BY race.id) - 1 AS "alternate"
FROM race FROM race
JOIN race_names ON race.id = race_names.id JOIN race_names ON race.id = race_names.id
WHERE race."group" = 1 WHERE race."group" = 1

View File

@@ -10,30 +10,30 @@ pub import horse/{{ $.Region }}/race
// Enumeration of all saddles for type-safe programming. // Enumeration of all saddles for type-safe programming.
pub type saddle pub type saddle
{{- range $s := $.Saddles }} {{- range $s := $.Saddles }}
{{ kkenum $s.Name }}{{ if $s.Alternate }}-Alt{{ $s.Alternate }}{{ end }} {{ kkenum $s.Name }}{{ if $s.Alternate }}-Alt{{ $s.ID }}{{ end }}
{{- end }} {{- end }}
// Get the saddle ID for a saddle. // Get the saddle ID for a saddle.
pub fun saddle-id(s: saddle): saddle-id pub fun saddle-id(s: saddle): saddle-id
match s match s
{{- range $s := $.Saddles }} {{- range $s := $.Saddles }}
{{ kkenum $s.Name }}{{ if $s.Alternate }}-Alt{{ $s.Alternate }}{{ end }} -> Saddle-id({{ $s.ID }}) {{ kkenum $s.Name }}{{ if $s.Alternate }}-Alt{{ $s.ID }}{{ end }} -> Saddle-id({{ $s.ID }})
{{- end }} {{- end }}
// List of all saddles in ID order for easy iterating. // List of all saddles in ID order for easy iterating.
pub val all = [ pub val all = [
{{- range $s := $.Saddles }} {{- range $s := $.Saddles }}
{{ kkenum $s.Name }}{{ if $s.Alternate }}-Alt{{ $s.Alternate }}{{ end }}, {{ kkenum $s.Name }}{{ if $s.Alternate }}-Alt{{ $s.ID }}{{ end }},
{{- end }} {{- end }}
] ]
// Get the name for a saddle. // Get the name for a saddle.
// Alternate versions of saddles have an indication of such in their names. // Alternate versions of saddles have an indication of their ID in their names.
// If no saddle matches the ID, the result contains the numeric ID. // If no saddle matches the ID, the result contains the numeric ID.
pub fun show(s: saddle-id): string pub fun show(s: saddle-id): string
match s.game-id match s.game-id
{{- range $s := $.Saddles }} {{- range $s := $.Saddles }}
{{ $s.ID }} -> {{ printf "%q" $s.Name }}{{ if $s.Alternate }} ++ " (Alternate {{ $s.Alternate }})"{{ end }} {{ $s.ID }} -> {{ printf "%q" $s.Name }}{{ if $s.Alternate }} ++ " (Alternate {{ $s.ID }})"{{ end }}
{{- end }} {{- end }}
x -> "saddle " ++ x.show x -> "saddle " ++ x.show