Group: Member
Posts: 91
Type: Developer
RM Skill: Masterful
Introduction: This is a script I modified from Rpg Maker XP. It is something to rename your character with. Someone requested it on rpgmakervx.net forums, so I did it for him. This is the link to the owner of the script. http://forum.chaos-project.com/index.php?topic=6731.0
Screenshots: Go to the link above, it basically looks the same, but it does look a little bit better.
Demo: Not needed.
Script
Script:
CODE
#============================================================================== # Modified Scene_Name 1.3b Final # By Cyclope # Author's post: http://forum.chaos-project.com/index.php?topic=6731.0 # Edit by Helladen: Converted to VX and fixed alignment and settings. # I also rewrote the enter button it now works properly. # - 1.1 release for VX. (7/15/10) # - 1.2 fixed the guide text at the bottom. (7/15/10) # - 1.3 added where you can have it draw your face or character sprite. # Fixed it from not having a sound if you erased letters. # Changed some of the sounds and other small fixes. (7/19/10) # - 1.3b fixed where you could space the whole name and space sounds. #------------------------------------------------------------------------------ # Instructions # Place above main #------------------------------------------------------------------------------ # Credit: # Nattmath (For making Scene_Name Letters Modification) # Blizzard (For making Custom Controls) # Cyclope (For modifying Scene_Name Leters Modification and Scene_Name) # Helladen (Converted to Rpg Maker VX and enhanced it) #==============================================================================
#============================================================================== # ** Window_Instructions #------------------------------------------------------------------------------ # This window displays full status specs on the status screen. #============================================================================== # Configuration #------------------------------------------------------------------------------ DRAW_FACE = true # If this is true then it will draw a face if not then sprite #==============================================================================
class Window_Instruction < Window_Base #-------------------------------------------------------------------------- # * Object Initialization # actor : actor #-------------------------------------------------------------------------- def initialize super( 0, 336, 544, 80) self.contents = Bitmap.new(width - 32, height - 32) refresh end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.font.name = "Arial" self.contents.font.size = 18 self.contents.font.color = normal_color #Change this text to whatever instructions you want to have! self.contents.draw_text(000, 9, 404, 32, "Enter = Confirm,") self.contents.draw_text(120, 9, 404, 32, "Backspace = Delete,") self.contents.draw_text(275, 9, 404, 32, "Keyboard = Text,") self.contents.draw_text(400, 9, 404, 32, "Shift = Capital") end end #============================================================================== # ** Window_TextName #------------------------------------------------------------------------------ # super ( 224, 32, 224, 80) #============================================================================== class Window_TextName < Window_Base def initialize if DRAW_FACE super (164, 0, 224, 128) else super (164, 66, 224, 62) end self.contents = Bitmap.new(width - 32, height - 32) @actor = $game_actors[$game_temp.name_actor_id] refresh end def refresh self.contents.clear self.contents.font.name = "Arial" self.contents.font.size = 32 self.contents.font.color = normal_color if DRAW_FACE draw_actor_face(@actor, 2, @actor.index * 96 + 2, 92) self.contents.draw_text(112, 32, 64, 32, "Name:") else draw_actor_graphic(@actor, 32, 32) self.contents.draw_text(64, 0, 64, 32, "Name:") end end end
#============================================================================== # ** Window_NameEdit #------------------------------------------------------------------------------ # This window is used to edit your name on the input name screen. #==============================================================================
class Window_NameEdit < Window_Base
#-------------------------------------------------------------------------- # * Object Initialization # actor : actor # max_char : maximum number of characters #-------------------------------------------------------------------------- def initialize(actor, max_char) super(16, 128, 512, 96) self.contents = Bitmap.new(width - 32, height - 32) @actor = actor @name = actor.name @max_char = max_char # Fit name within maximum number of characters name_array = @name.split(//)[0...@max_char] @name = "" for i in 0...name_array.size @name += name_array[i] end @default_name = @name @index = name_array.size refresh update_cursor_rect end #-------------------------------------------------------------------------- # * Return to Default Name #-------------------------------------------------------------------------- def restore_default @name = @default_name @index = @name.split(//).size refresh update_cursor_rect end #-------------------------------------------------------------------------- # * Add Character # character : text character to be added #-------------------------------------------------------------------------- def add(character) if @index < @max_char and character != "" @name += character @index += 1 refresh update_cursor_rect end end #-------------------------------------------------------------------------- # * Delete Character #-------------------------------------------------------------------------- def back if @index > 0 # Delete 1 text character name_array = @name.split(//) @name = "" for i in 0...name_array.size-1 @name += name_array[i] end @index -= 1 refresh update_cursor_rect end end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear # Draw name self.contents.font.size = 42 name_array = @name.split(//) for i in 0...@max_char c = name_array[i] if c == nil c = "_" end x = 258 - @max_char * 14 + i * 26 self.contents.draw_text(x, 15, 28, 42, c, 1) end end #-------------------------------------------------------------------------- # * Cursor Rectangle Update #-------------------------------------------------------------------------- def update_cursor_rect x = 262 - @max_char * 14 + @index * 26 self.cursor_rect.set(x, 46, 20, 5) end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super update_cursor_rect end end
#============================================================================== # ** Window_NameInput #------------------------------------------------------------------------------ # This window is used to select text characters on the input name screen. #==============================================================================
class Window_NameInput < Window_Base CHARACTER_TABLE = [ "", ""
] #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize super(0, 128, 544, 0) self.contents = Bitmap.new(width - 32, height - 32) @index = 0 refresh end #-------------------------------------------------------------------------- # * Text Character Acquisition #-------------------------------------------------------------------------- def character return CHARACTER_TABLE[@index] end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear end
#-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super end end #============================================================================== # ** Scene_Name #------------------------------------------------------------------------------ # This class performs name input screen processing. #==============================================================================
class Scene_Name #-------------------------------------------------------------------------- # * Main Processing #-------------------------------------------------------------------------- def main # Get actor @actor = $game_actors[$game_temp.name_actor_id] # Make windows @edit_window = Window_NameEdit.new(@actor, $game_temp.name_max_char) @edit_window.back_opacity = 160 @input_window = Window_NameInput.new @inst_window = Window_Instruction.new @inst_window.back_opacity = 160 @nametext_window = Window_TextName.new @nametext_window.back_opacity = 160 @spriteset = Spriteset_Map.new # Execute transition Graphics.transition # Main loop loop do # Update game screen Graphics.update # Update input information Input.update # Frame update update # Abort loop if screen is changed if $scene != self break end end # Prepare for transition Graphics.freeze # Dispose of windows @edit_window.dispose @input_window.dispose @inst_window.dispose @nametext_window.dispose @spriteset.dispose end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update # Update windows @edit_window.update @input_window.update @nametext_window.update @inst_window.update # If C button was pressed if Input.trigger?(Input::C) # If cursor position is at [OK] if @input_window.character == nil # If name is empty if @edit_window.name == "" # If name is empty if @edit_window.name == "" # Play buzzer SE Sound.play_buzzer return end # Play decision SE Sound.play_cursor return end # Change actor name @actor.name = @edit_window.name # Play decision SE Sound.play_cursor # Switch to map screen $scene = Scene_Map.new return end # If cursor position is at maximum if @edit_window.index == $game_temp.name_max_char # Play buzzer SE Sound.play_buzzer return end # If text character is empty if @input_window.character == "" # Play buzzer SE Sound.play_buzzer return end # Play decision SE Sound.play_cursor # Add text character @edit_window.add(@input_window.character) return end end end
#---------------------------------------------------------------------------- # Simple ASCII table #---------------------------------------------------------------------------- Key = {'A' => 65, 'B' => 66, 'C' => 67, 'D' => 68, 'E' => 69, 'F' => 70, 'G' => 71, 'H' => 72, 'I' => 73, 'J' => 74, 'K' => 75, 'L' => 76, 'M' => 77, 'N' => 78, 'O' => 79, 'P' => 80, 'Q' => 81, 'R' => 82, 'S' => 83, 'T' => 84, 'U' => 85, 'V' => 86, 'W' => 87, 'X' => 88, 'Y' => 89, 'Z' => 90, '0' => 48, '1' => 49, '2' => 50, '3' => 51, '4' => 52, '5' => 53, '6' => 54, '7' => 55, '8' => 56, '9' => 57, 'NumberPad 0' => 45, 'NumberPad 1' => 35, 'NumberPad 2' => 40, 'NumberPad 3' => 34, 'NumberPad 4' => 37, 'NumberPad 5' => 12, 'NumberPad 6' => 39, 'NumberPad 7' => 36, 'NumberPad 8' => 38, 'NumberPad 9' => 33, 'F1' => 112, 'F2' => 113, 'F3' => 114, 'F4' => 115, 'F5' => 116, 'F6' => 117, 'F7' => 118, 'F8' => 119, 'F9' => 120, 'F10' => 121, 'F11' => 122, 'F12' => 123, ';' => 186, '=' => 187, ',' => 188, '-' => 189, '.' => 190, '/' => 220, '\\' => 191, '\'' => 222, '[' => 219, ']' => 221, '`' => 192, 'Backspace' => 8, 'Tab' => 9, 'Enter' => 13, 'Shift' => 16, 'Left Shift' => 160, 'Right Shift' => 161, 'Left Ctrl' => 162, 'Right Ctrl' => 163, 'Left Alt' => 164, 'Right Alt' => 165, 'Ctrl' => 17, 'Alt' => 18, 'Esc' => 27, 'Space' => 32, 'Page Up' => 33, 'Page Down' => 34, 'End' => 35, 'Home' => 36, 'Insert' => 45, 'Delete' => 46, 'Arrow Left' => 37, 'Arrow Up' => 38, 'Arrow Right' => 39, 'Arrow Down' => 40, 'Mouse Left' => 1, 'Mouse Right' => 2, 'Mouse Middle' => 4, 'Mouse 4' => 5, 'Mouse 5' => 6} # default button configuration UP = [Key['Arrow Up']] LEFT = [Key['Arrow Left']] DOWN = [Key['Arrow Down']] RIGHT = [Key['Arrow Right']] A = [Key['Shift']] B = [Key['Esc'], Key['NumberPad 0'], Key['X']] C = [Key['Space'], Key['Enter'], Key['C']] X = [Key['A']] Y = [Key['S']] Z = [Key['D']] L = [Key['Q'], Key['Page Down']] R = [Key['W'], Key['Page Up']] F5 = [Key['F5']] F6 = [Key['F6']] F7 = [Key['F7']] F8 = [Key['F8']] F9 = [Key['F9']] SHIFT = [Key['Shift']] CTRL = [Key['Ctrl']] ALT = [Key['Alt']] # All keys ALL_KEYS = (0...256).to_a # Win32 API calls GetKeyboardState = Win32API.new('user32','GetKeyboardState', 'P', 'I') GetKeyboardLayout = Win32API.new('user32', 'GetKeyboardLayout','L', 'L') MapVirtualKeyEx = Win32API.new('user32', 'MapVirtualKeyEx', 'IIL', 'I') ToUnicodeEx = Win32API.new('user32', 'ToUnicodeEx', 'LLPPILL', 'L') # some other constants DOWN_STATE_MASK = 0x80 DEAD_KEY_MASK = 0x80000000 # data @state = "\0" * 256 @triggered = Array.new(256, false) @pressed = Array.new(256, false) @released = Array.new(256, false) @repeated = Array.new(256, 0) #---------------------------------------------------------------------------- # update # Updates input. #---------------------------------------------------------------------------- def self.update # get current language layout @language_layout = GetKeyboardLayout.call(0) # get new keyboard state GetKeyboardState.call(@state) # for each key ALL_KEYS.each {|key| # if pressed state if @state[key] & DOWN_STATE_MASK == DOWN_STATE_MASK # not released anymore @released[key] = false # if not pressed yet if !@pressed[key] # pressed and triggered @pressed[key] = true @triggered[key] = true else # not triggered anymore @triggered[key] = false end # update of repeat counter @repeated[key] < 17 ? @repeated[key] += 1 : @repeated[key] = 15 # not released yet elsif !@released[key] # if still pressed if @pressed[key] # not triggered, pressed or repeated, but released @triggered[key] = false @pressed[key] = false @repeated[key] = 0 @released[key] = true end else # not released anymore @released[key] = false end} end #---------------------------------------------------------------------------- # dir4 # 4 direction check. #---------------------------------------------------------------------------- def Input.dir4 return 2 if Input.press?(DOWN) return 4 if Input.press?(LEFT) return 6 if Input.press?(RIGHT) return 8 if Input.press?(UP) return 0 end #---------------------------------------------------------------------------- # dir8 # 8 direction check. #---------------------------------------------------------------------------- def Input.dir8 down = Input.press?(DOWN) left = Input.press?(LEFT) return 1 if down && left right = Input.press?(RIGHT) return 3 if down && right up = Input.press?(UP) return 7 if up && left return 9 if up && right return 2 if down return 4 if left return 6 if right return 8 if up return 0 end #---------------------------------------------------------------------------- # trigger? # Test if key was triggered once. #---------------------------------------------------------------------------- def Input.trigger?(keys) keys = [keys] unless keys.is_a?(Array) return keys.any? {|key| @triggered[key]} end #---------------------------------------------------------------------------- # press? # Test if key is being pressed. #---------------------------------------------------------------------------- def Input.press?(keys) keys = [keys] unless keys.is_a?(Array) return keys.any? {|key| @pressed[key]} end #---------------------------------------------------------------------------- # repeat? # Test if key is being pressed for repeating. #---------------------------------------------------------------------------- def Input.repeat?(keys) keys = [keys] unless keys.is_a?(Array) return keys.any? {|key| @repeated[key] == 1 || @repeated[key] == 16} end #---------------------------------------------------------------------------- # release? # Test if key was released. #---------------------------------------------------------------------------- def Input.release?(keys) keys = [keys] unless keys.is_a?(Array) return keys.any? {|key| @released[key]} end #---------------------------------------------------------------------------- # get_character # vk - virtual key # Gets the character from keyboard input using the input locale identifier # (formerly called keyboard layout handles). #---------------------------------------------------------------------------- def self.get_character(vk) # get corresponding character from virtual key c = MapVirtualKeyEx.call(vk, 2, @language_layout) # stop if character is non-printable and not a dead key return '' if c < 32 && (c & DEAD_KEY_MASK != DEAD_KEY_MASK) # get scan code vsc = MapVirtualKeyEx.call(vk, 0, @language_layout) # result string is never longer than 2 bytes (Unicode) result = "\0" * 2 # get input string from Win32 API length = ToUnicodeEx.call(vk, vsc, @state, result, 2, 0, @language_layout) return (length == 0 ? '' : result) end #---------------------------------------------------------------------------- # get_input_string # Gets the string that was entered using the keyboard over the input locale # identifier (formerly called keyboard layout handles). #---------------------------------------------------------------------------- def self.get_input_string result = '' # check every key ALL_KEYS.each {|key| # if repeated if self.repeat?(key) # get character from keyboard state c = self.get_character(key) # add character if there is a character result += c if c != '' end} # empty if result is empty return '' if result == '' # convert string from Unicode to UTF-8 return self.unicode_to_utf8(result) end #---------------------------------------------------------------------------- # get_input_string # string - string in Unicode format # Converts a string from Unicode format to UTF-8 format as RGSS does not # support Unicode. #---------------------------------------------------------------------------- def self.unicode_to_utf8(string) result = '' string.unpack('S*').each {|c| # characters under 0x80 are 1 byte characters if c < 0x0080 result += c.chr # other characters under 0x800 are 2 byte characters elsif c < 0x0800 result += (0xC0 | (c >> 6)).chr result += (0x80 | (c & 0x3F)).chr # the rest are 3 byte characters else result += (0xE0 | (c >> 12)).chr result += (0x80 | ((c >> 12) & 0x3F)).chr result += (0x80 | (c & 0x3F)).chr end} return result end
end
#============================================================================== # ** Scene_Name Leters Modification Made By Nattmath and Improved Cyclope #------------------------------------------------------------------------------ # Makes you imput stuf with the keyboard #============================================================================== class Scene_Name
alias name_input_update update def update if @edit_window.index != $game_temp.name_max_char (65...91).each{|i| if Input.trigger?(i) Sound.play_cursor let = Input::Key.index(i) let = let.downcase unless Input.press?(Input::Key['Shift']) @edit_window.add(let) end} (48...58).each{|i| if Input.trigger?(i) Sound.play_cursor let = Input::Key.index(i) @edit_window.add(let) end} (186...192).each{|i| if Input.trigger?(i) Sound.play_cursor let = Input::Key.index(i) @edit_window.add(let) end} (219...222).each{|i| if Input.trigger?(i) Sound.play_cursor let = Input::Key.index(i) @edit_window.add(let) end} end if @edit_window.name != "" if Input.trigger?(Input::Key['Backspace']) @edit_window.back Sound.play_cancel elsif Input.trigger?(Input::Key['Arrow Left']) @edit_window.back Sound.play_cancel end end if Input.trigger?(Input::Key['Enter']) if @edit_window.name != "" and @edit_window.name != " " and @edit_window.name != " " and @edit_window.name != " " and @edit_window.name != " " and @edit_window.name != " " and @edit_window.name != " " and @edit_window.name != " " and @edit_window.name != " " and @edit_window.name != " " and @edit_window.name != " " and @edit_window.name != " " and @edit_window.name != " " and @edit_window.name != " " and @edit_window.name != " " and @edit_window.name != " " and @edit_window.name != " " # Change actor name @actor.name = @edit_window.name # Play decision SE Sound.play_decision # Switch to map screen $scene = Scene_Map.new return else # If name is empty return to default name # Play buzzer SE @edit_window.restore_default Sound.play_buzzer return end end if Input.trigger?(Input::Key['Space']) if @edit_window.index != $game_temp.name_max_char @actor.name = @edit_window.name Sound.play_cursor @edit_window.add(" ") end end end end
This post has been edited by Regashi: Jul 24 2010, 04:01 AM
Reason for edit: Put long script into a spoiler ~Night5h4d3
Group: Member
Posts: 91
Type: Developer
RM Skill: Masterful
1.3 added where you can have it draw your face or character sprite. Fixed it from not having a sound if you erased letters. Changed some of the sounds and other small fixes.
This is the last fix, hope this works well for some of you.
Is there a way to make the letter's use able at times other than the name inputting? I.e. Use the "Z" Key in game to select stuff like the Enter Key, but when it goes into the name input it's changed temporarily?
I don't understand what your asking, but if your asking if you can make buttons to input and such yes its possible.
in the default settings, pressing "X" opens the menu. When the script is added, it's functionality is taken out. I was asking if there was a way, to only remove the functionality of "X" during the name input screen, when it would just be a latter, but after the name input was over, it would return to be functional..