Submit Your Article


 
RPG Maker

Welcome Guest ( Log In | Register )


  Games Resources RPG Maker VX RPG Maker XP Scripts Tutorials Downloads

> Berka's NPC Generator, Make your world alive
berka
post Apr 27 2009, 01:36 PM
Post #1


Level 8
Group Icon

Group: Revolutionary
Posts: 111
Type: Scripter
RM Skill: Advanced




NPC Generator
Version: 2.1
By: Berka


Introduction
This script allows you to create characters during play and randomly, without knowing Ruby. Your game will be more realistic and alive.

Features
  • random checked position
  • name generator
  • random dialog generator
  • dialogs, item/gold/armor gains...


Screenshots
none

Demo
here

Script
CODE
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#                            NPC Generator
#  by berka                                            rgss2
#                          www.rpgmakervx-fr.com                                          
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#  Rgss 2                  v 2.1        based on mithos & pipo work
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#                          -Instructions-
# Write in an event, call a script command:
#
# minumum required:
# [event]               # compulsory !
#  chara : "Actor01"    # name of the charset file or: chara : rand
#
# and optional settings:
#  x : 5                # x position, random if nothing
#  y : 10               # y position, random if nothing
#  nom : "Event01"      # event's name or nom: rand
#  c_index : 0          # charset's index
#  face : "Actor01"     # name of the faceset file or: face : true (=> same as chara)
#  f_index : 0          # faceset's index
#  dir : 2              # event direction
#  type_mov:0           # movement type
#  vit_mov:0            # movement speed
#  freq_mov:0           # muvement frequency
#  texte:"bonjour"      # dialog or texte:rand (cf. list above)
#  trigger:0            # event trigger
#  prio_type:1          # priority
#  script: "print @a=1" # script command
#  combat: 1,true,false # battle: id_monster, esc, follow if defeated
#  or: 0,0,1000         # gold:      0/1 (add/rem),0/1 (Const/var),amount (nbr/var_id)
#  objet: 2,0,0,10      # item:   id,0/1 (add/rem),0/1 (Const/var),amount (nbr/var_id)
#  arme: 2,0,0,10       # weapon: id,0/1 (add/rem),0/1 (Const/var),amount (nbr/var_id)
#  bouclier: 2,0,0,10   # armor:  id,0/1 (add/rem),0/1 (Const/var),amount (nbr/var_id)
#  suppr : true         # erase this generated event
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Example:
#
# [event]
# chara:rand
# texte:rand
# type_mov : 1
#
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

$characters="people" # series of charsets used to create random character
                     # people1, people2...
$chara_nbre=5         # nombre de fichiers people                  
# Random dialogs (too lazy to translate everything)                    
# Random dialogs (translated by phenixryte23)                    
$dialogues=["Hello, the weather's lovely don't you think?","How are you?","Get out of here!",
            "I don't have time to talk!","You're annoying me...","You again?",
            "Ah!There you are my friend!","Hey, you seem tired.", "Grrrrr...",
            "Get out of my sight!","What a beautiful day!","I'm just taking a walk.","You're back?",
            "Hihihi!","Nothing.","I don't want to talk to you.","What to do?","Oh, it's �N[1]!",
            "Weather's changing...","You're my idol...","God, you're so ugly!",
            "You remind me of someone...","You seem underhanded","Hi �N[1] !",
            "I don't trust you...","Don't come near me!","I'm suffering",
            "Hey! Do you know this girl?","Ahhahaharff...","Good day","Be careful!",
            "Honored to see you again","...cough...","Hey-ho!","Another stranger?","Boo!",
            "I can't hear a word you're saying...","Speak clearly!","Speak a little quieter.",
            "I've been walking all day.","I agree.","Get out of my way beggar!",
            "Good day young man","...sob...","You're bringing bad luck here!","I hear you.",
            "Don't look at me like that!","We need to talk...","It's time for breakfast!",
            "I'm glad to have known you."]
            # in-game: $dialogues << "You are now an heroe for me !"
            
$nom=[%w(Gw Ul Et Rh Ed Gr Dr Dw Tr Gh As Ar Ag Xor),             # name generator
      %w(ai ia eo ui yn or ul ur a e i o u y yr ya yl),
      %w(th rk dd gh z l mn lyr zar gor ryn nia lia )]
      
module Berka
  module Pnj_Gen
    Tag = "[event]"                                           # Tag of NPC generator
    Separateur = ":"                                          # Separator: cmd/value
    Index_Chara = 8                                           # Number of patterns
    Commandes = {:face     => "[101,[@_face,@_f_index,0,2]]", # List of commands
                 :or       => "[125,[*@_or]]",
                 :objet    => "[126,[*@_objet]]",
                 :arme     => "[127,[*@_arme]]",
                 :bouclier => "[128,[*@_bouclier]]",
                 :combat   => "[301,[0,*@_combat])]",
                 :script   => "[355,[@_script]]",
                 :suppr    => "[214]",
                 :texte    => "[401,[@_texte]]"
                }
    ProfCoord = 100                                           # Deep of x/y scan
  end
end

include Berka::Pnj_Gen
class Array
  def arand
    self[Kernel.rand(self.size)]
  end
end
class Object
  def rand?
    self == "?"
  end
end
class Game_Map
  include RPG
  def check_event(x,y)
    for event in @events.values
      return event.id if event.x==x&&event.y==y
    end
    return nil
  end
  def make_event(com)
    self.instance_variables.each{|v|eval("#{v}=nil") if v.include?("@_")}
    rand="?"
    com.each_with_index{|c,i|eval("@_#{c.first.id2name}=#{c[1]}")}
    set_rand
    set_options
    return if @_x.nil?||@_y.nil?
    if check_event(@_x,@_y).nil?
      @event=Event.new(@_x,@_y)
      com.each{|c|c=c.first
        ajout_cmd(*eval("#{Commandes[c]}"))if Commandes.has_key?(c)
      }
      @event.id=creerid
      @event.name=@_nom
      @event.pages.first.graphic.character_name=@_chara
      @event.pages.first.graphic.character_index=@_c_index
      @event.pages.first.graphic.direction=@_dir
      @event.pages.first.move_type=@_type_mov
      @event.pages.first.move_frequency=@_freq_mov
      @event.pages.first.move_speed=@_vit_mov
      @event.pages.first.through=@_trav
      @event.pages.first.trigger=@_trigger
      @event.pages.first.priority_type=@_prio_type
      @events[@event.id]=Game_Event.new(@map_id,@event)
      @need_refresh=true
      $scene.refresh_spriteset  
    end
  end
  def set_rand
    rand="?"
    @_chara||=rand
    @_nom=aleatoire_nom if @_nom.nil?
    @_texte=$dialogues.arand if @_texte.rand?
    @_x,@_y=*aleatoire_pos if @_x.nil?||@_y.nil?
    @_pers=aleatoire_perso
    if @_chara.rand?||@_c_index.rand?
      @_face,@_f_index,@_chara,@_c_index=@_pers
    end
  end
  def set_options
    @_chara=@_pers.first if @chara.nil?
    @_c_index=@_pers[1] if @_c_index.nil?
    @_face,@_f_index = "",0 if @_face==false
    @_dir||=3
    @_type_mov||=0
    @_freq_mov||=3
    @_vit_mov||=3
    @_trav||=false
    @_trigger||=0
    @_prio_type||=1
  end
  def aleatoire_pos
    ProfCoord.times{
      x,y=Kernel.rand(width).to_i,Kernel.rand(height).to_i
      next if x==$game_player.x&&y==$game_player.y
      (return x,y) if passable?(x,y)&&!check_event(x,y)
    }
    return nil,nil
  end
  def aleatoire_perso
    i=Kernel.rand(Index_Chara-1)
    res=$characters+(Kernel.rand($chara_nbre)+1).to_s
    return [res,i,res,i]
  end
  def aleatoire_nom
    n="#{$nom.first.arand}#{$nom[1].arand}#{$nom[2].arand}"
    n<<$nom[1].arand if rand(4)==1
    return n
  end
  def event_name(id)
    @events[id].name if !@events[id].nil?
  end
  def creerid
    id=1
    id+=1 while @events.keys.include?(id)
    return id
  end
  def ajout_cmd(code,param=[],i=0)
    cmd=EventCommand.new
    cmd.code,cmd.parameters,cmd.indent=code,param,i
    @event.pages.first.list.insert(-2,cmd)
  end
end
class Scene_Map<Scene_Base
  def refresh_spriteset
    @spriteset.dispose;@spriteset=Spriteset_Map.new
  end
end
class Game_Interpreter
  def eval(script)
    if script.include?(Tag)
      com=[];script.gsub!(Tag,'')
      list=script.split("\n")
      s=Separateur
      list.each_with_index{|e,i|e.gsub!(' '+s,s);e.gsub!(s+' ',s);f=e.split(s)
      com<<[f.first.to_sym,f[1]]if !f[1].nil?}
      $game_map.make_event(com)
      return
    end
    return Kernel.eval(script)
  end
end


Instructions
Read the comments at the begining of the script.
Do not use this script in parallel process !

