Added "beneath map" height for overworld animations, fixed new games inheriting Jukebox BGM from save file, added PokeBall property for trainer types, fixed Cramorant form changing effects

This commit is contained in:
Maruno17
2024-03-11 23:31:48 +00:00
parent 47be44a54c
commit 1ff5b12acd
10 changed files with 46 additions and 7 deletions

View File

@@ -134,7 +134,7 @@ module Settings
# The odds of a newly generated Pokémon being shiny (out of 65536). # The odds of a newly generated Pokémon being shiny (out of 65536).
SHINY_POKEMON_CHANCE = (MECHANICS_GENERATION >= 6) ? 16 : 8 SHINY_POKEMON_CHANCE = (MECHANICS_GENERATION >= 6) ? 16 : 8
# Whether super shininess is enabled (uses a different shiny animation). # Whether super shininess is enabled (uses a different shiny animation).
SUPER_SHINY = (MECHANICS_GENERATION >= 8) SUPER_SHINY = (MECHANICS_GENERATION == 8)
# Whether Pokémon with the "Legendary", "Mythical" or "Ultra Beast" flags will # Whether Pokémon with the "Legendary", "Mythical" or "Ultra Beast" flags will
# have at least 3 perfect IVs. # have at least 3 perfect IVs.
LEGENDARIES_HAVE_SOME_PERFECT_IVS = (MECHANICS_GENERATION >= 6) LEGENDARIES_HAVE_SOME_PERFECT_IVS = (MECHANICS_GENERATION >= 6)

View File

@@ -22,6 +22,7 @@ SaveData.register(:game_system) do
save_value { $game_system } save_value { $game_system }
load_value { |value| $game_system = value } load_value { |value| $game_system = value }
new_game_value { Game_System.new } new_game_value { Game_System.new }
reset_on_new_game
end end
SaveData.register(:pokemon_system) do SaveData.register(:pokemon_system) do

View File

@@ -197,10 +197,11 @@ class SpriteAnimation
sprite.visible = true sprite.visible = true
sprite.src_rect.set((pattern % 5) * 192, (pattern / 5) * 192, 192, 192) sprite.src_rect.set((pattern % 5) * 192, (pattern / 5) * 192, 192, 192)
case @_animation_height case @_animation_height
when 0 then sprite.z = 1 when -1 then sprite.z = -25
when 1 then sprite.z = sprite.y + (Game_Map::TILE_HEIGHT * 3 / 2) + 1 when 0 then sprite.z = 1
when 2 then sprite.z = sprite.y + (Game_Map::TILE_HEIGHT * 3) + 1 when 1 then sprite.z = sprite.y + (Game_Map::TILE_HEIGHT * 3 / 2) + 1
else sprite.z = 2000 when 2 then sprite.z = sprite.y + (Game_Map::TILE_HEIGHT * 3) + 1
else sprite.z = 2000
end end
sprite.ox = 96 sprite.ox = 96
sprite.oy = 96 sprite.oy = 96

View File

