Skip to content

Commit

Permalink
3.9.3
Browse files Browse the repository at this point in the history
  • Loading branch information
quippy-git committed Jul 12, 2024
1 parent a67641f commit 4c14811
Show file tree
Hide file tree
Showing 18 changed files with 1,273 additions and 818 deletions.
46 changes: 40 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# JavaMod V3.9.1
# JavaMod V3.9.3
JavaMod - a java based multimedia player for Protracker, Fast Tracker,
Impulse Tracker, Scream Tracker and other mod files plus
SID, MP3, WAV, OGG, APE, FLAC, MIDI, AdLib ROL-Files (OPL), ...
Expand All @@ -20,7 +20,7 @@ On Linux consider starting with OpenGL render pipeline activated:
## Remarks to 3.9.x version updates
With JavaMod versions 4.0 to 5.0 I want to integrate Midi and AdLib support.
However, before starting that I want to have all test mods of Schism and
Open ModPlug Tracker to work. We finished MOD and most of XM with this version
Open ModPlug Tracker to work. We finished MOD and XM with this version
and a whole lot of other stuff as well. So I decided to release new version
with minor version number updates to have you participate in these changes!

Expand All @@ -44,7 +44,7 @@ with minor version number updates to have you participate in these changes!

## Technical info:
Code Compliance Level: JDK 17
Build with openJDK 17.0.2
Build with openJDK 17.0.11

## Third-party libraries
JavaMod incorporates modified versions of the following libraries:
Expand All @@ -67,17 +67,51 @@ JavaMod incorporates modified versions of the following libraries:

## Planned:
* finish loading of OMPT extended instrument / song data / mixer data
* optimize recognition of different trackers - for whatever that is worth it
* reading at least Midi Config with XMs / ITs
* VSTiVolume, SamplePreAmp, MixLevels - look, what OMPT has to say
* check for further missing MPTM Effects like Reverb and Surround commands
* optimize recognition of different trackers - for whatever that is worth it
* Quad Speaker mixing (rear speakers)
+ LongList:
* + LongList:
* Midi and AdLib/OPL with Mods
* WavPack and MusePack support
* MO3 support
* read from 7z archives

## New in Version 3.9.3
* FIX: finished:
Enhanced FastTracker 2 compatibility by fixing everything to make these
test MODs work: https://wiki.openmpt.org/Development:_Test_Cases/XM
(many, many changes...!)
* FIX: When fixing (Fine) Volslides for XMs: MODs do not have effect memory with
fine volume slides
* FIX: Note Delays with XMs did not work correctly anymore, due to other fixes.
Refixed...
* FIX: XM: During Note Delays, tick effects (volume column) need to continue
* FIX: Note delay overhaul as well for ProTracker, when we are at it.
* FIX: S3Ms reset volume with only instrument given
* FIX: Fixed IT ((Extra) Fine) porta up/down. Additionally moved some effects
to be processed after vol column effects (arpeggio / vibrato / Tremolo)
* FIX: the information dialogs Pattern, Instrument and Sample stayed closed when
de-iconifying JavaMod. That is because we use "dispose" to hide JavaMod
in the task bar with Linux KDE when minimizing to system tray.
That is not a good idea, as the visible status of those is always false
then and cannot be restored
* FIX: renamed effect "retrig note + volume slide" to "multi retrig note"
* FIX: Show >0xFF rows in pattern display

