diff --git a/src/tools/smps2asm.cc b/src/tools/smps2asm.cc index 4863ce2..4d2c17b 100644 --- a/src/tools/smps2asm.cc +++ b/src/tools/smps2asm.cc @@ -384,12 +384,12 @@ class DumpSmps { istream ∈ ostream &out; string const &projname; - int sonicver, startloc, offset, len; + int sonicver, dacver, psgver, startloc, offset, len; bool sfx, s3kmode; public: - DumpSmps(istream &i, ostream &o, int s, int off, + DumpSmps(istream &i, ostream &o, int s, int d, int p, int off, string const &nm, bool tf, bool s3km) - : in(i), out(o), projname(nm), sonicver(s), offset(off), sfx(tf), s3kmode(s3km) { + : in(i), out(o), projname(nm), sonicver(s), dacver(d), psgver(p), offset(off), sfx(tf), s3kmode(s3km) { startloc = in.tellg(); in.seekg(0, ios::end); len = in.tellg(); @@ -603,7 +603,7 @@ class DumpSmps { PrintHex2(out, keydisp, false); PrintHex2(out, initvol, false); PrintHex2(out, modctrl, false); - BaseNote::print_psg_tone(out, tone, sonicver, true); + BaseNote::print_psg_tone(out, tone, psgver, true); out << endl; // Add to queue. @@ -785,7 +785,7 @@ class DumpSmps { auto ty = explored.find(off); //assert(ty != explored.end()); if (ty != explored.end()) { - note->print(out, sonicver, ty->second, labels, s3kmode); + note->print(out, sonicver, dacver, psgver, ty->second, labels, s3kmode); } } @@ -869,6 +869,12 @@ static void usage() { << "\t \tSMPS type. {version} can be '1' Sonic 1, '2' for Sonic 2 or" << endl << "\t \t'3' for Sonic 3, '4' for Sonic & Knuckles, or '5' for Sonic" << endl << "\t \t3D Blast." << endl; + cerr << "\t-d,--dacver \tSets DAC version to {version}. {version} can be '1' Sonic 1," << endl + << "\t \t'2' for Sonic 2, '3' for Sonic 3, '4' for Sonic & Knuckles," << endl + << "\t \tor '5' for Sonic 3D Blast." << endl; + cerr << "\t-p,--psgver \tSets PSG version to {version}. {version} can be '1' Sonic 1," << endl + << "\t \t'2' for Sonic 2, '3' for Sonic 3, '4' for Sonic & Knuckles," << endl + << "\t \tor '5' for Sonic 3D Blast." << endl; cerr << "\t-3,--s3kmode \tThis flag is valid for Sonic 1 and Sonic 2 only; this will" << endl << "\t \tcause all sequences of durations after a rest to be printed" << endl << "\t \twith the rests shown explicitly." << endl @@ -882,7 +888,7 @@ static void usage() { void dump_single_entry ( istream &in, ostream &out, string const &projname, - int pointer, int offset, int sonicver, bool saxman, bool sfx, bool s3kmode + int pointer, int offset, int sonicver, int dacver, int psgver, bool saxman, bool sfx, bool s3kmode ) { if (pointer) { @@ -914,10 +920,10 @@ void dump_single_entry } if (sonicver == 1) { - DumpSmps smps(*src, out, sonicver, offset, projname, sfx, s3kmode); + DumpSmps smps(*src, out, sonicver, dacver, psgver, offset, projname, sfx, s3kmode); smps.dump_smps(); } else { - DumpSmps smps(*src, out, sonicver, offset, projname, sfx, s3kmode); + DumpSmps smps(*src, out, sonicver, dacver, psgver, offset, projname, sfx, s3kmode); smps.dump_smps(); } } @@ -929,17 +935,19 @@ int main(int argc, char *argv[]) { {"saxman" , no_argument , nullptr, 'u'}, {"offset" , required_argument, nullptr, 'o'}, {"sonicver", required_argument, nullptr, 'v'}, + {"dacver" , required_argument, nullptr, 'd'}, + {"psgver" , required_argument, nullptr, 'p'}, {"sfx" , no_argument , nullptr, 's'}, {"s3kmode" , no_argument , nullptr, '3'}, {nullptr, 0, nullptr, 0} }; bool sfx = false, saxman = false, s3kmode = false, bankmode = false; - int pointer = 0, offset = 0, ptrtable = 0, sonicver = -1; + int pointer = 0, offset = 0, ptrtable = 0, sonicver = -1, dacver = -1, psgver = -1; while (true) { int option_index = 0; - int c = getopt_long(argc, argv, "b::x::uo:v:s3", + int c = getopt_long(argc, argv, "b::x::uo:v:d:p:s3", long_options, &option_index); if (c == -1) { break; @@ -973,6 +981,18 @@ int main(int argc, char *argv[]) { case 'v': sonicver = strtoul(optarg, nullptr, 0); + if (dacver == -1) + dacver = sonicver; + if (psgver == -1) + psgver = sonicver; + break; + + case 'd': + dacver = strtoul(optarg, nullptr, 0); + break; + + case 'p': + psgver = strtoul(optarg, nullptr, 0); break; case '3': @@ -1031,13 +1051,13 @@ int main(int argc, char *argv[]) { for (unsigned ii = 0; ii < ptrtable.size(); ii++) { snprintf(buf, sizeof(buf), fmt, ii); dump_single_entry(fin, fout, projname + buf, ptrtable[ii] & 0x7FFF, - 0, sonicver, saxman, sfx, s3kmode); + 0, sonicver, dacver, psgver, saxman, sfx, s3kmode); if (ii + 1 < ptrtable.size()) { fout << endl; } } } else { dump_single_entry(fin, fout, projname, pointer, offset, sonicver, - saxman, sfx, s3kmode); + dacver, psgver, saxman, sfx, s3kmode); } } diff --git a/src/tools/songtrack.cc b/src/tools/songtrack.cc index 6a1598b..5f06f77 100644 --- a/src/tools/songtrack.cc +++ b/src/tools/songtrack.cc @@ -43,12 +43,12 @@ void BaseNote::force_linebreak(ostream &out, bool force) { notesprinted = 0; } -void BaseNote::write(ostream &out, int sonicver, size_t offset) const { - ignore_unused_variable_warning(out, sonicver, offset); +void BaseNote::write(ostream &out, int sonicver, int dacver, int psgver, size_t offset) const { + ignore_unused_variable_warning(out, sonicver, dacver, psgver, offset); } void Duration::print(ostream &out, - int sonicver, + int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, multimap &labels, bool s3kmode) const { @@ -57,7 +57,7 @@ void Duration::print(ostream &out, // need this to fix playback of rests when porting from S1/S2 to S3+. if ((tracktype == LocTraits::eFMTrack || tracktype == LocTraits::ePSGTrack) && s3kmode && last_note && last_note->is_rest() && need_rest) { - last_note->print(out, sonicver, tracktype, labels, s3kmode); + last_note->print(out, sonicver, dacver, psgver, tracktype, labels, s3kmode); } need_rest = true; @@ -79,13 +79,13 @@ FMVoice::FMVoice(istream &in, int sonicver, int n) voc.read(in, sonicver); } -void FMVoice::print(ostream &out, int sonicver, LocTraits::LocType tracktype, +void FMVoice::print(ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, multimap &labels, bool s3kmode) const { - ignore_unused_variable_warning(tracktype, labels, s3kmode); + ignore_unused_variable_warning(dacver, psgver, tracktype, labels, s3kmode); voc.print(out, sonicver, id); } -static void print_dac_sample(ostream &out, int val, int sonicver, bool flag) { +static void print_dac_sample(ostream &out, int val, int dacver, bool flag) { static string s12daclut[] = { "nRst", "dKick", "dSnare", "dClap", "dScratch", "dTimpani", "dHiTom", "dVLowClap", "dHiTimpani", "dMidTimpani", "dLowTimpani", "dVLowTimpani", @@ -144,24 +144,24 @@ static void print_dac_sample(ostream &out, int val, int sonicver, bool flag) { }; size_t note = val - 0x80; - if (sonicver == 5 && note <= sizeof(s3ddaclut) / sizeof(s3ddaclut[0])) { + if (dacver == 5 && note <= sizeof(s3ddaclut) / sizeof(s3ddaclut[0])) { PrintName(out, s3ddaclut[note], flag); - } else if (sonicver == 4 && note <= sizeof(skdaclut) / sizeof(skdaclut[0])) { + } else if (dacver == 4 && note <= sizeof(skdaclut) / sizeof(skdaclut[0])) { PrintName(out, skdaclut[note], flag); - } else if (sonicver == 3 && note <= sizeof(s3daclut) / sizeof(s3daclut[0])) { + } else if (dacver == 3 && note <= sizeof(s3daclut) / sizeof(s3daclut[0])) { PrintName(out, s3daclut[note], flag); - } else if (sonicver == 1 && (note < 0x4 || (note >= 0x8 && note <= 0xb))) { + } else if (dacver == 1 && (note < 0x4 || (note >= 0x8 && note <= 0xb))) { PrintName(out, s12daclut[note], flag); - } else if (sonicver == 2 && note <= sizeof(s12daclut) / sizeof(s12daclut[0])) { + } else if (dacver == 2 && note <= sizeof(s12daclut) / sizeof(s12daclut[0])) { PrintName(out, s12daclut[note], flag); } else { PrintHex2Pre(out, val, flag); } } -void DACNote::print(ostream &out, int sonicver, LocTraits::LocType tracktype, +void DACNote::print(ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, multimap &labels, bool s3kmode) const { - ignore_unused_variable_warning(tracktype, labels, s3kmode); + ignore_unused_variable_warning(sonicver, psgver, tracktype, labels, s3kmode); last_note = this; need_rest = false; @@ -170,7 +170,7 @@ void DACNote::print(ostream &out, int sonicver, LocTraits::LocType tracktype, out << "\tdc.b\t"; } - print_dac_sample(out, val, sonicver, notesprinted == 0); + print_dac_sample(out, val, dacver, notesprinted == 0); if (++notesprinted == 12) { out << endl; @@ -178,9 +178,9 @@ void DACNote::print(ostream &out, int sonicver, LocTraits::LocType tracktype, } } -void FMPSGNote::print(ostream &out, int sonicver, LocTraits::LocType tracktype, +void FMPSGNote::print(ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, multimap &labels, bool s3kmode) const { - ignore_unused_variable_warning(labels, s3kmode); + ignore_unused_variable_warning(psgver, dacver, labels, s3kmode); last_note = this; need_rest = false; @@ -252,9 +252,9 @@ void FMPSGNote::print(ostream &out, int sonicver, LocTraits::LocType tracktype, } template -void CoordFlagNoParams::print(ostream &out, int sonicver, LocTraits::LocType tracktype, +void CoordFlagNoParams::print(ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, multimap &labels, bool s3kmode) const { - ignore_unused_variable_warning(tracktype, labels, s3kmode); + ignore_unused_variable_warning(dacver, psgver, tracktype, labels, s3kmode); // Note-like macros: string s; bool notelike = false; @@ -349,14 +349,14 @@ void CoordFlagNoParams::print(ostream &out, int sonicver, LocTraits::LocT } } -void BaseNote::print_psg_tone(ostream &out, int tone, int sonicver, +void BaseNote::print_psg_tone(ostream &out, int tone, int psgver, bool last) { if (tone == 0) { PrintHex2(out, tone, true); return; } - if (sonicver >= 3) { + if (psgver >= 3) { out << "sTone_"; } else { out << "fTone_"; @@ -371,9 +371,9 @@ void BaseNote::print_psg_tone(ostream &out, int tone, int sonicver, } template -void CoordFlag1ParamByte::print(ostream &out, int sonicver, LocTraits::LocType tracktype, +void CoordFlag1ParamByte::print(ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, multimap &labels, bool s3kmode) const { - ignore_unused_variable_warning(labels, s3kmode); + ignore_unused_variable_warning(dacver, psgver, labels, s3kmode); if (notesprinted != 0) { out << endl; } @@ -514,20 +514,20 @@ void CoordFlag1ParamByte::print(ostream &out, int sonicver, LocTraits::Lo } PrintHex2(out, param & 0x3f, true); } else if (val == 0xf5) { - BaseNote::print_psg_tone(out, param, sonicver, true); + BaseNote::print_psg_tone(out, param, psgver, true); } else if (sonicver >= 3 && val == 0xef && tracktype == LocTraits::ePSGTrack) { - BaseNote::print_psg_tone(out, param, sonicver, true); + BaseNote::print_psg_tone(out, param, psgver, true); } else if (sonicver >= 3 && val == 0xea) { - print_dac_sample(out, param, sonicver, true); + print_dac_sample(out, param, dacver, true); } else { PrintHex2(out, param, true); } out << endl; } -void CoordFlagChgKeydisp::print(ostream &out, int sonicver, LocTraits::LocType tracktype, +void CoordFlagChgKeydisp::print(ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, multimap &labels, bool s3kmode) const { - ignore_unused_variable_warning(sonicver, tracktype, labels, s3kmode); + ignore_unused_variable_warning(sonicver, dacver, psgver, tracktype, labels, s3kmode); if (notesprinted != 0) { out << endl; } @@ -539,9 +539,9 @@ void CoordFlagChgKeydisp::print(ostream &out, int sonicver, LocTraits::LocType t } template -void CoordFlag2ParamBytes::print(ostream &out, int sonicver, LocTraits::LocType tracktype, +void CoordFlag2ParamBytes::print(ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, multimap &labels, bool s3kmode) const { - ignore_unused_variable_warning(tracktype, labels, s3kmode); + ignore_unused_variable_warning(dacver, psgver, tracktype, labels, s3kmode); if (notesprinted != 0) { out << endl; } @@ -597,9 +597,9 @@ void CoordFlag2ParamBytes::print(ostream &out, int sonicver, LocTraits::L } template -void CoordFlag3ParamBytes::print(ostream &out, int sonicver, LocTraits::LocType tracktype, +void CoordFlag3ParamBytes::print(ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, multimap &labels, bool s3kmode) const { - ignore_unused_variable_warning(tracktype, labels, s3kmode); + ignore_unused_variable_warning(dacver, psgver, tracktype, labels, s3kmode); if (notesprinted != 0) { out << endl; } @@ -638,9 +638,9 @@ void CoordFlag3ParamBytes::print(ostream &out, int sonicver, LocTraits::L } template -void CoordFlag4ParamBytes::print(ostream &out, int sonicver, LocTraits::LocType tracktype, +void CoordFlag4ParamBytes::print(ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, multimap &labels, bool s3kmode) const { - ignore_unused_variable_warning(tracktype, labels, s3kmode); + ignore_unused_variable_warning(dacver, psgver, tracktype, labels, s3kmode); if (notesprinted != 0) { out << endl; } @@ -684,9 +684,9 @@ void CoordFlag4ParamBytes::print(ostream &out, int sonicver, LocTraits::L } template -void CoordFlag5ParamBytes::print(ostream &out, int sonicver, LocTraits::LocType tracktype, +void CoordFlag5ParamBytes::print(ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, multimap &labels, bool s3kmode) const { - ignore_unused_variable_warning(tracktype, labels, s3kmode); + ignore_unused_variable_warning(dacver, psgver, tracktype, labels, s3kmode); if (notesprinted != 0) { out << endl; } @@ -727,9 +727,9 @@ void CoordFlag5ParamBytes::print(ostream &out, int sonicver, LocTraits::L } template -void CoordFlagPointerParam::print(ostream &out, int sonicver, LocTraits::LocType tracktype, +void CoordFlagPointerParam::print(ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, multimap &labels, bool s3kmode) const { - ignore_unused_variable_warning(sonicver, tracktype, s3kmode); + ignore_unused_variable_warning(sonicver, dacver, psgver, tracktype, s3kmode); if (notesprinted != 0) { out << endl; } @@ -750,9 +750,9 @@ void CoordFlagPointerParam::print(ostream &out, int sonicver, LocTraits:: } template -void CoordFlagPointer1ParamByte::print(ostream &out, int sonicver, LocTraits::LocType tracktype, +void CoordFlagPointer1ParamByte::print(ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, multimap &labels, bool s3kmode) const { - ignore_unused_variable_warning(tracktype, s3kmode); + ignore_unused_variable_warning(dacver, psgver, tracktype, s3kmode); if (notesprinted != 0) { out << endl; } @@ -785,9 +785,9 @@ void CoordFlagPointer1ParamByte::print(ostream &out, int sonicver, LocTra } template -void CoordFlagPointer2ParamBytes::print(ostream &out, int sonicver, LocTraits::LocType tracktype, +void CoordFlagPointer2ParamBytes::print(ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, multimap &labels, bool s3kmode) const { - ignore_unused_variable_warning(tracktype, s3kmode); + ignore_unused_variable_warning(dacver, psgver, tracktype, s3kmode); if (notesprinted != 0) { out << endl; } @@ -865,22 +865,22 @@ void InstantiateTemplates() { CoordFlagPointer1ParamByte ffp1(0, 0, 0, 0); CoordFlagPointer2ParamBytes ftp2(0, 0, 0, 0, 0); CoordFlagPointer2ParamBytes ffp2(0, 0, 0, 0, 0); - ft0.print(cout, 1, LocTraits::eHeader, labels, false); - ff0.print(cout, 1, LocTraits::eHeader, labels, false); - ft1.print(cout, 1, LocTraits::eHeader, labels, false); - ff1.print(cout, 1, LocTraits::eHeader, labels, false); - ft2.print(cout, 1, LocTraits::eHeader, labels, false); - ff2.print(cout, 1, LocTraits::eHeader, labels, false); - ft3.print(cout, 1, LocTraits::eHeader, labels, false); - ff3.print(cout, 1, LocTraits::eHeader, labels, false); - ft4.print(cout, 1, LocTraits::eHeader, labels, false); - ff4.print(cout, 1, LocTraits::eHeader, labels, false); - ft5.print(cout, 1, LocTraits::eHeader, labels, false); - ff5.print(cout, 1, LocTraits::eHeader, labels, false); - ftp0.print(cout, 1, LocTraits::eHeader, labels, false); - ffp0.print(cout, 1, LocTraits::eHeader, labels, false); - ftp1.print(cout, 1, LocTraits::eHeader, labels, false); - ffp1.print(cout, 1, LocTraits::eHeader, labels, false); - ftp2.print(cout, 1, LocTraits::eHeader, labels, false); - ffp2.print(cout, 1, LocTraits::eHeader, labels, false); + ft0.print(cout, 1, 1, 1, LocTraits::eHeader, labels, false); + ff0.print(cout, 1, 1, 1, LocTraits::eHeader, labels, false); + ft1.print(cout, 1, 1, 1, LocTraits::eHeader, labels, false); + ff1.print(cout, 1, 1, 1, LocTraits::eHeader, labels, false); + ft2.print(cout, 1, 1, 1, LocTraits::eHeader, labels, false); + ff2.print(cout, 1, 1, 1, LocTraits::eHeader, labels, false); + ft3.print(cout, 1, 1, 1, LocTraits::eHeader, labels, false); + ff3.print(cout, 1, 1, 1, LocTraits::eHeader, labels, false); + ft4.print(cout, 1, 1, 1, LocTraits::eHeader, labels, false); + ff4.print(cout, 1, 1, 1, LocTraits::eHeader, labels, false); + ft5.print(cout, 1, 1, 1, LocTraits::eHeader, labels, false); + ff5.print(cout, 1, 1, 1, LocTraits::eHeader, labels, false); + ftp0.print(cout, 1, 1, 1, LocTraits::eHeader, labels, false); + ffp0.print(cout, 1, 1, 1, LocTraits::eHeader, labels, false); + ftp1.print(cout, 1, 1, 1, LocTraits::eHeader, labels, false); + ffp1.print(cout, 1, 1, 1, LocTraits::eHeader, labels, false); + ftp2.print(cout, 1, 1, 1, LocTraits::eHeader, labels, false); + ffp2.print(cout, 1, 1, 1, LocTraits::eHeader, labels, false); } diff --git a/src/tools/songtrack.h b/src/tools/songtrack.h index 3bd94b6..1f3696f 100644 --- a/src/tools/songtrack.h +++ b/src/tools/songtrack.h @@ -69,11 +69,11 @@ class BaseNote { std::string const &projname, LocTraits::LocType tracktype, std::multimap &labels, int &last_voc, unsigned char keydisp); - void write(std::ostream &out, int sonicver, size_t offset) const; - virtual void print(std::ostream &out, int sonicver, LocTraits::LocType tracktype, + void write(std::ostream &out, int sonicver, int dacver, int psgver, size_t offset) const; + virtual void print(std::ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, std::multimap &labels, bool s3kmode) const = 0; static void force_linebreak(std::ostream &out, bool force = false); - static void print_psg_tone(std::ostream &out, int tone, int sonicver, bool last); + static void print_psg_tone(std::ostream &out, int tone, int psgver, bool last); virtual bool ends_track() const { return false; } @@ -102,16 +102,16 @@ class RealNote : public BaseNote { class Duration : public BaseNote { public: Duration(unsigned char v, unsigned char k) : BaseNote(v, k) { } - void print(std::ostream &out, int sonicver, LocTraits::LocType tracktype, + void print(std::ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, std::multimap &labels, bool s3kmode) const override; }; class NullNote : public BaseNote { public: NullNote() : BaseNote(0, 0) { } - void print(std::ostream &out, int sonicver, LocTraits::LocType tracktype, + void print(std::ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, std::multimap &labels, bool s3kmode) const override { - ignore_unused_variable_warning(out, sonicver, tracktype, labels, s3kmode); + ignore_unused_variable_warning(out, sonicver, dacver, psgver, tracktype, labels, s3kmode); } }; @@ -120,21 +120,21 @@ class FMVoice : public BaseNote { int id; public: FMVoice(std::istream &in, int sonicver, int n); - void print(std::ostream &out, int sonicver, LocTraits::LocType tracktype, + void print(std::ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, std::multimap &labels, bool s3kmode) const override; }; class DACNote : public RealNote { public: DACNote(unsigned char v, unsigned char k) : RealNote(v, k) { } - void print(std::ostream &out, int sonicver, LocTraits::LocType tracktype, + void print(std::ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, std::multimap &labels, bool s3kmode) const override; }; class FMPSGNote : public RealNote { public: FMPSGNote(unsigned char v, unsigned char k) : RealNote(v, k) { } - void print(std::ostream &out, int sonicver, LocTraits::LocType tracktype, + void print(std::ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, std::multimap &labels, bool s3kmode) const override; }; @@ -142,7 +142,7 @@ template class CoordFlagNoParams : public BaseNote { public: CoordFlagNoParams(unsigned char v, unsigned char k) : BaseNote(v, k) { } - void print(std::ostream &out, int sonicver, LocTraits::LocType tracktype, + void print(std::ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, std::multimap &labels, bool s3kmode) const override; bool ends_track() const override { return noret; @@ -155,7 +155,7 @@ class CoordFlag1ParamByte : public BaseNote { unsigned char param; public: CoordFlag1ParamByte(unsigned char v, unsigned char k, unsigned char p) : BaseNote(v, k), param(p) { } - void print(std::ostream &out, int sonicver, LocTraits::LocType tracktype, + void print(std::ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, std::multimap &labels, bool s3kmode) const override; bool ends_track() const override { return noret; @@ -167,7 +167,7 @@ class CoordFlagChgKeydisp : public BaseNote { unsigned char param; public: CoordFlagChgKeydisp(unsigned char v, unsigned char k, unsigned char p) : BaseNote(v, k), param(p) { } - void print(std::ostream &out, int sonicver, LocTraits::LocType tracktype, + void print(std::ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, std::multimap &labels, bool s3kmode) const override; unsigned char get_keydisp() const override { return keydisp + param; @@ -181,7 +181,7 @@ class CoordFlag2ParamBytes : public BaseNote { public: CoordFlag2ParamBytes(unsigned char v, unsigned char k, unsigned char p1, unsigned char p2) : BaseNote(v, k), param1(p1), param2(p2) { } - void print(std::ostream &out, int sonicver, LocTraits::LocType tracktype, + void print(std::ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, std::multimap &labels, bool s3kmode) const override; bool ends_track() const override { return noret; @@ -196,7 +196,7 @@ class CoordFlag3ParamBytes : public BaseNote { CoordFlag3ParamBytes(unsigned char v, unsigned char k, unsigned char p1, unsigned char p2, unsigned char p3) : BaseNote(v, k), param1(p1), param2(p2), param3(p3) { } - void print(std::ostream &out, int sonicver, LocTraits::LocType tracktype, + void print(std::ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, std::multimap &labels, bool s3kmode) const override; bool ends_track() const override { return noret; @@ -211,7 +211,7 @@ class CoordFlag4ParamBytes : public BaseNote { CoordFlag4ParamBytes(unsigned char v, unsigned char k, unsigned char p1, unsigned char p2, unsigned char p3, unsigned char p4) : BaseNote(v, k), param1(p1), param2(p2), param3(p3), param4(p4) { } - void print(std::ostream &out, int sonicver, LocTraits::LocType tracktype, + void print(std::ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, std::multimap &labels, bool s3kmode) const override; bool ends_track() const override { return noret; @@ -227,7 +227,7 @@ class CoordFlag5ParamBytes : public BaseNote { unsigned char p3, unsigned char p4, unsigned char p5) : BaseNote(v, k), param1(p1), param2(p2), param3(p3), param4(p4), param5(p5) { } - void print(std::ostream &out, int sonicver, LocTraits::LocType tracktype, + void print(std::ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, std::multimap &labels, bool s3kmode) const override; bool ends_track() const override { return noret; @@ -240,7 +240,7 @@ class CoordFlagPointerParam : public BaseNote { int jumptarget; public: CoordFlagPointerParam(unsigned char v, unsigned char k, int p) : BaseNote(v, k), jumptarget(p) { } - void print(std::ostream &out, int sonicver, LocTraits::LocType tracktype, + void print(std::ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, std::multimap &labels, bool s3kmode) const override; bool ends_track() const override { return noret; @@ -261,7 +261,7 @@ class CoordFlagPointer1ParamByte : public BaseNote { public: CoordFlagPointer1ParamByte(unsigned char v, unsigned char k, unsigned char p1, int ptr) : BaseNote(v, k), jumptarget(ptr), param1(p1) { } - void print(std::ostream &out, int sonicver, LocTraits::LocType tracktype, + void print(std::ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, std::multimap &labels, bool s3kmode) const override; bool ends_track() const override { return noret; @@ -282,7 +282,7 @@ class CoordFlagPointer2ParamBytes : public BaseNote { public: CoordFlagPointer2ParamBytes(unsigned char v, unsigned char k, unsigned char p1, unsigned char p2, int ptr) : BaseNote(v, k), jumptarget(ptr), param1(p1), param2(p2) { } - void print(std::ostream &out, int sonicver, LocTraits::LocType tracktype, + void print(std::ostream &out, int sonicver, int dacver, int psgver, LocTraits::LocType tracktype, std::multimap &labels, bool s3kmode) const override; bool ends_track() const override { return noret;