Alt sprite credits

This commit is contained in:
infinitefusion
2023-05-07 17:26:01 -04:00
parent f9c02bf8ab
commit aa1199f6e2
18 changed files with 124 additions and 69 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -461,6 +461,8 @@ def getDexNumFromFilename(filename)
return (body * NB_POKEMON) + head return (body * NB_POKEMON) + head
end end
# def getCustomSpeciesList() # def getCustomSpeciesList()
# filesList = Dir["./Graphics/CustomBattlers/*"] # filesList = Dir["./Graphics/CustomBattlers/*"]
# maxDexNumber = (NB_POKEMON * NB_POKEMON) + NB_POKEMON # maxDexNumber = (NB_POKEMON * NB_POKEMON) + NB_POKEMON

View File

@@ -689,7 +689,9 @@ class PokemonFusionScene
oldspeciesname = GameData::Species.get(@pokemon1.species).real_name oldspeciesname = GameData::Species.get(@pokemon1.species).real_name
overlay = BitmapSprite.new(Graphics.width, Graphics.height, @viewport).bitmap 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"], Kernel.pbMessageDisplay(@sprites["msgwindow"],
_INTL("\\se[]Congratulations! Your Pokémon were fused into {2}!\\wt[80]", @pokemon1.name, newspeciesname)) _INTL("\\se[]Congratulations! Your Pokémon were fused into {2}!\\wt[80]", @pokemon1.name, newspeciesname))
@@ -767,10 +769,12 @@ class PokemonFusionScene
end end
end end
def drawSpriteCredits(filename,overlay) def drawSpriteCredits(filename,path,overlay)
return if path.start_with?(Settings::BATTLERS_FOLDER)
x= Graphics.width/2 x= Graphics.width/2
y=240 y=240
spritename = File.basename(filename,'.*') spritename = File.basename(filename,'.*')
discord_name = getSpriteCredits(spritename) discord_name = getSpriteCredits(spritename)
return if !discord_name return if !discord_name

View File

@@ -200,7 +200,17 @@ def get_unfused_sprite_path(dex_number)
return lightmode_path return lightmode_path
end end
def alt_sprites_substitutions_available
return $PokemonGlobal && $PokemonGlobal.alt_sprite_substitutions
end
def get_fusion_sprite_path(head_id,body_id) 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 #Try local custom sprite
filename = sprintf("%s.%s.png", head_id, body_id) filename = sprintf("%s.%s.png", head_id, body_id)
local_custom_path = Settings::CUSTOM_BATTLERS_FOLDER_INDEXED + head_id.to_s + "/" +filename local_custom_path = Settings::CUSTOM_BATTLERS_FOLDER_INDEXED + head_id.to_s + "/" +filename

View File

@@ -113,6 +113,8 @@ def getDexNumberForSpecies(species)
return dexNum return dexNum
end end
def getPokemon(dexNum) def getPokemon(dexNum)
return GameData::Species.get(dexNum) return GameData::Species.get(dexNum)
end end
@@ -121,6 +123,11 @@ def getSpecies(dexnum)
return getPokemon(dexnum) return getPokemon(dexnum)
end 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 #shortcut for using in game events because of script characters limit
def dexNum(species) def dexNum(species)
return getDexNumberForSpecies(species) return getDexNumberForSpecies(species)
@@ -407,7 +414,9 @@ def customSpriteExists(species)
return download_custom_sprite(head, body) != nil return download_custom_sprite(head, body) != nil
end end
def checkIfCustomSpriteExistsByPath(path)
return true if pbResolveBitmap(path) != nil
end
def customSpriteExistsBodyHead(body, head) def customSpriteExistsBodyHead(body, head)

View File

@@ -396,6 +396,7 @@ class PokemonLoadScreen
@scene.pbEndScene @scene.pbEndScene
Game.load(@save_data) Game.load(@save_data)
$game_switches[SWITCH_V5_1] = true $game_switches[SWITCH_V5_1] = true
$PokemonGlobal.alt_sprite_substitutions = {} if !$PokemonGlobal.alt_sprite_substitutions
return return
when cmd_new_game when cmd_new_game
@scene.pbEndScene @scene.pbEndScene

View File

@@ -2,11 +2,11 @@ class PokemonPokedexInfo_Scene
#todo add indicator to show which one is the main sprite - #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 # 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 Y_POSITION_BIG = 60
X_POSITION_PREVIOUS = -30#20 X_POSITION_PREVIOUS = -30 #20
X_POSITION_SELECTED = 105 X_POSITION_SELECTED = 105
X_POSITION_NEXT = 340#380 X_POSITION_NEXT = 340 #380
Y_POSITION_BG_SMALL = 70 Y_POSITION_BG_SMALL = 70
Y_POSITION_BG_BIG = 93 Y_POSITION_BG_BIG = 93
@@ -66,15 +66,15 @@ class PokemonPokedexInfo_Scene
@sprites["previousSprite"].x = X_POSITION_PREVIOUS @sprites["previousSprite"].x = X_POSITION_PREVIOUS
@sprites["previousSprite"].y = Y_POSITION_SMALL @sprites["previousSprite"].y = Y_POSITION_SMALL
@sprites["previousSprite"].visible = false @sprites["previousSprite"].visible = false
@sprites["previousSprite"].zoom_x = Settings::FRONTSPRITE_SCALE#/2 @sprites["previousSprite"].zoom_x = Settings::FRONTSPRITE_SCALE #/2
@sprites["previousSprite"].zoom_y = Settings::FRONTSPRITE_SCALE#/2 @sprites["previousSprite"].zoom_y = Settings::FRONTSPRITE_SCALE #/2
@sprites["nextSprite"] = IconSprite.new(0, 0, @viewport) @sprites["nextSprite"] = IconSprite.new(0, 0, @viewport)
@sprites["nextSprite"].x = X_POSITION_NEXT @sprites["nextSprite"].x = X_POSITION_NEXT
@sprites["nextSprite"].y = Y_POSITION_SMALL @sprites["nextSprite"].y = Y_POSITION_SMALL
@sprites["nextSprite"].visible = false @sprites["nextSprite"].visible = false
@sprites["nextSprite"].zoom_x = Settings::FRONTSPRITE_SCALE#/2 @sprites["nextSprite"].zoom_x = Settings::FRONTSPRITE_SCALE #/2
@sprites["nextSprite"].zoom_y = Settings::FRONTSPRITE_SCALE#/2 @sprites["nextSprite"].zoom_y = Settings::FRONTSPRITE_SCALE #/2
@sprites["selectedSprite"].z = 9999999 @sprites["selectedSprite"].z = 9999999
@sprites["previousSprite"].z = 9999999 @sprites["previousSprite"].z = 9999999
@@ -94,15 +94,15 @@ class PokemonPokedexInfo_Scene
end end
def pbGetAvailableForms def pbGetAvailableForms
body_id = getBodyID(@species) body_id = getBodyID(@species)
head_id = getHeadID(@species,body_id) head_id = getHeadID(@species, body_id)
download_custom_sprite(head_id,body_id) download_custom_sprite(head_id, body_id)
download_autogen_sprite(head_id,body_id) download_autogen_sprite(head_id, body_id)
download_alt_sprites(head_id,body_id) download_alt_sprites(head_id, body_id)
return PokedexUtils.new.pbGetAvailableAlts(@species) return PokedexUtils.new.pbGetAvailableAlts(@species)
end end
def hide_all_selected_windows def hide_all_selected_windows
@sprites["bgSelected_previous"].visible = false if @sprites["bgSelected_previous"] @sprites["bgSelected_previous"].visible = false if @sprites["bgSelected_previous"]
@sprites["bgSelected_center"].visible = false if @sprites["bgSelected_center"] @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["previousSprite"].setBitmap(@available[previousIndex]) if previousIndex != nextIndex
@sprites["selectedSprite"].setBitmap(@available[@selected_index]) @sprites["selectedSprite"].setBitmap(@available[@selected_index])
@sprites["nextSprite"].setBitmap(@available[nextIndex]) @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 update_selected
end end
def showSpriteCredits(filename) def showSpriteCredits(filename,generated_sprite=false)
@creditsOverlay.dispose @creditsOverlay.dispose
x= Graphics.width/2 -60 x = Graphics.width / 2 - 75
y=Graphics.height - 60 y = Graphics.height - 60
spritename = File.basename(filename,'.*') spritename = File.basename(filename, '.*')
discord_name = getSpriteCredits(spritename)
return if !discord_name
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_base_color = Color.new(248, 248, 248)
label_shadow_color = Color.new(104, 104, 104) label_shadow_color = Color.new(104, 104, 104)
@@ -157,7 +166,6 @@ class PokemonPokedexInfo_Scene
pbDrawTextPositions(@creditsOverlay, textpos) pbDrawTextPositions(@creditsOverlay, textpos)
end end
def pbChooseForm def pbChooseForm
loop do loop do
@sprites["uparrow"].visible = true @sprites["uparrow"].visible = true
@@ -194,17 +202,38 @@ class PokemonPokedexInfo_Scene
@sprites["downarrow"].visible = false @sprites["downarrow"].visible = false
end 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) def is_main_sprite(index = nil)
return false if !@available if !index
if index == nil
index = @selected_index index = @selected_index
end end
return true if @available.size <= 1
if @speciesData.always_use_generated
selected_sprite = @available[index] selected_sprite = @available[index]
return selected_sprite.start_with?(Settings::BATTLERS_FOLDER) species_id = getDexNumberForSpecies(@species)
if $PokemonGlobal.alt_sprite_substitutions[species_id]
return $PokemonGlobal.alt_sprite_substitutions[species_id] == selected_sprite
end 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 end
def select_sprite def select_sprite
@@ -220,59 +249,59 @@ class PokemonPokedexInfo_Scene
end end
def swap_main_sprite def swap_main_sprite
begin
old_main_sprite = @available[0] old_main_sprite = @available[0]
new_main_sprite = @available[@selected_index] new_main_sprite = @available[@selected_index]
species_number = dexNum(@species)
if main_sprite_is_non_custom() set_alt_sprite_substitution(species_number, new_main_sprite)
@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 end
if new_main_sprite.start_with?(Settings::BATTLERS_FOLDER)
@speciesData.set_always_use_generated_sprite(true)
return # def swap_main_sprite
# new_name_without_ext = File.basename(old_main_sprite, ".png") # begin
# File.rename(old_main_sprite, Settings::CUSTOM_BATTLERS_FOLDER+new_name_without_ext+"x" + ".png")x # 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 # return
end # # new_name_without_ext = File.basename(old_main_sprite, ".png")
File.rename(new_main_sprite, new_main_sprite + "temp") # # new_name_without_letter=new_name_without_ext.chop
File.rename(old_main_sprite, new_main_sprite) # # File.rename(new_main_sprite, Settings::CUSTOM_BATTLERS_FOLDER+new_name_without_letter + ".png")
File.rename(new_main_sprite + "temp", old_main_sprite) # end
rescue #
pbMessage("There was an error while swapping the sprites. Please save and restart the game as soon as possible.") # if new_main_sprite.start_with?(Settings::BATTLERS_FOLDER)
end # @speciesData.set_always_use_generated_sprite(true)
end # return
# # new_name_without_ext = File.basename(old_main_sprite, ".png")
def main_sprite_is_non_custom() # # File.rename(old_main_sprite, Settings::CUSTOM_BATTLERS_FOLDER+new_name_without_ext+"x" + ".png")x
speciesData = getSpecies(@species) # # return
return speciesData.always_use_generated || @available.size <= 1 # end
#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 # File.rename(new_main_sprite, new_main_sprite + "temp")
# speciesData.set_always_use_generated_sprite(true) # File.rename(old_main_sprite, new_main_sprite)
# return POSSIBLE_ALTS.include?(File.basename(old_main_sprite, ".png")[-1]) # File.rename(new_main_sprite + "temp", old_main_sprite)
end # 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 end
class PokemonGlobalMetadata class PokemonGlobalMetadata
attr_accessor :alt_sprite_substitutions attr_accessor :alt_sprite_substitutions
def initialize def initialize
@alt_sprite_substitutions = {} @alt_sprite_substitutions = {}
end end
end end
def set_alt_sprite_substitution(original_sprite_name,selected_alt) def set_alt_sprite_substitution(original_sprite_name, selected_alt)
if ! $PokemonGlobal.alt_sprite_substitutions if !$PokemonGlobal.alt_sprite_substitutions
$PokemonGlobal.alt_sprite_substitutions = {} $PokemonGlobal.alt_sprite_substitutions = {}
end end
$PokemonGlobal.alt_sprite_substitutions[original_sprite_name] = selected_alt $PokemonGlobal.alt_sprite_substitutions[original_sprite_name] = selected_alt
p $PokemonGlobal.alt_sprite_substitutions
end end

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.