休息メニューでは時間までしか表示されませんが、グローバル変数の GameHour を使えば、今何分かも表示できるMODが作れそうです。
時間が収められたグローバル変数の使い方の練習として作っているので、スクリプトばっかりです。
Download ClockandWatch (21kb)
変数をそのままメッセージボックスに表示
とりあえずグローバル変数をそのままメッセージボックスに表示させてみる。
Begin watch
if ( OnActivate ) ;使用すると
MessageBox, "%.0f-%.0f (%.0f) %.2f", Month, Day, Year, GameHour, "OK"
;MessageBox, "メッセージ",変数名, 変数名, 変数名, 変数名, "OK"ボタン
;%.0f :ここに小数点以下0桁の実数の値を表示する
;「月-日 (年)時間」「OK」を表示
endif
End watch
本当は %D で整数型の値を表示するはずだが、うまくいかなかったので、全て実数型の表示定義にして、
小数点以下を表示しないようにした。
変数を加工する
このままでは、1月を 0 としているので表示が 1 つずつずれることと、「分」が 0 から 99 まで表示されるので
これを換算しなければいけない。
まずは Month の値に 1 足すようにする。
Morrowind には独自の月の名前があるが(
実験:月を表示するスクリプト)、"Last Seed"とだけ書いてあっても(私は)何月かわからない、といって日にちや時間も表示されているところに
、月の名前と数字の両方が書いてあると、今度は読み辛くなるので、今回は数字だけ表示する。
set currentMonth to Month +1
;グローバル変数に1足してローカル変数currentMonthに代入
"時間"と"分"を切り分ける
「分」を換算するには、GameHourから、小数点以下の部分だけを取り出さなければいけないが、実数型の変数から
整数部分だけや、小数点以下の部分だけを切り出す方法がわからなかったので、24の分岐のif文で代用する。
short currentHour ;現在の時間を代入する(整数型)
float currentMinutes ;現在の分を代入する(実数型)
if ( GameHour < 1 ) ;GameHourが1未満の時
set currentHour to 0 ;現在時間は0
set currentMinutes to GameHour ;現在の分はGameHour
elseif ( GameHour < 2 )
set currentHour to 1 ;現在時間は0
set currentMinutes to ( GameHour - 1 ) ;現在の分はGameHour - 1
elseif ( GameHour < 3 )
set currentHour to 2
set currentMinutes to ( GameHour - 2 )
elseif ( GameHour < 4 )
set currentHour to 3
set currentMinutes to ( GameHour - 3 )
;(中略)
elseif ( GameHour < 24 )
set currentHour to 23
set currentMinutes to ( GameHour - 23 )
endif
"分"を60単位の数字に換算する
currentMinutes を60単位の数字に換算する。
0.50 が 30 と表示されるようにすればいい。
set currentMinutes to ( currentMinutes * 60 )
currentMinutes が、1桁だと"6"のように表示されるが、これを"06"と表示させたいので、
10未満と10以上でメッセージを分ける。
if ( currentMinutes < 10 )
MessageBox, "%.0f-%.0f (%.0f) %.0f:0%.0f", currentMonth, Day, Year, currentHour, currentMinutes, "OK"
activate
else
MessageBox, "%.0f-%.0f (%.0f) %.0f:%.0f", currentMonth, Day, Year, currentHour, currentMinutes, "OK"
これでスクリプト完成。Clockのほうも基本的には同じ内容。
スクリプト完成
Begin watch
short currentMonth
short currentHour
float currentMinutes
if ( OnActivate )
if ( GameHour < 1 )
set currentHour to 0
set currentMinutes to GameHour
elseif ( GameHour < 2 )
set currentHour to 1
set currentMinutes to ( GameHour - 1 )
elseif ( GameHour < 3 )
set currentHour to 2
set currentMinutes to ( GameHour - 2 )
elseif ( GameHour < 4 )
set currentHour to 3
set currentMinutes to ( GameHour - 3 )
elseif ( GameHour < 5 )
set currentHour to 4
set currentMinutes to ( GameHour - 4 )
elseif ( GameHour < 6 )
set currentHour to 5
set currentMinutes to ( GameHour - 5 )
elseif ( GameHour < 7 )
set currentHour to 6
set currentMinutes to ( GameHour - 6 )
elseif ( GameHour < 8 )
set currentHour to 7
set currentMinutes to ( GameHour - 7 )
elseif ( GameHour < 9 )
set currentHour to 8
set currentMinutes to ( GameHour - 8 )
elseif ( GameHour < 10 )
set currentHour to 9
set currentMinutes to ( GameHour - 9 )
elseif ( GameHour < 11 )
set currentHour to 10
set currentMinutes to ( GameHour - 10 )
elseif ( GameHour < 12 )
set currentHour to 11
set currentMinutes to ( GameHour - 11 )
elseif ( GameHour < 13 )
set currentHour to 12
set currentMinutes to ( GameHour - 12 )
elseif ( GameHour < 14 )
set currentHour to 13
set currentMinutes to ( GameHour - 13 )
elseif ( GameHour < 15 )
set currentHour to 14
set currentMinutes to ( GameHour - 14 )
elseif ( GameHour < 16 )
set currentHour to 15
set currentMinutes to ( GameHour - 15 )
elseif ( GameHour < 17 )
set currentHour to 16
set currentMinutes to ( GameHour - 16 )
elseif ( GameHour < 18 )
set currentHour to 17
set currentMinutes to ( GameHour - 17 )
elseif ( GameHour < 19 )
set currentHour to 18
set currentMinutes to ( GameHour - 18 )
elseif ( GameHour < 20 )
set currentHour to 19
set currentMinutes to ( GameHour - 19 )
elseif ( GameHour < 21 )
set currentHour to 20
set currentMinutes to ( GameHour - 20 )
elseif ( GameHour < 22 )
set currentHour to 21
set currentMinutes to ( GameHour - 21 )
elseif ( GameHour < 23 )
set currentHour to 22
set currentMinutes to ( GameHour - 22 )
elseif ( GameHour < 24 )
set currentHour to 23
set currentMinutes to ( GameHour - 23 )
endif
set currentMonth to Month +1
set currentMinutes to ( currentMinutes * 60 )
if ( currentMinutes < 10 )
MessageBox, "%.0f-%.0f (%.0f) %.0f:0%.0f", currentMonth, Day, Year, currentHour, currentMinutes, "OK"
activate ;日時を表示してからアイテムを拾うための"使用する"関数 Watch のみ
else
MessageBox, "%.0f-%.0f (%.0f) %.0f:%.0f", currentMonth, Day, Year, currentHour, currentMinutes, "OK"
activate
endif
set currentMonth to 0 ;初期化
set currentHour to 0
set currentMinutes to 0
endif
End watch
このスクリプトを、Grand Soul Gem のテクスチャを(2分ぐらいで作って)張り替えた物に設定して、
MORROWIND COUNCIL - JAPANさんにUPしました。
が、後でMorrowind Summitさんを見てみたら、
時計のMODが 2つあって、そのうち 1つは時間、分も表示されるものでした。
せっかくなので、そのMODを参考にして改良して、テクスチャも少しはマシなものに換えたいと思います。
(月齢とか表示させたら時計らしくなるかな)