Charcter Select

● ARCHIVED · READ-ONLY
Started by MooshraKun 5 posts View original ↗
  1. Ok I love the character select script made by MogHunter,but the the only thing that sucks is that in this script it lets you choose characters in an awesome way, but when you bring up the choices it loads all actors in the database I was wondering if some one could edit it to where I can choose which characters in the database I want to use.

    You can download the script and its demo here I do not own any of the contents of this demo.

    http://www.atelier-rgss.com/RGSS/Menu/ACE_Menu07.html

    I translated the the green text to english here.

    http://pastebin.com/dkWARn49
  2. Spoiler
    Code:
    #==============================================================================
    # +++ MOG - Scene Character Select V1.0 +++
    #==============================================================================
    # By Moghunter
    # http://www.atelier-rgss.com/
    #==============================================================================
    # Tela de seleção de personagens.
    #==============================================================================
    # 1 - Deverão conter as seguintes imagens na pasta GRAPHICS/SYSTEM.
    #
    # Background
    # Char_Layout01
    # Char_Layout02
    # Char_Status_Layout
    # Number_Char
    #
    # 2 - Imagem de pose. (Opcional)
    # Para ativar a imagem de pose dos personagens, basta ter os arquivos de pose
    # gravados na pasta (GRAPHICS/PICTURES)
    # Você deverá nomear as imagens da seguinte forma.
    #
    # Character + ID_DO_PERSONAGEM
    #
    # Exemplo:
    #
    # Character1.png
    #
    #==============================================================================
    # Para chamar o script use o seguinte comando.
    #
    # SceneManager.call(Scene_Character_Select)
    #
    #==============================================================================
    # Edited by Xypher
    #
    # Change the array in the below module to include the actor's you want
    # in the character select scene.
    #
    #==============================================================================
    
    module CS_Setup
    
      Actors_array = [1, 2, 3, 4, 5, 6]  
    
    end
    
    
    #==============================================================================
    # ■ Window_Base
    #==============================================================================
    class Window_Base < Window
    
      #--------------------------------------------------------------------------
      # ● draw_picture_number(x,y,value,file_name,align, space, frame_max ,frame_index)     
      #--------------------------------------------------------------------------
      # X - Posição na horizontal
      # Y - Posição na vertical
      # VALUE - Valor Numérico
      # FILE_NAME - Nome do arquivo
      # ALIGN - Centralizar 0 - Esquerda 1- Centro 2 - Direita  
      # SPACE - Espaço entre os números.
      # FRAME_MAX - Quantidade de quadros(Linhas) que a imagem vai ter.
      # FRAME_INDEX - Definição do quadro a ser utilizado.
      #--------------------------------------------------------------------------  
      def draw_picture_number(x,y,value, file_name,align = 0, space = 0, frame_max = 1,frame_index = 0)     
    	  number_image = Cache.system(file_name)
    	  frame_max = 1 if frame_max < 1
    	  frame_index = frame_max -1 if frame_index > frame_max -1
    	  align = 2 if align > 2
    	  cw = number_image.width / 10
    	  ch = number_image.height / frame_max
    	  h = ch * frame_index
    	  number = value.abs.to_s.split(//)
    	  case align
    		  when 0
    			 plus_x = (-cw + space) * number.size
    		  when 1
    			 plus_x = (-cw + space) * number.size
    			 plus_x /= 2
    		  when 2  
    			 plus_x = 0
    	  end
    	  for r in 0..number.size - 1	   
    		  number_abs = number[r].to_i
    		  number_rect = Rect.new(cw * number_abs, h, cw, ch)
    		  self.contents.blt(plus_x + x + ((cw - space) * r), y , number_image, number_rect)	    
    	  end
    	  number_image.dispose  
       end
      #--------------------------------------------------------------------------
      # ● draw_char_window_status  
      #--------------------------------------------------------------------------  
      def draw_char_window_status(x,y)
    	  image = Cache.system("Char_Status_Layout")    
    	  cw = image.width  
    	  ch = image.height
    	  src_rect = Rect.new(0, 0, cw, ch)    
    	  self.contents.blt(x , y , image, src_rect)
    	  image.dispose
      end     
    end  
    
    #===============================================================================
    # ■ RPG_FileTest
    #===============================================================================
    module RPG_FileTest
    
      #--------------------------------------------------------------------------
      # ● RPG_FileTest.system_exist?
      #--------------------------------------------------------------------------
      def RPG_FileTest.system_exist?(filename)
    	  return Cache.system(filename) rescue return false
      end  
    
      #--------------------------------------------------------------------------
      # ● RPG_FileTest.picture_exist?
      #--------------------------------------------------------------------------
      def RPG_FileTest.picture_exist?(filename)
    	  return Cache.picture(filename) rescue return false
      end   
    
    end
    
    #==============================================================================
    # ** Window_Character_Status
    #==============================================================================
    class Window_Character_Status < Window_Base
      attr_accessor :index
      #--------------------------------------------------------------------------
      # ● initialize
      #--------------------------------------------------------------------------
      def initialize(actor)
    	  super(0, 0, 400, 130)
    	  self.opacity = 0
    	  actor_id = []
    	  @index = actor
    	  CS_Setup::Actors_array.each do |i|
    	    actor_id.push($game_actors[i])
    	  end
    	  @actor = actor_id[actor -1]
    	  refresh
      end
      #--------------------------------------------------------------------------
      # ● Refresh
      #--------------------------------------------------------------------------
      def refresh
    	  self.contents.clear
    	  self.contents.font.bold = true
    	  self.contents.font.italic = true
    	  draw_char_window_status(0, 6)    
    	  draw_actor_face(@actor, 0, 0)
    	  draw_actor_name(@actor, 140, -5)
    	  draw_actor_class(@actor, 60, 70)    
    	  draw_picture_number(155,20,@actor.mhp, "Number_char",1)   
    	  draw_picture_number(145,48,@actor.mmp, "Number_char",1)    
    	  draw_picture_number(228,28,@actor.atk, "Number_char",1)   
    	  draw_picture_number(297,28,@actor.def, "Number_char",1)  
    	  draw_picture_number(207,68,@actor.mat, "Number_char",1)  
    	  draw_picture_number(277,68,@actor.agi, "Number_char",1)  
      end
    end
    
    
    #==============================================================================
    # ■ Scene Character Select
    #==============================================================================
    class Scene_Character_Select
    
     #--------------------------------------------------------------------------
     # ● Initialize
     #--------------------------------------------------------------------------
     def initialize
    	 setup
    	 create_layout
    	 create_window_status
    	 create_char_image
    	 reset_position(0)	  
     end
    
     #--------------------------------------------------------------------------
     # ● Setup
     #--------------------------------------------------------------------------
     def setup
    	 @char_index = 1
    	 @char_max = CS_Setup::Actors_array.size
    	 @pw_x = 300
    	 @aw_x = 200     
    	 @nw_x = 100	     
     end  
    
     #--------------------------------------------------------------------------
     # ● Main
     #--------------------------------------------------------------------------		  
     def main
    	 Graphics.transition
    	 execute_loop
    	 execute_dispose
     end   
    
     #--------------------------------------------------------------------------
     # ● Execute Loop
     #--------------------------------------------------------------------------		   
     def execute_loop
    	 loop do
    		  Graphics.update
    		  Input.update
    		  update
    		  if SceneManager.scene != self
    			  break
    		  end
    	 end
     end
    
     #--------------------------------------------------------------------------
     # ● create_background
     #--------------------------------------------------------------------------   
     def create_layout
    	  @background = Plane.new  
    	  @background.bitmap = Cache.system("Background")
    	  @background.z = 0
    	  @layout_01 = Sprite.new  
    	  @layout_01.bitmap = Cache.system("Char_Layout01")
    	  @layout_01.z = 10	  
    	  @layout_02 = Sprite.new  
    	  @layout_02.bitmap = Cache.system("Char_Layout02")
    	  @layout_02.blend_type = 1
    	  @layout_02.z = 1  
      end  
    
      #--------------------------------------------------------------------------
      # ● create_window_status
      #--------------------------------------------------------------------------  
      def create_window_status
    	  @window_status = []
    	  for i in 1..CS_Setup::Actors_array.size
    		  @window_status[i] = Window_Character_Status.new(i)
    		  @window_status[i].z = 7
    	  end
    	  check_active_window
      end  
    
      #--------------------------------------------------------------------------
      # ● create_window_status
      #--------------------------------------------------------------------------  
      def create_char_image    
    	  @actor_picture = []
    	  actor_id = []
    	  hrm = 1
    #~	   for i in 1..CS_Setup::Actors_array.size
    		  CS_Setup::Actors_array.each do |i|
    		  actor_id.push($game_actors[i])
    		  actor = actor_id[i - 1]
    		  @actor_picture[hrm] = Sprite.new
    		  file_name = "Character" + i.to_s
    		  file_name = "" unless RPG_FileTest.picture_exist?(file_name)
    		  @actor_picture[hrm].bitmap = Cache.picture(file_name)
    		  hrm += 1
    	  end   
    	  check_active_picture
      end
      #--------------------------------------------------------------------------
      # ● check_active_window
      #--------------------------------------------------------------------------   
      def check_active_window
    	 for i in 1..CS_Setup::Actors_array.size
    	    @pw = @char_index - 1
    	    @pw = 1 if @pw > @char_max
    	    @pw_y = 32
    	    @pw = @char_max if @pw < 1
    	    @aw = @char_index
    	    @aw_y = 160
    	    @nw = @char_index + 1
    	    @nw = 1 if @nw > @char_max
    	    @nw = @char_max if @nw < 1
    	    @nw_y = 288
    	    case @window_status[i].index
    		    when @pw,@aw,@nw
    				 @window_status[i].visible = true
    		    else
    				 @window_status[i].visible = false
    	    end
    	  end  
      end
    
      #--------------------------------------------------------------------------
      # ● check_active_picture  
      #--------------------------------------------------------------------------   
      def check_active_picture  
    	  for i in 1..CS_Setup::Actors_array.size
    	    case @window_status[i].index
    		    when @pw,@aw,@nw
    				 @actor_picture[i].visible = true
    				 @actor_picture[@pw].z = 4
    				 @actor_picture[@aw].z = 6   
    				 @actor_picture[@nw].z = 4	  
    				 @actor_picture[@pw].opacity = 120
    				 @actor_picture[@aw].opacity = 255
    				 @actor_picture[@nw].opacity = 120		    
    		    else
    				 @actor_picture[i].visible = false
    	    end     
    	  end
      end	  
    
      #--------------------------------------------------------------------------
      # ● terminate
      #--------------------------------------------------------------------------
      def execute_dispose
    	  RPG::BGM.fade(2500)
    	  Graphics.fadeout(60)
    	  Graphics.wait(40)
    	  RPG::BGM.stop	  
    	  for i in 1..CS_Setup::Actors_array.size
    		  @window_status[i].dispose
    		  @actor_picture[i].bitmap.dispose
    		  @actor_picture[i].dispose	    
    	  end   
    	  @background.bitmap.dispose
    	  @background.dispose
    	  @layout_01.bitmap.dispose    
    	  @layout_01.dispose
    	  @layout_02.bitmap.dispose    
    	  @layout_02.dispose    
        end
    
      #--------------------------------------------------------------------------
      # ● update
      #--------------------------------------------------------------------------
      def update
    	  @background.ox += 1
    	  update_select
    	  update_slide_window
    	  update_slide_image
      end
    
      #--------------------------------------------------------------------------
      # ● update_slide_window
      #--------------------------------------------------------------------------  
      def update_slide_window
    	  @window_status[@aw].x += 1 if @window_status[@aw].x < 0
    	  @window_status[@nw].x -= 2 if @window_status[@nw].x > -30
    	  @window_status[@pw].x -= 2 if @window_status[@pw].x > -30
    	  slide_window_y(@pw,@pw_y)
    	  slide_window_y(@aw,@aw_y)
    	  slide_window_y(@nw,@nw_y)
      end
    
      #--------------------------------------------------------------------------
      # ● update_slide_image   
      #--------------------------------------------------------------------------  
      def update_slide_image   
    	  slide_picture_x(@pw,@pw_x,15)
    	  slide_picture_x(@aw,@aw_x,5)
    	  slide_picture_x(@nw,@nw_x,15)
      end
    
      #--------------------------------------------------------------------------
      # ● slide_picture_x
      #--------------------------------------------------------------------------    
      def slide_picture_x(i,x_pos,speed)
    	  if @actor_picture[i].x < x_pos
    		 @actor_picture[i].x += speed
    		 @actor_picture[i].x = x_pos if @actor_picture[i].x > x_pos
    	  end  
    	  if @actor_picture[i].x > x_pos
    		 @actor_picture[i].x -= speed
    		 @actor_picture[i].x = x_pos if @actor_picture[i].x < x_pos	    
    	   end		     
      end     
    
      #--------------------------------------------------------------------------
      # ● slide_window_y
      #--------------------------------------------------------------------------    
      def slide_window_y(i,y_pos)
    	  if @window_status[i].y < y_pos
    		 @window_status[i].y += 15
    		 @window_status[i].y = y_pos if @window_status[i].y > y_pos
    	  end  
    	  if @window_status[i].y > y_pos
    		 @window_status[i].y -= 15
    		 @window_status[i].y = y_pos if @window_status[i].y < y_pos	    
    	   end		     
      end   
    
      #--------------------------------------------------------------------------
      # ● reset_position
      #--------------------------------------------------------------------------     
      def reset_position(diretion)
    	  check_active_window
    	  check_active_picture
    	  case diretion
    		 when 0
    		    @window_status[@pw].y = -64
    		    @actor_picture[@pw].x = 100
    		 when 1  
    		    @window_status[@nw].y = 440
    		    @actor_picture[@nw].x = 400
    	  end	    
      end  
    
      #--------------------------------------------------------------------------
      # ● update_select
      #--------------------------------------------------------------------------
      def update_select
    	   if Input.trigger?(Input::DOWN) or Input.trigger?(Input::LEFT)
    		  Sound.play_cursor
    		  @char_index += 1
    		  @char_index = 1 if @char_index > @char_max
    		  if @char_max < 3		  
    			 reset_position(0)
    		  else  
    			 reset_position(1)
    		  end   
    	   elsif Input.trigger?(Input::UP) or Input.trigger?(Input::RIGHT)
    		  Sound.play_cursor
    		  @char_index -= 1
    		  @char_index = @char_max if @char_index < 1
    		  reset_position(0)
    	   elsif Input.trigger?(Input::C)     
    		  Sound.play_ok
    		  $game_party.add_actor(@char_index)
    		  SceneManager.return
    	   end
      end
    end  
    
    $mog_rgss3_scene_character_select = true
    Edit the array in the module for the actors you want to appear in the character select scene, I think its working properly but it's nearly 4 am here so there might be something I missed.
  3. Thanks a million we both are so happy now we can do more with this.
  4. Annyone got a screen of ho it looks?
  5. Screen shot just try the demo in the first link.