Add more game metadata
Some checks failed
Build / build (push) Has been cancelled

This commit is contained in:
Trenton Zimmer 2025-11-26 13:22:54 -05:00
parent bc82f87bc7
commit d529878d7a
6 changed files with 117 additions and 25 deletions

View File

@ -1,4 +1,4 @@
VITE_APP_VERSION="3.0.35"
VITE_APP_VERSION="3.0.36"
VITE_API_URL="http://localhost:8000/"
VITE_API_KEY="your_api_key_should_be_here"
VITE_ASSET_PATH="/assets"

View File

@ -1,4 +1,4 @@
VITE_APP_VERSION="3.0.35"
VITE_APP_VERSION="3.0.36"
VITE_API_URL="https://restfulsleep.phaseii.network"
VITE_API_KEY="your_api_key_should_be_here"
VITE_ASSET_PATH="https://cdn.phaseii.network/file/PhaseII/web-assets"

View File

@ -34,5 +34,6 @@
"3.0.32": ["- (Major) Change phase \"Attempt\" to \"Score\"", "- (Bugfix) Fix pop'n music version sorting", "- (Bugfix) Fix Gitadora chart data formatting issues", "- (Bugfix) Filter personal records to songs with scores"],
"3.0.33": ["- (Major) Condense all score tables to one parser and format", "- (Major) Add more game metadata", "- (Bugfix) Fix difficulties showing as `NaN`", "- (Beta) Add a developmental device plugin for card effect"],
"3.0.34": ["- (Major) Add support for Jubeat titles", "- (Major) Add base BTA support"],
"3.0.35": ["- (Bugfix) Fix cursor hover state on news card and profile card", "- (Minor) Update DDR game options", "- (Minor) Update IIDX event settings", "- (Minor) Add IIDX 32 basic QPro settings"]
"3.0.35": ["- (Bugfix) Fix cursor hover state on news card and profile card", "- (Minor) Update DDR game options", "- (Minor) Update IIDX event settings", "- (Minor) Add IIDX 32 basic QPro settings"],
"3.0.36": ["- (Major) Finish more game metadata (DRS, Museca, Nostalgia, pop'n, jubeat)"]
}

View File

