当サイトの運営者です。ゲーム制作とプラグイン開発が好きで、コミュニティに貢献したいと考えています。
RPGツクールMZでゲームを制作中です。
※プログラマ・エンジニアではありません。
AO Lighting System - AO_LightingSystem.js
シェア用テキスト:
▼AO Lighting System(AO様作) - AO_LightingSystem.js
https://plugin.fungamemake.com/archives/23660
キャラクター・イベント・アニメーション等を色調変更による塗りつぶしから除外することが可能なライティングプラグインです
ふりがな:らいてぃんぐしすてむ
機能概要: キャラクター・イベント・アニメーション等を色調変更による塗りつぶしから除外することが可能なライティングプラグインです
利用規約(ライセンス): MITライセンス
作者:AO
作者サイト:https://x.com/AoNbti
ダウンロードページ:https://raw.githubusercontent.com/AoNBTI/RPGMakerMV/mas…
ファイル名:AO_LightingSystem.js
プラグインのヘルプ:
/*:
* @plugindesc ライティングプラグイン
* @author AO
*
* @param キャラクター光影除外率
* @type number
* @min 0
* @max 100
* @default 20
* @desc キャラクターと重なる領域の光影レイヤーの削除率(%)
*
* @param バトラー光影除外率
* @type number
* @min 0
* @max 100
* @default 20
* @desc バトラーと重なる領域の光影レイヤーの削除率(%)
*
* @param バトラー光影除外設定
* @type boolean
* @on はい
* @off いいえ
* @default true
* @desc 全てのバトラーに光影除外を設定するか(true/false)
*
* @param アニメーション光影除外率
* @type number
* @min 0
* @max 100
* @default 90
* @desc アニメーションと重なる領域の光影レイヤーの削除率(%)
*
* @param アニメーション光影除外設定
* @type boolean
* @on はい
* @off いいえ
* @default true
* @desc 全てのアニメーションに光影除外を設定するか(true/false)
*
* @param ダメージポップ光影除外率
* @type number
* @min 0
* @max 100
* @default 100
* @desc ダメージポップと重なる領域の光影レイヤーの削除率(%)
*
* @param ステートアイコン光影除外率
* @type number
* @min 0
* @max 100
* @default 100
* @desc ステートアイコンと重なる領域の光影レイヤーの削除率(%)
*
* @param ステートオーバーレイ光影除外率
* @type number
* @min 0
* @max 100
* @default 100
* @desc ステートオーバーレイと重なる領域の光影レイヤーの削除率(%)
*
* @param サイドビュー武器光影除外率
* @type number
* @min 0
* @max 100
* @default 20
* @desc バトラーの武器と重なる領域の光影レイヤーの削除率(%)
*
* @param フキダシ光影除外率
* @type number
* @min 0
* @max 100
* @default 100
* @desc フキダシと重なる領域の光影レイヤーの削除率(%)
*
* @param ライトスプライト光影除外率
* @type number
* @min 0
* @max 100
* @default 100
* @desc 光源用スプライトと重なる領域の光影レイヤーの削除率(%)
*
* @param ライトスプライト不透明度反映率
* @type number
* @min 0
* @max 100
* @default 50
* @desc 光源用スプライトの不透明度を減少させた時に光影レイヤーの削除率を下げる割合(%)
*
* @param 光レイヤー成型適応
* @type boolean
* @on はい
* @off いいえ
* @default true
* @desc 光レイヤーにも影レイヤーと同様のキャラクター等による削除を適応するか(true/false)
*
* @param 影レイヤーブレンドモード
* @type number
* @min 0
* @max 3
* @default 2
* @desc 影レイヤースプライトのデフォルトブレンドモード(0:通常 1:加算 2:乗算 3:スクリーン)
*
* @param 光レイヤーブレンドモード
* @type number
* @min 0
* @max 3
* @default 3
* @desc 光レイヤースプライトのデフォルトブレンドモード(0:通常 1:加算 2:乗算 3:スクリーン)
*
* @param エネミーライト戦闘不能同期
* @type boolean
* @on はい
* @off いいえ
* @default true
* @desc エネミーバトラーが戦闘不能の時はそのライトを消去するか(true/false)
*
* @param キャラクター光影削除不可リージョン
* @type number
* @min 0
* @max 255
* @default 0
* @desc キャラクターの光影削除率を自動で0にするリージョンID
*
* @help AO_LightingSystem.js ver1.046
* キャラクター・イベント・アニメーション等を色調変更による塗りつぶしから
* 除外することが可能なライティングプラグインです
* RPGツクールMV ver1.6系にのみ対応です
* This plugin requires RPGMakerMV ver 1.61 or higher
*
* プラグインパラメータで"光影除外率"を100に設定したオブジェクトは
* このプラグインによる色調変更による塗りつぶしから除外されます
* デフォルトのイベントコマンド"画面の色調変化"による変更からは除外されません
*
* <プラグインの仕組み>
* 光表現用スプライト(デフォルトでスクリーン合成)と
* 影表現用スプライト(デフォルトで乗算合成)を追加します。
* どちらのスプライトも各種スプライトと重なった部分が指定の割合で透明になります
* 乗算の影レイヤーがスクリーンの光レイヤーより上に描写されます
*
* 既存のライティングプラグインと異なりライトの作製には画像を利用します
* これにより光の形を自在に設定する事が可能です
*
* 画像にもともと影が描写されている場合は、画像の影部分も影レイヤーが
* 削除されてしまいます。これは仕組み上解決できない仕様です
* 画像から影を削除する等して対応をお願いします
*
* <光スプライトの仕組み>
* 光を描写するための独自スプライトも追加されます(デフォルトで加算合成)
* 新しくライトを描写するためにはimg/lightsフォルダに光画像(png)が必要です
* 事前にimgフォルダ内にlightsフォルダを作製して画像(pngファイル)をおいて下さい
* 画像のファイル名に[行x列]と記載することで
* そのファイルを読み込んだスプライトをアニメーションさせる事が可能です
* アニメーションは必須ではありません
* デフォルトでは末尾までアニメーションが再生されると逆再生が始まりますが
* 画像ファイル名に[NR]と記載すると最初のコマに戻ります
* 例) light[3x5][NR].png
* 逆再生ループなしで3行5列のアニメーションを持つライトのファイル名
*
* <光スプライト用画像作成Tips>
* デフォルトでは光スプライトは"加算合成"です(ライトに与えるパラメータで変更可)
* 光スプライト用画像のアルファ値を参照して影を削る仕組みですから
* 真っ黒な画像を用意すれば透明な光を描く事が可能です
*
* ========= アニメーションの光影レイヤー削除の個別設定 =========
* 全てのアニメーションをレイヤーによる塗りつぶしから除外したくない場合は
* プラグインパラメータのアニメーション光影除外設定をfalseにした上で
* アニメーション名末尾に[light]と記載することで
* アニメーション毎に除外設定を適応することが可能です
* 除外の率に関してはプラグインパラメータの値が設定されます
*
* 例)"超音波"アニメーションに光影除外を設定したい場合
* アニメーションの基本設定 名前の項目を以下のように変更
* 超音波[Light]
*
* ========= メモ欄およびイベント注釈解説 =========
* <イベントライトの設定1>
* イベントの注釈に"<Light>ライト用各種パラメータ</Light>"を記載して下さい
* アクティブになっているページの注釈を読み込んでライトを生成します
* <Light>と</Light>で囲まれた部分をパラメータとして読み込みます
* lightタグ内での改行は可能ですがパラメータは省略できません
* ライト用各種パラメータは以下の順序で記載してください
* <Light>
* ファイル名(拡張子なし), アニメーションの1フレーム数, ブレンドモード(0-3),
* 影の削除率(%), X軸方向拡大率(%), Y軸方向拡大率(%)
* </Light>
*
* 例)ファイル名"TestLight[2x2][NR].png"を14フレームのアニメーション
* 不透明度は130/255、拡大率は3倍で表示
* <Light>
* TestLight[2x2][NR],14,130,300,300
* </Light>
*
* <イベントライトの設定2>
* イベントの注釈に<LightJson>ライト用各種パラメータ(Json形式で記載)</LightJson>
* と記載することでより柔軟なパラメータ設定が可能になります
* <LightJson>タグ内では必要なパラメータだけ記載する事が可能です
* 記載しなかったパラメータはデフォルト値が適応されます
* Json形式で指定できるパラメータに関してはヘルプの末尾に記載しています
*
* 例)TestLight[2x2][NR].pngを14フレームのアニメーション、不透明度150
* 拡大率5倍でイベントに表示する
* <LightJson>
* {"imageUrl":"TestLight[2x2][NR]",
* "animationWait": 14,
* "opacity":150,
* "scale":{"x":5,"y":5}}
* </LightJson>
*
* <イベント・アクターのメモ欄>
* イベントおよびアクターのメモ欄に<shadowAlphaC>と記載することで
* プラグインパラメータで指定した光影削除が設定されます
* <shadowAlphaC:光影削除率(0-100)>と記載すると、そのイベントの光影削除率を
* 設定することも可能です
* メモ欄への記載がない場合は光影削除率0として扱われます
*
* 例)イベントの光影削除率を80%に設定
* <shadowAlphaC:80>
*
* <アクター・エネミーのメモ欄>
* エネミーおよびアクターのメモ欄に<shadowAlphaB>と記載することで
* プラグインパラメータで指定した光影削除が設定されます
* <shadowAlphaB:光影削除率(0-100)>と記載すると、そのイベントの光影削除率を
* 設定することも可能です
*
* 例)エネミーの光影削除率を80%に設定
* <shadowAlphaB:80>
*
* ========= プラグインパラメータ解説 =========
* 以下のプラグインパラメータは
* 影レイヤーおよび光レイヤーの塗りつぶしから目的のスプライトが除外される率(0-100)%です
* 100%に設定すると塗りつぶしから完全に除外されます
* <キャラクター光影除外率>
* <バトラー光影除外率>
* <アニメーション光影除外率>
* <ダメージポップ光影除外率>
* <ステートアイコン光影除外率>
* <ステートオーバーレイ光影除外率>
* <サイドビュー武器光影除外率>
* <フキダシ光影除外率>
* <ライトスプライト光影除外率>
* キャラクター・イベント・フォロワー・バトラーはメモ欄に記載がある場合
* そちらの数値が優先されます
*
* バトラーとアニメーションの二つのスプライトは
* 以下のプラグインパラメータをtrueに設定することで
* 個別に除外を設定する必要がなくなり
* 全てのスプライトにプラグインパラメータで設定した除外率が適応されます
* <バトラー光影除外設定>
* <アニメーション光影除外設定>
*
* 光描写用のライトスプライトは光影除外率の他に
* スプライトの不透明度により、影レイヤーをどの程度削除するかを
* 以下のプラグインパラメータで指定可能です
* <ライトスプライト不透明度反映率>
* この値は<ライトスプライト光影除外率>と乗算される0-100の%です
* 即ち<ライトスプライト光影除外率>が100でも<ライトスプライト不透明度反映率>が0の時
* スプライトの不透明度が0であれば、光は描写されず影レイヤーは削られません
* <ライトスプライト不透明度反映率>が50であった場合は
* スプライトの不透明度が0であっても<ライトスプライト光影除外率>の50%で
* 影レイヤーが切り取られることになります
*
* 以下ののパラメータでtrueを設定することにより
* 光レイヤーはスプライトによる切り取りを行わないよう設定することが可能です
* <光レイヤー成型適応>
* trueに設定すると光レイヤーによる色調変更は
* 光影除外設定を無視してスプライト上に描写されます
*
* 光レイヤーおよび影レイヤーのブレンドモードは以下のパラメータにより
* 変更することも可能です
* <影レイヤーブレンドモード>
* <光レイヤーブレンドモード>
* 影レイヤーのブレンドモードはデフォルトでは乗算
* 光レイヤーのブレンドモードはデフォルトではスクリーンに設定されてます
*
* エネミーが戦闘不能のとき、エネミーに表示されたライトを消去したくない場合は
* 以下のパラメータをfalseに設定してください
* <エネミーライト戦闘不能同期>
*
* キャラクターが建物等の裏に移動した際に
* キャラクターの光影除外設定を解除したい場合は以下のパラメータを利用してください
* <キャラクター光影削除不可リージョン>
* このパラメータで指定したリージョンに乗ったキャラクター・イベントは
* 一時的に光影除外率が0になり影レイヤーで塗りつぶされます
*
* ========= プラグインコマンド解説 =========
* <画面の色調変化コマンド>
* AOLS_SHADOW_COLOR 赤 緑 青 アルファ フレーム数
* AOLS影色セット 赤 緑 青 アルファ フレーム数
* 影(乗算)レイヤーの色調変更
* フレーム数かけてrgba(赤緑青アルファ値)の値を影レイヤーに設定します
* 赤・緑・青は0-255の整数・アルファは0-1の小数・フレーム数は0以上の整数です
* ブレンドモードがデフォルトの場合乗算の結果画面は暗くなります
*
* 例)影レイヤー色をR:0,G:0,B:60,A:1へ360フレームで変更
* AOLS_SHADOW_COLOR 0 0 60 1 360
*
* 光(スクリーン)レイヤーの色調変更
* AOLS_LIGHT_COLOR 赤 緑 青 アルファ フレーム数
* AOLS光色セット 赤 緑 青 アルファ フレーム数
* フレーム数かけてrgba(赤緑青アルファ値)の値を光レイヤーに設定します
* 赤・緑・青は0-255の整数・アルファは0-1の小数・フレーム数は0以上の整数です
* ブレンドモードがデフォルト(スクリーン)の場合、結果画面は明るくなります
*
* 例)光レイヤーの色をR:60,G:30,B:0,A:0.9へ360フレームで変更
* AOLS光色セット 60 30 0 0.9 360
*
* <イベント・キャラクター・フォロワー・アクター・エネミーへライトを生成するコマンド>
* AOLS_MAKE_TARGET_LIGHT ターゲット番号 ファイル名 フレーム 不透明度 拡大率X 拡大率Y
* AOLSターゲットライト作製 ターゲット番号 ファイル名 フレーム 不透明度 拡大率X 拡大率Y
* ターゲット番号で指定したキャラクター・バトラーに
* ファイル名の画像光スプライトを生成します
* ターゲット番号の指定は以下に従います
* ===マップシーン===
* フォロワー: ~ -2 プレイヤー : -1 実行中のイベント : 0 指定したIDのイベント : 1 ~
* ===バトルシーン===
* バトラー: ~ -1 行動中のバトラー : 0 エネミー : 1 ~
* ファイル名はimg/lightsフォルダ内の拡張子無しpngファイル名です
* フレームはファイル名でアニメーションさせる場合の
* 1コマのフレーム数(0以上の整数値)です
* 不透明度は0-255の整数値、拡大率はともに0-100の整数値です
*
* 例)一人目のフォロワーにlight[3x1].pngを光スプライトとして生成して1コマ8フレームで再生
* AOLSターゲットライト作製 light[3x1] -2 8 255 200 100
* 例)エネミー1番にlight.pngを光スプライトとして生成(画像名アニメーション無し)
* AOLS_MAKE_TARGET_LIGHT light 1 1 200 150 150
*
* <イベント・キャラクター・フォロワー・アクター・エネミーのライトを全て消すコマンド>
* AOLS_CLEAR_TARGET_LIGHTS ターゲット番号
* AOLSターゲットライト消去 ターゲット番号
*
* <イベント・キャラクター・フォロワー・アクター・エネミーのライトを一つ消すコマンド>
* AOLS_CLEAR_TARGET_LIGHT ターゲット番号 インデックス番号
* AOLSターゲットライト単独消去 ターゲット番号 インデックス番号
* インデックス番号はそのターゲットに加えた順番で0から始まります
* マイナスの値を指定することで、末尾から数える事も可能です
*
* 例)実行中イベントの一番最後に加えたライトを削除
* AOLS_CLEAR_TARGET_LIGHT 0 -1
* 例)パーティの1番目のアクターのライトを全て削除
* AOLSターゲットライト消去 -1
*
* <イベントに紐付け無しでマップにライトを生成するコマンド>
* AOLS_MAKE_MAP_LIGHT マップx座標 マップy座標 ファイル名 フレーム 不透明度 拡大率X 拡大率Y
* AOLSマップライト作製 マップx座標 マップy座標 ファイル名 フレーム 不透明度 拡大率X 拡大率Y
* マップ座標x、マップ座標yを指定して、マップにライトを生成します
* メニューの開閉ではライトは消えませんが、マップ移動をするとライトが消える仕様です
*
* 例)マップ座標8,4にlight[5x2].pngを画像としてライトを生成して14フレームで再生
* AOLSマップライト作製 8 4 light[5x2] 14 150 120 100
*
* <イベントに紐付け無しでマップに生成したライトを消去するコマンド>
* AOLS_CLEAR_MAP_LIGHTS
* AOLSマップライト消去
*
* <イベントに紐付け無しでマップに生成したライトを一つ消去するコマンド>
* AOLS_CLEAR_MAP_LIGHT インデックス番号
* AOLSマップライト単独消去 インデックス番号
* インデックス番号はイベントやキャラクターのライト消去と同じ仕様で、生成した順番で0から始まる整数です
*
* 例)最後から二番目に作製したマップライトの消去
* AOLS_CLEAR_MAP_LIGHT -2
*
* <戦闘背景にライトを生成するコマンド>
* AOLS_CREATE_BATTLEBACK_LIGHT 画面x座標 画面y座標 ファイル名 フレーム 不透明度 拡大率X 拡大率Y
* AOLSバトルバックライト作製 画面x座標 画面y座標 ファイル名 フレーム 不透明度 拡大率X 拡大率Y
* 画面上のx,y位置にファイル名のライトを生成します
* 例)画面上320,200の位置にlight.png画像を3倍に拡大してライトとして表示
* AOLS_CREATE_BATTLEBACK_LIGHT 320 200 light 1 255 300 300
*
* <戦闘背景に表示したライトを全て消すコマンド>
* AOLS_CLEAR_BATTLEBACK_LIGHTS
* AOLSバトルバックライト消去
*
* <戦闘背景に表示したライトを一つ消すコマンド>
* AOLS_CLEAR_BATTLEBACK_LIGHT インデックス番号
* AOLSバトルバックライト単独消去 インデックス番号
* インデックス番号は生成した順番で0から始まる整数です
*
* 例)戦闘背景に一番最初に生成したライトを消去
* AOLS_CLEAR_BATTLEBACK_LIGHT 0
*
* <戦闘背景へのライト生成を予約するコマンド>
* AOLS_RESERVE_BATTLEBACK_LIGHT 画面x座標 画面y座標 ファイル名 フレーム 不透明度 拡大率X 拡大率Y
* AOLSバトルバックライト予約 画面x座標 画面y座標 ファイル名 フレーム 不透明度 拡大率X 拡大率Y
* コマンドに送り込む値は<戦闘背景にライトを生成するコマンド>と同じです
* マップ画面で上記プラグインコマンドを実行しておくことで
* 戦闘に入ると同時に予約されたライトを表示します
* 例)画面上400,0の位置にlight[3x3][NR]png画像を3倍に拡大してライトとして予約
* AOLSバトルバックライト予約 400 0 light[3x3][NR] 8 0 350 100
*
* <戦闘背景へ表示するライトの予約を全て取り消すコマンド>
* AOLS_CLEAR_RESERVED_BATTLEBACK_LIGHTS
* AOLSバトルバックライト予約消去
*
* <戦闘背景へ表示するライトの予約を一つ取り消すコマンド>
* AOLS_CLEAR_RESERVED_BATTLEBACK_LIGHT インデックス番号
* AOLSバトルバックライト予約単独消去 インデックス番号
* 例)戦闘背景に最後から2番目に予約したライトの消去
* AOLSバトルバックライト予約単独消去 -2
*
* ========= 上級"Json形式でのライト生成コマンド =========
* AOLS_MAKE_TARGET_LIGHT_JSON ターゲット番号 "Json形式文字列"
* AOLSターゲットライト作製_JSON ターゲット番号 "Json形式文字列"
* AOLS_MAKE_MAP_LIGHT_JSON マップx座標 マップy座標 "Json形式文字列"
* AOLSマップライト作製_JSON マップx座標 マップy座標 "Json形式文字列"
* AOLS_CREATE_BATTLEBACK_LIGHT_JSON "Json形式文字列"
* AOLSバトルバックライト作製_JSON "Json形式文字列"
* AOLS_RESERVE_BATTLEBACK_LIGHT_JSON "Json形式文字列"
* AOLSバトルバックライト予約_JSON "Json形式文字列"
*
* ライト生成コマンド末尾に_JSONを記載したコマンドを実行することで
* Json形式文字列でパラメータを指定する形式のコマンドがあります
* Json形式文字列中に半角スペースを含んでも無視されます
* 通常のプラグインコマンドより、多くの項目が設定でき
* 必須項目はファイル名のみとなります
* 敷居は高めですが、慣れるとより短いコマンドで、詳細な設定が可能です
* Json形式で指定できるパラメータの詳細はヘルプ末尾を参照してください
* ※戦闘背景ライトをJson形式コマンドで生成する場合は
* 表示座標の指定をコマンドに送り込む代わりに、Json形式文字列内に
* 以下の"position"パラメータを記載することで行いますので
* 通常の戦闘背景ライト生成コマンドと異なる点に注意してください
* "position":{"x":画面座標x,"y":画面座標y}
*
* ========= Jsonの書式チェックに利用できるサイト =========
* https://lab.syncer.jp/Tool/JSON-Viewer/
* ※Jsonの文字列記載は"(ダブルクオーテーション)による囲みのみです!
*
* ========= Json形式で指定できる光のパラメータ =========
* ファイル名"imageUrl"以外は必須ではないので
* 必要なパラメータのみ記載してください
* スクリプトファイルのヘルプ記載直後にコピーペースト用のJson文字列を
* 記載しています
* 必要時AO_LightingSystem.jsを
* テキストエディタで開いて、コピーペーストに利用してください
*
* "imageUrl":"ファイル名(拡張子無し)" 画像のファイル名(必須)
* "animationWait":整数(0以上) アニメーションの1コマのフレーム数(デフォルト8)
* "randomFrame":true/false ファイル名アニメーションのコマを不定期に飛ばすか
*
* "flick":true/false 自動フリックアニメーションの有無
* "scaleFlick":true/false 自動フリックアニメーション中にスケールが0になる事を許可するか
* "swing":true/false 自動スイングアニメーションの有無
* "swingMaxScaleRate":小数(1以上) 自動スイングアニメーション中の最大スケール
* "followDirection":true/false キャラクタの向き変更を光に反映するか
* "screenBind":true/false 光を画面に固定するか
*
* "position":{"x":整数,"y":整数} 画面固定時の光位置
* "shift":{"x":整数,"y":整数} XY方向に何ピクセルずらして表示するか
* "blendMode":整数(0-3) 光スプライトのブレンドモード
* "opacity":整数(0-255) 光スプライトの不透明度
* "spriteAnchor":{"x":小数,"y":小数} 光スプライトアンカー位置(デフォルト0.5)
* "anchor":{"x":小数,"y":小数} ターゲットとするキャラクタに対する光位置(デフォルト0.5)
* "rotation":小数 光スプライトの回転(radian)
* "scale":{"x":小数,"y":小数} 光スプライトのスケール(デフォルト1)
*
*/