From 2b064f85bb0aa1dc52e39a963b3615e0f663eb77 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 10 Jan 2025 02:06:14 -0500 Subject: [PATCH 01/18] SafeReader: fix exploit when using negative length issue #2316 --- src/engine/safeReader.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/engine/safeReader.cpp b/src/engine/safeReader.cpp index 98f06f417..ffd1db6f6 100644 --- a/src/engine/safeReader.cpp +++ b/src/engine/safeReader.cpp @@ -61,6 +61,7 @@ int SafeReader::read(void* where, size_t count) { #endif if (count==0) return 0; if (curSeek+count>len) throw EndOfFileException(this,len); + if (curSeek+countlen) throw EndOfFileException(this,len); + if (curSeek+1len) throw EndOfFileException(this,len); + if (curSeek+2len) throw EndOfFileException(this,len); + if (curSeek+2len) throw EndOfFileException(this,len); + if (curSeek+4len) throw EndOfFileException(this,len); + if (curSeek+4len) throw EndOfFileException(this,len); + if (curSeek+8len) throw EndOfFileException(this,len); + if (curSeek+4len) throw EndOfFileException(this,len); + if (curSeek+8len) throw EndOfFileException(this,len); + if (curSeek+2len) throw EndOfFileException(this,len); + if (curSeek+2len) throw EndOfFileException(this,len); + if (curSeek+4len) throw EndOfFileException(this,len); + if (curSeek+4len) throw EndOfFileException(this,len); + if (curSeek+8len) throw EndOfFileException(this,len); + if (curSeek+4len) throw EndOfFileException(this,len); + if (curSeek+8 Date: Fri, 10 Jan 2025 02:06:25 -0500 Subject: [PATCH 02/18] limit max sample size when loading .dmf --- src/engine/fileOps/dmf.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/engine/fileOps/dmf.cpp b/src/engine/fileOps/dmf.cpp index 6da165ced..d4501a996 100644 --- a/src/engine/fileOps/dmf.cpp +++ b/src/engine/fileOps/dmf.cpp @@ -910,7 +910,8 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) { int vol=50; short* data; unsigned char* adpcmData; - if (length<0) { + // I don't think a sample can be that big + if (length<0 || length>(1<<29L)) { logE("invalid sample length %d. are we doing something wrong?",length); lastError="file is corrupt or unreadable at samples"; delete[] file; From a750157ab4677f9faca86b52f953dfd16bfd274f Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 10 Jan 2025 02:10:14 -0500 Subject: [PATCH 03/18] fix another out of bounds situation this time if the pitch is invalid --- src/engine/fileOps/dmf.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/engine/fileOps/dmf.cpp b/src/engine/fileOps/dmf.cpp index d4501a996..760b2fc0b 100644 --- a/src/engine/fileOps/dmf.cpp +++ b/src/engine/fileOps/dmf.cpp @@ -929,6 +929,11 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) { sample->centerRate=sample->rate; pitch=reader.readC(); vol=reader.readC(); + + if (pitch<0 || pitch>10) { + logW("%d: sample pitch is wrong! (%d)",i,pitch); + pitch=5; + } } if (ds.version<=0x08) { sample->rate=ymuSampleRate*400; From 23287d5edfe7e3a52945ed839e0ae5c6cb246084 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 10 Jan 2025 02:41:04 -0500 Subject: [PATCH 04/18] many demo song submissions which I left behind by asikwus, biolizardshadow and Zaxinoth Digital --- demos/README.md | 3 +++ demos/misc/horizon_beyond_gba.fur | Bin 0 -> 40443 bytes demos/multichip/steak.fur | Bin 0 -> 23592 bytes demos/sn7/Updraft Flight.fur | Bin 0 -> 3829 bytes 4 files changed, 3 insertions(+) create mode 100644 demos/misc/horizon_beyond_gba.fur create mode 100644 demos/multichip/steak.fur create mode 100644 demos/sn7/Updraft Flight.fur diff --git a/demos/README.md b/demos/README.md index cc87aaf4d..28a1f0ca3 100644 --- a/demos/README.md +++ b/demos/README.md @@ -16,12 +16,14 @@ these demo songs are not under the GPL. all rights are reserved to the original - aloelucidity - AmigaX - AquaDoesStuff +- asikwus - AstralBlue - Background2982 - battybeats - bbqzzd - Bernie - billimanmcjonnson +- biolizardshadow - BlastBrothers - Blaze Weednix - BlueElectric05 @@ -134,6 +136,7 @@ these demo songs are not under the GPL. all rights are reserved to the original - Xan - Yuzu4K - Zabir +- Zaxinoth Digital - Zaxolotl - ZoomTen (Zumi) diff --git a/demos/misc/horizon_beyond_gba.fur b/demos/misc/horizon_beyond_gba.fur new file mode 100644 index 0000000000000000000000000000000000000000..9c0331ff8a5e9d7e591575d3da1b31e574cc808f GIT binary patch literal 40443 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 mJu$!BNznK?8jJs|0A3{g@)PCb?ej zYDJM)QKYF@lvG)QB^e0ziW2NPK~lSr+aP%=S`^7six5bFAV`X$Me>$B6h(rfAdR{x z3Kv2B(xQN?e&@{0-Ajt1=va}-nya0^GjqY&CvWq)4f}`wsh>S@u034as$@3JCQ_68Dwc9891Eg1xzK`@@NKXeuUqkw5q}~v6 zk^UIzyGVbRBbwl_bH;&4-&ok5Ye}h zwm(die46NAK0`G92+_a&HuU%`(RX$cJ-VCd;ol|t${~t|wmz;@)k=ZGeXyP3H@7ZvkVJ zA)xSk!u-t?j|up!FimFF-Nrvb8~1t zJ$v$Or8zLRTp&KXoGnG1@p8x~7>{5uijZJ5g29OQ0t`kl7{OqKHBwQye|ke9c}N<` zM+%TaqzEa8)Ps~qDj>y3y-3@TibzC@;9ms)BKQ}wOzFM^+W-6FyjAHnKAq=%69?i(20ZkNhyNlnHbz7>(J4^(Tr;RM8yqPlkn?VFxz zU#dJ*dGW%F=i4VwPoJQ}d+%j*;u|+0RTa1O#)W)OE*C}Njr~<-FQ)7PJ$rWgG#TK#Hx0xRy}R9r~4m!?mhf{1%q zM9zpH&ku9?c$*#mWIFs~86#9)I(dG!GCehW2HYQK?j6g_0jI%-HE`&DE|t@NlN{?R z5Y@+`f+!Wm9x}Z5x$6DmYKVJZ-BYZ2#drJOel;meC8@-3cW&^Q(6b&H)x9`sc|p`f zSw}gJvWapM!i{Z!!~AALYb7B5GX>LB1GmaN>tZ(5S01oeAtudS+rk3nnapIYKNt{ zFxI6r;X5W1>KUYSp*|m)wcQyoQP1&ea-?fH-ONd?h1ASZTJQGMkQzA<^<+-Ba{|j( z#1#G=GzDfAGsp^9bzL(He4;q2bU)usAahh?UdLj3qL#`>ld2H4RV+F^CZ@s#qtsSQ z#|4G9qVi!c@9o-C#He?)2fWQpGNwGKg8$IvDHXqUoFET6O~Q~M1WZ6Zfi}Rr!I{)r z2Hu(zTn4}%mFfThy)`>T02g`AF-FrxC8a9g9!d=?oT4fZYVf2YuHTcEm|3PIJ+6#H zLY@(I1R{7o>EhW~aH+;Zc^a%BGIAM&Er_WJgb>WyuyE)SK(ehWTivvS&8)qBpYCnQ>Q*qu>-FicE4qhWB zputs_MooVr=gf#gh#yljs()$p3WS0%tSlRxpMygm>-#mI5Phyx@L+gjqYhDUk{o1T~=__KzNx`lvKfF)O zOTU9t5S#rZt2v_zn5#6SbYAQyacxTC8d{|jtg0U*zDlB2h#@WBigj$ta!to{q@RwI zhBZCjPmh;s+O+GYv}XSq*+;Z1X(Vv2VOE{E0M)XJ)@AmF2@-O0E)OFqWb7FA1a|XB z#D9Pr;x6NrESrn5n36JKG??r_IU#e|PCgg=x(Fl)xa<)S!G~>yd#(uQUvUP4say-ElizTc(?oZ6ZrM#!G8kUE3<{>wgOi8<&M0v)*I+jlk%5 z7LrLrm+iO88fS(1i&(`RujhgI1?3i!d?H4ujc{b?aUWrpuSO^kYxRVmta{>qUi?4a zI<;0kwdSK?ztGXOu!FN7PU`c-vAI_@jNj}O0DDQ?_%5lH2;9s#VPGAXsEdO4%s#$` z^Sv@v#$CwembB`P2s;FEMD~g}b!o!w73Q6kD?hRkD;FOt#`4jwfH8^;bh83 zHWRw*|KAEg+qO>l4SK>Ot~?OWs`p-(pu$H9lPd9hS4ht)L!2|d{)oiLB1zDB?;^VvAerNAf@n>;G@}S&&mSfLP0}J3x})G6zlOD0d@`xbV?mI z0}i_?h>|%<^o&L38IqI{VJT+j52VEY)JyIWxA5%xj%L<>R91fUruDbF>qniZHF;)o z-3-&&QRkUWo&iB03DPyA&Ip)1i-T_Z-DNj@5#(o~IB1>4OrAhj(!+KVuH&ImN={7? zZ}O_;GkpN3YOEj>3ymDmO50iR5Lz=ePPG6na2$|k`EXCstMKFRK~}oHZ0N`>hE}nI zp&#ymRtsH6TXJrX`lcMBtj;Yl$FO`|@1R{XE*|5i#;FmaB@0VQyx=1~v${P7af2&% z)sW#GGPNPIRv9$dB~^`sRlC&*pWg!UY=bOX0DM#c^fv{7j7BZY#vg!CUj>_HkOjhs zJCN~2E^#hr^lydf{^O<{%%B}iJ@4R(4H?|M5UI~*HtU=~U~+!JcjrPijzL^{_Op4p zg^LZ_`X+76Mcxgw4=om&SfB|pXvnH$&EO`#wR^gFP+bKSvpF0BscATM+#-goU$eF= z!*4eN9qOv%R1s0kIAmSUidr^}RGkx5S1OT$&3W51o(u;QO#VmCuju~;CM#9!ERWRb zNtq511RfNx;J*+`?5Kv_omUk_cF?q&a<(=>Tw9XQSedntV*ILMd z%&t!YQ0U@q)#=0inV@&TU@XA;ZJvTm=1x#e>ue*FXWUEf1TIL9 z1jcVn&!P3IbLX&H>)ii>V3en=V{7HHm3o-Hwo=B$(zqrV?hp(M8&gB4Q!_B##nip?)otL35cpnwK z)h5B4HWAiL6NoPf#NHOfcSc_ue`0NF;bdR?;VPn@wlOYWP;OYL_OP zZp>R|?Cz%fnOHp7viJtq*|B2hXMZNZZN9VFT~4JD?cFDaJtu|@H%TJ*e{&xT~}>l?kb|`A_%e zL0wkw0*Re>+QLkd)fL@I{r1glj$3;S& zo5X_Z(mvMhz~iXQ&=3h}Ws-BFV!5XC*m-878A_EYde99RlV(fgwmHwz0l#Y>lW{VF zM~^vrQ|RL|>lEi%IxOzmlQM4B4gy0L!&aE*CusTF(I9#92A~yWDcPGz)?1hVzKHWR zpEkZDcI?@_hr)WIWLHwBEAuwDR`(2?GF)AobxiYdtM6ji|4j)#d1ty#`GpA2>95(h z1M=T@bb+YDb5Z%CSFEV3eoE}mFGHy zeh7*Rt_{IeZ5muV8yZqa{$^C!o`Kifg7;U~Q7xDa#o3i^H3P5Sg7?nAODo`gMd0;U zz`JuH9WFEJH$44{2eCLvGISo+No%)ZcoTH}XPQUSdU@XGB>MGS>Fc>lU+Ir>??bV> zyApjdmk!6cj#TFLWi94N#2mqvIqsS{j`RH*iOb_U!B{cGGhzt-$-|s3%1+xb+j-Mm zL~Psf`QYI*~G!*)>XDTcEI?+Whj}&)!l<9+H&@Ov9 zrZf3vLtcgb*D~E@<2XN-h34+&LN7b=2cGZ^FR_VSM0!d#LeEBzNUQAQG9wJeYS literal 0 HcmV?d00001 From 141ee2f9b9832084500a57be19d36fa574c60516 Mon Sep 17 00:00:00 2001 From: LionHeartChiptuner Date: Thu, 26 Dec 2024 20:26:19 -0500 Subject: [PATCH 05/18] PicoHot Credits. In C64. --- demos/c64/PICOHOTCREDITS.fur | Bin 0 -> 713 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/c64/PICOHOTCREDITS.fur diff --git a/demos/c64/PICOHOTCREDITS.fur b/demos/c64/PICOHOTCREDITS.fur new file mode 100644 index 0000000000000000000000000000000000000000..76ed5fdfb4cde05fa945af65ee38ca1f26a111fa GIT binary patch literal 713 zcmV;)0yh14oVAn9YZE~j#^2qUrkkc83Q|1D9t15|Xlo2T_|cetWT8!qX`vnpZIhuc z`PjHk1Wy`z@!-Le2mcO_Ui=RPPf~?};>k;eA_c+t%ucr1Xl+n%k{>hgyz@LW^X~5W ze8aD96@*>!ijA@u-zOrQI?c(=FCUv2aBe(%lD#`aapLFtf?OOd(AjOKN9!RcoAp}p zf7^;%@UmXr&iJC})^{o2s0m+9tctD5H9O-y6286t*j{wKYF2Fd^~?jeR&P{=5Anwg znWmv^3?no&j7?nWIXD1goM;U+!4EKu%3cB`@CL+VL`z^J);W>^55r_8O4?UbH>M};yfZsSD^6y4T3>Is+Y)W!J-9>US*zn1BHe`alfy0}I5#07!sAFa(Cd2q2Qs zOXwx^5_$=}gkC}~p_kB0=q2XY+qm984rW2Io@`Rj-6b7>N5I$6e*V;BB#1r_Zt;at=kinO2%mo8@@6R zzS3MytzABS?IbOwub`#|Z?)*H-uXPfE>w3$jhULqdtmWCtEFsB8r9E0+ulCib_%wm z$~FOc8V28wza1TZ`TXg_`@n_UR@CJW7r9P)N9(Zn+GMcyf=#s}7OY)KujU%zvtTYL zfikF3GcrCqw-d>$+|J3kTlWw-_hj5sn_Jf>@PrgJG`SHM^oc=IY4Rxpf__{~EFTdPeA(plkgEnR+d6G=O9= literal 0 HcmV?d00001 From 6414de203639c2ab4d466549222f17e6e597c031 Mon Sep 17 00:00:00 2001 From: jaezu <66060223+jaezudev@users.noreply.github.com> Date: Sun, 29 Dec 2024 12:40:36 +0100 Subject: [PATCH 06/18] Shining Crystal (MSX2) - Cave --- demos/genesis/shiningcrystal_cave.fur | Bin 0 -> 9271 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/genesis/shiningcrystal_cave.fur diff --git a/demos/genesis/shiningcrystal_cave.fur b/demos/genesis/shiningcrystal_cave.fur new file mode 100644 index 0000000000000000000000000000000000000000..139c05627388c14f4a0de3fcc394c2ba87f7cd7b GIT binary patch literal 9271 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 Z&qkxu8jbWzUHGLf{Bq&1{|6{13^C!42QmNv literal 0 HcmV?d00001 From cfcad1e6899a7743a4c2552385ab946b4cf557c2 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 17 Jan 2025 02:58:22 -0500 Subject: [PATCH 07/18] GUI: fix possible crash in find/replace issue #2328 --- src/gui/findReplace.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index 7a7492317..157de0441 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -371,7 +371,7 @@ void FurnaceGUI::doReplace() { switch (queryReplaceEffectPos) { case 0: // clear - for (int j=0; jsong.subsong[i.subsong]->pat[i.x].effectCols; j++) { + for (int j=0; jsong.subsong[i.subsong]->pat[i.x].effectCols && j<8; j++) { effectOrder[j]=j; } break; @@ -380,7 +380,7 @@ void FurnaceGUI::doReplace() { for (int j=0; j<8 && placementIndex<8 && i.effectPos[j]>=0; j++) { effectOrder[placementIndex++]=i.effectPos[j]; } - for (int j=0; jsong.subsong[i.subsong]->pat[i.x].effectCols; j++) { + for (int j=0; jsong.subsong[i.subsong]->pat[i.x].effectCols && placementIndex<8 && j<8; j++) { if (p->data[i.y][4+j*2]!=-1 || p->data[i.y][5+j*2]!=-1) { effectOrder[placementIndex++]=j; } @@ -392,7 +392,7 @@ void FurnaceGUI::doReplace() { for (int j=0; j<8 && placementIndex<8 && i.effectPos[j]>=0; j++) { effectOrder[placementIndex++]=i.effectPos[j]; } - for (int j=0; jsong.subsong[i.subsong]->pat[i.x].effectCols; j++) { + for (int j=0; jsong.subsong[i.subsong]->pat[i.x].effectCols && placementIndex<8 && j<8; j++) { if (p->data[i.y][4+j*2]!=-1 || p->data[i.y][5+j*2]!=-1) { effectOrder[placementIndex++]=j; } @@ -406,7 +406,7 @@ void FurnaceGUI::doReplace() { } case 3: { // insert in free spaces int placementIndex=0; - for (int j=0; jsong.subsong[i.subsong]->pat[i.x].effectCols; j++) { + for (int j=0; jsong.subsong[i.subsong]->pat[i.x].effectCols && j<8; j++) { if (p->data[i.y][4+j*2]==-1 && p->data[i.y][5+j*2]==-1) { effectOrder[placementIndex++]=j; } @@ -415,7 +415,7 @@ void FurnaceGUI::doReplace() { } } - for (int j=0; j Date: Fri, 17 Jan 2025 03:01:30 -0500 Subject: [PATCH 08/18] GUI: short circuit evaluation paranoia issue #2327 --- src/gui/dataList.cpp | 72 +++++++++++++++++++++++--------------------- 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/src/gui/dataList.cpp b/src/gui/dataList.cpp index 6e9d614f7..36695caad 100644 --- a/src/gui/dataList.cpp +++ b/src/gui/dataList.cpp @@ -71,47 +71,51 @@ const char* sampleNote[12]={ } #define SIMPLE_DRAG_SOURCE(_c,_toMoveVar) \ - if (settings.draggableDataView && ImGui::BeginDragDropSource()) { \ - _toMoveVar=i; \ - ImGui::SetDragDropPayload(_c,NULL,0,ImGuiCond_Once); \ - ImGui::Button(ICON_FA_ARROWS "##AssetDrag"); \ - ImGui::EndDragDropSource(); \ + if (settings.draggableDataView) { \ + if (ImGui::BeginDragDropSource()) { \ + _toMoveVar=i; \ + ImGui::SetDragDropPayload(_c,NULL,0,ImGuiCond_Once); \ + ImGui::Button(ICON_FA_ARROWS "##AssetDrag"); \ + ImGui::EndDragDropSource(); \ + } \ } #define SIMPLE_DRAG_TARGET(_c,_toMoveVar,_curVar,_swapFn,_moveUpFn,_moveDownFn) \ - if (settings.draggableDataView && ImGui::BeginDragDropTarget()) { \ - const ImGuiPayload* payload=ImGui::AcceptDragDropPayload(_c); \ - if (payload!=NULL) { \ - int target=i; \ - bool markModified=false; \ - if (_toMoveVar!=target) { \ - if (ImGui::IsKeyDown(ImGuiKey_ModCtrl)) { \ - markModified=_swapFn(_toMoveVar,target); \ - } else { \ - while (_toMoveVar>target) { \ - if (_moveUpFn(_toMoveVar)) { \ - _toMoveVar--; \ - markModified=true; \ - } else { \ - break; \ - } \ - } \ - while (_toMoveVartarget) { \ + if (_moveUpFn(_toMoveVar)) { \ + _toMoveVar--; \ + markModified=true; \ + } else { \ + break; \ + } \ + } \ + while (_toMoveVar Date: Mon, 6 Jan 2025 16:34:06 -0500 Subject: [PATCH 09/18] new demo song: donttryreality --- demos/specs2/donttryreality.fur | Bin 0 -> 18187 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/specs2/donttryreality.fur diff --git a/demos/specs2/donttryreality.fur b/demos/specs2/donttryreality.fur new file mode 100644 index 0000000000000000000000000000000000000000..3029617151de23f0be55544162eb7f88f6c2e7d8 GIT binary patch literal 18187 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 C-6Yun literal 0 HcmV?d00001 From 9d20fc48677fcfe3acdfa2f908d2ab4008600214 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 18 Jan 2025 18:26:44 +0900 Subject: [PATCH 10/18] Added a demo song and made some changes to the translation file --- demos/misc/DonkeyKongCountry-AtariPokey.fur | Bin 0 -> 1839 bytes po/ko.po | 322 ++++++++++---------- 2 files changed, 166 insertions(+), 156 deletions(-) create mode 100644 demos/misc/DonkeyKongCountry-AtariPokey.fur diff --git a/demos/misc/DonkeyKongCountry-AtariPokey.fur b/demos/misc/DonkeyKongCountry-AtariPokey.fur new file mode 100644 index 0000000000000000000000000000000000000000..2a4fb72ce4fee2862466e680558055da8a2ef2ae GIT binary patch literal 1839 zcmV+~2hjLs?|X0F?94cWJL|{F2PTW@qcex=&0z4lh`W(1FPIMOd19(0`bRJmi6Kw#7fEnN;;49!cEYum`YryX%+6;UF zJeMT81RU)ndJQ-Y`~ZxuA^HXwx`F6z;8(!C5&Xag;1S?6;1A%5wM28kd%&i3L~j7^ zuhY|Yq*M_%D)D$RFRm53@5S)M6LFs{f(Ij!uthxKCww6sp$C^N#=;f~Dy#ogP-I7U z=>)xF?RICeW=1@9)0bNU_n}}t*o8>bgM+XTgyNGeJfX;h;t~o=C?e^v9Yv!gdw<;$ zfCETC0TI9jqJRg)fH;rmU-r(akLj`EoFv#XsleDJyt(jEYGHgXkvIsSFi780ZtK1 zCgL$K>PD254pvFXR!i$qPw5yj>b6EQn)1~)WrU7QO&$T&UZyg3J;@{!Dd{-8^ik+P zB~d2YdLM8va1U@da2IeV;Mj0_m93~E5gYH>c08AAauU0M2jm#@$!MDY>D5yr!@=8rCK{xHl_oYY2>l>Z}tn89PcNB`P; zFzg*`b$JI#+$XINti?#1Ptl|Mv!L0eXPY_lfw zEm;h!D(zvpQp&OA=leLgH-?wcYte9c37z2cTU!2CmM7c{!tpR+Pm9lsr`iQ1LlYD* zqHgL%OixhPbGdn$`qF)LMMeH%_q0~Ld!m-|i8f_#nDW5~!Fh+~vvp_?u?n|LvdOFhNakT!X9q2lJPyNvR0pV7@>&po(tKG+tbi*-7HB~h zL_-!F0D6{%Zp{$Xd8qeNM|E}U7ogrp9O?jvQY&_S8R~;TPRJZoIauVN&an!u;GviF z5Y&6LIvgls0%hZ!K-qX#ARdAmw&VyYFCAN9-0h34lbW+}>ufQ{?|J6I$X#dJIn>&|ceAe-%Gt0l z&76%-v2pBrlzWNH>AcD5;H&7b`bmB0R{iS*&S#PHN$4HsUr%r{3!IGqesuFahj?nE^b@I`}=K;R28z(-~fgu&{wp4TT<0juj*00 zN~pMsDNjX}tMD%vGxNXJ4$ieL$=L)pnr5xD_iUmg2izA2aGbM#p7nEy?*~E=wj}G! zFsL_)lbb+=WiHh|B;0 literal 0 HcmV?d00001 diff --git a/po/ko.po b/po/ko.po index bd7b33218..523cd8e5f 100644 --- a/po/ko.po +++ b/po/ko.po @@ -20,12 +20,12 @@ msgstr "파일의 조기 종료" #: src/engine/fileOps/s3m.cpp:320 #, c-format msgid "Channel %d" -msgstr "" +msgstr "채널 %d" #: src/engine/fileOps/s3m.cpp:336 #, c-format msgid "FM %d" -msgstr "" +msgstr "FM %d" #: src/engine/sysDef.cpp:428 src/engine/sysDef.cpp:442 msgid "20xx: Set channel mode (bit 0: square; bit 1: noise; bit 2: envelope)" @@ -41,11 +41,11 @@ msgstr "22xy: 엔벨로프 모드 설정 (x: 모양, y: 해당 채널에 활성 #: src/engine/sysDef.cpp:431 src/engine/sysDef.cpp:445 msgid "23xx: Set envelope period low byte" -msgstr "23xx: 엔벨로프 PERIOD LOW 바이트 설정" +msgstr "23xx: 엔벨로프 주기 하위 바이트 설정" #: src/engine/sysDef.cpp:432 src/engine/sysDef.cpp:446 msgid "24xx: Set envelope period high byte" -msgstr "24xx: 엔벨로프 PERIOD HIGH 바이트 설정" +msgstr "24xx: 엔벨로프 주기 상위 바이트 설정" #: src/engine/sysDef.cpp:433 src/engine/sysDef.cpp:447 #: src/engine/sysDef.cpp:1603 @@ -64,15 +64,15 @@ msgstr "29xy: 자동 엔벨로프 설정 (x: 분자값; y: 분모값)" #: src/engine/sysDef.cpp:436 msgid "2Cxx: Set timer period offset (bit 7: sign)" -msgstr "" +msgstr "2Cxx: 타이머 주기 오프셋 설정 (비트 7: 부호)" #: src/engine/sysDef.cpp:437 src/engine/sysDef.cpp:450 msgid "2Exx: Write to I/O port A" -msgstr "2Exx: I/O포트 A에 기록" +msgstr "2Exx: I/O포트 A에 쓰기" #: src/engine/sysDef.cpp:438 src/engine/sysDef.cpp:451 msgid "2Fxx: Write to I/O port B" -msgstr "2Fxx: I/O포트 B에 기록" +msgstr "2Fxx: I/O포트 B에 쓰기" #: src/engine/sysDef.cpp:443 msgid "21xx: Set noise frequency (0 to FF)" @@ -249,7 +249,7 @@ msgstr "5Fxx: 오퍼레이터 4에 대해 DECAY 2 값 설정 (0 에서 1F)" #: src/engine/sysDef.cpp:507 src/engine/sysDef.cpp:518 msgid "60xx: Set operator mask (bits 0-3)" -msgstr "" +msgstr "60xx: 오퍼레이터 마스크 설정 (비트 0 에서 3)" #: src/engine/sysDef.cpp:512 msgid "10xx: Set noise frequency (xx: value; 0 disables noise)" @@ -262,7 +262,7 @@ msgstr "17xx: LFO 속도 설정" #: src/engine/sysDef.cpp:514 msgid "18xx: Set LFO waveform (0 saw, 1 square, 2 triangle, 3 noise)" msgstr "" -"18xx: LFO 웨이브테이블 설정 (0 = 톱니파, 1 = 사각파, 2 = 삼각파, 3 = 노이즈)" +"18xx: LFO 파형 설정 (0 = 톱니파, 1 = 사각파, 2 = 삼각파, 3 = 노이즈)" #: src/engine/sysDef.cpp:515 msgid "1Exx: Set AM depth (0 to 7F)" @@ -287,7 +287,7 @@ msgstr "24xx LFO 2 속도 설정" #: src/engine/sysDef.cpp:524 msgid "25xx: Set LFO 2 waveform (0 saw, 1 square, 2 triangle, 3 noise)" msgstr "" -"25xx: LFO 2 웨이브테이블 설정 (0 = 톱니파, 1 = 사각파, 2 = 삼각파, 3 = 노이" +"25xx: LFO 2 파형 설정 (0 = 톱니파, 1 = 사각파, 2 = 삼각파, 3 = 노이" "즈)" #: src/engine/sysDef.cpp:525 @@ -311,7 +311,7 @@ msgid "" "2Axy: Set waveform (x: operator from 1 to 4 (0 for all ops); y: waveform " "from 0 to 7)" msgstr "" -"2Axy: 웨이브테이블 설정 (x: 오퍼레이터 1 에서 4 (0 = 모두 선택); y: 웨이브테이" +"2Axy: 파형 설정 (x: 오퍼레이터 1 에서 4 (0 = 모두 선택); y: 웨이브테이" "블, 0 에서 7)" #: src/engine/sysDef.cpp:529 @@ -486,7 +486,7 @@ msgid "" "2Axy: Set waveform (x: operator from 1 to 4 (0 for all ops); y: waveform " "from 0 to 3 in OPL2 and 0 to 7 in OPL3)" msgstr "" -"2Axy: 웨이브테이블 설정 (x: 오퍼레이터 1 에서 4 (0 = 모두 선택); y; 웨이브테" +"2Axy: 파형 설정 (x: 오퍼레이터 1 에서 4 (0 = 모두 선택); y; 웨이브테" "이블 (0 에서 3은 OPL2, 0에서 7은 OPL3)" #: src/engine/sysDef.cpp:594 src/engine/sysDef.cpp:662 @@ -515,14 +515,14 @@ msgid "" "5Bxy: Set whether key will scale envelope (x: operator from 1 to 4 (0 for " "all ops); y: enabled)" msgstr "" -"5Bxy: 키가 엔벨로프를 확장할지 여부 (x: 오퍼레이터 1 에서 4 (0 = 모두 선택); " +"5Bxy: 키가 엔벨로프를 확장할지 여부를 설정 (x: 오퍼레이터 1 에서 4 (0 = 모두 선택); " "y: 활성화)" #: src/engine/sysDef.cpp:606 src/engine/sysDef.cpp:683 msgid "" "10xx: Set waveform (bit 0: triangle; bit 1: saw; bit 2: pulse; bit 3: noise)" msgstr "" -"10xx: 웨이브테이블 설정 (비트 0: 삼각파; 비트 1: 톱니파; 비트 2: 펄스; 비트 " +"10xx: 파형 설정 (비트 0: 삼각파; 비트 1: 톱니파; 비트 2: 펄스; 비트 " "3: 노이즈)" #: src/engine/sysDef.cpp:607 @@ -590,7 +590,7 @@ msgstr "4xxx: 컷오프 설정 (0 에서 7FF)" #: src/engine/sysDef.cpp:1897 src/engine/sysDef.cpp:2067 #: src/engine/sysDef.cpp:2081 msgid "10xx: Set waveform" -msgstr "10xx: 웨이브테이블 설정" +msgstr "10xx: 파형 설정" #: src/engine/sysDef.cpp:629 msgid "20xx: Set PCM frequency" @@ -1131,7 +1131,7 @@ msgstr "15xx: 엔벨로프 모드 설정 (0: 엔벨로프, 1: 길이, 2: 반복, #: src/engine/sysDef.cpp:787 src/engine/sysDef.cpp:2115 msgid "16xx: Set length counter (refer to manual for a list of values)" -msgstr "16xx: 길이 카운터 설정 (보류" +msgstr "16xx: 길이 카운터 설정 (매뉴얼에서 값 리스트 확인 가능)" #: src/engine/sysDef.cpp:788 src/engine/sysDef.cpp:2116 msgid "17xx: Set frame counter mode (0: 4-step, 1: 5-step)" @@ -1143,7 +1143,7 @@ msgstr "18xx: PCM/DPCM 모드 선택 (0: PCM; 1: DPCM)" #: src/engine/sysDef.cpp:790 src/engine/sysDef.cpp:2118 msgid "19xx: Set triangle linear counter (0 to 7F; 80 and higher halt)" -msgstr "19xx: 삼각파 선형 카운터 설정 (0 에서 7F; 80 이상 보류)" +msgstr "19xx: 삼각파 선형 카운터 설정 (0 에서 7F; 80 이상 정지)" #: src/engine/sysDef.cpp:791 src/engine/sysDef.cpp:2119 msgid "20xx: Set DPCM frequency (0 to F)" @@ -1195,7 +1195,7 @@ msgstr "네오 지오 CD" msgid "" "like Neo Geo, but lacking the ADPCM-B channel since they couldn't connect " "the pins." -msgstr "네오 지오와 같지만 ADPCM-B 채널이 보류" +msgstr "네오 지오와 같지만 SNK가 핀을 연결하지 않아서 ADPCM-B 채널이 없습니다." #: src/engine/sysDef.cpp:840 src/engine/sysDef.cpp:852 #: src/engine/sysDef.cpp:894 src/engine/sysDef.cpp:906 @@ -1350,7 +1350,9 @@ msgid "" "the pins.\n" "this one is in Extended Channel mode, which turns the second FM channel into " "four operators with independent notes/frequencies." -msgstr "보류" +msgstr "네오 지오와 같지만 SNK가 핀을 연결하지 않아서 ADPCM-B 채널이 없습니다.\n" +"이것은 두 번째 FM 채널을 독립적인 음/주파수를 가진 4개의 오퍼레이터로 바꾸는 " +"확장 채널 모드입니다. #: src/engine/sysDef.cpp:852 src/engine/sysDef.cpp:1459 #: src/engine/sysDef.cpp:1472 @@ -1394,7 +1396,7 @@ msgstr "아미가" msgid "" "a computer from the '80s with full sampling capabilities, giving it a sound " "ahead of its time." -msgstr "전체 샘플링이 가능한 80년대 보류" +msgstr "80년대의 컴퓨터로, 완벽한 샘플링 기능을 갖춰 시대를 앞서가는 사운드를 들려줍니다." #: src/engine/sysDef.cpp:884 msgid "10xx: Toggle filter (0 disables; 1 enables)" @@ -1410,7 +1412,7 @@ msgstr "12xx: 다음 채널로 PERIOD 모듈레이션 토글" #: src/engine/sysDef.cpp:887 msgid "13xx: Set waveform" -msgstr "13xx: 웨이브테이블 설정" +msgstr "13xx: 파형 설정" #: src/engine/sysDef.cpp:892 msgid "Yamaha YM2151 (OPM)" @@ -1492,7 +1494,7 @@ msgid "" "it's a challenge to make music on this chip which barely has musical " "capabilities..." msgstr "" -"이것으로 음악을 만드는것은 하나의 챌린지입니다. 음악적 가능성이 없는 칩이기 " +"이것으로 음악을 만드는것은 하나의 챌린지입니다. 음악적 재능이 없는 칩이기 " "때문이죠." #: src/engine/sysDef.cpp:928 @@ -1504,7 +1506,7 @@ msgid "" "supposedly an upgrade from the AY-3-8910, this was present on the Creative " "Music System (Game Blaster) and SAM Coupé." msgstr "" -"보류 AY-3-8910의 업그레이드 입니다. 이것은 크리에이티브 뮤직 시스템(게임 블래" +"AY-3-8910의 업그레이드 버전 입니다. 이것은 크리에이티브 뮤직 시스템(게임 블래" "스터)과 SAM 코페에 제공되었습니다." #: src/engine/sysDef.cpp:930 @@ -1529,18 +1531,18 @@ msgstr "11xx: 노이즈 주파수 설정" #: src/engine/sysDef.cpp:939 msgid "12xx: Setup envelope (refer to docs for more information)" -msgstr "12xx: 엔벨로프 설정 (보류)" +msgstr "12xx: 엔벨로프 설정 (매뉴얼에서 값 리스트 확인 가능)" #: src/engine/sysDef.cpp:944 msgid "Microchip AY8930" -msgstr "마이크로칩 AY8930" +msgstr "AY8930" #: src/engine/sysDef.cpp:945 msgid "" "an improved version of the AY-3-8910 with a bigger frequency range, duty " "cycles, configurable noise and per-channel envelopes!" msgstr "" -"AY-3-8910의 개선 버전으로, 넓은 주파수 범위, 듀티비, 구성 가능한 노이즈와 개" +"AY-3-8910의 개선 버전으로 넓은 주파수 범위, 듀티비, 구성 가능한 노이즈와 개" "별 엔벨로프가 있습니다!" #: src/engine/sysDef.cpp:956 @@ -1551,7 +1553,8 @@ msgstr "코모도어 VIC-20" msgid "" "Commodore's successor to the PET.\n" "its square wave channels are more than just square..." -msgstr "보류" +msgstr "PET의 후속 모델인 Commodore.\n" +"그 사각파 채널은 단순한 사각파 이상입니다..." #: src/engine/sysDef.cpp:958 src/gui/settings.cpp:139 src/gui/settings.cpp:209 #: src/gui/settings.cpp:4009 @@ -1575,7 +1578,7 @@ msgstr "코모도어 PET" msgid "" "one channel of 1-bit wavetable which is better (and worse) than the PC " "Speaker." -msgstr "1비트 웨이브테이블 칩으로 PC 비퍼보다 좋은 (그리고 나쁜) 칩입니다." +msgstr "1비트 웨이브테이블 칩으로 PC 비퍼보다 좋은 (근데 나쁜) 칩입니다." #: src/engine/sysDef.cpp:969 src/engine/sysDef.cpp:1266 #: src/engine/sysDef.cpp:2104 src/gui/editControls.cpp:433 @@ -1589,7 +1592,7 @@ msgstr "SNES" #: src/engine/sysDef.cpp:979 msgid "FM? nah... samples! Nintendo's answer to Sega." -msgstr "FM? 뭐래~ 샘플이지! 닌텐도가 세가에게 대답합니다..." +msgstr "FM? 뭐래... 샘플이지! 닌텐도가 세가에게 대답합니다..." #: src/engine/sysDef.cpp:986 msgid "18xx: Enable echo buffer" @@ -1621,35 +1624,35 @@ msgstr "1Fxx: 우측 DRY 출력 볼륨 설정" #: src/engine/sysDef.cpp:993 msgid "30xx: Set echo filter coefficient 0" -msgstr "30xx: 보류" +msgstr "30xx: 에코 필터 계수 0 설정" #: src/engine/sysDef.cpp:994 msgid "31xx: Set echo filter coefficient 1" -msgstr "31xx: 보류" +msgstr "31xx: 에코 필터 계수 1 설정" #: src/engine/sysDef.cpp:995 msgid "32xx: Set echo filter coefficient 2" -msgstr "32xx: 보류" +msgstr "32xx: 에코 필터 계수 2 설정" #: src/engine/sysDef.cpp:996 msgid "33xx: Set echo filter coefficient 3" -msgstr "33xx: 보류" +msgstr "33xx: 에코 필터 계수 3 설정" #: src/engine/sysDef.cpp:997 msgid "34xx: Set echo filter coefficient 4" -msgstr "34xx: 보류" +msgstr "34xx: 에코 필터 계수 4 설정" #: src/engine/sysDef.cpp:998 msgid "35xx: Set echo filter coefficient 5" -msgstr "35xx: 보류" +msgstr "35xx: 에코 필터 계수 5 설정" #: src/engine/sysDef.cpp:999 msgid "36xx: Set echo filter coefficient 6" -msgstr "36xx: 보류" +msgstr "36xx: 에코 필터 계수 6 설정" #: src/engine/sysDef.cpp:1000 msgid "37xx: Set echo filter coefficient 7" -msgstr "37xx: 보류" +msgstr "37xx: 에코 필터 계수 7 설정 #: src/engine/sysDef.cpp:1005 msgid "12xx: Toggle echo on this channel" @@ -1701,7 +1704,7 @@ msgstr "코나미 VRC6" #: src/engine/sysDef.cpp:1020 msgid "an expansion chip for the Famicom, featuring a quirky sawtooth channel." -msgstr "패미컴용 확장 칩으로, 톱니 보류" +msgstr "패미컴용 확장 칩으로 독특한 톱니 모양의 채널이 특징입니다." #: src/engine/sysDef.cpp:1021 msgid "VRC6 1" @@ -1727,7 +1730,7 @@ msgstr "야마하 YM2413 (OPLL)" msgid "" "cost-reduced version of the OPL with 16 patches and only one of them is user-" "configurable." -msgstr "원가절감된 버전의 OPL로 16채널과 사용자 지정 악기는 하나만 가능합니다." +msgstr "원가 절감된 버전의 OPL로, 16채널과 사용자 지정 악기는 하나만 가능합니다." #: src/engine/sysDef.cpp:1035 src/engine/sysDef.cpp:1177 #: src/engine/sysDef.cpp:1189 src/engine/sysDef.cpp:1685 @@ -1741,7 +1744,7 @@ msgstr "패미컴 디스크 시스템 (칩)" #: src/engine/sysDef.cpp:1046 msgid "a disk drive for the Famicom which also contains one wavetable channel." -msgstr "패미컴용 디스크 드라이브로 하나의 웨이브테이블 채널을 담고 있습니다." +msgstr "패미컴용 디스크 드라이브로 하나의 웨이브테이블 채널을 가지고 있습니다." #: src/engine/sysDef.cpp:1047 src/gui/settings.cpp:4083 msgid "FDS" @@ -1765,11 +1768,11 @@ msgstr "14xx: 모듈레이터 위치 설정" #: src/engine/sysDef.cpp:1058 msgid "15xx: Set modulator table to waveform" -msgstr "15xx: 웨이브테이블에 모듈레이터 테이블 설정" +msgstr "15xx: 파형에 모듈레이터 테이블 설정" #: src/engine/sysDef.cpp:1059 msgid "16xy: Automatic modulation speed (x: numerator; y: denominator)" -msgstr "" +msgstr "16xy: 자동 모듈레이션 속도 (x: 분자값; y: 분모값)" #: src/engine/sysDef.cpp:1064 msgid "MMC5" @@ -1830,7 +1833,7 @@ msgid "" "stereo...\n" "...but it has a built-in AY-3-8910! (actually an YM2149)" msgstr "" -"OPM의 원가절감된 버전으로 다른 레지스터 레이아웃을 가지고 있고 스테레오가 없" +"OPM의 원가 절감된 버전으로 다른 레지스터 레이아웃을 가지고 있고 스테레오가 없" "습니다...\n" "...그러나 이것은 AY-3-8910을 내장하고 있습니다! (사실 YM2149이지만요.)" @@ -1846,10 +1849,11 @@ msgid "" "this one is in Extended Channel mode, which turns the third FM channel into " "four operators with independent notes/frequencies" msgstr "" -"OPM의 원가절감된 버전으로 다른 레지스터 레이아웃을 가지고 있고 스테레오가 없" +"OPM의 원가 절감된 버전으로 다른 레지스터 레이아웃을 가지고 있고 스테레오가 없" "습니다...\n" "...그러나 이것은 AY-3-8910을 내장하고 있습니다! (사실 YM2149이지만요.)\n" -"이것은 확장 채널 모드로 세번째 채널을 보류" +"이것은 세 번째 FM 채널을 독립적인 음/주파수를 가진 4개의 오퍼레이터로 변환하" +"는 확장 채널 모드입니다." #: src/engine/sysDef.cpp:1113 src/engine/sysDef.cpp:1126 #: src/engine/sysDef.cpp:1151 src/engine/sysDef.cpp:1164 @@ -1894,7 +1898,7 @@ msgid "" "...but it has a built-in AY-3-8910! (actually an YM2149)\n" "CSM blah blah" msgstr "" -"OPM의 원가절감된 버전으로 다른 레지스터 레이아웃을 가지고 있고 스테레오가 없" +"OPM의 원가 절감된 버전으로 다른 레지스터 레이아웃을 가지고 있고 스테레오가 없" "습니다...\n" "...그러나 이것은 AY-3-8910을 내장하고 있습니다! (사실 YM2149이지만요.)\n" "CSM 뭐시기" @@ -1913,7 +1917,7 @@ msgstr "야마하 YM2608 (OPNA)" msgid "" "OPN but twice the FM channels, stereo makes a come-back and has rhythm and " "ADPCM channels." -msgstr "보류" +msgstr "OPN과 같지만 FM 채널이 두 배이고, 스테레오가 다시 등장하며 리듬과 ADPCM 채널이 있습니다." #: src/engine/sysDef.cpp:1139 src/engine/sysDef.cpp:1151 #: src/engine/sysDef.cpp:1164 src/engine/sysDef.cpp:1485 @@ -1952,7 +1956,7 @@ msgstr "하이햇" #: src/engine/sysDef.cpp:1485 src/engine/sysDef.cpp:1635 #: src/engine/sysDef.cpp:1697 src/gui/insEdit.cpp:211 msgid "Tom" -msgstr "톰" +msgstr "탐" #: src/engine/sysDef.cpp:1139 src/engine/sysDef.cpp:1151 #: src/engine/sysDef.cpp:1164 @@ -1975,7 +1979,9 @@ msgid "" "ADPCM channels.\n" "this one is in Extended Channel mode, which turns the third FM channel into " "four operators with independent notes/frequencies" -msgstr "보류" +msgstr "OPN과 같지만 FM 채널이 두 배이고, 스테레오가 다시 등장하며 리듬과 ADPCM 채널이 있습니다.\n" +"이것은 세 번째 FM 채널을 독립적인 음/주파수를 가진 4개의 오퍼레이터로 변환하" +"는 확장 채널 모드입니다." #: src/engine/sysDef.cpp:1162 msgid "Yamaha YM2608 (OPNA) CSM" @@ -1986,7 +1992,8 @@ msgid "" "OPN but twice the FM channels, stereo makes a come-back and has rhythm and " "ADPCM channels.\n" "CSM blah blah" -msgstr "보류" +msgstr "OPN과 같지만 FM 채널이 두 배이고, 스테레오가 다시 등장하며 리듬과 ADPCM 채널이 있습니다." +"\nCSM 머시기" #: src/engine/sysDef.cpp:1175 msgid "Yamaha YM3526 (OPL)" @@ -2200,7 +2207,7 @@ msgstr "" #: src/engine/sysDef.cpp:1247 src/engine/sysDef.cpp:1718 msgid "10xx: Set waveform (0 to 7)" -msgstr "10xx: 웨이브테이블 설정 (0 에서 7)" +msgstr "10xx: 파형 설정 (0 에서 7)" #: src/engine/sysDef.cpp:1248 msgid "11xx: Set AUDCTL" @@ -2218,7 +2225,7 @@ msgstr "리코 RF5C68" msgid "" "this is like SNES' sound chip but without interpolation and the rest of nice " "bits." -msgstr "SNES의 사운드칩과 비슷하지만 인터폴레이션 보류" +msgstr "이것은 SNES의 사운드 칩과 같지만 보간이 없고 나머지는 괜찮은 비트입니다." #: src/engine/sysDef.cpp:1264 src/gui/settings.cpp:4090 msgid "WonderSwan" @@ -2329,7 +2336,7 @@ msgstr "" #: src/engine/sysDef.cpp:1329 msgid "15xx: Set modulation waveform (x: wavetable; channel 5 only)" -msgstr "15xx: 모듈레이션 웨이브테이블 설정 (x: 웨이브테이블; 채널 5만)" +msgstr "15xx: 모듈레이션 파형 설정 (x: 웨이브테이블; 채널 5만)" #: src/engine/sysDef.cpp:1334 msgid "Konami VRC7" @@ -2340,7 +2347,7 @@ msgid "" "like OPLL, but even more cost reductions applied. three FM channels went " "missing, and drums mode did as well..." msgstr "" -"OPLL과 비슷하지만 더 원가절감되었습니다. FM 채널 세개가 없어졌고, 드럼 모드" +"OPLL과 비슷하지만 더 원가 절감되었습니다. FM 채널 세개가 없어졌고, 드럼 모드" "도..." #: src/engine/sysDef.cpp:1346 @@ -2397,7 +2404,8 @@ msgid "" msgstr "" "이것은 세가 메가드라이브에 있었기 때문에 잘 알려졌습니다. (또한 FM Towns 컴" "퓨터에도 있었습니다.)\n" -"보류" +"이것은 세 번째 FM 채널을 독립적인 음/주파수를 가진 4개의 오퍼레이터로 변환하" +"는 확장 채널 모드입니다." #: src/engine/sysDef.cpp:1385 msgid "Yamaha YM2612 (OPN2) CSM" @@ -2485,7 +2493,8 @@ msgid "" "four operators with independent notes/frequencies." msgstr "" "이 칩은 SNK의 Neo Geo 아케이드 보드와 비디오 게임기에 사용되었습니다.\n" -"OPNA 같은데 리듬 채널이 ADPCM 채널이고 FM 채널이 두 개 없어졌습니다.\n" +"이것은 OPNA와 같지만 리듬 채널은 ADPCM 채널이고 두개의 FM 채널은 사라졌습니" +"다." "이것은 두 번째 FM 채널을 독립적인 음/주파수를 가진 4개의 오퍼레이터로 바꾸는 " "확장 채널 모드입니다." @@ -2501,7 +2510,8 @@ msgid "" "this one includes CSM mode control for special effects on Channel 2." msgstr "" "이 칩은 SNK의 Neo Geo 아케이드 보드와 비디오 게임기에 사용되었습니다.\n" -"OPNA 같은데 리듬 채널이 ADPCM 채널이고 FM 채널이 두 개 없어졌습니다.\n" +"이것은 OPNA와 같지만 리듬 채널은 ADPCM 채널이고 두개의 FM 채널은 사라졌습니" +"다." "이것은 채널 2의 특수 이펙트를 위한 CSM 모드 제어를 포함합니다." #: src/engine/sysDef.cpp:1483 @@ -2660,7 +2670,7 @@ msgstr "이 칩은 유튜버 The 8-Bit Guy가 디자인한 컴퓨터에 사용 #: src/engine/sysDef.cpp:1542 msgid "20xx: Set waveform" -msgstr "20xx: 웨이브테이블 설정" +msgstr "20xx: 파형 설정" #: src/engine/sysDef.cpp:1543 msgid "22xx: Set duty cycle (0 to 3F)" @@ -2719,7 +2729,7 @@ msgid "" "sound." msgstr "" "웨이브테이블 채널이 너무 많은 세타/알루머 제조 아케이드 보드에 사용되는 사운" -"드 칩으로, 샘플링된 사운드도 가능합니다." +"드 칩으로 샘플링된 사운드도 가능합니다." #: src/engine/sysDef.cpp:1595 msgid "11xx: Set envelope shape" @@ -3109,7 +3119,7 @@ msgid "" "a square wave additive synthesis chip made by OKI. used in some arcade " "machines and instruments." msgstr "" -"오키(OKI)가 만든 사각파 신디사이져 칩으로, 일부 아케이드 기계와 악기에 사용됩" +"오키(OKI)가 만든 사각파 신디사이져 칩으로 일부 아케이드 기계와 악기에 사용됩" "니다." #: src/engine/sysDef.cpp:1843 @@ -3173,7 +3183,7 @@ msgid "" "an SN76489 derivative used in Neo Geo Pocket, has independent stereo volume " "and noise channel frequency." msgstr "" -"네오 지오 포켓에 사용되는 SN76489 파생형으로, 독립적인 스테레오 볼륨과 노이" +"네오 지오 포켓에 사용되는 SN76489 파생형으로 독립적인 스테레오 볼륨과 노이" "즈 채널 주파수를 가지고 있습니다." #: src/engine/sysDef.cpp:1884 @@ -3378,7 +3388,7 @@ msgstr "DAC 우" #: src/engine/sysDef.cpp:2047 msgid "10xx: Set waveform (0 to 4; 0 to 3 on noise)" -msgstr "10xx: 웨이브테이블 설정 (0 에서 4; 노이즈에서 0 에서 3)" +msgstr "10xx: 파형 설정 (0 에서 4; 노이즈에서 0 에서 3)" #: src/engine/sysDef.cpp:2048 msgid "11xx: Set noise frequency source (0: fixed; 1-3: channels 1 to 3)" @@ -3466,7 +3476,7 @@ msgstr "" msgid "" "12xx: Set duty cycle/noise mode/waveform (pulse/wave: 0 to 3; noise: 0 or 1)" msgstr "" -"12xx: 듀티비/노이즈 모드/웨이브테이블 설정 (펄스/웨이브: 0 에서 3; 노이즈: 0 " +"12xx: 듀티비/노이즈 모드/파형 설정 (펄스/웨이브: 0 에서 3; 노이즈: 0 " "또는 1)" #: src/engine/sysDef.cpp:2124 src/gui/settings.cpp:4127 @@ -3611,15 +3621,15 @@ msgstr "Cxxx: 틱 레이트 설정 (hz)" #: src/engine/engine.cpp:102 msgid "D3xx: Volume portamento" -msgstr "" +msgstr "D3xx: 볼륨 포르타멘토" #: src/engine/engine.cpp:104 msgid "D4xx: Volume portamento (fast)" -msgstr "" +msgstr "D3xx: 볼륨 포르타멘토 (빠름)" #: src/engine/engine.cpp:106 msgid "DCxx: Delayed mute" -msgstr "" +msgstr "DCxx: 지연된 음소거" #: src/engine/engine.cpp:108 msgid "E0xx: Set arp speed" @@ -3687,11 +3697,11 @@ msgstr "F0xx: 틱 레이트 설정 (BPM)" #: src/engine/engine.cpp:140 msgid "F1xx: Single tick pitch up" -msgstr "" +msgstr "F1xx: 단일 틱 피치 업" #: src/engine/engine.cpp:142 msgid "F2xx: Single tick pitch down" -msgstr "" +msgstr "F2xx: 싱글 틱 피치 다운" #: src/engine/engine.cpp:144 msgid "F3xx: Fine volume slide up" @@ -3715,11 +3725,11 @@ msgstr "F7xx: 매크로 재시작 (매뉴얼을 확인하세요)" #: src/engine/engine.cpp:154 msgid "F8xx: Single tick volume up" -msgstr "" +msgstr "F8xx: 싱글 틱 볼륨 업" #: src/engine/engine.cpp:156 msgid "F9xx: Single tick volume down" -msgstr "" +msgstr "F9xx: 싱글 틱 볼륨 다운" #: src/engine/engine.cpp:158 msgid "FAxx: Fast volume slide (0y: down; x0: up)" @@ -3886,7 +3896,7 @@ msgstr "채널 %d에 빈 패턴이 없습니다!" #: src/engine/fileOpsSample.cpp:114 msgid "did not read entire sample bank file!" -msgstr "" +msgstr "샘플 은행 파일 전체를 읽지 않았습니다!" #: src/main.cpp:673 #, c-format @@ -4259,15 +4269,15 @@ msgstr "원시 샘플 저장..." #: src/gui/dataList.cpp:447 msgid "save all instruments..." -msgstr "" +msgstr "모든 악기 저장..." #: src/gui/dataList.cpp:450 msgid "save all wavetables..." -msgstr "" +msgstr "모든 웨이브테이블 저장..." #: src/gui/dataList.cpp:453 msgid "save all samples..." -msgstr "" +msgstr "모든 샘플 저장..." #: src/gui/dataList.cpp:457 src/gui/insEdit.cpp:5365 msgid "save as .dmp..." @@ -4275,7 +4285,7 @@ msgstr ".dmp로 저장..." #: src/gui/dataList.cpp:461 src/gui/dataList.cpp:769 src/gui/dataList.cpp:915 msgid "save all..." -msgstr "" +msgstr "모두 저장..." #: src/gui/dataList.cpp:474 src/gui/dataList.cpp:782 src/gui/dataList.cpp:927 msgid "Toggle folders/standard view" @@ -4404,11 +4414,11 @@ msgstr "없음" #: src/gui/exportOptions.cpp:90 msgid "Shown in pattern" -msgstr "" +msgstr "패턴에 보이는 채널" #: src/gui/exportOptions.cpp:96 msgid "Shown in oscilloscope" -msgstr "" +msgstr "오실로스코프에 보이는 채널" #: src/gui/exportOptions.cpp:122 src/gui/exportOptions.cpp:226 #: src/gui/exportOptions.cpp:237 src/gui/exportOptions.cpp:357 @@ -4433,7 +4443,7 @@ msgstr "내보내기" #: src/gui/exportOptions.cpp:142 msgid "select at least one channel" -msgstr "한 채널 이상 선택해 주세요" +msgstr "적어도 한 채널 이상 선택해 주세요" #: src/gui/exportOptions.cpp:149 msgid "settings:" @@ -4450,7 +4460,7 @@ msgstr "반복" #: src/gui/exportOptions.cpp:160 msgid "loop trail:" -msgstr "loop trail:" +msgstr "루프 로(路):" #: src/gui/exportOptions.cpp:162 msgid "auto-detect" @@ -4546,7 +4556,7 @@ msgstr "max size in other banks" #: src/gui/exportOptions.cpp:303 msgid "chip to export:" -msgstr "" +msgstr "내보내기 할 채널:" #: src/gui/exportOptions.cpp:327 msgid "Tick Rate (Hz)" @@ -4558,11 +4568,11 @@ msgstr "크기 최적화" #: src/gui/exportOptions.cpp:346 msgid "select a target from the menu at the top of this dialog." -msgstr "" +msgstr "이 대화 상자의 맨 위에 있는 메뉴에서 대상을 선택하세요." #: src/gui/exportOptions.cpp:349 msgid "this export method doesn't offer any options." -msgstr "" +msgstr "이 내보내기 방법은 어떤 옵션도 제공하지 않습니다." #: src/gui/exportOptions.cpp:370 msgid "this option exports the song to a text file.\n" @@ -4613,7 +4623,7 @@ msgstr "VGM" #: src/gui/exportOptions.cpp:443 msgid "ROM" -msgstr "" +msgstr "롬" #: src/gui/exportOptions.cpp:448 src/gui/settings.cpp:2976 #: src/gui/settings.cpp:3930 @@ -5041,15 +5051,15 @@ msgstr "선 크기" #: src/gui/chanOsc.cpp:211 msgid "Gradient" -msgstr "기울기" +msgstr "그라데이션" #: src/gui/chanOsc.cpp:218 msgid "error while creating gradient texture!" -msgstr "기울기 텍스처 생성 중에 에러가 발생했습니다!" +msgstr "그라데이션 텍스처 생성 중에 에러가 발생했습니다!" #: src/gui/chanOsc.cpp:236 msgid "error while updating gradient texture!" -msgstr "기울기 텍스처 업데이트 중에 에러가 발생했습니다!" +msgstr "그라데이션 텍스처 업데이트 중에 에러가 발생했습니다!" #: src/gui/chanOsc.cpp:292 src/gui/chanOsc.cpp:348 src/gui/settings.cpp:3832 msgid "Color" @@ -5385,7 +5395,7 @@ msgstr "기타" #: src/gui/editControls.cpp:487 src/gui/guiConst.cpp:531 msgid "New" -msgstr "새로운" +msgstr "새 파일" #: src/gui/editControls.cpp:491 src/gui/doAction.cpp:38 src/gui/gui.cpp:4371 msgid "Unsaved changes! Save changes before creating a new song?" @@ -5411,7 +5421,7 @@ msgstr "하위곡" #: src/gui/editControls.cpp:536 msgid "Comments" -msgstr "" +msgstr "코멘트" #: src/gui/editControls.cpp:545 msgid "Channels here..." @@ -5427,15 +5437,15 @@ msgstr "대체 뭐야..." #: src/gui/editControls.cpp:558 msgid "ChanOsc" -msgstr "채널 오실로스코프" +msgstr "오실로스코프" #: src/gui/editControls.cpp:562 msgid "RegView" -msgstr "레지스터 보기" +msgstr "레지스터" #: src/gui/editControls.cpp:566 msgid "Stats" -msgstr "스탯" +msgstr "상태" #: src/gui/editControls.cpp:570 src/gui/guiConst.cpp:611 src/gui/grooves.cpp:35 msgid "Grooves" @@ -6583,11 +6593,11 @@ msgstr "십진수##SNESFHex" #: src/gui/sysConf.cpp:2086 #, c-format msgid "sum: %d" -msgstr "sum: %d" +msgstr "합계: %d" #: src/gui/sysConf.cpp:2089 msgid "Disable Gaussian interpolation" -msgstr "" +msgstr "가우시안 보간 비활성화" #: src/gui/sysConf.cpp:2146 src/gui/insEdit.cpp:50 src/gui/insEdit.cpp:63 #: src/gui/insEdit.cpp:75 @@ -6704,7 +6714,7 @@ msgstr "V 47.0.0 (9-bit 볼륨)" #: src/gui/sysConf.cpp:2504 msgid "V 47.0.2 (Tri/Saw PW XOR)" -msgstr "" +msgstr "V 47.0.2 (삼각파/톱니파 PW XOR)" #: src/gui/sysConf.cpp:2529 src/gui/settings.cpp:731 msgid "nothing to configure" @@ -7463,7 +7473,7 @@ msgstr "" #: src/gui/settings.cpp:1264 msgid "Use OPL3 instead of OPL2 for S3M import" -msgstr "" +msgstr "S3M을 가져올 때 OPL2 대신 OPL3 사용" #: src/gui/settings.cpp:1273 msgid "Output" @@ -8786,7 +8796,7 @@ msgstr "클래식 매크로 편집기의 수직 슬라이더 사용" #: src/gui/settings.cpp:3626 msgid "Automatic macro step size/horizontal zoom" -msgstr "" +msgstr "자동 매크로 스텝 크기/수평 줌" #: src/gui/settings.cpp:3633 msgid "Wave Editor" @@ -8830,7 +8840,7 @@ msgstr "현대적##fml0" #: src/gui/settings.cpp:3670 msgid "Modern with more labels##fml7" -msgstr "" +msgstr "더 많은 라벨이 있는 현대적인 ##fml7" #: src/gui/settings.cpp:3674 msgid "Compact (2x2, classic)##fml1" @@ -8870,11 +8880,11 @@ msgstr "Release Rate 이후##susp1" #: src/gui/settings.cpp:3711 msgid "After Release Rate, after spacing##susp2" -msgstr "" +msgstr "Release Rate 이후, 간격 후##susp2" #: src/gui/settings.cpp:3715 msgid "After TL##susp3" -msgstr "" +msgstr "TL 이후##susp3" #: src/gui/settings.cpp:3723 msgid "Use separate colors for carriers/modulators in FM editor" @@ -8915,211 +8925,211 @@ msgstr "전체 창 채우기" #: src/gui/settings.cpp:3781 msgid "Waveform goes out of bounds" -msgstr "" +msgstr "파형이 범위를 벗어났습니다" #: src/gui/settings.cpp:3793 msgid "Windows" -msgstr "" +msgstr "창" #: src/gui/settings.cpp:3795 msgid "Rounded window corners" -msgstr "" +msgstr "창 모서리를 둥글게 처리" #: src/gui/settings.cpp:3801 msgid "Rounded buttons" -msgstr "" +msgstr "버튼을 둥글게 처리" #: src/gui/settings.cpp:3807 msgid "Rounded menu corners" -msgstr "" +msgstr "메뉴 모서리를 둥글게 처리" #: src/gui/settings.cpp:3813 msgid "Rounded tabs" -msgstr "" +msgstr "탭을 둥글게 처리" #: src/gui/settings.cpp:3819 msgid "Rounded scrollbars" -msgstr "" +msgstr "스크롤바를 둥글게 처리" #: src/gui/settings.cpp:3825 msgid "Borders around widgets" -msgstr "" +msgstr "위젯 주위에 테두리 생성" #: src/gui/settings.cpp:3834 msgid "Color scheme" -msgstr "" +msgstr "색 구성표" #: src/gui/settings.cpp:3844 msgid "Are you sure you want to reset the color scheme?" -msgstr "" +msgstr "정말로 이 색 구성표를 재설정하시겠습까?" #: src/gui/settings.cpp:3847 msgid "Guru mode" -msgstr "" +msgstr "전문가 모드" #: src/gui/settings.cpp:3854 src/gui/settings.cpp:3884 msgid "Frame shading" -msgstr "" +msgstr "프레임 셰이딩" #: src/gui/settings.cpp:3860 msgid "Color scheme type:" -msgstr "" +msgstr "색 구성표 종류:" #: src/gui/settings.cpp:3862 msgid "Dark##gcb0" -msgstr "" +msgstr "다크##gcb0" #: src/gui/settings.cpp:3867 msgid "Light##gcb1" -msgstr "" +msgstr "라이트##gcb1" #: src/gui/settings.cpp:3874 msgid "Accent colors:" -msgstr "" +msgstr "악센트 색:" #: src/gui/settings.cpp:3876 msgid "Primary" -msgstr "" +msgstr "1차" #: src/gui/settings.cpp:3877 msgid "Secondary" -msgstr "" +msgstr "2차" #: src/gui/settings.cpp:3891 msgid "Button" -msgstr "" +msgstr "버튼" #: src/gui/settings.cpp:3892 msgid "Button (hovered)" -msgstr "" +msgstr "버튼 (마우스를 올렸을 때)" #: src/gui/settings.cpp:3893 msgid "Button (active)" -msgstr "" +msgstr "버튼 (일반)" #: src/gui/settings.cpp:3894 msgid "Tab" -msgstr "" +msgstr "탭" #: src/gui/settings.cpp:3895 msgid "Tab (hovered)" -msgstr "" +msgstr "탭 (마우스를 올렸을 때)" #: src/gui/settings.cpp:3896 msgid "Tab (active)" -msgstr "" +msgstr "탭 (일반)" #: src/gui/settings.cpp:3897 msgid "Tab (unfocused)" -msgstr "" +msgstr "Tab (비활성 상태일때)" #: src/gui/settings.cpp:3898 msgid "Tab (unfocused and active)" -msgstr "" +msgstr "Tab (비활성 상태이고 일반)" #: src/gui/settings.cpp:3899 msgid "ImGui header" -msgstr "" +msgstr "ImGui 헤더" #: src/gui/settings.cpp:3900 msgid "ImGui header (hovered)" -msgstr "" +msgstr "ImGui 헤더 (마우스를 올렸을 때)" #: src/gui/settings.cpp:3901 msgid "ImGui header (active)" -msgstr "" +msgstr "ImGui 헤더 (일반)" #: src/gui/settings.cpp:3902 msgid "Resize grip" -msgstr "" +msgstr "리사이즈 그립" #: src/gui/settings.cpp:3903 msgid "Resize grip (hovered)" -msgstr "" +msgstr "리사이즈 그립 (마우스를 올렸을 때)" #: src/gui/settings.cpp:3904 msgid "Resize grip (active)" -msgstr "" +msgstr "리사이즈 그립 (일반)" #: src/gui/settings.cpp:3905 msgid "Widget background" -msgstr "" +msgstr "위젯 배경" #: src/gui/settings.cpp:3906 msgid "Widget background (hovered)" -msgstr "" +msgstr "위젯 배경 (마우스를 올렸을 때)" #: src/gui/settings.cpp:3907 msgid "Widget background (active)" -msgstr "" +msgstr "위젯 배경 (일반)" #: src/gui/settings.cpp:3908 msgid "Slider grab" -msgstr "" +msgstr "슬라이더 그랩" #: src/gui/settings.cpp:3909 msgid "Slider grab (active)" -msgstr "" +msgstr "슬라이더 그랩 (일반)" #: src/gui/settings.cpp:3910 msgid "Title background (active)" -msgstr "" +msgstr "타이틀 배경 (일반)" #: src/gui/settings.cpp:3911 msgid "Checkbox/radio button mark" -msgstr "" +msgstr "체크박스 라디오 버튼 마크" #: src/gui/settings.cpp:3912 msgid "Text selection" -msgstr "" +msgstr "텍스트 선택" #: src/gui/settings.cpp:3913 msgid "Line plot" -msgstr "" +msgstr "라인 도표" #: src/gui/settings.cpp:3914 msgid "Line plot (hovered)" -msgstr "" +msgstr "라인 도표 (마우스를 올렸을 때)" #: src/gui/settings.cpp:3915 msgid "Histogram plot" -msgstr "" +msgstr "히스토그램 도표" #: src/gui/settings.cpp:3916 msgid "Histogram plot (hovered)" -msgstr "" +msgstr "히스토그램 도표 (마우스를 올렸을 때)" #: src/gui/settings.cpp:3917 msgid "Table row (even)" -msgstr "" +msgstr "테이블 행 (짝수)" #: src/gui/settings.cpp:3918 msgid "Table row (odd)" -msgstr "" +msgstr "테이블 행 (홀수)" #: src/gui/settings.cpp:3923 msgid "Interface (other)" -msgstr "" +msgstr "인터페이스 (다른)" #: src/gui/settings.cpp:3925 msgid "Window background" -msgstr "" +msgstr "창 배경" #: src/gui/settings.cpp:3926 msgid "Sub-window background" -msgstr "" +msgstr "하위 창 배경" #: src/gui/settings.cpp:3927 msgid "Pop-up background" -msgstr "" +msgstr "팝업 배경" #: src/gui/settings.cpp:3928 msgid "Modal backdrop" -msgstr "" +msgstr "모달 배경" #: src/gui/settings.cpp:3929 msgid "Header" -msgstr "" +msgstr "헤더" #: src/gui/settings.cpp:3931 msgid "Text (disabled)" @@ -9490,23 +9500,23 @@ msgstr "" #: src/gui/insEdit.cpp:7515 src/gui/insEdit.cpp:7524 src/gui/insEdit.cpp:7534 #: src/gui/insEdit.cpp:7542 msgid "Pitch" -msgstr "" +msgstr "피치" #: src/gui/settings.cpp:4058 src/gui/sampleEdit.cpp:980 msgid "Filter" -msgstr "" +msgstr "필터" #: src/gui/settings.cpp:4060 msgid "Global Parameter" -msgstr "" +msgstr "전역 매개 변수" #: src/gui/settings.cpp:4062 msgid "Step Highlight" -msgstr "" +msgstr "스텝 강조 표시" #: src/gui/settings.cpp:4065 msgid "Instrument Types" -msgstr "" +msgstr "악기 종류" #: src/gui/settings.cpp:4066 msgid "FM (OPN)" From d13efbee6905cffda0592af56e240998bc9d17e2 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 21 Jan 2025 13:34:44 -0500 Subject: [PATCH 11/18] Revert "Added a demo song and made some changes to the translation file" This reverts commit 9d20fc48677fcfe3acdfa2f908d2ab4008600214. --- demos/misc/DonkeyKongCountry-AtariPokey.fur | Bin 1839 -> 0 bytes po/ko.po | 322 ++++++++++---------- 2 files changed, 156 insertions(+), 166 deletions(-) delete mode 100644 demos/misc/DonkeyKongCountry-AtariPokey.fur diff --git a/demos/misc/DonkeyKongCountry-AtariPokey.fur b/demos/misc/DonkeyKongCountry-AtariPokey.fur deleted file mode 100644 index 2a4fb72ce4fee2862466e680558055da8a2ef2ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1839 zcmV+~2hjLs?|X0F?94cWJL|{F2PTW@qcex=&0z4lh`W(1FPIMOd19(0`bRJmi6Kw#7fEnN;;49!cEYum`YryX%+6;UF zJeMT81RU)ndJQ-Y`~ZxuA^HXwx`F6z;8(!C5&Xag;1S?6;1A%5wM28kd%&i3L~j7^ zuhY|Yq*M_%D)D$RFRm53@5S)M6LFs{f(Ij!uthxKCww6sp$C^N#=;f~Dy#ogP-I7U z=>)xF?RICeW=1@9)0bNU_n}}t*o8>bgM+XTgyNGeJfX;h;t~o=C?e^v9Yv!gdw<;$ zfCETC0TI9jqJRg)fH;rmU-r(akLj`EoFv#XsleDJyt(jEYGHgXkvIsSFi780ZtK1 zCgL$K>PD254pvFXR!i$qPw5yj>b6EQn)1~)WrU7QO&$T&UZyg3J;@{!Dd{-8^ik+P zB~d2YdLM8va1U@da2IeV;Mj0_m93~E5gYH>c08AAauU0M2jm#@$!MDY>D5yr!@=8rCK{xHl_oYY2>l>Z}tn89PcNB`P; zFzg*`b$JI#+$XINti?#1Ptl|Mv!L0eXPY_lfw zEm;h!D(zvpQp&OA=leLgH-?wcYte9c37z2cTU!2CmM7c{!tpR+Pm9lsr`iQ1LlYD* zqHgL%OixhPbGdn$`qF)LMMeH%_q0~Ld!m-|i8f_#nDW5~!Fh+~vvp_?u?n|LvdOFhNakT!X9q2lJPyNvR0pV7@>&po(tKG+tbi*-7HB~h zL_-!F0D6{%Zp{$Xd8qeNM|E}U7ogrp9O?jvQY&_S8R~;TPRJZoIauVN&an!u;GviF z5Y&6LIvgls0%hZ!K-qX#ARdAmw&VyYFCAN9-0h34lbW+}>ufQ{?|J6I$X#dJIn>&|ceAe-%Gt0l z&76%-v2pBrlzWNH>AcD5;H&7b`bmB0R{iS*&S#PHN$4HsUr%r{3!IGqesuFahj?nE^b@I`}=K;R28z(-~fgu&{wp4TT<0juj*00 zN~pMsDNjX}tMD%vGxNXJ4$ieL$=L)pnr5xD_iUmg2izA2aGbM#p7nEy?*~E=wj}G! zFsL_)lbb+=WiHh|B;0 diff --git a/po/ko.po b/po/ko.po index 523cd8e5f..bd7b33218 100644 --- a/po/ko.po +++ b/po/ko.po @@ -20,12 +20,12 @@ msgstr "파일의 조기 종료" #: src/engine/fileOps/s3m.cpp:320 #, c-format msgid "Channel %d" -msgstr "채널 %d" +msgstr "" #: src/engine/fileOps/s3m.cpp:336 #, c-format msgid "FM %d" -msgstr "FM %d" +msgstr "" #: src/engine/sysDef.cpp:428 src/engine/sysDef.cpp:442 msgid "20xx: Set channel mode (bit 0: square; bit 1: noise; bit 2: envelope)" @@ -41,11 +41,11 @@ msgstr "22xy: 엔벨로프 모드 설정 (x: 모양, y: 해당 채널에 활성 #: src/engine/sysDef.cpp:431 src/engine/sysDef.cpp:445 msgid "23xx: Set envelope period low byte" -msgstr "23xx: 엔벨로프 주기 하위 바이트 설정" +msgstr "23xx: 엔벨로프 PERIOD LOW 바이트 설정" #: src/engine/sysDef.cpp:432 src/engine/sysDef.cpp:446 msgid "24xx: Set envelope period high byte" -msgstr "24xx: 엔벨로프 주기 상위 바이트 설정" +msgstr "24xx: 엔벨로프 PERIOD HIGH 바이트 설정" #: src/engine/sysDef.cpp:433 src/engine/sysDef.cpp:447 #: src/engine/sysDef.cpp:1603 @@ -64,15 +64,15 @@ msgstr "29xy: 자동 엔벨로프 설정 (x: 분자값; y: 분모값)" #: src/engine/sysDef.cpp:436 msgid "2Cxx: Set timer period offset (bit 7: sign)" -msgstr "2Cxx: 타이머 주기 오프셋 설정 (비트 7: 부호)" +msgstr "" #: src/engine/sysDef.cpp:437 src/engine/sysDef.cpp:450 msgid "2Exx: Write to I/O port A" -msgstr "2Exx: I/O포트 A에 쓰기" +msgstr "2Exx: I/O포트 A에 기록" #: src/engine/sysDef.cpp:438 src/engine/sysDef.cpp:451 msgid "2Fxx: Write to I/O port B" -msgstr "2Fxx: I/O포트 B에 쓰기" +msgstr "2Fxx: I/O포트 B에 기록" #: src/engine/sysDef.cpp:443 msgid "21xx: Set noise frequency (0 to FF)" @@ -249,7 +249,7 @@ msgstr "5Fxx: 오퍼레이터 4에 대해 DECAY 2 값 설정 (0 에서 1F)" #: src/engine/sysDef.cpp:507 src/engine/sysDef.cpp:518 msgid "60xx: Set operator mask (bits 0-3)" -msgstr "60xx: 오퍼레이터 마스크 설정 (비트 0 에서 3)" +msgstr "" #: src/engine/sysDef.cpp:512 msgid "10xx: Set noise frequency (xx: value; 0 disables noise)" @@ -262,7 +262,7 @@ msgstr "17xx: LFO 속도 설정" #: src/engine/sysDef.cpp:514 msgid "18xx: Set LFO waveform (0 saw, 1 square, 2 triangle, 3 noise)" msgstr "" -"18xx: LFO 파형 설정 (0 = 톱니파, 1 = 사각파, 2 = 삼각파, 3 = 노이즈)" +"18xx: LFO 웨이브테이블 설정 (0 = 톱니파, 1 = 사각파, 2 = 삼각파, 3 = 노이즈)" #: src/engine/sysDef.cpp:515 msgid "1Exx: Set AM depth (0 to 7F)" @@ -287,7 +287,7 @@ msgstr "24xx LFO 2 속도 설정" #: src/engine/sysDef.cpp:524 msgid "25xx: Set LFO 2 waveform (0 saw, 1 square, 2 triangle, 3 noise)" msgstr "" -"25xx: LFO 2 파형 설정 (0 = 톱니파, 1 = 사각파, 2 = 삼각파, 3 = 노이" +"25xx: LFO 2 웨이브테이블 설정 (0 = 톱니파, 1 = 사각파, 2 = 삼각파, 3 = 노이" "즈)" #: src/engine/sysDef.cpp:525 @@ -311,7 +311,7 @@ msgid "" "2Axy: Set waveform (x: operator from 1 to 4 (0 for all ops); y: waveform " "from 0 to 7)" msgstr "" -"2Axy: 파형 설정 (x: 오퍼레이터 1 에서 4 (0 = 모두 선택); y: 웨이브테이" +"2Axy: 웨이브테이블 설정 (x: 오퍼레이터 1 에서 4 (0 = 모두 선택); y: 웨이브테이" "블, 0 에서 7)" #: src/engine/sysDef.cpp:529 @@ -486,7 +486,7 @@ msgid "" "2Axy: Set waveform (x: operator from 1 to 4 (0 for all ops); y: waveform " "from 0 to 3 in OPL2 and 0 to 7 in OPL3)" msgstr "" -"2Axy: 파형 설정 (x: 오퍼레이터 1 에서 4 (0 = 모두 선택); y; 웨이브테" +"2Axy: 웨이브테이블 설정 (x: 오퍼레이터 1 에서 4 (0 = 모두 선택); y; 웨이브테" "이블 (0 에서 3은 OPL2, 0에서 7은 OPL3)" #: src/engine/sysDef.cpp:594 src/engine/sysDef.cpp:662 @@ -515,14 +515,14 @@ msgid "" "5Bxy: Set whether key will scale envelope (x: operator from 1 to 4 (0 for " "all ops); y: enabled)" msgstr "" -"5Bxy: 키가 엔벨로프를 확장할지 여부를 설정 (x: 오퍼레이터 1 에서 4 (0 = 모두 선택); " +"5Bxy: 키가 엔벨로프를 확장할지 여부 (x: 오퍼레이터 1 에서 4 (0 = 모두 선택); " "y: 활성화)" #: src/engine/sysDef.cpp:606 src/engine/sysDef.cpp:683 msgid "" "10xx: Set waveform (bit 0: triangle; bit 1: saw; bit 2: pulse; bit 3: noise)" msgstr "" -"10xx: 파형 설정 (비트 0: 삼각파; 비트 1: 톱니파; 비트 2: 펄스; 비트 " +"10xx: 웨이브테이블 설정 (비트 0: 삼각파; 비트 1: 톱니파; 비트 2: 펄스; 비트 " "3: 노이즈)" #: src/engine/sysDef.cpp:607 @@ -590,7 +590,7 @@ msgstr "4xxx: 컷오프 설정 (0 에서 7FF)" #: src/engine/sysDef.cpp:1897 src/engine/sysDef.cpp:2067 #: src/engine/sysDef.cpp:2081 msgid "10xx: Set waveform" -msgstr "10xx: 파형 설정" +msgstr "10xx: 웨이브테이블 설정" #: src/engine/sysDef.cpp:629 msgid "20xx: Set PCM frequency" @@ -1131,7 +1131,7 @@ msgstr "15xx: 엔벨로프 모드 설정 (0: 엔벨로프, 1: 길이, 2: 반복, #: src/engine/sysDef.cpp:787 src/engine/sysDef.cpp:2115 msgid "16xx: Set length counter (refer to manual for a list of values)" -msgstr "16xx: 길이 카운터 설정 (매뉴얼에서 값 리스트 확인 가능)" +msgstr "16xx: 길이 카운터 설정 (보류" #: src/engine/sysDef.cpp:788 src/engine/sysDef.cpp:2116 msgid "17xx: Set frame counter mode (0: 4-step, 1: 5-step)" @@ -1143,7 +1143,7 @@ msgstr "18xx: PCM/DPCM 모드 선택 (0: PCM; 1: DPCM)" #: src/engine/sysDef.cpp:790 src/engine/sysDef.cpp:2118 msgid "19xx: Set triangle linear counter (0 to 7F; 80 and higher halt)" -msgstr "19xx: 삼각파 선형 카운터 설정 (0 에서 7F; 80 이상 정지)" +msgstr "19xx: 삼각파 선형 카운터 설정 (0 에서 7F; 80 이상 보류)" #: src/engine/sysDef.cpp:791 src/engine/sysDef.cpp:2119 msgid "20xx: Set DPCM frequency (0 to F)" @@ -1195,7 +1195,7 @@ msgstr "네오 지오 CD" msgid "" "like Neo Geo, but lacking the ADPCM-B channel since they couldn't connect " "the pins." -msgstr "네오 지오와 같지만 SNK가 핀을 연결하지 않아서 ADPCM-B 채널이 없습니다." +msgstr "네오 지오와 같지만 ADPCM-B 채널이 보류" #: src/engine/sysDef.cpp:840 src/engine/sysDef.cpp:852 #: src/engine/sysDef.cpp:894 src/engine/sysDef.cpp:906 @@ -1350,9 +1350,7 @@ msgid "" "the pins.\n" "this one is in Extended Channel mode, which turns the second FM channel into " "four operators with independent notes/frequencies." -msgstr "네오 지오와 같지만 SNK가 핀을 연결하지 않아서 ADPCM-B 채널이 없습니다.\n" -"이것은 두 번째 FM 채널을 독립적인 음/주파수를 가진 4개의 오퍼레이터로 바꾸는 " -"확장 채널 모드입니다. +msgstr "보류" #: src/engine/sysDef.cpp:852 src/engine/sysDef.cpp:1459 #: src/engine/sysDef.cpp:1472 @@ -1396,7 +1394,7 @@ msgstr "아미가" msgid "" "a computer from the '80s with full sampling capabilities, giving it a sound " "ahead of its time." -msgstr "80년대의 컴퓨터로, 완벽한 샘플링 기능을 갖춰 시대를 앞서가는 사운드를 들려줍니다." +msgstr "전체 샘플링이 가능한 80년대 보류" #: src/engine/sysDef.cpp:884 msgid "10xx: Toggle filter (0 disables; 1 enables)" @@ -1412,7 +1410,7 @@ msgstr "12xx: 다음 채널로 PERIOD 모듈레이션 토글" #: src/engine/sysDef.cpp:887 msgid "13xx: Set waveform" -msgstr "13xx: 파형 설정" +msgstr "13xx: 웨이브테이블 설정" #: src/engine/sysDef.cpp:892 msgid "Yamaha YM2151 (OPM)" @@ -1494,7 +1492,7 @@ msgid "" "it's a challenge to make music on this chip which barely has musical " "capabilities..." msgstr "" -"이것으로 음악을 만드는것은 하나의 챌린지입니다. 음악적 재능이 없는 칩이기 " +"이것으로 음악을 만드는것은 하나의 챌린지입니다. 음악적 가능성이 없는 칩이기 " "때문이죠." #: src/engine/sysDef.cpp:928 @@ -1506,7 +1504,7 @@ msgid "" "supposedly an upgrade from the AY-3-8910, this was present on the Creative " "Music System (Game Blaster) and SAM Coupé." msgstr "" -"AY-3-8910의 업그레이드 버전 입니다. 이것은 크리에이티브 뮤직 시스템(게임 블래" +"보류 AY-3-8910의 업그레이드 입니다. 이것은 크리에이티브 뮤직 시스템(게임 블래" "스터)과 SAM 코페에 제공되었습니다." #: src/engine/sysDef.cpp:930 @@ -1531,18 +1529,18 @@ msgstr "11xx: 노이즈 주파수 설정" #: src/engine/sysDef.cpp:939 msgid "12xx: Setup envelope (refer to docs for more information)" -msgstr "12xx: 엔벨로프 설정 (매뉴얼에서 값 리스트 확인 가능)" +msgstr "12xx: 엔벨로프 설정 (보류)" #: src/engine/sysDef.cpp:944 msgid "Microchip AY8930" -msgstr "AY8930" +msgstr "마이크로칩 AY8930" #: src/engine/sysDef.cpp:945 msgid "" "an improved version of the AY-3-8910 with a bigger frequency range, duty " "cycles, configurable noise and per-channel envelopes!" msgstr "" -"AY-3-8910의 개선 버전으로 넓은 주파수 범위, 듀티비, 구성 가능한 노이즈와 개" +"AY-3-8910의 개선 버전으로, 넓은 주파수 범위, 듀티비, 구성 가능한 노이즈와 개" "별 엔벨로프가 있습니다!" #: src/engine/sysDef.cpp:956 @@ -1553,8 +1551,7 @@ msgstr "코모도어 VIC-20" msgid "" "Commodore's successor to the PET.\n" "its square wave channels are more than just square..." -msgstr "PET의 후속 모델인 Commodore.\n" -"그 사각파 채널은 단순한 사각파 이상입니다..." +msgstr "보류" #: src/engine/sysDef.cpp:958 src/gui/settings.cpp:139 src/gui/settings.cpp:209 #: src/gui/settings.cpp:4009 @@ -1578,7 +1575,7 @@ msgstr "코모도어 PET" msgid "" "one channel of 1-bit wavetable which is better (and worse) than the PC " "Speaker." -msgstr "1비트 웨이브테이블 칩으로 PC 비퍼보다 좋은 (근데 나쁜) 칩입니다." +msgstr "1비트 웨이브테이블 칩으로 PC 비퍼보다 좋은 (그리고 나쁜) 칩입니다." #: src/engine/sysDef.cpp:969 src/engine/sysDef.cpp:1266 #: src/engine/sysDef.cpp:2104 src/gui/editControls.cpp:433 @@ -1592,7 +1589,7 @@ msgstr "SNES" #: src/engine/sysDef.cpp:979 msgid "FM? nah... samples! Nintendo's answer to Sega." -msgstr "FM? 뭐래... 샘플이지! 닌텐도가 세가에게 대답합니다..." +msgstr "FM? 뭐래~ 샘플이지! 닌텐도가 세가에게 대답합니다..." #: src/engine/sysDef.cpp:986 msgid "18xx: Enable echo buffer" @@ -1624,35 +1621,35 @@ msgstr "1Fxx: 우측 DRY 출력 볼륨 설정" #: src/engine/sysDef.cpp:993 msgid "30xx: Set echo filter coefficient 0" -msgstr "30xx: 에코 필터 계수 0 설정" +msgstr "30xx: 보류" #: src/engine/sysDef.cpp:994 msgid "31xx: Set echo filter coefficient 1" -msgstr "31xx: 에코 필터 계수 1 설정" +msgstr "31xx: 보류" #: src/engine/sysDef.cpp:995 msgid "32xx: Set echo filter coefficient 2" -msgstr "32xx: 에코 필터 계수 2 설정" +msgstr "32xx: 보류" #: src/engine/sysDef.cpp:996 msgid "33xx: Set echo filter coefficient 3" -msgstr "33xx: 에코 필터 계수 3 설정" +msgstr "33xx: 보류" #: src/engine/sysDef.cpp:997 msgid "34xx: Set echo filter coefficient 4" -msgstr "34xx: 에코 필터 계수 4 설정" +msgstr "34xx: 보류" #: src/engine/sysDef.cpp:998 msgid "35xx: Set echo filter coefficient 5" -msgstr "35xx: 에코 필터 계수 5 설정" +msgstr "35xx: 보류" #: src/engine/sysDef.cpp:999 msgid "36xx: Set echo filter coefficient 6" -msgstr "36xx: 에코 필터 계수 6 설정" +msgstr "36xx: 보류" #: src/engine/sysDef.cpp:1000 msgid "37xx: Set echo filter coefficient 7" -msgstr "37xx: 에코 필터 계수 7 설정 +msgstr "37xx: 보류" #: src/engine/sysDef.cpp:1005 msgid "12xx: Toggle echo on this channel" @@ -1704,7 +1701,7 @@ msgstr "코나미 VRC6" #: src/engine/sysDef.cpp:1020 msgid "an expansion chip for the Famicom, featuring a quirky sawtooth channel." -msgstr "패미컴용 확장 칩으로 독특한 톱니 모양의 채널이 특징입니다." +msgstr "패미컴용 확장 칩으로, 톱니 보류" #: src/engine/sysDef.cpp:1021 msgid "VRC6 1" @@ -1730,7 +1727,7 @@ msgstr "야마하 YM2413 (OPLL)" msgid "" "cost-reduced version of the OPL with 16 patches and only one of them is user-" "configurable." -msgstr "원가 절감된 버전의 OPL로, 16채널과 사용자 지정 악기는 하나만 가능합니다." +msgstr "원가절감된 버전의 OPL로 16채널과 사용자 지정 악기는 하나만 가능합니다." #: src/engine/sysDef.cpp:1035 src/engine/sysDef.cpp:1177 #: src/engine/sysDef.cpp:1189 src/engine/sysDef.cpp:1685 @@ -1744,7 +1741,7 @@ msgstr "패미컴 디스크 시스템 (칩)" #: src/engine/sysDef.cpp:1046 msgid "a disk drive for the Famicom which also contains one wavetable channel." -msgstr "패미컴용 디스크 드라이브로 하나의 웨이브테이블 채널을 가지고 있습니다." +msgstr "패미컴용 디스크 드라이브로 하나의 웨이브테이블 채널을 담고 있습니다." #: src/engine/sysDef.cpp:1047 src/gui/settings.cpp:4083 msgid "FDS" @@ -1768,11 +1765,11 @@ msgstr "14xx: 모듈레이터 위치 설정" #: src/engine/sysDef.cpp:1058 msgid "15xx: Set modulator table to waveform" -msgstr "15xx: 파형에 모듈레이터 테이블 설정" +msgstr "15xx: 웨이브테이블에 모듈레이터 테이블 설정" #: src/engine/sysDef.cpp:1059 msgid "16xy: Automatic modulation speed (x: numerator; y: denominator)" -msgstr "16xy: 자동 모듈레이션 속도 (x: 분자값; y: 분모값)" +msgstr "" #: src/engine/sysDef.cpp:1064 msgid "MMC5" @@ -1833,7 +1830,7 @@ msgid "" "stereo...\n" "...but it has a built-in AY-3-8910! (actually an YM2149)" msgstr "" -"OPM의 원가 절감된 버전으로 다른 레지스터 레이아웃을 가지고 있고 스테레오가 없" +"OPM의 원가절감된 버전으로 다른 레지스터 레이아웃을 가지고 있고 스테레오가 없" "습니다...\n" "...그러나 이것은 AY-3-8910을 내장하고 있습니다! (사실 YM2149이지만요.)" @@ -1849,11 +1846,10 @@ msgid "" "this one is in Extended Channel mode, which turns the third FM channel into " "four operators with independent notes/frequencies" msgstr "" -"OPM의 원가 절감된 버전으로 다른 레지스터 레이아웃을 가지고 있고 스테레오가 없" +"OPM의 원가절감된 버전으로 다른 레지스터 레이아웃을 가지고 있고 스테레오가 없" "습니다...\n" "...그러나 이것은 AY-3-8910을 내장하고 있습니다! (사실 YM2149이지만요.)\n" -"이것은 세 번째 FM 채널을 독립적인 음/주파수를 가진 4개의 오퍼레이터로 변환하" -"는 확장 채널 모드입니다." +"이것은 확장 채널 모드로 세번째 채널을 보류" #: src/engine/sysDef.cpp:1113 src/engine/sysDef.cpp:1126 #: src/engine/sysDef.cpp:1151 src/engine/sysDef.cpp:1164 @@ -1898,7 +1894,7 @@ msgid "" "...but it has a built-in AY-3-8910! (actually an YM2149)\n" "CSM blah blah" msgstr "" -"OPM의 원가 절감된 버전으로 다른 레지스터 레이아웃을 가지고 있고 스테레오가 없" +"OPM의 원가절감된 버전으로 다른 레지스터 레이아웃을 가지고 있고 스테레오가 없" "습니다...\n" "...그러나 이것은 AY-3-8910을 내장하고 있습니다! (사실 YM2149이지만요.)\n" "CSM 뭐시기" @@ -1917,7 +1913,7 @@ msgstr "야마하 YM2608 (OPNA)" msgid "" "OPN but twice the FM channels, stereo makes a come-back and has rhythm and " "ADPCM channels." -msgstr "OPN과 같지만 FM 채널이 두 배이고, 스테레오가 다시 등장하며 리듬과 ADPCM 채널이 있습니다." +msgstr "보류" #: src/engine/sysDef.cpp:1139 src/engine/sysDef.cpp:1151 #: src/engine/sysDef.cpp:1164 src/engine/sysDef.cpp:1485 @@ -1956,7 +1952,7 @@ msgstr "하이햇" #: src/engine/sysDef.cpp:1485 src/engine/sysDef.cpp:1635 #: src/engine/sysDef.cpp:1697 src/gui/insEdit.cpp:211 msgid "Tom" -msgstr "탐" +msgstr "톰" #: src/engine/sysDef.cpp:1139 src/engine/sysDef.cpp:1151 #: src/engine/sysDef.cpp:1164 @@ -1979,9 +1975,7 @@ msgid "" "ADPCM channels.\n" "this one is in Extended Channel mode, which turns the third FM channel into " "four operators with independent notes/frequencies" -msgstr "OPN과 같지만 FM 채널이 두 배이고, 스테레오가 다시 등장하며 리듬과 ADPCM 채널이 있습니다.\n" -"이것은 세 번째 FM 채널을 독립적인 음/주파수를 가진 4개의 오퍼레이터로 변환하" -"는 확장 채널 모드입니다." +msgstr "보류" #: src/engine/sysDef.cpp:1162 msgid "Yamaha YM2608 (OPNA) CSM" @@ -1992,8 +1986,7 @@ msgid "" "OPN but twice the FM channels, stereo makes a come-back and has rhythm and " "ADPCM channels.\n" "CSM blah blah" -msgstr "OPN과 같지만 FM 채널이 두 배이고, 스테레오가 다시 등장하며 리듬과 ADPCM 채널이 있습니다." -"\nCSM 머시기" +msgstr "보류" #: src/engine/sysDef.cpp:1175 msgid "Yamaha YM3526 (OPL)" @@ -2207,7 +2200,7 @@ msgstr "" #: src/engine/sysDef.cpp:1247 src/engine/sysDef.cpp:1718 msgid "10xx: Set waveform (0 to 7)" -msgstr "10xx: 파형 설정 (0 에서 7)" +msgstr "10xx: 웨이브테이블 설정 (0 에서 7)" #: src/engine/sysDef.cpp:1248 msgid "11xx: Set AUDCTL" @@ -2225,7 +2218,7 @@ msgstr "리코 RF5C68" msgid "" "this is like SNES' sound chip but without interpolation and the rest of nice " "bits." -msgstr "이것은 SNES의 사운드 칩과 같지만 보간이 없고 나머지는 괜찮은 비트입니다." +msgstr "SNES의 사운드칩과 비슷하지만 인터폴레이션 보류" #: src/engine/sysDef.cpp:1264 src/gui/settings.cpp:4090 msgid "WonderSwan" @@ -2336,7 +2329,7 @@ msgstr "" #: src/engine/sysDef.cpp:1329 msgid "15xx: Set modulation waveform (x: wavetable; channel 5 only)" -msgstr "15xx: 모듈레이션 파형 설정 (x: 웨이브테이블; 채널 5만)" +msgstr "15xx: 모듈레이션 웨이브테이블 설정 (x: 웨이브테이블; 채널 5만)" #: src/engine/sysDef.cpp:1334 msgid "Konami VRC7" @@ -2347,7 +2340,7 @@ msgid "" "like OPLL, but even more cost reductions applied. three FM channels went " "missing, and drums mode did as well..." msgstr "" -"OPLL과 비슷하지만 더 원가 절감되었습니다. FM 채널 세개가 없어졌고, 드럼 모드" +"OPLL과 비슷하지만 더 원가절감되었습니다. FM 채널 세개가 없어졌고, 드럼 모드" "도..." #: src/engine/sysDef.cpp:1346 @@ -2404,8 +2397,7 @@ msgid "" msgstr "" "이것은 세가 메가드라이브에 있었기 때문에 잘 알려졌습니다. (또한 FM Towns 컴" "퓨터에도 있었습니다.)\n" -"이것은 세 번째 FM 채널을 독립적인 음/주파수를 가진 4개의 오퍼레이터로 변환하" -"는 확장 채널 모드입니다." +"보류" #: src/engine/sysDef.cpp:1385 msgid "Yamaha YM2612 (OPN2) CSM" @@ -2493,8 +2485,7 @@ msgid "" "four operators with independent notes/frequencies." msgstr "" "이 칩은 SNK의 Neo Geo 아케이드 보드와 비디오 게임기에 사용되었습니다.\n" -"이것은 OPNA와 같지만 리듬 채널은 ADPCM 채널이고 두개의 FM 채널은 사라졌습니" -"다." +"OPNA 같은데 리듬 채널이 ADPCM 채널이고 FM 채널이 두 개 없어졌습니다.\n" "이것은 두 번째 FM 채널을 독립적인 음/주파수를 가진 4개의 오퍼레이터로 바꾸는 " "확장 채널 모드입니다." @@ -2510,8 +2501,7 @@ msgid "" "this one includes CSM mode control for special effects on Channel 2." msgstr "" "이 칩은 SNK의 Neo Geo 아케이드 보드와 비디오 게임기에 사용되었습니다.\n" -"이것은 OPNA와 같지만 리듬 채널은 ADPCM 채널이고 두개의 FM 채널은 사라졌습니" -"다." +"OPNA 같은데 리듬 채널이 ADPCM 채널이고 FM 채널이 두 개 없어졌습니다.\n" "이것은 채널 2의 특수 이펙트를 위한 CSM 모드 제어를 포함합니다." #: src/engine/sysDef.cpp:1483 @@ -2670,7 +2660,7 @@ msgstr "이 칩은 유튜버 The 8-Bit Guy가 디자인한 컴퓨터에 사용 #: src/engine/sysDef.cpp:1542 msgid "20xx: Set waveform" -msgstr "20xx: 파형 설정" +msgstr "20xx: 웨이브테이블 설정" #: src/engine/sysDef.cpp:1543 msgid "22xx: Set duty cycle (0 to 3F)" @@ -2729,7 +2719,7 @@ msgid "" "sound." msgstr "" "웨이브테이블 채널이 너무 많은 세타/알루머 제조 아케이드 보드에 사용되는 사운" -"드 칩으로 샘플링된 사운드도 가능합니다." +"드 칩으로, 샘플링된 사운드도 가능합니다." #: src/engine/sysDef.cpp:1595 msgid "11xx: Set envelope shape" @@ -3119,7 +3109,7 @@ msgid "" "a square wave additive synthesis chip made by OKI. used in some arcade " "machines and instruments." msgstr "" -"오키(OKI)가 만든 사각파 신디사이져 칩으로 일부 아케이드 기계와 악기에 사용됩" +"오키(OKI)가 만든 사각파 신디사이져 칩으로, 일부 아케이드 기계와 악기에 사용됩" "니다." #: src/engine/sysDef.cpp:1843 @@ -3183,7 +3173,7 @@ msgid "" "an SN76489 derivative used in Neo Geo Pocket, has independent stereo volume " "and noise channel frequency." msgstr "" -"네오 지오 포켓에 사용되는 SN76489 파생형으로 독립적인 스테레오 볼륨과 노이" +"네오 지오 포켓에 사용되는 SN76489 파생형으로, 독립적인 스테레오 볼륨과 노이" "즈 채널 주파수를 가지고 있습니다." #: src/engine/sysDef.cpp:1884 @@ -3388,7 +3378,7 @@ msgstr "DAC 우" #: src/engine/sysDef.cpp:2047 msgid "10xx: Set waveform (0 to 4; 0 to 3 on noise)" -msgstr "10xx: 파형 설정 (0 에서 4; 노이즈에서 0 에서 3)" +msgstr "10xx: 웨이브테이블 설정 (0 에서 4; 노이즈에서 0 에서 3)" #: src/engine/sysDef.cpp:2048 msgid "11xx: Set noise frequency source (0: fixed; 1-3: channels 1 to 3)" @@ -3476,7 +3466,7 @@ msgstr "" msgid "" "12xx: Set duty cycle/noise mode/waveform (pulse/wave: 0 to 3; noise: 0 or 1)" msgstr "" -"12xx: 듀티비/노이즈 모드/파형 설정 (펄스/웨이브: 0 에서 3; 노이즈: 0 " +"12xx: 듀티비/노이즈 모드/웨이브테이블 설정 (펄스/웨이브: 0 에서 3; 노이즈: 0 " "또는 1)" #: src/engine/sysDef.cpp:2124 src/gui/settings.cpp:4127 @@ -3621,15 +3611,15 @@ msgstr "Cxxx: 틱 레이트 설정 (hz)" #: src/engine/engine.cpp:102 msgid "D3xx: Volume portamento" -msgstr "D3xx: 볼륨 포르타멘토" +msgstr "" #: src/engine/engine.cpp:104 msgid "D4xx: Volume portamento (fast)" -msgstr "D3xx: 볼륨 포르타멘토 (빠름)" +msgstr "" #: src/engine/engine.cpp:106 msgid "DCxx: Delayed mute" -msgstr "DCxx: 지연된 음소거" +msgstr "" #: src/engine/engine.cpp:108 msgid "E0xx: Set arp speed" @@ -3697,11 +3687,11 @@ msgstr "F0xx: 틱 레이트 설정 (BPM)" #: src/engine/engine.cpp:140 msgid "F1xx: Single tick pitch up" -msgstr "F1xx: 단일 틱 피치 업" +msgstr "" #: src/engine/engine.cpp:142 msgid "F2xx: Single tick pitch down" -msgstr "F2xx: 싱글 틱 피치 다운" +msgstr "" #: src/engine/engine.cpp:144 msgid "F3xx: Fine volume slide up" @@ -3725,11 +3715,11 @@ msgstr "F7xx: 매크로 재시작 (매뉴얼을 확인하세요)" #: src/engine/engine.cpp:154 msgid "F8xx: Single tick volume up" -msgstr "F8xx: 싱글 틱 볼륨 업" +msgstr "" #: src/engine/engine.cpp:156 msgid "F9xx: Single tick volume down" -msgstr "F9xx: 싱글 틱 볼륨 다운" +msgstr "" #: src/engine/engine.cpp:158 msgid "FAxx: Fast volume slide (0y: down; x0: up)" @@ -3896,7 +3886,7 @@ msgstr "채널 %d에 빈 패턴이 없습니다!" #: src/engine/fileOpsSample.cpp:114 msgid "did not read entire sample bank file!" -msgstr "샘플 은행 파일 전체를 읽지 않았습니다!" +msgstr "" #: src/main.cpp:673 #, c-format @@ -4269,15 +4259,15 @@ msgstr "원시 샘플 저장..." #: src/gui/dataList.cpp:447 msgid "save all instruments..." -msgstr "모든 악기 저장..." +msgstr "" #: src/gui/dataList.cpp:450 msgid "save all wavetables..." -msgstr "모든 웨이브테이블 저장..." +msgstr "" #: src/gui/dataList.cpp:453 msgid "save all samples..." -msgstr "모든 샘플 저장..." +msgstr "" #: src/gui/dataList.cpp:457 src/gui/insEdit.cpp:5365 msgid "save as .dmp..." @@ -4285,7 +4275,7 @@ msgstr ".dmp로 저장..." #: src/gui/dataList.cpp:461 src/gui/dataList.cpp:769 src/gui/dataList.cpp:915 msgid "save all..." -msgstr "모두 저장..." +msgstr "" #: src/gui/dataList.cpp:474 src/gui/dataList.cpp:782 src/gui/dataList.cpp:927 msgid "Toggle folders/standard view" @@ -4414,11 +4404,11 @@ msgstr "없음" #: src/gui/exportOptions.cpp:90 msgid "Shown in pattern" -msgstr "패턴에 보이는 채널" +msgstr "" #: src/gui/exportOptions.cpp:96 msgid "Shown in oscilloscope" -msgstr "오실로스코프에 보이는 채널" +msgstr "" #: src/gui/exportOptions.cpp:122 src/gui/exportOptions.cpp:226 #: src/gui/exportOptions.cpp:237 src/gui/exportOptions.cpp:357 @@ -4443,7 +4433,7 @@ msgstr "내보내기" #: src/gui/exportOptions.cpp:142 msgid "select at least one channel" -msgstr "적어도 한 채널 이상 선택해 주세요" +msgstr "한 채널 이상 선택해 주세요" #: src/gui/exportOptions.cpp:149 msgid "settings:" @@ -4460,7 +4450,7 @@ msgstr "반복" #: src/gui/exportOptions.cpp:160 msgid "loop trail:" -msgstr "루프 로(路):" +msgstr "loop trail:" #: src/gui/exportOptions.cpp:162 msgid "auto-detect" @@ -4556,7 +4546,7 @@ msgstr "max size in other banks" #: src/gui/exportOptions.cpp:303 msgid "chip to export:" -msgstr "내보내기 할 채널:" +msgstr "" #: src/gui/exportOptions.cpp:327 msgid "Tick Rate (Hz)" @@ -4568,11 +4558,11 @@ msgstr "크기 최적화" #: src/gui/exportOptions.cpp:346 msgid "select a target from the menu at the top of this dialog." -msgstr "이 대화 상자의 맨 위에 있는 메뉴에서 대상을 선택하세요." +msgstr "" #: src/gui/exportOptions.cpp:349 msgid "this export method doesn't offer any options." -msgstr "이 내보내기 방법은 어떤 옵션도 제공하지 않습니다." +msgstr "" #: src/gui/exportOptions.cpp:370 msgid "this option exports the song to a text file.\n" @@ -4623,7 +4613,7 @@ msgstr "VGM" #: src/gui/exportOptions.cpp:443 msgid "ROM" -msgstr "롬" +msgstr "" #: src/gui/exportOptions.cpp:448 src/gui/settings.cpp:2976 #: src/gui/settings.cpp:3930 @@ -5051,15 +5041,15 @@ msgstr "선 크기" #: src/gui/chanOsc.cpp:211 msgid "Gradient" -msgstr "그라데이션" +msgstr "기울기" #: src/gui/chanOsc.cpp:218 msgid "error while creating gradient texture!" -msgstr "그라데이션 텍스처 생성 중에 에러가 발생했습니다!" +msgstr "기울기 텍스처 생성 중에 에러가 발생했습니다!" #: src/gui/chanOsc.cpp:236 msgid "error while updating gradient texture!" -msgstr "그라데이션 텍스처 업데이트 중에 에러가 발생했습니다!" +msgstr "기울기 텍스처 업데이트 중에 에러가 발생했습니다!" #: src/gui/chanOsc.cpp:292 src/gui/chanOsc.cpp:348 src/gui/settings.cpp:3832 msgid "Color" @@ -5395,7 +5385,7 @@ msgstr "기타" #: src/gui/editControls.cpp:487 src/gui/guiConst.cpp:531 msgid "New" -msgstr "새 파일" +msgstr "새로운" #: src/gui/editControls.cpp:491 src/gui/doAction.cpp:38 src/gui/gui.cpp:4371 msgid "Unsaved changes! Save changes before creating a new song?" @@ -5421,7 +5411,7 @@ msgstr "하위곡" #: src/gui/editControls.cpp:536 msgid "Comments" -msgstr "코멘트" +msgstr "" #: src/gui/editControls.cpp:545 msgid "Channels here..." @@ -5437,15 +5427,15 @@ msgstr "대체 뭐야..." #: src/gui/editControls.cpp:558 msgid "ChanOsc" -msgstr "오실로스코프" +msgstr "채널 오실로스코프" #: src/gui/editControls.cpp:562 msgid "RegView" -msgstr "레지스터" +msgstr "레지스터 보기" #: src/gui/editControls.cpp:566 msgid "Stats" -msgstr "상태" +msgstr "스탯" #: src/gui/editControls.cpp:570 src/gui/guiConst.cpp:611 src/gui/grooves.cpp:35 msgid "Grooves" @@ -6593,11 +6583,11 @@ msgstr "십진수##SNESFHex" #: src/gui/sysConf.cpp:2086 #, c-format msgid "sum: %d" -msgstr "합계: %d" +msgstr "sum: %d" #: src/gui/sysConf.cpp:2089 msgid "Disable Gaussian interpolation" -msgstr "가우시안 보간 비활성화" +msgstr "" #: src/gui/sysConf.cpp:2146 src/gui/insEdit.cpp:50 src/gui/insEdit.cpp:63 #: src/gui/insEdit.cpp:75 @@ -6714,7 +6704,7 @@ msgstr "V 47.0.0 (9-bit 볼륨)" #: src/gui/sysConf.cpp:2504 msgid "V 47.0.2 (Tri/Saw PW XOR)" -msgstr "V 47.0.2 (삼각파/톱니파 PW XOR)" +msgstr "" #: src/gui/sysConf.cpp:2529 src/gui/settings.cpp:731 msgid "nothing to configure" @@ -7473,7 +7463,7 @@ msgstr "" #: src/gui/settings.cpp:1264 msgid "Use OPL3 instead of OPL2 for S3M import" -msgstr "S3M을 가져올 때 OPL2 대신 OPL3 사용" +msgstr "" #: src/gui/settings.cpp:1273 msgid "Output" @@ -8796,7 +8786,7 @@ msgstr "클래식 매크로 편집기의 수직 슬라이더 사용" #: src/gui/settings.cpp:3626 msgid "Automatic macro step size/horizontal zoom" -msgstr "자동 매크로 스텝 크기/수평 줌" +msgstr "" #: src/gui/settings.cpp:3633 msgid "Wave Editor" @@ -8840,7 +8830,7 @@ msgstr "현대적##fml0" #: src/gui/settings.cpp:3670 msgid "Modern with more labels##fml7" -msgstr "더 많은 라벨이 있는 현대적인 ##fml7" +msgstr "" #: src/gui/settings.cpp:3674 msgid "Compact (2x2, classic)##fml1" @@ -8880,11 +8870,11 @@ msgstr "Release Rate 이후##susp1" #: src/gui/settings.cpp:3711 msgid "After Release Rate, after spacing##susp2" -msgstr "Release Rate 이후, 간격 후##susp2" +msgstr "" #: src/gui/settings.cpp:3715 msgid "After TL##susp3" -msgstr "TL 이후##susp3" +msgstr "" #: src/gui/settings.cpp:3723 msgid "Use separate colors for carriers/modulators in FM editor" @@ -8925,211 +8915,211 @@ msgstr "전체 창 채우기" #: src/gui/settings.cpp:3781 msgid "Waveform goes out of bounds" -msgstr "파형이 범위를 벗어났습니다" +msgstr "" #: src/gui/settings.cpp:3793 msgid "Windows" -msgstr "창" +msgstr "" #: src/gui/settings.cpp:3795 msgid "Rounded window corners" -msgstr "창 모서리를 둥글게 처리" +msgstr "" #: src/gui/settings.cpp:3801 msgid "Rounded buttons" -msgstr "버튼을 둥글게 처리" +msgstr "" #: src/gui/settings.cpp:3807 msgid "Rounded menu corners" -msgstr "메뉴 모서리를 둥글게 처리" +msgstr "" #: src/gui/settings.cpp:3813 msgid "Rounded tabs" -msgstr "탭을 둥글게 처리" +msgstr "" #: src/gui/settings.cpp:3819 msgid "Rounded scrollbars" -msgstr "스크롤바를 둥글게 처리" +msgstr "" #: src/gui/settings.cpp:3825 msgid "Borders around widgets" -msgstr "위젯 주위에 테두리 생성" +msgstr "" #: src/gui/settings.cpp:3834 msgid "Color scheme" -msgstr "색 구성표" +msgstr "" #: src/gui/settings.cpp:3844 msgid "Are you sure you want to reset the color scheme?" -msgstr "정말로 이 색 구성표를 재설정하시겠습까?" +msgstr "" #: src/gui/settings.cpp:3847 msgid "Guru mode" -msgstr "전문가 모드" +msgstr "" #: src/gui/settings.cpp:3854 src/gui/settings.cpp:3884 msgid "Frame shading" -msgstr "프레임 셰이딩" +msgstr "" #: src/gui/settings.cpp:3860 msgid "Color scheme type:" -msgstr "색 구성표 종류:" +msgstr "" #: src/gui/settings.cpp:3862 msgid "Dark##gcb0" -msgstr "다크##gcb0" +msgstr "" #: src/gui/settings.cpp:3867 msgid "Light##gcb1" -msgstr "라이트##gcb1" +msgstr "" #: src/gui/settings.cpp:3874 msgid "Accent colors:" -msgstr "악센트 색:" +msgstr "" #: src/gui/settings.cpp:3876 msgid "Primary" -msgstr "1차" +msgstr "" #: src/gui/settings.cpp:3877 msgid "Secondary" -msgstr "2차" +msgstr "" #: src/gui/settings.cpp:3891 msgid "Button" -msgstr "버튼" +msgstr "" #: src/gui/settings.cpp:3892 msgid "Button (hovered)" -msgstr "버튼 (마우스를 올렸을 때)" +msgstr "" #: src/gui/settings.cpp:3893 msgid "Button (active)" -msgstr "버튼 (일반)" +msgstr "" #: src/gui/settings.cpp:3894 msgid "Tab" -msgstr "탭" +msgstr "" #: src/gui/settings.cpp:3895 msgid "Tab (hovered)" -msgstr "탭 (마우스를 올렸을 때)" +msgstr "" #: src/gui/settings.cpp:3896 msgid "Tab (active)" -msgstr "탭 (일반)" +msgstr "" #: src/gui/settings.cpp:3897 msgid "Tab (unfocused)" -msgstr "Tab (비활성 상태일때)" +msgstr "" #: src/gui/settings.cpp:3898 msgid "Tab (unfocused and active)" -msgstr "Tab (비활성 상태이고 일반)" +msgstr "" #: src/gui/settings.cpp:3899 msgid "ImGui header" -msgstr "ImGui 헤더" +msgstr "" #: src/gui/settings.cpp:3900 msgid "ImGui header (hovered)" -msgstr "ImGui 헤더 (마우스를 올렸을 때)" +msgstr "" #: src/gui/settings.cpp:3901 msgid "ImGui header (active)" -msgstr "ImGui 헤더 (일반)" +msgstr "" #: src/gui/settings.cpp:3902 msgid "Resize grip" -msgstr "리사이즈 그립" +msgstr "" #: src/gui/settings.cpp:3903 msgid "Resize grip (hovered)" -msgstr "리사이즈 그립 (마우스를 올렸을 때)" +msgstr "" #: src/gui/settings.cpp:3904 msgid "Resize grip (active)" -msgstr "리사이즈 그립 (일반)" +msgstr "" #: src/gui/settings.cpp:3905 msgid "Widget background" -msgstr "위젯 배경" +msgstr "" #: src/gui/settings.cpp:3906 msgid "Widget background (hovered)" -msgstr "위젯 배경 (마우스를 올렸을 때)" +msgstr "" #: src/gui/settings.cpp:3907 msgid "Widget background (active)" -msgstr "위젯 배경 (일반)" +msgstr "" #: src/gui/settings.cpp:3908 msgid "Slider grab" -msgstr "슬라이더 그랩" +msgstr "" #: src/gui/settings.cpp:3909 msgid "Slider grab (active)" -msgstr "슬라이더 그랩 (일반)" +msgstr "" #: src/gui/settings.cpp:3910 msgid "Title background (active)" -msgstr "타이틀 배경 (일반)" +msgstr "" #: src/gui/settings.cpp:3911 msgid "Checkbox/radio button mark" -msgstr "체크박스 라디오 버튼 마크" +msgstr "" #: src/gui/settings.cpp:3912 msgid "Text selection" -msgstr "텍스트 선택" +msgstr "" #: src/gui/settings.cpp:3913 msgid "Line plot" -msgstr "라인 도표" +msgstr "" #: src/gui/settings.cpp:3914 msgid "Line plot (hovered)" -msgstr "라인 도표 (마우스를 올렸을 때)" +msgstr "" #: src/gui/settings.cpp:3915 msgid "Histogram plot" -msgstr "히스토그램 도표" +msgstr "" #: src/gui/settings.cpp:3916 msgid "Histogram plot (hovered)" -msgstr "히스토그램 도표 (마우스를 올렸을 때)" +msgstr "" #: src/gui/settings.cpp:3917 msgid "Table row (even)" -msgstr "테이블 행 (짝수)" +msgstr "" #: src/gui/settings.cpp:3918 msgid "Table row (odd)" -msgstr "테이블 행 (홀수)" +msgstr "" #: src/gui/settings.cpp:3923 msgid "Interface (other)" -msgstr "인터페이스 (다른)" +msgstr "" #: src/gui/settings.cpp:3925 msgid "Window background" -msgstr "창 배경" +msgstr "" #: src/gui/settings.cpp:3926 msgid "Sub-window background" -msgstr "하위 창 배경" +msgstr "" #: src/gui/settings.cpp:3927 msgid "Pop-up background" -msgstr "팝업 배경" +msgstr "" #: src/gui/settings.cpp:3928 msgid "Modal backdrop" -msgstr "모달 배경" +msgstr "" #: src/gui/settings.cpp:3929 msgid "Header" -msgstr "헤더" +msgstr "" #: src/gui/settings.cpp:3931 msgid "Text (disabled)" @@ -9500,23 +9490,23 @@ msgstr "" #: src/gui/insEdit.cpp:7515 src/gui/insEdit.cpp:7524 src/gui/insEdit.cpp:7534 #: src/gui/insEdit.cpp:7542 msgid "Pitch" -msgstr "피치" +msgstr "" #: src/gui/settings.cpp:4058 src/gui/sampleEdit.cpp:980 msgid "Filter" -msgstr "필터" +msgstr "" #: src/gui/settings.cpp:4060 msgid "Global Parameter" -msgstr "전역 매개 변수" +msgstr "" #: src/gui/settings.cpp:4062 msgid "Step Highlight" -msgstr "스텝 강조 표시" +msgstr "" #: src/gui/settings.cpp:4065 msgid "Instrument Types" -msgstr "악기 종류" +msgstr "" #: src/gui/settings.cpp:4066 msgid "FM (OPN)" From 8965c60b0ad3d7078d87a776a507062f7392048d Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 25 Jan 2025 18:54:57 -0500 Subject: [PATCH 12/18] MOD import: fix possible bug notes --- src/engine/fileOps/mod.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/fileOps/mod.cpp b/src/engine/fileOps/mod.cpp index 6065b2454..2eccfcad7 100644 --- a/src/engine/fileOps/mod.cpp +++ b/src/engine/fileOps/mod.cpp @@ -198,7 +198,7 @@ bool DivEngine::loadMod(unsigned char* file, size_t len) { int period=data[1]+((data[0]&0x0f)<<8); if (period>0 && period<0x0fff) { short note=(short)round(log2(3424.0/period)*12); - dstrow[0]=((note-1)%12)+1; + dstrow[0]=((note+11)%12)+1; dstrow[1]=(note-1)/12+1; if (period<114) { bypassLimits=true; From 05f84d4ec1212afec3d8dedf3ec25f24b416ab04 Mon Sep 17 00:00:00 2001 From: aarchMoth Date: Sat, 25 Jan 2025 19:43:31 -0500 Subject: [PATCH 13/18] remove my demo songs from Furnace --- demos/misc/brokenspace-msm5232.fur | Bin 1171 -> 0 bytes demos/misc/cavedotwave-msm5232.fur | Bin 1058 -> 0 bytes demos/specs2/donttryreality.fur | Bin 18187 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 demos/misc/brokenspace-msm5232.fur delete mode 100644 demos/misc/cavedotwave-msm5232.fur delete mode 100644 demos/specs2/donttryreality.fur diff --git a/demos/misc/brokenspace-msm5232.fur b/demos/misc/brokenspace-msm5232.fur deleted file mode 100644 index ba3d819482b9ee1d8353d77b2ff2e8800f589327..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1171 zcmV;E1Z?|woaI+bZyQwW-RpqgXSRfuMICkv7!YWDHAghg2ny3{ls!W_4 zJITc3jK?7rDosie0P#B4zVZ;#I9W;A$0^|U8xI}nD5@1>&Iw9;z~_Wxav3e zyuNeJeM~$(JKJ<>W|@y|+AB?qpM69`W7HYN((L@t3<6^sQGI%sQWPIeNZ%RY2m1H% z-T~tPIz46wMLgRv?bsW!@*)K##lVgSdWPI{m~Y*m=ahpREC+V zS*vktTnQN^WR)hB$;}(^+=7xnb8} zLg4N>QhP4`#ntx5r1@*Q8zh{+SPYI&l?a#^>8>3SJh3VyBAgrHyhz-3oDt!C2xo&g zfC%S7I1j=((1>I|XlXzUU_czu0Ruf39}=Xu?&7TODe zWueab3RXc==ZjZ{)f<=)?;MNkhOowiQ|y+DrG?Dfm>I;rD;@IXsm0P4DjBo1 z+uA)mNxQd)=?;{2p%A9e#1s)=X}j{dpTD03Ez!=7`h$7&?X=q4A>JQmORw#FZArI% zy6w{=0=8uRt$qFdB&NpJY{hEI%r@pN%v%O?3_M9%mO@b#%u04b(R)EO z_2g8#@cWtkxwnoL%)Qo15Nk`GT*^ba6egFV+Uk|d0iie5bz^@9my4lxY&ozC&T1&G zyGnPix+v9N$_{WRn7gxc*_W!KGRTE}E*BOjf9H09?O^^Sq(7}+%r}E``!ta4F8{ie zJNHcQy=VF%@0osb?wNj4@0tEzx@SiFo*Cj(Ks*vlY#!@nU5JPDFiwxOmE1h%i(U-Bpwb#pbTy5HLTb}!lJb`%f;|uCRj!KLrHR?*J zA<4^%8WC!Q%S$v3PJvK0XIh>s8-AwEKUg!l;Y5#l4nM~IiPs<>97(JR=;MNk1NZR;( zIcFViS>>EhbLP^V`84N3nzNARTugJGKjiGR!=Qf252|;IPIl7^I}Hzmtya)!UTJil z;`^@O_Qv*nF>H0bY}0LpHv_*@$NqAK!h}7auyYAJpRgAab|GOeChYTUcWdum_L|{# zal8+B)|#HTiQK7lx%}2_eBI=o(sW^%R%S~2jrbTR$K}de?mGI1^eRvCF#G z2yKT}ON;Vu&JKt2U8Va&dU4~aXVlHsHTdz$3M(FDGVy?hS1M9?DP4FT!Y@Er3Ct(~ zO$liKQNTAZ{*E5^LhCGA>C{@50e~FD3NO-F{C0o8IHo zT1-hxq@-mf%X5UDlcG0y@<$%{zu0DK*&y>~X}vP1Cd4`on2ng*v@dR|XmL+$ziakmy&J5@2f!!PkF%Hk zXh*VF{vf6r`?n_M{Bbo%oi1MyUC=1WF7Ix@yW1U~nPN1*%hl-fx%SM1TPM`5W6L;X cnTIS(S^LtGKNv($OQ5Itp4j~GFS@%uEjy(h#{d8T diff --git a/demos/specs2/donttryreality.fur b/demos/specs2/donttryreality.fur deleted file mode 100644 index 3029617151de23f0be55544162eb7f88f6c2e7d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18187 zcmV)FK)=6uob9~_SX9^AHoSJ3!Z3g%peUl)z+eRn5+#ZSG4>XW8VsV?5K%FxQNbEa zECh`~jS>+PjmC;yv7kY0SWyWoN)ZJ?+AwYJ_1$}eCpqUe=e*x}&--8hb^ZUIJTtqj zwVrlAWpR>y+WXI+8y*}o#dX%~$@9aew0}kjaV38o1Bdz#^XG8F^9&&YePW1`s9klq z!4m2F82RT%?|*Upi|Hhs`&T3WcaMIv!`&lYN6%g8I&w;I*!0MS?OX>&x{jJ3GIL&Y z5*$1?WZIC~k<&0Rr!QeyMw-Gf?7lL*XU}(ygx%)W+6{wZdXabbk^bS|nTnMz$!2_NkI3m^lcxmFojW_q zb=2(n;gem*ginur$Ej`+94-DPw>14WWk4*51MwgQNC{Gb)F3O624oG=f^0yxAUhBt zxtO1e`MH>%i}|^jpNsjqn4gRJxtO1e`MH>%i}|^jpNsjqm@mzJCk)TCyz);6vA}3e zplchD|6soXt1&7hY<9@ZQB%TvJ844Z&x@QrtFLqeS5rc!&GwC)JAaCN)^AE!@Iv2i zo#hMvDN`m-3dSgJ`Eulxd9%ajM^2v|?&~Gr_+)mNucw!{CSvj|-_YQ&c~dm=f@ej9 zO&Ky})~M-=rucel=0ycZ^p_aaJ|=$s299*9bv%)RnPE9zp;W1@G}c-hTf2JFbG}Y5 z>D=nwSfGO$ICPZP2An@5P03I{8!|9_9^{@iB|Or#6B*(+l>p`SC4eb+Sjec zGPn<~HRb9~7=<))g|zsOc3)tG3uz{g9R3e5Q`SugQq`TXbkq=@;Jn$;{+Qi=s3g|s z?-$DxVs(FyST66x;%e6<#POYA3cl`yypK<-_w(^0?-|Q;?;YD2GHE55>iCQTpL|T> zpg#qwC=f}3NJ^y@6(A)@1yX~oKpK!WNDHz7*@Emq^*}mMeULrK0ptj30BQ(w0yP3P z204S8fLuULLCrv}pyr?!pq8Lkpw=KakUOXi=mU@ks4b`+s6D6ys3WKojME7!dEvY> zs0*kos2j)|)E(pl`ViCu)Dz?j`Uunu)Endn>I3Qv>Ido%@&^q71%L*EJ_Zc}4F(MX z4FwGY4F`3vL45jWDGgplsUmK4%bs;46E{@;rD!}~?-1`(J2lSIqZiKtZ(RvMxpjO*w1-z8J| zlyDC!3QD?dyfdN{~$th`#(fbaCHt;#Hb!v{iRL9{+i>6f5MS@r^O!yQc=gR z;g9wg>~gJ%`Y(BY^Vd8h{>*doU+{caog4n4?BA;MJ7`D^@84RUe+`ZQhXS7P|F4Ut zQnrYbR%!fy8%-PI_Cl#X>H9sfdfaf0jle22Yphht)6{&Xb8q@PT2)rqXTdw53-4GpfH z2Nnyag%6JObl3SQ%5u$z_peRZ8k3kDvvzAn?BT?d`=6Yzsw!(z;-v9y8Q{?|IM_WX z(tVo8=xIK#!<<-m9Vs%GWZfyt+@E&xOiElz%*o`v8Ryee?xg3I6zLrtoLIm9fus9J z2S+aer_ku=X~ChP(}Dv716n$GD5{Hc(D`Vs0llGoW zOV50qTgI{)os)-;Xa9h}389e--n00E=+Mx?!vZ?`wruI3QIr*xc8(ku>K%$;wQZ z)H|HKH9mgr+W)FtOl)lI+PH*-gyiJ?hYz1jJCmMqC+l%;ei5LnCq%1tXwt;h-P6-2 zAYd3Yo&X3&M84l?izC9Pg--|^JvhMEyJJUJC#{0$i;8ly($h{J-k-EJKK4E8{(~(r#Bho`S^z_7sJ;AxQy7QC1Jp9F~v4-K6#Vc1~U zqGLyQ7(=H}AfrH~d{`taBmI2ZnUg7p5ARJ*N=)9GkPr`dtX(U)UpoFK4UX8Auufcj z!q&vCNqdv`?>~9w43GxV@=GN1C?J}vdq;0yzy8BUPY4R0HZ442!Ggu_w~vgF1q&i! zrfH$UK@%nf4wFRm^Y!)g?C9?9>ZH?YSYp=eOJFrP4q~29*}oS;ZjFzFaDQnwh#0?h zYhqIJVR#Uh%glraiy)vRp+<{T;@YyMyGO^4p5ER*KE8f_{RhLBffFVK1qBC(PJ_@m zB7j>6CrQ8f9~4*+37JDfgC_u9e(}kM|}eCML+DLfDlu zmj6m*2ptEhVc4yS5Pa`mfG_3b$usF`84w=U)tf~HVj0Hu^z{oEJS;FMG&CY2@?W}s z0fJAqE^s(Fpuew=x2K0kOIJWZt6^EuEPM3^mC$e!f14V+m_c zPS8Rj>i`Xkpuv;JkD-99fvm#GlM>qCto{3Cm%#k;A-e}PUG{_=5hrDArNJ2)nVCpD zS&~C?^Ye>jm`OM@i$wB_LZgwe2CxBb$V#pN93UqhfF1s+Jv^n4bV#Rlhx}YVq|wqe zSLtX1hd5z5I0c7R3(vqeI9T{c`Xjc8!)%rug(8iA5L(iKs#Suc2%7)hkuQDnWs>C2 zuf0=ul)O92>JBVcReR{)9cCz7cZhWdg!rSiW&izyNWJQ&euVV#8#-uWr%n^m5sw~; z6Hot%qlWgwNvFP~O$$QeY%r!9`trIxnso2KcCgZ)5X)$LvYn1%^hC!Sm`|1U4IdbP zwp!cpe#Rq(jeDDCcO7mNE@@NA&pekp#INiMU$4y0`dU}ocDY}tc7B<`?XvcsQP%gO z(KLFs$LUeh@4Jtezw~`q!@aUCTi2_5OnG6o2Z{MtpCy~$o%P9}(H%xE?hx+2;vS7Y z^5u7*{dx6wpB1j1@O}D|n_WWMe3|>ru@J-M9q(4y_Z^A(HU99!#A77Jb(@}l-~9J| zHoGaFMx4&Sx}{vt@3Q&$$&{9_4Mk@o5B+QD-}mVoM`HH=BCTt`$SJH}&yGWUC(-Bu zOV35ra=ZJBdn&Cp@GICQHu25YPTOt!GzfHbEBN^JE*qzhznLkG>pzx8 ze=sPSyPPd1k(e3l|6UHo-rC=_%g?MEyxrMyt^OppcO3RE{wv;GRAq<2-@e@Ok6JZZ z@%PsW3H{2-s@uMNnqAq1896Z|d-|gB`&wSHoi&t3XD*Odnjx?EaA}=RVc+-5uzhOo z-+6@g=d{ynNX(tJ`@SYOTJXW$M$G9wVrfD-Ioq@-C*~h4@_L8F~Rz6zW^dGvb` zN24cC&g^u)v7)L_J-Bl~8R6zOx9^np;hCTlU$&p<*#E=gttb3{+i|zqukb-y6L@UI z>tj#G+=@NYdQaYgCaI$@etxFrbXtxt`S|6N+>EqSHxGVrzwv{&$u7OseN+bu=Tsm6 zy^+_%k8WqTdOO!fQI$hC+AQ?#({`oVPTS>$+wGJNp*bYx!gn=Wr~LkjGQ2Xf=zIOR zRvNQ%bNl#<2ajKU>U2xBYR8jvL#{4f_w-QKz0~x8pVE^L<lf5qdsYRhdEjnsA5K@ee76osP>DBpHe=|SXHny?w!}WtT+Lb zZP_p{qnPGrPQU1P<*MGhbZ$n}esbp54j&Ec)p=CY>)-x?l4CzNy0LW~qVZs}3)1zd z&EGy+bEs;okKOFNE*=M)b@hAI#&^W6h|YNtu6>KXLZ3F59~g>bibhvRUHu`aR1-iO4FRS-eH@ ziRP$r^zXf2yY{XezgA$#D9M)$6ujR4m$e+WZkiNfY*_1HvZR{5y@Sah{p?hg zO+C}i{>OG+ZS|(7(ZzG$(4nu#$CZCGe^=WW=Gy!#-#tC|q%$z|<*JS6J0EIv;mZqG zF5K_D<=l~LCmotM%D8ue1P=7FRhT$FFXR|o$u;S~Per#sTGM*NsW(U7 zI+@nFU7RWHV8 z+^qCSP^BJPc5uZ4+tlioPj$9BZXfaU_8a-FZkJH&nSkK_ll`3=ba#hOtUrG;W@Feg zx32xfPnQq)vEO>9s2<_Znw8weE~@D|qE^1!1>>9&Ra}S!&UDDD5}y#zbGY3g!O1 zw8FGEzpnoJ%mGFEt4OXh0 zUf(Rkv+qaz>`T42wKR8K?UMFkn@+*%5q2F~$J;&bv8j9YN7denH_GcRd}#FkhR0sU zIIS;P$(-#l-f6+{8F!hpE<1bQ>2G!KQL|t6tl_U7e%j^j#p=09KHun`_Gcs84svK> z<#1$2p2_(@b<@(x6%C&ze$>RK@6ma-_ZnTRzq0M*rtHHDH@n+fwdY2(Z$ECpozgVl zO%VqgIMqDp@b*KSR>N9EIDJ~S>%;b8Hxv`Az0BJhUuzSU|NC=)-C(Nq*n!-bdG$d? z%-*@X*Ic&Ay}F6SoX_&&&t?{y$6nmHY0QYhJuC7@9i8#p5J#Uz1DIXc%>_HgL>%TYNV;?^^oZ=Z*4%X+h2Ya~Zo9K6JTHVh$aDb;YGHr)2x1L*+f1>}E7x zKTO+uKc&y%FUsv2xt!M4=#IAf*xtJ$@J>bJ49&wkzdX;f?zw&F9_c^b8od$+5#rgY`z6tkVlGcXWK!u$isTZ>2Yj6w}JT z-?#Y^y>&Lz?(VtU{@GPKKRfYh>Qu6~diC8%y7}<8FT$FwFUoLDEQ~&7f1*D9q)lsw zDJ5Nv?Hc#&xWhTk>f=_PU3xjj^*=t?<0G}5bJIocQ*VxWGtnlr!On4x^-7)%6&G<^ zohB*!D|TIKeZ|^$niuotT#fMT!A)=L-r9%OO_U`WBPtd>>zu94*z{XReXFzag{PXW zYFE#=Bd?k5bMs{9bG>|PzN%!K-gz0RP<=SEusIp6>Zy$?PJQ9%(4eY~DUQ*%;)XYA zX4@yb!!FZp*HRA~KEyP5p}}vq}p3RgP*Uw!hgijU8tmX!qiy z{6S@k)Hb&M@%Fu1e=#%Q!{6JPL%E*UMj8ezw>qWyyz8=-p)Wsv+1j*Q@%`h>Vt>+E z`;*d88F;(P8NVlk3th9?S)FKE^oDV4;JCWx$2$qOhWa}!-7B;=^0V&I+2tJ%<)4`H z>gDN0Cv}>IEgbBE-l$4cSqluWJv%sTZ9l$sW4KdKV{}d}1ByDD4=B24 zdFCsNzq;KaH^pW%t$y)~cAI5jjn5n7>xm8n$mRgn|88Garmf>U%zzM?e`h} z=XNifdGxtc&)4)-r&;z^`2*FDsv<36x{&)%%6q@P@w&5RTb`v%Po6huac9i=bf$TB z$)iu6OuDz??ed(LI{$}ivaoXw^{e@Q4ax7%Nc{7gR z(ecwxn|p`x#~qLRH*Gl1zQ0wNwW-UN)?U_oxKT7fo89V8ZvJD7Q>ssv;=r@XcP+o) zH;oX2>@2Sq-_+cBTGo|qr0-SHx^%{~-z-~|V_r=!8-6G3#bGW-UG!?u&1Ux-ydG~8 zZJu7S+;Xl$;dE6QNn;fK8|d7RwlJ$h?5}s~+jhRtmnlU zeEW?p_569o1jRnrZkluXuatMJ4zSu6ey6Tk z{hltT8MmiD*mQ3{yUmf3okb6=Q#>9!cxZm%T*_PthH|MC$ zjUE>D`pxl%<;vWb;jiK!46FX(xnpIUM(pkTH{Ry{Xm!^9Y`ylnhR<&lPA=sPq4uF{ ztLhJRUEaoL?kdZE*+~Dn_1wyJ%-njft+z7^buD!fP0!jNWXCn1?&kVIzZRMHqGm*= z4K4x3YvzGXeC+#~W8ZvYinhJq+|j{e)jn@w!H67dS}D4@jADA+3MgLI)~v3wMB0SE z*};x523EZkRaSn@pXKk)kF?X*xLZQ&SyvFDE%UM_(zt}#%*?~ zimalOCU3L9%CDYh%l%Dl4BPAuJ3Mr1(Xg3ycGVBgt(z}V98}JJ{gbfHaiDtHgDx*V zc>P&!555ie&9!BZvhVkMHSq22lI>MX^(AE;s)JPRDi)SaDoJh-r0Z@KNd~1>zg#2(`aw`%9m|zRTV4Ccj(ud%U>TYQ@s81HCvohxHQwFI9z|B z&{+{wQ(B|1dhv3HWf58O;Dd5iy=MkDTWVX@BRT0Tj%;tYDc6$@A-Su*>!KB%2UCelvOttk?{?uqDSN+PSbg}BC zqa$}k#faP0mz?W2)p9?UMv!gdVAg2lh3iF?&x0st(OE=QN@FvIW%}*si=Q6nm z@*mf9QunU@L|H@^XAgT`q1L&SRKBumQ2&+v4>qiJu6Bkc!C}7RS2n{mOC4W2uhDuq z-}Wfut1S8U2dp!#+NuxhR`OSvS=DLA!Ro%2vFEFBp@Js7J)1kS=98C~^dD69C=ViiEBeyNqMX7Zj-A=Ww?5(*mLOG_ zE?G=1cW2f16KxhXqUtUU9_TzP1#t^M)m&6_uwHnR1NF}*yJqIrrn$z$7A^V7X&*;~)>dAIOQHu?Aa)}gZ8Eh)2&$^d z7flCCgjZWDY+hb8gjF@TpY~<|Q}A|1&eX!r#w6xx)zH`bY68m#RC}8{(ci6_YKE#} ztvA=dZgs%AK-qzg&|c!BxOrr6{b{WWX+z_;{JtiqKX_PwV!0dhl)tK+N_48^x6M@! zb_Y#62^Hs9ceRNXe={y&nmb&w9&NNXjQ(FyrhDo~Y_a96@f`VB7+E>j zpR9wO~3pS)~WX{}#b-o>uF z@jx|SudiizWvd}qye+sT&u#-XY})gaXi?q+2>Wuk+gp?qIEt?8^e)aoVM zQJg~?+UKYTYvUX3u^B|hvGo-{@fRDi&fUl+vPw0{=02BItuudOs0cIuk;Pdlix-f##knp9(U*ShxXyZ&?p_nu1~(f%w_l*T zTcc5rv`Mq;X1kqvVfn#E)b(!g5nsPzO!X?`aN8}_E33L16ZKu_r$Q%st9+xrzNJ~E zw&s4N{`G0gD%<5&q%yu@&#UkC9-@YxR5s-j-b^d?syS2Ax2QKA&Jf{utB1<7R!V-4 z@)SQo(T~qk#OSQG3$;CTy|qiN0?k$$L9tt5QoXiqr!6Pv*_p}&;>9epZSLIFKCd!X ztX4*g`)bx3UF&rfem7dxn{Cz5%FOJpUdBAuxV()stSXsYcH5>%;lVvDil~TF*E3Gc zZ(Z7(S+3k{XjyTFyJPNAa$eyf4$=FI=h=?teWvzeE;ox(!!qVN+m*eih~|@3ne17u zhizlkeVcB!OY61PTu}KbS7=%(E~?*Xqck2i9aV42OGP*9+uSQ*xLUzSXxiH?qesh# zK1_AabW!Nd^q}>h^ZM)T+%nZGjiIvavc7NejW;%YiSo5(rJ-BV=%SgWZ5a>o<5Ho< zuKI#lZHlR0X4qlXq#jXvGb=a~Kg;TYrZNAa@<+ZvuvUD`RI%rDuG+2a3A>p#oplGf z%la1TF4m_NrDPU+)Uwd{)OxAa7{ws+$g-blr|l)qVHzo$=yS+f;~a)nnr1wm-I!2MV8MhE|uk# z+$_CVF4R0QzpnYBYC`qpS9>b+nAwI&T%_VU`_TG2Ya-)qGp!<^SAf>f>aZe^F^Qv? zTdFtOFRk*0g%vZEThyHtLzL4jQCv6G5=)gjMW?h*=av|!>t|@!l2c|u^e`EfJ2h>r z7m@q=>Y7s1SHgYnV)^Vh-->?5r{*L>r|KolWg(=>iS9DJt!QcVHa`aPCRnCct*d@q zlVgf77FLhv1Xa3eQKiXLE>2b~RyAYp3rj0~NUU`^w}`GcwpX3d#$d_T_Gi|QTV=-KrZELG?5r47j zp)R5`Ig4^2ZNM+JQjiR>uVOIM&+MsRY+k}_X5y;P)z}NKt8^wmT z9#xgPv8I$;#th(XS!YW(l}Z%qOak4L(DIUbdXTt>d&G`o4=65c^w#GUi^vXkFjJ3xX#QH*qHeFf?xQA>sCF-vjqD(}%S((RMl*9Qr+KIiTE){Dm zA1a+R$Hg5MCn9pQ`A1gmxl!ty+%V2nTg@rRPTT(4w^pYWQKkWEV)d0(Z^e)1Kr-C! zywX=lV{dX-$O`VZaum;)H;6;H=3-yE*^nS=IeYUcgQH0=&Ne@-SyZ#BCa9`wc|wgw zd?_Z@TsJ;3d}oX|MnT?GwIJ4Ge_^j0gT&^hF!7LT9@)?2Sv#v2^K+P~{A01o63&fK z%u+vBJ>^%^#^O1ZyY`jxs&R{ApWP9rg}R-UAG=&J+e)dnR)4R2C`6M*+!~rd94v9d z0Di0SbMY8$W!WXHuGvs|#*}VoYe?qja)C8YG?M;Sv7r2sF^NWzR+i!B_M$@UWxOp! zY2p=G)L)3Gxnl0kOyNG{2B^MMI4X_G9-~iF<2*ZLEHlV z4$r7Q7a3x!>dcBlZ+e-FQJfLtEz^Zi;i2#oe}MVI;>xa5bP(oPqREfubEe0lpQ(S< z;+jq7p~wz)hVrWBl|q${JQN1i+%_#TJu?n5W$*^hhS8eJ$wela3sadb&n*6$6s3H(hGHDfCtRDlVasiXhIy zmWn3@f6`GEt5Pz*imO;9ze3rYu|@Y9!7gFOGK=~7N&}P1r1Cq7H}fOvm@_rdaXiN? zprJywP$|0bCoE%)O@t)Nec=;RiK$eaNDuwm@`eikahV8Q+9mYf2V9m07Uf2^zy)Cg^S~ zybx~MBNm#Y#AeJUgSX)equEeq*=&kNr>GU8!~}62-ABAclld!-^2x+ayvllT7f3TE zkqjcv>=Pz|_hWs@F*?Y6gn5O!wvta(tYfYU-z#Id&g==2K%BUt(!V~+qub$gxQ_e^ zVU49NpTgPE-E=6C{v(?xv4=QcXfHC@FO3w|iW>2}rH47w!di-rZsvZ%W5LT{S8Zed z&a%u*gcFu$^cY`6W6gue3oeU^M?X+RpQ>C`bCuO(J*!q-;~y)FnXAg7{Ao5#eV#qQ z>}MXa3sgf@dHe+~lD1bBs78y~VoP=`t7j%MGZeXOg6NKV-CXR`+4m@o7qrwzKALp9yZ<>If9!9b0|BvZM`*`hPK5Km%dT0r}=IV6)7Gc{~DX@hR_ zg<>Zgsc5J;C+?%^TnpYs<;RWUXDWxV?sO%Si0rpQd5$ zjAuQCV~m~RA~Tr%f%}<#&D>#{a*j$*5+U9tr@O}BS1aNX#bbyq(Ll!w zrn^L~IIlR%KOif_)#RvRjyjg{A#>RYJf(Y4FMn2)G0DWhj9_)Bc8A37>@dY>HdM$U zHhd`w6CYU$ge6P}IU{H&$Bd#+$*-iRWnN9WDbJj0&xnkCXq;qY!3Cuxc8!!GQ*NuD5 zPoviCP|*(i#-CX?{$u8e(337EJo^Qk$Nb2g;?ig~y+|9f zqtIPG=eJm5$sqBP`2>lhE~q9sWU$54bjsX7d}gs1{DiLre}T2^5!}S1h^_YGJn;ls zAclxnM4cGI*ouS11nwl_eUEsGX~z;|!1>6WE~K1%!S>^o{Ev(W{4ktR@XfhrEW^*R zv^BTk3efQ`SKbGvo-uw(cNRH>j(}wgshQc!JY($W4Y4OIby-Lh%IId3&iuxB5?LXCN!ZaG$Yp%ty$49z@B!;udi&n6?Z>r}rzrmUCzO(iCAfpU1ovmci0vsXJpp z1*}B3x5lDJm(xI;0#7W|FBb%HljtWTm_8BO(r?W=(`n0VqG8rsLd@T@!R!yhEa2`S z8zsy(?4~z4Keh`uiWx}1L~d@xV7EZN=H~M~kU_24QzRI1|CnpaHDjFFeRMNZh`ijK zTqbUOcV#$HlY?9YDS&m4(KzZs&RZ^tzQmobCa=X{%UDYw;`_X1v8bdwEN4s#@x0Ja z*e;$T(}nfMzH|?9w@eim6GX1~l`t5Q{gjNMvze#-6UGcYw1w5@FpIck5=c@N-?3Mi zpV?XTBjz6C#iVmRm@DK7bAmi$MTj@3w3ZZJ2e`4fXA?rH8nIOyxd75B#gxhlCSGRI%xh zfJM$-L>cf61}5$3adv^a0x^8pfp`jQm@<9@JCf{1 z#obFAG3BJa_^r5rYQ$jLm-48w7wK=7^_CXQE8)EHrSXigLOdltAdaYGcbHqE4?Mcj z^icSL3uE3|`iNyr6V3~|&*jF@m*P?O97!Q3$Z1+c8ZdWR12>C3$eu*f&~EgyF_sB5TKvX5 zLipM8R)|Oa-;Hj#6>+tE1iRXssi;SkMf0iraQc8O7di-u$TM0J0v~OJy$VPy|0^Ft z#xhQ1Eg7LuGT*ZsxJ~>s`Z4;pE5w)c0zQx(m=xm9>_CUui_8<<#2=Xik|Hd$WKkV@ zq2bIxROj~MHp^hkbMqSN&Ne0;#Y5s|dWGC3dh-CY6FGu?!y3AdsU}m!1>#6Cj;>-~ za9>zP3LThl#g+60*GBo2_>RuC!3irj5nPF89m4>#Vkc5{&ucMjDA`U;q?;H?J&7Rp5qHo7%xdyhh!D4lmqbyB zWrm{fZa{Y+(&qrtrJ{uVSjLvPqSrl5uL@O`1k#NJA$PT)8_61EwRVVLRA{CXB5*IG zB@3{#T8qrTo?XMR>}2#8Ug!a*k}&Fne7%i~7bgjOnQwU>ecVsjTXceU6uHrw7F)(6 zw{1YLutK;m=t&k;30fhR92fhTvn)xdCrhY@$kAOwhB%4r62{Wr=vyPiBzl!iBtfJP zX+YEHIyweDRd@7dV^Mwfkk8o5=&8M!QOs-PqZZ6{RxgHN_pp~Kq_OA>0vX8`9mUJQ zNup3LUPRQthBbQAspKj;vQ#=#xGgN9uf-A}7X9@Y5=notv8+nmLf<5aF1o=z^5AluV=tkk2@D`XjIhc`fEq0Xx}v z+JT0MJH@r6lsu!4g^|J`al2>|Z_zC3B~GKym{Z`LA#S1F$Q;_0?Zi4WS&Rcq$V*W` zZWzyT+&R*MS&mGQOr{}He_?acy>3EAmHw0EBsz+@0sNd7u84OKXV{&Pz0h-ya2-8Y z5P5=1mV;4U=uXu0INBan^rmo5oJErnk^YDwUy@FbiyPsMEy$!;}Wh3UZqLh}jDnDZPt5%O$Kj zh1o*qiQORkRbi^=NV3IJ@hbc>7+LD5FiGer9)ZpJ(gEUWU^ttef+eEKJ)o~IjgaU0 zB3@3B@uV#i%Xl-VnINK}&Zq!Bz?P1TV&?O|v$kY4S&ls84=w65Z`njn$poX{@Mdl? z>zFD!3Yf|vGoWDvG1E=(#%n@FZ$whGScOb*L0pA6D?kO&L&8OL8f4x?A~5D2JtQ7L zO&CL0iD~o#Ft7tSo(&Z56lY+aJY=z7$u;I06G#@5M(EkD5EDs6OgCcuP|rsp5|<$l zCZm_T2>G6hg>(=pW`;A*#YCZ0?1eqE7c!U!IftCEoi-Kq=Qj8+Xx-#aO{B-k(X8@+pIxM&A`W*v15v0^;5vg8YYw70o<-7Ze%jc zqON8G9VT%E>KtWu5`UodE--Ws`7;G`+XAU;(aB_s%YmkQREoc^1d7OCgL;^S2#%vy z#1&$F$eDxOmr4_n36B9WLC|3iuoDPxU872-F>>cVU_uK!i~;iZkRn*#o#C+`u0VbW zg3Wefr~DoJD=KFXX#FuFD+`%lfn7xbdf!;G4)w1K>K;BcoGcda3(`vwW>Km08I9_C z8u2?)d@Sq{3G!1nF+&^-Pqu}fA`yv;=w{TlDKr?CJdJ)L0eV%FZHSN6=#2J}Ns#L~ zxr=-}kt%>5XW(QTqB#VSeS+M87l-0mIC)BzVINjRV#O%2KC=f|#u3qRTx==E(+R-n z7~n$#v_25+h0jszS77(H8g@8Aw~5WgAB14!*S;7zirx}OAqUUF{=GSRi&=ChiDRCU zXNZ>_G!wZ5*&1=S8j-DJrlFcNW74P->TNP4?Z6CXvcao}R-kgXf^O^Rcy#4X7@bF* zX|*sEURjMyasv^q!DkHenH$z09iJo-;lbL)rggH*lH~L=%Mhc2cl<;?4_wV4~Oh6Acq_HKBI*+ zkG4W~nnmqUllRdAbP-*k?GA9yLYM9YES4h&6o}dMGWhNi2A~q}gQSCS&lh|$kWu2W zN`0mnwohWtA<`ZI6?1?VCt!01qShBOjl{Sr+6Ufh#w>=7LQt(^Oo~PnOx{d5b z4D|up_F)|zX$Cv>1yY-%ZW|C)ud&bUja`}-yxJ4LM?k@lIu)@p2(gulC>?-$m4Im4 z4o}1*7eo*nrWNXw5_x4YGSdNy{uR19p;N1eN?HWZ1|kXvFwv0p7Gh~0q)5bB4_b`% zE0Jfe!TM5Oi^c9@3*uYa|2Uz>g}{qWz*dSl78$1lK2q-#i~g(_5*5mK33eI^Jmt|FK+8H{#RE|}1zc7G zU&Eo-1jyG7xYEEs+o?M^*#Svg(A(%yIrl-z*NA~QNVF1`yNe92C7WTnQ9#uR`W!WX zA98mz(0l-Pzf2kvXDU^6DgG7k$s*Y82F_Q~d$5T&DqRFR%`$ZF=j0cvoQ7?-q3-Ra z>F6siB40no+Rw#w@bN%5lL};Z0m3<0MT*E9z`M?y6^Ozm&`I*6fgZ!XI7G7xWH^m`jbTw=tThIHYK~~~ zfjm4h1G3-MTnc#43mbFg|L_)5L} zW_+&(j+2mk#{wDk@pKLlwvjL-85JuVatuZWl6GptsTtW~I4l?fJm;Y6azeZ%!}IMC z$F{J}0CW;k56}bg+#GwK0$3v(>tBIgGB8FSO(fUifPDvSgNy(o1QgJ8vpkbe&3c?O%h05@9Lc@SdF5tjwb|mk4GeQ!(0RE#0=Efb*M3U)E}#E$7diaNH+Y@0dZFb zNiRaSd&oJ9kRc<1{vF6^?P0MaSmhSz7$v|^8CIx3uDA?swa|JXdX}Bgb&y=OcFHmk z$TJc+>jQgK0I35ZvjR3vMiyNM&04`mQpWQJQi_3vY4A=O?pL8_Tma66u+=nt7a{J) z0Nbm9+%U+SL?t_JMnrGN*%HjxVwD5X+y%M5033o5UH&)^2W~e3Ey?ieHSm-AS6d?C zA{Faq!A23J52<|#lN!B+Bcwe79+}W`H*8=_(tw85;GGWZQCM{rc8dETmr0Z)+6+0f zFm^RoIsiG{F#8sCDU&fa5WFN5dm$Q{!#2;*o4J7ZPDp@yfl;aOb~Hx%qX%h^YO)gc z^?~hJE)tR)5ru={NeVkIgDl06Asb{1e6GWo#)u0wyi$R6z2v-7gvuQ& zbC)dM9I>4U3pfEmQLv0c{_pDs;*JM+WkH`Auw!$KC9s$oRvswl9LbVtkXDMdOju?e z@^c|1Dw1($z_T#OvmJ69Fh`0yDQ2a=P)VN9VIQW(n(gsf1p5Rb-%6R<3%Pm|xHp$` z(sl9eT z5qhsdd`Y{li+Gv_OdUX6O+v*?!;C=q#S0t*aXk>L&wxb!MDj#?oJHW{k0)wy9wW=R zf=E3=V~h`kor>WJf_YLO9VC0WF>sKDk7RdAFHd}msDzE(uv#9Z$bl@^` z6Y%&T=wyo(C42?}J1fAy4C9*PZXeiS10sGct{OwvV(9FIvw3okR)EV4$Y(2$b;M{- zBE`GZxk|4*lU_2G4SY!GNQWF+@XmoP4!{!9F4hcb@5#8A>Ygn!$N}IWvg*RgfVSJmaAGMcHE)!7CoPNrg12@~_l)?1MFS z$UVkBJeP9wHQ*^8v(2D%$k>=j{n1EplyvO{YiSWbYRJ%wNU_@rPrT$zAR*s{NVD?f zD9Xe5B50KjZfUr41i5AhmFn>=SU{3*B{)gg*@1k#g-X$X0GV(ZJa-z;hU5GquwbUr zU#*ict_n6S#yZ*H>I?oZ;MpGETKP-?E1Bhf##YWnW{lPm>BV{Xz*Fi83+pmXI^>cv z%0>KUK@!Oa7r`?V_x9mVu^eB!sf3j{{HB58adiZdcZ5o>5Ym!;vX#1F-AvfW9~`y7 zr5pH4a(KvCa>7T#PIE}v4YO=voopGCQh#lhb4W4H+#u6MNLc}E6;TN_*JOz#k4kYQ zWuR<)GG%{D@}@z~?Xc7dJj=loNgpi%%LX+0_~^i;xr`sFTa|Dk?M@_V+RNR5^zuL- zxwd-}g&aQ;uB9lJUVT_Wr56uM)lYikP8Dof0g^aAlRYW*eYNN^%Q-+AA<2{~@6@II zQvvG~K_1BuM2=@k|5mbP++d?Xkkq~Uy}Op0f8GiS$ZG$?v{$MN`W>6{N9jQ-z#GbVRaMAPCuQ(b9_|)XNqR}s_Ogv6-{@p4`^&k<7hEL|`pPJ8E~8lD;0BU%pe>~E zk*mL(jC?bd{O%%4N@aZ9tIG_MAIoHfNdJz&J#d!Z=#@&P|9wk}EQ6dc3GCu2zxqkq z9r?;}Y%6y+UUismCHH9Ea4mUF%6L*lx!{fq^smjF4DRTNgp?|oisfG^dpwi#&po-i zO8fbXa;GEZy)@Zpwf$+4+zV959UDOoF9tfDWW8I-R`LWle~?a&r}prok6afFGSWO{ zoM~lmFtRmu@@y?K#xuDxWXmYdf)~tne#(~X`ZXCn$K)(5)$(k7XW{!A&WmL%<;Y&E zfP7lms6zH`E3B@N*DsT?-Wal|Wg9TEL=r-3UmKb&bCfEnTJAlHrmXWl zT3cDuAgq!*Kx$+1->V>U~Um28>+Jz4Km@V*GUNPdz0lqLJ1|_Xd1Zxs-AYCZK{d#cIcrI+O&sNMgh)|RC1<&88K-5k)oU|k z4x~5&-nH2;TlU5+dCwu$xKzlMEsrab_p`;2U$U-~oNupDX?LlXqohc#AhxmxrB|>z z%68MrSyRG|WI-ujB!5T}70R(>maEP+Sr@6cXUgAFd>6}B%fpj2*?LkJkR$)r%3j-1 zR>--&P`w#zT?nBZjQ?@@-=NZY)3OV!G%5f#-MMt?OYbC#*LS2U*_qM%NbI>tCDTygf+}m>hFr=ydvct1*wvEhwny7U0s!2!;0j5UOQj%zfR6$ zI%1Ife(5h9?Pd9-+TAK+ELsbMnaT#-r zaI+Ag_?gK_y74@$4iVN&GlH}W;KQY}{2dT^mqmLy6kk@G@jtzi}`|J{d6YacFE zI>+En?J2>OnE%nL|1L{e>07eWu!3r#)kFd_EpuLM#ly}EtuV|={*~`W;Vziq&SLov zab76hk)K7%&!VjU_MBTPjrnGo^HMxf$hvjs%G@HXBsf~(it8AI zlRrO;tXntA>JM)6l`P*RKcQtI6O0aFf;YgUPjb{`lcSYafKx-udI_-Gga=UZeI&u=;;M%vb<8(WE-BW-I@9A*3OK3rJ)aG|a9m$tR|Ux)!wwlV*sRsUU< zveJztr4_Ojkb3_7;cKnpE@f5)zMNvDWY#P~J0ONGYjiAz$hjIPRL<7UGnp9jE?+xG zX#Z1#=Ke7#Qd>6&`QI7&Uy|oP$mxF|4y37z7TKQ4e`3!el0B99a+Owc*Dkgh5JQ$V z*UBp`v?0=&l)r39OKp@*40T>;BXe$vk^kv|OaC-*sf}|C?$-@oDh_`k&|g9}!Wu=X$w!lqigwxPlAgh)lCM>HJ?`&#Jqwy|?VYHRqqNLH`enesSlh C-6Yun From 497ce44cd06c0d8207387bb7c1ca6cbb25a99b55 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 26 Jan 2025 04:28:03 -0500 Subject: [PATCH 14/18] command stream was utterly broken --- src/engine/dispatch.h | 2 +- src/engine/playback.cpp | 2 +- src/gui/csPlayer.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/engine/dispatch.h b/src/engine/dispatch.h index 52e5c1c10..c74129959 100644 --- a/src/engine/dispatch.h +++ b/src/engine/dispatch.h @@ -67,9 +67,9 @@ enum DivDispatchCmds { DIV_CMD_HINT_ARPEGGIO, // (note1, note2) DIV_CMD_HINT_VOLUME, // (vol) DIV_CMD_HINT_VOL_SLIDE, // (amount, oneTick) - DIV_CMD_HINT_VOL_SLIDE_TARGET, // (amount, target) DIV_CMD_HINT_PORTA, // (target, speed) DIV_CMD_HINT_LEGATO, // (note) + DIV_CMD_HINT_VOL_SLIDE_TARGET, // (amount, target) DIV_CMD_SAMPLE_MODE, // (enabled) DIV_CMD_SAMPLE_FREQ, // (frequency) diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index 987b2b7b7..b3fe8cea0 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -67,9 +67,9 @@ const char* cmdName[]={ "HINT_ARPEGGIO", "HINT_VOLUME", "HINT_VOL_SLIDE", - "HINT_VOL_SLIDE_TARGET", "HINT_PORTA", "HINT_LEGATO", + "HINT_VOL_SLIDE_TARGET", "SAMPLE_MODE", "SAMPLE_FREQ", diff --git a/src/gui/csPlayer.cpp b/src/gui/csPlayer.cpp index 7be1f4e1d..1cb185fdb 100644 --- a/src/gui/csPlayer.cpp +++ b/src/gui/csPlayer.cpp @@ -139,7 +139,7 @@ void FurnaceGUI::drawCSPlayer() { if (ImGui::BeginTabBar("CSOptions")) { int chans=e->getTotalChannelCount(); if (ImGui::BeginTabItem(_("Status"))) { - if (ImGui::BeginTable("CSStat",12,ImGuiTableFlags_SizingFixedSame|ImGuiTableFlags_ScrollX|ImGuiTableFlags_Borders)) { + if (ImGui::BeginTable("CSStat",13,ImGuiTableFlags_SizingFixedSame|ImGuiTableFlags_ScrollX|ImGuiTableFlags_Borders)) { ImGui::TableSetupScrollFreeze(1,1); ImGui::TableNextRow(ImGuiTableRowFlags_Headers); ImGui::TableNextColumn(); From 36ba721ab2aca8d113f98104c4347e617c4df778 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 26 Jan 2025 05:00:12 -0500 Subject: [PATCH 15/18] same size --- src/gui/csPlayer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/csPlayer.cpp b/src/gui/csPlayer.cpp index 1cb185fdb..6e91db87e 100644 --- a/src/gui/csPlayer.cpp +++ b/src/gui/csPlayer.cpp @@ -139,7 +139,7 @@ void FurnaceGUI::drawCSPlayer() { if (ImGui::BeginTabBar("CSOptions")) { int chans=e->getTotalChannelCount(); if (ImGui::BeginTabItem(_("Status"))) { - if (ImGui::BeginTable("CSStat",13,ImGuiTableFlags_SizingFixedSame|ImGuiTableFlags_ScrollX|ImGuiTableFlags_Borders)) { + if (ImGui::BeginTable("CSStat",13,ImGuiTableFlags_SizingStretchSame|ImGuiTableFlags_ScrollX|ImGuiTableFlags_Borders)) { ImGui::TableSetupScrollFreeze(1,1); ImGui::TableNextRow(ImGuiTableRowFlags_Headers); ImGui::TableNextColumn(); From ae5788a572922eb02b22210564ab437ca8a30ccc Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 26 Jan 2025 18:10:32 -0500 Subject: [PATCH 16/18] GUI: fix paste overflow not changing order --- src/gui/editing.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gui/editing.cpp b/src/gui/editing.cpp index b7aa730ad..edbf94417 100644 --- a/src/gui/editing.cpp +++ b/src/gui/editing.cpp @@ -676,6 +676,10 @@ void FurnaceGUI::doPasteFurnace(PasteMode mode, int arg, bool readClipboard, Str } } + if (mode==GUI_PASTE_MODE_OVERFLOW && !e->isPlaying()) { + setOrder(curOrder); + } + if (readClipboard) { if (settings.cursorPastePos) { makeCursorUndo(); From 644b2cd6999ed6e277bc4f21da5b247aee43fc65 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 26 Jan 2025 18:10:53 -0500 Subject: [PATCH 17/18] so that's why panning was broken in command stream --- src/engine/cmdStream.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/engine/cmdStream.cpp b/src/engine/cmdStream.cpp index f1b267869..6d2309369 100644 --- a/src/engine/cmdStream.cpp +++ b/src/engine/cmdStream.cpp @@ -200,13 +200,16 @@ bool DivCSPlayer::tick() { case DIV_CMD_HINT_PITCH: arg0=(signed char)stream.readC(); break; - case DIV_CMD_PANNING: case DIV_CMD_HINT_VIBRATO: case DIV_CMD_HINT_ARPEGGIO: case DIV_CMD_HINT_PORTA: arg0=(signed char)stream.readC(); arg1=(unsigned char)stream.readC(); break; + case DIV_CMD_PANNING: + arg0=(unsigned char)stream.readC(); + arg1=(unsigned char)stream.readC(); + break; case DIV_CMD_PRE_PORTA: arg0=(unsigned char)stream.readC(); arg1=(arg0&0x40)?1:0; From 782f3dd6dd59fc34d54057507d2836a8bfb9da3f Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 26 Jan 2025 18:18:54 -0500 Subject: [PATCH 18/18] update demo credits --- demos/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/demos/README.md b/demos/README.md index 28a1f0ca3..948ec8399 100644 --- a/demos/README.md +++ b/demos/README.md @@ -7,7 +7,6 @@ these demo songs are not under the GPL. all rights are reserved to the original # contributors - 0x5066 -- aarchMoth - Abstract 64 - Aburtos - ActualNK358