Metagame [Gen 9] Balanced Createmons

alright since i lost the tour i'm dumping all the (actually serious) teams i built during it and haven't shared here. some of them i brought and some of them i didn't.


1709369872008.png
physical spam HO that tries to exploit as much unaware types as possible.

1709370043505.png
baton pass team that single handedly got imprison banned

1709370162074.png
double PH stall that i brought twice and tied 1st lost 2nd (g2 i was using an iteration but still) cuz anaconja brought defog g1 & infinite pp g2

1709370300471.png
was trying to abuse the sf + eshot interaction and then it got fixed right before the only game i brought this into without me knowing it

1709370472058.png
another double PH stall but i didn't bring this cuz it hardlost to trapping

1709370577134.png
sun that didn't work because of point optimization issues
 
Question: Has the 655 in one stat rolling over thing been removed? (As in making the stat a 0 which basically means you cant take any damage for the defense or special defense stats, I did this here with 249 Def and a defense boosting nature, with 30 hp evs)
Cramorant-Gorging @ Toxic Orb
Ability: Poison Heal
Hidden Power: Normal
Dynamax Level: 999
Tera Type: Normal
EVs: 1 HP / 85 Atk / 249 Def / 1 SpA / 252 SpD / 73 Spe
Impish Nature
IVs: 0 HP / 30 Def
- Pain Split
- Extreme Speed
- Baneful Bunker
- Knock Off
 
Question: Has the 655 in one stat rolling over thing been removed? (As in making the stat a 0 which basically means you cant take any damage for the defense or special defense stats, I did this here with 249 Def and a defense boosting nature, with 30 hp evs)
Cramorant-Gorging @ Toxic Orb
Ability: Poison Heal
Hidden Power: Normal
Dynamax Level: 999
Tera Type: Normal
EVs: 1 HP / 85 Atk / 249 Def / 1 SpA / 252 SpD / 73 Spe
Impish Nature
IVs: 0 HP / 30 Def
- Pain Split
- Extreme Speed
- Baneful Bunker
- Knock Off
Yes, Stat Overflow Mod is present in this meta.
 
Power Trip, Berserk Gene, Octolock, Snow Cloak, Sand Veil, and Moody have been banned! Unburden and Dark have been nerfed! Transistor, Bug, Dragon, Fairy, Fighting, and Psychic have been buffed! No action was taken on Fur Coat/Ice Scales & Magic Guard!
sojukirin
Nihilslave​
rightclicker​
anaconja​
Glimmer​
augustakira​
donkkut​
AppleSockz​
Verdict​
Power Trip​
NERF​
NERF​
BAN​
NERF​
BAN​
NERF​
BAN​
BAN​
BANNED
Berserk Gene​
BAN​
BAN​
BAN​
BAN​
BAN​
BAN​
BAN​
NA​
BANNED
Unburden​
NERF​
NA​
NERF​
NERF​
NERF​
NA​
NERF​
BAN​
NERFED
Octolock​
BAN​
BAN​
BAN​
BAN​
BAN​
BAN​
BAN​
BAN​
BANNED
Dark​
NERF​
NA​
NERF​
NA​
NERF​
NERF​
NERF​
NA​
NERFED
Transistor​
BUFF​
BUFF​
BUFF​
BUFF​
BUFF​
BUFF​
BUFF​
BUFF​
BUFFED
Furscales​
BUFF​
NA​
BUFF​
NA​
BUFF​
BUFF​
NA​
NA​
NA
Magic Guard​
BUFF​
BUFF​
NA​
NA​
BUFF​
BUFF​
NA​
NA​
NA

:wishiwashi:
 
Last edited:

anaconja

long day at job
is a Community Contributoris a Tiering Contributor
i forgot to post my tour teams

WORST STALL ON TEAM (win w1g2, w2g2, semis g4)

quite a solid team, focuses on pressure zacc who can really pp stall a huge amount by trapping and spamming setup and bulwark. deos is a meme set stolen from this one ndbh ladder hero that can actually setup decently with a much better typing and weaker walls running around (it was mmy in ndbh). koraidon is a nasty set taken from onyx onix with infinite pp to beat most other stall mons and win the hazard game. miraidon blanket checks physical walls (dont use freezy frost though it doesnt clear through subs, use like haze instead), unecro is a standard prank with lunar dance to support zacian, and imposter is imposter. i changed deos to a boring unaware body press salt cure mon to beat rightclicker

