Super shininess can now be set for a Pokémon, and trainers.txt can define a Pokémon as super shiny

This commit is contained in:
Maruno17
2021-06-24 18:21:47 +01:00
parent bb429a2680
commit 223d480e0f
4 changed files with 50 additions and 38 deletions

View File

@@ -12,24 +12,25 @@ module GameData
DATA_FILENAME = "trainers.dat" DATA_FILENAME = "trainers.dat"
SCHEMA = { SCHEMA = {
"Items" => [:items, "*e", :Item], "Items" => [:items, "*e", :Item],
"LoseText" => [:lose_text, "s"], "LoseText" => [:lose_text, "s"],
"Pokemon" => [:pokemon, "ev", :Species], # Species, level "Pokemon" => [:pokemon, "ev", :Species], # Species, level
"Form" => [:form, "u"], "Form" => [:form, "u"],
"Name" => [:name, "s"], "Name" => [:name, "s"],
"Moves" => [:moves, "*e", :Move], "Moves" => [:moves, "*e", :Move],
"Ability" => [:ability, "e", :Ability], "Ability" => [:ability, "e", :Ability],
"AbilityIndex" => [:ability_index, "u"], "AbilityIndex" => [:ability_index, "u"],
"Item" => [:item, "e", :Item], "Item" => [:item, "e", :Item],
"Gender" => [:gender, "e", { "M" => 0, "m" => 0, "Male" => 0, "male" => 0, "0" => 0, "Gender" => [:gender, "e", { "M" => 0, "m" => 0, "Male" => 0, "male" => 0, "0" => 0,
"F" => 1, "f" => 1, "Female" => 1, "female" => 1, "1" => 1 }], "F" => 1, "f" => 1, "Female" => 1, "female" => 1, "1" => 1 }],
"Nature" => [:nature, "e", :Nature], "Nature" => [:nature, "e", :Nature],
"IV" => [:iv, "uUUUUU"], "IV" => [:iv, "uUUUUU"],
"EV" => [:ev, "uUUUUU"], "EV" => [:ev, "uUUUUU"],
"Happiness" => [:happiness, "u"], "Happiness" => [:happiness, "u"],
"Shiny" => [:shininess, "b"], "Shiny" => [:shininess, "b"],
"Shadow" => [:shadowness, "b"], "SuperShiny" => [:super_shininess, "b"],
"Ball" => [:poke_ball, "e", :Item], "Shadow" => [:shadowness, "b"],
"Ball" => [:poke_ball, "e", :Item],
} }
extend ClassMethodsSymbols extend ClassMethodsSymbols
@@ -130,7 +131,7 @@ module GameData
pkmn.ability = pkmn_data[:ability] pkmn.ability = pkmn_data[:ability]
pkmn.gender = pkmn_data[:gender] || ((trainer.male?) ? 0 : 1) pkmn.gender = pkmn_data[:gender] || ((trainer.male?) ? 0 : 1)
pkmn.shiny = (pkmn_data[:shininess]) ? true : false pkmn.shiny = (pkmn_data[:shininess]) ? true : false
pkmn.super_shiny = false pkmn.super_shiny = (pkmn_data[:super_shininess]) ? true : false
if pkmn_data[:nature] if pkmn_data[:nature]
pkmn.nature = pkmn_data[:nature] pkmn.nature = pkmn_data[:nature]
else # Make the nature random but consistent for the same species used by the same trainer type else # Make the nature random but consistent for the same species used by the same trainer type

View File

@@ -629,6 +629,7 @@ module TrainerPokemonProperty
initsetting[:form], initsetting[:form],
initsetting[:gender], initsetting[:gender],
initsetting[:shininess], initsetting[:shininess],
initsetting[:super_shininess],
initsetting[:shadowness] initsetting[:shadowness]
] ]
Pokemon::MAX_MOVES.times do |i| Pokemon::MAX_MOVES.times do |i|
@@ -652,6 +653,7 @@ module TrainerPokemonProperty
[_INTL("Form"), LimitProperty2.new(999), _INTL("Form of the Pokémon.")], [_INTL("Form"), LimitProperty2.new(999), _INTL("Form of the Pokémon.")],
[_INTL("Gender"), GenderProperty, _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("Shiny"), BooleanProperty2, _INTL("If set to true, the Pokémon is a different-colored Pokémon.")],
[_INTL("SuperShiny"), BooleanProperty2, _INTL("Whether the Pokémon is super shiny (shiny with a special shininess animation).")],
[_INTL("Shadow"), BooleanProperty2, _INTL("If set to true, the Pokémon is a Shadow Pokémon.")] [_INTL("Shadow"), BooleanProperty2, _INTL("If set to true, the Pokémon is a Shadow Pokémon.")]
] ]
Pokemon::MAX_MOVES.times do |i| Pokemon::MAX_MOVES.times do |i|
@@ -671,21 +673,22 @@ module TrainerPokemonProperty
pbPropertyList(settingname, oldsetting, pkmn_properties, false) pbPropertyList(settingname, oldsetting, pkmn_properties, false)
return nil if !oldsetting[0] # Species is nil return nil if !oldsetting[0] # Species is nil
ret = { ret = {
:species => oldsetting[0], :species => oldsetting[0],
:level => oldsetting[1], :level => oldsetting[1],
:name => oldsetting[2], :name => oldsetting[2],
:form => oldsetting[3], :form => oldsetting[3],
:gender => oldsetting[4], :gender => oldsetting[4],
:shininess => oldsetting[5], :shininess => oldsetting[5],
:shadowness => oldsetting[6], :super_shininess => oldsetting[6],
:ability => oldsetting[7 + Pokemon::MAX_MOVES], :shadowness => oldsetting[7],
:ability_index => oldsetting[8 + Pokemon::MAX_MOVES], :ability => oldsetting[8 + Pokemon::MAX_MOVES],
:item => oldsetting[9 + Pokemon::MAX_MOVES], :ability_index => oldsetting[9 + Pokemon::MAX_MOVES],
:nature => oldsetting[10 + Pokemon::MAX_MOVES], :item => oldsetting[10 + Pokemon::MAX_MOVES],
:iv => oldsetting[11 + Pokemon::MAX_MOVES], :nature => oldsetting[11 + Pokemon::MAX_MOVES],
:ev => oldsetting[12 + Pokemon::MAX_MOVES], :iv => oldsetting[12 + Pokemon::MAX_MOVES],
:happiness => oldsetting[13 + Pokemon::MAX_MOVES], :ev => oldsetting[13 + Pokemon::MAX_MOVES],
:poke_ball => oldsetting[14 + Pokemon::MAX_MOVES], :happiness => oldsetting[14 + Pokemon::MAX_MOVES],
:poke_ball => oldsetting[15 + Pokemon::MAX_MOVES],
} }
moves = [] moves = []
Pokemon::MAX_MOVES.times do |i| Pokemon::MAX_MOVES.times do |i|

View File

@@ -863,19 +863,26 @@ PokemonDebugMenuCommands.register("setshininess", {
"effect" => proc { |pkmn, pkmnid, heldpoke, settingUpBattle, screen| "effect" => proc { |pkmn, pkmnid, heldpoke, settingUpBattle, screen|
cmd = 0 cmd = 0
loop do loop do
msg = [_INTL("Is shiny."), _INTL("Is normal (not shiny).")][pkmn.shiny? ? 0 : 1] msg_idx = pkmn.shiny? ? (pkmn.super_shiny? ? 1 : 0) : 2
msg = [_INTL("Is shiny."), _INTL("Is super shiny."), _INTL("Is normal (not shiny).")][msg_idx]
cmd = screen.pbShowCommands(msg, [ cmd = screen.pbShowCommands(msg, [
_INTL("Make shiny"), _INTL("Make shiny"),
_INTL("Make super shiny"),
_INTL("Make normal"), _INTL("Make normal"),
_INTL("Reset")], cmd) _INTL("Reset")], cmd)
break if cmd < 0 break if cmd < 0
case cmd case cmd
when 0 # Make shiny when 0 # Make shiny
pkmn.shiny = true pkmn.shiny = true
when 1 # Make normal pkmn.super_shiny = false
when 1 # Make super shiny
pkmn.super_shiny = true
when 2 # Make normal
pkmn.shiny = false pkmn.shiny = false
when 2 # Reset pkmn.super_shiny = false
when 3 # Reset
pkmn.shiny = nil pkmn.shiny = nil
pkmn.super_shiny = nil
end end
screen.pbRefreshSingle(pkmnid) screen.pbRefreshSingle(pkmnid)
end end

View File

@@ -593,7 +593,8 @@ module Compiler
f.write(sprintf(" Name = %s\r\n", pkmn[:name])) if pkmn[:name] && !pkmn[:name].empty? f.write(sprintf(" Name = %s\r\n", pkmn[:name])) if pkmn[:name] && !pkmn[:name].empty?
f.write(sprintf(" Form = %d\r\n", pkmn[:form])) if pkmn[:form] && pkmn[:form] > 0 f.write(sprintf(" Form = %d\r\n", pkmn[:form])) if pkmn[:form] && pkmn[:form] > 0
f.write(sprintf(" Gender = %s\r\n", (pkmn[:gender] == 1) ? "female" : "male")) if pkmn[:gender] f.write(sprintf(" Gender = %s\r\n", (pkmn[:gender] == 1) ? "female" : "male")) if pkmn[:gender]
f.write(" Shiny = yes\r\n") if pkmn[:shininess] f.write(" Shiny = yes\r\n") if pkmn[:shininess] && !pkmn[:super_shininess]
f.write(" SuperShiny = yes\r\n") if pkmn[:super_shininess]
f.write(" Shadow = yes\r\n") if pkmn[:shadowness] f.write(" Shadow = yes\r\n") if pkmn[:shadowness]
f.write(sprintf(" Moves = %s\r\n", pkmn[:moves].join(","))) if pkmn[:moves] && pkmn[:moves].length > 0 f.write(sprintf(" Moves = %s\r\n", pkmn[:moves].join(","))) if pkmn[:moves] && pkmn[:moves].length > 0
f.write(sprintf(" Ability = %s\r\n", pkmn[:ability])) if pkmn[:ability] f.write(sprintf(" Ability = %s\r\n", pkmn[:ability])) if pkmn[:ability]