投稿記事

シミュレーションの記事 (7)

D’s Production 2020/07/30 05:26

《虐殺大陸の明けぬ夜7》交戦システムの評価

初めに


《虐殺大陸》は、ご承知の通り大陸統一を目指して領土を奪い合う戦略シミュレーションタイプのゲームである。フィールドマップと呼ばれる大陸地図の上で軍隊を派遣し合い、敵領土を奪ったり自国領土を守ったりするのが醍醐味である。

その際の敵の行動を統制するAIのプログラミングに苦労したというマクロ的な話が前回の記事だが、今回はよりミクロ的な話題、軍隊同士が衝突した際の戦い「交戦」について書きたいと思う。

今回はそのシステムのプログラミング的な話ではなく、またその構築に際しての苦労話でもない。
「交戦」というシステムがゲームとしてうまくできていたか、それともそうではなかったかという評価の話である。
そこには私が「理想とするゲーム」についての話も関わってくるのだが、私にもそれについての明確な答えが見付かっているわけではなく、未だ思案の最中にある。読者・プレイヤーの皆さんと共に、この問題について考えていけたら幸いである。

理想的な戦闘形式の模索

《虐殺大陸》ではフィールドマップで手持ちの部隊を編成し、師団として敵領土に派遣、敵の軍隊(城の守備隊や師団)と接触するとそこで「交戦」が起こるというシステムになっている。

《虐殺大陸》の前身として《リョナラーの野望》(未完)という作品があることは既に前の記事で書いた通りである。
実はその《リョナラーの野望》での交戦は《虐殺大陸》のそれとは違い、碁盤目状のマップの上でコマを進め合うような形式(タクティクス戦闘)であった

ストーリーの展開に沿って戦闘が起こるタイプのゲームならばそれで良いのだが、《リョナラーの野望》や《虐殺大陸》では戦闘の起こるタイミングはゲームの進め方により、非常に不規則的であり、その回数も多い。クリアまでに、通常100回以上は戦闘をすることになる。
100回以上もの戦闘で毎回コマを進め合う作業を繰り返すのは非常に面倒なことであると私は感じていた。
もっと簡易な戦闘システムを構築する必要がある。そう強く感じたのである。

「最も簡易」なシステムとしては、互いの戦力を比較して一瞬にして自動で勝敗が決し、プレイヤーが一切関与しないものであろう。
もう少し複雑にすると「覇県を握れ ~47都道府県大戦~」(ふらいんぐパンジャンドラム制作)のような形式になる。これもプレイヤーは数回の操作をするだけで、たとえ何百部隊が戦闘に参加していても勝負がつくのはほぼ一瞬である。


▲「覇県を握れ ~47都道府県大戦~」の戦闘画面。
(https://www.dlsite.com/home/work/=/product_id/RJ237627.html 作品紹介ページより)

「覇県を握れ ~47都道府県大戦~」のような何度も繰り返して遊ぶようなゲームの場合、このくらい簡潔な形式であることは望ましいことであろう(私は多分5、600回くらいはプレイしていると思う)「覇県を握れ」についていえば、ゲームシステム、ゲームコンセプトに即して最適な戦闘形式になっていると言って差し支えないと思う。

方や、私が作ろうとしていた《虐殺大陸》では単に結果が示されるだけでなく、勝敗に至る過程をプレイヤー自身が作る感覚が必要だと考えていた。

例えば敵は騎兵部隊がメインであるとすると、こちらはそれに対抗するため槍兵部隊を量産する必要がある。もちろん槍兵だけでは駄目で、その弱点を補強する他部隊も作る必要がある。
単にデータだけで決まり結果だけを示されるのではなく、実際にそれらの部隊をプレイヤー自身が運用してみて、彼らが活躍し、あるいは苦戦し、時には死傷する様も目の当たりにする。
そこまでして「本格的」な戦争ゲームになるのではないか。
そして戦術性、ひいてはその戦闘に至るまでの準備段階での試行錯誤──つまり戦略性も重視することで、本格的な戦略シミュレーションゲームになるのではないか
そう思ったのである。

一方で一回一回の戦闘の煩わしさを減らしたい。
一方で一回一回の戦闘の重みを増したい。
そのようなアンビバレントな欲求を実現するために生み出されたのが《虐殺大陸》の交戦システムであった。


こう言うと「覇県を握れ」は本格的な戦争ゲームではないとディスっていると思われるかもしれないが、とんでもない話である。
「覇県を握れ」を何度もプレイすると、そのプレイの大半は戦争を避けるように振る舞わざるを得ない。つまりこのゲームは「戦争ゲーム」を超越した「政治ゲーム」であるのだ!
《虐殺大陸》は今ではまだ「戦争ゲーム」に留まっているが、私はゆくゆくはこれをより高次の「政治ゲーム」に昇華するつもりでいる。

《虐殺大陸》の交戦システム

《虐殺大陸》の交戦では下図のように、両軍が左右に別れて対峙する。
左側が敵軍、右側が味方の軍である。

敵味方それぞれ、横3マス、縦5マスの計15箇所に部隊を配置するスペースがある。
このマスの任意の場所に10個まで師団内の部隊を配置できるが、前の10マスは最前線、後ろの5マスは後方と区別されていて、兵科ごとに攻撃の届く範囲が異なっている。
(例えば騎兵や槍兵は最前線から最前線にしか攻撃できない、弓兵と魔導師は後方から後方まで攻撃できる、など。なお最前線を空にして後方だけに部隊を配置することはできない。)

部隊を配置し終えたら、各部隊が攻撃する敵部隊を選択し、それを終えたら敵・味方両軍の部隊それぞれの敏捷性に従って攻撃順が決定され、攻撃が実行される。
(部隊の配置は必ず敵側から行う。だからプレイヤーは敵軍の配置を見た上で自軍の配置を決定できる)

ここまで説明すると勘のいい人は気づくかも知れないが、1ターンの各ユニットの行動をあらかじめ選択し、その後それぞれの素早さに従って行動する」というこのシステムは、ドラゴンクエストやRPGツクール・ウディタのデフォルト戦闘のシステムと同じである。
つまり、《虐殺大陸》は戦争ゲームらしく指揮官や兵士などが所狭しと配置される絵面にはなっているものの、基本的には普通のRPGと同様の戦闘システムであるということである。

とはいえ、それで終わってしまっては「本格的」な戦略シミュレーションにはなり難い。
戦争ゲームらしい戦略性・戦術性が問われる工夫がいくつか凝らしてある。

《虐殺大陸》交戦システムの特徴

兵士の数が攻撃力にも防御力にも影響する

1部隊は指揮官1人と随行する兵士10人の計11人で構成されている。


交戦ではこの11人が全員で目標に向かって攻撃を仕掛ける。
そして11人それぞれにHPが設定されており、攻撃を受けると減少、0になると死傷する。
当然11人全員が揃っている状態で攻撃するのと、5人しかいない状態で攻撃するのでは攻撃力に2倍程度の差が生まれる。

また各員の攻撃は、相手部隊の兵士にそれぞれに満遍なくバラけて攻撃するようになっている。
(ただし指揮官だけは他の兵士がいなくなってから攻撃を受けるようになっている。)
よって、10人いる敵部隊から攻撃を受ける際に、仮に兵士が10人いる状態で受けるのと、5人いる状態で受けるのとでは、後者の方が受けるダメージは約2倍ということになる。

ユニット配置の自由性

通常のRPGでは死にそうなキャラクターがいたとしても、そのキャラだけを戦闘から外すということはできないだろう。取り得る手段としては、そのキャラのHPを回復するか、防御をさせるかというくらいではないだろうか。(前衛・後衛の概念がある場合は後ろに下がらせる、くらいのことはできるかも知れない)

《虐殺大陸》では、どの部隊を戦場に配置するかは完全にプレイヤー(と敵AI)の意思に委ねられている。
兵員が減ったり全滅しそうな部隊を退かせることもできるし、逆にそうした部隊を敢えて配置して捨て石にすることもできる(1部隊が相手の1部隊に攻撃することになっているので、全滅しかけの部隊で攻撃を受けた方が、受ける総ダメージ量は少ないことがある)

兵科ごとの相性

《虐殺大陸》には兵科が7つあり、それぞれ下記の表のように相性が決まっている。


相性の良い兵科に対して攻撃をすると与えるダメージが大きくなり、悪い兵科に攻撃をするとそれが少なくなる。もちろん、こちらが攻撃を受ける時も同様である。

よって、敵軍の配置を見て、なるべくそれに対して相性の良い部隊を配置するよう心掛けなければならない。
手持ちの部隊に相性の良い部隊がない場合は、負ける可能性が高いということも言える。

「兵科別有効射程距離」と「距離による攻撃力減退度」

兵科ごとに攻撃の届く範囲が異なるということは先述の通りである。
例えば弓兵は戦場の端から端まで矢を飛ばすことができる。それに対して騎兵は最前線から最前線までしか攻撃することができない。味方の部隊を盾にして、相手の攻撃の届かない位置から攻撃をするということが可能になる。

それだけでなく、距離は攻撃力そのものに影響を及ぼす。
具体的には距離が離れれば離れるほど攻撃力が減るのだが、その減り方は兵科ごとに異なっている


弓兵や魔導師は攻撃力が低いが、距離が離れていてもほとんど、あるいは全く攻撃力は減らない。
騎兵や獣戦士はそれなりに攻撃力が高いが、2、3マス遠ざかった敵に対しては攻撃力が大きく減少する。
魔神兵は絶大な力を持っているが、1マス隔たった相手にはほとんどダメージを与えられない。

兵科相性とも相まって、敵部隊との距離のとり方が非常に重要になってくる

最初は存在しなかった「距離による攻撃力減退度」

最後に紹介した「距離による攻撃力減退度」だが、開発初期の段階では実はこのシステムは存在しなかった。

もしこれが存在しないとなると、どうなるか。
最前線の部隊を配置できるマス目は全部で10個、この10マスどこに配置しても同じということになる。
(有効射程距離は最前線か後方かの区別しか無いので、最前線内のどこにおいても射程には関係しない)
また敵最前線の10マスにいる部隊は、どれを狙っても同じということになる。

となれば、「相性の良い兵科を攻撃する」以外の選択肢はなくなる
戦場にどの兵科の部隊を配置するかの采配はあるとしても、その部隊をどこに配置して、誰を攻撃するかについては選択の余地はほとんどない。

では完成版のシステムのように距離が攻撃力に影響を及ぼすとなればどうか。
敵部隊の配置を見てどこに部隊を配置すればよいかを考えなくてはならない。
仮に相性が良い相手に対しても、すぐ近くに配置すれば良いとは限らない。すぐ近くに相性の悪い兵科がいるかもしれない。
またそうでなくても、相手とこちらとでは距離によって左右される攻撃力の幅が異なる可能性もある。
例えば騎兵は歩兵に対して有利だが、騎兵は歩兵に比べて距離による攻撃力の減退度が大きい。だから歩兵は、騎兵からぐんと遠くに配置するとダメージを減らすことができる。
しかし戦場の広さにも限界がある。縦には5マス、最前線に限ると横には2マスしかない。遠くの敵にダメージを与えにくい兵科の部隊は、なるべく前方中央に配置するのが望ましい。
(最大の攻撃力を誇りながら距離による攻撃力の減少の最も大きい「魔神兵」は最前列に配置するのが望ましいのだが、敵AIはしばしば2列目に配置するという下策を見せる。実は敵のAIはゲームが進むにつれて徐々に賢くなるのだが、最終段階になってもそこまで賢くできなかったのは作者としては遺憾の極みである)

理想的な戦闘システム

当然、全部隊を中央に配置することはできない。全部隊を端に配置することもできない。
誰かが敵の真正面やその付近に立たざるを得ず、誰かが後列に立たざるを得ない。その制限の中でどうするかを考えるのがプレイヤーの腕の見せ所である。

もちろん位置や距離だけでない。
《虐殺大陸》をプレイされたことのある方ならお分かりになると思うが、敏捷性の違いや城の守備隊にもたらされる補正防御効果、君主・参謀を出撃させれば全軍の攻撃力が増すが彼女らが撃破されると一気に攻撃力が減るという綱渡りなど、諸条件がこの戦闘を一層複雑にしている。

つまり取り得る選択肢の数に幅があり、しかしあちらを立てればこちらが立たずで、どの選択肢も完璧ではない、それでも最善の方法を模索する──これこそが私の目指した戦闘システムのあり方であったのだ。

これは《虐殺大陸》に限った話ではなく、あらゆるゲームにおける私の理想でもある。

例えば、次のような戦闘をイメージしてもらいたい。
 ・主人公は1人、敵も1人、常にタイマン。
 ・主人公のコマンドは「通常攻撃」「回復」。
 ・敵も通常攻撃を繰り出してくるのみ。

このような戦闘では、プレイヤーはひたすら攻撃をし、HPが減ったら回復をするのを繰り返すだけの作業になるだろう。
ここには戦略性と言えるものはほとんどない。
仮に主人公のコマンドに、ダメージ量の多い攻撃技や回復量の多い回復技を加えたとしても、MP配分に若干の計算が必要なだけで基本的な作業は変わらない。(ここに眠りや毒などの補助魔法系の技を加えれば状況は少し変わるかもしれない)

このタイプの戦闘システムは決して珍しいものではなく、割によく見かけるものである。
それは別にゲームとして破綻しているということではなく、戦闘以外の要素(ストーリーなど)が売りの場合は戦闘はオマケ程度というものであって作者のこだわりポイントではなかったということで通用すると思う。ただしこの場合は、戦闘部分が明らかに蛇足的なものは確かに多い、というのが私の個人的な見解である。

それはそれで良いとして、私の理想はそれとは違った、そして《虐殺大陸》は私の理想に沿って制作された、ということである。

《虐殺大陸》の「交戦」システムの評価

私の理想に沿って作ったのは良いが、では私の理想通りのものに仕上がったのかというとそれは別問題である。
実際、この「交戦」システムは数々の欠陥を含んでいることは間違いない。

選択肢の狭さ

上では私が目指した戦闘のあり方として、「取り得る選択肢の数に幅があり、あちらを立てればこちらが立たずで、どの選択肢も完璧ではない、それでも最善の方法を模索する」と書いた。
しかし完成したシステムを振り返ってみると、上の「《虐殺大陸》交戦システムの特徴」で書いた数々の工夫にもかかわらず、依然として《虐殺大陸》の交戦では取れる選択肢が少ないのである。

例えば、敵の布陣に明らかな偏りがある場合(極端な話、単一の兵科だけを出撃させてきている場合など)は、こちらの工夫次第で戦局を有利に運べる。
けれども、敵がある程度完成させた布陣で臨んできた場合、こちらは(少なくとも敵以上には)有利に事を運ぶことができず、結局ある程度の犠牲を払いながら数の暴力で押し切るしかないということがある。
各部隊の行動が結局は「攻撃」しかなく、スキルが無いというのも原因の1つだろう。

もちろん「ほとんど犠牲なく完璧な勝利を目指したい」というプレイヤーの願望が叶えられるような世界観のゲームでもない・・・むしろ《虐殺大陸》の名を冠する戦争ゲームとしては今のままの方が適切とも言える。
とはいえ、これは交戦システムだけではなく、戦略パート全体のゲームバランスも相まって、私が先程批判的に書いた単調な作業の繰り返し」をどうしても強いられる部分がある

(クリックで拡大)
▲極端に偏りのある例。ケイクリッジやガンドヴァールを相手にすると、このようなことはよくある。


▲対処法は簡単で、騎兵の弱点である槍兵を最前線に配置し、後方には弓兵を配置。
弓兵は素早さが高いので、槍兵の弱点である歩兵が行動する前に倒すことができる。
相手の弓兵によってこちらの弓兵は倒されるが、弓兵は比較的少ない資源で生産できるので費用対効果は良い。


▲敵兵科に偏りがなく対処が難しい例。歩兵を置くと騎兵や魔神兵に、騎兵や槍兵を置くと獣戦士にやられる。
ライトニングフォードの獣戦士は能力が低い上に、魔神兵が最前列にいるため配置し難い(獣戦士は少し離れると攻撃力がかなり減るため2列目に置いてもほとんど攻撃が通らない。1列目に置くと魔神兵に殺される)。
魔神兵を使えれば良いが、魔神兵を大量に配備するためにはある条件を満たす必要がある。


▲制作者の模範解答はこうである!(迫真)
歩兵を使ってできるだけ獣戦士を叩く。何ターンも根気よく攻撃すればそのうち相手の兵科にも偏りが出てくる。兵隊がたくさん死ぬが、その屍の山の上に平和は築かれるのだ!
もし魔神兵をたくさん用意できるならば、魔神兵を最前線、弓兵を後方に置き、魔導師を弓兵で先に倒すという手もある。ただしライトニングフォードの魔神兵はコストが高い割に能力はそこまででもない。

変化のない戦闘システム

ある意味、この交戦システムは完成されすぎてしまっている感もある。
通常のRPGでは、新しいステージに行くと新しい敵キャラが出るものだろう。
《虐殺大陸》では、序盤では一部の兵科が作りにくいとか、隣接している国は一部の兵科を使ってこないというようなことはあるにしても、最初から最後まで、たった7つの兵科(=7つの味方キャラ・敵キャラ)しか出てこないのである。

敵国の首都城には各国固有の君主と副官がいるのだがこれもストーリーの都合でいるだけで、キャラ性能に一定の特徴こそあるもののボスと言えるような強敵ではなく、つまりゲーム戦略には何も関わってこない存在である。

《虐殺大陸》は最初から最後まで、一貫して変化のない戦闘を戦っていると言って良い。
しかもそれを100回以上に渡って繰り返さなくてならない。

煩わしい攻城戦

変化をつけるためのシステムとして、城レベルによって守備隊の防御力が上がるというものがある。

城レベルの上げ方には敵国家ごとに特徴があり、例えばケイクリッジはほとんど無頓着、対してユングリオは内政ごとにほぼMAXにまで自国の城レベルを上げてくる。
その城レベルは攻めて交戦で死傷者を出すたびに下がるので、攻めるたびに戦況は変わる。攻めれば攻めるほど有利になる。

そういうコンセプトではあるのだが、実際にはこの城レベルのシステムのおかげで攻城のための手間は格段に増えており、プレイヤーには煩わしさを強要しているというのが実情であっただろう。

実はゲーム制作の中盤から終盤あたりになってこのことに気づいた私は、新しく「砲兵」という兵科を追加して敵の城レベルだけを下げる手段を実装することを思いついたのだが、思いついただけで終わってしまった。その頃には既にシステムはほとんど完成されており、当初の想定外の事柄を組み込む余裕がなかったためである。「この交戦システムは完成されすぎてしまっている」と言ったのはこういう制作側の都合をも指している。
もちろん、新しい兵科のためのイラストを描くのが躊躇われたということもある。
何とも覇気のない態度だが、思いついたものをすべて実装していれば、作品は永遠に完成しないのだ!

総評

「一方で一回一回の戦闘の煩わしさを減らしたい。
一方で一回一回の戦闘の重みを増したい。」

この2つの希望は、どちらかと言えば後者の方に傾いてしまってバランスを欠いた
、というのが私の正直な感想である。

もちろん悪いことばかりではない。

もともとこの交戦システムは、1回のゲームで100回以上繰り返すことを前提に、プレイヤーの手間を削減することを目的に組まれたものである。
《リョナラーの野望》のようなタクティクス戦闘に比べると遥かに簡単であるので、部分的にはその目標は達成していると言って良い。

煩わしさを回避するために、防衛戦時には一瞬で勝負が終わる自動交戦のシステムも用意されている。これは上に書いた私の理想としての戦闘からは大きく外れることではあるが、ゲーム全体のバランスからすると悪くない判断だったと思う。

終わりに

今回はもしかしたらゲーム中でも最も長い時間を使うかも知れない、《虐殺大陸》の「交戦」システムに焦点を当てて作者自身の反省を書いてみた。

もちろん戦闘システムだけで評価することはできず、ゲーム全体の中でそのシステムが調和的に作用しているかが重要であることは本文中でも指摘している通りであるが、そのためにもシステムそのものを精査することは非常に重要である。

そのシステムには良い点も悪い点もあったが、何より独自の戦闘システムを開発したというそのこと自体が評価に値することだと、自分では思う。
これは非常に野心的な試みであり、この野心こそ同人作品としては最も欠くことのできない要素であると言って良かろう。

終盤では飽きが来るとはいえ、序盤から中盤まではプレイヤー自身が自分の采配で軍隊を作り上げる戦略パートのシステムとも相まって、戦争ゲームとして程よい高揚感を得られるシステムになっていたのではないか。
私はそう思うのだが、プレイヤーの皆さんはどうお考えだろうか。

まだプレイされていない方は、是非この機会にプレイしてみていただきたいと思う。


虐殺大陸【完全版】 D's production

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

D’s Production 2020/05/02 15:23

《虐殺大陸の明けぬ夜6》敵AIのアルゴリズム

はじめに - “簡単”なレベルデザイン

皆さんはどれくらいのレベルのゲーマーであろうか?

「レベル」というと曖昧だが、ここでは腕前とそれを振るいたいという気持ち──つまり挑戦心という程度の意味で考えてもらいたい。平たく言うと、どれくらいの難易度のゲームを好むかということである。

ジャンルにもよるが、私自身は「ごく普通」だと思う。
つまり、あまりに難しすぎるのは嫌いだが、簡単すぎるのも好まない。
ほどよく難しく、ほどよく簡単なのが良い。

ゲーム開発者にとって難しさのデザインは最も困難なことの1つだと聞く。
どの程度のレベルのプレイヤーを想定するのかから話を始めなければならないが (そしてそれは宣伝の仕方にも関わってくる。間違った宣伝をすると、不本意な非難に晒される) 、もちろんその想定したプレイヤーに最適の難しさにするのも簡単なことではない。

よくあるのが、作者自身は開発段階で何度もプレイするので慣れていき、どんどん難しく設定していき、最終的には鬼畜ゲームとでも言うような難易度になるというものである。
しかしそのことを踏まえて甘く設定しすぎると極端にヌルゲーになってしまうこともある。

そういった「最適な」レベルデザインの難しさの話は枚挙に暇がないが、誤解を恐れずに言えば実は難易度を上げることも難易度を下げることも開発者にとっては難しいことではない。数値をいじればよいのである。

例えば敵の攻撃力を上げる/下げる、味方の防御力を上げる/下げる、成長率を上げる/下げる・・・
全ては数値であり、それをいじるのは極めて簡単なことだ。ゲームの世界にとって、開発者は神のような存在なのである。ついでに言うと、その意味ではチーターも同様の存在になれる。
(※チーター:哺乳綱食肉目ネコ科チーター属に分類される食肉類のこと、ではなく、「チート」という、ゲームに備わっていない機能を用いることで優位になる行為をする人のこと)

《虐殺大陸》では、(これもある種の敗北宣言なのだが)難易度調整をプレイヤーに任せるという方法をとった。難易度設定機能の実装である。

Lv.0~5の6段階をプレイヤーに選ばせる。(Lv.5は一度ゲームをクリアした後に選べるようになる。作者もクリアできなかったが、公開後これをクリアした人が現れた。脱帽!)

これによって変わるのは基本的に数値である。
簡単に言うと、レベルを下げるほど味方の攻撃力と防御力が上がる。ついでに敵がプレイヤーの軍に向かってはあまり攻めてこなくなるが、これも数値の変更である(敵が攻めてくる確率と、攻めてくる人数を変更している)。

この難易度変更のシステムはシミュレーションゲームに限らず、あらゆるゲームにおいて使われている手法で、幅広いプレイヤーに向けて、快適にプレイしてほしいという気持ち(そして不本意な非難を避けたいという気持ち)から来ていると思う。

《虐殺大陸》では各レベルに名前を付けており、Lv.1が「易しい」Lv.3が「通常」Lv.4が「難しい」である。
作者が頑張って最適にデザインした難易度はLv.3だとしており、特に変更しなければゲームはLv.3で始まることになっている。手応えのある、しかし必ずクリアできるレベルのシミュレーションゲームをやりたい人は是非「通常」のままプレイしてほしいと思う。

さて、前置きが長くなったが、今回書きたいのはレベルデザインのことではない。
それは数値をいじるだけでできる“簡単”な調整なのだと言いたかった。

この“簡単”はあくまで括弧つきの“簡単”である。
数値調整によるレベルデザインというものがゲームバランス、ひいてはゲームの全体の面白さ・満足度に大いに影響するということは言うまでもないことである。
しかし言うまでもないことなので、この記事の読者には敢えて言わなかったまでのことである。つい言ってしまったがね・・・

それではできない、アルゴリズムの話がまたしても今回のテーマである。

敵に「思考」をさせるということ

シミュレーションゲームの面白さはどこにあるか?それは文字通りの「シミュレーション」にあるのではないか。

《虐殺大陸》は戦略シミュレーションゲームだから、まさしく戦略──つまり戦争指導をシミュレートするところに醍醐味がある。

とはいえ、ゲームらしく簡略化されているから、実際に体験できるのは兵力の増産と、増産した兵力の配置・派遣先の決定といったところにとどまる。かなり程度が低いシミュレーションだが、そこは勘弁していただきたい。

ここで重要なことは、「自分にできることは相手にもできる」ということである。
もちろん多少の差異はあっても良い。その方が各勢力に特徴が出て面白みが増す。しかし基本的にできることはどの勢力も平等であるべきであろう。

「自分ができることは相手にもできる」

─口で言うのは簡単だが、いざ実際にゲームにそれを組み込むのは骨が折れる作業である。こちらは人間、相手はコンピューターだ。人間がひと目で理解できることも、1つ1つプログラムによって理解させなければならない。

具体的に言うと、どの程度の兵力を作り、どこにその兵力を配置し、どのタイミングで敵城にそれを派遣するのか、それを敵AIに決定させなければならない。

適当に決定するわけにはいかない──ということは、周囲の状況を把握する必要があるということを意味する。

現状の把握 - データベースの活用

例えば城Aには現在守備隊が10部隊ある。
隣接する敵の城Xには5部隊、同じく敵城Yには10部隊、敵城Zには30部隊がいるとする。

さらっと「隣接する敵城X、Y、Zには・・・」と書いたが、当然コンピューターにはそんなことはわからない
人間の目には明らかに隣接している城同士でも、データベースには、単に城1、城2、城3・・・と並んでいるに過ぎない。だから、城1と城2が隣接している、城1と城3も隣接している、と一つ一つ入力してやる必要がある(もちろんその際、城1のデータベースに「隣接している城1、2、3・・・」という項目を用意して、その中に具体的な数値を格納するという作業が必要になる)。


▲人間はこの画像を見ると一瞬でその状況を理解できるが・・・


▲コンピューターにはこうでなければいけない。
余談ながら、ウディタにはありがたいことに、もともと「データベース」という、まとまった変数のグループのようなものが存在しており、ユーザーが自由にこれをカスタマイズすることができる。(一応、「ユーザーデータベース」「可変データベース」「システムデータベース」という3種類があるのだが、ここではその説明は省略する)

例えば《虐殺大陸》には「城」が22個存在している。その22個の城の設定を総合的に格納する場所として、このデータベースを活用している。

まず「城」という【タイプ】を用意し、その中に22個の【データ】を用意する。
【データ】はさらに【項目】に分かれており、その中に、例えば「城名」「X座標」「Y座標」などを格納する。

例えば【データ1】には「城名:ライトニングフォード城」「X座標:10」「Y座標:20」などの【項目】が格納されている、といった具合である。

仮にカーソルが(10,20)の座標にある時に決定キーが押されると、【データ1~22】の【項目X座標、Y座標】が検索されて、合致したデータ番号の【項目:城名】「ライトニングフォード城」を返してくれる。

これとは別に、単に数字順に並んでいる「通常変数」というものもあるのだが、これだけで上記のような処理をしようと考えたら、途方も無い苦労が必要であることは容易に想像がつく。

《虐殺大陸》の制作は、このようにウディタという非常に便利なツールに助けられていることは改めて言うまでもないことだろう。


▲ウディタのデータベース実例。項目の名前や種類(数値・文字列)などは自由にカスタマイズできる!

ついでながら、《虐殺大陸》はリアルタイムシミュレーションであるので、いつでも城の中に部隊がいるとは限らない。
城Aと城Xをつなぐ街道上を敵10部隊が進軍中かも知れない。「城Aと城Xをつなぐ街道は、街道S、T、Uである」ということも合わせてデータベースに登録し、この街道上にある師団を検索するシステムも組む必要がある。

面倒な作業だが、やってやれないことはない。
コンピューターは人間とは違って勤勉である。命令されたことは愚直にやる。それゆえ、下手なやり方をすると処理が重くなるのだが、その辺りの苦悩については前の記事で述べたので、改めて繰り返す必要はないだろう・・・

さて、そのような方法で、当該の城に隣接・接続する城や街道がどこかを把握できれば、あとはそこの部隊数を検索・計算して足し合わせるだけである。こうすると、「それぞれの城が、今どの程度の敵兵力に晒されているか」が分かる。
例えば城Aは敵兵力55部隊、城Bは60部隊、城Cは10部隊・・・などという形である。
(もちろんこの中には重複して数えられている部隊もあるが、ここではそれは問題にしないことにした。本当はそこも考えた方が良いのだろうが、それを考えることは私の限界を超えていたのである)

このように「現状を把握する」ことは、複雑なシステムが必要になるかもしれないが、根気よくやれば不可能なことではない。
問題は、「現状を把握した上で、それに基づいて判断する」ということである。
実は、これがあらゆるシミュレーションゲームの(あるいはRPGやアクションゲームでも)面白さの根幹に関わることだと思う。

つまり「敵AIがどれほど賢いか」ということである。

現状から次の行動を判断する

どれだけ複雑で面白いシステムの戦闘であったとしても、常に敵が何の考えもなしに攻撃を繰り出してきたり完全にランダムに行動するというのでは、シミュレーションゲームとしては失格であろう。

「こちらができることは相手もできる」──これが基本であり、これは即ち「こちらが考えつく手は相手も考えつく」ということをも意味する。
そうでなければ「敵AIはおバカ」と言われてプレイヤーの失笑を買うことになる・・・のだが、そのようなゲームは枚挙に暇がない。
そして残念ながら、開発者自身の自己評価としては、《虐殺大陸》はその例の一つに数えられる可能性がある、と思う。

話を戻して、戦力配置の問題である。

自軍の戦力配置と、敵軍の戦力配置の現状については把握できている。
次に考えなければならないことは、この上でどのように自軍の戦力を配置し直すかあるいはどのように敵に向けて進軍させるか、である。

コンピューターに対して「良きに計らえ」は通用しないことは再三繰り返すまでもあるまい。人間がプログラミングという形で指示してやる必要がある。

ここまでお読みの読者諸君ならば当然のようにご存知だと思うが、ここで使うのは「条件分岐」である。
ある条件を満たすならばAの処理に進む、そうでなければBの処理に進む、という司令が条件分岐である。

例えば、城Aの自軍兵力が、その周囲の敵兵力よりも少ない場合は、城Aに別の城から兵力を回す、などという判断をすることができる。
もちろん、この処理を城Bにも、城Cにも適応することができる。

ここで少し問題があることに気付くと思う。
このようにして、不足している城に兵力を回すようにしていくと、(本当に十分に兵力がある時は良いとして)どこかの段階で兵力が足りなくなるだろうということである。

そもそも、「兵力を回す」ということは別の場所から兵力を移動させるということだが、その「別の場所」とはどこか。
・城Aの兵力が不足しているので城Bから兵力を回す。
・今度は、その城Bの兵力が不足しているので、城Cから回す。
・今度は城Cの兵力が・・・
ということで、最終的にまた城Aから兵力を引き抜かなくてはならない。無限ループである。

もちろんこれは、単にプログラミングの話ではなくて、実際の戦争でも司令官はそのような苦悩に悩まされただろう・・・
作者の知能を超えるゲームを、作者は作れないのである。

この問題を解決するためには、現状の自軍兵力というものから逆算して、各城に分配できる兵力数というものを割り出さなくてはならない。

自軍に全部でxの部隊があるとして、城Aには20、城Bには15、城Cには30・・・とそれぞれの割当数を決定する。
現在各城に駐在している兵力は、城Aは15、城Bは5、城Cは45・・・だとすると、城CからAに5、Bに10の兵力を移動させれば良いということになる。

このやり方の問題は2つある。
・1つは、「各城の兵力割り当てをどのように決定するか」、という問題。
・もう1つは「どの城からどの城に向けて兵力を移動させるか、それをどのように決定するか」という問題である。

各城の兵力割り当て

1つ目の「各城の兵力割り当て」の問題だが、《虐殺大陸》では各国に首都城というものが設定されており、この首都城を攻め落とされるとその国は直ちに敗戦というシステムになっている。

だから、首都城は言うに及ばず、その首都城への侵攻ルート上にある城は、その国にとっては必ず守らなければならない要衝ということになる。よって、城ごとに防衛の優先順位というものができるのである。
正直なところ、首都城から遠く離れた辺境の城というものは、上記の点では守らなくても良い城ということになる。

そこで私は国ごとに、各城の優先順位というものが定めることにした。
例えば首都城の優先度を30、その周辺の各国固有の領土にある城を10、ミリタ市などの軍事的要衝を10、その他は1などとする。その上で周囲の敵兵力を踏まえて、各城の兵力割合を掛け算で計算する。

これは非常に単純な考えで、
 その城の周囲の敵兵力 × その城の防衛優先度
でその城の兵力割り当てを計算するというものである。
(そうすると城ごとの必要兵力の比率というものが計算される。あとは実際に使える兵力をその比率に従って分配するだけである。ややこしいが小学校の算数でできる計算ばかりだ!多分)

そうすると、必然的に次のような兵力配備になる。

敵戦力に囲まれた最前線だが、優先度が高くない城:
 ここは侵略されても良いので、守備隊の兵力はほどほどで良い。

優先度は高いが、周囲にはそれほど敵がいない城:
 ここは侵略される可能性が低いので、やはり守備隊はほどほどで良い。

優先度が高い城が最前線になり、大兵力に囲まれている:
ここは防備を固めるべきであるので、大量に守備隊を配置する必要がある。

首都城目前にまで敵が侵攻してきている:
 一大事なので、すぐにでも首都城に兵力を結集しなければならない。

しかしながら、いかに辺境の城でも、また最前線ではない内地の城でも、守備隊を1部隊や数部隊などにすると敵の侵攻を受けた時にたちまちそこを突破されてしまう。だから最低の部隊数は駐留させておく必要がある。(いわゆる「縦深防御」というものである)

そのために、各城の最低守備部隊数を決めておき、その数の兵力だけは常にその城に駐留させることにした。
これによって、極端に防備の薄い城から攻め入り、その国の首都城の兵力が少ない内に電撃的に占領する、という方法は取りづらくなっているはずである。

兵力の移動

次にもう1つの問題である「兵力移動」の問題であるが、正直、これは《虐殺大陸》のAIの欠陥の1つであると言わざるを得ない。

上記の方法で、「どの城に、いくらの兵力が必要か」は算出できる。しかし実際にその城に兵力を送り込むのは容易ではないのである。

なぜならばこのゲーム《虐殺大陸》はリアルタイムシミュレーションであり、各城は不規則に連結されており、そしてそれらの城の間には不規則な距離が存在しているからである。
人間ならば「見れば分かる」ことも、コンピュータにそれは通用しない。

仮に城Aに兵力を30送る必要があったとして、
・城Bから30送るか
・城Cから30送るか
・あるいは城Bだけでは余剰兵力が不足しているので5だけ送り、城Cからは25送るのか

などといったことを考えないといけない。

しかも、送っている途中で敵軍と遭遇して予定通りに兵力が届かないという可能性もある。

今から思えばもう少しこの問題について考えてベストとは言わずとも、ベターなアルゴリズムを考えればよかったのだが、私は考えることをやめた。
最も安直な方法をとった。

「すべての余剰兵力を一旦首都城に送り、首都城から各城に必要兵力を送る」という方法である。

《虐殺大陸》を実際にプレイした方は、なぜか敵師団がひっきりなしに各城と首都城の間を往復しているのを不思議に思ったかもしれない。
これは私が「諦めた」からである。


▲首都城と各城を往復する敵師団

人間が見れば、仮に隣接する城AとBがあり、AからBに10の兵力を送れば良いだけ、という状況でも、敵は一旦Aから首都城に兵力を10送り、その上で首都城から10部隊を再出陣させBに送る、という回りくどいことをする。

もしかしたら「前線と本国が頻繁に連絡を取り合っている」「前線から実戦経験のある部隊を引き抜いて別前線に送り込んでいる」といった裏設定の表現と思われた人もいるかもしれないが、実際には単にシステムの問題である。

何はともあれ、これで、あまり利口ではないがプレイヤーに簡単には勝たせない防衛ステムはできた。
しかし問題はこれでは終わらない。

攻勢問題

上記の兵力分配に関してだが、防御のことだけ考えればこのやり方もそれなりには機能するのだが、攻勢のことを考えると非常に心許ない。防衛面での優先度は低くても、逆にこちらから敵国に侵攻するということを考えれば重要な拠点になる城はあるからである。

本来はその国ごとの攻勢も含めた戦争指導計画というものに基づいて各城の兵力配置のバランスは決定されるべきなのだが、実は《虐殺大陸》このようなことは全く考えられていない。

こちらの首都を目前に帰っていってしまう敵師団

首都から遠い城はほとんどすべて辺境である。

プレイヤーの中には、自国の首都目前にまで敵の侵攻を受けた人がいるかも知れない。
さらには参謀から「敵国が首都城への侵攻作戦を企画している」と警告を受けた人もいるかも知れない(敵AIがプレイヤーの首都に攻め入る前に警告されるシステムになっている)

しかしその後その人は、せっかく首都目前にまで迫った敵軍が、なぜかその大部分を引き抜いて本国に帰っていってしまうという事態を目撃したであろう。
仮に30部隊の敵軍がいて、そのまま25部隊くらいで首都に攻め込んでくると、こちらは負けてしまう──
そのような状況下で、しかしその25部隊は敵国は退却していく・・・

この珍妙な出来事は上述のことが原因で、「敵国(プレイヤーから見ると自分の国)の領土は別に防衛しなくても良いので、最低限の兵力しか置かない」という判断によるものである。
(現実にはコンピューターは判断はしておらず、単にデータベースの数値を読み取って、必要な兵力を計算しているだけなのだが・・・)

このように、敵AIに「攻勢作戦」というシステムを与えられなかったことは、戦略シミュレーションゲームの開発者としては遺憾の極みである。

だが無思慮で無謀な敵AIこそが実は驚異に

ただし、実際にプレイした人の中には、敵の攻勢に苦しめられた経験のある人も多いだろう。
特に序盤から中盤にかけて、こちらの兵力が少ないうちは、敵師団が自国領土に攻め込んでくるのがそれなりに手痛い打撃になるバランスにはなっている。

これはどのようなアルゴリズムによるのかと言うと、実に簡単で、

「隣接する敵城の兵力に対して、こちらの城が一定程度の割合の兵力を持っていると、攻撃を仕掛ける」

というものである。

例えばこちらの城A、敵の城Bがあるとして、自城Aに敵城Bの【3分の2】以上の兵力がいると有無を言わさずその【3分の2】以上の部隊を師団として送り出して攻撃する。
(【 】の割合の部分は国家によって異なっており、例えば文明レベルの低いケイクリッジなら1/3、人権意識の高いユングリオならば4/3などである。またゲームの進行度と難易度によっても異なっており、ゲームが進むほど、また高難度にすればするほど、敵は頻繁に攻めてくるようになる)

もちろんそうすると、当初の予定通りに戦力配備が進まず、特に最前線の兵力がゴリゴリ削られていくことになる。

しかしこれはそう大きな問題にはならない。
基本的に兵力はいつでも足りていない。その足りない兵力を各城にどのように分配するか、を上記の兵力割り当ての方法で決定することにしている。

《虐殺大陸》はリアルタイムで進行するため、兵力割り当ても一定期間ごとに行われる。一定の時間が経てば、その時の保有兵力に応じて新しい割り当てが計算され直す。
結果、前線の兵力が足りないとなると、続々と(他の城から首都城に兵力が戻された上で)首都城から最前線に向けて兵力が送られていくということになるのである。

無論、敵もプレイヤーと同じく一定期間ごと(内政のタイミング)に資源の許す限り部隊を増産している。結果として、前線で交戦が行われている限り、常に「首都城から前線に部隊が続々と送られていく」という図式になる。

このゲームでは、基本的に戦力の逐次投入は推奨されない作戦である。
小規模部隊で敵の守備隊の戦力を削り、あるいは一時的にそこを占領したとしても、新たに敵の本国から次々に増援が送られてくるので、結局互いに戦力を少しずつ削り合う泥沼の消耗戦になってしまう。

その点はこのゲームのよく出来ている部分だと思う。
つまり、

こちらが小規模部隊を逐次投入すると、敵はすぐに増援を出してきて戦力補充してしまい、泥沼化する。
 →プレイヤーが勝利(ゲームクリア)を目指すためには、大部隊を用意して決戦を挑む必要がある

しかし敵は、(プレイヤーにとっての悪手である)戦力の逐次投入をして来て、プレイヤーの戦力を削りに来る。
 →結果プレイヤーは大部隊を用意することが難しくなり、決戦を挑むこともできなくなる。

 敵国(NPC)の目的は戦争に勝利することではなく、あくまでプレイヤーの邪魔をすることなので、これで良い。

プレイヤーと敵NPCではそもそも目的が違うので、この不出来なシステムでも十分に機能するというわけである。

そして上では「敵には攻勢作戦というシステムがない」ということを書いたが、プレイヤーが積極的に敵に攻め込んでいる限りは敵は防衛に回ることになり、そして防衛のシステムはそれなりによく出来ているので攻勢システムの不出来には気づきにくいのではないかと思う。

プレイヤーは、敵の散発的な攻撃を、なるべく自軍の被害を抑えながら食い止めつつ戦力の拡充をし、大兵力で攻勢を仕掛けて敵国の中核に攻め込む、という戦略を要求されることになる。
その中で効率の良いやり方、時にはシステムの穴を突くような方法を、プレイヤーの皆さんは考え出されたことだろうと思う。
(参考:
●111のデジ同人感想
●ひとりアウトプット広場
既に何度かこのシリーズでも紹介させて頂いた111さんとlosspassさんのブログである。)

いかにプレイヤーの思考を先回して予想して、その対応策を防ぐか、ということが敵AIを作る上でのプログラマーのするべきことだが、当然それをあまりに完璧にし過ぎるとゲームの難易度が上がり過ぎてしまう。
私個人の知能と技術の限界、そして怠慢等が重なり、開発者としては悔いの残るシステムになっている部分もあるが、完成したゲームを見たら程々に良い塩梅になっており、それなりに遊べるものになっている、それが私自身の評価である。(もちろん課題も多い)

皆さんはどのように感じただろうか。
もしまだプレイしていない人がいれば、是非今からプレイしてみて、開発者との思考合戦を楽しんで頂ければと思う。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

D’s Production 2020/01/02 16:42

《虐殺大陸の明けぬ夜5》物語の語り方

《虐殺大陸》は《虐殺大陸の明けぬ夜1》でも説明した通り、作者のやりたいシミュレーションゲームを作ることを目的として開発したゲームである。
全てに先んじて、「ゲーム」が最初にあった。
その他の要素、例えばグロとかエロとか、そしてストーリーなどは後付けである。

グロやエロが必要だったかについては自分自身否定的に思うところがあり、それは後の記事に譲ることにしたいのだが、しかしストーリーや世界設定などについては今ではなくてはならないものだと思うようになった。それらは《虐殺大陸》を構成するうえで不可欠で、《虐殺大陸》という作品とは切っても切り離せない不可分な要素なのである。
私はそう思っているのだが、けれどもプレイヤーがどう思っているかは正直わからないところである。感想を送ってくれる人の中にはストーリーに言及してくれる人が結構いるのだが・・・

「重厚な政治劇」

これは《虐殺大陸》の宣伝文句の1つである。
これに惹かれて購入するユーザーはほとんどいないであろうことも理解しているが、実際にプレイした人の心に残らないのであれば例によってこれは作者の責任であろう。問題は作品にある。

ただ、作者の手腕や技巧といったもの──つまり作者のレベルが低いためにそうなっている部分があれば、それはレベルを上げるために努力するべきだということになるのだが、指向性の問題、即ち作者の好みによってそうなってしまったのであれば、問題は複雑である。そして、私は(悪い癖なのだが)顧客の求めるものと自分の作りたいものが一致しない場合は、原則的に自分の方を優先することにしている。そうでなければ《サキュバス・レ○プ残酷物語》などは作れなかったであろう・・・《虐殺大陸》も同様である。

今回は決して、自分の文章力のなさやストーリー展開の甘さを嘆いたり、反省するといった趣旨ではなく、自分がどういった意図でこのこのような物語を作っていたのか、それを説明(弁解)するコーナーとしたい。

《虐殺大陸》の世界

《虐殺大陸》をプレイ済みの方には改めて説明するまでもないことだが、読者の全てがプレイ済みだとは思えないので世界観について簡単に説明しておきたいと思う。

《虐殺大陸》はタイトルの通り1つの大陸が舞台になっている。一応「グラダナード大陸」という名前が付いているが、大陸の住人はこの大陸のことしか基本的に知らないので、一般に「大陸」と呼べばこの舞台の大陸のことになる(一応、大陸外に他の大陸や土地があることは劇中でも言及されるが、大陸の中でも余り知られたことではなくほとんどの人が無関心である)。
大陸には6つの国がある。

ライトニングフォード王国

 大陸南端の人間の国。農業国。一番やばい国。そしてなぜか一番やばいのにプレイヤーが操作する国。
 現女王の1つ前の女王、つまり現女王の母親が前政権を武力革命(というよりクーデター)で打ち倒し政権を奪い取ったという。そしてそれ以降、前政権打倒に功績があった貴族ら(前政権から見たら裏切り者)と共に王政と立憲議会政治の併用でやってきたが、現女王がその貴族たちを誅殺して無理やり全権力を手中に収めるところからこのゲームは始まる。

ガンドヴァール

 森林地帯に住まう獣人の国。「獣人」という言葉は劇中ではそれ以上の説明がなく曖昧だが、単に森の中で暮らしている肌の黒い人種・民族というだけで、おそらくただの人間。
 劇中で明かされるが、獣人という呼称には似合わず実は最も教育熱心で、独特ではあるが文明レベルは高い。

ケイクリッジ

 砂漠の民にして海の民。最も文明レベルが低く、「国家」という概念があるのかも少し怪しい。

シルフィーヌ王国

 エルフの国。もともとの支配地域は最も狭い。獣人と同じく「エルフ」が何かも説明がないので曖昧だが、これも単に人種の違いでしかないのかもしれない。エルフというと昨今のファンタジー作品では耳が尖っていることが多いが、もともとは違うらしく、この作品ではそれに従っている・・・というのは言い訳で、単に画像の差分を用意するのを面倒がっただけである。
 伝統に固執し、保守的で閉鎖的な気質を持つ。

ユングリオ連邦共和国

 人間の国2。まともな方。と説明されることが多いが、かなり成熟した民主主義社会で、それゆえの問題を抱えている。「国会議員は何百人もいて、いつも喧々諤々の議論が行われており、誰が発言したのかわからず責任の所在もわからない」と劇中で説明され、大陸全面戦争の勃発に至っても国会では代表の責任問題で非難し合うような様子が描かれている。
 いくつかの共和国が集まってできた連邦制国家だが、全体に君臨する国王がいる。この国王とその側近は作中でも最も徳の高い人物として描かれており、自国の政治について憂いて自ら戦争指導に乗り出した。

ラドゴッサル帝国

 魔族の国。肌の青い人種が中心であり、作品紹介などでははっきり「魔族の国」と書かれているのだが、当の本人たちは自分たちのことを魔族とは呼ばず、魔族とはライトニングフォードの人たちが肌の青い人種を呼ぶ呼称に過ぎないと明かされる。そもそもラドゴッサル帝国は多民族・他人種の集合国家で、青い肌の人種ばかりではないらしい。(ただし作中で登場するラドゴッサルの兵士は全員青肌である。当然、これは立ち絵の差分制作の問題なのだが、もしかしたら国内差別の問題で少数民族は前線勤務にはならないのかもしれない)

上の説明では「劇中・作中では・・・と明かされる」といったことをしきりに書いた。ゲーム紹介のページや説明書などで明かされることは一部で、ゲームをプレイする中で世界観のことが徐々にわかってくるのである。

初期構想との食い違い

《虐殺大陸》の元ネタが「ドラゴンフォース」というゲームであることは色々なところで言及してきた通りである。
「ドラゴンフォース」も1つの大陸が舞台で、その大陸の中に8つの国がある。プレイヤーはその中の1つを自由に選んで(ただし1回目プレイで選べるのは6国のみ)、最終的には大陸全土を支配することになる。《虐殺大陸》もこれと同じシステムで作る予定であった。
しかし残念なことに、私の製作速度の遅さからそれは早々に断念せざるを得なくなった。1ヶ国のストーリーとスチル絵(1枚絵)を作るだけでとてつもない時間がかかる。
私は制作段階の割と早い時期から、6ヶ国のうちの1国のみをプレイできるようにすることに決めた。
その国は当然、《虐殺大陸》の名に最も相応しいライトニングフォードである。

さて、もしそのようにならず、予定通り最初から6ヶ国の中から自由に国を選んでプレイできるようになっていたならば、どうなっていただろうか。
おそらく、最初に国を選ぶ選択画面が出て、1つの国を選んだらその国の簡単な説明が出て、「この国に決定しますか? はい/いいえ」というような確認を経て決定、という流れになったに違いない。
自分がこれからプレイする国のことだから、プレイヤーはその説明をある程度読んで決めるに違いない。
ということは、である。
プレイを始める段階で、プレイヤーは各国の情報を簡単にではあるが、ある程度頭に入れた状態になっている。
仮にライトニングフォードでプレイするにしても、北西には教育レベルの高い獣人の国が、東方には部族同士で抗争を繰り返し戦闘慣れしている国が・・・などということがわかっている状態でプレイ開始となるのである。
実際にリリースされた作品では、この前提が全く覆されることなった。
プレイヤーが本来最初にやっておくはずだった、「プレイする国を自分で選択する」という作業が完全になくなったためである。

実際ゲーム攻略においては、これはそれほど大きな問題を生むわけではない。
しかしストーリーを理解する上では予想外の反応を生むことになった。
111氏の感想ブログや(同じく111氏のメルマガにおける)エミリア氏のコラムなどで言及されたことで、

相手国を滅ぼしたあとで、そこがどんな国だったかがわかる

というものである。
これは自分としては全く予想外の感想だったが、改めて見返してみると本当にそう思えて仕方ないものになっていると感じる。
敵国を攻略するまでは、その国に関する情報がほとんどプレイヤーに入ってこないためである。

後から追加された2つのシーン

しかし、制作当時の自分としても、この「情報の少なさ」そのものは自覚していたようで、若干の(後知恵的な)フォローが一応入っている。
そのシーンは2つある。

1つは大陸全面戦争が始まった時に入る、各国の様子をモンタージュ映像的に流す場面である。
このゲームは基本的にプレイヤー国の視点(一部例外を除いて、セリア女王の視点)のみで語られる。
それはプレイヤーが操作する国を選べるようにするという当初の仕様に基づくコンセプトであり、一種の縛りである。すべての国の事情が知りたければ、すべての国をプレイしろということにもなるのだが、結局今のところそれは実現していない・・・
実現していないがゆえに、ストーリー全体を書き終えてみて、さすがにプレイヤーの理解が追いつかない、というか、プレイヤーを置いてけぼりにし過ぎの感が出てしまったので、あとから追加したのが、この場面である。


(現在英語版製作中につき、英語注釈が表示されるほか、キャラクターの一部名前が英語表記になっている)
戦争を目前にして、各国首脳の苦悩と事情を簡単に描くものになっている。
状況を冷静に見つめるガンドヴァール女王と、堅実にそれを補佐する副官。
対して状況を理解せず完全に楽観視している周囲の貴族たちに呆れ、対応を急ぐシルフィーヌ女王たち。
ユングリオの女王らも危機感を募らせ善処しようとしてるが、国会では無意味な議論を重ね、足の引っ張り合いをしている。
ケイクリッジは上の国々とは全く異質で、完全に楽天的である。
そしてそれらに被せるように語られる、ラドゴッサル皇帝の演説。もちろん、最後までプレイしてくれたプレイヤーには、この演説は威勢の良いことを言っているが、いわゆる国内国外向けのプロパガンダであり、皇帝個人のの本心ではないということはご理解いただけると思う。
作中でも最もドラマチックな場面の1つで、作者である私は非常に気に入っているのだが、プレイヤーの皆さんはどうだっただろうか・・・

なぜこのようなシーンを後付で入れなければならなかったのか?として、初期構想との食い違いのことを説明したのだが、実はそれ以前の問題がある。
もともとこのゲームは説明不足なのである。
それは意図的にそうしているのだが、あまりに説明不足すぎるだろうということで、後から付け足されたもう一つの場面がある。

それが冒頭の情勢説明のナレーションである。

この部分について説明する前に、皆さんには物語の語り方について考えていただきたいと思う。皆さんはどのような物語の語り方が好きだろうか?
物語そのものではない。“物語の語り方”である。



“物語の語り方”のあり方

語り方には2種類ある。

昔々、あるところにお爺さんとお婆さんが住んでいた。
お爺さんは山に芝刈りに、お婆さんは川に洗濯に行った。
お婆さんが川で洗濯をしていた時、上流から巨大な桃が流れてきた。
お婆さんはそれを持ち帰った。
お爺さんとお婆さんが桃を切ってみると、中から男の子が出てきた。

という語り方を、客観的・説明的な語り方ということにしたい。
一方で、そうではない方法もある。

お婆さんは額から頬を伝う汗を、肩からかけた手ぬぐいで拭った。暑い。腰が痛む。既に何十分も屈んだまま、洗濯桶に向かっていた。彼女は一息つき、体を起こし、伸ばした。体中に滞っていた血液が流れるのを感じて、一時の快楽を感じた。
その時である。
視界の端に、何かが動くのを感じた。見やると、彼女が洗濯に使っていた川の上流から、一抱え以上もあるような巨大な桃が流れてくるではないか!彼女は大いに驚き、そして持って帰った。
家に帰るとお爺さんが先に帰ってきており・・・

おわかりになるだろうか。今のような書き方は、登場人物の視点に立ち、まさに主観的に感じていることをなぞるような語り方である。これを主観的・叙述的な語り方と呼ぶことにしたい。

この2つの違いは明らかである。
説明的な語り方では、全体がわかりやすい。読者は、人物の置かれている状況がストレスなくわかる。
一方で、叙述的なストーリーテリングにおいては、かなり後の方にならないと読者は状況が理解できない。その代わりに、主観的な立場に立った独特の緊迫感のようなものがあると思う。
どちらが好きかは好みの問題だが、《虐殺大陸》は後者の立場を(極力)とっている。

2つ目の文章を読むと、いつの話なのか、お婆さんが出てくるのはわかるが、誰とどのような暮らしをしているのかわからない。それら徐々に明かされていくことになるのである。
お婆さんはどこにいるのか? → 川。 なぜ川にいるのか? → 洗濯をするため。 お婆さんは誰と暮らしているか? → お爺さん。
などというように、順を追って説明されることになる。あるいは、必要なければ説明すらされないかもしれない。
この「説明されない」ということは、実は非常に重要なことであると思うのである。
というのも、人間は「当たり前のことは一々説明しない」からである。
例えば、お婆さんがお爺さんに向かって「私たちは結婚してはや50年、子供はありませんので・・・」などと語るような作品をしばしば見ることがあるが、これは読者に向けた説明口調であって自然な会話とは言い難い。ナレーションで説明するのも、物語への没入感を妨げる。
登場人物には、あくまでその世界の中の住人として自然に振る舞ってもらい、読者はその振る舞いを覗き見ることによって状況や心情を推し量るというのが最も緊迫感のあるストーリーテリングだと思う。

さて、話を戻して《虐殺大陸》冒頭だが、実は最初はあの説明的な部分はなかったのである。
ゲームを始めると、参謀総長のエマがいきなり
「ユングリオが第2次和平会談を持ちかけてきています」
と話し始めるという予定だった。
もちろんプレイヤーには「ユングリオ」という単語も「和平会談」をめぐる情勢がどうなっているのかもわからない。
しかしこの1文だけで、ユングリオという国だかグループだかがあるということ、話し手が巻き込まれている紛争があるということ、しかしユングリオはそれには直接関わっておらず第三者の立場であること、(第2次ということは)第1次和平会談が行われており、しかもそれは決裂したこと、などを推察することができる。
私はこういうドラマを作りたかったのである。
しかしさすがの私でも、それはあまりに不親切が過ぎると思って冒頭の説明部分を入れるに至ったのである。
若干遺憾に思う部分もあるが、大陸地図を表示しながらの情勢説明はいかにも「重厚な政治劇」っぽい感じがして気に入ってもいる。


《虐殺大陸》のストーリーテリング

冒頭だけでなく、《虐殺大陸》は全体としてこのような「主観的・叙述的な語り方」をしている。
上に書いた作者としては意外な、しかし当然とも言える反響は、このような物語の語り方に起因するものだと思う。私自身は決してそれを嘆いているわけではなく、寧ろ自分のやり方が順当に実を結んだものと分析し、嬉しく思っているのだが、プレイヤーが物語を楽しんだかは別問題である。
何にしても、当初の想定通りに行かず、作者の頭の中に存在している《虐殺大陸》の世界と物語を余すことなくゲームに展開するということは、今のところできていないので、それは非常に残念なことである。
一刻も早く続編を制作したいと考えているのだが、まだすぐにというわけにはいかないのが現状である。
もし楽しみにしてくださっている方がいれば、申し訳なく思う。どうか気長にお待ちいただきたい。

フォロワー対象記事について

今回の記事は初めてフォロワー限定部分を付けるが、これはゲームをクリアしてくれた人が対象の記事である。
いわゆるネタバレを含んでいるので、未プレイの人は閲覧する前にぜひともこのゲームをクリアしてからご覧頂きたいと思う。
なお《虐殺大陸》は無料で最後までプレイできる。無料で最後までプレイできるのだが、無料版にはスチルの大半に隠蔽が入る。
しかしここで掲載するCGは無料版では閲覧できない部分もある。それはサービスで無料公開という形になるのだが(ただしグロ部分には修正あり)、やはり《虐殺大陸》は有料版でこそ本当に楽しみ尽くすことができるのではないか、とも思うのである。
ということで、是非有料版を買っていただきたい、という営業トークで、一般公開部分を締めさせていただきたいと思う。

◆《虐殺大陸》の購入・DL◆

フォロワー以上限定無料

無料プラン限定特典を受け取ることができます

無料

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

D’s Production 2019/10/31 10:43

《虐殺大陸の明けぬ夜4》理想への挑戦と敗北

前回は経路検索のアルゴリズムを思いつかなかったという話を書いた。
今回も引き続きゲームプログラミング的な話で、興味のない方には本当に興味のない話だと思うのだがお許しいただきたい。
自分のプログラミング(といってもウディタ──Wolf RPGエディターによる擬似的なプログラミングだが)技術の不足により、理想的なゲーム・プレイの環境を作れたとは言い難い。
しかし悪戦苦闘の末、解決できた部分もある。できなかった部分もある。
この(未熟な)ゲーム開発者の苦悩というものを読者の方にも知っていただきたい。

永遠の命題──軽快な挙動を目指して

快適なプレイ環境とはどんなものか?
プレイヤーが操作したとおりに挙動するというものであろう。
端的に言うとラグがない、もしくは非常に少ないということである。
ボタンをおして1秒後に主人公が動く、というのでは、プレイヤーはストレスで怒り狂うに違いない。おそらくは0.1秒でも大変なストレスである。
《虐殺大陸》では様々な要因により「処理が重い」とか、「処理が重いように感じられる」という場面がゲーム全体にわたって出てきてしまった。
ちょっと私の気にし過ぎのところもあるかもしれないが、人から見ても明らかにそう感じられるであろうものも多い。

指数関数的に増える処理数

《虐殺大陸》は擬似的にではあるがリアルタイムで進行する陣取りゲームである。
フィールドマップにおいては各国は任意のタイミングで師団を派遣することができ、その師団は時間の経過に従って経路を自動で進軍していき、敵軍と接触すれば交戦になる。
 「敵軍と接触すれば交戦になる」
口で言うのは容易いが、これをプログラミングするとなると、そう簡単にはいかない。
読者の中には日常的にプログラミングをしている人がいて、いや簡単だと言うかもしれない。
画面上をキャラクターが既に動いている。ということは何らかの形でキャラクターの座標(x,y)が変数に格納されているはずである。キャラごとにそれらを取得して、キャラAとキャラBの座標が一致または接近したときは条件分岐で交戦の処理に移ればいいだけではないか?
本当にその通りではあるのだが、既に見た通り、このゲームはリアルタイム・シミュレーションなのである。ターン制ではない。
そして大陸には6つの国があり、同時に作れる師団は20個である(これは私自身があえてそう設定した)。同時に最大で120師団が存在する。それは稀なケースであるにしても、だいたい10~20個の師団が存在するのは常である。
仮に10の師団(師団A、B、C・・・J)があるとすれば、次のような処理が必要になる。

 師団Aの座標(Xa,Ya)取得
 ┗師団Bの座標(Xb,Yb)取得
  ┠XaとXb、YaとYbが一致する→交戦の処理へ
  ┗一致しない
   ┗師団Cの座標(Xc,Yc)取得
    ┠XaとXc、YaとYcが一致する→交戦の処理へ
    ┗一致しない
     ┗師団Dの座標(Xd,Yd)取得
      ┠XaとXd、YaとYdが一致する→交戦の処理へ
      ┗一致しない
       ┗師団Eの座標・・・・

つまり師団Aの座標と師団B~Jの座標の比較、
   師団Bの座標と師団C~Jの座標の比較、
   師団Cの座標と師団D~Jの座標の比較・・・
と延々とすべての師団の座標同士を比較し、一致するかどうかを調べなければならないのである。(ちなみに「一致」ではなく「接近」とすると、それぞの座標にさらに-5、+5などをして範囲を広げることになる。さらに処理が増える。)その数だけで45である。もちろん師団の数が増えれば増えるほど、この数はねずみ算式に増えていく。
しかも、それをほぼ毎フレームごとに行わなければならない。ウディタのFPSは60。つまり1秒間に60回の処理を行っているということであるが、上の処理を1秒間に60回の速度で行わなければならないということになる。
1秒間の処理数で言うともう少し少なくしてもよい。しかし少なくとも各キャラが移動するごとに行わないといけない。もしそうでないと、敵軍や敵城を「すり抜け」てしまうという事態が発生しかねない。
詳しくは知らないのだが、おそらく、現代の並のパソコンだと上の程度の処理ならば簡単に行えるのではないだろうか。しかし安定した動作を保証するためなのか、ウディタ上で上のような膨大な処理を行おうとすると動作が極端に重くなる。つまりカクカクすることになる。
このような声はウディタのゲーム制作者からはしばしば聞かれ、アクションゲームなどでキャラや弾が増えれば増えるほど処理が重くなるのでその数を制限しなければならないという経験をした人は多いのではないだろうかと思う。
《虐殺大陸》でも同様のことが起こった。

《虐殺大陸》では、キャラ(師団)はあらかじめ決められたルート(街道)を通ることになっており、それ以外は一切通ることができない。(開発中、よくルートから逸れるバグが起こって難儀した・・・)
ということは、同一の街道や地点にいる師団同士は接触する可能性があるが、それ以外は絶対に接触しないということである。
ということは、例えばルート①には師団AとBとCがいるということを把握しておけば、師団AについてはB・Cとの座標が重なっていないかだけを検索すればよいということなる。仮にフィールド全体には他に何十と師団がいようとも関係ない。BとCについても同じである。
具体的には、各地点ごとのデータベースを用意して、師団Aが地点①にいると地点①に追加、師団Aが地点①から地点②に移る瞬間に地点①からAを抹消し地点②に追加、というような処理をしている。
(人間ならば言葉で理解できるが、コンピューターにこれをさせるのはそれほど簡単なことではない。師団ごとのデータベースに、当該師団のいる地点を格納、それをもとに地点ごとのデータベースからその師団の情報が書き込まれているデータを検索する、という処理が必要になる。ウディタは優れたソフトだが、この辺りの処理はプログラマーの「人力」とでも言うような力技が必要である)
これで「師団同士が重なっていないか」ということを検索する処理の重さは激減することができた。

これを応用すると「フィールド全体を区間ごとに区切って、その区間ごとに存在するキャラだけで(重なっていないかを)処理する」という発想が生まれてくると思う。
仮に全体が100×100マスのチェス盤のようなものだとすると、
    X座標0-9を①、10-19を②・・・90-99を⑩
 同様にY座標0-9をA、10-19をB・・・90-99をJと区切ると、
区間①A、②A、③A・・・⑧J、⑨J、⑩Jと、フィールド全体を100個の区間に区切ることができる。
こうすると、《虐殺大陸》のように進行ルートが決まっているわけではない作品、縦横無尽にキャラクターがフィールド上を行き来する作品でもある程度の処理の軽減が可能になるだろう。
実は《虐殺大陸》の前身である《リョナラーの野望》ではこのような手法で処理しようとしたのだが、各区間のちょうど境界にいるキャラ同士が「すり抜け」てしまう現象が起こった。おそらく師団Aが①から②に、師団Bが②から①にそれぞれ同時に移動したので互いに重なる区間が存在せずすり抜けてしまったのであろう。
だから区間は0-11を①、9-21を②、のようにややそれぞれの区間に重複する幅をもたせるのがいいように思う。

リアルタイムであるがゆえの苦悩

いかに師団同士が重なっていないかの処理をスムーズにしたとしても、リアルタイムで行わなければならない処理はそれだけではない。
師団がある曲がり角や交差点に達したら方向転換をしなければならない。
また敵同士が接触すれば交戦が必要になる。
敵も常に自軍の心配をしており、失った兵の補充をし、手薄な城には増援を送るという判断もする。
やることは盛り沢山である。これを考える頭脳は(現実では人間の数だけいるはずだが)ユーザーのパソコン1つなのである。
しかし幸いなことに《虐殺大陸》はアクションゲームではない。
あるいはアクションゲームでも、例えばシューティングゲームで敵や敵弾の数が多いときは「処理落ち」によってあえてゲーム進行がゆっくりになるのが許容されるようなこともある。これと同じことをすればよい。
もし現行のスピードで「カクカクする」のであれば、スピードを半分にすればよいのである。
あるいは、アクションゲームのような精密な操作が求められる種類のゲームではないので、「カクカクする」ことをあらかじめ許容してもよいのではないか。
こうして「ゲームの進行速度」と「安定性モード」という2つのオプションが付けられた。
どれだけ挙動がゆっくりになるのかを、ユーザーに選ばせるのである。
はじめから師団の歩行速度=ゲームの進行速度をプレイヤーに選ばせるというのが「進行速度」である。
またフィールド上にキャラクターが増え処理項目が多くなるほど、処理途中にウェイトを挟むようにしたものが「安定性モード」というものである。これで、キャラが増えるほど結果的に進行速度は遅くなるもののスムーズな挙動が保証できる。
しかしこの「安定性モード」はOFFにすることもできる。そうすると敵が師団を作成したときや敵同士の交戦など諸々の重い処理があったときには一瞬ゲーム全体が止まる。これは快適なプレイ環境とは言い難いが、しかしゲームの進行速度自体は上がる。結果としてプレイ時間自体は短くなるのである。
リアルタイム進行のゲームだからこそ生じる無用な待ち時間というものがある。これを減らすことは非常に重要なことである。判断はプレイヤーに委ねることにした。一応開発者のスタンスとしては、「基本的に安定性モードはONにします」と安定した挙動を推奨しているが、ある程度プレイに慣れてきたプレイヤーはOFFにしたのではないだろうか。ちなみに私自身は常にOFFにしていた。

《虐殺大陸》最大の欠陥

上記のことはある程度解決できたことであり、ユーザーとしてもそれほど気にならないことかもしれない。
最後に、これだけは解決できなかった、作者として指摘されると最も心苦しい問題について触れておきたいと思う。
「指揮官の立ち絵」問題である。

《虐殺大陸》では資源を消費して指揮官をほぼ無限に作成することができるようになっている。敵も次々に指揮官を作成してくる。
それぞれの指揮官には立ち絵が付いており、ランダムで自動生成される。1人1人が微妙に違う立ち絵で、一応《虐殺大陸》の売りの1つになっている(とは言うものの、実はこれについては私自身も疑問を感じているところもある。この話は次回以降に譲りたい)。
「ランダムで自動生成される」というのは、顔、髪、身体などの各パーツが用意されており、それらをランダムで組み合わせるという、所謂「福笑い」システムである。
兵科ごとの基本があり、あとはそれぞれの差分である。だから基本が兵科数──つまり7つしかなく、あまり代わり映えのしないものであるが、おそらく《虐殺大陸》制作で最も苦労したことの1つであろう。

さて、その指揮官立ち絵の表示の仕方なのだが、各パーツをそれぞれPNG形式の画像ファイルとして用意しており、必要パーツをすべて表示するという方式をとっている。
兵科によっても異なるが、1人の指揮官に、下(奥)から順に後ろ髪・身体・横髪・顔・表情・前髪と大体6枚程度の画像を表示している。サイズは800×600ピクセル。PNGである。
いくら基本が7兵科分とはいえ、各パーツに3~5種類程度の差分を用意すると、その画像数は推して知るべし、である。莫大な枚数である。その1つ1つを必要部分だけ切り出し、位置を調整して表示、などとしていては製作期間はあと1年以上は伸びていたであろう。だからすべて一律で800×600ピクセルとした。PNGである。
それを一気に6枚前後表示する。1つ1つのサイズは微々たるものだが、それらを一気に表示するとその瞬間に「ラグ」が発生する。
この辺りはマシンパワーにも依存することとは思うが、指揮官の画像の出る場面、特に戦場でなどでのカーソル移動は開発者である自分としても「最も思うように操作できない」場面である。自分の操作にゲームがついていかない。私が嫌う「快適でない」ゲームそのものであった。問題は指揮官の画像だけではないが、指揮官の画像が問題なのは間違いない。
「事前ロード」の機能を付けた。
交戦に参加する指揮官はあらかじめわかっている。つまりその交戦中に表示される指揮官の画像もわかっている。それらを、交戦が始まった直後に画面外に表示させておくのである。そうすると画像が表示される瞬間のラグはやや解消される。ただし完全ではないようである。

ここで新たな問題が発生した。
参戦する指揮官数が少ないうちは問題ない。しかしゲーム終盤になるにつれて大軍同士が激突することになり、60部隊vs80部隊、などとなってくると話は変わってくる。
ゲームの挙動に明らかな異常が現れるようになった。
交戦が進むにつれて画像の表示がおかしくなってくる。表示されるはずの画像が表示されない。指揮官の画像の一部だけが表示されて、顔無しや首なしの指揮官が出てくる(怖い)。
ウディタのデバック機能を使って表示画像一覧を見ると、明らかに狂っている。目に悪い蛍光色の紫の長方形が至るところに現れる。


挙げ句の果てに、さらに重いデータ(音声データなど)を読み込んだ瞬間にゲームがフリーズする。
「Game.exe は応答していません」
画面をクリックすると白くなる。悪夢である。
せっかく屍の山を築き、敵の要衝を攻め落としたその瞬間である。プレイヤーならばコントローラーを投げ捨てるであろう。(このゲームはキーボードでのプレイ推奨なのだが・・・)

参戦指揮官が30人を超えるときは、すべての指揮官画像をロードすることはやめた。しかしロードしないとあまりにカクカクする。
そこで味方指揮官だけはロードすることにした。敵指揮官は戦場に配置された者(最大10人)をターンのはじめにロードする。戦場に配置されていない敵指揮官は消去する。こうすると最大90人のロードで済む。
サイズの大きい音声データを読み込むときは、音声データをメモリから開放することにした(これはウディタの機能である)。
これで、自分のパソコンでは急にゲームが落ちることはなくなった。
「自分のパソコンでは」である。リリース後の報告によると、未だに同様の状況でゲームが落ちることはあるらしい。やはりパソコンのスペックによるのであろうが、スペックの低いパソコンを使っているユーザーを責めることはできない。明らかに作者の責任である。

指揮官画像が問題である。これが重すぎる。
スマートな方法ではないが、姑息な手段に出ることにした。「サイズの小さい」指揮官画像データを用意したのである。
画像一括変換ソフトで指揮官画像のすべての大きさを半分にする。400×300ピクセルに、である。データサイズとしては1/4くらいになるのだろう。
システム設定に、指揮官の画像の「軽量化表示」を付けた。これを選択すると、400×300ピクセルの画像が引き伸ばされて、ややモザイクの掛かったような「画質の荒い」指揮官画像が表示される。処理の重さは劇的に改善された。
さらなる対処として、(個人的には禁じ手であるとおもっているのだが)「指揮官の画像 非表示」も選択できるようにした。完全に指揮官の画像を表示しない。処理の軽さは最大である。
ゲームが先である。正直なところ、指揮官画像は作者のこだわりであって、プレイヤーの求めているものでもあるまい。
逆にゲーム性を求めていないプレイヤーは、《虐殺大陸》のメインターゲットではない。作者の迷走っぷりが見えるというものである。

最善の解決策は全てのパーツを組み合わせたものを1枚の画像として用意することなのではないかと思っているが、既に見たように、パーツ数は膨大に上り結果として出来上がるバリエーション数は1万を超えるのである。つまり1万枚の個別の指揮官画像を用意することになるのだが、それは制作者が途中で過労死するであろう作業となることは間違いない。よしんばそれをしたとして(書き出しのためのプログラミングができれば楽勝であろうが・・・)、そのファイルを全て格納したゲームデータは何GBになるであろうか? どちらにしても難しい話である

本当にユーザーフレンドリーなゲームの開発を目指して

何はともあれ、ゲームが途中で落ちるという最悪の事態は回避できた。
正しくは、回避する手段は提供できたのだが、ここにも誤算は生じた。
自分としては、これら指揮官画像の軽量化の設定は操作説明などで強調して説明しているつもりであった。(1ページ丸々割いて説明している)
しかしそれでも上記のように、リリース後にユーザーからフリーズのことが指摘されたことからもわかる通り、ユーザーにはあまり知られておらず、作者が後から個人的に教える、ということが度々あったのである。
今思えば、大人数交戦の途中で説明を挿入するなど、無理矢理にでもユーザーに認知させるなどの工夫をすればよかったのだが、その手間を惜しんでいたのである。
説明書を読まないユーザーが悪いのか、説明書を読まないユーザーを想定しない作者が悪いのか問題は微妙なところだが、私個人としては説明書がなくてもある程度のプレイはできるゲームを目指したいとは思っている。《虐殺大陸》は明らかにそれには至っていない。
(本当は「チュートリアル」を付ける予定でいたのだが、手が回らなかったのである。)

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

D’s Production 2019/09/22 06:51

《虐殺大陸の明けぬ夜3》 制作開始、そしてアルゴリズムを思いつかなかった話

今回の記事はややマニアックというか、多分プレイヤーの大半が興味のないゲームプログラミングに関する話を書いている。当然、興味のない箇所、あるいはこの記事自体飛ばしてもらって構わないのだが、私自身他の制作者の製作日記などを見て、その裏側の事情(プログラミングなどの苦労話)のことが一切書かれておらず内心物足りなく感じることがたまにあるので、同じように感じている人もいるかもしれないと思い、あえて実験的に書いてみたというところがある・・・という言い訳を最初にさせていただきたい。

制作開始

《虐殺大陸》の制作を開始したのは《サキュバス探訪譚》の制作が終わった2017年12月のことである。
制作に関する最初のツイートは12月21日になっている。
https://twitter.com/DsProduction2/status/943596255900340224?s=20

《リョナラーの野望》では41あった城の数を22に削減し、1マップの大陸図をこの時点で既に作成している。
完成品しか見たことがない方には逆に新鮮かもしれないが、当時の大陸地図は自作の絵ではなく、マップチップである。
まだ名前はない。

余談ながら《サキュバス・レ○プ残酷物語》が完成した7月頃には下のようなゲームを作ろうと考えていたらしいが、企画倒れどころか企画すらされず頓挫している。それでよかったと思っている。
https://twitter.com/DsProduction2/status/944216300594782208?s=20

制作ツール「ウディタ」

制作ツールはWOLF RPGエディター(通称、ウディタ)である。
https://www.silversecond.com/WolfRPGEditor/
文字通りRPGを作るためのツールでマップ上のキャラクターなどのオブジェクトの挙動を制御するシステムを最初から持っている。これを使えば簡単にマップ上でキャラクターを動かすことができる。
しかし欠点もある。あらかじめ規定されたマス目単位でしか動かせないということである。
1マス40ピクセルとして(これは変更可)、ウディタは半マス移動ができるから、最低でも20ピクセルである。1つ動かすと、最低でも20ピクセル動いてしまう。
《リョナラーの野望》ではそれを使っていたのだが、全マップを1画面に収めてしまった《虐殺大陸》ではより精密な制御を行いたい。1ピクセル単位で動かしたかったのである。
自作のシステムを組むことにした。
そう言うと大層なことをしているように聞こえるが、ウディタでは珍しくもないことだ(多分)。
プレイヤーが直接操作する矢印カーソル、そしてマップの道路上を移動する師団キャラクターなどは、ウディタの基本システムではなく、自作のシステムでピクチャ(画面上に貼り付ける画像)を動かしている。
それゆえ上(奥)のキャラが下(手前)のキャラの“頭を踏みつける”といった不具合も生じているが、これは一貫して無視することにした。完成版に至ってもこれはそのままになっている。

経路検索を巡る死闘──それは勝利か敗北か・・・?

《リョナラーの野望》にしても《虐殺大陸》にしても、そのシステムを構築する上で最初の難関となったのが経路検索問題である。
これらのゲームでは拠点から拠点へと、交差したり曲折したりしながら縦横無尽に街道が伸びている。その街道上を師団がリアルタイムで目的地に向かって自動的に移動する。
実際のゲーム画面ではないが、簡略化した図を示したので見てもらいたい。

例えば地点0から地点1に向かって移動するものとする。
人間ならば一見しただけでどのようなルートを通るのがよいか判断できる。しかしコンピューターはそうはいかない。手順が必要だ。
まず各地点の情報を入力してやる必要がある。データベースの作成である。
拠点が0から14存在すること。そして0の左には2が、2の上には3が、3の上に4・左に6が接続している・・・
必要によっては各地点の座標と地点間の距離を入れてもよい。
最も簡単な方法は総ざらいである。
地点0から出発し、2→3と進む。分岐して4へ進む場合と6へ進む場合、6に進む場合はさらに次に7に進む場合、11に進む場合、5に進む場合と分岐する。さらに11に進めば12に、10に進む場合で分岐して・・・という風に進めていき、最終的に最も少ない地点数か距離で1にたどり着いたものを採用する。
不可能ではない。
しかしこの程度のマップならばともかく、実際のマップはもっと広大だ。《虐殺大陸》で38地点、《リョナラーの野望》で確か100近くの地点がある。
ウディタでは1フレーム間の処理数は最大50万回までと決まっている(これを超えると緑帯のエラーが出る)。


あくまで最大数がそれであって、当然1フレーム間に何万回もの処理をするようには想定されておらず、もしそんなことをすれば動作が重くなる。
ひとたび目的地を選択するたびに毎回そんな膨大な計算をしていては、そのたびに一瞬ゲームが止まったようになり、ユーザーのストレスは大変なものになるだろう。しかもこのゲームはプレイヤーだけでなく、敵AIも師団を任意の目的地に派遣してくる。動作がカクカクになること請け合いだ。
よって、そのたびごとに総当りで経路を算出するという方法はとれない。
ではどうするか?
それがわからなかった。
わからなかったので、最も原始的で、プログラマーとしては敗北宣言にも等しい方法を採用することにした。
すべて手入力であらかじめ経路を設定しておく」──これが私の導き出した答えだった。
たとえば地点1から2に移動するとき、1から3に移動するとき、1から4に移動するとき・・・
すべてその経路をデータベースに登録しておくことにした。
《虐殺大陸》では38の地点がある。そのすべての地点から、他のすべての地点への経路を、すべてエクセルで手動で入力した。その総数は38×37で1406個。いや、1から2に行くのと、2から1に行くのでは順序を逆にすればいいだけだから、半分で済む。それでも703個である。

データベースを読み込むのにも処理は必要だが、いちいち計算することを思えば屁みたいなものである。
これを読んでいる読者の中には、今の話を聞いて憐れみと侮蔑の笑みを顔に浮かべている方もいるかもしれないが・・・それは甘んじて受け入れることにしよう。もしその中に親切な人がいれば、他のよい方法を教えていただきたい・・・ただし、リアルタイムで進行するゲームの処理として適切な方法を、である。

最善の解であるとは到底思えないが、ともかくそのようにして《虐殺大陸》の根幹である師団移動の方法は出来上がった。
既にプレイされた方は、師団がやや不自然な迂回路を通るのを不可解に思ったことがあるかもしれない。「ゴス」から「ナリサ」へ行くときに「ガンドヴァール城」を迂回する時などである。


これはもちろん無関係の拠点を迂闊に通らないためなのだが(そこが敵国の支配領域である可能性もある)、それは私自身があえてそのような経路を入力したのである。コンピューターが自動で計算しているわけではない。

私は今新しい《虐殺大陸》(二章以降)の構想を練っており、けれどもただの一ミリも制作には着手していないのだが、経路計算のアルゴリズムを作り出せなかったことが“逆・取らぬ狸の皮算用”的に重く頭にのしかかっている。それすらできなかった自分に、今考えていることが実現できるのだろうか・・・?と・・・

その後この力技による解法は、手入力であるがゆえの問題──つまり見間違いや打ち間違いによるエラーを大量に吐き出し、そのたびにエクセルと地図を見比べて間違い箇所を修正するという苦行を経て、しかしながら着実に完成されていった。
完成品において経路のエラーが出たという報告はまだ受け取っていない。単に放置されているだけかもしれないが、ほとんどの人が遭遇しない程度にはエラーは潰せたのではないかと思っている。

これは自分のアルゴリズムを考え出す知性の問題でもあるが、同時にウディタの処理能力の問題でもある。それらは次なる問題、「師団の移動・師団同士の接触」処理でも悩みの種となり、実はこれに至っては今に至るまで解決されていないのだが、その話はまた次回以降に譲りたい。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

« 1 2

月別アーカイブ

記事を検索