Kirino 的游戏宝藏
← 第 022 号へ
ゲーム観察

上へ向かうシグナルと扉前の列:Ben (RNG) は composition で、『Memento Manor』のソロ悪夢を次の共同制作の一手にどう釘付けしたか

この十数年、インディー開発者のポストモーテムがしばしば「プログラムも美術も音楽も台詞も一人で担ぎ、結びで次はソロはやめようと言う」という定番台本だったとすれば、2026年9月10日、Ben(名義 RNG)が itch.io に広げた『Memento Manor - A Paranormal Postmortem Introspection』

保存した記事 ↗

この十数年、インディー開���者のポストモーテムがしばしば「プログラムも美術も音楽も台詞も一人で担ぎ、結びで次はソロはやめようと言う」という定番台本だったとすれば、2026年9月10日、Ben(名義 RNG)が itch.io に広げた『Memento Manor - A Paranormal Postmortem Introspection』は、その請求書の締め方を公然と書き換えている。作品は『Memento Manor』。俯瞰の不気味 RPG、ミッション制の館、プレイヤーは超常現象調査員 Mara Kalina として、Resident(住民)に占拠された記憶の中で盗まれた Memento を探す。エンジンは Godot。前作 Phantom Forest の GDScript から C# / .NET へ切り替えた。本稿は完成版を未試遊。以下の場面と仕組みは、作者の公開ポストモーテムとゲームページの資料観察に基づく。

貫くイメージは「シグナルは上へ」と「扉前の列」だ。前者はシーンツリーの規律に聞こえるが、制作倫理としては検証可能な疎結合の約束になる。子は親を知らなくても発話でき、親は必要なとき下へ参照を取る。後者はエンジニアリングの冗談に聞こえる——扉がプログラマを泥沼に引き込むことは周知だ——が、Ben の振り返りではソロのいちばん正直な戦場になる。同じ扉が Open / Peek / Loud Knock を担い、複数の住民を列で通し、覗き中に住民が同じ扉を開けたら Peek を強制終了させる。ソロの重さは「万能」のスローガンではなく、こうした仕組みを一つずつ釘付けしたあとで初めて言える言葉——次は共同でやりたい——にある。

『Memento Manor』カバー:館と調査者

一、既定の論理:ソロは全能、グローバルマネージャは手抜き

業界の既定論理は潔い。だから怠惰でもある。

一人でゲーム全体を出すとき、チームは見慣れたメニューを開く。永続状態を巨大な Game Manager に押し込み、シーン継承でレベルツリーを複製し、「ノードを一つ足せば全レベルに広がる」ようにし、インタラクトは「E キー一つ」、NPC の経路は A から B へ固定、俯瞰は「背景にスプライトを貼ったように見えれば合格」。プレイヤーも同じ語彙でソロを読む——「動けばいい」「プログラマアートに味がある」「扉のアニメが少しカクついてもいい」。その暗黙の了解が、ソロの粗さを許される業界文法に変える。

『Memento Manor』はその文法に収まりにくい。館は部屋単位で描画と衝突を分け、住民は Routine / Search / Chase / Sleep / Wander / Stunned / Trapped の一式を持ち、ミッションは Investigation 構造体で部屋・住民・扉接続・ピックアップをカスタムし、プレイヤーにも Walk / Run / Idle / Busy / Peek / Faint がある。狙いは「起動するデモ」ではなく「完結した体験」だ。それを一人の工期に押し込むと、業界の直感はほぼ自動で「システムを削る、扉を削る、二階を削る」を指す。

Ben の公開ポストモーテムは、その近道の自己慰めを拒む。彼は率直だ。ソロはとても大変で、事前に知っていたが、「なぜ」を自分の手で見る必要があった。主にプログラマで、最良の仕事は裏方の機能にある——しかしソロを選ぶなら音楽もグラフィックも台詞も学ばねばならない。さらに鋭い一文は自己憐憫ではなく方向の宣言だ。次は共同プロジェクトを望む。ソロで他職種の基礎を掴んだから、共同では相手の工程を念頭に自分の担当を書ける。分岐はここにある。既定は「一人が持てないとき何を切るか」と問う。彼は「一人が持てるうちに、どの疎結合を正しく書いておけば、次の共同が同じ結合を泥沼に引きずらないか」と問い直す。

二、台本を砕く:シグナル上/参照下、そして「Busy」を明示するステートマシン

疎結合は主張しやすく、証明しにくい。「確実に勝つ」案はしばしばすべてをグローバルシングルトンにするか、シーン継承を無料複製とみなすことだ。Ben は前作の経験を携えて来る。Phantom Forest では GDScript を使った。C# への移行は「もう一つの言語」だけでなく、GDScript だけだと将来のエンジン/IDE 選択肢が狭まると懸念し、.NET 版 Godot が Visual Studio に繋がり、大学時代から慣れた C# を続けられるからだ。ポストモーテムはハッシュ表、静的データ、lambda、列挙、インターフェース、構造体、継承、多態、null 条件代入、非同期、自作 assert を具体的に列挙する。意図は硬い——C# を使うなら GDScript の皮として使わない。

C# は請求書も出す。GDScript の即時クリアと違い、GC はまとめて稀に走るので、消した直後の参照に触れうる。グローバルマネージャに非グローバル参照を置くな、さもないとシーン切替でリークする。静的リストは複製してから変更せよ、さもなくば住民共有の事前辞書を汚す。グローバルシグナルに繋いだローカルノードは `_ExitTree` で手動切断——GDScript はシーン切替で消えがちだが C# はそうではない。抽象的潔癖ではなく、ソロ三ヶ月目に爆発しやすい「小さな quirk」だ。

既定台本を本当に砕くのは composition と規律 **signal up, reference down** だ。子はシグナルで上へ報告し、親を知らなくてよい。親が即時データが要るなら下へ参照を持つ。HealthComponent 型の子はプレイヤーにも敵にも付けられる。Interact Area を Area2D の子として任意のインタラクト物に付け、親は「範囲に入った」シグナルだけ繋ぐ。リスクも同じ段落に書かれる。ドキュメントの悪いコンポーネントは系を盲目にする。解は用途が分かる命名(HealthComponent など)、短く単一責務。柔軟性は無料ではない——異なる親の下で小さな系を再利用する代わりに、他人向け契約のように見えるインターフェースを書くコストを払う。

ここでのステートマシンは教科書用語ではなく、「いまこのキャラは動けるか」を継承可能なメソッド表に釘付けする。プレイヤー側:Walk / Run / Idle が移動とインタラクトを扱い、Busy はインタラクト中に移動権を奪い、Peek は扉の隙間ライト移動を足しつつ、入力・他者の扉使用・住民に見られた瞬間に抜けて扉へリセットを告げ、Faint は捕まったあと気絶アニメと館内時間ジャンプを待ち UI を隠す。住民の既定は Routine(時刻と位置で日程)。NoiseArea や松明が聴取/検知範囲に入ると Search、レイキャストで視線が通ると Chase、到着後は Sleep か Wander、弱点と罠は Stunned / Trapped でしばしば Memento を落とす。基底 State の上書き可能な Move / Turn により Busy は何もしなくてもよく、Walk は入力に応えねばならない——複雑さは新しいステートの中に閉じ、三千行の `if` に広がらない。

俯瞰の館内:部屋、光、調査対象

三、扉・ルート・Investigation:いちばん難しい系をカスタム任務として書く

