#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# NPC Generator
# by berka rgss2
#
www.rpgmakervx-fr.com #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Rgss 2 v 2.0 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="preteritus random" # series of charsets used to create random character
# people1, people2...
$chara_nbre=1 # nombre de fichiers people
# Random dialogs (too lazy to translate everything)
$dialogues=["Test text", "Test text 2", "Test text 3"]
# in-game: $dialogues << "You are now an heroe for me !"
#==============================================================================
# END OF CUSTOMIZATION
#==============================================================================
$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 )]
#==============================================================================
# ** Berka's Module
#------------------------------------------------------------------------------
# This module lists the commands that the events can perform.
#==============================================================================
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]]",
:area => "[402,[@_area]]"
}
ProfCoord = 100 # Deep of x/y scan
end
end
include Berka::Pnj_Gen
#==============================================================================
# ** Array
#------------------------------------------------------------------------------
# This class has been edited to allow for random values to be returned.
#==============================================================================
class Array
def arand
self[Kernel.rand(self.size)]
end
end
#==============================================================================
# ** Object
#------------------------------------------------------------------------------
# This class has been edited to check if it is a "?"
#==============================================================================
class Object
def rand?
self == "?"
end
end
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
# Edited to do ?
#==============================================================================
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="?"
if !@_area.nil?
for i in $data_areas.values
if @_area == i.id
@_x = rand(i.rect.width)+i.rect.x
@_y = rand(i.rect.height)+i.rect.y
end
end
end
@_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
#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
# Edited to allow for disposing, then remaking the map's spriteset.
#==============================================================================
class Scene_Map < Scene_Base
def refresh_spriteset
@spriteset.dispose;@spriteset=Spriteset_Map.new
end
end
#==============================================================================
# ** Game_Interpreter
#------------------------------------------------------------------------------
# Changes the call script command to check if the tag's included
#==============================================================================
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
#==============================================================================
# END OF SCRIPT
#==============================================================================