[VX Ace] Victor's Animation Settings Question

Status
Not open for further replies.

xcom

Veteran
Veteran
Joined
Mar 13, 2013
Messages
241
Reaction score
63
First Language
English
Primarily Uses
I have a question about Victor's Animation Settings script.

I admit I have a very limited grasp in script coding.  I have a game I'm making for the June contest.  I managed to get Victor's Animated Battles to (mostly) work the way I want it to.  The problem I'm having is the location of the player's sprite during the battles.  Most of the time it's just going to be the 1 player (with no companions) fighting.  There will be times where it will be 2, but no more then 2.  The problem I'm having (which is more of a annoyance) is the location of the player's sprite during combat. 

Here's a screenshot of it.

the run combat.png
As you see, he sits up a bit high in the screen.  I remembered seeing an option in Victor's Animated Battlers where I could change that location.  When I went back to it, I did see the following note about it starting on line 345. I highlighted the part that concerns this.

From Victor's Animated Battlers starting on line 345

VE_DEFAULT_SPRITE = {
# Basic Settings
# name: value,
frames: 3, # Number of frames
rows: 4, # Number of rows
ox: 0, # Adjust sprite X position
oy: 0, # Adjust sprite Y position
mirror: true, # Mirror battler when facing right
invert: false, # Invert the battler graphic
mode: :charset, # Graphic style :)sprite or :chasert)
action: :charset, # Action settings
# IMPORTANT: using the ox: and oy: value will make the battle animation to
# be moved also, if you want to adjust the battler position without
# changing the position of the animation, use the script
# 'VE - Animations Settings' together with the batte.
So I went and tracked down Victor's Animation Settings, but for the life of me I cannot figure out what I need to change!

I would greatly appreciate any advice in this matter.

Thanks!

Victor's Animation Setting Script

#==============================================================================
# ** Victor Engine - Animations Settings
#------------------------------------------------------------------------------
# Author : Victor Sant
#
# Version History:
#  v 1.00 - 2012.03.11 > First release
#  v 1.01 - 2012.03.15 > Compatibility with ENG version/VXAce_SP1
#  v 1.02 - 2012.07.25 > Fixed animation movement on characters
#  v 1.03 - 2013.02.13 > Compatibility with Basic Module 1.35
#                      > Removed tags <x: *>, <y: *> and <z *>
#                      > Added tags <above> and <bellow>
#------------------------------------------------------------------------------
#  This script adds some new options to control battle animation display.
# It also allows to display multiples animations on the same target (by default
# only one animation can be displayed) and fix some animations display bugs.
#------------------------------------------------------------------------------
# Compatibility
#   Requires the script 'Victor Engine - Basic Module' v 1.35 or higher
#   If used with 'Victor Engine - Animated Battle' place this bellow it.
#
# * Overwrite methods (Default)
#   class Sprite_Base < Sprite
#     def animation?
#     def set_animation_rate
#     def start_animation(animation, mirror = false)
#     def load_animation_bitmap
#     def make_animation_sprites
#     def set_animation_origin
#     def animation_set_sprites(animation, frame)
#     def update_animation
#     def dispose_animation
#
#   class Sprite_Character < Sprite_Base
#     def move_animation(dx, dy)
#
# * Alias methods (Default)
#   class Sprite_Base < Sprite
#     def initialize(viewport = nil)
#
#   class Scene_Battle < Scene_Base
#     def show_normal_animation(targets, animation_id, mirror = false)
#
#------------------------------------------------------------------------------
# Instructions:
#  To instal the script, open you script editor and paste this script on
#  a new section bellow the Materials section. This script must also
#  be bellow the script 'Victor Engine - Basic'
#
#------------------------------------------------------------------------------
# Animation Name tags:
#  Since Animations don't have note boxes, the tags must be added to the
#  animation name on the database
#  
#  <above>
#   Animation is displayed above all sprites
#
#  <bellow>
#   Animation is displayed bellow the target.
#
#  <rate: x>
#   The animation update rate.
#     x : rate value, the default is 4. Lower values make the animation faster.
#
#  <zoom: x%>
#   Changes the animation zoom to rate.
#     x : zoom rate, the default is 100
#
#  <follow>
#    By default, once the animation start, it don't move even if the target
#    position change, with this tag the animation will follow the target.
#
#  <udir>
#    This tag have effect only when used together with the script
#    'VE - Animated Battle'. This will make the animation direction change
#    according to the action user direction. So the animation will be mirrored
#    if the user is facing right.
#
#  <tdir>
#    This tag have effect only when used together with the script
#    'VE - Animated Battle'. This will make the animation direction change
#    according to the action target direction. So the animation will be
#    mirrored if the target is facing right.
#
#------------------------------------------------------------------------------
# Additional instructions:
#
#   If neither <above> or <bellow> is added to the animation name, then the
#   animation will be displayed at the same level of the target.
#   For screen animations to be displayed above all sprites you must add
#   the <above> tag to the animation name.
#
#   It's possible to make a script call before displaying a animation on a
#   character on the map.
#   $game_party.members[index].anim_direction = X #for actors
#   $game_map.events[index].anim_direction = X    #for events
#
#   X is the direction: 2 = down, 4 = left, 6 = right, 8 = up;
#
#==============================================================================

#==============================================================================
# ** Victor Engine
#------------------------------------------------------------------------------
#   Setting module for the Victor Engine
#==============================================================================

module Victor_Engine
  #--------------------------------------------------------------------------
  # * required
  #   This method checks for the existance of the basic module and other
  #   VE scripts required for this script to work, don't edit this
  #--------------------------------------------------------------------------
  def self.required(name, req, version, type = nil)
    if !$imported[:ve_basic_module]
      msg = "The script '%s' requires the script\n"
      msg += "'VE - Basic Module' v%s or higher above it to work properly\n"
      msg += "Go to http://victorscripts.wordpress.com/ to download this script."
      msgbox(sprintf(msg, self.script_name(name), version))
      exit
    else
      self.required_script(name, req, version, type)
    end
  end
  #--------------------------------------------------------------------------
  # * script_name
  #   Get the script name base on the imported value
  #--------------------------------------------------------------------------
  def self.script_name(name, ext = "VE")
    name = name.to_s.gsub("_", " ").upcase.split
    name.collect! {|char| char == ext ? "#{char} -" : char.capitalize }
    name.join(" ")
  end
end

$imported ||= {}
$imported[:ve_animations_settings] = 1.03
Victor_Engine.required:)ve_animations_settings, :ve_basic_module, 1.00, :above)