フレーム予算の外で、ソロがいちばん高くつくのはしばしば「一枚の扉」だ。Ben は明言する。あらゆる設計の中で、扉がいちばん多く作り直し・微調整・妥協を経た。住民が最も複雑なオブジェクトかもしれないが、扉は最後まで厄介だった。理由は土臭く正確だ——扉はレベル遷移だけのことが多いわけではない。インタラクト物であり環境の仕切りであり複数種のキャラが使い、鍵・覗き・大声ノックもありうる。用途ごとに状態変化が要り、きれいにリセットし、「いまこの扉は使えない」と他者へ知らせねばならない。

『Memento Manor』の扉は、キャラが戸口を歩く演出ではなく、ポケモン風のフェード遷移を選んだ。スプライトを開き、キャラをフェードアウトし、反対側の扉マーカーへ移し、フェードインし、閉じる。インタラクト物は共通の Action 系を使い、扉は Open / Peek / Loud Knock の三スロット。同時に開けるのは一人だけ、Peek より優先。プレイヤーが Peek 中に住民が開けると Peek を強制解除し、住民の到着と短い遅延のあとまで再インタラクト不可。複数住民は列に入り、短い遅延のあと再試行、回数制限あり、長引けば unstuck で日程位置へ戻す。「壁の向こうを歩いて出る」アニメは遅すぎ難すぎ利益が薄い——切った。すべてやり切る浪漫ではなく、ソロの高価な正直さだ。遷移は「部屋が変わった」と伝えればよく、演じる必要はない。

ナビも「NPC が歩ける」を具体構造で押さえる。各部屋に NavigationRegion2D、家具と壁は NavigationObstacle2D、扉は NavigationLink2D で網を繋ぐ。住民は goal ノードを持ち、扉マーカーや終点へ段階的に向かう。Route 構造体は起点・経由部屋リスト・マーカー・手順フィルタ関数を持ち、事前の connections 辞書で最短ルートを作り、カスタム部屋接続も支える。いつ再計算するかはステートマシンが決める——Routine は部屋ごとに一、二回で足り、Chase / Search は移動目標に対し頻繁に更新する。部屋自身が描画・衝突・環境光と環境音を管理する。プレイヤーが入って初めて灯とレイヤが立ち、他部屋の住民はナビを続けるが視覚は飛ばし、无人なら衝突を切れる。凝った技は「プロジェクター」——カスタム SubViewport で一方の部屋のライブ画面を他方の「下」に投影し、ロビーとバルコニー、庭と橋の階の奥行きを作る。意図は資料から読める。本稿は手触りを未実測。

任務制の心臓は Investigation 構造体だ。調査デスクで選んだあと、館が読む。部屋が暗いか/鍵か/無効か、扉の張り替え、住民の種類・日程・難易度、NPC の台詞と位置、ピックアップの確率と順序、プレイヤー開始部屋と道具と正気度。難易度は線形乗算ではない——住民の 1–10 評価を Curve リソースで非線形サンプルし、速度・正気ダメージ・検知半径などへ落とす。世界画面は 960×540 の SubViewport に入れ ×2 で 1920×1080 UI に揃え、ピクセルは Nearest。Tween と AnimationPlayer の分担は実行可能な一句——「最終値が未知なら Tween、そうでなければ AnimationPlayer」。シーン継承は明確に格下げ。基底シーンがノードを押し付けると浪費と拘束になる。彼は composition でシーンを組み、スクリプト継承はオブジェクト内部に留める。

俯瞰の「平板でない」も気分の形容ではなく実行チェックリストだ。足元影は体型と高さで透明度を変え、移動時の CPUParticles2D の砂塵が「重さ」を与え、Y-sorting で NPC や物の前後が成立し、近い前景の壁や手すりは近づくとフェード、屋外は囲まれ感のためフェードを切れる、暗い部屋は前景を既定フェードし闇自体を主障害にする。インタラクト物は同一基底を継承し、最大三つの Action スロットを動的に書き換え(鍵扉、ワードローブ出入り)、action state 名でプレイヤーを Busy 等へ即切替。グローバル Interaction Manager が仲介し、検証・排他・終了時 clear。シングルトン側は Game / Save / UI / Player / Audio / Item / Time / Interaction が各々担当——同時に作者は Item と Time は今日なら館ローカルの方がよいと名指しする。後からの謙遜ではなく、ソロ振り返りで稀少な拒否権だ。余分なグローバルは、次の共同で誰も触れないブラックホールになる。

