[XP] Index rectangle won't go through all menus

Started by Moshan, June 06, 2014, 11:11:15 am

Previous topic - Next topic

Moshan

June 06, 2014, 11:11:15 am Last Edit: June 06, 2014, 11:14:41 am by adytza001
  Hello everyone! I'm encountering a very annoying issue and I would be grateful if you could help me through.
 Firstly, before using the VX Engine in my RMXP Project I did not have this problem. I followed Terv's tutorial and succesfully implemented the other engine because the game lagged so much and I had to improve somehow the fps.
 My guess is that this script here cause the problem (because the Zer0 Cms's is the same), but I don't understand why because it doesn't have anything related to the index rectangle:
 
Spoiler: ShowHide
$DEBUG = $TEST = true # Remove this line before releasing your game
module RPG
 module Cache
   @cache = {}
   def self.load_bitmap(folder_name, filename, hue = 0)
     path = folder_name + filename
     if not @cache.include?(path) or @cache[path].disposed?
       if filename != ""
         @cache[path] = Bitmap.new(path)
       else
         @cache[path] = Bitmap.new(32, 32)
       end
     end
     if hue == 0
       @cache[path]
     else
       key = [path, hue]
       if not @cache.include?(key) or @cache[key].disposed?
         @cache[key] = @cache[path].clone
         @cache[key].hue_change(hue)
       end
       @cache[key]
     end
   end
   def self.animation(filename, hue)
     self.load_bitmap("Graphics/Animations/", filename, hue)
   end
   def self.autotile(filename)
     self.load_bitmap("Graphics/Autotiles/", filename)
   end
   def self.battleback(filename)
     self.load_bitmap("Graphics/Battlebacks/", filename)
   end
   def self.battler(filename, hue)
     self.load_bitmap("Graphics/Battlers/", filename, hue)
   end
   def self.character(filename, hue)
     self.load_bitmap("Graphics/Characters/", filename, hue)
   end
   def self.fog(filename, hue)
     self.load_bitmap("Graphics/Fogs/", filename, hue)
   end
   def self.gameover(filename)
     self.load_bitmap("Graphics/Gameovers/", filename)
   end
   def self.icon(filename)
     self.load_bitmap("Graphics/Icons/", filename)
   end
   def self.panorama(filename, hue)
     self.load_bitmap("Graphics/Panoramas/", filename, hue)
   end
   def self.picture(filename)
     self.load_bitmap("Graphics/Pictures/", filename)
   end
   def self.tileset(filename)
     self.load_bitmap("Graphics/Tilesets/", filename)
   end
   def self.title(filename)
     self.load_bitmap("Graphics/Titles/", filename)
   end
   def self.windowskin(filename)
     self.load_bitmap("Graphics/Windowskins/", filename)
   end
   def self.tile(filename, tile_id, hue)
     key = [filename, tile_id, hue]
     if not @cache.include?(key) or @cache[key].disposed?
       @cache[key] = Bitmap.new(32, 32)
       x = (tile_id - 384) % 8 * 32
       y = (tile_id - 384) / 8 * 32
       rect = Rect.new(x, y, 32, 32)
       @cache[key].blt(0, 0, self.tileset(filename), rect)
       @cache[key].hue_change(hue)
     end
     @cache[key]
   end
   def self.clear
     @cache = {}
     GC.start
   end
 end
end

module RPG
 class Sprite < ::Sprite
   @@_animations = []
   @@_reference_count = {}
   def initialize(viewport = nil)
     super(viewport)
     @_whiten_duration = 0
     @_appear_duration = 0
     @_escape_duration = 0
     @_collapse_duration = 0
     @_damage_duration = 0
     @_animation_duration = 0
     @_blink = false
   end
   def dispose
     dispose_damage
     dispose_animation
     dispose_loop_animation
     super
   end
   def whiten
     self.blend_type = 0
     self.color.set(255, 255, 255, 128)
     self.opacity = 255
     @_whiten_duration = 16
     @_appear_duration = 0
     @_escape_duration = 0
     @_collapse_duration = 0
   end
   def appear
     self.blend_type = 0
     self.color.set(0, 0, 0, 0)
     self.opacity = 0
     @_appear_duration = 16
     @_whiten_duration = 0
     @_escape_duration = 0
     @_collapse_duration = 0
   end
   def escape
     self.blend_type = 0
     self.color.set(0, 0, 0, 0)
     self.opacity = 255
     @_escape_duration = 32
     @_whiten_duration = 0
     @_appear_duration = 0
     @_collapse_duration = 0
   end
   def collapse
     self.blend_type = 1
     self.color.set(255, 64, 64, 255)
     self.opacity = 255
     @_collapse_duration = 48
     @_whiten_duration = 0
     @_appear_duration = 0
     @_escape_duration = 0
   end
   def damage(value, critical)
     dispose_damage
     if value.is_a?(Numeric)
       damage_string = value.abs.to_s
     else
       damage_string = value.to_s
     end
     bitmap = Bitmap.new(160, 48)
     bitmap.font.name = "Arial Black"
     bitmap.font.size = 32
     bitmap.font.color.set(0, 0, 0)
     bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
     bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
     bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
     bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
     if value.is_a?(Numeric) and value < 0
       bitmap.font.color.set(176, 255, 144)
     else
       bitmap.font.color.set(255, 255, 255)
     end
     bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
     if critical
       bitmap.font.size = 20
       bitmap.font.color.set(0, 0, 0)
       bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
       bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
       bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
       bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
       bitmap.font.color.set(255, 255, 255)
       bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
     end
     @_damage_sprite = ::Sprite.new(self.viewport)
     @_damage_sprite.bitmap = bitmap
     @_damage_sprite.ox = 80
     @_damage_sprite.oy = 20
     @_damage_sprite.x = self.x
     @_damage_sprite.y = self.y - self.oy / 2
     @_damage_sprite.z = 3000
     @_damage_duration = 40
   end
   def animation(animation, hit)
     dispose_animation
     @_animation = animation
     return if @_animation == nil
     @_animation_hit = hit
     @_animation_duration = @_animation.frame_max
     animation_name = @_animation.animation_name
     animation_hue = @_animation.animation_hue
     bitmap = RPG::Cache.animation(animation_name, animation_hue)
     if @@_reference_count.include?(bitmap)
       @@_reference_count[bitmap] += 1
     else
       @@_reference_count[bitmap] = 1
     end
     @_animation_sprites = []
     if @_animation.position != 3 or not @@_animations.include?(animation)
       for i in 0..15
         sprite = ::Sprite.new(self.viewport)
         sprite.bitmap = bitmap
         sprite.visible = false
         @_animation_sprites.push(sprite)
       end
       unless @@_animations.include?(animation)
         @@_animations.push(animation)
       end
     end
     update_animation
   end
   def loop_animation(animation)
     return if animation == @_loop_animation
     dispose_loop_animation
     @_loop_animation = animation
     return if @_loop_animation == nil
     @_loop_animation_index = 0
     animation_name = @_loop_animation.animation_name
     animation_hue = @_loop_animation.animation_hue
     bitmap = RPG::Cache.animation(animation_name, animation_hue)
     if @@_reference_count.include?(bitmap)
       @@_reference_count[bitmap] += 1
     else
       @@_reference_count[bitmap] = 1
     end
     @_loop_animation_sprites = []
     for i in 0..15
       sprite = ::Sprite.new(self.viewport)
       sprite.bitmap = bitmap
       sprite.visible = false
       @_loop_animation_sprites.push(sprite)
     end
     update_loop_animation
   end
   def dispose_damage
     if @_damage_sprite != nil
       @_damage_sprite.bitmap.dispose
       @_damage_sprite.dispose
       @_damage_sprite = nil
       @_damage_duration = 0
     end
   end
   def dispose_animation
     if @_animation_sprites != nil
       sprite = @_animation_sprites[0]
       if sprite != nil
         @@_reference_count[sprite.bitmap] -= 1
         if @@_reference_count[sprite.bitmap] == 0
           sprite.bitmap.dispose
         end
       end
       for sprite in @_animation_sprites
         sprite.dispose
       end
       @_animation_sprites = nil
       @_animation = nil
     end
   end
   def dispose_loop_animation
     if @_loop_animation_sprites != nil
       sprite = @_loop_animation_sprites[0]
       if sprite != nil
         @@_reference_count[sprite.bitmap] -= 1
         if @@_reference_count[sprite.bitmap] == 0
           sprite.bitmap.dispose
         end
       end
       for sprite in @_loop_animation_sprites
         sprite.dispose
       end
       @_loop_animation_sprites = nil
       @_loop_animation = nil
     end
   end
   def blink_on
     unless @_blink
       @_blink = true
       @_blink_count = 0
     end
   end
   def blink_off
     if @_blink
       @_blink = false
       self.color.set(0, 0, 0, 0)
     end
   end
   def blink?
     @_blink
   end
   def effect?
     @_whiten_duration > 0 or
     @_appear_duration > 0 or
     @_escape_duration > 0 or
     @_collapse_duration > 0 or
     @_damage_duration > 0 or
     @_animation_duration > 0
   end
   def update
     super
     if @_whiten_duration > 0
       @_whiten_duration -= 1
       self.color.alpha = 128 - (16 - @_whiten_duration) * 10
     end
     if @_appear_duration > 0
       @_appear_duration -= 1
       self.opacity = (16 - @_appear_duration) * 16
     end
     if @_escape_duration > 0
       @_escape_duration -= 1
       self.opacity = 256 - (32 - @_escape_duration) * 10
     end
     if @_collapse_duration > 0
       @_collapse_duration -= 1
       self.opacity = 256 - (48 - @_collapse_duration) * 6
     end
     if @_damage_duration > 0
       @_damage_duration -= 1
       case @_damage_duration
       when 38..39
         @_damage_sprite.y -= 4
       when 36..37
         @_damage_sprite.y -= 2
       when 34..35
         @_damage_sprite.y += 2
       when 28..33
         @_damage_sprite.y += 4
       end
       @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
       if @_damage_duration == 0
         dispose_damage
       end
     end
     if @_animation != nil and (Graphics.frame_count % 2 == 0)
       @_animation_duration -= 1
       update_animation
     end
     if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
       update_loop_animation
       @_loop_animation_index += 1
       @_loop_animation_index %= @_loop_animation.frame_max
     end
     if @_blink
       @_blink_count = (@_blink_count + 1) % 32
       if @_blink_count < 16
         alpha = (16 - @_blink_count) * 6
       else
         alpha = (@_blink_count - 16) * 6
       end
       self.color.set(255, 255, 255, alpha)
     end
     @@_animations.clear
   end
   def update_animation
     if @_animation_duration > 0
       frame_index = @_animation.frame_max - @_animation_duration
       cell_data = @_animation.frames[frame_index].cell_data
       position = @_animation.position
       animation_set_sprites(@_animation_sprites, cell_data, position)
       for timing in @_animation.timings
         if timing.frame == frame_index
           animation_process_timing(timing, @_animation_hit)
         end
       end
     else
       dispose_animation
     end
   end
   def update_loop_animation
     frame_index = @_loop_animation_index
     cell_data = @_loop_animation.frames[frame_index].cell_data
     position = @_loop_animation.position
     animation_set_sprites(@_loop_animation_sprites, cell_data, position)
     for timing in @_loop_animation.timings
       if timing.frame == frame_index
         animation_process_timing(timing, true)
       end
     end
   end
   def animation_set_sprites(sprites, cell_data, position)
     for i in 0..15
       sprite = sprites[i]
       pattern = cell_data[i, 0]
       if sprite == nil or pattern == nil or pattern == -1
         sprite.visible = false if sprite != nil
         next
       end
       sprite.visible = true
       sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
       if position == 3
         if self.viewport != nil
           sprite.x = self.viewport.rect.width / 2
           sprite.y = self.viewport.rect.height - 160
         else
           sprite.x = 320
           sprite.y = 240
         end
       else
         sprite.x = self.x - self.ox + self.src_rect.width / 2
         sprite.y = self.y - self.oy + self.src_rect.height / 2
         sprite.y -= self.src_rect.height / 4 if position == 0
         sprite.y += self.src_rect.height / 4 if position == 2
       end
       sprite.x += cell_data[i, 1]
       sprite.y += cell_data[i, 2]
       sprite.z = 2000
       sprite.ox = 96
       sprite.oy = 96
       sprite.zoom_x = cell_data[i, 3] / 100.0
       sprite.zoom_y = cell_data[i, 3] / 100.0
       sprite.angle = cell_data[i, 4]
       sprite.mirror = (cell_data[i, 5] == 1)
       sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
       sprite.blend_type = cell_data[i, 7]
     end
   end
   def animation_process_timing(timing, hit)
     if (timing.condition == 0) or
        (timing.condition == 1 and hit == true) or
        (timing.condition == 2 and hit == false)
       if timing.se.name != ""
         se = timing.se
         Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch)
       end
       case timing.flash_scope
       when 1
         self.flash(timing.flash_color, timing.flash_duration * 2)
       when 2
         if self.viewport != nil
           self.viewport.flash(timing.flash_color, timing.flash_duration * 2)
         end
       when 3
         self.flash(nil, timing.flash_duration * 2)
       end
     end
   end
   def x=(x)
     sx = x - self.x
     if sx != 0
       if @_animation_sprites != nil
         for i in 0..15
           @_animation_sprites[i].x += sx
         end
       end
       if @_loop_animation_sprites != nil
         for i in 0..15
           @_loop_animation_sprites[i].x += sx
         end
       end
     end
     super
   end
   def y=(y)
     sy = y - self.y
     if sy != 0
       if @_animation_sprites != nil
         for i in 0..15
           @_animation_sprites[i].y += sy
         end
       end
       if @_loop_animation_sprites != nil
         for i in 0..15
           @_loop_animation_sprites[i].y += sy
         end
       end
     end
     super
   end
 end
