Jump to content
New account registrations are disabed. This website is now an archive. Read more here.
Sign in to follow this  
Punk

Damage Text Revamp 2.1

Recommended Posts

Damage Text Revamp

Version: 2.1

 

Introduction

Tired of looking at that rather dull Arial Black font in battle? Are you looking to fancy the look and animation of your damage text? Look no further, this is the Damage Text Revamp! It's customisable and it's heavily packed with options. Have a look for yourself!

 

Features

  • Set X, Y, Blend Type, Angle, Zoom_X, Zoom_Y, Color, Tone of Damage Text.
  • Set format, color, and outlines for Damage/Heal/Miss/Critical Val+Text
  • Set keyframe animations for damage text.
  • Set specific keyframe animations for Damage/Heal/Miss/Critical text.
  • Enable or disable damage counting (known as Iteration).
  • Create keyframe animations for damage counting.
  • Create specific damage counting keyframe animations for Damage / Heal / Miss / Critical

Changelog

  • v1 (11/18/2009) - Initial release.
  • v2 (4/6/2012) - Remade, added a plethora of new settings.
  • v2.0.1 (4/6/2012) - New dmg_v variable to help ease script calling needs.
  • v2.1 (4/8/2012) - New switch setting added.

Screenshots

 

 

14ccy0p.png

Video coming soon. This screenshot does not do this script justice.

 

Demo

No demo.

 

Script

 

=begin

Damage Text Revamp 2.1
by PK8
Created: 11/18/2009
Modified: 4/8/2012
──────────────────────────────────────────────────────────────────────────────
■ Table of Contents
  ○ Author's Notes                                - Line 27-37
  ○ Introduction & Description                    - Line 39-43
  ○ Features                                      - Line 45-52
  ○ Methods Aliased                               - Line 54-57
  ○ Thanks                                        - Line 59-70
  ○ Changelog                                     - Line 72-76
  ○ What is this?                                 - Line 78-288
    ○ General & Initial Settings                  - Line 80-106
    ○ Settings for Critical/Damage/Heal/Miss      - Line 107-119
    ○ Iteration Settings                          - Line 120-127
    ○ All Keyframe Settings                       - Line 128-187
      ○ Settings for Damage and Iteration         - Line 130-140
      ○ All Keyframe_Iteration Settings           - Line 141-164
      ○ All Normal Keyframe Settings              - Line 165-187
    ○ Getting into Keyframes                      - Line 188-288
      ○ Keyframe_Advanced: Simple vs. Advanced    - Line 190-215
      ○ Modifying properties through keyframes    - Line 216-288
──────────────────────────────────────────────────────────────────────────────
■ Author's Notes
When I first made this script, I remember making it because I was bored and I
was watching people play Eternal Sonata. I couldn't help but love how fancy
the damage text looked, so I wanted to make something kind of like it here.

Now when I was working on this version, I went in there thinking
"okay, I'll just edit a few settings and call it a day." It sounds mean, I
know, but that was because I didn't think I'd be able to improve the script
much further. That was, until I saw Victor Sant's collapse script thread for
RPG Maker VX Ace. Seeing that thread gave me some new ideas for what I wanted
to do for this script.
──────────────────────────────────────────────────────────────────────────────
■ Introduction & Description
Tired of looking at that rather dull Arial Black font in battle? Are you
looking to fancy the look and animation of your damage text? Look no further,
this is the Damage Text Revamp! It's customisable and it's heavily packed
with options. Have a look for youself!
──────────────────────────────────────────────────────────────────────────────
■ Features
  o Set X, Y, Blend Type, Angle, Zoom_X, Zoom_Y, Color, Tone of Damage Text.
  o Set format, color, and outlines for Damage/Heal/Miss/Critical Val+Text
  o Set keyframe animations for damage text.
  o Set specific keyframe animations for Damage/Heal/Miss/Critical text.
  o Enable or disable damage counting (known as Iteration).
  o Create keyframe animations for damage counting.
  o Create specific damage counting keyfreame animations for Dmg/Heal/Miss/Crit
──────────────────────────────────────────────────────────────────────────────
■ Methods Aliased
  o damage of Sprite < ::Sprite class in the RPG module.
    Note that it kind of... rewrites the whole damage method.
  o update of Sprite < ::Sprite class in the RPG module.
──────────────────────────────────────────────────────────────────────────────
■ Thanks
  Yeyinde's help with fixing stacking error issues.
  Rhyme helped me out a few years ago on drawing outlines better.
  Kain Nobel asking for the Miss text to have a custom string to it, and
    suggesting a scrolling text option. My Iteration feature probably looks
    nothing like what he requested but it should be just as epic.
  MetalRenard pretty much telling me to "make this as epic as possible" made
    want to go all out on this script. Again for asking about it being
    possible to make the sprite flash every time the value reaches +100 more,
    which made me add the dmg_v variable.
  Victor Sant's Collapse script for RPG Maker VX Ace inspired me to attempt
    a custom animation feature for Damage Text.
──────────────────────────────────────────────────────────────────────────────
■ Changelog (MM/DD/YYYY)
v1     (11/18/2009) - Initial release.
v2     (4/6/2012)   - Remade, added a plethora of new settings.
v2.0.1 (4/6/2012)   - New dmg_v variable to help ease script calling needs.
v2.1	(4/8/2012)   - New switch setting added.
──────────────────────────────────────────────────────────────────────────────
■ What is this?
┌──────────────────────────────────────────────────────────────────────────┐
│ ■ General and initial settings.                                          │
└──────────────────────────────────────────────────────────────────────────┘
  o Switch: TRUE turns it on, FALSE turns it off. Can be turned on or off at
              any time by calling: PK8::DamageText::Switch = bool*
              * Replace bool with either true or false
  o X: Adjust X offset of the damage text sprite.
  o Y: Adjust Y offset of the damage text sprite.
  o Angle: Set angle of damage text sprite.
  o Blend: Set blend type of damage text sprite. (0: Normal, 1: Add, 2: Sub)
  o Color: Set color for damage text sprite. [red, green, blue, alpha]
            red  : Set amount of red.   (Values: 0 - 255)
            green: Set amount of green. (Values: 0 - 255)
            blue : Set amount of blue.  (Values: 0 - 255)
            alpha: Set amount of alpha. (Values: 0 - 255, optional)
  o Mirror: Flip sprite horizontally? (true or false)
  o Tone: Set tone for damage text sprite. [red, green, blue, grey]
            red  : Set amount of red.   (Values: -255 - 255)
            green: Set amount of green. (Values: -255 - 255)
            blue : Set amount of blue.  (Values: -255 - 255)
            grey : Set amount of grey.  (Values: 0 - 255, optional)
  o Zoom_X: Adjust the damage text sprite's X-Axis zoom level.
              * 1.0 denotes actual pixel size.
  o Zoom_Y: Adjust the damage text sprite's Y-Axis zoom level.
              * 1.0 denotes actual pixel size.
  o Debug:  You can set which keyframe animations you'd like to preview by
              changing the string of this setting. Only works during DEBUG.

┌──────────────────────────────────────────────────────────────────────────┐
│ ■ Setting format and colors for Damage, Heal, Miss, and Critical.        │
└──────────────────────────────────────────────────────────────────────────┘
  o *_String: Set text. (For CriticalText and Miss)
  o *_Font: Set font(s).
  o *_Size: Set font size. (CriticalText: 20, Others: 48)
  o *_Bold: Boldface text? (true or false)
  o *_Italic: Italicize text? (true or false)
  o *_Color: Set the color of the text. (r, g, b[, a]) (0 - 255)
  o *_Outline: Set the outline of the text. (r, g, b[, a]) (0 - 255)

    *: Heal, Miss, Damage, CriticalText, CriticalVal

┌──────────────────────────────────────────────────────────────────────────┐
│ ■ Iteration settings.                                                    │
└──────────────────────────────────────────────────────────────────────────┘
  o Iteration: How many times should the damage sprite be rendered with a
               reduced value before it reaches the damage's real value?
               * Do not use a large integer. To disable, set this to 1.
  o Iteration_Countdown: If TRUE, counts down. If FALSE, counts up from 0.

┌──────────────────────────────────────────────────────────────────────────┐
│ ■ All Keyframe settings                                                  │
└┬────────────────────────────────────────────────────────┬────────────────┘
 │ Keyframe settings that applies to Damage and Iteration │
 └────────────────────────────────────────────────────────┘
  o Keyframe_Advanced: Allow for more advanced keyframe customization?
    * false: Simple version. | true: Advanced version.
    * ""        : Don't override
      "critical": Override with Critical
      "damage"  : Override with Damage
      "miss"    : Override with Miss
      "heal"    : Override with Heal

└┬─────────────────────────────────┬───────────────────────────────────────┘
 │ All Keyframe_Iteration settings │
 └─────────────────────────────────┘
  o Keyframe_Iteration_Flag: Enable custom damage text animations for damage
                             counting? (true or false)

  o Keyframe_Iteration[id]: Set keyframe animations when counting for all
                            damage text. Acts as a fallback should any of
                            the Keyframe_Iteration_*_Flag settings get set
                            to FALSE.
  o Keyframe_Iteration_Heal[id]: Set keyframe animations when counting for
                                 healing text.
  o Keyframe_Iteration_Damage[id]: Set keyframe animations when counting for
                                   damage text.
  o Keyframe_Iteration_Critical[id]: Set keyframe animations when counting
                                     for critical damage text.
      * Only customize these when Keyframe_Iteration_*_Flag is set to TRUE.

  o Keyframe_Iteration_Heal_Flag: Enable counting animations for healing?
  o Keyframe_Iteration_Damage_Flag: Enable counting animations for normal dmg
  o Keyframe_Iteration_Critical_Flag: Enable counting animations for crit dmg

  * It animates from the duration of the animation to 0

