- #======================================================= 
- #        Akea Battle Order 
- # Autor: Raizen 
- # Comunidade: [url]http://www.centrorpg.com/[/url] 
- # Compatibilidade: RMVXAce 
- # 
- #======================================================= 
- # =========================Não modificar============================== 
- $included ||= Hash.new 
- $included[:akea_battleorder] = true 
- module Akea_BattleOrder 
- Party_Images = [] 
- Monster_Images = [] 
- Enemy_Characters = [] 
- # =========================Não modificar============================== 
- # Configuração começa Aqui 
- #======================================================= 
- #        INSTRUÇÕES 
- # Bem simples, basta colocar o script acima do main e configurar como é 
- # pedido abaixo, o script adiciona a função de mostrar a ordem de batalha, 
- # Combine esse script com outros add-ons de batalha para fazer algo bem legalz :) 
- #======================================================= 
- # Se vai usar face para personagem, true usa face, false usa charset 
- # Se true ele vai utilizar uma parte da imagem das faces 
- # Se false vai utilizar o charset 
- Party_Face = true 
- # Se vai usar face para inimigo, true usa face, false usa charset 
- # Se true ele vai utilizar uma parte da imagem dos battlers 
- # Se false vai utilizar o charset, configurado logo mais no script 
- Enemy_Face = true 
- # Imagem adicional que ficará na tela de batalha 
- Battle_Image = 'Battle_Order' 
- Image_X = 500 
- Image_Y = 40 
- # Imagem de moldura, caso os chars precisem de moldura 
- # Caso não queira adicionar uma moldura basta colocar como 
- # Mold = '' 
- Mold = 'mold2' 
- # Correção da posição da moldura 
- Mold_X = -4 
- Mold_Y = -4 
- # Correção do recorte das faces ou charsets 
- Size = { 
- 'Sx' => 30, # em %, no eixo X ele irá recortar 
- 'Sy' => 30, # em %, no eixo Y ele irá recortar 
- 'X' => 60, # Tamanho da imagem recortada em X 
- 'Y' => 30, # Tamanho da imagem recortada em Y 
- } 
- # Tempo que leva para os quadros se movimentarem em frames 
- Movement_Time = 5 
- # Posição de inicio dos quadros [x, y] 
- Start_Position = [465, 250] 
- # Posição de fim dos quadros [x, y] 
- End_Position = [465, 50] 
- # Opacidade das faces/characters de batalha, 
- # a opacidade do membro que está no turno é 255(100%),  
- # A opacidade dos demais pode ser configurado aqui 
- Opacity = 150 
- # Imagens para personagens e inimigos # OPCIONAL 
- # Para utilizar uma imagem ao invés da face ou char, 
- # basta colocar 
- # Party_Images[id] = 'nome_da_imagem' 
- # Id sendo o id do actor no database 
- Party_Images[0] = 'Battle_Order' 
- # Monster_Images[id] = 'nome_da_imagem' 
- # Id sendo o id do inimigo no database 
- Monster_Images[0] = 'Battle_Order' 
- # Enemy_Characters, Configure APENAS se o Enemy_Face = false 
- # Caso contrário o script termina aqui. 
- #============================================================================== 
- # ** Enemy_Characters[0] => Padrão, caso o inimigo não tenha charset pre-configurado aqui. 
- #============================================================================== 
- # Padrão, caso o inimigo não tenha charset pre-configurado aqui. 
- Enemy_Characters[0] = { 
- 'CharName' => 'Monster1', #Nome da imagem na pasta Characters 
- 'Index' => 1, # Indice nos charsets com 8 chars, começando do 0. 
- } 
- #============================================================================== 
- # ** Enemy_Characters[1] => Slime 
- #============================================================================== 
- Enemy_Characters[1] = { 
- 'CharName' => 'Monster2', #Nome da imagem na pasta Characters 
- 'Index' => 2, # Indice nos charsets com 8 chars, começando do 0. 
- } 
- end 
- #============================================================================== 
- # ** Scene_Battle 
- #------------------------------------------------------------------------------ 
- #  Esta classe executa o processamento da tela de batalha. 
- #============================================================================== 
- class Scene_Battle < Scene_Base 
- alias :akea_bo_start :start 
- alias :akea_bo_turn_start :turn_start 
- alias :akea_bo_update :update 
- alias :akea_bo_process_action :process_action 
- alias :akea_bo_terminate :terminate 
-   #-------------------------------------------------------------------------- 
-   # * Inicialização do processo 
-   #-------------------------------------------------------------------------- 
-   def start(*args, &block) 
-     @start_bo_anime = false 
-     @bo_turn_start = false 
-     create_battle_order_images 
-     @bo_action = [] 
-     akea_bo_start(*args, &block) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # * Início do turno 
-   #-------------------------------------------------------------------------- 
-   def turn_start 
-     @start_bo_anime = true 
-     akea_bo_turn_start 
-     @battle_order = [] 
-     for n in 0...all_battle_members.size 
-       @battle_order.push(all_battle_members.index(BattleManager.akea_battle_turn[n])) if BattleManager.akea_battle_turn[n].alive? 
-     end 
-     @bo_pos_x = (Akea_BattleOrder::End_Position[0] - Akea_BattleOrder::Start_Position[0])/ @battle_order.size 
-     @bo_pos_y = (Akea_BattleOrder::End_Position[1] - Akea_BattleOrder::Start_Position[1])/ @battle_order.size 
-     @battle_order.reverse! 
-     @bo_correction = 0 
-     for n in 0...@battle_order.size 
-       @bo_battlers[@battle_order[n]].x = Akea_BattleOrder::Start_Position[0] + @bo_pos_x*n 
-       @bo_battlers[@battle_order[n]].y = Akea_BattleOrder::Start_Position[1] + @bo_pos_y*n 
-       @mold_battlers[@battle_order[n]].x = Akea_BattleOrder::Start_Position[0] + @bo_pos_x*n + Akea_BattleOrder::Mold_X 
-       @mold_battlers[@battle_order[n]].y = Akea_BattleOrder::Start_Position[1] + @bo_pos_y*n + Akea_BattleOrder::Mold_Y 
-       @bo_battlers[@battle_order[n]].z = 100 + n*2 
-       @mold_battlers[@battle_order[n]].z = 100 + n*2 + 1  
-       @mold_battlers[@battle_order[n]].opacity = 0 
-     end 
-     @battle_order.reverse! 
-     @reserve_order = [] 
-     @bo_timer_count = 0 
-   end 
-   #-------------------------------------------------------------------------- 
-   # * Processamento de ações 
-   #-------------------------------------------------------------------------- 
-   def process_action     
-     return if @start_bo_anime 
-     return if scene_changing? 
-     if (!@subject || !@subject.current_action) 
-       if @battle_order.include?(all_battle_members.index(BattleManager.akea_battle_turn[0])) && BattleManager.akea_battle_turn[0] && BattleManager.akea_battle_turn[0].dead? 
-         @check_condition = BattleManager.akea_battle_turn 
-         n = 0 
-         while @check_condition[n] && @check_condition[n].dead? 
-           n += 1 
-           @bo_action.push(@battle_order.first) 
-           @reserve_order.push(@battle_order.first) 
-           @battle_order.shift 
-         end 
-         return unless @reserve_order.empty? 
-       end 
-       @bo_action.push(@battle_order.first) 
-       @battle_order.shift 
-     end 
-     if @bo_action.first 
-       @bo_battlers[@bo_action.first].opacity = 255  
-       @mold_battlers[@bo_action.first].opacity = 255 
-     end 
-     akea_bo_process_action 
-   end 
-   
-   #-------------------------------------------------------------------------- 
-   # * Atualização da tela 
-   #-------------------------------------------------------------------------- 
-   def update(*args, &block) 
-     if @start_bo_anime 
-       start_bo_pics  
-       super 
-       return 
-     end 
-     unless moving_bo_order 
-       super 
-       return 
-     end 
-     akea_bo_update(*args, &block) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # * Animação de inicio 
-   #-------------------------------------------------------------------------- 
-   def start_bo_pics 
-     for n in 0...@battle_order.size 
-       @bo_battlers[@battle_order[n]].opacity += 20 if @bo_battlers[@battle_order[n]].opacity < Akea_BattleOrder::Opacity 
-       @mold_battlers[@battle_order[n]].opacity += 20 if @mold_battlers[@battle_order[n]].opacity < Akea_BattleOrder::Opacity 
-     end 
-     @bo_Image.opacity += 20 
-     @start_bo_anime = false if @bo_Image.opacity == 255 
-   end 
-   #-------------------------------------------------------------------------- 
-   # * Movimento das faces dos battlers 
-   #-------------------------------------------------------------------------- 
-   def moving_bo_order 
-     return true if @bo_action.compact.empty? 
-     unless @bo_action.compact.empty? 
-       if @bo_action.first == nil 
-         @bo_action.shift 
-         return false 
-       end 
-       if @bo_battlers[@bo_action.first].opacity > 0 
-         @bo_battlers[@bo_action.first].opacity -= 30 
-         @mold_battlers[@bo_action.first].opacity -= 30 
-         @bo_Image.opacity -= 30 if @battle_order.size == 0 
-       else  
-         @bo_timer_count += 1 
-         for n in 0...@battle_order.size 
-           if @bo_timer_count != Akea_BattleOrder::Movement_Time + 1 
-             @bo_battlers[@battle_order[n]].y += @bo_pos_y / Akea_BattleOrder::Movement_Time 
-             @bo_battlers[@battle_order[n]].x += @bo_pos_x / Akea_BattleOrder::Movement_Time 
-             @mold_battlers[@battle_order[n]].y += @bo_pos_y / Akea_BattleOrder::Movement_Time 
-             @mold_battlers[@battle_order[n]].x += @bo_pos_x / Akea_BattleOrder::Movement_Time 
-           else 
-             @bo_battlers[@battle_order[n]].y += @bo_pos_y % Akea_BattleOrder::Movement_Time 
-             @bo_battlers[@battle_order[n]].x += @bo_pos_x % Akea_BattleOrder::Movement_Time 
-             @mold_battlers[@battle_order[n]].y += @bo_pos_y % Akea_BattleOrder::Movement_Time 
-             @mold_battlers[@battle_order[n]].x += @bo_pos_x % Akea_BattleOrder::Movement_Time 
-           end 
-         end 
-         @reserve_order.compact! 
-         for n in 0...@reserve_order.size 
-           if @bo_timer_count != Akea_BattleOrder::Movement_Time + 1 
-             @bo_battlers[@reserve_order[n]].y += @bo_pos_y / Akea_BattleOrder::Movement_Time 
-             @bo_battlers[@reserve_order[n]].x += @bo_pos_x / Akea_BattleOrder::Movement_Time 
-             @mold_battlers[@reserve_order[n]].y += @bo_pos_y / Akea_BattleOrder::Movement_Time 
-             @mold_battlers[@reserve_order[n]].x += @bo_pos_x / Akea_BattleOrder::Movement_Time 
-           else 
-             @bo_battlers[@reserve_order[n]].y += @bo_pos_y % Akea_BattleOrder::Movement_Time 
-             @bo_battlers[@reserve_order[n]].x += @bo_pos_x % Akea_BattleOrder::Movement_Time 
-             @mold_battlers[@reserve_order[n]].y += @bo_pos_y % Akea_BattleOrder::Movement_Time 
-             @mold_battlers[@reserve_order[n]].x += @bo_pos_x % Akea_BattleOrder::Movement_Time 
-           end 
-         end 
-         if @bo_timer_count == Akea_BattleOrder::Movement_Time 
-           @bo_action.shift  
-           @bo_timer_count = 0 
-         end 
-       end 
-     else 
-       @bo_action.shift 
-       @bo_timer_count = 0 
-     end 
-     false 
-   end 
-   #-------------------------------------------------------------------------- 
-   # * Criação das imagens dos battlers 
-   #-------------------------------------------------------------------------- 
-   def create_battle_order_images 
-     @bo_Image = Sprite.new 
-     @bo_Image.bitmap = Cache.akea(Akea_BattleOrder::Battle_Image) 
-     @bo_Image.x = Akea_BattleOrder::Image_X 
-     @bo_Image.y = Akea_BattleOrder::Image_Y 
-     @bo_Image.opacity = 0 
-     @bo_battlers = Array.new 
-     @mold_battlers = Array.new 
-     akea_size = Akea_BattleOrder::Size 
-     for n in 0...$game_party.battle_members.size 
-       act = $game_party.battle_members[n] 
-       @bo_battlers[n] = Sprite.new 
-       if Akea_BattleOrder::Party_Images[$game_party.battle_members[n].id] 
-         @bo_battlers[n].bitmap = Cache.akea(Akea_BattleOrder::Party_Images[$game_party.battle_members[n].id]) 
-         @bo_battlers[n].opacity = 0 
-         @mold_battlers[n] = Sprite.new 
-         @mold_battlers[n].bitmap = Cache.akea('') 
-         next 
-       end 
-       if Akea_BattleOrder::Party_Face 
-         @bo_battlers[n].bitmap = Cache.face(act.face_name) 
-         face_index = act.face_index 
-         sx = @bo_battlers[n].bitmap.width/4 * akea_size['Sx'] / 100 
-         sy = @bo_battlers[n].bitmap.height/2 * akea_size['Sy'] / 100 
-         @bo_battlers[n].src_rect.set(sx + face_index % 4 * 96, sy + face_index / 4 * 96, akea_size['X'], akea_size['Y']) 
-       else 
-         @bo_battlers[n].bitmap = Cache.character(act.character_name) 
-         face_index = act.character_index 
-         sign = act.character_name[/^[\!\$]./] 
-         if sign && sign.include?('$') 
-           cw = @bo_battlers[n].bitmap.width 
-           ch = @bo_battlers[n].bitmap.height 
-           sx = @bo_battlers[n].bitmap.width * akea_size['Sx'] / 100 
-           sy = @bo_battlers[n].bitmap.height * akea_size['Sy'] / 100 
-         else 
-           cw = @bo_battlers[n].bitmap.width / 4 
-           ch = @bo_battlers[n].bitmap.height / 2 
-           sx = @bo_battlers[n].bitmap.width/4 * akea_size['Sx'] / 100 
-           sy = @bo_battlers[n].bitmap.height/2 * akea_size['Sy'] / 100 
-         end 
-         @bo_battlers[n].src_rect.set(sx + face_index % 4 * cw + cw/3, sy + face_index / 4 * ch, akea_size['X'], akea_size['Y']) 
-       end 
-       @bo_battlers[n].opacity = 0 
-       @mold_battlers[n] = Sprite.new 
-       @mold_battlers[n].bitmap = Cache.akea(Akea_BattleOrder::Mold) 
-     end 
-     for n in $game_party.battle_members.size...($game_troop.members.size + $game_party.battle_members.size) 
-       act = $game_troop.members[n-$game_party.battle_members.size] 
-       @bo_battlers[n] = Sprite.new 
-       if Akea_BattleOrder::Monster_Images[all_battle_members[n].enemy_id] 
-         @bo_battlers[n].bitmap = Cache.akea(Akea_BattleOrder::Monster_Images[all_battle_members[n].enemy_id]) 
-         @bo_battlers[n].opacity = 0 
-         @mold_battlers[n] = Sprite.new 
-         @mold_battlers[n].bitmap = Cache.akea('') 
-         next 
-       end 
-       if Akea_BattleOrder::Enemy_Face 
-         @bo_battlers[n].bitmap = Cache.battler($data_enemies[act.enemy_id].battler_name, act.battler_hue) 
-         sx = @bo_battlers[n].bitmap.width * akea_size['Sx'] / 100 
-         sy = @bo_battlers[n].bitmap.height * akea_size['Sy'] / 100 
-         @bo_battlers[n].src_rect.set(sx, sy, akea_size['X'], akea_size['Y']) 
-       else 
-         if Akea_BattleOrder::Enemy_Characters[act.enemy_id] 
-           @bo_battlers[n].bitmap = Cache.character(Akea_BattleOrder::Enemy_Characters[act.enemy_id]['CharName']) 
-           face_index = Akea_BattleOrder::Enemy_Characters[act.enemy_id]['Index'] 
-           sign = Akea_BattleOrder::Enemy_Characters[act.enemy_id]['CharName'][/^[\!\$]./] 
-         else 
-           @bo_battlers[n].bitmap = Cache.character(Akea_BattleOrder::Enemy_Characters[0]['CharName']) 
-           face_index = Akea_BattleOrder::Enemy_Characters[0]['Index'] 
-           sign = Akea_BattleOrder::Enemy_Characters[0]['CharName'][/^[\!\$]./] 
-         end 
-         if sign && sign.include?('$') 
-           cw = @bo_battlers[n].bitmap.width 
-           ch = @bo_battlers[n].bitmap.height 
-           sx = @bo_battlers[n].bitmap.width * akea_size['Sx'] / 100 
-           sy = @bo_battlers[n].bitmap.height * akea_size['Sy'] / 100 
-         else 
-           cw = @bo_battlers[n].bitmap.width / 4 
-           ch = @bo_battlers[n].bitmap.height / 2 
-           sx = @bo_battlers[n].bitmap.width/4 * akea_size['Sx'] / 100 
-           sy = @bo_battlers[n].bitmap.height/2 * akea_size['Sy'] / 100 
-         end 
-         @bo_battlers[n].src_rect.set(sx + face_index % 4 * cw + cw/3, sy + face_index / 4 * ch, akea_size['X'], akea_size['Y']) 
-       end 
-         @bo_battlers[n].opacity = 0 
-         @mold_battlers[n] = Sprite.new 
-         @mold_battlers[n].bitmap = Cache.akea(Akea_BattleOrder::Mold) 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # * Finalização do processo 
-   #-------------------------------------------------------------------------- 
-   def terminate 
-     @bo_Image.bitmap.dispose 
-     @bo_Image.dispose 
-     @bo_battlers.each{|battler|battler.bitmap.dispose; battler.dispose} 
-     @mold_battlers.each{|battler|battler.bitmap.dispose; battler.dispose} 
-     akea_bo_terminate 
-   end 
- end 
- #============================================================================== 
- # ** Cache 
- #------------------------------------------------------------------------------ 
- #  Este modulo carrega cada gráfico, cria um objeto de Bitmap e retém ele. 
- # Para acelerar o carregamento e preservar memória, este módulo matém o 
- # objeto de Bitmap em uma Hash interna, permitindo que retorne objetos 
- # pré-existentes quando mesmo Bitmap é requerido novamente. 
- #============================================================================== 
- module Cache 
-   #-------------------------------------------------------------------------- 
-   # * Carregamento dos gráficos de animação 
-   #     filename : nome do arquivo 
-   #     hue      : informações da alteração de tonalidade 
-   #-------------------------------------------------------------------------- 
-   def self.akea(filename) 
-     load_bitmap("Graphics/Akea/", filename) 
-   end 
- end 
- #============================================================================== 
- # ** BattleManager 
- #------------------------------------------------------------------------------ 
- #  Este módulo gerencia o andamento da batalha. 
- #============================================================================== 
- module BattleManager 
-   #-------------------------------------------------------------------------- 
-   # * Configuração inicial 
-   #-------------------------------------------------------------------------- 
-   def self.akea_battle_turn 
-     @action_battlers 
-   end 
- end