private void CreateSkinSignatures()
 {
     Signatures[(int)SignatureNames.CurrentSkinData] = new SigEx
     {
         Name           = "currentSkinData",
         Pattern        = PatternHelpers.UnpackStr("75218b1d"),
         UseMask        = false,
         Offset         = 4,
         PointerOffsets = { 0, 0 }
     };
     Signatures[(int)SignatureNames.CurrentSkinFolder] = new SigEx
     {
         Name      = "currentSkinFolder",
         ParentSig = Signatures[(int)SignatureNames.CurrentSkinData],
         Offset    = 68
     };
 }
 private void CreateTourneySignatures()
 {
     Signatures.Add((int)SignatureNames.TourneyBase, new SigEx
     {
         Name    = "TourneyBase",
         Pattern = PatternHelpers.UnpackStr("7D15A10000000085C0"),
         Mask    = "xxx????xx",
         Offset  = -0xB
     });
     Signatures.Add((int)SignatureNames.TourneyIpcState, new SigEx
     {
         ParentSig      = Signatures[(int)SignatureNames.TourneyBase],
         PointerOffsets = { 4, 0x54 }
     });
     Signatures.Add((int)SignatureNames.TourneyLeftStars, new SigEx
     {
         ParentSig      = Signatures[(int)SignatureNames.TourneyBase],
         PointerOffsets = { 4, 0x1C, 0x2C }
     });
     Signatures.Add((int)SignatureNames.TourneyRightStars, new SigEx
     {
         ParentSig      = Signatures[(int)SignatureNames.TourneyBase],
         PointerOffsets = { 4, 0x20, 0x2C }
     });
     Signatures.Add((int)SignatureNames.TourneyBO, new SigEx
     {
         ParentSig      = Signatures[(int)SignatureNames.TourneyBase],
         PointerOffsets = { 4, 0x20, 0x30 }
     });
     Signatures.Add((int)SignatureNames.TourneyStarsVisible, new SigEx
     {
         ParentSig      = Signatures[(int)SignatureNames.TourneyBase],
         PointerOffsets = { 4, 0x20, 0x38 }
     });
     Signatures.Add((int)SignatureNames.TourneyScoreVisible, new SigEx
     {
         ParentSig      = Signatures[(int)SignatureNames.TourneyBase],
         PointerOffsets = { 4, 0x20, 0x39 }
     });
 }
        internal void CreateSignatures()
        {
            Signatures.Add((int)SignatureNames.OsuBase, new SigEx
            {
                Name    = "OsuBase",
                Pattern = PatternHelpers.UnpackStr("F80174048365"),
                UseMask = false
            });

            Signatures.Add((int)SignatureNames.GameMode, new SigEx
            {
                ParentSig      = Signatures[(int)SignatureNames.OsuBase],
                Offset         = -51,
                PointerOffsets = { 0 }
            });

            Signatures.Add((int)SignatureNames.Retrys, new SigEx
            {
                ParentSig      = Signatures[(int)SignatureNames.OsuBase],
                Offset         = -51,
                PointerOffsets = { 8 }
            });

            CreateBeatmapDataSignatures();

            Signatures.Add((int)SignatureNames.OsuStatus, new SigEx
            {
                Name           = "OsuStatus",
                ParentSig      = Signatures[(int)SignatureNames.OsuBase],
                Offset         = -60,
                PointerOffsets = { 0 }
            });
            Signatures.Add((int)SignatureNames.PlayTime, new SigEx
            {
                Name           = "PlayTime",
                ParentSig      = Signatures[(int)SignatureNames.OsuBase],
                Offset         = 100,
                PointerOffsets = { -16 }
            });
            Signatures[(int)SignatureNames.Mods] = new SigEx
            {
                Name           = "mods",
                Pattern        = PatternHelpers.UnpackStr("C8FF0000000000810D0000000000080000"),
                Mask           = "xx?????xx????xxxx",
                Offset         = 9,
                PointerOffsets = { 0 },
                UseMask        = true,
            };

            Signatures[(int)SignatureNames.IsReplay] = new SigEx
            {
                Name           = "IsReplay",
                Pattern        = PatternHelpers.UnpackStr("741A80000000000000741180"),
                Mask           = "xxx??????xxx",
                Offset         = 13,
                PointerOffsets = { 0 },
                UseMask        = true,
            };

            CreateSkinSignatures();
            CreatePlaySignatures();
            CreateTourneySignatures();
        }
        private void CreatePlaySignatures()
        {
            Signatures.Add((int)SignatureNames.PlayContainer, new SigEx
            {
                //avaliable only when playing;
                //need to reset on each play
                Name           = "PlayContainer",
                Pattern        = PatternHelpers.UnpackStr("C7864801000001000000A1"),
                Offset         = 0xB,
                PointerOffsets = { 0x4, 0x60 },
                UseMask        = false
            });

            Signatures.Add((int)SignatureNames.PlayingMods, new SigEx
            {
                //Complex - 2 xored ints
                ParentSig      = Signatures[(int)SignatureNames.PlayContainer],
                PointerOffsets = { 56, 28 }
            });
            Signatures.Add((int)SignatureNames.PlayerName, new SigEx
            {
                //char[]
                ParentSig      = Signatures[(int)SignatureNames.PlayContainer],
                PointerOffsets = { 56, 40 }
            });
            Signatures.Add((int)SignatureNames.HitErrors, new SigEx
            {
                //int[]
                ParentSig      = Signatures[(int)SignatureNames.PlayContainer],
                PointerOffsets = { 56, 56 }
            });
            Signatures.Add((int)SignatureNames.Combo, new SigEx
            {
                //ushort
                ParentSig      = Signatures[(int)SignatureNames.PlayContainer],
                PointerOffsets = { 56, 148 }
            });
            Signatures.Add((int)SignatureNames.ComboMax, new SigEx
            {
                //ushort
                ParentSig      = Signatures[(int)SignatureNames.PlayContainer],
                PointerOffsets = { 56, 104 }
            });
            Signatures.Add((int)SignatureNames.Hit100c, new SigEx
            {
                //ushort
                ParentSig      = Signatures[(int)SignatureNames.PlayContainer],
                PointerOffsets = { 56, 136 }
            });
            Signatures.Add((int)SignatureNames.Hit300c, new SigEx
            {
                //ushort
                ParentSig      = Signatures[(int)SignatureNames.PlayContainer],
                PointerOffsets = { 56, 138 }
            });
            Signatures.Add((int)SignatureNames.Hit50c, new SigEx
            {
                //ushort
                ParentSig      = Signatures[(int)SignatureNames.PlayContainer],
                PointerOffsets = { 56, 140 }
            });
            Signatures.Add((int)SignatureNames.HitGeki, new SigEx
            {
                //ushort
                ParentSig      = Signatures[(int)SignatureNames.PlayContainer],
                PointerOffsets = { 56, 142 }
            });
            Signatures.Add((int)SignatureNames.HitKatsu, new SigEx
            {
                //ushort
                ParentSig      = Signatures[(int)SignatureNames.PlayContainer],
                PointerOffsets = { 56, 144 }
            });
            Signatures.Add((int)SignatureNames.HitMissc, new SigEx
            {
                //ushort
                ParentSig      = Signatures[(int)SignatureNames.PlayContainer],
                PointerOffsets = { 56, 146 }
            });
            Signatures.Add((int)SignatureNames.Score, new SigEx
            {
                //int
                ParentSig      = Signatures[(int)SignatureNames.PlayContainer],
                PointerOffsets = { 56, 120 }
            });
            Signatures.Add((int)SignatureNames.PlayingGameMode, new SigEx
            {
                //int
                ParentSig      = Signatures[(int)SignatureNames.PlayContainer],
                PointerOffsets = { 56, 104 }
            });
            Signatures.Add((int)SignatureNames.Acc, new SigEx
            {
                //double
                ParentSig      = Signatures[(int)SignatureNames.PlayContainer],
                PointerOffsets = { 72, 20 }
            });
            Signatures.Add((int)SignatureNames.PlayerHp, new SigEx
            {
                //ushort
                ParentSig      = Signatures[(int)SignatureNames.PlayContainer],
                PointerOffsets = { 64, 28 }
            });
            Signatures.Add((int)SignatureNames.PlayerHpSmoothed, new SigEx
            {
                //ushort
                ParentSig      = Signatures[(int)SignatureNames.PlayContainer],
                PointerOffsets = { 64, 20 }
            });

            Signatures.Add((int)SignatureNames.ScoreV2, new SigEx
            {
                //int
                ParentSig      = Signatures[(int)SignatureNames.PlayContainer],
                PointerOffsets = { 0x4C, 0xC, 0x68, 0x4, 0xF8 }
            });
        }