The Elder Scrolls 3: Morrowind #13 Hanafuda: Akaviri Playing Cards

Hanafuda: Akaviri Playing Cards

Morrowindで花札の「こいこい」をギャンブルとして遊べるようにするMod。

5月のModathonの途中から作り始めて、今まで結構時間をかけて作っていた。まだやり残していることが結構あるんだけれど、自分だとできないことだったり、できても必要以上に時間をかけているとモチベーションも無くなってくるので、キリのいいところで一旦リリース。
ソースコード量だけで言うとMorrowindのmodのなかでもかなりの大作だと思うし、ここまでMorrowindのUIを使い倒しているmodは他にないんじゃないかと思う。なので、苦労に見合うように遊んでくれると嬉しいです。

発端は、Modathonが始まってcommunityで花札をMorrowindで遊びたいという声が上がったことから。communityには自分を除いて日本人は見当たらない(と思う)ので、もちろん海外の人から。その時は、Modathon向けに作っているmodが既にいくつかあったし、modding可能な範疇で技術的に作れるのか分からない部分が多かったので、あまり気に留めずにいた。

いくつかmodをリリースしてある程度moddingに慣れてきたところで、より発展的なアイデアをいくつか検証しているときに、以前のその話を思い出した。日本人なので花札について知っていて、さらに日本語で専門的な情報を集めやすい自分がそれを実現することに向いてるんじゃないかと思ったので、技術的に実現可能なのかどうか他のアイデアと並行してプロトタイピングしはじめた。
Modathon期間中はcommunity内でカードゲームについて時々話題が出ていたので、ネタが被らないかどうかちょっと心配していた。この話題はあくまで話題で、実際に本格的に作っている人はまだいなかったので杞憂だったのだが。

Modathonの終わりが近づいてきたときに、ゲームが大雑把に一通り動作する状態になって、MWSEで作りきれそうというのは分かったが、Modathonには間に合わなさそうというのも分かった。
完成までやることが沢山あるのと、ネタ被りしないように公言しておきたいのと、要望出していた人のほうが花札に詳しいのでフィードバックを貰いながらのほうがいいだろうということで、community内で進捗をオープンにしながら作ることにした。

続きを読む →

The Elder Scrolls 3: Morrowind #11 Use What You Used First

Use What You Used First

ロックピックやリペアツール、ライトといった回数や時間に残量があるアイテムを使用するとき、同じアイテムのうち一番残量が少ないものから使用するようにするmod。

そう書いているということはデフォルトの挙動はそうじゃなくて、特にQuick Keyから使用すると適当に選んで使い始めるので、何回か中途半端に使ったアイテムが沢山インベントリに生成されることになる。
これはModathon以前にプレイしていた時に結構気になっていたんだけれど、コミュニティのdiscordのやり取りを見ていて思い出したので作った。既存のmodでは、ロックピックを持ってない時に錠の前で自動で装備するとか、キー入力でロックピックの品質を切り替えていくとかあるんだけれど、残り回数についてケアしているものは見当たらなかった。
気にしない人は気にしない挙動なんだろうけれど、特にリペアツールなんかは結構重量があって嵩張るので心理面以外にも実利がある。

うれしいことにインベントリから自分で選んで使用するときにも、ロックピックの残り回数を見比べて少ないものから選ぶということをしなくても、適当に装備しようとすれば残り回数が少ないやつから自動的に使用し始める。Quick Keyでなくても便利になった。

テストしていて気が付いたんだけれど、武器を振っている最中にもロックピックなどは装備することができるし、ロックピックを使っている最中にプローブなどに持ちかえることもできる。武器から武器への変更は振り終わるまで出来ないのに。

The Elder Scrolls 3: Morrowind #10 Custom Portrait

Custom Portrait

インベントリ左にあるレンダリングされたキャラクタイメージを任意の指定した画像に差し替えるmod。ペーパードールをポートレートに差し替えると言うとなんだか懐かしい響き。

20年以上前の見栄えのしないレンダリングよりも、私の好きなクラシックRPGのポートレート方式の方が良いんじゃないかと思ってやってみた。
MWSEを使うと、メニュー内に画像を足すことは簡単にできるんだけれど、このキャラクターイメージの場合、内部的にレンダリング諸々の独自の処理が動き続けているので普通の画像操作とは挙動が異なり、自在に画像をレイアウトできるというわけにはいかない。そのブラックボックスの挙動を把握することが最初の難所だった。
チマチマと挙動を推測して実践してうまくいけそうだという手応えは掴めたんだけれど、自分だけが差し替えるんじゃなくてユーザが好きな画像を指定できるmodとしてリリースするには、それが容易にできるようなユーザフレンドリーなMod Configメニューを作るのが大変だろうという予想は浮かんでいた。
そして、予想通りメニュー作りが一番大変だった。