sf + debris (win w1g1)

toxic debris is really good cause its so cheap. sheer force is really good cause its fairly cheap. the natural response is to combine the two so koraidon can force poisons on walls. this didnt actually happen in the game but its fine

1710654416921.png
(win w2g1)

i enjoyed how celesteela played in ssbh/ndbh8 so i tried it here. i dont remember jrdyop's team but it wasnt very kind to it. managed to eke out a win with diancie/registeel though

Gengar-Gorging (win w3g1, w3g2, w4g2)

moody octolock is insane. trap a wall and just go to town spamming sub and taunt and eventually get enough spa boosts to win. theoretically you should bring an unaware to actually improof it but purgatory used scarf imp so it lost. this is why you dont use scarf imp. also soundproof sub vd zzc is there too

COOKSMAXING (win w4g1)

at this point i started to properly build teams against the people i was playing instead of generic good teams. unaware 252/200 physbulk with body press ensured i was safe against berserk gene spam, melm and grimmsnarl intended to beat stall, with double imp to have better matchups into both. i played against neither but the mons were still decent (besides the grimmsnarl he got owned).

whar (tie semis g1, win semis g3)

rightclicker cteam, double unaware + scarf imp ensures no funny ho business and hitmonlee was supposed to be a goofy polt counter + bp check (before i realized freezy frost sucks). you cannot view the hitmonchan set it will forever be a secret.
first game rightclicker brought stall and i was able to pp stall the only thing limiting imp but then couldnt do anything with imp so we had to tie
third game he brought rain so i kinda just won instantly with delta stream

Arceus-Gyat (loss semis g2)

this is just cooksmaxxing but the previous version. idk why i brought this team

mildcard (win finals g1)

somewhat similar to WORST MON ON TEAM but just tailor made to priospam and stuff since wildcard brought like one main team. worked about as well as expected

the fbi watchlist (win finals g2)

steelworker set is also stolen from the previously mentioned ndbh laddero hero. lop is an experiment with mono sappy seed so you can run taunt and stop haze

other teams i built for finals but didnt use
:clodsire::alomomola::toxapex::talonflame::dondozo::blissey:
:salazzle::arceus-ghost::arceus::blissey::gyarados-mega::zygarde-complete:
:mewtwo::mewtwo-mega-y::mewtwo-mega-x::arceus::groudon-primal::kyogre-primal:
:calyrex-shadow::mewtwo-mega-x::aegislash::ferrothorn::blissey::chansey:

was a fun tournament but im begging Nihilslave to please make it cheaper to have a higher offense as a wall bc i cannot stand using 1 atk on everything
 
Last edited:
Power Trip, Berserk Gene, Octolock, Snow Cloak, Sand Veil, and Moody have been banned! Unburden and Dark have been nerfed! Transistor, Bug, Dragon, Fairy, Fighting, and Psychic have been buffed! No action was taken on Fur Coat/Ice Scales & Magic Guard!
sojukirin
Nihilslave​
rightclicker​
anaconja​
Glimmer​
augustakira​
donkkut​
AppleSockz​
Verdict​
Power Trip​
NERF​
NERF​
BAN​
NERF​
BAN​
NERF​
BAN​
BAN​
BANNED
Berserk Gene​
BAN​
BAN​
BAN​
BAN​
BAN​
BAN​
BAN​
NA​
BANNED
Unburden​
NERF​
NA​
NERF​
NERF​
NERF​
NA​
NERF​
BAN​
NERFED
Octolock​
BAN​
BAN​
BAN​
BAN​
BAN​
BAN​
BAN​
BAN​
BANNED
Dark​
NERF​
NA​
NERF​
NA​
NERF​
NERF​
NERF​
NA​
NERFED
Transistor​
BUFF​
BUFF​
BUFF​
BUFF​
BUFF​
BUFF​
BUFF​
BUFF​
BUFFED
Furscales​
BUFF​
NA​
BUFF​
NA​
BUFF​
BUFF​
NA​
NA​
NA
Magic Guard​
BUFF​
BUFF​
NA​
NA​
BUFF​
BUFF​
NA​
NA​
NA

