ページの書き方
ページは公開リポジトリbullet-hero/docsにあるMarkdownファイルです。変更はプルリクエストで届けます:フォーク、ブランチ、すべての言語での変更、スタイルガイドに沿った確認
リポジトリ
プロジェクトのリポジトリはすべてbullet-hero組織にあります。公開されているもの:
| リポジトリ | 中身 |
|---|---|
| bullet-hero/releases | releasesにはゲームのすべての公開ビルド、issuesにはプレイヤーからのゲームに関するバグ報告と要望 |
| bullet-hero/sdk | SDKのコード、issuesにはSDKに関するバグ報告と要望 |
| bullet-hero/docs | このページ群とその翻訳 |
| bullet-hero/backend | サーバー、今はまだ空 |
ゲーム(bullet-hero/game)とサイト(bullet-hero/frontend)のコードは非公開です
このページはbullet-hero/docsについてのものです
変更の送り方
- bullet-hero/docsをフォークし、ブランチを作ります
- 下で説明する形式でページを編集または追加します
- すべての言語でページを変更するか、まだ変更が必要な言語をプルリクエストに書きます。詳細:翻訳
- スタイルガイドに沿って文章を確認します
- 何をなぜ変えたかを短く説明して、プルリクエストを開きます
事実はゲーム、SDK、またはそれらのドキュメントから取ります。数字、フィールド名、ファイル名、ショートカット、アドレスを推測で書くことは決してありません。正しいか自信がないときは、ページではなくプルリクエストにそう書いてください
受け入れられた変更は、数分以内にbullethero.spaceに反映されます:masterへのpushのたびにサイトが再ビルドされます
サイトのコードは非公開なので、自分でサイトをビルドすることはできません。最も近いプレビューはObsidianです:Obsidianが見つけられないリンクは、サイトでも見つかりません
リポジトリの仕組み
- Markdownだけです。独自のビルドもスクリプトもありません
- Obsidianの保管庫です。リポジトリのルートフォルダーを保管庫として開くと、リンク、埋め込み、プレビューがサイトと同じように動きます。他のMarkdownエディターでもかまいません
- サイトのサブモジュールです。サイトはこのリポジトリを
content/フォルダーとして取り込み、ビルド時にページをコンパイルして、すべてのページを事前レンダリングします。サイトはこのリポジトリの最新のmasterからビルドされます
何をどこに置くか
| パス | 中身 | サイト上のアドレス |
|---|---|---|
<lang>/docs/1_game/ | プレイヤー向け:インストール、プレイ、設定、メカニクス | /docs/game |
<lang>/docs/2_editor/ | レベル作者向け:エディターのガイドとリファレンス | /docs/editor |
<lang>/docs/3_sdk/ | 開発者向け:オープンなSDKとレベルのフォーマット | /docs/sdk |
<lang>/docs/4_server/ | サーバー運営者向け:公式サーバーとコミュニティのサーバー | /docs/server |
<lang>/docs/5_changelog/ | 変更履歴、ゲームのバージョンごとに1ページ | /docs/changelog |
<lang>/notes/ | 記事、コミュニティ、編集のルール、公開文書とポリシー、日付順 | /notes/<name> |
<lang>/tags/ | タグのページ | /tags/<tag> |
<lang>/download.md | ダウンロードページ | /download |
assets/ | すべての言語で使う画像 | ページに埋め込まれる |
<lang>は言語のフォルダーです:en、ru、zh、zh-Hant、ja、ko、es、pt、frのいずれか。docs/、notes/、tags/、download.md以外のファイルはページになりません
ドキュメントは、今どう動くかを説明します。変更の経緯、意見、エッセイはnotes/のノートにします
ファイル名と順序
- サイドバーでの順序は
N_接頭辞で決まります。docs/の中のすべてのファイルとフォルダーに付けます:1_、2_と続き、10_以降もあります - 接頭辞はアドレスに入りません。
1_game/3_controls.mdは/docs/game/controlsで開きます index.mdには接頭辞がありません。フォルダーのランディングページです。フォルダーの位置を引き継ぎ、サイドバーのグループに名前を付けます- 順序を変えるには、ファイル名を変えます。Obsidianで「Automatically update internal links」を有効にすると、すべてのリンクを自動で直してくれます
- 接頭辞を除いた名前は、言語内で一意です。2つのファイルが同じアドレスになると、サイトのビルドがそれを報告します
- 接頭辞付きの名前は、すべての言語で同じです。
en/docs/2_editor/4_craft/3_difficulty-curve.mdとru/docs/2_editor/4_craft/3_difficulty-curve.mdは同じページです notes/には接頭辞もサブフォルダーもありません。notes/cookie-policyの名前は決して変えないでください:サイトのCookieバナーがそこにリンクしています
フロントマター、タイトル、説明文
どのページも次のように始まります:
---
title: Difficulty and the curve
date: 2026-09-24
tags: [level_author]
---
# Difficulty and the curve
One line that says what the page is, up to 200 characters, no markup
title、H1、説明文はページの言語で書きます。上の例は英語版のものです- フロントマターは
title、date、tagsです。それ以外は読まれません。YYYY-MM-DD形式のdateは、作成日ではなく最終更新日です。ファイルを編集したら、dateを編集した日にします # H1は必須で、titleと同じです。サイトはページの本文だけを表示するので、H1が目に見えるタイトルになります- H1の後の最初の段落が説明文です。一覧、検索、リンクのプレビューに使われ、200文字で切られます。リンクも書式も使わず、1行で書きます。ページに何があるかを説明するのではなく、ページの問いに短く答えます:スタイルガイド › ページの書き出し
- セクションは
##、サブセクションは###です。ここからアンカーと目次が作られます。それより深いレベルは必要ありません
対象読者のタグ
ドキュメントのページにはどれも、この一覧から1個から3個のタグを付けます。タグはsnake_caseで、#なしで書きます。サイトはタグをページ上に表示します
| タグ | サイト上の表示 | 対象 |
|---|---|---|
player | プレイヤー | 一般のプレイヤー |
advanced_player | 上級プレイヤー | メカニクスに興味があるプレイヤー |
level_author | レベル作者 | エディターでレベルを作る人 |
developer | 開発者 | SDKの上に何かを作る人、ゲームを拡張する人 |
server_host | サーバー運営者 | 自分と友人のためにサーバーを運営する人 |
server_advanced | 上級サーバー運営者 | サーバーを拡張したり書いたりする用意がある大規模なサーバー運営者 |
contributor | ドキュメント貢献者 | このリポジトリの文章と翻訳を編集する人 |
notes/のノートには、代わりにトピックのタグを付けます。今はlegal(法的文書)です
読者がタグのコードを目にすることはありません。表示名はタグのページ<lang>/tags/<code>.mdから取られます:
- その
titleが表示名 - その最初の段落が対象読者の説明
- タグの付いたページの一覧はサイトが自動で追加する
新しいタグには、すべての言語でこのようなページが必要です
本文でタグに触れるときは、そのページにリンクします:[[level_author]]。リンクには読者の言語で表示名が表示されます
リンク
| 対象 | 書き方 |
|---|---|
| 別のページ | [[3_difficulty-curve]]、接頭辞を含む完全なファイル名で |
| ページのセクション | [[3_difficulty-curve#Anchor]] |
| フォルダーのランディングページ | [[2_editor/4_craft/index]]、パス付きで。こうしたページはどれもindexという名前だからです |
| 外部サイト | [text](https://…)、スキームを含む完全なアドレスで |
リンクは言語を含まないアドレスを指すので、1つのソースがすべての言語で機能します。[[cookie-policy]]は、英語の読者を英語のページへ、ロシア語の読者をロシア語のページへ、中国語の読者を中国語のページへ、日本語の読者を日本語のページへ、韓国語の読者を韓国語のページへ、スペイン語の読者をスペイン語のページへ、ポルトガル語の読者をポルトガル語のページへ、フランス語の読者をフランス語のページへ送ります
存在するページにだけリンクしてください。サイトのビルドは、解決できなかったリンクをすべて報告します
画像
画像はリポジトリのルートのassets/に置き、![[file.png]]で埋め込みます
1つのフォルダーをすべての言語で使います。画像に描かれた文字は、ページと一緒には翻訳されません
コールアウト
| 構文 | 色 | 用途 |
|---|---|---|
> [!note]、> [!info]、> [!tip] | 青 | 背景、近道、推奨 |
> [!warning]、> [!caution] | 黄 | 時間か品質が犠牲になる、作業が失われる |
> [!danger]、> [!bug] | 赤 | 表示はされるが、スタイルガイドでは使わない |
どのコールアウトを選ぶか、そのタイトル、1ページに2つまでという上限:スタイルガイド
数字、バージョン、UIのラベル
ゲームが決める数字(アバターの速度、設定のデフォルト値、サイズの上限)と現在のバージョンは、ページに直接書きません。これらはリポジトリのルートのvalues.yamlにあり、ページにはプレースホルダーを書きます。サイトがビルド時にそれを埋めます:
{{v:avatar.move-speed}}はvalues.yamlの値です。サイトはページの言語での数字の書き方に合わせて書きます:英語では0.15、ロシア語では0,15{{ui:menu_main_sandbox-btn}}はgame/<lang>.yamlにあるUIのラベルで、ページ自体の言語で表示されます{{は文字どおりの波括弧2つです
存在しないキーがあるとサイトのビルドが止まるので、新しい数字はまずvalues.yamlに追加します。歴史上の時点として名前を挙げたバージョン(「gv 1.0.0以降」)は文字のまま残します。Obsidianはプレースホルダーを書かれたとおりに表示します
コードとその他のマークアップ
- コードのハイライトは
ts、tsx、js、json、csharp、bash、yaml、css、mdにだけあります。他の言語はプレーンテキストとして表示されます - 使えるもの:GFMの表、タスクリスト、脚注、
==highlights== - MDXもJSXも使えません。
{と<はそのまま表示されます