@@ -5,6 +5,7 @@ module GameData
attr_reader :gender attr_reader :gender
attr_reader :base_money attr_reader :base_money
attr_reader :skill_level attr_reader :skill_level
attr_reader :poke_ball
attr_reader :flags attr_reader :flags
attr_reader :intro_BGM attr_reader :intro_BGM
attr_reader :battle_BGM attr_reader :battle_BGM
@@ -24,6 +25,7 @@ module GameData
"Mixed" => 2, "mixed" => 2, "X" => 2, "x" => 2, "2" => 2}], "Mixed" => 2, "mixed" => 2, "X" => 2, "x" => 2, "2" => 2}],
"BaseMoney" => [:base_money, "u"], "BaseMoney" => [:base_money, "u"],
"SkillLevel" => [:skill_level, "u"], "SkillLevel" => [:skill_level, "u"],
"PokeBall" => [:poke_ball, "e", :Item],
"Flags" => [:flags, "*s"], "Flags" => [:flags, "*s"],
"IntroBGM" => [:intro_BGM, "s"], "IntroBGM" => [:intro_BGM, "s"],
"BattleBGM" => [:battle_BGM, "s"], "BattleBGM" => [:battle_BGM, "s"],
@@ -42,6 +44,7 @@ module GameData
["Gender", EnumProperty.new(gender_array), _INTL("Gender of this Trainer Type.")], ["Gender", EnumProperty.new(gender_array), _INTL("Gender of this Trainer Type.")],
["BaseMoney", LimitProperty.new(9999), _INTL("Player earns this much money times the highest level among the trainer's Pokémon.")], ["BaseMoney", LimitProperty.new(9999), _INTL("Player earns this much money times the highest level among the trainer's Pokémon.")],
["SkillLevel", LimitProperty2.new(9999), _INTL("Skill level of this Trainer Type.")], ["SkillLevel", LimitProperty2.new(9999), _INTL("Skill level of this Trainer Type.")],
["PokeBall", ItemProperty, _INTL("Default Poké Ball that all Pokémon of trainers of this Trainer Type are in.")],
["Flags", StringListProperty, _INTL("Words/phrases that can be used to make trainers of this type behave differently to others.")], ["Flags", StringListProperty, _INTL("Words/phrases that can be used to make trainers of this type behave differently to others.")],
["IntroBGM", BGMProperty, _INTL("BGM played before battles against trainers of this type.")], ["IntroBGM", BGMProperty, _INTL("BGM played before battles against trainers of this type.")],
["BattleBGM", BGMProperty, _INTL("BGM played in battles against trainers of this type.")], ["BattleBGM", BGMProperty, _INTL("BGM played in battles against trainers of this type.")],
@@ -104,6 +107,7 @@ module GameData
@gender = hash[:gender] || 2 @gender = hash[:gender] || 2
@base_money = hash[:base_money] || 30 @base_money = hash[:base_money] || 30
@skill_level = hash[:skill_level] || @base_money @skill_level = hash[:skill_level] || @base_money
@poke_ball = hash[:poke_ball]
@flags = hash[:flags] || [] @flags = hash[:flags] || []
@intro_BGM = hash[:intro_BGM] @intro_BGM = hash[:intro_BGM]
@battle_BGM = hash[:battle_BGM] @battle_BGM = hash[:battle_BGM]

View File

@@ -171,7 +171,11 @@ module GameData
pkmn.makeShadow pkmn.makeShadow
pkmn.shiny = false pkmn.shiny = false
end end
pkmn.poke_ball = pkmn_data[:poke_ball] if pkmn_data[:poke_ball] if pkmn_data[:poke_ball]
pkmn.poke_ball = pkmn_data[:poke_ball]
elsif trainer.default_poke_ball
pkmn.poke_ball = trainer.default_poke_ball
end
pkmn.calc_stats pkmn.calc_stats
end end
return trainer return trainer

View File

@@ -18,12 +18,13 @@ class Battle::Battler
# target Cramorant attacking the user) and the ability splash # target Cramorant attacking the user) and the ability splash
# shouldn't be shown. # shouldn't be shown.
@battle.pbShowAbilitySplash(target) @battle.pbShowAbilitySplash(target)
target_form = target.form
target.pbChangeForm(0, nil) target.pbChangeForm(0, nil)
if user.takesIndirectDamage?(Battle::Scene::USE_ABILITY_SPLASH) if user.takesIndirectDamage?(Battle::Scene::USE_ABILITY_SPLASH)
@battle.scene.pbDamageAnimation(user) @battle.scene.pbDamageAnimation(user)
user.pbReduceHP(user.totalhp / 4, false) user.pbReduceHP(user.totalhp / 4, false)
end end
case target.form case target_form
when 1 # Gulping Form when 1 # Gulping Form
user.pbLowerStatStageByAbility(:DEFENSE, 1, target, false) user.pbLowerStatStageByAbility(:DEFENSE, 1, target, false)
when 2 # Gorging Form when 2 # Gorging Form

View File

@@ -49,6 +49,7 @@ class Trainer
def male?; return GameData::TrainerType.get(self.trainer_type).male?; end def male?; return GameData::TrainerType.get(self.trainer_type).male?; end
def female?; return GameData::TrainerType.get(self.trainer_type).female?; end def female?; return GameData::TrainerType.get(self.trainer_type).female?; end
def skill_level; return GameData::TrainerType.get(self.trainer_type).skill_level; end def skill_level; return GameData::TrainerType.get(self.trainer_type).skill_level; end
def default_poke_ball; return GameData::TrainerType.get(self.trainer_type).poke_ball; end
def flags; return GameData::TrainerType.get(self.trainer_type).flags; end def flags; return GameData::TrainerType.get(self.trainer_type).flags; end
def has_flag?(flag); return GameData::TrainerType.get(self.trainer_type).has_flag?(flag); end def has_flag?(flag); return GameData::TrainerType.get(self.trainer_type).has_flag?(flag); end

