pastime/js/plugins/Keke_MenuFreeSpace.js
2026-03-15 16:45:22 -05:00

3447 lines
No EOL
166 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//=============================================================================
// Keke_MenuFreeSpace - メニュー自由欄
// バージョン: 1.1.3
//=============================================================================
// Copyright (c) 2023 ケケー
// Released under the MIT license
// http://opensource.org/licenses/mit-license.php
//=============================================================================
/*:
* @target MZ
* @plugindesc メニューに自由欄や立ち絵を追加する
* @author ケケー
* @url https://kekeelabo.com
*
* @help
* 【ver.1.1.3】
* メニューの各所に何を書いてもいい自由欄を追加する
* 具体的には以下の3つ
* ◎ステータス自由欄
* ◎ステータスヘルプ欄
* ◎一言メッセージ(UIボタンエリアの自由欄)
* さらに加えて
* ◎ステータス立ち絵
* の機能も
* 自由欄の表示内容はいくつも登録しておき、条件で切り替え可能
* ストーリー進行と共に切り替えるなど
*
* ● 使い方 ●
*
* ■【最初に】機能を試してみる
* 好きなアクターのメモ欄に
* <ステータス自由欄: プリシア>
* と記入してテストプレイ、メニューを開いてみよう
*
*
* ■【機能1】ステータスの自由欄/ヘルプ欄の表示内容を設定
*
* 手順の流れ
* [1]プラグインパラメータでテキスト登録
* [2]プラグインパラメータで自由欄パック登録
* [3]データベースのメモ欄で表示する自由欄パックを指定
*
* ▼[手順1]プラグインパラメータ → テキスト登録 で、
*  テキスト内容を作成・登録
*
* ▼[手順2]プラグインパラメータ → 自由欄パック登録 で、
*  自由欄パックを作成・登録
* ◎自由欄パックとはテキストデータの詰め合わせ
*  テキストデータを何個でも登録できる
* ◎テキストデータには「条件」を設定でき、
*  リストの上から「最初に条件を満たしたテキストデータ」が選択される
*  条件が空の場合も条件を満たしたことになる
* ◎選択されたテキストデータが実際に自由欄に表示される
*  正確には、テキストデータ内の「呼ぶテキスト」により
*  呼び出されたテキストが表示される
* ◎「呼ぶテキスト」には、
*  【1】のテキスト登録で作成したテキストのテキスト名を書く
*  するとそのテキストを呼び出せる
* ◎テキストデータのリストはふたつある
*  「自由欄テキスト」と「ヘルプテキスト」
*  その名の通り自由欄テキストの方は自由欄に表示され、
*  ヘルプテキストはヘルプ欄に表示される
* ◎なお自由欄はステータスの経験値の欄に表示される
*  当然、経験値は見れなくなるが、必要なら自由欄の中に、
*  現在の経験値: a.currentExp()
*  次のレベルまで: a.nextRequiredExp()
*  と入力することで表示可能
* ◎さらにステータス画面に表示する立ち絵を設定することも可能  
*
* ▼[手順3]データベースのメモ欄で表示する自由欄パックを指定
* ◎アクター、職業、スキル、アイテム、武器、防具、敵キャラ、ステートのメモ欄に
*  <ステータス自由欄: パック名>
* ★例)
* <ステータス自由欄: プリシア>
*  自由欄パック『プリシア』を自由欄に表示する
*
*
* ■【機能2】一言メッセージの表示内容を設定
*
* 手順の流れ
* [1]プラグインパラメータでテキスト登録
* [2]プラグインパラメータで一言メッセージ登録
*
* ▼[手順1]プラグインパラメータ → テキスト登録 で、
*  テキスト内容を作成・登録
*
* ▼[手順2]プラグインパラメータ → 一言メッセージ登録 で、
*  一言メッセージを作成・登録
* ◎一言メッセージとはUIボタンエリア欄に表示されるテキストのこと
* ◎一言メッセージ登録はテキストデータの詰め合わせ
*  テキストデータを何個でも登録できる
* ◎テキストデータには「条件」を設定でき、
*  リストの中から「条件を満たした全てのテキストデータ」が選択される
*  条件が空の場合も条件を満たしたことになる
* ◎選択されたテキストデータが順番に表示される
*  メニューを開くたびに次のテキストに変わる。最後までいったら最初に戻る
* ◎正確には、テキストデータ内の「呼ぶテキスト」により
*  呼び出されたテキストが表示される
* ◎「呼ぶテキスト」には、
*  【1】のテキスト登録で作成したテキストのテキスト名を書く
*  するとそのテキストを呼び出せる
* ◎一言メッセージの内容を変更した際には、
*  表示順を初期化することをオススメ
*  プラグインコマンド → 一言メッセージ初期化 で初期化できる
*
*
* ■【機能3】レイアウトを設定
*
* ◎ステータス自由欄のレイアウトなら、
* プラグインパラメータ → ステータス自由欄
*
* ◎ステータスヘルプ欄のレイアウトなら、
* プラグインパラメータ → ステータスヘルプ
*
* ◎一言メッセージのレイアウトなら、
* プラグインパラメータ → 一言メッセージ
*
*
* 【機能2】立ち絵のアニメーションを設定
* ◎アニメーションを登録する
* プラグインパラメータ → アニメーション登録
*  )新しい項目を追加
*  )好きな『アニメ名』を付け
*  )『アニメ時間』を好きな長さに設定
*  )『アニメ回数』は基本的に 1 でいいが、ループさせる場合は -1 に
*  ※アニメ書式1 - 変動
*   たとえば位置Xの場合、『位置X』と『→位置X』が存在する
*   これは『位置X』から『→位置X』へと変動するという意味
*   つまり『位置X』が -400、『→位置X』が 0 の場合は、
*   画面X座標 -400 から 0 に向かって移動する
*  ※アニメ書式2 - 計算記号
*   『位置X』を +100 と書いた場合
*    => 現在のX座標から +100 の位置に移動
*   『位置X』を +-100 と書いた場合
*    => 現在のX座標から -100 の位置に移動
*   『スケールX』を *2 と書いた場合
*    => X拡大率を現在の値から 2倍 にする
*   『スケールX』を /2 と書いた場合
*    => X拡大率を現在の値から 1/2倍 にする
*  ※アニメ書式2 - イージング
*    値の語尾にイージング記号を付けることでイージング可能
*   『位置X』を +100 eo と書くなど
*    ◇e - イージングインアウト。ゆっくり-速い-ゆっくり。標準はこれ
*    ◇ei -イージングイン。ゆっくり-速い
*    ◇eo - イージングアウト。速い-ゆっくり
*    ◇en - イージングなし
*    ◇tn - ターン。→←。進んで戻る
*    ◇cg - チャージ。←→→。少し戻り一気に進む。cg(**)で戻り幅 **倍
*    ◇fk - フック。→→←。一気に進んで少し戻る。fk(**)で戻り幅 **倍
*    ◇cf - チャージフック。←→→←。cg と fk の融合。cf(**)で戻り幅 **倍
*    ◇rd - ラウンド。→←←→。ぐるりと円を描く
*    ◇bk - バック。←。戻ってくる
*  ※アニメ書式3 - 実行回数
*    語尾に _2 と付けるとアニメを2回実行する。_3 なら3回
* ◎アニメーションはサンプルがいくつか入っているので、それを使ってもよい
* ◎立ち絵に適用する
*  プラグインパラメータ → 自由欄パック → 立ち絵 → 開始アニメ/表示中アニメ
*  )登録したアニメの『アニメ名』を記入
*
*
* ● 利用規約 ●
* MITライセンスのもと、自由に使ってくれて大丈夫です
*
*
*
* Add free space where you can write anything you want
* in various parts of the menu
* Specifically, the following three
* ◎ Free space in status
* ◎ help space in status
* ◎ Short message (free space in UI button area)
* In addition,
* ◎ Standing Picture in status
* Such a function is also
* You can register a number of display contents in the free space
* and switch them according to conditions.
* Switch as the story progresses, etc.
*
* ● How to use ●
*
* ■ [First] Try out the function
* In the memo field for your favorite actor, write
* <statusFreeSpace: priscia>
* and try a test play, then open the menu.
* ■ [Function 1] Set the display contents of the status free space/help space
*
* Procedure flow
* [1] TextMaking with plugin parameters
* [2] FreePackMaking with plugin parameters
* [3] Specify the text pack to be displayed in the database memo field
*
* ▼[Step 1] Plugin parameters → TextMaking,
* Create and register text content
*
* ▼[Step 2] Plugin parameters → FreePackMaking,
* Create and register free packs
* ◎ What is a free pack? An assortment of text data
* Any number of text data can be registered
* ◎ “Condition” can be set for text data,
* "The first text data that satisfies the condition" is selected
* from the top of the list.
* Even if the condition is empty, the condition is met
* ◎ The selected text data is actually displayed in the free field.
* To be exact, it depends on the "CallText" in the text data.
* The called text is displayed
* ◎ “CallText” includes
* Write the text name of the text maked in [1] text making
* Then you can call the text
* ◎ There are two lists of text data.
* "FreeSpaceText" and "HelpText"
* As the name suggests, free space text is displayed in the free space,
* Help text is displayed in the help space
* ◎ The free space is displayed in the experience value space of the status.
* Of course, you will not be able to see your experience points,
* but if you wish, you can enter them in the free space.
* Total exp: a.currentExp()
* Next level exp: a.nextRequiredExp()
* Can be displayed by entering
* ◎ You can also set the standing picture on the status.
*
* ▼[Step 3] Specify the free pack to be displayed
* in the memo field of the database
* ◎ In the memo field for actors, occupations, skills, items, weapons, armor,
* enemy characters, and states.
* <statusFreeSpace: packName>
* ★Example)
* <statusFreeSpace: pricia>
* Display the free pack "pricia" in the free space
*
*
* ■[Function 2] Set the display content of the short message
*
* Procedure flow
* [1] TextMaking with plugin parameters
* [2] ShortMessageMaking width plugin parameters
*
* ▼[Step 1] Plugin parameters → TextMaking,
* Create and register text content
*
* ▼[Step 2] Plugin parameters → ShortMessageMaking,
* Create and register a short message
* ◎ Short message is the text displayed from the UI button area column.
* ◎ Short message making is an assortment of text data
* Any number of text data can be registered
* ◎ “Conditions” can be set for text data,
* "All text data that meets the conditions" is selected from the list
* Even if the condition is empty, the condition is met
* ◎ Selected text data will be displayed in order
* The text changes to the following every time the menu is opened
* When you get to the end, go back to the beginning
* ◎ Accurately, depend on the "CallText" in the text data
* The called text is displayed
* ◎ “CallText” includes
* Write the text name of the maked text in [1] text registration
* Then you can call the text
* ◎ When changing the content of a short message,
* It is recommended to initialize the display order.
* Can be initialized with plugin command → InitShortMessage
*
*
* ■[Function 3] Set layout
*
* ◎ For the status free space layout,
* Plugin parameters → StatusFreeSpace
*
* ◎ For the layout of the status help space,
* Plugin parameters → StatusHelp
*
* ◎ For a short message layout,
* Plugin parameters → ShortMessage
*
*
* [Feature 4] setting standing picture animation
* ◎ Register animation
*  Plugin parameters → animeMaking
*  ) Add new item
*  ) Add your favorite "animeName"
*  ) Set "animeTime" to your desired length
*  ) "animeTimes" is basically 1,
*   but if you want it to loop, set it to -1
*  ※ Animation format 1 - variation
*   For example, in the case of position X,
*   there are "posX" and "→ posX"
*   This means that it fluctuates from "posX" to "→ posX"
*   In other words, if "posX" is -400 and "→ posX" is 0,
*   Move from screen X coordinate -400 to 0
*  ※ Animation format 2 - calculation symbol
*   When "posX" is written as +100
*   => Move to +100 position from current X coordinate
*   When "posX" is written as +-100
*   => Move to position -100 from current X coordinate
*   When "scaleX" is written as *2
*   => Double the X magnification from current value
*   When "scaleX" is written as /2
*   => Set the X magnification ratio to 1/2 from current value
*  ※ Animation format 2 - Easing
*   Easing is possible by adding an easing symbol to the end of the value
*   For example, write "posX" as +100eo
*   ◇e - Easing In Out. Slow-fast-slow. the standard is this
*   ◇ei - Easing in. slow-fast
*   ◇eo - Easing out. fast-slow
*   ◇en - Easing nothing.
*   ◇tn - turn. →←. willing to go back
*   ◇cg - charge. ←→→. Go back a little and move on.
*     Return width ** times with cg(**)
*   ◇fk - Hook. →→←. Go forward and back a little.
*     Return width ** times with fk(**)
*   ◇cf - Charge hook. ←→→←. Fusion of cg and fk.
*     Return width ** times with cf(**)
*   ◇rd - Round. →←←→. draw a circle around
*   ◇bk - Back. ←. Come back
*  ※ Animation format 3 - Number of times to run
*   If you add _2 to the end of the word, the animation will run twice.
*   If you add _3, it will run three times.
* ◎ There are some animation samples, so you can use them.
* ◎ apply to standing picture
*  Plug-in parameters → freePackMaking → standingPicture → openAnime/inAnime
*  ) Write the "animeName" of the registered anime
*
*
* ● Terms of Use ●
* You can use it freely under the MIT license.
*
*
*
* @param 自由欄パック登録
* @desc freePackMaking ステータス自由欄に表示するテキスト群を登録する。メモ欄から<ステータス自由欄: パック名>で呼び出せる
* @type struct<freePackMake>[]
* @default
*
* @param 自由欄パック_1
* @parent 自由欄パック登録
* @desc freePackMaking ステータス自由欄に表示するテキスト群を登録する。メモ欄から<ステータス自由欄: パック名>で呼び出せる
* @type struct<freePackMake>[]
* @default ["{\"パック名\":\"リード\",\"自由欄テキスト\":\"[\\\"{\\\\\\\"条件\\\\\\\":\\\\\\\"true\\\\\\\",\\\\\\\"呼ぶテキスト\\\\\\\":\\\\\\\"追加能力値c\\\\\\\"}\\\"]\",\"ヘルプテキスト\":\"[\\\"{\\\\\\\"条件\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"呼ぶテキスト\\\\\\\":\\\\\\\"リードh\\\\\\\"}\\\"]\",\"立ち絵\":\"[\\\"{\\\\\\\"条件\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"画像\\\\\\\":\\\\\\\"Actor1_1\\\\\\\",\\\\\\\"レイヤー\\\\\\\":\\\\\\\"上層\\\\\\\",\\\\\\\"原点X\\\\\\\":\\\\\\\"0.5\\\\\\\",\\\\\\\"原点Y\\\\\\\":\\\\\\\"0.5\\\\\\\",\\\\\\\"位置X\\\\\\\":\\\\\\\"-20\\\\\\\",\\\\\\\"位置Y\\\\\\\":\\\\\\\"20\\\\\\\",\\\\\\\"位置寄せX\\\\\\\":\\\\\\\"右寄せ\\\\\\\",\\\\\\\"位置寄せY\\\\\\\":\\\\\\\"下寄せ\\\\\\\",\\\\\\\"スケールX\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"スケールY\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"横幅\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"高さ\\\\\\\":\\\\\\\"gh\\\\\\\",\\\\\\\"回転角\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"不透明度\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー赤\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー緑\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー青\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー灰\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"開始アニメ\\\\\\\":\\\\\\\"突進1, 突進2, ぷるん\\\\\\\",\\\\\\\"表示中アニメ\\\\\\\":\\\\\\\"呼吸\\\\\\\",\\\\\\\"無効\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"{\\\\\\\"条件\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"画像\\\\\\\":\\\\\\\"Actor1_1\\\\\\\",\\\\\\\"レイヤー\\\\\\\":\\\\\\\"上層\\\\\\\",\\\\\\\"原点X\\\\\\\":\\\\\\\"0.5\\\\\\\",\\\\\\\"原点Y\\\\\\\":\\\\\\\"0.5\\\\\\\",\\\\\\\"位置X\\\\\\\":\\\\\\\"-20\\\\\\\",\\\\\\\"位置Y\\\\\\\":\\\\\\\"20\\\\\\\",\\\\\\\"位置寄せX\\\\\\\":\\\\\\\"右寄せ\\\\\\\",\\\\\\\"位置寄せY\\\\\\\":\\\\\\\"下寄せ\\\\\\\",\\\\\\\"スケールX\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"スケールY\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"横幅\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"高さ\\\\\\\":\\\\\\\"gh\\\\\\\",\\\\\\\"回転角\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"不透明度\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー赤\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー緑\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー青\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー灰\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"開始アニメ\\\\\\\":\\\\\\\"左から出る2, きめる-小\\\\\\\",\\\\\\\"表示中アニメ\\\\\\\":\\\\\\\"呼吸\\\\\\\",\\\\\\\"無効\\\\\\\":\\\\\\\"\\\\\\\"}\\\"]\"}","{\"パック名\":\"プリシア\",\"自由欄テキスト\":\"[\\\"{\\\\\\\"条件\\\\\\\":\\\\\\\"true\\\\\\\",\\\\\\\"呼ぶテキスト\\\\\\\":\\\\\\\"追加能力値c\\\\\\\"}\\\"]\",\"ヘルプテキスト\":\"[\\\"{\\\\\\\"条件\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"呼ぶテキスト\\\\\\\":\\\\\\\"プリシアh\\\\\\\"}\\\"]\",\"立ち絵\":\"[\\\"{\\\\\\\"条件\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"画像\\\\\\\":\\\\\\\"Actor1_2\\\\\\\",\\\\\\\"レイヤー\\\\\\\":\\\\\\\"上層\\\\\\\",\\\\\\\"原点X\\\\\\\":\\\\\\\"0.5\\\\\\\",\\\\\\\"原点Y\\\\\\\":\\\\\\\"0.5\\\\\\\",\\\\\\\"位置X\\\\\\\":\\\\\\\"-100\\\\\\\",\\\\\\\"位置Y\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"位置寄せX\\\\\\\":\\\\\\\"右寄せ\\\\\\\",\\\\\\\"位置寄せY\\\\\\\":\\\\\\\"下寄せ\\\\\\\",\\\\\\\"スケールX\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"スケールY\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"横幅\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"高さ\\\\\\\":\\\\\\\"gh\\\\\\\",\\\\\\\"回転角\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"不透明度\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー赤\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー緑\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー青\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー灰\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"開始アニメ\\\\\\\":\\\\\\\"手前から出る2, ぷるん-微\\\\\\\",\\\\\\\"表示中アニメ\\\\\\\":\\\\\\\"呼吸\\\\\\\",\\\\\\\"無効\\\\\\\":\\\\\\\"\\\\\\\"}\\\"]\"}","{\"パック名\":\"ゲイル\",\"自由欄テキスト\":\"[\\\"{\\\\\\\"条件\\\\\\\":\\\\\\\"true\\\\\\\",\\\\\\\"呼ぶテキスト\\\\\\\":\\\\\\\"追加能力値c\\\\\\\"}\\\"]\",\"ヘルプテキスト\":\"[\\\"{\\\\\\\"条件\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"呼ぶテキスト\\\\\\\":\\\\\\\"ゲイルh\\\\\\\"}\\\"]\",\"立ち絵\":\"[\\\"{\\\\\\\"条件\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"画像\\\\\\\":\\\\\\\"Actor1_3\\\\\\\",\\\\\\\"レイヤー\\\\\\\":\\\\\\\"上層\\\\\\\",\\\\\\\"原点X\\\\\\\":\\\\\\\"0.5\\\\\\\",\\\\\\\"原点Y\\\\\\\":\\\\\\\"0.5\\\\\\\",\\\\\\\"位置X\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"位置Y\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"位置寄せX\\\\\\\":\\\\\\\"右寄せ\\\\\\\",\\\\\\\"位置寄せY\\\\\\\":\\\\\\\"下寄せ\\\\\\\",\\\\\\\"スケールX\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"スケールY\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"横幅\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"高さ\\\\\\\":\\\\\\\"gh\\\\\\\",\\\\\\\"回転角\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"不透明度\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー赤\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー緑\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー青\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー灰\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"開始アニメ\\\\\\\":\\\\\\\"分身1, 分身2, 分身3\\\\\\\",\\\\\\\"表示中アニメ\\\\\\\":\\\\\\\"呼吸\\\\\\\",\\\\\\\"無効\\\\\\\":\\\\\\\"\\\\\\\"}\\\"]\"}","{\"パック名\":\"アルベール\",\"自由欄テキスト\":\"[\\\"{\\\\\\\"条件\\\\\\\":\\\\\\\"true\\\\\\\",\\\\\\\"呼ぶテキスト\\\\\\\":\\\\\\\"追加能力値c\\\\\\\"}\\\"]\",\"ヘルプテキスト\":\"[\\\"{\\\\\\\"条件\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"呼ぶテキスト\\\\\\\":\\\\\\\"アルベールh\\\\\\\"}\\\"]\",\"立ち絵\":\"[\\\"{\\\\\\\"条件\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"画像\\\\\\\":\\\\\\\"Actor1_5\\\\\\\",\\\\\\\"レイヤー\\\\\\\":\\\\\\\"上層\\\\\\\",\\\\\\\"原点X\\\\\\\":\\\\\\\"0.5\\\\\\\",\\\\\\\"原点Y\\\\\\\":\\\\\\\"0.5\\\\\\\",\\\\\\\"位置X\\\\\\\":\\\\\\\"-30\\\\\\\",\\\\\\\"位置Y\\\\\\\":\\\\\\\"10\\\\\\\",\\\\\\\"位置寄せX\\\\\\\":\\\\\\\"右寄せ\\\\\\\",\\\\\\\"位置寄せY\\\\\\\":\\\\\\\"下寄せ\\\\\\\",\\\\\\\"スケールX\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"スケールY\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"横幅\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"高さ\\\\\\\":\\\\\\\"gh\\\\\\\",\\\\\\\"回転角\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"不透明度\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー赤\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー緑\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー青\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー灰\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"開始アニメ\\\\\\\":\\\\\\\"左から出る, フラッシュ\\\\\\\",\\\\\\\"表示中アニメ\\\\\\\":\\\\\\\"呼吸\\\\\\\",\\\\\\\"無効\\\\\\\":\\\\\\\"\\\\\\\"}\\\"]\"}","{\"パック名\":\"priscia\",\"自由欄テキスト\":\"[\\\"{\\\\\\\"条件\\\\\\\":\\\\\\\"true\\\\\\\",\\\\\\\"呼ぶテキスト\\\\\\\":\\\\\\\"追加能力値c\\\\\\\"}\\\"]\",\"ヘルプテキスト\":\"[\\\"{\\\\\\\"条件\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"呼ぶテキスト\\\\\\\":\\\\\\\"プリシアh\\\\\\\"}\\\"]\",\"立ち絵\":\"[\\\"{\\\\\\\"条件\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"画像\\\\\\\":\\\\\\\"Actor1_2\\\\\\\",\\\\\\\"レイヤー\\\\\\\":\\\\\\\"上層\\\\\\\",\\\\\\\"原点X\\\\\\\":\\\\\\\"0.5\\\\\\\",\\\\\\\"原点Y\\\\\\\":\\\\\\\"0.5\\\\\\\",\\\\\\\"位置X\\\\\\\":\\\\\\\"-100\\\\\\\",\\\\\\\"位置Y\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"位置寄せX\\\\\\\":\\\\\\\"右寄せ\\\\\\\",\\\\\\\"位置寄せY\\\\\\\":\\\\\\\"下寄せ\\\\\\\",\\\\\\\"スケールX\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"スケールY\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"横幅\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"高さ\\\\\\\":\\\\\\\"gh\\\\\\\",\\\\\\\"回転角\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"不透明度\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー赤\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー緑\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー青\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"カラー灰\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"開始アニメ\\\\\\\":\\\\\\\"手前から出る2, ぷるん\\\\\\\",\\\\\\\"表示中アニメ\\\\\\\":\\\\\\\"呼吸\\\\\\\",\\\\\\\"無効\\\\\\\":\\\\\\\"\\\\\\\"}\\\"]\"}"]
*
* @param 自由欄パック_2
* @parent 自由欄パック登録
* @desc freePackMaking ステータス自由欄に表示するテキスト群を登録する。メモ欄から<ステータス自由欄: パック名>で呼び出せる
* @type struct<freePackMake>[]
* @default
*
* @param 自由欄パック_3
* @parent 自由欄パック登録
* @desc freePackMaking ステータス自由欄に表示するテキスト群を登録する。メモ欄から<ステータス自由欄: パック名>で呼び出せる
* @type struct<freePackMake>[]
* @default
*
* @param 自由欄パック_4
* @parent 自由欄パック登録
* @desc freePackMaking ステータス自由欄に表示するテキスト群を登録する。メモ欄から<ステータス自由欄: パック名>で呼び出せる
* @type struct<freePackMake>[]
* @default
*
* @param 自由欄パック_5
* @parent 自由欄パック登録
* @desc freePackMaking ステータス自由欄に表示するテキスト群を登録する。メモ欄から<ステータス自由欄: パック名>で呼び出せる
* @type struct<freePackMake>[]
* @default
*
* @param 一言メッセージ登録
* @desc shortMessageMaking UIボタンエリアに表示される一言メッセージを登録する。条件を満たした物が順に表示される
* @type struct<textData>[]
* @default
*
* @param 一言メッセージ_1
* @parent 一言メッセージ登録
* @desc shortMessageMaking UIボタンエリアに表示される一言メッセージを登録する。条件を満たした物が順に表示される
* @type struct<textData>[]
* @default ["{\"呼ぶテキスト\":\"サンプル/一言_1\",\"条件\":\"\"}","{\"呼ぶテキスト\":\"サンプル/一言_2\",\"条件\":\"\"}","{\"呼ぶテキスト\":\"サンプル/一言_3\",\"条件\":\"\"}"]
*
* @param 一言メッセージ_2
* @parent 一言メッセージ登録
* @desc shortMessageMaking UIボタンエリアに表示される一言メッセージを登録する。条件を満たした物が順に表示される
* @type struct<textData>[]
* @default
*
* @param 一言メッセージ_3
* @parent 一言メッセージ登録
* @desc shortMessageMaking UIボタンエリアに表示される一言メッセージを登録する。条件を満たした物が順に表示される
* @type struct<textData>[]
* @default
*
* @param 一言メッセージ_4
* @parent 一言メッセージ登録
* @desc shortMessageMaking UIボタンエリアに表示される一言メッセージを登録する。条件を満たした物が順に表示される
* @type struct<textData>[]
* @default
*
* @param 一言メッセージ_5
* @parent 一言メッセージ登録
* @desc shortMessageMaking UIボタンエリアに表示される一言メッセージを登録する。条件を満たした物が順に表示される
* @type struct<textData>[]
* @default
*
* @param テキスト登録
* @desc textMaking テキスト内容を登録する。自由欄パック登録/一言メッセージ登録の「呼び出すテキスト」から呼び出せる
* @type struct<textMake>[]
* @default
*
* @param テキスト_1
* @parent テキスト登録
* @desc textMaking テキスト内容を登録する。自由欄パック登録/一言メッセージ登録の「呼び出すテキスト」から呼び出せる
* @type struct<textMake>[]
* @default ["{\"テキスト名\":\"◆自由欄\",\"テキスト\":\"\"}","{\"テキスト名\":\"追加能力値c\",\"テキスト\":\"\\\\c[16]合計経験値:\\\\cl \\\\sc[a.currentExp()]\\\\c[16] \\\\c[16]次レベルまで:\\\\cl \\\\sc[a.nextRequiredExp()]\\n\\\\c[16]命中率:\\\\cl \\\\sc[a.hit*100]% \\\\c[16]回避率:\\\\cl \\\\sc[a.eva*100]%\\n\\\\c[16]会心率:\\\\cl \\\\sc[a.cri*100]% \\\\c[16]狙われ率:\\\\cl \\\\sc[a.tgr*100]%\\n\\\\c[16]反撃率:\\\\cl \\\\sc[a.cnt*100]% \\\\c[16]魔法反射率:\\\\cl \\\\sc[a.mrf*100]%\\n\\\\c[16]HP再生率:\\\\cl \\\\sc[a.hrg*100]% \\\\c[16]MP再生率:\\\\cl \\\\sc[a.mrg*100]%\"}","{\"テキスト名\":\"追加能力値\",\"テキスト\":\"\\\\c[16]合計経験値:\\\\cl \\\\sc[a.currentExp()]\\\\c[16] \\\\c[16]次レベルまで:\\\\cl \\\\sc[a.nextRequiredExp()]\\n\\\\c[16]命中率:\\\\cl \\\\sc[a.hit*100]% \\\\c[16]回避率:\\\\cl \\\\sc[a.eva*100]%\\n\\\\c[16]会心率:\\\\cl \\\\sc[a.cri*100]% \\\\c[16]会心回避率:\\\\cl \\\\sc[a.cev*100]%\\n\\\\c[16]魔法回避率:\\\\cl \\\\sc[a.mev*100]% \\\\c[16]魔法反射率:\\\\cl \\\\sc[a.mrf*100]%\\n\\\\c[16]反撃率:\\\\cl \\\\sc[a.cnt*100]% \\\\c[16]HP再生率:\\\\cl \\\\sc[a.hrg*100]%\\n\\\\c[16]MP再生率:\\\\cl \\\\sc[a.mrg*100]% \\\\c[16]TP再生率:\\\\cl \\\\sc[a.trg*100]%\\n\\\\c[16]防御効果率:\\\\cl \\\\sc[a.grd*100]% \\\\c[16]回復効果率:\\\\cl \\\\sc[a.rec*100]%\\n\\\\c[16]狙われ率:\\\\cl \\\\sc[a.tgr*100]% \\\\c[16]MP消費率:\\\\cl \\\\sc[a.mcr*100]%\"}"]
*
* @param テキスト_2
* @parent テキスト登録
* @desc textMaking テキスト内容を登録する。自由欄パック登録/一言メッセージ登録の「呼び出すテキスト」から呼び出せる
* @type struct<textMake>[]
* @default ["{\"テキスト名\":\"◆ヘルプ欄\",\"テキスト\":\"\"}","{\"テキスト名\":\"リードh\",\"テキスト\":\"\\\\c[16]名前:\\\\cl リード・エムゼット \\\\c[16]年齢:\\\\cl 18歳 \\\\c[16]身長:\\\\cl 175cm \\\\c[16]体重:\\\\cl 70kg\\n\\\\c[16]好きなもの:\\\\cl 倒しがいある強敵 \\\\c[16]嫌いなもの:\\\\cl 雑魚\\nツクールMZの男主人公枠。けっこう童顔気味なのが好みが分かれるとこかもしれない\\n\\n\"}","{\"テキスト名\":\"プリシアh\",\"テキスト\":\"\\\\c[16]名前:\\\\cl プリシア・ギガヒロイン \\\\c[16]年齢:\\\\cl 18歳 \\\\c[16]身長:\\\\cl 165cm \\\\c[16]体重:\\\\cl 60kg\\n\\\\c[16]好きなもの:\\\\cl あたしを輝かせる適度に強い悪者 \\\\c[16]嫌いなもの:\\\\cl あたしより可愛い女\\nツクールMZの女主人公枠。ケタ外れの正統派ヒロイン力で他のキャラを圧倒する\\n\\n\"}","{\"テキスト名\":\"ゲイルh\",\"テキスト\":\"\\\\c[16]名前:\\\\cl ゲイル・チピン \\\\c[16]年齢:\\\\cl 33歳 \\\\c[16]身長:\\\\cl 168cm \\\\c[16]体重:\\\\cl 67kg\\n\\\\c[16]好きなもの:\\\\cl 下克上 \\\\c[16]嫌いなもの:\\\\cl 主人公的存在\\nツクールMZのチンピラ枠。何だか脇役としての出番の方が多い気がしてならない\\n\\n\"}","{\"テキスト名\":\"アルベールh\",\"テキスト\":\"\\\\c[16]名前:\\\\cl アルベール・ケメーン \\\\c[16]年齢:\\\\cl 25歳 \\\\c[16]身長:\\\\cl 180cm \\\\c[16]体重:\\\\cl 75kg\\n\\\\c[16]好きなもの:\\\\cl ルッキズム \\\\c[16]嫌いなもの:\\\\cl 実力主義\\nツクールMZのイケメン枠。二枚目から残念なイケメンまでその役者の幅は広い\\n\\n\"}"]
*
* @param テキスト_3
* @parent テキスト登録
* @desc textMaking テキスト内容を登録する。自由欄パック登録/一言メッセージ登録の「呼び出すテキスト」から呼び出せる
* @type struct<textMake>[]
* @default ["{\"テキスト名\":\"◆一言\",\"テキスト\":\"\"}","{\"テキスト名\":\"サンプル/一言_1\",\"テキスト\":\"ケケーラボの他のプラグインもよろしくね\"}","{\"テキスト名\":\"サンプル/一言_2\",\"テキスト\":\"メニュースキン、メニュー快適化、メニュー自由欄の3つのプラグインで\"}","{\"テキスト名\":\"サンプル/一言_3\",\"テキスト\":\"メニュー画面を見た目も機能も大幅パワーアップだ!!\"}"]
*
* @param テキスト_4
* @parent テキスト登録
* @desc textMaking テキスト内容を登録する。自由欄パック登録/一言メッセージ登録の「呼び出すテキスト」から呼び出せる
* @type struct<textMake>[]
* @default
*
* @param テキスト_5
* @parent テキスト登録
* @desc textMaking テキスト内容を登録する。自由欄パック登録/一言メッセージ登録の「呼び出すテキスト」から呼び出せる
* @type struct<textMake>[]
* @default
*
* @param テキスト_6
* @parent テキスト登録
* @desc textMaking テキスト内容を登録する。自由欄パック登録/一言メッセージ登録の「呼び出すテキスト」から呼び出せる
* @type struct<textMake>[]
* @default
*
* @param テキスト_7
* @parent テキスト登録
* @desc textMaking テキスト内容を登録する。自由欄パック登録/一言メッセージ登録の「呼び出すテキスト」から呼び出せる
* @type struct<textMake>[]
* @default
*
* @param テキスト_8
* @parent テキスト登録
* @desc textMaking テキスト内容を登録する。自由欄パック登録/一言メッセージ登録の「呼び出すテキスト」から呼び出せる
* @type struct<textMake>[]
* @default
*
* @param その他登録
*
* @param アニメーション登録
* @parent その他登録
* @desc animationMaking アニメーションを登録する。自由欄パック→立ち絵から呼び出せる
* @type struct<animation>[]
* @default ["{\"アニメ名\":\"■移動系\",\"アニメ時間\":\"0\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"\",\"→スケールY\":\"\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"上から出る\",\"アニメ時間\":\"20\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"-gh\",\"→位置X\":\"\",\"→位置Y\":\"0\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"\",\"→スケールY\":\"\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"上から出る2\",\"アニメ時間\":\"20\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"-gh\",\"→位置X\":\"→50 rd _2\",\"→位置Y\":\"0\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"\",\"→スケールY\":\"\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"下から出る\",\"アニメ時間\":\"30\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"gh\",\"→位置X\":\"\",\"→位置Y\":\"0\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"\",\"→スケールY\":\"\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"下から出る2\",\"アニメ時間\":\"30\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"gh\",\"→位置X\":\"→50 rd _2\",\"→位置Y\":\"0\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"\",\"→スケールY\":\"\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"左から出る\",\"アニメ時間\":\"20\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"-gw\",\"位置Y\":\"\",\"→位置X\":\"0\",\"→位置Y\":\"\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"\",\"→スケールY\":\"\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"左から出る2\",\"アニメ時間\":\"20\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"-gw\",\"位置Y\":\"\",\"→位置X\":\"0 e\",\"→位置Y\":\"100 tn\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"\",\"→スケールY\":\"\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"0\",\"→不透明度\":\"255 e\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"右から出る\",\"アニメ時間\":\"20\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"gw\",\"位置Y\":\"\",\"→位置X\":\"0\",\"→位置Y\":\"\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"\",\"→スケールY\":\"\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"右から出る2\",\"アニメ時間\":\"20\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"gw\",\"位置Y\":\"\",\"→位置X\":\"0 e\",\"→位置Y\":\"100 tn\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"\",\"→スケールY\":\"\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"0\",\"→不透明度\":\"255 e\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"手前から出る\",\"アニメ時間\":\"30\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"\",\"スケールX\":\"3\",\"スケールY\":\"3\",\"→スケールX\":\"1 ei\",\"→スケールY\":\"1 ei\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"手前から出る2\",\"アニメ時間\":\"30\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"true\",\"ディレイ\":\"15\",\"位置X\":\"\",\"位置Y\":\"200\",\"→位置X\":\"→100 tn\",\"→位置Y\":\"0\",\"スケールX\":\"2\",\"スケールY\":\"2\",\"→スケールX\":\"1 ei\",\"→スケールY\":\"1 ei\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"奥から出る\",\"アニメ時間\":\"30\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"\",\"スケールX\":\"0\",\"スケールY\":\"0\",\"→スケールX\":\"1 ei\",\"→スケールY\":\"1 ei\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"0\",\"→不透明度\":\"255\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"奥から出る2\",\"アニメ時間\":\"30\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"→100 rd\",\"→位置Y\":\"↑100 rd\",\"スケールX\":\"0\",\"スケールY\":\"0\",\"→スケールX\":\"1 ei\",\"→スケールY\":\"1 ei\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"0\",\"→不透明度\":\"255\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"■動き系\",\"アニメ時間\":\"0\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"\",\"→スケールY\":\"\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"ぴょこん\",\"アニメ時間\":\"20\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"↑100 tn\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"*1.1 tn\",\"→スケールY\":\"*1.1 rd\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"ぴょこん-中\",\"アニメ時間\":\"20\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"↑25 tn\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"*1.05 tn\",\"→スケールY\":\"*1.05 rd\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"ぴょこん-小\",\"アニメ時間\":\"20\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"↑25 tn\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"*1.025 tn\",\"→スケールY\":\"*1.025 rd\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"ぴょこん-微\",\"アニメ時間\":\"20\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"↑12 tn\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"*1.0125 tn\",\"→スケールY\":\"*1.0125 rd\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"ぷるん\",\"アニメ時間\":\"20\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"*1.05 tn\",\"→スケールY\":\"*1.05 rd\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"ぷるん-中\",\"アニメ時間\":\"30\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"*1.05 tn\",\"→スケールY\":\"*1.05 rd\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"ぷるん-小\",\"アニメ時間\":\"30\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"*1.025 tn\",\"→スケールY\":\"*1.025 rd\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"ぷるん-微\",\"アニメ時間\":\"30\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"*1.0125 tn\",\"→スケールY\":\"*1.0125 rd\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"きめる\",\"アニメ時間\":\"20\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"20 tn\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"*0.9 tn\",\"→スケールY\":\"*0.9 rd\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"きめる-中\",\"アニメ時間\":\"20\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"10 tn\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"*0.95 tn\",\"→スケールY\":\"*0.95 rd\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"きめる-小\",\"アニメ時間\":\"20\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"*0.975 tn\",\"→スケールY\":\"*0.975 rd\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"きめる-微\",\"アニメ時間\":\"20\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"*0.9875 tn\",\"→スケールY\":\"*0.9875 rd\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"■変化系\",\"アニメ時間\":\"0\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"\",\"→スケールY\":\"\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"フェードイン\",\"アニメ時間\":\"30\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"\",\"→スケールY\":\"\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"0\",\"→不透明度\":\"255\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"フラッシュ\",\"アニメ時間\":\"30\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"*1.02 tn\",\"→スケールY\":\"*1.02 rd\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"64\",\"カラー緑\":\"64\",\"カラー青\":\"64\",\"カラー灰\":\"\",\"→カラー赤\":\"0 ei\",\"→カラー緑\":\"0 ei\",\"→カラー青\":\"0 ei\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"■複合系\",\"アニメ時間\":\"0\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"\",\"→スケールY\":\"\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"突進1\",\"アニメ時間\":\"30\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"→100 rd\",\"→位置Y\":\"↓100 tn\",\"スケールX\":\"0\",\"スケールY\":\"0\",\"→スケールX\":\"2 ei\",\"→スケールY\":\"2 ei\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"突進2\",\"アニメ時間\":\"20\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"true\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"↑ 100 tn\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"1 eo\",\"→スケールY\":\"1 eo\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"64\",\"カラー緑\":\"64\",\"カラー青\":\"64\",\"カラー灰\":\"\",\"→カラー赤\":\"0 ei\",\"→カラー緑\":\"0 ei\",\"→カラー青\":\"0 ei\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"分身1\",\"アニメ時間\":\"15\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"-gw\",\"位置Y\":\"\",\"→位置X\":\"→gw\",\"→位置Y\":\"\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"\",\"→スケールY\":\"\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"128\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"分身2\",\"アニメ時間\":\"15\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"gw\",\"位置Y\":\"\",\"→位置X\":\"←gw\",\"→位置Y\":\"\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"\",\"→スケールY\":\"\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"128\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"分身3\",\"アニメ時間\":\"15\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"\",\"スケールX\":\"3\",\"スケールY\":\"3\",\"→スケールX\":\"1 ei\",\"→スケールY\":\"1 ei\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"0\",\"→不透明度\":\"255\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"■呼吸系\",\"アニメ時間\":\"0\",\"アニメ回数\":\"1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"\",\"→スケールY\":\"\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}","{\"アニメ名\":\"呼吸\",\"アニメ時間\":\"120\",\"アニメ回数\":\"-1\",\"ノーウェイト\":\"\",\"ディレイ\":\"\",\"位置X\":\"\",\"位置Y\":\"\",\"→位置X\":\"\",\"→位置Y\":\"\",\"スケールX\":\"\",\"スケールY\":\"\",\"→スケールX\":\"*1.005 rd\",\"→スケールY\":\"*0.9975 tn\",\"回転角\":\"\",\"→回転角\":\"\",\"不透明度\":\"\",\"→不透明度\":\"\",\"カラー赤\":\"\",\"カラー緑\":\"\",\"カラー青\":\"\",\"カラー灰\":\"\",\"→カラー赤\":\"\",\"→カラー緑\":\"\",\"→カラー青\":\"\",\"→カラー灰\":\"\"}"]
*
* @param レイアウト設定
*
* @param ステータス自由欄
* @parent レイアウト設定
* @desc statsuFreeSpace_layout ステータス自由欄のレイアウト設定
* @type struct<layoutFreeSpaceStatus>
* @default {"位置X":"392","位置Y":"-10","文字サイズ":"18","文字縁取り幅":"5","文字色":"","バック":"","バック表示":"false","バック色":"0, 0, 0, 0.3","バック丸み":"20","バック余白X":"0","バック余白Y":"0"}
*
* @param ステータスヘルプ
* @parent レイアウト設定
* @desc statsuHelp_layout ステータスヘルプ欄のレイアウト設定
* @type struct<layoutStatusHelp>
* @default {"位置X":"0","位置Y":"-8","文字サイズ":"20","文字縁取り幅":"5","文字色":"","バック":"","バック表示":"false","バック色":"0, 0, 0, 0.3","バック丸み":"20","バック余白X":"0","バック余白Y":"0"}
*
* @param 一言メッセージ
* @parent レイアウト設定
* @desc shortMessage_layout 一言メッセージのレイアウト設定
* @type struct<layoutShortMessage>
* @default {"位置X":"0","位置Y":"-4","文字サイズ":"26","文字縁取り幅":"6","文字色":"","表示しないシーン":"[\"Options\",\"GameEnd\"]","メインメニューのみ":"false","表示順":"リスト順","UIボタンエリア高さ":"52","行間":"4","バック":"","バック表示":"false","バック色":"0, 0, 0, 0.3","バック丸み":"20","バック余白X":"0","バック余白Y":"0"}
*
*
*
* @command 一言メッセージ初期化
* @desc initShortMessage 一言メッセージの表示順を最初に戻す
*
* @arg
* @desc
* @default
*/
//==================================================
/*~struct~freePackMake:
//==================================================
* @param パック名
* @desc packName 自由欄パックの名前。メモ欄からの呼び出しに使う
*
* @param 自由欄テキスト
* @desc freeTextList ステータス画面の自由欄に表示するテキストのリスト。上から条件を満たしたものを採用する
* @type struct<textData>[]
*
* @param ヘルプテキスト
* @desc helpTextList ステータス画面のヘルプ欄に表示するテキストのリスト。上から条件を満たしたものを採用する
* @type struct<textData>[]
*
* @param 立ち絵
* @desc standingPicture ステータス画面に表示する立ち絵の設定
* @type struct<standData>[]
*/
//==================================================
/*~struct~textMake:
//==================================================
* @param テキスト名
* @desc textName テキストの名前。自由欄パックからの呼び出しに使う
*
* @param テキスト
* @desc test 表示するテキスト内容
* @type multiline_string
*/
//==================================================
/*~struct~textData:
//==================================================
* @param 条件
* @desc condition 表示する条件。javaScript式で記述。a:アクター v:変数 s:スイッチ
* @type multiline_string
*
* @param 呼ぶテキスト
* @desc callText 呼び出すテキスト。テキスト登録したテキスト名を書く
*/
//==================================================
/*~struct~freeText:
//==================================================
* @param タグ
* @desc 何を書いてもいい欄
*
* @param 条件
* @desc condition 表示する条件。javaScript式で記述。a:アクター v:変数 s:スイッチ
* @type multiline_string
*
* @param フリーテキスト
* @desc freeText 自由欄に表示するテキスト
* @type multiline_string
*/
//==================================================
/*~struct~helpText:
//==================================================
* @param タグ
* @desc 何を書いてもいい欄
*
* @param 条件
* @desc condition 表示する条件。javaScript式で記述。a:アクター v:変数 s:スイッチ
* @type multiline_string
*
* @param ヘルプテキスト
* @desc helpText ヘルプ欄に表示するテキスト
* @type multiline_string
*/
//==================================================
/*~struct~layoutFreeSpaceStatus:
//==================================================
* @param 位置X
* @desc posX ステータス自由欄の描画開始X位置。5 ならウインドウ左端から 5ピクセル。基本 392
* @default 392
*
* @param 位置Y
* @desc posY ステータス自由欄の描画開始Y位置。5 ならウインドウ上端から 5ピクセル。基本 -10
* @default -10
*
* @param 文字サイズ
* @desc fontSize ステータス自由欄の文字サイズ。空欄なら標準サイズ。+1 で標準サイズ + 1、-1 で標準サイズ - 1。基本 18
* @default 18
*
* @param 文字縁取り幅
* @desc fontOutWidth ステータス自由欄の文字縁取り幅。空欄なら標準に合わせる。基本 5
* @default 5
*
* @param 文字色
* @desc textColor ステータス自由欄の文字色。赤, 緑, 青。各0255。空欄なら標準に合わせる。基本 空欄
* @default
*
* @param バック
*
* @param バック表示
* @parent バック
* @desc ステータス自由欄に背景部分を表示する
* @type boolean
* @default true
*
* @param バック色
* @parent バック
* @desc 背景部分の色色。赤, 緑, 青, 濃度。色0255、濃度01。空欄なら標準に合わせる。基本 0, 0, 0, 0.3
* @default 0, 0, 0, 0.3
*
* @param バック丸み
* @parent バック
* @desc 背景部分の角の丸み。5 なら 5ピクセル 丸まる。基本 20
* @default 20
*
* @param バック余白X
* @parent バック
* @desc 背景部分のX方向の余白。5 なら 5ピクセル。基本 0
* @default 0
*
* @param バック余白Y
* @parent バック
* @desc 背景部分のY方向の余白。5 なら 5ピクセル。基本 0
* @default 0
*/
//==================================================
/*~struct~layoutStatusHelp:
//==================================================
* @param 位置X
* @desc posX ステータスヘルプの描画開始X位置。5 ならウインドウ左端から 5ピクセル。基本 0
* @default 0
*
* @param 位置Y
* @desc posY ステータスヘルプの描画開始Y位置。5 ならウインドウ上端から 5ピクセル。基本 -8
* @default -8
*
* @param 文字サイズ
* @desc fontSize ステータスヘルプの文字サイズ。空欄なら標準サイズ。+1 で標準サイズ + 1、-1 で標準サイズ - 1。基本 20
* @default 20
*
* @param 文字縁取り幅
* @desc fontOutWidth ステータスヘルプの文字縁取り幅。空欄なら標準に合わせる。基本 5
* @default 5
*
* @param 文字色
* @desc textColor ステータスヘルプの文字色。赤, 緑, 青。各0255。空欄なら標準に合わせる。基本 空欄
* @default
*
* @param バック
*
* @param バック表示
* @parent バック
* @desc ステータス自由欄に背景部分を表示する
* @type boolean
* @default true
*
* @param バック色
* @parent バック
* @desc 背景部分の色色。赤, 緑, 青, 濃度。色0255、濃度01。空欄なら標準に合わせる。基本 0, 0, 0, 0.3
* @default 0, 0, 0, 0.3
*
* @param バック丸み
* @parent バック
* @desc 背景部分の角の丸み。5 なら 5ピクセル 丸まる。基本 20
* @default 20
*
* @param バック余白X
* @parent バック
* @desc 背景部分のX方向の余白。5 なら 5ピクセル。基本 0
* @default 0
*
* @param バック余白Y
* @parent バック
* @desc 背景部分のY方向の余白。5 なら 5ピクセル。基本 0
* @default 0
*/
//==================================================
/*~struct~layoutShortMessage:
//==================================================
* @param 位置X
* @desc posX 一言メッセージの描画開始X位置。5 ならウインドウ左端から 5ピクセル。基本 0
* @default 0
*
* @param 位置Y
* @desc posY 一言メッセージの描画開始Y位置。5 ならウインドウ上端から 5ピクセル。基本 -4
* @default -4
*
* @param 文字サイズ
* @desc fontSize 一言メッセージの文字サイズ。空欄なら標準サイズ。+1 で標準サイズ + 1、-1 で標準サイズ - 1。基本 26
* @default 26
*
* @param 文字縁取り幅
* @desc fontOutWidth 一言メッセージの文字縁取り幅。空欄なら標準に合わせる。基本 6
* @default 6
*
* @param 文字色
* @desc textColor 一言メッセージの文字色。赤, 緑, 青。各0255。空欄なら標準に合わせる。基本 空欄
* @default
*
* @param 表示しないシーン
* @desc hideScene 一言メッセージを表示しないシーン。オプションシーンなら Options。シーン名の頭の Scene_ は不要
* @type string[]
* @default ["Options","GameEnd"]
*
* @param メインメニューのみ
* @desc showOnlyMainMenu メインメニュー画面でのみ一言メッセージを表示する。基本 false
* @type boolean
* @default false
*
* @param 表示順
* @desc shorOrder メッセージが複数ある時どのような順番で表示するか
* @type select
* @option リスト順
* @option ランダム
* @default リスト順
*
* @param UIボタンエリア高さ
* @desc uiButtonAreaHeight 一言メッセージが表示されるUIボタンエリアの高さ。50 なら 50ピクセル 基本 52
* @default 52
*
* @param 行間
* @desc lineSpace 一言メッセージが複数行にまたがる時の行間。5 なら 5ビクセル。基本 4
* @default 4
*
* @param バック
*
* @param バック表示
* @parent バック
* @desc ステータス自由欄に背景部分を表示する
* @type boolean
* @default false
*
* @param バック色
* @parent バック
* @desc 背景部分の色色。赤, 緑, 青, 濃度。色0255、濃度01。空欄なら標準に合わせる。基本 0, 0, 0, 0.3
* @default 0, 0, 0, 0.3
*
* @param バック丸み
* @parent バック
* @desc 背景部分の角の丸み。5 なら 5ピクセル 丸まる。基本 20
* @default 20
*
* @param バック余白X
* @parent バック
* @desc 背景部分のX方向の余白。5 なら 5ピクセル。基本 0
* @default 0
*
* @param バック余白Y
* @parent バック
* @desc 背景部分のY方向の余白。5 なら 5ピクセル。基本 0
* @default 0
*/
//==================================================
/*~struct~standData:
//==================================================
* @param 条件
* @desc condition 表示する条件。javaScript式で記述。a:アクター v:変数 s:スイッチ
* @type multiline_string
*
* @param 画像
* @desc picture 立ち絵に使う画像ファイル。picturesフォルダを参照する
* @type file
* @dir img/pictures
*
* @param レイヤー
* @desc layer ピクチャを表示するレイヤー。上層はウインドウより上、下層は下
* @type select
* @option 上層
* @option 下層
* @default 上層
*
* @param 原点X
* @desc originX ピクチャのX原点。01
* @default 0.5
*
* @param 原点Y
* @desc originY ピクチャのY原点。01
* @default 0.5
*
* @param 位置X
* @desc posX 立ち絵の左端のX位置。5 ならウインドウ左端から 5ピクセル
* @default
*
* @param 位置Y
* @desc posY 立ち絵の上端のY位置。5 ならウインドウ上端から 5ピクセル
* @default
*
* @param 位置寄せX
* @desc alignX 横方向の位置を画面左寄せか、画面中央寄せか、画面右寄せにする
* @type select
* @option 寄せない
* @option 左寄せ
* @option 中央寄せ
* @option 右寄せ
* @default 右寄せ
*
* @param 位置寄せY
* @desc alignY 横方向の位置を画面上寄せか、画面中央寄せか、画面下寄せにする
* @type select
* @option 寄せない
* @option 上寄せ
* @option 中央寄せ
* @option 下寄せ
* @default 下寄せ
*
* @param スケールX
* @desc scaleX 立ち絵のX拡大率。1.5 なら 1.5倍。-1 で左右反転
*
* @param スケールY
* @desc scaleY 立ち絵のY拡大率。1.5 なら 1.5倍。-1 で上下反転
*
* @param 横幅
* @desc width 立ち絵の横幅。50 なら 50ピクセル。空欄ならウインドウ幅に合わせる
*
* @param 高さ
* @desc height 立ち絵の縦高。50 なら 50ピクセル。空欄ならウインドウ幅に合わせる
* @default gh
*
* @param 回転角
* @desc spin 立ち絵の回転角。0〜360度。90 で右に 90度、-90 で左に 90度
*
* @param 不透明度
* @desc opacity 立ち絵の不透明度。0〜255。値を増すほど濃くなる
*
* @param カラー赤
* @desc colorRed 立ち絵の赤み。-255〜255
*
* @param カラー緑
* @desc colorGreen 立ち絵の緑み。-255〜255
*
* @param カラー青
* @desc colorBlue 立ち絵の青み。-255〜255
*
* @param カラー灰
* @desc colorGray 立ち絵の灰色み。0〜255
*
* @param 開始アニメ
* @desc startAnime シーン開始時に立ち絵に実行させるアニメ。アニメーション登録したアニメ名を書く
* @type multiline_string
* @default 下から出る
*
* @param 表示中アニメ
* @desc inAnime 立ち絵表示中に実行させるアニメ。アニメーション登録したアニメ名を書く
* @default 呼吸
*
* @param 無効
* @desc invalid 立ち絵を無効にする
* @type boolean
*/
//==================================================
/*~struct~animation:
//==================================================
* @param アニメ名
* @desc アニメーションの名前。アニメの呼び出しに使う
*
* @param アニメ時間
* @desc アニメの実行時間。5 なら 5フレーム、1s なら 1秒 かけて実行。5~10 なら 5 から 10 の間のランダム
* @default 0
*
* @param アニメ回数
* @desc アニメの実行回数。2 なら 2回 実行。-1 でループ実行
* @default 1
*
* @param ノーウェイト
* @desc アニメ終了を待たずにすぐ次のアニメを実行する
* @type boolean
*
* @param ディレイ
* @desc アニメ開始までの待ち時間。5 なら 5フレーム
*
* @param 位置X
* @desc 最初のX位置。5 で右に 5ピクセル、-5で左に 5ピクセル。演算可。gw:画面横幅
*
* @param 位置Y
* @desc 最初のY位置。5 で下に 5ピクセル、-5で上に 5ピクセル。演算可。gh:画面縦高
*
* @param →位置X
* @desc 目標とするX位置。→5 で右に 5ピクセル、←5で左に 5ピクセル
*
* @param →位置Y
* @desc 目標とするY位置。↓5 で下に 5ピクセル、↑5で上に 5ピクセル
*
* @param スケールX
* @desc 最初のX拡大率。1.5 で 1.5倍、0.5 で 0.5倍。-1 で左右反転
*
* @param スケールY
* @desc 最初のY拡大率。1.5 で 1.5倍、0.5 で 0.5倍。-1 で上下反転
*
* @param →スケールX
* @desc 目標とするX拡大率。1.5 で 1.5倍、0.5 で 0.5倍。マイナスで左右反転
*
* @param →スケールY
* @desc 目標とするY拡大率。1.5 で 1.5倍、0.5 で 0.5倍。マイナスで上下反転
*
* @param 回転角
* @desc 最初の回転角。0〜360度。90 で右に 90度、-90 で左に 90度
*
* @param →回転角
* @desc 目標とする回転角。0〜360度。90 で右に 90度、-90 で左に 90度
*
* @param 不透明度
* @desc 最初の不透明度。0〜255
*
* @param →不透明度
* @desc 目標とする不透明度。0〜255
*
* @param カラー赤
* @desc カラートーン・赤。-255〜255
*
* @param カラー緑
* @desc 最初のカラートーン・緑。-255〜255
*
* @param カラー青
* @desc 最初のカラートーン・青。-255〜255
*
* @param カラー灰
* @desc 最初のカラートーン・グレー。-255〜255
*
* @param →カラー赤
* @desc カラートーン・赤。-255〜255
*
* @param →カラー緑
* @desc 目標とするカラートーン・緑。-255〜255
*
* @param →カラー青
* @desc 目標とするカラートーン・青。-255〜255
*
* @param →カラー灰
* @desc 目標とするカラートーン・グレー。0〜255
*/
(() => {
//- プラグイン名
const pluginName = document.currentScript.src.match(/^.*\/(.*).js$/)[1];
//==================================================
//-- スプライト追加 /ベーシック
//==================================================
//- 破棄付きスプライト
function SpriteKeMnfs() {
this.initialize(...arguments);
};
SpriteKeMnfs.prototype = Object.create(Sprite.prototype);
SpriteKeMnfs.prototype.constructor = SpriteKeMnfs;
SpriteKeMnfs.prototype.destroy = function() {
if (this.bitmap && !this.bitmap._url) { this.bitmap.destroy(); }
Sprite.prototype.destroy.call(this);
};
//- 上方レイヤースプライト
function Sprite_UpperLayerKeMnfs() {
this.initialize(...arguments);
};
Sprite_UpperLayerKeMnfs.prototype = Object.create(Sprite.prototype);
Sprite_UpperLayerKeMnfs.prototype.constructor = Sprite_UpperLayerKeMnfs;
Sprite_UpperLayerKeMnfs.prototype.initialize = function(bitmap, body, padding) {
bitmap = new Bitmap(Graphics.width, Graphics.height);
Sprite.prototype.initialize.call(this, bitmap);
this._body = body;
this._padding = padding || 0;
if (body && body.constructor.name.toUpperCase().includes("EQUIP")) {
this._clientArea = new SpriteKeMnfs();
this.addChild(this._clientArea);
}
this.clear();
};
Sprite_UpperLayerKeMnfs.prototype.destroy = function() {
if (this.bitmap && !this.bitmap._url) { this.bitmap.destroy(); }
if (this._clientArea && this._clientArea.bitmap && !this._clientArea.bitmap._url) { this._clientArea.bitmap.destroy(); }
Sprite.prototype.destroy.call(this);
};
Sprite_UpperLayerKeMnfs.prototype.update = function() {
Sprite.prototype.update.call(this);
if (this._body) {
this.x = this._body.x + (Graphics.width - Graphics.boxWidth) / 2;
this.y = this._body.y + (Graphics.height - Graphics.boxHeight) / 2;
if (this._clientArea) {
this._clientArea.filters = this._body._clientArea.filters;
this._clientArea.filterArea = this._body._clientArea.filterArea;
}
}
};
Sprite_UpperLayerKeMnfs.prototype.clear = function() {
if (this.bitmap) { this.bitmap.destroy(); }
this.bitmap = new Bitmap(Graphics.width, Graphics.height);
this._onBitmapChange();
if (this._clientArea) {
if (this._clientArea.bitmap) { this._clientArea.bitmap.destroy(); }
this._clientArea.bitmap = new Bitmap(Graphics.width, Graphics.height);
this._clientArea._onBitmapChange();
}
};
//==================================================
//-- 動的関数
//==================================================
let funcs = {};
//- ニューファンク
function newFunc(str, a, v, s) {
if (!funcs[str]) {
funcs[str] = new Function("a", "v", "s", "return " + str);
return funcs[str](a, v, s);
} else {
return funcs[str](a, v, s);
}
};
//- ニューファンク-画面幅の演算
function newFunc_screenW(str) {
if (!str) { return null; }
str = str.toString();
if (!str.match(/(\d|gw|gh)/)) { return str; }
str = str.replace(/(\d)[a-z]+/gi, "$1");
str = str.replace(/[a-z]+(\d)/gi, "$1");
const gw = Graphics.width;
const gh = Graphics.height;
if (!funcs[str]) {
funcs[str] = new Function("gw", "gh", "return " + str);
return Math.round(funcs[str](gw, gh));
} else {
return Math.round(funcs[str](gw, gh));
}
};
//==================================================
//-- 文字列オート変換 /ベーシック
//==================================================
// 文字列のハッシュ化
function strToHash(str) {
if (!str || !str.length) { return {}; }
let hash = {};
const strs = JSON.parse(str);
let val = null;
let val2 = null;
for (let key in strs) {
val = strs[key];
if (!key || !val) { continue; }
val2 = strToAuto(val, key);
hash[key] = val2;
}
return hash;
};
// 文字列のリスト化
function strToList(str) {
if (!str || !str.length) { return []; }
let array = JSON.parse(str);
return array.map((val, i) => {
return strToAuto(val);
}, this);
};
// 文字列の自動処理
function strToAuto(val, key = "") {
let val2 = null;
let match = null;
let end = false;
if (!end) {
if (val[0] == "{") {
val2 = strToHash(val);
end = true;
}
}
if (!end) {
if (val[0] == "[") {
val2 = strToList(val);
end = true;
}
}
if (!end) { val = val + ","; }
if (!end) {
match = val.match(/^\s*(-?\d+,\s*-?\d+,\s*-?\d+,?\s*-?\d*\.?\d*)\s*,$/);
if (match && !val.match(/[^\d\.\-,\s]/)) {
if (key.match(/カラー|色|塗り|color|paint/i) && !key.match(/トーン|tone/i) && !key.match(/ブレンド|blend/i) && !key.match(/配色|scheme/i) && !key.match(/着色|coloring/i) && !key.match(/フラッシュ|flash/i) && !key.match(/チェンジ|change/i) && !key.match(/選択|select/i)) {
val2 = "rgba(" + match[1] + ")";
} else {
val2 = JSON.parse("[" + match[1] + "]");
}
end = true;
}
}
if (!end) {
match = val.match(/(-?\d+\.?\d*),\s*/g);
if (match && match.length >= 2 && !val.match(/[^\d\.\-,\s]/)) {
val2 = JSON.parse("[" + match.reduce((r, s) => r + s).replace(/,$/, "") + "]");
end = true;
}
}
if (!end) {
match = val.match(/^(true|false)\s*,/);
if (match) {
val2 = match[1] == "true" ? true : false;
end = true;
}
}
if (!end) {
match = val.match(/^(-?\d+\.?\d*)\s*,/);
if (match && !val.match(/[^\d\.\-,\s]/)) {
val2 = Number(match[1]); end = true;
end = true;
}
}
if (!end) {
match = val.match(/^.+,\n?.+/);
if (match) {
val2 = val.replace(/\s/g, "").split(/,|\n/).filter(v => v);
end = true;
}
}
if (!end) {
if (val[0] == "\"") { val = val.slice(1); }
val2 = val.slice(0, -1);
}
if (key.match(/アニメ|anime/i)) {
val2 = delLineBreak(val2);
}
return val2;
};
//- 改行の消去
function delLineBreak(v) {
if (typeof v == "string") { v = v.replace(/\n/g, "") }
if (Array.isArray(v)) { v = v.map(e => (typeof e == "string") ? e.replace(/\n/g, "") : e); }
return v;
}
//==================================================
//-- パラメータ受け取り
//==================================================
//- 真偽化
function toBoolean(str) {
if (!str) { return false; }
const str2 = str.toString().toLowerCase();
if (str2 == "true" || str2 == "on") { return true; }
if (str2 == "false" || str2 == "off") { return false; }
return Number(str);
};
let parameters = PluginManager.parameters(pluginName);
//- データ登録
const keke_freePackMaking = compileParameters(parameters, "自由欄パック登録", "自由欄パック_");
const keke_animeList = strToList(parameters["アニメーション登録"]);
const keke_shortMessageMaking = compileParameters(parameters, "一言メッセージ登録", "一言メッセージ_");
const keke_textMaking =compileParameters(parameters, "テキスト登録", "テキスト_");
//- レイアウト設定
const keke_freeSpaceStatus = strToHash(parameters["ステータス自由欄"]);
const keke_StatusHelp = strToHash(parameters["ステータスヘルプ"]);
const keke_shortMessage = strToHash(parameters["一言メッセージ"]);
parameters = null;
//- パラメータの合体
function compileParameters(parameters, word1, word2) {
let list = strToList(parameters[word1]);
let i = 1;
while (parameters[word2 + i]) {
const addList = strToList(parameters[word2 + i]);
list = [...list, ...addList];
i++;
}
return list
};
//==================================================
//-- プラグインコマンド
//==================================================
//- 一言メッセージ初期化
PluginManager.registerCommand(pluginName, "一言メッセージ初期化", args => {
$gameSystem._shortMessageNumberKeMnfs = 0;
});
//==================================================
//-- 共通開始
//==================================================
//- シーンステータス/アクターのリフレッシュ(処理追加)
const _Scene_Status_refreshActor = Scene_Status.prototype.refreshActor;
Scene_Status.prototype.refreshActor = function() {
_Scene_Status_refreshActor.apply(this);
const actor = this.actor();
// ステータスヘルプの表示
showStatusHelp(this, actor);
// 立ち絵の形成
createStand(this, actor);
// 上方スブライト群のチルド
childUpperSprites(this, actor);
};
//==================================================
//-- 共通更新
//==================================================
//- シーンステータス/更新(処理追加)
const _Scene_Status_update = Scene_Status.prototype.update;
Scene_Status.prototype.update = function() {
_Scene_Status_update.apply(this);
// アニメスプライトの更新
updateAnimeSprite(this);
};
//==================================================
//-- 共通終了
//==================================================
//- スプライトの破棄
function destroySprite(sprite) {
if (!sprite) { return; }
sprite.children.forEach(s => destroySprite(s));
if (sprite.bitmap && !sprite.bitmap._url) { sprite.bitmap.destroy(); }
if (sprite._texture) { sprite.destroy(); }
};
//==================================================
//-- 共通処理
//==================================================
//- ウインドウ・ステータスベース/テキスト描画(処理追加)
if (Window_StatusBase.prototype.drawText == Window_Base.prototype.drawText) {
Window_StatusBase.prototype.drawText = function(text, x, y, maxWidth, align) {
Window_Base.prototype.drawText.apply(this, arguments);
};
};
const _Window_StatusBase_drawText = Window_StatusBase.prototype.drawText;
Window_StatusBase.prototype.drawText = function(text, x, y, maxWidth, align) {
// 上方レイヤーへのテキスト描画
if (drawTextToUpperSprite(this, text, x, y, maxWidth, align)) { return; };
_Window_StatusBase_drawText.apply(this, arguments);
};
//- シーンステータス/アクターの変更(処理追加)
const _Scene_Status_onActorChange = Scene_Status.prototype.onActorChange;
Scene_Status.prototype.onActorChange = function() {
// 上方スブライトのクリア予約-全て
clearOrderUpperLayerAll(this);
// ヘルプ追加コンテンツのクリア
clearHelpContentsEx(this);
_Scene_Status_onActorChange.apply(this);
};
//- ウインドウ・ステータスベース/ペイント(処理追加)
if (Window_StatusBase.prototype.paint == Window_Selectable.prototype.paint) {
Window_StatusBase.prototype.paint = function() {
Window_Selectable.prototype.paint.call(this);
};
}
const _Window_StatusBase_paint = Window_StatusBase.prototype.paint;
Window_StatusBase.prototype.paint = function() {
// 描画前に追加スプライトをクリア
const upperSprite = this._upperSpriteKeMnfs;
if (upperSprite) {
if (upperSprite.bitmap) { upperSprite.bitmap.clear(); }
if (upperSprite._clientArea && upperSprite._clientArea.bitmap) {
upperSprite._clientArea.bitmap.clear();
}
}
const contetnsEx = this._contentsSpriteKeMnfs;
if (contetnsEx && contetnsEx.bitmap) {
contetnsEx.bitmap.clear();
}
_Window_StatusBase_paint.apply(this);
};
//==================================================
//-- 上方スブライト
//==================================================
//- ウインドウ・ステータスベース/形成(処理追加)
const _Window_StatusBase_initialize = Window_StatusBase.prototype.initialize;
Window_StatusBase.prototype.initialize = function(rect) {
_Window_StatusBase_initialize.apply(this, arguments);
// 上方スブライトの形成
createUpperSprite(this);
};
//- 上方スブライトの形成
function createUpperSprite(windo) {
const scene = SceneManager._scene;
if (scene.constructor.name != "Scene_Status") { return; }
windo._upperSpriteKeMnfs = new Sprite_UpperLayerKeMnfs(null, windo, windo._padding);
addToUpperSprites(windo._upperSpriteKeMnfs);
};
//- 上方スブライト群に追加
function addToUpperSprites(sprite) {
const scene = SceneManager._scene;
if (!scene._upperSpritesKeMnfs) { scene._upperSpritesKeMnfs = []; }
scene._upperSpritesKeMnfs.push(sprite);
};
//- 上方スブライト群のチルド
function childUpperSprites(scene) {
const upperSprites = scene._upperSpritesKeMnfs;
if (upperSprites && upperSprites.length) {
upperSprites.forEach(upperSprite => {
scene.addChild(upperSprite);
});
}
};
//- 上方スブライトのクリア予約
function clearOrderUpperLayerAll(scene) {
const upperLayers = scene._upperSpritesKeMnfs;
if (upperLayers && upperLayers.length) {
upperLayers.forEach(layer => {
layer._clearOrderKe = true;
});
}
};
//- 上方スブライトのクリア
function clearUpperSprite(windo) {
const upperSprite = windo._upperSpriteKeMnfs;
if (!upperSprite || !upperSprite._clearOrderKe) { return; }
upperSprite.clear();
upperSprite._clearOrderKe = null;
};
//- 上方スブライトへのテキスト描画
function drawTextToUpperSprite(windo, text, x, y, maxWidth, align) {
if (!windo._upperSpriteKeMnfs) { return false;}
// 上方スブライトのクリア
clearUpperSprite(windo);
const upperSprite = windo._upperSpriteKeMnfs;
const upperBitmap = upperSprite._clientArea ? upperSprite._clientArea.bitmap : upperSprite.bitmap;
// 描画位置
x += windo._padding;
y += windo._padding;
// フォント設定のコピー
copyFontSetting(upperBitmap, windo.contents);
// 描画
upperBitmap.drawText(text, x, y, maxWidth, windo.lineHeight(), align);
// テキスト描画済みフラグをセット
windo._drawedTextKeMnsk = true;
return true;
};
//- フォント設定のコピー
function copyFontSetting(bitmap, oriBitmap) {
bitmap.fontFace = oriBitmap.fontFace;
bitmap.fontSize = oriBitmap.fontSize;
bitmap.textColor = oriBitmap.textColor;
bitmap.outlineWidth = oriBitmap.outlineWidth;
bitmap.outlineColor = oriBitmap.outlineColor;
};
//- ウインドウ・ステータスベース/内部スプライトの形成(処理追加)
const _Window_StatusBase_createInnerSprite = Window_StatusBase.prototype.createInnerSprite;
Window_StatusBase.prototype.createInnerSprite = function(key, spriteClass) {
const sprite = _Window_StatusBase_createInnerSprite.apply(this, arguments);
// 上方レイヤーへのチルド
childToUpperLayer(this, sprite);
return sprite;
};
//- 上方スブライトへのチルド
function childToUpperLayer(windo, sprite) {
if (!windo._upperSpriteKeMnfs) { return; }
windo._upperSpriteKeMnfs.addChild(sprite);
};
//==================================================
//-- 追加コンテンツスプライト-ステータス
//==================================================
//- ウインドウステータス/コンテンツスプライトの形成(処理追加)
if (Window_Status.prototype._createContentsSprite == Window.prototype._createContentsSprite) {
Window_Status.prototype._createContentsSprite = function() {
Window.prototype._createContentsSprite.apply(this);
};
};
const _Window_Status_createContentsSprite = Window_Status.prototype._createContentsSprite;
Window_Status.prototype._createContentsSprite = function() {
// ステータス追加コンテンツスブライトの形成
this._contentsSpriteKeMnfs = new Sprite_UpperLayerKeMnfs(null, this, this._padding);
addToUpperSprites(this._contentsSpriteKeMnfs);
_Window_Status_createContentsSprite.apply(this);
};
//- ウインドウステータス/コンテンツの更新(処理追加)
if (Window_Status.prototype._updateContents == Window.prototype._updateContents) {
Window_Status.prototype._updateContents = function() {
Window.prototype._updateContents.apply(this);
};
};
const _Window_Status_updateContents = Window_Status.prototype._updateContents;
Window_Status.prototype._updateContents = function() {
_Window_Status_updateContents.apply(this);
// ステータス追加コンテンツの更新
const bitmap = this._contentsSpriteKeMnfs.bitmap;
if (bitmap) {
this._contentsSpriteKeMnfs.setFrame(0, 0, bitmap.width, bitmap.height);
}
};
//- ウインドウステータス/コンテンツの形成(処理追加)
if (Window_Status.prototype.createContents == Window_Base.prototype.createContents) {
Window_Status.prototype.createContents = function() {
Window_Base.prototype.createContents.apply(this);
};
};
const _Window_Status_createContents = Window_Status.prototype.createContents;
Window_Status.prototype.createContents = function() {
//Window_Base.prototype.createContents.call(this);
_Window_Status_createContents.apply(this);
//- ステータス追加コンテンツの形成
const width = Graphics.width;
const height = Graphics.height;
this._contentsSpriteKeMnfs.bitmap = new Bitmap(width, height);
};
///- ウインドウステータス/コンテンツの破棄(処理追加)
if (Window_Status.prototype.destroyContents == Window_Base.prototype.destroyContents) {
Window_Status.prototype.destroyContents = function() {
Window_Base.prototype.destroyContents.apply(this);
};
};
const _Window_Status_destroyContents = Window_Status.prototype.destroyContents;
Window_Status.prototype.destroyContents = function() {
_Window_Status_destroyContents.apply(this);
//- ステータス追加コンテンツの破棄
const contetnsEx = this._contentsSpriteKeMnfs;
if (contetnsEx && contetnsEx.bitmap) {
contetnsEx.bitmap.destroy();
}
};
//==================================================
//-- ステータス自由欄の作成
//==================================================
//- ウインドウステータス/経験値の描画(処理追加)
const _Window_Status_drawExpInfo = Window_Status.prototype.drawExpInfo;
Window_Status.prototype.drawExpInfo = function(x, y) {
// 自由欄テキストの取得
if (getFreeText(this._actor)) { return; };
_Window_Status_drawExpInfo.apply(this, arguments);
};
//- ウインドウステータス/ブロックの描画2(処理追加)
const _Window_Status_drawBlock2 = Window_Status.prototype.drawBlock2;
Window_Status.prototype.drawBlock2 = function() {
_Window_Status_drawBlock2.apply(this);
// ステータス自由欄の描画
drawFreeSpaceStatus(this, this._actor);
};
//- ステータス自由欄の描画
function drawFreeSpaceStatus(windo, actor) {
const layout = keke_freeSpaceStatus;
const fontSize = getFontSize(layout["文字サイズ"]);
const outWidth = layout["文字縁取り幅"] || windo.contents.outlineWidth;;
// 自由欄テキストの取得
const text = getFreeText(actor, fontSize);
if (!text) { return; }
// コンテンツ取得 & クリア
const contents = windo.contents;
const contentsEx = windo._contentsSpriteKeMnfs.bitmap;
contentsEx.clear();
// コンテンツを入れ替え
windo.contents = contentsEx;
// フォント設定の構築
windo._fontSettingKeMnfs = buildFontSetting(contents, { fontSize:fontSize, textColor:layout["文字色"], outWidth:outWidth });
// 描画
const padding = windo._padding;
const x = calcMulti(0, layout["位置X"])[0].val;
const y = calcMulti(0, layout["位置Y"])[0].val + padding;
const width = windo.width - x;
const height = windo.height;
// バック描画
if (layout["バック表示"]) {
const color = layout["バック色"] || "rgba(0, 0, 0, 0)";
const round = layout["バック丸み"] || 0;
const marginX = layout["バック余白X"] || 0;
const marginY = layout["バック余白Y"] || 0;
const bx = x - marginX - outWidth;
const by = padding / 2 - marginY;
fillSquare(contentsEx, bx, by, width + marginX * 2 - padding / 2 + outWidth, height + marginY * 2 - padding, color, 0, round);
}
// テキスト描画
windo.drawTextEx(text, x, y, width);
// フォント設定を消去
windo._fontSettingKeMnfs = null;
// コンテンツを戻す
windo.contents = contents;
};
//- ウインドウステータス/フォント設定のリセット(処理追加)
if (Window_Status.prototype.resetFontSettings == Window_Base.prototype.resetFontSettings) {
Window_Status.prototype.resetFontSettings = function() {
Window_Base.prototype.resetFontSettings.apply(this);
};
};
const _Window_Status_resetFontSettings = Window_Status.prototype.resetFontSettings;
Window_Status.prototype.resetFontSettings = function() {
Window_Base.prototype.resetFontSettings.call(this);
_Window_Status_resetFontSettings.apply(this);
// 構築したフォント設定を適用
if (this._fontSettingKeMnfs) {
// フォント設定の適用
applyFontSetting(this.contents, this._fontSettingKeMnfs);
}
};
//==================================================
//-- 追加コンテンツスプライト-ヘルプ
//==================================================
//- ウインドウヘルプ/コンテンツスプライトの形成(処理追加)
if (Window_Help.prototype._createContentsSprite == Window.prototype._createContentsSprite) {
Window_Help.prototype._createContentsSprite = function() {
Window.prototype._createContentsSprite.apply(this);
};
};
const _Window_Help_createContentsSprite = Window_Help.prototype._createContentsSprite;
Window_Help.prototype._createContentsSprite = function() {
// ヘルプ追加コンテンツスブライトの形成
if (SceneManager._scene.constructor.name == "Scene_Status") {
this._contentsSpriteKeMnfs = new Sprite_UpperLayerKeMnfs(null, this, this._padding);
addToUpperSprites(this._contentsSpriteKeMnfs);
}
_Window_Help_createContentsSprite.apply(this);
};
//- ウインドウヘルプ/コンテンツの更新(処理追加)
if (Window_Help.prototype._updateContents == Window.prototype._updateContents) {
Window_Help.prototype._updateContents = function() {
Window.prototype._updateContents.apply(this);
};
};
const _Window_Help_updateContents = Window_Help.prototype._updateContents;
Window_Help.prototype._updateContents = function() {
_Window_Help_updateContents.apply(this);
// ヘルプ追加コンテンツの更新
if (SceneManager._scene.constructor.name == "Scene_Status") {
const bitmap = this._contentsSpriteKeMnfs.bitmap;
if (bitmap) {
this._contentsSpriteKeMnfs.setFrame(0, 0, bitmap.width, bitmap.height);
addToUpperSprites(this._contentsSpriteKeMnfs);
}
}
};
//- ウインドウヘルプ/コンテンツの形成(処理追加)
if (Window_Help.prototype.createContents == Window_Base.prototype.createContents) {
Window_Help.prototype.createContents = function() {
Window_Base.prototype.createContents.apply(this);
};
};
const _Window_Help_createContents = Window_Help.prototype.createContents;
Window_Help.prototype.createContents = function() {
_Window_Help_createContents.apply(this);
// ヘルプ追加コンテンツの形成
if (SceneManager._scene.constructor.name == "Scene_Status") {
const width = Graphics.width;
const height = Graphics.height;
this._contentsSpriteKeMnfs.bitmap = new Bitmap(width, height);
}
};
//- ウインドウヘルプ/コンテンツの破棄(処理追加)
if (Window_Help.prototype.destroyContents == Window_Base.prototype.destroyContents) {
Window_Help.prototype.destroyContents = function() {
Window_Base.prototype.destroyContents.apply(this);
};
};
const _Window_Help_destroyContents = Window_Help.prototype.destroyContents;
Window_Help.prototype.destroyContents = function() {
_Window_Help_destroyContents.apply(this);
// ヘルプ追加コンテンツの破棄
if (SceneManager._scene.constructor.name == "Scene_Status") {
const contetnsEx = this._contentsSpriteKeMnfs;
if (contetnsEx && contetnsEx.bitmap) {
contetnsEx.bitmap.destroy();
}
}
};
//- ウインドウヘルプ/クリア(処理追加)
const _Window_Help_clear = Window_Help.prototype.clear;
Window_Help.prototype.clear = function() {
_Window_Help_clear.apply(this);
// ヘルプ追加コンテンツのクリア
clearHelpContentsEx();
};
const _Window_Help_refresh = Window_Help.prototype.refresh;
Window_Help.prototype.refresh = function() {
_Window_Help_refresh.apply(this);
// ヘルプ追加コンテンツのクリア
clearHelpContentsEx();
};
//- ヘルプ追加コンテンツのクリア
function clearHelpContentsEx(scene) {
if (!scene) { scene = SceneManager._scene; }
if (scene.constructor.name != "Scene_Status") { return; }
const helpWindow = scene._profileWindow;
if (!helpWindow) { return; }
const contentsEx = helpWindow._contentsSpriteKeMnfs;
if (!contentsEx || !contentsEx.bitmap) { return; }
contentsEx.bitmap.clear();
};
//==================================================
//-- ステータスヘルプ
//==================================================
//- ステータスヘルプの表示
function showStatusHelp(scene, actor) {
const layout = keke_StatusHelp;
const fontSize = getFontSize(layout["文字サイズ"]);
// フリーヘルプの取得
const text = getFreeHelp(actor, fontSize);
if (!text) { return; }
const windo = scene._profileWindow;
// コンテンツ取得 & クリア
const contents = windo.contents;
const contentsEx = windo._contentsSpriteKeMnfs.bitmap;
contents.clear();
contentsEx.clear();
// コンテンツを入れ替え
windo.contents = contentsEx;
// フォント設定の構築
windo._fontSettingKeMnfs = buildFontSetting(contents, { fontSize:fontSize, textColor:layout["文字色"], outWidth:layout["文字縁取り幅"]});
// 描画
const padding = windo._padding;
const x = calcMulti(0, layout["位置X"])[0].val + padding;
const y = calcMulti(0, layout["位置Y"])[0].val + padding;
const width = windo.width;
const height = windo.height;
// バック描画
if (layout["バック表示"]) {
const color = layout["バック色"] || "rgba(0, 0, 0, 0)";
const round = layout["バック丸み"] || 0;
const marginX = layout["バック余白X"] || 0;
const marginY = layout["バック余白Y"] || 0;
const bx = padding / 2 - marginX;
const by = padding / 2 - marginY;
fillSquare(contentsEx, bx, by, width + marginX * 2 - padding, height + marginY * 2 - padding, color, 0, round);
}
// テキスト描画
windo.drawTextEx(text, x, y, width);
// フォント設定を消去
windo._fontSettingKeMnfs = null;
// コンテンツを戻す
windo.contents = contents;
// テキスト描画済みフラグをセット
windo._drawedTextKeMnsk = true;
};
//- ウインドウヘルプ/フォント設定のリセット(処理追加)
if (Window_Help.prototype.resetFontSettings == Window_Base.prototype.resetFontSettings) {
Window_Help.prototype.resetFontSettings = function() {
Window_Base.prototype.resetFontSettings.apply(this);
};
};
const _Window_Help_resetFontSettings = Window_Help.prototype.resetFontSettings;
Window_Help.prototype.resetFontSettings = function() {
Window_Base.prototype.resetFontSettings.call(this);
_Window_Help_resetFontSettings.apply(this);
// 構築したフォント設定を適用
if (this._fontSettingKeMnfs) {
// フォント設定の適用
applyFontSetting(this.contents, this._fontSettingKeMnfs);
}
};
//==================================================
//-- ステータス立ち絵
//==================================================
// 立ち絵の形成
function createStand(scene, actor) {
// 前の立ち絵を消去
if (scene._standSpriteKeMnfs) {
const preSprite = scene._standSpriteKeMnfs;
scene._standSpriteKeMnfs = null;
scene.removeChild(preSprite);
preSprite.destroy();
}
// 立ち絵データの取得
const stand = getStandData(actor);
if (!stand) { return; }
if (stand["無効"]) { return; }
// ピクチャの形成
const standSprite = createPicture(stand, scene);
if (!standSprite) { return; }
// チルド
if (stand["レイヤー"] && stand["レイヤー"].includes("下")) {
const windowLayerIndex = scene.children.indexOf(scene._windowLayer);
scene.addChildAt(standSprite, windowLayerIndex - 1);
} else {
scene.addChild(standSprite);
}
// 変数にセット
scene._standSpriteKeMnfs = standSprite;
};
//==================================================
//-- ピクチャ
//==================================================
//- ピクチャの形成
function createPicture(pict, scene) {
if (!pict || !pict["画像"]) { return; }
// ビットマップ形成
const bitmap = ImageManager.loadPicture(pict["画像"]);
if (!bitmap) { return { sprite:null }; }
// スプライト形成
const sprite = new SpriteKeMnfs(bitmap);
// 原点
sprite.anchor.x = pict["原点X"] != null ? pict["原点X"] : 0.5;
sprite.anchor.y = pict["原点Y"] != null ? pict["原点Y"] : 0.5;
// 位置
sprite._posXKe = calcMulti(0, pict["位置X"])[0].val;
sprite._posYKe = calcMulti(0, pict["位置Y"])[0].val;
sprite.x = sprite._posXKe;
sprite.y = sprite._posYKe ;
// 位置寄せ
sprite._alignXKe = pict["位置寄せX"];
sprite._alignYKe = pict["位置寄せY"];
// スケール
sprite._scaleXKe = pict["スケールX"] || 1;
sprite._scaleYKe = pict["スケールY"] || 1;
// 固定幅
const fixW = newFunc_screenW(pict["横幅"]) || 0;
const fixH = newFunc_screenW(pict["高さ"]) || 0;
// 回転角
sprite._angleKe = pict["回転角"] || 0;
sprite.rotation = angleToRadian(sprite._angleKe);
// 不透明度
sprite.opacity = pict["不透明度"] || 255;
// カラートーン
const colorTone = strToColorTone(pict);
if (colorTone) { sprite.setColorTone(colorTone); }
// サイズを保存
sprite._widthKe = fixW * sprite._scaleXKe;
sprite._heightKe = fixH * sprite._scaleYKe;
// アニメ
const openAnime = pict["開始アニメ"];
const inAnime = pict["表示中アニメ"];
const animeType = "stand";
const animeDelay = pict["アニメディレイ"] || 0;
// ビットマップ読み込み待ち
bitmap.addLoadListener(() => {
// ピクチャの仕上げ
finishPicture(sprite, bitmap, fixW, fixH, scene, openAnime, inAnime, animeType, animeDelay);
        });
return sprite
};
//- ピクチャの仕上げ
function finishPicture(sprite, bitmap, fixW, fixH, scene, openAnime, inAnime, animeType, animeDelay) {
if (!sprite.transform) { sprite._breakSetupKe = true; return; }
// 親のサイズに合わせる
adjustParentSize(sprite, bitmap, fixW, fixH);
// スプライトの標準値を保存
saveSpriteOriVal(sprite);
// アニメタイプを取得
animeType = animeType ? "_" + animeType : "";
// アニメの呼び出し-開く
callAnime(sprite, scene, openAnime, "start" + animeType, animeDelay);
// アニメの呼び出し-表示中
callAnime(sprite, scene, inAnime, "ing" + animeType, animeDelay);
// セットアップ完了フラグ
sprite._isSetupedKe = true;
}
//- 親のサイズに合わせる
function adjustParentSize(sprite, bitmap, fixW, fixH) {
// サイズ合わせ
if (fixW) {
sprite.scale.x = fixW / bitmap.width * sprite._scaleXKe;
} else if (fixH) {
sprite.scale.x = fixH / bitmap.height * sprite._scaleXKe;
}
if (fixH) {
sprite.scale.y = fixH / bitmap.height * sprite._scaleYKe;
} else if (fixW) {
sprite.scale.y = fixW / bitmap.width * sprite._scaleYKe;
}
// 位置寄せX
const alignX = sprite._alignXKe;
const w = bitmap.width * Math.abs(sprite.scale.x);
if (alignX && alignX != "寄せない") {
let x = 0;
if (alignX == "左寄せ") {
const left = w * sprite.anchor.x;
x = left;
} else if (alignX == "中央寄せ") {
const center = w * (0.5 - sprite.anchor.x);
x = Graphics.width / 2 - center;
} else if (alignX === "右寄せ") {
const right = w * (1 - sprite.anchor.x);
x = Graphics.width - right;
}
sprite.x = x + sprite._posXKe;
}
// 位置寄せY
const alignY = sprite._alignYKe;
const h = bitmap.height * Math.abs(sprite.scale.y);
if (alignY && alignY != "寄せない") {
let y = 0;
if (alignY == "上寄せ") {
const up = h * sprite.anchor.y;
y = up;
} else if (alignY == "中央寄せ") {
const center = h * (0.5 - sprite.anchor.y);
y = Graphics.height / 2 - center;
} else if (alignY === "下寄せ") {
const down = h * (1 - sprite.anchor.y);
y = Graphics.height - down;
}
sprite.y = y + sprite._posYKe;
}
};
//- スプライトの標準値を保存
function saveSpriteOriVal(sprite) {
sprite._posXOriKe = sprite.x;
sprite._posYOriKe = sprite.y;
sprite._scaleXOriKe = "*" + sprite.scale.x;
sprite._scaleYOriKe = "*" + sprite.scale.y;
sprite._angleOriKe = sprite._angleKe || 0;
sprite._opacityOriKe = "*" + sprite.opacity / 255;
sprite._colorToneOriKe = sprite._colorTone.concat();
};
//==================================================
//-- 一言メッセージウインドウ
//==================================================
function Window_ShortMessageKe() {
this.initialize(...arguments);
}
Window_ShortMessageKe.prototype = Object.create(Window_Base.prototype);
Window_ShortMessageKe.prototype.constructor = Window_ShortMessageKe;
//- 初期化
Window_ShortMessageKe.prototype.initialize = function(rect, text = "") {
Window_Base.prototype.initialize.call(this, rect);
// メッセージの描画
this.drawMessage(text);
};
//- 一言追加コンテンツの形成
Window_ShortMessageKe.prototype._createContentsSprite = function() {
this._contentsSpriteKeMnfs = new SpriteKeMnfs();
if (SceneManager._scene.constructor.name == "Scene_Status") {
addToUpperSprites(this._contentsSpriteKeMnfs);
} else {
this.addChild(this._contentsSpriteKeMnfs);
}
Window.prototype._createContentsSprite.call(this);
};
//- 一言追加コンテンツの更新
Window_ShortMessageKe.prototype._updateContents = function() {
Window.prototype._updateContents.call(this);
const bitmap = this._contentsSpriteKeMnfs.bitmap;
if (bitmap) {
this._contentsSpriteKeMnfs.setFrame(0, 0, bitmap.width, bitmap.height);
}
};
//- 一言追加コンテンツの形成
Window_ShortMessageKe.prototype.createContents = function() {
Window_Base.prototype.createContents.call(this);
const width = Graphics.width;
const height = Graphics.height;
this._contentsSpriteKeMnfs.bitmap = new Bitmap(width, height);
};
//- 一言追加コンテンツの破棄
Window_ShortMessageKe.prototype.destroyContents = function() {
Window_Base.prototype.destroyContents.call(this);
const contetnsEx = this._contentsSpriteKeMnfs;
if (contetnsEx && contetnsEx.bitmap) {
contetnsEx.bitmap.destroy();
}
};
//- 一言メッセージの描画
Window_ShortMessageKe.prototype.drawMessage = function(text) {
const layout = keke_shortMessage;
let fontSize = getFontSize(layout["文字サイズ"]);
// コンテンツ取得 & クリア
const contents = this.contents;
const contentsEx = this._contentsSpriteKeMnfs.bitmap;
contents.clear();
contentsEx.clear();
// 位置
const padding = this._padding;
const isStatus = SceneManager._scene.constructor.name == "Scene_Status";
const xOffset = isStatus ? this.x + (Graphics.width - Graphics.boxWidth) / 2 : 0;
const yOffset = isStatus ? this.y + (Graphics.height - Graphics.boxHeight) / 2 : 0;
const x = calcMulti(0, layout["位置X"])[0].val + padding + xOffset;
const y = calcMulti(0, layout["位置Y"])[0].val + padding + yOffset;
const width = this.width - 12;
const height = this.height;
// 制御文字の処理
const r = this.processControlChar(text);
text = r.text;
fontSize = r.fontSize || fontSize;
textColor = r.textColor || layout["文字色"];
outWidth = r.outWidth || layout["文字縁取り幅"];
// フォント設定の構築
this._fontSettingKeMnfs = buildFontSetting(this.contents, { fontSize:fontSize, textColor:textColor, outWidth:outWidth});
// コンテンツを入れ替え
this.contents = contentsEx;
// バック描画
if (layout["バック表示"]) {
const color = layout["バック色"] || "rgba(0, 0, 0, 0)";
const round = layout["バック丸み"] || 0;
const marginX = layout["バック余白X"] || 0;
const marginY = layout["バック余白Y"] || 0;
const bx = padding / 2 - marginX;
const by = padding / 2 - marginY;
fillSquare(contentsEx, bx, by, width + marginX * 2 - padding, height + marginY * 2 - padding, color, 0, round);
}
// テキスト描画
this.resetFontSettings();
const texts = text.split(/\n|\\n/);
const lineSpace = layout["行間"] || 0;
let drawY = y;
texts.forEach(tx => {
this.drawText(tx, x, drawY, width - padding);
drawY += fontSize + lineSpace;
});
// コンテンツを戻す
this.contents = contents;
};
//- 制御文字の処理
Window_ShortMessageKe.prototype.processControlChar = function(text) {
//text = text.replace(/\n/g, "");
let fontSize = null;
let textColor = null;
let outWidth = null;
// 文字サイズ
let regExp = /\\fs\[([\d\+\-]*)\]/g;
while (true) {
const match = regExp.exec(text);
if (!match) { break; }
const str = match[0];
fontSize = getFontSize(match[1]);
const a = text.slice(0, regExp.lastIndex - str.length);
const b = text.slice(regExp.lastIndex);
text = a + b;
}
// 文字色
regExp = /\\c\[(\d*)\]/g;
while (true) {
const match = regExp.exec(text);
if (!match) { break; }
const str = match[0];
textColor = ColorManager.textColor(Number(match[1]));
const a = text.slice(0, regExp.lastIndex - str.length);
const b = text.slice(regExp.lastIndex);
text = a + b;
}
// 縁取り幅
regExp = /\\ow\[(\d*)\]/g;
while (true) {
const match = regExp.exec(text);
if (!match) { break; }
const str = match[0];
outWidth = Number(match[1]);
const a = text.slice(0, regExp.lastIndex - str.length);
const b = text.slice(regExp.lastIndex);
text = a + b;
}
return { text:text, fontSize:fontSize, textColor:textColor, outWidth:outWidth }
};
//- 構築したフォント設定を適用
Window_ShortMessageKe.prototype.resetFontSettings = function() {
Window_Base.prototype.resetFontSettings.call(this);
if (this._fontSettingKeMnfs) {
// フォント設定の適用
applyFontSetting(this.contents, this._fontSettingKeMnfs);
}
};
//- シーンベース/ボタンエリアの高さ(処理追加)
const _Scene_Base_buttonAreaHeight = Scene_Base.prototype.buttonAreaHeight;
Scene_Base.prototype.buttonAreaHeight = function() {
let h = _Scene_Base_buttonAreaHeight.apply(this);
// UIボタンエリアの高さを変更
if (isValidShortMessage(this)) {
const areaH = keke_shortMessage["UIボタンエリア高さ"];
if (areaH) {
return areaH;
}
}
return h;
};
//==================================================
//-- 一言メッセージ
//==================================================
//- シーン・メニューベース/ボタンの形成(処理追加)
const _Scene_MenuBase_createButtons = Scene_MenuBase.prototype.createButtons;
Scene_MenuBase.prototype.createButtons = function() {
_Scene_MenuBase_createButtons.apply(this);
// 一言メッセージの形成
if (isValidShortMessage(this)) {
createShortMessage(this);
}
};
//- 一言メッセージの形成
function createShortMessage(scene) {
if (!isValidShortMessage(scene)) { return; }
// キャンセルボタン/ページボタン
const cancelButton = scene._cancelButton;
const pageupButton = scene._pageupButton;
const pagedownButton = scene._pagedownButton;
// UIボタン幅
const padding = 12;
const cancelW = cancelButton ? cancelButton.width + padding : 0;
const pageW = pageupButton ? (pageupButton.width + pagedownButton.width + 8) : 0;
// ウインドウ位置/サイズ
const rect = {};
rect.x = (pageupButton ? pageW : 0);
rect.y = scene.buttonAreaTop();
rect.width = Graphics.width - cancelW - pageW;
rect.height = scene.buttonAreaHeight();
// 一言メッセージの取得
const text = getShortMessage();
if (!text) { return; }
// ウインドウ形成
this._shortMessageWindowKe = new Window_ShortMessageKe(rect, text);
// チルド
scene.addWindow(this._shortMessageWindowKe);
};
//- 一言メッセージ有効か
function isValidShortMessage(scene) {
if (isHideShortMaeeageScene(scene)) { return false; }
if (!getShortMessage()) { return false; }
return true;
};
//- 一言メッセージ表示しないシーンか
function isHideShortMaeeageScene(scene) {
// 表示しないシーン
const hideScenes = keke_shortMessage["表示しないシーン"];
if (!hideScenes || !hideScenes.length) { return false; }
const currentScene = scene.constructor.name;
for (const name of hideScenes) {
const hideScene = name.match(/^Scene_/i) ? name : "Scene_" + name;
if (currentScene == hideScene) { return true;}
};
// メインメニューのみ
if (keke_shortMessage["メインメニューのみ"]) {
if (scene.constructor.name != "Scene_Menu") { return true; }
}
return false;
};
//- 一言メッセージの取得
function getShortMessage() {
// 条件に合うメッセージを全て取得
const messages = keke_shortMessageMaking.filter(d => {
let condition = d["条件"];
if (condition == null) { return true; }
condition = (typeof condition == "string") ? condition.replace(/[\x1b\\]/g, "") : condition;
return newFunc(condition, {}, $gameVariables._data, $gameSwitches._data);
});
if (!messages.length) { return; }
// 表示順を取得
const order = keke_shortMessage["表示順"] || "リスト順";
let text = "";
// リスト順
if (order == "リスト順") {
// 番号を取得
if (!$gameSystem._shortMessageNumberKeMnfs) { $gameSystem._shortMessageNumberKeMnfs = 0; }
if (!messages[$gameSystem._shortMessageNumberKeMnfs]) { $gameSystem._shortMessageNumberKeMnfs = 0; }
const number = $gameSystem._shortMessageNumberKeMnfs;
text = getText(messages[number]["呼ぶテキスト"]);
// ランダム
} else {
text = getText(messages[Math.randomInt(messages.length)]["呼ぶテキスト"]);
}
return text;
};
//- シーンマップ/初期化(処理追加)
const _Scene_Map_initialize = Scene_Map.prototype.initialize;
Scene_Map.prototype.initialize = function() {
_Scene_Map_initialize.apply(this);
//- メニューを閉じたときに一言メッセージを進める
if (SceneManager._scene instanceof Scene_MenuBase) {
if ($gameSystem._shortMessageNumberKeMnfs == null) { $gameSystem._shortMessageNumberKeMnfs = 0; } else
{ $gameSystem._shortMessageNumberKeMnfs++; }
}
};
//==================================================
//-- 自由欄パック
//==================================================
//- 自由欄テキストの取得
function getFreeText(actor, fontSize) {
// 自由欄パックの取得
const pack = getFreePack(actor);
if (!pack) { return; }
// テキスト群を取得
const textList = pack["自由欄テキスト"];
if (!textList || !textList.length) { return; }
// 条件検索
const d = conditionalSearch(textList, actor);
if (!d) { return; }
// テキスト名を取得
const textName = d["呼ぶテキスト"];
if (!textName) { return; }
// テキストの取得
const text = getText(textName);
return convertText(text, fontSize, actor);
};
//- フリーヘルプの取得
function getFreeHelp(actor, fontSize) {
// 自由欄パックの取得
const pack = getFreePack(actor);
if (!pack) { return; }
// テキスト群を取得
const textList = pack["ヘルプテキスト"];
if (!textList || !textList.length) { return; }
// 条件検索
const d = conditionalSearch(textList, actor);
if (!d) { return; }
// テキスト名を取得
const textName = d["呼ぶテキスト"];
if (!textName) { return; }
// テキストの取得
const text = getText(textName);
return convertText(text, fontSize, actor);
};
//- 立ち絵データの取得
function getStandData(actor) {
// 自由欄パックの取得
const pack = getFreePack(actor);
if (!pack) { return; }
// 立ち絵リストを取得
const standList = pack["立ち絵"];
if (!standList || !standList.length) { return; }
// 条件検索
const standData = conditionalSearch(standList, actor);
return standData;
};
//- 自由欄パックの取得
function getFreePack(actor) {
// パック名を取得
const names = totalAllMetaArray(actor, ["ステータス自由欄", "statusFreeSpace"]);
if (!names || !names.length) { return; }
const name = names[names.length - 1];
if (!name) { return; }
// パックを取得
const pack = keke_freePackMaking.find(p => p["パック名"] == name);
return pack;
};
//- 条件検索
function conditionalSearch(list, actor) {
// 条件に合うデータを取得
const data = list.find(d => {
let condition = d["条件"];
if (condition == null) { return true; }
condition = (typeof condition == "string") ? condition.replace(/[\x1b\\]/g, "") : condition;
return newFunc(condition, actor, $gameVariables._data, $gameSwitches._data);
});
return data;
};
//- テキストの取得
function getText(textName) {
const textData = keke_textMaking.find(d => d["テキスト名"] == textName);
if (!textData) { return ""; }
return textData["テキスト"] || "";
};
//- テキストの置換
function convertText(text, fontSize, actor) {
const mainSize = fontSize || $gameSystem.mainFontSize();
// フォントクリア
text = text.replace(/\\cl/g, `\\c[0]\\fs[${mainSize}]`);
// 文字サイズ+-
let regExp = /\\fs\[([+-]+)(\d+)\]/g;
while (true) {
const match = regExp.exec(text);
if (!match) { break; }
const str = match[0];
const symbol = match[1];
const val = Number(match[2]);
const size = fontSize + (symbol.includes("+") ? val : -val);
const a = text.slice(0, regExp.lastIndex - str.length);
const b = `\\fs[${size}]`;
const c = text.slice(regExp.lastIndex);
text = a + b + c;
}
// スクリプト
regExp = /\\sc\[([^\]]+)\]/g;
while (true) {
const match = regExp.exec(text);
if (!match) { break; }
const str = match[0];
const code = newFunc(match[1], actor, $gameVariables._data, $gameSwitches._data);
const a = text.slice(0, regExp.lastIndex - str.length);
const b = code;
const c = text.slice(regExp.lastIndex);
text = a + b + c;
}
return text;
};
//==================================================
//-- 文字列基本 /ベーシック
//==================================================
//- フォントサイズの取得
function getFontSize(size, oriSize) {
if (!oriSize) { oriSize = $gameSystem.mainFontSize(); }
if (!size) { return oriSize; }
const sizeStr = size.toString();
if (sizeStr.includes("+")) {
const plus = Number(sizeStr.replace("+", ""));
size = oriSize + plus;
} else if (sizeStr.includes("-")) {
const minus = Number(sizeStr.replace("-", ""));
size = oriSize - minus;
}
return Number(size);
};
//- フォント設定の構築
function buildFontSetting(contents, d = {}) {
const cfg = {};
cfg.fontFace = d.fontFace || contents.fontFace;
cfg.fontSize = d.fontSize || contents.fontSize;
cfg.textColor = d.textColor || contents.textColor;
cfg.outlineWidth = d.outWidth || contents.outlineWidth;
cfg.outlineColor = d.outColor || "rgba(0, 0, 0, 1)";
return cfg;
};
//- フォント設定の適用
function applyFontSetting(bitmap, cfg) {
bitmap.fontFace = cfg.fontFace || bitmap.fontFace;
bitmap.fontSize = cfg.fontSize || bitmap.fontSize;
bitmap.textColor = cfg.textColor || bitmap.textColor;
bitmap.outlineWidth = cfg.outlineWidth || bitmap.outlineWidth;
bitmap.outlineColor = cfg.outlineColor || bitmap.outlineColor;
};
//- 文字列をカラートーンに
function strToColorTone(strs) {
const red = strs["カラー赤"] || 0;
const green= strs["カラー緑"] || 0;
const blue = strs["カラー青"] || 0;
const gray = strs["カラー灰"] || 0;
if (!red && !green && !blue && !gray) { return null; }
return [red, green, blue, gray];
};
//==================================================
//-- メタ取得 /ベーシック
//==================================================
//- 全てのメタ配列の合算
function totalAllMetaArray(battler, words, action, noDelSpace) {
let data = null
let array = [];
// バトラー値
data = battler._actorId ? battler.actor() : battler.enemy();
if (data) { metaAll(data.note, words).forEach(e => array.push(e)); }
if (battler._actorId) {
// 職業値
data = battler.currentClass();
if (data) { metaAll(data.note, words).forEach(e => array.push(e)); }
// 装備値
battler._equips.forEach(equip => {
data = equip.object();
if (data) { metaAll(data.note, words).forEach(e => array.push(e)); }
});
}
// ステート値
battler._states.forEach(stateId => {
data = $dataStates[stateId];
if (data) { metaAll(data.note, words).forEach(e => array.push(e)); }
});
// アクション値
if (action) {
data = action.item();
if (data) { metaAll(data.note, words).forEach(e => array.push(e)); }
}
// スペースを削除
if (!noDelSpace) { array = array.map(e => e.replace(/\s/g, "")); }
// 空の要素は削除
array = array.filter(e => e);
return array;
};
//- 全取得メタ
function metaAll(note, words) {
var result = [];
words.forEach(word => {
var regText = '\<' + word + ':([^\>]*)\>';
var regExp_g = new RegExp(regText, 'ig');
var regExp = new RegExp(regText);
var matches = note.match(regExp_g);
if (matches) {
matches.forEach(function(line) {
const match = line.match(regExp);
result.push(match[1]);
});
}
});
return result;
};
//==================================================
//-- 計算基本 /ベーシック
//==================================================
//- マルチ演算
function calcMulti(cur, tage, ori, cmds = {}) {
if (tage == null) { return [{ val:0 }]; }
const datas = [cur, tage.toString(), ori, cmds];
cur = cur || 0;
let tageStr = tage.toString();
// 画面横幅/縦高を変換
const matches = tageStr.match(/[\s\d\.\+\-\*\/\%\(\)]*(gw|gh)[\s\d\.\+\-\*\/\%\(\)]*/gi);
if (matches) {
matches.forEach(formula => {
const v = newFunc_screenW(formula);
tageStr = tageStr.replace(formula, v.toString());
});
}
let tageLine = tageStr.split(",");
tageLine = tageLine.map(v => v.replace(/\s/g, ""));
let sols = [];
tageLine.forEach((tages, i) => {
const match = tages.match(/^(r*m*s*\/|)\s*([\+\*\/\%\=↑↓←→]*)\s*(\-*\s*\d+\.*\d*)\s*~*(\-*\s*\d*\.*\d*)\s*([\+\*\/\%\=←→↑↓]*)\s*(tn|cg|fk|cf|rd|bk|ei|eo|e|en|)\s*(\(*\-*\s*\d*\.*\d*\)*)\s*(&*b*j*d*c*t*o*)\s*(\_*\-*\s*\d*\.*\d*)$/i);
if (!match) {
sols.push({ val:tages, header:"", easing:"", easingRate:1, extra:"", num:0, datas:datas });
return;
}
let val = 0;
let rvs = 1;
let header = "";
let easing = "";
let easingRate = 1;
let extra = "";
let num = 1;
if (match[1]) {
header = match[1].replace(/\//g, "").toUpperCase();
if (header.match(/r/i)) { rvs = -1; }
}
if (match[6]) {
easing = match[6].toUpperCase();
}
if (match[7]) {
const mt = match[7].match(/\-*\d+\.*\d*/);
easingRate = mt ? Number(mt[0]) : 1;
}
if (match[8]) {
extra = match[8].replace(/&/g, "").toUpperCase();
}
if (match[9]) {
num = Number(match[9].replace(/\_/g, ""));
}
if (match[4]) {
const vs = [Number(match[3]), Number(match[4])];
vs.sort((a, b) => a - b);
v = vs[0] + Math.random() * (vs[1] - vs[0]);
} else {
v = Number(match[3]);
}
const symbol = (match[2] || "") + (match[5] || "");
if (cmds.noMinus && !symbol && v < 0) {
symbol = "+";
}
if (symbol.includes("+")) {
val = Number(cur) + v * rvs;
} else if (symbol.includes("*")) {
val = Number(cur) * v * rvs;
} else if (symbol.includes("/")) {
val = Number(cur) / v * rvs;
} else if (symbol.includes("%")) {
val = Number(cur) % v * rvs;
} else if (symbol.includes("←")) {
val = Number(cur) - v * rvs;
} else if (symbol.includes("→")) {
val = Number(cur) + v * rvs;
} else if (symbol.includes("↑")) {
val = Number(cur) - v * rvs;
} else if (symbol.includes("↓")) {
val = Number(cur) + v * rvs;
} else {
val = v * rvs;
if (ori && !symbol.includes("=")) {
if (ori.toString().includes("*")) {
val *= Number(ori.replace(/\*/g, ""));
} else {
val += ori;
}
}
}
sols.push({ val:val, header:header, easing:easing, easingRate:easingRate, extra:extra, num:num, datas:datas });
});
return sols;
};
//- 小数点を丸める
function roundDecimal(val, rate) {
const newVal = Math.floor(val* rate) / rate
return newVal;
};
//- 時間の作成
function makeTime(time) {
if (!time) { return 0; }
time = time.toString();
if (time.includes("~")) {
return randomise(time);
} else {
return convertSecond(time);
}
};
//- ランダマイズ
function randomise(str) {
const strs = str.split("~");
const vals = [convertSecond(strs[0]), convertSecond(strs[1])];
vals.sort((a, b) => a - b);
return vals[0] + Math.random() * (vals[1] - vals[0]);
};
//- 秒を変換
function convertSecond(time) {
return Math.round(Number(time.match(/(\d+\.?\d*)/)[0]) * (time.match(/s/i) ? 60 : 1));
};
//==================================================
//-- 位置基本 /ベーシック
//==================================================
//- 角度を度数に
function angleToDegree(angle) {
angle *= (180 / Math.PI);
if (angle < 0) { angle += 360; };
return angle;
};
//- 角度をπに
function angleToRadian(angle) {
angle *= (Math.PI / 180);
return angle;
};
//==================================================
//-- アニメーションの開始 /ベーシック
//==================================================
//- アニメの呼び出し
function callAnime(sprite, body, animeName, animeType, delay = 0) {
if (!animeName) { return; }
// アニメデータの取得
const animeDatas = getAnimeData(animeName, animeType, delay);
// アニメデータのセット
setAnimeData(sprite, body, animeDatas, delay);
return true;
};
//- アニメデータの取得
function getAnimeData(animeName, animeType, delay = 0) {
const animeDatas = [];
if (animeName.constructor.name == "Array") {
animeName.forEach(name => {
const args = keke_animeList.filter(d => d["アニメ名"] == name)[0];
if (args) { animeDatas.push({ args:args, animeType:animeType, delay:delay }); }
});
} else {
const args = keke_animeList.filter(d => d["アニメ名"] == animeName)[0];
if (args) { animeDatas.push({ args:args, animeType:animeType, delay:delay }); }
}
return animeDatas;
};
//- アニメデータのセット
function setAnimeData(sprite, body, animeDatas) {
if (!animeDatas || !animeDatas.length) { return; }
// シングルアニメの処理
const animeType = animeDatas[0].animeType;
const isSingle = animeType == "single";
if (isSingle) {
if (sprite._inSingleAnimeKe) { return; }
sprite._inSingleAnimeKe = true;
}
// データを追加
if (!sprite._animeDatasKe) { sprite._animeDatasKe = []; }
sprite._animeDatasKe = [...sprite._animeDatasKe, ...animeDatas];
// アニメ開始スプライテスとしてセット
if (!body._animeStartSpritesKeMnfs) { body._animeStartSpritesKeMnfs = []; }
if (!body._animeStartSpritesKeMnfs.some(s => s == sprite)) {
body._animeStartSpritesKeMnfs.push(sprite);
}
// アニメ開始の更新
updateAnimeStart(sprite, body);
};
//- アニメ開始の更新
function updateAnimeStart(sprite, body, force) {
if (!sprite._animeDatasKe || !sprite._animeDatasKe.length) { return; }
// データをひとつ取得
const data = sprite._animeDatasKe[0];
const animeType = data.animeType;
// 各アニメウェイト
if (!force) {
if (sprite._animationsKe && sprite._animationsKe.some(drift => drift.animeType.includes("start") && !drift.noWait)) { return; }
if (sprite._animationsKe && sprite._animationsKe.some(drift => drift.animeType.includes("end") && !drift.noWait)) { return; }
if (animeType.includes("start") && sprite._waitStartAnimeKe) { return; }
if (animeType.includes("ing") && sprite._waitIngAnimeKe) { return; }
}
// データをひとつ消去
sprite._animeDatasKe.shift();
// ノーウェイトを解除
/*if (sprite._animationsKe) {
sprite._animationsKe.forEach(drift => drift.noWait = false);
}*/
// アニメのセット
setAnime(sprite, body, data);
// データがなくなったらアニメ開始スプライテスから除外
let del = false;
if (!sprite._animeDatasKe.length) {
body._animeStartSpritesKeMnfs = body._animeStartSpritesKeMnfs.filter(s => s != sprite);
};
};
//- 見えないか
function isNoVisible(sprite) {
let hide = false;
while (true) {
sprite = sprite.parent;
if (!sprite) { break; }
if (!sprite.visible) { hide = true; break; }
}
return hide;
};
//- アニメのセット
function setAnime(sprite, body, data) {
if (!sprite.transform) { return; }
const args = data.args;
const time = makeTime(args["アニメ時間"]) || 1;
const num = Math.round(Number(args["アニメ回数"])) || 1;
if (!time || !num) { return; }
// 回転角の初期化
if (sprite._angleKe == null) { sprite._angleKe = angleToDegree(sprite.rotation); }
// 最初の値をセット
setOpenVal(sprite, args, data);
// 変動値を取得
const drift = {};
drift.animeType = data.animeType;
drift.timeMax = time
drift.duration = drift.timeMax;
drift.timeMaxOri = drift.timeMax;
drift.num = num;
// ノーウェイト
drift.noWait = toBoolean(args["ノーウェイト"]);
// 挿入ウェイト
if (args["…挿入ウェイト"]) {
const insertWait = strToHash(args["…挿入ウェイト"]);
drift.waitStart = insertWait["ウェイト開始"].clamp(0, time - 1);
drift.waitTime = insertWait["ウェイト時間"];
drift.waitStartOri = drift.waitStart;
drift.inWait = 0;
}
// ディレイ
drift.delay = Number(args["ディレイ"]) || data.delay;
// 位置X
if (args["→位置X"] != null) {
const posXs = calcMulti(sprite.x, args["→位置X"], sprite._posXOriKe);
drift.posXs = makeDrift(posXs, sprite.x, time, "位置X");
}
// 位置Y
if (args["→位置Y"] != null) {
const posYs = calcMulti(sprite.y, args["→位置Y"], sprite._posYOriKe);
drift.posYs = makeDrift(posYs, sprite.y, time, "位置Y");
}
// スケールX
if (args["→スケールX"] != null) {
const scaleXs = calcMulti(sprite.scale.x, args["→スケールX"], sprite._scaleXOriKe);
drift.scaleXs = makeDrift(scaleXs, sprite.scale.x, time, "スケールX");
}
// スケールY
if (args["→スケールY"] != null) {
const scaleYs = calcMulti(sprite.scale.y, args["→スケールY"], sprite._scaleYOriKe);
drift.scaleYs = makeDrift(scaleYs, sprite.scale.y, time, "スケールY");
}
// 回転角
if (args["→回転角"] != null) {
const angles = calcMulti(sprite._angleKe, args["→回転角"], sprite._angleOriKe);
drift.angles = makeDrift(angles, sprite._angleKe, time, "回転角");
}
// 不透明度
if (args["→不透明度"] != null) {
const opacities = calcMulti(sprite.opacity, args["→不透明度"], sprite._opacityOriKe);
drift.opacities = makeDrift(opacities, sprite.opacity, time, "不透明度");
}
// カラートーン
ct = [args["→カラー赤"], args["→カラー緑"], args["→カラー青"], args["→カラー灰"]];
drift.colorTones = [];
for (let i = 0; i <= 3; i++) {
if (ct[i] != null) {
const colorTones = calcMulti(sprite._colorTone[i], ct[i], sprite._colorToneOriKe ? sprite._colorToneOriKe[i] : 0);
// カラートーンの不透明度補正
colorTones[0].val = colorToneOpaRevise(colorTones[0].val, sprite.opacity, data.animeType);
drift.colorTones[i] = makeDrift(colorTones, sprite._colorTone[i], time, "カラートーン");
}
}
// 透明化
if (args["透明化"]) {
drift.noVisible = 1;
sprite._noVisibleKe = true;
sprite.x -= 10000;
}
// アニメタイプをセット
drift.animeType = data.animeType;
// 変数にセット
if (!sprite._animationsKe) { sprite._animationsKe = []; }
sprite._animationsKe.push(drift);
// アニメ中スプライテスとしてセット
if (!body._inAnimeSpritesKeMnfs) { body._inAnimeSpritesKeMnfs = []; }
if (!body._inAnimeSpritesKeMnfs.some(s => s == sprite)) {
body._inAnimeSpritesKeMnfs.push(sprite);
}
};
//- 計算記号の調整
function adjustSymbol(val, symbol = "*") {
if (!val) { return val; }
if (val.match(/\+|\-|\*|\/|\%|\=|↑|↓|←|→/i)) {
return val;
} else if (val.match(/tn|rd|bk/i)) {
return symbol + val;
} else {
return val;
}
};
//- カラートーンの不透明度補正
function colorToneOpaRevise(val, bodyOpa, animeType) {
if (!val) { return val; }
let match = animeType.match(/opa(\d+)/i);
if (!match) { return val; }
const opaCenter = Number(match[1]);
return Math.round(val * (opaCenter / bodyOpa)).clamp(0, 255);
};
//- 最初の値をセット
function setOpenVal(sprite, args, data) {
if (args["位置X"] != null) { sprite.x = calcMulti(sprite.x, args["位置X"], sprite._posXOriKe)[0].val; }
if (args["位置Y"] != null) { sprite.y = calcMulti(sprite.y, args["位置Y"], sprite._posYOriKe)[0].val; }
if (args["スケールX"] != null) {
sprite.scale.x = calcMulti(sprite.scale.x, args["スケールX"], sprite._scaleXOriKe)[0].val;
}
if (args["スケールY"] != null) {
sprite.scale.y = calcMulti(sprite.scale.y, args["スケールY"], sprite._scaleYOriKe)[0].val;
}
if (args["回転角"] != null) {
sprite._angleKe = calcMulti(sprite._angleKe, args["回転角"], sprite._angleOriKe)[0].val;
sprite.rotation = angleToRadian(sprite._angleKe);
}
if (args["不透明度"] != null) { sprite.opacity = calcMulti(sprite.opacity, args["不透明度"], sprite._opacityOriKe)[0].val; }
if (args["カラー赤"] != null || args["カラー緑"] != null || args["カラー青"] != null || args["カラー灰"] != null) {
let ct = [args["カラー赤"], args["カラー緑"], args["カラー青"], args["カラー灰"]];
for (let i = 0; i <= 3; i++) {
if (ct[i] != null) {
sprite._colorTone[i] = calcMulti(sprite._colorTone[i], ct[i], sprite._colorToneOriKe[i])[0].val;
// カラートーンの不透明度補正
sprite._colorTone[i] = colorToneOpaRevise(sprite._colorTone[i], sprite.opacity, data.animeType);
}
}
sprite._updateColorFilter();
}
};
//- 変動の作成
function makeDrift(datas, current, time, word) {
if (!datas || !datas.length) { return; }
if (word == "回転角") { current %= 360; }
let ds = [];
// データの数だけ処理
datas.forEach(data => {
if (data.val == null) { return; }
const d = {};
d.num = data.num || 1;
d.datas = data.datas || ["", ""];
const extra = data.extra || "";
d.break = extra.includes("B");
d.jump = extra.includes("J");
d.direction = extra.includes("D");
d.isCos = extra.includes("C");
d.isRandom = d.datas[1].includes("~");
d.easing = data.easing || "E";
d.easingRate = data.easingRate || 1;
d.timeMax = time / d.num;
d.duration = d.timeMax;
d.start = roundDecimal(current, 1000000);
d.target = Number(data.val);
d.vol = d.target - d.start;
d.current = d.start;
d.end = 0;
// 終点
if (d.easing == "TN" || d.easing == "RD") {
d.end = d.start;
} else {
d.end = d.target;
}
ds.push(d);
});
return ds;
};
//==================================================
//-- アニメーションの更新 /ベーシック
//==================================================
//- アニメスプライトの更新
function updateAnimeSprite(body) {
if (!body) { return; }
// アニメ開始スプライトの更新
updataAnimeStartSprite(body);
// アニメ中スプライトの更新
updataInAnimeSprites(body);
};
//- アニメ開始スプライトの更新
function updataAnimeStartSprite(body) {
if (!body._animeStartSpritesKeMnfs || !body._animeStartSpritesKeMnfs.length) { return; }
let del = false;
body._animeStartSpritesKeMnfs.forEach((sprite, i) => {
if (!sprite || !sprite.parent) {
destroySprite(sprite);
body._animeStartSpritesKeMnfs[i] = null;
del = true;
return;
}
// アニメ開始の更新
del = updateAnimeStart(sprite, body);
});
if (del) { body._animeStartSpritesKeMnfs = body._animeStartSpritesKeMnfs.filter(s => s); }
};
//- アニメ中スプライトの更新
function updataInAnimeSprites(body) {
if (!body._inAnimeSpritesKeMnfs || !body._inAnimeSpritesKeMnfs.length) { return; }
let del = false;
body._inAnimeSpritesKeMnfs.forEach((sprite, i) => {
if (!sprite || !sprite.parent) {
destroySprite(sprite);
body._inAnimeSpritesKeMnfs[i] = null;
del = true;
return;
}
// アニメの更新
if (updateAnime(sprite, body)) {
body._inAnimeSpritesKeMnfs[i] = null;
del = true;
}
});
if (del) {
body._inAnimeSpritesKeMnfs = body._inAnimeSpritesKeMnfs.filter(s => s);
// 終了アニメの完了判定
if (!body._inAnimeSpritesKeMnfs.length && inEndAnime(body)) {
// アニメ終了時関数の実行
doAnimeEndFunc(body);
}
}
};
//- アニメの更新
function updateAnime(sprite, body) {
if (!sprite._animationsKe || !sprite._animationsKe.length) { return; }
let end = false;
let del = false;
let single = false;
let destroy = false;
// データごとに処理
sprite._animationsKe.forEach((drift, i) => {
// アニメの更新-個別
drift = updateAnimeEach(sprite, drift, i, body);
if (!sprite.transform || !drift || drift.terminate) {
sprite._animationsKe[i] = null;
end = true;
// シングル判定
if (drift && drift.animeType.includes("single")) { single = true; }
// 破棄判定
if (drift && drift.animeType.includes("destroy")) { destroy = true; }
}
});
// null を消去
if (end) {
sprite._animationsKe = sprite._animationsKe.filter(d => d);
// アニメの終了
endAnime(sprite, body, single, destroy);
if (!sprite._animationsKe.length) { del = true; }
}
return del;
};
//- アニメの更新-個別
function updateAnimeEach(sprite, drift, i, body) {
if (!sprite.transform || !drift) { return drift; }
// ループアニメの停止
if (sprite._stopLoopAnimeKe && drift.num < 0) {
if (sprite._stopLoopAnimeKe == 1) {
// アニメの中断
breakAnime(sprite, drift);
sprite._stopLoopAnimeKe = 2;
} else {
return drift;
}
};
// フリーズ
if (drift.freeze) {
return drift;
}
// 挿入ウェイト
if (drift.inWait) {
drift.inWait--;
return drift
}
if (drift.waitStart == drift.dura && drift.waitTime) {
drift.waitStart = null;
drift.inWait = drift.waitTime;
return drift
}
// ディレイ
if (drift.delay) {
drift.delay--;
return drift;
}
// 位置X
if (drift.posXs && drift.posXs.length) {
let moveXs = updateDrift(drift.posXs, "位置X");
moveXs.forEach(v => sprite.x += v);
}
// 位置Y
if (drift.posYs && drift.posYs.length) {
let moveYs = updateDrift(drift.posYs, "位置Y");
moveYs.forEach(v => sprite.y += v);
}
// スケールX
if (drift.scaleXs && drift.scaleXs.length) {
let scaleXs = updateDrift(drift.scaleXs, "スケールX");
scaleXs.forEach(v => sprite.scale.x += v);
}
// スケールY
if (drift.scaleYs && drift.scaleYs.length) {
let scaleYs = updateDrift(drift.scaleYs, "スケールY");
scaleYs.forEach(v => sprite.scale.y += v);
}
// 回転角
if (drift.angles && drift.angles.length) {
let angles = updateDrift(drift.angles, "回転角");
angles.forEach(v => sprite._angleKe += v);
sprite.rotation = angleToRadian(sprite._angleKe);
}
// 不透明度
if (drift.opacities && drift.opacities.length) {
let opacities = updateDrift(drift.opacities, "不透明度");
opacities.forEach(v => sprite.opacity += v);
}
// カラートーン
if (drift.colorTones && drift.colorTones.length && drift.colorTones.some(c => c.length)) {
let colorTones = [];
for (let j = 0; j < 4; j++) {
if (!drift.colorTones[j]) { continue; }
colorTones[j] = updateDrift(drift.colorTones[j], "カラートーン");
colorTones[j].forEach(v => {
sprite._colorTone[j] += v;
});
}
sprite._updateColorFilter();
}
// カウント
drift.duration--;
// 終了
if (drift.duration <= 0) {
if (drift.num >= 0) { drift.num--; }
// 非ループ時
if (!drift.num) {
drift.terminate = true;
// ループ時
} else {
// 変動値の再セット
resetDrift(sprite, drift, sprite, i);
drift.duration = drift.timeMax;
}
}
return drift;
};
//- 透明化の解除
function remNoVisible(sprite) {
if (!sprite || !sprite.parent || !sprite.transform || sprite._noVisibleKe) { return; }
if (sprite.x > -5000) { return; }
sprite.x += 10000;
};
//- 変動の更新
function updateDrift(ds, word) {
let rs= []
// データを全て処理
ds.forEach(d => {
// カウントを減らす
d.duration--;
let r = 0;
next = applyEasing(d.current, d.start, d.target, d.duration, d.timeMax, d.easing, d.easingRate);
r = next - d.current;
d.current = next;
// 終了
if (d.duration <= 0) {
// 終了値に合わせる
r += roundDecimal(d.end - next, 1000000);
d.num--;
d.duration = d.timeMax;
}
if (r) { rs.push(r); }
});
return rs;
};
//==================================================
//-- アニメーションの終了 /ベーシック
//==================================================
//- アニメの終了
function endAnime(sprite, body, single, destroy) {
// アニメ中スプライトから除外
if (!sprite._animationsKe.length && body._inAnimeSpritesKeMnfs) {
//body._inAnimeSpritesKeMnfs = body._inAnimeSpritesKeMnfs.filter(s => s != sprite);
}
// シングル終了
if (single) { sprite._inSingleAnimeKe = false; }
// 破棄
if (destroy) { destroySprite(sprite); }
};
//- 変動値の再セット
function resetDrift(sprite, drift, sprite, time) {
//if (!drift.isRandom) { return; }
const keys = ["posXs", "posYs", "scaleXs", "scaleYs", "angles", "opacities", "colorTones"];
const curs = ["x", "y", "scale.x", "scale.y", "_angleKe", "opacity", "_colorTone"];
const words = ["位置X", "位置Y", "スケールX", "スケールY", "回転角", "不透明度", ["カラー赤", "カラー緑", "カラー青", "カラー灰"]];
const oris = ["posXOri", "posYOri", "scaleXOri", "scaleYOri", "angleOri", "opacityOri", "colorToneOri", ];
// キーごとに処理
keys.forEach((key, j) => {
if (!drift[key] || !drift[key].length) { return; }
const ds = drift[key];
// カラートーンの場合
if (key == "colorTones") {
ds.forEach((cols, c) => {
if (!cols.length) { return; }
const datas = cols[0].datas;
datas[2] = sprite["_"+oris[j]+"Ke"][c];
const current = sprite[curs[j]][c];
const newData = calcMulti(current, datas[1], datas[2], datas[3]);
// カラートーンの不透明度補正
newData[0].val = colorToneOpaRevise(newData[0].val, sprite.opacity, drift.animeType);
drift[key][c] = makeDrift(newData, current, drift.timeMax, words[j][c]);
});
return
};
// それ以外の場合
const datas = ds[0].datas;
datas[2] = sprite["_"+oris[j]+"Ke"];
let current = 0;
if (curs[j].includes("scale")) {
const cs = curs[j].split(".");
current = sprite[cs[0]][cs[1]] || 0;
} else {
current = sprite[curs[j]] || 0;
}
//if (key == "angles") { current = loopAngle(Math.ceil(current)); }
const newData = calcMulti(current, datas[1], datas[2], datas[3]);
drift[key] = makeDrift(newData, current, drift.timeMax, words[j]);
});
// アニメ時間
drift.timeMax = drift.timeMaxOri;
};
// スプライト標準値の復帰
function restoreSpriteOriVar(sprite) {
if (!(sprite instanceof Sprite) || !sprite.transform) { return; }
if (sprite._scaleXOriKe != null) { sprite.scale.x = Number(sprite._scaleXOriKe.replace("\*", "")); }
if (sprite._scaleYOriKe != null) { sprite.scale.y = Number(sprite._scaleYOriKe.replace("\*", "")); }
if (sprite._angleOriKe != null) { sprite._angleKe = sprite._angleOriKe; }
if (sprite._opacityOriKe) { sprite.opacity = 255 * Number(sprite._opacityOriKe.replace("\*", "")) }
if (sprite._colorToneOriKe != null) { sprite.setColorTone(sprite._colorToneOriKe); }
};
//- アニメの停止
function stopAnime(sprite, animeType, instant) {
// アニメデータ
if (sprite._animeDatasKe) {
sprite._animeDatasKe = sprite._animeDatasKe.filter(data => animeType && data.aniemType != animeType)
}
// アニメ中
if (sprite._animationsKe) {
sprite._animationsKe.forEach(drift => {
if (!animeType || drift.animeType == animeType) {
// アニメの中断
breakAnime(sprite, drift, instant);
};
});
}
};
//- アニメの中断
function breakAnime(sprite, drift, instant) {
if (!drift) { return; }
Object.keys(drift).forEach(k => {
const ds = drift[k];
if (!ds) { return; }
if (ds.constructor.name == "Array") {
ds.forEach(d => {
if (d.constructor.name == "Array") {
d.forEach(c => c.duration = 1);
} else {
d.duration = 1;
}
});
}
});
drift.duration = 1;
drift.num = 1;
if (instant) { updateAnime(sprite, instant); }
};
//- アニメの全終了
function allEndAnime(body) {
// アニメ開始スプライテス
const aniDataSprites = body._animeStartSpritesKeMnfs;
if (aniDataSprites) {
aniDataSprites.forEach(sprite => sprite ? sprite._animeDatasKe = null : 0);
}
body._animeStartSpritesKeMnfs = null;
// アニメ中スプライテス
const inAnimeSprites = body._inAnimeSpritesKeMnfs;
if (inAnimeSprites) {
inAnimeSprites.forEach(sprite => sprite ? sprite._animationsKe = null : 0);
}
body._inAnimeSpritesKeMnfs = null;
};
//- アニメ終了時関数のセット
function setAnimeEndFunc(body, func, ...args) {
body._animeEndFuncKe = { func:func, args:args };
};
//- アニメ終了時関数の実行
function doAnimeEndFunc(body) {
if (!body._animeEndFuncKe) { return; }
const funcs = body._animeEndFuncKe;
funcs.func(...funcs.args);
body._animeEndFuncKe = null;
};
//- アニメ実行中か
function isAnimeRunning(sprite) {
return ((sprite._animeDatasKe && sprite._animeDatasKe.length) || (sprite._animationsKe && sprite._animationsKe.length));
};
//- アニメ中か
function inAnime(body) {
return (body._animeStartSpritesKeMnfs && body._animeStartSpritesKeMnfs.length) || (body._inAnimeSpritesKeMnfs && body._inAnimeSpritesKeMnfs.length)
};
//- 終了アニメ中か
function inEndAnime(body) {
return body._inEndAnimeKe;
};
//==================================================
//-- イージング /ベーシック
//==================================================
//- イージングの適用
function applyEasing(current, start, target, duration, timeMax, easing, easingRate = 1) {
// イージングの処理
if (easing.match(/ei|eo|e|en/i)) {
return processEasing(current, target, duration + 1, timeMax, easing, easingRate);
}
// カービング
if (easing.match(/tn|cg|fk|cf|rd|bk/i)) {
return processCurving(current, start, target, duration + 1, timeMax, easing, easingRate);
}
};
//- イージングの処理
function processEasing(current, target, duration, timeMax, easing, easingRate = 1) {
const lt = calcEasing((timeMax - duration) / timeMax, easing, easingRate);
const t = calcEasing((timeMax - duration + 1) / timeMax, easing, easingRate);
const start = (current - target * lt) / (1 - lt);
return start + (target - start) * t;
};
//- イージングの計算
function calcEasing(t, easing, easingRate = 1) {
const exponent = 2 * easingRate;
switch (easing.toUpperCase()) {
case "EI":
return easeIn(t, exponent);
case "EO":
return easeOut(t, exponent);
case "E":
return easeInOut(t, exponent);
case "EN":
return t;
default:
return t;
}
};
//- 各イージング処理
function easeIn(t, exponent) {
return Math.pow(t, exponent) || 0.001;
};
function easeOut(t, exponent) {;
return 1 - (Math.pow(1 - t, exponent) || 0.001);
};
function easeInOut(t, exponent) {
if (t < 0.5) {
return easeIn(t * 2, exponent) / 2;
} else {
return easeOut(t * 2 - 1, exponent) / 2 + 0.5;
}
};
//- カービングの処理
function processCurving(current, start, target, duration, timeMax, easing, easingRate = 1) {
// 0 の時の処理
if (duration <= 0) { return easing.match(/tn|rd|bk/i) ? start : target; }
let result = 0;
// ターン
if (easing.toUpperCase() == "TN") {
result = processTurn(current, start, target, duration, timeMax, easingRate);
// チャージ
} else if (easing.toUpperCase() == "CG") {
result = processCharge(current, start, target, duration, timeMax, easingRate);
// フック
} else if (easing.toUpperCase() == "FK") {
result = processFook(current, start, target, duration, timeMax, easingRate);
// チャージフック
} else if (easing.toUpperCase() == "CF") {
result = processChargeFook(current, start, target, duration, timeMax, easingRate);
// ラウンド
} else if (easing.toUpperCase() == "RD") {
result = processRound(current, start, target, duration, timeMax, easingRate);
// バック
} else if (easing.toUpperCase() == "BK") {
result = processBack(current, start, target, duration, timeMax, easingRate);
}
return result;
};
//- ターンの処理
function processTurn(current, start, target, duration, timeMax, easingRate) {
let result = 0;
const d1 = Math.round(timeMax / 2);
const d2 = timeMax - d1;
if (duration > d2) {
result = processEasing(current, target, duration - d2, d1, "eo", easingRate);
} else {
result = processEasing(current, start, duration, d2, "ei", easingRate);
}
return result;
};
//- チャージの処理
function processCharge(current, start, target, duration, timeMax, easingRate) {
let result = 0;
const d1 = Math.round(timeMax / 3);
const d2 = timeMax - d1;
if (duration > d2) {
result = processEasing(current, start + (start - target) * easingRate, duration - d2, d1, "e");
} else {
result = processEasing(current, target, duration, d2, "e");
}
return result;
};
//- フックの処理
function processFook(current, start, target, duration, timeMax, easingRate) {
let result = 0;
const d1 = Math.round(timeMax * 2 / 3);
const d2 = timeMax - d1;
if (duration > d2) {
result = processEasing(current, target + (target - start) * easingRate, duration - d2, d1, "e");
} else {
result = processEasing(current, target, duration, d2, "e");
}
return result;
};
//- チャージフックの処理
function processChargeFook(current, start, target, duration, timeMax, easingRate) {
let result = 0;
const d1 = Math.round(timeMax / 4);
const d3 = Math.round(timeMax / 4);
const d2 = timeMax - d1 - d3;
if (duration > (d2 + d3)) {
result = processEasing(current, start + (start - target) * easingRate, duration - d2 - d3, d1, "e");
} else if (duration > d3) {
result = processEasing(current, target + (target - start) * easingRate, duration - d3, d2, "e");
} else {
result = processEasing(current, target, duration, d3, "e");
}
return result;
};
//- ラウンドの処理
function processRound(current, start, target, duration, timeMax, easingRate) {
let result = 0;
const d1 = Math.round(timeMax / 4);
const d2 = Math.round(timeMax / 2);
const d3 = timeMax - d1 - d2;
if (duration > (d2 + d3)) {
result = processEasing(current, target, duration - d2 - d3, d1, "eo");
} else if (duration > d3) {
result = processEasing(current, start + (start - target) * easingRate, duration - d3, d2, "e");
} else {
result = processEasing(current, start, duration, d3, "ei");
}
return result;
};
//- バックの処理
function processBack(current, start, target, duration, timeMax, easingRate) {
let result = 0;
const d1 = 1;
const d2 = timeMax - d1;
if (duration > d2) {
result = processEasing(current, target, duration - d2, d1, "e", easingRate);
} else {
result = processEasing(current, start, duration, d2, "e", easingRate);
}
return result;
};
//==================================================
//-- 図形描画 /ベーシック
//==================================================
//- スクエアの塗り潰し
function fillSquare(bitmap, x, y, w, h, color = "rgba(0,0,0,1)", roundLine = 0, roundEdge = 0, corner = "") {
const context = bitmap.context;
context.save();
if (Array.isArray(color)) {
const x1 = x + w;
const y1 = y + h;
const grad = context.createLinearGradient(x, y, x1, y1);
grad.addColorStop(0, color[0]);
grad.addColorStop(1, color[1]);
context.fillStyle = grad;
} else {
context.fillStyle = color;
}
designSquare(bitmap, x, y, w, h, roundLine, roundEdge, corner);
context.fill();
context.restore();
bitmap._baseTexture.update();
};
//- スクエアの線画
function strokeSquare(bitmap, x, y, w, h, color = "rgba(0,0,0,1)", lineW = 1, roundLine = 0, roundEdge = 0, corner = "") {
const context = bitmap.context;
context.strokeStyle = color;
context.lineWidth = lineW;
designSquare(bitmap, x, y, w, h, roundLine, roundEdge, corner, lineW);
context.stroke();
context.restore();
bitmap._baseTexture.update();
};
//- スクエアのデザイン
function designSquare(bitmap, x, y, w, h, roundLine = 0, roundEdge = 0, corner = "", lineW = 0, airUp) {
const context = bitmap.context;
context.beginPath();
const x2 = x + w / 2;
const y2 = y + h / 2;
const x3 = x + w;
const y3 = y + h;
const c1 = corner.includes("1") ? 0 : roundEdge; // 左上
const c2 = corner.includes("2") ? 0 : roundEdge; // 左下
const c3 = corner.includes("3") ? 0 : roundEdge; // 右上
const c4 = corner.includes("4") ? 0 : roundEdge; // 右下
context.moveTo(x + c1, y);
// 右上
if (roundLine && !airUp) {
context.quadraticCurveTo(x2, y + roundLine, x3 - c3, y);
} else {
context.lineTo(x3 - c3, y);
}
context.quadraticCurveTo(x3, y, x3, y + c3);
// 右下
if (roundLine) {
context.quadraticCurveTo(x3 - roundLine, y2, x3, y3 - c4);
} else {
context.lineTo(x3, y3 - c4);
}
context.quadraticCurveTo(x3, y3, x3 - c4, y3);
// 左下
if (roundLine) {
context.quadraticCurveTo(x2, y3 - roundLine, x + c2, y3);
} else {
context.lineTo(x + c2, y3);
}
context.quadraticCurveTo(x, y3, x, y3 - c2);
// 左上
if (roundLine) {
context.quadraticCurveTo(x + roundLine, y2, x, y + c1);
} else {
context.lineTo(x, y + c1);
}
if (c1) {
context.quadraticCurveTo(x, y, x + c1, y);
} else {
context.lineTo(x, y - lineW / 2);
}
};
})();