Advertisement
FuegoFatuo25

Script de Nuzlocke by ASScripting

Oct 11th, 2020 (edited)
3,749
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 31.96 KB | None | 0 0
  1. #=============================================================================#
  2. #  ####           ** NUZLOCKE SCRIPT BY ASSCRIPTING **                  ####  #
  3. #=============================================================================#
  4. #                ** Creditos a Selfish Alberto y Cato **                      #
  5. #=============================================================================#
  6. # ** Configuración **                                                         #
  7. #=============================================================================#
  8. #Mapas conectados (bosques, rutas divididas, cuevas, etc.) Para que no tengas
  9. #encuentros duplicados en zonas divididas en varios mapas.
  10. NUZLOCKEMAPS = [[],[]]
  11. #Nivel máximo de cada líder de gimnasio. El Pokemon que alcance este nivel
  12. #dejará de recibir xp. Cuando se venza al líder, se debe sumar 1 en la
  13. #variable LVL_VAR. Se puede utilizar aunque tu juego no tenga gimnasios.
  14. GYMLVLS = [10,20,30]
  15. LVL_VAR = 100
  16. #Salvajes que pueden aparecer con objeto equipado a pesar de haber activado la
  17. #opción de que aparezcan sin ellos
  18. PKMITEMEXCEPTION = [PBSpecies::LUVDISC]
  19. #Coordenada X e Y donde aparece el número de vidas restantes en caso de tener
  20. #activada la opción. Si quieres que no aparezca, OVERLAY_VIDAS debe estar en
  21. #false
  22. OVERLAY_VIDAS_X = 460
  23. OVERLAY_VIDAS_Y = 9
  24. OVERLAY_VIDAS = true
  25. #Objetos que SÍ se pueden usar fuera de combate
  26. NUZLOCKEITEMS = [PBItems::RARECANDY,PBItems::IRON,PBItems::CALCIUM,
  27. PBItems::ZINC,PBItems::CARBOS,PBItems::HEALTHWING,PBItems::MUSCLEWING,
  28. PBItems::RESISTWING,PBItems::GENIUSWING,PBItems::CLEVERWING,
  29. PBItems::SWIFTWING,PBItems::HPUP,PBItems::PPUP,PBItems::PPMAX]
  30. #Interruptor que debe estar activo para que un combate no cuente para el
  31. #nuzlocke (los Pokémon no mueren, no disminuyen las vidas, se puede perder)
  32. NO_NUZLOCKE_SWITCH = 100
  33. #Para poder utilizar el modo de ayuda (reivivires) debes introducir este
  34. #objeto en los PBS:
  35. #XXX,NUZLOCKEREVIVE,Resucitar,Resucitar,2,0,"Medicina especial que es capaz de resucitar a un Pokémon debilitado en modo Nuzlocke.",1,1,0,
  36. #El nombre interno (mayúsculas) debe permanecer igual, lo demás puede variar
  37. #Entrégalo cuando creas conveniente llamando al script: assNuzlockeHelp
  38.  
  39.  
  40. #=============================================================================#
  41. # ** NuzlockeScene **                                                         #
  42. #=============================================================================#
  43.  
  44. class PokemonGlobalMetadata
  45.     attr_accessor :nuzlocke
  46.   attr_accessor :nuzlockeMaps
  47.   attr_accessor :nuzlockeVidas
  48.   attr_accessor :nuzlockeHelp
  49. end
  50.  
  51.  
  52. class NuzlockeScene
  53.     def initialize
  54.     $PokemonGlobal.nuzlocke={
  55.       "permadeath"  => false,
  56.       "captura"     => false,
  57.       "repetidos"   => false,
  58.       "tiendas"     => false,
  59.       "consumibles" => false,
  60.       "levelcap"    => false,
  61.       "motes"       => false,
  62.       "fullwipe"    => false,
  63.       "bayas"       => false,
  64.       "mantener"    => false,
  65.       "recogida"    => false,
  66.       "noitem"      => false,
  67.       "vidas"       => false
  68.     }
  69.  
  70.     if Kernel.pbConfirmMessage("¿Quieres activar el modo Nuzlocke?")
  71.  
  72.       $PokemonGlobal.nuzlocke["permadeath"]=true
  73.       $PokemonGlobal.nuzlocke["captura"]=true
  74.       $PokemonGlobal.nuzlockeVidas = 10
  75.      
  76.       color = Color.new(0,0,0)
  77.       shadow = Color.new(120,120,120,129)
  78.        
  79.       keys = [ "permadeath","captura","repetidos","tiendas","consumibles",
  80.                "levelcap","motes","fullwipe","bayas","mantener","recogida",
  81.                "noitem","vidas"]
  82.        
  83.  
  84.       nombres={
  85.         "permadeath"  => "Si un Pokémon muere, no puede revivir",
  86.         "captura"     => "Solo capturar al primer Pokémon de ruta",
  87.         "repetidos"   => "No puedes capturar dos Pokémon iguales",
  88.         "tiendas"     => "Prohibido comprar consumibles",
  89.         "consumibles" => "No usar consumibles fuera de combate",
  90.         "levelcap"    => "Tope de nivel líderes",
  91.         "motes"       => "Motes obligatorios",
  92.         "fullwipe"    => "Derrota al perder un combate",
  93.         "bayas"       => "Prohibido farmear bayas",
  94.         "mantener"    => "Modo mantener obligatorio",
  95.         "recogida"    => "La hab. Recogida no te da comsumibles",
  96.         "noitem"      => "Los salvajes no tienen objeto equipado",
  97.         "vidas"       => "Jugar con vidas"
  98.       }
  99.  
  100.       viewport = Viewport.new(0,0,Graphics.width,4*Graphics.height)
  101.       viewport.z = 99999
  102.      
  103.       sprites={}
  104.       sprites["bg"] = Sprite.new(viewport)
  105.       sprites["bg"].bitmap = Bitmap.new("Graphics/Pictures/Nuzlocke/bg.png")
  106.      
  107.       sprites["flecha"] = Sprite.new(viewport)
  108.       sprites["flecha"].bitmap = Bitmap.new("Graphics/Pictures/Nuzlocke/flecha.png")
  109.       sprites["flecha"].z= 999995
  110.       sprites["flecha"].x= 4
  111.  
  112.       sprites["slider"] = Sprite.new(viewport)
  113.       sprites["slider"].bitmap = Bitmap.new("Graphics/Pictures/Nuzlocke/slider.png")
  114.       sprites["slider"].y= 5 + 80*(keys.length)
  115.       sprites["slider"].x= 55
  116.       sprites["slider"].visible = false
  117.      
  118.       sprites["sliderBall"] = Sprite.new(viewport)
  119.       sprites["sliderBall"].bitmap = Bitmap.new("Graphics/Pictures/Nuzlocke/ball_1.png")
  120.       sprites["sliderBall"].y= 5 + 80*(keys.length)
  121.       sprites["sliderBall"].x= 56
  122.       sprites["sliderBall"].visible = false
  123.      
  124.       sprites["overlayV"] = BitmapSprite.new(37,37,viewport)
  125.       sprites["overlayV"].z = 999999
  126.       pbSetSystemFont(sprites["overlayV"].bitmap)  
  127.       sprites["overlayV"].bitmap.font.size = 24
  128.       sprites["overlayV"].y= 5 + 80*(keys.length)
  129.       sprites["overlayV"].x= 56
  130.      
  131.       pbDrawTextPositions(sprites["overlayV"].bitmap,[[
  132.         $PokemonGlobal.nuzlockeVidas.to_s,18,4,2,color,shadow
  133.       ]])
  134.       sprites["overlayV"].visible = false
  135.      
  136.       sprites["overlay"] = BitmapSprite.new(Graphics.width,4*Graphics.height,viewport)
  137.       sprites["overlay"].z = 999999
  138.       pbSetSystemFont(sprites["overlay"].bitmap)  
  139.       sprites["overlay"].bitmap.font.size = 26
  140.  
  141.       selector = 0            
  142.  
  143.       y = 10
  144.       for i in keys
  145.         sprites[i] = Sprite.new(viewport)
  146.         sprites[i].bitmap = Bitmap.new("Graphics/Pictures/Nuzlocke/selector#{$PokemonGlobal.nuzlocke[i] ? 1:0}.png")
  147.         sprites[i].y = y
  148.         sprites[i].x = 60
  149.         pbDrawTextPositions(sprites["overlay"].bitmap,[
  150.           [nombres[i],78,y+15,0,color,shadow]
  151.         ])
  152.         y+= sprites[i].bitmap.height + 14
  153.       end
  154.      
  155.       cd=0
  156.      
  157.       loop{
  158.         Graphics.update
  159.         Input.update
  160.         cd-=1 if cd>0
  161.          
  162.         if Input.press?(Input::UP) && selector > 0 && cd == 0
  163.           8.times{
  164.             for k,v in sprites
  165.               next if k=="bg" || k=="flecha"
  166.               v.y +=  10
  167.             end
  168.             pbWait(1)
  169.           }
  170.           selector-=1
  171.           cd=10
  172.         end
  173.  
  174.         if Input.press?(Input::DOWN) && selector < keys.length-1 && cd == 0
  175.           8.times{
  176.             for k,v in sprites
  177.               next if k=="bg" || k=="flecha"
  178.               v.y -=  10
  179.             end
  180.             pbWait(1)
  181.           }
  182.           selector+=1
  183.           cd=10
  184.         end
  185.  
  186.         if Input.trigger?(Input::C)
  187.           $PokemonGlobal.nuzlocke[keys[selector]] = !$PokemonGlobal.nuzlocke[keys[selector]]
  188.           sprites[keys[selector]].bitmap = Bitmap.new("Graphics/Pictures/Nuzlocke/selector#{$PokemonGlobal.nuzlocke[keys[selector]] ? 1:0}.png")
  189.           if keys[selector] == "vidas"
  190.             sprites["slider"].visible = !sprites["slider"].visible
  191.             sprites["sliderBall"].visible = sprites["slider"].visible
  192.             sprites["overlayV"].visible = sprites["slider"].visible
  193.           end
  194.         end
  195.        
  196.         if Input.press?(Input::RIGHT) && keys[selector] == "vidas" && sprites["slider"].visible &&
  197.             $PokemonGlobal.nuzlockeVidas < 50 && cd == 0
  198.           $PokemonGlobal.nuzlockeVidas += 1
  199.           sprites["sliderBall"].x+= 10
  200.           sprites["overlayV"].x+= 10
  201.           sprites["overlayV"].bitmap.clear
  202.           pbDrawTextPositions(sprites["overlayV"].bitmap,[[
  203.           $PokemonGlobal.nuzlockeVidas.to_s,18,4,2,color,shadow
  204.           ]])
  205.           cd=5
  206.         end
  207.        
  208.         if Input.press?(Input::LEFT) && keys[selector] == "vidas" && sprites["slider"].visible &&
  209.             $PokemonGlobal.nuzlockeVidas > 10 && cd == 0
  210.           $PokemonGlobal.nuzlockeVidas -= 1
  211.           sprites["sliderBall"].x-= 10
  212.           sprites["overlayV"].x-= 10
  213.           sprites["overlayV"].bitmap.clear
  214.           pbDrawTextPositions(sprites["overlayV"].bitmap,[[
  215.           $PokemonGlobal.nuzlockeVidas.to_s,18,4,2,color,shadow
  216.           ]])
  217.           cd=5
  218.         end
  219.  
  220.         if Input.trigger?(Input::B)
  221.           if $PokemonGlobal.nuzlocke.values.include?(true) && Kernel.pbConfirmMessage("¿Quieres continuar con esta configuración?")
  222.             $PokemonGlobal.nuzlockeMaps = {} if $PokemonGlobal.nuzlocke["captura"]
  223.             $game_variables[LVL_VAR] = 0 if $PokemonGlobal.nuzlocke["levelcap"]
  224.             sprites.each{|k,v|v.dispose}
  225.            
  226.             if $PokemonGlobal.nuzlocke["permadeath"] && PBItems.const_defined?("NUZLOCKEREVIVE")
  227.               loop{
  228.                 help=Kernel.pbMessage("¿Quieres recibir ayuda?",["Sí","No","Más información"],1)
  229.                 case help
  230.                 when 0
  231.                   $PokemonGlobal.nuzlockeHelp = true
  232.                   break
  233.                 when 1
  234.                   break
  235.                 when 2
  236.                   Kernel.pbMessage("En ciertos puntos del juego el jugador recibirá un objeto que le permitirá revivir uno de sus Pokémon debilitados permanentemente, úsalo con sabiduría, no obtendrás muchos.")
  237.                 end
  238.               }
  239.             end
  240.             break
  241.           elsif Kernel.pbConfirmMessage("¿Quieres salir del modo Nuzlocke?")
  242.             $PokemonGlobal.nuzlocke = false
  243.             sprites.each{|k,v|v.dispose}
  244.             break
  245.           end
  246.         end
  247.       }    
  248.         end
  249.     end
  250.  
  251. end
  252.  
  253. #=============================================================================#
  254. # ** Permadeath **                                                            #
  255. #=============================================================================#
  256.  
  257. class PokeBattle_Pokemon
  258.   def heal
  259.     return if (hp<=0 && $PokemonGlobal.nuzlocke["permadeath"]) && !$game_switches[NO_NUZLOCKE_SWITCH]
  260.     return if egg?
  261.     healHP
  262.     healStatus
  263.     healPP
  264.   end
  265. end
  266.  
  267. def pbCheckUseOnPokemon(item,pokemon,screen)
  268.   return false if ((($PokemonGlobal.nuzlocke["consumibles"] && !screen.is_a?(PokeBattle_Scene)) &&
  269.     !((PBItems.const_defined?("NUZLOCKEREVIVE") && item == PBItems::NUZLOCKEREVIVE)||(NUZLOCKEITEMS.include?(item) &&
  270.     !(pokemon.hp==0 && $PokemonGlobal.nuzlocke["permadeath"])))))
  271.     return (pokemon && !pokemon.isEgg? && !(pokemon.hp==0 && $PokemonGlobal.nuzlocke["permadeath"])) || ((PBItems.const_defined?("NUZLOCKEREVIVE") && item == PBItems::NUZLOCKEREVIVE)||NUZLOCKEITEMS.include?(item))
  272. end
  273.  
  274. class PokemonScreen_Scene  
  275.   def pbUseItem(bag,pokemon)
  276.     if pbCheckUseOnPokemon(nil,pokemon,nil)
  277.       oldsprites=pbFadeOutAndHide(@sprites)
  278.       @sprites["helpwindow"].visible=false
  279.       @sprites["messagebox"].visible=false
  280.       scene=PokemonBag_Scene.new
  281.       screen=PokemonBagScreen.new(scene,bag)
  282.       ret=screen.pbUseItemScreen(pokemon)
  283.       pbFadeInAndShow(@sprites,oldsprites)
  284.       return ret
  285.     else
  286.       pbPlayBuzzerSE()
  287.       return -1
  288.     end
  289.   end
  290. end
  291.  
  292. class PokeBattle_Battle
  293.   def pbUseItemOnPokemon(item,pkmnIndex,userPkmn,scene)
  294.     pokemon=@party1[pkmnIndex]
  295.     battler=nil
  296.     name=pbGetOwner(userPkmn.index).fullname
  297.     name=pbGetOwner(userPkmn.index).name if pbBelongsToPlayer?(userPkmn.index)
  298.     pbDisplayBrief(_INTL("{1} ha usado\r\n{2}.",name,PBItems.getName(item)))
  299.     PBDebug.log("[Objeto usado] El jugador ha usado #{PBItems.getName(item)} en #{pokemon.name}")
  300.     ret=false
  301.     if pokemon.isEgg? || !pbCheckUseOnPokemon(item,pokemon,scene)
  302.       pbDisplay(_INTL("¡Pero no tuvo efecto!")) if pokemon.isEgg?
  303.       pbDisplay(_INTL("¡No te pases de listo, cruck!")) if !pbCheckUseOnPokemon(nil,pokemon,nil)
  304.     else
  305.       for i in 0...4
  306.         if !pbIsOpposing?(i) && @battlers[i].pokemonIndex==pkmnIndex
  307.           battler=@battlers[i]
  308.         end
  309.       end
  310.       ret=ItemHandlers.triggerBattleUseOnPokemon(item,pokemon,battler,scene)
  311.     end
  312.     if !ret && pbBelongsToPlayer?(userPkmn.index)
  313.       if $PokemonBag.pbCanStore?(item)
  314.         $PokemonBag.pbStoreItem(item)
  315.       else
  316.         raise _INTL("De alguna forma no se pudo regresar el objeto sin usar a la mochila.")
  317.       end
  318.     end
  319.     return ret
  320.   end
  321. end
  322.  
  323. #=============================================================================#
  324. # ** Captura y repetidos **                                                   #
  325. #=============================================================================#
  326.  
  327. class PokeBattle_Battle
  328.  
  329.   alias assEndOfBattle pbEndOfBattle unless method_defined?(:assEndOfBattle)
  330.   def pbEndOfBattle(canlose=false)
  331.     assEndOfBattle
  332.     if !@opponent && $PokemonGlobal.nuzlocke["captura"] && !($PokemonGlobal.nuzlockeMaps[$game_map.map_id] && $PokemonGlobal.nuzlockeMaps[$game_map.map_id]<0) && !($PokemonGlobal.nuzlocke["repetidos"] && @assOwned && @assOwned[self.battlers[1].pokemon.species])
  333.       if @decision == 1 && (!$PokemonGlobal.nuzlockeMaps[$game_map.map_id] || $PokemonGlobal.nuzlockeMaps[$game_map.map_id]==self.battlers[1].pokemon.species)
  334.         $PokemonGlobal.nuzlockeMaps[$game_map.map_id] = -2
  335.         nuzlockeMultipleMaps($game_map.map_id,-2)
  336.       elsif @decision == 4
  337.         $PokemonGlobal.nuzlockeMaps[$game_map.map_id] = -1
  338.         nuzlockeMultipleMaps($game_map.map_id,-1)
  339.       elsif !$PokemonGlobal.nuzlockeMaps[$game_map.map_id]
  340.         $PokemonGlobal.nuzlockeMaps[$game_map.map_id] = self.battlers[1].pokemon.species
  341.         nuzlockeMultipleMaps($game_map.map_id,self.battlers[1].pokemon.species)
  342.       end
  343.     end
  344.   end
  345.  
  346.   alias assThrowPokeBall pbThrowPokeBall unless method_defined?(:assThrowPokeBall)
  347.   def pbThrowPokeBall(idxPokemon,ball,rareness=nil,showplayer=false)
  348.     if $PokemonGlobal.nuzlocke["captura"] && $PokemonGlobal.nuzlockeMaps[$game_map.map_id] &&
  349.       $PokemonGlobal.nuzlockeMaps[$game_map.map_id]!= self.battlers[1].pokemon.species
  350.       @scene.pbThrowAndDeflect(ball,1)
  351.       if $PokemonGlobal.nuzlockeMaps[$game_map.map_id]== -1
  352.         pbDisplay(_INTL("¡Ya has capturado un Pokémon en esta zona!"))
  353.       elsif  $PokemonGlobal.nuzlockeMaps[$game_map.map_id]== -2
  354.         pbDisplay(_INTL("¡Ya has derrotado un Pokémon en esta zona!"))
  355.       else
  356.         pbDisplay(_INTL("¡Tienes que capturar un Pokémon distinto en esta zona!"))
  357.       end
  358.     elsif $PokemonGlobal.nuzlocke["repetidos"]&& $Trainer.hasOwned?(self.battlers[1].pokemon.species)
  359.       pbDisplay(_INTL("¡Ya has capturado a este Pokémon anteriormente!"))
  360.       else
  361.       @assOwned = $Trainer.owned.dup
  362.       assThrowPokeBall(idxPokemon,ball)
  363.     end
  364.   end
  365.  
  366.   def nuzlockeMultipleMaps(mapID,value)
  367.     for i in NUZLOCKEMAPS
  368.       if i.include?(mapID)
  369.         for j in i
  370.           $PokemonGlobal.nuzlockeMaps[j] = value
  371.         end
  372.       end
  373.     end
  374.   end
  375.  
  376. end
  377.  
  378. #=============================================================================#
  379. # ** Tiendas **                                                               #
  380. #=============================================================================#
  381.  
  382. class PokemonMartScreen
  383.  
  384.   def pbBuyScreen
  385.     @scene.pbStartBuyScene(@stock,@adapter)
  386.     item=0
  387.     loop do
  388.       item=@scene.pbChooseBuyItem
  389.       quantity=0
  390.       break if item==0
  391.       itemname=@adapter.getDisplayName(item)
  392.       price=@adapter.getPrice(item)
  393.       if $PokemonGlobal.nuzlocke["tiendas"] && (pbGetPocket(item)==2    || pbGetPocket(item)==5)
  394.         pbDisplayPaused(_INTL("No puedes comprar consumibles."))
  395.         next
  396.       end
  397.       if @adapter.getMoney()<price
  398.         pbDisplayPaused(_INTL("No tienes el dinero suficiente."))
  399.         next
  400.       end
  401.       if pbIsImportantItem?(item)
  402.         if !pbConfirm(_INTL("{1} es una buena elección.\r\nTe costará ${2}. ¿De acuerdo?",itemname,price))
  403.           next
  404.         end
  405.         quantity=1
  406.       else
  407.         maxafford=(price<=0) ? BAGMAXPERSLOT : @adapter.getMoney()/price
  408.         maxafford=BAGMAXPERSLOT if maxafford>BAGMAXPERSLOT
  409.         quantity=@scene.pbChooseNumber(
  410.            _INTL("¿{1}? Buena elección.\r\n¿Cuántas unidades quieres?",itemname),item,maxafford)
  411.         if quantity==0
  412.           next
  413.         end
  414.         price*=quantity
  415.         if !pbConfirm(_INTL("{1}... Y quieres {2}.\r\nTe costará ${3}. ¿De acuerdo?",itemname,quantity,price))
  416.           next
  417.         end
  418.       end
  419.       if @adapter.getMoney()<price
  420.         pbDisplayPaused(_INTL("No tienes el dinero suficiente."))
  421.         next
  422.       end
  423.       added=0
  424.       quantity.times do
  425.         if !@adapter.addItem(item)
  426.           break
  427.         end
  428.         added+=1
  429.       end
  430.       if added!=quantity
  431.         added.times do
  432.           if !@adapter.removeItem(item)
  433.             raise _INTL("Error al borrar objeto guardado")
  434.           end
  435.         end
  436.         pbDisplayPaused(_INTL("No tienes espacio en la Mochila."))
  437.       else
  438.         @adapter.setMoney(@adapter.getMoney()-price)
  439.         for i in 0...@stock.length
  440.           if pbIsImportantItem?(@stock[i]) && $PokemonBag.pbQuantity(@stock[i])>0
  441.             @stock[i]=nil
  442.           end
  443.         end
  444.         @stock.compact!
  445.         pbDisplayPaused(_INTL("¡Aquí tienes!\r\n¡Gracias!"))
  446.         if $PokemonBag
  447.           if quantity>=10 && pbIsPokeBall?(item) &&  hasConst?(PBItems,:PREMIERBALL)
  448.             if @adapter.addItem(getConst(PBItems,:PREMIERBALL))
  449.               pbDisplayPaused(_INTL("También recibes una Honor Ball extra."))
  450.             end
  451.           end
  452.         end
  453.       end
  454.     end
  455.     @scene.pbEndBuyScene
  456.   end
  457.  
  458. end
  459.  
  460. #=============================================================================#
  461. # ** Level Cap **                                                             #
  462. #=============================================================================#
  463.  
  464.  
  465. def PBExperience.pbAddExperience(currexp,expgain,growth)
  466.   if growth>=6 || growth<0
  467.     return ArgumentError.new("El ratio de crecimiento es inválido.")
  468.   end
  469.   if $PokemonGlobal.nuzlocke["levelcap"] && PBExperience.pbGetLevelFromExperience(currexp,growth) >= GYMLVLS[$game_variables[LVL_VAR]]
  470.     exp=currexp
  471.   else
  472.     exp=currexp+expgain
  473.   end  
  474.   maxexp=pbGetExpInternal(PBExperience::MAXLEVEL,growth)
  475.   exp=maxexp if exp>maxexp
  476.   return exp
  477. end
  478.  
  479. ItemHandlers::UseOnPokemon.add(:RARECANDY,proc{|item,pokemon,scene|
  480.    if pokemon.level>=PBExperience::MAXLEVEL || (pokemon.isShadow? rescue false)
  481.      scene.pbDisplay(_INTL("No tendrá ningún efecto."))
  482.      next false
  483.    elsif $PokemonGlobal.nuzlocke["levelcap"] && pokemon.level >= GYMLVLS[$game_variables[LVL_VAR]]
  484.      scene.pbDisplay(_INTL("Por listo te quedas sin caramelo cruck."))
  485.      scene.pbHardRefresh
  486.      next true
  487.    else
  488.      pbChangeLevel(pokemon,pokemon.level+1,scene)
  489.      scene.pbHardRefresh
  490.      next true
  491.    end
  492. })
  493.  
  494. #=============================================================================#
  495. # ** Motes **                                                                 #
  496. #=============================================================================#
  497.  
  498. def pbNickname(pokemon)
  499.   speciesname=PBSpecies.getName(pokemon.species)
  500.   helptext=_INTL("Apodo de {1}",speciesname)
  501.   if $PokemonGlobal.nuzlocke["motes"]
  502.     while pokemon.name.upcase==speciesname.upcase
  503.       newname=pbEnterPokemonName(helptext,0,10,"",pokemon)
  504.       pokemon.name=newname if newname!=""
  505.       Kernel.pbMessage(_INTL("¡Tienes que ponerle un mote a tu Pokémon!")) if pokemon.name.upcase==speciesname.upcase
  506.     end
  507.   elsif Kernel.pbConfirmMessage(_INTL("¿Quieres ponerle un mote a {1}?",speciesname))
  508.     newname=pbEnterPokemonName(helptext,0,10,"",pokemon)
  509.     pokemon.name=newname if newname!=""
  510.   end
  511. end
  512.  
  513. module PokeBattle_BattleCommon
  514.   def pbStorePokemon(pokemon)
  515.     if !(pokemon.isShadow? rescue false)
  516.       if $PokemonGlobal.nuzlocke["motes"]
  517.         species=PBSpecies.getName(pokemon.species)
  518.         while pokemon.name.upcase==species.upcase
  519.           nickname=@scene.pbNameEntry(_INTL("Mote de {1}",species),pokemon)
  520.           pokemon.name=nickname if nickname!=""
  521.           Kernel.pbMessage(_INTL("¡Tienes que ponerle un mote a tu Pokémon!")) if pokemon.name.upcase==species.upcase
  522.         end
  523.       elsif pbDisplayConfirm(_INTL("¿Quieres ponerle un mote a {1}?",pokemon.name))
  524.         species=PBSpecies.getName(pokemon.species)
  525.         nickname=@scene.pbNameEntry(_INTL("Mote de {1}",species),pokemon)
  526.         pokemon.name=nickname if nickname!=""
  527.       end
  528.     end
  529.     oldcurbox=@peer.pbCurrentBox()
  530.     storedbox=@peer.pbStorePokemon(self.pbPlayer,pokemon)
  531.     creator=@peer.pbGetStorageCreator()
  532.     return if storedbox<0
  533.     curboxname=@peer.pbBoxName(oldcurbox)
  534.     boxname=@peer.pbBoxName(storedbox)
  535.     if storedbox!=oldcurbox
  536.       if creator
  537.         pbDisplayPaused(_INTL("La caja \"{1}\" del PC de {2} está llena.",curboxname,creator))
  538.       else
  539.         pbDisplayPaused(_INTL("La caja \"{1}\" del PC de Alguien está llena.",curboxname))
  540.       end
  541.       pbDisplayPaused(_INTL("{1} fue transferido a la caja \"{2}\".",pokemon.name,boxname))
  542.     else
  543.       if creator
  544.         pbDisplayPaused(_INTL("{1} fue transferido al PC de {2}.",pokemon.name,creator))
  545.       else
  546.         pbDisplayPaused(_INTL("{1} fue transferido al PC de Alguien.",pokemon.name))
  547.       end
  548.       pbDisplayPaused(_INTL("Fue guardado en la caja \"{1}\".",boxname))
  549.     end
  550.   end
  551. end
  552.  
  553. #=============================================================================#
  554. # ** FullWipe **                                                              #
  555. #=============================================================================#
  556.  
  557. module Kernel
  558.  
  559.   class << self
  560.     alias_method :assStartOver,:pbStartOver unless method_defined?(:assStartOver)
  561.   end
  562.  
  563.   def self.pbStartOver(gameover=false)
  564.     assStartOver
  565.     if $PokemonGlobal.nuzlocke["fullwipe"] && !$game_switches[NO_NUZLOCKE_SWITCH]
  566.       Kernel.pbMessage(_INTL("\\w[]\\wm\\c[8]\\l[3]Tu Nuzlocke ha acabado aquí, podrás continuar el juego en modo normal."))
  567.       for k,v in $PokemonGlobal.nuzlocke
  568.         $PokemonGlobal.nuzlocke[k] = false
  569.       end
  570.       pbHealAll()
  571.     elsif  !$game_switches[NO_NUZLOCKE_SWITCH] && $PokemonGlobal.nuzlocke["permadeath"]
  572.       res = false
  573.       for i in 0...STORAGEBOXES
  574.         for j in 0...30
  575.          next if !$PokemonStorage[i][j]
  576.          if $PokemonStorage[i][j].hp>0
  577.            res = true; break
  578.          end  
  579.         end
  580.         break if res
  581.        end
  582.       if res
  583.         while pbAllFainted
  584.           Kernel.pbMessage(_INTL("\\w[]\\wm\\c[8]\\l[3]Todo tu equipo ha sido debilitado. Debes rehacerlo con Pokémon vivos."))
  585.           pbPokeCenterPC
  586.         end
  587.       else
  588.         Kernel.pbMessage(_INTL("\\w[]\\wm\\c[8]\\l[3]Tu Nuzlocke ha acabado aquí, podrás continuar el juego en modo normal."))
  589.         for k,v in $PokemonGlobal.nuzlocke
  590.           $PokemonGlobal.nuzlocke[k] = false
  591.         end
  592.         pbHealAll()
  593.       end
  594.     end
  595.   end
  596.  
  597. end
  598.  
  599. #=============================================================================#
  600. # ** Bayas **                                                                 #
  601. #=============================================================================#
  602.  
  603. alias assBerryPlant pbBerryPlant unless defined?(assBerryPlant)
  604. def pbBerryPlant
  605.   if $PokemonGlobal.nuzlocke["bayas"]
  606.     Kernel.pbMessage(_INTL("No puedes replantar las bayas durante el reto del Nuzlocke."))
  607.   else
  608.     assBerryPlant
  609.   end
  610. end
  611.  
  612. #=============================================================================#
  613. # ** Mantener **                                                              #
  614. #=============================================================================#
  615.  
  616. def pbPrepareBattle(battle)
  617.   case $game_screen.weather_type
  618.   when PBFieldWeather::Rain, PBFieldWeather::HeavyRain, PBFieldWeather::Storm
  619.     battle.weather=PBWeather::RAINDANCE
  620.     battle.weatherduration=-1
  621.   when PBFieldWeather::Snow, PBFieldWeather::Blizzard
  622.     battle.weather=PBWeather::HAIL
  623.     battle.weatherduration=-1
  624.   when PBFieldWeather::Sandstorm
  625.     battle.weather=PBWeather::SANDSTORM
  626.     battle.weatherduration=-1
  627.   when PBFieldWeather::Sun
  628.     battle.weather=PBWeather::SUNNYDAY
  629.     battle.weatherduration=-1
  630.   end
  631.   battle.shiftStyle=($PokemonSystem.battlestyle==0) || $PokemonGlobal.nuzlocke["mantener"]
  632.   battle.battlescene=($PokemonSystem.battlescene==0)
  633.   battle.environment=pbGetEnvironment
  634. end
  635.  
  636. #=============================================================================#
  637. # ** Recogida **                                                              #
  638. #=============================================================================#
  639.  
  640. def Kernel.pbPickup(pokemon)
  641.   return if !isConst?(pokemon.ability,PBAbilities,:PICKUP) || pokemon.isEgg?
  642.   return if pokemon.item!=0
  643.   return if rand(10)!=0
  644.   if $PokemonGlobal.nuzlocke["recogida"]
  645.     pickupList=pbDynamicItemList(
  646.      :GREATBALL,
  647.      :REPEL,
  648.      :ESCAPEROPE,
  649.      :ULTRABALL,
  650.      :RARECANDY,
  651.      :SUNSTONE,
  652.      :MOONSTONE,
  653.      :HEARTSCALE,
  654.      :PPUP,
  655.      :MAXELIXIR
  656.     )
  657.     pickupListRare=pbDynamicItemList(
  658.      :NUGGET,
  659.      :KINGSROCK,
  660.      :ETHER,
  661.      :IRONBALL,
  662.      :DESTINYKNOT,
  663.      :ELIXIR,
  664.      :DESTINYKNOT,
  665.      :DESTINYKNOT
  666.     )
  667.  
  668.   else
  669.     pickupList=pbDynamicItemList(
  670.        :POTION,
  671.        :ANTIDOTE,
  672.        :SUPERPOTION,
  673.        :GREATBALL,
  674.        :REPEL,
  675.        :ESCAPEROPE,
  676.        :FULLHEAL,
  677.        :HYPERPOTION,
  678.        :ULTRABALL,
  679.        :REVIVE,
  680.        :RARECANDY,
  681.        :SUNSTONE,
  682.        :MOONSTONE,
  683.        :HEARTSCALE,
  684.        :FULLRESTORE,
  685.        :MAXREVIVE,
  686.        :PPUP,
  687.        :MAXELIXIR
  688.     )
  689.     pickupListRare=pbDynamicItemList(
  690.        :HYPERPOTION,
  691.        :NUGGET,
  692.        :KINGSROCK,
  693.        :FULLRESTORE,
  694.        :ETHER,
  695.        :IRONBALL,
  696.        :DESTINYKNOT,
  697.        :ELIXIR,
  698.        :DESTINYKNOT,
  699.        :LEFTOVERS,
  700.        :DESTINYKNOT
  701.     )
  702.   end
  703.   return if pickupList.length!=18
  704.   return if pickupListRare.length!=11
  705.   randlist=[30,10,10,10,10,10,10,4,4,1,1]
  706.   items=[]
  707.   plevel=[100,pokemon.level].min
  708.   itemstart=(plevel-1)/10
  709.   itemstart=0 if itemstart<0
  710.   for i in 0...9
  711.     items.push(pickupList[itemstart+i])
  712.   end
  713.   items.push(pickupListRare[itemstart])
  714.   items.push(pickupListRare[itemstart+1])
  715.   rnd=rand(100)
  716.   cumnumber=0
  717.   for i in 0...11
  718.     cumnumber+=randlist[i]
  719.     if rnd<cumnumber
  720.       pokemon.setItem(items[i])
  721.       break
  722.     end
  723.   end
  724. end
  725.  
  726. #=============================================================================#
  727. # ** Items Salvajes **                                                        #
  728. #=============================================================================#
  729.  
  730. class PokeBattle_Pokemon
  731.   alias assHoldItems wildHoldItems unless method_defined?(:assHoldItems)
  732.   def wildHoldItems
  733.     return [0,0,0] if $PokemonGlobal.nuzlocke["noitem"] && !PKMITEMEXCEPTION.include?(self.species)
  734.     assHoldItems
  735.   end
  736. end
  737.  
  738. #=============================================================================#
  739. # ** Vidas **                                                                 #
  740. #=============================================================================#
  741. class PokeBattle_Battler
  742.   alias assFaint pbFaint unless method_defined?(:assFaint)
  743.   def pbFaint(showMessage=true)
  744.     return true if @fainted
  745.     res = assFaint(showMessage)
  746.     if  $PokemonGlobal.nuzlocke["vidas"] && !$game_switches[NO_NUZLOCKE_SWITCH] && @battle.pbOwnedByPlayer?(@index)
  747.       $PokemonGlobal.nuzlockeVidas -= 1  if $PokemonGlobal.nuzlockeVidas > 0
  748.       if $PokemonGlobal.nuzlockeVidas == 0
  749.         @battle.pbDisplayPaused(_INTL("Te has quedado sin vidas, tu Nuzlocke ha acabado aquí. Podrás continuar el juego en modo normal."))
  750.        
  751.         @battle.decision=2
  752.        
  753.         for k,v in $PokemonGlobal.nuzlocke
  754.           $PokemonGlobal.nuzlocke[k] = false
  755.         end
  756.        
  757.       elsif OVERLAY_VIDAS
  758.         @battle.scene.sprites["overlayV"].bitmap.clear
  759.         pbDrawTextPositions(@battle.scene.sprites["overlayV"].bitmap,[[
  760.         $PokemonGlobal.nuzlockeVidas.to_s,22,8,2,Color.new(255,255,255),Color.new(0,0,0,120),false
  761.         ]])
  762.       end
  763.     end
  764.     return res
  765.   end
  766. end
  767.  
  768. #=============================================================================#
  769. # ** Vidas (interfaz) **                                                      #
  770. #=============================================================================#
  771. class PokeBattle_Scene
  772.  
  773.   alias assBackdrop pbBackdrop unless method_defined?(:assBackdrop)
  774.   def pbBackdrop
  775.     assBackdrop
  776.     if $PokemonGlobal.nuzlocke["vidas"] && OVERLAY_VIDAS
  777.       pbAddSprite("vidas",OVERLAY_VIDAS_X ,OVERLAY_VIDAS_Y,"Graphics/Pictures/Nuzlocke/ball.png",@viewport)
  778.       @sprites["overlayV"] = BitmapSprite.new(37,37,viewport)
  779.       @sprites["overlayV"].z = 999999
  780.       pbSetSystemFont(@sprites["overlayV"].bitmap)  
  781.       @sprites["overlayV"].bitmap.font.size = 23
  782.       @sprites["overlayV"].y= OVERLAY_VIDAS_Y
  783.       @sprites["overlayV"].x= OVERLAY_VIDAS_X
  784.       pbDrawTextPositions(@sprites["overlayV"].bitmap,[[
  785.       $PokemonGlobal.nuzlockeVidas.to_s,22,8,2,Color.new(255,255,255),Color.new(0,0,0,120),false
  786.       ]])
  787.     end
  788.   end
  789.  
  790. end
  791.  
  792. #=============================================================================#
  793. # ** Revivires **                                                             #
  794. #=============================================================================#
  795.  
  796. ItemHandlers::UseOnPokemon.add(:NUZLOCKEREVIVE,proc{|item,pokemon,scene|
  797.    if pokemon.hp>0 || !$PokemonGlobal.nuzlocke["permadeath"]
  798.      scene.pbDisplay(_INTL("No tendrá ningún efecto."))
  799.      next false
  800.    else
  801.      pokemon.healHP
  802.      pokemon.healStatus
  803.      scene.pbRefresh
  804.      scene.pbDisplay(_INTL("{1} ha resucitado.",pokemon.name))
  805.      next true
  806.    end
  807. })
  808.  
  809. def assNuzlockeHelp()
  810.   if $PokemonGlobal.nuzlockeHelp
  811.     Kernel.pbReceiveItem(:NUZLOCKEREVIVE)
  812.   end
  813. end
  814.  
  815. #=============================================================================#
  816. # ** Compatibilidad con partidas antiguas **                                  #
  817. #=============================================================================#
  818.  
  819.  
  820. hasMultipleSaves=(PokemonLoad.new(nil).method(:pbStartLoadScreen).arity == 0)
  821.  
  822. if hasMultipleSaves
  823.   class PokemonLoad
  824.     alias assStartLoadScreen pbStartLoadScreen unless method_defined?(:assStartLoadScreen)
  825.     def pbStartLoadScreen
  826.       assStartLoadScreen()
  827.       $PokemonGlobal.nuzlocke ||= {
  828.         "permadeath"  => false,
  829.         "captura"     => false,
  830.         "repetidos"   => false,
  831.         "tiendas"     => false,
  832.         "consumibles" => false,
  833.         "levelcap"    => false,
  834.         "motes"       => false,
  835.         "fullwipe"    => false,
  836.         "bayas"       => false,
  837.         "mantener"    => false,
  838.         "recogida"    => false,
  839.         "noitem"      => false,
  840.         "vidas"       => false
  841.       }
  842.     end
  843.   end
  844. else
  845.   class PokemonLoad
  846.     alias assStartLoadScreen pbStartLoadScreen unless method_defined?(:assStartLoadScreen)
  847.     def pbStartLoadScreen(savenum=0,auto=nil,savename="Save Slot 1")
  848.       assStartLoadScreen(savenum,auto,savename)
  849.       $PokemonGlobal.nuzlocke ||= {
  850.         "permadeath"  => false,
  851.         "captura"     => false,
  852.         "repetidos"   => false,
  853.         "tiendas"     => false,
  854.         "consumibles" => false,
  855.         "levelcap"    => false,
  856.         "motes"       => false,
  857.         "fullwipe"    => false,
  858.         "bayas"       => false,
  859.         "mantener"    => false,
  860.         "recogida"    => false,
  861.         "noitem"      => false,
  862.         "vidas"       => false
  863.       }
  864.     end
  865.   end
  866. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement