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.
2 Simple Script Requests

0 Members and 1 Guest are viewing this topic.

*
Rep:
Level 97
2014 Most Unsung Member2014 Best RPG Maker User - Engine2013 Best RPG Maker User (Scripting)2012 Best Member2012 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Use of Avatar and Signature Space2011 Best RPG Maker User (Scripting)2011 Most Mature Member2011 Favourite Staff Member2011 Best Veteran2010 Best Use Of Avatar And Signature Space2010 Favourite Staff Member
This is pretty simple. I don't want to take any major requests, but since I want to try out RGSS2 and I need ideas, I am petitioning you for your aid. Basically, just request a script that you think ought to be simple, and I will write the script. I don't want anything too time consuming, even if they are simple (like CMSes), but I am more looking for simple features that you guys would like implemented. For instance, requests like my Extra Movement Frames script and the skill teaching Weapons/Items/Armors are what I am looking for.

Anyway, 1 request per person. 5 3 2 Total. I retain the right to refuse to take any script request and I do not need to justify my response (though I probably will)
« Last Edit: April 11, 2008, 09:42:07 PM by modern algebra »

********
Rep:
Level 96
2011 Most Missed Member2010 Zero To Hero
Modern: Could you make script that allows the following?:

1. When text is being displayed, it displays letter by letter, and plays a sound of the user's choice.
2. When the user selects a face set, there is an option for animating it. It would work like this:
  • There are two files for every given faceset, "Name-a" and "Name-b".
  • The user selects the first face from a file called "faceset-a".
  • When the text begins to display, every time a character is drawn the selected face alters between the selected face on "faceset-a" and the same spot on "faceset-b"
  • When the text is completely displayed, the face stops animating and defaults to the selected image on "faceset-a".

I'd love you loads if you could.

Also, whatever happened to the script you were making me for XP? I don't mind if you don't want to do it anymore, but I would most certainly like at least an update to its status.

*
Rep:
Level 97
2014 Most Unsung Member2014 Best RPG Maker User - Engine2013 Best RPG Maker User (Scripting)2012 Best Member2012 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Use of Avatar and Signature Space2011 Best RPG Maker User (Scripting)2011 Most Mature Member2011 Favourite Staff Member2011 Best Veteran2010 Best Use Of Avatar And Signature Space2010 Favourite Staff Member
Yeah, sorry about that. I keep putting it off like a douchebag. If you still want it, I'll get back to work on it.

As for the rest -> I can probably do it. I will have to do some research perhaps, but the letter by letter should not provide a real challenge. The other is a really interestin idea. I'll give them a try. Also though, the default display for messages is letter by letter. Do you want me to make that slower?
« Last Edit: February 19, 2008, 03:32:10 AM by modern algebra »

********
Rep:
Level 96
2011 Most Missed Member2010 Zero To Hero
...seriously? My messages keep coming up as all at once. Perhaps I've messed with a script and forgotten about it, I will check back on that.

And if you would do that script, I would most certainly love you for it, but please don't feel pressured if you don't want to. :3

*
Rep:
Level 97
2014 Most Unsung Member2014 Best RPG Maker User - Engine2013 Best RPG Maker User (Scripting)2012 Best Member2012 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Use of Avatar and Signature Space2011 Best RPG Maker User (Scripting)2011 Most Mature Member2011 Favourite Staff Member2011 Best Veteran2010 Best Use Of Avatar And Signature Space2010 Favourite Staff Member
I'm working on the animated facesets now. What I have is basically that for the regular graphic, it must have _a at the end of it, then the second should have _b after it. We'll see how that will work.

*
Rep:
Level 97
2014 Most Unsung Member2014 Best RPG Maker User - Engine2013 Best RPG Maker User (Scripting)2012 Best Member2012 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Use of Avatar and Signature Space2011 Best RPG Maker User (Scripting)2011 Most Mature Member2011 Favourite Staff Member2011 Best Veteran2010 Best Use Of Avatar And Signature Space2010 Favourite Staff Member
Sorry, I just read that you wanted -a and -b, not _a and _b, but unless you have serious objections, I think I will stick with the underscores. Anyway, here's what I have so far. I decided I would take your request and just go all out and make an Advanced Message System. Since I needed to overwrite a major method of Window_Message, my script would have been incompatible with pretty much any other message system, and I figured I could add in all those features, so why not?

Well, one reason why not is that I could easily have made mistakes. It might throw errors so I suggest you test it in a non-critical project, or a test project. I doubt anything will corrupt the entire project, but it won't hurt to be careful. Anyway yeah, there's a bunch of stuff in the code that you never asked for. Take a look in the comments for what those are.

