diff --git a/PKHeX/Resources/text/other/flags_sm.txt b/PKHeX/Resources/text/other/flags_sm.txt index f714bdb52..2bdfdba5c 100644 --- a/PKHeX/Resources/text/other/flags_sm.txt +++ b/PKHeX/Resources/text/other/flags_sm.txt @@ -1 +1,2 @@ -0005 Test1 \ No newline at end of file +3100 Magearna Event Active +3487 Received Magearna Gift \ No newline at end of file diff --git a/PKHeX/Saves/SAV7.cs b/PKHeX/Saves/SAV7.cs index c5a5a0636..3efc662bd 100644 --- a/PKHeX/Saves/SAV7.cs +++ b/PKHeX/Saves/SAV7.cs @@ -45,7 +45,7 @@ public SAV7(byte[] data = null) public override int Generation => 7; protected override int GiftCountMax => 48; protected override int GiftFlagMax => 0x100 * 8; - protected override int EventFlagMax => -1; + protected override int EventFlagMax => 3968; protected override int EventConstMax => (EventFlag - EventConst) / 2; public override int OTLength => 12; public override int NickLength => 12; @@ -57,6 +57,8 @@ public SAV7(byte[] data = null) public override int MaxBallID => 0x1A; // 26 public override int MaxGameID => 31; // MN + public int QRSaveData; + // Feature Overrides public override bool HasGeolocation => true; @@ -166,7 +168,7 @@ private void getSAVOffsets() /* 02 */ // = 0x01000; // [014] RandomGroup /* 03 */ TrainerCard = 0x01200; // [0C0] MyStatus /* 04 */ Party = 0x01400; // [61C] PokePartySave - /* 05 */ EventFlag = 0x01C00; // [E00] EventWork + /* 05 */ EventConst = 0x01C00; // [E00] EventWork /* 06 */ PokeDex = 0x02A00; // [F78] ZukanData /* 07 */ GTS = 0x03A00; // [228] GtsData /* 08 */ Fused = 0x03E00; // [104] UnionPokemon @@ -196,9 +198,11 @@ private void getSAVOffsets() /* 32 */ // = 0x6B200; // [1FC] BattleInstSave /* 33 */ Daycare = 0x6B400; // [200] Sodateya /* 34 */ // = 0x6B600; // [120] WeatherSave - /* 35 */ // = 0x6B800; // [1C8] QRReaderSaveData + /* 35 */ QRSaveData = 0x6B800; // [1C8] QRReaderSaveData /* 36 */ // = 0x6BA00; // [200] TurtleSalmonSave + EventFlag = EventConst + 0x7D0; + OFS_PouchHeldItem = Item + 0; // 430 (Case 0) OFS_PouchKeyItem = Item + 0x6B8; // 184 (Case 4) OFS_PouchTMHM = Item + 0x998; // 108 (Case 2) diff --git a/PKHeX/Subforms/Save Editors/SAV_EventFlags.cs b/PKHeX/Subforms/Save Editors/SAV_EventFlags.cs index 227117000..7983acdc6 100644 --- a/PKHeX/Subforms/Save Editors/SAV_EventFlags.cs +++ b/PKHeX/Subforms/Save Editors/SAV_EventFlags.cs @@ -53,6 +53,8 @@ public SAV_EventFlags() private int constEntry = -1; private string gamePrefix = "unk"; + private const ulong MagearnaConst = 0xCBE05F18356504AC; + private void B_Cancel_Click(object sender, EventArgs e) { Close(); @@ -64,6 +66,8 @@ private void B_Save_Click(object sender, EventArgs e) flags[getControlNum(flag)] = flag.Checked; SAV.EventFlags = flags; + HandleSpecialFlags(); + // Copy back Constants changeConstantIndex(null, null); // Trigger Saving SAV.EventConsts = Constants; @@ -71,6 +75,15 @@ private void B_Save_Click(object sender, EventArgs e) Close(); } + private void HandleSpecialFlags() + { + if (SAV.SM) // Ensure magearna event flag has magic constant + { + BitConverter.GetBytes((ulong)(flags[3100] ? MagearnaConst : 0)).CopyTo(SAV.Data, ((SAV7)SAV).QRSaveData + 0x168); + } + + } + private string[] getStringList(string type) { switch (SAV.Version)