From 29c3fb69c58ff5769ca4c34fd1224eab94cce4de Mon Sep 17 00:00:00 2001 From: nairobi <61069237+nyairobi@users.noreply.github.com> Date: Fri, 9 Oct 2026 00:20:01 +0200 Subject: [PATCH] fix: theme-aware colors for dynamic difficulty cells (#1761) * fix: theme-aware colors for dynamic difficulty cells * fix: rename B/A/E/M/U to BAS/ADV/EXP/MAS/ULT --- db/seeds/goals.json | 94 +++++++++---------- .../client/src/app/routes/GameRoutes.tsx | 35 ++++--- .../tables/cells/DifficultyCell.tsx | 10 +- typescript/client/src/util/charts.ts | 8 ++ .../src/config/game-support/chunithm.ts | 10 +- 5 files changed, 84 insertions(+), 73 deletions(-) diff --git a/db/seeds/goals.json b/db/seeds/goals.json index 0e76c4821..b76a97070 100644 --- a/db/seeds/goals.json +++ b/db/seeds/goals.json @@ -3771,7 +3771,7 @@ }, "game": "chunithm", "goalID": "G018d1a24c861c8bc12f9ad282f7a05bd9f64984ad21faa1b74b1e9421217c107", - "name": "SSS any 6 of エンドマークに希望と涙を添えて (E 11+), 人生攻略☆Tips (M 11+), 幾四音-Ixion- (M 12), NewStartでReadyGo! (M 12), Yet Another ”drizzly rain” (M 12), felys -final remix- (E 12), 幻想即興曲 (E 12) or スン(マイル)フラワー~Sun(Mile)Flower (M 12+)" + "name": "SSS any 6 of エンドマークに希望と涙を添えて (EXP 11+), 人生攻略☆Tips (MAS 11+), 幾四音-Ixion- (MAS 12), NewStartでReadyGo! (MAS 12), Yet Another ”drizzly rain” (MAS 12), felys -final remix- (EXP 12), 幻想即興曲 (EXP 12) or スン(マイル)フラワー~Sun(Mile)Flower (MAS 12+)" }, { "charts": { @@ -3795,7 +3795,7 @@ }, "game": "chunithm", "goalID": "Gd0c96995f09dd6e0e746c0ed49fc51ff4d6fde3368003e28181875cdceaadb72", - "name": "SSS any 6 of リモコン (M 11+), 3倍!Sun Shine!カーニバル! (M 11+), シンデレラ (M 12), FEEL the BEATS (M 12), 三妖精SAY YA!!! (M 12), ポジティブ・パレード (M 12), おいでよ! 高須らいむランド (M 12+) or ドリームケッチャー (M 12)" + "name": "SSS any 6 of リモコン (MAS 11+), 3倍!Sun Shine!カーニバル! (MAS 11+), シンデレラ (MAS 12), FEEL the BEATS (MAS 12), 三妖精SAY YA!!! (MAS 12), ポジティブ・パレード (MAS 12), おいでよ! 高須らいむランド (MAS 12+) or ドリームケッチャー (MAS 12)" }, { "charts": { @@ -3819,7 +3819,7 @@ }, "game": "chunithm", "goalID": "Gb7a57778aa058c61f0dfb6d6b462afd29d465c4be66cfb50e751cae58d60afa4", - "name": "SSS any 6 of CYCLES (M 11+), Jump for Joy (M 11+), 響 (M 12), Magic (M 12), 夕暮れワンルーム (M 12), ドーナドーナのうた (M 12), ハウリング (M 12) or Palette (M 12+)" + "name": "SSS any 6 of CYCLES (MAS 11+), Jump for Joy (MAS 11+), 響 (MAS 12), Magic (MAS 12), 夕暮れワンルーム (MAS 12), ドーナドーナのうた (MAS 12), ハウリング (MAS 12) or Palette (MAS 12+)" }, { "charts": { @@ -3843,7 +3843,7 @@ }, "game": "chunithm", "goalID": "G825e5d4f5e0240ed9e252154c8898b932d2c54be0939798ad87397cac6c0fe11", - "name": "SSS any 6 of アマツキツネ (M 11+), To:Be Continued (A 11+), MAXRAGE (E 12), MuseDashを作っているPeroPeroGamesさんが倒産しちゃったよ~ (E 12), CITRUS MONSTER (E 12), Walzer für das Nichts (E 12), 光線チューニング (M 12) or イカサマライフゲイム (M 12+)" + "name": "SSS any 6 of アマツキツネ (MAS 11+), To:Be Continued (ADV 11+), MAXRAGE (EXP 12), MuseDashを作っているPeroPeroGamesさんが倒産しちゃったよ~ (EXP 12), CITRUS MONSTER (EXP 12), Walzer für das Nichts (EXP 12), 光線チューニング (MAS 12) or イカサマライフゲイム (MAS 12+)" }, { "charts": { @@ -3867,7 +3867,7 @@ }, "game": "chunithm", "goalID": "Gb8926732135e281c62ae6f5b8651341c67a30b9f7bacb9a4b17fda79e6ad0d79", - "name": "CLEAR Breakthrough (E 11+), 願い星 (M 11+), DETARAME ROCK&ROLL THEORY (M 12), どこにもいかない (M 12), シリョクケンサ (M 12), 帝国少女 (M 12), 天樂 (M 12) and いろは唄 (M 12+)" + "name": "CLEAR Breakthrough (EXP 11+), 願い星 (MAS 11+), DETARAME ROCK&ROLL THEORY (MAS 12), どこにもいかない (MAS 12), シリョクケンサ (MAS 12), 帝国少女 (MAS 12), 天樂 (MAS 12) and いろは唄 (MAS 12+)" }, { "charts": { @@ -4010,7 +4010,7 @@ }, "game": "chunithm", "goalID": "G57a360e1e5fd2c1148f712a8e46cd6777696e19e30a537fc16e8777a36c5ad33", - "name": "SSS any 6 of Blessed Rain (E 12+), What color... (M 12+), 《理想》 ~ Cloudland (M 12+), ルナティックレッドアイズ (M 12+), FLOWER (M 13), 生きる (M 13), After the rain (U 13) or 2DVenture (M 13)" + "name": "SSS any 6 of Blessed Rain (EXP 12+), What color... (MAS 12+), 《理想》 ~ Cloudland (MAS 12+), ルナティックレッドアイズ (MAS 12+), FLOWER (MAS 13), 生きる (MAS 13), After the rain (ULT 13) or 2DVenture (MAS 13)" }, { "charts": { @@ -4034,7 +4034,7 @@ }, "game": "chunithm", "goalID": "Gddc5785096838e2f1295079bc1362706a84d0a0f316d6872b9c7f85e7b7f3b90", - "name": "SSS any 6 of シル・ヴ・プレジデント (M 12+), トランスダンスアナーキー (M 12+), ユックリ feat.餅千歳 (M 12+), カレシのジュード (M 13), みずいろレインドロップ (M 13), ヴィラン (M 13), ケ・セラ・セラ奇想曲 (M 13) or ジョハリ (M 13)" + "name": "SSS any 6 of シル・ヴ・プレジデント (MAS 12+), トランスダンスアナーキー (MAS 12+), ユックリ feat.餅千歳 (MAS 12+), カレシのジュード (MAS 13), みずいろレインドロップ (MAS 13), ヴィラン (MAS 13), ケ・セラ・セラ奇想曲 (MAS 13) or ジョハリ (MAS 13)" }, { "charts": { @@ -4058,7 +4058,7 @@ }, "game": "chunithm", "goalID": "G2dbcbfcbc2b041fd040c60db77238179a37db9e71b9a5351a80fdd64d3310dfe", - "name": "SSS any 6 of カリスマ煉獄天神 (M 12+), クレイジー・ビート (M 12+), Cosmic Magic Shooter (M 12+), Tattoo (M 12+), Limits (M 13), Anemone (U 13), ボッカデラベリタ (M 13) or リンカーネイション (M 13)" + "name": "SSS any 6 of カリスマ煉獄天神 (MAS 12+), クレイジー・ビート (MAS 12+), Cosmic Magic Shooter (MAS 12+), Tattoo (MAS 12+), Limits (MAS 13), Anemone (ULT 13), ボッカデラベリタ (MAS 13) or リンカーネイション (MAS 13)" }, { "charts": { @@ -4082,7 +4082,7 @@ }, "game": "chunithm", "goalID": "G1339ebee91ea7cc88c16cfe0c0de6194ac874133e1408e735659cf7fc1e3431d", - "name": "SSS any 6 of マチガイサガシ (M 12+), 咲キ誇レ常世ノ華 (M 12+), パズルリボン (M 12+), 夢花火 (M 13), アイロニック (M 13), 儚きもの人間 (M 13), バイオレンストリガー (M 13) or Campus mode!! (M 12+)" + "name": "SSS any 6 of マチガイサガシ (MAS 12+), 咲キ誇レ常世ノ華 (MAS 12+), パズルリボン (MAS 12+), 夢花火 (MAS 13), アイロニック (MAS 13), 儚きもの人間 (MAS 13), バイオレンストリガー (MAS 13) or Campus mode!! (MAS 12+)" }, { "charts": { @@ -4106,7 +4106,7 @@ }, "game": "chunithm", "goalID": "G967c5bff124171d0ce10c9a1ec5bc3d6d6ef8c1fcc797d81d69afc78cd0b296b", - "name": "CLEAR シジョウノコエ VOCALO ver. (M 12+), 恋はりんりん☆あーりんベル (M 12+), 結んで開いて羅刹と骸 (M 12+), D.E.A.D.L.Y. (M 12+), MAIGAHARA パンチラインキッカーズ (M 13), お嫁にしなさいっ! (M 13), 風仁雷仁 (M 13) and D✪N’T ST✪P R✪CKIN’ ~[✪_✪] MIX~ (M 13)" + "name": "CLEAR シジョウノコエ VOCALO ver. (MAS 12+), 恋はりんりん☆あーりんベル (MAS 12+), 結んで開いて羅刹と骸 (MAS 12+), D.E.A.D.L.Y. (MAS 12+), MAIGAHARA パンチラインキッカーズ (MAS 13), お嫁にしなさいっ! (MAS 13), 風仁雷仁 (MAS 13) and D✪N’T ST✪P R✪CKIN’ ~[✪_✪] MIX~ (MAS 13)" }, { "charts": { @@ -4234,7 +4234,7 @@ }, "game": "chunithm", "goalID": "Ga713de663cc3d8d6d5691141fc0b94e8559935da6b4cca48ec48b66821f608f5", - "name": "SSS any 6 of やらなきゃいけないことばかり (M 13), ETERNAL DRAIN (M 13+), ライトスピード・デイズ (M 13+), Energy Booster ~ 上海紅茶館 (M 13+), STAGER (M 13+), 少女幻葬戦慄曲 ~ Necro Fantasia (M 13+), elegante (U 13+) or 聖少女サクリファイス (M 13+)" + "name": "SSS any 6 of やらなきゃいけないことばかり (MAS 13), ETERNAL DRAIN (MAS 13+), ライトスピード・デイズ (MAS 13+), Energy Booster ~ 上海紅茶館 (MAS 13+), STAGER (MAS 13+), 少女幻葬戦慄曲 ~ Necro Fantasia (MAS 13+), elegante (ULT 13+) or 聖少女サクリファイス (MAS 13+)" }, { "charts": { @@ -4258,7 +4258,7 @@ }, "game": "chunithm", "goalID": "Gdb6b54cf9d99736f72deaf5bb24096eeee1281051f562c778c246b3b0c3bd38a", - "name": "SSS any 6 of Wake up Dreamer (M 13), Papyrus (M 13+), 時の冒険者 (M 13+), Paqqin (M 13+), 最愛テトラグラマトン (M 13+), おこちゃま戦争 (M 13+), REL0VE REL1VE (M 13+) or Fighting My Way (M 13+)" + "name": "SSS any 6 of Wake up Dreamer (MAS 13), Papyrus (MAS 13+), 時の冒険者 (MAS 13+), Paqqin (MAS 13+), 最愛テトラグラマトン (MAS 13+), おこちゃま戦争 (MAS 13+), REL0VE REL1VE (MAS 13+) or Fighting My Way (MAS 13+)" }, { "charts": { @@ -4282,7 +4282,7 @@ }, "game": "chunithm", "goalID": "G2ec06513d23492e682eb931b3a63f0f7a7c602a0458d8b012072eecab1c810c6", - "name": "SSS any 6 of アナタニナルノ (M 13), ラブカ? (M 13+), 《楽土》 ~ One and Only One (M 13+), First Light (M 13+), 乙女戦士☆あーし。 (M 13+), Stronghold LandEater (M 13+), GRÄNDIR (M 13+) or Breakthrough (M 13+)" + "name": "SSS any 6 of アナタニナルノ (MAS 13), ラブカ? (MAS 13+), 《楽土》 ~ One and Only One (MAS 13+), First Light (MAS 13+), 乙女戦士☆あーし。 (MAS 13+), Stronghold LandEater (MAS 13+), GRÄNDIR (MAS 13+) or Breakthrough (MAS 13+)" }, { "charts": { @@ -4306,7 +4306,7 @@ }, "game": "chunithm", "goalID": "G87258f5622ea33d28307115a4d841814f30952cf555a8c0975f3bbf2480b0881", - "name": "SSS any 6 of 舞高最強ドリームセッション!!!!! ~180秒一曲勝負~ (M 13), Her Majesty (M 13+), Reach For The Stars (U 13+), Starting Over (M 13+), ケモノガル (M 13+), エンドマークに希望と涙を添えて ~イロドリミドリアレンジ~ (M 13+), サンシャインサマー☆夏期講習 (M 13+) or オーバーライド (M 13+)" + "name": "SSS any 6 of 舞高最強ドリームセッション!!!!! ~180秒一曲勝負~ (MAS 13), Her Majesty (MAS 13+), Reach For The Stars (ULT 13+), Starting Over (MAS 13+), ケモノガル (MAS 13+), エンドマークに希望と涙を添えて ~イロドリミドリアレンジ~ (MAS 13+), サンシャインサマー☆夏期講習 (MAS 13+) or オーバーライド (MAS 13+)" }, { "charts": { @@ -4330,7 +4330,7 @@ }, "game": "chunithm", "goalID": "G59363c3d96f07846c6b99029d0dd751682e2acc53bc2d53bbb44263baa44a36a", - "name": "CLEAR 名も無い鳥 (M 13), 札付きのワル ~マイケルのうた~ (M 13+), Rush B (M 13+), ぷよぷよのうた ピコピコミックス (M 13+), Survive (M 13+), こちら、幸福安心委員会です。 (M 13+), snooze (M 13+) and 黒塗り世界宛て書簡 (M 13+)" + "name": "CLEAR 名も無い鳥 (MAS 13), 札付きのワル ~マイケルのうた~ (MAS 13+), Rush B (MAS 13+), ぷよぷよのうた ピコピコミックス (MAS 13+), Survive (MAS 13+), こちら、幸福安心委員会です。 (MAS 13+), snooze (MAS 13+) and 黒塗り世界宛て書簡 (MAS 13+)" }, { "charts": { @@ -4470,7 +4470,7 @@ }, "game": "chunithm", "goalID": "G98245a655169ece4c7e88b9ba7c40ea427fd6f89efa50c8eaf680a00a2deece2", - "name": "SSS any 5 of ハジマリノピアノ (M 14), 鬼KYOKAN (M 14), Phantasm Brigade (M 14), 88D (M 14), Jade Star (M 14) or Technicians High (M 14)" + "name": "SSS any 5 of ハジマリノピアノ (MAS 14), 鬼KYOKAN (MAS 14), Phantasm Brigade (MAS 14), 88D (MAS 14), Jade Star (MAS 14) or Technicians High (MAS 14)" }, { "charts": { @@ -4492,7 +4492,7 @@ }, "game": "chunithm", "goalID": "G094475fc2be7b58a93a69f0f52130ebaea26c48c7b87032f229a4b562efec7d7", - "name": "SSS any 5 of フリーフォール (M 14), Baqeela (M 14), アマツカミ (M 14), Infantoon Fantasy (U 14), 〚隔絶〛 ~Flame of Determination (M 14) or Wing:No.6223 (M 14)" + "name": "SSS any 5 of フリーフォール (MAS 14), Baqeela (MAS 14), アマツカミ (MAS 14), Infantoon Fantasy (ULT 14), 〚隔絶〛 ~Flame of Determination (MAS 14) or Wing:No.6223 (MAS 14)" }, { "charts": { @@ -4514,7 +4514,7 @@ }, "game": "chunithm", "goalID": "Gb9f239c89128edb051726539238f88747663b87d5fd3ec860c342d50e85b8f33", - "name": "SSS any 5 of チューリングの跡 (E 14), 宙の隣 (M 14), Sunlight Starlight (M 14), 《真紅》 ~ Pavane Pour La Flamme (M 14), トリスメギストス (M 14) or luminoid love PART2 (M 14)" + "name": "SSS any 5 of チューリングの跡 (EXP 14), 宙の隣 (MAS 14), Sunlight Starlight (MAS 14), 《真紅》 ~ Pavane Pour La Flamme (MAS 14), トリスメギストス (MAS 14) or luminoid love PART2 (MAS 14)" }, { "charts": { @@ -4536,7 +4536,7 @@ }, "game": "chunithm", "goalID": "Gd561ffed6baf97f11d3faf8c5fc761b92b333fc9a4218972641072b87e1a7367", - "name": "SSS any 5 of 奏者はただ背中と提琴で語るのみ (M 14), 再生不能 (M 14), 電脳少女は歌姫の夢を見るか? (M 14), 幻想のサテライト (M 14), イカサマライフゲイム (U 14) or Idoratrize World (M 14)" + "name": "SSS any 5 of 奏者はただ背中と提琴で語るのみ (MAS 14), 再生不能 (MAS 14), 電脳少女は歌姫の夢を見るか? (MAS 14), 幻想のサテライト (MAS 14), イカサマライフゲイム (ULT 14) or Idoratrize World (MAS 14)" }, { "charts": { @@ -4558,7 +4558,7 @@ }, "game": "chunithm", "goalID": "G887502a8e3024a969a486b7be8cfd5614745161d1f5e4b4353930d47163ec2f4", - "name": "CLEAR bubble attack (M 14), The wheel to the Night ~インド人が夢に!?~ (M 14), Vibrant Verve (M 14), Jack-the-Ripper◆ (M 14), GEMINI -C- (M 14) and ASH (M 14)" + "name": "CLEAR bubble attack (MAS 14), The wheel to the Night ~インド人が夢に!?~ (MAS 14), Vibrant Verve (MAS 14), Jack-the-Ripper◆ (MAS 14), GEMINI -C- (MAS 14) and ASH (MAS 14)" }, { "charts": { @@ -4714,7 +4714,7 @@ }, "game": "chunithm", "goalID": "Ga7848a7f3383ed6b4e2aa893cd7e0d6d6525506c45bed5aca7e716c59facb228", - "name": "SSS any 5 of ゴールドビジョン (M 14), felys -final remix- (M 14), Name of oath (M 14+), Akasagarbha -reincarnate- (M 14+), On your mark (104期 Ver.) (U 14) or jaQup (M 14)" + "name": "SSS any 5 of ゴールドビジョン (MAS 14), felys -final remix- (MAS 14), Name of oath (MAS 14+), Akasagarbha -reincarnate- (MAS 14+), On your mark (104期 Ver.) (ULT 14) or jaQup (MAS 14)" }, { "charts": { @@ -4736,7 +4736,7 @@ }, "game": "chunithm", "goalID": "G3197afcb47163be8bbef82c2144893a31e73324cbdf7d80bc33967250aeedee2", - "name": "SSS any 5 of Komplexe (M 14), BlazinG AIR (M 14), Twilight (M 14), シャッキーーン!! (M 14), Wildfire (M 14+) or Valsqotch (M 14+)" + "name": "SSS any 5 of Komplexe (MAS 14), BlazinG AIR (MAS 14), Twilight (MAS 14), シャッキーーン!! (MAS 14), Wildfire (MAS 14+) or Valsqotch (MAS 14+)" }, { "charts": { @@ -4758,7 +4758,7 @@ }, "game": "chunithm", "goalID": "G5177867537e71a6518487037e05883cd56bf0ce6c914c04cbf5f97ed31ba5b3a", - "name": "SSS any 5 of PRAGMATISM -RESURRECTION- (M 14), StufeStern (M 14), Moon of Noon (M 14), U ARE (M 14+), Tidal Wave (M 14) or きゅびびびびずむ (M 14+)" + "name": "SSS any 5 of PRAGMATISM -RESURRECTION- (MAS 14), StufeStern (MAS 14), Moon of Noon (MAS 14), U ARE (MAS 14+), Tidal Wave (MAS 14) or きゅびびびびずむ (MAS 14+)" }, { "charts": { @@ -4780,7 +4780,7 @@ }, "game": "chunithm", "goalID": "G7852992075a69367b79ca2d25c128de46ab3ebb97afa6f28581f969e5f92434d", - "name": "SSS any 5 of ぜったい!昇天★鎮魂歌♂ (M 14), プナイプナイたいそう (M 14), オススメ☆♂♀☆でぃすとぴあ (M 14), おしゃまなプリンセス (M 14+), MAXRAGE (M 14) or めっちゃ煽ってくるタイプの音ゲーボス曲ちゃんなんかに負けないが????? (M 14+)" + "name": "SSS any 5 of ぜったい!昇天★鎮魂歌♂ (MAS 14), プナイプナイたいそう (MAS 14), オススメ☆♂♀☆でぃすとぴあ (MAS 14), おしゃまなプリンセス (MAS 14+), MAXRAGE (MAS 14) or めっちゃ煽ってくるタイプの音ゲーボス曲ちゃんなんかに負けないが????? (MAS 14+)" }, { "charts": { @@ -4802,7 +4802,7 @@ }, "game": "chunithm", "goalID": "Gc87d14a0f57d5560d0910d21269717330e40e9a7ca0a7fb337573b2ea6ecc87b", - "name": "CLEAR Satellite System ft.Diana Chiaki (M 14), Love's Theme of BADASS ~バッド・アス 愛のテーマ~ (M 14), Genesis (M 14+), TECHNOPOLIS 2085 (M 14+), チョウの標本 (M 14) and Warp Speed (M 14)" + "name": "CLEAR Satellite System ft.Diana Chiaki (MAS 14), Love's Theme of BADASS ~バッド・アス 愛のテーマ~ (MAS 14), Genesis (MAS 14+), TECHNOPOLIS 2085 (MAS 14+), チョウの標本 (MAS 14) and Warp Speed (MAS 14)" }, { "charts": { @@ -4958,7 +4958,7 @@ }, "game": "chunithm", "goalID": "G130fedd4255431d188af811735b6b54f5500a3f939f1c11ce2c831cb1159d736", - "name": "SSS any 5 of アルストロメリア (U 14+), 本物のヒーローとの戦い (M 14+), Alcyone (M 14+), Sage (M 14+), Destined Marionette (M 14+) or 〚盲従〛 ~Fantasia Sonata Flower (M 14+)" + "name": "SSS any 5 of アルストロメリア (ULT 14+), 本物のヒーローとの戦い (MAS 14+), Alcyone (MAS 14+), Sage (MAS 14+), Destined Marionette (MAS 14+) or 〚盲従〛 ~Fantasia Sonata Flower (MAS 14+)" }, { "charts": { @@ -4980,7 +4980,7 @@ }, "game": "chunithm", "goalID": "G6d2f89ce8ece5f0ac6cb1882a9d5a98f8e3382d7aa498d47e34f8e3eb50efebc", - "name": "SSS any 5 of Destr0yer (M 14+), Good bye, Merry-Go-Round. (M 14+), WE'RE BACK!! (M 14+), GEOMETRIC DANCE (M 14+), B100d Hunter (M 14+) or VALLIS-NERIA (M 14+)" + "name": "SSS any 5 of Destr0yer (MAS 14+), Good bye, Merry-Go-Round. (MAS 14+), WE'RE BACK!! (MAS 14+), GEOMETRIC DANCE (MAS 14+), B100d Hunter (MAS 14+) or VALLIS-NERIA (MAS 14+)" }, { "charts": { @@ -5002,7 +5002,7 @@ }, "game": "chunithm", "goalID": "Gb789985730b5e9ebd6df806c74ea7422d7867965fdafd9d9c7caf62ae9cbbf37", - "name": "SSS any 5 of Tango Rouge (M 14+), 花と、雪と、ドラムンベース。 (M 14+), 空間創造理論 (M 14+), LiftOff (M 14+), Daydreama (M 14+) or Hyperion (U 14+)" + "name": "SSS any 5 of Tango Rouge (MAS 14+), 花と、雪と、ドラムンベース。 (MAS 14+), 空間創造理論 (MAS 14+), LiftOff (MAS 14+), Daydreama (MAS 14+) or Hyperion (ULT 14+)" }, { "charts": { @@ -5024,7 +5024,7 @@ }, "game": "chunithm", "goalID": "Gf6bea92a9973053c165c5caa4e9b4b15b83d5e8db4d576a0bcb1f0455e2fe888", - "name": "SSS any 5 of 初音ミクの消失 (M 14+), ハードコア・シンドローム (M 14+), ウニの歌 (M 14+), Last Celebration (M 14+), Everlasting Liberty (M 14+) or †大闘士=クライン・フォーゲル・シュピール=えりか† (M 14+)" + "name": "SSS any 5 of 初音ミクの消失 (MAS 14+), ハードコア・シンドローム (MAS 14+), ウニの歌 (MAS 14+), Last Celebration (MAS 14+), Everlasting Liberty (MAS 14+) or †大闘士=クライン・フォーゲル・シュピール=えりか† (MAS 14+)" }, { "charts": { @@ -5046,7 +5046,7 @@ }, "game": "chunithm", "goalID": "G2249f91a2d5c39774e5508474294c3eb91eea9b5f7ef681efd861d2288f7e8ad", - "name": "CLEAR Blue Noise (M 14+), 閃鋼のブリューナク (M 14+), 《本能》 ~ ReCoda (M 14+), 〚空虚〛 ~Pyrophilia (M 14+), 月の光 (M 14+) and GOLDEN RULE (M 14+)" + "name": "CLEAR Blue Noise (MAS 14+), 閃鋼のブリューナク (MAS 14+), 《本能》 ~ ReCoda (MAS 14+), 〚空虚〛 ~Pyrophilia (MAS 14+), 月の光 (MAS 14+) and GOLDEN RULE (MAS 14+)" }, { "charts": { @@ -5203,7 +5203,7 @@ }, "game": "chunithm", "goalID": "G5ec5b85190a08c0e75d05aaa89caf1b7e07d1176c049d3271eeb7aa032afce6d", - "name": "SSS any 5 of Sparking Revolver (M 14+), MEGATON BLAST (M 14+), Sheriruth (M 14+), 夕焼けのRed Parade (M 14+), Aiolos (M 15) or DEvourER (M 14+)" + "name": "SSS any 5 of Sparking Revolver (MAS 14+), MEGATON BLAST (MAS 14+), Sheriruth (MAS 14+), 夕焼けのRed Parade (MAS 14+), Aiolos (MAS 15) or DEvourER (MAS 14+)" }, { "charts": { @@ -5225,7 +5225,7 @@ }, "game": "chunithm", "goalID": "G2655fe1f7578e01c7fcd1c1ac8d16b5b4c1448c3f9ad4bf6e67214da6b516b6a", - "name": "SSS any 5 of 色彩過剰のダイアリーミュージック (M 14+), Don't Fight The Music (M 14+), TEmPTaTiON (M 15), Grievous Lady (M 14+), Sound Chimera (M 14+) or Hainuwele (M 14+)" + "name": "SSS any 5 of 色彩過剰のダイアリーミュージック (MAS 14+), Don't Fight The Music (MAS 14+), TEmPTaTiON (MAS 15), Grievous Lady (MAS 14+), Sound Chimera (MAS 14+) or Hainuwele (MAS 14+)" }, { "charts": { @@ -5247,7 +5247,7 @@ }, "game": "chunithm", "goalID": "Gc790dae3c6be23c9147c3c271b58c3a5989d7e2d37302b34abf62980f7bd20cf", - "name": "SSS any 5 of G e n g a o z o (M 14+), ÅMARA (大未来電脳) (M 14+), 猛進ソリストライフ! (U 14+), Yorugao (M 14+), Megameteor (M 15) or 7thSense (M 14+)" + "name": "SSS any 5 of G e n g a o z o (MAS 14+), ÅMARA (大未来電脳) (MAS 14+), 猛進ソリストライフ! (ULT 14+), Yorugao (MAS 14+), Megameteor (MAS 15) or 7thSense (MAS 14+)" }, { "charts": { @@ -5269,7 +5269,7 @@ }, "game": "chunithm", "goalID": "G578b6c05e40a44db84ac23826b00836149a4198aeef5f8bbb90bfbd0d24d6493", - "name": "SSS any 5 of FLUFFY FLASH (M 14+), 腐れ外道とチョコレゐト (U 14+), Burn it All (M 14+), Exitium (M 14+), 真千年女王 (M 14+) or Blackmagik Blazing (M 15)" + "name": "SSS any 5 of FLUFFY FLASH (MAS 14+), 腐れ外道とチョコレゐト (ULT 14+), Burn it All (MAS 14+), Exitium (MAS 14+), 真千年女王 (MAS 14+) or Blackmagik Blazing (MAS 15)" }, { "charts": { @@ -5291,7 +5291,7 @@ }, "game": "chunithm", "goalID": "Gfdd3e5d03d494f9a99cff73bb8ff64e685c3a5cc9ee62aaa6fefc2e5457c82eb", - "name": "CLEAR 4月1日でございました (M 14+), L'épisode (M 14+), 魔理沙は大変なものを盗んでいきました (U 15), Kattobi KEIKYU Rider (M 14+), 神威 (NAOKI × ZPP MIX) (M 15) and Hardsync (M 14+)" + "name": "CLEAR 4月1日でございました (MAS 14+), L'épisode (MAS 14+), 魔理沙は大変なものを盗んでいきました (ULT 15), Kattobi KEIKYU Rider (MAS 14+), 神威 (NAOKI × ZPP MIX) (MAS 15) and Hardsync (MAS 14+)" }, { "charts": { @@ -5494,7 +5494,7 @@ }, "game": "chunithm", "goalID": "Gf41c8337f9c177702da050bccbb3c6b59af06e804e98d4c8b035f86c84488e1e", - "name": "SSS any 6 of 超最終鬼畜妹フランドール・S (M 15), neu (M 15), Cult future (M 15), 其のエメラルドを見よ (M 15), 幻想即興曲 (M 15), A c i - L (M 15) or Air (U 15)" + "name": "SSS any 6 of 超最終鬼畜妹フランドール・S (MAS 15), neu (MAS 15), Cult future (MAS 15), 其のエメラルドを見よ (MAS 15), 幻想即興曲 (MAS 15), A c i - L (MAS 15) or Air (ULT 15)" }, { "charts": { @@ -5517,7 +5517,7 @@ }, "game": "chunithm", "goalID": "Ga7a7c1305588302ae2e6e67f6d6268c9266a7504318faf5b132b84e842183792", - "name": "SSS any 6 of 電光石火 (M 15), Blazing:Storm (M 15), GIGA DRIVE (M 15), あの日、あの部屋で、あったこと (M 15), Xevel (M 15), 並行天涯 (M 15) or 《破滅》 ~ Rhapsody for The End (M 15)" + "name": "SSS any 6 of 電光石火 (MAS 15), Blazing:Storm (MAS 15), GIGA DRIVE (MAS 15), あの日、あの部屋で、あったこと (MAS 15), Xevel (MAS 15), 並行天涯 (MAS 15) or 《破滅》 ~ Rhapsody for The End (MAS 15)" }, { "charts": { @@ -5540,7 +5540,7 @@ }, "game": "chunithm", "goalID": "G41079ef8f5b6e5a4d75ff5cc953aa427424e997e4c07dcba7a7f80b23b8973fc", - "name": "SSS any 6 of Opfer (M 15), Iudicium (M 15), Big Bang (M 15), 神威 (M 15), 《創造》 ~ Cries, beyond The End (M 15), YURUSHITE (M 15) or ニルヴの心臓 (M 15)" + "name": "SSS any 6 of Opfer (MAS 15), Iudicium (MAS 15), Big Bang (MAS 15), 神威 (MAS 15), 《創造》 ~ Cries, beyond The End (MAS 15), YURUSHITE (MAS 15) or ニルヴの心臓 (MAS 15)" }, { "charts": { @@ -5563,7 +5563,7 @@ }, "game": "chunithm", "goalID": "Gea2b4c649929153aef810f83b582cf276439d5460df9d3a41d40b189bf126193", - "name": "SSS any 6 of Glorious Crown (tpz over-Over-OVERCUTE REMIX) (M 15), L9 (U 15), マシンガンポエムドール (M 15), 赤壁、大炎上!! (M 15), eden (M 15), ERIS -Legend of Gaidelia- (U 15) or 雪男 (M 15)" + "name": "SSS any 6 of Glorious Crown (tpz over-Over-OVERCUTE REMIX) (MAS 15), L9 (ULT 15), マシンガンポエムドール (MAS 15), 赤壁、大炎上!! (MAS 15), eden (MAS 15), ERIS -Legend of Gaidelia- (ULT 15) or 雪男 (MAS 15)" }, { "charts": { @@ -5586,7 +5586,7 @@ }, "game": "chunithm", "goalID": "G4f660122fc1d598d8952a47b299858c22eba94244e20510be45e206d51ec7ed5", - "name": "CLEAR ジングルベル (U 15), 宛城、炎上!! (M 15), Armageddon (M 15), SON OF SUN (U 15), Gate of Fate (U 15), 脳漿炸裂ガール (U 15) and Dengeki Tube (M 15)" + "name": "CLEAR ジングルベル (ULT 15), 宛城、炎上!! (MAS 15), Armageddon (MAS 15), SON OF SUN (ULT 15), Gate of Fate (ULT 15), 脳漿炸裂ガール (ULT 15) and Dengeki Tube (MAS 15)" }, { "charts": { @@ -5804,7 +5804,7 @@ }, "game": "chunithm", "goalID": "G98080120481f5019fc7566c8736cc51d23dfa712effb0f02bd2182bd0cdedcdd", - "name": "SSS any 6 of Kaleidoscope (M 15), Scythe of Death (M 15), What's up? Pop! (M 15), Killing Rhythm (M 15), キミとボクへの葬送歌 (M 15), 輪廻玲々 (M 15) or βlαnoir (M 15)" + "name": "SSS any 6 of Kaleidoscope (MAS 15), Scythe of Death (MAS 15), What's up? Pop! (MAS 15), Killing Rhythm (MAS 15), キミとボクへの葬送歌 (MAS 15), 輪廻玲々 (MAS 15) or βlαnoir (MAS 15)" }, { "charts": { @@ -5827,7 +5827,7 @@ }, "game": "chunithm", "goalID": "G994c1713b5ce19db6956dbb5cbd61ddcd2853bb4b568d3a208ed3e197b5ece14", - "name": "SSS any 6 of Contrapasso -inferno- (M 15), ANU (M 15), Theatore Creatore (U 15), Stardust:RAY (M 15), Trrricksters!! (M 15), Everything Will Be One (M 15) or Crush the Dystopia (M 15)" + "name": "SSS any 6 of Contrapasso -inferno- (MAS 15), ANU (MAS 15), Theatore Creatore (ULT 15), Stardust:RAY (MAS 15), Trrricksters!! (MAS 15), Everything Will Be One (MAS 15) or Crush the Dystopia (MAS 15)" }, { "charts": { @@ -5850,7 +5850,7 @@ }, "game": "chunithm", "goalID": "Gc05801aba9e49b1b01a310cfa3375c59d961dbb5f95da89251444448264a13ab", - "name": "SSS any 6 of ZegalltA (M 15), リ・フィクション・O (M 15), X7124 (M 15), parvorbital (M 15), Strange Love (M 15), macrocosmos (M 15) or Acid God (M 15)" + "name": "SSS any 6 of ZegalltA (MAS 15), リ・フィクション・O (MAS 15), X7124 (MAS 15), parvorbital (MAS 15), Strange Love (MAS 15), macrocosmos (MAS 15) or Acid God (MAS 15)" }, { "charts": { @@ -5873,7 +5873,7 @@ }, "game": "chunithm", "goalID": "G656d5defa2c418af94fb10b140cbbf537bda15b83f99e3d1d3ef5642bb5a084f", - "name": "SSS any 6 of Invisible Frenzy (M 15), Galaxy Collapse (M 15), TiamaT:F minor (M 15), The Devil Incarnate (M 15), OUTRAGE (M 15), ENDYMION (M 15) or ΩΩPARTS (M 15)" + "name": "SSS any 6 of Invisible Frenzy (MAS 15), Galaxy Collapse (MAS 15), TiamaT:F minor (MAS 15), The Devil Incarnate (MAS 15), OUTRAGE (MAS 15), ENDYMION (MAS 15) or ΩΩPARTS (MAS 15)" }, { "charts": { @@ -5896,7 +5896,7 @@ }, "game": "chunithm", "goalID": "G19e4d269eb29455c0c5173c8450877f5cf3fadc67b8ba99ba64779bea60bcbb9", - "name": "CLEAR Reverberate (M 15), LibrariA (M 15), POTENTIAL (M 15), luna blu (U 15), 玩具狂奏曲 -終焉- (M 15), Aleph-0 (U 15) and 怒槌 (M 15)" + "name": "CLEAR Reverberate (MAS 15), LibrariA (MAS 15), POTENTIAL (MAS 15), luna blu (ULT 15), 玩具狂奏曲 -終焉- (MAS 15), Aleph-0 (ULT 15) and 怒槌 (MAS 15)" }, { "charts": { @@ -6060,7 +6060,7 @@ }, "game": "chunithm", "goalID": "G691f0a6bde58b700430c9c2c5c748a8eb63fdae108fe9fed069270ad7641085f", - "name": "SSS Melodiniq (U 16)" + "name": "SSS Melodiniq (ULT 16)" }, { "charts": { @@ -6074,6 +6074,6 @@ }, "game": "chunithm", "goalID": "Gb7247d45535a89dbb74f1563376d4218e22b6210eb0e7b85631365d3dfdd7c75", - "name": "SSS YOUNITHM (U 15+)" + "name": "SSS YOUNITHM (ULT 15+)" } ] \ No newline at end of file diff --git a/typescript/client/src/app/routes/GameRoutes.tsx b/typescript/client/src/app/routes/GameRoutes.tsx index f7780ac1d..c1f0978d4 100644 --- a/typescript/client/src/app/routes/GameRoutes.tsx +++ b/typescript/client/src/app/routes/GameRoutes.tsx @@ -23,11 +23,11 @@ import { BackgroundContext } from "#context/BackgroundContext"; import { TargetsContextProvider } from "#context/TargetsContext"; import { UserGameContextProvider } from "#context/UserGameContext"; import { UserSettingsContext } from "#context/UserSettingsContext"; -import { GAME_CLIENT_IMPLEMENTATIONS } from "#lib/game-implementations"; import { type SongsReturn } from "#types/api-returns"; import { type GameProps, type SetState } from "#types/react"; import { ToCDNURL } from "#util/api"; import { IsSupportedGame } from "#util/asserts"; +import { GetChartColor } from "#util/charts"; import { ChangeOpacity } from "#util/color-opacity"; import { CreateChartLink } from "#util/data"; import { getGameGroupBannerRelPathForWeekday } from "#util/game-group-banner-counts"; @@ -432,31 +432,30 @@ function DifficultyButton({ setActiveChart, activeChart, }: { chart: ChartDocument } & Props) { - const gptImpl = GAME_CLIENT_IMPLEMENTATIONS[game]; - const diffTag = chart.difficulty; const gameGroup = GameToGameGroup(game); + const isActiveChart = activeChart?.chartID === chart.chartID; + + let backgroundColor = GetChartColor(chart); + let backgroundClass = ""; + + if (gameGroup === "itg" && backgroundColor === undefined) { + // @ts-expect-error is this still needed? + backgroundColor = ITG_COLOUR_LOOKUP[chart.data.difficultyTag]; + } + if (backgroundColor === undefined) { + backgroundClass = `bg-secondary bg-opacity-${isActiveChart ? "50" : "25"}`; + } else { + backgroundColor = ChangeOpacity(backgroundColor, isActiveChart ? 0.4 : 0.2); + } return ( setActiveChart(chart)} style={{ - // @ts-expect-error hack! - backgroundColor: gptImpl.difficultyColours[diffTag] - ? ChangeOpacity( - // @ts-expect-error hack! - gptImpl.difficultyColours[diffTag], - activeChart?.chartID === chart.chartID ? 0.4 : 0.2, - ) - : gameGroup === "itg" - ? ChangeOpacity( - // @ts-expect-error hack! - ITG_COLOUR_LOOKUP[chart.data.difficultyTag], - activeChart?.chartID === chart.chartID ? 0.4 : 0.2, - ) - : undefined, + backgroundColor, }} to={CreateChartLink(chart)} variant="secondary" diff --git a/typescript/client/src/components/tables/cells/DifficultyCell.tsx b/typescript/client/src/components/tables/cells/DifficultyCell.tsx index 00c91ee1d..83da0719e 100644 --- a/typescript/client/src/components/tables/cells/DifficultyCell.tsx +++ b/typescript/client/src/components/tables/cells/DifficultyCell.tsx @@ -2,6 +2,7 @@ import QuickTooltip from "#components/layout/misc/QuickTooltip"; import Icon from "#components/util/Icon"; import Muted from "#components/util/Muted"; import { GAME_CLIENT_IMPLEMENTATIONS } from "#lib/game-implementations"; +import { GetChartColor } from "#util/charts"; import { ChangeOpacity } from "#util/color-opacity"; import { type ChartDocument, @@ -48,7 +49,7 @@ export default function DifficultyCell({ const gptImpl = GAME_CLIENT_IMPLEMENTATIONS[game]; - if (["iidx-dp", "iidx-sp", "maimaidx", "ongeki"].includes(game)) { + if (["arcaea", "chunithm", "iidx-dp", "iidx-sp", "maimaidx", "ongeki"].includes(game)) { alwaysShort = true; } @@ -62,13 +63,16 @@ export default function DifficultyCell({ .filter(Boolean) .join(" — "); + const baseColor = GetChartColor(chart); + const backgroundColor = baseColor ? ChangeOpacity(baseColor, 0.2) : "var(--bs-secondary-bg)"; + return ( { + const gptImpl = GAME_CLIENT_IMPLEMENTATIONS[chart.game]; + return (gptImpl.difficultyColours as { [key: string]: string })[chart.difficulty]; +}; diff --git a/typescript/common/src/config/game-support/chunithm.ts b/typescript/common/src/config/game-support/chunithm.ts index 44e36ee34..d50dfe170 100644 --- a/typescript/common/src/config/game-support/chunithm.ts +++ b/typescript/common/src/config/game-support/chunithm.ts @@ -143,11 +143,11 @@ export const GAME_CHUNITHM_CONF = { type: "CHUGEKIMAI_STYLE", order: ["BASIC", "ADVANCED", "EXPERT", "MASTER", "ULTIMA"], formatShort: { - BASIC: "B", - ADVANCED: "A", - EXPERT: "E", - MASTER: "M", - ULTIMA: "U", + BASIC: "BAS", + ADVANCED: "ADV", + EXPERT: "EXP", + MASTER: "MAS", + ULTIMA: "ULT", }, formatLong: {}, default: "MASTER",