mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-07 21:24:59 +00:00
Fixed regional form-exclusive species producing eggs of the wrong species, fixed eggs not being the appropriate form based on the region they were made in
This commit is contained in:
@@ -244,7 +244,7 @@ module GameData
|
||||
end
|
||||
|
||||
def get_family_evolutions(exclude_invalid = true)
|
||||
evos = self.get_evolutions(exclude_invalid)
|
||||
evos = get_evolutions(exclude_invalid)
|
||||
evos = evos.sort { |a, b| GameData::Species.keys.index(a[0]) <=> GameData::Species.keys.index(b[0]) }
|
||||
ret = []
|
||||
evos.each do |evo|
|
||||
@@ -280,7 +280,7 @@ module GameData
|
||||
|
||||
# Returns an array of all the species in this species' evolution family.
|
||||
def get_family_species
|
||||
sp = self.get_baby_species
|
||||
sp = get_baby_species
|
||||
evos = GameData::Species.get(sp).get_family_evolutions(false)
|
||||
return [sp] if evos.length == 0
|
||||
return [sp].concat(evos.map { |e| e[1] }).uniq
|
||||
@@ -292,7 +292,7 @@ module GameData
|
||||
if @offspring.length > 0
|
||||
return (other_family & @offspring).length > 0
|
||||
end
|
||||
return other_family.include?(@id)
|
||||
return other_family.include?(@species)
|
||||
end
|
||||
|
||||
# If this species doesn't have egg moves, looks at prevolutions one at a
|
||||
@@ -305,7 +305,7 @@ module GameData
|
||||
end
|
||||
|
||||
def family_evolutions_have_method?(check_method, check_param = nil)
|
||||
sp = self.get_baby_species
|
||||
sp = get_baby_species
|
||||
evos = GameData::Species.get(sp).get_family_evolutions
|
||||
return false if evos.length == 0
|
||||
evos.each do |evo|
|
||||
@@ -322,7 +322,7 @@ module GameData
|
||||
# Used by the Moon Ball when checking if a Pokémon's evolution family
|
||||
# includes an evolution that uses the Moon Stone.
|
||||
def family_item_evolutions_use_item?(check_item = nil)
|
||||
sp = self.get_baby_species
|
||||
sp = get_baby_species
|
||||
evos = GameData::Species.get(sp).get_family_evolutions
|
||||
return false if !evos || evos.length == 0
|
||||
evos.each do |evo|
|
||||
|
||||
@@ -66,6 +66,9 @@ class DayCare
|
||||
egg.obtain_text = _INTL("Day-Care Couple")
|
||||
egg.happiness = 120
|
||||
egg.form = 0 if species == :SINISTEA
|
||||
# Set regional form
|
||||
new_form = MultipleForms.call("getFormOnEggCreation", egg)
|
||||
egg.form = new_form if new_form
|
||||
return egg
|
||||
end
|
||||
|
||||
|
||||
@@ -707,10 +707,39 @@ MultipleForms.register(:CALYREX, {
|
||||
})
|
||||
|
||||
|
||||
#===============================================================================
|
||||
# Regional forms
|
||||
# This code is for determining the form of a Pokémon in an egg created at the
|
||||
# Day Care, where that Pokémon's species has regional forms. The regional form
|
||||
# chosen depends on the region in which the egg was produced (not where it
|
||||
# hatches).
|
||||
#===============================================================================
|
||||
|
||||
# The code in this proc assumes that the appropriate regional form for a Pokémon
|
||||
# is equal to the region's number. This may not be true in your game.
|
||||
# Note that this proc only produces a non-zero form number if the species has a
|
||||
# defined form with that number, which means it can be used for both Alolan and
|
||||
# Galarian forms separately (and for Meowth which has both).
|
||||
MultipleForms.register(:RATTATA, {
|
||||
"getFormOnEggCreation" => proc { |pkmn|
|
||||
if $game_map
|
||||
map_pos = $game_map.metadata&.town_map_position
|
||||
next map_pos[0] if map_pos &&
|
||||
GameData::Species.get_species_form(pkmn.species, map_pos[0]).form == map_pos[0]
|
||||
end
|
||||
next 0
|
||||
}
|
||||
})
|
||||
|
||||
MultipleForms.copy(:RATTATA, :SANDSHREW, :VULPIX, :DIGLETT, :MEOWTH, :GEODUDE,
|
||||
:GRIMER, :PONYTA, :FARFETCHD, :CORSOLA, :ZIGZAGOON,
|
||||
:DARUMAKA, :YAMASK, :STUNFISK, :SLOWPOKE, :ARTICUNO, :ZAPDOS,
|
||||
:MOLTRES)
|
||||
|
||||
#===============================================================================
|
||||
# Regional forms
|
||||
# These species don't have visually different regional forms, but they need to
|
||||
# evolve into different forms depending on the location where they evolved.
|
||||
# evolve into different forms depending on the location where they evolve.
|
||||
#===============================================================================
|
||||
|
||||
# Alolan forms
|
||||
|
||||
@@ -941,9 +941,15 @@ module Compiler
|
||||
end
|
||||
end
|
||||
GameData::Species.each do |species| # Distribute prevolutions
|
||||
next if species.form == 0 # Looking at alternate forms only
|
||||
next if species.evolutions.any? { |evo| evo[3] } # Already has prevo listed
|
||||
species.evolutions.push(all_evos[species.species].clone) if all_evos[species.species]
|
||||
next if !all_evos[species.species]
|
||||
# Record what species evolves from
|
||||
species.evolutions.push(all_evos[species.species].clone)
|
||||
# Record that the prevolution can evolve into species
|
||||
prevo = GameData::Species.get(all_evos[species.species][0])
|
||||
if prevo.evolutions.none? { |evo| !evo[3] && evo[0] == species.species }
|
||||
prevo.evolutions.push([species.species, :None, nil])
|
||||
end
|
||||
end
|
||||
# Save all data
|
||||
GameData::Species.save
|
||||
|
||||
Reference in New Issue
Block a user