(HELP!) Problems with Victor Engine ATB Script.

tiagoms

Veteran
Veteran
Joined
May 19, 2014
Messages
181
Reaction score
4
Primarily Uses
Very nice. DoubleX !!!!!

Only one thing (I think you must have missed) in video 2.
It shows a bug where the script does not check (I believe) if the enemy is dead for the time to press the "buttons".
Thus, for example, if the enemy dies in the first or second blow (From skill - Input combo skill), the battle will not end until the combo is completed. example:

1 - Ability "Input skill combo" is enabled. (Okay)
2 - buttons (ok) appears to be pressed
3 - monster is defeated with the first blow (example - Ok)
4 - Battle command does not appear (perfect!)
5 - User's skill "Input skill combo" will no longer be running any of the skills (PERFECT!)
6 - independent of the monster is dead or not, but the window to press the buttons remain active.
7 - Even the monster being killed, the battle will only end after the time stipulated in the script, or after completing the list of buttons to be pressed on skill (Example: Number of abilities in skill = 5 ===> Press the 5 buttons ability).

Ps - if the skill is selected during an incoming attack, battle command appear.

ps2 - This problem occurs ONLY with "Input skill combo." All others are working PERFECTLY.

ps3 - I'm giving you a lot of work, is not it? (LoL) :D

But I'm very grateful


*** EDIT

 

I performed a test with a simple skill (only damage + animation), and when the actor is attacked when he confirms the target, the battle command appears automatically.

 

 

*** EDIT 2

add video and demo.

 

There is a moment during the attack of the enemy, that the problem if you select the action will occur with the "Battle Command"

 

https://drive.google.com/file/d/0B3d2YApCS0RxWHV0VmJ0SGJkVXM/edit?usp=sharing

Test (Yanfly + Bubble).rar
 

Attachments

Last edited by a moderator:

DoubleX

Just a nameless weakling
Veteran
Joined
Jan 2, 2014
Messages
1,787
Reaction score
939
First Language
Chinese
Primarily Uses
N/A
For that input combo skill thing, I highly suspect, with quite some evidences based on both actual tests and code analysis, that it's a bug of the input combo skill script itself.

I've made a fix and it seems to me that it works after some testing, but as the input combo skill is still supported by someone, I've contacted him/her and addressed the issue along with my explanations and fix.

As he/she may decide to include my fix into that script, it may be better to just wait for his/her reply.

For the other issues, I'm dealing with them now :)

Edit: So I ended up making a fix which is probably overdoing:

class << BattleManager #----------------------------------------------------------------------------| # Rewrite method: setup_atb_turn_speed | #----------------------------------------------------------------------------| def setup_atb_turn_speed case VE_ATB_TURN_COUNT # This part is rewritten by this snippet to fix :battlers issue when :battlers then all_alive_members.size # when :actions then VE_ATB_ACTION_COUNT when :time then VE_ATB_TIME_COUNT end end # setup_atb_turn_speed #----------------------------------------------------------------------------| # Alias method: setup_selection | #----------------------------------------------------------------------------| alias setup_selection_common_event setup_selection def setup_selection(battler) # This part is rewritten by this snippet to stop atb sound play and actor command selection when they shouldn't if SceneManager.scene.executing_action? || $game_temp.common_event_reserved? @actor_index = battler.index battler.make_actions else setup_selection_common_event(battler) end # end # setup_selection #----------------------------------------------------------------------------| # New method: all_alive_members | #----------------------------------------------------------------------------| def all_alive_members $game_party.alive_members + $game_troop.alive_members end # all_alive_membersend # BattleManagerclass Game_Actor < Game_Battler #----------------------------------------------------------------------------| # Alias method: prior_command | #----------------------------------------------------------------------------| alias prior_command_battle_symphony prior_command def prior_command # This part is added by this snippet to fix nil @action_input_index issue @action_input_index ||= 0 # prior_command_battle_symphony end # prior_commandend # Game_Actorclass Scene_Battle < Scene_Base #----------------------------------------------------------------------------| # Alias method: use_item | #----------------------------------------------------------------------------| alias use_item_auto_life_follow_up_skill use_item def use_item # This part is rewritten by this snippet to stop using item if at least 1 side is all dead use_item_auto_life_follow_up_skill if !$game_party.all_dead? && !$game_troop.all_dead? # end # use_item #----------------------------------------------------------------------------| # New method: set_current_action | #----------------------------------------------------------------------------| def executing_action? battler = nil $game_party.alive_members.each { |member| if BattleManager.active_battler?(member) battler = member break end } return false if !battler action = battler.current_action return false if !action item = action.item return !item.nil? end # set_current_actionend # Scene_Battle
But if you really want to get rid of "battle command window appearing at the wrong time" when it's clearly an intended feature of victor's atb, you can try my fix that's clearly overkill :)
 
Last edited by a moderator:

tiagoms

Veteran
Veteran
Joined
May 19, 2014
Messages
181
Reaction score
4
Primarily Uses
As I understand it, will not get to 100% as it is a feature of ATB (very good by the way).

I figured eliminate window Batte Command for 2 reasons.
1st and most importantly, the skills that gave "visual error." (Almost abandoned the project because of that)
2nd due to modifications of the battle (Hud and Cursor).

The first is excellent.
The second, when failures appear to battle command at the wrong time occurs, if the enemy is killed, the picture "hangs" on the screen.
If you select the skill on the enemy (which does not exist anymore), the error in cursor (index).

**** EDIT ****

I'm trying to take a picture of the error, when it occurs, but after the last script, apparently, was quite difficult to get a view fails.

*** EDIT 2 ****

30 attempts to achieve.

That's what happens.
In one image, the error in cursor:
1 - Enemy is eliminated
2 - Battle Command Appears
3 - Battle Continues Active because I have a script that Victor creates an animation for when an enemy dies (without it, is very, very hard to find the error with the cursor).
4 - Battle Continues Active, Active Battle Command.
5 - Player tries to select a new enemy.
6 - Error.
(I thought of using the cursor victor, but the cursor does not appear in the battle symphony players, only on enemy troops)

The other case is the same, but when the enemy dies and is not selected a skill ..

imagem.JPG

imagem2.JPG
 
Last edited by a moderator:

DoubleX

Just a nameless weakling
Veteran
Joined
Jan 2, 2014
Messages
1,787
Reaction score
939
First Language
Chinese
Primarily Uses
N/A
Did my fix get rid of those unwanted battle command window appearance?

Btw, that error is clearly a compatibility issue but not a bug. In this case, just stopping the command window from appearing after the battle ends should suffice :)
 

tiagoms

Veteran
Veteran
Joined
May 19, 2014
Messages
181
Reaction score
4
Primarily Uses
Man, if you come to Brazil in 2~3 years, and need a ride (by plane), may seek me you will fly for free = D

HVL I.rar
 

Attachments

DoubleX

Just a nameless weakling
Veteran
Joined
Jan 2, 2014
Messages
1,787
Reaction score
939
First Language
Chinese
Primarily Uses
N/A
So that battle command window still has a rare chance to pop up after the battle ends? If so, you can try this updated snippet which should get rid of this:

Code:
class << BattleManager  #----------------------------------------------------------------------------|  #  Rewrite method: setup_atb_turn_speed                                      |  #----------------------------------------------------------------------------|  def setup_atb_turn_speed    case VE_ATB_TURN_COUNT      # This part is rewritten by this snippet to fix :battlers issue      when :battlers then all_alive_members.size      #      when :actions  then VE_ATB_ACTION_COUNT      when :time     then VE_ATB_TIME_COUNT    end  end # setup_atb_turn_speed  #----------------------------------------------------------------------------|  #  Alias method: setup_selection                                             |  #----------------------------------------------------------------------------|  alias setup_selection_common_event setup_selection  def setup_selection(battler)    # This part is rewritten by this snippet to stop atb sound play and actor command selection when they shouldn't    if SceneManager.scene.executing_action? || $game_temp.common_event_reserved?      @actor_index = battler.index      battler.make_actions    else      setup_selection_common_event(battler)    end    #  end # setup_selection  #----------------------------------------------------------------------------|  #  New method: all_alive_members                                             |  #----------------------------------------------------------------------------|  def all_alive_members    $game_party.alive_members + $game_troop.alive_members  end # all_alive_membersend # BattleManagerclass Game_Actor < Game_Battler  #----------------------------------------------------------------------------|  #  Alias method: prior_command                                               |  #----------------------------------------------------------------------------|  alias prior_command_battle_symphony prior_command  def prior_command    # This part is added by this snippet to fix nil @action_input_index issue    @action_input_index ||= 0    #    prior_command_battle_symphony   end # prior_commandend # Game_Actorclass Scene_Battle < Scene_Base  #----------------------------------------------------------------------------|  #  Alias method: use_item                                                    |  #----------------------------------------------------------------------------|  alias use_item_auto_life_follow_up_skill use_item  def use_item    # This part is rewritten by this snippet to stop using item if at least 1 side is all dead    use_item_auto_life_follow_up_skill if !$game_party.all_dead? && !$game_troop.all_dead?    #  end # use_item  #----------------------------------------------------------------------------|  #  New method: executing_action?                                             |  #----------------------------------------------------------------------------|  def executing_action?    return false if $game_party.all_dead? || $game_troop.all_dead?    battler = nil    $game_party.alive_members.each { |member|      if BattleManager.active_battler?(member)        battler = member        break      end    }    return false if !battler    action = battler.current_action    return false if !action    item = action.item    return !item.nil?  end # executing_action?end # Scene_Battle
 

tiagoms

Veteran
Veteran
Joined
May 19, 2014
Messages
181
Reaction score
4
Primarily Uses
I leave in the same sequence the last demo?

Edit============================

out of curiosity I went to audition oo cursor victor. He showed no problem with the "Index" or any other problem.

When selecting a target, even if "dead", nothing happened.
But the image problem of Hud, the MogHunter continues.

Yes, I know, it is logical that the script would not give the victor problem with the script of the victor. (unless it was a programming error)


ps The problem with the cursor MogHunter and Hud continue.



Code:
#==============================================================================# ** Victor Engine - Target Arrow#------------------------------------------------------------------------------# Author : Victor Sant## Version History:# v 1.00 - 2012.01.15 > First release# v 1.01 - 2012.03.08 > Fixed self action help name display# v 1.02 - 2012.05.30 > Fixed bug with Loop Animation arrow# v 1.03 - 2012.08.02 > Compatibility with Basic Module 1.27# v 1.04 - 2012.11.03 > Compatibility with Direct Commands# > Fixed issue with line 408 undefined method# v 1.05 - 2012.12.24 > Compatibility with Active Time Battle# v 1.06 - 2012.12.30 > Fixed issue with enemy name when cancel selection# v 1.07 - 2013.01.07 > Improved arrow movement# v 1.08 - 2013.01.24 > Compatibility with Toggle Target#------------------------------------------------------------------------------# This script allows to change target selection to a arrow like selection.# It's possible to make it animated and set different graphics for enemies# and actors target selections.# If using the script 'Victor Engine - Loop Animation', it's also possible# to make the cursor an animation#------------------------------------------------------------------------------# Compatibility# Requires the script 'Victor Engine - Basic Module' v 1.27 or higher# If used with 'Victor Engine - Custom Basic Actions' place this bellow it.## * Overwrite methods# class RPG::UsableItem < RPG::BaseItem# def need_selection?## class Window_BattleEnemy < Window_Selectable# def show# def hide# def cursor_movable?# def cursor_down(wrap = false)# def cursor_up(wrap = false)# def cursor_right(wrap = false)# def cursor_left(wrap = false)# def update_help## class Window_BattleActor < Window_BattleStatus# def cursor_movable?# def cursor_down(wrap = false)# def cursor_up(wrap = false)# def cursor_right(wrap = false)# def cursor_left(wrap = false)# def update_help# def update_cursor## * Alias methods# class Window_BattleEnemy < Window_Selectable# def initialize(info_viewport)# def update# def dispose## class Window_BattleActor < Window_BattleStatus# def initialize(info_viewport)# def update# def show# def hide# def update_cursor# def dispose## class Scene_Battle < Scene_Base# def create_actor_window# def create_enemy_window# def command_attack# def on_skill_ok# def on_item_ok# def on_enemy_cancel# def on_actor_cancel##------------------------------------------------------------------------------# 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 scripts 'Victor Engine - Basic'##------------------------------------------------------------------------------# Skills and Items note tags:# Tags to be used on Skills and Items note boxes.## <target description># string# </target description># The target description text, the string is the text, to add a break line# use \\n.##------------------------------------------------------------------------------# Additional instructions:## The cursors graphics must be in the folder Graphics/System.## To use animations as cursors you need the script# 'Victor Engine - Loop Animation' v 1.02 or higher.##==============================================================================#==============================================================================# ** Victor Engine#------------------------------------------------------------------------------# Setting module for the Victor Engine#==============================================================================module Victor_Engine#--------------------------------------------------------------------------# * Set the automatic text control codes# when false, it's needed to add \# on the start of the text to use# control codes#--------------------------------------------------------------------------VE_ARROW_DEFAULT = {name: "Cursor", # Cursor graphic filename ("filename")frames: 4, # Number of frames of the arrow (1 for no animation)speed: 10, # Cursto animation wait time (60 frames = 1 second)height: true, # Adjust arrow based on target heighthelp: true, # Show help window when selecting targetx: 0, # Coordinate x adjusty: 0, # Coordinate y adjustmove: 0, # Set move type. 0 : all directions, 1 : left and right# 2 : up and downanim: 111, # Animation ID displayed as arrow. Requires the script# "Victor Engine - Loop Animation", this makes the# arrow a looping battle animation instead of a# simple bitmap graphic} # Don't remove#--------------------------------------------------------------------------# * Custom arrow settings# Set different configuration for arrows based on the window class# it is being shown. It needs to add only the changed values.# type: {setting},# type: actor: or enemy:#--------------------------------------------------------------------------VE_ARROW_CUSTOM = {actor: {name: "Green Cursor"},enemy: {name: "Blue Cursor"},} # Don't remove#--------------------------------------------------------------------------# * Hide skill window during target selection# Since the window is placed above the battlers, the arrow stay behind# the skill window. you can set it false if the window is placed# in a different position with scripts.#--------------------------------------------------------------------------VE_HIDE_SKILL_WINDOW = true#--------------------------------------------------------------------------# * Hide item window during target selection# Since the window is placed above the battlers, the arrow stay behind# the item window. you can set it false if the window is placed# in a different position with scripts.#--------------------------------------------------------------------------VE_HIDE_ITEM_WINDOW = true#--------------------------------------------------------------------------# * Set the use of target help window#--------------------------------------------------------------------------VE_USE_TARGET_HELP = true#--------------------------------------------------------------------------# * Settings for the target help window.#--------------------------------------------------------------------------VE_TARGET_HELP_WINDOW = {text_align: 1, # Text align, 0: left, 1: center, 2: righttarget_info: true, # If true show target info, if false show skill nameall_enemies: "All Enemies", # Target info for all enemies actionsall_actors: "All Allies", # Target info for all actors actionsall_target: "All Targets", # Target info for all targets actionsrandom_enemy: "Random Enemy", # Target info for random enemy actionsrandom_actor: "Random Ally", # Target info for random actor actionsrandom_target: "Random Target", # Target info for random target actions} # Don't remove#--------------------------------------------------------------------------# * 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/"]http://victorscripts.wordpress.com/[/URL] to download this script."msgbox(sprintf(msg, self.script_name(name), version))exitelseself.required_script(name, req, version, type)endend#--------------------------------------------------------------------------# * 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.splitname.collect! {|char| char == ext ? "#{char} -" : char.capitalize }name.join(" ")endend$imported ||= {}$imported[:ve_target_arrow] = 1.08Victor_Engine.required(:ve_target_arrow, :ve_basic_module, 1.27, :above)Victor_Engine.required(:ve_target_arrow, :ve_toggle_target, 1.00, :bellow)#==============================================================================# ** RPG::UsableItem#------------------------------------------------------------------------------# This is the superclass for skills and items.#==============================================================================class RPG::UsableItem < RPG::BaseItem#--------------------------------------------------------------------------# * Overwrite method: need_selection?#--------------------------------------------------------------------------def need_selection?@scope > 0endend#==============================================================================# ** Window_Selectable#------------------------------------------------------------------------------# This window contains cursor movement and scroll functions.#==============================================================================class Window_Selectable < Window_Base#--------------------------------------------------------------------------# * New method: init_arrow#--------------------------------------------------------------------------def init_arrow@arrows = []@arrows_anim = 0@arrows_value = VE_ARROW_CUSTOM.dup@arrows_value.default = VE_ARROW_DEFAULT.dup@arrows_value.each do |key, value|arrow = @arrows_value[key]arrow[:x] = VE_ARROW_DEFAULT[:x] if !value[:x]arrow[:y] = VE_ARROW_DEFAULT[:y] if !value[:y]arrow[:name] = VE_ARROW_DEFAULT[:name] if !value[:name]arrow[:frames] = VE_ARROW_DEFAULT[:frames] if !value[:frames]arrow[:rect] = VE_ARROW_DEFAULT[:rect] if !value[:rect]arrow[:speed] = VE_ARROW_DEFAULT[:speed] if !value[:speed]arrow[:anim] = VE_ARROW_DEFAULT[:anim] if !value[:anim]arrow[:move] = VE_ARROW_DEFAULT[:move] if !value[:move]arrow[:height] = VE_ARROW_DEFAULT[:height] if !value[:height]endend#--------------------------------------------------------------------------# * New method: init_arrow_sprite#--------------------------------------------------------------------------def init_arrow_sprite(forced = false)dispose_arrow if @arrows_index != @index || forced || item_max == 0return unless activeif target_all? && item_max > 0item_max.times {|i| create_arrow_sprite(i) }elsif @index > -1 && item_max > 0create_arrow_sprite(0)end@arrows_index = @indexupdate_arrow_spriteend#--------------------------------------------------------------------------# * New method: set_action#--------------------------------------------------------------------------def set_action(action)@action = actionend#--------------------------------------------------------------------------# * New method: target_all?#--------------------------------------------------------------------------def target_all?@action && (@action.for_all? || @action.for_random?)end#--------------------------------------------------------------------------# * New method: target_self?#--------------------------------------------------------------------------def target_self?@action && @action.for_user?end#--------------------------------------------------------------------------# * New method: create_arrow_sprite#--------------------------------------------------------------------------def create_arrow_sprite(i)return if @arrows[i]@arrows[i] = Sprite_Base.new@arrows[i].bitmap = Cache.system(arrow_filename)end#--------------------------------------------------------------------------# * New method: arrow_animation#--------------------------------------------------------------------------def arrow_animation?arrow_animation != 0 && $imported[:ve_loop_animation]end#--------------------------------------------------------------------------# * New method: update_arrow_sprite#--------------------------------------------------------------------------def update_arrow_sprite@arrows.each_index do |i|next unless @arrows[i] && target(i)@arrows[i].viewport = target(i).sprite.viewportarrow_animation? ? set_arrow_animation(i) : set_arrow_bitmap(i)update_arrow_position(i)endupdate_all_arrowsend#--------------------------------------------------------------------------# * New method: set_arrow_bitmap#--------------------------------------------------------------------------def set_arrow_bitmap(i)bitmap = @arrows[i].bitmaparrow_width = bitmap.width / arrow_framescurrent_frame = arrow_width * @arrows_anim@arrows[i].src_rect.set(current_frame, 0, arrow_width, bitmap.height)end#--------------------------------------------------------------------------# * New method: set_arrow_animation#--------------------------------------------------------------------------def set_arrow_animation(i)target = target(i)return if !target || target.sprite.loop_anim?(:arrow)settings = {anim: arrow_animation, type: :arrow, loop: 1}target.sprite.add_loop_animation(settings)end#--------------------------------------------------------------------------# * New method: update_arrow_position#--------------------------------------------------------------------------def update_arrow_position(i)adjust = arrow_height ? target(i).sprite.oy / 2 : 0@arrows[i].x = position_x(i) + arrow_x@arrows[i].y = position_y(i) + arrow_y - adjust@arrows[i].z = self.z + 1000@arrows[i].ox = @arrows[i].width / 2@arrows[i].oy = @arrows[i].height / 2end#--------------------------------------------------------------------------# * New method: position_x#--------------------------------------------------------------------------def position_x(i)$imported[:ve_animated_battle] ? target(i).current_x : target(i).screen_xend#--------------------------------------------------------------------------# * New method: position_y#--------------------------------------------------------------------------def position_y(i)$imported[:ve_animated_battle] ? target(i).current_y : target(i).screen_yend#--------------------------------------------------------------------------# * New method: update_all_arrows#--------------------------------------------------------------------------def update_all_arrows@arrows.each {|arrow| arrow.update }end#--------------------------------------------------------------------------# * New method: arrow_frames#--------------------------------------------------------------------------def target_window_typeinstance_of?(Window_BattleEnemy) ? :enemy : :actorend#--------------------------------------------------------------------------# * New method: arrow_filename#--------------------------------------------------------------------------def arrow_filenamearrow_animation? ? "" : @arrows_value[target_window_type][:name]end#--------------------------------------------------------------------------# * New method: arrow_frames#--------------------------------------------------------------------------def arrow_frames[@arrows_value[target_window_type][:frames], 1].maxend#--------------------------------------------------------------------------# * New method: arrow_old_rect#--------------------------------------------------------------------------def arrow_old_rect@arrows_value[target_window_type][:rect]end#--------------------------------------------------------------------------# * New method: arrow_animspeed#--------------------------------------------------------------------------def arrow_animspeed[@arrows_value[target_window_type][:speed], 1].maxend#--------------------------------------------------------------------------# * New method: arrow_x#--------------------------------------------------------------------------def arrow_x@arrows_value[target_window_type][:x]end#--------------------------------------------------------------------------# * New method: arrow_y#--------------------------------------------------------------------------def arrow_y@arrows_value[target_window_type][:y]end#--------------------------------------------------------------------------# * New method: arrow_animation#--------------------------------------------------------------------------def arrow_animation@arrows_value[target_window_type][:anim]end#--------------------------------------------------------------------------# * New method: arrow_height#--------------------------------------------------------------------------def arrow_height@arrows_value[target_window_type][:height]end#--------------------------------------------------------------------------# * New method: arrow_move#--------------------------------------------------------------------------def arrow_move@arrows_value[target_window_type][:move]end#--------------------------------------------------------------------------# * New method: help_info#--------------------------------------------------------------------------def help_infoVE_TARGET_HELP_WINDOWend#--------------------------------------------------------------------------# * New method: target_description#--------------------------------------------------------------------------def target_descriptionreturn "" unless @actionregexp = get_all_values("TARGET DESCRIPTION")text = ""@action.note.scan(regexp) doinfo = $1.dupinfo.gsub!(/\r\n/) { "" }info.gsub!(/\\n/) { "\r\n" }text += infoendtextend#--------------------------------------------------------------------------# * New method: update_target_help#--------------------------------------------------------------------------def update_target_helptext = target_descriptionalign = help_info[:text_align]@help_window.visible = trueif text != ""@help_window.set_info_text(text, align)elseif help_info[:target_info]draw_tartge_info(align)else@help_window.set_item_text(@action, align)endendend#--------------------------------------------------------------------------# * New method: draw_tartge_inf#--------------------------------------------------------------------------def draw_tartge_info(align)if @action.for_one?@help_window.set_target_text(target(0), align)elsif @action.for_all? && @action.for_random?text = help_info[:random_enemies] if @action.for_opponent?text = help_info[:random_actors] if @action.for_friend?text = help_info[:random_target] if @action.for_all_targets?@help_window.set_info_text(text, align)elsif @action.for_all? && !@action.for_random?text = help_info[:all_enemies] if @action.for_opponent?text = help_info[:all_actors] if @action.for_friend?text = help_info[:all_target] if @action.for_all_targets?@help_window.set_info_text(text, align)endendend#==============================================================================# ** Window_Help#------------------------------------------------------------------------------# This window shows skill and item explanations along with actor status.#==============================================================================class Window_Help < Window_Base#--------------------------------------------------------------------------# * Alias method: set_item#--------------------------------------------------------------------------alias :set_item_ve_arrow_arrow :set_itemdef set_item(item)set_item_ve_arrow_arrow(item)refreshend#--------------------------------------------------------------------------# * New method: set_target_text#--------------------------------------------------------------------------def set_target_text(target, align = 0)if target && (target != @target || @target.name != @text)@text = ""@target = target@align = aligntarget_infoendend#--------------------------------------------------------------------------# * New method: set_info_text#--------------------------------------------------------------------------def set_info_text(text, align = 0)if text != @text@text = textcontents.clearadj = @text[/\r\n/i]draw_text(0, 0, width, line_height * (adj ? 1 : 2), @text, align)endend#--------------------------------------------------------------------------# * New method: set_item_text#--------------------------------------------------------------------------def set_item_text(item, align = 0)if item.name != @text@text = item.namecontents.cleariw = item.icon_index == 0 ? 0 : 24text_width = text_size(@text).widthx = align == 0 ? 0 : (contents_width - 24 - text_width) / (3 - align)draw_icon(item.icon_index, x, line_height / 2, true)draw_text(iw + 2, 0, contents_width - iw, line_height * 2, @text, align)endend#--------------------------------------------------------------------------# * New method: target_info#--------------------------------------------------------------------------def target_infocontents.clearchange_color(hp_color(@target))adj = (@target.state_icons + @target.buff_icons).size == 0height = line_height * (adj ? 2 : 1)draw_text(0, 0, contents_width, height, @target.name, @align)draw_target_iconsend#--------------------------------------------------------------------------# * New method: draw_target_icons#--------------------------------------------------------------------------def draw_target_iconsicons = (@target.state_icons + @target.buff_icons)[0, contents_width / 24]x = @align == 0 ? 0 : (contents_width - icons.size * 24) / (3 - @align)icons.each_with_index {|n, i| draw_icon(n, x + 24 * i, line_height) }endend#==============================================================================# ** Window_BattleEnemy#------------------------------------------------------------------------------# This window display a list of enemies on the battle screen.#==============================================================================class Window_BattleEnemy < Window_Selectable#--------------------------------------------------------------------------# * Overwrite method: show#--------------------------------------------------------------------------def showresult = superfix_selection(arrow_move == 1 ? :horz : :vert)select(0)init_arrow_sprite(true)self.visible = falseresultend#--------------------------------------------------------------------------# * Overwrite method: hide#--------------------------------------------------------------------------def hideresult = superdispose_arrowresultend#--------------------------------------------------------------------------# * Overwrite method: enemy#--------------------------------------------------------------------------def enemyenemy_list[@index]end#--------------------------------------------------------------------------# * Overwrite method: cursor_movable?#--------------------------------------------------------------------------def cursor_movable?super && active && !cursor_all && !target_all? && !target_self?end#--------------------------------------------------------------------------# * Overwrite method: cursor_down#--------------------------------------------------------------------------def cursor_down(wrap = false)fix_selection(:vert) if arrow_move != 1 && @mode == :horzselect((index - 1 + item_max) % item_max) if arrow_move != 1end#--------------------------------------------------------------------------# * Overwrite method: cursor_up#--------------------------------------------------------------------------def cursor_up(wrap = false)fix_selection(:vert) if arrow_move != 1 && @mode == :horzselect((index + 1) % item_max) if arrow_move != 1end#--------------------------------------------------------------------------# * Overwrite method: cursor_right#--------------------------------------------------------------------------def cursor_right(wrap = false)fix_selection(:horz) if arrow_move != 2 && @mode == :vertselect((index + 1) % item_max) if arrow_move != 2end#--------------------------------------------------------------------------# * Overwrite method: cursor_left#--------------------------------------------------------------------------def cursor_left(wrap = false)fix_selection(:horz) if arrow_move != 2 && @mode == :vertselect((index - 1 + item_max) % item_max) if arrow_move != 2end#--------------------------------------------------------------------------# * Overwrite method: update_help#--------------------------------------------------------------------------def update_helpupdate_target_helpend#--------------------------------------------------------------------------# * Alias method: initialize#--------------------------------------------------------------------------alias :initialize_ve_arrow_arrow :initializedef initialize(info_viewport)initialize_ve_arrow_arrow(info_viewport)init_arrowend#--------------------------------------------------------------------------# * Alias method: update#--------------------------------------------------------------------------alias :update_ve_arrow_arrow :updatedef updateupdate_ve_arrow_arrowinit_arrow_spriteupdate_arrow_spritereturn if Graphics.frame_count % arrow_animspeed != 0@arrows_anim = (@arrows_anim + 1) % arrow_framesend#--------------------------------------------------------------------------# * Alias method: dispose#--------------------------------------------------------------------------alias :dispose_ve_arrow_arrow :disposedef disposedispose_ve_arrow_arrowdispose_arrowend#--------------------------------------------------------------------------# * New method: enemies#--------------------------------------------------------------------------def enemiesenemy_listend#--------------------------------------------------------------------------# * New method: enemy_list#--------------------------------------------------------------------------def enemy_listenemies = $game_troop.alive_members.dupenemies.sort! {|a, b| b.screen_y <=> a.screen_y } if @mode == :vertenemies.sort! {|a, b| a.screen_x <=> b.screen_x } if @mode == :horzenemiesend#--------------------------------------------------------------------------# * New method: fix_selection#--------------------------------------------------------------------------def fix_selection(type)current = enemy@mode = type@index = enemy_list.index(current)end#--------------------------------------------------------------------------# * New method: target#--------------------------------------------------------------------------def target(i)target_all? ? enemies[i] : enemyend#--------------------------------------------------------------------------# * New method: dispose_arrow#--------------------------------------------------------------------------def dispose_arrowif arrow_animation?enemies.each do |enemy|enemy.sprite && enemy.sprite.end_loop_anim(:arrow)endend@arrows.each {|arrow| arrow.dispose }@arrows.clearendend#==============================================================================# ** Window_BattleActor#------------------------------------------------------------------------------# This window display a list of actors on the battle screen.#==============================================================================class Window_BattleActor < Window_BattleStatus#--------------------------------------------------------------------------# * Overwrite method: cursor_movable?#--------------------------------------------------------------------------def cursor_movable?super && active && !cursor_all && !target_all? && !target_self?end#--------------------------------------------------------------------------# * Overwrite method: cursor_down#--------------------------------------------------------------------------def cursor_down(wrap = false)return if show_actor && arrow_move == 1fix_selection(:vert) if show_actor && arrow_move != 1 && @mode == :horzshow_actor ? select((index + 1) % item_max) : superend#--------------------------------------------------------------------------# * Overwrite method: cursor_up#--------------------------------------------------------------------------def cursor_up(wrap = false)return if show_actor && arrow_move == 1fix_selection(:vert) if show_actor && arrow_move != 1 && @mode == :horzshow_actor ? select((index - 1 + item_max) % item_max) : superend#--------------------------------------------------------------------------# * Overwrite method: cursor_right(#--------------------------------------------------------------------------def cursor_right(wrap = false)return if show_actor && arrow_move == 2fix_selection(:horz) if show_actor && arrow_move != 2 && @mode == :vertshow_actor ? select((index + 1) % item_max) : superend#--------------------------------------------------------------------------# * Overwrite method: cursor_left#--------------------------------------------------------------------------def cursor_left(wrap = false)return if show_actor && arrow_move == 2fix_selection(:horz) if show_actor && arrow_move != 2 && @mode == :vertshow_actor ? select((index - 1 + item_max) % item_max) : superend#--------------------------------------------------------------------------# * Overwrite method: update_help#--------------------------------------------------------------------------def update_helpupdate_target_helpend#--------------------------------------------------------------------------# * Overwrite method: update_cursor#--------------------------------------------------------------------------def update_cursor@cursor_all = cursor_allsuperend#--------------------------------------------------------------------------# * Alias method: initialize#--------------------------------------------------------------------------alias :initialize_ve_arrow_arrow :initializedef initialize(info_viewport)initialize_ve_arrow_arrow(info_viewport)init_arrow if show_actorend#--------------------------------------------------------------------------# * Alias method: update#--------------------------------------------------------------------------alias :update_ve_arrow_arrow :updatedef updateupdate_ve_arrow_arrowreturn unless show_actorinit_arrow_spriteupdate_arrow_spritereturn if Graphics.frame_count % arrow_animspeed != 0@arrows_anim = (@arrows_anim + 1) % arrow_framesend#--------------------------------------------------------------------------# * Alias method: show#--------------------------------------------------------------------------alias :show_ve_arrow_arrow :showdef showif show_actorresult = superself.visible = falseselect(0)resultelseshow_ve_arrow_arrowendend#--------------------------------------------------------------------------# * Alias method: hide#--------------------------------------------------------------------------alias :hide_ve_arrow_arrow :hidedef hideresult = hide_ve_arrow_arrowdispose_arrow if show_actorresultend#--------------------------------------------------------------------------# * Alias method: dispose#--------------------------------------------------------------------------alias :update_cursor_ve_arrow_arrow :update_cursordef update_cursorshow_actor ? cursor_rect.empty : update_cursor_ve_arrow_arrowend#--------------------------------------------------------------------------# * Alias method: dispose#--------------------------------------------------------------------------alias :dispose_ve_arrow_arrow :disposedef disposedispose_ve_arrow_arrowdispose_arrow if show_actorend#--------------------------------------------------------------------------# * New method: cursor_all#--------------------------------------------------------------------------def cursor_all@action && @action.for_all?end#--------------------------------------------------------------------------# * New method: actor#--------------------------------------------------------------------------def actoractor_list[@index]end#--------------------------------------------------------------------------# * New method: actors#--------------------------------------------------------------------------def actorsactor_listend#--------------------------------------------------------------------------# * New method: enemy_list#--------------------------------------------------------------------------def actor_listactors = $game_party.battle_members.dupactors.sort! {|a, b| b.screen_y <=> a.screen_y } if @mode == :vertactors.sort! {|a, b| a.screen_x <=> b.screen_x } if @mode == :horzactorsend#--------------------------------------------------------------------------# * New method: fix_selection#--------------------------------------------------------------------------def fix_selection(type)current = actor@mode = type@index = actor_list.index(current)end#--------------------------------------------------------------------------# * New method: target#--------------------------------------------------------------------------def target(i)@index = BattleManager.actor.index if @action.for_user?target_all? ? actors[i] : actorend#--------------------------------------------------------------------------# * New method: show_actor#--------------------------------------------------------------------------def show_actor$imported[:ve_actor_battlers]end#--------------------------------------------------------------------------# * New method: dispose_arrow#--------------------------------------------------------------------------def dispose_arrowif arrow_animation?actors.each {|actor| actor.sprite.end_loop_anim(:arrow) if actor.sprite }end@arrows.each {|arrow| arrow.dispose }@arrows.clearendend#==============================================================================# ** Scene_Battle#------------------------------------------------------------------------------# This class performs battle screen processing.#==============================================================================class Scene_Battle < Scene_Base#--------------------------------------------------------------------------# * Alias method: create_actor_window#--------------------------------------------------------------------------alias :create_actor_window_ve_arrow_arrow :create_actor_windowdef create_actor_windowcreate_actor_window_ve_arrow_arrow@actor_window.help_window = @help_window if VE_USE_TARGET_HELPend#--------------------------------------------------------------------------# * Alias method: create_enemy_window#--------------------------------------------------------------------------alias :create_enemy_window_ve_arrow_arrow :create_enemy_windowdef create_enemy_windowcreate_enemy_window_ve_arrow_arrow@enemy_window.help_window = @help_window if VE_USE_TARGET_HELPend#--------------------------------------------------------------------------# * Alias method: command_attack#--------------------------------------------------------------------------alias :command_attack_ve_arrow_arrow :command_attackdef command_attackset_window_action($data_skills[BattleManager.actor.attack_skill_id])command_attack_ve_arrow_arrowend#--------------------------------------------------------------------------# * Alias method: on_skill_ok#--------------------------------------------------------------------------alias :on_skill_ok_ve_arrow_arrow :on_skill_okdef on_skill_okset_window_action(@skill_window.item)on_skill_ok_ve_arrow_arrow@skill_window.visible = false if VE_HIDE_SKILL_WINDOWend#--------------------------------------------------------------------------# * Alias method: on_item_ok#--------------------------------------------------------------------------alias :on_item_ok_ve_arrow_arrow :on_item_okdef on_item_okset_window_action(@item_window.item)on_item_ok_ve_arrow_arrow@item_window.visible = false if VE_HIDE_ITEM_WINDOWend#--------------------------------------------------------------------------# * Alias method: on_enemy_cancel#--------------------------------------------------------------------------alias :on_enemy_cancel_ve_arrow_arrow :on_enemy_canceldef on_enemy_cancelon_enemy_cancel_ve_arrow_arrowcase @actor_command_window.current_symbolwhen :skill then @skill_window.visible = truewhen :item then @item_window.visible = truewhen :attack, :direct_skill, :direct_item@help_window.visible = falseendend#--------------------------------------------------------------------------# * Alias method: on_actor_cancel#--------------------------------------------------------------------------alias :on_actor_cancel_ve_arrow_arrow :on_actor_canceldef on_actor_cancelon_actor_cancel_ve_arrow_arrowcase @actor_command_window.current_symbolwhen :skill then @skill_window.visible = truewhen :item then @item_window.visible = truewhen :attack, :direct_skill, :direct_item@help_window.visible = falseendend#--------------------------------------------------------------------------# * New method: set_window_action#--------------------------------------------------------------------------def set_window_action(item)@enemy_window.set_action(item) if item.for_opponent?@enemy_window.update_help if item.for_opponent?@actor_window.set_action(item) if item.for_friend?@actor_window.update_help if item.for_friend?endend
 
Last edited by a moderator:

DoubleX

Just a nameless weakling
Veteran
Joined
Jan 2, 2014
Messages
1,787
Reaction score
939
First Language
Chinese
Primarily Uses
N/A
So would you mind to record a video about your issue? Again this time I can't reproduce any error, or at least I didn't notice any :)
 

tiagoms

Veteran
Veteran
Joined
May 19, 2014
Messages
181
Reaction score
4
Primarily Uses
So would you mind to record a video about your issue? Again this time I can't reproduce any error, or at least I didn't notice any :)
The greatest difficulty, find the bug to get game time, is selecting the right time.

In the beginning was very difficult to detect the error, but now, it is already easy because I already know the time.

https://drive.google.com/file/d/0B3d2YApCS0RxVFVkMU9aVGtTZFk/edit?usp=sharing

https://drive.google.com/file/d/0B3d2YApCS0RxX1FVYTI3bGNSN00/edit?usp=sharing
 

DoubleX

Just a nameless weakling
Veteran
Joined
Jan 2, 2014
Messages
1,787
Reaction score
939
First Language
Chinese
Primarily Uses
N/A
I've improved my fix a bit:

class << BattleManager #----------------------------------------------------------------------------| # Rewrite method: setup_atb_turn_speed | #----------------------------------------------------------------------------| def setup_atb_turn_speed case VE_ATB_TURN_COUNT # This part is rewritten by this snippet to fix :battlers issue when :battlers then all_alive_members.size # when :actions then VE_ATB_ACTION_COUNT when :time then VE_ATB_TIME_COUNT end end # setup_atb_turn_speed #----------------------------------------------------------------------------| # Alias method: setup_selection | #----------------------------------------------------------------------------| alias setup_selection_common_event setup_selection def setup_selection(battler) # This part is rewritten by this snippet to stop atb sound play and actor command selection when they shouldn't if SceneManager.scene.executing_action? || $game_temp.common_event_reserved? @actor_index = battler.index battler.make_actions else setup_selection_common_event(battler) end # end # setup_selection #----------------------------------------------------------------------------| # New method: all_alive_members | #----------------------------------------------------------------------------| def all_alive_members $game_party.alive_members + $game_troop.alive_members end # all_alive_members #----------------------------------------------------------------------------| # New method: action_battlers? | #----------------------------------------------------------------------------| def action_battlers?(battler) @action_battlers.include?(battler) end # action_battlers? end # BattleManagerclass Game_Actor < Game_Battler #----------------------------------------------------------------------------| # Alias method: prior_command | #----------------------------------------------------------------------------| alias prior_command_battle_symphony prior_command def prior_command # This part is added by this snippet to fix nil @action_input_index issue @action_input_index ||= 0 # prior_command_battle_symphony end # prior_commandend # Game_Actorclass Scene_Battle < Scene_Base #----------------------------------------------------------------------------| # Alias method: use_item | #----------------------------------------------------------------------------| alias use_item_auto_life_follow_up_skill use_item def use_item # This part is rewritten by this snippet to stop using item if at least 1 side is all dead use_item_auto_life_follow_up_skill if !$game_party.all_dead? && !$game_troop.all_dead? # end # use_item #----------------------------------------------------------------------------| # New method: executing_action? | #----------------------------------------------------------------------------| def executing_action? return false if $game_party.all_dead? || $game_troop.all_dead? battler = nil $game_party.alive_members.each { |member| if BattleManager.action_battlers?(member) battler = member break end } return false if !battler action = battler.current_action return false if !action item = action.item return !item.nil? end # executing_action?end # Scene_Battle
This should solve at least some, if not all, of your issues :)
 