end

module RPG
 class Weather
   def initialize(viewport = nil)
     @type = 0
     @max = 0
     @ox = 0
     @oy = 0
     color1 = Color.new(255, 255, 255, 255)
     color2 = Color.new(255, 255, 255, 128)
     @rain_bitmap = Bitmap.new(7, 56)
     for i in 0..6
       @rain_bitmap.fill_rect(6-i, i*8, 1, 8, color1)
     end
     @storm_bitmap = Bitmap.new(34, 64)
     for i in 0..31
       @storm_bitmap.fill_rect(33-i, i*2, 1, 2, color2)
       @storm_bitmap.fill_rect(32-i, i*2, 1, 2, color1)
       @storm_bitmap.fill_rect(31-i, i*2, 1, 2, color2)
     end
     @snow_bitmap = Bitmap.new(6, 6)
     @snow_bitmap.fill_rect(0, 1, 6, 4, color2)
     @snow_bitmap.fill_rect(1, 0, 4, 6, color2)
     @snow_bitmap.fill_rect(1, 2, 4, 2, color1)
     @snow_bitmap.fill_rect(2, 1, 2, 4, color1)
     @sprites = []
     for i in 1..40
       sprite = Sprite.new(viewport)
       sprite.z = 1000
       sprite.visible = false
       sprite.opacity = 0
       @sprites.push(sprite)
     end
   end
   def dispose
     for sprite in @sprites
       sprite.dispose
     end
     @rain_bitmap.dispose
     @storm_bitmap.dispose
     @snow_bitmap.dispose
   end
   def type=(type)
     return if @type == type
     @type = type
     case @type
     when 1
       bitmap = @rain_bitmap
     when 2
       bitmap = @storm_bitmap
     when 3
       bitmap = @snow_bitmap
     else
       bitmap = nil
     end
     for i in 1..40
       sprite = @sprites[i]
       if sprite != nil
         sprite.visible = (i <= @max)
         sprite.bitmap = bitmap
       end
     end
   end
   def ox=(ox)
     return if @ox == ox;
     @ox = ox
     for sprite in @sprites
       sprite.ox = @ox
     end
   end
   def oy=(oy)
     return if @oy == oy;
     @oy = oy
     for sprite in @sprites
       sprite.oy = @oy
     end
   end
   def max=(max)
     return if @max == max;
     @max = [[max, 0].max, 40].min
     for i in 1..40
       sprite = @sprites[i]
       if sprite != nil
         sprite.visible = (i <= @max)
       end
     end
   end
   def update
     return if @type == 0
     for i in 1..@max
       sprite = @sprites[i]
       if sprite == nil
         break
       end
       if @type == 1
         sprite.x -= 2
         sprite.y += 16
         sprite.opacity -= 8
       end
       if @type == 2
         sprite.x -= 8
         sprite.y += 16
         sprite.opacity -= 12
       end
       if @type == 3
         sprite.x -= 2
         sprite.y += 8
         sprite.opacity -= 8
       end
     x = sprite.x - @ox
     y = sprite.y - @oy
     if sprite.opacity < 64 || x < -50 || x > SCREEN[0] + 150 ||
       y < -300 || y > SCREEN[1] + 32
       sprite.x = rand(SCREEN[0] + 160) - 50 + @ox
       sprite.y = rand(SCREEN[1] + 320) - 200 + @oy
       sprite.opacity = 255
     end
     end
   end
   attr_reader :type
   attr_reader :max
   attr_reader :ox
   attr_reader :oy
 end