#==============================================================================
# ** RPG::Animation
#------------------------------------------------------------------------------
#  The data class for animation.
#==============================================================================

class RPG::Animation
  #--------------------------------------------------------------------------
  # * New method: target_dir?
  #--------------------------------------------------------------------------
  def target_dir?
    @name =~ /<TDIR>/i
  end
  #--------------------------------------------------------------------------
  # * New method: user_dir?
  #--------------------------------------------------------------------------
  def user_dir?
    @name =~ /<UDIR>/i
  end
end

#==============================================================================
# ** Game_Battler
#------------------------------------------------------------------------------
#  This class deals with battlers. It's used as a superclass of the Game_Actor
# and Game_Enemy classes.
#==============================================================================

class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :anim_direction
end

#==============================================================================
# ** Game_Character
#------------------------------------------------------------------------------
#  This class deals with characters. It's used as a superclass of the
# Game_Player and Game_Event classes.
#==============================================================================

class Game_Character < Game_CharacterBase
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :anim_direction
end

#==============================================================================
# ** Sprite_Base
#------------------------------------------------------------------------------
#  A sprite class with animation display processing added.
#==============================================================================

class Sprite_Base < Sprite
  #--------------------------------------------------------------------------
  # * Class Variables
  #--------------------------------------------------------------------------
  @@multi_ani_checker ||= []
  #--------------------------------------------------------------------------
  # * Alias method: initialize
  #--------------------------------------------------------------------------
  alias :initialize_ve_animations_settings :initialize
  def initialize(viewport = nil)
    initialize_ve_animations_settings(viewport)
    @animation  = {}
    @anim_index = 0
    @anim_position = {}
  end
  #--------------------------------------------------------------------------
  # * Overwrite method: animation?
  #--------------------------------------------------------------------------
  def animation?
    !@animation.values.compact.empty?
  end
  #--------------------------------------------------------------------------
  # * Overwrite method: start_animation
  #--------------------------------------------------------------------------
  def start_animation(animation, mirror = false)
    @anim_index += 1
    @animation[@anim_index] = Game_Animation.new(animation, mirror, user)
    if @animation[@anim_index]
      load_animation_bitmap
      make_animation_sprites
      set_animation_origin
    end
    user.anim_direction = nil if user
    user.animation_id   = 0   if user
  end
  #--------------------------------------------------------------------------
  # * Overwrite method: load_animation_bitmap
  #--------------------------------------------------------------------------
  def load_animation_bitmap
    anim1_name = animation.animation1_name
    anim1_hue  = animation.animation1_hue
    anim2_name = animation.animation2_name
    anim2_hue  = animation.animation2_hue
    animation.bitmap1 = Cache.animation(anim1_name, anim1_hue)
    animation.bitmap2 = Cache.animation(anim2_name, anim2_hue)
    if @@_reference_count.include?(animation.bitmap1)
      @@_reference_count[animation.bitmap1] += 1
    else
      @@_reference_count[animation.bitmap1] = 1
    end
    if @@_reference_count.include?(animation.bitmap2)
      @@_reference_count[animation.bitmap2] += 1
    else
      @@_reference_count[animation.bitmap2] = 1
    end
    Graphics.frame_reset
  end
  #--------------------------------------------------------------------------
  # * Overwrite method: make_animation_sprites
  #--------------------------------------------------------------------------
  def make_animation_sprites
    animation.duplicated  = @@multi_ani_checker.include?(animation.data)
    if @use_sprite && !(animation.duplicated  && animation.position == 3)
      16.times do
        sprite = ::Sprite.new(viewport)
        sprite.visible = false
        animation.sprites.push(sprite)
      end
    end
    @@multi_ani_checker.push(animation.data) if !animation.duplicated
  end
  #--------------------------------------------------------------------------
  # * Overwrite method: set_animation_origin
  #--------------------------------------------------------------------------
  def set_animation_origin
    if animation.position == 3
      update_animation_screen(animation)
    else
      update_animation_origin(animation)
    end
    animation.map_x = charset? ? $game_map.display_x : 0
    animation.map_y = charset? ? $game_map.display_y : 0
  end
  #--------------------------------------------------------------------------
  # * Overwrite method: animation_set_sprites
  #--------------------------------------------------------------------------
  def animation_set_sprites(animation, frame)
    cell_data = frame.cell_data
    animation.sprites.each_with_index do |sprite, i|
      next unless sprite
      pattern = cell_data[i, 0]
      if !pattern || pattern < 0
        sprite.visible = false
        next
      end
      if animation.duration % animation.rate == 0
        setup_sprite_pattern(animation, pattern, sprite)
      end
      setup_sprite_position(animation, cell_data, sprite, i)
    end
  end
  #--------------------------------------------------------------------------
  # * Overwrite method: update_animation
  #--------------------------------------------------------------------------
  def update_animation
    @animation.keys.each {|index| update_animations(index) }
  end
  #--------------------------------------------------------------------------
  # * Overwrite method: dispose_animation
  #--------------------------------------------------------------------------
  def dispose_animation
    @animation.keys.each {|index| dispose_animations(index) }
  end  
  #--------------------------------------------------------------------------
  # * New method: user
  #--------------------------------------------------------------------------
  def user
    @battler ? @battler : @character
  end
  #--------------------------------------------------------------------------
  # * New method: animation
  #--------------------------------------------------------------------------
  def animation
    @animation[@anim_index]
  end
  #--------------------------------------------------------------------------
  # * New method: charset?
  #--------------------------------------------------------------------------
  def charset?
    return false
  end
  #--------------------------------------------------------------------------
  # * New method: clear_anim_checker
  #--------------------------------------------------------------------------
  def clear_anim_checker
    @@multi_ani_checker.clear
  end
  #--------------------------------------------------------------------------
  # * New method: update_animation_screen
  #--------------------------------------------------------------------------
  def update_animation_screen(animation)
    if viewport == nil
      animation.ox = Graphics.width  / 2
      animation.oy = Graphics.height / 2
    else
      animation.ox = viewport.rect.width  / 2
      animation.oy = viewport.rect.height / 2
    end
  end
  #--------------------------------------------------------------------------
  # * New method: update_animation_origin
  #--------------------------------------------------------------------------
  def update_animation_origin(animation)
    animation.ox  = x - ox + width  / 2
    animation.oy  = y - oy + height / 2
    animation.oy -= height / 2 if animation.position == 0
    animation.oy += height / 2 if animation.position == 2
  end
  #--------------------------------------------------------------------------
  # * New method: update_animation_char
  #--------------------------------------------------------------------------
  def update_animation_char(animation)
    animation.ox   += (animation.map_x - $game_map.display_x) * 32
    animation.oy   += (animation.map_y - $game_map.display_y) * 32
    animation.map_x = $game_map.display_x
    animation.map_y = $game_map.display_y
  end
  #--------------------------------------------------------------------------
  # * New method: dispose_animations
  #--------------------------------------------------------------------------
  def dispose_animations(index)
    animation = @animation[index]
    if animation.bitmap1
      @@_reference_count[animation.bitmap1] -= 1
      animation.bitmap1.dispose if @@_reference_count[animation.bitmap1] == 0
    end
    if animation.bitmap2
      @@_reference_count[animation.bitmap2] -= 1
      animation.bitmap2.dispose if @@_reference_count[animation.bitmap2] == 0
    end
    animation.sprites.each {|sprite| sprite.dispose } if animation.sprites
    @animation.delete(index)
    @anim_index = 0 if @animation.values.empty?
  end
  #--------------------------------------------------------------------------
  # * New method: update_animations
  #--------------------------------------------------------------------------
  def update_animations(index)
    animation = @animation[index]
    animation.duration -= 1
    update_animation_origin(animation) if animation.follow
    update_animation_char(animation)   if charset?
    if animation.duration > 0
      update_animation_frames(animation)
    else
      dispose_animations(index)
    end
  end
  #--------------------------------------------------------------------------
  # * New method: update_animation_frames
  #--------------------------------------------------------------------------
  def update_animation_frames(animation)
    frame = (animation.duration + animation.rate - 1) / animation.rate
    index = animation.frame_max - frame
    animation_set_sprites(animation, animation.frames[index])
    @ani_duplicated = animation.duplicated
    @ani_rate       = animation.rate
    if animation.duration % animation.rate == 1
      @@multi_ani_checker.delete(animation.data)
      animation.timings.each do |timing|
        animation_process_timing(timing) if timing.frame == index
      end
    end
  end
  #--------------------------------------------------------------------------
  # * New method: setup_sprite_pattern
  #--------------------------------------------------------------------------
  def setup_sprite_pattern(animation, pattern, sprite)
    sprite.bitmap  = pattern < 100 ? animation.bitmap1 : animation.bitmap2
    sprite.visible = true
    sprite.src_rect.set(pattern % 5 * 192, pattern % 100 / 5 * 192, 192, 192)
  end
  #--------------------------------------------------------------------------
  # * New method: setup_sprite_position
  #--------------------------------------------------------------------------
  def setup_sprite_position(animation, cell_data, sprite, i)
    if animation.mirror || animation.direction == 6
      sprite.x = animation.ox - cell_data[i, 1] * animation.zoom
      sprite.y = animation.oy + cell_data[i, 2] * animation.zoom
      sprite.angle  = 360 - cell_data[i, 4]
      sprite.mirror = cell_data[i, 5] == 0
    elsif animation.direction == 2
      sprite.x = animation.ox + cell_data[i, 2] * animation.zoom
      sprite.y = animation.oy - cell_data[i, 1] * animation.zoom
      sprite.angle  = cell_data[i, 4] + 90
      sprite.mirror = cell_data[i, 5] == 1
    elsif animation.direction == 8
      sprite.x = animation.ox - cell_data[i, 2] * animation.zoom
      sprite.y = animation.oy + cell_data[i, 1] * animation.zoom
      sprite.angle  = cell_data[i, 4] - 90
      sprite.mirror = cell_data[i, 5] == 1
    else
      sprite.x = animation.ox + cell_data[i, 1] * animation.zoom
      sprite.y = animation.oy + cell_data[i, 2] * animation.zoom
      sprite.angle  = cell_data[i, 4]
      sprite.mirror = cell_data[i, 5] == 1
    end
    sprite.z  = self.z + animation.height
    sprite.ox = 96
    sprite.oy = 96
    sprite.zoom_x     = cell_data[i, 3] * animation.zoom / 100.0
    sprite.zoom_y     = cell_data[i, 3] * animation.zoom / 100.0
    sprite.opacity    = cell_data[i, 6] * self.opacity / 255.0
    sprite.blend_type = cell_data[i, 7]
  end
