Adding Gen 3 Hoenn Stadium format (#11797)

* Adding gen 3 colosseum format, updating win check

* Update formats.ts

* Adding Gen 3 Hoenn Stadium format

* They want open team sheets on the format

* Fixing selfKO clause code for the gen3colosseum mod.
- Perish song only cares if the user is the last mon, we had that wrong.
- Corrected the game resolution code to properly calculate winners/draws (Has been tested on a dev server)

* forgot Destiny bond

* Cleaning up ban and unban lists for hoenn stadium

* Deoxys is not nonstandard

---------

Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
This commit is contained in:
EvGym 2026-03-13 20:32:36 -05:00 committed by GitHub
parent 2742d9dd47
commit 3b326cfa83
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 47 additions and 25 deletions

View File

@ -5280,6 +5280,28 @@ export const Formats: import('../sim/dex-formats').FormatList = [
this.add('rule', 'Self-KO Clause: If your last Pok\u00e9mon faints to a self-KO move or effect, you will lose the battle');
},
},
{
name: "[Gen 3] Hoenn Stadium",
threads: [
`&bullet; <a href="https://www.smogon.com/forums/threads/3687813/">ADV Sample Teams</a>`,
`&bullet; <a href="https://www.smogon.com/forums/threads/orre-colosseum-now-playable.3698894/"> Orre Colosseum</a>`,
`&bullet; <a href-"https://discord.gg/cSZE6MZX5Q">Join the discord server</a>`,
],
mod: 'gen3colosseum',
searchShow: false,
gameType: 'singles',
ruleset: [
'Obtainable', 'Team Preview', 'Species Clause', 'Stadium Sleep Clause', 'Freeze Clause Mod', 'Max Team Size = 6', 'VGC Timer',
'Nickname Clause', 'Endless Battle Clause', 'Cancel Mod', 'Picked Team Size = 3', 'Exact HP Mod', "Item Clause = 1", 'Open Team Sheets',
],
banlist: ['Soul Dew', 'Restricted Legendary', 'Mythical', 'Wobbuffet + Leftovers', 'Wynaut + Leftovers'],
restricted: [],
bestOfDefault: true,
onBegin() {
this.add('rule', 'Self-KO Clause: If your last Pok\u00e9mon faints to a self-KO move or effect you will lose the battle');
},
},
{
name: "[Gen 3] Custom Game",
mod: 'gen3',

View File

@ -5,30 +5,20 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
perishsong: {
inherit: true,
onTryMove(attacker, defender, move) {
let immuneMon = false;
for (const mon of attacker.side.active) {
if (this.runEvent('Immunity', mon, attacker, move)) {
immuneMon = true;
}
if (attacker.side.pokemonLeft === 1) {
this.add('-fail', attacker, 'move: Perish Song');
this.hint("Self KO Clause: The last pokemon on a team cannot use moves that force fainting");
return false;
}
for (const mon of attacker.side.foe.active) {
if (this.runEvent('Immunity', mon, attacker, move)) {
immuneMon = true;
}
}
if (immuneMon) return;
if (this.format.gameType === 'singles') {
if (attacker.side.pokemonLeft === 1 && attacker.side.foe.pokemonLeft === 1) {
return false;
}
} else if (this.format.gameType === 'doubles') {
if (attacker.side.pokemonLeft === 2 && attacker.side.foe.pokemonLeft === 2) {
return false;
}
},
},
destinybond: {
inherit: true,
onTryMove(attacker, defender, move) {
if (attacker.side.pokemonLeft === 1) {
this.add('-fail', attacker, 'move: Perish Song');
this.hint("Self KO Clause: The last pokemon on a team cannot use moves that force fainting");
return false;
}
},
},

View File

@ -4,8 +4,18 @@ export const Scripts: ModdedBattleScriptsData = {
checkWin(faintData?: Battle['faintQueue'][0]) {
if (this.sides.every(side => !side.pokemonLeft)) {
this.win(faintData ? faintData.target.side : null);
return true;
let isSelfKo = false;
if (faintData?.effect) {
isSelfKo = isSelfKo || this.dex.moves.getByID(faintData?.effect?.id).selfdestruct !== undefined;
isSelfKo = isSelfKo || this.dex.moves.getByID(faintData?.effect?.id).recoil !== undefined;
}
if (isSelfKo) {
this.win(faintData ? faintData.target.side : null);
return true;
} else {
this.win(undefined);
return true;
}
}
for (const side of this.sides) {
if (!side.foePokemonLeft()) {