Implemented GameData::Move

This commit is contained in:
Maruno17
2020-11-19 21:00:29 +00:00
parent 52ffae9e8a
commit 3cd8d59918
71 changed files with 1443 additions and 1584 deletions

View File

@@ -429,16 +429,15 @@ class PokeBattle_Battler
end
def eachMove
@moves.each { |m| yield m if m && m.id != 0 }
@moves.each { |m| yield m }
end
def eachMoveWithIndex
@moves.each_with_index { |m, i| yield m, i if m && m.id != 0 }
@moves.each_with_index { |m, i| yield m, i }
end
def pbHasMove?(move_id)
move_id = getID(PBMoves, move_id)
return false if !move_id || move_id <= 0
return false if !move_id
eachMove { |m| return true if m.id == move_id }
return false
end
@@ -574,7 +573,7 @@ class PokeBattle_Battler
end
def usingMultiTurnAttack?
return true if @effects[PBEffects::TwoTurnAttack]>0
return true if @effects[PBEffects::TwoTurnAttack]
return true if @effects[PBEffects::HyperBeam]>0
return true if @effects[PBEffects::Rollout]>0
return true if @effects[PBEffects::Outrage]>0
@@ -584,8 +583,8 @@ class PokeBattle_Battler
end
def inTwoTurnAttack?(*arg)
return false if @effects[PBEffects::TwoTurnAttack]==0
ttaFunction = pbGetMoveData(@effects[PBEffects::TwoTurnAttack],MoveData::FUNCTION_CODE)
return false if !@effects[PBEffects::TwoTurnAttack]
ttaFunction = GameData::Move.get(@effects[PBEffects::TwoTurnAttack]).function_code
arg.each { |a| return true if a==ttaFunction }
return false
end
@@ -595,7 +594,7 @@ class PokeBattle_Battler
end
def pbEncoredMoveIndex
return -1 if @effects[PBEffects::Encore]==0 || @effects[PBEffects::EncoreMove]==0
return -1 if @effects[PBEffects::Encore]==0 || !@effects[PBEffects::EncoreMove]
ret = -1
eachMoveWithIndex do |m,i|
next if m.id!=@effects[PBEffects::EncoreMove]

View File

@@ -147,9 +147,9 @@ class PokeBattle_Battler
@lastHPLostFromFoe = 0
@tookDamage = false
@tookPhysicalHit = false
@lastMoveUsed = -1
@lastMoveUsed = nil
@lastMoveUsedType = -1
@lastRegularMoveUsed = -1
@lastRegularMoveUsed = nil
@lastRegularMoveTarget = -1
@lastRoundMoved = -1
@lastMoveFailed = false
@@ -167,7 +167,7 @@ class PokeBattle_Battler
@effects[PBEffects::BideTarget] = -1
@effects[PBEffects::BurnUp] = false
@effects[PBEffects::Charge] = 0
@effects[PBEffects::ChoiceBand] = -1
@effects[PBEffects::ChoiceBand] = nil
@effects[PBEffects::Counter] = -1
@effects[PBEffects::CounterTarget] = -1
@effects[PBEffects::Dancer] = false
@@ -176,10 +176,10 @@ class PokeBattle_Battler
@effects[PBEffects::DestinyBondPrevious] = false
@effects[PBEffects::DestinyBondTarget] = -1
@effects[PBEffects::Disable] = 0
@effects[PBEffects::DisableMove] = 0
@effects[PBEffects::DisableMove] = nil
@effects[PBEffects::Electrify] = false
@effects[PBEffects::Encore] = 0
@effects[PBEffects::EncoreMove] = 0
@effects[PBEffects::EncoreMove] = nil
@effects[PBEffects::Endure] = false
@effects[PBEffects::FirstPledge] = 0
@effects[PBEffects::FlashFire] = false
@@ -240,7 +240,6 @@ class PokeBattle_Battler
@effects[PBEffects::Quash] = 0
@effects[PBEffects::Rage] = false
@effects[PBEffects::RagePowder] = false
@effects[PBEffects::Revenge] = 0
@effects[PBEffects::Rollout] = 0
@effects[PBEffects::Roost] = false
@effects[PBEffects::SkyDrop] = -1
@@ -262,7 +261,7 @@ class PokeBattle_Battler
@effects[PBEffects::Transform] = false
@effects[PBEffects::TransformSpecies] = 0
@effects[PBEffects::Trapping] = 0
@effects[PBEffects::TrappingMove] = 0
@effects[PBEffects::TrappingMove] = nil
@effects[PBEffects::TrappingUser] = -1
@battle.eachBattler do |b| # Other battlers no longer trapped by self
next if b.effects[PBEffects::TrappingUser]!=@index
@@ -270,7 +269,7 @@ class PokeBattle_Battler
b.effects[PBEffects::TrappingUser] = -1
end
@effects[PBEffects::Truant] = false
@effects[PBEffects::TwoTurnAttack] = 0
@effects[PBEffects::TwoTurnAttack] = nil
@effects[PBEffects::Type3] = -1
@effects[PBEffects::Unburden] = false
@effects[PBEffects::Uproar] = 0

