mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
Added class GameStats, added Pokédex records for eggs seen and expanded seen_forms to include shinies
This commit is contained in:
@@ -133,3 +133,11 @@ SaveData.register(:game_version) do
|
||||
load_value { |value| $save_game_version = value }
|
||||
new_game_value { Settings::GAME_VERSION }
|
||||
end
|
||||
|
||||
SaveData.register(:stats) do
|
||||
load_in_bootup
|
||||
ensure_class :GameStats
|
||||
save_value { $stats }
|
||||
load_value { |value| $stats = value }
|
||||
new_game_value { GameStats.new }
|
||||
end
|
||||
|
||||
@@ -225,3 +225,31 @@ SaveData.register_conversion(:v20_refactor_day_care_variables) do
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
SaveData.register_conversion(:v20_add_stats) do
|
||||
essentials_version 20
|
||||
display_title 'Adding stats to save data'
|
||||
to_all do |save_data|
|
||||
unless save_data.has_key?(:stats)
|
||||
save_data[:stats] = GameStats.new
|
||||
save_data[:stats].play_time = save_data[:frame_count].to_f / Graphics.frame_rate
|
||||
save_data[:stats].play_sessions = 1
|
||||
save_data[:stats].time_last_saved = save_data[:stats].play_time
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
SaveData.register_conversion(:v20_adding_pokedex_records) do
|
||||
essentials_version 20
|
||||
display_title 'Adding more Pokédex records'
|
||||
to_value :player do |player|
|
||||
player.pokedex.instance_eval do
|
||||
@seen_eggs = {} if @seen_eggs.nil?
|
||||
@seen_forms.each_value do |sp|
|
||||
next if !sp || sp[0][0].is_a?(Array) # Already converted to include shininess
|
||||
sp[0] = [sp[0], []]
|
||||
sp[1] = [sp[1], []]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -45,6 +45,7 @@ module Game
|
||||
$game_temp.begun_new_game = true
|
||||
$scene = Scene_Map.new
|
||||
SaveData.load_new_game_values
|
||||
$stats.play_sessions += 1
|
||||
$map_factory = PokemonMapFactory.new($data_system.start_map_id)
|
||||
$game_player.moveto($data_system.start_x, $data_system.start_y)
|
||||
$game_player.refresh
|
||||
@@ -60,6 +61,7 @@ module Game
|
||||
def self.load(save_data)
|
||||
validate save_data => Hash
|
||||
SaveData.load_all_values(save_data)
|
||||
$stats.play_sessions += 1
|
||||
self.load_map
|
||||
pbAutoplayOnSave
|
||||
$game_map.update
|
||||
@@ -110,6 +112,7 @@ module Game
|
||||
$PokemonGlobal.safesave = safe
|
||||
$game_system.save_count += 1
|
||||
$game_system.magic_number = $data_system.magic_number
|
||||
$stats.set_time_last_saved
|
||||
begin
|
||||
SaveData.save_to_file(save_file)
|
||||
Graphics.frame_reset
|
||||
|
||||
@@ -378,6 +378,7 @@ class Interpreter
|
||||
# Apply strict version of passable, which treats tiles that are passable
|
||||
# only from certain directions as fully impassible
|
||||
return if !event.can_move_in_direction?($game_player.direction, true)
|
||||
$stats.strength_push_count += 1
|
||||
case $game_player.direction
|
||||
when 2 then event.move_down
|
||||
when 4 then event.move_left
|
||||
|
||||
@@ -112,6 +112,14 @@ class Game_Player < Game_Character
|
||||
if !$game_temp.encounter_triggered
|
||||
@x += x_offset
|
||||
@y += y_offset
|
||||
if $PokemonGlobal&.diving || $PokemonGlobal&.surfing
|
||||
$stats.distance_surfed += 1
|
||||
elsif $PokemonGlobal&.bicycle
|
||||
$stats.distance_cycled += 1
|
||||
else
|
||||
$stats.distance_walked += 1
|
||||
end
|
||||
$stats.distance_slid_on_ice += 1 if $PokemonGlobal.sliding
|
||||
increase_steps
|
||||
end
|
||||
elsif !check_event_trigger_touch(dir)
|
||||
@@ -130,6 +138,39 @@ class Game_Player < Game_Character
|
||||
end
|
||||
end
|
||||
|
||||
def jump(x_plus, y_plus)
|
||||
if x_plus != 0 || y_plus != 0
|
||||
if x_plus.abs > y_plus.abs
|
||||
(x_plus < 0) ? turn_left : turn_right
|
||||
else
|
||||
(y_plus < 0) ? turn_up : turn_down
|
||||
end
|
||||
each_occupied_tile { |i, j| return if !passable?(i + x_plus, j + y_plus, 0) }
|
||||
end
|
||||
@x = @x + x_plus
|
||||
@y = @y + y_plus
|
||||
real_distance = Math::sqrt(x_plus * x_plus + y_plus * y_plus)
|
||||
distance = [1, real_distance].max
|
||||
@jump_peak = distance * Game_Map::TILE_HEIGHT * 3 / 8 # 3/4 of tile for ledge jumping
|
||||
@jump_distance = [x_plus.abs * Game_Map::REAL_RES_X, y_plus.abs * Game_Map::REAL_RES_Y].max
|
||||
@jump_distance_left = 1 # Just needs to be non-zero
|
||||
if real_distance > 0 # Jumping to somewhere else
|
||||
if $PokemonGlobal&.diving || $PokemonGlobal&.surfing
|
||||
$stats.distance_surfed += x_plus.abs + y_pos.abs
|
||||
elsif $PokemonGlobal&.bicycle
|
||||
$stats.distance_cycled += x_plus.abs + y_pos.abs
|
||||
else
|
||||
$stats.distance_walked += x_plus.abs + y_pos.abs
|
||||
end
|
||||
@jump_count = 0
|
||||
else # Jumping on the spot
|
||||
@jump_speed_real = nil # Reset jump speed
|
||||
@jump_count = Game_Map::REAL_RES_X / jump_speed_real # Number of frames to jump one tile
|
||||
end
|
||||
@stop_count = 0
|
||||
triggerLeaveTile
|
||||
end
|
||||
|
||||
def pbTriggeredTrainerEvents(triggers,checkIfRunning=true)
|
||||
result = []
|
||||
# If event is running
|
||||
@@ -551,6 +592,7 @@ end
|
||||
def pbMountBike
|
||||
return if $PokemonGlobal.bicycle
|
||||
$PokemonGlobal.bicycle = true
|
||||
$stats.cycle_count += 1
|
||||
pbUpdateVehicle
|
||||
bike_bgm = GameData::Metadata.get.bicycle_BGM
|
||||
pbCueBGM(bike_bgm, 0.5) if bike_bgm
|
||||
|
||||
196
Data/Scripts/004_Game classes/013_Game_Stats.rb
Normal file
196
Data/Scripts/004_Game classes/013_Game_Stats.rb
Normal file
@@ -0,0 +1,196 @@
|
||||
#===============================================================================
|
||||
# Stored in $stats
|
||||
#===============================================================================
|
||||
class GameStats
|
||||
# Travel
|
||||
attr_accessor :distance_walked, :distance_cycled, :distance_surfed # surfed includes diving
|
||||
attr_accessor :distance_slid_on_ice # Also counted in distance_walked
|
||||
attr_accessor :cycle_count, :surf_count, :dive_count
|
||||
# Field actions
|
||||
attr_accessor :fly_count, :cut_count, :flash_count
|
||||
attr_accessor :rock_smash_count, :rock_smash_battles
|
||||
attr_accessor :headbutt_count, :headbutt_battles
|
||||
attr_accessor :strength_push_count # Number of shoves, not the times Strength was used
|
||||
attr_accessor :waterfall_count, :waterfalls_descended
|
||||
# Items
|
||||
attr_accessor :repel_count
|
||||
attr_accessor :itemfinder_count
|
||||
attr_accessor :fishing_count, :fishing_battles
|
||||
attr_accessor :poke_radar_count, :poke_radar_longest_chain
|
||||
attr_accessor :berry_plants_picked, :max_yield_berry_plants
|
||||
attr_accessor :berries_planted
|
||||
# NPCs
|
||||
attr_accessor :poke_center_count
|
||||
attr_accessor :revived_fossil_count
|
||||
attr_accessor :lottery_prize_count # Times won any prize at all
|
||||
# Pokémon
|
||||
attr_accessor :eggs_hatched
|
||||
attr_accessor :evolution_count # Doesn't count cancelled evolutions
|
||||
attr_accessor :trade_count
|
||||
attr_accessor :moves_taught_by_item, :moves_taught_by_tutor, :moves_taught_by_reminder
|
||||
attr_accessor :day_care_deposits, :day_care_levels_gained
|
||||
attr_accessor :pokerus_infections
|
||||
attr_accessor :shadow_pokemon_purified
|
||||
# Battles
|
||||
attr_accessor :wild_battles_won, :wild_battles_lost # Lost includes fled from
|
||||
attr_accessor :trainer_battles_won, :trainer_battles_lost
|
||||
attr_accessor :total_exp_gained
|
||||
attr_accessor :battle_money_gained, :battle_money_lost
|
||||
attr_accessor :blacked_out_count
|
||||
attr_accessor :mega_evolution_count
|
||||
attr_accessor :failed_poke_ball_count
|
||||
# Currency
|
||||
attr_accessor :money_spent_at_marts
|
||||
attr_accessor :money_earned_at_marts
|
||||
attr_accessor :mart_items_bought, :premier_balls_earned
|
||||
attr_accessor :drinks_bought, :drinks_won # From vending machines
|
||||
attr_accessor :coins_won, :coins_lost # Not bought, not spent
|
||||
attr_accessor :battle_points_won, :battle_points_spent # Currently unused
|
||||
attr_accessor :soot_collected
|
||||
# Special stats
|
||||
attr_accessor :times_to_get_badges # An array of times in seconds
|
||||
attr_accessor :elite_four_attempts
|
||||
attr_accessor :hall_of_fame_entry_count # See also Game Variable 13
|
||||
attr_accessor :time_to_enter_hall_of_fame # In seconds
|
||||
attr_accessor :safari_pokemon_caught, :most_captures_per_safari_game
|
||||
attr_accessor :bug_contest_count, :bug_contest_wins
|
||||
# Play
|
||||
attr_accessor :play_time # In seconds
|
||||
attr_accessor :play_sessions
|
||||
attr_accessor :time_last_saved # In seconds
|
||||
|
||||
def initialize
|
||||
# Travel
|
||||
@distance_walked = 0
|
||||
@distance_cycled = 0
|
||||
@distance_surfed = 0
|
||||
@distance_slid_on_ice = 0
|
||||
@cycle_count = 0
|
||||
@surf_count = 0
|
||||
@dive_count = 0
|
||||
# Field actions
|
||||
@fly_count = 0
|
||||
@cut_count = 0
|
||||
@flash_count = 0
|
||||
@rock_smash_count = 0
|
||||
@rock_smash_battles = 0
|
||||
@headbutt_count = 0
|
||||
@headbutt_battles = 0
|
||||
@strength_push_count = 0
|
||||
@waterfall_count = 0
|
||||
@waterfalls_descended = 0
|
||||
# Items
|
||||
@repel_count = 0
|
||||
@itemfinder_count = 0
|
||||
@fishing_count = 0
|
||||
@fishing_battles = 0
|
||||
@poke_radar_count = 0
|
||||
@poke_radar_longest_chain = 0
|
||||
@berry_plants_picked = 0
|
||||
@max_yield_berry_plants = 0
|
||||
@berries_planted = 0
|
||||
# NPCs
|
||||
@poke_center_count = 0 # Incremented in Poké Center nurse events
|
||||
@revived_fossil_count = 0 # Incremented in fossil reviver events
|
||||
@lottery_prize_count = 0 # Incremented in lottery NPC events
|
||||
# Pokémon
|
||||
@eggs_hatched = 0
|
||||
@evolution_count = 0
|
||||
@trade_count = 0
|
||||
@moves_taught_by_item = 0
|
||||
@moves_taught_by_tutor = 0
|
||||
@moves_taught_by_reminder = 0
|
||||
@day_care_deposits = 0
|
||||
@day_care_levels_gained = 0
|
||||
@pokerus_infections = 0
|
||||
@shadow_pokemon_purified = 0
|
||||
# Battles
|
||||
@wild_battles_won = 0
|
||||
@wild_battles_lost = 0
|
||||
@trainer_battles_won = 0
|
||||
@trainer_battles_lost = 0
|
||||
@total_exp_gained = 0
|
||||
@battle_money_gained = 0
|
||||
@battle_money_lost = 0
|
||||
@blacked_out_count = 0
|
||||
@mega_evolution_count = 0
|
||||
@failed_poke_ball_count = 0
|
||||
# Currency
|
||||
@money_spent_at_marts = 0
|
||||
@money_earned_at_marts = 0
|
||||
@mart_items_bought = 0
|
||||
@premier_balls_earned = 0
|
||||
@drinks_bought = 0 # Incremented in vending machine events
|
||||
@drinks_won = 0 # Incremented in vending machine events
|
||||
@coins_won = 0
|
||||
@coins_lost = 0
|
||||
@battle_points_won = 0
|
||||
@battle_points_spent = 0
|
||||
@soot_collected = 0
|
||||
# Special stats
|
||||
@gym_leader_attempts = [] # Incremented in Gym Leader events
|
||||
@times_to_get_badges = [] # Set with set_time_to_badge(number) in Gym Leader events
|
||||
@elite_four_attempts = 0 # Incremented in door event leading to the first E4 member
|
||||
@hall_of_fame_entry_count = 0 # Incremented in Hall of Fame event
|
||||
@time_to_enter_hall_of_fame = 0 # Set with set_time_to_hall_of_fame in Hall of Fame event
|
||||
@safari_pokemon_caught = 0
|
||||
@most_captures_per_safari_game = 0
|
||||
@bug_contest_count = 0
|
||||
@bug_contest_wins = 0
|
||||
# Play
|
||||
@play_time = 0
|
||||
@play_sessions = 0
|
||||
@time_last_saved = 0
|
||||
end
|
||||
|
||||
def distance_moved
|
||||
return @distance_walked + @distance_cycled + @distance_surfed
|
||||
end
|
||||
|
||||
def caught_pokemon_count
|
||||
return 0 if !$player
|
||||
ret = 0
|
||||
GameData::Species.each_species { |sp| ret += $player.pokedex.caught_count(sp) }
|
||||
return ret
|
||||
end
|
||||
|
||||
def save_count
|
||||
return $game_system&.save_count || 0
|
||||
end
|
||||
|
||||
def set_time_to_badge(number)
|
||||
@times_to_get_badges[number] = @play_time
|
||||
end
|
||||
|
||||
def set_time_to_hall_of_fame
|
||||
@time_to_enter_hall_of_fame = @play_time
|
||||
end
|
||||
|
||||
def play_time_per_session
|
||||
return @play_time / @play_sessions
|
||||
end
|
||||
|
||||
def set_time_last_saved
|
||||
@time_last_saved = @play_time
|
||||
end
|
||||
|
||||
def time_since_last_save
|
||||
return @play_time - @time_last_saved
|
||||
end
|
||||
end
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
module Graphics
|
||||
unless defined?(update_stats_play_time)
|
||||
class << Graphics
|
||||
alias update_stats_play_time update
|
||||
end
|
||||
end
|
||||
|
||||
def self.update
|
||||
update_stats_play_time
|
||||
$stats.play_time += self.delta_s if $stats && $PokemonEncounters
|
||||
end
|
||||
end
|
||||
@@ -652,7 +652,8 @@ class PokeBattle_Battle
|
||||
def pbSetSeen(battler)
|
||||
return if !battler || !@internalBattle
|
||||
if battler.is_a?(PokeBattle_Battler)
|
||||
pbPlayer.pokedex.register(battler.displaySpecies,battler.displayGender,battler.displayForm)
|
||||
pbPlayer.pokedex.register(battler.displaySpecies, battler.displayGender,
|
||||
battler.displayForm, battler.shiny?)
|
||||
else
|
||||
pbPlayer.pokedex.register(battler)
|
||||
end
|
||||
|
||||
@@ -349,6 +349,7 @@ class PokeBattle_Battle
|
||||
pbPlayer.money += tMoney
|
||||
moneyGained = pbPlayer.money-oldMoney
|
||||
if moneyGained>0
|
||||
$stats.battle_money_gained += moneyGained
|
||||
pbDisplayPaused(_INTL("You got ${1} for winning!",moneyGained.to_s_formatted))
|
||||
end
|
||||
end
|
||||
@@ -360,6 +361,7 @@ class PokeBattle_Battle
|
||||
pbPlayer.money += @field.effects[PBEffects::PayDay]
|
||||
moneyGained = pbPlayer.money-oldMoney
|
||||
if moneyGained>0
|
||||
$stats.battle_money_gained += moneyGained
|
||||
pbDisplayPaused(_INTL("You picked up ${1}!",moneyGained.to_s_formatted))
|
||||
end
|
||||
end
|
||||
@@ -377,6 +379,7 @@ class PokeBattle_Battle
|
||||
pbPlayer.money -= tMoney
|
||||
moneyLost = oldMoney-pbPlayer.money
|
||||
if moneyLost>0
|
||||
$stats.battle_money_lost += moneyLost
|
||||
if trainerBattle?
|
||||
pbDisplayPaused(_INTL("You gave ${1} to the winner...",moneyLost.to_s_formatted))
|
||||
else
|
||||
|
||||
@@ -178,6 +178,7 @@ class PokeBattle_Battle
|
||||
pkmn.name,debugInfo))
|
||||
end
|
||||
# Give Exp
|
||||
$stats.total_exp_gained += expGained
|
||||
if pkmn.shadowPokemon?
|
||||
pkmn.exp += expGained
|
||||
return
|
||||
|
||||
@@ -127,6 +127,7 @@ class PokeBattle_Battle
|
||||
battler = @battlers[idxBattler]
|
||||
return if !battler || !battler.pokemon
|
||||
return if !battler.hasMega? || battler.mega?
|
||||
$stats.mega_evolution_count += 1 if battler.pbOwnedByPlayer?
|
||||
trainerName = pbGetOwnerName(idxBattler)
|
||||
old_ability = battler.ability_id
|
||||
# Break Illusion
|
||||
|
||||
@@ -22,6 +22,7 @@ module BallHandlers
|
||||
end
|
||||
|
||||
def self.onFailCatch(ball,battle,battler)
|
||||
$stats.failed_poke_ball_count += 1
|
||||
OnFailCatch.trigger(ball,battle,battler)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -358,7 +358,8 @@ class PokeBattle_SafariZone
|
||||
def pbSetSeen(battler)
|
||||
return if !battler || !@internalBattle
|
||||
if battler.is_a?(PokeBattle_Battler)
|
||||
pbPlayer.pokedex.register(battler.displaySpecies,battler.displayGender,battler.displayForm)
|
||||
pbPlayer.pokedex.register(battler.displaySpecies, battler.displayGender,
|
||||
battler.displayForm, battler.shiny?)
|
||||
else
|
||||
pbPlayer.pokedex.register(battler)
|
||||
end
|
||||
|
||||
@@ -86,6 +86,7 @@ def pbStartOver(gameover=false)
|
||||
pbBugContestStartOver
|
||||
return
|
||||
end
|
||||
$stats.blacked_out_count += 1
|
||||
$player.heal_party
|
||||
if $PokemonGlobal.pokecenterMapId && $PokemonGlobal.pokecenterMapId>=0
|
||||
if gameover
|
||||
|
||||
@@ -135,7 +135,11 @@ Events.onStepTakenFieldMovement += proc { |_sender,e|
|
||||
tile_id = map.data[thistile[1],thistile[2],i]
|
||||
next if tile_id == nil
|
||||
next if GameData::TerrainTag.try_get(map.terrain_tags[tile_id]).id != :SootGrass
|
||||
$player.soot += 1 if event == $game_player && $bag.has?(:SOOTSACK)
|
||||
if event == $game_player && $bag.has?(:SOOTSACK)
|
||||
old_soot = $player.soot
|
||||
$player.soot += 1
|
||||
$stats.soot_collected += $player.soot - old_soot if $player.soot > old_soot
|
||||
end
|
||||
map.erase_tile(thistile[1], thistile[2], i)
|
||||
break
|
||||
end
|
||||
|
||||
@@ -295,6 +295,12 @@ def pbWildBattleCore(*args)
|
||||
# 3 - Player or wild Pokémon ran from battle, or player forfeited the match
|
||||
# 4 - Wild Pokémon was caught
|
||||
# 5 - Draw
|
||||
case outcome
|
||||
when 1, 4 # Won, caught
|
||||
$stats.wild_battles_won += 1
|
||||
when 2, 3, 5 # Lost, fled, draw
|
||||
$stats.wild_battles_lost += 1
|
||||
end
|
||||
pbSet(outcomeVar,decision)
|
||||
return decision
|
||||
end
|
||||
@@ -439,6 +445,12 @@ def pbTrainerBattleCore(*args)
|
||||
pbAfterBattle(decision,canLose)
|
||||
}
|
||||
Input.update
|
||||
case outcome
|
||||
when 1 # Won
|
||||
$stats.trainer_battles_won += 1
|
||||
when 2, 3, 5 # Lost, fled, draw
|
||||
$stats.trainer_battles_lost += 1
|
||||
end
|
||||
# Save the result of the battle in a Game Variable (1 by default)
|
||||
# 0 - Undecided or aborted
|
||||
# 1 - Player won
|
||||
|
||||
@@ -194,6 +194,7 @@ def pbCut
|
||||
end
|
||||
pbMessage(_INTL("This tree looks like it can be cut down!\1"))
|
||||
if pbConfirmMessage(_INTL("Would you like to cut it?"))
|
||||
$stats.cut_count += 1
|
||||
speciesname = (movefinder) ? movefinder.name : $player.name
|
||||
pbMessage(_INTL("{1} used {2}!",speciesname,GameData::Move.get(move).name))
|
||||
pbHiddenMoveAnimation(movefinder)
|
||||
@@ -216,6 +217,7 @@ HiddenMoveHandlers::UseMove.add(:CUT,proc { |move,pokemon|
|
||||
if !pbHiddenMoveAnimation(pokemon)
|
||||
pbMessage(_INTL("{1} used {2}!",pokemon.name,GameData::Move.get(move).name))
|
||||
end
|
||||
$stats.cut_count += 1
|
||||
facingEvent = $game_player.pbFacingEvent
|
||||
if facingEvent
|
||||
pbSmashEvent(facingEvent)
|
||||
@@ -316,6 +318,7 @@ def pbDive
|
||||
$game_temp.player_new_direction = $game_player.direction
|
||||
$PokemonGlobal.surfing = false
|
||||
$PokemonGlobal.diving = true
|
||||
$stats.dive_count += 1
|
||||
pbUpdateVehicle
|
||||
$scene.transfer_player(false)
|
||||
$game_map.autoplay
|
||||
@@ -476,6 +479,7 @@ HiddenMoveHandlers::UseMove.add(:FLASH,proc { |move,pokemon|
|
||||
pbMessage(_INTL("{1} used {2}!",pokemon.name,GameData::Move.get(move).name))
|
||||
end
|
||||
$PokemonGlobal.flashUsed = true
|
||||
$stats.flash_count += 1
|
||||
radiusDiff = 8*20/Graphics.frame_rate
|
||||
while darkness.radius<darkness.radiusMax
|
||||
Graphics.update
|
||||
@@ -518,6 +522,7 @@ def pbFlyToNewLocation(pkmn = nil, move = :FLY)
|
||||
name = pkmn&.name || $player.name
|
||||
pbMessage(_INTL("{1} used {2}!", name, GameData::Move.get(move).name))
|
||||
end
|
||||
$stats.fly_count += 1
|
||||
pbFadeOutIn {
|
||||
pbSEPlay("Fly")
|
||||
$game_temp.player_new_map_id = $game_temp.fly_destination[0]
|
||||
@@ -570,7 +575,9 @@ def pbHeadbuttEffect(event=nil)
|
||||
pbMessage(_INTL("Nope. Nothing..."))
|
||||
else
|
||||
enctype = (chance==1) ? :HeadbuttLow : :HeadbuttHigh
|
||||
if !pbEncounter(enctype)
|
||||
if pbEncounter(enctype)
|
||||
$stats.headbutt_battles += 1
|
||||
else
|
||||
pbMessage(_INTL("Nope. Nothing..."))
|
||||
end
|
||||
end
|
||||
@@ -584,6 +591,7 @@ def pbHeadbutt(event=nil)
|
||||
return false
|
||||
end
|
||||
if pbConfirmMessage(_INTL("A Pokémon could be in this tree. Would you like to use Headbutt?"))
|
||||
$stats.headbutt_count += 1
|
||||
speciesname = (movefinder) ? movefinder.name : $player.name
|
||||
pbMessage(_INTL("{1} used {2}!",speciesname,GameData::Move.get(move).name))
|
||||
pbHiddenMoveAnimation(movefinder)
|
||||
@@ -606,6 +614,7 @@ HiddenMoveHandlers::UseMove.add(:HEADBUTT,proc { |move,pokemon|
|
||||
if !pbHiddenMoveAnimation(pokemon)
|
||||
pbMessage(_INTL("{1} used {2}!",pokemon.name,GameData::Move.get(move).name))
|
||||
end
|
||||
$stats.headbutt_count += 1
|
||||
facingEvent = $game_player.pbFacingEvent
|
||||
pbHeadbuttEffect(facingEvent)
|
||||
})
|
||||
@@ -617,6 +626,7 @@ HiddenMoveHandlers::UseMove.add(:HEADBUTT,proc { |move,pokemon|
|
||||
#===============================================================================
|
||||
def pbRockSmashRandomEncounter
|
||||
if $PokemonEncounters.encounter_triggered?(:RockSmash, false, false)
|
||||
$stats.rock_smash_battles += 1
|
||||
pbEncounter(:RockSmash)
|
||||
end
|
||||
end
|
||||
@@ -629,6 +639,7 @@ def pbRockSmash
|
||||
return false
|
||||
end
|
||||
if pbConfirmMessage(_INTL("This rock appears to be breakable. Would you like to use Rock Smash?"))
|
||||
$stats.rock_smash_count += 1
|
||||
speciesname = (movefinder) ? movefinder.name : $player.name
|
||||
pbMessage(_INTL("{1} used {2}!",speciesname,GameData::Move.get(move).name))
|
||||
pbHiddenMoveAnimation(movefinder)
|
||||
@@ -651,6 +662,7 @@ HiddenMoveHandlers::UseMove.add(:ROCKSMASH,proc { |move,pokemon|
|
||||
if !pbHiddenMoveAnimation(pokemon)
|
||||
pbMessage(_INTL("{1} used {2}!",pokemon.name,GameData::Move.get(move).name))
|
||||
end
|
||||
$stats.rock_smash_count += 1
|
||||
facingEvent = $game_player.pbFacingEvent
|
||||
if facingEvent
|
||||
pbSmashEvent(facingEvent)
|
||||
@@ -740,6 +752,7 @@ def pbStartSurfing
|
||||
pbCancelVehicles
|
||||
$PokemonEncounters.reset_step_count
|
||||
$PokemonGlobal.surfing = true
|
||||
$stats.surf_count += 1
|
||||
pbUpdateVehicle
|
||||
$game_temp.surf_base_coords = $map_factory.getFacingCoords($game_player.x, $game_player.y, $game_player.direction)
|
||||
pbJumpToward
|
||||
@@ -933,6 +946,7 @@ def pbAscendWaterfall
|
||||
return if $game_player.direction != 8 # Can't ascend if not facing up
|
||||
terrain = $game_player.pbFacingTerrainTag
|
||||
return if !terrain.waterfall && !terrain.waterfall_crest
|
||||
$stats.waterfall_count += 1
|
||||
oldthrough = $game_player.through
|
||||
oldmovespeed = $game_player.move_speed
|
||||
$game_player.through = true
|
||||
@@ -950,6 +964,7 @@ def pbDescendWaterfall
|
||||
return if $game_player.direction != 2 # Can't descend if not facing down
|
||||
terrain = $game_player.pbFacingTerrainTag
|
||||
return if !terrain.waterfall && !terrain.waterfall_crest
|
||||
$stats.waterfalls_descended += 1
|
||||
oldthrough = $game_player.through
|
||||
oldmovespeed = $game_player.move_speed
|
||||
$game_player.through = true
|
||||
|
||||
@@ -38,6 +38,7 @@ def pbFishingEnd
|
||||
end
|
||||
|
||||
def pbFishing(hasEncounter,rodType=1)
|
||||
$stats.fishing_count += 1
|
||||
speedup = ($player.first_pokemon && [:STICKYHOLD, :SUCTIONCUPS].include?($player.first_pokemon.ability_id))
|
||||
biteChance = 20+(25*rodType) # 45, 70, 95
|
||||
biteChance *= 1.5 if speedup # 67.5, 100, 100
|
||||
|
||||
@@ -412,6 +412,7 @@ def pbBerryPlant
|
||||
berry = screen.pbChooseItemScreen(Proc.new { |item| GameData::Item.get(item).is_berry? })
|
||||
}
|
||||
if berry
|
||||
$stats.berries_planted += 1
|
||||
berry_plant.plant(berry)
|
||||
$bag.remove(berry)
|
||||
if Settings::NEW_BERRY_PLANTS
|
||||
@@ -441,6 +442,10 @@ def pbPickBerry(berry, qty = 1)
|
||||
pbMessage(_INTL("Too bad...\nThe Bag is full..."))
|
||||
return false
|
||||
end
|
||||
$stats.berry_plants_picked += 1
|
||||
if qty >= GameData::BerryPlant.get(@berry_id).maximum_yield
|
||||
$stats.max_yield_berry_plants += 1
|
||||
end
|
||||
$bag.add(berry, qty)
|
||||
if qty > 1
|
||||
pbMessage(_INTL("You picked the {1} \\c[1]{2}\\c[0].\\wtnp[30]", qty, berry_name))
|
||||
|
||||
@@ -389,6 +389,7 @@ class DayCare
|
||||
end
|
||||
|
||||
def self.deposit(party_index)
|
||||
$stats.day_care_deposits += 1
|
||||
day_care = $PokemonGlobal.day_care
|
||||
pkmn = $player.party[party_index]
|
||||
raise _INTL("No Pokémon at index {1} in party.", party_index) if pkmn.nil?
|
||||
@@ -410,6 +411,7 @@ class DayCare
|
||||
elsif $player.party_full?
|
||||
raise _INTL("No room in party for Pokémon.")
|
||||
end
|
||||
$stats.day_care_levels_gained += slot.level_gain
|
||||
$player.party.push(slot.pokemon)
|
||||
slot.reset
|
||||
day_care.reset_egg_counters
|
||||
|
||||
@@ -99,6 +99,7 @@ def pbRepel(item,steps)
|
||||
pbMessage(_INTL("But a repellent's effect still lingers from earlier."))
|
||||
return false
|
||||
end
|
||||
$stats.repel_count += 1
|
||||
pbUseItemMessage(item)
|
||||
$PokemonGlobal.repel = steps
|
||||
return true
|
||||
@@ -243,6 +244,7 @@ ItemHandlers::UseInField.add(:OLDROD,proc { |item|
|
||||
end
|
||||
encounter = $PokemonEncounters.has_encounter_type?(:OldRod)
|
||||
if pbFishing(encounter,1)
|
||||
$stats.fishing_battles += 1
|
||||
pbEncounter(:OldRod)
|
||||
end
|
||||
next true
|
||||
@@ -256,6 +258,7 @@ ItemHandlers::UseInField.add(:GOODROD,proc { |item|
|
||||
end
|
||||
encounter = $PokemonEncounters.has_encounter_type?(:GoodRod)
|
||||
if pbFishing(encounter,2)
|
||||
$stats.fishing_battles += 1
|
||||
pbEncounter(:GoodRod)
|
||||
end
|
||||
next true
|
||||
@@ -269,12 +272,14 @@ ItemHandlers::UseInField.add(:SUPERROD,proc { |item|
|
||||
end
|
||||
encounter = $PokemonEncounters.has_encounter_type?(:SuperRod)
|
||||
if pbFishing(encounter,3)
|
||||
$stats.fishing_battles += 1
|
||||
pbEncounter(:SuperRod)
|
||||
end
|
||||
next true
|
||||
})
|
||||
|
||||
ItemHandlers::UseInField.add(:ITEMFINDER,proc { |item|
|
||||
$stats.itemfinder_count += 1
|
||||
event = pbClosestHiddenItem
|
||||
if !event
|
||||
pbMessage(_INTL("... \\wt[10]... \\wt[10]... \\wt[10]...\\wt[10]Nope! There's no response."))
|
||||
|
||||
@@ -43,6 +43,7 @@ end
|
||||
|
||||
def pbUsePokeRadar
|
||||
return false if !pbCanUsePokeRadar?
|
||||
$stats.poke_radar_count += 1
|
||||
$game_temp.poke_radar_data = [0, 0, 0, [], false] if !$game_temp.poke_radar_data
|
||||
$game_temp.poke_radar_data[4] = false
|
||||
$PokemonGlobal.pokeradarBattery = 50
|
||||
@@ -80,7 +81,7 @@ def pbPokeRadarHighlightGrass(showmessage=true)
|
||||
# Choose a rarity for the grass (0=normal, 1=rare, 2=shiny)
|
||||
s = (rand(100) < 25) ? 1 : 0
|
||||
if $game_temp.poke_radar_data && $game_temp.poke_radar_data[2] > 0
|
||||
v = [(65536 / Settings::SHINY_POKEMON_CHANCE) - $game_temp.poke_radar_data[2] * 200, 200].max
|
||||
v = [(65536 / Settings::SHINY_POKEMON_CHANCE) - [$game_temp.poke_radar_data[2], 40].min * 200, 200].max
|
||||
v = (65536 / v.to_f).ceil
|
||||
s = 2 if rand(65536) < v
|
||||
end
|
||||
@@ -163,7 +164,7 @@ EncounterModifier.register(proc { |encounter|
|
||||
$game_temp.poke_radar_data[3].each { |g| rarity = g[3] if g[2] == ring }
|
||||
if $game_temp.poke_radar_data[2] > 0 # Chain count, i.e. is chaining
|
||||
if rarity == 2 ||
|
||||
rand(100) < 58 + ring * 10 + ($game_temp.poke_radar_data[2] / 4) + ($game_temp.poke_radar_data[4] ? 10 : 0)
|
||||
rand(100) < 58 + ring * 10 + ([$game_temp.poke_radar_data[2], 40].min / 4) + ($game_temp.poke_radar_data[4] ? 10 : 0)
|
||||
# Continue the chain
|
||||
encounter = [$game_temp.poke_radar_data[0], $game_temp.poke_radar_data[1]]
|
||||
$game_temp.force_single_battle = true
|
||||
@@ -210,7 +211,8 @@ Events.onWildBattleEnd += proc { |_sender,e|
|
||||
if $game_temp.poke_radar_data && (decision==1 || decision==4) # Defeated/caught
|
||||
$game_temp.poke_radar_data[0] = species
|
||||
$game_temp.poke_radar_data[1] = level
|
||||
$game_temp.poke_radar_data[2] = [$game_temp.poke_radar_data[2] + 1, 40].min
|
||||
$game_temp.poke_radar_data[2] += 1
|
||||
$stats.poke_radar_longest_chain = [$game_temp.poke_radar_data[2], $stats.poke_radar_longest_chain].max
|
||||
# Catching makes the next Radar encounter more likely to continue the chain
|
||||
$game_temp.poke_radar_data[4] = (decision == 4)
|
||||
pbPokeRadarHighlightGrass(false)
|
||||
|
||||
@@ -18,6 +18,7 @@ critical hit.
|
||||
#===============================================================================
|
||||
def pbPurify(pkmn, scene)
|
||||
return if !pkmn.shadowPokemon? || pkmn.heart_gauge != 0
|
||||
$stats.shadow_pokemon_purified += 1
|
||||
pkmn.shadow = false
|
||||
pkmn.giveRibbon(:NATIONAL)
|
||||
scene.pbDisplay(_INTL("{1} opened the door to its heart!", pkmn.name))
|
||||
|
||||
@@ -797,6 +797,7 @@ class Pokemon
|
||||
# @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
|
||||
$stats.pokerus_infections += 1
|
||||
strain = rand(1..16) if strain <= 0 || strain >= 16
|
||||
time = 1 + (strain % 4)
|
||||
@pokerus = time
|
||||
|
||||
@@ -22,13 +22,15 @@ class Player < Trainer
|
||||
|
||||
# Clears the Pokédex.
|
||||
def clear
|
||||
@seen = {}
|
||||
@owned = {}
|
||||
@seen_forms = {}
|
||||
@last_seen_forms = {}
|
||||
@owned_shadow = {}
|
||||
@caught_counts = {}
|
||||
@defeated_counts = {}
|
||||
@seen = {}
|
||||
@owned = {}
|
||||
@seen_forms = {} # Gender (0 or 1), shiny (0 or 1), form number
|
||||
@seen_shiny_forms = {}
|
||||
@seen_eggs = {}
|
||||
@last_seen_forms = {}
|
||||
@owned_shadow = {}
|
||||
@caught_counts = {}
|
||||
@defeated_counts = {}
|
||||
self.refresh_accessible_dexes
|
||||
end
|
||||
|
||||
@@ -55,12 +57,33 @@ class Player < Trainer
|
||||
# @param species [Symbol, GameData::Species] species to check
|
||||
# @param gender [Integer] gender to check
|
||||
# @param form [Integer] form to check
|
||||
# @return [Boolean] whether the species of the given gender and form is seen
|
||||
def seen_form?(species, gender, form)
|
||||
# @param shiny [Boolean, nil] shininess to check (checks both if nil)
|
||||
# @return [Boolean] whether the species of the given gender/form/shininess is seen
|
||||
def seen_form?(species, gender, form, shiny = nil)
|
||||
species_id = GameData::Species.try_get(species)&.species
|
||||
return false if species_id.nil?
|
||||
@seen_forms[species_id] ||= [[], []]
|
||||
return @seen_forms[species_id][gender][form] == true
|
||||
@seen_forms[species_id] ||= [[[], []], [[], []]]
|
||||
if shiny.nil?
|
||||
return @seen_forms[species_id][gender][0][form] || @seen_forms[species_id][gender][1][form]
|
||||
end
|
||||
shin = (shiny) ? 1 : 0
|
||||
return @seen_forms[species_id][gender][shin][form] == true
|
||||
end
|
||||
|
||||
# Sets the egg for the given species as seen.
|
||||
# @param species [Symbol, GameData::Species] species to set as seen
|
||||
def set_seen_egg(species)
|
||||
species_id = GameData::Species.try_get(species)&.species
|
||||
return if species_id.nil?
|
||||
@seen_eggs[species_id] = true
|
||||
end
|
||||
|
||||
# @param species [Symbol, GameData::Species] species to check
|
||||
# @return [Boolean] whether the egg for the given species is seen
|
||||
def seen_egg?(species)
|
||||
species_id = GameData::Species.try_get(species)&.species
|
||||
return false if species_id.nil?
|
||||
return @seen_eggs[species_id] == true
|
||||
end
|
||||
|
||||
# Returns the amount of seen Pokémon.
|
||||
@@ -94,10 +117,11 @@ class Player < Trainer
|
||||
species_id = GameData::Species.try_get(species)&.species
|
||||
return 0 if species_id.nil?
|
||||
ret = 0
|
||||
@seen_forms[species_id] ||= [[], []]
|
||||
@seen_forms[species_id] ||= [[[], []], [[], []]]
|
||||
array = @seen_forms[species_id]
|
||||
for i in 0...[array[0].length, array[1].length].max
|
||||
ret += 1 if array[0][i] || array[1][i]
|
||||
ret += 1 if array[0][0][i] || array[0][1][i] || # male or genderless shiny/non-shiny
|
||||
array[1][0][i] || array[1][1][i] # female shiny/non-shiny
|
||||
end
|
||||
return ret
|
||||
end
|
||||
@@ -166,16 +190,20 @@ class Player < Trainer
|
||||
# @param species [Pokemon, Symbol, GameData::Species] Pokemon to register as seen
|
||||
# @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)
|
||||
# @param shiny [Boolean] shininess to register
|
||||
# @param should_refresh_dexes [Boolean] whether to recalculate accessible Dex lists
|
||||
def register(species, gender = 0, form = 0, shiny = false, should_refresh_dexes = true)
|
||||
if species.is_a?(Pokemon)
|
||||
species_data = species.species_data
|
||||
gender = species.gender
|
||||
shiny = species.shiny?
|
||||
else
|
||||
species_data = GameData::Species.get_species_form(species, form)
|
||||
end
|
||||
species = species_data.species
|
||||
gender = 0 if gender >= 2
|
||||
form = species_data.form
|
||||
shin = (shiny) ? 1 : 0
|
||||
if form != species_data.pokedex_form
|
||||
species_data = GameData::Species.get_species_form(species, species_data.pokedex_form)
|
||||
form = species_data.form
|
||||
@@ -183,8 +211,8 @@ class Player < Trainer
|
||||
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
|
||||
@seen_forms[species] ||= [[[], []], [[], []]]
|
||||
@seen_forms[species][gender][shin][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
|
||||
@@ -207,7 +235,7 @@ class Player < Trainer
|
||||
def caught_count(species)
|
||||
species_id = GameData::Species.try_get(species)&.species
|
||||
return 0 if species_id.nil?
|
||||
return @caught_counts[species] || 0
|
||||
return @caught_counts[species_id] || 0
|
||||
end
|
||||
|
||||
# @param species [Symbol, GameData::Species] species to check
|
||||
@@ -216,7 +244,7 @@ class Player < Trainer
|
||||
def defeated_count(species)
|
||||
species_id = GameData::Species.try_get(species)&.species
|
||||
return 0 if species_id.nil?
|
||||
return @defeated_counts[species] || 0
|
||||
return @defeated_counts[species_id] || 0
|
||||
end
|
||||
|
||||
# @param species [Symbol, GameData::Species] species to check
|
||||
@@ -225,23 +253,23 @@ class Player < Trainer
|
||||
def battled_count(species)
|
||||
species_id = GameData::Species.try_get(species)&.species
|
||||
return 0 if species_id.nil?
|
||||
return (@defeated_counts[species] || 0) + (@caught_counts[species] || 0)
|
||||
return (@defeated_counts[species_id] || 0) + (@caught_counts[species_id] || 0)
|
||||
end
|
||||
|
||||
# @param species [Symbol, GameData::Species] species to count as caught
|
||||
def register_caught(species)
|
||||
species_id = GameData::Species.try_get(species)&.species
|
||||
return if species_id.nil?
|
||||
@caught_counts[species] = 0 if @caught_counts[species].nil?
|
||||
@caught_counts[species] += 1
|
||||
@caught_counts[species_id] = 0 if @caught_counts[species_id].nil?
|
||||
@caught_counts[species_id] += 1
|
||||
end
|
||||
|
||||
# @param species [Symbol, GameData::Species] species to count as defeated
|
||||
def register_defeated(species)
|
||||
species_id = GameData::Species.try_get(species)&.species
|
||||
return if species_id.nil?
|
||||
@defeated_counts[species] = 0 if @defeated_counts[species].nil?
|
||||
@defeated_counts[species] += 1
|
||||
@defeated_counts[species_id] = 0 if @defeated_counts[species_id].nil?
|
||||
@defeated_counts[species_id] += 1
|
||||
end
|
||||
|
||||
#===========================================================================
|
||||
|
||||
@@ -189,6 +189,7 @@ def pbHatchAnimation(pokemon)
|
||||
end
|
||||
|
||||
def pbHatch(pokemon)
|
||||
$stats.eggs_hatched += 1
|
||||
speciesname = pokemon.speciesName
|
||||
pokemon.name = nil
|
||||
pokemon.owner = Pokemon::Owner.new_from_trainer($player)
|
||||
@@ -198,6 +199,7 @@ def pbHatch(pokemon)
|
||||
pokemon.hatched_map = $game_map.map_id
|
||||
$player.pokedex.register(pokemon)
|
||||
$player.pokedex.set_owned(pokemon.species)
|
||||
$player.pokedex.set_seen_egg(pokemon.species)
|
||||
pokemon.record_first_moves
|
||||
if !pbHatchAnimation(pokemon)
|
||||
pbMessage(_INTL("Huh?\1"))
|
||||
|
||||
@@ -566,6 +566,7 @@ class PokemonEvolutionScene
|
||||
end
|
||||
|
||||
def pbEvolutionSuccess
|
||||
$stats.evolution_count += 1
|
||||
# Play cry of evolved species
|
||||
frames = GameData::Species.cry_length(@newspecies, @pokemon.form)
|
||||
pbBGMStop
|
||||
|
||||
@@ -198,6 +198,7 @@ end
|
||||
#
|
||||
#===============================================================================
|
||||
def pbStartTrade(pokemonIndex,newpoke,nickname,trainerName,trainerGender=0)
|
||||
$stats.trade_count += 1
|
||||
myPokemon = $player.party[pokemonIndex]
|
||||
opponent = NPCTrainer.new(trainerName,trainerGender)
|
||||
opponent.id = $player.make_foreign_ID
|
||||
|
||||
@@ -39,7 +39,7 @@ class PokemonTrainerCard_Scene
|
||||
overlay.clear
|
||||
baseColor = Color.new(72,72,72)
|
||||
shadowColor = Color.new(160,160,160)
|
||||
totalsec = Graphics.frame_count / Graphics.frame_rate
|
||||
totalsec = $stats.play_time.to_i
|
||||
hour = totalsec / 60 / 60
|
||||
min = totalsec / 60 % 60
|
||||
time = (hour>0) ? _INTL("{1}h {2}m",hour,min) : _INTL("{1}m",min)
|
||||
|
||||
@@ -11,13 +11,13 @@ class PokemonLoadPanel < SpriteWrapper
|
||||
FEMALETEXTCOLOR = Color.new(240,72,88)
|
||||
FEMALETEXTSHADOWCOLOR = Color.new(160,64,64)
|
||||
|
||||
def initialize(index,title,isContinue,trainer,framecount,mapid,viewport=nil)
|
||||
def initialize(index, title, isContinue, trainer, framecount, stats, mapid, viewport = nil)
|
||||
super(viewport)
|
||||
@index = index
|
||||
@title = title
|
||||
@isContinue = isContinue
|
||||
@trainer = trainer
|
||||
@totalsec = (framecount || 0) / Graphics.frame_rate
|
||||
@totalsec = (stats) ? stats.play_time.to_i : ((framecount || 0) / Graphics.frame_rate)
|
||||
@mapid = mapid
|
||||
@selected = (index==0)
|
||||
@bgbitmap = AnimatedBitmap.new("Graphics/Pictures/loadPanels")
|
||||
@@ -98,7 +98,7 @@ end
|
||||
#
|
||||
#===============================================================================
|
||||
class PokemonLoad_Scene
|
||||
def pbStartScene(commands, show_continue, trainer, frame_count, map_id)
|
||||
def pbStartScene(commands, show_continue, trainer, frame_count, stats, map_id)
|
||||
@commands = commands
|
||||
@sprites = {}
|
||||
@viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
|
||||
@@ -106,8 +106,8 @@ class PokemonLoad_Scene
|
||||
addBackgroundOrColoredPlane(@sprites,"background","loadbg",Color.new(248,248,248),@viewport)
|
||||
y = 16*2
|
||||
for i in 0...commands.length
|
||||
@sprites["panel#{i}"] = PokemonLoadPanel.new(i,commands[i],
|
||||
(show_continue) ? (i==0) : false,trainer,frame_count,map_id,@viewport)
|
||||
@sprites["panel#{i}"] = PokemonLoadPanel.new(i, commands[i],
|
||||
(show_continue) ? (i == 0) : false, trainer, frame_count, stats, map_id, @viewport)
|
||||
@sprites["panel#{i}"].x = 24*2
|
||||
@sprites["panel#{i}"].y = y
|
||||
@sprites["panel#{i}"].pbRefresh
|
||||
@@ -297,7 +297,7 @@ class PokemonLoadScreen
|
||||
commands[cmd_quit = commands.length] = _INTL('Quit Game')
|
||||
map_id = show_continue ? @save_data[:map_factory].map.map_id : 0
|
||||
@scene.pbStartScene(commands, show_continue, @save_data[:player],
|
||||
@save_data[:frame_count] || 0, map_id)
|
||||
@save_data[:frame_count] || 0, @save_data[:stats], map_id)
|
||||
@scene.pbSetParty(@save_data[:player]) if show_continue
|
||||
@scene.pbStartScene2
|
||||
loop do
|
||||
|
||||
@@ -28,7 +28,7 @@ class PokemonSave_Scene
|
||||
@viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
|
||||
@viewport.z=99999
|
||||
@sprites={}
|
||||
totalsec = Graphics.frame_count / Graphics.frame_rate
|
||||
totalsec = $stats.play_time.to_i
|
||||
hour = totalsec / 60 / 60
|
||||
min = totalsec / 60 % 60
|
||||
mapname=$game_map.name
|
||||
|
||||
@@ -587,6 +587,8 @@ class PokemonMartScreen
|
||||
end
|
||||
pbDisplayPaused(_INTL("You have no more room in the Bag."))
|
||||
else
|
||||
$stats.money_spent_at_marts += price
|
||||
$stats.mart_items_bought += quantity
|
||||
@adapter.setMoney(@adapter.getMoney-price)
|
||||
@stock.delete_if { |item| GameData::Item.get(item).is_important? && $bag.has?(item) }
|
||||
pbDisplayPaused(_INTL("Here you are! Thank you!")) { pbSEPlay("Mart buy item") }
|
||||
@@ -597,6 +599,7 @@ class PokemonMartScreen
|
||||
break if !@adapter.addItem(:PREMIERBALL)
|
||||
premier_balls_added += 1
|
||||
end
|
||||
$stats.premier_balls_earned += premier_balls_added
|
||||
if premier_balls_added > 1
|
||||
pbDisplayPaused(_INTL("I'll throw in some {1}, too.", GameData::Item.get(:PREMIERBALL).name_plural))
|
||||
elsif premier_balls_added > 0
|
||||
@@ -604,6 +607,7 @@ class PokemonMartScreen
|
||||
end
|
||||
elsif !Settings::MORE_BONUS_PREMIER_BALLS && GameData::Item.get(item) == :POKEBALL
|
||||
if @adapter.addItem(GameData::Item.get(:PREMIERBALL))
|
||||
$stats.premier_balls_earned += 1
|
||||
pbDisplayPaused(_INTL("I'll throw in a Premier Ball, too."))
|
||||
end
|
||||
end
|
||||
@@ -638,7 +642,9 @@ class PokemonMartScreen
|
||||
price/=2
|
||||
price*=qty
|
||||
if pbConfirm(_INTL("I can pay ${1}. Would that be OK?",price.to_s_formatted))
|
||||
old_money = @adapter.getMoney
|
||||
@adapter.setMoney(@adapter.getMoney+price)
|
||||
$stats.money_earned_at_marts += @adapter.getMoney - old_money
|
||||
qty.times do
|
||||
@adapter.removeItem(item)
|
||||
end
|
||||
|
||||
@@ -177,6 +177,7 @@ class MoveRelearnerScreen
|
||||
if move
|
||||
if @scene.pbConfirm(_INTL("Teach {1}?", GameData::Move.get(move).name))
|
||||
if pbLearnMove(pkmn, move)
|
||||
$stats.moves_taught_by_reminder += 1
|
||||
@scene.pbEndScene
|
||||
return true
|
||||
end
|
||||
|
||||
@@ -361,7 +361,13 @@ class SlotMachineScene
|
||||
end
|
||||
frame = (frame+1)%(Graphics.frame_rate*4)
|
||||
end
|
||||
old_coins = $player.coins
|
||||
$player.coins = @sprites["credit"].score
|
||||
if $player.coins > old_coins
|
||||
$stats.coins_won += $player.coins - old_coins
|
||||
elsif $player.coins < old_coins
|
||||
$stats.coins_lost += old_coins - $player.coins
|
||||
end
|
||||
end
|
||||
|
||||
def pbEndScene
|
||||
|
||||
@@ -370,7 +370,9 @@ class VoltorbFlip
|
||||
# Update level text
|
||||
@sprites["level"].bitmap.clear
|
||||
pbDrawShadowText(@sprites["level"].bitmap,8,150,118,28,_INTL("Level {1}",@level.to_s),Color.new(60,60,60),Color.new(150,190,170),1)
|
||||
old_coins = $player.coins
|
||||
$player.coins+=@points
|
||||
$stats.coins_won += $player.coins - old_coins if $player.coins > old_coins
|
||||
@points=0
|
||||
pbUpdateCoins
|
||||
@sprites["curtain"].opacity=0
|
||||
@@ -414,7 +416,9 @@ class VoltorbFlip
|
||||
end
|
||||
elsif pbConfirmMessage(_INTL("If you quit now, you will recieve {1} Coin(s). Will you quit?",@points.to_s_formatted))
|
||||
pbMessage(_INTL("{1} received {2} Coin(s)!",$player.name,@points.to_s_formatted))
|
||||
old_coins = $player.coins
|
||||
$player.coins+=@points
|
||||
$stats.coins_won += $player.coins - old_coins if $player.coins > old_coins
|
||||
@points=0
|
||||
pbUpdateCoins
|
||||
@sprites["curtain"].opacity=0
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
class SafariState
|
||||
attr_accessor :ballcount
|
||||
attr_accessor :captures
|
||||
attr_accessor :decision
|
||||
attr_accessor :steps
|
||||
|
||||
def initialize
|
||||
@start = nil
|
||||
@ballcount = 0
|
||||
@captures = 0
|
||||
@inProgress = false
|
||||
@steps = 0
|
||||
@decision = 0
|
||||
@@ -43,6 +45,7 @@ class SafariState
|
||||
def pbEnd
|
||||
@start = nil
|
||||
@ballcount = 0
|
||||
@captures = 0
|
||||
@inProgress = false
|
||||
@steps = 0
|
||||
@decision = 0
|
||||
@@ -130,6 +133,11 @@ def pbSafariBattle(species,level)
|
||||
# 2 - Player ran out of Safari Balls
|
||||
# 3 - Player or wild Pokémon ran from battle, or player forfeited the match
|
||||
# 4 - Wild Pokémon was caught
|
||||
if decision == 4
|
||||
$stats.safari_pokemon_caught += 1
|
||||
pbSafariState.captures += 1
|
||||
$stats.most_captures_per_safari_game = [$stats.most_captures_per_safari_game, pbSafariState.captures].max
|
||||
end
|
||||
pbSet(1,decision)
|
||||
# Used by the Poké Radar to update/break the chain
|
||||
Events.onWildBattleEnd.trigger(nil,species,level,decision)
|
||||
|
||||
@@ -188,6 +188,7 @@ class BugContestState
|
||||
$player.party=[chosenpkmn]
|
||||
@decision=0
|
||||
@ended=false
|
||||
$stats.bug_contest_count += 1
|
||||
end
|
||||
|
||||
def place
|
||||
@@ -210,6 +211,7 @@ class BugContestState
|
||||
else
|
||||
@ended=false
|
||||
end
|
||||
$stats.bug_contest_wins += 1 if place == 0
|
||||
@lastPokemon=nil
|
||||
@otherparty=[]
|
||||
@reception=[]
|
||||
|
||||
@@ -452,6 +452,8 @@ def pbMoveTutorChoose(move,movelist=nil,bymachine=false,oneusemachine=false)
|
||||
pbMessage(_INTL("{1} can't learn {2}.",pokemon.name,movename)) { screen.pbUpdate }
|
||||
else
|
||||
if pbLearnMove(pokemon,move,false,bymachine) { screen.pbUpdate }
|
||||
$stats.moves_taught_by_item += 1 if bymachine
|
||||
$stats.moves_taught_by_tutor += 1 if !bymachine
|
||||
pokemon.add_first_move(move) if oneusemachine
|
||||
ret = true
|
||||
break
|
||||
|
||||
@@ -632,15 +632,19 @@ DebugMenuCommands.register("fillboxes", {
|
||||
if f == 0
|
||||
if species_data.single_gendered?
|
||||
g = (species_data.gender_ratio == :AlwaysFemale) ? 1 : 0
|
||||
$player.pokedex.register(sp, g, f, false)
|
||||
$player.pokedex.register(sp, g, f, 0, false)
|
||||
$player.pokedex.register(sp, g, f, 1, false)
|
||||
else # Both male and female
|
||||
$player.pokedex.register(sp, 0, f, false)
|
||||
$player.pokedex.register(sp, 1, f, false)
|
||||
$player.pokedex.register(sp, 0, f, 0, false)
|
||||
$player.pokedex.register(sp, 0, f, 1, false)
|
||||
$player.pokedex.register(sp, 1, f, 0, false)
|
||||
$player.pokedex.register(sp, 1, f, 1, false)
|
||||
end
|
||||
$player.pokedex.set_owned(sp, false)
|
||||
elsif species_data.real_form_name && !species_data.real_form_name.empty?
|
||||
g = (species_data.gender_ratio == :AlwaysFemale) ? 1 : 0
|
||||
$player.pokedex.register(sp, g, f, false)
|
||||
$player.pokedex.register(sp, g, f, 0, false)
|
||||
$player.pokedex.register(sp, g, f, 1, false)
|
||||
end
|
||||
# Add Pokémon (if form 0, i.e. one of each species)
|
||||
next if f != 0
|
||||
|
||||
@@ -888,6 +888,7 @@ PokemonDebugMenuCommands.register("setshininess", {
|
||||
pkmn.shiny = nil
|
||||
pkmn.super_shiny = nil
|
||||
end
|
||||
$player.pokedex.register(pkmn) if !settingUpBattle
|
||||
screen.pbRefreshSingle(pkmnid)
|
||||
end
|
||||
next false
|
||||
|
||||
Reference in New Issue
Block a user