Submit Your Article


 
RPG Maker

Welcome Guest ( Log In | Register )


  Games Resources RPG Maker VX RPG Maker XP Scripts Tutorials Downloads

 
Closed TopicStart new topic
> Kai Monkey's Character Creation with Races, Version 1.0
kaimonkey
post Apr 2 2012, 11:58 AM
Post #1


Level 11
Group Icon

Group: Revolutionary
Posts: 193
Type: Scripter
RM Skill: Beginner




Kai Monkey's Character Creation!

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.

#Race 1:
RaceAppearanceNames << ["Ginger","Green","Purple","Wings"]
RaceFaceImage << ["Actor1.png","Actor2.png","Actor3.png","Actor4.png"]
RaceFaceIndex << [1,2,3,4]
RaceChara << ["Actor1.png","Actor2.png","Actor3.png","Actor4.png"]
RaceIndex << [1,2,3,4]
#Race 2:
RaceAppearanceNames << ["Female","Male"]
RaceFaceImage << ["Actor3.png","Actor3.png"]
RaceFaceIndex << [6,5]
RaceChara << ["Actor3.png","Actor3.png"]
RaceIndex << [6,5]
#Race 3:
RaceAppearanceNames << ["Male"]
RaceFaceImage << ["Actor3.png"]
RaceFaceIndex << [7]
RaceChara << ["Actor3.png"]
RaceIndex << [7]

############END CONFIG############################

#==============================================================================
# ** Scene_Status
#------------------------------------------------------------------------------
#  This class performs the status screen processing.
#==============================================================================

class Scene_CharacterCreation < Scene_MenuBase
  #--------------------------------------------------------------------------
  # * Start Processing
  #--------------------------------------------------------------------------
  def start
    super
    create_status_window
    @stage = 1
    @finished = false
    @class_window = Window_Create.new(@actor)
    @race_window = Window_Race.new(@actor)
    @look_window = Window_Appearance.new(@actor,1)
    @status_window.width = Graphics.width
    @class_window.index =  (@actor.class.id - 1)
    @class_window.width = Graphics.width / 3
    @class_window.active = false
    @class_window.visible = false
    @look_window.active = false
    @look_window.visible = false
    @race_window.width = Graphics.width / 3
    @look_window.width = Graphics.width / 3
    @class_window.set_handler(:class,method(:changeActorClass))
    @class_window.set_handler(:cancel,   method(:back))
    @look_window.set_handler(:cancel,   method(:back))
    @look_window.set_handler(:look,   method(:finish))
    @race_window.set_handler(:race,method(:changeActorRace))
  end
alias oldupdate update
  def update()
    oldupdate()
    if @finished == true
      return_scene
    end
    raceID = @race_window.index
    appID = @look_window.index
    appIndex = RaceIndex
    @actor.set_graphic(RaceChara[raceID][appID],RaceIndex[raceID][appID]-1 ,RaceFaceImage[raceID][appID],RaceFaceIndex[raceID][appID]-1)
    #@actor.set_graphic("Animal.png" ,3,RaceFaceImage[raceID][appID],RaceFaceIndex[raceID][appID]-1)    
     $game_player.refresh
    classID = @class_window.index
    @actor.change_class(classID+1)
    @actor.hp = @actor.mhp
    @actor.mp = @actor.mmp
    @status_window.refresh
  end
  def finish()
    @finished = true
  end
  def back()
    @class_window.active = false
    @race_window.active = false    
    @look_window.active = false
    if @stage == 2
      @look_window.index = 0
      @race_window.active = true
      @stage = 1
    elsif @stage == 3
      @stage = 2
      @class_window.active = true  
    end
  end
  
  def changeActorClass()
    classID = @class_window.index
    @actor.change_class(classID+1)
    @actor.hp = @actor.mhp
    @actor.mp = @actor.mmp
    @stage = 3
    @look_window.active = true
    @look_window.visible = true
    @status_window.refresh
  end
  
  def changeActorRace()
    raceID = @race_window.index
    @actor.set_graphic(RaceFaceImage[raceID][0],RaceFaceIndex[raceID][0],RaceFaceImage[raceID][0],RaceFaceIndex[raceID][0]-1)
    @status_window.refresh
    @stage = 2
    @class_window.activate
    @class_window.visible = true
    @look_window.id=raceID
    @look_window.index = 0
    $game_variables[RaceVariable] = raceID +1
  end
  
  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
Go to the top of the page
 
+Quote Post
   
Laue
post Apr 2 2012, 10:57 PM
Post #2


Level 2
Group Icon

Group: Member
Posts: 26
Type: Developer
RM Skill: Intermediate




As awesome as it looks, I don't have an use for it. sad.gif
Anyway, good job.
Go to the top of the page
 
+Quote Post
   
X-M-O
post Apr 2 2012, 11:05 PM
Post #3


Level 82
Group Icon

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! =]


__________________________
Go to the top of the page
 
+Quote Post
   
kaimonkey
post Apr 3 2012, 01:58 AM
Post #4


Level 11
Group Icon

Group: Revolutionary
Posts: 193
Type: Scripter
RM Skill: Beginner




QUOTE (X-M-O @ Apr 3 2012, 08:05 AM) *
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
Looks like this

CODE
RaceAppearanceNames << ["Female","Male"]
RaceFaceImage << ["Actor3.png","Actor3.png"]
RaceFaceIndex << [6,5]
RaceChara << ["Actor3.png","Actor3.png"]
RaceIndex << [6,5]


and set up the values for each one.

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! biggrin.gif

This post has been edited by kaimonkey: Apr 3 2012, 04:01 AM
Go to the top of the page
 
+Quote Post
   
X-M-O
post Apr 3 2012, 10:59 AM
Post #5


Level 82
Group Icon

Group: Director
Posts: 6,347
Type: None
RM Skill: Undisclosed




Wow, that was fast - excellent work, and thanks for making the appearances unlimited as well! happy.gif


__________________________
Go to the top of the page
 
+Quote Post
   
XerX
post May 5 2012, 10:05 AM
Post #6


Team Mercury Leader
Group Icon

Group: Revolutionary
Posts: 108
Type: Artist
RM Skill: Intermediate




Great looking script. Too bad I don't have VXAce.


__________________________
-NOW UNDER A RELIABLE HOST!

Go to the top of the page
 
+Quote Post
   

Closed TopicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 

Lo-Fi Version Time is now: 24th May 2013 - 01:53 AM
RPG RPG Revolution is an Privacy Policy and Legal
eXTReMe Tracker