end


module RPG
 class Map
   def initialize(width, height)
     @tileset_id = 1
     @width = width
     @height = height
     @autoplay_bgm = false
     @bgm = RPG::AudioFile.new
     @autoplay_bgs = false
     @bgs = RPG::AudioFile.new("", 80)
     @encounter_list = []
     @encounter_step = 30
     @data = Table.new(width, height, 3)
     @events = {}
   end
   attr_accessor :tileset_id
   attr_accessor :width
   attr_accessor :height
   attr_accessor :autoplay_bgm
   attr_accessor :bgm
   attr_accessor :autoplay_bgs
   attr_accessor :bgs
   attr_accessor :encounter_list
   attr_accessor :encounter_step
   attr_accessor :data
   attr_accessor :events
 end
end

module RPG
 class MapInfo
   def initialize
     @name = ""
     @parent_id = 0
     @order = 0
     @expanded = false
     @scroll_x = 0
     @scroll_y = 0
   end
   attr_accessor :name
   attr_accessor :parent_id
   attr_accessor :order
   attr_accessor :expanded
   attr_accessor :scroll_x
   attr_accessor :scroll_y
 end
end

module RPG
 class Event
   def initialize(x, y)
     @id = 0
     @name = ""
     @x = x
     @y = y
     @pages = [RPG::Event::Page.new]
   end
   attr_accessor :id
   attr_accessor :name
   attr_accessor :x
   attr_accessor :y
   attr_accessor :pages
 end
