initial hardcore tables

This commit is contained in:
Your Name
2026-06-13 17:43:19 -04:00
parent 2d48838fe6
commit 30fc283aa0
6 changed files with 88195 additions and 33 deletions
+20 -11
View File
@@ -4,15 +4,20 @@ import re
from pathlib import Path
NEWSERV = Path.home() / ".local/share/github/psopeeps-newserv"
OUT = Path("site/generated/drops/peeps")
PEEPS_OUT = Path("site/generated/drops/peeps")
HARDCORE_OUT = Path("site/generated/drops/hardcore")
TABLES = {
PEEPS_TABLES = {
"v1": NEWSERV / "system/tables/rare-table-v1.json",
"v2": NEWSERV / "system/tables/rare-table-v2.json",
"v3": NEWSERV / "system/tables/rare-table-v3.json",
"bb": NEWSERV / "system/tables/rare-table-v4.json",
}
HARDCORE_TABLES = {
"bb": Path("source-drops/hardcore/rare-table-v4.json"),
}
def strip_json_comments(text):
out = []
in_str = False
@@ -142,23 +147,23 @@ def flatten_table(version, table):
return rows
def main():
OUT.mkdir(parents=True, exist_ok=True)
def write_group(mode, label, tables, out_dir):
out_dir.mkdir(parents=True, exist_ok=True)
index = {
"mode": "peeps",
"label": "Peeps",
"mode": mode,
"label": label,
"tables": [],
}
labels = {"v1": "V1", "v2": "V2", "v3": "V3", "bb": "BB"}
for version, src in TABLES.items():
for version, src in tables.items():
table = load_newserv_jsonish(src)
rows = flatten_table(version, table)
out_name = f"{version}.json"
out_path = OUT / out_name
out_path = out_dir / out_name
out_path.write_text(json.dumps(rows, indent=2, sort_keys=True) + "\n")
index["tables"].append({
@@ -168,11 +173,15 @@ def main():
"rows": len(rows),
})
print(f"{version}: {len(rows)} rows -> {out_path}")
print(f"{mode} {version}: {len(rows)} rows -> {out_path}")
index_path = OUT / "index.json"
index_path = out_dir / "index.json"
index_path.write_text(json.dumps(index, indent=2, sort_keys=True) + "\n")
print(f"index -> {index_path}")
print(f"{mode} index -> {index_path}")
def main():
write_group("peeps", "Peeps", PEEPS_TABLES, PEEPS_OUT)
write_group("hardcore", "Hardcore", HARDCORE_TABLES, HARDCORE_OUT)
if __name__ == "__main__":
main()
+28 -21
View File
@@ -51,7 +51,8 @@
}
function rareModifierEnabled() {
return RARE_MODIFIER_VERSIONS.has(currentVersion());
const selectedMode = qs("#drops-mode")?.value || "peeps";
return selectedMode === "peeps" && RARE_MODIFIER_VERSIONS.has(currentVersion());
}
function currentRareModifier() {
@@ -306,7 +307,8 @@
if (!box) return;
const rows = sortedRows(visibleRows());
const tableLabel = state.table?.label || "Peeps";
const tableLabel = state.table?.label || "BB";
const groupLabel = state.table?.groupLabel || "Peeps";
const totalPages = Math.max(1, Math.ceil(rows.length / state.pageSize));
state.page = Math.min(Math.max(1, state.page), totalPages);
@@ -343,7 +345,7 @@
box.innerHTML = `
<div class="drops-summary">
<div>
<strong>Peeps ${esc(tableLabel)} drop table</strong>
<strong>${esc(groupLabel)} ${esc(tableLabel)} drop table</strong>
<span>${rows.length.toLocaleString()} matching rows.${rangeText}</span>
${modifierNote}
</div>
@@ -367,24 +369,29 @@
`;
}
async function loadPeeps() {
setStatus("Loading Peeps drop tables...");
async function loadDropGroup() {
const selectedMode = qs("#drops-mode")?.value || "peeps";
const groupPath = selectedMode === "hardcore" ? "hardcore" : "peeps";
const groupLabel = selectedMode === "hardcore" ? "Hardcore" : "Peeps";
if (!state.index) {
state.index = await fetchJson("generated/drops/peeps/index.json");
setStatus(`Loading ${groupLabel} drop tables...`);
state.index = await fetchJson(`generated/drops/${groupPath}/index.json`);
if (selectedMode === "peeps") {
populateVersions(state.index);
}
const version = qs("#drops-version")?.value || "v1";
const version = selectedMode === "hardcore" ? "bb" : currentVersion();
const table = (state.index.tables || []).find((entry) => entry.version === version);
if (!table) {
setStatus("No drop table is configured for that version.", "error");
setStatus(`No ${groupLabel} drop table is configured.`, "error");
return;
}
state.table = table;
state.rows = await fetchJson(`generated/drops/peeps/${table.path}`);
state.table = { ...table, groupLabel };
state.rows = await fetchJson(`generated/drops/${groupPath}/${table.path}`);
state.filters.mode = "";
state.filters.episode = "";
@@ -408,18 +415,18 @@
async function updateMode() {
const mode = qs("#drops-mode")?.value || "peeps";
const peepsControls = qs("#drops-peeps-controls");
const versionSelect = qs("#drops-version");
const versionLabel = document.querySelector('label[for="drops-version"]');
const v2Note = qs("#drops-v2-note");
const hardcoreNote = qs("#drops-hardcore-note");
if (mode === "hardcore") {
if (peepsControls) peepsControls.hidden = true;
setStatus("Hardcore drop tables coming next.");
return;
}
if (peepsControls) peepsControls.hidden = false;
if (versionSelect) versionSelect.hidden = mode === "hardcore";
if (versionLabel) versionLabel.hidden = mode === "hardcore";
if (v2Note) v2Note.hidden = true;
if (hardcoreNote) hardcoreNote.hidden = mode !== "hardcore";
try {
await loadPeeps();
await loadDropGroup();
} catch (err) {
setStatus(err?.message || "Unable to load drop table.", "error");
}
@@ -427,7 +434,7 @@
document.addEventListener("DOMContentLoaded", () => {
qs("#drops-mode")?.addEventListener("change", updateMode);
qs("#drops-version")?.addEventListener("change", loadPeeps);
qs("#drops-version")?.addEventListener("change", loadDropGroup);
qs("#drops-rare-modifier")?.addEventListener("change", () => {
state.page = 1;
state.page = 1;
+2 -1
View File
@@ -46,6 +46,7 @@
<option value="bb">BB</option>
</select>
<p class="drops-field-note" id="drops-v2-note" hidden>V2 drop tables apply to PSO PC only.</p>
<p class="drops-field-note" id="drops-hardcore-note" hidden>Hardcore uses the BB/V4 drop table.</p>
<div id="drops-rare-modifier-wrap" hidden>
<label for="drops-rare-modifier">Rare bonus modifier</label>
@@ -126,6 +127,6 @@
</div>
</footer>
</div>
<script src="drop-tables.js?v=drops-peeps-table-viewer-20260613-11" defer></script>
<script src="drop-tables.js?v=drops-peeps-table-viewer-20260613-12" defer></script>
</body>
</html>
File diff suppressed because it is too large Load Diff
+12
View File
@@ -0,0 +1,12 @@
{
"label": "Hardcore",
"mode": "hardcore",
"tables": [
{
"label": "BB",
"path": "bb.json",
"rows": 7200,
"version": "bb"
}
]
}
File diff suppressed because it is too large Load Diff