Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Help Changing Script From XP To VX

I am trying to take MOG's skill menu script from XP and move it over to VX. I've done pretty well for myself, except I am being stumped on one error. The error it gives me is "On line 98 of Windows_Selectable, undefined method `width' for nil:NilClass". Now I am completely unsure where in the script (MOG_Menu_Skill Nami) the error is coming from or how to solve it. This is the only issue I am having and want fixed. If you could take a look at it and if possible solve it, I would be greatful. Also if you could add an explanation of what was causing the error. I know that in solving this one I will probably lead into another error, but I would like to transfer this game over myself and just need help getting through this hurdle.
Thanks.

http://rapidshare.com/files/150999240/Q ... o.zip.html

For Those without VX:
#_________________________________________________
# MOG_Menu Skill Nami V1.0
#_________________________________________________
# By Moghunter
#_________________________________________________
module MOG
  # Defini磯 de tempo de transi磯.
  MSK_TT = 20
  # Tipo de transi磯.
  MSK_TTT = "004-Blind04"
end
##############
# Game_Actor #
##############
class Game_Actor < Game_Battler
  def now_exp
    return @exp - @exp_list[@level]
  end
  def next_exp
    return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
  end
end
###############
# Window_Base #
###############
class Window_Base < Window
  def draw_lay(x,y)
    lay = Cache.menu("Menu_Status_OBJ")
    #lay = RPG::Cache.picture("MSK_Status")
    cw = lay.width
    ch = lay.height
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(x , y - ch, lay, src_rect)
  end
  def draw_maphp3(actor, x, y)
    back = Cache.menu("MeterBack")
    cw = back.width
    ch = back.height
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(x+65, y - ch +30, back, src_rect)
    meter = Cache.menu("HPMeter")
    cw = meter.width * actor.hp / actor.maxhp
    ch = meter.height
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(x+65, y - ch +30, meter, src_rect)
    self.contents.font.color = Color.new(0,0,0,255)
    self.contents.draw_text(x + 66, y - 1, 100, 32, actor.hp.to_s + "/" + actor.maxhp.to_s, 1)
    self.contents.font.color = Color.new(250,255,255,255)
    self.contents.draw_text(x+65, y - 2, 100, 32, actor.hp.to_s + "/" + actor.maxhp.to_s, 1)
  end
  def draw_mapsp3(actor, x, y)
    back = Cache.menu("MeterBack")
    cw = back.width
    ch = back.height
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(x+ 65 , y - ch +30, back, src_rect)
    meter = Cache.menu("MPMeter")
    cw = meter.width * actor.mp / actor.maxmp
    ch = meter.height
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(x +65 , y - ch+ 30, meter, src_rect)
    self.contents.font.color = Color.new(0,0,0,255)
    self.contents.draw_text(x + 66, y - 1, 100, 32, actor.mp.to_s + "/" + actor.maxmp.to_s, 1)
    self.contents.font.color = Color.new(250,255,255,255)
    self.contents.draw_text(x + 65, y - 2, 100, 32, actor.mp.to_s + "/" + actor.maxmp.to_s, 1)
  end
  ####
  def draw_mexp2(actor, x, y)
    bitmap2 = Cache.menu("MeterBack")
    cw = bitmap2.width
    ch = bitmap2.height
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(x + 60 , y - ch + 30, bitmap2, src_rect)
    rate = actor.now_exp.to_f / actor.next_exp
    bitmap = Cache.menu("EXPMeter")
    if actor.level < 99
      cw = bitmap.width * rate
    else
      cw = bitmap.width
    end
    ch = bitmap.height
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(x + 60 , y - ch + 30, bitmap, src_rect)
    self.contents.font.color = Color.new(0,0,0,255)
    self.contents.draw_text(x + 55, y + 1, 84, 32, "Exp",0)
    self.contents.font.color = Color.new(255,255,255,255)
    self.contents.draw_text(x + 54, y, 84, 32, "Exp",0)
    self.contents.font.color = Color.new(0,0,0,255)
    self.contents.draw_text(x + 190, y - 125, 60, 32,"LV "+ actor.level.to_s, 1)
    self.contents.font.color = Color.new(255,255,255,255)
    self.contents.draw_text(x  +191, y - 124, 60, 32,"LV "+ actor.level.to_s, 1)
  end
  ####
end
#######################
# Window_SkillStatus2 #
#######################
class Window_SkillStatus2 < Window_Base
  def initialize(actor)
    super(350, 75, 290, 340)
    self.contents = Bitmap.new(width - 32, height - 32)
    @actor = actor
    self.opacity = 0
    refresh
  end
  def refresh
    self.contents.clear
    draw_lay(0,300)
    draw_actor_face(@actor, 50, 140)
    draw_actor_name(@actor, 15, 10)
    draw_actor_state(@actor, 120, 140)
    draw_maphp3(@actor, 5, 195)
    draw_mapsp3(@actor, 5, 240)
    draw_mexp2(@actor, -30, 135)
  end
