public N64SyncSettings Clone()
 {
     return(new N64SyncSettings
     {
         Core = Core,
         Rsp = Rsp,
         VideoPlugin = VideoPlugin,
         DisableExpansionSlot = DisableExpansionSlot,
         RicePlugin = RicePlugin.Clone(),
         GlidePlugin = GlidePlugin.Clone(),
         Glide64mk2Plugin = Glide64mk2Plugin.Clone(),
         JaboPlugin = JaboPlugin.Clone(),
         GLideN64Plugin = GLideN64Plugin.Clone(),
         Controllers = System.Array.ConvertAll(Controllers, a => a.Clone())
     });
 }
        // get mupenapi internal object
        public VideoPluginSettings GetVPS(GameInfo game, int videoSizeX, int videoSizeY)
        {
            var             ret = new VideoPluginSettings(VideoPlugin, videoSizeX, videoSizeY);
            IPluginSettings ips = null;

            switch (VideoPlugin)
            {
            // clone so per game hacks don't overwrite our settings object
            case PluginType.Glide: ips = GlidePlugin.Clone(); break;

            case PluginType.GlideMk2: ips = Glide64mk2Plugin.Clone(); break;

            case PluginType.Rice: ips = RicePlugin.Clone(); break;

            case PluginType.Jabo: ips = JaboPlugin.Clone(); break;

            case PluginType.GLideN64: ips = GLideN64Plugin.Clone(); break;
            }

            ips.FillPerGameHacks(game);
            ret.Parameters = ips.GetPluginSettings();
            return(ret);
        }