/shin

A reimplementation of VN engine primarily used by 07-th expansion releases on consoles (and some other entergram games)

Primary LanguageRustMozilla Public License 2.0MPL-2.0

This is an attempt at re-implementation of game engine used by some visual novels released by Entergram on Nintendo Switch, PS4 and PS Vita.

Currently known games using the engine on Switch and PS Vita are listed in this spreadsheet. PS4 was not researched yet.

If you know more - let me know! (dcnick3 on Discord)

Status

The initial implementation is focused on running switch version of Umineko no Naku Koro ni Saku ~Nekobako to Musou no Koukyoukyoku~ (title id 01006A300BA2C000), with the intention to support other games in the future.

As of writing, most of the basic game functionality works:

  • Character sprites
  • Backgrounds
  • BGM & SFX
  • Text

However, there are still a lot of missing advanced features. It's not fully playable yet.

The intent is to follow the engine as closely as possible, so that it can be used to run the original games.

screenshot.png

Try it

You can try out the engine by downloading a pre-built binary from the releases page.

Select the latest release, and download the shin archive for your platform and extract it somewhere.

Then you would need to have romfs of Umineko no Naku Koro ni Saku ~Nekobako to Musou no Koukyoukyoku~ game (title id 01006A300BA2C000).

It can be dumped from the switch using nxdumptool.

You can use hactoonet to dump the romfs from the game:

hactoolnet -t pfs0 "Umineko no Naku Koro ni Saku ~Nekobako to Musou no Koukyoukyoku~ [01006A300BA2C000].nsp" --romfs=assets

In the assets directory you should find a data.rom file. It's sha256sum should be 6d90eb0bacacf769a7e4634407622b047acd711c47debb28136d7bab3fd0e591.

You can put then put the assets directory next to the executable or another location documented here

Then you try running the game.

Controls are:

  • Mouse click, space, enter - advance text
  • Ctrl - fast-forward text
  • Escape, Q - quit
  • F3 - show overlay menu
  • F10 - resize to 1080p
  • F11 - toggle fullscreen

If you encounter any problems, please open an issue on GitHub.

Docs

While there is no comprehensive documentation of the engine, as I reverse engineer it, I try to document the findings mainly in this spreadsheet

The autogenerated docs can be found here.

What else is in the box

Aside from the game engine, this repo also includes shin-core - a library for working with the game data.

There is also sdu - a CLI interface for the shin-core library. It can be used to extract game data, and to convert it to other more conventional formats.

You can download it from the releases page.

For now, we have support for extracting the following data:

  • .rom - Game data archive
  • .bup - Character sprites
  • .pic - Backgrounds & CGs
  • .nxa - Game audio
  • .snr - Limited support for game scenario (no decompilation, only tracing the execution)
  • .fnt - Font data
  • .txa - Texture archives (used mostly for UI)

Support for other formats used is planned.

If you encounter any errors/problems when using the CLI - please open an issue on GitHub.

Building from source

To build from source you would need to have Rust installed.

Then you can build the engine with:

cargo build --release -p shin

And run it with:

cargo run --release -p shin