tms for fusions

This commit is contained in:
infinitefusion
2021-08-14 10:45:55 -04:00
parent da32acad53
commit 0672b5823e
17 changed files with 236 additions and 212 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -548,6 +548,7 @@ class Game_Character
end
def move_upper_left
@through=true
unless @direction_fix
@direction = (@direction == 6 ? 4 : @direction == 2 ? 8 : @direction)
end
@@ -556,9 +557,11 @@ class Game_Character
@y -= 1
increase_steps
end
@through=false
end
def move_upper_right
@through=true
unless @direction_fix
@direction = (@direction == 4 ? 6 : @direction == 2 ? 8 : @direction)
end
@@ -567,9 +570,11 @@ class Game_Character
@y -= 1
increase_steps
end
@through=false
end
def move_lower_left
@through=true
unless @direction_fix
@direction = (@direction == 6 ? 4 : @direction == 8 ? 2 : @direction)
end
@@ -578,9 +583,11 @@ class Game_Character
@y += 1
increase_steps
end
@through=false
end
def move_lower_right
@through=true
unless @direction_fix
@direction = (@direction == 4 ? 6 : @direction == 8 ? 2 : @direction)
end
@@ -589,6 +596,7 @@ class Game_Character
@y += 1
increase_steps
end
@through=false
end
def moveLeft90 # anticlockwise

View File

@@ -7,6 +7,7 @@ class PokeBattle_Battle
#=============================================================================
# Makes sure all Pokémon exist that need to. Alter the type of battle if
# Makes sure all Pokémon exist that need to. Alter the type of battle if
# necessary. Will never try to create battler positions, only delete them
# (except for wild Pokémon whose number of positions are fixed). Reduces the
# size of each side by 1 and tries again. If the side sizes are uneven, only

View File

@@ -298,7 +298,7 @@ class PokeBattle_Battle
@scene.pbSendOutBattlers(sendOuts,startBattle)
sendOuts.each do |b|
@scene.pbResetMoveIndex(b[0])
pbSetSeen(@battlers[b[0]])
#pbSetSeen(@battlers[b[0]])
@usedInBattle[b[0]&1][b[0]/2] = true
end
end

View File

@@ -4,7 +4,7 @@
#===============================================================================
class Pokemon
# @return [Symbol] this Pokémon's species
attr_reader :species
attr_reader :species
# If defined, this Pokémon's form will be this value even if a MultipleForms
# handler tries to say otherwise.
# @return [Integer, nil] this Pokémon's form
@@ -13,29 +13,29 @@ class Pokemon
# @return [Integer, nil] the time this Pokémon's form was set
attr_accessor :time_form_set
# @return [Integer] the current experience points
attr_reader :exp
attr_reader :exp
attr_accessor :exp_when_fused_head
attr_accessor :exp_when_fused_body
attr_accessor :exp_gained_since_fused
attr_accessor :exp_when_fused_head
attr_accessor :exp_when_fused_body
attr_accessor :exp_gained_since_fused
# @return [Integer] the number of steps until this Pokémon hatches, 0 if this Pokémon is not an egg
attr_accessor :steps_to_hatch
# @return [Integer] the current HP
attr_reader :hp
attr_reader :hp
# @return [Symbol] this Pokémon's current status (see GameData::Status)
attr_reader :status
attr_reader :status
# @return [Integer] sleep count / toxic flag / 0:
# sleep (number of rounds before waking up), toxic (0 = regular poison, 1 = toxic)
attr_accessor :statusCount
# This Pokémon's shininess (true, false, nil). Is recalculated if made nil.
# @param value [Boolean, nil] whether this Pokémon is shiny
attr_writer :shiny
attr_writer :shiny
# The index of this Pokémon's ability (0, 1 are natural abilities, 2+ are
# hidden abilities)as defined for its species/form. An ability may not be
# defined at this index. Is recalculated (as 0 or 1) if made nil.
# @param value [Integer, nil] forced ability index (nil if none is set)
attr_writer :ability_index
attr_writer :ability_index
# @return [Array<Pokemon::Move>] the moves known by this Pokémon
attr_accessor :moves
# @return [Array<Integer>] the IDs of moves known by this Pokémon when it was obtained
@@ -61,9 +61,9 @@ class Pokemon
# @return [Hash<Integer>] this Pokémon's effort values
attr_accessor :ev
# @return [Integer] calculated stats
attr_reader :totalhp, :attack, :defense, :spatk, :spdef, :speed
attr_reader :totalhp, :attack, :defense, :spatk, :spdef, :speed
# @return [Owner] this Pokémon's owner
attr_reader :owner
attr_reader :owner
# @return [Integer] the manner this Pokémon was obtained:
# 0 (met), 1 (as egg), 2 (traded), 4 (fateful encounter)
attr_accessor :obtain_method
@@ -89,13 +89,13 @@ class Pokemon
# Max total IVs
IV_STAT_LIMIT = 31
# Max total EVs
EV_LIMIT = 510
EV_LIMIT = 510
# Max EVs that a single stat can have
EV_STAT_LIMIT = 252
# Maximum length a Pokémon's nickname can be
MAX_NAME_SIZE = 10
# Maximum number of moves a Pokémon can know at once
MAX_MOVES = 4
MAX_MOVES = 4
def self.play_cry(species, form = 0, volume = 90, pitch = 100)
GameData::Species.play_cry_from_species(species, form, volume, pitch)
@@ -124,11 +124,11 @@ class Pokemon
def species=(species_id)
new_species_data = GameData::Species.get(species_id)
return if @species == new_species_data.species
@species = new_species_data.species
@form = new_species_data.form if new_species_data.form != 0
@species = new_species_data.species
@form = new_species_data.form if new_species_data.form != 0
@forced_form = nil
@level = nil # In case growth rate is different for the new species
@ability = nil
@level = nil # In case growth rate is different for the new species
@ability = nil
calc_stats
end
@@ -136,7 +136,7 @@ class Pokemon
# @return [Boolean] whether this Pokémon is of the specified species
def isSpecies?(check_species)
return @species == check_species || (GameData::Species.exists?(check_species) &&
@species == GameData::Species.get(check_species).species)
@species == GameData::Species.get(check_species).species)
end
def isFusion?
@@ -232,7 +232,7 @@ class Pokemon
return 0.0 if lvl >= GameData::GrowthRate.max_level
g_rate = growth_rate
start_exp = g_rate.minimum_exp_for_level(lvl)
end_exp = g_rate.minimum_exp_for_level(lvl + 1)
end_exp = g_rate.minimum_exp_for_level(lvl + 1)
return (@exp - start_exp).to_f / (end_exp - start_exp)
end
@@ -277,7 +277,7 @@ class Pokemon
# Heals the status problem of this Pokémon.
def heal_status
return if egg?
@status = :NONE
@status = :NONE
@statusCount = 0
end
@@ -341,9 +341,12 @@ class Pokemon
if !@gender
gender_ratio = species_data.gender_ratio
case gender_ratio
when :AlwaysMale then @gender = 0
when :AlwaysFemale then @gender = 1
when :Genderless then @gender = 2
when :AlwaysMale then
@gender = 0
when :AlwaysFemale then
@gender = 1
when :Genderless then
@gender = 2
else
female_chance = GameData::GenderRatio.get(gender_ratio).female_chance
@gender = ((@personalID & 0xFF) < female_chance) ? 1 : 0
@@ -360,19 +363,29 @@ class Pokemon
end
# Makes this Pokémon male.
def makeMale; self.gender = 0; end
def makeMale
self.gender = 0;
end
# Makes this Pokémon female.
def makeFemale; self.gender = 1; end
def makeFemale
self.gender = 1;
end
# @return [Boolean] whether this Pokémon is male
def male?; return self.gender == 0; end
def male?
return self.gender == 0;
end
# @return [Boolean] whether this Pokémon is female
def female?; return self.gender == 1; end
def female?
return self.gender == 1;
end
# @return [Boolean] whether this Pokémon is genderless
def genderless?; return self.gender == 2; end
def genderless?
return self.gender == 2;
end
# @return [Boolean] whether this Pokémon species is restricted to only ever being one
# gender (or genderless)
@@ -417,11 +430,11 @@ class Pokemon
if !@ability
sp_data = species_data
abil_index = ability_index
if abil_index >= 2 # Hidden ability
if abil_index >= 2 # Hidden ability
@ability = sp_data.hidden_abilities[abil_index - 2]
abil_index = (@personalID & 1) if !@ability
end
if !@ability # Natural ability or no hidden ability defined
if !@ability # Natural ability or no hidden ability defined
@ability = sp_data.abilities[abil_index] || sp_data.abilities[0]
end
end
@@ -674,7 +687,15 @@ class Pokemon
# @return [Boolean] whether the Pokémon is compatible with the given move
def compatible_with_move?(move_id)
move_data = GameData::Move.try_get(move_id)
return move_data && species_data.tutor_moves.include?(move_data.id)
if isFusion?()
head_species_id = getBasePokemonID(species, false)
body_species_id = getBasePokemonID(species)
head_species = GameData::Species.get(head_species_id)
body_species = GameData::Species.get(body_species_id)
return move_data && (head_species.tutor_moves.include?(move_data.id) || body_species.tutor_moves.include?(move_data.id))
else
return move_data && species_data.tutor_moves.include?(move_data.id)
end
end
def can_relearn_move?
@@ -771,7 +792,7 @@ class Pokemon
# Gives this Pokémon Pokérus (either the specified strain or a random one).
# @param strain [Integer] Pokérus strain to give
def givePokerus(strain = 0)
return if self.pokerusStage == 2 # Can't re-infect a cured Pokémon
return if self.pokerusStage == 2 # Can't re-infect a cured Pokémon
strain = rand(1..16) if strain <= 0 || strain >= 16
time = 1 + (strain % 4)
@pokerus = time
@@ -897,7 +918,7 @@ class Pokemon
gain = [1, 1, 0][happiness_range]
when "faint"
gain = -1
when "faintbad" # Fainted against an opponent that is 30+ levels higher
when "faintbad" # Fainted against an opponent that is 30+ levels higher
gain = [-5, -5, -10][happiness_range]
when "powder"
gain = [-5, -5, -10][happiness_range]
@@ -952,7 +973,8 @@ class Pokemon
# required it to have a held item) or duplicate this Pokémon (Shedinja only).
# @param new_species [Pokemon] the species that this Pokémon evolved into
def action_after_evolution(new_species)
species_data.get_evolutions(true).each do |evo| # [new_species, method, parameter]
species_data.get_evolutions(true).each do |evo|
# [new_species, method, parameter]
break if GameData::Evolution.get(evo[1]).call_after_evolution(self, evo[0], evo[2], new_species)
end
end
@@ -965,9 +987,10 @@ class Pokemon
return nil if egg? || shadowPokemon?
return nil if hasItem?(:EVERSTONE)
return nil if hasAbility?(:BATTLEBOND)
species_data.get_evolutions(true).each do |evo| # [new_species, method, parameter, boolean]
next if evo[3] # Prevolution
ret = yield self, evo[0], evo[1], evo[2] # pkmn, new_species, method, parameter
species_data.get_evolutions(true).each do |evo|
# [new_species, method, parameter, boolean]
next if evo[3] # Prevolution
ret = yield self, evo[0], evo[1], evo[2] # pkmn, new_species, method, parameter
return ret if ret
end
return nil
@@ -999,7 +1022,7 @@ class Pokemon
# @return [Integer] the maximum HP of this Pokémon
def calcHP(base, level, iv, ev)
return 1 if base == 1 # For Shedinja
return 1 if base == 1 # For Shedinja
return ((base * 2 + iv + (ev / 4)) * level / 100).floor + level + 10
end
@@ -1012,7 +1035,7 @@ class Pokemon
def calc_stats
base_stats = self.baseStats
this_level = self.level
this_IV = self.calcIV
this_IV = self.calcIV
# Format stat multipliers due to nature
nature_mod = {}
GameData::Stat.each_main { |s| nature_mod[s.id] = 100 }
@@ -1031,12 +1054,12 @@ class Pokemon
end
hpDiff = @totalhp - @hp
@totalhp = stats[:HP]
@hp = @totalhp - hpDiff
@attack = stats[:ATTACK]
@hp = @totalhp - hpDiff
@attack = stats[:ATTACK]
@defense = stats[:DEFENSE]
@spatk = stats[:SPECIAL_ATTACK]
@spdef = stats[:SPECIAL_DEFENSE]
@speed = stats[:SPEED]
@spatk = stats[:SPECIAL_ATTACK]
@spdef = stats[:SPECIAL_DEFENSE]
@speed = stats[:SPEED]
end
#=============================================================================
@@ -1047,23 +1070,22 @@ class Pokemon
# @return [Pokemon] a copy of this Pokémon
def clone
ret = super
ret.iv = {}
ret.ivMaxed = {}
ret.ev = {}
ret.iv = {}
ret.ivMaxed = {}
ret.ev = {}
GameData::Stat.each_main do |s|
ret.iv[s.id] = @iv[s.id]
ret.iv[s.id] = @iv[s.id]
ret.ivMaxed[s.id] = @ivMaxed[s.id]
ret.ev[s.id] = @ev[s.id]
ret.ev[s.id] = @ev[s.id]
end
ret.moves = []
ret.moves = []
@moves.each_with_index { |m, i| ret.moves[i] = m.clone }
ret.first_moves = @first_moves.clone
ret.owner = @owner.clone
ret.ribbons = @ribbons.clone
ret.owner = @owner.clone
ret.ribbons = @ribbons.clone
return ret
end
# Creates a new Pokémon object.
# @param species [Symbol, String, Integer] Pokémon species
# @param level [Integer] Pokémon level
@@ -1072,42 +1094,42 @@ class Pokemon
# @param rechech_form [TrueClass, FalseClass] whether to auto-check the form
def initialize(species, level, owner = $Trainer, withMoves = true, recheck_form = true)
species_data = GameData::Species.get(species)
@species = species_data.species
@form = species_data.form
@forced_form = nil
@time_form_set = nil
self.level = level
@steps_to_hatch = 0
@species = species_data.species
@form = species_data.form
@forced_form = nil
@time_form_set = nil
self.level = level
@steps_to_hatch = 0
heal_status
@gender = nil
@shiny = nil
@ability_index = nil
@ability = nil
@nature = nil
@gender = nil
@shiny = nil
@ability_index = nil
@ability = nil
@nature = nil
@nature_for_stats = nil
@item = nil
@mail = nil
@moves = []
@item = nil
@mail = nil
@moves = []
reset_moves if withMoves
@first_moves = []
@ribbons = []
@cool = 0
@beauty = 0
@cute = 0
@smart = 0
@tough = 0
@sheen = 0
@pokerus = 0
@name = nil
@happiness = species_data.happiness
@poke_ball = :POKEBALL
@markings = 0
@iv = {}
@ivMaxed = {}
@ev = {}
@first_moves = []
@ribbons = []
@cool = 0
@beauty = 0
@cute = 0
@smart = 0
@tough = 0
@sheen = 0
@pokerus = 0
@name = nil
@happiness = species_data.happiness
@poke_ball = :POKEBALL
@markings = 0
@iv = {}
@ivMaxed = {}
@ev = {}
GameData::Stat.each_main do |s|
@iv[s.id] = rand(IV_STAT_LIMIT + 1)
@ev[s.id] = 0
@iv[s.id] = rand(IV_STAT_LIMIT + 1)
@ev[s.id] = 0
end
if owner.is_a?(Owner)
@owner = owner
@@ -1116,18 +1138,18 @@ class Pokemon
else
@owner = Owner.new(0, '', 2, 2)
end
@obtain_method = 0 # Met
@obtain_method = 4 if $game_switches && $game_switches[Settings::FATEFUL_ENCOUNTER_SWITCH]
@obtain_map = ($game_map) ? $game_map.map_id : 0
@obtain_text = nil
@obtain_level = level
@hatched_map = 0
@timeReceived = pbGetTimeNow.to_i
@timeEggHatched = nil
@fused = nil
@personalID = rand(2 ** 16) | rand(2 ** 16) << 16
@hp = 1
@totalhp = 1
@obtain_method = 0 # Met
@obtain_method = 4 if $game_switches && $game_switches[Settings::FATEFUL_ENCOUNTER_SWITCH]
@obtain_map = ($game_map) ? $game_map.map_id : 0
@obtain_text = nil
@obtain_level = level
@hatched_map = 0
@timeReceived = pbGetTimeNow.to_i
@timeEggHatched = nil
@fused = nil
@personalID = rand(2 ** 16) | rand(2 ** 16) << 16
@hp = 1
@totalhp = 1
calc_stats
if @form == 0 && recheck_form
f = MultipleForms.call("getFormOnCreation", self)

View File

@@ -165,36 +165,26 @@ class Player < Trainer
# @param gender [Integer] gender to register (0=male, 1=female, 2=genderless)
# @param form [Integer] form to register
def register(species, gender = 0, form = 0, should_refresh_dexes = true)
return
if species.is_a?(Pokemon)
species_data = species.species_data
gender = species.gender
#gender = species.gender
else
species_data = GameData::Species.get_species_form(species, form)
species_data = GameData::Species.get(species)
end
species = species_data.species
gender = 0 if gender >= 2
form = species_data.form
if form != species_data.pokedex_form
species_data = GameData::Species.get_species_form(species, species_data.pokedex_form)
form = species_data.form
end
form = 0 if species_data.form_name.nil? || species_data.form_name.empty?
# Register as seen
@seen[species] = true
@seen_forms[species] ||= [[], []]
@seen_forms[species][gender][form] = true
@last_seen_forms[species] ||= []
@last_seen_forms[species] = [gender, form] if @last_seen_forms[species] == []
self.refresh_accessible_dexes if should_refresh_dexes
end
# @param pkmn [Pokemon] Pokemon to register as most recently seen
def register_last_seen(pkmn)
validate pkmn => Pokemon
species_data = pkmn.species_data
form = species_data.pokedex_form
form = 0 if species_data.form_name.nil? || species_data.form_name.empty?
@last_seen_forms[pkmn.species] = [pkmn.gender, form]
return
# validate pkmn => Pokemon
# species_data = pkmn.species_data
# form = species_data.pokedex_form
# form = 0 if species_data.form_name.nil? || species_data.form_name.empty?
# @last_seen_forms[pkmn.species] = [pkmn.gender, form]
end
#===========================================================================

Binary file not shown.

Binary file not shown.

Binary file not shown.