調査 UI と任務カスタム情報

四、締め:インディーとは、ソロを次の共同の教科書に変える意志である

この9月10日の振り返りを2026年秋の Godot ソロ現場に戻すと、まず打撃するのは隠れた制作慣性だ。人はソロを全能神話にし、グローバルシングルトンが多いほど楽だとみなし、「扉が通る」で足りるとし、自分の疎結合が一週間の自分を楽にしているのか、複数人の次プロジェクト用インターフェースを残しているのかをほとんど問わない。Ben は別経路を広げる。シグナル上/参照下は規律にできる。ステートマシンは Busy / Peek / Faint と Chase / Search をそれぞれのメソッド表に閉じ込められる。Investigation 構造体は「また一つの任務」をレベル複製ではなく記入表に変えられる。扉は悪夢だと公言しつつ列と Peek 強制終了の規則を残せる。Item と Time マネージャさえ自己批判する——今日ならローカル寄り。ソロポストモーテムでは「グローバルを増やしすぎた」は「全部やった」より役に立つ。

小チームにとって、この材料は刺さり、使える。住民の全ステート表も SubViewport プロジェクターも要らないかもしれない。だが「既定で十分」リストは必ずある。インタラクトキーが一つだけ。列のない扉で二人目の NPC が貫通する。シーンごと消えるべき参照を握るグローバル。GDScript から C# へ移して `_ExitTree` 切断を忘れた。俯瞰が背景板だけで、足元影・砂塵・Y-sort・近景フェードがない。線形難易度が十段で突然不公平になる。Ben の公開宿題はコストを土臭く書く。ソロは他職種を知るため。プロトタイプは一人で続けてよい。完成ゲームは共同でやりたい。着想は『ルイージマンション』『グレゴリーホラーショー』『Amnesia: The Dark Descent』『ポケットモンスター プラチナ』——本稿は資料注記であり、遊戯体験の代替ではない。itch ページは Windows / Linux、v1.0.0、No generative AI was used と記す。

実行可能な短い指針:

  • 最初の「グローバルマネージャ」コミットの前に規律を一行書く。どの更新がシグナル上か、どのデータが参照下か。一時ノードがグローバルシグナルに繋がるなら、同じ変更で `_ExitTree` 切断を書く。
  • キャラの意思決定が三つを超える相互排他になったら、先に基底 State とステートマシン部品を切り出し、Busy/移動不可を明示し、散らばった bool にしない。
  • 扉・テレポート・複数キャラ共有インタラクトは、戸口歩行アニメの是非より先に列・排他・強制終了を設計する。
  • 任務バリエーションは構造体(または同等データ)でカスタムし、シーンツリーを複製しない。難易度は曲線サンプルで、十段で線形爆発させない。
  • ソロの出口が「共同を学ぶ」なら、苦手工種の成果を、自分だけが触れるマジックナンバーではなく、引き継げるインターフェースと命名にする。

シグナル上、扉前の列、Investigation の記入、そして「solo development is a lot of work」。ポストモーテムが公開され、ゲームが itch でダウンロードできるあいだに、作者は監査基準をすでに言い切っている。問いは「一人で終えられるか」ではなく、「終えたあと、次の共同に必要な疎結合をリポジトリに残せたか」だ。

小光

出典と延伸読書

Ben (RNG)(2026-09-10)Memento Manor - A Paranormal Postmortem Introspection

ゲームページ Memento Manor(Windows / Linux、v1.0.0;No generative AI was used と表記)

ログインして読書記録を残しましょう。

いいね・保存を別の端末でも確認できます。

ログイン