end

#==============================================================================
# ** Sprite_Character
#------------------------------------------------------------------------------
#  This sprite is used to display characters. It observes a instance of the
# Game_Character class and automatically changes sprite conditions.
#==============================================================================

class Sprite_Character < Sprite_Base
  #--------------------------------------------------------------------------
  # * Overwrite method: move_animation
  #--------------------------------------------------------------------------
  def move_animation(dx, dy)
  end
  #--------------------------------------------------------------------------
  # * New method: charset?
  #--------------------------------------------------------------------------
  def charset?
    return true
  end
end

#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
#  This class performs battle screen processing.
#==============================================================================

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # * Alias method: show_animation
  #--------------------------------------------------------------------------
  alias :show_normal_animation_ve_animations_settings :show_normal_animation
  def show_normal_animation(targets, animation_id, mirror = false)
    animation = $data_animations[animation_id]
    if $imported[:ve_animated_battle] && animation && animation.target_dir?
      targets.each {|target| target.anim_direction = target.direction }
    elsif $imported[:ve_animated_battle] && animation && animation.user_dir?
      targets.each {|target| target.anim_direction = @subject.direction }
    end
    show_normal_animation_ve_animations_settings(targets, animation_id, mirror)
  end
end
 
 

That Bread

Veteran
Veteran
Joined
Jan 4, 2014
Messages
1,623
Reaction score
469
Primarily Uses
Go to script Victors Actors battlers.

