add cutoff & resonance scaling control effects, work more on Russian locale

This commit is contained in:
LTVA1 2024-08-18 18:55:46 +03:00
parent 5fd93596b6
commit f4ff45efb7
35 changed files with 38004 additions and 37207 deletions

View file

@ -105,6 +105,12 @@ wave channel has all these features, except, obviously, waveform generation stag
- `AExx`: **tone phase reset.** `xx` is the tick on which the phase reset happens.
- `AFxx`: **noise phase reset.** `xx` is the tick on which the phase reset happens.
- `B0xx`: **envelope reset.** `xx` is the tick on which the envelope reset happens.
- `B1xy`: **filter cutoff scaling control.** `x` is the filter (`0-3`), and lower 2 bits of `y` control the scaling:
- `bit 0`: enable cutoff scaling
- `bit 1`: inverse cutoff scaling
- `B2xy`: **filter resonance scaling control.** `x` is the filter (`0-3`), and lower 2 bits of `y` control the scaling:
- `bit 0`: enable resonance scaling
- `bit 1`: inverse resonance scaling
## info

3694
po/de.po

File diff suppressed because it is too large Load diff

3742
po/es.po

File diff suppressed because it is too large Load diff

3694
po/fi.po

File diff suppressed because it is too large Load diff

3694
po/fr.po

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

3694
po/hy.po

File diff suppressed because it is too large Load diff

3694
po/id.po

File diff suppressed because it is too large Load diff

3694
po/ja.po

File diff suppressed because it is too large Load diff

3694
po/ko.po

File diff suppressed because it is too large Load diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

3694
po/nl.po

File diff suppressed because it is too large Load diff

3747
po/pl.po

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

4722
po/ru.po

File diff suppressed because it is too large Load diff

3694
po/sk.po

File diff suppressed because it is too large Load diff

3742
po/sv.po

File diff suppressed because it is too large Load diff

3694
po/th.po

File diff suppressed because it is too large Load diff

3694
po/tr.po

File diff suppressed because it is too large Load diff

3694
po/uk.po

File diff suppressed because it is too large Load diff

3742
po/zh.po

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -286,6 +286,9 @@ enum DivDispatchCmds {
DIV_CMD_SID3_NOISE_PHASE_RESET,
DIV_CMD_SID3_ENVELOPE_RESET,
DIV_CMD_SID3_CUTOFF_SCALING,
DIV_CMD_SID3_RESONANCE_SCALING,
DIV_CMD_MAX
};

View file

