mirror of
https://github.com/OldUnreal/libxmp.git
synced 2026-04-02 21:37:43 -07:00
* Digital Symphony stores patterns in blocks of 2000.
libxmp previously did not handle this quirk.
* Implemented !Tracker effect 16 Line Jump, which is also used
by Digital Symphony. This effect acts like Pattern Break, except
it jumps into the current pattern instead of the next pattern.
It can also be used in conjunction with Position Jump and Pattern
Break to change their target row. This effect required minor flow
hacks to work without clobbering running time.
* Fixed a scan bug related to FX_S3M_TEMPO where tempo values under
32 would be ignored despite them being higher than the minimum
allowed tempo.
* Fixed a memory leak in the Digital Symphony loader.
* Digital Symphony effects added:
- Implemented 1F Invert Loop. This required a new quirk as invert
loop is implemented in a way that assumes QUIRK_PROTRACK may be
changed by xmp_set_player.
- Implemented 2A Volume Slide + Fine Slide Down.
- Implemented 2B Line Jump (same as !Tracker Line Jump).
- Implemented 30 Set Stereo.
- Implemented 32 Unset Sample Repeat. This required switching
Digital Symphony modules to IT sustain loops instead of regular
loops. This also required adding support for sustain loops to
invert loop.
* Digital Symphony effects fixed:
- Portamento effects 01 02 21 and 22 were incorrectly using
effect memory.
- Fine portamento effects 11 12 1a and 1b were being converted
to Exx instead of their equivalent full byte parameter effects.
- Vibrato and tremolo effects 04 06 07 now update on tick 0.
- The highest 3 bits of 09 Set Sample Offset are now translated
to FX_HIOFFSET instead of being ignored.
- 0B Position Jump uses a hex parameter in Digital Symphony, but
libxmp was treating it as decimal.
- 0F Set Speed now ignores parameter 0 and clamps values >255.
- 2F Set Tempo now only ignores parameter 0, and clamps other
valid tempos instead of ignoring them.
- Extended effects 16 1c 1d and 1e (which libxmp currently does
not have dedicated effects for) are now bounded with a clamp
instead of a modulo, which makes them slightly less wrong.
25 lines
487 B
C
25 lines
487 B
C
#include "test.h"
|
|
|
|
TEST(test_loader_arch)
|
|
{
|
|
xmp_context opaque;
|
|
struct xmp_module_info info;
|
|
FILE *f;
|
|
int ret;
|
|
|
|
f = fopen("data/format_arch.data", "r");
|
|
|
|
opaque = xmp_create_context();
|
|
ret = xmp_load_module(opaque, "data/m/AOM-Mind.Tracker");
|
|
fail_unless(ret == 0, "module load");
|
|
|
|
xmp_get_module_info(opaque, &info);
|
|
|
|
ret = compare_module(info.mod, f);
|
|
fail_unless(ret == 0, "format not correctly loaded");
|
|
|
|
xmp_release_module(opaque);
|
|
xmp_free_context(opaque);
|
|
}
|
|
END_TEST
|