From df2a86998ad9c3404f051c56876152265d59e262 Mon Sep 17 00:00:00 2001 From: Kun Yi Date: Wed, 27 Dec 2023 06:58:47 -0800 Subject: [PATCH 01/24] =?UTF-8?q?=E5=9F=BA=E6=A0=BC=E5=B0=94=E5=BE=B7?= =?UTF-8?q?=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script_res/translate/translate.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/script_res/translate/translate.js b/script_res/translate/translate.js index 154ad63..79afee0 100644 --- a/script_res/translate/translate.js +++ b/script_res/translate/translate.js @@ -3355,6 +3355,12 @@ function translate_pokemon(name) { 'Shadow Rider': '骑黑马的样子', } }, { + name: 'Zygarde', + types: { + '10%': '10%形态', + 'Complete': '完全体形态', + } + },{ name: 'Dudunsparce', types: { 'Big': '三节形态', From c4eba3307844e3f0fe09b361588424221f3e568f Mon Sep 17 00:00:00 2001 From: Kun Yi Date: Wed, 27 Dec 2023 07:11:21 -0800 Subject: [PATCH 02/24] =?UTF-8?q?=E8=A1=A5=E5=85=A8=E6=8A=80=E8=83=BD?= =?UTF-8?q?=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script_res/translate/translate.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/script_res/translate/translate.js b/script_res/translate/translate.js index 79afee0..e6419c3 100644 --- a/script_res/translate/translate.js +++ b/script_res/translate/translate.js @@ -2032,6 +2032,25 @@ var MOVENAMES = { 'Matcha Gotcha': "刷刷茶炮", 'Syrup Bomb': "糖浆炸弹", 'Ivy Cudgel': "棘藤棒", + + // Missing previously + 'Corrosive Gas': '腐蚀气体', + 'Court Change': '换场', + 'Cut': '居合劈', + 'Hydro Steam': '水蒸气', + 'Magic Powder': '魔法粉', + 'Poison Sting': '毒针', + 'Psybeam': '幻象光线', + 'Psyblade': '精神剑', + 'Splash': '跃起', + 'Strength': '怪力', + 'Tar Shot': '沥青射击', + 'Teatime': '茶会', + 'ThunderPunch': '雷电拳', + 'Vise Grip': '夹住', + 'Water Gun': '水枪', + 'Whirlpool': '潮旋', + 'Withdraw': '缩入壳中', }; function translate_move(name) { From 6d68e35b36b40bb07654f6710019354cf6dfbe14 Mon Sep 17 00:00:00 2001 From: Kun Yi Date: Wed, 27 Dec 2023 06:51:20 -0800 Subject: [PATCH 03/24] =?UTF-8?q?=E5=B7=A8=E5=89=91=E7=AA=81=E5=87=BB?= =?UTF-8?q?=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 4 ++-- script_res/damage_MASTER.js | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 57180af..6b06619 100644 --- a/index.html +++ b/index.html @@ -598,7 +598,7 @@

宝可梦#1

- +
@@ -1377,7 +1377,7 @@

宝可梦#2

- +
diff --git a/script_res/damage_MASTER.js b/script_res/damage_MASTER.js index 41aaded..73e0b04 100644 --- a/script_res/damage_MASTER.js +++ b/script_res/damage_MASTER.js @@ -179,7 +179,9 @@ function buildDescription(description) { output += " 击中要害"; } if (description.isGlaiveMod) { - output += " after using Glaive Rush"; + //output += " after using Glaive Rush"; + // translated + output += " 用[" + translate_move("Glaive Rush") + "]后"; } if (description.isFriendGuard) { //output += " with Friend Guard"; From bcb1352b2cd2ea895ddec78479e6d022059928bc Mon Sep 17 00:00:00 2001 From: nerd-of-now Date: Sun, 19 Nov 2023 23:53:22 -0500 Subject: [PATCH 04/24] Minor updates to moves, result display, sets - Fixed Strange Steam name, Tackle bp - Reworked contact overriding as a function that takes away a move's contact - Added items that are unaffected by Klutz (Macho Brace, Power items), let all items be affected by Knock Off, and made Fling fail with Klutz - Added a results descriptor for when a Pokemon's level doesn't match the selected auto level number. It's assumed that people will understand the context where it's posted - Minor set tweaks, added a few EternalSnowman sets --- index.html | 2 +- script_res/ap_calc.js | 2 + script_res/damage_MASTER.js | 50 ++++++++++++++++++------ script_res/damage_SV.js | 6 ++- script_res/item_data.js | 2 +- script_res/move_data.js | 3 +- script_res/setdex_ncp-g9.js | 77 +++++++++++++++++++++++++++++++++---- 7 files changed, 117 insertions(+), 25 deletions(-) diff --git a/index.html b/index.html index 6b06619..e38dbd3 100644 --- a/index.html +++ b/index.html @@ -1426,7 +1426,7 @@

原作者信息:

- + diff --git a/script_res/ap_calc.js b/script_res/ap_calc.js index 6ca8b6c..3dbfab8 100644 --- a/script_res/ap_calc.js +++ b/script_res/ap_calc.js @@ -602,6 +602,8 @@ $(".set-selector").change(function() { var set = setdex[pokemonName][setName]; if (setdexCustom !== [] && pokemonName in setdexCustom && setName in setdexCustom[pokemonName]) $(this).closest(".poke-info").find(".setCalc").val(setName); + else + $(this).closest(".poke-info").find(".setCalc").val("My Calc Set"); if(DOU) pokeObj.find(".level").val(100); else pokeObj.find(".level").val(set.level); pokeObj.find(".hp .evs").val((set.evs && typeof set.evs.hp !== "undefined") ? set.evs.hp : 0); diff --git a/script_res/damage_MASTER.js b/script_res/damage_MASTER.js index 73e0b04..f2d58e5 100644 --- a/script_res/damage_MASTER.js +++ b/script_res/damage_MASTER.js @@ -36,6 +36,9 @@ function buildDescription(description) { } output += description.attackBoost + " "; } + if (description.attackerLevel) { + output = output + 'Lv. ' + description.attackerLevel + ' '; + } output = appendIfSet(output, description.attackEVs); //output = appendIfSet(output, description.attackerItem); //output = appendIfSet(output, description.attackerAbility); @@ -120,6 +123,9 @@ function buildDescription(description) { } output += description.defenseBoost + " "; } + if (description.defenderLevel) { + output = output + 'Lv. ' + description.defenderLevel + ' '; + } output = appendIfSet(output, description.HPEVs); if (description.defenseEVs) { output += " / " + description.defenseEVs + " "; @@ -223,6 +229,14 @@ function chainMods(mods) { return M; } +function addLevelDesc(attacker, defender, description) { + autoLevel = $('#douswitch').is(':checked') ? 50 : 100; + if (attacker.level !== autoLevel) + description.attackerLevel = attacker.level; + if (defender.level !== autoLevel) + description.defenderLevel = defender.level; +} + function getMoveEffectiveness(move, type, otherType, isGhostRevealed, isGravity, defItem, isStrongWinds) { if (isGhostRevealed && type === "Ghost" && (move.type === "Normal" || move.type === "Fighting")) { return 1; @@ -380,8 +394,8 @@ function checkTerastal(pokemon) { } function checkKlutz(pokemon) { - if (pokemon.ability === "Klutz") { - pokemon.item = ""; + if (pokemon.ability === "Klutz" && ['Macho Brace', 'Power Anklet', 'Power Band', 'Power Belt', 'Power Bracer', 'Power Lens', 'Power Weight'].indexOf(pokemon.item) === -1 ) { + pokemon.item = "Klutz"; } } @@ -624,6 +638,11 @@ function checkConditionalPriority(move, terrain) { move.isPriority = true; } +function checkContactOverride(move, attacker) { + if (move.makesContact && (attacker.item === 'Protective Pads' || (attacker.item === 'Punching Glove' && move.isPunch) || attacker.ability === "Long Reach")) + move.makesContact = false; +} + function ZMoves(move, field, attacker, isQuarteredByProtect, moveDescName) { if (move.isSignatureZ) { move.isZ = true; @@ -929,11 +948,20 @@ function setDamage(move, attacker, defender, description, isQuarteredByProtect) // var counteredMove = moves[move.usedOppMove]; // counteredMove.hits = 1; // //if move can be countered (nested if) - // if (['Counter', 'Mirror Coat'].indexOf(move.name) !== -1 && move.category == counteredMove.category) { - // return GET_DAMAGE_HANDLER(defender, attacker, counteredMove, field); //result needs raw damage multiplied by 2 - // } - // else { - // return GET_DAMAGE_HANDLER(defender, attacker, counteredMove, field); //result needs raw damage multiplied by 1.5 + // if (counteredMove.category !== 'Status') { + // counteredResult = GET_DAMAGE_HANDLER(defender, attacker, counteredMove, field); + // if (['Counter', 'Mirror Coat'].indexOf(move.name) !== -1 && move.category == counteredMove.category) { + // for (i = 0; i < counteredResult.damage.length(); i++) { + // counteredResult.damage[i] *= 2; + // } + // counteredResult.description = 'Countered ' + // } + // else { + // for (i = 0; i < counteredResult.damage.length(); i++) { + // counteredResult.damage[i] = floor(counteredResult.damage[i] * 1.5); + // } + // } + // return counteredResult; // } // //Bide ain't being added it's too niche //} @@ -1245,7 +1273,6 @@ function calcBPMods(attacker, defender, field, move, description, ateIzeBoosted, var isDefenderAura = defAbility === (move.type + " Aura"); var auraActive = ($("input:checkbox[id='" + move.type.toLowerCase() + "-aura']:checked").val() != undefined); var auraBreak = ($("input:checkbox[id='aura-break']:checked").val() != undefined); - var contactOverride = attacker.item === 'Protective Pads' || (attacker.item === 'Punching Glove' && move.isPunch) || attacker.ability === "Long Reach"; //a. Aura Break if (auraActive && auraBreak && !field.isNeutralizingGas && ["Mold Breaker", "Teravolt", "Turboblaze"].indexOf(attacker.ability) == -1) { @@ -1307,7 +1334,7 @@ function calcBPMods(attacker, defender, field, move, description, ateIzeBoosted, description.attackerAbility = attacker.ability; } //e.iv. Tough Claws - else if (attacker.ability === "Tough Claws" && move.makesContact && !contactOverride) { + else if (attacker.ability === "Tough Claws" && move.makesContact) { bpMods.push(0x14CD); description.attackerAbility = attacker.ability; } @@ -1784,7 +1811,7 @@ function calcGeneralMods(baseDamage, move, attacker, defender, defAbility, field baseDamage = pokeRound(baseDamage * 0x800 / 0x1000); description.weather = field.weather; } - //d. Glaive Rush 2x mod (NEEDS OTHER PARTS TO BE FIXED) + //d. Glaive Rush 2x mod if (defender.glaiveRushMod) { baseDamage = pokeRound(baseDamage * 0x2000 / 0x1000); description.isGlaiveMod = true; @@ -1942,7 +1969,6 @@ function calcGeneralMods(baseDamage, move, attacker, defender, defAbility, field //9. Finals Damage Mods function calcFinalMods(move, attacker, defender, field, description, isCritical, typeEffectiveness, defAbility, hitsPhysical) { var finalMods = []; - var contactOverride = attacker.item === 'Protective Pads' || (attacker.item === 'Punching Glove' && move.isPunch) || attacker.ability === "Long Reach"; //a. Screens/Aurora Veil if (field.isAuroraVeil && !isCritical && !move.ignoresScreens) { finalMods.push(field.format !== "Singles" ? 0xAAC : 0x800); @@ -1985,7 +2011,7 @@ function calcFinalMods(move, attacker, defender, field, description, isCritical, description.defenderAbility = defAbility; } //h. Fluffy (contact) - if (defAbility === "Fluffy" && move.makesContact && !contactOverride) { + if (defAbility === "Fluffy" && move.makesContact) { finalMods.push(0x800); description.defenderAbility = defAbility; } diff --git a/script_res/damage_SV.js b/script_res/damage_SV.js index 47a3590..8f6d01f 100644 --- a/script_res/damage_SV.js +++ b/script_res/damage_SV.js @@ -66,11 +66,12 @@ function GET_DAMAGE_SV(attacker, defender, move, field) { checkMoveTypeChange(move, field, attacker); checkConditionalPriority(move, field.terrain); + checkContactOverride(move, attacker); if (attacker.isDynamax) [move, isQuarteredByProtect, moveDescName] = MaxMoves(move, attacker, isQuarteredByProtect, moveDescName, field); - if (move.name == "Nature Power") + if (move.name == "Nature Power" && attacker.item !== 'Assault Vest') [move, moveDescName] = NaturePower(move, field, moveDescName); if (move.isZ || move.isSignatureZ) @@ -91,6 +92,8 @@ function GET_DAMAGE_SV(attacker, defender, move, field) { description["moveName"] = translate_move(moveDescName); description["defenderName"] = translate_pokemon(defender_name); + addLevelDesc(attacker, defender, description); + if (move.bp === 0 || move.category === "Status") { return statusMoves(move, attacker, defender, description); } @@ -98,7 +101,6 @@ function GET_DAMAGE_SV(attacker, defender, move, field) { description.attackerTera = attacker.isTerastalize ? attacker.tera_type : false; description.defenderTera = defender.isTerastalize ? defender.tera_type : false; - var defAbility = defender.ability; [defAbility, description] = abilityIgnore(attacker, move, defAbility, description, defender.item); diff --git a/script_res/item_data.js b/script_res/item_data.js index 019095c..01b27f3 100644 --- a/script_res/item_data.js +++ b/script_res/item_data.js @@ -874,7 +874,7 @@ function cantRemoveItem(defItem, defSpecies, terrain) { } function cantFlingItem(atItem, atSpecies, defAbility) { - return atItem === "" || atItem.indexOf(" Gem") !== -1 || atItem.indexOf(" ium Z") !== -1 || ["Red Orb", "Blue Orb", "Rusted Sword", "Rusted Shield"].indexOf(atItem) !== -1 + return atItem === "" || atItem === 'Klutz' || atItem.indexOf(" Gem") !== -1 || atItem.indexOf(" ium Z") !== -1 || ["Red Orb", "Blue Orb", "Rusted Sword", "Rusted Shield"].indexOf(atItem) !== -1 || (atSpecies === 'Giratina-Origin' && atItem === "Griseous Orb") || (atSpecies === 'Arceus' && atItem.indexOf(" Plate") !== -1) || (atSpecies === 'Genesect' && atItem.indexOf(" Drive") !== -1) diff --git a/script_res/move_data.js b/script_res/move_data.js index 4156478..aa254bb 100644 --- a/script_res/move_data.js +++ b/script_res/move_data.js @@ -4477,6 +4477,7 @@ var MOVES_SM = $.extend(true, {}, MOVES_XY, { 'Fell Stinger': { bp: 50, }, + 'Tackle': { bp: 40 }, }); var MOVES_SS = $.extend(true, {}, MOVES_SM, { @@ -4601,7 +4602,7 @@ var MOVES_SS = $.extend(true, {}, MOVES_SM, { hasSecondaryEffect: true, makesContact: true, }, - 'Strange Stream': { + 'Strange Steam': { bp: 90, type: 'Fairy', category: 'Special', diff --git a/script_res/setdex_ncp-g9.js b/script_res/setdex_ncp-g9.js index e158359..3ec39f5 100644 --- a/script_res/setdex_ncp-g9.js +++ b/script_res/setdex_ncp-g9.js @@ -5172,6 +5172,27 @@ var SETDEX_VGC2023 = { // }, //}, "Tyranitar": { + "EternalSnowman's Sacramento 1st AV Tera Psychic": { + "level": 50, + "evs": { + "hp": 4, + "at": 252, + "df": 4, + "sa": 0, + "sd": 4, + "sp": 244 + }, + "nature": "Adamant", + "ability": "Sand Stream", + "tera_type": "Psychic", + "item": "Assault Vest", + "moves": [ + "Rock Slide", + "Knock Off", + "Low Kick", + "Tera Blast" + ] + }, "Tera Flying AV": { "level": 50, "evs": { @@ -6443,6 +6464,29 @@ var SETDEX_VGC2023 = { }, "Flutter Mane": { + "Bulky Speed Booster Energy": { + "level": 50, + "evs": { + "hp": 212, + "at": 0, + "df": 132, + "sa": 36, + "sd": 4, + "sp": 124 + }, + "ivs": { + "at": 0, + }, + "nature": "Timid", + "item": "Booster Energy", + "tera_type": "Fairy", + "moves": [ + "Shadow Ball", + "Moonblast", + "Dazzling Gleam", + "Icy Wind" + ] + }, "Sash Set": { "level": 50, "evs": { @@ -6512,7 +6556,6 @@ var SETDEX_VGC2023 = { "Protect" ] }, - }, "Slither Wing": { "Tera Fire Booster Energy": { @@ -9755,6 +9798,27 @@ var SETDEX_VGC2023 = { "Clangerous Soul" ] }, + "EternalSnowman's Sacramento 1st Body Press": { + "level": 50, + "evs": { + "hp": 252, + "at": 4, + "df": 156, + "sa": 0, + "sd": 92, + "sp": 4 + }, + "nature": "Impish", + "ability": "Bulletproof", + "tera_type": "Steel", + "item": "Leftovers", + "moves": [ + "Body Press", + "Iron Head", + "Iron Defense", + "Protect" + ] + }, }, "Weezing": { "General Disruption": { @@ -9767,15 +9831,12 @@ var SETDEX_VGC2023 = { "sd": 252, "sp": 0 }, - "ivs": { - "at": 0, - }, - "nature": "Bold", + "nature": "Impish", "ability": "Neutralizing Gas", "tera_type": "Grass", "item": "Sitrus Berry", "moves": [ - "Sludge Bomb", + "Gunk Shot", "Pain Split", "Will-O-Wisp", "Taunt" @@ -10313,7 +10374,7 @@ var SETDEX_VGC2023 = { }, }, "Ursaluna-Bloodmoon": { - "Trick Room Throat Spray": { + "Trick Room Special Offense": { "level": 50, "evs": { "hp": 252, @@ -10329,7 +10390,7 @@ var SETDEX_VGC2023 = { }, "nature": "Quiet", "tera_type": "Normal", - "item": "Throat Spray", + "item": "Life Orb", "moves": [ "Hyper Voice", "Earth Power", From 6a3026fa2552f63644ea7660c4a6eaac26c39540 Mon Sep 17 00:00:00 2001 From: nerd-of-now Date: Wed, 22 Nov 2023 00:08:27 -0500 Subject: [PATCH 05/24] Minor set additions More meta-relevant Brambleghast set, Thiago Lattanzi's LAIC Tornadus set --- script_res/setdex_ncp-g9.js | 46 +++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/script_res/setdex_ncp-g9.js b/script_res/setdex_ncp-g9.js index 3ec39f5..ec844ee 100644 --- a/script_res/setdex_ncp-g9.js +++ b/script_res/setdex_ncp-g9.js @@ -3830,6 +3830,27 @@ var SETDEX_VGC2023 = { }, "Brambleghast": { + "Regulation E Offense": { + "level": 50, + "evs": { + "hp": 4, + "at": 252, + "df": 0, + "sa": 0, + "sd": 0, + "sp": 252 + }, + "nature": "Adamant", + "ability": "Wind Rider", + "tera_type": "Ghost", + "item": "Focus Sash", + "moves": [ + "Power Whip", + "Shadow Sneak", + "Poltergeist", + "Seed Bomb" + ] + }, "Emilio Forbes' 2023 Worlds Top 16 Sash": { "level": 50, "evs": { @@ -8570,6 +8591,31 @@ var SETDEX_VGC2023 = { "Tailwind" ] }, + "Thiago Lattanzi's 2024 LAIC Finalist Bulky Set": { + "level": 50, + "evs": { + "hp": 252, + "at": 0, + "df": 252, + "sa": 0, + "sd": 4, + "sp": 0 + }, + "ivs": { + "at": 0, + "sp": 28, + }, + "nature": "Bold", + "ability": "Prankster", + "tera_type": "Dark", + "item": "Safety Goggles", + "moves": [ + "Bleakwind Storm", + "Protect", + "Rain Dance", + "Tailwind" + ] + }, }, //"Tornadus-Therian": { // "": { From d7e1ac96c99c66bf69f6b4f4c1f706cf8dae3fc0 Mon Sep 17 00:00:00 2001 From: nerd-of-now Date: Wed, 29 Nov 2023 00:07:40 -0500 Subject: [PATCH 06/24] Counterattack/Me First support added, other minor tweaks -Support for Counter, Mirror Coat, Metal Burst, Comeuppance, and Me First has been added! It might end up being a bit buggy, so we'll see if it sticks. -Added some more cases for Typeless damage (Struggle, Beat Up, Future Sight, Doom Desire) and prevent Typeless Pokemon from getting STAB on Typeless moves -Removed all Gigantamax Pokemon for SV National Dex since Dynamax isn't a thing for Gen 9 on Showdown as far as I know -Changed the wording in a few places: moves that double in BP and results for Status moves and no damage -Added a file of all titan bosses in SV for a potential boss damage calc --- index.html | 16 +- script_res/ap_calc.css | 6 +- script_res/ap_calc.js | 16 +- script_res/damage_MASTER.js | 138 +++++----- script_res/damage_SV.js | 4 +- script_res/ko_chance.js | 6 +- script_res/move_data.js | 59 +++-- script_res/pokedex.js | 109 +++----- script_res/setdex_boss-titan.js | 439 ++++++++++++++++++++++++++++++++ script_res/setdex_ncp-g9.js | 124 +++++---- 10 files changed, 663 insertions(+), 254 deletions(-) create mode 100644 script_res/setdex_boss-titan.js diff --git a/index.html b/index.html index e38dbd3..86a0e58 100644 --- a/index.html +++ b/index.html @@ -389,7 +389,7 @@

宝可梦#1

- + - + - + - +
@@ -769,7 +757,7 @@

-
+
@@ -1166,10 +1154,7 @@

宝可梦#2

- + - + - + - +
-
- - +
+ +
- - + +
-
+
-                   +                     
-       - +           +
diff --git a/script_res/ap_calc.css b/script_res/ap_calc.css index b7c7083..bbbb595 100644 --- a/script_res/ap_calc.css +++ b/script_res/ap_calc.css @@ -79,6 +79,9 @@ th { .btn-xxxwide { width: 10em; } +.btn-xxxxwide { + width: 11em; +} .btn-medium { width: 4.4em; } @@ -331,4 +334,4 @@ select.toxic-counter { #mainResult { visibility: visible; cursor: pointer; -} \ No newline at end of file +} diff --git a/script_res/ap_calc.js b/script_res/ap_calc.js index b0869fb..22076ab 100644 --- a/script_res/ap_calc.js +++ b/script_res/ap_calc.js @@ -1295,8 +1295,10 @@ $(".gen").change(function () { var itemOptions = getSelectOptions(items, false, undefined, translate_item); $("select.item").find("option").remove().end().append("" + itemOptions); - $(".set-selector").val(getSetOptions()[gen > 3 ? 1 : gen === 1 ? 5 : 3].id); - $(".set-selector").change(); + $("#p1 .set-selector").val(getSetOptions("#p1")[gen > 3 ? 1 : gen === 1 ? 5 : 3].id); + $("#p1 .set-selector").change(); + $("#p2 .set-selector").val(getSetOptions("#p2")[gen > 3 ? 1 : gen === 1 ? 5 : 3].id); + $("#p2 .set-selector").change(); }); function clearField() { @@ -1347,7 +1349,7 @@ function clearField() { $("#auroraVeilR").prop("checked", false); } -function getSetOptions() { +function getSetOptions(p) { var pokeNames, index; pokeNames = Object.keys(pokedex); index = pokeNames.length; @@ -1364,14 +1366,15 @@ function getSetOptions() { pokeNames.sort((a, b) => translate_pokemon(a).localeCompare(translate_pokemon(b))); var setOptions = []; var idNum = 0; + var setdexUsed = $(p + " .set-toggle").prop("checked") && gen >= 5 ? setdexCustom : setdex; for (var i = 0; i < pokeNames.length; i++) { var pokeName = pokeNames[i]; setOptions.push({ pokemon: pokeName, text: translate_pokemon(pokeName) }); - if (pokeName in setdex) { - var setNames = Object.keys(setdex[pokeName]); + if (pokeName in setdexUsed) { + var setNames = Object.keys(setdexUsed[pokeName]); for (var j = 0; j < setNames.length; j++) { var setName = setNames[j]; setOptions.push({ @@ -1424,16 +1427,13 @@ function getGen() { } } -$(document).ready(function() { - getGen(); - $(".terrain-trigger").bind("change keyup", getTerrainEffects); - $(".calc-trigger").bind("change keyup", calculate); - $(".set-selector").select2({ - formatResult: function(object) { +function setStartup(p) { + $(p + " .set-selector").select2({ + formatResult: function (object) { return object.set ? ("   " + object.set) : ("" + object.text + ""); }, - query: function(query) { - var setOptions = getSetOptions(); + query: function (query) { + var setOptions = getSetOptions(p); var pageSize = 30; var results = []; for (var i = 0; i < setOptions.length; i++) { @@ -1452,11 +1452,47 @@ $(document).ready(function() { more: results.length >= query.page * pageSize }); }, - initSelection: function(element, callback) { - var data = getSetOptions()[gen > 3 ? 1 : gen === 1 ? 5 : 3]; + initSelection: function (element, callback) { + var data = getSetOptions(p)[gen > 3 ? 1 : gen === 1 ? 5 : 3]; callback(data); } }); +} + +$(document).ready(function() { + getGen(); + $(".terrain-trigger").bind("change keyup", getTerrainEffects); + $(".calc-trigger").bind("change keyup", calculate); + //$(".set-selector").select2({ + // formatResult: function(object) { + // return object.set ? ("   " + object.set) : ("" + object.text + ""); + // }, + // query: function(query) { + // var setOptions = getSetOptions(); + // var pageSize = 30; + // var results = []; + // for (var i = 0; i < setOptions.length; i++) { + // var pokeName = setOptions[i].pokemon.toUpperCase(); + // //if (!query.term || pokeName.indexOf(query.term.toUpperCase()) === 0) { + // // results.push(setOptions[i]); + // //} + // if (!query.term || query.term.toUpperCase().split(" ").every(function (term) { + // return pokeName.indexOf(term) === 0 || pokeName.indexOf("-" + term) >= 0 || pokeName.indexOf(" " + term) >= 0; + // })) + // results.push(setOptions[i]); + // } + // query.callback({ + // results: results.slice((query.page - 1) * pageSize, query.page * pageSize), + // more: results.length >= query.page * pageSize + // }); + // }, + // initSelection: function(element, callback) { + // var data = getSetOptions()[gen > 3 ? 1 : gen === 1 ? 5 : 3]; + // callback(data); + // } + //}); + setStartup("#p1"); + setStartup("#p2"); $(".move-selector").select2({ dropdownAutoWidth:true, matcher: function(term, text, option) { @@ -1483,6 +1519,8 @@ $(document).ready(function() { return text.toUpperCase().indexOf(term.toUpperCase()) === 0 || text.toUpperCase().indexOf(" " + term.toUpperCase()) >= 0; } }); - $(".set-selector").val(getSetOptions()[gen > 3 ? 1 : gen === 1 ? 5 : 3].id); - $(".set-selector").change(); + $("#p1 .set-selector").val(getSetOptions("#p1")[gen > 3 ? 1 : gen === 1 ? 5 : 3].id); + $("#p1 .set-selector").change(); + $("#p2 .set-selector").val(getSetOptions("#p2")[gen > 3 ? 1 : gen === 1 ? 5 : 3].id); + $("#p2 .set-selector").change(); }); diff --git a/script_res/switch_mode.js b/script_res/switch_mode.js index f24e2c8..c363645 100644 --- a/script_res/switch_mode.js +++ b/script_res/switch_mode.js @@ -29,6 +29,15 @@ if (localStorage.getItem("level") == true) { //Load the generation according to localStorage //see function getGen() in ap_calc.js +////SET TOGGLING +////Set the set type according to localStorage on initialize +//if (localStorage.getItem("isCustom1") == true) { +// $("#p1 .set-toggle").prop("checked", true); +//} +//if (localStorage.getItem("isCustom2") == true) { +// $("#p2 .set-toggle").prop("checked", true); +//} + $(function(){ $("#switchTheme").on("click", function(){ @@ -72,6 +81,10 @@ $(function(){ }); //see $(".gen").change(function ()) in ap_calc.js for changing gen value in localStorage + + $(".set-toggle").on("click", function () { + loadSets("#" + $(this).closest(".poke-info").prop("id")); + }) }) function loadTheme(color){ @@ -181,6 +194,14 @@ function loadDex(dexMode) { var itemOptions = getSelectOptions(items, true); $("select.item").find("option").remove().end().append("" + itemOptions); - $(".set-selector").val(getSetOptions()[gen > 3 ? 1 : gen === 1 ? 5 : 3].id); - $(".set-selector").change(); + $("#p1 .set-selector").val(getSetOptions("#p1")[gen > 3 ? 1 : gen === 1 ? 5 : 3].id); + $("#p1 .set-selector").change(); + $("#p2 .set-selector").val(getSetOptions("#p2")[gen > 3 ? 1 : gen === 1 ? 5 : 3].id); + $("#p2 .set-selector").change(); +} + +function loadSets(p) { + setStartup(p) + $(p + " .set-selector").val(getSetOptions(p)[gen > 3 ? 1 : gen === 1 ? 5 : 3].id); + $(p + " .set-selector").change(); } \ No newline at end of file From 55476e20bb4683de810e403e3f6a476b6b26878b Mon Sep 17 00:00:00 2001 From: nerd-of-now Date: Thu, 14 Dec 2023 01:16:26 -0500 Subject: [PATCH 10/24] Indigo Disk Update 1 - New abilities, moves, Pokemon, and the new Tera Type from the Indigo Disk DLC have been added to the Damage Calc! - Not everything may be implemented at the moment. This includes how much Tera Stellar boosts types, if Teapagos is locked into only having Tera Stellar like Ogerpon, and certain properties of moves. Those will come once more information is known. --- script_res/ability_data.js | 5 ++ script_res/ap_calc.js | 64 +++++++------- script_res/damage_MASTER.js | 38 ++++++--- script_res/damage_SV.js | 10 ++- script_res/move_data.js | 99 ++++++++++++++++++++-- script_res/pokedex.js | 161 ++++++++++++++++++++++++++++++++++++ 6 files changed, 326 insertions(+), 51 deletions(-) diff --git a/script_res/ability_data.js b/script_res/ability_data.js index f832290..502d558 100644 --- a/script_res/ability_data.js +++ b/script_res/ability_data.js @@ -332,6 +332,11 @@ var ABILITIES_SV = ABILITIES_SS.concat([ 'Hospitality', //Heals ally's HP, no calc functionality 'Toxic Chain', //Poison Touch but with badly poisoned instead, no calc functionality 'Embody Aspect', //Boosts Ogerpon's stats based on mask, needs for info for what kind of boost and how much + //Indigo Disk new additions + 'Tera Shift', //Transforms Terapagos into Tera form + 'Tera Shell', //Max HP means all attacks are not very effective + 'Teraform Zero', //Removes weather and terrain + 'Poison Puppeteer', //Poisoning also confuses, no calc funcitonality ]); //ABILITIES_XY.splice(ABILITIES_XY.indexOf('Lightning Rod'), 1, 'Lightning Rod'); diff --git a/script_res/ap_calc.js b/script_res/ap_calc.js index 22076ab..a14508e 100644 --- a/script_res/ap_calc.js +++ b/script_res/ap_calc.js @@ -687,7 +687,7 @@ function showFormes(formeObj, setName, pokemonName, pokemon) { } } - if (pokemonName === "Palafin") + if (pokemonName === "Palafin" || pokemonName === "Terapagos") defaultForme = 1; else if (gen == 8 && !defaultForme && gmaxDefaults.indexOf(pokemonName) != -1) defaultForme = pokedex[pokemonName].formes.indexOf(pokemonName + "-Gmax"); @@ -951,7 +951,7 @@ function Pokemon(pokeInfo) { pokeInfo.find(".max").prop("disabled", false); } - //Check for Tera form (ability only for now, should probably be changed to a different form with Terapagos coming in the next DLC) + //Check for Tera form (ability only for now, should probably be changed to a different form with Terapagos coming in the next DLC) edit: nope lol if (this.name && this.name.indexOf('Ogerpon') !== -1) { var mask = pokeInfo.find("select.item").val().substring(0, pokeInfo.find("select.item").val().indexOf(" Mask")); @@ -972,6 +972,34 @@ function Pokemon(pokeInfo) { } } } + else if (this.name === 'Terapagos-Terastal') { + pokeInfo.find(".tera-type").val('Stellar'); + pokeInfo.find(".tera-type").prop("disabled", true); + if (pokeInfo.find(".tera").prop("checked")) { + this.name = 'Terapagos-Stellar'; + pokeInfo.find(".hp .base").val(pokedex['Terapagos-Stellar'].bs.hp); + pokeInfo.find(".at .base").val(pokedex['Terapagos-Stellar'].bs.at); + pokeInfo.find(".df .base").val(pokedex['Terapagos-Stellar'].bs.df); + pokeInfo.find(".sa .base").val(pokedex['Terapagos-Stellar'].bs.sa); + pokeInfo.find(".sd .base").val(pokedex['Terapagos-Stellar'].bs.sd); + pokeInfo.find(".sp .base").val(pokedex['Terapagos-Stellar'].bs.sp); + pokeInfo.find(".weight").val(pokedex['Terapagos-Stellar'].w); + pokeInfo.find("select.ability").val(pokedex['Terapagos-Stellar'].ab); + pokeInfo.find("select.ability").trigger('change.select2'); + } + else { + this.name = 'Terapagos-Terastal'; + pokeInfo.find(".hp .base").val(pokedex['Terapagos-Terastal'].bs.hp); + pokeInfo.find(".at .base").val(pokedex['Terapagos-Terastal'].bs.at); + pokeInfo.find(".df .base").val(pokedex['Terapagos-Terastal'].bs.df); + pokeInfo.find(".sa .base").val(pokedex['Terapagos-Terastal'].bs.sa); + pokeInfo.find(".sd .base").val(pokedex['Terapagos-Terastal'].bs.sd); + pokeInfo.find(".sp .base").val(pokedex['Terapagos-Terastal'].bs.sp); + pokeInfo.find(".weight").val(pokedex['Terapagos-Terastal'].w); + pokeInfo.find("select.ability").val(pokedex['Terapagos-Terastal'].ab); + pokeInfo.find("select.ability").trigger('change.select2'); + } + } else { pokeInfo.find(".tera-type").prop("disabled", false); } @@ -1086,6 +1114,9 @@ function Field() { this.clearWeather = function() { weather = ""; }; + this.clearTerrain = function () { + terrain = ""; + }; this.getSide = function (i) { return new Side(format, terrain, weather, isGravity, isSR[i], spikes[i], isReflect[i], isLightScreen[i], isForesight[i], isHelpingHand[i], isFriendGuard[i], isBattery[i], isProtect[i], isPowerSpot[i], isSteelySpirit[i], isNeutralizingGas, isGMaxField[i], isFlowerGiftSpD[i], isFlowerGiftAtk[i], isTailwind[i], isSaltCure[i], isAuroraVeil[i]); }; @@ -1283,6 +1314,7 @@ $(".gen").change(function () { types.splice(types.indexOf('Typeless'), 1); var teraTypes = $.extend(true, [], types); if (gen >= 2) types.push('Typeless'); + teraTypes.push('Stellar'); var typeOptions = getSelectOptions(types, undefined, undefined, translate_type); var teraTypeOptions = getSelectOptions(teraTypes, undefined, undefined, translate_type); $("select.type1, select.move-type").find("option").remove().end().append(typeOptions); @@ -1463,34 +1495,6 @@ $(document).ready(function() { getGen(); $(".terrain-trigger").bind("change keyup", getTerrainEffects); $(".calc-trigger").bind("change keyup", calculate); - //$(".set-selector").select2({ - // formatResult: function(object) { - // return object.set ? ("   " + object.set) : ("" + object.text + ""); - // }, - // query: function(query) { - // var setOptions = getSetOptions(); - // var pageSize = 30; - // var results = []; - // for (var i = 0; i < setOptions.length; i++) { - // var pokeName = setOptions[i].pokemon.toUpperCase(); - // //if (!query.term || pokeName.indexOf(query.term.toUpperCase()) === 0) { - // // results.push(setOptions[i]); - // //} - // if (!query.term || query.term.toUpperCase().split(" ").every(function (term) { - // return pokeName.indexOf(term) === 0 || pokeName.indexOf("-" + term) >= 0 || pokeName.indexOf(" " + term) >= 0; - // })) - // results.push(setOptions[i]); - // } - // query.callback({ - // results: results.slice((query.page - 1) * pageSize, query.page * pageSize), - // more: results.length >= query.page * pageSize - // }); - // }, - // initSelection: function(element, callback) { - // var data = getSetOptions()[gen > 3 ? 1 : gen === 1 ? 5 : 3]; - // callback(data); - // } - //}); setStartup("#p1"); setStartup("#p2"); $(".move-selector").select2({ diff --git a/script_res/damage_MASTER.js b/script_res/damage_MASTER.js index 049843d..9cbfc7f 100644 --- a/script_res/damage_MASTER.js +++ b/script_res/damage_MASTER.js @@ -240,8 +240,14 @@ function addLevelDesc(attacker, defender, description) { description.defenderLevel = defender.level; } -function getMoveEffectiveness(move, type, otherType, isGhostRevealed, isGravity, defItem, isStrongWinds) { - if (isGhostRevealed && type === "Ghost" && (move.type === "Normal" || move.type === "Fighting")) { +function getMoveEffectiveness(move, type, otherType, isGhostRevealed, isGravity, defItem, isStrongWinds, isTeraShell) { + if (isTeraShell) { + return 0.5; + } + else if (move.type == "Stellar" && move.name == "Tera Blast") { + return 2; + } + else if (isGhostRevealed && type === "Ghost" && (move.type === "Normal" || move.type === "Fighting")) { return 1; } else if ((isGravity || defItem == "Iron Ball" || move.name == "Thousand Arrows") && type === "Flying" && move.type === "Ground") { return 1; @@ -351,7 +357,7 @@ function checkTrace(source, target) { function checkNeutralGas(p1, p2, isNGas) { var cannotSupress = ['As One', 'Battle Bond', 'Comatose', 'Disguise', 'Gulp Missile', 'Ice Face', 'Multitype', - 'Power Construct', 'Protosynthesis', 'Quark Drive', 'RKS System', 'Schooling', 'Shields Down', 'Stance Change', 'Zero to Hero']; + 'Power Construct', 'RKS System', 'Schooling', 'Shields Down', 'Stance Change', 'Zero to Hero']; if (isNGas) { if (cannotSupress.indexOf(p1.ability) == -1 && p1.item !== 'Ability Shield') p1.ability = ''; if (cannotSupress.indexOf(p2.ability) == -1 && p2.item !== 'Ability Shield') p2.ability = ''; @@ -359,8 +365,12 @@ function checkNeutralGas(p1, p2, isNGas) { } function checkAirLock(pokemon, field) { - if (pokemon.ability === "Air Lock" || pokemon.ability === "Cloud Nine") { + if (['Air Lock', 'Cloud Nine'].indexOf(pokemon.ability) !== -1) { + field.clearWeather(); + } + else if (pokemon.ability === 'Teraform Zero') { field.clearWeather(); + field.clearTerrain(); } } @@ -390,7 +400,7 @@ function checkMimicry(pokemon, terrain) { } function checkTerastal(pokemon) { - if (pokemon.isTerastalize) { + if (pokemon.isTerastalize && pokemon.tera_type !== 'Stellar') { pokemon.teraSTAB1 = pokemon.type1; pokemon.teraSTAB2 = pokemon.type2; pokemon.type1 = pokemon.tera_type; @@ -664,6 +674,11 @@ function checkConditionalPriority(move, terrain) { move.isPriority = true; } +function checkConditionalSpread(move, terrain, attacker, attIsGrounded) { + if ((move.name == "Expanding Force" && terrain == "Psychic" && attIsGrounded) || (move.name == "Tera Starstorm" && attacker.name == "Terapagos-Stellar")) + move.isSpread = true; +} + function checkContactOverride(move, attacker) { if (move.makesContact && (attacker.item === 'Protective Pads' || (attacker.item === 'Punching Glove' && move.isPunch) || attacker.ability === "Long Reach")) move.makesContact = false; @@ -1168,9 +1183,10 @@ function basePowerFunc(move, description, turnOrder, attacker, defender, field, basePower = p <= 1 ? 200 : p <= 4 ? 150 : p <= 9 ? 100 : p <= 16 ? 80 : p <= 32 ? 40 : 20; description.moveBP = basePower; break; - //c.iii. Crush Grip, Wring Out + //c.iii. Crush Grip, Wring Out, Hard Press case "Crush Grip": case "Wring Out": + case "Hard Press": basePower = Math.floor(pokeRound(120 * 100 * Math.floor(attacker.curHP * 0x1000 / attacker.maxHP) / 0x1000) / 100); description.moveBP = basePower; break; @@ -1488,7 +1504,6 @@ function calcBPMods(attacker, defender, field, move, description, ateIzeBoosted, } //r. Expanding Force else if (move.name === "Expanding Force" && field.terrain == "Psychic" && attIsGrounded) { - move.isSpread = true; bpMods.push(0x1800); description.moveBP = move.bp * 1.5; } @@ -1594,7 +1609,8 @@ function calcAttack(move, attacker, defender, description, isCritical, defAbilit else if (move.name === "Spectral Thief" && defender.boosts[attackStat] > 0) { description.attackBoost = Math.min(6, attacker.boosts[attackStat] + defender.boosts[attackStat]); attack = getModifiedStat(attackSource.rawStats[attackStat], Math.min(6, attacker.boosts[attackStat] + defender.boosts[attackStat])); - } else if (move.name === "Meteor Beam") { + } + else if (["Meteor Beam", "Electro Shot"].indexOf(move.name) !== -1) { description.attackBoost = Math.min(6, attackSource.boosts[attackStat] + 1); attack = getModifiedStat(attackSource.rawStats[attackStat], Math.min(6, attackSource.boosts[attackStat] + 1)); } //c. Crit @@ -1893,7 +1909,8 @@ function calcGeneralMods(baseDamage, move, attacker, defender, defAbility, field } } else { - if (move.type === attacker.tera_type && (attacker.teraSTAB1 === attacker.tera_type || attacker.teraSTAB2 === attacker.tera_type)) { + if ((move.type === attacker.tera_type && (attacker.teraSTAB1 === attacker.tera_type || attacker.teraSTAB2 === attacker.tera_type)) + || (attacker.tera_type === 'Stellar' && (attacker.type1 === move.type || attacker.type2 === move.type))) { if (attacker.ability === "Adaptability") { stabMod = 0x2400; description.attackerAbility = attacker.ability; @@ -1902,7 +1919,8 @@ function calcGeneralMods(baseDamage, move, attacker, defender, defAbility, field } } else if ((move.type !== attacker.tera_type && (attacker.teraSTAB1 === move.type || attacker.teraSTAB2 === move.type)) - || move.type === attacker.tera_type) { + || move.type === attacker.tera_type + || (attacker.tera_type === 'Stellar' && (attacker.type1 !== move.type || attacker.type2 !== move.type))) { if (attacker.ability === "Adaptability" && move.type === attacker.tera_type) { stabMod = 0x2000; description.attackerAbility = attacker.ability; diff --git a/script_res/damage_SV.js b/script_res/damage_SV.js index 16f6e84..6df9db6 100644 --- a/script_res/damage_SV.js +++ b/script_res/damage_SV.js @@ -64,8 +64,12 @@ function GET_DAMAGE_SV(attacker, defender, move, field) { var moveDescName = move.name; var isQuarteredByProtect = false; + var attIsGrounded = pIsGrounded(attacker, field); + var defIsGrounded = pIsGrounded(defender, field); + checkMoveTypeChange(move, field, attacker); checkConditionalPriority(move, field.terrain); + checkConditionalSpread(move, field.terrain, attacker, attIsGrounded); checkContactOverride(move, attacker); if (attacker.isDynamax) @@ -115,8 +119,8 @@ function GET_DAMAGE_SV(attacker, defender, move, field) { [move, description, ateIzeBoosted] = ateIzeTypeChange(move, attacker, description); } - var typeEffect1 = getMoveEffectiveness(move, defender.type1, defender.type2, ["Scrappy", "Mind's Eye"].indexOf(attacker.ability) != -1 || field.isForesight, field.isGravity, defender.item, field.weather === "Strong Winds"); - var typeEffect2 = defender.type2 && defender.type2 !== defender.type1 ? getMoveEffectiveness(move, defender.type2, defender.type1, ["Scrappy", "Mind's Eye"].indexOf(attacker.ability) != -1 || field.isForesight, field.isGravity, defender.item, field.weather === "Strong Winds") : 1; + var typeEffect1 = getMoveEffectiveness(move, defender.type1, defender.type2, ["Scrappy", "Mind's Eye"].indexOf(attacker.ability) != -1 || field.isForesight, field.isGravity, defender.item, field.weather === "Strong Winds", defender.ability === 'Tera Shell' && defender.curHP === defender.maxHP); + var typeEffect2 = defender.type2 && defender.type2 !== defender.type1 && move.type !== 'Stellar' ? getMoveEffectiveness(move, defender.type2, defender.type1, ["Scrappy", "Mind's Eye"].indexOf(attacker.ability) != -1 || field.isForesight, field.isGravity, defender.item, field.weather === "Strong Winds", defender.ability === 'Tera Shell' && defender.curHP === defender.maxHP) : 1; var typeEffectiveness = typeEffect1 * typeEffect2; immuneBuildDesc = immunityChecks(move, attacker, defender, field, description, defAbility, typeEffectiveness); if (immuneBuildDesc !== -1) return immuneBuildDesc; @@ -130,8 +134,6 @@ function GET_DAMAGE_SV(attacker, defender, move, field) { description.hits = move.hits; } var turnOrder = attacker.stats[SP] > defender.stats[SP] ? "FIRST" : "LAST"; - var attIsGrounded = pIsGrounded(attacker, field); - var defIsGrounded = pIsGrounded(defender, field); //////////////////////////////// ////////// BASE POWER ////////// diff --git a/script_res/move_data.js b/script_res/move_data.js index 3cd9163..36e51da 100644 --- a/script_res/move_data.js +++ b/script_res/move_data.js @@ -5694,6 +5694,95 @@ var MOVES_SV_NATDEX = $.extend(true, {}, MOVES_SS_NATDEX, { type: 'Grass', category: 'Physical', }, + //Indigo Disk new additions + 'Electro Shot': { + bp: 130, + type: 'Electric', + category: 'Special', + }, + 'Tera Starstorm': { + bp: 120, + type: 'Normal', + category: 'Special', + }, + 'Fickle Beam': { + bp: 80, + type: 'Dragon', + category: 'Special', + canDouble: true, + }, + 'Burning Bulwark': { + type: 'Fire', + category: 'Status', + isPriority: true, + }, + 'Thunderclap': { + bp: 70, + type: 'Electric', + category: 'Special', + isPriority: true, + }, + 'Mighty Cleave': { + bp: 95, + type: 'Rock', + category: 'Physical', + isSlice: true, + }, + 'Tachyon Cutter': { + bp: 50, + type: 'Steel', + category: 'Special', + isTwoHit: true, + isSlice: true, + }, + 'Hard Press': { + bp: 1, + type: 'Steel', + category: 'Physical', + makesContact: true, + }, + 'Dragon Cheer': { + type: 'Dragon', + category: 'Status', + }, + 'Alluring Voice': { + bp: 80, + type: 'Fairy', + category: 'Special', + hasSecondaryEffect: true, + }, + 'Temper Fire': { + bp: 75, + type: 'Fire', + category: 'Special', + canDouble: true, + }, + 'Supercharged Slam': { + bp: 100, + type: 'Electric', + category: 'Physical', + makesContact: true, + }, + 'Psychic Noise': { + bp: 75, + type: 'Psychic', + category: 'Special', + hasSecondaryEffect: true, + }, + 'Upper Hand': { + bp: 65, + type: 'Fighting', + category: 'Physical', + hasSecondaryEffect: true, + makesContact: true, + isPriority: true, + }, + 'Malignant Chain': { + bp: 100, + type: 'Poison', + category: 'Special', + hasSecondaryEffect: true, + }, }); var MOVES_SV = $.extend(true, {}, MOVES_SV_NATDEX, {}); @@ -5736,13 +5825,9 @@ var MOVES_SV = $.extend(true, {}, MOVES_SV_NATDEX, {}); //deleted SV moves 'Submission', 'Skull Bash', 'Hyper Fang', 'Mind Reader', 'Vital Throw', 'Hail', 'Nature Power', 'Magic Coat', 'Revenge', 'Grudge', 'Aromatherapy', 'Psycho Shift', 'Autotomize', 'Dual Chop', - 'Leaf Tornado', 'Mat Block', 'Crafty Shield', 'Flower Shield', 'Venom Drench', 'Powder', 'Power-Up Punch', 'Dragon Hammer', - 'Eternabeam', + 'Leaf Tornado', 'Mat Block', 'Crafty Shield', 'Flower Shield', 'Venom Drench', 'Powder', 'Power-Up Punch', + 'Eternabeam', 'Gear Grind', 'Head Charge', 'Lovely Kiss', 'Trick-or-Treat', 'Bonemerang', 'Octazooka', "King's Shield", + 'Kinesis', 'Electrify', 'Light of Ruin', //unusable SV moves 'Blazing Torque', 'Wicked Torque', 'Noxious Torque', 'Combat Torque', 'Magical Torque', - //currently unusable SV moves that might be usable later - 'Freeze Shock', 'Ice Burn', 'Gear Grind', 'Conversion', 'Head Charge', 'Lovely Kiss', 'Trick-or-Treat', - 'Rock Wrecker', 'Bonemerang', 'Fusion Bolt', 'Octazooka', 'Fusion Flare', 'Bolt Strike', 'Sparkling Aria', - 'Triple Kick', 'Blue Flare', 'Glaciate', "King's Shield", 'Sketch', 'Kinesis', 'Electrify', 'Conversion 2', - 'Light of Ruin', 'Floral Healing', 'Topsy-Turvy', ].forEach(e => delete MOVES_SV[e]); diff --git a/script_res/pokedex.js b/script_res/pokedex.js index 4efa63f..626bf07 100644 --- a/script_res/pokedex.js +++ b/script_res/pokedex.js @@ -17597,6 +17597,150 @@ var POKEDEX_SV_NATDEX = $.extend(true, {}, POKEDEX_LA, { "w": 39.8, "ab": "Sturdy", }, + //Indigo Disk DLC new additions + "Hydrapple": { + "t1": "Grass", + "t2": "Dragon", + "bs": { + "hp": 106, + "at": 80, + "df": 110, + "sa": 120, + "sd": 80, + "sp": 44, + }, + "w": 93.0, + "ab": "Regenerator", + }, + "Archaludon": { + "t1": "Steel", + "t2": "Dragon", + "bs": { + "hp": 90, + "at": 105, + "df": 130, + "sa": 125, + "sd": 65, + "sp": 85, + }, + "w": 60.0, + "ab": "Stalwart", + }, + "Gouging Fire": { + "t1": "Fire", + "t2": "Dragon", + "bs": { + "hp": 105, + "at": 115, + "df": 121, + "sa": 65, + "sd": 93, + "sp": 91, + }, + "w": 590.0, + "ab": "Protosynthesis", + }, + "Raging Bolt": { + "t1": "Electric", + "t2": "Dragon", + "bs": { + "hp": 125, + "at": 73, + "df": 91, + "sa": 137, + "sd": 89, + "sp": 75, + }, + "w": 480.0, + "ab": "Protosynthesis", + }, + "Iron Boulder": { + "t1": "Rock", + "t2": "Psychic", + "bs": { + "hp": 90, + "at": 120, + "df": 80, + "sa": 68, + "sd": 108, + "sp": 124, + }, + "w": 162.5, + "ab": "Quark Drive", + }, + "Iron Crown": { + "t1": "Steel", + "t2": "Psychic", + "bs": { + "hp": 90, + "at": 72, + "df": 100, + "sa": 122, + "sd": 108, + "sp": 98, + }, + "w": 156.0, + "ab": "Quark Drive", + }, + "Terapagos": { + "t1": "Normal", + "bs": { + "hp": 90, + "at": 65, + "df": 85, + "sa": 65, + "sd": 85, + "sp": 60, + }, + "w": 6.5, + "ab": "Tera Shift", + 'formes': [ + 'Terapagos', + 'Terapagos-Terastal', + ], + }, + "Terapagos-Terastal": { + "t1": "Normal", + "bs": { + "hp": 95, + "at": 95, + "df": 110, + "sa": 105, + "sd": 110, + "sp": 85, + }, + "w": 16.0, + "ab": "Tera Shell", + isAlternateForme: true, + }, + "Terapagos-Stellar": { + "t1": "Normal", + "bs": { + "hp": 160, + "at": 105, + "df": 110, + "sa": 130, + "sd": 110, + "sp": 85, + }, + "w": 77.0, + "ab": "Teraform Zero", + isAlternateForme: true, + }, + "Pecharunt": { + "t1": "Poison", + "t2": "Ghost", + "bs": { + "hp": 88, + "at": 88, + "df": 160, + "sa": 88, + "sd": 88, + "sp": 88, + }, + "w": 0.3, + "ab": "Poison Puppeteer", + }, }); ['Butterfree', 'Pikachu', 'Meowth', 'Machamp', 'Kingler', 'Lapras', 'Eevee', 'Snorlax', 'Garbodor', 'Melmetal', @@ -17682,6 +17826,23 @@ var POKEDEX_SV = {}; //Forms for Teal Mask Pokemon 'Sandshrew-Alola', 'Sandslash-Alola', 'Vulpix-Alola', 'Ninetales-Alola', 'Geodude-Alola', 'Graveler-Alola', 'Golem-Alola', 'Weezing-Galar', 'Shaymin-Sky', 'Ursaluna-Bloodmoon', 'Ogerpon-Hearthflame', 'Ogerpon-Wellspring', 'Ogerpon-Cornerstone', + //Indigo Disk DLC Pokemon + 'Bulbasaur', 'Ivysaur', 'Venusaur', 'Squirtle', 'Wartortle', 'Blastoise', 'Oddish', 'Gloom', 'Vileplume', 'Tentacool', 'Tentacruel', 'Doduo', 'Dodrio', + 'Seel', 'Dewgong', 'Exeggcute', 'Exeggutor', 'Hitmonlee', 'Hitmonchan', 'Rhyhorn', 'Rhydon', 'Horsea', 'Seadra', 'Electabuzz', 'Magmar', 'Lapras', + 'Porygon', 'Chikorita', 'Bayleef', 'Meganium', 'Totodile', 'Croconaw', 'Feraligatr', 'Chinchou', 'Lanturn', 'Bellossom', 'Snubbull', 'Granbull', + 'Skarmory', 'Kingdra', 'Porygon2', 'Smeargle', 'Tyrogue', 'Hitmontop', 'Elekid', 'Magby', 'Raikou', 'Entei', 'Suicune', 'Lugia', 'Ho-Oh', + 'Treecko', 'Grovyle', 'Sceptile', 'Torchic', 'Combusken', 'Blaziken', 'Mudkip', 'Marshtomp', 'Swampert', 'Plusle', 'Minun', + 'Trapinch', 'Vibrava', 'Flygon', 'Beldum', 'Metang', 'Metagross', 'Regirock', 'Regice', 'Registeel', 'Latias', 'Latios', + 'Deoxys', 'Cranidos', 'Rampardos', 'Shieldon', 'Bastiodon', 'Rhyperior', 'Electivire', + 'Magmortar', 'Porygon-Z', 'Regigigas', 'Snivy', 'Servine', 'Serperior', 'Tepig', 'Pignite', 'Emboar', 'Blitzle', 'Zebstrika', 'Drilbur', 'Excadrill', + 'Cottonee', 'Whimsicott', 'Scraggy', 'Scrafty', 'Minccino', 'Cinccino', 'Solosis', 'Duosion', 'Reuniclus', 'Joltik', 'Galvantula', 'Golett', 'Golurk', + 'Cobalion', 'Terrakion', 'Virizion', 'Reshiram', 'Zekrom', 'Kyurem', 'Keldeo', 'Inkay', 'Malamar', 'Espurr', 'Meowstic', 'Litten', + 'Torracat', 'Incineroar', 'Popplio', 'Brionne', 'Primarina', 'Pikipek', 'Trumbeak', 'Toucannon', 'Dewpider', 'Araquanid', 'Comfey', 'Minior', + 'Cosmog', 'Cosmoem', 'Solgaleo', 'Lunala', 'Necrozma', 'Milcery', 'Alcremie', 'Duraludon', 'Hydrapple', 'Archaludon', 'Gouging Fire', 'Raging Bolt', + 'Iron Boulder', 'Iron Crown', 'Terapagos', 'Pecharunt', + //Forms for Indigo Disk Pokemon + 'Exeggutor-Alola', 'Deoxys-Attack', 'Deoxys-Defense', 'Deoxys-Speed', 'Kyurem-Black', 'Kyurem-White', 'Necrozma-Dusk-Mane', 'Necrozma-Dawn-Wings', + 'Terapagos-Terastal','Terapagos-Stellar', ].forEach(e => POKEDEX_SV[e] = POKEDEX_SV_NATDEX[e]); //performs deep copy; necessary to preserve form data for nat dex From a14aaa09f5989e27aa7782afc1337c9299bf4fb3 Mon Sep 17 00:00:00 2001 From: nerd-of-now Date: Thu, 14 Dec 2023 01:20:16 -0500 Subject: [PATCH 11/24] Indigo Disk Update 1.1 - Updating the blurb to talk about Indigo Disk From d71b9ef710585eab74095e106bd919aa2d5c7a28 Mon Sep 17 00:00:00 2001 From: nerd-of-now Date: Fri, 15 Dec 2023 03:36:53 -0500 Subject: [PATCH 12/24] Indigo Disk Update 2 - Made Eviolite work with Duraludon - Updated Tera Starstorm to deal neutral damage if the attacker is Terapagos-Stellar (it may be due to Tera Stellar instead of Terapagos' form, need to keep an eye on that) - Updated Tera Shell to only apply if the type matchup is greater than or equal to a not very effective hit - Still unknown: the full effects of Tera Stellar Tera Blast, how much Tera Stellar boosts attacks, how Adaptability interacts with it all --- script_res/ap_calc.js | 39 +++++++++++++++++++++++++------------ script_res/damage_MASTER.js | 7 +++++-- script_res/damage_SV.js | 4 ++-- script_res/pokedex.js | 1 + 4 files changed, 35 insertions(+), 16 deletions(-) diff --git a/script_res/ap_calc.js b/script_res/ap_calc.js index a14508e..d77abf1 100644 --- a/script_res/ap_calc.js +++ b/script_res/ap_calc.js @@ -916,6 +916,7 @@ function findDamageResult(resultMoveObj) { } } +var terapagosCheck = {"p1": false, "p2": false}; function Pokemon(pokeInfo) { var setName = pokeInfo.find("input.set-selector").val(); @@ -971,37 +972,51 @@ function Pokemon(pokeInfo) { pokeInfo.find("select.ability").trigger('change.select2'); } } + terapagosCheck[pokeInfo.prop('id')] = false; } else if (this.name === 'Terapagos-Terastal') { pokeInfo.find(".tera-type").val('Stellar'); pokeInfo.find(".tera-type").prop("disabled", true); if (pokeInfo.find(".tera").prop("checked")) { this.name = 'Terapagos-Stellar'; - pokeInfo.find(".hp .base").val(pokedex['Terapagos-Stellar'].bs.hp); - pokeInfo.find(".at .base").val(pokedex['Terapagos-Stellar'].bs.at); - pokeInfo.find(".df .base").val(pokedex['Terapagos-Stellar'].bs.df); - pokeInfo.find(".sa .base").val(pokedex['Terapagos-Stellar'].bs.sa); - pokeInfo.find(".sd .base").val(pokedex['Terapagos-Stellar'].bs.sd); - pokeInfo.find(".sp .base").val(pokedex['Terapagos-Stellar'].bs.sp); + if (!terapagosCheck[pokeInfo.prop('id')]) { + pokeInfo.find(".hp .base").val(pokedex['Terapagos-Stellar'].bs.hp); + pokeInfo.find(".at .base").val(pokedex['Terapagos-Stellar'].bs.at); + pokeInfo.find(".df .base").val(pokedex['Terapagos-Stellar'].bs.df); + pokeInfo.find(".sa .base").val(pokedex['Terapagos-Stellar'].bs.sa); + pokeInfo.find(".sd .base").val(pokedex['Terapagos-Stellar'].bs.sd); + pokeInfo.find(".sp .base").val(pokedex['Terapagos-Stellar'].bs.sp); + calcHP(pokeInfo); + calcStats(pokeInfo); + terapagosCheck[pokeInfo.prop('id')] = true; + } pokeInfo.find(".weight").val(pokedex['Terapagos-Stellar'].w); pokeInfo.find("select.ability").val(pokedex['Terapagos-Stellar'].ab); pokeInfo.find("select.ability").trigger('change.select2'); + pokeInfo.find(".forme").prop("disabled", true); } else { this.name = 'Terapagos-Terastal'; - pokeInfo.find(".hp .base").val(pokedex['Terapagos-Terastal'].bs.hp); - pokeInfo.find(".at .base").val(pokedex['Terapagos-Terastal'].bs.at); - pokeInfo.find(".df .base").val(pokedex['Terapagos-Terastal'].bs.df); - pokeInfo.find(".sa .base").val(pokedex['Terapagos-Terastal'].bs.sa); - pokeInfo.find(".sd .base").val(pokedex['Terapagos-Terastal'].bs.sd); - pokeInfo.find(".sp .base").val(pokedex['Terapagos-Terastal'].bs.sp); + if (terapagosCheck[pokeInfo.prop('id')]) { + pokeInfo.find(".hp .base").val(pokedex['Terapagos-Terastal'].bs.hp); + pokeInfo.find(".at .base").val(pokedex['Terapagos-Terastal'].bs.at); + pokeInfo.find(".df .base").val(pokedex['Terapagos-Terastal'].bs.df); + pokeInfo.find(".sa .base").val(pokedex['Terapagos-Terastal'].bs.sa); + pokeInfo.find(".sd .base").val(pokedex['Terapagos-Terastal'].bs.sd); + pokeInfo.find(".sp .base").val(pokedex['Terapagos-Terastal'].bs.sp); + calcHP(pokeInfo); + calcStats(pokeInfo); + terapagosCheck[pokeInfo.prop('id')] = false; + } pokeInfo.find(".weight").val(pokedex['Terapagos-Terastal'].w); pokeInfo.find("select.ability").val(pokedex['Terapagos-Terastal'].ab); pokeInfo.find("select.ability").trigger('change.select2'); + pokeInfo.find(".forme").prop("disabled", false); } } else { pokeInfo.find(".tera-type").prop("disabled", false); + terapagosCheck[pokeInfo.prop('id')] = false; } this.type1 = pokeInfo.find(".type1").val(); diff --git a/script_res/damage_MASTER.js b/script_res/damage_MASTER.js index 9cbfc7f..544de29 100644 --- a/script_res/damage_MASTER.js +++ b/script_res/damage_MASTER.js @@ -240,10 +240,13 @@ function addLevelDesc(attacker, defender, description) { description.defenderLevel = defender.level; } -function getMoveEffectiveness(move, type, otherType, isGhostRevealed, isGravity, defItem, isStrongWinds, isTeraShell) { - if (isTeraShell) { +function getMoveEffectiveness(move, type, otherType, isGhostRevealed, isGravity, defItem, isStrongWinds, isTeraShell, attackerName) { + if (isTeraShell && typeChart[move.type][type] >= 0.5) { return 0.5; } + else if (attackerName === 'Terapagos-Stellar' && move.name === 'Tera Starstorm') { + return 1; + } else if (move.type == "Stellar" && move.name == "Tera Blast") { return 2; } diff --git a/script_res/damage_SV.js b/script_res/damage_SV.js index 6df9db6..363dd03 100644 --- a/script_res/damage_SV.js +++ b/script_res/damage_SV.js @@ -119,8 +119,8 @@ function GET_DAMAGE_SV(attacker, defender, move, field) { [move, description, ateIzeBoosted] = ateIzeTypeChange(move, attacker, description); } - var typeEffect1 = getMoveEffectiveness(move, defender.type1, defender.type2, ["Scrappy", "Mind's Eye"].indexOf(attacker.ability) != -1 || field.isForesight, field.isGravity, defender.item, field.weather === "Strong Winds", defender.ability === 'Tera Shell' && defender.curHP === defender.maxHP); - var typeEffect2 = defender.type2 && defender.type2 !== defender.type1 && move.type !== 'Stellar' ? getMoveEffectiveness(move, defender.type2, defender.type1, ["Scrappy", "Mind's Eye"].indexOf(attacker.ability) != -1 || field.isForesight, field.isGravity, defender.item, field.weather === "Strong Winds", defender.ability === 'Tera Shell' && defender.curHP === defender.maxHP) : 1; + var typeEffect1 = getMoveEffectiveness(move, defender.type1, defender.type2, ["Scrappy", "Mind's Eye"].indexOf(attacker.ability) != -1 || field.isForesight, field.isGravity, defender.item, field.weather === "Strong Winds", defender.ability === 'Tera Shell' && defender.curHP === defender.maxHP, attacker.name); + var typeEffect2 = defender.type2 && defender.type2 !== defender.type1 && move.type !== 'Stellar' ? getMoveEffectiveness(move, defender.type2, defender.type1, ["Scrappy", "Mind's Eye"].indexOf(attacker.ability) != -1 || field.isForesight, field.isGravity, defender.item, field.weather === "Strong Winds", defender.ability === 'Tera Shell' && defender.curHP === defender.maxHP, attacker.name) : 1; var typeEffectiveness = typeEffect1 * typeEffect2; immuneBuildDesc = immunityChecks(move, attacker, defender, field, description, defAbility, typeEffectiveness); if (immuneBuildDesc !== -1) return immuneBuildDesc; diff --git a/script_res/pokedex.js b/script_res/pokedex.js index 626bf07..7710d34 100644 --- a/script_res/pokedex.js +++ b/script_res/pokedex.js @@ -17598,6 +17598,7 @@ var POKEDEX_SV_NATDEX = $.extend(true, {}, POKEDEX_LA, { "ab": "Sturdy", }, //Indigo Disk DLC new additions + "Duraludon": { "canEvolve": true, }, "Hydrapple": { "t1": "Grass", "t2": "Dragon", From 5d5358f5d4ac2691aa1e679817a121b00c1b36b5 Mon Sep 17 00:00:00 2001 From: nerd-of-now Date: Fri, 15 Dec 2023 19:04:24 -0500 Subject: [PATCH 13/24] Indigo Disk Update 3 - Fixed up all the issues with Stellar based on current knowledge (including readjusting it to be an actual type, the BP boost to Tera Blast, the damage boost based on typing, and the BP change for moves under 60 BP) - The calc now resets Terapagos' type when Terastalizing since it works like that in game - All Terapagos forms are now forced to have Tera Stellar to match how it works in game - Added the buff to Mist Ball and Luster Purge - Fixed the names for Temper Flare and Supercell Slam --- script_res/ap_calc.js | 99 +++++++++++++++++++------------------ script_res/damage_MASTER.js | 44 +++++++++++------ script_res/damage_SV.js | 4 +- script_res/move_data.js | 13 +++-- script_res/type_data.js | 82 ++++++++++++++++++++++++++++++ 5 files changed, 174 insertions(+), 68 deletions(-) diff --git a/script_res/ap_calc.js b/script_res/ap_calc.js index d77abf1..338de9b 100644 --- a/script_res/ap_calc.js +++ b/script_res/ap_calc.js @@ -280,31 +280,30 @@ function autoSetRuin() { else $("input:checkbox[id='beads-of-ruin']").prop("checked", false) } -function autoSetTerrain() -{ +function autoSetTerrain() { var ability1 = $("#p1 select.ability").val() var ability2 = $("#p2 select.ability").val() var abOn1 = $("#p1").find(".abilityToggle").prop("checked") var abOn2 = $("#p2").find(".abilityToggle").prop("checked") //Grassy Terrain check is first due to the need to check for abilityToggle with Seed Sower - if ((ability1 == "Grassy Surge" || ability2 == "Grassy Surge" || (ability1 == "Seed Sower" && abOn1) || (ability2 == "Seed Sower" && abOn2))) { - $("input:radio[id='grassy']").prop("checked", true) + if ([ability1, ability2].indexOf("Grassy Surge") !== -1 || (ability1 == "Seed Sower" && abOn1) || (ability2 == "Seed Sower" && abOn2)) { + $("input:radio[id='grassy']").prop("checked", true); lastTerrain = 'grassy'; } - else if ((["Electric Surge", "Hadron Engine"].indexOf(ability1) !== -1 || ["Electric Surge", "Hadron Engine"].indexOf(ability2) !== -1)) { - $("input:radio[id='electric']").prop("checked", true) + else if ([ability1, ability2].indexOf("Electric Surge") != -1 || [ability1, ability2].indexOf("Hadron Engine") != -1) { + $("input:radio[id='electric']").prop("checked", true); lastTerrain = 'electric'; } - else if((ability1 == "Misty Surge" || ability2 == "Misty Surge")){ - $("input:radio[id='misty']").prop("checked", true) + else if ([ability1, ability2].indexOf("Misty Surge") !== -1) { + $("input:radio[id='misty']").prop("checked", true); lastTerrain = 'misty'; } - else if((ability1 == "Psychic Surge" || ability2 == "Psychic Surge")){ - $("input:radio[id='psychic']").prop("checked", true) + else if ([ability1, ability2].indexOf("Psychic Surge") !== -1) { + $("input:radio[id='psychic']").prop("checked", true); lastTerrain = 'psychic'; } else - $("input:radio[id='noterrain']").prop("checked", true) + $("input:radio[id='noterrain']").prop("checked", true); } function autosetWeather(ability, i, abOn) { @@ -974,44 +973,50 @@ function Pokemon(pokeInfo) { } terapagosCheck[pokeInfo.prop('id')] = false; } - else if (this.name === 'Terapagos-Terastal') { + else if (this.name && this.name.indexOf('Terapagos') !== -1) { pokeInfo.find(".tera-type").val('Stellar'); pokeInfo.find(".tera-type").prop("disabled", true); - if (pokeInfo.find(".tera").prop("checked")) { - this.name = 'Terapagos-Stellar'; - if (!terapagosCheck[pokeInfo.prop('id')]) { - pokeInfo.find(".hp .base").val(pokedex['Terapagos-Stellar'].bs.hp); - pokeInfo.find(".at .base").val(pokedex['Terapagos-Stellar'].bs.at); - pokeInfo.find(".df .base").val(pokedex['Terapagos-Stellar'].bs.df); - pokeInfo.find(".sa .base").val(pokedex['Terapagos-Stellar'].bs.sa); - pokeInfo.find(".sd .base").val(pokedex['Terapagos-Stellar'].bs.sd); - pokeInfo.find(".sp .base").val(pokedex['Terapagos-Stellar'].bs.sp); - calcHP(pokeInfo); - calcStats(pokeInfo); - terapagosCheck[pokeInfo.prop('id')] = true; + if (this.name === 'Terapagos-Terastal') { + if (pokeInfo.find(".tera").prop("checked")) { + this.name = 'Terapagos-Stellar'; + if (!terapagosCheck[pokeInfo.prop('id')]) { + pokeInfo.find(".type1").val(pokedex['Terapagos-Stellar'].t1); + pokeInfo.find(".type2").val(pokedex['Terapagos-Stellar'].t2); + pokeInfo.find(".hp .base").val(pokedex['Terapagos-Stellar'].bs.hp); + pokeInfo.find(".at .base").val(pokedex['Terapagos-Stellar'].bs.at); + pokeInfo.find(".df .base").val(pokedex['Terapagos-Stellar'].bs.df); + pokeInfo.find(".sa .base").val(pokedex['Terapagos-Stellar'].bs.sa); + pokeInfo.find(".sd .base").val(pokedex['Terapagos-Stellar'].bs.sd); + pokeInfo.find(".sp .base").val(pokedex['Terapagos-Stellar'].bs.sp); + calcHP(pokeInfo); + calcStats(pokeInfo); + pokeInfo.find(".weight").val(pokedex['Terapagos-Stellar'].w); + pokeInfo.find("select.ability").val(pokedex['Terapagos-Stellar'].ab); + pokeInfo.find("select.ability").trigger('change.select2'); + terapagosCheck[pokeInfo.prop('id')] = true; + } + pokeInfo.find(".forme").prop("disabled", true); } - pokeInfo.find(".weight").val(pokedex['Terapagos-Stellar'].w); - pokeInfo.find("select.ability").val(pokedex['Terapagos-Stellar'].ab); - pokeInfo.find("select.ability").trigger('change.select2'); - pokeInfo.find(".forme").prop("disabled", true); - } - else { - this.name = 'Terapagos-Terastal'; - if (terapagosCheck[pokeInfo.prop('id')]) { - pokeInfo.find(".hp .base").val(pokedex['Terapagos-Terastal'].bs.hp); - pokeInfo.find(".at .base").val(pokedex['Terapagos-Terastal'].bs.at); - pokeInfo.find(".df .base").val(pokedex['Terapagos-Terastal'].bs.df); - pokeInfo.find(".sa .base").val(pokedex['Terapagos-Terastal'].bs.sa); - pokeInfo.find(".sd .base").val(pokedex['Terapagos-Terastal'].bs.sd); - pokeInfo.find(".sp .base").val(pokedex['Terapagos-Terastal'].bs.sp); - calcHP(pokeInfo); - calcStats(pokeInfo); - terapagosCheck[pokeInfo.prop('id')] = false; + else { + this.name = 'Terapagos-Terastal'; + if (terapagosCheck[pokeInfo.prop('id')]) { + pokeInfo.find(".type1").val(pokedex['Terapagos-Terastal'].t1); + pokeInfo.find(".type2").val(pokedex['Terapagos-Terastal'].t2); + pokeInfo.find(".hp .base").val(pokedex['Terapagos-Terastal'].bs.hp); + pokeInfo.find(".at .base").val(pokedex['Terapagos-Terastal'].bs.at); + pokeInfo.find(".df .base").val(pokedex['Terapagos-Terastal'].bs.df); + pokeInfo.find(".sa .base").val(pokedex['Terapagos-Terastal'].bs.sa); + pokeInfo.find(".sd .base").val(pokedex['Terapagos-Terastal'].bs.sd); + pokeInfo.find(".sp .base").val(pokedex['Terapagos-Terastal'].bs.sp); + calcHP(pokeInfo); + calcStats(pokeInfo); + pokeInfo.find(".weight").val(pokedex['Terapagos-Terastal'].w); + pokeInfo.find("select.ability").val(pokedex['Terapagos-Terastal'].ab); + pokeInfo.find("select.ability").trigger('change.select2'); + terapagosCheck[pokeInfo.prop('id')] = false; + } + pokeInfo.find(".forme").prop("disabled", false); } - pokeInfo.find(".weight").val(pokedex['Terapagos-Terastal'].w); - pokeInfo.find("select.ability").val(pokedex['Terapagos-Terastal'].ab); - pokeInfo.find("select.ability").trigger('change.select2'); - pokeInfo.find(".forme").prop("disabled", false); } } else { @@ -1279,7 +1284,7 @@ $(".gen").change(function () { pokedex = (localStorage.getItem("dex") == "natdex") ? POKEDEX_SV_NATDEX : POKEDEX_SV; setdex = SETDEX_SV; setdexCustom = SETDEX_CUSTOM_SV; - typeChart = TYPE_CHART_XY; + typeChart = TYPE_CHART_SV; moves = (localStorage.getItem("dex") == "natdex") ? MOVES_SV_NATDEX : MOVES_SV; items = (localStorage.getItem("dex") == "natdex") ? ITEMS_SV_NATDEX : ITEMS_SV; abilities = ABILITIES_SV; @@ -1329,7 +1334,7 @@ $(".gen").change(function () { types.splice(types.indexOf('Typeless'), 1); var teraTypes = $.extend(true, [], types); if (gen >= 2) types.push('Typeless'); - teraTypes.push('Stellar'); + types.splice(types.indexOf('Stellar'), 1); var typeOptions = getSelectOptions(types, undefined, undefined, translate_type); var teraTypeOptions = getSelectOptions(teraTypes, undefined, undefined, translate_type); $("select.type1, select.move-type").find("option").remove().end().append(typeOptions); diff --git a/script_res/damage_MASTER.js b/script_res/damage_MASTER.js index 544de29..3ac76a2 100644 --- a/script_res/damage_MASTER.js +++ b/script_res/damage_MASTER.js @@ -240,14 +240,11 @@ function addLevelDesc(attacker, defender, description) { description.defenderLevel = defender.level; } -function getMoveEffectiveness(move, type, otherType, isGhostRevealed, isGravity, defItem, isStrongWinds, isTeraShell, attackerName) { +function getMoveEffectiveness(move, type, otherType, isGhostRevealed, isGravity, defItem, isStrongWinds, isTeraShell, defIsTera) { if (isTeraShell && typeChart[move.type][type] >= 0.5) { return 0.5; } - else if (attackerName === 'Terapagos-Stellar' && move.name === 'Tera Starstorm') { - return 1; - } - else if (move.type == "Stellar" && move.name == "Tera Blast") { + else if (move.type == "Stellar" && defIsTera) { return 2; } else if (isGhostRevealed && type === "Ghost" && (move.type === "Normal" || move.type === "Fighting")) { @@ -670,6 +667,9 @@ function checkMoveTypeChange(move, field, attacker) { else if ((move.name == "Struggle" && gen >= 2) || (['Beat Up', 'Future Sight', 'Doom Desire'].indexOf(move.name) != -1 && gen <= 4)) { move.type = 'Typeless'; } + else if (move.name === 'Tera Starstorm' && attacker.isTerastalize) { + move.type = 'Stellar'; + } } function checkConditionalPriority(move, terrain) { @@ -1277,12 +1277,19 @@ function basePowerFunc(move, description, turnOrder, attacker, defender, field, if (move.combinePledge !== move.name) description.moveType = move.type; break; - //g.x. Payback, Fisheous Rend, Bolt Beak CONSIDER ISDOUBLE - case "Payback": - basePower = turnOrder === "LAST" ? 100 : 50; + //g.x. Tera Blast Tera-Stellar + case "Tera Blast": + basePower = move.type == 'Stellar' ? 100 : 80; if (basePower !== move.bp) description.moveBP = basePower; break; - //g.xi. Everything else (Assurance, Avalanche, Revenge, Gust, Twister, Pursuit, Round, Stomping Tantrum) CHECK DEFAULT; CURRENTLY ALSO HAS FISHEOUS REND AND BOLT BEAK + //g.xi. Payback, Fisheous Rend, Bolt Beak CURRENTLY USING ISDOUBLE + //case "Payback": + //case "Fisheous Rend": + //case "Bolt Beak": + // basePower = turnOrder === "LAST" ? 100 : 50; + // if (basePower !== move.bp) description.moveBP = basePower; + // break; + //g.xii. Everything else (Assurance, Avalanche, Revenge, Gust, Twister, Pursuit, Round, Stomping Tantrum, Temper Flare) CHECK DEFAULT //h. Item based //h.i. Fling @@ -1574,7 +1581,7 @@ function calcBPMods(attacker, defender, field, move, description, ateIzeBoosted, tempBP = pokeRound(basePower * chainMods(bpMods) / 0x1000); //aa. Tera boost for moves with <60 BP - if (attacker.isTerastalize && attacker.tera_type === move.type && tempBP < 60 && canTeraBoost60BP(move)) { + if (attacker.isTerastalize && [move.type, 'Stellar'].indexOf(attacker.tera_type) !== -1 && tempBP < 60 && canTeraBoost60BP(move)) { bpMods.push(60 / tempBP * 0x1000); description.teraBPBoost = true; } @@ -1911,9 +1918,8 @@ function calcGeneralMods(baseDamage, move, attacker, defender, defAbility, field description.attackerAbility = attacker.ability; } } - else { - if ((move.type === attacker.tera_type && (attacker.teraSTAB1 === attacker.tera_type || attacker.teraSTAB2 === attacker.tera_type)) - || (attacker.tera_type === 'Stellar' && (attacker.type1 === move.type || attacker.type2 === move.type))) { + else if (attacker.tera_type !== 'Stellar') { + if (move.type === attacker.tera_type && (attacker.teraSTAB1 === attacker.tera_type || attacker.teraSTAB2 === attacker.tera_type)) { if (attacker.ability === "Adaptability") { stabMod = 0x2400; description.attackerAbility = attacker.ability; @@ -1921,9 +1927,7 @@ function calcGeneralMods(baseDamage, move, attacker, defender, defAbility, field stabMod = 0x2000; } } - else if ((move.type !== attacker.tera_type && (attacker.teraSTAB1 === move.type || attacker.teraSTAB2 === move.type)) - || move.type === attacker.tera_type - || (attacker.tera_type === 'Stellar' && (attacker.type1 !== move.type || attacker.type2 !== move.type))) { + else if ((move.type !== attacker.tera_type && (attacker.teraSTAB1 === move.type || attacker.teraSTAB2 === move.type)) || move.type === attacker.tera_type) { if (attacker.ability === "Adaptability" && move.type === attacker.tera_type) { stabMod = 0x2000; description.attackerAbility = attacker.ability; @@ -1932,6 +1936,14 @@ function calcGeneralMods(baseDamage, move, attacker, defender, defAbility, field } } } + else { + if ([attacker.type1, attacker.type2].indexOf(move.type) !== -1) { + stabMod = 0x2000; + } + else { + stabMod = 0x1333; + } + } } var applyBurn = (attacker.status === "Burned" && move.category === "Physical" && attacker.ability !== "Guts" && !move.ignoresBurn); description.isBurned = applyBurn; diff --git a/script_res/damage_SV.js b/script_res/damage_SV.js index 363dd03..512d948 100644 --- a/script_res/damage_SV.js +++ b/script_res/damage_SV.js @@ -119,8 +119,8 @@ function GET_DAMAGE_SV(attacker, defender, move, field) { [move, description, ateIzeBoosted] = ateIzeTypeChange(move, attacker, description); } - var typeEffect1 = getMoveEffectiveness(move, defender.type1, defender.type2, ["Scrappy", "Mind's Eye"].indexOf(attacker.ability) != -1 || field.isForesight, field.isGravity, defender.item, field.weather === "Strong Winds", defender.ability === 'Tera Shell' && defender.curHP === defender.maxHP, attacker.name); - var typeEffect2 = defender.type2 && defender.type2 !== defender.type1 && move.type !== 'Stellar' ? getMoveEffectiveness(move, defender.type2, defender.type1, ["Scrappy", "Mind's Eye"].indexOf(attacker.ability) != -1 || field.isForesight, field.isGravity, defender.item, field.weather === "Strong Winds", defender.ability === 'Tera Shell' && defender.curHP === defender.maxHP, attacker.name) : 1; + var typeEffect1 = getMoveEffectiveness(move, defender.type1, defender.type2, ["Scrappy", "Mind's Eye"].indexOf(attacker.ability) != -1 || field.isForesight, field.isGravity, defender.item, field.weather === "Strong Winds", defender.ability === 'Tera Shell' && defender.curHP === defender.maxHP, defender.isTerastalize); + var typeEffect2 = defender.type2 && defender.type2 !== defender.type1 && move.type !== 'Stellar' ? getMoveEffectiveness(move, defender.type2, defender.type1, ["Scrappy", "Mind's Eye"].indexOf(attacker.ability) != -1 || field.isForesight, field.isGravity, defender.item, field.weather === "Strong Winds", defender.ability === 'Tera Shell' && defender.curHP === defender.maxHP, defender.isTerastalize) : 1; var typeEffectiveness = typeEffect1 * typeEffect2; immuneBuildDesc = immunityChecks(move, attacker, defender, field, description, defAbility, typeEffectiveness); if (immuneBuildDesc !== -1) return immuneBuildDesc; diff --git a/script_res/move_data.js b/script_res/move_data.js index 36e51da..436112d 100644 --- a/script_res/move_data.js +++ b/script_res/move_data.js @@ -2496,7 +2496,8 @@ var MOVES_DPP = $.extend(true, {}, MOVES_ADV, { bp: 50, type: 'Dark', category: 'Physical', - makesContact: true + makesContact: true, + canDouble: true, }, 'Pluck': { bp: 60, @@ -5220,6 +5221,12 @@ var MOVES_SV_NATDEX = $.extend(true, {}, MOVES_SS_NATDEX, { 'Glacial Lance': { bp: 120, }, + 'Luster Purge': { + bp: 95, + }, + 'Mist Ball': { + bp: 95, + }, //PLA moves 'Dire Claw': { @@ -5751,13 +5758,13 @@ var MOVES_SV_NATDEX = $.extend(true, {}, MOVES_SS_NATDEX, { category: 'Special', hasSecondaryEffect: true, }, - 'Temper Fire': { + 'Temper Flare': { bp: 75, type: 'Fire', category: 'Special', canDouble: true, }, - 'Supercharged Slam': { + 'Supercell Slam': { bp: 100, type: 'Electric', category: 'Physical', diff --git a/script_res/type_data.js b/script_res/type_data.js index 3d4afb8..8a8b54c 100644 --- a/script_res/type_data.js +++ b/script_res/type_data.js @@ -537,4 +537,86 @@ var TYPE_CHART_XY = $.extend(true, {}, TYPE_CHART_BW, { Typeless: { Fairy: 1 } +}); + +var TYPE_CHART_SV = $.extend(true, {}, TYPE_CHART_XY, { + Normal: { + Stellar: 1 + }, + Grass: { + Stellar: 1 + }, + Fire: { + Stellar: 1 + }, + Water: { + Stellar: 1 + }, + Electric: { + Stellar: 1 + }, + Ice: { + Stellar: 1 + }, + Flying: { + Stellar: 1 + }, + Bug: { + Stellar: 1 + }, + Poison: { + Stellar: 1 + }, + Ground: { + Stellar: 1 + }, + Rock: { + Stellar: 1 + }, + Fighting: { + Stellar: 1 + }, + Psychic: { + Stellar: 1 + }, + Ghost: { + Stellar: 1 + }, + Dragon: { + Stellar: 1 + }, + Dark: { + Stellar: 1 + }, + Steel: { + Stellar: 1 + }, + Fairy: { + Stellar: 1 + }, + Typeless: { + Stellar: 1 + }, + Stellar: { + Normal: 1, + Grass: 1, + Fire: 1, + Water: 1, + Electric: 1, + Ice: 1, + Flying: 1, + Bug: 1, + Poison: 1, + Ground: 1, + Rock: 1, + Fighting: 1, + Psychic: 1, + Ghost: 1, + Dragon: 1, + Dark: 1, + Steel: 1, + Fairy: 1, + Typeless: 1, + Stellar: 1 + }, }); \ No newline at end of file From 8b8906dbac41636e6315f2ffd5436a45266d4b21 Mon Sep 17 00:00:00 2001 From: nerd-of-now Date: Sun, 17 Dec 2023 10:27:59 -0500 Subject: [PATCH 14/24] Indigo Disk Update 3.1 Update to properties of new moves: - Temper Flare is physical and makes contact - Hard Press has a max damage of 100 instead of 120 and is added to the exceptions for the 60 BP Tera Boost - Electro Shot is boosted by Sheer Force - Mighty Cleave makes contact - Alluring Voice and Psychic Noise are sound moves --- script_res/damage_MASTER.js | 7 +++++-- script_res/move_data.js | 7 ++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/script_res/damage_MASTER.js b/script_res/damage_MASTER.js index 3ac76a2..edaac0d 100644 --- a/script_res/damage_MASTER.js +++ b/script_res/damage_MASTER.js @@ -1189,10 +1189,13 @@ function basePowerFunc(move, description, turnOrder, attacker, defender, field, //c.iii. Crush Grip, Wring Out, Hard Press case "Crush Grip": case "Wring Out": - case "Hard Press": basePower = Math.floor(pokeRound(120 * 100 * Math.floor(attacker.curHP * 0x1000 / attacker.maxHP) / 0x1000) / 100); description.moveBP = basePower; break; + case "Hard Press": + basePower = Math.floor(pokeRound(100 * 100 * Math.floor(attacker.curHP * 0x1000 / attacker.maxHP) / 0x1000) / 100); + description.moveBP = basePower; + break; //d. Friendship based (not done under the assumption that it will always deal max damage) //d.i. Return @@ -1593,7 +1596,7 @@ function canTeraBoost60BP(move) { var priority = move.isPriority; var multiHit = move.isMultiHit || move.isTenMultiHit || move.isTwoHit || move.isThreeHit || move.isTripleHit || move.name === "Dragon Darts"; var otherExceptions = ["Crush Grip", "Dragon Energy", "Electro Ball", "Eruption", "Flail", "Fling", "Grass Knot", "Gyro Ball", - "Heat Crash", "Heavy Slam", "Low Kick", "Reversal", "Water Spout","Wring Out",].indexOf(move.name) !== -1; + "Heat Crash", "Heavy Slam", "Low Kick", "Reversal", "Water Spout", "Wring Out", "Hard Press"].indexOf(move.name) !== -1; return !priority && !multiHit && !otherExceptions; } diff --git a/script_res/move_data.js b/script_res/move_data.js index 436112d..b1c35c7 100644 --- a/script_res/move_data.js +++ b/script_res/move_data.js @@ -5706,6 +5706,7 @@ var MOVES_SV_NATDEX = $.extend(true, {}, MOVES_SS_NATDEX, { bp: 130, type: 'Electric', category: 'Special', + hasSecondaryEffect: true, //like Jet Punch, no downsides with Sheer Force }, 'Tera Starstorm': { bp: 120, @@ -5734,6 +5735,7 @@ var MOVES_SV_NATDEX = $.extend(true, {}, MOVES_SS_NATDEX, { type: 'Rock', category: 'Physical', isSlice: true, + makesContact: true, }, 'Tachyon Cutter': { bp: 50, @@ -5757,12 +5759,14 @@ var MOVES_SV_NATDEX = $.extend(true, {}, MOVES_SS_NATDEX, { type: 'Fairy', category: 'Special', hasSecondaryEffect: true, + isSound: true, }, 'Temper Flare': { bp: 75, type: 'Fire', - category: 'Special', + category: 'Physical', canDouble: true, + makesContact: true, }, 'Supercell Slam': { bp: 100, @@ -5775,6 +5779,7 @@ var MOVES_SV_NATDEX = $.extend(true, {}, MOVES_SS_NATDEX, { type: 'Psychic', category: 'Special', hasSecondaryEffect: true, + isSound: true, }, 'Upper Hand': { bp: 65, From e0211f0c2692cb0febae6c02f6172a291440eea0 Mon Sep 17 00:00:00 2001 From: nerd-of-now Date: Tue, 19 Dec 2023 14:56:14 -0500 Subject: [PATCH 15/24] Final Indigo Disk Update - A button for Tera Stellar calculations has been added. The only real application for it over deselecting Terastalize is for attacks that receive the BP change to 60 from Tera - Fixed an issue where changing Pokemon on Terapagos-Stellar would lock up formes - Forced base form Terapagos to not Terastalize and have the Stellar Tera Type - Changed Tera Starstorm's type change to more accurately reflect how the game handles it (it also checks for the Stellar Tera Type but Terapagos can only Stellar Tera Type anyway) - Fixed the Ruin abilities to not work under Neutralizing Gas - The Pokemon introduced in the Indigo Disk with previous Mega forms (and Necrozma) will no longer show up outside of National Dex mode - Fixed a minor bug that would make Stellar a selectable option for a Pokemon's regular typing - Added Psycho Boost back into the pool of usable moves outside of National Dex mode --- index.html | 8 +++++++ script_res/ap_calc.css | 4 ++-- script_res/ap_calc.js | 35 ++++++++++++++++++++++++++++- script_res/damage_MASTER.js | 44 ++++++++++++++++++++----------------- script_res/move_data.js | 2 +- script_res/pokedex.js | 4 +++- script_res/switch_mode.js | 10 +-------- 7 files changed, 73 insertions(+), 34 deletions(-) diff --git a/index.html b/index.html index b5874b7..b115012 100644 --- a/index.html +++ b/index.html @@ -423,6 +423,7 @@

宝可梦#1

+
@@ -477,6 +478,7 @@

宝可梦#1

+
@@ -531,6 +533,7 @@

宝可梦#1

+
@@ -585,6 +588,7 @@

宝可梦#1

+
@@ -1190,6 +1194,7 @@

宝可梦#2

+
@@ -1244,6 +1249,7 @@

宝可梦#2

+
@@ -1298,6 +1304,7 @@

宝可梦#2

+
@@ -1352,6 +1359,7 @@

宝可梦#2

+
diff --git a/script_res/ap_calc.css b/script_res/ap_calc.css index bbbb595..5f87e4b 100644 --- a/script_res/ap_calc.css +++ b/script_res/ap_calc.css @@ -204,7 +204,7 @@ select.ability-supreme, select.ability-proto-quark { select.toxic-counter { width: 4.5em; } -.move-selector, .move-bp, .move-type, .move-cat, .move-hits, .move-double, .move-hits2, .move-hits3, .move-pledge, .move-10hits, .move-linearAddedBP, .move-opponent { +.move-selector, .move-bp, .move-type, .move-cat, .move-hits, .move-double, .move-stellar, .move-hits2, .move-hits3, .move-pledge, .move-10hits, .move-linearAddedBP, .move-opponent { font-size: 0.9em; } .move-selector { @@ -220,7 +220,7 @@ select.toxic-counter { .move-cat, .move-linearAddedBP { width: 4em; } -.move-hits, .move-double, .move-hits2, .move-hits3, .move-pledge, .move-10hits, .move-opponent { +.move-hits, .move-double, .move-stellar, .move-hits2, .move-hits3, .move-pledge, .move-10hits, .move-opponent { width: 4.6em; } .abilityToggle, .ability-advanced{ diff --git a/script_res/ap_calc.js b/script_res/ap_calc.js index 338de9b..e2dec6c 100644 --- a/script_res/ap_calc.js +++ b/script_res/ap_calc.js @@ -45,6 +45,7 @@ $(".tera").bind("keyup change", function () { var poke = $(this).closest(".poke-info"); calcHP(poke); calcStats(poke); + teraStellarBtns(poke, $(this).prop("checked"), poke.find(".tera-type").val() === 'Stellar'); }); $(".nature").bind("keyup change", function() { calcStats($(this).closest(".poke-info")); @@ -157,6 +158,26 @@ $(".percent-hp").keyup(function() { calcCurrentHP($(this).parent(), max, percent); }); +$(".tera-type").bind("keyup change", function () { + var poke = $(this).closest(".poke-info"); + teraStellarBtns(poke, poke.find(".tera").prop("checked"), $(this).val() === 'Stellar') +}); + +function teraStellarBtns(poke, isTera, isStellar) { + if (isTera && isStellar && poke.find("input.set-selector").val().indexOf('Terapagos') === -1) { + for (i = 1; i <= 4; i++) { + poke.find(".move" + i + " .stellar-btn").show(); + poke.find(".move" + i + " .move-stellar").prop("checked", true); + } + } + else { + for (i = 1; i <= 4; i++) { + poke.find(".move" + i + " .stellar-btn").hide(); + poke.find(".move" + i + " .move-stellar").prop("checked", false); + } + } +} + var lastAura = [false, false, false] var manualProtoQuark; $(".ability").bind("keyup change", function () { @@ -655,6 +676,7 @@ $(".set-selector").change(function() { } pokeObj.find(".max").prop("checked", false); pokeObj.find(".tera").prop("checked", false); + pokeObj.find(".tera").change(); calcHP(pokeObj); calcStats(pokeObj); calcEvTotal(pokeObj); @@ -960,6 +982,8 @@ function Pokemon(pokeInfo) { : mask === 'Hearthflame' ? 'Fire' : mask === 'Cornerstone' ? 'Rock' : 'Grass'; + //pokeInfo.find(".type1").val(pokedex['Ogerpon-' + mask].t1); + //pokeInfo.find(".type2").val(pokedex['Ogerpon-' + mask].t2); pokeInfo.find(".tera-type").val(maskTera); pokeInfo.find(".tera-type").prop("disabled", true); if (pokeInfo.find(".tera").prop("checked")) { @@ -972,11 +996,13 @@ function Pokemon(pokeInfo) { } } terapagosCheck[pokeInfo.prop('id')] = false; + pokeInfo.find(".tera").prop("disabled", false); } else if (this.name && this.name.indexOf('Terapagos') !== -1) { pokeInfo.find(".tera-type").val('Stellar'); pokeInfo.find(".tera-type").prop("disabled", true); if (this.name === 'Terapagos-Terastal') { + pokeInfo.find(".tera").prop("disabled", false); if (pokeInfo.find(".tera").prop("checked")) { this.name = 'Terapagos-Stellar'; if (!terapagosCheck[pokeInfo.prop('id')]) { @@ -1018,10 +1044,15 @@ function Pokemon(pokeInfo) { pokeInfo.find(".forme").prop("disabled", false); } } + else { + pokeInfo.find(".tera").prop("disabled", true); + } } else { pokeInfo.find(".tera-type").prop("disabled", false); + pokeInfo.find(".forme").prop("disabled", false); terapagosCheck[pokeInfo.prop('id')] = false; + pokeInfo.find(".tera").prop("disabled", false); } this.type1 = pokeInfo.find(".type1").val(); @@ -1084,6 +1115,7 @@ function getMoveDetails(moveInfo, maxMon) { combinePledge: (moveName.includes(" Pledge") && !moveInfo.find(".move-z").prop("checked") && !maxMon) ? moveInfo.find(".move-pledge").val() : 0, timesAffected: (defaultDetails.linearAddBP && !moveInfo.find(".move-z").prop("checked") && !maxMon) ? ~~moveInfo.find(".move-linearAddedBP").val() : 0, usedOppMove: moveInfo.find(".move-opponent option:selected").text(), + getsStellarBoost: moveInfo.find(".move-stellar").prop("checked"), }); } @@ -1511,7 +1543,8 @@ function setStartup(p) { }); } -$(document).ready(function() { +$(document).ready(function () { + $(".stellar-btn").hide(); getGen(); $(".terrain-trigger").bind("change keyup", getTerrainEffects); $(".calc-trigger").bind("change keyup", calculate); diff --git a/script_res/damage_MASTER.js b/script_res/damage_MASTER.js index edaac0d..bc2e1fa 100644 --- a/script_res/damage_MASTER.js +++ b/script_res/damage_MASTER.js @@ -119,6 +119,9 @@ function buildDescription(description) { if (description.maskBoost) { output += "(1.2x Mask Boost) " } + if (description.stellarBoost) { + output += "(1st Use) " + } output += "vs. "; if (description.defenseBoost) { if (description.defenseBoost > 0) { @@ -667,7 +670,7 @@ function checkMoveTypeChange(move, field, attacker) { else if ((move.name == "Struggle" && gen >= 2) || (['Beat Up', 'Future Sight', 'Doom Desire'].indexOf(move.name) != -1 && gen <= 4)) { move.type = 'Typeless'; } - else if (move.name === 'Tera Starstorm' && attacker.isTerastalize) { + else if (move.name === 'Tera Starstorm' && attacker.name === 'Terapagos-Stellar') { move.type = 'Stellar'; } } @@ -1654,8 +1657,8 @@ function calcAttack(move, attacker, defender, description, isCritical, defAbilit function calcAtMods(move, attacker, defAbility, description, field) { atMods = []; var ruinActive = { - "Tablets of Ruin": $("input:checkbox[id='tablets-of-ruin']:checked").val() != undefined, - "Vessel of Ruin": $("input:checkbox[id='vessel-of-ruin']:checked").val() != undefined, + "Tablets of Ruin": $("input:checkbox[id='tablets-of-ruin']:checked").val() != undefined && !field.isNeutralizingGas, + "Vessel of Ruin": $("input:checkbox[id='vessel-of-ruin']:checked").val() != undefined && !field.isNeutralizingGas, }; //a. Tablets of Ruin, Vessel of Ruin @@ -1808,8 +1811,8 @@ function calcDefense(move, attacker, defender, description, hitsPhysical, isCrit function calcDefMods(move, defender, field, description, hitsPhysical, defAbility) { var dfMods = []; var ruinActive = { - "Sword of Ruin": $("input:checkbox[id='sword-of-ruin']:checked").val() != undefined, - "Beads of Ruin": $("input:checkbox[id='beads-of-ruin']:checked").val() != undefined, + "Sword of Ruin": $("input:checkbox[id='sword-of-ruin']:checked").val() != undefined && !field.isNeutralizingGas, + "Beads of Ruin": $("input:checkbox[id='beads-of-ruin']:checked").val() != undefined && !field.isNeutralizingGas, }; //a. Sword of Ruin, Beads of Ruin @@ -1908,20 +1911,7 @@ function calcGeneralMods(baseDamage, move, attacker, defender, defAbility, field var stabMod = 0x1000; if (move.type !== 'Typeless') { //Typeless moves cannot get stab even if the user is Typeless - if (!attacker.isTerastalize) { - if (move.type === attacker.type1 || move.type === attacker.type2 || (move.combinePledge && move.combinePledge !== move.name)) { - if (attacker.ability === "Adaptability") { - stabMod = 0x2000; - description.attackerAbility = attacker.ability; - } else { - stabMod = 0x1800; - } - } else if ((attacker.ability === "Protean" || attacker.ability == "Libero") && (gen !== 9 || attacker.abilityOn)) { - stabMod = 0x1800; - description.attackerAbility = attacker.ability; - } - } - else if (attacker.tera_type !== 'Stellar') { + if (attacker.isTerastalize && attacker.tera_type !== 'Stellar') { if (move.type === attacker.tera_type && (attacker.teraSTAB1 === attacker.tera_type || attacker.teraSTAB2 === attacker.tera_type)) { if (attacker.ability === "Adaptability") { stabMod = 0x2400; @@ -1939,13 +1929,27 @@ function calcGeneralMods(baseDamage, move, attacker, defender, defAbility, field } } } - else { + else if (attacker.isTerastalize && (move.getsStellarBoost || attacker.name === 'Terapagos-Stellar')) { //Tera Type being Stellar is implicit if ([attacker.type1, attacker.type2].indexOf(move.type) !== -1) { stabMod = 0x2000; } else { stabMod = 0x1333; } + if (attacker.name !== 'Terapagos-Stellar') description.stellarBoost = true; + } + else { //Covers for non-terastalized and Stellar being used up + if (move.type === attacker.type1 || move.type === attacker.type2 || (move.combinePledge && move.combinePledge !== move.name)) { + if (attacker.ability === "Adaptability") { + stabMod = 0x2000; + description.attackerAbility = attacker.ability; + } else { + stabMod = 0x1800; + } + } else if ((attacker.ability === "Protean" || attacker.ability == "Libero") && (gen !== 9 || attacker.abilityOn)) { + stabMod = 0x1800; + description.attackerAbility = attacker.ability; + } } } var applyBurn = (attacker.status === "Burned" && move.category === "Physical" && attacker.ability !== "Guts" && !move.ignoresBurn); diff --git a/script_res/move_data.js b/script_res/move_data.js index b1c35c7..ea6142d 100644 --- a/script_res/move_data.js +++ b/script_res/move_data.js @@ -5830,7 +5830,7 @@ var MOVES_SV = $.extend(true, {}, MOVES_SV_NATDEX, {}); 'Sharpen', 'Spider Web', 'Nightmare', 'Feint Attack', 'Foresight', 'Return', 'Frustration', 'Magnitude', 'Pursuit', 'Hidden Power', 'Smelling Salts', 'Assist', 'Refresh', 'Snatch', 'Secret Power', 'Camouflage', 'Tail Glow', 'Mud Sport', 'Ice Ball', 'Needle Arm', 'Odor Sleuth', 'Silver Wind', 'Grass Whistle', 'Signal Beam', - 'Sky Uppercut', 'Water Sport', 'Psycho Boost', 'Miracle Eye', 'Wake-Up Slap', 'Natural Gift', 'Embargo', 'Trump Card', + 'Sky Uppercut', 'Water Sport', 'Miracle Eye', 'Wake-Up Slap', 'Natural Gift', 'Embargo', 'Trump Card', 'Heal Block', 'Wring Out', 'Lucky Chant', 'Me First', 'Punishment', 'Mud Bomb', 'Mirror Shot', 'Rock Climb', 'Magnet Bomb', 'Captivate', 'Heal Order', 'Ominous Wind', 'Telekinesis', 'Flame Burst', 'Synchronoise', 'Chip Away', 'Sky Drop', 'Bestow', 'Heart Stamp', 'Steamroller', 'Rototiller', 'Ion Deluge', 'Spotlight', 'Laser Focus', 'Gear Up', diff --git a/script_res/pokedex.js b/script_res/pokedex.js index 7710d34..e7a516d 100644 --- a/script_res/pokedex.js +++ b/script_res/pokedex.js @@ -17853,7 +17853,9 @@ var NO_FORMS_SV = [ 'Charizard', 'Slowbro', 'Gengar', 'Gyarados', 'Mewtwo', 'Ampharos', 'Scizor', 'Heracross', 'Houndoom', 'Tyranitar', 'Gardevoir', 'Sableye', 'Medicham', 'Camerupt', 'Altaria', 'Banette', 'Glalie', 'Salamence', - 'Kyogre', 'Groudon', 'Rayquaza', 'Garchomp', 'Lucario', 'Abomasnow', 'Gallade', 'Diancie', 'Greninja' + 'Kyogre', 'Groudon', 'Rayquaza', 'Garchomp', 'Lucario', 'Abomasnow', 'Gallade', 'Diancie', 'Greninja', + //Indigo Disk additions (none in Teal Mask) + 'Venusaur', 'Blastoise', 'Sceptile', 'Blaziken', 'Swampert', 'Metagross', 'Latias', 'Latios', 'Necrozma-Dusk-Mane', 'Necrozma-Dawn-Wings', ]; NO_FORMS_SV.forEach(e => POKEDEX_SV[e].formes = null); diff --git a/script_res/switch_mode.js b/script_res/switch_mode.js index c363645..2a10f72 100644 --- a/script_res/switch_mode.js +++ b/script_res/switch_mode.js @@ -29,15 +29,6 @@ if (localStorage.getItem("level") == true) { //Load the generation according to localStorage //see function getGen() in ap_calc.js -////SET TOGGLING -////Set the set type according to localStorage on initialize -//if (localStorage.getItem("isCustom1") == true) { -// $("#p1 .set-toggle").prop("checked", true); -//} -//if (localStorage.getItem("isCustom2") == true) { -// $("#p2 .set-toggle").prop("checked", true); -//} - $(function(){ $("#switchTheme").on("click", function(){ @@ -181,6 +172,7 @@ function loadDex(dexMode) { types.splice(types.indexOf('Typeless'), 1); var teraTypes = $.extend(true, [], types); if (gen >= 2) types.push('Typeless'); + types.splice(types.indexOf('Stellar'), 1); var typeOptions = getSelectOptions(types); var teraTypeOptions = getSelectOptions(teraTypes); } From eee143bc901d58f9e3756974291f4bec3fb844e7 Mon Sep 17 00:00:00 2001 From: nerd-of-now Date: Sat, 23 Dec 2023 00:49:02 -0500 Subject: [PATCH 16/24] Minor bug fixes - Fixed the 1st Use Tera Stellar buttons to actually coordinate to the proper buttons when unchecked - Fixed an issue that caused the calc to crash when changing between gens (instances of Pokemon that don't exist in the proper Pokedex) - Updated the Tera BP Boost to only apply to a Tera Stellar user when the 1st Use button is selected - Updated the exceptions list for the Tera BP Boost to not include Wring Out to reflect the game --- script_res/ap_calc.js | 4 ++-- script_res/damage_MASTER.js | 4 ++-- script_res/move_data.js | 5 ++++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/script_res/ap_calc.js b/script_res/ap_calc.js index e2dec6c..d3feb46 100644 --- a/script_res/ap_calc.js +++ b/script_res/ap_calc.js @@ -945,7 +945,7 @@ function Pokemon(pokeInfo) { this.name = setName; } else { var pokemonName = setName.substring(0, setName.indexOf(" (")); - this.name = (pokedex[pokemonName].formes) ? pokeInfo.find(".forme").val() : pokemonName; + this.name = (pokedex[pokemonName] && pokedex[pokemonName].formes) ? pokeInfo.find(".forme").val() : pokemonName; } //Check for form-item coordination @@ -1089,7 +1089,7 @@ function Pokemon(pokeInfo) { ]; this.glaiveRushMod = pokeInfo.find(".glaive-rush").prop("checked"); this.weight = +pokeInfo.find(".weight").val(); - this.canEvolve = pokedex[pokemonName].canEvolve; + this.canEvolve = pokedex[pokemonName] ? pokedex[pokemonName].canEvolve : false; } diff --git a/script_res/damage_MASTER.js b/script_res/damage_MASTER.js index bc2e1fa..c70cfa3 100644 --- a/script_res/damage_MASTER.js +++ b/script_res/damage_MASTER.js @@ -1587,7 +1587,7 @@ function calcBPMods(attacker, defender, field, move, description, ateIzeBoosted, tempBP = pokeRound(basePower * chainMods(bpMods) / 0x1000); //aa. Tera boost for moves with <60 BP - if (attacker.isTerastalize && [move.type, 'Stellar'].indexOf(attacker.tera_type) !== -1 && tempBP < 60 && canTeraBoost60BP(move)) { + if (attacker.isTerastalize && (move.type === attacker.tera_type || (attacker.tera_type === 'Stellar' && move.stellarBoost)) && tempBP < 60 && canTeraBoost60BP(move)) { bpMods.push(60 / tempBP * 0x1000); description.teraBPBoost = true; } @@ -1599,7 +1599,7 @@ function canTeraBoost60BP(move) { var priority = move.isPriority; var multiHit = move.isMultiHit || move.isTenMultiHit || move.isTwoHit || move.isThreeHit || move.isTripleHit || move.name === "Dragon Darts"; var otherExceptions = ["Crush Grip", "Dragon Energy", "Electro Ball", "Eruption", "Flail", "Fling", "Grass Knot", "Gyro Ball", - "Heat Crash", "Heavy Slam", "Low Kick", "Reversal", "Water Spout", "Wring Out", "Hard Press"].indexOf(move.name) !== -1; + "Heat Crash", "Heavy Slam", "Low Kick", "Reversal", "Water Spout", "Hard Press"].indexOf(move.name) !== -1; return !priority && !multiHit && !otherExceptions; } diff --git a/script_res/move_data.js b/script_res/move_data.js index ea6142d..ff6bd1b 100644 --- a/script_res/move_data.js +++ b/script_res/move_data.js @@ -7,7 +7,7 @@ var MOVES_RBY = { zp: 1 }, '(No Move)': { - type: 'Typeless', + type: 'Normal', category: 'Status' }, 'Acid': { @@ -949,6 +949,9 @@ var MOVES_RBY = { }; var MOVES_GSC = $.extend(true, {}, MOVES_RBY, { + '(No Move)': { + type: 'Typeless', + }, 'Karate Chop': { type: 'Fighting', }, From d79a6b91960e9f5e2bec0bfe45feddf8c8852ecb Mon Sep 17 00:00:00 2001 From: Kun Yi Date: Fri, 29 Dec 2023 17:31:17 -0800 Subject: [PATCH 17/24] =?UTF-8?q?DLC2=20=E6=96=B0=E5=A2=9E=E6=8B=9B?= =?UTF-8?q?=E5=BC=8F=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script_res/translate/README | 5 + script_res/translate/gen9_moves.csv | 124 +++-- script_res/translate/moves.json | 103 ++++ script_res/translate/moves.py | 38 ++ script_res/translate/moves_input.json | 709 ++++++++++++++++++++++++++ script_res/translate/search_input.js | 109 +++- script_res/translate/translate.js | 18 + 7 files changed, 1049 insertions(+), 57 deletions(-) create mode 100644 script_res/translate/README create mode 100644 script_res/translate/moves.json create mode 100644 script_res/translate/moves.py create mode 100644 script_res/translate/moves_input.json diff --git a/script_res/translate/README b/script_res/translate/README new file mode 100644 index 0000000..2ac36ad --- /dev/null +++ b/script_res/translate/README @@ -0,0 +1,5 @@ +Steps to convert names to pinyin + +1. Copy move and Pokemon names from https://wiki.52poke.com/wiki/%E6%8B%9B%E5%BC%8F%E5%88%97%E8%A1%A8 and https://wiki.52poke.com/wiki/%E5%AE%9D%E5%8F%AF%E6%A2%A6%E5%88%97%E8%A1%A8%EF%BC%88%E6%8C%89%E5%85%A8%E5%9B%BD%E5%9B%BE%E9%89%B4%E7%BC%96%E5%8F%B7%EF%BC%89/%E7%AE%80%E5%8D%95%E7%89%88 +2. Copy to spreadsheet, and use https://www.branah.com/chinese-to-pinyin to convert to pinyin (no tone) +3. Use concatenation of first letters to get acryonyms diff --git a/script_res/translate/gen9_moves.csv b/script_res/translate/gen9_moves.csv index 077b10e..827360f 100644 --- a/script_res/translate/gen9_moves.csv +++ b/script_res/translate/gen9_moves.csv @@ -1,4 +1,3 @@ -en, chs, ja, pinyin, pingyin-first Thunder Cage,雷电囚笼,サンダープリズン,leidianqiulong,ldql Dragon Energy,巨龙威能,ドラゴンエナジー,julongweineng,jlwn Freezing Glare,冰冷视线,いてつくしせん,binglengshixian,blsx @@ -31,57 +30,72 @@ Wildbolt Storm,鸣雷风暴,かみなりあらし,mingleifengbao,mlfb Sandsear Storm,热沙风暴,ねっさのあらし,reshafengbao,rsfb Lunar Blessing,新月祈祷,みかづきのいのり,xinyueqidao,xyqd Take Heart,勇气填充,ブレイブチャージ,yongqitianchong,yqtc -Tera Blast,太晶爆发,テラバースト,taijingbaofa,zwm -Silk Trap,线阱,スレッドトラップ,xianjing,tjbf -Axe Kick,下压踢,かかとおとし,xiayati,xj -Last Respects,扫墓,おはかまいり,saomu,xyt -Lumina Crash,琉光冲激,ルミナコリジョン,liuguangchongji,sm -Order Up,上菜,いっちょうあがり,shangcai,lgcj -Jet Punch,喷射拳,ジェットパンチ,penshequan,sc -Spicy Extract,辣椒精华,ハバネロエキス,lajiaojinghua,psq -Spin Out,疾速转轮,ホイールスピン,jisuzhuanlun,ljjh -Population Bomb,鼠数儿,ネズミざん,shushuer,jszl -Ice Spinner,冰旋,アイススピナー,bingxuan,sse -Glaive Rush,巨剑突击,きょけんとつげき,jujiantuji,bx -Revival Blessing,复生祈祷,さいきのいのり,fushengqidao,jjtj -Salt Cure,盐腌,しおづけ,yanyan,fsqd -Triple Dive,三连钻,トリプルダイブ,sanlianzuan,yy -Mortal Spin,晶光转转,キラースピン,jingguangzhuanzhuan,slz -Doodle,描绘,うつしえ,miaohui,jgzz -Fillet Away,甩肉,みをけずる,shuairou,mh -Kowtow Cleave,仆刀,ドゲザン,pudao,sr -Flower Trick,千变万花,トリックフラワー,qianbian[wan mo]hua,pd -Torch Song,闪焰高歌,フレアソング,shanyangaoge,qb[mh -Aqua Step,流水旋舞,アクアステップ,liushuixuanwu,sygg -Raging Bull,怒牛,レイジングブル,nuniu,lsxw -Make It Rain,淘金潮,ゴールドラッシュ,taojinchao,nn -Psyblade,精神剑,サイコブレイド,jingshenjian,tjc -Hydro Steam,水蒸气,ハイドロスチーム,shuizhengqi,jsj -Ruination,大灾难,カタストロフィ,dazainan,szq -Collision Course,全开猛撞,アクセルブレイク,quankaimengzhuang,dzn -Electro Drift,闪电猛冲,イナズマドライブ,shandianmengchong,qkmz -Shed Tail,断尾,しっぽきり,duanwei,sdmc -Chilly Reception,冷笑话,さむいギャグ,lengxiaohua,dw -Tidy Up,大扫除,おかたづけ,dasaochu,lxh -Snowscape,雪景,ゆきげしき,xuejing,dsc -Pounce,虫扑,とびつく,chongpu,xj -Trailblaze,起草,くさわけ,qicao,cp -Chilling Water,泼冷水,ひやみず,polengshui,qc -Hyper Drill,强力钻,ハイパードリル,qianglizuan,pls -Twin Beam,双光束,ツインビーム,shuangguangshu,qlz -Rage Fist,愤怒之拳,ふんどのこぶし,fennuzhiquan,sgs -Armor Cannon,铠农炮,アーマーキャノン,kainongpao,fnzq -Bitter Blade,悔念剑,むねんのつるぎ,huinianjian,knp -Double Shock,电光双击,でんこうそうげき,dianguangshuangji,hnj -Gigaton Hammer,巨力锤,デカハンマー,julichui,dgsj -Comeuppance,复仇,ほうふく,fuchou,jlc -Aqua Cutter,水波刀,アクアカッター,shuibodao,fc -Blazing Torque,灼热暴冲,バーンアクセル,zhuorebaochong,sbd -Wicked Torque,黑暗暴冲,ダークアクセル,heianbaochong,zrbc -Noxious Torque,剧毒暴冲,ポイズンアクセル,judubaochong,habc -Combat Torque,格斗暴冲,ファイトアクセル,gedoubaochong,jdbc -Magical Torque,魔法暴冲,マジカルアクセル,mofabaochong,gdbc -Blood Moon,血月,ブラッドムーン,xueyue,mfbc -Matcha Gotcha,刷刷茶炮,シャカシャカほう,shuashuachapao,xy -Syrup Bomb‎,糖浆炸弹,みずあめボム‎,tangjiangzhadan,sscp -Ivy Cudgel,棘藤棒,ツタこんぼう,jitengbang,tjzd +Tera Blast,太晶爆发,テラバースト,taijingbaofa,tjbf +Silk Trap,线阱,スレッドトラップ,xianjing,xj +Axe Kick,下压踢,かかとおとし,xiayati,xyt +Last Respects,扫墓,おはかまいり,saomu,sm +Lumina Crash,琉光冲激,ルミナコリジョン,liuguangchongji,lgcj +Order Up,上菜,いっちょうあがり,shangcai,sc +Jet Punch,喷射拳,ジェットパンチ,penshequan,psq +Spicy Extract,辣椒精华,ハバネロエキス,lajiaojinghua,ljjh +Spin Out,疾速转轮,ホイールスピン,jisuzhuanlun,jszl +Population Bomb,鼠数儿,ネズミざん,shushuer,sse +Ice Spinner,冰旋,アイススピナー,bingxuan,bx +Glaive Rush,巨剑突击,きょけんとつげき,jujiantuji,jjtj +Revival Blessing,复生祈祷,さいきのいのり,fushengqidao,fsqd +Salt Cure,盐腌,しおづけ,yanyan,yy +Triple Dive,三连钻,トリプルダイブ,sanlianzuan,slz +Mortal Spin,晶光转转,キラースピン,jingguangzhuanzhuan,jgzz +Doodle,描绘,うつしえ,miaohui,mh +Fillet Away,甩肉,みをけずる,shuairou,sr +Kowtow Cleave,仆刀,ドゲザン,pudao,pd +Flower Trick,千变万花,トリックフラワー,qianbian[wan mo]hua,qb[mh +Torch Song,闪焰高歌,フレアソング,shanyangaoge,sygg +Aqua Step,流水旋舞,アクアステップ,liushuixuanwu,lsxw +Raging Bull,怒牛,レイジングブル,nuniu,nn +Make It Rain,淘金潮,ゴールドラッシュ,taojinchao,tjc +Psyblade,精神剑,サイコブレイド,jingshenjian,jsj +Hydro Steam,水蒸气,ハイドロスチーム,shuizhengqi,szq +Ruination,大灾难,カタストロフィ,dazainan,dzn +Collision Course,全开猛撞,アクセルブレイク,quankaimengzhuang,qkmz +Electro Drift,闪电猛冲,イナズマドライブ,shandianmengchong,sdmc +Shed Tail,断尾,しっぽきり,duanwei,dw +Chilly Reception,冷笑话,さむいギャグ,lengxiaohua,lxh +Tidy Up,大扫除,おかたづけ,dasaochu,dsc +Snowscape,雪景,ゆきげしき,xuejing,xj +Pounce,虫扑,とびつく,chongpu,cp +Trailblaze,起草,くさわけ,qicao,qc +Chilling Water,泼冷水,ひやみず,polengshui,pls +Hyper Drill,强力钻,ハイパードリル,qianglizuan,qlz +Twin Beam,双光束,ツインビーム,shuangguangshu,sgs +Rage Fist,愤怒之拳,ふんどのこぶし,fennuzhiquan,fnzq +Armor Cannon,铠农炮,アーマーキャノン,kainongpao,knp +Bitter Blade,悔念剑,むねんのつるぎ,huinianjian,hnj +Double Shock,电光双击,でんこうそうげき,dianguangshuangji,dgsj +Gigaton Hammer,巨力锤,デカハンマー,julichui,jlc +Comeuppance,复仇,ほうふく,fuchou,fc +Aqua Cutter,水波刀,アクアカッター,shuibodao,sbd +Blazing Torque,灼热暴冲,バーンアクセル,zhuorebaochong,zrbc +Wicked Torque,黑暗暴冲,ダークアクセル,heianbaochong,habc +Noxious Torque,剧毒暴冲,ポイズンアクセル,judubaochong,jdbc +Combat Torque,格斗暴冲,ファイトアクセル,gedoubaochong,gdbc +Magical Torque,魔法暴冲,マジカルアクセル,mofabaochong,mfbc +Blood Moon,血月,ブラッドムーン,xueyue,xy +Matcha Gotcha,刷刷茶炮,シャカシャカほう,shuashuachapao,sscp +Syrup Bomb,糖浆炸弹,みずあめボム‎,tangjiangzhadan,tjzd +Ivy Cudgel,棘藤棒,ツタこんぼう,jitengbang,jtb +Electro Shot,电光束,エレクトロビーム,dianguangshu,dgs +Tera Starstorm,晶光星群,テラクラスター,jingguangxingqun,jgxq +Fickle Beam,随机光,きまぐレーザー,suijiguang,sjg +Burning Bulwark,火焰守护,かえんのまもり,huoyanshouhu,hysh +Thunderclap,迅雷,じんらい,xunlei,xl +Mighty Cleave,强刃攻击,パワフルエッジ,qiangrengongji,qrgj +Tachyon Cutter,迅子利刃,タキオンカッター,xunziliren,xzlr +Hard Press,硬压,ハードプレス,yingya,yy +Dragon Cheer,龙声鼓舞,ドラゴンエール,longshengguwu,lsgw +Alluring Voice,魅诱之声,みわくのボイス,meiyouzhisheng,myzs +Temper Flare,豁出去,やけっぱち,huochuqu,hcq +Supercell Slam,闪电强袭,サンダーダイブ,shandianqiangxi,sdqx +Psychic Noise,精神噪音,サイコノイズ,jingshenzaoyin,jszy +Upper Hand,快手还击,はやてがえし,kuaishouhaiji,kshj +Malignant Chain,邪毒锁链,じゃどくのくさり,xiedusuolian,xdsl \ No newline at end of file diff --git a/script_res/translate/moves.json b/script_res/translate/moves.json new file mode 100644 index 0000000..0bffa18 --- /dev/null +++ b/script_res/translate/moves.json @@ -0,0 +1,103 @@ +{ + "Thunder Cage": "雷电囚笼", + "Dragon Energy": "巨龙威能", + "Freezing Glare": "冰冷视线", + "Fiery Wrath": "怒火中烧", + "Thunderous Kick": "雷鸣蹴击", + "Glacial Lance": "雪矛", + "Astral Barrage": "星碎", + "Eerie Spell": "诡异咒语", + "Dire Claw": "克命爪", + "Psyshield Bash": "屏障猛攻", + "Power Shift": "力量转换", + "Stone Axe": "岩斧", + "Springtide Storm": "阳春风暴", + "Mystical Power": "神秘之力", + "Raging Fury": "大愤慨", + "Wave Crash": "波动冲", + "Chloroblast": "叶绿爆震", + "Mountain Gale": "冰山风", + "Victory Dance": "胜利之舞", + "Headlong Rush": "突飞猛扑", + "Barb Barrage": "毒千针", + "Esper Wing": "气场之翼", + "Bitter Malice": "冤冤相报", + "Shelter": "闭关", + "Triple Arrows": "三连箭", + "Infernal Parade": "群魔乱舞", + "Ceaseless Edge": "秘剑・千重涛", + "Bleakwind Storm": "枯叶风暴", + "Wildbolt Storm": "鸣雷风暴", + "Sandsear Storm": "热沙风暴", + "Lunar Blessing": "新月祈祷", + "Take Heart": "勇气填充", + "Tera Blast": "太晶爆发", + "Silk Trap": "线阱", + "Axe Kick": "下压踢", + "Last Respects": "扫墓", + "Lumina Crash": "琉光冲激", + "Order Up": "上菜", + "Jet Punch": "喷射拳", + "Spicy Extract": "辣椒精华", + "Spin Out": "疾速转轮", + "Population Bomb": "鼠数儿", + "Ice Spinner": "冰旋", + "Glaive Rush": "巨剑突击", + "Revival Blessing": "复生祈祷", + "Salt Cure": "盐腌", + "Triple Dive": "三连钻", + "Mortal Spin": "晶光转转", + "Doodle": "描绘", + "Fillet Away": "甩肉", + "Kowtow Cleave": "仆刀", + "Flower Trick": "千变万花", + "Torch Song": "闪焰高歌", + "Aqua Step": "流水旋舞", + "Raging Bull": "怒牛", + "Make It Rain": "淘金潮", + "Psyblade": "精神剑", + "Hydro Steam": "水蒸气", + "Ruination": "大灾难", + "Collision Course": "全开猛撞", + "Electro Drift": "闪电猛冲", + "Shed Tail": "断尾", + "Chilly Reception": "冷笑话", + "Tidy Up": "大扫除", + "Snowscape": "雪景", + "Pounce": "虫扑", + "Trailblaze": "起草", + "Chilling Water": "泼冷水", + "Hyper Drill": "强力钻", + "Twin Beam": "双光束", + "Rage Fist": "愤怒之拳", + "Armor Cannon": "铠农炮", + "Bitter Blade": "悔念剑", + "Double Shock": "电光双击", + "Gigaton Hammer": "巨力锤", + "Comeuppance": "复仇", + "Aqua Cutter": "水波刀", + "Blazing Torque": "灼热暴冲", + "Wicked Torque": "黑暗暴冲", + "Noxious Torque": "剧毒暴冲", + "Combat Torque": "格斗暴冲", + "Magical Torque": "魔法暴冲", + "Blood Moon": "血月", + "Matcha Gotcha": "刷刷茶炮", + "Syrup Bomb": "糖浆炸弹", + "Ivy Cudgel": "棘藤棒", + "Electro Shot": "电光束", + "Tera Starstorm": "晶光星群", + "Fickle Beam": "随机光", + "Burning Bulwark": "火焰守护", + "Thunderclap": "迅雷", + "Mighty Cleave": "强刃攻击", + "Tachyon Cutter": "迅子利刃", + "Hard Press": "硬压", + "Dragon Cheer": "龙声鼓舞", + "Alluring Voice": "魅诱之声", + "Temper Flare": "豁出去", + "Supercell Slam": "闪电强袭", + "Psychic Noise": "精神噪音", + "Upper Hand": "快手还击", + "Malignant Chain": "邪毒锁链" +} \ No newline at end of file diff --git a/script_res/translate/moves.py b/script_res/translate/moves.py new file mode 100644 index 0000000..6cbdc50 --- /dev/null +++ b/script_res/translate/moves.py @@ -0,0 +1,38 @@ +import csv +import json + +def translate_moves(csv_file_path, json_file_path, encoding='utf-8'): + data = [] + trans_name = {} + with open(csv_file_path, 'r', encoding=encoding) as csvfile: + reader = csv.reader(csvfile) + for row in reader: + # Extract the desired key-value pair + en = row[0] + ch = row[1] + trans_name[en] = ch + + with open(json_file_path, 'w', encoding=encoding) as jsonfile: + json.dump(trans_name, jsonfile, indent=4, ensure_ascii=False) # Indent for readability + +# "en": "Ivy Cudgel", +# "chs": "棘藤棒", +# "ja": "ツタこんぼう", +# "pinyin": "jitengbang", +# "pingyin-first": "jtb" +def translate_moves_input(csv_file_path, json_file_path, encoding='utf-8'): + data = {} + with open(csv_file_path, 'r', encoding=encoding) as csvfile: + reader = csv.reader(csvfile) + for row in reader: + trans_input = {"en": row[0], "chs": row[1], "ja": row[2], "pinyin": row[3], "pinyin-first": row[4]} + data[row[0]] = trans_input + + with open(json_file_path, 'w', encoding=encoding) as jsonfile: + json.dump(data, jsonfile, indent=4, ensure_ascii=False) # Indent for readability + + +# Example usage: +csv_file = "gen9_moves.csv" +translate_moves(csv_file, "moves.json") +translate_moves_input(csv_file, "moves_input.json") diff --git a/script_res/translate/moves_input.json b/script_res/translate/moves_input.json new file mode 100644 index 0000000..eb33349 --- /dev/null +++ b/script_res/translate/moves_input.json @@ -0,0 +1,709 @@ +{ + "Thunder Cage": { + "en": "Thunder Cage", + "chs": "雷电囚笼", + "ja": "サンダープリズン", + "pinyin": "leidianqiulong", + "pinyin-first": "ldql" + }, + "Dragon Energy": { + "en": "Dragon Energy", + "chs": "巨龙威能", + "ja": "ドラゴンエナジー", + "pinyin": "julongweineng", + "pinyin-first": "jlwn" + }, + "Freezing Glare": { + "en": "Freezing Glare", + "chs": "冰冷视线", + "ja": "いてつくしせん", + "pinyin": "binglengshixian", + "pinyin-first": "blsx" + }, + "Fiery Wrath": { + "en": "Fiery Wrath", + "chs": "怒火中烧", + "ja": "もえあがるいかり", + "pinyin": "nuhuozhongshao", + "pinyin-first": "nhzs" + }, + "Thunderous Kick": { + "en": "Thunderous Kick", + "chs": "雷鸣蹴击", + "ja": "らいめいげり", + "pinyin": "leimingcuji", + "pinyin-first": "lmcj" + }, + "Glacial Lance": { + "en": "Glacial Lance", + "chs": "雪矛", + "ja": "ブリザードランス", + "pinyin": "xuemao", + "pinyin-first": "xm" + }, + "Astral Barrage": { + "en": "Astral Barrage", + "chs": "星碎", + "ja": "アストラルビット", + "pinyin": "xingsui", + "pinyin-first": "xs" + }, + "Eerie Spell": { + "en": "Eerie Spell", + "chs": "诡异咒语", + "ja": "ぶきみなじゅもん", + "pinyin": "guiyizhouyu", + "pinyin-first": "gyzy" + }, + "Dire Claw": { + "en": "Dire Claw", + "chs": "克命爪", + "ja": "フェイタルクロー", + "pinyin": "kemingzhao", + "pinyin-first": "kmz" + }, + "Psyshield Bash": { + "en": "Psyshield Bash", + "chs": "屏障猛攻", + "ja": "バリアーラッシュ", + "pinyin": "pingzhangmenggong", + "pinyin-first": "pzmg" + }, + "Power Shift": { + "en": "Power Shift", + "chs": "力量转换", + "ja": "パワーシフト", + "pinyin": "liliangzhuanhuan", + "pinyin-first": "llzh" + }, + "Stone Axe": { + "en": "Stone Axe", + "chs": "岩斧", + "ja": "がんせきアックス", + "pinyin": "yanfu", + "pinyin-first": "yf" + }, + "Springtide Storm": { + "en": "Springtide Storm", + "chs": "阳春风暴", + "ja": "はるのあらし", + "pinyin": "yangchunfengbao", + "pinyin-first": "ycfb" + }, + "Mystical Power": { + "en": "Mystical Power", + "chs": "神秘之力", + "ja": "しんぴのちから", + "pinyin": "shenmizhili", + "pinyin-first": "smzl" + }, + "Raging Fury": { + "en": "Raging Fury", + "chs": "大愤慨", + "ja": "だいふんげき", + "pinyin": "dafenkai", + "pinyin-first": "dfk" + }, + "Wave Crash": { + "en": "Wave Crash", + "chs": "波动冲", + "ja": "ウェーブタックル", + "pinyin": "bodongchong", + "pinyin-first": "bdc" + }, + "Chloroblast": { + "en": "Chloroblast", + "chs": "叶绿爆震", + "ja": "クロロブラスト", + "pinyin": "yelübaozhen", + "pinyin-first": "ylbz" + }, + "Mountain Gale": { + "en": "Mountain Gale", + "chs": "冰山风", + "ja": "ひょうざんおろし", + "pinyin": "bingshanfeng", + "pinyin-first": "bsf" + }, + "Victory Dance": { + "en": "Victory Dance", + "chs": "胜利之舞", + "ja": "しょうりのまい", + "pinyin": "shenglizhiwu", + "pinyin-first": "slzw" + }, + "Headlong Rush": { + "en": "Headlong Rush", + "chs": "突飞猛扑", + "ja": "ぶちかまし", + "pinyin": "tufeimengpu", + "pinyin-first": "tfmp" + }, + "Barb Barrage": { + "en": "Barb Barrage", + "chs": "毒千针", + "ja": "どくばりセンボン", + "pinyin": "duqianzhen", + "pinyin-first": "dqz" + }, + "Esper Wing": { + "en": "Esper Wing", + "chs": "气场之翼", + "ja": "オーラウイング", + "pinyin": "qichangzhiyi", + "pinyin-first": "qczy" + }, + "Bitter Malice": { + "en": "Bitter Malice", + "chs": "冤冤相报", + "ja": "うらみつらみ", + "pinyin": "yuanyuanxiangbao", + "pinyin-first": "yyxb" + }, + "Shelter": { + "en": "Shelter", + "chs": "闭关", + "ja": "たてこもる", + "pinyin": "biguan", + "pinyin-first": "bg" + }, + "Triple Arrows": { + "en": "Triple Arrows", + "chs": "三连箭", + "ja": "3ぼんのや", + "pinyin": "sanlianjian", + "pinyin-first": "slj" + }, + "Infernal Parade": { + "en": "Infernal Parade", + "chs": "群魔乱舞", + "ja": "ひゃっきやこう", + "pinyin": "qunmoluanwu", + "pinyin-first": "qmlw" + }, + "Ceaseless Edge": { + "en": "Ceaseless Edge", + "chs": "秘剑・千重涛", + "ja": "ひけん・ちえなみ", + "pinyin": "mijian・qianzhongtao", + "pinyin-first": "mjqzt" + }, + "Bleakwind Storm": { + "en": "Bleakwind Storm", + "chs": "枯叶风暴", + "ja": "こがらしあらし", + "pinyin": "kuyefengbao", + "pinyin-first": "kyfb" + }, + "Wildbolt Storm": { + "en": "Wildbolt Storm", + "chs": "鸣雷风暴", + "ja": "かみなりあらし", + "pinyin": "mingleifengbao", + "pinyin-first": "mlfb" + }, + "Sandsear Storm": { + "en": "Sandsear Storm", + "chs": "热沙风暴", + "ja": "ねっさのあらし", + "pinyin": "reshafengbao", + "pinyin-first": "rsfb" + }, + "Lunar Blessing": { + "en": "Lunar Blessing", + "chs": "新月祈祷", + "ja": "みかづきのいのり", + "pinyin": "xinyueqidao", + "pinyin-first": "xyqd" + }, + "Take Heart": { + "en": "Take Heart", + "chs": "勇气填充", + "ja": "ブレイブチャージ", + "pinyin": "yongqitianchong", + "pinyin-first": "yqtc" + }, + "Tera Blast": { + "en": "Tera Blast", + "chs": "太晶爆发", + "ja": "テラバースト", + "pinyin": "taijingbaofa", + "pinyin-first": "tjbf" + }, + "Silk Trap": { + "en": "Silk Trap", + "chs": "线阱", + "ja": "スレッドトラップ", + "pinyin": "xianjing", + "pinyin-first": "xj" + }, + "Axe Kick": { + "en": "Axe Kick", + "chs": "下压踢", + "ja": "かかとおとし", + "pinyin": "xiayati", + "pinyin-first": "xyt" + }, + "Last Respects": { + "en": "Last Respects", + "chs": "扫墓", + "ja": "おはかまいり", + "pinyin": "saomu", + "pinyin-first": "sm" + }, + "Lumina Crash": { + "en": "Lumina Crash", + "chs": "琉光冲激", + "ja": "ルミナコリジョン", + "pinyin": "liuguangchongji", + "pinyin-first": "lgcj" + }, + "Order Up": { + "en": "Order Up", + "chs": "上菜", + "ja": "いっちょうあがり", + "pinyin": "shangcai", + "pinyin-first": "sc" + }, + "Jet Punch": { + "en": "Jet Punch", + "chs": "喷射拳", + "ja": "ジェットパンチ", + "pinyin": "penshequan", + "pinyin-first": "psq" + }, + "Spicy Extract": { + "en": "Spicy Extract", + "chs": "辣椒精华", + "ja": "ハバネロエキス", + "pinyin": "lajiaojinghua", + "pinyin-first": "ljjh" + }, + "Spin Out": { + "en": "Spin Out", + "chs": "疾速转轮", + "ja": "ホイールスピン", + "pinyin": "jisuzhuanlun", + "pinyin-first": "jszl" + }, + "Population Bomb": { + "en": "Population Bomb", + "chs": "鼠数儿", + "ja": "ネズミざん", + "pinyin": "shushuer", + "pinyin-first": "sse" + }, + "Ice Spinner": { + "en": "Ice Spinner", + "chs": "冰旋", + "ja": "アイススピナー", + "pinyin": "bingxuan", + "pinyin-first": "bx" + }, + "Glaive Rush": { + "en": "Glaive Rush", + "chs": "巨剑突击", + "ja": "きょけんとつげき", + "pinyin": "jujiantuji", + "pinyin-first": "jjtj" + }, + "Revival Blessing": { + "en": "Revival Blessing", + "chs": "复生祈祷", + "ja": "さいきのいのり", + "pinyin": "fushengqidao", + "pinyin-first": "fsqd" + }, + "Salt Cure": { + "en": "Salt Cure", + "chs": "盐腌", + "ja": "しおづけ", + "pinyin": "yanyan", + "pinyin-first": "yy" + }, + "Triple Dive": { + "en": "Triple Dive", + "chs": "三连钻", + "ja": "トリプルダイブ", + "pinyin": "sanlianzuan", + "pinyin-first": "slz" + }, + "Mortal Spin": { + "en": "Mortal Spin", + "chs": "晶光转转", + "ja": "キラースピン", + "pinyin": "jingguangzhuanzhuan", + "pinyin-first": "jgzz" + }, + "Doodle": { + "en": "Doodle", + "chs": "描绘", + "ja": "うつしえ", + "pinyin": "miaohui", + "pinyin-first": "mh" + }, + "Fillet Away": { + "en": "Fillet Away", + "chs": "甩肉", + "ja": "みをけずる", + "pinyin": "shuairou", + "pinyin-first": "sr" + }, + "Kowtow Cleave": { + "en": "Kowtow Cleave", + "chs": "仆刀", + "ja": "ドゲザン", + "pinyin": "pudao", + "pinyin-first": "pd" + }, + "Flower Trick": { + "en": "Flower Trick", + "chs": "千变万花", + "ja": "トリックフラワー", + "pinyin": "qianbian[wan mo]hua", + "pinyin-first": "qb[mh" + }, + "Torch Song": { + "en": "Torch Song", + "chs": "闪焰高歌", + "ja": "フレアソング", + "pinyin": "shanyangaoge", + "pinyin-first": "sygg" + }, + "Aqua Step": { + "en": "Aqua Step", + "chs": "流水旋舞", + "ja": "アクアステップ", + "pinyin": "liushuixuanwu", + "pinyin-first": "lsxw" + }, + "Raging Bull": { + "en": "Raging Bull", + "chs": "怒牛", + "ja": "レイジングブル", + "pinyin": "nuniu", + "pinyin-first": "nn" + }, + "Make It Rain": { + "en": "Make It Rain", + "chs": "淘金潮", + "ja": "ゴールドラッシュ", + "pinyin": "taojinchao", + "pinyin-first": "tjc" + }, + "Psyblade": { + "en": "Psyblade", + "chs": "精神剑", + "ja": "サイコブレイド", + "pinyin": "jingshenjian", + "pinyin-first": "jsj" + }, + "Hydro Steam": { + "en": "Hydro Steam", + "chs": "水蒸气", + "ja": "ハイドロスチーム", + "pinyin": "shuizhengqi", + "pinyin-first": "szq" + }, + "Ruination": { + "en": "Ruination", + "chs": "大灾难", + "ja": "カタストロフィ", + "pinyin": "dazainan", + "pinyin-first": "dzn" + }, + "Collision Course": { + "en": "Collision Course", + "chs": "全开猛撞", + "ja": "アクセルブレイク", + "pinyin": "quankaimengzhuang", + "pinyin-first": "qkmz" + }, + "Electro Drift": { + "en": "Electro Drift", + "chs": "闪电猛冲", + "ja": "イナズマドライブ", + "pinyin": "shandianmengchong", + "pinyin-first": "sdmc" + }, + "Shed Tail": { + "en": "Shed Tail", + "chs": "断尾", + "ja": "しっぽきり", + "pinyin": "duanwei", + "pinyin-first": "dw" + }, + "Chilly Reception": { + "en": "Chilly Reception", + "chs": "冷笑话", + "ja": "さむいギャグ", + "pinyin": "lengxiaohua", + "pinyin-first": "lxh" + }, + "Tidy Up": { + "en": "Tidy Up", + "chs": "大扫除", + "ja": "おかたづけ", + "pinyin": "dasaochu", + "pinyin-first": "dsc" + }, + "Snowscape": { + "en": "Snowscape", + "chs": "雪景", + "ja": "ゆきげしき", + "pinyin": "xuejing", + "pinyin-first": "xj" + }, + "Pounce": { + "en": "Pounce", + "chs": "虫扑", + "ja": "とびつく", + "pinyin": "chongpu", + "pinyin-first": "cp" + }, + "Trailblaze": { + "en": "Trailblaze", + "chs": "起草", + "ja": "くさわけ", + "pinyin": "qicao", + "pinyin-first": "qc" + }, + "Chilling Water": { + "en": "Chilling Water", + "chs": "泼冷水", + "ja": "ひやみず", + "pinyin": "polengshui", + "pinyin-first": "pls" + }, + "Hyper Drill": { + "en": "Hyper Drill", + "chs": "强力钻", + "ja": "ハイパードリル", + "pinyin": "qianglizuan", + "pinyin-first": "qlz" + }, + "Twin Beam": { + "en": "Twin Beam", + "chs": "双光束", + "ja": "ツインビーム", + "pinyin": "shuangguangshu", + "pinyin-first": "sgs" + }, + "Rage Fist": { + "en": "Rage Fist", + "chs": "愤怒之拳", + "ja": "ふんどのこぶし", + "pinyin": "fennuzhiquan", + "pinyin-first": "fnzq" + }, + "Armor Cannon": { + "en": "Armor Cannon", + "chs": "铠农炮", + "ja": "アーマーキャノン", + "pinyin": "kainongpao", + "pinyin-first": "knp" + }, + "Bitter Blade": { + "en": "Bitter Blade", + "chs": "悔念剑", + "ja": "むねんのつるぎ", + "pinyin": "huinianjian", + "pinyin-first": "hnj" + }, + "Double Shock": { + "en": "Double Shock", + "chs": "电光双击", + "ja": "でんこうそうげき", + "pinyin": "dianguangshuangji", + "pinyin-first": "dgsj" + }, + "Gigaton Hammer": { + "en": "Gigaton Hammer", + "chs": "巨力锤", + "ja": "デカハンマー", + "pinyin": "julichui", + "pinyin-first": "jlc" + }, + "Comeuppance": { + "en": "Comeuppance", + "chs": "复仇", + "ja": "ほうふく", + "pinyin": "fuchou", + "pinyin-first": "fc" + }, + "Aqua Cutter": { + "en": "Aqua Cutter", + "chs": "水波刀", + "ja": "アクアカッター", + "pinyin": "shuibodao", + "pinyin-first": "sbd" + }, + "Blazing Torque": { + "en": "Blazing Torque", + "chs": "灼热暴冲", + "ja": "バーンアクセル", + "pinyin": "zhuorebaochong", + "pinyin-first": "zrbc" + }, + "Wicked Torque": { + "en": "Wicked Torque", + "chs": "黑暗暴冲", + "ja": "ダークアクセル", + "pinyin": "heianbaochong", + "pinyin-first": "habc" + }, + "Noxious Torque": { + "en": "Noxious Torque", + "chs": "剧毒暴冲", + "ja": "ポイズンアクセル", + "pinyin": "judubaochong", + "pinyin-first": "jdbc" + }, + "Combat Torque": { + "en": "Combat Torque", + "chs": "格斗暴冲", + "ja": "ファイトアクセル", + "pinyin": "gedoubaochong", + "pinyin-first": "gdbc" + }, + "Magical Torque": { + "en": "Magical Torque", + "chs": "魔法暴冲", + "ja": "マジカルアクセル", + "pinyin": "mofabaochong", + "pinyin-first": "mfbc" + }, + "Blood Moon": { + "en": "Blood Moon", + "chs": "血月", + "ja": "ブラッドムーン", + "pinyin": "xueyue", + "pinyin-first": "xy" + }, + "Matcha Gotcha": { + "en": "Matcha Gotcha", + "chs": "刷刷茶炮", + "ja": "シャカシャカほう", + "pinyin": "shuashuachapao", + "pinyin-first": "sscp" + }, + "Syrup Bomb": { + "en": "Syrup Bomb", + "chs": "糖浆炸弹", + "ja": "みずあめボム‎", + "pinyin": "tangjiangzhadan", + "pinyin-first": "tjzd" + }, + "Ivy Cudgel": { + "en": "Ivy Cudgel", + "chs": "棘藤棒", + "ja": "ツタこんぼう", + "pinyin": "jitengbang", + "pinyin-first": "jtb" + }, + "Electro Shot": { + "en": "Electro Shot", + "chs": "电光束", + "ja": "エレクトロビーム", + "pinyin": "dianguangshu", + "pinyin-first": "dgs" + }, + "Tera Starstorm": { + "en": "Tera Starstorm", + "chs": "晶光星群", + "ja": "テラクラスター", + "pinyin": "jingguangxingqun", + "pinyin-first": "jgxq" + }, + "Fickle Beam": { + "en": "Fickle Beam", + "chs": "随机光", + "ja": "きまぐレーザー", + "pinyin": "suijiguang", + "pinyin-first": "sjg" + }, + "Burning Bulwark": { + "en": "Burning Bulwark", + "chs": "火焰守护", + "ja": "かえんのまもり", + "pinyin": "huoyanshouhu", + "pinyin-first": "hysh" + }, + "Thunderclap": { + "en": "Thunderclap", + "chs": "迅雷", + "ja": "じんらい", + "pinyin": "xunlei", + "pinyin-first": "xl" + }, + "Mighty Cleave": { + "en": "Mighty Cleave", + "chs": "强刃攻击", + "ja": "パワフルエッジ", + "pinyin": "qiangrengongji", + "pinyin-first": "qrgj" + }, + "Tachyon Cutter": { + "en": "Tachyon Cutter", + "chs": "迅子利刃", + "ja": "タキオンカッター", + "pinyin": "xunziliren", + "pinyin-first": "xzlr" + }, + "Hard Press": { + "en": "Hard Press", + "chs": "硬压", + "ja": "ハードプレス", + "pinyin": "yingya", + "pinyin-first": "yy" + }, + "Dragon Cheer": { + "en": "Dragon Cheer", + "chs": "龙声鼓舞", + "ja": "ドラゴンエール", + "pinyin": "longshengguwu", + "pinyin-first": "lsgw" + }, + "Alluring Voice": { + "en": "Alluring Voice", + "chs": "魅诱之声", + "ja": "みわくのボイス", + "pinyin": "meiyouzhisheng", + "pinyin-first": "myzs" + }, + "Temper Flare": { + "en": "Temper Flare", + "chs": "豁出去", + "ja": "やけっぱち", + "pinyin": "huochuqu", + "pinyin-first": "hcq" + }, + "Supercell Slam": { + "en": "Supercell Slam", + "chs": "闪电强袭", + "ja": "サンダーダイブ", + "pinyin": "shandianqiangxi", + "pinyin-first": "sdqx" + }, + "Psychic Noise": { + "en": "Psychic Noise", + "chs": "精神噪音", + "ja": "サイコノイズ", + "pinyin": "jingshenzaoyin", + "pinyin-first": "jszy" + }, + "Upper Hand": { + "en": "Upper Hand", + "chs": "快手还击", + "ja": "はやてがえし", + "pinyin": "kuaishouhaiji", + "pinyin-first": "kshj" + }, + "Malignant Chain": { + "en": "Malignant Chain", + "chs": "邪毒锁链", + "ja": "じゃどくのくさり", + "pinyin": "xiedusuolian", + "pinyin-first": "xdsl" + } +} \ No newline at end of file diff --git a/script_res/translate/search_input.js b/script_res/translate/search_input.js index a4e93ca..44ee498 100644 --- a/script_res/translate/search_input.js +++ b/script_res/translate/search_input.js @@ -21346,7 +21346,7 @@ const MOVE_NAMES_INPUTS = { }, "Syrup Bomb": { - "en": "Syrup Bomb‎", + "en": "Syrup Bomb", "chs": "糖浆炸弹", "ja": "みずあめボム", "pinyin": "tangjiangzhadan", @@ -21359,7 +21359,112 @@ const MOVE_NAMES_INPUTS = { "ja": "ツタこんぼう", "pinyin": "jitengbang", "pingyin-first": "jtb" - } + }, + "Electro Shot": { + "en": "Electro Shot", + "chs": "电光束", + "ja": "エレクトロビーム", + "pinyin": "dianguangshu", + "pinyin-first": "dgs" + }, + "Tera Starstorm": { + "en": "Tera Starstorm", + "chs": "晶光星群", + "ja": "テラクラスター", + "pinyin": "jingguangxingqun", + "pinyin-first": "jgxq" + }, + "Fickle Beam": { + "en": "Fickle Beam", + "chs": "随机光", + "ja": "きまぐレーザー", + "pinyin": "suijiguang", + "pinyin-first": "sjg" + }, + "Burning Bulwark": { + "en": "Burning Bulwark", + "chs": "火焰守护", + "ja": "かえんのまもり", + "pinyin": "huoyanshouhu", + "pinyin-first": "hysh" + }, + "Thunderclap": { + "en": "Thunderclap", + "chs": "迅雷", + "ja": "じんらい", + "pinyin": "xunlei", + "pinyin-first": "xl" + }, + "Mighty Cleave": { + "en": "Mighty Cleave", + "chs": "强刃攻击", + "ja": "パワフルエッジ", + "pinyin": "qiangrengongji", + "pinyin-first": "qrgj" + }, + "Tachyon Cutter": { + "en": "Tachyon Cutter", + "chs": "迅子利刃", + "ja": "タキオンカッター", + "pinyin": "xunziliren", + "pinyin-first": "xzlr" + }, + "Hard Press": { + "en": "Hard Press", + "chs": "硬压", + "ja": "ハードプレス", + "pinyin": "yingya", + "pinyin-first": "yy" + }, + "Dragon Cheer": { + "en": "Dragon Cheer", + "chs": "龙声鼓舞", + "ja": "ドラゴンエール", + "pinyin": "longshengguwu", + "pinyin-first": "lsgw" + }, + "Alluring Voice": { + "en": "Alluring Voice", + "chs": "魅诱之声", + "ja": "みわくのボイス", + "pinyin": "meiyouzhisheng", + "pinyin-first": "myzs" + }, + "Temper Flare": { + "en": "Temper Flare", + "chs": "豁出去", + "ja": "やけっぱち", + "pinyin": "huochuqu", + "pinyin-first": "hcq" + }, + "Supercell Slam": { + "en": "Supercell Slam", + "chs": "闪电强袭", + "ja": "サンダーダイブ", + "pinyin": "shandianqiangxi", + "pinyin-first": "sdqx" + }, + "Psychic Noise": { + "en": "Psychic Noise", + "chs": "精神噪音", + "ja": "サイコノイズ", + "pinyin": "jingshenzaoyin", + "pinyin-first": "jszy" + }, + "Upper Hand": { + "en": "Upper Hand", + "chs": "快手还击", + "ja": "はやてがえし", + "pinyin": "kuaishouhaiji", + "pinyin-first": "kshj" + }, + "Malignant Chain": { + "en": "Malignant Chain", + "chs": "邪毒锁链", + "ja": "じゃどくのくさり", + "pinyin": "xiedusuolian", + "pinyin-first": "xdsl" + } }; function match_pokemon_name_inputs(name, term) { diff --git a/script_res/translate/translate.js b/script_res/translate/translate.js index e6419c3..32ae7ef 100644 --- a/script_res/translate/translate.js +++ b/script_res/translate/translate.js @@ -2043,6 +2043,7 @@ var MOVENAMES = { 'Psybeam': '幻象光线', 'Psyblade': '精神剑', 'Splash': '跃起', + 'Strange Steam': '神奇蒸汽', 'Strength': '怪力', 'Tar Shot': '沥青射击', 'Teatime': '茶会', @@ -2051,6 +2052,23 @@ var MOVENAMES = { 'Water Gun': '水枪', 'Whirlpool': '潮旋', 'Withdraw': '缩入壳中', + + // New in S/V DLC2 + "Electro Shot": "电光束", + "Tera Starstorm": "晶光星群", + "Fickle Beam": "随机光", + "Burning Bulwark": "火焰守护", + "Thunderclap": "迅雷", + "Mighty Cleave": "强刃攻击", + "Tachyon Cutter": "迅子利刃", + "Hard Press": "硬压", + "Dragon Cheer": "龙声鼓舞", + "Alluring Voice": "魅诱之声", + "Temper Flare": "豁出去", + "Supercell Slam": "闪电强袭", + "Psychic Noise": "精神噪音", + "Upper Hand": "快手还击", + "Malignant Chain": "邪毒锁链" }; function translate_move(name) { From 9f528d106e977c060779c2ef0e54263048d09313 Mon Sep 17 00:00:00 2001 From: Kun Yi Date: Fri, 29 Dec 2023 18:51:45 -0800 Subject: [PATCH 18/24] =?UTF-8?q?=E6=9B=B4=E6=96=B0dlc2=E5=AE=9D=E5=8F=AF?= =?UTF-8?q?=E6=A2=A6=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script_res/translate/gen9_pokemon.csv | 8 ++++ script_res/translate/poke.py | 34 +++++++++++++++ script_res/translate/pokemon.json | 10 +++++ script_res/translate/pokemon_input.json | 58 +++++++++++++++++++++++++ script_res/translate/search_input.js | 56 ++++++++++++++++++++++++ script_res/translate/translate.js | 9 +++- 6 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 script_res/translate/gen9_pokemon.csv create mode 100644 script_res/translate/poke.py create mode 100644 script_res/translate/pokemon.json create mode 100644 script_res/translate/pokemon_input.json diff --git a/script_res/translate/gen9_pokemon.csv b/script_res/translate/gen9_pokemon.csv new file mode 100644 index 0000000..e3ca9ab --- /dev/null +++ b/script_res/translate/gen9_pokemon.csv @@ -0,0 +1,8 @@ +#1018,铝钢桥龙,ブリジュラス,Archaludon,lvgangqiaolong,lgql,lü gang qiao long,lü,gang,qiao,long,,l,g,q,l +#1019,蜜集大蛇,カミツオロチ,Hydrapple,mijidashe,mjds,mi ji da she,mi,ji,da,she,,m,j,d,s +#1020,破空焰,ウガツホムラ,Gouging Fire,pokongyan,pky,po kong yan,po,kong,yan,,,p,k,y, +#1021,猛雷鼓,タケルライコ,Raging Bolt,mengleigu,mlg,meng lei gu,meng,lei,gu,,,m,l,g, +#1022,铁磐岩,テツノイワオ,Iron Boulder,tiepanyan,tpy,tie pan yan,tie,pan,yan,,,t,p,y, +#1023,铁头壳,テツノカシラ,Iron Crown,tietouke,ttk,tie tou ke,tie,tou,ke,,,t,t,k, +#1024,太乐巴戈斯,テラパゴス,Terapagos,tailebagesi,tlbg,tai le ba ge si,tai,le,ba,ge,si,t,l,b,g +#1025,桃歹郎,モモワロウ,Pecharunt,taodailang,tdl,tao dai lang,tao,dai,lang,,,t,d,l, \ No newline at end of file diff --git a/script_res/translate/poke.py b/script_res/translate/poke.py new file mode 100644 index 0000000..f41be6c --- /dev/null +++ b/script_res/translate/poke.py @@ -0,0 +1,34 @@ +import csv +import json + +def translate_name(csv_file_path, json_file_path, encoding='utf-8'): + data = [] + trans_name = {} + with open(csv_file_path, 'r', encoding=encoding) as csvfile: + reader = csv.reader(csvfile) + for row in reader: + # Extract the desired key-value pair + en = row[3] + ch = row[1] + trans_name[en] = ch + + with open(json_file_path, 'w', encoding=encoding) as jsonfile: + json.dump(trans_name, jsonfile, indent=4, ensure_ascii=False) # Indent for readability + +# "input0": "jitengbang", +# "input1": "jtb" +def translate_name_input(csv_file_path, json_file_path, encoding='utf-8'): + data = {} + with open(csv_file_path, 'r', encoding=encoding) as csvfile: + reader = csv.reader(csvfile) + for row in reader: + trans_input = {"input0": row[1], "input1": row[2], "input2": row[3], "input3": row[4], "input4": row[5]} + data[row[3]] = trans_input + + with open(json_file_path, 'w', encoding=encoding) as jsonfile: + json.dump(data, jsonfile, indent=4, ensure_ascii=False) # Indent for readability + + +csv_file = "gen9_pokemon.csv" +translate_name(csv_file, "pokemon.json") +translate_name_input(csv_file, "pokemon_input.json") diff --git a/script_res/translate/pokemon.json b/script_res/translate/pokemon.json new file mode 100644 index 0000000..e0cc8db --- /dev/null +++ b/script_res/translate/pokemon.json @@ -0,0 +1,10 @@ +{ + "Archaludon": "铝钢桥龙", + "Hydrapple": "蜜集大蛇", + "Gouging Fire": "破空焰", + "Raging Bolt": "猛雷鼓", + "Iron Boulder": "铁磐岩", + "Iron Crown": "铁头壳", + "Terapagos": "太乐巴戈斯", + "Pecharunt": "桃歹郎" +} \ No newline at end of file diff --git a/script_res/translate/pokemon_input.json b/script_res/translate/pokemon_input.json new file mode 100644 index 0000000..aa07d2e --- /dev/null +++ b/script_res/translate/pokemon_input.json @@ -0,0 +1,58 @@ +{ + "Archaludon": { + "input0": "铝钢桥龙", + "input1": "ブリジュラス", + "input2": "Archaludon", + "input3": "lvgangqiaolong", + "input4": "lgql" + }, + "Hydrapple": { + "input0": "蜜集大蛇", + "input1": "カミツオロチ", + "input2": "Hydrapple", + "input3": "mijidashe", + "input4": "mjds" + }, + "Gouging Fire": { + "input0": "破空焰", + "input1": "ウガツホムラ", + "input2": "Gouging Fire", + "input3": "pokongyan", + "input4": "pky" + }, + "Raging Bolt": { + "input0": "猛雷鼓", + "input1": "タケルライコ", + "input2": "Raging Bolt", + "input3": "mengleigu", + "input4": "mlg" + }, + "Iron Boulder": { + "input0": "铁磐岩", + "input1": "テツノイワオ", + "input2": "Iron Boulder", + "input3": "tiepanyan", + "input4": "tpy" + }, + "Iron Crown": { + "input0": "铁头壳", + "input1": "テツノカシラ", + "input2": "Iron Crown", + "input3": "tietouke", + "input4": "ttk" + }, + "Terapagos": { + "input0": "太乐巴戈斯", + "input1": "テラパゴス", + "input2": "Terapagos", + "input3": "tailebagesi", + "input4": "tlbgs" + }, + "Pecharunt": { + "input0": "桃歹郎", + "input1": "モモワロウ", + "input2": "Pecharunt", + "input3": "taodailang", + "input4": "tdl" + } +} diff --git a/script_res/translate/search_input.js b/script_res/translate/search_input.js index 44ee498..41856ea 100644 --- a/script_res/translate/search_input.js +++ b/script_res/translate/search_input.js @@ -7448,6 +7448,62 @@ const POKEMON_NAMES_INPUTS = { "input1": "egp", "input2": "ogerpon", "input3": "厄诡椪" + }, + "Archaludon": { + "input0": "铝钢桥龙", + "input1": "ブリジュラス", + "input2": "Archaludon", + "input3": "lvgangqiaolong", + "input4": "lgql" + }, + "Hydrapple": { + "input0": "蜜集大蛇", + "input1": "カミツオロチ", + "input2": "Hydrapple", + "input3": "mijidashe", + "input4": "mjds" + }, + "Gouging Fire": { + "input0": "破空焰", + "input1": "ウガツホムラ", + "input2": "Gouging Fire", + "input3": "pokongyan", + "input4": "pky" + }, + "Raging Bolt": { + "input0": "猛雷鼓", + "input1": "タケルライコ", + "input2": "Raging Bolt", + "input3": "mengleigu", + "input4": "mlg" + }, + "Iron Boulder": { + "input0": "铁磐岩", + "input1": "テツノイワオ", + "input2": "Iron Boulder", + "input3": "tiepanyan", + "input4": "tpy" + }, + "Iron Crown": { + "input0": "铁头壳", + "input1": "テツノカシラ", + "input2": "Iron Crown", + "input3": "tietouke", + "input4": "ttk" + }, + "Terapagos": { + "input0": "太乐巴戈斯", + "input1": "テラパゴス", + "input2": "Terapagos", + "input3": "tailebagesi", + "input4": "tlbgs" + }, + "Pecharunt": { + "input0": "桃歹郎", + "input1": "モモワロウ", + "input2": "Pecharunt", + "input3": "taodailang", + "input4": "tdl" } } diff --git a/script_res/translate/translate.js b/script_res/translate/translate.js index 32ae7ef..4722845 100644 --- a/script_res/translate/translate.js +++ b/script_res/translate/translate.js @@ -3145,7 +3145,14 @@ var POKENAMES = { "Munkidori": "愿增猿", "Fezandipiti": "吉雉鸡", "Ogerpon": "厄诡椪", - + "Archaludon": "铝钢桥龙", + "Hydrapple": "蜜集大蛇", + "Gouging Fire": "破空焰", + "Raging Bolt": "猛雷鼓", + "Iron Boulder": "铁磐岩", + "Iron Crown": "铁头壳", + "Terapagos": "太乐巴戈斯", + "Pecharunt": "桃歹郎" } function pokemonname_noforme(name) { From 49acab76b02e04574b14502ffe5aae980736b870 Mon Sep 17 00:00:00 2001 From: Kun Yi Date: Fri, 29 Dec 2023 18:57:31 -0800 Subject: [PATCH 19/24] =?UTF-8?q?=E6=A0=B9=E6=8D=AEPboard=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E6=8B=BC=E9=9F=B3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script_res/translate/search_input.js | 63 ++++++++++++---------------- 1 file changed, 27 insertions(+), 36 deletions(-) diff --git a/script_res/translate/search_input.js b/script_res/translate/search_input.js index 41856ea..701434a 100644 --- a/script_res/translate/search_input.js +++ b/script_res/translate/search_input.js @@ -1053,22 +1053,19 @@ const POKEMON_NAMES_INPUTS = { "input0": "jidongniao", "input1": "jdn", "input2": "articuno", - "input3": "freezer", - "input4": "急冻鸟" + "input3": "急冻鸟" }, "Zapdos": { "input0": "shandianniao", "input1": "sdn", "input2": "zapdos", - "input3": "thunder", - "input4": "闪电鸟" + "input3": "闪电鸟" }, "Moltres": { "input0": "huoyanniao", "input1": "hyn", "input2": "moltres", - "input3": "fire", - "input4": "火焰鸟" + "input3": "火焰鸟" }, "Dratini": { "input0": "minilong", @@ -1835,19 +1832,17 @@ const POKEMON_NAMES_INPUTS = { "Lugia": { "input0": "luoqiya", "input1": "lqy", - "input2": "yinniao", - "input3": "lugia", - "input4": "rugia", - "input5": "洛奇亚" + "input2": "lugia", + "input3": "rugia", + "input4": "洛奇亚" }, "Ho-Oh": { "input0": "fengwang", "input1": "fw", - "input2": "jinniao", - "input3": "fenghuang", - "input4": "hooh", - "input5": "houou", - "input6": "凤王" + "input2": "fenghuang", + "input3": "hooh", + "input4": "houou", + "input5": "凤王" }, "Celebi": { "input0": "shilabi", @@ -2372,7 +2367,7 @@ const POKEMON_NAMES_INPUTS = { "input4": "呆火驼" }, "Camerupt": { - "input0": "penghuotuo", + "input0": "penhuotuo", "input1": "pht", "input2": "camerupt", "input3": "bakuuda", @@ -2792,7 +2787,7 @@ const POKEMON_NAMES_INPUTS = { "input0": "ladiyasi", "input1": "ldys", "input2": "hongshuidu", - "input3": "hongfeiji", + "input3": "meimei", "input4": "latias", "input5": "拉帝亚斯" }, @@ -2800,7 +2795,7 @@ const POKEMON_NAMES_INPUTS = { "input0": "ladiousi", "input1": "ldos", "input2": "lanshuidu", - "input3": "lanfeiji", + "input3": "gege", "input4": "latios", "input5": "拉帝欧斯" }, @@ -2854,10 +2849,9 @@ const POKEMON_NAMES_INPUTS = { "Deoxys": { "input0": "daiouqixisi", "input1": "doqxs", - "input2": "waixingren", - "input3": "dna", - "input4": "deoxys", - "input5": "代欧奇希斯" + "input2": "dna", + "input3": "deoxys", + "input4": "代欧奇希斯" }, "Turtwig": { "input0": "caomiaogui", @@ -3599,18 +3593,16 @@ const POKEMON_NAMES_INPUTS = { "input3": "ganglong", "input4": "shijianlong", "input5": "shijianshen", - "input6": "zuanshi", - "input7": "dialga", - "input8": "帝牙卢卡" + "input6": "dialga", + "input7": "帝牙卢卡" }, "Palkia": { "input0": "paluqiya", "input1": "plqy", "input2": "kongjianlong", "input3": "kongjianshen", - "input4": "zhenzhu", - "input5": "palkia", - "input6": "帕路奇亚" + "input4": "palkia", + "input5": "帕路奇亚" }, "Heatran": { "input0": "xiduolanen", @@ -3853,7 +3845,7 @@ const POKEMON_NAMES_INPUTS = { "input3": "食梦梦" }, "Musharna": { - "input0": "mengmeng", + "input0": "mengmengshi", "input1": "mms", "input2": "musharna", "input3": "梦梦蚀" @@ -3936,7 +3928,7 @@ const POKEMON_NAMES_INPUTS = { "input4": "螺钉地鼠" }, "Excadrill": { - "input0": "lontoudishu", + "input0": "longtoudishu", "input1": "ltds", "input2": "excadrill", "input3": "doryuzu", @@ -4667,7 +4659,7 @@ const POKEMON_NAMES_INPUTS = { "input3": "秃鹰娜" }, "Heatmor": { - "input0": "ronyishou", + "input0": "rongyishou", "input1": "rys", "input2": "heatmor", "input3": "kuitaran", @@ -5403,11 +5395,10 @@ const POKEMON_NAMES_INPUTS = { "Primarina": { "input0": "xishihairen", "input1": "xshr", - "input2": "haishi", - "input3": "weinianghaishi", - "input4": "primarina", - "input5": "ashirenu", - "input6": "西狮海壬" + "input2": "weinianghaishi", + "input3": "primarina", + "input4": "ashirenu", + "input5": "西狮海壬" }, "Pikipek": { "input0": "xiaoduer", From 042f0d71b953aba6e2a9adb73513be9abf705b2a Mon Sep 17 00:00:00 2001 From: Kun Yi Date: Sat, 30 Dec 2023 15:47:56 -0800 Subject: [PATCH 20/24] =?UTF-8?q?=E6=98=9F=E6=99=B6=E5=A4=AA=E6=99=B6?= =?UTF-8?q?=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script_res/damage_MASTER.js | 8 ++++---- script_res/translate/translate.js | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/script_res/damage_MASTER.js b/script_res/damage_MASTER.js index c70cfa3..92f53b3 100644 --- a/script_res/damage_MASTER.js +++ b/script_res/damage_MASTER.js @@ -87,9 +87,9 @@ function buildDescription(description) { output += "[" + translate_ability("Flower Gift") + "] "; } if (description.meFirst) { - output += "Me First "; + output += translate_move("Me First") + " "; } - output += description.moveName + " "; + output += translate_move(description.moveName) + " "; if (description.moveBP && description.moveType) { //output += "(" + description.moveBP + " BP " + description.moveType + ") "; // translated @@ -117,10 +117,10 @@ function buildDescription(description) { output += "(太晶化补足60威力) " } if (description.maskBoost) { - output += "(1.2x Mask Boost) " + output += "(1.2x 面具加成) " } if (description.stellarBoost) { - output += "(1st Use) " + output += "(首次威力加成) " } output += "vs. "; if (description.defenseBoost) { diff --git a/script_res/translate/translate.js b/script_res/translate/translate.js index 4722845..9f3fe12 100644 --- a/script_res/translate/translate.js +++ b/script_res/translate/translate.js @@ -3492,6 +3492,7 @@ var TYPENAMES = { "Steel": "钢", "Typeless": "无属性", "Fairy": "妖精", + "Stellar": "星晶", } function translate_type(name) { @@ -3519,6 +3520,7 @@ var TYPENAMES_SHORT = { "Steel": "钢", "Typeless": "无", "Fairy": "仙", + "Stellar": "星晶", } function translate_type_short(name) { From 6db9708a6a05413446311cd9682980eb2f07ac90 Mon Sep 17 00:00:00 2001 From: Kun Yi Date: Sat, 30 Dec 2023 18:46:42 -0800 Subject: [PATCH 21/24] =?UTF-8?q?=E6=9B=B4=E6=96=B0DLC=E5=85=AC=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index b115012..1fc7d67 100644 --- a/index.html +++ b/index.html @@ -50,6 +50,9 @@

+

更新:

+

12/30/2023: 更新朱紫DLC2的新宝可梦+招式! +

使用说明:

搜索宝可梦名称:内置输入法支持,可以输入中文、拼音、英文、拼音缩写或者别名拼音。例如烈咬陆鲨可以输入"烈咬陆鲨","lieyaolusha","garchomp","lyls",或"dilong"。

@@ -827,10 +830,10 @@

- +
- +
From 5110f491008dd186a6eee68f55c7d6578452bc5d Mon Sep 17 00:00:00 2001 From: Kun Yi Date: Sat, 30 Dec 2023 22:36:02 -0800 Subject: [PATCH 22/24] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=83=A8=E5=88=86DLC?= =?UTF-8?q?=E5=AE=9D=E5=8F=AF=E6=A2=A6=E7=9A=84=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index_ch.html | 1456 --------------------------------- index_en.html | 704 ---------------- script_res/setdex_sidon-g9.js | 225 +++++ 3 files changed, 225 insertions(+), 2160 deletions(-) delete mode 100644 index_ch.html delete mode 100644 index_en.html diff --git a/index_ch.html b/index_ch.html deleted file mode 100644 index 57180af..0000000 --- a/index_ch.html +++ /dev/null @@ -1,1456 +0,0 @@ - - - - - - - - - 宝可梦伤害计算器 - - - - - - - - -
-
-
-
-
-
-
- 宝可梦伤害计算器-VGC2024版 - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-

使用说明:

-

搜索宝可梦名称:内置输入法支持,可以输入中文、拼音、英文、拼音缩写或者别名拼音。例如烈咬陆鲨可以输入"烈咬陆鲨","lieyaolusha","garchomp","lyls",或"dilong"。 -

-

搜索招式名称:可以输入任意招式内汉字,或者(仅支持剑盾为止技能)中文、拼音、英文、招式属性。例如搜索雷电拳可以输入"雷","电","拳","leidian","thunder"。 -

-

剑盾/朱紫默认仅包括游戏里可以使用的精灵。如果需要计算别的请点击"全国图鉴"。 -

- 问题反馈: - Github -
-
-
-
宝可梦#1的招式(选择一个查看详细结果)
-
??? - ???%
-
??? - ???%
-
??? - ???%
-
??? - ???%
-
-
-
宝可梦#2的招式(选择一个查看详细结果)
-
??? - ???%
-
??? - ???%
-
??? - ???%
-
??? - ???%
-
-
-
-
加载中...
-
(如果此条信息长时间显示,请尝试启用JavaScript,或者删除cookies)
-
-
-
-

宝可梦#1

-
-
- -
-
- - - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
种族值个体值努力值动态值
341
236
236
236
236
236
236236
  
-
-
-
- - -
-
- - - - - - -
-
- - -
-
- - - -
-
-
- - /341 (%) - - -
-
- - - - - - - - - - - - - -
-
- - - - - - - - - - - - - -
-
- - - - - - - - - - - - - -
-
- - - - - - - - - - - - - -
- -
- - - -
-
-
-
-
-

- 场地 -
- 等级设定为: -
- - -
-
-

-
-
- -
- - -
-
- - - - - -
-
-
- - - - - - -
-
- - - -
-
- - - - -
-
- - - -
-
- - -
- - -
-
-
-                   -
- -
-       - -
-
-
- -
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- - -
-
- - -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- - - - -
-
- - - - -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
- -

请输入你的自定义配置.

- 命名: -
- -
- -

你可能需要在删除你的配置后刷新页面。 如果遇到BUG,请尝试清除Cookies或者汇报错误!

-
-
-
-
-

宝可梦#2

-
-
- -
-
- - - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
种族值个体值努力值动态值
341
236
236
236
236
236
236236
  
-
-
-
- - -
-
- - - - - + - -
-
- - -
-
- - - -
-
-
- - /341 (%) - - -
-
- - - - - - - - - - - - - -
-
- - - - - - - - - - - - - -
-
- - - - - - - - - - - - - -
-
- - - - - - - - - - - - - -
- -
- - - -
-
-
- -
-

中文翻译信息:

-

MEI+hdongZ进行初始版本汉化,ProfessorSidon进行剑盾D L C/朱紫版本汉化及维护。 -

-

原作者信息:

-

VGC 2024 calculator maintainenance by Alex Collins (@nerd_of_now). Basis of the calculator by Jake White (@squirrelboydev). -

- - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/index_en.html b/index_en.html deleted file mode 100644 index 4830454..0000000 --- a/index_en.html +++ /dev/null @@ -1,704 +0,0 @@ - - - - - - - - - - - - Pokémon Damage Calculator - - - - - - - - -
-
- VGC 2024: Scarlet & Violet Damage Calculator - - - - - - - - - - - -
-
-



- - - -

VGC 2024 calculator maintainenance by Alex Collins (@nerd_of_now). Basis of the calculator by Jake White (@squirrelboydev).

-

The first wave of Pokémon Scarlet and Violet DLC, the Teal Mask, is out now! We are working on optimizing this calculator for the new games. -
This calculator contains spoilers for the Teal Mask DLC. This includes Pokémon, moves, abilities, and items. Use at your own discretion.

-

Is there an important or relevant set missing? Give us your suggestion!

- -

If you like what we do here, please consider supporting us on Buy Me a Coffee! -
For any issues with or other suggestions for this version of the Damage Calculator, contact Alex on Github or Twitter.

- - - - - -
-
-
Pokémon 1's Moves (select one to show detailed results)
-
??? - ???%
-
??? - ???%
-
??? - ???%
-
??? - ???%
-
-
-
Pokémon 2's Moves (select one to show detailed results)
-
??? - ???%
-
??? - ???%
-
??? - ???%
-
??? - ???%
-
-
-
-
Loading...
-
(If you see this message for more than a few seconds, try enabling JavaScript. If you have that enabled, try deleting your cookies. Otherwise, I won't be able to help you unless you send a screenshot of your browser console [Ctrl+Shift+I on Google Chrome].)
-
-
-

Pokémon 1

-
- -
-
- - - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- - - - - - - - - - -
BaseIVsEVsDVs
341
236
236
236
236
236
236236
  
-
-
-
- - -
-
- - - - - - -
-
- - -
-
- - - -
-
-
- - /341 (%) - - -
-
- - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - -
- -
- - - -
-
-
-
-
-

- Field -
- Auto-Level to: -
- - -
-
-

-
-
- -
- - -
-
- - - - - -
-
-
- - - - - - -
-
- - - -
-
- - - - -
-
- - - -
-
- - -
- - -
-
-
-                   -
- -
-       - -
-
- -
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- - -
-
- - -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- - - - -
-
- - - - -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
-
-
- -
-
- -
-
- -

Please enter your custom set here.

- Spread Name: -
- -
- -

You may need to refresh the page after deleting your custom sets. If you encounter a bug, please try deleting your cookies or reporting it!

-
-
-
-

Pokémon 2

-
- -
-
- - - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- - - - - - - - - - -
BaseIVsEVsDVs
341
236
236
236
236
236
236236
  
-
-
-
- - -
-
- - - - - - -
-
- - -
-
- - - -
-
-
- - /341 (%) - - -
-
- - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - -
- -
- - - -
-
-
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/script_res/setdex_sidon-g9.js b/script_res/setdex_sidon-g9.js index dd9301a..810a59c 100644 --- a/script_res/setdex_sidon-g9.js +++ b/script_res/setdex_sidon-g9.js @@ -460,4 +460,229 @@ var SETDEX_MISSING_VGC2023 = { ] }, }, + "Walking Wake": { + "Default Set": { + "level": 50, + "evs": { + "hp": 4, + "at": 0, + "df": 4, + "sa": 244, + "sd": 4, + "sp": 252 + }, + "nature": "Modest", + "ability": "Protosynthesis", + "item": "Life Orb", + "moves": [ + "Hydro Steam", + "Draco Meteor", + "Flamethrower", + "Protect" + ] + }, + }, + "Iron Leaves": { + "Default Set": { + "level": 50, + "evs": { + "hp": 4, + "at": 252, + "df": 0, + "sa": 0, + "sd": 0, + "sp": 252 + }, + "nature": "Jolly", + "ability": "Quark Drive", + "item": "Booster Energy", + "moves": [ + "Psyblade", + "Close Combat", + "Swords Dance", + "Protect" + ] + }, + }, + "Archaludon": { + "James Boyt's Assault Vest": { + "level": 50, + "evs": { + "hp": 252, + "at": 0, + "df": 4, + "sa": 116, + "sd": 124, + "sp": 12 + }, + "nature": "Modest", + "ability": "Stamina", + "tera_type": "Flying", + "item": "Assault Vest", + "moves": [ + "Flash Cannon", + "Draco Meteor", + "Body Press", + "Electro Shot" + ] + }, + }, + "Gouging Fire": { + "Default Set": { + "level": 50, + "evs": { + "hp": 4, + "at": 252, + "df": 0, + "sa": 0, + "sd": 0, + "sp": 252 + }, + "nature": "Modest", + "ability": "Protosynthesis", + "item": "Life Orb", + "moves": [ + "Breaking Swipe", + "Flare Blitz", + "Flame Charge", + "Burning Bulwark" + ] + }, + }, + "Raging Bolt": { + "James Boyt's offensive set": { + "level": 50, + "evs": { + "hp": 4, + "at": 0, + "df": 4, + "sa": 244, + "sd": 4, + "sp": 252 + }, + "nature": "Modest", + "ability": "Protosynthesis", + "item": "Life Orb", + "moves": [ + "Thunderbolt", + "Draco Meteor", + "Thunderclap", + "Protect" + ] + }, + "James Boyt's bulky": { + "level": 50, + "evs": { + "hp": 252, + "at": 0, + "df": 148, + "sa": 44, + "sd": 4, + "sp": 60 + }, + "nature": "Modest", + "ability": "Protosynthesis", + "tera_type": "Fairy", + "item": "Leftovers", + "moves": [ + "Thunderclap", + "Dragon Pulse", + "Calm Mind", + "Protect" + ] + }, + }, + "Iron Crown": { + "Default Set": { + "level": 50, + "evs": { + "hp": 0, + "at": 0, + "df": 4, + "sa": 252, + "sd": 0, + "sp": 252 + }, + "nature": "Timid", + "ability": "Quark Drive", + "tera_type": "Water", + "item": "Booster Energy", + "moves": [ + "Expanding Force", + "Tachyon Cutter", + "Tera Blast", + "Protect" + ] + }, + }, + "Iron Boulder": { + "Default Set": { + "level": 50, + "evs": { + "hp": 4, + "at": 252, + "df": 0, + "sa": 0, + "sd": 0, + "sp": 252 + }, + "nature": "Jolly", + "ability": "Quark Drive", + "tera_type": "Water", + "item": "Booster Energy", + "moves": [ + "Mighty Cleave", + "Zen Headbutt", + "Earthquake", + "Protect" + ] + }, + }, + "Primarina": { + "Leftovers Calm Mind": { + "level": 50, + "evs": { + "hp": 252, + "at": 0, + "df": 220, + "sa": 28, + "sd": 4, + "sp": 4 + }, + "nature": "Modest", + "ability": "Liquid Voice", + "tera_type": "Grass", + "item": "Leftovers", + "moves": [ + "Hyper Voice", + "Moonblast", + "Calm Mind", + "Protect" + ] + }, + }, + "Incineroar": { + "Defalt Set": { + "level": 50, + "evs": { + "hp": 252, + "at": 4, + "df": 92, + "sa": 0, + "sd": 156, + "sp": 4 + }, + "nature": "Adament", + "ability": "Intimidate", + "tera_type": "Water", + "item": "Sitrus Berry", + "moves": [ + "Flare Blitz", + "Knock Off", + "Fake Out", + "Parting Shot" + ] + }, + }, + } From 02fe2fa104243aa292f9b6aadfd6b259a57d8e0f Mon Sep 17 00:00:00 2001 From: Kun Yi Date: Sat, 30 Dec 2023 22:43:56 -0800 Subject: [PATCH 23/24] =?UTF-8?q?=E4=BF=AE=E6=AD=A3KO=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script_res/translate/translate.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/script_res/translate/translate.js b/script_res/translate/translate.js index 9f3fe12..b6e97c0 100644 --- a/script_res/translate/translate.js +++ b/script_res/translate/translate.js @@ -3618,6 +3618,8 @@ var KO_REPLACE_TEXTS = { "something broke; please tell nerd of now": "出错了", "The battlers shared their pain": "双方平分了痛苦", "Might as well Thunderbolt a Landorus": "并没有造成伤害", + "No damage for you": "并没有造成伤害", + "It's a status move, it won't deal damage": "变化招式并不造成伤害", "the Water-Type attack evaporated in the harsh sunlight": "水属性攻击因日光非常猛烈而蒸发", "the Fire-Type attack fizzled out in the heavy rain": "火属性攻击因下大雨而熄灭", "[The Smooth Taste Of] IMMUNE": "防御方免疫了伤害", From a726042ba3b8a35742391cb4fc8eed10f8b9d836 Mon Sep 17 00:00:00 2001 From: Kun Yi Date: Sun, 31 Dec 2023 11:35:27 -0800 Subject: [PATCH 24/24] =?UTF-8?q?=E5=BE=AE=E5=B0=8F=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 2 +- script_res/setdex_sidon-g9.js | 41 +++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index 1fc7d67..69810cb 100644 --- a/index.html +++ b/index.html @@ -51,7 +51,7 @@

更新:

-

12/30/2023: 更新朱紫DLC2的新宝可梦+招式! +

12/31/2023: 更新朱紫DLC2 [蓝之圆盘] 的新宝可梦+招式!

使用说明:

搜索宝可梦名称:内置输入法支持,可以输入中文、拼音、英文、拼音缩写或者别名拼音。例如烈咬陆鲨可以输入"烈咬陆鲨","lieyaolusha","garchomp","lyls",或"dilong"。 diff --git a/script_res/setdex_sidon-g9.js b/script_res/setdex_sidon-g9.js index 810a59c..263cf5c 100644 --- a/script_res/setdex_sidon-g9.js +++ b/script_res/setdex_sidon-g9.js @@ -684,5 +684,46 @@ var SETDEX_MISSING_VGC2023 = { ] }, }, + "Urshifu-Rapid Strike": { + "James Boyt's Mystic Water Swords Dance": { + "level": 50, + "evs": { + "hp": 236, + "at": 76, + "df": 4, + "sa": 0, + "sd": 172, + "sp": 20 + }, + "nature": "Adament", + "moves": [ + "Surging Strikes", + "Drain Punch", + "Swords Dance", + "Detect" + ] + }, + }, + "Urshifu-Single Strike": { + "Default Set": { + "level": 50, + "evs": { + "hp": 4, + "at": 252, + "df": 0, + "sa": 0, + "sd": 0, + "sp": 252 + }, + "nature": "Jolly", + "item": "Black Glasses", + "moves": [ + "Wicked Blow", + "Close Combat", + "Sucker Punch", + "Detect" + ] + }, + }, }