double fusion preview screen

This commit is contained in:
infinitefusion
2022-11-05 19:53:14 -04:00
parent 5bcb63f57a
commit e59254af3c
9 changed files with 252 additions and 59 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -2191,6 +2191,11 @@ class PokemonStorageScreen
@heldpkmn = nil @heldpkmn = nil
end end
def deleteSelectedPokemon(heldpoke, selected)
pbSwap(selected)
deleteHeldPokemon(heldpoke, selected)
end
def cancelFusion def cancelFusion
@splicerItem = nil @splicerItem = nil
@scene.setFusing(false) @scene.setFusing(false)
@@ -2244,11 +2249,27 @@ class PokemonStorageScreen
end end
isSuperSplicer = isSuperSplicer?(@fusionItem) isSuperSplicer = isSuperSplicer?(@fusionItem)
if pbFuse(pokemon, heldpoke, isSuperSplicer)
selectedHead =selectFusion(pokemon, heldpoke, isSuperSplicer)
if selectedHead == -1
return false
end
selectedBase = selectedHead == pokemon ? heldpoke : pokemon
firstOptionSelected= selectedBase == pokemon
if (Kernel.pbConfirmMessage(_INTL("Fuse the two Pokémon?")))
pbFuse(selectedHead, selectedBase, isSuperSplicer)
if canDeleteItem(@fusionItem) if canDeleteItem(@fusionItem)
$PokemonBag.pbDeleteItem(@fusionItem) $PokemonBag.pbDeleteItem(@fusionItem)
end end
if firstOptionSelected
deleteSelectedPokemon(heldpoke, selected)
else
deleteHeldPokemon(heldpoke, selected) deleteHeldPokemon(heldpoke, selected)
end
@scene.setFusing(false) @scene.setFusing(false)
@fusionMode = false @fusionMode = false
@scene.sprites["box"].enableFusions() @scene.sprites["box"].enableFusions()

View File

@@ -1,29 +1,122 @@
class DoublePreviewScreen class DoublePreviewScreen
def initialize(poke1,poke2, usingSuperSplicers=false) SELECT_ARROW_X_LEFT= 100
@typewindows=[] SELECT_ARROW_X_RIGHT= 350
@picture1=nil SELECT_ARROW_X_CANCEL= 230
@picture2=nil
SELECT_ARROW_Y_SELECT= 0
SELECT_ARROW_Y_CANCEL= 210
ARROW_GRAPHICS_PATH = "Graphics/Pictures/selHand"
CANCEL_BUTTON_PATH = "Graphics/Pictures/previewScreen_Cancel"
BACKGROUND_PATH = "Graphics/Pictures/shadeFull_"
CANCEL_BUTTON_X= 140
CANCEL_BUTTON_Y= 260
def initialize(species_left, species_right)
@species_left = species_left
@species_right = species_right
@typewindows = []
@picture1 = nil
@picture2 = nil
@draw_types = nil @draw_types = nil
@draw_level = nil @draw_level = nil
@selected = 0
@last_post=0
@sprites = {}
initializeBackground
initializeSelectArrow
initializeCancelButton
end end
def draw_window(dexNumber ,level, x, y) def getBackgroundPicture
body_pokemon = getBodyID(dexNumber) return BACKGROUND_PATH
head_pokemon = getHeadID(dexNumber,body_pokemon) end
picturePath = getPicturePath(body_pokemon,head_pokemon)
def getSelection
selected = startSelection
@sprites["cancel"].visible=false
#@sprites["arrow"].visible=false
#todo: il y a un fuck en quelque part.... en attendant ca marche inversé ici
return @species_left if selected == 0
return @species_right if selected == 1
return -1
end
def startSelection
loop do
Graphics.update
Input.update
updateSelection
if Input.trigger?(Input::USE)
return @selected
end
if Input.trigger?(Input::BACK)
return -1
end
end
end
def updateSelection
currentSelected = @selected
updateSelectionIndex
if @selected != currentSelected
updateSelectionGraphics
end
end
def updateSelectionIndex
if Input.trigger?(Input::LEFT)
@selected = 0
elsif Input.trigger?(Input::RIGHT)
@selected = 1
end
if @selected == -1
if Input.trigger?(Input::UP)
@selected = @last_post
end
else
if Input.trigger?(Input::DOWN)
@last_post = @selected
@selected = -1
end
end
end
def updateSelectionGraphics
if @selected == 0
@sprites["arrow"].x = SELECT_ARROW_X_LEFT
@sprites["arrow"].y = SELECT_ARROW_Y_SELECT
elsif @selected == 1
@sprites["arrow"].x = SELECT_ARROW_X_RIGHT
@sprites["arrow"].y = SELECT_ARROW_Y_SELECT
else
@sprites["arrow"].x = SELECT_ARROW_X_CANCEL
@sprites["arrow"].y = SELECT_ARROW_Y_CANCEL
end
pbUpdateSpriteHash(@sprites)
end
def draw_window(dexNumber, level, x, y)
body_pokemon = getBodyID(dexNumber)
head_pokemon = getHeadID(dexNumber, body_pokemon)
picturePath = getPicturePath(head_pokemon, body_pokemon)
bitmap = AnimatedBitmap.new(picturePath) bitmap = AnimatedBitmap.new(picturePath)
bitmap.scale_bitmap(Settings::FRONTSPRITE_SCALE) bitmap.scale_bitmap(Settings::FRONTSPRITE_SCALE)
hasCustom = picturePath.include?("CustomBattlers") hasCustom = picturePath.include?("CustomBattlers")
previewwindow = PictureWindow.new(bitmap) previewwindow = PictureWindow.new(bitmap)
previewwindow.x = x previewwindow.x = x
previewwindow.y = y previewwindow.y = y
previewwindow.z = 1000000 previewwindow.z = 100000
drawFusionInformation(dexNumber,level, x) drawFusionInformation(dexNumber, level, x)
if !$Trainer.seen?(dexNumber) if !$Trainer.seen?(dexNumber)
if hasCustom if hasCustom
@@ -35,20 +128,47 @@ class DoublePreviewScreen
return previewwindow return previewwindow
end end
def getPicturePath(body_pokemon, head_pokemon)
pathCustom = _INTL("Graphics/CustomBattlers/{1}.{2}.png", body_pokemon, head_pokemon) def getPicturePath(head_pokemon, body_pokemon)
pathCustom = _INTL("Graphics/CustomBattlers/{1}.{2}.png", head_pokemon, body_pokemon)
if (pbResolveBitmap(pathCustom)) if (pbResolveBitmap(pathCustom))
picturePath = pathCustom picturePath = pathCustom
else else
picturePath = _INTL("Graphics/Battlers/{1}/{1}.{2}.png", body_pokemon, head_pokemon) picturePath = _INTL("Graphics/Battlers/{1}/{1}.{2}.png",head_pokemon , body_pokemon)
end end
return picturePath return picturePath
end end
def drawFusionInformation(fusedDexNum, level, x=0) def drawFusionInformation(fusedDexNum, level, x = 0)
viewport = Viewport.new(0, 0, Graphics.width, Graphics.height) viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
@typewindows << drawPokemonType(fusedDexNum,viewport, x+40,220) if @draw_types @typewindows << drawPokemonType(fusedDexNum, viewport, x + 40, 220) if @draw_types
drawFusionPreviewText(viewport, "Lv. " + level.to_s, x+60, 40,) if @draw_level drawFusionPreviewText(viewport, "Lv. " + level.to_s, x + 60, 40,) if @draw_level
end
def initializeSelectArrow
@sprites["arrow"] = IconSprite.new(0, 0, @viewport)
@sprites["arrow"].setBitmap(ARROW_GRAPHICS_PATH)
@sprites["arrow"].x = SELECT_ARROW_X_LEFT
@sprites["arrow"].y = SELECT_ARROW_Y_SELECT
@sprites["arrow"].z = 100001
end
def initializeCancelButton()
@sprites["cancel"] = IconSprite.new(0, 0, @viewport)
@sprites["cancel"].setBitmap(CANCEL_BUTTON_PATH)
@sprites["cancel"].x = CANCEL_BUTTON_X
@sprites["cancel"].y = CANCEL_BUTTON_Y
@sprites["cancel"].z = 100000
end
def initializeBackground()
@sprites["background"] = IconSprite.new(0, 0, @viewport)
@sprites["background"].setBitmap(getBackgroundPicture)
@sprites["background"].x = 0
@sprites["background"].y = 0
@sprites["background"].z = 99999
end end
def drawFusionPreviewText(viewport, text, x, y) def drawFusionPreviewText(viewport, text, x, y)
@@ -65,6 +185,8 @@ class DoublePreviewScreen
for typeWindow in @typewindows for typeWindow in @typewindows
typeWindow.dispose typeWindow.dispose
end end
pbDisposeSpriteHash(@sprites)
end end
def drawPokemonType(pokemon_id, viewport, x_pos = 192, y_pos = 264) def drawPokemonType(pokemon_id, viewport, x_pos = 192, y_pos = 264)
@@ -87,5 +209,4 @@ class DoublePreviewScreen
return viewport return viewport
end end
end end

