Implemented usage of GameData::Item

This commit is contained in:
Maruno17
2020-11-08 22:45:59 +00:00
parent ff70791104
commit 1955d3698e
82 changed files with 1986 additions and 2195 deletions

View File

@@ -311,8 +311,8 @@ module Compiler
end
return enumer.const_get(ret.to_sym)
elsif enumer.is_a?(Symbol) || enumer.is_a?(String)
if enumer == :Ability
enumer = PokemonData.const_get(enumer.to_sym)
if [:Ability, :Item].include?(enumer)
enumer = GameData.const_get(enumer.to_sym)
begin
if ret == "" || !enumer.exists?(ret.to_sym)
raise _INTL("Undefined value {1} in {2}\r\n{3}", ret, enumer.name, FileLineData.linereport)
@@ -353,8 +353,8 @@ module Compiler
return nil if ret=="" || !(enumer.const_defined?(ret) rescue false)
return enumer.const_get(ret.to_sym)
elsif enumer.is_a?(Symbol) || enumer.is_a?(String)
if enumer == :Ability
enumer = PokemonData.const_get(enumer.to_sym)
if [:Ability, :Item].include?(enumer)
enumer = GameData.const_get(enumer.to_sym)
return nil if ret == "" || !enumer.exists?(ret.to_sym)
return ret.to_sym
end
@@ -566,7 +566,11 @@ module Compiler
clonitem = item.upcase
clonitem.sub!(/^\s*/,"")
clonitem.sub!(/\s*$/,"")
return pbGetConst(PBItems,clonitem,_INTL("Undefined item constant name: %s\r\nName must consist only of letters, numbers, and\r\nunderscores and can't begin with a number.\r\nMake sure the item is defined in\r\nPBS/items.txt.\r\n{1}",FileLineData.linereport))
itm = GameData::Item.try_get(clonitem)
if !itm
raise _INTL("Undefined item constant name: %s\r\nName must consist only of letters, numbers and\r\nunderscores, and can't begin with a number.\r\nMake sure the item is defined in\r\nPBS/items.txt.\r\n{1}",FileLineData.linereport)
end
return itm.id.to_s
end
def parseSpecies(item)
@@ -623,17 +627,17 @@ module Compiler
yield(_INTL("Compiling item data"))
compile_items # Depends on PBMoves
yield(_INTL("Compiling berry plant data"))
compile_berry_plants # Depends on PBItems
compile_berry_plants # Depends on Item
yield(_INTL("Compiling Pokémon data"))
compile_pokemon # Depends on PBMoves, PBItems, PBTypes, Ability
compile_pokemon # Depends on PBMoves, Item, PBTypes, Ability
yield(_INTL("Compiling Pokémon forms data"))
compile_pokemon_forms # Depends on PBSpecies, PBMoves, PBItems, PBTypes, Ability
compile_pokemon_forms # Depends on PBSpecies, PBMoves, Item, PBTypes, Ability
yield(_INTL("Compiling machine data"))
compile_move_compatibilities # Depends on PBSpecies, PBMoves
yield(_INTL("Compiling Trainer type data"))
compile_trainer_types # No dependencies
yield(_INTL("Compiling Trainer data"))
compile_trainers # Depends on PBSpecies, PBItems, PBMoves
compile_trainers # Depends on PBSpecies, Item, PBMoves
yield(_INTL("Compiling phone data"))
compile_phone # Depends on PBTrainers
yield(_INTL("Compiling metadata"))

View File

