Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 15 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,21 @@

All notable changes to this package. Versions follow [Semantic Versioning](https://semver.org/).

## Unreleased

### Story products

- Story loading, playback and authoring use `nnnotes.product/1` manifests with shared object resources and language-specific UI and fonts.
- Home and live-result stories resolve their host prefabs, room geometry, Spine materials and animation bindings by object identity.
- Data validation checks the story product graph, font bindings, shader variants, audio files and model dependencies. `--lang` selects an explicit language scope.
- Node story loading accepts a manifest or a product layout containing exactly one story.

### Bug fixes

- Keep Spine index uploads from changing another renderer's vertex array.
- Keep model and shared-object validation caches independent.
- Clear loading text after language changes and display configured audio volumes in the controls.

## [0.1.7](https://github.com/empty-sekai/ournotes-player/compare/v0.1.6..v0.1.7) — 2026-10-14

### Features
Expand Down Expand Up @@ -159,5 +174,3 @@ All notable changes to this package. Versions follow [Semantic Versioning](https
- add performance.md: the CPU cost of a frame
- a file holds each controller and clip once; the validator checks every reference _(story)_



6 changes: 6 additions & 0 deletions docs/data-format.md
Original file line number Diff line number Diff line change
Expand Up @@ -965,3 +965,9 @@ exactly the files the viewer and the story player read.

It needs Node.js 22 or later and no dependencies. The opt-in data tests (`OURNOTES_DATA=<dir> npm run test:data`) go
further and run lives and charts through the player in Node (see [CONTRIBUTING.md](../CONTRIBUTING.md)).

## Song and replay data

The song catalog example reads `music-data.json` with format `nnnotes.music-data/1`. Replay presets read
`nnnotes.deck-data/1` for the caller-provided deck capabilities, and the replay worker accepts
`nnnotes.replay-manifest/1` references. These are separate inputs from the live, model and story product manifests.
1 change: 0 additions & 1 deletion docs/fidelity.md
Original file line number Diff line number Diff line change
Expand Up @@ -528,7 +528,6 @@ Every `ENGINE:` note in `src/`, by file. `npm test` checks that this list matche
- the ambient probe of a Flat ambient is built natively from the ambient colour; a white Flat ambient is taken as
- the default reflection of a Skybox-mode scene without a skybox material (and without a custom cube) is taken
- unity_LightData (native per-object light data): x the offset of the per-object light indices (0), y their
- atlas page texture import settings are not in the data; bilinear, clamped, no mipmaps here.
- a Skybox clear without a skybox material clears to the background colour.

**`src/story/simple/home/room.js`**
Expand Down
13 changes: 7 additions & 6 deletions docs/story-author.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ The tool is experimental: the script format and the commands may change between
## Requirements

- Node.js 22 or later.
- A story site with stories in the model manifest format (`ournotes.story-manifest/2`) and its `models.json`
- A story site with stories in the story product format (`nnnotes.product/1`) and its `models.json`
([story-data-format.md](story-data-format.md)). Pass it with `--site <dir>` or set `OURNOTES_SITE`.
- For pictures (`render`, `base --out`, `model --out`): Chrome, Chromium or Edge. The tool starts a headless browser
of its own with a temporary profile and ends it when the command ends. It draws with SwiftShader (WebGL2 on the
Expand Down Expand Up @@ -181,10 +181,11 @@ long auto mode then keeps the line before the next one (`_waitTalkTextUnitTime`

### build

`build <script> --name <name>`: writes the story into the site as `custom-stories/<name>.json`, a story manifest of
format `ournotes.story-manifest/2` (advId 0, the script's language only), and adds its own files to `assets/`: the
compiled `story.json`, `episode.json` and `ui/fonts.json`. Every other file is the base story's or a model's, already
in the site. A script with errors is not built.
`build <script> --name <name>` writes `custom-stories/<name>.json`, a `story` product manifest
(`nnnotes.product/1`, subject `0`) for the script's language. It adds the compiled `story.json`, `episode.json` and
browser-font `fonts.json` to `assets/`, plus a content-addressed font product manifest under `storyfonts/`.
The part index refers to the base story's reusable scene, UI, stages and cue sheets, and the cast's model manifests.
A script with errors is not built.

### serve

Expand Down Expand Up @@ -278,7 +279,7 @@ Codes with a known fix are listed under [Fixes](#fixes).
The tool compiles a script into the story player's data ([story-data-format.md](story-data-format.md)): an
`episode.json` of the game's command rows (Character, Stage, Bgm, In, Out, Focus, FadeOut, FadeIn, Location, Motion,
Expression, Talk) with the texts in its text table, a `story.json` naming the models and the music it plays, and the
base story's `ui/fonts.json` with every font asset drawn by the browser
base story's font product with every font asset drawn by the browser
([browser fonts](story-data-format.md#browser-fonts)): every character of the font family shows, laid out by
TextMeshPro's rules with the base story's font settings. The other files (stages, talk window, shaders, the player
settings, the music) are the base story's; the media of its own rows (frames, stills, effects, chat, videos) are left
Expand Down
Loading
Loading