diff --git a/Data/MapInfos.rxdata b/Data/MapInfos.rxdata index 2678f0c71..1accf0216 100644 Binary files a/Data/MapInfos.rxdata and b/Data/MapInfos.rxdata differ diff --git a/Data/Scripts/010_Data/002_PBS data/013_Trainer.rb b/Data/Scripts/010_Data/002_PBS data/013_Trainer.rb index 95aef43f5..1d2a71de5 100644 --- a/Data/Scripts/010_Data/002_PBS data/013_Trainer.rb +++ b/Data/Scripts/010_Data/002_PBS data/013_Trainer.rb @@ -325,6 +325,16 @@ module GameData end pkmn.ability_index = pkmn_data[:ability_index] pkmn.ability = pkmn_data[:ability] + + if $game_switches[SWITCH_DOUBLE_ABILITIES] && pkmn.isFusion? + secondary_ability_index = pkmn.ability_index == 0 ? 1 : 0 + pkmn.ability2_index = secondary_ability_index + pkmn.ability2 = pkmn.getAbilityList[secondary_ability_index][0] + + + print _INTL("Primary: {1}, Secondary: {2}",pkmn.ability.id, pkmn.ability2.id) + end + pkmn.gender = pkmn_data[:gender] || ((trainer.male?) ? 0 : 1) pkmn.shiny = (pkmn_data[:shininess]) ? true : false if pkmn_data[:nature] diff --git a/Data/Scripts/011_Battle/001_Battler/002_Battler_Initialize.rb b/Data/Scripts/011_Battle/001_Battler/002_Battler_Initialize.rb index f64c1962c..cd05c59e1 100644 --- a/Data/Scripts/011_Battle/001_Battler/002_Battler_Initialize.rb +++ b/Data/Scripts/011_Battle/001_Battler/002_Battler_Initialize.rb @@ -22,6 +22,7 @@ class PokeBattle_Battler @hp = @totalhp = 0 @type1 = @type2 = nil @ability_id = nil + @ability2_id = nil @item_id = nil @gender = 0 @attack = @defense = @spatk = @spdef = @speed = 0 @@ -81,6 +82,7 @@ class PokeBattle_Battler @type1 = pkmn.type1 @type2 = pkmn.type2 @ability_id = pkmn.ability_id + @ability2_id = pkmn.ability2_id @item_id = pkmn.item_id @gender = pkmn.gender @attack = pkmn.attack diff --git a/Data/Scripts/011_Battle/001_Battler/003_Battler_ChangeSelf.rb b/Data/Scripts/011_Battle/001_Battler/003_Battler_ChangeSelf.rb index dddffc247..ad2706216 100644 --- a/Data/Scripts/011_Battle/001_Battler/003_Battler_ChangeSelf.rb +++ b/Data/Scripts/011_Battle/001_Battler/003_Battler_ChangeSelf.rb @@ -283,6 +283,7 @@ class PokeBattle_Battler @effects[PBEffects::TransformSpecies] = target.species pbChangeTypes(target) self.ability = target.ability + self.ability2 = target.ability2 if target.ability2 @attack = target.attack @defense = target.defense @spatk = target.spatk diff --git a/Data/Scripts/011_Battle/001_Battler/010_Battler_UseMove_TriggerEffects.rb b/Data/Scripts/011_Battle/001_Battler/010_Battler_UseMove_TriggerEffects.rb index e6f729bc8..dcc21b57c 100644 --- a/Data/Scripts/011_Battle/001_Battler/010_Battler_UseMove_TriggerEffects.rb +++ b/Data/Scripts/011_Battle/001_Battler/010_Battler_UseMove_TriggerEffects.rb @@ -2,19 +2,25 @@ class PokeBattle_Battler #============================================================================= # Effect per hit #============================================================================= + # + + def triggerAbilityEffectsOnHit(move,user,target) + # Target's ability + if target.abilityActive?(true) + oldHP = user.hp + BattleHandlers.triggerTargetAbilityOnHit(target.ability,user,target,move,@battle) + user.pbItemHPHealCheck if user.hp0 && !target.damageState.substitute - # Target's ability - if target.abilityActive?(true) - oldHP = user.hp - BattleHandlers.triggerTargetAbilityOnHit(target.ability,user,target,move,@battle) - user.pbItemHPHealCheck if user.hp116 - textPos.push([@battler.name,@spriteBaseX+8-nameOffset,0,false,NAME_BASE_COLOR,NAME_SHADOW_COLOR]) + nameOffset = nameWidth - 116 if nameWidth > 116 + textPos.push([@battler.name, @spriteBaseX + 8 - nameOffset, 0, false, NAME_BASE_COLOR, NAME_SHADOW_COLOR]) # Draw Pokémon's gender symbol case @battler.displayGender - when 0 # Male - textPos.push([_INTL("♂"),@spriteBaseX+126,0,false,MALE_BASE_COLOR,MALE_SHADOW_COLOR]) - when 1 # Female - textPos.push([_INTL("♀"),@spriteBaseX+126,0,false,FEMALE_BASE_COLOR,FEMALE_SHADOW_COLOR]) + when 0 # Male + textPos.push([_INTL("♂"), @spriteBaseX + 126, 0, false, MALE_BASE_COLOR, MALE_SHADOW_COLOR]) + when 1 # Female + textPos.push([_INTL("♀"), @spriteBaseX + 126, 0, false, FEMALE_BASE_COLOR, FEMALE_SHADOW_COLOR]) end - pbDrawTextPositions(self.bitmap,textPos) + pbDrawTextPositions(self.bitmap, textPos) # Draw Pokémon's level - imagePos.push(["Graphics/Pictures/Battle/overlay_lv",@spriteBaseX+140,16]) if !$game_switches[SWITCH_NO_LEVELS_MODE] - pbDrawNumber(@battler.level,self.bitmap,@spriteBaseX+162,16) if !$game_switches[SWITCH_NO_LEVELS_MODE] + imagePos.push(["Graphics/Pictures/Battle/overlay_lv", @spriteBaseX + 140, 16]) if !$game_switches[SWITCH_NO_LEVELS_MODE] + pbDrawNumber(@battler.level, self.bitmap, @spriteBaseX + 162, 16) if !$game_switches[SWITCH_NO_LEVELS_MODE] # Draw shiny icon if @battler.shiny? - shinyX = (@battler.opposes?(0)) ? 206 : -6 # Foe's/player's + shinyX = (@battler.opposes?(0)) ? 206 : -6 # Foe's/player's - pokeRadarShiny= !@battler.pokemon.debugShiny? && !@battler.pokemon.naturalShiny? - addShinyStarsToGraphicsArray(imagePos,@spriteBaseX+shinyX,35, @battler.pokemon.bodyShiny?,@battler.pokemon.headShiny?,@battler.pokemon.debugShiny?, pokeRadarShiny) + pokeRadarShiny = !@battler.pokemon.debugShiny? && !@battler.pokemon.naturalShiny? + addShinyStarsToGraphicsArray(imagePos, @spriteBaseX + shinyX, 35, @battler.pokemon.bodyShiny?, @battler.pokemon.headShiny?, @battler.pokemon.debugShiny?, pokeRadarShiny) end # Draw Mega Evolution/Primal Reversion icon if @battler.mega? - imagePos.push(["Graphics/Pictures/Battle/icon_mega",@spriteBaseX+8,34]) + imagePos.push(["Graphics/Pictures/Battle/icon_mega", @spriteBaseX + 8, 34]) elsif @battler.primal? - primalX = (@battler.opposes?) ? 208 : -28 # Foe's/player's + primalX = (@battler.opposes?) ? 208 : -28 # Foe's/player's if @battler.isSpecies?(:KYOGRE) - imagePos.push(["Graphics/Pictures/Battle/icon_primal_Kyogre",@spriteBaseX+primalX,4]) + imagePos.push(["Graphics/Pictures/Battle/icon_primal_Kyogre", @spriteBaseX + primalX, 4]) elsif @battler.isSpecies?(:GROUDON) - imagePos.push(["Graphics/Pictures/Battle/icon_primal_Groudon",@spriteBaseX+primalX,4]) + imagePos.push(["Graphics/Pictures/Battle/icon_primal_Groudon", @spriteBaseX + primalX, 4]) end end # Draw owned icon (foe Pokémon only) if @battler.owned? && @battler.opposes?(0) - imagePos.push(["Graphics/Pictures/Battle/icon_own",@spriteBaseX-8,42]) + imagePos.push(["Graphics/Pictures/Battle/icon_own", @spriteBaseX - 8, 42]) end # Draw status icon if @battler.status != :NONE s = GameData::Status.get(@battler.status).id_number - if s == :POISON && @battler.statusCount > 0 # Badly poisoned + if s == :POISON && @battler.statusCount > 0 # Badly poisoned s = GameData::Status::DATA.keys.length / 2 end - imagePos.push(["Graphics/Pictures/Battle/icon_statuses",@spriteBaseX+24,56, - 0,(s-1)*STATUS_ICON_HEIGHT,-1,STATUS_ICON_HEIGHT]) + imagePos.push(["Graphics/Pictures/Battle/icon_statuses", @spriteBaseX + 24, 56, + 0, (s - 1) * STATUS_ICON_HEIGHT, -1, STATUS_ICON_HEIGHT]) end - pbDrawImagePositions(self.bitmap,imagePos) + pbDrawImagePositions(self.bitmap, imagePos) refreshHP refreshExp end @@ -273,24 +273,24 @@ class PokemonDataBox < SpriteWrapper return if !@battler.pokemon # Show HP numbers if @showHP - pbDrawNumber(self.hp,@hpNumbers.bitmap,54,2,1) - pbDrawNumber(-1,@hpNumbers.bitmap,54,2) # / char - pbDrawNumber(@battler.totalhp,@hpNumbers.bitmap,70,2) + pbDrawNumber(self.hp, @hpNumbers.bitmap, 54, 2, 1) + pbDrawNumber(-1, @hpNumbers.bitmap, 54, 2) # / char + pbDrawNumber(@battler.totalhp, @hpNumbers.bitmap, 70, 2) end # Resize HP bar w = 0 - if self.hp>0 - w = @hpBarBitmap.width.to_f*self.hp/@battler.totalhp - w = 1 if w<1 + if self.hp > 0 + w = @hpBarBitmap.width.to_f * self.hp / @battler.totalhp + w = 1 if w < 1 # NOTE: The line below snaps the bar's width to the nearest 2 pixels, to # fit in with the rest of the graphics which are doubled in size. - w = ((w/2.0).round)*2 + w = ((w / 2.0).round) * 2 end @hpBar.src_rect.width = w - hpColor = 0 # Green bar - hpColor = 1 if self.hp<=@battler.totalhp/2 # Yellow bar - hpColor = 2 if self.hp<=@battler.totalhp/4 # Red bar - @hpBar.src_rect.y = hpColor*@hpBarBitmap.height/3 + hpColor = 0 # Green bar + hpColor = 1 if self.hp <= @battler.totalhp / 2 # Yellow bar + hpColor = 2 if self.hp <= @battler.totalhp / 4 # Red bar + @hpBar.src_rect.y = hpColor * @hpBarBitmap.height / 3 end def refreshExp @@ -299,54 +299,54 @@ class PokemonDataBox < SpriteWrapper w = exp_fraction * @expBarBitmap.width # NOTE: The line below snaps the bar's width to the nearest 2 pixels, to # fit in with the rest of the graphics which are doubled in size. - w = ((w/2).round)*2 + w = ((w / 2).round) * 2 @expBar.src_rect.width = w end def updateHPAnimation return if !@animatingHP - if @currentHP<@endHP # Gaining HP + if @currentHP < @endHP # Gaining HP @currentHP += @hpIncPerFrame - @currentHP = @endHP if @currentHP>=@endHP - elsif @currentHP>@endHP # Losing HP + @currentHP = @endHP if @currentHP >= @endHP + elsif @currentHP > @endHP # Losing HP @currentHP -= @hpIncPerFrame - @currentHP = @endHP if @currentHP<=@endHP + @currentHP = @endHP if @currentHP <= @endHP end # Refresh the HP bar/numbers refreshHP - @animatingHP = false if @currentHP==@endHP + @animatingHP = false if @currentHP == @endHP end def updateExpAnimation return if !@animatingExp - if !@showExp # Not showing the Exp bar, no need to waste time animating it + if !@showExp # Not showing the Exp bar, no need to waste time animating it @currentExp = @endExp @animatingExp = false return end - if @currentExp<@endExp # Gaining Exp + if @currentExp < @endExp # Gaining Exp @currentExp += @expIncPerFrame - @currentExp = @endExp if @currentExp>=@endExp - elsif @currentExp>@endExp # Losing Exp + @currentExp = @endExp if @currentExp >= @endExp + elsif @currentExp > @endExp # Losing Exp @currentExp -= @expIncPerFrame - @currentExp = @endExp if @currentExp<=@endExp + @currentExp = @endExp if @currentExp <= @endExp end # Refresh the Exp bar refreshExp - return if @currentExp!=@endExp # Exp bar still has more to animate + return if @currentExp != @endExp # Exp bar still has more to animate # Exp bar is completely filled, level up with a flash and sound effect - if @currentExp>=@rangeExp - if @expFlash==0 + if @currentExp >= @rangeExp + if @expFlash == 0 pbSEStop - @expFlash = Graphics.frame_rate/5 + @expFlash = Graphics.frame_rate / 5 pbSEPlay("Pkmn exp full") - self.flash(Color.new(64,200,248,192),@expFlash) + self.flash(Color.new(64, 200, 248, 192), @expFlash) for i in @sprites - i[1].flash(Color.new(64,200,248,192),@expFlash) if !i[1].disposed? + i[1].flash(Color.new(64, 200, 248, 192), @expFlash) if !i[1].disposed? end else @expFlash -= 1 - @animatingExp = false if @expFlash==0 + @animatingExp = false if @expFlash == 0 end else pbSEStop @@ -355,21 +355,23 @@ class PokemonDataBox < SpriteWrapper end end - QUARTER_ANIM_PERIOD = Graphics.frame_rate*3/20 + QUARTER_ANIM_PERIOD = Graphics.frame_rate * 3 / 20 def updatePositions(frameCounter) self.x = @spriteX self.y = @spriteY # Data box bobbing while Pokémon is selected - if @selected==1 || @selected==2 # Choosing commands/targeted or damaged - case (frameCounter/QUARTER_ANIM_PERIOD).floor - when 1 then self.y = @spriteY-2 - when 3 then self.y = @spriteY+2 + if @selected == 1 || @selected == 2 # Choosing commands/targeted or damaged + case (frameCounter / QUARTER_ANIM_PERIOD).floor + when 1 then + self.y = @spriteY - 2 + when 3 then + self.y = @spriteY + 2 end end end - def update(frameCounter=0) + def update(frameCounter = 0) super() # Animate HP bar updateHPAnimation @@ -381,35 +383,33 @@ class PokemonDataBox < SpriteWrapper end end - - #=============================================================================== # Splash bar to announce a triggered ability #=============================================================================== class AbilitySplashBar < SpriteWrapper attr_reader :battler - TEXT_BASE_COLOR = Color.new(0,0,0) - TEXT_SHADOW_COLOR = Color.new(248,248,248) + TEXT_BASE_COLOR = Color.new(0, 0, 0) + TEXT_SHADOW_COLOR = Color.new(248, 248, 248) - def initialize(side,viewport=nil) + def initialize(side, viewport = nil) super(viewport) - @side = side + @side = side @battler = nil # Create sprite wrapper that displays background graphic @bgBitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/Battle/ability_bar")) @bgSprite = SpriteWrapper.new(viewport) @bgSprite.bitmap = @bgBitmap.bitmap - @bgSprite.src_rect.y = (side==0) ? 0 : @bgBitmap.height/2 - @bgSprite.src_rect.height = @bgBitmap.height/2 + @bgSprite.src_rect.y = (side == 0) ? 0 : @bgBitmap.height / 2 + @bgSprite.src_rect.height = @bgBitmap.height / 2 # Create bitmap that displays the text - @contents = BitmapWrapper.new(@bgBitmap.width,@bgBitmap.height/2) + @contents = BitmapWrapper.new(@bgBitmap.width, @bgBitmap.height / 2) self.bitmap = @contents pbSetSystemFont(self.bitmap) # Position the bar - self.x = (side==0) ? -Graphics.width/2 : Graphics.width - self.y = (side==0) ? 180 : 80 - self.z = 120 + self.x = (side == 0) ? -Graphics.width / 2 : Graphics.width + self.y = (side == 0) ? 180 : 80 + self.z = 120 self.visible = false end @@ -432,7 +432,7 @@ class AbilitySplashBar < SpriteWrapper def z=(value) super - @bgSprite.z = value-1 + @bgSprite.z = value - 1 end def opacity=(value) @@ -459,14 +459,19 @@ class AbilitySplashBar < SpriteWrapper self.bitmap.clear return if !@battler textPos = [] - textX = (@side==0) ? 10 : self.bitmap.width-8 + textX = (@side == 0) ? 10 : self.bitmap.width - 8 # Draw Pokémon's name - textPos.push([_INTL("{1}'s",@battler.name),textX,-4,@side==1, - TEXT_BASE_COLOR,TEXT_SHADOW_COLOR,true]) + textPos.push([_INTL("{1}'s", @battler.name), textX, -4, @side == 1, + TEXT_BASE_COLOR, TEXT_SHADOW_COLOR, true]) # Draw Pokémon's ability - textPos.push([@battler.abilityName,textX,26,@side==1, - TEXT_BASE_COLOR,TEXT_SHADOW_COLOR,true]) - pbDrawTextPositions(self.bitmap,textPos) + text = @battler.abilityName + if $game_switches[SWITCH_DOUBLE_ABILITIES] + text = _INTL("{1},{2}", @battler.abilityName, @battler.ability2Name) + end + + textPos.push([text, textX, 26, @side == 1, + TEXT_BASE_COLOR, TEXT_SHADOW_COLOR, true]) + pbDrawTextPositions(self.bitmap, textPos) end def update @@ -475,35 +480,33 @@ class AbilitySplashBar < SpriteWrapper end end - - #=============================================================================== # Pokémon sprite (used in battle) #=============================================================================== class PokemonBattlerSprite < RPG::Sprite - attr_reader :pkmn + attr_reader :pkmn attr_accessor :index attr_accessor :selected - attr_reader :sideSize + attr_reader :sideSize - def initialize(viewport,sideSize,index,battleAnimations) + def initialize(viewport, sideSize, index, battleAnimations) super(viewport) - @pkmn = nil - @sideSize = sideSize - @index = index + @pkmn = nil + @sideSize = sideSize + @index = index @battleAnimations = battleAnimations # @selected: 0 = not selected, 1 = choosing action bobbing for this Pokémon, # 2 = flashing when targeted - @selected = 0 - @frame = 0 - @updating = false - @spriteX = 0 # Actual x coordinate - @spriteY = 0 # Actual y coordinate - @spriteXExtra = 0 # Offset due to "bobbing" animation - @spriteYExtra = 0 # Offset due to "bobbing" animation - @_iconBitmap = nil - self.visible = false - @back=false + @selected = 0 + @frame = 0 + @updating = false + @spriteX = 0 # Actual x coordinate + @spriteY = 0 # Actual y coordinate + @spriteXExtra = 0 # Offset due to "bobbing" animation + @spriteYExtra = 0 # Offset due to "bobbing" animation + @_iconBitmap = nil + self.visible = false + @back = false end def dispose @@ -513,56 +516,66 @@ class PokemonBattlerSprite < RPG::Sprite super end - def x; return @spriteX; end - def y; return @spriteY; end + def x + return @spriteX; + end + + def y + return @spriteY; + end def x=(value) @spriteX = value - self.mirror=true if @back - super(value+@spriteXExtra) + self.mirror = true if @back + super(value + @spriteXExtra) end def y=(value) @spriteY = value - self.mirror=true if @back - super(value+@spriteYExtra) + self.mirror = true if @back + super(value + @spriteYExtra) end - def width; return (self.bitmap) ? self.bitmap.width : 0; end - def height; return (self.bitmap) ? self.bitmap.height : 0; end + def width + return (self.bitmap) ? self.bitmap.width : 0; + end + + def height + return (self.bitmap) ? self.bitmap.height : 0; + end def visible=(value) - @spriteVisible = value if !@updating # For selection/targeting flashing + @spriteVisible = value if !@updating # For selection/targeting flashing super end # Set sprite's origin to bottom middle def pbSetOrigin return if !@_iconBitmap - self.mirror=true if @back - self.ox = @_iconBitmap.width/2 + self.mirror = true if @back + self.ox = @_iconBitmap.width / 2 self.oy = @_iconBitmap.height end def pbSetPosition return if !@_iconBitmap pbSetOrigin - if (@index%2)==0 - self.z = 50+5*@index/2 + if (@index % 2) == 0 + self.z = 50 + 5 * @index / 2 else - self.z = 50-5*(@index+1)/2 + self.z = 50 - 5 * (@index + 1) / 2 end # Set original position - p = PokeBattle_SceneConstants.pbBattlerPosition(@index,@sideSize) + p = PokeBattle_SceneConstants.pbBattlerPosition(@index, @sideSize) @spriteX = p[0] @spriteY = p[1] # Apply metrics @pkmn.species_data.apply_metrics_to_sprite(self, @index) end - def setPokemonBitmap(pkmn,back=false) + def setPokemonBitmap(pkmn, back = false) @back = back - self.mirror=true if @back + self.mirror = true if @back @pkmn = pkmn @_iconBitmap.dispose if @_iconBitmap @_iconBitmap = GameData::Species.sprite_bitmap_from_pokemon(@pkmn, back) @@ -580,14 +593,14 @@ class PokemonBattlerSprite < RPG::Sprite # this is just playing the Pokémon's cry, but you can expand on it. The # recommendation is to create a PictureEx animation and push it into # the @battleAnimations array. - def pbPlayIntroAnimation(pictureEx=nil) + def pbPlayIntroAnimation(pictureEx = nil) @pkmn.play_cry if @pkmn end - QUARTER_ANIM_PERIOD = Graphics.frame_rate*3/20 - SIXTH_ANIM_PERIOD = Graphics.frame_rate*2/20 + QUARTER_ANIM_PERIOD = Graphics.frame_rate * 3 / 20 + SIXTH_ANIM_PERIOD = Graphics.frame_rate * 2 / 20 - def update(frameCounter=0) + def update(frameCounter = 0) return if !@_iconBitmap @updating = true # Update bitmap @@ -595,41 +608,43 @@ class PokemonBattlerSprite < RPG::Sprite self.bitmap = @_iconBitmap.bitmap # Pokémon sprite bobbing while Pokémon is selected @spriteYExtra = 0 - if @selected==1 # When choosing commands for this Pokémon - case (frameCounter/QUARTER_ANIM_PERIOD).floor - when 1 then @spriteYExtra = 2 - when 3 then @spriteYExtra = -2 + if @selected == 1 # When choosing commands for this Pokémon + case (frameCounter / QUARTER_ANIM_PERIOD).floor + when 1 then + @spriteYExtra = 2 + when 3 then + @spriteYExtra = -2 end end - self.x = self.x - self.y = self.y + self.x = self.x + self.y = self.y self.visible = @spriteVisible # Pokémon sprite blinking when targeted - if @selected==2 && @spriteVisible - case (frameCounter/SIXTH_ANIM_PERIOD).floor - when 2, 5 then self.visible = false - else self.visible = true + if @selected == 2 && @spriteVisible + case (frameCounter / SIXTH_ANIM_PERIOD).floor + when 2, 5 then + self.visible = false + else + self.visible = true end end @updating = false end end - - #=============================================================================== # Shadow sprite for Pokémon (used in battle) #=============================================================================== class PokemonBattlerShadowSprite < RPG::Sprite - attr_reader :pkmn + attr_reader :pkmn attr_accessor :index attr_accessor :selected - def initialize(viewport,sideSize,index) + def initialize(viewport, sideSize, index) super(viewport) - @pkmn = nil - @sideSize = sideSize - @index = index + @pkmn = nil + @sideSize = sideSize + @index = index @_iconBitmap = nil self.visible = false end @@ -641,14 +656,19 @@ class PokemonBattlerShadowSprite < RPG::Sprite super end - def width; return (self.bitmap) ? self.bitmap.width : 0; end - def height; return (self.bitmap) ? self.bitmap.height : 0; end + def width + return (self.bitmap) ? self.bitmap.width : 0; + end + + def height + return (self.bitmap) ? self.bitmap.height : 0; + end # Set sprite's origin to centre def pbSetOrigin return if !@_iconBitmap - self.ox = @_iconBitmap.width/2 - self.oy = @_iconBitmap.height/2 + self.ox = @_iconBitmap.width / 2 + self.oy = @_iconBitmap.height / 2 end def pbSetPosition @@ -656,7 +676,7 @@ class PokemonBattlerShadowSprite < RPG::Sprite pbSetOrigin self.z = 3 # Set original position - p = PokeBattle_SceneConstants.pbBattlerPosition(@index,@sideSize) + p = PokeBattle_SceneConstants.pbBattlerPosition(@index, @sideSize) self.x = p[0] self.y = p[1] # Apply metrics @@ -671,7 +691,7 @@ class PokemonBattlerShadowSprite < RPG::Sprite pbSetPosition end - def update(frameCounter=0) + def update(frameCounter = 0) return if !@_iconBitmap # Update bitmap @_iconBitmap.update diff --git a/Data/Scripts/011_Battle/005_Battle scene/009_Scene_Animations.rb b/Data/Scripts/011_Battle/005_Battle scene/009_Scene_Animations.rb index e3f99df6f..ccf7cbda8 100644 --- a/Data/Scripts/011_Battle/005_Battle scene/009_Scene_Animations.rb +++ b/Data/Scripts/011_Battle/005_Battle scene/009_Scene_Animations.rb @@ -43,7 +43,7 @@ class PokeBattle_Scene for i in 0...@battle.sideSizes[1] idxBattler = 2*i+1 - #hidden ability animation + #hidden ability animation if @battle.battlers[idxBattler].hasHiddenAbility? pbCommonAnimation("StatUp",@battle.battlers[idxBattler]) if @battle.is_a?(PokeBattle_Battle) @@ -173,7 +173,7 @@ class PokeBattle_Scene #============================================================================= # Ability splash bar animations #============================================================================= - def pbShowAbilitySplash(battler) + def pbShowAbilitySplash(battler,ability_name=nil) return if !PokeBattle_SceneConstants::USE_ABILITY_SPLASH side = battler.index%2 pbHideAbilitySplash(battler) if @sprites["abilityBar_#{side}"].visible @@ -187,6 +187,7 @@ class PokeBattle_Scene abilitySplashAnim.dispose end + def pbHideAbilitySplash(battler) return if !PokeBattle_SceneConstants::USE_ABILITY_SPLASH side = battler.index%2 diff --git a/Data/Scripts/016_UI/006_UI_Summary.rb b/Data/Scripts/016_UI/006_UI_Summary.rb index 68abd4325..9dfb2c604 100644 --- a/Data/Scripts/016_UI/006_UI_Summary.rb +++ b/Data/Scripts/016_UI/006_UI_Summary.rb @@ -674,10 +674,22 @@ class PokemonSummary_Scene ] # Draw ability name and description ability = @pokemon.ability + ability2 = @pokemon.ability2 + + # if ability + # textpos.push([ability.name, 362, 278, 0, Color.new(64, 64, 64), Color.new(176, 176, 176)]) + # drawTextEx(overlay, 224, 320, 282, 2, ability.description, Color.new(64, 64, 64), Color.new(176, 176, 176)) + # end + + #fixme temp if ability textpos.push([ability.name, 362, 278, 0, Color.new(64, 64, 64), Color.new(176, 176, 176)]) - drawTextEx(overlay, 224, 320, 282, 2, ability.description, Color.new(64, 64, 64), Color.new(176, 176, 176)) + if ability2 + drawTextEx(overlay, 224, 320, 282, 2, ability2.name, Color.new(64, 64, 64), Color.new(176, 176, 176)) + end end + + # Draw all text pbDrawTextPositions(overlay, textpos) # Draw HP bar diff --git a/Data/Scripts/020_Debug/003_Debug menus/005_Debug_PokemonCommands.rb b/Data/Scripts/020_Debug/003_Debug menus/005_Debug_PokemonCommands.rb index 69265121a..3549b85dd 100644 --- a/Data/Scripts/020_Debug/003_Debug menus/005_Debug_PokemonCommands.rb +++ b/Data/Scripts/020_Debug/003_Debug menus/005_Debug_PokemonCommands.rb @@ -659,7 +659,7 @@ PokemonDebugMenuCommands.register("setitem", { PokemonDebugMenuCommands.register("setability", { "parent" => "main", - "name" => _INTL("Set ability"), + "name" => _INTL("Set primary ability"), "always_show" => true, "effect" => proc { |pkmn, pkmnid, heldpoke, settingUpBattle, screen| cmd = 0 @@ -706,6 +706,56 @@ PokemonDebugMenuCommands.register("setability", { } }) + +PokemonDebugMenuCommands.register("setability2", { + "parent" => "main", + "name" => _INTL("Set secondary ability"), + "always_show" => true, + "effect" => proc { |pkmn, pkmnid, heldpoke, settingUpBattle, screen| + cmd = 0 + commands = [ + _INTL("Set possible ability"), + _INTL("Set any ability"), + _INTL("Reset") + ] + loop do + if pkmn.ability + msg = _INTL("Ability 2 is {1} (index {2}).", pkmn.ability2.name, pkmn.ability2_index) + else + msg = _INTL("No ability (index {1}).", pkmn.ability2_index) + end + cmd = screen.pbShowCommands(msg, commands, cmd) + break if cmd < 0 + case cmd + when 0 # Set possible ability + abils = pkmn.getAbilityList + ability_commands = [] + abil_cmd = 0 + for i in abils + ability_commands.push(((i[1] < 2) ? "" : "(H) ") + GameData::Ability.get(i[0]).name) + abil_cmd = ability_commands.length - 1 if pkmn.ability2_id == i[0] + end + abil_cmd = screen.pbShowCommands(_INTL("Choose an ability."), ability_commands, abil_cmd) + next if abil_cmd < 0 + pkmn.ability2_index = abils[abil_cmd][1] + pkmn.ability2 = nil + screen.pbRefreshSingle(pkmnid) + when 1 # Set any ability + new_ability = pbChooseAbilityList(pkmn.ability2_id) + if new_ability && new_ability != pkmn.ability2_id + pkmn.ability2 = new_ability + screen.pbRefreshSingle(pkmnid) + end + when 2 # Reset + pkmn.ability2_index = nil + pkmn.ability2 = nil + screen.pbRefreshSingle(pkmnid) + end + end + next false + } +}) + PokemonDebugMenuCommands.register("setnature", { "parent" => "main", "name" => _INTL("Set nature"), diff --git a/Data/Scripts/048_Fusion/FusionMenu.rb b/Data/Scripts/048_Fusion/FusionMenu.rb index 4d6953842..39b0307f0 100644 --- a/Data/Scripts/048_Fusion/FusionMenu.rb +++ b/Data/Scripts/048_Fusion/FusionMenu.rb @@ -103,13 +103,9 @@ class FusionSelectOptionsScene < PokemonOption_Scene @selectedNature=@natureList[value] }, [getNatureDescription(@natureList[0]), getNatureDescription(@natureList[1])] ) - addOptionsExtension(options) return options end - def addOptionsExtension(options) - return options - end def isConfirmedOnKeyPress return true diff --git a/Data/Scripts/049_Compatibility/Constants.rb b/Data/Scripts/049_Compatibility/Constants.rb index cffbaf949..1fd9b47c3 100644 --- a/Data/Scripts/049_Compatibility/Constants.rb +++ b/Data/Scripts/049_Compatibility/Constants.rb @@ -23,6 +23,7 @@ SWITCH_GAME_DIFFICULTY_HARD = 666 SWITCH_MODERN_MODE=974 SWITCH_V5_1=825 SWITCH_NO_LEVELS_MODE=774 +SWITCH_DOUBLE_ABILITIES=773 #Game progression switches SWITCH_DURING_INTRO = 917 diff --git a/Data/Scripts/050_AddOns/New Items effects.rb b/Data/Scripts/050_AddOns/New Items effects.rb index 763e7dc63..9babd2c87 100644 --- a/Data/Scripts/050_AddOns/New Items effects.rb +++ b/Data/Scripts/050_AddOns/New Items effects.rb @@ -1517,6 +1517,11 @@ def pbUnfuse(pokemon, scene, supersplicers, pcPosition = nil) pokemon.ability_index = pokemon.body_original_ability_index if pokemon.body_original_ability_index poke2.ability_index = pokemon.head_original_ability_index if pokemon.head_original_ability_index + pokemon.ability2_index=nil + pokemon.ability2=nil + poke2.ability2_index=nil + poke2.ability2=nil + pokemon.debug_shiny = true if pokemon.debug_shiny && pokemon.body_shiny poke2.debug_shiny = true if pokemon.debug_shiny && poke2.head_shiny diff --git a/Data/System.rxdata b/Data/System.rxdata index ed1bb8ffa..bf80ee58b 100644 Binary files a/Data/System.rxdata and b/Data/System.rxdata differ