View File

@@ -650,7 +650,7 @@ class PokemonFusionScene
# Opens the fusion screen # Opens the fusion screen
def pbFusionScreen(cancancel = false, superSplicer = false) def pbFusionScreen(cancancel = false, superSplicer = false, firstOptionSelected=false)
metaplayer1 = SpriteMetafilePlayer.new(@metafile1, @sprites["rsprite1"]) metaplayer1 = SpriteMetafilePlayer.new(@metafile1, @sprites["rsprite1"])
metaplayer2 = SpriteMetafilePlayer.new(@metafile2, @sprites["rsprite2"]) metaplayer2 = SpriteMetafilePlayer.new(@metafile2, @sprites["rsprite2"])
metaplayer3 = SpriteMetafilePlayer.new(@metafile3, @sprites["rsprite3"]) metaplayer3 = SpriteMetafilePlayer.new(@metafile3, @sprites["rsprite3"])
@@ -739,7 +739,7 @@ class PokemonFusionScene
#@pokemon1.ability = pbChooseAbility(@pokemon1, hiddenAbility1, hiddenAbility2) #@pokemon1.ability = pbChooseAbility(@pokemon1, hiddenAbility1, hiddenAbility2)
pbChooseAbility(@pokemon1, hiddenAbility1, hiddenAbility2) pbChooseAbility(@pokemon1, hiddenAbility1, hiddenAbility2)
setFusionMoves(@pokemon1, @pokemon2) if !noMoves setFusionMoves(@pokemon1, @pokemon2, firstOptionSelected) if !noMoves
# if superSplicer # if superSplicer
# @pokemon1.nature = pbChooseNature(@pokemon1.nature, @pokemon2.nature) # @pokemon1.nature = pbChooseNature(@pokemon1.nature, @pokemon2.nature)
@@ -792,7 +792,7 @@ def setAbilityAndNature(abilitiesList, naturesList)
end end
def setFusionMoves(fusedPoke, poke2) def setFusionMoves(fusedPoke, poke2,selected2ndOption=false)
#NEW METHOD (not ready) #NEW METHOD (not ready)
# clearUIForMoves # clearUIForMoves
@@ -805,12 +805,25 @@ def setFusionMoves(fusedPoke, poke2)
# #
# fusedPoke.moves=moves # fusedPoke.moves=moves
bodySpecies = getBodyID(fusedPoke) bodySpecies = getBodyID(fusedPoke)
headSpecies = getHeadID(fusedPoke,bodySpecies)
bodySpeciesName = GameData::Species.get(bodySpecies).real_name bodySpeciesName = GameData::Species.get(bodySpecies).real_name
choice = Kernel.pbMessage("What to do with the moveset?", [_INTL("Learn moves"), _INTL("Keep {1}'s moveset", bodySpeciesName), _INTL("Keep {1}'s moveset", poke2.name)], 0) headSpeciesName = GameData::Species.get(headSpecies).real_name
choice = Kernel.pbMessage("What to do with the moveset?", [_INTL("Learn moves"), _INTL("Keep {1}'s moveset", bodySpeciesName), _INTL("Keep {1}'s moveset", headSpeciesName)], 0)
if choice == 1 if choice == 1
if selected2ndOption
fusedPoke.moves = poke2.moves
else
return
end
return return
elsif choice == 2 elsif choice == 2
if selected2ndOption
return
else
fusedPoke.moves = poke2.moves fusedPoke.moves = poke2.moves
end
return return
else else
#Learn moves #Learn moves

