2018年10月14日日曜日

Marathon (FPSゲーム) の導入


HaloシリーズでFPS界において一世を風靡したゲーム会社Bungieは太古の昔(90年代)にMarathon(マラソン)というSFのFPSを開発していた。Marathonは3部作あり、いまはすべて無料でプレイすることができる。第一部では人類が宇宙に進出した近未来で主人公は突如エイリアンの攻撃を受けた、火星だかどこかの衛星をまるごとくり抜いて恒星間宇宙船にした"Marathon"に到着して、MarathonのAI"リーラ"と協力しながらエイリアンを倒してMarathonを救わなければならない。反乱を起こしたAI"デュランダル"をはじめMarathonを取り巻く環境など濃厚な世界観がプレイするうちに明らかにされていく、緻密なSFストーリーが魅力的なゲームだ。

Marathonシリーズはhttps://alephone.lhowon.org/からダウンロードできるが、こちらはすべて英語。しかし有志により日本語版がでている。ストーリーを楽しむためにはこちらがおすすめ。以下をダウンロードする。

・AlephOneJP
https://ja.osdn.net/projects/marathon/から、自分のOSにあったものをダウンロード。7z形式で圧縮されているので解凍にはhttps://sevenzip.osdn.jp/(右クリックメニューで7zファイルの展開ができるようになる)などが必要。これがいわゆるプレーヤー、エンジンでこれに各種シナリオデータを入れることで3部作をはじめいろいろなシナリオがプレイできるようになる。

・日本語版 M1A1 v1.6.2J (Full)
https://ja.osdn.net/projects/marathon/releases/54321からダウンロード。Marathon1部作目のシナリオデータ。

上記2つをダウンロードしたら日本語版 M1A1 v1.6.2J (Full)の中身をすべてAlephOneJPのAlephOne.exeがあるフォルダにつっこむ。これでAlephOne.exeを起動することで1部作がプレイできる。ゲームを起動したら設定項目で操作方法などを確認しよう。


ニューゲームをはじめると「到着」とでる。主人公の小型宇宙船がMarathonの反乱AIデュランダルによって破壊され、命からがら脱出ポットでMarathonに到着した場面だ。このあたりのやり取りは当時発売されたときは紙媒体(!)のゲームマニュアルに記してあった。少し読みづらいがwikiのプロローグに内容が転載されている。


が、次に映し出されたのは宇宙船の内部らしからぬ光景。これはBungieの最初期に作られたゲームでMarathonではない。オリジナルにはない、遊び心で挿入されたものだが不親切だ。最新版(英語)では削除されている。ここから出るには写真の赤い像で左折してあとはひたすら直進することだ。壁に隠し扉があり近づくと開く。


通路をドンドン進もう。


すると近代的な内装になった。オリジナルはここから開始だ。今までのことは脱出ポッドの中で悪い酔いして見た夢だったんだ。気を取り直そう。
前方に緑色のターミナルが見える。Tabキーを押すことでアクセスでき、ここでリーラから指示をされ、目標を達成し、大抵は別の場所ある別のターミナルから次のステージにテレポートされるというのが基本の流れだ。また役にはたたないが興味深い情報を得ることができる、ストーリーテラーとしての役割もある。


しかしターミナルに直行するのはよそう。悪い奴らを始末してからだ。左下のレーダーに敵がうつるぞ。赤いバーはヘルス、青いバーは酸素を示す。ゼロになると死ぬ。(大抵のステージは真空でないので酸素を気にする場面は少ない)。ちなみに写真のような粘性のある血しぶきや破裂しながら死ぬ(ちぎれちぎれの肉片になる)といった描写は黎明期の3Dモデルによるエイリアン描写にはない、2Dで描かれたモデル特有のものでこの点では2Dが勝っていた。


ターミナルにアクセスするとリーラと交信できる。彼女の言うとおりにしよう。


左側にモズクのようなものが見える。これがこのステージのマップだ。この複雑なマップはMarathon(あるいは旧世代FPS)の特徴だ。ゴールになんとかたどり着かねばならない。(※こうもマップが複雑で密度が高いのは、当時のパソコンではパワー不足で見晴らしのいい広大な空間は描画できなかったので、くねくね曲がった狭い空間にせざるを得なかったからだ。当時のマップエディターのマニュアルにはあまり大きな空間を作らないでくださいと注意書きがある)


主人公の乗ってきた脱出ポッドが見える。


Marathonをプレイすることとスイッチを押すことは同義だろうか?違うかもしれないがほとんど一緒だろう!Tabキーでスイッチを押すことでエレベーターを動かしたり扉を開けたりできる。


こいつの名はパターンバッファ。Tabキーでゲームがセーブできる。人体情報をすべて保存するらしい。


体力が減ったらチャージしよう。なんどでもチャージできる。パターンバッファとチャージャーはゲーム中何度も訪れる場所になる。


幸いMキーを押すとマップが表示される。どんどんステージを探索しよう。

そのほか
・武器はいくつでも持てる。弾薬は落ちているのを拾おう。難易度によって所持できる弾薬の上限は異なる。弾薬は持ち越しされる。無駄遣いは避けよう。
・武器には主トリガーと補助トリガーがある。マシンガンの場合主トリガーで機銃発射、補助トリガーでグレネードを発射する。パンチの場合は両方のトリガーを使うと両手で殴れる。
・スイッチの中には動作中にストップできるものがある。またスイッチはグレネード・プラズマピストルのフルチャージで射撃することでも動作できる(Marathon2部作以降ではエイリアンの武器でも可能)。
・ヘッドショットの概念はないが、装甲エイリアン(ハンター)はプラズマピストルに弱いなどの仕組みはある
・ゲームの終了はEscキー
・このゲームは(照明が)暗い。暗すぎたら設定で変更しよう。
・気にったら他のシナリオもプレイしてみよう。Marathon's storyではマニアによるマニアックなMarathonの世界についての考察が載っている。1995年に開設され、いまでも更新されている長生きのサイトだ。
・The Marathon Spoiler Guideには攻略法が載っている。Marathonのステージには隠し扉(一見壁だがTabキーで開く)や隠しターミナルが散在しているがここで確認できる。

2018年7月19日木曜日

【Unity】RTS Bwars2 至近の課題

Bwars2開発にはやるべきことがたくさんあるが、至近のやることは3つある。それは射撃処理の洗練化、地物の生成、道路だ。


射撃処理の洗練

射撃は今は1つの砲弾ごとに命中・ダメージ判定を行っているが、高レートで連射した場合処理負荷が集中する可能性がある。例えばシルカ対空戦車は機銃を4門装備し一斉に射撃すると毎分数千発を射撃することになり、1秒あたり50発以上を発射する。これ1発1発について命中を判定しダメージを適用するのはあまり賢くなさそうだ。そのためある程度ゴマカシが必要になる。

そこで一定時間内に発射される砲弾をまとめて1つの砲弾として扱う。(まだ手法は考えていないけど)処理を一括して行うことで負荷の軽減が見込める。 この方法は弾の着弾地点が1箇所になる欠点がある。つまりきちんと1発ずつ計算していいれば複数弾の着弾地点はバラけ、様々な場所のユニットにダメージを与える可能性があるがこの方法では範囲が限られてしまう(その分範囲内のユニットには複数弾の合計されたダメージが入る)。そのためあまり多くの砲弾をまとめるべきではない。一方で簡略化は避け得ないのでやむを得ない方法だ。

また砲弾の処理に用いる入力パラメータを使い回すことでも処理を軽減できる。厳密に言うと敵味方のユニットが移動している場合、距離などのパラメータは刻一刻変化するので砲弾の発砲ごとに最新のパラメータを入力して命中判定などを行うのが望ましい。しかしパラメータの変更は計算のやり直しを招く(判定のしきい値がその都度再計算必要になる)。そのためある程度の時間内は同じパラメータを続けて使用するようにする。もちろん時間が経過することに状況は変化するのでなるたけ短時間の使用が望ましい。この同じパラメータを利用する連射を同一射撃と言うことにしよう。同一射撃時間は例えば1秒とする。この場合1秒の間はたとえ目標が破壊されたりロストしてもとにかく同じパラメータを利用して撃ち続ける。そして射撃開始から1秒後まだ目標が有効であり、かつリロードなどもクリアしていれば最新のパラメータを取り込み再び1秒撃ち続ける(パラメータは別のゲームループで更新されているので前回と同じ場合もありうる)。この場合見た目上はひたすら計算を行い連射しているように見えるが実際には1秒毎に計算が行われていることになる。同一射撃時間はそのままクールダウン時間となり、射撃開始後、同一射撃時間内は新たな発砲はできない。