@@ -140,7 +140,7 @@ module Compiler
# Compile berry plants
#=============================================================================
def compile_berry_plants
sections = []
sections = {}
if File.exists?("PBS/berryplants.txt")
pbCompilerEachCommentedLine("PBS/berryplants.txt") { |line,_lineno|
if line[ /^\s*(\w+)\s*=\s*(.*)$/ ]
@@ -157,7 +157,7 @@ module Compiler
end
}
end
save_data(sections,"Data/berry_plants.dat")
save_data(sections, "Data/berry_plants.dat")
end
#=============================================================================
@@ -326,15 +326,16 @@ module Compiler
# Compile abilities
#=============================================================================
def compile_abilities
GameData::Ability::DATA.clear
ability_names = []
ability_descriptions = []
pbCompilerEachPreppedLine("PBS/abilities.txt") { |line, line_no|
line = pbGetCsvRecord(line, line_no, [0, "vnss"])
ability_number = line[0]
ability_symbol = line[1].to_sym
if PokemonData::Ability::DATA[ability_number]
if GameData::Ability::DATA[ability_number]
raise _INTL("Ability ID number '{1}' is used twice.\r\n{2}", ability_number, FileLineData.linereport)
elsif PokemonData::Ability::DATA[ability_symbol]
elsif GameData::Ability::DATA[ability_symbol]
raise _INTL("Ability ID '{1}' is used twice.\r\n{2}", ability_symbol, FileLineData.linereport)
end
# Construct ability hash
@@ -345,12 +346,12 @@ module Compiler
:description => line[3]
}
# Add ability's data to records
PokemonData::Ability::DATA[ability_number] = PokemonData::Ability::DATA[ability_symbol] = PokemonData::Ability.new(ability_hash)
GameData::Ability::DATA[ability_number] = GameData::Ability::DATA[ability_symbol] = GameData::Ability.new(ability_hash)
ability_names[ability_number] = ability_hash[:name]
ability_descriptions[ability_number] = ability_hash[:description]
}
# Save all data
PokemonData::Ability.save
GameData::Ability.save
MessageTypes.setMessages(MessageTypes::Abilities, ability_names)
MessageTypes.setMessages(MessageTypes::AbilityDescs, ability_descriptions)
Graphics.update
@@ -408,58 +409,45 @@ module Compiler
=end
def compile_items
records = []
constants = ""
itemnames = []
itempluralnames = []
itemdescs = []
maxValue = 0
pbCompilerEachCommentedLine("PBS/items.txt") { |line,lineno|
linerecord = pbGetCsvRecord(line,lineno,[0,"vnssuusuuUN"])
id = linerecord[0]
if records[id]
raise _INTL("Item ID number '{1}' is used twice.\r\n{2}",id,FileLineData.linereport)
GameData::Item::DATA.clear
item_names = []
item_names_plural = []
item_descriptions = []
# Read each line of items.txt at a time and compile it into an item
pbCompilerEachCommentedLine("PBS/items.txt") { |line, line_no|
line = pbGetCsvRecord(line, line_no, [0, "vnssuusuuUN"])
item_number = line[0]
item_symbol = line[1].to_sym
if GameData::Item::DATA[item_number]
raise _INTL("Item ID number '{1}' is used twice.\r\n{2}", item_number, FileLineData.linereport)
elsif GameData::Item::DATA[item_symbol]
raise _INTL("Item ID '{1}' is used twice.\r\n{2}", item_symbol, FileLineData.linereport)
end
record = []
record[ItemData::ID] = id
constant = linerecord[1]
constants += "#{constant}=#{id}\r\n"
record[ItemData::NAME] = linerecord[2]
itemnames[id] = linerecord[2]
record[ItemData::NAME_PLURAL] = linerecord[3]
itempluralnames[id] = linerecord[3]
record[ItemData::POCKET] = linerecord[4]
record[ItemData::PRICE] = linerecord[5]
record[ItemData::DESCRIPTION] = linerecord[6]
itemdescs[id] = linerecord[6]
record[ItemData::FIELD_USE] = linerecord[7]
record[ItemData::BATTLE_USE] = linerecord[8]
record[ItemData::TYPE] = linerecord[9]
if record[ItemData::TYPE]!="" && linerecord[10]
record[ItemData::MOVE] = parseMove(linerecord[10])
else
record[ItemData::MOVE] = 0
end
maxValue = [maxValue,id].max
records[id] = record
# Construct item hash
item_hash = {
:id_number => item_number,
:id => item_symbol,
:name => line[2],
:name_plural => line[3],
:pocket => line[4],
:price => line[5],
:description => line[6],
:field_use => line[7],
:battle_use => line[8],
:type => line[9]
}
item_hash[:move] = parseMove(line[10]) if !nil_or_empty?(line[10])
# Add item's data to records
GameData::Item::DATA[item_number] = GameData::Item::DATA[item_symbol] = GameData::Item.new(item_hash)
item_names[item_number] = item_hash[:name]
item_names_plural[item_number] = item_hash[:name_plural]
item_descriptions[item_number] = item_hash[:description]
}
MessageTypes.setMessages(MessageTypes::Items,itemnames)
MessageTypes.setMessages(MessageTypes::ItemPlurals,itempluralnames)
MessageTypes.setMessages(MessageTypes::ItemDescriptions,itemdescs)
save_data(records,"Data/items.dat")
code = "class PBItems\r\n"
code += constants
code += "def self.getName(id)\r\n"
code += "id=getID(PBItems,id)\r\n"
code += "return pbGetMessage(MessageTypes::Items,id); end\r\n"
code += "def self.getNamePlural(id)\r\n"
code += "id=getID(PBItems,id)\r\n"
code += "return pbGetMessage(MessageTypes::ItemPlurals,id); end\r\n"
code += "def self.getCount; return #{records.length}; end\r\n"
code += "def self.maxValue; return #{maxValue}; end\r\n"
code += "end\r\n"
eval(code, TOPLEVEL_BINDING)
pbAddScript(code,"PBItems")
# Save all data
GameData::Item.save
MessageTypes.setMessages(MessageTypes::Items, item_names)
MessageTypes.setMessages(MessageTypes::ItemPlurals, item_names_plural)
MessageTypes.setMessages(MessageTypes::ItemDescriptions, item_descriptions)
Graphics.update
end
@@ -1358,8 +1346,8 @@ module Compiler
trainernames[trainerindex] = record[0]
trainers[trainerindex][4] = record[1] if record[1]
when 3 # Number of Pokémon, items
record = pbGetCsvRecord(line,lineno,[0,"vEEEEEEEE",nil,PBItems,PBItems,
PBItems,PBItems,PBItems,PBItems,PBItems,PBItems])
record = pbGetCsvRecord(line,lineno,[0,"vEEEEEEEE",nil,
Item,Item,Item,Item,Item,Item,Item,Item])
record = [record] if record.is_a?(Integer)
record.compact!
oldcompilerlength += record[0]
@@ -1369,7 +1357,7 @@ module Compiler
pokemonindex += 1
trainers[trainerindex][3][pokemonindex] = []
record = pbGetCsvRecord(line,lineno,
[0,"evEEEEEUEUBEUUSBU",PBSpecies,nil, PBItems,PBMoves,PBMoves,PBMoves,
[0,"evEEEEEUEUBEUUSBU",PBSpecies,nil,Item,PBMoves,PBMoves,PBMoves,
PBMoves,nil,{"M"=>0,"m"=>0,"Male"=>0,"male"=>0,
"0"=>0,"F"=>1,"f"=>1,"Female"=>1,"female"=>1,
"1"=>1},nil,nil,PBNatures,nil,nil,nil,nil,nil])

View File

@@ -729,12 +729,12 @@ module Compiler
hidden = false
if name[/^HiddenItem\:\s*(\w+)\s*$/]
itemName = $1
return nil if !hasConst?(PBItems,itemName)
return nil if !GameData::Item.exists?(itemName)
ret.name = "HiddenItem"
hidden = true
elsif name[/^Item\:\s*(\w+)\s*$/]
itemName = $1
return nil if !hasConst?(PBItems,itemName)
return nil if !GameData::Item.exists?(itemName)
ret.name = "Item"
else
return nil
@@ -953,7 +953,7 @@ module Compiler
if params[0][/SellItem\s*\(\s*(\w+)\s*\,\s*(\d+)\s*\)/]
itemname = $1
cost = $2.to_i
if hasConst?(PBItems,itemname)
if GameData::Item.exists?(itemname)
oldIndent = list[i].indent
list.delete_at(i)
newEvents = []