Till you reach

 VE_BATTLE_FORMATION = :custom (I changed it to Custom)

  #--------------------------------------------------------------------------

  # * Set battler centralization

  #    When true, battlers are centralized automatically.

  #    Not valid if VE_BATTLE_FORMATION = :custom

  #--------------------------------------------------------------------------

  VE_BATTLE_CENTRALIZE = true

  #--------------------------------------------------------------------------

  # * Set battlers custom positions

  #    Only if VE_BATTLE_FORMATION = :custom, allows to set the position of

  #    all party actors, don't forget to add values for all positions

  #    available if using a party bigger than the default.

  #--------------------------------------------------------------------------

Further down will be formation settings.

There we go! That should do the trick.
 

xcom

Veteran
Veteran
Joined
Mar 13, 2013
Messages
241
Reaction score
63
First Language
English
Primarily Uses
Thank you!  That worked alright.

After setting that one part to CUSTOM like you said.  I adjusted the POSITION_ADJUST to where I like it to be.

One last question, how do you adjust the spacing between the actors themselves? 

I tried adjusting the CUSTOM_POSITION, but it seemed like it didn't change anything.

 VE_BATTLE_CENTRALIZE = :custom
  #--------------------------------------------------------------------------
  # * Set battlers custom positions
  #    Only if VE_BATTLE_FORMATION = :custom, allows to set the position of
  #    all party actors, don't forget to add values for all positions
  #    available if using a party bigger than the default.
  #--------------------------------------------------------------------------
  VE_CUSTOM_POSITION = {
  # Position
    1 => {x: 420, y: 182}, # Position for the first actor.
    2 => {x: 424, y: 218}, # Position for the second actor.
    3 => {x: 428, y: 254}, # Position for the thrid actor.
    4 => {x: 432, y: 290}, # Position for the fourth actor.
  } # Don't remove
  #--------------------------------------------------------------------------
  # * Actors battlers position adjust
  #    Used to adjust the position of all actors battlers.
  #--------------------------------------------------------------------------
  VE_POSITION_ADJUST = {x: 0, y: 0}
  #--------------------------------------------------------------------------
  # * Actors battlers position adjust
  #    Used to adjust the position of all actors battlers.
 
