Code:
#==============================================================================
# Quickie Battler Animation
# -------------------------------------------------------------------------
# version 1.0
# by DerVVulfman
# 08-26-2024 (MM-DD-YYYY)
# RGSS / RPGMaker XP
#==============================================================================
#
# INTRODUCTION:
# =============
#
# This is a very simple script that allows a game developer to use battlers
# that are customized to show minimalstic animations. The battlers will not
# display different actions based on attacks, but merely renders one series
# of animation frames for any defined combatant's sprite.
#
#------------------------------------------------------------------------------
#
# INSTALLATION:
# =============
#
# Paste below Scene Debug and above main.
#
# There is only one configuration value in the Quickie_Battler module, and it
# controls how fast or slow the animation frames are displayed. The higher the
# setting, the faster the animations are performed. A setting of 1 is the low-
# est setting possible, any value below 1 is thus treated as 1. A setting of
# 7 is relatively fast. And setting the value above the game's framerate will
# set the animations to run as fast as the framerate itself. This value will
# never go beyond the game's framerate.
#
#
#------------------------------------------------------------------------------
#
# BATTLER GRAPHICS:
# =================
#
# The system has no issue with default graphics, but is designed to handle
# animation with custom graphics. To identify these graphics, their filenames
# must follow a specific format such as the pair shown below:
#
# $Franklin_3 $ArchVillain04_05
#
# The first symbol for the filename of any custom graphic's filename must be a
# dollar sign ('$'), and the very end of the filename must be the number of
# animation frames preceded by an underscore ('_'). If a battler filename has
# more than one underscore, the system will always consider the last one used.
#
# In the above examples, the first filename defines a battler as having three
# frames of animation while the second battler has five frames of animation.
#
# +-----------+-----------+-----------+-----------+
# | | __// | | |
# | __// | /.__.\ | __// | |
# | /.__.\ | \ \/ / | /.__.\ | __// |
# | \ \/ / | __/ \ | \ \/ / | /.__.\ |
# | __/ \ | \- ) | __/ \ | \ \/ / |
# | \- ) | \_____/ | \- ) | __/ \ |
# | \_____/ | | | | \_____/ | \- ) |
# | | | | | | | | | | \_____/ |
# | " " | " " | " " | " " |
# +-----------+-----------+-----------+-----------+
#
# And assuming the above bit of Ascii Art is a custom battler, it would be a
# graphic with four(4) frames of animation and could have a filename such as:
# "$chicken_dance_4"
#
# That's really all there is to it.
#
#
#==============================================================================
#
# COMPATABILITY:
# ==============
#
# Designed for RPGMaker XP.
# Not for use with other systems that animate battler graphics.
# Compatible with Brenda's Paperdoll Battlers.
# May need to go below some custom battlesystems to function.
#
#
#==============================================================================
#
# TERMS and CONDITIONS:
# =====================
#
# Free for use, even in commercial scripts. Due credit to all involved is
# the only requirement.
#
#
#==============================================================================
module Quickie_Battler
#--------------------------------------------------------------------------
A_SPEED, E_SPEED = {},{} # Do Not Touch
#--------------------------------------------------------------------------
# SYSTEM ANIMTION SPEED
# =====================
# This defines the basic speed of all animations. 1 is slowest. The game's
# framerate setting is the highest.
# -------------------------------------------------------------------------
#
SPEED = 8
# ACTOR AND ENEMY SPEEDS
# ======================
# Here, you define how fast the animation is for actor or enemy battlers,
# using their database ID as the identifying key.
# -------------------------------------------------------------------------
#
A_SPEED[2] = 9 # Actor ID 2 (Basil) is marginally faster than default
E_SPEED[1] = 5 # Enemy ID 1 (Ghost) is a bit slower than the default
end
#==============================================================================
# ** Sprite_Battler
#------------------------------------------------------------------------------
# This sprite is used to display the battler.It observes the Game_Character
# class and automatically changes sprite conditions.
#==============================================================================
class Sprite_Battler < RPG::Sprite
#--------------------------------------------------------------------------
# * Alias Listings
#--------------------------------------------------------------------------
alias sprite_battler_quickie_animation_initialize initialize
alias sprite_battler_quickie_animation_update update
#--------------------------------------------------------------------------
# * Object Initialization
# viewport : viewport
# battler : battler (Game_Battler)
#--------------------------------------------------------------------------
def initialize(viewport, battler = nil)
#
# Perform the original method
sprite_battler_quickie_animation_initialize(viewport, battler)
# Include the new values at setup
quickie_battler_animation_setup
#
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
#
# Perform the original method
sprite_battler_quickie_animation_update
# Reset the battler sprite if contents changed
update_quickie_battler_reset if update_quickie_battler_changed?
# Animate if actually animated
update_quickie_battler_animation if @battler_anim
#
end
#--------------------------------------------------------------------------
# * Object Initialization : when setting up additional animation values
#--------------------------------------------------------------------------
def quickie_battler_animation_setup
#
@battler_anim = false
@battler_frame = 0
@battler_frames = 1
@battler_time = 0
#
end
#--------------------------------------------------------------------------
# * Object Initialization : when setting/ensuring animation speed
#--------------------------------------------------------------------------
def quickie_battler_speed
#
# Acquire default configured speed
speed = Quickie_Battler::SPEED
# Determine actor/enemy list
list = Quickie_Battler::A_SPEED
list = Quickie_Battler::E_SPEED if @battler.is_a?(Game_Enemy)
# Substitute speed with battler's unique speed if exists
speed = list[@battler.id] if list.has_key?(@battler.id)
# Keep within range and exit with result
speed = 1 if speed < 1
speed = Graphics.frame_rate if speed > Graphics.frame_rate
return speed
#
end
#--------------------------------------------------------------------------
# * Frame Update : when determining if battler sprite contents changed
#--------------------------------------------------------------------------
def update_quickie_battler_changed?
#
return false if @battler.nil?
effective = false
effective = true if @battler.battler_name != @battler_name
effective = true if @battler.battler_hue != @battler_hue
is_animate = update_quickie_battler_animated?
effective = true if @battler_anim != is_animate
@battler_anim = is_animate
return effective
#
end
#--------------------------------------------------------------------------
# * Frame Update : when determining if battler is animated
#--------------------------------------------------------------------------
def update_quickie_battler_animated?
#
return false unless @battler_name[0,1] == "$" # No dollar sign?
return false unless @battler_name.include?("_") # No underscore?
tmp_a = @battler_name.split('_') # Make it an array
tmp_i = (tmp_a[tmp_a.size-1]).to_i # Get frame count
return false unless tmp_i > 1 # Exit unless 2+
@battler_frames = tmp_i # Set frame count
return true # Exit with success
#
end
#--------------------------------------------------------------------------
# * Frame Update : when actively changing loaded battler contents
#--------------------------------------------------------------------------
def update_quickie_battler_reset
#
@battler_name = @battler.battler_name
@battler_hue = @battler.battler_hue
self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
@width = bitmap.width / @battler_frames
@height = bitmap.height
@battler_frame = 0
@battler_a_speed = quickie_battler_speed
self.ox = @width / 2
self.oy = @height
self.opacity = 0 if @battler.dead? or @battler.hidden
#
end
#--------------------------------------------------------------------------
# * Frame Update : when actively animating the battler
#--------------------------------------------------------------------------
def update_quickie_battler_animation
#
# Define and update frame used by battler
sx = @width * @battler_frame
self.src_rect.set(sx, 0, @width, @height)
# Process timer mechanics
update_quickie_battler_timer
#
end
#--------------------------------------------------------------------------
# * Frame Update : when advancing battler frames
#--------------------------------------------------------------------------
def update_quickie_battler_timer
#
# Determine current time (number of frames changed divided by speed)
time = Graphics.frame_count / (Graphics.frame_rate / @battler_a_speed)
# Advance frame if time had changed
if @battler_time < time
@battler_frame = (@battler_frame + 1) % @battler_frames
end
# Update last time used by battler
@battler_time = time
#
end
end