2016年3月13日日曜日

Floating Menu & Ballon Widget

詳しい説明は時間が出来たときに書きます。
とりあえず簡単な説明だけ。

(2016/03/21)
SWF側に機能を追加しました。
 ・SWFからPapyrus関数やイベントを呼び出せるようになりました。(ただし戻り値取得は不可)
 ・SWFに音を鳴らす機能を付けました。
 ・SWFでキー入力を拾えるようにしました。

使用方法は・・・使用例(BalloonWidget)を見て悟ってください。



FloatingMenu

「フローティングメニュー」を追加するMOD。
アクターやオブジェクトの位置にウィジェットを表示できるようになります。

※ ただし、これ単体では何の役にも立ちません。


要skse 1.7.3以上、SkyUIは不要

(MODのダウンロード)
https://drive.google.com/open?id=0B6YyKRZ4dV_2MnJ3VTVEblJYMkU


BalloonWidget

FloatingMenuの使用例です。
アクターが喋ったときに、頭上に吹き出しウィジェット表示します。

(MODのダウンロード)
https://drive.google.com/open?id=0B6YyKRZ4dV_2R003V0JRRmJFSWc


見た目はこんな感じ。
https://twitter.com/himika/status/693827749689995265





Floating MenuとBallon Widgetで使っているdllとswfのソースファイル
https://drive.google.com/open?id=0B6YyKRZ4dV_2MVI3b05mQkxTSFk





 まだ作ってる最中なので、バグ多いです。API等の仕様も変わると思うのでご了承ください。
あと、飽きたら唐突に終わると思います。終わったらゴメンナサイ。

SkyUIではHUD Menu上にウィジェットを追加していますが、こちらはFloating Menuという名前の新規メニューを作り、そこにウィジェットを追加します。HUD Menuとは「完全に別」なので、HUD Menu上のコンパスや各種バー、SkyUIのウィジェットとは干渉しません。






ウィジェットを自作する方へ。
ものすごくハマりそうなポイント。

(1)
セーブ&ロードやエリア移動などでローディング画面を挟むと、自動でウィジェットのswfをロード・アンロードする仕様になっています。
(その際、パピルススクリプトに OnWidgetRemoved と OnWidgetLoaded を飛ばします)

swf側ではデータを保存しておくことができないため、再ロードによって真っ白の状態に戻ります。
swfの表示に必要なデータはパピルス側で変数に保存しておき、OnWidgetLoadedイベントを受け取ったら、データを再送信してください。


(2)
FloatingWidget.Destroy() でウィジェットを削除しても、削除したFloatingWidget上でスクリプトが動いている間は、メモリ上に残り続けます。ただし、スクリプトのselfはウィジェットをくっつけたObjectReferenceから完全に切り離されてNoneになります。
削除後のselfを主体にした呼び出し(例えばself.GetPositionX()など)は全てエラーが出るので注意してください。


(3)
FloatingWidgetManager.GetWidget() 関数は、最初に見つけたFloatingWidgetを返します。
同じオブジェクト/アクターに複数のFloatingWidgetがくっついていた場合は、最初に見つけたものしか取得できませんので、注意してください。


(4)
FloatingWidgetでは、RegisterForUpdate系の関数やイベントを使わないほうが良いです。

ひとつのアクターに複数のスクリプトがついている場合、発生するイベントはスクリプト同士で干渉します。(これはパピルス自体の仕様なので、どうしようもないです)
たとえば、FloatingWidgetでOnUpdateイベントが発生すると、他のスクリプトにもOnUpdateイベントが発生しますし、さらには、UnregisterFor~()でイベントを止めると、他のスクリプトのイベントも止まります。
ユニークなアクターには、たいていの場合、死後に死体を消すためのスクリプトWIDeadBodyCleanupScript がついています。またAIパッケージで後からスクリプトがくっつくこともあります。例えばNPCが何か物をはこぶ際はCarryActorScriptが付きます。場合によっては、
同じアクターに複数のFloatingWidgetを貼り付けることもあるでしょう。

これらすべてで干渉するため、安易にRegisterFor~()を使うと思わぬ誤動作の原因になります。

回避策ですが、ReferenceAliasやActiveMagicEffectなら、くっついた先のObjectReferenceやActorと干渉しません。同じActorにくっついたReferenceAlias同士で干渉することもありませんので、RegisterFor~系の関数はReferenceAliasやActiveMagicEffectをつけて、そちらで使うのが良いと思います。

余談ですが、ReferenceAliasには別の問題が存在します。
ReferenceAliasをアクターにくっつけると必ずEvaluatePackage()が発生し、AIパッケージが再計算されるのですが、アクターの行動中にEvaluatePackage()がおきると、実行中の行動に支障が生じて中断されることがあります。
それがストーリーイベントの重要なシーンだったりすると、 最悪の場合、そのままクエストが進行不能になる危険性があります。

2016年2月28日日曜日

Quick Loot ver.1.1f


Quick Loot ver.1.1f
 http://www.nexusmods.com/skyrim/mods/73096/


CTDの原因を特定できたため、 1.1fで修正を行いました。
(無効化したMODの残骸がコンテナに残っていると、クラッシュしていたようです)


なにこれ?


SkyrimにFallout 4風のルートメニューを追加するMODです。
宝箱や死体からアイテムを拾う際に、いちいちインベントリメニューを開かなくてもアイテムを拾えるようになります。



必要要件


Skyrim 1.9.32
SKSE 1.7.1 以上 (http://skse.silverlock.org/)


インストール方法


圧縮ファイルを解凍して、Skyrimのインストール先Skyrim\Data にコピーしてください。

アンインストールは、ファイルを削除するだけでOKです。
セーブファイルを一切よごさないので、削除してもゲームへの影響は一切ありません。
気軽に試して頂けると嬉しいです。


操作方法


【キーボード】
 マウスホイール上下でアイテム選択、[E]キーで取得、[R]で調べる
【コントローラー】
 方向キー上下でアイテム選択、(A)ボタンで取得、(X)ボタンで調べる

武器を構える/しまうボタン長押しで、QuickLootを一時停止・再開することが出来ます。


現在判明してる不具合


大量のアイテムが入ったコンテナを表示すると、たまにクラッシュする。(環境によっては確定クラッシュ?)
アイテム自動整理スクリプトなどが付いているコンテナでCTDすることがある。
キリル文字(ロシア語)が文字化けする。(修正できたと思うのですが、動作報告がなくて・・・)

更新履歴


2016/02/22 (ver.1.1f)
    ・一部の拾えない光源アイテム(たいまつなど)が拾えてしまうバグを修正。
    ・無効化したMODの残骸が原因でCTDするバグを修正。
2016/02/22 (ver.1.1e)
    ・[R]キー長押しでQuickLootをON/OFFする機能を追加。
    ・ナミラの食人とBetterVampiresの死体吸血に対応。
2016/02/20 (ver.1.1d)
    ・大量のアイテム~CTD、減るといいな・・・
    ・設定にbDisableLootSingleを追加。「SHIFT押してないのに1つずつしか拾えない…」みたいなトラブルが発生したら1にしてください。
2016/02/17 (ver.1.1c)
    ・大量のアイテムが入ってる場合に表示しないオプション(iItemLimit)を追加。
    ・一部の宝箱で、お金の数が通常より増えることがある不具合の修正。
    ・アイテム並べ替えを高速化し、無駄な処理を削りました。
2016/02/14 (ver.1.1b)
    ・よく拾うアイテム(お金・ロックピックなど)が上にくるようにしました。
    ・HDT HighHeels Systemとの互換性を改善。
    ・キルムーブ中にメニューが表示される不具合を修正。
    ・複数スタックしたアイテムから1つだけ拾えるようにしました。SHIFTキーを押しながら拾ってください。
2016/02/07 (ver.1.1)
    ・エンチャント付き装備や既読本にアイコンが付きました。
    ・INIファイルでメニュー位置や表示条件を設定できるようにしました。
    ・専用のコンソールコマンドを追加。上記設定をゲームプレイ中に変更できます。
    ・キリル文字やアクセント記号などの西欧文字が文字化けしていた問題を修正しました。
    ・本来拾えないはずのアイテムを、ある条件下で拾えてしまった問題の修正。
    ・コントローラーのキーマップを変更し、方向キー上・下を別のコマンドに置き換えている場合、アイテムを選択できなくなる不具合の修正。(1.0できちんと修正できてなかった)
    ・一人称化MODを使ってる場合、クラフト中にクロスヘアが動いてルートメニューが開くことがある不具合の修正(これも不十分だった)
     ・死亡時にメニューが残ってしまう問題の修正。
2016/02/01 (ver.1.0)
    ・hdt Physics Extensions が動かなくなる不具合の修正。
    ・コントローラーのキーマップを変更し、方向キー上・下を別のコマンドに置き換えている場合に、アイテムを選択できなくなる不具合の修正。
    ・一人称化MODを使ってる場合、クラフト中にクロスヘアが動いてルートメニューが開くことがある不具合の修正。
    ・インベントリメニュー操作中にマウスカーソルが消えることがある不具合の修正。
2016/01/27 (ver.1.0 rc5)
    ・灰の山(死霊術などで灰になった死体)でもルートメニューが表示されるようにしました。
    ・クエストが紐付いた宝箱などで、きちんとアイテムを拾えなかった不具合を修正。
2016/01/24 (ver.1.0 rc4)
    ・スタック数が間違っていたり、表示されないアイテムがあった不具合を修正。
    ・長いロード画面を挟むと、アイテム一覧が不可視になっていた不具合を修正。
2016/01/21 (ver.1.0 rc3)
    ・このバージョン以降、esp無しで動きます
    ・ウェアウルフ状態で死体からアイテムを拾える不具合を修正
    ・(実験的) 空コンテナでもメニューが開くように
2016/01/15 (ver.1.0 rc2)
    ・プレイヤーが利用できないアイテムを拾えた不具合を修正
    ・稀にアイテムの個数がおかしくなる不具合を修正
    ・フォロワー指示中や死体運搬中に、メニューが開かないよう修正
    ・(実験的) メニューのデザインをFO4寄りに
    ・(実験的) 空のコンテナではメニューが開かない&空になったら自動で閉じるように


Credits


Hackfield for dialogue style interface.
SKSE Team for SKSE.
SkyUI Team for resources to make swf file.
Bethesda for Skyrim.

2015年4月6日月曜日

~ 久しぶりにMOD更新 ~ Lock-On 0.3.0


Lock-On 0.3.0
 http://skyrim.nexusmods.com/mods/33791/


むっちゃ久しぶりにMOD更新しちゃったんだぜ……



なにこれ?


Skyrimに敵をロックオンする機能を追加するMODです。

個人的感想ですが、箱コンでの操作がむっちゃ楽になると思います。


0.2.2からの更新点


  • Nexusのコメント欄でも超不評だった紫のオーラはもう出ません!
  • かわりに照準を付けました。横に敵の名前も表示されます。
  • 「戦闘開始時に自動ロックオン」機能で、戦闘が終わった時にもロックオンしちゃう不具合を治しました。

操作方法


(キーボード)
ロックオン/解除 左[SHIFT]
右/左のターゲットを選択 左[SHIFT]+[A][D] または 右[SHIFT]+マウス左右移動
一番近いターゲットを選択 左[SHIFT}+[S]

(箱コン)
ロックオン/解除 [LB]
右/左のターゲットを選択 [LB]+アナログスティックを右/左
一番近いターゲットを選択 [LB]+アナログスティックを下

箱コンを使っている場合のみ、右スティックでクロスヘアの位置を微調整できます。
これで動いてるターゲットに弓や魔法を当てやすくなったはず。


MCMメニューで、「ダブルタップでのターゲット切り替え」にチェックを入れると
移動キーダブルタップや、アナログスティックを素早く2回入れることで
ターゲット切り替えが出来るようになります。

2013年7月14日日曜日

HotKeys++ 1.8

2013/06/01 更新
  正式版をNexusで公開しました。

2013/06/02 更新
  Version 1.2をアップロードしました。
  エンチャントや鍛冶強化された武器を複数持っていた場合に、間違ったアイテムを装備してしまう問題
  を修正しました。

2013/06/07 更新
  バージョン1.3を公開しました。
  ・SHIFT CTRL ALTなどの修飾キーを追加しました。
  ・装備/装備解除のトグル機能をつけました。
  ・登録できるスロットを32個から128個に増やしました。

2013/06/12 更新
  バージョン1.4を公開しました。
  ・付呪済みの武器を持ち替えると、チャージが消えるバグを修正しました。
  ・MOD数が128を超えている場合に、一部のMOD追加アイテム&魔法が正しく登録できない不具合を修正しました。
  ・一部スペルが正しく詠唱できない不具合を修正しました。 (かろかろさん、ありがとうございます)

2013/06/16 更新
  バージョン1.5を公開しました。
  ・両手詠唱できるようにしました(両手詠唱には「二連の唱え」パークが必要です)
  ・左手武器をきちんと装備解除できなかったり、CTDしていた不具合を修正しました。

2013/06/22 更新
  バージョン1.6を公開しました。
  ・ウェアウルフやバンパイア・ロードに変身するとき、デッドロックをおこしていた問題を修正しました
   (変身時のホットキー切り替えでデッドロックをおこしていたせいで、変身がスムーズにできなくなっていました。)
  ・「実行後に元の装備に戻す」オプションを追加しました。魔法詠唱などと併せて使うと便利だと思います。

2013/06/29 更新
  バージョン1.7を公開しました。
  ・装備中のアイテムを一括登録する機能をつけました。
  ・システムメニューを追加しました。

2013/07/14 更新
  バージョン1.8を公開しました。
  ・トグル機能で装備をはずした際、クラッシュすることがある不具合を修正しました。
  ・両手武器をはずした際、元の片手装備に戻らないことがある不具合を修正しました。




アイテムを使用するPapyrus関数がみつからず、完成しないままお蔵入りになる予定でしたが
tktkさんに「ポーションとかはEquipItemで使えるよ」と教えて頂いたおかげで
なんとか日の目を見ることが出来ました。

http://skyrim.nexusmods.com/mods/36728/


なにこれ?


お気に入り(Q)のホットキーを拡張するMODです。

同じキーに複数の装備を入れて、一気に装備したり
魔法を装備した後に自動で詠唱したりもできます。



この動画では、[F1]キーに以下のアクション設定しています。
(1) オークフレッシュ・左手詠唱
(2) 消音・右手詠唱
(3) 炎のマント・左手詠唱
(4) 魔力の剣・右手詠唱
(5) イスグラモルの盾・装備

シャキシャキと音が頻繁に鳴っているのは、画面外でセラーナさんが
魔法の持ち替えに反応して、武器を出したりしまったりしているせいです。
おねがいします、空気読んでください。

必要要件



Skyrim 1.8.151 or 1.9.32
SKSE   1.6.7以上
SkyUI  3.1以上

特徴


  • お気に入りのショートカットキーを、数字1~8以外に設定することができます
  • 設定はすべてゲーム内で出来ます。専用のiniファイルをいちいち作成する必要はありません。
  • 「使う」「食べる」「捨てる」「右手に装備」「左手に装備」「右手で詠唱」など、追加アクションを指定できます。
  • 同じキーに、複数のアイテムを割り当てられます。(鎧セットや剣と盾セットなどに便利)
  • 武器は、どちらの手に装備するか選べます。
  • 魔法は、装備するだけでなくその場で詠唱することも可能です。ただし両手での詠唱はできません。(そのうち可能にする予定はあります)
  • 魔法詠唱はきちんと詠唱しますし、マジカも消費します。もちろんマジカが無い場合は詠唱できません。
  • 魔法だけでなく、スクロールや杖も詠唱できます。
  • たいまつは、地面に捨てることができます。
  • バンパイア・ロードでも使用できます。バンパイアロード専用の設定に切り替わります。

使い方


ショートカットの設定はMCMで行います。
MOD設定 → Hotkeys++ のタブから設定してください。

メニューに英語と日本語が混じる場合
(1) hmkHotkeys.bsaをアンパックし、Interface/translations/hmkHotKeys_japanese.txt を取り出す
(2) 取り出したファイルを hmkHotKeys_english.txt にリネームし、Data/Interface/translations/ にコピー

使用例


(例:その1)
右手でオークフレッシュを詠唱し、詠唱しおわったら黒檀の剣を装備する。
[F1] に オークフレッシュ / 右手で詠唱 を設定
[F1] に 黒檀の剣 / 右手に装備 を設定


(例:その2)
一括で破壊術に特化した装備に切り替える。
[F2] に 破壊術のローブ / 装備
[F2] に 破壊術のサークレット / 装備
[F2] に 破壊術の指輪 / 装備

これからの予定


同じアイテムが複数あってエンチャや強化が違う場合に、意図したアイテムが装備されない仕様の改善。
(これはPapyrusの仕様なので、しょうがないと言えばしょうがないのですが、力技でなんとかなりそう。)

(済) なんとかしました。Papyrusを使わずに装備するようにしました。面倒くさかったです。

マウスジェスチャーやアナログスティックのコマンド入力みたいな機能を付けたい。

シャウトもホットキーで発動できるようにしたい。(少しだけ難しい)

デュアルキャスト対応
(済)対応しました。

[SHIFT]+[F1] のようなキーバインドにも対応させたい。(設定の配置とかどうしよう)
(済) 対応しました。

魔法詠唱後に、元の装備に戻す機能
(済) 対応しました。

2013年6月26日水曜日

Lock-On 0.2.2


Lock-On 0.2.2
 http://skyrim.nexusmods.com/mods/33791/





なにこれ?


Skyrimに、ロックオン機能を追加するMODです。

個人的感想ですが、箱コンでの操作がむっちゃ楽になると思います。

操作方法


(キーボード)
ロックオン/解除 左[SHIFT]
右/左のターゲットを選択 左[SHIFT]+[A][D] または 右[SHIFT]+マウス左右移動
一番近いターゲットを選択 左[SHIFT}+[S]

(箱コン)
ロックオン/解除 [LB]
右/左のターゲットを選択 [LB]+アナログスティックを右/左
一番近いターゲットを選択 [LB]+アナログスティックを下

箱コンを使っている場合のみ、右スティックでクロスヘアの位置を微調整できます。
これで動いてるターゲットに弓や魔法を当てやすくなったはず。


MCMメニューで、「ダブルタップでのターゲット切り替え」にチェックを入れると
移動キーダブルタップや、アナログスティックを素早く2回入れることで
ターゲット切り替えが出来るようになります。

1.8からの更新点


  • カメラのレスポンスが大幅に良くなりました。
  • カメラスピードの選択で、50ms~2000msまで選択できるようにしました。
  • 箱コン使用時に、右スティックでクロスヘアの位置が微調整できるようになりました。
  • 「ロックオンキー+↓で一番近いターゲットを選択」の操作を追加しました。
  • ウサギ・鹿・キツネなどの動物を選択しないオプションを追加しました。
  • ターゲットが死亡したときに、ロック継続/ロック解除/一番近い敵をロックオン を選べるようにしました。
  • ロックオン時に、選択音がなるようにしました。
  • NMMインストーラーを改善しました。Skyrimのバージョンを自動認識するようにしました。
  • その他、細かいバグの修正。

2.1からの更新点


  • ごくまれに、ロックしたまま解除できなくなる不具合を修正しました。
    (エフェクトが消えてるのにロックされたまま解除できなくなり、MCMも動作しなくなります)
  • Mod Organizerで正しくインストールできない不具合を修正しました。

(もし可能なら)やりたいこと


  • 紫のエフェクトではなく、ゼルダのZ注目みたいにしたい
  • HUD MenuのEnemyHealthMeterに、ロックオン対象の名前とライフが表示されるようにしたい
  • MCMとかの英語がむちゃくちゃなのは、、、、だれか助けて

2013年5月31日金曜日

hmkArrow 0.4

2013/05/31 更新

v0.4をアップしました。
http://himika.com/stuff/hmkArrow_0_4.7z
Dawnguard追加ダンジョンで、クロスボウのトラップを踏むとCTDしていた問題を修正しました。

作ってるうちに飽きてしまったMODシリーズ 第一弾

私は、ゲームバランスとか、利便性とか、そういうの一切考えずに
ほとんどその場の思いつきと勢いだけでMOD作成してるんで、飽きるのが早いです。

あと、勢いだけで「第一弾」とか言ってるので、第二弾に続くかどうか分かりません。

hmkArrow.esp

特殊効果をもった矢を4種類追加します。
どの矢もチート気味の矢ばかりですので、ご利用は計画的に。

http://himika.com/stuff/hmkArrow_0_4.7z
  • Teleport Arrow 着弾地点にテレポートできる矢
  • Knee Breaker  膝に当てると大ダメージを与えられる矢
  • Time Bomb Arrow しばらくしてから大爆発する矢。人も物も吹き飛ぶ。
  • Dwarven Thresher Arrow ドワーフ遺跡のアレが生えてくる矢


このMODの画期的な点は
「SKSEプラグインの力によって、矢のProjectileが当たった座標を拾える 」ことです。
矢の飛んでいった先にテレポートしたり、矢があたった場所にオブジェクト生成したり
いままで出来なかったことが出来ます。


矢は、ゲーム開始/MOD初導入で10本ずつ渡されます。



再入手は、ホワイトランのジョルバスクル裏手の藁人形(いちばん左)を弓でピスピスしてください。
うまく的にあたると、変な音が鳴って矢が貰えます。

近すぎると貰えません。遠くから当てるといっぱい貰えます。

(おまけ) hmkArrow.dllのソースファイル http://himika.com/stuff/hmkArrow_0_3_src.7z

2013年5月12日日曜日

個人的メモ

Skyrim 1.9.32用

パピルス関数のアドレス一覧
http://www.himika.com/stuff/PapyrusFunctionAddr_1_9_32.txt

コンソール関数のアドレス一覧
http://www.himika.com/stuff/ConsoleAddr_1_9_32.txt

仮想関数(TESObjectREFR、Actor、Character、PlayerCharacter)のアドレス一覧
http://www.himika.com/stuff/VFuncAddr_1_9_32.txt

2013年4月22日月曜日

Lock-On 0.1.8

Nexusで公開中の Lock-On - adds a lock-on system の0.1.8です。

[beta1]   http://www.himika.com/stuff/LockOn_0_1_8beta.7z

(追記: 2013/04/22) beta2をアップしました
[beta2]   http://www.himika.com/stuff/LockOn_0_1_8beta2.7z

(追記: 2013/04/25) beta3をアップしました
[beta3]   http://www.himika.com/stuff/LockOn_0_1_8beta3.7z

(追記: 2013/04/26) Nexusにアップしました
   http://skyrim.nexusmods.com/mods/33791

更新点


  • 箱コンでターゲット切り替えができない問題に対処しました
  • 箱コン使用時は、右スティックでターゲット切り替えできるようにしました (beta3)
  • ダブルタップでターゲット切り替えできる機能をつけました(キーボード操作のみ)
  • 敵に発見されたときに自動でターゲットするオプションをつけました
  • カメラのスピードを高速化。200msecまで設定できるようにしました。
箱コンで切り替えできない問題なのですが、、、作者が箱コンを持ってないので
完璧に対処できているのか、ちょっと自信がないです・・・

もし動かなかった場合は、報告していただけると助かります。

2013年4月12日金曜日

やりかけの仕事リスト

どこかに書いておかないと、忘れそうなので。


調査中
  • SKSEプラグインでToggleFlyCamを呼び出すと、カメラがどっかに飛んでいく件
  • ObjectReference.RemoveItem関数で、LeveledItemだったオブジェクトが消せない件
  • ModifyFaceGen周りのコード解析 
  • XBOX360コントローラのアナログスティック入力解析

余裕があればやりたい
  • プレイヤー以外のアクターにAddPerkできない理由の特定 (済)

挫折寸前
  • Eagle Eyeで、実際に画面を拡大しているコードの特定

たぶん忘れてるのがいっぱいあるはず。思い出したら追加。


(おまけ)
Papyrus関数のTESV.exeアドレス一覧 (1.9.32)
http://himika.com/stuff/PapyrusFunctionAddr_1_9_32.txt




(追記: 2013/04/12)
プレイヤー以外のNPCにPerkを追加できないのは、バグではなく完全に仕様でした。
プレイヤーにしかPerk Pointが存在しないのと同じ理由で、追加のPerkスロットが
プレイヤーにしか存在しませんでした。

既存のパークを保存してる場所に無理やり書き込むこともできそうだけど
たぶん、おかしなことになりそう(まだ試してない)

(追記: 2013/04/22)
箱コンのアナログスティックの傾きが取れたので、どう実装したらいいものか考え中。
できればSKSEチームにフィードバック送りたい。

2013年4月1日月曜日

へ スカイリム

英語版exeの「へ スカイリム」、簡単に直せそう。
CPU Disasm
Address   Hex dump          Command                                  Comments
0085FE4E  |.  50            PUSH EAX                                 ; /<%s> => [Arg2]
0085FE4F  |.  51            PUSH ECX                                 ; |<%s> => [1B17FF4] = "へ"
0085FE50  |.  68 AC4C0801   PUSH OFFSET 01084CAC                     ; |Format = "%s %s"
0085FE55  |.  8D5424 18     LEA EDX,[ESP+18]                         ; |
0085FE59  |.  68 04010000   PUSH 104                                 ; |Arg2 = 104
0085FE5E  |.  52            PUSH EDX                                 ; |Arg1 => OFFSET LOCAL.64
0085FE5F  |.  E8 3C04BCFF   CALL 004202A0                            ; \TESV.004202A0
PUSH EAXとPUSH ECXの順番を入れ替えるだけの簡単な作業です。

ためしに修正パッチつくってみようと思うんだけど、
→ 作りました http://skup.dip.jp/up/up04444.7z
へ スカイリムの他に、日本語特有の問題ってあったかなぁ。
セーブファイル名の日本語が空白になるのしか思いつかない。


2013年3月30日土曜日

メモ書き - TESObjectREFR::IsPlayable


TESV.exeをボーっと見てたら、こんなコードがあった。

CPU Disasm
Address   Hex dump          Command                                  Comments
0047A5D2  |.  0FB641 12     |MOVZX EAX,BYTE PTR DS:[ECX+12]          ; Switch (cases 1F..2A, 4 exits)
0047A5D6  |.  83E8 1F       |SUB EAX,1F
0047A5D9  |.  74 33         |JZ SHORT 0047A60E
0047A5DB  |.  83E8 0A       |SUB EAX,0A
0047A5DE  |.  74 1E         |JZ SHORT 0047A5FE
0047A5E0  |.  83E8 01       |SUB EAX,1
0047A5E3  |.  74 0B         |JZ SHORT 0047A5F0
0047A5E5  |.  8B01          |MOV EAX,DWORD PTR DS:[ECX]              ; Default case of switch TESV.47A5D2
0047A5E7  |.  8B50 64       |MOV EDX,DWORD PTR DS:[EAX+64]
0047A5EA  |.  FFD2          |CALL EDX
0047A5EC  |.  84C0          |TEST AL,AL
0047A5EE  |.  EB 29         |JMP SHORT 0047A619
0047A5F0  |>  8A81 90000000 |MOV AL,BYTE PTR DS:[ECX+90]             ; Case 2A of switch TESV.47A5D2
0047A5F6  |.  D0E8          |SHR AL,1
0047A5F8  |.  F6D0          |NOT AL
0047A5FA  |.  A8 01         |TEST AL,01
0047A5FC  |.  EB 1B         |JMP SHORT 0047A619
0047A5FE  |>  8A89 F2000000 |MOV CL,BYTE PTR DS:[ECX+0F2]            ; Case 29 of switch TESV.47A5D2
0047A604  |.  C0E9 07       |SHR CL,7
0047A607  |.  F6D1          |NOT CL
0047A609  |.  F6C1 01       |TEST CL,01
0047A60C  |.  EB 0B         |JMP SHORT 0047A619
0047A60E  |>  8B91 84000000 |MOV EDX,DWORD PTR DS:[ECX+84]           ; Case 1F of switch TESV.47A5D2
0047A614  |.  D1EA          |SHR EDX,1
0047A616  |.  F6C2 01       |TEST DL,01
0047A619  |>  0F84 8A000000 |JZ 0047A6A9

分かりやすいようにC++で書くと、こんな感じ

TESForm* thisForm;
bool IsPlayable;
if (thisForm->formType == kFormType_Ammo)
{
    TESAmmo* ammo = (TESAmmo*)thisForm;
    IsPlayable = (ammo->settings.flags & 2) == 0;
}
else if (thisForm->formType == kFormType_Weapon)
{
    TESObjectWeap* weap = (TESObjectWEAP*)thisForm;
    IsPlayable = (weap->gameData.flags2 & weap->gameData.kFlags_NotPlayable) == 0;
}
else if (thisForm->formType == kFormType_Light)
{
    TESObjectLIGH* ligh = (TESObjectLIGH*)thisForm;
    IsPlayable = (ligh->unk78.unk0C & 2) != 0;
}
else
{
    IsPlayable = thisForm->GetFlag00020000();
}
これでやっと、bool TESObjectREFR::IsPlayable(void) が作れるんじゃないかな!!

2013年3月29日金曜日

LockOn 0.1 beta7

Nexusで公開中の Lock-On - adds a lock-on system を更新しました。

LockOn beta7 - Skyrim Nexus


更新点


  • マップマーカーをつけました。
  • ロックオン中のエフェクトを選択できるようにしました。
  • ロックオンできる距離を8192unitsまで伸ばせるようにしました。

なにこれ?


ターゲットをロックオンできるようにするMODです。
ロックオンした対象にカメラが追尾するようになります。

必要なもの


  • Skyrim - 1.8.151 または 1.9.32
  • SKSE - 1.6.3以降
  • SkyUI - 3.1以降 (Optional)
  • 酔い止め - (Optional)
SkyUIは無くても動きますが、設定が一切できなくなるので入れたほうが良いです。

操作方法


ロックオンしたい対象にクロスヘアを向けて、ロックオン・キーを押してください。
デフォルトのロックオン・キーは、左[SHIFT] です。

[ロックオン・キー]+[A] で、左のターゲットに切り替え
[ロックオン・キー]+[D] で、右のターゲットに切り替えができます。
ロックオンした状態で 再度 [ロックオン・キー] を押すと、ロックオンが解除されます。

[ロックオン・キー] の割り当てはMCMで変更できます。

自動ロックオン


誰にもロックオンしてない状態で誰かに殴られた/誰かを殴った場合は、自動でロックオンします。

オート・ロックオンの設定も、MCMで変更できます。

アドオン


追加アドオンを入れることで、機能を拡張できます。

追加アドオンの作り方

今後の予定


【済】 移動キーダブルタップで次のターゲット
【-】 多数の敵に囲まれてるときはオートターゲットしない
【済】 敵に発見された時にオートターゲット

ロックオンしてる敵のライフを、HUD上部にずっと表示させっぱなしにしたいんだけど
どうやってScaleformとやりとりしてるのか分からない。現在調査中。
GFXMovieView::Invoke とか GFXMovieView::GetVariable を監視してみたけど、ここじゃなかった。

2013年3月25日月曜日

Lock-On用アドオンのアイデアメモ

のんびり散歩アドオン

「ソリチュード行き」「リフテン行き」の透明なアクターを召喚して、追尾。
あとは目的地に着くまでのんびり眺めるだけのアドオン。(誰得? 主に自分得)

追尾は、ロックオンした状態で前進させれば可能。
ただし問題はロックオンのエフェクトをどうするか。

ロックオンの操作拡張系

↑↑ (↑ダブルタップ)でロックオン
↓↓ でロックオン解除
←← で、左のターゲットに切り替え
→→ で、右のターゲットに切り替え
ダブルタップ操作はTK Dodgeの操作とかぶるので、本体では搭載しなかった。
箱コンで遊んでいる人はダブルタップのほうが良いかも?

フォロワー補助

ターゲットした相手にヒールする魔法、ワード(魔法の盾)をかける魔法、みたいな
補助系魔法を充実させれば、フォロワー補助プレイが捗るかも。
(それってLock-Onじゃなくても出来るでしょう?というツッコミは置いておく)

2013年3月24日日曜日

Racial Compatibility Improved 1.6a

 [2013/03/24 追記] 
Racial Compatibility1-7や、RaceCompatibility for Dawnguardに上書きすると
クエストの一部が欠損する問題があるようです。
(欠損が発生すると、スクリプトが競合している旨のメッセージが表示されるようになります)
欠損が発生した場合に、自動で修復するスクリプトを作りましたので
競合メッセージが表示されるようになった方は、このpexファイルを入れてみてください。
http://www.himika.com/stuff/YARC_InitQuestScript.zip

修復に成功すると、競合メッセージは表示されなくなります。
その後、pexファイルは削除してかまいません。

なお、この問題はバージョン1.6aで対策済みです。


 [2013/03/19 追記] 
NEXUSに1.6正式版をアップロードしました。


 [2013/03/06 追記] 
Character Making Extender 3.9bに対応し、β2になりました。




ダウンロードはこちらから
http://skyrim.nexusmods.com/mods/24898/


◯必要要件

Skyrim 1.8 以降

◯更新点

  • Character Making Extender 3.9bに対応しました。
  • 英語のReadmeがカタコトすぎてあまりに酷いので、日本語のReadmeを入れました。
  • ShowRaceMenu後にバンパイアが解除されておかしくなる問題が修正されます。 (SKSE 1.6.6以降が入っているときのみ)

◯このMODは何?

Expiredさん作のRacial Compatibilityの改良バージョンです。
いままでRacial Compatibilityと同時に使うことができなかったMODと、共存できるようになります。
(Dawnguard、UFO、Better Vampire、Vampiric Thirstなど)

(例)
追加種族 + UFO
追加種族 + Better Vampires (+ UFO)
追加種族 + Vampiric Thirst (+ UFO)
追加種族 + Dawnguard (+ UFO)
追加種族 + Dawnguard + Better Vampire Dawnguard Compatible (+ UFO)
追加種族 + Dawnguard + Vampiric Thirst Dawnguard Edition (+ UFO)


◯インストール方法

アーカイブのDataフォルダの中身を skyrim\Data フォルダに上書きしてください。

(旧Racial Compatibilityを上書きする場合)
旧Racial Compatibilityで使っていた以下の3つのPEXスクリプトは、もはや使いません。
ファイルサイズを確認して、合致する場合のみ削除してください。
  Data\Scripts\CompanionsHouseKeepingScript.pex (28,504バイト)  CRC32: BB8F5900
  Data\Scripts\PlayerVampireQuestScript.pex     (12,622バイト)  CRC32: A7DA00B5
  Data\Scripts\PlayerWerewolfChangeScript.pex   (12,475バイト)  CRC32: A7BF0A01
ファイルサイズが違う場合は、他のMODが使用してる可能性が高いので削除しないでください。

良く分からない場合は、とりあえず上の3つのスクリプトを削除して
Better Vampiresなどの競合MODを全部入れなおせば問題ないと思います。


◯似たようなMOD(RaceCompatibility for Dawnguard)との違い

ぶっちゃけ、どっちも同じなので好きな方を選んで良いです。
コンセプトが違うだけです。

RaceCompatibility for Dawnguardは
「競合の原因になっているスクリプトを、競合MODとRaceCompatibility双方が動くよう、書き換えよう」
というコンセプトです。
オプションでUFOやBetter Vampire用に書き換えたスクリプトを追加することで対応します。
(長所) ターゲットを絞ってきっちり書き換えているので、対応しているMODは間違いなく完璧に動きます。
(短所) 反面、対応していないMODは動きません。対応MODもバージョンアップで動かなくなる可能性があります。

 私の改良バージョンは
「競合の原因になっているスクリプトをつかわないことで、競合の原因自体をなくそう」
というコンセプトです。
(長所) ほとんどの競合MODが動くはずです。
将来競合するかもしれない未知のMODにも強いとおもいます。
(短所) ただ、若干トリッキーな方法を使って競合スクリプトを排除しているため
MODによっては競合してしまうものもあるかもしれません。

RaceCompatibility for Dawnguardで正式に対応しているMODを使うのでしたら、きっちりスクリプト修正をしてあるぶん、for Dawnguardを使ったほうが安全確実です。
Dawnguardを入れていない人や、他にも競合しそうなMODを入れている人は
拙作の改良バージョンを使うと良いかと思います。

2013年3月19日火曜日

LockOn - beta6

2013/03/23追記:
beta6になりました。このバージョンからNEXUSで公開することにしました。

なにこれ?


ターゲットをロックオンできるようにするMODです。
ロックオンした対象にカメラが追尾するようになります。

必要なもの


  • Skyrim - 1.8.151 または 1.9.32
  • SKSE - 1.6.3以降
  • SkyUI - 3.1以降 (Optional)
  • 酔い止め - (Optional)
SkyUIは無くても動きますが、設定が一切できなくなるので入れたほうが良いです。

操作方法


ロックオンしたい対象にクロスヘアを向けて、ロックオン・キーを押してください。
デフォルトのロックオン・キーは、左[SHIFT] です。

[ロックオン・キー]+[A] で、左のターゲットに切り替え
[ロックオン・キー]+[D] で、右のターゲットに切り替えができます。
ロックオンした状態で 再度 [ロックオン・キー] を押すと、ロックオンが解除されます。

[ロックオン・キー] の割り当てはMCMで変更できます。

自動ロックオン


誰にもロックオンしてない状態で誰かに殴られた/誰かを殴った場合は、自動でロックオンします。

オート・ロックオンの設定も、MCMで変更できます。

アドオン


追加アドオンを入れることで、機能を拡張できます。

追加アドオンの作り方

2013年2月22日金曜日

Smile 0.2

某所に張る予定ですが 最近ブログも更新してないので、先にこちらに。

Smile 0.2β
http://himika.com/stuff/Smile_02.7z

Papyrusで表情や口の形などをこまかく設定できるようにするMODです。
内部でmfgのコードを直接叩いています。

「表情を設定できる仕組み」を提供するだけのMODなので、単体では動きません。
詳しい使い方はサンプルを同梱していますので、そちらを参考にしてください。


必要要件

  • Skyrim 1.8.151
  • SKSE 1.6.3以降


サンプルプラグイン SMILE_sample.esp の使い方

ShowRaceMenuで、プレイヤーの表情を変更できます。
  • 0キー:   すべての表情をリセット
  • 1~8キー: 表情を変更
  • Uキー:   口を「う」の形にする。変化は4段階
  • Iキー:    口を「い」の形にする。変化は4段階
  • Oキー:   口を「お」の形にする。変化は4段階
  • Pキー:   口を「あ」の形にする。変化は4段階
  • Kキー:   右目をつぶる。4段階
  • Lキー:   左目をつぶる。4段階
また、ゲーム開始時に「Paste Facial Expression」スペルを覚えます。
自分の表情を他人に貼り付ける魔法です。効果時間は30秒。


SmileManagerスクリプトの使い方

Smile.espが有効になっていれば、他のespからもSmileManagerを使って表情制御ができます。
(使用例)
    ; まず SmileManager.Attach() 関数で、表情を変更したいアクターにアタッチします。
    SmileAlias Smiler = SmileManager.Attach( Game.GetPlayer() )
    
    ; Expression(表情)の設定
    Smiler.MoodHappy = 0.5  ; Mood Happy 50%
    Smiler.MoodSad   = 0.5  ; Mood Sad 50%
    
    ; Phoneme(音韻)の設定
    Smiler.BigAah = 1.0     ; 口を「BigAah」の形にする。値は 0.0~1.0
    Smiler.OohQ = 1.0       ; 口を「OohQ」の形にする。値は同上
    
    ; Modifierの設定
    Smiler.BlinkLeft = 1.0  ; 左目をつぶる。値は 0.0~1.0
    Smiler.LookRight = 1.0  ; 右を向く。値は同上
    
    ; 表情の設定が終わったら、Applyする。
    Smiler.Apply(0.5)       ; 表情を適応する。0.5秒かけて変形する。
    
    Smiler.Detach()         ; 使い終わったら必ずデタッチする。


旧知の不具合

表情変更を行うと、全アクターのまばたき・視線移動が止まってしまいます。
元に戻す場合はコンソールから「mfg reset」を行なってください。
(いずれ修正する予定です

2012年12月10日月曜日

3rdPersonCameraCustomizer

3人称時のカメラ位置を、種族ごとに設定できるようにするMODです。
(要 Skyrim 1.8.151.0 / SKSE 1.6.5)

 http://www.himika.com/stuff/3rdPersonCamera-0-01.zip 
一旦公開停止します。(理由はコメント欄に)
SKSEを再コンパイルしない方法で作りなおしてから再度公開したいと思います。


====== 2012/12/11 追記 ======

SKSE本体を書き換えないよう作りなおしてきました。
http://www.himika.com/stuff/3rdPersonCamera-0-02.zip

============================

カメラ位置は Skyrim.ini を弄れば設定できますが、全セーブ・全種族に
同じカメラ位置が適用されてしまうため、なにかと不便でした。

例えば、ちびっこ種族用にカメラを低く設定すると、ウェアウルフやヴァンパイア・ロード変身時に
視点が低すぎて画面が見辛くなったり、操作がしにくくなったり。

このMODを使えば
 「ちびっこ種族の時は視点をさげて、ウェアウルフの時は下げない」
 「ノルドやカジートはそのままで、ちびっこ種族だけ視点を下げる」
のような、種族ごとのカスタマイズが出来るようになります。


2012年11月5日月曜日

Racial Compatibility improved v1-3

Skyrim nexusで公開中の
Racial Compatibility - compatibility with other mods improved
更新しました。

インストール方法や使い方などは、こちらを参照してください。
忘備録: Racial Compatibility improved v1.1

(更新点)
MODの競合を検知するようにしてみました。
ゲーム開始時/ロード時に競合がないかチェックし、もし発見した場合は
↑このようなメッセージが表示されます。

【CompanionsHouseKeepingScript.pex が競合していると表示された場合】
skyrim\Data\scripts\CompanionsHouseKeepingScript.pex を削除してください。
UFO - Ultimate Follower Overhaul を入れている場合は、再度入れなおしてください。


【PlayerVampireQuestScript.pex が競合していると表示された場合】
skyrim\Data\scripts\PlayerVampireQuestScript.pex を削除してください。
Better VampiresVampiric Thirst などを入れている場合は、再度入れなおしてください。


※ 日本語化して使っている方に ※
日本語STRINGS作成の手順が少し代わりました。
旧バージョンからアップデートする場合は、付属の readme を読んで
再度STRINGSを生成してください。

=============== 追記 (11/06) ===============

バグを見つけてしまったので、再度更新しました。 (v1-4)

Dark Brotherhood(闇の一党)のクエスト「To Kill an Empire」(帝国を倒すには)で
プレイヤーがバニラ種族で、なおかつバンパイアの場合
会話がループしてクエストが進行しませんでした。

どうもこのバグ、元のRacial Compatibilityからずっと残ってたみたいです。
バニラ種族のバンパイアで遊ぶ人がほとんど居なかったので
今まで気が付かれずにスルーされていたのかも。
追加種族MODいれてたら、そっち使っちゃうよね。

Unofficial Skyrim Patchが、同クエストのTopic Infoを上書きしてくれちゃってた問題も対処しました。

=============== 追記 (11/15) ===============

またバグが(汗) 再度、更新しました。(v1-5)

追加種族MODを入れたり外したり繰り返すと、いろいろ誤動作してしまう不具合があったようです。
(出し入れを繰り返すと、PlayableRaceListに(None)が入ってしまい、これが誤動作の原因になっていました。)
一度この状態になると、アルゴニアンでバンパイア化できなかったり
競合していないのに「競合しています」メッセージが出てしまう症状がおきていました。

あと、旧Racial CompatibilityのPEXファイルを消し忘れている場合でも、動くように細工してみました。
一応動きますが、他MOD(特にDawnguard)との競合の原因になるため、もちろん消したほうがいいです。

2012年10月23日火曜日

Racial Compatibility improved v1.1

Skyrim Nexusで公開中の
Racial Compatibility - compatibility with other mods improved
を更新しました。

(更新点)
NMMでインストールできない不具合の修正
各国語バージョンでファイルの名前を間違えていた不具合の修正


2012年10月2日火曜日

skyrim nexusにMOD公開してみました

いや、自作じゃないんですけどね。
先日つくった「Racial Compatibility Dawnguard対応パッチ」の続きです。
Racial Compatibility原作者のExpiredさんに、改変と再配布の許可をいただけたので
skyrim nexusにMOD公開してみました。

http://skyrim.nexusmods.com/mods/24898

(特徴)
  • 先日のパッチとは違い、Dawnguardがあってもなくても、どちらでも動きます。
  • 他のMODと干渉しそうな部分を排除したので、いままでRacial Compatibilityと
     共存ができなかったMOD(UFO、Better Vampire、Vampiric Thirst など)も
     動くようになるはず。
  • 原作の「WoodElfでバンパイア化に失敗するバグ」が修正されています。

似たようなMODに、他の方の作った RaceCompatibility for Dawnguard があるのですが
こちらは完全にDawnguard専用ですね。
内容的には私の先日のパッチとほぼ同じです。
DLC1VampireTurnScript.pex の修正が入ってない点だけが違います。

このpexスクリプト、フォロワーか何かを5人までまとめてバンパイア化できる処理が
入ってるんですが、Dawnguard中では使われておりません。
(ボツになった機能の残骸かも?)
 なので、修正されてなくてもまったく問題のないスクリプトです。
「このへんの機能を利用して、誰かがバンパイアフォロワーMODの作るかも」
とか、いろいろ悩んだ末に、私は修正することにしました。たぶん余計なおせっかい。