Code: [Select]
#=======================================================================
#  Modern Algebra Message Script
#  Version 0.5
#  Author: modern algebra
#  February 22, 2008
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#  Special Thanks to:
#      Arrow-1 for the request. I loved the animated facesets idea
#      Zeriab for his regular expressions tutorial
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#  Current Features:
#     - Precise letter-by-letter timing control
#     - Animated Facesets
#     - Can play a sound effect with each letter drawn
#     - numerous additional codes - see below for all the codes
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#  Current Codes:
#     - \< Slows the speed at which the text is drawn
#     - \> Increases the speed at which the text is drawn
#     - \b bold text
#     - \i italicized text
#     - \name[text] name box
#     - \ne[enemy_id] name of enemy
#     - \ni[item_id] Name of item
#     - \nw[weapon_id] Name of weapon
#     - \na[armor_id] Name of Armor
#     - \pi[item_id] price of item
#     - \pw[weapon_id] price of weapon
#     - \pa[armor_id] price of Armor
#     - \icon[icon_index] draw icon assigned to icon_index
#     - \iicon[item_id] draw icon of item
#     - \wicon[weapon_id] draw icon of weapon
#     - \aicon[armor_id] draw icon of armor
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#  Instructions:
#    Fill in the constants below for default settings. You can change pretty much all of these
#    constants in-game with the codes:
#
#        Message_Options.letter_by_letter_sound = true/false
#        Message_Options.message_se = 'filename'
#        Message_Options.default_timing = integer (lower = faster)
#        Message_Options.namebox_windowskin = 'Windowskin'
#        Message_Options.namebox_color = integer (0..32)
#        Message_Options.namebox_fontname = 'font name'
#        Message_Options.namebox_fontsize = 'Windowskin'
#        Message_Options.namebox_offset_x = integer
#        Message_Options.namebox_offset_y = integer
#        Message_Options.opacity = integer (0..255)
#
#  To use animated facesets, merely use a face graphic that ends with _a and you must have
#  another faceset with the same name but ending with _b.
#=======================================================================

module Message_Options
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Constants
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  DEFAULT_TIMING = 0 # The default amount of frames between each letter as it is drawn
  LETTER_BY_LETTER_SOUND = true # Whether there should be an SE played with each character drawn
  MESSAGE_SE = 'Open1' # The SE to be played if LETTER_BY_LETTER_SOUND == true
  ANIMATED_FACESETS = true  # true => active animated facesets; false => deactivated
  NAMEBOX_WINDOWSKIN = "Window" # The windowskin for the name box
  NAMEBOX_COLOR = 5 # The Color of the text in the namebox
  NAMEBOX_FONTNAME = 'Times New Roman' # The Font of the namebox
  NAMEBOX_FONTSIZE = 20 # The Size of the text in the namebox
  NAMEBOX_OFFSET_X = 16 # How much the Namebox is in the X direction away from default
  NAMEBOX_OFFSET_Y = 16 # How much the Namebox is in the Y direction away from default
  NAMEBOX_OPACITY = 100 # The opacity of the name box
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Message SE (Lazy Initialization)
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.message_se
    self.message_se = MESSAGE_SE if @message_se.nil?
    return @message_se
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Message SE =
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.message_se= (file_name)
    @message_se = RPG::SE.new  (file_name)
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Message_SE_Active?
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.message_se_active?
    @letter_by_letter_sound = LETTER_BY_LETTER_SOUND if @letter_by_letter_sound.nil?
    return @letter_by_letter_sound 
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Letter BY Letter Sound =
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.letter_by_letter_sound= (boolean)
    @letter_by_letter_sound = boolean
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Windowskin
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_windowskin
    @namebox_windowskin = Cache.system (NAMEBOX_WINDOWSKIN) if @namebox_windowskin == nil
    return @namebox_windowskin
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Windowskin=
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_windowskin= (string)
    @namebox_windowskin = Cache.system (string)
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Color
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_color
    @namebox_color = NAMEBOX_COLOR if @namebox_color == nil
    return @namebox_color
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Color=
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_color= (value)
    @namebox_color = value
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Fontname
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_fontname
    @namebox_font = NAMEBOX_FONTNAME if @namebox_font == nil
    return @namebox_font
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Fontname=
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_fontname= (string)
    @namebox_font = string
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Fontsize
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_fontsize
    @namebox_fontsize = NAMEBOX_FONTSIZE if @namebox_fontsize == nil
    return @namebox_fontsize
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Fontsize=
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_fontsize= (value)
    @namebox_fontsize = value
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Offset X
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_offset_x
    @namebox_x = NAMEBOX_OFFSET_X if @namebox_x == nil
    return @namebox_x
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Offset X=
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_offset_x= (value)
    @namebox_x = value
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Offset Y
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_offset_y
    @namebox_y = NAMEBOX_OFFSET_Y if @namebox_y == nil
    return @namebox_y
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Offset Y=
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_offset_y= (value)
    @namebox_y = value
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Opacity
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_opacity
    @namebox_opacity = NAMEBOX_OPACITY if @namebox_opacity == nil
    return @namebox_opacity
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Opacity=
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_opacity= (value)
    @namebox_opacity = value
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Default timing
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.default_timing
    @default_timing = DEFAULT_TIMING if @default_timing == nil
    return @default_timing
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Default Timing =
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.default_timing= (value)
    value = [value, 0].max
    @default_timing = value
  end
end

module Sound
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Play Message SE
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.play_message_se
    Message_Options.message_se.play
  end
end

#======================================================================
# ** Sprite Message Face
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#  A sprite to reduce lag when using Animated  Facesets
#======================================================================