:wishiwashi:
kick rc off the council for the funny
 
Balanced Createmons - History of Point System

In this post I'll record the history of Balanced Createmons. And as a main porpose you will get to know how Formulas and Points are designed and changed.

Everyone has a dream of creating totally custom Pokemon and use them in battle and same as I. Thus I created the Createmons format in Nov 25, 2022, which is more than one year before it finally becomes a smogon metagame. At that time Gen 9 just started and no one would expect that Gen 9 Balanced Hackmons finally becomes the worst BH metagame. By saying that I want to explain the fact that BC itself isn't played a lot since its birth until Kirin's appearance.

Points System was here at the very beginning. However I had 0 experience of making such a thing so I just made it very subjectively and arbitrarily. The first version of Points System is different from the current one mainly in Stats Point calculation, which is done by BST and Standard Deviation of Base Stats like this:
Python:
# We will use the following denotation by default in all codes:
h, a, b, c, d, s = pokemon.baseHp, pokemon.baseAtk, pokemon.baseDef, pokemon.baseSpA, pokemon.baseSpD, pokemon.baseSpe
BST = h + a + b + c + d + s
SD = StandardDeviationOf(h, a, b, c, d, s)
StatsPoint = max(50, BST - 450) * (SD + 100) / 100
In the above algorithm I tried to restrict min-maxing by adding Deviation to the Formula, with a weight neither too high nor too low to also avoid too much advantage of all-round Base Stats spread. However the linear BST calculation is the flaw that finally ruined the Alpha meta, cuz you could make cheap sets like this:
:silvally: (Set by Fhyr, cost was ~11k)
Silvally @ Loaded Dice
Ability: Technician
Hidden Power: Ice
Tera Type: Ice
EVs: 252 HP / 252 Atk / 252 Def / 252 SpA / 252 SpD / 252 Spe
Adamant Nature
- Bullet Seed
- Icicle Spear
- Bone Rush
- Dragon Dance

Suggestions of making new Base Stats Formula came very soon. Let's move our step to the next stage.
Basically the idea here is "Stats Points should reflect what you really get from Stats". So we have new BST algorithm:
Python:
# Formula designed under the help of Akira
# 2 * a + 100 is very close to the real stat when you set the base stat to `a`
A = (2 * a + 100) * 100 # simulating base `a` Atk Pokemon using 100 BP move
C = (2 * c + 100) * 100
B = (2 * h + 200) * (2 * b + 100) # very close to Pokemon's actual bulk
D = (2 * h + 200) * (2 * d + 100)
S = ((2 * s + 100) - 300) * ((2 * s + 100) - 300)
BST1 = sqrt(A + B + C + D + S)
At that time I also wanted to keep the formula as simple as possible, and min-maxing seemed not to be a big problem, so I simplified "Standard Deviation" to this:
Python:
SD1 = 2 * max(h, a, b, c, d, s) + 100
StatsPoint1 = BST1 * SD1 / 800
Some beautiful results can be achieved by this version of Formula, such as Stats Point of Mew is 200 and Stats Point of Arceus is 252 (we did a bit of rounding in real calc). You might expect me to start complaining about its flaws now but before that we should deal with another big problem, the Types.
From today's point of view, it's hard to imagine that Type Points used to vary from 0.5 to 3 instead of approximately 1 to 2. For example Steel's cost was 6x that of Bug in the early days. Akira spotted this and reappointed all the Types, which is fairly close to the version nowadays.

