private void butOK_Click(object sender, EventArgs e)
        {
            // Test if everything is 'ok'
            if (!NgParameterInfo.TriggerIsValid(_level.Settings, TestTrigger))
            {
                if (DarkMessageBox.Show(this, "The currently selected trigger data is not valid for the engine.",
                                        "Trigger invalid", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) != DialogResult.OK)
                {
                    return;
                }
            }

            // Store some values like we have not NG triggers
            _trigger.TriggerType = TriggerType;
            _trigger.TargetType  = TargetType;
            _trigger.Target      = paramTarget.Parameter;
            _trigger.Timer       = paramTimer.Parameter;
            _trigger.Extra       = paramExtra.Parameter;
            _trigger.CodeBits    = CodeBits;
            _trigger.OneShot     = cbOneShot.Checked;

            // Close
            DialogResult = DialogResult.OK;
            Close();
        }
        private void UpdateExportToTrigger()
        {
            scriptExportPanel.Visible = _level.Settings.GameVersion == TRVersion.Game.TRNG;
            if (_level.Settings.GameVersion != TRVersion.Game.TRNG)
            {
                return;
            }

            try
            {
                tbScript.Text               = NgParameterInfo.ExportToScriptTrigger(_level, TestTrigger);
                tbScript.Tag                = NgParameterInfo.ExportToScriptTrigger(_level, TestTrigger, true);
                tbScript.Enabled            = true;
                butCopyToClipboard.Enabled  = true;
                butCopyWithComments.Enabled = true;
            }
            catch (NgParameterInfo.ExceptionScriptNotSupported)
            {
                tbScript.Text               = "Not supported";
                tbScript.Tag                = null;
                tbScript.Enabled            = false;
                butCopyToClipboard.Enabled  = false;
                butCopyWithComments.Enabled = false;
            }
            catch (NgParameterInfo.ExceptionScriptIdMissing)
            {
                tbScript.Text               = "Click to generate";
                tbScript.Tag                = null;
                tbScript.Enabled            = false;
                butCopyToClipboard.Enabled  = false;
                butCopyWithComments.Enabled = false;
            }
            catch (Exception exc)
            {
                tbScript.Text               = "Check all fields";
                tbScript.Tag                = null;
                tbScript.Enabled            = false;
                butCopyToClipboard.Enabled  = false;
                butCopyWithComments.Enabled = false;
                logger.Debug(exc, "\"ExportToScriptTrigger\" failed.");
            }
        }
        public void UpdateDialog()
        {
            // This is needed to prevent recursive UpdateDialog call.
            if (_dialogIsUpdating)
            {
                return;
            }

            _dialogIsUpdating = true;

            paramTriggerType.ParameterRange = NgParameterInfo.GetTriggerTypeRange(_level.Settings).ToParameterRange();
            paramTargetType.ParameterRange  = NgParameterInfo.GetTargetTypeRange(_level.Settings, TriggerType).ToParameterRange();

            bool isConditionNg = TriggerType == TriggerType.ConditionNg;

            // HACK: Change order of population based on target type.

            if (isConditionNg)
            {
                paramTimer.ParameterRange  = NgParameterInfo.GetTimerRange(_level.Settings, TriggerType, TargetType, paramTarget.Parameter);
                paramTarget.ParameterRange = NgParameterInfo.GetTargetRange(_level.Settings, TriggerType, TargetType, paramTimer.Parameter);
            }
            else
            {
                paramTarget.ParameterRange = NgParameterInfo.GetTargetRange(_level.Settings, TriggerType, TargetType, paramTimer.Parameter);
                paramTimer.ParameterRange  = NgParameterInfo.GetTimerRange(_level.Settings, TriggerType, TargetType, paramTarget.Parameter);
            }

            paramExtra.ParameterRange = NgParameterInfo.GetExtraRange(_level.Settings, TriggerType, TargetType, paramTarget.Parameter, paramTimer.Parameter);

            _dialogIsUpdating = false;

            cbBit1.Enabled = !isConditionNg;
            cbBit2.Enabled = !isConditionNg;
            cbBit3.Enabled = !isConditionNg;
            cbBit4.Enabled = !isConditionNg;
            cbBit5.Enabled = !isConditionNg;

            UpdateExportToTrigger();
        }