class Sprite_MessageFace < Sprite_Base
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Object Initialization
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def initialize (face_file, face_index = 0, size = 96, single = false)
    super ()
    self.visible = false
    self.z = 250
    face = Cache.face (face_file)
    if single
      self.bitmap = face
    else
      self.bitmap = Bitmap.new (face.width / 4, face.height / 2)
      rect = Rect.new(0, 0, 0, 0)
      rect.x = face_index %  4* 96 + (96 - size) / 2
      rect.y = face_index / 4 * 96 + (96 - size) / 2
      rect.width = size
      rect.height = size
      self.bitmap.blt(x, y, face, rect)
      face.dispose
    end
  end
end

#========================================================================
# ** Window Name Box
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#  This window displays the name of a speaker in Window_Message
#========================================================================

class Window_NameBox < Window_Base
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Object Initialization
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def initialize (x, y, string)
    temp_bitmap = Bitmap.new (1, 1)
    temp_bitmap.font.name = Message_Options.namebox_fontname
    temp_bitmap.font.size = Message_Options.namebox_fontsize
    rect = temp_bitmap.text_size (string)
    temp_bitmap.dispose
    super (x, y, rect.width + 32, rect.height + 32)
    self.z = 300
    create_contents
    # Use Namebox settings
    self.back_opacity = Message_Options.namebox_opacity
    self.windowskin = Message_Options.namebox_windowskin
    self.contents.font.name = Message_Options.namebox_fontname
    self.contents.font.size = Message_Options.namebox_fontsize
    self.contents.font.color = text_color(Message_Options.namebox_color)
    # Draw the text
    self.contents.draw_text (0, 0, rect.width, rect.height, string)
  end
end

#======================================================================
# ** Window_Message
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#  Summary of changes:
#     Basically, this script changes the way letter-by-letter works in order to allow for various
#     options: namely speed variability, sound effects, and animated facesets
#
#     aliased method - convert_special_characters
#     overwritten methods - update_message
#======================================================================

class Window_Message < Window_Selectable
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Convert Special Characters
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias modalg_msg_script_special_char_conversion convert_special_characters
  def  convert_special_characters
    # New codes
    modalg_msg_script_special_char_conversion
    @text.gsub!(/\\NE\[([0-9]+)\]/i) { $data_enemies[$1.to_i].name } # Name Enemy
    @text.gsub!(/\\NI\[([0-9]+)\]/i) { $data_items[$1.to_i].name }   # Name Item
    @text.gsub!(/\\NW\[([0-9]+)\]/i) { $data_weapons[$1.to_i].name } # Name Weapon
    @text.gsub!(/\\NA\[([0-9]+)\]/i) { $data_armors[$1.to_i].name } # Name Armor
    @text.gsub!(/\\PI\[([0-9]+)\]/i) { $data_items[$1.to_i].price.to_s } # Price Item
    @text.gsub!(/\\PW\[([0-9]+)\]/i) { $data_weapons[$1.to_i].price.to_s } # Price Weapon
    @text.gsub!(/\\PA\[([0-9]+)\]/i) { $data_armors[$1.to_i].price.to_s } # Price Armor
    @text.gsub! (/\\IICON\[([0-9]+)\]/i) { "\x10[#{$data_items[$1.to_i].icon_index}]" } # Icon Item
    @text.gsub! (/\\WICON\[([0-9]+)\]/i) { "\x10[#{$data_weapons[$1.to_i].icon_index}]" } # Icon Weapon
    @text.gsub! (/\\AICON\[([0-9]+)\]/i) { "\x10[#{$data_armors[$1.to_i].icon_index}]" } # Icon Armor
    # Retrieve Name
    name = @text[/\\NAME\[.*?\]/i]
    name.sub! (/\\NAME/i, '') unless name == nil
    @text.gsub! (/\\NAME\[.*?\]/i) { "\x09#{name}" } # Name Window
    @text.gsub! (/\\ICON\[([0-9]+)\]/i) { "\x10[#{$1}]" } # Icon
    @text.gsub!(/\\B/i) { "\x11" } # Bold
    @text.gsub!(/\\I/i) { "\x12" } # Italic
    # Run original script
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Object Initialization
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias modalg_msg_script_init initialize
  def initialize
    # Run original method
    modalg_msg_script_init
    @letter_timing = Message_Options.default_timing
    @face_sprites = []
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * New Page
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def new_page
    contents.clear
    if $game_message.face_name.empty?
      @contents_x = 0
    else
      @face_sprites.clear
      name = $game_message.face_name.dup
      index = $game_message.face_index
      # Determine if the face is a single graphic
      single = name[/^\$/] != nil
      face = Sprite_MessageFace.new (name, index, 96, single)
      face.x = self.x + 16
      face.y = self.y + 16
      face.visible = true
      @face_sprites.push (face)
      @current_face = 0
      unless name[/\_a$/i] == nil
        name.gsub! (/\_a$/i) {|s| s = '_b'}
        face = Sprite_MessageFace.new (name, index, 96, single)
        face.x = self.x + 16
        face.y = self.y + 16
        @face_sprites.push (face)
      end
      @contents_x = 112
    end
    @contents_y = 0
    @line_count = 0
    @show_fast = false
    @line_show_fast = false
    @pause_skip = false
    contents.font.color = text_color(0)
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Update Message
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   def update_message
     loop do
      @wait_count = Message_Options.default_timing
      c = @text.slice!(/./m)            # ???????
      case c
      when nil                          # ??????????
        finish_message                  # ????
        break
      when "\x00"                       # ??
        new_line
        if @line_count >= MAX_LINE      # ????????
          unless @text.empty?           # ??????????
            self.pause = true           # ????????
            break
          end
        end
        break
      when "\x01"                       # \C[n]  (?????)
        @text.sub!(/\[([0-9]+)\]/, "")
        contents.font.color = text_color($1.to_i)
        next
      when "\x02"                       # \G  (?????)
        @gold_window.refresh
        @gold_window.open
      when "\x03"                       # \.  (???? 1/4 ?)
        @wait_count = 15
        break
      when "\x04"                       # \|  (???? 1 ?)
        @wait_count = 60
        break
      when "\x05"                       # \!  (????)
        self.pause = true
      when "\x06"                       # \>  (???? ON)
        @letter_timing -= 1
        @letter_timing = 0 if @letter_timing < 0
      when "\x07"                       # \<  (???? OFF)
        @letter_timing += 1
      when "\x08"                       # \^  (??????)
        @pause_skip = true
      when "\x09"                       # \name Name Box
        name = @text[/\[.*?\]/]
        @text.sub!(/\[.*?\]/, "")
        name = name[1, name.size - 2]
        x = self.x + Message_Options.namebox_offset_x
        y = self.y + Message_Options.namebox_offset_y
        @name_window = Window_NameBox.new (x, y, name)
        @name_window.y -= @name_window.height
      when "\x10"                      # \icon Shows an icon
        @text.sub!(/\[([0-9]+)\]/, "")
        draw_icon ($1.to_i, @contents_x, @contents_y)
        @contents_x += 24
        @wait_count += @letter_timing
      when "\x11"                       # \b Bold
        # Toggle Bold
        self.contents.font.bold = self.contents.font.bold ? false : true
      when "\x12"                       # \i Italic           
        # Toggle Italic
        self.contents.font.italic = self.contents.font.italic ? false : true
      else                              # ?????
        contents.draw_text(@contents_x, @contents_y, 40, WLH, c)
        c_width = contents.text_size(c).width
        @contents_x += c_width
        Sound.play_message_se if Message_Options.message_se_active?
        @wait_count += @letter_timing
        # Switch Facesets
        if Message_Options::ANIMATED_FACESETS && @face_sprites.size > 1
          @face_sprites[@current_face].visible = false
          @current_face += 1
          @current_face %= @face_sprites.size
          @face_sprites[@current_face].visible = true
        end
      end
      break unless @show_fast or @line_show_fast
    end
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Finish Message
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias modalg_msg_script_message_fin finish_message
  def finish_message
    # Show initial face
    unless @face_sprites.empty?
      @face_sprites[@current_face].visible = false
      @current_face = 0
      @face_sprites[0].visible = true
    end
    @letter_timing = Message_Options.default_timing
    modalg_msg_script_message_fin
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Terminate Message
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias modalg_msg_script_message_term terminate_message
  def terminate_message
    self.contents.font.bold = false
    self.contents.font.italic = false
    modalg_msg_script_message_term
    @face_sprites.each {|face| face.dispose}
    @name_window.dispose unless @name_window.nil? || @name_window.disposed?
    @face_sprites.clear
  end