end

module RPG
 class Event
   class Page
     def initialize
       @condition = RPG::Event::Page::Condition.new
       @graphic = RPG::Event::Page::Graphic.new
       @move_type = 0
       @move_speed = 3
       @move_frequency = 3
       @move_route = RPG::MoveRoute.new
       @walk_anime = true
       @step_anime = false
       @direction_fix = false
       @through = false
       @always_on_top = false
       @trigger = 0
       @list = [RPG::EventCommand.new]
     end
     attr_accessor :condition
     attr_accessor :graphic
     attr_accessor :move_type
     attr_accessor :move_speed
     attr_accessor :move_frequency
     attr_accessor :move_route
     attr_accessor :walk_anime
     attr_accessor :step_anime
     attr_accessor :direction_fix
     attr_accessor :through
     attr_accessor :always_on_top
     attr_accessor :trigger
     attr_accessor :list
   end
 end
end

module RPG
 class Event
   class Page
     class Condition
       def initialize
         @switch1_valid = false
         @switch2_valid = false
         @variable_valid = false
         @self_switch_valid = false
         @switch1_id = 1
         @switch2_id = 1
         @variable_id = 1
         @variable_value = 0
         @self_switch_ch = "A"
       end
       attr_accessor :switch1_valid
       attr_accessor :switch2_valid
       attr_accessor :variable_valid
       attr_accessor :self_switch_valid
       attr_accessor :switch1_id
       attr_accessor :switch2_id
       attr_accessor :variable_id
       attr_accessor :variable_value
       attr_accessor :self_switch_ch
     end
   end
 end
end

module RPG
 class Event
   class Page
     class Graphic
       def initialize
         @tile_id = 0
         @character_name = ""
         @character_hue = 0
         @direction = 2
         @pattern = 0
         @opacity = 255
         @blend_type = 0
       end
       attr_accessor :tile_id
       attr_accessor :character_name
       attr_accessor :character_hue
       attr_accessor :direction
       attr_accessor :pattern
       attr_accessor :opacity
       attr_accessor :blend_type
     end
   end
 end
end

module RPG
 class EventCommand
   def initialize(code = 0, indent = 0, parameters = [])
     @code = code
     @indent = indent
     @parameters = parameters
   end
   attr_accessor :code
   attr_accessor :indent
   attr_accessor :parameters
 end
end

module RPG
 class MoveRoute
   def initialize
     @repeat = true
     @skippable = false
     @list = [RPG::MoveCommand.new]
   end
   attr_accessor :repeat
   attr_accessor :skippable
   attr_accessor :list
 end
end

module RPG
         class MoveCommand
               def initialize(code = 0, parameters = [])
                 @code = code
                 @parameters = parameters
               end
               attr_accessor :code
               attr_accessor :parameters
         end
       end
       
       module RPG
 class Actor
   def initialize
     @id = 0
     @name = ""
     @class_id = 1
     @initial_level = 1
     @final_level = 99
     @exp_basis = 30
     @exp_inflation = 30
     @character_name = ""
     @character_hue = 0
     @battler_name = ""
     @battler_hue = 0
     @parameters = Table.new(6,100)
     for i in 1..99
       @parameters[0,i] = 500+i*50
       @parameters[1,i] = 500+i*50
       @parameters[2,i] = 50+i*5
       @parameters[3,i] = 50+i*5
       @parameters[4,i] = 50+i*5
       @parameters[5,i] = 50+i*5
     end
     @weapon_id = 0
     @armor1_id = 0
     @armor2_id = 0
     @armor3_id = 0
     @armor4_id = 0
     @armor5_id = 0
     @weapon_fix = false
     @armor1_fix = false
     @armor2_fix = false
     @armor3_fix = false
     @armor4_fix = false
     @armor5_fix = false
   end
   attr_accessor :id
   attr_accessor :name
   attr_accessor :class_id
   attr_accessor :initial_level
   attr_accessor :final_level
   attr_accessor :exp_basis
   attr_accessor :exp_inflation
   attr_accessor :character_name
   attr_accessor :character_hue
   attr_accessor :battler_name
   attr_accessor :battler_hue
   attr_accessor :parameters
   attr_accessor :weapon_id
   attr_accessor :armor1_id
   attr_accessor :armor2_id
   attr_accessor :armor3_id
   attr_accessor :armor4_id
   attr_accessor :armor5_id
   attr_accessor :weapon_fix
   attr_accessor :armor1_fix
   attr_accessor :armor2_fix
   attr_accessor :armor3_fix
   attr_accessor :armor4_fix
   attr_accessor :armor5_fix
 end
