Glenelg開発メモ/地図情報について

2006-06-20 (火) 08:39:27 (4232d)
お名前:

Glenelgの機能についてのメモ。
自分のための覚書でもあり、利用者のための豆知識でもあり、他AI開発者のための参考情報でもあり。

Glenelgでは地図情報に対応していますが、それに関連して「地図名の自動判定」という機能を持っています。
これのおかげでわずらわしい地図名設定はかなり省略できるのですが、完全ではありません。
このメモでは、Glenelgの自動判定の仕組みとその限界について、記載します。

今いる地図がどこなのか知る方法は、ユーザーには提供されています:ROクライアント上で「/where」とすればわかります。
ホムでも同じようなことができればいいのですが、残念ながら現状、その方法は提供されていません。(追記:現時点では、チャットコマンド利用でほぼ似たようなことはできるようにはしています)
そこでGlenelgでは「そのマップにしか存在しない固定物体」を利用して、自分がいるマップを判断するようにしています。
要は例えば「ホルグレンが見えたから、ここはプロの精錬所だ」「シャット嬢がいるから、ここはモロクだ」というような発想ですね。
またちょっと条件付きではあるのですが(詳細後述)、この監視対象には、商人などのNPCの他にもマップ間のゲートも含んでいます。
マップ移動をすると普通「戻る」ためのゲートがそばにあるので、それをきっかけに「新しいマップに移動した」と判断するわけです。

以上の仕組みで判定を行っているのですが、この方法は完全というわけではなく、いくつかの弱点・限界があります。

弱点1:独特なモノが近くにないと、判断できない。
例えばイグドラシルの樹→ニブルヘイム峡谷のマップ移動。
この場所のゲートは一方通行で、ニブルヘイム峡谷側の出現地点の近くにはゲートがありません。
またその出現地点近くには他の「独特なNPC」類もいないので、このマップ移動はGlenelgには知覚できません。
上記のような動作は、ホムにとって「マップ移動した」のか「単に同マップ内テレポした」のかが区別できないのです。
似たような話で、モロク街北側カプラセーブ地点の近辺にはNPCがいないため、蝶帰還したりするとそれがわかりません。
弱点2:ワープポータルでの移動は判断できない・誤検知する可能性が潜在している。
上記弱点1に通じる「ポータル着地点近くに独特アイテムが必要」という問題はもちろんありますが、それ以外にももう1つ、別の問題があります。
実は「マップ間にあるゲート」は、ホムから見ると「それだけでは場所を特定する情報にならない」というのが大きな問題。
例えばある時期、「ゲフェンD1F→TOWERに戻るゲート」と、「ピラD3F→4Fに上る右上側ゲート」は、ホムから見ると区別がつきませんでした(どちらも同じID:51145 を持っていました:過去形で書いてある理由は弱点4を参照)。
そのため「マップ移動後、あるゲートが近くにある」だけでは情報不足で、 「あるマップから移動したときに、そのマップ移動した場合に見えるはずのあるゲートがある」という判断が必要です。
(上記の例なら、以下のようにしないと判断できないということ。
 「今までゲフェン塔にいたつもりだが、今ID51145のゲートが見える」→GDに移動したと判断」
 「今までピラ3Fにいたつもりだが、今ID51145のゲートが見える」→ピラ4Fに移動したと判断」)
つまりゲートを経由しない移動では、ゲートがそばにあってもそれをもとに判断することができないのです。
弱点3:ID調査に大きな手間がかかる
どっちかというと開発上の話ですが・・・上述した方式を取ることすなわち、
「あるNPCがいたら、そこはどのマップと確定できる。」
「どのマップのどのゲートを通れば、どのマップのどのゲートの近くに出る」
・・・といった情報がないと地図判断ができない、ということです。
これらの情報は当然一般的なものではないため、すべて「実際に歩いて調査」しなければなりません。 結果的に、現時点のGlenelgではまだすべてのマップについて網羅できていませんし、 今後の新しいマップ対応にもそれなりに時間がかかります。
弱点4:メンテにもろい。
サーバーメンテが入ると、NPCやゲートのIDが変更されてしまうことがあります。 そうすると、上記IDを元にマップ判断をしているGlenelgには、マップ判断が正しく行えなくなってしまいます。
一応、現時点で確認したメンテナンスでは「IDが全体にnシフト」したような変更だけなので、 とりあえずその「nずれた」ということを判定・記憶することで対処する仕組みを作ってありますが、 将来もしIDが完全シャッフルされたりすると、破綻します:上記弱点3に該当する作業をそっくりやり直しなので。

上記を参考に、Glenelgの地図情報とのうまい付き合い方を。

  • セーブ地点の最寄NPCがどこなのか、覚えておく。
    蝶羽や死に戻りなど、頻繁に訪れることになるのがセーブ地点です。
    多くのマップではセーブ地点からNPCが見えるのでそのまま自動判定できますが、そうでないマップもあります。
    数歩歩くだけでNPCを視界に入れられるなら、地図機能をOffにしなくてもいいのでらくちんです。
    • 例えば、プロ街内南側セーブでは、セーブ地点から1歩上に歩くだけでプレゼント商人を発見・自動判定が可能です。
  • 上記のような「モノが近くにない状況」を避けられない場合。
    とりあえず地図情報Off(ホムの足元をALT+SHIFT+右クリック)して、 近くのNPCまで移動したあと再度ON(同じくホムの足元を操作)することで、判定しなおせます。