Bascinet

マップシステム

最終更新:

Bot(ページ名リンク)

- view
管理者のみ編集可

マップシステム


広域マップ (1024×1024)

広域マップは、キャラクターが移動する際に使われる詳細マップの“もと”になるマップである。これは1024×1024である。PNGイメージで提供される。

↓これのおっきいやつで色つき。
#ref error :ご指定のページがありません。ページ名を確認して再度指定してください。


中域マップ (128×128)

中域マップは航海用、もしくは“広域移動”用のマップである。Hengbandでの“広域移動”に相当する。広域マップで着目した1マスから、なんらかの魔法的な補間によって、128×128にまで間延びさせる。

中域マップ中では物を落としたりすることはできない。単7純な移動のみのマップである。プレイヤーがそういった行為をしたかったり、モンスターが現れた時には、即座に詳細マップに移行する。

広域の着目点 広域で右に移動
 ・@*・ → ・・@*
 ・**・   ・・**
 ・・・・   ・・・・

着目点は常に一マスであるが、そこから2×2マスを参照する。


詳細マップ (32×32)

詳細マップは、中域マップの四マスから生成され、大きさは32×32である。一マスは5フィート四方であり、通常のキャラクターは一マスに一人だけ入ることになる。

一辺が50メートルなので、中域での河川の表記に便利だ。それだけの理由で32タイルである。


面積

,,※ヨーロッパ超広域地図は5000km×8000kmです。北はグリーンランドから南はエチオピア(赤道付近)まで。

面積
 詳細マップ:一辺48m。
 中域マップ:一辺6km、面積38km²。
 広域マップ:一辺6354km、面積4億km²。

参考
 地球の赤道:     4万キロメートル程度
 フランスの面積:   54万7030km²(739km四方、中域20マス)
 [[イギリス]]の面積:   24万4820km²(494km四方、中域13マス)
 アイルランドの面積: 7万0280km²(265km四方、中域6マス)
 ロシアの面積:    1707万5200km²(4132km四方、中域108マス)

フランスやイギリス、アイルランドのように常識的な大きさの国は、専用の中域マップを使い、国の形状と、周辺の山岳、詳細な河川などを設定する。ロシアのように面倒みきれん大きさの国は、複数の中域マップを苦心してつなげる。

中域マップは、ありふれたPNGイメージなどになる。以下は256ピクセルで作ってみたサンプル。黄色が町、灰色が高山、水色が河川、青が海、明るい緑は森である。プレイヤーに見えるのはこれを32倍したマップであり、実際のところ「乱雑につくってもちっとも問題ない」。1ドットだけで画面一杯一杯なのだ。



詳細マップの定義

これもPNGイメージなどのドットマトリクスで行う。あらかじめ固定された色と、そのタイル番号を結びつけておく。

また色のゼロ番を透明タイルとし、ランダム生成した詳細マップを適用する。これにより、ランダムな森のなかにたたずむ村といった情景を作り出せる。



中域マップでの冒険

  • 10knot=時速18kmなので、中域マップ128タイル(6km)を移動するのには20分。
  • 徒歩では128タイルを2時間掛かる。森であれば4時間以上かかるだろう。山岳部はさらに掛かるに違いない。
  • かなり速い走る速度(時速18km)で飛行した場合には、中域マップ一枚につき1/3時間かかる。
  • 一日に6時間移動した場合には、日に広域3タイルしか移動できない計算になる。いや、6時間は厳しいって。




重箱の細かい仕様

常に2×2マスを参照する方式であるため、8マスあれば、有効範囲は7×7になる。

したがって広域マップは1023×1023であり、中域マップは127×127となる。



街道

中域マップには街道を設定することができる。これは詳細マップ全部の大きさのドットで指定するが、ゲーム上はせいぜい広くても8タイル程度の幅にしかしない。それ以外は周囲のタイルを参照することにする。-四隅の場合:隣接する三つを参照(四種類)
  • 隅の場合:隣接する五つを参照(四種類)
  • それ以外:隣接する八つを参照

