Six things, all found by using the deployed page.
**The icons were never images.** `everness.info/...` answers 200 with
`content-type: image/webp` for paths that do not exist, returning the SPA's
HTML shell, so all 72 downloaded "icons" were HTML documents named .webp and
every character silently rendered as initials. The assets live on
`api.everness.info/data/assets` instead, and the fetcher now verifies RIFF/WEBP
magic bytes and fails the build rather than warning. 95 files: 23 avatars at
256px, 23 portraits, 49 Arc icons.
**Stats read as the game writes them.** `prune-gamedata` harvests every
`{ id_stats, name, bShowPercent }` pair out of the mirror, so "CRIT Rate" is
the game's own wording rather than someone's typing, and values render as 12.5%
instead of 0.125. Ids the mirror never names are filled in by
`domain/statlabels.ts`, each with its reason and marked derived in the UI.
Two of everness's own percent flags are overridden: it marks `HealUp` and
`DamageUpNatureBase` flat while shipping them as fractions in exactly the range
of the bonuses it does mark as percentages, which printed "Healing Bonus 0.1".
**The build is legible without hovering.** Each piece carries its legend number
and colour, and the list beside the board states shape, type, level and every
stat outright; the cartridge sits in its own box below, since it occupies no
cells. Hover-only tooltips meant the information existed but could not be
scanned or compared. Shapes are drawn from the same cell lists the solver packs
with, so an icon cannot drift from its geometry.
**Owner groups have numbers, not hashes.** "group 0000000088" told the player
nothing; groups are now numbered stably and an unnamed one links to where it
gets named.
Also: import/export moved to its own Data tab with a library summary and the
to-do list, and the layout is denser throughout.
152 tests, tsc clean, both build targets clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|---|---|---|
| data-src | ||
| public/img | ||
| src | ||
| tests | ||
| tools | ||
| .gitignore | ||
| .nvmrc | ||
| index.html | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.app.json | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| vite.config.ts | ||
| vite.single.config.ts | ||
| vitest.config.ts | ||
nte-optimizer
Caution
This repository is vibecoded. Its implementation was written with substantial AI assistance and may contain plausible-looking mistakes, unsafe assumptions, or unreviewed edge cases. Treat it with care: inspect the code, verify outputs, and run the tests before relying on it.
Gear optimizer for Neverness to Everness. Static site, no server, no account, and no runtime connection to the game.
It imports a gear snapshot produced by nte-exporter, scores the available cartridges and modules, and draws recommended builds directly onto each character's console grid.
Features
- Single-character optimization with Prydwen targets or custom targets and weights.
- Cartridge set and 2-piece/4-piece bonus selection.
- Arc stats, refinements, conditional-effect controls, and explicit notices for effects the model cannot score.
- Team optimization against one shared item pool without assigning an item twice.
- Console-grid layouts with module placement and enough item detail to find each piece in game.
- Local equipment tracking, Equip/Undo, and import refreshes from game truth.
- Predicted-versus-measured character sheet comparison.
- Hosted build plus a single-file offline build.
All account data stays in the browser. Nothing is uploaded by the app.
Running locally
npm ci
npm run dev
Useful checks and builds:
npm test
npm run check:guides
npm run build # hosted build in dist/
npm run build:single # standalone dist/nte.html
The standalone build works over file://. Browser restrictions disable workers, IndexedDB, and bundled artwork there; the app falls back to inline solving and localStorage or memory.
Model boundaries
This is a stat-target optimizer, not a damage simulator. It has no rotation or ability-multiplier model.
- Targets are floors. Published substat rankings determine their relative weights.
- Timed bonuses are reported but not scored without defensible uptime data.
- Shield strength, enemy resistance, ally-only buffs, and other unsupported quantities are marked unmodellable instead of mapped onto a different stat.
- Level-80 base-stat scaling remains unmeasured, so dependent sheet values are shown as unavailable.
- “Proven” means optimal for one packing and cartridge, not globally optimal across every internal beam-search choice.
Project layout
| Path | Contents |
|---|---|
data-src/ |
Source classifications, cartridge bonuses, and guide data. |
tools/ |
Data validation, generation, benchmarking, and build scripts. |
src/domain/ |
Pure stat, board, cartridge, Arc, and scoring logic. |
src/solver/ |
Worker-safe single-character and team solvers. |
src/db/ |
Import validation and local persistence. |
src/ui/ |
React interface. |
tests/ |
Domain, solver, persistence, and integration checks. |
src/domain/ and src/solver/ stay free of DOM, storage, and UI imports so the same logic runs in tests, inline, or in a Web Worker.