LNS143 ミニマップ > 視界制限

マップ画面(Scene_Map)にて、画面の中心以外を暗くする「視界制限」と「ミニマップ」の機能を追加します。






参考資料

スクリーンショットサンプル




基本情報

前提スクリプト


拡張タイプ

★ 既成 (導入するだけでゲームの挙動が変化する)


説明

◆ 視界制限

  • マップのメモに "<視界:***>" と書くと、視界制限マップとなります。※画像素材は要りません。
文法 <視界:(size)>
     <視界:(width),(height)>
     <視界:(width),(height),(opacity)>
     <視界:(width),(height),(red),(green),(blue)>
  • size にはプレイヤーが視認できる限界の距離を、マス単位で指定します。
  • width と height を指定する形式の場合、width が横方向の視界、height が縦方向の視界を表します。
  • opacity には、視界の外がどれくらい見えるのかを指定します。
    • 0 で完全に見えなくなります。
    • 255 で完全に見える(視界制限無しと同じ)ようになります。
    • 省略時は 0 です。
  • red, green, blue を指定すると、視界の外にその色のフィルターがかかります。
    • 224, 160, 96 とすると、「夕焼け」のような色合いになります。
    • 0, 0, 128 とすると、「夜」のようなうっすら青い色合いになります。
  • イベントの名前に <明かり:***> と書いておくと、視界制限マップにおいてそのイベントの周囲も見えるようになります。
文法 <明かり:(size)>
     <明かり:(width),(height)>
     <明かり:(width),(height),(hue)>
  • size にはそのイベントの周囲何マスが明るくなるかを指定します。
  • width と height を指定する形式の場合、width が横方向の視界、height が縦方向の視界を表します。

  • イベントコマンド [スクリプト] で以下のような処理が可能です。

● set_temp_sight(w[, h[, duration])

  • プレイヤーの視界を一時的に幅 w, 高さ h に変更します。
  • イベントなどで一時的に視界を変えたいときなどに使います。
  • duration には変更にかかる時間をフレーム数で指定します。
    • 1 秒かけて変化させる場合は duration = 60
    • 即座に変化させる場合は duration = 1

● reset_temp_sight([duration])

  • set_temp_sight によって設定された視界を元に戻します。
  • duration には変更にかかる時間をフレーム数で指定します。

● set_sight(option)

set_sight(:plus => 5, :step => 1000, :event => 1)
  • プレイヤーの視界を変更します。set_temp_sight より細かい指定が可能です。
  • 変更内容は set_temp_sight が優先されます。
  • ランタンなどによる明かりの増加を表現するときに使います。
  • option はハッシュを渡します。ハッシュのキーと値の対応は以下の通りです。

  • 視界値の変更
    • 省略不可能です。下の 3 つのいずれかは必ず指定する必要があります。
    • (共通事項) 値は数値(Integer)か配列(Array)にします。
      • Array にする場合は [幅, 高さ] という要素にしてください。
    • 複数設定した場合 :abs > :plus > :mul の順に優先されます。
:plus
  • マップ自体に設定された視界値に、この値を足します。
:mul
  • マップ自体に設定された視界値を、この数値倍します。
:abs
  • マップに設定された視界値に関わらず、この数値を適用します。

  • 時限設定(自動解除)
    • 省略可能です。省略された場合、自動では視界変更は解除されません。
    • (共通事項) 値は数値(Integer)にします。
    • 複数設定した場合、いずれかの条件が満たされた時点で変更が解除されます。
:step
  • 指定された歩数歩くと視界変更が解除されます。
  • イベントコマンドによる移動ではカウントは進みません。
:time
  • 指定された秒数の時間が経つと視界変更が解除されます。
  • メニューなどマップ以外の画面と、イベント処理中はカウントは進みません。

  • その他
    • 省略可能です。
:event
  • 歩数か時間による自動解除が行われた場合、指定された ID のコモンイベントを呼び出します。
  • 「明かりが消えた!」などのメッセージを表示する場合に指定します。
:duration
  • 変更にかかる時間をフレーム数で指定します。
  • 省略した場合は 60(約1秒) になります。
:auto_off
  • 偽でない値を指定すると、視界制限の無いマップに移動したとき自動で解除されます。
  • この場合は :event によるコモンイベントの呼び出しは行われません。

● reset_sight([duration])

  • set_sight によって設定された視界を元に戻します。
  • duration には変更にかかる時間をフレーム数で指定します。
  • :event によるコモンイベントの呼び出しは行われません。

◆ ミニマップ

  • マップ画面の右下に小さいマップを表示します。
  • ミニマップにはプレイヤー、(当たり判定のある)イベントなどが表示されます。

  • Minimap_Dir フォルダ内に "Map***" (*** はマップ ID )という画像があれば、その画像をミニマップとして使います。
    • LNS140 マップ/キャラ拡張 のオマケ機能(テストプレイ時にマップ画面で CTRL + SHIFT + S)を使うと簡単にマップ全体の縮小画像を生成できます。
  • 画像がなければ自動生成したミニマップ画像が表示されます。
    • 自動生成時にマップの 1 マスをミニマップの何ピクセルで表すかは Minimap_Size で定義します。
    • 自動生成時の色などは下の設定項目を見てください。

  • ミニマップの大きさは画面の 1/4 (幅と高さがそれぞれ1/4)です。
  • Change_Size_Key を押すたびにミニマップの大きさを変えます。
    • 1/4 → 1/2 → 全画面 → 非表示 → 1/4 ... と切り替わります。
  • Change_Pos_Key キーを押しながら Change_Size_Key を押すと、ミニマップの位置が変わります。
    • 右下 → 左上 → 右上 → 右下 ... と切り替わります。
  • [LNS102 マウス操作] が有効でミニマップの大きさが 1/4 のとき、マウスカーソルをミニマップに重ねると、ミニマップが透過しその部分が見やすくなります。

  • マップのメモに <ミニマップ:***> と書くと、ミニマップの形式を指定できます。
  • *** には次のいずれかを指定します。
    • "ダンジョン", "探索", "dungeon"
      • 「ダンジョンモード」のミニマップになります。
      • 「ダンジョンモード」では、プレイヤーが実際に見たことのある部分だけがミニマップに表示され、それ以外の部分は黒塗りになります。
    • "なし", "none"
      • ミニマップを表示しません。
      • プレイヤーの座標を表す数値は他のモードと同じように描画されます。
    • "アイテム:***", "item:***"
      • *** で指定されたアイテムを持っている場合は通常のミニマップになります。
      • 持っていない場合は「ダンジョンモード」のミニマップになります。
      • *** に存在しないアイテム名や ID が書かれていた場合は、Minimap_Default に従った形式になります。
    • 上記以外や <ミニマップ> だけ書いた場合
      • 通常のミニマップを表示します。
  • マップのメモに <ミニマップ> が無い場合は Minimap_Default に従った形式でミニマップが表示されます。
    • 「ダンジョンモード」にするには :dungeon というシンボルにします。
    • 「なし」にするには :none というシンボルか false にします。
    • アイテム指定の場合はそのアイテムの ID を指定します。

◆ ミニマップ設定項目

Minimap_TileColors = { # 自動生成ミニマップのタイル色リスト
# (タイプ) => Color.new( R ,  G ,  B ),
  :outer   => Color.new( 64,   0,   0), # マップ外
  :mask    => Color.new(  0,   0,   0), # 未発見部分
  :wall    => Color.new( 48,  48,  48), # 通行不可能
  :upper   => Color.new( 96,  96,  96),   # 通行不可能(上層)
  :roof    => Color.new( 64,  64,  64),   # 屋根
  :shallow => Color.new(  0,  64, 128),   # 浅い水
  :deep    => Color.new(  0,   0,  96),   # 深い水
  :counter => Color.new( 64,  64,   0),   # カウンター
  :pass    => Color.new(176, 176, 176), # 通行可能
  :ceiling => Color.new(224, 224, 224),   # 天井
  :ladder  => Color.new(192,  96, 192),   # 梯子
  :bush    => Color.new( 96, 192,  96),   # 茂み
  :damage  => Color.new(160,   0, 160),   # ダメージ床
}
  • ミニマップを自動生成する場合、各要素を表すための色を Minimap_TileColors で定義します。
  • 値は Color で指定します。

Minimap_ObjectColors = {     # オブジェクトの色リスト
# (タイプ) => (Color またはファイル名),
  :player  => Color.new(255,   0,   0), # プレイヤー
  :event   => Color.new(255, 255,   0), # 汎用イベント
  :enemy   => Color.new(255, 128,   0), # 敵キャラ (名前に <タイプ:enemy> )
  :chest   => Color.new(  0, 128, 255), # 宝箱     (名前に <タイプ:chest> )
}
  • プレイヤーと(タイル画像でない)イベントを表すものは Minimap_ObjectColors で定義します。
  • 値は Color または画像ファイル名を指定します。
    • ファイル名で指定する場合、その画像は Minimap_Dir に置いてください。
  • 名前に <非表示> と書いてあるイベントは、ミニマップに表示されません。
  • 透明状態やキャラグラフィックが設定されていないなど、見えないイベントはミニマップに表示されません。
    • [移動ルートの指定] などで透明状態やキャラ画像が変化した場合は表示されるようになります。
  • 名前に <タイプ:*> と書いてあるイベントは、* のオブジェクトタイプになります。
    • * の内容は、Minimap_ObjectColors のキーとして登録してあるものです。
    • 例えば <タイプ:enemy> と書いておくと、Minimap_ObjectColors[:enemy] で定義された色(既定値ではオレンジ色)で表示されます。


備考

再定義されるメソッド


設定項目

Minimap_Dir <既定値 "Graphics/System/Minimap/" >
ミニマップ画像のフォルダ
Minimap_Default <既定値 :minimap >
未指定時のミニマップタイプ
Minimap_Opacity <既定値 192 >
ミニマップ不透明度
Change_Size_Key <既定値 :KEYM >
ミニマップ表示切り替えキー
Change_Pos_Key <既定値 :SHIFT >
ミニマップ位置切り替え時に押すキー
Minimap_Size <既定値 4 >
自動生成ミニマップの 1 マスあたりの大きさ
Minimap_TileColors
自動生成ミニマップのタイルごとの色リスト
Minimap_ObjectColors
ミニマップに表示するオブジェクトの色リスト


更新履歴

  • 2021/01/07 わずかに軽量化、前提スクリプトを一つ減らした
  • 2020/12/29 新版公開

  • こんにちは。不具合を発見したのでご報告いたします。 LNS000 組み込み拡張 LNS010 Input拡張 LNS100 プリセット拡張 LNS102 マウス操作 LNS140 マップ/キャラ拡張 の5つを導入した状態で、マップ画面でマウスカーソルをゲームウインドウの外側で大きく動かすなどすると、「 スクリプト 'LNS 140 マップ/キャラ拡張' の 980 行目で IndexError が発生しました。 index -1 too small for array; minimum: 0 」というエラーメッセージが表示され、ゲームが終了してしまいます。 スクリプトは全て最新で、内容は改変していません。 -- 2022-07-26 01:29:40
  • 確認が遅れましたが、対応修正しました。正確には「既に対応済みであったがアップロードを忘れていた」という状態でした…… -- 2022-11-01 15:39:07
  • 対応ありがとうございます!しかし LNS000, 010, 100, 102, 140 の5つを入れた状態で起動直後に「スクリプト 'LNS140 マップ/キャラ拡張' の 1719 行目で NameError が発生しました。 undefined method 'lns102_dash?' for class 'Game_Player'」と表示され、終了します。 -- 2022-12-24 16:39:35
コメント:

すべてのコメントを見る
最終更新:2021年01月07日 20:29
添付ファイル