Fallout好き:主にFallout New Vegas

Fallout好き:主にFallout new Vegas

2013年9月10日火曜日

MOD紹介:待機・睡眠時の待ち時間が1/5になる。5x faster waiting

5x faster waiting by Ermeso (FastSleepNV.esp)
http://newvegas.nexusmods.com/mods/45823/
このMODは地味だけど非常に有用だと思う。
自分は、何も出来ずただ待機するだけの時間が減りストレスが減った。
このMODはWiki ( http://newvegas.fallout.z49.org/?Mod%2F%A5%B7%A5%B9%A5%C6%A5%E0#k4323518 ) にも書いてある。しかし注意点等いくつか書いておきたいので書いた。

■このMODを使う上で知っておくと良い事

 1.NVSEが必要。
   まあFOJP2で日本語化していれば入っているので特に気をつけなくてもいいだろうけど。

 2.ダウンロードしたファイルは「5xFasterWaiting」等にリネームすることをお勧めする。

   Nexusからダウンロードしたファイル名は「Main file-xxxxx-x-x.rar」。
   このままFOMMでインストール出来るが、FOMM上「Main file-45823-1-0」という名前で登録される。
   これだとなんのMODだかさっぱりわからないのでリネームをお勧め。

 3.待機・睡眠をキャンセルした場合
   時間経過が早くなったままのことがある(草や太陽の動きが早いので気づいたりする)。
   再度待機・睡眠画面を出してキャンセルすれば直る。

==============================================================================
■MOD分解

メイン部分はスクリプト。

以下スクリプトに辿り着くまでダラダラ書く。

まずはFNVEditで見てみる。
FNVEditで見ると、MODが変更・追加している部分だけ表示されるので非常にわかりやすい。
GECKでOpen→MOD選択→Details... でも似たようなものを表示出来るが、FNVEditだとバニラから変化しない部分は緑、変更している部分が黄色で、追加された部分は白で表示されるため非常にわかりやすい。
ちなみに、自分はFNVEditの使い方はほとんど知らない。ググって覚えた程度。マージパッチの作り方は忘れてしまった程度。
FNVEdit起動したらDataフォルダのMODが一覧表示される。
このままOKを押すとチェックが付いているMOD全部がロードされる。
今回は 5x faster waiting だけ見たいので
FastSleepNV.espをダブルクリック。
右側にFinishedと表示されるまで待つ。

左側に
FalloutNV.esm
Fallout.exe
FastSleepNV.esp
が表示されている。

FastSleepNV.espのマスター指定(必要とするMODの指定)によって
上記2つかロードされている。

FastSleepNV.espの+をクリックして表示を展開。
その下にも+がさらに展開。

QuestとScriptが一つづつあるのがわかる。
これは非常にシンプルなMOD。

Questの下をクリックすると、右側にQuestの詳細が表示される。
Quest Delay=0.2 なので、このクエストは0.2秒毎に実行されることがわかる。

Scriptの下をクリック、右側に詳細が表示される。

スクリプトについては、この画面で見るよりは実際に見たほうが早い場合が多いと思う。

この部分をダブルクリック

スクリプト内容が表示される。
ま、ここで見ても編集は出来ない。
フォントも小さいし。
GECKで見た方がわかりやすいかもしれない。

というわけでGECKで見てみる。
Active FIleにセット(MODをクリック→「Set as Active File」をクリック)して「OK」
多分大抵のMODはオブジェクトに特徴的な名前をつけている。
その方がMODを作成・編集がやりやすいからだと思う。
ということで、FNVEditの画面でその特徴を探す。
FNVeditのEditorIDの列を見ると「FastSleep」が共通なのがわかる。それが特徴。
GECKのObject WindowのFilterに「FastSleep」と入れ、一番下のAllをクリック。
右側にFNVEditで表示された2つのオブジェクトが表示される。
まず、FastSleepQuestをダブルクリックで開く。

ま、FNVEditでわかってたけど、0.2秒毎に実行。
Priorityが48と微妙に低い。
Start Game Enabledにチェックが入っているので、ゲーム起動した時から動作する。
どれもFNVEdit見ればわかるけど。
スクリプトを見てみる。これがメイン。

------------------------------------------------------------------
scn FastSleepScript
; ======================
; Script created by Ermeso
; ======================

short FastTime ←ゲーム内時間経過スピードx5(以下倍速時間とする)を管理する変数。
short State ←睡眠・待機・FT(多分)中かどうかを判断するために使用する変数。
short TSpeed ←倍速時間を何倍にするかの変数。
                            現状のこのMODでは、ゲーム内で調整出来る仕組みになっていないので直書き(変数使わずに「sgtm 5」と書く)でも良い。
                            将来調整するつもりだったのかな。
short RunOnce ←おそらく一度だけ実行するための変数。実際は無意味になってる。

Begin MenuMode 1012 ←http://geck.bethsoft.com/index.php?title=MenuMode 多分、睡眠・待機画面が表示されている時に以下スクリプト(このMODのメイン部分)を実行する。

if RunOnce == 0  ←これ無意味だと思う。普通一回だけ実行させたいことは次の行とかでset RunOnce to 1とやる必要がある。やっていないので毎回実行される。これで動作がおかしくなることはないが。
set TSpeed to 5 ←TSpeedは待機・睡眠中に倍速時間を何倍にするかの変数。ここで5(5倍)を入れている。
endif

set State to IsTimePassing
      ↑ http://geck.bethsoft.com/index.php?title=IsTimePassing 睡眠・待機・FT(多分)中ならState変数に1が入る。
if FastTime == 0 && State == 1 ←倍速時間をゲームに適用してない、且つ 待機・睡眠・FT中なら下記2行を実行する。実際は、MenuMode 1012によってこの部分は睡眠・待機中に実行されているため、FT中に実行されることは無い。
set FastTime to 1 ←倍速時間をゲームに適用した印として1をセット
sgtm TSpeed http://geck.bethsoft.com/index.php/SetGlobalTimeMultiplier 倍速時間をゲームに適用
endif

if FastTime == 1 && State == 0 ←倍速時間がゲームに適用されていて、且つ 待機・睡眠・FT中でない、ならば下記2行を実行する。
set FastTime to 0 ←倍速時間を解除した印として0をセット
sgtm 1 ←倍速時間を1(通常のスピード。デフォルト)にセット
endif

End
------------------------------------------------------------------
まとめると、
クエストで0.2秒毎にスクリプトを実行。
 睡眠・待機画面が表示されいて、睡眠・待機中(時間指定し時間が経過している時)ならば、ゲーム内時間経過スピードを5倍に設定、睡眠・待機が終わった時点で1倍にする。

ただし、知っておくと良い事の3番で書いたように、待機・睡眠を途中でキャンセルした場合それを検知出来ずに倍速時間のままになってしまうことがあるようだ。

ちょっとこのスクリプトを書きなおしてみる。
------------------------------------------------------------------
scn FastSleepScript
; ======================
; Script created by Ermeso. modified yomota
; ======================

short FastTime
short State

Begin MenuMode 1012

set State to IsTimePassing

if FastTime == 0 && State == 1
set FastTime to 1
sgtm 5
endif

if FastTime == 1 && State == 0
set FastTime to 0
sgtm 1
endif

End
------------------------------------------------------------------
今の機能のままだとこれで動くはず。試してみたら問題ないようだ。
これでクエストの実行間隔を0.2秒から0.1秒にしてみたが、キャンセルの検知もれは起こってしまった。
試しに0.01秒にしてみたが、それでも駄目だった。
クエストの実行間隔では把握しきれないみたいだ。

スクリプトにちょっと追記した。
------------------------------------------------------------------
scn FastSleepScript
; ======================
; Script created by Ermeso. modified yomota
; ======================

short FastTime
short State

begin gamemode
sgtm 1
end

Begin MenuMode 1012

set State to IsTimePassing

if FastTime == 0 && State == 1
set FastTime to 1
sgtm 5
endif

if FastTime == 1 && State == 0
set FastTime to 0
sgtm 1
endif

End
------------------------------------------------------------------
強引な方法。これでスクリプトによる負荷は増えるかもしれないが、倍速時間のままになることはない。

これをNexusで公開しようかと作者のErmesoに、Nexusのメッセンジャーで昨日メッセージを送った。

yomox9

Hello.
 
sorry,My english is very poor. 私の英語はへっぽこです。
 
"5x faster waiting" have one problem. 5x faster waiting は一つ問題があります。
When cancel waiting, remaining 5x faster effect. 待機をキャンセルした時、5倍効果が残ります。
I modified your MOD. 私はあなたのMODを修正しました。
 
I read "Credits and distribution permission". 私は”クレジットと配布許可”(MODページのPerm)を読みました。
so I think I can publish it with your credits. だから私はクレジットを書いてそれを公開して出来ると思いました。
However, I can not have conviction because I am weak in English. しかしながら、私は英語に弱いので確信が持てません。

I will publish this mod on today. 私は今日このMODを公開するつもりです。
May I publish it? 公開してよいですか?
 
For your information. 参考までに。
The scripts are as follows. スクリプトは以下の通りです。
-----------------------------------------------------------------
scn FastSleepScript
; ======================
; Script created by Ermeso. modified yomota
; ======================
 
short FastTime
short State
 
begin gamemode
sgtm 1
end
 
Begin MenuMode 1012
 
set State to IsTimePassing
 
if FastTime == 0 && State == 1
set FastTime to 1
sgtm 5
endif
 
if FastTime == 1 && State == 0
set FastTime to 0
sgtm 1
endif
 
End
-----------------------------------------------------------------


そしたら、今朝こういう返事が返ってきてた。

ermeso

    Regular
  • Members
  • PipPip
  • 72 posts
    That script has some problems. Tell you what, I'll post a fixed update later today. 
    あのスクリプトはいくつか問題がある。Tell you what,私は今日この後修正したアップデートを投稿します。←Tell you whatがわからない。

    Greetings,
    Ermeso

    で、とりあえずこう返信した。Tell you whatの意味がよくわからないので、こちらの出したスクリプトを修正してくれるのかな?と勝手に思ってた。

    yomox9

      Journeyman
    • Members
    • Pip
    • 41 posts

    • Currently Playing:
      Fallout New Vegas

    • Favourite Game:
      Fallout3,Fallout New Vegas
    Yes, I wait.You do not need to hurry.
    はい、待ちます。急がなくていいです。

    で、自分でもスクリプトをもっと効率的にしてみた。
    ------------------------------------------------------------------
    scn FastSleepScript
    ; ======================
    ; Script created by Ermeso. modified yomota
    ; ======================

    short State

    begin gamemode
    sgtm 1
    end

    Begin MenuMode 1012

    set State to IsTimePassing

    if State == 1
    sgtm 5
    else
    sgtm 1
    endif

    End
    ------------------------------------------------------------------
    if 文とsgtm文、どちらも同じ1行で同じ負荷なら、ifでsgtmが必要か判断せずに、sgtmを実行してしまえ、という考え。

    で、Nexusのサイトを見てみたら 5x faster waiting がアップデートされていた。
    Tell you what,の意味がやっぱりわからない。。。

    スクリプト内容は以下の通り。
    ------------------------------------------------------------------
    scn FastSleepScript
    ; ======================
    ; Script created by Ermeso
    ;     v2 - fixes occasional continuance in game mode
    ; ======================

    short FastTime
    short State
    short ApplyGM
    short RunOnce

    Begin MenuMode 1012

    if RunOnce == 0 
    set WaitBoost to 5
    endif

    set State to IsTimePassing

    if FastTime == 0 && State == 1
    set FastTime to 1
    set ApplyGM to 1
    sgtm WaitBoost
    endif

    if FastTime == 1 && State == 0
    set FastTime to 0
    set ApplyGM to 1
    sgtm 1
    endif

    End

    Begin Gamemode

    if ApplyGM == 1
    set ApplyGM to 0
    sgtm 1
    endif

    End
    ------------------------------------------------------------------
    これは自分もおぼろげに考えた形で、もし sgtm が if文より負荷が大きいならばこの方が良い。
    実際どうなんだろう?気になる。
    もう一つ大したことじゃないが、今回も RunOnce が無駄になってる。

    で、さらにこういうメッセージを送った。でもメッセンジャーの使い方がよくわかってないので送れていないかもしれないが。

    yomox9

      Journeyman
    • Members
    • Pip
    • 41 posts

    • Currently Playing:
      Fallout New Vegas

    • Favourite Game:
      Fallout3,Fallout New Vegas
    I read your update scripts. アップデートしたスクリプトを読みました。

    It does not function "RunOnce"(but It is no big deal). "RunOnce"が機能していません(大した問題ではないが)。

    "if" and "sgtm" are same stress? "if"と"sgtm"は同じ負荷ですか?
    ex. 例
    --------------------------------------------
    short State
     
    begin gamemode
    sgtm 1
    end
     
    Begin MenuMode 1012
     
    set State to IsTimePassing
     
    if State == 1
    sgtm 5
    else
    sgtm 1
    endif
     
    End
    --------------------------------------------
    if you know,please teach me. もし知っていたら教えて下さい。

    thank you for your update. アップデートありがとう

    0 件のコメント:

    コメントを投稿