Advertisement
Raizen

Akea Animated Battle Cursor

Apr 27th, 2014
283
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 18.83 KB | None | 0 0
  1. #=======================================================
  2. #        Akea Animated Battle Cursor
  3. # Autor: Raizen
  4. # Comunidade: http://www.centrorpg.com/
  5. # Compatibilidade: RMVXAce
  6. #
  7. #=======================================================
  8. # =========================Não modificar==============================
  9. $imported ||= Hash.new
  10. $imported[:akea_battlecursor] = true
  11. module Akea_BattleCursor
  12. # =========================Não modificar==============================
  13.  
  14. # Configuração começa Aqui
  15.  
  16. #=======================================================
  17. #        INSTRUÇÕES
  18. # Bem simples, basta colocar o script acima do main e configurar como é
  19. # pedido abaixo, o script adiciona a função de mostrar um cursor de batalha,
  20. # Ele pode ser animado ou estático como preferir
  21. #=======================================================
  22.  
  23. # Taxa de atualização da animação, apenas necessário se o cursor for animado
  24. Cursor_Update = 10
  25.  
  26. # Mostrar as janelas padrões que identificam os inimigos e/ou personagens?
  27. # false = não , true = sim
  28. Show_Windows = false
  29.  
  30.  
  31. # Nome da fonte, deixe '' para que seja usado a fonte padrão
  32. Font_Name = 'Georgia'
  33.  
  34. # Tamanho da fonte, deixe 0 para ser usado o tamanho padrão
  35. Font_Size = 18
  36.  
  37. #==============================================================================
  38. # ** Configuração do inimigo
  39. #==============================================================================
  40.  
  41. # Cor da fonte para inimigos, seguindo o padrão R, G, B e no final coloque a
  42. # opacidade da fonte sendo 0 invisivel até 255, totalmente visivel
  43. Enemy_Font_Color = [255, 100, 100, 255]
  44.  
  45. # Nome da imagem do cursor, deve estar na pasta Graphics/Akea
  46. Enemy_Cursor = 'Enemy_Cursor'
  47.  
  48. # Numero de frames do cursor dos inimigos, se não for animado coloque
  49. # Enemy_Frames = 1
  50. Enemy_Frames = 5
  51.  
  52. # Posição do cursor sobre os inimigos
  53. # E_Cursor_Position = [posição em x, posição em y]
  54. E_Cursor_Position = [0, -70]
  55.  
  56. # Posição do nome dos inimigos
  57. # E_Name_Position = [posição em x, posição em y]
  58. E_Name_Position = [0, -30]
  59.  
  60. # Nome da imagem do cursor dos personagens, deve estar na pasta Graphics/Akea
  61. # Caso não use actors pode usar como
  62. # Actor_Cursor = ''
  63. Actor_Cursor = 'Actor_Cursor'
  64.  
  65. #==============================================================================
  66. # ** Configuração do personagem
  67. # Não é necessário configurar abaixo caso não utilize
  68. # algum script que mostre os personagens na batalha
  69. #==============================================================================
  70.  
  71. # Cor da fonte para personagens, seguindo o padrão R, G, B e no final coloque a
  72. # opacidade da fonte sendo 0 invisivel até 255, totalmente visivel
  73. Actor_Font_Color = [100, 255, 150, 255]
  74.  
  75. # Numero de frames do cursor dos personagens, se não for animado coloque
  76. # Enemy_Frames = 1
  77. Actor_Frames = 5
  78.  
  79. # Posição do cursor sobre os personagens
  80. # A_Cursor_Position = [posição em x, posição em y]
  81. A_Name_Position = [-10, -10]
  82.  
  83. # Posição do nome dos personagens
  84. # A_Name_Position = [posição em x, posição em y]
  85. A_Cursor_Position = [-55, -70]
  86.  
  87.  
  88. #==============================================================================
  89. # ** Aqui começa o Script
  90. #==============================================================================
  91.  
  92. end
  93.  
  94. #==============================================================================
  95. # ** Scene_Battle
  96. #------------------------------------------------------------------------------
  97. #  Esta classe executa o processamento da tela de batalha.
  98. #==============================================================================
  99.  
  100. class Scene_Battle < Scene_Base
  101. alias :akea_bc_start :start
  102. alias :akea_bc_update :update
  103. alias :akea_bc_select_enemy_selection :select_enemy_selection
  104. alias :akea_bc_on_skill_ok :on_skill_ok
  105. alias :akea_bc_on_enemy_cancel :on_enemy_cancel
  106. alias :akea_bc_on_item_ok :on_item_ok
  107. alias :akea_bc_on_actor_cancel :on_actor_cancel
  108. alias :akea_bc_select_actor_selection :select_actor_selection
  109. alias :akea_bc_terminate :terminate
  110. alias :akea_bc_turn_start :turn_start
  111. alias :akea_bc_next_command :next_command
  112.   #--------------------------------------------------------------------------
  113.   # * Inicialização do processo
  114.   #--------------------------------------------------------------------------
  115.   def start
  116.     @bc_cursor = Array.new
  117.     @bc_enemy_cursor = Array.new
  118.     @bc_actor_cursor = Array.new
  119.     @akea_target_all = false
  120.     akea_bc_start
  121.     akea_bc_create_pictures
  122.   end
  123.   def akea_bc_create_pictures
  124.     @bc_actor_size = $game_party.battle_members.size
  125.     @bc_frame_position = 0
  126.     for n in 0...all_battle_members.size
  127.       next unless all_battle_members[n].use_sprite?
  128.       @bc_cursor[n] = Sprite.new
  129.       @bc_cursor[n].bitmap = Bitmap.new(Graphics.width, Graphics.height)
  130.       #@bc[n].bitmap.font.size = 48
  131.       rect = Rect.new(0, 0, 200, 50)
  132.       if all_battle_members[n].actor?
  133.         @bc_cursor[n].bitmap.font.color = Color.new(Akea_BattleCursor::Actor_Font_Color[0], Akea_BattleCursor::Actor_Font_Color[1], Akea_BattleCursor::Actor_Font_Color[2], Akea_BattleCursor::Actor_Font_Color[3])
  134.         @bc_actor_cursor[n] = Sprite.new
  135.         @bc_actor_cursor[n].bitmap = Cache.akea(Akea_BattleCursor::Actor_Cursor)
  136.         @bc_actor_cursor[n].src_rect.set(0, 0, @bc_actor_cursor[n].bitmap.width/Akea_BattleCursor::Actor_Frames, @bc_actor_cursor[n].bitmap.height)
  137.         @bc_actor_cursor[n].opacity = 0
  138.       else
  139.         @bc_enemy_cursor << Sprite.new
  140.         @bc_enemy_cursor.last.bitmap = Cache.akea(Akea_BattleCursor::Enemy_Cursor)
  141.         @bc_enemy_cursor.last.src_rect.set(0, 0, @bc_enemy_cursor.last.bitmap.width/Akea_BattleCursor::Enemy_Frames, @bc_enemy_cursor.last.bitmap.height)
  142.         @bc_enemy_cursor.last.opacity = 0
  143.         @bc_cursor[n].bitmap.font.color = Color.new(Akea_BattleCursor::Enemy_Font_Color[0], Akea_BattleCursor::Enemy_Font_Color[1], Akea_BattleCursor::Enemy_Font_Color[2], Akea_BattleCursor::Enemy_Font_Color[3])
  144.       end
  145.       @bc_cursor[n].bitmap.font.size = Akea_BattleCursor::Font_Size unless Akea_BattleCursor::Font_Size == 0
  146.       @bc_cursor[n].bitmap.font.name = Akea_BattleCursor::Font_Name unless Akea_BattleCursor::Font_Name == ''
  147.       @bc_cursor[n].bitmap.draw_text(rect, all_battle_members[n].name, 0) if Akea_BattleCursor::Show_Name
  148.       @bc_cursor[n].z = 105
  149.       if all_battle_members[n].enemy?
  150.         @bc_cursor[n].x = all_battle_members[n].screen_x + Akea_BattleCursor::E_Name_Position[0]
  151.         @bc_cursor[n].y = all_battle_members[n].screen_y + Akea_BattleCursor::E_Name_Position[1]
  152.       else
  153.         @bc_cursor[n].x = all_battle_members[n].screen_x + Akea_BattleCursor::A_Name_Position[0]
  154.         @bc_cursor[n].y = all_battle_members[n].screen_y + Akea_BattleCursor::A_Name_Position[1]
  155.       end
  156.       @bc_cursor[n].opacity = 0
  157.     end
  158.   end
  159.   def update(*args, &block)
  160.     akea_bc_update
  161.     show_bc_info
  162.   end
  163.   def show_bc_info
  164.     if @enemy_window.active
  165.       @bc_enemy_cursor.each{|cursor| cursor.opacity -= 30}
  166.       @bc_actor_cursor.each{|cursor| cursor.opacity -= 30}
  167.       @bc_cursor.each{|cursor| cursor.opacity -= 30}
  168.       if @akea_target_all
  169.         for n in 0...@bc_enemy_cursor.size
  170.           if $game_troop.members[n].alive?
  171.             @bc_cursor[n + $game_party.members.size].opacity += 60
  172.             @bc_enemy_cursor[n].x = $game_troop.members[n].screen_x + Akea_BattleCursor::E_Cursor_Position[0]
  173.             @bc_enemy_cursor[n].y = $game_troop.members[n].screen_y + Akea_BattleCursor::E_Cursor_Position[1]
  174.             @bc_enemy_cursor[n].opacity += 60
  175.           end
  176.         end
  177.       else
  178.         @bc_enemy_cursor[@enemy_window.enemy.index].x = $game_troop.members[@enemy_window.enemy.index].screen_x + Akea_BattleCursor::E_Cursor_Position[0]
  179.         @bc_enemy_cursor[@enemy_window.enemy.index].y = $game_troop.members[@enemy_window.enemy.index].screen_y + Akea_BattleCursor::E_Cursor_Position[1]
  180.         @bc_enemy_cursor[@enemy_window.enemy.index].opacity += 60
  181.         @bc_cursor[@enemy_window.enemy.index + $game_party.members.size].opacity += 60
  182.       end
  183.       update_bc_enemy_cursor
  184.     elsif @actor_window.active
  185.       if all_battle_members[0].use_sprite?
  186.         @bc_enemy_cursor.each{|cursor| cursor.opacity -= 30}
  187.         @bc_actor_cursor.each{|cursor| cursor.opacity -= 30}
  188.         @bc_cursor.each{|cursor| cursor.opacity -= 30}
  189.         if @akea_target_all
  190.           for n in 0...@bc_actor_cursor.size
  191.             @bc_actor_cursor[n].x = all_battle_members[n].screen_x + Akea_BattleCursor::A_Cursor_Position[0]
  192.             @bc_actor_cursor[n].y = all_battle_members[n].screen_y + Akea_BattleCursor::A_Cursor_Position[1]
  193.             @bc_actor_cursor[n].opacity += 60
  194.             @bc_cursor[n].opacity += 60
  195.           end
  196.         else
  197.           @bc_actor_cursor[@actor_window.index].x = all_battle_members[@actor_window.index].screen_x + Akea_BattleCursor::A_Cursor_Position[0]
  198.           @bc_actor_cursor[@actor_window.index].y = all_battle_members[@actor_window.index].screen_y + Akea_BattleCursor::A_Cursor_Position[1]
  199.           @bc_actor_cursor[@actor_window.index].opacity += 60
  200.           @bc_cursor[@actor_window.index].opacity += 60
  201.         end
  202.       end
  203.       update_bc_actor_cursor
  204.     else
  205.       for n in 0...all_battle_members.size
  206.         next unless all_battle_members[n].use_sprite?
  207.         @bc_cursor[n].opacity -= 30
  208.       end
  209.         @bc_enemy_cursor.each{|cursor| cursor.opacity -= 30}
  210.         @bc_actor_cursor.each{|cursor| cursor.opacity -= 30}
  211.     end
  212.   end
  213.   def update_bc_enemy_cursor
  214.     return unless Graphics.frame_count % Akea_BattleCursor::Cursor_Update == 0
  215.     if @bc_frame_position >= Akea_BattleCursor::Enemy_Frames - 1
  216.       @bc_frame_position = 0
  217.     else
  218.       @bc_frame_position += 1
  219.     end
  220.     @bc_enemy_cursor.each{|cursor| cursor.src_rect.set(@bc_frame_position*@bc_enemy_cursor[0].bitmap.width/Akea_BattleCursor::Enemy_Frames, 0, @bc_enemy_cursor[0].bitmap.width/Akea_BattleCursor::Enemy_Frames, @bc_enemy_cursor[0].bitmap.height)}
  221.   end
  222.   def update_bc_actor_cursor
  223.     return unless Graphics.frame_count % Akea_BattleCursor::Cursor_Update == 0
  224.     if @bc_frame_position >= Akea_BattleCursor::Actor_Frames - 1
  225.       @bc_frame_position = 0
  226.     else
  227.       @bc_frame_position += 1
  228.     end
  229.     @bc_actor_cursor.each {|cursor| cursor.src_rect.set(@bc_frame_position*@bc_actor_cursor[0].bitmap.width/Akea_BattleCursor::Actor_Frames, 0, @bc_actor_cursor[0].bitmap.width/Akea_BattleCursor::Actor_Frames, @bc_actor_cursor[0].bitmap.height)}
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # * Início do turno
  233.   #--------------------------------------------------------------------------
  234.   def turn_start
  235.     for n in 0...all_battle_members.size
  236.       next unless all_battle_members[n].use_sprite?
  237.       @bc_cursor[n].opacity = 0
  238.     end
  239.     @bc_enemy_cursor.each{|cursor| cursor.opacity = 0}
  240.     @bc_actor_cursor.each{|cursor| cursor.opacity = 0}
  241.     akea_bc_turn_start
  242.   end
  243.   #--------------------------------------------------------------------------
  244.   # * Seleção da escolha de inimigos
  245.   #--------------------------------------------------------------------------
  246.   def select_enemy_selection
  247.     akea_bc_select_enemy_selection
  248.     @enemy_window.hide unless Akea_BattleCursor::Show_Windows
  249.   end
  250.   #--------------------------------------------------------------------------
  251.   # * Seleção da escolha de heróis
  252.   #--------------------------------------------------------------------------
  253.   def select_actor_selection
  254.     akea_bc_select_actor_selection
  255.     @actor_window.hide if all_battle_members[0].use_sprite? && !Akea_BattleCursor::Show_Windows
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # * Habilidade [Confirmação]
  259.   #--------------------------------------------------------------------------
  260.   def on_skill_ok
  261.     @force_window = true
  262.     akea_bc_on_skill_ok
  263.     @force_window = false
  264.     if @skill.for_opponent?
  265.       @skill_window.hide
  266.     else
  267.       @skill_window.hide if all_battle_members[0].use_sprite?
  268.     end
  269.   end
  270.   #--------------------------------------------------------------------------
  271.   # * Entrada de comandos para o próximo herói
  272.   #--------------------------------------------------------------------------
  273.   def next_command
  274.     if @force_window && @skill.for_opponent?
  275.         @akea_target_all = true
  276.         select_enemy_selection
  277.       elsif @force_window
  278.         @akea_target_all = true
  279.         select_actor_selection
  280.       else
  281.         @akea_target_all = false
  282.         akea_bc_next_command
  283.     end
  284.   end
  285.   #--------------------------------------------------------------------------
  286.   # * Inimigo [Cancelamento]
  287.   #--------------------------------------------------------------------------
  288.   def on_enemy_cancel
  289.     akea_bc_on_enemy_cancel
  290.     @akea_target_all = false
  291.     case @actor_command_window.current_symbol
  292.     when :skill
  293.       @skill_window.show.activate
  294.     when :item
  295.       @item_window.show.activate
  296.     end
  297.   end
  298.   #--------------------------------------------------------------------------
  299.   # * Herói [Cancelamento]
  300.   #--------------------------------------------------------------------------
  301.   def on_actor_cancel
  302.     akea_bc_on_actor_cancel
  303.     @akea_target_all = false
  304.     case @actor_command_window.current_symbol
  305.     when :skill
  306.       @skill_window.show.activate
  307.     when :item
  308.       @item_window.show.activate
  309.     end
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # * Item [Confirmação]
  313.   #--------------------------------------------------------------------------
  314.   def on_item_ok
  315.     akea_bc_on_item_ok
  316.     if @item.for_opponent?
  317.       @item_window.hide
  318.     else
  319.       @item_window.hide if all_battle_members[0].use_sprite?
  320.     end
  321.   end
  322.   #--------------------------------------------------------------------------
  323.   # * Finalização do processo
  324.   #--------------------------------------------------------------------------
  325.   def terminate
  326.     for n in 0...all_battle_members.size
  327.       next unless all_battle_members[n].use_sprite?
  328.       @bc_cursor[n].bitmap.dispose
  329.       @bc_cursor[n].dispose
  330.     end
  331.     @bc_actor_cursor.each{|cursor| cursor.bitmap.dispose}
  332.     @bc_actor_cursor.each{|cursor| cursor.dispose}
  333.     @bc_enemy_cursor.each{|cursor| cursor.bitmap.dispose}
  334.     @bc_enemy_cursor.each{|cursor| cursor.dispose}
  335.     akea_bc_terminate
  336.   end
  337. end
  338.  
  339. #==============================================================================
  340. # ** Cache
  341. #------------------------------------------------------------------------------
  342. #  Este modulo carrega cada gráfico, cria um objeto de Bitmap e retém ele.
  343. # Para acelerar o carregamento e preservar memória, este módulo matém o
  344. # objeto de Bitmap em uma Hash interna, permitindo que retorne objetos
  345. # pré-existentes quando mesmo Bitmap é requerido novamente.
  346. #==============================================================================
  347.  
  348.  
  349. module Cache
  350.   #--------------------------------------------------------------------------
  351.   # * Carregamento dos gráficos de animação
  352.   #     filename : nome do arquivo
  353.   #     hue      : informações da alteração de tonalidade
  354.   #--------------------------------------------------------------------------
  355.   def self.akea(filename)
  356.     load_bitmap("Graphics/Akea/", filename)
  357.   end
  358. end
  359.  
  360.  
  361.  
  362. #==============================================================================
  363. # ** Window_BattleActor
  364. #------------------------------------------------------------------------------
  365. #  Esta janela para seleção de heróis na tela de batalha.
  366. #==============================================================================
  367.  
  368. class Window_BattleActor < Window_BattleStatus
  369.   #--------------------------------------------------------------------------
  370.   # * Movimento do cursor para baixo
  371.   #     wrap : cursor retornar a primeira ou ultima posição
  372.   #--------------------------------------------------------------------------
  373.   def cursor_down(wrap = false)
  374.     super(true)
  375.   end
  376.   #--------------------------------------------------------------------------
  377.   # * Movimento do cursor para cima
  378.   #     wrap : cursor retornar a primeira ou ultima posição
  379.   #--------------------------------------------------------------------------
  380.   def cursor_up(wrap = false)
  381.     super(true)
  382.   end
  383.   #--------------------------------------------------------------------------
  384.   # * Movimento do cursor para direita
  385.   #     wrap : cursor retornar a primeira ou ultima posição
  386.   #--------------------------------------------------------------------------
  387.   def cursor_right(wrap = false)
  388.     cursor_down
  389.   end
  390.   #--------------------------------------------------------------------------
  391.   # * Movimento do cursor para esquerda
  392.   #     wrap : cursor retornar a primeira ou ultima posição
  393.   #--------------------------------------------------------------------------
  394.   def cursor_left(wrap = false)
  395.     cursor_up
  396.   end
  397. end
  398. #==============================================================================
  399. # ** Window_BattleEnemy
  400. #------------------------------------------------------------------------------
  401. #  Esta janela para seleção de inimigos na tela de batalha.
  402. #==============================================================================
  403.  
  404. class Window_BattleEnemy < Window_Selectable
  405.   #--------------------------------------------------------------------------
  406.   # * Aquisição do número de colunas
  407.   #--------------------------------------------------------------------------
  408.   def col_max
  409.     if Akea_BattleCursor::Show_Windows
  410.       return 2
  411.     else
  412.       return 1
  413.     end
  414.   end
  415.   #--------------------------------------------------------------------------
  416.   # * Movimento do cursor para baixo
  417.   #     wrap : cursor retornar a primeira ou ultima posição
  418.   #--------------------------------------------------------------------------
  419.   def cursor_down(wrap = false)
  420.     super(true)
  421.   end
  422.   #--------------------------------------------------------------------------
  423.   # * Movimento do cursor para cima
  424.   #     wrap : cursor retornar a primeira ou ultima posição
  425.   #--------------------------------------------------------------------------
  426.   def cursor_up(wrap = false)
  427.     super(true)
  428.   end
  429.   #--------------------------------------------------------------------------
  430.   # * Movimento do cursor para direita
  431.   #     wrap : cursor retornar a primeira ou ultima posição
  432.   #--------------------------------------------------------------------------
  433.   def cursor_right(wrap = false)
  434.     cursor_down
  435.   end
  436.   #--------------------------------------------------------------------------
  437.   # * Movimento do cursor para esquerda
  438.   #     wrap : cursor retornar a primeira ou ultima posição
  439.   #--------------------------------------------------------------------------
  440.   def cursor_left(wrap = false)
  441.     cursor_up
  442.   end
  443. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement