diff --git a/CMakeLists.txt b/CMakeLists.txt index b3226ac8fd..df850c42bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_PROJECT_VERSION_MAJOR 0) set(CMAKE_PROJECT_VERSION_MINOR 6) -set(CMAKE_PROJECT_VERSION_PATCH 2) +set(CMAKE_PROJECT_VERSION_PATCH 3) set(BUILD_GUI_DEFAULT ON) set(USE_SDL2_DEFAULT ON) @@ -166,6 +166,7 @@ if (WIN32) # support Windows XP if (SUPPORT_XP) list(APPEND DEPENDENCIES_DEFINES "_WIN32_WINNT=0x0501") + list(APPEND DEPENDENCIES_DEFINES "SUPPORT_XP") endif() endif() diff --git a/android/app/build.gradle b/android/app/build.gradle index 1b6e1c72d5..646701c5a6 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -15,8 +15,8 @@ android { } minSdkVersion 21 targetSdkVersion 26 - versionCode 197 - versionName "0.6.2" + versionCode 201 + versionName "0.6.3" externalNativeBuild { cmake { arguments "-DANDROID_APP_PLATFORM=android-21", "-DANDROID_STL=c++_static", "-DWARNINGS_ARE_ERRORS=ON" diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index b48b1e92d8..205477d697 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,8 +1,8 @@ diff --git a/demos/misc/brokenspace-msm5232.fur b/demos/misc/brokenspace-msm5232.fur new file mode 100644 index 0000000000..cb4ef6a305 Binary files /dev/null and b/demos/misc/brokenspace-msm5232.fur differ diff --git a/demos/misc/cavedotwave-msm5232.fur b/demos/misc/cavedotwave-msm5232.fur new file mode 100644 index 0000000000..7f12cbe86a Binary files /dev/null and b/demos/misc/cavedotwave-msm5232.fur differ diff --git a/demos/virtualboy/wavetablehell4-vb.fur b/demos/virtualboy/wavetablehell4-vb.fur new file mode 100644 index 0000000000..48fe36ee6d Binary files /dev/null and b/demos/virtualboy/wavetablehell4-vb.fur differ diff --git a/papers/clipboard-format.md b/papers/clipboard-format.md index 730cd2d7f6..9f3bad6267 100644 --- a/papers/clipboard-format.md +++ b/papers/clipboard-format.md @@ -6,7 +6,7 @@ when copying pattern data from Furnace, it's stored in the clipboard as plain te org.tildearrow.furnace - Pattern Data (144) ``` -this top line of text is always the same except for the number in parentheses, which is the internal build number. for example, 0.6.2 is `197`. +this top line of text is always the same except for the number in parentheses, which is the internal build number. for example, 0.6.3 is `201`. the second line is a number between 0 and 18 (decimal) which indicates which column the clip starts from. - `0`: note. diff --git a/papers/format.md b/papers/format.md index 5b05d7add2..499226ac7f 100644 --- a/papers/format.md +++ b/papers/format.md @@ -32,6 +32,7 @@ these fields are 0 in format versions prior to 100 (0.6pre1). the format versions are: +- 201: Furnace 0.6.3 - 197: Furnace 0.6.2 - 192: Furnace 0.6.1 - 181: Furnace 0.6 diff --git a/res/Info.plist b/res/Info.plist index b5e4ba1fc5..8ee8fcbf71 100644 --- a/res/Info.plist +++ b/res/Info.plist @@ -15,17 +15,17 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString - 0.6.2 + 0.6.3 CFBundleName Furnace CFBundlePackageType APPL CFBundleShortVersionString - 0.6.2 + 0.6.3 CFBundleSignature ???? CFBundleVersion - 0.6.2 + 0.6.3 NSHumanReadableCopyright NSHighResolutionCapable diff --git a/res/docpdf/make_paper.py b/res/docpdf/make_paper.py index 1dcfe389ca..968600e90d 100644 --- a/res/docpdf/make_paper.py +++ b/res/docpdf/make_paper.py @@ -325,7 +325,7 @@ def fix_headings(match):

Furnace
User Manual

- for version 0.6.2 + for version 0.6.3
@@ -348,7 +348,7 @@ def fix_headings(match):

this documentation is under the Creative Commons Attribution 3.0 Unported license.

you may reproduce, modify and/or distribute this documentation provided this copyright notice (including license and attribution) is present and any necessary disclaimers whether modifications have been made.

this documentation is provided as-is and without warranty of any kind.

-

this manual is written for version 0.6.2 of Furnace.
it may not necessarily apply to previous or future versions.

+

this manual is written for version 0.6.3 of Furnace.
it may not necessarily apply to previous or future versions.

%s diff --git a/res/releaseReadme/stable-linux.txt b/res/releaseReadme/stable-linux.txt index e11717c9e8..b7e90809db 100644 --- a/res/releaseReadme/stable-linux.txt +++ b/res/releaseReadme/stable-linux.txt @@ -18,7 +18,7 @@ if you find issues (e.g. bugs or annoyances), report them. links below. - discussion: https://github.com/tildearrow/furnace/discussions - Furnace on Discord: https://discord.gg/EfrwT2wq7z - Furnace on Revolt: https://rvlt.gg/GRPS6tmc -- online manual: https://tildearrow.org/furnace/doc/v0.6.2/ +- online manual: https://tildearrow.org/furnace/doc/v0.6.3/ # notes diff --git a/res/releaseReadme/stable-mac.txt b/res/releaseReadme/stable-mac.txt index a62dd792dc..331a214101 100644 --- a/res/releaseReadme/stable-mac.txt +++ b/res/releaseReadme/stable-mac.txt @@ -28,7 +28,7 @@ if you find issues (e.g. bugs or annoyances), report them. links below. - discussion: https://github.com/tildearrow/furnace/discussions - Furnace on Discord: https://discord.gg/EfrwT2wq7z - Furnace on Revolt: https://rvlt.gg/GRPS6tmc -- online manual: https://tildearrow.org/furnace/doc/v0.6.2/ +- online manual: https://tildearrow.org/furnace/doc/v0.6.3/ # notes diff --git a/res/releaseReadme/stable-win.txt b/res/releaseReadme/stable-win.txt index 92e15e5abd..7939587bde 100644 --- a/res/releaseReadme/stable-win.txt +++ b/res/releaseReadme/stable-win.txt @@ -18,7 +18,7 @@ if you find issues (e.g. bugs or annoyances), report them. links below. - discussion: https://github.com/tildearrow/furnace/discussions - Furnace on Discord: https://discord.gg/EfrwT2wq7z - Furnace on Revolt: https://rvlt.gg/GRPS6tmc -- online manual: https://tildearrow.org/furnace/doc/v0.6.2/ +- online manual: https://tildearrow.org/furnace/doc/v0.6.3/ # notes diff --git a/src/engine/engine.h b/src/engine/engine.h index fe16734030..fa01495d14 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -52,10 +52,10 @@ class DivWorkPool; #define EXTERN_BUSY_BEGIN_SOFT e->softLocked=true; e->isBusy.lock(); #define EXTERN_BUSY_END e->isBusy.unlock(); e->softLocked=false; -#define DIV_UNSTABLE +//#define DIV_UNSTABLE -#define DIV_VERSION "dev200" -#define DIV_ENGINE_VERSION 200 +#define DIV_VERSION "0.6.3" +#define DIV_ENGINE_VERSION 201 // for imports #define DIV_VERSION_MOD 0xff01 #define DIV_VERSION_FC 0xff02 diff --git a/src/gui/about.cpp b/src/gui/about.cpp index 572e5386e1..facea8e232 100644 --- a/src/gui/about.cpp +++ b/src/gui/about.cpp @@ -157,6 +157,7 @@ const char* aboutLine[]={ "scooblee", "sheffield^2", "sillygoose", + "Slightly Large NC", "smaybius", "SnugglyBun", "Spinning Square Waves", diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index b988fd143b..168bf614d8 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -6966,19 +6966,18 @@ bool FurnaceGUI::init() { logV("window size: %dx%d",scrW,scrH); if (!initRender()) { - if (settings.renderBackend!="SDL") { - settings.renderBackend="SDL"; - e->setConf("renderBackend","SDL"); + if (settings.renderBackend!="Software") { + settings.renderBackend="Software"; + e->setConf("renderBackend","Software"); + e->saveConf(); + lastError=fmt::sprintf("could not init renderer!\r\nfalling back to software renderer. please restart Furnace."); + } else if (settings.renderBackend=="SDL") { + lastError=fmt::sprintf("could not init renderer! %s\r\nfalling back to software renderer. please restart Furnace.",SDL_GetError()); + settings.renderBackend="Software"; + e->setConf("renderBackend","Software"); e->saveConf(); - lastError=fmt::sprintf("could not init renderer!\r\nthe render backend has been set to a safe value. please restart Furnace."); } else { - lastError=fmt::sprintf("could not init renderer! %s",SDL_GetError()); - if (!settings.renderDriver.empty()) { - settings.renderDriver=""; - e->setConf("renderDriver",""); - e->saveConf(); - lastError+=fmt::sprintf("\r\nthe render driver has been set to a safe value. please restart Furnace."); - } + lastError=fmt::sprintf("could not init renderer!"); } return false; } @@ -7068,19 +7067,18 @@ bool FurnaceGUI::init() { logD("starting render backend..."); if (!rend->init(sdlWin,settings.vsync)) { logE("it failed..."); - if (settings.renderBackend!="SDL") { - settings.renderBackend="SDL"; - e->setConf("renderBackend","SDL"); + if (settings.renderBackend!="Software") { + settings.renderBackend="Software"; + e->setConf("renderBackend","Software"); + e->saveConf(); + lastError=fmt::sprintf("could not init renderer!\r\nfalling back to software renderer. please restart Furnace."); + } else if (settings.renderBackend=="SDL") { + lastError=fmt::sprintf("could not init renderer! %s\r\nfalling back to software renderer. please restart Furnace.",SDL_GetError()); + settings.renderBackend="Software"; + e->setConf("renderBackend","Software"); e->saveConf(); - lastError=fmt::sprintf("could not init renderer!\r\nthe render backend has been set to a safe value. please restart Furnace."); } else { - lastError=fmt::sprintf("could not init renderer! %s",SDL_GetError()); - if (!settings.renderDriver.empty()) { - settings.renderDriver=""; - e->setConf("renderDriver",""); - e->saveConf(); - lastError+=fmt::sprintf("\r\nthe render driver has been set to a safe value. please restart Furnace."); - } + lastError=fmt::sprintf("could not init renderer!"); } return false; } diff --git a/src/gui/gui.h b/src/gui/gui.h index fc7bedb95b..07938ba540 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -117,12 +117,22 @@ enum FurnaceGUIRenderBackend { #define GUI_HEIGHT_DEFAULT 600 #define GUI_MAIN_FONT_DEFAULT 3 #define GUI_PAT_FONT_DEFAULT 3 +#define GUI_FONT_SIZE_DEFAULT 13 +#define GUI_ICON_SIZE_DEFAULT 12 +#define GUI_OVERSAMPLE_DEFAULT 1 +#define GUI_FONT_ANTIALIAS_DEFAULT 0 +#define GUI_FONT_HINTING_DEFAULT 1 #define GUI_DECORATIONS_DEFAULT 0 #else #define GUI_WIDTH_DEFAULT 1280 #define GUI_HEIGHT_DEFAULT 800 #define GUI_MAIN_FONT_DEFAULT 0 #define GUI_PAT_FONT_DEFAULT 0 +#define GUI_FONT_SIZE_DEFAULT 18 +#define GUI_ICON_SIZE_DEFAULT 16 +#define GUI_OVERSAMPLE_DEFAULT 2 +#define GUI_FONT_ANTIALIAS_DEFAULT 1 +#define GUI_FONT_HINTING_DEFAULT 0 #define GUI_DECORATIONS_DEFAULT 1 #endif @@ -1905,10 +1915,10 @@ class FurnaceGUI { Settings(): settingsChanged(false), - mainFontSize(18), - patFontSize(18), + mainFontSize(GUI_FONT_SIZE_DEFAULT), + patFontSize(GUI_FONT_SIZE_DEFAULT), headFontSize(27), - iconSize(16), + iconSize(GUI_ICON_SIZE_DEFAULT), audioEngine(DIV_AUDIO_SDL), audioQuality(0), audioHiPass(1), @@ -2115,7 +2125,7 @@ class FurnaceGUI { fontBitmap(0), fontAutoHint(1), fontAntiAlias(1), - fontOversample(2), + fontOversample(GUI_OVERSAMPLE_DEFAULT), selectAssetOnLoad(1), basicColors(1), playbackTime(1), @@ -2150,7 +2160,11 @@ class FurnaceGUI { bool introPlayed; bool protoWelcome; Tutorial(): +#ifdef SUPPORT_XP + introPlayed(true), +#else introPlayed(false), +#endif protoWelcome(false) { } } tutorial; diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index ad8714a35b..83ce9ede09 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -44,7 +44,7 @@ #endif #ifdef HAVE_FREETYPE -#define FONT_BACKEND_DEFAULT 0 +#define FONT_BACKEND_DEFAULT 1 #else #define FONT_BACKEND_DEFAULT 0 #endif @@ -4256,10 +4256,10 @@ void FurnaceGUI::readConfig(DivConfig& conf, FurnaceGUISettingGroups groups) { } if (groups&GUI_SETTINGS_FONT) { - settings.mainFontSize=conf.getInt("mainFontSize",18); + settings.mainFontSize=conf.getInt("mainFontSize",GUI_FONT_SIZE_DEFAULT); settings.headFontSize=conf.getInt("headFontSize",27); - settings.patFontSize=conf.getInt("patFontSize",18); - settings.iconSize=conf.getInt("iconSize",16); + settings.patFontSize=conf.getInt("patFontSize",GUI_FONT_SIZE_DEFAULT); + settings.iconSize=conf.getInt("iconSize",GUI_ICON_SIZE_DEFAULT); settings.mainFont=conf.getInt("mainFont",GUI_MAIN_FONT_DEFAULT); settings.headFont=conf.getInt("headFont",0); @@ -4275,11 +4275,11 @@ void FurnaceGUI::readConfig(DivConfig& conf, FurnaceGUISettingGroups groups) { settings.loadFallback=conf.getInt("loadFallback",1); settings.fontBackend=conf.getInt("fontBackend",FONT_BACKEND_DEFAULT); - settings.fontHinting=conf.getInt("fontHinting",0); + settings.fontHinting=conf.getInt("fontHinting",GUI_FONT_HINTING_DEFAULT); settings.fontBitmap=conf.getInt("fontBitmap",0); settings.fontAutoHint=conf.getInt("fontAutoHint",1); - settings.fontAntiAlias=conf.getInt("fontAntiAlias",1); - settings.fontOversample=conf.getInt("fontOversample",2); + settings.fontAntiAlias=conf.getInt("fontAntiAlias",GUI_FONT_ANTIALIAS_DEFAULT); + settings.fontOversample=conf.getInt("fontOversample",GUI_OVERSAMPLE_DEFAULT); } if (groups&GUI_SETTINGS_APPEARANCE) { diff --git a/src/gui/tutorial.cpp b/src/gui/tutorial.cpp index b72fbb0747..690cff7bdf 100644 --- a/src/gui/tutorial.cpp +++ b/src/gui/tutorial.cpp @@ -497,7 +497,11 @@ static const char* cvText[]={ }; void FurnaceGUI::syncTutorial() { +#ifdef SUPPORT_XP + tutorial.introPlayed=e->getConfBool("tutIntroPlayed",true); +#else tutorial.introPlayed=e->getConfBool("tutIntroPlayed",false); +#endif tutorial.protoWelcome=e->getConfBool("tutProtoWelcome2",false); } diff --git a/src/main.cpp b/src/main.cpp index a971ffa741..06183444e9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -42,6 +42,12 @@ typedef HRESULT (WINAPI *SPDA)(PROCESS_DPI_AWARENESS); struct sigaction termsa; #endif +#ifdef SUPPORT_XP +#define TUT_INTRO_PLAYED true +#else +#define TUT_INTRO_PLAYED false +#endif + #include "cli/cli.h" #ifdef HAVE_GUI @@ -582,7 +588,7 @@ int main(int argc, char** argv) { e.setAudio(DIV_AUDIO_DUMMY); } - if (!fileName.empty() && ((!e.getConfBool("tutIntroPlayed",false)) || e.getConfInt("alwaysPlayIntro",0)!=3 || consoleMode || benchMode || infoMode || outName!="" || vgmOutName!="" || cmdOutName!="")) { + if (!fileName.empty() && ((!e.getConfBool("tutIntroPlayed",TUT_INTRO_PLAYED)) || e.getConfInt("alwaysPlayIntro",0)!=3 || consoleMode || benchMode || infoMode || outName!="" || vgmOutName!="" || cmdOutName!="")) { logI("loading module..."); FILE* f=ps_fopen(fileName.c_str(),"rb"); if (f==NULL) {