Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def pbFindEncounter(encounter,species)
- return false if !encounter
- for i in 0...encounter.length
- next if !encounter[i]
- for j in 0...encounter[i].length
- return true if encounter[i][j][0]==species
- end
- end
- return false
- end
- ################################################################################
- # Shows the "Nest" page of the Pokédex entry screen.
- ################################################################################
- class PokemonNestMapScene
- CursorAnimateDelay = 12.0
- CursorMoveSpeed = 4.0
- def pbStartScene(species,regionmap=-1)
- @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
- @viewport.z=99999
- @mapvp=Viewport.new(16,32,480,320)
- @mapvp.z=100000
- @viewport2=Viewport.new(0,0,Graphics.width,Graphics.height)
- @viewport2.z=100001
- @sprites={}
- @window=SpriteHash.new
- pbRgssOpen("Data/townmap.dat","rb"){|f|
- @mapdata=Marshal.load(f)
- }
- mappos=!$game_map ? nil : pbGetMetadata($game_map.map_id,MetadataMapPosition)
- region=regionmap
- if region<0 # Use player's current region
- region=mappos ? mappos[0] : 0 # Region 0 default
- end
- @sprites["background"]=IconSprite.new(0,0,@viewport)
- @sprites["background"].setBitmap(_INTL("Graphics/Pictures/pokedexNest"))
- @window["map"]=Sprite.new(@mapvp)
- @window["map"].bmp("Graphics/Pictures/#{@mapdata[region][1]}")
- for hidden in REGIONMAPEXTRAS
- if hidden[0]==region && hidden[1]>0 && $game_switches[hidden[1]]
- if !@sprites["map2"]
- @window["map2"]=BitmapSprite.new(480,320,@mapvp)
- @window["map2"].x=@sprites["map"].x; @window["map2"].y=@window["map"].y
- end
- pbDrawImagePositions(@sprites["map2"].bitmap,[
- ["Graphics/Pictures/#{hidden[4]}",
- hidden[2]*PokemonRegionMapScene::SQUAREWIDTH,
- hidden[3]*PokemonRegionMapScene::SQUAREHEIGHT,0,0,-1,-1]
- ])
- end
- end
- @sprites["arrowLeft"] = Sprite.new(@viewport2)
- @sprites["arrowLeft"].bmp("Graphics/Pictures/mapArrowRight")
- @sprites["arrowLeft"].mirror = true
- @sprites["arrowLeft"].center_origins
- @sprites["arrowLeft"].xyz = 12, Graphics.height / 2
- @sprites["arrowRight"] = Sprite.new(@viewport2)
- @sprites["arrowRight"].bmp("Graphics/Pictures/mapArrowRight")
- @sprites["arrowRight"].center_origins
- @sprites["arrowRight"].xyz = Graphics.width - 12, Graphics.height / 2
- @sprites["arrowUp"] = Sprite.new(@viewport2)
- @sprites["arrowUp"].bmp("Graphics/Pictures/mapArrowDown")
- @sprites["arrowUp"].angle = 180
- @sprites["arrowUp"].center_origins
- @sprites["arrowUp"].xyz = Graphics.width / 2, 24
- @sprites["arrowDown"] = Sprite.new(@viewport2)
- @sprites["arrowDown"].bmp("Graphics/Pictures/mapArrowDown")
- @sprites["arrowDown"].center_origins
- @sprites["arrowDown"].xyz = Graphics.width / 2, Graphics.height - 24
- @dirs = []
- @mdirs = []
- @i = 0
- @point=BitmapWrapper.new(PokemonRegionMapScene::SQUAREWIDTH+4,
- PokemonRegionMapScene::SQUAREHEIGHT+4)
- @point.fill_rect(0,0,
- PokemonRegionMapScene::SQUAREWIDTH+4,
- PokemonRegionMapScene::SQUAREHEIGHT+4,Color.new(255,0,0))
- @point2=BitmapWrapper.new(PokemonRegionMapScene::SQUAREWIDTH+4,
- PokemonRegionMapScene::SQUAREHEIGHT+4)
- @point2.fill_rect(4,0,
- PokemonRegionMapScene::SQUAREWIDTH,
- PokemonRegionMapScene::SQUAREHEIGHT+4,Color.new(255,0,0))
- @point3=BitmapWrapper.new(PokemonRegionMapScene::SQUAREWIDTH+4,
- PokemonRegionMapScene::SQUAREHEIGHT+4)
- @point3.fill_rect(0,4,
- PokemonRegionMapScene::SQUAREWIDTH+4,
- PokemonRegionMapScene::SQUAREHEIGHT,Color.new(255,0,0))
- @point4=BitmapWrapper.new(PokemonRegionMapScene::SQUAREWIDTH+4,
- PokemonRegionMapScene::SQUAREHEIGHT+4)
- @point4.fill_rect(4,4,
- PokemonRegionMapScene::SQUAREWIDTH,
- PokemonRegionMapScene::SQUAREHEIGHT,Color.new(255,0,0))
- encdata=load_data("Data/encounters.dat")
- points=[]
- mapwidth=1+PokemonRegionMapScene::RIGHT-PokemonRegionMapScene::LEFT
- j=-1
- for i in 0...RoamingSpecies.length
- s=getID(PBSpecies,RoamingSpecies[i][0])
- if s==species
- j=i
- break
- end
- end
- for enc in encdata.keys
- enctypes=encdata[enc][1]
- if pbFindEncounter(enctypes,species) || (j>-1 && enc==$PokemonGlobal.roamPosition[j])
- mappos=pbGetMetadata(enc,MetadataMapPosition)
- if mappos && mappos[0]==region
- showpoint=true
- for loc in @mapdata[region][2]
- showpoint=false if loc[0]==mappos[1] && loc[1]==mappos[2] &&
- loc[7] && !$game_switches[loc[7]]
- end
- if showpoint
- mapsize=pbGetMetadata(enc,MetadataMapSize)
- if mapsize && mapsize[0] && mapsize[0]>0
- sqwidth=mapsize[0]
- sqheight=(mapsize[1].length*1.0/mapsize[0]).ceil
- for i in 0...sqwidth
- for j in 0...sqheight
- if mapsize[1][i+j*sqwidth,1].to_i>0
- points[mappos[1]+i+(mappos[2]+j)*mapwidth]=true
- end
- end
- end
- else
- points[mappos[1]+mappos[2]*mapwidth]=true
- end
- end
- end
- end
- end
- i=0
- for j in 0...points.length
- if points[j]
- s=SpriteWrapper.new(@mapvp)
- s.x=(j%mapwidth)*PokemonRegionMapScene::SQUAREWIDTH-2
- s.x+=(Graphics.width-@window["map"].bitmap.width)/2
- s.y=(j/mapwidth)*PokemonRegionMapScene::SQUAREHEIGHT-2
- s.y+=(Graphics.height-@window["map"].bitmap.height)/2
- if j>=1 && points[j-1]
- if j>=mapwidth && points[j-mapwidth]
- s.bitmap=@point4
- else
- s.bitmap=@point2
- end
- else
- if j>=mapwidth && points[j-mapwidth]
- s.bitmap=@point3
- else
- s.bitmap=@point
- end
- end
- @window["point#{i}"]=s
- i+=1
- end
- end
- @numpoints=i
- @sprites["mapbottom"]=MapBottomSprite.new(@viewport2)
- @sprites["mapbottom"].maplocation=pbGetMessage(MessageTypes::RegionNames,region)
- @sprites["mapbottom"].mapdetails=_INTL("{1}'s nest",PBSpecies.getName(species))
- if points.length==0
- @sprites["mapbottom"].nonests=true
- end
- return true
- end
- def pbUpdate
- @numpoints.times {|i|
- @window["point#{i}"].opacity=[64,96,128,160,128,96][(Graphics.frame_count/4)%6]
- }
- @sprites["arrowLeft"].visible = @mapscroll && @window.x < 0
- @sprites["arrowRight"].visible = @mapscroll && @window.x > -1 * (@window["map"].bmp.width - 480)
- @sprites["arrowUp"].visible = @mapscroll && @window.y < 0
- @sprites["arrowDown"].visible = @mapscroll && @window.y > -1 * (@window["map"].bmp.height - 320)
- @i += 1
- if @i % 2 == 0
- case @i % 32
- when 0...8
- @sprites["arrowLeft"].x -= 1
- @sprites["arrowRight"].x += 1
- @sprites["arrowUp"].y -= 1
- @sprites["arrowDown"].y += 1
- when 8...24
- @sprites["arrowLeft"].x += 1
- @sprites["arrowRight"].x -= 1
- @sprites["arrowUp"].y += 1
- @sprites["arrowDown"].y -= 1
- when 24...32
- @sprites["arrowLeft"].x -= 1
- @sprites["arrowRight"].x += 1
- @sprites["arrowUp"].y -= 1
- @sprites["arrowDown"].y += 1
- end
- end
- # Map movement
- if @mdirs.include?(6)
- @hor_count ||= 0
- @hor_count += 1
- @window.x = @mx - (PokemonRegionMapScene::SQUAREWIDTH / CursorMoveSpeed.to_f) * @hor_count
- if @hor_count == CursorMoveSpeed
- @mdirs.delete(6)
- @hor_count = nil
- @mx = nil
- end
- end
- if @mdirs.include?(4)
- @hor_count ||= 0
- @hor_count += 1
- @window.x = @mx + (PokemonRegionMapScene::SQUAREWIDTH / CursorMoveSpeed.to_f) * @hor_count
- if @hor_count == CursorMoveSpeed
- @mdirs.delete(4)
- @hor_count = nil
- @mx = nil
- end
- end
- if @mdirs.include?(8)
- @ver_count ||= 0
- @ver_count += 1
- @window.y = @my + (PokemonRegionMapScene::SQUAREHEIGHT / CursorMoveSpeed.to_f) * @ver_count
- if @ver_count == CursorMoveSpeed
- @mdirs.delete(8)
- @ver_count = nil
- @my = nil
- end
- end
- if @mdirs.include?(2)
- @ver_count ||= 0
- @ver_count += 1
- @window.y = @my - (PokemonRegionMapScene::SQUAREHEIGHT / CursorMoveSpeed.to_f) * @ver_count
- if @ver_count == CursorMoveSpeed
- @mdirs.delete(2)
- @ver_count = nil
- @my = nil
- end
- end
- end
- def pbMapScene(listlimits)
- Graphics.transition
- ret=0
- loop do
- Graphics.update
- Input.update
- pbUpdate
- if @mapscroll
- if Input.press?(Input::RIGHT) && ![4,6].any? { |e| @mdirs.include?(e) }
- if @window.x > -1 * (@window["map"].bmp.width - 480)
- $PokemonGlobal.regionMapSel[0] += 1
- @mx = @window.x
- @mdirs << 6
- end
- end
- if Input.press?(Input::LEFT) && ![4,6].any? { |e| @mdirs.include?(e) }
- if @window.x < 0
- $PokemonGlobal.regionMapSel[0] -= 1
- @mx = @window.x
- @mdirs << 4
- end
- end
- if Input.press?(Input::DOWN) && ![2,8].any? { |e| @mdirs.include?(e) }
- if @window.y > -1 * (@window["map"].bmp.height - 320)
- $PokemonGlobal.regionMapSel[1] += 1
- @my = @window.y
- @mdirs << 2
- end
- end
- if Input.press?(Input::UP) && ![2,8].any? { |e| @mdirs.include?(e) }
- if @window.y < 0
- $PokemonGlobal.regionMapSel[1] -= 1
- @my = @window.y
- @mdirs << 8
- end
- end
- else
- if Input.trigger?(Input::LEFT)
- ret=4
- break
- elsif Input.trigger?(Input::RIGHT)
- ret=6
- break
- elsif Input.trigger?(Input::UP) && listlimits&1==0 # If not at top of list
- ret=8
- break
- elsif Input.trigger?(Input::DOWN) && listlimits&2==0 # If not at end of list
- ret=2
- break
- end
- end
- if Input.trigger?(Input::C)
- @mapscroll^=true
- elsif Input.trigger?(Input::B)
- ret=1
- pbPlayCancelSE()
- pbFadeOutAndHide(@sprites)
- #@window.hide # Looks kind of dumb.
- break
- end
- end
- return ret
- end
- def pbEndScene
- pbDisposeSpriteHash(@sprites)
- @window.dispose
- @point.dispose
- @viewport.dispose
- @mapvp.dispose
- @viewport2.dispose
- end
- end
- class PokemonNestMap
- def initialize(scene)
- @scene=scene
- end
- def pbStartScreen(species,region,listlimits)
- @scene.pbStartScene(species,region)
- ret=@scene.pbMapScene(listlimits)
- @scene.pbEndScene
- return ret
- end
- end
- ################################################################################
- # Shows the "Form" page of the Pokédex entry screen.
- ################################################################################
- class PokedexFormScene
- def pbStartScene(species)
- @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
- @viewport.z=99999
- @species=species
- @gender=$Trainer.formlastseen[species][0]
- @form=$Trainer.formlastseen[species][1]
- @available=pbGetAvailable # [name, gender, form]
- @sprites={}
- @sprites["background"]=IconSprite.new(0,0,@viewport)
- @sprites["background"].setBitmap(_INTL("Graphics/Pictures/pokedexForm"))
- @sprites["info"]=BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
- pbSetSystemFont(@sprites["info"].bitmap)
- @sprites["front"]=PokemonSprite.new(@viewport)
- @sprites["back"]=PokemonSprite.new(@viewport)
- @sprites["icon"]=PokemonSpeciesIconSprite.new(@species,@viewport)
- @sprites["icon"].pbSetParams(@species,@gender,@form)
- @sprites["icon"].x=52
- @sprites["icon"].y=290
- pbRefresh
- return true
- end
- def pbUpdate
- pbUpdateSpriteHash(@sprites)
- end
- def pbRefresh
- @sprites["info"].bitmap.clear
- name=""
- for i in @available
- if i[1]==@gender && i[2]==@form
- name=i[0]; break
- end
- end
- text=[
- [sprintf("%s",PBSpecies.getName(@species)),
- (Graphics.width+72)/2,Graphics.height-86,2,
- Color.new(88,88,80),Color.new(168,184,184)],
- [sprintf("%s",name),
- (Graphics.width+72)/2,Graphics.height-54,2,
- Color.new(88,88,80),Color.new(168,184,184)],
- ]
- pbDrawTextPositions(@sprites["info"].bitmap,text)
- @sprites["front"].setSpeciesBitmap(@species,(@gender==1),@form,false,false,false)
- pbPositionPokemonSprite(@sprites["front"],74,96)
- @sprites["back"].setSpeciesBitmap(@species,(@gender==1),@form,false,false,true)
- metrics=load_data("Data/metrics.dat")
- backMetric=metrics[0][@species]
- pbPositionPokemonSprite(@sprites["back"],310,98+16+backMetric*2)
- @sprites["icon"].pbSetParams(@species,@gender,@form)
- end
- def pbGetAvailable
- available=[] # [name, gender, form]
- dexdata=pbOpenDexData
- pbDexDataOffset(dexdata,@species,18)
- genderbyte=dexdata.fgetb
- dexdata.close
- formnames=pbGetMessage(MessageTypes::FormNames,@species)
- if !formnames || formnames==""
- formnames=[""]
- else
- formnames=strsplit(formnames,/,/)
- end
- @gender=0 if genderbyte==0 || genderbyte==255 # Always male or genderless
- @gender=1 if genderbyte==254 # Always female
- if formnames && formnames[0]!=""
- for j in 0...2
- if $Trainer.formseen[@species][j][0] || ALWAYSSHOWALLFORMS # That gender/form has been seen
- if pbResolveBitmap(sprintf("Graphics/Battlers/%sf",getConstantName(PBSpecies,@species))) ||
- pbResolveBitmap(sprintf("Graphics/Battlers/%03df",@species))
- available.push([_INTL("{1} Male",formnames[0]),j,0]) if j==0
- available.push([_INTL("{1} Female",formnames[0]),j,0]) if j==1
- else
- gendertopush=(genderbyte==254) ? 1 : 0
- available.push([formnames[0],gendertopush,0])
- break
- end
- end
- end
- else
- if $Trainer.formseen[@species][0][0] || ALWAYSSHOWALLFORMS # Male/form 0 has been seen
- if genderbyte!=254 && genderbyte!=255 # Not always female & not genderless
- available.push([_INTL("Male"),0,0])
- end
- end
- if $Trainer.formseen[@species][1][0] || ALWAYSSHOWALLFORMS # Female/form 0 has been seen
- if genderbyte!=0 && genderbyte!=255 # Not always male & not genderless
- available.push([_INTL("Female"),1,0])
- end
- end
- if $Trainer.formseen[@species][0][0] || ALWAYSSHOWALLFORMS # Genderless/form 0 has been seen
- if genderbyte==255 # Genderless
- if formnames && formnames.length>1
- available.push([_INTL("One Form"),0,0])
- else
- available.push([_INTL("Genderless"),0,0])
- end
- end
- end
- end
- for i in 1...formnames.length
- for j in 0...2
- if $Trainer.formseen[@species][j][i] || ALWAYSSHOWALLFORMS # That gender/form has been seen
- if pbResolveBitmap(sprintf("Graphics/Battlers/%sf_%d",getConstantName(PBSpecies,@species),i)) ||
- pbResolveBitmap(sprintf("Graphics/Battlers/%03df_%d",@species,i))
- available.push([_INTL("{1} Male",formnames[i]),j,i]) if j==0
- available.push([_INTL("{1} Female",formnames[i]),j,i]) if j==1
- else
- gendertopush=(genderbyte==254) ? 1 : 0
- available.push([formnames[i],gendertopush,i])
- break
- end
- end
- end
- end
- return available
- end
- def pbGetCommands
- commands=[]
- for i in @available
- commands.push(i[0])
- end
- return commands
- end
- def pbChooseForm
- oldgender=@gender
- oldform=@form
- commands=pbGetCommands
- using(cmdwindow=Window_CommandPokemon.new(commands)) {
- cmdwindow.height=128 if cmdwindow.height>128
- cmdwindow.z=@viewport.z+1
- pbBottomRight(cmdwindow)
- for i in 0...@available.length
- if @available[i][1]==@gender && @available[i][2]==@form
- cmdwindow.index=i
- break
- end
- end
- loop do
- oldindex=cmdwindow.index
- Graphics.update
- Input.update
- cmdwindow.update
- pbUpdate
- if cmdwindow.index!=oldindex
- @gender=@available[cmdwindow.index][1]
- @form=@available[cmdwindow.index][2]
- pbRefresh
- end
- if Input.trigger?(Input::B)
- pbPlayCancelSE()
- @gender=oldgender
- @form=oldform
- pbRefresh
- break
- end
- if Input.trigger?(Input::C)
- pbPlayDecisionSE()
- break
- end
- end
- }
- end
- def pbControls(listlimits)
- Graphics.transition
- ret=0
- loop do
- Graphics.update
- Input.update
- pbUpdate
- if Input.trigger?(Input::C)
- pbChooseForm
- elsif Input.trigger?(Input::LEFT)
- ret=4
- break
- elsif Input.trigger?(Input::UP) && listlimits&1==0 # If not at top of list
- ret=8
- break
- elsif Input.trigger?(Input::DOWN) && listlimits&2==0 # If not at end of list
- ret=2
- break
- elsif Input.trigger?(Input::B)
- ret=1
- pbPlayCancelSE()
- pbFadeOutAndHide(@sprites) { pbUpdate }
- break
- end
- end
- $Trainer.formlastseen[@species][0]=@gender
- $Trainer.formlastseen[@species][1]=@form
- return ret
- end
- def pbEndScene
- pbDisposeSpriteHash(@sprites)
- @viewport.dispose
- end
- end
- class PokedexForm
- def initialize(scene)
- @scene=scene
- end
- def pbStartScreen(species,listlimits)
- @scene.pbStartScene(species)
- ret=@scene.pbControls(listlimits)
- @scene.pbEndScene
- return ret
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement