コンテンツにスキップ

Cassiopeia

Cassiopeia は haneoka.org の譜面プレーヤーと譜面ビューアーを支えるリズムゲームエンジンです。カーネルは譜面を読み、時間を整数ミリ秒で管理し、各タッチがどのノーツに対応するかを決め、判定とスコア計算を行い、フィーバー区間、スキル、コンボをイベントとして通知します。描画も音の再生もせず、それはプラグインが担うため、同じカーネルで Web プレーヤー、譜面の全体表示、Sonolus のレベル、ネイティブアプリを動かせます。

カーネルは TypeScript 版と Rust 版(WebAssembly とネイティブの Android・iOS ホスト向け)があり、同じ入力に対して同じ結果を返します。

パッケージ役割
@haneoka/cassiopeiaカーネル、プラグインランタイム、WebAssembly とネイティブのバインディング
Our Notes プラグインOur Notes の譜面、判定タイミング、スキン、エフェクト
Sekai プラグイン表示用のプロジェクトセカイ SUS 譜面
Three.js レンダラー3D のステージ、ノーツ、エフェクト、HUD
Web ホストブラウザーでのオーディオクロック、ノーツ音、ポインター入力
Vue UIChartPlayer と ChartOverview コンポーネント
Sonolus 変換譜面を Sonolus のレベルデータと USC に変換
Terminal window
pnpm add vue @haneoka/cassiopeia @haneoka/cassiopeia-plugin-our-notes \
@haneoka/cassiopeia-renderer-three @haneoka/cassiopeia-host-web @haneoka/cassiopeia-ui-vue
<ChartPlayer :chart="chart" :assets="assets" audio-url="/songs/101.mp3" mode="watch" @ready="player.play()" ref="player" />

mode="watch" は自動再生、mode="play" はタッチやマウスで実際に遊べます。プレーヤーは判定、コンボ、フィーバーのイベントを発行し、音声ではなく自前のクロックに従わせることもできます。エディターや動画書き出しはこの方法で同期を取ります。ChartOverview は譜面全体を縦長の 1 枚のキャンバスに描き、コンボ数、BPM の変化、フィーバー区間、スキルの時間帯を表示します。

何もインストールせずに haneoka.org の譜面を表示するには、Cassiopeia の埋め込みを使います。

import { CassiopeiaRuntime, createKernelPlugin, CASSIOPEIA_SESSION } from "@haneoka/cassiopeia/plugin";
import { createOurNotesPlugin, OUR_NOTES_RULES } from "@haneoka/cassiopeia-plugin-our-notes";
const runtime = new CassiopeiaRuntime([createKernelPlugin(), createOurNotesPlugin()]);
const chart = runtime.require(OUR_NOTES_RULES).parse(source);
const session = runtime.require(CASSIOPEIA_SESSION).create(chart, { mode: "play" });
session.on("judgement", (event) => console.log(event));
session.tap(lane, audioTimeMs);
const { score, combo } = session.update(audioTimeMs);

セッションは tap、release、flick、trace の入力を受け取り、ポインター ID は任意です。update はスコア、コンボ、ライフ、フルコンボ状態のスナップショットを返します。独自のゲーム、スコアシミュレーター、譜面分析ツールを作るにはこれで十分です。

Our Notes の譜面は Sonolus アプリで遊べます。変換プラグインが譜面を Sonolus のレベルデータに変換し、Sonolus エンジンが Our Notes の判定とエフェクトで再生します。haneoka.org は全譜面を載せた Sonolus サーバーを運営しています。

Cassiopeia リポジトリの README がカーネル API、プラグイン、ネイティブバインディングを、各パッケージの README がそれぞれのオプションを説明しています。