## New in Version 3.9.2
* FIX: Continue:
Enhanced FastTracker 2 compatibility by fixing everything to make these
test MODs work: https://wiki.openmpt.org/Development:_Test_Cases/XM
(many, many changes...!)
* FIX: When loading XMs create empty patterns (the player can handle this, the
pattern display however does not like null rows or null elements
* FIX: Fix of 3.9 to 3.9.1 introduced bug of envelope fade out
* FIX: AutoVibrato with XMs was broken - also with IT (copy bug from vibrato)
* FIX: Update check did not update the date of last check
* FIX: VolumeSlides and FineVolSlides plus volume column volume slides

## New in Version 3.9.1
* NEW: Colorful pattern display with previous and next pattern displayed in dim
colors. Following pattern optimized, drawn completely manually and with
Expand All @@ -91,7 +125,7 @@ JavaMod incorporates modified versions of the following libraries:
Press ESC to leave editor mode. (The editor mode is not a real editor!)
* NEW: A double click on the instrument column will open instrument/sample
dialog for display
* NEw: Zoom for instrument and sample display
* NEW: Zoom for instrument and sample display
* NEW: Overhaul of most of the graphical implementations
* NEW: removed test classes from project
* NEW: Added a headless mode for command line usage. That way no GUI elements
Expand Down
6 changes: 5 additions & 1 deletion source/de/quippy/javamod/main/gui/MainForm.java
Original file line number Diff line number Diff line change
Expand Up @@ -1575,7 +1575,11 @@ private void doIconify()
windowsVisibleState = new boolean[windows.size()];
for (int x=0; x<windows.size(); x++)
windowsVisibleState[x] = windows.get(x).isVisible();
dispose();
// Needed for KDE - so that JavaMod disappears in task bar when moved
// to the System Tray
// But has the downside, that that pattern, sample, instrument
// dialog get hidden before visibility status can be saved
//dispose();
setVisible(false);
}
}
Expand Down
73 changes: 42 additions & 31 deletions source/de/quippy/javamod/multimedia/mod/ModConstants.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,6 @@ public ModConstants()
public static final int BASEPERIOD = 428;
public static final int BASENOTEINDEX = 48;

// Some Loading constants to sanitize
public static final int MAX_PATTERN_SIZE = 1024;

//The frequency tables supported
public static final int STM_S3M_TABLE = 0x01;
public static final int IT_LINEAR_TABLE = 0x02;
Expand Down Expand Up @@ -329,15 +326,23 @@ public static enum PanBits { Pan4Bit, Pan6Bit, Pan8Bit }
216,203,192,181,171,161,152,144,136,128,121,114,0,

/* Arpeggio on -1 finetuned samples can do an out-of-bounds read from
** this table. Here's the correct overflow values from the
** "CursorPosTable" and "UnshiftedKeymap" table in the PT code, which are
** located right after the period table. These tables and their order didn't
** seem to change in the different PT1.x/PT2.x versions (I checked the
** source codes). (8bitbubsy)
* this table. Here's the correct overflow values from the
* "CursorPosTable" and "UnshiftedKeymap" table in the PT code, which are
* located right after the period table. These tables and their order didn't
* seem to change in the different PT1.x/PT2.x versions (I checked the
* source codes). (8bitbubsy)
*/
774,1800,2314,3087,4113,4627,5400,6426,6940,7713,
8739,9253,24625,12851,13365
};
/**
* Table for Invert Loop and Funk Repeat effects (EFx, .MOD only)
*/
public static final int modEFxTable[] =
{
0x00, 0x05, 0x06, 0x07, 0x08, 0x0A, 0x0B, 0x0D,
0x10, 0x13, 0x16, 0x1A, 0x20, 0x2B, 0x40, 0x80
};
/**
* FT2 linear periods table
* bit-exact to FT2 table from 8bitbubsy's FT2 Clone
Expand Down Expand Up @@ -658,6 +663,16 @@ public static enum PanBits { Pan4Bit, Pan6Bit, Pan8Bit }
0, 24, 49, 74, 97, 120, 141, 161, 180, 197, 212, 224, 235, 244, 250, 253,
255, 253, 250, 244, 235, 224, 212, 197, 180, 161, 141, 120, 97, 74, 49, 24,
};
// /**
// * OMPT Random table - is used with OPMT files only!
// */
// public static final int [] ModRandomTable =
// {
// 98, -127, -43, 88, 102, 41, -65, -94, 125, 20, -71, -86, -70, -32, -16, -96,
// 17, 72, 107, -5, 116, -69, -62, -40, 10, -61, 65, 109, -18, -38, -13, -76,
// -23, 88, 21, -94, 8, 106, 21, -112, 6, 109, 20, -88, -30, 9, -127, 118,
// 42, -34, 89, -4, -51, -72, 21, -29, 112, 123, 84, -101, -92, 98, -54, -95
// };
/**
* FT2 Auto Vibrato
*/
Expand Down Expand Up @@ -704,7 +719,7 @@ public static enum PanBits { Pan4Bit, Pan6Bit, Pan8Bit }
63455, 63587, 63719, 63850, 63982, 64113, 64243, 64374, 64504, 64634, 64763, 64893, 65022, 65151, 65279, 65408, 65536
};
/**
* Basic C4 S3M/IT --> These Values are from above (Octave 0)!
* Basic C4 S3M/IT
*/
public static final int FreqS3MTable[] =
{
Expand All @@ -715,7 +730,7 @@ public static enum PanBits { Pan4Bit, Pan6Bit, Pan8Bit }
* old "fineTune" effekt as they are downward compatible
* calculated by 8363*2^((i-8)/(12*8))
*/
public static final int [] it_fineTuneTable =
public static final int [] IT_fineTuneTable =
{
7895, 7941, 7985, 8046, 8107, 8169, 8232, 8280,
8363, 8413, 8463, 8529, 8581, 8651, 8723, 8757
Expand All @@ -734,9 +749,10 @@ public static enum PanBits { Pan4Bit, Pan6Bit, Pan8Bit }
65536, 61858, 58386, 55109, 52016, 49097, 46341, 43740,
41285, 38968, 36781, 34716, 32768, 30929, 29193, 27554
};
// For some reason, these tables are exactly the other way round with me
// than normally used. What is SlideUp is SlideDown at Schism, and vice versa.
// This would affect Vibrato, AutoVibrato, (Fine|Extra Fine|PortaUp/Down ...
// These tables are exactly the other way round with me than normally used.
// What is SlideUp is SlideDown at Schism, and vice versa.
// This would affect Vibrato, AutoVibrato, (Fine|Extra Fine|PortaUp/Down ...
// As we use periods instead of frequencies, that is why, and will not change
/**
* Used by IT Tracker Mods if linear frequencies enabled
*/
Expand Down Expand Up @@ -933,17 +949,13 @@ public static enum PanBits { Pan4Bit, Pan6Bit, Pan8Bit }
0.0749894231557846d, 0.0733879879117012d, 0.0718207582831383d, 0.0702869966626167d,
0.0687859877943993d, 0.0673170387744904d, 0.0658794566988945d, 0.0644725710153580d
};
public static final int IT_VolColumnPortaNotSpeedTranslation[] =
/**
* Translation for porta2note speed - 10 values
*/
public static final int IT_VolColumnPortaNoteSpeedTranslation[] =
{
0x00, 0x01, 0x04, 0x08, 0x10, 0x20, 0x40, 0x60, 0x80, 0xFF
};
// Table for Invert Loop and Funk Repeat effects (EFx, .MOD only)
public static final int modEFxTable[] =
{
0x00, 0x05, 0x06, 0x07, 0x08, 0x0A, 0x0B, 0x0D,
0x10, 0x13, 0x16, 0x1A, 0x20, 0x2B, 0x40, 0x80
};

