From 3fae6a4ba87b4b845611dd533830a9e710a4661b Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 16 Mar 2025 04:21:21 -0500 Subject: [PATCH] XM import: improve envelope conversion still buggy --- demos/c64/DOOM_E1M1.fur | Bin 2957 -> 0 bytes demos/c64/DOOM_E1M3.fur | Bin 913 -> 0 bytes demos/opl/E1M4OPL2.fur | Bin 4122 -> 0 bytes demos/opl/e3m2_opl3.fur | Bin 1959 -> 0 bytes src/engine/fileOps/xm.cpp | 40 +++++++++++++++++++++++++++++++++++--- 5 files changed, 37 insertions(+), 3 deletions(-) delete mode 100644 demos/c64/DOOM_E1M1.fur delete mode 100644 demos/c64/DOOM_E1M3.fur delete mode 100644 demos/opl/E1M4OPL2.fur delete mode 100644 demos/opl/e3m2_opl3.fur diff --git a/demos/c64/DOOM_E1M1.fur b/demos/c64/DOOM_E1M1.fur deleted file mode 100644 index d2c105fda4208aebac89dbb6a8a2474dbc807a25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2957 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 diff --git a/demos/opl/E1M4OPL2.fur b/demos/opl/E1M4OPL2.fur deleted file mode 100644 index 19f8ce54f34c5214eac28024ce513c961d392c01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4122 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 AZvX%Q diff --git a/demos/opl/e3m2_opl3.fur b/demos/opl/e3m2_opl3.fur deleted file mode 100644 index 63d4751ec4aa84b9d0b487c142c93787dea17b8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1959 zcmZWpX*3&%8m&E1OCmz4wkWYyOj~P8Dno6xRzpb$weK`9a%hm+5}8seGHMBGZDXgF zlrc(cDQUW>SjTvFwUxG1d7U$F-po1g?>*nW=ey_LbBP5XupSX7Eu;@eseCd&p$JY71PC9gDK5<1A3aC}2s930oxFn#c;;C`K zCkXH)x>1KD6Ft=#51LNby{DVlshy5_KcEnk!wHBPDKHA?;^kr4;j0hw6gUzK=Wp(n zR5^s9J zq+n=gzCt)4dW?>Y_SJubFgkA^HK9xNx#j=4w;y-3*1H)PAFP7x%3Aq$psNfXZYd5b zI%gO11393&pk(`=(Cy29iFfvZbT=`#d_nz|V+dFNudV`V?~lzH2&hHyO^+NqGbMaG zUSv~TZ%ZKMsP$ZT3PG_$ye$Y(zh#EA6seDp-Fz92TXXuYkJRlk)tx3n=IoQ}B>85L zLI<%Y4389W;(Q?){3kQ`CSD}IfF)K|CUPO&$D6wIIRcdq{LC(~0uuDgy54ULg9B4O z@Hd;@`yr;Tw58Ob8(cRbcQ^A9?3kN)mbdH6G%M@dE)z|fB_*y~k2qi3GqMd_mYB2R z%apG&8(iAJWr8-MU|39HDR^eIi1+FZ`)K;^TK{UH>PeN=&JnH_3Vv$c@XM28C#oa2 z`h?3>O&Pj6{RG{RE=X6QOVgn)?p0;g$0XjxRCWEhd+O1KBPneK;WAUQ|9?=8M|S5_ zW-G)`H&X^518dMjatU~UUtYUpr`oST^)5b!XF z=rC#el$x7dQoih_cIq7FaAPLnuxsai-|?YR^GAUxnwb*Ucj^i+8JnIb78v=K z(iN8P;}r|;fLDn^U8xZkj>354y=YB$^AuLnPjmW9f)sqmf2TUv#smb*R%8W7#m zpdnmD&?Z4TcAO`t4bm~X8yHM?iVe9@^@-$Q(TJHzvrKJzGi}wAxOxt}ug0SA;vRL@ zp8xFI*N-0-AIUg1kdgZ^60qD!(Ar6Y@jC0!($3-1HhGh=K7OX4?q}smzc(B-Khh|&bvw^>=%0*E9 zfI4LJkJn-5^EIj4W+_n5@UgRk9=h%ME90(!Bn0H$sHG5Rae40oPWSL4&9g5dYF`vZ z%nz=C{q+XJ*oSb{n&7+lMmrXI)VHh!m<@Y04?>|8Eq1M~W2eP>Y*{RVU!U3kxE27{ zJ2qCB?4m^^JiKvyJ`4@HV|#vDYDfyhPhEI?l``mHn$wc{qEx;(9+9Xh@?5`*LOUJ}`-3(b=Lp=5QHT0zKd;>4)RI+Z}aiyMIbuM2O zfQxC9K)E>s!B5Jww6!~WrLZ>Ds`oJ%5v4Ik0wi0wap~&dv()0kwlYFZqJJ&dnQzw_mVhTo zxJJiHD4ICnlL-nHDJgQ%dit`#0kB)Xx!1Mz8pB7~f1<8Lf+()q$Z>8))1^s`FcsQ7z&tiuSXRIm;vNhXHheM7Pm$ zFZ}bjs(Vbaz~$24Ip*ktlr#1F$&{3A(4Sr*J6>-cobIHX@)l~uh^}bQcnhS$pojcc zQE2{Ctu#vjf%FfrbYvl@?axdB;50ZHQC{C;=A8)wev$ew42&X~4&`Vbo*^rVCT{;y z9r^6rXFygm+$_f3J4N7oEu1%1BP*rRhU#lzAEDd8KUyIn8kZbM{#$K*qb~L@JpfnK zi$BK3J0+>dROx^@uLn{VVaTDkBu{)z-b~1CMWZGq9r95709NWaHIft2TzF+Q4e?Cwt>;d&``$oE0cV02ylccB8D6ws4UmjQ2?(>xkFXhSM}v3-6;f>JDk>HHvq YMXqfD$K%I7%Hoe?FC8LB17J4)0jXc2Q2+n{ diff --git a/src/engine/fileOps/xm.cpp b/src/engine/fileOps/xm.cpp index 76acf1d15..71d583932 100644 --- a/src/engine/fileOps/xm.cpp +++ b/src/engine/fileOps/xm.cpp @@ -20,7 +20,7 @@ #include "fileOpsCommon.h" void readEnvelope(DivInstrument* ins, int env, unsigned char flags, unsigned char numPoints, unsigned char loopStart, unsigned char loopEnd, unsigned char susPoint, short* points) { - if (numPoints>24) numPoints=24; + if (numPoints>12) numPoints=12; if (loopStart>=numPoints) loopStart=numPoints-1; if (loopEnd>=numPoints) loopEnd=numPoints-1; @@ -49,12 +49,45 @@ void readEnvelope(DivInstrument* ins, int env, unsigned char flags, unsigned cha break; } target->len=0; - int point=0; - bool pointJustBegan=true; // mark loop end as end of envelope if (flags&4) { if (loopEndval[t0]=p0; + } + } else { + for (int j=t0; jval[j]=p0+(((p1-p0)*(j-t0))/(t1-t0)); + } + } + } + if (flags&4) { // loop + if (loopStart!=loopEnd && loopStartloop=CLAMP(pointTime[loopStart],0,254); + } + } + if (flags&2 && susPointrel=CLAMP(pointTime[susPoint]-1,0,254); + } + target->len=MIN(pointTime[numPoints-1]+1,255); + if (((flags&4) && (!(flags&2))) || ((flags&6)==0)) { + target->rel=target->len-1; + } + + // old crap + /* for (int i=0; i<255; i++) { int curPoint=MIN(point,numPoints-1); int nextPoint=MIN(point+1,numPoints-1); @@ -102,6 +135,7 @@ void readEnvelope(DivInstrument* ins, int env, unsigned char flags, unsigned cha target->len=i+1; target->val[i]=p0+(((p1-p0)*curTime)/timeDiff); } + */ // split L/R if (env==1) {