@ -1574,7 +1574,19 @@ export const gameData = [
500: "A",
600: "S",
700: "SS",
800: "EXC",
800: "SSS",
900: "EXC",
},
ratingTable: {
0: 100,
500000: 200,
700000: 300,
800000: 400,
850000: 500,
900000: 600,
950000: 700,
980000: 800,
1000000: 900,
},
medalTable: {
100: "FAILED",
@ -1703,9 +1715,25 @@ export const gameData = [
1: "ORANGE",
2: "RED",
},
rankTable: {
100: "没 (DEATH)",
200: "拙 (POOR)",
300: "凡 (MEDIOCRE)",
400: "佳 (GOOD)",
500: "良 (GREAT)",
600: "優 (EXCELLENT)",
700: "秀 (SUPERB)",
800: "傑 (MASTERPIECE)",
900: "傑 (PERFECT)",
},
medalTable: {
100: "FAILED",
200: "CLEARED",
300: "FULL COMBO",
},
scoreHeaders: [
{ text: "Combos", value: "combo", width: 80 },
{ text: "Halo", value: "halo", width: 80 },
{ text: "Combos", value: "data.combo", width: 80 },
{ text: "Medal", value: "data.clear_type", width: 80 },
],
versions: [
{
@ -1731,8 +1759,8 @@ export const gameData = [
3: "REAL",
},
scoreHeaders: [
{ text: "Combos", value: "combo", width: 80 },
{ text: "Halo", value: "halo", width: 80 },
{ text: "Combos", value: "data.combo", width: 80 },
// { text: "Medal", value: "data.clear_flag", width: 80 },
],
versions: [
{
@ -1809,10 +1837,44 @@ export const gameData = [
2: "HYPER",
3: "EX",
},
rankTable: {
100: "E",
200: "D",
300: "C",
400: "B",
500: "A",
600: "AA",
700: "AAA",
800: "S",
},
ratingTable: {
0: 100,
50000: 200,
62000: 300,
72000: 400,
82000: 500,
90000: 600,
95000: 700,
98000: 800,
},
medalTable: {
100: "🔴 FAILED",
200: "♦️ FAILED",
300: "⭐ FAILED",
400: "EASY CLEAR",
500: "🟢 CLEAR",
600: "🔷 CLEAR",
700: "🌟 CLEAR",
800: "🟡 FULL COMBO",
900: "💎 FULL COMBO",
1000: "🌠 FULL COMBO",
1100: "PERFECT",
},
scoreHeaders: [
{ text: "Combos", value: "combo", width: 80 },
{ text: "Halo", value: "halo", width: 80 },
{ text: "Combos", value: "data.combo", width: 80 },
{ text: "Medal", value: "data.medal", width: 120 },
],
scoreMultiplier: 10,
versions: [
{
id: 0,

View File

@ -7,7 +7,24 @@ export function shouldRenderChart(difficulty, chartTable, chartKey) {
export function formatDifficulty(difficulty, difficultyDenom = 1) {
if (isNaN(difficulty / difficultyDenom)) {
return difficulty;
return difficulty.difnum ? difficulty.difnum : difficulty;
}
return difficulty / difficultyDenom;
}
export function rankFromScore(ratingTable, score) {
const thresholds = Object.entries(ratingTable)
.map(([k, v]) => [Number(k), v])
.sort((a, b) => a[0] - b[0]);
var result = 100;
for (const [threshold, rank] of thresholds) {
if (score >= threshold) {
result = rank;
} else {
break;
}
}
return result;
}

View File

@ -1,5 +1,5 @@
import { formatSortableDate } from "@/constants/date";
import { formatDifficulty } from "@/constants/scoreDataFilters";
import { formatDifficulty, rankFromScore } from "@/constants/scoreDataFilters";
export function scoreHeaders(thisGame) {
const headers = [
@ -55,19 +55,6 @@ export function formatScoreTable(thisGame, scores) {
item.timestamp = formatSortableDate(item.timestamp);
}
if (item.points != undefined) {
item.points = item.points
.toString()
.replace(/\B(?<!\.\d*)(?=(\d{3})+(?!\d))/g, ",");
}
if (item.data?.stats?.score != undefined) {
item.exscore = item.points.toString();
item.points = item.data?.stats?.score
.toString()
.replace(/\B(?<!\.\d*)(?=(\d{3})+(?!\d))/g, ",");
}
if (item.song?.chart != undefined && thisGame.chartTable) {
item.song.chart = `${thisGame.chartTable[item.song?.chart]} - ${formatDifficulty(
item.song.data?.difficulty,
@ -87,6 +74,14 @@ export function formatScoreTable(thisGame, scores) {
item.data.medal = thisGame.medalTable[item.data?.clear_status];
}
if (item.data?.clear_type != undefined && thisGame.medalTable) {
item.data.clear_type = thisGame.medalTable[item.data?.clear_type];
}
if (!item.data?.rank && thisGame.ratingTable) {
item.data.rank = rankFromScore(thisGame.ratingTable, item.points);
}
if (item.data?.rank != undefined && thisGame.rankTable) {
item.data.rank = thisGame.rankTable[item.data?.rank];
}
@ -137,6 +132,23 @@ export function formatScoreTable(thisGame, scores) {
item.data.clear_gauge = `${item.data?.clear_gauge / 10}%`;
}
if (!item.data?.combo) {
item.data.combo = 0;
}
if (item.points != undefined) {
item.points = item.points
.toString()
.replace(/\B(?<!\.\d*)(?=(\d{3})+(?!\d))/g, ",");
}
if (item.data?.stats?.score != undefined) {
item.exscore = item.points.toString();
item.points = item.data?.stats?.score
.toString()
.replace(/\B(?<!\.\d*)(?=(\d{3})+(?!\d))/g, ",");
}
formattedItems.push(item);
}
return formattedItems;