View File

@@ -1247,6 +1247,15 @@ ItemHandlers::UseOnPokemon.add(:DNASPLICERS, proc { |item, pokemon, scene|
next false next false
}) })
def getPokemonPositionInParty(pokemon)
for i in 0..$Trainer.party.length
if $Trainer.party[i] == pokemon
return i
end
end
return -1
end
def pbDNASplicing(pokemon, scene, supersplicers = false, superSplicer = false) def pbDNASplicing(pokemon, scene, supersplicers = false, superSplicer = false)
playingBGM = $game_system.getPlayingBGM playingBGM = $game_system.getPlayingBGM
dexNumber = pokemon.species_data.id_number dexNumber = pokemon.species_data.id_number
@@ -1278,12 +1287,30 @@ def pbDNASplicing(pokemon, scene, supersplicers = false, superSplicer = false)
scene.pbDisplay(_INTL("A fainted Pokémon cannot be fused!")) scene.pbDisplay(_INTL("A fainted Pokémon cannot be fused!"))
return false return false
end end
if (pbFuse(pokemon, poke2, superSplicer))
selectedHead =selectFusion(pokemon, poke2, supersplicers)
if selectedHead == -1
return false
end
selectedBase = selectedHead == pokemon ? poke2 : pokemon
firstOptionSelected= selectedHead == pokemon
if !firstOptionSelected
chosen = getPokemonPositionInParty(pokemon)
if chosen == -1
scene.pbDisplay(_INTL("There was an error..."))
return false
end
end
if (Kernel.pbConfirmMessage(_INTL("Fuse the two Pokémon?")))
pbFuse(selectedHead, selectedBase, superSplicer)
pbRemovePokemonAt(chosen) pbRemovePokemonAt(chosen)
scene.pbHardRefresh scene.pbHardRefresh
pbBGMPlay(playingBGM) pbBGMPlay(playingBGM)
return true return true
end end
elsif pokemon == poke2 elsif pokemon == poke2
scene.pbDisplay(_INTL("{1} can't be fused with itself!", pokemon.name)) scene.pbDisplay(_INTL("{1} can't be fused with itself!", pokemon.name))
return false return false
@@ -1302,6 +1329,18 @@ def pbDNASplicing(pokemon, scene, supersplicers = false, superSplicer = false)
end end
def selectFusion(pokemon, poke2, supersplicers = false)
selectorWindow = FusionPreviewScreen.new(poke2, pokemon, supersplicers)#PictureWindow.new(picturePath)
selectedHead = selectorWindow.getSelection
selectorWindow.dispose
return selectedHead
end
# firstOptionSelected= selectedHead == pokemon
# selectedBody = selectedHead == pokemon ? poke2 : pokemon
# newid = (selectedBody.species_data.id_number) * NB_POKEMON + selectedHead.species_data.id_number
# def pbFuse(pokemon, poke2, supersplicers = false) # def pbFuse(pokemon, poke2, supersplicers = false)
# newid = (pokemon.species_data.id_number) * NB_POKEMON + poke2.species_data.id_number # newid = (pokemon.species_data.id_number) * NB_POKEMON + poke2.species_data.id_number
# previewwindow = FusionPreviewScreen.new(pokemon, poke2)#PictureWindow.new(picturePath) # previewwindow = FusionPreviewScreen.new(pokemon, poke2)#PictureWindow.new(picturePath)
@@ -1326,35 +1365,34 @@ end
def pbFuse(pokemon, poke2, supersplicers = false) def pbFuse(pokemon, poke2, supersplicers = false)
newid = (pokemon.species_data.id_number) * NB_POKEMON + poke2.species_data.id_number newid = (pokemon.species_data.id_number) * NB_POKEMON + poke2.species_data.id_number
pathCustom = _INTL("Graphics/CustomBattlers/{1}.{2}.png", poke2.species_data.id_number, pokemon.species_data.id_number) # pathCustom = _INTL("Graphics/CustomBattlers/{1}.{2}.png", poke2.species_data.id_number, pokemon.species_data.id_number)
hasCustom = false # hasCustom = false
if (pbResolveBitmap(pathCustom)) # if (pbResolveBitmap(pathCustom))
picturePath = pathCustom # picturePath = pathCustom
hasCustom = true # hasCustom = true
else # else
picturePath = _INTL("Graphics/Battlers/{1}/{1}.{2}.png", poke2.species_data.id_number, pokemon.species_data.id_number) # picturePath = _INTL("Graphics/Battlers/{1}/{1}.{2}.png", poke2.species_data.id_number, pokemon.species_data.id_number)
end # end
# previewwindow = PictureWindow.new(picturePath)
#
# new_level = calculateFusedPokemonLevel(pokemon.level, poke2.level, supersplicers)
# typeWindow = drawPokemonType(newid)
# drawFusionPreviewText(typeWindow, "Lv. " + new_level.to_s, 232, 0,)
#
# if !$Trainer.seen?(newid)
# if hasCustom
# previewwindow.picture.pbSetColor(150, 255, 150, 200)
# else
# previewwindow.picture.pbSetColor(255, 255, 255, 200)
# end
# end
# previewwindow.x = (Graphics.width / 2) - (previewwindow.width / 2)
# previewwindow.y = ((Graphics.height - 96) / 2) - (previewwindow.height / 2)
# previewwindow.z = 1000000
previewwindow = PictureWindow.new(picturePath) #if (Kernel.pbConfirmMessage(_INTL("Fuse the two Pokémon?", newid)))
# previewwindow.dispose
new_level = calculateFusedPokemonLevel(pokemon.level, poke2.level, supersplicers) # typeWindow.dispose
typeWindow = drawPokemonType(newid)
drawFusionPreviewText(typeWindow, "Lv. " + new_level.to_s, 232, 0,)
if !$Trainer.seen?(newid)
if hasCustom
previewwindow.picture.pbSetColor(150, 255, 150, 200)
else
previewwindow.picture.pbSetColor(255, 255, 255, 200)
end
end
previewwindow.x = (Graphics.width / 2) - (previewwindow.width / 2)
previewwindow.y = ((Graphics.height - 96) / 2) - (previewwindow.height / 2)
previewwindow.z = 1000000
if (Kernel.pbConfirmMessage(_INTL("Fuse the two Pokémon?", newid)))
previewwindow.dispose
typeWindow.dispose
fus = PokemonFusionScene.new fus = PokemonFusionScene.new
if (fus.pbStartScreen(pokemon, poke2, newid)) if (fus.pbStartScreen(pokemon, poke2, newid))
returnItemsToBag(pokemon, poke2) returnItemsToBag(pokemon, poke2)
@@ -1364,11 +1402,11 @@ def pbFuse(pokemon, poke2, supersplicers = false)
return true return true
end end
else # else
previewwindow.dispose # # previewwindow.dispose
typeWindow.dispose # # typeWindow.dispose
return false # return false
end # end
end end

Binary file not shown.