end

*
Rep: +0/-0Level 86
Hi, I'm new and I've got request :3 How about an ATB system? Active Time Battle System... Like in Final Fantasy. :D

*
Rep:
Level 97
2014 Most Unsung Member2014 Best RPG Maker User - Engine2013 Best RPG Maker User (Scripting)2012 Best Member2012 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Use of Avatar and Signature Space2011 Best RPG Maker User (Scripting)2011 Most Mature Member2011 Favourite Staff Member2011 Best Veteran2010 Best Use Of Avatar And Signature Space2010 Favourite Staff Member
Battle Systems are a pain in the ass, unfortunately. Maybe some other time.

*
Resident Cloud
Rep:
Level 91
Ill try to describe my problem:

in my game for vx i want randomly moving boats these are made as events but continuously end up on my land masses.

so my request is a script that prevents this from happening.I would like the boats only to be able to travel on water tiles.

i believe this is fairly simple

thanks

*
Rep:
Level 97
2014 Most Unsung Member2014 Best RPG Maker User - Engine2013 Best RPG Maker User (Scripting)2012 Best Member2012 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Use of Avatar and Signature Space2011 Best RPG Maker User (Scripting)2011 Most Mature Member2011 Favourite Staff Member2011 Best Veteran2010 Best Use Of Avatar And Signature Space2010 Favourite Staff Member
Yeah, it's probably not so hard, but I always find it weird to work with events. I would suggest making pseudorandom boats. Give them seemingly random movement through Custom Move Route. However, since this is a script request topic I suppose I can pull it off. Give me a little bit. How do you want to identify boats by the way?

EDIT::

Alright, here's a script:

Code: [Select]
#========================================================================
# ** Game_Event
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#  Summary of Changes:
#      aliased method - initialize
#      super methods changed - passable?
#========================================================================