Last edited by a moderator:

That Bread

Veteran
Veteran
Joined
Jan 4, 2014
Messages
1,623
Reaction score
469
Primarily Uses
Those should be able to adjust your actors... what kind of position or formation are you looking for?

Could it be like this?

[IMG]http://i43.photobucket.com/albums/e378/PhotoPhantasizer/Screenshot2014-05-28201515_zps374e8482.png[/IMG]
If so it insert this into the positions

    1 => {x: 430, y: 240}, # Position for the first actor.
    2 => {x: 370, y: 274}, # Position for the second actor.
    3 => {x: 430, y: 304}, # Position for the thrid actor.
    4 => {x: 370, y: 334}, # Position for the fourth actor.

Hope that helps with this odd turn in events.
 

That Bread

Veteran
Veteran
Joined
Jan 4, 2014
Messages
1,623
Reaction score
469
Primarily Uses
Did you set this to true?

  VE_BATTLE_CENTRALIZE = true
 

Rpg Gear

Rpg Gear
Member
Joined
Feb 6, 2016
Messages
14
Reaction score
0
First Language
English
Primarily Uses
RMVXA
i have an error on string 400 and i don't know how to resolve. what can i do about it?
 

mlogan

Global Moderators
Global Mod
Joined
Mar 18, 2012
Messages
16,076
Reaction score
8,913
First Language
English
Primarily Uses
RMMV
@Rpg Gear Please start a new thread detailing your issue with a link to the script you are needing help with.
 
Status
Not open for further replies.

Latest Threads

Latest Posts

Latest Profile Posts

Today was not a really productive day, but at least i got some bust sketches going <3
E7QXZHNXoAIkpG8
hmm in exploring MZ with FOSSIL... I see I'll probably need to stick with MV for now as none of the menu altering plugins I use work on MZ lol. and I don't have the money to dump into what I would need in some cases to update plugins to their MZ versions. Everytime I think of converting, 5 or more reasons popup on why I shouldn't.
Hmm... Game has 91 views, 25 downloads, 5 reviews and netted me 7 additional followers. Meanwhile the image I posted just yesterday on Imgur to showcase it has 45,197 views. Interesting, I think I have a new advertising idea. Also Twitter? The post got 16 retweets, 20 likes, and 1,683 views.... And a whole 3 hits to my game, completely valueless. I am glad I did this game jam, this information is quite valuable.
We're playing another Touch the Stars game jam entry, come join us! :D
Ok is telling someone that their drawing isnt good rude

Forum statistics

Threads
113,657
Messages
1,076,481
Members
147,678
Latest member
SLTY
Top