2022-03-21 22:34:43 +00:00
/**
* Furnace Tracker - multi - system chiptune tracker
* Copyright ( C ) 2021 - 2022 tildearrow and contributors
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License along
* with this program ; if not , write to the Free Software Foundation , Inc . ,
* 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA .
*/
# include "gui.h"
void FurnaceGUI : : drawCompatFlags ( ) {
if ( nextWindow = = GUI_WINDOW_COMPAT_FLAGS ) {
compatFlagsOpen = true ;
ImGui : : SetNextWindowFocus ( ) ;
nextWindow = GUI_WINDOW_NOTHING ;
}
if ( ! compatFlagsOpen ) return ;
if ( ImGui : : Begin ( " Compatibility Flags " , & compatFlagsOpen ) ) {
ImGui : : TextWrapped ( " these flags are designed to provide better DefleMask/older Furnace compatibility. " ) ;
ImGui : : Checkbox ( " Limit slide range " , & e - > song . limitSlides ) ;
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " when enabled, slides are limited to a compatible range. \n may cause problems with slides in negative octaves. " ) ;
}
ImGui : : Checkbox ( " Linear pitch control " , & e - > song . linearPitch ) ;
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " linear pitch: \n - slides work in frequency/period space \n - E5xx and 04xx effects work in tonality space \n non-linear pitch: \n - slides work in frequency/period space \n - E5xx and 04xx effects work on frequency/period space " ) ;
}
ImGui : : Checkbox ( " Proper noise layout on NES and PC Engine " , & e - > song . properNoiseLayout ) ;
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " use a proper noise channel note mapping (0-15) instead of a rather unusual compatible one. \n unlocks all noise frequencies on PC Engine. " ) ;
}
ImGui : : Checkbox ( " Game Boy instrument duty is wave volume " , & e - > song . waveDutyIsVol ) ;
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " if enabled, an instrument with duty macro in the wave channel will be mapped to wavetable volume. " ) ;
}
ImGui : : Checkbox ( " Restart macro on portamento " , & e - > song . resetMacroOnPorta ) ;
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " when enabled, a portamento effect will reset the channel's macro if used in combination with a note. " ) ;
}
ImGui : : Checkbox ( " Legacy volume slides " , & e - > song . legacyVolumeSlides ) ;
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " simulate glitchy volume slide behavior by silently overflowing the volume when the slide goes below 0. " ) ;
}
ImGui : : Checkbox ( " Compatible arpeggio " , & e - > song . compatibleArpeggio ) ;
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " delay arpeggio by one tick on every new note. " ) ;
}
ImGui : : Checkbox ( " Reset slides after note off " , & e - > song . noteOffResetsSlides ) ;
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " when enabled, note off will reset the channel's slide effect. " ) ;
}
ImGui : : Checkbox ( " Reset portamento after reaching target " , & e - > song . targetResetsSlides ) ;
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " when enabled, the slide effect is 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. \n this simulates the behavior of some Amiga/SNES music engines. " ) ;
}
2022-03-23 06:35:57 +00:00
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. " ) ;
}
2022-03-24 04:56:59 +00:00
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 : : Checkbox ( " Ignore 0Dxx on the last order " , & e - > song . ignoreJumpAtEnd ) ;
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " if this is on, a jump to next row effect will not take place when it is on the last order of a song. " ) ;
}
2022-03-27 03:15:15 +00:00
ImGui : : Checkbox ( " Buggy portamento after pitch slide " , & e - > song . buggyPortaAfterSlide ) ;
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " simulates a bug in where portamento does not work after sliding. " ) ;
}
ImGui : : Checkbox ( " Apply Game Boy envelope on note-less instrument change " , & e - > song . gbInsAffectsEnvelope ) ;
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " if this is on, an instrument change will also affect the envelope. " ) ;
}
2022-04-13 05:34:00 +00:00
ImGui : : Checkbox ( " Ignore DAC mode change outside of intended channel in ExtCh mode " , & e - > song . ignoreDACModeOutsideIntendedChannel ) ;
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " if this is on, 17xx has no effect on the operator channels in YM2612. " ) ;
}
ImGui : : Checkbox ( " E1xy/E2xy also take priority over slide stops " , & e - > song . e1e2AlsoTakePriority ) ;
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " does this make any sense by now? " ) ;
}
2022-03-21 22:34:43 +00:00
ImGui : : Text ( " Loop modality: " ) ;
if ( ImGui : : RadioButton ( " Reset channels " , e - > song . loopModality = = 0 ) ) {
e - > song . loopModality = 0 ;
}
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " select to reset channels on loop. may trigger a voltage click on every loop! " ) ;
}
if ( ImGui : : RadioButton ( " Soft reset channels " , e - > song . loopModality = = 1 ) ) {
e - > song . loopModality = 1 ;
}
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " select to turn channels off on loop. " ) ;
}
if ( ImGui : : RadioButton ( " Do nothing " , e - > song . loopModality = = 2 ) ) {
e - > song . loopModality = 2 ;
}
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " select to not reset channels on loop. " ) ;
}
ImGui : : Separator ( ) ;
ImGui : : TextWrapped ( " the following flags are for compatibility with older Furnace versions. " ) ;
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.6 " ) ;
}
ImGui : : Checkbox ( " Allow instrument change during slides " , & e - > song . newInsTriggersInPorta ) ;
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " behavior changed in 0.6 " ) ;
}
ImGui : : Checkbox ( " Reset note to base on arpeggio stop " , & e - > song . arp0Reset ) ;
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " behavior changed in 0.6 " ) ;
}
2022-04-07 06:14:34 +00:00
ImGui : : Checkbox ( " ExtCh channel status is shared among operators " , & e - > song . sharedExtStat ) ;
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " behavior changed in 0.6 " ) ;
}
2022-04-18 05:52:29 +00:00
ImGui : : Checkbox ( " New SegaPCM features (macros and better panning) " , & e - > song . newSegaPCM ) ;
if ( ImGui : : IsItemHovered ( ) ) {
ImGui : : SetTooltip ( " behavior changed in 0.6 " ) ;
}
2022-03-21 22:34:43 +00:00
}
if ( ImGui : : IsWindowFocused ( ImGuiFocusedFlags_ChildWindows ) ) curWindow = GUI_WINDOW_COMPAT_FLAGS ;
ImGui : : End ( ) ;
}