Changed: PokemonSafari @@ -88,0 +88,8 @@ +Events.onWildBattleOverride+= proc { |sender,e| + species=e[0] + level=e[1] + handled=e[2] + next if handled[0]!=nil + next if !pbInSafari? + handled[0]=pbSafariBattle(species,level) +} @@ -121,1 +129,1 @@ - pbPokeRadarEndBattle(species,level,decision) + Events.onWildBattleEnd.trigger(nil,species,level,decision) Changed: PokemonMap @@ -27,1 +27,0 @@ - @pokeradar=nil @@ -176,1 +175,0 @@ - attr_accessor :pokeradarBattery @@ -230,1 +228,0 @@ - attr_accessor :pokeradar @@ -232,1 +229,0 @@ - @pokeradar=nil Changed: PokemonDayCare @@ -1,3 +1,0 @@ -#70448546 -begin - @@ -374,1 +371,1 @@ -def pbDayCareOnStepTaken +Events.onStepTaken+=proc {|sender,e| @@ -433,9 +430,1 @@ -end - - -rescue Exception -if $!.is_a?(SystemExit) || "#{$!.class}"=="Reset" -raise $! -else -end -end +} Added: PokemonRoaming Changed: PokemonField @@ -18,0 +18,12 @@ +module EncounterModifier + @@procs=[] + def self.register(p) + @@procs.push(p) + end + def self.trigger(encounter) + for prc in @@procs + encounter=prc.call(encounter) + end + return encounter + end +end @@ -24,0 +36,4 @@ + @@OnStepTaken=Event.new + @@OnWildBattleOverride=Event.new + @@OnWildBattleEnd=Event.new + @@OnWildPokemonCreate=Event.new @@ -30,0 +46,6 @@ + def self.onStepTaken=(v) + @@OnStepTaken=v + end + def self.onStepTaken + @@OnStepTaken + end @@ -35,0 +57,27 @@ + end + # Triggers at the start of a wild battle + def self.onWildBattleOverride=(v) + @@OnWildBattleOverride=v + end + def self.onWildBattleOverride + @@OnWildBattleOverride + end + # Triggers whenever a wild Pokemon battle ends + # Parameters: + # e[0] - Pokemon species + # e[1] - Pokemon level + # e[2] - Battle result (1-win, 2-loss, 3-escaped, 4-caught) + def self.onWildBattleEnd=(v) + @@OnWildBattleEnd=v + end + def self.onWildBattleEnd + @@OnWildBattleEnd + end + # Triggers whenever a wild Pokemon is created + # Parameters: + # e[0] - Pokemon being created + def self.onWildPokemonCreate=(v) + @@OnWildPokemonCreate=v + end + def self.onWildPokemonCreate + @@OnWildPokemonCreate @@ -233,1 +282,0 @@ - @@ -246,1 +294,1 @@ - pbPokeRadarMakeShiny(genwildpoke) + Events.onWildPokemonCreate.trigger(nil,genwildpoke) @@ -309,0 +357,5 @@ + handled=[nil] + Events.onWildBattleOverride.trigger(nil,species,level,handled) + if handled[0]!=nil + return handled[0] + end @@ -369,1 +422,1 @@ - pbPokeRadarEndBattle(species,level,decision) + Events.onWildBattleEnd.trigger(nil,species,level,decision) @@ -571,4 +624,11 @@ - if $PokemonGlobal.pokeradarBattery && - $PokemonGlobal.pokeradarBattery > 0 && - !$PokemonTemp.pokeradar - $PokemonGlobal.pokeradarBattery-=1 + $PokemonGlobal.stepcount=0 if !$PokemonGlobal.stepcount + $PokemonGlobal.stepcount+=1 + $PokemonGlobal.stepcount&=0xFFFFFF + $PokemonGlobal.happinessSteps=0 if !$PokemonGlobal.happinessSteps + $PokemonGlobal.happinessSteps+=1 + if $PokemonGlobal.happinessSteps==256 + for pkmn in $Trainer.party + pkmn.happiness+=1 if pkmn.hp>0 && !pkmn.egg? + pkmn.happiness=255 if pkmn.happiness>255 + end + $PokemonGlobal.happinessSteps=0 @@ -582,16 +642,4 @@ - $PokemonGlobal.happinessSteps=0 if !$PokemonGlobal.happinessSteps - $PokemonGlobal.happinessSteps+=1 - if $PokemonGlobal.happinessSteps==256 - for pkmn in $Trainer.party - pkmn.happiness+=1 if pkmn.hp>0 && !pkmn.egg? - pkmn.happiness=255 if pkmn.happiness>255 - end - $PokemonGlobal.happinessSteps=0 - end - $PokemonGlobal.stepcount=0 if !$PokemonGlobal.stepcount - $PokemonGlobal.stepcount+=1 - $PokemonGlobal.stepcount&=0xFFFFFF - pbDayCareOnStepTaken - if !pbSafariOnStepTaken - return - end + Events.onStepTaken.trigger(nil) + if !pbSafariOnStepTaken + return + end @@ -621,0 +669,1 @@ + encounter=EncounterModifier.trigger(encounter) @@ -632,0 +681,1 @@ + encounter=EncounterModifier.trigger(encounter) @@ -643,5 +693,3 @@ - x=$game_player.x - y=$game_player.y - if pbIsGrassTag?($game_map.terrain_tag(x,y)) && !(Input.press?(Input::CTRL) && $DEBUG) - if !pbPokeRadarEncounter && encounter # must run Poke Radar check first - $PokemonTemp.pokeradar=nil + if pbIsGrassTag?($game_map.terrain_tag($game_player.x,$game_player.y)) + encounter=EncounterModifier.trigger(encounter) + if encounter && !(Input.press?(Input::CTRL) && $DEBUG) @@ -657,4 +705,0 @@ - end - if !$PokemonEncounters.isGrass? || - !pbIsGrassTag?($game_map.terrain_tag($game_player.x,$game_player.y)) - pbPokeRadarCancel @@ -905,1 +949,0 @@ - $PokemonTemp.pokeradar=nil @@ -1078,1 +1121,0 @@ - $PokemonTemp.pokeradar=nil Changed: PokemonRadar @@ -2,1 +2,10 @@ -def pbPokeRadarEncounter + +class PokemonGlobalMetadata + attr_accessor :pokeradarBattery +end + +class PokemonTemp + attr_accessor :pokeradar +end + +EncounterModifier.register(proc {|encounter| @@ -4,0 +13,5 @@ + if !$PokemonEncounters.isGrass? || + !pbIsGrassTag?($game_map.terrain_tag($game_player.x,$game_player.y)) + pbPokeRadarCancel + return encounter + end @@ -5,1 +19,4 @@ - return false if $PokemonEncounters.stepcount<=3 + if $PokemonEncounters.stepcount<=3 + $PokemonTemp.pokeradar=nil if encounter + return encounter + end @@ -18,6 +35,1 @@ - if $PokemonMap.partner - pbDoubleWildBattle(enc[0],enc[1],enc[0],enc[1]) - else - pbWildBattle(enc[0],enc[1]) - end - return true + return enc @@ -27,2 +39,3 @@ - return false -end + $PokemonTemp.pokeradar=nil if encounter + return encounter +}) @@ -68,3 +81,52 @@ -def pbPokeRadarMakeShiny(pokemon) - if $PokemonTemp.pokeradar && - !$PokemonGlobal.bicycle + +####################################### +# +# Using the Poke Radar +# + + +def pbCanUsePokeRadar? + if !$PokemonEncounters.isGrass? + Kernel.pbMessage(_INTL("Can't use that here.")) + return false + end + if $PokemonGlobal.bicycle + Kernel.pbMessage(_INTL("Can't use that while on a bicycle.")) + return false + end + if $PokemonGlobal.surfing + Kernel.pbMessage(_INTL("Can't use that here.")) + return false + end + if $PokemonTemp.pokeradar + Kernel.pbMessage(_INTL("The Poke Radar is already in use.")) + return false + elsif $PokemonGlobal.pokeradarBattery && + $PokemonGlobal.pokeradarBattery > 0 + Kernel.pbMessage(_INTL("The battery is not charged.")) + Kernel.pbMessage(_INTL("You must walk {1} more steps to fully charge the battery.", + $PokemonGlobal.pokeradarBattery)) + return false + else + return true + end +end + +def pbUsePokeRadar + if pbCanUsePokeRadar? + Kernel.pbMessage(_INTL("Used the Poke Radar.")) + $PokemonTemp.pokeradar=[0,0,false,[],0] + $PokemonGlobal.pokeradarBattery=50 + pbPokeRadarHighlightGrass + return true + end + return false +end +####################################### +# +# Event handlers +# + +Events.onWildPokemonCreate+=proc {|sender,e| + pokemon=e[0] + if $PokemonTemp.pokeradar && !$PokemonGlobal.bicycle @@ -88,3 +150,6 @@ -end - -def pbPokeRadarEndBattle(species,level,decision) +} + +Events.onWildBattleEnd+=proc {|sender,e| + species=e[0] + level=e[1] + decision=e[2] @@ -107,31 +172,28 @@ -end - -def pbUsePokeRadar - if !$PokemonEncounters.isGrass? - Kernel.pbMessage(_INTL("Can't use that here.")) - return false - end - if $PokemonGlobal.bicycle - Kernel.pbMessage(_INTL("Can't use that while on a bicycle.")) - return false - end - if $PokemonGlobal.surfing - Kernel.pbMessage(_INTL("Can't use that here.")) - return false - end - if $PokemonTemp.pokeradar - Kernel.pbMessage(_INTL("The Poke Radar is already in use.")) - elsif $PokemonGlobal.pokeradarBattery && - $PokemonGlobal.pokeradarBattery > 0 - Kernel.pbMessage(_INTL("The battery is not charged.")) - Kernel.pbMessage(_INTL("You must walk {1} more steps to fully charge the battery.", - $PokemonGlobal.pokeradarBattery)) - else - Kernel.pbMessage(_INTL("Used the Poke Radar.")) - $PokemonTemp.pokeradar=[0,0,false,[],0] - $PokemonGlobal.pokeradarBattery=50 - pbPokeRadarHighlightGrass - end - return true -end - +} + +Events.onMapUpdate+=proc {|sender,e| + if $PokemonGlobal && $PokemonTemp && $PokemonGlobal.bicycle + $PokemonTemp.pokeradar=nil + end +} + +Events.onStepTaken+=proc {|sender,e| + if $PokemonGlobal.pokeradarBattery && + $PokemonGlobal.pokeradarBattery > 0 && + !$PokemonTemp.pokeradar + $PokemonGlobal.pokeradarBattery-=1 + end + if !$PokemonEncounters.isGrass? || + !pbIsGrassTag?($game_map.terrain_tag($game_player.x,$game_player.y)) + pbPokeRadarCancel + end +} + +Events.onMapChange+=proc {|sender,e| + $PokemonTemp.pokeradar=nil +} + +####################################### +# +# Item handlers +# @@ -144,1 +206,1 @@ - next pbUsePokeRadar ? 1 : 0 + next pbCanUsePokeRadar? ? 2 : 0 Changed: BitmapCache @@ -43,2 +43,2 @@ - @@id_map = {} # obj -> [ref,...] - @@id_rev_map = {} # ref -> obj + @@id_map = {} + @@id_rev_map = {} Changed: PokeBattle_AI @@ -529,0 +529,8 @@ + if !pbCanChooseMove?(index,0,false) && + !pbCanChooseMove?(index,1,false) && + !pbCanChooseMove?(index,2,false) && + !pbCanChooseMove?(index,3,false) && + @battlers[index].turncount && + @battlers[index].turncount>5 + shouldswitch=true + end Changed: Game_System @@ -46,1 +46,0 @@ - echo "#{@playing_bgm}\r\n" Changed: PBAnimation @@ -1,2 +1,0 @@ -#21567388 -begin @@ -517,0 +515,10 @@ +def isReversed(src0,src1,dst0,dst1) + if src0==src1 + return false + elsif src0dst1) + else + return (dst0=0 + # Reverse direction + sprite.mirror=!sprite.mirror + end @@ -596,2 +609,2 @@ - sprite.x=point[0] - sprite.y=point[1] + sprite.x=point[0] + sprite.y=point[1] @@ -606,7 +619,0 @@ - -rescue Exception -if $!.is_a?(SystemExit) || "#{$!.class}"=="Reset" -raise $! -else -end -end Changed: PokemonEditor @@ -1,0 +1,26 @@ + +def pbSerializeMetadata(metadata,mapinfos) + save_data(metadata,"Data/metadata.dat") + File.open("PBS/metadata.txt","wb"){|f| + for i in 0...metadata.length + next if !metadata[i] + f.write(sprintf("[%03d]\r\n",i)) + if i==0 + types=PokemonMetadata::GlobalTypes + else + if mapinfos[i] + f.write(sprintf("# %s\r\n",mapinfos[i].name)) + end + types=PokemonMetadata::NonGlobalTypes + end + for key in types.keys + schema=types[key] + record=metadata[i][schema[0]] + next if record==nil + f.write(sprintf("%s=",key)) + pbWriteCsvRecord(record,f,schema) + f.write(sprintf("\r\n")) + end + end + } +end @@ -1680,23 +1706,1 @@ - save_data(@metadata,"Data/metadata.dat") - File.open("PBS/metadata.txt","wb"){|f| - for i in 0...@metadata.length - next if !@metadata[i] - f.write(sprintf("[%03d]\r\n",i)) - if i==0 - types=PokemonMetadata::GlobalTypes - else - if @mapinfos[i] - f.write(sprintf("# %s\r\n",@mapinfos[i].name)) - end - types=PokemonMetadata::NonGlobalTypes - end - for key in types.keys - schema=types[key] - record=@metadata[i][schema[0]] - next if record==nil - f.write(sprintf("%s=",key)) - pbWriteCsvRecord(record,f,schema) - f.write(sprintf("\r\n")) - end - end - } + pbSerializeMetadata(@metadata,@mapinfos) Changed: PokemonUtilities @@ -1144,0 +1144,1 @@ + Added: PokemonTrading Changed: PokemonBugContest @@ -362,0 +362,8 @@ +Events.onWildBattleOverride+= proc { |sender,e| + species=e[0] + level=e[1] + handled=e[2] + next if handled[0]!=nil + next if !pbInBugContest? + handled[0]=pbBugContestBattle(species,level) +} @@ -413,1 +421,1 @@ - pbPokeRadarEndBattle(species,level,decision) + Events.onWildBattleEnd.trigger(nil,species,level,decision) Changed: PokemonSafari Changed: PokemonMap Changed: PokemonDayCare Added: PokemonRoaming Changed: PokemonField Changed: PokemonRadar Changed: BitmapCache Changed: PokeBattle_AI Changed: Game_System Changed: PBAnimation Changed: PokemonEditor Changed: PokemonUtilities Added: PokemonTrading Changed: PokemonBugContest