View Single Post
  #5    
Old July 17th, 2013 (06:33 AM).
jim42's Avatar
jim42
 
Join Date: Jul 2009
Gender: Male
Okay so this is a huge necropost. Sorry if that's a problem. I've gone back to my Starter Selection screen, and rewritten it from the ground up in order to be able to accept parameters such that it can be initialised with any three Pokémon as specified in the method call.

What I've built seems more or less structurally sound, but I've come to realise the variables passed into the method call have no way of reaching their target destinations. The code compiles, but throws an exception when called due to the "missing" variable values.

As far as I've seen, the only self-contained way I can pass those variables all the way down to the required code is to pass them through each and every method along the way. It's pretty safe to say that with several variables this becomes quite lengthy and unpleasant to read. Is there an easier way by which I might pass these variables though to their intended code?

I've included the code below for your convenience.

Spoiler:
Code:
#==============================================================================#
# Pokémon Starter Selection module Version 1.1
#==============================================================================#
# This is a script to display and handle a basic starter selection scene. It   #
# displays three Pokeballs, their corresponding Pokemon, and their basic data. #
# The player may use the arrow keys to select a Pokemon, and the C input to    #
# confirm their selection.                                                     #
#                                                                              #
# The method can be called by using a script command in an event containing    #
# the string, "pbShowStarterSelection(<x>, <y>, <z>, <a>)", where <x>, <y> and #
# <z> are the species one wishes to display as starters, and where <a> is an   #
# optional value (false by default) to determine whether the acquisition and   #
# nicknaming prompts are displayed.
#==============================================================================#
# Copyright Aaron Richards a.k.a. BlackWaltzTheThird, 2012                     #
#==============================================================================#

#CHANGED 2153 27 JUN 13 included in new project
#CHANGED 2358 17 JUL 13 updated to version 1.1; changes too numerous to tag

class PokemonStarterSelectionScene
  def update
    pbUpdateSpriteHash(@sprites)
  end
  
  def pbStartScene
    @sprites={}
    @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
    @viewport.z=99999
    addBackgroundPlane(@sprites,"bg","StarterSelectionBackground_BW3rd",@viewport)
    @sprites["overlay"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
    pbSetSystemFont(@sprites["overlay"].bitmap)
    pbDrawStarterSelection
    pbFadeInAndShow(@sprites) { update }
  end
  
  def pbDrawStarterSelection
    overlay=@sprites["overlay"].bitmap
    overlay.clear
    shadowColor=Color.new(72,72,72)
    baseColor=Color.new(185,185,185)
    textPositions=[]
    imagePositions=[]
    
    imagePositions.push(["Graphics/Pictures/StarterSelectionForeground_BW3rd",0,0,0,0,-1,-1])
    
    call variables need to get to this section mainly (starterOne, etc)    
    if $game_variables[26]!=0
      textPositions.push([_INTL("Pokémon"),370,72,1,
                         baseColor,shadowColor])
      if $game_variables[26]==1
        textPositions.push([_INTL("{1}",PBSpecies.getName(starterOne)),
                                  16,40,1, baseColor,shadowColor])
        textPositions.push([_INTL("{1}",pbGetMessage(MessageTypes::Kinds,starterOne)),
                                  370, 40, baseColor,shadowColor])
        imagePositions.push([_INTL("Graphics/Battlers/%03d",starterOne),180,8,0,0,-1,-1])
        imagePositions.push(["Graphics/Pictures/boxpoint2",96,170,0,0,-1,-1])
        pbPlayCry(starterOne)
      elsif $game_variables[26]==2
        textPositions.push([_INTL("{1}",PBSpecies.getName(starterTwo)),
                                  16,40,1, baseColor,shadowColor])
        textPositions.push([_INTL("{1}",pbGetMessage(MessageTypes::Kinds,starterTwo)),
                                  370, 40, baseColor,shadowColor])
        imagePositions.push([_INTL("Graphics/Battlers/%03d",starterTwo),180,8,0,0,-1,-1])
        imagePositions.push(["Graphics/Pictures/boxpoint2",240,200,0,0,-1,-1])
        pbPlayCry(starterTwo)
      elsif $game_variables[26]==3
        textPositions.push([_INTL("{1}",PBSpecies.getName(starterThree)),
                                  16,40,1, baseColor,shadowColor])
        textPositions.push([_INTL("{1}",pbGetMessage(MessageTypes::Kinds,starterThree)),
                                  370, 40, baseColor,shadowColor])
        imagePositions.push([_INTL("Graphics/Battlers/%03d",starterThree),180,8,0,0,-1,-1])
        imagePositions.push(["Graphics/Pictures/boxpoint2",400,170,0,0,-1,-1])
        pbPlayCry(starterThree)
      end
    end     
    
    pbDrawImagePositions(overlay,imagePositions)
    pbDrawTextPositions(overlay,textPositions)
    
    typebitmap=AnimatedBitmap.new(_INTL("Graphics/Pictures/pokedexTypes"))
    type1rect=Rect.new(0,CHANGEME*32,96,32)
    type2rect=Rect.new(0,CHANGEME2*32,96,32)
    @sprites["overlay"].bitmap.blt(16,72,typebitmap.bitmap,type1rect)
    @sprites["overlay"].bitmap.blt(50,72,typebitmap.bitmap,type2rect) if type1!=type2
    typebitmap.dispose
  end
  
  def pbStarterSelection
    loop do
      Graphics.update
      Input.update
      self.update
      if Input.trigger?(Input::LEFT)
        $game_variables[26]-=1
        if $game_variables[26]<1
          $game_variables[26]+=3
        end            
        pbPlayCursorSE()
        pbDrawStarterSelection
      elsif Input.trigger?(Input::RIGHT) 
        $game_variables[26]+=1
        if $game_variables[26]>3
          $game_variables[26]-=3
        end
        pbPlayCursorSE()
        pbDrawStarterSelection
      elsif Input.trigger?(Input::C)
        if Kernel.pbConfirmMessage(_INTL("Is this the Pokémon you want?"))
          if namelater
            pbAddToPartySilent(PokeBattle_Pokemon.new(pbGetStarterSelected,5,$Trainer))
          else
            pbAddToParty(PokeBattle_Pokemon.new(pbGetStarterSelected,5,$Trainer))
          end
          $game_variables[26]==0
          return
        end
      end       
    end 
  end
  
  def pbGetStarterSelected
    if $game_variables[26]==1
      starterchosen=starterOne
    elsif $game_variables[26]==2
      starterchosen=starterTwo
    elsif $game_variables[26]==3
      starterchosen=starterThree
    end
    return starterchosen
  end
  
  def pbEndScene
    pbFadeOutAndHide(@sprites) { update }
    pbDisposeSpriteHash(@sprites)
    @viewport.dispose
  end
end

class PokemonStarterSelection
  def initialize(scene)
    @scene=scene
  end

  def pbStartScreen
    @scene.pbStartScene
    @scene.pbStarterSelection
    @scene.pbEndScene
  end
end

method called here with three or four parameters.   
def pbShowStarterSelection(starterOne, starterTwo, starterThree, nameLater=false)
  pbFadeOutIn(99999) {
     scene=PokemonStarterSelectionScene.new
     screen=PokemonStarterSelection.new(scene)
     screen.pbStartScreen
  }
end
Reply With Quote