class Game_Event < Game_Character
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Object Initialization
  #     map_id : map ID
  #     event  : event object (RPG::Event)
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias modalg_boat_random_movement_init initialize
  def initialize(map_id, event)
    # Run Original Method
    modalg_boat_random_movement_init (map_id, event)
    @boat_object = @event.name[/\\BOAT/i] != nil
    @ship_object = @event.name[/\\SHIP/i] != nil
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Passable?
  #       x : the x coordinate of the square being tested
  #       y : the y coordinate of the square being tested
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def passable? (x, y)
    return false if collide_with_characters? (x, y)
    if @ship_object
      return $game_map.ship_passable? (x, y)
    elsif @boat_object
      return $game_map.boat_passable? (x, y)
    end
    return super (x, y)
  end
end

Like I said, pseudorandom is going to be better because there is a possibilty that a randomly moving boat will continually try to move towards land, and it will make it look stationary. In any case, it ought to keep the little guy from getting onto land. To identify any given event as being a ship or a boat, just type \boat or \ship (captialization doesn't matter) as some part of the name of the event. So, if you name an event:

\boat Captain Amos, then it will be identified as a boat and adhere to passability of boats. If it is named \ship Captain Amos, it will identify as a ship and will adhere to rules regarding ships. If named \boatCaptain Amos\ShIp, it will identify as ship since ship has priority over boat. I would do airship as well, but it seems to me that clicking the Through Box would be enough.
« Last Edit: March 01, 2008, 03:53:46 AM by modern algebra »

********
Rep:
Level 96
2011 Most Missed Member2010 Zero To Hero
Sorry, I just read that you wanted -a and -b, not _a and _b, but unless you have serious objections, I think I will stick with the underscores. Anyway, here's what I have so far. I decided I would take your request and just go all out and make an Advanced Message System. Since I needed to overwrite a major method of Window_Message, my script would have been incompatible with pretty much any other message system, and I figured I could add in all those features, so why not?

Well, one reason why not is that I could easily have made mistakes. It might throw errors so I suggest you test it in a non-critical project, or a test project. I doubt anything will corrupt the entire project, but it won't hurt to be careful. Anyway yeah, there's a bunch of stuff in the code that you never asked for. Take a look in the comments for what those are.

Code: [Select]
#=======================================================================
#  Modern Algebra Message Script
#  Version 0.5
#  Author: modern algebra
#  February 22, 2008
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#  Special Thanks to:
#      Arrow-1 for the request. I loved the animated facesets idea
#      Zeriab for his regular expressions tutorial
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#  Current Features:
#     - Precise letter-by-letter timing control
#     - Animated Facesets
#     - Can play a sound effect with each letter drawn
#     - numerous additional codes - see below for all the codes
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#  Current Codes:
#     - \< Slows the speed at which the text is drawn
#     - \> Increases the speed at which the text is drawn
#     - \b bold text
#     - \i italicized text
#     - \name[text] name box
#     - \ne[enemy_id] name of enemy
#     - \ni[item_id] Name of item
#     - \nw[weapon_id] Name of weapon
#     - \na[armor_id] Name of Armor
#     - \pi[item_id] price of item
#     - \pw[weapon_id] price of weapon
#     - \pa[armor_id] price of Armor
#     - \icon[icon_index] draw icon assigned to icon_index
#     - \iicon[item_id] draw icon of item
#     - \wicon[weapon_id] draw icon of weapon
#     - \aicon[armor_id] draw icon of armor
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#  Instructions:
#    Fill in the constants below for default settings. You can change pretty much all of these
#    constants in-game with the codes:
#
#        Message_Options.letter_by_letter_sound = true/false
#        Message_Options.message_se = 'filename'
#        Message_Options.default_timing = integer (lower = faster)
#        Message_Options.namebox_windowskin = 'Windowskin'
#        Message_Options.namebox_color = integer (0..32)
#        Message_Options.namebox_fontname = 'font name'
#        Message_Options.namebox_fontsize = 'Windowskin'
#        Message_Options.namebox_offset_x = integer
#        Message_Options.namebox_offset_y = integer
#        Message_Options.opacity = integer (0..255)
#
#  To use animated facesets, merely use a face graphic that ends with _a and you must have
#  another faceset with the same name but ending with _b.
#=======================================================================

module Message_Options
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Constants
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  DEFAULT_TIMING = 0 # The default amount of frames between each letter as it is drawn
  LETTER_BY_LETTER_SOUND = true # Whether there should be an SE played with each character drawn
  MESSAGE_SE = 'Open1' # The SE to be played if LETTER_BY_LETTER_SOUND == true
  ANIMATED_FACESETS = true  # true => active animated facesets; false => deactivated
  NAMEBOX_WINDOWSKIN = "Window" # The windowskin for the name box
  NAMEBOX_COLOR = 5 # The Color of the text in the namebox
  NAMEBOX_FONTNAME = 'Times New Roman' # The Font of the namebox
  NAMEBOX_FONTSIZE = 20 # The Size of the text in the namebox
  NAMEBOX_OFFSET_X = 16 # How much the Namebox is in the X direction away from default
  NAMEBOX_OFFSET_Y = 16 # How much the Namebox is in the Y direction away from default
  NAMEBOX_OPACITY = 100 # The opacity of the name box
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Message SE (Lazy Initialization)
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.message_se
    self.message_se = MESSAGE_SE if @message_se.nil?
    return @message_se
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Message SE =
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.message_se= (file_name)
    @message_se = RPG::SE.new  (file_name)
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Message_SE_Active?
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.message_se_active?
    @letter_by_letter_sound = LETTER_BY_LETTER_SOUND if @letter_by_letter_sound.nil?
    return @letter_by_letter_sound 
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Letter BY Letter Sound =
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.letter_by_letter_sound= (boolean)
    @letter_by_letter_sound = boolean
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Windowskin
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_windowskin
    @namebox_windowskin = Cache.system (NAMEBOX_WINDOWSKIN) if @namebox_windowskin == nil
    return @namebox_windowskin
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Windowskin=
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_windowskin= (string)
    @namebox_windowskin = Cache.system (string)
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Color
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_color
    @namebox_color = NAMEBOX_COLOR if @namebox_color == nil
    return @namebox_color
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Color=
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_color= (value)
    @namebox_color = value
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Fontname
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_fontname
    @namebox_font = NAMEBOX_FONTNAME if @namebox_font == nil
    return @namebox_font
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Fontname=
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_fontname= (string)
    @namebox_font = string
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Fontsize
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_fontsize
    @namebox_fontsize = NAMEBOX_FONTSIZE if @namebox_fontsize == nil
    return @namebox_fontsize
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Fontsize=
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_fontsize= (value)
    @namebox_fontsize = value
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Offset X
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_offset_x
    @namebox_x = NAMEBOX_OFFSET_X if @namebox_x == nil
    return @namebox_x
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Offset X=
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_offset_x= (value)
    @namebox_x = value
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Offset Y
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_offset_y
    @namebox_y = NAMEBOX_OFFSET_Y if @namebox_y == nil
    return @namebox_y
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Offset Y=
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_offset_y= (value)
    @namebox_y = value
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Opacity
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_opacity
    @namebox_opacity = NAMEBOX_OPACITY if @namebox_opacity == nil
    return @namebox_opacity
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * NameBox Opacity=
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.namebox_opacity= (value)
    @namebox_opacity = value
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Default timing
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.default_timing
    @default_timing = DEFAULT_TIMING if @default_timing == nil
    return @default_timing
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Default Timing =
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.default_timing= (value)
    value = [value, 0].max
    @default_timing = value
  end
end

module Sound
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Play Message SE
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.play_message_se
    Message_Options.message_se.play
  end
end

#======================================================================
# ** Sprite Message Face
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#  A sprite to reduce lag when using Animated  Facesets
#======================================================================

class Sprite_MessageFace < Sprite_Base
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Object Initialization
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def initialize (face_file, face_index = 0, size = 96, single = false)
    super ()
    self.visible = false
    self.z = 250
    face = Cache.face (face_file)
    if single
      self.bitmap = face
    else
      self.bitmap = Bitmap.new (face.width / 4, face.height / 2)
      rect = Rect.new(0, 0, 0, 0)
      rect.x = face_index %  4* 96 + (96 - size) / 2
      rect.y = face_index / 4 * 96 + (96 - size) / 2
      rect.width = size
      rect.height = size
      self.bitmap.blt(x, y, face, rect)
      face.dispose
    end
  end
end

#========================================================================
# ** Window Name Box
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#  This window displays the name of a speaker in Window_Message
#========================================================================

class Window_NameBox < Window_Base
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Object Initialization
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def initialize (x, y, string)
    temp_bitmap = Bitmap.new (1, 1)
    temp_bitmap.font.name = Message_Options.namebox_fontname
    temp_bitmap.font.size = Message_Options.namebox_fontsize
    rect = temp_bitmap.text_size (string)
    temp_bitmap.dispose
    super (x, y, rect.width + 32, rect.height + 32)
    self.z = 300
    create_contents
    # Use Namebox settings
    self.back_opacity = Message_Options.namebox_opacity
    self.windowskin = Message_Options.namebox_windowskin
    self.contents.font.name = Message_Options.namebox_fontname
    self.contents.font.size = Message_Options.namebox_fontsize
    self.contents.font.color = text_color(Message_Options.namebox_color)
    # Draw the text
    self.contents.draw_text (0, 0, rect.width, rect.height, string)
  end
end

#======================================================================
# ** Window_Message
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#  Summary of changes:
#     Basically, this script changes the way letter-by-letter works in order to allow for various
#     options: namely speed variability, sound effects, and animated facesets
#
#     aliased method - convert_special_characters
#     overwritten methods - update_message
#======================================================================

class Window_Message < Window_Selectable
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Convert Special Characters
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias modalg_msg_script_special_char_conversion convert_special_characters
  def  convert_special_characters
    # New codes
    modalg_msg_script_special_char_conversion
    @text.gsub!(/\\NE\[([0-9]+)\]/i) { $data_enemies[$1.to_i].name } # Name Enemy
    @text.gsub!(/\\NI\[([0-9]+)\]/i) { $data_items[$1.to_i].name }   # Name Item
    @text.gsub!(/\\NW\[([0-9]+)\]/i) { $data_weapons[$1.to_i].name } # Name Weapon
    @text.gsub!(/\\NA\[([0-9]+)\]/i) { $data_armors[$1.to_i].name } # Name Armor
    @text.gsub!(/\\PI\[([0-9]+)\]/i) { $data_items[$1.to_i].price.to_s } # Price Item
    @text.gsub!(/\\PW\[([0-9]+)\]/i) { $data_weapons[$1.to_i].price.to_s } # Price Weapon
    @text.gsub!(/\\PA\[([0-9]+)\]/i) { $data_armors[$1.to_i].price.to_s } # Price Armor
    @text.gsub! (/\\IICON\[([0-9]+)\]/i) { "\x10[#{$data_items[$1.to_i].icon_index}]" } # Icon Item
    @text.gsub! (/\\WICON\[([0-9]+)\]/i) { "\x10[#{$data_weapons[$1.to_i].icon_index}]" } # Icon Weapon
    @text.gsub! (/\\AICON\[([0-9]+)\]/i) { "\x10[#{$data_armors[$1.to_i].icon_index}]" } # Icon Armor
    # Retrieve Name
    name = @text[/\\NAME\[.*?\]/i]
    name.sub! (/\\NAME/i, '') unless name == nil
    @text.gsub! (/\\NAME\[.*?\]/i) { "\x09#{name}" } # Name Window
    @text.gsub! (/\\ICON\[([0-9]+)\]/i) { "\x10[#{$1}]" } # Icon
    @text.gsub!(/\\B/i) { "\x11" } # Bold
    @text.gsub!(/\\I/i) { "\x12" } # Italic
    # Run original script
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Object Initialization
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias modalg_msg_script_init initialize
  def initialize
    # Run original method
    modalg_msg_script_init
    @letter_timing = Message_Options.default_timing
    @face_sprites = []
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * New Page
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def new_page
    contents.clear
    if $game_message.face_name.empty?
      @contents_x = 0
    else
      @face_sprites.clear
      name = $game_message.face_name.dup
      index = $game_message.face_index
      # Determine if the face is a single graphic
      single = name[/^\$/] != nil
      face = Sprite_MessageFace.new (name, index, 96, single)
      face.x = self.x + 16
      face.y = self.y + 16
      face.visible = true
      @face_sprites.push (face)
      @current_face = 0
      unless name[/\_a$/i] == nil
        name.gsub! (/\_a$/i) {|s| s = '_b'}
        face = Sprite_MessageFace.new (name, index, 96, single)
        face.x = self.x + 16
        face.y = self.y + 16
        @face_sprites.push (face)
      end
      @contents_x = 112
    end
    @contents_y = 0
    @line_count = 0
    @show_fast = false
    @line_show_fast = false
    @pause_skip = false
    contents.font.color = text_color(0)
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Update Message
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   def update_message
     loop do
      @wait_count = Message_Options.default_timing
      c = @text.slice!(/./m)            # ???????
      case c
      when nil                          # ??????????
        finish_message                  # ????
        break
      when "\x00"                       # ??
        new_line
        if @line_count >= MAX_LINE      # ????????
          unless @text.empty?           # ??????????
            self.pause = true           # ????????
            break
          end
        end
        break
      when "\x01"                       # \C[n]  (?????)
        @text.sub!(/\[([0-9]+)\]/, "")
        contents.font.color = text_color($1.to_i)
        next
      when "\x02"                       # \G  (?????)
        @gold_window.refresh
        @gold_window.open
      when "\x03"                       # \.  (???? 1/4 ?)
        @wait_count = 15
        break
      when "\x04"                       # \|  (???? 1 ?)
        @wait_count = 60
        break
      when "\x05"                       # \!  (????)
        self.pause = true
      when "\x06"                       # \>  (???? ON)
        @letter_timing -= 1
        @letter_timing = 0 if @letter_timing < 0
      when "\x07"                       # \<  (???? OFF)
        @letter_timing += 1
      when "\x08"                       # \^  (??????)
        @pause_skip = true
      when "\x09"                       # \name Name Box
        name = @text[/\[.*?\]/]
        @text.sub!(/\[.*?\]/, "")
        name = name[1, name.size - 2]
        x = self.x + Message_Options.namebox_offset_x
        y = self.y + Message_Options.namebox_offset_y
        @name_window = Window_NameBox.new (x, y, name)
        @name_window.y -= @name_window.height
      when "\x10"                      # \icon Shows an icon
        @text.sub!(/\[([0-9]+)\]/, "")
        draw_icon ($1.to_i, @contents_x, @contents_y)
        @contents_x += 24
        @wait_count += @letter_timing
      when "\x11"                       # \b Bold
        # Toggle Bold
        self.contents.font.bold = self.contents.font.bold ? false : true
      when "\x12"                       # \i Italic           
        # Toggle Italic
        self.contents.font.italic = self.contents.font.italic ? false : true
      else                              # ?????
        contents.draw_text(@contents_x, @contents_y, 40, WLH, c)
        c_width = contents.text_size(c).width
        @contents_x += c_width
        Sound.play_message_se if Message_Options.message_se_active?
        @wait_count += @letter_timing
        # Switch Facesets
        if Message_Options::ANIMATED_FACESETS && @face_sprites.size > 1
          @face_sprites[@current_face].visible = false
          @current_face += 1
          @current_face %= @face_sprites.size
          @face_sprites[@current_face].visible = true
        end
      end
      break unless @show_fast or @line_show_fast
    end
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Finish Message
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias modalg_msg_script_message_fin finish_message
  def finish_message
    # Show initial face
    unless @face_sprites.empty?
      @face_sprites[@current_face].visible = false
      @current_face = 0
      @face_sprites[0].visible = true
    end
    @letter_timing = Message_Options.default_timing
    modalg_msg_script_message_fin
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Terminate Message
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias modalg_msg_script_message_term terminate_message
  def terminate_message
    self.contents.font.bold = false
    self.contents.font.italic = false
    modalg_msg_script_message_term
    @face_sprites.each {|face| face.dispose}
    @name_window.dispose unless @name_window.nil? || @name_window.disposed?
    @face_sprites.clear
  end
end

Post was deleted, but in summation: THANKS! Very much appreciated, good buddy! I owe you a song or something.

*
Rep:
Level 97
2014 Most Unsung Member2014 Best RPG Maker User - Engine2013 Best RPG Maker User (Scripting)2012 Best Member2012 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Use of Avatar and Signature Space2011 Best RPG Maker User (Scripting)2011 Most Mature Member2011 Favourite Staff Member2011 Best Veteran2010 Best Use Of Avatar And Signature Space2010 Favourite Staff Member
Not a problem. I should be thanking you for the idea.  :lol:

*
Resident Cloud
Rep:
Level 91
thanks thats perfect :D

********
Rep:
Level 96
2011 Most Missed Member2010 Zero To Hero
Modern, another thought: could you restore a few functions from RM2K3 as well? Namely the text pausing functions? They went like this:

\! = Text waits until the user presses a key
\. = Text waits a fourth of a second

I think that's how it worked anyway...and I think there was also a command for:

\|

but I can't remember it.

But yes, if it wouldn't be too much trouble, I'd be immensely thankful!

*
Rep:
Level 97
2014 Most Unsung Member2014 Best RPG Maker User - Engine2013 Best RPG Maker User (Scripting)2012 Best Member2012 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Use of Avatar and Signature Space2011 Best RPG Maker User (Scripting)2011 Most Mature Member2011 Favourite Staff Member2011 Best Veteran2010 Best Use Of Avatar And Signature Space2010 Favourite Staff Member
They're already built in.

********
Rep:
Level 96
2011 Most Missed Member2010 Zero To Hero
Oh snap, they are!

Okay I am totally not gonna bug you for a long time now, thanks a lot!

*
Rep:
Level 97
2014 Most Unsung Member2014 Best RPG Maker User - Engine2013 Best RPG Maker User (Scripting)2012 Best Member2012 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Use of Avatar and Signature Space2011 Best RPG Maker User (Scripting)2011 Most Mature Member2011 Favourite Staff Member2011 Best Veteran2010 Best Use Of Avatar And Signature Space2010 Favourite Staff Member
No worries, I enjoy being bugged :P

*
Rep:
Level 97
2014 Most Unsung Member2014 Best RPG Maker User - Engine2013 Best RPG Maker User (Scripting)2012 Best Member2012 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Use of Avatar and Signature Space2011 Best RPG Maker User (Scripting)2011 Most Mature Member2011 Favourite Staff Member2011 Best Veteran2010 Best Use Of Avatar And Signature Space2010 Favourite Staff Member
Revival! There are still 3 requests to be made. And, ahref and Arrow, if you guys want another script made, feel free to make one more request, despite my rules :P

And lol, putting a strike through the number 4 makes absolutely no visual difference

*
? ? ? ? ? ? ? ? ? The nice kind of alien~
Rep:
Level 92
Martian - Occasionally kind
I want a pathfinding script :X

*
Rep:
Level 97
2014 Most Unsung Member2014 Best RPG Maker User - Engine2013 Best RPG Maker User (Scripting)2012 Best Member2012 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Use of Avatar and Signature Space2011 Best RPG Maker User (Scripting)2011 Most Mature Member2011 Favourite Staff Member2011 Best Veteran2010 Best Use Of Avatar And Signature Space2010 Favourite Staff Member
Oh, all right I'll get on it.

What did you mean when you said hierarchical? That it evaluates all possible paths to take and chooses the best?

*
? ? ? ? ? ? ? ? ? The nice kind of alien~
Rep:
Level 92
Martian - Occasionally kind
I was kidding modern. I forgot how extremely simple the request is :V
Feel free to have fun with it if you want. And no, when I said hierarchical (which I didn't in the request), I meant an hierarchical ordering of more and more abstract search spaces with the lowest level being the normal search space.

*
Resident Cloud
Rep:
Level 91
oo yay i needed a pathfinding also. Im fed up with the move event dialog.

**
Rep:
Level 86
I saw pathfinding at RRR rong time ago,
I'm not sure if this wirr work tho :p

http://www.rpgrevolution.com/forums/?showtopic=8710
« Last Edit: April 07, 2008, 08:24:38 AM by Zeriab »

*
? ? ? ? ? ? ? ? ? The nice kind of alien~
Rep:
Level 92
Martian - Occasionally kind
Bah, I tried to fix your link but failed.
It does not lead to the correct place right now -_-

*
Rep:
Level 97
2014 Most Unsung Member2014 Best RPG Maker User - Engine2013 Best RPG Maker User (Scripting)2012 Best Member2012 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Use of Avatar and Signature Space2011 Best RPG Maker User (Scripting)2011 Most Mature Member2011 Favourite Staff Member2011 Best Veteran2010 Best Use Of Avatar And Signature Space2010 Favourite Staff Member
Nothing does since 1 was removed from the a1phabet

Just copy it into address bar and change r to 1 (the 1etter)