tiagoms

Veteran
Veteran
Joined
May 19, 2014
Messages
181
Reaction score
4
Primarily Uses
DoubleX, very good. Apparently the problems with the "Battle Command" have been resolved.
If bug exists, regarding the battle command, I still can not find, but I will continue to test.

**** EDIT ******

DoubleX, could not find more faults that were previously mentioned.
There is a slight problem.

1 - enemy attacks you.
2 - during the execution of enemy attack, select and confirm the attack.
3 - note that, by confirming the target, there will be a slight latency of 0.2 to 0.5 seconds.

only occurs in this situation.
I found more flaws.

After much analysis, I noticed that the problem of incompatibility of the mog cursor (you had warned me earlier) can leave the battle damaged.

Unfortunately, as I found very good and beautiful cursor. I hope the future MogHunter solve this problem.

As a solution, so far, left me the cursor Victor Engine, which is also very good, but there is an incompatibility with the symphony, because the cursor appears on the enemies but does not appear on allies.
He also has an add-on "Toggle Target", which makes the change of targets in battle (but it has been reported a bug that's not very nice).

In most, this is the situation.

ps know how to solve the problem of incompatibility of the Tsukihime script (Effect: Banish)? (it is a small script xD)
 
Last edited by a moderator:

DoubleX

Just a nameless weakling
Veteran
Joined
Jan 2, 2014
Messages
1,787
Reaction score
939
First Language
Chinese
Primarily Uses
N/A
For that slight latency, I can't do anything(and I suspect if anyone can) to that as it's not only intended, but also necessary.

It's because only 1 action can be executed at a time. I suspect that's a limitation of the default RMVXA as it seems to me that no one can make executing more than 1 actions at the same time work properly yet unless it's ABS or TBS or something like those. It's ridiculously hard to work well and is also extremely prone to serious problems even if it does work. Just playing more than 1 animation at the same time could go really wrong very easily, not to mention there could probably be way more severe issues that can crash games and turn many battle systems into complete chaos.

So even if a party member confirmed a target, as long as a battler's still executing an action, that party member won't act, otherwise it's basically opening the Pandora's box :)

For that Tsukihime script, I'll have a look on it :D

Edit: Maybe I'll need a more elaborated description(or just a demo right away) to understand your issue.
 
Last edited by a moderator:

tiagoms

Veteran
Veteran
Joined
May 19, 2014
Messages
181
Reaction score
4
Primarily Uses
Battle -> test Also -> Banish (Enemy)  = Works!

Battle -> Test Also -> Banish (Allie) = Erro! (problem with symphony)

I've done the test:
-Symphony
- Manage Tsukihime Effect
- Banish Effect

and the error is exactly what appears in the demo.

Cópia de HVL I.rar
 

Attachments

DoubleX

Just a nameless weakling
Veteran
Joined
Jan 2, 2014
Messages
1,787
Reaction score
939
First Language
Chinese
Primarily Uses
N/A
It seems to me that it's probably a bug in Yami's Battle Engine Symphony itself and I reported that along with my attempted analysis and fix to the Battle Engine Symphony topic. Yami's still supporting it after all :)
 

tiagoms

Veteran
Veteran
Joined
May 19, 2014
Messages
181
Reaction score
4
Primarily Uses
Again, thank you DoubleX.
Regarding the Victor Engine cursor (only the "target arrow." Forget "Togle Target" script), found a solution?

Has been quite difficult to find a compatible ATB cursor (with active mode, as the Victor Engine) + Battle Symphony.
the script MogHunter is beautiful, but there is an incompatibility problem (which has been quoted by you), which is pretty boring.
The Victor (EV - Target Arrow), IN MY VISION AMATEUR, there seems to be is as dynamic as the MogHunter, but it is functional, it suffices that the cursor works on allies actors of the Battle Symphony.