FAQ
Place this script above main

Compatibility
No problem.
You may have problems with my video script

Credits and Thanks
Mithos and Pipo both famous French Scripters
phenixryte23 for dialogs translating

Terms and Conditions

this script is totally free of use, but I need an apparent credit in your game and:
Do not post these scripts anywhere without my permission !

have fun.
Berka

This post has been edited by berka: May 4 2009, 12:27 PM


__________________________
Go to the top of the page
 
+Quote Post
   
 
Start new topic
Replies
noahflash14
post Apr 29 2009, 02:55 PM
Post #2


Level 4
Group Icon

Group: Member
Posts: 54
Type: Artist
RM Skill: Beginner




Aw! I can't understand the demo because it's in French? Can anyone translate it..?


__________________________
Pokemon SXR by noahflash14
[Updated(11-06-10): added 4 spritesn] Pokemon SR = 22

Don't forget to visit Pokemon SXR thread.
Go to the top of the page
 
+Quote Post
   

Posts in this topic
- berka   Berka's NPC Generator   Apr 27 2009, 01:36 PM
- - fogfactor   you should get some screenies, cause i don't r...   Apr 27 2009, 01:44 PM
- - berka   ow... I think that screenies will be useless... U...   Apr 27 2009, 01:57 PM
- - fogfactor   ok, what i THINK this does is make random events? ...   Apr 27 2009, 02:33 PM
|- - xeyla   QUOTE (fogfactor @ Apr 27 2009, 06:33 PM)...   Apr 27 2009, 03:53 PM
- - SuperMega   Wow, this is exactly what I needed for one of my p...   Apr 27 2009, 08:38 PM
- - berka   xeyla: It's what you say ! Thanks guys, b...   Apr 28 2009, 08:43 AM
- - SuperMega   Hm, I'm getting a syntax error. Is it possibl...   Apr 28 2009, 04:34 PM
- - berka   New version. I'll post a demo in a few minutes...   Apr 29 2009, 05:33 AM
- - bahumut0   hey this is cool. im just missing the images, so i...   Apr 29 2009, 06:44 AM
- - Valnar   type_mov:1 and other stuff all well explained in t...   Apr 29 2009, 06:56 AM
- - berka   @bahamut0 : it depends on what kind of event do yo...   Apr 29 2009, 08:17 AM
- - darkubersaw   demo no longer works. i suggest upload it to media...   Apr 29 2009, 02:43 PM
- - reijubv   Hmm...the demo is no longer can be downloaded from...   Apr 30 2009, 01:32 AM
- - berka   Demo updated. About the NMS, it depends on how you...   Apr 30 2009, 10:36 AM
- - SuperMega   Hm, the demo seems to be gone. Can you re-upload ...   May 1 2009, 05:15 PM
- - berka   thanks, I've corrected the dl link. berka   May 2 2009, 12:40 AM
- - reijubv   Yeah, now I can download your demo! Thanks...   May 2 2009, 12:52 AM
- - berka   yes, of course, if you right the correct tags in t...   May 2 2009, 06:27 AM
- - reijubv   Well that's a good thing! Thanks, berka...   May 3 2009, 10:32 PM
- - UltiHaker   Demo link broken, please upload it again. Thank yo...   May 3 2009, 10:58 PM
- - phenixryte23   Thought I'd translate the French in there. Nic...   May 4 2009, 07:06 AM
- - OMG_RAWR!   The demo won't open up for me it says it's...   May 4 2009, 11:49 AM
- - Protoman5801   Sorry, I must ask a very newbish question but...ho...   May 19 2009, 03:57 PM
- - berka   Try this: create a new event: on the 'call a ...   May 20 2009, 06:07 AM
- - Protoman5801   Thank you for the much needed help. Okay, I have a...   May 20 2009, 04:03 PM
- - berka   just: CODE[event] chara:rand texte...   May 23 2009, 02:20 AM
- - Protoman5801   Sorry, what I meant to ask was how do you make the...   May 23 2009, 04:23 AM
- - Steve_1993   Love it.   May 23 2009, 06:46 PM
- - jetamex   I am gonna use this if you wont mind...   May 23 2009, 08:44 PM
- - cutiesita   I apologize for necroposting, but I have a problem...   Sep 27 2009, 09:45 AM
- - DodgyDutchman   QUOTE (cutiesita @ Sep 27 2009, 09:45 AM)...   Feb 22 2013, 01:01 PM


Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 

Lo-Fi Version Time is now: 19th June 2013 - 11:26 AM
RPG RPG Revolution is an Privacy Policy and Legal
eXTReMe Tracker