diff --git a/.gitmodules b/.gitmodules index ad412c3..0bb90f0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -181,3 +181,6 @@ [submodule "plugins/MSM"] path = plugins/MSM url = https://github.com/netboy3/MSM-vcvrack-plugin.git +[submodule "plugins/nonlinearcircuits"] + path = plugins/nonlinearcircuits + url = https://github.com/mhetrick/nonlinearcircuits.git diff --git a/README.md b/README.md index 4cb1f0c..31b8c3d 100644 --- a/README.md +++ b/README.md @@ -145,6 +145,7 @@ At the moment the following 3rd-party modules are provided: - Mog - mscHack - MSM +- Nonlinear Circuits - Orbits - Path Set - Prism diff --git a/docs/LICENSES.md b/docs/LICENSES.md index 11798c6..224480b 100644 --- a/docs/LICENSES.md +++ b/docs/LICENSES.md @@ -56,6 +56,7 @@ Bellow follows a list of all code licenses used in Cardinal and linked submodule | Mog | CC0-1.0 | | | mscHack | BSD-3-Clause | | | MSM | MIT | Repo's [LICENSE-dist.md](https://github.com/netboy3/MSM-vcvrack-plugin/issues/10) includes wrong information | +| Nonlinear Circuits | CC0-1.0 | | | Orbits | GPL-3.0-or-later | | | Path Set | GPL-3.0-or-later | | | Prism | BSD-3-Clause | | @@ -168,6 +169,8 @@ Below is a list of artwork licenses from plugins | MSM/Fonts/DejaVuSansMono.ttf | Bitstream-Vera | | | MSM/Fonts/Segment7Standard.ttf | OFL-1.1-RFN | | | MSM/Fonts/Sudo.ttf | OFL-1.1-no-RFN | | +| nonlinearcircuits/* | CC0-1.0 | No artwork specific license provided | +| nonlinearcircuits/Audiowide-Regular.ttf | OFL-1.1-RFN | | | Orbits/* | CC-BY-NC-ND-4.0 | | | Orbits/fonts/ShareTechMono-Regular.ttf | OFL-1.1-RFN | | | PathSet/* | GPL-3.0-or-later | No artwork specific license provided | diff --git a/plugins/Makefile b/plugins/Makefile index fcbec11..b41dd17 100644 --- a/plugins/Makefile +++ b/plugins/Makefile @@ -689,6 +689,11 @@ PLUGIN_FILES += $(filter-out MSM/src/MSM.cpp,$(wildcard MSM/src/*.cpp)) # modules/types which are present in other plugins MSM_CUSTOM = ADSR BlankPanel Delay LFO LowFrequencyOscillator Mult Noise OP VCA VCO sawTable triTable +# -------------------------------------------------------------- +# Nonlinear Circuits + +PLUGIN_FILES += $(filter-out nonlinearcircuits/src/NLC.cpp,$(wildcard nonlinearcircuits/src/*.cpp)) + # -------------------------------------------------------------- # Orbits @@ -1581,6 +1586,13 @@ $(BUILD_DIR)/MSM/%.cpp.o: MSM/%.cpp -DpluginInstance=pluginInstance__MSM \ -DDARKTHEME +$(BUILD_DIR)/nonlinearcircuits/%.cpp.o: nonlinearcircuits/%.cpp + -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" + @echo "Compiling $<" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ \ + $(foreach m,$(NONLINEARCIRCUITS_CUSTOM),$(call custom_module_names,$(m),nonlinearcircuits)) \ + -DpluginInstance=pluginInstance__nonlinearcircuits + $(BUILD_DIR)/Orbits/%.cpp.o: Orbits/%.cpp -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)" @echo "Compiling $<" diff --git a/plugins/nonlinearcircuits b/plugins/nonlinearcircuits new file mode 160000 index 0000000..d7c3763 --- /dev/null +++ b/plugins/nonlinearcircuits @@ -0,0 +1 @@ +Subproject commit d7c3763ba3f801a3cfe98c49dfb7419a1477fd46 diff --git a/plugins/plugins.cpp b/plugins/plugins.cpp index 2f155e9..20488ab 100644 --- a/plugins/plugins.cpp +++ b/plugins/plugins.cpp @@ -610,6 +610,9 @@ extern Model* modelBlankPanel; #undef modelVCA #undef modelVCO +// Nonlinear Circuits +#include "nonlinearcircuits/src/NLC.hpp" + // Orbits #include "Orbits/src/plugin.hpp" @@ -735,6 +738,7 @@ Plugin* pluginInstance__MockbaModular; Plugin* pluginInstance__Mog; extern Plugin* pluginInstance__mscHack; Plugin* pluginInstance__MSM; +Plugin* pluginInstance__nonlinearcircuits; Plugin* pluginInstance__Orbits; Plugin* pluginInstance__PathSet; Plugin* pluginInstance__Prism; @@ -2215,6 +2219,30 @@ static void initStatic__MSM() } } +static void initStatic__nonlinearcircuits() +{ + Plugin* const p = new Plugin; + pluginInstance__nonlinearcircuits = p; + + const StaticPluginLoader spl(p, "nonlinearcircuits"); + if (spl.ok()) + { + p->addModel(model4Seq); + p->addModel(modelCipher); + p->addModel(modelBOOLs); + p->addModel(modelDivideConquer); + p->addModel(modelDivineCMOS); + p->addModel(modelDoubleNeuron); + p->addModel(modelGenie); + p->addModel(modelLetsSplosh); + p->addModel(modelNeuron); + p->addModel(modelNumberwang); + p->addModel(modelSegue); + p->addModel(modelSquidAxon); + p->addModel(modelStatues); + } +} + static void initStatic__Orbits() { Plugin* const p = new Plugin; @@ -2494,6 +2522,7 @@ void initStaticPlugins() initStatic__Mog(); initStatic__mscHack(); initStatic__MSM(); + initStatic__nonlinearcircuits(); initStatic__Orbits(); initStatic__PathSet(); initStatic__Prism(); diff --git a/src/custom/dep.cpp b/src/custom/dep.cpp index 5070a68..8154f7e 100644 --- a/src/custom/dep.cpp +++ b/src/custom/dep.cpp @@ -265,6 +265,20 @@ static const struct { { "/kocmoc/res/SKF.svg", {}, -1 }, { "/kocmoc/res/SVF.svg", {}, -1 }, { "/kocmoc/res/TRG.svg", {}, -1 }, + // CC0-1.0 + { "/nonlinearcircuits/res/NLC - 4seq.svg", {}, -1 }, + { "/nonlinearcircuits/res/NLC - 8 BIT CIPHER.svg", {}, -1 }, + { "/nonlinearcircuits/res/BOOLs2.svg", {}, -1 }, + { "/nonlinearcircuits/res/NLC - DIVIDE & CONQUER.svg", {}, -1 }, + { "/nonlinearcircuits/res/NLC - DIVINE CMOS.svg", {}, -1 }, + { "/nonlinearcircuits/res/DoubleNeuronRef.svg", {}, -1 }, + { "/nonlinearcircuits/res/NLC - GENiE.svg", {}, -1 }, + { "/nonlinearcircuits/res/LetsSplosh.svg", {}, -1 }, + { "/nonlinearcircuits/res/NLC - NEURON.svg", {}, -1 }, + { "/nonlinearcircuits/res/NLC - NUMBERWANG.svg", {}, -1 }, + { "/nonlinearcircuits/res/NLC - SEGUE.svg", {}, -1 }, + { "/nonlinearcircuits/res/squid-axon-papernoise-panel2.svg", {}, -1 }, + { "/nonlinearcircuits/res/NLC - STATUES.svg", {}, -1 }, // GPL-3.0-or-later { "/PathSet/res/AstroVibe.svg", {}, -1 }, { "/PathSet/res/IceTray.svg", {}, -1 }, @@ -365,6 +379,29 @@ static inline bool invertPaint(NSVGshape* const shape, NSVGpaint& paint, const c } } + // Special case for Nonlinear Circuits + if (svgFileToInvert != nullptr && std::strncmp(svgFileToInvert, "/nonlinearcircuits/", 19) == 0) + { + switch (paint.color) + { + case 0xff9a7900: + case 0xff96782c: + case 0xff6a07ae: + case 0xffcf8044: + case 0xff2ac6ba: + case 0xff5ba85c: + case 0xffa97b00: + case 0xff9f7a00: + case 0xffff7300: + case 0xffa47b00: + case 0xffb09423: + return false; + case 0xffffffff: + paint.color = 0x00000000; + return true; + } + } + // Special case for PathSet colors if (svgFileToInvert != nullptr && std::strncmp(svgFileToInvert, "/PathSet/", 9) == 0) {