2019年2月14日

馬に乗って自動的に移動できるMOD -Automatic Horse Travel-

自分の馬に乗って、自動的に目的地まで移動することができます。
ファストトラベルをするのではなく、到着するまで移動風景を眺めていられます。

目的地には各都市や村など26か所を指定できるほか、カスタム地点を8つまで登録しておくことが可能です。

このMODには、使い方に関する重要な注意点があります。
必ず 2-4. ★10秒ルール★ をお読みになってからお使いください。


目次

  1. 最新版ダウンロード
  2. 使い方
  3. インストール
  4. アンインストール
  5. 更新履歴
  6. 技術的な話を含めた雑談

1. 最新版ダウンロード (uploader.jp)

英語版 Automatic Horse Travel 0.1
日本語版 Automatic Horse Travel 0.1 (jp)

2. 使い方

2-1. スイートキャロットの作成

料理鍋で、「ニンジン」から「スイートキャロット」を作成します。

2-2. 移動先の指定

まず自分の馬に一度乗っておいてください。ファストトラベルで付いてくる状態であればOKです。

そして、馬には乗らずそばに立って「スイートキャロット」を使います。インベントリの食べ物カテゴリにあります。

インベントリを閉じると、次のような移動メニューが出ます。

  • 目的地 1 … カスタム地点、イーストマーチ、ファルクリース、ハーフィンガル、ハイヤルマーチ から選択
  • 目的地 2 … ペイル、リーチ、リフト、ホワイトラン、ウィンターホールド から選択
  • 速度設定 … 移動速度の変更

目的地を指定すると「スイートキャロット」が消費され、オートセーブが作成された後に、自動的に馬に乗って出発します。

移動中のカメラは、左右90度までは自由に動かせます。残念ながら上下には動かせません。

馬上で武器を振るうことも可能です。パワーアタックを行うと馬が停止してしまいますので、その場合は一度馬から降りてください。

2-3. 速度の指定

速度設定では、移動速度を4段階で指定することができます。初期値は「キャンター」です。

「キャンター」が、通常走って移動する速度です。「ギャロップ」はスプリント速度になります。

移動中に段差を飛び下りたり泳いだりしたとき、速度が「ウォーク」に切り替わることがあります。この場合、他の速度には戻りませんので、必要なら一度降りて再出発してください。

もし馬の「歩き」を速くするMODを入れている場合は、想定外に速いスピードになる可能性があります。

具体的には、「MovementType > Horse_Default_MT (0001CF24)」の「Forward Walk」の数値を「125.11」から増やすMODがこれに当たります。
競合するわけではないので併用しても構いません。ただしこれでギャロップすると、速すぎて相当な描画負荷がかかると思います。
「歩き」以外の数値については当MODと関係ありません。

2-4. ★10秒ルール★

重要な注意点です。

  • 移動を開始したら、最低でも10秒程度は馬に乗ったままでいてください。
  • そして、もし途中で馬から降りた場合は、10秒程度は馬に触らないでください。

移動中にアクティベートボタンを押すとその場で降りられますが、移動を開始してから10秒程度は乗ったままでいるようにしてください。
可能であれば、より長い時間乗っている方が望ましいです。

途中で降りた場合も、10秒程度は馬に触らないでください。
この時は、左上に「馬の移動準備が整いました。」というメッセージが出たら、それ以上待つ必要はありません。

これは、移動処理スクリプトを安定して終了させ、大切なセーブデータにゴミを残さないための対策です。

2-5. 移動処理の終了

移動処理スクリプトは、次の3パターンで即座に終了します。終了後は、自動的に馬から降ります。

  • 目的地に到達 … 「移動を完了しました。」と「馬の移動準備が整いました。」のメッセージを表示。
  • 移動経路が見つからない … 「経路を確保できませんでした。」と「馬の移動準備が整いました。」のメッセージを表示。
  • 敵からのパワーアタックや、馬の死亡により落馬 … メッセージの表示なしで終了。
2-6. 移動処理の残存と、その対処法

移動中にアクティベートボタンで降りた場合、スクリプトはそれをすぐに感知することができません。

★10秒ルール★ を守っていれば、通常は途中で降りても数秒~十数秒で処理が終了し、「馬の移動準備が整いました。」のメッセージが表示されます。

処理が残存している最中は、次の移動が行えない仕様にしてあります。
この残存中にスイートキャロットを使うと、「馬は満腹です。しばらくお待ちください。」というメッセージが出ます。

もし「満腹状態」が続いた場合は、以下の対処法を試してみてください。

  1. スイートキャロットを使って満腹メッセージを出した後、馬を60秒ほど乗り回す。(おすすめ)
  2. ファストトラベルをする。(成功率は低い)
  3. 馬に乗ったまま敵に襲われる方法で、馬を死なせる。

★10秒ルール★ さえ守っていれば、1 の方法は成功率が高いです。60秒は長く感じますが、最も安定して満腹状態を解除できます。

1 や 2 の方法が成功すると、「馬の移動準備が整いました。」のメッセージが表示されます。
この時点でスクリプトは完全に終了しており、次の移動を行うことができます。

3 は微妙な方法ですが、次の馬を用意して移動メニューが開くようなら、スクリプトの残存はありません。

1~3 でうまくいかない場合は、申し訳ありませんがオートセーブからやり直してください。

2-7. 地形に引っかかった場合

ナビメッシュの精度によっては、馬が地形に引っかかることがあります。

もし馬が進めず、周囲も狭くて降りられなくなった場合は、騎乗のまま「スイートキャロット」を使ってください。
プレイヤーをその場で強制的に降ろして止まります。

