From 14524c261b030c112941c50826b24bbaeafcf010 Mon Sep 17 00:00:00 2001 From: Ratstail91 Date: Sun, 5 Mar 2023 23:27:07 +1100 Subject: [PATCH] Linked against SDL ttf --- Airport.vcxproj | 8 ++++---- Box.vcxproj | 12 ++++++------ README.md | 20 +++++++++++++++++--- assets/fonts/Ancient God.ttf | Bin 0 -> 15796 bytes box/box_common.h | 2 ++ box/box_engine.c | 5 +++++ source/main.c | 13 +++++++++++++ 7 files changed, 47 insertions(+), 13 deletions(-) create mode 100644 assets/fonts/Ancient God.ttf diff --git a/Airport.vcxproj b/Airport.vcxproj index c9a4598..d0a5119 100644 --- a/Airport.vcxproj +++ b/Airport.vcxproj @@ -126,10 +126,10 @@ SDL2main.lib;SDL2.lib;SDL2_image.lib;Toy.lib;Box.lib;%(AdditionalDependencies) - $(SDL2Dir)\lib\x64;$(SDL2ImageDir)\lib\x64;$(SolutionDir)out\$(Configuration);%(AdditionalLibraryDirectories) + $(SDL2Dir)\lib\x64;$(SDL2ImageDir)\lib\x64;$(SDL2TTFDir)\lib\x64;$(SolutionDir)out\$(Configuration);%(AdditionalLibraryDirectories) - $(SDL2Dir)\include;$(SDL2ImageDir)\include;%(SolutionDir)Toy\source;$(SolutionDir)box;%(AdditionalIncludeDirectories) + $(SDL2Dir)\include;$(SDL2ImageDir)\include;$(SDL2TTFDir)\include;%(SolutionDir)Toy\source;$(SolutionDir)box;%(AdditionalIncludeDirectories) stdc17 @@ -144,10 +144,10 @@ stdc17 - $(SDL2Dir)\include;$(SDL2ImageDir)\include;%(SolutionDir)Toy\source;$(SolutionDir)box;%(AdditionalIncludeDirectories) + $(SDL2Dir)\include;$(SDL2ImageDir)\include;$(SDL2TTFDir)\include;%(SolutionDir)Toy\source;$(SolutionDir)box;%(AdditionalIncludeDirectories) - $(SDL2Dir)\lib\x64;$(SDL2ImageDir)\lib\x64;$(SolutionDir)out\$(Configuration);%(AdditionalLibraryDirectories) + $(SDL2Dir)\lib\x64;$(SDL2ImageDir)\lib\x64;$(SDL2TTFDir)\lib\x64;$(SolutionDir)out\$(Configuration);%(AdditionalLibraryDirectories) SDL2main.lib;SDL2.lib;SDL2_image.lib;Toy.lib;Box.lib;%(AdditionalDependencies) diff --git a/Box.vcxproj b/Box.vcxproj index ecd740c..5d353f9 100644 --- a/Box.vcxproj +++ b/Box.vcxproj @@ -110,11 +110,11 @@ stdc17 BOX_EXPORT;LIB_RUNNER_EXPORT;%(PreprocessorDefinitions) - $(SDL2Dir)\include;$(SDL2ImageDir)\include;%(SolutionDir)Toy\source;%(AdditionalIncludeDirectories) + $(SDL2Dir)\include;$(SDL2ImageDir)\include;$(SDL2TTFDir)\include;%(SolutionDir)Toy\source;%(AdditionalIncludeDirectories) - $(SDL2Dir)\lib\x64;$(SDL2ImageDir)\lib\x64;$(SolutionDir)out\$(Configuration)\;%(AdditionalLibraryDirectories) - SDL2.lib;SDL2_image.lib;Toy.lib;%(AdditionalDependencies) + $(SDL2Dir)\lib\x64;$(SDL2ImageDir)\lib\x64;$(SDL2TTFDir)\lib\x64;$(SolutionDir)out\$(Configuration)\;%(AdditionalLibraryDirectories) + SDL2.lib;SDL2_image.lib;SDL2_ttf.lib;Toy.lib;%(AdditionalDependencies) xcopy "$(SolutionDir)Toy\repl\lib*.*" "$(SolutionDir)box" /Y /I /E @@ -125,11 +125,11 @@ xcopy "$(SolutionDir)Toy\repl\repl_tools.*" "$(SolutionDir)box" /Y /I /E stdc17 BOX_EXPORT;LIB_RUNNER_EXPORT;%(PreprocessorDefinitions) - $(SDL2Dir)\include;$(SDL2ImageDir)\include;%(SolutionDir)Toy\source;%(AdditionalIncludeDirectories) + $(SDL2Dir)\include;$(SDL2ImageDir)\include;$(SDL2TTFDir)\include;%(SolutionDir)Toy\source;%(AdditionalIncludeDirectories) - $(SDL2Dir)\lib\x64;$(SDL2ImageDir)\lib\x64;$(SolutionDir)out\$(Configuration)\;%(AdditionalLibraryDirectories) - SDL2.lib;SDL2_image.lib;Toy.lib;%(AdditionalDependencies) + $(SDL2Dir)\lib\x64;$(SDL2ImageDir)\lib\x64;$(SDL2TTFDir)\lib\x64;$(SolutionDir)out\$(Configuration)\;%(AdditionalLibraryDirectories) + SDL2.lib;SDL2_image.lib;SDL2_ttf.lib;Toy.lib;%(AdditionalDependencies) xcopy "$(SolutionDir)Toy\repl\lib*.*" "$(SolutionDir)box" /Y /I /E diff --git a/README.md b/README.md index 091709b..b38ba00 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,9 @@ The best way to build a game engine, is to build a game first. -This game utilizes the [Toy programming langauge](https://toylang.com). +This project has now been adapted into a roguelike for the 7 day roguelike jam. + +This game/engine utilizes the [Toy programming langauge](https://toylang.com). ## Cloning @@ -10,13 +12,25 @@ Either clone recursively, or run `git submodule update --init` after cloning. ## Building -Simply run `make` in the root directory. +We're now using Visual Studio - define the following environment variables to point to the root of each SDL2 lib: + +* `SDL2Dir` +* `SDL2ImageDir` +* `SDL2TTFDir` ## Running -Make sure the program can see the `assets` folder (symbolic links can help). +Make sure the program can see the `assets` folder (symbolic links can help), and all of the required DLLs are present. ## Dependencies * SDL2 * SDL2_image +* SDL2_ttf + +## Credits + +* Art - Evan Hartshorn +* Coding - Kayne Ruse +* Font - Ancient God (Koczman Bálint) + diff --git a/assets/fonts/Ancient God.ttf b/assets/fonts/Ancient God.ttf new file mode 100644 index 0000000000000000000000000000000000000000..41467b4e3cb5a1df0a5ad58c586a5e27f54e4b07 GIT binary patch literal 15796 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 z z@&+JhkiHRAqSMFX#!EHweuomX#T@XNuYXnIyAs?N;&UeUeQH3l3h5e@2;q)UEpkJ+ zHB^h*GsSS+3*yrAQKlAULb!1>K;M)(SbhjMj256Iw{j46$@=N<64Wcv=__fjHMoQJ-{OzrZ{lU#Q=E?bXRks| zufSHnfxBF #include +#include #include #define BOX_API extern @@ -22,6 +23,7 @@ #include #include +#include #include #include diff --git a/box/box_engine.c b/box/box_engine.c index b50d961..d12a200 100644 --- a/box/box_engine.c +++ b/box/box_engine.c @@ -51,6 +51,11 @@ void Box_initEngine() { fatalError("Failed to initialize SDL2_image"); } + //init SDL_ttf + if (TTF_Init() == -1) { + fatalError("Failed to initialize SDL2_ttf"); + } + //init events Toy_initLiteralDictionary(&engine.symKeyDownEvents); Toy_initLiteralDictionary(&engine.symKeyUpEvents); diff --git a/source/main.c b/source/main.c index b4c4b2c..cbd7f7b 100644 --- a/source/main.c +++ b/source/main.c @@ -42,6 +42,19 @@ int main(int argc, char* argv[]) { Toy_freeLiteral(pathLiteral); } + { + //create a pair of literals, the first for the drive name, the second for the path + Toy_Literal driveLiteral = TOY_TO_STRING_LITERAL(Toy_createRefString("fonts")); + Toy_Literal pathLiteral = TOY_TO_STRING_LITERAL(Toy_createRefString("assets/fonts")); + + //set these within the drive dictionary + Toy_setLiteralDictionary(Toy_getDriveDictionary(), driveLiteral, pathLiteral); + + //these literals are no longer needed + Toy_freeLiteral(driveLiteral); + Toy_freeLiteral(pathLiteral); + } + //run the rest of your program Box_initEngine(); Box_execEngine();