Advertisement
Raizen

Akea Battle Order

Apr 26th, 2014
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 17.24 KB | None | 0 0
  1. #=======================================================
  2. #        Akea Battle Order
  3. # Autor: Raizen
  4. # Comunidade: http://www.centrorpg.com/
  5. # Compatibilidade: RMVXAce
  6. #
  7. #=======================================================
  8. # =========================Não modificar==============================
  9. $included ||= Hash.new
  10. $included[:akea_battleorder] = true
  11. module Akea_BattleOrder
  12. Party_Images = []
  13. Monster_Images = []
  14. Enemy_Characters = []
  15. # =========================Não modificar==============================
  16.  
  17. # Configuração começa Aqui
  18.  
  19. #=======================================================
  20. #        INSTRUÇÕES
  21. # Bem simples, basta colocar o script acima do main e configurar como é
  22. # pedido abaixo, o script adiciona a função de mostrar a ordem de batalha,
  23. # Combine esse script com outros add-ons de batalha para fazer algo bem legalz :)
  24. #=======================================================
  25.  
  26.  
  27. # Se vai usar face para personagem, true usa face, false usa charset
  28. # Se true ele vai utilizar uma parte da imagem das faces
  29. # Se false vai utilizar o charset
  30. Party_Face = true
  31.  
  32. # Se vai usar face para inimigo, true usa face, false usa charset
  33. # Se true ele vai utilizar uma parte da imagem dos battlers
  34. # Se false vai utilizar o charset, configurado logo mais no script
  35. Enemy_Face = true
  36.  
  37. # Imagem adicional que ficará na tela de batalha
  38. Battle_Image = 'Battle_Order'
  39. Image_X = 500
  40. Image_Y = 40
  41.  
  42. # Imagem de moldura, caso os chars precisem de moldura
  43. # Caso não queira adicionar uma moldura basta colocar como
  44. # Mold = ''
  45. Mold = 'mold2'
  46.  
  47. # Correção da posição da moldura
  48. Mold_X = -4
  49. Mold_Y = -4
  50.  
  51.  
  52. # Correção do recorte das faces ou charsets
  53. Size = {
  54. 'Sx' => 30, # em %, no eixo X ele irá recortar
  55. 'Sy' => 30, # em %, no eixo Y ele irá recortar
  56. 'X' => 60, # Tamanho da imagem recortada em X
  57. 'Y' => 30, # Tamanho da imagem recortada em Y
  58.  
  59. }
  60. # Tempo que leva para os quadros se movimentarem em frames
  61. Movement_Time = 5
  62.  
  63. # Posição de inicio dos quadros [x, y]
  64. Start_Position = [465, 250]
  65.  
  66. # Posição de fim dos quadros [x, y]
  67. End_Position = [465, 50]
  68.  
  69. # Opacidade das faces/characters de batalha,
  70. # a opacidade do membro que está no turno é 255(100%),
  71. # A opacidade dos demais pode ser configurado aqui
  72. Opacity = 150
  73. # Imagens para personagens e inimigos # OPCIONAL
  74. # Para utilizar uma imagem ao invés da face ou char,
  75. # basta colocar
  76. # Party_Images[id] = 'nome_da_imagem'
  77. # Id sendo o id do actor no database
  78.  
  79. Party_Images[0] = 'Battle_Order'
  80.  
  81. # Monster_Images[id] = 'nome_da_imagem'
  82. # Id sendo o id do inimigo no database
  83. Monster_Images[0] = 'Battle_Order'
  84.  
  85. # Enemy_Characters, Configure APENAS se o Enemy_Face = false
  86. # Caso contrário o script termina aqui.
  87.  
  88. #==============================================================================
  89. # ** Enemy_Characters[0] => Padrão, caso o inimigo não tenha charset pre-configurado aqui.
  90. #==============================================================================
  91. # Padrão, caso o inimigo não tenha charset pre-configurado aqui.
  92. Enemy_Characters[0] = {
  93. 'CharName' => 'Monster1', #Nome da imagem na pasta Characters
  94. 'Index' => 1, # Indice nos charsets com 8 chars, começando do 0.
  95. }
  96. #==============================================================================
  97. # ** Enemy_Characters[1] => Slime
  98. #==============================================================================
  99. Enemy_Characters[1] = {
  100. 'CharName' => 'Monster2', #Nome da imagem na pasta Characters
  101. 'Index' => 2, # Indice nos charsets com 8 chars, começando do 0.
  102. }
  103. end
  104.  
  105.  
  106. #==============================================================================
  107. # ** Scene_Battle
  108. #------------------------------------------------------------------------------
  109. #  Esta classe executa o processamento da tela de batalha.
  110. #==============================================================================
  111.  
  112. class Scene_Battle < Scene_Base
  113. alias :akea_bo_start :start
  114. alias :akea_bo_turn_start :turn_start
  115. alias :akea_bo_update :update
  116. alias :akea_bo_process_action :process_action
  117. alias :akea_bo_terminate :terminate
  118.   #--------------------------------------------------------------------------
  119.   # * Inicialização do processo
  120.   #--------------------------------------------------------------------------
  121.   def start(*args, &block)
  122.     @start_bo_anime = false
  123.     @bo_turn_start = false
  124.     create_battle_order_images
  125.     @bo_action = []
  126.     akea_bo_start(*args, &block)
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # * Início do turno
  130.   #--------------------------------------------------------------------------
  131.   def turn_start
  132.     @start_bo_anime = true
  133.     akea_bo_turn_start
  134.     @battle_order = []
  135.     for n in 0...all_battle_members.size
  136.       @battle_order.push(all_battle_members.index(BattleManager.akea_battle_turn[n])) if BattleManager.akea_battle_turn[n].alive?
  137.     end
  138.     @bo_pos_x = (Akea_BattleOrder::End_Position[0] - Akea_BattleOrder::Start_Position[0])/ @battle_order.size
  139.     @bo_pos_y = (Akea_BattleOrder::End_Position[1] - Akea_BattleOrder::Start_Position[1])/ @battle_order.size
  140.     @battle_order.reverse!
  141.     @bo_correction = 0
  142.     for n in 0...@battle_order.size
  143.       @bo_battlers[@battle_order[n]].x = Akea_BattleOrder::Start_Position[0] + @bo_pos_x*n
  144.       @bo_battlers[@battle_order[n]].y = Akea_BattleOrder::Start_Position[1] + @bo_pos_y*n
  145.       @mold_battlers[@battle_order[n]].x = Akea_BattleOrder::Start_Position[0] + @bo_pos_x*n + Akea_BattleOrder::Mold_X
  146.       @mold_battlers[@battle_order[n]].y = Akea_BattleOrder::Start_Position[1] + @bo_pos_y*n + Akea_BattleOrder::Mold_Y
  147.       @bo_battlers[@battle_order[n]].z = 100 + n*2
  148.       @mold_battlers[@battle_order[n]].z = 100 + n*2 + 1
  149.       @mold_battlers[@battle_order[n]].opacity = 0
  150.     end
  151.     @battle_order.reverse!
  152.     @reserve_order = []
  153.     @bo_timer_count = 0
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # * Processamento de ações
  157.   #--------------------------------------------------------------------------
  158.   def process_action    
  159.     return if @start_bo_anime
  160.     return if scene_changing?
  161.     if (!@subject || !@subject.current_action)
  162.       if @battle_order.include?(all_battle_members.index(BattleManager.akea_battle_turn[0])) && BattleManager.akea_battle_turn[0] && BattleManager.akea_battle_turn[0].dead?
  163.         @check_condition = BattleManager.akea_battle_turn
  164.         n = 0
  165.         while @check_condition[n] && @check_condition[n].dead?
  166.           n += 1
  167.           @bo_action.push(@battle_order.first)
  168.           @reserve_order.push(@battle_order.first)
  169.           @battle_order.shift
  170.         end
  171.         return unless @reserve_order.empty?
  172.       end
  173.       @bo_action.push(@battle_order.first)
  174.       @battle_order.shift
  175.     end
  176.     if @bo_action.first
  177.       @bo_battlers[@bo_action.first].opacity = 255
  178.       @mold_battlers[@bo_action.first].opacity = 255
  179.     end
  180.     akea_bo_process_action
  181.   end
  182.  
  183.   #--------------------------------------------------------------------------
  184.   # * Atualização da tela
  185.   #--------------------------------------------------------------------------
  186.   def update(*args, &block)
  187.     if @start_bo_anime
  188.       start_bo_pics
  189.       super
  190.       return
  191.     end
  192.     unless moving_bo_order
  193.       super
  194.       return
  195.     end
  196.     akea_bo_update(*args, &block)
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # * Animação de inicio
  200.   #--------------------------------------------------------------------------
  201.   def start_bo_pics
  202.     for n in 0...@battle_order.size
  203.       @bo_battlers[@battle_order[n]].opacity += 20 if @bo_battlers[@battle_order[n]].opacity < Akea_BattleOrder::Opacity
  204.       @mold_battlers[@battle_order[n]].opacity += 20 if @mold_battlers[@battle_order[n]].opacity < Akea_BattleOrder::Opacity
  205.     end
  206.     @bo_Image.opacity += 20
  207.     @start_bo_anime = false if @bo_Image.opacity == 255
  208.   end
  209.   #--------------------------------------------------------------------------
  210.   # * Movimento das faces dos battlers
  211.   #--------------------------------------------------------------------------
  212.   def moving_bo_order
  213.     return true if @bo_action.compact.empty?
  214.     unless @bo_action.compact.empty?
  215.       if @bo_action.first == nil
  216.         @bo_action.shift
  217.         return false
  218.       end
  219.       if @bo_battlers[@bo_action.first].opacity > 0
  220.         @bo_battlers[@bo_action.first].opacity -= 30
  221.         @mold_battlers[@bo_action.first].opacity -= 30
  222.         @bo_Image.opacity -= 30 if @battle_order.size == 0
  223.       else
  224.         @bo_timer_count += 1
  225.         for n in 0...@battle_order.size
  226.           if @bo_timer_count != Akea_BattleOrder::Movement_Time + 1
  227.             @bo_battlers[@battle_order[n]].y += @bo_pos_y / Akea_BattleOrder::Movement_Time
  228.             @bo_battlers[@battle_order[n]].x += @bo_pos_x / Akea_BattleOrder::Movement_Time
  229.             @mold_battlers[@battle_order[n]].y += @bo_pos_y / Akea_BattleOrder::Movement_Time
  230.             @mold_battlers[@battle_order[n]].x += @bo_pos_x / Akea_BattleOrder::Movement_Time
  231.           else
  232.             @bo_battlers[@battle_order[n]].y += @bo_pos_y % Akea_BattleOrder::Movement_Time
  233.             @bo_battlers[@battle_order[n]].x += @bo_pos_x % Akea_BattleOrder::Movement_Time
  234.             @mold_battlers[@battle_order[n]].y += @bo_pos_y % Akea_BattleOrder::Movement_Time
  235.             @mold_battlers[@battle_order[n]].x += @bo_pos_x % Akea_BattleOrder::Movement_Time
  236.           end
  237.         end
  238.         @reserve_order.compact!
  239.         for n in 0...@reserve_order.size
  240.           if @bo_timer_count != Akea_BattleOrder::Movement_Time + 1
  241.             @bo_battlers[@reserve_order[n]].y += @bo_pos_y / Akea_BattleOrder::Movement_Time
  242.             @bo_battlers[@reserve_order[n]].x += @bo_pos_x / Akea_BattleOrder::Movement_Time
  243.             @mold_battlers[@reserve_order[n]].y += @bo_pos_y / Akea_BattleOrder::Movement_Time
  244.             @mold_battlers[@reserve_order[n]].x += @bo_pos_x / Akea_BattleOrder::Movement_Time
  245.           else
  246.             @bo_battlers[@reserve_order[n]].y += @bo_pos_y % Akea_BattleOrder::Movement_Time
  247.             @bo_battlers[@reserve_order[n]].x += @bo_pos_x % Akea_BattleOrder::Movement_Time
  248.             @mold_battlers[@reserve_order[n]].y += @bo_pos_y % Akea_BattleOrder::Movement_Time
  249.             @mold_battlers[@reserve_order[n]].x += @bo_pos_x % Akea_BattleOrder::Movement_Time
  250.           end
  251.         end
  252.         if @bo_timer_count == Akea_BattleOrder::Movement_Time
  253.           @bo_action.shift
  254.           @bo_timer_count = 0
  255.         end
  256.       end
  257.     else
  258.       @bo_action.shift
  259.       @bo_timer_count = 0
  260.     end
  261.     false
  262.   end
  263.   #--------------------------------------------------------------------------
  264.   # * Criação das imagens dos battlers
  265.   #--------------------------------------------------------------------------
  266.   def create_battle_order_images
  267.     @bo_Image = Sprite.new
  268.     @bo_Image.bitmap = Cache.akea(Akea_BattleOrder::Battle_Image)
  269.     @bo_Image.x = Akea_BattleOrder::Image_X
  270.     @bo_Image.y = Akea_BattleOrder::Image_Y
  271.     @bo_Image.opacity = 0
  272.     @bo_battlers = Array.new
  273.     @mold_battlers = Array.new
  274.     akea_size = Akea_BattleOrder::Size
  275.     for n in 0...$game_party.battle_members.size
  276.       act = $game_party.battle_members[n]
  277.       @bo_battlers[n] = Sprite.new
  278.       if Akea_BattleOrder::Party_Images[$game_party.battle_members[n].id]
  279.         @bo_battlers[n].bitmap = Cache.akea(Akea_BattleOrder::Party_Images[$game_party.battle_members[n].id])
  280.         @bo_battlers[n].opacity = 0
  281.         @mold_battlers[n] = Sprite.new
  282.         @mold_battlers[n].bitmap = Cache.akea('')
  283.         next
  284.       end
  285.       if Akea_BattleOrder::Party_Face
  286.         @bo_battlers[n].bitmap = Cache.face(act.face_name)
  287.         face_index = act.face_index
  288.         sx = @bo_battlers[n].bitmap.width/4 * akea_size['Sx'] / 100
  289.         sy = @bo_battlers[n].bitmap.height/2 * akea_size['Sy'] / 100
  290.         @bo_battlers[n].src_rect.set(sx + face_index % 4 * 96, sy + face_index / 4 * 96, akea_size['X'], akea_size['Y'])
  291.       else
  292.         @bo_battlers[n].bitmap = Cache.character(act.character_name)
  293.         face_index = act.character_index
  294.         sign = act.character_name[/^[\!\$]./]
  295.         if sign && sign.include?('$')
  296.           cw = @bo_battlers[n].bitmap.width
  297.           ch = @bo_battlers[n].bitmap.height
  298.           sx = @bo_battlers[n].bitmap.width * akea_size['Sx'] / 100
  299.           sy = @bo_battlers[n].bitmap.height * akea_size['Sy'] / 100
  300.         else
  301.           cw = @bo_battlers[n].bitmap.width / 4
  302.           ch = @bo_battlers[n].bitmap.height / 2
  303.           sx = @bo_battlers[n].bitmap.width/4 * akea_size['Sx'] / 100
  304.           sy = @bo_battlers[n].bitmap.height/2 * akea_size['Sy'] / 100
  305.         end
  306.         @bo_battlers[n].src_rect.set(sx + face_index % 4 * cw + cw/3, sy + face_index / 4 * ch, akea_size['X'], akea_size['Y'])
  307.       end
  308.       @bo_battlers[n].opacity = 0
  309.       @mold_battlers[n] = Sprite.new
  310.       @mold_battlers[n].bitmap = Cache.akea(Akea_BattleOrder::Mold)
  311.     end
  312.     for n in $game_party.battle_members.size...($game_troop.members.size + $game_party.battle_members.size)
  313.       act = $game_troop.members[n-$game_party.battle_members.size]
  314.       @bo_battlers[n] = Sprite.new
  315.       if Akea_BattleOrder::Monster_Images[all_battle_members[n].enemy_id]
  316.         @bo_battlers[n].bitmap = Cache.akea(Akea_BattleOrder::Monster_Images[all_battle_members[n].enemy_id])
  317.         @bo_battlers[n].opacity = 0
  318.         @mold_battlers[n] = Sprite.new
  319.         @mold_battlers[n].bitmap = Cache.akea('')
  320.         next
  321.       end
  322.       if Akea_BattleOrder::Enemy_Face
  323.         @bo_battlers[n].bitmap = Cache.battler($data_enemies[act.enemy_id].battler_name, act.battler_hue)
  324.         sx = @bo_battlers[n].bitmap.width * akea_size['Sx'] / 100
  325.         sy = @bo_battlers[n].bitmap.height * akea_size['Sy'] / 100
  326.         @bo_battlers[n].src_rect.set(sx, sy, akea_size['X'], akea_size['Y'])
  327.       else
  328.         if Akea_BattleOrder::Enemy_Characters[act.enemy_id]
  329.           @bo_battlers[n].bitmap = Cache.character(Akea_BattleOrder::Enemy_Characters[act.enemy_id]['CharName'])
  330.           face_index = Akea_BattleOrder::Enemy_Characters[act.enemy_id]['Index']
  331.           sign = Akea_BattleOrder::Enemy_Characters[act.enemy_id]['CharName'][/^[\!\$]./]
  332.         else
  333.           @bo_battlers[n].bitmap = Cache.character(Akea_BattleOrder::Enemy_Characters[0]['CharName'])
  334.           face_index = Akea_BattleOrder::Enemy_Characters[0]['Index']
  335.           sign = Akea_BattleOrder::Enemy_Characters[0]['CharName'][/^[\!\$]./]
  336.         end
  337.         if sign && sign.include?('$')
  338.           cw = @bo_battlers[n].bitmap.width
  339.           ch = @bo_battlers[n].bitmap.height
  340.           sx = @bo_battlers[n].bitmap.width * akea_size['Sx'] / 100
  341.           sy = @bo_battlers[n].bitmap.height * akea_size['Sy'] / 100
  342.         else
  343.           cw = @bo_battlers[n].bitmap.width / 4
  344.           ch = @bo_battlers[n].bitmap.height / 2
  345.           sx = @bo_battlers[n].bitmap.width/4 * akea_size['Sx'] / 100
  346.           sy = @bo_battlers[n].bitmap.height/2 * akea_size['Sy'] / 100
  347.         end
  348.         @bo_battlers[n].src_rect.set(sx + face_index % 4 * cw + cw/3, sy + face_index / 4 * ch, akea_size['X'], akea_size['Y'])
  349.       end
  350.         @bo_battlers[n].opacity = 0
  351.         @mold_battlers[n] = Sprite.new
  352.         @mold_battlers[n].bitmap = Cache.akea(Akea_BattleOrder::Mold)
  353.     end
  354.   end
  355.   #--------------------------------------------------------------------------
  356.   # * Finalização do processo
  357.   #--------------------------------------------------------------------------
  358.   def terminate
  359.     @bo_Image.bitmap.dispose
  360.     @bo_Image.dispose
  361.     @bo_battlers.each{|battler|battler.bitmap.dispose; battler.dispose}
  362.     @mold_battlers.each{|battler|battler.bitmap.dispose; battler.dispose}
  363.     akea_bo_terminate
  364.   end
  365. end
  366.  
  367.  
  368. #==============================================================================
  369. # ** Cache
  370. #------------------------------------------------------------------------------
  371. #  Este modulo carrega cada gráfico, cria um objeto de Bitmap e retém ele.
  372. # Para acelerar o carregamento e preservar memória, este módulo matém o
  373. # objeto de Bitmap em uma Hash interna, permitindo que retorne objetos
  374. # pré-existentes quando mesmo Bitmap é requerido novamente.
  375. #==============================================================================
  376.  
  377.  
  378. module Cache
  379.   #--------------------------------------------------------------------------
  380.   # * Carregamento dos gráficos de animação
  381.   #     filename : nome do arquivo
  382.   #     hue      : informações da alteração de tonalidade
  383.   #--------------------------------------------------------------------------
  384.   def self.akea(filename)
  385.     load_bitmap("Graphics/Akea/", filename)
  386.   end
  387. end
  388. #==============================================================================
  389. # ** BattleManager
  390. #------------------------------------------------------------------------------
  391. #  Este módulo gerencia o andamento da batalha.
  392. #==============================================================================
  393.  
  394. module BattleManager
  395.   #--------------------------------------------------------------------------
  396.   # * Configuração inicial
  397.   #--------------------------------------------------------------------------
  398.   def self.akea_battle_turn
  399.     @action_battlers
  400.   end
  401. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement