diff --git a/client/src/lib/game-implementations.tsx b/client/src/lib/game-implementations.tsx index 900b230af..a1dc9483d 100644 --- a/client/src/lib/game-implementations.tsx +++ b/client/src/lib/game-implementations.tsx @@ -62,6 +62,11 @@ export const GPT_CLIENT_IMPLEMENTATIONS: GPTClientImplementations = { "linear-gradient(-45deg, #f0788a, #f48fb1, #9174c2, #79bcf2, #70a173, #f7ff99, #faca7d, #ff9d80, #f0788a)", color: "var(--bs-dark)", }, + RAINBOW_EX: { + background: + "linear-gradient(-45deg, #0fa091, #0f98d5, #67087f, #d9007e, #f56e06)", + color: "var(--bs-light)", + }, }, dan: { DAN_I: bgc("#3b66f1", "var(--bs-light)"), @@ -369,6 +374,11 @@ export const GPT_CLIENT_IMPLEMENTATIONS: GPTClientImplementations = { "linear-gradient(-45deg, #f0788a, #f48fb1, #9174c2, #79bcf2, #70a173, #f7ff99, #faca7d, #ff9d80, #f0788a)", color: "var(--bs-dark)", }, + RAINBOW_EX: { + background: + "linear-gradient(-45deg, #0fa091, #0f98d5, #67087f, #d9007e, #f56e06)", + color: "var(--bs-light)", + }, }, matchingClass: { B5: bgc("green", "var(--bs-light)"), @@ -740,6 +750,16 @@ export const GPT_CLIENT_IMPLEMENTATIONS: GPTClientImplementations = { "linear-gradient(-45deg, #f0788a, #f48fb1, #9174c2, #79bcf2, #70a173, #f7ff99, #faca7d, #ff9d80, #f0788a)", color: "var(--bs-dark)", }, + RAINBOW_PLUS: { + background: + "linear-gradient(-45deg, #f0788a, #f48fb1, #9174c2, #79bcf2, #70a173, #f7ff99, #faca7d, #ff9d80, #f0788a)", + color: "var(--bs-dark)", + }, + RAINBOW_EX: { + background: + "linear-gradient(-45deg, #0fa091, #0f98d5, #67087f, #d9007e, #f56e06)", + color: "var(--bs-light)", + }, }, }, enumColours: { diff --git a/common/src/config/game-support/chunithm.ts b/common/src/config/game-support/chunithm.ts index 7c71154c0..0b52bcd89 100644 --- a/common/src/config/game-support/chunithm.ts +++ b/common/src/config/game-support/chunithm.ts @@ -24,7 +24,8 @@ export const CHUNITHMColours = [ ClassValue("SILVER", "銀", "Silver: 13.25 - 14.49 Rating"), ClassValue("GOLD", "金", "Gold: 14.50 - 15.24 Rating"), ClassValue("PLATINUM", "鉑", "Platinum: 15.25 - 15.99 Rating"), - ClassValue("RAINBOW", "虹", "Rainbow: >=16 Rating"), + ClassValue("RAINBOW", "虹", "Rainbow: 16 - 16.99 Rating"), + ClassValue("RAINBOW_EX", "虹(極)", "Rainbow (Extreme): >=17 Rating"), ]; export const CHUNITHMClasses = [ diff --git a/common/src/config/game-support/maimai-dx.ts b/common/src/config/game-support/maimai-dx.ts index e7321c5af..ce7b16756 100644 --- a/common/src/config/game-support/maimai-dx.ts +++ b/common/src/config/game-support/maimai-dx.ts @@ -53,7 +53,8 @@ const MaimaiDXColours = [ ClassValue("SILVER", "Silver", "13000 - 13999 Rating"), ClassValue("GOLD", "Gold", "14000 - 14499 Rating"), ClassValue("PLATINUM", "Platinum", "14500 - 14999 Rating"), - ClassValue("RAINBOW", "Rainbow", ">=15000 Rating"), + ClassValue("RAINBOW", "Rainbow", "15000 - 15999 Rating"), + ClassValue("RAINBOW_EX", "Rainbow (EX)", ">=16000 Rating"), ]; const MaimaiDXMatchingClasses = [ diff --git a/common/src/config/game-support/ongeki.ts b/common/src/config/game-support/ongeki.ts index 0f945b20a..23abeda7d 100644 --- a/common/src/config/game-support/ongeki.ts +++ b/common/src/config/game-support/ongeki.ts @@ -14,16 +14,18 @@ export const ONGEKI_CONF = { } as const satisfies INTERNAL_GAME_CONFIG; export const OngekiColours = [ - ClassValue("BLUE", "青", "Blue: 0 - 1.99 Rating"), - ClassValue("GREEN", "緑", "Green: 2 - 3.99 Rating"), - ClassValue("ORANGE", "橙", "Orange: 4 - 6.99 Rating"), - ClassValue("RED", "赤", "Red: 7 - 9.99 Rating"), - ClassValue("PURPLE", "紫", "Purple: 10 - 11.99 Rating"), - ClassValue("COPPER", "銅", "Copper: 12 - 12.99 Rating"), - ClassValue("SILVER", "銀", "Silver: 13 - 13.99 Rating"), - ClassValue("GOLD", "金", "Gold: 14.00 - 14.49 Rating"), + ClassValue("BLUE", "青", "Blue: 0.00 – 1.99 Rating"), + ClassValue("GREEN", "緑", "Green: 2.00 – 3.99 Rating"), + ClassValue("ORANGE", "橙", "Orange: 4.00 – 6.99 Rating"), + ClassValue("RED", "赤", "Red: 7.00 – 9.99 Rating"), + ClassValue("PURPLE", "紫", "Purple: 10.00 – 11.99 Rating"), + ClassValue("COPPER", "銅", "Copper: 12.00 – 12.99 Rating"), + ClassValue("SILVER", "銀", "Silver: 13.00 – 13.99 Rating"), + ClassValue("GOLD", "金", "Gold: 14.00 – 14.49 Rating"), ClassValue("PLATINUM", "鉑", "Platinum: 14.50 - 14.99 Rating"), - ClassValue("RAINBOW", "虹", "Rainbow: >=15 Rating"), + ClassValue("RAINBOW", "虹", "Rainbow: 15.00 – 15.99 Rating"), + ClassValue("RAINBOW_PLUS", "虹+", "Rainbow +: 16.00 – 16.99 Rating"), + ClassValue("RAINBOW_EX", "虹(極)", "Rainbow (Extreme): >=17.00 Rating"), ]; export const ONGEKI_SINGLE_CONF = { diff --git a/common/src/constants/game.ts b/common/src/constants/game.ts index a821f7a22..bab97e125 100644 --- a/common/src/constants/game.ts +++ b/common/src/constants/game.ts @@ -366,6 +366,7 @@ export enum CHUNITHM_COLOURS { GOLD = 7, PLATINUM = 8, RAINBOW = 9, + RAINBOW_EX = 10, } export enum WACCA_STAGEUPS { @@ -433,6 +434,7 @@ export enum MAIMAIDX_COLOURS { GOLD = 8, PLATINUM = 9, RAINBOW = 10, + RAINBOW_EX = 11, } export enum MAIMAIDX_DANS { @@ -595,4 +597,6 @@ export enum ONGEKI_COLOURS { GOLD = 7, PLATINUM = 8, RAINBOW = 9, + RAINBOW_PLUS = 10, + RAINBOW_EX = 11, } diff --git a/server/src/game-implementations/games/chunithm.test.ts b/server/src/game-implementations/games/chunithm.test.ts index 13ce66006..0ffe0d5ce 100644 --- a/server/src/game-implementations/games/chunithm.test.ts +++ b/server/src/game-implementations/games/chunithm.test.ts @@ -90,6 +90,7 @@ t.test("CHUNITHM Implementation", (t) => { f(14.5, "GOLD"); f(15.25, "PLATINUM"); f(16, "RAINBOW"); + f(17, "RAINBOW_EX"); t.end(); }); diff --git a/server/src/game-implementations/games/chunithm.ts b/server/src/game-implementations/games/chunithm.ts index d33baf9b7..164310b12 100644 --- a/server/src/game-implementations/games/chunithm.ts +++ b/server/src/game-implementations/games/chunithm.ts @@ -25,7 +25,9 @@ export const CHUNITHM_IMPL: GPTServerImplementation<"chunithm:Single"> = { return null; } - if (rating >= 16) { + if (rating >= 17) { + return "RAINBOW_EX"; + } else if (rating >= 16) { return "RAINBOW"; } else if (rating >= 15.25) { return "PLATINUM"; diff --git a/server/src/game-implementations/games/maimaidx.test.ts b/server/src/game-implementations/games/maimaidx.test.ts index b991518f8..4d5f93457 100644 --- a/server/src/game-implementations/games/maimaidx.test.ts +++ b/server/src/game-implementations/games/maimaidx.test.ts @@ -76,6 +76,7 @@ t.test("Maimai DX Implementation", (t) => { f(null, null); f(0, "WHITE"); + f(16000, "RAINBOW_EX"); f(15000, "RAINBOW"); f(14500, "PLATINUM"); f(14000, "GOLD"); diff --git a/server/src/game-implementations/games/maimaidx.ts b/server/src/game-implementations/games/maimaidx.ts index 3a6f5fb56..212ad8b69 100644 --- a/server/src/game-implementations/games/maimaidx.ts +++ b/server/src/game-implementations/games/maimaidx.ts @@ -27,7 +27,9 @@ export const MAIMAIDX_IMPL: GPTServerImplementation<"maimaidx:Single"> = { return null; } - if (rate >= 15000) { + if (rate >= 16000) { + return "RAINBOW_EX"; + } else if (rate >= 15000) { return "RAINBOW"; } else if (rate >= 14500) { return "PLATINUM"; diff --git a/server/src/game-implementations/games/ongeki.test.ts b/server/src/game-implementations/games/ongeki.test.ts index bd04233e9..2efbbd64f 100644 --- a/server/src/game-implementations/games/ongeki.test.ts +++ b/server/src/game-implementations/games/ongeki.test.ts @@ -92,6 +92,8 @@ t.test("ONGEKI Implementation", (t) => { f(14, "GOLD"); f(14.5, "PLATINUM"); f(15, "RAINBOW"); + f(16, "RAINBOW_PLUS"); + f(17, "RAINBOW_EX"); t.end(); }); diff --git a/server/src/game-implementations/games/ongeki.ts b/server/src/game-implementations/games/ongeki.ts index 3f14fe5d1..45772963b 100644 --- a/server/src/game-implementations/games/ongeki.ts +++ b/server/src/game-implementations/games/ongeki.ts @@ -66,7 +66,11 @@ export const ONGEKI_IMPL: GPTServerImplementation<"ongeki:Single"> = { return null; } - if (rating >= 15) { + if (rating >= 17) { + return "RAINBOW_EX"; + } else if (rating >= 16) { + return "RAINBOW_PLUS"; + } else if (rating >= 15) { return "RAINBOW"; } else if (rating >= 14.5) { return "PLATINUM";