From 0e9e3d86f6d9bcb480c8e04faabc2e0b6fe42d80 Mon Sep 17 00:00:00 2001
From: shrianshChari <30420527+shrianshChari@users.noreply.github.com>
Date: Thu, 25 Jul 2024 15:55:44 -0700
Subject: [PATCH] Randbats: Support Doubles and Baby (#632)
---
.eslintrc | 2 +
src/js/shared_controls.js | 91 ++++++++++++++++++++++++++++++++-------
src/randoms.template.html | 2 +
3 files changed, 80 insertions(+), 15 deletions(-)
diff --git a/.eslintrc b/.eslintrc
index ba0952050..80ea1b909 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -42,6 +42,8 @@
"GEN7RANDOMBATTLE": false,
"GEN8RANDOMBATTLE": false,
"GEN9RANDOMBATTLE": false,
+ "GEN9RANDOMDOUBLESBATTLE": false,
+ "GEN9BABYRANDOMBATTLE": false,
"getSelectedTiers": false,
"stickyMoves": false,
"allPokemon": false,
diff --git a/src/js/shared_controls.js b/src/js/shared_controls.js
index 325616bfc..505ba50ab 100644
--- a/src/js/shared_controls.js
+++ b/src/js/shared_controls.js
@@ -621,12 +621,22 @@ $(".set-selector").change(function () {
var moveObj;
var abilityObj = pokeObj.find(".ability");
var itemObj = pokeObj.find(".item");
- var randset = $("#randoms").prop("checked") ? randdex[pokemonName] : undefined;
+ var randset;
+ if ($("#randoms").prop("checked")) {
+ if (gen === 9) {
+ // The Gen 9 randdex contains information for multiple Random Battles formats for each Pokemon.
+ // Duraludon, for example, has data for Randoms, Doubles Randoms, and Baby Randoms.
+ // Therefore, the information for only the format chosen should be used.
+ randset = randdex[pokemonName][setName];
+ } else {
+ randset = randdex[pokemonName];
+ }
+ }
var regSets = pokemonName in setdex && setName in setdex[pokemonName];
if (randset) {
- var listItems = randdex[pokemonName].items ? randdex[pokemonName].items : [];
- var listAbilities = randdex[pokemonName].abilities ? randdex[pokemonName].abilities : [];
+ var listItems = randset.items ? randset.items : [];
+ var listAbilities = randset.abilities ? randset.abilities : [];
if (gen >= 3) $(this).closest('.poke-info').find(".ability-pool").show();
$(this).closest('.poke-info').find(".extraSetAbilities").text(listAbilities.join(', '));
if (gen >= 2) $(this).closest('.poke-info').find(".item-pool").show();
@@ -635,12 +645,12 @@ $(".set-selector").change(function () {
$(this).closest('.poke-info').find(".role-pool").show();
if (gen >= 9) $(this).closest('.poke-info').find(".tera-type-pool").show();
}
- var listRoles = randdex[pokemonName].roles ? Object.keys(randdex[pokemonName].roles) : [];
+ var listRoles = randset.roles ? Object.keys(randset.roles) : [];
$(this).closest('.poke-info').find(".extraSetRoles").text(listRoles.join(', '));
var listTeraTypes = [];
- if (randdex[pokemonName].roles && gen >= 9) {
- for (var roleName in randdex[pokemonName].roles) {
- var role = randdex[pokemonName].roles[roleName];
+ if (randset.roles && gen >= 9) {
+ for (var roleName in randset.roles) {
+ var role = randset.roles[roleName];
for (var q = 0; q < role.teraTypes.length; q++) {
if (listTeraTypes.indexOf(role.teraTypes[q]) === -1) {
listTeraTypes.push(role.teraTypes[q]);
@@ -912,7 +922,8 @@ $(".forme").change(function () {
$(this).parent().siblings().find(".teraToggle").prop("checked", true);
}
var isRandoms = $("#randoms").prop("checked");
- var pokemonSets = isRandoms ? randdex[pokemonName] : setdex[pokemonName];
+ var pokemonSets = isRandoms ? gen === 9 ? randdex[pokemonName][setName] :
+ randdex[pokemonName] : setdex[pokemonName];
var chosenSet = pokemonSets && pokemonSets[setName];
var greninjaSet = $(this).val().indexOf("Greninja") !== -1;
var isAltForme = $(this).val() !== pokemonName;
@@ -1268,6 +1279,40 @@ var SETDEX = [
typeof SETDEX_SS === 'undefined' ? {} : SETDEX_SS,
typeof SETDEX_SV === 'undefined' ? {} : SETDEX_SV,
];
+
+// Creates a single dictionary for all Gen 9 Random Battles formats
+var GEN9 = {
+ "Randoms": typeof GEN9RANDOMBATTLE === 'undefined' ? {} : GEN9RANDOMBATTLE,
+ "Doubles Randoms": typeof GEN9RANDOMDOUBLESBATTLE === 'undefined' ? {} : GEN9RANDOMDOUBLESBATTLE,
+ "Baby Randoms": typeof GEN9BABYRANDOMBATTLE === 'undefined' ? {} : GEN9BABYRANDOMBATTLE,
+};
+
+// COMBINED_GEN9 will be a dictionary that will have the hierarchy Pokemon -> Format -> Sets
+// An example using Duraludon would be:
+// {
+// ...
+// Duraludon: {
+// Randoms: {...},
+// Doubles Randoms: {...},
+// Baby Randoms: {...}
+// }
+// ...
+// }
+var COMBINED_GEN9 = {};
+
+// We use a nested loop instead of hardcoding all three formats so that this code
+// can be reused for other random battles generations and formats
+for (var format in GEN9) {
+ var formatSets = GEN9[format];
+ for (var pokemon in formatSets) {
+ var sets = formatSets[pokemon];
+ if (!(pokemon in COMBINED_GEN9)) {
+ COMBINED_GEN9[pokemon] = {};
+ }
+ COMBINED_GEN9[pokemon][format] = sets;
+ }
+}
+
var RANDDEX = [
{},
typeof GEN1RANDOMBATTLE === 'undefined' ? {} : GEN1RANDOMBATTLE,
@@ -1278,7 +1323,7 @@ var RANDDEX = [
typeof GEN6RANDOMBATTLE === 'undefined' ? {} : GEN6RANDOMBATTLE,
typeof GEN7RANDOMBATTLE === 'undefined' ? {} : GEN7RANDOMBATTLE,
typeof GEN8RANDOMBATTLE === 'undefined' ? {} : GEN8RANDOMBATTLE,
- typeof GEN9RANDOMBATTLE === 'undefined' ? {} : GEN9RANDOMBATTLE,
+ COMBINED_GEN9,
];
var gen, genWasChanged, notation, pokedex, setdex, randdex, typeChart, moves, abilities, items, calcHP, calcStat, GENERATION;
@@ -1408,12 +1453,28 @@ function getSetOptions(sets) {
});
if ($("#randoms").prop("checked")) {
if (pokeName in randdex) {
- setOptions.push({
- pokemon: pokeName,
- set: 'Randoms Set',
- text: pokeName + " (Randoms)",
- id: pokeName + " (Randoms)"
- });
+ if (gen === 9) {
+ // The Gen 9 randdex contains information for multiple Random Battles formats for each Pokemon.
+ // Duraludon, for example, has data for Randoms, Doubles Randoms, and Baby Randoms.
+ // Therefore, all of this information has to be populated within the set options.
+ var randTypes = Object.keys(randdex[pokeName]);
+ for (var j = 0; j < randTypes.length; j++) {
+ var rand = randTypes[j];
+ setOptions.push({
+ pokemon: pokeName + (rand === "Randoms" ? "" : " (" + rand.split(' ')[0] + ")"),
+ set: rand + ' Set',
+ text: pokeName + " (" + rand + ")",
+ id: pokeName + " (" + rand + ")"
+ });
+ }
+ } else {
+ setOptions.push({
+ pokemon: pokeName,
+ set: 'Randoms Set',
+ text: pokeName + " (Randoms)",
+ id: pokeName + " (Randoms)"
+ });
+ }
}
} else {
if (pokeName in setdex) {
diff --git a/src/randoms.template.html b/src/randoms.template.html
index 732ed88f1..4f3812f6a 100644
--- a/src/randoms.template.html
+++ b/src/randoms.template.html
@@ -1592,6 +1592,8 @@
+
+