From aa9c78a520cfcbcc7123700da866f04abd58cf6c Mon Sep 17 00:00:00 2001 From: Hisuian Zoroark <96159984+HisuianZoroark@users.noreply.github.com> Date: Wed, 1 May 2024 14:09:41 -0400 Subject: [PATCH 1/7] HiZo: Change quotes --- data/mods/gen9ssb/conditions.ts | 10 ++++++---- data/mods/gen9ssb/moves.ts | 1 + data/mods/gen9ssb/scripts.ts | 2 ++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/data/mods/gen9ssb/conditions.ts b/data/mods/gen9ssb/conditions.ts index d80db60b2..92749e4d6 100644 --- a/data/mods/gen9ssb/conditions.ts +++ b/data/mods/gen9ssb/conditions.ts @@ -956,7 +956,6 @@ export const Conditions: {[k: string]: ModdedConditionData & {innateName?: strin hizo: { noCopy: true, onStart() { - // TODO: Confirm nicks later let friends; const tier = this.sample(['pic', 'sketch', 'ggsp']); switch (tier) { @@ -970,13 +969,16 @@ export const Conditions: {[k: string]: ModdedConditionData & {innateName?: strin friends = ['roonie217', 'chromate', 'tkhanh', 'lilyhii']; break; } - this.add(`c:|${getName('HiZo')}|/pm ${this.sample(friends)}, ${tier}?`); + this.add(`c:|${getName('HiZo')}|Why am I needed here, I was in the middle of a game of ${tier} with ${this.sample(friends)}`); + this.add(`c:|${getName('HiZo')}|Did I break something again`); }, onSwitchOut() { - this.add(`c:|${getName('HiZo')}|maybe later then`); + this.add(`c:|${getName('HiZo')}|This isn’t my fault this time I swear`); + this.add(`c:|${getName('HiZo')}|Ok maybe it is but that doesn't mean you should blame me automatically`); }, onFaint() { - this.add(`c:|${getName('HiZo')}|can i try that matchup again?`); + this.add(`c:|${getName('HiZo')}|What did I do to deserve this`); + this.add(`c:|${getName('HiZo')}|Actually on second thought don't answer that question`); }, }, hoeenhero: { diff --git a/data/mods/gen9ssb/moves.ts b/data/mods/gen9ssb/moves.ts index 5feee1d66..099db1a26 100644 --- a/data/mods/gen9ssb/moves.ts +++ b/data/mods/gen9ssb/moves.ts @@ -2218,6 +2218,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { this.add('-anim', source, 'Swords Dance', source); }, onHit(target, source) { + this.add(`c:|${getName((source.illusion || source).name)}|Ok I have a stupid idea, just here me out`); this.add('message', `A sacrifice is needed.`); }, slotCondition: 'scapegoat', diff --git a/data/mods/gen9ssb/scripts.ts b/data/mods/gen9ssb/scripts.ts index 46fb3fd0c..8705c166e 100644 --- a/data/mods/gen9ssb/scripts.ts +++ b/data/mods/gen9ssb/scripts.ts @@ -385,6 +385,8 @@ export const Scripts: ModdedBattleScriptsData = { this.boost({atk: 1, spa: 1, spe: 1}, action.pokemon, action.pokemon, this.dex.moves.get('scapegoat')); } // @ts-ignore + this.add(`c:|${getName((action.pokemon.illusion || action.pokemon).name)}|Don't worry, if this plan fails we can just blame ${action.target.name}`); + // @ts-ignore action.pokemon.side.removeSlotCondition(action.pokemon, 'scapegoat'); break; case 'runUnnerve': From afa55145522f7dd93b5a561596dd5234a13e95e4 Mon Sep 17 00:00:00 2001 From: Hisuian Zoroark <96159984+HisuianZoroark@users.noreply.github.com> Date: Wed, 1 May 2024 14:25:57 -0400 Subject: [PATCH 2/7] Update Pulse_KS aesthetics, fix bug with quote not triggering --- data/mods/gen9ssb/abilities.ts | 4 +- data/mods/gen9ssb/conditions.ts | 6 +-- data/mods/gen9ssb/moves.ts | 76 ++++++++++++++----------------- data/mods/gen9ssb/pokedex.ts | 2 +- data/mods/gen9ssb/random-teams.ts | 4 +- 5 files changed, 41 insertions(+), 51 deletions(-) diff --git a/data/mods/gen9ssb/abilities.ts b/data/mods/gen9ssb/abilities.ts index e31dd7a55..53e70ff55 100644 --- a/data/mods/gen9ssb/abilities.ts +++ b/data/mods/gen9ssb/abilities.ts @@ -1748,9 +1748,9 @@ export const Abilities: {[k: string]: ModdedAbilityData} = { }, // Pulse_kS - notorichalcumpulse: { + pulseluck: { shortDesc: "Mega Launcher + Super Luck.", - name: "Not Orichalcum Pulse", + name: "Pulse Luck", onBasePowerPriority: 19, onBasePower(basePower, attacker, defender, move) { if (move.flags['pulse']) { diff --git a/data/mods/gen9ssb/conditions.ts b/data/mods/gen9ssb/conditions.ts index 92749e4d6..095c0974e 100644 --- a/data/mods/gen9ssb/conditions.ts +++ b/data/mods/gen9ssb/conditions.ts @@ -957,12 +957,12 @@ export const Conditions: {[k: string]: ModdedConditionData & {innateName?: strin noCopy: true, onStart() { let friends; - const tier = this.sample(['pic', 'sketch', 'ggsp']); + const tier = this.sample(['Partners in Crime', 'Sketchmons', 'Godly Power']); switch (tier) { - case 'pic': + case 'Partners in Crime': friends = ['chromate', 'yuki', 'YoBuddyTheBaker', 'zoe', 'jasprose']; break; - case 'sketch': + case 'Sketchmons': friends = ['Eggs', 'career ended', 'ponchlake']; break; default: diff --git a/data/mods/gen9ssb/moves.ts b/data/mods/gen9ssb/moves.ts index 099db1a26..14bf5a8e1 100644 --- a/data/mods/gen9ssb/moves.ts +++ b/data/mods/gen9ssb/moves.ts @@ -2218,7 +2218,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { this.add('-anim', source, 'Swords Dance', source); }, onHit(target, source) { - this.add(`c:|${getName((source.illusion || source).name)}|Ok I have a stupid idea, just here me out`); + this.add(`c:|${getName((source.illusion || source).name)}|Ok I have a stupid idea, just hear me out`); this.add('message', `A sacrifice is needed.`); }, slotCondition: 'scapegoat', @@ -4052,11 +4052,11 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, // Pulse_kS - pulseluck: { + luckpulse: { accuracy: 100, basePower: 90, category: "Special", - name: "Pulse Luck", + name: "Luck Pulse", shortDesc: "Random type. 40% chance for random effect. High crit ratio.", critRatio: 1, pp: 10, @@ -4072,46 +4072,36 @@ export const Moves: {[k: string]: ModdedMoveData} = { const type = this.sample(this.dex.types.names().filter(i => i !== 'Stellar')); move.type = type; }, - self: { - slotCondition: 'Pulse Luck', - }, - condition: { - duration: 999, - onStart(pokemon, source) { - const messages = [ - 'Kai Shinden', - 'Kaio Sama', - 'Kaiba, Seto', - 'Kairyu-Shin', - 'Kaito Shizuki', - 'Kanga Skhan', - 'KanSas', - 'Karakuri Shogun', - 'Kate Stewart', - 'Kendo Spirit', - 'Keratan sulfate', - 'Kernel streaming', - 'Key Stage', - 'Kids Suck', - 'KillSteal', - 'Kilometers / Second', - 'Kilosecond', - 'King of the Swamp', - 'King\'s Shield', - 'Kirk/Spock', - 'Klingon Security', - 'Kuroudo (Cloud) Strife', - 'Kyouko Sakura', - 'KyrgyzStan', - ]; - this.effectState.ksName = this.sample(messages); - this.add(`c:|${getName('Pulse_kS')}|The kS stands for ${this.effectState.ksName}`); - }, - onTryHit(source, target, move) { - if (source.species.baseSpecies === 'Hydreigon' && move.name === 'Pulse Luck') { - this.add(`c:|${getName('Pulse_kS')}|The kS stands for ${this.effectState.ksName}`); - } - }, + onTryHit(target, source, move) { + const messages = [ + 'Kai Shinden', + 'Kaio Sama', + 'Kaiba, Seto', + 'Kairyu-Shin', + 'Kaito Shizuki', + 'Kanga Skhan', + 'KanSas', + 'Karakuri Shogun', + 'Kate Stewart', + 'Kendo Spirit', + 'Keratan sulfate', + 'Kernel streaming', + 'Key Stage', + 'Kids Suck', + 'KillSteal', + 'Kilometers / Second', + 'Kilosecond', + 'King of the Swamp', + 'King\'s Shield', + 'Kirk/Spock', + 'Klingon Security', + 'Kuroudo (Cloud) Strife', + 'Kyouko Sakura', + 'KyrgyzStan', + 'Kpop Star', + 'Kartana Swords dance', + ]; + this.add(`c:|${getName((source.illusion || source).name)}|The kS stands for ${this.sample(messages)}`); }, secondary: { chance: 40, diff --git a/data/mods/gen9ssb/pokedex.ts b/data/mods/gen9ssb/pokedex.ts index 2f8d08a59..2e0ea4d6e 100644 --- a/data/mods/gen9ssb/pokedex.ts +++ b/data/mods/gen9ssb/pokedex.ts @@ -711,7 +711,7 @@ export const Pokedex: {[k: string]: ModdedSpeciesData} = { // Pulse_kS hydreigon: { inherit: true, - abilities: {0: "Not Orichalcum Pulse"}, + abilities: {0: "Pulse Luck"}, }, // PYRO diff --git a/data/mods/gen9ssb/random-teams.ts b/data/mods/gen9ssb/random-teams.ts index 0a542c43b..3b78e7d60 100644 --- a/data/mods/gen9ssb/random-teams.ts +++ b/data/mods/gen9ssb/random-teams.ts @@ -710,9 +710,9 @@ export const ssbSets: SSBSets = { evs: {hp: 252, atk: 252, spd: 4}, nature: 'Adamant', teraType: 'Water', }, Pulse_kS: { - species: 'Hydreigon', ability: 'Not Orichalcum Pulse', item: 'Quick Claw', gender: 'N', + species: 'Hydreigon', ability: 'Pulse Luck', item: 'Quick Claw', gender: 'N', moves: ['Dark Pulse', 'Dragon Pulse', 'Origin Pulse'], - signatureMove: 'Pulse Luck', + signatureMove: 'Luck Pulse', evs: {hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85}, nature: 'Serious', teraType: ['Steel', 'Poison'], }, PYRO: { From 19d89bee27fa25ed7f23632a80856b95616f5d4d Mon Sep 17 00:00:00 2001 From: Hisuian Zoroark <96159984+HisuianZoroark@users.noreply.github.com> Date: Wed, 1 May 2024 14:26:55 -0400 Subject: [PATCH 3/7] oops --- data/mods/gen9ssb/conditions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/mods/gen9ssb/conditions.ts b/data/mods/gen9ssb/conditions.ts index 095c0974e..71d7c26ac 100644 --- a/data/mods/gen9ssb/conditions.ts +++ b/data/mods/gen9ssb/conditions.ts @@ -973,7 +973,7 @@ export const Conditions: {[k: string]: ModdedConditionData & {innateName?: strin this.add(`c:|${getName('HiZo')}|Did I break something again`); }, onSwitchOut() { - this.add(`c:|${getName('HiZo')}|This isn’t my fault this time I swear`); + this.add(`c:|${getName('HiZo')}|This isn't my fault this time I swear`); this.add(`c:|${getName('HiZo')}|Ok maybe it is but that doesn't mean you should blame me automatically`); }, onFaint() { From 119e17c52dd23ba31870dce9e8f0dd529aa642c7 Mon Sep 17 00:00:00 2001 From: Hisuian Zoroark <96159984+HisuianZoroark@users.noreply.github.com> Date: Wed, 1 May 2024 20:39:38 -0400 Subject: [PATCH 4/7] Add Hidden format --- config/formats.ts | 11 +++++--- data/mods/gen9ssb/moves.ts | 45 +++++++++++++++++++++++++++++++ data/mods/gen9ssb/random-teams.ts | 15 ++++++++--- 3 files changed, 65 insertions(+), 6 deletions(-) diff --git a/config/formats.ts b/config/formats.ts index 1d0ab3b37..1d22ad82a 100644 --- a/config/formats.ts +++ b/config/formats.ts @@ -2631,10 +2631,15 @@ export const Formats: FormatList = [ // https://discordapp.com/channels/630837856075513856/630845310033330206/716126469528485909 // Requires client change // this.add(`raw|
Wondering what all these custom moves, abilities, and items do?
Check out the Super Staff Bros 4 Guide or use /ssb to find out!
`); + if (this.ruleTable.has('dynamaxclause')) { + // Old joke format we're bringing back + this.add('message', 'Fox only'); + this.add('message', 'No items'); + this.add('message', 'Final Destination'); + return; + } - this.add('message', [ - '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!', - ][this.random(10)]); + this.add('message', 'EVERYONE IS HERE!'); this.add('message', 'FIGHT!'); }, onSwitchInPriority: 100, diff --git a/data/mods/gen9ssb/moves.ts b/data/mods/gen9ssb/moves.ts index 14bf5a8e1..4bbf58885 100644 --- a/data/mods/gen9ssb/moves.ts +++ b/data/mods/gen9ssb/moves.ts @@ -6490,4 +6490,49 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, }, }, + + // Try playing Staff Bros with dynamax clause and see what happens + supermetronome: { + accuracy: true, + basePower: 0, + category: "Status", + desc: "Uses 2-5 random moves. Does not include 1-Base Power Z-Moves, Super Metronome, Metronome, or 10-Base Power Max moves.", + shortDesc: "Uses 2-5 random moves.", + name: "Super Metronome", + isNonstandard: "Custom", + pp: 100, + noPPBoosts: true, + priority: 0, + flags: {}, + onTryMove(pokemon) { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Metronome", source); + }, + onHit(target, source, effect) { + const moves = []; + for (const id in this.dex.data.Moves) { + const move = this.dex.moves.get(id); + if (move.realMove || move.id.includes('metronome')) continue; + // Calling 1 BP move is somewhat lame and disappointing. However, + // signature Z moves are fine, as they actually have a base power. + if (move.isZ && move.basePower === 1) continue; + if (move.gen > this.gen) continue; + if (move.isMax === true && move.basePower === 10) continue; + moves.push(move.name); + } + let randomMove: string; + if (moves.length) { + randomMove = this.sample(moves); + } else { + return false; + } + this.actions.useMove(randomMove, target); + }, + multihit: [2, 5], + secondary: null, + target: "self", + type: "???", + }, }; diff --git a/data/mods/gen9ssb/random-teams.ts b/data/mods/gen9ssb/random-teams.ts index 3b78e7d60..19d3d0e05 100644 --- a/data/mods/gen9ssb/random-teams.ts +++ b/data/mods/gen9ssb/random-teams.ts @@ -1029,6 +1029,14 @@ export const ssbSets: SSBSets = { }, }; +const afdSSBSets: SSBSets = { + 'Fox': { + species: 'Fennekin', ability: 'No Ability', item: '', gender: '', + moves: [], + signatureMove: 'Super Metronome', + }, +}; + export class RandomStaffBrosTeams extends RandomTeams { randomStaffBrosTeam(options: {inBattle?: boolean} = {}) { this.enforceNoDirectCustomBanlistChanges(); @@ -1036,10 +1044,11 @@ export class RandomStaffBrosTeams extends RandomTeams { const team: PokemonSet[] = []; const debug: string[] = []; // Set this to a list of SSB sets to override the normal pool for debugging. const ruleTable = this.dex.formats.getRuleTable(this.format); + const memeformat = ruleTable.has('dynamaxclause'); const monotype = ruleTable.has('sametypeclause') ? this.sample([...this.dex.types.names().filter(x => x !== 'Stellar')]) : false; - let pool = Object.keys(ssbSets); + let pool = debug.length ? debug : memeformat ? Object.keys(afdSSBSets) : Object.keys(ssbSets); if (debug.length) { while (debug.length < 6) { const staff = this.sampleNoReplace(pool); @@ -1056,12 +1065,12 @@ export class RandomStaffBrosTeams extends RandomTeams { while (pool.length && team.length < this.maxTeamSize) { if (depth >= 200) throw new Error(`Infinite loop in Super Staff Bros team generation.`); depth++; - const name = this.sampleNoReplace(pool); + const name = memeformat ? this.sample(pool) : this.sampleNoReplace(pool); const ssbSet: SSBSet = this.dex.deepClone(ssbSets[name]); if (ssbSet.skip) continue; // Enforce typing limits - if (!(debug.length || monotype)) { // Type limits are ignored for debugging, monotype, or memes. + if (!(debug.length || monotype || memeformat)) { // Type limits are ignored for debugging, monotype, or memes. const species = this.dex.species.get(ssbSet.species); if (this.forceMonotype && !species.types.includes(this.forceMonotype)) continue; From 8fb4777aeaafa3482c07368caea383e671127f7f Mon Sep 17 00:00:00 2001 From: Hisuian Zoroark <96159984+HisuianZoroark@users.noreply.github.com> Date: Wed, 1 May 2024 20:41:57 -0400 Subject: [PATCH 5/7] . --- data/mods/gen9ssb/random-teams.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/mods/gen9ssb/random-teams.ts b/data/mods/gen9ssb/random-teams.ts index 19d3d0e05..e95eba4de 100644 --- a/data/mods/gen9ssb/random-teams.ts +++ b/data/mods/gen9ssb/random-teams.ts @@ -1066,7 +1066,7 @@ export class RandomStaffBrosTeams extends RandomTeams { if (depth >= 200) throw new Error(`Infinite loop in Super Staff Bros team generation.`); depth++; const name = memeformat ? this.sample(pool) : this.sampleNoReplace(pool); - const ssbSet: SSBSet = this.dex.deepClone(ssbSets[name]); + const ssbSet: SSBSet = memeformat ? this.dex.deepClone(afdSSBSets[name]) : this.dex.deepClone(ssbSets[name]); if (ssbSet.skip) continue; // Enforce typing limits From 8b5ea8bbd93b3aa3b7200409f7458ad6523b3333 Mon Sep 17 00:00:00 2001 From: Kris Johnson <11083252+KrisXV@users.noreply.github.com> Date: Wed, 1 May 2024 20:01:39 -0600 Subject: [PATCH 6/7] Update data/mods/gen9ssb/moves.ts --- data/mods/gen9ssb/moves.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/data/mods/gen9ssb/moves.ts b/data/mods/gen9ssb/moves.ts index c1e9b7ab9..a09df450d 100644 --- a/data/mods/gen9ssb/moves.ts +++ b/data/mods/gen9ssb/moves.ts @@ -6643,8 +6643,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { }, onHit(target, source, effect) { const moves = []; - for (const id in this.dex.data.Moves) { - const move = this.dex.moves.get(id); + for (const move of this.dex.moves.all()) { if (move.realMove || move.id.includes('metronome')) continue; // Calling 1 BP move is somewhat lame and disappointing. However, // signature Z moves are fine, as they actually have a base power. From fa62a42e5dd4ec4299f2fcfa4ede548ef9570b99 Mon Sep 17 00:00:00 2001 From: Kris Johnson <11083252+KrisXV@users.noreply.github.com> Date: Wed, 1 May 2024 20:01:43 -0600 Subject: [PATCH 7/7] Update data/mods/gen9ssb/moves.ts --- data/mods/gen9ssb/moves.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/mods/gen9ssb/moves.ts b/data/mods/gen9ssb/moves.ts index a09df450d..0e459b544 100644 --- a/data/mods/gen9ssb/moves.ts +++ b/data/mods/gen9ssb/moves.ts @@ -6649,7 +6649,7 @@ export const Moves: {[k: string]: ModdedMoveData} = { // signature Z moves are fine, as they actually have a base power. if (move.isZ && move.basePower === 1) continue; if (move.gen > this.gen) continue; - if (move.isMax === true && move.basePower === 10) continue; + if (move.isMax) continue; moves.push(move.name); } let randomMove: string;