AY/YM Timer FX bug fixes and improvements

pull request #2547
manual merge due to modification of unrelated files according to GitHub's
files view

Co-authored-by: host12prog <hungnguyen.481335@gmail.com>
This commit is contained in:
tildearrow 2025-10-04 18:39:07 -05:00
parent 80a92b8b43
commit dc87bc489f
2 changed files with 54 additions and 37 deletions

View file

@ -838,6 +838,22 @@ String macroSoundUnitWaves(int id, float val, void* u) {
return fmt::sprintf("%d: %s",id,label);
}
String macroTFXModes(int id, float val, void* u) {
switch (((int)val)&3) {
case 0:
return _("Disabled");
case 1:
return _("PWM");
case 2:
return _("SyncBuzzer");
case 3:
return _("Reserved");
default:
return "???";
}
return "???";
}
String macroSID3SpecialWaves(int id, float val, void* u) {
if ((int)val<0 || (int)val>=SID3_NUM_SPECIAL_WAVES) return "???";
@ -2099,12 +2115,12 @@ void FurnaceGUI::drawMacroEdit(FurnaceGUIMacroDesc& i, int totalFit, float avail
}
}
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding,ImVec2(0.0f,0.0f));
if (MACRO_VZOOM<1) {
if (i.macro->macroType==DIV_MACRO_ARP || i.isArp) {
MACRO_VZOOM=24;
MACRO_VSCROLL=120-12;
} else if (i.macro->macroType==DIV_MACRO_PITCH || i.isPitch) {
}
else if ((i.macro->macroType == DIV_MACRO_PITCH || i.isPitch) || (i.macro->macroType == DIV_MACRO_EX7 && i.isPitch)) {
MACRO_VZOOM=128;
MACRO_VSCROLL=2048-64;
} else {
@ -8762,16 +8778,12 @@ void FurnaceGUI::drawInsEdit() {
{
if (ImGui::BeginTabItem(_("Timer Macros")))
{
ImGui::Text(_("warning: timer effects are not supported by VGM export!"));
macroList.push_back(FurnaceGUIMacroDesc(_("Timer FX"),&ins->std.ex6Macro,0,3,64,uiColors[GUI_COLOR_MACRO_OTHER]));
macroList.push_back(FurnaceGUIMacroDesc(_("TFX Offset"),&ins->std.ex7Macro,-2048,2047,160,uiColors[GUI_COLOR_MACRO_PITCH],true));
ImGui::Text(_("warning: timer effects require direct stream mode to be enabled during VGM export!"));
macroList.push_back(FurnaceGUIMacroDesc(_("Timer FX"),&ins->std.ex6Macro,0,2,64,uiColors[GUI_COLOR_MACRO_OTHER],false,NULL,macroTFXModes));
macroList.push_back(FurnaceGUIMacroDesc(_("Timer Offset"),&ins->std.ex7Macro,-2048,2047,160,uiColors[GUI_COLOR_MACRO_PITCH],true,macroRelativeMode,NULL,false,NULL,false,NULL,false,true));
macroList.push_back(FurnaceGUIMacroDesc(_("Timer Num"),&ins->std.ex8Macro,0,15,64,uiColors[GUI_COLOR_MACRO_OTHER]));
macroList.push_back(FurnaceGUIMacroDesc(_("Timer Den"),&ins->std.fmsMacro,0,15,64,uiColors[GUI_COLOR_MACRO_OTHER]));
macroList.push_back(FurnaceGUIMacroDesc(_("PWM Boundary"),&ins->std.amsMacro,0,15,64,uiColors[GUI_COLOR_MACRO_OTHER]));
// workaround, because the gui will not set
// zoom or scroll if we're not in macros tab
ins->temp.vZoom[DIV_MACRO_EX7]=128;
ins->temp.vScroll[DIV_MACRO_EX7]=2048-64;
drawMacros(macroList,macroEditStateMacros,ins);
ImGui::EndTabItem();
}