四隅   隅    それ以外
┌──  │**  ***
│@*  │@*  *@*
│**  │**  ***



アクセスの高速化

最低でも四枚の詳細マップを保持することにする。これはキャラクターがマップの端を移動しまくる場合、最悪の場合には四枚の接点を順に移動するだけでも四枚は必要だからである。プレイヤーがコンフィグ設定により、許容枚数を設定したり、無制限にして御大臣メモリーを生かしたりできるようにする。


乱数のシード

乱数シードは各種マップの絶対座標値である。

たとえば、(532,151)の位置であれば、53200151という値をもとに乱数が作られる。したがって、マップをランダム生成するようなほかのゲームのように、移動するたびにマップが変化することはない。しかしゲームシード?により、プレイヤーごとに微妙な差異が生じるかもしれない。

実際は16進数だけれど。


高さ

高さは相対高さとする。常に地上が高さ0であり、標高5000メートルであろうが、深海であろうが、同じ数値になる。山頂からのダンジョン100メートルは、深海から伸びる塔500メートルよりも「低い」ことになる。

高さは0を基準に、最大で+127段階、-128段階とする。一つの高さは10フィートであり、最大で地上381メートル、地下384メートルの建造物を作ることができる。

個々のタイル情報には、現在の標高が記載されている。山はプラス、海はマイナスである。


以下、ダンジョンや町が指定されていない場合の生成経路。
  • [地] 高さ+1の地点は、空中になる。フロアタイルは全て「空中」になる。飛行していないキャラクターは、直ちに下のフロアまで落下する。
  • [海] 高さ+nが海をこえていれば空中になる。こえていなければ海中になる。
  • [海/地] 高さ-1の地点は、土・岩石になる。




詳細マップの保存

地上の詳細マップは131072×131072の数がある。ゲームでは詳細マップごとにファイルを作るかもしれない。

  • [デバッグ用] 英字4文字で0~456975が表せるのでこれを座標に使う。たとえば "aqbcc.bmap"。
  • [デバッグ用] 高さが0の場合はそのまま、そうでなければ "aqbcc.+25.bmap" のように高さを記録する。
  • [リリース用] rand(xpos,ypos,height)から求めた、8文字のアルファベット名を使う。"jqrcpbmm.bmap"。マップファイルには、xpos、ypos、heightが記載されているので、リリース用の場合であっても、ファイルを総なめすることで読みとれる。

マップファイルには、その詳細マップの最終アクセス時刻が記載されており、ゲームエンジンはこれを見て「システム的腐敗」を判断することができる。すなわち、一ヶ月なり半年なりを経過した全てのオブジェクト・キャラクターは、食べられたり、壊れたり、移動したり、持ち去られたりすることで、システム上から除外される可能性がある。

ただし、システム的腐敗をしないものもある。
  • 全てのエゴアイテム、アーティファクト。
  • “重要である”とされているアイテム。
  • “重要な”モンスター。Mon.hero_level>=1。
  • キャラクターが魔法で改変した地形。



中域マップタイル

いくつかの強大な魔法は、中域マップタイルそのものを改変することがある。水なき大地にオアシスを創り出したり、山を削り取ったりする魔法である。こういう場合には、中域マップのタイルそのものを改変する。

  • 中域マップタイルは131072×131072の大きさがあり、1024×1024の区域に分けられている。
  • 区域ごとに中域マップタイルのファイルを作る。これは、ありふれた中域PNGから作られたデータや、プレイヤーによる地形改変により生成される。大きさは128×128のマトリクスとなる。


広域マップ・タイル

異なる三つのプレーン、三枚の画像で出来ている。
  • 国番号(0~255)。0はどこの領土でもない。1~255は実際の国番号。
  • 高さ(-128~+128)。指定ひとつにつき、海抜からの高さが、50フィート×pow(n, 1.5)となる。127で21468メートルである。詳細マップ1タイルあたり6400メートルの距離があるので、この勾配でも問題ないだろう。
  • 植生など。森、海、土、草、または市街地。
記事メニュー
ウィキ募集バナー