View File

@@ -94,9 +94,9 @@ class PokeBattle_Battler
def pbReducePP(move)
return true if usingMultiTurnAttack?
return true if move.pp<0 # Don't reduce PP for special calls of moves
return true if move.totalpp<=0 # Infinite PP, can always be used
return false if move.pp==0 # Ran out of PP, couldn't reduce
return true if move.pp<0 # Don't reduce PP for special calls of moves
return true if move.total_pp<=0 # Infinite PP, can always be used
return false if move.pp==0 # Ran out of PP, couldn't reduce
pbSetPP(move,move.pp-1) if move.pp>0
return true
end
@@ -284,11 +284,11 @@ class PokeBattle_Battler
@moves.clear
target.moves.each_with_index do |m,i|
@moves[i] = PokeBattle_Move.pbFromPBMove(@battle,PBMove.new(m.id))
@moves[i].pp = 5
@moves[i].totalpp = 5
@moves[i].pp = 5
@moves[i].total_pp = 5
end
@effects[PBEffects::Disable] = 0
@effects[PBEffects::DisableMove] = 0
@effects[PBEffects::DisableMove] = nil
@effects[PBEffects::WeightChange] = target.effects[PBEffects::WeightChange]
@battle.scene.pbRefreshOne(@index)
@battle.pbDisplay(_INTL("{1} transformed into {2}!",pbThis,target.pbThis(true)))

View File

@@ -261,7 +261,7 @@ class PokeBattle_Battler
# disabled/anything else). This behaviour was tested in Gen 5.
if @status==PBStatuses::SLEEP && @effects[PBEffects::Outrage]>0
@effects[PBEffects::Outrage] = 0
@currentMove = 0
@currentMove = nil
end
end

View File

@@ -136,7 +136,7 @@ class PokeBattle_Battler
# permanent is whether the item is lost even after battle. Is false for Knock
# Off.
def pbRemoveItem(permanent = true)
@effects[PBEffects::ChoiceBand] = -1
@effects[PBEffects::ChoiceBand] = nil
@effects[PBEffects::Unburden] = true if self.item
setInitialItem(nil) if permanent && self.item == self.initialItem
self.item = nil

View File