The elicitation I got from this is that when designing a Point System, we should first have a baseline, and then everything else is determined by muliplying that baseline by a number. This explains well why some very bad Abilities like Slow Start are still of 1 Point instead of 0.5.
As you might figure out yourselves that the simplification of Standard Deviation of course caused some problem, that is the difference of Stats Points are too small for people not to use big Base Stats sets. The Point of all-round base 252 was only 3.8x that of all-round base 100. (Today it's ~6000x btw.) Adding back the old Standard Deviation immediately occurs to many people but let me explain why we are never doing that. A small reason is that Standard Deviation is really a weird outcomer under a Pokemon context. And the main thing is when using a BST algorithm that expresses the quality of Pokemon's Base Stats spread very well I don't feel it reasonable to restrict people from min-maxing. Like, in old days, you could really gain things from min-maxing, cuz your BST could be lowered by that way, which was no longer a thing after the BST Revolution.

After the above monologue we need a new way to punish unreal Base Stats spreads. Akira and I finally worked out the thing called Penalty Point, which is calculated as below:
Python:
# Penalty Points are directly added to the total Point without any multiplification
Penalty(stat) = max(0, (stat - 150) * (stat - 150) * (stat - 150) / 10.61)
PenaltyOfHp = 2 * Penalty(h) # Penalty of HP is doubled
This change was made on Jan 17, 2023 and last tweaked on Mar 24, 2023. Kirin and most people started playing BC from this version (after a very long time though) so I'd call it the Beta version of BC.
Penalty Point didn't solve the core problem. It just turned the meta from all-round 252 spam to all-round 152 spam (because 152 is the max Base Stat without any Penalty Point). After many people joined the format and quickbanned obviously broken things this soon became the biggest problem. Several smart players sent their suggestions of how to change the Formula to the discord server. The idea of weighed average of stats is intereting though, I couldn't see a trivial solution among them. After weeks of waiting I finally decided to use this ugly but working solution on Jan 12, 2024:
Python:
# h,a,b,c,d,s and their upper-case are denoted as above
A_w = max(A, C) * 4 / 5 + min(A, C) * 1 / 5
A_mew = A_w of mew = 30000
B_w = max(B, D) * 2 / 3 + min(B, D) * 1 / 3
B_mew = B_w of mew = 120000
S_w = 2 * s + 100
S_mew = S_w of mew = 300
# Kernal Functions
KernalForAtks(x) = 1.5*x*x*x - 3*x*x + 2.5*x
KernalForDefs(x) = 0.6*x*x*x - 0.2*x + 0.6
KernalForSpe(x) = -1.5*x*x*x*x + 6.5*x*x*x - 7*x*x + 2*x + 1

StatsPoint2 = KernalForAtks(A_w/A_mew) * KernalForDefs(B_w/B_mew) * KernalForSpe(S_w/S_mew) * 200
# Penalty Point is no longer a thing
Finally I gave up the idea of explicitly punishing people for min-maxing or having too high stats. Instead I made a perfect function to really evaluate what people get from their Base Stats spreads. It firstly normalizes a Pokemon's Offense, Defense, and Speed by dividing those of Mew. After processing these normalized values by their respective Kernal Function the results are multiplied altogether to get the final Stats Point. By multiplying in the last step I meant to achieve the effect that no Pokemon can have all of good Offense, good Defense, and good Speed.
After all the above changes the Stats Point Formula is finally very scientific. And we finally can tweak all the Moves Points and Ability Points which were made by me, again, subjectively and arbitrarily, more than 1 year ago. I chose to firstly do this for all attacking Moves, by writing a program to determine the points by rules:
JavaScript:
const moves = Dex.moves.all();
const points: {[k: string]: number} = {};
for (const move of moves) {
    if (move.category === 'Status') continue;
    if (move.isZ || move.isMax) continue;
    if (move.isNonstandard === 'CAP') continue;
    let power = move.basePower;
    const powerx2 = power * 2;
    const powerMapper: {[k: string]: number} = {
        // real power of some moves, emitted here
    };
    if (move.id in powerMapper) power = powerMapper[move.id];
    if (move.ohko) power = 250;
    if (move.multihit) {
        if (['tripleaxel', 'triplekick'].includes(move.id)) power *= 6;
        else if (typeof move.multihit === 'number') power *= move.multihit;
        else power *= 3.1;
    }
    if (move.willCrit) power *= 1.5;
    /**
     * ,60] | (60, 80) | [80, 100] | (100, 120) | [120, 150] | (150,
     *  0   |   0.5    |     1     |    1.5     |     2      |  2.5
     */
    if (power <= 60 && power > 0) points[move.id] = 0;
    else if (power < 80) points[move.id] = 0.5;
    else if (power <= 100) points[move.id] = 1;
    else if (power < 120) points[move.id] = 1.5;
    else if (power <= 150) points[move.id] = 2;
    else points[move.id] = 2.5;
    if ((move.priority > 0 && move.id !== 'bide') || move.id === 'grassyglide') points[move.id] += 0.5;
    if (move.flags.heal) points[move.id] += 0.5;
    if (move.flags.recharge) points[move.id] -= 0.5;
    if (move.ignoreAbility) points[move.id] += 0.5;
    if (move.selfSwitch) points[move.id] += 0.5;
    if (move.volatileStatus === 'partiallytrapped') points[move.id] += 0.5;
    if (move.id === 'triplearrows') points[move.id] += 0.5;
    const secondary = move.secondary;
    if (secondary && secondary.chance && (secondary.chance >= 30 || secondary.status === 'slp')) {
        const isVeryUsefulSecondary = ['acidspray', 'direclaw', 'luminacrash'].includes(move.id) || secondary.status === 'slp';
        const isUsefulSecondary = isVeryUsefulSecondary || secondary.boosts || secondary.self || secondary.status || secondary.volatileStatus;
        if (isVeryUsefulSecondary) points[move.id] += 0.5;
        if (isUsefulSecondary && (power >= 80 && power < 120 || secondary.chance >= 50 || isVeryUsefulSecondary)) points[move.id] += 0.5;
    }
    const self = move.self;
    if (self) {
        const isVeryUsefulSelf = self.sideCondition;
        const isUsefulSelf = isVeryUsefulSelf || self.boosts && Object.values(self.boosts).some(value => value > 0);
        if (isVeryUsefulSelf) points[move.id] += 0.5;
        if (isUsefulSelf && (power >= 80 || isVeryUsefulSelf)) points[move.id] += 0.5;
    }
    const otherVeryUseful = [
        'ceaselessedge', 'endeavor', 'stoneaxe', 'lastrespects', 'naturesmadness', 'powertrip', 'ragefist', 'ruination',
        'sappyseed', 'storedpower', 'superfang',
    ];
    const otherUseful = otherVeryUseful.concat([
        'barbbarrage', 'bodypress', 'buzzybuzz', 'collisioncourse', 'comeuppance', 'coreenforcer', 'counter', 'electrodrift',
        'electroshot', 'infernalparade', 'hex', 'knockoff', 'metalburst', 'mirrorcoat', 'mortalspin',  'psychicnoise',
        'rapidspin', 'saltcure', 'sparklyswirl', 'spectralthief', 'thousandarrows', 'venoshock',
    ]);
    const otherUseless = [
        'belch', 'burnup', 'doubleshock', 'dreameater', 'flail', 'focuspunch', 'freezeshock', 'iceburn',
        'lastresort', 'reversal', 'shelltrap', 'skullbash', 'skyattack', 'sparklingaria', 'steelroller', 'synchronoise',
    ];
    if (otherVeryUseful.includes(move.id)) points[move.id] += 0.5;
    if (otherUseful.includes(move.id)) points[move.id] += 0.5;
    if (otherUseless.includes(move.id)) points[move.id] -= 0.5;
    points[move.id] = Math.max(0.5, points[move.id]);
    points[move.id] = Math.min(2.5, points[move.id]);
}
Beside of that I still need to tweak the Kernal Functions because speed tiers were in a mess and stall turned out to be too strong:
Python:
# These may not look the same as what you see in `/crtm f`
# But they are essentially equivalent
KernalForAtks2(x) = 2.2*x*x*x - 5*x*x + 3.8*x - 0.15
KernalForDefs2(x) = 2.5*x*x*x - 4.5*x*x + 2.5*x + 0.5
KernalForSpe2(x) = -x*x*x*x + 8*x*x*x - 10*x*x + 3*x + 1
The meta looks stable and balanced from my point of view however there are still some possible things to do:
1. Re-Point Status Moves and Abilities, especially Abilities.
2. Ban or nerf potentially broken things.
3. Find a more elegant way to calculate Stats Points than Kernal Functions.

I feel it necessary to show players how meta develops and how decisions are made, by which they can understand the meta more deeply and provide us more high-leveled battles. Feel free to make suggestions.
 
Last edited:

Users Who Are Viewing This Thread (Users: 1, Guests: 0)

Top