QLOOK ANALYTICS
サイトマップ :

暦システム(RGSS3)
Ver1.24(2014/08/09)

どういったものに需要があるかなど
スクリプト製作の参考にしたいので,
いいね!と思ったスクリプトにクリックお願いします.

web拍手

概要

ゲームに日付,時間の概念を導入します.
自由に暦を設定して任意のタイミングで時間を進めることができます.
時間に合わせて画面の色調を自動で変更することも可能です.

暦システム(RGSS3)のスクリーンショット

位置

特に指定はありません.

スクリプト

中身をすべてコピーして,ツクールのスクリプトに新たなセクションを作成し,貼り付けてください.

更新履歴

  1. 2014/08/09…色調固定機能の不具合を修正
  2. 2014/08/06…色調固定機能の不具合を修正
  3. 2014/06/30…マップ上の暦ウインドウ一時消去の挙動を修正
  4. 2014/03/15…暦ウインドウ非表示でもゲーム開始時のみ表示されてしまうバグを修正
  5. 2013/11/24…マップの暦ウインドウを一時消去できるように
  6. 2013/06/04…バトル画面では色調を変更しないよう設定可能に
  7. 2013/06/03…公開

使用方法

スクリプトに丸ごと貼り付けていただければ使用できます.

暦の設定

まずは詳細設定にて暦の設定を行って下さい.

RANKS

ランクの設定を行います.
ランクとは秒,分,時,,などのような時間の単位を表します.
ランクは上から順にランク0,ランク1と呼び,あるランクの値が上限を超えると一つ上のランクに繰り上げされます.

各ランクは以下の様に設定します.
ランク名 => 値の範囲

RANKS = {
  :sec => 0...60,
  :min => 0...60,
  :hour => 0...24,
 :day => 1..30,
 :mon => 1..12,
 :year => 1..9999
}

上記の例ではランクの低い順に秒,分,時,日,月,年を設定しています.
また,それぞれ取り得る値の範囲も指定しています.
(一月30日で年は便宜上9999年を上限としています)
例えばdayが25のときに7加算され32になると,結果としてdayは2になり,monは1加算されます.

このようにして基本となる暦を作成します.
この部分を任意に変えることで自由な暦を設定できます.

SPECIAL_EXP

ランク以外の特別な暦情報を設定します.
例えば曜日や季節,時間帯などを設定することができます.

設定の仕方は以下のフォーマットにしたがってください.

SPECIAL_EXP[:%special%] = ->(cal){
  任意の式
}

%special%に設定する名前を指定し,対応する任意の式を記述します.
このときcalにより暦オブジェクトが参照できます.

例・時間帯の設定

SPECIAL_EXP[:timezone] = ->(cal){
  case cal.hour
  when 4,5
    0 # 早朝は0を返す
  when 6,7,8
    1 # 朝は1を返す
  when 9...16
    2 # 昼は2を返す
  when 16,17
    3 # 夕方は3を返す
  when 18...22
    4 # 夜は4を返す
  when 22...24,0...4
    5 # 深夜は5を返す
  end
}
TRANSFORM

表示変換の設定を行います.
暦を文字列として表現する際,整数以外の形式で表示したい場合に使用します.

また,全く新しい独自の表示形式を指定することも可能です.

例・月の文字列表記

TRANSFORM[:mon] = ->(cal){
  ["Jan", "Fab", "Mar", "Apr", "May", "Jun",
  "Jul", "Aug", "Seq", "Oct", "Nov", "Dec"][cal.mon]
}
INITIAL_CAL

ゲーム開始時の暦を設定します.
設定したいランクと対応する値を指定します.
指定されなかったランクの初期値は値の範囲のうち最小のものになります.

INITIAL_CAL = {
  :day => 15,
  :mon => 12,
  :year => 2011
}

この例では2011年12月15日0時0分0秒が初期値となります.

MAP_WINDOW

マップで暦ウインドウを表示するかを設定します.

この設定はゲーム中以下のスクリプトにて切り替え可能です.

$game_map.koyomi_display = true/false
MAP_WINDOW_FADE

マップでの暦ウインドウをフェードするか設定します.
trueのとき一定時間表示したあとフェードアウトします.
falseのとき暦ウインドウを常に表示します.

HIDE_MAP_WINDOW

マップで暦ウインドウを常に表示するとき,ウインドウを一時的に消去できるか設定します.

この設定はゲーム中以下のスクリプトにて切り替え可能です.

$game_koyomi.hide_map_window = true/false
HIDE_KEY

マップで暦ウインドウを一時的に消去するボタンです.
もう一度押すと再び表示します.

また,次のスクリプトをマップ上で実行するとイベント側から暦ウインドウの一時消去および再表示を行うことができます.

$game_map.hide_koyomi_window = true/false
MAP_WINDOW_FORMAT

マップでの暦ウインドウの表示内容を設定します.
配列でフォーマットを指定します.一つの要素につき一行となります.< br/> フォーマットについては後述のメソッドstrftimeを参照してください.

MENU_WINDOW

メニューで暦ウインドウを表示するかを設定します.

MENU_WINDOW_FORAMT

メニューでの暦ウインドウの表示内容を設定します.
設定の仕方はMAP_WINDOW_FORMATと同様です.

AUTO_TONE

暦による画面の色調の自動変更を設定します.
trueの時時間によって画面の色調が自動で変更されます.
また,イベントコマンドによる画面の色調変更は機能しなくなります.
ただし,後述する色調固定マップでは機能します.

この設定はゲーム中以下のスクリプトにて切り替え可能です.

$game_koyomi.auto_tone = true/false
AUTO_TONE_DURATION

デフォルトの色調変更時間の設定です.
色調変更の条件で色調変更時間が指定されない場合はこの値が適用されます.

AUTO_TONE_COND

色調変更の条件を設定します.
色調を変更する条件となる時間とそれに対応する色調(Tone)を指定します.
上にある条件ほど優先的にマッチします.
条件の指定方法は条件に設定したいrankをキーにして対応する値を直接指定するか値の範囲で指定します.
22..4(22...24かつ0..4)のような指定も可能です.
範囲に関しては(0...3)の場合0から2まで,0...3の場合0から3までを表します.

また,対応する色調は以下で指定します.
Tone.new(赤(-255~255),緑(-255~255),青(-255~255),グレー(0~255))

例・時間帯によって色調を変える

AUTO_TONE_COND = {
  {:hour => 16...18} => Tone.new(68,-34,-34,0),
  {:hour => 18...22} => Tone.new(-34,-34,0,34),
  {:hour => 22...4} => Tone.new(-68,-68,0,68),
  {:hour => 4...6} => Tone.new(-34,-34,-34,34),
  {:hour => 6...9} => Tone.new(34,34,34,34)
}
FIX_TONE_ON_BATTLE

バトル画面では画面の色調を変更しない設定にできます.
trueの場合マップで色調が自動変更されている場合でも画面の色調はデフォルト(0,0,0,0)になります.
また,色調固定マップの場合でもデフォルトの色調になります.

AUTO_TIME_PASS

時間が自動経過するかを設定します.

この設定はゲーム中以下のスクリプトによって切り替え可能です.

$game_koyomi.auto_time_pass = true/false
AUTO_TIME_PASS_DURATION

時間の自動経過間隔を設定します.
指定したフレームが経過するごとにTIME_PASSINGで指定した分の時間が経過します.

TIME_PASSING

時間の自動経過量を設定します.
加算したいランクと対応する加算量を指定してください.

例・1分30秒ずつ加算する

TIME_PASSING = {:min => 1, :sec => 30}
STOP_ON_EVENT

イベント中は時間の自動経過を停止するか設定します.

この設定はゲーム中以下のスクリプトによって切り替え可能です.

$game_koyomi.stop_auto_time_pass_on_event = true/false
STOP_ON_BATTLE

バトル中は時間の自動経過を停止するか設定します.

この設定はゲーム中以下のスクリプトによって切り替え可能です.

$game_koyomi.stop_auto_time_pass_on_battle = true/false
MOVE_TIME_PASS

場所移動による時間経過を設定します.
「場所移動」が行われる度に時間を経過させることができます.
加算したいランクと対応する加算量を指定してください.
場所移動により加算したくない場合は空のハッシュを指定してください.

BATTLE_START_TIME_PASS

戦闘開始による時間経過を設定します.
戦闘開始時に時間を経過させることができます.
加算したいランクと対応する加算量を指定してください.
加算したくない場合は空のハッシュを指定してください.

BATTLE_END_TIME_PASS

戦闘終了による時間経過を設定します.
戦闘終了時に時間を経過させることができます.
加算したいランクと対応する加算量を指定してください.
加算したくない場合は空のハッシュを指定してください.

暦の操作

ゲーム中は基本的にスクリプトコマンドから$game_koyomiにアクセスすることで暦を操作できます.

