RMRK is retiring.
Registration is disabled. The site will remain online, but eventually become a read-only archive. More information.

RMRK.net has nothing to do with Blockchains, Cryptocurrency or NFTs. We have been around since the early 2000s, but there is a new group using the RMRK name that deals with those things. We have nothing to do with them.
NFTs are a scam, and if somebody is trying to persuade you to buy or invest in crypto/blockchain/NFT content, please turn them down and save your money. See this video for more information.
[SOLVED] A very quick bug fix

0 Members and 1 Guest are viewing this topic.

***
Rep:
Level 71
Entity Humanoid Interface
Menu Smooth Movement Bug Fix

Hi guys, sorry for another script request topic but I promise this should be very easy to do XD But since my scripter friend is in middle of midterm exams so I don't know who else to turn to \(>o<)/


Description:
Anyway, there are only a very few numbers of working scripts that add a Cursor into the Menu, and except for this one the rest is pretty buggy and has some compatibility issues. However, this script does not show the cursor in the Save and Load screen. It would be very nice if someone would help me to fix this, the script itself is very short so I guess it won't take more than a couple of minutes to get it done. Thank you so much.


What other script are you using?
I don't think any of my other script would affect this little scripts, as I'm using default save/load menu. I have another script which shows a Cursor when selecting monster inside the battle, but as far as I'm aware these two cursor script should not clash at all:


Did you search? And where?
Yes, all to my searching capability: here, rmvx.net, hbgames, rpgrevolution, rpgcrisis, google, etc.


Search terms:
strcat, strcat smooth menu movement, strcat cursor, strcat save, etc.


And I've seen a few people asking for this fix but to no avail, sadly >_<


And the script itself:
Code: [Select]
#==============================================================================
# Cursor Sprite + Smooth Movement Script
#==============================================================================
# Author  : strcat (with edits by S. F. LaValle)
# Version : 1.2
# Date    : 29 / 01 / 2008
#------------------------------------------------------------------------------
# This script will create a new cursor sprite,and add a smooth movement to
# the cursor,thus making your game look better happy.gif
#------------------------------------------------------------------------------
#==============================================================================
# ** STRRGSS2
#==============================================================================
module STRRGSS2
  # Cursor graphic file name
  WCURSOR_FN = "Window_Cursor"
  # position of the cursor(x, y)
  WCURSOR_X = 8
  WCURSOR_Y = 5
end
class Sprite_WindowCursor < Sprite
  WAIT = 20   # numbers of frame for cursor update delay
  CW   = 29   # cursor width
  CH   = 30   # cursor height
end
#==============================================================================
# ** Window_Selectable
#==============================================================================
class Window_Selectable < Window_Base
  #--------------------------------------------------------------------------
  #  * Update Cursor
  #--------------------------------------------------------------------------
  def update_se_cursor
    cr = self.cursor_rect
    r = Rect.new(0, 0, 0, 0)
    y = (self.cursor_rect.height - WLH) / 2
    v = nil
    v = self.viewport if self.viewport != nil
    @strcursor.viewport = v
    @strcursor.x = self.x + 16 + cr.x - WLH + STRRGSS2::WCURSOR_X
    @strcursor.y = self.y + 16 + cr.y + y  + STRRGSS2::WCURSOR_Y
    @strcursor.z = self.z + 16
    @strcursor.opacity += 64
    @strcursor.opacity = self.opacity if @strcursor.opacity > self.opacity
    @strcursor.visible = ((cr != r) and self.openness == 255)
    @strcursor.visible = false unless self.visible
    @strcursor.blink = (not self.active)
    @strcursor.update
  end
  def update_cursor_str(r,rect)
    self.cursor_rect = r
    rect = Rect.new(0, 0, 0, 0) if @index < 0
    mx = self.cursor_rect.x - rect.x
    if mx >= -1 and mx <= 1
      self.cursor_rect.x = rect.x
    elsif mx != 0
      x = self.cursor_rect.x - (mx/2.0)
      self.cursor_rect.x = x
    end
    my = self.cursor_rect.y - rect.y
    if my >= -1 and my <= 1
      self.cursor_rect.y = rect.y
    elsif my != 0
      y = self.cursor_rect.y - (my/2.0)
      self.cursor_rect.y = y
    end
    self.cursor_rect.width = rect.width
    self.cursor_rect.height = rect.height
  end
  def visible=(v)
    super
    @strcursor.visible = v
  end
  def active=(v)
    super
    @strcursor.visible = false
  end
  def dispose
    @strcursor.dispose
    super
  end
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  alias initialize_str05m initialize
  def initialize(x, y, width, height, spacing = 32)
    initialize_str05m(x, y, width, height, spacing)
    file = STRRGSS2::WCURSOR_FN
    v = nil
    v = self.viewport if self.viewport != nil
    @strcursor = Sprite_WindowCursor.new(file, v)
    @f_set = false
  end
  alias update_str05m update
  def update
    update_se_cursor unless @opening
    update_str05m
  end
  alias update_cursor_str05m update_cursor
  def update_cursor
    r = self.cursor_rect.clone unless @f_set
    update_cursor_str05m
    update_cursor_str(r, self.cursor_rect.clone) unless @f_set
    @f_set = false
  end
  #--------------------------------------------------------------------------
  # * Get Index
  #--------------------------------------------------------------------------
  def index=(index)
    @f_set = true
    @index = index
    update_cursor
    call_update_help
  end
end
#==============================================================================
# ** Sprite_WindowCursor
#==============================================================================
class Sprite_WindowCursor < Sprite
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :blink
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(name,viewport)
    super(viewport)
    self.bitmap = Cache.system(name)
    self.src_rect.set(0, 0, CW, CH)
    self.opacity = 0
    @xx = -8
    @wait = 0
    @count = 0
    @blink = false
  end
  #--------------------------------------------------------------------------
  # * Dispose
  #--------------------------------------------------------------------------
  def dispose
    super
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    @xx += 1 if @xx != 0
    self.x += @xx
    @count += 1
    self.opacity = (@count % 32) * 8 if @blink
    @wait -= 0
    return if @wait > 0
    @wait = 0
    self.src_rect.x += CW
    self.src_rect.x = 0 if (self.bitmap.width <= self.src_rect.x)
  end
end


Thank you for your time  :)
« Last Edit: April 25, 2011, 07:37:02 AM by Aurelia »
I support \\(>O<)b




pokeball TDSOffline
***
Rep:
Level 84
-T D S-
Silver - GIAW 11 (Hard)Silver - Game In A Week VII
Well it's not the script request template, but it's an attempt.

The problem is actually very simple.

The windows used in the save file scene do not inherit from the window selectable class which holds the properties of the cursor.

Code: [Select]
#==============================================================================
# ** Window_SaveFile
#------------------------------------------------------------------------------
#  This window displays save files on the save and load screens.
#==============================================================================

class Window_SaveFile < Window_Selectable
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :filename                 # filename
  attr_reader   :file_exist               # file existence flag
  attr_reader   :time_stamp               # timestamp
  attr_reader   :selected                 # selected
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     file_index : save file index (0-3)
  #     filename   : filename
  #--------------------------------------------------------------------------
  def initialize(file_index, filename)
    super(0, 56 + file_index % 4 * 90, 544, 90)
    @file_index = file_index
    @filename = filename
    load_gamedata
    refresh
    @selected = false
  end
  #--------------------------------------------------------------------------
  # * Load Partial Game Data
  #    By default, switches and variables are not used (for expansion use,
  #    such as displaying place names)
  #--------------------------------------------------------------------------
  def load_gamedata
    @time_stamp = Time.at(0)
    @file_exist = FileTest.exist?(@filename)
    if @file_exist
      file = File.open(@filename, "r")
      @time_stamp = file.mtime
      begin
        @characters     = Marshal.load(file)
        @frame_count    = Marshal.load(file)
        @last_bgm       = Marshal.load(file)
        @last_bgs       = Marshal.load(file)
        @game_system    = Marshal.load(file)
        @game_message   = Marshal.load(file)
        @game_switches  = Marshal.load(file)
        @game_variables = Marshal.load(file)
        @total_sec = @frame_count / Graphics.frame_rate
      rescue
        @file_exist = false
      ensure
        file.close
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    name = Vocab::File + " #{@file_index + 1}"
    self.contents.draw_text(4, 0, 200, WLH, name)
    @name_width = contents.text_size(name).width
    if @file_exist
      draw_party_characters(152, 58)
      draw_playtime(0, 34, contents.width - 4, 2)
    end
  end
  #--------------------------------------------------------------------------
  # * Draw Party Characters
  #     x : Draw spot X coordinate
  #     y : Draw spot Y coordinate
  #--------------------------------------------------------------------------
  def draw_party_characters(x, y)
    for i in 0...@characters.size
      name = @characters[i][0]
      index = @characters[i][1]
      draw_character(name, index, x + i * 48, y)
    end
  end
  #--------------------------------------------------------------------------
  # * Draw Play Time
  #     x : Draw spot X coordinate
  #     y : Draw spot Y coordinate
  #     width : Width
  #     align : Alignment
  #--------------------------------------------------------------------------
  def draw_playtime(x, y, width, align)
    hour = @total_sec / 60 / 60
    min = @total_sec / 60 % 60
    sec = @total_sec % 60
    time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
    self.contents.font.color = normal_color
    self.contents.draw_text(x, y, width, WLH, time_string, 2)
  end
  #--------------------------------------------------------------------------
  # * Set Selected
  #     selected : new selected (true = selected, false = unselected)
  #--------------------------------------------------------------------------
  def selected=(selected)
    @selected = selected
    update_cursor
  end
  #--------------------------------------------------------------------------
  # * Update cursor
  #--------------------------------------------------------------------------
  def update_cursor
    if @selected
      self.cursor_rect.set(0, 0, @name_width + 8, WLH)
    else
      self.cursor_rect.empty
    end
  end
end

I have not tested this but it should work.

I only changed the inheritance from Window_Base to Window_Selectable.

Let me know if it works out for you.

Have a nice day.

***
Rep:
Level 71
Entity Humanoid Interface
Well the template is to base on, not necessarily 100% copy as long as enough information is provided I believe :)


I've tested it and it works just great :) Thanks so much TDS XD
I support \\(>O<)b




pokeball TDSOffline
***
Rep:
Level 84
-T D S-
Silver - GIAW 11 (Hard)Silver - Game In A Week VII
Well the template is to base on, not necessarily 100% copy as long as enough information is provided I believe :)


I've tested it and it works just great :) Thanks so much TDS XD

I have a personal rule about taking on requests, if someone puts the effort to use the script request template I put the effort to try and make their scripts. It's not a forum rule to use the script request template, it's just something I look for when taking requests.

Sadly not a lot of people use it, even though it would improve their chances at having their script request fulfilled.

***
Rep:
Level 71
Entity Humanoid Interface
Oh it makes perfect sense. That's a pretty neat personal rule actually :P Hope that everyone else who browses this section will keep in mind once again how to get into your and other scripters' good side.

Anw thanks again :D
I support \\(>O<)b