MCPcopy Create free account
hub / github.com/YuriSizuku/OnscripterYuri

github.com/YuriSizuku/OnscripterYuri @v0.7.6

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.7.6 ↗ · + Follow
1,664 symbols 3,464 edges 101 files 117 documented · 7% updated 21d agov0.7.7beta · 2026-06-23★ 81512 open issues

Browse by type

Functions 1,402 Types & classes 262
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Onscripter-Yuri

GitHub releaseGitHub Workflow StatusGitHub Workflow Status GitHub Workflow StatusGitHub Workflow Status GitHub Workflow StatusGitHub Workflow Status

☘️ An enhancement ONScripter project porting to many platforms, especially web
We also support for windows, linux, mac, android, retroarch and psv. This project is base on ONScripter-Jh by SDL2.

Online Demo: lifegame, luasnow, noesis1 (lazyload)
PSV: psv-OnscripterJH
Android : Google PlayStore
Multi Platform: github action release

onsyuri_webtest_mo2

Now it supprts utf8 script with option --enc:utf8 ! As the original Onsscripter only support sjis or gbk encoding, you can aslo convert them to utf8 like iconv -f gbk -t utf8 0.txt -o 0.txt.

New features :

  • script
  • [x] lua script and animation
  • [x] English half-width text // since v0.7.4
  • [x] sjis --enc:sjis and gbk --enc:gbk script
  • [x] utf8 script --enc:utf8 // since v0.7.6
  • [x] nt2, nt3 script encryption (Mine exclusive format)
  • [x] long click or touch to invoke menu

  • render

  • [x] fullscreen by --fullscreen or alt+enter, scretch to fullscreen by --fullscreen2 or f10
  • [x] arbitary resolution --width, --height
  • [x] gles2 sharpness rendering by --sharpness 1.0 parameter, fix bugs on windows

  • platform

  • [x] windows
    • [x] x86, x64 (local or cross compile by mingw, static link)
    • [x] amd64, arm64 (local msvc, vcpkg, contributed by ryank231231)
    • [x] video by system player
  • [x] linux
    • [x] x86, x64 (local compile, static or dynamic link)
    • [x] arm, aarch64 (cross compile, SDL2 build from raspberrypi, static link)
    • [x] retroarch (contributed by iyzsong)
  • [x] mac
    • [x] x64, arm64 (local compile, contributed by yujincheng08)
  • [x] web (by emscripten)
    • [x] fs to save in indexdb
    • [x] export and import save by zip file // since v0.7.5beta5
    • [x] lazy load by ~~BrowserFS or worker~~ async fetch to avoid block the audio
    • [x] mobile web with touch, with webui menu
  • [x] android
    • [x] SDK level above 21 (android 5.1, Lolipop)
    • [x] extern SD card by SAF, and scoped storage
    • [x] non-english charactor in path
    • [x] video by system player
  • [x] psv, see psv-Onscripter

  • bugfix

  • [x] fix some bugs in origin version (can not read 00.txt problem)
  • [x] fix lua animation problem
  • [x] fix button position wrong in fulllscreen, strech fullscreen // since v0.7.5beta4
  • [x] fix android onresume gles null pointer
  • [x] fix android file stat problem (save not found)

  • develop

  • [x] clear camke project structure
  • [x] well documention for develop and usage
  • [x] scripts to compile or cross compile without pain
  • [x] vscode and android studio project for multi enviroment
  • [x] ci in github action to automaticly build
  • [x] use docker to build for all platform

1. Usage

(1) general command

You can also put these option in ons_args file.

./onsyuri --help
./onsyuri --root /path/to/game --save-dir /path/to/save --font /path/default.ttf --enc:sjis
./onsyuri --width 1280 --height 720 --sharpness=3.1
./onsyuri --fullscreen2 # fullscreen1 alt+f, fullscreen2 f10 (toggle stretch)

Usage: onsyuri [option ...]
  -h, --help            show this help and exit
  -v, --version         show the version information and exit

 load options:
  -f, --font file       set a TTF font file
  -r, --root path       set the root path to the archives
      --save-dir        set save dir
      --debug:1         print debug info
      --enc:[gbk|sjis|utf8]  change encoding of the script, default is gbk

 render options:
      --window          start in windowed mode
      --width 1280      force window width
      --height 720      force window height
      --fullscreen      start in fullscreen mode (alt+f or alt+enter)
      --fullscreen2     start in fullscreen mode with stretch (f10 to toggle stretch)
      --sharpness 3.1    use gles to make image sharp
      --no-video        do not decode video
      --no-vsync        turn off vsync

 other options:
      --cdaudio         use CD audio if available
      --cdnumber no     choose the CD-ROM drive number
      --registry file   set a registry file
      --dll file        set a dll file
      --enable-wheeldown-advance        advance the text on mouse wheel down
      --disable-rescale do not rescale the images in the archives
      --force-button-shortcut   ignore useescspc and getenter command
      --render-font-outline     render the outline of a text instead of casting a shadow
      --edit            enable online modification of the volume and variables when 'z' is pressed
      --key-exe file    set a file (*.EXE) that includes a key table
      --fontcache       cache default font