@ -1162,6 +1162,16 @@ int DivPlatformSID3::dispatch(DivCommand c) {
case DIV_CMD_SID3_ENVELOPE_RESET:
chan[c.chan].envelope_reset_counter = c.value;
break;
case DIV_CMD_SID3_CUTOFF_SCALING:
chan[c.chan].filt[(c.value >> 4) & 3].bindCutoffToNote = c.value & 1;
chan[c.chan].filt[(c.value >> 4) & 3].bindCutoffToNoteDir = c.value & 2;
chan[c.chan].freqChanged = true;
break;
case DIV_CMD_SID3_RESONANCE_SCALING:
chan[c.chan].filt[(c.value >> 4) & 3].bindResonanceToNote = c.value & 1;
chan[c.chan].filt[(c.value >> 4) & 3].bindResonanceToNoteDir = c.value & 2;
chan[c.chan].freqChanged = true;
break;
case DIV_CMD_SAMPLE_POS:
chan[c.chan].dacPos=c.value;
break;

View file

@ -285,6 +285,8 @@ const char* cmdName[]={
"SID3_PHASE_RESET",
"SID3_NOISE_PHASE_RESET",
"SID3_ENVELOPE_RESET",
"SID3_CUTOFF_SCALING",
"SID3_RESONANCE_SCALING",
};
static_assert((sizeof(cmdName)/sizeof(void*))==DIV_CMD_MAX,"update cmdName!");

View file

@ -766,6 +766,9 @@ void DivEngine::registerSystems() {
{0xAE, {DIV_CMD_SID3_PHASE_RESET, _("AExx: Phase reset on tick xx")}},
{0xAF, {DIV_CMD_SID3_NOISE_PHASE_RESET, _("AFxx: Noise phase reset on tick xx")}},
{0xB0, {DIV_CMD_SID3_ENVELOPE_RESET, _("B0xx: Envelope reset on tick xx")}},
{0xB1, {DIV_CMD_SID3_CUTOFF_SCALING, _("B1xy: Cutoff scaling control (x: filter (0-3); y: bit 0: enable scaling; bit 1: invert scaling)")}},
{0xB2, {DIV_CMD_SID3_RESONANCE_SCALING, _("B2xy: Resonance scaling control (x: filter (0-3); y: bit 0: enable scaling; bit 1: invert scaling)")}},
};
const EffectHandler SID3FineDutyHandler(DIV_CMD_C64_FINE_DUTY, _("5xxx: Set pulse width (0 to FFF)"), effectValLong<12>);

View file

@ -436,8 +436,8 @@ const FurnaceGUIColors fxColors[256]={
// B0-BF
GUI_COLOR_PATTERN_EFFECT_SYS_PRIMARY,
GUI_COLOR_PATTERN_EFFECT_INVALID,
GUI_COLOR_PATTERN_EFFECT_INVALID,
GUI_COLOR_PATTERN_EFFECT_SYS_PRIMARY,
GUI_COLOR_PATTERN_EFFECT_SYS_PRIMARY,
GUI_COLOR_PATTERN_EFFECT_INVALID,
GUI_COLOR_PATTERN_EFFECT_INVALID,
GUI_COLOR_PATTERN_EFFECT_INVALID,

View file

@ -451,10 +451,10 @@ const char* sid3ShapeBits[6]={
};
const char* sid3FilterMatrixBits[5]={
_N("To filter 1"),
_N("To filter 2"),
_N("To filter 3"),
_N("To filter 4"),
_N("From filter 1"),
_N("From filter 2"),
_N("From filter 3"),
_N("From filter 4"),
NULL
};
@ -780,7 +780,7 @@ String macroSID3SpecialWaves(int id, float val, void* u)
{
if((int)val >= SID3_NUM_SPECIAL_WAVES) return "???";
return sid3SpecialWaveforms[(int)val % SID3_NUM_SPECIAL_WAVES];
return _(sid3SpecialWaveforms[(int)val % SID3_NUM_SPECIAL_WAVES]);
}
String macroSID3SourceChan(int id, float val, void* u)
@ -803,24 +803,24 @@ String macroSID3SourceChan(int id, float val, void* u)
String macroSID3NoiseLFSR(int id, float val, void* u)
{
return _("SID2 noise modes:\n\n"
"Mode 2: \n"
"Mode 3: \n"
"Mode 4: ");
return _("values close to SID2 noise modes:\n\n"
"Mode 1: 524288\n"
"Mode 2: 66\n"
"Mode 3: 541065280");
}
String macroSID2WaveMixMode(int id, float val, void* u)
{
if((int)val > 3) return "???";
return sid2WaveMixModes[(int)val];
return _(sid2WaveMixModes[(int)val]);
}
String macroSID3WaveMixMode(int id, float val, void* u)
{
if((int)val > 4) return "???";
return sid3WaveMixModes[(int)val];
return _(sid3WaveMixModes[(int)val]);
}
void addAALine(ImDrawList* dl, const ImVec2& p1, const ImVec2& p2, const ImU32 color, float thickness=1.0f) {
@ -5914,7 +5914,7 @@ void FurnaceGUI::drawInsSID3(DivInstrument* ins)
}
popToggleColors();
P(CWSliderScalar(_("Special wave"),ImGuiDataType_U8,&ins->sid3.special_wave,&_ZERO,&_SID3_SPECIAL_WAVES,sid3SpecialWaveforms[ins->sid3.special_wave % SID3_NUM_SPECIAL_WAVES])); rightClickable
P(CWSliderScalar(_("Special wave"),ImGuiDataType_U8,&ins->sid3.special_wave,&_ZERO,&_SID3_SPECIAL_WAVES,_(sid3SpecialWaveforms[ins->sid3.special_wave % SID3_NUM_SPECIAL_WAVES]))); rightClickable
if(ImGui::Checkbox(_("Wavetable channel"),&ins->sid3.doWavetable))
{

View file

@ -83,7 +83,7 @@ const char* locales[][3]={
//{"Nederlands (4%)", "nl_NL", "start Furnace opnieuw op om deze instelling effectief te maken."},
{"Polski (95%)", "pl_PL", "aby to ustawienie było skuteczne, należy ponownie uruchomić program."},
{"Português (Brasil) (90%)", "pt_BR", "reinicie o Furnace para que essa configuração entre em vigor."},
{"Русский (90%)", "ru_RU", "перезапустите программу, чтобы эта настройка вступила в силу."},
{"Русский (99%)", "ru_RU", "перезапустите программу, чтобы эта настройка вступила в силу."},
{"Slovenčina (15%)", "sk_SK", "???"},
{"Svenska", "sv_SE", "starta om programmet för att denna inställning ska träda i kraft."},
//{"ไทย (0%)", "th_TH", "???"},

View file

@ -496,7 +496,7 @@ void FurnaceGUI::drawWaveEdit() {
ImGui::TableNextColumn();
ImGui::Text(_("Width"));
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip(_("use a width of:\n- any on Amiga/N163\n- 32 on Game Boy, PC Engine, SCC, Konami Bubble System, Namco WSG, Virtual Boy and WonderSwan\n- 64 on FDS\n- 128 on X1-010\nany other widths will be scaled during playback."));
ImGui::SetTooltip(_("use a width of:\n- any on Amiga/N163\n- 32 on Game Boy, PC Engine, SCC, Konami Bubble System, Namco WSG, Virtual Boy and WonderSwan\n- 64 on FDS\n- 128 on X1-010\n- 256 on SID3\nany other widths will be scaled during playback."));
}
ImGui::SameLine();
ImGui::SetNextItemWidth(96.0f*dpiScale);
@ -510,7 +510,7 @@ void FurnaceGUI::drawWaveEdit() {
ImGui::SameLine();
ImGui::Text(_("Height"));
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip(_("use a height of:\n- 16 for Game Boy, WonderSwan, Namco WSG, Konami Bubble System, X1-010 Envelope shape and N163\n- 32 for PC Engine\n- 64 for FDS and Virtual Boy\n- 256 for X1-010 and SCC\nany other heights will be scaled during playback."));
ImGui::SetTooltip(_("use a height of:\n- 16 for Game Boy, WonderSwan, Namco WSG, Konami Bubble System, X1-010 Envelope shape and N163\n- 32 for PC Engine\n- 64 for FDS and Virtual Boy\n- 256 for X1-010, SCC and SID3\nany other heights will be scaled during playback."));
}
ImGui::SameLine();
ImGui::SetNextItemWidth(96.0f*dpiScale);