diff --git a/Crawler/Ability.cpp b/Crawler/Ability.cpp
index 00ebf683..2f01e0cc 100644
--- a/Crawler/Ability.cpp
+++ b/Crawler/Ability.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Ability.h"
diff --git a/Crawler/Ability.h b/Crawler/Ability.h
index 78091d49..e7735b45 100644
--- a/Crawler/Ability.h
+++ b/Crawler/Ability.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/Animation.cpp b/Crawler/Animation.cpp
index 124c15e7..7f93d985 100644
--- a/Crawler/Animation.cpp
+++ b/Crawler/Animation.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Animation.h"
diff --git a/Crawler/Animation.h b/Crawler/Animation.h
index a56dff6a..f39f53f3 100644
--- a/Crawler/Animation.h
+++ b/Crawler/Animation.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/Arrow.cpp b/Crawler/Arrow.cpp
index ce75b6da..6886ddcb 100644
--- a/Crawler/Arrow.cpp
+++ b/Crawler/Arrow.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "BulletTypes.h"
diff --git a/Crawler/Attributable.h b/Crawler/Attributable.h
index 47703807..129c26d3 100644
--- a/Crawler/Attributable.h
+++ b/Crawler/Attributable.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/Buff.h b/Crawler/Buff.h
index d2907da9..c4caa24b 100644
--- a/Crawler/Buff.h
+++ b/Crawler/Buff.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/Bullet.cpp b/Crawler/Bullet.cpp
index 92b07d2d..faad9abb 100644
--- a/Crawler/Bullet.cpp
+++ b/Crawler/Bullet.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Bullet.h"
diff --git a/Crawler/Bullet.h b/Crawler/Bullet.h
index 56577013..d90a5ae6 100644
--- a/Crawler/Bullet.h
+++ b/Crawler/Bullet.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/BulletTypes.h b/Crawler/BulletTypes.h
index 39dbfeff..7cdc6dfc 100644
--- a/Crawler/BulletTypes.h
+++ b/Crawler/BulletTypes.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/C++ Header File (OLC-3).zip b/Crawler/C++ Header File (OLC-3).zip
index ae786494..d1814dda 100644
Binary files a/Crawler/C++ Header File (OLC-3).zip and b/Crawler/C++ Header File (OLC-3).zip differ
diff --git a/Crawler/C++ Source File (OLC-3).zip b/Crawler/C++ Source File (OLC-3).zip
index 72e54c5e..8334de3e 100644
Binary files a/Crawler/C++ Source File (OLC-3).zip and b/Crawler/C++ Source File (OLC-3).zip differ
diff --git a/Crawler/CharacterAbilityPreviewComponent.h b/Crawler/CharacterAbilityPreviewComponent.h
index 73bdae39..3677f76d 100644
--- a/Crawler/CharacterAbilityPreviewComponent.h
+++ b/Crawler/CharacterAbilityPreviewComponent.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/CharacterInfoWindow.cpp b/Crawler/CharacterInfoWindow.cpp
index 4abc981d..b2a380ab 100644
--- a/Crawler/CharacterInfoWindow.cpp
+++ b/Crawler/CharacterInfoWindow.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Crawler.h"
diff --git a/Crawler/CharacterRotatingDisplay.h b/Crawler/CharacterRotatingDisplay.h
index 1fa15236..fe2685b2 100644
--- a/Crawler/CharacterRotatingDisplay.h
+++ b/Crawler/CharacterRotatingDisplay.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/ChargedArrow.cpp b/Crawler/ChargedArrow.cpp
index a4a75ca6..909589b8 100644
--- a/Crawler/ChargedArrow.cpp
+++ b/Crawler/ChargedArrow.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "BulletTypes.h"
diff --git a/Crawler/Class.h b/Crawler/Class.h
index 24ab3744..2e4a4a25 100644
--- a/Crawler/Class.h
+++ b/Crawler/Class.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/ClassInfo.h b/Crawler/ClassInfo.h
index e9ab7a1c..d140161c 100644
--- a/Crawler/ClassInfo.h
+++ b/Crawler/ClassInfo.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/ClassSelectionWindow.cpp b/Crawler/ClassSelectionWindow.cpp
index 2f2dac78..f543adcc 100644
--- a/Crawler/ClassSelectionWindow.cpp
+++ b/Crawler/ClassSelectionWindow.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Crawler.h"
diff --git a/Crawler/ConnectionPoint.cpp b/Crawler/ConnectionPoint.cpp
index 7054a505..869ad004 100644
--- a/Crawler/ConnectionPoint.cpp
+++ b/Crawler/ConnectionPoint.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "State_OverworldMap.h"
diff --git a/Crawler/ConnectionPoint.h b/Crawler/ConnectionPoint.h
index 1e76d918..b7c5d9a8 100644
--- a/Crawler/ConnectionPoint.h
+++ b/Crawler/ConnectionPoint.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/Crawler.cpp b/Crawler/Crawler.cpp
index 0e13eea2..8b31e560 100644
--- a/Crawler/Crawler.cpp
+++ b/Crawler/Crawler.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "olcPGEX_TransformedView.h"
diff --git a/Crawler/Crawler.h b/Crawler/Crawler.h
index fcebf500..23295e82 100644
--- a/Crawler/Crawler.h
+++ b/Crawler/Crawler.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/Crawler.vcxproj b/Crawler/Crawler.vcxproj
index 128c07bc..1a4336cd 100644
--- a/Crawler/Crawler.vcxproj
+++ b/Crawler/Crawler.vcxproj
@@ -131,10 +131,13 @@
WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
stdcpp20
+ C:\Users\sigon\Documents\include;%(AdditionalIncludeDirectories)
Console
true
+ C:\Users\sigon\source\repos\Crawler\Crawler;%(AdditionalLibraryDirectories)
+ freetype.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)
powershell.exe -ExecutionPolicy Bypass -NoProfile -NonInteractive -File update_version.ps1 "./version.h"
@@ -187,10 +190,13 @@
_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
stdcpp20
+ C:\Users\sigon\Documents\include;%(AdditionalIncludeDirectories)
Console
true
+ C:\Users\sigon\source\repos\Crawler\Crawler;%(AdditionalLibraryDirectories)
+ freetype.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)
powershell.exe -ExecutionPolicy Bypass -NoProfile -NonInteractive -File update_version.ps1 "./version.h"
@@ -302,8 +308,16 @@
+
+
+
+
+
+
+
+
diff --git a/Crawler/Crawler.vcxproj.filters b/Crawler/Crawler.vcxproj.filters
index 9a43f092..4d50d115 100644
--- a/Crawler/Crawler.vcxproj.filters
+++ b/Crawler/Crawler.vcxproj.filters
@@ -273,6 +273,12 @@
Header Files\State
+
+ Header Files
+
+
+ Header Files
+
diff --git a/Crawler/DEFINES.h b/Crawler/DEFINES.h
index 25ac81cb..54c9c159 100644
--- a/Crawler/DEFINES.h
+++ b/Crawler/DEFINES.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/DamageNumber.cpp b/Crawler/DamageNumber.cpp
index 8b356321..6d024544 100644
--- a/Crawler/DamageNumber.cpp
+++ b/Crawler/DamageNumber.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "DamageNumber.h"
diff --git a/Crawler/DamageNumber.h b/Crawler/DamageNumber.h
index 1ad637e5..694f3b77 100644
--- a/Crawler/DamageNumber.h
+++ b/Crawler/DamageNumber.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/Effect.cpp b/Crawler/Effect.cpp
index 71123293..4945f610 100644
--- a/Crawler/Effect.cpp
+++ b/Crawler/Effect.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "DEFINES.h"
diff --git a/Crawler/Effect.h b/Crawler/Effect.h
index 3ffe007b..d2ae5ad4 100644
--- a/Crawler/Effect.h
+++ b/Crawler/Effect.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/Emitter.cpp b/Crawler/Emitter.cpp
index 81868a88..285438e8 100644
--- a/Crawler/Emitter.cpp
+++ b/Crawler/Emitter.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Emitter.h"
diff --git a/Crawler/Emitter.h b/Crawler/Emitter.h
index 18ec8b56..7e1543dc 100644
--- a/Crawler/Emitter.h
+++ b/Crawler/Emitter.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/EncountersSpawnListScrollableWindowComponent.h b/Crawler/EncountersSpawnListScrollableWindowComponent.h
index dcd4738a..bce8cf1d 100644
--- a/Crawler/EncountersSpawnListScrollableWindowComponent.h
+++ b/Crawler/EncountersSpawnListScrollableWindowComponent.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/EnergyBolt.cpp b/Crawler/EnergyBolt.cpp
index 6731ee80..ead5dcc3 100644
--- a/Crawler/EnergyBolt.cpp
+++ b/Crawler/EnergyBolt.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "BulletTypes.h"
diff --git a/Crawler/Error.h b/Crawler/Error.h
index f46563fd..917d8009 100644
--- a/Crawler/Error.h
+++ b/Crawler/Error.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/FallingDebris.h b/Crawler/FallingDebris.h
index 50d3ea16..bf5fccf8 100644
--- a/Crawler/FallingDebris.h
+++ b/Crawler/FallingDebris.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Effect.h"
diff --git a/Crawler/FireBolt.cpp b/Crawler/FireBolt.cpp
index 9f57f158..e925f19c 100644
--- a/Crawler/FireBolt.cpp
+++ b/Crawler/FireBolt.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "BulletTypes.h"
diff --git a/Crawler/GameState.cpp b/Crawler/GameState.cpp
index 7de93705..90a354fb 100644
--- a/Crawler/GameState.cpp
+++ b/Crawler/GameState.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Crawler.h"
diff --git a/Crawler/GameState.h b/Crawler/GameState.h
index 93e93436..f35a9fe8 100644
--- a/Crawler/GameState.h
+++ b/Crawler/GameState.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/InventoryConsumableWindow.cpp b/Crawler/InventoryConsumableWindow.cpp
index e6e64aa0..4400ae66 100644
--- a/Crawler/InventoryConsumableWindow.cpp
+++ b/Crawler/InventoryConsumableWindow.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Crawler.h"
diff --git a/Crawler/InventoryScrollableWindowComponent.h b/Crawler/InventoryScrollableWindowComponent.h
index a69a7a6d..b22b85b2 100644
--- a/Crawler/InventoryScrollableWindowComponent.h
+++ b/Crawler/InventoryScrollableWindowComponent.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/Item.cpp b/Crawler/Item.cpp
index 28260942..83ddf141 100644
--- a/Crawler/Item.cpp
+++ b/Crawler/Item.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Item.h"
diff --git a/Crawler/Item.h b/Crawler/Item.h
index 6ff7c72b..e07e750e 100644
--- a/Crawler/Item.h
+++ b/Crawler/Item.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/ItemDrop.cpp b/Crawler/ItemDrop.cpp
index 1b3b78e2..6703aff6 100644
--- a/Crawler/ItemDrop.cpp
+++ b/Crawler/ItemDrop.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "ItemDrop.h"
diff --git a/Crawler/ItemDrop.h b/Crawler/ItemDrop.h
index 03141f18..d40bab5a 100644
--- a/Crawler/ItemDrop.h
+++ b/Crawler/ItemDrop.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "olcPixelGameEngine.h"
diff --git a/Crawler/ItemLoadoutWindow.cpp b/Crawler/ItemLoadoutWindow.cpp
index 6300284b..57ce7724 100644
--- a/Crawler/ItemLoadoutWindow.cpp
+++ b/Crawler/ItemLoadoutWindow.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Crawler.h"
diff --git a/Crawler/Key.cpp b/Crawler/Key.cpp
index 8c7b575b..4ed7cf78 100644
--- a/Crawler/Key.cpp
+++ b/Crawler/Key.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Key.h"
diff --git a/Crawler/Key.h b/Crawler/Key.h
index 036ee210..e6f4e5c7 100644
--- a/Crawler/Key.h
+++ b/Crawler/Key.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/LICENSE b/Crawler/LICENSE
index bf076ad2..2eba1401 100644
--- a/Crawler/LICENSE
+++ b/Crawler/LICENSE
@@ -28,4 +28,8 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
diff --git a/Crawler/LICENSE_FT.txt b/Crawler/LICENSE_FT.txt
new file mode 100644
index 00000000..b60fa6e9
--- /dev/null
+++ b/Crawler/LICENSE_FT.txt
@@ -0,0 +1,166 @@
+ The FreeType Project LICENSE
+ ----------------------------
+
+ 2006-Jan-27
+
+ Copyright 1996-2002, 2006 by
+ David Turner, Robert Wilhelm, and Werner Lemberg
+
+
+
+Introduction
+============
+
+ The FreeType Project is distributed in several archive packages;
+ some of them may contain, in addition to the FreeType font engine,
+ various tools and contributions which rely on, or relate to, the
+ FreeType Project.
+
+ This license applies to all files found in such packages, and
+ which do not fall under their own explicit license. The license
+ affects thus the FreeType font engine, the test programs,
+ documentation and makefiles, at the very least.
+
+ This license was inspired by the BSD, Artistic, and IJG
+ (Independent JPEG Group) licenses, which all encourage inclusion
+ and use of free software in commercial and freeware products
+ alike. As a consequence, its main points are that:
+
+ o We don't promise that this software works. However, we will be
+ interested in any kind of bug reports. (`as is' distribution)
+
+ o You can use this software for whatever you want, in parts or
+ full form, without having to pay us. (`royalty-free' usage)
+
+ o You may not pretend that you wrote this software. If you use
+ it, or only parts of it, in a program, you must acknowledge
+ somewhere in your documentation that you have used the
+ FreeType code. (`credits')
+
+ We specifically permit and encourage the inclusion of this
+ software, with or without modifications, in commercial products.
+ We disclaim all warranties covering The FreeType Project and
+ assume no liability related to The FreeType Project.
+
+
+ Finally, many people asked us for a preferred form for a
+ credit/disclaimer to use in compliance with this license. We thus
+ encourage you to use the following text:
+
+ """
+ Portions of this software are copyright © The FreeType
+ Project (www.freetype.org). All rights reserved.
+ """
+
+ Please replace with the value from the FreeType version you
+ actually use.
+
+
+Legal Terms
+===========
+
+0. Definitions
+--------------
+
+ Throughout this license, the terms `package', `FreeType Project',
+ and `FreeType archive' refer to the set of files originally
+ distributed by the authors (David Turner, Robert Wilhelm, and
+ Werner Lemberg) as the `FreeType Project', be they named as alpha,
+ beta or final release.
+
+ `You' refers to the licensee, or person using the project, where
+ `using' is a generic term including compiling the project's source
+ code as well as linking it to form a `program' or `executable'.
+ This program is referred to as `a program using the FreeType
+ engine'.
+
+ This license applies to all files distributed in the original
+ FreeType Project, including all source code, binaries and
+ documentation, unless otherwise stated in the file in its
+ original, unmodified form as distributed in the original archive.
+ If you are unsure whether or not a particular file is covered by
+ this license, you must contact us to verify this.
+
+ The FreeType Project is copyright (C) 1996-2000 by David Turner,
+ Robert Wilhelm, and Werner Lemberg. All rights reserved except as
+ specified below.
+
+1. No Warranty
+--------------
+
+ THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY
+ KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO
+ USE, OF THE FREETYPE PROJECT.
+
+2. Redistribution
+-----------------
+
+ This license grants a worldwide, royalty-free, perpetual and
+ irrevocable right and license to use, execute, perform, compile,
+ display, copy, create derivative works of, distribute and
+ sublicense the FreeType Project (in both source and object code
+ forms) and derivative works thereof for any purpose; and to
+ authorize others to exercise some or all of the rights granted
+ herein, subject to the following conditions:
+
+ o Redistribution of source code must retain this license file
+ (`FTL.TXT') unaltered; any additions, deletions or changes to
+ the original files must be clearly indicated in accompanying
+ documentation. The copyright notices of the unaltered,
+ original files must be preserved in all copies of source
+ files.
+
+ o Redistribution in binary form must provide a disclaimer that
+ states that the software is based in part of the work of the
+ FreeType Team, in the distribution documentation. We also
+ encourage you to put an URL to the FreeType web page in your
+ documentation, though this isn't mandatory.
+
+ These conditions apply to any software derived from or based on
+ the FreeType Project, not just the unmodified files. If you use
+ our work, you must acknowledge us. However, no fee need be paid
+ to us.
+
+3. Advertising
+--------------
+
+ Neither the FreeType authors and contributors nor you shall use
+ the name of the other for commercial, advertising, or promotional
+ purposes without specific prior written permission.
+
+ We suggest, but do not require, that you use one or more of the
+ following phrases to refer to this software in your documentation
+ or advertising materials: `FreeType Project', `FreeType Engine',
+ `FreeType library', or `FreeType Distribution'.
+
+ As you have not signed this license, you are not required to
+ accept it. However, as the FreeType Project is copyrighted
+ material, only this license, or another one contracted with the
+ authors, grants you the right to use, distribute, and modify it.
+ Therefore, by using, distributing, or modifying the FreeType
+ Project, you indicate that you understand and accept all the terms
+ of this license.
+
+4. Contacts
+-----------
+
+ There are two mailing lists related to FreeType:
+
+ o freetype@nongnu.org
+
+ Discusses general use and applications of FreeType, as well as
+ future and wanted additions to the library and distribution.
+ If you are looking for support, start in this list if you
+ haven't found anything to help you in the documentation.
+
+ o freetype-devel@nongnu.org
+
+ Discusses bugs, as well as engine internals, design issues,
+ specific licenses, porting, etc.
+
+ Our home page can be found at
+
+ https://www.freetype.org
\ No newline at end of file
diff --git a/Crawler/LICENSE_OLC-3.txt b/Crawler/LICENSE_OLC-3.txt
new file mode 100644
index 00000000..dc238400
--- /dev/null
+++ b/Crawler/LICENSE_OLC-3.txt
@@ -0,0 +1,29 @@
+License (OLC-3)
+~~~~~~~~~~~~~~~
+
+Copyright 2018 - 2023 OneLoneCoder.com
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+1. Redistributions or derivations of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+2. Redistributions or derivative works in binary form must reproduce the above
+copyright notice. This list of conditions and the following disclaimer must be
+reproduced in the documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors may
+be used to endorse or promote products derived from this software without specific
+prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
\ No newline at end of file
diff --git a/Crawler/LevelCompleteWindow.cpp b/Crawler/LevelCompleteWindow.cpp
index f3dd38f8..29c3a9ed 100644
--- a/Crawler/LevelCompleteWindow.cpp
+++ b/Crawler/LevelCompleteWindow.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Menu.h"
diff --git a/Crawler/LightningBolt.cpp b/Crawler/LightningBolt.cpp
index 90cb491b..c27c17a3 100644
--- a/Crawler/LightningBolt.cpp
+++ b/Crawler/LightningBolt.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "BulletTypes.h"
diff --git a/Crawler/LightningBoltEmitter.cpp b/Crawler/LightningBoltEmitter.cpp
index cf37518f..b6353f3d 100644
--- a/Crawler/LightningBoltEmitter.cpp
+++ b/Crawler/LightningBoltEmitter.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Emitter.h"
diff --git a/Crawler/MainMenuWindow.cpp b/Crawler/MainMenuWindow.cpp
index 001415fb..166d6a9f 100644
--- a/Crawler/MainMenuWindow.cpp
+++ b/Crawler/MainMenuWindow.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Crawler.h"
diff --git a/Crawler/Map.cpp b/Crawler/Map.cpp
index 7574d4d4..ba89245e 100644
--- a/Crawler/Map.cpp
+++ b/Crawler/Map.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Map.h"
diff --git a/Crawler/Map.h b/Crawler/Map.h
index 3290740d..996e1e1f 100644
--- a/Crawler/Map.h
+++ b/Crawler/Map.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/Menu.cpp b/Crawler/Menu.cpp
index f11fd90c..172afe1c 100644
--- a/Crawler/Menu.cpp
+++ b/Crawler/Menu.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Crawler.h"
diff --git a/Crawler/Menu.h b/Crawler/Menu.h
index ade0eb4c..5c189274 100644
--- a/Crawler/Menu.h
+++ b/Crawler/Menu.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/MenuAnimatedIconButton.h b/Crawler/MenuAnimatedIconButton.h
index 4ee214ee..48b1e461 100644
--- a/Crawler/MenuAnimatedIconButton.h
+++ b/Crawler/MenuAnimatedIconButton.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/MenuAnimatedIconToggleButton.h b/Crawler/MenuAnimatedIconToggleButton.h
index 5eccbf8e..5ccd3a12 100644
--- a/Crawler/MenuAnimatedIconToggleButton.h
+++ b/Crawler/MenuAnimatedIconToggleButton.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/MenuComponent.cpp b/Crawler/MenuComponent.cpp
index 32ec69da..c9502b97 100644
--- a/Crawler/MenuComponent.cpp
+++ b/Crawler/MenuComponent.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Crawler.h"
diff --git a/Crawler/MenuComponent.h b/Crawler/MenuComponent.h
index 697444c9..53f926d4 100644
--- a/Crawler/MenuComponent.h
+++ b/Crawler/MenuComponent.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/MenuIconButton.h b/Crawler/MenuIconButton.h
index 4a79f8b7..ee7c28cb 100644
--- a/Crawler/MenuIconButton.h
+++ b/Crawler/MenuIconButton.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/MenuItemButton.h b/Crawler/MenuItemButton.h
index 867733ac..48230473 100644
--- a/Crawler/MenuItemButton.h
+++ b/Crawler/MenuItemButton.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/MenuItemItemButton.h b/Crawler/MenuItemItemButton.h
index 4bc0e746..bcc63527 100644
--- a/Crawler/MenuItemItemButton.h
+++ b/Crawler/MenuItemItemButton.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/MenuLabel.h b/Crawler/MenuLabel.h
index c8d47fbf..405105ed 100644
--- a/Crawler/MenuLabel.h
+++ b/Crawler/MenuLabel.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/Meteor.cpp b/Crawler/Meteor.cpp
index 6cad081a..8039da10 100644
--- a/Crawler/Meteor.cpp
+++ b/Crawler/Meteor.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Effect.h"
diff --git a/Crawler/Monster.cpp b/Crawler/Monster.cpp
index 81fc8a53..3751f5a1 100644
--- a/Crawler/Monster.cpp
+++ b/Crawler/Monster.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Monster.h"
diff --git a/Crawler/Monster.h b/Crawler/Monster.h
index fe382018..67dde272 100644
--- a/Crawler/Monster.h
+++ b/Crawler/Monster.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/MonsterAttribute.h b/Crawler/MonsterAttribute.h
index 6194ee39..911f8aff 100644
--- a/Crawler/MonsterAttribute.h
+++ b/Crawler/MonsterAttribute.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/MonsterData.cpp b/Crawler/MonsterData.cpp
index 601028fb..9c625a69 100644
--- a/Crawler/MonsterData.cpp
+++ b/Crawler/MonsterData.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "olcPixelGameEngine.h"
diff --git a/Crawler/MonsterStrategyHelpers.h b/Crawler/MonsterStrategyHelpers.h
index f93d0397..6c26d635 100644
--- a/Crawler/MonsterStrategyHelpers.h
+++ b/Crawler/MonsterStrategyHelpers.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/OverworldMapLevelWindow.cpp b/Crawler/OverworldMapLevelWindow.cpp
index dbecab44..bc5663b3 100644
--- a/Crawler/OverworldMapLevelWindow.cpp
+++ b/Crawler/OverworldMapLevelWindow.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Crawler.h"
diff --git a/Crawler/Pathfinding.cpp b/Crawler/Pathfinding.cpp
index 7e6d5107..6fdaec4a 100644
--- a/Crawler/Pathfinding.cpp
+++ b/Crawler/Pathfinding.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Pathfinding.h"
diff --git a/Crawler/Pathfinding.h b/Crawler/Pathfinding.h
index c46b68fe..7dab2fc3 100644
--- a/Crawler/Pathfinding.h
+++ b/Crawler/Pathfinding.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/Player.cpp b/Crawler/Player.cpp
index 4e2e27c2..628dbd9c 100644
--- a/Crawler/Player.cpp
+++ b/Crawler/Player.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Monster.h"
diff --git a/Crawler/Player.h b/Crawler/Player.h
index b48a805f..4a12e000 100644
--- a/Crawler/Player.h
+++ b/Crawler/Player.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/PopupMenuLabel.h b/Crawler/PopupMenuLabel.h
index 9e70dd8b..ea0b81d7 100644
--- a/Crawler/PopupMenuLabel.h
+++ b/Crawler/PopupMenuLabel.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/PulsatingFire.cpp b/Crawler/PulsatingFire.cpp
index ed97579a..a7d2f37a 100644
--- a/Crawler/PulsatingFire.cpp
+++ b/Crawler/PulsatingFire.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Effect.h"
diff --git a/Crawler/RUN_STRATEGY.cpp b/Crawler/RUN_STRATEGY.cpp
index f6e75649..e9e1dd20 100644
--- a/Crawler/RUN_STRATEGY.cpp
+++ b/Crawler/RUN_STRATEGY.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Monster.h"
diff --git a/Crawler/Ranger.cpp b/Crawler/Ranger.cpp
index 4574566d..787f93d1 100644
--- a/Crawler/Ranger.cpp
+++ b/Crawler/Ranger.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Class.h"
diff --git a/Crawler/RunAway.cpp b/Crawler/RunAway.cpp
index 9c0ec8de..771550c0 100644
--- a/Crawler/RunAway.cpp
+++ b/Crawler/RunAway.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Monster.h"
diff --git a/Crawler/RunTowards.cpp b/Crawler/RunTowards.cpp
index f9bed201..d7387d34 100644
--- a/Crawler/RunTowards.cpp
+++ b/Crawler/RunTowards.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Monster.h"
diff --git a/Crawler/ScrollableWindowComponent.h b/Crawler/ScrollableWindowComponent.h
index 034bdf0f..b8260141 100644
--- a/Crawler/ScrollableWindowComponent.h
+++ b/Crawler/ScrollableWindowComponent.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/ShootAfar.cpp b/Crawler/ShootAfar.cpp
index b38e87a5..16b1b1d2 100644
--- a/Crawler/ShootAfar.cpp
+++ b/Crawler/ShootAfar.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Monster.h"
diff --git a/Crawler/SlimeKing.cpp b/Crawler/SlimeKing.cpp
index 1a251b72..e4c58d44 100644
--- a/Crawler/SlimeKing.cpp
+++ b/Crawler/SlimeKing.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Monster.h"
diff --git a/Crawler/SpawnEncounterLabel.h b/Crawler/SpawnEncounterLabel.h
index d8127b58..b88cddda 100644
--- a/Crawler/SpawnEncounterLabel.h
+++ b/Crawler/SpawnEncounterLabel.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/State.h b/Crawler/State.h
index 9c472dfe..e29edd2f 100644
--- a/Crawler/State.h
+++ b/Crawler/State.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/State_GameRun.cpp b/Crawler/State_GameRun.cpp
index dcbe6605..d326cfb9 100644
--- a/Crawler/State_GameRun.cpp
+++ b/Crawler/State_GameRun.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "State_GameRun.h"
diff --git a/Crawler/State_GameRun.h b/Crawler/State_GameRun.h
index b58e32a2..240600ea 100644
--- a/Crawler/State_GameRun.h
+++ b/Crawler/State_GameRun.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/State_LevelComplete.cpp b/Crawler/State_LevelComplete.cpp
index 6f31f5f6..a1561bf6 100644
--- a/Crawler/State_LevelComplete.cpp
+++ b/Crawler/State_LevelComplete.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "State_LevelComplete.h"
diff --git a/Crawler/State_LevelComplete.h b/Crawler/State_LevelComplete.h
index bb35471d..716d1e26 100644
--- a/Crawler/State_LevelComplete.h
+++ b/Crawler/State_LevelComplete.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/State_MainMenu.cpp b/Crawler/State_MainMenu.cpp
index 0937dcef..4fe65cbd 100644
--- a/Crawler/State_MainMenu.cpp
+++ b/Crawler/State_MainMenu.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "State_MainMenu.h"
diff --git a/Crawler/State_MainMenu.h b/Crawler/State_MainMenu.h
index dc014ffa..134bcbda 100644
--- a/Crawler/State_MainMenu.h
+++ b/Crawler/State_MainMenu.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "GameState.h"
diff --git a/Crawler/State_OverworldMap.cpp b/Crawler/State_OverworldMap.cpp
index 6f626e49..752bd994 100644
--- a/Crawler/State_OverworldMap.cpp
+++ b/Crawler/State_OverworldMap.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "State_OverworldMap.h"
diff --git a/Crawler/State_OverworldMap.h b/Crawler/State_OverworldMap.h
index 90905dcc..b1a69756 100644
--- a/Crawler/State_OverworldMap.h
+++ b/Crawler/State_OverworldMap.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/State_Story.cpp b/Crawler/State_Story.cpp
index 37f4cc6f..abd15797 100644
--- a/Crawler/State_Story.cpp
+++ b/Crawler/State_Story.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "State_Story.h"
diff --git a/Crawler/State_Story.h b/Crawler/State_Story.h
index d468f6cc..c925d803 100644
--- a/Crawler/State_Story.h
+++ b/Crawler/State_Story.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/TMXParser.h b/Crawler/TMXParser.h
index bdfc015f..bec8d4f2 100644
--- a/Crawler/TMXParser.h
+++ b/Crawler/TMXParser.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/TSXParser.h b/Crawler/TSXParser.h
index 3b5e3484..ec51013d 100644
--- a/Crawler/TSXParser.h
+++ b/Crawler/TSXParser.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/Test.cpp b/Crawler/Test.cpp
index 9a84a567..1232dddb 100644
--- a/Crawler/Test.cpp
+++ b/Crawler/Test.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Test.h"
diff --git a/Crawler/Test.h b/Crawler/Test.h
index 04f6b280..e70c5d0e 100644
--- a/Crawler/Test.h
+++ b/Crawler/Test.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include
diff --git a/Crawler/TestMenu.cpp b/Crawler/TestMenu.cpp
index 0bc83f4c..3bc41fad 100644
--- a/Crawler/TestMenu.cpp
+++ b/Crawler/TestMenu.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Crawler.h"
diff --git a/Crawler/TestSubMenu.cpp b/Crawler/TestSubMenu.cpp
index dc04b371..0f44b680 100644
--- a/Crawler/TestSubMenu.cpp
+++ b/Crawler/TestSubMenu.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Crawler.h"
diff --git a/Crawler/Theme.h b/Crawler/Theme.h
index ad098bc5..c5de27fe 100644
--- a/Crawler/Theme.h
+++ b/Crawler/Theme.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/Thief.cpp b/Crawler/Thief.cpp
index 549505b7..407b8933 100644
--- a/Crawler/Thief.cpp
+++ b/Crawler/Thief.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Class.h"
diff --git a/Crawler/Toggleable.h b/Crawler/Toggleable.h
index b7c0586f..06230c34 100644
--- a/Crawler/Toggleable.h
+++ b/Crawler/Toggleable.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/Trapper.cpp b/Crawler/Trapper.cpp
index 6c223e40..bf6cadd2 100644
--- a/Crawler/Trapper.cpp
+++ b/Crawler/Trapper.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Class.h"
diff --git a/Crawler/Turret.cpp b/Crawler/Turret.cpp
index a6dc4ede..291beddc 100644
--- a/Crawler/Turret.cpp
+++ b/Crawler/Turret.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Monster.h"
diff --git a/Crawler/Unlock.cpp b/Crawler/Unlock.cpp
index 320f1c28..f317b4b2 100644
--- a/Crawler/Unlock.cpp
+++ b/Crawler/Unlock.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Unlock.h"
diff --git a/Crawler/Unlock.h b/Crawler/Unlock.h
index 8cf7e83e..777a6fa1 100644
--- a/Crawler/Unlock.h
+++ b/Crawler/Unlock.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/Version.h b/Crawler/Version.h
index 7b7e0b09..1649d1a7 100644
--- a/Crawler/Version.h
+++ b/Crawler/Version.h
@@ -29,13 +29,17 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright ?? 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
#define VERSION_MAJOR 0
#define VERSION_MINOR 2
#define VERSION_PATCH 1
-#define VERSION_BUILD 3259
+#define VERSION_BUILD 3260
#define stringify(a) stringify_(a)
#define stringify_(a) #a
diff --git a/Crawler/VisualNovel.cpp b/Crawler/VisualNovel.cpp
index a9e01276..674fa069 100644
--- a/Crawler/VisualNovel.cpp
+++ b/Crawler/VisualNovel.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "VisualNovel.h"
diff --git a/Crawler/VisualNovel.h b/Crawler/VisualNovel.h
index acf320b5..1b935faa 100644
--- a/Crawler/VisualNovel.h
+++ b/Crawler/VisualNovel.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include
diff --git a/Crawler/Warrior.cpp b/Crawler/Warrior.cpp
index cf28ecea..d8f2f510 100644
--- a/Crawler/Warrior.cpp
+++ b/Crawler/Warrior.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Class.h"
diff --git a/Crawler/Witch.cpp b/Crawler/Witch.cpp
index 300902d1..737b9290 100644
--- a/Crawler/Witch.cpp
+++ b/Crawler/Witch.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Class.h"
diff --git a/Crawler/Wizard.cpp b/Crawler/Wizard.cpp
index da73830a..115b5e46 100644
--- a/Crawler/Wizard.cpp
+++ b/Crawler/Wizard.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "Class.h"
diff --git a/Crawler/config.h b/Crawler/config.h
index 278e7891..206d865b 100644
--- a/Crawler/config.h
+++ b/Crawler/config.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/drawutil.cpp b/Crawler/drawutil.cpp
index ed6039b4..dad473d4 100644
--- a/Crawler/drawutil.cpp
+++ b/Crawler/drawutil.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "drawutil.h"
diff --git a/Crawler/drawutil.h b/Crawler/drawutil.h
index 0760543b..57154366 100644
--- a/Crawler/drawutil.h
+++ b/Crawler/drawutil.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/emscripten_build.ps1 b/Crawler/emscripten_build.ps1
index 0f73463c..48be344a 100644
--- a/Crawler/emscripten_build.ps1
+++ b/Crawler/emscripten_build.ps1
@@ -1,2 +1,2 @@
~\Documents\emsdk\emsdk_env.ps1 activate latest
-em++ -std=c++20 -O2 -s ALLOW_MEMORY_GROWTH=1 -s MAX_WEBGL_VERSION=2 -s MIN_WEBGL_VERSION=2 -s USE_LIBPNG=1 $(Get-ChildItem *.cpp) -o pge.html --preload-file assets
\ No newline at end of file
+em++ -std=c++20 -O2 -s ALLOW_MEMORY_GROWTH=1 -s MAX_WEBGL_VERSION=2 -s MIN_WEBGL_VERSION=2 -s USE_LIBPNG=1 -s USE_FREETYPE=1 $(Get-ChildItem *.cpp) -o pge.html --preload-file assets
\ No newline at end of file
diff --git a/Crawler/freetype.dll b/Crawler/freetype.dll
new file mode 100644
index 00000000..97fda661
Binary files /dev/null and b/Crawler/freetype.dll differ
diff --git a/Crawler/freetype.lib b/Crawler/freetype.lib
new file mode 100644
index 00000000..9e8d8c8a
Binary files /dev/null and b/Crawler/freetype.lib differ
diff --git a/Crawler/loc.sh b/Crawler/loc.sh
index 819792da..46432d0e 100755
--- a/Crawler/loc.sh
+++ b/Crawler/loc.sh
@@ -1,3 +1,3 @@
TOTAL=$(wc -l $(find *.cpp *.h -not -name "olc*.h")|grep "total"|awk '{print $1}')
FILECOUNT=$(find *.cpp *.h -not -name "olc*.h"|wc -l)
-echo "$[TOTAL-FILECOUNT*31] (License lines Excluded)"
+echo "$[TOTAL-FILECOUNT*37] (License lines Excluded)"
diff --git a/Crawler/olcPGEX_Gamepad.h b/Crawler/olcPGEX_Gamepad.h
new file mode 100644
index 00000000..d962c2c4
--- /dev/null
+++ b/Crawler/olcPGEX_Gamepad.h
@@ -0,0 +1,1355 @@
+#pragma region License
+/*
+License (OLC-3)
+~~~~~~~~~~~~~~~
+
+Copyright 2018 - 2023 OneLoneCoder.com
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+1. Redistributions or derivations of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+2. Redistributions or derivative works in binary form must reproduce the above
+copyright notice. This list of conditions and the following disclaimer must be
+reproduced in the documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors may
+be used to endorse or promote products derived from this software without specific
+prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
+*/
+#pragma endregion
+/*
+This PGEX was made possible by the following people:
+-Testers
+My Girlfriend (Thx for letting me borrow your time)
+Dragoneye
+Javid
+KrossX
+MaGetzUb
+Tutas
+Zleapingbear
+Huhlig
+Bispoo
+Lett1
+
+Thx for KrossX for giving me a link to his original work, which helped solve a
+few problems
+*/
+#include "olcPixelGameEngine.h"
+
+#include
+#include
+#include
+
+#pragma region Class Declaration
+
+#ifndef OLC_PGEX_GAMEPAD
+#define OLC_PGEX_GAMEPAD
+
+#ifdef WIN32
+#include
+#pragma comment(lib, "dinput8.lib")
+#pragma comment(lib, "dxguid.lib")
+#pragma comment(lib, "ole32.lib")
+#pragma comment(lib, "oleaut32.lib")
+#include
+#include
+
+#if _WIN32_WINNT == _WIN32_WINNT_NT4
+#define CURVERSION _WIN32_WINNT_NT4
+#elif _WIN32_WINNT == _WIN32_WINNT_WIN2K
+#define CURVERSION _WIN32_WINNT_WIN2K
+#elif _WIN32_WINNT == _WIN32_WINNT_WINXP
+#define CURVERSION _WIN32_WINNT_WINXP
+#elif _WIN32_WINNT == _WIN32_WINNT_WS03
+#define CURVERSION _WIN32_WINNT_WS03
+#elif _WIN32_WINNT == _WIN32_WINNT_WIN6
+#define CURVERSION _WIN32_WINNT_WIN6
+#elif _WIN32_WINNT == _WIN32_WINNT_WIN7
+#define CURVERSION _WIN32_WINNT_WIN7
+#elif _WIN32_WINNT == _WIN32_WINNT_WIN8
+#define CURVERSION _WIN32_WINNT_WIN8
+#elif _WIN32_WINNT == _WIN32_WINNT_WINBLUE
+#define CURVERSION _WIN32_WINNT_WINBLUE
+#elif _WIN32_WINNT == _WIN32_WINNT_WINXP
+#define CURVERSION _WIN32_WINNT_WINXP
+#elif _WIN32_WINNT == _WIN32_WINNT_WIN10
+#define CURVERSION _WIN32_WINNT_WIN10
+#endif
+
+#undef _WIN32_WINNT
+#define _WIN32_WINNT 1
+
+#include
+#undef _WIN32_WINNT
+#define _WIN32_WINNT CURVERSION
+#pragma comment(lib, "xinput9_1_0.lib")
+#endif
+
+#ifdef __linux__
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#endif
+
+namespace olc {
+#pragma region Enums
+#define GP_BUTTON_COUNT 18
+#define GP_AXIS_COUNT 8
+ enum class GPButtons {
+ FACE_D = 1,
+ FACE_L = 0,
+ FACE_R = 2,
+ FACE_U = 3,
+ L1 = 4,
+ L2 = 6,
+ L3 = 10,
+ R1 = 5,
+ R2 = 7,
+ R3 = 11,
+ SELECT = 8,
+ START = 9,
+ DPAD_L = 14,
+ DPAD_R = 15,
+ DPAD_U = 16,
+ DPAD_D = 17
+ };
+
+ enum class GPAxes {
+ LX = 1,
+ LY = 0,
+ RX = 5,
+ RY = 2,
+ TL = 4,
+ TR = 3,
+ DX = 6,
+ DY = 7,
+ };
+#pragma endregion
+
+ class GamePad : public olc::PGEX {
+ public:
+#ifdef WIN32
+ GamePad(LPCDIDEVICEINSTANCEA lpddi);
+ GamePad(DWORD xId);
+#endif
+#ifdef __linux__
+ GamePad(std::string path, int fd);
+#endif
+#ifdef __EMSCRIPTEN__
+ // TODO ctor
+ GamePad(long id, std::string name);
+#endif
+ GamePad(const GamePad &other) = delete;
+
+ ~GamePad();
+
+ static void init();
+
+ static std::vector &getGamepads();
+
+ float getAxis(GPAxes a);
+
+ bool hasAxis(GPAxes a);
+
+ HWButton getButton(GPButtons b);
+
+ bool hasButton(GPButtons b);
+
+ std::string getName();
+
+ std::string getId();
+
+ bool stillConnected = true;
+
+ [[nodiscard]] int getAxisCount() const;
+
+ [[nodiscard]] int getButtonCount() const;
+
+ void startVibration(float strength = 1) const;
+
+ void stopVibration() const;
+
+ static GamePad *selectWithButton(olc::GPButtons b);
+ static GamePad *selectWithAnyButton();
+
+ protected:
+ bool OnBeforeUserUpdate(float &fElapsedTime) override;
+
+ private:
+ GamePad() = default;
+ void poll();
+
+ static std::vector gamepads;
+
+ static void updateGamepads();
+
+ std::string name;
+ int axisCount = GP_AXIS_COUNT;
+ int buttonCount = GP_BUTTON_COUNT;
+ float axes[GP_AXIS_COUNT]{0};
+ olc::HWButton buttons[GP_BUTTON_COUNT];
+ bool ff = false;
+ bool availableButtons[GP_BUTTON_COUNT] = {false};
+ bool availableAxes[GP_AXIS_COUNT] = {false};
+
+ void handleButton(int id, bool value);
+
+#ifdef WIN32
+ LPDIRECTINPUTDEVICE8A thisDevice;
+ std::vector axisPositions;
+ LPDIRECTINPUTEFFECT effect = nullptr;
+ bool xInput = false;
+ DWORD xId;
+
+ static std::thread deviceEnumThread;
+ static IDirectInput8A *dev;
+#endif
+#ifdef __linux__
+
+ int fd = -1;
+ ff_effect effect{};
+ std::vector maxAbs;
+ std::string path;
+
+ void reconnect();
+ bool readEvent(input_event &event) const;
+
+ static void enumerateGamepads();
+ static GamePad *openGamepad(const std::string &path);
+ static X11::Display *display;
+ static std::optional inotifyFd;
+
+ constexpr static const int32_t buttonCodes[GP_BUTTON_COUNT]{BTN_X,
+ BTN_A,
+ BTN_B,
+ BTN_Y,
+ BTN_TL,
+ BTN_TR,
+ BTN_TL2,
+ BTN_TR2,
+ BTN_SELECT,
+ BTN_START,
+ BTN_THUMBL,
+ BTN_THUMBR,
+ 0,
+ 0,
+ BTN_DPAD_LEFT,
+ BTN_DPAD_RIGHT,
+ BTN_DPAD_UP,
+ BTN_DPAD_DOWN};
+
+ constexpr static const int32_t axisCodes[GP_AXIS_COUNT]{
+ ABS_Y, ABS_X, ABS_RY, ABS_RZ, ABS_Z, ABS_RX, ABS_HAT0X, ABS_HAT0Y};
+#endif
+#ifdef __EMSCRIPTEN__
+ long id;
+
+ constexpr static const int32_t buttonCodes[GP_BUTTON_COUNT]{
+ 2, 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0, 14, 15, 12, 13};
+#endif
+ };
+} // namespace olc
+
+#endif
+
+#pragma endregion
+
+#ifdef OLC_PGE_GAMEPAD
+#undef OLC_PGE_GAMEPAD
+
+#pragma region Custom Dataformat
+#ifdef WIN32
+
+struct GamePadState {
+ DWORD axes[GP_AXIS_COUNT];
+ DWORD povHat;
+ BYTE buttons[GP_BUTTON_COUNT];
+};
+
+#ifndef DIDFT_OPTIONAL
+constexpr DWORD DIDFT_OPTIONAL = 0x80000000;
+#endif
+
+DIOBJECTDATAFORMAT g_aObjectFormats[27] = {
+ {0, (DWORD)FIELD_OFFSET(GamePadState, axes[1]),
+ DIDFT_AXIS | DIDFT_ANYINSTANCE, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, axes[0]),
+ DIDFT_AXIS | DIDFT_ANYINSTANCE, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, axes[3]),
+ DIDFT_AXIS | DIDFT_ANYINSTANCE | DIDFT_OPTIONAL, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, axes[2]),
+ DIDFT_AXIS | DIDFT_ANYINSTANCE | DIDFT_OPTIONAL, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, axes[4]),
+ DIDFT_AXIS | DIDFT_ANYINSTANCE | DIDFT_OPTIONAL, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, axes[5]),
+ DIDFT_AXIS | DIDFT_ANYINSTANCE | DIDFT_OPTIONAL, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, povHat),
+ DIDFT_POV | DIDFT_ANYINSTANCE, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, buttons[0]),
+ DIDFT_BUTTON | DIDFT_ANYINSTANCE | 0x80000000, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, buttons[1]),
+ DIDFT_BUTTON | DIDFT_ANYINSTANCE | 0x80000000, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, buttons[2]),
+ DIDFT_BUTTON | DIDFT_ANYINSTANCE | 0x80000000, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, buttons[3]),
+ DIDFT_BUTTON | DIDFT_ANYINSTANCE | 0x80000000, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, buttons[4]),
+ DIDFT_BUTTON | DIDFT_ANYINSTANCE | 0x80000000, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, buttons[5]),
+ DIDFT_BUTTON | DIDFT_ANYINSTANCE | 0x80000000, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, buttons[6]),
+ DIDFT_BUTTON | DIDFT_ANYINSTANCE | 0x80000000, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, buttons[7]),
+ DIDFT_BUTTON | DIDFT_ANYINSTANCE | 0x80000000, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, buttons[8]),
+ DIDFT_BUTTON | DIDFT_ANYINSTANCE | 0x80000000, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, buttons[9]),
+ DIDFT_BUTTON | DIDFT_ANYINSTANCE | 0x80000000, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, buttons[10]),
+ DIDFT_BUTTON | DIDFT_ANYINSTANCE | 0x80000000, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, buttons[11]),
+ DIDFT_BUTTON | DIDFT_ANYINSTANCE | 0x80000000, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, buttons[12]),
+ DIDFT_BUTTON | DIDFT_ANYINSTANCE | 0x80000000, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, buttons[13]),
+ DIDFT_BUTTON | DIDFT_ANYINSTANCE | 0x80000000, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, buttons[14]),
+ DIDFT_BUTTON | DIDFT_ANYINSTANCE | 0x80000000, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, buttons[15]),
+ DIDFT_BUTTON | DIDFT_ANYINSTANCE | 0x80000000, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, buttons[16]),
+ DIDFT_BUTTON | DIDFT_ANYINSTANCE | 0x80000000, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, buttons[17]),
+ DIDFT_BUTTON | DIDFT_ANYINSTANCE | 0x80000000, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, buttons[18]),
+ DIDFT_BUTTON | DIDFT_ANYINSTANCE | 0x80000000, 0},
+ {0, (DWORD)FIELD_OFFSET(GamePadState, buttons[19]),
+ DIDFT_BUTTON | DIDFT_ANYINSTANCE | 0x80000000, 0},
+};
+
+DIDATAFORMAT gamepad = {sizeof(DIDATAFORMAT),
+sizeof(DIOBJECTDATAFORMAT),
+DIDF_ABSAXIS,
+sizeof(GamePadState),
+27,
+g_aObjectFormats};
+
+#endif
+#pragma endregion
+
+#pragma region Class Definition
+
+#pragma region Platform Dependent
+
+#pragma region Windows
+#ifdef WIN32
+
+IDirectInput8A *olc::GamePad::dev = nullptr;
+
+std::thread olc::GamePad::deviceEnumThread;
+
+#define SAFE_RELEASE(p) \
+ { \
+ if ((p)) { \
+ (p)->Release(); \
+ (p) = 0; \
+ } \
+ }
+BOOL IsXInputDevice(const GUID *pGuidProductFromDirectInput) {
+ IWbemLocator *pIWbemLocator = NULL;
+ IEnumWbemClassObject *pEnumDevices = NULL;
+ IWbemClassObject *pDevices[20] = {0};
+ IWbemServices *pIWbemServices = NULL;
+ BSTR bstrNamespace = NULL;
+ BSTR bstrDeviceID = NULL;
+ BSTR bstrClassName = NULL;
+ DWORD uReturned = 0;
+ bool bIsXinputDevice = false;
+ UINT iDevice = 0;
+ VARIANT var;
+ HRESULT hr;
+
+ // CoInit if needed
+ hr = CoInitialize(NULL);
+ bool bCleanupCOM = SUCCEEDED(hr);
+
+ // So we can call VariantClear() later, even if we never had a successful
+ // IWbemClassObject::Get().
+ VariantInit(&var);
+
+ // Create WMI
+ hr = CoCreateInstance(__uuidof(WbemLocator), NULL, CLSCTX_INPROC_SERVER,
+ __uuidof(IWbemLocator), (LPVOID *)&pIWbemLocator);
+ if (FAILED(hr) || pIWbemLocator == NULL)
+ goto LCleanup;
+
+ bstrNamespace = SysAllocString(L"\\\\.\\root\\cimv2");
+ if (bstrNamespace == NULL)
+ goto LCleanup;
+ bstrClassName = SysAllocString(L"Win32_PNPEntity");
+ if (bstrClassName == NULL)
+ goto LCleanup;
+ bstrDeviceID = SysAllocString(L"DeviceID");
+ if (bstrDeviceID == NULL)
+ goto LCleanup;
+
+ // Connect to WMI
+ hr = pIWbemLocator->ConnectServer(bstrNamespace, NULL, NULL, 0L, 0L, NULL,
+ NULL, &pIWbemServices);
+ if (FAILED(hr) || pIWbemServices == NULL)
+ goto LCleanup;
+
+ // Switch security level to IMPERSONATE.
+ CoSetProxyBlanket(pIWbemServices, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL,
+ RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL,
+ EOAC_NONE);
+
+ hr =
+ pIWbemServices->CreateInstanceEnum(bstrClassName, 0, NULL, &pEnumDevices);
+ if (FAILED(hr) || pEnumDevices == NULL)
+ goto LCleanup;
+
+ // Loop over all devices
+ for (;;) {
+ // Get 20 at a time
+ hr = pEnumDevices->Next(10000, 20, pDevices, &uReturned);
+ if (FAILED(hr))
+ goto LCleanup;
+ if (uReturned == 0)
+ break;
+
+ for (iDevice = 0; iDevice < uReturned; iDevice++) {
+ // For each device, get its device ID
+ hr = pDevices[iDevice]->Get(bstrDeviceID, 0L, &var, NULL, NULL);
+ if (SUCCEEDED(hr) && var.vt == VT_BSTR && var.bstrVal != NULL) {
+ // Check if the device ID contains "IG_". If it does, then it's
+ // an XInput device This information can not be found from
+ // DirectInput
+ if (wcsstr(var.bstrVal, L"IG_")) {
+ // If it does, then get the VID/PID from var.bstrVal
+ DWORD dwPid = 0, dwVid = 0;
+ WCHAR *strVid = wcsstr(var.bstrVal, L"VID_");
+ if (strVid && swscanf_s(strVid, L"VID_%4X", &dwVid) != 1)
+ dwVid = 0;
+ WCHAR *strPid = wcsstr(var.bstrVal, L"PID_");
+ if (strPid && swscanf_s(strPid, L"PID_%4X", &dwPid) != 1)
+ dwPid = 0;
+
+ // Compare the VID/PID to the DInput device
+ DWORD dwVidPid = MAKELONG(dwVid, dwPid);
+ if (dwVidPid == pGuidProductFromDirectInput->Data1) {
+ bIsXinputDevice = true;
+ goto LCleanup;
+ }
+ }
+ }
+ VariantClear(&var);
+ SAFE_RELEASE(pDevices[iDevice]);
+ }
+ }
+
+LCleanup:
+ VariantClear(&var);
+ if (bstrNamespace)
+ SysFreeString(bstrNamespace);
+ if (bstrDeviceID)
+ SysFreeString(bstrDeviceID);
+ if (bstrClassName)
+ SysFreeString(bstrClassName);
+ for (iDevice = 0; iDevice < 20; iDevice++)
+ SAFE_RELEASE(pDevices[iDevice]);
+ SAFE_RELEASE(pEnumDevices);
+ SAFE_RELEASE(pIWbemLocator);
+ SAFE_RELEASE(pIWbemServices);
+
+ if (bCleanupCOM)
+ CoUninitialize();
+
+ return bIsXinputDevice;
+}
+void olc::GamePad::init() {
+ HINSTANCE hinst = GetModuleHandle(NULL);
+ DirectInput8Create(hinst, DIRECTINPUT_VERSION, IID_IDirectInput8A,
+ (LPVOID *)&dev, NULL);
+
+ pge->pgex_Register(new olc::GamePad());
+
+ deviceEnumThread = std::thread{[&]() {
+ auto enumFunction = [](LPCDIDEVICEINSTANCEA lpddi, LPVOID pvRef) {
+ if (!(lpddi->dwDevType & DI8DEVTYPE_GAMEPAD)) {
+ return DIENUM_CONTINUE;
+ }
+
+ auto result = reinterpret_cast *>(pvRef);
+ if (!IsXInputDevice(&lpddi->guidProduct)) {
+ bool found = false;
+ for (auto &gamepad : *result) {
+ if (gamepad->getId() == lpddi->tszInstanceName) {
+ found = true;
+ if (!gamepad->stillConnected) {
+ gamepad->stillConnected = true;
+ }
+ break;
+ }
+ }
+ if (found) {
+ return DIENUM_CONTINUE;
+ }
+ result->push_back(new olc::GamePad{lpddi});
+ }
+
+ return DIENUM_CONTINUE;
+ };
+ while (true) {
+ for (DWORD i = 0; i < XUSER_MAX_COUNT; i++) {
+ XINPUT_STATE state;
+ DWORD dwResult = XInputGetState(i, &state);
+ if (dwResult == ERROR_SUCCESS) {
+ bool found = false;
+ for (auto &gamepad : gamepads) {
+ if (gamepad->getId() == std::to_string(i)) {
+ found = true;
+ if (!gamepad->stillConnected) {
+ gamepad->stillConnected = true;
+ }
+ break;
+ }
+ }
+ if (found) {
+ continue;
+ }
+ gamepads.push_back(new GamePad{i});
+ }
+ }
+
+ dev->EnumDevices(DI8DEVCLASS_GAMECTRL, enumFunction, (LPVOID)&gamepads,
+ DIEDFL_ALLDEVICES);
+ }
+ }};
+ deviceEnumThread.detach();
+}
+
+void olc::GamePad::updateGamepads() {}
+
+inline olc::GamePad::GamePad(LPCDIDEVICEINSTANCEA lpddi) {
+ name = lpddi->tszInstanceName;
+
+ dev->CreateDevice(lpddi->guidInstance, &thisDevice, NULL);
+
+ DIDEVCAPS caps;
+ caps.dwSize = sizeof(DIDEVCAPS);
+ thisDevice->GetCapabilities(&caps);
+
+ DIPROPDWORD bufferSize;
+ bufferSize.diph.dwHeaderSize = sizeof(DIPROPHEADER);
+ bufferSize.diph.dwSize = sizeof(DIPROPDWORD);
+ bufferSize.diph.dwHow = DIPH_DEVICE;
+ bufferSize.diph.dwObj = 0;
+ bufferSize.dwData = 128;
+ thisDevice->SetProperty(DIPROP_BUFFERSIZE, &bufferSize.diph);
+ ff = caps.dwFlags & DIDC_FORCEFEEDBACK;
+
+ thisDevice->SetDataFormat(&gamepad);
+
+ auto enumDOFunction = [](LPCDIDEVICEOBJECTINSTANCEA lpddoi, LPVOID pvRef) {
+ IDirectInputDevice8A *thisDevice;
+ std::vector *axisPositions;
+
+ std::tie(thisDevice, axisPositions) = *reinterpret_cast<
+ std::tuple *> *>(pvRef);
+
+ // Axis
+ if (lpddoi->dwType & DIDFT_AXIS) {
+ DIPROPRANGE range;
+ range.diph.dwSize = sizeof(DIPROPRANGE);
+ range.diph.dwHeaderSize = sizeof(DIPROPHEADER);
+ range.diph.dwHow = DIPH_BYID;
+ range.diph.dwObj = lpddoi->dwType;
+ range.lMin = -1000;
+ range.lMax = 1000;
+ thisDevice->SetProperty(DIPROP_RANGE, &range.diph);
+ axisPositions->push_back((lpddoi->dwType >> 8) & 0xffff);
+ }
+
+ // Button
+ if (lpddoi->dwType & DIDFT_BUTTON) {
+ }
+
+ // POVhat
+ if (lpddoi->dwType & DIDFT_POV) {
+ }
+
+ return DIENUM_CONTINUE;
+ };
+
+ for (int i = 0; i < GP_BUTTON_COUNT; i++) {
+ availableButtons[i] = true;
+ }
+ for (int i = 0; i < GP_AXIS_COUNT; i++) {
+ availableAxes[i] = true;
+ }
+
+ auto input = std::make_tuple(thisDevice, &axisPositions);
+
+ thisDevice->EnumObjects(enumDOFunction, &input, DIDFT_ALL);
+
+ int min = 0x7fffffff;
+ for (auto p : axisPositions)
+ min = std::min(min, p);
+
+ for (auto &p : axisPositions)
+ p -= min;
+
+ for (int i = 0; i < GP_AXIS_COUNT; i++)
+ axes[i] = 0;
+ for (int i = 0; i < GP_BUTTON_COUNT; i++) {
+ buttons[i].bHeld = false;
+ buttons[i].bPressed = false;
+ buttons[i].bReleased = false;
+ }
+
+ if (ff) {
+ DIPERIODIC periodic;
+ periodic.dwMagnitude = DI_FFNOMINALMAX;
+ periodic.lOffset = 0;
+ periodic.dwPhase = 0;
+ periodic.dwPeriod = DWORD(0.05f * DI_SECONDS);
+ DIEFFECT eff;
+ eff.dwSize = sizeof(DIEFFECT);
+ eff.dwDuration = INFINITE;
+ eff.dwFlags = DIEFF_POLAR | DIEFF_OBJECTOFFSETS;
+ eff.dwSamplePeriod = 0;
+ eff.dwGain = DI_FFNOMINALMAX;
+ eff.cAxes = 2;
+ DWORD axes[] = {DIJOFS_X, DIJOFS_Y};
+ eff.rgdwAxes = axes;
+ LONG lDirection[2] = {0, 0};
+ eff.rglDirection = lDirection;
+ eff.cbTypeSpecificParams = sizeof(periodic);
+ eff.lpvTypeSpecificParams = &periodic;
+
+ thisDevice->CreateEffect(GUID_Sine, &eff, &effect, NULL);
+ if (effect) {
+ effect->Download();
+ effect->Stop();
+ } else {
+ ff = false;
+ }
+ }
+
+ thisDevice->Acquire();
+}
+
+inline olc::GamePad::GamePad(DWORD xId) : xId(xId), xInput(true) {
+ XINPUT_CAPABILITIES caps;
+ XInputGetCapabilities(xId, 0, &caps);
+ for (int i = 0; i < GP_BUTTON_COUNT; i++) {
+ availableButtons[i] = true;
+ }
+ for (int i = 0; i < GP_AXIS_COUNT; i++) {
+ availableAxes[i] = true;
+ }
+ name = "XInput Controller";
+}
+
+void olc::GamePad::poll() {
+ if (!stillConnected) {
+ return;
+ }
+
+ for (int i = 0; i < GP_BUTTON_COUNT; i++) {
+ buttons[i].bPressed = false;
+ buttons[i].bReleased = false;
+ }
+
+ if (!xInput) {
+ DIDEVICEOBJECTDATA data[128];
+
+ if (FAILED(thisDevice->Poll())) {
+ thisDevice->Acquire();
+ stillConnected = false;
+ return;
+ }
+
+ DWORD items = 128;
+ thisDevice->GetDeviceData(sizeof(DIDEVICEOBJECTDATA), data, &items, 0);
+
+ for (size_t i = 0; i < items; i++) {
+ // Button
+ if (data[i].dwOfs >= (DWORD)FIELD_OFFSET(GamePadState, buttons[0]) &&
+ data[i].dwOfs <= (DWORD)FIELD_OFFSET(GamePadState, buttons[19])) {
+ int id = data[i].dwOfs - FIELD_OFFSET(GamePadState, buttons[0]);
+ bool pressed = data[i].dwData & 0x80;
+ handleButton(id, pressed);
+ }
+
+ // POVhat
+ if (data[i].dwOfs == FIELD_OFFSET(GamePadState, povHat)) {
+ switch (data[i].dwData / DI_DEGREES / 45) {
+ case 0:
+ axes[6] = 0;
+ axes[7] = -1;
+ break;
+ case 1:
+ axes[6] = 1;
+ axes[7] = -1;
+ break;
+ case 2:
+ axes[6] = 1;
+ axes[7] = 0;
+ break;
+ case 3:
+ axes[6] = 1;
+ axes[7] = 1;
+ break;
+ case 4:
+ axes[6] = 0;
+ axes[7] = 1;
+ break;
+ case 5:
+ axes[6] = -1;
+ axes[7] = 1;
+ break;
+ case 6:
+ axes[6] = -1;
+ axes[7] = 0;
+ break;
+ case 7:
+ axes[6] = -1;
+ axes[7] = -1;
+ break;
+ default:
+ axes[6] = 0;
+ axes[7] = 0;
+ }
+
+ int x = int(axes[6]), y = int(axes[7]);
+ handleButton(14, x == -1);
+ handleButton(15, x == 1);
+ handleButton(16, y == -1);
+ handleButton(17, y == 1);
+ }
+
+ // Axis
+ if (data[i].dwOfs >= (DWORD)FIELD_OFFSET(GamePadState, axes[0]) &&
+ data[i].dwOfs <= (DWORD)FIELD_OFFSET(GamePadState, axes[5])) {
+ int id = ((data[i].dwOfs - offsetof(GamePadState, axes[0])) / 4);
+ int val = data[i].dwData;
+ axes[axisPositions[id]] = val / 1000.0f;
+ }
+ }
+ } else {
+ XINPUT_STATE state;
+ ZeroMemory(&state, sizeof(XINPUT_STATE));
+ int res = XInputGetState(xId, &state);
+
+ if (res == ERROR_DEVICE_NOT_CONNECTED) {
+ stillConnected = false;
+ return;
+ }
+
+ axes[2] = -state.Gamepad.sThumbRY / 32768.0f;
+ axes[5] = state.Gamepad.sThumbRX / 32768.0f;
+ axes[0] = -state.Gamepad.sThumbLY / 32768.0f;
+ axes[1] = state.Gamepad.sThumbLX / 32768.0f;
+
+ axes[4] = state.Gamepad.bLeftTrigger / 255.0f;
+ axes[3] = state.Gamepad.bRightTrigger / 255.0f;
+
+ bool u, d, l, r;
+ u = state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP;
+ d = state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN;
+ l = state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT;
+ r = state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT;
+
+ axes[6] = float(r - l);
+ axes[7] = float(d - u);
+
+ WORD buttonCodes[]{
+ XINPUT_GAMEPAD_X,
+ XINPUT_GAMEPAD_A,
+ XINPUT_GAMEPAD_B,
+ XINPUT_GAMEPAD_Y,
+ XINPUT_GAMEPAD_LEFT_SHOULDER,
+ XINPUT_GAMEPAD_RIGHT_SHOULDER,
+ 0,
+ 0,
+ XINPUT_GAMEPAD_BACK,
+ XINPUT_GAMEPAD_START,
+ XINPUT_GAMEPAD_LEFT_THUMB,
+ XINPUT_GAMEPAD_RIGHT_THUMB,
+ 0,
+ 0,
+ XINPUT_GAMEPAD_DPAD_LEFT,
+ XINPUT_GAMEPAD_DPAD_RIGHT,
+ XINPUT_GAMEPAD_DPAD_UP,
+ XINPUT_GAMEPAD_DPAD_DOWN,
+ };
+
+ for (size_t i = 0; i < GP_BUTTON_COUNT; i++) {
+ bool pressed = state.Gamepad.wButtons & buttonCodes[i];
+ handleButton(i, pressed);
+ }
+
+ handleButton(6, axes[4] > 0.75f);
+ handleButton(7, axes[3] > 0.75f);
+ }
+}
+
+void olc::GamePad::startVibration(float strength) const {
+ if (xInput) {
+ if (strength < 0)
+ strength = 0;
+ if (strength > 1)
+ strength = 1;
+
+ XINPUT_VIBRATION vib;
+ ZeroMemory(&vib, sizeof(XINPUT_VIBRATION));
+ vib.wLeftMotorSpeed = short(65535 * strength);
+ vib.wRightMotorSpeed = short(65535 * strength);
+ XInputSetState(xId, &vib);
+ } else if (ff) {
+ DIEFFECT gainMod;
+ gainMod.dwGain = DWORD(DI_FFNOMINALMAX * strength);
+ effect->SetParameters(&gainMod, DIEP_GAIN);
+ effect->Download();
+ effect->Start(1, DIES_SOLO);
+ }
+}
+
+void olc::GamePad::stopVibration() const {
+ if (xInput)
+ startVibration(0);
+ else {
+ if (ff)
+ effect->Stop();
+ }
+}
+
+olc::GamePad::~GamePad() {}
+
+std::string olc::GamePad::getId() {
+ return xInput ? std::to_string(xId) : name;
+}
+
+#endif
+#pragma endregion
+
+#pragma region Linux
+
+#ifdef __linux__
+
+X11::Display *olc::GamePad::display{};
+std::optional olc::GamePad::inotifyFd = std::nullopt;
+
+olc::GamePad *olc::GamePad::openGamepad(const std::string &path) {
+ // Parse the bit array from ioctl
+ auto getNthBit = [](const unsigned char *bits, int n) {
+ return (bits[n / 8] >> (n % 8)) & 1;
+ };
+
+ // Open the file, if can't, it's definitely not a device we can use
+ int fd = open(path.c_str(), O_RDWR | O_NONBLOCK);
+ if (fd < 0) {
+ close(fd);
+ return nullptr;
+ }
+
+ // Get the key events the device could send
+ unsigned char keyBits[KEY_CNT];
+ ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keyBits)), keyBits);
+ // All gamepads *should* have BTN_GAMEPAD
+ if (!getNthBit(keyBits, BTN_GAMEPAD)) {
+ close(fd);
+ return nullptr;
+ }
+
+ return new olc::GamePad{path, fd};
+}
+
+// Create a gamepad from a path to the event file
+olc::GamePad::GamePad(std::string path, int fd)
+ : path{std::move(path)}, availableAxes{false},
+ availableButtons{false}, effect{}, fd{fd} {
+ // Parse the bit array from ioctl
+ auto getNthBit = [](const unsigned char *bits, int n) {
+ return (bits[n / 8] >> (n % 8)) & 1;
+ };
+
+ // Query the deviceName of the device, if it has one
+ char deviceName[256] = "";
+ if (ioctl(fd, EVIOCGNAME(256), deviceName) > 0) {
+ this->name = deviceName;
+ } else {
+ this->name = "Undefined";
+ }
+
+ // Get the buttons the device reports
+ unsigned char keyBits[KEY_CNT];
+ ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keyBits)), keyBits);
+
+ // Get the axes the device reports
+ unsigned char axisBits[ABS_CNT];
+ ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(axisBits)), axisBits);
+
+ for (int i = 0; i < GP_BUTTON_COUNT; i++) {
+ availableButtons[i] = getNthBit(keyBits, buttonCodes[i]);
+ }
+
+ for (int i = 0; i < GP_AXIS_COUNT; i++) {
+ availableAxes[i] = getNthBit(axisBits, axisCodes[i]);
+ input_absinfo absinfo{};
+ ioctl(fd, EVIOCGABS(axisCodes[i]), &absinfo);
+ maxAbs.push_back(absinfo.maximum);
+ }
+
+ unsigned char features[1 + FF_MAX / 8] = {0};
+ ioctl(fd, EVIOCGBIT(EV_FF, sizeof(features)), features);
+
+ // effect data common to both types
+ memset(&effect, 0, sizeof(effect));
+ effect.replay.delay = 0;
+ effect.replay.length = 0xffff;
+ effect.id = -1;
+ effect.direction = 0;
+
+ if (ff = getNthBit(features, FF_PERIODIC)) {
+ // Support Vibrations based on FF_PERIODIC
+
+ effect.u.periodic.waveform = FF_SINE;
+ effect.u.periodic.period = 100;
+ effect.u.periodic.magnitude = 0x7fff;
+ effect.u.periodic.offset = 0;
+ effect.u.periodic.phase = 0;
+ effect.u.periodic.envelope.attack_length = 0;
+ effect.u.periodic.envelope.attack_level = 0x7fff;
+ effect.u.periodic.envelope.fade_length = 0;
+ effect.u.periodic.envelope.fade_level = 0x7fff;
+ effect.type = FF_PERIODIC;
+
+ if (ioctl(fd, EVIOCSFF, &effect) == -1) {
+ perror("Error:");
+ }
+ } else if (ff = getNthBit(features, FF_RUMBLE)) {
+ // Support Vibrations based on FF_RUMBLE
+
+ effect.type = FF_RUMBLE;
+ effect.u.rumble.weak_magnitude = 0x7fff;
+ ;
+ effect.u.rumble.strong_magnitude = 0x7fff;
+ ;
+
+ if (ioctl(fd, EVIOCSFF, &effect) == -1) {
+ perror("Error:");
+ }
+ }
+}
+
+bool olc::GamePad::readEvent(input_event &event) const {
+ return read(fd, &event, sizeof(input_event)) == sizeof(input_event);
+}
+
+void olc::GamePad::poll() {
+ XResetScreenSaver(display);
+
+ struct stat filestat {};
+ fstat(fd, &filestat);
+ if (filestat.st_nlink == 0) {
+ stillConnected = false;
+ }
+
+ if (!stillConnected) {
+ return;
+ }
+
+ for (auto &button : buttons) {
+ button.bPressed = false;
+ button.bReleased = false;
+ }
+
+ input_event event{};
+ while (readEvent(event)) {
+ if (event.type == EV_KEY && ((event.code & BTN_GAMEPAD) == BTN_GAMEPAD ||
+ (event.code & BTN_DPAD_UP) == BTN_DPAD_UP)) {
+ for (int i = 0; i < GP_BUTTON_COUNT; i++) {
+ if (event.code == buttonCodes[i]) {
+ bool pressed = event.value;
+ handleButton(i, pressed);
+
+ if (i >= 14) {
+ if (i == 14)
+ axes[6] = -float(pressed);
+ if (i == 15)
+ axes[6] = float(pressed);
+ if (i == 16)
+ axes[7] = -float(pressed);
+ if (i == 17)
+ axes[7] = float(pressed);
+ }
+ if (i == 6)
+ axes[4] = float(pressed);
+ if (i == 7)
+ axes[3] = float(pressed);
+ }
+ }
+ }
+ if (event.type == EV_ABS) {
+ for (int i = 0; i < GP_AXIS_COUNT; i++) {
+ if (event.code == axisCodes[i]) {
+ float value = float(event.value) / maxAbs[i];
+ axes[i] = value;
+
+ if (i == 6) {
+ handleButton(14, event.value == -1);
+ handleButton(15, event.value == 1);
+ }
+ if (i == 7) {
+ handleButton(17, event.value == 1);
+ handleButton(16, event.value == -1);
+ }
+ if (i == 4)
+ handleButton(6, axes[4] >= 0.75f);
+ if (i == 3)
+ handleButton(7, axes[3] >= 0.75f);
+ }
+ }
+ }
+ }
+}
+
+void olc::GamePad::updateGamepads() {
+ // If for some reason we aren't set up to listen for new gamepads, find all
+ // the existing ones and set up for listening next frame
+ if (!inotifyFd) {
+ enumerateGamepads();
+ return;
+ }
+
+ alignas(alignof(inotify_event))
+ uint8_t buf[sizeof(inotify_event) + NAME_MAX + 1];
+
+ while (read(*inotifyFd, buf, sizeof(buf)) > 0) {
+ const inotify_event *event = reinterpret_cast(buf);
+
+ if (event->mask & IN_CREATE) {
+ std::string path = "/dev/input/" + std::string{event->name};
+
+ GamePad *gp = openGamepad(path);
+
+ if (gp != nullptr) {
+ gamepads.push_back(gp);
+ }
+ }
+ }
+
+ // If something's wrong with the inotfiy file descriptor, close it and let
+ // enumerateGamepads() try to set things up again next frame
+ if (errno != EAGAIN) {
+ char *errname = strerror(errno);
+ close(*inotifyFd);
+ inotifyFd = std::nullopt;
+ }
+}
+
+void olc::GamePad::enumerateGamepads() {
+ DIR *dir = opendir("/dev/input");
+
+ for (dirent *elem = readdir(dir); elem != nullptr; elem = readdir(dir)) {
+ std::string path = "/dev/input/" + std::string{elem->d_name};
+ bool found = false;
+ for (auto &gamepad : gamepads) {
+ if (gamepad->path == path) {
+ found = true;
+ if (gamepad->stillConnected) {
+ break;
+ }
+ gamepad->stillConnected = true;
+ gamepad->reconnect();
+ break;
+ }
+ }
+ if (found) {
+ continue;
+ }
+ GamePad *gp = openGamepad(path);
+ if (gp != nullptr) {
+ gamepads.push_back(gp);
+ }
+ }
+
+ closedir(dir);
+
+ // Now that we've found all the existing gamepads, set up to listen for any
+ // new ones that might show up
+ if (!inotifyFd) {
+ inotifyFd = inotify_init1(IN_NONBLOCK);
+ if (*inotifyFd < 0)
+ return;
+
+ if (inotify_add_watch(*inotifyFd, "/dev/input", IN_CREATE) < 0) {
+ close(*inotifyFd);
+ inotifyFd = std::nullopt;
+ return;
+ }
+ }
+}
+
+std::string olc::GamePad::getId() { return path; }
+
+void olc::GamePad::startVibration(float strength) const {
+ if (!ff)
+ return;
+ if (strength < 0)
+ strength = 0;
+ if (strength > 1)
+ strength = 1;
+ int g = int(0xFFFF * strength);
+ input_event gain{};
+ gain.type = EV_FF;
+ gain.code = FF_GAIN;
+ gain.value = g;
+ write(fd, &gain, sizeof(gain));
+
+ input_event play{};
+ play.type = EV_FF;
+ play.code = effect.id;
+ play.value = 3;
+ write(fd, (const void *)&play, sizeof(play));
+}
+
+void olc::GamePad::stopVibration() const {
+ if (!ff)
+ return;
+ input_event stop{};
+ stop.type = EV_FF;
+ stop.code = effect.id;
+ stop.value = 0;
+ write(fd, (const void *)&stop, sizeof(stop));
+}
+
+olc::GamePad::~GamePad() {
+ if (fd != -1) {
+ close(fd);
+ fd = -1;
+ }
+ stillConnected = false;
+}
+
+void olc::GamePad::reconnect() {
+ close(fd);
+ fd = open(path.c_str(), O_NONBLOCK | O_RDWR);
+ effect.id = -1;
+ ioctl(fd, EVIOCSFF, &effect);
+}
+
+void olc::GamePad::init() {
+ pge->pgex_Register(new GamePad());
+
+ display = X11::XOpenDisplay(nullptr);
+
+ // Go find all the gamepads in the startup phase and set up the listening
+ // logic for per-frame updates
+ enumerateGamepads();
+}
+
+#endif
+
+#ifdef __EMSCRIPTEN__
+olc::GamePad::GamePad(long id, std::string name) : name{name}, id{id} {}
+
+void olc::GamePad::poll() {
+ EmscriptenGamepadEvent state;
+
+ emscripten_get_gamepad_status(id, &state);
+
+ for (int i = 0; i < GP_BUTTON_COUNT; i++) {
+ buttons[i].bPressed = false;
+ buttons[i].bReleased = false;
+
+ if (state.digitalButton[buttonCodes[i]] && !buttons[i].bHeld) {
+ buttons[i].bHeld = true;
+ buttons[i].bPressed = true;
+ }
+ if (!state.digitalButton[buttonCodes[i]] && buttons[i].bHeld) {
+ buttons[i].bHeld = false;
+ buttons[i].bReleased = true;
+ }
+
+ axes[(int)olc::GPAxes::LX] = state.axis[0];
+ axes[(int)olc::GPAxes::LY] = state.axis[1];
+ axes[(int)olc::GPAxes::RX] = state.axis[2];
+ axes[(int)olc::GPAxes::RY] = state.axis[3];
+ axes[(int)olc::GPAxes::TL] = state.analogButton[6];
+ axes[(int)olc::GPAxes::TR] = state.analogButton[7];
+ axes[(int)olc::GPAxes::DX] =
+ (float)buttons[(int)olc::GPButtons::DPAD_R].bHeld -
+ buttons[(int)olc::GPButtons::DPAD_L].bHeld;
+ axes[(int)olc::GPAxes::DY] =
+ (float)buttons[(int)olc::GPButtons::DPAD_D].bHeld -
+ buttons[(int)olc::GPButtons::DPAD_U].bHeld;
+ }
+}
+
+void olc::GamePad::updateGamepads() { emscripten_sample_gamepad_data(); }
+
+std::string olc::GamePad::getId() { return std::to_string(id); }
+
+void olc::GamePad::startVibration(float strength) const {}
+
+void olc::GamePad::stopVibration() const {}
+
+olc::GamePad::~GamePad() {}
+
+void olc::GamePad::init() {
+ pge->pgex_Register(new GamePad());
+
+ auto gamepadCallback = [](int eventType,
+ const EmscriptenGamepadEvent *gamepadEvent,
+ void *userData) -> EM_BOOL {
+ std::vector *gamepads =
+ (std::vector *)userData;
+ if (eventType == EMSCRIPTEN_EVENT_GAMEPADCONNECTED) {
+ if (gamepads->size() <= gamepadEvent->index) {
+ gamepads->push_back(new olc::GamePad{gamepadEvent->index,
+ std::string{gamepadEvent->id}});
+ } else {
+ (*gamepads)[gamepadEvent->index]->stillConnected = true;
+ }
+ } else {
+ std::cout << "Disconnected " << gamepadEvent->index << "\n";
+ (*gamepads)[gamepadEvent->index]->stillConnected = false;
+ }
+ return true;
+ };
+
+ emscripten_set_gamepadconnected_callback(&gamepads, true, gamepadCallback);
+ emscripten_set_gamepaddisconnected_callback(&gamepads, true, gamepadCallback);
+}
+#endif
+
+#pragma endregion
+
+#pragma endregion
+
+#pragma region Common
+
+olc::GamePad *olc::GamePad::selectWithButton(olc::GPButtons b) {
+ for (auto &gp : gamepads) {
+ if (gp->getButton(b).bPressed) {
+ return gp;
+ }
+ }
+ return nullptr;
+}
+
+olc::GamePad *olc::GamePad::selectWithAnyButton() {
+ for (auto &gp : gamepads) {
+ for (int b = 0; b < GP_BUTTON_COUNT; b++) {
+ if (gp->getButton(olc::GPButtons(b)).bPressed) {
+ return gp;
+ }
+ }
+ }
+ return nullptr;
+}
+
+#ifndef OLC_GAMEPAD_DEADZONE
+#define OLC_GAMEPAD_DEADZONE 0.2f
+#endif
+
+#ifndef OLC_GAMEPAD_DEADZONE_OUTER
+#define OLC_GAMEPAD_DEADZONE_OUTER 0.2f
+#endif
+
+float olc::GamePad::getAxis(olc::GPAxes a) {
+ float axis = axes[static_cast(a)];
+ if (std::abs(axis) < OLC_GAMEPAD_DEADZONE) {
+ axis = 0;
+ }
+ if (std::abs(axis) > 1 - OLC_GAMEPAD_DEADZONE_OUTER) {
+ axis = axis > 0 ? 1.0f : -1.0f;
+ }
+
+#ifdef WIN32
+ if (!xInput && (a == GPAxes::TL || a == GPAxes::TR))
+ return (axis + 1) / 2;
+#endif
+ return axis;
+}
+
+olc::HWButton olc::GamePad::getButton(olc::GPButtons b) {
+ return buttons[static_cast(b)];
+}
+
+std::string olc::GamePad::getName() { return name; }
+
+int olc::GamePad::getAxisCount() const { return axisCount; }
+
+int olc::GamePad::getButtonCount() const { return buttonCount; }
+
+void olc::GamePad::handleButton(int id, bool value) {
+ if (value && !buttons[id].bHeld) {
+ buttons[id].bHeld = true;
+ buttons[id].bPressed = true;
+ }
+ if (!value && buttons[id].bHeld) {
+ buttons[id].bHeld = false;
+ buttons[id].bReleased = true;
+ }
+#ifdef __linux__
+ XResetScreenSaver(display);
+#endif
+}
+
+bool olc::GamePad::hasAxis(GPAxes a) { return availableAxes[int32_t(a)]; }
+
+bool olc::GamePad::hasButton(GPButtons b) {
+ return availableButtons[int32_t(b)];
+}
+
+bool olc::GamePad::OnBeforeUserUpdate(float &fElapsedTime) {
+ updateGamepads();
+
+ for (auto &gamepad : gamepads) {
+ if (gamepad->stillConnected) {
+ gamepad->poll();
+ }
+ }
+ return false;
+}
+
+std::vector &olc::GamePad::getGamepads() { return gamepads; }
+
+std::vector olc::GamePad::gamepads;
+
+#pragma endregion
+
+#endif // OLC_PGE_GAMEPAD
+
+#pragma endregion
\ No newline at end of file
diff --git a/Crawler/olcPGEX_TTF.h b/Crawler/olcPGEX_TTF.h
new file mode 100644
index 00000000..a7785015
--- /dev/null
+++ b/Crawler/olcPGEX_TTF.h
@@ -0,0 +1,524 @@
+#pragma region License
+/*
+License (OLC-3)
+~~~~~~~~~~~~~~~
+
+Copyright 2018 - 2023 OneLoneCoder.com
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+1. Redistributions or derivations of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+2. Redistributions or derivative works in binary form must reproduce the above
+copyright notice. This list of conditions and the following disclaimer must be
+reproduced in the documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors may
+be used to endorse or promote products derived from this software without specific
+prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
+*/
+#pragma endregion
+#ifndef OLC_PGEX_TTF_H
+#define OLC_PGEX_TTF_H
+
+#include "olcPixelGameEngine.h"
+
+#ifdef WIN32
+#include
+#pragma comment(lib, "freetype.lib")
+#else
+#include
+#endif
+
+#include
+#include
+#include
+#include
+#include FT_FREETYPE_H
+#include FT_GLYPH_H
+
+namespace olc {
+ struct FontRect {
+ olc::vi2d offset;
+ olc::vi2d size;
+ };
+
+ class Font : public olc::PGEX {
+ public:
+ Font() = default;
+
+ ~Font() {
+ if (fontFace != nullptr) {
+ FT_Done_Face(fontFace);
+ }
+ }
+
+ Font(std::string path, int fontSize) : fontSize(fontSize) {
+ FT_Error error = FT_New_Face(library, path.c_str(), 0, &fontFace);
+ if (error) {
+ const char *errorString = FT_Error_String(error);
+ if (errorString == nullptr) {
+ std::cerr
+ << "An unknown error occured while loading the font! Error code: "
+ << error << "\n";
+ } else {
+ std::cerr << errorString << "\n";
+ }
+ }
+
+ error = FT_Set_Pixel_Sizes(fontFace, 0, fontSize);
+ if (error) {
+ const char *errorString = FT_Error_String(error);
+ if (errorString == nullptr) {
+ std::cerr
+ << "An unknown error occured while loading the font!Error Code: "
+ << error << "\n";
+ } else {
+ std::cerr << errorString << "\n";
+ }
+ }
+ }
+
+ Font(const Font &other) = delete;
+ Font(Font &&other) {
+ fontFace = other.fontFace;
+ fontSize = other.fontSize;
+ fallbacks = std::move(other.fallbacks);
+ other.fontFace = nullptr;
+ other.fallbacks.clear();
+ }
+
+ Font &operator=(const Font &other) = delete;
+ Font &operator=(Font &&other) {
+ fontFace = other.fontFace;
+ fontSize = other.fontSize;
+ fallbacks = std::move(other.fallbacks);
+ other.fontFace = nullptr;
+ other.fallbacks.clear();
+ return *this;
+ }
+
+ void DrawString(std::u32string string, int x, int y,
+ olc::Pixel color = olc::BLACK, float angle = 0.0f) {
+ FT_Matrix rotMat;
+ rotMat.xx = (FT_Fixed)(std::cos(angle) * 0x10000L);
+ rotMat.xy = (FT_Fixed)(-std::sin(angle) * 0x10000L);
+ rotMat.yx = (FT_Fixed)(std::sin(angle) * 0x10000L);
+ rotMat.yy = (FT_Fixed)(std::cos(angle) * 0x10000L);
+
+ FT_Vector pen;
+ pen.x = x * 64;
+ pen.y = (pge->ScreenHeight() - y) * 64;
+
+ olc::Pixel::Mode prevMode = pge->GetPixelMode();
+ pge->SetPixelMode(olc::Pixel::ALPHA);
+
+ Font *prevToUse = nullptr;
+
+ for (size_t i = 0; i < string.size(); i++) {
+ char32_t chr = string[i];
+ Font *toUse = this;
+ FT_UInt chrIndex = GetCharIndex(chr);
+
+ if (chrIndex == 0) {
+ for (auto &font : fallbacks) {
+ FT_UInt fbChr = font.GetCharIndex(chr);
+ if (fbChr != 0) {
+ chrIndex = fbChr;
+ toUse = &font;
+ }
+ }
+ }
+
+ if (prevToUse == toUse) {
+ FT_Vector kern;
+ FT_Get_Kerning(fontFace, string[i - 1], chr,
+ FT_KERNING_DEFAULT, &kern);
+
+ pen.x += kern.x;
+ pen.y += kern.y;
+ }
+
+ FT_Set_Transform(toUse->fontFace, &rotMat, &pen);
+ FT_Error error = FT_Load_Char(toUse->fontFace, chr,
+ FT_LOAD_RENDER | FT_LOAD_COLOR);
+ if (error) {
+ const char *errorString = FT_Error_String(error);
+ if (errorString == nullptr) {
+ std::cerr
+ << "An unknown error occured while rendering a glyph! Error code: "
+ << error << "\n";
+ } else {
+ std::cerr << errorString << "\n";
+ }
+ return;
+ }
+
+ FT_Bitmap bmp = toUse->fontFace->glyph->bitmap;
+ FT_GlyphSlot slot = toUse->fontFace->glyph;
+ DrawBitmap(slot->bitmap_left,
+ pge->ScreenHeight() - slot->bitmap_top, bmp, color);
+
+ pen.x += toUse->fontFace->glyph->advance.x;
+ pen.y += toUse->fontFace->glyph->advance.y;
+
+ prevToUse = toUse;
+ }
+
+ pge->SetPixelMode(prevMode);
+ }
+
+ void DrawString(std::u32string string, olc::vi2d pos,
+ olc::Pixel color = olc::BLACK, float angle = 0.0f) {
+ DrawString(string, pos.x, pos.y, color, angle);
+ }
+
+ FontRect GetStringBounds(std::u32string string, float angle = 0.0f) {
+ FT_Matrix rotMat;
+ rotMat.xx = (FT_Fixed)(std::cos(angle) * 0x10000L);
+ rotMat.xy = (FT_Fixed)(-std::sin(angle) * 0x10000L);
+ rotMat.yx = (FT_Fixed)(std::sin(angle) * 0x10000L);
+ rotMat.yy = (FT_Fixed)(std::cos(angle) * 0x10000L);
+
+ FT_Vector pen;
+ pen.x = 0;
+ pen.y = 0;
+
+ olc::FontRect rect;
+ int intMax = std::numeric_limits::max();
+ int intMin = std::numeric_limits::min();
+
+ int minX = intMax;
+ int minY = intMax;
+ int maxX = intMin;
+ int maxY = intMin;
+
+ Font *prevToUse = nullptr;
+
+ for (size_t i = 0; i < string.size(); i++) {
+ char32_t chr = string[i];
+
+ Font *toUse = this;
+ FT_UInt chrIndex = GetCharIndex(chr);
+
+ if (chrIndex == 0) {
+ for (auto &font : fallbacks) {
+ FT_UInt fbChr = font.GetCharIndex(chr);
+ if (fbChr != 0) {
+ chrIndex = fbChr;
+ toUse = &font;
+ }
+ }
+ }
+
+ if (prevToUse == toUse) {
+ FT_Vector kern;
+ FT_Get_Kerning(fontFace, string[i - 1], chr,
+ FT_KERNING_DEFAULT, &kern);
+
+ pen.x += kern.x;
+ pen.y += kern.y;
+ }
+
+ FT_Set_Transform(toUse->fontFace, &rotMat, &pen);
+ FT_Error error = FT_Load_Char(toUse->fontFace, chr,
+ FT_LOAD_BITMAP_METRICS_ONLY);
+ if (error) {
+ const char *errorString = FT_Error_String(error);
+ if (errorString == nullptr) {
+ std::cerr
+ << "An unknown error occured while loading a glyph! Error code: "
+ << error << "\n";
+ } else {
+ std::cerr << errorString << "\n";
+ }
+ return olc::FontRect{{0, 0}, {0, 0}};
+ }
+
+ FT_GlyphSlot slot = toUse->fontFace->glyph;
+ FT_Glyph glyph;
+ FT_Get_Glyph(slot, &glyph);
+
+ FT_BBox bbox;
+ FT_Glyph_Get_CBox(glyph, FT_GLYPH_BBOX_GRIDFIT, &bbox);
+
+ if (bbox.xMin < minX) {
+ minX = bbox.xMin;
+ }
+ if (bbox.xMax > maxX) {
+ maxX = bbox.xMax;
+ }
+ if (bbox.yMin < minY) {
+ minY = bbox.yMin;
+ }
+ if (bbox.yMax > maxY) {
+ maxY = bbox.yMax;
+ }
+
+ pen.x += slot->advance.x;
+ pen.y += slot->advance.y;
+
+ FT_Done_Glyph(glyph);
+ }
+
+ minX /= 64;
+ minY /= 64;
+ maxX /= 64;
+ maxY /= 64;
+ return olc::FontRect{{minX, -maxY}, {maxX - minX, maxY - minY}};
+ }
+
+ olc::Sprite *RenderStringToSprite(std::u32string string,
+ olc::Pixel color) {
+ olc::FontRect rect = GetStringBounds(string);
+ olc::Sprite *sprite = new olc::Sprite{rect.size.x, rect.size.y};
+
+ for (int x = 0; x < rect.size.x; x++) {
+ for (int y = 0; y < rect.size.y; y++) {
+ sprite->SetPixel(x, y, olc::BLANK);
+ }
+ }
+
+ FT_Vector pen;
+ pen.x = -rect.offset.x;
+ pen.y = (pge->ScreenHeight() + rect.offset.y) * 64;
+
+ olc::Pixel::Mode prevMode = pge->GetPixelMode();
+ pge->SetPixelMode(olc::Pixel::ALPHA);
+
+ olc::Font *prevToUse = nullptr;
+
+ for (size_t i = 0; i < string.size(); i++) {
+ char32_t chr = string[i];
+
+ Font *toUse = this;
+ FT_UInt chrIndex = GetCharIndex(chr);
+
+ if (chrIndex == 0) {
+ for (auto &font : fallbacks) {
+ FT_UInt fbChr = font.GetCharIndex(chr);
+ if (fbChr != 0) {
+ chrIndex = fbChr;
+ toUse = &font;
+ }
+ }
+ }
+
+ if (prevToUse == toUse) {
+ FT_Vector kern;
+ FT_Get_Kerning(fontFace, string[i - 1], chr,
+ FT_KERNING_DEFAULT, &kern);
+
+ pen.x += kern.x;
+ pen.y += kern.y;
+ }
+
+ FT_Set_Transform(toUse->fontFace, nullptr, &pen);
+ FT_Error error = FT_Load_Char(toUse->fontFace, chr,
+ FT_LOAD_RENDER | FT_LOAD_COLOR);
+ if (error) {
+ const char *errorString = FT_Error_String(error);
+ if (errorString == nullptr) {
+ std::cerr
+ << "An unknown error occured while rendering a glyph! Error code: "
+ << error << "\n";
+ } else {
+ std::cerr << errorString << "\n";
+ }
+ return nullptr;
+ }
+
+ FT_Bitmap bmp = toUse->fontFace->glyph->bitmap;
+ FT_GlyphSlot slot = toUse->fontFace->glyph;
+ DrawBitmapTo(slot->bitmap_left,
+ pge->ScreenHeight() - slot->bitmap_top, bmp, color,
+ sprite);
+
+ pen.x += toUse->fontFace->glyph->advance.x;
+ pen.y += toUse->fontFace->glyph->advance.y;
+ }
+
+ pge->SetPixelMode(prevMode);
+
+ return sprite;
+ }
+
+ olc::Decal *RenderStringToDecal(std::u32string string,
+ olc::Pixel color) {
+ Sprite *sprite = RenderStringToSprite(string, color);
+ olc::Decal *decal = new olc::Decal{sprite};
+ return decal;
+ }
+
+ olc::Renderable RenderStringToRenderable(std::u32string string,
+ olc::Pixel color) {
+ Sprite *sprite = RenderStringToSprite(string, color);
+ olc::Renderable renderable;
+ renderable.Create(sprite->width, sprite->height);
+
+ for (int x = 0; x < sprite->width; x++) {
+ for (int y = 0; y < sprite->height; y++) {
+ renderable.Sprite()->SetPixel(x, y, sprite->GetPixel(x, y));
+ }
+ }
+
+ delete sprite;
+
+ renderable.Decal()->Update();
+
+ return renderable;
+ }
+
+ void AddFallbackFont(std::string path) {
+ fallbacks.emplace_back(path, fontSize);
+ }
+
+ static bool init() {
+ FT_Error error = FT_Init_FreeType(&library);
+
+ if (error) {
+ const char *errorString = FT_Error_String(error);
+ if (errorString == nullptr) {
+ std::cerr
+ << "An unknown error occured while loading the font library! "
+ "Error code: "
+ << error << "\n";
+ } else {
+ std::cerr << errorString << "\n";
+ }
+
+ return false;
+ }
+ return true;
+ }
+
+ private:
+ void DrawBitmap(int x, int y, FT_Bitmap bmp, olc::Pixel color) {
+ switch (bmp.pixel_mode) {
+ case FT_PIXEL_MODE_MONO:
+ for (size_t bx = 0; bx < bmp.width; bx++) {
+ for (size_t by = 0; by < bmp.rows; by++) {
+ int byteOffset = bx / 8;
+ char byte = bmp.buffer[by * bmp.pitch + byteOffset];
+ bool val = (byte >> (7 - bx % 8)) & 1;
+ if (val) {
+ pge->Draw(x + bx, y + by, color);
+ }
+ }
+ }
+ break;
+ case FT_PIXEL_MODE_GRAY:
+ for (size_t bx = 0; bx < bmp.width; bx++) {
+ for (size_t by = 0; by < bmp.rows; by++) {
+ uint8_t byte = bmp.buffer[by * bmp.pitch + bx];
+ if (byte == 0) {
+ continue;
+ }
+ color.a = byte;
+ pge->Draw(x + bx, y + by, color);
+ }
+ }
+ break;
+ case FT_PIXEL_MODE_GRAY2: break;
+ case FT_PIXEL_MODE_GRAY4: break;
+ case FT_PIXEL_MODE_LCD: break;
+ case FT_PIXEL_MODE_LCD_V: break;
+ case FT_PIXEL_MODE_BGRA:
+ for (size_t bx = 0; bx < bmp.width; bx++) {
+ for (size_t by = 0; by < bmp.rows; by++) {
+ olc::Pixel pixel{
+ bmp.buffer[by * bmp.pitch + bx * 4 + 2],
+ bmp.buffer[by * bmp.pitch + bx * 4 + 1],
+ bmp.buffer[by * bmp.pitch + bx * 4 + 0],
+ bmp.buffer[by * bmp.pitch + bx * 4 + 3],
+ };
+ pge->Draw(x + bx, y + by, pixel);
+ }
+ }
+ break;
+ }
+ }
+ void DrawBitmapTo(int x, int y, FT_Bitmap bmp, olc::Pixel color,
+ olc::Sprite *sprite) {
+ switch (bmp.pixel_mode) {
+ case FT_PIXEL_MODE_MONO:
+ for (size_t bx = 0; bx < bmp.width; bx++) {
+ for (size_t by = 0; by < bmp.rows; by++) {
+ int byteOffset = bx / 8;
+ char byte = bmp.buffer[by * bmp.pitch + byteOffset];
+ bool val = (byte >> (7 - bx % 8)) & 1;
+ if (val) {
+ sprite->SetPixel(x + bx, y + by, color);
+ }
+ }
+ }
+ break;
+ case FT_PIXEL_MODE_GRAY:
+ for (size_t bx = 0; bx < bmp.width; bx++) {
+ for (size_t by = 0; by < bmp.rows; by++) {
+ uint8_t byte = bmp.buffer[by * bmp.pitch + bx];
+ if (byte == 0) {
+ continue;
+ }
+ color.a = byte;
+ sprite->SetPixel(x + bx, y + by, color);
+ }
+ }
+ break;
+ case FT_PIXEL_MODE_GRAY2: break;
+ case FT_PIXEL_MODE_GRAY4: break;
+ case FT_PIXEL_MODE_LCD: break;
+ case FT_PIXEL_MODE_LCD_V: break;
+ case FT_PIXEL_MODE_BGRA:
+ for (size_t bx = 0; bx < bmp.width; bx++) {
+ for (size_t by = 0; by < bmp.rows; by++) {
+ olc::Pixel pixel{
+ bmp.buffer[by * bmp.pitch + bx * 4 + 2],
+ bmp.buffer[by * bmp.pitch + bx * 4 + 1],
+ bmp.buffer[by * bmp.pitch + bx * 4 + 0],
+ bmp.buffer[by * bmp.pitch + bx * 4 + 3],
+ };
+ sprite->SetPixel(x + bx, y + by, pixel);
+ }
+ }
+ break;
+ }
+ }
+
+ FT_UInt GetCharIndex(char32_t charCode) {
+ return FT_Get_Char_Index(fontFace, charCode);
+ }
+
+ FT_Face fontFace = nullptr;
+ std::vector fallbacks;
+ int fontSize;
+
+ static FT_Library library;
+ };
+} // namespace olc
+
+#ifdef OLC_PGEX_TTF
+#undef OLC_PGEX_TTF
+
+FT_Library olc::Font::library;
+
+#endif
+
+#endif
\ No newline at end of file
diff --git a/Crawler/olcPixelGameEngine.h b/Crawler/olcPixelGameEngine.h
index 77f9b47d..f31af622 100644
--- a/Crawler/olcPixelGameEngine.h
+++ b/Crawler/olcPixelGameEngine.h
@@ -56,6 +56,10 @@ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
+
Links
~~~~~
YouTube: https://www.youtube.com/javidx9
diff --git a/Crawler/olcUTIL_Animate2D.h b/Crawler/olcUTIL_Animate2D.h
index fe588fc5..6571ad8c 100644
--- a/Crawler/olcUTIL_Animate2D.h
+++ b/Crawler/olcUTIL_Animate2D.h
@@ -141,7 +141,7 @@ namespace olc::utils::Animate2D
return std::clamp(size_t(fTime * m_fFrameRate), size_t(0), m_vFrames.size() - 1);
break;
case Style::PingPong:{
- size_t frame=size_t(m_fFrameRate*fTime) % (m_vFrames.size()*2-1);
+ size_t frame=size_t(m_fFrameRate*fTime) % (m_vFrames.size()*size_t(2)-size_t(1));
return frame>=m_vFrames.size()?m_vFrames.size()-frame%m_vFrames.size()-1:frame;
}break;
case Style::Reverse:
diff --git a/Crawler/pixelGameEngine.cpp b/Crawler/pixelGameEngine.cpp
index 20d1dbe7..1d9a0462 100644
--- a/Crawler/pixelGameEngine.cpp
+++ b/Crawler/pixelGameEngine.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#define _CRTDBG_MAP_ALLOC
diff --git a/Crawler/resource.h b/Crawler/resource.h
index c55ede4e..bcf81715 100644
--- a/Crawler/resource.h
+++ b/Crawler/resource.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
//{{NO_DEPENDENCIES}}
diff --git a/Crawler/resource1.h b/Crawler/resource1.h
index 952a33d5..d9cf662a 100644
--- a/Crawler/resource1.h
+++ b/Crawler/resource1.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
//{{NO_DEPENDENCIES}}
diff --git a/Crawler/safemap.h b/Crawler/safemap.h
index 95c124cf..1bca4a2a 100644
--- a/Crawler/safemap.h
+++ b/Crawler/safemap.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/Crawler/util.cpp b/Crawler/util.cpp
index 04bd83cc..64a0f021 100644
--- a/Crawler/util.cpp
+++ b/Crawler/util.cpp
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#include "util.h"
diff --git a/Crawler/util.h b/Crawler/util.h
index 46bb90e1..94c89582 100644
--- a/Crawler/util.h
+++ b/Crawler/util.h
@@ -29,6 +29,10 @@ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
+
+Portions of this software are copyright © 2023 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
*/
#pragma endregion
#pragma once
diff --git a/x64/Release/freetype.dll b/x64/Release/freetype.dll
new file mode 100644
index 00000000..97fda661
Binary files /dev/null and b/x64/Release/freetype.dll differ