From a53497560186c98ac15c8ef534f34b91bdeceaa1 Mon Sep 17 00:00:00 2001 From: Branden J Brown Date: Tue, 10 Feb 2026 13:55:47 -0500 Subject: [PATCH] horsegen: generate alternate races/saddles with ids --- horse/global/race.go | 600 ++++++++++++++++++------------------ horse/global/race.kk | 54 ++-- horse/global/saddle.kk | 90 +++--- horsegen/load.go | 2 + horsegen/race.go.template | 8 +- horsegen/race.kk.template | 16 +- horsegen/race.sql | 3 +- horsegen/saddle.kk.template | 10 +- 8 files changed, 393 insertions(+), 390 deletions(-) diff --git a/horse/global/race.go b/horse/global/race.go index 288c8af..fe25d3e 100644 --- a/horse/global/race.go +++ b/horse/global/race.go @@ -29,10 +29,10 @@ const ( RaceAsahiHaiFuturityStakes RaceID = 1022 // Asahi Hai Futurity Stakes RaceArimaKinen RaceID = 1023 // Arima Kinen RaceHopefulStakes RaceID = 1024 // Hopeful Stakes - RaceTakarazukaKinenAlternate RaceID = 1025 // Takarazuka Kinen - RaceKikukaShoAlternate RaceID = 1026 // Kikuka Sho - RaceTennoShoSpringAlternate RaceID = 1027 // Tenno Sho (Spring) - RaceSatsukiShoAlternate RaceID = 1028 // Satsuki Sho + RaceTakarazukaKinenAlt1025 RaceID = 1025 // Takarazuka Kinen + RaceKikukaShoAlt1026 RaceID = 1026 // Kikuka Sho + RaceTennoShoSpringAlt1027 RaceID = 1027 // Tenno Sho (Spring) + RaceSatsukiShoAlt1028 RaceID = 1028 // Satsuki Sho RaceTeioSho RaceID = 1101 // Teio Sho RaceJapanDirtDerby RaceID = 1102 // Japan Dirt Derby RaceJBCLadiesClassic RaceID = 1103 // JBC Ladies’ Classic @@ -73,7 +73,7 @@ const ( RaceDailyHaiJuniorStakes RaceID = 2032 // Daily Hai Junior Stakes RaceStayersStakes RaceID = 2033 // Stayers Stakes RaceHanshinCup RaceID = 2034 // Hanshin Cup - RaceSpringStakesAlternate RaceID = 2035 // Spring Stakes + RaceSpringStakesAlt2035 RaceID = 2035 // Spring Stakes RaceKyotoKimpai RaceID = 3001 // Kyoto Kimpai RaceNakayamaKimpai RaceID = 3002 // Nakayama Kimpai RaceShinzanKinen RaceID = 3003 // Shinzan Kinen @@ -413,27 +413,27 @@ var AllRaces = map[RaceID]Race{ Name: "Hopeful Stakes", Thumbnail: 1024, }, - RaceTakarazukaKinenAlternate: { + RaceTakarazukaKinenAlt1025: { ID: 1025, - Name: "Takarazuka Kinen" + " (Alternate)", + Name: "Takarazuka Kinen" + " (Alternate 1025)", Thumbnail: 1012, Primary: 1012, }, - RaceKikukaShoAlternate: { + RaceKikukaShoAlt1026: { ID: 1026, - Name: "Kikuka Sho" + " (Alternate)", + Name: "Kikuka Sho" + " (Alternate 1026)", Thumbnail: 1015, Primary: 1015, }, - RaceTennoShoSpringAlternate: { + RaceTennoShoSpringAlt1027: { ID: 1027, - Name: "Tenno Sho (Spring)" + " (Alternate)", + Name: "Tenno Sho (Spring)" + " (Alternate 1027)", Thumbnail: 1027, Primary: 1006, }, - RaceSatsukiShoAlternate: { + RaceSatsukiShoAlt1028: { ID: 1028, - Name: "Satsuki Sho" + " (Alternate)", + Name: "Satsuki Sho" + " (Alternate 1028)", Thumbnail: 1028, Primary: 1005, }, @@ -637,9 +637,9 @@ var AllRaces = map[RaceID]Race{ Name: "Hanshin Cup", Thumbnail: 2034, }, - RaceSpringStakesAlternate: { + RaceSpringStakesAlt2035: { ID: 2035, - Name: "Spring Stakes" + " (Alternate)", + Name: "Spring Stakes" + " (Alternate 2035)", Thumbnail: 2010, Primary: 2010, }, @@ -1726,289 +1726,289 @@ var AllRaces = map[RaceID]Race{ } var RaceNameToID = map[string]RaceID{ - "February Stakes": 1001, - "Takamatsunomiya Kinen": 1002, - "Osaka Hai": 1003, - "Oka Sho": 1004, - "Satsuki Sho": 1005, - "Tenno Sho (Spring)": 1006, - "NHK Mile Cup": 1007, - "Victoria Mile": 1008, - "Japanese Oaks": 1009, - "Tokyo Yushun (Japanese Derby)": 1010, - "Yasuda Kinen": 1011, - "Takarazuka Kinen": 1012, - "Sprinters Stakes": 1013, - "Shuka Sho": 1014, - "Kikuka Sho": 1015, - "Tenno Sho (Autumn)": 1016, - "Queen Elizabeth II Cup": 1017, - "Mile Championship": 1018, - "Japan Cup": 1019, - "Champions Cup": 1020, - "Hanshin Juvenile Fillies": 1021, - "Asahi Hai Futurity Stakes": 1022, - "Arima Kinen": 1023, - "Hopeful Stakes": 1024, - "Takarazuka Kinen" + " (Alternate)": 1025, - "Kikuka Sho" + " (Alternate)": 1026, - "Tenno Sho (Spring)" + " (Alternate)": 1027, - "Satsuki Sho" + " (Alternate)": 1028, - "Teio Sho": 1101, - "Japan Dirt Derby": 1102, - "JBC Ladies’ Classic": 1103, - "JBC Sprint": 1104, - "JBC Classic": 1105, - "Tokyo Daishoten": 1106, - "Nikkei Shinshun Hai": 2001, - "Tokai Stakes": 2002, - "American JCC": 2003, - "Kyoto Kinen": 2004, - "Nakayama Kinen": 2005, - "Yayoi Sho": 2006, - "Kinko Sho": 2007, - "Fillies' Revue": 2008, - "Hanshin Daishoten": 2009, - "Spring Stakes": 2010, - "Nikkei Sho": 2011, - "Hanshin Umamusume Stakes": 2012, - "New Zealand Trophy": 2013, - "Milers Cup": 2014, - "Flora Stakes": 2015, - "Aoba Sho": 2016, - "Kyoto Shimbun Hai": 2017, - "Keio Hai Spring Cup": 2018, - "Meguro Kinen": 2019, - "Sapporo Kinen": 2020, - "Centaur Stakes": 2021, - "Rose Stakes": 2022, - "St. Lite Kinen": 2023, - "Kobe Shimbun Hai": 2024, - "All Comers": 2025, - "Mainichi Okan": 2026, - "Kyoto Daishoten": 2027, - "Fuchu Umamusume Stakes": 2028, - "Swan Stakes": 2029, - "Keio Hai Junior Stakes": 2030, - "Copa Republica Argentina": 2031, - "Daily Hai Junior Stakes": 2032, - "Stayers Stakes": 2033, - "Hanshin Cup": 2034, - "Spring Stakes" + " (Alternate)": 2035, - "Kyoto Kimpai": 3001, - "Nakayama Kimpai": 3002, - "Shinzan Kinen": 3003, - "Fairy Stakes": 3004, - "Aichi Hai": 3005, - "Keisei Hai": 3006, - "Silk Road Stakes": 3007, - "Negishi Stakes": 3008, - "Kisaragi Sho": 3009, - "Tokyo Shimbun Hai": 3010, - "Queen Cup": 3011, - "Kyodo News Hai": 3012, - "Kyoto Umamusume Stakes": 3013, - "Diamond Stakes": 3014, - "Kokura Daishoten": 3015, - "Arlington Cup": 3016, - "Hankyu Hai": 3017, - "Tulip Sho": 3018, - "Ocean Stakes": 3019, - "Nakayama Umamusume Stakes": 3020, - "Falcon Stakes": 3021, - "Flower Cup": 3022, - "Mainichi Hai": 3023, - "March Stakes": 3024, - "Lord Derby Challenge Trophy": 3025, - "Antares Stakes": 3026, - "Fukushima Umamusume Stakes": 3027, - "Niigata Daishoten": 3028, - "Heian Stakes": 3029, - "Naruo Kinen": 3030, - "Mermaid Stakes": 3031, - "Epsom Cup": 3032, - "Unicorn Stakes": 3033, - "Hakodate Sprint Stakes": 3034, - "CBC Sho": 3035, - "Radio Nikkei Sho": 3036, - "Procyon Stakes": 3037, - "Tanabata Sho": 3038, - "Hakodate Kinen": 3039, - "Chukyo Kinen": 3040, - "Hakodate Junior Stakes": 3041, - "Ibis Summer Dash": 3042, - "Queen Stakes": 3043, - "Kokura Kinen": 3044, - "Leopard Stakes": 3045, - "Sekiya Kinen": 3046, - "Elm Stakes": 3047, - "Kitakyushu Kinen": 3048, - "Niigata Junior Stakes": 3049, - "Keeneland Cup": 3050, - "Sapporo Junior Stakes": 3051, - "Kokura Junior Stakes": 3052, - "Niigata Kinen": 3053, - "Shion Stakes": 3054, - "Keisei Hai Autumn Handicap": 3055, - "Sirius Stakes": 3056, - "Saudi Arabia Royal Cup": 3057, - "Fuji Stakes": 3058, - "Artemis Stakes": 3059, - "Fantasy Stakes": 3060, - "Miyako Stakes": 3061, - "Musashino Stakes": 3062, - "Fukushima Kinen": 3063, - "Tokyo Sports Hai Junior Stakes": 3064, - "Kyoto Junior Stakes": 3065, - "Keihan Hai": 3066, - "Challenge Cup": 3067, - "Chunichi Shimbun Hai": 3068, - "Capella Stakes": 3069, - "Turquoise Stakes": 3070, - "Manyo Stakes": 4001, - "Junior Cup": 4002, - "Yodo Tankyori Stakes": 4003, - "Pollux Stakes": 4004, - "January Stakes": 4005, - "New Year Stakes": 4006, - "Kobai Stakes": 4007, - "Subaru Stakes": 4008, - "Wakagoma Stakes": 4009, - "Carbuncle Stakes": 4010, - "Shirafuji Stakes": 4011, - "Crocus Stakes": 4012, - "Yamato Stakes": 4013, - "Elfin Stakes": 4014, - "Rakuyo Stakes": 4015, - "Aldebaran Stakes": 4016, - "Valentine Stakes": 4017, - "Hyacinth Stakes": 4018, - "Sobu Stakes": 4019, - "Sumire Stakes": 4020, - "Osakajo Stakes": 4021, - "Polaris Stakes": 4022, - "Nigawa Stakes": 4023, - "Anemone Stakes": 4024, - "Shoryu Stakes": 4025, - "Kochi Stakes": 4026, - "Wakaba Stakes": 4027, - "Chiba Stakes": 4028, - "Rokko Stakes": 4030, - "Coral Stakes": 4031, - "Marguerite Stakes": 4032, - "Fukuryu Stakes": 4033, - "Wasurenagusa Sho": 4035, - "Keiyo Stakes": 4036, - "Shunrai Stakes": 4037, - "Fukushima Mimpo Hai": 4038, - "Tachibana Stakes": 4039, - "Oasis Stakes": 4040, - "Tennozan Stakes": 4041, - "Tango Stakes": 4042, - "Sweetpea Stakes": 4043, - "Tanigawadake Stakes": 4044, - "Principal Stakes": 4045, - "Metropolitan Stakes": 4046, - "Kurama Stakes": 4047, - "Brilliant Stakes": 4048, - "Miyakooji Stakes": 4049, - "Aoi Stakes": 4050, - "Ritto Stakes": 4051, - "Seiryu Stakes": 4052, - "May Stakes": 4053, - "Hosu Stakes": 4054, - "Idaten Stakes": 4055, - "Shirayuri Stakes": 4056, - "Keyaki Stakes": 4057, - "Azuchijo Stakes": 4058, - "Akhalteke Stakes": 4059, - "Tempozan Stakes": 4060, - "Yonago Stakes": 4061, - "Onuma Stakes": 4062, - "Paradise Stakes": 4063, - "Tomoe Sho": 4064, - "Marine Stakes": 4065, - "Meitetsu Hai": 4066, - "Chukyo Junior Stakes": 4068, - "Fukushima TV Open": 4069, - "Dahlia Sho": 4070, - "Sapporo Nikkei Open": 4071, - "UHB Sho": 4072, - "Aso Stakes": 4073, - "Phoenix Sho": 4074, - "Cosmos Sho": 4075, - "NST Sho": 4076, - "Clover Sho": 4077, - "Himawari Sho": 4078, - "BSN Sho": 4079, - "Kokura Nikkei Open": 4080, - "Toki Stakes": 4081, - "Tancho Stakes": 4082, - "Suzuran Sho": 4083, - "Enif Stakes": 4084, - "Nojigiku Stakes": 4085, - "Radio Nippon Sho": 4086, - "Kikyo Stakes": 4087, - "Fuyo Stakes": 4088, - "Canna Stakes": 4089, - "Port Island Stakes": 4090, - "Opal Stakes": 4091, - "Green Channel Cup": 4092, - "Momiji Stakes": 4093, - "October Stakes": 4094, - "Shinetsu Stakes": 4095, - "Ivy Stakes": 4096, - "Muromachi Stakes": 4097, - "Brazil Cup": 4098, - "Hagi Stakes": 4099, - "Cassiopeia Stakes": 4100, - "Lumiere Autumn Dash": 4101, - "Oro Cup": 4102, - "Fukushima Junior Stakes": 4103, - "Andromeda Stakes": 4104, - "Shimotsuki Stakes": 4105, - "Fukushima Minyu Cup": 4106, - "Capital Stakes": 4107, - "Autumn Leaf Stakes": 4108, - "Lapis Lazuli Stakes": 4109, - "Shiwasu Stakes": 4110, - "Rigel Stakes": 4111, - "Tanzanite Stakes": 4112, - "December Stakes": 4113, - "Christmas Rose Stakes": 4114, - "Galaxy Stakes": 4115, - "Betelgeuse Stakes": 4116, - "Kitakyushu Tankyori Stakes": 4118, - "Azumakofuji Stakes": 4119, - "Sleipnir Stakes": 4120, - "Sannomiya Stakes": 4121, - "Kanetsu Stakes": 4122, - "Nagatsuki Stakes": 4123, - "Uzumasa Stakes": 4124, - "Aster Sho": 4501, - "Saffron Sho": 4502, - "Rindo Sho": 4503, - "Shigiku Sho": 4504, - "Platanus Sho": 4505, - "Nadeshiko Sho": 4506, - "Hyakunichiso Tokubetsu": 4507, - "Kimmokusei Tokubetsu": 4508, - "Oxalis Sho": 4509, - "Kigiku Sho": 4510, - "Mochinoki Sho": 4511, - "Akamatsu Sho": 4512, - "Shumeigiku Sho": 4513, - "Cattleya Sho": 4514, - "Begonia Sho": 4515, - "Shiragiku Sho": 4516, - "Habotan Sho": 4517, - "Koyamaki Sho": 4518, - "Manryo Sho": 4519, - "Kuromatsu Sho": 4520, - "Erica Sho": 4521, - "Tsuwabuki Sho": 4522, - "Hiiragi Sho": 4523, - "Sazanka Sho": 4524, - "Kantsubaki Sho": 4525, - "Senryo Sho": 4526, + "February Stakes": 1001, + "Takamatsunomiya Kinen": 1002, + "Osaka Hai": 1003, + "Oka Sho": 1004, + "Satsuki Sho": 1005, + "Tenno Sho (Spring)": 1006, + "NHK Mile Cup": 1007, + "Victoria Mile": 1008, + "Japanese Oaks": 1009, + "Tokyo Yushun (Japanese Derby)": 1010, + "Yasuda Kinen": 1011, + "Takarazuka Kinen": 1012, + "Sprinters Stakes": 1013, + "Shuka Sho": 1014, + "Kikuka Sho": 1015, + "Tenno Sho (Autumn)": 1016, + "Queen Elizabeth II Cup": 1017, + "Mile Championship": 1018, + "Japan Cup": 1019, + "Champions Cup": 1020, + "Hanshin Juvenile Fillies": 1021, + "Asahi Hai Futurity Stakes": 1022, + "Arima Kinen": 1023, + "Hopeful Stakes": 1024, + "Takarazuka Kinen" + " (Alternate 1025)": 1025, + "Kikuka Sho" + " (Alternate 1026)": 1026, + "Tenno Sho (Spring)" + " (Alternate 1027)": 1027, + "Satsuki Sho" + " (Alternate 1028)": 1028, + "Teio Sho": 1101, + "Japan Dirt Derby": 1102, + "JBC Ladies’ Classic": 1103, + "JBC Sprint": 1104, + "JBC Classic": 1105, + "Tokyo Daishoten": 1106, + "Nikkei Shinshun Hai": 2001, + "Tokai Stakes": 2002, + "American JCC": 2003, + "Kyoto Kinen": 2004, + "Nakayama Kinen": 2005, + "Yayoi Sho": 2006, + "Kinko Sho": 2007, + "Fillies' Revue": 2008, + "Hanshin Daishoten": 2009, + "Spring Stakes": 2010, + "Nikkei Sho": 2011, + "Hanshin Umamusume Stakes": 2012, + "New Zealand Trophy": 2013, + "Milers Cup": 2014, + "Flora Stakes": 2015, + "Aoba Sho": 2016, + "Kyoto Shimbun Hai": 2017, + "Keio Hai Spring Cup": 2018, + "Meguro Kinen": 2019, + "Sapporo Kinen": 2020, + "Centaur Stakes": 2021, + "Rose Stakes": 2022, + "St. Lite Kinen": 2023, + "Kobe Shimbun Hai": 2024, + "All Comers": 2025, + "Mainichi Okan": 2026, + "Kyoto Daishoten": 2027, + "Fuchu Umamusume Stakes": 2028, + "Swan Stakes": 2029, + "Keio Hai Junior Stakes": 2030, + "Copa Republica Argentina": 2031, + "Daily Hai Junior Stakes": 2032, + "Stayers Stakes": 2033, + "Hanshin Cup": 2034, + "Spring Stakes" + " (Alternate 2035)": 2035, + "Kyoto Kimpai": 3001, + "Nakayama Kimpai": 3002, + "Shinzan Kinen": 3003, + "Fairy Stakes": 3004, + "Aichi Hai": 3005, + "Keisei Hai": 3006, + "Silk Road Stakes": 3007, + "Negishi Stakes": 3008, + "Kisaragi Sho": 3009, + "Tokyo Shimbun Hai": 3010, + "Queen Cup": 3011, + "Kyodo News Hai": 3012, + "Kyoto Umamusume Stakes": 3013, + "Diamond Stakes": 3014, + "Kokura Daishoten": 3015, + "Arlington Cup": 3016, + "Hankyu Hai": 3017, + "Tulip Sho": 3018, + "Ocean Stakes": 3019, + "Nakayama Umamusume Stakes": 3020, + "Falcon Stakes": 3021, + "Flower Cup": 3022, + "Mainichi Hai": 3023, + "March Stakes": 3024, + "Lord Derby Challenge Trophy": 3025, + "Antares Stakes": 3026, + "Fukushima Umamusume Stakes": 3027, + "Niigata Daishoten": 3028, + "Heian Stakes": 3029, + "Naruo Kinen": 3030, + "Mermaid Stakes": 3031, + "Epsom Cup": 3032, + "Unicorn Stakes": 3033, + "Hakodate Sprint Stakes": 3034, + "CBC Sho": 3035, + "Radio Nikkei Sho": 3036, + "Procyon Stakes": 3037, + "Tanabata Sho": 3038, + "Hakodate Kinen": 3039, + "Chukyo Kinen": 3040, + "Hakodate Junior Stakes": 3041, + "Ibis Summer Dash": 3042, + "Queen Stakes": 3043, + "Kokura Kinen": 3044, + "Leopard Stakes": 3045, + "Sekiya Kinen": 3046, + "Elm Stakes": 3047, + "Kitakyushu Kinen": 3048, + "Niigata Junior Stakes": 3049, + "Keeneland Cup": 3050, + "Sapporo Junior Stakes": 3051, + "Kokura Junior Stakes": 3052, + "Niigata Kinen": 3053, + "Shion Stakes": 3054, + "Keisei Hai Autumn Handicap": 3055, + "Sirius Stakes": 3056, + "Saudi Arabia Royal Cup": 3057, + "Fuji Stakes": 3058, + "Artemis Stakes": 3059, + "Fantasy Stakes": 3060, + "Miyako Stakes": 3061, + "Musashino Stakes": 3062, + "Fukushima Kinen": 3063, + "Tokyo Sports Hai Junior Stakes": 3064, + "Kyoto Junior Stakes": 3065, + "Keihan Hai": 3066, + "Challenge Cup": 3067, + "Chunichi Shimbun Hai": 3068, + "Capella Stakes": 3069, + "Turquoise Stakes": 3070, + "Manyo Stakes": 4001, + "Junior Cup": 4002, + "Yodo Tankyori Stakes": 4003, + "Pollux Stakes": 4004, + "January Stakes": 4005, + "New Year Stakes": 4006, + "Kobai Stakes": 4007, + "Subaru Stakes": 4008, + "Wakagoma Stakes": 4009, + "Carbuncle Stakes": 4010, + "Shirafuji Stakes": 4011, + "Crocus Stakes": 4012, + "Yamato Stakes": 4013, + "Elfin Stakes": 4014, + "Rakuyo Stakes": 4015, + "Aldebaran Stakes": 4016, + "Valentine Stakes": 4017, + "Hyacinth Stakes": 4018, + "Sobu Stakes": 4019, + "Sumire Stakes": 4020, + "Osakajo Stakes": 4021, + "Polaris Stakes": 4022, + "Nigawa Stakes": 4023, + "Anemone Stakes": 4024, + "Shoryu Stakes": 4025, + "Kochi Stakes": 4026, + "Wakaba Stakes": 4027, + "Chiba Stakes": 4028, + "Rokko Stakes": 4030, + "Coral Stakes": 4031, + "Marguerite Stakes": 4032, + "Fukuryu Stakes": 4033, + "Wasurenagusa Sho": 4035, + "Keiyo Stakes": 4036, + "Shunrai Stakes": 4037, + "Fukushima Mimpo Hai": 4038, + "Tachibana Stakes": 4039, + "Oasis Stakes": 4040, + "Tennozan Stakes": 4041, + "Tango Stakes": 4042, + "Sweetpea Stakes": 4043, + "Tanigawadake Stakes": 4044, + "Principal Stakes": 4045, + "Metropolitan Stakes": 4046, + "Kurama Stakes": 4047, + "Brilliant Stakes": 4048, + "Miyakooji Stakes": 4049, + "Aoi Stakes": 4050, + "Ritto Stakes": 4051, + "Seiryu Stakes": 4052, + "May Stakes": 4053, + "Hosu Stakes": 4054, + "Idaten Stakes": 4055, + "Shirayuri Stakes": 4056, + "Keyaki Stakes": 4057, + "Azuchijo Stakes": 4058, + "Akhalteke Stakes": 4059, + "Tempozan Stakes": 4060, + "Yonago Stakes": 4061, + "Onuma Stakes": 4062, + "Paradise Stakes": 4063, + "Tomoe Sho": 4064, + "Marine Stakes": 4065, + "Meitetsu Hai": 4066, + "Chukyo Junior Stakes": 4068, + "Fukushima TV Open": 4069, + "Dahlia Sho": 4070, + "Sapporo Nikkei Open": 4071, + "UHB Sho": 4072, + "Aso Stakes": 4073, + "Phoenix Sho": 4074, + "Cosmos Sho": 4075, + "NST Sho": 4076, + "Clover Sho": 4077, + "Himawari Sho": 4078, + "BSN Sho": 4079, + "Kokura Nikkei Open": 4080, + "Toki Stakes": 4081, + "Tancho Stakes": 4082, + "Suzuran Sho": 4083, + "Enif Stakes": 4084, + "Nojigiku Stakes": 4085, + "Radio Nippon Sho": 4086, + "Kikyo Stakes": 4087, + "Fuyo Stakes": 4088, + "Canna Stakes": 4089, + "Port Island Stakes": 4090, + "Opal Stakes": 4091, + "Green Channel Cup": 4092, + "Momiji Stakes": 4093, + "October Stakes": 4094, + "Shinetsu Stakes": 4095, + "Ivy Stakes": 4096, + "Muromachi Stakes": 4097, + "Brazil Cup": 4098, + "Hagi Stakes": 4099, + "Cassiopeia Stakes": 4100, + "Lumiere Autumn Dash": 4101, + "Oro Cup": 4102, + "Fukushima Junior Stakes": 4103, + "Andromeda Stakes": 4104, + "Shimotsuki Stakes": 4105, + "Fukushima Minyu Cup": 4106, + "Capital Stakes": 4107, + "Autumn Leaf Stakes": 4108, + "Lapis Lazuli Stakes": 4109, + "Shiwasu Stakes": 4110, + "Rigel Stakes": 4111, + "Tanzanite Stakes": 4112, + "December Stakes": 4113, + "Christmas Rose Stakes": 4114, + "Galaxy Stakes": 4115, + "Betelgeuse Stakes": 4116, + "Kitakyushu Tankyori Stakes": 4118, + "Azumakofuji Stakes": 4119, + "Sleipnir Stakes": 4120, + "Sannomiya Stakes": 4121, + "Kanetsu Stakes": 4122, + "Nagatsuki Stakes": 4123, + "Uzumasa Stakes": 4124, + "Aster Sho": 4501, + "Saffron Sho": 4502, + "Rindo Sho": 4503, + "Shigiku Sho": 4504, + "Platanus Sho": 4505, + "Nadeshiko Sho": 4506, + "Hyakunichiso Tokubetsu": 4507, + "Kimmokusei Tokubetsu": 4508, + "Oxalis Sho": 4509, + "Kigiku Sho": 4510, + "Mochinoki Sho": 4511, + "Akamatsu Sho": 4512, + "Shumeigiku Sho": 4513, + "Cattleya Sho": 4514, + "Begonia Sho": 4515, + "Shiragiku Sho": 4516, + "Habotan Sho": 4517, + "Koyamaki Sho": 4518, + "Manryo Sho": 4519, + "Kuromatsu Sho": 4520, + "Erica Sho": 4521, + "Tsuwabuki Sho": 4522, + "Hiiragi Sho": 4523, + "Sazanka Sho": 4524, + "Kantsubaki Sho": 4525, + "Senryo Sho": 4526, } diff --git a/horse/global/race.kk b/horse/global/race.kk index 68fd8b8..6c05033 100644 --- a/horse/global/race.kk +++ b/horse/global/race.kk @@ -32,10 +32,10 @@ pub type race Asahi-Hai-Futurity-Stakes Arima-Kinen Hopeful-Stakes - Takarazuka-Kinen-Alternate - Kikuka-Sho-Alternate - Tenno-Sho-Spring-Alternate - Satsuki-Sho-Alternate + Takarazuka-Kinen-Alt1025 + Kikuka-Sho-Alt1026 + Tenno-Sho-Spring-Alt1027 + Satsuki-Sho-Alt1028 Teio-Sho Japan-Dirt-Derby JBC-Ladies-Classic @@ -76,7 +76,7 @@ pub type race Daily-Hai-Junior-Stakes Stayers-Stakes Hanshin-Cup - Spring-Stakes-Alternate + Spring-Stakes-Alt2035 Kyoto-Kimpai Nakayama-Kimpai Shinzan-Kinen @@ -321,10 +321,10 @@ pub fun race-id(r: race): race-id Asahi-Hai-Futurity-Stakes -> Race-id(1022) Arima-Kinen -> Race-id(1023) Hopeful-Stakes -> Race-id(1024) - Takarazuka-Kinen-Alternate -> Race-id(1025) - Kikuka-Sho-Alternate -> Race-id(1026) - Tenno-Sho-Spring-Alternate -> Race-id(1027) - Satsuki-Sho-Alternate -> Race-id(1028) + Takarazuka-Kinen-Alt1025 -> Race-id(1025) + Kikuka-Sho-Alt1026 -> Race-id(1026) + Tenno-Sho-Spring-Alt1027 -> Race-id(1027) + Satsuki-Sho-Alt1028 -> Race-id(1028) Teio-Sho -> Race-id(1101) Japan-Dirt-Derby -> Race-id(1102) 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) Stayers-Stakes -> Race-id(2033) Hanshin-Cup -> Race-id(2034) - Spring-Stakes-Alternate -> Race-id(2035) + Spring-Stakes-Alt2035 -> Race-id(2035) Kyoto-Kimpai -> Race-id(3001) Nakayama-Kimpai -> Race-id(3002) Shinzan-Kinen -> Race-id(3003) @@ -609,10 +609,10 @@ pub val all = [ Asahi-Hai-Futurity-Stakes, Arima-Kinen, Hopeful-Stakes, - Takarazuka-Kinen-Alternate, - Kikuka-Sho-Alternate, - Tenno-Sho-Spring-Alternate, - Satsuki-Sho-Alternate, + Takarazuka-Kinen-Alt1025, + Kikuka-Sho-Alt1026, + Tenno-Sho-Spring-Alt1027, + Satsuki-Sho-Alt1028, Teio-Sho, Japan-Dirt-Derby, JBC-Ladies-Classic, @@ -653,7 +653,7 @@ pub val all = [ Daily-Hai-Junior-Stakes, Stayers-Stakes, Hanshin-Cup, - Spring-Stakes-Alternate, + Spring-Stakes-Alt2035, Kyoto-Kimpai, Nakayama-Kimpai, Shinzan-Kinen, @@ -897,10 +897,10 @@ val name2id: rbmap = rb-map/empty() .set("Asahi Hai Futurity Stakes", Race-id(1022)) .set("Arima Kinen", Race-id(1023)) .set("Hopeful Stakes", Race-id(1024)) - .set("Takarazuka Kinen" ++ " (Alternate)", Race-id(1025)) - .set("Kikuka Sho" ++ " (Alternate)", Race-id(1026)) - .set("Tenno Sho (Spring)" ++ " (Alternate)", Race-id(1027)) - .set("Satsuki Sho" ++ " (Alternate)", Race-id(1028)) + .set("Takarazuka Kinen" ++ " (Alternate 1025)", Race-id(1025)) + .set("Kikuka Sho" ++ " (Alternate 1026)", Race-id(1026)) + .set("Tenno Sho (Spring)" ++ " (Alternate 1027)", Race-id(1027)) + .set("Satsuki Sho" ++ " (Alternate 1028)", Race-id(1028)) .set("Teio Sho", Race-id(1101)) .set("Japan Dirt Derby", Race-id(1102)) .set("JBC Ladies’ Classic", Race-id(1103)) @@ -941,7 +941,7 @@ val name2id: rbmap = rb-map/empty() .set("Daily Hai Junior Stakes", Race-id(2032)) .set("Stayers Stakes", Race-id(2033)) .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("Nakayama Kimpai", Race-id(3002)) .set("Shinzan Kinen", Race-id(3003)) @@ -1160,13 +1160,13 @@ val name2id: rbmap = rb-map/empty() .set("Senryo Sho", Race-id(4526)) // 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. pub fun from-name(name: string): race-id name2id.lookup(name).default(Race-id(0)) // 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. pub fun show(r: race-id): string match r.game-id @@ -1194,10 +1194,10 @@ pub fun show(r: race-id): string 1022 -> "Asahi Hai Futurity Stakes" 1023 -> "Arima Kinen" 1024 -> "Hopeful Stakes" - 1025 -> "Takarazuka Kinen" ++ " (Alternate)" - 1026 -> "Kikuka Sho" ++ " (Alternate)" - 1027 -> "Tenno Sho (Spring)" ++ " (Alternate)" - 1028 -> "Satsuki Sho" ++ " (Alternate)" + 1025 -> "Takarazuka Kinen" ++ " (Alternate 1025)" + 1026 -> "Kikuka Sho" ++ " (Alternate 1026)" + 1027 -> "Tenno Sho (Spring)" ++ " (Alternate 1027)" + 1028 -> "Satsuki Sho" ++ " (Alternate 1028)" 1101 -> "Teio Sho" 1102 -> "Japan Dirt Derby" 1103 -> "JBC Ladies’ Classic" @@ -1238,7 +1238,7 @@ pub fun show(r: race-id): string 2032 -> "Daily Hai Junior Stakes" 2033 -> "Stayers Stakes" 2034 -> "Hanshin Cup" - 2035 -> "Spring Stakes" ++ " (Alternate)" + 2035 -> "Spring Stakes" ++ " (Alternate 2035)" 3001 -> "Kyoto Kimpai" 3002 -> "Nakayama Kimpai" 3003 -> "Shinzan Kinen" diff --git a/horse/global/saddle.kk b/horse/global/saddle.kk index 44f2d29..1b38788 100644 --- a/horse/global/saddle.kk +++ b/horse/global/saddle.kk @@ -151,18 +151,18 @@ pub type saddle Chunichi-Shimbun-Hai Capella-S Turquoise-S - Classic-Triple-Crown-Alt1 - Senior-Spring-Triple-Crown-Alt1 - Dual-Grand-Prix-Alt1 - Takarazuka-Kinen-Alt1 - Kikuka-Sho-Alt1 - Spring-S-Alt1 + Classic-Triple-Crown-Alt144 + Senior-Spring-Triple-Crown-Alt145 + Dual-Grand-Prix-Alt146 + Takarazuka-Kinen-Alt147 + Kikuka-Sho-Alt148 + Spring-S-Alt149 Aoi-S - Senior-Spring-Triple-Crown-Alt2 - Tenno-Sweep-Alt1 - Tenno-Sho-Spring-Alt1 - Classic-Triple-Crown-Alt2 - Satsuki-Sho-Alt1 + Senior-Spring-Triple-Crown-Alt151 + Tenno-Sweep-Alt152 + Tenno-Sho-Spring-Alt153 + Classic-Triple-Crown-Alt154 + Satsuki-Sho-Alt155 // Get the saddle ID for a saddle. 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) Capella-S -> Saddle-id(142) Turquoise-S -> Saddle-id(143) - Classic-Triple-Crown-Alt1 -> Saddle-id(144) - Senior-Spring-Triple-Crown-Alt1 -> Saddle-id(145) - Dual-Grand-Prix-Alt1 -> Saddle-id(146) - Takarazuka-Kinen-Alt1 -> Saddle-id(147) - Kikuka-Sho-Alt1 -> Saddle-id(148) - Spring-S-Alt1 -> Saddle-id(149) + Classic-Triple-Crown-Alt144 -> Saddle-id(144) + Senior-Spring-Triple-Crown-Alt145 -> Saddle-id(145) + Dual-Grand-Prix-Alt146 -> Saddle-id(146) + Takarazuka-Kinen-Alt147 -> Saddle-id(147) + Kikuka-Sho-Alt148 -> Saddle-id(148) + Spring-S-Alt149 -> Saddle-id(149) Aoi-S -> Saddle-id(150) - Senior-Spring-Triple-Crown-Alt2 -> Saddle-id(151) - Tenno-Sweep-Alt1 -> Saddle-id(152) - Tenno-Sho-Spring-Alt1 -> Saddle-id(153) - Classic-Triple-Crown-Alt2 -> Saddle-id(154) - Satsuki-Sho-Alt1 -> Saddle-id(155) + Senior-Spring-Triple-Crown-Alt151 -> Saddle-id(151) + Tenno-Sweep-Alt152 -> Saddle-id(152) + Tenno-Sho-Spring-Alt153 -> Saddle-id(153) + Classic-Triple-Crown-Alt154 -> Saddle-id(154) + Satsuki-Sho-Alt155 -> Saddle-id(155) // List of all saddles in ID order for easy iterating. pub val all = [ @@ -468,22 +468,22 @@ pub val all = [ Chunichi-Shimbun-Hai, Capella-S, Turquoise-S, - Classic-Triple-Crown-Alt1, - Senior-Spring-Triple-Crown-Alt1, - Dual-Grand-Prix-Alt1, - Takarazuka-Kinen-Alt1, - Kikuka-Sho-Alt1, - Spring-S-Alt1, + Classic-Triple-Crown-Alt144, + Senior-Spring-Triple-Crown-Alt145, + Dual-Grand-Prix-Alt146, + Takarazuka-Kinen-Alt147, + Kikuka-Sho-Alt148, + Spring-S-Alt149, Aoi-S, - Senior-Spring-Triple-Crown-Alt2, - Tenno-Sweep-Alt1, - Tenno-Sho-Spring-Alt1, - Classic-Triple-Crown-Alt2, - Satsuki-Sho-Alt1, + Senior-Spring-Triple-Crown-Alt151, + Tenno-Sweep-Alt152, + Tenno-Sho-Spring-Alt153, + Classic-Triple-Crown-Alt154, + Satsuki-Sho-Alt155, ] // 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. pub fun show(s: saddle-id): string match s.game-id @@ -630,18 +630,18 @@ pub fun show(s: saddle-id): string 141 -> "Chunichi Shimbun Hai" 142 -> "Capella S." 143 -> "Turquoise S." - 144 -> "Classic Triple Crown" ++ " (Alternate 1)" - 145 -> "Senior Spring Triple Crown" ++ " (Alternate 1)" - 146 -> "Dual Grand Prix" ++ " (Alternate 1)" - 147 -> "Takarazuka Kinen" ++ " (Alternate 1)" - 148 -> "Kikuka Sho" ++ " (Alternate 1)" - 149 -> "Spring S." ++ " (Alternate 1)" + 144 -> "Classic Triple Crown" ++ " (Alternate 144)" + 145 -> "Senior Spring Triple Crown" ++ " (Alternate 145)" + 146 -> "Dual Grand Prix" ++ " (Alternate 146)" + 147 -> "Takarazuka Kinen" ++ " (Alternate 147)" + 148 -> "Kikuka Sho" ++ " (Alternate 148)" + 149 -> "Spring S." ++ " (Alternate 149)" 150 -> "Aoi S." - 151 -> "Senior Spring Triple Crown" ++ " (Alternate 2)" - 152 -> "Tenno Sweep" ++ " (Alternate 1)" - 153 -> "Tenno Sho (Spring)" ++ " (Alternate 1)" - 154 -> "Classic Triple Crown" ++ " (Alternate 2)" - 155 -> "Satsuki Sho" ++ " (Alternate 1)" + 151 -> "Senior Spring Triple Crown" ++ " (Alternate 151)" + 152 -> "Tenno Sweep" ++ " (Alternate 152)" + 153 -> "Tenno Sho (Spring)" ++ " (Alternate 153)" + 154 -> "Classic Triple Crown" ++ " (Alternate 154)" + 155 -> "Satsuki Sho" ++ " (Alternate 155)" x -> "saddle " ++ x.show // Get the list of races that entitle a horse to a saddle. diff --git a/horsegen/load.go b/horsegen/load.go index 5e0f7b5..5412d14 100644 --- a/horsegen/load.go +++ b/horsegen/load.go @@ -328,6 +328,7 @@ type Race struct { Grade int ThumbnailID int Primary int + Alternate int } 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), ThumbnailID: stmt.ColumnInt(3), Primary: stmt.ColumnInt(4), + Alternate: stmt.ColumnInt(5), } r = append(r, race) } diff --git a/horsegen/race.go.template b/horsegen/race.go.template index 731d90f..b697807 100644 --- a/horsegen/race.go.template +++ b/horsegen/race.go.template @@ -7,15 +7,15 @@ import . "git.sunturtle.xyz/zephyr/horse/horse" const ( {{- 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 }} ) var AllRaces = map[RaceID]Race{ {{- 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 }}, - 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 }}, {{- if ne $r.Primary $r.ID }} Primary: {{ $r.Primary }}, @@ -26,7 +26,7 @@ var AllRaces = map[RaceID]Race{ var RaceNameToID = map[string]RaceID{ {{- 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 }} diff --git a/horsegen/race.kk.template b/horsegen/race.kk.template index 278328f..862eefc 100644 --- a/horsegen/race.kk.template +++ b/horsegen/race.kk.template @@ -10,41 +10,41 @@ pub import horse/race // Enumeration of all races for type-safe programming. pub type race {{- 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 }} // Get the race ID for a race. pub fun race-id(r: race): race-id match r {{- 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 }} // List of all races in ID order for easy iterating. pub val all = [ {{- 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 }} ] val name2id: rbmap = rb-map/empty() {{- 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 }} // 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. pub fun from-name(name: string): race-id name2id.lookup(name).default(Race-id(0)) // 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. pub fun show(r: race-id): string match r.game-id {{- 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 }} 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 match r.game-id {{- range $r := $.Races }} - {{- if ne $r.ID $r.Primary }} + {{- if $r.Alternate }} {{ $r.ID }} -> Race-id({{ $r.Primary }}) {{- end }} {{- end }} diff --git a/horsegen/race.sql b/horsegen/race.sql index 4f4cae7..fb29c8e 100644 --- a/horsegen/race.sql +++ b/horsegen/race.sql @@ -6,7 +6,8 @@ SELECT race_names.name, race.grade, 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 JOIN race_names ON race.id = race_names.id WHERE race."group" = 1 diff --git a/horsegen/saddle.kk.template b/horsegen/saddle.kk.template index 2f8eb78..35217b8 100644 --- a/horsegen/saddle.kk.template +++ b/horsegen/saddle.kk.template @@ -10,30 +10,30 @@ pub import horse/{{ $.Region }}/race // Enumeration of all saddles for type-safe programming. pub type saddle {{- range $s := $.Saddles }} - {{ kkenum $s.Name }}{{ if $s.Alternate }}-Alt{{ $s.Alternate }}{{ end }} + {{ kkenum $s.Name }}{{ if $s.Alternate }}-Alt{{ $s.ID }}{{ end }} {{- end }} // Get the saddle ID for a saddle. pub fun saddle-id(s: saddle): saddle-id match s {{- 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 }} // List of all saddles in ID order for easy iterating. pub val all = [ {{- range $s := $.Saddles }} - {{ kkenum $s.Name }}{{ if $s.Alternate }}-Alt{{ $s.Alternate }}{{ end }}, + {{ kkenum $s.Name }}{{ if $s.Alternate }}-Alt{{ $s.ID }}{{ end }}, {{- end }} ] // 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. pub fun show(s: saddle-id): string match s.game-id {{- 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 }} x -> "saddle " ++ x.show