└┬──────────────────────────────┬──────────────────────────────────────────┘
 │ All Normal Keyframe settings │
 └──────────────────────────────┘
  o Keyframe_Flag: Enable custom damage text animations? (true or false)
  o Keyframe_Duration: How many frames would the animation last for?
          more information about Keyframes_Advanced starting at 164.

  o Keyframe[id]: Set keyframe animations for all damage text. Acts as a
                  fallback should any of the Keyframe_*_Flag settings get
                  set to FALSE
  o Keyframe_Heal[id] = Set keyframe animations for Heal text.
  o Keyframe_Miss[id] = Set keyframe animations for Miss text.
  o Keyframe_Damage[id] = Set keyframe animations for Damage text.
  o Keyframe_Critical[id] = Set keyframe animations for Critical Damage text.
      * Only customize these when Keyframe_*_Flag is set to TRUE.

  o Keyframe_Heal_Flag: Enable damage text animations for healing?
  o Keyframe_Miss_Flag: Enable damage text animations for missing?
  o Keyframe_Damage_Flag: Enable damage text animations for normal attacks?
  o Keyframe_Critical_Flag: Enable damage text animations for critical hits?

  * It animates from the duration of the animation to 0

┌──────────────────────────────────────────────────────────────────────────┐
│ ■ Getting into keyframes                                                 │
└┬───────────────────────────────────────┬─────────────────────────────────┘
 │ Keyframe_Advanced: Simple vs Advanced │
 └───────────────────────────────────────┘
  o  true: allows for some serious scripting freedom for the damage text
[ advanced] animation. You get to script in script calls, big conditionals,
           and other things without having to start off with a call to alter
           the damage text sprite.

          Example: Keyframe[40] = ["dmg.opacity = 0", "dmg.y -= 2"]
                   Keyframe[39] = ["dmg.opacity += 25", "dmg.y -= 2"]
                   Keyframe[34] = ["dmg.opacity += 25", "dmg.y -= 1"]
                   Keyframe[29] = ["dmg.y -= 0"]
                   Keyframe[11] = ["dmg.opacity -= 25", "dmg.y -= 1"]
                   Keyframe[6]  = ["dmg.opacity -= 25", "dmg.y -= 2"]

  o false: Offers the same customisation as advanced mode but with the
[   simple] requirement that creators start off with modifying the property
           of a sprite.

          Example: Keyframe[40] = ["opacity = 0", "y -= 2"]
                   Keyframe[39] = ["opacity += 25", "y -= 2"]
                   Keyframe[34] = ["opacity += 25", "y -= 1"]
                   Keyframe[29] = ["y -= 0"]
                   Keyframe[11] = ["opacity -= 25", "y -= 1"]
                   Keyframe[6]  = ["opacity -= 25", "y -= 2"]

└┬────────────────────────────────────────┬────────────────────────────────┘
 │ Modifying properties through keyframes │
 └────────────────────────────────────────┘
 You can use certain variables I created to aid creating your script calls.

 Variable         Variable Description
 ────────────────┬──────────────────────────────────────────────────────────
 dmg:            │ It stores the damage text sprite and with it, all of its
                 │  properties that can be altered.
 dmg_i:          │ This stores the frame the animation is currently up to.
 [n..1]          │  Useful for tweening formulas involving iteration count.
 dmg_d:          │ This stores the duration of the animation. Useful for
 [n]             │  tweening formulas involving iteration count.
 dmg_v:          │ Gets damage value.
 dmg_iv:         │ Gets iterated damage value.
 i:              │ This stores the frame the animation is currently up to in
 [1..n]          │  ascending order. Useful for tweening formulas involving
                 │  iteration count.
 ────────────────┴──────────────────────────────────────────────────────────
                     ──────────────────────────────────
 For future reference, you can always look up the Help File for RPG Maker on
 Sprite and read up on all of their properties. (That's where this is taken
 from.)

 Property/Method  Property/Method Description
 ────────────────┬──────────────────────────────────────────────────────────
 o angle:        │ Angle of rotation. Specifies up to 360 degrees of
                 │  counterclockwise rotation. However, drawing a rotated
                 │  sprite is time-consuming, so avoid overuse.
 o animation:    │ Give the damage text sprite an animation.
                 │  * Syntax : animation(animation, hit)
                 │  * Example: animation($data_animations[20], true)
 o blend_type:   │ Blending mode.
                 │  * 0: normal, 1: addition, 2: subtraction
 o color:        │ The color to be blended with the sprite. Alpha values are
                 │  used in the blending ratio.
                 │  * Example: color = Color.new(red, green, blue[, alpha])
 o color.red:    │ Accesses the amount of red coloring.
 o color.green:  │ Accesses the amount of green coloring.
 o color.blue:   │ Accesses the amount of blue coloring.     
 o color.alpha:  │ Accesses the amount of alpha in the color.
 o flash:        │ Begins flashing the sprite. Duration specifies the number
                 │  of frames the flash will last. If color is set to nil,
                 │  the sprite will disappear while flashing.
                 │  * Syntax: flash(Color.new(r, g, b[, a]), duration)
                 │  * Example: flash(Color.new(255, 255, 255), 10)
 o loop_animation│ Plays the animation specified in animation in a loop on
                 │  the indicated sprite. Can be displayed at the same time
                 │  as a normal animation.
                 │  * Syntax : loop_animation(animation)
                 │  * Example: loop_animation($data_animations[20])
 o mirror:       │ Flag denoting the sprite has been flipped horizontally.
                 │  If TRUE, the sprite will be drawn flipped.
 o opacity:      │ Opacity. 0 - 255. Out of range values are auto-corrected
 o tone:         │ Color tone.
                 │  * Example: tone = Tone.new(red, green, blue[, gray])
 o tone.red:     │ Accesses the amount of red in the tone.
 o tone.green:   │ Accesses the amount of green in the tone.
 o tone.blue:    │ Accesses the amount of blue in the tone.
 o tone.gray:    │ Accesses the amount of gray in the tone.
 o visible:      │ Visibility. If TRUE, the sprite is visible.
 o x:            │ X coordinate.
 o y:            │ Y coordinate.
 o zoom_x:       │ X-axis zoom level. 1.0 denotes actual pixel size.
 o zoom_y:       │ Y-axis zoom level. 1.0 denotes actual pixel size.
 ────────────────┴──────────────────────────────────────────────────────────
                     ──────────────────────────────────
 Operator Expressions that could be useful for tweening

