3 Commits

Author SHA1 Message Date
chardub
5b85e72cb2 6.7.2 patch 2025-10-02 10:35:46 -04:00
chardub
e5406179bf 6.7.1 patch fixes 2025-10-01 11:28:13 -04:00
chardub
1271d7e8f0 fixes naked sprite when fishing 2025-09-28 18:22:11 -04:00
70 changed files with 3168 additions and 229 deletions

5
.gitignore vendored
View File

@@ -3,13 +3,8 @@ Graphics/Battlers/Shiny/*
Graphics/CustomBattlers/spritesheets/* Graphics/CustomBattlers/spritesheets/*
Graphics/CustomBattlers/* Graphics/CustomBattlers/*
Data/sprites/*
Data/VERSION Data/VERSION
infinitefusion.sh infinitefusion.sh
Data/sprites/CUSTOM_SPRITES
Data/sprites
Data/sprites/updated_spritesheets_cache
Data/sprites/sprites_rate_limit.log
.gitignore .gitignore
Game.rxproj Game.rxproj
.DS_Store .DS_Store

BIN
Data/.DS_Store vendored

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

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

@@ -5,8 +5,7 @@
#==============================================================================# #==============================================================================#
module Settings module Settings
# The version of your game. It has to adhere to the MAJOR.MINOR.PATCH format. # The version of your game. It has to adhere to the MAJOR.MINOR.PATCH format.
GAME_VERSION = '6.7.0' GAME_VERSION_NUMBER = "6.7.2"
GAME_VERSION_NUMBER = "6.7.0"
LATEST_GAME_RELEASE = "6.6" LATEST_GAME_RELEASE = "6.6"
KANTO = GAME_ID == :IF_KANTO KANTO = GAME_ID == :IF_KANTO

View File

@@ -203,7 +203,7 @@ module SaveData
end end
echoln '' if conversions_to_run.length > 0 echoln '' if conversions_to_run.length > 0
save_data[:essentials_version] = Essentials::VERSION save_data[:essentials_version] = Essentials::VERSION
save_data[:game_version] = Settings::GAME_VERSION save_data[:game_version] = Settings::GAME_VERSION_NUMBER
return true return true
end end

View File

@@ -129,7 +129,7 @@ end
SaveData.register(:game_version) do SaveData.register(:game_version) do
load_in_bootup load_in_bootup
ensure_class :String ensure_class :String
save_value { Settings::GAME_VERSION } save_value { Settings::GAME_VERSION_NUMBER }
load_value { |value| $game_version = value } load_value { |value| $game_version = value }
new_game_value { Settings::GAME_VERSION } new_game_value { Settings::GAME_VERSION_NUMBER }
end end

View File

@@ -8,7 +8,7 @@ SaveData.register_conversion(:v19_define_versions) do
save_data[:essentials_version] = Essentials::VERSION save_data[:essentials_version] = Essentials::VERSION
end end
unless save_data.has_key?(:game_version) unless save_data.has_key?(:game_version)
save_data[:game_version] = Settings::GAME_VERSION save_data[:game_version] = Settings::GAME_VERSION_NUMBER
end end
end end
end end

View File

@@ -60,7 +60,7 @@ class Sprite_Player < Sprite_Character
@charbitmap.bitmap.clone #nekkid sprite @charbitmap.bitmap.clone #nekkid sprite
baseBitmap = @charbitmap.bitmap.clone #nekkid sprite baseBitmap = @charbitmap.bitmap.clone #nekkid sprite
if $game_player.hasGraphicsOverride? if $game_player.hasGraphicsOverride? && @character_name != "fish"
@hair.update(@character_name, "", 0) if @hair @hair.update(@character_name, "", 0) if @hair
@hat.update(@character_name, "", 0) if @hat @hat.update(@character_name, "", 0) if @hat
@hat2.update(@character_name, "", 0) if @hat2 @hat2.update(@character_name, "", 0) if @hat2
@@ -84,6 +84,7 @@ class Sprite_Player < Sprite_Character
hat2_color_shift = 0 if !hat2_color_shift hat2_color_shift = 0 if !hat2_color_shift
clothes_color_shift = 0 if !clothes_color_shift clothes_color_shift = 0 if !clothes_color_shift
@hair.update(@character_name, hairFilename, hair_color_shift) if @hair @hair.update(@character_name, hairFilename, hair_color_shift) if @hair
@hat.update(@character_name, hatFilename, hat_color_shift) if @hat @hat.update(@character_name, hatFilename, hat_color_shift) if @hat
@hat2.update(@character_name, hat2Filename, hat2_color_shift) if @hat2 @hat2.update(@character_name, hat2Filename, hat2_color_shift) if @hat2

View File

@@ -745,6 +745,7 @@ def addBackgroundPlane(sprites,planename,background,viewport=nil)
end end
end end
end end
return sprites[planename]
end end
# Adds a background to the sprite hash. # Adds a background to the sprite hash.

View File

@@ -634,7 +634,7 @@ class PokemonBattlerSprite < RPG::Sprite
@_iconBitmap.scale_bitmap(scale) @_iconBitmap.scale_bitmap(scale)
self.bitmap = (@_iconBitmap) ? @_iconBitmap.bitmap : nil self.bitmap = (@_iconBitmap) ? @_iconBitmap.bitmap : nil
add_hat_to_bitmap(self.bitmap,pkmn.hat,pkmn.hat_x,pkmn.hat_y,scale,self.mirror) if self.bitmap && pkmn.hat add_hat_to_bitmap(self.bitmap,pkmn.hat,pkmn.hat_x,pkmn.hat_y,scale,pkmn.hat_mirrored_horizontal,pkmn.hat_mirrored_vertical) if self.bitmap && pkmn.hat
pbSetPosition pbSetPosition
end end

View File

@@ -244,7 +244,7 @@ class PokeBattle_Scene
trainer = pbAddSprite("trainer_#{idxTrainer + 1}", spriteX, spriteY, trainerFile, @viewport) trainer = pbAddSprite("trainer_#{idxTrainer + 1}", spriteX, spriteY, trainerFile, @viewport)
spriteOverrideBitmap = setTrainerSpriteOverrides(trainerType) spriteOverrideBitmap = setTrainerSpriteOverrides(trainerType)
trainer.bitmap = spriteOverrideBitmap if spriteOverrideBitmap trainer.bitmap = spriteOverrideBitmap if spriteOverrideBitmap
trainer.bitmap = generate_front_trainer_sprite_bitmap_from_appearance(custom_appearance).bitmap if custom_appearance trainer.bitmap = generate_front_trainer_sprite_bitmap_from_appearance(custom_appearance,true).bitmap if custom_appearance
return if !trainer.bitmap return if !trainer.bitmap
# Alter position of sprite # Alter position of sprite
trainer.z = 7 + idxTrainer trainer.z = 7 + idxTrainer
@@ -254,7 +254,7 @@ class PokeBattle_Scene
def setTrainerSpriteOverrides(trainer_type) def setTrainerSpriteOverrides(trainer_type)
if TYPE_EXPERTS_APPEARANCES.keys.include?(trainer_type) if TYPE_EXPERTS_APPEARANCES.keys.include?(trainer_type)
return generate_front_trainer_sprite_bitmap_from_appearance(TYPE_EXPERTS_APPEARANCES[trainer_type]).bitmap return generate_front_trainer_sprite_bitmap_from_appearance(TYPE_EXPERTS_APPEARANCES[trainer_type],false).bitmap
end end
end end

View File

@@ -59,7 +59,7 @@ class PokemonSprite < SpriteWrapper
if pokemon.hat if pokemon.hat
new_bitmap = Bitmap.new(base_bitmap.width, base_bitmap.height) new_bitmap = Bitmap.new(base_bitmap.width, base_bitmap.height)
new_bitmap.blt(0, 0, base_bitmap.bitmap, base_bitmap.bitmap.rect) new_bitmap.blt(0, 0, base_bitmap.bitmap, base_bitmap.bitmap.rect)
add_hat_to_bitmap(new_bitmap, pokemon.hat, pokemon.hat_x, pokemon.hat_y) add_hat_to_bitmap(new_bitmap, pokemon.hat, pokemon.hat_x, pokemon.hat_y, 1, pokemon.hat_mirrored_horizontal,pokemon.hat_mirrored_vertical)
@_iconbitmap = SpriteWrapper.new @_iconbitmap = SpriteWrapper.new
@_iconbitmap.bitmap = new_bitmap @_iconbitmap.bitmap = new_bitmap
else else

View File

@@ -48,8 +48,10 @@ class HallOfFame_Scene
@viewport = Viewport.new(0, 0, Graphics.width, Graphics.height) @viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
@viewport.z = 99999 @viewport.z = 99999
# Comment the below line to doesn't use a background # Comment the below line to doesn't use a background
bgFile = @singlerow ? "hallfamebg" : "hallfamebg_multiline" @sprites["bg"] = IconSprite.new(@viewport)
addBackgroundPlane(@sprites, "bg", bgFile, @viewport) @sprites["bg"].setBitmap(getHallOfFameBackground)
@sprites["bg"].z = 0
@sprites["hallbars"] = IconSprite.new(@viewport) @sprites["hallbars"] = IconSprite.new(@viewport)
@sprites["hallbars"].setBitmap("Graphics/Pictures/hallfamebars") @sprites["hallbars"].setBitmap("Graphics/Pictures/hallfamebars")
@sprites["overlay"] = BitmapSprite.new(Graphics.width, Graphics.height, @viewport) @sprites["overlay"] = BitmapSprite.new(Graphics.width, Graphics.height, @viewport)
@@ -73,12 +75,25 @@ class HallOfFame_Scene
pbFadeInAndShow(@sprites) { pbUpdate } pbFadeInAndShow(@sprites) { pbUpdate }
end end
def getHallOfFameBackground
if @singlerow #in the e4
rank = pbGet(VAR_LEAGUE_REMATCH_TIER)
background = "Graphics/Pictures/HallOfFame/hallfamebg"
else #from PC
rank = $PokemonGlobal.hallOfFame[@hallIndex][:TIER]
background = "Graphics/Pictures/HallOfFame/hallfamebg_multiline"
end
if rank && rank.to_i > 0
background += "_#{rank}"
end
return background
end
def pbStartScenePC def pbStartScenePC
@singlerow = false @singlerow = false
pbStartScene
@hallIndex = $PokemonGlobal.hallOfFame.size - 1 @hallIndex = $PokemonGlobal.hallOfFame.size - 1
echoln $PokemonGlobal.hallOfFame[-1] pbStartScene
@hallEntry = $PokemonGlobal.hallOfFame[-1][:TEAM] @hallEntry = $PokemonGlobal.hallOfFame[-1][:TEAM]
createBattlers(false) createBattlers(false)
pbFadeInAndShow(@sprites) { pbUpdate } pbFadeInAndShow(@sprites) { pbUpdate }
@@ -136,6 +151,7 @@ class HallOfFame_Scene
entryData[:DIFFICULTY] = getDifficulty entryData[:DIFFICULTY] = getDifficulty
entryData[:MODE] = getCurrentGameMode() entryData[:MODE] = getCurrentGameMode()
entryData[:DATE] = getCurrentDate() entryData[:DATE] = getCurrentDate()
entryData[:TIER] = getCurrentE4Tier()
#Save trainer data (unused for now) #Save trainer data (unused for now)
entryData[:TRAINER_HAT] = $Trainer.hat entryData[:TRAINER_HAT] = $Trainer.hat
@@ -381,7 +397,12 @@ class HallOfFame_Scene
def writeWelcomePC def writeWelcomePC
overlay = @sprites["overlay"].bitmap overlay = @sprites["overlay"].bitmap
overlay.clear overlay.clear
pbDrawTextPositions(overlay, [[_INTL("Entered the Hall of Fame!"), text = _INTL("Entered the Hall of Fame!")
rank = $PokemonGlobal.hallOfFame[@hallIndex][:TIER]
if rank && rank.to_i > 0
text += _INTL(" (Rematch Tier {1})",rank.to_i)
end
pbDrawTextPositions(overlay, [[text,
Graphics.width / 2, Graphics.height - 80, 2, BASECOLOR, SHADOWCOLOR]]) Graphics.width / 2, Graphics.height - 80, 2, BASECOLOR, SHADOWCOLOR]])
date = $PokemonGlobal.hallOfFame[@hallIndex][:DATE] date = $PokemonGlobal.hallOfFame[@hallIndex][:DATE]
@@ -397,11 +418,17 @@ class HallOfFame_Scene
pbDrawTextPositions(overlay, [[_INTL("{1}", timeString), x, y, 2, BASECOLOR, SHADOWCOLOR]]) pbDrawTextPositions(overlay, [[_INTL("{1}", timeString), x, y, 2, BASECOLOR, SHADOWCOLOR]])
end end
def getCurrentDate() def getCurrentDate()
currentTime = Time.new currentTime = Time.new
return currentTime.year.to_s + "-" + ("%02d" % currentTime.month) + "-" + ("%02d" % currentTime.day) return currentTime.year.to_s + "-" + ("%02d" % currentTime.month) + "-" + ("%02d" % currentTime.day)
end end
def getCurrentE4Tier()
return pbGet(VAR_LEAGUE_REMATCH_TIER)
end
def getCurrentGameMode() def getCurrentGameMode()
gameMode = "Classic mode" gameMode = "Classic mode"
if $game_switches[SWITCH_MODERN_MODE] if $game_switches[SWITCH_MODERN_MODE]
@@ -563,6 +590,7 @@ class HallOfFame_Scene
@battlerIndex = @hallEntry.size - 1 @battlerIndex = @hallEntry.size - 1
createBattlers(false) createBattlers(false)
end end
@sprites["bg"].setBitmap(getHallOfFameBackground)
# Change the pokemon # Change the pokemon
@hallEntry[@battlerIndex].play_cry @hallEntry[@battlerIndex].play_cry
setPokemonSpritesOpacity(@battlerIndex, OPACITY) setPokemonSpritesOpacity(@battlerIndex, OPACITY)

View File

@@ -24,7 +24,11 @@ class MoveRelearner_Scene
@pokemon=pokemon @pokemon=pokemon
@moves=moves @moves=moves
moveCommands=[] moveCommands=[]
moves.each { |m| moveCommands.push(GameData::Move.get(m).name) } echoln moves
moves.each do |m|
echoln m.name
moveCommands.push(GameData::Move.get(m).name)
end
# Create sprite hash # Create sprite hash
@viewport=Viewport.new(0,0,Graphics.width,Graphics.height) @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
@viewport.z=99999 @viewport.z=99999
@@ -169,7 +173,9 @@ class MoveRelearnerScreen
end end
pkmn.learned_moves.each do |move| pkmn.learned_moves.each do |move|
moves.push(move) if !moves.include?(move) move_id = move.is_a?(Symbol) ? move : move.id
next if pkmn.hasMove?(move_id)
moves.push(move_id) if !moves.include?(move_id)
end end
tmoves = [] tmoves = []
@@ -178,6 +184,7 @@ class MoveRelearnerScreen
tmoves.push(i) if !pkmn.hasMove?(i) && !moves.include?(i) tmoves.push(i) if !pkmn.hasMove?(i) && !moves.include?(i)
end end
end end
moves = tmoves + moves moves = tmoves + moves
return moves | [] # remove duplicates return moves | [] # remove duplicates
end end

View File

@@ -139,29 +139,30 @@ def getCurrentPokeball(allowEasterEgg=true)
return nil return nil
end end
def generate_front_trainer_sprite_bitmap_from_appearance(trainerAppearance) def generate_front_trainer_sprite_bitmap_from_appearance(trainerAppearance,is_trainer=true)
echoln trainerAppearance.hat echoln trainerAppearance.hat
return generate_front_trainer_sprite_bitmap(false,nil,trainerAppearance.clothes,trainerAppearance.hat,trainerAppearance.hat2, return generate_front_trainer_sprite_bitmap(false,nil,trainerAppearance.clothes,trainerAppearance.hat,trainerAppearance.hat2,
trainerAppearance.hair,trainerAppearance.skin_color, trainerAppearance.hair,trainerAppearance.skin_color,
trainerAppearance.hair_color,trainerAppearance.hat_color,trainerAppearance.clothes_color, trainerAppearance.hair_color,trainerAppearance.hat_color,trainerAppearance.clothes_color,
trainerAppearance.hat2_color) trainerAppearance.hat2_color,
is_trainer)
end end
def generate_front_trainer_sprite_bitmap(allowEasterEgg=true, pokeball = nil, def generate_front_trainer_sprite_bitmap(allowEasterEgg=true, pokeball = nil,
clothes_id = nil, hat_id = nil, hat2_id=nil, hair_id = nil, clothes_id = nil, hat_id = nil, hat2_id=nil, hair_id = nil,
skin_tone_id = nil, hair_color = nil, hat_color = nil, clothes_color = nil, skin_tone_id = nil, hair_color = nil, hat_color = nil, clothes_color = nil,
hat2_color = nil) hat2_color = nil, is_trainer=true)
clothes_id = $Trainer.clothes if !clothes_id clothes_id = $Trainer.clothes if !clothes_id && is_trainer
hat_id = $Trainer.hat if !hat_id hat_id = $Trainer.hat if !hat_id && is_trainer
hat2_id = $Trainer.hat2 if !hat2_id hat2_id = $Trainer.hat2 if !hat2_id && is_trainer
hair_id = $Trainer.hair if !hair_id hair_id = $Trainer.hair if !hair_id && is_trainer
skin_tone_id = $Trainer.skin_tone if !skin_tone_id skin_tone_id = $Trainer.skin_tone if !skin_tone_id && is_trainer
hair_color = $Trainer.hair_color if !hair_color hair_color = $Trainer.hair_color if !hair_color && is_trainer
hat_color = $Trainer.hat_color if !hat_color hat_color = $Trainer.hat_color if !hat_color && is_trainer
hat2_color = $Trainer.hat2_color if !hat2_color hat2_color = $Trainer.hat2_color if !hat2_color && is_trainer
clothes_color = $Trainer.clothes_color if !clothes_color clothes_color = $Trainer.clothes_color if !clothes_color && is_trainer
hairFilename = getTrainerSpriteHairFilename(hair_id) #_INTL(Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_HAIR_FOLDER + "/hair_trainer_{1}", $Trainer.hair) hairFilename = getTrainerSpriteHairFilename(hair_id) #_INTL(Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_HAIR_FOLDER + "/hair_trainer_{1}", $Trainer.hair)
outfitFilename = getTrainerSpriteOutfitFilename(clothes_id) #_INTL(Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_CLOTHES_FOLDER + "/clothes_trainer_{1}", $Trainer.clothes) outfitFilename = getTrainerSpriteOutfitFilename(clothes_id) #_INTL(Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_CLOTHES_FOLDER + "/clothes_trainer_{1}", $Trainer.clothes)
@@ -375,13 +376,14 @@ def duplicateHatForFrames(hatBitmap, frame_count)
return duplicatedBitmap return duplicatedBitmap
end end
def add_hat_to_bitmap(bitmap, hat_id, x_pos, y_pos, scale = 1, mirrored = false) def add_hat_to_bitmap(bitmap, hat_id, x_pos, y_pos, scale = 1, mirrored_horizontal = false, mirrored_vertical = false)
base_scale = 1.5 #coz hat & poke sprites aren't the same size base_scale = 1.5 #coz hat & poke sprites aren't the same size
adjusted_scale = base_scale * scale adjusted_scale = base_scale * scale
hat_filename = getTrainerSpriteHatFilename(hat_id) hat_filename = getTrainerSpriteHatFilename(hat_id)
hatBitmapWrapper = AnimatedBitmap.new(hat_filename, 0) if pbResolveBitmap(hat_filename) hatBitmapWrapper = AnimatedBitmap.new(hat_filename, 0) if pbResolveBitmap(hat_filename)
hatBitmapWrapper.scale_bitmap(adjusted_scale) if hatBitmapWrapper hatBitmapWrapper.scale_bitmap(adjusted_scale) if hatBitmapWrapper
hatBitmapWrapper.mirror if hatBitmapWrapper && mirrored hatBitmapWrapper.mirror_horizontally if hatBitmapWrapper && mirrored_horizontal
hatBitmapWrapper.mirror_vertically if hatBitmapWrapper && mirrored_vertical
bitmap.blt(x_pos * adjusted_scale, y_pos * adjusted_scale, hatBitmapWrapper.bitmap, hatBitmapWrapper.bitmap.rect) if hatBitmapWrapper bitmap.blt(x_pos * adjusted_scale, y_pos * adjusted_scale, hatBitmapWrapper.bitmap, hatBitmapWrapper.bitmap.rect) if hatBitmapWrapper
end end

View File

@@ -24,6 +24,10 @@ CLOTHES_WAITER = "butler"
CLOTHES_LASS_YELLOW ="lass" CLOTHES_LASS_YELLOW ="lass"
CLOTHES_LASS_BLUE ="lass2" CLOTHES_LASS_BLUE ="lass2"
CLOTHES_ROCKET_WHITE_M ="RocketJames"
CLOTHES_ROCKET_WHITE_F ="RocketJessie"
DEFAULT_OUTFIT_MALE = "red" DEFAULT_OUTFIT_MALE = "red"
DEFAULT_OUTFIT_FEMALE = "leaf" DEFAULT_OUTFIT_FEMALE = "leaf"
STARTING_OUTFIT = "pikajamas" STARTING_OUTFIT = "pikajamas"
@@ -47,7 +51,7 @@ HAT_ORAN = "orange"
HAT_FLOWERS = "grassexpert" HAT_FLOWERS = "grassexpert"
HAT_LUCHA = "hawluchamask" HAT_LUCHA = "hawluchamask"
HAT_EEVEE_EARS = "eeveeears"
HAT_PARASHROOM = "parashroom" HAT_PARASHROOM = "parashroom"
HAT_AERODACTYL = "aerodactylSkull" HAT_AERODACTYL = "aerodactylSkull"
HAT_DUSKULL_MASK = "duskullmask" HAT_DUSKULL_MASK = "duskullmask"

View File

@@ -21,7 +21,8 @@ class PokemonHatPresenter
@min_y, @max_y = -120, 120 # Safe symmetric range @min_y, @max_y = -120, 120 # Safe symmetric range
@hatBitmapWrapper = AnimatedBitmap.new(@hatFilename, 0) if pbResolveBitmap(@hatFilename) @hatBitmapWrapper = AnimatedBitmap.new(@hatFilename, 0) if pbResolveBitmap(@hatFilename)
@hatBitmapWrapper.mirror_horizontally if @hatBitmapWrapper && @hat_mirrored_horizontal
@hatBitmapWrapper.mirror_vertically if @hatBitmapWrapper && @hat_mirrored_vertical
end end
def pbStartScreen def pbStartScreen
@@ -66,7 +67,7 @@ class PokemonHatPresenter
return false if Input.trigger?(Input::BACK) return false if Input.trigger?(Input::BACK)
@view.update() @view.update()
end end
@pokemon.hat = @hat_id updatePokemonHatPosition
@view.hide_select_arrows @view.hide_select_arrows
end end
@@ -89,13 +90,21 @@ class PokemonHatPresenter
return false if Input.trigger?(Input::BACK) return false if Input.trigger?(Input::BACK)
@view.update() @view.update()
end end
resetHatVisualFlip
@view.hide_move_arrows @view.hide_move_arrows
return true return true
end end
#Let the sprite display stuff handle the actual flipping
def resetHatVisualFlip
return unless @hatBitmapWrapper
@hatBitmapWrapper.mirror_horizontally if @hat_mirrored_horizontal
@hatBitmapWrapper.mirror_vertically if @hat_mirrored_vertical
end
def flipHatHorizontally() def flipHatHorizontally()
return unless @hatBitmapWrapper
@hat_mirrored_horizontal = !@hat_mirrored_horizontal @hat_mirrored_horizontal = !@hat_mirrored_horizontal
pbSEPlay("GUI storage pick up") pbSEPlay("GUI storage pick up")
@hatBitmapWrapper.mirror_horizontally @hatBitmapWrapper.mirror_horizontally
@@ -104,6 +113,7 @@ class PokemonHatPresenter
def flipHatVertically() def flipHatVertically()
return unless @hatBitmapWrapper
pbSEPlay("GUI storage pick up") pbSEPlay("GUI storage pick up")
@hat_mirrored_vertical = !@hat_mirrored_vertical @hat_mirrored_vertical = !@hat_mirrored_vertical
@hatBitmapWrapper.mirror_vertically @hatBitmapWrapper.mirror_vertically

View File

@@ -63,8 +63,8 @@ TYPE_EXPERT_TRAINERS = {
:ROCK => ["Slate", _INTL("Looks like Ive hit rock bottom...")], :ROCK => ["Slate", _INTL("Looks like Ive hit rock bottom...")],
:WATER => ["Marina", _INTL("You really made a splash!")], :WATER => ["Marina", _INTL("You really made a splash!")],
:FLYING => ["Gale", _INTL("I guess Im grounded for now.")], :FLYING => ["Gale", _INTL("I guess Im grounded for now.")],
:DARK => ["Raven", _INTL("Ill slip back into the shadows")], :DARK => ["Gerard", _INTL("I guess I'll slip back into the shadows...")],
:STEEL => ["Silvia", _INTL("I guess I was a bit rusty...")], :STEEL => ["Silvia", _INTL("I was a bit rusty...")],
:PSYCHIC => ["Carl", _INTL("I could not foresee this defeat.")], :PSYCHIC => ["Carl", _INTL("I could not foresee this defeat.")],
:GHOST => ["Evangeline", _INTL("I can feel myself disappearing into thin air!")], :GHOST => ["Evangeline", _INTL("I can feel myself disappearing into thin air!")],
:POISON => ["Marie", _INTL("I got a taste of my own medicine!")], :POISON => ["Marie", _INTL("I got a taste of my own medicine!")],

View File

@@ -94,7 +94,7 @@ VAR_ROCKET_NAME=25
VAR_NB_CRIMES_REPORTED=300 VAR_NB_CRIMES_REPORTED=300
VAR_EXOTIC_POKEMON_ID=327 VAR_EXOTIC_POKEMON_ID=327
VAR_TYPE_EXPERTS_BEATEN=332 VAR_TYPE_EXPERTS_BEATEN=332
TOTAL_NB_TYPE_EXPERTS=331 #TOTAL_NB_TYPE_EXPERTS=331
#Randomizer #Randomizer
VAR_RANDOMIZER_WILD_POKE_BST=197 VAR_RANDOMIZER_WILD_POKE_BST=197

View File

@@ -41,6 +41,7 @@ SWITCH_GOT_BADGE_14 = 44
SWITCH_GOT_BADGE_15 = 45 SWITCH_GOT_BADGE_15 = 45
SWITCH_GOT_BADGE_16 = 50 SWITCH_GOT_BADGE_16 = 50
SWITCH_LEAGUE_TIER_1= 1155
SWITCH_LEAGUE_TIER_2= 1151 SWITCH_LEAGUE_TIER_2= 1151
SWITCH_LEAGUE_TIER_3= 1152 SWITCH_LEAGUE_TIER_3= 1152
SWITCH_LEAGUE_TIER_4= 1153 SWITCH_LEAGUE_TIER_4= 1153

View File

@@ -1118,8 +1118,8 @@ ItemHandlers::UseOnPokemon.add(:POISONMUSHROOM, proc { |item, pkmn, scene|
next pbHPItem(pkmn, 10, scene) next pbHPItem(pkmn, 10, scene)
}) })
ItemHandlers::BattleUseOnPokemon.add(:POISONMUSHROOM, proc { |item, pokemon, battler, choices, scene| ItemHandlers::BattleUseOnPokemon.add(:POISONMUSHROOM, proc { |item, pokemon, battler, choices, scene|
if battler.status != :POISON if pokemon.status != :POISON
battler.status = :POISON pokemon.status = :POISON
scene.pbRefresh scene.pbRefresh
scene.pbDisplay(_INTL("{1} was poisoned from eating the mushroom.", pokemon.name)) scene.pbDisplay(_INTL("{1} was poisoned from eating the mushroom.", pokemon.name))
end end
@@ -1331,6 +1331,7 @@ ItemHandlers::BattleUseOnPokemon.add(:ROCKETMEAL, proc { |item, pokemon, battler
}) })
ItemHandlers::UseOnPokemon.add(:FANCYMEAL, proc { |item, pokemon, scene| ItemHandlers::UseOnPokemon.add(:FANCYMEAL, proc { |item, pokemon, scene|
next pbHPItem(pokemon, 100, scene) next pbHPItem(pokemon, 100, scene)
}) })
@@ -1343,6 +1344,7 @@ ItemHandlers::UseOnPokemon.add(:COFFEE, proc { |item, pokemon, scene|
}) })
ItemHandlers::BattleUseOnPokemon.add(:COFFEE, proc { |item, pokemon, battler, choices, scene| ItemHandlers::BattleUseOnPokemon.add(:COFFEE, proc { |item, pokemon, battler, choices, scene|
battler.pbRaiseStatStage(:SPEED,(Settings::X_STAT_ITEMS_RAISE_BY_TWO_STAGES) ? 2 : 1,battler) if battler
pbBattleHPItem(pokemon, battler, 50, scene) pbBattleHPItem(pokemon, battler, 50, scene)
}) })

View File

@@ -50,7 +50,7 @@ QUESTS = {
#Celadon City #Celadon City
"celadon_1" => Quest.new("celadon_1", _INTL("Sun or Moon"), _INTL("Show the Pokémon that Eevee evolves when exposed to a Moon or Sun stone to help the scientist with her research."), "BW (82)", _INTL("Celadon City"), HotelQuestColor), "celadon_1" => Quest.new("celadon_1", _INTL("Sun or Moon"), _INTL("Show the Pokémon that Eevee evolves when exposed to a Moon or Sun stone to help the scientist with her research."), "BW (82)", _INTL("Celadon City"), HotelQuestColor),
"celadon_2" => Quest.new("celadon_2", _INTL("For Whom the Bell Tolls"), _INTL("Ring Lavender Town's bell when the time is right to reveal its secret."), "BW (40)", _INTL("Lavender Town"), HotelQuestColor), "celadon_2" => Quest.new("celadon_2", _INTL("For Whom the Bell Tolls"), _INTL("Ring Lavender Town's bell when the time is right to reveal its secret."), "BW (40)", _INTL("Lavender Town"), HotelQuestColor),
"celadon_3" => Quest.new("celadon_3", _INTL("Hardboiled"), _INTL("A lady wants you to give her an egg to make an omelette.", "BW (24)"), _INTL("Celadon City"), HotelQuestColor), "celadon_3" => Quest.new("celadon_3", _INTL("Hardboiled"), _INTL("A lady wants you to give her an egg to make an omelette."), "BW (24)", _INTL("Celadon City"), HotelQuestColor),
"celadon_field_1" => Quest.new("celadon_field_1", _INTL("A stroll with Eevee!"), _INTL("Walk Eevee around for a while until it gets tired."), "BW (37)", _INTL("Celadon City"), FieldQuestColor), "celadon_field_1" => Quest.new("celadon_field_1", _INTL("A stroll with Eevee!"), _INTL("Walk Eevee around for a while until it gets tired."), "BW (37)", _INTL("Celadon City"), FieldQuestColor),
#Fuchsia City #Fuchsia City

View File

@@ -43,7 +43,7 @@ end
def getCurrentLevelCap() def getCurrentLevelCap()
current_max_level = Settings::LEVEL_CAPS[$Trainer.badge_count] current_max_level = Settings::LEVEL_CAPS[$Trainer.badge_count]
current_max_level *= Settings::HARD_MODE_LEVEL_MODIFIER if $game_switches[SWITCH_GAME_DIFFICULTY_HARD] current_max_level *= Settings::HARD_MODE_LEVEL_MODIFIER if $game_switches[SWITCH_GAME_DIFFICULTY_HARD]
return current_max_level return current_max_level.floor
end end
def pokemonExceedsLevelCap(pokemon) def pokemonExceedsLevelCap(pokemon)

View File

@@ -2,7 +2,7 @@ def spriteOptionsMenu
commands = [] commands = []
cmd_manual_update= _INTL("Update sprites manually") cmd_manual_update= _INTL("Update sprites manually")
cmd_clear_sprite_cache = _INTL("Clear sprite cache") cmd_clear_sprite_cache = _INTL("Clear sprite cache")
cmd_reset_alt_sprites = _INTL("Reset selected sprites") cmd_reset_alt_sprites = _INTL("Reset displayed alt sprites")
cmd_cancel = _INTL("Cancel") cmd_cancel = _INTL("Cancel")
commands << cmd_manual_update commands << cmd_manual_update
commands << cmd_clear_sprite_cache commands << cmd_clear_sprite_cache

View File

@@ -133,25 +133,26 @@ class PokemonStorageScreen
def multipleSelectedPokemonCommands(selected, pokemonCount) def multipleSelectedPokemonCommands(selected, pokemonCount)
commands = [] commands = []
cmdMove = -1 cmdMove = _INTL("Move")
cmdRelease = -1 cmdRelease = _INTL("Release")
cmdCancel = -1 cmdCancel = _INTL("Cancel")
cmdSort = -1 cmdSort = _INTL("Sort")
helptext = _INTL("Selected {1} Pokémon.", pokemonCount) helptext = _INTL("Selected {1} Pokémon.", pokemonCount)
commands[cmdMove = commands.length] = _INTL("Move") commands << cmdMove
commands[cmdSort = commands.length] = _INTL("Sort") commands << cmdSort
commands[cmdRelease = commands.length] = _INTL("Release") if $DEBUG commands << cmdRelease if $DEBUG
commands[cmdCancel = commands.length] = _INTL("Cancel") commands << cmdCancel
command = pbShowCommands(helptext, commands) chosen = pbShowCommands(helptext, commands)
if command == cmdMove case commands[chosen]
when cmdMove
pbHoldMulti(selected[0], selected[1]) pbHoldMulti(selected[0], selected[1])
elsif command == cmdSort when cmdSort
pbSortMulti(selected[0]) pbSortMulti(selected[0])
elsif command == cmdRelease when cmdRelease
pbReleaseMulti(selected[0]) pbReleaseMulti(selected[0])
end end
end end

View File

@@ -1,4 +1,13 @@
def exportTeamForShowdown()
message = ""
for pokemon in $Trainer.party
message << exportFusedPokemonForShowdown(pokemon)
message << "\n"
end
Input.clipboard = message
end
# Output example # Output example
# Clefnair (Clefable) @ Life Orb # Clefnair (Clefable) @ Life Orb
# Ability: Magic Guard # Ability: Magic Guard

View File

@@ -27,7 +27,7 @@ def initializeLegendaryMode()
$game_switches[SWITCH_GYM_RANDOM_EACH_BATTLE] = false $game_switches[SWITCH_GYM_RANDOM_EACH_BATTLE] = false
$game_switches[SWITCH_RANDOM_GYM_PERSIST_TEAMS] = true $game_switches[SWITCH_RANDOM_GYM_PERSIST_TEAMS] = true
$game_switches[SWITCH_LEGENDARY_MODE] = true $game_switches[SWITCH_LEGENDARY_MODE] = true
$game_switches[SWITCH_RANDOMIZED_AT_LEAST_ONCE] = true
addLegendaryEggsToPC addLegendaryEggsToPC
$PokemonSystem.hide_custom_eggs = true $PokemonSystem.hide_custom_eggs = true
$PokemonSystem.type_icons = true $PokemonSystem.type_icons = true
@@ -156,7 +156,7 @@ def addLegendaryEggsToPC()
legendaries_species = LEGENDARIES_LIST.shuffle legendaries_species = LEGENDARIES_LIST.shuffle
legendaries_species.each do |species| legendaries_species.each do |species|
pokemon = Pokemon.new(species, Settings::EGG_LEVEL) pokemon = Pokemon.new(species, Settings::EGG_LEVEL)
pokemon.steps_to_hatch = pokemon.species_data.hatch_steps pokemon.steps_to_hatch = pokemon.species_data.hatch_steps/2
pokemon.name = "Egg" pokemon.name = "Egg"
$PokemonStorage.pbStoreCaught(pokemon) $PokemonStorage.pbStoreCaught(pokemon)
end end

View File

@@ -225,7 +225,7 @@ module SaveData
end end
echoln '' if conversions_to_run.length > 0 echoln '' if conversions_to_run.length > 0
save_data[:essentials_version] = Essentials::VERSION save_data[:essentials_version] = Essentials::VERSION
save_data[:game_version] = Settings::GAME_VERSION save_data[:game_version] = Settings::GAME_VERSION_NUMBER
return true return true
end end
end end

View File

@@ -99,7 +99,7 @@ end
def list_unlocked_league_tiers def list_unlocked_league_tiers
unlocked_tiers =[] unlocked_tiers =[]
unlocked_tiers << 1 if $game_switches[SWITCH_BEAT_THE_LEAGUE] unlocked_tiers << 1 if $game_switches[SWITCH_LEAGUE_TIER_1]
unlocked_tiers << 2 if $game_switches[SWITCH_LEAGUE_TIER_2] unlocked_tiers << 2 if $game_switches[SWITCH_LEAGUE_TIER_2]
unlocked_tiers << 3 if $game_switches[SWITCH_LEAGUE_TIER_3] unlocked_tiers << 3 if $game_switches[SWITCH_LEAGUE_TIER_3]
unlocked_tiers << 4 if $game_switches[SWITCH_LEAGUE_TIER_4] unlocked_tiers << 4 if $game_switches[SWITCH_LEAGUE_TIER_4]
@@ -111,7 +111,7 @@ def select_league_tier
#validateE4Data #validateE4Data
available_tiers = list_unlocked_league_tiers available_tiers = list_unlocked_league_tiers
return 0 if available_tiers.empty? return 0 if available_tiers.empty?
return available_tiers[0] if available_tiers.length == 1 #return available_tiers[0] if available_tiers.length == 1
available_tiers.reverse! available_tiers.reverse!
commands = [] commands = []
@@ -139,17 +139,16 @@ def unlock_new_league_tiers
tiers_to_unlock << 3 if current_tier == 2 && $game_switches[SWITCH_BEAT_MT_SILVER] tiers_to_unlock << 3 if current_tier == 2 && $game_switches[SWITCH_BEAT_MT_SILVER]
tiers_to_unlock << 4 if current_tier == 3 && $game_variables[VAR_NB_GYM_REMATCHES] >= 16 tiers_to_unlock << 4 if current_tier == 3 && $game_variables[VAR_NB_GYM_REMATCHES] >= 16
tiers_to_unlock << 5 if current_tier == 4 tiers_to_unlock << 5 if current_tier == 4
tiers_to_unlock.each do |tier| tiers_to_unlock.each do |tier|
next if tier == 1 || tier == 0 next if tier == 0
$game_switches[SWITCH_LEAGUE_TIER_1] = true if tiers_to_unlock.include?(1)
$game_switches[SWITCH_LEAGUE_TIER_2] = true if tiers_to_unlock.include?(2) $game_switches[SWITCH_LEAGUE_TIER_2] = true if tiers_to_unlock.include?(2)
$game_switches[SWITCH_LEAGUE_TIER_3] = true if tiers_to_unlock.include?(3) $game_switches[SWITCH_LEAGUE_TIER_3] = true if tiers_to_unlock.include?(3)
$game_switches[SWITCH_LEAGUE_TIER_4] = true if tiers_to_unlock.include?(4) $game_switches[SWITCH_LEAGUE_TIER_4] = true if tiers_to_unlock.include?(4)
$game_switches[SWITCH_LEAGUE_TIER_5] = true if tiers_to_unlock.include?(5) $game_switches[SWITCH_LEAGUE_TIER_5] = true if tiers_to_unlock.include?(5)
unless currently_unlocked_tiers.include?(tier) unless currently_unlocked_tiers.include?(tier)
pbMEPlay("Key item get") pbMEPlay("Key item get")
pbMessage(_INTL("{1} unlocked the \\C[1]Tier {2} League Rematches\\C[0]!",$Trainer.name,tier)) pbMessage(_INTL("{1} unlocked \\C[1]Tier {2} League Rematches\\C[0]!",$Trainer.name,tier))
end end
end end
end end

View File

@@ -47,7 +47,7 @@ module Settings
AI_ENTRIES_RATE_LOG_FILE = 'Data/pokedex/rate_limit.log' # Path to the log file AI_ENTRIES_RATE_LOG_FILE = 'Data/pokedex/rate_limit.log' # Path to the log file
#Spritepack #Spritepack
NEWEST_SPRITEPACK_MONTH = 8 NEWEST_SPRITEPACK_MONTH = 9
NEWEST_SPRITEPACK_YEAR = 2025 NEWEST_SPRITEPACK_YEAR = 2025

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 743 B

After

Width:  |  Height:  |  Size: 743 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 671 B