Advertisement
Raizen

Akea Battle Order(English)

Mar 10th, 2015
893
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 17.12 KB | None | 0 0
  1. #=======================================================
  2. #        Akea Battle Order
  3. # Author: Raizen
  4. # Community: http://www.centrorpg.com/
  5. # Compatibility: RMVXAce
  6. #
  7. #=======================================================
  8. # Scripts Function: Adds the order of battlers, shown in the screen of the battle
  9. # =========================Don't Modify==============================
  10. $included ||= Hash.new
  11. $included[:akea_battleorder] = true
  12. module Akea_BattleOrder
  13. Party_Images = []
  14. Monster_Images = []
  15. Enemy_Characters = []
  16. # =========================Don't Modify==============================
  17.  
  18. # Configuration starts here
  19.  
  20. #=======================================================
  21. #        INSTRUCTIONS
  22. # Very simple, put the script above main and below the battle scripts
  23. # and configure the settings.
  24. #=======================================================
  25. # IMPORTANT: For non-face, non-character image, the image MUST BE on
  26. # Graphics/Akea folder in your project, you can just create the folder and put
  27. # the picures there.
  28. # Using Party faces?, set false if your going to use charsets instead
  29. Party_Face = true
  30.  
  31. # Using enemy faces?, set false if your going to use charsets instead
  32. # If false, you need to set on the end of script settings the charset of
  33. # the enemy.
  34. Enemy_Face = true
  35.  
  36. # Adicional Image that will stay on Battle screen
  37. Battle_Image = 'Battle_Order'
  38. Image_X = 500 #Position X
  39. Image_Y = 40 #Position Y
  40.  
  41. # Portrait Image, in case characters/faces need a portrait
  42. # Image, if none is desired
  43. # Mold = ''
  44. Mold = 'mold2'
  45.  
  46. # Portrait correction position
  47. Mold_X = -4
  48. Mold_Y = -4
  49.  
  50.  
  51. # Cutting faces and charsets, that is so it will
  52. # fit on the portrait.
  53. Size = {
  54. 'Sx' => 30, # in %, on X axis that will be cut
  55. 'Sy' => 30, # in %, on Y axis that will be cut
  56. 'X' => 60, # Size of cutted image in X
  57. 'Y' => 30, # Size of cutted image in Y
  58.  
  59. }
  60. # Time taken for the portraits to move in frames
  61. Movement_Time = 5
  62.  
  63. # Initial position of the portraits [x, y]
  64. Start_Position = [465, 250]
  65.  
  66. # End position of the portraits [x, y]
  67. End_Position = [465, 50]
  68.  
  69. # Opacity of the portraits in battle,
  70. # The opacity of the turn member will be 255(100%)
  71. # The other ones will be:
  72. Opacity = 150
  73.  
  74. # Images used for characters and enemies (OPTIONAL)
  75. # To use image instead of faces or characters, put
  76. # Party_Images[id] = 'Name_of_Image'
  77. # Id is the actor id on database
  78.  
  79. Party_Images[0] = 'Battle_Order'
  80.  
  81. # Monster_Images[id] = 'Name_of_Image'
  82. # Id is the monster id on database
  83. Monster_Images[0] = 'Battle_Order'
  84.  
  85. # Enemy_Characters, configure here ONLY if Enemy_face = false
  86. # In other cases the script setting ends here.
  87.  
  88. #==============================================================================
  89. # ** Enemy_Characters[0] => Default, in case the enemy has not a preconfigured charset
  90. #==============================================================================
  91. Enemy_Characters[0] = {
  92. 'CharName' => 'Monster1', #Name of image on the folder Characters
  93. 'Index' => 1, # Index of charset with 8 positions, starting at 0
  94. }
  95. #==============================================================================
  96. # ** Enemy_Characters[1] => Slime
  97. #==============================================================================
  98. Enemy_Characters[1] = {
  99. 'CharName' => 'Monster2', #Name of image on the folder Characters
  100. 'Index' => 2, # Index of charset with 8 positions, starting at 0
  101. }
  102. end
  103. # HERE STARTS THE SCRIPT
  104.  
  105. #==============================================================================
  106. # ** Scene_Battle
  107. #------------------------------------------------------------------------------
  108. #  Esta classe executa o processamento da tela de batalha.
  109. #==============================================================================
  110.  
  111. class Scene_Battle < Scene_Base
  112. alias :akea_bo_start :start
  113. alias :akea_bo_turn_start :turn_start
  114. alias :akea_bo_update :update
  115. alias :akea_bo_process_action :process_action
  116. alias :akea_bo_terminate :terminate
  117.   #--------------------------------------------------------------------------
  118.   # * Inicialização do processo
  119.   #--------------------------------------------------------------------------
  120.   def start(*args, &block)
  121.     @start_bo_anime = false
  122.     @bo_turn_start = false
  123.     create_battle_order_images
  124.     @bo_action = []
  125.     akea_bo_start(*args, &block)
  126.   end
  127.   #--------------------------------------------------------------------------
  128.   # * Início do turno
  129.   #--------------------------------------------------------------------------
  130.   def turn_start
  131.     @start_bo_anime = true
  132.     akea_bo_turn_start
  133.     @battle_order = []
  134.     for n in 0...all_battle_members.size
  135.       @battle_order.push(all_battle_members.index(BattleManager.akea_battle_turn[n])) if BattleManager.akea_battle_turn[n].alive?
  136.     end
  137.     @bo_pos_x = (Akea_BattleOrder::End_Position[0] - Akea_BattleOrder::Start_Position[0])/ @battle_order.size
  138.     @bo_pos_y = (Akea_BattleOrder::End_Position[1] - Akea_BattleOrder::Start_Position[1])/ @battle_order.size
  139.     @battle_order.reverse!
  140.     @bo_correction = 0
  141.     for n in 0...@battle_order.size
  142.       @bo_battlers[@battle_order[n]].x = Akea_BattleOrder::Start_Position[0] + @bo_pos_x*n
  143.       @bo_battlers[@battle_order[n]].y = Akea_BattleOrder::Start_Position[1] + @bo_pos_y*n
  144.       @mold_battlers[@battle_order[n]].x = Akea_BattleOrder::Start_Position[0] + @bo_pos_x*n + Akea_BattleOrder::Mold_X
  145.       @mold_battlers[@battle_order[n]].y = Akea_BattleOrder::Start_Position[1] + @bo_pos_y*n + Akea_BattleOrder::Mold_Y
  146.       @bo_battlers[@battle_order[n]].z = 100 + n*2
  147.       @mold_battlers[@battle_order[n]].z = 100 + n*2 + 1
  148.       @mold_battlers[@battle_order[n]].opacity = 0
  149.     end
  150.     @battle_order.reverse!
  151.     @reserve_order = []
  152.     @bo_timer_count = 0
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # * Processamento de ações
  156.   #--------------------------------------------------------------------------
  157.   def process_action    
  158.     return if @start_bo_anime
  159.     return if scene_changing?
  160.     if (!@subject || !@subject.current_action)
  161.       if @battle_order.include?(all_battle_members.index(BattleManager.akea_battle_turn[0])) && BattleManager.akea_battle_turn[0] && BattleManager.akea_battle_turn[0].dead?
  162.         @check_condition = BattleManager.akea_battle_turn
  163.         n = 0
  164.         while @check_condition[n] && @check_condition[n].dead?
  165.           n += 1
  166.           @bo_action.push(@battle_order.first)
  167.           @reserve_order.push(@battle_order.first)
  168.           @battle_order.shift
  169.         end
  170.         return unless @reserve_order.empty?
  171.       end
  172.       @bo_action.push(@battle_order.first)
  173.       @battle_order.shift
  174.     end
  175.     if @bo_action.first
  176.       @bo_battlers[@bo_action.first].opacity = 255
  177.       @mold_battlers[@bo_action.first].opacity = 255
  178.     end
  179.     akea_bo_process_action
  180.   end
  181.  
  182.   #--------------------------------------------------------------------------
  183.   # * Atualização da tela
  184.   #--------------------------------------------------------------------------
  185.   def update(*args, &block)
  186.     if @start_bo_anime
  187.       start_bo_pics
  188.       super
  189.       return
  190.     end
  191.     unless moving_bo_order
  192.       super
  193.       return
  194.     end
  195.     akea_bo_update(*args, &block)
  196.   end
  197.   #--------------------------------------------------------------------------
  198.   # * Animação de inicio
  199.   #--------------------------------------------------------------------------
  200.   def start_bo_pics
  201.     for n in 0...@battle_order.size
  202.       @bo_battlers[@battle_order[n]].opacity += 20 if @bo_battlers[@battle_order[n]].opacity < Akea_BattleOrder::Opacity
  203.       @mold_battlers[@battle_order[n]].opacity += 20 if @mold_battlers[@battle_order[n]].opacity < Akea_BattleOrder::Opacity
  204.     end
  205.     @bo_Image.opacity += 20
  206.     @start_bo_anime = false if @bo_Image.opacity == 255
  207.   end
  208.   #--------------------------------------------------------------------------
  209.   # * Movimento das faces dos battlers
  210.   #--------------------------------------------------------------------------
  211.   def moving_bo_order
  212.     return true if @bo_action.compact.empty?
  213.     unless @bo_action.compact.empty?
  214.       if @bo_action.first == nil
  215.         @bo_action.shift
  216.         return false
  217.       end
  218.       if @bo_battlers[@bo_action.first].opacity > 0
  219.         @bo_battlers[@bo_action.first].opacity -= 30
  220.         @mold_battlers[@bo_action.first].opacity -= 30
  221.         @bo_Image.opacity -= 30 if @battle_order.size == 0
  222.       else
  223.         @bo_timer_count += 1
  224.         for n in 0...@battle_order.size
  225.           if @bo_timer_count != Akea_BattleOrder::Movement_Time + 1
  226.             @bo_battlers[@battle_order[n]].y += @bo_pos_y / Akea_BattleOrder::Movement_Time
  227.             @bo_battlers[@battle_order[n]].x += @bo_pos_x / Akea_BattleOrder::Movement_Time
  228.             @mold_battlers[@battle_order[n]].y += @bo_pos_y / Akea_BattleOrder::Movement_Time
  229.             @mold_battlers[@battle_order[n]].x += @bo_pos_x / Akea_BattleOrder::Movement_Time
  230.           else
  231.             @bo_battlers[@battle_order[n]].y += @bo_pos_y % Akea_BattleOrder::Movement_Time
  232.             @bo_battlers[@battle_order[n]].x += @bo_pos_x % Akea_BattleOrder::Movement_Time
  233.             @mold_battlers[@battle_order[n]].y += @bo_pos_y % Akea_BattleOrder::Movement_Time
  234.             @mold_battlers[@battle_order[n]].x += @bo_pos_x % Akea_BattleOrder::Movement_Time
  235.           end
  236.         end
  237.         @reserve_order.compact!
  238.         for n in 0...@reserve_order.size
  239.           if @bo_timer_count != Akea_BattleOrder::Movement_Time + 1
  240.             @bo_battlers[@reserve_order[n]].y += @bo_pos_y / Akea_BattleOrder::Movement_Time
  241.             @bo_battlers[@reserve_order[n]].x += @bo_pos_x / Akea_BattleOrder::Movement_Time
  242.             @mold_battlers[@reserve_order[n]].y += @bo_pos_y / Akea_BattleOrder::Movement_Time
  243.             @mold_battlers[@reserve_order[n]].x += @bo_pos_x / Akea_BattleOrder::Movement_Time
  244.           else
  245.             @bo_battlers[@reserve_order[n]].y += @bo_pos_y % Akea_BattleOrder::Movement_Time
  246.             @bo_battlers[@reserve_order[n]].x += @bo_pos_x % Akea_BattleOrder::Movement_Time
  247.             @mold_battlers[@reserve_order[n]].y += @bo_pos_y % Akea_BattleOrder::Movement_Time
  248.             @mold_battlers[@reserve_order[n]].x += @bo_pos_x % Akea_BattleOrder::Movement_Time
  249.           end
  250.         end
  251.         if @bo_timer_count == Akea_BattleOrder::Movement_Time
  252.           @bo_action.shift
  253.           @bo_timer_count = 0
  254.         end
  255.       end
  256.     else
  257.       @bo_action.shift
  258.       @bo_timer_count = 0
  259.     end
  260.     false
  261.   end
  262.   #--------------------------------------------------------------------------
  263.   # * Criação das imagens dos battlers
  264.   #--------------------------------------------------------------------------
  265.   def create_battle_order_images
  266.     @bo_Image = Sprite.new
  267.     @bo_Image.bitmap = Cache.akea(Akea_BattleOrder::Battle_Image)
  268.     @bo_Image.x = Akea_BattleOrder::Image_X
  269.     @bo_Image.y = Akea_BattleOrder::Image_Y
  270.     @bo_Image.opacity = 0
  271.     @bo_battlers = Array.new
  272.     @mold_battlers = Array.new
  273.     akea_size = Akea_BattleOrder::Size
  274.     for n in 0...$game_party.battle_members.size
  275.       act = $game_party.battle_members[n]
  276.       @bo_battlers[n] = Sprite.new
  277.       if Akea_BattleOrder::Party_Images[$game_party.battle_members[n].id]
  278.         @bo_battlers[n].bitmap = Cache.akea(Akea_BattleOrder::Party_Images[$game_party.battle_members[n].id])
  279.         @bo_battlers[n].opacity = 0
  280.         @mold_battlers[n] = Sprite.new
  281.         @mold_battlers[n].bitmap = Cache.akea('')
  282.         next
  283.       end
  284.       if Akea_BattleOrder::Party_Face
  285.         @bo_battlers[n].bitmap = Cache.face(act.face_name)
  286.         face_index = act.face_index
  287.         sx = @bo_battlers[n].bitmap.width/4 * akea_size['Sx'] / 100
  288.         sy = @bo_battlers[n].bitmap.height/2 * akea_size['Sy'] / 100
  289.         @bo_battlers[n].src_rect.set(sx + face_index % 4 * 96, sy + face_index / 4 * 96, akea_size['X'], akea_size['Y'])
  290.       else
  291.         @bo_battlers[n].bitmap = Cache.character(act.character_name)
  292.         face_index = act.character_index
  293.         sign = act.character_name[/^[\!\$]./]
  294.         if sign && sign.include?('$')
  295.           cw = @bo_battlers[n].bitmap.width
  296.           ch = @bo_battlers[n].bitmap.height
  297.           sx = @bo_battlers[n].bitmap.width * akea_size['Sx'] / 100
  298.           sy = @bo_battlers[n].bitmap.height * akea_size['Sy'] / 100
  299.         else
  300.           cw = @bo_battlers[n].bitmap.width / 4
  301.           ch = @bo_battlers[n].bitmap.height / 2
  302.           sx = @bo_battlers[n].bitmap.width/4 * akea_size['Sx'] / 100
  303.           sy = @bo_battlers[n].bitmap.height/2 * akea_size['Sy'] / 100
  304.         end
  305.         @bo_battlers[n].src_rect.set(sx + face_index % 4 * cw + cw/3, sy + face_index / 4 * ch, akea_size['X'], akea_size['Y'])
  306.       end
  307.       @bo_battlers[n].opacity = 0
  308.       @mold_battlers[n] = Sprite.new
  309.       @mold_battlers[n].bitmap = Cache.akea(Akea_BattleOrder::Mold)
  310.     end
  311.     for n in $game_party.battle_members.size...($game_troop.members.size + $game_party.battle_members.size)
  312.       act = $game_troop.members[n-$game_party.battle_members.size]
  313.       @bo_battlers[n] = Sprite.new
  314.       if Akea_BattleOrder::Monster_Images[all_battle_members[n].enemy_id]
  315.         @bo_battlers[n].bitmap = Cache.akea(Akea_BattleOrder::Monster_Images[all_battle_members[n].enemy_id])
  316.         @bo_battlers[n].opacity = 0
  317.         @mold_battlers[n] = Sprite.new
  318.         @mold_battlers[n].bitmap = Cache.akea('')
  319.         next
  320.       end
  321.       if Akea_BattleOrder::Enemy_Face
  322.         @bo_battlers[n].bitmap = Cache.battler($data_enemies[act.enemy_id].battler_name, act.battler_hue)
  323.         sx = @bo_battlers[n].bitmap.width * akea_size['Sx'] / 100
  324.         sy = @bo_battlers[n].bitmap.height * akea_size['Sy'] / 100
  325.         @bo_battlers[n].src_rect.set(sx, sy, akea_size['X'], akea_size['Y'])
  326.       else
  327.         if Akea_BattleOrder::Enemy_Characters[act.enemy_id]
  328.           @bo_battlers[n].bitmap = Cache.character(Akea_BattleOrder::Enemy_Characters[act.enemy_id]['CharName'])
  329.           face_index = Akea_BattleOrder::Enemy_Characters[act.enemy_id]['Index']
  330.           sign = Akea_BattleOrder::Enemy_Characters[act.enemy_id]['CharName'][/^[\!\$]./]
  331.         else
  332.           @bo_battlers[n].bitmap = Cache.character(Akea_BattleOrder::Enemy_Characters[0]['CharName'])
  333.           face_index = Akea_BattleOrder::Enemy_Characters[0]['Index']
  334.           sign = Akea_BattleOrder::Enemy_Characters[0]['CharName'][/^[\!\$]./]
  335.         end
  336.         if sign && sign.include?('$')
  337.           cw = @bo_battlers[n].bitmap.width
  338.           ch = @bo_battlers[n].bitmap.height
  339.           sx = @bo_battlers[n].bitmap.width * akea_size['Sx'] / 100
  340.           sy = @bo_battlers[n].bitmap.height * akea_size['Sy'] / 100
  341.         else
  342.           cw = @bo_battlers[n].bitmap.width / 4
  343.           ch = @bo_battlers[n].bitmap.height / 2
  344.           sx = @bo_battlers[n].bitmap.width/4 * akea_size['Sx'] / 100
  345.           sy = @bo_battlers[n].bitmap.height/2 * akea_size['Sy'] / 100
  346.         end
  347.         @bo_battlers[n].src_rect.set(sx + face_index % 4 * cw + cw/3, sy + face_index / 4 * ch, akea_size['X'], akea_size['Y'])
  348.       end
  349.         @bo_battlers[n].opacity = 0
  350.         @mold_battlers[n] = Sprite.new
  351.         @mold_battlers[n].bitmap = Cache.akea(Akea_BattleOrder::Mold)
  352.     end
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   # * Finalização do processo
  356.   #--------------------------------------------------------------------------
  357.   def terminate
  358.     @bo_Image.bitmap.dispose
  359.     @bo_Image.dispose
  360.     @bo_battlers.each{|battler|battler.bitmap.dispose; battler.dispose}
  361.     @mold_battlers.each{|battler|battler.bitmap.dispose; battler.dispose}
  362.     akea_bo_terminate
  363.   end
  364. end
  365.  
  366.  
  367. #==============================================================================
  368. # ** Cache
  369. #------------------------------------------------------------------------------
  370. #  Este modulo carrega cada gráfico, cria um objeto de Bitmap e retém ele.
  371. # Para acelerar o carregamento e preservar memória, este módulo matém o
  372. # objeto de Bitmap em uma Hash interna, permitindo que retorne objetos
  373. # pré-existentes quando mesmo Bitmap é requerido novamente.
  374. #==============================================================================
  375.  
  376.  
  377. module Cache
  378.   #--------------------------------------------------------------------------
  379.   # * Carregamento dos gráficos de animação
  380.   #     filename : nome do arquivo
  381.   #     hue      : informações da alteração de tonalidade
  382.   #--------------------------------------------------------------------------
  383.   def self.akea(filename)
  384.     load_bitmap("Graphics/Akea/", filename)
  385.   end
  386. end
  387. #==============================================================================
  388. # ** BattleManager
  389. #------------------------------------------------------------------------------
  390. #  Este módulo gerencia o andamento da batalha.
  391. #==============================================================================
  392.  
  393. module BattleManager
  394.   #--------------------------------------------------------------------------
  395.   # * Configuração inicial
  396.   #--------------------------------------------------------------------------
  397.   def self.akea_battle_turn
  398.     @action_battlers
  399.   end
  400. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement