ドキュメント
ゲームをダウンロードし、レベル一覧を開いて好きなレベルをプレイします。自分で作るには、エディターでレベルを作成し、そのフォルダーに1〜2分のトラックを入れます
ゲームの不具合はreleasesのissuesへ、質問はDiscordへ送ってください。設定画面のバージョン文字列と、不具合が起きるまでの手順を添えてください
プレイする前に、レベルがあなたのデバイスでどれだけ重いかを、ゲームが5本のバーのゲージで表示します:点灯しているバーが多いほど、レベルは軽くなります。緑のバーは快適に動作、黄はぎりぎり、赤はフレームレートが落ちることを表します
エディターはゲームに組み込まれていて、別途インストールするものはありません。エディターでのレベルは音楽トラックとファイルの入ったフォルダーで、空の状態から公開できる状態まで仕上げていきます
レベルはファイルの入ったフォルダーです。最初のレベルは6ステップで作れ、エディター全体は6つの考え方の上に成り立っています:オブジェクト、フレーム、スパン、レイヤー、親、キーフレーム
レベルはディスク上の普通のフォルダーです:レベルファイル、メタデータ、レベルが使うすべてのもの。Jsonで作り、フォルダーのコピーとして渡します。インストールするものはありません
最初のテストプレイまでは6ステップです:レベルを作成する、音楽トラックを追加する、リズムを設定する、オブジェクトを置く、テストプレイする、保存する
オブジェクト、フレーム、スパン、レイヤー、親、キーフレーム:エディター全体はこの6つの考え方の上に成り立っています
レベルは画面のフレームではなく独自のフレームで時間を数えるので、どのハードウェアでも同じようにプレイされます。レベルの長さは作者が決め、fpsはデフォルトの60のままにしておくのが最適です
キーフレームは、1つのトラックの1つのフレームでの値と、その値に到達するまでのイージングです。レベル内で動くもの、色が変わるもの、オンとオフが切り替わるものは、すべてキーフレームのリストです
最小限のレベルは曲1つです。画像とフォントは自分で用意し、すべてレベルフォルダーに置きます
最低限必要なのは曲1つです。それ以外はすべて任意で、ほとんどは自分で用意します
曲はoggに変換してください:wavの8-10分の1の容量で、mp3と違ってファイルの先頭に無音を追加しません。ogg以外で読み込めるのはmp3とwavだけです
シェイプで済むならシェイプを使ってください:ファイルもメモリ消費も権利の問題もありません。画像は画面上の表示サイズに合わせ、モバイル向けレベルでは2048、全体でも4096を超えないようにします
レベルはゲームフォルダー内のlevelsにある専用フォルダーに置かれます。レベルが使うファイルの名前は変えないでください。完全なバックアップとはレベルフォルダーのコピーのことです
公開するレベルに入れてよいのは、CC BY-NCより厳しくないオープンライセンスのファイルか、作者の許可を得たファイルだけです。自分用のレベルなら何からでも作れます
曲は、オープンライセンスがCC BY-NCより厳しくないか、作者がレベルでの使用を直接許可していれば使えます。YouTube、SoundCloud、Spotifyの曲には作者の許可が必要です
リソースが条件を満たすのは、適切なライセンスがあるか、権利者の許可がある場合です。3つ目の道はありません
デフォルトで安全なのは、音楽ならccMixter、Freesound、Kenney、画像ならPoly Haven、Pexels、Unsplash、フォントならGoogle Fontsです。YouTube、SoundCloud、Spotifyからは何も取ってはいけません
記録には、リソースの出どころと条件を書きます:リンク、ライセンス、許可、作者。ライセンスのフィールドが空なら「誰も確認していない」という意味で、そのリソースは拒否されます
サービスはそれぞれ独自のルールでレベルをチェックするため、あるサービスが受け付けても別のサービスが拒否することがあります。公開をブロックするのはエラーだけで、警告ならレベルはモデレーションに回されます
テンプレートを使って作者に連絡し、1から3の項目はそのまま残して、返信を保存してください。有効なのはレベルの配布を直接認める許可だけで、個人的な使用だけの許可は数に入りません
良いレベルとは、プレイヤーが何に倒されたのかを理解でき、音楽に合わせて動けて、もう一度挑戦したくなるレベルです
プレイヤーは何に倒されたのかを理解できなければなりません。危険は危険になる前に見せ、反応に少なくとも12フレームを与え、危険を装飾よりも目立たせます
まずビートグリッドを作ります:テンポ、次にオフセット、次に小節の拍数の順です。レベルのピークは曲のピークに合わせ、ブレイクではプレイヤーに息をつかせます
プレイヤー自身の数値(すべて6_avatarと7_damageにあります)と、12〜15フレームという人間の反応時間を基準に設計します。新しいパターンは、まず安全な形で見せます
意味のある内容は画面の端に置かないようにします:画面が違えば端の位置も変わり、スマートフォンの切り欠きが弾を隠すことがあります。カメラの揺れは1小節なら効果的ですが、速い回転と急なズームは酔いを招きます
内容の色はテーマ参照で指定し、固定値の色は本当に固有のものだけに使います。ポストプロセスはピークでオンにしてまたオフに戻します。そうしないと弾の輪郭が失われます
テーマとは64色のパレットで、オブジェクトはその色をスロット番号で参照します。テーマを変えると、それを参照しているものすべてが一緒に変わります
絵はまず組み込みのシェイプで組み立て、合うものがない場所だけ自分のシェイプを描きます。光と影はひとつのベースシェイプの上に重ね、繰り返す要素はすべてプレハブにし、仕上がりはレベルの上に重ねた元の絵と照らし合わせます
扱うのはデザインではなく習慣です。レベルを作る順番、同じ作業を二度しない方法と作業を失わない方法、ボットでの確認、受け渡し、AIアシスタントとの共同制作。まずは作業の順番から始めてください
最初に曲、fps、ビートマップ、マーカー。次にシンプルなシェイプだけの骨組みと、そのテストプレイ。装飾、テーマ、エフェクトは最後です
後でまとめて変更することになるオブジェクトは、数に関係なくプレハブにします。ルールで記述できる内容はジェネレーターにします。それ以外は単にコピーしてください
最も時間を節約できるのは、コマンドパレット(Ctrl+Shift+P)、コンテンツ検索(Ctrl+F)、「位置を表示」ボタン、タイムライン上の矢印キーです。どのキーも設定で割り当て直せます
作業は自動保存、元に戻す、レベルフォルダーのコピーで守られます。レベルの完全なスナップショットになるのは、フォルダーのコピーだけです。ファイルフォーマットの変更とレベルの削除は元に戻せません
ボットはプレイヤーと同じ操作でレベルをプレイし、難しさではなく読みやすさをチェックします。レベルをクリアできることは保証しません
レベルフォルダーをzipまたはtar.gzにまとめ、パスワードが必要ならgpgで暗号化します。別のマシンでは展開したレベルをすぐにプレイでき、ゲームはこうしたアーカイブを自分で読み込めます
MCPに対応したAIクライアントは、エディターで開いているレベルを目の前で編集できます。AIのバッチ1つは元に戻す1ステップで、AIは公開、ファイルの削除、他のレベルへの上書きができません
レベルがプレイヤーのデバイスで動くかどうかは、1フレーム内のシェイプの数とオーバードローで決まります。まずレベルの予算を読み、スマートフォン向けのレベルを作るならモバイルデバイスについても読んでください
スマートフォンは1フレームにおよそ1000個のシェイプなら余裕を持って扱え、性能の低いPCなら5000〜10000個です。数よりもコストが大きいのはオーバードローです:画面全体を覆う半透明のものが、何層にも重なる場合です
スマートフォンでは指が画面を覆い、端はシステムが使います。大事なものは端から離して置き、性能の低いスマートフォンでレベルを試します:最初に負荷をかけるのは全画面の半透明です
エディターの各フィールドやボタンが何をするかを、パネル、ウィンドウ、タブごとに1ページずつまとめています。リファレンスは通して読むものではありません。検索や記事のリンクからここに来ます
プロジェクトの主要な用語の一覧です。ゲームのインターフェース、このドキュメント、Bullet Heroに関するほかのすべての文章がこれらの言葉を使います。新しい用語はまずここに追加します
メタデータはレベルの表紙です:名前、説明、画像、作者、年齢レーティング、難易度、内容に関する注意書き。今のところ、レベルはフォルダーのまま、またはSteamワークショップを通じてほかの人に渡します
タイムラインはレベルを時間に沿って表示します:オブジェクト、選択中のオブジェクトのキーフレーム、プレハブのテンプレート、オーディオ、イベント。ビートグリッドを使うと、これらすべてを音楽に合わせて配置できます
ヒエラルキーは、現在のフレームのオブジェクトを親ごとに並べたツリーです。タイムラインごとに専用のクリップボードバッファーがあり、コマンドパレットはエディターのどの操作も名前で見つけます
オブジェクトインスペクターは選択中のオブジェクトのフィールドを、キーフレームインスペクターは選択中のキーフレームを編集します。キーフレームは、選択が関わるすべてのトラックで同時に編集されます
エフェクトはVFX Graphのパーティクルで、パラメーターはモジュールに分かれています:パーティクルの数、放出位置、動き方、色とサイズ。インスペクターまたはエフェクトエディターで編集します
オーディオトラックの音はエフェクトのチェーンを通ります:ノーマライズやコンプレッサーからエコーやリバーブまで、全部で11種類です。チェーン、速度、音量はオーディオトラックのインスペクターで設定します
ジェネレーターは内容を作成し、1回の操作でレベルに適用します。その操作は1ステップで元に戻せます。どのジェネレーターもツールバーの「ジェネレーター」ウィンドウから実行します
モディファイアーはレベルにすでにあるものを変更します:内容の除去、fpsの再計算、プレハブのフラット化、キーフレームの量子化、スパンのフィットとずらし。1回の実行は1ステップで元に戻せます
レベル自体に属するものはすべてここで設定します:長さ、fps、シード、向き、メタデータ、公開。レベルの起動、ルールに照らした検証、コピーからの復元もここで行います
レベルのテクスチャ、シェイプ、テーマ、エフェクト、プレハブはレベルのフォルダーに入っていて、レベルと一緒に移動します。各リソースには、出典、ライセンス、作者を記したカードがあります
プレハブモードではテンプレートを編集し、保存するとその編集がテンプレートのすべての配置に反映されます。配置のインスペクターにある「プレハブを編集」ボタンで入り、Ctrl+Shift+Eでレベルに戻ります
エクスポートは、レベルが使うすべてのファイルと一緒に、レベルをゲームの外にフォルダーかアーカイブとして保存します。パスワードはディスク上のレベルの内容を暗号化し、忘れたパスワードは復元できません
自動保存、グリッド、選択、ギズモ、新しいレベルのプリセットはここで設定します。自動保存はデフォルトでオンで、編集から60秒後に実行されます
ヒエラルキー、インスペクター、タイムラインはビューポートの周りにドッキングされています。パネルの端にあるハンドルをクリックすると開閉し、ドラッグすると幅が変わります
コレクションには、複数のレベルで再利用するリソースを保存します。レベルがコレクションを参照することはありません:インポートでリソースがレベル内にコピーされるので、レベルはどこでもプレイできます
レベルを送れるのは、レベル設定の「公開」タブからだけです:アーカイブとして、またはSteamワークショップへ送ります。レポートがレベルを自動でチェックし、エラーがあると送信できません
エディターは、コンピューターにインストールされたffmpegを使って、開いているレベルを動画ファイルにレンダリングします。レンダリングはオフラインで1フレームずつ行われるので、マシンがどれだけ遅くても動画は正確です
SDKは、Bullet HeroのレベルフォーマットをオープンなC#ライブラリにしたものです。ゲームはこれを通じてレベルを読み書きしており、独自のプログラムからも同じことができます
SDKはnuget.orgのBulletHero.SDKパッケージとして入手するか、ソースからビルドします。Unityにはgit submoduleとして組み込み、ConsoleSmokeサンプルで手元のレベルが読めることを確認できます
レベルはフォルダーです:中身はlevel.jsonまたはlevel.blob、メタデータはmetadata.jsonまたはmetadata.blob、それにカバーとメディアファイル。バックアップ、記録、プレイヤーの設定はデバイスに残ります
レベルはフォルダー、tar.gz、zipとしてエクスポートでき、パスワードもかけられます:AES-256のzipかOpenPGPです。受け取ったファイルのフォーマットは、SDKが名前ではなく先頭のバイトで判定します
バージョンは3つあります:ゲームのgv、SDKのsv、モデルフォーマットの世代を表すmgです。SDKはmgを見て、古いファイルはマイグレーションし、ビルドより新しい世代のファイルは読み込みを拒否します
検証はValidationFacadeを通じて自分で呼び出すもので、保存や読み込みには組み込まれていません。問題はError、Warning、Adviceに分かれ、ValidateAndFixは直せるものを修正します
サービスは、受け付けるレベルの条件をPublishProfileファイルで記述します:ライセンス、リソースの入手元、必須フィールド、サイズの上限。サービスを追加するにはファイルを書けばよく、アナライザーを編集する必要はありません
Bullet Heroは無料の、リズムゲームと弾幕シューティングのハイブリッドです。アカウントは不要で、サーバーはまだありません。レベルはプレイヤーが内蔵エディターで作り、フォルダーかアーカイブで受け渡します
ノート
私はAIを使っていますし、使う価値があると考えています。ただし正しく使うことが条件です:私が成果をチェックする道具として使い、私の代わりに考えるものとしては使いません。考えなしに使うと、正しそうに見えて実は正しくないテキストやコードを大量に生み出します
Bullet Heroは無料で、WindowsとAndroidで動き、SDK、ドキュメント、ビルドはオープンです。コアはスマートフォンでも画面上の数千のオブジェクトを処理し、8000を超えるテストでカバーされています
質問、フィードバック、自作のレベルはDiscordへ。ドキュメントの間違いの修正、翻訳の追加、バグの報告、レベル作りなど、誰でもゲームに協力できます
雑談と質問はDiscordへ、動画はYouTubeへ、ゲームのバグはbullet-hero/releasesリポジトリのissuesへ。ソースコードはGitHubのbullet-heroオーガニゼーションにあります