移動経路についてはスカイリムの標準機能で決定されています。
クエストでNPCに付いていくときのように、明らかに道から外れて戻る、という動きをすることもあります。

2-8. カスタム地点の登録

スニーク状態で「スイートキャロット」を使うと、カスタム地点登録メニューが出ます。

A~Hのスロットを選択して「登録」すると、その地点を移動先として指定することができるようになります。名称は自動で入力されます。
登録の解除も、このメニューから行うことができます。

カスタム地点の設定では、実際には「スイートキャロット」を消費しません。メニューを閉じればインベントリに戻ってきます。

目次に戻る


3. インストール

SKSEが必要です。
NMM等のMOD管理ツールでインストールしてください。途中導入が可能です。ロードオーダーはどこでも良いです。

使い方についていろいろ書きましたが、とりあえず次の2点を覚えておけばOKです。

  1. ★10秒ルール★ を守る(10秒間は乗ったままでいる、途中で降りたら10秒間は触らない)
  2. 馬が満腹状態になったら、60秒ほど乗り回してメッセージが出るのを待つ

4. アンインストール

移動中でなく、移動処理スクリプトが完全に終了している状態でアンインストールしてください。
「スイートキャロット」を馬のそばで使ったときに、移動メニューが出る状態なら大丈夫です。

もし移動メニューが出ない、満腹状態でアンインストールすると、セーブデータに明らかなゴミが残ります。
スクリプトを馬に付けているわけではないので、このゴミが馬の挙動に影響を残すことはないはずですが、おすすめはできません。

目次に戻る


5. 更新履歴

  • 2019/02/14 (version 0.1); 公開。

目次に戻る


6. 技術的な話を含めた雑談

6-1. 移動処理の終了について

このMODの移動処理には、スクリプトを使っています。
実際の移動を行っているのは、次の関数1行です。

PathToReference(ObjectReference aTarget, float afWalkRunPercent)

この「PathToReference」は「latent」に属する関数で、その処理が終わらないと次の行に進まない仕様です。

処理が終わると、到達できたかどうかで「true」または「false」を返すのですが、これを馬に適用したときの動作は次のような感じでした。

  • 目的地に到達した … 即座に「true」を返す。
  • 経路が見つからない … 即座に「false」を返す。ナビメッシュ的にたどり着けない場合や、途中で他のNPCに経路を妨害された場合。
  • プレイヤーが落馬 … 即座に「false」を返す。
  • プレイヤーがアクティベートボタンで降りた … しばらく感知できない。感知した際は「true」を返す(?)。
  • 他のスクリプトで強制的に降ろす … しばらく感知できない。感知した際は「true」を返す(?)。

つまり、馬から降りずに関数の終了を待てば、スクリプトが残存することはありません。
ですが、移動中に降りられない仕様にしてしまうとかなり不便なので、これは現実的ではありません。

「PathToReference」の処理を他のスクリプトから強制的に落とすことができないものかと頑張ってみたのですが、どうしてもうまくいきませんでした。
この残存スクリプトが溜まってしまわないよう、残存時は満腹ということにして、次の移動ができないように制限しています。

実のところ、処理がいくつ残存していても、馬の挙動や次の移動には影響ありませんでした。
かなり時間が経ってから残存スクリプトが終了することもあるので、アンインストールさえ考えなければ影響は少なそうです。
しかし、使わないスクリプトがセーブデータに残るというのは褒められたものじゃありませんから、安定して終了させる方法を模索していました。

★10秒ルール★ はそのテストプレイの中で最も効果が高かったものです。
これを発見してからは、うちの環境だと途中で降りても100%安定して終了させられるようになっています。

いつかまた別の良い方法が見つかったら実装したいと思います。

6-2. AIを使った移動実験の結果

スクリプトの残存を避ける方法として、移動をAIで行うバージョンも作成していました。
クエストのエイリアスに馬を入れて、AIを付与するという方法です。

がしかし、これは問題が多すぎて断念しました。

例えば目的地まで到達しても、その瞬間を捉えるのが難しいのです。馬がその目的地の中心に向かってクルクル回ってしまい、見た目がよろしくありません。
さらにプレイヤーが途中で降りた場合も、何も対策しないと勝手に目的地へ走って行ってしまいますし、プレイヤーから離れないAIを併用すると、すごく挙動不審な馬になってしまいます。

このAIをスパッと切る方法がわからず、EnableAI() や EvaluatePackage() などの思いつく関数を当てたのですが、全然言うことを聞いてくれませんでした。
関数を当ててからファストトラベルすればAIが切れることが多いものの、これは確実にはいきません。

究極の手段として「殺してから生き返らせる」こともやってみたのに、AIの亡霊が付きまとってきて消えませんでした。

馬車移動MODがあるんだから、到着したら即終了!というAI動作は可能なはずなんですが…中身を解析するのが面倒で。(クエストはちょっと苦手分野)
おまけに、途中で降りたときのAI自動停止を実装できる気がせず、やめました。

というわけで、馬を思ったように動かすのはなかなか難しいというお話でした。

テストプレイで26か所を回る際、★10秒ルール★ を守って移動している限りは問題なかったので、これを現時点での最適な方法とします。

少しデリケートなMODになってしまいましたが、コンセプトは気に入っているので公開します。

ココアで手を温めながらのんびりと移動風景を眺めたり、オオカミを振り切る様子をたけのこの里を食べながら傍観したりするのは楽しいですよ。

オオカミがでたぞー!

アルヴァクさんでもいけた!

目次に戻る

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。