MWSEのMod Configメニューには、mcmというフレームワークが用意されていて、基本的にはそれで比較的容易にMod Configのメニュー画面を作成することが出来るんだけれど、今回はその基本的なことから外れていることをやるだろうという予想だ。
このmodのメニューでやることは、一般的なメニューの単純にフラグをオンオフして、スライダーで値を調整できるというものではなくて、画像を指定してロードできるようにして、エラーハンドリングも含めて正常動作するように対応して、インベントリ相当のプレビューを表示して、表示を調整するような各項目の変更にもプレビューをリアルタイムに追従させるという…要するに様々な項目が連動して動的に変化するメニューである。このような場合、mcmを使用することは(知っている限りでは)その構造上難しく、フレームワークではないローレベルなUIのAPIを使用して処理する必要がある。

それから、本来のキャラクターイメージには、マウスカーソルをあてるとその装備品のツールチップが表示されて、それをクリックすると装備を外すことができ、逆に装備品やアイテムを持っていくと装備や使用したりする機能がある。
前者はポートレートになることで見た目と機能が一致しなくなるので無効にしたいが(インベントリから同じことが出来るので不便ではない)、後者は出来なくなるのは困る。前者を無効にしようとしたときに、単純にマウスオーバーやクリックのイベント処理を停止させると、全く同じクリックを行う後者の装備やアイテムの使用も出来なくなる。データやイベントには、それらを区別するための違いがなくて困った。これはCommunityでそんなの分からんよという、ドキュメントになってないような情報を教えてもらって何とかなった。

余談であるが、この手のペーパードールやポートレートとステータス画面は、本来の電源無しのRole-Playing Gameのキャラクターシートがモチーフになっていると思うのだけれど、このmodを作るときに検索して見ていたところ、日本のキャラクターシートにはほとんど必ずと言っていいほどポートレート欄があるのだけれど、英語圏のCharacter Sheetにはポートレート欄が無いものが多い、ということに気が付いた。

The Elder Scrolls 3: Morrowind #9 DPS Tooltips

DPS Tooltips

武器のDPSをエンチャントも含めて解析的に計算してツールチップに表示するmod。

Morrowindをプレイしていると、当然ながら武器はベースダメージも速度もバラバラで、さらにエンチャントも多種多様の効果があって、それらを好きなようにもエンチャント出来てしまうので、何を装備すりゃいいのかよく分からんので、そういう表示計が欲しくて作った。
表示上だとベースダメージは高いが振りの遅い武器は強そうに見えるんだけれど、実際に可視化してみると振りの早い武器が結構強かったりして興味深い。

リリース上は2番目だがMorrowindで最初に作ったmodで、これは難産だった。こんな小さな数字の表示をするためにやっていることは割に合わないくらい手間暇がかかっている。しかもそれでいてまだ不確かな部分がある。
最初は、武器ダメージとエンチャントダメージを速度でかければいいだろうくらいの軽い気持ちだったんだけれど、ダメージ計算の内部仕様を調べていくと、その複雑さに泥沼になっていった。それを自力でシミュレーションする必要があるのだ。
数値的に求めればDoTの正確なダメージ量が求められるんだけれど、それはさらに難しいことが分かったので早々に諦めた。ツールチップを表示する短い時間に処理しきれない可能性もあるし。

処理を複雑にしている最たるものは、Resist/Weakness による属性ダメージの増減と、Fortify/Damage/Drain/Absorb/Restore Attributes による能力値の増減だ。
攻撃したときに攻撃対象にだけネガティブな効果だけが適用されるのであればまだマシなんだけれど、ゲームシステム的にResistやFortifyといった攻撃対象にとってポジティブな効果すら自由にエンチャントできてしまうし、自分にもある程度効果を追加できてしまう。
極めつけは、Resist/ Weakness to Magicka の存在だ。この効果はResist/ Weakness の中で一番特殊で、属性ダメージ効果を除いて他の属性Weakness を含む殆どのネガティブな効果に影響する。そのため、エンチャントの解決順序には気を使う必要がある。

その他にも、Constant Effectのある武器を装備していたり、On Strikeの武器で既に攻撃していてその効果が適用済みだったりすると、それを差っ引いておかないと二重に効果が適用されて正しい結果にならないという問題にも設計を悩まされたりしている。
さらにバグなのか仕様なのか、普通に作ったらそうはならないだろうという風に解決順序が入れ替わっていたり符号が逆だったり、Code Patchによってさらにそれが修正されていたりするので、ひたすらリサーチに時間をかける必要があった。

未対応になっている命中率に対応できるとより正確なDPSが分かるんだけれど、それは命中率に関わるエンチャントや能力値、スキルの影響を解決する必要があることを意味している。
21年間ありそうでまだなかった理由が分かったのと、エンジンの内部仕様に詳しい人に面倒見て欲しいmodである。