The current variables in place to check for STAB do not work as intended.
If a Pokemon has two STAB moves of the same type, and one of them is set
as a move that shouldn't be counted as STAB, the Pokemon will be counted
as not having STAB. Since nothing in the code checks for Pokemon having
STAB of a specific type, it is refactored to be a boolean instead.
In order to avoid a situation where a move like Infestation sets the STAB
variable to true when it doesn't count as a damaging move, these kinds of
moves no longer increment counters for abilities that boost damage, like
Adaptability.
- Force Super Luck on Unfezant (it has a 33% chance of getting Big Pecks)
- Force Scope Lens on Unfezants with enough attacking moves
- Give Unfezant Night Slash
- Replace Wish with Roost in Doubles
- Reject Water Spout and Eruption with setup or RestTalk
- Allow Origin Pulse with RestTalk
- Give Extremespeed users and Sucker Punch users without STAB Life Orb
instead of Expert Belt
- Prevent Life Orb with Dragon Tail
- Low priority: give Leftovers to Pokemon weak to Stealth Rock
Super Luck + Scope Lens gives a 50% chance of crit, but isn't a very high
priority since a consistent damage boost from a Choice item can be a
better pick.
- Lumineon and Poliwrath have Storm Drain and Water Absorb respectively,
which is always chosen over Swift Swim, so Rain Dance is unneccessary.
- Give Pokemon with Unburden a Focus Sash
- Give Unburden mons with stat-lowering moves a White Herb (specifically
targets Sceptile)
- Added speedsetup counter
- Improve Weakness Policy selection (might give it to more than just
speedsetup later on but this is much better than the previous
implementation that gave it to very bad sets)
- Added Lustrous Orb as a low priority option for Palkia
- Slightly increased defensive requirement of Assault Vest
- 30% more op/s for randomTeam, randomDoublesTeam and randomCCTeam
- 300% more op/s for randomHackmonsCCTeam
- Implement helper method `sampleNoReplace`: takes an array parameter, removes a random element and returns it.
- Random team makers now follow the game RNG. Therefore, it's now possible to reconstruct the teambuilding process for bad sets, given that the starting seed is known.
Went through all fully-evolved Pokemon and updated their moves. Also
removed illegal moves on several Pokemon...
- Added Superpower to SetupException
- Reject Water Pulse with Scald
- Reject Acrobatics with Hurricane
- Prevent Focus Blast and Superpower together
- Reject Physical moves with Acid Spray (only affects Eelektross)
- Do not reject Baton Pass with Protect
- Reject Healing Wish with setup
- Reject Hydro Pump with RestTalk
- Prevent Precipice Blades with Earthquake
- In accepting Shadow Ball + HP Fighting, ensure that it's HP Fighting
(relevant for Reuniclus, Chandelure, and Sylveon, which have Hidden
Power that aren't Fighting)
- If Hidden Power changes the IVs but is later removed by another
processing cycle, reset the IVs to 31 all
- Removed old check for "bulky" Pokemon as it would give Leftovers to
Pokemon that would prefer Life Orb or even Assault Vest. For example,
Kyurem-White and Goodra, respectively.
- If the Pokemon has three attacking moves, give Life Orb to those with
either setup or a recovery move, and give Leftovers to everything else.
- Give Keldeo HP Flying instead of HP Ghost
- Reject Hidden Power if the Pokemon has a special setup move and only
one other special attack
- Dark/Fighting is resisted by Fairy this generation and isn't a
"perfect" combination anymore
- Remove Feint from Pikachu/Raichu
- Replace Rock Blast with Rock Slide on Golem line
- Add Surf to Octillery
- Reject Strong Jaw without bite moves
- Update Iron Fist check to use the punch flag
- Give preference to Rock Slide over Head Smash
- Give preference to Discharge over Thunderbolt and Electroweb
- Modify Tyrantrum's moves
- Add bite moves counter for Strong Jaw
- Use punch flag for ironfist counter
- Give preference to Stone Edge over Head Smash
Mechanics Changes:
- Fire Rocket does less damage, cannot crit.
- Fire Rocket is no longer a bullet move (for Chesnaught)
- Only Li Shang can Train Recruits.
- Recruits start with lowered defenses as well.
- Edit Mushu's movepool.
Flavor Changes:
- Train Recruits now uses Bulk Up's animation.
- Fire Rocket now uses Eruption's animation. Backfires cause the animation
to strike the user instead!
- Use Searing Shot as Fire Rocket instead of Octazooka.
Unaware currently doesn't work because the ModifyMove event is fired on the move before each target is caculated in doubles and triples.
This means that the ModifyMove event should be fired for each target and the move not modified unless it fits the attacker-target.
It's easier and less expensive to use an ability property to check on attacker/target than to fire events.
This fixes Unaware in doubles/triples.
It takes account interaction with Mold Breaker, Gastro Acid, and other ability supressers.
Seasonal is based on Mulan, in honor of Chinese New Year.
General Shang must defeat the Huns, but his new recruits are weak! Over
time, however, they will get stronger over time by training (just like the
movie, they train during I'll Make A Man Out Of You.) Singing will also
make them train faster.
The Han Chinese also have powerful rockets at their disposal (select
Octazooka in battle). However, the rockets sometimes backfire on new
recruits, but as they train the chance of backfire goes down.
Added a counter that tracks Normal damaging moves for purposes of -ate
Abilities, in case it becomes important later. This counter also
future-proofs Aurorus in case it receives other viable Normal attacks
later.
- Rename randbats helper function `canMegaEvo` to `hasMegaEvo`.
- Move duplicate mega evolution possibility checks from `runMegaEvo` and BattlePokemon constructor to `canMegaEvo` battle script.
Stone Edge somehow was a case three times in the switch statement, meaning
only the first one would have been checked. This fix merges the three
checks into one.
If a Pokemon has a move that boosts speed (Rock Polish/Agility), reject
all modified-priority moves.
If a Pokemon has 4 Physical or 4 Special moves, reject Choice Scarf if the
Pokemon has a priority move.
Breloom is the only Pokemon that gets both and will get the better
ability with only one of them. Basically, no more Poison Heal Mach Punch
and no more Technician Focus Punch.
- Serene Grace is automatically rejected for Chansey and Blissey, who
prefer Natural Cure.
- Serene Grace works best with secondaries that have a high chance of
activating, so a seperate counter is used to check those specifically.
- Sheer Force doesn't need a secondaries chance check; both branches of
the check would have allowed Sheer Force to be used.
- Add Eviolite for NFEs
- Removed old and mostly unused custom levels
- Updated some Pokemon levels
- Removed all NFE Pokemon from Random Battle except for Chansey,
Doublade, Pikachu, Porygon2, and Scyther
- Acrobatics Pokemon have Flying Gem.
- Hawlucha no longer has Sky Attack in its random battle movepool, so we
remove references to that in the code.
- Double Random Battles only check for Fake Out on Unburden Pokemon (and
formerly Sky Attack on Hawlucha, which is removed, so there is no need
to cycle through all of their moves.
A series of changes to make sure battles are as balanced as possible.
Made Frodo Ground/Fairy.
Made Samwise Normal/Fairy.
Switched Gandalf and Saruman boosts.
Added Gollum for Mordor, which is pretty much annoying and Fighting-type move absorber.
Changed Swords Dance for Bulk Up on Aragorn to prevent unstoppable sweeps.
Added a SpD boost for Moses to be able to stand to the pharaoh. Also a cool sentence.
Made John Connor faster (slower but in TR) than Terminator T-1000 to give humans an even lead matchup.
Made Blissey on humans have a decent moveset. Including Barrier, yes.
Made specific sets for Hitmontop and Scrafty on humans, being able to take Robot hits.
Made electric attacks on sailors less likely, 66% instead of 100%.
This change makes 1/4 weak Pokémon survive four switch ins and 50% weak Pokémon survive two Switch-ins.
Belly Drum HP still takes precedence (having Charizard in mind kek).
- Groudon no longer has Water Absorb (relevant because of Hebrew
Seismitoad)
- Removed Hebrew LC mons (but not Egyptian ones)
- Limit one Yahweh/Arceus per team
- Removed the rediculous level boost to most Pokemon.
- Tweak EVs for Lucario, Swift Swimmers, and Shell Smashers.
- Removed all LC sailors and fishes, and added some new Pokemon.
- Remove Rain Dance from sailor sets (mostly Swampert)
- Prevent 2 Mega Pokemon on a team for the Sailor Scenario
Make Unburden Hitmonlee Reckless on Terminator battle.
Limit Lucario on megas too.
Improve zam's moveset on that battle as well.
Minimise speed on Terminator battle.
Make Chansey have Eviolite.
Make a more even lead battle of Machamp VS Kyogre.
Machamp is now a Technician Life Orb mon with mixed attack.
Kyogre has now a specific Choice Scarf set.
To not to make Machamp too overwhelming, its level is 75.
This, alongside Life Orb, makes it manageable with Kyogre out.
A trade of hits will end up with either fainted and the other at 10% HP.
Gen 1's defenses were too low, raise them a little.
Change Bolt Strike for Fusion Bolt on sailors, this achieves an almost perfect balance.
Nerf Charizard-Y slightly on Red VS Blue battle. Too strong.
Nerf Hoopa-Unbound's level too, as it's too damn strong.
Added a way to effectively dealing with Smaug on LOTR, adding Bard as a possibility.
Frodo now gets evasion thanks to the one ring, it's invisible after all.
Nerf Groudon slightly on Desert, it is able to sweep an entire team with bad luck on the Pokémon chosen.
Nerf slightly Alakazam on Red vs Blue battle, it can take on a team easily.
Nerf defenses on Gen 1 team so damage is closer to that of Gen 1 (more).
Swampert should not get any boost on sailor team, otherwise it's an insta-win.
Improved the set maker to avoid bad sets due to Present.
Made the mountain 500 meters shorter.
Made the chance to hit an obstacle slightly lower.
Added weight to the sleigh that is lowered by throwing Presents and makes you faster.
Eliminate megas from teams.
Make freeze from event make you unable to move that turn.
Freeze thawing was meant to be when hit, not after a turn after all. Fixed comment.
- Red Card and Eject Button do not activate if the holder is being
forced out.
- Circle Throw, Dragon Tail, Roar, and Whirlwind cannot attempt to force
out a Pokemon with no inactive unfainted allies.
Added functionality for setAbility to send End events to abilities.
Fixed bug with Mold Breaker negating all Battle#singleEvent ability calls,
even those that don't involve damage calculation.
Fixed Skill Swap to now use End and Start events in the right order:
send the End events, then change the abilities, then send Start events.
If the same ability is swapped, don't send End events (the game simply
re-activates the abilities in question)
Moved SwitchOut/Faint events from weather to ability so the weather
can interact properly with Cloud Nine or Air Lock.
Primal weathers persist if a Pokemon with the relevant ability is
on-field, even if the originator switches out.
There is no need to store whether the team has a mega anymore.
With the general use of pokemon.canMegaEvo and it being set to false for
the whole team after a mega evolution, it is what we need to check to avoid
more than one mega evolution or banned mega evolutions.
There's an improbable chance that a nickname gets a hash collision.
In such a case, the player gets five instead of six Pokémon.
This safeguard prevents that improbable event from happening at all.
Seasonal format is a random battle format that changes its rules monthly.
It often includes limited Pokmon pools, wacky mechanics you'd never encounter in game, and other fun stuff.
- Changed Sky Drop to use onTryHit on its first hit as well as its second,
allowing it to check for Protect and Fly naturally.
- Added messages when a Pokemon is freed from Sky Drop.
- Allow Flying-type Pokemon to be hit by Sky Drop if their Ground immunity
has been removed.
- Added BeforeMovePriority to allow Sky Drop to interact with Stance
Change properly.
- Prevent a Pokemon trapped by Sky Drop from Mega Evolving.
- Added onRedirectTarget to allow Sky Drop to interact with Ally Switch
properly.
made it so that shuca berry and chople berry will only be selected in randdubs in the case of a 4x weakness as opposed to being potential item picks for 2x or 4x weaknesses
- added charti & occa for 4x weaknesses
- made yache only for 4x weaknesses
- made it so you cant have fake out & sheer force (9-21-14)
- changed it so shuca berry and chople berry won't be added to
immunities
- unburden mons only have normal gem if they have fake out as opposed to
any normal attacking move
- made life orb more common over expert belt
fixed error in shuca generation
typoed, but fixed it so now it should only give shuca berry to pokemon
without a ground immunity
fixed broken indentation
fixed issues pointed out by slayer95
should have fixed the indentation and edited the immunity check
So yeah, this is a major bug in the randbat set generator, but other
than performance issues and the random 3-move pokemon, it shouldn't
have any other implications.
- Move some variable declarations outside of loops.
- Use single-line if statements wherever reasonable.
- Update a check for Hyper Fang to Gen 6.
- Fix Ghost types getting Chople Berries in Random Doubles Battles.
- Fix a typo intended to fix in d24b184b and another one introduced in the same commit.
randomBattleMoves is now an array, and has been renamed from
viableMoves since it no longer is used for anything other than
random battles.
This commit also does some cleanup of some code relating to
random battle moves, including fixing gen 1's randomSet function,
which apparently has never worked.
JSHint is now a fair bit stricter, and is now correctly checking
files in `mods/`.
The code has been fixed to match the new stricter standards.
JSHint has now caught its second actual bug: Gen 5 Pinap Berry
was Ice instead of Grass.
I used a hack to make the multiple declaration errors go away,
so all that remained in jsHint were actual errors, which I've
now mostly fixed.
All this linting ended up uncovering one actual bug: Uproar's
message not showing. It's a very minor bug in a move no one uses,
so I'm going to fold it into this commit.
The one who committed that probably meant Sky Attack. Like Bounce it is also a 2-turn move. Aeroblast is a 100 BP Special Flying-Type attack. Very STAB-worthy.
- Fix an issue introduced in 6539521adc, where Protean didn't activate if the target was immune to the move.
- Protean should not activate if the user fails a Detect/Protect, or the move is Fling or Natural Gift and the user has no item.
- Protean should not activate on the first turn of a Pledge Combo. Aditionally, fix Flash Fire/Storm Drain, etc being activated by the first move in the combo.
- Introduce event 'PrepareHit', which is ran after any move target is resolved but before immunity is checked.
Megas now have their own viable moves, so that more unique megas like Heracross, Charizard and Mewtwo can have their viable options.
Potential mega evolving candidates can now be selected without their mega stone. For example, if the team has Gengar with Gengarite, Heracross without Heracronite can be added.
Make multiple mega evolution selection random
It mistakenly always picked the Y forme rather than randomly choosing either.
Reduce number of getTemplate() calls
Slayer95 pointed out that this is a better implementation.
Fix syntax error
Improve randoms mega selection
Simplifying the code by having the mega template stored in 'template'. For abilities, the original template is stored in 'baseTemplate'. Also added the improved mega selection for Random Doubles, which would be affected by giving viable moves to megas in formats-data.js.
Improve mega selection in randoms
Megas now have their own viable moves, so that more unique megas like
Heracross, Charizard and Mewtwo can have their viable options. Potential
mega evolving candidates can now be selected without their mega stone.
For example, if the team has Gengar with Gengarite, Heracross without
Heracronite can be added.
- Recoil for Parental Bond Double Edge, etc should happen after all the hits have finished.
- Also removed the event 'Secondary', currently unused in the codebase.
If a Pokemon has recovery, it plans to survive in the long-term and having a move that sacrifices itself is unwanted.
(This was found on probably the worst set ever seen in Random Battles: Memento / Rest / Sleep Talk / Poison Jab)
TI said to remove this segment previously, but evidently the problem still persists because I got 3 pokemon with both moves in the same battle, which was completely useless.
I chose 300 as a sum of Defense, Special Defense and HP that would designate a high bulk Pokemon, due to being just below Dusknoir's sum of the three and I was getting Focus Sash Dusknoir, which is rather subpar. The number could be changed if there's any better way to designate bulk.
Sigilyph's randoms moveset is built solely for use with Magic Guard, and without being able to automatically pass on status, Tinted Lens Sigilyph is pretty much just a free switch in and set-up fodder for a dark type. Wonder Skin is even worse in that it reduces the need for Psycho Shift.
If any of the following moves are in the list of viable moves already, do not add Protect to the list.
- Protect
- Detect
- King's Shield
- Spiky Shield
This commit implements the Random Doubles Battle format,
a format awaited by hundreds of players.
This first version uses singles viable moves for the movepool
while Doubles team works on the project of gathering viable
moves for all Doubles Pokémon.
The team maker and set maker are slightly different,
choosing items and abilities more useful in doubles, capitalising
less on tiering and more on BST, and changing move priorities.
This is a first version that should be kept updated with new
and better mechanics for its own Team Making algorithms.
Give Rocky Helmet to Rough Skin users on a medium priority.
Add more comments.
Remove Custap Berry as it's unreleased.
Add leftovers as the item of choice for Spiritomb as a defensive mon.
Trick Room mons are on disadvantage unless this is active.
Trick Room needs a set up turn.
If no EVs are given, Trick Room and Gyro Ball mons are simply at
disadvantage. Even if Gyro Ball hits hard, it's at the mercy of OHKOs
or switch-in 2HKOs.
Needs to be added to the client in the future, in addition to (using
Blastoise as an example):
The opposing Blastoise has Mega Evolved into Mega Blastoise!
- It doesn't mention X/Y for Charizard/Mewtwo
Pokémon could lack Trick if they would have gotten it as their third movement from randomSet. This is now properly dealt with. (Note that no OF-pokémon gets Present from randomSet.)
Improve the default team when there's a repeated Pokémon so
players aren't in disadvantage due to a system flaw.
Also use a better way to not to repeat Pokémon formes.
The main difference here is that the evolution family restriction
has been replaced with a 'limit one of each type combo' restriction.
Every other change is just refactoring.
There are two cases where a pokemon might attempt to execute a move
with zero PP:
- a move which had PP when selected, but whose PP was subsequently
reduced to 0 by Spite; and
- a case where a pokemon has multiple copies of the same move, in
which case it will always be possible to select the move, but it
will not be executed if it has 0 PP.
Attempting to use a move with zero PP should not succeed.
June has a new Seasonal, June Jubilee, which features the coming of summer with all fire type Pokémon, its swarms of bugs, and a little Delibird story.
Move results are now passed all the way up to the useMove script.
It's now possible to tell from within useMove whether or not the move
succeeded.
This fixes a bug where successful Memento and Healing Wish were
considered to have failed and so didn't cause the user to faint.
Currently, if a burned Pokemon explodes in doubles, all targets except
the first will take full damage, because it's fainted (and no longer
burned) by the time those damage calculations are done.
The correct solution is to do all damage calculations before dealing
any damage, which I will do someday. Today is not that day.
Today, we move fainting the Explosion user to after damage is dealt.
Which, aside from making the faint order wrong, doesn't really have
any other consequences, and is better than the current buggy
damage calculation.
Specifically, the TryFieldHit event no longer exists.
Instead, Magic Bounce has separate event handlers for TryHit and
TryHitSide.
This also fixes it so Magic Coat/Bounce happen before ability
absoption (like Water Absorb).
Gems now boost all hits of a spread move.
This introduces a new event BasePowerMultiplier, so that gems actually
activate at the right time now.
The name is similar to basePowerModifier but they do the same thing
anyway. We should probably figure something out for their naming,
though.
- Add Hustle counter
- Prevent a few move combinations
- Prevent Simple without a boosting move
- Prevent Swift Swim/Chlorophyll without Rain Dance/Sunny Day
- Set Combee's ability to always be Honey Gather
- Set Deoxys-D and Deoxys-S to level 74
- Healing Wish and Lunar Dance fail correctly when the user is the last
Pokemon.
- Final Gambit and Memento don't faint the user when used against a
Protecting target.
- Prevent Baton Pass with Switcheroo/Trick
- Prevent Fiery Dance with Fire Blast (Volcarona)
- Prevent SolarBeam without Sun
- Prevent Bolt Strike with Fusion Bolt (Zekrom)
Added the random team selection for the new Seasonal ladder for
February Valentine Venture (randomSeasonalVVTeam).
It's a doubles ladder that chooses three couples for each player.
- Random battles and automatic detection sets Hidden Power IVs correctly
- Hidden Power now always does damage based on user's IVs
- User's Hidden Power base power is now reported
- Reject Relic Song with setup
- Reject Encore/Pursuit/Stealth Rock/Sucker Punch with RestTalk
- Reject Hydro Pump with Razor Shell/Scald
- Reject Flamethrower with Blue Flare
- Reject Bonemerang/Earth Power with Earthquake
- Make Wynaut/Wobbuffet get Custap Berry 50% of the time with Destiny Bond
- Add the possibility of getting Lum Berry with Outrage
- several pokemon receive level adjustments
- Guts and Tinted Lens should be slightly less common
- Sheer Force is now filtered (will not be chosen without a move that benefits from it
- Bidoof now gets Moody for the lulz
In the event that the user and target get KOed in the same turn (Life Orb recoil, Iron Barbs, etc.), make sure the user isn't forced to switch to another Pokemon before the opponent chooses a replacement.
Two-turn moves are now controlled by a volatile, twoturnmove, which determines whether a Pokemon executes the charge turn or the move turn of a two-turn move. This handles mechanics like Truant Pokemon being unable to use two-turn moves, as the execution turn is their truancy turn. It also handles various edge cases involving moves that call other moves (e.g. Metronome) and Encore.
These changes add a new event, onChargeMove, in which one can return false to "skip" the charging turn and execute the move in full immediately. For example, Solarbeam returns false in onChargeMove if the weather is sunny, and Power Herb returns false if the Pokemon uses its item successfully. (Actually, those are the only two examples at present.)
This implementation is complete except for one issue, an inversion of a previous problem: whereas before, moves like Assist calling two-turn moves would execute them immediately, now, only the charge turn will be executed, and the Pokemon will not be locked into the move. This is due to be fixed soon.
- teams were passed around a lot more haphazardly before
- a race condition may have caused the team issue in LC earlier
- teams are now passed very carefully from search to battle start
A move cannot "miss" if there is no target, and if the target is immune to an attack, the game always displays the immunity message - the move will never register as "missing".
This fixes a bug where a Pokemon with a type-absorbing ability (e.g. Volt Absorb) behind a Substitute would not absorb status moves (e.g. Thunder Wave) - they'd be blocked by the Substitute before the immunity check was ever run.
There is still a graphical glitch where if a move fails its accuracy check against an immune opponent, the animation will still be that of the move missing, even though the text will be the immunity text. I'm not sure how to fix that given the current move message format.
- the original names BattleItems etc have been deprecated; please use:
- Tools.getItem() accessor method if possible
- Tools.data.Items for lower-level access (e.g. iteration)
- app.js was also rearranged a bit