diff --git a/PKHeX.Core/Legality/Settings/Specialized/GameSpecificSettings.cs b/PKHeX.Core/Legality/Settings/Specialized/GameSpecificSettings.cs
index b54cce2bf..9d4ae367f 100644
--- a/PKHeX.Core/Legality/Settings/Specialized/GameSpecificSettings.cs
+++ b/PKHeX.Core/Legality/Settings/Specialized/GameSpecificSettings.cs
@@ -5,10 +5,24 @@ namespace PKHeX.Core;
[TypeConverter(typeof(ExpandableObjectConverter))]
public sealed class GameSpecificSettings
{
+ public GameSpecificSettings3 Gen3 { get; set; } = new();
public GameSpecificSettings7 Gen7 { get; set; } = new();
public GameSpecificSettings8 Gen8 { get; set; } = new();
}
+[TypeConverter(typeof(ExpandableObjectConverter))]
+public sealed class GameSpecificSettings3
+{
+ ///
+ /// Pokemon Box: Ruby & Sapphire allows swapping of teams at a precise time, which can put Mythicals/Legends/Over-leveled into the team slots before the ribbon award sequence.
+ ///
+ ///
+ /// https://projectpokemon.org/home/forums/topic/68163-how-to-give-ribbons-to-legendary-pok%C3%A9mon-using-pok%C3%A9mon-box-ruby-sapphire/
+ ///
+ [LocalizedDescription("Rule-tweak to allow the Pokemon Box: Ruby & Sapphire exploit to obtain Battle Tower ribbons illegitimately.")]
+ public bool AllowBattleTowerTeamSwap { get; set; }
+}
+
[TypeConverter(typeof(ExpandableObjectConverter))]
public sealed class GameSpecificSettings7
{
diff --git a/PKHeX.Core/Legality/Verifiers/Ribbons/RibbonRules.cs b/PKHeX.Core/Legality/Verifiers/Ribbons/RibbonRules.cs
index 6e31e7582..c0a6ed29a 100644
--- a/PKHeX.Core/Legality/Verifiers/Ribbons/RibbonRules.cs
+++ b/PKHeX.Core/Legality/Verifiers/Ribbons/RibbonRules.cs
@@ -197,6 +197,9 @@ public static bool IsRibbonValidWinning(PKM pk, IEncounterTemplate enc, Evolutio
{
if (!evos.HasVisitedGen3)
return false;
+ if (ParseSettings.Settings.Game.Gen3.AllowBattleTowerTeamSwap)
+ return true;
+
if (!IsAllowedBattleFrontier(evos.Gen3[0].Species))
return false;
@@ -217,7 +220,7 @@ public static bool IsRibbonValidWinning(PKM pk, IEncounterTemplate enc, Evolutio
public static bool IsRibbonValidVictory(EvolutionHistory evos)
{
if (evos.HasVisitedGen3)
- return IsAllowedBattleFrontier(evos.Gen3[0].Species);
+ return IsAllowedBattleFrontier(evos.Gen3[0].Species) || ParseSettings.Settings.Game.Gen3.AllowBattleTowerTeamSwap;
return false;
}
@@ -294,7 +297,9 @@ public static (byte Contest, byte Battle) GetMaxMemoryCounts(EvolutionHistory ev
{
var head = evos.Gen3[0]; // Checking contest with Gen3 head is fine; all false cases cannot evolve (evolution chain is same Gen3/Gen4).
var contest = IsAllowedContest4(head.Species, head.Form) ? MaxContestBoth : MaxContest3;
- var battle = IsAllowedBattleFrontier(head.Species) ? IsRibbonValidWinning(pk, enc, evos) ? MaxBattleBoth : MaxBattleBothNoWinning : (byte)0;
+ var battle = !IsAllowedBattleFrontier(head.Species)
+ ? ParseSettings.Settings.Game.Gen3.AllowBattleTowerTeamSwap ? MaxBattle3 : (byte)0
+ : IsRibbonValidWinning(pk, enc, evos) ? MaxBattleBoth : MaxBattleBothNoWinning;
return (contest, battle);
}
if (evos.HasVisitedGen4)
diff --git a/PKHeX.WinForms/Resources/text/lang_de.txt b/PKHeX.WinForms/Resources/text/lang_de.txt
index fb7649757..9c2d0e4b4 100644
--- a/PKHeX.WinForms/Resources/text/lang_de.txt
+++ b/PKHeX.WinForms/Resources/text/lang_de.txt
@@ -122,7 +122,11 @@ BatchEdit.mnu_≤=≤
BatchEdit.mnu_≥=≥
BatchEdit.mnu_Set=&Set
BatchEditor.B_Add=Hinzufügen
-BatchEditor.B_Go=Ausführen
+BatchEditor.B_Cancel=Abbrechen
+BatchEditor.B_Reset=Zurücksetzen
+BatchEditor.B_Run=Ausführen
+BatchEditor.B_Save=Speichern
+BatchEditor.L_Count=Übereinstimmungen: {0} / {1}
BatchEditor.RB_Boxes=Boxen
BatchEditor.RB_Party=Team
BatchEditor.RB_Path=Ordner...
@@ -373,6 +377,7 @@ KChart.DGV_SpecName=Name
KChart.DGV_Sprite=Sprite
KChart.DGV_Type1=Typ1
KChart.DGV_Type2=Typ2
+LocalizedDescription.AllowBattleTowerTeamSwap=Regeländerung, um den Pokémon Box: Rubin & Saphir-Exploit zu erlauben, mit dem Battle Tower-Bänder unrechtmäßig erhalten werden können.
LocalizedDescription.AllowBoxDataDrop=Ermöglicht das Drag-and-Drop von Box-Binärdateien aus der Benutzeroberfläche über den Box-Tab.
LocalizedDescription.AllowGen1Tradeback=Erlaube Gen 1 Rücktausch
LocalizedDescription.AllowGuessRejuvenateHOME=Erlaube der PKM Konvertierung, legale Begegnungs Daten, welche nicht im vorherigen Format gespeichert sind, zu erraten.
diff --git a/PKHeX.WinForms/Resources/text/lang_en.txt b/PKHeX.WinForms/Resources/text/lang_en.txt
index e8afc10a0..5f6451fd7 100644
--- a/PKHeX.WinForms/Resources/text/lang_en.txt
+++ b/PKHeX.WinForms/Resources/text/lang_en.txt
@@ -122,7 +122,11 @@ BatchEdit.mnu_≤=≤
BatchEdit.mnu_≥=≥
BatchEdit.mnu_Set=&Set
BatchEditor.B_Add=Add
-BatchEditor.B_Go=Run
+BatchEditor.B_Cancel=Cancel
+BatchEditor.B_Reset=Reset
+BatchEditor.B_Run=Run
+BatchEditor.B_Save=Save
+BatchEditor.L_Count=Matching: {0} / {1}
BatchEditor.RB_Boxes=Boxes
BatchEditor.RB_Party=Party
BatchEditor.RB_Path=Folder...
@@ -373,6 +377,7 @@ KChart.DGV_SpecName=Name
KChart.DGV_Sprite=Sprite
KChart.DGV_Type1=Type1
KChart.DGV_Type2=Type2
+LocalizedDescription.AllowBattleTowerTeamSwap=Allow the Pokemon Box: Ruby & Sapphire exploit to obtain Battle Tower ribbons illegitimately.
LocalizedDescription.AllowBoxDataDrop=Allow drag and drop of boxdata binary files from the GUI via the Box tab.
LocalizedDescription.AllowGen1Tradeback=GB: Allow Generation 2 tradeback learnsets
LocalizedDescription.AllowGuessRejuvenateHOME=Allow PKM file conversion paths to guess the legal original encounter data that is not stored in the format that it was converted from.
diff --git a/PKHeX.WinForms/Resources/text/lang_es-419.txt b/PKHeX.WinForms/Resources/text/lang_es-419.txt
index dc537da95..bd204527c 100644
--- a/PKHeX.WinForms/Resources/text/lang_es-419.txt
+++ b/PKHeX.WinForms/Resources/text/lang_es-419.txt
@@ -122,7 +122,11 @@ BatchEdit.mnu_≤=≤
BatchEdit.mnu_≥=≥
BatchEdit.mnu_Set=&Set
BatchEditor.B_Add=Añadir
-BatchEditor.B_Go=Ejecutar
+BatchEditor.B_Cancel=Cancelar
+BatchEditor.B_Reset=Restablecer
+BatchEditor.B_Run=Ejecutar
+BatchEditor.B_Save=Guardar
+BatchEditor.L_Count=Coincidencias: {0} / {1}
BatchEditor.RB_Boxes=Cajas
BatchEditor.RB_Party=Equipo
BatchEditor.RB_Path=Carpeta...
@@ -373,6 +377,7 @@ KChart.DGV_SpecName=Nombre
KChart.DGV_Sprite=Sprite
KChart.DGV_Type1=Tipo1
KChart.DGV_Type2=Tipo2
+LocalizedDescription.AllowBattleTowerTeamSwap=Ajuste de reglas para permitir la explotación de Pokémon Box: Rubí y Zafiro para obtener cintas de la Torre Batalla de forma ilegítima.
LocalizedDescription.AllowBoxDataDrop=Permitir arrastrar y soltar archivos binarios de datos de cajas desde la GUI mediante la pestaña Caja.
LocalizedDescription.AllowGen1Tradeback=GB: Permitir intercambio de movimientos desde la Generación 2.
LocalizedDescription.AllowGuessRejuvenateHOME=Permitir adivinar a la ruta de conversión de archivos PKM los datos del encuentro original que no estén almacenados en el formato origen.
diff --git a/PKHeX.WinForms/Resources/text/lang_es.txt b/PKHeX.WinForms/Resources/text/lang_es.txt
index e181637a2..53f167e90 100644
--- a/PKHeX.WinForms/Resources/text/lang_es.txt
+++ b/PKHeX.WinForms/Resources/text/lang_es.txt
@@ -122,7 +122,11 @@ BatchEdit.mnu_≤=≤
BatchEdit.mnu_≥=≥
BatchEdit.mnu_Set=&Set
BatchEditor.B_Add=Añadir
-BatchEditor.B_Go=Ejecutar
+BatchEditor.B_Cancel=Cancelar
+BatchEditor.B_Reset=Restablecer
+BatchEditor.B_Run=Ejecutar
+BatchEditor.B_Save=Guardar
+BatchEditor.L_Count=Coincidencias: {0} / {1}
BatchEditor.RB_Boxes=Cajas
BatchEditor.RB_Party=Equipo
BatchEditor.RB_Path=Carpeta...
@@ -373,6 +377,7 @@ KChart.DGV_SpecName=Nombre
KChart.DGV_Sprite=Sprite
KChart.DGV_Type1=Tipo1
KChart.DGV_Type2=Tipo2
+LocalizedDescription.AllowBattleTowerTeamSwap=Ajuste de reglas para permitir el exploit de Pokémon Box: Rubí y Zafiro para obtener cintas de la Torre Batalla de forma ilegítima.
LocalizedDescription.AllowBoxDataDrop=Permitir arrastrar y soltar archivos binarios de datos de cajas desde la GUI mediante la pestaña Caja.
LocalizedDescription.AllowGen1Tradeback=GB: Permitir intercambio de movimientos desde la Generación 2.
LocalizedDescription.AllowGuessRejuvenateHOME=Permitir adivinar a la ruta de conversión de archivos PKM los datos del encuentro original que no estén almacenados en el formato origen.
diff --git a/PKHeX.WinForms/Resources/text/lang_fr.txt b/PKHeX.WinForms/Resources/text/lang_fr.txt
index 27693dd5d..4d96efb90 100644
--- a/PKHeX.WinForms/Resources/text/lang_fr.txt
+++ b/PKHeX.WinForms/Resources/text/lang_fr.txt
@@ -122,7 +122,11 @@ BatchEdit.mnu_≤=≤
BatchEdit.mnu_≥=≥
BatchEdit.mnu_Set=Régler
BatchEditor.B_Add=Ajouter
-BatchEditor.B_Go=Exécuter
+BatchEditor.B_Cancel=Annuler
+BatchEditor.B_Reset=Réinitialiser
+BatchEditor.B_Run=Exécuter
+BatchEditor.B_Save=Enregistrer
+BatchEditor.L_Count=Correspondances : {0} / {1}
BatchEditor.RB_Boxes=Boîtes
BatchEditor.RB_Party=Équipe
BatchEditor.RB_Path=Dossier...
@@ -373,6 +377,7 @@ KChart.DGV_SpecName=Nom
KChart.DGV_Sprite=Sprite
KChart.DGV_Type1=Type1
KChart.DGV_Type2=Type2
+LocalizedDescription.AllowBattleTowerTeamSwap=Ajustement de règle pour autoriser l'exploit de Pokémon Box : Rubis et Saphir afin d'obtenir illégitimement des rubans de la Tour de Combat.
LocalizedDescription.AllowBoxDataDrop=Permet de glisser-déposer les données de boîte au format binaire depuis l'interface en utilisant l'onglet Boîte.
LocalizedDescription.AllowGen1Tradeback=GB : Autorise les attaques de revenants de la 2ème génération
LocalizedDescription.AllowGuessRejuvenateHOME=Autorise les chemins de conversion des fichiers PKM de deviner les données de rencontre originales légales qui ne sont pas stockées dans le format à partir duquel elles ont été converties.
diff --git a/PKHeX.WinForms/Resources/text/lang_it.txt b/PKHeX.WinForms/Resources/text/lang_it.txt
index 8676e2e52..6745b48c6 100644
--- a/PKHeX.WinForms/Resources/text/lang_it.txt
+++ b/PKHeX.WinForms/Resources/text/lang_it.txt
@@ -122,7 +122,11 @@ BatchEdit.mnu_≤=≤
BatchEdit.mnu_≥=≥
BatchEdit.mnu_Set=&Set
BatchEditor.B_Add=Aggiungi
-BatchEditor.B_Go=Avvia
+BatchEditor.B_Cancel=Annulla
+BatchEditor.B_Reset=Reimposta
+BatchEditor.B_Run=Esegui
+BatchEditor.B_Save=Salva
+BatchEditor.L_Count=Corrispondenze: {0} / {1}
BatchEditor.RB_Boxes=Box
BatchEditor.RB_Party=Squadra
BatchEditor.RB_Path=Cartella...
@@ -373,6 +377,7 @@ KChart.DGV_SpecName=Nome
KChart.DGV_Sprite=Sprite
KChart.DGV_Type1=Tipo1
KChart.DGV_Type2=Tipo2
+LocalizedDescription.AllowBattleTowerTeamSwap=Modifica della regola per consentire l'exploit di Pokémon Box: Rubino e Zaffiro per ottenere illegittimamente nastri della Torre Lotta.
LocalizedDescription.AllowBoxDataDrop=Consente il trascinamento dei file binari boxdata dall'interfaccia grafica tramite la scheda Box.
LocalizedDescription.AllowGen1Tradeback=GB:Consenti insieme di mosse tradeback da 2° Generazione.
LocalizedDescription.AllowGuessRejuvenateHOME=Prova ad indovinare dati di incontro originali legali, quando questi non sono contenuti all'interno del file di origine.
diff --git a/PKHeX.WinForms/Resources/text/lang_ja.txt b/PKHeX.WinForms/Resources/text/lang_ja.txt
index ffc8724a8..1cdd57c29 100644
--- a/PKHeX.WinForms/Resources/text/lang_ja.txt
+++ b/PKHeX.WinForms/Resources/text/lang_ja.txt
@@ -122,7 +122,11 @@ BatchEdit.mnu_≤=≤
BatchEdit.mnu_≥=≥
BatchEdit.mnu_Set=&Set
BatchEditor.B_Add=追加
-BatchEditor.B_Go=実行
+BatchEditor.B_Cancel=キャンセル
+BatchEditor.B_Reset=リセット
+BatchEditor.B_Run=実行
+BatchEditor.B_Save=保存
+BatchEditor.L_Count=一致: {0} / {1}
BatchEditor.RB_Boxes=ボックス
BatchEditor.RB_Party=パーティ
BatchEditor.RB_Path=フォルダ
@@ -373,6 +377,7 @@ KChart.DGV_SpecName=名前
KChart.DGV_Sprite=スプライト
KChart.DGV_Type1=タイプ1
KChart.DGV_Type2=タイプ2
+LocalizedDescription.AllowBattleTowerTeamSwap=ルール調整:『ポケモンボックス ルビー・サファイア』のエクスプロイトを許可してバトルタワーのリボンを不正に入手できるようにします。
LocalizedDescription.AllowBoxDataDrop=ボックスタブから、GUI経由で boxdata バイナリファイルのドラッグ&ドロップを許可します。
LocalizedDescription.AllowGen1Tradeback=GB: 第2世代からの逆輸入による技構成を許可します。
LocalizedDescription.AllowGuessRejuvenateHOME=PKMファイル変換時、変換元形式に保存されていない正規な元の出会い情報を推測することを許可します。
diff --git a/PKHeX.WinForms/Resources/text/lang_ko.txt b/PKHeX.WinForms/Resources/text/lang_ko.txt
index da2d4c8ef..2f885ee70 100644
--- a/PKHeX.WinForms/Resources/text/lang_ko.txt
+++ b/PKHeX.WinForms/Resources/text/lang_ko.txt
@@ -122,7 +122,11 @@ BatchEdit.mnu_≤=≤
BatchEdit.mnu_≥=≥
BatchEdit.mnu_Set=&Set
BatchEditor.B_Add=추가
-BatchEditor.B_Go=실행
+BatchEditor.B_Cancel=취소
+BatchEditor.B_Reset=재설정
+BatchEditor.B_Run=실행
+BatchEditor.B_Save=저장
+BatchEditor.L_Count=일치: {0} / {1}
BatchEditor.RB_Boxes=박스
BatchEditor.RB_Party=파티
BatchEditor.RB_Path=폴더...
@@ -373,6 +377,7 @@ KChart.DGV_SpecName=이름
KChart.DGV_Sprite=스프라이트
KChart.DGV_Type1=타입1
KChart.DGV_Type2=타입2
+LocalizedDescription.AllowBattleTowerTeamSwap=규칙 조정: Pokémon Box: 루비·사파이어의 익스플로잇을 허용하여 배틀 타워 리본을 부정하게 획득할 수 있도록 합니다.
LocalizedDescription.AllowBoxDataDrop=박스 탭을 통해 GUI에서 박스 데이터 바이너리 파일을 드래그 앤 드롭 허용.
LocalizedDescription.AllowGen1Tradeback=GB: 2세대에서 옮겨온 1세대 기술 허용
LocalizedDescription.AllowGuessRejuvenateHOME=변환된 형식에 저장되지 않은 합법적인 원래 출현 데이터를 PKM 파일 변환 경로가 추측하도록 허용.
diff --git a/PKHeX.WinForms/Resources/text/lang_zh-Hans.txt b/PKHeX.WinForms/Resources/text/lang_zh-Hans.txt
index f0103058b..35ec229e4 100644
--- a/PKHeX.WinForms/Resources/text/lang_zh-Hans.txt
+++ b/PKHeX.WinForms/Resources/text/lang_zh-Hans.txt
@@ -122,7 +122,11 @@ BatchEdit.mnu_≤=≤
BatchEdit.mnu_≥=≥
BatchEdit.mnu_Set=设置
BatchEditor.B_Add=增加
-BatchEditor.B_Go=运行
+BatchEditor.B_Cancel=取消
+BatchEditor.B_Reset=重置
+BatchEditor.B_Run=运行
+BatchEditor.B_Save=保存
+BatchEditor.L_Count=匹配:{0} / {1}
BatchEditor.RB_Boxes=盒子
BatchEditor.RB_Party=队伍
BatchEditor.RB_Path=文件夹...
@@ -373,6 +377,7 @@ KChart.DGV_SpecName=名称
KChart.DGV_Sprite=图标
KChart.DGV_Type1=属性1
KChart.DGV_Type2=属性2
+LocalizedDescription.AllowBattleTowerTeamSwap=规则调整:允许使用《宝可梦盒子:红宝石与蓝宝石》的漏洞以非法获取对战塔缎带。
LocalizedDescription.AllowBoxDataDrop=允许通过GUI的Box标签拖放boxdata二进制文件。
LocalizedDescription.AllowGen1Tradeback=GB 允许二代传回的招式组合
LocalizedDescription.AllowGuessRejuvenateHOME=允许在PKM文件转换中猜测那些未在文件中存储的合法原始相遇数据。
diff --git a/PKHeX.WinForms/Resources/text/lang_zh-Hant.txt b/PKHeX.WinForms/Resources/text/lang_zh-Hant.txt
index b0cae3fcd..cf57f90e8 100644
--- a/PKHeX.WinForms/Resources/text/lang_zh-Hant.txt
+++ b/PKHeX.WinForms/Resources/text/lang_zh-Hant.txt
@@ -122,7 +122,11 @@ BatchEdit.mnu_≤=≤
BatchEdit.mnu_≥=≥
BatchEdit.mnu_Set=設置
BatchEditor.B_Add=增加
-BatchEditor.B_Go=運行
+BatchEditor.B_Cancel=取消
+BatchEditor.B_Reset=重設
+BatchEditor.B_Run=執行
+BatchEditor.B_Save=儲存
+BatchEditor.L_Count=匹配:{0} / {1}
BatchEditor.RB_Boxes=盒子
BatchEditor.RB_Party=隊伍
BatchEditor.RB_Path=資料夾...
@@ -373,6 +377,7 @@ KChart.DGV_SpecName=名稱
KChart.DGV_Sprite=圖標
KChart.DGV_Type1=屬性1
KChart.DGV_Type2=屬性2
+LocalizedDescription.AllowBattleTowerTeamSwap=規則調整:允許使用《寶可夢盒子:紅寶石與藍寶石》的漏洞以非法取得對戰塔緞帶。
LocalizedDescription.AllowBoxDataDrop=允許透過GUI的Box標籤拖放boxdata二進位檔案。
LocalizedDescription.AllowGen1Tradeback=GB 允許從第二世代傳回之招式組合
LocalizedDescription.AllowGuessRejuvenateHOME=允許 PKM 檔轉換時猜測未於轉換格式存儲的合法原始遇見數據。