beasty-visual-novel / changelog.md
Changelog
All notable changes to Beasty Visual Novel. This project follows Semantic Versioning.
1.0.1 — 2026-08-14
Story authoring
- Fixed: the
.vnbeastytext editor and its Syntax cheat-sheet no longer spamNullReferenceExceptionon projects using UI Toolkit’s Advanced Text Generator — the default text backend of new Unity 6000.3+ projects. Colors and the overlay’s glyph alignment are unchanged.
1.0.0 — 2026-08-13
First public release.
Demos
- House Demo sample at
Demos/HouseDemo: a complete mini-game covering the intro flow, FreeRoam with two connected rooms, day/night backgrounds, a weekly NPC routine, a two-step quest, a talk menu, character screens, save/load and live English/Spanish switching. All art ships as labeled placeholder PNGs underBeastyVN/Sprites/— replace each file (same name) with final art. - House Demo: sleeping in the bed advances time, the bed swaps to a night art variant, and the bedroom door lights up on hover.
Story authoring
- Node graph (dialogue, choice, decision, subgraph, flow) with a block-based editor.
.vnbeastytext script: write scenes as a Ren’Py-like script, kept in two-way sync with the graph. The graph stays the source of truth, and a destructive import leaves a timestamped.bak.- In-editor preview of any node, up to any block.
- The text format has 1:1 parity with the graph — everything the nodes can express is writable in text.
- A node header leads with its type keyword:
label,choice,decision,subgraph,return,talkmenu,flow. - Dotted variables work everywhere in text:
ana.afecto,item.<id>counts and@time:/@quest:/@char:keys, in conditions and effects alike. - Item counts start at
0: a new game seedsitem.<id>for every item in the catalog. - Typos warn at import: unknown variable, item, quest, objective and screen names get a warning with their line number.
- The text editor’s autocomplete offers the full variable catalog, node keywords, labels, portrait keys and anchors, and the Text tab ships a Syntax cheat-sheet.
- A
Waitblock holds the flow for its seconds before the next line appears; a Wait of0seconds is an auto-advance barrier. - Story graph nodes can be copied, cut, pasted and duplicated across windows and scene assets, minting new localization keys so editing a copy never edits the original.
- “Save & apply” in the Text view is undoable in one step, and so are “Format”, linking and unlinking a script.
World
- Free-roam rooms with conditional backgrounds, doors and interactables.
- Game time (dayparts or clock), character routines with profiles, and a routine grid editor.
- Quests with stages, objectives, rewards and a talk-menu hub per character.
- Doors, objects and poses can be deleted from the room timeline — prefab child included — in one undo step.
- Routine profiles can be deleted, and a completely empty character routine is pruned from the map graph automatically.
- A character’s whole talk menu can be deleted, with confirmation and undo.
Presentation
- Dialogue, choices, backlog, history, save/load, preferences and help screens, all localizable.
- Localization tables with per-cell staleness tracking and CSV/TSV import and export.
- Languages are added from a dropdown of 15 curated languages plus
Custom…; adding a curated one pre-fills the built-in UI strings in that language. - Deleting a language asks for confirmation and moves it to a restorable Deleted languages trash instead of destroying its texts.
- Deleting the MAIN language promotes the next one; language operations apply to the story table and the global UI table together.
- A line with no translation in the active language shows the source-language text instead of a blank.
- Bake Localized UI Labels: permanently adds
VNLocalizedTextto every matching label in the scene, writing into the source prefabs. - The
VNLocalizedTextinspector can create a freshui.*key from a label’s text with one button. - The
VNLocalizedTextinspector also edits the key’s source-language text in place, with “From label”/“To label” sync buttons. - Switching language in-game changes menus and HUD too: at boot, labels matching a built-in UI default are retro-fitted automatically.
- The Story window follows language changes — delete, restore, rename — immediately.
- The global UI localization table heals itself: setup and Repair passes adopt an unassigned table, and only create a fresh one when none exists.
- A typed variable prompt renders the input its type calls for (a Bool shows a true/false dropdown).
- Background music is configured per mode (main menu, visual novel, free-roam, custom); an empty queue means silence in that mode.
- Optional Addressables streaming of node assets (beta).
Saving
- New top-level Saving section in the BeastyManager Inspector: backend, save location, encryption, thumbnails and the global save policy in one place.
- Cloud storage backends (Beasty Save System 1.1 Firestore / Realtime Database modules) are supported end to end. Requires the Firebase SDK; without it nothing changes.
- With a cloud backend, slot thumbnails travel inside the save and rebuild the local cache on any device.
- Save-slot thumbnails no longer show the pause menu: the screenshot is taken before it draws.
- The Saving section mirrors the Save System’s grouping and adds per-project data path, backup, strict loading and data version settings.
Persistence
- Slot saves with thumbnails, autosaves, backups, and optional encryption.
- Scene-object state (
BeastySaveable) rides inside the save.
Logging
- Every VN log goes through
VNLog, tagged with a category, so a noisy subsystem can be silenced without silencing the rest. VNLog.Enabledis on in the editor and development builds and off in a release build; warnings, errors and exceptions always pass.- The package bundles Beasty Save System and has no external dependencies. Beasty Console is not included: it is its own asset, and optional.
- Beasty Console is reached by reflection, never by assembly reference: the VN compiles and runs with or without it.
Editor
- Undo behaves like one step per gesture in the Story graph, the room timeline and Auto-wire / Repair.
- The internal test assemblies compile only when the
BEASTY_DEV_TOOLSscripting define is set.
Licensing
- The package ships no license file of its own: Asset Store copies are licensed under the Asset Store EULA; itch.io copies get their own license file at packaging time.
Compatibility
- Compiles on every Unity 6 generation, including 6.5’s
GetInstanceIDdeprecation (the package callsGetEntityIdon 6.4+). - Imports with no deprecation warnings on Unity 6.4/6.5, with behavior unchanged.
- Unity 6.2/6.3 import warning-free too (the one early-flagged API keeps its warning suppressed at the call site).