Advertisement
MundoBezier

Menu Armonía v2

Jun 28th, 2021 (edited)
663
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 15.07 KB | None | 0 0
  1. #===============================================================================
  2. #                           Script : PokemonMenu_Scene
  3. #                         Bezier - Privado Pokémon Armonia v2
  4. #-------------------------------------------------------------------------------
  5. #                 Creado para RPG Maker XP con base Essentials
  6. #                           Compatible : versión 16.2
  7. #===============================================================================
  8.  
  9. class PokemonMenu_Scene
  10.  
  11.   # --- VALORES MODIFICABLES ---
  12.  
  13.   TEXTCOLOR = Color.new(255, 255, 255)  # Color del texto
  14.   SHADOWCOLOR = Color.new(0, 2, 22, 60) # Color de la sombra
  15.  
  16.   # Velocidades de movimiento de los paneles del menú
  17.   ACCELERATION = [10, 6, 3]
  18.  
  19.   # --- CONSTANTES (NO MODIFICABLES) ---
  20.  
  21.   MENU_PATH = "Graphics/Pictures/Menu/"
  22.  
  23.   # Posiciones de los pokemon en el panel izquierdo
  24.   POKEMON_Y = [ -5, 43, 91, 139, 187, 235 ]
  25.  
  26.   # Posiciones de los botones del panel derecho
  27.   BT_Y = [ 0, 48, 96, 144, 192, 240, 288, 336 ]
  28.   ICON_OFFSET_X = 42
  29.   ICON_OFFSET_Y = 26
  30.  
  31.   # --- FUNCIONES ---
  32.  
  33.   # Añade los botones del menú derecho.
  34.   # Para cambiar el orden, tan solo hay que mover las líneas addButton
  35.   def addButtons()
  36.     @buttons.clear()
  37.     addButton("pokedex", "Pokédex") if $Trainer.pokedex
  38.     addButton("pokemon", "Pokémon") if $Trainer.party.size > 0
  39.     addButton("mochila", "Mochila")
  40.     addButton("trainer", $Trainer.name)
  41.     addButton("pc", "PC")
  42.     addButton("album", "Álbum")
  43.     addButton("guardar", "Guardar")
  44.     addButton("ajustes", "Ajustes")
  45.   end
  46.  
  47.   # Añade un sprite de pokémon i-esimo (animado) en la posición correspondiente
  48.   # del menú izquierdo. Si ya existe un sprite para ese pokémon,
  49.   # lo borra y lo reemplaza por uno nuevo, actualizando la vista
  50.   def addPokemonSprite(i)
  51.     return if !$Trainer
  52.    
  53.     menuIFrame = $Trainer.party.size == 0 ? 0 : @sprites["menuI"].bitmap.width / 2
  54.     @sprites["menuI"].src_rect.set(menuIFrame, 0, @sprites["menuI"].bitmap.width / 2, @sprites["menuI"].bitmap.height)
  55.      
  56.     if i >= 0 && i < $Trainer.party.length
  57.       poke = $Trainer.party[i]
  58.       if @sprites["pk#{i}"]
  59.         @sprites["pk#{i}"].dispose
  60.         @sprites["pk#{i}"] = nil
  61.       end
  62.      
  63.       pk = PokemonIconSprite.new(poke, @viewport)
  64.       pk.x = @sprites["menuI"].x
  65.       pk.y = POKEMON_Y[i]
  66.       pk.z = 99999
  67.       pk.mirror = true
  68.       pk.active = true
  69.       @sprites["pk#{i}"] = pk    
  70.     end
  71.   end
  72.  
  73.   # Inicia la escena
  74.   def pbStartScene
  75.     pbSEPlay("menu",60)
  76.    
  77.     # Tiempo inicial para el refresco del menú cuando se avanza en el tiempo
  78.     @initialTime = Graphics.frame_count / Graphics.frame_rate
  79.    
  80.     @sprites = {}     # Todos los sprites
  81.    
  82.     @selectedBtn = -1 # Índice del botón seleccionado
  83.    
  84.     pbSetViableDexes
  85.    
  86.     @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  87.     @viewport.z = 99999
  88.    
  89.     # Panel de la izquierda
  90.     menuI = addSprite("menuI", -160, 0)
  91.     menuIFrame = $Trainer.party.size == 0 ? 0 : menuI.bitmap.width / 2
  92.     menuI.src_rect.set(menuIFrame, 0, menuI.bitmap.width / 2, menuI.bitmap.height)
  93.    
  94.     # Panel de la derecha
  95.     menuD = addSprite("menuD", 512, 0)
  96.     menuD.src_rect.set(0,0,menuD.bitmap.width/8,menuD.bitmap.height)
  97.    
  98.     # Botones de la derecha
  99.     @buttons = []
  100.     addButtons()
  101.    
  102.     # Imágenes de los estados alterados
  103.     @statuses = AnimatedBitmap.new(_INTL("Graphics/Pictures/statuses"))
  104.    
  105.     # Añade los pokemon al panel izquierdo
  106.     for i in 0...$Trainer.party.size
  107.       addPokemonSprite(i)
  108.     end
  109.    
  110.     # Bitmaps sobre los que se pintarán textos y otros elementos
  111.     @sprites["overlayI"] = BitmapSprite.new(menuI.bitmap.width/2, menuI.bitmap.height, @viewport)
  112.     @sprites["overlayI"].x = -160
  113.     @sprites["overlayI"].z = 99999
  114.     pbSetSystemFont(@sprites["overlayI"].bitmap)
  115.    
  116.     @sprites["overlayD"] = BitmapSprite.new(menuD.bitmap.width/8, menuD.bitmap.height, @viewport)
  117.     @sprites["overlayD"].x = 512
  118.     @sprites["overlayD"].z = 99999
  119.     pbSetSystemFont(@sprites["overlayD"].bitmap)
  120.    
  121.     # Pinta los textos fuera de panalla para que estén visibles con la animación de entrada
  122.     pbMenuTexts
  123.    
  124.    
  125.     selectButton(0)   # Por defecto selecciona el primer botón
  126.    
  127.     speed = ACCELERATION[0] # Velocidad inicial de entrada del menú
  128.    
  129.     # Posisión máxima para el desplazamiento del panel derecho
  130.     rightlimit = Graphics.width - menuD.bitmap.width / 8
  131.    
  132.     # Los paneles entran desde fuera de la ventana
  133.     while menuI.x < 0 || menuD.x > rightlimit
  134.       menuI.x += speed
  135.       menuI.x = 0 if menuI.x > 0
  136.       @sprites["overlayI"].x += speed
  137.       @sprites["overlayI"].x = 0 if @sprites["overlayI"].x > 0
  138.      
  139.       for i in 0...$Trainer.party.size
  140.         @sprites["pk#{i}"].x += speed
  141.         @sprites["pk#{i}"].x = 0 if @sprites["pk#{i}"].x > 0
  142.       end
  143.      
  144.       menuD.x -= speed
  145.       menuD.x = rightlimit if menuD.x < rightlimit
  146.      
  147.       for i in 0...@buttons.size
  148.         bt = @buttons[i]
  149.         @sprites[bt[0]].x -= speed
  150.         if i == @selectedBtn
  151.           @sprites[bt[0]].x = 376 if @sprites[bt[0]].x < 376
  152.         else
  153.           @sprites[bt[0]].x = 394 if @sprites[bt[0]].x < 394
  154.         end
  155.       end
  156.      
  157.       @sprites["overlayD"].x -= speed
  158.       @sprites["overlayD"].x = rightlimit if @sprites["overlayD"].x < rightlimit
  159.      
  160.       speed = ACCELERATION[1] if menuI.x >= -100
  161.       speed = ACCELERATION[2] if menuI.x >= -20
  162.       pbWait(1)
  163.     end
  164.  
  165.     # Inicia el bucle del menú
  166.     pbMenuLoop
  167.   end # def pbStartScene
  168.  
  169.   # Añade un botón, con un identificador y el texto a mostrar
  170.   def addButton(id, text)
  171.     icon = addSprite(id, 512 + ICON_OFFSET_X, BT_Y[@buttons.size] + ICON_OFFSET_Y)
  172.     icon.ox = icon.bitmap.width / 4
  173.     icon.oy = icon.bitmap.height / 2
  174.     icon.src_rect.set(0, 0, icon.bitmap.width / 2, icon.bitmap.height)
  175.     @buttons << [id, text]
  176.   end
  177.  
  178.   # Añade un sprite a la lista con unos valores concretos
  179.   def addSprite(id, x, y, opacity=255, resource=nil)
  180.     if !resource; resource = MENU_PATH + id; end
  181.     @sprites[id] = Sprite.new(@viewport)
  182.     @sprites[id].z = 99999
  183.     @sprites[id].x = x
  184.     @sprites[id].y = y
  185.     @sprites[id].opacity = opacity
  186.     @sprites[id].bitmap = BitmapCache.load_bitmap(resource)
  187.     return @sprites[id]
  188.   end
  189.  
  190.   # Selecciona un botón del panel derecho
  191.   def selectButton(index)
  192.     if @selectedBtn >= 0 && @selectedBtn != index
  193.       @sprites[@buttons[@selectedBtn][0]].x += 18
  194.       @sprites[@buttons[@selectedBtn][0]].src_rect.x = 0
  195.     end
  196.     @sprites["menuD"].src_rect.x = (@sprites["menuD"].bitmap.width / 8) * index
  197.     @sprites[@buttons[index][0]].x -= 18
  198.     @sprites[@buttons[index][0]].src_rect.x = 36
  199.     @selectedBtn = index
  200.     pbSEPlay("Select",60)
  201.     pbMenuTexts
  202.   end # def selectButton(index)
  203.  
  204.   # Actualiza la escena
  205.   def update
  206.     Graphics.update
  207.     Input.update      
  208.    
  209.     # Anima los pokemon
  210.     for i in 0...$Trainer.party.size
  211.       @sprites["pk#{i}"].update if @sprites["pk#{i}"]
  212.     end
  213.    
  214.     # Gestiona el paso del tiempo para repintar el menu
  215.     inimin = @initialTime / 60 % 60
  216.     totalsec = Graphics.frame_count / Graphics.frame_rate
  217.     min = totalsec / 60 % 60
  218.     if min != inimin
  219.       pbMenuTexts
  220.       @initialTime = totalsec
  221.     end
  222.   end
  223.  
  224.   # Pinta los textos y los extras de los pokemon
  225.   def pbMenuTexts
  226.     bmpI = @sprites["overlayI"].bitmap
  227.     bmpI.clear
  228.     pbSetSystemFont(bmpI)
  229.     bmpI.font.size -= 4
  230.     textsI = []
  231.    
  232.     if $Trainer.party.size > 0
  233.       for i in 0...$Trainer.party.size
  234.         poke = $Trainer.party[i]
  235.         lvl = _INTL("Lvl. {1}", poke.level)
  236.         textsI << [lvl, 65, POKEMON_Y[i] + 20, 0, TEXTCOLOR, SHADOWCOLOR]
  237.      
  238.         backcolor = poke.hp == 0 ? Color.new(0, 0, 0) : Color.new(255, 255, 255)
  239.         bmpI.fill_rect(65, POKEMON_Y[i] + 52, 60, 8, backcolor)
  240.        
  241.         if poke.hp > 0
  242.           hpgauge = poke.hp * 60 / poke.totalhp
  243.           hpgauge = 1 if hpgauge <= 0
  244.          
  245.           hpcolors=[
  246.              PokeBattle_SceneConstants::HPCOLORGREENDARK,
  247.              PokeBattle_SceneConstants::HPCOLORGREEN,
  248.              PokeBattle_SceneConstants::HPCOLORYELLOWDARK,
  249.              PokeBattle_SceneConstants::HPCOLORYELLOW,
  250.              PokeBattle_SceneConstants::HPCOLORREDDARK,
  251.              PokeBattle_SceneConstants::HPCOLORRED
  252.           ]
  253.          
  254.           hpzone=0
  255.           hpzone=1 if poke.hp<=(poke.totalhp/8*7).floor
  256.           hpzone=2 if poke.hp<=(poke.totalhp/8*6).floor
  257.           hpzone=3 if poke.hp<=(poke.totalhp/2).floor
  258.           hpzone=4 if poke.hp<=(poke.totalhp/4).floor
  259.           hpzone=5 if poke.hp<=(poke.totalhp/8).floor
  260.          
  261.           bmpI.fill_rect(65, POKEMON_Y[i] + 52,hpgauge,8,hpcolors[hpzone])
  262.         end
  263.        
  264.         if poke.hp == 0 || poke.status > 0
  265.           status = (poke.hp == 0) ? 5 : poke.status - 1
  266.           bmpI.blt(12, POKEMON_Y[i] + 48, @statuses.bitmap,
  267.                    Rect.new(0, status * 16, 44, 16))
  268.         end
  269.       end
  270.     end
  271.    
  272.     totalsec = Graphics.frame_count / Graphics.frame_rate
  273.     hour = totalsec / 60 / 60
  274.     min = totalsec / 60 % 60
  275.    
  276.     textsI << [_INTL("Medallas: {1}",$Trainer.numbadges), 3, 302, 0, TEXTCOLOR, SHADOWCOLOR]
  277.     textsI << [_ISPRINTF("Juego: {1:02d}:{2:02d}",hour,min), 3, 329, 0, TEXTCOLOR, SHADOWCOLOR]
  278.     textsI << [_INTL("Dinero: ${1}",$Trainer.money), 3, 356, 0, TEXTCOLOR, SHADOWCOLOR]
  279.    
  280.     pbDrawTextPositions(bmpI, textsI)
  281.  
  282.    
  283.     bmpD = @sprites["overlayD"].bitmap
  284.     bmpD.clear
  285.     textsD = []
  286.     for i in 0...@buttons.size
  287.       bt = @buttons[i]
  288.       x = i == @selectedBtn ? 50 : 68
  289.       textsD << [bt[1], x, BT_Y[i] + 10, 0, TEXTCOLOR, SHADOWCOLOR]
  290.     end
  291.     pbDrawTextPositions(bmpD, textsD)
  292.   end
  293.  
  294.   # Bucle principal del menú
  295.   def pbMenuLoop
  296.     loop do
  297.       self.update # Actualiza los elementos que tengan animaciones permanentes
  298.       result = self.pbMenuInput # Captura los inputs y devuelve el resultado
  299.      
  300.       # Si el resultado del input es -1, cierra el menú
  301.       if result == -1
  302.         pbEndScene
  303.         break
  304.       end
  305.     end
  306.   end
  307.  
  308.   # Gestiona las teclas pulsadas
  309.   def pbMenuInput
  310.     # Selección de botón
  311.     if Input.trigger?(Input::UP)
  312.       if @selectedBtn > 0
  313.         selectButton(@selectedBtn - 1)
  314.       else
  315.         selectButton(@buttons.size - 1)
  316.       end
  317.     elsif Input.trigger?(Input::DOWN)
  318.       if @selectedBtn < @buttons.size - 1
  319.         selectButton(@selectedBtn + 1)
  320.       else
  321.         selectButton(0)
  322.       end
  323.     end
  324.    
  325.     if Input.trigger?(Input::B)
  326.       return -1
  327.     end
  328.      if Input.trigger?(Input::C)
  329.       bt = @buttons[@selectedBtn][0]
  330.       case bt
  331.       when "mochila"
  332.         self.bag
  333.       when "pokemon"
  334.         if $Trainer.party.length > 0
  335.          self.pokemonParty
  336.         end
  337.       when "guardar"
  338.         self.save
  339.       when "trainer"
  340.         self.trainerCard
  341.       when "pc"
  342.           self.pc
  343.       when "pokedex"
  344.         if $Trainer.pokedex
  345.           self.pokeDex
  346.         end
  347.       when "album"
  348.         self.album
  349.       when "ajustes"
  350.         self.options
  351.       end
  352.     end
  353.    
  354.     return 0
  355.   end # def pbMenuInput
  356.  
  357.   # Cierra el menú. Destruye todos los elementos y vuelve al juego
  358.   def pbEndScene
  359.     pbSEPlay("menu",60)
  360.    
  361.     speed = ACCELERATION[2]
  362.     while @sprites["menuI"].x > -160 || @sprites["menuD"].x < 512
  363.       @sprites["menuI"].x -= speed
  364.       @sprites["overlayI"].x -= speed
  365.       for i in 0...$Trainer.party.size
  366.         @sprites["pk#{i}"].x -= speed
  367.       end
  368.       @sprites["menuD"].x += speed
  369.       for i in 0...@buttons.size
  370.         bt = @buttons[i]
  371.         @sprites[bt[0]].x += speed
  372.       end
  373.       @sprites["overlayD"].x += speed
  374.      
  375.       speed = ACCELERATION[1] if @sprites["menuI"].x <= -20
  376.       speed = ACCELERATION[0] if @sprites["menuI"].x <= -100
  377.       pbWait(1)
  378.     end
  379.    
  380.     pbDisposeSpriteHash(@sprites)
  381.     @viewport.dispose
  382.   end
  383.  
  384.   # --- MENU WINDOWS ---
  385.  
  386.   def bag
  387.     pbSEPlay("Choose")
  388.     item=0
  389.     scene=PokemonBag_Scene.new
  390.     screen=PokemonBagScreen.new(scene,$PokemonBag)
  391.     pbFadeOutIn(99999) {
  392.       item=screen.pbStartScreen
  393.       if item>0
  394.         pbEndScene
  395.       else
  396.         pbRefresh
  397.       end
  398.     }
  399.     if item>0
  400.       Kernel.pbUseKeyItemInField(item)
  401.       return
  402.     end
  403.   end
  404.  
  405.   def pokemonParty
  406.     pbSEPlay("Choose")
  407.     sscene=PokemonScreen_Scene.new
  408.     sscreen=PokemonScreen.new(sscene,$Trainer.party)
  409.     hiddenmove=nil
  410.     pbFadeOutIn(99999) {
  411.     hiddenmove=sscreen.pbPokemonScreen
  412.     updateMenus
  413.     if hiddenmove
  414.       pbEndScene
  415.     end
  416.     }
  417.     if hiddenmove
  418.       Kernel.pbUseHiddenMove(hiddenmove[0],hiddenmove[1])
  419.       return
  420.     end
  421.    
  422.   end
  423.  
  424.   def updateMenus
  425.     for i in 0...6
  426.       if i < $Trainer.party.size
  427.         addPokemonSprite(i) # if !@sprites["pk#{i}"]
  428.         @sprites["pk#{i}"].update
  429.       else
  430.         @sprites["pk#{i}"].visible = false if @sprites["pk#{i}"]
  431.       end
  432.     end
  433.     pbMenuTexts
  434.   end
  435.  
  436.   def pc
  437.     pbSEPlay("computeropen")
  438.     Kernel.pbMessage(_INTL("Acceso al Sistema de Almacenamiento de Pokémon concedido."))
  439.     scene=PokemonStorageScene.new
  440.     screen=PokemonStorageScreen.new(scene,$PokemonStorage)
  441.     screen.pbStartScreen(2) # Es 2 porque es para mover
  442.     updateMenus
  443.     pbSEPlay("computerclose")
  444.   end
  445.  
  446.   def pokeDex
  447.     pbSEPlay("Choose")
  448.     if DEXDEPENDSONLOCATION
  449.           pbFadeOutIn(99999) {
  450.              scene=PokemonPokedexScene.new
  451.              screen=PokemonPokedex.new(scene)
  452.              screen.pbStartScreen
  453.              @scene.pbRefresh
  454.           }
  455.     else
  456.       if $PokemonGlobal.pokedexViable.length==1
  457.             $PokemonGlobal.pokedexDex=$PokemonGlobal.pokedexViable[0]
  458.             $PokemonGlobal.pokedexDex=-1 if $PokemonGlobal.pokedexDex==$PokemonGlobal.pokedexUnlocked.length-1
  459.             pbFadeOutIn(99999) {
  460.             scene=PokemonPokedexScene.new
  461.             screen=PokemonPokedex.new(scene)
  462.             screen.pbStartScreen
  463.         }
  464.       else
  465.         pbLoadRpgxpScene(Scene_PokedexMenu.new)
  466.       end
  467.     end
  468.   end
  469.  
  470.   def trainerCard
  471.     pbSEPlay("Choose")
  472.     PBDebug.logonerr {
  473.       scene=PokemonTrainerCardScene.new
  474.       screen=PokemonTrainerCard.new(scene)
  475.       pbFadeOutIn(99999) {
  476.         screen.pbStartScreen
  477.       }
  478.     }
  479.   end
  480.  
  481.   def save
  482.     pbSEPlay("Choose")
  483.     scene=PokemonSaveScene.new
  484.     screen=PokemonSave.new(scene)
  485.     screen.pbSaveScreen
  486.   end
  487.  
  488.   def album
  489.     pbSEPlay("Choose")
  490.     pbFadeOutIn(99999) {
  491.       AlbumScene.new.pbPage1
  492.       pbUpdateSceneMap
  493.     }
  494.   end
  495.  
  496.   def options
  497.     pbSEPlay("Choose")
  498.     scene=PokemonOptionScene.new
  499.       screen=PokemonOption.new(scene)
  500.       pbFadeOutIn(99999) {
  501.       screen.pbStartScreen
  502.      
  503.       pbMenuTexts
  504.      
  505.       pbUpdateSceneMap
  506.       }
  507.   end
  508. end
  509.  
  510. class PokemonMenu
  511.   def pbShowMenu
  512.     @scene.pbShowMenu
  513.   end
  514.  
  515.   def pbStartPokemonMenu
  516.     @scene.pbStartScene
  517.   end
  518. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement