GUI: re-organize compatibility flags window
This commit is contained in:
parent
9cd609e738
commit
66f09e8d8f
|
@ -29,7 +29,9 @@ void FurnaceGUI::drawCompatFlags() {
|
|||
}
|
||||
if (!compatFlagsOpen) return;
|
||||
if (ImGui::Begin("Compatibility Flags",&compatFlagsOpen,globalWinFlags)) {
|
||||
ImGui::TextWrapped("these flags are designed to provide better DefleMask/older Furnace compatibility.");
|
||||
ImGui::TextWrapped("these flags are designed to provide better DefleMask/older Furnace compatibility.\nit is recommended to disable most of these unless you rely on specific quirks.");
|
||||
if (ImGui::BeginTabBar("settingsTab")) {
|
||||
if (ImGui::BeginTabItem("DefleMask")) {
|
||||
ImGui::Checkbox("Limit slide range",&e->song.limitSlides);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, slides are limited to a compatible range.\nmay cause problems with slides in negative octaves.");
|
||||
|
@ -55,41 +57,17 @@ void FurnaceGUI::drawCompatFlags() {
|
|||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("delay arpeggio by one tick on every new note.");
|
||||
}
|
||||
InvCheckbox("Don't reset slides after note off",&e->song.noteOffResetsSlides);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, note off will not reset the channel's slide effect.");
|
||||
}
|
||||
InvCheckbox("Don't reset portamento after reaching target",&e->song.targetResetsSlides);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, the slide effect will not be disabled after it reaches its target.");
|
||||
}
|
||||
ImGui::Checkbox("Ignore duplicate slide effects",&e->song.ignoreDuplicateSlides);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("if this is on, only the first slide of a row in a channel will be considered.");
|
||||
}
|
||||
ImGui::Checkbox("Continuous vibrato",&e->song.continuousVibrato);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, vibrato will not be reset on a new note.");
|
||||
}
|
||||
ImGui::Checkbox("Broken DAC mode",&e->song.brokenDACMode);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, the DAC in YM2612 will be disabled if there isn't any sample playing.");
|
||||
}
|
||||
ImGui::Checkbox("Auto-insert one tick gap between notes",&e->song.oneTickCut);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, a one-tick note cut will be inserted between non-legato/non-portamento notes.\nthis simulates the behavior of some Amiga/SNES music engines.\n\nineffective on C64.");
|
||||
}
|
||||
ImGui::Checkbox("Broken speed alternation",&e->song.brokenSpeedSel);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("determines next speed based on whether the row is odd/even instead of alternating between speeds.");
|
||||
}
|
||||
ImGui::Checkbox("Don't slide on the first tick of a row",&e->song.noSlidesOnFirstTick);
|
||||
ImGui::Checkbox("Ignore duplicate slide effects",&e->song.ignoreDuplicateSlides);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("simulates ProTracker's behavior of not applying volume/pitch slides on the first tick of a row.");
|
||||
}
|
||||
ImGui::Checkbox("Reset arpeggio position on row change",&e->song.rowResetsArpPos);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("simulates ProTracker's behavior of arpeggio being bound to the current tick of a row.");
|
||||
ImGui::SetTooltip("if this is on, only the first slide of a row in a channel will be considered.");
|
||||
}
|
||||
ImGui::Checkbox("Ignore 0Dxx on the last order",&e->song.ignoreJumpAtEnd);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
|
@ -123,10 +101,6 @@ void FurnaceGUI::drawCompatFlags() {
|
|||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, duty macro will always reset phase, even if its value hasn't changed.");
|
||||
}
|
||||
InvCheckbox("Pitch macro is not linear",&e->song.pitchMacroIsLinear);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, the pitch macro of an instrument is in frequency/period space.");
|
||||
}
|
||||
InvCheckbox("Broken volume scaling strategy",&e->song.newVolumeScaling);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled:\n- log scaling: multiply\n- linear scaling: subtract\nwhen disabled:\n- log scaling: subtract\n- linear scaling: multiply");
|
||||
|
@ -147,7 +121,79 @@ void FurnaceGUI::drawCompatFlags() {
|
|||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, any SN period under 8 will be written as 1 instead.\nthis replicates DefleMask behavior, but reduces available period range.");
|
||||
}
|
||||
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
if (ImGui::BeginTabItem("Old Furnace")) {
|
||||
ImGui::Checkbox("Arpeggio inhibits non-porta slides",&e->song.arpNonPorta);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.5.5");
|
||||
}
|
||||
ImGui::Checkbox("Wack FM algorithm macro",&e->song.algMacroBehavior);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.5.5");
|
||||
}
|
||||
ImGui::Checkbox("Broken shortcut slides (E1xy/E2xy)",&e->song.brokenShortcutSlides);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.5.7");
|
||||
}
|
||||
ImGui::Checkbox("Stop portamento on note off",&e->song.stopPortaOnNoteOff);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
}
|
||||
InvCheckbox("Don't allow instrument change during slides",&e->song.newInsTriggersInPorta);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
}
|
||||
InvCheckbox("Don't reset note to base on arpeggio stop",&e->song.arp0Reset);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
}
|
||||
InvCheckbox("ExtCh channel status is not shared among operators",&e->song.sharedExtStat);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
}
|
||||
InvCheckbox("Disable new SegaPCM features (macros and better panning)",&e->song.newSegaPCM);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
}
|
||||
ImGui::Checkbox("Old FM octave boundary behavior",&e->song.oldOctaveBoundary);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
}
|
||||
ImGui::Checkbox("Disable OPN2 DAC volume control",&e->song.noOPN2Vol);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
}
|
||||
ImGui::Checkbox("Broken initial position of portamento after arpeggio",&e->song.brokenPortaArp);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1.5");
|
||||
}
|
||||
ImGui::Checkbox("Disable new sample features",&e->song.disableSampleMacro);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre2");
|
||||
}
|
||||
ImGui::Checkbox("Old arpeggio macro + pitch slide strategy",&e->song.oldArpStrategy);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre2");
|
||||
}
|
||||
ImGui::Checkbox("Broken portamento during legato",&e->song.brokenPortaLegato);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre4");
|
||||
}
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
if (ImGui::BeginTabItem(".mod import")) {
|
||||
ImGui::Checkbox("Don't slide on the first tick of a row",&e->song.noSlidesOnFirstTick);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("simulates ProTracker's behavior of not applying volume/pitch slides on the first tick of a row.");
|
||||
}
|
||||
ImGui::Checkbox("Reset arpeggio position on row change",&e->song.rowResetsArpPos);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("simulates ProTracker's behavior of arpeggio being bound to the current tick of a row.");
|
||||
}
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
if (ImGui::BeginTabItem("Pitch/Playback")) {
|
||||
ImGui::Text("Pitch linearity:");
|
||||
if (ImGui::RadioButton("None",e->song.linearPitch==0)) {
|
||||
e->song.linearPitch=0;
|
||||
|
@ -236,66 +282,35 @@ void FurnaceGUI::drawCompatFlags() {
|
|||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("only accept 0Dxx");
|
||||
}
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
if (ImGui::BeginTabItem("Other")) {
|
||||
ImGui::Checkbox("Auto-insert one tick gap between notes",&e->song.oneTickCut);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, a one-tick note cut will be inserted between non-legato/non-portamento notes.\nthis simulates the behavior of some Amiga/SNES music engines.\n\nineffective on C64.");
|
||||
}
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
ImGui::TextWrapped("the following flags are for compatibility with older Furnace versions.");
|
||||
|
||||
ImGui::Checkbox("Arpeggio inhibits non-porta slides",&e->song.arpNonPorta);
|
||||
InvCheckbox("Don't reset slides after note off",&e->song.noteOffResetsSlides);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.5.5");
|
||||
ImGui::SetTooltip("when enabled, note off will not reset the channel's slide effect.");
|
||||
}
|
||||
ImGui::Checkbox("Wack FM algorithm macro",&e->song.algMacroBehavior);
|
||||
InvCheckbox("Don't reset portamento after reaching target",&e->song.targetResetsSlides);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.5.5");
|
||||
ImGui::SetTooltip("when enabled, the slide effect will not be disabled after it reaches its target.");
|
||||
}
|
||||
ImGui::Checkbox("Broken shortcut slides (E1xy/E2xy)",&e->song.brokenShortcutSlides);
|
||||
ImGui::Checkbox("Continuous vibrato",&e->song.continuousVibrato);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.5.7");
|
||||
ImGui::SetTooltip("when enabled, vibrato will not be reset on a new note.");
|
||||
}
|
||||
ImGui::Checkbox("Stop portamento on note off",&e->song.stopPortaOnNoteOff);
|
||||
InvCheckbox("Pitch macro is not linear",&e->song.pitchMacroIsLinear);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
ImGui::SetTooltip("when enabled, the pitch macro of an instrument is in frequency/period space.");
|
||||
}
|
||||
InvCheckbox("Don't allow instrument change during slides",&e->song.newInsTriggersInPorta);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
InvCheckbox("Don't reset note to base on arpeggio stop",&e->song.arp0Reset);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
}
|
||||
InvCheckbox("ExtCh channel status is not shared among operators",&e->song.sharedExtStat);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
}
|
||||
InvCheckbox("Disable new SegaPCM features (macros and better panning)",&e->song.newSegaPCM);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
}
|
||||
ImGui::Checkbox("Old FM octave boundary behavior",&e->song.oldOctaveBoundary);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
}
|
||||
ImGui::Checkbox("Disable OPN2 DAC volume control",&e->song.noOPN2Vol);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
}
|
||||
ImGui::Checkbox("Broken initial position of portamento after arpeggio",&e->song.brokenPortaArp);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1.5");
|
||||
}
|
||||
ImGui::Checkbox("Disable new sample features",&e->song.disableSampleMacro);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre2");
|
||||
}
|
||||
ImGui::Checkbox("Old arpeggio macro + pitch slide strategy",&e->song.oldArpStrategy);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre2");
|
||||
}
|
||||
ImGui::Checkbox("Broken portamento during legato",&e->song.brokenPortaLegato);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre4");
|
||||
ImGui::EndTabBar();
|
||||
}
|
||||
}
|
||||
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_COMPAT_FLAGS;
|
||||
|
|
Loading…
Reference in New Issue