diff --git a/client/package.json b/client/package.json
index 29cdbfd93..36be8bab9 100644
--- a/client/package.json
+++ b/client/package.json
@@ -1,6 +1,6 @@
{
"name": "tachi-client",
- "version": "2.1.3",
+ "version": "2.1.4",
"private": true,
"scripts": {
"start": "node scripts/start.js -o",
diff --git a/client/src/components/tables/cells/CHUNITHMJudgementCell.tsx b/client/src/components/tables/cells/CHUNITHMJudgementCell.tsx
new file mode 100644
index 000000000..aa5e6cce7
--- /dev/null
+++ b/client/src/components/tables/cells/CHUNITHMJudgementCell.tsx
@@ -0,0 +1,45 @@
+import React from "react";
+import { COLOUR_SET, PBScoreDocument, ScoreDocument } from "tachi-common";
+import { IsNullish } from "util/misc";
+
+export default function CHUNITHMJudgementCell({
+ score,
+}: {
+ score: ScoreDocument<"chunithm:Single"> | PBScoreDocument<"chunithm:Single">;
+}) {
+ // even if we dont have judgement data, we know what they got.
+ if (score.scoreData.lamp === "ALL JUSTICE CRITICAL") {
+ return (
+
+
+ 0-
+ 0-
+ 0-
+ 0
+
+ |
+ );
+ }
+
+ const judgements = score.scoreData.judgements;
+
+ if (
+ IsNullish(judgements.miss) ||
+ IsNullish(judgements.attack) ||
+ IsNullish(judgements.justice) ||
+ IsNullish(judgements.jcrit)
+ ) {
+ return No Data. | ;
+ }
+
+ return (
+
+
+ {judgements.jcrit}-
+ {judgements.justice}-
+ {judgements.attack}-
+ {judgements.miss}
+
+ |
+ );
+}
diff --git a/client/src/components/tables/game-core-cells/CHUNITHMCoreCells.tsx b/client/src/components/tables/game-core-cells/CHUNITHMCoreCells.tsx
new file mode 100644
index 000000000..3ef2139c8
--- /dev/null
+++ b/client/src/components/tables/game-core-cells/CHUNITHMCoreCells.tsx
@@ -0,0 +1,34 @@
+import React from "react";
+import { GetGamePTConfig, PBScoreDocument, ScoreDocument } from "tachi-common";
+import { ChangeOpacity } from "util/color-opacity";
+import { FormatMillions } from "util/misc";
+import CHUNITHMJudgementCell from "../cells/CHUNITHMJudgementCell";
+import LampCell from "../cells/LampCell";
+import RatingCell from "../cells/RatingCell";
+
+export default function CHUNITHMCoreCells({
+ sc,
+ rating,
+}: {
+ sc: ScoreDocument<"chunithm:Single"> | PBScoreDocument<"chunithm:Single">;
+ rating: keyof ScoreDocument["calculatedData"];
+}) {
+ const gptConfig = GetGamePTConfig(sc.game, sc.playtype);
+
+ return (
+ <>
+
+ {sc.scoreData.grade}
+
+ {FormatMillions(sc.scoreData.score)}
+ |
+
+
+
+ >
+ );
+}
diff --git a/client/src/components/tables/game-core-cells/ScoreCoreCells.tsx b/client/src/components/tables/game-core-cells/ScoreCoreCells.tsx
index 5dd37698b..8cad9ee8c 100644
--- a/client/src/components/tables/game-core-cells/ScoreCoreCells.tsx
+++ b/client/src/components/tables/game-core-cells/ScoreCoreCells.tsx
@@ -8,6 +8,7 @@ import {
ScoreDocument,
} from "tachi-common";
import BMSCoreCells from "./BMSCoreCells";
+import CHUNITHMCoreCells from "./CHUNITHMCoreCells";
import GenericCoreCells from "./GenericCoreCells";
import IIDXCoreCells from "./IIDXCoreCells";
import JubeatCoreCells from "./JubeatCoreCells";
@@ -58,7 +59,7 @@ export default function ScoreCoreCells({
} else if (game === "jubeat") {
return ;
} else if (game === "chunithm") {
- return ;
+ return ;
} else if (game === "ddr") {
return ;
} else if (game === "gitadora") {
diff --git a/client/src/components/tables/headers/GameHeaders.tsx b/client/src/components/tables/headers/GameHeaders.tsx
index d751c8619..0a94c8518 100644
--- a/client/src/components/tables/headers/GameHeaders.tsx
+++ b/client/src/components/tables/headers/GameHeaders.tsx
@@ -1,4 +1,3 @@
-import { nanoid } from "nanoid";
import React from "react";
import {
Game,
@@ -127,10 +126,14 @@ export function GetGPTCoreHeaders
| PBScoreDocument<"popn:9B">;
- if (!aSc || !bSc) {
+ if (!aSc && bSc) {
return -Infinity;
}
+ if (aSc && !bSc) {
+ return Infinity;
+ }
+
if (aSc.scoreData.lampIndex === bSc.scoreData.lampIndex) {
if (
!aSc.scoreData.hitMeta.specificClearType ||
diff --git a/client/src/util/constants/version.ts b/client/src/util/constants/version.ts
index 39a86d13a..979fcec74 100644
--- a/client/src/util/constants/version.ts
+++ b/client/src/util/constants/version.ts
@@ -1,6 +1,6 @@
const MAJOR = 2;
const MINOR = 1;
-const PATCH = 3;
+const PATCH = 4;
// As is with all front-facing zkldi projects, the version names for tachi-client
// are from an album I like. In this case, the album is The Cure - Disintegration.