RPG Maker Forums

Hello guys,

I have a problem with Victors script character control.

At first, I have to say that was able to create a custom animation for walk and dash movement, but I cannot create a custom animation for the idle pose.

I want that the character moves his arms and legs a bit as if he ws breathing and not like a statue when there is no movement. In addition I'm using Victor's Diagonal Movement script.

I have the following charsets:

$Brian[F8]

$Brian[f8][diag]

$Brian[F8][wlk]

$Brian[f8][diag][wlk]

$Brian[F8][dsh]

$Brian[f8][diag][dsh]     I call them with the comment:  <actor walk stance 11: "wlk">       and up to this point everything works perfectly.

                                                                                    <actor dash stance 11: "dsh">

Sadly this doesn't rly work for the idle animation.

Furthermore I have the charsets:

$Brian[F8][idle]

$Brian[F8][diag][idle]

I have read in another topic that the idle animation is set up at the charset without a sufix (here $Brian[F8] and $Brian[f8][diag]). But those charset are my normal walking animation

charsets for the Diagonal Movement script. I have tried many different things, but after hours of experimenting I'm even more confused. I hope some1 here in the forum can help

me. Thanks in advance :)

Code:
 #==============================================================================# ** Victor Engine - Character Control#------------------------------------------------------------------------------# Author : Victor Sant## Version History:#  v 1.00 - 2012.01.04 > First release#  v 1.01 - 2012.01.07 > Added Compatibility with Visual Equipment#  v 1.02 - 2012.01.14 > Fixed the positive sign on some Regular Expressions#  v 1.03 - 2012.01.15 > Fixed the Regular Expressions problem with "" and ??#  v 1.04 - 2012.07.25 > Fixed Compatibility with Visual Equipment and#                      > Diagonal Movement#  v 1.05 - 2012.08.02 > Compatibility with Basic Module 1.27#------------------------------------------------------------------------------#  This script allows to control character chaset animations. You can set# different graphis for walking, dashing and jumping, also you can display# pose animations with simple comment call. This allows to animate characters# on the map without the need of long Move Route event commands.#------------------------------------------------------------------------------# Compatibility#   Requires the script 'Victor Engine - Basic Module' v 1.27 or higher#   If used with 'Victor Engine - Multi Frames' place this bellow it.#   If used with 'Victor Engine - Visual Equip' place this bellow it.#   If used with 'Victor Engine - Diagonal Movement' place this bellow it.## * Overwrite methods#   class Game_CharacterBase#     def update_animation## * Alias methods#   class Game_CharacterBase#     def update_animation#     def init_public_members#     def init_private_members#     def update_anime_count#     def update_anime_pattern#     def move_straight(d, turn_ok = true)#     def move_diagonal(horz, vert)#     def update_move#     def update_jump#     def update_stop##   class Game_Interpreter#     def comment_call##   class Sprite_Character < Sprite_Base#     def graphic_changed?#     def update_character_info#     def set_bitmap_name#     def set_bitmap_position##------------------------------------------------------------------------------# Comment calls note tags:#  Tags to be used in events comment box, works like a script call.##  <actor change pose>      <event change pose>#  settings                 settings    #  </actor change pose>     </event change pose>#   Display a custom pose, the pose overide any other pose being currently#   played, add the following values to the settings. The ID must be added,#   other values are optional.#     id: x     : actor index or event ID#     name: "x" : pose sufix name. ("sufix")#     loop      : pose animation loop, if added the pose will repeat.#     lock      : position lock, can't move while playing the pose.#     walk      : walking pose, if not set the pose will stop if walk.#     speed: x  : pose animation speed, higher values makes the animation slow.#     frame: x  : number of frams, can't exceed the max frames of the charset.##  <actor add pose>      <event add pose>#  settings              settings    #  </actor add pose>     </event add pose>#   Display a custom pose, the pose won't be displayed immediately, if there is#   another pose being displayed, it will wait it finish before, you can#   add multiple poses at once to make a long animation, add the following#   values to the settings. The ID must be added, other values are optional.#     id: x     : actor index or event ID#     name: "x" : pose sufix name. ("sufix")#     loop      : pose animation loop, if added the pose will repeat.#     lock      : position lock, can't move while playing the pose.#     walk      : walking pose, if not set the pose will stop if walk.#     speed: x  : pose animation speed, higher values makes the animation slow.#     frame: x  : number of frams, can't exceed the max frames of the charset.##  <actor idle stance i: "x">   <event idle stance i: "x">#  <actor walk stance i: "x">   <event walk stance i: "x">#  <actor dash stance i: "x">   <event dash stance i: "x">#  <actor jump stance i: "x">   <event jump stance i: "x">#   Change the stance for one of the default pose for the actor or event.#     i : actor index or event ID#     x : pose sufix name ("sufix")##  <actor clear stances: i>   <event clear stances: i>#   Clear all changed stances for the actor or event#     i : actor index or event ID##  <actor clear pose: i>   <event clear pose: i>#   Clear halts the current pose exhibition and clear all pose waiting to be#   played.#     i : actor index or event ID##------------------------------------------------------------------------------# Additional instructions:#  #  To properly display the poses you will need a character with the poses.#  You will need to make a new charset, with the same filename + the sufix.##  So if you have a chaset named "Actor1", you will need a charset named#  "Actor1[wlk]" (or whatever you set as the Walk sufix) if you want#  a custom walking pose.##  If a pose graphic don't exist, it will use the default graphic.##  If you make a pose loops, it will be displayed continuously until something#  force it to stop. It may be a movement (only if the settings doesn't include#  the 'walk' option), a pose change, or clear pose.##  Due to the animated frame, the charset may be off the tile center, you#  can solve that by adding [x*] or [y*] to the filename, where * is a number#  positive or negative,that way the position will be adjusted. it must be#  added before any other sufix##  if used with 'Victor Engine - Diagonal Movement' the diagonal movement#  sufix must come before the pose sufix.##  The general order for the sufixes is: filename[x*][y*][diag][pose]##==============================================================================#==============================================================================# ** Victor Engine#------------------------------------------------------------------------------#   Setting module for the Victor Engine#==============================================================================module Victor_Engine #-------------------------------------------------------------------------- # * Default waling pose sufix #-------------------------------------------------------------------------- VE_DEFAULT_WALK_SUFIX = "[wlk]" #-------------------------------------------------------------------------- # * Default dashing pose sufix #-------------------------------------------------------------------------- VE_DEFAULT_DASH_SUFIX = "[dsh]" #-------------------------------------------------------------------------- # * Default jumping pose sufix #-------------------------------------------------------------------------- VE_DEFAULT_JUMP_SUFIX = "[jmp]" #-------------------------------------------------------------------------- # * 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 [url=http://victorscripts.wordpress.com/][URL="http://victorscripts.wordpress.com/%5B/url%5D"]http://victorscripts.wordpress.com/[/url][/URL] 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, don't edit this #-------------------------------------------------------------------------- def self.script_name(name, ext = "VE")   name = name.to_s.gsub("_", " ").upcase.split   name.collect! {|char| char == ext ? "#{char} -" : char.capitalize }   name.join(" ") endend$imported ||= {}$imported[:ve_character_control] = 1.05Victor_Engine.required(:ve_character_control, :ve_basic_module, 1.27, :above)#==============================================================================# ** Game_CharacterBase#------------------------------------------------------------------------------#  This class deals with characters. Common to all characters, stores basic# data, such as coordinates and graphics. It's used as a superclass of the# Game_Character class.#==============================================================================class Game_CharacterBase #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_reader   :pose_sufix attr_accessor :pose_list attr_accessor :idle_stance attr_accessor :walk_stance attr_accessor :dash_stance attr_accessor :jump_stance #-------------------------------------------------------------------------- # * Overwrite method: update_animation #-------------------------------------------------------------------------- def update_animation   update_anime_count   if (@pose_speed != 0 && @anime_count > @pose_speed) ||      (@pose_speed == 0 && @anime_count > 18 - real_move_speed * 2)     update_anime_pattern     @anime_count = 0     change_pose(idle_stance) if @pattern == 0 && @playing_pose && !@pose_loop   end end #-------------------------------------------------------------------------- # * Alias method: init_public_members #-------------------------------------------------------------------------- alias :init_public_members_ve_character_control :init_public_members def init_public_members   init_public_members_ve_character_control   @pose_list  = []   @pose_sufix = ""   clear_stances end #-------------------------------------------------------------------------- # * Alias method: init_private_members #-------------------------------------------------------------------------- alias :init_private_members_ve_character_control :init_private_members def init_private_members   init_private_members_ve_character_control   change_pose(idle_stance) end #-------------------------------------------------------------------------- # * Alias method: update_anime_count #-------------------------------------------------------------------------- alias :update_anime_count_ve_character_control :update_anime_count def update_anime_count   if @playing_pose     @anime_count += 1.5   else     update_anime_count_ve_character_control   end end #-------------------------------------------------------------------------- # * Alias method: update_anime_pattern #-------------------------------------------------------------------------- alias :update_anime_pattern_ve_character_control :update_anime_pattern def update_anime_pattern   if @playing_pose     @pattern = (@pattern + 1) % [frames, @pose_frame].min   else     update_anime_pattern_ve_character_control   end end #-------------------------------------------------------------------------- # * Alias method: move_straight #-------------------------------------------------------------------------- alias :move_straight_ve_character_control :move_straight def move_straight(d, turn_ok = true)   return if @pose_lock   move_straight_ve_character_control(d, turn_ok)   set_fixed_direction if @pose_direction end #-------------------------------------------------------------------------- # * Alias method: move_diagonal #-------------------------------------------------------------------------- alias :move_diagonal_ve_character_control :move_diagonal def move_diagonal(horz, vert)   return if @pose_lock   move_diagonal_ve_character_control(horz, vert)   set_fixed_direction if @pose_direction end #-------------------------------------------------------------------------- # * Alias method: update_move #-------------------------------------------------------------------------- alias :update_move_ve_character_control :update_move def update_move   moving_pose   update_move_ve_character_control end #-------------------------------------------------------------------------- # * Alias method: update_jump #-------------------------------------------------------------------------- alias :update_jump_ve_character_control :update_jump def update_jump   jumping_pose   update_jump_ve_character_control end #-------------------------------------------------------------------------- # * Alias method: update_stop #-------------------------------------------------------------------------- alias :update_stop_ve_character_control :update_stop def update_stop   update_stop_ve_character_control   resting_pose end #-------------------------------------------------------------------------- # * New method: resting_pose #-------------------------------------------------------------------------- def resting_pose   return if @stop_count <= 1 || @playing_pose   change_pose(idle_stance) if pose_sufix != idle_stance end #-------------------------------------------------------------------------- # * New method: jumping_pose #-------------------------------------------------------------------------- def jumping_pose   return if @pose_lock || @pose_walk   change_pose(jump_stance) if pose_sufix != jump_stance end #-------------------------------------------------------------------------- # * New method: moving_pose #-------------------------------------------------------------------------- def moving_pose   return if @pose_lock || @pose_walk   @pose_list.clear   change_pose(walk_stance) if pose_sufix != walk_stance && !dash?   change_pose(dash_stance) if pose_sufix != dash_stance && dash? end #-------------------------------------------------------------------------- # * New method: change_pose #-------------------------------------------------------------------------- def change_pose(sufix)   @playing_pose = false   reset_fixed_pose if @pose_direction   value = {sufix: sufix, anim: 0, speed: 0, frame: frames}   update_pose(value) end #-------------------------------------------------------------------------- # * New method: reset_pose_index #-------------------------------------------------------------------------- def reset_pose_index   @character_index = @real_index   @pose_index = nil end #-------------------------------------------------------------------------- # * New method: reset_fixed_pose #-------------------------------------------------------------------------- def reset_fixed_pose   @direction = @real_direction   @diagonal  = @real_diagonal if $imported[:ve_diagonal_move]   @current_direction = @direction - 2 if $imported[:ve_roatation_turn]   @final_direction   = @direction - 2 if $imported[:ve_roatation_turn]   update_direction if $imported[:ve_roatation_turn]   @pose_direction = nil end #-------------------------------------------------------------------------- # * New method: update_pose #-------------------------------------------------------------------------- def update_pose(pose = default_pose.dup)   pose = get_next_pose(pose)   @pose_sufix = pose[:sufix]   @pose_speed = pose[:speed]   @pose_frame = pose[:frame]   @pose_walk  = pose[:walk]   @pose_loop  = pose[:loop]   @pose_lock  = pose[:lock] && @playing_pose   @pose_direction = pose[:line] * 2 if pose[:line]   @real_direction = @direction   @real_diagonal  = @diagonal if $imported[:ve_diagonal_move]   @anime_count    = 0 unless move_pose?   @pattern        = @playing_pose ? 0 : @original_pattern   set_fixed_direction if @pose_direction end #-------------------------------------------------------------------------- # * New method: set_fixed_direction #-------------------------------------------------------------------------- def set_fixed_direction   @direction = @pose_direction   @diagonal  = 0 if $imported[:ve_diagonal_move]   @current_direction = @direction - 2 if $imported[:ve_roatation_turn]   @final_direction   = @direction - 2 if $imported[:ve_roatation_turn] end #-------------------------------------------------------------------------- # * New method: get_next_pose #-------------------------------------------------------------------------- def get_next_pose(pose)   if pose == default_pose && !@pose_list.empty?     pose = @pose_list.shift     @playing_pose = true   end   pose end #-------------------------------------------------------------------------- # * New method: move_pose? #-------------------------------------------------------------------------- def move_pose?   [walk_stance, dash_stance, jump_stance].include?(pose_sufix) end #-------------------------------------------------------------------------- # * New method: default_pose #-------------------------------------------------------------------------- def default_pose   {sufix: @idle_stance, anim: 0, speed: 0, frame: frames} end #-------------------------------------------------------------------------- # * New method: start_pose #-------------------------------------------------------------------------- def start_pose(pose)   clear_poses   @pose_list.push(pose)   update_pose end #-------------------------------------------------------------------------- # * New method: add_pose #-------------------------------------------------------------------------- def add_pose(pose)   @pose_list.push(pose)   update_pose unless @playing_pose end #-------------------------------------------------------------------------- # * New method: clear_poses #-------------------------------------------------------------------------- def clear_poses   @pose_list.clear   change_pose(idle_stance) end #-------------------------------------------------------------------------- # * New method: clear_stances #-------------------------------------------------------------------------- def clear_stances   @idle_stance = ""   @walk_stance = VE_DEFAULT_WALK_SUFIX   @dash_stance = VE_DEFAULT_DASH_SUFIX   @jump_stance = VE_DEFAULT_JUMP_SUFIX endend#==============================================================================# ** Game_Interpreter#------------------------------------------------------------------------------#  An interpreter for executing event commands. This class is used within the# Game_Map, Game_Troop, and Game_Event classes.#==============================================================================class Game_Interpreter #-------------------------------------------------------------------------- # * Alias method: comment_call #-------------------------------------------------------------------------- alias :comment_call_ve_character_control :comment_call def comment_call   call_clear_pose("EVENT")   call_clear_pose("ACTOR")   call_change_stance("EVENT")   call_change_stance("ACTOR")   call_change_pose("EVENT", "ADD POSE")   call_change_pose("ACTOR", "ADD POSE")   call_change_pose("EVENT", "CHANGE POSE")   call_change_pose("ACTOR", "CHANGE POSE")   comment_call_ve_character_control end #-------------------------------------------------------------------------- # * New method: call_clear_pose #-------------------------------------------------------------------------- def call_clear_pose(type)   note.scan(/<#{type} CLEAR POSE: (\d+)>/i) do     subject = $game_map.events[$1.to_i] if type == "EVENT"     subject = $game_map.actors[$1.to_i] if type == "ACTOR"     next unless subject     subject.clear_poses   end end #-------------------------------------------------------------------------- # * New method: call_clear_stances #-------------------------------------------------------------------------- def call_clear_stances(type)   note.scan(/<#{type} CLEAR STANCES: (\d+)>/i) do     subject = $game_map.events[$1.to_i] if type == "EVENT"     subject = $game_map.actors[$1.to_i] if type == "ACTOR"     next unless subject     subject.clear_stances   end end #-------------------------------------------------------------------------- # * New method: call_change_stance #-------------------------------------------------------------------------- def call_change_stance(type)   regexp = /<#{type} (\w+) STANCE (\d+): #{get_filename}>/i   note.scan(regexp) do |move, id, value|     subject = $game_map.events[id.to_i] if type == "EVENT"     subject = $game_map.actors[id.to_i] if type == "ACTOR"     next unless subject     subject.idle_stance = value if move.upcase == "IDLE"     subject.walk_stance = value if move.upcase == "WALK"     subject.dash_stance = value if move.upcase == "DASH"     subject.jump_stance = value if move.upcase == "JUMP"   end end #-------------------------------------------------------------------------- # * New method: call_change_pose #-------------------------------------------------------------------------- def call_change_pose(type, add)   note.scan(get_all_values("#{type} #{add}")) do     value = $1.dup     if value =~ /ID: (\d+)/i       subject = $game_map.events[$1.to_i] if type == "EVENT"       subject = $game_map.actors[$1.to_i] if type == "ACTOR"       next unless subject       stance = subject.idle_stance       pose   = {}       pose[:sufix] = value =~ /NAME: #{get_filename}/i ? $1 : stance       pose[:loop]  = value =~ /LOOP/i       pose[:lock]  = value =~ /LOCK/i       pose[:walk]  = value =~ /WALK/i       pose[:speed] = value =~ /SPEED: (\d+)/i   ? $1.to_i : 0       pose[:line]  = value =~ /LINE: ([1234])/i ? $1.to_i : nil       pose[:frame] = value =~ /FRAMES: (\d+)/i  ? $1.to_i : subject.frames       subject.start_pose(pose) if add.upcase == "CHANGE POSE"       subject.add_pose(pose)   if add.upcase == "ADD POSE"     end   end endend#==============================================================================# ** 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 #-------------------------------------------------------------------------- # * Alias method: graphic_changed? #-------------------------------------------------------------------------- alias :graphic_changed_ve_character_control? :graphic_changed? def graphic_changed?   graphic_changed_ve_character_control? ||   @pose_sufix != @character.pose_sufix end #-------------------------------------------------------------------------- # * Alias method: update_character_info #-------------------------------------------------------------------------- alias :update_character_info_ve_character_control :update_character_info def update_character_info   update_character_info_ve_character_control   @pose_sufix = @character.pose_sufix end #-------------------------------------------------------------------------- # * Alias method: set_bitmap_name #-------------------------------------------------------------------------- alias :set_bitmap_name_ve_character_control :set_bitmap_name def set_bitmap_name   sufix = ($imported[:ve_diagonal_move] ? diagonal_sufix : "") + @pose_sufix   if $imported[:ve_visual_equip]     return set_bitmap_name_ve_character_control   elsif character_exist?(@character_name + sufix)     return @character_name + sufix   elsif character_exist?(@character_name + @pose_sufix)     return @character_name + @pose_sufix   else     return set_bitmap_name_ve_character_control   end end #-------------------------------------------------------------------------- # * Alias method: set_bitmap_position #-------------------------------------------------------------------------- alias :set_bitmap_position_ve_character_control :set_bitmap_position def set_bitmap_position   set_bitmap_position_ve_character_control   self.ox -= (@character_name[/\[x([+-]?\d+)\]/i] ? $1.to_i : 0)   self.oy -= (@character_name[/\[y([+-]?\d+)\]/i] ? $1.to_i : 0) endend#==============================================================================# ** Window_Base#------------------------------------------------------------------------------#  This is a superclass of all windows in the game.#==============================================================================class Window_Base < Window #-------------------------------------------------------------------------- # * Alias method: draw_character #-------------------------------------------------------------------------- alias :draw_character_ve_character_control :draw_character def draw_character(character_name, character_index, x, y, parts = nil)   return unless character_name   x += (character_name[/\[x([+-]?\d+)\]/i] ? $1.to_i : 0)   y += (character_name[/\[y([+-]?\d+)\]/i] ? $1.to_i : 0)   args = [character_name, character_index, x, y]   args.push(parts) if $imported[:ve_visual_equip]   draw_character_ve_character_control(*args) endend

Latest Threads

Latest Profile Posts

Don't forget, aspiring writers: Personality isn't what your characters do, it is WHY they do it.
Hello! I would like to know if there are any pluggings or any way to customize how battles look?
I was thinking that when you start the battle for it to appear the eyes of your characters and opponents sorta like Ace Attorney.
Sadly I don't know how that would be possible so I would be needing help! If you can help me in any way I would really apreciate it!
The biggest debate we need to complete on which is better, Waffles or Pancakes?
rux
How is it going? :D
Day 9 of giveaways! 8 prizes today :D

Forum statistics

Threads
106,048
Messages
1,018,545
Members
137,834
Latest member
EverNoir
Top