end
#################
# Window_Skill2 #
#################
class Window_Skill2 < Window_Selectable
  def initialize(actor)
    super(0, 95, 335, 290)
    @actor = actor
    @column_max = 1
    refresh
    self.index = 0
  end
  def skill
    return @data[self.index]
  end
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    for i in 0...@actor.skills.size
      skill = $data_skills[@actor.skills]
      if skill != nil
        @data.push(skill)
      end
    end
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end
  def draw_item(index)
    skill = @data[index]
    if @actor.skill_can_use?(skill.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    self.contents.font.name = "Georgia"
    x = index % 1 * (288)
    y = index / 1 * 32
    width = self.width + 32 / @column_max - 32
    rect = Rect.new(x, y, width, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = Cache.icon(skill.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
    self.contents.draw_text(x + 232, y, 48, 32, skill.mp_cost.to_s, 2)
    self.contents.font.color = Color.new(200,200,0,255)
    self.contents.draw_text(x + 170, y, 48, 32, "MP", 2)
  end
  def update_help
    @help_window.set_text(self.skill == nil ? "" : self.skill.description)
  end
end

###############
# Scene_Skill #
###############
class Scene_Skill
  def initialize(actor_index = 0, equip_index = 0)
    @actor_index = actor_index
  end
  def main
    @actor = $game_party.members[@actor_index]
    @msk_lay = Sprite.new
    @msk_lay.bitmap = Cache.menu("Menu_Status_Layout")
    @msk_lay.z = 100
    @msk_back1 = Plane.new
    @msk_back1.bitmap = Cache.menu("Background")
    @msk_back1.z = 10
    @help_window = Window_Help.new
    @help_window.y = 500
    @status_window = Window_SkillStatus2.new(@actor)
    @status_window.z = 110
    @status_window.x = 640
    @skill_window = Window_Skill2.new(@actor)
    @skill_window.help_window = @help_window
    @skill_window.help_window.y = 500
    @target_window = Window_Target.new
    @target_window.x = 304
    @target_window.visible = false
    @target_window.active = false
    @skill_window.opacity = 0
    @help_window.opacity = 0
    @target_window.opacity = 190
    Graphics.transition(10, "Graphics/System/BattleStart", 80)   
    #Graphics.transition(MOG::MSK_TT, "Graphics/Transitions/" MOG::MSK_TTT,80)
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    for i in 0..30
      @status_window.x = 25
      Graphics.update
    end
    Graphics.freeze
    @help_window.dispose
    @status_window.dispose
    @skill_window.dispose
    @target_window.dispose
    @msk_lay.dispose
    @msk_back1.dispose
  end
  def update
    @help_window.update
    @status_window.update
    @skill_window.update
    @target_window.update
    @msk_back1.ox = 1
    @msk_back1.oy = 1
    if @status_window.x > 350
      @status_window.x -= 15
    elsif @status_window.x 425
      @skill_window.help_window.y -= 5
    elsif @skill_window.help_window.y = 3
      @skill_window.active = false
      @target_window.visible = true
      @target_window.active = true
      if @skill.scope == 4 || @skill.scope == 6
        @target_window.index = -1
      elsif @skill.scope == 7
        @target_window.index = @actor_index - 10
      else
        @target_window.index = 0
      end
    else
      if @skill.common_event_id > 0
        $game_temp.common_event_id = @skill.common_event_id
        $game_system.se_play(@skill.menu_se)
        @actor.mp -= @skill.mp_cost
        @status_window.refresh
        @skill_window.refresh
        @target_window.refresh
        $scene = Scene_Map.new
        return
      end
    end
    return
    end
    if Input.trigger?(Input::R) or Input.trigger?(Input::RIGHT)
      $game_system.se_play($data_system.cursor_se)
      @actor_index = 1
      @actor_index %= $game_party.actors.size
      $scene = Scene_Skill.new(@actor_index)
      return
    end
    if Input.trigger?(Input::L) or Input.trigger?(Input::LEFT)
      $game_system.se_play($data_system.cursor_se)
      @actor_index = $game_party.actors.size - 1
      @actor_index %= $game_party.actors.size
      $scene = Scene_Skill.new(@actor_index)
      return
    end
  end
  def update_target
    if Input.trigger?(Input::X)
      $game_system.se_play($data_system.cancel_se)
      @skill_window.active = true
      @target_window.visible = false
      @target_window.active = false
      return
    end
    if Input.trigger?(Input::C)
      unless @actor.skill_can_use?(@skill.id)
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    if @target_window.index == -1
      used = false
      for i in $game_party.actors
        used |= i.skill_effect(@actor, @skill)
      end
    end
    if @target_window.index = 0
      target = $game_party.actors[@target_window.index]
      used = target.skill_effect(@actor, @skill)
    end
    if used
      $game_system.se_play(@skill.menu_se)
      @actor.sp -= @skill.sp_cost
      @status_window.refresh
      @skill_window.refresh
      @target_window.refresh
      if $game_party.all_dead?
        $scene = Scene_Gameover.new
        return
      end
    if @skill.common_event_id > 0
      $game_temp.common_event_id = @skill.common_event_id
      $scene = Scene_Map.new
      return
    end
  end
  unless used
    $game_system.se_play($data_system.buzzer_se)
  end
  return
  end
  end
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top