RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.cpp,v
retrieving revision 1.45
diff -u -r1.45 imuse.cpp
|
|
|
130 | 130 | void key_on(uint8 chan, byte data, byte velocity); |
131 | 131 | void part_set_transpose(uint8 chan, byte relative, int8 b); |
132 | 132 | void parse_sysex(byte *p, uint len); |
133 | | void maybe_jump(byte *data); |
| 133 | void maybe_jump (byte cmd, uint track, uint beat, uint tick); |
134 | 134 | void maybe_set_transpose(byte *data); |
135 | 135 | void maybe_part_onoff(byte *data); |
136 | 136 | void maybe_set_volume(byte *data); |
… |
… |
|
2097 | 2106 | len -= 2; |
2098 | 2107 | |
2099 | 2108 | switch (code = *p++) { |
2100 | | case 0: /* part on/off? */ |
2101 | | // This seems to do the right thing for Monkey 2, at least. |
2102 | | a = *p++ & 0x0F; |
2103 | | part = get_part(a); |
2104 | | if (part) { |
2105 | | debug(2, "%d => turning %s part %d", p[1], (p[1] == 2) ? "OFF" : "ON", a); |
2106 | | part->set_onoff(p[1] != 2); |
2107 | | } |
| 2109 | case 0: |
| 2110 | if (len > 2) { |
| 2111 | // Part on/off? |
| 2112 | // This seems to do the right thing for Monkey 2, at least. |
| 2113 | a = *p++ & 0x0F; |
| 2114 | part = get_part(a); |
| 2115 | if (part) { |
| 2116 | debug(2, "%d => turning %s part %d", p[1], (p[1] == 2) ? "OFF" : "ON", a); |
| 2117 | part->set_onoff(p[1] != 2); |
| 2118 | } |
| 2119 | } // end if |
| 2120 | |
| 2121 | // Jamieson630: Sam & Max uses this for something entirely different. |
| 2122 | // The data is much shorter, hence the len > 2 check above. |
| 2123 | break; |
| 2124 | |
| 2125 | case 1: |
| 2126 | // This SysEx is used in Sam & Max to provide loop (and |
| 2127 | // possibly marker) information. Presently, only the |
| 2128 | // loop information is implemented. |
| 2129 | if (_scanning) |
| 2130 | break; |
| 2131 | maybe_jump (p[0], p[1] - 1, (read_word (p + 2) - 1) * 4 + p[4], ((p[5] * _ticks_per_beat) >> 2) + p[6]); |
2108 | 2132 | break; |
2109 | 2133 | |
2110 | 2134 | case 16: /* set instrument in part */ |
… |
… |
|
2140 | 2164 | if (_scanning) |
2141 | 2165 | break; |
2142 | 2166 | decode_sysex_bytes(p + 1, buf, len - 2); |
2143 | | maybe_jump(buf); |
| 2167 | maybe_jump (buf[0], read_word (buf + 1), read_word (buf + 3), read_word (buf + 5)); |
2144 | 2168 | break; |
2145 | 2169 | |
2146 | 2170 | case 49: /* hook - global transpose */ |
… |
… |
|
2212 | 2236 | } |
2213 | 2237 | } |
2214 | 2238 | |
2215 | | void Player::maybe_jump(byte *data) |
| 2239 | void Player::maybe_jump (byte cmd, uint track, uint beat, uint tick) |
2216 | 2240 | { |
2217 | | byte cmd; |
2218 | | |
2219 | | cmd = data[0]; |
2220 | | |
2221 | 2241 | /* is this the hook i'm waiting for? */ |
2222 | 2242 | if (cmd && _hook._jump != cmd) |
2223 | 2243 | return; |
… |
… |
|
2226 | 2246 | if (cmd != 0 && cmd < 0x80) |
2227 | 2247 | _hook._jump = 0; |
2228 | 2248 | |
2229 | | jump(read_word(data + 1), read_word(data + 3), read_word(data + 5)); |
| 2249 | jump (track, beat, tick); |
2230 | 2250 | } |
2231 | 2251 | |
2232 | 2252 | void Player::maybe_set_transpose(byte *data) |