« 鏡もち | メイン | W:ETソースコード朗読会 第七回 »

May 02, 2005

■ ETPRO 3.1.13雑感

etproの新しいバージョンが出て数日が経過しました。もはやETのスタンダードといっても過言ではないMODになったetproですが、新バージョンの評価は私の知りえる範囲であまりよいとは言えないようです。武器ごとにヒットサウンドの有無が設定されたりなど、少なからず(?)な部分があるからでしょう。そんななか、特に気になる話がフォーラムにありました。

etproが重くなったというものです。どの程度遅くなるのかについては環境によって様々でしょうが、etproのフォーラムにこんな報告例がありました。

例1
ETmain (2.56): 92.0 fps
ETpro (3.1.9/2.56): 89.6 fps
ETmain (2.60): 91.8 fps
ETpro (3.1.13/2.60): 80.0 fps
例2
etmain 2.55 - 73.7 fps
etmain 2.56 - 73.7 fps
etmain 2.60 - 74.2 fps
etpro 3.1.9 - 68.9 fps
etpro 3.1.13 - 64.6 fps

あくまで事例の一つですが、これを見る限り3.1.9と3.1.13は10%近くのfps差が出ています。そのため快適(=有利)なプレイはマシンスペックや回線速度といった個々人の環境により強く依存する傾向となります。etproはアンチラグ機能の強化を謳っていますが、副作用としてより大きな負荷をもたらしては本末転倒と言わざるを得ません。

しかし無理もない結果といえばそれまでなのでしょう。etproはバージョンアップを重ねるにつれバグ修正やチート対策を施されてきました。これが通常のものよりも余計な負荷を発生させることは想像に難くありません。ですがこれらはサーバーサイドのコードでありクライアントのFPSが10%以上も落ち込む直接の原因とするにはいささか疑念が残ります。少なくとも3.1.9と3.1.13の間で非常に大きな差が生じている状況を満足に説明できないのではないでしょうか。

etproはあくまでMODで描写系やネットコードに関するエンジン部分の改変はないのですから、考えられる理由はそれほど多くないでしょう。つまり単純に新機能追加でサーバーサイドとクライアントサイドの処理が大幅に増加したからではないでしょうか。

そうなるとかなりの処理量増加をもたらす新機能群が果たして相応の効果を持っているかが問題になります。個人的には、NOです。3.1.9から3.1.13に盛り込まれた要素にはむしろET自体の持ち味を殺す要素もあります。ROF(=Rate of Fire)を変更するものはまさにその通りで、RtCWのmp40発射率でETのダメージ及び散弾率を適応すると間違いなく攻撃された相手はほぼ即死です。また距離によるダメージ減衰の消滅はスナイパーの存在意義を否定しています。Coはどこにクラスとしてのアイデンティティーを見出せばいいのでしょうか。これらの設定が強制ではないにしろ、ゲーム性を高めるものとは捉えにくいでしょう。

一方で評価されるべき点も多くあります。マップ位置のチャットへの反映、スパウンタイマー組み込み、新しいcvarなど。実際使用したことがあるのは半数もありませんが、精力的にユーザーの意見を反映しています。

fpsに直接関係ないのですが、プレイ感に最も大きな影響を与えていると考えるのはアンチラグ機能に関してです。ソースコードを読んだ際に紹介しましたが、アンチラグはかなりの処理量を伴います。具体的には誰かが「一回」攻撃を行うたびに、「全てのプレイヤー」の位置履歴を検索、設定、パーツ配置、当たり判定を行い、位置を元に戻します。もしサーバーに32人接続していて、16人が一秒間に6発撃てるSMGを撃ったとすると、32*16*6=3072回も一秒間に一連の処理が行われることになります。これはetproに限らずetmain共通の事項です。しかしetproはアンチラグ処理に手を加えており具体的に何をしたのかはわかりませんが、処理量は増加したように感じます。特に接続クライアントが増加するに従い当たり・くらい判定に違和感を強く受ける感覚があることは事実です。

ただヘッドショットの判定は今まで(ET2.60含め)ですとアンチラグ機能が有効ではありませんでしたが、etproではバッチリ効いています。これは出会い頭の銃撃戦からいきなりヘッドショットが入ることでも感じているのではないでしょうか。これはetproを評価すべき点だと思います。

イメージ

興味がある方はソースコードのg_combat.c 840行以降のIsHeadShot関数を見てください。この関数はダメージを与える関数からヘッドに当たったかどうかを見るために参照されますが、ヘッドの位置参照にアンチラグ機能は働いていません。ところがダメージを与える関数を呼び出す当たり判定の関数ではアンチラグ機能が有効です。つまり当たり判定関数ではヘッドに当たっていても、プレイヤーが動いていた場合ダメージ処理ではヘッドショットが無効になる可能性が高いのです。以上余談でした。

それにしても、クライアントでfpsが大幅に下がる原因がよくわかりません。時折HUDの表示が乱れる・消えることも不可解です。まあ3.1.13はまだベータですから今後処理が改良された安定バージョンがリリースされるはずです。これに期待しましょう。

投稿者 ikanatto : May 2, 2005 12:56 PM

■ コメント