┌─────────┬──────────┬──────────┬────────┬──────────┬──────────┬───────────┐
│    =    │    +=    │    -=    │   *=   │    /=    │    %=    │    **=    │
└─────────┴──────────┴──────────┴────────┴──────────┴──────────┴───────────┘

=end

#===============================================================================​
# * Configuration
#===============================================================================​
module PK8
 class DamageText
   #---------------------------------------------------------------------------
   # * Do not modify.
   #---------------------------------------------------------------------------
   Keyframes                     = []
   Keyframes_Heal                = []
   Keyframes_Damage              = []
   Keyframes_Critical            = []
   Keyframes_Miss                = []
   Keyframes_Iteration           = []
   Keyframes_Iteration_Heal      = []
   Keyframes_Iteration_Damage    = []
   Keyframes_Iteration_Critical  = []

   #---------------------------------------------------------------------------
   # * General and initial settings.
   #---------------------------------------------------------------------------
   Switch  = true        # Turn the system on or off.
   X       = 80          # Sprite X-offset
   Y       = 20          # Sprite Y-offset
   Angle   = 0           # Sprite Angle
   Blend   = 0           # Sprite Blend Type (0: Normal, 1: Add, 2: Sub)
   Color   = [0,0,0,0]   # Color: Red, Green, Blue[, Alpha]
   Mirror  = false       # Flip sprite horizontally?
   Tone    = [0,0,0,0]   # Tone: Red, Green, Blue[, Gray]
   Zoom_X  = 1.0         # X-Axis Zoom Level (1.0 = Actual size)
   Zoom_Y  = 1.0         # Y-Axis Zoom Level (1.0 = Actual size)
   Debug   = ""          # "", "critical", "damage", "heal", or "miss"

   #---------------------------------------------------------------------------
   # * Set format and colors for Damage, Heal, Miss, and Critical
   #---------------------------------------------------------------------------
   # Settings for the Damage value text
   Damage_Font           = ["Constantia", "Palatino Linotype", "Arial Black"]
   Damage_Size           = 32
   Damage_Bold           = true
   Damage_Italic         = true
   Damage_Color          = [239, 207, 59, 255]
   Damage_Outline        = [143, 121, 17, 255]

   # Settings for the Heal value text
   Heal_Font             = ["Constantia", "Palatino Linotype", "Arial Black"]
   Heal_Size             = 32
   Heal_Bold             = true
   Heal_Italic           = true
   Heal_Color            = [83, 239, 74, 255]
   Heal_Outline          = [29, 127, 23, 255]

   # Settings for the Miss text
   Miss_Font             = ["Constantia", "Palatino Linotype", "Arial Black"]
   Miss_String           = "Evaded!"
   Miss_Size             = 32
   Miss_Bold             = false
   Miss_Italic           = true
   Miss_Color            = [224, 224, 224, 255]
   Miss_Outline          = [32, 32, 32, 255]

   # Settings for the "Critical" text.
   CriticalText_Font     = ["Constantia", "Palatino Linotype", "Arial Black"]
   CriticalText_String   = "Critical Hit!"
   CriticalText_Size     = 20
   CriticalText_Bold     = true
   CriticalText_Italic   = false
   CriticalText_Color    = [255, 255, 255, 255]
   CriticalText_Outline  = [32, 32, 32, 255]

   # Settings for the critical damage value text
   CriticalVal_Font      = ["Constantia", "Palatino Linotype", "Arial Black"]
   CriticalVal_Size      = 32
   CriticalVal_Bold      = true
   CriticalVal_Italic    = true
   CriticalVal_Color     = [239, 29, 29, 255]
   CriticalVal_Outline   = [143, 8, 8, 255]

   #---------------------------------------------------------------------------
   # * Iteration settings
   #---------------------------------------------------------------------------
   Iteration           = 8
   Iteration_Countdown = false # (true: counts down | false: counts up)

   #---------------------------------------------------------------------------
   # * Keyframe settings that applies to everything
   #---------------------------------------------------------------------------
   Keyframes_Advanced  = false # false: simple | true: advanced

   #---------------------------------------------------------------------------
   # * Keyframe Iteration settings
   #---------------------------------------------------------------------------
   # Iteration Keyframes for everything. Used as a fallback whenever iteration
   # keyframe flags for specific damage types are set to FALSE.
   Keyframes_Iteration_Flag        = true # If TRUE, set everything below up.
   Keyframes_Iteration[8]          = ["opacity = 0", "opacity += 50"]
   Keyframes_Iteration[7]          = ["opacity += 50", "y -= 0.1"]

   # Miss Iteration Keyframes
   Keyframes_Iteration_Heal_Flag   = true
   Keyframes_Iteration_Heal[8]     = ["opacity = 0", "opacity += 50"]
   Keyframes_Iteration_Heal[7]     = ["opacity += 50", "y -= 0.5"]

   # Damage Iteration Keyframes
   Keyframes_Iteration_Damage_Flag = true
   Keyframes_Iteration_Damage[8]   = ["opacity = 0", "opacity += 50"]
   Keyframes_Iteration_Damage[7]   = ["opacity += 50", "y -= 0.1"]

   # Critical Iteration Keyframes
   Keyframes_Iteration_Critical_Flag = true
   Keyframes_Iteration_Critical[8]   = ["opacity = 0", "opacity += 32"]
   Keyframes_Iteration_Critical[7]   = ["opacity += 32", "y -= 0.01",
                                       "zoom_x += 0.01", "zoom_y += 0.01"]

   #---------------------------------------------------------------------------
   # * General Keyframe Settings
   #---------------------------------------------------------------------------
   Keyframes_Flag        = true  # If TRUE, set everything below up.
   Keyframes_Duration    = 40

   #---------------------------------------------------------------------------
   # * Set Keyframe animations for Heal, Miss, Damage, Critical!
   #---------------------------------------------------------------------------
   # Keyframes for everything. Used as a fallback whenever keyframe flags for
   # specific damage types are set to FALSE.
   Keyframes[40] = ["y -= 2", "opacity = 0"]
   Keyframes[39] = ["y -= 2", "opacity += 50"]
   Keyframes[35] = ["opacity += 50"]
   Keyframes[10] = ["opacity -= 25"]

   # Heal Keyframes
   Keyframes_Heal_Flag = true # if TRUE, this animation gets used.
   Keyframes_Heal[40] = ["y -= 1", "flash(Color.new(255,255,200),10)"]
   Keyframes_Heal[39] = ["y -= 1"]
   Keyframes_Heal[25] = ["y -= 0.5"]
   Keyframes_Heal[10] = ["y -= 0.5", "opacity -= 25"]

   # Miss Keyframes
   Keyframes_Miss_Flag = true # if TRUE, this animation gets used.
   Keyframes_Miss[40] = ["y -= 2", "opacity = 0",
                         "x = x; Audio.se_play('Audio/SE/016-Jump02')"]
   Keyframes_Miss[39] = ["y -= 2", "opacity += 75"]
   Keyframes_Miss[36] = ["y -= 1"]
   Keyframes_Miss[32] = ["y -= 0.5"]
   Keyframes_Miss[28] = ["y -= 0.25"]
   Keyframes_Miss[24] = ["y -= 0.125"]
   Keyframes_Miss[20] = ["y -= 0.0625"]
   Keyframes_Miss[10] = ["opacity -= 25", "y -= 0.0625"]

   # Damage Keyframes
   Keyframes_Damage_Flag = true # if TRUE, this animation gets used.
   Keyframes_Damage[40] = ["y -= 2", "flash(Color.new(255,255,255),10)"]
   Keyframes_Damage[39] = ["y -= 2"]
   Keyframes_Damage[35] = ["opacity += 50"]
   Keyframes_Damage[10] = ["opacity -= 25"]

   # Critical Keyframes
   Keyframes_Critical_Flag = true # if TRUE, this animation gets used.
   Keyframes_Critical[40] = ["y -= 4", "flash(Color.new(255,255,255),40)",
                             "x = x; Audio.se_play('Audio/SE/158-Skill02')"]
   Keyframes_Critical[39] = ["y -= 4", "opacity += 75",
                             "opacity = 255 if dmg.opacity > 255"]
   Keyframes_Critical[35] = ["y -= 1"]
   Keyframes_Critical[10] = ["y -= 1", "opacity -= 25"]

   #---------------------------------------------------------------------------
   # * Do not modify.
   #---------------------------------------------------------------------------
   for i in 0..Keyframes_Duration
     Keyframes[i] = [] if Keyframes[i] == nil
     Keyframes_Heal[i]     = [] if Keyframes_Heal[i]     == nil
     Keyframes_Miss[i]     = [] if Keyframes_Miss[i]     == nil
     Keyframes_Damage[i]   = [] if Keyframes_Damage[i]   == nil
     Keyframes_Critical[i] = [] if Keyframes_Critical[i] == nil
   end
   Iteration = 1 if Iteration <= 0
   for i in 0..Iteration
     Keyframes_Iteration[i] = [] if Keyframes_Iteration[i] == nil
     Keyframes_Iteration_Heal[i] = [] if Keyframes_Iteration_Heal[i] == nil
     Keyframes_Iteration_Damage[i] = [] if Keyframes_Iteration_Damage[i] == nil
     Keyframes_Iteration_Critical[i]=[] if Keyframes_Iteration_Critical[i]==nil
   end
 end
