Implemented GameData::Nature, improved registration of GameData entries

This commit is contained in:
Maruno17
2021-01-31 22:43:51 +00:00
parent 168a1e5df7
commit 9fe14395c0
18 changed files with 384 additions and 224 deletions

View File

@@ -637,27 +637,35 @@ PokemonDebugMenuCommands.register("setnature", {
"always_show" => true,
"effect" => proc { |pkmn, pkmnid, heldpoke, settingUpBattle, screen|
commands = []
(PBNatures.maxValue + 1).times do |i|
statUp = PBNatures.getStatRaised(i)
statDown = PBNatures.getStatLowered(i)
if statUp != statDown
text = _INTL("{1} (+{2}, -{3})", PBNatures.getName(i),
PBStats.getNameBrief(statUp), PBStats.getNameBrief(statDown))
ids = []
GameData::Nature.each do |nature|
if nature.stat_changes.length == 0
commands.push(_INTL("{1} (---)", nature.real_name))
else
text = _INTL("{1} (---)", PBNatures.getName(i))
plus_text = ""
minus_text = ""
nature.stat_changes.each do |change|
if change[1] > 0
plus_text += "/" if !plus_text.empty?
plus_text += PBStats.getNameBrief(change[0])
elsif change[1] < 0
minus_text += "/" if !minus_text.empty?
minus_text += PBStats.getNameBrief(change[0])
end
end
commands.push(_INTL("{1} (+{2}, -{3})", nature.real_name, plus_text, minus_text))
end
commands.push(text)
ids.push(nature.id)
end
commands.push(_INTL("[Reset]"))
cmd = pkmn.nature
cmd = ids.index(pkmn.nature_id || ids[0])
loop do
mag = _INTL("Nature is {1}.", PBNatures.getName(pkmn.nature))
mag = _INTL("Nature is {1}.", pkmn.nature.name)
cmd = screen.pbShowCommands(mag, commands, cmd)
break if cmd < 0
if cmd >= 0 && cmd <= PBNatures.maxValue # Set nature
pkmn.nature = cmd
pkmn.calcStats
elsif cmd == PBNatures.maxValue + 1 # Reset
if cmd >= 0 && cmd < commands.length - 1 # Set nature
pkmn.nature = ids[cmd]
elsif cmd == commands.length - 1 # Reset
pkmn.nature = nil
end
screen.pbRefreshSingle(pkmnid)

View File

@@ -51,7 +51,7 @@ def pbEncountersEditor
:step_chances => [],
:types => []
}
GameData::Encounter::DATA[encounter_hash[:id]] = GameData::Encounter.new(encounter_hash)
GameData::Encounter.register(encounter_hash)
maps.push([new_map_ID, new_version])
maps.sort! { |a, b| (a[0] == b[0]) ? a[1] <=> b[1] : a[0] <=> b[0] }
ret = maps.index([new_map_ID, new_version]) + 1
@@ -88,7 +88,7 @@ def pbEncountersEditor
:step_chances => GameData::Encounter.get(this_set[0], this_set[1]).step_chances.clone,
:types => types
}
GameData::Encounter::DATA[encounter_hash[:id]] = GameData::Encounter.new(encounter_hash)
GameData::Encounter.register(encounter_hash)
maps.push([new_map_ID, new_version])
maps.sort! { |a, b| (a[0] == b[0]) ? a[1] <=> b[1] : a[0] <=> b[0] }
ret = maps.index([new_map_ID, new_version]) + 1
@@ -393,7 +393,7 @@ def pbTrainerTypeEditor
:skill_code => line[8]
}
# Add trainer type's data to records
GameData::TrainerType::DATA[t_data.id_number] = GameData::TrainerType::DATA[t_data.id] = GameData::TrainerType.new(type_hash)
GameData::TrainerType.register(type_hash)
GameData::TrainerType.save
pbConvertTrainerData
end
@@ -455,7 +455,7 @@ def pbTrainerTypeEditorNew(default_name)
:gender => gender
}
# Add trainer type's data to records
GameData::TrainerType::DATA[id_number] = GameData::TrainerType::DATA[id.to_sym] = GameData::TrainerType.new(tr_type_hash)
GameData::TrainerType.register(tr_type_hash)
GameData::TrainerType.save
pbConvertTrainerData
pbMessage(_INTL("The trainer type {1} was created (ID: {2}).", name, id.to_s))
@@ -549,7 +549,7 @@ def pbTrainerBattleEditor
pbMessage(_INTL("Can't save. The Pokémon list is empty."))
else
trainer_hash = {
:id => tr_data.id_number,
:id_number => tr_data.id_number,
:trainer_type => data[0],
:name => data[1],
:version => data[2],
@@ -558,8 +558,8 @@ def pbTrainerBattleEditor
:items => items
}
# Add trainer type's data to records
key = [data[0], data[1], data[2]]
GameData::Trainer::DATA[tr_data.id_number] = GameData::Trainer::DATA[key] = GameData::Trainer.new(trainer_hash)
trainer_hash[:id] = [trainer_hash[:trainer_type], trainer_hash[:name], trainer_hash[:version]]
GameData::Trainer.register(trainer_hash)
if data[0] != old_type || data[1] != old_name || data[2] != old_version
GameData::Trainer::DATA.delete([old_type, old_name, old_version])
end
@@ -592,7 +592,7 @@ def pbTrainerBattleEditor
t = pbNewTrainer(tr_type, tr_name, tr_version, false)
if t
trainer_hash = {
:id => GameData::Trainer::DATA.keys.length / 2,
:id_number => GameData::Trainer::DATA.keys.length / 2,
:trainer_type => tr_type,
:name => tr_name,
:version => tr_version,
@@ -605,8 +605,8 @@ def pbTrainerBattleEditor
})
end
# Add trainer's data to records
key = [tr_type, tr_name, tr_version]
GameData::Trainer::DATA[trainer_hash[:id]] = GameData::Trainer::DATA[key] = GameData::Trainer.new(trainer_hash)
trainer_hash[:id] = [trainer_hash[:trainer_type], trainer_hash[:name], trainer_hash[:version]]
GameData::Trainer.register(trainer_hash)
pbMessage(_INTL("The Trainer battle was added."))
modified = true
end
@@ -657,7 +657,7 @@ module TrainerPokemonProperty
[_INTL("Level"), NonzeroLimitProperty.new(max_level), _INTL("Level of the Pokémon (1-{1}).", max_level)],
[_INTL("Name"), StringProperty, _INTL("Name of the Pokémon.")],
[_INTL("Form"), LimitProperty2.new(999), _INTL("Form of the Pokémon.")],
[_INTL("Gender"), GenderProperty.new, _INTL("Gender of the Pokémon.")],
[_INTL("Gender"), GenderProperty, _INTL("Gender of the Pokémon.")],
[_INTL("Shiny"), BooleanProperty2, _INTL("If set to true, the Pokémon is a different-colored Pokémon.")],
[_INTL("Shadow"), BooleanProperty2, _INTL("If set to true, the Pokémon is a Shadow Pokémon.")]
]
@@ -667,7 +667,7 @@ module TrainerPokemonProperty
pkmn_properties.concat([
[_INTL("Ability"), LimitProperty2.new(99), _INTL("Ability flag. 0=first ability, 1=second ability, 2-5=hidden ability.")],
[_INTL("Held item"), ItemProperty, _INTL("Item held by the Pokémon.")],
[_INTL("Nature"), EnumProperty2.new(PBNatures), _INTL("Nature of the Pokémon.")],
[_INTL("Nature"), NatureProperty, _INTL("Nature of the Pokémon.")],
[_INTL("IVs"), IVsProperty.new(Pokemon::IV_STAT_LIMIT), _INTL("Individual values for each of the Pokémon's stats.")],
[_INTL("EVs"), EVsProperty.new(Pokemon::EV_STAT_LIMIT), _INTL("Effort values for each of the Pokémon's stats.")],
[_INTL("Happiness"), LimitProperty2.new(255), _INTL("Happiness of the Pokémon (0-255).")],
@@ -759,7 +759,7 @@ def pbEditMetadata(map_id = 0)
:player_H => data[15]
}
# Add metadata's data to records
GameData::Metadata::DATA[map_id] = GameData::Metadata.new(metadata_hash)
GameData::Metadata.register(metadata_hash)
GameData::Metadata.save
else # Map metadata
# Construct metadata hash
@@ -787,7 +787,7 @@ def pbEditMetadata(map_id = 0)
:battle_environment => data[19]
}
# Add metadata's data to records
GameData::MapMetadata::DATA[map_id] = GameData::MapMetadata.new(metadata_hash)
GameData::MapMetadata.register(metadata_hash)
GameData::MapMetadata.save
end
Compiler.write_metadata
@@ -869,7 +869,7 @@ def pbItemEditor
:move => data[9]
}
# Add item's data to records
GameData::Item::DATA[itm.id_number] = GameData::Item::DATA[itm.id] = GameData::Item.new(item_hash)
GameData::Item.register(item_hash)
GameData::Item.save
Compiler.write_items
end
@@ -933,7 +933,7 @@ def pbItemEditorNew(default_name)
:description => description
}
# Add item's data to records
GameData::Item::DATA[id_number] = GameData::Item::DATA[id.to_sym] = GameData::Item.new(item_hash)
GameData::Item.register(item_hash)
GameData::Item.save
Compiler.write_items
pbMessage(_INTL("The item {1} was created (ID: {2}).", name, id.to_s))
@@ -1114,7 +1114,7 @@ def pbPokemonEditor
:shadow_size => data[43]
}
# Add species' data to records
GameData::Species::DATA[spec.id_number] = GameData::Species::DATA[spec.id] = GameData::Species.new(species_hash)
GameData::Species.register(species_hash)
GameData::Species.save
Compiler.write_pokemon
pbMessage(_INTL("Data saved."))

