企画メモ: 深夜の給油所ホラー『壁一枚』(仮題)

ゲーム開発

友人と二人で作るゲームの企画メモである。売ることより完成することを最優先に、
二人の持ち物(絵とコード)で閉じる形に絞った。仮題は変える前提。

一言で

深夜の給油所でワンオペ。来る客の中に、人間でないものが混ざっている。
気づいても、気づいたと悟られてはいけない。壁一枚隔てた裏には、家族が寝ている。

舞台は表と裏だけ

家は無い。給油所の表(窓口)と裏(バックヤード)、この2画面で全部やる。
主人公は住み込みで、母と子とペットが裏で暮らしている。

画面 いつ 何をする
表(窓口) シフト中 業務、客の対応、観察
裏(バックヤード) シフト前後 帳簿、道具の購入、家族の様子

表と裏を隔てるのはドア一枚。表で起きたことは、物理的に裏へ来る。

住み込みなので、家賃はオーナーへの上納である。払えなければ職と住居を同時に失う。
深夜に働く理由と、怖くても辞められない理由が、これだけで揃う。

1晩の流れ

  1. 裏: 帳簿を見る。道具を買う。家族の様子を確認する
  2. 表: 客が一人ずつ来る。対応する。朝まで
  3. 裏: 給料が入る。帳簿が更新される。家族の状態が変わっているかもしれない

1晩=1セッション。セーブはこの単位で完結させる。

表: プレイヤーは分類しない、業務をする

「この客は化物だ」というボタンは無い。プレイヤーが選べるのは業務の動詞だけ。

給油する / 断る / 窓を拭く / 釣りを渡す / 目を合わせない / 通報する / 塩を撒く / シャッターを閉める

どう扱ったかの組み合わせが、暗黙のうちに判定になる。
「化物だと気づいたのに、普通に給油するしかない」という状況を作るためである。
Yes/No のクイズにすると怖くなくなる。

観察には時間のコストがある

客を見る手段: ナンバー(地元か県外か)、後部座席、給油口の音、ミラー、監視モニタ、時計、

全部見る時間は無い。長く見ていると、人間の異常客は苛立って暴れるし、
化物は「気づかれた」と判断する。どこまで見て、どこで手を止めるかがプレイヤーの技術になる。

声は合成音声で作る。ピッチ、速度、言い間違い、返事の間。「喋り方がおかしい」はここで表現する。

客の設計表(裏側の道具)

客は2×2で設計する。これはプレイヤーには見せない。客を作るときの表である。

まとも 異常
人間 普通に対応する。雑にやると売上が減る 人間のルールで対処(断る・通報)。塩を撒くと警察沙汰=クビ
化物 気づいても手を出すな。普通に給油すれば帰る。塩を撒くと怒る 化物のルールで対処(塩・シャッター)。普通に給油すると死ぬ

肝は左下「化物・まとも」である。これがあることで判断が2段階になる——人間か化物か、そして手を出すべきか
「化物には塩」と学んだ瞬間に、まともな化物に殺される。慎重すぎると異常な化物を通す。
見て見ぬふりという怪談の定番構造が、業務の中に自然に入る。

化物は金払いがいい

化物の客はチップを多めに置いていく。人間より稼げる。
だから怖くても相手をする動機ができ、後述の帳簿がリスクを取らせる装置になる。

先輩のメモ

ルールは最初から全部は分からない。初日は「レギュラー満タン、窓拭き、笑顔」だけ。
夜が進むごとに先輩のメモが1枚ずつ見つかる。

「後部座席を見るな」「県外ナンバーは給油だけして喋るな」

メモが正しいとは限らない。先輩はもういない。

失敗は3段階

種類
即死 異常な化物を通した。まともな化物に塩を撒いた
クビ 人間に塩を撒いた。通報しすぎた
じわじわ 業務が雑で売上が減り、道具が買えなくなる

即死だけだと単調になる。緩い失敗を混ぜて緩急をつける。

裏: 帳簿

生活パートは作らない。1画面の帳簿で済ませる。

道具

給料で買うのは生活費ではなく、次の夜を越えるための道具

道具 効果 切れると
化物・異常への対処 手を出せない
懐中電灯の電池 後部座席・給油口を観察できる 見えないまま判断する
防犯ブザー 人間・異常を追い払える 通報するしかない(通報は回数制限)
家賃(上納) 週末に払う 職と住居を失う