end

module RPG
 class Class
   def initialize
     @id = 0
     @name = ""
     @position = 0
     @weapon_set = []
     @armor_set = []
     @element_ranks = Table.new(1)
     @state_ranks = Table.new(1)
     @learnings = []
   end
   attr_accessor :id
   attr_accessor :name
   attr_accessor :position
   attr_accessor :weapon_set
   attr_accessor :armor_set
   attr_accessor :element_ranks
   attr_accessor :state_ranks
   attr_accessor :learnings
 end
end

module RPG
 class Class
   class Learning
     def initialize
       @level = 1
       @skill_id = 1
     end
     attr_accessor :level
     attr_accessor :skill_id
   end
 end
end

module RPG
 class Skill
   def initialize
     @id = 0
     @name = ""
     @icon_name = ""
     @description = ""
     @scope = 0
     @occasion = 1
     @animation1_id = 0
     @animation2_id = 0
     @menu_se = RPG::AudioFile.new("", 80)
     @common_event_id = 0
     @sp_cost = 0
     @power = 0
     @atk_f = 0
     @eva_f = 0
     @str_f = 0
     @dex_f = 0
     @agi_f = 0
     @int_f = 100
     @hit = 100
     @pdef_f = 0
     @mdef_f = 100
     @variance = 15
     @element_set = []
     @plus_state_set = []
     @minus_state_set = []
   end
   attr_accessor :id
   attr_accessor :name
   attr_accessor :icon_name
   attr_accessor :description
   attr_accessor :scope
   attr_accessor :occasion
   attr_accessor :animation1_id
   attr_accessor :animation2_id
   attr_accessor :menu_se
   attr_accessor :common_event_id
   attr_accessor :sp_cost
   attr_accessor :power
   attr_accessor :atk_f
   attr_accessor :eva_f
   attr_accessor :str_f
   attr_accessor :dex_f
   attr_accessor :agi_f
   attr_accessor :int_f
   attr_accessor :hit
   attr_accessor :pdef_f
   attr_accessor :mdef_f
   attr_accessor :variance
   attr_accessor :element_set
   attr_accessor :plus_state_set
   attr_accessor :minus_state_set
 end
end

module RPG
 class Item
   def initialize
     @id = 0
     @name = ""
     @icon_name = ""
     @description = ""
     @scope = 0
     @occasion = 0
     @animation1_id = 0
     @animation2_id = 0
     @menu_se = RPG::AudioFile.new("", 80)
     @common_event_id = 0
     @price = 0
     @consumable = true
     @parameter_type = 0
     @parameter_points = 0
     @recover_hp_rate = 0
     @recover_hp = 0
     @recover_sp_rate = 0
     @recover_sp = 0
     @hit = 100
     @pdef_f = 0
     @mdef_f = 0
     @variance = 0
     @element_set = []
     @plus_state_set = []
     @minus_state_set = []
   end
   attr_accessor :id
   attr_accessor :name
   attr_accessor :icon_name
   attr_accessor :description
   attr_accessor :scope
   attr_accessor :occasion
   attr_accessor :animation1_id
   attr_accessor :animation2_id
   attr_accessor :menu_se
   attr_accessor :common_event_id
   attr_accessor :price
   attr_accessor :consumable
   attr_accessor :parameter_type
   attr_accessor :parameter_points
   attr_accessor :recover_hp_rate
   attr_accessor :recover_hp
   attr_accessor :recover_sp_rate
   attr_accessor :recover_sp
   attr_accessor :hit
   attr_accessor :pdef_f
   attr_accessor :mdef_f
   attr_accessor :variance
   attr_accessor :element_set
   attr_accessor :plus_state_set
   attr_accessor :minus_state_set
 end
end

module RPG
 class Weapon
   def initialize
     @id = 0
     @name = ""
     @icon_name = ""
     @description = ""
     @animation1_id = 0
     @animation2_id = 0
     @price = 0
     @atk = 0
     @pdef = 0
     @mdef = 0
     @str_plus = 0
     @dex_plus = 0
     @agi_plus = 0
     @int_plus = 0
     @element_set = []
     @plus_state_set = []
     @minus_state_set = []
   end
   attr_accessor :id
   attr_accessor :name
   attr_accessor :icon_name
   attr_accessor :description
   attr_accessor :animation1_id
   attr_accessor :animation2_id
   attr_accessor :price
   attr_accessor :atk
   attr_accessor :pdef
   attr_accessor :mdef
   attr_accessor :str_plus
   attr_accessor :dex_plus
   attr_accessor :agi_plus
   attr_accessor :int_plus
   attr_accessor :element_set
   attr_accessor :plus_state_set
   attr_accessor :minus_state_set
 end
end