/**
* For the patterndisplay: retrieve a String for the given note index
* @param index
Expand Down Expand Up @@ -983,16 +995,10 @@ public static int getNoteIndexForPeriod(final int period)
else
return i;
}
// /**
// * For the patterndisplay: retrieve a String for the given period
// * @param period
// * @return
// */
// public static String getNoteNameForPeriod(final int period)
// {
// return getNoteNameForIndex(getNoteIndexForPeriod(period));
// }
public static final char[] numbers =
/**
* Used by getAsHex
*/
public static final char[] numbers =
{
'0', '1', '2', '3', '4',
'5', '6', '7', '8', '9',
Expand All @@ -1018,6 +1024,11 @@ public static String getAsHex(final int value, final int digits)
// for (int i=0; i<zeros; i++) result.append('0');
// return (result.append(hex)).toString();
}
/**
* convert the ModPlug version information to a readable string
* @param version
* @return
*/
public static String getModPlugVersionString(final int version)
{
if (version==0) return "Unknown";
Expand Down
126 changes: 63 additions & 63 deletions source/de/quippy/javamod/multimedia/mod/ModInfoPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,69 @@ public boolean getModInstrumentDialogisVisible()
else
return oldModInstrumentDialogVisibility!=0;
}
/**
* @param patternDialogLocation the patternDialogLocation to set
*/
protected void setPatternDialogLocation(final Point newPatternDialogLocation)
{
patternDialogLocation = newPatternDialogLocation;
}
/**
* @param patternDialogSize the patternDialogSize to set
*/
protected void setPatternDialogSize(final Dimension newPatternDialogSize)
{
patternDialogSize = newPatternDialogSize;
}
/**
* @param patternDialogVisable the patternDialogVisable to set
*/
protected void setPatternDialogVisable(final boolean newPatternDialogVisable)
{
oldModPatternDialogVisibility = (newPatternDialogVisable)?1:0;
}
/**
* @param sampleDialogLocation the sampleDialogLocation to set
*/
protected void setSampleDialogLocation(final Point newSampleDialogLocation)
{
sampleDialogLocation = newSampleDialogLocation;
}
/**
* @param sampleDialogSize the sampleDialogSize to set
*/
protected void setSampleDialogSize(final Dimension newSampleDialogSize)
{
sampleDialogSize = newSampleDialogSize;
}
/**
* @param sampleDialogVisable the sampleDialogVisable to set
*/
protected void setSampleDialogVisable(final boolean newSampleDialogVisable)
{
oldModSampleDialogVisibility = (newSampleDialogVisable)?1:0;
}
/**
* @param instrumentDialogLocation the instrumentDialogLocation to set
*/
protected void setInstrumentDialogLocation(final Point newInstrumentDialogLocation)
{
instrumentDialogLocation = newInstrumentDialogLocation;
}
/**
* @param instrumentDialogSize the instrumentDialogSize to set
*/
protected void setInstrumentDialogSize(final Dimension newInstrumentDialogSize)
{
instrumentDialogSize = newInstrumentDialogSize;
}
/**
* @param instrumentDialogVisable the instrumentDialogVisable to set
*/
protected void setInstrumentDialogVisable(final boolean newInstrumentDialogVisable)
{
oldModInstrumentDialogVisibility = (newInstrumentDialogVisable)?1:0;
}
/**
* @since 13.10.2007
*/
Expand Down Expand Up @@ -799,69 +862,6 @@ private JTextArea getModInfo_Samples()
}
return modInfo_Samples;
}
/**
* @param patternDialogLocation the patternDialogLocation to set
*/
protected void setPatternDialogLocation(Point newPatternDialogLocation)
{
patternDialogLocation = newPatternDialogLocation;
}
/**
* @param patternDialogSize the patternDialogSize to set
*/
protected void setPatternDialogSize(Dimension newPatternDialogSize)
{
patternDialogSize = newPatternDialogSize;
}
/**
* @param patternDialogVisable the patternDialogVisable to set
*/
protected void setPatternDialogVisable(boolean newPatternDialogVisable)
{
oldModPatternDialogVisibility = (newPatternDialogVisable)?1:0;
}
/**
* @param sampleDialogLocation the sampleDialogLocation to set
*/
protected void setSampleDialogLocation(Point newSampleDialogLocation)
{
sampleDialogLocation = newSampleDialogLocation;
}
/**
* @param sampleDialogSize the sampleDialogSize to set
*/
protected void setSampleDialogSize(Dimension newSampleDialogSize)
{
sampleDialogSize = newSampleDialogSize;
}
/**
* @param sampleDialogVisable the sampleDialogVisable to set
*/
protected void setSampleDialogVisable(boolean newSampleDialogVisable)
{
oldModSampleDialogVisibility = (newSampleDialogVisable)?1:0;
}
/**
* @param instrumentDialogLocation the instrumentDialogLocation to set
*/
protected void setInstrumentDialogLocation(Point newInstrumentDialogLocation)
{
instrumentDialogLocation = newInstrumentDialogLocation;
}
/**
* @param instrumentDialogSize the instrumentDialogSize to set
*/
protected void setInstrumentDialogSize(Dimension newInstrumentDialogSize)
{
instrumentDialogSize = newInstrumentDialogSize;
}
/**
* @param instrumentDialogVisable the instrumentDialogVisable to set
*/
protected void setInstrumentDialogVisable(boolean newInstrumentDialogVisable)
{
oldModInstrumentDialogVisibility = (newInstrumentDialogVisable)?1:0;
}
/**
* gets called from ModPatternDialog to show the selected instrument.
* If this mod has no instruments, it will show the sample
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -626,7 +626,10 @@ private int drawButton(final Graphics2D g, int x, int y, final int colorIndex, f
g.setColor(BUTTONS[colorIndex]);
g.fill3DRect(x, y, x + buttonLength - 1, y + charDim.height, true);
g.setColor(FOREGROUND[colorIndex]);
g.drawString(ModConstants.getAsHex(rowNumber, 2), x + charDim.width, y + charDim.height - 1);
if (rowNumber<0x100)
g.drawString(ModConstants.getAsHex(rowNumber, 2), x + charDim.width, y + charDim.height - 1);
else
g.drawString(ModConstants.getAsHex(rowNumber, 3), x + (charDim.width>>1), y + charDim.height - 1);
}
return x + buttonLength;
}
Expand Down
Loading

0 comments on commit 4c14811

Please sign in to comment.