code:
/*:
 * @plugindesc Upgrades the Options Menu. Commands are placed into different categories and a description window has been added.
 * @author SumRndmDde
 *
 * @param Categories
 * @desc A list of all of the categories in the Options Menu.
 * Separate each with a comma.
 * @default General, Volume, Window
 *
 * @param Default Category
 * @desc If an option does not have a category specified for it, it will use this category.
 * @default General
 *
 * @param Add Window Colors?
 * @desc If 'true', then the Window Color options will be added.
 * Symbols are: "windowRed" | "windowGreen" | "windowBlue"
 * @default true
 *
 * @param == Reset Option ==
 * @default
 *
 * @param Add Reset Option?
 * @desc If 'true', then a "Reset" option will be added to the Category Window.
 * @default true
 *
 * @param Reset Option Name
 * @desc The name of the "Reset" option on the Category Window.
 * @default Reset Options
 *
 * @param Reset Option SE
 * @desc The sound effect played when the "Reset" option is used.
 * @default Save
 *
 * @param == Category Window ==
 * @default
 *
 * @param Category Window Cols
 * @desc The amount of columns on the Category Window.
 * @default 4
 *
 * @param Category Window Rows
 * @desc The amount of rows on the Category Window.
 * @default 1
 *
 * @param Category Window X
 * @desc The X position of the Category Window.
 * @default 0
 *
 * @param Category Window Y
 * @desc The Y position of the Category Window.
 * @default this._helpWindow.y + this._helpWindow.height
 *
 * @param Category Window Width
 * @desc The width of the Category Window.
 * @default Graphics.boxWidth
 *
 * @param Category Text Align
 * @desc The alignment of the text on the Category Window.
 * Choices are: left | center | right
 * @default center
 *
 * @param == Options Window ==
 * @default
 *
 * @param Options Window X
 * @desc The X position of the Options Window.
 * @default (Graphics.boxWidth - this.width) / 2
 *
 * @param Options Window Y
 * @desc The Y position of the Options Window.
 * @default this._categoryWindow.y + this._categoryWindow.height
 *
 * @param Options Window Width
 * @desc The width of the Options Window.
 * @default 500
 *
 * @param == Help Window ==
 * @default
 *
 * @param Help Window X
 * @desc The X position of the Help Window.
 * @default 0
 *
 * @param Help Window Y
 * @desc The Y position of the Help Window.
 * @default 0
 *
 *
 * @param == Window Color Text ==
 * @default
 *
 * @param Window Red Text
 * @desc The text for the option that controls the window color's red amount.
 * @default Window Red
 *
 * @param Window Green Text
 * @desc The text for the option that controls the window color's green amount.
 * @default Window Green
 *
 * @param Window Blue Text
 * @desc The text for the option that controls the window color's blue amount.
 * @default Window Blue
 *
 * @param == Option 1 ==
 * @default
 *
 * @param Option 1 Symbol
 * @desc The symbol of the option that will use the info defined for Option 1.
 * @default alwaysDash
 *
 * @param Option 1 Category
 * @desc The category that Option 1 will be placed in.
 * @default General
 *
 * @param Option 1 Description
 * @desc The description shown when Option 1 is highlighted.
 * Use \n to create a new line
 * @default If this is turned ON, then you will dash automatically; \notherwise, you will have to hold SHIFT.
 *
 * @param == Option 2 ==
 * @default
 *
 * @param Option 2 Symbol
 * @desc The symbol of the option that will use the info defined for Option 2.
 * @default commandRemember
 *
 * @param Option 2 Category
 * @desc The category that Option 2 will be placed in.
 * @default General
 *
 * @param Option 2 Description
 * @desc The description shown when Option 2 is highlighted.
 * Use \n to create a new line
 * @default If this is turned ON, then the position of the \ncommand cursor will be saved throughout battle.
 *
 * @param == Option 3 ==
 * @default
 *
 * @param Option 3 Symbol
 * @desc The symbol of the option that will use the info defined for Option 3.
 * @default bgmVolume
 *
 * @param Option 3 Category
 * @desc The category that Option 3 will be placed in.
 * @default Volume
 *
 * @param Option 3 Description
 * @desc The description shown when Option 3 is highlighted.
 * Use \n to create a new line
 * @default This changes the volume of the background music.
 *
 * @param == Option 4 ==
 * @default
 *
 * @param Option 4 Symbol
 * @desc The symbol of the option that will use the info defined for Option 4.
 * @default bgsVolume
 *
 * @param Option 4 Category
 * @desc The category that Option 4 will be placed in.
 * @default Volume
 *
 * @param Option 4 Description
 * @desc The description shown when Option 4 is highlighted.
 * Use \n to create a new line
 * @default This changes the volume of the background sound.
 *
 * @param == Option 5 ==
 * @default
 *
 * @param Option 5 Symbol
 * @desc The symbol of the option that will use the info defined for Option 5.
 * @default meVolume
 *
 * @param Option 5 Category
 * @desc The category that Option 5 will be placed in.
 * @default Volume
 *
 * @param Option 5 Description
 * @desc The description shown when Option 5 is highlighted.
 * Use \n to create a new line
 * @default This changes the volume of music effects.
 *
 * @param == Option 6 ==
 * @default
 *
 * @param Option 6 Symbol
 * @desc The symbol of the option that will use the info defined for Option 6.
 * @default seVolume
 *
 * @param Option 6 Category
 * @desc The category that Option 6 will be placed in.
 * @default Volume
 *
 * @param Option 6 Description
 * @desc The description shown when Option 6 is highlighted.
 * Use \n to create a new line
 * @default This changes the volume of sound effects.
  *
 * @param == Option 7 ==
 * @default
 *
 * @param Option 7 Symbol
 * @desc The symbol of the option that will use the info defined for Option 7.
 * @default windowRed
 *
 * @param Option 7 Category
 * @desc The category that Option 7 will be placed in.
 * @default Window
 *
 * @param Option 7 Description
 * @desc The description shown when Option 7 is highlighted.
 * Use \n to create a new line
 * @default This determines the amount of \c[2]red\c[0] tone within \nthe window's base color.
 *
 * @param == Option 8 ==
 * @default
 *
 * @param Option 8 Symbol
 * @desc The symbol of the option that will use the info defined for Option 8.
 * @default windowGreen
 *
 * @param Option 8 Category
 * @desc The category that Option 8 will be placed in.
 * @default Window
 *
 * @param Option 8 Description
 * @desc The description shown when Option 8 is highlighted.
 * Use \n to create a new line
 * @default This determines the amount of \c[3]green\c[0] tone within \nthe window's base color.
 *
 * @param == Option 9 ==
 * @default
 *
 * @param Option 9 Symbol
 * @desc The symbol of the option that will use the info defined for Option 9.
 * @default windowBlue
 *
 * @param Option 9 Category
 * @desc The category that Option 9 will be placed in.
 * @default Window
 *
 * @param Option 9 Description
 * @desc The description shown when Option 9 is highlighted.
 * Use \n to create a new line
 * @default This determines the amount of \c[1]blue\c[0] tone within \nthe window's base color.
 *
 * @param == Option 10 ==
 * @default
 *
 * @param Option 10 Symbol
 * @desc The symbol of the option that will use the info defined for Option 10.
 * @default windowSkin
 *
 * @param Option 10 Category
 * @desc The category that Option 10 will be placed in.
 * @default Window
 *
 * @param Option 10 Description
 * @desc The description shown when Option 10 is highlighted.
 * Use \n to create a new line
 * @default This game's window style can be selected from a list \nof available choices using this option.
 *
 * @param == Option 11 ==
 * @default
 *
 * @param Option 11 Symbol
 * @desc The symbol of the option that will use the info defined for Option 11.
 * @default fullscreen
 *
 * @param Option 11 Category
 * @desc The category that Option 11 will be placed in.
 * @default General
 *
 * @param Option 11 Description
 * @desc The description shown when Option 11 is highlighted.
 * Use \n to create a new line
 * @default If this is turned ON, the game will be switched \nto full-screen mode.
 *
 * @param == Option 12 ==
 * @default
 *
 * @param Option 12 Symbol
 * @desc The symbol of the option that will use the info defined for Option 12.
 * @default
 *
 * @param Option 12 Category
 * @desc The category that Option 12 will be placed in.
 * @default
 *
 * @param Option 12 Description
 * @desc The description shown when Option 12 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 13 ==
 * @default
 *
 * @param Option 13 Symbol
 * @desc The symbol of the option that will use the info defined for Option 13.
 * @default
 *
 * @param Option 13 Category
 * @desc The category that Option 13 will be placed in.
 * @default
 *
 * @param Option 13 Description
 * @desc The description shown when Option 13 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 14 ==
 * @default
 *
 * @param Option 14 Symbol
 * @desc The symbol of the option that will use the info defined for Option 14.
 * @default
 *
 * @param Option 14 Category
 * @desc The category that Option 14 will be placed in.
 * @default
 *
 * @param Option 14 Description
 * @desc The description shown when Option 14 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 15 ==
 * @default
 *
 * @param Option 15 Symbol
 * @desc The symbol of the option that will use the info defined for Option 15.
 * @default
 *
 * @param Option 15 Category
 * @desc The category that Option 15 will be placed in.
 * @default
 *
 * @param Option 15 Description
 * @desc The description shown when Option 15 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 16 ==
 * @default
 *
 * @param Option 16 Symbol
 * @desc The symbol of the option that will use the info defined for Option 16.
 * @default
 *
 * @param Option 16 Category
 * @desc The category that Option 16 will be placed in.
 * @default
 *
 * @param Option 16 Description
 * @desc The description shown when Option 16 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 17 ==
 * @default
 *
 * @param Option 17 Symbol
 * @desc The symbol of the option that will use the info defined for Option 17.
 * @default
 *
 * @param Option 17 Category
 * @desc The category that Option 17 will be placed in.
 * @default
 *
 * @param Option 17 Description
 * @desc The description shown when Option 17 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 18 ==
 * @default
 *
 * @param Option 18 Symbol
 * @desc The symbol of the option that will use the info defined for Option 18.
 * @default
 *
 * @param Option 18 Category
 * @desc The category that Option 18 will be placed in.
 * @default
 *
 * @param Option 18 Description
 * @desc The description shown when Option 18 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 19 ==
 * @default
 *
 * @param Option 19 Symbol
 * @desc The symbol of the option that will use the info defined for Option 19.
 * @default
 *
 * @param Option 19 Category
 * @desc The category that Option 19 will be placed in.
 * @default
 *
 * @param Option 19 Description
 * @desc The description shown when Option 19 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 20 ==
 * @default
 *
 * @param Option 20 Symbol
 * @desc The symbol of the option that will use the info defined for Option 20.
 * @default
 *
 * @param Option 20 Category
 * @desc The category that Option 20 will be placed in.
 * @default
 *
 * @param Option 20 Description
 * @desc The description shown when Option 20 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 21 ==
 * @default
 *
 * @param Option 21 Symbol
 * @desc The symbol of the option that will use the info defined for Option 21.
 * @default
 *
 * @param Option 21 Category
 * @desc The category that Option 21 will be placed in.
 * @default
 *
 * @param Option 21 Description
 * @desc The description shown when Option 21 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 22 ==
 * @default
 *
 * @param Option 22 Symbol
 * @desc The symbol of the option that will use the info defined for Option 22.
 * @default
 *
 * @param Option 22 Category
 * @desc The category that Option 22 will be placed in.
 * @default
 *
 * @param Option 22 Description
 * @desc The description shown when Option 22 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 23 ==
 * @default
 *
 * @param Option 23 Symbol
 * @desc The symbol of the option that will use the info defined for Option 23.
 * @default
 *
 * @param Option 23 Category
 * @desc The category that Option 23 will be placed in.
 * @default
 *
 * @param Option 23 Description
 * @desc The description shown when Option 23 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 24 ==
 * @default
 *
 * @param Option 24 Symbol
 * @desc The symbol of the option that will use the info defined for Option 24.
 * @default
 *
 * @param Option 24 Category
 * @desc The category that Option 24 will be placed in.
 * @default
 *
 * @param Option 24 Description
 * @desc The description shown when Option 24 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 25 ==
 * @default
 *
 * @param Option 25 Symbol
 * @desc The symbol of the option that will use the info defined for Option 25.
 * @default
 *
 * @param Option 25 Category
 * @desc The category that Option 25 will be placed in.
 * @default
 *
 * @param Option 25 Description
 * @desc The description shown when Option 25 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 26 ==
 * @default
 *
 * @param Option 26 Symbol
 * @desc The symbol of the option that will use the info defined for Option 26.
 * @default
 *
 * @param Option 26 Category
 * @desc The category that Option 26 will be placed in.
 * @default
 *
 * @param Option 26 Description
 * @desc The description shown when Option 26 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 27 ==
 * @default
 *
 * @param Option 27 Symbol
 * @desc The symbol of the option that will use the info defined for Option 27.
 * @default
 *
 * @param Option 27 Category
 * @desc The category that Option 27 will be placed in.
 * @default
 *
 * @param Option 27 Description
 * @desc The description shown when Option 27 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 28 ==
 * @default
 *
 * @param Option 28 Symbol
 * @desc The symbol of the option that will use the info defined for Option 28.
 * @default
 *
 * @param Option 28 Category
 * @desc The category that Option 28 will be placed in.
 * @default
 *
 * @param Option 28 Description
 * @desc The description shown when Option 28 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 29 ==
 * @default
 *
 * @param Option 29 Symbol
 * @desc The symbol of the option that will use the info defined for Option 29.
 * @default
 *
 * @param Option 29 Category
 * @desc The category that Option 29 will be placed in.
 * @default
 *
 * @param Option 29 Description
 * @desc The description shown when Option 29 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 30 ==
 * @default
 *
 * @param Option 30 Symbol
 * @desc The symbol of the option that will use the info defined for Option 30.
 * @default
 *
 * @param Option 30 Category
 * @desc The category that Option 30 will be placed in.
 * @default
 *
 * @param Option 30 Description
 * @desc The description shown when Option 30 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 31 ==
 * @default
 *
 * @param Option 31 Symbol
 * @desc The symbol of the option that will use the info defined for Option 31.
 * @default
 *
 * @param Option 31 Category
 * @desc The category that Option 31 will be placed in.
 * @default
 *
 * @param Option 31 Description
 * @desc The description shown when Option 31 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 32 ==
 * @default
 *
 * @param Option 32 Symbol
 * @desc The symbol of the option that will use the info defined for Option 32.
 * @default
 *
 * @param Option 32 Category
 * @desc The category that Option 32 will be placed in.
 * @default
 *
 * @param Option 32 Description
 * @desc The description shown when Option 32 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 33 ==
 * @default
 *
 * @param Option 33 Symbol
 * @desc The symbol of the option that will use the info defined for Option 33.
 * @default
 *
 * @param Option 33 Category
 * @desc The category that Option 33 will be placed in.
 * @default
 *
 * @param Option 33 Description
 * @desc The description shown when Option 33 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 34 ==
 * @default
 *
 * @param Option 34 Symbol
 * @desc The symbol of the option that will use the info defined for Option 34.
 * @default
 *
 * @param Option 34 Category
 * @desc The category that Option 34 will be placed in.
 * @default
 *
 * @param Option 34 Description
 * @desc The description shown when Option 34 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 35 ==
 * @default
 *
 * @param Option 35 Symbol
 * @desc The symbol of the option that will use the info defined for Option 35.
 * @default
 *
 * @param Option 35 Category
 * @desc The category that Option 35 will be placed in.
 * @default
 *
 * @param Option 35 Description
 * @desc The description shown when Option 35 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 36 ==
 * @default
 *
 * @param Option 36 Symbol
 * @desc The symbol of the option that will use the info defined for Option 36.
 * @default
 *
 * @param Option 36 Category
 * @desc The category that Option 36 will be placed in.
 * @default
 *
 * @param Option 36 Description
 * @desc The description shown when Option 36 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 37 ==
 * @default
 *
 * @param Option 37 Symbol
 * @desc The symbol of the option that will use the info defined for Option 37.
 * @default
 *
 * @param Option 37 Category
 * @desc The category that Option 37 will be placed in.
 * @default
 *
 * @param Option 37 Description
 * @desc The description shown when Option 37 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 38 ==
 * @default
 *
 * @param Option 38 Symbol
 * @desc The symbol of the option that will use the info defined for Option 38.
 * @default
 *
 * @param Option 38 Category
 * @desc The category that Option 38 will be placed in.
 * @default
 *
 * @param Option 38 Description
 * @desc The description shown when Option 38 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 39 ==
 * @default
 *
 * @param Option 39 Symbol
 * @desc The symbol of the option that will use the info defined for Option 39.
 * @default
 *
 * @param Option 39 Category
 * @desc The category that Option 39 will be placed in.
 * @default
 *
 * @param Option 39 Description
 * @desc The description shown when Option 39 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 40 ==
 * @default
 *
 * @param Option 40 Symbol
 * @desc The symbol of the option that will use the info defined for Option 40.
 * @default
 *
 * @param Option 40 Category
 * @desc The category that Option 40 will be placed in.
 * @default
 *
 * @param Option 40 Description
 * @desc The description shown when Option 40 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 41 ==
 * @default
 *
 * @param Option 41 Symbol
 * @desc The symbol of the option that will use the info defined for Option 41.
 * @default
 *
 * @param Option 41 Category
 * @desc The category that Option 41 will be placed in.
 * @default
 *
 * @param Option 41 Description
 * @desc The description shown when Option 41 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 42 ==
 * @default
 *
 * @param Option 42 Symbol
 * @desc The symbol of the option that will use the info defined for Option 42.
 * @default
 *
 * @param Option 42 Category
 * @desc The category that Option 42 will be placed in.
 * @default
 *
 * @param Option 42 Description
 * @desc The description shown when Option 42 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 43 ==
 * @default
 *
 * @param Option 43 Symbol
 * @desc The symbol of the option that will use the info defined for Option 43.
 * @default
 *
 * @param Option 43 Category
 * @desc The category that Option 43 will be placed in.
 * @default
 *
 * @param Option 43 Description
 * @desc The description shown when Option 43 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 44 ==
 * @default
 *
 * @param Option 44 Symbol
 * @desc The symbol of the option that will use the info defined for Option 44.
 * @default
 *
 * @param Option 44 Category
 * @desc The category that Option 44 will be placed in.
 * @default
 *
 * @param Option 44 Description
 * @desc The description shown when Option 44 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 45 ==
 * @default
 *
 * @param Option 45 Symbol
 * @desc The symbol of the option that will use the info defined for Option 45.
 * @default
 *
 * @param Option 45 Category
 * @desc The category that Option 45 will be placed in.
 * @default
 *
 * @param Option 45 Description
 * @desc The description shown when Option 45 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 46 ==
 * @default
 *
 * @param Option 46 Symbol
 * @desc The symbol of the option that will use the info defined for Option 46.
 * @default
 *
 * @param Option 46 Category
 * @desc The category that Option 46 will be placed in.
 * @default
 *
 * @param Option 46 Description
 * @desc The description shown when Option 46 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 47 ==
 * @default
 *
 * @param Option 47 Symbol
 * @desc The symbol of the option that will use the info defined for Option 47.
 * @default
 *
 * @param Option 47 Category
 * @desc The category that Option 47 will be placed in.
 * @default
 *
 * @param Option 47 Description
 * @desc The description shown when Option 47 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 48 ==
 * @default
 *
 * @param Option 48 Symbol
 * @desc The symbol of the option that will use the info defined for Option 48.
 * @default
 *
 * @param Option 48 Category
 * @desc The category that Option 48 will be placed in.
 * @default
 *
 * @param Option 48 Description
 * @desc The description shown when Option 48 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 49 ==
 * @default
 *
 * @param Option 49 Symbol
 * @desc The symbol of the option that will use the info defined for Option 49.
 * @default
 *
 * @param Option 49 Category
 * @desc The category that Option 49 will be placed in.
 * @default
 *
 * @param Option 49 Description
 * @desc The description shown when Option 49 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @param == Option 50 ==
 * @default
 *
 * @param Option 50 Symbol
 * @desc The symbol of the option that will use the info defined for Option 50.
 * @default
 *
 * @param Option 50 Category
 * @desc The category that Option 50 will be placed in.
 * @default
 *
 * @param Option 50 Description
 * @desc The description shown when Option 50 is highlighted.
 * Use \n to create a new line
 * @default
 *
 * @help
 *
 * Options Upgrade
 * Version 1.02
 * SumRndmDde
 *
 *
 * This Plugin upgrades the Options Menu!
 * The options are placed into different categories and a description window
 * has been added.
 *
 * One may also manipulate the various positions of all the windows, and can
 * control the rows/colums for the category window.
 *
 *
 * ==========================================================================
 *  Setting up Categories/Descriptions
 * ==========================================================================
 *
 * By default, all of the default options have descriptions and categories
 * set up for them. These are all customized through the Parameters.
 *
 * If an option does not have a category assigned to it, it will be placed
 * in the default category. If an option does not have a description, one
 * will not be used.
 *
 *
 * In order to assign a category or description, you'll need the symbol
 * for the command.
 *
 * First, place the command in an Option X Symbol Parameter.
 *
 * Once you do so, then the Option X Category and Option X Description will
 * be used with the option associated with this symbol.
 *
 *
 * ==========================================================================
 *  Window Color Customizers
 * ==========================================================================
 *
 * This plugin also adds options to change the tone of the game's windows.
 *
 * You can remove these by setting the "Add Window Colors?" parameter to false.
 *
 * Keep in mind that doing so may leave the "Window" category blank. Be sure
 * to remove the category from the list if that happens. However, you could
 * simply add other options to it if necessary.
 *
 *
 * ==========================================================================
 *  End of Help File
 * ==========================================================================
 *
 * Welcome to the bottom of the Help file.
 *
 *
 * Thanks for reading!
 * If you have questions, or if you enjoyed this Plugin, please check
 * out my YouTube channel!
 *
 * https://www.youtube.com/c/SumRndmDde
 *
 *
 * Until next time,
 *   ~ SumRndmDde
 *
 */

var SRD = SRD || {};
SRD.OptionsUpgrade = SRD.OptionsUpgrade || {};

var Imported = Imported || {};
Imported["SumRndmDde Options Upgrade"] = 1.02;

function Window_OptionsCategory() {
	this.initialize.apply(this, arguments);
}

(function(_) {

"use strict";

var params = PluginManager.parameters('SRD_OptionsUpgrade');

_.categories = String(params['Categories']).split(/\s*,\s*/);
_.default = String(params['Default Category']);
_.addColors = String(params['Add Window Colors?']).trim().toLowerCase() === 'true';
_.addReset = String(params['Add Reset Option?']).trim().toLowerCase() === 'true';
_.resetName = String(params['Reset Option Name']);
_.resetSE = String(params['Reset Option SE']);

_.categoryCols = String(params['Category Window Cols']);
_.categoryRows = String(params['Category Window Rows']);
_.categoryX = String(params['Category Window X']);
_.categoryY = String(params['Category Window Y']);
_.categoryWidth = String(params['Category Window Width']);
_.categoryAlign = String(params['Category Text Align']);

_.optionsX = String(params['Options Window X']);
_.optionsY = String(params['Options Window Y']);
_.optionsWidth = String(params['Options Window Width']);

_.helpX = String(params['Help Window X']);
_.helpY = String(params['Help Window Y']);

_.windowRedText = String(params['Window Red Text'] || "Window Red");
_.windowGreenText = String(params['Window Green Text'] || "Window Green");
_.windowBlueText = String(params['Window Blue Text'] || "Window Blue");

_.commands = [];
_.comCategories = [];
_.comDescriptions = [];

for(var i = 1; i <= 50; i++) {
	var symbol = String(params['Option ' + i + ' Symbol']);
	if(symbol.trim().length > 0) {
		var category = String(params['Option ' + i + ' Category']);
		var description = String(params['Option ' + i + ' Description']).replace('\\n', '\n');
		_.commands[i - 1] = symbol;
		_.comCategories[i - 1] = category;
		_.comDescriptions[i - 1] = description;
	}
}

//-----------------------------------------------------------------------------
// Scene_Options
//-----------------------------------------------------------------------------

var _Scene_Options_create = Scene_Options.prototype.create;
Scene_Options.prototype.create = function() {
	_Scene_Options_create.apply(this, arguments);
	this.createMessageWindow();
	this._optionsWindow.deactivate();
	this._optionsWindow.deselect();
	this.createCategoryWindow();
	this.createHelpWindow();
	for(var i = 0; i < 2; i++) {
		this._helpWindow.x = eval(_.helpX);
		this._helpWindow.y = eval(_.helpY);
		this._categoryWindow.x = eval(_.categoryX);
		this._categoryWindow.y = eval(_.categoryY);
	}
	this._optionsWindow.setCategoryWindow(this._categoryWindow);
};

Scene_Options.prototype.onCategoryOk = function() {
	this._optionsWindow.activate();
	this._optionsWindow.select(0);
};

Scene_Options.prototype.onCategoryCancel = function() {
	//$gameMessage.add('Do you wish to save these settings?');
	this.popScene();
};

Scene_Options.prototype.onCategoryReset = function() {
	ConfigManager.applyData({});
	this._optionsWindow.deselect();
	this._categoryWindow.activate();
	this._helpWindow.clear();
};

Scene_Options.prototype.onOptionsCancel = function() {
	this._optionsWindow.deselect();
	this._categoryWindow.activate();
	this._helpWindow.clear();
};

var _Scene_Options_createOptionsWindow = Scene_Options.prototype.createOptionsWindow;
Scene_Options.prototype.createOptionsWindow = function() {
	_Scene_Options_createOptionsWindow.apply(this, arguments);
	this._optionsWindow.setHandler('cancel', this.onOptionsCancel.bind(this));
};

Scene_Options.prototype.createCategoryWindow = function() {
	this._categoryWindow = new Window_OptionsCategory();
	this._categoryWindow.setHandler('ok', this.onCategoryOk.bind(this));
	this._categoryWindow.setHandler('cancel', this.onCategoryCancel.bind(this));
	this._categoryWindow.setHandler('srd-reset-and-stuff', this.onCategoryReset.bind(this));
	this._categoryWindow.setOptionsWindow(this._optionsWindow);
	this.addWindow(this._categoryWindow);
};

Scene_Options.prototype.createHelpWindow = function() {
	this._helpWindow = new Window_Help();
	this._optionsWindow.setHelpWindow(this._helpWindow);
	this.addWindow(this._helpWindow);
};

Scene_Options.prototype.createMessageWindow = function() {
	this._messageWindow = new Window_Message();
	this.addWindow(this._messageWindow);
	this._messageWindow.subWindows().forEach(function(window) {
		this.addWindow(window);
	}, this);
};

//-----------------------------------------------------------------------------
// Window_OptionsCategory
//-----------------------------------------------------------------------------

Window_OptionsCategory.prototype = Object.create(Window_HorzCommand.prototype);
Window_OptionsCategory.prototype.constructor = Window_OptionsCategory;

Window_OptionsCategory.prototype.initialize = function() {
	Window_HorzCommand.prototype.initialize.call(this, 0, 0);
};

Window_OptionsCategory.prototype.windowWidth = function() {
	return eval(_.categoryWidth);
};

Window_OptionsCategory.prototype.maxCols = function() {
	return eval(_.categoryCols);
};

Window_OptionsCategory.prototype.numVisibleRows = function() {
	return eval(_.categoryRows);
};

Window_OptionsCategory.prototype.update = function() {
	Window_HorzCommand.prototype.update.call(this);
	if (this._optionsWindow && this.currentSymbol() != this._optionsWindow.getCategory()) {
		this._optionsWindow.setCategory(this.currentSymbol());
	}
};

Window_OptionsCategory.prototype.makeCommandList = function() {
	for(var i = 0; i < _.categories.length; i++) {
	if(i==0){var icon = 1192};
	if(i==1){var icon = 1193};
	if(i==2){var icon = 1194};
		this.addCommand("\\I[" + icon + "]" + _.categories[i], _.categories[i]);
	}
	if(_.addReset) this.addCommand(_.resetName, 'srd-reset-and-stuff');
};

Window_OptionsCategory.prototype.setOptionsWindow = function(optionsWindow) {
	this._optionsWindow = optionsWindow;
	this.update();
};

Window_OptionsCategory.prototype.playOkSound = function() {
	if(this.currentSymbol() != 'srd-reset-and-stuff') {
		SoundManager.playOk();
	} else {
		AudioManager.playSe({"name":_.resetSE,"pan":0,"pitch":100,"volume":100});
	}
};

Window_OptionsCategory.prototype.itemTextAlign = function() {
	return _.categoryAlign;
};

//-----------------------------------------------------------------------------
// Window_Options
//-----------------------------------------------------------------------------

var _Window_Options_initialize = Window_Options.prototype.initialize;
Window_Options.prototype.initialize = function() {
	this._category = _.comCategories[0];
	_Window_Options_initialize.apply(this, arguments);
	this.refresh();
};

Window_Options.prototype.windowWidth = function() {
	return eval(_.optionsWidth);
};

Window_Options.prototype.setCategory = function(category) {
	this._category = category;
	this.refresh();
};

Window_Options.prototype.getCategory = function() {
	return this._category;
};

Window_Options.prototype.updatePlacement = function() {
	if(this._helpWindow && this._categoryWindow) {
		this.x = eval(_.optionsX);
		this.y = eval(_.optionsY);
	}
};

var _Window_Command_addCommand = Window_Command.prototype.addCommand;
Window_Options.prototype.addCommand = function(name, symbol, enabled, ext) {
	var index = _.commands.indexOf(symbol);
	if(index < 0 && this._category != _.default) return;
	if(index >= 0 && this._category != _.comCategories[index]) return;
	_Window_Command_addCommand.apply(this, arguments);
};

Window_Options.prototype.makeCommandList = function() {
	this.addGeneralOptions();
	this.addVolumeOptions();
	if(_.addColors) {
		this.addCommand(_.windowRedText, 'windowRed');
		this.addCommand(_.windowGreenText, 'windowGreen');
		this.addCommand(_.windowBlueText, 'windowBlue');
	}
};

Window_Options.prototype.updateHelp = function() {
	if(this._helpWindow) {
		var index = _.commands.indexOf(this.currentData() ? this.currentData().symbol : '');
		this._helpWindow.setText(_.comDescriptions[index]);
	}
};

Window_Options.prototype.updateHeight = function() {
	if(this.height != this.windowHeight()) {
		this.height = this.windowHeight();
	}
	if(this._list.length <= 0) {
		this.visible = false;
	} else {
		this.visible = true;
	}
};

Window_Options.prototype.setHelpWindow = function(window) {
	this._helpWindow = window;
	this.updateHelp();
};

Window_Options.prototype.setCategoryWindow = function(window) {
	this._categoryWindow = window;
	this.updatePlacement();
};

Window_Options.prototype.refresh = function() {
	this.clearCommandList();
	this.makeCommandList();
	this.updateHeight();
	this.createContents();
	this.drawAllItems();
};

if(_.addColors) {

var _Window_Options_statusText = Window_Options.prototype.statusText;
Window_Options.prototype.statusText = function(index) {
	var symbol = this.commandSymbol(index);
	var value = this.getConfigValue(symbol);
	if (this.isWindowColorSymbol(symbol)) {
		return this.windowColorStatusText(value);
	} else {
		return _Window_Options_statusText.apply(this, arguments);
	}
};

Window_Options.prototype.isWindowColorSymbol = function(symbol) {
	return symbol === 'windowRed' || symbol === 'windowGreen' || symbol === 'windowBlue';
};

Window_Options.prototype.windowColorStatusText = function(value) {
	return value;
};

var _Window_Options_processOk = Window_Options.prototype.processOk;
Window_Options.prototype.processOk = function() {
	var index = this.index();
	var symbol = this.commandSymbol(index);
	var value = this.getConfigValue(symbol);
	if (this.isWindowColorSymbol(symbol)) {
		value += 5;
		if (value > 255) {
			value = 0;
		}
		value = value.clamp(-255, 255);
		this.changeValue(symbol, value);
	} else {
		_Window_Options_processOk.apply(this, arguments);
	}
};

var _Window_Options_cursorRight = Window_Options.prototype.cursorRight;
Window_Options.prototype.cursorRight = function(wrap) {
	var index = this.index();
	var symbol = this.commandSymbol(index);
	var value = this.getConfigValue(symbol);
	if (this.isWindowColorSymbol(symbol)) {
		value += 5;
		value = value.clamp(-255, 255);
		this.changeValue(symbol, value);
	} else {
		_Window_Options_cursorRight.apply(this, arguments);
	}
};

var _Window_Options_cursorLeft = Window_Options.prototype.cursorLeft;
Window_Options.prototype.cursorLeft = function(wrap) {
	var index = this.index();
	var symbol = this.commandSymbol(index);
	var value = this.getConfigValue(symbol);
	if (this.isWindowColorSymbol(symbol)) {
		value -= 5;
		value = value.clamp(-255, 255);
		this.changeValue(symbol, value);
	} else {
		_Window_Options_cursorLeft.apply(this, arguments);
	}
};

//-----------------------------------------------------------------------------
// Game_System
//-----------------------------------------------------------------------------

var _Game_System_initialize = Game_System.prototype.initialize;
Game_System.prototype.initialize = function() {
	_Game_System_initialize.apply(this, arguments);
	this.setWindowTone([ConfigManager._windowRed, ConfigManager._windowGreen, ConfigManager._windowBlue]);
};

//-----------------------------------------------------------------------------
// ConfigManager
//-----------------------------------------------------------------------------

ConfigManager._windowRed = 0;
ConfigManager._windowGreen = 0;
ConfigManager._windowBlue = 0;

Object.defineProperty(ConfigManager, 'windowRed', {
	get: function() {
		return $gameSystem ? $gameSystem.windowTone()[0] : this._windowRed;
	},
	set: function(value) {
		if($gameSystem) {
			$gameSystem.windowTone()[0] = value;
		} else {
			this._windowRed = value;
		}
	},
	configurable: true
});

Object.defineProperty(ConfigManager, 'windowGreen', {
	get: function() {
		return $gameSystem ? $gameSystem.windowTone()[1] : this._windowGreen;
	},
	set: function(value) {
		if($gameSystem) {
			$gameSystem.windowTone()[1] = value;
		} else {
			this._windowGreen = value;
		}
	},
	configurable: true
});

Object.defineProperty(ConfigManager, 'windowBlue', {
	get: function() {
		return $gameSystem ? $gameSystem.windowTone()[2] : this._windowBlue;
	},
	set: function(value) {
		if($gameSystem) {
			$gameSystem.windowTone()[2] = value;
		} else {
			this._windowBlue = value;
		}
	},
	configurable: true
});

var _ConfigManager_makeData = ConfigManager.makeData;
ConfigManager.makeData = function() {
	var config = _ConfigManager_makeData.apply(this, arguments);
	config.windowRed = this.windowRed;
	config.windowGreen = this.windowGreen;
	config.windowBlue = this.windowBlue;
	return config;
};

var _ConfigManager_applyData = ConfigManager.applyData;
ConfigManager.applyData = function(config) {
	_ConfigManager_applyData.apply(this, arguments);
	this.windowRed = this.readWindowColors(config, 'windowRed');
	this.windowGreen = this.readWindowColors(config, 'windowGreen');
	this.windowBlue = this.readWindowColors(config, 'windowBlue');
};

ConfigManager.readWindowColors = function(config, name) {
	var value = config[name];
	if (value !== undefined) {
		return parseInt(value).clamp(-255, 255);
	} else {
		return 0;
	}
};

}

})(SRD.OptionsUpgrade);


code:
/*:
 * @plugindesc 装備制限アイテム作成プラグイン（ブラックリスト機能追加）
 * @author すず
 *
 * @param DisableSwitch
 * @desc 装備制限を無効にするスイッチの番号
 * @default 0
 *
 * @param Blacklist
 * @text 非表示にする防具IDリスト
 * @type number[]
 * @default []
 * @desc 装備画面で非表示にしたい防具IDを指定します。
 *
 * @param ToggleSwitch
 * @text ブラックリスト有効化スイッチ
 * @type switch
 * @default 1
 * @desc ブラックリストを有効にするスイッチIDを指定します。
 *
 * @help
 * このプラグインは、特定の条件で装備可能なアイテムを制御します。
 *
 * ブラックリスト機能：
 * 1. プラグインパラメータ「非表示にする防具IDリスト」に防具IDを入力します。
 * 2. プラグインパラメータ「ブラックリスト有効化スイッチ」にスイッチIDを入力します。
 * 3. 指定スイッチがONの場合、リスト内の防具が装備画面から非表示になります。
 *
 * 装備可能になる条件を指定できるようになります。
 *
 * 使い方：
 *
 *    アイテムのメモ欄にタグを書き込んで使用します。
 *    <SZLEQ:[CONDITION]>
 *
 *    [CONDITION] 必須
 *      装備可能になる条件を指定します。
 *      V[n],S[n] でゲーム変数、ゲームスイッチを条件に含むことができます。
 *      また、javascriptで使用可能な各関数等も使用できます。
 *      ※不等号 > (大なり)は閉じタグとして認識されてしまうので
 *      　もし条件に含める場合は注意してください。
 *
 *      (例) アクターのレベルが30以上で装備可能
 *        <SZLEQ:30 <= this.level>
 *
 *      (例) ゲームスイッチ1がONの場合に装備可能
 *        <SZLEQ:S[1]>
 *
 *
 * プラグインパラメータ：
 *
 *    DisableSwitch
 *      番号でスイッチを指定し、そのスイッチがONの時にプラグインを無効化します。
 *      ※0を指定すると常時有効
 *      ※ただし、スイッチをON->OFFに切り替えた際に、
 *      　自動で装備が変更されないことに注意してください。
 *
 *
 */

(function(){
  "use strict";

  var parameters = PluginManager.parameters("SZLimitEquip");
  var disableSw = Number(parameters["DisableSwitch"]);
  var blacklist = JSON.parse(parameters["Blacklist"] || "[]").map(Number); // ブラックリスト
  var toggleSwitch = Number(parameters["ToggleSwitch"] || 1); // 有効化スイッチ

  Game_BattlerBase.prototype.isLimitEquip = function(){
    return (disableSw > 0) ? (!$gameSwitches.value(disableSw)) : true;
  }

  Game_BattlerBase.prototype.escapeLimitEquipParameter = function(text){
    text = text.replace(/V\[(\d+)\]/gi, function() {
      return "$gameVariables.value(" + (parseInt(arguments[1])) + ")";
    }.bind(this));
    text = text.replace(/S\[(\d+)\]/gi, function() {
      return "$gameSwitches.value(" + (parseInt(arguments[1])) + ")";
    }.bind(this));

    return text;
  }

  var _Game_BattlerBase_canEquip = Game_BattlerBase.prototype.canEquip;
  Game_BattlerBase.prototype.canEquipLegacy = function(item){
    return _Game_BattlerBase_canEquip.call(this, item);
  }

	Game_BattlerBase.prototype.canEquip = function(item){
	    if(this.canEquipLegacy(item)){
	        var meta = item.meta["SZLEQ"];
	        if(this.isLimitEquip() && meta != null){
	            var param = this.escapeLimitEquipParameter(meta);

	            // Scene_Item または Scene_Skill のときは制限を無視
	            if (SceneManager._scene.constructor === Scene_Item || SceneManager._scene.constructor === Scene_Skill) {
	                return true;
	            }

	            return (new Function("return !!(" + param + ");"))();
	        } else {
	            return true;
	        }
	    } else {
	        return false;
	    }
	};

  Window_EquipItem.prototype.makeItemList = function(){
    this._data = $gameParty.allItems().filter(function(item){
      return this.isNeedsDraw(item);
    }, this);
    if(this.isNeedsDraw(null)){
      this._data.push(null);
    }
  }

  Window_EquipItem.prototype.isNeedsDraw = function(item){
    if(item === null){
      return true;
    }
    if(item === undefined){
      return true;
    }
    if(this._slotId < 0 || item.etypeId !== this._actor.equipSlots()[this._slotId]){
      return false;
    }

    // ブラックリスト制御を追加
    if ($gameSwitches.value(toggleSwitch) && blacklist.includes(item.id)) {
      return false;
    }

    return this._actor.canEquipLegacy(item);
  }

  var _Window_EquipItem_isEnabled = Window_EquipItem.prototype.isEnabled;
  Window_EquipItem.prototype.isEnabled = function(item){
    return this._actor.canEquip(item);
  }

  var _Window_EquipItem_isCurrentItemEnabled = Window_EquipItem.prototype.isCurrentItemEnabled;
  Window_EquipItem.prototype.isCurrentItemEnabled = function(){
    var item = this.item();
    return !item ? true : this._actor.canEquip(item);
  }
})();

repo_name: dazed/translations

license: unknown


code:
//=============================================================================
// SZ_KeyWait
//=============================================================================
/*:
 * @plugindesc キーの入力を待機できるようにするプラグイン
 * @author suzu
 *
 * @help
 * e.g. this.setWaitMode('key_ok');
 */

//20221114 timer変数追記（あまり要らない）クリックでも反応するように41・42行目を追加 24行目の条件を追記 銀河

(function(){
    var _Game_Interpreter_updateWaitMode = Game_Interpreter.prototype.updateWaitMode;
    var timer = 6;
	Game_Interpreter.prototype.updateWaitMode = function(){
		if(this.isWaitKey()){
			if(this.isWaitKeyTransition()){
				this.setWaitMode('');
				return true;
			}
			var waiting = this.waitKey(this._waitMode.slice(4));
			if(Input.isPressed('ok') || Input.isPressed('cancel') || TouchInput.isPressed()){
				this.wait(timer/2)
			}else if(Input.isPressed('control')){
				this.wait(timer/3)
			}else{
				this.wait(timer);
			}
			if (!waiting) {
				this.setWaitMode('key__');
				return true;
			}
			return waiting;
		}else{
			timer = 6;
		}
		return _Game_Interpreter_updateWaitMode.call(this);
	}
	Game_Interpreter.prototype.waitKey = function(key){
		var result = !key ? !Input.isPressed('ok') : !Input.isPressed(key);
		if(result){result = !Input.isPressed('cancel')}
		if(result){result = !Input.isPressed('control')}
		if(result){result = !TouchInput.isPressed()}
		return result;
	}

	Game_Interpreter.prototype.isWaitKey = function(){
		return this._waitMode.indexOf('key_') >= 0;
	}

	Game_Interpreter.prototype.isWaitKeyTransition = function(){
		return this._waitMode === 'key__'
	}
})();


code:
/*:
 * @plugindesc ウィンドウの各種表示に計算/関数を追加します
 * @author suzu
 * @help ウィンドウの表示に計算を使用可能になります
 *
 * 使い方：\F[計算式]
 *
 */
(function(){
    var _Window_Base_convertEscapeCharacters = Window_Base.prototype.convertEscapeCharacters;
    Window_Base.prototype.convertEscapeCharacters = function(text) {
        let _text = _Window_Base_convertEscapeCharacters.call(this, text);
        _text = _text.replace(/\x1bF\[(.*?)\]/gi, function(){
            return Function(`'use strict'; return (${arguments[1]});`)();
        }.bind(this));
        return _text;
    };
})();


code:
//=============================================================================
// ScopeExtend.js
// ----------------------------------------------------------------------------
// Copyright (c) 2015-2017 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.6.1 2018/06/09　範囲が「なし」になっているグループ攻撃使用時にエラーになる問題を修正
// 1.6.0 2017/07/09 「敵単体（戦闘不能）」および「敵全体（戦闘不能）」の効果範囲を追加
// 1.5.1 2017/02/21 グループ対象に指定したスキルが「隠れ状態」の敵にも当たってしまう問題を修正
// 1.5.0 2016/12/02 味方に対してN回ランダム選択できる機能を追加
// 1.4.0 2016/12/02 ランダム設定に対象人数を設定できる機能を追加
// 1.3.0 2016/09/15 敵N回ランダムのスキルに対して5回以上の繰り返しを指定できる機能を追加
// 1.2.0 2016/09/06 敵グループ内で同じIDの敵キャラ全員を対象にできるスコープを追加
// 1.1.0 2016/07/20 ターゲットの中から重複を除外できる機能を追加
// 1.0.0 2016/06/20 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc ScopeExtendPlugin
 * @author triacontane
 *
 * @help データベースのスキルの効果範囲を拡張します。
 * スキルのメモ欄に以下の通り入力してください。
 *
 * <SE敵味方> <SEEnemiesAndAllies>
 * 効果範囲が敵味方に拡大されます。詳細は以下の通りです。
 *
 * もともとの効果範囲に合わせて以下の通り拡大されます。
 * ・敵単体：生存している味方単体がランダムで一人追加
 * ・敵全体：生存している味方全体が追加
 * ・敵N体ランダム：敵味方N体ランダムに変更
 * ・味方単体：生存している敵単体がランダムで一人追加
 * ・味方全体：生存している敵全体が追加
 * ・味方単体（戦闘不能）：死亡している敵単体がランダムで一人追加
 * ・味方全体（戦闘不能）：死亡している敵全体が追加
 * ・使用者：生存している敵単体がランダムで一人追加
 *
 * <SE使用者追加> <SEAdditionUser>
 * 元々の選択範囲に使用者が追加されます。
 *
 * <SE使用者除外> <SERemoveUser>
 * 元々の選択範囲から使用者が除外されます。
 *
 * <SE重複除外> <SERemoveDuplication>
 * 元々の選択範囲から重複ターゲットが除外されます。
 *
 * <SEランダム:n> <SERandom:n>
 * 元々の選択範囲の中からランダムでn人だけが選択されます。
 * 狙われ率の影響しない純粋なランダムです。
 * 値を省略するとランダムで一人が選択されます。
 *
 * <SEグループ> <SEGroup>
 * 敵グループ内に、指定した敵単体と同じIDの敵キャラがいる場合、全員選択されます。
 * 味方の場合は味方全員が無条件で選択されます。
 *
 * <SEランダム回数:5> <SERandomNum:5>
 * 「敵N体ランダム」を効果範囲にしたスキルに対して、
 * もともとの設定上限(4回)を超えて、5回以上実行したい場合に指定します。
 * 回数の指定には制御文字\v[n]およびJavaScript計算式が利用できます。
 *
 * さらに「味方全体」を効果範囲にしたスキルに対して設定すると
 * 「味方N体ランダム」を効果範囲にできます。
 *
 * <SE戦闘不能> <SEDead>
 * もともとの効果範囲が「敵単体」「敵全体」のスキルに対して
 * 対象を戦闘不能者に限定します。
 * 敵を蘇生させる等のスキルが作成できますが、「敵単体（戦闘不能）」は
 * 敵キャラ専用のスキルになります。
 * （アクターが使用しても正しく対象を選択できません）
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */
/*:ja
 * @plugindesc 効果範囲拡張プラグイン
 * @author トリアコンタン
 *
 * @help データベースのスキルの効果範囲を拡張します。
 * スキルのメモ欄に以下の通り入力してください。
 *
 * <SE敵味方> <SEEnemiesAndAllies>
 * 効果範囲が敵味方に拡大されます。詳細は以下の通りです。
 *
 * もともとの効果範囲に合わせて以下の通り拡大されます。
 * ・敵単体：生存している味方単体がランダムで一人追加
 * ・敵全体：生存している味方全体が追加
 * ・敵N体ランダム：敵味方N体ランダムに変更
 * ・味方単体：生存している敵単体がランダムで一人追加
 * ・味方全体：生存している敵全体が追加
 * ・味方単体（戦闘不能）：死亡している敵単体がランダムで一人追加
 * ・味方全体（戦闘不能）：死亡している敵全体が追加
 * ・使用者：生存している敵単体がランダムで一人追加
 *
 * <SE使用者追加> <SEAdditionUser>
 * 元々の選択範囲に使用者が追加されます。
 *
 * <SE使用者除外> <SERemoveUser>
 * 元々の選択範囲から使用者が除外されます。
 *
 * <SE重複除外> <SERemoveDuplication>
 * 元々の選択範囲から重複ターゲットが除外されます。
 *
 * <SEランダム:n> <SERandom:n>
 * 元々の選択範囲の中からランダムでn人だけが選択されます。
 * 狙われ率の影響しない純粋なランダムです。
 * 値を省略するとランダムで一人が選択されます。
 *
 * <SEグループ> <SEGroup>
 * 敵グループ内に、指定した敵単体と同じIDの敵キャラがいる場合、全員選択されます。
 * 味方の場合は味方全員が無条件で選択されます。
 *
 * <SEランダム回数:5> <SERandomNum:5>
 * 「敵N体ランダム」を効果範囲にしたスキルに対して、
 * もともとの設定上限(4回)を超えて、5回以上実行したい場合に指定します。
 * 回数の指定には制御文字\v[n]およびJavaScript計算式が利用できます。
 *
 * さらに「味方全体」を効果範囲にしたスキルに対して設定すると
 * 「味方N体ランダム」を効果範囲にできます。
 *
 * <SE戦闘不能> <SEDead>
 * もともとの効果範囲が「敵単体」「敵全体」のスキルに対して
 * 対象を戦闘不能者に限定します。
 * 敵を蘇生させる等のスキルが作成できますが、「敵単体（戦闘不能）」は
 * 敵キャラ専用のスキルになります。
 * （アクターが使用しても正しく対象を選択できません）
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function() {
    'use strict';
    var metaTagPrefix = 'SE';

    var getArgNumberWithEval = function(arg, min, max) {
        if (arguments.length < 2) min = -Infinity;
        if (arguments.length < 3) max = Infinity;
        return (parseInt(eval(convertEscapeCharacters(arg)), 10) || 0).clamp(min, max);
    };

    var getMetaValue = function(object, name) {
        var metaTagName = metaTagPrefix + (name ? name : '');
        return object.meta.hasOwnProperty(metaTagName) ? object.meta[metaTagName] : undefined;
    };

    var getMetaValues = function(object, names) {
        if (!Array.isArray(names)) return getMetaValue(object, names);
        for (var i = 0, n = names.length; i < n; i++) {
            var value = getMetaValue(object, names[i]);
            if (value !== undefined) return value;
        }
        return undefined;
    };

    var getArgNumber = function(arg, min, max) {
        if (arguments.length < 2) min = -Infinity;
        if (arguments.length < 3) max = Infinity;
        return (parseInt(convertEscapeCharacters(arg), 10) || 0).clamp(min, max);
    };

    var convertEscapeCharacters = function(text) {
        if (text == null) text = '';
        var windowLayer = SceneManager._scene._windowLayer;
        return windowLayer ? windowLayer.children[0].convertEscapeCharacters(text) : text;
    };

    //=============================================================================
    // Game_Unit
    //  味方キャラをランダム選択します。
    //=============================================================================
    Game_Unit.prototype.randomFriendTarget = function() {
        var members = this.aliveMembers();
        return members[Math.floor(Math.random() * members.length)];
    };

    //=============================================================================
    // Game_Action
    //  効果範囲をメモ欄の記述に基づいて拡張します。
    //=============================================================================
    var _Game_Action_repeatTargets = Game_Action.prototype.repeatTargets;
    Game_Action.prototype.repeatTargets = function(targets) {
        if (this.isScopeExtendInfo(['敵味方', 'EnemiesAndAllies'])) {
            if (!this.subject().isConfused() || this._forcing) {
                targets = this.targetsForAll(targets);
            }
        }
        if (this.isScopeExtendInfo(['使用者追加', 'AdditionUser'])) {
            if (!targets.contains(this.subject())) {
                targets.push(this.subject());
            }
        }
        if (this.isScopeExtendInfo(['使用者除外', 'RemoveUser', '使用者削除'])) {
            targets = targets.filter(function(target) {
                return target !== this.subject();
            }.bind(this));
        }
        if (this.isScopeExtendInfo(['重複除外', 'RemoveDuplication', '重複削除'])) {
            targets = targets.filter(function(target, i) {
                return targets.indexOf(target) === i;
            }.bind(this));
        }
        if (this.isScopeExtendInfo(['ランダム', 'Random'])) {
            var number = this.getScopeExtendInfo(['ランダム', 'Random']);
            var targetsForRandom = [];
            while (targetsForRandom.length < number && targets.length > targetsForRandom.length) {
                var index = Math.floor(Math.random() * targets.length);
                if (!targetsForRandom.contains(targets[index])) {
                    targetsForRandom.push(targets[index]);
                }
            }
            targets = targetsForRandom;
        }
        if (this.isScopeExtendInfo(['グループ', 'Group']) && targets[0]) {
            var targetsForGroup, prevTarget = targets[0];
            if (prevTarget.isActor()) {
                targetsForGroup = prevTarget.friendsUnit().aliveMembers();
            } else {
                targetsForGroup = prevTarget.friendsUnit().aliveMembers().filter(function(member) {
                    return prevTarget.enemyId() === member.enemyId();
                });
            }
            targets = targetsForGroup;
        }
        arguments[0] = targets;
        return _Game_Action_repeatTargets.apply(this, arguments);
    };

    var _Game_Action_numTargets = Game_Action.prototype.numTargets;
    Game_Action.prototype.numTargets = function() {
        var metaValue = getMetaValues(this.item(), ['RandomNum', 'ランダム回数']);
        return metaValue ? getArgNumberWithEval(metaValue, 1) : _Game_Action_numTargets.apply(this, arguments);
    };

    var _Game_Action_targetsForOpponents = Game_Action.prototype.targetsForOpponents;
    Game_Action.prototype.targetsForOpponents = function() {
        var targets = _Game_Action_targetsForOpponents.apply(this, arguments);
        if (this.isForDeadOpponent()) {
            var unit = this.opponentsUnit();
            if (this.isForOne()) {
                targets = [unit.smoothDeadTarget(this._targetIndex)];
            } else {
                targets = unit.deadMembers();
            }
        }
        return targets;
    };

    var _Game_Action_targetsForFriends = Game_Action.prototype.targetsForFriends;
    Game_Action.prototype.targetsForFriends = function() {
        var targets = _Game_Action_targetsForFriends.apply(this, arguments);
        var numTargets = this.numTargets();
        if (this.isForAll() && numTargets > 0) {
            var friendUnit = this.friendsUnit();
            targets = [];
            for (var i = 0; i < numTargets; i++) {
                targets.push(friendUnit.randomFriendTarget());
            }
        }
        return targets;
    };

    Game_Action.prototype.targetsForAll = function(targets) {
        var opponentsUnit = this.opponentsUnit();
        var friendsUnit = this.friendsUnit();
        var anotherUnit = this.isForFriend() ? opponentsUnit : friendsUnit;
        if (this.isForUser()) {
            targets.push(opponentsUnit.randomTarget());
        } else if (this.isForRandom()) {
            targets = [];
            for (var i = 0; i < this.numTargets(); i++) {
                var opponentsLength = opponentsUnit.aliveMembers().length;
                var friendLength = friendsUnit.aliveMembers().length;
                if (Math.randomInt(opponentsLength + friendLength) >= opponentsLength) {
                    targets.push(friendsUnit.randomTarget());
                } else {
                    targets.push(opponentsUnit.randomTarget());
                }
            }
        } else if (this.isForDeadFriend()) {
            if (this.isForOne()) {
                targets.push(opponentsUnit.randomDeadTarget());
            } else {
                targets = targets.concat(opponentsUnit.deadMembers());
            }
        } else if (this.isForDeadOpponent()) {
            if (this.isForOne()) {
                targets.push(friendsUnit.randomDeadTarget());
            } else {
                targets = targets.concat(friendsUnit.deadMembers());
            }
        } else if (this.isForOne()) {
            targets.push(anotherUnit.randomTarget());
        } else {
            targets = targets.concat(anotherUnit.aliveMembers());
        }
        return targets;
    };

    var _Game_Action_testApply = Game_Action.prototype.testApply;
    Game_Action.prototype.testApply = function(target) {
        return _Game_Action_testApply.apply(this, arguments) || (this.isForDeadOpponent() && target.isDead());
    };

    Game_Action.prototype.isForDeadOpponent = function() {
        return this.checkItemScope([1, 2]) && getMetaValues(this.item(), ['Dead', '戦闘不能']);
    };

    Game_Action.prototype.isScopeExtendInfo = function(names) {
        return !!getMetaValues(this.item(), names);
    };

    Game_Action.prototype.getScopeExtendInfo = function(names) {
        var result = getArgNumber(getMetaValues(this.item(), names));
        return result === true ? 1 : result;
    };
})();


code:
//=============================================================================
// SealActorCommand.js
// ----------------------------------------------------------------------------
// Copyright (c) 2015-2017 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.4.1 2020/06/23 スキルの封印時にスキルタイプを指定できるように変更(by suzu)
// 1.4.0 2018/12/22 禁止コマンドの上に文字を被せられる機能を追加
// 1.3.0 2018/12/17 封印したコマンドを非表示ではなく使用禁止にできる機能を追加
// 1.2.0 2017/03/08 アイテム使用をスキルのひとつとして作成できる機能を追加
// 1.1.0 2017/02/23 封印対象にスキルを追加
// 1.0.0 2017/02/22 初版
// ----------------------------------------------------------------------------
// [Blog]   : http://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
 * @plugindesc SealActorCommandPlugin
 * @author triacontane
 *
 * @param commandDisable
 * @desc 封印したコマンドを非表示ではなく使用禁止にします。
 * @default false
 * @type boolean
 *
 * @param disableSign
 * @desc 使用禁止にしたコマンドのうえに被せる文字列です。(コマンド使用禁止が有効な場合のみ機能します)
 * @default \i[1]\i[1]\i[1]
 *
 * @help アクターコマンド「攻撃」「防御」「アイテム」「スキル」を封印できます。
 * 封印されたコマンドはウィンドウから消失します。
 * 特定のコマンドが使用できないアクター、職業、装備品、ステートが作成できます。
 * さらに、スイッチやJavaScript計算式により、細かい条件が指定できます。
 *
 * 特徴を有するデータベースのメモ欄に以下の通り記入してください。
 *
 * <SAC攻撃封印スイッチ:4>   # ID[4]のスイッチがONのとき攻撃を封印
 * <SACAttackSwitch:4>       # 同上
 * <SAC防御封印スイッチ:5>   # ID[5]のスイッチがONのとき防御を封印
 * <SACGuardSwitch:5>        # 同上
 * <SAC道具封印スイッチ:6>   # ID[6]のスイッチがONのときアイテムを封印
 * <SACItemSwitch:6>         # 同上
 * <SACスキル封印スイッチ:7> # ID[7]のスイッチがONのときスキルを封印
 * <SACSkillSwitch:7>        # 同上
 * <SAC攻撃封印計算式:f>     # 計算式[f]の結果がtrueのとき攻撃を封印
 * <SACAttackFormula:f>      # 同上
 * <SAC防御封印計算式:f>     # 計算式[f]の結果がtrueのとき防御を封印
 * <SACGuardFormula:f>       # 同上
 * <SAC道具封印計算式:f>     # 計算式[f]の結果がtrueのときアイテムを封印
 * <SACItemFormula:f>        # 同上
 * <SACスキル封印計算式:f>   # 計算式[f]の結果がtrueのときスキルを封印
 * <SACSkillFormula:f>       # 同上
 *
 * 文章、スクリプト中で不等号を使いたい場合、以下のように記述してください。
 * < → <
 * > → >
 * 例
 * <SACAttackFormula:\v[1] >= 5> # 変数[1]が5以下の場合攻撃封印
 * <SACGuardFormula:true>           # 常に防御封印
 *
 * 注意！
 * 全てのコマンドを封印するとゲームが続行不可になります。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * This plugin is released under the MIT License.
 */
/*:ja
 * @plugindesc アクターコマンド封印プラグイン
 * @author トリアコンタン
 *
 * @param commandDisable
 * @text コマンド使用禁止
 * @desc 封印したコマンドを非表示ではなく使用禁止にします。
 * @default false
 * @type boolean
 *
 * @param disableSign
 * @text 使用禁止サイン
 * @desc 使用禁止にしたコマンドのうえに被せる文字列です。(コマンド使用禁止が有効な場合のみ機能します)
 * @default \c[2]\i[1]禁止\i[1]
 *
 * @help アクターコマンド「攻撃」「防御」「アイテム」「スキル」を封印できます。
 * 封印されたコマンドはウィンドウから消失します。
 * 特定のコマンドが使用できないアクター、職業、装備品、ステートが作成できます。
 * さらに、スイッチやJavaScript計算式により、細かい条件が指定できます。
 *
 * 特徴を有するデータベースのメモ欄に以下の通り記入してください。
 *
 * <SAC攻撃封印スイッチ:4>   # ID[4]のスイッチがONのとき攻撃を封印
 * <SACAttackSwitch:4>       # 同上
 * <SAC防御封印スイッチ:5>   # ID[5]のスイッチがONのとき防御を封印
 * <SACGuardSwitch:5>        # 同上
 * <SAC道具封印スイッチ:6>   # ID[6]のスイッチがONのときアイテムを封印
 * <SACItemSwitch:6>         # 同上
 * <SACスキル封印スイッチ:7> # ID[7]のスイッチがONのときスキルを封印
 * <SACSkillSwitch:7>        # 同上
 * <SAC攻撃封印計算式:f>     # 計算式[f]の結果がtrueのとき攻撃を封印
 * <SACAttackFormula:f>      # 同上
 * <SAC防御封印計算式:f>     # 計算式[f]の結果がtrueのとき防御を封印
 * <SACGuardFormula:f>       # 同上
 * <SAC道具封印計算式:f>     # 計算式[f]の結果がtrueのときアイテムを封印
 * <SACItemFormula:f>        # 同上
 * <SACスキル封印計算式:f>   # 計算式[f]の結果がtrueのときスキルを封印
 * <SACSkillFormula:f>       # 同上
 *
 * --- ver1.4.1 ---
 * <SACスキル封印スイッチ:7,1>
 * ID[7]のスイッチがONのときかつスキルタイプが1のスキルを封印
 * <SACSkillSwitch:7,1>
 * 同上
 * --- ver1.4.1 ---
 *
 * 文章、スクリプト中で不等号を使いたい場合、以下のように記述してください。
 * < → <
 * > → >
 * 例
 * <SACAttackFormula:\v[1] >= 5> # 変数[1]が5以下の場合攻撃封印
 * <SACGuardFormula:true>           # 常に防御封印
 *
 * 注意！
 * 全てのコマンドを封印するとゲームが続行不可になります。
 *
 * アイテム使用をスキル化したい場合は、スキルのメモ欄に以下の通り
 * 入力してください。対象スキルを選択後、アイテムウィンドウが開きます。
 * <SACアイテムスキル> # アイテム使用スキル化
 * <SACItemSkill>      # 同上
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * 利用規約：
 *  作者に無断で改変、再配布が可能で、利用形態（商用、18禁利用等）
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */

(function() {
    'use strict';
    var metaTagPrefix = 'SAC';

    var getArgNumber = function(arg, min, max) {
        if (arguments.length < 2) min = -Infinity;
        if (arguments.length < 3) max = Infinity;
        return (parseInt(arg) || 0).clamp(min, max);
    };

    var getMetaValue = function(object, name) {
        var metaTagName = metaTagPrefix + name;
        return object.meta.hasOwnProperty(metaTagName) ? convertEscapeCharacters(object.meta[metaTagName]) : undefined;
    };

    var getMetaValues = function(object, names) {
        for (var i = 0, n = names.length; i < n; i++) {
            var value = getMetaValue(object, names[i]);
            if (value !== undefined) return value;
        }
        return undefined;
    };

    var convertEscapeCharacters = function(text) {
        if (text === true) return text;
        if (text == null) text = '';
        text = text.replace(/>?/gi, '>');
        text = text.replace(/<?/gi, '<');
        var windowLayer = SceneManager._scene._windowLayer;
        return windowLayer ? windowLayer.children[0].convertEscapeCharacters(text) : text;
    };

    /**
     * Create plugin parameter. param[paramName] ex. param.commandPrefix
     * @param pluginName plugin name(EncounterSwitchConditions)
     * @returns {Object} Created parameter
     */
    var createPluginParameter = function(pluginName) {
        var paramReplacer = function(key, value) {
            if (value === 'null') {
                return value;
            }
            if (value[0] === '"' && value[value.length - 1] === '"') {
                return value;
            }
            try {
                return JSON.parse(value);
            } catch (e) {
                return value;
            }
        };
        var parameter     = JSON.parse(JSON.stringify(PluginManager.parameters(pluginName), paramReplacer));
        PluginManager.setParameters(pluginName, parameter);
        return parameter;
    };
    var param = createPluginParameter('SealActorCommand');

    //=============================================================================
    // Game_Actor
    //  コマンド封印が有効かどうかを判定します。
    //=============================================================================
    Game_Actor.prototype.getSealMetaInfo = function(names) {
        var metaValue = null;
        this.traitObjects().some(function(traitObject) {
            metaValue = getMetaValues(traitObject, names);
            return metaValue;
        });
        return metaValue;
    };

    Game_Actor.prototype.isSealCommand = function(commandNames) {
        var switchId = this.getSealMetaInfo([commandNames[0] + 'Switch', commandNames[1] + '封印スイッチ']);
        if (switchId && $gameSwitches.value(getArgNumber(switchId))) {
            return true;
        }
        var formula = this.getSealMetaInfo([commandNames[0] + 'Formula', commandNames[1] + '封印計算式']);
        return formula && eval(formula);
    };

    Game_Actor.prototype.isSealCommandSkillExt = function(){
        var commandNames = ['Skill', 'スキル'];
        var switchId = this.getSealMetaInfo([commandNames[0] + 'Switch', commandNames[1] + '封印スイッチ']);
        var skillId = undefined;
        if (switchId && $gameSwitches.value(getArgNumber(switchId))) {
            if(/\d,\d/.test(switchId)){
                skillId = getArgNumber(switchId.split(',')[1]);
            }
            return {
                bool: true,
                skillId: skillId
            };
        }
        var formula = this.getSealMetaInfo([commandNames[0] + 'Formula', commandNames[1] + '封印計算式']);
        return {
            bool: formula && eval(formula),
            skillId: undefined
        };
    }

    Game_Actor.prototype.isSealCommandAttack = function() {
        return this.isSealCommand(['Attack', '攻撃']);
    };

    Game_Actor.prototype.isSealCommandGuard = function() {
        return this.isSealCommand(['Guard', '防御']);
    };

    Game_Actor.prototype.isSealCommandItem = function() {
        return this.isSealCommand(['Item', '道具']);
    };

    Game_Actor.prototype.isSealCommandSkill = function() {
        return this.isSealCommand(['Skill', 'スキル']);
    };

    //=============================================================================
    // Window_ActorCommand
    //  コマンドが封印されていた場合、処理を終了します。
    //=============================================================================
    var _Window_ActorCommand_addAttackCommand = Window_ActorCommand.prototype.addAttackCommand;
    Window_ActorCommand.prototype.addAttackCommand = function() {
        if (this._actor.isSealCommandAttack()) {
            if (param.commandDisable) {
                _Window_ActorCommand_addAttackCommand.apply(this, arguments);
                this.disableCommand('attack');
            }
            return;
        }
        _Window_ActorCommand_addAttackCommand.apply(this, arguments);
    };

    var _Window_ActorCommand_addGuardCommand = Window_ActorCommand.prototype.addGuardCommand;
    Window_ActorCommand.prototype.addGuardCommand = function() {
        if (this._actor.isSealCommandGuard()) {
            if (param.commandDisable) {
                _Window_ActorCommand_addGuardCommand.apply(this, arguments);
                this.disableCommand('guard');
            }
            return;
        }
        _Window_ActorCommand_addGuardCommand.apply(this, arguments);
    };

    var _Window_ActorCommand_addItemCommand = Window_ActorCommand.prototype.addItemCommand;
    Window_ActorCommand.prototype.addItemCommand = function() {
        if (this._actor.isSealCommandItem()) {
            if (param.commandDisable) {
                _Window_ActorCommand_addItemCommand.apply(this, arguments);
                this.disableCommand('item');
            }
            return;
        }
        _Window_ActorCommand_addItemCommand.apply(this, arguments);
    };

    var _Window_ActorCommand_addSkillCommands = Window_ActorCommand.prototype.addSkillCommands;
    Window_ActorCommand.prototype.addSkillCommands = function() {
        var isSealCommandSkill = this._actor.isSealCommandSkillExt();
        if (isSealCommandSkill.bool) {
            if (param.commandDisable) {
                _Window_ActorCommand_addSkillCommands.apply(this, arguments);
                this.disableCommand('skill', isSealCommandSkill.skillId);
            }
            return;
        }
        _Window_ActorCommand_addSkillCommands.apply(this, arguments);
    };

    Window_ActorCommand.prototype.disableCommand = function(symbol, ext) {
        this._list.forEach(function(command) {
            if (command.symbol === symbol) {
                if(!!command.ext && ext !== undefined){
                    command.enabled = command.ext != ext;
                }
                else{
                    command.enabled = false;
                }
            }
        });
    };

    var _Window_ActorCommand_drawItem = Window_ActorCommand.prototype.drawItem;
    Window_ActorCommand.prototype.drawItem = function(index) {
        _Window_ActorCommand_drawItem.apply(this, arguments);
        var sign = param.disableSign;
        if (!this.isCommandEnabled(index) && sign) {
            var rect = this.itemRectForText(index);
            var width = this.drawTextEx(sign, this.windowWidth(), 0);
            var height = this.calcTextHeight({text:sign}, false);
            this.resetFontSettings();
            this.resetTextColor();
            this.changePaintOpacity(true);
            this.drawTextEx(sign, rect.x + rect.width / 2 - width / 2, rect.y + rect.height / 2 - height / 2);
            this.resetFontSettings();
            this.resetTextColor();
            this.changePaintOpacity(false);
        }
    };

    //=============================================================================
    // Scene_Battle
    //  アイテムスキルを作成します。
    //=============================================================================
    var _Scene_Battle_onItemCancel = Scene_Battle.prototype.onItemCancel;
    Scene_Battle.prototype.onItemCancel = function() {
        if (this._selectItemSkill) {
            this._itemWindow.hide();
            this._skillWindow.show();
            this._skillWindow.activate();
            this._selectItemSkill = false;
        } else {
            _Scene_Battle_onItemCancel.apply(this, arguments);
        }
    };

    var _Scene_Battle_onSkillOk =Scene_Battle.prototype.onSkillOk;
    Scene_Battle.prototype.onSkillOk = function() {
        var skill = this._skillWindow.item();
        if (getMetaValues(skill, ['アイテムスキル', 'ItemSkill'])) {
            var action = BattleManager.inputtingAction();
            action.setSkill(skill.id);
            BattleManager.actor().setLastBattleSkill(skill);
            this._skillWindow.hide();
            this.commandItem();
            this._selectItemSkill = true;
        } else {
            _Scene_Battle_onSkillOk.apply(this, arguments);
        }
    };

    var _Scene_Battle_onActorCancel = Scene_Battle.prototype.onActorCancel;
    Scene_Battle.prototype.onActorCancel = function() {
        if (this._selectItemSkill) {
            this._actorWindow.hide();
            this._itemWindow.show();
            this._itemWindow.activate();
        } else {
            _Scene_Battle_onActorCancel.apply(this, arguments);
        }
    };

    var _Scene_Battle_onEnemyCancel = Scene_Battle.prototype.onEnemyCancel;
    Scene_Battle.prototype.onEnemyCancel = function() {
        if (this._selectItemSkill) {
            this._enemyWindow.hide();
            this._itemWindow.show();
            this._itemWindow.activate();
        } else {
            _Scene_Battle_onEnemyCancel.apply(this, arguments);
        }
    };

    var _Scene_Battle_selectNextCommand = Scene_Battle.prototype.selectNextCommand;
    Scene_Battle.prototype.selectNextCommand = function() {
        _Scene_Battle_selectNextCommand.apply(this, arguments);
        this._selectItemSkill = false;
    };
})();


code:
//=============================================================================
// SetJumpHeightAndFrame.js
//=============================================================================
/*:
 * @plugindesc let character jump with specified frame and max-height
 * @author Sasuke KANNAZUKI
 * *
 * @help This plugin does not provide plugin commands.
 *
 * usage: call from event command 'Move Route' -> 'Script' as follows:
 * this.setJmpFmt(maxHeight, frame);  # set height and frame
 * this.resetJmpFmt();    # reset this configuration
 * 例：
 * this.setJmpFmt(48, 24);   # jump 48 pixel within 24 frames.
 *
 * waring：be sure to run this.resetJmpFmt(); after the specied jump.
 * otherwise, the setting is remain after the move route command.
 * event's setting resets when map changes,
 * while player's setting remain forever.
 *
 * note: at default frame count and max height is calculated as following:
 * where jumpPeak is 10 + distance - moveSpeed.
 * frame count is jumpPeak * 2.
 * max height is jumpPeak * jumpPeak / 2.
 *
 * Copyright:this plugin is released under MIT license.
 * http://opensource.org/licenses/mit-license.php
 */
/*:ja
 * @plugindesc キャラクターを指定されたフレーム数と高さでジャンプさせます。
 * @author 神無月サスケ
 * *
 * @help このプラグインには、プラグインコマンドはありません。
 *
 * 「移動ルートの設定」の「スクリプト」から以下の書式で呼び出してください。
 * this.setJmpFmt(maxHeight, frame);  # 高さとフレーム数をセット
 * this.resetJmpFmt();                #  設定をリセット
 * 例：
 * this.setJmpFmt(48, 24);   # １キャラ分(48px)を 0.4秒(24フレーム)でジャンプ
 * 以後のジャンプでは、新たな設定が行われるまで、
 * 全て上記の設定でのジャンプを行います。
 *
 * 注意：全て終了後には this.resetJmpFmt(); を忘れずに実行してください。
 * さもないと、その後も設定が持続します。
 * イベントの場合、マップが切り替わるとリセットされますが、
 * プレイヤーの場合、ずっと設定が持続します。
 *
 * メモ: 通常のジャンプでは、以下の計算式でフレーム数と高さが決められています。
 * jumpPeak を 10 + 距離 - 移動速度 とします。
 * フレーム数は、jumpPeak の 2 倍です。
 * 頂点の高さは、jumpPeak の 2 乗の半分です。
 * 放物線(2次関数)の公式でジャンプします。
 *
 * このプラグインは MIT ライセンスで配布されます。
 * ご自由にお使いください。
 * http://opensource.org/licenses/mit-license.php
 */

(function() {

  //
  // setting routine : these are called from event command 'Set Move Route'.
  //
  Game_CharacterBase.prototype.setJmpFmt = function(maxHeight, frame) {
    this._maxJumpHeight = maxHeight;
    this._maxSpecifiedJumpCount = frame;
  };

  Game_CharacterBase.prototype.resetJmpFmt = function() {
    this._maxJumpHeight = null;
    this._maxSpecifiedJumpCount = null;
  };

  var _Game_CharacterBase_initMembers =
   Game_CharacterBase.prototype.initMembers;
  Game_CharacterBase.prototype.initMembers = function() {
    _Game_CharacterBase_initMembers.call(this);
    this.resetJmpFmt();
  };

  //
  // specified jump judge routine
  //
  Game_CharacterBase.prototype.isJumpSpecified = function() {
    return !!this._maxJumpHeight;
  };

  //
  // set jump frame and height
  //
  var _Game_CharacterBase_jump = Game_CharacterBase.prototype.jump;
  Game_CharacterBase.prototype.jump = function(xPlus, yPlus) {
    _Game_CharacterBase_jump.call(this,xPlus, yPlus);
    if (this.isJumpSpecified()) {
      this._jumpCount = this._maxSpecifiedJumpCount;
      this._jumpPeak = this._jumpCount / 2;  // it may be floating number
    }
  };

  //
  // calc jump height
  //
  var _Game_CharacterBase_jumpHeight = Game_CharacterBase.prototype.jumpHeight;
  Game_CharacterBase.prototype.jumpHeight = function() {
    if (!this.isJumping()) {
      return 0;
    } else if(this.isJumpSpecified()) {
      var orgHeight = _Game_CharacterBase_jumpHeight.call(this);
      return  Math.round(orgHeight * this._maxJumpHeight /
       (this._jumpPeak * this._jumpPeak / 2));
    } else {
      return _Game_CharacterBase_jumpHeight.call(this);
    }
  };

})();


code:
//ショップ画面で装備アイテムの全情報を表示
/*:

@plugindesc
ショップで装備品を購入する際、詳細な情報を
表示することができます

@author
シトラス

*/
Window_ShopStatus.prototype.pageSize = function() {
    return 1;
};
Window_ShopStatus.prototype.drawParamName = function(x, y, paramId) {
    this.changeTextColor(this.systemColor());
    this.drawText(TextManager.param(paramId), x, y, 120);
};
Window_ShopStatus.prototype.drawActorEquipInfo = function(x, y, actor) {
    var enabled = actor.canEquip(this._item);
    this.changePaintOpacity(enabled);
    this.resetTextColor();

	//アクターの名前を表示
    this.drawText(actor.name(), x, y - 30, 168);

	//ステータスの名前を表示
	for(var i = 0;i < 8;i++){
		this.drawParamName(x,132 + i*35,i);
	}

    var item1 = this.currentEquippedItem(actor, this._item.etypeId);
    if (enabled) {
        this.drawActorParamChange(x, y, actor, item1);
    }

	//現在装備しているアイテムの名前を表示
    this.drawItemName(item1, x, y + this.lineHeight() - 25);
    this.changePaintOpacity(true);
};

Window_ShopStatus.prototype.drawActorParamChange = function(x, y, actor, item1) {
    var width = this.contents.width - this.textPadding() - x;
    var changeParams = new Array(8);
	for(var i = 0;i < 8;i++){
		changeParams[i] = this._item.params[i] - (item1 ? item1.params[i] : 0);
		//console.log(changeParams[i] );
		this.changeTextColor(this.paramchangeTextColor(changeParams[i] ) );
		if(changeParams[i] <= 0){
			this.drawText(changeParams[i], x, 60 + y + i*35, width, 'right');
		}else{
			this.drawText("+", x - changeParams[i].toString().length*16+4, 60 + y + i*35, width, 'right');
			this.drawText(changeParams[i], x, 60 + y + i*35, width, 'right');
		}
	}
};


code:
//--------------------------------------------------
// ShowActorFaces.js
//--------------------------------------------------

/*:
 * @plugindesc プレースホルダー
 * @author すず
 * @help
 * プラグインコマンド
 * SHOW_ACTOR_FACES or アクター画像表示
*/

(function(){
  'use strict';

  var getCommand = function(c){
    return (c || "").toUpperCase();
  };

  //--------------------------------------------------
  // Game_Interpreter
  //--------------------------------------------------

  Game_Interpreter.prototype.pluginCommandShowActorFaces = function(){
	switch($gameActors._data[1]._equips[1]._itemId){
		case 2: //全裸（通常時）
			var name = "[1-02]00"
			break;
		case 3: //全裸（通常時）
			var name = "[1-03]00"
			break;
		case 4: //全裸（通常時）
			var name = "[1-04]00"
			break;
		case 5: //全裸（通常時）
			var name = "[1-05]00"
			break;
		case 6: //全裸（通常時）
			var name = "[1-06]00"
			break;
		case 7: //全裸（通常時）
			var name = "[1-07]00"
			break;
		case 8: //全裸（通常時）
			var name = "[1-08]00"
			break;
		default:
			console.log($gameActors._data[1]._equips[1]._itemId);
			console.log("該当するものがありません。");
			break;
		}
	if($gameVariables.value(179)<10){
		name +="0"+ $gameVariables.value(179);
	}
	else{
		name += $gameVariables.value(179);
	}
    $gameScreen.showPicture(5, name, 0, 0, 0, 100, 100, 255, 0);
};

  var _Game_Interpreter_pluginCommand      = Game_Interpreter.prototype.pluginCommand;
  Game_Interpreter.prototype.pluginCommand = function(command, args){
    _Game_Interpreter_pluginCommand.apply(this, arguments);

    var commandName = getCommand(command);

    switch (commandName) {
      case "SHOW_ACTOR_FACES":
      case "アクター画像表示":
        this.pluginCommandShowActorFaces();
        break;
    }
  };
})();


code:
/*---------------------------------------------------------------------------*
 * 2018/09/23 kido
 * https://kido0617.github.io/
 * Ver.1.0
 *---------------------------------------------------------------------------*/

/*:
 * @plugindesc プラグインの使用状況を出すプラグイン
 * @author kido
 * @help
 * 詳細
 * https://kido0617.github.io/rpgmaker/2018-09-24-plugin-usage
 * 導入するとコンソールに出ます
 *
*/

(function(){

  var path = './js/plugins/';
  var fs = require('fs');
  var files = fs.readdirSync(path);
  var usage = {
    on: [],
    off: [],
    ununsed: []
  };

  for(var file of files){
    if(fs.statSync(path + file).isDirectory()) continue;
    var target = null;
    for(var p of $plugins){
      if(file.split('.js')[0] == p.name) {
        target = p;
        break;
      }
    }
    if(!target) usage.ununsed.push(file);
    else{
      if(p.status) usage.on.push(file);
      else usage.off.push(file);
    }
  }
  var endOfLine = require('os').EOL;
  var text = '';
  text += '・未使用--------------' + endOfLine;
  for(var f of usage.ununsed){
    text += f + endOfLine;
  }
  text += endOfLine;
  text += '・ON------------------' + endOfLine;
  for(f of usage.on){
    text += f + endOfLine;
  }
  text += endOfLine;
  text += '・OFF-----------------' + endOfLine;
  for(f of usage.off){
    text += f + endOfLine;
  }

  console.log(text);

})();


code:
//=============================================================================
// SimpleMsgSideView.js
//=============================================================================

/*:
 * @plugindesc at sideview battle, only display item/skill names.
 * @author Sasuke KANNAZUKI
 *
 * @param displayAttack
 * @desc Whether to display normal attack. 1:yes 0:no
 * @default 0
 *
 * @param position
 * @desc Skill name display position. 0:left, 1:center
 * @default 1
 *
 * @help This plugin does not provide plugin commands.
 *
 * By not displaying the log and only displaying the skill name,
 * the speed of battle will increase slightly.
 */

/*:ja
 * @plugindesc サイドビューバトルで技/アイテムの名前のみ表示します。
 * @author 神無月サスケ
 *
 * @param displayAttack
 * @desc 通常攻撃も表示するか (1:する 0:しない)
 * @default 0
 *
 * @param position
 * @desc 技名を表示する位置 (0:左寄せ, 1:中央)
 * @default 1
 *
 * @help このプラグインには、プラグインコマンドはありません。
 *
 * ログを表示せず、技名のみを表示することで、戦闘のテンポが若干高速になります。
 */

(function() {

  var parameters = PluginManager.parameters('SimpleMsgSideView');
  var displayAttack = Number(parameters['displayAttack']) != 0;
  var position = Number(parameters['position'] || 1);

  var _Window_BattleLog_addText = Window_BattleLog.prototype.addText;
  Window_BattleLog.prototype.addText = function(text) {
   if($gameSystem.isSideView()){
     this.refresh();
     this.wait();
     return;  // not display battle log
   }
   _Window_BattleLog_addText.call(this, text);
  };

  // for sideview battle only
  Window_BattleLog.prototype.addItemNameText = function(itemName) {
    this._lines.push(itemName);
    this.refresh();
    this.wait();
  };

  var _Window_BattleLog_displayAction =
   Window_BattleLog.prototype.displayAction;
  Window_BattleLog.prototype.displayAction = function(subject, item) {
    if($gameSystem.isSideView()){
      if(displayAttack ||
       !(DataManager.isSkill(item) && item.id == subject.attackSkillId())) {
　　    this.push('addItemNameText', item.name);  // display item/skill name
      } else {
        this.push('wait');
      }
      return;
    }
    _Window_BattleLog_displayAction.call(this, subject, item);
  };

  // to put skill/item name at center
  var _Window_BattleLog_drawLineText = Window_BattleLog.prototype.drawLineText;
  Window_BattleLog.prototype.drawLineText = function(index) {
    if($gameSystem.isSideView() && position == 1){
      var rect = this.itemRectForText(index);
      this.contents.clearRect(rect.x, rect.y, rect.width, rect.height);
      this.drawText(this._lines[index], rect.x, rect.y,
       rect.width, 'center');
      return;
    }
    _Window_BattleLog_drawLineText.call(this, index);
  };

})();


code:
//
//  鏡面反射スプライト ver1.00
//
// ------------------------------------------------------
// Copyright (c) 2016 Yana
// Released under the MIT license
// http://opensource.org/licenses/mit-license.php
// ------------------------------------------------------
//
// author Yana
//

var Imported = Imported || {};
Imported['SpecularReflectionSprite'] = 1.00;

/*:
 * @plugindesc ver1.00/遠景と下層レイヤーの間に鏡像スプライトを追加します。
 * @author Yana
 *
 * @param TerrainId
 * @desc 鏡像が表示される地形タグです。
 * 地形タグは1,2,3のように複数登録することができます。
 * @default 1
 *
 * @param OffsetYVariableID
 * @desc プレイヤーのY座標の補正値として使用する変数のIDです。
 * 0を指定すると使用しません。
 * @default 0
 *
 * @help ------------------------------------------------------
 * このプラグインについて
 * ------------------------------------------------------
 *  このプラグインは、正確には、
 *  「遠景と下層レイヤーの間にキャラクターの鏡像を表示する地形タグを設定するプラグイン」
 *  となります。
 *  つまり、下層レイヤーの一部が透明や半透明でないと、地形タグを設定しても変化はありません。
 * ------------------------------------------------------
 * 使用方法
 * ------------------------------------------------------
 * プラグインパラメータで地形タグを設定すると、その地形タグに鏡像が表示されるようになります。
 *
 * イベントのメモに
 * <鏡像表示なし>
 * <NoReflection>
 * のいずれかを記述すると、そのイベントの鏡像は表示されません。
 *
 * 同じように、イベントのメモに
 * <鏡像表示補正Y:○>
 * <SpecularOffsetY:○>
 * のいずれかを記述すると、鏡像の表示位置を○分ずらします。
 *
 * ------------------------------------------------------
 * 利用規約
 * ------------------------------------------------------
 * 当プラグインはMITライセンスで公開されています。
 * 使用に制限はありません。商用、アダルト、いずれにも使用できます。
 * 二次配布も制限はしませんが、サポートは行いません。
 * 著作表示は任意です。行わなくても利用できます。
 * 要するに、特に規約はありません。
 * バグ報告や使用方法等のお問合せはネ実ツクールスレ、または、Twitterにお願いします。
 * https://twitter.com/yanatsuki_
 * 素材利用は自己責任でお願いします。
 * ------------------------------------------------------
 * 更新履歴:
 * ver1.00:
 * 公開
 */

(function(){
    ////////////////////////////////////////////////////////////////////////////////////

    var parameters = PluginManager.parameters('SpecularReflectionSprite');
    var terrainIds = parameters['TerrainId'].split(',').map(function(n){ return Number(n) });
    var offsetYVariableId = Number(parameters['OffsetYVariableID']) || 0;

    ////////////////////////////////////////////////////////////////////////////////////

    Game_CharacterBase.prototype.isReflect = function() {
        return true;
    };

    Game_CharacterBase.prototype.isEvent = function() {
        return false;
    };

    ////////////////////////////////////////////////////////////////////////////////////

    Game_Event.prototype.isReflect = function() {
        return !(this.event().meta['鏡像表示なし'] || this.event().meta['NoReflection']);
    };

    Game_Event.prototype.isEvent = function() {
        return true;
    };

    Game_Event.prototype.specularOffsetY = function() {
        if (this.event().meta['鏡像表示補正Y']) {
            return Number(this.event().meta['鏡像表示補正Y']) || 0;
        }
        if (this.event().meta['SpecularOffsetY']) {
            return Number(this.event().meta['SpecularOffsetY']) || 0;
        }
        return 0;
    };

    function Sprite_Specular() {
        this.initialize.apply(this, arguments);
    }

    ////////////////////////////////////////////////////////////////////////////////////

    Sprite_Specular.prototype = Object.create(Sprite_Base.prototype);
    Sprite_Specular.prototype.constructor = Sprite_Specular;

    Sprite_Specular.prototype.initialize = function(character) {
        Sprite_Base.prototype.initialize.call(this);
        this.initMembers();
        this.setCharacter(character);
    };

    Sprite_Specular.prototype.initMembers = function() {
        this.anchor.x = 0.5;
        this.anchor.y = 2;
        this._character = null;
        this._tilesetId = 0;
        this._upperBody = null;
        this._lowerBody = null;
        this.scale = new Point(1.0,1.0);
        this.visible = true;
        this.z = 2;
    };

    Sprite_Specular.prototype.setCharacter = function(character) {
        this._character = character;
    };

    Sprite_Specular.prototype.updateVisibility = function() {
        Sprite_Base.prototype.updateVisibility.call(this);
        if (this._character.isTransparent() || !this._character.isReflect()){
            this.visible = false;
            return;
        }
        var x = this._character.x;
        var y = this._character.y + Math.ceil(this.offsetY() / $gameMap.tileWidth())+1;
        var dir = this._character._direction;
        var terrainTag = $gameMap.terrainTag(x, y);
        var reflectTerrain = terrainIds.contains(terrainTag);

        switch(dir) {
            case 2: y = reflectTerrain ? y : y - 1; break;
            case 4: x = reflectTerrain ? x : x + 1;  break;
            case 6: x = reflectTerrain ? x : x - 1; break;
            case 8: y = reflectTerrain ? y : y + 1;  break;
        }

        terrainTag = $gameMap.terrainTag(x, y);
        this.visible = terrainIds.contains(terrainTag);
    };

    Sprite_Specular.prototype.isTile = function() {
        return this._character.tileId > 0;
    };

    Sprite_Specular.prototype.tilesetBitmap = function(tileId) {
        var tileset = $gameMap.tileset();
        var setNumber = 5 + Math.floor(tileId / 256);
        return ImageManager.loadTileset(tileset.tilesetNames[setNumber]);
    };

    Sprite_Specular.prototype.updateBitmap = function() {
        if (this.isImageChanged()) {
            this._tilesetId = $gameMap.tilesetId();
            this._tileId = this._character.tileId();
            this._characterName = this._character.characterName();
            this._characterIndex = this._character.characterIndex();
            if (this._tileId > 0) {
                this.setTileBitmap();
            } else {
                this.setCharacterBitmap();
            }
        }
    };

    Sprite_Specular.prototype.isImageChanged = function() {
        return (this._tilesetId !== $gameMap.tilesetId() ||
                this._tileId !== this._character.tileId() ||
                this._characterName !== this._character.characterName() ||
                this._characterIndex !== this._character.characterIndex());
    };

    Sprite_Specular.prototype.setTileBitmap = function() {
        this.bitmap = this.tilesetBitmap(this._tileId);
    };

    Sprite_Specular.prototype.setCharacterBitmap = function() {
        this.bitmap = ImageManager.loadCharacter(this._characterName);
        this._isBigCharacter = ImageManager.isBigCharacter(this._characterName);
    };

    Sprite_Specular.prototype.updateFrame = function() {
        if (this._tileId > 0) {
            this.updateTileFrame();
        } else {
            this.updateCharacterFrame();
        }
    };

    Sprite_Specular.prototype.updateTileFrame = function() {
        var pw = this.patternWidth();
        var ph = this.patternHeight();
        var sx = (Math.floor(this._tileId / 128) % 2 * 8 + this._tileId % 8) * pw;
        var sy = Math.floor(this._tileId % 256 / 8) % 16 * ph;
        this.setFrame(sx, sy, pw, ph);
    };

    Sprite_Specular.prototype.updateCharacterFrame = function() {
        var pw = this.patternWidth();
        var ph = this.patternHeight();
        var sx = (this.characterBlockX() + this.characterPatternX()) * pw;
        var sy = (this.characterBlockY() + this.characterPatternY()) * ph;
        this.updateHalfBodySprites();
        if (this._bushDepth > 0) {
            var d = this._bushDepth;
            this._upperBody.setFrame(sx, sy, pw, ph - d);
            this._lowerBody.setFrame(sx, sy + ph - d, pw, d);
            this.setFrame(sx, sy, 0, ph);
        } else {
            this.setFrame(sx, sy, pw, ph);
        }
    };

    Sprite_Specular.prototype.characterBlockX = function() {
        if (this._isBigCharacter) {
            return 0;
        } else {
            var index = this._character.characterIndex();
            return index % 4 * 3;
        }
    };

    Sprite_Specular.prototype.characterBlockY = function() {
        if (this._isBigCharacter) {
            return 0;
        } else {
            var index = this._character.characterIndex();
            return Math.floor(index / 4) * 4;
        }
    };

    Sprite_Specular.prototype.characterPatternX = function() {
        return this._character.pattern();
    };

    Sprite_Specular.prototype.characterPatternY = function() {
    	var dir = this._character.direction();
    	if(dir == 2){
    	  dir = 8;
    	}else if(dir ==8){
    	  dir = 2;
    	}
        return (dir - 2) / 2;
    };

    Sprite_Specular.prototype.patternWidth = function() {
        if (this._tileId > 0) {
            return $gameMap.tileWidth();
        } else if (this._isBigCharacter) {
            return this.bitmap.width / 3;
        } else {
            return this.bitmap.width / 12;
        }
    };

    Sprite_Specular.prototype.patternHeight = function() {
        if (this._tileId > 0) {
            return $gameMap.tileHeight();
        } else if (this._isBigCharacter) {
            return this.bitmap.height / 4;
        } else {
            return this.bitmap.height / 8;
        }
    };

    Sprite_Specular.prototype.updateHalfBodySprites = function() {
        if (this._bushDepth > 0) {
            this.createHalfBodySprites();
            this._upperBody.bitmap = this.bitmap;
            this._upperBody.visible = true;
            this._upperBody.y = - this._bushDepth;
            this._lowerBody.bitmap = this.bitmap;
            this._lowerBody.visible = true;
            this._upperBody.setBlendColor(this.getBlendColor());
            this._lowerBody.setBlendColor(this.getBlendColor());
            this._upperBody.setColorTone(this.getColorTone());
            this._lowerBody.setColorTone(this.getColorTone());
        } else if (this._upperBody) {
            this._upperBody.visible = false;
            this._lowerBody.visible = false;
        }
    };

    Sprite_Specular.prototype.createHalfBodySprites = function() {
        if (!this._upperBody) {
            this._upperBody = new Sprite();
            this._upperBody.anchor.x = 0.5;
            this._upperBody.anchor.y = 1;
            this.addChild(this._upperBody);
        }
        if (!this._lowerBody) {
            this._lowerBody = new Sprite();
            this._lowerBody.anchor.x = 0.5;
            this._lowerBody.anchor.y = 1;
            this._lowerBody.opacity = 128;
            this.addChild(this._lowerBody);
        }
    };

    Sprite_Specular.prototype.updateOther = function() {
        this.opacity = this._character.opacity();
        this.blendMode = this._character.blendMode();
        this._bushDepth = this._character.bushDepth();
    };

    Sprite_Specular.prototype.update = function() {
        Sprite_Base.prototype.update.call(this);
        this.updatePosition();
        this.updateBitmap();
        this.updateFrame();
        this.updatePosition();
        this.updateOther();
    };

    Sprite_Specular.prototype.updatePosition = function() {
        this.x = this._character.screenX();
        this.y = this._character.screenY() + this.offsetY();
        this.z = this._character.screenZ();
    };

    Sprite_Specular.prototype.offsetY = function() {
        var offsetY = offsetYVariableId ? $gameVariables.value(offsetYVariableId) : 0;
        offsetY = this._character.isEvent() ? this._character.specularOffsetY() : offsetY;
        return offsetY;
    };

    ////////////////////////////////////////////////////////////////////////////////////

    var _sref_SMap_createParallax = Spriteset_Map.prototype.createParallax;
    Spriteset_Map.prototype.createParallax = function() {
        _sref_SMap_createParallax.call(this);
        this.createSpecular();
    };

    Spriteset_Map.prototype.createSpecular = function() {
        this._specularSprites = [];
        $gameMap.events().forEach(function(event) {
            this._specularSprites.push(new Sprite_Specular(event));
        }, this);
        $gameMap.vehicles().forEach(function(vehicle) {
            this._specularSprites.push(new Sprite_Specular(vehicle));
        }, this);
        $gamePlayer.followers().reverseEach(function(follower) {
            this._specularSprites.push(new Sprite_Specular(follower));
        }, this);
        this._specularSprites.push(new Sprite_Specular($gamePlayer));
        for (var i = 0; i < this._specularSprites.length; i++) {
            this._baseSprite.addChild(this._specularSprites[i]);
        }
    };

    ////////////////////////////////////////////////////////////////////////////////////

}());


code:
//=============================================================================
// StairMove.js
// by Tsukimi
// Last Updated: 2017.12.13
//=============================================================================

/*:ja
 * @plugindesc 階段自動斜め移動
 * @author ツキミ
 *
 * @param 右斜め上移動リージョンID
 * @desc 右斜め上に移動するリージョンID（↗↙）
 * @type number
 * @min 1
 * @max 255
 * @default 33
 *
 * @param 左斜め上移動リージョンID
 * @desc 左斜め上に移動するリージョンID（↖↘）
 * @type number
 * @min 1
 * @max 255
 * @default 34
 *
 *
 * @help
 * 階段自動斜め移動
 * リージョンを設置すると自動で斜め移動する。
 *
 * -----------------
 *
 */

var Imported = Imported || {};
Imported.TKM_StairMove = true;
var $TKMvar = $TKMvar || {};
$TKMvar.stairMove = {};

(function() {
    'use strict';

    var pluginName = 'StairMove';
    var getParam = function(paramNames) {
        if (!Array.isArray(paramNames)) paramNames = [paramNames];
        for (var i = 0; i < paramNames.length; i++) {
            var name = PluginManager.parameters(pluginName)[paramNames[i]];
            if (name) return name;
        }
        return null;
    };

    $TKMvar.stairMove = {};
    // PARAMETER
    var parameters = PluginManager.parameters(pluginName);
    var temp = 0;
    $TKMvar.stairMove.regionLDRU = Number( getParam("右斜め上移動リージョンID") ) || -1;
    $TKMvar.stairMove.regionLURD = Number( getParam("左斜め上移動リージョンID") ) || -1;

    var _Game_Player_executeMove = Game_Player.prototype.executeMove;
    Game_Player.prototype.executeMove = function(direction) {
        var diagonalAccess = false;
        var sm = $TKMvar.stairMove;

        if(this.regionId() === sm.regionLDRU || this.regionId() === sm.regionLURD) {
            if(direction === 4 || direction === 6) {
                var yDirection;
                if(this.regionId() === sm.regionLDRU) yDirection = (direction === 4) ? 2 : 8;
                else yDirection = (direction === 4) ? 8 : 2;

                var x2 = $gameMap.roundXWithDirection(this.x, direction);
                var y2 = $gameMap.roundYWithDirection(this.y, yDirection);
                if($gameMap.regionId(x2, y2) === this.regionId()) {
                    diagonalAccess = true;
                    this._direction = direction;
                    this.moveDiagonally(direction, yDirection);
                }
            }
        }

        if(!diagonalAccess) {
            _Game_Player_executeMove.apply(this, arguments);
        }
    }
    /* TODO
    Game_Player.prototype.moveDiagonally = function(horz, vert) {
        Game_CharacterBase.prototype.moveDiagonally.apply(this, arguments);

        if(!this.isMovementSucceeded()) {
            var sm = $TKMvar.stairMove;
            var direction = this._direction;

            if(this.regionId() === sm.regionLDRU || this.regionId() === sm.regionLURD) {
                if(direction === 4 || direction === 6) {
                    var yDirection = 0;
                    if(this.regionId() === sm.regionLDRU) yDirection = (direction === 4) ? 2 : 8;
                    else yDirection = (direction === 4) ? 8 : 2;

                    var x2 = $gameMap.roundXWithDirection(this.x, direction);
                    var y2 = $gameMap.roundYWithDirection(this.y, yDirection);
                    if($gameMap.regionId(x2, y2) === this.regionId()) this.checkEventTriggerTouch(x2, y2);
                }
            }
        }
    }
    */
})();