42.そして、望みは近付き易し
今回前半は久々にプログラム系の話がこんもりです。
できるだけ砕いて書きましたが、それでも分かり辛い部分も多いかと思われます。
空間をも断ち切るというディバイディング・ソードを、歪んだ空間部に振り下ろす。
一瞬脳裏の最悪の光景、ソードが空間に触れた瞬間破損してしまうのでは──そう思った。
だが実際は、ソードは何の抵抗もなく空間の下まで振り抜けた。一瞬空振ったかと思ったが、直後ソードの軌跡をなぞるように空間のズレが生じた。そして、そのまま両側の空間が、湾曲して空間断層にすいこまれて……消えた。
あっさりと。実にあっさりと終了した。
「終わったのですか?」
「ああ。これでもう大丈夫だと思う」
「お兄ちゃん。その剣は……?」
「あー……っとだな。できれば聞かないでくれると助かる」
「ん、わかった。聞かないよ」
「私も何も聞きませんわ」
ソードはストレージにしまい、俺達はまたミスフェア公国への進路をとった。とりあえずは、また先ほどの馬車を高高度での追い越しをする。そして、今度こそまっすぐ進み始めた。
二人への説明は、心苦しいが嘘をついた。アレは特殊なトラップモンスターの一種で、手持ちにそういったモンスター専用の武器があったので破壊しておいた──と。
だってほら、説明のしようが無いじゃないか。
俺自身完全に理解できてるわけじゃない。とはいえ、原因は判明している。あの辺りのフィールドを構成しているモデルデータに、不要なデータが混在していたのだ。
モデルデータと呼ばれる3次元データというのは、基本的に頂点座標値の集合体だ。たとえばサイコロのような立方体のデータがあったとする。それをビジュアル化した場合、当然立方体に見えるのだが、数値データとしては、計8箇所ある角の座標値を持っており、その座標内の特定の組み合わせ4点×6回=6面の板を形成する。そしてその板にどんな絵柄=テクスチャを貼るか、もしくは色を塗るかで実際のオブジェクトが完成するのだ。
これは当然の決まりごとで、そこに矛盾が入り込む余地はない。
だが今回の件、その“あたりまえ”を覆す不備データが混在していたのだ。
例えば三角形や四角形。それらの内角の合計は、それぞれ180度と360度である。これは自然界では覆すことのできない“あたりまえ”の事象だ。しかし、もしその“あたりまえ”を崩すようなことがあったらどうだろうか。
要するに“三角形だが内角の合計が180度ではない”という、絶対にありえない矛盾を含んだデータが存在したらどうなっていたか。
これは通常、自然界ではありえない。だがゲーム──プログラムの世界では、必ずしも無いとは言い切れないのだ。
例えばモデルデータの中に、三角形を構成する情報があったとする。
そういったデータの場合、まずヘッダデータ──先頭データには大まかな区分が記述されている。そこには『ここから三角形のデータです』という意味を表すデータが設定されているものだ。それを見て処理コンピュータは『ならば頂点座標3箇所の情報と出来上がった面の情報は?』となり、続けてそれらのデータを取得・参照していく。これが数値データから図形を構成する、一番単純な流れだ。
だが、もしもこのデータが設計ミスや運用中の不備などでありえない数値になったらどうなる。きっとそこには“三角形だが内角の合計が180度ではない”という、普通ではありえないものが出来上がってしまうだろう。
今回俺がみた不可解なモデルも、多分そういった原因による不正データの一つだろう。
では、いったいその不正データの何が問題なのか? そんなのは簡単だ。分からないことが分からないのが問題なんだ。
例えば先ほどのありえない情報を内包した三角形。もしあれが、実際のゲーム内に存在してプレイヤーのPCで表示された場合どうなるのか。実はこれ、答えは一つではない。例えばこんな感じだ。
AさんのPC:図形を表示しようとした瞬間にフリーズ
BさんのPC:図形は表示されるが正しく表示されない
CさんのPC:図形は表示されない
まずAさんのPCでは、本来あるはずのない計算式を与えられたPCが、正常な値を導き出せなくなりそのまま画面への表示を放棄。結果そのゲームもしくはPCはフリーズしてしまった、というケース。これは別段珍しいことではなく、大型アップデート直後にモデル不備で落ちるというのは、実際によくある話だ。ちなみにあるはずのない計算式というは、ゼロ除算などが発生といった『コンピュータ上では値の算出がされずエラー認識される式』などだ。多くのコンピュータでは、そういった解の出ない計算式は答えを返さず、扱えませんという返答をして停止してしまうことが多い。結果、AさんのPCに搭載されているグラフィック機能では、そのエラー処理を受けてそのまま停止してしまった。
次にBさんのPC。こちらは正しく表示されなかった場合だが、次にあるCさんと違いまったく表示されなかったわけではない。つまり表示を行っている最中、上記のあるはずのない計算式に出くわしたが、その計算を行う前に『ゼロ除算をしそうなのでスキップする』という感じで、途中のエラーに繋がる処理を予め実行しなかった場合だ。そうなると当然一部の値に不備が出るが、それ以外の部分はなんとか動作してくれるという仕組みだ。
最後にCさんのPC。これはBさんと同じように不備の出そうな疑いのある式を除外しているのだが、逐次表示する形式ではなく、1モデルの形成を一括で行っている場合だ。なので形成最中に不備の疑いが発生したため、そのモデルをまるまる表示しないで先にすすんだらこうなるのだ。
ざっと簡単な例をあげても、こんな感じだ。こんなケース以外にも、他には個人のPCのメモリ具合や、グラフィックボードやオンボードチップ、またグラフィックドライバの更新具合、そういった状況により、結果は千差万別だろう。
そんな不可解な状況が、この異世界ではどんな風に展開されるかわからない。少なくとも投げた石が、消滅するという不思議な空間だ。放置しておくわけにはいかなかった。
ともあれなんとか手持ちの武器で解決はできた。LoUのサービス期間内に、この辺りをまじめに通行した人が少なかったせいで見つからなかったのだろうな。
思い返せば新しい街とか実装直後は、サーバオープンと同時に何人かが競うように街へ向かい、着いた人がすぐさま【ワープポータル】を記録して、王都とかから瞬時に飛べるようにして小銭稼ぎをしてたような気がする。地道に道を歩いた人って全体の何%だろうね。
不思議な空間の問題を解決した後、俺達はまたミスフェア公国への進路をとった。
既に先ほどの馬車ははるか後方になり、もう半日ほど停止していても追いつかれないほど離れた。
それほどまでにスレイプニルの移動が軽快なのだが、基本的に浮いて駆けているので振動疲労はまったくないのが凄い。とはいえ座りっぱなしの馬上。時折の休憩以外は、ミズキとフローリアがおしゃべりすることが日常風景となっている。
……しかしまあ、女の子ってのは話題尽きないな。ずっとしゃべってるよ。
「フローリアって、ミスフェアには何度も行ってるんだよね?」
「はい。主な施設の場所を把握できる程度には」
「海に面した国ってことは、やっぱり特産品は魚とかなの?」
「そうですね。港からでる漁船での漁が主な産業ですね。でも、そうですね……」
「他に何かあるの?」
「ミスフェア公国の港は貿易港としての役割もあって、それによっての交易も盛んですね」
「へー……あ、じゃあ他の国から入ってくる物ってことだよね? フローリアが何か好きなものってあったりする?」
「私がですか? そうですね……どんなものが扱われているのか、私もあまり詳しくはないので……」
「うーん、そうかぁ」
「そうですわ。たしか以前ミスフェア公国を訪れた時、アルンセム公爵による食事で頂いた焼き魚にかけたアレは……そう! 『ショウユ』ですわ! 以前カズキとお寿司を頂いた時につかったものと同じです」
「あっ、そうか」
二人の会話を聞くともなしに耳にしていたが、思わず声が出てしまった。醤油に対しての知識があるってことは、他の和文化もあるってことじゃないのだろうか。
「どうしたのお兄ちゃん?」
「えっと、カズキ。何か気になることでも……?」
驚く二人を見ながら、俺はある仮説を話すことにした。
「もしかしたらだが……その醤油をやりとりしている国。そこに『畳』があるかもしれないぞ?」
「タ、タタミですか!?」
うわ、またしても凄い食い付き。っていうか、一国の王女様が畳に大騒ぎってどうなの。
でもまあ、多分俺の予想は正しいと思う。ミスフェア公国が貿易している相手国が、おそらく和風の国なんだろう。少なくともミスフェア公国と船をつかっての交易をするほどには、離れた場所にあるってことだな。
「そうなんですか。着いたらアルンセム公爵に、どこの国なのかお伺いしなくては」
……買う気満々か?
やべえ。グランティル王城の王女部屋に、畳敷きの区画とその上に寝転がってるフローリアの幻が見えた。めぐりめぐって、俺が国王とかに怒られたりしないよね?
今回の「モデルデータ不備によるゲーム動作不良」ですが、これは実際のオンラインゲームで起こった実話を少しアレンジしました。
実話ではゲームのロビー的なエリアに追加で設置した像に不具合があり、物語中のA~Cのように様々な不具合が発生しておりました。その件は最終的に、像を撤去して解決となりました。