You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
(1) |
Apr
(1) |
May
|
Jun
(1) |
Jul
|
Aug
(10) |
Sep
|
Oct
|
Nov
|
Dec
(3) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(1) |
Feb
(2) |
Mar
(3) |
Apr
(2) |
May
(10) |
Jun
(2) |
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
(3) |
Dec
|
2008 |
Jan
(6) |
Feb
(4) |
Mar
(5) |
Apr
(2) |
May
(1) |
Jun
(1) |
Jul
(4) |
Aug
(6) |
Sep
(2) |
Oct
(9) |
Nov
(1) |
Dec
(4) |
2009 |
Jan
(9) |
Feb
(2) |
Mar
(2) |
Apr
(2) |
May
(6) |
Jun
(18) |
Jul
(33) |
Aug
(39) |
Sep
(33) |
Oct
(24) |
Nov
(23) |
Dec
(22) |
2010 |
Jan
(29) |
Feb
(32) |
Mar
(51) |
Apr
(17) |
May
(31) |
Jun
(21) |
Jul
(32) |
Aug
(28) |
Sep
(35) |
Oct
(27) |
Nov
(11) |
Dec
(13) |
2011 |
Jan
(14) |
Feb
(13) |
Mar
(27) |
Apr
(27) |
May
(28) |
Jun
(20) |
Jul
(43) |
Aug
(52) |
Sep
(66) |
Oct
(61) |
Nov
(11) |
Dec
(8) |
2012 |
Jan
(20) |
Feb
(30) |
Mar
(38) |
Apr
(21) |
May
(33) |
Jun
(21) |
Jul
(25) |
Aug
(9) |
Sep
(24) |
Oct
(42) |
Nov
(27) |
Dec
(41) |
2013 |
Jan
(20) |
Feb
(35) |
Mar
(156) |
Apr
(298) |
May
(258) |
Jun
(201) |
Jul
(105) |
Aug
(60) |
Sep
(193) |
Oct
(245) |
Nov
(280) |
Dec
(194) |
2014 |
Jan
(63) |
Feb
(202) |
Mar
(200) |
Apr
(23) |
May
(53) |
Jun
(105) |
Jul
(18) |
Aug
(26) |
Sep
(110) |
Oct
(187) |
Nov
(97) |
Dec
(74) |
2015 |
Jan
(45) |
Feb
(55) |
Mar
(116) |
Apr
(116) |
May
(193) |
Jun
(164) |
Jul
(50) |
Aug
(111) |
Sep
(98) |
Oct
(71) |
Nov
(103) |
Dec
(63) |
2016 |
Jan
(33) |
Feb
(101) |
Mar
(182) |
Apr
(139) |
May
(140) |
Jun
(103) |
Jul
(165) |
Aug
(286) |
Sep
(208) |
Oct
(127) |
Nov
(97) |
Dec
(54) |
2017 |
Jan
(64) |
Feb
(335) |
Mar
(202) |
Apr
(212) |
May
(139) |
Jun
(127) |
Jul
(294) |
Aug
(154) |
Sep
(170) |
Oct
(152) |
Nov
(156) |
Dec
(62) |
2018 |
Jan
(168) |
Feb
(237) |
Mar
(196) |
Apr
(174) |
May
(174) |
Jun
(161) |
Jul
(127) |
Aug
(88) |
Sep
(149) |
Oct
(66) |
Nov
(52) |
Dec
(135) |
2019 |
Jan
(146) |
Feb
(126) |
Mar
(104) |
Apr
(58) |
May
(60) |
Jun
(28) |
Jul
(197) |
Aug
(129) |
Sep
(141) |
Oct
(148) |
Nov
(63) |
Dec
(100) |
2020 |
Jan
(74) |
Feb
(37) |
Mar
(59) |
Apr
(154) |
May
(194) |
Jun
(133) |
Jul
(313) |
Aug
(197) |
Sep
(49) |
Oct
(162) |
Nov
(143) |
Dec
(57) |
2021 |
Jan
(120) |
Feb
(107) |
Mar
(314) |
Apr
(157) |
May
(524) |
Jun
(169) |
Jul
(72) |
Aug
(133) |
Sep
(135) |
Oct
(146) |
Nov
(198) |
Dec
(325) |
2022 |
Jan
(409) |
Feb
(249) |
Mar
(138) |
Apr
(95) |
May
(102) |
Jun
(221) |
Jul
(66) |
Aug
(120) |
Sep
(192) |
Oct
(131) |
Nov
(53) |
Dec
(171) |
2023 |
Jan
(357) |
Feb
(82) |
Mar
(168) |
Apr
(218) |
May
(196) |
Jun
(86) |
Jul
(115) |
Aug
(49) |
Sep
(190) |
Oct
(102) |
Nov
(45) |
Dec
(76) |
2024 |
Jan
(86) |
Feb
(50) |
Mar
(324) |
Apr
(209) |
May
(197) |
Jun
(232) |
Jul
(194) |
Aug
(247) |
Sep
(219) |
Oct
(266) |
Nov
(328) |
Dec
(304) |
2025 |
Jan
(191) |
Feb
(115) |
Mar
(137) |
Apr
(32) |
May
(126) |
Jun
(403) |
Jul
(213) |
Aug
(62) |
Sep
|
Oct
|
Nov
|
Dec
|
From: <sv...@op...> - 2024-10-01 17:40:56
|
Author: manx Date: Tue Oct 1 19:40:44 2024 New Revision: 21780 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21780 Log: [Var] python: Update to v3.12.7. Modified: branches/OpenMPT-1.31/build/download_externals.cmd Modified: branches/OpenMPT-1.31/build/download_externals.cmd ============================================================================== --- branches/OpenMPT-1.31/build/download_externals.cmd Tue Oct 1 19:38:03 2024 (r21779) +++ branches/OpenMPT-1.31/build/download_externals.cmd Tue Oct 1 19:40:44 2024 (r21780) @@ -44,7 +44,7 @@ call build\scriptlib\download.cmd %MPT_DOWNLOAD% x%1 "https://web.archive.org/web/20200918004813id_/http://download.microsoft.com/download/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe" "build\externals\htmlhelp.exe" d91371244ea98c691b4674ee266c4a2496a296800c176adae069d21f5c52c0763b21cc7859cfffa865b89e50171a2c99a6d14620c32f7d72c0ef04045348f856 3509072 || goto error -call build\scriptlib\download.cmd %MPT_DOWNLOAD% x%1 "https://www.python.org/ftp/python/3.12.6/python-3.12.6-embed-amd64.zip" "build\externals\python-3.12.6-embed-amd64.zip" 43e9eab6fce7e62f1badf478706e3df7f65a9bb0fdff2ee01f71c65425acd8d73e4e0dcc64a6ee59a7d934be7271a4f0b9fe3e0da62a5ba636663f628bd7fbd7 11061146 || goto error +call build\scriptlib\download.cmd %MPT_DOWNLOAD% x%1 "https://www.python.org/ftp/python/3.12.7/python-3.12.7-embed-amd64.zip" "build\externals\python-3.12.7-embed-amd64.zip" 2f67a8487a9edece26b73aab27e75249e538938ad976d371a9411b54dbae20afeac82b406ad4eeee38b1cf6f407e7620679d30c0fff82ec8e8ae62268c322d59 11062583 || goto error call build\scriptlib\download.cmd %MPT_DOWNLOAD% x%1 "https://netcologne.dl.sourceforge.net/project/innounp/innounp/innounp%%%%200.50/innounp050.rar" "build\externals\innounp050.rar" dbbc809308267a866db9d6b751fdeda6d179e1a65d8ddb14bb51984431ae91493f9a76105e1789b245732043a2c696c869ed10964b48cf59f81e55bd52f85330 141621 || goto error |
From: <sv...@op...> - 2024-10-01 17:38:17
|
Author: manx Date: Tue Oct 1 19:38:03 2024 New Revision: 21779 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21779 Log: [Var] python: Update to v3.12.7. Modified: trunk/OpenMPT/build/download_externals.cmd trunk/OpenMPT/build/download_externals.txt Modified: trunk/OpenMPT/build/download_externals.cmd ============================================================================== --- trunk/OpenMPT/build/download_externals.cmd Mon Sep 30 23:33:18 2024 (r21778) +++ trunk/OpenMPT/build/download_externals.cmd Tue Oct 1 19:38:03 2024 (r21779) @@ -47,7 +47,7 @@ call build\scriptlib\unpack.cmd "include\winamp" "build\externals\WA5.55_SDK.exe" "." || goto error call build\scriptlib\unpack.cmd "include\xmplay" "build\externals\xmp-sdk.zip" "." || goto error -call build\scriptlib\unpack.cmd "build\tools\python3" "build\externals\python-3.12.6-embed-amd64.zip" "." || goto error +call build\scriptlib\unpack.cmd "build\tools\python3" "build\externals\python-3.12.7-embed-amd64.zip" "." || goto error call :killdir "build\tools\innosetup" || goto error Modified: trunk/OpenMPT/build/download_externals.txt ============================================================================== --- trunk/OpenMPT/build/download_externals.txt Mon Sep 30 23:33:18 2024 (r21778) +++ trunk/OpenMPT/build/download_externals.txt Tue Oct 1 19:38:03 2024 (r21779) @@ -4,7 +4,7 @@ "build/externals/WA5.55_SDK.exe" 336166 394375db8a16bf155b5de9376f6290488ab339e503dbdfdc4e2f5bede967799e625c559cca363bc988324f1a8e86e5fd28a9f697422abd7bb3dcde4a766607b5 "https://download.nullsoft.com/winamp/plugin-dev/WA5.55_SDK.exe" "http://download.nullsoft.com/winamp/plugin-dev/WA5.55_SDK.exe" "https://web.archive.org/web/20131217072017id_/http://download.nullsoft.com/winamp/plugin-dev/WA5.55_SDK.exe" "build/externals/xmp-sdk.zip" 322744 62c442d656d4bb380360368a0f5f01da11b4ed54333d7f54f875a9a5ec390b08921e00bd08e62cd7a0a5fe642e3377023f20a950cc2a42898ff4cda9ab88fc91 "https://www.un4seen.com/files/xmp-sdk.zip" "build/externals/htmlhelp.exe" 3509072 d91371244ea98c691b4674ee266c4a2496a296800c176adae069d21f5c52c0763b21cc7859cfffa865b89e50171a2c99a6d14620c32f7d72c0ef04045348f856 "https://web.archive.org/web/20200918004813id_/https://download.microsoft.com/download/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe" "https://web.archive.org/web/20200918004813id_/http://download.microsoft.com/download/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe" -"build/externals/python-3.12.6-embed-amd64.zip" 11061146 43e9eab6fce7e62f1badf478706e3df7f65a9bb0fdff2ee01f71c65425acd8d73e4e0dcc64a6ee59a7d934be7271a4f0b9fe3e0da62a5ba636663f628bd7fbd7 "https://www.python.org/ftp/python/3.12.6/python-3.12.6-embed-amd64.zip" +"build/externals/python-3.12.7-embed-amd64.zip" 11062583 2f67a8487a9edece26b73aab27e75249e538938ad976d371a9411b54dbae20afeac82b406ad4eeee38b1cf6f407e7620679d30c0fff82ec8e8ae62268c322d59 "https://www.python.org/ftp/python/3.12.7/python-3.12.7-embed-amd64.zip" "build/externals/innounp050.rar" 141621 dbbc809308267a866db9d6b751fdeda6d179e1a65d8ddb14bb51984431ae91493f9a76105e1789b245732043a2c696c869ed10964b48cf59f81e55bd52f85330 "https://netcologne.dl.sourceforge.net/project/innounp/innounp/innounp 0.50/innounp050.rar" "https://deac-fra.dl.sourceforge.net/project/innounp/innounp/innounp 0.50/innounp050.rar" "build/externals/innosetup-6.3.3.exe" 5634744 785e7cdad84da42ddfc94f8e20b7150a92fbca1904cfa4d7e23f68b874fba134e9c91a1fb5a8291e7e334f57c1063061d3e8496a2d9e7c4d9415ea9f12a3522e "https://files.jrsoftware.org/is/6/innosetup-6.3.3.exe" "https://files.innosetup.nl/innosetup-6.3.3.exe" "build/externals/isetup-5.5.8-unicode.exe" 2342456 da7e27d85caec85b4194c7b1412c5a64c0ae12f22d903b94f2f4ee9ea0cb99c91b2d1dbb49262eefae8129e6b91f5c46f26f353011076e77e75f9c955fc5e1cb "https://files.jrsoftware.org/is/5/isetup-5.5.8-unicode.exe" "https://web.archive.org/web/20230523165634id_/https://files.jrsoftware.org/is/5/isetup-5.5.8-unicode.exe" |
From: <sv...@op...> - 2024-09-30 21:33:30
|
Author: sagamusix Date: Mon Sep 30 23:33:18 2024 New Revision: 21778 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21778 Log: Merged revision(s) 21776-21777 from trunk/OpenMPT: [Mod] Update tooltip: Make message less ambiguous. ........ [Fix] When importing instruments or converting to IT, restrict fadeout precision to multiples of 32. [Fix] Find MPT Hacks: Detect IT instruments with fadeout values that are not multiples of 32. ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/mptrack/MPTHacks.cpp branches/OpenMPT-1.31/mptrack/UpdateToolTip.cpp branches/OpenMPT-1.31/soundlib/Load_it.cpp branches/OpenMPT-1.31/soundlib/ModInstrument.cpp Modified: branches/OpenMPT-1.31/mptrack/MPTHacks.cpp ============================================================================== --- branches/OpenMPT-1.31/mptrack/MPTHacks.cpp Mon Sep 30 23:32:53 2024 (r21777) +++ branches/OpenMPT-1.31/mptrack/MPTHacks.cpp Mon Sep 30 23:33:18 2024 (r21778) @@ -327,6 +327,13 @@ instr->VolEnv.nReleaseNode = instr->PanEnv.nReleaseNode = instr->PitchEnv.nReleaseNode = ENV_RELEASE_NODE_UNSET; } } + if((m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) && (instr->nFadeOut % 32u) != 0) + { + foundHere = foundHacks = true; + if(autofix) + instr->nFadeOut = ((instr->nFadeOut + 16) / 32) * 32; + } + // Incompatible envelope shape foundEnvelopes |= FindIncompatibleEnvelopes(instr->VolEnv, autofix); foundEnvelopes |= FindIncompatibleEnvelopes(instr->PanEnv, autofix); Modified: branches/OpenMPT-1.31/mptrack/UpdateToolTip.cpp ============================================================================== --- branches/OpenMPT-1.31/mptrack/UpdateToolTip.cpp Mon Sep 30 23:32:53 2024 (r21777) +++ branches/OpenMPT-1.31/mptrack/UpdateToolTip.cpp Mon Sep 30 23:33:18 2024 (r21778) @@ -32,7 +32,7 @@ m_infoURL = infoURL; - CString message = MPT_CFORMAT("OpenMPT {} has been released.\n<a>Click here to see what's new.</a>")(newVersion); + CString message = MPT_CFORMAT("OpenMPT {} has been released.\nClick on this message to install the update,\nor <a>click here to see what's new.</a>")(newVersion); TOOLINFO ti{}; ti.cbSize = TTTOOLINFO_V1_SIZE; ti.uFlags = TTF_TRACK | TTF_PARSELINKS; Modified: branches/OpenMPT-1.31/soundlib/Load_it.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/Load_it.cpp Mon Sep 30 23:32:53 2024 (r21777) +++ branches/OpenMPT-1.31/soundlib/Load_it.cpp Mon Sep 30 23:33:18 2024 (r21778) @@ -1144,7 +1144,7 @@ m.command = CMD_DUMMY; // Fix handling of commands V81-VFF in ITs made with old Schism Tracker versions // (fixed in https://github.com/schismtracker/schismtracker/commit/ab5517d4730d4c717f7ebffb401445679bd30888 - one of the last versions to identify as v0.50) - if(m.command == CMD_GLOBALVOLUME && m.param > 0x80 && fileHeader.cwtv >= 0x1000 && fileHeader.cwtv <= 0x1050) + else if(m.command == CMD_GLOBALVOLUME && m.param > 0x80 && fileHeader.cwtv >= 0x1000 && fileHeader.cwtv <= 0x1050) m.param = 0x80; // In some IT-compatible trackers, it is possible to input a parameter without a command. Modified: branches/OpenMPT-1.31/soundlib/ModInstrument.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/ModInstrument.cpp Mon Sep 30 23:32:53 2024 (r21777) +++ branches/OpenMPT-1.31/soundlib/ModInstrument.cpp Mon Sep 30 23:33:18 2024 (r21778) @@ -226,10 +226,11 @@ } } - // Limit fadeout length for IT + // Limit fadeout length and precision for IT if(toType & MOD_TYPE_IT) { LimitMax(nFadeOut, 8192u); + nFadeOut = ((nFadeOut + 16) / 32) * 32; } // MPT-specific features - remove instrument tunings, Pitch/Tempo Lock, cutoff / resonance swing and filter mode for other formats |
From: <sv...@op...> - 2024-09-30 21:33:05
|
Author: sagamusix Date: Mon Sep 30 23:32:53 2024 New Revision: 21777 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21777 Log: [Fix] When importing instruments or converting to IT, restrict fadeout precision to multiples of 32. [Fix] Find MPT Hacks: Detect IT instruments with fadeout values that are not multiples of 32. Modified: trunk/OpenMPT/mptrack/MPTHacks.cpp trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/ModInstrument.cpp Modified: trunk/OpenMPT/mptrack/MPTHacks.cpp ============================================================================== --- trunk/OpenMPT/mptrack/MPTHacks.cpp Mon Sep 30 22:04:36 2024 (r21776) +++ trunk/OpenMPT/mptrack/MPTHacks.cpp Mon Sep 30 23:32:53 2024 (r21777) @@ -339,6 +339,13 @@ instr->VolEnv.nReleaseNode = instr->PanEnv.nReleaseNode = instr->PitchEnv.nReleaseNode = ENV_RELEASE_NODE_UNSET; } } + if((m_SndFile.GetType() & (MOD_TYPE_IT | MOD_TYPE_MPT)) && (instr->nFadeOut % 32u) != 0) + { + foundHere = foundHacks = true; + if(autofix) + instr->nFadeOut = ((instr->nFadeOut + 16) / 32) * 32; + } + // Incompatible envelope shape foundEnvelopes |= FindIncompatibleEnvelopes(instr->VolEnv, autofix); foundEnvelopes |= FindIncompatibleEnvelopes(instr->PanEnv, autofix); Modified: trunk/OpenMPT/soundlib/Load_it.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp Mon Sep 30 22:04:36 2024 (r21776) +++ trunk/OpenMPT/soundlib/Load_it.cpp Mon Sep 30 23:32:53 2024 (r21777) @@ -1136,7 +1136,7 @@ m.command = CMD_DUMMY; // Fix handling of commands V81-VFF in ITs made with old Schism Tracker versions // (fixed in https://github.com/schismtracker/schismtracker/commit/ab5517d4730d4c717f7ebffb401445679bd30888 - one of the last versions to identify as v0.50) - if(m.command == CMD_GLOBALVOLUME && m.param > 0x80 && fileHeader.cwtv >= 0x1000 && fileHeader.cwtv <= 0x1050) + else if(m.command == CMD_GLOBALVOLUME && m.param > 0x80 && fileHeader.cwtv >= 0x1000 && fileHeader.cwtv <= 0x1050) m.param = 0x80; // In some IT-compatible trackers, it is possible to input a parameter without a command. Modified: trunk/OpenMPT/soundlib/ModInstrument.cpp ============================================================================== --- trunk/OpenMPT/soundlib/ModInstrument.cpp Mon Sep 30 22:04:36 2024 (r21776) +++ trunk/OpenMPT/soundlib/ModInstrument.cpp Mon Sep 30 23:32:53 2024 (r21777) @@ -227,10 +227,11 @@ } } - // Limit fadeout length for IT + // Limit fadeout length and precision for IT if(toType & MOD_TYPE_IT) { LimitMax(nFadeOut, 8192u); + nFadeOut = ((nFadeOut + 16) / 32) * 32; } // MPT-specific features - remove instrument tunings, Pitch/Tempo Lock, cutoff / resonance swing and filter mode for other formats |
From: <sv...@op...> - 2024-09-30 20:04:47
|
Author: sagamusix Date: Mon Sep 30 22:04:36 2024 New Revision: 21776 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21776 Log: [Mod] Update tooltip: Make message less ambiguous. Modified: trunk/OpenMPT/mptrack/UpdateToolTip.cpp Modified: trunk/OpenMPT/mptrack/UpdateToolTip.cpp ============================================================================== --- trunk/OpenMPT/mptrack/UpdateToolTip.cpp Mon Sep 30 19:11:33 2024 (r21775) +++ trunk/OpenMPT/mptrack/UpdateToolTip.cpp Mon Sep 30 22:04:36 2024 (r21776) @@ -34,7 +34,7 @@ m_infoURL = infoURL; - CString message = MPT_CFORMAT("OpenMPT {} has been released.\n<a>Click here to see what's new.</a>")(newVersion); + CString message = MPT_CFORMAT("OpenMPT {} has been released.\nClick on this message to install the update,\nor <a>click here to see what's new.</a>")(newVersion); TOOLINFO ti{}; ti.cbSize = TTTOOLINFO_V1_SIZE; ti.uFlags = TTF_TRACK | TTF_PARSELINKS; |
From: <sv...@op...> - 2024-09-30 17:11:40
|
Author: sagamusix Date: Mon Sep 30 19:11:33 2024 New Revision: 21775 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21775 Log: Merged revision(s) 21774 from trunk/OpenMPT: [Fix] IT: SAx import was bound to "compatible" tracker, not "made with" tracker ID. ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/soundlib/Load_it.cpp Modified: branches/OpenMPT-1.31/soundlib/Load_it.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/Load_it.cpp Mon Sep 30 19:11:15 2024 (r21774) +++ branches/OpenMPT-1.31/soundlib/Load_it.cpp Mon Sep 30 19:11:33 2024 (r21775) @@ -1140,7 +1140,7 @@ S3MConvert(m, command, param, true); // IT 1.xx does not support high offset command - if(m.command == CMD_S3MCMDEX && (m.param & 0xF0) == 0xA0 && fileHeader.cmwt < 0x0200) + if(m.command == CMD_S3MCMDEX && (m.param & 0xF0) == 0xA0 && fileHeader.cwtv < 0x0200) m.command = CMD_DUMMY; // Fix handling of commands V81-VFF in ITs made with old Schism Tracker versions // (fixed in https://github.com/schismtracker/schismtracker/commit/ab5517d4730d4c717f7ebffb401445679bd30888 - one of the last versions to identify as v0.50) |
From: <sv...@op...> - 2024-09-30 17:11:27
|
Author: sagamusix Date: Mon Sep 30 19:11:15 2024 New Revision: 21774 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21774 Log: [Fix] IT: SAx import was bound to "compatible" tracker, not "made with" tracker ID. Modified: trunk/OpenMPT/soundlib/Load_it.cpp Modified: trunk/OpenMPT/soundlib/Load_it.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp Mon Sep 30 19:06:56 2024 (r21773) +++ trunk/OpenMPT/soundlib/Load_it.cpp Mon Sep 30 19:11:15 2024 (r21774) @@ -1132,7 +1132,7 @@ S3MConvert(m, command, param, true); // IT 1.xx does not support high offset command - if(m.command == CMD_S3MCMDEX && (m.param & 0xF0) == 0xA0 && fileHeader.cmwt < 0x0200) + if(m.command == CMD_S3MCMDEX && (m.param & 0xF0) == 0xA0 && fileHeader.cwtv < 0x0200) m.command = CMD_DUMMY; // Fix handling of commands V81-VFF in ITs made with old Schism Tracker versions // (fixed in https://github.com/schismtracker/schismtracker/commit/ab5517d4730d4c717f7ebffb401445679bd30888 - one of the last versions to identify as v0.50) |
From: <sv...@op...> - 2024-09-30 17:07:08
|
Author: sagamusix Date: Mon Sep 30 19:06:56 2024 New Revision: 21773 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21773 Log: Merged revision(s) 21771-21772 from trunk/OpenMPT: [Imp] IT: Don't import SAx High Offset command for IT 1.xx modules. This feature was added in IT 2.00. ........ [Fix] IT: Command fixups need to be done before the command memory is updated. ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/soundlib/Load_it.cpp Modified: branches/OpenMPT-1.31/soundlib/Load_it.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/Load_it.cpp Mon Sep 30 19:06:38 2024 (r21772) +++ branches/OpenMPT-1.31/soundlib/Load_it.cpp Mon Sep 30 19:06:56 2024 (r21773) @@ -1027,6 +1027,7 @@ auto patData = Patterns[pat].begin(); ROWINDEX row = 0; + ModCommand dummy{}; while(row < numRows && patternData.CanRead(1)) { uint8 b = patternData.ReadUint8(); @@ -1057,7 +1058,6 @@ } // Now we grab the data for this particular row/channel. - ModCommand dummy{}; ModCommand &m = ch < m_nChannels ? patData[ch] : dummy; if(chnMask[ch] & 0x10) @@ -1138,15 +1138,21 @@ { const auto [command, param] = patternData.ReadArray<uint8, 2>(); S3MConvert(m, command, param, true); - // In some IT-compatible trackers, it is possible to input a parameter without a command. - // In this case, we still need to update the last value memory. OpenMPT didn't do this until v1.25.01.07. - // Example: ckbounce.it - lastValue[ch].command = m.command; - lastValue[ch].param = m.param; + + // IT 1.xx does not support high offset command + if(m.command == CMD_S3MCMDEX && (m.param & 0xF0) == 0xA0 && fileHeader.cmwt < 0x0200) + m.command = CMD_DUMMY; // Fix handling of commands V81-VFF in ITs made with old Schism Tracker versions // (fixed in https://github.com/schismtracker/schismtracker/commit/ab5517d4730d4c717f7ebffb401445679bd30888 - one of the last versions to identify as v0.50) if(m.command == CMD_GLOBALVOLUME && m.param > 0x80 && fileHeader.cwtv >= 0x1000 && fileHeader.cwtv <= 0x1050) m.param = 0x80; + + // In some IT-compatible trackers, it is possible to input a parameter without a command. + // In this case, we still need to update the last value memory (so that we don't reuse a previous non-empty effect). + // OpenMPT didn't do this until v1.25.01.07. + // Example: ckbounce.it + lastValue[ch].command = m.command; + lastValue[ch].param = m.param; } } } |
From: <sv...@op...> - 2024-09-30 17:06:45
|
Author: sagamusix Date: Mon Sep 30 19:06:38 2024 New Revision: 21772 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21772 Log: [Fix] IT: Command fixups need to be done before the command memory is updated. Modified: trunk/OpenMPT/soundlib/Load_it.cpp Modified: trunk/OpenMPT/soundlib/Load_it.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp Mon Sep 30 18:59:29 2024 (r21771) +++ trunk/OpenMPT/soundlib/Load_it.cpp Mon Sep 30 19:06:38 2024 (r21772) @@ -1130,11 +1130,6 @@ { const auto [command, param] = patternData.ReadArray<uint8, 2>(); S3MConvert(m, command, param, true); - // In some IT-compatible trackers, it is possible to input a parameter without a command. - // In this case, we still need to update the last value memory. OpenMPT didn't do this until v1.25.01.07. - // Example: ckbounce.it - lastValue[ch].command = m.command; - lastValue[ch].param = m.param; // IT 1.xx does not support high offset command if(m.command == CMD_S3MCMDEX && (m.param & 0xF0) == 0xA0 && fileHeader.cmwt < 0x0200) @@ -1143,6 +1138,13 @@ // (fixed in https://github.com/schismtracker/schismtracker/commit/ab5517d4730d4c717f7ebffb401445679bd30888 - one of the last versions to identify as v0.50) if(m.command == CMD_GLOBALVOLUME && m.param > 0x80 && fileHeader.cwtv >= 0x1000 && fileHeader.cwtv <= 0x1050) m.param = 0x80; + + // In some IT-compatible trackers, it is possible to input a parameter without a command. + // In this case, we still need to update the last value memory (so that we don't reuse a previous non-empty effect). + // OpenMPT didn't do this until v1.25.01.07. + // Example: ckbounce.it + lastValue[ch].command = m.command; + lastValue[ch].param = m.param; } } } |
From: <sv...@op...> - 2024-09-30 16:59:41
|
Author: sagamusix Date: Mon Sep 30 18:59:29 2024 New Revision: 21771 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21771 Log: [Imp] IT: Don't import SAx High Offset command for IT 1.xx modules. This feature was added in IT 2.00. Modified: trunk/OpenMPT/soundlib/Load_it.cpp Modified: trunk/OpenMPT/soundlib/Load_it.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp Mon Sep 30 18:55:34 2024 (r21770) +++ trunk/OpenMPT/soundlib/Load_it.cpp Mon Sep 30 18:59:29 2024 (r21771) @@ -1022,6 +1022,7 @@ auto patData = Patterns[pat].begin(); ROWINDEX row = 0; + ModCommand dummy{}; while(row < numRows && patternData.CanRead(1)) { uint8 b = patternData.ReadUint8(); @@ -1052,7 +1053,6 @@ } // Now we grab the data for this particular row/channel. - ModCommand dummy{}; ModCommand &m = ch < GetNumChannels() ? patData[ch] : dummy; if(chnMask[ch] & 0x10) @@ -1135,6 +1135,10 @@ // Example: ckbounce.it lastValue[ch].command = m.command; lastValue[ch].param = m.param; + + // IT 1.xx does not support high offset command + if(m.command == CMD_S3MCMDEX && (m.param & 0xF0) == 0xA0 && fileHeader.cmwt < 0x0200) + m.command = CMD_DUMMY; // Fix handling of commands V81-VFF in ITs made with old Schism Tracker versions // (fixed in https://github.com/schismtracker/schismtracker/commit/ab5517d4730d4c717f7ebffb401445679bd30888 - one of the last versions to identify as v0.50) if(m.command == CMD_GLOBALVOLUME && m.param > 0x80 && fileHeader.cwtv >= 0x1000 && fileHeader.cwtv <= 0x1050) |
From: <sv...@op...> - 2024-09-30 16:55:46
|
Author: sagamusix Date: Mon Sep 30 18:55:34 2024 New Revision: 21770 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21770 Log: Merged revision(s) 21769 from trunk/OpenMPT: [Imp] IT: Like our fix for old (Open)MPT versions, clamp the Vxx parameter to V80 for files made with old Schism Tracker versions (see https://github.com/schismtracker/schismtracker/issues/531). ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/soundlib/Load_it.cpp Modified: branches/OpenMPT-1.31/soundlib/Load_it.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/Load_it.cpp Mon Sep 30 18:55:05 2024 (r21769) +++ branches/OpenMPT-1.31/soundlib/Load_it.cpp Mon Sep 30 18:55:34 2024 (r21770) @@ -1143,6 +1143,10 @@ // Example: ckbounce.it lastValue[ch].command = m.command; lastValue[ch].param = m.param; + // Fix handling of commands V81-VFF in ITs made with old Schism Tracker versions + // (fixed in https://github.com/schismtracker/schismtracker/commit/ab5517d4730d4c717f7ebffb401445679bd30888 - one of the last versions to identify as v0.50) + if(m.command == CMD_GLOBALVOLUME && m.param > 0x80 && fileHeader.cwtv >= 0x1000 && fileHeader.cwtv <= 0x1050) + m.param = 0x80; } } } |
From: <sv...@op...> - 2024-09-30 16:55:18
|
Author: sagamusix Date: Mon Sep 30 18:55:05 2024 New Revision: 21769 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21769 Log: [Imp] IT: Like our fix for old (Open)MPT versions, clamp the Vxx parameter to V80 for files made with old Schism Tracker versions (see https://github.com/schismtracker/schismtracker/issues/531). Modified: trunk/OpenMPT/soundlib/Load_it.cpp Modified: trunk/OpenMPT/soundlib/Load_it.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp Sat Sep 28 21:40:25 2024 (r21768) +++ trunk/OpenMPT/soundlib/Load_it.cpp Mon Sep 30 18:55:05 2024 (r21769) @@ -1135,6 +1135,10 @@ // Example: ckbounce.it lastValue[ch].command = m.command; lastValue[ch].param = m.param; + // Fix handling of commands V81-VFF in ITs made with old Schism Tracker versions + // (fixed in https://github.com/schismtracker/schismtracker/commit/ab5517d4730d4c717f7ebffb401445679bd30888 - one of the last versions to identify as v0.50) + if(m.command == CMD_GLOBALVOLUME && m.param > 0x80 && fileHeader.cwtv >= 0x1000 && fileHeader.cwtv <= 0x1050) + m.param = 0x80; } } } |
From: <sv...@op...> - 2024-09-28 19:40:39
|
Author: sagamusix Date: Sat Sep 28 21:40:25 2024 New Revision: 21768 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21768 Log: [Fix] Fix compilation. Modified: branches/OpenMPT-1.31/mptrack/ModConvert.cpp Modified: branches/OpenMPT-1.31/mptrack/ModConvert.cpp ============================================================================== --- branches/OpenMPT-1.31/mptrack/ModConvert.cpp Sat Sep 28 11:19:18 2024 (r21767) +++ branches/OpenMPT-1.31/mptrack/ModConvert.cpp Sat Sep 28 21:40:25 2024 (r21768) @@ -585,7 +585,7 @@ ChangeFileExtension(nNewType); // Special case: CModSpecifications for IT allow tempos up to 512 so that legacy modules play correctly. - Limit(m_SndFile.m_nDefaultTempo, specs.GetTempoMin(), nNewType == MOD_TYPE_IT ? TEMPO(255, 0) : specs.GetTempoMax())); + Limit(m_SndFile.m_nDefaultTempo, specs.GetTempoMin(), nNewType == MOD_TYPE_IT ? TEMPO(255, 0) : specs.GetTempoMax()); Limit(m_SndFile.m_nDefaultSpeed, specs.speedMin, specs.speedMax); for(INSTRUMENTINDEX i = 1; i <= m_SndFile.GetNumInstruments(); i++) if(m_SndFile.Instruments[i] != nullptr) |
From: <sv...@op...> - 2024-09-28 09:19:26
|
Author: sagamusix Date: Sat Sep 28 11:19:18 2024 New Revision: 21767 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21767 Log: Merged revision(s) 21766 from trunk/OpenMPT: [Mod] Mod Conversion: When converting to IT, clamp maximum tempo to 255 BPM. ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/mptrack/ModConvert.cpp Modified: branches/OpenMPT-1.31/mptrack/ModConvert.cpp ============================================================================== --- branches/OpenMPT-1.31/mptrack/ModConvert.cpp Sat Sep 28 11:17:31 2024 (r21766) +++ branches/OpenMPT-1.31/mptrack/ModConvert.cpp Sat Sep 28 11:19:18 2024 (r21767) @@ -584,8 +584,8 @@ ChangeFileExtension(nNewType); - // Check mod specifications - Limit(m_SndFile.m_nDefaultTempo, specs.GetTempoMin(), specs.GetTempoMax()); + // Special case: CModSpecifications for IT allow tempos up to 512 so that legacy modules play correctly. + Limit(m_SndFile.m_nDefaultTempo, specs.GetTempoMin(), nNewType == MOD_TYPE_IT ? TEMPO(255, 0) : specs.GetTempoMax())); Limit(m_SndFile.m_nDefaultSpeed, specs.speedMin, specs.speedMax); for(INSTRUMENTINDEX i = 1; i <= m_SndFile.GetNumInstruments(); i++) if(m_SndFile.Instruments[i] != nullptr) |
From: <sv...@op...> - 2024-09-28 09:17:43
|
Author: sagamusix Date: Sat Sep 28 11:17:31 2024 New Revision: 21766 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21766 Log: [Mod] Mod Conversion: When converting to IT, clamp maximum tempo to 255 BPM. Modified: trunk/OpenMPT/mptrack/ModConvert.cpp Modified: trunk/OpenMPT/mptrack/ModConvert.cpp ============================================================================== --- trunk/OpenMPT/mptrack/ModConvert.cpp Fri Sep 27 12:53:39 2024 (r21765) +++ trunk/OpenMPT/mptrack/ModConvert.cpp Sat Sep 28 11:17:31 2024 (r21766) @@ -586,7 +586,8 @@ warnings.set(wFractionalTempo); } - order.SetDefaultTempo(Clamp(order.GetDefaultTempo(), specs.GetTempoMin(), specs.GetTempoMax())); + // Special case: CModSpecifications for IT allow tempos up to 512 so that legacy modules play correctly. + order.SetDefaultTempo(Clamp(order.GetDefaultTempo(), specs.GetTempoMin(), nNewType == MOD_TYPE_IT ? TEMPO(255, 0) : specs.GetTempoMax())); order.SetDefaultSpeed(Clamp(order.GetDefaultSpeed(), specs.speedMin, specs.speedMax)); } |
From: <sv...@op...> - 2024-09-27 10:53:51
|
Author: sagamusix Date: Fri Sep 27 12:53:39 2024 New Revision: 21765 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21765 Log: [Fix] Global shortcuts were not working in settings dialog. Modified: trunk/OpenMPT/mptrack/DialogBase.cpp trunk/OpenMPT/mptrack/DialogBase.h trunk/OpenMPT/mptrack/MainFrm.cpp Modified: trunk/OpenMPT/mptrack/DialogBase.cpp ============================================================================== --- trunk/OpenMPT/mptrack/DialogBase.cpp Thu Sep 26 22:41:01 2024 (r21764) +++ trunk/OpenMPT/mptrack/DialogBase.cpp Fri Sep 27 12:53:39 2024 (r21765) @@ -24,7 +24,7 @@ } -bool DialogBase::HandleGlobalKeyMessage(const MSG &msg) const +bool DialogBase::HandleGlobalKeyMessage(const MSG &msg) { // We handle keypresses before Windows has a chance to handle them (for alt etc..) if(msg.message == WM_KEYDOWN || msg.message == WM_KEYUP || msg.message == WM_SYSKEYUP || msg.message == WM_SYSKEYDOWN) Modified: trunk/OpenMPT/mptrack/DialogBase.h ============================================================================== --- trunk/OpenMPT/mptrack/DialogBase.h Thu Sep 26 22:41:01 2024 (r21764) +++ trunk/OpenMPT/mptrack/DialogBase.h Fri Sep 27 12:53:39 2024 (r21765) @@ -22,8 +22,7 @@ BOOL PreTranslateMessage(MSG *pMsg) override; -protected: - bool HandleGlobalKeyMessage(const MSG &msg) const; + static bool HandleGlobalKeyMessage(const MSG &msg); }; OPENMPT_NAMESPACE_END Modified: trunk/OpenMPT/mptrack/MainFrm.cpp ============================================================================== --- trunk/OpenMPT/mptrack/MainFrm.cpp Thu Sep 26 22:41:01 2024 (r21764) +++ trunk/OpenMPT/mptrack/MainFrm.cpp Fri Sep 27 12:53:39 2024 (r21765) @@ -1949,49 +1949,69 @@ // CMainFrame message handlers +class CPropertySheetMPT : public CPropertySheet +{ + using CPropertySheet::CPropertySheet; + + BOOL PreTranslateMessage(MSG *pMsg) override + { + if(pMsg && DialogBase::HandleGlobalKeyMessage(*pMsg)) + return TRUE; + + return CPropertySheet::PreTranslateMessage(pMsg); + } +}; + + void CMainFrame::OnViewOptions() { if (m_bOptionsLocked) return; - CPropertySheet dlg(_T("OpenMPT Setup"), this, m_nLastOptionsPage); - mpt::heap_value<COptionsGeneral> general; - mpt::heap_value<COptionsSoundcard> sounddlg(TrackerSettings::Instance().m_SoundDeviceIdentifier); - mpt::heap_value<COptionsSampleEditor> smpeditor; - mpt::heap_value<COptionsKeyboard> keyboard; - mpt::heap_value<COptionsColors> colors; - mpt::heap_value<COptionsMixer> mixerdlg; - mpt::heap_value<CMidiSetupDlg> mididlg(TrackerSettings::Instance().m_dwMidiSetup, TrackerSettings::Instance().GetCurrentMIDIDevice()); - mpt::heap_value<PathConfigDlg> pathsdlg; + CPropertySheetMPT dlg(_T("OpenMPT Setup"), this, m_nLastOptionsPage); + struct Pages + { + COptionsGeneral general; + COptionsSoundcard sounddlg{TrackerSettings::Instance().m_SoundDeviceIdentifier}; + COptionsSampleEditor smpeditor; + COptionsKeyboard keyboard; + COptionsColors colors; + COptionsMixer mixerdlg; +#if !defined(NO_REVERB) || !defined(NO_DSP) || !defined(NO_EQ) || !defined(NO_AGC) + COptionsPlayer dspdlg; +#endif + CMidiSetupDlg mididlg{TrackerSettings::Instance().m_dwMidiSetup, TrackerSettings::Instance().GetCurrentMIDIDevice()}; + PathConfigDlg pathsdlg; #if defined(MPT_ENABLE_UPDATE) - mpt::heap_value<CUpdateSetupDlg> updatedlg; -#endif // MPT_ENABLE_UPDATE - mpt::heap_value<COptionsAdvanced> advanced; - mpt::heap_value<COptionsWine> winedlg; - dlg.AddPage(&*general); - dlg.AddPage(&*sounddlg); - dlg.AddPage(&*mixerdlg); + CUpdateSetupDlg updatedlg; +#endif // MPT_ENABLE_UPDATE + COptionsAdvanced advanced; + COptionsWine winedlg; + }; + mpt::heap_value<Pages> pages; + dlg.AddPage(&pages->general); + dlg.AddPage(&pages->sounddlg); + dlg.AddPage(&pages->mixerdlg); #if !defined(NO_REVERB) || !defined(NO_DSP) || !defined(NO_EQ) || !defined(NO_AGC) - mpt::heap_value<COptionsPlayer> dspdlg; - dlg.AddPage(&*dspdlg); + dlg.AddPage(&pages->dspdlg); #endif - dlg.AddPage(&*smpeditor); - dlg.AddPage(&*keyboard); - dlg.AddPage(&*colors); - dlg.AddPage(&*mididlg); - dlg.AddPage(&*pathsdlg); + dlg.AddPage(&pages->smpeditor); + dlg.AddPage(&pages->keyboard); + dlg.AddPage(&pages->colors); + dlg.AddPage(&pages->mididlg); + dlg.AddPage(&pages->pathsdlg); #if defined(MPT_ENABLE_UPDATE) - dlg.AddPage(&*updatedlg); + dlg.AddPage(&pages->updatedlg); #endif // MPT_ENABLE_UPDATE - dlg.AddPage(&*advanced); + dlg.AddPage(&pages->advanced); if(mpt::OS::Windows::IsWine()) { - dlg.AddPage(&*winedlg); + dlg.AddPage(&pages->winedlg); } m_bOptionsLocked = true; - m_SoundCardOptionsDialog = &*sounddlg; + m_SoundCardOptionsDialog = &pages->sounddlg; #if defined(MPT_ENABLE_UPDATE) - m_UpdateOptionsDialog = &*updatedlg; + m_UpdateOptionsDialog = &pages->updatedlg; #endif // MPT_ENABLE_UPDATE dlg.DoModal(); m_SoundCardOptionsDialog = nullptr; |
From: <sv...@op...> - 2024-09-26 20:41:14
|
Author: sagamusix Date: Thu Sep 26 22:41:01 2024 New Revision: 21764 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21764 Log: [Fix] Pattern tab: Avoid sticky selection key when focus is in another view. Modified: trunk/OpenMPT/mptrack/View_pat.cpp Modified: trunk/OpenMPT/mptrack/View_pat.cpp ============================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp Thu Sep 26 21:07:25 2024 (r21763) +++ trunk/OpenMPT/mptrack/View_pat.cpp Thu Sep 26 22:41:01 2024 (r21764) @@ -421,7 +421,7 @@ bool CViewPattern::IsSelectionPressed() const { - return CMainFrame::GetInputHandler()->SelectionPressed(); + return ::GetFocus() == m_hWnd && CMainFrame::GetInputHandler()->SelectionPressed(); } @@ -1165,7 +1165,7 @@ SendCtrlMessage(CTRLMSG_PAT_FOLLOWSONG, 0); } - if(CMainFrame::GetInputHandler()->SelectionPressed() + if(IsSelectionPressed() && (m_Status[psShiftSelect] || m_Selection.GetUpperLeft() == m_Selection.GetLowerRight() || !m_Selection.Contains(pointCursor))) |
From: <sv...@op...> - 2024-09-26 19:07:32
|
Author: sagamusix Date: Thu Sep 26 21:07:25 2024 New Revision: 21763 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21763 Log: [Fix] Never report active modifier keys if OpenMPT is not the active application. Modified: trunk/OpenMPT/mptrack/InputHandler.cpp Modified: trunk/OpenMPT/mptrack/InputHandler.cpp ============================================================================== --- trunk/OpenMPT/mptrack/InputHandler.cpp Thu Sep 26 16:03:41 2024 (r21762) +++ trunk/OpenMPT/mptrack/InputHandler.cpp Thu Sep 26 21:07:25 2024 (r21763) @@ -345,6 +345,8 @@ { BYTE keyStates[256]; FlagSet<Modifiers> modifierMask = ModNone; + if(GetActiveWindow() == nullptr) + return modifierMask; if(!GetKeyboardState(keyStates)) return modifierMask; |
From: <sv...@op...> - 2024-09-26 14:03:53
|
Author: sagamusix Date: Thu Sep 26 16:03:41 2024 New Revision: 21762 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21762 Log: [Fix] Pattern tab: Avoid sticky selection key when it's released e.g. while a menu is open. Modified: trunk/OpenMPT/mptrack/View_pat.cpp trunk/OpenMPT/mptrack/View_pat.h Modified: trunk/OpenMPT/mptrack/View_pat.cpp ============================================================================== --- trunk/OpenMPT/mptrack/View_pat.cpp Thu Sep 26 15:44:56 2024 (r21761) +++ trunk/OpenMPT/mptrack/View_pat.cpp Thu Sep 26 16:03:41 2024 (r21762) @@ -372,7 +372,7 @@ InvalidateRow(); PatternCursor selStart(m_Cursor); - if(m_Status[psKeyboardDragSelect | psMouseDragSelect] && !m_Status[psDragnDropEdit]) + if((m_Status[psMouseDragSelect] || IsSelectionPressed()) && !m_Status[psDragnDropEdit]) { selStart.Set(m_StartSel); } @@ -395,7 +395,7 @@ PatternCursor selStart(m_Cursor); - if(m_Status[psKeyboardDragSelect | psMouseDragSelect] && !m_Status[psDragnDropEdit]) + if((m_Status[psMouseDragSelect] || IsSelectionPressed()) && !m_Status[psDragnDropEdit]) { selStart = m_StartSel; } @@ -419,6 +419,12 @@ } +bool CViewPattern::IsSelectionPressed() const +{ + return CMainFrame::GetInputHandler()->SelectionPressed(); +} + + // Fix: If cursor isn't on screen move scrollbars to make it visible // Fix: save pattern scrollbar position when switching to other tab // Assume that m_nRow and m_dwCursor are valid @@ -782,7 +788,7 @@ { CScrollView::OnKillFocus(pNewWnd); - m_Status.reset(psKeyboardDragSelect | psCtrlDragSelect | psFocussed); + m_Status.reset(psCtrlDragSelect | psFocussed); InvalidateRow(); } @@ -3089,7 +3095,7 @@ end.Sanitize(pattern.GetNumRows(), pattern.GetNumChannels()); PatternRect destination(begin, end); - const bool moveSelection = !m_Status[psKeyboardDragSelect | psCtrlDragSelect]; + const bool moveSelection = !m_Status[psCtrlDragSelect] && !IsSelectionPressed(); BeginWaitCursor(); pModDoc->GetPatternUndo().PrepareUndo(m_nPattern, 0, 0, sndFile.GetNumChannels(), pattern.GetNumRows(), moveSelection ? "Move Selection" : "Copy Selection"); @@ -4289,7 +4295,7 @@ row = (((row + (upwards ? -1 : 0)) / distanceAbs) + (upwards ? 0 : 1)) * distanceAbs; else row += distance; - row = SetCurrentRow(row, m_Status[psKeyboardDragSelect | psMouseDragSelect] ? WrapMode::LimitAtPatternEnd : WrapMode::WrapAround); + row = SetCurrentRow(row, (m_Status[psMouseDragSelect] || IsSelectionPressed()) ? WrapMode::LimitAtPatternEnd : WrapMode::WrapAround); if(IsLiveRecord() && !m_Status[psDragActive]) { @@ -4576,12 +4582,11 @@ case kcSelect: if(!m_Status[psDragnDropEdit | psRowSelection | psChannelSelection | psMouseDragSelect]) m_StartSel = m_Cursor; - m_Status.set(psKeyboardDragSelect); return wParam; case kcSelectOffWithCopySelect: case kcSelectOffWithNav: case kcSelectOff: - m_Status.reset(psKeyboardDragSelect | psShiftSelect); + m_Status.reset(psShiftSelect); return wParam; case kcCopySelectWithSelect: case kcCopySelectWithNav: @@ -5986,8 +5991,6 @@ { if(m_nSpacing > 0) { - // Shift from entering chord may have triggered this flag, which will prevent us from wrapping to the next pattern. - m_Status.reset(psKeyboardDragSelect); SetCurrentRow(GetCurrentRow() + m_nSpacing, (TrackerSettings::Instance().m_dwPatternSetup & PATTERN_CONTSCROLL) ? WrapMode::WrapAround : WrapMode::LimitAtPatternEnd); } SetSelToCursor(); Modified: trunk/OpenMPT/mptrack/View_pat.h ============================================================================== --- trunk/OpenMPT/mptrack/View_pat.h Thu Sep 26 15:44:56 2024 (r21761) +++ trunk/OpenMPT/mptrack/View_pat.h Thu Sep 26 16:03:41 2024 (r21762) @@ -128,7 +128,6 @@ enum PatternStatus { psMouseDragSelect = 0x01, // Creating a selection using the mouse - psKeyboardDragSelect = 0x02, // Creating a selection using shortcuts psFocussed = 0x04, // Is the pattern editor focussed psFollowSong = 0x08, // Does the cursor follow playback psRecordingEnabled = 0x10, // Recording enabled @@ -242,6 +241,8 @@ void SetModified(bool updateAllViews = true); + bool IsSelectionPressed() const; + bool UpdateSizes(); void UpdateScrollSize(); void UpdateScrollPos(); |
From: <sv...@op...> - 2024-09-26 13:45:08
|
Author: sagamusix Date: Thu Sep 26 15:44:56 2024 New Revision: 21761 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21761 Log: [Fix] Fix mis-merge in r21758. Modified: branches/OpenMPT-1.30/soundlib/Load_okt.cpp Modified: branches/OpenMPT-1.30/soundlib/Load_okt.cpp ============================================================================== --- branches/OpenMPT-1.30/soundlib/Load_okt.cpp Thu Sep 26 14:58:34 2024 (r21760) +++ branches/OpenMPT-1.30/soundlib/Load_okt.cpp Thu Sep 26 15:44:56 2024 (r21761) @@ -133,8 +133,10 @@ auto &sample = sndFile.GetSample(m.instr); // Default volume only works on raw Paula channels if(pairedChn[chn] && sample.nVolume < 256) + { m.volcmd = VOLCMD_VOLUME; m.vol = 64; + } // If channel and sample type don't match, stop this channel (add 100 to the instrument number to make it understandable what happened during import) if((sample.cues[0] == 1 && pairedChn[chn] != 0) || (sample.cues[0] == 0 && pairedChn[chn] == 0)) |
From: <sv...@op...> - 2024-09-26 12:58:46
|
Author: sagamusix Date: Thu Sep 26 14:58:34 2024 New Revision: 21760 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21760 Log: Merged revision(s) 21755 from trunk/OpenMPT: [Fix] OKT: Sample in last sample slot was never loaded. ........ Modified: branches/OpenMPT-1.28/ (props changed) branches/OpenMPT-1.28/soundlib/Load_okt.cpp Modified: branches/OpenMPT-1.28/soundlib/Load_okt.cpp ============================================================================== --- branches/OpenMPT-1.28/soundlib/Load_okt.cpp Thu Sep 26 14:58:05 2024 (r21759) +++ branches/OpenMPT-1.28/soundlib/Load_okt.cpp Thu Sep 26 14:58:34 2024 (r21760) @@ -400,7 +400,7 @@ // Read samples size_t fileSmp = 0; - for(SAMPLEINDEX smp = 1; smp < m_nSamples; smp++) + for(SAMPLEINDEX smp = 1; smp <= m_nSamples; smp++) { if(fileSmp >= sampleChunks.size() || !(loadFlags & loadSampleData)) break; |
From: <sv...@op...> - 2024-09-26 12:58:19
|
Author: sagamusix Date: Thu Sep 26 14:58:05 2024 New Revision: 21759 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21759 Log: Merged revision(s) 21755 from trunk/OpenMPT: [Fix] OKT: Sample in last sample slot was never loaded. ........ Modified: branches/OpenMPT-1.29/ (props changed) branches/OpenMPT-1.29/soundlib/Load_okt.cpp Modified: branches/OpenMPT-1.29/soundlib/Load_okt.cpp ============================================================================== --- branches/OpenMPT-1.29/soundlib/Load_okt.cpp Thu Sep 26 14:57:21 2024 (r21758) +++ branches/OpenMPT-1.29/soundlib/Load_okt.cpp Thu Sep 26 14:58:05 2024 (r21759) @@ -418,7 +418,7 @@ // Read samples size_t fileSmp = 0; - for(SAMPLEINDEX smp = 1; smp < m_nSamples; smp++) + for(SAMPLEINDEX smp = 1; smp <= m_nSamples; smp++) { if(fileSmp >= sampleChunks.size() || !(loadFlags & loadSampleData)) break; |
From: <sv...@op...> - 2024-09-26 12:57:33
|
Author: sagamusix Date: Thu Sep 26 14:57:21 2024 New Revision: 21758 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21758 Log: Merged revision(s) 21685, 21755-21756 from trunk/OpenMPT: [Fix] OKT: Disable loop on type "B" samples if they're used on a mixed channel. Fixes sinfonia.okta (https://www.un4seen.com/forum/?topic=15448.msg143764#msg143764). ........ [Fix] OKT: Sample in last sample slot was never loaded. ........ [Fix] OKT: Of course there are modules in the wild where r21685 is not sufficient... so we keep a looped and unloop copy of type "B" samples now. Fixes super turri song.okta (https://www.un4seen.com/forum/?topic=15448.300#msg143803). ........ Modified: branches/OpenMPT-1.30/ (props changed) branches/OpenMPT-1.30/soundlib/Load_okt.cpp Modified: branches/OpenMPT-1.30/soundlib/Load_okt.cpp ============================================================================== --- branches/OpenMPT-1.30/soundlib/Load_okt.cpp Thu Sep 26 14:56:25 2024 (r21757) +++ branches/OpenMPT-1.30/soundlib/Load_okt.cpp Thu Sep 26 14:57:21 2024 (r21758) @@ -30,7 +30,7 @@ }; uint32be signature; // IFF chunk name - uint32be chunksize; // chunk size without header + uint32be chunkSize; // Chunk size without header }; MPT_BINARY_STRUCT(OktIffChunk, 8) @@ -38,11 +38,11 @@ struct OktSample { char name[20]; - uint32be length; // length in bytes + uint32be length; // Length in bytes uint16be loopStart; // *2 for real value uint16be loopLength; // ditto - uint16be volume; // default volume - uint16be type; // 7-/8-bit sample + uint16be volume; // Default volume + uint16be type; // 7-/8-bit sample (0: 7-bit, only usable on paired channels ["8" in GUI], 1: 8-bit, only usable on unpaired channels ["4" in GUI], 2: 7-bit, usable on all channels ["B" in GUI]) }; MPT_BINARY_STRUCT(OktSample, 32) @@ -51,7 +51,8 @@ // Parse the sample header block static void ReadOKTSamples(FileReader &chunk, CSoundFile &sndFile) { - sndFile.m_nSamples = std::min(static_cast<SAMPLEINDEX>(chunk.BytesLeft() / sizeof(OktSample)), static_cast<SAMPLEINDEX>(MAX_SAMPLES - 1)); + static_assert(MAX_SAMPLES >= 72); // For copies of type "B" samples + sndFile.m_nSamples = std::min(static_cast<SAMPLEINDEX>(chunk.BytesLeft() / sizeof(OktSample)), SAMPLEINDEX(36)); for(SAMPLEINDEX smp = 1; smp <= sndFile.GetNumSamples(); smp++) { @@ -66,6 +67,7 @@ mptSmp.nVolume = std::min(oktSmp.volume.get(), uint16(64)) * 4u; mptSmp.nLength = oktSmp.length & ~1; mptSmp.cues[0] = oktSmp.type; // Temporary storage for pattern reader, will be reset later + mptSmp.cues[1] = 0; // Parse loops const SmpLength loopStart = oktSmp.loopStart * 2; const SmpLength loopLength = oktSmp.loopLength * 2; @@ -122,20 +124,27 @@ if(note > 0 && note <= 36) { m.note = note + (NOTE_MIDDLEC - 13); + if(pairedChn[chn] && m.note >= NOTE_MIDDLEC + 22) + m.note = NOTE_MIDDLEC + 21; + m.instr = instr + 1; if(m.instr > 0 && m.instr <= sndFile.GetNumSamples()) { - const auto &sample = sndFile.GetSample(m.instr); + auto &sample = sndFile.GetSample(m.instr); // Default volume only works on raw Paula channels if(pairedChn[chn] && sample.nVolume < 256) - { m.volcmd = VOLCMD_VOLUME; m.vol = 64; - } + // If channel and sample type don't match, stop this channel (add 100 to the instrument number to make it understandable what happened during import) if((sample.cues[0] == 1 && pairedChn[chn] != 0) || (sample.cues[0] == 0 && pairedChn[chn] == 0)) { m.instr += 100; + } else if(sample.cues[0] == 2 && pairedChn[chn] && sample.uFlags[CHN_SUSTAINLOOP]) + { + // Type "B" sample: Loops only work on raw Paula channels + sample.cues[1] = 1; + m.instr += 36; } } } @@ -353,7 +362,7 @@ if(!file.ReadStruct(iffHead)) break; - FileReader chunk = file.ReadChunk(iffHead.chunksize); + FileReader chunk = file.ReadChunk(iffHead.chunkSize); if(!chunk.IsValid()) continue; @@ -461,12 +470,14 @@ // Read samples size_t fileSmp = 0; - for(SAMPLEINDEX smp = 1; smp < m_nSamples; smp++) + const SAMPLEINDEX origSamples = m_nSamples; + for(SAMPLEINDEX smp = 1; smp <= origSamples; smp++) { if(fileSmp >= sampleChunks.size() || !(loadFlags & loadSampleData)) break; ModSample &mptSample = Samples[smp]; + const bool needCopy = mptSample.cues[1] != 0; mptSample.SetDefaultCuePoints(); if(mptSample.nLength == 0) continue; @@ -481,6 +492,20 @@ SampleIO::signedPCM) .ReadSample(mptSample, sampleChunks[fileSmp]); + if(needCopy) + { + // Type "B" samples (can play on both paired and unpaired channels) can have loop information, + // which can only be used on unpaired channels. So we need a looped and unlooped copy of the sample. + m_nSamples = std::max(m_nSamples, static_cast<SAMPLEINDEX>(smp + 36)); + ModSample ©Sample = Samples[smp + 36]; + copySample.Initialize(); + copySample.nC5Speed = mptSample.nC5Speed; + copySample.nVolume = mptSample.nVolume; + copySample.nLength = mptSample.nLength; + copySample.CopyWaveform(mptSample); + m_szNames[smp + 36] = m_szNames[smp]; + } + fileSmp++; } |
From: <sv...@op...> - 2024-09-26 12:56:37
|
Author: sagamusix Date: Thu Sep 26 14:56:25 2024 New Revision: 21757 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21757 Log: Merged revision(s) 21755-21756 from trunk/OpenMPT: [Fix] OKT: Sample in last sample slot was never loaded. ........ [Fix] OKT: Of course there are modules in the wild where r21685 is not sufficient... so we keep a looped and unloop copy of type "B" samples now. Fixes super turri song.okta (https://www.un4seen.com/forum/?topic=15448.300#msg143803). ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/soundlib/Load_okt.cpp Modified: branches/OpenMPT-1.31/soundlib/Load_okt.cpp ============================================================================== --- branches/OpenMPT-1.31/soundlib/Load_okt.cpp Thu Sep 26 14:54:37 2024 (r21756) +++ branches/OpenMPT-1.31/soundlib/Load_okt.cpp Thu Sep 26 14:56:25 2024 (r21757) @@ -51,7 +51,8 @@ // Parse the sample header block static void ReadOKTSamples(FileReader &chunk, CSoundFile &sndFile) { - sndFile.m_nSamples = std::min(static_cast<SAMPLEINDEX>(chunk.BytesLeft() / sizeof(OktSample)), static_cast<SAMPLEINDEX>(MAX_SAMPLES - 1)); + static_assert(MAX_SAMPLES >= 72); // For copies of type "B" samples + sndFile.m_nSamples = std::min(static_cast<SAMPLEINDEX>(chunk.BytesLeft() / sizeof(OktSample)), SAMPLEINDEX(36)); for(SAMPLEINDEX smp = 1; smp <= sndFile.GetNumSamples(); smp++) { @@ -66,6 +67,7 @@ mptSmp.nVolume = std::min(oktSmp.volume.get(), uint16(64)) * 4u; mptSmp.nLength = oktSmp.length & ~1; mptSmp.cues[0] = oktSmp.type; // Temporary storage for pattern reader, will be reset later + mptSmp.cues[1] = 0; // Parse loops const SmpLength loopStart = oktSmp.loopStart * 2; const SmpLength loopLength = oktSmp.loopLength * 2; @@ -134,16 +136,17 @@ // Default volume only works on raw Paula channels if(pairedChn[chn] && sample.nVolume < 256) m.SetVolumeCommand(VOLCMD_VOLUME, 64); - // Type "B" samples (can play on both paired and unpaired channels) can have loop information, - // which can only be used on unpaired channels. The correct fix would be to have a looped and unlooped variant of this sample, - // but it is probably quite unlikely that any module relies on this behaviour. - // On the other hand, sinfonia.okta has a type "B" sample with loop points set, and it only uses paired channels. - if(pairedChn[chn] && sample.uFlags[CHN_SUSTAINLOOP]) - sample.uFlags.reset(CHN_SUSTAINLOOP); // If channel and sample type don't match, stop this channel (add 100 to the instrument number to make it understandable what happened during import) if((sample.cues[0] == 1 && pairedChn[chn] != 0) || (sample.cues[0] == 0 && pairedChn[chn] == 0)) + { m.instr += 100; + } else if(sample.cues[0] == 2 && pairedChn[chn] && sample.uFlags[CHN_SUSTAINLOOP]) + { + // Type "B" sample: Loops only work on raw Paula channels + sample.cues[1] = 1; + m.instr += 36; + } } } @@ -444,12 +447,14 @@ // Read samples size_t fileSmp = 0; - for(SAMPLEINDEX smp = 1; smp < m_nSamples; smp++) + const SAMPLEINDEX origSamples = m_nSamples; + for(SAMPLEINDEX smp = 1; smp <= origSamples; smp++) { if(fileSmp >= sampleChunks.size() || !(loadFlags & loadSampleData)) break; ModSample &mptSample = Samples[smp]; + const bool needCopy = mptSample.cues[1] != 0; mptSample.SetDefaultCuePoints(); if(mptSample.nLength == 0) continue; @@ -464,6 +469,20 @@ SampleIO::signedPCM) .ReadSample(mptSample, sampleChunks[fileSmp]); + if(needCopy) + { + // Type "B" samples (can play on both paired and unpaired channels) can have loop information, + // which can only be used on unpaired channels. So we need a looped and unlooped copy of the sample. + m_nSamples = std::max(m_nSamples, static_cast<SAMPLEINDEX>(smp + 36)); + ModSample ©Sample = Samples[smp + 36]; + copySample.Initialize(); + copySample.nC5Speed = mptSample.nC5Speed; + copySample.nVolume = mptSample.nVolume; + copySample.nLength = mptSample.nLength; + copySample.CopyWaveform(mptSample); + m_szNames[smp + 36] = m_szNames[smp]; + } + fileSmp++; } |
From: <sv...@op...> - 2024-09-26 12:54:44
|
Author: sagamusix Date: Thu Sep 26 14:54:37 2024 New Revision: 21756 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21756 Log: [Fix] OKT: Of course there are modules in the wild where r21685 is not sufficient... so we keep a looped and unloop copy of type "B" samples now. Fixes super turri song.okta (https://www.un4seen.com/forum/?topic=15448.300#msg143803). Modified: trunk/OpenMPT/soundlib/Load_okt.cpp Modified: trunk/OpenMPT/soundlib/Load_okt.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_okt.cpp Thu Sep 26 14:49:46 2024 (r21755) +++ trunk/OpenMPT/soundlib/Load_okt.cpp Thu Sep 26 14:54:37 2024 (r21756) @@ -51,7 +51,8 @@ // Parse the sample header block static void ReadOKTSamples(FileReader &chunk, CSoundFile &sndFile) { - sndFile.m_nSamples = std::min(static_cast<SAMPLEINDEX>(chunk.BytesLeft() / sizeof(OktSample)), static_cast<SAMPLEINDEX>(MAX_SAMPLES - 1)); + static_assert(MAX_SAMPLES >= 72); // For copies of type "B" samples + sndFile.m_nSamples = std::min(static_cast<SAMPLEINDEX>(chunk.BytesLeft() / sizeof(OktSample)), SAMPLEINDEX(36)); for(SAMPLEINDEX smp = 1; smp <= sndFile.GetNumSamples(); smp++) { @@ -66,6 +67,7 @@ mptSmp.nVolume = std::min(oktSmp.volume.get(), uint16(64)) * 4u; mptSmp.nLength = oktSmp.length & ~1; mptSmp.cues[0] = oktSmp.type; // Temporary storage for pattern reader, will be reset later + mptSmp.cues[1] = 0; // Parse loops const SmpLength loopStart = oktSmp.loopStart * 2; const SmpLength loopLength = oktSmp.loopLength * 2; @@ -134,16 +136,17 @@ // Default volume only works on raw Paula channels if(pairedChn[chn] && sample.nVolume < 256) m.SetVolumeCommand(VOLCMD_VOLUME, 64); - // Type "B" samples (can play on both paired and unpaired channels) can have loop information, - // which can only be used on unpaired channels. The correct fix would be to have a looped and unlooped variant of this sample, - // but it is probably quite unlikely that any module relies on this behaviour. - // On the other hand, sinfonia.okta has a type "B" sample with loop points set, and it only uses paired channels. - if(pairedChn[chn] && sample.uFlags[CHN_SUSTAINLOOP]) - sample.uFlags.reset(CHN_SUSTAINLOOP); // If channel and sample type don't match, stop this channel (add 100 to the instrument number to make it understandable what happened during import) if((sample.cues[0] == 1 && pairedChn[chn] != 0) || (sample.cues[0] == 0 && pairedChn[chn] == 0)) + { m.instr += 100; + } else if(sample.cues[0] == 2 && pairedChn[chn] && sample.uFlags[CHN_SUSTAINLOOP]) + { + // Type "B" sample: Loops only work on raw Paula channels + sample.cues[1] = 1; + m.instr += 36; + } } } @@ -446,12 +449,14 @@ // Read samples size_t fileSmp = 0; - for(SAMPLEINDEX smp = 1; smp <= m_nSamples; smp++) + const SAMPLEINDEX origSamples = m_nSamples; + for(SAMPLEINDEX smp = 1; smp <= origSamples; smp++) { if(fileSmp >= sampleChunks.size() || !(loadFlags & loadSampleData)) break; ModSample &mptSample = Samples[smp]; + const bool needCopy = mptSample.cues[1] != 0; mptSample.SetDefaultCuePoints(); if(mptSample.nLength == 0) continue; @@ -466,6 +471,20 @@ SampleIO::signedPCM) .ReadSample(mptSample, sampleChunks[fileSmp]); + if(needCopy) + { + // Type "B" samples (can play on both paired and unpaired channels) can have loop information, + // which can only be used on unpaired channels. So we need a looped and unlooped copy of the sample. + m_nSamples = std::max(m_nSamples, static_cast<SAMPLEINDEX>(smp + 36)); + ModSample ©Sample = Samples[smp + 36]; + copySample.Initialize(); + copySample.nC5Speed = mptSample.nC5Speed; + copySample.nVolume = mptSample.nVolume; + copySample.nLength = mptSample.nLength; + copySample.CopyWaveform(mptSample); + m_szNames[smp + 36] = m_szNames[smp]; + } + fileSmp++; } |