業務が雑 → 売上が減る → 塩が買えない → 異常な化物に手が出せない → 死ぬ。
じわじわの失敗が、化物のループに戻ってくる。

家族

帳簿に3行。シーンは作らない。状態だけ。

毎日かかるもの 状態
食費 元気 / 具合が悪い。倒れると子の分の出費が増える
食費、ときどき薬代・学用品 元気 / 病気
ペット 餌代 元気 / 食べない / いない

金が足りない夜は、誰の分を削るかを選ぶ。塩を買うか、子の薬を買うか。

ペットは炭鉱のカナリア

その夜、化物と近く接した回数(目を合わせた、釣りを手渡した、チップを受け取った)が閾値を超えると、
翌朝ペットが「食べない」になる。バックヤードでドアの方を見たまま動かない。 理由は書かない。
数日続くと「いない」になる。

子を食わせるために化物の金を受け取り、その代償をペットが払う。
プレイヤーは金を受け取るたびに、帳簿の下の行を見るようになる。

語らない

ホラーに家族の不幸を足すとお涙頂戴に転びやすい。帳簿は事実だけ書く。
「子: 病気」「ペット: 食べない」。説明も回想もセリフも無し。語らないほうが怖いし、語らないほうが泣ける。

後で足す仕掛け(最初は作らない)

  • 裏からの音: シフト中に、裏から子の泣き声やペットの吠え声がする。裏へ行けば表が無人になる。
    客を待たせるか、家族を見に行くか。たぶんこのゲームで一番怖い二択になるが、客3体で回ってから
  • AIが演じる客: 台本の無い客を1体だけ入れ、マイクで応対する。「目の前の相手は人間か」を会話で見抜く。
    面白いが、API課金・遅延・脱線の3つを解く必要があるので、基本ができてから

最初のマイルストーン: 客3体で1晩遊べる

マス 役割
1 人間・まとも 業務の練習台。ここで動詞を覚える
2 人間・異常 酔っ払いか強盗。通報が正解。塩を撒くとクビ
3 化物・異常 初めての怪異。塩が正解。ここで初めて死ねる

「化物・まとも」は4体目。3体目で「化物には塩」と学んだプレイヤーを裏切る。ここが最初の「やられた」になる。

客を1体描いて1体ぶんロジックを書けば、1体ぶん遊べる。二人の作業が1対1で対応する。
途中で止まっても「遊べるもの」が残る。

技術

  • Python + pygame-ce。Python を書けるようにしておく、という目的も兼ねる
  • 配布は pygbag(ブラウザ)→ PyInstaller(デスクトップ) の順。開発中はURL一つで共有し、出すときに実行ファイルにする
  • pygbag の HTML は itch.io にそのまま上げられる。Steam を目指す段になって初めて PyInstaller が要る

初日から守ること

項目 理由
メインループを async で書く(ループ内で await asyncio.sleep(0)) pygbag はブラウザに制御を返す必要がある。後付けは全体の書き直し
pygame-ce を使う(無印 pygame ではなく) pygbag が対象にしているのは community edition
音声は OGG ブラウザで MP3 は不安定
アセットは相対パスでプロジェクト直下 pygbag が同梱する範囲
実行時にネットワークを叩かない ブラウザ内の Python から外部APIは動かない

客の声は開発時に合成してアセットとして同梱する。実行時に生成しない。
APIキーを配布物に入れずに済み、コストも開発時に確定する。

役割

コード
表の一枚絵(店内から見た窓と給油機) ゲームループ、画面遷移
裏の一枚絵(バックヤード) 客のロジック、判定
客の立ち絵(1体ずつ) 観察の手段と時間のコスト
家族3人の小さな肖像 × 状態差分(9枚以下) 帳簿と道具
演出の絵コンテ 音、声の合成

最初に必要な絵(発注リスト)

  1. 表の一枚絵 1枚
  2. 裏の一枚絵 1枚
  3. 客 3体(人間・まとも、人間・異常、化物・異常)。化物は出し惜しみする——最初は後部座席の影、正体は失敗時にだけ見える
  4. 家族の肖像 3枚(元気な状態のみ。差分は後)

ゲームオーバー画面の一枚は、いちばん本気の絵を取っておく場所。

決めていないこと

  • 仮題
  • 客の総数と、夜の進み方(何晩でクリアか、そもそもクリアがあるか)
  • 通報の回数制限の値
  • 化物のチップの相場と、ペットの閾値
  • 先輩のメモの枚数と内容

コメント

タイトルとURLをコピーしました