diff --git a/P3D/Battle/BattleSystemV2/Battle.vb b/P3D/Battle/BattleSystemV2/Battle.vb
index 2bc2d0a43..1031e29c9 100644
--- a/P3D/Battle/BattleSystemV2/Battle.vb
+++ b/P3D/Battle/BattleSystemV2/Battle.vb
@@ -132,12 +132,28 @@
Exit Sub
End If
+ 'Phantom Force:
+ If BattleScreen.FieldEffects.OwnPhantomForceCounter = 1 Then
+ SelectedMoveOwn = False
+ DeleteHostQuery(BattleScreen)
+ InitializeRound(BattleScreen, New RoundConst() With {.StepType = RoundConst.StepTypes.Move, .Argument = GetPokemonMoveFromID(BattleScreen.OwnPokemon, 566)})
+ Exit Sub
+ End If
+
'If Sky Drop gets programmed, put this in.
'If BattleScreen.FieldEffects.OwnSkyDropCounter = 1 Then
' InitializeRound(BattleScreen, New RoundConst() With {.StepType = RoundConst.StepTypes.Move, .Argument = GetPokemonMoveFromID(BattleScreen.OwnPokemon, xxx)})
' Exit Sub
'End If
+ 'Geomancy:
+ If BattleScreen.FieldEffects.OwnGeomancyCounter = 1 Then
+ SelectedMoveOwn = False
+ DeleteHostQuery(BattleScreen)
+ InitializeRound(BattleScreen, New RoundConst() With {.StepType = RoundConst.StepTypes.Move, .Argument = GetPokemonMoveFromID(BattleScreen.OwnPokemon, 601)})
+ Exit Sub
+ End If
+
'Solar Beam:
If BattleScreen.FieldEffects.OwnSolarBeam >= 1 Then
SelectedMoveOwn = False
@@ -309,11 +325,23 @@
Return New RoundConst() With {.StepType = RoundConst.StepTypes.Move, .Argument = GetPokemonMoveFromID(BattleScreen.OppPokemon, 467)}
End If
+ 'Phantom Force:
+ If BattleScreen.FieldEffects.OppPhantomForceCounter = 1 Then
+ SelectedMoveOpp = False
+ Return New RoundConst() With {.StepType = RoundConst.StepTypes.Move, .Argument = GetPokemonMoveFromID(BattleScreen.OppPokemon, 566)}
+ End If
+
''Sky Drop:
'If BattleScreen.FieldEffects.OppSkyDropCounter = 1 Then
' Return New RoundConst() With {.StepType = RoundConst.StepTypes.Move, .Argument = (19).ToString()}
'End If
+ 'Geomancy:
+ If BattleScreen.FieldEffects.OppGeomancyCounter = 1 Then
+ SelectedMoveOpp = False
+ Return New RoundConst() With {.StepType = RoundConst.StepTypes.Move, .Argument = GetPokemonMoveFromID(BattleScreen.OppPokemon, 601)}
+ End If
+
'Solar Beam:
If BattleScreen.FieldEffects.OppSolarBeam >= 1 Then
SelectedMoveOpp = False
@@ -947,7 +975,9 @@
Dim dig As Integer
Dim dive As Integer
Dim skyDrop As Integer 'not implemented yet
- Dim shadowForce As Integer
+ Dim geomancy As Integer
+ Dim shadowForce As Integer
+ Dim phantomForce As Integer
Dim skullBash As Integer
Dim skyAttack As Integer
Dim solarBeam As Integer
@@ -966,7 +996,9 @@
dig = .OwnDigCounter
dive = .OwnDiveCounter
skyDrop = .OwnSkyDropCounter
+ geomancy = .OwnGeomancyCounter
shadowForce = .OwnShadowForceCounter
+ phantomForce = .OwnPhantomForceCounter
skullBash = .OwnSkullBashCounter
skyAttack = .OwnSkyAttackCounter
solarBeam = .OwnSolarBeam
@@ -978,7 +1010,9 @@
dig = .OppDigCounter
dive = .OppDiveCounter
skyDrop = .OppSkyDropCounter
+ geomancy = .OppGeomancyCounter
shadowForce = .OppShadowForceCounter
+ phantomForce = .OppPhantomForceCounter
skullBash = .OppSkullBashCounter
skyAttack = .OppSkyAttackCounter
solarBeam = .OppSolarBeam
@@ -1011,10 +1045,18 @@
If skyDrop = 0 Then
Return True
End If
+ Case "geomancy"
+ If geomancy = 0 Then
+ Return True
+ End If
Case "shadow force"
If shadowForce = 0 Then
Return True
End If
+ Case "phantom force"
+ If phantomForce = 0 Then
+ Return True
+ End If
Case "skull bash"
If skullBash = 0 Then
Return True
@@ -1362,7 +1404,7 @@
If moveUsed.ProtectAffected = False Then
NoTargetCheck = False
Select Case moveUsed.Name.ToLower
- Case "accupressure", "confide", "feint", "hold hands", "hyperspace fury", "hyperspace hole", "phantom force", "psych up", "play nice", "roar", "role play", "shadow force", "sketch", "transform", "whirlwind"
+ Case "accupressure", "confide", "feint", "hold hands", "hyperspace fury", "hyperspace hole", "phantom force", "psych up", "geomancy", "play nice", "roar", "role play", "shadow force", "sketch", "transform", "whirlwind"
NoTargetCheck = True
End Select
End If
@@ -1411,7 +1453,7 @@
If moveUsed.ProtectAffected = False Then
UseTwoTurnCheck = False
Select Case moveUsed.Name.ToLower
- Case "accupressure", "confide", "feint", "hold hands", "hyperspace fury", "hyperspace hole", "phantom force", "psych up", "play nice", "roar", "role play", "shadow force", "sketch", "transform", "whirlwind"
+ Case "accupressure", "confide", "feint", "hold hands", "hyperspace fury", "hyperspace hole", "phantom force", "psych up", "geomancy", "play nice", "roar", "role play", "shadow force", "sketch", "transform", "whirlwind"
UseTwoTurnCheck = True
End Select
End If
@@ -1471,6 +1513,17 @@
End If
End If
+ If DoesNotMiss = True And UseTwoTurnCheck Then 'phantomforce check
+ Dim phantomforce As Integer = BattleScreen.FieldEffects.OppPhantomForceCounter
+ If own = False Then
+ phantomforce = BattleScreen.FieldEffects.OwnPhantomForceCounter
+ End If
+
+ If phantomforce > 0 Then
+ DoesNotMiss = False
+ End If
+ End If
+
If DoesNotMiss = True And UseTwoTurnCheck Then 'sky drop check
Dim skydrop As Integer = BattleScreen.FieldEffects.OppSkyDropCounter
If own = False Then
@@ -1482,6 +1535,17 @@
End If
End If
+ If DoesNotMiss = True And UseTwoTurnCheck Then 'geomancy check
+ Dim geomancy As Integer = BattleScreen.FieldEffects.OppGeomancyCounter
+ If own = False Then
+ geomancy = BattleScreen.FieldEffects.OwnGeomancyCounter
+ End If
+
+ If geomancy > 0 Then
+ DoesNotMiss = False
+ End If
+ End If
+
If IsChargingTurn(BattleScreen, own, moveUsed) Then
DoesNotMiss = True
End If
@@ -6119,6 +6183,7 @@
.OwnCustapBerry = 0
.OwnTrappedCounter = 0
.OwnFuryCutter = 0
+ .OwnEchoedVoice = 0
.OwnPokemonTurns = 0
.OwnStockpileCount = 0
.OwnDestinyBond = False
@@ -6133,7 +6198,9 @@
.OwnBounceCounter = 0
.OwnDiveCounter = 0
.OwnShadowForceCounter = 0
+ .OwnPhantomForceCounter = 0
.OwnSkyDropCounter = 0
+ .OwnGeomancyCounter = 0
.OwnSkyAttackCounter = 0
.OwnRazorWindCounter = 0
.OwnSkullBashCounter = 0
@@ -6454,6 +6521,7 @@
.OppCustapBerry = 0
.OppTrappedCounter = 0
.OppFuryCutter = 0
+ .OppEchoedVoice = 0
.OppPokemonTurns = 0
.OppStockpileCount = 0
.OppDestinyBond = False
@@ -6464,7 +6532,9 @@
.OppBounceCounter = 0
.OppDiveCounter = 0
.OppShadowForceCounter = 0
+ .OppPhantomForceCounter = 0
.OppSkyDropCounter = 0
+ .OppGeomancyCounter = 0
.OppSkyAttackCounter = 0
.OppRazorWindCounter = 0
.OppSkullBashCounter = 0
diff --git a/P3D/Battle/BattleSystemV2/BattleCalculation.vb b/P3D/Battle/BattleSystemV2/BattleCalculation.vb
index 58acf30ea..e0ddc10c5 100644
--- a/P3D/Battle/BattleSystemV2/BattleCalculation.vb
+++ b/P3D/Battle/BattleSystemV2/BattleCalculation.vb
@@ -667,6 +667,28 @@
End If
End If
+ 'Flying Press
+ If move.ID = 9999 Then
+ If op.Type1.Type = Element.Types.Fighting Or op.Type2.Type = Element.Types.Fighting Then
+ effectiveness *= 2
+ End If
+ If op.Type1.Type = Element.Types.Grass Or op.Type2.Type = Element.Types.Grass Then
+ effectiveness *= 2
+ End If
+ If op.Type1.Type = Element.Types.Bug Or op.Type2.Type = Element.Types.Bug Then
+ effectiveness *= 2
+ End If
+ If op.Type1.Type = Element.Types.Rock Or op.Type2.Type = Element.Types.Rock Then
+ effectiveness /= 2
+ End If
+ If op.Type1.Type = Element.Types.Steel Or op.Type2.Type = Element.Types.Steel Then
+ effectiveness /= 2
+ End If
+ If op.Type1.Type = Element.Types.Electric Or op.Type2.Type = Element.Types.Electric Then
+ effectiveness /= 2
+ End If
+ End If
+
'Sheer Cold
If move.ID = 329 Then
If op.IsType(Element.Types.Ice) Then
@@ -1470,7 +1492,7 @@
Dim SX As Single = 1.0F
Dim DMod As Single = 1.0F
- If Attack.Category = Attack.Categories.Physical OrElse Attack.ID = 473 OrElse Attack.ID = 548 Then 'Psyshock and Secret Sword.
+ If Attack.Category = Attack.Categories.Physical OrElse Attack.ID = 473 OrElse Attack.ID = 540 OrElse Attack.ID = 548 Then 'Psyshock, Psystrike and Secret Sword.
DStat = Attack.GetUseDefenseStat(Op)
DSM = GetMultiplierFromStat(Op.StatDefense)
diff --git a/P3D/Battle/BattleSystemV2/FieldEffects.vb b/P3D/Battle/BattleSystemV2/FieldEffects.vb
index e672da395..0db422b00 100644
--- a/P3D/Battle/BattleSystemV2/FieldEffects.vb
+++ b/P3D/Battle/BattleSystemV2/FieldEffects.vb
@@ -62,6 +62,7 @@
Public OwnMiracleEye As Integer = 0 'Own Dark type Pokémon can be hit by Psychic type attacks
Public OwnProtectMovesCount As Integer = 0 'Counts uses of protect moves
Public OwnFuryCutter As Integer = 0 'Counter for the move fury cutter
+ Public OwnEchoedVoice As Integer = 0 'Counter for the move echoed voice
Public OwnPokemonTurns As Integer = 0 'Turns for how long the own pokemon has been in battle
Public OwnStockpileCount As Integer = 0 'A counter for the stockpile moves used for Swallow and Spit Up
Public OwnIceBurnCounter As Integer = 0 'Counter for the Ice Burn move.
@@ -76,7 +77,9 @@
Public OwnBounceCounter As Integer = 0
Public OwnDiveCounter As Integer = 0
Public OwnShadowForceCounter As Integer = 0
+ Public OwnPhantomForceCounter As Integer = 0
Public OwnSkyDropCounter As Integer = 0
+ Public OwnGeomancyCounter As Integer = 0
Public OwnWrap As Integer = 0
Public OwnWhirlpool As Integer = 0
Public OwnBind As Integer = 0
@@ -187,6 +190,7 @@
Public OppMiracleEye As Integer = 0
Public OppProtectMovesCount As Integer = 0
Public OppFuryCutter As Integer = 0
+ Public OppEchoedVoice As Integer = 0
Public OppPokemonTurns As Integer = 0
Public OppStockpileCount As Integer = 0
Public OppIceBurnCounter As Integer = 0
@@ -210,7 +214,9 @@
Public OppBounceCounter As Integer = 0
Public OppDiveCounter As Integer = 0
Public OppShadowForceCounter As Integer = 0
+ Public OppPhantomForceCounter As Integer = 0
Public OppSkyDropCounter As Integer = 0
+ Public OppGeomancyCounter As Integer = 0
Public OppWrap As Integer = 0
Public OppWhirlpool As Integer = 0
diff --git a/P3D/Battle/BattleSystemV2/PokemonProfile.vb b/P3D/Battle/BattleSystemV2/PokemonProfile.vb
index 81eb2a3ad..fe757990b 100644
--- a/P3D/Battle/BattleSystemV2/PokemonProfile.vb
+++ b/P3D/Battle/BattleSystemV2/PokemonProfile.vb
@@ -247,9 +247,17 @@
'''
Public ShadowForce As Integer = 0
'''
+ ''' Phantom Force move counter.
+ '''
+ Public PhantomForce As Integer = 0
+ '''
''' Sky Drop move counter.
'''
Public SkyDrop As Integer = 0
+ '''
+ ''' Geomancy move counter.
+ '''
+ Public Geomancy As Integer = 0
'''
''' Turns this Pokémon is trapped in Wrap.
@@ -297,6 +305,10 @@
'''
Public FuryCutter As Integer = 0
'''
+ ''' Counter for the Echoed Voice move.
+ '''
+ Public EchoedVoice As Integer = 0
+ '''
''' Counter for the Stockpile move.
'''
Public StockPile As Integer = 0
@@ -449,6 +461,7 @@
Me.CustapBerry = 0
Me.Trapped = 0
Me.FuryCutter = 0
+ Me.EchoedVoice = 0
Me.TurnsInBattle = 0
Me.StockPile = 0
Me.DestinyBond = 0
@@ -461,7 +474,9 @@
Me.Bounce = 0
Me.Dive = 0
Me.ShadowForce = 0
+ Me.PhantomForce = 0
Me.SkyDrop = 0
+ Me.Geomancy = 0
Me.SkyAttack = 0
Me.RazorWind = 0
Me.SkullBash = 0
diff --git a/P3D/Content/GUI/Menus/SummaryStatus.png b/P3D/Content/GUI/Menus/SummaryStatus.png
new file mode 100644
index 000000000..93d94b996
Binary files /dev/null and b/P3D/Content/GUI/Menus/SummaryStatus.png differ
diff --git a/P3D/Content/Items/ItemSheet.png b/P3D/Content/Items/ItemSheet.png
index 4162bc5d2..f5f1d120b 100644
Binary files a/P3D/Content/Items/ItemSheet.png and b/P3D/Content/Items/ItemSheet.png differ
diff --git a/P3D/Content/Items/MegaStones.png b/P3D/Content/Items/MegaStones.png
index 6674da2f5..29fa547ee 100644
Binary files a/P3D/Content/Items/MegaStones.png and b/P3D/Content/Items/MegaStones.png differ
diff --git a/P3D/Content/Pokemon/Data/701.dat b/P3D/Content/Pokemon/Data/701.dat
index c0032f797..71e07f5e9 100644
--- a/P3D/Content/Pokemon/Data/701.dat
+++ b/P3D/Content/Pokemon/Data/701.dat
@@ -44,7 +44,7 @@ Move|12,355
Move|16,332
Move|20,227
Move|24,374
-Move|28,560
+Move|28,9999
Move|32,340
Move|36,283
Move|40,297
diff --git a/P3D/P3D.vbproj b/P3D/P3D.vbproj
index 8be05b15e..202052aef 100644
--- a/P3D/P3D.vbproj
+++ b/P3D/P3D.vbproj
@@ -25508,25 +25508,121 @@
+
+ PreserveNewest
+
PreserveNewest
+
+ PreserveNewest
+
+
+ PreserveNewest
+
PreserveNewest
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
PreserveNewest
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
PreserveNewest
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
PreserveNewest
PreserveNewest
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
@@ -25770,7 +25866,9 @@
PreserveNewest
-
+
+ PreserveNewest
+
@@ -25792,8 +25890,12 @@
-
-
+
+ PreserveNewest
+
+
+ PreserveNewest
+
diff --git a/P3D/Pokemon/Attacks/Attack.vb b/P3D/Pokemon/Attacks/Attack.vb
index 849c8df99..4c1a4b0cc 100644
--- a/P3D/Pokemon/Attacks/Attack.vb
+++ b/P3D/Pokemon/Attacks/Attack.vb
@@ -1018,8 +1018,8 @@
returnMove = New Moves.Dark.Punishment()
Case 387
returnMove = New Moves.Normal.LastResort()
- 'Case 388
- 'Worry Seed
+ Case 388
+ returnMove = New Moves.Grass.WorrySeed()
Case 389
returnMove = New Moves.Dark.SuckerPunch()
Case 390
@@ -1140,8 +1140,8 @@
returnMove = New Moves.Grass.GrassKnot()
Case 448
returnMove = New Moves.Flying.Chatter()
- 'Case 449
- 'Judgment
+ Case 449
+ returnMove = New Moves.Normal.Judgement()
Case 450
returnMove = New Moves.Bug.BugBite()
Case 451
@@ -1212,8 +1212,8 @@
returnMove = New Moves.Bug.QuiverDance()
Case 484
returnMove = New Moves.Steel.HeavySlam()
- 'Case 485
- 'Synchronoise
+ Case 485
+ returnMove = New Moves.Psychic.Synchronoise()
Case 486
returnMove = New Moves.Electric.ElectroBall()
'Case 487
@@ -1228,16 +1228,16 @@
returnMove = New Moves.Poison.AcidSpray()
Case 492
returnMove = New Moves.Dark.FoulPlay()
- 'Case 493
- 'Simple Beam
- 'Case 494
- 'Entertainment
+ Case 493
+ returnMove = New Moves.Normal.SimpleBeam()
+ Case 494
+ returnMove = New Moves.Normal.Entrainment()
'Case 495
'After You
- 'Case 496
- 'Round
- 'Case 497
- 'Echoed Voice
+ Case 496
+ returnMove = New Moves.Normal.Round()
+ Case 497
+ returnMove = New Moves.Normal.EchoedVoice()
Case 498
returnMove = New Moves.Normal.ChipAway()
Case 499
@@ -1262,20 +1262,20 @@
returnMove = New Moves.Steel.ShiftGear()
Case 509
returnMove = New Moves.Fighting.CircleThrow()
- 'Case 510
- 'Incinerate
+ Case 510
+ returnMove = New Moves.Fire.Incinerate()
'Case 511
'Quash
Case 512
returnMove = New Moves.Flying.Acrobatics()
- 'Case 513
- 'Reflect Type
+ Case 513
+ returnMove = New Moves.Normal.ReflectType()
'Case 514
'Retaliate
- 'Case 515
- 'Final Gambit
- 'Case 516
- 'Bestow
+ Case 515
+ returnMove = New Moves.Fighting.FinalGambit()
+ Case 516
+ returnMove = New Moves.Normal.Bestow()
Case 517
returnMove = New Moves.Fire.Inferno()
Case 518
@@ -1322,8 +1322,8 @@
returnMove = New Moves.Grass.CottonGuard()
Case 539
returnMove = New Moves.Dark.NightDaze()
- 'Case 540
- 'Psystrike
+ Case 540
+ returnMove = New Moves.Psychic.Psystrike()
Case 541
returnMove = New Moves.Normal.TailSlap()
Case 542
@@ -1334,14 +1334,14 @@
returnMove = New Moves.Steel.GearGrind()
Case 545
returnMove = New Moves.Fire.SearingShot()
- 'Case 546
- 'Techno Blast
+ Case 546
+ returnMove = New Moves.Normal.TechnoBlast()
'Case 547
'Relic Song
Case 548
returnMove = New Moves.Fighting.SecretSword()
- 'Case 549
- 'Glaciate
+ Case 549
+ returnMove = New Moves.Ice.Glaciate()
Case 550
returnMove = New Moves.Electric.BoltStrike()
Case 551
@@ -1372,10 +1372,10 @@
'Rototiller
Case 564
returnMove = New Moves.Bug.StickyWeb()
- 'Case 565
- 'Fell Stinger
- 'Case 566
- 'Phantom Force
+ Case 565
+ returnMove = New Moves.Bug.FellStinger()
+ Case 566
+ returnMove = New Moves.Ghost.PhantomForce()
'Case 567
'Trick-or-Treat
Case 568
@@ -1392,8 +1392,8 @@
returnMove = New Moves.Ice.FreezeDry()
Case 574
returnMove = New Moves.Fairy.DisarmingVoice()
- 'Case 575
- 'Parting Shot
+ Case 575
+ returnMove = New Moves.Dark.PartingShot()
'Case 576
'Topsy-Turvy
Case 577
@@ -1424,12 +1424,12 @@
returnMove = New Moves.Normal.PlayNice()
Case 590
returnMove = New Moves.Normal.Confide()
- 'Case 591
- 'Diamond Storm
+ Case 591
+ returnMove = New Moves.Rock.DiamondStorm()
Case 592
returnMove = New Moves.Water.SteamEruption()
- 'Case 593
- 'Hyperspace Hole
+ Case 593
+ returnMove = New Moves.Psychic.HyperspaceHole()
Case 594
returnMove = New Moves.Water.WaterShuriken()
Case 595
@@ -1437,277 +1437,281 @@
'Case 596
'Spiky Shield
'Case 597
- 'Aromatic Mist
+ 'Aromatic Mist - Double Battles
Case 598
returnMove = New Moves.Electric.EerieImpulse()
- 'Case 599
- 'Vemon Drench
+ Case 599
+ returnMove = New Moves.Poison.VenomDrench()
'Case 600
'Powder
- 'Case 601
- 'Geomancy
+ Case 601
+ returnMove = New Moves.Fairy.Geomancy()
'Case 602
- 'Macnetic Flux
+ 'Magnetic Flux - Double Battles
'Case 603
'Happy Hour
'Case 604
'Electric Terrain
Case 605
returnMove = New Moves.Fairy.DazzlingGleam()
- 'Case 606
- 'Celebrate
+ Case 606
+ returnMove = New Moves.Normal.Celebrate()
'Case 607
'Hold Hands
Case 608
returnMove = New Moves.Fairy.BabyDollEyes()
Case 609
returnMove = New Moves.Electric.Nuzzle()
- 'Case 610
- 'Hold Back
+ Case 610
+ returnMove = New Moves.Normal.HoldBack()
Case 611
returnMove = New Moves.Bug.Infestation()
Case 612
returnMove = New Moves.Fighting.PowerUpPunch()
Case 613
returnMove = New Moves.Flying.OblivionWing()
- 'Case 614
- 'Thousand Arrows
+ Case 614
+ returnMove = New Moves.Ground.ThousandArrows()
Case 615
returnMove = New Moves.Ground.ThousandWaves()
Case 616
returnMove = New Moves.Ground.LandsWrath()
- 'Case 617
- 'Light of Ruin
- 'Case 618
- 'Origin Pulse
- 'Case 619
- 'Precipice Blades
- 'Case 620
- 'Dragon Ascent
- 'Case 621
- 'Hyperspace Fury
- 'Case 622
- 'Breakneck Blitz - Physical
- 'Case 623
- 'Breakneck Blitz - Special
- 'Case 624
- 'All-Out Pummeling - Physical
- 'Case 625
- 'All-Out Pummeling - Special
- 'Case 626
- 'Supersonic Skystrike - Physical
- 'Case 627
- 'Supersonic Skystrike - Special
- 'Case 628
- 'Acid Downpour - Physical
- 'Case 629
- 'Acid Downpour - Special
- 'Case 630
- 'Tectonic Rage - Physical
- 'Case 631
- 'Tectonic Rage - Special
- 'Case 632
- 'Continental Crush - Physical
- 'Case 633
- 'Continental Crush - Special
- 'Case 634
- 'Savage Spin-Out - Physical
- 'Case 635
- 'Savage Spin-Out - Special
- 'Case 636
- 'Never-Ending Nightmare - Physical
- 'Case 637
- 'Never-Ending Nightmare - Special
- 'Case 638
- 'Corkscrew Crash - Physical
- 'Case 639
- 'Corkscrew Crash - Special
- 'Case 640
- 'Inferno Overdrive - Physical
- 'Case 641
- 'Inferno Overdrive - Special
- 'Case 642
- 'Hydro Vortex - Physical
- 'Case 643
- 'Hydro Vortex - Special
- 'Case 644
- 'Bloom Doom - Physical
- 'Case 645
- 'Bloom Doom - Special
- 'Case 646
- 'Gigavolt Havoc - Physical
- 'Case 647
- 'Gigavolt Havoc - Special
- 'Case 648
- 'Shattered Psyche - Physical
- 'Case 649
- 'Shattered Psyche - Special
- 'Case 650
- 'Subzero Slammer - Physical
- 'Case 651
- 'Subzero Slammer - Special
- 'Case 652
- 'Devastating Drake - Physical
- 'Case 653
- 'Devastating Drake - Special
- 'Case 654
- 'Black Hole Eclipse - Physical
- 'Case 655
- 'Black Hole Eclipse - Special
- 'Case 656
- 'Twinkle Tackle - Physical
- 'Case 657
- 'Twinkle Tackle - Special
- 'Case 658
- 'Catastropika
- 'Case 659
- 'Shore Up
- 'Case 660
- 'First Impression
- 'Case 661
- 'Baneful Bunker
- 'Case 662
- 'Spirit Shackle
- 'Case 663
- 'Darkest Lariat
- 'Case 664
- 'Sparkling Aria
- 'Case 665
- 'Ice Hammer
- 'Case 666
- 'Floral Healing
- 'Case 667
- 'High Horsepower
- 'Case 668
- 'Strength Sap
- 'Case 669
- 'Solar Blade
- 'Case 670
- 'Leafage
- 'Case 671
- 'Spotlight
- 'Case 672
- 'Toxic Thread
- 'Case 673
- 'Laser Focus
- 'Case 674
- 'Gear Up
- 'Case 675
- 'Throat Chop
- 'Case 676
- 'Pollen Puff
- 'Case 677
- 'Anchor Shot
- 'Case 678
- 'Psychic Terrain
- 'Case 679
- 'Lunge
- 'Case 680
- 'Fire Lash
- 'Case 681
- 'Power Trip
- 'Case 682
- 'Burn Up
- 'Case 683
- 'Speed Swap
- 'Case 684
- 'Smart Strike
- 'Case 685
- 'Purify
- 'Case 686
- 'Revelation Dance
- 'Case 687
- 'Core Enforcer
- 'Case 688
- 'Trop Kick
- 'Case 689
- 'Instruct
- 'Case 690
- 'Beak Blast
- 'Case 691
- 'Clanging Scales
- 'Case 692
- 'Dragon Hammer
- 'Case 693
- 'Brutal Swing
- 'Case 694
- 'Aurora Veil
- 'Case 695
- 'Sinister Arrow Raid
- 'Case 696
- 'Malicious Moonsault
- 'Case 697
- 'Oceanic Operetta
- 'Case 698
- 'Guardian of Alola
- 'Case 699
- 'Soul-Stealing 7-Star Strike
- 'Case 700
- 'Stoked Sparksurfer
- 'Case 701
- 'Pulverizing Pancake
- 'Case 702
- 'Extreme Evoboost
- 'Case 703
- 'Genesis Supernova
- 'Case 704
- 'Shell Trap
- 'Case 705
- 'Fleur Cannon
- 'Case 706
- 'Psychic Fangs
- 'Case 707
- 'Stomping Tantrum
- 'Case 708
- 'Shadow Bone
- 'Case 709
- 'Accelerock
- 'Case 710
- 'Liquidation
- 'Case 711
- 'Prismatic Laser
- 'Case 712
- 'Spectral Thief
- 'Case 713
- 'Sunsteel Strike
- 'Case 714
- 'Moongeist Beam
- 'Case 715
- 'Tearful Look
- 'Case 716
- 'Zing Zap
- 'Case 717
- 'Nature's Madness
- 'Case 718
- 'Multi-Attack
- 'Case 719
- '10,000,000 Volt Thunderbolt
- 'Case 720
- 'Mind Blown
- 'Case 721
- 'Plasma Fists
- 'Case 722
- 'Photon Geyser
- 'Case 723
- 'Light That Burns The Sky
- 'Case 724
- 'Searing Sunraze Smash
- 'Case 725
- 'Menacing Moonraze Maelstrom
- 'Case 726
- 'Let's Snuggle Forever
- 'Case 727
- 'Splintered Stormshards
- 'Case 728
- 'Clangorous Soulblaze
- 'Case 729
- 'Blank
+ Case 617
+ returnMove = New Moves.Fairy.LightOfRuin()
+ Case 618
+ returnMove = New Moves.Water.OriginPulse()
+ Case 619
+ returnMove = New Moves.Ground.PrecipiceBlades()
+ Case 620
+ returnMove = New Moves.Flying.DragonAscent()
+ Case 621
+ returnMove = New Moves.Dark.HyperspaceFury()
+ '------------------------------------------------BEGIN Z MOVE STREAK
+ 'Case 622
+ 'Breakneck Blitz - Physical
+ 'Case 623
+ 'Breakneck Blitz - Special
+ 'Case 624
+ 'All-Out Pummeling - Physical
+ 'Case 625
+ 'All-Out Pummeling - Special
+ 'Case 626
+ 'Supersonic Skystrike - Physical
+ 'Case 627
+ 'Supersonic Skystrike - Special
+ 'Case 628
+ 'Acid Downpour - Physical
+ 'Case 629
+ 'Acid Downpour - Special
+ 'Case 630
+ 'Tectonic Rage - Physical
+ 'Case 631
+ 'Tectonic Rage - Special
+ 'Case 632
+ 'Continental Crush - Physical
+ 'Case 633
+ 'Continental Crush - Special
+ 'Case 634
+ 'Savage Spin-Out - Physical
+ 'Case 635
+ 'Savage Spin-Out - Special
+ 'Case 636
+ 'Never-Ending Nightmare - Physical
+ 'Case 637
+ 'Never-Ending Nightmare - Special
+ 'Case 638
+ 'Corkscrew Crash - Physical
+ 'Case 639
+ 'Corkscrew Crash - Special
+ 'Case 640
+ 'Inferno Overdrive - Physical
+ 'Case 641
+ 'Inferno Overdrive - Special
+ 'Case 642
+ 'Hydro Vortex - Physical
+ 'Case 643
+ 'Hydro Vortex - Special
+ 'Case 644
+ 'Bloom Doom - Physical
+ 'Case 645
+ 'Bloom Doom - Special
+ 'Case 646
+ 'Gigavolt Havoc - Physical
+ 'Case 647
+ 'Gigavolt Havoc - Special
+ 'Case 648
+ 'Shattered Psyche - Physical
+ 'Case 649
+ 'Shattered Psyche - Special
+ 'Case 650
+ 'Subzero Slammer - Physical
+ 'Case 651
+ 'Subzero Slammer - Special
+ 'Case 652
+ 'Devastating Drake - Physical
+ 'Case 653
+ 'Devastating Drake - Special
+ 'Case 654
+ 'Black Hole Eclipse - Physical
+ 'Case 655
+ 'Black Hole Eclipse - Special
+ 'Case 656
+ 'Twinkle Tackle - Physical
+ 'Case 657
+ 'Twinkle Tackle - Special
+ 'Case 658
+ 'Catastropika
+ '------------------------------------------------END Z MOVE STREAK
+ 'Case 659
+ 'returnMove = New Moves.Ground.ShoreUp()
+ 'Case 660
+ 'returnMove = New Moves.Bug.FirstImpression()
+ 'Case 661
+ 'Baneful Bunker
+ 'Case 662
+ 'returnMove = New Moves.Ghost.SpiritShackle()
+ 'Case 663
+ 'returnMove = New Moves.Dark.DarkestLariat()
+ 'Case 664
+ 'returnMove = New Moves.Water.SparklingAria()
+ 'Case 665
+ 'returnMove = New Moves.Ice.IceHammer()
+ 'Case 666
+ 'Floral Healing - Double Battles
+ 'Case 667
+ 'returnMove = New Moves.Ground.HighHorsepower()
+ 'Case 668
+ 'returnMove = New Moves.Grass.StrengthSap()
+ 'Case 669
+ 'returnMove = New Moves.Grass.SolarBlade()
+ 'Case 670
+ 'returnMove = New Moves.Grass.Leafage()
+ 'Case 671
+ 'Spotlight
+ 'Case 672
+ 'returnMove = New Moves.Poison.ToxicThread()
+ 'Case 673
+ 'Laser Focus
+ 'Case 674
+ 'returnMove = New Moves.Steel.GearUp()
+ 'Case 675
+ 'Throat Chop
+ 'Case 676
+ 'returnMove = New Moves.Bug.PollenPuff()
+ 'Case 677
+ 'returnMove = New Moves.Steel.AnchorShot()
+ 'Case 678
+ 'Psychic Terrain
+ 'Case 679
+ 'returnMove = New Moves.Bug.Lunge()
+ 'Case 680
+ 'returnMove = New Moves.Fire.FireLash()
+ 'Case 681
+ 'returnMove = New Moves.Dark.PowerTrip()
+ 'Case 682
+ 'returnMove = New Moves.Fire.BurnUp()
+ 'Case 683
+ 'Speed Swap
+ 'Case 684
+ 'returnMove = New Moves.Steel.SmartStrike()
+ 'Case 685
+ 'Purify - Double Battles
+ 'Case 686
+ 'returnMove = New Moves.Normal.RevelationDance()
+ 'Case 687
+ 'Core Enforcer
+ 'Case 688
+ 'returnMove = New Moves.Grass.TropKick()
+ 'Case 689
+ 'Instruct
+ 'Case 690
+ 'Beak Blast
+ 'Case 691
+ 'returnMove = New Moves.Dragon.ClangingScales()
+ 'Case 692
+ 'returnMove = New Moves.Dragon.DragonHammer()
+ 'Case 693
+ 'returnMove = New Moves.Dark.BrutalSwing()
+ 'Case 694
+ 'returnMove = New Moves.Ice.AuroraVeil()
+ 'Case 695
+ 'Sinister Arrow Raid - Z-Move
+ 'Case 696
+ 'Malicious Moonsault - Z-Move
+ 'Case 697
+ 'Oceanic Operetta - Z-Move
+ 'Case 698
+ 'Guardian of Alola - Z-Move
+ 'Case 699
+ 'Soul-Stealing 7-Star Strike - Z-Move
+ 'Case 700
+ 'Stoked Sparksurfer - Z-Move
+ 'Case 701
+ 'Pulverizing Pancake - Z-Move
+ 'Case 702
+ 'Extreme Evoboost - Z-Move
+ 'Case 703
+ 'Genesis Supernova - Z-Move
+ 'Case 704
+ 'Shell Trap
+ 'Case 705
+ 'returnMove = New Moves.Fairy.FleurCannon()
+ 'Case 706
+ 'returnMove = New Moves.Psychic.PsychicFangs()
+ 'Case 707
+ 'Stomping Tantrum
+ 'Case 708
+ 'returnMove = New Moves.Ghost.ShadowBone()
+ 'Case 709
+ 'returnMove = New Moves.Rock.Accelerock()
+ 'Case 710
+ 'returnMove = New Moves.Water.Liquidation()
+ 'Case 711
+ 'returnMove = New Moves.Psychic.PrismaticLaser()
+ 'Case 712
+ 'Spectral Thief
+ 'Case 713
+ 'returnMove = New Moves.Steel.SunsteelStrike()
+ 'Case 714
+ 'returnMove = New Moves.Ghost.MoongeistBeam()
+ 'Case 715
+ 'returnMove = New Moves.Normal.TearfulLook()
+ 'Case 716
+ 'returnMove = New Moves.Electric.ZingZap()
+ 'Case 717
+ 'returnMove = New Moves.Fairy.NaturesMadness()
+ 'Case 718
+ 'returnMove = New Moves.Normal.Multi-Attack()
+ 'Case 719
+ '10,000,000 Volt Thunderbolt - Z-Move
+ 'Case 720
+ 'returnMove = New Moves.Fire.MindBlown()
+ 'Case 721
+ 'Plasma Fists
+ 'Case 722
+ 'Photon Geyser
+ 'Case 723
+ 'Light That Burns The Sky - Z-Move
+ 'Case 724
+ 'Searing Sunraze Smash - Z-Move
+ 'Case 725
+ 'Menacing Moonraze Maelstrom - Z-Move
+ 'Case 726
+ 'Let's Snuggle Forever - Z-Move
+ 'Case 727
+ 'Splintered Stormshards - Z-Move
+ 'Case 728
+ 'Clangorous Soulblaze - Z-Move
+ 'Case 729
+ 'Blank
Case 999
If GameController.IS_DEBUG_ACTIVE = True Or Core.Player.SandBoxMode = True Then
returnMove = New Moves.Special.TheDerpMove()
Else
returnMove = New Moves.Normal.Pound()
End If
+ Case 9999
+ returnMove = New Moves.Fighting.FlyingPress()
Case Else
'Try to load a GameMode move.
Dim gameModeMove As Attack = GameModeAttackLoader.GetAttackByID(ID)
diff --git a/P3D/Pokemon/Attacks/Bug/FellStinger.vb b/P3D/Pokemon/Attacks/Bug/FellStinger.vb
new file mode 100644
index 000000000..9b1a19c7f
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Bug/FellStinger.vb
@@ -0,0 +1,69 @@
+Namespace BattleSystem.Moves.Bug
+
+ Public Class FellStinger
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Bug)
+ Me.ID = 565
+ Me.OriginalPP = 25
+ Me.CurrentPP = 25
+ Me.MaxPP = 25
+ Me.Power = 50
+ Me.Accuracy = 100
+ Me.Category = Categories.Physical
+ Me.ContestCategory = ContestCategories.Cool
+ Me.Name = "Fell Stinger"
+ Me.Description = "When the user knocks out a target with this move, the user's Attack stat rises drastically."
+ Me.CriticalChance = 1
+ Me.IsHMMove = False
+ Me.Target = Targets.OneAdjacentTarget
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = True
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = True
+ Me.CounterAffected = True
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = True
+ Me.HasSecondaryEffect = False
+ Me.RemovesFrozen = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ '#End
+ End Sub
+
+ Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
+ Dim p As Pokemon = BattleScreen.OwnPokemon
+ Dim op As Pokemon = BattleScreen.OppPokemon
+ If own = False Then
+ p = BattleScreen.OppPokemon
+ op = BattleScreen.OwnPokemon
+ End If
+ If op.HP = 0 Then
+ BattleScreen.Battle.RaiseStat(own, own, BattleScreen, "Attack", 3, "", "move:fellstinger")
+ End If
+ End Sub
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Dark/DarkVoid.vb b/P3D/Pokemon/Attacks/Dark/DarkVoid.vb
index 1bc19a541..aa076711d 100644
--- a/P3D/Pokemon/Attacks/Dark/DarkVoid.vb
+++ b/P3D/Pokemon/Attacks/Dark/DarkVoid.vb
@@ -55,7 +55,24 @@
Me.AIField2 = AIField.Nothing
End Sub
+ Public Overrides Function MoveFailBeforeAttack(Own As Boolean, BattleScreen As BattleScreen) As Boolean
+ Dim p As Pokemon = BattleScreen.OwnPokemon
+ If Own = False Then
+ p = BattleScreen.OppPokemon
+ End If
+ If p.Number = 491 Then
+ Return False
+ Else
+ BattleScreen.BattleQuery.Add(New TextQueryObject("But " & p.GetDisplayName() & " can't use the move!"))
+ Return True
+ End If
+ End Function
+
Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
+ Dim p As Pokemon = BattleScreen.OwnPokemon
+ If own = False Then
+ p = BattleScreen.OppPokemon
+ End If
Dim b As Boolean = BattleScreen.Battle.InflictSleep(Not own, own, BattleScreen, -1, "", "move:darkvoid")
If b = False Then
BattleScreen.BattleQuery.Add(New TextQueryObject(Me.Name & " failed!"))
diff --git a/P3D/Pokemon/Attacks/Dark/HyperspaceFury.vb b/P3D/Pokemon/Attacks/Dark/HyperspaceFury.vb
new file mode 100644
index 000000000..1e1275ee7
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Dark/HyperspaceFury.vb
@@ -0,0 +1,94 @@
+Namespace BattleSystem.Moves.Dark
+
+ Public Class HyperspaceFury
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Dark)
+ Me.ID = 621
+ Me.OriginalPP = 25
+ Me.CurrentPP = 25
+ Me.MaxPP = 25
+ Me.Power = 100
+ Me.Accuracy = 0
+ Me.Category = Categories.Physical
+ Me.ContestCategory = ContestCategories.Tough
+ Me.Name = "Hyperspace Fury"
+ Me.Description = "Using its many arms, the user unleashes a barrage of attacks that ignore the effects of moves like Protect and Detect. But the user’s Defense stat falls."
+ Me.CriticalChance = 1
+ Me.IsHMMove = False
+ Me.Target = Targets.OneAdjacentTarget
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = False
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = False
+ Me.KingsrockAffected = True
+ Me.CounterAffected = True
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = True
+ Me.RemovesFrozen = False
+ Me.HasSecondaryEffect = True
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ Me.UseAccEvasion = False
+ Me.CanHitUnderwater = False
+ Me.CanHitUnderground = False
+ Me.CanHitInMidAir = False
+ '#End
+
+ Me.AIField1 = AIField.Damage
+ Me.AIField2 = AIField.CannotMiss
+ End Sub
+
+ Public Overrides Function MoveFailBeforeAttack(Own As Boolean, BattleScreen As BattleScreen) As Boolean
+ Dim p As Pokemon = BattleScreen.OwnPokemon
+ If Own = False Then
+ p = BattleScreen.OppPokemon
+ End If
+ If p.Number = 720 And p.AdditionalData = "unbound" Then
+ Return False
+ Else
+ BattleScreen.BattleQuery.Add(New TextQueryObject("But " & p.GetDisplayName() & " can't use the move!"))
+ Return True
+ End If
+ End Function
+
+ Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
+ Dim op As Pokemon = BattleScreen.OppPokemon
+
+ If own = True Then
+ BattleScreen.FieldEffects.OppDetectCounter = 0
+ BattleScreen.FieldEffects.OppProtectCounter = 0
+ Else
+ op = BattleScreen.OwnPokemon
+
+ BattleScreen.FieldEffects.OwnDetectCounter = 0
+ BattleScreen.FieldEffects.OwnProtectCounter = 0
+ End If
+
+ BattleScreen.Battle.LowerStat(own, own, BattleScreen, "Defense", 1, "", "move:hyperspacefury")
+ BattleScreen.BattleQuery.Add(New TextQueryObject("Hyperspace Fury lifted " & op.GetDisplayName() & "'s protection!"))
+ End Sub
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Dark/KnockOff.vb b/P3D/Pokemon/Attacks/Dark/KnockOff.vb
index 7d814ec15..70eb72137 100644
--- a/P3D/Pokemon/Attacks/Dark/KnockOff.vb
+++ b/P3D/Pokemon/Attacks/Dark/KnockOff.vb
@@ -70,12 +70,18 @@
If op.Ability.Name.ToLower() = "multitype" AndAlso op.Item.Name.ToLower().EndsWith(" plate") Then
Return Power
End If
+ If op.Ability.Name.ToLower() = "rks system" AndAlso op.Item.Name.ToLower().EndsWith(" memory") Then
+ Return Power
+ End If
If op.Item.Name.ToLower() = "griseous orb" And op.Number = 487 Then
Return Power
End If
If op.Item.Name.ToLower().EndsWith(" drive") = True AndAlso op.Number = 649 Then
Return Power
End If
+ If op.Item.Name.ToLower().EndsWith(" mail") = True Then
+ Return Power
+ End If
Return CInt(Me.Power * 1.5F)
End Function
@@ -98,12 +104,18 @@
If op.Ability.Name.ToLower() = "multitype" AndAlso op.Item.Name.ToLower().EndsWith(" plate") Then
Exit Sub
End If
+ If op.Ability.Name.ToLower() = "rks system" AndAlso op.Item.Name.ToLower().EndsWith(" memory") Then
+ Exit Sub
+ End If
If op.Item.Name.ToLower() = "griseous orb" And op.Number = 487 Then
Exit Sub
End If
If op.Item.Name.ToLower().EndsWith(" drive") = True AndAlso p.Number = 649 Then
Exit Sub
End If
+ If op.Item.Name.ToLower().EndsWith(" mail") = True Then
+ Exit Sub
+ End If
op.OriginalItem = Item.GetItemByID(op.Item.ID)
op.OriginalItem.AdditionalData = op.Item.AdditionalData
diff --git a/P3D/Pokemon/Attacks/Dark/PartingShot.vb b/P3D/Pokemon/Attacks/Dark/PartingShot.vb
new file mode 100644
index 000000000..fb476ee5c
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Dark/PartingShot.vb
@@ -0,0 +1,96 @@
+Namespace BattleSystem.Moves.Dark
+
+ Public Class PartingShot
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Dark)
+ Me.ID = 575
+ Me.OriginalPP = 20
+ Me.CurrentPP = 20
+ Me.MaxPP = 20
+ Me.Power = 0
+ Me.Accuracy = 100
+ Me.Category = Categories.Status
+ Me.ContestCategory = ContestCategories.Cool
+ Me.Name = "Parting Shot"
+ Me.Description = "With a parting threat, the user lowers the target's Attack and Sp. Atk stats. Then it switches with a party Pokémon."
+ Me.CriticalChance = 0
+ Me.IsHMMove = False
+ Me.Target = Targets.OneAdjacentTarget
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = True
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = True
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = False
+ Me.ImmunityAffected = False
+ Me.RemovesFrozen = False
+ Me.HasSecondaryEffect = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = False
+ Me.IsProtectMove = False
+ Me.IsSoundMove = True
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ '#End
+ End Sub
+
+ Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
+ Dim b As Boolean = BattleScreen.Battle.LowerStat(Not own, own, BattleScreen, "Attack", 1, "", "move:partingshot")
+ Dim d As Boolean = BattleScreen.Battle.LowerStat(Not own, own, BattleScreen, "Special Attack", 1, "", "move:partingshot")
+ If b = False Or d = False Then
+ BattleScreen.BattleQuery.Add(New TextQueryObject(Me.Name & " failed!"))
+ End If
+ End Sub
+
+ Public Overrides Sub MoveSwitch(own As Boolean, BattleScreen As BattleScreen)
+ If own = True Then
+ If Core.Player.CountFightablePokemon > 1 Then
+ BattleScreen.Battle.SwitchOutOwn(BattleScreen, GetPokemonIndex(BattleScreen, own), -1)
+ End If
+ Else
+ If BattleScreen.IsTrainerBattle = True Or BattleScreen.IsRemoteBattle = True Or BattleScreen.IsPVPBattle = True Then
+ If BattleScreen.Trainer.CountUseablePokemon > 1 Then
+ BattleScreen.Battle.SwitchOutOpp(BattleScreen, GetPokemonIndex(BattleScreen, own))
+ End If
+ End If
+ End If
+ End Sub
+
+ Private Function GetPokemonIndex(ByVal BattleScreen As BattleScreen, ByVal own As Boolean) As Integer
+ If own = True Then
+ Dim i As Integer = 0
+ While Core.Player.Pokemons(i).HP <= 0 Or Core.Player.Pokemons(i).Status = Pokemon.StatusProblems.Fainted Or i = BattleScreen.OwnPokemonIndex Or Core.Player.Pokemons(i).IsEgg() = True
+ i += 1
+ End While
+ Return i
+ Else
+ Dim i As Integer = 0
+ While BattleScreen.Trainer.Pokemons(i).HP <= 0 Or BattleScreen.Trainer.Pokemons(i).Status = Pokemon.StatusProblems.Fainted Or i = BattleScreen.OppPokemonIndex Or BattleScreen.Trainer.Pokemons(i).IsEgg() = True
+ i += 1
+ End While
+ Return i
+ End If
+ Return -1
+ End Function
+
+ End Class
+
+End Namespace
diff --git a/P3D/Pokemon/Attacks/Dark/Switcheroo.vb b/P3D/Pokemon/Attacks/Dark/Switcheroo.vb
index eed23fe1e..f00a3b528 100644
--- a/P3D/Pokemon/Attacks/Dark/Switcheroo.vb
+++ b/P3D/Pokemon/Attacks/Dark/Switcheroo.vb
@@ -75,15 +75,30 @@ Namespace BattleSystem.Moves.Dark
If Not op.Item Is Nothing AndAlso op.Item.Name.ToLower() = "griseous orb" AndAlso op.Number = 487 Then
CanSwitchItems = False
End If
- If CheckMultitypePlate(p, op) = False Then
- CanSwitchItems = False
- End If
If Not p.Item Is Nothing AndAlso p.Item.Name.ToLower().EndsWith(" drive") = True AndAlso p.Number = 649 Then
CanSwitchItems = False
End If
If Not op.Item Is Nothing AndAlso op.Item.Name.ToLower().EndsWith(" drive") = True AndAlso op.Number = 649 Then
CanSwitchItems = False
End If
+ If Not p.Item Is Nothing AndAlso p.Item.Name.ToLower().EndsWith(" plate") = True AndAlso p.Number = 493 Then
+ CanSwitchItems = False
+ End If
+ If Not op.Item Is Nothing AndAlso op.Item.Name.ToLower().EndsWith(" plate") = True AndAlso op.Number = 493 Then
+ CanSwitchItems = False
+ End If
+ If Not p.Item Is Nothing AndAlso p.Item.Name.ToLower().EndsWith(" memory") = True AndAlso p.Number = 773 Then
+ CanSwitchItems = False
+ End If
+ If Not op.Item Is Nothing AndAlso op.Item.Name.ToLower().EndsWith(" memory") = True AndAlso op.Number = 773 Then
+ CanSwitchItems = False
+ End If
+ If Not p.Item Is Nothing AndAlso p.Item.Name.ToLower().EndsWith(" mail") = True Then
+ CanSwitchItems = False
+ End If
+ If Not op.Item Is Nothing AndAlso op.Item.Name.ToLower().EndsWith(" mail") = True Then
+ CanSwitchItems = False
+ End If
If (p.Item IsNot Nothing AndAlso p.Item.IsMegaStone) OrElse (op.Item IsNot Nothing AndAlso op.Item.IsMegaStone) Then
CanSwitchItems = False
End If
@@ -105,25 +120,6 @@ Namespace BattleSystem.Moves.Dark
End If
End Sub
- Private Function CheckMultitypePlate(ByVal p As Pokemon, ByVal op As Pokemon) As Boolean
- If p.Ability.Name.ToLower() <> "multitype" And op.Ability.Name.ToLower() <> "multitype" Then
- Return True
- Else
- If Not p.Item Is Nothing Then
- If p.Item.Name.ToLower().EndsWith(" plate") = True Then
- Return False
- End If
- End If
- If Not op.Item Is Nothing Then
- If op.Item.Name.ToLower().EndsWith(" plate") = True Then
- Return False
- End If
- End If
- End If
-
- Return True
- End Function
-
End Class
End Namespace
diff --git a/P3D/Pokemon/Attacks/Dark/Thief.vb b/P3D/Pokemon/Attacks/Dark/Thief.vb
index 3429c69a6..991cfd332 100644
--- a/P3D/Pokemon/Attacks/Dark/Thief.vb
+++ b/P3D/Pokemon/Attacks/Dark/Thief.vb
@@ -70,12 +70,18 @@
If op.Ability.Name.ToLower() = "multitype" AndAlso op.Item.Name.ToLower().EndsWith(" plate") Then
Exit Sub
End If
+ If op.Ability.Name.ToLower() = "rks system" AndAlso op.Item.Name.ToLower().EndsWith(" memory") Then
+ Exit Sub
+ End If
If op.Item.Name.ToLower() = "griseous orb" And op.Number = 487 Then
Exit Sub
End If
If op.Item.Name.ToLower().EndsWith(" drive") = True AndAlso op.Number = 649 Then
Exit Sub
End If
+ If op.Item.Name.ToLower().EndsWith(" mail") = True Then
+ Exit Sub
+ End If
If p.Item Is Nothing Then
Dim ItemID As Integer = op.Item.ID
diff --git a/P3D/Pokemon/Attacks/Fairy/Geomancy.vb b/P3D/Pokemon/Attacks/Fairy/Geomancy.vb
new file mode 100644
index 000000000..e27281c6b
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Fairy/Geomancy.vb
@@ -0,0 +1,70 @@
+Namespace BattleSystem.Moves.Fairy
+
+ Public Class Geomancy
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Fairy)
+ Me.ID = 601
+ Me.OriginalPP = 10
+ Me.CurrentPP = 10
+ Me.MaxPP = 10
+ Me.Power = 0
+ Me.Accuracy = 0
+ Me.Category = Categories.Status
+ Me.ContestCategory = ContestCategories.Beauty
+ Me.Name = "Geomancy"
+ Me.Description = "The user absorbs energy and sharply raises its Sp. Atk, Sp. Def, and Speed stats on the next turn."
+ Me.CriticalChance = 0
+ Me.IsHMMove = False
+ Me.Target = Targets.Self
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = False
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = False
+ Me.KingsrockAffected = False
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = False
+ Me.ImmunityAffected = False
+ Me.RemovesFrozen = False
+ Me.HasSecondaryEffect = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = False
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = False
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = False
+ '#End
+
+ Me.AIField1 = AIField.CanRaiseSpAttack
+ Me.AIField2 = AIField.CanRaiseSpDefense
+ Me.AIField3 = AIField.CanRaiseSpeed
+ End Sub
+
+ Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
+ Dim b As Boolean = BattleScreen.Battle.RaiseStat(own, own, BattleScreen, "Special Attack", 2, "", "move:geomancy")
+ Dim d As Boolean = BattleScreen.Battle.RaiseStat(own, own, BattleScreen, "Special Defense", 2, "", "move:geomancy")
+ Dim f As Boolean = BattleScreen.Battle.RaiseStat(own, own, BattleScreen, "Speed", 2, "", "move:geomancy")
+ If b = False And d = False And f = False Then
+ BattleScreen.BattleQuery.Add(New TextQueryObject(Me.Name & " failed!"))
+ End If
+ End Sub
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Fairy/LightOfRuin.vb b/P3D/Pokemon/Attacks/Fairy/LightOfRuin.vb
new file mode 100644
index 000000000..3e4b864d3
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Fairy/LightOfRuin.vb
@@ -0,0 +1,73 @@
+Namespace BattleSystem.Moves.Fairy
+
+ Public Class LightOfRuin
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Fairy)
+ Me.ID = 617
+ Me.OriginalPP = 5
+ Me.CurrentPP = 5
+ Me.MaxPP = 5
+ Me.Power = 140
+ Me.Accuracy = 90
+ Me.Category = Categories.Special
+ Me.ContestCategory = ContestCategories.Beauty
+ Me.Name = "Light of Ruin"
+ Me.Description = "Drawing power from the Eternal Flower, the user fires a powerful beam of light. This also damages the user quite a lot."
+ Me.CriticalChance = 1
+ Me.IsHMMove = False
+ Me.Target = Targets.OneAdjacentTarget
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = True
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = True
+ Me.HasSecondaryEffect = False
+ Me.RemovesFrozen = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = True
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ '#End
+
+ Me.AIField1 = AIField.Damage
+ Me.AIField2 = AIField.Recoil
+ End Sub
+
+ Public Overrides Sub MoveRecoil(own As Boolean, BattleScreen As BattleScreen)
+ Dim lastDamage As Integer = BattleScreen.FieldEffects.OwnLastDamage
+ If own = False Then
+ lastDamage = BattleScreen.FieldEffects.OppLastDamage
+ End If
+ Dim recoilDamage As Integer = CInt(Math.Floor(lastDamage / 2))
+ If recoilDamage <= 0 Then
+ recoilDamage = 1
+ End If
+
+ BattleScreen.Battle.InflictRecoil(own, own, BattleScreen, Me, recoilDamage, "", "move:lightofruin")
+ End Sub
+
+ End Class
+
+End Namespace
diff --git a/P3D/Pokemon/Attacks/Fighting/FinalGambit.vb b/P3D/Pokemon/Attacks/Fighting/FinalGambit.vb
new file mode 100644
index 000000000..0b98eefca
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Fighting/FinalGambit.vb
@@ -0,0 +1,70 @@
+Namespace BattleSystem.Moves.Fighting
+
+ Public Class FinalGambit
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Fighting)
+ Me.ID = 515
+ Me.OriginalPP = 5
+ Me.CurrentPP = 5
+ Me.MaxPP = 5
+ Me.Power = 0
+ Me.Accuracy = 100
+ Me.Category = Categories.Special
+ Me.ContestCategory = ContestCategories.Tough
+ Me.Name = "Final Gambit"
+ Me.Description = "The user risks everything to attack its target. The user faints but does damage equal to its HP."
+ Me.CriticalChance = 0
+ Me.IsHMMove = False
+ Me.Target = Targets.OneAdjacentTarget
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = False
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = False
+ Me.ImmunityAffected = True
+ Me.RemovesFrozen = False
+ Me.HasSecondaryEffect = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ '#End
+
+ Me.AIField1 = AIField.Damage
+ Me.AIField2 = AIField.Selfdestruct
+ End Sub
+
+ Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
+ Dim p As Pokemon = BattleScreen.OwnPokemon
+ If own = False Then
+ p = BattleScreen.OppPokemon
+ End If
+ Dim dmg As Integer = p.HP
+ BattleScreen.Battle.ReduceHP(dmg, own, own, BattleScreen, "", "move:finalgambit")
+ BattleScreen.Battle.ReduceHP(dmg, Not own, own, BattleScreen, "", "move:finalgambit")
+ End Sub
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Fighting/FlyingPress.vb b/P3D/Pokemon/Attacks/Fighting/FlyingPress.vb
new file mode 100644
index 000000000..de34a1baf
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Fighting/FlyingPress.vb
@@ -0,0 +1,57 @@
+Namespace BattleSystem.Moves.Fighting
+
+ Public Class FlyingPress
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Fighting)
+ Me.ID = 9999
+ Me.OriginalPP = 10
+ Me.CurrentPP = 10
+ Me.MaxPP = 10
+ Me.Power = 100
+ Me.Accuracy = 95
+ Me.Category = Categories.Physical
+ Me.ContestCategory = ContestCategories.Tough
+ Me.Name = "Flying Press"
+ Me.Description = "The user dives down onto the target from the sky. This move is Fighting and Flying type simultaneously."
+ Me.CriticalChance = 1
+ Me.IsHMMove = False
+ Me.Target = Targets.OneAdjacentTarget
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = True
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = True
+ Me.CounterAffected = True
+
+ Me.DisabledWhileGravity = True
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = True
+ Me.RemovesFrozen = False
+ Me.HasSecondaryEffect = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ '#End
+ End Sub
+
+ End Class
+
+End Namespace
diff --git a/P3D/Pokemon/Attacks/Fire/Incinerate.vb b/P3D/Pokemon/Attacks/Fire/Incinerate.vb
new file mode 100644
index 000000000..26bef5d74
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Fire/Incinerate.vb
@@ -0,0 +1,76 @@
+Namespace BattleSystem.Moves.Fire
+
+ Public Class Incinerate
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Fire)
+ Me.ID = 510
+ Me.OriginalPP = 15
+ Me.CurrentPP = 15
+ Me.MaxPP = 15
+ Me.Power = 60
+ Me.Accuracy = 100
+ Me.Category = Categories.Special
+ Me.ContestCategory = ContestCategories.Tough
+ Me.Name = "Incinerate"
+ Me.Description = "The user attacks opposing Pokémon with fire. If a Pokémon is holding a certain item, such as a Berry, the item becomes burned up and unusable."
+ Me.CriticalChance = 1
+ Me.IsHMMove = False
+ Me.Target = Targets.AllAdjacentFoes
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = True
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = True
+ Me.HasSecondaryEffect = True
+ Me.RemovesFrozen = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ '#End
+
+ Me.AIField1 = AIField.Damage
+ Me.AIField2 = AIField.Nothing
+ End Sub
+
+ Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
+ Dim p As Pokemon = BattleScreen.OwnPokemon
+ Dim op As Pokemon = BattleScreen.OppPokemon
+ If own = False Then
+ p = BattleScreen.OppPokemon
+ op = BattleScreen.OwnPokemon
+ End If
+
+ If Not op.Item Is Nothing Then
+ If op.Item.IsBerry = True OrElse op.Item.Name.ToLower().EndsWith(" gem") Then
+ Dim ItemID As Integer = op.Item.ID
+ BattleScreen.Battle.RemoveHeldItem(Not own, own, BattleScreen, op.GetDisplayName() & "'s " & op.Item.Name & " got burned up!", "move:incinerate")
+ End If
+ End If
+ End Sub
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Flying/DragonAscent.vb b/P3D/Pokemon/Attacks/Flying/DragonAscent.vb
new file mode 100644
index 000000000..2bb9c6447
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Flying/DragonAscent.vb
@@ -0,0 +1,65 @@
+Namespace BattleSystem.Moves.Flying
+
+ Public Class DragonAscent
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Flying)
+ Me.ID = 620
+ Me.OriginalPP = 5
+ Me.CurrentPP = 5
+ Me.MaxPP = 5
+ Me.Power = 120
+ Me.Accuracy = 100
+ Me.Category = Categories.Physical
+ Me.ContestCategory = ContestCategories.Beauty
+ Me.Name = "Dragon Ascent"
+ Me.Description = "After soaring upward, the user attacks its target by dropping out of the sky at high speeds. But it lowers its own Defense and Sp. Def stats in the process."
+ Me.CriticalChance = 1
+ Me.IsHMMove = False
+ Me.Target = Targets.OneFoe
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = True
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = True
+ Me.CounterAffected = True
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = True
+ Me.HasSecondaryEffect = False
+ Me.RemovesFrozen = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ '#End
+ End Sub
+
+ Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
+ Dim b As Boolean = BattleScreen.Battle.LowerStat(own, own, BattleScreen, "Defense", 1, "", "move:dragonascent")
+ Dim d As Boolean = BattleScreen.Battle.LowerStat(own, own, BattleScreen, "Special Defense", 1, "", "move:dragonascent")
+ If b = False And d = False Then
+ BattleScreen.BattleQuery.Add(New TextQueryObject(Me.Name & " failed!"))
+ End If
+ End Sub
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Ghost/PhantomForce.vb b/P3D/Pokemon/Attacks/Ghost/PhantomForce.vb
new file mode 100644
index 000000000..717ed2e0b
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Ghost/PhantomForce.vb
@@ -0,0 +1,200 @@
+Namespace BattleSystem.Moves.Ghost
+
+ Public Class PhantomForce
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Ghost)
+ Me.ID = 566
+ Me.OriginalPP = 10
+ Me.CurrentPP = 10
+ Me.MaxPP = 10
+ Me.Power = 90
+ Me.Accuracy = 100
+ Me.Category = Categories.Physical
+ Me.ContestCategory = ContestCategories.Cool
+ Me.Name = "Phantom Force"
+ Me.Description = "The user vanishes somewhere, then strikes the target on the next turn. This move hits even if the target protects itself."
+ Me.CriticalChance = 1
+ Me.IsHMMove = False
+ Me.Target = Targets.OneAdjacentTarget
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = True
+ Me.ProtectAffected = False
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = True
+ Me.CounterAffected = True
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = True
+ Me.RemovesFrozen = False
+ Me.HasSecondaryEffect = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ Me.UseAccEvasion = True
+ Me.CanHitUnderwater = False
+ Me.CanHitUnderground = False
+ Me.CanHitInMidAir = False
+ '#End
+
+ Me.AIField1 = AIField.Damage
+ Me.AIField2 = AIField.MultiTurn
+ End Sub
+
+ Public Overrides Function GetUseAccEvasion(own As Boolean, BattleScreen As BattleScreen) As Boolean
+ Dim phantomforce As Integer = BattleScreen.FieldEffects.OwnPhantomForceCounter
+ If own = False Then
+ phantomforce = BattleScreen.FieldEffects.OppPhantomForceCounter
+ End If
+
+ If phantomforce = 0 Then
+ Return False
+ Else
+ Return True
+ End If
+ End Function
+
+ Public Overrides Sub PreAttack(Own As Boolean, BattleScreen As BattleScreen)
+ Dim phantomforce As Integer = BattleScreen.FieldEffects.OwnPhantomForceCounter
+ If Own = False Then
+ phantomforce = BattleScreen.FieldEffects.OppPhantomForceCounter
+ End If
+
+ If phantomforce = 0 Then
+ Me.FocusOppPokemon = False
+ Else
+ Me.FocusOppPokemon = True
+ End If
+ End Sub
+
+ Public Overrides Function MoveFailBeforeAttack(Own As Boolean, BattleScreen As BattleScreen) As Boolean
+ Dim phantomforceCounter As Integer = BattleScreen.FieldEffects.OwnPhantomForceCounter
+
+ If Own = False Then
+ phantomforceCounter = BattleScreen.FieldEffects.OppPhantomForceCounter
+ End If
+
+ Dim p As Pokemon = BattleScreen.OwnPokemon
+ If Own = False Then
+ p = BattleScreen.OppPokemon
+ End If
+
+ Dim hasToCharge As Boolean = True
+ If Not p.Item Is Nothing Then
+ If p.Item.Name.ToLower() = "power herb" And BattleScreen.FieldEffects.CanUseItem(Own) = True And BattleScreen.FieldEffects.CanUseOwnItem(Own, BattleScreen) = True Then
+ If BattleScreen.Battle.RemoveHeldItem(Own, Own, BattleScreen, "Power Herb pushed the use of Phantom Force!", "move:phantomforce") = True Then
+ hasToCharge = False
+ End If
+ End If
+ End If
+
+ If phantomforceCounter = 0 And hasToCharge = True Then
+ If Own = True Then
+ BattleScreen.FieldEffects.OwnPhantomForceCounter = 1
+ Else
+ BattleScreen.FieldEffects.OppPhantomForceCounter = 1
+ End If
+
+ BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & " vanished instantly!"))
+
+ Return True
+ Else
+ If Own = True Then
+ BattleScreen.FieldEffects.OwnPhantomForceCounter = 0
+ Else
+ BattleScreen.FieldEffects.OppPhantomForceCounter = 0
+ End If
+
+ Return False
+ End If
+ End Function
+
+ Public Overrides Sub MoveSelected(own As Boolean, BattleScreen As BattleScreen)
+ If own = True Then
+ BattleScreen.FieldEffects.OwnPhantomForceCounter = 0
+ Else
+ BattleScreen.FieldEffects.OppPhantomForceCounter = 0
+ End If
+ End Sub
+ Public Overrides Function DeductPP(own As Boolean, BattleScreen As BattleScreen) As Boolean
+ Dim PhantomForce As Integer = BattleScreen.FieldEffects.OwnPhantomForceCounter
+ If own = False Then
+ PhantomForce = BattleScreen.FieldEffects.OppPhantomForceCounter
+ End If
+
+ If PhantomForce = 0 Then
+ Return False
+ Else
+ Return True
+ End If
+ End Function
+
+ Private Sub MoveFails(own As Boolean, BattleScreen As BattleScreen)
+ If own = True Then
+ BattleScreen.FieldEffects.OwnPhantomForceCounter = 0
+ Else
+ BattleScreen.FieldEffects.OppPhantomForceCounter = 0
+ End If
+ End Sub
+
+ Public Overrides Sub MoveMisses(own As Boolean, BattleScreen As BattleScreen)
+ MoveFails(own, BattleScreen)
+ End Sub
+
+ Public Overrides Sub AbsorbedBySubstitute(own As Boolean, BattleScreen As BattleScreen)
+ MoveFails(own, BattleScreen)
+ End Sub
+
+ Public Overrides Sub InflictedFlinch(own As Boolean, BattleScreen As BattleScreen)
+ MoveFails(own, BattleScreen)
+ End Sub
+
+ Public Overrides Sub IsSleeping(own As Boolean, BattleScreen As BattleScreen)
+ MoveFails(own, BattleScreen)
+ End Sub
+
+ Public Overrides Sub HurtItselfInConfusion(own As Boolean, BattleScreen As BattleScreen)
+ MoveFails(own, BattleScreen)
+ End Sub
+
+ Public Overrides Sub IsAttracted(own As Boolean, BattleScreen As BattleScreen)
+ MoveFails(own, BattleScreen)
+ End Sub
+
+ Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
+ Dim op As Pokemon = BattleScreen.OppPokemon
+
+ If own = True Then
+ BattleScreen.FieldEffects.OppDetectCounter = 0
+ BattleScreen.FieldEffects.OppProtectCounter = 0
+ Else
+ op = BattleScreen.OwnPokemon
+
+ BattleScreen.FieldEffects.OwnDetectCounter = 0
+ BattleScreen.FieldEffects.OwnProtectCounter = 0
+ End If
+
+ BattleScreen.BattleQuery.Add(New TextQueryObject("Phantom Force lifted " & op.GetDisplayName() & "'s protection!"))
+ End Sub
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Grass/WorrySeed.vb b/P3D/Pokemon/Attacks/Grass/WorrySeed.vb
new file mode 100644
index 000000000..f80bcf1f1
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Grass/WorrySeed.vb
@@ -0,0 +1,72 @@
+Namespace BattleSystem.Moves.Grass
+
+ Public Class WorrySeed
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Grass)
+ Me.ID = 388
+ Me.OriginalPP = 10
+ Me.CurrentPP = 10
+ Me.MaxPP = 10
+ Me.Power = 0
+ Me.Accuracy = 100
+ Me.Category = Categories.Status
+ Me.ContestCategory = ContestCategories.Beauty
+ Me.Name = "Worry Seed"
+ Me.Description = "A seed that causes worry is planted on the target. It prevents sleep by making the target's Ability Insomnia."
+ Me.CriticalChance = 0
+ Me.IsHMMove = False
+ Me.Target = Targets.OneAdjacentTarget
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = True
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = False
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = False
+ Me.IsHealingMove = False
+ Me.HasSecondaryEffect = False
+ Me.RemovesFrozen = False
+
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.ImmunityAffected = True
+ Me.IsDamagingMove = False
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = False
+ '#End
+
+ End Sub
+
+ Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
+ Dim op As Pokemon = BattleScreen.OppPokemon
+ If own = False Then
+ op = BattleScreen.OwnPokemon
+ End If
+ Dim bannedAbilities() As String = {"insomnia", "truant", "multitype", "stance change", "schooling", "comatose", "shields down", "disguise", "rks system", "battle bond"}
+ If bannedAbilities.Contains(op.Ability.Name.ToLower()) = False Then
+ op.Ability = Ability.GetAbilityByID(15)
+ BattleScreen.BattleQuery.Add(New TextQueryObject(op.GetDisplayName() & " acquired Insomnia!"))
+ Else
+ BattleScreen.BattleQuery.Add(New TextQueryObject(Me.Name & " failed!"))
+ End If
+ End Sub
+
+ End Class
+
+End Namespace
diff --git a/P3D/Pokemon/Attacks/Ground/PrecipiceBlades.vb b/P3D/Pokemon/Attacks/Ground/PrecipiceBlades.vb
new file mode 100644
index 000000000..f382c841e
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Ground/PrecipiceBlades.vb
@@ -0,0 +1,57 @@
+Namespace BattleSystem.Moves.Ground
+
+ Public Class PrecipiceBlades
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Ground)
+ Me.ID = 619
+ Me.OriginalPP = 10
+ Me.CurrentPP = 10
+ Me.MaxPP = 10
+ Me.Power = 120
+ Me.Accuracy = 85
+ Me.Category = Categories.Physical
+ Me.ContestCategory = ContestCategories.Cool
+ Me.Name = "Precipice Blades"
+ Me.Description = "The user attacks opposing Pokémon by manifesting the power of the land in fearsome blades of stone."
+ Me.CriticalChance = 1
+ Me.IsHMMove = False
+ Me.Target = Targets.AllAdjacentFoes
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = True
+ Me.CounterAffected = True
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = True
+ Me.HasSecondaryEffect = False
+ Me.RemovesFrozen = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ '#End
+ End Sub
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Ground/ThousandArrows.vb b/P3D/Pokemon/Attacks/Ground/ThousandArrows.vb
new file mode 100644
index 000000000..468786a7a
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Ground/ThousandArrows.vb
@@ -0,0 +1,58 @@
+Namespace BattleSystem.Moves.Ground
+
+ Public Class ThousandArrows
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Ground)
+ Me.ID = 614
+ Me.OriginalPP = 10
+ Me.CurrentPP = 10
+ Me.MaxPP = 10
+ Me.Power = 90
+ Me.Accuracy = 100
+ Me.Category = Categories.Physical
+ Me.ContestCategory = ContestCategories.Beauty
+ Me.Name = "Thousand Arrows"
+ Me.Description = "This move also hits opposing Pokémon that are in the air. Those Pokémon are knocked down to the ground."
+ Me.CriticalChance = 1
+ Me.IsHMMove = False
+ Me.Target = Targets.AllAdjacentFoes
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = True
+ Me.CounterAffected = True
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = False
+ Me.HasSecondaryEffect = False
+ Me.RemovesFrozen = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ Me.CanHitInMidAir = True
+ '#End
+ End Sub
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Ice/Avalanche.vb b/P3D/Pokemon/Attacks/Ice/Avalanche.vb
index 2698c0473..717301f22 100644
--- a/P3D/Pokemon/Attacks/Ice/Avalanche.vb
+++ b/P3D/Pokemon/Attacks/Ice/Avalanche.vb
@@ -52,20 +52,6 @@
'#End
End Sub
- Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
- Dim p As Pokemon = BattleScreen.OwnPokemon
- Dim op As Pokemon = BattleScreen.OppPokemon
- If own = False Then
- p = BattleScreen.OppPokemon
- op = BattleScreen.OwnPokemon
- End If
-
- Dim chance As Integer = GetEffectChance(0, own, BattleScreen)
- If Core.Random.Next(0, 100) < chance Then
- BattleScreen.Battle.LowerStat(Not own, own, BattleScreen, "Attack", 1, "", "move:aurorabeam")
- End If
- End Sub
-
Public Overrides Function GetBasePower(own As Boolean, BattleScreen As BattleScreen) As Integer
If own = True Then
If BattleScreen.FieldEffects.OppTurnCounts > BattleScreen.FieldEffects.OwnTurnCounts Then
diff --git a/P3D/Pokemon/Attacks/Ice/FreezeShock.vb b/P3D/Pokemon/Attacks/Ice/FreezeShock.vb
index 95e6fa981..e2a6d4fb4 100644
--- a/P3D/Pokemon/Attacks/Ice/FreezeShock.vb
+++ b/P3D/Pokemon/Attacks/Ice/FreezeShock.vb
@@ -73,7 +73,7 @@
If Not p.Item Is Nothing Then
If p.Item.Name.ToLower() = "power herb" And BattleScreen.FieldEffects.CanUseItem(Own) = True And BattleScreen.FieldEffects.CanUseOwnItem(Own, BattleScreen) = True Then
- If BattleScreen.Battle.RemoveHeldItem(Own, Own, BattleScreen, "Power Herb pushed the use of Ice Burn!", "move:iceburn") = True Then
+ If BattleScreen.Battle.RemoveHeldItem(Own, Own, BattleScreen, "Power Herb pushed the use of Freeze Shock!", "move:freezeshock") = True Then
freezeshock = 1
End If
End If
diff --git a/P3D/Pokemon/Attacks/Ice/Glaciate.vb b/P3D/Pokemon/Attacks/Ice/Glaciate.vb
new file mode 100644
index 000000000..45abd1529
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Ice/Glaciate.vb
@@ -0,0 +1,64 @@
+Namespace BattleSystem.Moves.Ice
+
+ Public Class Glaciate
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Ice)
+ Me.ID = 549
+ Me.OriginalPP = 10
+ Me.CurrentPP = 10
+ Me.MaxPP = 10
+ Me.Power = 65
+ Me.Accuracy = 95
+ Me.Category = Categories.Special
+ Me.ContestCategory = ContestCategories.Beauty
+ Me.Name = "Glaciate"
+ Me.Description = "The user attacks by blowing freezing cold air at opposing Pokémon. This lowers their Speed stat."
+ Me.CriticalChance = 1
+ Me.IsHMMove = False
+ Me.Target = Targets.AllAdjacentFoes
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = False
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = True
+ Me.RemovesFrozen = False
+ Me.HasSecondaryEffect = True
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ '#End
+
+ Me.AIField1 = AIField.Damage
+ Me.AIField2 = AIField.LowerSpeed
+ End Sub
+
+ Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
+ BattleScreen.Battle.LowerStat(Not own, own, BattleScreen, "Speed", 1, "", "move:glaciate")
+ End Sub
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Normal/Bestow.vb b/P3D/Pokemon/Attacks/Normal/Bestow.vb
new file mode 100644
index 000000000..373233f42
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Normal/Bestow.vb
@@ -0,0 +1,107 @@
+Namespace BattleSystem.Moves.Normal
+
+ Public Class Bestow
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Normal)
+ Me.ID = 516
+ Me.OriginalPP = 15
+ Me.CurrentPP = 15
+ Me.MaxPP = 15
+ Me.Power = 0
+ Me.Accuracy = 0
+ Me.Category = Categories.Status
+ Me.ContestCategory = ContestCategories.Cute
+ Me.Name = "Bestow"
+ Me.Description = "The user passes its held item to the target when the target isn't holding an item."
+ Me.CriticalChance = 0
+ Me.IsHMMove = False
+ Me.Target = Targets.OneAdjacentTarget
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = False
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = False
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = False
+ Me.ImmunityAffected = False
+ Me.HasSecondaryEffect = False
+ Me.RemovesFrozen = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = False
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = False
+ Me.UseAccEvasion = False
+ '#End
+
+ Me.AIField1 = AIField.Support
+ Me.AIField2 = AIField.CannotMiss
+ End Sub
+
+ Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
+ Dim p As Pokemon = BattleScreen.OwnPokemon
+ Dim op As Pokemon = BattleScreen.OppPokemon
+ If own = False Then
+ p = BattleScreen.OppPokemon
+ op = BattleScreen.OwnPokemon
+ End If
+
+ If p.Item Is Nothing Then
+ Exit Sub
+ End If
+ If p.Item.IsMegaStone = True Then
+ Exit Sub
+ End If
+ If p.Ability.Name.ToLower() = "multitype" AndAlso p.Item.Name.ToLower().EndsWith(" plate") Then
+ Exit Sub
+ End If
+ If p.Ability.Name.ToLower() = "rks system" AndAlso p.Item.Name.ToLower().EndsWith(" memory") Then
+ Exit Sub
+ End If
+ If p.Item.Name.ToLower() = "griseous orb" And p.Number = 487 Then
+ Exit Sub
+ End If
+ If p.Item.Name.ToLower().EndsWith(" drive") = True AndAlso p.Number = 649 Then
+ Exit Sub
+ End If
+ If p.Item.Name.ToLower().EndsWith(" mail") = True Then
+ Exit Sub
+ End If
+
+ If op.Item Is Nothing Then
+ Dim ItemID As Integer = p.Item.ID
+
+ p.OriginalItem = Item.GetItemByID(p.Item.ID)
+ p.OriginalItem.AdditionalData = p.Item.AdditionalData
+
+ If BattleScreen.Battle.RemoveHeldItem(own, own, BattleScreen, op.GetDisplayName() & " received the item " & p.Item.Name & " from " & p.GetDisplayName() & "!", "move:bestow") Then
+ If own = False Then
+ BattleScreen.FieldEffects.StolenItemIDs.Add(ItemID)
+ End If
+ op.Item = Item.GetItemByID(ItemID)
+ End If
+ End If
+
+ End Sub
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Normal/Celebrate.vb b/P3D/Pokemon/Attacks/Normal/Celebrate.vb
new file mode 100644
index 000000000..be5b86a3b
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Normal/Celebrate.vb
@@ -0,0 +1,65 @@
+Namespace BattleSystem.Moves.Normal
+
+ Public Class Celebrate
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Normal)
+ Me.ID = 606
+ Me.OriginalPP = 40
+ Me.CurrentPP = 40
+ Me.MaxPP = 40
+ Me.Power = 0
+ Me.Accuracy = 0
+ Me.Category = Categories.Status
+ Me.ContestCategory = ContestCategories.Cute
+ Me.Name = "Celebrate"
+ Me.Description = "The Pokémon congratulates you on your special day!"
+ Me.CriticalChance = 0
+ Me.IsHMMove = False
+ Me.Target = Targets.Self
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = False
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = False
+ Me.KingsrockAffected = False
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = False
+ Me.ImmunityAffected = False
+ Me.HasSecondaryEffect = False
+ Me.RemovesFrozen = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = False
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = False
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = False
+ Me.UseAccEvasion = False
+ '#End
+
+ Me.AIField1 = AIField.CannotMiss
+ Me.AIField2 = AIField.Nothing
+ End Sub
+
+ Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
+ BattleScreen.BattleQuery.Add(New TextQueryObject("Congratulations, " & Core.Player.Name & "!"))
+ End Sub
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Normal/Covet.vb b/P3D/Pokemon/Attacks/Normal/Covet.vb
index 576a17aa2..a41b46f1d 100644
--- a/P3D/Pokemon/Attacks/Normal/Covet.vb
+++ b/P3D/Pokemon/Attacks/Normal/Covet.vb
@@ -73,12 +73,18 @@ Namespace BattleSystem.Moves.Normal
If op.Ability.Name.ToLower() = "multitype" AndAlso op.Item.Name.ToLower().EndsWith(" plate") Then
Exit Sub
End If
+ If op.Ability.Name.ToLower() = "rks system" AndAlso op.Item.Name.ToLower().EndsWith(" memory") Then
+ Exit Sub
+ End If
If op.Item.Name.ToLower() = "griseous orb" And op.Number = 487 Then
Exit Sub
End If
If op.Item.Name.ToLower().EndsWith(" drive") = True AndAlso op.Number = 649 Then
Exit Sub
End If
+ If op.Item.Name.ToLower().EndsWith(" mail") = True Then
+ Exit Sub
+ End If
If p.Item Is Nothing Then
Dim ItemID As Integer = op.Item.ID
diff --git a/P3D/Pokemon/Attacks/Normal/EchoedVoice.vb b/P3D/Pokemon/Attacks/Normal/EchoedVoice.vb
new file mode 100644
index 000000000..9dc24f6fa
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Normal/EchoedVoice.vb
@@ -0,0 +1,138 @@
+Namespace BattleSystem.Moves.Normal
+
+ Public Class EchoedVoice
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Normal)
+ Me.ID = 497
+ Me.OriginalPP = 15
+ Me.CurrentPP = 15
+ Me.MaxPP = 15
+ Me.Power = 40
+ Me.Accuracy = 100
+ Me.Category = Categories.Special
+ Me.ContestCategory = ContestCategories.Beauty
+ Me.Name = "Echoed Voice"
+ Me.Description = "The user attacks the target with an echoing voice. If this move is used every turn, its power is increased."
+ Me.CriticalChance = 1
+ Me.IsHMMove = False
+ Me.Target = Targets.OneAdjacentTarget
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = True
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = True
+ Me.HasSecondaryEffect = False
+ Me.RemovesFrozen = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = True
+
+ Me.IsAffectedBySubstitute = False
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ '#End
+ End Sub
+
+ Public Overrides Function GetBasePower(own As Boolean, BattleScreen As BattleScreen) As Integer
+ Dim echoed As Integer = BattleScreen.FieldEffects.OwnEchoedVoice
+ If own = False Then
+ echoed = BattleScreen.FieldEffects.OppEchoedVoice
+ End If
+
+ Dim p As Integer = Me.Power
+
+ If echoed > 0 Then
+ For i = 1 To echoed
+ p += 40
+ Next
+ End If
+
+ Return p
+ End Function
+
+ Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
+ Dim lastMove As Attack = BattleScreen.FieldEffects.OwnLastMove
+ If own = False Then
+ lastMove = BattleScreen.FieldEffects.OppLastMove
+ End If
+
+ If lastMove.ID <> 497 Then
+ If own = True Then
+ BattleScreen.FieldEffects.OwnEchoedVoice = 0
+ Else
+ BattleScreen.FieldEffects.OppEchoedVoice = 0
+ End If
+ Else
+ Dim echoed As Integer = BattleScreen.FieldEffects.OwnEchoedVoice
+ If own = False Then
+ echoed = BattleScreen.FieldEffects.OppEchoedVoice
+ End If
+
+ If echoed < 4 Then
+ If own = True Then
+ BattleScreen.FieldEffects.OwnEchoedVoice += 1
+ Else
+ BattleScreen.FieldEffects.OppEchoedVoice += 1
+ End If
+ End If
+ End If
+ End Sub
+
+ Private Sub ResetCounter(ByVal own As Boolean, ByVal BattleScreen As BattleScreen)
+ If own = True Then
+ BattleScreen.FieldEffects.OwnEchoedVoice = 0
+ Else
+ BattleScreen.FieldEffects.OppEchoedVoice = 0
+ End If
+ End Sub
+
+ Public Overrides Sub MoveMisses(own As Boolean, BattleScreen As BattleScreen)
+ ResetCounter(own, BattleScreen)
+ End Sub
+
+ Public Overrides Sub MoveProtectedDetected(own As Boolean, BattleScreen As BattleScreen)
+ ResetCounter(own, BattleScreen)
+ End Sub
+
+ Public Overrides Sub MoveHasNoEffect(own As Boolean, BattleScreen As BattleScreen)
+ ResetCounter(own, BattleScreen)
+ End Sub
+
+ Public Overrides Sub InflictedFlinch(own As Boolean, BattleScreen As BattleScreen)
+ ResetCounter(own, BattleScreen)
+ End Sub
+
+ Public Overrides Sub IsSleeping(own As Boolean, BattleScreen As BattleScreen)
+ ResetCounter(own, BattleScreen)
+ End Sub
+
+ Public Overrides Sub HurtItselfInConfusion(own As Boolean, BattleScreen As BattleScreen)
+ ResetCounter(own, BattleScreen)
+ End Sub
+
+ Public Overrides Sub IsAttracted(own As Boolean, BattleScreen As BattleScreen)
+ ResetCounter(own, BattleScreen)
+ End Sub
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Normal/Entrainment.vb b/P3D/Pokemon/Attacks/Normal/Entrainment.vb
new file mode 100644
index 000000000..95c562b3a
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Normal/Entrainment.vb
@@ -0,0 +1,77 @@
+Namespace BattleSystem.Moves.Normal
+
+ Public Class Entrainment
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Normal)
+ Me.ID = 494
+ Me.OriginalPP = 15
+ Me.CurrentPP = 15
+ Me.MaxPP = 15
+ Me.Power = 0
+ Me.Accuracy = 100
+ Me.Category = Categories.Status
+ Me.ContestCategory = ContestCategories.Cute
+ Me.Name = "Entrainment"
+ Me.Description = "The user dances with an odd rhythm that compels the target to mimic it, making the target's Ability the same as the user's."
+ Me.CriticalChance = 0
+ Me.IsHMMove = False
+ Me.Target = Targets.OneAdjacentTarget
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = True
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = False
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = False
+ Me.IsHealingMove = False
+ Me.HasSecondaryEffect = False
+ Me.RemovesFrozen = False
+
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.ImmunityAffected = True
+ Me.IsDamagingMove = False
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = False
+ '#End
+
+ End Sub
+
+ Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
+ Dim p As Pokemon = BattleScreen.OwnPokemon
+ Dim op As Pokemon = BattleScreen.OppPokemon
+ If own = False Then
+ p = BattleScreen.OppPokemon
+ op = BattleScreen.OwnPokemon
+ End If
+
+ Dim bannedAbilitiesOpp() As String = {"simple", "truant", "multitype", "stance change", "schooling", "comatose", "shields down", "disguise", "rks system", "battle bond"}
+ Dim bannedAbilitiesOwn() As String = {"trace", "forecast", "flower gift", "zen mode", "illusion", "imposter", "power of alchemy", "receiver", "disguise", "power construct"}
+
+ If bannedAbilitiesOpp.Contains(op.Ability.Name.ToLower()) = False AndAlso bannedAbilitiesOwn.Contains(p.Ability.Name.ToLower()) = False Then
+ op.Ability = Ability.GetAbilityByID(p.Ability.ID)
+ BattleScreen.BattleQuery.Add(New TextQueryObject(op.GetDisplayName() & " acquired " & op.Ability.Name() & "!"))
+ Else
+ BattleScreen.BattleQuery.Add(New TextQueryObject(Me.Name & " failed!"))
+ End If
+ End Sub
+
+ End Class
+
+End Namespace
diff --git a/P3D/Pokemon/Attacks/Normal/HoldBack.vb b/P3D/Pokemon/Attacks/Normal/HoldBack.vb
new file mode 100644
index 000000000..94044e440
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Normal/HoldBack.vb
@@ -0,0 +1,82 @@
+Namespace BattleSystem.Moves.Normal
+
+ Public Class HoldBack
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Normal)
+ Me.ID = 610
+ Me.OriginalPP = 40
+ Me.CurrentPP = 40
+ Me.MaxPP = 40
+ Me.Power = 40
+ Me.Accuracy = 100
+ Me.Category = Categories.Physical
+ Me.ContestCategory = ContestCategories.Cool
+ Me.Name = "Hold Back"
+ Me.Description = "The user holds back when it attacks, and the target is left with at least 1 HP."
+ Me.CriticalChance = 1
+ Me.IsHMMove = False
+ Me.Target = Targets.OneAdjacentTarget
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = True
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = True
+ Me.CounterAffected = True
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = True
+ Me.HasSecondaryEffect = False
+ Me.RemovesFrozen = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ '#End
+
+ Me.AIField1 = AIField.Damage
+ Me.AIField2 = AIField.Nothing
+ End Sub
+
+ Public Overrides Function GetDamage(Critical As Boolean, Own As Boolean, targetPokemon As Boolean, BattleScreen As BattleScreen, Optional ExtraParameter As String = "") As Integer
+ Dim d As Integer = MyBase.GetDamage(Critical, Own, targetPokemon, BattleScreen)
+
+ Dim subst As Integer = BattleScreen.FieldEffects.OppSubstitute
+ If Own = False Then
+ subst = BattleScreen.FieldEffects.OwnSubstitute
+ End If
+
+ If subst = 0 Then
+ Dim op As Pokemon = BattleScreen.OppPokemon
+ If Own = False Then
+ op = BattleScreen.OwnPokemon
+ End If
+
+ If d >= op.HP Then
+ d = op.HP - 1
+ End If
+ End If
+
+ Return d
+ End Function
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Normal/HyperVoice.vb b/P3D/Pokemon/Attacks/Normal/HyperVoice.vb
index 30b2f3ac3..00802d854 100644
--- a/P3D/Pokemon/Attacks/Normal/HyperVoice.vb
+++ b/P3D/Pokemon/Attacks/Normal/HyperVoice.vb
@@ -40,13 +40,13 @@
Me.RemovesFrozen = False
Me.IsHealingMove = False
- Me.IsRecoilMove = True
+ Me.IsRecoilMove = False
Me.IsPunchingMove = False
Me.IsDamagingMove = True
Me.IsProtectMove = False
Me.IsSoundMove = True
- Me.IsAffectedBySubstitute = True
+ Me.IsAffectedBySubstitute = False
Me.IsOneHitKOMove = False
Me.IsWonderGuardAffected = True
'#End
diff --git a/P3D/Pokemon/Attacks/Normal/Judgement.vb b/P3D/Pokemon/Attacks/Normal/Judgement.vb
new file mode 100644
index 000000000..c185da3a5
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Normal/Judgement.vb
@@ -0,0 +1,110 @@
+Namespace BattleSystem.Moves.Normal
+
+ Public Class Judgement
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Normal)
+ Me.ID = 449
+ Me.OriginalPP = 10
+ Me.CurrentPP = 10
+ Me.MaxPP = 10
+ Me.Power = 100
+ Me.Accuracy = 100
+ Me.Category = Categories.Special
+ Me.ContestCategory = ContestCategories.Smart
+ Me.Name = "Judgement"
+ Me.Description = "The user releases countless shots of light at the target. This move's type varies depending on the kind of Plate the user is holding."
+ Me.CriticalChance = 1
+ Me.IsHMMove = False
+ Me.Target = Targets.OneAdjacentTarget
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = True
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = True
+ Me.HasSecondaryEffect = False
+ Me.RemovesFrozen = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ '#End
+ End Sub
+
+ Public Overrides Function GetAttackType(own As Boolean, BattleScreen As BattleScreen) As Element
+ Dim p As Pokemon = BattleScreen.OwnPokemon
+ If own = False Then
+ p = BattleScreen.OppPokemon
+ End If
+
+ Dim itemID As Integer = 0
+ If Not p.Item Is Nothing Then
+ itemID = p.Item.ID
+ End If
+
+ Select Case p.Item.ID
+ Case 267
+ Return New Element(Element.Types.Dragon)
+ Case 268
+ Return New Element(Element.Types.Dark)
+ Case 269
+ Return New Element(Element.Types.Ground)
+ Case 270
+ Return New Element(Element.Types.Fighting)
+ Case 271
+ Return New Element(Element.Types.Fire)
+ Case 272
+ Return New Element(Element.Types.Ice)
+ Case 273
+ Return New Element(Element.Types.Bug)
+ Case 274
+ Return New Element(Element.Types.Steel)
+ Case 275
+ Return New Element(Element.Types.Grass)
+ Case 276
+ Return New Element(Element.Types.Psychic)
+ Case 277
+ Return New Element(Element.Types.Fairy)
+ Case 278
+ Return New Element(Element.Types.Flying)
+ Case 279
+ Return New Element(Element.Types.Water)
+ Case 280
+ Return New Element(Element.Types.Ghost)
+ Case 281
+ Return New Element(Element.Types.Rock)
+ Case 282
+ Return New Element(Element.Types.Poison)
+ Case 283
+ Return New Element(Element.Types.Electric)
+ Case Else
+ Return New Element(Element.Types.Normal)
+ End Select
+
+ Return Me.Type
+ End Function
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Normal/PayDay.vb b/P3D/Pokemon/Attacks/Normal/PayDay.vb
index 2a2f14fa5..2b79740cf 100644
--- a/P3D/Pokemon/Attacks/Normal/PayDay.vb
+++ b/P3D/Pokemon/Attacks/Normal/PayDay.vb
@@ -74,7 +74,7 @@ Namespace BattleSystem.Moves.Normal
BattleScreen.FieldEffects.OppPayDayCounter += coinAmount
End If
- BattleScreen.BattleQuery.Add(New TextQueryObject("Coins were scattered anywhere!"))
+ BattleScreen.BattleQuery.Add(New TextQueryObject("Coins were scattered everywhere!"))
End Sub
End Class
diff --git a/P3D/Pokemon/Attacks/Normal/ReflectType.vb b/P3D/Pokemon/Attacks/Normal/ReflectType.vb
new file mode 100644
index 000000000..6ed05e7fc
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Normal/ReflectType.vb
@@ -0,0 +1,75 @@
+Namespace BattleSystem.Moves.Normal
+
+ Public Class ReflectType
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Normal)
+ Me.ID = 513
+ Me.OriginalPP = 15
+ Me.CurrentPP = 15
+ Me.MaxPP = 15
+ Me.Power = 0
+ Me.Accuracy = 0
+ Me.Category = Categories.Status
+ Me.ContestCategory = ContestCategories.Smart
+ Me.Name = "Reflect Type"
+ Me.Description = "The user reflects the target's type, making it the same type as the target."
+ Me.CriticalChance = 0
+ Me.IsHMMove = False
+ Me.Target = Targets.OneAdjacentTarget
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = False
+ Me.KingsrockAffected = False
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = False
+ Me.ImmunityAffected = False
+ Me.HasSecondaryEffect = False
+ Me.RemovesFrozen = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = False
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = False
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = False
+ Me.UseAccEvasion = False
+ '#End
+
+ Me.AIField1 = AIField.Support
+ Me.AIField2 = AIField.CannotMiss
+ End Sub
+
+ Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
+ Dim p As Pokemon = BattleScreen.OwnPokemon
+ Dim op As Pokemon = BattleScreen.OppPokemon
+ If own = False Then
+ p = BattleScreen.OppPokemon
+ op = BattleScreen.OwnPokemon
+ End If
+ p.OriginalType1 = New Element(p.Type1.Type)
+ p.OriginalType2 = New Element(p.Type2.Type)
+ p.Type1 = New Element(op.Type1.Type)
+ p.Type2 = New Element(op.Type2.Type)
+ BattleScreen.BattleQuery.Add(New TextQueryObject(p.GetDisplayName() & "'s type changed to match " & op.OriginalName & "'s!"))
+ End Sub
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Normal/Round.vb b/P3D/Pokemon/Attacks/Normal/Round.vb
new file mode 100644
index 000000000..f2e420717
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Normal/Round.vb
@@ -0,0 +1,78 @@
+Namespace BattleSystem.Moves.Normal
+
+ Public Class Round
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Normal)
+ Me.ID = 496
+ Me.OriginalPP = 15
+ Me.CurrentPP = 15
+ Me.MaxPP = 15
+ Me.Power = 60
+ Me.Accuracy = 100
+ Me.Category = Categories.Special
+ Me.ContestCategory = ContestCategories.Beauty
+ Me.Name = "Round"
+ Me.Description = "The user attacks the target with a song. Others can join in the Round to increase the power of the attack."
+ Me.CriticalChance = 1
+ Me.IsHMMove = False
+ Me.Target = Targets.OneAdjacentTarget
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = True
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = True
+ Me.HasSecondaryEffect = False
+ Me.RemovesFrozen = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = True
+
+ Me.IsAffectedBySubstitute = False
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ '#End
+ End Sub
+
+ Public Overrides Function GetBasePower(own As Boolean, BattleScreen As BattleScreen) As Integer
+ If own = True Then
+ If BattleScreen.FieldEffects.OppTurnCounts > BattleScreen.FieldEffects.OwnTurnCounts Then
+ If Not BattleScreen.FieldEffects.OppLastMove Is Nothing Then
+ If BattleScreen.FieldEffects.OppLastMove.ID = 496 Then
+ Return Me.Power * 2
+ End If
+ End If
+ End If
+ Else
+ If BattleScreen.FieldEffects.OwnTurnCounts > BattleScreen.FieldEffects.OppTurnCounts Then
+ If Not BattleScreen.FieldEffects.OwnLastMove Is Nothing Then
+ If BattleScreen.FieldEffects.OwnLastMove.ID = 496 Then
+ Return Me.Power * 2
+ End If
+ End If
+ End If
+ End If
+ Return Me.Power
+ End Function
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Normal/SimpleBeam.vb b/P3D/Pokemon/Attacks/Normal/SimpleBeam.vb
new file mode 100644
index 000000000..da80b7cc7
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Normal/SimpleBeam.vb
@@ -0,0 +1,72 @@
+Namespace BattleSystem.Moves.Normal
+
+ Public Class SimpleBeam
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Normal)
+ Me.ID = 493
+ Me.OriginalPP = 15
+ Me.CurrentPP = 15
+ Me.MaxPP = 15
+ Me.Power = 0
+ Me.Accuracy = 100
+ Me.Category = Categories.Status
+ Me.ContestCategory = ContestCategories.Cute
+ Me.Name = "Simple Beam"
+ Me.Description = "The user's mysterious psychic wave changes the target's Ability to Simple."
+ Me.CriticalChance = 0
+ Me.IsHMMove = False
+ Me.Target = Targets.OneAdjacentTarget
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = True
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = False
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = False
+ Me.IsHealingMove = False
+ Me.HasSecondaryEffect = False
+ Me.RemovesFrozen = False
+
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.ImmunityAffected = True
+ Me.IsDamagingMove = False
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = False
+ '#End
+
+ End Sub
+
+ Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
+ Dim op As Pokemon = BattleScreen.OppPokemon
+ If own = False Then
+ op = BattleScreen.OwnPokemon
+ End If
+ Dim bannedAbilities() As String = {"simple", "truant", "multitype", "stance change", "schooling", "comatose", "shields down", "disguise", "rks system", "battle bond"}
+ If bannedAbilities.Contains(op.Ability.Name.ToLower()) = False Then
+ op.Ability = Ability.GetAbilityByID(86)
+ BattleScreen.BattleQuery.Add(New TextQueryObject(op.GetDisplayName() & " acquired Simple!"))
+ Else
+ BattleScreen.BattleQuery.Add(New TextQueryObject(Me.Name & " failed!"))
+ End If
+ End Sub
+
+ End Class
+
+End Namespace
diff --git a/P3D/Pokemon/Attacks/Normal/TechnoBlast.vb b/P3D/Pokemon/Attacks/Normal/TechnoBlast.vb
new file mode 100644
index 000000000..e4b69227d
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Normal/TechnoBlast.vb
@@ -0,0 +1,84 @@
+Namespace BattleSystem.Moves.Normal
+
+ Public Class TechnoBlast
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Normal)
+ Me.ID = 546
+ Me.OriginalPP = 5
+ Me.CurrentPP = 5
+ Me.MaxPP = 5
+ Me.Power = 120
+ Me.Accuracy = 100
+ Me.Category = Categories.Special
+ Me.ContestCategory = ContestCategories.Cool
+ Me.Name = "Techno Blast"
+ Me.Description = "The user fires a beam of light at its target. The move's type changes depending on the Drive the user holds."
+ Me.CriticalChance = 1
+ Me.IsHMMove = False
+ Me.Target = Targets.OneAdjacentTarget
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = True
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = True
+ Me.HasSecondaryEffect = False
+ Me.RemovesFrozen = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ '#End
+ End Sub
+
+ Public Overrides Function GetAttackType(own As Boolean, BattleScreen As BattleScreen) As Element
+ Dim p As Pokemon = BattleScreen.OwnPokemon
+ If own = False Then
+ p = BattleScreen.OppPokemon
+ End If
+
+ Dim itemID As Integer = 0
+ If Not p.Item Is Nothing Then
+ itemID = p.Item.ID
+ End If
+
+ Select Case p.Item.ID
+ Case 1996
+ Return New Element(Element.Types.Fire)
+ Case 1997
+ Return New Element(Element.Types.Ice)
+ Case 1998
+ Return New Element(Element.Types.Water)
+ Case 1999
+ Return New Element(Element.Types.Electric)
+ Case Else
+ Return New Element(Element.Types.Normal)
+ End Select
+
+ Return Me.Type
+ End Function
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Poison/VenomDrench.vb b/P3D/Pokemon/Attacks/Poison/VenomDrench.vb
new file mode 100644
index 000000000..f5acf7807
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Poison/VenomDrench.vb
@@ -0,0 +1,72 @@
+Namespace BattleSystem.Moves.Poison
+
+ Public Class VenomDrench
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Poison)
+ Me.ID = 599
+ Me.OriginalPP = 20
+ Me.CurrentPP = 20
+ Me.MaxPP = 20
+ Me.Power = 0
+ Me.Accuracy = 100
+ Me.Category = Categories.Status
+ Me.ContestCategory = ContestCategories.Smart
+ Me.Name = "Venom Drench"
+ Me.Description = "Opposing Pokémon are drenched in an odd poisonous liquid. This lowers the Attack, Sp. Atk, and Speed stats of a poisoned target."
+ Me.CriticalChance = 0
+ Me.IsHMMove = False
+ Me.Target = Targets.AllAdjacentFoes
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = True
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = False
+ Me.KingsrockAffected = False
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = True
+ Me.HasSecondaryEffect = False
+ Me.RemovesFrozen = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = False
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = False
+ '#End
+
+ End Sub
+
+ Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
+ Dim op As Pokemon = BattleScreen.OppPokemon
+ If own = False Then
+ op = BattleScreen.OwnPokemon
+ End If
+ If op.Status = Pokemon.StatusProblems.Poison OrElse op.Status = Pokemon.StatusProblems.BadPoison Then
+ BattleScreen.Battle.LowerStat(Not own, own, BattleScreen, "Attack", 1, "", "move:venomdrench")
+ BattleScreen.Battle.LowerStat(Not own, own, BattleScreen, "Special Attack", 1, "", "move:venomdrench")
+ BattleScreen.Battle.LowerStat(Not own, own, BattleScreen, "Speed", 1, "", "move:venomdrench")
+ Else
+ BattleScreen.BattleQuery.Add(New TextQueryObject(Me.Name & " failed!"))
+ End If
+ End Sub
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Poison/Venoshock.vb b/P3D/Pokemon/Attacks/Poison/Venoshock.vb
index 9a2836943..394e27d33 100644
--- a/P3D/Pokemon/Attacks/Poison/Venoshock.vb
+++ b/P3D/Pokemon/Attacks/Poison/Venoshock.vb
@@ -56,11 +56,11 @@
End Sub
Public Overrides Function GetBasePower(own As Boolean, BattleScreen As BattleScreen) As Integer
- Dim p As Pokemon = BattleScreen.OppPokemon
+ Dim op As Pokemon = BattleScreen.OppPokemon
If own = False Then
- p = BattleScreen.OwnPokemon
+ op = BattleScreen.OwnPokemon
End If
- If p.Status = Pokemon.StatusProblems.Poison Then
+ If op.Status = Pokemon.StatusProblems.Poison OrElse op.Status = Pokemon.StatusProblems.BadPoison Then
Return 130
Else
Return Me.Power
diff --git a/P3D/Pokemon/Attacks/Psychic/HyperspaceHole.vb b/P3D/Pokemon/Attacks/Psychic/HyperspaceHole.vb
new file mode 100644
index 000000000..19a11c7f9
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Psychic/HyperspaceHole.vb
@@ -0,0 +1,80 @@
+Namespace BattleSystem.Moves.Psychic
+
+ Public Class HyperspaceHole
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Psychic)
+ Me.ID = 593
+ Me.OriginalPP = 25
+ Me.CurrentPP = 25
+ Me.MaxPP = 25
+ Me.Power = 50
+ Me.Accuracy = 0
+ Me.Category = Categories.Special
+ Me.ContestCategory = ContestCategories.Smart
+ Me.Name = "Hyperspace Hole"
+ Me.Description = "Using a hyperspace hole, the user appears right next to the target and strikes. This also hits a target using a move such as Protect or Detect."
+ Me.CriticalChance = 1
+ Me.IsHMMove = False
+ Me.Target = Targets.OneAdjacentTarget
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = False
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = True
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = True
+ Me.RemovesFrozen = False
+ Me.HasSecondaryEffect = True
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ Me.UseAccEvasion = False
+ Me.CanHitUnderwater = False
+ Me.CanHitUnderground = False
+ Me.CanHitInMidAir = False
+ '#End
+
+ Me.AIField1 = AIField.Damage
+ Me.AIField2 = AIField.CannotMiss
+ End Sub
+
+ Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
+ Dim op As Pokemon = BattleScreen.OppPokemon
+
+ If own = True Then
+ BattleScreen.FieldEffects.OppDetectCounter = 0
+ BattleScreen.FieldEffects.OppProtectCounter = 0
+ Else
+ op = BattleScreen.OwnPokemon
+
+ BattleScreen.FieldEffects.OwnDetectCounter = 0
+ BattleScreen.FieldEffects.OwnProtectCounter = 0
+ End If
+
+ BattleScreen.BattleQuery.Add(New TextQueryObject("Hyperspace Hole lifted " & op.GetDisplayName() & "'s protection!"))
+ End Sub
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Psychic/Psystrike.vb b/P3D/Pokemon/Attacks/Psychic/Psystrike.vb
new file mode 100644
index 000000000..afd4bf8df
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Psychic/Psystrike.vb
@@ -0,0 +1,61 @@
+Namespace BattleSystem.Moves.Psychic
+
+ Public Class Psystrike
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Psychic)
+ Me.ID = 540
+ Me.OriginalPP = 10
+ Me.CurrentPP = 10
+ Me.MaxPP = 10
+ Me.Power = 100
+ Me.Accuracy = 100
+ Me.Category = Categories.Special
+ Me.ContestCategory = ContestCategories.Cool
+ Me.Name = "Psystrike"
+ Me.Description = "The user materializes an odd psychic wave to attack the target. This attack does physical damage."
+ Me.CriticalChance = 1
+ Me.IsHMMove = False
+ Me.Target = Targets.OneAdjacentTarget
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = True
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = True
+ Me.RemovesFrozen = False
+ Me.HasSecondaryEffect = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ '#End
+ End Sub
+
+ Public Overrides Function GetUseDefenseStat(p As Pokemon) As Integer
+ Return p.Defense
+ End Function
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Psychic/Synchronoise.vb b/P3D/Pokemon/Attacks/Psychic/Synchronoise.vb
new file mode 100644
index 000000000..a2d26ec05
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Psychic/Synchronoise.vb
@@ -0,0 +1,88 @@
+Namespace BattleSystem.Moves.Psychic
+
+ Public Class Synchronoise
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Psychic)
+ Me.ID = 485
+ Me.OriginalPP = 10
+ Me.CurrentPP = 10
+ Me.MaxPP = 10
+ Me.Power = 120
+ Me.Accuracy = 100
+ Me.Category = Categories.Special
+ Me.ContestCategory = ContestCategories.Smart
+ Me.Name = "Synchronoise"
+ Me.Description = "Using an odd shock wave, the user inflicts damage on any Pokémon of the same type in the area around it."
+ Me.CriticalChance = 1
+ Me.IsHMMove = False
+ Me.Target = Targets.AllAdjacentTargets
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = True
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = True
+ Me.RemovesFrozen = False
+ Me.HasSecondaryEffect = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ '#End
+
+ Me.AIField1 = AIField.Damage
+ Me.AIField2 = AIField.Nothing
+ End Sub
+
+ Public Overrides Function MoveFailBeforeAttack(Own As Boolean, BattleScreen As BattleScreen) As Boolean
+ Dim p As Pokemon = BattleScreen.OwnPokemon
+ Dim op As Pokemon = BattleScreen.OppPokemon
+ If own = False Then
+ p = BattleScreen.OppPokemon
+ op = BattleScreen.OwnPokemon
+ End If
+
+ If op.Type2.Type = Element.Types.Blank Then
+ 'Solo type
+ If op.Type1.Type = p.Type1.Type OrElse op.Type1.Type = p.Type2.Type Then
+ Return False
+ Else
+ Return True
+ BattleScreen.BattleQuery.Add(New TextQueryObject(Me.Name & " failed!"))
+ End If
+ Else
+ 'Dual type
+ If op.Type1.Type = p.Type1.Type OrElse op.Type1.Type = p.Type2.Type OrElse op.Type2.Type = p.Type1.Type OrElse op.Type2.Type = p.Type2.Type Then
+ Return False
+ Else
+ Return True
+ BattleScreen.BattleQuery.Add(New TextQueryObject(Me.Name & " failed!"))
+ End If
+ End If
+
+ End Function
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Psychic/Trick.vb b/P3D/Pokemon/Attacks/Psychic/Trick.vb
index 17980549d..3031e4c58 100644
--- a/P3D/Pokemon/Attacks/Psychic/Trick.vb
+++ b/P3D/Pokemon/Attacks/Psychic/Trick.vb
@@ -75,15 +75,30 @@ Namespace BattleSystem.Moves.Psychic
If Not op.Item Is Nothing AndAlso op.Item.Name.ToLower() = "griseous orb" AndAlso op.Number = 487 Then
CanSwitchItems = False
End If
- If CheckMultitypePlate(p, op) = False Then
- CanSwitchItems = False
- End If
If Not p.Item Is Nothing AndAlso p.Item.Name.ToLower().EndsWith(" drive") = True AndAlso p.Number = 649 Then
CanSwitchItems = False
End If
If Not op.Item Is Nothing AndAlso op.Item.Name.ToLower().EndsWith(" drive") = True AndAlso op.Number = 649 Then
CanSwitchItems = False
End If
+ If Not p.Item Is Nothing AndAlso p.Item.Name.ToLower().EndsWith(" plate") = True AndAlso p.Number = 493 Then
+ CanSwitchItems = False
+ End If
+ If Not op.Item Is Nothing AndAlso op.Item.Name.ToLower().EndsWith(" plate") = True AndAlso op.Number = 493 Then
+ CanSwitchItems = False
+ End If
+ If Not p.Item Is Nothing AndAlso p.Item.Name.ToLower().EndsWith(" memory") = True AndAlso p.Number = 773 Then
+ CanSwitchItems = False
+ End If
+ If Not op.Item Is Nothing AndAlso op.Item.Name.ToLower().EndsWith(" memory") = True AndAlso op.Number = 773 Then
+ CanSwitchItems = False
+ End If
+ If Not p.Item Is Nothing AndAlso p.Item.Name.ToLower().EndsWith(" mail") = True Then
+ CanSwitchItems = False
+ End If
+ If Not op.Item Is Nothing AndAlso op.Item.Name.ToLower().EndsWith(" mail") = True Then
+ CanSwitchItems = False
+ End If
If (p.Item IsNot Nothing AndAlso p.Item.IsMegaStone) OrElse (op.Item IsNot Nothing AndAlso op.Item.IsMegaStone) Then
CanSwitchItems = False
End If
@@ -105,25 +120,6 @@ Namespace BattleSystem.Moves.Psychic
End If
End Sub
- Private Function CheckMultitypePlate(ByVal p As Pokemon, ByVal op As Pokemon) As Boolean
- If p.Ability.Name.ToLower() <> "multitype" And op.Ability.Name.ToLower() <> "multitype" Then
- Return True
- Else
- If Not p.Item Is Nothing Then
- If p.Item.Name.ToLower().EndsWith(" plate") = True Then
- Return False
- End If
- End If
- If Not op.Item Is Nothing Then
- If op.Item.Name.ToLower().EndsWith(" plate") = True Then
- Return False
- End If
- End If
- End If
-
- Return True
- End Function
-
End Class
End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Rock/DiamondStorm.vb b/P3D/Pokemon/Attacks/Rock/DiamondStorm.vb
new file mode 100644
index 000000000..e129600c2
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Rock/DiamondStorm.vb
@@ -0,0 +1,68 @@
+Namespace BattleSystem.Moves.Rock
+
+ Public Class DiamondStorm
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Rock)
+ Me.ID = 591
+ Me.OriginalPP = 5
+ Me.CurrentPP = 5
+ Me.MaxPP = 5
+ Me.Power = 100
+ Me.Accuracy = 95
+ Me.Category = Categories.Physical
+ Me.ContestCategory = ContestCategories.Beauty
+ Me.Name = "Diamond Storm"
+ Me.Description = "The user whips up a storm of diamonds to damage opposing Pokémon. This may also sharply raise the user's Defense stat."
+ Me.CriticalChance = 1
+ Me.IsHMMove = False
+ Me.Target = Targets.AllAdjacentFoes
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = True
+ Me.CounterAffected = True
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = True
+ Me.HasSecondaryEffect = False
+ Me.RemovesFrozen = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ '#End
+
+ Me.AIField1 = AIField.Damage
+ Me.AIField2 = AIField.CanRaiseDefense
+
+ Me.EffectChances.Add(50)
+ End Sub
+
+ Public Overrides Sub MoveHits(own As Boolean, BattleScreen As BattleScreen)
+ If Core.Random.Next(0, 100) < GetEffectChance(0, own, BattleScreen) Then
+ BattleScreen.Battle.RaiseStat(own, own, BattleScreen, "Defense", 2, "", "move:diamondstorm")
+ End If
+ End Sub
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Attacks/Water/OriginPulse.vb b/P3D/Pokemon/Attacks/Water/OriginPulse.vb
new file mode 100644
index 000000000..1afed6f27
--- /dev/null
+++ b/P3D/Pokemon/Attacks/Water/OriginPulse.vb
@@ -0,0 +1,58 @@
+Namespace BattleSystem.Moves.Water
+
+ Public Class OriginPulse
+
+ Inherits Attack
+
+ Public Sub New()
+ '#Definitions
+ Me.Type = New Element(Element.Types.Water)
+ Me.ID = 618
+ Me.OriginalPP = 10
+ Me.CurrentPP = 10
+ Me.MaxPP = 10
+ Me.Power = 110
+ Me.Accuracy = 85
+ Me.Category = Categories.Special
+ Me.ContestCategory = ContestCategories.Beauty
+ Me.Name = "Origin Pulse"
+ Me.Description = "The user attacks opposing Pokémon with countless beams of light that glow a deep and brilliant blue."
+ Me.CriticalChance = 1
+ Me.IsHMMove = False
+ Me.Target = Targets.AllAdjacentFoes
+ Me.Priority = 0
+ Me.TimesToAttack = 1
+ '#End
+
+ '#SpecialDefinitions
+ Me.MakesContact = False
+ Me.ProtectAffected = True
+ Me.MagicCoatAffected = False
+ Me.SnatchAffected = False
+ Me.MirrorMoveAffected = True
+ Me.KingsrockAffected = True
+ Me.CounterAffected = False
+
+ Me.DisabledWhileGravity = False
+ Me.UseEffectiveness = True
+ Me.ImmunityAffected = True
+ Me.HasSecondaryEffect = False
+ Me.RemovesFrozen = False
+
+ Me.IsHealingMove = False
+ Me.IsRecoilMove = False
+ Me.IsPunchingMove = False
+ Me.IsDamagingMove = True
+ Me.IsProtectMove = False
+ Me.IsSoundMove = False
+
+ Me.IsAffectedBySubstitute = True
+ Me.IsOneHitKOMove = False
+ Me.IsWonderGuardAffected = True
+ Me.IsPulseMove = True
+ '#End
+ End Sub
+
+ End Class
+
+End Namespace
\ No newline at end of file
diff --git a/P3D/Pokemon/Items/Standard/BurnDrive.vb b/P3D/Pokemon/Items/Standard/BurnDrive.vb
new file mode 100644
index 000000000..fa3016cc7
--- /dev/null
+++ b/P3D/Pokemon/Items/Standard/BurnDrive.vb
@@ -0,0 +1,18 @@
+Namespace Items.Standard
+
+ -
+ Public Class BurnDrive
+
+ Inherits Item
+
+ Public Overrides ReadOnly Property Description As String = "Makes Techno Blast a Fire-type move if held by Genesect."
+ Public Overrides ReadOnly Property CanBeUsedInBattle As Boolean = False
+ Public Overrides ReadOnly Property CanBeUsed As Boolean = False
+
+ Public Sub New()
+ _textureRectangle = New Rectangle(0, 312, 24, 24)
+ End Sub
+
+ End Class
+
+End Namespace
diff --git a/P3D/Pokemon/Items/Standard/ChillDrive.vb b/P3D/Pokemon/Items/Standard/ChillDrive.vb
new file mode 100644
index 000000000..b09e6ff09
--- /dev/null
+++ b/P3D/Pokemon/Items/Standard/ChillDrive.vb
@@ -0,0 +1,18 @@
+Namespace Items.Standard
+
+
-
+ Public Class ChillDrive
+
+ Inherits Item
+
+ Public Overrides ReadOnly Property Description As String = "Makes Techno Blast an Ice-type move if held by Genesect."
+ Public Overrides ReadOnly Property CanBeUsedInBattle As Boolean = False
+ Public Overrides ReadOnly Property CanBeUsed As Boolean = False
+
+ Public Sub New()
+ _textureRectangle = New Rectangle(24, 312, 24, 24)
+ End Sub
+
+ End Class
+
+End Namespace
diff --git a/P3D/Pokemon/Items/Standard/DouseDrive.vb b/P3D/Pokemon/Items/Standard/DouseDrive.vb
new file mode 100644
index 000000000..6c5ebd36c
--- /dev/null
+++ b/P3D/Pokemon/Items/Standard/DouseDrive.vb
@@ -0,0 +1,18 @@
+Namespace Items.Standard
+
+
-
+ Public Class DouseDrive
+
+ Inherits Item
+
+ Public Overrides ReadOnly Property Description As String = "Makes Techno Blast a Water-type move if held by Genesect."
+ Public Overrides ReadOnly Property CanBeUsedInBattle As Boolean = False
+ Public Overrides ReadOnly Property CanBeUsed As Boolean = False
+
+ Public Sub New()
+ _textureRectangle = New Rectangle(48, 312, 24, 24)
+ End Sub
+
+ End Class
+
+End Namespace
diff --git a/P3D/Pokemon/Items/Standard/ShockDrive.vb b/P3D/Pokemon/Items/Standard/ShockDrive.vb
new file mode 100644
index 000000000..0ec792232
--- /dev/null
+++ b/P3D/Pokemon/Items/Standard/ShockDrive.vb
@@ -0,0 +1,18 @@
+Namespace Items.Standard
+
+
-
+ Public Class ShockDrive
+
+ Inherits Item
+
+ Public Overrides ReadOnly Property Description As String = "Makes Techno Blast an Electric-type move if held by Genesect."
+ Public Overrides ReadOnly Property CanBeUsedInBattle As Boolean = False
+ Public Overrides ReadOnly Property CanBeUsed As Boolean = False
+
+ Public Sub New()
+ _textureRectangle = New Rectangle(72, 312, 24, 24)
+ End Sub
+
+ End Class
+
+End Namespace
diff --git a/P3D/Pokemon/Items/_itemList.txt b/P3D/Pokemon/Items/_itemList.txt
index 15c88cc90..69219fb22 100644
Binary files a/P3D/Pokemon/Items/_itemList.txt and b/P3D/Pokemon/Items/_itemList.txt differ
diff --git a/P3D/Screens/Pokemon/TeachMovesScreen.vb b/P3D/Screens/Pokemon/TeachMovesScreen.vb
index 44f1bcbdd..876f96a4a 100644
--- a/P3D/Screens/Pokemon/TeachMovesScreen.vb
+++ b/P3D/Screens/Pokemon/TeachMovesScreen.vb
@@ -20,8 +20,9 @@
Dim tutorMove As BattleSystem.Attack = Pokemon.AttackLearns.Values(i)
Dim learnLevel As Integer = Pokemon.AttackLearns.Keys(i)
- If learnLevel <= Pokemon.Level Then
- Dim canLearnMove As Boolean = True
+ 'Commented those to test Tutor Gen 6+ behavior
+ 'If learnLevel <= Pokemon.Level Then
+ Dim canLearnMove As Boolean = True
For Each learnedAttack As BattleSystem.Attack In Pokemon.Attacks
If learnedAttack.ID = tutorMove.ID Then
@@ -38,7 +39,7 @@
If canLearnMove = True Then
MovesList.Add(tutorMove)
End If
- End If
+ 'End If
Next
Me.MouseVisible = False