diff --git a/android/app/build.gradle b/android/app/build.gradle index 3ceb1765e..483ea52c4 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -15,8 +15,8 @@ android { } minSdkVersion 21 targetSdkVersion 26 - versionCode 143 - versionName "0.6pre4" + versionCode 158 + versionName "0.6pre5" externalNativeBuild { cmake { arguments "-DANDROID_APP_PLATFORM=android-21", "-DANDROID_STL=c++_static" diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 8bad4fe2e..3deb416b9 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,8 +1,8 @@ diff --git a/res/Info.plist b/res/Info.plist index 39a9ac844..026051de2 100644 --- a/res/Info.plist +++ b/res/Info.plist @@ -15,17 +15,17 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString - 0.6pre4 + 0.6pre5 CFBundleName Furnace CFBundlePackageType APPL CFBundleShortVersionString - 0.6pre4 + 0.6pre5 CFBundleSignature ???? CFBundleVersion - 0.6pre4 + 0.6pre5 NSHumanReadableCopyright NSHighResolutionCapable diff --git a/src/engine/engine.h b/src/engine/engine.h index a83c25f94..0c780f91e 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -54,8 +54,8 @@ #define EXTERN_BUSY_BEGIN_SOFT e->softLocked=true; e->isBusy.lock(); #define EXTERN_BUSY_END e->isBusy.unlock(); e->softLocked=false; -#define DIV_VERSION "dev157" -#define DIV_ENGINE_VERSION 157 +#define DIV_VERSION "0.6pre5" +#define DIV_ENGINE_VERSION 158 // for imports #define DIV_VERSION_MOD 0xff01 #define DIV_VERSION_FC 0xff02 diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 91f0d3b55..4f5e54ff1 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -5095,7 +5095,7 @@ bool FurnaceGUI::loop() { ImGui::EndPopup(); } - //drawTutorial(); + drawTutorial(); ImVec2 newSongMinSize=mobileUI?ImVec2(canvasW-(portrait?0:(60.0*dpiScale)),canvasH-60.0*dpiScale):ImVec2(400.0f*dpiScale,200.0f*dpiScale); ImVec2 newSongMaxSize=ImVec2(canvasW-((mobileUI && !portrait)?(60.0*dpiScale):0),canvasH-(mobileUI?(60.0*dpiScale):0)); diff --git a/src/gui/gui.h b/src/gui/gui.h index d4b3e4eca..fd30c734f 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1590,12 +1590,12 @@ class FurnaceGUI { struct Tutorial { int userComesFrom; bool introPlayed; - bool welcome; + bool protoWelcome; bool taken[GUI_TUTORIAL_MAX]; Tutorial(): userComesFrom(0), introPlayed(false), - welcome(false) { + protoWelcome(false) { memset(taken,0,GUI_TUTORIAL_MAX*sizeof(bool)); } } tutorial; diff --git a/src/gui/tutorial.cpp b/src/gui/tutorial.cpp index c3dad67bd..71ad3ca40 100644 --- a/src/gui/tutorial.cpp +++ b/src/gui/tutorial.cpp @@ -223,26 +223,28 @@ void FurnaceGUI::initTutorial() { void FurnaceGUI::syncTutorial() { // tutorial.userComesFrom=e->getConfInt("tutUserComesFrom",0); tutorial.introPlayed=e->getConfBool("tutIntroPlayed",false); -// tutorial.welcome=e->getConfBool("tutWelcome",false); + tutorial.protoWelcome=e->getConfBool("tutProtoWelcome2",false); } void FurnaceGUI::commitTutorial() { // e->setConf("tutUserComesFrom",tutorial.userComesFrom); e->setConf("tutIntroPlayed",tutorial.introPlayed); -// e->setConf("tutWelcome",tutorial.welcome); + e->setConf("tutProtoWelcome2",tutorial.protoWelcome); } void FurnaceGUI::activateTutorial(FurnaceGUITutorials which) { - if (tutorial.welcome && !tutorial.taken[which] && !ImGui::IsPopupOpen((const char*)NULL,ImGuiPopupFlags_AnyPopupId|ImGuiPopupFlags_AnyPopupLevel) && curTutorial==-1 && introPos>=10.0) { + /* + if (tutorial.protoWelcome && !tutorial.taken[which] && !ImGui::IsPopupOpen((const char*)NULL,ImGuiPopupFlags_AnyPopupId|ImGuiPopupFlags_AnyPopupLevel) && curTutorial==-1 && introPos>=10.0) { logV("activating tutorial %d.",which); curTutorial=which; curTutorialStep=0; } + */ } void FurnaceGUI::drawTutorial() { // welcome - if (!tutorial.welcome) { + if (!tutorial.protoWelcome) { ImGui::OpenPopup("Welcome"); } if (ImGui::BeginPopupModal("Welcome",NULL,ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoTitleBar)) { @@ -253,7 +255,35 @@ void FurnaceGUI::drawTutorial() { ImGui::Text("welcome to Furnace, the biggest open-source chiptune tracker!"); - ImGui::TextWrapped("get ready for the tutorial, which will teach you how to use it."); + ImGui::TextWrapped( + "did I say that 0.6pre5 will have a tutorial? well, it doesn't...\n" + "the reason is because 0.6pre5 fixes a critical bug which may cause config loss in some machines.\n" + "furthermore, it dramatically improves the backup system. couldn't put this version on hold anymore." + ); + + ImGui::Separator(); + + ImGui::TextWrapped("here are some tips to get you started:"); + + ImGui::TextWrapped( + "- add an instrument by clicking on + in Instruments\n" + "- click on the pattern view to focus it\n" + "- channel columns have the following, in this order: note, instrument, volume and effects\n" + "- hit space bar while on the pattern to toggle Edit Mode\n" + "- click on the pattern or use arrow keys to move the cursor\n" + "- values (instrument, volume, effects and effect values) are in hexadecimal\n" + "- hit enter to play/stop the song\n" + "- extend the song by adding more orders in the Orders window\n" + "- click on the Orders matrix to change the patterns of a channel (left click increases; right click decreases)" + ); + + ImGui::TextWrapped( + "if you need help, you may:\n" + "- read the (incomplete) manual: https://github.com/tildearrow/furnace/blob/master/papers/doc/README.md\n" + "- ask for help in Discussions (https://github.com/tildearrow/furnace/discussions) or the Furnace Discord (https://discord.gg/EfrwT2wq7z)" + ); + + ImGui::Separator(); ImGui::TextWrapped( "there are two interface modes: Basic, and Advanced.\n" @@ -265,13 +295,13 @@ void FurnaceGUI::drawTutorial() { if (ImGui::Button("Start in Basic Mode")) { basicMode=true; - tutorial.welcome=true; + tutorial.protoWelcome=true; commitTutorial(); ImGui::CloseCurrentPopup(); } if (ImGui::Button("Start in Advanced Mode")) { basicMode=false; - tutorial.welcome=true; + tutorial.protoWelcome=true; commitTutorial(); ImGui::CloseCurrentPopup(); }