[RMVX ACE] SMALL PROBLEM WITH VICTOR SANT'S CHARACTER CONTROL SCRIPT
Posts
Pages:
1
The script works fine except for one small detail that I don't know how to fix. Before I get to explaining my problem, note that I'm also using Victor's Multi Frame script and Cystal Engine's Party Leader script (but the problem is still there even if I remove these extra scripts).
Whenever I'm moving my actor, the animation for walk and run works fine. But whenever I'm NOT moving my actor, he just stands there lifeless despite the animated sprites I made for his main character set. Here the names of each images (each having 6 frames per direction):

(I made the last one cause I thought it might work. Unfortunately, it didn't)
I tried using the comment calls, but, still no dice.
Here is Victor's Character Control script:
#==============================================================================
# ** 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" (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 or 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
#
#==============================================================================
#==============================================================================
# ** Victor Engine
#------------------------------------------------------------------------------
# Setting module for the Victor Engine
#==============================================================================
module Victor_Engine
#--------------------------------------------------------------------------
# * Default waling pose sufix
#--------------------------------------------------------------------------
VE_DEFAULT_WALK_SUFIX = ""
#--------------------------------------------------------------------------
# * Default dashing pose sufix
#--------------------------------------------------------------------------
VE_DEFAULT_DASH_SUFIX = ""
#--------------------------------------------------------------------------
# * Default jumping pose sufix
#--------------------------------------------------------------------------
VE_DEFAULT_JUMP_SUFIX = ""
#--------------------------------------------------------------------------
# * 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
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, 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(" ")
end
end
$imported ||= {}
$imported = 1.05
Victor_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) % .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
@current_direction = @direction - 2 if $imported
@final_direction = @direction - 2 if $imported
update_direction if $imported
@pose_direction = nil
end
#--------------------------------------------------------------------------
# * New method: update_pose
#--------------------------------------------------------------------------
def update_pose(pose = default_pose.dup)
pose = get_next_pose(pose)
@pose_sufix = pose
@pose_speed = pose
@pose_frame = pose
@pose_walk = pose
@pose_loop = pose
@pose_lock = pose && @playing_pose
@pose_direction = pose * 2 if pose
@real_direction = @direction
@real_diagonal = @diagonal if $imported
@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
@current_direction = @direction - 2 if $imported
@final_direction = @direction - 2 if $imported
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?
.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
end
end
#==============================================================================
# ** 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 if type == "EVENT"
subject = $game_map.actors 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 if type == "EVENT"
subject = $game_map.actors 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 if type == "EVENT"
subject = $game_map.actors 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 if type == "EVENT"
subject = $game_map.actors if type == "ACTOR"
next unless subject
stance = subject.idle_stance
pose = {}
pose = value =~ /NAME: #{get_filename}/i ? $1 : stance
pose = value =~ /LOOP/i
pose = value =~ /LOCK/i
pose = value =~ /WALK/i
pose = value =~ /SPEED: (\d+)/i ? $1.to_i : 0
pose = value =~ /LINE: ()/i ? $1.to_i : nil
pose = 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
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
#--------------------------------------------------------------------------
# * 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 ? diagonal_sufix : "") + @pose_sufix
if $imported
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)
end
end
#==============================================================================
# ** 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 =
args.push(parts) if $imported
draw_character_ve_character_control(*args)
end
end
Thank you in advance for the help!
Whenever I'm moving my actor, the animation for walk and run works fine. But whenever I'm NOT moving my actor, he just stands there lifeless despite the animated sprites I made for his main character set. Here the names of each images (each having 6 frames per direction):

(I made the last one cause I thought it might work. Unfortunately, it didn't)
I tried using the comment calls, but, still no dice.
Here is Victor's Character Control script:
#==============================================================================
# ** 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" (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 or 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
#
#==============================================================================
#==============================================================================
# ** Victor Engine
#------------------------------------------------------------------------------
# Setting module for the Victor Engine
#==============================================================================
module Victor_Engine
#--------------------------------------------------------------------------
# * Default waling pose sufix
#--------------------------------------------------------------------------
VE_DEFAULT_WALK_SUFIX = ""
#--------------------------------------------------------------------------
# * Default dashing pose sufix
#--------------------------------------------------------------------------
VE_DEFAULT_DASH_SUFIX = ""
#--------------------------------------------------------------------------
# * Default jumping pose sufix
#--------------------------------------------------------------------------
VE_DEFAULT_JUMP_SUFIX = ""
#--------------------------------------------------------------------------
# * 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
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, 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(" ")
end
end
$imported ||= {}
$imported = 1.05
Victor_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) % .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
@current_direction = @direction - 2 if $imported
@final_direction = @direction - 2 if $imported
update_direction if $imported
@pose_direction = nil
end
#--------------------------------------------------------------------------
# * New method: update_pose
#--------------------------------------------------------------------------
def update_pose(pose = default_pose.dup)
pose = get_next_pose(pose)
@pose_sufix = pose
@pose_speed = pose
@pose_frame = pose
@pose_walk = pose
@pose_loop = pose
@pose_lock = pose && @playing_pose
@pose_direction = pose * 2 if pose
@real_direction = @direction
@real_diagonal = @diagonal if $imported
@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
@current_direction = @direction - 2 if $imported
@final_direction = @direction - 2 if $imported
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?
.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
end
end
#==============================================================================
# ** 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 if type == "EVENT"
subject = $game_map.actors 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 if type == "EVENT"
subject = $game_map.actors 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 if type == "EVENT"
subject = $game_map.actors 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 if type == "EVENT"
subject = $game_map.actors if type == "ACTOR"
next unless subject
stance = subject.idle_stance
pose = {}
pose = value =~ /NAME: #{get_filename}/i ? $1 : stance
pose = value =~ /LOOP/i
pose = value =~ /LOCK/i
pose = value =~ /WALK/i
pose = value =~ /SPEED: (\d+)/i ? $1.to_i : 0
pose = value =~ /LINE: ()/i ? $1.to_i : nil
pose = 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
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
#--------------------------------------------------------------------------
# * 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 ? diagonal_sufix : "") + @pose_sufix
if $imported
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)
end
end
#==============================================================================
# ** 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 =
args.push(parts) if $imported
draw_character_ve_character_control(*args)
end
end
Thank you in advance for the help!
Your using Victor's scripts is the problem. Not only are they hard to use, but if your using almost any other script there will be compatibility problems. Try cutting and pasting out all other scripts below main and try doing this using only Victor's scripts before adding in other scripts.
As I mentioned, nothing changes even if I remove any other non-Victor scripts (in case, just Crystal's Party Leader script).
If my problem is that I'm using Victor's script, do you happen to know any scripts that functions the same as Victor's Multi Frame and Character Control scripts.
Thank you!
I would need a better description of what the scripts actually do than the website provides.
ie. "This script allows to use charset graphics with a number of frames different from 3."
I don't even understand this.
Edit:
Also, both these scripts require victor's core.
Ok... What I need are scripts that allows me to do the following:
1) Multi Frame - Have my character's spriteset to have more animation frames for each direction than the standard 3 frames. This is to make my characters have smooth animations in the overworld/map.
2) Character Control - Have different animation for my characters when they're idle (not moving), walking and running (g.e. when idle, you can see the character breathing). Also, this script has to be compatible with a Multi Frame script.
Either two separate scripts or one script with both functions will do fine.
As for requiring Victor's core... uhhh.... With all due respect, duh...
Pages:
1













