ChartDocument Updates

This commit is contained in:
zkldi
2021-04-16 14:37:26 +01:00
parent 4c885a776c
commit ee2ee2efb4
5 changed files with 154 additions and 80 deletions
+9 -22
View File
@@ -161,18 +161,10 @@ exports.validHitMeta = {
};
exports.validScoreMeta = {
iidx: {
optionsRandom: ["NONRAN", "RANDOM", "R-RANDOM", "S-RANDOM", "MIRROR"],
optionsAssist: [
"AUTO SCRATCH",
"5KEYS",
"LEGACY NOTE",
"ASCR + 5KEY",
"ASCR + LEGACY",
"5KEYS + LEGACY",
"FULL ASSIST",
],
optionsRange: ["SUDDEN+", "HIDDEN+", "SUD+ HID+", "LIFT", "LIFT SUD+"],
optionsGauge: ["ASSISTED EASY", "EASY", "HARD", "EX-HARD"],
random: ["NONRAN", "RANDOM", "R-RANDOM", "S-RANDOM", "MIRROR"],
assist: ["NO ASSIST", "AUTO SCRATCH", "LEGACY NOTE", "ASCR + LEGACY"],
range: ["NONE", "SUDDEN+", "HIDDEN+", "SUD+ HID+", "LIFT", "LIFT SUD+"],
gauge: ["ASSISTED EASY", "EASY", "HARD", "EX HARD"],
pacemaker: [
"NO GRAPH",
"MY BEST",
@@ -1439,7 +1431,7 @@ function AbsoluteScoreGradeDelta(game, score, percent, absDelta) {
if (game === "iidx" || game === "bms") {
let reversedNC = Math.floor((score / percent) * 100) / 2;
chart = {
notedata: {
data: {
notecount: reversedNC,
},
};
@@ -1467,12 +1459,10 @@ exports.AbsoluteScoreGradeDelta = AbsoluteScoreGradeDelta;
function CalculateScore(game, percent, chart) {
let score = percent;
if (game === "iidx" || game === "bms") {
score = chart.notedata.notecount * 2 * (percent / 100);
score =
chart.data.notecount * 2 * (percent / 100);
}
else if (game === "ddr") {
score = 1000000 * (percent / 100);
}
else if (game === "museca" || game === "jubeat") {
else if (game === "ddr" || game === "museca" || game === "jubeat" || game === "chunithm") {
score = 1000000 * (percent / 100);
}
else if (game === "popn") {
@@ -1481,9 +1471,6 @@ function CalculateScore(game, percent, chart) {
else if (game === "sdvx" || game === "usc") {
score = 10000000 * (percent / 100);
}
else if (game === "chunithm") {
score = 1000000 * (percent / 100);
}
if (score) {
return score;
}
@@ -1493,7 +1480,7 @@ exports.CalculateScore = CalculateScore;
function PercentToScore(percent, game, chartData) {
let eScore = 0;
if (game === "iidx" || game === "bms") {
eScore = percent * chartData.notedata.notecount * 2;
eScore = percent * chartData.data.notecount * 2;
}
else if (game === "museca" || game === "jubeat") {
eScore = percent * 1000000;
File diff suppressed because one or more lines are too long
+72 -18
View File
@@ -463,22 +463,78 @@ export interface IIDXEamusementScoreDocument extends MongoDBDocument {
score: integer;
ranking: integer;
}
interface ChartDocumentFlags {
"iidx:SP": "IN BASE GAME" | "OMNIMIX" | "N-1";
"iidx:DP": "IN BASE GAME" | "OMNIMIX" | "N-1";
"popn:9B": "IN BASE GAME";
"sdvx:Single": "IN BASE GAME" | "OMNIMIX" | "N-1";
"usc:Single": "CUSTOM";
"ddr:SP": "IN BASE GAME" | "N-1";
"ddr:DP": "IN BASE GAME" | "N-1";
"maimai:Single": "IN BASE GAME";
"jubeat:Single": "IN BASE GAME";
"museca:Single": "OMNIMIX";
"bms:7K": never;
"bms:14K": never;
"bms:5K": never;
"chunithm:Single": "IN BASE GAME" | "OMNIMIX";
"gitadora:Gita": "IN BASE GAME" | "OMNIMIX";
"gitadora:Dora": "IN BASE GAME" | "OMNIMIX";
}
interface CDDataIIDXSP {
notecount: integer;
inGameID: string;
inGameINTID: integer;
}
interface CDDataDDRSP {
songHash: string;
inGameID: string;
}
interface ChartDocumentData {
"iidx:SP": CDDataIIDXSP;
"iidx:DP": CDDataIIDXSP;
"popn:9B": Record<string, never>;
"sdvx:Single": {
inGameID: string;
inGameINTID: integer;
};
"usc:Single": {
hashSHA256: string;
};
"ddr:SP": CDDataDDRSP;
"ddr:DP": CDDataDDRSP;
"maimai:Single": {
maxPercent: number;
inGameID: string;
};
"jubeat:Single": Record<string, never>;
"museca:Single": "OMNIMIX";
"bms:7K": Record<string, never>;
"bms:14K": Record<string, never>;
"bms:5K": Record<string, never>;
"chunithm:Single": {
inGameINTID: integer;
};
"gitadora:Gita": {
inGameID: string;
inGameINTID: integer;
};
"gitadora:Dora": {
inGameID: string;
inGameINTID: integer;
};
}
export interface ChartDocument<G extends Game = Game, P extends Playtypes[G] = Playtypes[G], I extends IDStrings = IDStrings> extends MongoDBDocument {
chartID: string;
id: integer;
songID: integer;
level: string;
levelNum: number;
difficulty: Difficulties[I];
playtype: P;
length: string | number | null;
bpmMin: number;
bpmMax: number;
flags: Record<string, boolean>;
internals: Record<string, unknown>;
notedata: {
notecount: integer;
objects: Record<string, integer>;
};
length: string | null;
bpmString: string | null;
flags: Record<ChartDocumentFlags[I], boolean>;
data: ChartDocumentData[I];
}
export interface TierlistDocument extends MongoDBDocument {
game: Game;
@@ -572,16 +628,16 @@ export interface UserMilestoneDocument extends MongoDBDocument {
}
declare type RanOptions = "NONRAN" | "RANDOM" | "R-RANDOM" | "S-RANDOM" | "MIRROR";
interface IIDXSPScoreMeta {
optionsRandom: RanOptions;
optionsAssist: "AUTO SCRATCH" | "5KEYS" | "LEGACY NOTE" | "ASCR + 5KEY" | "ASCR + LEGACY" | "5KEYS + LEGACY" | "FULL ASSIST";
optionsRange: "SUDDEN+" | "HIDDEN+" | "SUD+ HID+" | "LIFT" | "LIFT SUD+";
optionsGauge: "ASSISTED EASY" | "EASY" | "HARD" | "EX-HARD";
random: RanOptions;
assist: "AUTO SCRATCH" | "5KEYS" | "LEGACY NOTE" | "ASCR + 5KEY" | "ASCR + LEGACY" | "5KEYS + LEGACY" | "FULL ASSIST";
range: "SUDDEN+" | "HIDDEN+" | "SUD+ HID+" | "LIFT" | "LIFT SUD+";
gauge: "ASSISTED EASY" | "EASY" | "HARD" | "EX-HARD";
pacemaker: "NO GRAPH" | "MY BEST" | "RIVAL 1" | "RIVAL 2" | "RIVAL 3" | "RIVAL 4" | "RIVAL 5" | "RIVAL NEXT" | "RIVAL BEST" | "RIVAL AVERAGE" | "NATIONAL BEST" | "NATIONAL AVERAGE" | "PREFECTURE BEST" | "PREFECTURE AVERAGE" | "CLASS BEST" | "CLASS AVERAGE" | "VENUE BEST" | "VENUE NEXT" | "PREVIOUS GHOST" | "PACEMAKER AAA" | "PACEMAKER AA" | "PACEMAKER A" | "PACEMAKER" | /* ??? */ "PACEMAKER NEXT" | "PACEMAKER NEXT+" | "PLAYER 1" | "PLAYER 2";
pacemakerName: string;
pacemakerTarget: integer;
}
interface BMS7KScoreMeta {
optionsRandom: RanOptions;
random: RanOptions;
inputDevice: string;
}
interface ScoreMetaLookup {
@@ -591,9 +647,7 @@ interface ScoreMetaLookup {
};
"popn:9B": Record<string, never>;
"sdvx:Single": Record<string, never>;
"usc:Single": BASE_VALID_HIT_META & {
gauge: number;
};
"usc:Single": Record<string, never>;
"ddr:SP": Record<string, never>;
"ddr:DP": Record<string, never>;
"maimai:Single": Record<string, never>;
+12 -23
View File
@@ -172,18 +172,10 @@ export const validHitMeta: Record<Game, string[]> = {
export const validScoreMeta: Record<Game, Record<string, unknown>> = {
iidx: {
optionsRandom: ["NONRAN", "RANDOM", "R-RANDOM", "S-RANDOM", "MIRROR"],
optionsAssist: [
"AUTO SCRATCH",
"5KEYS",
"LEGACY NOTE",
"ASCR + 5KEY",
"ASCR + LEGACY",
"5KEYS + LEGACY",
"FULL ASSIST",
],
optionsRange: ["SUDDEN+", "HIDDEN+", "SUD+ HID+", "LIFT", "LIFT SUD+"],
optionsGauge: ["ASSISTED EASY", "EASY", "HARD", "EX-HARD"],
random: ["NONRAN", "RANDOM", "R-RANDOM", "S-RANDOM", "MIRROR"],
assist: ["NO ASSIST", "AUTO SCRATCH", "LEGACY NOTE", "ASCR + LEGACY"],
range: ["NONE", "SUDDEN+", "HIDDEN+", "SUD+ HID+", "LIFT", "LIFT SUD+"],
gauge: ["ASSISTED EASY", "EASY", "HARD", "EX HARD"],
pacemaker: [
"NO GRAPH",
"MY BEST",
@@ -1526,7 +1518,7 @@ export function AbsoluteScoreGradeDelta(
if (game === "iidx" || game === "bms") {
let reversedNC = Math.floor((score / percent) * 100) / 2;
chart = {
notedata: {
data: {
notecount: reversedNC,
},
};
@@ -1554,17 +1546,14 @@ export function CalculateScore(game: Game, percent: number, chart: ChartDocument
let score = percent;
if (game === "iidx" || game === "bms") {
score = chart.notedata.notecount * 2 * (percent / 100);
} else if (game === "ddr") {
score = 1000000 * (percent / 100);
} else if (game === "museca" || game === "jubeat") {
score = 1000000 * (percent / 100);
score =
(chart as ChartDocument<"iidx", "SP", "iidx:SP">).data.notecount * 2 * (percent / 100);
} else if (game === "ddr" || game === "museca" || game === "jubeat" || game === "chunithm") {
score = 1_000_000 * (percent / 100);
} else if (game === "popn") {
score = 100000 * (percent / 100);
score = 100_000 * (percent / 100);
} else if (game === "sdvx" || game === "usc") {
score = 10000000 * (percent / 100);
} else if (game === "chunithm") {
score = 1000000 * (percent / 100);
score = 10_000_000 * (percent / 100);
}
if (score) {
@@ -1577,7 +1566,7 @@ export function PercentToScore(percent: number, game: Game, chartData: ChartDocu
let eScore = 0;
if (game === "iidx" || game === "bms") {
eScore = percent * chartData.notedata.notecount * 2;
eScore = percent * (chartData as ChartDocument<"iidx", "SP", "iidx:SP">).data.notecount * 2;
} else if (game === "museca" || game === "jubeat") {
eScore = percent * 1000000;
} else if (game === "popn") {
+60 -16
View File
@@ -654,26 +654,70 @@ export interface IIDXEamusementScoreDocument extends MongoDBDocument {
ranking: integer;
}
interface ChartDocumentFlags {
"iidx:SP": "IN BASE GAME" | "OMNIMIX" | "N-1";
"iidx:DP": "IN BASE GAME" | "OMNIMIX" | "N-1";
"popn:9B": "IN BASE GAME";
"sdvx:Single": "IN BASE GAME" | "OMNIMIX" | "N-1";
"usc:Single": "CUSTOM";
"ddr:SP": "IN BASE GAME" | "N-1";
"ddr:DP": "IN BASE GAME" | "N-1";
"maimai:Single": "IN BASE GAME";
"jubeat:Single": "IN BASE GAME";
"museca:Single": "OMNIMIX";
"bms:7K": never;
"bms:14K": never;
"bms:5K": never;
"chunithm:Single": "IN BASE GAME" | "OMNIMIX";
"gitadora:Gita": "IN BASE GAME" | "OMNIMIX";
"gitadora:Dora": "IN BASE GAME" | "OMNIMIX";
}
interface CDDataIIDXSP {
notecount: integer;
inGameID: string;
inGameINTID: integer;
}
interface CDDataDDRSP {
songHash: string;
inGameID: string;
}
interface ChartDocumentData {
"iidx:SP": CDDataIIDXSP;
"iidx:DP": CDDataIIDXSP;
"popn:9B": Record<string, never>;
"sdvx:Single": { inGameID: string; inGameINTID: integer };
"usc:Single": { hashSHA256: string };
"ddr:SP": CDDataDDRSP;
"ddr:DP": CDDataDDRSP;
"maimai:Single": { maxPercent: number; inGameID: string };
"jubeat:Single": Record<string, never>;
"museca:Single": "OMNIMIX";
"bms:7K": Record<string, never>;
"bms:14K": Record<string, never>;
"bms:5K": Record<string, never>;
"chunithm:Single": { inGameINTID: integer };
"gitadora:Gita": { inGameID: string; inGameINTID: integer };
"gitadora:Dora": { inGameID: string; inGameINTID: integer };
}
export interface ChartDocument<
G extends Game = Game,
P extends Playtypes[G] = Playtypes[G],
I extends IDStrings = IDStrings
> extends MongoDBDocument {
chartID: string;
id: integer;
songID: integer;
level: string;
levelNum: number;
difficulty: Difficulties[I];
playtype: P;
length: string | number | null;
bpmMin: number;
bpmMax: number;
flags: Record<string, boolean>;
internals: Record<string, unknown>;
notedata: {
notecount: integer;
objects: Record<string, integer>;
};
length: string | null;
bpmString: string | null;
flags: Record<ChartDocumentFlags[I], boolean>;
data: ChartDocumentData[I];
}
export interface TierlistDocument extends MongoDBDocument {
@@ -780,8 +824,8 @@ export interface UserMilestoneDocument extends MongoDBDocument {
type RanOptions = "NONRAN" | "RANDOM" | "R-RANDOM" | "S-RANDOM" | "MIRROR";
interface IIDXSPScoreMeta {
optionsRandom: RanOptions;
optionsAssist:
random: RanOptions;
assist:
| "AUTO SCRATCH"
| "5KEYS"
| "LEGACY NOTE"
@@ -789,8 +833,8 @@ interface IIDXSPScoreMeta {
| "ASCR + LEGACY"
| "5KEYS + LEGACY"
| "FULL ASSIST";
optionsRange: "SUDDEN+" | "HIDDEN+" | "SUD+ HID+" | "LIFT" | "LIFT SUD+";
optionsGauge: "ASSISTED EASY" | "EASY" | "HARD" | "EX-HARD";
range: "SUDDEN+" | "HIDDEN+" | "SUD+ HID+" | "LIFT" | "LIFT SUD+";
gauge: "ASSISTED EASY" | "EASY" | "HARD" | "EX-HARD";
// oh my
pacemaker:
| "NO GRAPH"
@@ -825,7 +869,7 @@ interface IIDXSPScoreMeta {
}
interface BMS7KScoreMeta {
optionsRandom: RanOptions;
random: RanOptions;
inputDevice: string;
}
@@ -834,7 +878,7 @@ interface ScoreMetaLookup {
"iidx:DP": IIDXSPScoreMeta & { optionsRandom: [RanOptions, RanOptions] };
"popn:9B": Record<string, never>;
"sdvx:Single": Record<string, never>;
"usc:Single": BASE_VALID_HIT_META & { gauge: number };
"usc:Single": Record<string, never>;
"ddr:SP": Record<string, never>;
"ddr:DP": Record<string, never>;
"maimai:Single": Record<string, never>;