疑似タイムアタックイベントのスクリプト(RPGエディタ)

投稿者:            mini mosmoss 投稿日:2016/05/03 04:24

「剣と天秤」で実際に使っているスクリプトを紹介していこうと思います。
関数リファレンスや初心者向けマニュアル、Wiki、質問掲示板に書かれていることの
いち使用例にすぎませんが、初心者がRPGエディタに慣れる手段の一つになればと思います。


疑似タイムアタックイベントのスクリプト(RPGエディタ)


  • 計測開始から一定時間のあいだ、探索するとアイテムが獲得できる
  • タイムアップになるとアイテムは獲得できなくなり強制的に次のイベントへうつる
  • タイムアップまでの大体の残り時間が画面上に表示される
というイベントになっています

RPG◆所持金を常時画面上にテキストで表示
『スクリプト 汎用関数』 0埋め文字列の作成
残り時間の表示に上で紹介されているスクリプトを使いました。


まず開始スクリプトに次のように書きます


#タイムアタック用開始スクリプト

#アイテムの所持上限数を設定
setMaxItemCount(50)

#タイムアタックの制限時間を定義(ミリ秒)
setVariable("制限時間", 180000)

#0埋め  
def addZero(n, b)
    l = 0; c = n; r = ""; b = b - 1
    while c > 9
        c = floor(c / 10); l = l + 1
    end  
    while l < b
        r = r + "0"; l = l + 1
    end  
    r = r + n
    return r
end


def tukuru()
 #テキスト表示場所作成
 setTextFontColor(255,255,255)
 setVariable("t",createText(512-160, 384-32, 160, 32))
 setTextFontColor(255,255,255)
 #テキストイベントフラグ
 setFlag("テキスト作成",false); setFlag("テキスト",true)
end #tukuru()終

def kaku()
#テキストの内容を作りそれを実際に書く
    t3 = getVariable("現在時刻") - getVariable("計測開始時の現在時刻")
    t3 = floor(  (getVariable("制限時間") - t3) /1000)
    setVariable("残り時間", t3)

a = floor(t3 / (60 * 60)) + ":" + addZero(floor((t3 % (60 * 60)) / 60),2) + "'" + addZero((t3 % 60),2)

 setText(getVariable("t"),a)
 setFlag("テキスト",false)
end #kaku() 終
#タイムアタック用開始スクリプトここまで



タイムアタックを開始するイベントに次のスクリプトを書きます

#タイムアタック用イベント1ここから

setVariable("計測開始時の現在時刻", getLocalCurrentTimeMillisecond() )
setVariable("現在時刻", getLocalCurrentTimeMillisecond() )

speak("計測を開始します")

deleteText( getVariable("t") )
; setFlag("テキスト",true)

setFlag("時間計測開始", true)
setFlag("タイムアタック", true)
setFlag("タイムアップ", false)
setFlag("テキスト作成",true)

#タイムアタック用イベント1ここまで



つぎは時間の取得、表示の更新、タイムアップの判定をするイベントスクリプトです

#タイムアタック用イベント2ここから(有効条件:getFlag("時間計測開始") && !getFlag("タイムアップ"))

    setVariable("現在時刻", getLocalCurrentTimeMillisecond() )


    t3 = getVariable("現在時刻") - getVariable("計測開始時の現在時刻")
    t3 = floor(t3/1000)
    setVariable("経過時間", t3)

    a = floor(t3 / (60 * 60)) + ":" + addZero(floor((t3 % (60 * 60)) / 60),2) + "'" + addZero((t3 % 60),2)

    setFlag("テキスト",true)

if t3 > getVariable("制限時間")/1000
speak("タイムアップです")
deleteText( getVariable("t") )
setFlag("タイムアップ", true)
setFlag("時間計測開始", false)

end
#タイムアタック用イベント2ここまで



上のスクリプトを書いたイベントをあたり判定なし、
接触または重なって開始の、透明イベントにします
有効条件には次のように書きます
getFlag("時間計測開始") && !getFlag("タイムアップ")


このイベントをタイムアタックに使うエリア内にちりばめます
プレイヤーがこの上を通ったときに、残り時間表示が更新され、
時間を過ぎていたらタイムアップのフラグがtrueになり、
時間計測開始のフラグがfalseになり、
残り時間の表示がなくなります

タイムアップのフラグtrueで自動開始するように
次のイベントを用意しておきます
(「剣と天秤」の場合は、これがラスボス戦です)


次にふたつの自動開始イベントをマップ内に作ります

#タイムアタック用イベント3(自動開始イベント:有効条件:getFlag("テキスト作成") )
tukuru()

上のイベントの有効条件
getFlag("テキスト作成")


#タイムアタック用イベント4(自動開始イベント:有効条件:getFlag("テキスト") )
kaku()

上のイベントの有効条件
getFlag("テキスト")


以上で時間の計測と表示のイベントは大体終わりですが
プレイヤーがワープする可能性がある場合
プレイヤーワープのスクリプトに次のスクリプトを追加で書きます

#タイムアタック用イベント5(プレイヤーワープ時すべてに書く)
if getFlag("時間計測開始")
setFlag("テキスト作成",true)
end


最後に、タイムアタック中に探索でアイテムを手に入れるイベントを作ります

#タイムアタック用イベント6(調べるイベント:有効条件getFlag("時間計測開始") )
item = "ホネ" #アイテムの名前をここにいれる

if !getFlag(item)

if giveItem(477) #マップのリソースエディタに登録されているアイテムのIDを入れないとエラーに
  speak(item + "を手に入れた")
  setFlag(item, true)
else
  speak("持ち物がいっぱいです")
end


else #アイテムを既に手に入れている場合はイベントが起きない

end

#タイムアタック用イベント6ここまで


有効条件を
getFlag("時間計測開始")

とするとタイムアタック中だけのイベントになります

変数item にアイテム名をいれて、
アイテム入手時のスピーク文とフラグ名に使っています
他のフラグ名とかぶらないように注意してください


イベントの注意点としては

タイムアタック中にセーブしても
残り時間は保存されないということがひとつ。
時間が経ってからロードすると、すぐにタイムアップになります。
これはセーブしてからロードされるまでの時間も計測されているためです。

もうひとつはやはり、
残り時間の表記の更新が変則的になること。
「タイムアタック用イベント2」の数を増やすことで
ある程度は改善されるものの、やはり気になるところではあると思います。

コメントする

コメントするには、ログインする必要があります。

コメント一覧

コメントはありません。