module RPG
 class Armor
   def initialize
     @id = 0
     @name = ""
     @icon_name = ""
     @description = ""
     @kind = 0
     @auto_state_id = 0
     @price = 0
     @pdef = 0
     @mdef = 0
     @eva = 0
     @str_plus = 0
     @dex_plus = 0
     @agi_plus = 0
     @int_plus = 0
     @guard_element_set = []
     @guard_state_set = []
   end
   attr_accessor :id
   attr_accessor :name
   attr_accessor :icon_name
   attr_accessor :description
   attr_accessor :kind
   attr_accessor :auto_state_id
   attr_accessor :price
   attr_accessor :pdef
   attr_accessor :mdef
   attr_accessor :eva
   attr_accessor :str_plus
   attr_accessor :dex_plus
   attr_accessor :agi_plus
   attr_accessor :int_plus
   attr_accessor :guard_element_set
   attr_accessor :guard_state_set
 end
end

module RPG
 class Enemy
   def initialize
     @id = 0
     @name = ""
     @battler_name = ""
     @battler_hue = 0
     @maxhp = 500
     @maxsp = 500
     @str = 50
     @dex = 50
     @agi = 50
     @int = 50
     @atk = 100
     @pdef = 100
     @mdef = 100
     @eva = 0
     @animation1_id = 0
     @animation2_id = 0
     @element_ranks = Table.new(1)
     @state_ranks = Table.new(1)
     @actions = [RPG::Enemy::Action.new]
     @exp = 0
     @gold = 0
     @item_id = 0
     @weapon_id = 0
     @armor_id = 0
     @treasure_prob = 100
   end
   attr_accessor :id
   attr_accessor :name
   attr_accessor :battler_name
   attr_accessor :battler_hue
   attr_accessor :maxhp
   attr_accessor :maxsp
   attr_accessor :str
   attr_accessor :dex
   attr_accessor :agi
   attr_accessor :int
   attr_accessor :atk
   attr_accessor :pdef
   attr_accessor :mdef
   attr_accessor :eva
   attr_accessor :animation1_id
   attr_accessor :animation2_id
   attr_accessor :element_ranks
   attr_accessor :state_ranks
   attr_accessor :actions
   attr_accessor :exp
   attr_accessor :gold
   attr_accessor :item_id
   attr_accessor :weapon_id
   attr_accessor :armor_id
   attr_accessor :treasure_prob
 end
end

module RPG
 class Enemy
   class Action
     def initialize
       @kind = 0
       @basic = 0
       @skill_id = 1
       @condition_turn_a = 0
       @condition_turn_b = 1
       @condition_hp = 100
       @condition_level = 1
       @condition_switch_id = 0
       @rating = 5
     end
     attr_accessor :kind
     attr_accessor :basic
     attr_accessor :skill_id
     attr_accessor :condition_turn_a
     attr_accessor :condition_turn_b
     attr_accessor :condition_hp
     attr_accessor :condition_level
     attr_accessor :condition_switch_id
     attr_accessor :rating
   end
 end
end

module RPG
 class Troop
   def initialize
     @id = 0
     @name = ""
     @members = []
     @pages = [RPG::BattleEventPage.new]
   end
   attr_accessor :id
   attr_accessor :name
   attr_accessor :members
   attr_accessor :pages
 end
end

module RPG
 class Troop
   class Member
     def initialize
       @enemy_id = 1
       @x = 0
       @y = 0
       @hidden = false
       @immortal = false
     end
     attr_accessor :enemy_id
     attr_accessor :x
     attr_accessor :y
     attr_accessor :hidden
     attr_accessor :immortal
   end
 end
end

module RPG
 class Troop
   class Page
     def initialize
       @condition = RPG::Troop::Page::Condition.new
       @span = 0
       @list = [RPG::EventCommand.new]
     end
     attr_accessor :condition
     attr_accessor :span
     attr_accessor :list
   end
 end
end

module RPG
 class Troop
   class Page
     class Condition
       def initialize
         @turn_valid = false
         @enemy_valid = false
         @actor_valid = false
         @switch_valid = false
         @turn_a = 0
         @turn_b = 0
         @enemy_index = 0
         @enemy_hp = 50
         @actor_id = 1
         @actor_hp = 50
         @switch_id = 1
       end
       attr_accessor :turn_valid
       attr_accessor :enemy_valid
       attr_accessor :actor_valid
       attr_accessor :switch_valid
       attr_accessor :turn_a
       attr_accessor :turn_b
       attr_accessor :enemy_index
       attr_accessor :enemy_hp
       attr_accessor :actor_id
       attr_accessor :actor_hp
       attr_accessor :switch_id
     end
   end
 end
end

module RPG
 class State
   def initialize
     @id = 0
     @name = ""
     @animation_id = 0
     @restriction = 0
     @nonresistance = false
     @zero_hp = false
     @cant_get_exp = false
     @cant_evade = false
     @slip_damage = false
     @rating = 5
     @hit_rate = 100
     @maxhp_rate = 100
     @maxsp_rate = 100
     @str_rate = 100
     @dex_rate = 100
     @agi_rate = 100
     @int_rate = 100
     @atk_rate = 100
     @pdef_rate = 100
     @mdef_rate = 100
     @eva = 0
     @battle_only = true
     @hold_turn = 0
     @auto_release_prob = 0
     @shock_release_prob = 0
     @guard_element_set = []
     @plus_state_set = []
     @minus_state_set = []
   end
   attr_accessor :id
   attr_accessor :name
   attr_accessor :animation_id
   attr_accessor :restriction
   attr_accessor :nonresistance
   attr_accessor :zero_hp
   attr_accessor :cant_get_exp
   attr_accessor :cant_evade
   attr_accessor :slip_damage
   attr_accessor :rating
   attr_accessor :hit_rate
   attr_accessor :maxhp_rate
   attr_accessor :maxsp_rate
   attr_accessor :str_rate
   attr_accessor :dex_rate
   attr_accessor :agi_rate
   attr_accessor :int_rate
   attr_accessor :atk_rate
   attr_accessor :pdef_rate
   attr_accessor :mdef_rate
   attr_accessor :eva
   attr_accessor :battle_only
   attr_accessor :hold_turn
   attr_accessor :auto_release_prob
   attr_accessor :shock_release_prob
   attr_accessor :guard_element_set
   attr_accessor :plus_state_set
   attr_accessor :minus_state_set
 end
