Gelarto

Pour Mist

Aug 9th, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 55.72 KB | None | 0 0
  1. #==============================================================================
  2. # ** Victor Engine - Damage Popup
  3. #------------------------------------------------------------------------------
  4. # Author : Victor Sant
  5. #
  6. # Version History:
  7. #  v 1.00 - 2011.12.19 > First release
  8. #  v 1.01 - 2011.12.21 > Added bold and Italic options for text
  9. #  v 1.02 - 2011.12.30 > Faster Regular Expressions
  10. #  v 1.03 - 2012.01.18 > Added compatibility with Skip Battle Log
  11. #  v 1.04 - 2012.01.28 > Fixed zero damage displayed on status effect actions
  12. #                      > Fixed drain value not displayed
  13. #  v 1.05 - 2012.01.30 > Fixed debuff value not displayed
  14. #  v 1.06 - 2012.07.17 > Compatibility with Basic Module 1.24
  15. #                      > Individual duration for each pop up type
  16. #  v 1.07 - 2012.07.18 > Compatibility with Retaliation Damage
  17. #  v 1.08 - 2012.08.02 > Compatibility with Custom Slip Effect
  18. #  v 1.09 - 2012.08.18 > Compatibility with Custom Hit Formula
  19. #  v 1.10 - 2012.12.13 > Fixed issue with Multi Hits on Animated Battle
  20. #  v 1.11 - 2012.12.24 > Compatibility with Active Time Battle
  21. #                      > Compatibility with Retaliation Damage
  22. #  v 1.12 - 2012.12.30 > Compatibility with Leap Action
  23. #  v 1.13 - 2013.02.13 > Compatibility with Cooperation Skills
  24. #------------------------------------------------------------------------------
  25. #  This script adds an popup system to damage diplay. Allowing to view
  26. # the damage and states change with visible digits that pop from target.
  27. # It's possible an extensive edition of this display.
  28. #------------------------------------------------------------------------------
  29. # Compatibility
  30. #   Requires the script 'Victor Engine - Basic Module' v1.27 or higher
  31. #   If used with 'Victor Engine - Custom Slip Effect' place this bellow it.
  32. #   If used with 'Victor Engine - Custom Hit Formula' place this bellow it.
  33. #   If used with 'Victor Engine - Active Time Battle' place this bellow it.
  34. #   If used with 'Victor Engine - Retaliation Damage' place this bellow it.
  35. #   If used with 'Victor Engine - Animated Battle' place this bellow it.
  36. #   If used with 'Victor Engine - Element Set' place this bellow it.
  37. #
  38. # * Overwrite methods
  39. #   class Window_BattleLog < Window_Selectable
  40. #     def display_critical(target, item)
  41. #
  42. # * Alias methods
  43. #   class Game_ActionResult
  44. #     def clear_damage_values
  45. #
  46. #   class Game_Battler < Game_BattlerBase
  47. #     def item_element_rate
  48. #     def regenerate_hp
  49. #     def regenerate_mp
  50. #     def regenerate_tp
  51. #     def item_apply(user, item)
  52. #     def execute_damage(user)
  53. #     def remove_states_auto(timing)
  54. #
  55. #   class Sprite_Battler
  56. #     def initialize(viewport, battler = nil)
  57. #     def update_effect
  58. #     def dispose
  59. #
  60. #   class Scene_Battle < Scene_Base
  61. #     def invoke_counter_attack(target, item)
  62. #     def invoke_magic_reflection(target, item)
  63. #     def apply_substitute
  64. #
  65. #------------------------------------------------------------------------------
  66. # Instructions:
  67. #  To instal the script, open you script editor and paste this script on
  68. #  a new section bellow the Materials section. This script must also
  69. #  be bellow the script 'Victor Engine - Basic'
  70. #
  71. #------------------------------------------------------------------------------
  72. # States note tags
  73. #   Tags to be used on the States note box in the database
  74. #  
  75. #  <no display add>
  76. #  <no display remove>
  77. #   This allows to hide the state popup display.
  78. #
  79. #  <damage behavior: x>
  80. #   This tag change the behavior of the damage display of the state,
  81. #   x must be a text with the name of the new behavior, the new behavior
  82. #   must be set previously on the settings module
  83. #    
  84. #  <add color: r, g, b>
  85. #   This will change the color of the text when inflicting a state.
  86. #     r : red   (0-255)
  87. #     g : green (0-255)
  88. #     b : blue  (0-255)
  89. #
  90. #  <remove color: r, g, b>
  91. #   This will change the color of the text when losing a state.
  92. #     r : red   (0-255)
  93. #     g : green (0-255)
  94. #     b : blue  (0-255)
  95. #
  96. #------------------------------------------------------------------------------
  97. # Skills and Items note tags
  98. #   Tags to be used on the Skills and Items note box in the database
  99. #
  100. #  <damage behavior: x>
  101. #   This will change the behavior of the damage display of the action,
  102. #   x must be a text with the name of the new behavior, the new behavior
  103. #   must be set previously on the settings module
  104. #
  105. #------------------------------------------------------------------------------
  106. # Additional instructions:
  107. #
  108. #  Custom display behaviors must be set on the following constant of the
  109. #  settings module, otherwise it will return erros:
  110. #    - VE_DAMAGE_TEXTS (if VE_DAMAGE_DISPLAY = :text)
  111. #    - VE_DAMAGE_IMGS  (if VE_DAMAGE_DISPLAY = :image)
  112. #    - VE_DAMAGE_MOVE
  113. #
  114. #==============================================================================
  115.  
  116. #==============================================================================
  117. # ** Victor Engine
  118. #------------------------------------------------------------------------------
  119. #   Setting module for the Victor Engine
  120. #==============================================================================
  121.  
  122. module Victor_Engine  
  123.   #--------------------------------------------------------------------------
  124.   # * Deteremine the damage display
  125.   #    It's posssible to choose between texts drawn by the RPG Maker
  126.   #    (draw_text) or specific images
  127.   #    :text  : display by text, the settings are done on Damage_Text.
  128.   #    :image : display by image, the settings are done on Damage_Images.
  129.   #      It's needed to create a new folder on 'Graphics' folder named 'Digits'
  130.   #--------------------------------------------------------------------------
  131.   VE_DAMAGE_DISPLAY = :text
  132.   #--------------------------------------------------------------------------
  133.   # * Set popup custom text constants
  134.   #--------------------------------------------------------------------------
  135.   VE_HP_DAMAGE    = "%s"       # HP damage text   (use %s to show the value)
  136.   VE_MP_DAMAGE    = "%s"       # MP damage text   (use %s to show the value)
  137.   VE_TP_DAMAGE    = "%s"       # TP damage text   (use %s to show the value)
  138.   VE_HP_RECOVER   = "%s"       # HP recovery text (use %s to show the value)
  139.   VE_MP_RECOVER   = "%s"       # MP recovery text (use %s to show the value)
  140.   VE_TP_RECOVER   = "%s"       # TP recovery text (use %s to show the value)
  141.   VE_MISS_TEXT    = "Raté"     # Miss text
  142.   VE_EVADE_TEXT   = "Esquive"  # Evade text
  143.   VE_CRT_TEXT     = "Critique" # Critical text   (only if CTR_POP = true)
  144.   VE_WEAK_TEXT    = "Faible"   # Weakness text   (only if RESIST_POP = true)
  145.   VE_RESIST_TEXT  = "Résiste"  # Resistance text (only if RESIST_POP = true)
  146.   VE_IMUNE_TEXT   = "Imunisé"  # Imune text      (only if RESIST_POP = true)
  147.   VE_ABSORB_TEXT  = "Absorbe"  # Absorb text     (only if RESIST_POP = true)
  148.   VE_COUNTER_TEXT = "Contre"   # Counter attack text
  149.   VE_REFLECT_TEXT = "Miroir"  # Reflect magic text
  150.   VE_COVER_TEXT   = "Couvre"   # Cover text
  151.   VE_STATE_ADD    = "+%s"      # Add state text    (use %s to show state name)
  152.   VE_STATE_REMOVE = "-%s"      # Remove state text (use %s to show state name)
  153.   VE_BUFF_ADD     = "%s +1"    # Buff text   (use %s to show status name)
  154.   VE_DEBUFF_ADD   = "%s -1"    # DeBuff text (use %s to show status name)
  155.   VE_BUFF_RMV     = "%s "      # Clear buff text (use %s to show status name)
  156.   #--------------------------------------------------------------------------
  157.   # * Set popup boleans constants (true/false)
  158.   #    The critical text (VE_CRT_POP) and resistance texts (VE_RESIST_POP)
  159.   #    don't have the multi pop effect (VE_MULTI_POP), so it's advised to
  160.   #    not use these options activated toghter.
  161.   #--------------------------------------------------------------------------
  162.   VE_DIGIT_ROLL  = false # Digit roll during the start of display
  163.   VE_FAST_ROLL   = false # Fast digit roll (may cause lag)
  164.   VE_DIGIT_EACH  = false # Digits shown in sequence
  165.   VE_MULTI_POP   = false # Digits with delay
  166.   VE_COUNTER_POP = true  # Show counter popup message
  167.   VE_REFLECT_POP = true  # Show reflect popup message
  168.   VE_COVER_POP   = true  # Show covered popup message
  169.   VE_CRT_FLASH   = true  # Flash effect for critical damage
  170.   VE_CRT_POP     = true  # Show critical text with critical damage
  171.   VE_RESIST_POP  = true  # Show resist text with normal damage
  172.   VE_HEIGHT_ADJ  = true  # Adjust position based on target graphic height
  173.   VE_AUTO_ADJ    = true  # Adjust height if there is various damage diplays
  174.   #--------------------------------------------------------------------------
  175.   # * Set popup numeric values constants
  176.   #--------------------------------------------------------------------------
  177.   VE_DIGIT_SPACE = 0  # Space between the digits on the display
  178.   #--------------------------------------------------------------------------
  179.   # * Set values for text damage display (VE_DAMAGE_DISPLAY = :text)
  180.   #--------------------------------------------------------------------------
  181.   VE_DAMAGE_TEXTS = {
  182.     # Type      [ Red, Green, Blue, Size, Wait, Bold, Italic, Font],
  183.     default:    [ 255,   255,  255,   32,   50, true,  false, Font.default_name],
  184.     hp_damage:  [ 255,   255,  255,   32,   50, true,  false, Font.default_name],
  185.     mp_damage:  [ 128,    96,  255,   32,   50, true,  false, Font.default_name],
  186.     tp_damage:  [  96,   192,   96,   32,   50, true,  false, Font.default_name],
  187.     hp_recover: [ 160,   255,  128,   32,   50, true,  false, Font.default_name],
  188.     mp_recover: [ 255,   128,  255,   32,   50, true,  false, Font.default_name],
  189.     tp_recover: [ 128,   255,  224,   32,   50, true,  false, Font.default_name],
  190.     miss_text:  [ 160,   160,  160,   32,   50, true,  false, Font.default_name],
  191.     eva_text:   [ 160,   160,  160,   32,   50, true,  false, Font.default_name],
  192.     crt_damage: [ 255,    96,    0,   36,   50, true,  false, Font.default_name],
  193.     crt_text:   [ 255,   128,   96,   22,   50, true,  false, Font.default_name],
  194.     weakness:   [ 255,   128,  128,   22,   50, true,  false, Font.default_name],
  195.     resist:     [ 128,   255,  255,   22,   50, true,  false, Font.default_name],
  196.     imune:      [ 160,   160,  160,   22,   50, true,  false, Font.default_name],
  197.     absorb:     [ 128,   255,  128,   22,   50, true,  false, Font.default_name],
  198.     counter:    [ 255,   192,  128,   22,   50, true,  false, Font.default_name],
  199.     reflect:    [ 128,   192,  255,   22,   50, true,  false, Font.default_name],
  200.     covered:    [ 192,   255,  128,   22,   50, true,  false, Font.default_name],
  201.     state_add:  [ 255,   255,  128,   22,   50, true,  false, Font.default_name],
  202.     state_rmv:  [ 128,   255,  255,   22,   50, true,  false, Font.default_name],
  203.     buff_add:   [ 255,   255,  128,   22,   50, true,  false, Font.default_name],
  204.     debuff_add: [ 255,   128,  128,   22,   50, true,  false, Font.default_name],
  205.     buff_rmv:   [ 128,   255,  255,   22,   50, true,  false, Font.default_name],
  206.   } # Don't remove
  207.   #--------------------------------------------------------------------------
  208.   # * Set values for text damage display (VE_DAMAGE_DISPLAY = :image)
  209.   #    For critical text (:crt_text), resists (:weakness, :resist, imune,
  210.   #    :absorb) and state change (:state_add, :state_rmv, :buff_add, )
  211.   #    and , use a single image for the whole text, for the others (including
  212.   #    miss and evade text), use a singe image for each digit.
  213.   #--------------------------------------------------------------------------
  214.   VE_DAMAGE_IMGS = {
  215.    #type:       [Wait, "sufix"],
  216.     default:    [  50, ""],        # Default text
  217.     hp_damage:  [  50, ""],        # HP damage
  218.     sp_damage:  [  50, "_mp"],     # MP damage
  219.     tp_damage:  [  50, "_tp"],     # TP damage
  220.     hp_recover: [  50, "_heal"],   # HP recover
  221.     sp_recover: [  50, "_mpheal"], # MP recover
  222.     tp_recover: [  50, "_tpheal"], # TP recover
  223.     miss_text:  [  50, "_miss"],   # Miss text
  224.     eva_text:   [  50, "_evade"],  # Evade text
  225.     crt_damage: [  50, "_crtdmg"], # Critical damage
  226.     crt_text:   [  50, "_crttxt"], # Critical text
  227.     weakness:   [  50, "_weak"],   # Weakness text
  228.     resist:     [  50, "_resist"], # Resist text
  229.     imune:      [  50, "_imune"],  # Imune text
  230.     absorb:     [  50, "_absorb"], # Absorb text
  231.     counter:    [  50, "_cntr"],   # Counter text
  232.     reflect:    [  50, "_rflct"],  # Reflection text
  233.     covered:    [  50, "_cover"],  # Cover text
  234.     state_add:  [  50, "_addst"],  # State add text
  235.     state_rmv:  [  50, "_rmvst"],  # State remove text
  236.     buff_add:   [  50, "_addbf"],  # Buff text
  237.     debuff_add: [  50, "_adddbf"], # Debuff text
  238.     buff_rmv:   [  50, "_rmvbf"],  # Clear buff text
  239.   } # Don't remove
  240.   #--------------------------------------------------------------------------
  241.   # * Set damage display behavior
  242.   #    The damage display have 3 phases: Start, Middle and End.
  243.   #    It's possible to set diffent behaviors for each of these phases
  244.   #    The behaviors are set on the VE_POP_BEHAVIOR constant bellow
  245.   #--------------------------------------------------------------------------
  246.   VE_DAMAGE_MOVE = {
  247.    #type:       [  Start, Middle,    Fim],
  248.     default:    [  :wait,  :wait,  :wait], # Default text
  249.     hp_damage:  [  :pop1,  :pop2,  :wait], # HP damage
  250.     mp_damage:  [  :pop1,  :pop2,  :wait], # MP damage
  251.     tp_damage:  [  :pop1,  :pop2,  :wait], # TP damage
  252.     hp_recover: [ :zoom1,    :up,    :up], # HP recover
  253.     mp_recover: [  :up_l,  :up_r,  :up_l], # MP recover
  254.     tp_recover: [  :up_l,  :up_r,  :up_l], # TP recover
  255.     miss_text:  [  :wait,  :wait,  :wait], # Miss text
  256.     eva_text:   [  :wait,  :wait,  :wait], # Evade text
  257.     crt_damage: [ :zoom1,  :wait, :rise1], # Critical damage
  258.     crt_text:   [ :zoom2,  :wait, :rise2], # Critical text
  259.     weakness:   [ :above,  :pop2,  :wait], # Weakness text
  260.     resist:     [ :above,  :pop2,  :wait], # Resist text
  261.     imune:      [ :above,  :pop2,  :wait], # Imune text
  262.     absorb:     [ :zoom2,    :up,    :up], # Absorb text
  263.     counter:    [    :up,  :wait,  :wait], # Counter text
  264.     reflect:    [    :up,  :wait,  :wait], # Reflection text
  265.     covered:    [    :up,  :wait,  :wait], # Cover text
  266.     state_add:  [  :wait,  :wait,  :wait], # State add text
  267.     state_rmv:  [  :wait,  :wait,  :wait], # State remove text
  268.     buff_add:   [  :wait,  :wait,  :wait], # Buff add text
  269.     debuff_add: [  :wait,  :wait,  :wait], # Debuff add text
  270.     buff_rmv:   [  :wait,  :wait,  :wait], # Clear buff add text
  271.   } # Don't remove
  272.   #--------------------------------------------------------------------------
  273.   # * Set the damage pop behavior for each phase
  274.   #    ZoomX  : vertical zoom
  275.   #    ZoomY  : horizontal zoom
  276.   #    StartX : initial coordinate X (valid only for the Start phase)
  277.   #    StartY : initial coordinate Y (valid only for the Start phase)
  278.   #    MoveX  : horizontal movment
  279.   #    MoveY  : vertical movement
  280.   #    Gravt  : gravity effect (makes the damage "jumps")
  281.   #    Random : random horizontal movement
  282.   #--------------------------------------------------------------------------
  283.   VE_POP_BEHAVIOR = {
  284.    #type:  [ZoomX, ZoomY, StartX, StartY, MoveX, MoveY, Gravt, Random],
  285.     wait:  [  1.0,   1.0,    0.0,    0.0,   0.0,   0.0,   0.0,  false],
  286.     zoom1: [  2.0,   2.0,    0.0,    0.0,   0.0,   0.0,   0.0,  false],
  287.     zoom2: [  2.0,   2.0,    0.0,   -8.0,   0.0,   0.0,   0.0,  false],
  288.     rise1: [  1.0,   3.0,    0.0,    0.0,   0.0,  -2.0,   0.0,  false],
  289.     rise2: [  1.0,   3.0,    0.0,    0.0,   0.0,  -5.0,   0.0,  false],
  290.     up:    [  1.0,   1.0,    0.0,    0.0,   0.0,  -3.0,   0.0,  false],
  291.     pop1:  [  1.0,   1.0,    0.0,    0.0,   0.0,   1.0,   4.0,  false],
  292.     pop2:  [  1.0,   1.0,    0.0,    0.0,   0.0,   0.5,   2.0,  false],
  293.     above: [  1.0,   1.0,    0.0,   -8.0,   0.0,   1.0,   4.0,  false],
  294.     up_r:  [  1.0,   1.0,    0.0,    0.0,   1.0,  -1.0,   0.0,  false],
  295.     up_l:  [  1.0,   1.0,    0.0,    0.0,  -1.0,  -1.0,   0.0,  false],
  296.   } # Don't remove
  297.   #--------------------------------------------------------------------------
  298.   # * required
  299.   #   This method checks for the existance of the basic module and other
  300.   #   VE scripts required for this script to work, don't edit this
  301.   #--------------------------------------------------------------------------
  302.   def self.required(name, req, version, type = nil)
  303.     if !$imported[:ve_basic_module]
  304.       msg = "The script '%s' requires the script\n"
  305.       msg += "'VE - Basic Module' v%s or higher above it to work properly\n"
  306.       msg += "Go to http://victorscripts.wordpress.com/ to download this script."
  307.       msgbox(sprintf(msg, self.script_name(name), version))
  308.       exit
  309.     else
  310.       self.required_script(name, req, version, type)
  311.     end
  312.   end
  313.   #--------------------------------------------------------------------------
  314.   # * script_name
  315.   #   Get the script name base on the imported value, don't edit this
  316.   #--------------------------------------------------------------------------
  317.   def self.script_name(name, ext = "VE")
  318.     name = name.to_s.gsub("_", " ").upcase.split
  319.     name.collect! {|char| char == ext ? "#{char} -" : char.capitalize }
  320.     name.join(" ")
  321.   end
  322. end
  323.  
  324. $imported ||= {}
  325. $imported[:ve_damage_pop] = 1.13
  326. Victor_Engine.required(:ve_damage_pop, :ve_basic_module, 1.27, :above)
  327.  
  328. #==============================================================================
  329. # ** Cache
  330. #------------------------------------------------------------------------------
  331. #  This module loads each of graphics, creates a Bitmap object, and retains it.
  332. # To speed up load times and conserve memory, this module holds the created
  333. # Bitmap object in the internal hash, allowing the program to return
  334. # preexisting objects when the same bitmap is requested again.
  335. #==============================================================================
  336.  
  337. module Cache
  338.   #--------------------------------------------------------------------------
  339.   # * New method: digits
  340.   #--------------------------------------------------------------------------
  341.   def self.digits(filename)
  342.     load_bitmap("Graphics/Digits/", filename)
  343.   end
  344. end
  345.  
  346. #==============================================================================
  347. # ** Game_Action
  348. #------------------------------------------------------------------------------
  349. #  This class handles battle actions. This class is used within the
  350. # Game_Battler class.
  351. #==============================================================================
  352.  
  353. class Game_Action
  354.   #--------------------------------------------------------------------------
  355.   # * Alias method: evaluate_item_with_target
  356.   #--------------------------------------------------------------------------
  357.   alias :evaluate_item_with_target_ve_damage_pop :evaluate_item_with_target
  358.   def evaluate_item_with_target(target)
  359.     result = evaluate_item_with_target_ve_damage_pop(target)
  360.     target.result.clear
  361.     result
  362.   end
  363. end
  364.  
  365. #==============================================================================
  366. # ** Game_ActionResult
  367. #------------------------------------------------------------------------------
  368. #  This class handles the results of actions. This class is used within the
  369. # Game_Battler class.
  370. #==============================================================================
  371.  
  372. class Game_ActionResult
  373.   #--------------------------------------------------------------------------
  374.   # * Public Instance Variables
  375.   #--------------------------------------------------------------------------
  376.   attr_accessor :resist
  377.   attr_accessor :tp_drain
  378.   #--------------------------------------------------------------------------
  379.   # * Alias method: clear_damage_values
  380.   #--------------------------------------------------------------------------
  381.   alias :clear_damage_values_ve_damage_pop :clear_damage_values
  382.   def clear_damage_values
  383.     clear_damage_values_ve_damage_pop
  384.     @resist   = 1.0
  385.     @tp_drain = 0
  386.   end
  387. end
  388.  
  389. #==============================================================================
  390. # ** Game_Battler
  391. #------------------------------------------------------------------------------
  392. #  This class deals with battlers. It's used as a superclass of the Game_Actor
  393. # and Game_Enemy classes.
  394. #==============================================================================
  395.  
  396. class Game_Battler < Game_BattlerBase
  397.   #--------------------------------------------------------------------------
  398.   # * Public Instance Variables
  399.   #--------------------------------------------------------------------------
  400.   attr_accessor :damaged
  401.   attr_accessor :counter
  402.   attr_accessor :reflect
  403.   attr_accessor :covered
  404.   attr_accessor :missed
  405.   attr_accessor :no_dmg
  406.   #--------------------------------------------------------------------------
  407.   # * Alias method: item_element_rate
  408.   #--------------------------------------------------------------------------
  409.   alias :item_element_rate_ve_damage_pop :item_element_rate
  410.   def item_element_rate(user, item)
  411.     result = item_element_rate_ve_damage_pop(user, item)
  412.     @result.resist = result
  413.     result
  414.   end
  415.   #--------------------------------------------------------------------------
  416.   # * Alias method: item_apply
  417.   #--------------------------------------------------------------------------
  418.   alias :item_apply_ve_damage_pop :item_apply
  419.   def item_apply(user, item)
  420.     item_apply_ve_damage_pop(user, item)
  421.     @damaged = ($game_party.in_battle && @result.hit?)
  422.     @missed  = ($game_party.in_battle && alive? && !@result.hit?)
  423.     @no_dmg  = item.damage.none?
  424.     sprite.set_damage if sprite && (self.damaged || self.missed)
  425.   end
  426.   #--------------------------------------------------------------------------
  427.   # * Alias method: regenerate_hp
  428.   #--------------------------------------------------------------------------
  429.   alias :regenerate_hp_ve_damage_pop :regenerate_hp
  430.   def regenerate_hp
  431.     regenerate_hp_ve_damage_pop
  432.     @damaged |= $game_party.in_battle && damaged?
  433.   end
  434.   #--------------------------------------------------------------------------
  435.   # * Alias method: regenerate_mp
  436.   #--------------------------------------------------------------------------
  437.   alias :regenerate_mp_ve_damage_pop :regenerate_mp
  438.   def regenerate_mp
  439.     regenerate_mp_ve_damage_pop
  440.     @damaged |= $game_party.in_battle && damaged?
  441.   end
  442.   #--------------------------------------------------------------------------
  443.   # * Alias method: regenerate_tp
  444.   #--------------------------------------------------------------------------
  445.   alias :regenerate_tp_ve_damage_pop :regenerate_tp
  446.   def regenerate_tp
  447.     regenerate_tp_ve_damage_pop
  448.     @result.tp_damage = -mtp * trg unless $imported[:ve_custom_slip_effect]
  449.     @damaged |= $game_party.in_battle && damaged?
  450.   end
  451.   #--------------------------------------------------------------------------
  452.   # * Alias method: execute_damage
  453.   #--------------------------------------------------------------------------
  454.   alias :execute_damage_tp_ve_damage_pop :execute_damage
  455.   def execute_damage(user)
  456.     execute_damage_tp_ve_damage_pop(user)
  457.     if @result.hp_drain != 0 || @result.mp_drain != 0
  458.       user.damaged = true
  459.       user.result.hp_damage = -@result.hp_drain
  460.       user.result.mp_damage = -@result.mp_drain
  461.     end
  462.   end
  463.   #--------------------------------------------------------------------------
  464.   # * Alias method: remove_states_auto
  465.   #--------------------------------------------------------------------------
  466.   alias :remove_states_auto_ve_damage_pop :remove_states_auto
  467.   def remove_states_auto(timing)
  468.     old_states = states.dup
  469.     remove_states_auto_ve_damage_pop(timing)
  470.     @damaged |= $game_party.in_battle && old_states != states.dup
  471.     @no_dmg   = @result.hp_damage == 0 || @result.mp_drain == 0
  472.   end
  473.   #--------------------------------------------------------------------------
  474.   # * New method: remove_timing_states
  475.   #--------------------------------------------------------------------------
  476.   alias :remove_timing_states_ve_damage_pop :remove_timing_states if $imported[:ve_active_time_battle]
  477.   def remove_timing_states
  478.     old_states = states.dup
  479.     remove_timing_states_ve_damage_pop
  480.     @damaged |= $game_party.in_battle && old_states != states.dup
  481.     @no_dmg   = @result.hp_damage == 0 || @result.mp_drain == 0
  482.   end
  483.   #--------------------------------------------------------------------------
  484.   # * Alias method: regenerate_all
  485.   #--------------------------------------------------------------------------
  486.   alias :regenerate_all_ve_damage_pop :regenerate_all
  487.   def regenerate_all
  488.     regenerate_all_ve_damage_pop
  489.     sprite.set_damage if sprite && (self.damaged || self.missed)
  490.   end
  491.   #--------------------------------------------------------------------------
  492.   # * New method: clear_damage_flags
  493.   #--------------------------------------------------------------------------
  494.   def clear_damage_flags
  495.     @result.clear
  496.     @damaged = false
  497.     @counter = false
  498.     @reflect = false
  499.     @covered = false
  500.     @missed  = false
  501.     @no_dmg  = false
  502.   end
  503. end
  504.  
  505. #==============================================================================
  506. # ** Sprite_Battler
  507. #------------------------------------------------------------------------------
  508. #  This sprite is used to display battlers. It observes a instance of the
  509. # Game_Battler class and automatically changes sprite conditions.
  510. #==============================================================================
  511.  
  512. class Sprite_Battler < Sprite_Base
  513.   #--------------------------------------------------------------------------
  514.   # * Alias method: initialize
  515.   #--------------------------------------------------------------------------
  516.   alias :initialize_ve_damage_pop :initialize
  517.   def initialize(viewport, battler = nil)
  518.     initialize_ve_damage_pop(viewport, battler)
  519.     @damage_sprite = Game_Damage.new(viewport, @battler, self)
  520.   end
  521.   #--------------------------------------------------------------------------
  522.   # * Alias method: initialize
  523.   #--------------------------------------------------------------------------
  524.   alias :update_effect_ve_damage_pop :update_effect
  525.   def update_effect
  526.     update_effect_ve_damage_pop
  527.     set_damage if @battler.damaged || @battler.missed
  528.     @damage_sprite.update
  529.   end
  530.   #--------------------------------------------------------------------------
  531.   # * Alias method: dispose
  532.   #--------------------------------------------------------------------------
  533.   alias :dispose_ve_damage_pop :dispose
  534.   def dispose
  535.     dispose_ve_damage_pop
  536.     @damage_sprite.dispose
  537.   end
  538.   #--------------------------------------------------------------------------
  539.   # * New method: set_damage
  540.   #--------------------------------------------------------------------------
  541.   def set_damage
  542.     @damage_sprite.set_damage(@battler) if @battler && @battler.use_sprite?
  543.     @battler.clear_damage_flags
  544.   end
  545. end
  546.  
  547. #==============================================================================
  548. # ** Window_BattleLog
  549. #------------------------------------------------------------------------------
  550. #  This window shows the battle progress. Do not show the window frame.
  551. #==============================================================================
  552.  
  553. class Window_BattleLog < Window_Selectable
  554.   #--------------------------------------------------------------------------
  555.   # * Overwrite method: display_critical
  556.   #--------------------------------------------------------------------------
  557.   def display_critical(target, item)
  558.     if target.result.critical
  559.       color = [255, 255, 255, 192] if VE_CRT_FLASH
  560.       $game_troop.screen.start_flash(Color.new(*color), 10) if VE_CRT_FLASH
  561.       text = target.actor? ? Vocab::CriticalToActor : Vocab::CriticalToEnemy
  562.       add_text(text) unless $imported[:ve_skip_log] && !VE_CRITICAL_MESSAGE
  563.     end
  564.   end  
  565. end
  566.  
  567. #==============================================================================
  568. # ** Scene_Battle
  569. #------------------------------------------------------------------------------
  570. #  This class performs battle screen processing.
  571. #==============================================================================
  572.  
  573. class Scene_Battle < Scene_Base
  574.   #--------------------------------------------------------------------------
  575.   # * Alias method: invoke_counter_attack
  576.   #--------------------------------------------------------------------------
  577.   alias :invoke_counter_attack_ve_damage_pop :invoke_counter_attack
  578.   def invoke_counter_attack(target, item)
  579.     target.counter = true if VE_COUNTER_POP && counter_pop_up?(target, item)
  580.     target.damaged = true if VE_COUNTER_POP && counter_pop_up?(target, item)
  581.     invoke_counter_attack_ve_damage_pop(target, item)
  582.   end
  583.   #--------------------------------------------------------------------------
  584.   # * Alias method: invoke_magic_reflection
  585.   #--------------------------------------------------------------------------
  586.   alias :invoke_magic_reflection_ve_damage_pop :invoke_magic_reflection
  587.   def invoke_magic_reflection(target, item)
  588.     target.reflect = true if VE_REFLECT_POP && reflect_pop_up?(target, item)
  589.     target.damaged = true if VE_REFLECT_POP && reflect_pop_up?(target, item)
  590.     invoke_magic_reflection_ve_damage_pop(target, item)
  591.   end
  592.   #--------------------------------------------------------------------------
  593.   # * Alias method: apply_substitute
  594.   #--------------------------------------------------------------------------
  595.   alias :apply_substitute_ve_damage_pop :apply_substitute
  596.   def apply_substitute(target, item)
  597.     new_target = apply_substitute_ve_damage_pop(target, item)
  598.     target.covered = true if new_target != target && VE_COVER_POP
  599.     target.damaged = true if new_target != target && VE_COVER_POP
  600.     new_target
  601.   end
  602.   #--------------------------------------------------------------------------
  603.   # * New method: counter_pop_up?
  604.   #--------------------------------------------------------------------------
  605.   def counter_pop_up?(target, item)
  606.     !$imported[:ve_retaliation_damage] || !damage_on_counter?(target, item)
  607.   end
  608.   #--------------------------------------------------------------------------
  609.   # * New method: reflect_pop_up?
  610.   #--------------------------------------------------------------------------
  611.   def reflect_pop_up?(target, item)
  612.     !$imported[:ve_retaliation_damage] || !damage_on_reflect?(target, item)
  613.   end
  614. end
  615.  
  616. #==============================================================================
  617. # ** Game_Damage
  618. #------------------------------------------------------------------------------
  619. #  This class handles the damage display. This class is used within the
  620. # Sprite_Battler.
  621. #==============================================================================
  622.  
  623. class Game_Damage
  624.   #--------------------------------------------------------------------------
  625.   # * New method: initialize
  626.   #--------------------------------------------------------------------------
  627.   def initialize(viewport, battler, sprite)
  628.     @x   = 0
  629.     @y   = 0
  630.     @exw = 0
  631.     @viewport = viewport
  632.     @battler  = battler
  633.     @sprite   = sprite
  634.     @damage_sprites = []
  635.   end
  636.   #--------------------------------------------------------------------------
  637.   # * New method: results
  638.   #--------------------------------------------------------------------------
  639.   def result
  640.     @battler.result
  641.   end
  642.   #--------------------------------------------------------------------------
  643.   # * New method: hp_damage
  644.   #--------------------------------------------------------------------------
  645.   def hp_damage
  646.     result.hp_damage.abs
  647.   end
  648.   #--------------------------------------------------------------------------
  649.   # * New method: mp_damage
  650.   #--------------------------------------------------------------------------
  651.   def mp_damage
  652.     result.mp_damage.abs
  653.   end
  654.   #--------------------------------------------------------------------------
  655.   # * New method: tp_damage
  656.   #--------------------------------------------------------------------------
  657.   def tp_damage
  658.     result.tp_damage.abs
  659.   end
  660.   #--------------------------------------------------------------------------
  661.   # * New method: set_damage
  662.   #--------------------------------------------------------------------------
  663.   def set_damage(battler)
  664.     @battler  = battler
  665.     @dmg_text = damage_value.to_s
  666.     @dmg_type = damage_type
  667.     create_damage_sprites
  668.   end
  669.   #--------------------------------------------------------------------------
  670.   # * New method: damage_value
  671.   #--------------------------------------------------------------------------
  672.   def damage_value
  673.     return VE_COUNTER_TEXT if @battler.counter
  674.     return VE_REFLECT_TEXT if @battler.reflect
  675.     return VE_COVER_TEXT   if @battler.covered
  676.     return sprintf(VE_HP_DAMAGE,  hp_damage) if result.hp_damage > 0
  677.     return sprintf(VE_MP_DAMAGE,  mp_damage) if result.mp_damage > 0
  678.     return sprintf(VE_TP_DAMAGE,  tp_damage) if result.tp_damage > 0
  679.     return sprintf(VE_HP_RECOVER, hp_damage) if result.hp_damage < 0
  680.     return sprintf(VE_MP_RECOVER, mp_damage) if result.mp_damage < 0
  681.     return sprintf(VE_TP_RECOVER, tp_damage) if result.tp_damage < 0
  682.     return VE_MISS_TEXT    if result.missed
  683.     return VE_EVADE_TEXT   if result.evaded
  684.     return "" if @battler.no_dmg
  685.     return 0  
  686.   end
  687.   #--------------------------------------------------------------------------
  688.   # * New method: damage_type
  689.   #--------------------------------------------------------------------------
  690.   def damage_type
  691.     return :counter    if @battler.counter
  692.     return :reflect    if @battler.reflect
  693.     return :covered    if @battler.covered
  694.     return custom_type if custom_type
  695.     return :crt_damage if result.hp_damage > 0 && result.critical
  696.     return :hp_damage  if result.hp_damage > 0
  697.     return :mp_damage  if result.mp_damage > 0
  698.     return :tp_damage  if result.tp_damage > 0
  699.     return :hp_recover if result.hp_damage < 0
  700.     return :mp_recover if result.mp_damage < 0
  701.     return :tp_recover if result.tp_damage < 0
  702.     return :miss_text  if result.missed
  703.     return :eva_text   if result.evaded
  704.     return :default
  705.   end
  706.   #--------------------------------------------------------------------------
  707.   # * New method: custom_type
  708.   #--------------------------------------------------------------------------
  709.   def custom_type
  710.     return nil unless @battler.current_action
  711.     return nil unless @battler.current_action.item
  712.     note = @battler.current_action.item.note
  713.     type = nil
  714.     type = eval(":#{$1}") if note =~ /<DAMAGE BEHAVIOR: ([^>< ]*)>/i
  715.     type
  716.   end
  717.   #--------------------------------------------------------------------------
  718.   # * New method: create_damage_sprites
  719.   #--------------------------------------------------------------------------
  720.   def create_damage_sprites
  721.     @damage_sprites.compact!
  722.     set_normal_damage
  723.     set_critical if result.critical      && VE_CRT_POP
  724.     set_resist   if result.resist != 1.0 && VE_RESIST_POP
  725.     set_states
  726.   end
  727.   #--------------------------------------------------------------------------
  728.   # * New method: state_change
  729.   #--------------------------------------------------------------------------
  730.   def state_change
  731.     (result.added_states + result.removed_states + result.added_buffs +
  732.      result.removed_buffs)
  733.   end
  734.   #--------------------------------------------------------------------------
  735.   # * New method: state_changed?
  736.   #--------------------------------------------------------------------------
  737.   def state_changed?
  738.     !state_change.empty?
  739.   end
  740.   #--------------------------------------------------------------------------
  741.   # * New method: set_normal_damage
  742.   #--------------------------------------------------------------------------
  743.   def set_normal_damage
  744.     @rnd = 2.0 - (rand(400) / 100.0)
  745.     @exw = 0
  746.     set  = []
  747.     n    = damage_value.numeric?
  748.     @dmg_text.size.times {|i| set.push(set_sprite(@dmg_text, @dmg_type, i, n)) }
  749.     set.each {|sprite| sprite.plus = @exw }
  750.     @damage_sprites.push(set)
  751.     @exw = @rnd = 0
  752.   end
  753.   #--------------------------------------------------------------------------
  754.   # * New method: set_critical
  755.   #--------------------------------------------------------------------------
  756.   def set_critical
  757.     set = [set_sprite(VE_CRT_TEXT, :crt_text, -1)]
  758.     set.each {|sprite| sprite.set_position }
  759.     @damage_sprites.push(set)
  760.   end
  761.   #--------------------------------------------------------------------------
  762.   # * New method: set_resist
  763.   #--------------------------------------------------------------------------
  764.   def set_resist
  765.     set = [set_sprite(get_resist_text, get_resist_value, -1)]
  766.     set.each {|sprite| sprite.set_position }
  767.     @damage_sprites.push(set)
  768.   end
  769.   #--------------------------------------------------------------------------
  770.   # * New method: set_states
  771.   #--------------------------------------------------------------------------
  772.   def set_states
  773.     set_state_sprite(result.added_states,   :state_add)
  774.     set_state_sprite(result.removed_states, :state_rmv)
  775.     set_buff_sprite(result.added_buffs,     :buff_add)
  776.     set_buff_sprite(result.added_debuffs,   :debuff_add)
  777.     set_buff_sprite(result.removed_buffs,   :buff_rmv)
  778.   end
  779.   #--------------------------------------------------------------------------
  780.   # * New method: set_other
  781.   #--------------------------------------------------------------------------
  782.   def set_other
  783.     set = [set_sprite(VE_COUNTER_TEXT, :counter, -1)] if @battler.counter
  784.     set = [set_sprite(VE_REFLECT_TEXT, :reflect, -1)] if @battler.reflect
  785.     set = [set_sprite(VE_COVER_TEXT,   :covered, -1)] if @battler.covered
  786.     set.each {|sprite| sprite.set_position }
  787.     @damage_sprites.push(set)
  788.   end
  789.   #--------------------------------------------------------------------------
  790.   # * New method: set_sprite
  791.   #--------------------------------------------------------------------------
  792.   def set_sprite(text, type, index = 0, num = false, state = nil)
  793.     x = @sprite.x
  794.     y = @sprite.y - (VE_HEIGHT_ADJ ? @sprite.center_y : 64)
  795.     size = @damage_sprites.size
  796.     info = {i: index, text: text, type: type, x: x, y: y, size: size, num: num}
  797.     sprite = Sprite_Damage.new(@viewport, @battler, @exw, @rnd, state, info)
  798.     @exw += sprite.space unless index < 0
  799.     sprite
  800.   end
  801.   #--------------------------------------------------------------------------
  802.   # * New method: get_resist_text
  803.   #--------------------------------------------------------------------------
  804.   def get_resist_text
  805.     return VE_WEAK_TEXT   if result.resist  > 1.0
  806.     return VE_RESIST_TEXT if result.resist  < 1.0 && result.resist > 0.0
  807.     return VE_IMUNE_TEXT  if result.resist == 0.0
  808.     return VE_ABSORB_TEXT if result.resist  < 0.0
  809.     return ""
  810.   end
  811.   #--------------------------------------------------------------------------
  812.   # * New method: get_resist_value
  813.   #--------------------------------------------------------------------------
  814.   def get_resist_value
  815.     return :weakness if result.resist  > 1.0
  816.     return :resist   if result.resist  < 1.0 && result.resist > 0.0
  817.     return :imune    if result.resist == 0.0
  818.     return :absorb   if result.resist  < 0.0
  819.     return nil
  820.   end
  821.   #--------------------------------------------------------------------------
  822.   # * New method: set_state_sprite
  823.   #--------------------------------------------------------------------------
  824.   def set_state_sprite(list, type)
  825.     list.each do |id|
  826.       next if no_state_display(type, id)
  827.       behavior = state_type(id, type)
  828.       name = state_text(id, type)
  829.       set  = [set_sprite(name, behavior, -1, false, id)]
  830.       set.each {|sprite| sprite.set_position }
  831.       @damage_sprites.push(set)
  832.     end
  833.   end
  834.   #--------------------------------------------------------------------------
  835.   # * New method: no_state_display
  836.   #--------------------------------------------------------------------------
  837.   def no_state_display(type, id)
  838.     note = $data_states[id].note
  839.     return true if note =~ /<NO DISPLAY ADD>/i
  840.     return true if type == :state_add && note =~ /<NO DISPLAY ADD>/i
  841.     return true if type == :state_rmv && note =~ /<NO DISPLAY REMOVE>/i
  842.     return false
  843.   end
  844.   #--------------------------------------------------------------------------
  845.   # * New method: set_buff_sprite
  846.   #--------------------------------------------------------------------------
  847.   def set_buff_sprite(list, type)
  848.     list.each do |id|
  849.       set = [set_sprite(buff_text(id, type), type, -1, false, id)]
  850.       set.each {|sprite| sprite.set_position }
  851.       @damage_sprites.push(set)
  852.     end
  853.   end
  854.   #--------------------------------------------------------------------------
  855.   # * New method: state_text
  856.   #--------------------------------------------------------------------------
  857.   def state_text(id, type)
  858.     sprintf(get_state_text(type), $data_states[id].name)
  859.   end
  860.   #--------------------------------------------------------------------------
  861.   # * New method: buff_text
  862.   #--------------------------------------------------------------------------
  863.   def buff_text(id, type)
  864.     sprintf(get_state_text(type), Vocab::param(id))
  865.   end
  866.   #--------------------------------------------------------------------------
  867.   # * New method: get_state_text
  868.   #--------------------------------------------------------------------------
  869.   def get_state_text(type)
  870.     case type
  871.     when :state_add  then VE_STATE_ADD
  872.     when :state_rmv  then VE_STATE_REMOVE
  873.     when :buff_add   then VE_BUFF_ADD
  874.     when :debuff_add then VE_DEBUFF_ADD
  875.     when :buff_rmv   then VE_BUFF_RMV
  876.     end
  877.   end
  878.   #--------------------------------------------------------------------------
  879.   # * New method: state_type
  880.   #--------------------------------------------------------------------------
  881.   def state_type(id, type)
  882.     note = $data_states[id].note
  883.     type = type
  884.     type = eval(":#{$1}") if note =~ /<DAMAGE[ _]*BEHAVIOR:? +([^>< ]*)>/i
  885.     type
  886.   end
  887.   #--------------------------------------------------------------------------
  888.   # * New method: update
  889.   #--------------------------------------------------------------------------
  890.   def update
  891.     @damage_sprites.each do |set|
  892.       set.each do |sprite|
  893.         sprite.update
  894.         set.delete_if {|sprite| sprite.disposed? }
  895.       end
  896.       set.compact!
  897.     end
  898.     @damage_sprites.delete_if {|set| set.empty? }
  899.   end
  900.   #--------------------------------------------------------------------------
  901.   # * New method: dispose
  902.   #--------------------------------------------------------------------------
  903.   def dispose
  904.     @damage_sprites.each do |set|
  905.       set.each {|sprite| sprite.dispose unless sprite.disposed? }
  906.     end
  907.   end
  908. end
  909.  
  910. #==============================================================================
  911. # ** Sprite_Damage
  912. #------------------------------------------------------------------------------
  913. #  This sprite is used to display damage. It observes a instance of the
  914. # Game_Damage class and automatically changes sprite conditions.
  915. #==============================================================================
  916.  
  917. class Sprite_Damage < Sprite_Base
  918.   #--------------------------------------------------------------------------
  919.   # * New method: initialize
  920.   #--------------------------------------------------------------------------
  921.   def initialize(wiewport, battler, exw, rnd, state, info)
  922.     super(wiewport)
  923.     @battler = battler
  924.     @exw     = exw
  925.     @rnd     = rnd
  926.     @state   = state ? $data_states[state] : nil
  927.     start_info(info)
  928.     start_basic
  929.     start_misc
  930.   end
  931.   #--------------------------------------------------------------------------
  932.   # * New method: start_info
  933.   #--------------------------------------------------------------------------
  934.   def start_info(info)
  935.     @index    = info[:i]
  936.     @text     = info[:text]
  937.     @type     = info[:type]
  938.     @pos_x    = info[:x]
  939.     @pos_y    = info[:y]
  940.     @dmg_size = info[:size]
  941.     @numeric  = info[:num]
  942.   end
  943.   #--------------------------------------------------------------------------
  944.   # * New method: start_basic
  945.   #--------------------------------------------------------------------------
  946.   def start_basic
  947.     @wait   = VE_DAMAGE_DISPLAY == :text ? get_text[4] : get_sprite[0]
  948.     @base   = VE_DAMAGE_DISPLAY == :text ? get_text[4] : get_sprite[0]
  949.     @delay  = VE_MULTI_POP ? @index * 4 : 1
  950.     @digit  = VE_DIGIT_ROLL
  951.     @each   = VE_DIGIT_EACH
  952.     @adjust = VE_AUTO_ADJ
  953.   end
  954.   #--------------------------------------------------------------------------
  955.   # * New method: start_misc
  956.   #--------------------------------------------------------------------------
  957.   def start_misc
  958.     @size   = text? ? 0.75 : (@text.size / 2.0) - @index
  959.     @move   = VE_DAMAGE_MOVE[@type]
  960.     @pop    = VE_POP_BEHAVIOR
  961.     @plus   = 0
  962.     @adj_zx = 0.0
  963.     @adj_zy = 0.0
  964.     @speed  = 0.0
  965.     @list   = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  966.     @dmg_bitmap = create_bitmap(@index)
  967.     self.opacity = 0
  968.   end
  969.   #--------------------------------------------------------------------------
  970.   # * New method: create_bitmap
  971.   #--------------------------------------------------------------------------
  972.   def create_bitmap(i, n = nil)
  973.     VE_DAMAGE_DISPLAY == :text ? create_text(i, n) : create_sprite(i, n)
  974.   end
  975.   #--------------------------------------------------------------------------
  976.   # * New method: create_sprite
  977.   #--------------------------------------------------------------------------
  978.   def create_sprite(index, fixed = nil)
  979.     text = fixed ? fixed.to_s : index < 0 ? @text : @text[index..index]
  980.     begin
  981.       digit = Cache.digits(text.to_s + get_sprite[1])
  982.     rescue
  983.       digit = Cache.digits(text.to_s)
  984.     end
  985.     bitmap = Bitmap.new(digit.width, digit.height)
  986.     rect   = Rect.new(0, 0, digit.width, digit.height)
  987.     bitmap.blt(0, 0, digit, rect)
  988.     bitmap
  989.   end
  990.   #--------------------------------------------------------------------------
  991.   # * New method: create_text
  992.   #--------------------------------------------------------------------------
  993.   def create_text(index, fixed = nil)
  994.     text = fixed ? fixed.to_s : index < 0 ? @text : @text[index..index]
  995.     dummy_bitmap = Bitmap.new(160, font_size + 2)
  996.     dummy_bitmap.font.size   = font_size
  997.     dummy_bitmap.font.name   = font_name
  998.     dummy_bitmap.font.bold   = font_bold
  999.     dummy_bitmap.font.italic = font_italic
  1000.     dummy_bitmap.sfont = $sfont[0] if $imported[:ve_sfonts]
  1001.     adjust = font_italic ? 4 : 2
  1002.     size   = dummy_bitmap.text_size(text).width + adjust
  1003.     dummy_bitmap.dispose
  1004.     bitmap = damage_bitmap(size)
  1005.     bitmap.draw_text(1, 0, size, font_size, text)
  1006.     bitmap
  1007.   end
  1008.   #--------------------------------------------------------------------------
  1009.   # * New method: damage_bitmap
  1010.   #--------------------------------------------------------------------------
  1011.   def damage_bitmap(size)
  1012.     bitmap = Bitmap.new(size, font_size)
  1013.     bitmap.font.size   = font_size
  1014.     bitmap.font.name   = font_name
  1015.     bitmap.font.bold   = font_bold
  1016.     bitmap.font.italic = font_italic
  1017.     bitmap.font.color.set(*get_color)
  1018.     bitmap.sfont = $sfont[0] if $imported[:ve_sfonts] && VE_ALL_SFONT
  1019.     bitmap
  1020.   end
  1021.   #--------------------------------------------------------------------------
  1022.   # * New method: get_color
  1023.   #--------------------------------------------------------------------------
  1024.   def get_color
  1025.     add_color = /<ADD COLOR: ((?:\d+,? *){3})>/i
  1026.     rmv_color = /<REMOVE COLOR: ((?:\d+,? *){3})>/i
  1027.     if @state && @type == :state_add && @state.note =~ add_color
  1028.       color = get_state_color($1.dup)
  1029.     elsif @state && @type == :state_rmv && @state.note =~ rmv_color
  1030.       color = get_state_color($1.dup)
  1031.     else
  1032.       color = [get_text[0], get_text[1], get_text[2]]
  1033.     end
  1034.     color
  1035.   end
  1036.   #--------------------------------------------------------------------------
  1037.   # * New method: get_text
  1038.   #--------------------------------------------------------------------------
  1039.   def get_text
  1040.     VE_DAMAGE_TEXTS[@type] ? VE_DAMAGE_TEXTS[@type] : VE_DAMAGE_TEXTS[:default]
  1041.   end
  1042.   #--------------------------------------------------------------------------
  1043.   # * New method: get_sprite
  1044.   #--------------------------------------------------------------------------
  1045.   def get_sprite
  1046.     VE_DAMAGE_IMGS[@type] ? VE_DAMAGE_IMGS[@type] : VE_DAMAGE_IMGS[:default]
  1047.   end
  1048.   #--------------------------------------------------------------------------
  1049.   # * New method: font_size
  1050.   #--------------------------------------------------------------------------
  1051.   def font_size
  1052.     get_text[3]
  1053.   end
  1054.   #--------------------------------------------------------------------------
  1055.   # * New method: font_bold
  1056.   #--------------------------------------------------------------------------
  1057.   def font_bold
  1058.     get_text[5]
  1059.   end
  1060.   #--------------------------------------------------------------------------
  1061.   # * New method: font_italic
  1062.   #--------------------------------------------------------------------------
  1063.   def font_italic
  1064.     get_text[6]
  1065.   end
  1066.   #--------------------------------------------------------------------------
  1067.   # * New method: font_name
  1068.   #--------------------------------------------------------------------------
  1069.   def font_name
  1070.     get_text[7]
  1071.   end
  1072.   #--------------------------------------------------------------------------
  1073.   # * New method: get_state_color
  1074.   #--------------------------------------------------------------------------
  1075.   def get_state_color(info)
  1076.     if info =~ /(\d+) *,? *(\d+) *,? *(\d+)/i
  1077.       color = [$1.to_i, $2.to_i, $3.to_i]
  1078.     else
  1079.       color = [255, 255, 255]
  1080.     end
  1081.     color
  1082.   end
  1083.   #--------------------------------------------------------------------------
  1084.   # * New method: space
  1085.   #--------------------------------------------------------------------------
  1086.   def space
  1087.     @dmg_bitmap.width + VE_DIGIT_SPACE
  1088.   end
  1089.   #--------------------------------------------------------------------------
  1090.   # * New method: set_position
  1091.   #--------------------------------------------------------------------------
  1092.   def set_position
  1093.     update_digit_bitmap
  1094.     @base_x = @dmg_bitmap ? @dmg_bitmap.width / 2  : 0
  1095.     @base_y = @dmg_bitmap ? @dmg_bitmap.height / 2 : 0
  1096.     adjust_x = text? ? 0 : @plus / 2 - @base_x
  1097.     adjust_y = (@adjust && @text != "") ? @dmg_size * 16 : 0
  1098.     move = @pop[@move[0]]
  1099.     self.zoom_x = move[0]
  1100.     self.zoom_y = move[1]
  1101.     self.x = @pos_x + @exw + move[2] - adjust_x - spriteset_viewport.ox
  1102.     self.y = @pos_y + move[3] - adjust_y - spriteset_viewport.oy
  1103.     self.z = 3000
  1104.   end
  1105.   #--------------------------------------------------------------------------
  1106.   # * New method: spriteset_viewport
  1107.   #--------------------------------------------------------------------------
  1108.   def spriteset_viewport
  1109.     SceneManager.scene.spriteset.viewport1
  1110.   end
  1111.   #--------------------------------------------------------------------------
  1112.   # * New method: text?
  1113.   #--------------------------------------------------------------------------
  1114.   def text?
  1115.     @index < 0
  1116.   end
  1117.   #--------------------------------------------------------------------------
  1118.   # * New method: plus
  1119.   #--------------------------------------------------------------------------
  1120.   def plus=(plus)
  1121.     @plus = plus
  1122.     set_position
  1123.   end  
  1124.   #--------------------------------------------------------------------------
  1125.   # * New method: update
  1126.   #--------------------------------------------------------------------------
  1127.   def update
  1128.     @delay -= 1
  1129.     return if self.disposed? || @delay > 0
  1130.     super
  1131.     @wait -= 1
  1132.     update_digit_bitmap
  1133.     update_speed
  1134.     update_damage_move
  1135.     update_zoom
  1136.     update_move
  1137.     update_opacity
  1138.   end
  1139.   #--------------------------------------------------------------------------
  1140.   # * New method: update_digit_bitmap
  1141.   #--------------------------------------------------------------------------
  1142.   def update_digit_bitmap
  1143.     if @each && each_digit  
  1144.       self.bitmap = nil
  1145.     elsif @numeric && @digit && !waiting && digit_roll
  1146.       self.bitmap = create_bitmap(@index, random_digit)
  1147.     else
  1148.       self.bitmap = @dmg_bitmap
  1149.     end
  1150.   end
  1151.   #--------------------------------------------------------------------------
  1152.   # * New method: waiting
  1153.   #--------------------------------------------------------------------------
  1154.   def waiting
  1155.     (Graphics.frame_count % 3 != 0 && !VE_FAST_ROLL)
  1156.   end
  1157.   #--------------------------------------------------------------------------
  1158.   # * New method: each_digit
  1159.   #--------------------------------------------------------------------------
  1160.   def each_digit    
  1161.     (@wait - (@index * 5) + (@dmg_size * 5) >= @base)
  1162.   end
  1163.   #--------------------------------------------------------------------------
  1164.   # * New method: digit_roll
  1165.   #--------------------------------------------------------------------------
  1166.   def digit_roll
  1167.     (@wait > (@base * 0.5) + (@each ? @index * 5 : 0))
  1168.   end
  1169.   #--------------------------------------------------------------------------
  1170.   # * New method: random_digit
  1171.   #--------------------------------------------------------------------------
  1172.   def random_digit
  1173.     digit = @list.random!
  1174.     @list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] if @list.empty?
  1175.     digit
  1176.   end
  1177.   #--------------------------------------------------------------------------
  1178.   # * New method: update_damage_move
  1179.   #--------------------------------------------------------------------------
  1180.   def update_damage_move
  1181.     a = @pop[@move[0]]
  1182.     b = @pop[@move[1]]
  1183.     c = @pop[@move[2]]
  1184.     if @wait > @base * 2.0 / 3.0
  1185.       set_move_values(a[0], b[0], a[1], b[1], a[4], a[5], a[6], a[7])
  1186.     elsif @wait < @base / 3.0
  1187.       set_move_values(b[0], c[0], b[1], c[1], c[4], c[5], c[6], c[7])
  1188.     else
  1189.       set_move_values(0, 0, 0, 0, b[4], b[5], b[6], b[7])
  1190.     end
  1191.   end
  1192.   #--------------------------------------------------------------------------
  1193.   # * New method: set_move_values
  1194.   #--------------------------------------------------------------------------
  1195.   def set_move_values(*args)
  1196.     @adj_x = (args[0] - args[1]) / (@base * 0.33)
  1197.     @adj_y = (args[2] - args[3]) / (@base * 0.33)
  1198.     @zoom_max_x = args[1]
  1199.     @zoom_max_y = args[3]
  1200.     @move_x = args[4] * (args[7] ? @random : 1.0) * (@damage_mirror ? -1 : 1)
  1201.     @move_y = args[5]
  1202.     @gravity = -args[6]
  1203.   end  
  1204.   #--------------------------------------------------------------------------
  1205.   # * New method: update_zoom
  1206.   #--------------------------------------------------------------------------
  1207.   def update_zoom
  1208.     self.zoom_x -= @adj_x
  1209.     self.zoom_y -= @adj_y
  1210.     self.zoom_x = [self.zoom_x, @zoom_max_x].max if @adj_x > 0
  1211.     self.zoom_x = [self.zoom_x, @zoom_max_x].min if @adj_x < 0
  1212.     self.zoom_y = [self.zoom_y, @zoom_max_y].max if @adj_x > 0
  1213.     self.zoom_y = [self.zoom_y, @zoom_max_y].min if @adj_x < 0
  1214.   end
  1215.   #--------------------------------------------------------------------------
  1216.   # * New method: update_speed
  1217.   #--------------------------------------------------------------------------
  1218.   def update_speed
  1219.     duration = @wait * 100.0 / @base
  1220.     case duration
  1221.     when 66...100
  1222.       @speed = (duration - 81) * 10 / @base
  1223.     when 33...66
  1224.       @speed = (duration - 50) * 10 / @base
  1225.     when 0...33
  1226.       @speed = (duration - 16) * 10 / @base
  1227.     end
  1228.   end
  1229.   #--------------------------------------------------------------------------
  1230.   # * New method: update_move
  1231.   #--------------------------------------------------------------------------
  1232.   def update_move
  1233.     self.x += @move_x
  1234.     self.y += @move_y + (@gravity * @speed)
  1235.     size_value = (@exw / 4) * @size * (self.zoom_x - 1)
  1236.     self.ox = @base_x + (size_value / self.zoom_x)
  1237.     self.oy = @base_y + ((@base_y - (@base_y / self.zoom_y)) / 2)
  1238.   end
  1239.   #--------------------------------------------------------------------------
  1240.   # * New method: update_opacity
  1241.   #--------------------------------------------------------------------------
  1242.   def update_opacity
  1243.     case @wait
  1244.     when 1..10
  1245.       self.opacity -= 25
  1246.     when (@base - 10)..@base
  1247.       self.opacity += 25
  1248.     when 0
  1249.       self.dispose
  1250.     else
  1251.       self.opacity = 255
  1252.     end
  1253.   end
  1254. end
Add Comment
Please, Sign In to add comment