インストール手順
Mod Managerでインストールすればいいのですが、DLLを含んでおり、最新のSEに対応していません。
postsにて1.5.97に対応したDLLのリンクがありますので、それもダウンロードして上書きすればOKです。
設定
MCMで好きなように設定できます。
カーソルの形を3種類から選べます。デフォルト以外のを選んでも、何かの拍子に元に戻ってしまうので、設定はデフォルトのままにして、interfaceフォルダにあるswfファイルをリネームする方がいいです。marker0.swfがデフォルトです。
改造
ロックオンキーの単押しを検知してロックオンをオンオフする
単押しとはロックオンキーだけを押して離した場合のことを言います。
なぜこれが必要なのかというと、コントローラーはボタンが限られているため、修飾キーを用意して同時押しすることが必須になってきます。
私の場合はLTとRTが修飾キーになっています。A、B、X、Yで4通りですが、修飾キーを押しながらで12通りに増やせます。十字キーやLB、RBも増えますので、ボタンの組み合わせを大幅に増やせます。
組み合わせが増えるのと遊びやすいのは別で、色々試した結果、ロックオンキーはRTの単押しが一番しっくりきたので、これを検知できるようにしてみました。
LockOn_Main.psc (papyrus)
Event OnKeyDown(int KeyCode)
; メニューモードでは何もしない
if Utility.IsInMenuMode()
return
endif
; ロックオンキーを押したとき
if KeyCode == keyLockon
_bPressLockonKey = true
_bChangeTarget = false
_bStartViaModEvent = false
return
endif
; ロックオンキーを押している最中に他のキーを押したとき
if _bPressLockonKey
if KeyCode == keyDown
; ロックオン対象の切り替え
OnKey_Down(0, false)
elseif KeyCode == keyLeft
; ロックオン対象の切り替え
OnKey_Left(0, false)
elseif KeyCode == keyRight
; ロックオン対象の切り替え
OnKey_Right(0, false)
elseif KeyCode == keyUp
; ロックオン対象の切り替え
OnKey_Up(0, false)
else
; その他のキーが押されたらロックオンキーの単押しではないということ
_bPressLockonKey = false
endif
endif
EndEvent
Event OnKeyUp(int KeyCode, float HoldTime)
Debug.TraceUser("HimikaLockOn", "[] OnKeyUp")
; ロックオンキーを離したとき
if KeyCode == keyLockon
; ロックオンキーを押して離したとき(ロックオンキーの単押し)
if _bPressLockonKey
_bPressLockonKey = false
if Utility.IsInMenuMode()
return
endif
; ロックオンがまだならロックオンを開始する
if !_bChangeTarget
OnKey_Lockon(false)
endif
endif
endif
EndEvent
Function SetLockOnKey(string Option = "")
; (中略)
RegisterForKey(0x10A) ; 266 DPAD_UP
RegisterForKey(0x10B) ; 267 DPAD_DOWN
RegisterForKey(0x10C) ; 268 DPAD_LEFT
RegisterForKey(0x10D) ; 269 DPAD_RIGHT
RegisterForKey(0x10E) ; 270 START
RegisterForKey(0x10F) ; 271 BACK
RegisterForKey(0x110) ; 272 LEFT_THUMB
RegisterForKey(0x111) ; 273 RIGHT_THUMB
RegisterForKey(0x112) ; 274 LEFT_SHOULDER
RegisterForKey(0x113) ; 275 RIGHT_SHOULDER
RegisterForKey(0x114) ; 276 A
RegisterForKey(0x115) ; 277 B
RegisterForKey(0x116) ; 278 X
RegisterForKey(0x117) ; 279 Y
EndFunction
RTの単押しでロックオンのトグル、RTを押しながら左スティックでターゲットの切り替えになっています。
Combat Gameplay Overhaul SEの360度戦闘機能と連動
ロックオン中は360度戦闘機能を一時的に無効にして、ロックオンを解除したら元に戻します。
lockon_main.pscのActor Property refLockon~EndPropertyの部分を以下のようにまるごと書き換えます。
ロックオンと360度戦闘機能の連動 (papyrus)
bool Restore360Combat ; この行を追加する
Actor Property refLockon
Function Set(Actor ref)
if !ref
;SendModEvent("LockedOff")
PlayerRef.SetAnimationVariableBool("bUse360Combat", Restore360Combat)
elseif !_refLockon
;SendModEvent("LockedOn")
Restore360Combat = PlayerRef.GetAnimationVariableBool("bUse360Combat")
if Restore360Combat
PlayerRef.SetAnimationVariableBool("bUse360Combat", false)
endif
endif
(_refLockon) && Target.Clear()
_refLockon = ref
(_refLockon) && Target.ForceRefTo(ref)
EndFunction
Actor Function Get()
return _refLockon
EndFunction
EndProperty