@@ -80,7 +80,7 @@ class PokeBattle_Battler
# Encore's effect ends if the encored move is no longer available
if @effects[PBEffects::Encore]>0 && pbEncoredMoveIndex<0
@effects[PBEffects::Encore] = 0
@effects[PBEffects::EncoreMove] = 0
@effects[PBEffects::EncoreMove] = nil
end
end
@@ -96,23 +96,23 @@ class PokeBattle_Battler
pbConfuse(_INTL("{1} became confused due to fatigue!",pbThis))
end
# Cancel usage of most multi-turn moves
@effects[PBEffects::TwoTurnAttack] = 0
@effects[PBEffects::TwoTurnAttack] = nil
@effects[PBEffects::Rollout] = 0
@effects[PBEffects::Outrage] = 0
@effects[PBEffects::Uproar] = 0
@effects[PBEffects::Bide] = 0
@currentMove = 0
@currentMove = nil
# Reset counters for moves which increase them when used in succession
@effects[PBEffects::FuryCutter] = 0
end
def pbEndTurn(_choice)
@lastRoundMoved = @battle.turnCount # Done something this round
if @effects[PBEffects::ChoiceBand]<0 &&
if !@effects[PBEffects::ChoiceBand] &&
hasActiveItem?([:CHOICEBAND,:CHOICESPECS,:CHOICESCARF])
if @lastMoveUsed>=0 && pbHasMove?(@lastMoveUsed)
if @lastMoveUsed && pbHasMove?(@lastMoveUsed)
@effects[PBEffects::ChoiceBand] = @lastMoveUsed
elsif @lastRegularMoveUsed>=0 && pbHasMove?(@lastRegularMoveUsed)
elsif @lastRegularMoveUsed && pbHasMove?(@lastRegularMoveUsed)
@effects[PBEffects::ChoiceBand] = @lastRegularMoveUsed
end
end
@@ -184,14 +184,14 @@ class PokeBattle_Battler
end
# Labels the move being used as "move"
move = choice[2]
return if !move || move.id==0 # if move was not chosen somehow
return if !move # if move was not chosen somehow
# Try to use the move (inc. disobedience)
@lastMoveFailed = false
if !pbTryUseMove(choice,move,specialUsage,skipAccuracyCheck)
@lastMoveUsed = -1
@lastMoveUsed = nil
@lastMoveUsedType = -1
if !specialUsage
@lastRegularMoveUsed = -1
@lastRegularMoveUsed = nil
@lastRegularMoveTarget = -1
end
@battle.pbGainExp # In case self is KO'd due to confusion
@@ -200,15 +200,15 @@ class PokeBattle_Battler
return
end
move = choice[2] # In case disobedience changed the move to be used
return if !move || move.id==0 # if move was not chosen somehow
return if !move # if move was not chosen somehow
# Subtract PP
if !specialUsage
if !pbReducePP(move)
@battle.pbDisplay(_INTL("{1} used {2}!",pbThis,move.name))
@battle.pbDisplay(_INTL("But there was no PP left for the move!"))
@lastMoveUsed = -1
@lastMoveUsed = nil
@lastMoveUsedType = -1
@lastRegularMoveUsed = -1
@lastRegularMoveUsed = nil
@lastRegularMoveTarget = -1
@lastMoveFailed = true
pbCancelMoves
@@ -220,7 +220,7 @@ class PokeBattle_Battler
if isSpecies?(:AEGISLASH) && self.ability == :STANCECHANGE
if move.damagingMove?
pbChangeForm(1,_INTL("{1} changed to Blade Forme!",pbThis))
elsif isConst?(move.id,PBMoves,:KINGSSHIELD)
elsif move.id == :KINGSSHIELD
pbChangeForm(0,_INTL("{1} changed to Shield Forme!",pbThis))
end
end
@@ -234,13 +234,13 @@ class PokeBattle_Battler
@effects[PBEffects::TwoTurnAttack] = move.id
@currentMove = move.id
else
@effects[PBEffects::TwoTurnAttack] = 0 # Cancel use of two-turn attack
@effects[PBEffects::TwoTurnAttack] = nil # Cancel use of two-turn attack
end
# Add to counters for moves which increase them when used in succession
move.pbChangeUsageCounters(self,specialUsage)
# Charge up Metronome item
if hasActiveItem?(:METRONOME) && !move.callsAnotherMove?
if @lastMoveUsed==move.id && !@lastMoveFailed
if @lastMoveUsed && @lastMoveUsed==move.id && !@lastMoveFailed
@effects[PBEffects::Metronome] += 1
else
@effects[PBEffects::Metronome] = 0
@@ -516,7 +516,7 @@ class PokeBattle_Battler
pbEndTurn(choice)
# Instruct
@battle.eachBattler do |b|
next if !b.effects[PBEffects::Instruct]
next if !b.effects[PBEffects::Instruct] || !b.lastMoveUsed
b.effects[PBEffects::Instruct] = false
idxMove = -1
b.eachMoveWithIndex { |m,i| idxMove = i if m.id==b.lastMoveUsed }

View File

@@ -41,19 +41,19 @@ class PokeBattle_Battler
return false
end
# Choice Band
if @effects[PBEffects::ChoiceBand]>=0
if @effects[PBEffects::ChoiceBand]
if hasActiveItem?([:CHOICEBAND,:CHOICESPECS,:CHOICESCARF]) &&
pbHasMove?(@effects[PBEffects::ChoiceBand])
if move.id!=@effects[PBEffects::ChoiceBand]
if showMessages
msg = _INTL("{1} allows the use of only {2}!",itemName,
PBMoves.getName(@effects[PBEffects::ChoiceBand]))
GameData::Move.get(@effects[PBEffects::ChoiceBand]).name)
(commandPhase) ? @battle.pbDisplayPaused(msg) : @battle.pbDisplay(msg)
end
return false
end
else
@effects[PBEffects::ChoiceBand] = -1
@effects[PBEffects::ChoiceBand] = nil
end
end
# Taunt
@@ -66,7 +66,7 @@ class PokeBattle_Battler
end
# Torment
if @effects[PBEffects::Torment] && !@effects[PBEffects::Instructed] &&
move.id==@lastMoveUsed && move.id!=@battle.struggle.id
@lastMoveUsed && move.id==@lastMoveUsed && move.id!=@battle.struggle.id
if showMessages
msg = _INTL("{1} can't use the same move twice in a row due to the torment!",pbThis)
(commandPhase) ? @battle.pbDisplayPaused(msg) : @battle.pbDisplay(msg)
@@ -138,7 +138,7 @@ class PokeBattle_Battler
otherMoves = []
eachMoveWithIndex do |_m,i|
next if i==choice[1]
otherMoves[otherMoves.length] = i if @battle.pbCanChooseMove?(@index,i,false)
otherMoves.push(i) if @battle.pbCanChooseMove?(@index,i,false)
end
return false if otherMoves.length==0 # No other move to use; do nothing
newChoice = otherMoves[@battle.pbRandom(otherMoves.length)]
@@ -291,7 +291,7 @@ class PokeBattle_Battler
typeMod = move.pbCalcTypeMod(move.calcType,user,target)
target.damageState.typeMod = typeMod
# Two-turn attacks can't fail here in the charging turn
return true if user.effects[PBEffects::TwoTurnAttack]>0
return true if user.effects[PBEffects::TwoTurnAttack]
# Move-specific failures
return false if move.pbFailsAgainstTarget?(user,target)
# Immunity to priority moves because of Psychic Terrain
@@ -479,7 +479,7 @@ class PokeBattle_Battler
#=============================================================================
def pbSuccessCheckPerHit(move,user,target,skipAccuracyCheck)
# Two-turn attacks can't fail here in the charging turn
return true if user.effects[PBEffects::TwoTurnAttack]>0
return true if user.effects[PBEffects::TwoTurnAttack]
# Lock-On
return true if user.effects[PBEffects::LockOn]>0 &&
user.effects[PBEffects::LockOnPos]==target.index
@@ -495,7 +495,7 @@ class PokeBattle_Battler
hitsInvul = true if move.function=="09C"
if !hitsInvul
# Semi-invulnerable moves
if target.effects[PBEffects::TwoTurnAttack]>0
if target.effects[PBEffects::TwoTurnAttack]
if target.inTwoTurnAttack?("0C9","0CC","0CE") # Fly, Bounce, Sky Drop
miss = true if !move.hitsFlyingTargets?
elsif target.inTwoTurnAttack?("0CA") # Dig
@@ -529,7 +529,7 @@ class PokeBattle_Battler
tar = move.pbTarget(user)
if PBTargets.multipleTargets?(tar)
@battle.pbDisplay(_INTL("{1} avoided the attack!",target.pbThis))
elsif target.effects[PBEffects::TwoTurnAttack]>0
elsif target.effects[PBEffects::TwoTurnAttack]
@battle.pbDisplay(_INTL("{1} avoided the attack!",target.pbThis))
elsif !move.pbMissMessage(user,target)
@battle.pbDisplay(_INTL("{1}'s attack missed!",user.pbThis))