Skip to content

Commit de4542d

Browse files
HisuianZoroarkKrisXV
andauthoredMay 2, 2024··
Add Hidden Format and fix aesthetics (#179)
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
1 parent ed213f3 commit de4542d

File tree

5 files changed

+108
-57
lines changed

5 files changed

+108
-57
lines changed
 

‎config/formats.ts

+8-3
Original file line numberDiff line numberDiff line change
@@ -2631,10 +2631,15 @@ export const Formats: FormatList = [
26312631
// https://discordapp.com/channels/630837856075513856/630845310033330206/716126469528485909
26322632
// Requires client change
26332633
// this.add(`raw|<div class='broadcast-green'><b>Wondering what all these custom moves, abilities, and items do?<br />Check out the <a href="https://www.smogon.com/articles/super-staff-bros-4" target="_blank">Super Staff Bros 4 Guide</a> or use /ssb to find out!</b></div>`);
2634+
if (this.ruleTable.has('dynamaxclause')) {
2635+
// Old joke format we're bringing back
2636+
this.add('message', 'Fox only');
2637+
this.add('message', 'No items');
2638+
this.add('message', 'Final Destination');
2639+
return;
2640+
}
26342641

2635-
this.add('message', [
2636-
'THE BATTLE FOR SURVIVAL BEGINS!', 'WHO WILL SURVIVE?', 'GET READY TO KEEP UP!', 'GET READY!', 'DARE TO BELIEVE YOU CAN SURVIVE!', 'THERE CAN BE ONLY ONE WINNER!', 'GET READY FOR THE FIGHT OF YOUR LIFE!', 'WHO WILL PREVAIL?', 'ONLY ONE TEAM WILL BE LEFT STANDING!', 'BATTLE WITHOUT LIMITS!',
2637-
][this.random(10)]);
2642+
this.add('message', 'EVERYONE IS HERE!');
26382643
this.add('message', 'FIGHT!');
26392644
},
26402645
onSwitchInPriority: 100,

‎data/mods/gen9ssb/conditions.ts

+9-7
Original file line numberDiff line numberDiff line change
@@ -956,27 +956,29 @@ export const Conditions: {[k: string]: ModdedConditionData & {innateName?: strin
956956
hizo: {
957957
noCopy: true,
958958
onStart() {
959-
// TODO: Confirm nicks later
960959
let friends;
961-
const tier = this.sample(['pic', 'sketch', 'ggsp']);
960+
const tier = this.sample(['Partners in Crime', 'Sketchmons', 'Godly Power']);
962961
switch (tier) {
963-
case 'pic':
962+
case 'Partners in Crime':
964963
friends = ['chromate', 'yuki', 'YoBuddyTheBaker', 'zoe', 'jasprose'];
965964
break;
966-
case 'sketch':
965+
case 'Sketchmons':
967966
friends = ['Eggs', 'career ended', 'ponchlake'];
968967
break;
969968
default:
970969
friends = ['roonie217', 'chromate', 'tkhanh', 'lilyhii'];
971970
break;
972971
}
973-
this.add(`c:|${getName('HiZo')}|/pm ${this.sample(friends)}, ${tier}?`);
972+
this.add(`c:|${getName('HiZo')}|Why am I needed here, I was in the middle of a game of ${tier} with ${this.sample(friends)}`);
973+
this.add(`c:|${getName('HiZo')}|Did I break something again`);
974974
},
975975
onSwitchOut() {
976-
this.add(`c:|${getName('HiZo')}|maybe later then`);
976+
this.add(`c:|${getName('HiZo')}|This isn't my fault this time I swear`);
977+
this.add(`c:|${getName('HiZo')}|Ok maybe it is but that doesn't mean you should blame me automatically`);
977978
},
978979
onFaint() {
979-
this.add(`c:|${getName('HiZo')}|can i try that matchup again?`);
980+
this.add(`c:|${getName('HiZo')}|What did I do to deserve this`);
981+
this.add(`c:|${getName('HiZo')}|Actually on second thought don't answer that question`);
980982
},
981983
},
982984
hoeenhero: {

‎data/mods/gen9ssb/moves.ts

+75-42
Original file line numberDiff line numberDiff line change
@@ -2264,6 +2264,7 @@ export const Moves: {[k: string]: ModdedMoveData} = {
22642264
this.add('-anim', source, 'Swords Dance', source);
22652265
},
22662266
onHit(target, source) {
2267+
this.add(`c:|${getName((source.illusion || source).name)}|Ok I have a stupid idea, just hear me out`);
22672268
this.add('message', `A sacrifice is needed.`);
22682269
},
22692270
slotCondition: 'scapegoat',
@@ -4162,48 +4163,36 @@ export const Moves: {[k: string]: ModdedMoveData} = {
41624163
const type = this.sample(this.dex.types.names().filter(i => i !== 'Stellar'));
41634164
move.type = type;
41644165
},
4165-
self: {
4166-
slotCondition: 'Luck Pulse',
4167-
},
4168-
condition: {
4169-
duration: 999,
4170-
onStart(pokemon, source) {
4171-
const messages = [
4172-
'Kai Shinden',
4173-
'Kaio Sama',
4174-
'Kaiba, Seto',
4175-
'Kairyu-Shin',
4176-
'Kaito Shizuki',
4177-
'Kanga Skhan',
4178-
'KanSas',
4179-
'Karakuri Shogun',
4180-
'Kartana Swords dance',
4181-
'Kate Stewart',
4182-
'Kendo Spirit',
4183-
'Keratan Sulfate',
4184-
'Kernel Streaming',
4185-
'Key Stage',
4186-
'Kids Suck',
4187-
'KillSteal',
4188-
'Kilometers / Second',
4189-
'KiloSecond',
4190-
'King of the Swamp',
4191-
'King\'s Shield',
4192-
'Kirk/Spock',
4193-
'Klingon Security',
4194-
'Kpop Star',
4195-
'Kuroudo (Cloud) Strife',
4196-
'Kyouko Sakura',
4197-
'KyrgyzStan',
4198-
];
4199-
this.effectState.ksName = this.sample(messages);
4200-
this.add(`c:|${getName('Pulse_kS')}|The kS stands for ${this.effectState.ksName}`);
4201-
},
4202-
onTryHit(source, target, move) {
4203-
if (source.species.baseSpecies === 'Hydreigon' && move.name === 'Luck Pulse') {
4204-
this.add(`c:|${getName('Pulse_kS')}|The kS stands for ${this.effectState.ksName}`);
4205-
}
4206-
},
4166+
onTryHit(target, source, move) {
4167+
const messages = [
4168+
'Kai Shinden',
4169+
'Kaio Sama',
4170+
'Kaiba, Seto',
4171+
'Kairyu-Shin',
4172+
'Kaito Shizuki',
4173+
'Kanga Skhan',
4174+
'KanSas',
4175+
'Karakuri Shogun',
4176+
'Kate Stewart',
4177+
'Kendo Spirit',
4178+
'Keratan sulfate',
4179+
'Kernel streaming',
4180+
'Key Stage',
4181+
'Kids Suck',
4182+
'KillSteal',
4183+
'Kilometers / Second',
4184+
'Kilosecond',
4185+
'King of the Swamp',
4186+
'King\'s Shield',
4187+
'Kirk/Spock',
4188+
'Klingon Security',
4189+
'Kuroudo (Cloud) Strife',
4190+
'Kyouko Sakura',
4191+
'KyrgyzStan',
4192+
'Kpop Star',
4193+
'Kartana Swords dance',
4194+
];
4195+
this.add(`c:|${getName((source.illusion || source).name)}|The kS stands for ${this.sample(messages)}`);
42074196
},
42084197
secondary: {
42094198
chance: 40,
@@ -6632,4 +6621,48 @@ export const Moves: {[k: string]: ModdedMoveData} = {
66326621
},
66336622
},
66346623
},
6624+
6625+
// Try playing Staff Bros with dynamax clause and see what happens
6626+
supermetronome: {
6627+
accuracy: true,
6628+
basePower: 0,
6629+
category: "Status",
6630+
desc: "Uses 2-5 random moves. Does not include 1-Base Power Z-Moves, Super Metronome, Metronome, or 10-Base Power Max moves.",
6631+
shortDesc: "Uses 2-5 random moves.",
6632+
name: "Super Metronome",
6633+
isNonstandard: "Custom",
6634+
pp: 100,
6635+
noPPBoosts: true,
6636+
priority: 0,
6637+
flags: {},
6638+
onTryMove(pokemon) {
6639+
this.attrLastMove('[still]');
6640+
},
6641+
onPrepareHit(target, source) {
6642+
this.add('-anim', source, "Metronome", source);
6643+
},
6644+
onHit(target, source, effect) {
6645+
const moves = [];
6646+
for (const move of this.dex.moves.all()) {
6647+
if (move.realMove || move.id.includes('metronome')) continue;
6648+
// Calling 1 BP move is somewhat lame and disappointing. However,
6649+
// signature Z moves are fine, as they actually have a base power.
6650+
if (move.isZ && move.basePower === 1) continue;
6651+
if (move.gen > this.gen) continue;
6652+
if (move.isMax) continue;
6653+
moves.push(move.name);
6654+
}
6655+
let randomMove: string;
6656+
if (moves.length) {
6657+
randomMove = this.sample(moves);
6658+
} else {
6659+
return false;
6660+
}
6661+
this.actions.useMove(randomMove, target);
6662+
},
6663+
multihit: [2, 5],
6664+
secondary: null,
6665+
target: "self",
6666+
type: "???",
6667+
},
66356668
};

‎data/mods/gen9ssb/random-teams.ts

+14-5
Original file line numberDiff line numberDiff line change
@@ -712,7 +712,7 @@ export const ssbSets: SSBSets = {
712712
Pulse_kS: {
713713
species: 'Hydreigon', ability: 'Pulse Luck', item: 'Quick Claw', gender: 'N',
714714
moves: ['Dark Pulse', 'Dragon Pulse', 'Origin Pulse'],
715-
signatureMove: 'Lucky Pulse',
715+
signatureMove: 'Luck Pulse',
716716
evs: {hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85}, nature: 'Serious', teraType: ['Steel', 'Poison'],
717717
},
718718
PYRO: {
@@ -1029,17 +1029,26 @@ export const ssbSets: SSBSets = {
10291029
},
10301030
};
10311031

1032+
const afdSSBSets: SSBSets = {
1033+
'Fox': {
1034+
species: 'Fennekin', ability: 'No Ability', item: '', gender: '',
1035+
moves: [],
1036+
signatureMove: 'Super Metronome',
1037+
},
1038+
};
1039+
10321040
export class RandomStaffBrosTeams extends RandomTeams {
10331041
randomStaffBrosTeam(options: {inBattle?: boolean} = {}) {
10341042
this.enforceNoDirectCustomBanlistChanges();
10351043

10361044
const team: PokemonSet[] = [];
10371045
const debug: string[] = []; // Set this to a list of SSB sets to override the normal pool for debugging.
10381046
const ruleTable = this.dex.formats.getRuleTable(this.format);
1047+
const memeformat = ruleTable.has('dynamaxclause');
10391048
const monotype = ruleTable.has('sametypeclause') ?
10401049
this.sample([...this.dex.types.names().filter(x => x !== 'Stellar')]) : false;
10411050

1042-
let pool = Object.keys(ssbSets);
1051+
let pool = debug.length ? debug : memeformat ? Object.keys(afdSSBSets) : Object.keys(ssbSets);
10431052
if (debug.length) {
10441053
while (debug.length < 6) {
10451054
const staff = this.sampleNoReplace(pool);
@@ -1056,12 +1065,12 @@ export class RandomStaffBrosTeams extends RandomTeams {
10561065
while (pool.length && team.length < this.maxTeamSize) {
10571066
if (depth >= 200) throw new Error(`Infinite loop in Super Staff Bros team generation.`);
10581067
depth++;
1059-
const name = this.sampleNoReplace(pool);
1060-
const ssbSet: SSBSet = this.dex.deepClone(ssbSets[name]);
1068+
const name = memeformat ? this.sample(pool) : this.sampleNoReplace(pool);
1069+
const ssbSet: SSBSet = memeformat ? this.dex.deepClone(afdSSBSets[name]) : this.dex.deepClone(ssbSets[name]);
10611070
if (ssbSet.skip) continue;
10621071

10631072
// Enforce typing limits
1064-
if (!(debug.length || monotype)) { // Type limits are ignored for debugging, monotype, or memes.
1073+
if (!(debug.length || monotype || memeformat)) { // Type limits are ignored for debugging, monotype, or memes.
10651074
const species = this.dex.species.get(ssbSet.species);
10661075
if (this.forceMonotype && !species.types.includes(this.forceMonotype)) continue;
10671076

‎data/mods/gen9ssb/scripts.ts

+2
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,8 @@ export const Scripts: ModdedBattleScriptsData = {
385385
this.boost({atk: 1, spa: 1, spe: 1}, action.pokemon, action.pokemon, this.dex.moves.get('scapegoat'));
386386
}
387387
// @ts-ignore
388+
this.add(`c:|${getName((action.pokemon.illusion || action.pokemon).name)}|Don't worry, if this plan fails we can just blame ${action.target.name}`);
389+
// @ts-ignore
388390
action.pokemon.side.removeSlotCondition(action.pokemon, 'scapegoat');
389391
break;
390392
case 'runUnnerve':

0 commit comments

Comments
 (0)
Please sign in to comment.