Introduction It's been a long time since I opened an RPGmaker, but when I saw Ace had arrived it seemed to fix every single complaint I ever had with VX. So impressed was I with Ace I decided to take up scripting again. So 24 hours later my Character creation script was born.
I tried to keep the Race System as open ended as possible. I achieved this by having the Race simply put in a Game Variable (By Default 25) and nothing else. This means by default all Races do is act as Categories for the Appearances. However as that Game Variable can checked by events, it is not at all difficult for an array to check that Game Variable and, say, change the actors stats accordingly.
Screenshot
Config The config is quite simple, and most of it is explained in the Script's config section itself.
However it is very important that when you add this script to a project you follow the following intructions: 1)Ensure that the default starting character has no name, and no character or face image 2) Make a new map, which is entirely black and has the player's starting position on it. On this map create an autorun event like so: a)use the Advanced -> Script action and type: SceneManager.call(Scene_CharacterCreation) b)Then change SelfSwitch A to ON c)Create a new event page, and ensure that that is also set to the AutoRun trigger. On this page you can run the Process Name Input event action d (Optional)Then using an conditional branch run any other effects you only want to effect certain races, by checking the Variable defined in the main config (By default 25). e) Transfer the player to the original starting position.
The Script
Codez
CODE
Races = Array.new RaceAppearanceNames = Array.new RaceFaceImage = Array.new RaceFaceIndex = Array.new RaceChara = Array.new RaceIndex = Array.new #############CONFIG###################### #Here list all the names of all races in the game # Example: # Races = ["Human","Elf","Dwarf"] # Creates three races, called Human, Elf and Dwarf Races = ["Human","Elf","Dwarf"] #Which race the player chooses will be stored in a variable, which is defined #below. This can be used later create effects that only affect, say, Dwarves, #such as giving them the ability to use heavy armour, regardless of class. #This can be acheived by having an event check that array, then run actions accordingly RaceVariable = 25 #The default is to store the Race in variable 25. By default this will mean that #if the player is human that varible will be 1, 2 if an elf, and 3 if a dwarf. # #Then for each race create a module for showing the Appearance(s) #Example: #RaceAppearanceNames << ["Female","Male"] #RaceFaceImage << ["Actor1.png","Actor1.png"] #RaceFaceIndex << [1,2] #RaceChara << ["Actor1.png","Actor1.png"] #RaceIndex << [1,2] # #The first row shows that the first race we typed in at the start has two #different Appearances. One called Female, one called Male. #The second row shows the File name for that appearances face. So both Male and #Female humans use Actor1.png #The third row shows which face in the file to use, as each image has 8 faces, #so female humans use the first face in the Actor1.png Image, and Males use the #second image. # #The fourth and fifth line work like the Faces, appart from for defining the #Character image that is seen walking around the screen. In the example above #both Male and Female humans have characters to match their faces. # #For each race you defined at the start, copy paste these five lines, and customize #as you wish.
#============================================================================== # ** Scene_Status #------------------------------------------------------------------------------ # This class performs the status screen processing. #==============================================================================
def create_status_window y = 0 @status_window = Window_SkillStatus.new(0,0) @status_window.viewport = @viewport @status_window.actor = @actor end end
#============================================================================== # ** Window_Status #------------------------------------------------------------------------------ # This window displays full status specs on the status screen. #==============================================================================
class Window_Create < Window_Command #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(actor) super(Graphics.width / 3, fitting_height(4)) self.height = Graphics.height - fitting_height(4) # create_help_window @actor = actor end #-------------------------------------------------------------------------- # * Set Actor #-------------------------------------------------------------------------- def actor=(actor) return if @actor == actor @actor = actor refresh end #-------------------------------------------------------------------------- # * Create Command List #-------------------------------------------------------------------------- def make_command_list count = 1 for i in $data_classes count += 1 end count -= 1 for i in (1...count) flag = true add_command($data_classes[i].name, :class) #add_command(@actor.face_name :class) end end #------------------------------------------------------------------------ #-------------------------------------------------------------------------- # * Get Color of Horizontal Line #-------------------------------------------------------------------------- def line_color color = normal_color color.alpha = 48 color end #-------------------------------------------------------------------------- # * Draw Basic Information #-------------------------------------------------------------------------- def draw_basic_info(x, y) draw_actor_level(@actor, x, y + line_height * 0) draw_actor_icons(@actor, x, y + line_height * 1) draw_actor_hp(@actor, x, y + line_height * 2) draw_actor_mp(@actor, x, y + line_height * 3) end #-------------------------------------------------------------------------- # * Draw Parameters #-------------------------------------------------------------------------- def draw_parameters(x, y) 6.times {|i| draw_actor_param(@actor, x, y + line_height * i, i + 2) } end #-------------------------------------------------------------------------- # * Draw Experience Information #-------------------------------------------------------------------------- def draw_exp_info(x, y) s1 = @actor.max_level? ? "-------" : @actor.exp s2 = @actor.max_level? ? "-------" : @actor.next_level_exp - @actor.exp s_next = sprintf(Vocab::ExpNext, Vocab::level) change_color(system_color) draw_text(x, y + line_height * 0, 180, line_height, Vocab::ExpTotal) draw_text(x, y + line_height * 2, 180, line_height, s_next) change_color(normal_color) draw_text(x, y + line_height * 1, 180, line_height, s1, 2) draw_text(x, y + line_height * 3, 180, line_height, s2, 2) end #-------------------------------------------------------------------------- # * Draw Equipment #-------------------------------------------------------------------------- def draw_equipments(x, y) @actor.equips.each_with_index do |item, i| draw_item_name(item, x, y + line_height * i) end end #-------------------------------------------------------------------------- # * Draw Description #-------------------------------------------------------------------------- def draw_description(x, y) draw_text_ex(x, y, @actor.description) end end
############################################################ # # # RACE MEANU ##### class Window_Race < Window_Command #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(actor) super(0, fitting_height(4)) self.height = Graphics.height - fitting_height(4) # create_help_window @actor = actor end #-------------------------------------------------------------------------- # * Set Actor #-------------------------------------------------------------------------- def actor=(actor) return if @actor == actor @actor = actor refresh end #-------------------------------------------------------------------------- # * Create Command List #-------------------------------------------------------------------------- def make_command_list count = 0 for i in Races add_command(i, :race) end end end
class Window_Appearance < Window_Command #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(actor,id) super(Graphics.width / 1.5, fitting_height(4)) self.height = Graphics.height - fitting_height(4) # create_help_window @actor = actor @id = id #item_height = 36 end #-------------------------------------------------------------------------- # * Set Actor #-------------------------------------------------------------------------- def actor=(actor) return if @actor == actor @actor = actor refresh # self.item_height = 36 end
def id=(id) @id = id refresh # self.item_height = 36 count = 0 i_id = @id.to_i lookArray = RaceAppearanceNames#[@id] for i in (0...(lookArray[i_id].length)) #add_command(" "+lookArray[i_id][i], :look) #draw_item(i,RaceChara[i_id][i],RaceIndex[i_id][i]) draw_character(RaceChara[i_id][i], RaceIndex[i_id][i]-1,16,36*(i+1)-2) end end #-------------------------------------------------------------------------- # * Create Command List #-------------------------------------------------------------------------- alias oldCommand make_command_list def make_command_list oldCommand count = 0 i_id = @id.to_i lookArray = RaceAppearanceNames#[@id] for i in (0...(lookArray[i_id].length)) add_command(" "+lookArray[i_id][i], :look) #draw_item(i,RaceChara[i_id][i],RaceIndex[i_id][i]) #draw_character(RaceChara[i_id][i], RaceIndex[i_id][i],16,36*(i+1)-2) end #draw_character(RaceChara[i_id][i], RaceIndex[i_id][i], 0, 0) end
def draw_item(index,chara="Actor1.png",chaIndex = 1) change_color(normal_color, command_enabled?(index)) draw_text(item_rect_for_text(index), command_name(index), alignment) #draw_character(chara,chaIndex,16,36*(index+1)-2) end def item_rect(index) rect = Rect.new rect.width = item_width rect.height = 36#item_height rect.x = index % col_max * (item_width + spacing) rect.y = index / col_max * 36#item_height rect end def update_cursor if @cursor_all cursor_rect.set(0, 0, contents.width, row_max * 36) self.top_row = 0 elsif @index < 0 cursor_rect.empty else ensure_cursor_visible cursor_rect.set(item_rect(@index)) end end def contents_height [super - super % 36, row_max * 36].max end def update_padding_bottom surplus = (height - standard_padding * 2) % 36 self.padding_bottom = padding + surplus end def top_row oy / 36 end def page_row_max (height - padding - padding_bottom) / 36 end def top_row=(row) row = 0 if row < 0 row = row_max - 1 if row > row_max - 1 self.oy = row * 36 end end
Version History 0.9: Initial Release, Races and Classes unlimted, Appearances per class limited to 6 1.0: Lifted Appearance limit.
Finally
Finally please give credit to Kaimonkey if you use this script. This is a basic system, and if more needs to be added just make a suggestion below. Additionally if the config instructions are not that easy to read I will try and rewrite them, but I think they are ok for now.
Thanks, Kaimonkey
This post has been edited by kaimonkey: Apr 3 2012, 03:52 AM
Group: Director
Posts: 6,347
Type: None
RM Skill: Undisclosed
This looks really cool, but I didn't see a limit on how many races you can have; maximum. Suppose I wanted 30 different races to choose from; would that be possible by just adding them in there? (Obviously I wouldn't want 30, but I might put 5 or so...) Thanks! =]
This looks really cool, but I didn't see a limit on how many races you can have; maximum. Suppose I wanted 30 different races to choose from; would that be possible by just adding them in there? (Obviously I wouldn't want 30, but I might put 5 or so...) Thanks! =]
There shouldn't be a limit, all you have to do is keep copy and pasting the setup module
EDIT: Just ran a quick test and found there is no limit for the number of Races, but there IS a limit to the number of appearance (6). I will try and fix this shortly
EDITEDIT: Updated to 1.0 and now all three options are unlimited!
This post has been edited by kaimonkey: Apr 3 2012, 04:01 AM