以下は$game_koyomiからできる主な操作一覧です.

$game_koyomi.auto_tone = true/false

時間による画面色調の自動変更をするかどうか設定できます.

$game_koyomi.tone_temp_diration = int

これを設定した次の画面色調自動変更時のみ指定した時間で色調が変化します.
イベント等で時間を進めた際早く色調を切り替えたいときなどに利用します.

$game_koyomi.move_temp_time_pass = {:rank => value, ...}

これを指定した次の場所移動時のみ指定した分だけ時間が経過します.

$game_koyomi.battle_start_temp_time_pass = {:rank => value, ...}

これを指定した次の戦闘開始時のみ指定した分だけ時間が経過します.

$game_koyomi.battle_end_temp_time_pass = {:rank => value, ...}

これを指定した次の戦闘終了時時のみ指定した分だけ時間が経過します.

$game_koyomi.auto_time_pass = true/false

自動で時間を経過させるか設定できます.

$game_koyomi.stop_auto_time_pass_on_event = true/false

自動で時間が経過するとき,イベント中は時間経過を停止するか設定できます.

$game_koyomi.stop_auto_time_pass_on_battlet = true/false

自動で時間が経過するとき,バトル中は時間経過を停止するか設定できます.

$game_koyomi.rank

設定した各ランクの値を取得できます.

例・現在の月を取得

$game_koyomi.mon
$game_koyomi.rank = value

設定した各ランクの値を変更できます.

例・現在の月を3に設定

$game_koyomi.mon = 3

例・3時間進める

$game_koyomi.hour += 3
$game_koyomi.special

設定した各特殊表現の値を取得できます.

例・現在の時間帯を取得

$game_koyomi.timezone
$game_koyomi.set(init)

暦をセットします.
initは各ランクと対応する値のハッシュか,後述する起算時からのランク0からみた経過時間を指定します.

例・ハッシュで暦をセット

$game_koyomi.set(year: 2011, mon: 12. day: 15)

例・ある暦から得た起算時からの経過時間で暦をセット

$game_koyomi.set(koyomi.to_i)
$game_koyomi.time_pass(amount)

amountに各ランクと対応する値のハッシュを指定して,その分だけ時間を経過させます.

例・1月と3時間だけ時間をすすめる

$game_koyomi.time_pass(mon: 1, hour: 3)
$game_koyomi.to_i

起算時からのランク0からみた経過時間を取得します.
この結果を変数などに保存することで容易に暦を復元できます.

例・暦を整数にして保存・復元する

koyomi = $game_koyomi.to_i
$game_koyomi.set(koyomi)
$game_koyomi.strftime(format)

formatに変換文字列を指定して現在の暦を文字列にします.

format中には以下の二つの特別な文字列を記述することで暦の値を置き換えることができます.

<<表示桁#rank>>
表示桁は先頭に - または 0 を付けた数字と置き換えます.
rankは設定したランクのいずれかと置き換えます.
ランクの値が指定した数字の桁分の幅の文字列と置換されます.
先頭に 0 をつけると余った桁0で埋められます.
先頭に - をつけると右寄せとなります.

<<label>>
labelはTRANSFORMで指定した変換ラベルと置き換えます.
TRANSFORMで設定した内容に従って文字列に置換されます.

例・2011年12月15日4時00分00秒の暦のとき

$game_koyomi.strftime("<<4#year>>-<<4#mon>>-<<04#day>>")
#=> 2011- 12-0015
$game_koyomi.strftime("<<mon>>-<<-4#day>>:<<timezone>>")
#=> Dec-15 :早朝

マップの個別設定

マップのメモ欄に以下を記述することでマップごとに設定を行うことができます.

==暦非表示==

マップで暦ウインドウを表示する場合でもこの記述があるマップは暦ウインドウを表示しません.

==暦停止==

自動で時間が経過する場合でもこの記述があるマップは自動で時間が経過しません.

==色調固定[r,g,b,gray]==

自動で画面色調が変更される場合でもこの記述があるマップは指定した色調になります.
屋内マップなどで利用します.
薄暗い洞窟等も表現可能です.
r,g,b,grayはそれぞれ色調(トーン)を指定する値です.

例・時間にかかわらず薄暗い洞窟

==色調固定[-34,-34,-34,34]==

注意

このスクリプトでは「RPG::Map」「Game_Map」「Scene_Menu」「Scene_Map」「Game_Screen」「Game_Troop」「Scene_Battle」のメソッドを改変しています.

Valid XHTML 1.0 Transitional