以上2つの方法を用いる場合、射撃レートごとに以下のように利用することになる。

・高レート
同一射撃を開始する。例えば100発を同一射撃時間内に発砲するとしよう。それを25発ごとに1つの砲弾として同じパラメータを使って処理を行う

・低レート
同一射撃を開始する。4発を同一射撃時間内に発砲するとして、個々の砲弾ごとに同じパラメータを使って判定を行う。

・単発
戦車砲など毎分10発前後の場合は同一射撃終了後、リロードを挟んで再度射撃を行うことになる。

こうした処理を行うために、射撃制御クラスを作る。各ユニットの武器クラスは同一射撃時にパラメータを制御クラスに渡しあとはお任せすることになる。


地物の生成

今は地形の特性はテクスチャに描かれた図形で表現されているが、やはり立体のほうがいい。ただしBwarsは低スペック・旧PCにも対応したいのでGPUをブン回して描写を行うことは避けたく、またユーザーが手軽にmodを作れることを目指しており、加えて基本的には遠くから俯瞰しながらプレイするゲームであることから地物はとても簡略した描写に抑えたい。市街地や森ではたくさんの建物や木を並べて高密度さを表現したいがGPUインスタンシングでも数が多いと負荷は馬鹿にならない。そこでこうした高密度オブジェクトは連続したポリゴンを生成し描くようにする。これはGoogle Mapの3Dと同じような感じになる。郊外や茂みなど低密度な地域は一つ一つ地物描くようにする。ポリゴンの生成とLOD処理が課題になる。また地物ポリゴンが省略された場合でも自然に見えるマップテクスチャの生成も必要だ。


道路

個人的には道がないテラインは梅干しがない白米みたいだと思っていて、道路の実装は必須だ。道路はノードで定義され、各ノードは座標と接続ノードの情報を持っている。課題がいくつかある。1つは道路のノードの編集で、エディターなどを整備しないといけない。また実際にノードから地形に沿って目に見える道路を生成する必要がある。これには橋やトンネルも含まれる。最後に道路を全体の経路探索に組み込み、ユニットが道路に対応し道路上を移動できるようにしなければならない。課題は多いがRTSゲームではコンプレックスな道路の実装は少なく(せいぜい川に橋がかかるだけ、都市系シムと比べると特に見劣る)、実装できればマップの表現や戦術に新しい光を当たることができるだろう。


2018年6月26日火曜日

【Unity】RTS Bwars2 ベータ版ver3 公開


ベータ版3を公開しました。

https://sites.google.com/view/bwars2/%E3%83%9B%E3%83%BC%E3%83%A0/%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89

・士気の実装。士気はユニットアイコンの枠線で示され、低下するとユニットが逃亡する。
・アタックムーブの実装。Qキー+左クリックでユニットは移動を行い、途中攻撃範囲に敵が入ると停止する。
・AOE(範囲ダメージ)の実装。いくつかの攻撃は着弾地点周辺のユニットにもダメージ・士気の低下を及ぼす。
・新ユニット特殊部隊追加。3つの武装を持ち、内グレネードランチャーは士気を低下させる効果が大きい

2018年6月12日火曜日

【Unity】RTS Bwars2 ベータ版ver2 公開


ベータ版ver2を公開しました。


・視界システム・戦場の霧を実装
・地形による遮蔽:射線や視界は地形で制限される
・新しいユニットスペック

2018年5月20日日曜日

【Unity】RTS Bwars2 ユニットパラメータの刷新


