deprecate macro heights

now we do everything based on the ins type
This commit is contained in:
tildearrow 2022-01-13 20:44:45 -05:00
parent 91e8ff01cf
commit 805cf69c52
4 changed files with 43 additions and 63 deletions

View File

@ -170,9 +170,9 @@ size | description
4 | extra 2 macro loop (>=17)
4 | extra 3 macro loop (>=17)
1 | arp macro mode
1 | volume macro height (>=15) or reserved
1 | duty macro height (>=15) or reserved
1 | wave macro height (>=15) or reserved
1 | reserved (>=17) or volume macro height (>=15) or reserved
1 | reserved (>=17) or duty macro height (>=15) or reserved
1 | reserved (>=17) or wave macro height (>=15) or reserved
4?? | volume macro
4?? | arp macro
4?? | duty macro

View File

@ -646,10 +646,14 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
ins->type=DIV_INS_C64;
}
if (ds.system[0]==DIV_SYSTEM_YM2610 || ds.system[0]==DIV_SYSTEM_YM2610_EXT) {
if (!ins->mode) {
ins->type=DIV_INS_AY;
}
ins->std.dutyMacroHeight=31;
ins->std.waveMacroHeight=7;
}
if (ds.system[0]==DIV_SYSTEM_PCE) {
ins->type=DIV_INS_PCE;
ins->std.volMacroHeight=31;
}
@ -1241,6 +1245,15 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) {
reader.read(ins->std.ex1Macro,4*ins->std.ex1MacroLen);
reader.read(ins->std.ex2Macro,4*ins->std.ex2MacroLen);
reader.read(ins->std.ex3Macro,4*ins->std.ex3MacroLen);
} else {
if (ins->type==DIV_INS_STD) {
if (ins->std.volMacroHeight==31) {
ins->type=DIV_INS_PCE;
}
if (ins->std.dutyMacroHeight==31) {
ins->type=DIV_INS_AY;
}
}
}
ds.ins.push_back(ins);
@ -1696,9 +1709,9 @@ SafeWriter* DivEngine::saveFur() {
w->writeI(ins->std.ex2MacroLoop);
w->writeI(ins->std.ex3MacroLoop);
w->writeC(ins->std.arpMacroMode);
w->writeC(ins->std.volMacroHeight);
w->writeC(ins->std.dutyMacroHeight);
w->writeC(ins->std.waveMacroHeight);
w->writeC(0); // reserved
w->writeC(0);
w->writeC(0);
for (int j=0; j<ins->std.volMacroLen; j++) {
w->writeI(ins->std.volMacro[j]);
}

View File

@ -31,7 +31,7 @@
const int _ZERO=0;
const int _ONE=1;
const int _THREE=3;
const int _FOUR=4;
const int _SIX=6;
const int _SEVEN=7;
const int _TEN=10;
const int _FIFTEEN=15;
@ -551,6 +551,14 @@ void FurnaceGUI::drawInsList() {
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_AMIGA]);
name=fmt::sprintf(ICON_FA_FUTBOL_O " %.2x: %s##_INS%d\n",i,ins->name,i);
break;
case DIV_INS_PCE:
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_PCE]);
name=fmt::sprintf(ICON_FA_ID_BADGE " %.2x: %s##_INS%d\n",i,ins->name,i);
break;
case DIV_INS_AY:
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_AY]);
name=fmt::sprintf(ICON_FA_BAR_CHART " %.2x: %s##_INS%d\n",i,ins->name,i);
break;
default:
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_UNKNOWN]);
name=fmt::sprintf(ICON_FA_QUESTION " %.2x: %s##_INS%d\n",i,ins->name,i);
@ -575,8 +583,8 @@ int detuneTable[8]={
0, 1, 2, 3, 0, -3, -2, -1
};
const char* insTypes[5]={
"Standard", "FM", "Game Boy", "C64", "Amiga"
const char* insTypes[7]={
"Standard", "FM", "Game Boy", "C64", "Amiga", "PC Engine", "AY/SSG"
};
const char* ssgEnvTypes[8]={
@ -591,8 +599,8 @@ void FurnaceGUI::drawInsEdit() {
} else {
DivInstrument* ins=e->song.ins[curIns];
ImGui::InputText("Name",&ins->name);
if (ins->type<0 || ins->type>4) ins->type=DIV_INS_FM;
if (ImGui::SliderScalar("Type",ImGuiDataType_U8,&ins->type,&_ZERO,&_FOUR,insTypes[ins->type])) {
if (ins->type<0 || ins->type>6) ins->type=DIV_INS_FM;
if (ImGui::SliderScalar("Type",ImGuiDataType_U8,&ins->type,&_ZERO,&_SIX,insTypes[ins->type])) {
ins->mode=(ins->type==DIV_INS_FM);
}
@ -757,20 +765,6 @@ void FurnaceGUI::drawInsEdit() {
}
} else {
ImGui::Text("Volume Macro");
ImGui::SameLine();
if (ImGui::SmallButton("15##VMH15")) {
ins->std.volMacroHeight=15;
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Rest of platforms");
}
ImGui::SameLine();
if (ImGui::SmallButton("31##VMH31")) {
ins->std.volMacroHeight=31;
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("PC Engine only");
}
}
for (int i=0; i<ins->std.volMacroLen; i++) {
if (ins->type==DIV_INS_C64 && ins->c64.volIsCutoff && !ins->c64.filterIsAbs) {
@ -781,7 +775,7 @@ void FurnaceGUI::drawInsEdit() {
loopIndicator[i]=(ins->std.volMacroLoop!=-1 && i>=ins->std.volMacroLoop);
}
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding,ImVec2(0.0f,0.0f));
int volMax=ins->std.volMacroHeight;
int volMax=(ins->type==DIV_INS_PCE)?31:15;
int volMin=0;
if (ins->type==DIV_INS_C64) {
if (ins->c64.volIsCutoff) {
@ -861,7 +855,7 @@ void FurnaceGUI::drawInsEdit() {
}
// duty macro
int dutyMax=ins->std.dutyMacroHeight;
int dutyMax=(ins->type==DIV_INS_AY)?31:3;
if (ins->type==DIV_INS_C64) {
if (ins->c64.dutyIsAbs) {
dutyMax=4095;
@ -878,20 +872,10 @@ void FurnaceGUI::drawInsEdit() {
ImGui::Text("Relative Duty Macro");
}
} else {
ImGui::Text("Duty/Noise Mode Macro");
ImGui::SameLine();
if (ImGui::SmallButton("3##DMH3")) {
ins->std.dutyMacroHeight=3;
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Most platforms");
}
ImGui::SameLine();
if (ImGui::SmallButton("31##DMH31")) {
ins->std.dutyMacroHeight=31;
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Neo Geo SSG/AY-3-8910/YM2149 only");
if (ins->type==DIV_INS_AY) {
ImGui::Text("Noise Frequency Macro");
} else {
ImGui::Text("Duty/Noise Mode Macro");
}
}
bool dutyIsRel=(ins->type==DIV_INS_C64 && !ins->c64.dutyIsAbs);
@ -928,27 +912,11 @@ void FurnaceGUI::drawInsEdit() {
}
// wave macro
int waveMax=ins->std.waveMacroHeight;
int waveMax=(ins->type==DIV_INS_AY)?7:63;
if (ins->type==DIV_INS_C64) waveMax=8;
if (waveMax>0) {
ImGui::Separator();
ImGui::Text("Waveform Macro");
if (ins->type!=DIV_INS_C64) {
ImGui::SameLine();
if (ImGui::SmallButton("7##WMH7")) {
ins->std.waveMacroHeight=7;
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Neo Geo SSG/AY-3-8910/YM2149 only");
}
ImGui::SameLine();
if (ImGui::SmallButton("63##WMH63")) {
ins->std.waveMacroHeight=63;
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Rest of platforms");
}
}
for (int i=0; i<ins->std.waveMacroLen; i++) {
asFloat[i]=ins->std.waveMacro[i];
loopIndicator[i]=(ins->std.waveMacroLoop!=-1 && i>=ins->std.waveMacroLoop);
@ -984,11 +952,6 @@ void FurnaceGUI::drawInsEdit() {
}
ImGui::EndTabBar();
}
if (ins->mode) { // FM
} else { // STD
}
}
}
if (ImGui::IsWindowFocused()) curWindow=GUI_WINDOW_INS_EDIT;
@ -3360,6 +3323,8 @@ FurnaceGUI::FurnaceGUI():
uiColors[GUI_COLOR_INSTR_GB]=ImVec4(1.0f,1.0f,0.5f,1.0f);
uiColors[GUI_COLOR_INSTR_C64]=ImVec4(0.85f,0.8f,1.0f,1.0f);
uiColors[GUI_COLOR_INSTR_AMIGA]=ImVec4(1.0f,0.5f,0.5f,1.0f);
uiColors[GUI_COLOR_INSTR_PCE]=ImVec4(1.0f,0.8f,0.5f,1.0f);
uiColors[GUI_COLOR_INSTR_AY]=ImVec4(1.0f,0.5f,1.0f,1.0f);
uiColors[GUI_COLOR_INSTR_UNKNOWN]=ImVec4(0.3f,0.3f,0.3f,1.0f);
uiColors[GUI_COLOR_CHANNEL_FM]=ImVec4(0.2f,0.8f,1.0f,1.0f);
uiColors[GUI_COLOR_CHANNEL_PULSE]=ImVec4(0.4f,1.0f,0.2f,1.0f);

View File

@ -18,6 +18,8 @@ enum FurnaceGUIColors {
GUI_COLOR_INSTR_GB,
GUI_COLOR_INSTR_C64,
GUI_COLOR_INSTR_AMIGA,
GUI_COLOR_INSTR_PCE,
GUI_COLOR_INSTR_AY,
GUI_COLOR_INSTR_UNKNOWN,
GUI_COLOR_CHANNEL_FM,
GUI_COLOR_CHANNEL_PULSE,