Gen 3 Random Battle (LIVE!)

Agree with the quick claw and brightpowder. Well, I can see quick claw being ok on slow mons (just spotted a crobat with quick claw). But brightpowder... it sure is useful but it's really frustrating to randomly miss.


The misspelled Hero!
is a Battle Server Moderator
Default items are:
8/10: Leftovers
1/10: Bright Powder
1/10: Quick Claw (Will swap to BP if you have priority moves and this is chosen)

I did this to create a bit more diversity in items because (outside of pokemon specific items like stick and thick club) its choice band, leftovers, lum berry, and pinch berries.

item = 'Leftovers';
        if (template.requiredItems) {
            item = template.requiredItems[this.random(template.requiredItems.length)];

        // First, the extra high-priority items
        } else if (template.species === 'Farfetch\'d') {
            item = 'Stick';
        } else if (template.species === 'Marowak') {
            item = 'Thick Club';
        } else if (template.species === 'Pikachu') {
            item = 'Light Ball';
        } else if (template.species === 'Shedinja') {
            item = 'Lum Berry';
        } else if (template.species === 'Unown') {
            item = moves[0] === 'hiddenpowerfighting' ? 'Choice Band' : 'Twisted Spoon';
        } else if (template.species === 'Wobbuffet') {
            item = ['Leftovers', 'Sitrus Berry'][this.random(2)];
        } else if (hasMove['trick']) {
            item = 'Choice Band';
        } else if (hasMove['bellydrum']) {
            item = 'Sitrus Berry';
        } else if (hasMove['rest'] && !hasMove['sleeptalk'] && ability !== 'Natural Cure' && ability !== 'Shed Skin') {
            item = 'Chesto Berry';

        // Medium priority
        } else if (hasMove['endeavor'] || hasMove['flail'] || hasMove['reversal'] || hasMove['endure']) {
            if (template.baseStats.spe < 108) {
                item = 'Salac Berry';
            } else if (counter.Physical > counter.Special) {
                item = 'Liechi Berry';
            } else {
                item = 'Petaya Berry';
        } else if (counter.Physical >= 4 && !hasMove['bodyslam'] && !hasMove['fakeout'] && !hasMove['rapidspin']) {
            if (template.baseStats.spe < 60 && !counter['priority']) {
                item = 'Liechi Berry';
            } else {
                item = template.baseStats.spe <= 108 && !counter['priority'] && this.random(3) ? 'Salac Berry' : 'Choice Band';
        } else if (counter.Special >= 4 || (counter.Special >= 3 && hasMove['batonpass'])) {
            item = template.baseStats.spe >= 60 && template.baseStats.spe <= 108 && ability !== 'Speed Boost' && !counter['priority'] && this.random(3) ? 'Salac Berry' : 'Petaya Berry';
        } else if (hasMove['outrage'] && counter.setupType) {
            item = 'Lum Berry';
        } else if (hasMove['curse'] || hasMove['detect'] || hasMove['protect'] || hasMove['sleeptalk']) {
            item = 'Leftovers';
        } else if (hasMove['substitute']) {
            item = 'Leftovers';

        // This is the "REALLY can't think of a good item" cutoff
        } else {
            item = this.random(5) ? 'Leftovers' : ['Bright Powder', 'Quick Claw'][this.random(2)];
            if (item === 'Quick Claw' && counter.priority) item = 'Bright Powder';
EDIT: Ill patch it so fast pokemon don't get Q claw, and probably replace BP with lum berry. Voice further concerns below :)
Leftovers is pretty much the only item you see in gen 3 (outside of pinch berries), and for good reason. Nothing wants to give up the passive recovery for the negligible effects most items had at the time. The one exception is Choice Band, which i have never gotten in gen 3 randbats.

Speaking of Choice Band, Slaking should always have it. There is no reason not to have choice band on a Pokemon that only stays in for one turn at a time.
Last edited:


The misspelled Hero!
is a Battle Server Moderator
Bug: Qwilfish, sworddance needs to be corrected to Swords Dance otherwise the move fails. Will check all sets for this issue and patch later tonight.
Please fix redundant type coverage. In consecutive matches I got a Kingdra with Double Edge and Return, a Steelix with HP Steel and Iron Tail, and a Medicham with SubPunch and Reversal. Additionally, the Kingdra also had Dragon Dance and Rain Dance, meaning that there were redundant setup moves.
I won't post more after this, rather I'll just update this post with more minor things I find.

* Parasect gets Frustration yet has max happiness
* Raichu uses Alolan Raichu's Cry (I know that's probably not something you're in charge of, but I think it's worth noting)
* Probably well known, but it's not mentioned in this thread. The scroll-over lists all abilities the Pokemon can have, even from future gens.
* Noctowl can have Insomnia + Rest
* Castform appeared in it's snowy form in the party, immediately transforming into normal Castform when brought in. Didn't have hail as a move. (Edit: I realize now this is how it's supposed to work, but it still seems weird)
* Without Sub or boosting moves, why does Togetic get Focus Punch and Baton Pass? (I understand Baton Pass works with Wish) In fact, why does Togetic run so many Physical moves anyway? There are a bunch of other mons on there (Noctowl, Misdreavus, Sneasel, Butterfree, Masquerain, to name a few) that forgo their stab and use other moves off their better offensive stat.
Last edited:


Cautiously Optimistic
is a Global Moderatoris a Community Contributoris a Tiering Contributoris a Battle Server Moderatoris a Smogon Social Media Contributor Alumnus
LC Co-Leader

Also gtfo with that quick claw/bright powder stuff please. I know it's random battle but that doesn't mean I should have a random chance of missing my attacks or having an omastar of all things one-turn sleep and outspeed me to KO me.
Oh hi, those were some lovely battles huh.

also this

HJK in general probably shouldn't be used since its mostly a worse brick break, but triple fighting moves + endure is just lol


The misspelled Hero!
is a Battle Server Moderator
In response to the above:

BP & Quick Claw: Removing in favor of leftovers
Multiple attacking Moves of the same type (Redundant type coverage): I will block that in the move picking script (barring a few things like return + quick attack since QA is priority)
Misspelled Moves: Patched, waiting for update
Parasect + Frustration: Patched (Frustration -> Return) waiting on update
Multiple moves that set a status (ex: stun + sleep): Will block that
Choice Band: Increased chance to use it
Slaking: Will always get choice band
Shifty: Going to work on this guy, he seems to have alot of issues
Insomnia + rest: will fix
Castform: Strange, ill see what i can do about that
Togetic: Ill check movepool and remove redundant moves (thats what it seems the issue is)

* Raichu uses Alolan Raichu's Cry (I know that's probably not something you're in charge of, but I think it's worth noting)
* Probably well known, but it's not mentioned in this thread. The scroll-over lists all abilities the Pokemon can have, even from future gens.
Not something we handle here, we only handle what movepools, abilities, and items you get on your pokemon in gen3randbats.
Check the last 2-3 pages in the PS bug report thread, and if those arent mentioned there post a report about them Laikue

Thanks for the help guys!
Last edited:
Before I forget, here are some suboptimal sets found in my first 3 battles in this format:
drillpeck-less murkrow
hpgrass + razor leaf meganium
recoverless porygon2
spikesless cloyster
fireblast + heatwave ninetales
solarbeam w/o sunny day exeggutor
Last edited:


Almost the most wonderful time of the year!
is a Battle Server Moderator
Some movepool suggestions
Venusaur +EQ, particularly for physical sets
Muk + HP Ghost, assuming it can be programmed so that Shadow Punch is only an option if HP Ground isn't rolled
Persian -Roar
Machamp + HP Ghost
Dewgong - HP Fire (still can't hit waters neutrally; if it will have an hp how about grass? ice beam takes care of grasses anyway)
-Toxic in Cloyster, its usually the least helpful of its options and special walls tend to be spin/explosion bait
Raticate -Facade + Return + Double-Edge, facade is cool and all but too unreliable
Gyarados -Blizzard

also nightmare should require a sleep move


One Active Dawg
is a Smogon Social Media Contributoris an Artistis a Community Contributor
One set that I noticed was kingdra with dragon dance/return/rain dance/surf. Dragon dance and rain dance probably shouldnt be on the same set.

edit: Weather moves should always have a move that takes advantage of the weather change (ex: fire move/solar beam/ability for sunny day)

Also, you can get castform's forms. They revert to normal when used but they should be normal to begin with
Last edited:


Almost the most wonderful time of the year!
is a Battle Server Moderator
I found a Bug, today I was Playing and a Minun used a Thunderbolt in my Manectrike (Lightning Road) and the hability didn't work.
In Gen3, Lightning Rod only had affect in doubles, as it didn't grant immunity or give the stat raise (only redirecting electric-type moves to the user).

...on that note, on Pokemon with Lightning Rod as well as a more useful ability should probably be restricted to the latter.
This isn't a bug which any how actually affected the game but is a display error, I suppose.

This didn't affect the game because Omastar continued to have it's basic ability (Swift Swim) because it's speed did double in rain.
I could expand on the many suboptimal movesets that I've found but I think the problem is mostly to do with the implementation itself.

If you don't contemplate the option to define mandatory, exclusive, and/or combo moveslots, you really have to cut all the "barely useful" moveslots, because the separate redundancy checks can only do so much. They are useful to make sure that some combinations of almost identical moves don't show up together but they don't help making sure that each Pokemon get the STAB move(s) and/or useful support move(s) that it should always have. They aren't also very useful beyond considering more than two moves at the same time. An example of this is a substitute/focuspunch/bulkup/rockslide Hitmonlee set that I just got. Neither combination of moves is necessarily bad with each other to the point that you can generalize it to all 386 Pokemon, but all 4 moves together are suboptimal. It's the same kind of problems that gen 2 randbats used to have, execpt not as glaring because you've brute forced an insane amount of move redundancy checks.

When I see an object like this:

kingler: {
randomBattleMoves: ["doubleedge", "return", "bodyslam", "hiddenpowerground", "mudshot", "swordsdance", "crabhammer", "knockoff", "toxic", "rest", "sleeptalk", "haze", "surf"],
tier: "NU",

I cannot help but think that it's a recipe for disaster. Kingler should always have a normal and water move, but I can see how that could lead to a set like swordsdance/mudshot/knockoff/toxic or a sub-par rest-talk set very easily. Most of the niche moves should be gotten rid, and aim for 7/8 moves at most:

kingler: {
randomBattleMoves: ["doubleedge", "return", "bodyslam", "hiddenpowerground", "swordsdance", "crabhammer", "surf"],
tier: "NU",

And the redundacy checks should just ensure that the set is always sd/normalMove/waterMove/hpground. They should be simple enough that you're able to picture how they apply correctly to each Pokemon. Granted, these restrictions are not going to be very kind to Pokemon that can adopt multiple roles, but you can't afford to get a mix up of movesets every other time. You can see how the redundancy scripts are already crazy long yet they're far from covering all the issues.

I understand that the gen 2 randbats approach of making detailed movesets to all pokemon is too much work, moreso given that there are more pokemon in adv. But I think that adopting a design like gen 1 randbats would be a great improvement. Just defining a "combo" slot and one or two "exclusive" and/or "mandatory" slot would be enough to get decent results and would hugely get rid of all the unnecessary and hardly maintainable complexity of the redundancy scripts.

absol: {
inherit: true,
randomBattleMoves: ["aerialace", "hiddenpowerfighting"],
essentialMoves: ["swordsdance", "shadowball"],
exclusiveMoves: ["substitute", "taunt", "batonpass", "flamethrower", "thunderwave"],
comboMoves: ["calmmind", "icebeam", "thunderbolt"],
tier: "UU",

Here, you pick all moves in "comboMoves" half the times, then one at random from "exclusiveMoves". Alternatively, the other 50% of the times, you'd skip "comboMoves", add one from "exlusiveMoves" similarly, and since you still have more room, add all possible moves from "essentialMoves" and fill up the moveset with random draws from "randomBattleMoves". It is not 100% perfect but with enough creativity it can be quite versatile, and it's very simple to implement; far more than all the redundancy scripts that need to be expanded everytime a bad moveset is reported. With an implementation like this, I only needed to add around 4-5 very basic redundancy checks in gen 1 randbats. Being careful enough, you can also add the same move multiple times to adjust the final odds by making sure that moves already known are discarded.

If you're not willing to do something like this, at the very least Pokemon should get simple movesets. I've pointed Absol out because the two I've gotten have been absolutely awful. You would probably have to get rid of calmmind special variants for this set.