Страница 57 из 147 ПерваяПервая ... 747555657585967107 ... ПоследняяПоследняя
Показано с 561 по 570 из 1470

Тема: Помощь с скриптами (RGSS)

  1. #561
    Маститый Аватар для Элрик
    Информация о пользователе
    Регистрация
    09.09.2010
    Сообщений
    1,284
    Записей в дневнике
    47
    Репутация: 24 Добавить или отнять репутацию

    По умолчанию

    Вопрос имеется по паре скриптов. Skill Fusion и Alchemy System. Как ими пользоваться? Объясните поподробней, т.к. в этом я ни в зуб ногой. Плюс там есть Магазин Синтеза. Распишите по попдробней , чтобы я понял и потом больше не задавал вопросов.

  2. #562
    Познающий Аватар для 100500
    Информация о пользователе
    Регистрация
    22.05.2011
    Сообщений
    351
    Записей в дневнике
    15
    Репутация: 28 Добавить или отнять репутацию

    По умолчанию

    Альфонс Элрик, со слиянием скилов, в принципе, ничего особенного. Попробую на примере:
    У тебя есть два скила - Огонь (ID 1) и Лёд (ID 2). Они должны превращаться, допустим, в Шторм с ID 3.
    Чтобы при использовании одного скилла после другого (неважно в каком порядке) вызвать третий, тебе нужно: открыть базу данных и прописать в поле "Заметки" навыка Огонь <skill_fusion: x, y>, где X - номер навыка, который должен быть использован после Огня, а Y - номер навыка, который получится в результате "слияния". То есть, пишем Огню <skill_fusion: 2, 3>, а Льду - <skill_fusion: 1, 3>. Шторму ничего писать не надо.
    Сделал бы тебе демку, но Ace не установлен на этом компьютере.

  3. #563
    Познающий Аватар для mephis
    Информация о пользователе
    Регистрация
    27.01.2011
    Адрес
    Новосибирск
    Сообщений
    330
    Записей в дневнике
    8
    Репутация: 34 Добавить или отнять репутацию

    По умолчанию

    Я как сектант церкви "Свидетели VX Ace" с удовольствием помогу по этим скриптам. Но вкратце объяснять в этой теме мне лень. Если подождёшь, я в течение недели создам по теме, для каждого из этих трёх скриптов, где будет:
    - описание
    - перевод инструкции
    - скриншоты
    - примеры использования

  4. #564
    Маститый Аватар для Элрик
    Информация о пользователе
    Регистрация
    09.09.2010
    Сообщений
    1,284
    Записей в дневнике
    47
    Репутация: 24 Добавить или отнять репутацию

    По умолчанию

    Буду ждать

  5. #565

    По умолчанию

    Прошу помощи в скриптинге на VX.

    Нужен скрипт, обнуляющий значение "#шагов".

    Спасибо.

  6. #566

    По умолчанию

    Цитата Сообщение от nekroo98 Посмотреть сообщение
    Прошу помощи в скриптинге на VX.

    Нужен скрипт, обнуляющий значение "#шагов".

    Спасибо.
    В куда-нибудь после скрипта Game_Party вставляешь:
    Код:
    class Game_Party
      ##
      # Устанавливает количество сделанных в игре шагов
      # @param [Integer] value Новое количество шагов
      #
      # @return [NilClass]
      ##
      def steps=(value)
        @steps = value
      end
    end
    Альтернативный вариант:
    В скрипте Game_Party...
    Код:
    attr_reader   :steps
    ...меняешь на:
    Код:
    attr_accessor :steps
    В независимости от выбранного варианта, в самой игре для обнуления шагов в команды события, которое будет это делать, вставляешь скрипт (последняя кнопка на последней странице списка команд):
    Код:
    $game_party.steps = 0

  7. #567

    По умолчанию

    благодарствую

  8. #568
    Познающий Аватар для 100500
    Информация о пользователе
    Регистрация
    22.05.2011
    Сообщений
    351
    Записей в дневнике
    15
    Репутация: 28 Добавить или отнять репутацию

    По умолчанию


    У меня странный вопрос.
    Можно ли придумать способ сделать для персонажа маски столкновений, как, например, в Game Maker?
    То есть, мне нужно, чтобы персонаж мог быть в "высоту", допустим, две клетки, а не одну, и не мог пройти там, где проход шириной в 1 тайл.
    Высота - это потому что вид сбоку (платформер).

    upd
    Упс, придумал, как это сделать на эвентах без скриптов.
    Последний раз редактировалось 100500; 18.01.2012 в 13:21.

  9. #569

    По умолчанию

    Цитата Сообщение от 100500 Посмотреть сообщение

    У меня странный вопрос.
    Можно ли придумать способ сделать для персонажа маски столкновений, как, например, в Game Maker?
    То есть, мне нужно, чтобы персонаж мог быть в "высоту", допустим, две клетки, а не одну, и не мог пройти там, где проход шириной в 1 тайл.
    Высота - это потому что вид сбоку (платформер).

    upd
    Упс, придумал, как это сделать на эвентах без скриптов.
    Естественно можно. Другой вопрос - как ты будешь помечать низкие места? В VX, вроде бы, нет приоритетов, как в XP.

  10. #570
    Познающий Аватар для mephis
    Информация о пользователе
    Регистрация
    27.01.2011
    Адрес
    Новосибирск
    Сообщений
    330
    Записей в дневнике
    8
    Репутация: 34 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Bullet S.D. Посмотреть сообщение
    Приветствую! Нужна помощь по скриптам.
    Собственно использую боевку Blizz ABS 2.84 для ХР
    Которая содержит пре-меню, в котором можно выбрать 1.Меню 2.Хоткейс 3.блабла 4.блабла ....
    Если установить скрипт модифицированного меню, например у меня стоит Stormtronics CMS by Blizzard Version: 5.39b, то это пре-меню пропадает и сцена хоткейс то же.
    Мне нужно либо вернуть пре-меню, либо запускать хоткей сцену из нового меню.

    кусок кода из АБС
    Спойлер пре-меню:
    Код:
    #==============================================================================
    # Scene_Menu
    #------------------------------------------------------------------------------
    #  This class was modified to infilitrate the real menu with the Blizz-ABS
    #  Pre-Menu.
    #==============================================================================
    
    class Scene_Menu
      
      #----------------------------------------------------------------------------
      # override Initialization
      #  index - the cursor index
      #----------------------------------------------------------------------------
      alias init_blizzabs_later initialize
      def initialize(index = nil)
        # set index flag
        @index_flag = index
        # call original method with either 0 or the current index
        init_blizzabs_later(index == nil ? 0 : index)
      end
      #----------------------------------------------------------------------------
      # override main
      #----------------------------------------------------------------------------
      alias main_blizzabs_later main
      def main
        # if index flag does not exist
        if @index_flag == nil
          # set in_battle flag
          $game_temp.in_battle = true
          # create HUD if HUD is turned on and HUD active
          @hud = Hud.new if BlizzABS::Config::HUD_ENABLED && $game_system.hud
          # if ASSIGNMENT is turned on and assignment display active
          if BlizzABS::Config::HOTKEYS && $game_system.hotkeys
            # create assignment display
            @hotkeys = Hotkey_Assignment.new
          end
          # if MINIMAP is turned on and minimap active
          if BlizzABS::Config::MINIMAP && $game_system.minimap > 0
            # create HUD
            @minimap = Minimap.new
            # create HUD
            @minimap.update
          end
          # create options window
          @window = Window_Command.new(192, BlizzABS::Cache::CommandsPreMenu)
          # if no actors in the party
          if $game_party.actors.size == 0
            # disable options
            @window.disable_item(1)
            @window.disable_item(2)
            @window.disable_item(3)
          end
          # set x and y position
          @window.x, @window.y = 320 - @window.width/2, 240 - @window.height/2
          # set z position
          @window.z = 21000
          # set back opacity
          @window.back_opacity = 160
          # create spriteset
          @spriteset = Spriteset_Map.new
          # create viewport
          @view = Viewport.new(0, 0, 640, 480)
          # if using a fixed tint
          if BlizzABS::Config::MENU_COLOR_TINT > 0
            # get tint
            tint = BlizzABS::Config::MENU_COLOR_TINT
          else
            # randomize tint
            tint = rand(8) + 1
          end
          # tint viewport
          case tint
          # black-white tint
          when 1 then @view.tone = Tone.new(-40, -40, -40, 255)
          # blue tint
          when 2 then @view.tone = Tone.new(-255, -255, 0, 255)
          # green tint
          when 3 then @view.tone = Tone.new(-255, 0, -255, 255)
          # red tint
          when 4 then @view.tone = Tone.new(0, -255, -255, 255)
          # yellow tint
          when 5 then @view.tone = Tone.new(0, 0, -255, 255)
          # mangenta tint
          when 6 then @view.tone = Tone.new(0, -255, 0, 255)
          # cyan tint
          when 7 then @view.tone = Tone.new(-255, 0, 0, 255)
          # darker tint
          when 8 then @view.tone = Tone.new(-60, -60, -60, 0)
          end
          # transition
          Graphics.transition
          # loop
          loop do
            # update game screen
            Graphics.update
            # update input
            Input.update
            # stop if frame update
            break if update_before_main
          end
          # freeze screen
          Graphics.freeze
          # delete HUD elements that exist
          [@hud, @hotkeys, @minimap].each {|s| s.dispose if s != nil}
          # delete window
          @window.dispose
          @window = nil
          # delete spriteset
          @spriteset.dispose
          @spriteset = nil
          # delete viewport (screen tint) if new scene is still the menu or map
          @view.dispose if $scene.is_a?(Scene_Menu) || $scene.is_a?(Scene_Map)
          @view = nil
        end
        # call original method if scene is still the menu
        main_blizzabs_later if $scene.is_a?(Scene_Menu)
      end
      #----------------------------------------------------------------------------
      # update_before_main
      #  Processes the pre-menu.
      #----------------------------------------------------------------------------
      def update_before_main
        # updates path finder
        $BlizzABS.AI.update
        # update window
        @window.update
        # if window is active
        if @window.active
          # if B is pressed
          if Input.trigger?(Input::B)
            # play cancel sound
            $game_system.se_play($data_system.cancel_se)
            # create map scene
            $scene = Scene_Map.new
            # exit this scene
            return true
          # if C is pressed
          elsif Input.trigger?(Input::C)
            # which option
            case @window.index
            when 0
              # play sound
              $game_system.se_play($data_system.decision_se)
              # set in_battle flag
              $game_temp.in_battle = false
            when 1
              # if not actors in the party
              if $game_party.actors.size == 0
                # play buzzer sound effect
                $game_system.se_play($data_system.buzzer_se)
                # exit method
                return
              end
              # play sound
              $game_system.se_play($data_system.decision_se)
              # create hotkey assignment scene with the current screen tint
              $scene = Scene_Hotkeys.new(@view.tone)
            when 2
              # if not actors in the party
              if $game_party.actors.size == 0
                # play buzzer sound effect
                $game_system.se_play($data_system.buzzer_se)
                # exit method
                return
              end
              # play sound
              $game_system.se_play($data_system.decision_se)
              # create AI setup scene with the current screen tint
              $scene = Scene_AI_Behavior.new(@view.tone)
            when 3
              # if not actors in the party
              if $game_party.actors.size == 0
                # play buzzer sound effect
                $game_system.se_play($data_system.buzzer_se)
                # exit method
                return
              end
              # play sound
              $game_system.se_play($data_system.decision_se)
              # create AI setup scene with the current screen tint
              $scene = Scene_AI_Triggers.new(@view.tone)
            when 4
              # play sound
              $game_system.se_play($data_system.decision_se)
              # create map scene
              $scene = Scene_Map.new
            end
            # exit this scene
            return true
          end
        end
        # don't exit this scene
        return false
      end
      
    end


    Код нового меню
    Спойлер КОД:
    Код:
    #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
    # Stormtronics CMS by Blizzard
    # Version: 5.39b - Hybrid Edition
    # Type: Enhanced Custom Menu System
    # Date v5.0: 27.8.2007
    # Date v5.0b: 12.9.2007
    # Date v5.1b: 28.1.2008
    # Date v5.2b: 29.1.2008
    # Date v5.3b: 23.7.2008
    # Date v5.31b: 20.8.2008
    # Date v5.32b: 21.8.2008
    # Date v5.33b: 15.11.2008
    # Date v5.34b: 8.4.2009
    # Date v5.35b: 9.4.2009
    # Date v5.36b: 6.5.2009
    # Date v5.37b: 20.5.2009
    # Date v5.38b: 31.5.2009
    # Date v5.39b: 24.6.2009
    #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
    #   
    #  This work is protected by the following license:
    # #----------------------------------------------------------------------------
    # #  
    # #  Creative Commons - Attribution-NonCommercial-ShareAlike 3.0 Unported
    # #  ( http://creativecommons.org/licenses/by-nc-sa/3.0/ )
    # #  
    # #  You are free:
    # #  
    # #  to Share - to copy, distribute and transmit the work
    # #  to Remix - to adapt the work
    # #  
    # #  Under the following conditions:
    # #  
    # #  Attribution. You must attribute the work in the manner specified by the
    # #  author or licensor (but not in any way that suggests that they endorse you
    # #  or your use of the work).
    # #  
    # #  Noncommercial. You may not use this work for commercial purposes.
    # #  
    # #  Share alike. If you alter, transform, or build upon this work, you may
    # #  distribute the resulting work only under the same or similar license to
    # #  this one.
    # #  
    # #  - For any reuse or distribution, you must make clear to others the license
    # #    terms of this work. The best way to do this is with a link to this web
    # #    page.
    # #  
    # #  - Any of the above conditions can be waived if you get permission from the
    # #    copyright holder.
    # #  
    # #  - Nothing in this license impairs or restricts the author's moral rights.
    # #  
    # #----------------------------------------------------------------------------
    # 
    #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
    # 
    # Compatibility:
    # 
    #   97% compatible with SDK v1.x. 80% compatible with SDK v2.x. Glitchs with
    #   Fukuyama's Caterpillar script (but not with mine). Designed only for 8
    #   elements. WILL corrupt old savegames.
    # 
    # 
    # Features:
    # 
    #   - completely animated and graphically optimized (lag-free)
    #   - own set of windowskins, fonts and icons for every status change and
    #     element
    #   - saves all changed options together with the savefile
    #   - menu commands "Item", "Equipment", "Skill", "Equip", "Status", "Options",
    #     "Save", "Load", "Exit"
    #   - Item submenu: "Items", "Sort" (by quantity or by alphabet), "Quest Items"
    #   - Equipment submenu shows information about equippable items for the chosen
    #     character, switch the character with LEFT and RIGHT
    #   - Skill submenu shows available skills for use for the chosen character,
    #     switch character with L and R, menu status window in background shows the
    #     chosen character
    #   - Equip submenu shows complete information about Status resistance/attack,
    #     Element resistance/attack and complete character stat changing (has
    #     even "max HP" and "max SP" available if you are using "Weapon/Armor HP/SP
    #     Plus")
    #   - Status screen with overall information about character status
    #   - Options submenu with "BGM Volume", "SFX Volume", "Battle BGM",
    #     "Battle Cam" (if using KGC's Pseudo 3D Battle Camera with my add-on for
    #     disabling), "Bar Style", "Bar Opacity" (if you are using Gradient Bar
    #     Styler), "Font" and "Windowskin" (both with preview)
    #   - Standard Save, Load and Exit commands
    #   - uses "Ultimate Font Override", so the font changes will affect RPG Maker
    #     XP versions 1.00, 1.01, 1.02 and 1.03 (including Dyna Edition and
    #     Postality Knights Edition Enhanced) and the font even gets saved with the
    #     savedata
    # 
    # new in Hybrid Edition:
    #   - supports either windowskin background or custom images:
    #                >>>  All Stormtronics CMS Editions in one!  <<<
    #   - compatible with all my scripts (even DREAM v4.0)
    #   - draws SR in the menu if CLRS was detected
    #   - supports any number of party members
    #   - removed some special add-ons, please get Tons of Add-ons if you want to
    #     continue using them, ST CMS will recognize Tons v4.98b and higher
    #   - more than 1500 code lines less than Nemesis Edition and almost 2000
    #     code lines less than Metal-Plate Edition
    #   - removes options from Options menu that are not / cannot being used at all
    #   - possibility to use a different equip system
    #   - doesn't need skin icons anymore, the icon is drawn from the skin directly
    #   - improved windowskins from "Lexima Legends™ IV - Chaos Project"
    # 
    # 
    # Instructions:
    # 
    #   Copy your character faces into a the folder called "Characters". The
    #   facesets MUST have the same names as the character spritesets with a _face
    #   added at the end. Also copy the windowskins and the icons. Don't forget to
    #   include the font files used by the game in your game folder. Also change
    #   the variable ID in the conditional branches if you use another variable
    #   than 49.
    # 
    # 
    # Configuration:
    # 
    #   CAM_AVAILABLE          - set to true if you use KGC 3DPBC
    #   FACESETS               - set to true if you want to use facesets
    #   BGM_Variable           - ID number of the variable for the Battle BGM
    #                            changer
    #   BGM_Lock               - ID number of the switch used to temporarily
    #                            disable the option of changing the Battle BGM, for
    #                            that, just turn the switch on and off to disable
    #                            and enable this option
    #   WEAPONS_AND_ARMORS     - set to false to not show weapons and armors in the
    #                            Item screen
    #   QUEST_ITEMS            - add any item IDs that are supposed to be quest
    #                            items, so the CMS can separate them
    #   BATTLE_BGMS            - add any battle BGMs you are using
    #   CMS_SKINS              - add any skin name you are using
    #   CMS_FONTS              - add any font name you are using, be sure to
    #                            include the font install files in your game
    #                            release as some people may not have those fonts
    #                            installed
    #   SAVE_NAME              - name of your savefiles (usually "Save")
    #   SAVE_EXTENSION         - extension of your savefiles (usually "rxdata")
    #   SAVE_FILES_NUMBER      - number of savefiles you are using (usually 4)
    #   MAP_BACKGROUND         - set to true to show map as background, otherwise
    #                            if BlizzCFG::CMS_EDITION is not nil or false the
    #                            "CMSFullscreen" image will be displayed
    #   CUSTOM_ITEM_SCENE      - set this to true if you want to use a different
    #                            equip scene and make this CMS compatible even with
    #                            exotic Item Systems
    #   CUSTOM_EQUIPMENT_SCENE - set this to true if you want to use a different
    #                            equip scene and make this CMS compatible even with
    #                            exotic Equipment Systems, change only if you have
    #                            another Equipment Scene script ready
    #   CUSTOM_EQUIP_SCENE     - set this to true if you want to use a different 
    #                            equip scene and make this CMS compatible even with
    #                            exotic Equipment Systems
    #   CUSTOM_SKILL_SCENE     - set this to true if you want to use a different 
    #                            skill scene and make this CMS compatible even with
    #                            exotic Skill Systems
    #   CUSTOM_STATUS_SCENE    - set this to true if you want to use a different
    #                            status scene
    #   CUSTOM_OPTIONS_SCENE   - set this to true if you want to use a different
    #                            options scene, change only if you have another
    #                            Options Scene script ready
    #   CUSTOM_END_SCENE       - set this to true if you want to use a different
    #                            end scene
    #   FONT_BACKGROUND_FIX    - set this to true if you want dark font colors to
    #                            be used in the menu, this comes in handy when the
    #                            custom background images you use are bright
    #   WIN_MIRRORED           - flips horizontally all window positions
    #   CMS_EDITION            - set this to false or nil if you want to use
    #                            Nemesis Edition, set to folder name where in the
    #                            Pictures/CMS the images should be loaded from if
    #                            you want to use custom images as background
    # 
    #   The syntax $game_system.get_cam can be used by an event (Call script
    #   command) to restore the user's setting of the KGC 3DPBC if a forced cam
    #   control was initiated during an event.
    # 
    #   You can use $game_system.reset_battle_bgm to reset the battle BGM to the
    #   player's menu setting if you have changed it for i.e. a boss fight via
    #   event.
    # 
    # 
    # FAQ:
    # 
    # - Problem:
    #   I get an error that some icons can't be found. how do I solve this?
    # 
    # - Solution:
    #   Copy the icons from the demo or download them and place the into the Icons
    #   folder into another folder called "CMS". Done.
    # 
    # - Problem:
    #   I still get an error.
    # 
    # - Solution:
    #   Rename the icons. If your elements were renamed and don't have the standard
    #   names, your icons need to be renamed as well. Same goes for status effects.
    #   Also be sure to add new icons with new names if you have more than the
    #   basic 8 elements and/or more than the basic 16 status effects in your
    #   database.
    # 
    # - Question:
    #   Can I use my own skins, icons, fonts, battle BGMs, etc...?
    # 
    # - Answer:
    #   Of course. Only be sure to change the appropriate options in the script and
    #   to use the appropriate names, so everything can function normally after
    #   that.
    # 
    # - Question:
    #   Can this CMS be connected with other scripts? If yes, how and how much work
    #   is it?
    # 
    # - Answer:
    #   Yes, it can. A little bit of scripting and enhancing the functions of the
    #   CMS are needed if it is going to be connected with other scripts. How much
    #   of additional work it can cause only depends how big the script merge is. A
    #   simple changing of the battle menu to display status effects in icons
    #   should take between 15~30 minutes of scripting and testing. Adding another
    #   option into the Options menu should also take only 15~30 minutes of
    #   scripting and testing. Even adding an entire series of new windows or
    #   implementing another Scene into the menu also won't take more than 30
    #   minutes, because the menu itself works with the "sub-scene" system, saving
    #   this way RAM and CPU.
    # 
    # - Question:
    #   What is the "sub-scene" system? Also I have tried other animated CMS-es.
    #   Why is this one so lag-free?
    # 
    # - Answer:
    #   It is lag-free just because of the "sub-scene" system. This system is also
    #   used in the "Scene_Battle". It only creates windows and handels them when
    #   they are needed or used, otherwise they get disposed or not created at all.
    #   In this script this method is being used to a possible maximum.
    # 
    # - Question:
    #   Is this for real? This CMS doesn't even have 3000 lines of code!
    # 
    # - Answer:
    #   Actually not even 2500 if you don't count the instructions.
    # 
    # - Question:
    #   How is such a large collection of features possible with so relatively few
    #   lines of code?!
    # 
    # - Answer:
    #   Smart coding. =P
    # 
    # 
    # Additional scripts/snipplets/add-ons:
    # 
    #   - Ultimate Font Override v1.0b (by Blizzard)
    #   - BGM/SFX Volume Control with volume correction v1.0b (by Blizzard)
    #   - Map Name/Location v1.0b (by Blizzard)
    #   - Elemental Vulnerability Graph v1.0b (by Blizzard)
    #   - Battle BGM control v2.0b (by Blizzard)
    #   - Options control layout and funcionality v4.0b (by Blizzard)
    #   - CMS layout/funcionality v5.0b (by Blizzard)
    #   - optimized code and delagged by "sub-scene" window handling (by Blizzard)
    # 
    #   If you experience the "Stack level too deep" error, you may already have
    #   one of the scripts listed above and it conflicts with itself, because of
    #   aliased recursive calling. Try removing script by script and testing
    #   everything. Don't forget to backup you Scripts.rxdata before doing so.
    #   Scripts.rxdata is a file that contains your current scripts and is located
    #   in the Data folder of your game folder.
    # 
    # 
    # If you find any bugs, please report them here:
    # http://forum.chaos-project.com
    #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
    
    #==============================================================================
    # module BlizzCFG
    #==============================================================================
    
    module BlizzCFG
    
    #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    # START Configuration
    #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
      # basic config
      CAM_AVAILABLE = false
      FACESETS = false
      BGM_Variable = 49
      BGM_Lock = 49
      WEAPONS_AND_ARMORS = true
      QUEST_ITEMS = [23, 24, 25, 26, 27, 28, 29, 30, 31, 32]
      # custom game configs
      BATTLE_BGMS = [
      #             ['BGM_NAME', VOLUME, PITCH, 'DISPLAY_NAME']
                    ['001-Battle01', 100, 100, 'BGM 1'],
                    ['002-Battle02', 100, 100, 'BGM 2'],
                    ['003-Battle03', 100, 100, 'BGM 3'],
                    ['004-Battle04', 100, 100, 'BGM 4']]
      CMS_SKINS = ['Original', 'Heavy Gold', 'Hell Breath', 'Liquid Water',
                   'Violent Violet', 'Ice Cool', 'Fatal Venom', 'Perfect Chaos',
                   'Blizzard Master']
      CMS_FONTS = ['Arial', 'Future', 'Comic Sans MS', 'Brush Script', 'Tahoma',
                   'Times New Roman']
      # save file options
      SAVE_NAME = 'Save'
      SAVE_EXTENSION = 'rxdata'
      SAVE_FILES_NUMBER = 4
      # extra options
      MAP_BACKGROUND = true
      CUSTOM_ITEM_SCENE = false
      CUSTOM_EQUIPMENT_SCENE = false
      CUSTOM_EQUIP_SCENE = false
      CUSTOM_SKILL_SCENE = false
      CUSTOM_STATUS_SCENE = false
      CUSTOM_OPTIONS_SCENE = false
      CUSTOM_END_SCENE = false
      FONT_BACKGROUND_FIX = false
      WIN_MIRRORED = false
      CMS_EDITION = false # 'Metal-Plate'
    #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    # END Configuration
    #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
      # change only if changed in the 3DPBC script
      CAM_Variable = 25 if CAM_AVAILABLE
    
    end
    
    # for compatibility
    $stormtronics_cms = 5.39
    
    #==============================================================================
    # Game_System
    #==============================================================================
    
    class Game_System
      
      attr_accessor :bgm_volume
      attr_accessor :sfx_volume
      attr_accessor :cam
      attr_reader   :fontname
      attr_reader   :fontsize
      
      alias init_storm_cms_later initialize
      def initialize
        init_storm_cms_later
        @bgm_volume = @sfx_volume = 100
        @cam = 0
        if $tons_version != nil
          if $tons_version >= 6.03 && !@BARS
            @bar_style, @bar_opacity = 0, 255
          end
          if $tons_version < 1.6
            self.fontname = 'Arial'
            self.fontsize = 24
          end
        else
          self.fontname = 'Arial'
          self.fontsize = 24
        end
      end
      
      def fontname=(name)
        Font.default_name = $defaultfonttype = $fontface = @fontname = name
      end
        
      def fontsize=(size)
        Font.default_size = $defaultfontsize = $fontsize = @fontsize = size
      end
      
      def get_cam
        $game_variables[BlizzCFG::CAM_Variable] = @cam
        return true
      end
        
      def reset_battle_bgm
        bgm = BlizzCFG::BATTLE_BGMS[$game_variables[BlizzCFG::BGM_Variable]]
        $game_system.battle_bgm = RPG::AudioFile.new(bgm[0], bgm[1], bgm[2])
        return true
      end
      
      if $dream_music
      def bgm_play(bgm)
        @playing_bgm = bgm
        if bgm != nil && bgm.name != ''
          vol = correction(@bgm_volume)
          dream_ed = bgm.clone
          dream_ed.volume = dream_ed.volume * vol / 100
          DREAM.play_encrypted_audio('Audio/BGM/', dream_ed, 0)
        else
          Audio.bgm_stop
        end
        Graphics.frame_reset
      end
      
      def bgs_play(bgs)
        @playing_bgs = bgs
        if bgs != nil && bgs.name != ''
          vol = correction(@sfx_volume)
          dream_ed = bgs.clone
          dream_ed.volume = dream_ed.volume * vol / 100
          DREAM.play_encrypted_audio('Audio/BGS/', dream_ed, 1)
        else
          Audio.bgs_stop
        end
        Graphics.frame_reset
      end
      
      def me_play(me)
        if me != nil && me.name != ''
          vol = correction(@bgm_volume)
          dream_ed = me.clone
          dream_ed.volume = dream_ed.volume * vol / 100
          DREAM.play_encrypted_audio('Audio/ME/', dream_ed, 2)
        else
          Audio.me_stop
        end
        Graphics.frame_reset
      end
      
      def se_play(se)
        if se != nil && se.name != ''
          vol = correction(@sfx_volume)
          dream_ed = se.clone
          dream_ed.volume = dream_ed.volume * vol / 100
          DREAM.play_encrypted_audio('Audio/SE/', dream_ed, 3)
        end
      end
      else
      def bgm_play(bgm)
        @playing_bgm = bgm
        if bgm != nil && bgm.name != ''
          vol = correction(@bgm_volume)
          Audio.bgm_play('Audio/BGM/' + bgm.name , bgm.volume * vol / 100, bgm.pitch)
        else
          Audio.bgm_stop
        end
        Graphics.frame_reset
      end
      
      def bgs_play(bgs)
        @playing_bgs = bgs
        if bgs != nil && bgs.name != ''
          vol = correction(@sfx_volume)
          Audio.bgs_play('Audio/BGS/' + bgs.name, bgs.volume * vol / 100, bgs.pitch)
        else
          Audio.bgs_stop
        end
        Graphics.frame_reset
      end
      
      def me_play(me)
        if me != nil && me.name != ''
          vol = correction(@bgm_volume)
          Audio.me_play('Audio/ME/' + me.name, me.volume * vol / 100, me.pitch)
        else
          Audio.me_stop
        end
        Graphics.frame_reset
      end
    
      def se_play(se)
        if se != nil && se.name != ''
          vol = correction(@sfx_volume)
          Audio.se_play('Audio/SE/' + se.name, se.volume * vol / 100, se.pitch)
        end
      end
      end
      
      def correction(volume)
        case volume
        when 100 then return 100
        when 95 then return 97
        when 90 then return 95
        when 85 then return 92
        when 80 then return 90
        when 75 then return 87
        when 70 then return 85
        when 65 then return 82
        when 60 then return 80
        when 55 then return 77
        when 50 then return 75
        when 45 then return 72
        when 40 then return 70
        when 35 then return 65
        when 30 then return 60
        when 25 then return 55
        when 20 then return 50
        when 15 then return 40
        when 10 then return 35
        when 5 then return 25
        end
        return 0
      end
      
    end
    
    #============================================================================== 
    # Game_Actor 
    #============================================================================== 
    
    class Game_Actor < Game_Battler 
      
      def now_exp 
        return (@exp-@exp_list[@level])
      end 
      
      def next_exp 
        return (@exp_list[@level+1] > 0 ? @exp_list[@level+1]-@exp_list[@level] : 0)
      end 
      
      def test_equip(equip_type, id)
        case equip_type
        when 0 then old_id, @weapon_id = @weapon_id, id
        when 1 then old_id, @armor1_id = @armor1_id, id
        when 2 then old_id, @armor2_id = @armor2_id, id
        when 3 then old_id, @armor3_id = @armor3_id, id
        when 4 then old_id, @armor4_id = @armor4_id, id
        end
        tested = [self.maxhp, self.maxsp, self.atk, self.pdef, self.mdef, self.str,
                  self.dex, self.agi, self.int, self.eva]
        case equip_type
        when 0 then @weapon_id = old_id
        when 1 then @armor1_id = old_id
        when 2 then @armor2_id = old_id
        when 3 then @armor3_id = old_id
        when 4 then @armor4_id = old_id
        end
        return tested
      end
      
    end 
    
    #============================================================================== 
    # Scene_Title
    #============================================================================== 
    
    class Scene_Title
    
      alias main_storm_cms_later main
      def main
        $map_infos = load_data('Data/MapInfos.rxdata')
        $map_infos.keys.each {|key| $map_infos[key] = $map_infos[key].name}
        main_storm_cms_later
      end
      
    end
    
    #============================================================================== 
    # Game_Map 
    #============================================================================== 
    
    class Game_Map
            
      def name
        return $map_infos[@map_id]
      end
       
    end
    
    #==============================================================================
    # Bitmap
    #==============================================================================
    
    class Bitmap
    
      if $tons_version == nil || $tons_version < 3.71
      alias init_ultimate_font_override_later initialize
      def initialize(w, h = nil)
        if w.is_a?(Numeric) && h.is_a?(Numeric)
          init_ultimate_font_override_later(w, h)
        else
          init_ultimate_font_override_later(w)
        end
        if $game_system != nil && $game_system.fontname != nil &&
            !$scene.is_a?(Scene_Title)
          self.font.name = $game_system.fontname
          self.font.size = $game_system.fontsize
        else
          self.font.name = Font.default_name
          self.font.size = Font.default_size
        end
      end
      
      def gradient_bar(x, y, w, color1, color2, color3, rate, flag = false)
        offset = 5
        x += offset
        y += 26
        (0...offset+3).each {|i| fill_rect(x-i, y+i-2, w+3, 1, Color.new(0, 0, 0))}
        (0...offset+1).each {|i| fill_rect(x-i, y+i-1, w+1, 1, Color.new(255, 255, 255))}
        (0...w+offset).each {|i|
            red = color3.red * i / (w + offset)
            green = color3.green * i / (w + offset)
            blue = color3.blue * i / (w + offset)
            oy = i < offset ? offset-i : 0
            off = i < offset ? i : i > w ? w+offset-i : offset
            fill_rect(x+i-offset+1, y+oy-1, 1, off, Color.new(red, green, blue))}
        if (w*rate).to_i >= offset
          (0...(w*rate).to_i+offset).each {|i|
              red = color1.red + (color2.red-color1.red)*i/((w+offset)*rate)
              green = color1.green + (color2.green-color1.green)*i/((w+offset)*rate)
              blue = color1.blue + (color2.blue-color1.blue)*i/((w+offset)*rate)
              oy = i < offset ? offset-i : 0
              off = i < offset ? i : i > w*rate ? (w*rate).to_i+offset-i : offset
              fill_rect(x+i-offset+1, y+oy-1, 1, off, Color.new(red, green, blue))}
        else
          (0...(w*rate).to_i).each {|i| (0...offset-1).each {|j|
              red = color1.red + (color2.red-color1.red) * i / (w * rate)
              green = color1.green + (color2.green-color1.green) * i / (w * rate)
              blue = color1.blue + (color2.blue-color1.blue) * i / (w * rate)
              set_pixel(x+i-j+1, y+j-1, Color.new(red, green, blue))}}
        end
      end
      end
    
      def draw_element_graph(x_plus, y_plus, rad, color, limit = -1)
        (-rad-1...0).each {|r| (r...0).each {|x|
            color.alpha = 255 * (rad+1.0-r.abs)/(rad+1)
            y = (r.abs * Math.sin(Math.acos(x/r.to_f))).to_i
            h = y * 2
            case limit
            when 1, 8 then h = (y < x.abs ? 0 : y - x.abs)
            when 2, 7 then y > x.abs ? h = y = x.abs : h = y
            when 3, 6
              y > x.abs ? h = y = x.abs : h = y
              y = 0 if y > 0
            when 4, 5 then h, y = (y < x.abs ? 0 : y - x.abs), -x.abs
            end
            if limit < 5
              fill_rect(rad*2-x + x_plus, rad-y + y_plus, 1, h, color)
            else
              fill_rect(rad*2+x+1 + x_plus, rad-y + y_plus, 1, h, color)
            end}}
      end
      
    end
    
    #============================================================================== 
    # Window_Base 
    #============================================================================== 
    
    class Window_Base < Window
      
      alias st_cms_hybrid_hack_init initialize
      def initialize(xx, yy, w, h)
        st_cms_hybrid_hack_init(xx, yy, w, h)
        if BlizzCFG::CMS_EDITION && @background != nil
          @backsprite = Sprite.new
          @backsprite.bitmap = RPG::Cache.picture("CMS/#{BlizzCFG::CMS_EDITION}/#{@background}")
          self.opacity, @backsprite.x, @backsprite.y = 0, self.x, self.y
        end
      end
      
      alias st_cms_hybrid_hack_x_ x=
      def x=(xx)
        st_cms_hybrid_hack_x_($scene.is_a?(Scene_Menu) && BlizzCFG::WIN_MIRRORED ? 640-width-xx : xx)
        @backsprite.x = xx unless @backsprite == nil || @backsprite.disposed?
      end
      
      alias st_cms_hybrid_hack_y_ y=
      def y=(yy)
        st_cms_hybrid_hack_y_(yy)
        @backsprite.y = yy unless @backsprite == nil || @backsprite.disposed?
      end
      
      alias st_cms_hybrid_hack_x x
      def x
        xx = st_cms_hybrid_hack_x
        return ($scene.is_a?(Scene_Menu) && BlizzCFG::WIN_MIRRORED ? 640-width-xx : xx)
      end
      
      alias st_cms_hybrid_hack_z z=
      def z=(z)
        st_cms_hybrid_hack_z(z)
        @backsprite.z = z unless @backsprite == nil || @backsprite.disposed?
      end
      
      alias st_cms_hybrid_hack_width width=
      def width=(w)
        self.x += w-width if $scene.is_a?(Scene_Menu) && BlizzCFG::WIN_MIRRORED
        st_cms_hybrid_hack_width(w)
      end
      
      alias st_cms_hybrid_hack_visible visible=
      def visible=(expr)
        st_cms_hybrid_hack_visible(expr)
        @backsprite.visible = expr unless @backsprite == nil || @backsprite.disposed?
      end
      
      alias disp_sprite_later dispose
      def dispose
        @backsprite.dispose unless @backsprite == nil || @backsprite.disposed?
        disp_sprite_later
      end
      
      alias st_cms_hybrid_hack_normal_color normal_color
      def normal_color
        if $scene.is_a?(Scene_Menu) && BlizzCFG::FONT_BACKGROUND_FIX
          return Color.new(0, 0, 0)
        else
          return st_cms_hybrid_hack_normal_color
        end
      end
    
      alias st_cms_hybrid_hack_system_color system_color
      def system_color
        if $scene.is_a?(Scene_Menu) && BlizzCFG::FONT_BACKGROUND_FIX
          return Color.new(160, 0, 255)
        else
          return st_cms_hybrid_hack_system_color
        end
      end
    
      alias st_cms_hybrid_hack_disabled_color disabled_color
      def disabled_color
        if $scene.is_a?(Scene_Menu) && BlizzCFG::FONT_BACKGROUND_FIX
          return Color.new(96, 96, 96)
        else
          return st_cms_hybrid_hack_disabled_color
        end
      end
      
      alias st_cms_hybrid_hack_crisis_color crisis_color
      def crisis_color
        if $scene.is_a?(Scene_Menu) && BlizzCFG::FONT_BACKGROUND_FIX
          return Color.new(192, 192, 0)
        else
          return st_cms_hybrid_hack_crisis_color
        end
      end
      
      alias draw_actor_graphic_st_cms_later draw_actor_graphic
      def draw_actor_graphic(actor, x, y)
        if actor != nil && actor.character_name != ''
          if self.is_a?(Window_CMSMenuStatus) && BlizzCFG::FACESETS
            bitmap = RPG::Cache.character("#{actor.character_name}_face", actor.character_hue)
            x -= bitmap.width / 2
            y -= bitmap.height
            draw_actor_face_st_cms(actor, x, y)
          else
            draw_actor_graphic_st_cms_later(actor, x, y)
          end
        end
      end
    
      def draw_actor_face_st_cms(actor, x, y)
        if $tons_version == nil || $tons_version < 3.71 || !FACE_HUE
          hue = 0
        else
          hue = (FACE_HUE ? actor.character_hue : 0)
        end
        bitmap = RPG::Cache.character("#{actor.character_name}_face", hue)
        src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
        self.contents.blt(x, y, bitmap, src_rect)
      end
      
      def draw_actor_battler(actor, x, y)
        if actor != nil && actor.battler_name != ''
          bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue)
          cw = bitmap.width
          ch = bitmap.height
          src_rect = Rect.new(0, 0, cw,ch)
          self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
        end
      end
      
      def draw_actor_exp(actor, x, y, width = 144)
        self.contents.font.color = system_color
        self.contents.draw_text(x, y, 48, 32, 'EXP')
        if actor.exp_s.to_i > 999999
          w = self.contents.text_size('999999').width
        else
          w = self.contents.text_size(actor.exp_s).width
        end
        if actor.next_exp_s.to_i > 999999
          w2 = self.contents.text_size('999999').width
        else
          w2 = self.contents.text_size(actor.next_exp_s).width
        end
        self.contents.font.color = normal_color
        self.contents.draw_text(x + 108 - w2, y, w2, 32, actor.exp_s, 2)
        self.contents.draw_text(x + 108, y, 12, 32, '/', 1)
        self.contents.draw_text(x + 120, y, w2, 32, actor.next_exp_s)
      end
      
      def draw_actor_exp_alt(actor, x, y)
        self.contents.font.color = system_color
        self.contents.draw_text(x, y, 64, 32, 'next')
        self.contents.font.color = normal_color
        self.contents.draw_text(x + 56, y, 84, 32, actor.next_rest_exp_s, 2)
      end
    
      def draw_actor_name2(actor, x, y, w, a)
        self.contents.font.color = normal_color
        self.contents.draw_text(x, y, w, 32, actor.name, a)
      end
      
      def up_color
        return Color.new(0, 255, 0)
      end
     
      def down_color
        return Color.new(255, 0, 0)
      end
      
      alias draw_actor_parameter_st_cms_later draw_actor_parameter
      def draw_actor_parameter(actor, x, y, type)
        if type == 7
          self.contents.font.color = system_color
          self.contents.draw_text(x, y, 120, 32, 'Evasion')
          self.contents.font.color = normal_color
          self.contents.draw_text(x + 120, y, 36, 32, actor.eva.to_s, 2)
        else
          draw_actor_parameter_st_cms_later(actor, x, y, type)
        end
      end
      
      def draw_actor_element_vulnerability(actor, x, y, rad = 60)
        colors = []
        (1..8).each {|i|
            rate = actor.element_rate(i)
            if rate < 0
              colors.push(Color.new(0, 255 * (100-rate.abs) / 200, 255))
            elsif rate == 0
              colors.push(Color.new(0, 128, 255))
            elsif rate <= 50
              colors.push(Color.new(0, 255 * (rate+50) / 100, 255 * (50-rate) / 50))
            elsif rate <= 100
              colors.push(Color.new(255 * (rate-50) / 50 , 255, 0))
            elsif rate <= 200
              colors.push(Color.new(255, 255 * (200-rate) / 100, 0))
            else
              colors.push(normal_color)
            end}
        (1..8).each {|i|
            self.contents.draw_element_graph(x + 16, y + 32, rad, colors[i-1], i)}
        save_color = self.contents.font.color.clone
        (1..8).each {|i|
            str1 = $data_system.elements[i]
            str2 = "#{actor.element_rate(i)}%"
            w1 = self.contents.text_size(str1).width
            w2 = self.contents.text_size(str2).width
            case i
            when 1 then x2, y2, x3, y3 = x+152,    y+20,  x+168,    y+4
            when 2 then x2, y2, x3, y3 = x+176,    y+56,  x+192,    y+40
            when 3 then x2, y2, x3, y3 = x+176,    y+92,  x+192,    y+108
            when 4 then x2, y2, x3, y3 = x+152,    y+128, x+168,    y+144
            when 5 then x2, y2, x3, y3 = x+120-w1, y+128, x+104-w2, y+144
            when 6 then x2, y2, x3, y3 = x+96-w1,  y+92,  x+80-w2,  y+108
            when 7 then x2, y2, x3, y3 = x+96-w1,  y+56,  x+80-w2,  y+40
            when 8 then x2, y2, x3, y3 = x+120-w1, y+20,  x+104-w2, y+4
            end
            self.contents.font.color = save_color
            self.contents.draw_text(x2, y2, w1, 32, str1)
            self.contents.font.color = colors[i-1]
            self.contents.draw_text(x3, y3, w2, 32, str2)}
        self.contents.font.color = save_color
      end
      
      if $Blizz_Art
      alias draw_actor_exp_blizzart_later draw_actor_exp
      def draw_actor_exp(actor, x, y, w = 148)
        if $game_system.BARS
          w -= 12
          rate = (actor.next_exp != 0 ? actor.now_exp.to_f / actor.next_exp : 1)
          if rate < 0.5
            color1 = Color.new(20 * rate, 60, 80, 192) 
            color2 = Color.new(60 * rate, 180, 240, 192) 
          elsif rate >= 0.5
            color1 = Color.new(20 + 120 * (rate-0.5), 60 + 40 * (rate-0.5), 80, 192)
            color2 = Color.new(60 + 360 * (rate-0.5), 180 + 120 * (rate-0.5), 240, 192)
          end
          color3 = Color.new(80, 80, 80, 192) 
          self.contents.gradient_bar(x, y, w, color1, color2, color3, rate)
        end
        draw_actor_exp_blizzart_later(actor, x, y)
      end
      
      alias draw_actor_exp_new2 draw_actor_exp_alt
      def draw_actor_exp_alt(actor, x, y, w = 148)
        w -= 12
        rate = (actor.next_exp != 0 ? actor.now_exp.to_f / actor.next_exp : 1)
        if rate < 0.5
          color1 = Color.new(20 * rate, 60, 80)
          color2 = Color.new(60 * rate, 180, 240)
        elsif rate >= 0.5
          color1 = Color.new(20 + 120 * (rate-0.5), 60 + 40 * (rate-0.5), 80)
          color2 = Color.new(60 + 360 * (rate-0.5), 180 + 120 * (rate-0.5), 240)
        end
        color3 = Color.new(80, 80, 80, 192)
        self.contents.gradient_bar(x, y, w, color1, color2, color3, rate)
        draw_actor_exp_new2(actor, x, y)
      end
      end
    
    end
    
    #==============================================================================
    # Window_CMSCommand
    #==============================================================================
    
    class Window_CMSCommand < Window_Command
      
      attr_reader :continue
      
      def initialize(index, continue)
        @background = 'CMSCommand'
        commands = [$data_system.words.item, 'Equipment', $data_system.words.equip,
            $data_system.words.skill, 'Status', 'Options', 'Save', 'Load', 'Exit']
        super(180, commands)
        @continue, self.index, self.x, self.y, self.z = continue, index, 972, 0, 999
      end
      
      def draw_item(i, color)
        self.contents.fill_rect(0, i*32, 148, 32, Color.new(0, 0, 0, 0))
        bitmap = RPG::Cache.icon("CMS/commandmenu#{i}")
        opacity = (color == normal_color ? 255 : 128)
        self.contents.blt(4, 4 + i*32, bitmap, Rect.new(0, 0, 24, 24), opacity)
        self.contents.font.color = color
        self.contents.draw_text(32, i*32, 148, 32, @commands[i])
      end
      
    end
    
    #==============================================================================
    # Window_CMSChooseItem
    #==============================================================================
    
    class Window_CMSChooseItem < Window_Selectable
      
      def initialize
        @background = 'CMSHelp'
        super(0, -576, 640, 64)
        @commands = ['Items', 'Sort', 'Quest Items']
        @item_max = @column_max = @commands.size
        self.contents = Bitmap.new(width - 32, 32)
        refresh
        self.active, self.z, self.index = true, 2900, 0
      end
      
      def refresh
        self.contents.clear
        (0...@item_max).each {|i| draw_item(i, normal_color)}
      end
      
      def draw_item(i, color)
        self.contents.font.color = color
        self.contents.fill_rect(8 + 212*i, 0, 164, 32, Color.new(0, 0, 0, 0))
        self.contents.draw_text(8 + 212*i, 0, 164, 32, @commands[i], 1)
      end
      
    end
    
    #==============================================================================
    # Window_CMSOptions
    #==============================================================================
    
    class Window_CMSOptions < Window_Selectable
    
      attr_accessor :current_font
      attr_reader   :current_skin
      attr_reader   :skin_name
      attr_reader   :font_name
      
      def initialize
        @background = 'CMSFullscreen'
        super(0, 512, 640, 480)
        @commands = ['BGM Volume', 'SFX Volume', 'Battle BGM']
        @commands.push('Battle Cam') if BlizzCFG::CAM_AVAILABLE
        @commands.push('Bar Style', 'Bar Opacity') if $Blizz_Art
        @commands.push('Font', 'Windowskin')
        get_skin_and_font
        self.contents = Bitmap.new(width - 32, height - 32)
        self.z, self.index = 2999, 0
        @item_max = @commands.size
        refresh
      end
      
      def get_option
        return @commands[index]
      end
      
      def refresh
        self.contents.clear
        self.contents.font.name = $game_system.fontname
        (0...@item_max).each {|i|
            self.contents.font.color = normal_color
            self.contents.fill_rect(24, 16 + i*36, 192, 32, Color.new(0, 0, 0, 0))
            self.contents.draw_text(24, 16 + i*36, 192, 32, @commands[i])
            draw_arrows(288, 4 + i*36)
            case @commands[i]
            when 'BGM Volume' then draw_volume(288, 4 + i*36)
            when 'SFX Volume' then draw_volume(288, 4 + i*36, true)
            when 'Battle BGM' then draw_battle_bgm(288, 4 + i*36)
            when 'Battle Cam' then draw_battle_cam(288, 4 + i*36)
            when 'Bar Style' then draw_style(288, 4 + i*36)
            when 'Bar Opacity' then draw_opacity(288, 4 + i*36)
            when 'Font' then draw_font(288, 4 + i*36)
            when 'Windowskin' then draw_skin(288, 4 + i*36)
            end}
      end
          
      def draw_arrows(x, y)
        self.contents.draw_text(x - 32, y + 13, 32, 32, '<<')
        self.contents.draw_text(x + 249, y + 13, 32, 32, '>>')
      end
      
      def draw_volume(x, y, mode = false, width = 224)
        volume = (mode ? $game_system.sfx_volume.to_f : $game_system.bgm_volume.to_f)
        vol = volume.to_f / 100
        color1 = Color.new(20, 40, 80, 192)
        color2 = Color.new(60, 120, 240, 192)
        color3 = Color.new(0, 0, 80, 192)
        old, $game_system.bar_opacity = $game_system.bar_opacity, 255 if $Blizz_Art
        self.contents.gradient_bar(x, y, width, color1, color2, color3, vol, true)
        $game_system.bar_opacity = old if $Blizz_Art
      end
      
      def draw_style(x, y, width = 224)
        color1 = Color.new(80, 80, 0, 192)
        color2 = Color.new(240, 240, 0, 192)
        self.contents.gradient_bar(x + 32, y, width - 64, color1, color2, color1, 1, true)
      end
      
      def draw_battle_bgm(x, y, width = 224)
        bgm = BlizzCFG::BATTLE_BGMS[$game_variables[BlizzCFG::BGM_Variable]][3]
        if $game_switches[BlizzCFG::BGM_Lock] || BlizzCFG::BATTLE_BGMS.size <= 1
          self.contents.font.color = Color.new(0, 0, 0, 255)
          self.contents.draw_text(x+1, y + 13+1, 224, 32, bgm, 1)
          self.contents.font.color = disabled_color
        else
          self.contents.font.color = normal_color
        end
        self.contents.draw_text(x, y + 13, 224, 32, bgm, 1)
      end
      
      def draw_battle_cam(x, y, width = 224)
        cam = ($game_variables[BlizzCFG::CAM_Variable] == 0 ? 'ON' : 'OFF')
        self.contents.draw_text(x, y + 13, 224, 32, cam, 1)
      end
      
      def draw_opacity(x, y, width = 224)
        alpha = case $game_system.bar_opacity
        when 0 then 'No Bar'
        when 1..85 then 'Light'
        when 86..170 then 'Medium'
        when 171..254 then 'Hard'
        when 255 then 'Full'
        end
        self.contents.draw_text(x, y + 13, 224, 32, alpha, 1)
      end
      
      def draw_font(x, y, width = 224)
        @font_name = BlizzCFG::CMS_FONTS[@current_font]
        self.contents.font.name = @font_name
        self.contents.draw_text(x, y + 13, 224, 32, @font_name, 1)
        self.contents.font.name = $game_system.fontname
      end
      
      def draw_skin(x, y, width = 224)
        @skin_name = BlizzCFG::CMS_SKINS[self.current_skin]
        self.contents.draw_text(x, y + 13, 224, 32, @skin_name, 1)
        self.contents.fill_rect(x + 48, y +428, 128, 128, Color.new(0, 0, 0, 0))
        bitmap = RPG::Cache.windowskin(@skin_name)
        self.contents.blt(x + 50, y + 50, bitmap, Rect.new(2, 2, 124, 124))
        self.contents.blt(x + 48, y + 48, bitmap, Rect.new(128, 0, 16, 16))
        self.contents.blt(x + 160, y + 48, bitmap, Rect.new(176, 0, 16, 16))
        self.contents.blt(x + 48, y + 160, bitmap, Rect.new(128, 48, 16, 16))
        self.contents.blt(x + 160, y + 160, bitmap, Rect.new(176, 48, 16, 16))
        (2..4).each {|i|
            self.contents.blt(x+i*32, y+48, bitmap, Rect.new(144, 0, 32, 16))}
        (2..4).each {|i|
            self.contents.blt(x+i*32, y+160, bitmap, Rect.new(144, 48, 32, 16))}
        (2..4).each {|i|
            self.contents.blt(x+48, y+i*32, bitmap, Rect.new(128, 16, 16, 32))}
        (2..4).each {|i|
            self.contents.blt(x+160, y+i*32, bitmap, Rect.new(176, 16, 16, 32))}
      end
      
      def current_skin
        return (@current_skin == nil ? 0 : @current_skin)
      end
      
      def current_skin=(val)
        @current_skin = (val.is_a?(Numeric) ? val : 0)
      end
      
      def get_skin_and_font
        @font_name = $game_system.fontname
        @current_font = BlizzCFG::CMS_FONTS.index(@font_name)
        @skin_name = $game_system.windowskin_name
        self.current_skin = BlizzCFG::CMS_SKINS.index(@skin_name)
      end
      
      def update_cursor_rect
        if self.index < 0
          self.cursor_rect.empty
        else
          self.cursor_rect.set(16, @index*36 + 16, 128, 32)
        end
      end
      
    end
    
    #==============================================================================
    # Window_CMSTarget
    #==============================================================================
    
    class Window_CMSTarget < Window_Base
      
      attr_reader :index
      attr_reader :actor
      attr_reader :dir
      
      def initialize(actor, mode = false)
        @background = 'CMSTarget'
        super(-304, 64, 256, 104)
        self.contents = Bitmap.new(width - 32, height - 32)
        @actor, @item_max = actor, 1
        self.y += actor.index*104 unless mode
        self.z = 3999
        self.index = -1
        refresh
      end
      
      def index=(i)
        @index = i
        update_cursor_rect
      end
      
      def refresh
        self.contents.clear
        draw_actor_name(@actor, 4, -4)
        draw_actor_state(@actor, 100, -4, 112)
        draw_actor_hp(@actor, 44, 16)
        draw_actor_sp(@actor, 44, 38)
      end
      
      def update_actor(actor)
        @actor = actor
        refresh
      end
      
      def dir=(val)
        self.y -= val*40
        @dir = val
      end
      
      def update(i = @actor.index - 1)
        unless self.index == -2
          if @actor.index == i
            self.index = 0 if self.index == -1
          else
            self.index = -1 if self.index == 0
          end
        end
        self.y = 64+@actor.index*104 unless self.active
        @dir = 0 if (self.y-64) / 104 * 104 == self.y-64
        super()
        update_cursor_rect
      end
      
      def update_cursor_rect
        if !self.active || self.index == -1
          self.cursor_rect.empty
        elsif self.index >= 0
          self.cursor_rect.set(0, @index * 96, 224, 72)
        elsif self.index == -2
          self.cursor_rect.set(0, 0, 224, 72)
        end
      end
      
    end
    
    #==============================================================================
    # Window_Help
    #==============================================================================
    
    class Window_Help < Window_Base
      
      alias init_storm_cms_later initialize
      def initialize
        @background = 'CMSHelp' if $scene.is_a?(Scene_Menu)
        init_storm_cms_later
        refresh
      end
      
      def refresh
        self.contents.font.name = $game_system.fontname
      end
      
    end
    
    #==============================================================================
    # Window_CMSItem
    #==============================================================================
    
    class Window_CMSItem < Window_Selectable
    
      def initialize
        @background = 'CMSItem'
        super(256, -512, 384, 416)
        self.active, self.visible, self.z, self.index = false, false, 2999, -1
        refresh
      end
    
      def data
        return @data[self.index]
      end
      
      def draw_item(i)
        number = case @data[i]
        when RPG::Item then $game_party.item_number(@data[i].id)
        when RPG::Weapon then $game_party.weapon_number(@data[i].id)
        when RPG::Armor then $game_party.armor_number(@data[i].id)
        end
        if @data[i].is_a?(RPG::Item) && $game_party.item_can_use?(@data[i].id) ||
            @mode == nil
          self.contents.font.color = normal_color
        else
          self.contents.font.color = disabled_color
        end
        self.contents.fill_rect(4, i*32, 352, 32, Color.new(0, 0, 0, 0))
        bitmap = RPG::Cache.icon(@data[i].icon_name)
        opacity = self.contents.font.color == normal_color ? 255 : 128
        self.contents.blt(4, i*32 + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
        self.contents.draw_text(32, i*32, 212, 32, @data[i].name, 0)
        self.contents.draw_text(308, i*32, 16, 32, ':', 1)
        self.contents.draw_text(324, i*32, 24, 32, number.to_s, 2)
      end
    
      def update_help
        @help_window.set_text(data == nil ? '' : data.description)
      end
      
    end
    
    #==============================================================================
    # Window_NormalItem
    #==============================================================================
    
    class Window_NormalItem < Window_CMSItem
      
      attr_accessor :mode
      
      def initialize
        @mode = 0
        super
        self.visible = true
      end
      
      def refresh
        if self.contents != nil
          self.contents.dispose
          self.contents = nil
        end
        data1, data2, data3 = [], [], []
        (1...$data_items.size).each {|i|
            if $game_party.item_number(i) > 0 && !BlizzCFG::QUEST_ITEMS.include?(i)
              data1.push($data_items[i])
            end}
        if BlizzCFG::WEAPONS_AND_ARMORS
          (1...$data_weapons.size).each {|i|
              data2.push($data_weapons[i]) if $game_party.weapon_number(i) > 0}
          (1...$data_armors.size).each {|i|
              data3.push($data_armors[i]) if $game_party.armor_number(i) > 0}
        end
        if [1, 2].include?(@mode)
          data1.sort! {|a, b|
              $game_party.item_number(a.id) <=> $game_party.item_number(b.id)}
          data2.sort! {|a, b|
              $game_party.weapon_number(a.id) <=> $game_party.weapon_number(b.id)}
          data3.sort! {|a, b|
              $game_party.armor_number(a.id) <=> $game_party.armor_number(b.id)}
          [data1, data2, data3].each {|ary| ary.reverse!} if @mode == 2
        elsif [3, 4].include?(@mode)
          [data1, data2, data3].each {|ary| ary.sort! {|a, b| a.name <=> b.name}}
          [data1, data2, data3].each {|ary| ary.reverse!} if @mode == 4
        end
        @data = data1 + data2 + data3  
        @item_max = @data.size
        self.contents = Bitmap.new(width - 32, @item_max * 32) if @item_max > 0
        (0...@item_max).each {|i| draw_item(i)}
      end
      
    end
    
    #==============================================================================
    # Window_QuestItem
    #==============================================================================
    
    class Window_QuestItem < Window_CMSItem
      
      def refresh
        if self.contents != nil
          self.contents.dispose
          self.contents = nil
        end
        @data = []
        (1...$data_items.size).each {|i|
            if $game_party.item_number(i) > 0 && BlizzCFG::QUEST_ITEMS.include?(i)
              @data.push($data_items[i])
            end}
        @item_max = @data.size
        self.contents = Bitmap.new(width - 32, @item_max * 32) if @item_max > 0
        (0...@item_max).each {|i| draw_item(i)}
      end
    
    end
    
    #==============================================================================
    # Window_EquipmentItem
    #==============================================================================
    
    class Window_EquipmentItem < Window_CMSItem
    
      attr_accessor :item_max
      
      def initialize(actor)
        @actor = actor
        super()
        self.x, self.y, self.z, self.index = 256, -548, 2999, 0
        self.active = self.visible = true
      end
    
      def update_actor(actor)
        @actor = actor
        refresh
      end
      
      def refresh
        if self.contents != nil
          self.contents.dispose
          self.contents = nil
        end
        @data = []
        (1...$data_weapons.size).each {|i|
            @data.push($data_weapons[i]) if $game_party.weapon_number(i) > 0}
        (1...$data_armors.size).each {|i|
            @data.push($data_armors[i]) if $game_party.armor_number(i) > 0}
        @item_max = @data.size
        self.contents = Bitmap.new(width - 32, @item_max * 32) if @item_max > 0
        (0...@item_max).each {|i| draw_item(i)}
      end
    
      def draw_item(i)
        case @data[i]
        when RPG::Weapon
          if @actor.equippable?($data_weapons[@data[i].id])
            self.contents.font.color = normal_color
          else
            self.contents.font.color = disabled_color
          end
          number = $game_party.weapon_number(@data[i].id)
        when RPG::Armor
          if @actor.equippable?($data_armors[@data[i].id])
            self.contents.font.color = normal_color
          else
            self.contents.font.color = disabled_color
          end
          number = $game_party.armor_number(@data[i].id)
        end
        self.contents.fill_rect(4, i*32, 352, 32, Color.new(0, 0, 0, 0))
        bitmap = RPG::Cache.icon(@data[i].icon_name)
        opacity = self.contents.font.color == normal_color ? 255 : 128
        self.contents.blt(4, 4 + i*32, bitmap, Rect.new(0, 0, 24, 24), opacity)
        self.contents.draw_text(32, i*32, 212, 32, @data[i].name, 0)
        self.contents.draw_text(308, i*32, 16, 32, ':', 1)
        self.contents.draw_text(324, i*32, 24, 32, number.to_s, 2)
      end
    
    end
    
    #==============================================================================
    # Window_CMSSkill
    #==============================================================================
    
    class Window_CMSSkill < Window_CMSItem
      
      def initialize(actor)
        @actor = actor
        super()
        self.x, self.y, self.z, self.index = -512, 64, 2999, 0
        self.active = self.visible = true
      end
    
      def update_actor(actor)
        @actor = actor
        refresh
      end
    
      def refresh
        if self.contents != nil
          self.contents.dispose
          self.contents = nil
        end
        @data = []
        @actor.skills.each {|id| @data.push($data_skills[id])}
        @item_max = @data.size
        self.contents = Bitmap.new(width - 32, @item_max * 32) if @item_max > 0
        (0...@item_max).each {|i| draw_item(i)}
      end
    
      def draw_item(i)
        self.contents.fill_rect(4, i*32, 352, 32, Color.new(0, 0, 0, 0))
        if @actor.skill_can_use?(@data[i].id)
          self.contents.font.color = normal_color
        else
          self.contents.font.color = disabled_color
        end
        bitmap = RPG::Cache.icon(@data[i].icon_name)
        opacity = self.contents.font.color == normal_color ? 255 : 128
        self.contents.blt(4, 4 + i*32, bitmap, Rect.new(0, 0, 24, 24), opacity)
        text = @data[i].name
        tons = ($tons_version != nil ? $tons_version : 0)
        if tons >= 4.0 && TONS_OF_ADDONS::EQUAP_SKILLS && DISPLAY_AP_REQ
          aps = BlizzCFG.maxap(@data[i].id)
          if aps > 0
            text += " (#{@actor.ap(@data[i].id)}/#{aps})"
          elsif DISPLAY_AP_ZERO
            text += ' (0/0)'
          end
        end
        self.contents.draw_text(32, i*32, 204, 32, text)
        if @data[i].sp_cost > 0
          sp_cost = @data[i].sp_cost
          if tons >= 6.54 && $game_system.SP_COST_MOD
            sp_cost = BlizzCFG.get_cost_mod(@actor.states, sp_cost)
          end
          self.contents.draw_text(292, i*32, 48, 32, sp_cost.to_s, 2)
        end
      end
    
    end
    
    #==============================================================================
    # Window_CMSEquipLeft
    #==============================================================================
    
    class Window_CMSEquipLeft < Window_Base
      
      attr_accessor :mode
      attr_accessor :current
      attr_accessor :changed
      
      def initialize(actor)
        @background = 'CMSEquipLeft'
        super(640, 64, 288, 416)
        self.contents = Bitmap.new(width - 32, height - 32)
        @current = @changed = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        @elements, @states, @actor, @mode, self.z = [], [], actor, 0, 2999
        refresh
      end
      
      def update_actor(actor)
        @actor = actor
        refresh
      end
      
      def draw_actor_hp(actor, x, y, width = 144)
        self.contents.font.color = system_color
        self.contents.draw_text(x, y, 96, 32, "max #{$data_system.words.hp}")
        self.contents.font.color = normal_color
        self.contents.draw_text(x + 108, y, 48, 32, actor.maxhp.to_s, 2)
      end
        
      def draw_actor_sp(actor, x, y, width = 144)
        self.contents.font.color = system_color
        self.contents.draw_text(x, y, 96, 32, "max #{$data_system.words.sp}")
        self.contents.font.color = normal_color
        self.contents.draw_text(x + 108, y, 48, 32, actor.maxsp.to_s, 2)
      end
        
      def refresh
        self.contents.clear
        draw_actor_name(@actor, 4, 0)
        draw_actor_level(@actor, 180, 0)
        draw_actor_hp(@actor, 4, 28)
        draw_actor_sp(@actor, 4, 52)
        (0..7).each {|i| draw_actor_parameter(@actor, 4, 76 + i*24, i)}
        if @mode == 0
          self.contents.font.color = up_color
          self.contents.draw_text(4, 276, 200, 32, 'Elemental attack:')
          self.contents.draw_text(4, 324, 200, 32, 'Status attack:')
        elsif @mode == 1
          self.contents.font.color = up_color
          self.contents.draw_text(4, 276, 200, 32, 'Elemental resistance:')
          self.contents.draw_text(4, 324, 200, 32, 'Status resistance:')
        end
        self.contents.font.color = normal_color
        draw_elements(4, 300)
        draw_states(4, 348)
        @current.each_index {|i|
            val = @current[i] - @changed[i]
            if val != 0
              self.contents.font.color = system_color
              self.contents.draw_text(162, 28+i*24, 40, 32, '»»', 1)
              self.contents.font.color = (val > 0 ? down_color : up_color)
              self.contents.draw_text(204, 28+i*24, 48, 32, @changed[i].abs.to_s, 2)
            end}
      end
      
      def set_new_parameters(elements, states)
        @elements, @states = elements, states
        refresh
      end
      
      def draw_elements(x, y)
        @elements.each_index {|i|
            icon = RPG::Cache.icon("CMS/elm_#{$data_system.elements[@elements[i]].downcase}")
            self.contents.blt(x + i*28, y + 4, icon, Rect.new(0, 0, 24, 24))}
      end
      
      def draw_states(x, y)
        @states.each_index {|i|
            icon = RPG::Cache.icon("CMS/stat_#{$data_states[@states[i]].name.downcase}")
            self.contents.blt(x + i*28, y + 4, icon, Rect.new(0, 0, 24, 24))}
      end
      
    end
      
    #==============================================================================
    # Window_CMSEquipRight
    #==============================================================================
    
    class Window_CMSEquipRight < Window_Selectable
    
      def initialize(actor)
        @background = 'CMSEquipRight'
        super(928, 64, 352, 192)
        self.contents = Bitmap.new(width - 32, height - 32)
        @actor, self.active, self.z, self.index = actor, true, 2999, 0
        refresh
      end
    
      def data
        return @data[self.index]
      end
      
      def update_actor(actor)
        @actor = actor
        refresh
      end
    
      def refresh
        self.contents.clear
        @data = []
        @data.push($data_weapons[@actor.weapon_id])
        @data.push($data_armors[@actor.armor1_id])
        @data.push($data_armors[@actor.armor2_id])
        @data.push($data_armors[@actor.armor3_id])
        @data.push($data_armors[@actor.armor4_id])
        @item_max = @data.size
        self.contents.font.color = system_color
        self.contents.draw_text(4, 32 * 0, 120, 32, $data_system.words.weapon)
        self.contents.draw_text(4, 32 * 1, 120, 32, $data_system.words.armor1)
        self.contents.draw_text(4, 32 * 2, 120, 32, $data_system.words.armor2)
        self.contents.draw_text(4, 32 * 3, 120, 32, $data_system.words.armor3)
        self.contents.draw_text(4, 32 * 4, 120, 32, $data_system.words.armor4)
        (0...5).each {|i| draw_item_name(@data[i], 120, 32 * i)}
      end
    
      def update_help
        @help_window.set_text(data == nil ? '' : data.description)
      end
      
    end
    
    #==============================================================================
    # Window_CMSEquipItem
    #==============================================================================
    
    class Window_CMSEquipItem < Window_Selectable
    
      def initialize(actor, equip_type)
        @background = 'CMSEquipItem'
        super(928, 256, 352, 224)
        self.active = self.visible = false
        @actor, @equip_type, self.z, self.index = actor, equip_type, 3000, -1
        refresh
      end
    
      def data
        return @data[self.index]
      end
    
      def update_actor(actor, equip_type)
       @actor = actor
       @equip_type = equip_type
       refresh
     end
      
      def refresh
        if self.contents != nil
          self.contents.dispose
          self.contents = nil
        end
        @data = []
        if @equip_type == 0
          weapon_set = $data_classes[@actor.class_id].weapon_set
          (1...$data_weapons.size).each {|i|
              if $game_party.weapon_number(i) > 0 && weapon_set.include?(i)
                @data.push($data_weapons[i])
              end}
        else
          armor_set = $data_classes[@actor.class_id].armor_set
          (1...$data_armors.size).each {|i|
              if $game_party.armor_number(i) > 0 && armor_set.include?(i)
                @data.push($data_armors[i]) if $data_armors[i].kind == @equip_type-1
              end}
        end
        @data.push(nil)
        @item_max = @data.size
        self.contents = Bitmap.new(width - 32, @item_max * 32)
        (0...@item_max-1).each {|i| draw_item(i)}
        self.contents.font.color = system_color
        self.contents.draw_text(4, (@item_max-1)*32, 100, 32, '[Unequip]')
      end
    
      def draw_item(i)
        number = case @data[i]
        when RPG::Weapon then $game_party.weapon_number(@data[i].id)
        when RPG::Armor then $game_party.armor_number(@data[i].id)
        end
        self.contents.font.color = normal_color
        bitmap = RPG::Cache.icon(@data[i].icon_name)
        self.contents.blt(4, 4 + i*32, bitmap, Rect.new(0, 0, 24, 24))
        self.contents.draw_text(32, i*32, 212, 32, @data[i].name, 0)
        self.contents.draw_text(212, i*32, 16, 32, ':', 1)
        self.contents.draw_text(228, i*32, 24, 32, number.to_s, 2)
      end
    
      def update_help
        @help_window.set_text(data == nil ? '' : data.description)
      end
      
    end
    
    #==============================================================================
    # Window_CMSStatus
    #==============================================================================
    
    class Window_CMSStatus < Window_Base
    
      def initialize(actor)
        @background = 'CMSFullscreen'
        super(0, 512, 640, 480)
        self.contents = Bitmap.new(width - 32, height - 32)
        @actor, self.active, self.z = actor, true, 2999
        refresh
      end
    
      def refresh
        self.contents.clear
        self.contents.font.color = normal_color
        self.contents.draw_text(224, 0, 120, 32, @actor.name, 1)
        draw_actor_battler(@actor, 284, 232)
        draw_actor_class(@actor, 400, 32)
        draw_actor_level(@actor, 400, 0)
        draw_actor_state(@actor, 400, 64, 168)
        draw_actor_hp(@actor, 400, 92, 172)
        draw_actor_sp(@actor, 400, 122, 172)
        if $crls
          if BlizzCFG::DRAW_SR_BAR
            draw_actor_sr_with_bar(@actor, 400, 152, 172)
          else
            draw_actor_sr(@actor, 400, 152, 172)
          end
          draw_actor_exp(@actor, 400, 182, 172)
        else
          draw_actor_exp(@actor, 400, 152, 172)
        end
        (0..7).each {|i| draw_actor_parameter(@actor, 4, i*28, i)}
        self.contents.font.color = system_color
        w = self.contents.text_size('Elemental Vulnerability').width
        self.contents.draw_text(365, 244, w, 32, 'Elemental Vulnerability')
        self.contents.font.size -= 4
        draw_actor_element_vulnerability(@actor, 320, 268)
        self.contents.font.size += 4
        self.contents.font.color = system_color
        self.contents.draw_text(84, 244, 96, 32, 'Equipment')
        self.contents.draw_text(4, 276, 96, 32, $data_system.words.weapon)
        self.contents.draw_text(4, 308, 96, 32, $data_system.words.armor1)
        self.contents.draw_text(4, 340, 96, 32, $data_system.words.armor2)
        self.contents.draw_text(4, 372, 96, 32, $data_system.words.armor3)
        self.contents.draw_text(4, 404, 96, 32, $data_system.words.armor4)
        equips = [$data_weapons[@actor.weapon_id], $data_armors[@actor.armor1_id],
            $data_armors[@actor.armor2_id], $data_armors[@actor.armor3_id],
            $data_armors[@actor.armor4_id]]
        equips.each_index {|i|
            if @actor.equippable?(equips[i])
              draw_item_name(equips[i], 108, 276 + i*32)
            else
              self.contents.font.color = (i == 0 ? knockout_color : crisis_color)
              self.contents.draw_text(108, 276 + i*32, 192, 32, 'Nothing equipped')
            end}
      end
      
      def update_actor(actor)
        @actor = actor
        refresh
      end
      
    end
    
    #==============================================================================
    # Window_CMSSortCommand
    #==============================================================================
    
    class Window_CMSSortCommand < Window_Command
    
      def initialize
        @background = 'CMSMini'
        super(180, ['Standard', 'by quantity', 'by alphabet'])
        self.x, self.y, self.z = 224, -128, 9999
      end
      
    end
    
    #==============================================================================
    # Window_CMSEndCommand
    #==============================================================================
    
    class Window_CMSEndCommand < Window_Command
    
      def initialize
        @background = 'CMSMini'
        super(180, ['Back to game', 'Back to title', 'Exit game'])
        self.x, self.y, self.z = 460, 524, 3999
      end
      
    end
    
    #==============================================================================
    # Window_CMSInfo
    #==============================================================================
    
    class Window_CMSInfo < Window_Base
    
      def initialize
        @background = 'CMSInfo'
        super(0, 0, 180, 160)
        self.contents = Bitmap.new(width - 32, height - 32)
        self.active, self.x, self.y, self.z = false, 460, 832, 1999
        refresh
      end
    
      def refresh
        self.contents.clear
        self.contents.font.name = $game_system.fontname
        @double_sec = Graphics.frame_count * 2 / Graphics.frame_rate
        total_sec = @double_sec / 2
        hour, min, sec = total_sec / 60 / 60, total_sec / 60 % 60, total_sec % 60
        if @double_sec % 2 == 1
          text = sprintf('%02d %02d %02d', hour, min, sec)
        else
          text = sprintf('%02d:%02d:%02d', hour, min, sec)
        end
        self.contents.font.color = system_color
        cx = contents.text_size($data_system.words.gold).width
        self.contents.draw_text(148-cx, 32, cx, 32, $data_system.words.gold, 2)
        self.contents.draw_text(0, 64, 148, 32, 'Location:')
        self.contents.font.color = normal_color
        self.contents.draw_text(0, 0, 148, 32, text, 1)
        self.contents.draw_text(0, 32, 144-cx, 32, $game_party.gold.to_s, 2)
        self.contents.draw_text(0, 96, 148, 32, $game_map.name, 2)
      end
      
      def update
        super
        refresh if Graphics.frame_count * 2 / Graphics.frame_rate != @double_sec
      end
      
    end
    
    #==============================================================================
    # Window_CMSMenuStatus
    #==============================================================================
    
    class Window_CMSMenuStatus < Window_Base
      
      attr_reader :index
      attr_reader :actor
      attr_reader :dir
      
      def initialize(actor)
        @background = 'CMSMenuStatus'
        super(0, 0, 460, 120)
        self.contents = Bitmap.new(width - 32, height - 32)
        @actor = actor
        @dir = 0
        refresh
        self.active = false
        self.index = -1
        self.x, self.y, self.z = -512, @actor.index * 120, 999
      end
      
      def index=(i)
        @index = i
        update_cursor_rect
      end
      
      def refresh
        self.contents.clear
        self.contents.font.name = $game_system.fontname
        self.contents.font.color = normal_color
        draw_actor_graphic(@actor, 56, 80)
        draw_actor_name2(@actor, 8, 0, 88, 1)
        draw_actor_level(@actor, 104, 0)
        draw_actor_state(@actor, 168, 0, 252)
        draw_actor_hp(@actor, 104, 28)
        draw_actor_sp(@actor, 272, 28)
        draw_actor_exp_alt(@actor, 272, 56)
        if $crls
          if BlizzCFG::DRAW_SR_BAR
            draw_actor_sr_with_bar(@actor, 104, 56)
          else
            draw_actor_sr(@actor, 104, 56)
          end
        end
      end
      
      def dir=(val)
        self.y -= val*56
        @dir = val
      end
      
      def update(i = @actor.index - 1)
        if @actor.index == i
          self.index = 0 if self.index == -1
        else
          self.index = -1 if self.index == 0
        end
        self.y = @actor.index*120 unless self.active
        @dir = 0 if self.y / 120 * 120 == self.y
        super()
      end
      
      def update_cursor_rect
        if @index < 0
          self.cursor_rect.empty
        else
          self.cursor_rect.set(0, 0, width - 32, height - 32)
        end
      end
      
    end
    
    #==============================================================================
    # Scene_Menu
    #==============================================================================
    
    class Scene_Menu
      
      def initialize(menu_index = 0)
        @menu_index = menu_index
        @actor_index = @target_index = -1
        @viewport1 = Viewport.new(0, 0, 640, 480)
        @moved = false
      end
    
      def main
        if BlizzCFG::MAP_BACKGROUND
          @spriteset = Spriteset_Map.new
        elsif BlizzCFG::CMS_EDITION
          @spriteset = Sprite.new
          @spriteset.bitmap = RPG::Cache.picture("CMS/#{BlizzCFG::CMS_EDITION}/CMSFullscreen")
        end
        continue = ((1..BlizzCFG::SAVE_FILES_NUMBER).any? {|i|
            FileTest.exist?("#{BlizzCFG::SAVE_NAME}#{i}.#{BlizzCFG::SAVE_EXTENSION}")})
        @command_window = Window_CMSCommand.new(@menu_index, continue)
        (0...5).each {|i| @command_window.disable_item(i)} if $game_party.actors.size == 0
        @command_window.disable_item(6) if $game_system.save_disabled
        @command_window.disable_item(7) unless @command_window.continue
        @info_window = Window_CMSInfo.new
        @status_windows, @target_windows = [], []
        $game_party.actors.each {|actor|
            @status_windows.push(Window_CMSMenuStatus.new(actor))}
        @help_window = Window_Help.new
        @help_window.x, @help_window.y, @help_window.z = 0, -368, 9999
        Graphics.transition
        loop do
          Graphics.update
          Input.update
          update
          break if @scene != nil || $scene != self
        end
        loop do
          Graphics.update
          (@status_windows + [@command_window, @info_window]).each {|win| win.update}
          move_da_outro
          break if @status_windows[0].x <= - 512
        end
        Graphics.freeze
        (@status_windows + @target_windows + [@command_window, @info_window,
            @help_window, @spriteset]).each {|obj| obj.dispose if obj != nil}
        del_sort if @sort_window != nil
        del_status if @playerstatus_window != nil
        del_equip if @left_window != nil
        del_skill if @skill_window != nil
        del_end if @end_window != nil
        del_items if @item_choose_window != nil
        del_equipment if @equips_window != nil
        del_options if @options_window != nil
        if @scene.is_a?(Scene_Title)
          Graphics.transition(25)
          Graphics.freeze
        end
        $scene = @scene
      end
      
      def equip_refresh
        if @item_window.active
          item = @item_window.data
          last_hp = @actor.hp
          last_sp = @actor.sp
          @left_window.current = [@actor.maxhp, @actor.maxsp, @actor.atk,
              @actor.pdef, @actor.mdef, @actor.str, @actor.dex, @actor.agi,
              @actor.int, @actor.eva]
          @left_window.changed = @actor.test_equip(@right_window.index, item == nil ? 0 : item.id)
          elements = (item.is_a?(RPG::Weapon) ? item.element_set :
              (item.is_a?(RPG::Armor) ? item.guard_element_set : []))
          states = (item.is_a?(RPG::Weapon) ? item.plus_state_set :
              (item.is_a?(RPG::Armor) ? item.guard_state_set : []))
          @actor.hp = last_hp
          @actor.sp = last_sp
          @left_window.set_new_parameters(elements, states)
        else
          @left_window.current = @left_window.changed = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
          @left_window.set_new_parameters([], [])
        end
      end
      
      def del_sort
        @sort_window.dispose
        @sort_window = nil
      end
      
      def del_status
        @playerstatus_window.dispose
        @playerstatus_window = nil
      end
      
      def del_equip
        @left_window.dispose
        @right_window.dispose
        @item_windows.each {|win| win.dispose}
        @left_window = @right_window = @item_window = @item_windows = nil
      end
      
      def del_skill
        @skill_window.dispose
        @skill_window = nil
      end
      
      def del_target
        @target_windows.each {|win| win.dispose}
        @target_windows = []
      end
    
      def del_end
        @end_window.dispose
        @end_window = nil
      end
      
      def del_items
        @items_window1.dispose
        @items_window1 = nil
        @items_window2.dispose
        @items_window2 = nil
        @item_choose_window.dispose
        @item_choose_window = nil
      end
      
      def del_equipment
        @equips_window.dispose
        @equips_window = nil
        del_target
      end
      
      def del_options
        @options_window.dispose
        @options_window = nil
      end
      
      def update
        @status_windows.each {|win| win.update(@actor_index)}
        @target_windows.each {|win| win.update(@target_index)}
        @info_window.update
        unless @status_windows[0].x < 0 || @status_windows[0].dir != 0 ||
            @target_windows[0] != nil && @target_windows[0].dir != 0
          @command_window.update
          [@help_window, @equips_window, @item_choose_window, @sort_window,
          @skill_window, @left_window, @right_window, @playerstatus_window,
          @options_window, @end_window].each {|win| win.update if win != nil}
        end
        move_da_main if @status_windows[0].x < 0
        move_da_selection if @status_windows[0].dir != 0
        move_da_targeting if @target_windows[0] != nil && @target_windows[0].dir != 0
        move_da_status if @playerstatus_window != nil && @playerstatus_window.y > 0
        move_da_equip if @left_window != nil && @left_window.x > 0
        move_da_skill if @skill_window != nil && @skill_window.x < 256
        move_da_target if @target_windows[0] != nil && @target_windows[0].x < 0
        move_da_items if @item_choose_window != nil && @item_choose_window.y < 0
        move_da_sort if @sort_window != nil && @sort_window.y < 64
        move_da_equipment if @equips_window != nil && @equips_window.y < 64
        move_da_options if @options_window != nil && @options_window.y > 0
        move_da_end if @end_window != nil && @end_window.y > 336
        if @moved
          @moved = false
          return
        end
        if @equips_window != nil
          update_equipment
        elsif @command_window.active
          update_command
        elsif @status_windows[0].active
          update_status
        elsif @item_choose_window != nil
          if @item_choose_window.active
            items_refresh
            update_items_choose
          elsif @sort_window != nil && @sort_window.active
            update_sort
          elsif @items_window1 != nil && @items_window1.active
            @items_window1.update
            update_item
          elsif @items_window2 != nil && @items_window2.active
            @items_window2.update
            update_item
          elsif @target_windows[0] != nil && @target_windows[0].active
            update_item_target
          end
        elsif @skill_window != nil && @skill_window.active
          update_skill
        elsif @target_windows[0] != nil && @target_windows[0].active
          update_skill_target
        elsif @right_window != nil
          if @right_window.active
            update_right_equip
          elsif @item_window != nil && @item_window.active
            @item_window.update
            update_eitem
          end
        elsif @playerstatus_window != nil && @playerstatus_window.active
          update_playerstatus
        elsif @options_window != nil && @options_window.active
          update_options
        elsif @end_window != nil
          update_end
        end
      end
      
      def move_windows(wins, border, mdiff, lead, xy, acc = false)
        if acc
          diff = [[((xy ? lead.x : lead.y)-border).abs, mdiff].min, 1].max
        else
          diff = [[((xy ? lead.x : lead.y)-border).abs/2, mdiff].min, 1].max
        end
        wins[0].each {|win| win.x += diff if win != nil}
        wins[1].each {|win| win.x -= diff if win != nil}
        wins[2].each {|win| win.y += diff if win != nil}
        wins[3].each {|win| win.y -= diff if win != nil}
        @moved = true
      end
      
      def move_da_main
        lead = @status_windows[0]
        x_plus = @status_windows
        x_minus = [@command_window]
        y_minus = [@info_window]
        move_windows([x_plus, x_minus, [], y_minus], 0, 128, lead, true)
      end
      
      def move_da_outro
        @flag = true
        lead = @status_windows[0]
        x_plus = [@command_window]
        x_minus = @status_windows + @target_windows + [@skill_window, @help_window]
        y_plus = [@info_window]
        y_minus = [@item_choose_window, @items_window1, @items_window2, @help_window]
        move_windows([x_plus, x_minus, y_plus, y_minus], 0, 128, lead, true, true)
      end
      
      def move_da_selection(lead = @status_windows[@actor_index])
        if lead.dir == 1
          move_windows([[], [], [], @status_windows], 360, 32, lead, false)
        else
          move_windows([[], [], @status_windows, []], 0, 32, lead, false)
        end
      end
      
      def move_da_targeting(lead = @target_windows[@target_index])
        if lead.dir == 1
          move_windows([[], [], [], @target_windows], 376, 32, lead, false)
        else
          move_windows([[], [], @target_windows, []], 64, 32, lead, false)
        end
      end
      
      def move_da_sort(win = @sort_window)
        move_windows([[], [], [win], []], 64, 32, win, false)
      end
      
      def move_da_status(win = @playerstatus_window)
        move_windows([[], [], [], [win]], 0, 64, win, false)
      end
    
      def move_da_equip(win = @left_window)
        x_minus = [@left_window, @right_window, @help_window] + @item_windows
        move_windows([[], x_minus, [], []], 0, 64, win, true)
      end  
        
      def move_da_skill(win = @skill_window)
        x_plus = [@skill_window, @help_window]
        move_windows([x_plus, [], [], []], 256, 64, win, true)
      end
      
      def move_da_target(win = @target_windows[0])
        move_windows([@target_windows, [], [], []], 0, 32, win, true)
      end
      
      def move_da_items(win = @item_choose_window)
        y_plus = [@item_choose_window, @items_window1, @items_window2, @help_window]
        move_windows([[], [], y_plus, []], 0, 64, win, false)
      end
      
      def move_da_equipment(win = @equips_window)
        y_plus = [@equips_window, @help_window]
        move_windows([[], [], y_plus, []], 64, 64, win, false)
      end
      
      def move_da_options(win = @options_window)
        move_windows([[], [], [], [win]], 0, 64, win, false)
      end
      
      def move_da_end(win = @end_window)
        move_windows([[], [], [], [win]], 336, 64, win, false)
      end
      
      def update_command
        if Input.trigger?(Input::B)
          $game_system.se_play($data_system.cancel_se)
          @scene = Scene_Map.new
        elsif Input.trigger?(Input::C)
          if $game_party.actors.size == 0 && @command_window.index < 5
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          case @command_window.index
          when 0
            $game_system.se_play($data_system.decision_se)
            if BlizzCFG::CUSTOM_ITEM_SCENE
              @scene = Scene_Item.new
            else
              @item_choose_window = Window_CMSChooseItem.new
              @items_window1 = Window_NormalItem.new
              @items_window2 = Window_QuestItem.new
              @items_window1.help_window = @items_window2.help_window = @help_window
              @command_window.active = false
              @help_window.x, @help_window.y = 0, -576
              @help_window.set_text('')
              @help_window.visible = false
              items_refresh
            end
          when 1..4
            $game_system.se_play($data_system.decision_se)
            @command_window.active = false
            @status_windows.each {|win| win.active = true}
            @actor_index = 0
          when 5
            $game_system.se_play($data_system.decision_se)
            if BlizzCFG::CUSTOM_OPTIONS_SCENE
              @scene = Scene_Options.new
            else
              @options_window = Window_CMSOptions.new
              @command_window.active = false
            end
          when 6
            if $game_system.save_disabled
              $game_system.se_play($data_system.buzzer_se)
            else
              $game_system.se_play($data_system.decision_se)
              @scene = Scene_CMSSave.new
              Graphics.transition(0)
            end
          when 7
            if @command_window.continue
              $game_system.se_play($data_system.decision_se)
              @scene = Scene_CMSLoad.new
              Graphics.transition(0)
            else
              $game_system.se_play($data_system.buzzer_se)
            end
          when 8
            $game_system.se_play($data_system.decision_se)
            if BlizzCFG::CUSTOM_END_SCENE
              @scene = Scene_End.new
            else
              @command_window.active = false
              @end_window = Window_CMSEndCommand.new
            end
          end
        end
      end
      
      def update_status
        @actor = $game_party.actors[@actor_index]
        if Input.trigger?(Input::B)
          $game_system.se_play($data_system.cancel_se)
          @status_windows.each {|win| win.active, win.index = false, -1}
          @actor_index = -1
          @command_window.active = true
        elsif Input.trigger?(Input::C)
          case @command_window.index
          when 1
            $game_system.se_play($data_system.decision_se)
            if BlizzCFG::CUSTOM_EQUIPMENT_SCENE
              @scene = Scene_Equipment.new(@actor_index)
            else
              @equips_window = Window_EquipmentItem.new(@actor)
              @equips_window.help_window = @help_window
              @target_windows.push(Window_CMSTarget.new(@actor, true))
              @status_windows.each {|win| win.active = false}
              @help_window.visible = true
              @help_window.x, @help_window.y = 0, -612
            end
          when 2
            $game_system.se_play($data_system.decision_se)
            if BlizzCFG::CUSTOM_EQUIP_SCENE
              @scene = Scene_Equip.new(@actor_index)
            else
              @left_window = Window_CMSEquipLeft.new(@actor)
              @right_window = Window_CMSEquipRight.new(@actor)
              @right_window.help_window = @help_window
              @item_windows = []
              (0..4).each {|i| win = Window_CMSEquipItem.new(@actor, 4-i)
                  win.help_window = @help_window
                  @item_windows.unshift(win)}
              @item_windows[0].visible = @help_window.visible = true
              @help_window.x, @help_window.y = 640, 0
              @status_windows.each {|win| win.active = false}
            end
          when 3
            if @actor.restriction >= 2
              $game_system.se_play($data_system.buzzer_se)
            else
              $game_system.se_play($data_system.decision_se)
              if BlizzCFG::CUSTOM_SKILL_SCENE
                @scene = Scene_Skill.new(@actor_index)
              else
                @skill_window = Window_CMSSkill.new(@actor)
                @skill_window.help_window = @help_window
                @help_window.visible = true
                @help_window.x, @help_window.y = -768, 0
                @status_windows.each {|win| win.active = false}
              end
            end
          when 4
            $game_system.se_play($data_system.decision_se)
            if BlizzCFG::CUSTOM_STATUS_SCENE
              @scene = Scene_Status.new(@actor_index)
            else
              @playerstatus_window = Window_CMSStatus.new(@actor)
              @status_windows.each {|win| win.active = false}
            end
          end
        elsif Input.repeat?(Input::DOWN)
          $game_system.se_play($data_system.cursor_se)
          @actor_index = (@actor_index+1) % $game_party.actors.size
          if @status_windows[@actor_index].y < 0
            @status_windows.each {|win| win.y += ($game_party.actors.size-4)*120}
          elsif @status_windows[@actor_index].y >= 480
            @status_windows.each {|win| win.dir = 1}
          end
        elsif Input.repeat?(Input::UP)
          $game_system.se_play($data_system.cursor_se)
          @actor_index += $game_party.actors.size-1
          @actor_index %= $game_party.actors.size
          if @status_windows[@actor_index].y < 0
            @status_windows.each {|win| win.dir = -1}
          elsif @status_windows[@actor_index].y >= 480
            @status_windows.each {|win| win.y -= ($game_party.actors.size-4)*120}
          end
        end
      end
      
      def update_items_choose
        if Input.trigger?(Input::B)
          del_items
          $game_system.se_play($data_system.cancel_se)
          @command_window.active, @help_window.x, @help_window.y = true, 0, -612
        elsif Input.trigger?(Input::C)
          items_refresh
          @item_choose_window.active = false
          $game_system.se_play($data_system.decision_se)
          case @item_choose_window.index
          when 0
            @items_window1.active = @help_window.visible = true
            @items_window1.index = 0
          when 1 then @sort_window = Window_CMSSortCommand.new
          when 2
            @items_window2.active = @help_window.visible = true
            @items_window2.index = 0
          end
        end
      end
      
      def update_sort
        if Input.trigger?(Input::B)
          del_sort
          @item_choose_window.active = true
          $game_system.se_play($data_system.cancel_se)
        elsif Input.trigger?(Input::C)
          $game_system.se_play($data_system.decision_se)
          @items_window1.mode = case @sort_window.index
          when 0 then @sort_window.index
          when 1 then @items_window1.mode == 1 ? 2 : 1
          when 2 then @items_window1.mode == 3 ? 4 : 3
          end
          @items_window1.refresh
        end
      end
      
      def items_refresh
        index = @item_choose_window.index
        @items_window1.visible = [0, 1].include?(index)
        @items_window2.visible = (index == 2)
      end
        
      def update_equipment
        if Input.trigger?(Input::B)
          del_equipment
          $game_system.se_play($data_system.cancel_se)
          @actor_index = -1
          @command_window.active = true
          @help_window.visible = false
          @help_window.x, @help_window.y = 0, -612
        elsif Input.trigger?(Input::RIGHT) || Input.trigger?(Input::LEFT)
          $game_system.se_play($data_system.cursor_se)
          if Input.trigger?(Input::RIGHT)
            @actor_index = (@actor_index+1) % $game_party.actors.size
          elsif Input.trigger?(Input::LEFT)
            @actor_index += $game_party.actors.size-1
            @actor_index %= $game_party.actors.size
          end
          @target_windows[0].update_actor($game_party.actors[@actor_index])
          @equips_window.update_actor($game_party.actors[@actor_index])
          unless @equips_window.item_max > @equips_window.index
            @equips_window.index = 0
          end
        end
      end
      
      def update_item
        if Input.trigger?(Input::B)
          $game_system.se_play($data_system.cancel_se)
          @item_choose_window.active = true
          @help_window.set_text('')
          @items_window1.active = @items_window2.active = @help_window.visible = false
          @items_window1.index = @items_window2.index = -1
        elsif Input.trigger?(Input::C)
          win = (@item_choose_window.index == 0 ? @items_window1 : @items_window2)
          @item = win.data
          unless @item.is_a?(RPG::Item) && $game_party.item_can_use?(@item.id)
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          $game_party.actors.each_index {|i|
              @target_windows.push(Window_CMSTarget.new($game_party.actors[i]))}
          @target_index = 0
          $game_system.se_play($data_system.decision_se)
          if @item.scope.between?(3, 6)
            win.active = false
            @target_windows.each {|win| win.active = true}
            if [4, 6].include?(@item.scope)
              @target_windows.each {|win| win.index = -2}
            else
              @target_windows[@target_index].index = 0
            end
          elsif @item.common_event_id > 0
            $game_temp.common_event_id = @item.common_event_id
            $game_system.se_play(@item.menu_se)
            if @item.consumable
              $game_party.lose_item(@item.id, 1)
              win.draw_item(win.index)
            end
            (@status_windows + @target_windows).each {|win| win.refresh}
            @scene = Scene_Map.new
          elsif @skill.scope == 7
            $game_system.se_play($data_system.buzzer_se)
          end
        end
      end
      
      def update_item_target
        if Input.trigger?(Input::B)
          del_target
          $game_system.se_play($data_system.cancel_se)
          @target_index = -1
          @items_window1.refresh unless $game_party.item_can_use?(@item.id)
          @items_window1.active = true
        elsif Input.trigger?(Input::C)
          if $game_party.item_number(@item.id) == 0
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          if @target_windows[0].index == -2
            used = false
            $game_party.actors.each {|actor| used |= actor.item_effect(@item)}
          elsif @target_index >= 0
            used = $game_party.actors[@target_index].item_effect(@item)
          end
          if used
            $game_system.se_play(@item.menu_se)
            if @item.consumable
              $game_party.lose_item(@item.id, 1)
              @items_window1.draw_item(@items_window1.index)
            end
            (@status_windows + @target_windows).each {|win| win.refresh}
            if $game_party.all_dead?
              @scene = Scene_Gameover.new
            elsif @item.common_event_id > 0
              $game_temp.common_event_id = @item.common_event_id
              @scene = Scene_Map.new
            end
          else
            $game_system.se_play($data_system.buzzer_se)
          end
        else
          update_target
        end
      end
      
      def update_target
        return if @target_windows[0] == nil || @target_windows[0].index == -2
        if Input.repeat?(Input::DOWN)
          $game_system.se_play($data_system.cursor_se)
          @target_index = (@target_index+1) % $game_party.actors.size
          if @target_windows[@target_index].y < 64
            @target_windows.each {|win| win.y += ($game_party.actors.size-4)*104}
          elsif @target_windows[@target_index].y >= 480
            @target_windows.each {|win| win.dir = 1}
          end
        elsif Input.repeat?(Input::UP)
          $game_system.se_play($data_system.cursor_se)
          @target_index += $game_party.actors.size-1
          @target_index %= $game_party.actors.size
          if @target_windows[@target_index].y < 64
            @target_windows.each {|win| win.dir = -1}
          elsif @target_windows[@target_index].y >= 480
            @target_windows.each {|win| win.y -= ($game_party.actors.size-4)*104}
          end
        end
      end
    
      def update_skill
        if Input.trigger?(Input::B)
          del_skill
          $game_system.se_play($data_system.cancel_se)
          @help_window.x, @help_window.y = 0, -768
          @help_window.visible = false
          @command_window.active = true
          @actor_index = @target_index = -1
        elsif Input.trigger?(Input::C)
          @skill = @skill_window.data
          if @skill == nil || !@actor.skill_can_use?(@skill.id)
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          $game_party.actors.each_index {|i|
              @target_windows.push(Window_CMSTarget.new($game_party.actors[i]))}
          @target_index = 0
          $game_system.se_play($data_system.decision_se)
          if @skill.scope.between?(3, 6)
            @skill_window.active = false
            @target_windows.each {|win| win.visible = win.active = true}
            if [4, 6].include?(@skill.scope)
              @target_windows.each {|win| win.index = -2}
            else
              @target_windows[@target_index].index = 0
            end
          elsif @skill.common_event_id > 0
            $game_temp.common_event_id = @skill.common_event_id
            $game_system.se_play(@skill.menu_se)
            @actor.sp -= @skill.sp_cost
            (@status_windows + @target_windows).each {|win| win.refresh}
            @skill_window.refresh
            @scene = Scene_Map.new
          elsif @skill.scope == 7
            $game_system.se_play($data_system.buzzer_se)
          end
        elsif Input.trigger?(Input::R) || Input.trigger?(Input::L)
          $game_system.se_play($data_system.cursor_se)
          if Input.trigger?(Input::R)
            @actor_index = (@actor_index+1) % $game_party.actors.size
          elsif Input.trigger?(Input::L)
            @actor_index += $game_party.actors.size-1
            @actor_index %= $game_party.actors.size
          end
          @actor = $game_party.actors[@actor_index]
          @skill_window.update_actor(@actor)
          @skill_window.index = 0
        end
      end
      
      def update_skill_target
        if Input.trigger?(Input::B)
          del_target
          $game_system.se_play($data_system.cancel_se)
          @skill_window.active = true
          @target_index = -1
        elsif Input.trigger?(Input::C)
          unless @actor.skill_can_use?(@skill.id)
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          if @target_windows[0].index == -2
            used = false
            $game_party.actors.each {|actor| used |= actor.skill_effect(@actor, @skill)}
          else
            used = $game_party.actors[@target_index].skill_effect(@actor, @skill)
          end
          if used
            $game_system.se_play(@skill.menu_se)
            @actor.sp -= @skill.sp_cost
            (@status_windows + @target_windows).each {|win| win.refresh}
            @skill_window.refresh
            if $game_party.all_dead?
              @scene = Scene_Gameover.new
            elsif @skill.common_event_id > 0
              $game_temp.common_event_id = @skill.common_event_id
              @scene = Scene_Map.new
            end
          else
            $game_system.se_play($data_system.buzzer_se)
          end
        else
          update_target
        end
      end
      
      def update_right_equip
        @item_windows.each_index {|i|
            @item_windows[i].visible = (@right_window.index == i)}
        @item_window = @item_windows[@right_window.index]
        newmode = [@right_window.index, 1].min
        if newmode != @left_window.mode
          @left_window.mode = newmode
          @left_window.refresh
        end
        if Input.trigger?(Input::B)
          del_equip
          $game_system.se_play($data_system.cancel_se)
          @help_window.x, @help_window.y = 660, 0
          @command_window.active = true
          @actor_index = -1
        elsif Input.trigger?(Input::C)
          if @actor.equip_fix?(@right_window.index)
            $game_system.se_play($data_system.buzzer_se)
          else
            $game_system.se_play($data_system.decision_se)
            @right_window.active = false
            @item_window.active, @item_window.index = true, 0
            equip_refresh
          end
        elsif Input.trigger?(Input::R) || Input.trigger?(Input::L)
          $game_system.se_play($data_system.cursor_se)
          if Input.trigger?(Input::R)
            @actor_index = (@actor_index+1) % $game_party.actors.size
          elsif Input.trigger?(Input::L)
            @actor_index += $game_party.actors.size-1
            @actor_index %= $game_party.actors.size
          end
          @actor = $game_party.actors[@actor_index]
          @right_window.update_actor(@actor)
          @left_window.update_actor(@actor)
          @item_windows.each_index {|i| @item_windows[i].update_actor(@actor, i)}
        end
      end
    
      def update_eitem
        if Input.trigger?(Input::B)
          $game_system.se_play($data_system.cancel_se)
          @right_window.active = true
          @item_window.active, @item_window.index = false, -1
          equip_refresh
        elsif Input.trigger?(Input::C)
          $game_system.se_play($data_system.equip_se)
          item = @item_window.data
          @actor.equip(@right_window.index, item == nil ? 0 : item.id)
          @right_window.active = true
          @item_window.active, @item_window.index = false, -1
          @right_window.refresh
          @item_window.refresh
          (@item_windows + @status_windows).each {|win| win.refresh}
          equip_refresh
        elsif Input.repeat?(Input::UP) || Input.repeat?(Input::DOWN) ||
            Input.repeat?(Input::R) || Input.repeat?(Input::L)
          equip_refresh
        end
      end
      
      def update_playerstatus
        if Input.trigger?(Input::B)
          $game_system.se_play($data_system.cancel_se)
          @command_window.active = true
          @actor_index = -1
          del_status
        elsif Input.trigger?(Input::R) || Input.trigger?(Input::RIGHT) ||
            Input.trigger?(Input::L) || Input.trigger?(Input::LEFT)
          $game_system.se_play($data_system.cursor_se)
          if Input.trigger?(Input::R) || Input.trigger?(Input::RIGHT)
            @actor_index = (@actor_index+1) % $game_party.actors.size
          elsif Input.trigger?(Input::L) || Input.trigger?(Input::LEFT)
            @actor_index += $game_party.actors.size-1
            @actor_index %= $game_party.actors.size
          end
          @actor = $game_party.actors[@actor_index]
          @playerstatus_window.update_actor(@actor)
        end
      end
      
      def update_options
        if Input.trigger?(Input::B)
          del_options
          $game_system.se_play($data_system.cancel_se)
          @command_window.active = true
          return
        end
        case @options_window.get_option
        when 'BGM Volume'
          if Input.repeat?(Input::RIGHT)
            $game_system.bgm_volume += 5
            $game_system.bgm_volume = 100 if $game_system.bgm_volume > 100
            $game_system.bgm_play($game_system.bgm_memorize)
            @options_window.refresh
          elsif Input.repeat?(Input::LEFT)
            $game_system.bgm_volume -= 5
            $game_system.bgm_volume = 0 if $game_system.bgm_volume < 0
            $game_system.bgm_play($game_system.bgm_memorize)
            @options_window.refresh
          end
        when 'SFX Volume'
          if Input.repeat?(Input::RIGHT)
            $game_system.sfx_volume += 5
            if $game_system.sfx_volume > 100
              $game_system.sfx_volume = 100
            else
              $game_system.se_play($data_system.cursor_se)
            end
            @options_window.refresh
          elsif Input.repeat?(Input::LEFT)
            $game_system.sfx_volume -= 5
            $game_system.sfx_volume = 0 if $game_system.sfx_volume < 0
            $game_system.se_play($data_system.cursor_se)
            @options_window.refresh
          end
        when 'Battle BGM'
          if Input.repeat?(Input::LEFT) || Input.repeat?(Input::RIGHT) ||
              Input.repeat?(Input::C)
            if $game_switches[BlizzCFG::BGM_Lock] || BlizzCFG::BATTLE_BGMS.size <= 1
              $game_system.se_play($data_system.buzzer_se)
            else
              $game_system.se_play($data_system.decision_se)
              ind = $game_variables[BlizzCFG::BGM_Variable]
              if Input.repeat?(Input::RIGHT) || Input.repeat?(Input::C)
                ind = (ind+1) % BlizzCFG::BATTLE_BGMS.size
              elsif Input.repeat?(Input::LEFT)
                ind = (ind+BlizzCFG::BATTLE_BGMS.size-1) % BlizzCFG::BATTLE_BGMS.size
              end
              $game_variables[BlizzCFG::BGM_Variable] = ind
              $game_system.reset_battle_bgm
              @options_window.refresh
            end
          end
        when 'Battle Cam'
          if Input.repeat?(Input::LEFT) || Input.repeat?(Input::RIGHT) ||
              Input.repeat?(Input::C)
            if BlizzCFG::CAM_AVAILABLE
              $game_system.se_play($data_system.decision_se)
              $game_system.cam = ($game_system.cam+1) % 2
              $game_system.get_cam
              @options_window.refresh
            else
              $game_system.se_play($data_system.buzzer_se)
            end
          end
        when 'Bar Style'
          if Input.repeat?(Input::RIGHT)
            if $game_system.bar_opacity == 0
              $game_system.se_play($data_system.buzzer_se)
            else
              $game_system.bar_style = ($game_system.bar_style + 1) % 7
              $game_system.se_play($data_system.decision_se)
              @options_window.refresh
              @status_windows.each {|win| win.refresh}
            end
          elsif Input.repeat?(Input::LEFT)
            if $game_system.bar_opacity == 0
              $game_system.se_play($data_system.buzzer_se)
            else
              $game_system.bar_style = ($game_system.bar_style + 6) % 7
              $game_system.se_play($data_system.decision_se)
              @options_window.refresh
              @status_windows.each {|win| win.refresh}
            end
          end
        when 'Bar Opacity'
          if Input.repeat?(Input::LEFT) || Input.repeat?(Input::RIGHT)
            $game_system.se_play($data_system.decision_se)
            $game_system.bar_opacity += (Input.repeat?(Input::RIGHT) ? 64 : -64)
            @options_window.refresh
            @status_windows.each {|win| win.refresh}
          end
        when 'Font'
          if Input.repeat?(Input::RIGHT)
            $game_system.se_play($data_system.decision_se)
            @options_window.current_font += 1
            @options_window.current_font %= BlizzCFG::CMS_FONTS.size
            @options_window.refresh
          elsif Input.repeat?(Input::LEFT)
            $game_system.se_play($data_system.decision_se)
            @options_window.current_font += BlizzCFG::CMS_FONTS.size - 1
            @options_window.current_font %= BlizzCFG::CMS_FONTS.size
            @options_window.refresh
          elsif Input.repeat?(Input::C)
            $game_system.se_play($data_system.decision_se)
            $game_system.fontname = @options_window.font_name
            @command_window.refresh
            @info_window.refresh
            @status_windows.each {|win| win.refresh}
            @help_window.refresh
            @options_window.refresh
            (0...5).each {|i| @command_window.disable_item(i)} if $game_party.actors.size == 0
            @command_window.disable_item(6) if $game_system.save_disabled
            @command_window.disable_item(7) unless @command_window.continue
          end
        when 'Windowskin'
          if Input.repeat?(Input::RIGHT)
            $game_system.se_play($data_system.decision_se)
            @options_window.current_skin += 1
            @options_window.current_skin %= BlizzCFG::CMS_SKINS.size
            @options_window.refresh
          elsif Input.repeat?(Input::LEFT)
            $game_system.se_play($data_system.decision_se)
            @options_window.current_skin += BlizzCFG::CMS_SKINS.size - 1
            @options_window.current_skin %= BlizzCFG::CMS_SKINS.size
            @options_window.refresh
          elsif Input.repeat?(Input::C)
            $game_system.se_play($data_system.decision_se)
            $game_system.windowskin_name = @options_window.skin_name
          end
        end
      end
      
      def update_end
        if Input.trigger?(Input::B) || Input.trigger?(Input::C) &&
            @end_window.index == 0
          $game_system.se_play($data_system.cancel_se)
          @command_window.active = true
          del_end
        elsif Input.trigger?(Input::C)
          Graphics.freeze
          $game_system.se_play($data_system.decision_se)
          Audio.bgm_fade(800)
          Audio.bgs_fade(800)
          Audio.me_fade(800)
          @end_window.index == 1 ? @scene = Scene_Title.new : $scene = nil
          del_end
        end
      end
    
    end
    
    #==============================================================================
    # Scene_CMSSave
    #==============================================================================
    
    class Scene_CMSSave < Scene_Save
      
      def on_cancel
        $game_system.se_play($data_system.cancel_se)
        $scene = Scene_Menu.new(6)
      end
      
    end
    
    #==============================================================================
    # Scene_CMSLoad
    #==============================================================================
    
    class Scene_CMSLoad < Scene_Load
      
      def on_cancel
        $game_system.se_play($data_system.cancel_se)
        $scene = Scene_Menu.new(7)
      end
      
    end
    Сильно подозреваю, что ты не читал эту тему: http://forum.chaos-project.com/index...opic,23.0.html

    А значит, установил скрипт меню ниже системы Blizz-ABS, тогда как правильно — выше неё. Скорее всего, проблема в этом.

Страница 57 из 147 ПерваяПервая ... 747555657585967107 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 6 (пользователей: 0 , гостей: 6)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Помощь с скриптами (RGSS)