View File

@@ -384,17 +384,17 @@ end
class GenderProperty
def set(_settingname,_oldsetting)
module GenderProperty
def self.set(_settingname,_oldsetting)
ret = pbShowCommands(nil,[_INTL("Male"),_INTL("Female")],-1)
return (ret>=0) ? ret : nil
end
def defaultValue
def self.defaultValue
return nil
end
def format(value)
def self.format(value)
return _INTL("-") if !value
return (value==0) ? _INTL("Male") : (value==1) ? _INTL("Female") : "-"
end
@@ -402,6 +402,23 @@ end
module NatureProperty
def self.set(_settingname, oldsetting)
ret = pbChooseNatureList((oldsetting) ? oldsetting : nil)
return ret || oldsetting
end
def self.defaultValue
return nil
end
def self.format(value)
return (value && GameData::Nature.exists?(value)) ? GameData::Nature.get(value).real_name : "-"
end
end
module ItemProperty
def self.set(_settingname, oldsetting)
ret = pbChooseItemList((oldsetting) ? oldsetting : nil)

View File

@@ -206,6 +206,12 @@ def pbChooseAbilityList(default = nil)
return pbChooseList(commands, default, nil, -1)
end
def pbChooseNatureList(default = nil)
commands = []
GameData::Nature.each { |n| commands.push([n.id_number, n.name, n.id]) }
return pbChooseList(commands, default, nil, -1)
end
def pbChooseBallList(defaultMoveID = -1)
cmdwin = pbListWindow([], 200)
commands = []