diff --git a/Data/Actors.rxdata b/Data/Actors.rxdata index 7967a5432..41edc8e26 100644 Binary files a/Data/Actors.rxdata and b/Data/Actors.rxdata differ diff --git a/Data/Animations.rxdata b/Data/Animations.rxdata index 8e67182ba..826e1e8a6 100644 Binary files a/Data/Animations.rxdata and b/Data/Animations.rxdata differ diff --git a/Data/Armors.rxdata b/Data/Armors.rxdata index 2249bec14..901f2bb2b 100644 Binary files a/Data/Armors.rxdata and b/Data/Armors.rxdata differ diff --git a/Data/CommonEvents.rxdata b/Data/CommonEvents.rxdata index f3c5ff5c1..531ae6477 100644 Binary files a/Data/CommonEvents.rxdata and b/Data/CommonEvents.rxdata differ diff --git a/Data/Enemies.rxdata b/Data/Enemies.rxdata index 004ee903d..be622f513 100644 Binary files a/Data/Enemies.rxdata and b/Data/Enemies.rxdata differ diff --git a/Data/Items.rxdata b/Data/Items.rxdata index 3e62ba6d2..fe767fa0b 100644 Binary files a/Data/Items.rxdata and b/Data/Items.rxdata differ diff --git a/Data/MapInfos.rxdata b/Data/MapInfos.rxdata index 0e70bab8e..c8876ad1c 100644 Binary files a/Data/MapInfos.rxdata and b/Data/MapInfos.rxdata differ diff --git a/Data/Scripts/025-Randomizer/randomizer gym leader edit.rb b/Data/Scripts/025-Randomizer/randomizer gym leader edit.rb index 8d2cf8af6..1b13684c3 100644 --- a/Data/Scripts/025-Randomizer/randomizer gym leader edit.rb +++ b/Data/Scripts/025-Randomizer/randomizer gym leader edit.rb @@ -461,6 +461,8 @@ def getDexNumFromFilename(filename) return (body * NB_POKEMON) + head end + + # def getCustomSpeciesList() # filesList = Dir["./Graphics/CustomBattlers/*"] # maxDexNumber = (NB_POKEMON * NB_POKEMON) + NB_POKEMON diff --git a/Data/Scripts/048_Fusion/PokemonFusion.rb b/Data/Scripts/048_Fusion/PokemonFusion.rb index a7ea02ada..1a0e12d79 100644 --- a/Data/Scripts/048_Fusion/PokemonFusion.rb +++ b/Data/Scripts/048_Fusion/PokemonFusion.rb @@ -689,7 +689,9 @@ class PokemonFusionScene oldspeciesname = GameData::Species.get(@pokemon1.species).real_name overlay = BitmapSprite.new(Graphics.width, Graphics.height, @viewport).bitmap - drawSpriteCredits(@sprites["rsprite2"].getBitmap.filename, overlay) + + sprite_bitmap = @sprites["rsprite2"].getBitmap + drawSpriteCredits(sprite_bitmap.filename,sprite_bitmap.path, overlay) Kernel.pbMessageDisplay(@sprites["msgwindow"], _INTL("\\se[]Congratulations! Your Pokémon were fused into {2}!\\wt[80]", @pokemon1.name, newspeciesname)) @@ -767,10 +769,12 @@ class PokemonFusionScene end end -def drawSpriteCredits(filename,overlay) +def drawSpriteCredits(filename,path,overlay) + return if path.start_with?(Settings::BATTLERS_FOLDER) x= Graphics.width/2 y=240 spritename = File.basename(filename,'.*') + discord_name = getSpriteCredits(spritename) return if !discord_name diff --git a/Data/Scripts/050_AddOns/FusionSprites.rb b/Data/Scripts/050_AddOns/FusionSprites.rb index 5411d8a26..256013907 100644 --- a/Data/Scripts/050_AddOns/FusionSprites.rb +++ b/Data/Scripts/050_AddOns/FusionSprites.rb @@ -200,7 +200,17 @@ def get_unfused_sprite_path(dex_number) return lightmode_path end +def alt_sprites_substitutions_available + return $PokemonGlobal && $PokemonGlobal.alt_sprite_substitutions +end + def get_fusion_sprite_path(head_id,body_id) + #Swap path if alt is selected for this pokemon + dex_num = getSpeciesIdForFusion(head_id,body_id) + if alt_sprites_substitutions_available && $PokemonGlobal.alt_sprite_substitutions.keys.include?(dex_num) + return $PokemonGlobal.alt_sprite_substitutions[dex_num] + end + #Try local custom sprite filename = sprintf("%s.%s.png", head_id, body_id) local_custom_path = Settings::CUSTOM_BATTLERS_FOLDER_INDEXED + head_id.to_s + "/" +filename diff --git a/Data/Scripts/050_AddOns/GeneralUtils.rb b/Data/Scripts/050_AddOns/GeneralUtils.rb index 04be884c7..83fdf257e 100644 --- a/Data/Scripts/050_AddOns/GeneralUtils.rb +++ b/Data/Scripts/050_AddOns/GeneralUtils.rb @@ -113,6 +113,8 @@ def getDexNumberForSpecies(species) return dexNum end + + def getPokemon(dexNum) return GameData::Species.get(dexNum) end @@ -121,6 +123,11 @@ def getSpecies(dexnum) return getPokemon(dexnum) end +def getSpeciesIdForFusion(head_id, body_id) + return (body_id) * Settings::NB_POKEMON + head_id +end + + #shortcut for using in game events because of script characters limit def dexNum(species) return getDexNumberForSpecies(species) @@ -407,7 +414,9 @@ def customSpriteExists(species) return download_custom_sprite(head, body) != nil end - +def checkIfCustomSpriteExistsByPath(path) + return true if pbResolveBitmap(path) != nil +end def customSpriteExistsBodyHead(body, head) diff --git a/Data/Scripts/050_AddOns/MultiSaves.rb b/Data/Scripts/050_AddOns/MultiSaves.rb index 4b489cb4b..74fd004e6 100644 --- a/Data/Scripts/050_AddOns/MultiSaves.rb +++ b/Data/Scripts/050_AddOns/MultiSaves.rb @@ -396,6 +396,7 @@ class PokemonLoadScreen @scene.pbEndScene Game.load(@save_data) $game_switches[SWITCH_V5_1] = true + $PokemonGlobal.alt_sprite_substitutions = {} if !$PokemonGlobal.alt_sprite_substitutions return when cmd_new_game @scene.pbEndScene diff --git a/Data/Scripts/050_AddOns/UI_Pokedex_SpritesPage.rb b/Data/Scripts/050_AddOns/UI_Pokedex_SpritesPage.rb index 4a6663a92..54e8b7c6a 100644 --- a/Data/Scripts/050_AddOns/UI_Pokedex_SpritesPage.rb +++ b/Data/Scripts/050_AddOns/UI_Pokedex_SpritesPage.rb @@ -2,11 +2,11 @@ class PokemonPokedexInfo_Scene #todo add indicator to show which one is the main sprite - # also maybe add an indicator in main list for when a sprite has available alts - Y_POSITION_SMALL = 40#90 + Y_POSITION_SMALL = 40 #90 Y_POSITION_BIG = 60 - X_POSITION_PREVIOUS = -30#20 + X_POSITION_PREVIOUS = -30 #20 X_POSITION_SELECTED = 105 - X_POSITION_NEXT = 340#380 + X_POSITION_NEXT = 340 #380 Y_POSITION_BG_SMALL = 70 Y_POSITION_BG_BIG = 93 @@ -66,15 +66,15 @@ class PokemonPokedexInfo_Scene @sprites["previousSprite"].x = X_POSITION_PREVIOUS @sprites["previousSprite"].y = Y_POSITION_SMALL @sprites["previousSprite"].visible = false - @sprites["previousSprite"].zoom_x = Settings::FRONTSPRITE_SCALE#/2 - @sprites["previousSprite"].zoom_y = Settings::FRONTSPRITE_SCALE#/2 + @sprites["previousSprite"].zoom_x = Settings::FRONTSPRITE_SCALE #/2 + @sprites["previousSprite"].zoom_y = Settings::FRONTSPRITE_SCALE #/2 @sprites["nextSprite"] = IconSprite.new(0, 0, @viewport) @sprites["nextSprite"].x = X_POSITION_NEXT @sprites["nextSprite"].y = Y_POSITION_SMALL @sprites["nextSprite"].visible = false - @sprites["nextSprite"].zoom_x = Settings::FRONTSPRITE_SCALE#/2 - @sprites["nextSprite"].zoom_y = Settings::FRONTSPRITE_SCALE#/2 + @sprites["nextSprite"].zoom_x = Settings::FRONTSPRITE_SCALE #/2 + @sprites["nextSprite"].zoom_y = Settings::FRONTSPRITE_SCALE #/2 @sprites["selectedSprite"].z = 9999999 @sprites["previousSprite"].z = 9999999 @@ -94,15 +94,15 @@ class PokemonPokedexInfo_Scene end - def pbGetAvailableForms body_id = getBodyID(@species) - head_id = getHeadID(@species,body_id) - download_custom_sprite(head_id,body_id) - download_autogen_sprite(head_id,body_id) - download_alt_sprites(head_id,body_id) + head_id = getHeadID(@species, body_id) + download_custom_sprite(head_id, body_id) + download_autogen_sprite(head_id, body_id) + download_alt_sprites(head_id, body_id) return PokedexUtils.new.pbGetAvailableAlts(@species) end + def hide_all_selected_windows @sprites["bgSelected_previous"].visible = false if @sprites["bgSelected_previous"] @sprites["bgSelected_center"].visible = false if @sprites["bgSelected_center"] @@ -135,20 +135,29 @@ class PokemonPokedexInfo_Scene @sprites["previousSprite"].setBitmap(@available[previousIndex]) if previousIndex != nextIndex @sprites["selectedSprite"].setBitmap(@available[@selected_index]) @sprites["nextSprite"].setBitmap(@available[nextIndex]) - showSpriteCredits(@sprites["selectedSprite"].getBitmap.filename) + + selected_bitmap = @sprites["selectedSprite"].getBitmap + is_generated = !selected_bitmap.path.include?(Settings::CUSTOM_BATTLERS_FOLDER_INDEXED) + showSpriteCredits(selected_bitmap.filename,is_generated) update_selected end - def showSpriteCredits(filename) + def showSpriteCredits(filename,generated_sprite=false) @creditsOverlay.dispose - x= Graphics.width/2 -60 - y=Graphics.height - 60 - spritename = File.basename(filename,'.*') - discord_name = getSpriteCredits(spritename) - return if !discord_name + x = Graphics.width / 2 - 75 + y = Graphics.height - 60 + spritename = File.basename(filename, '.*') - author_name = File.basename(discord_name,'#*') + if !generated_sprite + discord_name = getSpriteCredits(spritename) + discord_name = "Unknown artist" if !discord_name + else + #todo give credits to Japeal - need to differenciate unfused sprites + discord_name = ""#"Japeal\n(Generated)" + end + + author_name = File.basename(discord_name, '#*') label_base_color = Color.new(248, 248, 248) label_shadow_color = Color.new(104, 104, 104) @@ -157,7 +166,6 @@ class PokemonPokedexInfo_Scene pbDrawTextPositions(@creditsOverlay, textpos) end - def pbChooseForm loop do @sprites["uparrow"].visible = true @@ -194,17 +202,38 @@ class PokemonPokedexInfo_Scene @sprites["downarrow"].visible = false end + # def is_main_sprite(index = nil) + # return false if !@available + # if index == nil + # index = @selected_index + # end + # return true if @available.size <= 1 + # if @speciesData.always_use_generated + # selected_sprite = @available[index] + # return selected_sprite.start_with?(Settings::BATTLERS_FOLDER) + # end + # return index == 0 + # end + def is_main_sprite(index = nil) - return false if !@available - if index == nil + if !index index = @selected_index end - return true if @available.size <= 1 - if @speciesData.always_use_generated - selected_sprite = @available[index] - return selected_sprite.start_with?(Settings::BATTLERS_FOLDER) + selected_sprite = @available[index] + species_id = getDexNumberForSpecies(@species) + if $PokemonGlobal.alt_sprite_substitutions[species_id] + return $PokemonGlobal.alt_sprite_substitutions[species_id] == selected_sprite end - return index == 0 + is_generated = !selected_sprite.include?(Settings::CUSTOM_BATTLERS_FOLDER_INDEXED) + if is_generated + return !checkIfCustomSpriteExistsByPath(selected_sprite) + end + return !sprite_is_alt(selected_sprite) + end + + def sprite_is_alt(sprite_path) + spritename = File.basename(sprite_path, '.*') + return spritename.match?(/[a-zA-Z]/) end def select_sprite @@ -220,59 +249,59 @@ class PokemonPokedexInfo_Scene end def swap_main_sprite - begin - old_main_sprite = @available[0] - new_main_sprite = @available[@selected_index] - - if main_sprite_is_non_custom() - @speciesData.set_always_use_generated_sprite(false) - return - # new_name_without_ext = File.basename(old_main_sprite, ".png") - # new_name_without_letter=new_name_without_ext.chop - # File.rename(new_main_sprite, Settings::CUSTOM_BATTLERS_FOLDER+new_name_without_letter + ".png") - end - - if new_main_sprite.start_with?(Settings::BATTLERS_FOLDER) - @speciesData.set_always_use_generated_sprite(true) - return - # new_name_without_ext = File.basename(old_main_sprite, ".png") - # File.rename(old_main_sprite, Settings::CUSTOM_BATTLERS_FOLDER+new_name_without_ext+"x" + ".png")x - # return - end - File.rename(new_main_sprite, new_main_sprite + "temp") - File.rename(old_main_sprite, new_main_sprite) - File.rename(new_main_sprite + "temp", old_main_sprite) - rescue - pbMessage("There was an error while swapping the sprites. Please save and restart the game as soon as possible.") - end - end - - def main_sprite_is_non_custom() - speciesData = getSpecies(@species) - return speciesData.always_use_generated || @available.size <= 1 - #dégueu, je sais - si le 1er element de la liste finit par une lettre (le 1er element devrait etre considéré comme le main), ça veut dire que le main est non-custom - # speciesData.set_always_use_generated_sprite(true) - # return POSSIBLE_ALTS.include?(File.basename(old_main_sprite, ".png")[-1]) + old_main_sprite = @available[0] + new_main_sprite = @available[@selected_index] + species_number = dexNum(@species) + set_alt_sprite_substitution(species_number, new_main_sprite) end + # def swap_main_sprite + # begin + # old_main_sprite = @available[0] + # new_main_sprite = @available[@selected_index] + # + # if main_sprite_is_non_custom() + # @speciesData.set_always_use_generated_sprite(false) + # return + # # new_name_without_ext = File.basename(old_main_sprite, ".png") + # # new_name_without_letter=new_name_without_ext.chop + # # File.rename(new_main_sprite, Settings::CUSTOM_BATTLERS_FOLDER+new_name_without_letter + ".png") + # end + # + # if new_main_sprite.start_with?(Settings::BATTLERS_FOLDER) + # @speciesData.set_always_use_generated_sprite(true) + # return + # # new_name_without_ext = File.basename(old_main_sprite, ".png") + # # File.rename(old_main_sprite, Settings::CUSTOM_BATTLERS_FOLDER+new_name_without_ext+"x" + ".png")x + # # return + # end + # File.rename(new_main_sprite, new_main_sprite + "temp") + # File.rename(old_main_sprite, new_main_sprite) + # File.rename(new_main_sprite + "temp", old_main_sprite) + # rescue + # pbMessage("There was an error while swapping the sprites. Please save and restart the game as soon as possible.") + # end + # end + # def main_sprite_is_non_custom() + # speciesData = getSpecies(@species) + # return speciesData.always_use_generated || @available.size <= 1 + # end end - class PokemonGlobalMetadata attr_accessor :alt_sprite_substitutions + def initialize @alt_sprite_substitutions = {} end end -def set_alt_sprite_substitution(original_sprite_name,selected_alt) - if ! $PokemonGlobal.alt_sprite_substitutions +def set_alt_sprite_substitution(original_sprite_name, selected_alt) + if !$PokemonGlobal.alt_sprite_substitutions $PokemonGlobal.alt_sprite_substitutions = {} end - $PokemonGlobal.alt_sprite_substitutions[original_sprite_name] = selected_alt - p $PokemonGlobal.alt_sprite_substitutions end diff --git a/Data/Skills.rxdata b/Data/Skills.rxdata index 61cba7ea2..a45219f5e 100644 Binary files a/Data/Skills.rxdata and b/Data/Skills.rxdata differ diff --git a/Data/States.rxdata b/Data/States.rxdata index 0f9b4ae5d..868d49e59 100644 Binary files a/Data/States.rxdata and b/Data/States.rxdata differ diff --git a/Data/System.rxdata b/Data/System.rxdata index 68f7d36cb..27cf05db3 100644 Binary files a/Data/System.rxdata and b/Data/System.rxdata differ diff --git a/Data/Tilesets.rxdata b/Data/Tilesets.rxdata index 0ce401add..b5372acec 100644 Binary files a/Data/Tilesets.rxdata and b/Data/Tilesets.rxdata differ diff --git a/Data/Weapons.rxdata b/Data/Weapons.rxdata index d9bd35260..c7ea19a7a 100644 Binary files a/Data/Weapons.rxdata and b/Data/Weapons.rxdata differ