View File

@@ -495,6 +495,7 @@ MenuHandlers.add(:options_menu, :speech_frame, {
"type" => NumberOption, "type" => NumberOption,
"parameters" => 1..Settings::SPEECH_WINDOWSKINS.length, "parameters" => 1..Settings::SPEECH_WINDOWSKINS.length,
"description" => _INTL("Choose the appearance of dialogue boxes."), "description" => _INTL("Choose the appearance of dialogue boxes."),
"condition" => proc { next Settings::SPEECH_WINDOWSKINS.length > 1 },
"get_proc" => proc { next $PokemonSystem.textskin }, "get_proc" => proc { next $PokemonSystem.textskin },
"set_proc" => proc { |value, scene| "set_proc" => proc { |value, scene|
$PokemonSystem.textskin = value $PokemonSystem.textskin = value
@@ -510,6 +511,7 @@ MenuHandlers.add(:options_menu, :menu_frame, {
"type" => NumberOption, "type" => NumberOption,
"parameters" => 1..Settings::MENU_WINDOWSKINS.length, "parameters" => 1..Settings::MENU_WINDOWSKINS.length,
"description" => _INTL("Choose the appearance of menu boxes."), "description" => _INTL("Choose the appearance of menu boxes."),
"condition" => proc { next Settings::MENU_WINDOWSKINS.length > 1 },
"get_proc" => proc { next $PokemonSystem.frame }, "get_proc" => proc { next $PokemonSystem.frame },
"set_proc" => proc { |value, scene| "set_proc" => proc { |value, scene|
$PokemonSystem.frame = value $PokemonSystem.frame = value

View File

@@ -774,6 +774,12 @@ module Compiler
end end
def validate_compiled_trainer_type(hash) def validate_compiled_trainer_type(hash)
# Ensure valid Poké Ball
if hash[:poke_ball]
if !GameData::Item.get(hash[:poke_ball]).is_poke_ball?
raise _INTL("Value '{1}' isn't a defined Poké Ball.", hash[:poke_ball]) + "\n" + FileLineData.linereport
end
end
end end
def validate_all_compiled_trainer_types def validate_all_compiled_trainer_types

View File

@@ -80,6 +80,7 @@ BaseMoney = 48
Name = Fisherman Name = Fisherman
Gender = Male Gender = Male
BaseMoney = 32 BaseMoney = 32
PokeBall = LUREBALL
#------------------------------- #-------------------------------
[GAMBLER] [GAMBLER]
Name = Gambler Name = Gambler
@@ -91,6 +92,7 @@ SkillLevel = 32
Name = Gentleman Name = Gentleman
Gender = Male Gender = Male
BaseMoney = 72 BaseMoney = 72
PokeBall = LUXURYBALL
#------------------------------- #-------------------------------
[HIKER] [HIKER]
Name = Hiker Name = Hiker
@@ -107,6 +109,7 @@ Name = Lady
Gender = Female Gender = Female
BaseMoney = 160 BaseMoney = 160
SkillLevel = 72 SkillLevel = 72
PokeBall = LUXURYBALL
#------------------------------- #-------------------------------
[PAINTER] [PAINTER]
Name = Painter Name = Painter
@@ -122,6 +125,7 @@ BaseMoney = 64
Name = Pokémon Breeder Name = Pokémon Breeder
Gender = Female Gender = Female
BaseMoney = 48 BaseMoney = 48
PokeBall = FRIENDBALL
#------------------------------- #-------------------------------
[PROFESSOR] [PROFESSOR]
Name = Professor Name = Professor
@@ -147,6 +151,7 @@ BaseMoney = 32
Name = Scientist Name = Scientist
Gender = Male Gender = Male
BaseMoney = 48 BaseMoney = 48
PokeBall = REPEATBALL
#------------------------------- #-------------------------------
[SUPERNERD] [SUPERNERD]
Name = Super Nerd Name = Super Nerd
@@ -162,6 +167,7 @@ BaseMoney = 40
Name = Black Belt Name = Black Belt
Gender = Male Gender = Male
BaseMoney = 32 BaseMoney = 32
PokeBall = ULTRABALL
#------------------------------- #-------------------------------
[CRUSHGIRL] [CRUSHGIRL]
Name = Crush Girl Name = Crush Girl
@@ -182,11 +188,13 @@ BaseMoney = 16
Name = Cool Trainer Name = Cool Trainer
Gender = Male Gender = Male
BaseMoney = 60 BaseMoney = 60
PokeBall = ULTRABALL
#------------------------------- #-------------------------------
[COOLTRAINER_F] [COOLTRAINER_F]
Name = Cool Trainer Name = Cool Trainer
Gender = Female Gender = Female
BaseMoney = 60 BaseMoney = 60
PokeBall = ULTRABALL
#------------------------------- #-------------------------------
[YOUNGSTER] [YOUNGSTER]
Name = Youngster Name = Youngster
@@ -223,24 +231,28 @@ Name = Swimmer
Gender = Male Gender = Male
BaseMoney = 16 BaseMoney = 16
SkillLevel = 32 SkillLevel = 32
PokeBall = DIVEBALL
#------------------------------- #-------------------------------
[SWIMMER_F] [SWIMMER_F]
Name = Swimmer Name = Swimmer
Gender = Female Gender = Female
BaseMoney = 16 BaseMoney = 16
SkillLevel = 32 SkillLevel = 32
PokeBall = DIVEBALL
#------------------------------- #-------------------------------
[SWIMMER2_M] [SWIMMER2_M]
Name = Swimmer Name = Swimmer
Gender = Male Gender = Male
BaseMoney = 16 BaseMoney = 16
SkillLevel = 32 SkillLevel = 32
PokeBall = DIVEBALL
#------------------------------- #-------------------------------
[SWIMMER2_F] [SWIMMER2_F]
Name = Swimmer Name = Swimmer
Gender = Female Gender = Female
BaseMoney = 16 BaseMoney = 16
SkillLevel = 32 SkillLevel = 32
PokeBall = DIVEBALL
#------------------------------- #-------------------------------
[TUBER_M] [TUBER_M]
Name = Tuber Name = Tuber
@@ -271,6 +283,7 @@ Name = Cool Couple
Gender = Unknown Gender = Unknown
BaseMoney = 72 BaseMoney = 72
SkillLevel = 48 SkillLevel = 48
PokeBall = ULTRABALL
#------------------------------- #-------------------------------
[CRUSHKIN] [CRUSHKIN]
Name = Crush Kin Name = Crush Kin
@@ -282,6 +295,7 @@ Name = Sis and Bro
Gender = Unknown Gender = Unknown
BaseMoney = 16 BaseMoney = 16
SkillLevel = 48 SkillLevel = 48
PokeBall = DIVEBALL
#------------------------------- #-------------------------------
[TWINS] [TWINS]
Name = Twins Name = Twins
@@ -371,6 +385,7 @@ Gender = Female
BaseMoney = 100 BaseMoney = 100
BattleBGM = Battle Elite BattleBGM = Battle Elite
VictoryBGM = Battle victory leader VictoryBGM = Battle victory leader
PokeBall = ULTRABALL
#------------------------------- #-------------------------------
[ELITEFOUR_Bruno] [ELITEFOUR_Bruno]
Name = Elite Four Name = Elite Four
@@ -378,6 +393,7 @@ Gender = Male
BaseMoney = 100 BaseMoney = 100
BattleBGM = Battle Elite BattleBGM = Battle Elite
VictoryBGM = Battle victory leader VictoryBGM = Battle victory leader
PokeBall = ULTRABALL
#------------------------------- #-------------------------------
[ELITEFOUR_Agatha] [ELITEFOUR_Agatha]
Name = Elite Four Name = Elite Four
@@ -385,6 +401,7 @@ Gender = Female
BaseMoney = 100 BaseMoney = 100
BattleBGM = Battle Elite BattleBGM = Battle Elite
VictoryBGM = Battle victory leader VictoryBGM = Battle victory leader
PokeBall = ULTRABALL
#------------------------------- #-------------------------------
[ELITEFOUR_Lance] [ELITEFOUR_Lance]
Name = Elite Four Name = Elite Four
@@ -392,6 +409,7 @@ Gender = Male
BaseMoney = 100 BaseMoney = 100
BattleBGM = Battle Elite BattleBGM = Battle Elite
VictoryBGM = Battle victory leader VictoryBGM = Battle victory leader
PokeBall = ULTRABALL
#------------------------------- #-------------------------------
[CHAMPION] [CHAMPION]
Name = Champion Name = Champion
@@ -399,3 +417,4 @@ Gender = Male
BaseMoney = 100 BaseMoney = 100
BattleBGM = Battle Champion BattleBGM = Battle Champion
VictoryBGM = Battle victory leader VictoryBGM = Battle victory leader
PokeBall = ULTRABALL