❗ If you force exit the game, the save might be damaged, try to remvoe envdata to play again.

(2) linux

You can either download the prebuild static elf from the release or build from source (see next part).

onsyuri_mo2_linuxtest

# Install with your AUR helper
yay -S onscripter-yuri
# Enable gentoo-zh overlay (use 'repository' subcommamd for 'eselect' need install 'app-eselect/eselect-repository' first):
eselect repository enable gentoo-zh
# Install onscripter-yuri:
emerge --ask games-emulation/onscripter-yuri

(3) web

This project can run in a browser through hosted web server.
Press F10 to strech full in a webpage, F11 in fullscreen, F9 | Right Click| Long Click to invoke menu.

The structure is as bellow:

onsyuri.html
onsyuri.js
onsyuri.wasm
onsyuri_index.json
[your game files]

onsyuri_mo2_webtest3

It will load the game according to onsyuri_index.json, whitch is defined by <meta onsyuri_index="onsyuri_index.json"> in onsyuri.html.

{
  "title": "game1",
  "gamedir": "/onsyuri/game1",
  "savedir": "/onsyuri_save/game1",
  "args": [],
  "lazyload": "true",
  "files":[
    {"path": "0.txt" , "url":"http://localhost:5500/asset/test/0.txt"},
    {"path": "bgm/bgm.ogg" , "url":"http://localhost:5500/asset/test/bgm/bgm.ogg"},
    {"path": "default.ttf" , "url":"http://localhost:5500/asset/test/default.ttf"}
  ]
}

This can be generated by onsyuri_index.py.

~~Futhremoe, use make_xhrfs_index > onsyuri_lazyload.json after npm i -g browserfs~~ deprecated.

(4) android

Install the apk, use 3 figures|long touch for invoke menu, 4 figures to invoke skip.
You can either put game into /storage/emulated/0/Android/data/com.yuri.onscripter/files, or any directory by saf.

onsyuri_ui_androidtest1

2. Build

(1) local windows

Install the dependency in msys2,

pacman -Syu --noconfirm
pacman -S --noconfirm make tar vim curl # util tools
pacman -S --noconfirm mingw-w64-x86_64-binutils mingw-w64-x86_64-gcc mingw-w64-x86_64-gdb # mingw64 compile tool
pacman -S --noconfirm mingw-w64-i686-binutils mingw-w64-i686-gcc mingw-w64-i686-gdb # mingw32 compile tool

pacman -S --noconfirm mingw-w64-i686-SDL2 mingw-w64-x86_64-SDL2
pacman -S --noconfirm mingw-w64-i686-SDL2_image mingw-w64-x86_64-SDL2_image
pacman -S --noconfirm mingw-w64-i686-SDL2_ttf mingw-w64-x86_64-SDL2_ttf
pacman -S --noconfirm mingw-w64-i686-SDL2_mixer mingw-w64-x86_64-SDL2_mixer

pacman -S --noconfirm mingw-w64-i686-brotli mingw-w64-x86_64-brotli
pacman -S --noconfirm mingw-w64-i686-mesa mingw-w64-x86_64-mesa
pacman -S --noconfirm mingw-w64-i686-lua mingw-w64-x86_64-lua

and then use these local_msys2mingw32.sh or local_msys2mingw64.sh to build.

cd script
chmod +x *.sh
sh -c "export BUILD_TYPE=Debug && export MSYS2_HOME=/path/to/msys2 && ./local_msys2mingw32.sh"

(2) local linux

Install the dependency

# linux64
sudo apt-get update
sudo apt-get -y install gcc gdb make cmake git curl
sudo apt-get -y install libsdl2-dev libsdl2-ttf-dev libsdl2-image-dev libsdl2-mixer-dev
sudo apt-get -y install libbz2-dev libjpeg-dev libpng-dev
sudo apt-get -y install liblua5.3-dev libgl1-mesa-dev

