Added new section-based format for trainertypes.txt

This commit is contained in:
Maruno17
2021-06-20 01:00:21 +01:00
parent e4cdb95314
commit 1cec4fc90d
5 changed files with 520 additions and 147 deletions

View File

@@ -2,17 +2,31 @@ module GameData
class TrainerType class TrainerType
attr_reader :id attr_reader :id
attr_reader :real_name attr_reader :real_name
attr_reader :base_money
attr_reader :battle_BGM
attr_reader :victory_ME
attr_reader :intro_ME
attr_reader :gender attr_reader :gender
attr_reader :base_money
attr_reader :skill_level attr_reader :skill_level
attr_reader :skill_code attr_reader :skill_code
attr_reader :intro_ME
attr_reader :battle_BGM
attr_reader :victory_ME
DATA = {} DATA = {}
DATA_FILENAME = "trainer_types.dat" DATA_FILENAME = "trainer_types.dat"
SCHEMA = {
"Name" => [:name, "s"],
"Gender" => [:gender, "e", {"Male" => 0, "male" => 0, "M" => 0, "m" => 0, "0" => 0,
"Female" => 1, "female" => 1, "F" => 1, "f" => 1, "1" => 1,
"Unknown" => 2, "unknown" => 2, "Other" => 2, "other" => 2,
"Mixed" => 2, "mixed" => 2, "X" => 2, "x" => 2, "2" => 2}],
"BaseMoney" => [:base_money, "u"],
"SkillLevel" => [:skill_level, "u"],
"SkillCode" => [:skill_code, "s"],
"IntroME" => [:intro_ME, "s"],
"BattleBGM" => [:battle_BGM, "s"],
"VictoryME" => [:victory_ME, "s"]
}
extend ClassMethodsSymbols extend ClassMethodsSymbols
include InstanceMethods include InstanceMethods
@@ -68,13 +82,13 @@ module GameData
def initialize(hash) def initialize(hash)
@id = hash[:id] @id = hash[:id]
@real_name = hash[:name] || "Unnamed" @real_name = hash[:name] || "Unnamed"
@base_money = hash[:base_money] || 30
@battle_BGM = hash[:battle_BGM]
@victory_ME = hash[:victory_ME]
@intro_ME = hash[:intro_ME]
@gender = hash[:gender] || 2 @gender = hash[:gender] || 2
@base_money = hash[:base_money] || 30
@skill_level = hash[:skill_level] || @base_money @skill_level = hash[:skill_level] || @base_money
@skill_code = hash[:skill_code] @skill_code = hash[:skill_code]
@intro_ME = hash[:intro_ME]
@battle_BGM = hash[:battle_BGM]
@victory_ME = hash[:victory_ME]
end end
# @return [String] the translated name of this trainer type # @return [String] the translated name of this trainer type

View File

@@ -342,18 +342,18 @@ end
# Trainer type editor # Trainer type editor
#=============================================================================== #===============================================================================
def pbTrainerTypeEditor def pbTrainerTypeEditor
gender_array = []
GameData::TrainerType::SCHEMA["Gender"][2].each { |key, value| gender_array[value] = key if !gender_array[value] }
trainer_type_properties = [ trainer_type_properties = [
[_INTL("Internal Name"), ReadOnlyProperty, _INTL("Internal name that is used as a symbol like :XXX.")], [_INTL("ID"), ReadOnlyProperty, _INTL("ID of this Trainer Type (used as a symbol like :XXX).")],
[_INTL("Trainer Name"), StringProperty, _INTL("Name of the trainer type as displayed by the game.")], [_INTL("Name"), StringProperty, _INTL("Name of this Trainer Type as displayed by the game.")],
[_INTL("Base Money"), LimitProperty.new(9999), _INTL("Player earns this much money times the highest level among the trainer's Pokémon.")], [_INTL("Gender"), EnumProperty.new(gender_array), _INTL("Gender of this Trainer Type.")],
[_INTL("Battle BGM"), BGMProperty, _INTL("BGM played in battles against trainers of this type.")], [_INTL("BaseMoney"), LimitProperty.new(9999), _INTL("Player earns this much money times the highest level among the trainer's Pokémon.")],
[_INTL("Battle End ME"), MEProperty, _INTL("ME played when player wins battles against trainers of this type.")], [_INTL("SkillLevel"), LimitProperty.new(9999), _INTL("Skill level of this Trainer Type.")],
[_INTL("Battle Intro ME"), MEProperty, _INTL("ME played before battles against trainers of this type.")], [_INTL("SkillCode"), StringProperty, _INTL("Letters/phrases representing AI modifications of trainers of this type.")],
[_INTL("Gender"), EnumProperty.new([ [_INTL("IntroME"), MEProperty, _INTL("ME played before battles against trainers of this type.")],
_INTL("Male"), _INTL("Female"), _INTL("Undefined")]), [_INTL("BattleBGM"), BGMProperty, _INTL("BGM played in battles against trainers of this type.")],
_INTL("Gender of this Trainer type.")], [_INTL("VictoryME"), MEProperty, _INTL("ME played when player wins battles against trainers of this type.")]
[_INTL("Skill Level"), LimitProperty.new(9999), _INTL("Skill level of this Trainer type.")],
[_INTL("Skill Code"), StringProperty, _INTL("Letters/phrases representing AI modifications of trainers of this type.")],
] ]
pbListScreenBlock(_INTL("Trainer Types"), TrainerTypeLister.new(0, true)) { |button, tr_type| pbListScreenBlock(_INTL("Trainer Types"), TrainerTypeLister.new(0, true)) { |button, tr_type|
if tr_type if tr_type
@@ -372,26 +372,26 @@ def pbTrainerTypeEditor
data = [ data = [
t_data.id.to_s, t_data.id.to_s,
t_data.real_name, t_data.real_name,
t_data.base_money,
t_data.battle_BGM,
t_data.victory_ME,
t_data.intro_ME,
t_data.gender, t_data.gender,
t_data.base_money,
t_data.skill_level, t_data.skill_level,
t_data.skill_code t_data.skill_code,
t_data.intro_ME,
t_data.battle_BGM,
t_data.victory_ME
] ]
if pbPropertyList(t_data.id.to_s, data, trainer_type_properties, true) if pbPropertyList(t_data.id.to_s, data, trainer_type_properties, true)
# Construct trainer type hash # Construct trainer type hash
type_hash = { type_hash = {
:id => t_data.id, :id => t_data.id,
:name => data[1], :name => data[1],
:base_money => data[2], :gender => data[2],
:battle_BGM => data[3], :base_money => data[3],
:victory_ME => data[4], :skill_level => data[4],
:intro_ME => data[5], :skill_code => data[5],
:gender => data[6], :intro_ME => data[6],
:skill_level => data[7], :battle_BGM => data[7],
:skill_code => data[8] :victory_ME => data[8]
} }
# Add trainer type's data to records # Add trainer type's data to records
GameData::TrainerType.register(type_hash) GameData::TrainerType.register(type_hash)
@@ -436,8 +436,8 @@ def pbTrainerTypeEditorNew(default_name)
return nil return nil
end end
# Choose a gender # Choose a gender
gender = pbMessage(_INTL("Is the Trainer male, female or undefined?"), [ gender = pbMessage(_INTL("Is the Trainer male, female or unknown?"), [
_INTL("Male"), _INTL("Female"), _INTL("Undefined")], 0) _INTL("Male"), _INTL("Female"), _INTL("Unknown")], 0)
# Choose a base money value # Choose a base money value
params = ChooseNumberParams.new params = ChooseNumberParams.new
params.setRange(0, 255) params.setRange(0, 255)
@@ -447,8 +447,8 @@ def pbTrainerTypeEditorNew(default_name)
tr_type_hash = { tr_type_hash = {
:id => id.to_sym, :id => id.to_sym,
:name => name, :name => name,
:base_money => base_money, :gender => gender,
:gender => gender :base_money => base_money
} }
# Add trainer type's data to records # Add trainer type's data to records
GameData::TrainerType.register(tr_type_hash) GameData::TrainerType.register(tr_type_hash)

View File

@@ -952,23 +952,52 @@ module Compiler
#============================================================================= #=============================================================================
def compile_trainer_types(path = "PBS/trainertypes.txt") def compile_trainer_types(path = "PBS/trainertypes.txt")
GameData::TrainerType::DATA.clear GameData::TrainerType::DATA.clear
schema = GameData::TrainerType::SCHEMA
tr_type_names = [] tr_type_names = []
tr_type_hash = nil
# Read each line of trainertypes.txt at a time and compile it into a trainer type # Read each line of trainertypes.txt at a time and compile it into a trainer type
pbCompilerEachCommentedLine(path) { |line, line_no| pbCompilerEachPreppedLine(path) { |line, line_no|
if line[/^\s*\[\s*(.+)\s*\]\s*$/] # New section [tr_type_id]
# Add previous trainer type's data to records
GameData::TrainerType.register(tr_type_hash) if tr_type_hash
# Parse trainer type ID
tr_type_id = $~[1].to_sym
if GameData::TrainerType.exists?(tr_type_id)
raise _INTL("Trainer Type ID '{1}' is used twice.\r\n{2}", tr_type_id, FileLineData.linereport)
end
# Construct trainer type hash
tr_type_hash = {
:id => tr_type_id
}
elsif line[/^\s*(\w+)\s*=\s*(.*)\s*$/] # XXX=YYY lines
if !tr_type_hash
raise _INTL("Expected a section at the beginning of the file.\r\n{1}", FileLineData.linereport)
end
# Parse property and value
property_name = $~[1]
line_schema = schema[property_name]
next if !line_schema
property_value = pbGetCsvRecord($~[2], line_no, line_schema)
# Record XXX=YYY setting
tr_type_hash[line_schema[0]] = property_value
tr_type_names.push(tr_type_hash[:name]) if property_name == "Name"
else # Old format
# Add previous trainer type's data to records
GameData::TrainerType.register(tr_type_hash) if tr_type_hash
# Parse trainer type
line = pbGetCsvRecord(line, line_no, [0, "snsUSSSeUS", line = pbGetCsvRecord(line, line_no, [0, "snsUSSSeUS",
nil, nil, nil, nil, nil, nil, nil, { nil, nil, nil, nil, nil, nil, nil, {
"Male" => 0, "M" => 0, "0" => 0, "Male" => 0, "M" => 0, "0" => 0,
"Female" => 1, "F" => 1, "1" => 1, "Female" => 1, "F" => 1, "1" => 1,
"Mixed" => 2, "X" => 2, "2" => 2, "" => 2 "Mixed" => 2, "X" => 2, "2" => 2, "" => 2
}, nil, nil] }, nil, nil])
) tr_type_id = line[1].to_sym
type_symbol = line[1].to_sym if GameData::TrainerType.exists?(tr_type_id)
if GameData::TrainerType::DATA[type_symbol] raise _INTL("Trainer Type ID '{1}' is used twice.\r\n{2}", tr_type_id, FileLineData.linereport)
raise _INTL("Trainer type ID '{1}' is used twice.\r\n{2}", type_symbol, FileLineData.linereport)
end end
# Construct trainer type hash # Construct trainer type hash
type_hash = { tr_type_hash = {
:id => type_symbol, :id => tr_type_id,
:name => line[2], :name => line[2],
:base_money => line[3], :base_money => line[3],
:battle_BGM => line[4], :battle_BGM => line[4],
@@ -979,9 +1008,13 @@ module Compiler
:skill_code => line[9] :skill_code => line[9]
} }
# Add trainer type's data to records # Add trainer type's data to records
GameData::TrainerType.register(type_hash) GameData::TrainerType.register(tr_type_hash)
tr_type_names.push(type_hash[:name]) tr_type_names.push(tr_type_hash[:name])
tr_type_hash = nil
end
} }
# Add last trainer type's data to records
GameData::TrainerType.register(tr_type_hash) if tr_type_hash
# Save all data # Save all data
GameData::TrainerType.save GameData::TrainerType.save
MessageTypes.setMessagesAsHash(MessageTypes::TrainerTypes, tr_type_names) MessageTypes.setMessagesAsHash(MessageTypes::TrainerTypes, tr_type_names)

View File

@@ -556,19 +556,18 @@ module Compiler
def write_trainer_types def write_trainer_types
File.open("PBS/trainertypes.txt", "wb") { |f| File.open("PBS/trainertypes.txt", "wb") { |f|
add_PBS_header_to_file(f) add_PBS_header_to_file(f)
f.write("\#-------------------------------\r\n")
GameData::TrainerType.each do |t| GameData::TrainerType.each do |t|
f.write(sprintf("0,%s,%s,%d,%s,%s,%s,%s,%s,%s\r\n", f.write("\#-------------------------------\r\n")
csvQuote(t.id.to_s), f.write(sprintf("[%s]\r\n", t.id))
csvQuote(t.real_name), f.write(sprintf("Name = %s\r\n", t.real_name))
t.base_money, gender = GameData::TrainerType::SCHEMA["Gender"][2].key(t.gender)
csvQuote(t.battle_BGM), f.write(sprintf("Gender = %s\r\n", gender))
csvQuote(t.victory_ME), f.write(sprintf("BaseMoney = %d\r\n", t.base_money))
csvQuote(t.intro_ME), f.write(sprintf("SkillLevel = %d\r\n", t.skill_level)) if t.skill_level != t.base_money
["Male", "Female", "Mixed"][t.gender], f.write(sprintf("SkillCode = %s\r\n", t.skill_code)) if !nil_or_empty?(t.skill_code)
(t.skill_level == t.base_money) ? "" : t.skill_level.to_s, f.write(sprintf("IntroME = %s\r\n", t.intro_ME)) if !nil_or_empty?(t.intro_ME)
csvQuote(t.skill_code) f.write(sprintf("BattleBGM = %s\r\n", t.battle_BGM)) if !nil_or_empty?(t.battle_BGM)
)) f.write(sprintf("VictoryME = %s\r\n", t.victory_ME)) if !nil_or_empty?(t.victory_ME)
end end
} }
Graphics.update Graphics.update

View File

@@ -1,74 +1,401 @@
# See the documentation on the wiki to learn how to edit this file. # See the documentation on the wiki to learn how to edit this file.
#------------------------------- #-------------------------------
0,POKEMONTRAINER_Red,Pokémon Trainer,60,,,,Male,, [POKEMONTRAINER_Red]
0,POKEMONTRAINER_Leaf,Pokémon Trainer,60,,,,Female,, Name = Pokémon Trainer
0,POKEMONTRAINER_Brendan,Pokémon Trainer,60,,,,Male,, Gender = Male
0,POKEMONTRAINER_May,Pokémon Trainer,60,,,,Female,, BaseMoney = 60
0,RIVAL1,Rival,16,,,,Male,, #-------------------------------
0,RIVAL2,Rival,36,,,,Male,, [POKEMONTRAINER_Leaf]
0,AROMALADY,Aroma Lady,32,,,,Female,, Name = Pokémon Trainer
0,BEAUTY,Beauty,56,,,,Female,, Gender = Female
0,BIKER,Biker,32,,,,Male,, BaseMoney = 60
0,BIRDKEEPER,Bird Keeper,32,,,,Male,, #-------------------------------
0,BUGCATCHER,Bug Catcher,16,,,,Male,, [POKEMONTRAINER_Brendan]
0,BURGLAR,Burglar,88,,,,Male,32, Name = Pokémon Trainer
0,CHANELLER,Channeler,32,,,,Female,, Gender = Male
0,CUEBALL,Cue Ball,24,,,,Male,, BaseMoney = 60
0,ENGINEER,Engineer,48,,,,Male,, #-------------------------------
0,FISHERMAN,Fisherman,32,,,,Male,, [POKEMONTRAINER_May]
0,GAMBLER,Gambler,72,,,,Male,32, Name = Pokémon Trainer
0,GENTLEMAN,Gentleman,72,,,,Male,, Gender = Female
0,HIKER,Hiker,32,,,,Male,, BaseMoney = 60
0,JUGGLER,Juggler,32,,,,Male,, #-------------------------------
0,LADY,Lady,160,,,,Female,72, [RIVAL1]
0,PAINTER,Painter,16,,,,Female,, Name = Rival
0,POKEMANIAC,Poké Maniac,64,,,,Male,, Gender = Male
0,POKEMONBREEDER,Pokémon Breeder,48,,,,Female,, BaseMoney = 16
0,PROFESSOR,Professor,100,,,,Male,, #-------------------------------
0,ROCKER,Rocker,24,,,,Male,, [RIVAL2]
0,RUINMANIAC,Ruin Maniac,48,,,,Male,, Name = Rival
0,SAILOR,Sailor,32,,,,Male,, Gender = Male
0,SCIENTIST,Scientist,48,,,,Male,, BaseMoney = 36
0,SUPERNERD,Super Nerd,48,,,,Male,, #-------------------------------
0,TAMER,Tamer,40,,,,Male,, [AROMALADY]
0,BLACKBELT,Black Belt,32,,,,Male,, Name = Aroma Lady
0,CRUSHGIRL,Crush Girl,24,,,,Female,, Gender = Female
0,CAMPER,Camper,16,,,,Male,, BaseMoney = 32
0,PICNICKER,Picnicker,16,,,,Female,, #-------------------------------
0,COOLTRAINER_M,Cool Trainer,60,,,,Male,, [BEAUTY]
0,COOLTRAINER_F,Cool Trainer,60,,,,Female,, Name = Beauty
0,YOUNGSTER,Youngster,16,,,,Male,, Gender = Female
0,LASS,Lass,16,,,,Female,, BaseMoney = 56
0,POKEMONRANGER_M,Pokémon Ranger,60,,,,Male,, #-------------------------------
0,POKEMONRANGER_F,Pokémon Ranger,60,,,,Female,, [BIKER]
0,PSYCHIC_M,Psychic,32,,,,Male,, Name = Biker
0,PSYCHIC_F,Psychic,32,,,,Female,, Gender = Male
0,SWIMMER_M,Swimmer,16,,,,Male,32, BaseMoney = 32
0,SWIMMER_F,Swimmer,16,,,,Female,32, #-------------------------------
0,SWIMMER2_M,Swimmer,16,,,,Male,32, [BIRDKEEPER]
0,SWIMMER2_F,Swimmer,16,,,,Female,32, Name = Bird Keeper
0,TUBER_M,Tuber,4,,,,Male,16, Gender = Male
0,TUBER_F,Tuber,4,,,,Female,16, BaseMoney = 32
0,TUBER2_M,Tuber,4,,,,Male,16, #-------------------------------
0,TUBER2_F,Tuber,4,,,,Female,16, [BUGCATCHER]
0,COOLCOUPLE,Cool Couple,72,,,,Mixed,48, Name = Bug Catcher
0,CRUSHKIN,Crush Kin,48,,,,Mixed,, Gender = Male
0,SISANDBRO,Sis and Bro,16,,,,Mixed,48, BaseMoney = 16
0,TWINS,Twins,24,,,,Mixed,, #-------------------------------
0,YOUNGCOUPLE,Young Couple,60,,,,Mixed,32, [BURGLAR]
0,TEAMROCKET_M,Team Rocket,32,,,,Male,, Name = Burglar
0,TEAMROCKET_F,Team Rocket,32,,,,Female,, Gender = Male
0,ROCKETBOSS,Rocket Boss,100,,,,Male,, BaseMoney = 88
0,LEADER_Brock,Gym Leader,100,Battle Gym Leader,Battle victory leader,,Male,, SkillLevel = 32
0,LEADER_Misty,Gym Leader,100,Battle Gym Leader,Battle victory leader,,Female,, #-------------------------------
0,LEADER_Surge,Gym Leader,100,Battle Gym Leader,Battle victory leader,,Male,, [CHANELLER]
0,LEADER_Erika,Gym Leader,100,Battle Gym Leader,Battle victory leader,,Female,, Name = Channeler
0,LEADER_Koga,Gym Leader,100,Battle Gym Leader,Battle victory leader,,Male,, Gender = Female
0,LEADER_Sabrina,Gym Leader,100,Battle Gym Leader,Battle victory leader,,Female,, BaseMoney = 32
0,LEADER_Blaine,Gym Leader,100,Battle Gym Leader,Battle victory leader,,Male,, #-------------------------------
0,LEADER_Giovanni,Gym Leader,100,Battle Gym Leader,Battle victory leader,,Male,, [CUEBALL]
0,ELITEFOUR_Lorelei,Elite Four,100,Battle Elite,Battle victory leader,,Female,, Name = Cue Ball
0,ELITEFOUR_Bruno,Elite Four,100,Battle Elite,Battle victory leader,,Male,, Gender = Male
0,ELITEFOUR_Agatha,Elite Four,100,Battle Elite,Battle victory leader,,Female,, BaseMoney = 24
0,ELITEFOUR_Lance,Elite Four,100,Battle Elite,Battle victory leader,,Male,, #-------------------------------
0,CHAMPION,Champion,100,Battle Elite,Battle victory leader,,Male,, [ENGINEER]
Name = Engineer
Gender = Male
BaseMoney = 48
#-------------------------------
[FISHERMAN]
Name = Fisherman
Gender = Male
BaseMoney = 32
#-------------------------------
[GAMBLER]
Name = Gambler
Gender = Male
BaseMoney = 72
SkillLevel = 32
#-------------------------------
[GENTLEMAN]
Name = Gentleman
Gender = Male
BaseMoney = 72
#-------------------------------
[HIKER]
Name = Hiker
Gender = Male
BaseMoney = 32
#-------------------------------
[JUGGLER]
Name = Juggler
Gender = Male
BaseMoney = 32
#-------------------------------
[LADY]
Name = Lady
Gender = Female
BaseMoney = 160
SkillLevel = 72
#-------------------------------
[PAINTER]
Name = Painter
Gender = Female
BaseMoney = 16
#-------------------------------
[POKEMANIAC]
Name = Poké Maniac
Gender = Male
BaseMoney = 64
#-------------------------------
[POKEMONBREEDER]
Name = Pokémon Breeder
Gender = Female
BaseMoney = 48
#-------------------------------
[PROFESSOR]
Name = Professor
Gender = Male
BaseMoney = 100
#-------------------------------
[ROCKER]
Name = Rocker
Gender = Male
BaseMoney = 24
#-------------------------------
[RUINMANIAC]
Name = Ruin Maniac
Gender = Male
BaseMoney = 48
#-------------------------------
[SAILOR]
Name = Sailor
Gender = Male
BaseMoney = 32
#-------------------------------
[SCIENTIST]
Name = Scientist
Gender = Male
BaseMoney = 48
#-------------------------------
[SUPERNERD]
Name = Super Nerd
Gender = Male
BaseMoney = 48
#-------------------------------
[TAMER]
Name = Tamer
Gender = Male
BaseMoney = 40
#-------------------------------
[BLACKBELT]
Name = Black Belt
Gender = Male
BaseMoney = 32
#-------------------------------
[CRUSHGIRL]
Name = Crush Girl
Gender = Female
BaseMoney = 24
#-------------------------------
[CAMPER]
Name = Camper
Gender = Male
BaseMoney = 16
#-------------------------------
[PICNICKER]
Name = Picnicker
Gender = Female
BaseMoney = 16
#-------------------------------
[COOLTRAINER_M]
Name = Cool Trainer
Gender = Male
BaseMoney = 60
#-------------------------------
[COOLTRAINER_F]
Name = Cool Trainer
Gender = Female
BaseMoney = 60
#-------------------------------
[YOUNGSTER]
Name = Youngster
Gender = Male
BaseMoney = 16
#-------------------------------
[LASS]
Name = Lass
Gender = Female
BaseMoney = 16
#-------------------------------
[POKEMONRANGER_M]
Name = Pokémon Ranger
Gender = Male
BaseMoney = 60
#-------------------------------
[POKEMONRANGER_F]
Name = Pokémon Ranger
Gender = Female
BaseMoney = 60
#-------------------------------
[PSYCHIC_M]
Name = Psychic
Gender = Male
BaseMoney = 32
#-------------------------------
[PSYCHIC_F]
Name = Psychic
Gender = Female
BaseMoney = 32
#-------------------------------
[SWIMMER_M]
Name = Swimmer
Gender = Male
BaseMoney = 16
SkillLevel = 32
#-------------------------------
[SWIMMER_F]
Name = Swimmer
Gender = Female
BaseMoney = 16
SkillLevel = 32
#-------------------------------
[SWIMMER2_M]
Name = Swimmer
Gender = Male
BaseMoney = 16
SkillLevel = 32
#-------------------------------
[SWIMMER2_F]
Name = Swimmer
Gender = Female
BaseMoney = 16
SkillLevel = 32
#-------------------------------
[TUBER_M]
Name = Tuber
Gender = Male
BaseMoney = 4
SkillLevel = 16
#-------------------------------
[TUBER_F]
Name = Tuber
Gender = Female
BaseMoney = 4
SkillLevel = 16
#-------------------------------
[TUBER2_M]
Name = Tuber
Gender = Male
BaseMoney = 4
SkillLevel = 16
#-------------------------------
[TUBER2_F]
Name = Tuber
Gender = Female
BaseMoney = 4
SkillLevel = 16
#-------------------------------
[COOLCOUPLE]
Name = Cool Couple
Gender = Unknown
BaseMoney = 72
SkillLevel = 48
#-------------------------------
[CRUSHKIN]
Name = Crush Kin
Gender = Unknown
BaseMoney = 48
#-------------------------------
[SISANDBRO]
Name = Sis and Bro
Gender = Unknown
BaseMoney = 16
SkillLevel = 48
#-------------------------------
[TWINS]
Name = Twins
Gender = Unknown
BaseMoney = 24
#-------------------------------
[YOUNGCOUPLE]
Name = Young Couple
Gender = Unknown
BaseMoney = 60
SkillLevel = 32
#-------------------------------
[TEAMROCKET_M]
Name = Team Rocket
Gender = Male
BaseMoney = 32
#-------------------------------
[TEAMROCKET_F]
Name = Team Rocket
Gender = Female
BaseMoney = 32
#-------------------------------
[ROCKETBOSS]
Name = Rocket Boss
Gender = Male
BaseMoney = 100
#-------------------------------
[LEADER_Brock]
Name = Gym Leader
Gender = Male
BaseMoney = 100
BattleBGM = Battle Gym Leader
VictoryME = Battle victory leader
#-------------------------------
[LEADER_Misty]
Name = Gym Leader
Gender = Female
BaseMoney = 100
BattleBGM = Battle Gym Leader
VictoryME = Battle victory leader
#-------------------------------
[LEADER_Surge]
Name = Gym Leader
Gender = Male
BaseMoney = 100
BattleBGM = Battle Gym Leader
VictoryME = Battle victory leader
#-------------------------------
[LEADER_Erika]
Name = Gym Leader
Gender = Female
BaseMoney = 100
BattleBGM = Battle Gym Leader
VictoryME = Battle victory leader
#-------------------------------
[LEADER_Koga]
Name = Gym Leader
Gender = Male
BaseMoney = 100
BattleBGM = Battle Gym Leader
VictoryME = Battle victory leader
#-------------------------------
[LEADER_Sabrina]
Name = Gym Leader
Gender = Female
BaseMoney = 100
BattleBGM = Battle Gym Leader
VictoryME = Battle victory leader
#-------------------------------
[LEADER_Blaine]
Name = Gym Leader
Gender = Male
BaseMoney = 100
BattleBGM = Battle Gym Leader
VictoryME = Battle victory leader
#-------------------------------
[LEADER_Giovanni]
Name = Gym Leader
Gender = Male
BaseMoney = 100
BattleBGM = Battle Gym Leader
VictoryME = Battle victory leader
#-------------------------------
[ELITEFOUR_Lorelei]
Name = Elite Four
Gender = Female
BaseMoney = 100
BattleBGM = Battle Elite
VictoryME = Battle victory leader
#-------------------------------
[ELITEFOUR_Bruno]
Name = Elite Four
Gender = Male
BaseMoney = 100
BattleBGM = Battle Elite
VictoryME = Battle victory leader
#-------------------------------
[ELITEFOUR_Agatha]
Name = Elite Four
Gender = Female
BaseMoney = 100
BattleBGM = Battle Elite
VictoryME = Battle victory leader
#-------------------------------
[ELITEFOUR_Lance]
Name = Elite Four
Gender = Male
BaseMoney = 100
BattleBGM = Battle Elite
VictoryME = Battle victory leader
#-------------------------------
[CHAMPION]
Name = Champion
Gender = Male
BaseMoney = 100
BattleBGM = Battle Elite
VictoryME = Battle victory leader