Cópia de HVL I.rar
 

Attachments

Last edited by a moderator:

DoubleX

Just a nameless weakling
Veteran
Joined
Jan 2, 2014
Messages
1,787
Reaction score
939
First Language
Chinese
Primarily Uses
N/A
I've briefly analyzed and tested the target arrow script and it seems to me that you're supposed to use Victor's Actor Battlers as well in order for the target arrow to work on actors. Technically speaking:

def show_actor $imported[:ve_actor_battlers]endThe method show_actor under class Window_BattleActor returns true if and only if Victor's Actor Battlers is used as well and my test results tell me it must return true in order to draw target arrow for actors.
So you may want to try to use that script as well and test if they work with Yami's Battle Engine Symphony :)
 
Last edited by a moderator:

tiagoms

Veteran
Veteran
Joined
May 19, 2014
Messages
181
Reaction score
4
Primarily Uses
Cursor not found one that was 100% compatible.

Had the "Yanfly Battle Engine", he has a "marker" (which is almost a cursor), but it adds to the "lag" in the game is increased (fps drops)

Translation, I have to ask pro yami make a cursor. LoL

Thank DoubleX =)
 

Users Who Are Viewing This Thread (Users: 1, Guests: 1)

Latest Threads

Latest Posts

Latest Profile Posts

Couple hours of work. Might use in my game as a secret find or something. Not sure. Fancy though no? :D
Holy stink, where have I been? Well, I started my temporary job this week. So less time to spend on game design... :(
Cartoonier cloud cover that better fits the art style, as well as (slightly) improved blending/fading... fading clouds when there are larger patterns is still somewhat abrupt for some reason.
Do you Find Tilesetting or Looking for Tilesets/Plugins more fun? Personally I like making my tileset for my Game (Cretaceous Park TM) xD
How many parameters is 'too many'??

Forum statistics

Threads
105,865
Messages
1,017,059
Members
137,574
Latest member
nikisknight
Top