end

module RPG
 class Animation
   def initialize
     @id = 0
     @name = ""
     @animation_name = ""
     @animation_hue = 0
     @position = 1
     @frame_max = 1
     @frames = [RPG::Animation::Frame.new]
     @timings = []
   end
   attr_accessor :id
   attr_accessor :name
   attr_accessor :animation_name
   attr_accessor :animation_hue
   attr_accessor :position
   attr_accessor :frame_max
   attr_accessor :frames
   attr_accessor :timings
 end
end

module RPG
 class Animation
   class Frame
     def initialize
       @cell_max = 0
       @cell_data = Table.new(0, 0)
     end
     attr_accessor :cell_max
     attr_accessor :cell_data
   end
 end
end

module RPG
 class Animation
   class Timing
     def initialize
       @frame = 0
       @se = RPG::AudioFile.new("", 80)
       @flash_scope = 0
       @flash_color = Color.new(255,255,255,255)
       @flash_duration = 5
       @condition = 0
     end
     attr_accessor :frame
     attr_accessor :se
     attr_accessor :flash_scope
     attr_accessor :flash_color
     attr_accessor :flash_duration
     attr_accessor :condition
   end
 end
end

module RPG
 class Tileset
   def initialize
     @id = 0
     @name = ""
     @tileset_name = ""
     @autotile_names = [""]*7
     @panorama_name = ""
     @panorama_hue = 0
     @fog_name = ""
     @fog_hue = 0
     @fog_opacity = 64
     @fog_blend_type = 0
     @fog_zoom = 200
     @fog_sx = 0
     @fog_sy = 0
     @battleback_name = ""
     @passages = Table.new(384)
     @priorities = Table.new(384)
     @priorities[0] = 5
     @terrain_tags = Table.new(384)
   end
   attr_accessor :id
   attr_accessor :name
   attr_accessor :tileset_name
   attr_accessor :autotile_names
   attr_accessor :panorama_name
   attr_accessor :panorama_hue
   attr_accessor :fog_name
   attr_accessor :fog_hue
   attr_accessor :fog_opacity
   attr_accessor :fog_blend_type
   attr_accessor :fog_zoom
   attr_accessor :fog_sx
   attr_accessor :fog_sy
   attr_accessor :battleback_name
   attr_accessor :passages
   attr_accessor :priorities
   attr_accessor :terrain_tags
 end
end

module RPG
 class CommonEvent
   def initialize
     @id = 0
     @name = ""
     @trigger = 0
     @switch_id = 1
     @list = [RPG::EventCommand.new]
   end
   attr_accessor :id
   attr_accessor :name
   attr_accessor :trigger
   attr_accessor :switch_id
   attr_accessor :list
 end
end

module RPG
 class System
   def initialize
     @magic_number = 0
     @party_members = [1]
     @elements = [nil, ""]
     @switches = [nil, ""]
     @variables = [nil, ""]
     @windowskin_name = ""
     @title_name = ""
     @gameover_name = ""
     @battle_transition = ""
     @title_bgm = RPG::AudioFile.new
     @battle_bgm = RPG::AudioFile.new
     @battle_end_me = RPG::AudioFile.new
     @gameover_me = RPG::AudioFile.new
     @cursor_se = RPG::AudioFile.new("", 80)
     @decision_se = RPG::AudioFile.new("", 80)
     @cancel_se = RPG::AudioFile.new("", 80)
     @buzzer_se = RPG::AudioFile.new("", 80)
     @equip_se = RPG::AudioFile.new("", 80)
     @shop_se = RPG::AudioFile.new("", 80)
     @save_se = RPG::AudioFile.new("", 80)
     @load_se = RPG::AudioFile.new("", 80)
     @battle_start_se = RPG::AudioFile.new("", 80)
     @escape_se = RPG::AudioFile.new("", 80)
     @actor_collapse_se = RPG::AudioFile.new("", 80)
     @enemy_collapse_se = RPG::AudioFile.new("", 80)
     @words = RPG::System::Words.new
     @test_battlers = []
     @test_troop_id = 1
     @start_map_id = 1
     @start_x = 0
     @start_y = 0
     @battleback_name = ""
     @battler_name = ""
     @battler_hue = 0
     @edit_map_id = 1
   end
   attr_accessor :magic_number
   attr_accessor :party_members
   attr_accessor :elements
   attr_accessor :switches
   attr_accessor :variables
   attr_accessor :windowskin_name
   attr_accessor :title_name
   attr_accessor :gameover_name
   attr_accessor :battle_transition
   attr_accessor :title_bgm
   attr_accessor :battle_bgm
   attr_accessor :battle_end_me
   attr_accessor :gameover_me
   attr_accessor :cursor_se
   attr_accessor :decision_se
   attr_accessor :cancel_se
   attr_accessor :buzzer_se
   attr_accessor :equip_se
   attr_accessor :shop_se
   attr_accessor :save_se
   attr_accessor :load_se
   attr_accessor :battle_start_se
   attr_accessor :escape_se
   attr_accessor :actor_collapse_se
   attr_accessor :enemy_collapse_se
   attr_accessor :words
   attr_accessor :test_battlers
   attr_accessor :test_troop_id
   attr_accessor :start_map_id
   attr_accessor :start_x
   attr_accessor :start_y
   attr_accessor :battleback_name
   attr_accessor :battler_name
   attr_accessor :battler_hue
   attr_accessor :edit_map_id
 end
end

module RPG
 class System
   class Words
     def initialize
       @gold = ""
       @hp = ""
       @sp = ""
       @str = ""
       @dex = ""
       @agi = ""
       @int = ""
       @atk = ""
       @pdef = ""
       @mdef = ""
       @weapon = ""
       @armor1 = ""
       @armor2 = ""
       @armor3 = ""
       @armor4 = ""
       @armor5 = ""
       @attack = ""
       @skill = ""
       @guard = ""
       @item = ""
       @equip = ""
     end
     attr_accessor :gold
     attr_accessor :hp
     attr_accessor :sp
     attr_accessor :str
     attr_accessor :dex
     attr_accessor :agi
     attr_accessor :int
     attr_accessor :atk
     attr_accessor :pdef
     attr_accessor :mdef
     attr_accessor :weapon
     attr_accessor :armor1
     attr_accessor :armor2
     attr_accessor :armor3
     attr_accessor :armor4
     attr_accessor :armor5
     attr_accessor :attack
     attr_accessor :skill
     attr_accessor :guard
     attr_accessor :item
     attr_accessor :equip
   end
 end
end

module RPG
 class AudioFile
   def initialize(name = "", volume = 100, pitch = 100)
     @name = name
     @volume = volume
     @pitch = pitch
   end
   attr_accessor :name
   attr_accessor :volume
   attr_accessor :pitch
 end
end

 I've also did a video to exemplify my problem: http://youtu.be/43e0wiIhbmc
 As you can see I can use other menus (in my case slots) but the index rectangle won't move after it scrolls.
 Any help would be appreciate!

Soulshaker3

Did you put every script that is needed for the vxa engine? Also one of your scripts could be editing the Window's classes and that would cause some sort of incompatiblity in the engine itself, i'm not experienced but that's my guess
Hellow?

Moshan

 Thank you for replying!
Please, take a look at my project: https://drive.google.com/file/d/0Bz22DF-S1J2nWFlLeU0zbkV0dFU/edit?usp=sharing .
I really can't figure it out. I hope you'll figure out.
Best wishes!

KK20

June 06, 2014, 03:50:42 pm #3 Last Edit: June 06, 2014, 03:51:54 pm by KK20
Pretty sure that script is not the problem, especially because
A) It's placed at the top of the scripts list, meaning it has the highest chance of being rewritten in the scripts below it
B) Those are the classes/modules of RMXP that don't exist in VXA and are needed as such and
C) You said it yourself, it has nothing to do with index

I'll take a quick look at it
if I had permission :P

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

Soulshaker3

Hellow?

KK20

My guess is that it has to with Zer0 CMS not being compatible with the Multi-Equipment, even though I thought I did that fix already (and I think it was for you).

It only happens in VXA but works fine in XP?

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

Moshan

June 06, 2014, 04:49:59 pm #6 Last Edit: June 06, 2014, 04:57:13 pm by adytza001
 I'll upload it on mediafire in 2 minutes...You should have told me earlier that the link does not work.
Thanks for help!


 EDIT: working link https://www.mediafire.com/?x9cnyd78w6t7osz
          And yes, this is happening only with the VXA.

  EDIT 2: Nice avatar KK20!  :^_^':

KK20

June 06, 2014, 07:54:25 pm #7 Last Edit: June 06, 2014, 08:13:02 pm by KK20
lol thanks. Been meaning to switch over to this for a while.

Anyways, the problem appears to be with VXA's RGSS or something. I did this to Window_Base#update_cursor_rect

   # Calculate cursor coordinates
   x = @index % @column_max * (cursor_width + 32)
   #y = @index / @column_max * 32 - self.oy
   y = @index * 32
   # Update cursor rectangle
   self.cursor_rect.set(x, y, cursor_width, 32)

And it worked. I think in XP the rectangle is drawn relative to the window while in VXA it's drawn relative to the window's bitmap.

Now I wonder if this applies to EVERYONE's VXA converted games...

EDIT: Use Drago's code, paste it just above Main.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

LiTTleDRAgo


#==============================================================================
# ** Window_Selectable
#------------------------------------------------------------------------------
#  This window class contains cursor movement and scroll functions.
#==============================================================================

class Window_Selectable < Window_Base
 #--------------------------------------------------------------------------
 # * Update Cursor Rectangle
 #--------------------------------------------------------------------------
 def update_cursor_rect
   return self.cursor_rect.empty if @index < 0
   row      = @index / @column_max
   page_max = (self.page_row_max - 1)
   self.top_row = row            if row < self.top_row
   self.top_row = row - page_max if row > self.top_row + page_max
   cursor_width = self.width / @column_max - 32
   x = @index % @column_max * (cursor_width + 32)
   y = @index / @column_max * 32 #- self.oy
   self.cursor_rect.set(x, y, cursor_width, 32)
 end
end

KK20

Drago, do you know if this is just his problem or if it applies to all VXA converted games?

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

Moshan

 Thank you sooooooo much guys! Everything works fine now!
You are the very best! Like no one ever was.  :^_^':

LiTTleDRAgo

Quote from: KK20 on June 06, 2014, 08:09:15 pm
Drago, do you know if this is just his problem or if it applies to all VXA converted games?


yes, it applies to all VXA converted games

KK20

lol ._.

Shouldn't this, like, be documented? As far as I know, I don't recall anyone reporting this before.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!