From 0627e38d63482b5c06121360147d650d87a3ddca Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 21 Nov 2022 03:01:57 -0500 Subject: [PATCH] don't load assets when loading temp ins --- src/engine/engine.h | 2 +- src/engine/fileOpsIns.cpp | 4 ++-- src/engine/instrument.cpp | 6 +++++- src/gui/gui.cpp | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/engine/engine.h b/src/engine/engine.h index 0c2782050..80dfe67a8 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -766,7 +766,7 @@ class DivEngine { // get instrument from file // if the returned vector is empty then there was an error. - std::vector instrumentFromFile(const char* path); + std::vector instrumentFromFile(const char* path, bool loadAssets=true); // load temporary instrument void loadTempIns(DivInstrument* which); diff --git a/src/engine/fileOpsIns.cpp b/src/engine/fileOpsIns.cpp index c002efea2..4920308b5 100644 --- a/src/engine/fileOpsIns.cpp +++ b/src/engine/fileOpsIns.cpp @@ -1814,7 +1814,7 @@ void DivEngine::loadWOPN(SafeReader& reader, std::vector& ret, S } } -std::vector DivEngine::instrumentFromFile(const char* path) { +std::vector DivEngine::instrumentFromFile(const char* path, bool loadAssets) { std::vector ret; warnings=""; @@ -1919,7 +1919,7 @@ std::vector DivEngine::instrumentFromFile(const char* path) { reader.seek(dataPtr,SEEK_SET); } - if (ins->readInsData(reader,version,&song)!=DIV_DATA_SUCCESS) { + if (ins->readInsData(reader,version,loadAssets?(&song):NULL)!=DIV_DATA_SUCCESS) { lastError="invalid instrument header/data!"; delete ins; delete[] buf; diff --git a/src/engine/instrument.cpp b/src/engine/instrument.cpp index 3bba85340..867d25640 100644 --- a/src/engine/instrument.cpp +++ b/src/engine/instrument.cpp @@ -2502,7 +2502,11 @@ DivDataErrors DivInstrument::readInsDataNew(SafeReader& reader, short version, b } else if (memcmp(featCode,"X1",2)==0) { // X1-010 readFeatureX1(reader); } else { - logW("unknown feature code %c%c!",featCode[0],featCode[1]); + if (song==NULL && (memcmp(featCode,"SL",2)==0 || (memcmp(featCode,"WL",2)==0))) { + // nothing + } else { + logW("unknown feature code %c%c!",featCode[0],featCode[1]); + } // skip feature unsigned short skip=reader.readS(); reader.seek(skip,SEEK_CUR); diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 9d9136baa..99455b150 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -1475,7 +1475,7 @@ void FurnaceGUI::openFileDialog(FurnaceGUIFileDialogs type) { dpiScale, [this](const char* path) { int sampleCountBefore=e->song.sampleLen; - std::vector instruments=e->instrumentFromFile(path); + std::vector instruments=e->instrumentFromFile(path,false); if (!instruments.empty()) { if (e->song.sampleLen!=sampleCountBefore) { e->renderSamplesP();