Changed: SpriteWindow --- Left +++ Right @@ -3159,5 +3159,6 @@ dims=[0,0] cwidth=maxwidth<0 ? Graphics.width : maxwidth - getLineBrokenChunks(self.contents,text,cwidth-self.borderX-SpriteWindow_Base::TEXTPADDING,dims,true) + getLineBrokenChunks(self.contents,text, + cwidth-self.borderX-SpriteWindow_Base::TEXTPADDING,dims,true) return dims end @@ -3191,4 +3192,9 @@ attr_reader :shadowColor attr_accessor :letterbyletter + attr_reader :lineHeight + def lineHeight(value) + @lineHeight=value + self.text=self.text + end def text=(value) setText(value) @@ -3347,4 +3353,5 @@ @scrollY=0 @nodraw=false + @lineHeight=32 @linesdrawn=0 @bufferbitmap=nil @@ -3393,5 +3400,5 @@ cwidth=maxwidth<0 ? Graphics.width : maxwidth chars=getFormattedTextForDims( - self.contents,0,0,cwidth-self.borderX-2-6,-1,text,32,true) + self.contents,0,0,cwidth-self.borderX-2-6,-1,text,@lineHeight,true) for ch in chars dims[0]=[dims[0],ch[1]+ch[3]].max @@ -3477,9 +3484,6 @@ allocPause moveCursor() - else - @endOfText=Rect.new(rcdst.x+rcdst.width,rcdst.y,8,1) - end end @@ -3520,5 +3524,5 @@ def updateInternal curcharskip=@frameskip<0 ? @frameskip.abs : 1 - visiblelines=(self.height-self.borderY)/32 + visiblelines=(self.height-self.borderY)/@lineHeight if @textchars[@curchar]=="\1" if !@pausing @@ -3531,9 +3535,9 @@ elsif @textchars[@curchar]=="\n" if @linesdrawn>=visiblelines-1 - if @scrollstate<32 - @scrollstate+=8 - @scrollY+=8 + if @scrollstate<@lineHeight + @scrollstate+=[(@lineHeight/4),1].max + @scrollY+=[(@lineHeight/4),1].max end - if @scrollstate>=32 + if @scrollstate>=@lineHeight @realframes+=1 if @realframes>=@frameskip || @frameskip<0 @@ -3912,6 +3916,121 @@ end +class Plane + def update; end + def refresh; end +end + +class LargePlane < Plane + # This class works around a limitation that planes + # are always 640 by 480 pixels in size regardless + # of the window's size. + def initialize(viewport=nil) + @__sprite=Sprite.new(viewport) + @__disposed=false + @__ox=0 + @__oy=0 + @__bitmap=nil + @__visible=true + @__sprite.visible=false + end + def disposed? + return @__disposed + end + def dispose + if !@__disposed + @__sprite.bitmap.dispose if @__sprite.bitmap + @__sprite.dispose + @__sprite=nil + @__bitmap=nil + @__disposed=true + end + end + def ox; @__ox; end + def oy; @__oy; end + def ox=(value); @__ox=value; refresh; end + def oy=(value); @__oy=value; refresh; end + def bitmap + return @__bitmap + end + def bitmap=(value) + if value==nil + if @__bitmap!=nil + @__bitmap=nil + refresh + end + elsif @__bitmap!=value && !value.disposed? + @__bitmap=value + refresh + elsif value.disposed? + if @__bitmap!=nil + @__bitmap=nil + refresh + end + end + end + def viewport; @__sprite.viewport; end + def zoom_x; @__sprite.zoom_x; end + def zoom_y; @__sprite.zoom_y; end + def opacity; @__sprite.opacity; end + def blend_type; @__sprite.blend_type; end + def visible; @__visible; end + def z; @__sprite.z; end + def color; @__sprite.color; end + def tone; @__sprite.tone; end + def zoom_x=(v); + if @__sprite.zoom_x!=v + @__sprite.zoom_x=v; refresh + end + end + def zoom_y=(v); + if @__sprite.zoom_y!=v + @__sprite.zoom_y=v; refresh + end + end + def opacity=(v); @__sprite.opacity=(v); end + def blend_type=(v); @__sprite.blend_type=(v); end + def visible=(v); @__visible=v; @__sprite.visible=(@__visible && !@__bitmap.nil?); end + def z=(v); @__sprite.z=(v); end + def color=(v); @__sprite.color=(v); end + def tone=(v); @__sprite.tone=(v); end + def update; ;end + def refresh + if @__bitmap + dwidth=Graphics.width + dheight=Graphics.height + @__sprite.bitmap=ensureBitmap(@__sprite.bitmap,dwidth,dheight) + @__sprite.bitmap.clear + tileBitmap(@__sprite.bitmap,@__bitmap,@__bitmap.rect) + end + @__sprite.visible=(@__visible && !@__bitmap.nil?) + end + private + def ensureBitmap(bitmap,dwidth,dheight) + if !bitmap||bitmap.disposed?||bitmap.width0 + top-=srcbitmap.height if top>0 + y=top;while y[1,"uuuu"], + "PlayerA"=>[2,"essssss",:PBTrainers], + "PlayerB"=>[3,"essssss",:PBTrainers], + "PlayerC"=>[4,"essssss",:PBTrainers], + "PlayerD"=>[5,"essssss",:PBTrainers], + "StorageCreator"=>[6,"s"], + "WildBattleBGM"=>[7,"s"], + "TrainerBattleBGM"=>[8,"s"], + "WildVictoryME"=>[9,"s"], + "TrainerVictoryME"=>[10,"s"], + "TextSkin"=>[11,"s"], + "SurfBGM"=>[12,"s"], + "BicycleBGM"=>[13,"s"] + } + NonGlobalTypes={ + "Outdoor"=>[1,"b"], + "EscapePoint"=>[2,"uuu"], + "ShowArea"=>[3,"b"], + "Bicycle"=>[4,"b"], + "BicycleAlways"=>[5,"b"], + "HealingSpot"=>[6,"uuu"], + "Weather"=>[7,"eu",["","Rain","Storm","Snow","Sandstorm"]], + "MapPosition"=>[8,"uuu"], + "DiveMap"=>[9,"u"], + "DarkMap"=>[10,"b"], + "SafariMap"=>[11,"b"], + "SnapEdges"=>[12,"b"], + "Dungeon"=>[13,"b"] + } +end + def pbClearData Changed: Scene_Intro --- Left +++ Right @@ -1,155 +1,92 @@ -#============================================================================== -# Splash Screen -#============================================================================== -# Sephiroth Spawn -# 01.08.06 -# Version 2 -# Modified by Harshboy/Flameguru -#-------------------------------------------------------------------------- -# Call Using $scene = Scene_Intro.new([pics], splash_screen) -#============================================================================== -#============================================================================== -# ** Scene_Intro -#============================================================================== +class IntroEventScene < EventScene + def initialize(pics,splash,viewport=nil) + super(nil) + @pics=pics + @splash=splash + @pic=addImage(0,0,"") + @pic.moveOpacity(0,0,0) # fade to opacity 0 in 0 frames after waiting 0 frames + @index=0 + data_system = pbLoadRxData("Data/System") + pbBGMPlay(data_system.title_bgm) + openPic(self,nil) + end + def openPic(scene,args) + onCTrigger.clear + @pic.name="Graphics/Titles/"+@pics[@index] + @pic.moveOpacity(10,0,255) # fade to opacity 255 in 10 frames after waiting 0 frames + pictureWait + @timer=0 # reset the timer + onUpdate.set(method(:timer)) # call timer every frame + onCTrigger.set(method(:closePic)) # call closePic when C key is pressed + end + def timer(scene,args) + @timer+=1 + if @timer>80 + @timer=0 + closePic(scene,args) # Close the picture + end + end + def splashUpdate(scene,args) + if Input.press?(Input::DOWN) && + Input.press?(Input::B) && + Input.press?(Input::CTRL) + closeSplashDelete(scene,args) + end + end + def openSplash(scene,args) + onCTrigger.clear + onUpdate.clear + @pic.name="Graphics/Titles/"+@splash + @pic.moveOpacity(10,0,255) + pictureWait + onCTrigger.set(method(:closeSplash)) # call closeSplash when C key is pressed + end + def closePic(scene,args) + onCTrigger.clear + onUpdate.clear + @pic.moveOpacity(15,0,0) + pictureWait + @index+=1 # Move to the next picture + if @index>=@pics.length + openSplash(scene,args) + else + openPic(scene,args) + end + end + def closeSplashDelete(scene,args) + onCTrigger.clear + onUpdate.clear + @pic.moveOpacity(15,0,0) + pictureWait + pbBGMStop() + scene.dispose # Close the scene + sscene=PokemonLoadScene.new + sscreen=PokemonLoad.new(sscene) + sscreen.pbStartDeleteScreen + end + def closeSplash(scene,args) + onCTrigger.clear + onUpdate.clear + @pic.moveOpacity(15,0,0) + pictureWait + pbBGMStop() + scene.dispose # Close the scene + sscene=PokemonLoadScene.new + sscreen=PokemonLoad.new(sscene) + sscreen.pbStartLoadScreen + end +end class Scene_Intro - #-------------------------------------------------------------------------- - # * Object Initialization - #-------------------------------------------------------------------------- def initialize(pics, splash = nil) - @pics, @splash = pics, splash + @pics=pics + @splash=splash end - def setTitle(sprite,title) - @cache={} if !@cache - if @currentTitle!=title - sprite.setBitmap("Graphics/Titles/#{title}") - @currentTitle=title - end - end - #-------------------------------------------------------------------------- - # * Main Processing - #-------------------------------------------------------------------------- def main - # Loads Data System and Game System - data_system = pbLoadRxData("Data/System") - # Loads the Title.mid in Audio/BGM - pbBGMPlay(data_system.title_bgm) - # Instance Variables - @item, @speed, @o_speed, @phase = 0, 15, 20, 0 - # Background Images - @sprite = IconSprite.new(0,0) - setTitle(@sprite, @pics[@item]) - @sprite.opacity = 5 - # Start Logo - @start = IconSprite.new(0,0) - setTitle(@start,"Start") - @start.y, @start.z, @start.opacity = 250, 10, 0 - # Execute transition - Graphics.transition - # Main loop - while $scene == self - # Update game screen - Graphics.update - # Update input information - Input.update - # Frame update - @sprite.update - case @phase - when 0; intro_update # Into Updating - when 1; splash_update # Splash Updating - when 2; to_splash_update # From Intro To Splash Transition - when 3; to_title_update # From Splash to Title Transtion - when 4; toDeleteUpdate - end - end - # Prepare for transition + Graphics.transition(0) + @eventscene=IntroEventScene.new(@pics,@splash) + @eventscene.main Graphics.freeze - # Dispose of Sprites - if @cache - for i in @cache.values - i.dispose - end - end - @sprite.dispose - @start.dispose - end - #-------------------------------------------------------------------------- - # * Frame Update : Intro Images - #-------------------------------------------------------------------------- - def intro_update - # If C is pressed - if Input.trigger?(Input::C) && @speed>=0 - @phase = @splash.nil? ? 3 : 2 - end - # Updates Sprite Opacity - @sprite.opacity += @speed - # Changes Direction - @speed *= -1 if @sprite.opacity >= 255 - # Change Sprite - if @sprite.opacity <= 0 - @item += 1 - @speed *= -1 - @item == @pics.size ? - @phase = @splash.nil? ? 3 : 2 : - setTitle(@sprite,@pics[@item]) - end - end - #-------------------------------------------------------------------------- - # * Frame Update : Splash Image - #-------------------------------------------------------------------------- - def splash_update - # If C is pressed - if Input.trigger?(Input::C) - @phase = 3 - end - if Input.press?(Input::DOWN) && - Input.press?(Input::CTRL) && - Input.press?(Input::B) - @phase=4 - end - # Loads Sprite Splash Bitmap - setTitle(@sprite,@splash) - # Updates Start Logo Opacity - @start.opacity += @o_speed - # Changes Direction - @o_speed *= -1 if @start.opacity >= 255 || @start.opacity <= 0 - # Updates Splash - @sprite.opacity += @speed if @sprite.opacity < 255 - end - #-------------------------------------------------------------------------- - # * Frame Update : Intro To Splash Transistion - #-------------------------------------------------------------------------- - def to_splash_update - @sprite.opacity > 0 ? @sprite.opacity -= @speed : @phase = 1 - end - #-------------------------------------------------------------------------- - # * Frame Update : Splash To Title Transistion - #-------------------------------------------------------------------------- - def to_title_update - # Decrease Splash Opacity - @sprite.opacity -= @speed if @sprite.opacity > 0 - # Decresh Start Logo Opacity - @start.opacity -= @speed if @start.opacity > 0 - # Proceed to Title Screen - if @sprite.opacity <= 0 && @start.opacity <= 0 - pbBGMStop() - sscene=PokemonLoadScene.new - sscreen=PokemonLoad.new(sscene) - sscreen.pbStartLoadScreen - end - end - def toDeleteUpdate - # Decrease Splash Opacity - @sprite.opacity -= @speed if @sprite.opacity > 0 - # Decresh Start Logo Opacity - @start.opacity -= @speed if @start.opacity > 0 - # Proceed to Title Screen - if @sprite.opacity <= 0 && @start.opacity <= 0 - pbBGMStop() - sscene=PokemonLoadScene.new - sscreen=PokemonLoad.new(sscene) - sscreen.pbStartDeleteScreen - end end end Changed: PokemonDebug --- Left +++ Right @@ -814,4 +814,6 @@ commands.add("setmoney",_INTL("SET MONEY")) commands.add("resettrainers",_INTL("RESET TRAINERS")) + commands.add("testwildbattle",_INTL("TEST WILD BATTLE")) + commands.add("testtrainer",_INTL("TEST TRAINER")) commands.add("quickhatch",_INTL("QUICK HATCH")) commands.add("compiledata",_INTL("COMPILE DATA")) @@ -1007,4 +1009,23 @@ pbAddPokemon(species,level) end + end + elsif cmd=="testwildbattle" + species=pbChooseSpeciesOrdered(1) + if species!=0 + params=ChooseNumberParams.new + params.setRange(1,PBExperience::MAXLEVEL) + params.setInitialValue(5) + params.setCancelValue(0) + level=Kernel.pbMessageChooseNumber( + _INTL("Set the Pokémon's level."),params) + if level>0 + pbWildBattle(species,level) + end + end + elsif cmd=="testtrainer" + battle=pbListScreen(_INTL("TEST TRAINER"),TrainerBattleLister.new(0,false)) + if battle + trainerdata=battle[1] + pbTrainerBattle(trainerdata[0],trainerdata[1],"...",false,trainerdata[4],true) end elsif cmd=="usepc" Changed: PokemonSprite --- Left +++ Right @@ -20,10 +20,10 @@ def setPokemonBitmap(pokemon,back=false) @_iconbitmap.dispose if @_iconbitmap - @_iconbitmap=pbLoadPokemonBitmap(pokemon,back) + @_iconbitmap=pokemon ? pbLoadPokemonBitmap(pokemon,back) : nil self.bitmap=@_iconbitmap ? @_iconbitmap.bitmap : nil end def setPokemonBitmapSpecies(pokemon,species,back=false) @_iconbitmap.dispose if @_iconbitmap - @_iconbitmap=pbLoadPokemonBitmapSpecies(pokemon,species,back) + @_iconbitmap=pokemon ? pbLoadPokemonBitmapSpecies(pokemon,species,back) : nil self.bitmap=@_iconbitmap ? @_iconbitmap.bitmap : nil end Changed: Compiler --- Left +++ Right @@ -496,4 +496,6 @@ if enumer.is_a?(Array) file.write(enumer[rec[i]]) + elsif enumer.is_a?(Symbol) || enumer.is_a?(String) + file.write(getConstantName(Object.const_get(enumer.to_sym),rec[i])) elsif enumer.is_a?(Module) file.write(getConstantName(enumer,rec[i])) @@ -671,36 +673,4 @@ class PBTrainers; end -module PokemonMetadata - GlobalTypes={ - "Home"=>[1,"uuuu"], - "PlayerA"=>[2,"essssss",PBTrainers], - "PlayerB"=>[3,"essssss",PBTrainers], - "PlayerC"=>[4,"essssss",PBTrainers], - "PlayerD"=>[5,"essssss",PBTrainers], - "StorageCreator"=>[6,"s"], - "WildBattleBGM"=>[7,"s"], - "TrainerBattleBGM"=>[8,"s"], - "WildVictoryME"=>[9,"s"], - "TrainerVictoryME"=>[10,"s"], - "TextSkin"=>[11,"s"], - "SurfBGM"=>[12,"s"], - "BicycleBGM"=>[13,"s"] - } - NonGlobalTypes={ - "Outdoor"=>[1,"b"], - "EscapePoint"=>[2,"uuu"], - "ShowArea"=>[3,"b"], - "Bicycle"=>[4,"b"], - "BicycleAlways"=>[5,"b"], - "HealingSpot"=>[6,"uuu"], - "Weather"=>[7,"eu",["","Rain","Storm","Snow","Sandstorm"]], - "MapPosition"=>[8,"uuu"], - "DiveMap"=>[9,"u"], - "DarkMap"=>[10,"b"], - "SafariMap"=>[11,"b"], - "SnapEdges"=>[12,"b"] - } -end - def pbCompileMetadata sections=[] @@ -1490,4 +1460,14 @@ end return enumer.const_get(ret.to_sym) + elsif enumer.is_a?(Symbol) || enumer.is_a?(String) + enumer=Object.const_get(enumer.to_sym) + begin + if ret=="" || !enumer.const_defined?(ret) + raise _INTL("Undefined value {1} in {2}\r\n{3}",ret,enumer.name,FileLineData.linereport) + end + rescue NameError + raise _INTL("Incorrect value {1} in {2}\r\n{3}",ret,enumer.name,FileLineData.linereport) + end + return enumer.const_get(ret.to_sym) elsif enumer.is_a?(Array) idx=findIndex(enumer){|item| ret==item} @@ -1752,5 +1732,136 @@ end +def pbWriteDefaultTypes + if !pbRgssExists?("Data/types.dat") && !FileTest.exist?("PBS/types.txt") + File.open("PBS/types.txt","w"){|f| +fx=<>1 @@ -520,16 +517,14 @@ pokedata.write(sprintf("%d,%s",alevel,getConstantName(PBMoves,move))) end - atkdata.close pokedata.write("\r\n") pokedata.write("EggMoves=") - File.open("Data/eggEmerald.dat","rb"){|f| - f.pos=(i-1)*8 - offset=f.fgetdw - length=f.fgetdw - if length>0 - f.pos=offset + eggEmerald.pos=(i-1)*8 + offset=eggEmerald.fgetdw + length=eggEmerald.fgetdw + if length>0 + eggEmerald.pos=offset first=true j=0; loop do break unless j0 + self.y=@spriteY-@spriteYExtra + @spriteYExtra=0 + end + @selected=value + end def visible=(value) @spriteVisible=value if !@updating @@ -379,14 +374,19 @@ @updating=true if ((@frame/9).floor&1)==1 && @selected==1 # When choosing commands for this Pokémon + @spriteYExtra=2 + else + @spriteYExtra=0 + end + if ((@frame/9).floor&1)==1 && @selected==1 # When choosing commands for this Pokémon self.x=@spriteX - self.y=@spriteY+2 + self.y=@spriteY+@spriteYExtra self.visible=@spriteVisible elsif @selected==2 # When targeted or damaged self.x=@spriteX - self.y=@spriteY + self.y=@spriteY+@spriteYExtra self.visible=(@frame%10<7) elsif self.x=@spriteX - self.y=@spriteY + self.y=@spriteY+@spriteYExtra self.visible=@spriteVisible end @@ -738,8 +738,10 @@ @endspritey=factor*2+halfY # from center @endspritey+=(Graphics.height-320) - @shadowY=@spritey+16 # from top - @shadowX=@spritex+32 # from left + @shadowY=@spritey+18 # from top + @shadowX=@spritex-32 # from left + @shadowVisible=(metrics[2][pkmn.species]>0) @endspritey+=16 if !doublebattle @endspritey+=16 if doublebattle && pkmn.index==1 + @shadowY-=16 if doublebattle && pkmn.index==3 @stepspritey=(@spritey-@endspritey) @zoomstep=(1.0-STARTZOOM)/SPRITESTEPS @@ -805,4 +807,9 @@ @PokemonBattlerSprite.zoom_x>=1.0 @animdone=true + if @spritehash["shadow#{@pkmn.index}"] + @spritehash["shadow#{@pkmn.index}"].x=@shadowX + @spritehash["shadow#{@pkmn.index}"].y=@shadowY + @spritehash["shadow#{@pkmn.index}"].visible=@shadowVisible + end end @pokeballsprite.bitmap=@currentBitmap.bitmap @@ -812,4 +819,6 @@ def pokeballThrow(ball,shakes,targetBattler) balltype=@battle.pbGetBallType(ball) + oldvisible=@sprites["shadow#{targetBattler}"].visible + @sprites["shadow#{targetBattler}"].visible=false ball0=sprintf("Graphics/Pictures/ball%02d_0",balltype) ball1=sprintf("Graphics/Pictures/ball%02d_1",balltype) @@ -895,4 +904,7 @@ break if !pictureBall.running? && !picturePoke.running? end + if shakes<4 + @sprites["shadow#{targetBattler}"].visible=oldvisible + end spriteBall.dispose end @@ -1512,7 +1524,13 @@ @sprites["trainer2"].y-=@sprites["trainer2"].bitmap.height-128 end + @sprites["shadow0"]=IconSprite.new(0,0,@viewport) + pbAddSprite("shadow1",0,0+@yoffset,"Graphics/Pictures/enemyshadow.png",@viewport) + @sprites["shadow1"].visible=false @sprites["pokemon0"]=PokemonBattlerSprite.new(battle.doublebattle,0,@viewport) @sprites["pokemon1"]=PokemonBattlerSprite.new(battle.doublebattle,1,@viewport) if battle.doublebattle + pbAddSprite("shadow3",0,0+@yoffset,"Graphics/Pictures/enemyshadow.png",@viewport) + @sprites["shadow3"].visible=false + @sprites["shadow2"]=IconSprite.new(0,0,@viewport) @sprites["pokemon3"]=PokemonBattlerSprite.new(battle.doublebattle,3,@viewport) @sprites["pokemon2"]=PokemonBattlerSprite.new(battle.doublebattle,2,@viewport) @@ -1573,4 +1591,6 @@ @sprites["pokemon1"].setPokemonBitmap(@battle.party2[0],false) @sprites["pokemon1"].x=-192 # ends at 144*2 + @sprites["shadow1"].x=-192+16*2 + @sprites["shadow1"].y=65*2+@yoffset species=@battle.party2[0].species metrics=load_data("Data/metrics.dat") @@ -1579,4 +1599,5 @@ @sprites["pokemon1"].y=factor*2+16+@yoffset @sprites["pokemon1"].visible=true + @sprites["shadow1"].visible=(metrics[2][species]>0) pbPositionPokemonSprite( @sprites["pokemon1"], @@ -1590,7 +1611,11 @@ @sprites["pokemon3"].color=Color.new(0,0,0,160) @sprites["pokemon1"].x=-144 + @sprites["shadow1"].x=-144+16*2 @sprites["pokemon1"].y+=8 + @sprites["shadow1"].y=65*2+@yoffset+8 @sprites["pokemon3"].setPokemonBitmap(@battle.party2[1],false) @sprites["pokemon3"].x=-240 + @sprites["shadow3"].x=-240+16*2 + @sprites["shadow3"].y=65*2+@yoffset species=@battle.party2[1].species metrics=load_data("Data/metrics.dat") @@ -1599,4 +1624,5 @@ @sprites["pokemon3"].y=factor*2+8+@yoffset @sprites["pokemon3"].visible=true + @sprites["shadow3"].visible=(metrics[2][species]>0) pbPositionPokemonSprite( @sprites["pokemon3"], @@ -1621,4 +1647,6 @@ @sprites["enemybase"].x+=4 @sprites["playerbase"].x-=4 + @sprites["shadow1"].x+=4 + @sprites["shadow3"].x+=4 if @sprites["shadow3"] trainersprite1.x+=4 trainersprite2.x+=4 if trainersprite2 @@ -1680,4 +1708,5 @@ @briefmessage=false if @battle.pbIsOpposing?(battlerindex) + @sprites["shadow#{battlerindex}"].visible=false else spritePoke=@sprites["pokemon#{battlerindex}"] @@ -2195,5 +2224,7 @@ def pbDamageAnimation(pkmn,effectiveness) pkmnsprite=@sprites["pokemon#{pkmn.index}"] + shadowsprite=@sprites["shadow#{pkmn.index}"] sprite=@sprites["battler#{pkmn.index}"] + oldshadowvisible=shadowsprite.visible oldvisible=sprite.visible sprite.selected=2 @@ -2213,4 +2244,7 @@ 8.times do pkmnsprite.visible=!pkmnsprite.visible + if oldshadowvisible + shadowsprite.visible=!shadowsprite.visible + end 4.times do pbGraphicsUpdate @@ -2251,4 +2285,5 @@ pbInputUpdate end + @sprites["shadow#{pkmn.index}"].visible=false pkmnsprite=@sprites["pokemon#{pkmn.index}"] pkmnsprite.visible=false @@ -2374,12 +2409,24 @@ def pbAnimation(moveid,attacker,opponent,side=true) - -end - -def pbAnimation(moveid,attacker,opponent,side=true) animid=pbFindAnimation(moveid) return if !animid animations=load_data("Data/PkmnAnimations.rxdata") - pbAnimationCore(animations[animid],attacker,opponent,side) + pbSaveShadows { + pbAnimationCore(animations[animid],attacker,opponent,side) + } +end + +def pbSaveShadows + shadows=[] + for i in 0...4 + s=@sprites["shadow#{i}"] + shadows[i]=s ? s.visible : false + s.visible=false if s + end + yield + for i in 0...4 + s=@sprites["shadow#{i}"] + s.visible=shadows[i] if s + end end Changed: PokemonLoad --- Left +++ Right @@ -83,11 +83,16 @@ # location of fonts (relative to game folder) Source = 'Fonts/' - # location of fonts after installation - if ENV['SystemRoot'] - Dest = ENV['SystemRoot'] + '\\Fonts\\' - elsif ENV['windir'] - Dest = ENV['windir'] + '\\Fonts\\' - else - Dest = '\\Windows\\Fonts\\' + def self.getFontFolder + fontfolder=MiniRegistry.get(MiniRegistry::HKEY_CURRENT_USER, + "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ShellFolders", + "Fonts") + return fontfolder+"\\" if fontfolder + if ENV['SystemRoot'] + return ENV['SystemRoot'] + '\\Fonts\\' + elsif ENV['windir'] + return ENV['windir'] + '\\Fonts\\' + else + return '\\Windows\\Fonts\\' + end end AFR = Win32API.new('gdi32', 'AddFontResource', ['P'], 'L') @@ -117,6 +122,7 @@ filesExist=true fontsExist=true + dest=self.getFontFolder() for i in 0...Names.size - if !FileTest.exist?(Dest + Filenames[i]) + if !FileTest.exist?(dest + Filenames[i]) filesExist=false end @@ -134,5 +140,5 @@ end end - return if !exist # Exit if no source fonts exist + return if !exist # Exit if not all source fonts exist Kernel.pbMessage(_INTL("One or more fonts used in this game do not exist on the system.\1")) Kernel.pbMessage(_INTL("The game can be played, but the look of the game's text will not be optimal.\1")) @@ -140,9 +146,9 @@ for i in 0...Filenames.size f = Filenames[i] - if FileTest.exist?(Dest + f) && !Font.exist?(Names[i]) - File.delete(Dest + f) rescue nil + if FileTest.exist?(dest + f) && !Font.exist?(Names[i]) + File.delete(dest + f) rescue nil end # check if already installed... - if not FileTest.exist?(Dest + f) + if not FileTest.exist?(dest + f) # check to ensure font is in specified location... if RTP.exists?(Source + f) @@ -150,12 +156,13 @@ succeeded=false begin - copy_file(pbResolveFont(f), Dest + f) + copy_file(pbResolveFont(f), dest + f) # add font resource - AFR.call(Dest + f) + AFR.call(dest + f) # add entry to win.ini/registry WPS.call('Fonts', Names[i] + ' (TrueType)', f) - succeeded=FileTest.exist?(Dest + f) + succeeded=FileTest.exist?(dest + f) rescue SystemCallError # failed + p $!.message,"#{$!.class}" succeeded=false end @@ -166,4 +173,6 @@ end end + else + success.push(Names[i]) # assume success end end Changed: PokemonBugContest --- Left +++ Right @@ -137,5 +137,4 @@ $game_temp.player_new_y = @start[2] $game_temp.player_new_direction = @start[3] - $MapFactory.setup(@start[0]) $scene.transfer_player }