Skip to content

ステップ・バイ・ステップ:サバイバルホラー世界をゼロから作る

「No, I'm not a Human」 に着想を得たホラーサバイバルゲームを作ります。前提はシンプル:終末が訪れ、外には人間に化けた「訪問者」がいる。あなたは家に一人、毎晩誰かがドアをノックする。のぞき穴から相手が人間か怪物かを見極め、選択をして、14夜を生き延びる。

このチュートリアルを終えれば、Yumina のコア創作スキル —— エントリ、変数、ディレクティブ、コンポーネント、ロアブック —— をしっかり身につけられます。今後どんな世界を作るにせよ、出発点はここです (•̀ᴗ•́)و


ステップ 1:新しい世界を作る

左側ナビの 作成 ボタンをクリックし、空白プロジェクト を選びます。エディタ上部の入力欄に世界名を入力:

  • 名前The Imposters

エディタの各セクションにまだ不慣れなら、先に 仕組み を読んでから戻ってきてください。


ステップ 2:キャラクター設定エントリを書く

左側ナビの ロアブック をクリックします。

では自分のエントリを作りましょう。プリセット グループにいることを確認し、右上の エントリを追加 をクリックします。

このゲームでは、AI はキャラクターを演じるのではなく、ゲームマスター(GM) として振る舞います —— シーンの語り、すべての NPC の演技、物語の推進を担います。なので最初のエントリでは、AI にその役割と責任を伝えます。

キャラクター設定エントリの作成

フィールド
名前ゲームマスター設定
送信形式指示(AI はこれを守るべきルールとして扱う)
タグプリセット をクリック

内容 フィールドに以下を記入します:

あなたは公平で中立なホラーサバイバルゲームのGMです。ゲームは14日間(14夜)続きます。

設定:終末が始まった。街は「訪問者」—— 人間そっくりの存在 —— に埋め尽くされている。プレイヤーは家に一人。毎晩、誰かがドアをノックして助けを求める。プレイヤーはのぞき穴で観察し、ドア越しに会話し、さまざまな方法で来訪者が人間か怪物かを判断し、ドアを開けるかどうかを決めなければならない。

あなたの役割:
- 毎晩、ノックする者の外見と振る舞いを描写する
- 正体を直接明かさず、公平に手がかりを与える
- 昼間はプレイヤーが自由に部屋を探索し、道具を使い、電話をかけられるようにする
- 不気味で張り詰めた雰囲気を保つ
- 各返信の最後に3〜5個の選択肢を提示する(A/B/C/D/E 形式)

各返信は冒頭にフェーズ見出しを付ける:
- 夜:🌑 **第 X 夜**
- 昼:☀️ **第 X 日**

いくつかのポイント:

  • このエントリは プリセット にあります → 常に AI に送信され、すべての会話で見えます。コア設定はここに置く必要があります
  • 送信形式 = 指示 → AI はこれをシステム指示として扱い、キャラクターの台詞とはみなしません
  • タグ = プリセット → 整理のため

ステップ 3:開始メッセージを書く

最初のメッセージ セクションに切り替え、挨拶を追加 をクリックします。(ロアブックで role: greeting のエントリを作っても同じ効果です。)

最初のメッセージを編集

🌑 **第 1 夜**

テレビ画面が砂嵐でちらつく。緊急放送が機械的な声で同じ警告を繰り返している:「……現在確認されている訪問者の特徴:不自然なほど均一で、磁器のように白い歯。住民は警戒し、見知らぬ者にドアを開けないよう勧告します……」

あなたはアパートに一人。こぢんまりとした部屋だ —— バスルーム、リビング、寝室、書斎、キッチン、そして物置。玄関ドアにはのぞき穴。物置には拳銃。書斎には固定電話。冷蔵庫には数日分の食料。

窓の外、通りは無人。少なくとも —— そう見える。

そして、ノックの音。

***コン……コン……コン。***

若い女性の声がドア越しに届く。震えて、涙ぐんでいる:「お願い……入れて……外に何かが私を追ってきてるの……」

**選択肢:**
A. ドアを開けて彼女を入れる
B. ドア越しに話して、いくつか質問する
C. 拒否して立ち去らせる
D. のぞき穴から彼女を注意深く観察する
E. その他(取りたい行動を入力)

良い開始メッセージの要点:

  1. プレイヤーがどこにいて、何が起きているのかをすぐに伝える
  2. 使える資源と環境を明確に示す
  3. 決断で締めくくり、すぐに行動を迫る

ステップ 4:ゲーム変数を作る

変数 セクションに切り替え、変数を追加 をクリック。5つの変数を作ります。

変数の作成

1. 生命

フィールド
IDplayer_hp
表示名Player HP
タイプNumber
デフォルト値3
最小0
最大5
ビヘイビアルール訪問者に攻撃されたり致命的なミスをしたとき1減らす。蒼白の見知らぬ者を中に入れる、または一人だと認めた場合は直ちにゼロに。0でゲームオーバー。

2. 体力

フィールド
IDenergy_current
表示名Energy
タイプNumber
デフォルト値3
最小0
最大8
ビヘイビアルール訪問者の身体検査と発砲はそれぞれ1ポイント消費。のぞき穴観察と会話は無料。昼間に上限まで回復。体力0のときは体力消費行動を実行できない。

3. 日数

フィールド
IDgame_day
表示名Game Day
タイプNumber
デフォルト値1
最小1
最大14
ビヘイビアルール昼夜サイクルが1つ完了するごとに1増やす。第14日が終わるとゲームが締めくくられる。

4. フェーズ

フィールド
IDgame_phase
表示名Game Phase
タイプString
デフォルト値Night
ビヘイビアルール値は「Night」または「Day」。夜はノックイベントの処理、昼は部屋の自由探索と道具使用。

5. 武装状態

フィールド
IDplayer_has_gun
表示名Has Gun
タイプBoolean
デフォルト値True
ビヘイビアルールプレイヤーは拳銃を1丁持って始める。発砲は体力を1消費するが人間を誤って傷つける可能性がある。発砲後はその結果を描写する。

ビヘイビアルールとは?

ビヘイビアルール はコードではありません —— AI 向けに自然言語で書く指示です。AI は返信を生成するときにこれを読み、いつどの変数を更新すべきかを知ります。AI の「カンニングペーパー」だと思ってください φ(>ω<*)


ステップ 5:変数はどう変化するのか

変数を設定したものの、AI はいつそれを変えればいいと分かるのか? —— と思うかもしれません。

朗報:手動で AI に教える必要はありません。 世界に変数がある限り、Yumina エンジンは自動で2つのことをやります:

  1. ディレクティブ形式を自動で AI に伝える:エンジンは毎ターン、[variableID: operation value] 構文で状態を更新するよう AI にこっそり指示を渡します。あなたは何もしなくて大丈夫。
  2. あなたのビヘイビアルールを自動で AI に送る:ステップ4で各変数に書いたルールは、毎ターン AI に見えています。AI はそれをもとに、いつ何を更新するか決めます。

例:health 変数のビヘイビアルールに「訪問者に攻撃されたとき、または危険な選択をしたとき減少」と書いたとします。ゲーム中にプレイヤーが攻撃されると、AI は返信の最後に [health: -20] を書きます。エンジンはこれを検出し、自動で生命を100から80に減らします。

つまり、ビヘイビアルールを明確に書くほど、AI の働きは良くなります。 ステップ4で書いたルールを見直し、各変数が「いつ・どう変わるか」を明確に示しているか確認しましょう。

AIの出力でディレクティブはどう見える?

AI の返信の最後に、こんなものが見えます:

[health: -20]
[energy: -15]

これがディレクティブです。エンジンが自動で抽出・適用し、プレイヤーが見る返信には現れません。

もっと多くのディレクティブ構文

+(加算)と -(減算)のほか、set(特定の値に設定)、toggle(真偽値の反転)などもあります。詳しくは → AI ディレクティブとマクロ


ステップ 6:見栄えを良くする —— AI 生成インターフェース

ここまでで世界は遊べる状態です。でもプレイヤーが見るのはプレーンテキストばかり —— 雰囲気も没入感もありません。本物のホラーゲームらしいインターフェースを作りましょう。

「コードを書く?」いいえ —— AI にやらせます ( ̄▽ ̄)ノ

方法その1:Yumina 内蔵の Studio AI(推奨)

  1. エディタ上部の Studioを開く をクリック
  2. AIアシスタント パネルを開く
  3. 以下を送信(そのままコピーで OK):
ルートコンポーネント(index.tsx)を終末ホラーサバイバル風のUIに書き直して。
《No, I'm not a Human》のスタイルを参考に。
外側は `<Chat renderBubble={(msg) => ...} />` のまま —— 入力欄、
ストリーミングカーソル、スワイプはプラットフォームに任せ、こちらはバブルのスタイルだけ引き受ける。

必要な効果:

1. フェーズ見出し:
   - AIの返信に「🌑 **第 X 夜**」が含まれていたら、抽出してCRTモニター風の見出しバーに描画
     (暗緑色に光る文字、走査線エフェクト、わずかな明滅)
   - 「☀️ **第 X 日**」が含まれていたら、暖色系の見出しバーに描画(琥珀色の文字)
   - 見出しを本文から取り除き、別途表示する

2. ノック効果:
   - 返信に ***三つのアスタリスクで囲んだ太字斜体*** が含まれていたら、抽出して
     ノックアニメーションに描画 —— 赤い大きな文字に揺れエフェクト

3. 下部HUDステータスバー:
   - 等幅フォント、暗緑色の背景
   - 表示:⚡ 体力(energy_current 変数)、❤️ 生命(player_hp 変数)、
     🔫/🚫 武装状態(player_has_gun 変数)
   - コンパクトな一行表示

4. 叙述テキスト領域:
   - 暗い背景(深い緑黒)、縁にかすかな発光
   - 薄緑色の文字、読みやすいよう広めの行間
   - renderMarkdown で描画

5. 選択肢ボタン:
   - AIの返信に「選択肢:」または「**あなたの選択:**」が含まれていたら、選択肢
     (A. B. C. D. E.)を抽出してクリック可能なボタンに描画
   - クリックで対応する選択肢を自動送信
   - 暗緑色のトーン、ホバーで明るく

6. 全体の雰囲気:黒緑のCRTモニター美学、低彩度、重苦しい終末感

私の変数:
- player_hp —— 生命、number、0–5
- energy_current —— 体力、number、0–8
- game_day —— 現在の日数、number、1–14
- game_phase —— "Night" または "Day"
- player_has_gun —— 武装しているか、true/false
  1. AI がコードを生成し、承認カードを表示します;キャンバス パネルでライブプレビュー
  2. 満足? 承認 をクリック。直したい? そのまま会話を続けて ——「ノック効果をもっと派手に」とか「選択肢ボタンが散らばりすぎ」とか

Studio AI がインターフェースを生成

生成結果のプレビュー

これだけ —— かっこいいフロントエンドが、あっさり完成!

方法その2:外部 AI を使う(Claude、ChatGPT など)

他の AI に慣れているなら、それでも大丈夫。上の効果説明に、次の Yumina 技術情報を添えて送ってください:

Yumina 技術情報(コードを書くときは以下のルールに従ってください):
- ルートコンポーネント:`export default function MyWorld() { return <Chat renderBubble={(msg) => ...} /> }` をエクスポート
- `<Chat />` はプラットフォーム提供のチャット構成要素 —— 入力欄、メッセージ
  リスト、ストリーミングカーソルを担当;こちらは renderBubble で各バブルだけをカスタマイズ
- renderBubble の中で、msg オブジェクトは次を提供:`contentHtml`(事前描画済みHTML)、`rawContent`
  (生テキスト)、`role`("user" / "assistant")、`messageIndex`、`isStreaming`、
  `renderMarkdown(text)`(markdown を整形済みHTMLに変換)
- useYumina() で変数を取得、例:useYumina().variables.player_hp
- useYumina().sendMessage(text) でプレイヤーとしてメッセージを送信(クリック選択肢用)
- 組み込みの Icons ライブラリ(import 不要)、例:Icons.Heart、Icons.Zap
- Tailwind CSS と React hooks をサポート
- useEffect + document.createElement("style") でアニメーションを注入
- React、Chat、useYumina、Icons はサンドボックスで全てグローバル利用可能 —— import 不要

コードを受け取ったら:

  1. エディタに戻る → カスタムUI セクション → index.tsx を開く
  2. コードを貼り付ける(デフォルトの return <Chat /> を置き換える)
  3. 下部に コンパイル: OK と出れば完成

コードを理解する必要はありません

コードが何をしているか理解する必要はありません。貼り付けた後に下部が コンパイル: OK になっていれば、正常に動いている証拠です。エラーが出たら、エラーメッセージをそのまま AI に送って直してもらいましょう ∠( ᐛ 」∠)_

結果が思い通りでないときは?

AI に直接言いましょう:「ヘルスバーが細すぎる、太さを倍に」「背景を真っ黒に」「明滅エフェクトを追加」。数回のやり取りで思い描いた形になります。


ステップ 7:ロアブックエントリを書く

これまでのエントリは プリセット グループ —— 常に送信されます。でも一部の情報は、関連するときだけ使えれば十分 —— それが チャット履歴 グループの役割です。

ロアブック に戻り、左側の チャット履歴 グループを展開して、そのグループ下で エントリを追加 をクリックし、キーワードトリガーのエントリをいくつか作ります:

1. ノックのルール

フィールド
名前ノックイベント
送信形式指示
キーワードドアノック開ける叩く
ノックイベントのルール:
- 毎晩2〜3人の訪問者が、一人ずつ現れる
- プレイヤーの選択肢:のぞき穴で観察(無料)、ドア越しに会話(無料)、身体検査を要求(体力消費)、開ける/拒否
- 人間を入れる = 助けになるかも | 訪問者を入れる = 危険
- ノックの場面を描くときはサスペンスを保つ —— 正体を直接明かさない

2. のぞき穴観察

フィールド
名前のぞき穴観察
送信形式指示
キーワードのぞき穴覗く観察見る
のぞき穴観察のルール:
- 来訪者の頭部と上半身しか見えない
- 描写の重点:表情、歯、目、肌の質感
- 訪問者の変装には微妙な綻びがある(不自然に均一な歯、異常な瞳孔、奇妙な肌の質感)
- 人間には正常な欠点がある(虫歯、くま、傷跡)
- 正体を直接明かさない —— 見えたものだけを描写する

3. 部屋探索

フィールド
名前部屋探索
送信形式指示
キーワード探す調べる漁る探索部屋
部屋探索のルール(昼間のみ):
- 物置:拳銃を見つけられる
- キッチン:食料補給、体力を少し回復できる
- 書斎:電話、電話で情報を得られる
- 環境の細部を描写して不安感を演出する

キーワードトリガーはどう動く?

AI の各返信の前に、エンジンは最近のメッセージをスキャンします。一致するキーワードが現れたら → 対応するエントリが一時的に AI に送られます。誰も言及しなければ → AI には見えず、token 予算を無駄にしません。効率的で正確 (≧▽≦)

スキャン深度は ロアブックエントリ設定 にある スキャン深度 です —— デフォルト2、4くらいに上げるのがおすすめ。


ステップ 8:テストする

コア部分は完成です。テストしてみましょう!

エディタ上部の 保存 をクリックし、左側ナビ下部の金色の プレイ ボタンを押します。エディタはそのままセッションに連れて行きます —— この世界の保存済みセッションがあれば再利用、なければ自動で新規作成。以下を確認:

確認項目確かめ方動かないとき
開始メッセージが出る入室時に最初のメッセージが自動表示最初のメッセージ セクションに挨拶が書かれているか確認
カスタムUIが効くメッセージに CRT 風のフェーズ見出しと HUD があるindex.tsx に renderBubble コードがあり コンパイル 状態が OK か確認
ディレクティブが効く操作後に変数が変化(HUD 数値が更新)各変数のビヘイビアルールが明確に書けているか確認
ロアブックが発火「のぞき穴」と言うと AI がルールに従うキーワードの綴りと スキャン深度 設定を確認

ステップ 9:概要情報を入力する

テストが通ったら、概要 に切り替えて公開前情報を入力:

  1. カバー画像 をアップロード(ホラーの雰囲気が伝わるもの)
  2. プレイヤーが何を遊ぶのか分かる 説明 を書く
  3. タグ を追加:ホラーサバイバルミステリーインタラクティブフィクション
  4. 言語 を設定:世界の言語を選ぶ(例:日本語
  5. 上部の 保存 をクリック

概要情報


ステップ 10:公開する

  1. エディタ上部バーの 公開 ボタン(保存 のすぐ隣)をクリック
  2. 公開ダイアログで コンテンツレーティング一般向け または センシティブ)、可視性、他者の編集可否を設定
  3. 利用規約に同意して公開をクリック

完成!あなたの世界が公開されました ヽ(✿゚▽゚)ノ


学んだこと

概念やったこと
エントリシステム設定と開始メッセージを書いた —— AI の振る舞いの土台
変数HP、体力、日数カウンターを作った —— ゲーム状態の骨格
ディレクティブエンジンが自動で AI に教える;あなたはビヘイビアルールを明確に書くだけ
カスタムUIAI にステータスパネルを生成させた —— 自分でコードは書かない
ロアブックキーワードトリガーのルールエントリ —— 必要に応じて呼び出す知識ベース

この5つが協調して、完全なインタラクティブ世界になります。

まだできること

このチュートリアルで使ったのは最も基本的な機能だけ。Yumina にはもっとできることがあります:

  • ルールエンジン —— HP が0になったら自動で死亡エンディングを発火。AI の記憶に頼らない
  • カスタムUIガイド —— メッセージを吹き出し、ビジュアルノベルのシーン、戦闘ログに変える
  • オーディオ —— BGM と効果音を追加、地下室に入ると不気味な音楽に自動切替
  • 条件付きエントリ —— 変数値に応じてエントリを起動、終盤の物語の種明かしなど

各システムを深く知りたいなら、ルールエンジンカスタムUI変数 のリファレンスページに、複雑な状態管理の実例があります。


yumina.io「No, I'm not a Human」 を検索して完全版を体験 —— あなたの世界がどんなものになり得るか、その手応えを。それから戻って創作を続けよう ᕕ( ᐛ )ᕗ