# linux32
sudo dpkg --add-architecture i386 
sudo apt-get update
sudo apt-get -y install gcc-multilib g++-multilib 
sudo apt-get -y install libsdl2-dev:i386 libsdl2-ttf-dev:i386 libsdl2-image-dev:i386 libsdl2-mixer-dev:i386
sudo apt-get -y install libbz2-dev:i386 libjpeg-dev:i386 libpng-dev:i386
sudo apt-get -y install liblua5.3-dev:i386 libgl1-mesa-dev:i386
cd script
chmod +x *.sh
sh -c "export BUILD_TYPE=Debug && ./local_linux32.sh"

and then use local_linux32.sh or local_linux64.sh to build.

(3) cross web

Install emsdk and use cross_web.sh to build.
You need to add $EMSDK_HOME and $MSYS2_HOME (if windows) user variable at first.

cd script
chmod +x *.sh
sh -c "BUILD_TYPE=Debug EMCSDK_HOME=/path/to/emsdk ./cross_web.sh"

(4) cross linux

Install the dependency for cross compiler,

# install in the target machine, aarch64
sudo apt-get -y install libx11-dev libxext-dev libasound2-dev 
sudo apt-get -y install libgl1-mesa-dev mesa-utils

# install in the target machine, armhf (if you want to run armhf in aarch64)
sudo dpkg --add-architecture armhf && sudo apt-get update
sudo apt-get -y install libc6:armhf 
sudo apt-get -y install libx11-dev:armhf libxext-dev:armhf libasound2-dev:armhf 
sudo apt-get -y install libgl1-mesa-dev:armhf mesa-utils:armhf

# install in the local machine
sudo apt-get -y install tar make cmake curl git
sudo apt-get -y install crossbuild-essential-i386
sudo apt-get -y install crossbuild-essential-x86_64
sudo apt-get -y install crossbuild-essential-armhf
sudo apt-get -y install crossbuild-essential-arm64

then use cross_linuxa64.sh or cross_linuxa32.sh, cross_linux32.sh, cross_linux64.sh to compile.

onsyuri_mo2_linuxtest2.png

For raspberrypi or the other arm64 devices cross compiling. As there are many system bindings in SDL2,
just build libraries in the target machine, and use these build cache to link.
Or you can use docker_linuxarm64.sh for cross compile.

# at first build sdl2 in raspberry pi
sh -c "export SYSROOT=/ && ./local_linux64.sh"

# copy prebuild of dependency to local
cp -rf /path/to/rpi/OnscripterYuri/thirdparty/build/arch_aarch64 thirdparty/build/arch_aarch64

# use SKIP_PORTS to skip thirdpart builds
cd script
chmod +x *.sh
sh -c "export BUILD_TYPE=Debug && export SKIP_PORTS=yes && ./local_linux64.sh"

(5) cross mingw

Install mingw cross compiler and tools,

in debian or wsl2,

sudo apt-get -y install tar make cmake curl git
# use pkg-config is to find sdl2 by compiling sdl2_image, do not install mingw-w64-tools, this pkg-config is broken
sudo apt-get -y install mingw-w64 zstd pkg-config 

in msys2,

pacman -Syu --noconfirm
pacman -S --noconfirm make tar vim curl # util tools
pacman -S --noconfirm mingw-w64-x86_64-gcc mingw-w64-x86_64-gdb
pacman -S --noconfirm mingw-w64-x86_64-binutils mingw-w64-x86_64-pkg-config
pacman -S --noconfirm mingw-w64-i686-gcc mingw-w64-i686-gdb
pacman -S --noconfirm mingw-w64-i686-binutils mingw-w64-i686-pkg-config

then use cross_mingw32.sh or cross_mingw64.sh to com

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

Shape

Method 1,202
Class 232
Function 200
Enum 29
Interface 1

Languages

C++72%
Java26%
C1%
Python1%

Modules by API surface

src/onsyuri/ONScripter_command.cpp192 symbols
src/onsyuri_android/app/java/org/libsdl/app/SDLActivity.java134 symbols
src/onsyuri_libretro/libretro.h94 symbols
src/onsyuri/ScriptParser_command.cpp93 symbols
src/onsyuri/ScriptHandler.cpp70 symbols
src/onsyuri/LUAHandler.cpp69 symbols
src/onsyuri_android/app/java/org/libsdl/app/SDLControllerManager.java68 symbols
src/onsyuri/ONScripter.cpp60 symbols
src/onsyuri_android/app/java/org/libsdl/app/HIDDeviceBLESteamController.java52 symbols
src/onsyuri_libretro/libretro.cpp41 symbols
src/onsyuri_android/app/java/org/libsdl/app/HIDDeviceManager.java41 symbols
src/onsyuri_android/app/java/com/yuri/onscripter/MainActivity.java37 symbols

For agents

$ claude mcp add OnscripterYuri \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page