pokedex page for switching between sprites alts

This commit is contained in:
infinitefusion
2022-06-16 20:22:30 -04:00
parent c15c478e6c
commit 5b6ed30d5a
16 changed files with 95 additions and 51 deletions

View File

@@ -1,16 +1,18 @@
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
X_POSITION_SMALL = 175
X_POSITION_BIG = 125
Y_POSITION_PREVIOUS=0
Y_POSITION_SELECTED=50
Y_POSITION_NEXT=200
Y_POSITION_SMALL = 80
Y_POSITION_BIG = 90
X_POSITION_PREVIOUS=-20
X_POSITION_SELECTED=120
X_POSITION_NEXT=340
def drawPageForms
@selected_index=0
#@selected_index=0
@sprites["background"].setBitmap(_INTL("Graphics/Pictures/Pokedex/bg_forms"))
overlay = @sprites["overlay"].bitmap
@@ -18,28 +20,31 @@ class PokemonPokedexInfo_Scene
shadow = Color.new(168, 184, 184)
#alts_list= pbGetAvailableAlts
initializeSpritesPage(@available)
@selected_index=0
update_displayed
end
def initializeSpritesPage(altsList)
@selected_index=0
@sprites["selectedSprite"] = IconSprite.new(0,0,@viewport)
@sprites["selectedSprite"].x = X_POSITION_BIG
@sprites["selectedSprite"].y = Y_POSITION_SELECTED
@sprites["selectedSprite"].x = X_POSITION_SELECTED
@sprites["selectedSprite"].y = Y_POSITION_BIG
@sprites["selectedSprite"].z = 999999
@sprites["selectedSprite"].visible=true
@sprites["selectedSprite"].visible=false
@sprites["selectedSprite"].zoom_x = 1
@sprites["selectedSprite"].zoom_y = 1
@sprites["previousSprite"] = IconSprite.new(0,0,@viewport)
@sprites["previousSprite"].x = X_POSITION_SMALL
@sprites["previousSprite"].y = Y_POSITION_PREVIOUS
@sprites["previousSprite"].x = X_POSITION_PREVIOUS
@sprites["previousSprite"].y = Y_POSITION_SMALL
@sprites["previousSprite"].visible=false
@sprites["previousSprite"].zoom_x = Settings::FRONTSPRITE_SCALE
@sprites["previousSprite"].zoom_y = Settings::FRONTSPRITE_SCALE
@sprites["nextSprite"] = IconSprite.new(0,0,@viewport)
@sprites["nextSprite"].x = X_POSITION_SMALL
@sprites["nextSprite"].y = Y_POSITION_NEXT
@sprites["nextSprite"].x = X_POSITION_NEXT
@sprites["nextSprite"].y = Y_POSITION_SMALL
@sprites["nextSprite"].visible=false
@sprites["nextSprite"].zoom_x = Settings::FRONTSPRITE_SCALE
@sprites["nextSprite"].zoom_y = Settings::FRONTSPRITE_SCALE
@@ -50,6 +55,7 @@ class PokemonPokedexInfo_Scene
@sprites["selectedSprite"].setBitmap(altsList[@selected_index])
if altsList.size >=2
@sprites["nextSprite"].setBitmap(altsList[@selected_index+1])
@sprites["nextSprite"].visible=true
@@ -61,8 +67,7 @@ class PokemonPokedexInfo_Scene
end
end
POSSIBLE_ALTS=["a","b","c","d","e","f","g","h","i","j","k", 'l',"m",
"n","o","p", "q", "r","s","t","u","v","w","x","y","z"]
POSSIBLE_ALTS= %w[a b c d e f g h i j k x]
def pbGetAvailableForms
return pbGetAvailableAlts
@@ -78,8 +83,10 @@ class PokemonPokedexInfo_Scene
if previousIndex <0
previousIndex = @available.size-1
end
@sprites["previousSprite"].visible=false if @available.size<=2
@sprites["nextSprite"].visible=false if @available.size<=1
@sprites["previousSprite"].setBitmap(@available[previousIndex])
@sprites["previousSprite"].setBitmap(@available[previousIndex]) if previousIndex != nextIndex
@sprites["selectedSprite"].setBitmap(@available[@selected_index])
@sprites["nextSprite"].setBitmap(@available[nextIndex])
@@ -88,6 +95,12 @@ class PokemonPokedexInfo_Scene
def pbGetAvailableAlts
ret = []
return ret if !@species
dexNum =getDexNumberForSpecies(@species)
isFusion = dexNum > NB_POKEMON
if !isFusion
ret << Settings::BATTLERS_FOLDER+ dexNum.to_s + "/" + dexNum.to_s + ".png"
return ret
end
body_id = getBodyID(@species)
head_id=getHeadID(@species,body_id)
@@ -100,14 +113,14 @@ class PokemonPokedexInfo_Scene
altFilePath = Settings::CUSTOM_BATTLERS_FOLDER + baseFilename + alt_letter +".png"
if pbResolveBitmap(altFilePath)
ret << altFilePath
else
break #don't want to loop through each letter for nothing
end
}
ret << Settings::BATTLERS_FOLDER + head_id.to_s + "/" + baseFilename + ".png"
return ret
end
def pbChooseForm
loop do
@sprites["uparrow"].visible = true
@@ -115,14 +128,14 @@ class PokemonPokedexInfo_Scene
Graphics.update
Input.update
pbUpdate
if Input.trigger?(Input::UP)
if Input.trigger?(Input::LEFT)
pbPlayCursorSE
@selected_index -=1#(index+@available.length-1)%@available.length
if @selected_index < 0
@selected_index = @available.size-1
end
update_displayed
elsif Input.trigger?(Input::DOWN)
elsif Input.trigger?(Input::RIGHT)
pbPlayCursorSE
@selected_index +=1#= (index+1)%@available.length
if @selected_index > @available.size-1
@@ -135,6 +148,7 @@ class PokemonPokedexInfo_Scene
elsif Input.trigger?(Input::USE)
pbPlayDecisionSE
if select_sprite
@endscene=true
break
end
end
@@ -162,15 +176,33 @@ class PokemonPokedexInfo_Scene
end
def swap_main_sprite
#todo
# ajouter une mecanique pour si le user select un generated sprite a la place du custom
# sinon on rename directement les 2 fichiers
#
begin
old_main_sprite = @available[0]
new_main_sprite = @available[@selected_index]
if main_sprite_is_non_custom(old_main_sprite)
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)
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")
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
# code here
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
def main_sprite_is_non_custom(old_main_sprite)
return POSSIBLE_ALTS.include?(File.basename(old_main_sprite, ".png")[-1])
end
end