嫌で仕方がなかったユニットのパラメータの仕組みを刷新した。攻撃力や移動速度などユニットのパラメータはJSONで指定できるが、以前からあまりいい設計と感じていなかったので変える必要があった。今回の変更で例えば攻撃力はターゲットの防御属性の種類の数の分存在することになった。別の例では射程距離と命中率も回避属性分存在(車両とか飛行機とか)する。この変更をしたくなかったのは設定読み込み処理の加えて火器管制AIや対戦AIなど広範囲な修正が必要だったからだ。しかし避け得ないことだった。

また数時間を費やして汎用的で視覚的なデバッガも改良して以前よりゲームの状態を掴めやすくした。上の写真ではAIが適切と考えるユニットの配置場所が立方体の大きさで示されている。

2018年3月21日水曜日

Bwars2 アルファ版2公開


アルファ版2を公開しました。ポータルサイトも開設。

前回からの変更点
・地形の立体化(射線が地形で遮られます)
・ユーザーが地形を追加可能(ポータルサイトのそのほかを参照)

デフォルトでマップは富士山で、関連ファイルを交換することでスコットランドのマップでも遊べます。

ダウンロードはポータルサイトから
ポータルサイトはこちら

2017年12月20日水曜日

Bwars2 α版

Bwars2 α版を公開しました。ダウンロードしてプレイすることが出来ます。



重要:α版でありまだまだ開発途中まっただなかのバージョンです。バグもあり機能も未実装のものがたくさんあります。


ダウンロードや遊び方などはポータルサイトに移動しました。以下の内容は古い場合があります

・Bwars2について
Bwars2はRTS(リアルタイムストラテジー)ゲームです。上空視点から戦場を俯瞰し、戦車などのユニットに指示をだし敵をやっつけるゲームです。

【動作環境】
・Windows (Directx12推奨)
・リファクタリングもしていないので全体的に動作が重いです。5年以内のPCのならなんとか動くでしょう。Macはまだ。ごめんね。





【視点操作方法】
・一般的なFPSに同じくWASDで移動
・マウスホイールで拡大縮小
・マウス中ボタンで角度変更

【ユニット操作方法】
・青が自分、赤が敵(AIが操作)
・ユニットにカーソルをかざすと攻撃範囲を示す円が表示される。
・ユニットシンボルをマウス左クリックでユニットを選択
・マウス左ドラックで範囲選択、複数のユニットを選択


・任意の場所でマウス右クリックすることで選択したユニットにその場所に移動させる
※ユニットは攻撃範囲の敵を自動で攻撃する。攻撃目標の指定はできない。

【セクター】
・戦場はいくつかのセクターに分割されていて、セクターの中央にある円のなかにユニットを移動させると占領できる。



・セクターは味方セクターに隣接していないと占領できない。またユニットが戦闘できるのは味方セクターとそれに隣接するセクターのみ。

【収入とユニット購入】
・一定時間ごとに占領しているセクターからの収入がゲーム画面左上の資金に追加される。
ユニットを購入するにはゲーム画面左上のガテゴリー(infなど)をクリックしユニットの種類をクリックしてそのあと戦場の任意の場所をクリックする(このときshiftキーを押しながら戦場をクリックを繰り返すと資金の許す限りユニットを配置できる)


・購入したユニットは次回収入が入る時に配備される。

【そのほか】
・勝利判定はない。
・F12キーでスクリーンショット。画像ファイルはBwars2_ではじまりデスクトップに保存される

【ヒント】
・基本的に森・街でユニットの回避率が上昇
・ゲーム開始時は赤軍のユニットがちょっと多い。でもAIは賢くないのでセクターを順当に占領しユニットを作り続ければ勝てる
・1つセクターにあまりに多くのユニットを配置すると攻撃速度が低下する

【今後の予定】
 * 経路探索
 * 地形の立体化
 * 地形による遮蔽、射線・視界の判定
 * ユニットパラメータの刷新
 * 火器管制システムの改善
 * AIの改善
 * ベータ版
 * 間接・範囲攻撃
 * シナリオイベント