mirror of
https://github.com/kwsch/PKHeX
synced 2024-11-10 06:34:19 +00:00
Add GS Ball manual enable button
Adds a "misc" editor for Gen2 saves (only crystal for now), with a single button to enable the event (button enabled if the event is not yet enabled, lol)
746a06f1de/engine/menus/save.asm (L164-L175)
Closes #4335
This commit is contained in:
parent
c9f3894076
commit
97aa9805a9
4 changed files with 152 additions and 1 deletions
|
@ -825,6 +825,25 @@ public sealed class SAV2 : SaveFile, ILangDeviantSave, IEventFlagArray, IEventWo
|
||||||
Data[0x9000] = (byte)(0xFF - value);
|
Data[0x9000] = (byte)(0xFF - value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private const byte GS_BALL_AVAILABLE = 0x0B;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Triggered on Virtual Console by adding Hall of Fame entry, enabling the event.
|
||||||
|
/// </summary>
|
||||||
|
public void EnableGSBallMobileEvent()
|
||||||
|
{
|
||||||
|
if (Version is not GameVersion.C)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Write to the Crystal region of savedata
|
||||||
|
var primary = Japanese ? 0xA000 : 0x3E3C;
|
||||||
|
var backup = Japanese ? 0xA083 : 0x3E44;
|
||||||
|
|
||||||
|
Data[primary] = Data[backup] = GS_BALL_AVAILABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsEnabledGSBallMobileEvent => Data[Japanese ? 0xA000 : 0x3E3C] == GS_BALL_AVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum GBMobileCableColor : byte
|
public enum GBMobileCableColor : byte
|
||||||
|
|
|
@ -774,6 +774,7 @@ public partial class SAVEditor : UserControl, ISlotViewer<PictureBox>, ISaveFile
|
||||||
{
|
{
|
||||||
using var form = SAV switch
|
using var form = SAV switch
|
||||||
{
|
{
|
||||||
|
SAV2 sav2 => new SAV_Misc2(sav2),
|
||||||
SAV3 sav3 => new SAV_Misc3(sav3),
|
SAV3 sav3 => new SAV_Misc3(sav3),
|
||||||
SAV4 sav4 => new SAV_Misc4(sav4),
|
SAV4 sav4 => new SAV_Misc4(sav4),
|
||||||
SAV5 sav5 => new SAV_Misc5(sav5),
|
SAV5 sav5 => new SAV_Misc5(sav5),
|
||||||
|
@ -1217,7 +1218,7 @@ public partial class SAVEditor : UserControl, ISlotViewer<PictureBox>, ISaveFile
|
||||||
|
|
||||||
B_OtherSlots.Visible = sav is SAV1StadiumJ or SAV1Stadium or SAV2Stadium;
|
B_OtherSlots.Visible = sav is SAV1StadiumJ or SAV1Stadium or SAV2Stadium;
|
||||||
B_OpenTrainerInfo.Visible = B_OpenItemPouch.Visible = (sav.HasParty && SAV is not SAV4BR) || SAV is SAV7b; // Box RS & Battle Revolution
|
B_OpenTrainerInfo.Visible = B_OpenItemPouch.Visible = (sav.HasParty && SAV is not SAV4BR) || SAV is SAV7b; // Box RS & Battle Revolution
|
||||||
B_OpenMiscEditor.Visible = sav is SAV3 or SAV4 or SAV5 or SAV8BS;
|
B_OpenMiscEditor.Visible = sav is SAV2 { Version: GameVersion.C} or SAV3 or SAV4 or SAV5 or SAV8BS;
|
||||||
B_Roamer.Visible = sav is SAV3 or SAV6XY;
|
B_Roamer.Visible = sav is SAV3 or SAV6XY;
|
||||||
|
|
||||||
B_OpenHoneyTreeEditor.Visible = sav is SAV4Sinnoh;
|
B_OpenHoneyTreeEditor.Visible = sav is SAV4Sinnoh;
|
||||||
|
|
93
PKHeX.WinForms/Subforms/Save Editors/Gen2/SAV_Misc2.Designer.cs
generated
Normal file
93
PKHeX.WinForms/Subforms/Save Editors/Gen2/SAV_Misc2.Designer.cs
generated
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
namespace PKHeX.WinForms
|
||||||
|
{
|
||||||
|
partial class SAV_Misc2
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
B_Save = new System.Windows.Forms.Button();
|
||||||
|
B_Cancel = new System.Windows.Forms.Button();
|
||||||
|
B_VirtualConsoleGSBall = new System.Windows.Forms.Button();
|
||||||
|
SuspendLayout();
|
||||||
|
//
|
||||||
|
// B_Save
|
||||||
|
//
|
||||||
|
B_Save.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
|
||||||
|
B_Save.Location = new System.Drawing.Point(248, 220);
|
||||||
|
B_Save.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||||
|
B_Save.Name = "B_Save";
|
||||||
|
B_Save.Size = new System.Drawing.Size(88, 27);
|
||||||
|
B_Save.TabIndex = 73;
|
||||||
|
B_Save.Text = "Save";
|
||||||
|
B_Save.UseVisualStyleBackColor = true;
|
||||||
|
B_Save.Click += B_Save_Click;
|
||||||
|
//
|
||||||
|
// B_Cancel
|
||||||
|
//
|
||||||
|
B_Cancel.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right;
|
||||||
|
B_Cancel.Location = new System.Drawing.Point(154, 220);
|
||||||
|
B_Cancel.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||||
|
B_Cancel.Name = "B_Cancel";
|
||||||
|
B_Cancel.Size = new System.Drawing.Size(88, 27);
|
||||||
|
B_Cancel.TabIndex = 72;
|
||||||
|
B_Cancel.Text = "Cancel";
|
||||||
|
B_Cancel.UseVisualStyleBackColor = true;
|
||||||
|
B_Cancel.Click += B_Cancel_Click;
|
||||||
|
//
|
||||||
|
// B_VirtualConsoleGSBall
|
||||||
|
//
|
||||||
|
B_VirtualConsoleGSBall.Location = new System.Drawing.Point(12, 12);
|
||||||
|
B_VirtualConsoleGSBall.Name = "B_VirtualConsoleGSBall";
|
||||||
|
B_VirtualConsoleGSBall.Size = new System.Drawing.Size(160, 64);
|
||||||
|
B_VirtualConsoleGSBall.TabIndex = 74;
|
||||||
|
B_VirtualConsoleGSBall.Text = "Enable GS Ball Event (Virtual Console)";
|
||||||
|
B_VirtualConsoleGSBall.UseVisualStyleBackColor = true;
|
||||||
|
B_VirtualConsoleGSBall.Click += B_VirtualConsoleGSBall_Click;
|
||||||
|
//
|
||||||
|
// SAV_Misc2
|
||||||
|
//
|
||||||
|
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
|
||||||
|
ClientSize = new System.Drawing.Size(344, 261);
|
||||||
|
Controls.Add(B_VirtualConsoleGSBall);
|
||||||
|
Controls.Add(B_Save);
|
||||||
|
Controls.Add(B_Cancel);
|
||||||
|
FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||||
|
Icon = Properties.Resources.Icon;
|
||||||
|
Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
|
||||||
|
MaximizeBox = false;
|
||||||
|
MinimumSize = new System.Drawing.Size(231, 167);
|
||||||
|
Name = "SAV_Misc2";
|
||||||
|
StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||||
|
Text = "Misc Editor";
|
||||||
|
ResumeLayout(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
private System.Windows.Forms.Button B_Save;
|
||||||
|
private System.Windows.Forms.Button B_Cancel;
|
||||||
|
private System.Windows.Forms.Button B_VirtualConsoleGSBall;
|
||||||
|
}
|
||||||
|
}
|
38
PKHeX.WinForms/Subforms/Save Editors/Gen2/SAV_Misc2.cs
Normal file
38
PKHeX.WinForms/Subforms/Save Editors/Gen2/SAV_Misc2.cs
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
using System;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using PKHeX.Core;
|
||||||
|
|
||||||
|
namespace PKHeX.WinForms;
|
||||||
|
|
||||||
|
public partial class SAV_Misc2 : Form
|
||||||
|
{
|
||||||
|
private readonly SaveFile Origin;
|
||||||
|
private readonly SAV2 SAV;
|
||||||
|
|
||||||
|
public SAV_Misc2(SAV2 sav)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
WinFormsUtil.TranslateInterface(this, Main.CurrentLanguage);
|
||||||
|
SAV = (SAV2)(Origin = sav).Clone();
|
||||||
|
|
||||||
|
B_VirtualConsoleGSBall.Visible = SAV.Version is GameVersion.C;
|
||||||
|
B_VirtualConsoleGSBall.Enabled = !SAV.IsEnabledGSBallMobileEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void B_Save_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Origin.CopyChangesFrom(SAV);
|
||||||
|
Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void B_Cancel_Click(object sender, EventArgs e) => Close();
|
||||||
|
|
||||||
|
private void B_VirtualConsoleGSBall_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
// Don't bother checking if the save is from Virtual Console.
|
||||||
|
// Can be moved between VC and GB era, and can be a quick way to enable the event on either.
|
||||||
|
SAV.EnableGSBallMobileEvent();
|
||||||
|
B_VirtualConsoleGSBall.Enabled = false;
|
||||||
|
System.Media.SystemSounds.Asterisk.Play();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue