diff --git a/Data/Map079.rxdata b/Data/Map079.rxdata index 52be5cb48..59a4545e2 100644 Binary files a/Data/Map079.rxdata and b/Data/Map079.rxdata differ diff --git a/Data/Map300.rxdata b/Data/Map300.rxdata index e76bcc742..18eb56e6b 100644 Binary files a/Data/Map300.rxdata and b/Data/Map300.rxdata differ diff --git a/Data/MapInfos.rxdata b/Data/MapInfos.rxdata index aa448dbb8..d309086f6 100644 Binary files a/Data/MapInfos.rxdata and b/Data/MapInfos.rxdata differ diff --git a/Data/Scripts.rxdata b/Data/Scripts.rxdata index 954fa57f0..ac892743f 100644 Binary files a/Data/Scripts.rxdata and b/Data/Scripts.rxdata differ diff --git a/Data/Scripts/016_UI/017_UI_PokemonStorage.rb b/Data/Scripts/016_UI/017_UI_PokemonStorage.rb index a8ef08564..9368f3d14 100644 --- a/Data/Scripts/016_UI/017_UI_PokemonStorage.rb +++ b/Data/Scripts/016_UI/017_UI_PokemonStorage.rb @@ -2191,6 +2191,11 @@ class PokemonStorageScreen @heldpkmn = nil end + def deleteSelectedPokemon(heldpoke, selected) + pbSwap(selected) + deleteHeldPokemon(heldpoke, selected) + end + def cancelFusion @splicerItem = nil @scene.setFusing(false) @@ -2244,11 +2249,27 @@ class PokemonStorageScreen end 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) $PokemonBag.pbDeleteItem(@fusionItem) end - deleteHeldPokemon(heldpoke, selected) + if firstOptionSelected + deleteSelectedPokemon(heldpoke, selected) + else + deleteHeldPokemon(heldpoke, selected) + end + @scene.setFusing(false) @fusionMode = false @scene.sprites["box"].enableFusions() diff --git a/Data/Scripts/048_Fusion/DoublePreviewScreen.rb b/Data/Scripts/048_Fusion/DoublePreviewScreen.rb index a954b1986..565838133 100644 --- a/Data/Scripts/048_Fusion/DoublePreviewScreen.rb +++ b/Data/Scripts/048_Fusion/DoublePreviewScreen.rb @@ -1,29 +1,122 @@ class DoublePreviewScreen - def initialize(poke1,poke2, usingSuperSplicers=false) - @typewindows=[] - @picture1=nil - @picture2=nil + SELECT_ARROW_X_LEFT= 100 + SELECT_ARROW_X_RIGHT= 350 + SELECT_ARROW_X_CANCEL= 230 + + 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_level = nil + @selected = 0 + @last_post=0 + @sprites = {} + + initializeBackground + initializeSelectArrow + initializeCancelButton end - def draw_window(dexNumber ,level, x, y) - body_pokemon = getBodyID(dexNumber) - head_pokemon = getHeadID(dexNumber,body_pokemon) + def getBackgroundPicture + return BACKGROUND_PATH + 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.scale_bitmap(Settings::FRONTSPRITE_SCALE) hasCustom = picturePath.include?("CustomBattlers") - previewwindow = PictureWindow.new(bitmap) previewwindow.x = x previewwindow.y = y - previewwindow.z = 1000000 + previewwindow.z = 100000 - drawFusionInformation(dexNumber,level, x) + drawFusionInformation(dexNumber, level, x) if !$Trainer.seen?(dexNumber) if hasCustom @@ -35,20 +128,47 @@ class DoublePreviewScreen return previewwindow 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)) picturePath = pathCustom 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 return picturePath end - def drawFusionInformation(fusedDexNum, level, x=0) + def drawFusionInformation(fusedDexNum, level, x = 0) viewport = Viewport.new(0, 0, Graphics.width, Graphics.height) - @typewindows << drawPokemonType(fusedDexNum,viewport, x+40,220) if @draw_types - drawFusionPreviewText(viewport, "Lv. " + level.to_s, x+60, 40,) if @draw_level + @typewindows << drawPokemonType(fusedDexNum, viewport, x + 40, 220) if @draw_types + 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 def drawFusionPreviewText(viewport, text, x, y) @@ -65,6 +185,8 @@ class DoublePreviewScreen for typeWindow in @typewindows typeWindow.dispose end + pbDisposeSpriteHash(@sprites) + end def drawPokemonType(pokemon_id, viewport, x_pos = 192, y_pos = 264) @@ -87,5 +209,4 @@ class DoublePreviewScreen return viewport end - end diff --git a/Data/Scripts/048_Fusion/PokemonFusion.rb b/Data/Scripts/048_Fusion/PokemonFusion.rb index b54db1e11..f8d2a55c3 100644 --- a/Data/Scripts/048_Fusion/PokemonFusion.rb +++ b/Data/Scripts/048_Fusion/PokemonFusion.rb @@ -650,7 +650,7 @@ class PokemonFusionScene # Opens the fusion screen - def pbFusionScreen(cancancel = false, superSplicer = false) + def pbFusionScreen(cancancel = false, superSplicer = false, firstOptionSelected=false) metaplayer1 = SpriteMetafilePlayer.new(@metafile1, @sprites["rsprite1"]) metaplayer2 = SpriteMetafilePlayer.new(@metafile2, @sprites["rsprite2"]) metaplayer3 = SpriteMetafilePlayer.new(@metafile3, @sprites["rsprite3"]) @@ -739,7 +739,7 @@ class PokemonFusionScene #@pokemon1.ability = pbChooseAbility(@pokemon1, hiddenAbility1, hiddenAbility2) pbChooseAbility(@pokemon1, hiddenAbility1, hiddenAbility2) - setFusionMoves(@pokemon1, @pokemon2) if !noMoves + setFusionMoves(@pokemon1, @pokemon2, firstOptionSelected) if !noMoves # if superSplicer # @pokemon1.nature = pbChooseNature(@pokemon1.nature, @pokemon2.nature) @@ -792,7 +792,7 @@ def setAbilityAndNature(abilitiesList, naturesList) end -def setFusionMoves(fusedPoke, poke2) +def setFusionMoves(fusedPoke, poke2,selected2ndOption=false) #NEW METHOD (not ready) # clearUIForMoves @@ -805,12 +805,25 @@ def setFusionMoves(fusedPoke, poke2) # # fusedPoke.moves=moves bodySpecies = getBodyID(fusedPoke) + headSpecies = getHeadID(fusedPoke,bodySpecies) 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 selected2ndOption + fusedPoke.moves = poke2.moves + else + return + end return elsif choice == 2 - fusedPoke.moves = poke2.moves + if selected2ndOption + return + else + fusedPoke.moves = poke2.moves + end return else #Learn moves diff --git a/Data/Scripts/050_AddOns/New Items effects.rb b/Data/Scripts/050_AddOns/New Items effects.rb index 68f07532a..444bd18dd 100644 --- a/Data/Scripts/050_AddOns/New Items effects.rb +++ b/Data/Scripts/050_AddOns/New Items effects.rb @@ -1247,6 +1247,15 @@ ItemHandlers::UseOnPokemon.add(:DNASPLICERS, proc { |item, pokemon, scene| 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) playingBGM = $game_system.getPlayingBGM 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!")) return false 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) scene.pbHardRefresh pbBGMPlay(playingBGM) return true end + elsif pokemon == poke2 scene.pbDisplay(_INTL("{1} can't be fused with itself!", pokemon.name)) return false @@ -1302,6 +1329,18 @@ def pbDNASplicing(pokemon, scene, supersplicers = false, superSplicer = false) 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) # newid = (pokemon.species_data.id_number) * NB_POKEMON + poke2.species_data.id_number # previewwindow = FusionPreviewScreen.new(pokemon, poke2)#PictureWindow.new(picturePath) @@ -1326,35 +1365,34 @@ end def pbFuse(pokemon, poke2, supersplicers = false) 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) - hasCustom = false - if (pbResolveBitmap(pathCustom)) - picturePath = pathCustom - hasCustom = true - else - picturePath = _INTL("Graphics/Battlers/{1}/{1}.{2}.png", poke2.species_data.id_number, pokemon.species_data.id_number) - end + # pathCustom = _INTL("Graphics/CustomBattlers/{1}.{2}.png", poke2.species_data.id_number, pokemon.species_data.id_number) + # hasCustom = false + # if (pbResolveBitmap(pathCustom)) + # picturePath = pathCustom + # hasCustom = true + # else + # picturePath = _INTL("Graphics/Battlers/{1}/{1}.{2}.png", poke2.species_data.id_number, pokemon.species_data.id_number) + # 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) - - 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 - - if (Kernel.pbConfirmMessage(_INTL("Fuse the two Pokémon?", newid))) - previewwindow.dispose - typeWindow.dispose + #if (Kernel.pbConfirmMessage(_INTL("Fuse the two Pokémon?", newid))) + # previewwindow.dispose + # typeWindow.dispose fus = PokemonFusionScene.new if (fus.pbStartScreen(pokemon, poke2, newid)) returnItemsToBag(pokemon, poke2) @@ -1364,11 +1402,11 @@ def pbFuse(pokemon, poke2, supersplicers = false) return true end - else - previewwindow.dispose - typeWindow.dispose - return false - end + # else + # # previewwindow.dispose + # # typeWindow.dispose + # return false + # end end diff --git a/Data/System.rxdata b/Data/System.rxdata index 5a2d33b0d..81ea3c14d 100644 Binary files a/Data/System.rxdata and b/Data/System.rxdata differ