end

#===============================================================================​
# * RPG Module, Sprite Class.
#===============================================================================​
module RPG
 class Sprite < ::Sprite
   #---------------------------------------------------------------------------
   # * Alias Listings
   #---------------------------------------------------------------------------
   unless method_defined?(:pk8_newdamage_damage)
     alias_method(:pk8_newdamage_damage, :damage)
   end
   unless method_defined?(:pk8_newdamage_update)
     alias_method(:pk8_newdamage_update, :update)
   end
   #---------------------------------------------------------------------------
   # * Damage
   #---------------------------------------------------------------------------
   def damage(value, critical)
     pk8_newdamage_damage(value, critical)
     if PK8::DamageText::Switch == true
       dispose_damage
       # Always plays a certain animation. Debug only
       if $DEBUG and (!PK8::DamageText::Debug.empty? or
           PK8::DamageText::Debug != false)
         case PK8::DamageText::Debug.downcase
         when "critical", "crit"
           critical = true
           value = value * 1 if value.is_a?(Numeric)
           value = 0 if !value.is_a?(Numeric)
         when "damage", "dmg"
           critical = false
           value = value * 1 if value.is_a?(Numeric)
           value = 0 if !value.is_a?(Numeric)
         when "miss", "missing", "ms"
           critical = false
           value = "Miss!"
         when "heal", "healing"
           critical = false
           value = value * -1 if value.is_a?(Numeric)
           value = -1 if !value.is_a?(Numeric)
         end
       end
       # Sprite Creation
       @_damage_sprite = RPG::Sprite.new(self.viewport)
       @_damage_sprite.angle = PK8::DamageText::Angle
       @_damage_sprite.blend_type = PK8::DamageText::Blend
       @_damage_sprite.color = Color.new(*PK8::DamageText::Color)
       @_damage_sprite.mirror = PK8::DamageText::Mirror
       @_damage_sprite.tone = Tone.new(*PK8::DamageText::Tone)
       @_damage_sprite.zoom_x = PK8::DamageText::Zoom_X
       @_damage_sprite.zoom_y = PK8::DamageText::Zoom_Y
       @_damage_sprite.ox = PK8::DamageText::X
       @_damage_sprite.oy = PK8::DamageText::Y
       @_damage_sprite.x = self.x
       @_damage_sprite.y = self.y - self.oy / 2
       @_damage_sprite.z = 3000
       @_damage_value = value
       dmg = @_damage_sprite
       # Bitmap Creation
       bitmap = Bitmap.new(160, 48)
       if value.is_a?(Numeric)   # If it's not a miss
         # Starts Iteration Animation (if flag is TRUE)
         if PK8::DamageText::Keyframes_Iteration_Flag == true
           if value < 0            # If healing
             if PK8::DamageText::Keyframes_Iteration_Heal_Flag == true
               keyframes = PK8::DamageText::Keyframes_Iteration_Heal
             else
               keyframes = PK8::DamageText::Keyframes_Iteration
             end
           else
             if critical == true   # If critical
               if PK8::DamageText::Keyframes_Iteration_Critical_Flag == true
                 keyframes = PK8::DamageText::Keyframes_Iteration_Critical
               else
                 keyframes = PK8::DamageText::Keyframes_Iteration
               end
             else                  # If normal
               if PK8::DamageText::Keyframes_Iteration_Damage_Flag == true
                 keyframes = PK8::DamageText::Keyframes_Iteration_Damage
               else
                 keyframes = PK8::DamageText::Keyframes_Iteration
               end
             end
           end
           dmg_d = PK8::DamageText::Iteration
         end
         # Damage Counting
         for i in 1..PK8::DamageText::Iteration
           # New Iterated Value
           if PK8::DamageText::Iteration_Countdown == true
             damage_string = ((value.abs*2) - (value.abs / ((
               PK8::DamageText::Iteration+1)-i))).to_s
           else
             damage_string = (value.abs / ((
               PK8::DamageText::Iteration+1)-i)).to_s
           end
           # Stores variables for script calling in keyframes.  
           dmg_v = value.to_i
           dmg_iv = damage_string.to_i
           # Plays damage counting animations
           if PK8::DamageText::Keyframes_Iteration_Flag == true
             # Animating sprite during iteration count
             dmg_i = (dmg_d + 1 - i)
             if keyframes[dmg_i].size > 0 # Detects keyframe
               @_damage_property = []
               for n in 0..keyframes[dmg_i].size-1
                 if PK8::DamageText::Keyframes_Advanced == true
                   @_damage_property[n] = eval("#{keyframes[dmg_i][n]}")
                 else
                   @_damage_property[n] = eval("dmg.#{keyframes[dmg_i][n]}")
                 end
               end
               @_damage_keyframe = dmg_i
             else  # Uses previous keyframe. Possibly for tweening purposes.
               @_damage_property = []
               if @_damage_keyframe != nil
                 for n in 0..keyframes[@_damage_keyframe].size-1
                   if PK8::DamageText::Keyframes_Advanced == true
                     @_damage_property[n] = eval("#{keyframes[
                       @_damage_keyframe][n]}")
                   else
                     @_damage_property[n] = eval("dmg.#{keyframes[
                       @_damage_keyframe][n]}")
                   end
                 end
               end
             end
             dmg.update
             for n in 0..@_damage_property.size-1
               @_damage_property[n]
             end
           end
           if value < 0            # If healing
             @_damage_type = "heal"
             bitmap.font.name    = PK8::DamageText::Heal_Font
             bitmap.font.size    = PK8::DamageText::Heal_Size
             bitmap.font.bold    = PK8::DamageText::Heal_Bold
             bitmap.font.italic  = PK8::DamageText::Heal_Italic
             bitmap.font.color.set(*PK8::DamageText::Heal_Outline)
             bitmap.draw_text(-1, 12, 160, 36, damage_string, 1)
             bitmap.draw_text(1, 12, 160, 36, damage_string, 1)
             bitmap.draw_text(0, 12-1, 160, 36, damage_string, 1)
             bitmap.draw_text(0, 12+1, 160, 36, damage_string, 1)
             bitmap.font.color.set(*PK8::DamageText::Heal_Color)
           else
             if critical == true   # If critical
               @_damage_type = "critical"
               # Drawing Critical Text
               bitmap.font.name   = PK8::DamageText::CriticalText_Font
               bitmap.font.size   = PK8::DamageText::CriticalText_Size
               bitmap.font.bold   = PK8::DamageText::CriticalText_Bold
               bitmap.font.italic = PK8::DamageText::CriticalText_Italic
               # -- Draw Critical String Outline
               bitmap.font.color.set(*PK8::DamageText::CriticalText_Outline)
               bitmap.draw_text(-1, 0, 160, 20,
                                 PK8::DamageText::CriticalText_String,1)
               bitmap.draw_text(1, 0, 160, 20,
                                 PK8::DamageText::CriticalText_String,1)
               bitmap.draw_text(0, -1, 160, 20,
                                 PK8::DamageText::CriticalText_String,1)
               bitmap.draw_text(0, 1, 160, 20,
                                 PK8::DamageText::CriticalText_String,1)
               # -- Draw Critical String Text
               bitmap.font.color.set(*PK8::DamageText::CriticalText_Color)
               bitmap.draw_text(0, 0, 160, 20,
                                 PK8::DamageText::CriticalText_String, 1)
               # Drawing Critical Value
               bitmap.font.name    = PK8::DamageText::CriticalVal_Font
               bitmap.font.size    = PK8::DamageText::CriticalVal_Size
               bitmap.font.bold    = PK8::DamageText::CriticalVal_Bold
               bitmap.font.italic  = PK8::DamageText::CriticalVal_Italic
               # -- Draw Critical Value Outline
               bitmap.font.color.set(*PK8::DamageText::CriticalVal_Outline)
               bitmap.draw_text(-1, 12, 160, 36, damage_string, 1)
               bitmap.draw_text(1, 12, 160, 36, damage_string, 1)
               bitmap.draw_text(0, 12-1, 160, 36, damage_string, 1)
               bitmap.draw_text(0, 12+1, 160, 36, damage_string, 1)
               # -- Set color for Critical Value
               bitmap.font.color.set(*PK8::DamageText::CriticalVal_Color)
             else                  # If not critical
               @_damage_type = "damage"
               bitmap.font.name    = PK8::DamageText::Damage_Font
               bitmap.font.size    = PK8::DamageText::Damage_Size
               bitmap.font.bold    = PK8::DamageText::Damage_Bold
               bitmap.font.italic  = PK8::DamageText::Damage_Italic
               # Draw Damage Value Outline
               bitmap.font.color.set(*PK8::DamageText::Damage_Outline)
               bitmap.draw_text(-1, 12, 160, 36, damage_string, 1)
               bitmap.draw_text(1, 12, 160, 36, damage_string, 1)
               bitmap.draw_text(0, 12-1, 160, 36, damage_string, 1)
               bitmap.draw_text(0, 12+1, 160, 36, damage_string, 1)
               # Set color for Damage Value
               bitmap.font.color.set(*PK8::DamageText::Damage_Color)
             end
           end
           bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
           @_damage_sprite.bitmap = bitmap
           damage_count = Graphics.frame_count
           if i < PK8::DamageText::Iteration
             loop do
               Graphics.update
               if Graphics.frame_count >= damage_count
                 bitmap.clear
                 break
               end
             end
           end
         end
       else                      # If it's a miss.
         @_damage_type = "miss"
         damage_string = value.to_s
         bitmap.font.name    = PK8::DamageText::Miss_Font
         bitmap.font.size    = PK8::DamageText::Miss_Size
         bitmap.font.bold    = PK8::DamageText::Miss_Bold
         bitmap.font.italic  = PK8::DamageText::Miss_Italic
         # Draw Miss Outline
         bitmap.font.color.set(*PK8::DamageText::Miss_Outline)
         bitmap.draw_text(-1, 12, 160, 36, PK8::DamageText::Miss_String, 1)
         bitmap.draw_text(1, 12, 160, 36, PK8::DamageText::Miss_String, 1)
         bitmap.draw_text(0, 12-1, 160, 36, PK8::DamageText::Miss_String, 1)
         bitmap.draw_text(0, 12+1, 160, 36, PK8::DamageText::Miss_String, 1)
         # Draw Miss Text
         bitmap.font.color.set(*PK8::DamageText::Miss_Color)
         bitmap.draw_text(0, 12, 160, 36, PK8::DamageText::Miss_String, 1)
         @_damage_sprite.bitmap = bitmap
       end
       if PK8::DamageText::Keyframes_Flag == true
         @_damage_duration = 0
         @_damage_duration2 = PK8::DamageText::Keyframes_Duration
       else
         @_damage_duration = PK8::DamageText::Keyframes_Duration
       end
     end
   end
   #---------------------------------------------------------------------------
   # * Update
   #---------------------------------------------------------------------------
   def update
     pk8_newdamage_update
     if PK8::DamageText::Switch == true
       @_damage_duration2 = 0 if @_damage_duration2 == nil
       if PK8::DamageText::Keyframes_Flag == true
         if @_damage_duration2 > 0
           # Stores variables for use in script calls.
           dmg = @_damage_sprite
           dmg_d = PK8::DamageText::Keyframes_Duration
           dmg_v = @_damage_value
           # Check for Damage Type
           case @_damage_type
           when "heal"
             if PK8::DamageText::Keyframes_Heal_Flag == true
               keyframes = PK8::DamageText::Keyframes_Heal
             else
               keyframes = PK8::DamageText::Keyframes
             end
           when "miss"
             if PK8::DamageText::Keyframes_Miss_Flag == true
               keyframes = PK8::DamageText::Keyframes_Miss
             else
               keyframes = PK8::DamageText::Keyframes
             end
           when "critical"
             if PK8::DamageText::Keyframes_Critical_Flag == true
               keyframes = PK8::DamageText::Keyframes_Critical
             else
               keyframes = PK8::DamageText::Keyframes
             end
           else
             if PK8::DamageText::Keyframes_Damage_Flag == true
               keyframes = PK8::DamageText::Keyframes_Damage
             else
               keyframes = PK8::DamageText::Keyframes
             end
           end
           # Animate
           case @_damage_duration2
           when 0..PK8::DamageText::Keyframes_Duration
             dmg_i = @_damage_duration2
             i = PK8::DamageText::Keyframes_Duration - dmg_i
             if keyframes[@_damage_duration2].size > 0 # Detects keyframe
               @_damage_property = []
               for n in 0..keyframes[@_damage_duration2].size-1
                 if PK8::DamageText::Keyframes_Advanced == true
                   @_damage_property[n] = eval("dmg; #{keyframes[dmg_i][n]}")
                 else
                   @_damage_property[n] = eval("dmg.#{keyframes[dmg_i][n]}")
                 end
               end
               @_damage_keyframe = @_damage_duration2
             else  # Uses previous keyframe. Possibly for tweening purposes.
               @_damage_property = []
               if @_damage_keyframe != nil
                 for n in 0..keyframes[@_damage_keyframe].size-1
                   if PK8::DamageText::Keyframes_Advanced == true
                     @_damage_property[n] = eval("dmg; #{keyframes[
                       @_damage_keyframe][n]}")
                   else
                     @_damage_property[n] = eval("dmg.#{keyframes[
                       @_damage_keyframe][n]}")
                   end
                 end
               end
             end
             dmg.update
             for n in 0..@_damage_property.size-1
               @_damage_property[n]
             end
           end
           @_damage_duration2 -= 1
           dispose_damage if @_damage_duration2 == 0
         end
       end
     end
   end
 end
end

 

 

Instructions

You may learn a little more about each setting by looking at the "What is this?" section in my script header.

 

FAQ

Awaiting question.

 

Compatibility

RMXP only. It pretty much rewrites the heck out of the damage and update methods in the Sprite > ::Sprite class of the RPG module.

 

Credits and Thanks

Yeyinde's help with fixing stacking error issues.

Rhyme helped me out a few years ago on drawing outlines better.

Kain Nobel asking for the Miss text to have a custom string to it, and suggesting a scrolling text option. My Iteration feature probably looks nothing like what he requested but it should be just as epic.

MetalRenard pretty much telling me to "make this as epic as possible" made me want to go all out on this script. Again for asking about it being possible to make the sprite flash every time the value reaches +100 more, which made me add the dmg_v variable.

Victor Sant's Collapse script for RPG Maker VX Ace inspired me to attempt a custom animation feature for Damage Text.

 

Author's Notes

When I first made this script, I remember making it because I was bored and I was watching people play Eternal Sonata. I couldn't help but love how fancy the damage text looked, so I wanted to make something kind of like it here.

 

Now when I was working on this version, I went in there thinking "okay, I'll just edit a few settings and call it a day." It sounds mean, I know, but that was because I didn't think I'd be able to improve the script much further. That was, until I saw Victor Sant's collapse script thread for RPG Maker VX Ace. Seeing that thread gave me some new ideas for what I wanted to do for this script.

 

Terms and Conditions

Feel free to include it in your game, just credit me.

Edited by Punk

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...