NPC Generator
Version: 2.1
By: Berka
IntroductionThis 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...
Screenshotsnone
Demohere ScriptCODE
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# 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
InstructionsRead the comments at the begining of the script.
Do not use this script in parallel process !
FAQPlace this script above main
CompatibilityNo problem.
You may have problems with my video script
Credits and ThanksMithos 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