「東方Project×能」がテーマのホラーゲームを作っている話

この記事は[個人開発 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/private-development)の23日目の記事です。

# はじめに
こんにちは。T.Dと申します。
5年ほど前からUnityを使って[東方Project](https://www16.big.or.jp/~zun/)の二次創作ゲームを個人で制作しています。
今までは以下のゲームを作りました。(リンクは全てAndroid)

- [東方魔法陣連打](https://play.google.com/store/apps/details?id=com.TD12734.thmagic)
 - 超インフレするクリッカーゲーム
- [東方幻夢廻録](https://play.google.com/store/apps/details?id=com.TD12734.thgenmu)
 - おっぱいがいっぱいな戦略RPG
- [東方翠神廻廊](https://play.google.com/store/apps/details?id=com.TD12734.thsuijin)
 - ダンジョンを探索する胸が大きくなるRPG
 - 諸事情で開発中断しています(いつか再開したい)

個人開発がテーマとの事でこの3作の話をしても良かったのですが、今回は現在開発中である
`「東方Project×能」がテーマのホラーゲーム(名称未設定)`
のお話をして行きます。
技術的な話よりも、ゲーム内容や実装したシステムの話が多いです。

# ゲームについて

## ゲームの動作を見てくれ
最初にゲームの動画を見て頂いた方がこの後の話も理解しやすくなると思います。
Twitterに上げた動画からピックアップします。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">最近のホラゲーの進捗<br>遂に「道具」の実装を開始し、まずは「札」カテゴリのアイテムを実装した<br><br>札は貼った場所を照らし、探索の道標となる<br>「札」は特別な効果は無いが「光霊の札」は貼った札を剥して再利用可能<br>警鐘と誘蛾の効果はまだ秘密 <a href="https://t.co/CW1ARWCNwI">pic.twitter.com/CW1ARWCNwI</a></p>&mdash; T.D (@TD12734) <a href="https://twitter.com/TD12734/status/1201863254001115136?ref_src=twsrc%5Etfw">December 3, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

## どんなゲームなんだよ
コンセプトとテーマはこんな感じ。

- ***テーマ：「東方×能」***
- ***ジャンル：「ホラー×不思議のダンジョン」***
- ***暗闇に包まれた迷宮を道具を駆使して探索し、突破せよ。***
- ***迷宮には面を被った幻想少女が徘徊している。立ち向かおうなど決して思わず逃げ続けよ。***
- ***面はプレイヤーにも力を与える。上手に使え。***
- ***安心なんて何処にもない。恐怖は絶える間も無く有り続ける。***

有り体に言えば`探索型ホラーゲーム`です。
2Dのダンジョンを敵から逃げながら探索し、出口を目指したり一定時間生き残り続けます。

## もしかして普通のホラゲー?
とんでもない!
今作は以下の2つの要素によりオリジナリティ、ユニークさ、絶妙な難易度を作り出します。

***1：探索マップが不思議のダンジョン***
風来のシレンやトルネコの大冒険みたいにマップが完全ランダム生成です。
探索ホラゲーは溢れていますが、不思議のダンジョンあるいはランダムマップとなるとその数は極端に減少します。
攻略する度に地形、道具、敵の配置が変化するので**ホラゲー特有の「覚えれば怖くないし楽勝」現象は絶対に起きません**。
攻略難易度は高まりますが、1000回遊べるホラゲーになるでしょう。(願望)

***2：東方と能楽の融合***
東方には[神子](https://dic.pixiv.net/a/%E8%B1%8A%E8%81%A1%E8%80%B3%E7%A5%9E%E5%AD%90)や[こころ](https://dic.pixiv.net/a/%E7%A7%A6%E3%81%93%E3%81%93%E3%82%8D)ちゃん、[隠岐奈](https://dic.pixiv.net/a/%E6%91%A9%E5%A4%9A%E7%BE%85%E9%9A%A0%E5%B2%90%E5%A5%88)みたいに能楽が大きく絡む子がちらほら居ますが、能に重点をおいたゲームは東方二次創作ゲーム多しと言えど現状皆無です。
そこで、東方も能も大好きな私がこの2つを融合させたゲームを作らなければと言う使命感に駆られ、制作を行うことにしました。
融合と言う以上、ゲームには東方要素と能要素がそれぞれ存在します。
`東方要素`

- 登場人物は東方の幻想少女
- 一部BGMは東方原曲のアレンジ
- 敵として登場する幻想少女の特徴は、原作での能力を再現した物になっている

`能楽要素`

- 敵は能面を被っており、プレイヤーも能面を被るとパワーアップする
- `シテ`、`ワキ`、`離見の見`など能由来のシステムが存在
- 雰囲気が静かで幽玄

# できたもの

## ダンジョン生成
地形生成のアルゴリズムの根幹はできました。
ざっくり言うとこんな感じにダンジョンを生成します。

> ダンジョンマップを複数個のセクター(区画)に分ける。
> セクターには固定マップ部分とランダムマップ部分があり、ランダムマップ部分では壁、通路、部屋を自動で作成する。

ランダムマップ生成はややこしいので割愛。
現段階では以下のようなダンジョンが自動生成されます。
![ダンジョン全体図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318712/2b611d0e-65d5-2208-8233-ee9cea639e79.png)

以下、イメージ図です。
![ダンジョンイメージ図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318712/f1bd8c24-09ba-48bb-5369-2450336ef74d.png)![セクターイメージ図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318712/9bdf56ef-fb25-a21b-5f6c-73384f7b2895.png)

通路や襖を自動生成するプログラムと合わせると上の画像のようなダンジョンが出来上がります。
現在のセクターは中央大部屋、中央9部屋、バラバラ9部屋(テストマップ)の3パターンのみですが最終的には20~30パターンは実装する予定です。

壁や床は[SpriteRenderer](https://docs.unity3d.com/ja/current/ScriptReference/SpriteRenderer.html)で表示し、衝突判定は[BoxCollider2D](https://docs.unity3d.com/ja/current/ScriptReference/BoxCollider2D.html)で実装しています。
今後Navigation 2Dを使う事を考慮して[Tilemap](https://docs.unity3d.com/ja/current/ScriptReference/Tilemaps.Tilemap.html)に置き換えたいですね。

## 光源
光源は`LWRP`のLight2DのPoint Lightを使ってます。
LWRPは登場してから日が浅いですが、光の色や明るさや境界のぼんやり具合を楽に調整できます。
`using UnityEngine.Experimental.Rendering.LWRP;`することでスクリプト上からも使用可能になります。
現時点で以下の4つの光源を実装出来ました。

**1：プレイヤーの光源**
![龕灯](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318712/e5c042ad-2ffe-8eba-dd5f-d6858242afb4.png)
ホラーでおなじみの懐中電灯…ではなく`龕灯`(がんどう)という、中に蝋燭を入れて前方を照らす江戸時代の道具です。
基本的にこいつで前方を明るくして探索を進めます。
しかし蝋燭の炎は有限です。
左上の炎の画像が上から下に無くなっていき、全て無くなった時は蝋燭が燃え尽きてしまいます。

**2：ダンジョンにある燭台などのオブジェクトの光源**
![燭台](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318712/6ee6fd96-0899-466f-9034-e6483fba3c0d.png)
ホラーには欠かせない蝋燭の光源です。
ぼんやり赤くして、炎っぽさと周囲の暗さを強調しています。

**3：周囲を明るくするアイテム「札」の光源**
![札](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318712/985f140d-e66a-22eb-5291-094bfed8b5b7.png)
目印として使える札の光源です。
貼られている札の向きを貼った時のプレイヤーの向きと合わせるなど、細かいところを凝っています。

**4：暗順応**
![暗順応](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318712/f74a8054-6fa4-320b-0459-d59a07884250.png)
全ての和蝋燭を使い果たし、札も持っていない場合は視覚的に詰むので`暗順応`システムを実装しました。
龕灯の火を消してから10秒ほど経過するとプレイヤーから薄暗い光が発生し、その後数分かけて光の範囲が拡大します。
しかし最初期はほぼ目の前だけ、最大範囲でもあまり遠くは見えないのであくまで救済処置です。

## 移動
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ホラゲーの移動の仕様<br>プレイヤーの以下の移動状態を持っている<br><br>・通常移動(歩く)<br>・高速移動(走る)<br>・低速移動(忍び足)<br><br>場所や状態に応じて足音が変わる<br><br>高速移動はスタミナを消費して走る<br>速いが音が鳴り、聞いた敵はその場所まで確認しに来る<br><br>低速移動時は音が鳴らず(将来的に)照準が表示される <a href="https://t.co/uvJ6eic04N">pic.twitter.com/uvJ6eic04N</a></p>&mdash; T.D (@TD12734) <a href="https://twitter.com/TD12734/status/1206552064710459392?ref_src=twsrc%5Etfw">December 16, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

移動の様子は上のツイートの動画を見てください。
プレイヤーの移動には3種類あり、それぞれの特徴は以下の通りです。

- 通常移動
 - 普通の移動。原則この状態で移動する。
 - 足音が鳴るが一部を除き敵に気付かれることは無い。
- 高速移動
 - スタミナを消費する速い移動。敵に追われている時はスタミナ消費が倍になる。
 - 音が鳴り、聞いた敵はその場所まで確認しに来る。
- 低速移動
 - 遅い移動。特殊なケースで使用する。
 - 全く足音を出さず、低速移動時はアイテム使用の手助けとなる照準(未実装)が表示される。

移動状態や移動場所によって足音も変わるよう設定してます。
細かい音の変化ですが凝りました。

## メニュー
メニューは徹底的に黒と白を基調としたシンプルなUIとしています。
こうする理由は下手に派手にしてホラー要素を損ないたくないから、黒と白が織りなすデザインの美しさをプレイヤーの皆さんに知って頂きたいからです。

### アイテムメニュー
![ItemMenu](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318712/43c16bef-a9f1-bdac-404c-72a3f0cf9387.png)
現在所持している道具の一覧を表示します。
アイテム説明文は効果や使い方というより、雰囲気を出すためにアイテム設定を書いています。~~アイテム効果は使って理解しろ~~
この画面ではアイテムを置くなど、「使う」以外の補助的な動作を行います。

### 敵一覧
![敵一覧](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318712/d9dc33e9-bce6-dc2b-5f73-705a7db4569c.png)
敵一覧メニューは敵に接近したり特定のアイテムを使う事で埋まります。
敵には原則4種類存在し、それぞれ以下の特徴を持っています。

- 為手(シテ)：マップに1、2体存在する主役級の敵。**足止めは可能だが倒す事が出来ない。**
- 脇(ワキ)：マップの補助的な敵。人数制限は特に無く、道具などを使えば倒せる。
- 連(ツレ)：一部の為手に付随する敵。道具などを使えば倒せるが一定時間後に復活する。
- 脇連(ワキヅレ)：一部の脇に付随する敵。道具などを使えば倒せる。

日本の伝統芸能である能楽に明るい人なら察しがつきました通り、敵分類は能楽の役者の分類に大変近い物となっています。
為手と脇が東方キャラクターで、連と脇連が一部のキャラクターに付随するキャラクターです。([アリス](https://dic.pixiv.net/a/%E3%82%A2%E3%83%AA%E3%82%B9%E3%83%BB%E3%83%9E%E3%83%BC%E3%82%AC%E3%83%88%E3%83%AD%E3%82%A4%E3%83%89)における[上海人形](https://dic.pixiv.net/a/%E4%B8%8A%E6%B5%B7%E4%BA%BA%E5%BD%A2)、[お燐](https://dic.pixiv.net/a/%E7%81%AB%E7%84%94%E7%8C%AB%E7%87%90)における[ゾンビフェアリー](https://dic.pixiv.net/a/%E3%82%BE%E3%83%B3%E3%83%93%E3%83%95%E3%82%A7%E3%82%A2%E3%83%AA%E3%83%BC)など)
~~上の画像の連と脇連がダミーテキストなのはみんなには内緒だよ~~

ちなみに[フラン](https://dic.pixiv.net/a/%E3%83%95%E3%83%A9%E3%83%B3%E3%83%89%E3%83%BC%E3%83%AB%E3%83%BB%E3%82%B9%E3%82%AB%E3%83%BC%E3%83%AC%E3%83%83%E3%83%88)ちゃんの名前の伸ばし棒は`ー`ではなく`丨`を使っています。
この縦棒は`引`の右側だそうです。

# 終わりに
今年の9月ごろから制作を開始しましたが、現時点で結構形になって来たと思います。
しかし未実装の部分の方が多いのも事実なので今後もこつこつと実装を続けて行きたいです。
来年の上旬にはテスト版を出したいですね。

# (おまけ)実装予定のゲームシステムと仕様

最終的に以下の機能を全て実装したいと思ってます。

- 迷宮が不思議のダンジョンとなっており、**毎回形状が異なる。**
- 迷宮には敵が複数体存在し、シテとワキに分類される。
- 敵の強さはEasy,Normal,Hard,Lunaticの4種類が存在する。
 - Easyは脇限定、Lunaticは為手限定。
 - 英語だと雰囲気に合わないので能に合わせて生成、般若、蛇、真蛇に変えるかもしれない。
- クエスト(仮称)によっては**アイテムが完全未識別。**
 - どんな道具も使わないと分からないし、使ったところで名前が識別される訳でもない。
 - 道具の入手時に「やった〜強アイテムだ〜」などと言う安心感など与えさせない。