Change cur_row to actually mean current row
It used to really mean "next row", and resulted in showing the wrong row in the pattern view (row -1 instead of the last row). Fixes #14.
This commit is contained in:
parent
215f72c19d
commit
e347807abf
5 changed files with 12 additions and 12 deletions
|
|
@ -72,7 +72,7 @@
|
||||||
code: <a href="http://github.com/a1k0n/jsxm/">github.com/a1k0n/jsxm</a>
|
code: <a href="http://github.com/a1k0n/jsxm/">github.com/a1k0n/jsxm</a>
|
||||||
todo:
|
todo:
|
||||||
- missing XM effects:
|
- missing XM effects:
|
||||||
- E3x, E4x, E5x, E6x, E7x, E9x, EDx, EEx
|
- E3x, E4x, E6x, E7x, E9x, EDx, EEx
|
||||||
- 7xy - tremolo
|
- 7xy - tremolo
|
||||||
- Kxx, Lxx, Pxy, Txy
|
- Kxx, Lxx, Pxy, Txy
|
||||||
- render pattern with the wider fonts for fewer channels
|
- render pattern with the wider fonts for fewer channels
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ exports['test XM startup'] = function(assert) {
|
||||||
assert.equal(XMPlayer.cur_songpos, 0, 'advance to initial song position');
|
assert.equal(XMPlayer.cur_songpos, 0, 'advance to initial song position');
|
||||||
assert.equal(XMPlayer.cur_pat, 0, 'advance to pattern 0');
|
assert.equal(XMPlayer.cur_pat, 0, 'advance to pattern 0');
|
||||||
assert.equal(XMPlayer.cur_tick, 0, 'advance to tick 0');
|
assert.equal(XMPlayer.cur_tick, 0, 'advance to tick 0');
|
||||||
assert.equal(XMPlayer.cur_row, 1, 'advance to row 1');
|
assert.equal(XMPlayer.cur_row, 0, 'advance to row 0');
|
||||||
};
|
};
|
||||||
|
|
||||||
exports['test non-existing song position'] = function(assert) {
|
exports['test non-existing song position'] = function(assert) {
|
||||||
|
|
@ -33,7 +33,7 @@ exports['test non-existing song position'] = function(assert) {
|
||||||
XMPlayer.nextTick();
|
XMPlayer.nextTick();
|
||||||
assert.equal(XMPlayer.cur_songpos, 0, 'advance to initial song position');
|
assert.equal(XMPlayer.cur_songpos, 0, 'advance to initial song position');
|
||||||
assert.equal(XMPlayer.cur_pat, 0, 'advance to pattern 0');
|
assert.equal(XMPlayer.cur_pat, 0, 'advance to pattern 0');
|
||||||
assert.equal(XMPlayer.cur_row, 1, 'advance to row 1');
|
assert.equal(XMPlayer.cur_row, 0, 'advance to row 0');
|
||||||
XMPlayer.nextTick();
|
XMPlayer.nextTick();
|
||||||
assert.equal(XMPlayer.cur_songpos, 1, 'advance to song position 1');
|
assert.equal(XMPlayer.cur_songpos, 1, 'advance to song position 1');
|
||||||
assert.equal(XMPlayer.cur_pat, 1, 'advance to pattern 1');
|
assert.equal(XMPlayer.cur_pat, 1, 'advance to pattern 1');
|
||||||
|
|
@ -92,7 +92,7 @@ exports['test non-existing song position with loop'] = function(assert) {
|
||||||
XMPlayer.nextTick();
|
XMPlayer.nextTick();
|
||||||
assert.equal(XMPlayer.cur_songpos, 0, 'advance to initial song position');
|
assert.equal(XMPlayer.cur_songpos, 0, 'advance to initial song position');
|
||||||
assert.equal(XMPlayer.cur_pat, 0, 'advance to pattern 0');
|
assert.equal(XMPlayer.cur_pat, 0, 'advance to pattern 0');
|
||||||
assert.equal(XMPlayer.cur_row, 1, 'advance to row 1');
|
assert.equal(XMPlayer.cur_row, 0, 'advance to row 0');
|
||||||
XMPlayer.nextTick();
|
XMPlayer.nextTick();
|
||||||
assert.equal(XMPlayer.cur_songpos, 1, 'advance to song position 1');
|
assert.equal(XMPlayer.cur_songpos, 1, 'advance to song position 1');
|
||||||
assert.equal(XMPlayer.cur_pat, 1, 'advance to pattern 1');
|
assert.equal(XMPlayer.cur_pat, 1, 'advance to pattern 1');
|
||||||
|
|
@ -115,7 +115,7 @@ exports['test non-existing song position with invalid loop'] = function(assert)
|
||||||
XMPlayer.nextTick();
|
XMPlayer.nextTick();
|
||||||
assert.equal(XMPlayer.cur_songpos, 0, 'advance to initial song position');
|
assert.equal(XMPlayer.cur_songpos, 0, 'advance to initial song position');
|
||||||
assert.equal(XMPlayer.cur_pat, 0, 'advance to pattern 0');
|
assert.equal(XMPlayer.cur_pat, 0, 'advance to pattern 0');
|
||||||
assert.equal(XMPlayer.cur_row, 1, 'advance to row 1');
|
assert.equal(XMPlayer.cur_row, 0, 'advance to row 0');
|
||||||
XMPlayer.nextTick();
|
XMPlayer.nextTick();
|
||||||
assert.equal(XMPlayer.cur_songpos, 1, 'advance to song position 1');
|
assert.equal(XMPlayer.cur_songpos, 1, 'advance to song position 1');
|
||||||
assert.equal(XMPlayer.cur_pat, 1, 'advance to pattern 1');
|
assert.equal(XMPlayer.cur_pat, 1, 'advance to pattern 1');
|
||||||
|
|
|
||||||
|
|
@ -26,9 +26,9 @@ exports['test instrument trigger'] = function(assert) {
|
||||||
XMPlayer.nextRow();
|
XMPlayer.nextRow();
|
||||||
ch.pan = 1; // forcibly override panning
|
ch.pan = 1; // forcibly override panning
|
||||||
ch.off = 100; // and sample offset
|
ch.off = 100; // and sample offset
|
||||||
assert.equal(XMPlayer.cur_row, 1, 'row 1');
|
assert.equal(XMPlayer.cur_row, 0, 'row 0');
|
||||||
XMPlayer.nextRow();
|
XMPlayer.nextRow();
|
||||||
assert.equal(XMPlayer.cur_row, 2, 'row 2');
|
assert.equal(XMPlayer.cur_row, 1, 'row 1');
|
||||||
assert.equal(ch.note, 48, 'note same after inst trigger');
|
assert.equal(ch.note, 48, 'note same after inst trigger');
|
||||||
assert.equal(ch.period, 1152, 'period same after inst trigger');
|
assert.equal(ch.period, 1152, 'period same after inst trigger');
|
||||||
assert.equal(ch.vol, 64, 'vol reset after inst trigger');
|
assert.equal(ch.vol, 64, 'vol reset after inst trigger');
|
||||||
|
|
|
||||||
8
xm.js
8
xm.js
|
|
@ -133,6 +133,7 @@ function setCurrentPattern() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function nextRow() {
|
function nextRow() {
|
||||||
|
player.cur_row++;
|
||||||
if (player.cur_pat == -1 || player.cur_row >= player.xm.patterns[player.cur_pat].length) {
|
if (player.cur_pat == -1 || player.cur_row >= player.xm.patterns[player.cur_pat].length) {
|
||||||
player.cur_row = 0;
|
player.cur_row = 0;
|
||||||
player.cur_songpos++;
|
player.cur_songpos++;
|
||||||
|
|
@ -142,7 +143,6 @@ function nextRow() {
|
||||||
}
|
}
|
||||||
var p = player.xm.patterns[player.cur_pat];
|
var p = player.xm.patterns[player.cur_pat];
|
||||||
var r = p[player.cur_row];
|
var r = p[player.cur_row];
|
||||||
player.cur_row++;
|
|
||||||
for (var i = 0; i < r.length; i++) {
|
for (var i = 0; i < r.length; i++) {
|
||||||
var ch = player.xm.channelinfo[i];
|
var ch = player.xm.channelinfo[i];
|
||||||
var inst = ch.inst;
|
var inst = ch.inst;
|
||||||
|
|
@ -331,13 +331,13 @@ function nextTick() {
|
||||||
}
|
}
|
||||||
if (isNaN(ch.period)) {
|
if (isNaN(ch.period)) {
|
||||||
console.log(prettify_notedata(
|
console.log(prettify_notedata(
|
||||||
player.xm.patterns[player.cur_pat][player.cur_row-1][j]),
|
player.xm.patterns[player.cur_pat][player.cur_row][j]),
|
||||||
"set channel", j, "period to NaN");
|
"set channel", j, "period to NaN");
|
||||||
}
|
}
|
||||||
if (inst === undefined) continue;
|
if (inst === undefined) continue;
|
||||||
if (ch.env_vol === undefined) {
|
if (ch.env_vol === undefined) {
|
||||||
console.log(prettify_notedata(
|
console.log(prettify_notedata(
|
||||||
player.xm.patterns[player.cur_pat][player.cur_row-1][j]),
|
player.xm.patterns[player.cur_pat][player.cur_row][j]),
|
||||||
"set channel", j, "env_vol to undefined, but note is playing");
|
"set channel", j, "env_vol to undefined, but note is playing");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -590,7 +590,7 @@ function audio_cb(e) {
|
||||||
scopes: scopes,
|
scopes: scopes,
|
||||||
songpos: player.cur_songpos,
|
songpos: player.cur_songpos,
|
||||||
pat: player.cur_pat,
|
pat: player.cur_pat,
|
||||||
row: player.cur_row - 1
|
row: player.cur_row
|
||||||
});
|
});
|
||||||
offset += tickduration;
|
offset += tickduration;
|
||||||
player.cur_ticksamp += tickduration;
|
player.cur_ticksamp += tickduration;
|
||||||
|
|
|
||||||
|
|
@ -121,7 +121,7 @@ function eff_t0_d(ch, data) { // pattern jump
|
||||||
if (player.cur_songpos >= player.xm.songpats.length)
|
if (player.cur_songpos >= player.xm.songpats.length)
|
||||||
player.cur_songpos = player.xm.song_looppos;
|
player.cur_songpos = player.xm.song_looppos;
|
||||||
player.cur_pat = player.xm.songpats[player.cur_songpos];
|
player.cur_pat = player.xm.songpats[player.cur_songpos];
|
||||||
player.cur_row = data;
|
player.cur_row = data - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
function eff_t0_e(ch, data) { // extended effects!
|
function eff_t0_e(ch, data) { // extended effects!
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue