aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjacopograndi <jacopo.grandi@outlook.it>2022-01-04 13:35:02 +0100
committerjacopograndi <jacopo.grandi@outlook.it>2022-01-04 13:35:02 +0100
commitbb16c32bde58cba70e4877aa2d3ebd04332eb575 (patch)
treede3d82cca043c26cbaa64837a3b2c18efc6ddb64
parent411d2f6d6a6e5370d33f0f54b2f2de7147a9d977 (diff)
linux compile and imgs
-rw-r--r--CMakeCache.txt836
-rw-r--r--CMakeFiles/3.18.1/CMakeCCompiler.cmake154
-rw-r--r--CMakeFiles/3.18.1/CMakeCXXCompiler.cmake178
-rw-r--r--CMakeFiles/3.18.1/CMakeRCCompiler.cmake12
-rw-r--r--CMakeFiles/3.18.1/CMakeSystem.cmake30
-rw-r--r--CMakeFiles/3.18.1/CompilerIdC/CMakeCCompilerId.c1348
-rw-r--r--CMakeFiles/3.18.1/CompilerIdCXX/CMakeCXXCompilerId.cpp1326
-rw-r--r--CMakeFiles/CMakeDirectoryInformation.cmake32
-rw-r--r--CMakeFiles/Makefile.cmake108
-rw-r--r--CMakeFiles/Makefile2248
-rw-r--r--CMakeFiles/TargetDirectories.txt6
-rw-r--r--CMakeFiles/cmake.check_cache2
-rw-r--r--CMakeFiles/feature_tests.cxx810
-rw-r--r--CMakeFiles/progress.marks2
-rw-r--r--CMakeFiles/sdl_test.dir/CXX.includecache1752
-rw-r--r--CMakeFiles/sdl_test.dir/DependInfo.cmake68
-rw-r--r--CMakeFiles/sdl_test.dir/build.make654
-rw-r--r--CMakeFiles/sdl_test.dir/cmake_clean.cmake50
-rw-r--r--CMakeFiles/sdl_test.dir/depend.internal604
-rw-r--r--CMakeFiles/sdl_test.dir/depend.make604
-rw-r--r--CMakeFiles/sdl_test.dir/flags.make20
-rw-r--r--CMakeFiles/sdl_test.dir/includes_CXX.rsp2
-rw-r--r--CMakeFiles/sdl_test.dir/link.txt6
-rw-r--r--CMakeFiles/sdl_test.dir/linklibs.rsp2
-rw-r--r--CMakeFiles/sdl_test.dir/objects1.rsp2
-rw-r--r--CMakeFiles/sdl_test.dir/progress.make32
-rw-r--r--CMakeLists.txt70
-rw-r--r--Makefile1172
-rw-r--r--age_gameplay.pngbin0 -> 30267 bytes
-rw-r--r--age_unit.pngbin0 -> 28211 bytes
-rw-r--r--age_unit_detail.pngbin0 -> 24578 bytes
-rw-r--r--build/abilities.txt64
-rw-r--r--build/content/entities.json1140
-rw-r--r--build/content/raw_ents name.json186
-rw-r--r--build/content/raw_ents.json1126
-rw-r--r--build/content/raw_techs.json604
-rw-r--r--build/content/techs.json786
-rw-r--r--build/content/tiles.json46
-rw-r--r--cmake_install.cmake98
-rw-r--r--commands/commands.cpp138
-rw-r--r--commands/commands.h58
-rw-r--r--game/ai/action.cpp150
-rw-r--r--game/ai/action.h102
-rw-r--r--game/ai/engine.h130
-rw-r--r--game/ai/evaluator.h58
-rw-r--r--game/ai/generator.h202
-rw-r--r--game/ai/performer.h96
-rw-r--r--game/ai/tactic.h62
-rw-r--r--game/constants.h32
-rw-r--r--game/entity.cpp20
-rw-r--r--game/entity.h162
-rw-r--r--game/ground.cpp262
-rw-r--r--game/ground.h72
-rw-r--r--game/gst.cpp1208
-rw-r--r--game/gst.h248
-rw-r--r--game/load.cpp298
-rw-r--r--game/load.h14
-rw-r--r--game/menu.cpp152
-rw-r--r--game/menu.h178
-rw-r--r--game/player.h90
-rw-r--r--game/playercontrol.cpp896
-rw-r--r--game/playercontrol.h182
-rw-r--r--game/tech.cpp2
-rw-r--r--game/tech.h262
-rw-r--r--game/tile.h44
-rw-r--r--game/view.cpp412
-rw-r--r--game/view.h78
-rw-r--r--graphics/cam.h26
-rw-r--r--graphics/graphics.cpp1586
-rw-r--r--graphics/graphics.h156
-rw-r--r--main.cpp232
-rw-r--r--notes.txt92
-rw-r--r--timing/timing.cpp86
-rw-r--r--timing/timing.h46
-rw-r--r--umath/intersect.h10
-rw-r--r--umath/vec2.h64
76 files changed, 11043 insertions, 11043 deletions
diff --git a/CMakeCache.txt b/CMakeCache.txt
index efd93d1..9118535 100644
--- a/CMakeCache.txt
+++ b/CMakeCache.txt
@@ -1,418 +1,418 @@
-# This is the CMakeCache file.
-# For build in directory: c:/Users/jaksk/Desktop/dev/_cpp/age
-# It was generated by CMake: C:/Program Files/CMake/bin/cmake.exe
-# You can edit this file to change values found and used by cmake.
-# If you do not want to change any of the values, simply exit the editor.
-# If you do want to change a value, simply edit, save, and exit the editor.
-# The syntax for the file is as follows:
-# KEY:TYPE=VALUE
-# KEY is the name of a variable in the cache.
-# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!.
-# VALUE is the current value for the KEY.
-
-########################
-# EXTERNAL cache entries
-########################
-
-//Path to a program.
-CMAKE_ADDR2LINE:FILEPATH=C:/MinGW64/bin/addr2line.exe
-
-//Path to a program.
-CMAKE_AR:FILEPATH=C:/MinGW64/bin/ar.exe
-
-//Choose the type of build, options are: None Debug Release RelWithDebInfo
-// MinSizeRel ...
-CMAKE_BUILD_TYPE:STRING=
-
-//Enable/Disable color output during build.
-CMAKE_COLOR_MAKEFILE:BOOL=ON
-
-//CXX compiler
-CMAKE_CXX_COMPILER:FILEPATH=C:/MinGW64/bin/g++.exe
-
-//A wrapper around 'ar' adding the appropriate '--plugin' option
-// for the GCC compiler
-CMAKE_CXX_COMPILER_AR:FILEPATH=C:/MinGW64/bin/gcc-ar.exe
-
-//A wrapper around 'ranlib' adding the appropriate '--plugin' option
-// for the GCC compiler
-CMAKE_CXX_COMPILER_RANLIB:FILEPATH=C:/MinGW64/bin/gcc-ranlib.exe
-
-//Flags used by the CXX compiler during all build types.
-CMAKE_CXX_FLAGS:STRING=
-
-//Flags used by the CXX compiler during DEBUG builds.
-CMAKE_CXX_FLAGS_DEBUG:STRING=-g
-
-//Flags used by the CXX compiler during MINSIZEREL builds.
-CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
-
-//Flags used by the CXX compiler during RELEASE builds.
-CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
-
-//Flags used by the CXX compiler during RELWITHDEBINFO builds.
-CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
-
-//Libraries linked by default with all C++ applications.
-CMAKE_CXX_STANDARD_LIBRARIES:STRING=-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
-
-//C compiler
-CMAKE_C_COMPILER:FILEPATH=C:/MinGW64/bin/gcc.exe
-
-//A wrapper around 'ar' adding the appropriate '--plugin' option
-// for the GCC compiler
-CMAKE_C_COMPILER_AR:FILEPATH=C:/MinGW64/bin/gcc-ar.exe
-
-//A wrapper around 'ranlib' adding the appropriate '--plugin' option
-// for the GCC compiler
-CMAKE_C_COMPILER_RANLIB:FILEPATH=C:/MinGW64/bin/gcc-ranlib.exe
-
-//Flags used by the C compiler during all build types.
-CMAKE_C_FLAGS:STRING=
-
-//Flags used by the C compiler during DEBUG builds.
-CMAKE_C_FLAGS_DEBUG:STRING=-g
-
-//Flags used by the C compiler during MINSIZEREL builds.
-CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
-
-//Flags used by the C compiler during RELEASE builds.
-CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
-
-//Flags used by the C compiler during RELWITHDEBINFO builds.
-CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
-
-//Libraries linked by default with all C applications.
-CMAKE_C_STANDARD_LIBRARIES:STRING=-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
-
-//Path to a program.
-CMAKE_DLLTOOL:FILEPATH=C:/MinGW64/bin/dlltool.exe
-
-//Flags used by the linker during all build types.
-CMAKE_EXE_LINKER_FLAGS:STRING=
-
-//Flags used by the linker during DEBUG builds.
-CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=
-
-//Flags used by the linker during MINSIZEREL builds.
-CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING=
-
-//Flags used by the linker during RELEASE builds.
-CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING=
-
-//Flags used by the linker during RELWITHDEBINFO builds.
-CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
-
-//Convert GNU import libraries to MS format (requires Visual Studio)
-CMAKE_GNUtoMS:BOOL=OFF
-
-//Install path prefix, prepended onto install directories.
-CMAKE_INSTALL_PREFIX:PATH=C:/Program Files (x86)/sdl_test
-
-//Path to a program.
-CMAKE_LINKER:FILEPATH=C:/MinGW64/bin/ld.exe
-
-//Path to a program.
-CMAKE_MAKE_PROGRAM:FILEPATH=C:/MinGW64/bin/mingw32-make.exe
-
-//Flags used by the linker during the creation of modules during
-// all build types.
-CMAKE_MODULE_LINKER_FLAGS:STRING=
-
-//Flags used by the linker during the creation of modules during
-// DEBUG builds.
-CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING=
-
-//Flags used by the linker during the creation of modules during
-// MINSIZEREL builds.
-CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING=
-
-//Flags used by the linker during the creation of modules during
-// RELEASE builds.
-CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING=
-
-//Flags used by the linker during the creation of modules during
-// RELWITHDEBINFO builds.
-CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
-
-//Path to a program.
-CMAKE_NM:FILEPATH=C:/MinGW64/bin/nm.exe
-
-//Path to a program.
-CMAKE_OBJCOPY:FILEPATH=C:/MinGW64/bin/objcopy.exe
-
-//Path to a program.
-CMAKE_OBJDUMP:FILEPATH=C:/MinGW64/bin/objdump.exe
-
-//Value Computed by CMake
-CMAKE_PROJECT_DESCRIPTION:STATIC=
-
-//Value Computed by CMake
-CMAKE_PROJECT_HOMEPAGE_URL:STATIC=
-
-//Value Computed by CMake
-CMAKE_PROJECT_NAME:STATIC=sdl_test
-
-//Value Computed by CMake
-CMAKE_PROJECT_VERSION:STATIC=1.0.0
-
-//Value Computed by CMake
-CMAKE_PROJECT_VERSION_MAJOR:STATIC=1
-
-//Value Computed by CMake
-CMAKE_PROJECT_VERSION_MINOR:STATIC=0
-
-//Value Computed by CMake
-CMAKE_PROJECT_VERSION_PATCH:STATIC=0
-
-//Value Computed by CMake
-CMAKE_PROJECT_VERSION_TWEAK:STATIC=
-
-//Path to a program.
-CMAKE_RANLIB:FILEPATH=C:/MinGW64/bin/ranlib.exe
-
-//RC compiler
-CMAKE_RC_COMPILER:FILEPATH=C:/MinGW64/bin/windres.exe
-
-//Flags for Windows Resource Compiler during all build types.
-CMAKE_RC_FLAGS:STRING=
-
-//Flags for Windows Resource Compiler during DEBUG builds.
-CMAKE_RC_FLAGS_DEBUG:STRING=
-
-//Flags for Windows Resource Compiler during MINSIZEREL builds.
-CMAKE_RC_FLAGS_MINSIZEREL:STRING=
-
-//Flags for Windows Resource Compiler during RELEASE builds.
-CMAKE_RC_FLAGS_RELEASE:STRING=
-
-//Flags for Windows Resource Compiler during RELWITHDEBINFO builds.
-CMAKE_RC_FLAGS_RELWITHDEBINFO:STRING=
-
-//Path to a program.
-CMAKE_READELF:FILEPATH=C:/MinGW64/bin/readelf.exe
-
-//Flags used by the linker during the creation of shared libraries
-// during all build types.
-CMAKE_SHARED_LINKER_FLAGS:STRING=
-
-//Flags used by the linker during the creation of shared libraries
-// during DEBUG builds.
-CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING=
-
-//Flags used by the linker during the creation of shared libraries
-// during MINSIZEREL builds.
-CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING=
-
-//Flags used by the linker during the creation of shared libraries
-// during RELEASE builds.
-CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING=
-
-//Flags used by the linker during the creation of shared libraries
-// during RELWITHDEBINFO builds.
-CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING=
-
-//If set, runtime paths are not added when installing shared libraries,
-// but are added when building.
-CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
-
-//If set, runtime paths are not added when using shared libraries.
-CMAKE_SKIP_RPATH:BOOL=NO
-
-//Flags used by the linker during the creation of static libraries
-// during all build types.
-CMAKE_STATIC_LINKER_FLAGS:STRING=
-
-//Flags used by the linker during the creation of static libraries
-// during DEBUG builds.
-CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING=
-
-//Flags used by the linker during the creation of static libraries
-// during MINSIZEREL builds.
-CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING=
-
-//Flags used by the linker during the creation of static libraries
-// during RELEASE builds.
-CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING=
-
-//Flags used by the linker during the creation of static libraries
-// during RELWITHDEBINFO builds.
-CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING=
-
-//Path to a program.
-CMAKE_STRIP:FILEPATH=C:/MinGW64/bin/strip.exe
-
-//If this value is on, makefiles will be generated without the
-// .SILENT directive, and all commands will be echoed to the console
-// during the make. This is useful for debugging only. With Visual
-// Studio IDE projects all commands are done without /nologo.
-CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE
-
-//Value Computed by CMake
-sdl_test_BINARY_DIR:STATIC=C:/Users/jaksk/Desktop/dev/_cpp/age
-
-//Value Computed by CMake
-sdl_test_SOURCE_DIR:STATIC=C:/Users/jaksk/Desktop/dev/_cpp/age
-
-
-########################
-# INTERNAL cache entries
-########################
-
-//ADVANCED property for variable: CMAKE_ADDR2LINE
-CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_AR
-CMAKE_AR-ADVANCED:INTERNAL=1
-//This is the directory where this CMakeCache.txt was created
-CMAKE_CACHEFILE_DIR:INTERNAL=c:/Users/jaksk/Desktop/dev/_cpp/age
-//Major version of cmake used to create the current loaded cache
-CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3
-//Minor version of cmake used to create the current loaded cache
-CMAKE_CACHE_MINOR_VERSION:INTERNAL=18
-//Patch version of cmake used to create the current loaded cache
-CMAKE_CACHE_PATCH_VERSION:INTERNAL=1
-//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE
-CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1
-//Path to CMake executable.
-CMAKE_COMMAND:INTERNAL=C:/Program Files/CMake/bin/cmake.exe
-//Path to cpack program executable.
-CMAKE_CPACK_COMMAND:INTERNAL=C:/Program Files/CMake/bin/cpack.exe
-//Path to ctest program executable.
-CMAKE_CTEST_COMMAND:INTERNAL=C:/Program Files/CMake/bin/ctest.exe
-//ADVANCED property for variable: CMAKE_CXX_COMPILER
-CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR
-CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB
-CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_CXX_FLAGS
-CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG
-CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL
-CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE
-CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO
-CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_CXX_STANDARD_LIBRARIES
-CMAKE_CXX_STANDARD_LIBRARIES-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_C_COMPILER
-CMAKE_C_COMPILER-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_C_COMPILER_AR
-CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB
-CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_C_FLAGS
-CMAKE_C_FLAGS-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG
-CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL
-CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE
-CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO
-CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_C_STANDARD_LIBRARIES
-CMAKE_C_STANDARD_LIBRARIES-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_DLLTOOL
-CMAKE_DLLTOOL-ADVANCED:INTERNAL=1
-//Path to cache edit program executable.
-CMAKE_EDIT_COMMAND:INTERNAL=C:/Program Files/CMake/bin/cmake-gui.exe
-//Executable file format
-CMAKE_EXECUTABLE_FORMAT:INTERNAL=Unknown
-//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS
-CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG
-CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL
-CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE
-CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO
-CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
-//Name of external makefile project generator.
-CMAKE_EXTRA_GENERATOR:INTERNAL=
-//Name of generator.
-CMAKE_GENERATOR:INTERNAL=MinGW Makefiles
-//Generator instance identifier.
-CMAKE_GENERATOR_INSTANCE:INTERNAL=
-//Name of generator platform.
-CMAKE_GENERATOR_PLATFORM:INTERNAL=
-//Name of generator toolset.
-CMAKE_GENERATOR_TOOLSET:INTERNAL=
-//Source directory with the top level CMakeLists.txt file for this
-// project
-CMAKE_HOME_DIRECTORY:INTERNAL=C:/Users/jaksk/Desktop/dev/_cpp/age
-//ADVANCED property for variable: CMAKE_LINKER
-CMAKE_LINKER-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_MAKE_PROGRAM
-CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS
-CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG
-CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL
-CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE
-CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO
-CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_NM
-CMAKE_NM-ADVANCED:INTERNAL=1
-//number of local generators
-CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1
-//ADVANCED property for variable: CMAKE_OBJCOPY
-CMAKE_OBJCOPY-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_OBJDUMP
-CMAKE_OBJDUMP-ADVANCED:INTERNAL=1
-//Platform information initialized
-CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_RANLIB
-CMAKE_RANLIB-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_RC_COMPILER
-CMAKE_RC_COMPILER-ADVANCED:INTERNAL=1
-CMAKE_RC_COMPILER_WORKS:INTERNAL=1
-//ADVANCED property for variable: CMAKE_RC_FLAGS
-CMAKE_RC_FLAGS-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_RC_FLAGS_DEBUG
-CMAKE_RC_FLAGS_DEBUG-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_RC_FLAGS_MINSIZEREL
-CMAKE_RC_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_RC_FLAGS_RELEASE
-CMAKE_RC_FLAGS_RELEASE-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_RC_FLAGS_RELWITHDEBINFO
-CMAKE_RC_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_READELF
-CMAKE_READELF-ADVANCED:INTERNAL=1
-//Path to CMake installation.
-CMAKE_ROOT:INTERNAL=C:/Program Files/CMake/share/cmake-3.18
-//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS
-CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG
-CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL
-CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE
-CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO
-CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH
-CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_SKIP_RPATH
-CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS
-CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG
-CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL
-CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE
-CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO
-CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_STRIP
-CMAKE_STRIP-ADVANCED:INTERNAL=1
-//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE
-CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1
-
+# This is the CMakeCache file.
+# For build in directory: c:/Users/jaksk/Desktop/dev/_cpp/age
+# It was generated by CMake: C:/Program Files/CMake/bin/cmake.exe
+# You can edit this file to change values found and used by cmake.
+# If you do not want to change any of the values, simply exit the editor.
+# If you do want to change a value, simply edit, save, and exit the editor.
+# The syntax for the file is as follows:
+# KEY:TYPE=VALUE
+# KEY is the name of a variable in the cache.
+# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!.
+# VALUE is the current value for the KEY.
+
+########################
+# EXTERNAL cache entries
+########################
+
+//Path to a program.
+CMAKE_ADDR2LINE:FILEPATH=C:/MinGW64/bin/addr2line.exe
+
+//Path to a program.
+CMAKE_AR:FILEPATH=C:/MinGW64/bin/ar.exe
+
+//Choose the type of build, options are: None Debug Release RelWithDebInfo
+// MinSizeRel ...
+CMAKE_BUILD_TYPE:STRING=
+
+//Enable/Disable color output during build.
+CMAKE_COLOR_MAKEFILE:BOOL=ON
+
+//CXX compiler
+CMAKE_CXX_COMPILER:FILEPATH=C:/MinGW64/bin/g++.exe
+
+//A wrapper around 'ar' adding the appropriate '--plugin' option
+// for the GCC compiler
+CMAKE_CXX_COMPILER_AR:FILEPATH=C:/MinGW64/bin/gcc-ar.exe
+
+//A wrapper around 'ranlib' adding the appropriate '--plugin' option
+// for the GCC compiler
+CMAKE_CXX_COMPILER_RANLIB:FILEPATH=C:/MinGW64/bin/gcc-ranlib.exe
+
+//Flags used by the CXX compiler during all build types.
+CMAKE_CXX_FLAGS:STRING=
+
+//Flags used by the CXX compiler during DEBUG builds.
+CMAKE_CXX_FLAGS_DEBUG:STRING=-g
+
+//Flags used by the CXX compiler during MINSIZEREL builds.
+CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
+
+//Flags used by the CXX compiler during RELEASE builds.
+CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
+
+//Flags used by the CXX compiler during RELWITHDEBINFO builds.
+CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
+
+//Libraries linked by default with all C++ applications.
+CMAKE_CXX_STANDARD_LIBRARIES:STRING=-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
+
+//C compiler
+CMAKE_C_COMPILER:FILEPATH=C:/MinGW64/bin/gcc.exe
+
+//A wrapper around 'ar' adding the appropriate '--plugin' option
+// for the GCC compiler
+CMAKE_C_COMPILER_AR:FILEPATH=C:/MinGW64/bin/gcc-ar.exe
+
+//A wrapper around 'ranlib' adding the appropriate '--plugin' option
+// for the GCC compiler
+CMAKE_C_COMPILER_RANLIB:FILEPATH=C:/MinGW64/bin/gcc-ranlib.exe
+
+//Flags used by the C compiler during all build types.
+CMAKE_C_FLAGS:STRING=
+
+//Flags used by the C compiler during DEBUG builds.
+CMAKE_C_FLAGS_DEBUG:STRING=-g
+
+//Flags used by the C compiler during MINSIZEREL builds.
+CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
+
+//Flags used by the C compiler during RELEASE builds.
+CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
+
+//Flags used by the C compiler during RELWITHDEBINFO builds.
+CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
+
+//Libraries linked by default with all C applications.
+CMAKE_C_STANDARD_LIBRARIES:STRING=-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
+
+//Path to a program.
+CMAKE_DLLTOOL:FILEPATH=C:/MinGW64/bin/dlltool.exe
+
+//Flags used by the linker during all build types.
+CMAKE_EXE_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during DEBUG builds.
+CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during MINSIZEREL builds.
+CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during RELEASE builds.
+CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during RELWITHDEBINFO builds.
+CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Convert GNU import libraries to MS format (requires Visual Studio)
+CMAKE_GNUtoMS:BOOL=OFF
+
+//Install path prefix, prepended onto install directories.
+CMAKE_INSTALL_PREFIX:PATH=C:/Program Files (x86)/sdl_test
+
+//Path to a program.
+CMAKE_LINKER:FILEPATH=C:/MinGW64/bin/ld.exe
+
+//Path to a program.
+CMAKE_MAKE_PROGRAM:FILEPATH=C:/MinGW64/bin/mingw32-make.exe
+
+//Flags used by the linker during the creation of modules during
+// all build types.
+CMAKE_MODULE_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during the creation of modules during
+// DEBUG builds.
+CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during the creation of modules during
+// MINSIZEREL builds.
+CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during the creation of modules during
+// RELEASE builds.
+CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during the creation of modules during
+// RELWITHDEBINFO builds.
+CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Path to a program.
+CMAKE_NM:FILEPATH=C:/MinGW64/bin/nm.exe
+
+//Path to a program.
+CMAKE_OBJCOPY:FILEPATH=C:/MinGW64/bin/objcopy.exe
+
+//Path to a program.
+CMAKE_OBJDUMP:FILEPATH=C:/MinGW64/bin/objdump.exe
+
+//Value Computed by CMake
+CMAKE_PROJECT_DESCRIPTION:STATIC=
+
+//Value Computed by CMake
+CMAKE_PROJECT_HOMEPAGE_URL:STATIC=
+
+//Value Computed by CMake
+CMAKE_PROJECT_NAME:STATIC=sdl_test
+
+//Value Computed by CMake
+CMAKE_PROJECT_VERSION:STATIC=1.0.0
+
+//Value Computed by CMake
+CMAKE_PROJECT_VERSION_MAJOR:STATIC=1
+
+//Value Computed by CMake
+CMAKE_PROJECT_VERSION_MINOR:STATIC=0
+
+//Value Computed by CMake
+CMAKE_PROJECT_VERSION_PATCH:STATIC=0
+
+//Value Computed by CMake
+CMAKE_PROJECT_VERSION_TWEAK:STATIC=
+
+//Path to a program.
+CMAKE_RANLIB:FILEPATH=C:/MinGW64/bin/ranlib.exe
+
+//RC compiler
+CMAKE_RC_COMPILER:FILEPATH=C:/MinGW64/bin/windres.exe
+
+//Flags for Windows Resource Compiler during all build types.
+CMAKE_RC_FLAGS:STRING=
+
+//Flags for Windows Resource Compiler during DEBUG builds.
+CMAKE_RC_FLAGS_DEBUG:STRING=
+
+//Flags for Windows Resource Compiler during MINSIZEREL builds.
+CMAKE_RC_FLAGS_MINSIZEREL:STRING=
+
+//Flags for Windows Resource Compiler during RELEASE builds.
+CMAKE_RC_FLAGS_RELEASE:STRING=
+
+//Flags for Windows Resource Compiler during RELWITHDEBINFO builds.
+CMAKE_RC_FLAGS_RELWITHDEBINFO:STRING=
+
+//Path to a program.
+CMAKE_READELF:FILEPATH=C:/MinGW64/bin/readelf.exe
+
+//Flags used by the linker during the creation of shared libraries
+// during all build types.
+CMAKE_SHARED_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during the creation of shared libraries
+// during DEBUG builds.
+CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during the creation of shared libraries
+// during MINSIZEREL builds.
+CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during the creation of shared libraries
+// during RELEASE builds.
+CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during the creation of shared libraries
+// during RELWITHDEBINFO builds.
+CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//If set, runtime paths are not added when installing shared libraries,
+// but are added when building.
+CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
+
+//If set, runtime paths are not added when using shared libraries.
+CMAKE_SKIP_RPATH:BOOL=NO
+
+//Flags used by the linker during the creation of static libraries
+// during all build types.
+CMAKE_STATIC_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during the creation of static libraries
+// during DEBUG builds.
+CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during the creation of static libraries
+// during MINSIZEREL builds.
+CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during the creation of static libraries
+// during RELEASE builds.
+CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during the creation of static libraries
+// during RELWITHDEBINFO builds.
+CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Path to a program.
+CMAKE_STRIP:FILEPATH=C:/MinGW64/bin/strip.exe
+
+//If this value is on, makefiles will be generated without the
+// .SILENT directive, and all commands will be echoed to the console
+// during the make. This is useful for debugging only. With Visual
+// Studio IDE projects all commands are done without /nologo.
+CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE
+
+//Value Computed by CMake
+sdl_test_BINARY_DIR:STATIC=C:/Users/jaksk/Desktop/dev/_cpp/age
+
+//Value Computed by CMake
+sdl_test_SOURCE_DIR:STATIC=C:/Users/jaksk/Desktop/dev/_cpp/age
+
+
+########################
+# INTERNAL cache entries
+########################
+
+//ADVANCED property for variable: CMAKE_ADDR2LINE
+CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_AR
+CMAKE_AR-ADVANCED:INTERNAL=1
+//This is the directory where this CMakeCache.txt was created
+CMAKE_CACHEFILE_DIR:INTERNAL=c:/Users/jaksk/Desktop/dev/_cpp/age
+//Major version of cmake used to create the current loaded cache
+CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3
+//Minor version of cmake used to create the current loaded cache
+CMAKE_CACHE_MINOR_VERSION:INTERNAL=18
+//Patch version of cmake used to create the current loaded cache
+CMAKE_CACHE_PATCH_VERSION:INTERNAL=1
+//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE
+CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1
+//Path to CMake executable.
+CMAKE_COMMAND:INTERNAL=C:/Program Files/CMake/bin/cmake.exe
+//Path to cpack program executable.
+CMAKE_CPACK_COMMAND:INTERNAL=C:/Program Files/CMake/bin/cpack.exe
+//Path to ctest program executable.
+CMAKE_CTEST_COMMAND:INTERNAL=C:/Program Files/CMake/bin/ctest.exe
+//ADVANCED property for variable: CMAKE_CXX_COMPILER
+CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR
+CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB
+CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS
+CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG
+CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL
+CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE
+CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO
+CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_STANDARD_LIBRARIES
+CMAKE_CXX_STANDARD_LIBRARIES-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_COMPILER
+CMAKE_C_COMPILER-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_COMPILER_AR
+CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB
+CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS
+CMAKE_C_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG
+CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL
+CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE
+CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO
+CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_STANDARD_LIBRARIES
+CMAKE_C_STANDARD_LIBRARIES-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_DLLTOOL
+CMAKE_DLLTOOL-ADVANCED:INTERNAL=1
+//Path to cache edit program executable.
+CMAKE_EDIT_COMMAND:INTERNAL=C:/Program Files/CMake/bin/cmake-gui.exe
+//Executable file format
+CMAKE_EXECUTABLE_FORMAT:INTERNAL=Unknown
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS
+CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG
+CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL
+CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE
+CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//Name of external makefile project generator.
+CMAKE_EXTRA_GENERATOR:INTERNAL=
+//Name of generator.
+CMAKE_GENERATOR:INTERNAL=MinGW Makefiles
+//Generator instance identifier.
+CMAKE_GENERATOR_INSTANCE:INTERNAL=
+//Name of generator platform.
+CMAKE_GENERATOR_PLATFORM:INTERNAL=
+//Name of generator toolset.
+CMAKE_GENERATOR_TOOLSET:INTERNAL=
+//Source directory with the top level CMakeLists.txt file for this
+// project
+CMAKE_HOME_DIRECTORY:INTERNAL=C:/Users/jaksk/Desktop/dev/_cpp/age
+//ADVANCED property for variable: CMAKE_LINKER
+CMAKE_LINKER-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MAKE_PROGRAM
+CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS
+CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG
+CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL
+CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE
+CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_NM
+CMAKE_NM-ADVANCED:INTERNAL=1
+//number of local generators
+CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1
+//ADVANCED property for variable: CMAKE_OBJCOPY
+CMAKE_OBJCOPY-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_OBJDUMP
+CMAKE_OBJDUMP-ADVANCED:INTERNAL=1
+//Platform information initialized
+CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RANLIB
+CMAKE_RANLIB-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RC_COMPILER
+CMAKE_RC_COMPILER-ADVANCED:INTERNAL=1
+CMAKE_RC_COMPILER_WORKS:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RC_FLAGS
+CMAKE_RC_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RC_FLAGS_DEBUG
+CMAKE_RC_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RC_FLAGS_MINSIZEREL
+CMAKE_RC_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RC_FLAGS_RELEASE
+CMAKE_RC_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RC_FLAGS_RELWITHDEBINFO
+CMAKE_RC_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_READELF
+CMAKE_READELF-ADVANCED:INTERNAL=1
+//Path to CMake installation.
+CMAKE_ROOT:INTERNAL=C:/Program Files/CMake/share/cmake-3.18
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS
+CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG
+CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL
+CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE
+CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH
+CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SKIP_RPATH
+CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS
+CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG
+CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL
+CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE
+CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STRIP
+CMAKE_STRIP-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE
+CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1
+
diff --git a/CMakeFiles/3.18.1/CMakeCCompiler.cmake b/CMakeFiles/3.18.1/CMakeCCompiler.cmake
index 85a74b8..14aed34 100644
--- a/CMakeFiles/3.18.1/CMakeCCompiler.cmake
+++ b/CMakeFiles/3.18.1/CMakeCCompiler.cmake
@@ -1,77 +1,77 @@
-set(CMAKE_C_COMPILER "C:/MinGW64/bin/gcc.exe")
-set(CMAKE_C_COMPILER_ARG1 "")
-set(CMAKE_C_COMPILER_ID "GNU")
-set(CMAKE_C_COMPILER_VERSION "4.8.3")
-set(CMAKE_C_COMPILER_VERSION_INTERNAL "")
-set(CMAKE_C_COMPILER_WRAPPER "")
-set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "90")
-set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert")
-set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes")
-set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros")
-set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert")
-
-set(CMAKE_C_PLATFORM_ID "MinGW")
-set(CMAKE_C_SIMULATE_ID "")
-set(CMAKE_C_COMPILER_FRONTEND_VARIANT "")
-set(CMAKE_C_SIMULATE_VERSION "")
-
-
-
-
-set(CMAKE_AR "C:/MinGW64/bin/ar.exe")
-set(CMAKE_C_COMPILER_AR "C:/MinGW64/bin/gcc-ar.exe")
-set(CMAKE_RANLIB "C:/MinGW64/bin/ranlib.exe")
-set(CMAKE_C_COMPILER_RANLIB "C:/MinGW64/bin/gcc-ranlib.exe")
-set(CMAKE_LINKER "C:/MinGW64/bin/ld.exe")
-set(CMAKE_MT "")
-set(CMAKE_COMPILER_IS_GNUCC 1)
-set(CMAKE_C_COMPILER_LOADED 1)
-set(CMAKE_C_COMPILER_WORKS TRUE)
-set(CMAKE_C_ABI_COMPILED TRUE)
-set(CMAKE_COMPILER_IS_MINGW 1)
-set(CMAKE_COMPILER_IS_CYGWIN )
-if(CMAKE_COMPILER_IS_CYGWIN)
- set(CYGWIN 1)
- set(UNIX 1)
-endif()
-
-set(CMAKE_C_COMPILER_ENV_VAR "CC")
-
-if(CMAKE_COMPILER_IS_MINGW)
- set(MINGW 1)
-endif()
-set(CMAKE_C_COMPILER_ID_RUN 1)
-set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m)
-set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC)
-set(CMAKE_C_LINKER_PREFERENCE 10)
-
-# Save compiler ABI information.
-set(CMAKE_C_SIZEOF_DATA_PTR "8")
-set(CMAKE_C_COMPILER_ABI "")
-set(CMAKE_C_LIBRARY_ARCHITECTURE "")
-
-if(CMAKE_C_SIZEOF_DATA_PTR)
- set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}")
-endif()
-
-if(CMAKE_C_COMPILER_ABI)
- set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}")
-endif()
-
-if(CMAKE_C_LIBRARY_ARCHITECTURE)
- set(CMAKE_LIBRARY_ARCHITECTURE "")
-endif()
-
-set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "")
-if(CMAKE_C_CL_SHOWINCLUDES_PREFIX)
- set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}")
-endif()
-
-
-
-
-
-set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "C:/MinGW64/include;C:/MinGW64/lib64/gcc/x86_64-w64-mingw32/4.8.3/include;C:/MinGW64/lib64/gcc/x86_64-w64-mingw32/4.8.3/include-fixed;C:/MinGW64/x86_64-w64-mingw32/include")
-set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "mingw32;gcc;moldname;mingwex;pthread;advapi32;shell32;user32;kernel32;mingw32;gcc;moldname;mingwex")
-set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "C:/MinGW64/lib64/gcc/x86_64-w64-mingw32/4.8.3;C:/MinGW64/lib64/gcc;C:/MinGW64/x86_64-w64-mingw32/lib;C:/MinGW64/lib64")
-set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
+set(CMAKE_C_COMPILER "C:/MinGW64/bin/gcc.exe")
+set(CMAKE_C_COMPILER_ARG1 "")
+set(CMAKE_C_COMPILER_ID "GNU")
+set(CMAKE_C_COMPILER_VERSION "4.8.3")
+set(CMAKE_C_COMPILER_VERSION_INTERNAL "")
+set(CMAKE_C_COMPILER_WRAPPER "")
+set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "90")
+set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert")
+set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes")
+set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros")
+set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert")
+
+set(CMAKE_C_PLATFORM_ID "MinGW")
+set(CMAKE_C_SIMULATE_ID "")
+set(CMAKE_C_COMPILER_FRONTEND_VARIANT "")
+set(CMAKE_C_SIMULATE_VERSION "")
+
+
+
+
+set(CMAKE_AR "C:/MinGW64/bin/ar.exe")
+set(CMAKE_C_COMPILER_AR "C:/MinGW64/bin/gcc-ar.exe")
+set(CMAKE_RANLIB "C:/MinGW64/bin/ranlib.exe")
+set(CMAKE_C_COMPILER_RANLIB "C:/MinGW64/bin/gcc-ranlib.exe")
+set(CMAKE_LINKER "C:/MinGW64/bin/ld.exe")
+set(CMAKE_MT "")
+set(CMAKE_COMPILER_IS_GNUCC 1)
+set(CMAKE_C_COMPILER_LOADED 1)
+set(CMAKE_C_COMPILER_WORKS TRUE)
+set(CMAKE_C_ABI_COMPILED TRUE)
+set(CMAKE_COMPILER_IS_MINGW 1)
+set(CMAKE_COMPILER_IS_CYGWIN )
+if(CMAKE_COMPILER_IS_CYGWIN)
+ set(CYGWIN 1)
+ set(UNIX 1)
+endif()
+
+set(CMAKE_C_COMPILER_ENV_VAR "CC")
+
+if(CMAKE_COMPILER_IS_MINGW)
+ set(MINGW 1)
+endif()
+set(CMAKE_C_COMPILER_ID_RUN 1)
+set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m)
+set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC)
+set(CMAKE_C_LINKER_PREFERENCE 10)
+
+# Save compiler ABI information.
+set(CMAKE_C_SIZEOF_DATA_PTR "8")
+set(CMAKE_C_COMPILER_ABI "")
+set(CMAKE_C_LIBRARY_ARCHITECTURE "")
+
+if(CMAKE_C_SIZEOF_DATA_PTR)
+ set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}")
+endif()
+
+if(CMAKE_C_COMPILER_ABI)
+ set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}")
+endif()
+
+if(CMAKE_C_LIBRARY_ARCHITECTURE)
+ set(CMAKE_LIBRARY_ARCHITECTURE "")
+endif()
+
+set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "")
+if(CMAKE_C_CL_SHOWINCLUDES_PREFIX)
+ set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}")
+endif()
+
+
+
+
+
+set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "C:/MinGW64/include;C:/MinGW64/lib64/gcc/x86_64-w64-mingw32/4.8.3/include;C:/MinGW64/lib64/gcc/x86_64-w64-mingw32/4.8.3/include-fixed;C:/MinGW64/x86_64-w64-mingw32/include")
+set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "mingw32;gcc;moldname;mingwex;pthread;advapi32;shell32;user32;kernel32;mingw32;gcc;moldname;mingwex")
+set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "C:/MinGW64/lib64/gcc/x86_64-w64-mingw32/4.8.3;C:/MinGW64/lib64/gcc;C:/MinGW64/x86_64-w64-mingw32/lib;C:/MinGW64/lib64")
+set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
diff --git a/CMakeFiles/3.18.1/CMakeCXXCompiler.cmake b/CMakeFiles/3.18.1/CMakeCXXCompiler.cmake
index 1104dbf..eee8870 100644
--- a/CMakeFiles/3.18.1/CMakeCXXCompiler.cmake
+++ b/CMakeFiles/3.18.1/CMakeCXXCompiler.cmake
@@ -1,89 +1,89 @@
-set(CMAKE_CXX_COMPILER "C:/MinGW64/bin/g++.exe")
-set(CMAKE_CXX_COMPILER_ARG1 "")
-set(CMAKE_CXX_COMPILER_ID "GNU")
-set(CMAKE_CXX_COMPILER_VERSION "4.8.3")
-set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "")
-set(CMAKE_CXX_COMPILER_WRAPPER "")
-set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "98")
-set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_template_template_parameters")
-set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters")
-set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates")
-set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_template_template_parameters")
-set(CMAKE_CXX17_COMPILE_FEATURES "")
-set(CMAKE_CXX20_COMPILE_FEATURES "")
-
-set(CMAKE_CXX_PLATFORM_ID "MinGW")
-set(CMAKE_CXX_SIMULATE_ID "")
-set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "")
-set(CMAKE_CXX_SIMULATE_VERSION "")
-
-
-
-
-set(CMAKE_AR "C:/MinGW64/bin/ar.exe")
-set(CMAKE_CXX_COMPILER_AR "C:/MinGW64/bin/gcc-ar.exe")
-set(CMAKE_RANLIB "C:/MinGW64/bin/ranlib.exe")
-set(CMAKE_CXX_COMPILER_RANLIB "C:/MinGW64/bin/gcc-ranlib.exe")
-set(CMAKE_LINKER "C:/MinGW64/bin/ld.exe")
-set(CMAKE_MT "")
-set(CMAKE_COMPILER_IS_GNUCXX 1)
-set(CMAKE_CXX_COMPILER_LOADED 1)
-set(CMAKE_CXX_COMPILER_WORKS TRUE)
-set(CMAKE_CXX_ABI_COMPILED TRUE)
-set(CMAKE_COMPILER_IS_MINGW 1)
-set(CMAKE_COMPILER_IS_CYGWIN )
-if(CMAKE_COMPILER_IS_CYGWIN)
- set(CYGWIN 1)
- set(UNIX 1)
-endif()
-
-set(CMAKE_CXX_COMPILER_ENV_VAR "CXX")
-
-if(CMAKE_COMPILER_IS_MINGW)
- set(MINGW 1)
-endif()
-set(CMAKE_CXX_COMPILER_ID_RUN 1)
-set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;CPP)
-set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC)
-
-foreach (lang C OBJC OBJCXX)
- if (CMAKE_${lang}_COMPILER_ID_RUN)
- foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS)
- list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension})
- endforeach()
- endif()
-endforeach()
-
-set(CMAKE_CXX_LINKER_PREFERENCE 30)
-set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1)
-
-# Save compiler ABI information.
-set(CMAKE_CXX_SIZEOF_DATA_PTR "8")
-set(CMAKE_CXX_COMPILER_ABI "")
-set(CMAKE_CXX_LIBRARY_ARCHITECTURE "")
-
-if(CMAKE_CXX_SIZEOF_DATA_PTR)
- set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}")
-endif()
-
-if(CMAKE_CXX_COMPILER_ABI)
- set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}")
-endif()
-
-if(CMAKE_CXX_LIBRARY_ARCHITECTURE)
- set(CMAKE_LIBRARY_ARCHITECTURE "")
-endif()
-
-set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "")
-if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX)
- set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}")
-endif()
-
-
-
-
-
-set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "C:/MinGW64/include;C:/MinGW64/include/c++/4.8.3;C:/MinGW64/include/c++/4.8.3/x86_64-w64-mingw32;C:/MinGW64/include/c++/4.8.3/backward;C:/MinGW64/lib64/gcc/x86_64-w64-mingw32/4.8.3/include;C:/MinGW64/lib64/gcc/x86_64-w64-mingw32/4.8.3/include-fixed;C:/MinGW64/x86_64-w64-mingw32/include")
-set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;mingw32;gcc_s;gcc;moldname;mingwex;pthread;advapi32;shell32;user32;kernel32;mingw32;gcc_s;gcc;moldname;mingwex")
-set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "C:/MinGW64/lib64/gcc/x86_64-w64-mingw32/4.8.3;C:/MinGW64/lib64/gcc;C:/MinGW64/x86_64-w64-mingw32/lib;C:/MinGW64/lib64")
-set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
+set(CMAKE_CXX_COMPILER "C:/MinGW64/bin/g++.exe")
+set(CMAKE_CXX_COMPILER_ARG1 "")
+set(CMAKE_CXX_COMPILER_ID "GNU")
+set(CMAKE_CXX_COMPILER_VERSION "4.8.3")
+set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "")
+set(CMAKE_CXX_COMPILER_WRAPPER "")
+set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "98")
+set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_template_template_parameters")
+set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters")
+set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates")
+set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_template_template_parameters")
+set(CMAKE_CXX17_COMPILE_FEATURES "")
+set(CMAKE_CXX20_COMPILE_FEATURES "")
+
+set(CMAKE_CXX_PLATFORM_ID "MinGW")
+set(CMAKE_CXX_SIMULATE_ID "")
+set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "")
+set(CMAKE_CXX_SIMULATE_VERSION "")
+
+
+
+
+set(CMAKE_AR "C:/MinGW64/bin/ar.exe")
+set(CMAKE_CXX_COMPILER_AR "C:/MinGW64/bin/gcc-ar.exe")
+set(CMAKE_RANLIB "C:/MinGW64/bin/ranlib.exe")
+set(CMAKE_CXX_COMPILER_RANLIB "C:/MinGW64/bin/gcc-ranlib.exe")
+set(CMAKE_LINKER "C:/MinGW64/bin/ld.exe")
+set(CMAKE_MT "")
+set(CMAKE_COMPILER_IS_GNUCXX 1)
+set(CMAKE_CXX_COMPILER_LOADED 1)
+set(CMAKE_CXX_COMPILER_WORKS TRUE)
+set(CMAKE_CXX_ABI_COMPILED TRUE)
+set(CMAKE_COMPILER_IS_MINGW 1)
+set(CMAKE_COMPILER_IS_CYGWIN )
+if(CMAKE_COMPILER_IS_CYGWIN)
+ set(CYGWIN 1)
+ set(UNIX 1)
+endif()
+
+set(CMAKE_CXX_COMPILER_ENV_VAR "CXX")
+
+if(CMAKE_COMPILER_IS_MINGW)
+ set(MINGW 1)
+endif()
+set(CMAKE_CXX_COMPILER_ID_RUN 1)
+set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;CPP)
+set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC)
+
+foreach (lang C OBJC OBJCXX)
+ if (CMAKE_${lang}_COMPILER_ID_RUN)
+ foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS)
+ list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension})
+ endforeach()
+ endif()
+endforeach()
+
+set(CMAKE_CXX_LINKER_PREFERENCE 30)
+set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1)
+
+# Save compiler ABI information.
+set(CMAKE_CXX_SIZEOF_DATA_PTR "8")
+set(CMAKE_CXX_COMPILER_ABI "")
+set(CMAKE_CXX_LIBRARY_ARCHITECTURE "")
+
+if(CMAKE_CXX_SIZEOF_DATA_PTR)
+ set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}")
+endif()
+
+if(CMAKE_CXX_COMPILER_ABI)
+ set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}")
+endif()
+
+if(CMAKE_CXX_LIBRARY_ARCHITECTURE)
+ set(CMAKE_LIBRARY_ARCHITECTURE "")
+endif()
+
+set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "")
+if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX)
+ set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}")
+endif()
+
+
+
+
+
+set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "C:/MinGW64/include;C:/MinGW64/include/c++/4.8.3;C:/MinGW64/include/c++/4.8.3/x86_64-w64-mingw32;C:/MinGW64/include/c++/4.8.3/backward;C:/MinGW64/lib64/gcc/x86_64-w64-mingw32/4.8.3/include;C:/MinGW64/lib64/gcc/x86_64-w64-mingw32/4.8.3/include-fixed;C:/MinGW64/x86_64-w64-mingw32/include")
+set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;mingw32;gcc_s;gcc;moldname;mingwex;pthread;advapi32;shell32;user32;kernel32;mingw32;gcc_s;gcc;moldname;mingwex")
+set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "C:/MinGW64/lib64/gcc/x86_64-w64-mingw32/4.8.3;C:/MinGW64/lib64/gcc;C:/MinGW64/x86_64-w64-mingw32/lib;C:/MinGW64/lib64")
+set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
diff --git a/CMakeFiles/3.18.1/CMakeRCCompiler.cmake b/CMakeFiles/3.18.1/CMakeRCCompiler.cmake
index 78afd4c..0262968 100644
--- a/CMakeFiles/3.18.1/CMakeRCCompiler.cmake
+++ b/CMakeFiles/3.18.1/CMakeRCCompiler.cmake
@@ -1,6 +1,6 @@
-set(CMAKE_RC_COMPILER "C:/MinGW64/bin/windres.exe")
-set(CMAKE_RC_COMPILER_ARG1 "")
-set(CMAKE_RC_COMPILER_LOADED 1)
-set(CMAKE_RC_SOURCE_FILE_EXTENSIONS rc;RC)
-set(CMAKE_RC_OUTPUT_EXTENSION .obj)
-set(CMAKE_RC_COMPILER_ENV_VAR "RC")
+set(CMAKE_RC_COMPILER "C:/MinGW64/bin/windres.exe")
+set(CMAKE_RC_COMPILER_ARG1 "")
+set(CMAKE_RC_COMPILER_LOADED 1)
+set(CMAKE_RC_SOURCE_FILE_EXTENSIONS rc;RC)
+set(CMAKE_RC_OUTPUT_EXTENSION .obj)
+set(CMAKE_RC_COMPILER_ENV_VAR "RC")
diff --git a/CMakeFiles/3.18.1/CMakeSystem.cmake b/CMakeFiles/3.18.1/CMakeSystem.cmake
index 1bcc695..c4c4321 100644
--- a/CMakeFiles/3.18.1/CMakeSystem.cmake
+++ b/CMakeFiles/3.18.1/CMakeSystem.cmake
@@ -1,15 +1,15 @@
-set(CMAKE_HOST_SYSTEM "Windows-10.0.19041")
-set(CMAKE_HOST_SYSTEM_NAME "Windows")
-set(CMAKE_HOST_SYSTEM_VERSION "10.0.19041")
-set(CMAKE_HOST_SYSTEM_PROCESSOR "AMD64")
-
-
-
-set(CMAKE_SYSTEM "Windows-10.0.19041")
-set(CMAKE_SYSTEM_NAME "Windows")
-set(CMAKE_SYSTEM_VERSION "10.0.19041")
-set(CMAKE_SYSTEM_PROCESSOR "AMD64")
-
-set(CMAKE_CROSSCOMPILING "FALSE")
-
-set(CMAKE_SYSTEM_LOADED 1)
+set(CMAKE_HOST_SYSTEM "Windows-10.0.19041")
+set(CMAKE_HOST_SYSTEM_NAME "Windows")
+set(CMAKE_HOST_SYSTEM_VERSION "10.0.19041")
+set(CMAKE_HOST_SYSTEM_PROCESSOR "AMD64")
+
+
+
+set(CMAKE_SYSTEM "Windows-10.0.19041")
+set(CMAKE_SYSTEM_NAME "Windows")
+set(CMAKE_SYSTEM_VERSION "10.0.19041")
+set(CMAKE_SYSTEM_PROCESSOR "AMD64")
+
+set(CMAKE_CROSSCOMPILING "FALSE")
+
+set(CMAKE_SYSTEM_LOADED 1)
diff --git a/CMakeFiles/3.18.1/CompilerIdC/CMakeCCompilerId.c b/CMakeFiles/3.18.1/CompilerIdC/CMakeCCompilerId.c
index 6c0aa93..6af6cc3 100644
--- a/CMakeFiles/3.18.1/CompilerIdC/CMakeCCompilerId.c
+++ b/CMakeFiles/3.18.1/CompilerIdC/CMakeCCompilerId.c
@@ -1,674 +1,674 @@
-#ifdef __cplusplus
-# error "A C++ compiler has been selected for C."
-#endif
-
-#if defined(__18CXX)
-# define ID_VOID_MAIN
-#endif
-#if defined(__CLASSIC_C__)
-/* cv-qualifiers did not exist in K&R C */
-# define const
-# define volatile
-#endif
-
-
-/* Version number components: V=Version, R=Revision, P=Patch
- Version date components: YYYY=Year, MM=Month, DD=Day */
-
-#if defined(__INTEL_COMPILER) || defined(__ICC)
-# define COMPILER_ID "Intel"
-# if defined(_MSC_VER)
-# define SIMULATE_ID "MSVC"
-# endif
-# if defined(__GNUC__)
-# define SIMULATE_ID "GNU"
-# endif
- /* __INTEL_COMPILER = VRP */
-# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
-# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
-# if defined(__INTEL_COMPILER_UPDATE)
-# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
-# else
-# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
-# endif
-# if defined(__INTEL_COMPILER_BUILD_DATE)
- /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
-# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
-# endif
-# if defined(_MSC_VER)
- /* _MSC_VER = VVRR */
-# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
-# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
-# endif
-# if defined(__GNUC__)
-# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
-# elif defined(__GNUG__)
-# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
-# endif
-# if defined(__GNUC_MINOR__)
-# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
-# endif
-# if defined(__GNUC_PATCHLEVEL__)
-# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
-# endif
-
-#elif defined(__PATHCC__)
-# define COMPILER_ID "PathScale"
-# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
-# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
-# if defined(__PATHCC_PATCHLEVEL__)
-# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
-# endif
-
-#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
-# define COMPILER_ID "Embarcadero"
-# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
-# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
-# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF)
-
-#elif defined(__BORLANDC__)
-# define COMPILER_ID "Borland"
- /* __BORLANDC__ = 0xVRR */
-# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
-# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
-
-#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
-# define COMPILER_ID "Watcom"
- /* __WATCOMC__ = VVRR */
-# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
-# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
-# if (__WATCOMC__ % 10) > 0
-# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
-# endif
-
-#elif defined(__WATCOMC__)
-# define COMPILER_ID "OpenWatcom"
- /* __WATCOMC__ = VVRP + 1100 */
-# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
-# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
-# if (__WATCOMC__ % 10) > 0
-# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
-# endif
-
-#elif defined(__SUNPRO_C)
-# define COMPILER_ID "SunPro"
-# if __SUNPRO_C >= 0x5100
- /* __SUNPRO_C = 0xVRRP */
-# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12)
-# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF)
-# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF)
-# else
- /* __SUNPRO_CC = 0xVRP */
-# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8)
-# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF)
-# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF)
-# endif
-
-#elif defined(__HP_cc)
-# define COMPILER_ID "HP"
- /* __HP_cc = VVRRPP */
-# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000)
-# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100)
-# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100)
-
-#elif defined(__DECC)
-# define COMPILER_ID "Compaq"
- /* __DECC_VER = VVRRTPPPP */
-# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000)
-# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100)
-# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000)
-
-#elif defined(__IBMC__) && defined(__COMPILER_VER__)
-# define COMPILER_ID "zOS"
- /* __IBMC__ = VRP */
-# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
-# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
-# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
-
-#elif defined(__ibmxl__) && defined(__clang__)
-# define COMPILER_ID "XLClang"
-# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
-# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
-# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
-# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
-
-
-#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800
-# define COMPILER_ID "XL"
- /* __IBMC__ = VRP */
-# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
-# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
-# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
-
-#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800
-# define COMPILER_ID "VisualAge"
- /* __IBMC__ = VRP */
-# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
-# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
-# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
-
-#elif defined(__PGI)
-# define COMPILER_ID "PGI"
-# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
-# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
-# if defined(__PGIC_PATCHLEVEL__)
-# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
-# endif
-
-#elif defined(_CRAYC)
-# define COMPILER_ID "Cray"
-# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
-# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
-
-#elif defined(__TI_COMPILER_VERSION__)
-# define COMPILER_ID "TI"
- /* __TI_COMPILER_VERSION__ = VVVRRRPPP */
-# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
-# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000)
-# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)
-
-#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version)
-# define COMPILER_ID "Fujitsu"
-
-#elif defined(__ghs__)
-# define COMPILER_ID "GHS"
-/* __GHS_VERSION_NUMBER = VVVVRP */
-# ifdef __GHS_VERSION_NUMBER
-# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
-# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
-# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10)
-# endif
-
-#elif defined(__TINYC__)
-# define COMPILER_ID "TinyCC"
-
-#elif defined(__BCC__)
-# define COMPILER_ID "Bruce"
-
-#elif defined(__SCO_VERSION__)
-# define COMPILER_ID "SCO"
-
-#elif defined(__ARMCC_VERSION) && !defined(__clang__)
-# define COMPILER_ID "ARMCC"
-#if __ARMCC_VERSION >= 1000000
- /* __ARMCC_VERSION = VRRPPPP */
- # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
- # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
- # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
-#else
- /* __ARMCC_VERSION = VRPPPP */
- # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
- # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
- # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
-#endif
-
-
-#elif defined(__clang__) && defined(__apple_build_version__)
-# define COMPILER_ID "AppleClang"
-# if defined(_MSC_VER)
-# define SIMULATE_ID "MSVC"
-# endif
-# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
-# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
-# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
-# if defined(_MSC_VER)
- /* _MSC_VER = VVRR */
-# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
-# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
-# endif
-# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
-
-#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
-# define COMPILER_ID "ARMClang"
- # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
- # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
- # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000)
-# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
-
-#elif defined(__clang__)
-# define COMPILER_ID "Clang"
-# if defined(_MSC_VER)
-# define SIMULATE_ID "MSVC"
-# endif
-# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
-# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
-# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
-# if defined(_MSC_VER)
- /* _MSC_VER = VVRR */
-# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
-# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
-# endif
-
-#elif defined(__GNUC__)
-# define COMPILER_ID "GNU"
-# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
-# if defined(__GNUC_MINOR__)
-# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
-# endif
-# if defined(__GNUC_PATCHLEVEL__)
-# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
-# endif
-
-#elif defined(_MSC_VER)
-# define COMPILER_ID "MSVC"
- /* _MSC_VER = VVRR */
-# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
-# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
-# if defined(_MSC_FULL_VER)
-# if _MSC_VER >= 1400
- /* _MSC_FULL_VER = VVRRPPPPP */
-# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
-# else
- /* _MSC_FULL_VER = VVRRPPPP */
-# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
-# endif
-# endif
-# if defined(_MSC_BUILD)
-# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
-# endif
-
-#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
-# define COMPILER_ID "ADSP"
-#if defined(__VISUALDSPVERSION__)
- /* __VISUALDSPVERSION__ = 0xVVRRPP00 */
-# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24)
-# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF)
-# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF)
-#endif
-
-#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
-# define COMPILER_ID "IAR"
-# if defined(__VER__) && defined(__ICCARM__)
-# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
-# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
-# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
-# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
-# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__))
-# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
-# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
-# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
-# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
-# endif
-
-#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC)
-# define COMPILER_ID "SDCC"
-# if defined(__SDCC_VERSION_MAJOR)
-# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR)
-# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR)
-# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH)
-# else
- /* SDCC = VRP */
-# define COMPILER_VERSION_MAJOR DEC(SDCC/100)
-# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10)
-# define COMPILER_VERSION_PATCH DEC(SDCC % 10)
-# endif
-
-
-/* These compilers are either not known or too old to define an
- identification macro. Try to identify the platform and guess that
- it is the native compiler. */
-#elif defined(__hpux) || defined(__hpua)
-# define COMPILER_ID "HP"
-
-#else /* unknown compiler */
-# define COMPILER_ID ""
-#endif
-
-/* Construct the string literal in pieces to prevent the source from
- getting matched. Store it in a pointer rather than an array
- because some compilers will just produce instructions to fill the
- array rather than assigning a pointer to a static array. */
-char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
-#ifdef SIMULATE_ID
-char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
-#endif
-
-#ifdef __QNXNTO__
-char const* qnxnto = "INFO" ":" "qnxnto[]";
-#endif
-
-#if defined(__CRAYXE) || defined(__CRAYXC)
-char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
-#endif
-
-#define STRINGIFY_HELPER(X) #X
-#define STRINGIFY(X) STRINGIFY_HELPER(X)
-
-/* Identify known platforms by name. */
-#if defined(__linux) || defined(__linux__) || defined(linux)
-# define PLATFORM_ID "Linux"
-
-#elif defined(__CYGWIN__)
-# define PLATFORM_ID "Cygwin"
-
-#elif defined(__MINGW32__)
-# define PLATFORM_ID "MinGW"
-
-#elif defined(__APPLE__)
-# define PLATFORM_ID "Darwin"
-
-#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
-# define PLATFORM_ID "Windows"
-
-#elif defined(__FreeBSD__) || defined(__FreeBSD)
-# define PLATFORM_ID "FreeBSD"
-
-#elif defined(__NetBSD__) || defined(__NetBSD)
-# define PLATFORM_ID "NetBSD"
-
-#elif defined(__OpenBSD__) || defined(__OPENBSD)
-# define PLATFORM_ID "OpenBSD"
-
-#elif defined(__sun) || defined(sun)
-# define PLATFORM_ID "SunOS"
-
-#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
-# define PLATFORM_ID "AIX"
-
-#elif defined(__hpux) || defined(__hpux__)
-# define PLATFORM_ID "HP-UX"
-
-#elif defined(__HAIKU__)
-# define PLATFORM_ID "Haiku"
-
-#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
-# define PLATFORM_ID "BeOS"
-
-#elif defined(__QNX__) || defined(__QNXNTO__)
-# define PLATFORM_ID "QNX"
-
-#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
-# define PLATFORM_ID "Tru64"
-
-#elif defined(__riscos) || defined(__riscos__)
-# define PLATFORM_ID "RISCos"
-
-#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
-# define PLATFORM_ID "SINIX"
-
-#elif defined(__UNIX_SV__)
-# define PLATFORM_ID "UNIX_SV"
-
-#elif defined(__bsdos__)
-# define PLATFORM_ID "BSDOS"
-
-#elif defined(_MPRAS) || defined(MPRAS)
-# define PLATFORM_ID "MP-RAS"
-
-#elif defined(__osf) || defined(__osf__)
-# define PLATFORM_ID "OSF1"
-
-#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
-# define PLATFORM_ID "SCO_SV"
-
-#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
-# define PLATFORM_ID "ULTRIX"
-
-#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
-# define PLATFORM_ID "Xenix"
-
-#elif defined(__WATCOMC__)
-# if defined(__LINUX__)
-# define PLATFORM_ID "Linux"
-
-# elif defined(__DOS__)
-# define PLATFORM_ID "DOS"
-
-# elif defined(__OS2__)
-# define PLATFORM_ID "OS2"
-
-# elif defined(__WINDOWS__)
-# define PLATFORM_ID "Windows3x"
-
-# elif defined(__VXWORKS__)
-# define PLATFORM_ID "VxWorks"
-
-# else /* unknown platform */
-# define PLATFORM_ID
-# endif
-
-#elif defined(__INTEGRITY)
-# if defined(INT_178B)
-# define PLATFORM_ID "Integrity178"
-
-# else /* regular Integrity */
-# define PLATFORM_ID "Integrity"
-# endif
-
-#else /* unknown platform */
-# define PLATFORM_ID
-
-#endif
-
-/* For windows compilers MSVC and Intel we can determine
- the architecture of the compiler being used. This is because
- the compilers do not have flags that can change the architecture,
- but rather depend on which compiler is being used
-*/
-#if defined(_WIN32) && defined(_MSC_VER)
-# if defined(_M_IA64)
-# define ARCHITECTURE_ID "IA64"
-
-# elif defined(_M_X64) || defined(_M_AMD64)
-# define ARCHITECTURE_ID "x64"
-
-# elif defined(_M_IX86)
-# define ARCHITECTURE_ID "X86"
-
-# elif defined(_M_ARM64)
-# define ARCHITECTURE_ID "ARM64"
-
-# elif defined(_M_ARM)
-# if _M_ARM == 4
-# define ARCHITECTURE_ID "ARMV4I"
-# elif _M_ARM == 5
-# define ARCHITECTURE_ID "ARMV5I"
-# else
-# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
-# endif
-
-# elif defined(_M_MIPS)
-# define ARCHITECTURE_ID "MIPS"
-
-# elif defined(_M_SH)
-# define ARCHITECTURE_ID "SHx"
-
-# else /* unknown architecture */
-# define ARCHITECTURE_ID ""
-# endif
-
-#elif defined(__WATCOMC__)
-# if defined(_M_I86)
-# define ARCHITECTURE_ID "I86"
-
-# elif defined(_M_IX86)
-# define ARCHITECTURE_ID "X86"
-
-# else /* unknown architecture */
-# define ARCHITECTURE_ID ""
-# endif
-
-#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
-# if defined(__ICCARM__)
-# define ARCHITECTURE_ID "ARM"
-
-# elif defined(__ICCRX__)
-# define ARCHITECTURE_ID "RX"
-
-# elif defined(__ICCRH850__)
-# define ARCHITECTURE_ID "RH850"
-
-# elif defined(__ICCRL78__)
-# define ARCHITECTURE_ID "RL78"
-
-# elif defined(__ICCRISCV__)
-# define ARCHITECTURE_ID "RISCV"
-
-# elif defined(__ICCAVR__)
-# define ARCHITECTURE_ID "AVR"
-
-# elif defined(__ICC430__)
-# define ARCHITECTURE_ID "MSP430"
-
-# elif defined(__ICCV850__)
-# define ARCHITECTURE_ID "V850"
-
-# elif defined(__ICC8051__)
-# define ARCHITECTURE_ID "8051"
-
-# else /* unknown architecture */
-# define ARCHITECTURE_ID ""
-# endif
-
-#elif defined(__ghs__)
-# if defined(__PPC64__)
-# define ARCHITECTURE_ID "PPC64"
-
-# elif defined(__ppc__)
-# define ARCHITECTURE_ID "PPC"
-
-# elif defined(__ARM__)
-# define ARCHITECTURE_ID "ARM"
-
-# elif defined(__x86_64__)
-# define ARCHITECTURE_ID "x64"
-
-# elif defined(__i386__)
-# define ARCHITECTURE_ID "X86"
-
-# else /* unknown architecture */
-# define ARCHITECTURE_ID ""
-# endif
-#else
-# define ARCHITECTURE_ID
-#endif
-
-/* Convert integer to decimal digit literals. */
-#define DEC(n) \
- ('0' + (((n) / 10000000)%10)), \
- ('0' + (((n) / 1000000)%10)), \
- ('0' + (((n) / 100000)%10)), \
- ('0' + (((n) / 10000)%10)), \
- ('0' + (((n) / 1000)%10)), \
- ('0' + (((n) / 100)%10)), \
- ('0' + (((n) / 10)%10)), \
- ('0' + ((n) % 10))
-
-/* Convert integer to hex digit literals. */
-#define HEX(n) \
- ('0' + ((n)>>28 & 0xF)), \
- ('0' + ((n)>>24 & 0xF)), \
- ('0' + ((n)>>20 & 0xF)), \
- ('0' + ((n)>>16 & 0xF)), \
- ('0' + ((n)>>12 & 0xF)), \
- ('0' + ((n)>>8 & 0xF)), \
- ('0' + ((n)>>4 & 0xF)), \
- ('0' + ((n) & 0xF))
-
-/* Construct a string literal encoding the version number components. */
-#ifdef COMPILER_VERSION_MAJOR
-char const info_version[] = {
- 'I', 'N', 'F', 'O', ':',
- 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
- COMPILER_VERSION_MAJOR,
-# ifdef COMPILER_VERSION_MINOR
- '.', COMPILER_VERSION_MINOR,
-# ifdef COMPILER_VERSION_PATCH
- '.', COMPILER_VERSION_PATCH,
-# ifdef COMPILER_VERSION_TWEAK
- '.', COMPILER_VERSION_TWEAK,
-# endif
-# endif
-# endif
- ']','\0'};
-#endif
-
-/* Construct a string literal encoding the internal version number. */
-#ifdef COMPILER_VERSION_INTERNAL
-char const info_version_internal[] = {
- 'I', 'N', 'F', 'O', ':',
- 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
- 'i','n','t','e','r','n','a','l','[',
- COMPILER_VERSION_INTERNAL,']','\0'};
-#endif
-
-/* Construct a string literal encoding the version number components. */
-#ifdef SIMULATE_VERSION_MAJOR
-char const info_simulate_version[] = {
- 'I', 'N', 'F', 'O', ':',
- 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
- SIMULATE_VERSION_MAJOR,
-# ifdef SIMULATE_VERSION_MINOR
- '.', SIMULATE_VERSION_MINOR,
-# ifdef SIMULATE_VERSION_PATCH
- '.', SIMULATE_VERSION_PATCH,
-# ifdef SIMULATE_VERSION_TWEAK
- '.', SIMULATE_VERSION_TWEAK,
-# endif
-# endif
-# endif
- ']','\0'};
-#endif
-
-/* Construct the string literal in pieces to prevent the source from
- getting matched. Store it in a pointer rather than an array
- because some compilers will just produce instructions to fill the
- array rather than assigning a pointer to a static array. */
-char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
-char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
-
-
-
-
-#if !defined(__STDC__)
-# if (defined(_MSC_VER) && !defined(__clang__)) \
- || (defined(__ibmxl__) || defined(__IBMC__))
-# define C_DIALECT "90"
-# else
-# define C_DIALECT
-# endif
-#elif __STDC_VERSION__ >= 201000L
-# define C_DIALECT "11"
-#elif __STDC_VERSION__ >= 199901L
-# define C_DIALECT "99"
-#else
-# define C_DIALECT "90"
-#endif
-const char* info_language_dialect_default =
- "INFO" ":" "dialect_default[" C_DIALECT "]";
-
-/*--------------------------------------------------------------------------*/
-
-#ifdef ID_VOID_MAIN
-void main() {}
-#else
-# if defined(__CLASSIC_C__)
-int main(argc, argv) int argc; char *argv[];
-# else
-int main(int argc, char* argv[])
-# endif
-{
- int require = 0;
- require += info_compiler[argc];
- require += info_platform[argc];
- require += info_arch[argc];
-#ifdef COMPILER_VERSION_MAJOR
- require += info_version[argc];
-#endif
-#ifdef COMPILER_VERSION_INTERNAL
- require += info_version_internal[argc];
-#endif
-#ifdef SIMULATE_ID
- require += info_simulate[argc];
-#endif
-#ifdef SIMULATE_VERSION_MAJOR
- require += info_simulate_version[argc];
-#endif
-#if defined(__CRAYXE) || defined(__CRAYXC)
- require += info_cray[argc];
-#endif
- require += info_language_dialect_default[argc];
- (void)argv;
- return require;
-}
-#endif
+#ifdef __cplusplus
+# error "A C++ compiler has been selected for C."
+#endif
+
+#if defined(__18CXX)
+# define ID_VOID_MAIN
+#endif
+#if defined(__CLASSIC_C__)
+/* cv-qualifiers did not exist in K&R C */
+# define const
+# define volatile
+#endif
+
+
+/* Version number components: V=Version, R=Revision, P=Patch
+ Version date components: YYYY=Year, MM=Month, DD=Day */
+
+#if defined(__INTEL_COMPILER) || defined(__ICC)
+# define COMPILER_ID "Intel"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+# if defined(__GNUC__)
+# define SIMULATE_ID "GNU"
+# endif
+ /* __INTEL_COMPILER = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
+# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
+# if defined(__INTEL_COMPILER_UPDATE)
+# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
+# else
+# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
+# endif
+# if defined(__INTEL_COMPILER_BUILD_DATE)
+ /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
+# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
+# endif
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+# if defined(__GNUC__)
+# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
+# elif defined(__GNUG__)
+# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
+# endif
+# if defined(__GNUC_MINOR__)
+# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
+# endif
+# if defined(__GNUC_PATCHLEVEL__)
+# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+# endif
+
+#elif defined(__PATHCC__)
+# define COMPILER_ID "PathScale"
+# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
+# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
+# if defined(__PATHCC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
+# endif
+
+#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
+# define COMPILER_ID "Embarcadero"
+# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
+# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
+# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF)
+
+#elif defined(__BORLANDC__)
+# define COMPILER_ID "Borland"
+ /* __BORLANDC__ = 0xVRR */
+# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
+# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
+
+#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
+# define COMPILER_ID "Watcom"
+ /* __WATCOMC__ = VVRR */
+# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
+# if (__WATCOMC__ % 10) > 0
+# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
+# endif
+
+#elif defined(__WATCOMC__)
+# define COMPILER_ID "OpenWatcom"
+ /* __WATCOMC__ = VVRP + 1100 */
+# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
+# if (__WATCOMC__ % 10) > 0
+# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
+# endif
+
+#elif defined(__SUNPRO_C)
+# define COMPILER_ID "SunPro"
+# if __SUNPRO_C >= 0x5100
+ /* __SUNPRO_C = 0xVRRP */
+# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12)
+# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF)
+# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF)
+# else
+ /* __SUNPRO_CC = 0xVRP */
+# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8)
+# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF)
+# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF)
+# endif
+
+#elif defined(__HP_cc)
+# define COMPILER_ID "HP"
+ /* __HP_cc = VVRRPP */
+# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000)
+# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100)
+# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100)
+
+#elif defined(__DECC)
+# define COMPILER_ID "Compaq"
+ /* __DECC_VER = VVRRTPPPP */
+# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000)
+# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100)
+# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000)
+
+#elif defined(__IBMC__) && defined(__COMPILER_VER__)
+# define COMPILER_ID "zOS"
+ /* __IBMC__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
+
+#elif defined(__ibmxl__) && defined(__clang__)
+# define COMPILER_ID "XLClang"
+# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
+# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
+# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
+# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
+
+
+#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800
+# define COMPILER_ID "XL"
+ /* __IBMC__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
+
+#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800
+# define COMPILER_ID "VisualAge"
+ /* __IBMC__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
+
+#elif defined(__PGI)
+# define COMPILER_ID "PGI"
+# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
+# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
+# if defined(__PGIC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
+# endif
+
+#elif defined(_CRAYC)
+# define COMPILER_ID "Cray"
+# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
+# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
+
+#elif defined(__TI_COMPILER_VERSION__)
+# define COMPILER_ID "TI"
+ /* __TI_COMPILER_VERSION__ = VVVRRRPPP */
+# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
+# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000)
+# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)
+
+#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version)
+# define COMPILER_ID "Fujitsu"
+
+#elif defined(__ghs__)
+# define COMPILER_ID "GHS"
+/* __GHS_VERSION_NUMBER = VVVVRP */
+# ifdef __GHS_VERSION_NUMBER
+# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
+# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10)
+# endif
+
+#elif defined(__TINYC__)
+# define COMPILER_ID "TinyCC"
+
+#elif defined(__BCC__)
+# define COMPILER_ID "Bruce"
+
+#elif defined(__SCO_VERSION__)
+# define COMPILER_ID "SCO"
+
+#elif defined(__ARMCC_VERSION) && !defined(__clang__)
+# define COMPILER_ID "ARMCC"
+#if __ARMCC_VERSION >= 1000000
+ /* __ARMCC_VERSION = VRRPPPP */
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
+ # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
+ # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
+#else
+ /* __ARMCC_VERSION = VRPPPP */
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
+ # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
+ # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
+#endif
+
+
+#elif defined(__clang__) && defined(__apple_build_version__)
+# define COMPILER_ID "AppleClang"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
+
+#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
+# define COMPILER_ID "ARMClang"
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
+ # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
+ # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000)
+# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
+
+#elif defined(__clang__)
+# define COMPILER_ID "Clang"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+
+#elif defined(__GNUC__)
+# define COMPILER_ID "GNU"
+# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
+# if defined(__GNUC_MINOR__)
+# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
+# endif
+# if defined(__GNUC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+# endif
+
+#elif defined(_MSC_VER)
+# define COMPILER_ID "MSVC"
+ /* _MSC_VER = VVRR */
+# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
+# if defined(_MSC_FULL_VER)
+# if _MSC_VER >= 1400
+ /* _MSC_FULL_VER = VVRRPPPPP */
+# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
+# else
+ /* _MSC_FULL_VER = VVRRPPPP */
+# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
+# endif
+# endif
+# if defined(_MSC_BUILD)
+# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
+# endif
+
+#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
+# define COMPILER_ID "ADSP"
+#if defined(__VISUALDSPVERSION__)
+ /* __VISUALDSPVERSION__ = 0xVVRRPP00 */
+# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24)
+# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF)
+# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF)
+#endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# define COMPILER_ID "IAR"
+# if defined(__VER__) && defined(__ICCARM__)
+# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
+# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
+# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
+# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
+# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__))
+# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
+# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
+# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
+# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
+# endif
+
+#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC)
+# define COMPILER_ID "SDCC"
+# if defined(__SDCC_VERSION_MAJOR)
+# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR)
+# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR)
+# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH)
+# else
+ /* SDCC = VRP */
+# define COMPILER_VERSION_MAJOR DEC(SDCC/100)
+# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(SDCC % 10)
+# endif
+
+
+/* These compilers are either not known or too old to define an
+ identification macro. Try to identify the platform and guess that
+ it is the native compiler. */
+#elif defined(__hpux) || defined(__hpua)
+# define COMPILER_ID "HP"
+
+#else /* unknown compiler */
+# define COMPILER_ID ""
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+ getting matched. Store it in a pointer rather than an array
+ because some compilers will just produce instructions to fill the
+ array rather than assigning a pointer to a static array. */
+char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
+#ifdef SIMULATE_ID
+char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
+#endif
+
+#ifdef __QNXNTO__
+char const* qnxnto = "INFO" ":" "qnxnto[]";
+#endif
+
+#if defined(__CRAYXE) || defined(__CRAYXC)
+char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
+#endif
+
+#define STRINGIFY_HELPER(X) #X
+#define STRINGIFY(X) STRINGIFY_HELPER(X)
+
+/* Identify known platforms by name. */
+#if defined(__linux) || defined(__linux__) || defined(linux)
+# define PLATFORM_ID "Linux"
+
+#elif defined(__CYGWIN__)
+# define PLATFORM_ID "Cygwin"
+
+#elif defined(__MINGW32__)
+# define PLATFORM_ID "MinGW"
+
+#elif defined(__APPLE__)
+# define PLATFORM_ID "Darwin"
+
+#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+# define PLATFORM_ID "Windows"
+
+#elif defined(__FreeBSD__) || defined(__FreeBSD)
+# define PLATFORM_ID "FreeBSD"
+
+#elif defined(__NetBSD__) || defined(__NetBSD)
+# define PLATFORM_ID "NetBSD"
+
+#elif defined(__OpenBSD__) || defined(__OPENBSD)
+# define PLATFORM_ID "OpenBSD"
+
+#elif defined(__sun) || defined(sun)
+# define PLATFORM_ID "SunOS"
+
+#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
+# define PLATFORM_ID "AIX"
+
+#elif defined(__hpux) || defined(__hpux__)
+# define PLATFORM_ID "HP-UX"
+
+#elif defined(__HAIKU__)
+# define PLATFORM_ID "Haiku"
+
+#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
+# define PLATFORM_ID "BeOS"
+
+#elif defined(__QNX__) || defined(__QNXNTO__)
+# define PLATFORM_ID "QNX"
+
+#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
+# define PLATFORM_ID "Tru64"
+
+#elif defined(__riscos) || defined(__riscos__)
+# define PLATFORM_ID "RISCos"
+
+#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
+# define PLATFORM_ID "SINIX"
+
+#elif defined(__UNIX_SV__)
+# define PLATFORM_ID "UNIX_SV"
+
+#elif defined(__bsdos__)
+# define PLATFORM_ID "BSDOS"
+
+#elif defined(_MPRAS) || defined(MPRAS)
+# define PLATFORM_ID "MP-RAS"
+
+#elif defined(__osf) || defined(__osf__)
+# define PLATFORM_ID "OSF1"
+
+#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
+# define PLATFORM_ID "SCO_SV"
+
+#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
+# define PLATFORM_ID "ULTRIX"
+
+#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
+# define PLATFORM_ID "Xenix"
+
+#elif defined(__WATCOMC__)
+# if defined(__LINUX__)
+# define PLATFORM_ID "Linux"
+
+# elif defined(__DOS__)
+# define PLATFORM_ID "DOS"
+
+# elif defined(__OS2__)
+# define PLATFORM_ID "OS2"
+
+# elif defined(__WINDOWS__)
+# define PLATFORM_ID "Windows3x"
+
+# elif defined(__VXWORKS__)
+# define PLATFORM_ID "VxWorks"
+
+# else /* unknown platform */
+# define PLATFORM_ID
+# endif
+
+#elif defined(__INTEGRITY)
+# if defined(INT_178B)
+# define PLATFORM_ID "Integrity178"
+
+# else /* regular Integrity */
+# define PLATFORM_ID "Integrity"
+# endif
+
+#else /* unknown platform */
+# define PLATFORM_ID
+
+#endif
+
+/* For windows compilers MSVC and Intel we can determine
+ the architecture of the compiler being used. This is because
+ the compilers do not have flags that can change the architecture,
+ but rather depend on which compiler is being used
+*/
+#if defined(_WIN32) && defined(_MSC_VER)
+# if defined(_M_IA64)
+# define ARCHITECTURE_ID "IA64"
+
+# elif defined(_M_X64) || defined(_M_AMD64)
+# define ARCHITECTURE_ID "x64"
+
+# elif defined(_M_IX86)
+# define ARCHITECTURE_ID "X86"
+
+# elif defined(_M_ARM64)
+# define ARCHITECTURE_ID "ARM64"
+
+# elif defined(_M_ARM)
+# if _M_ARM == 4
+# define ARCHITECTURE_ID "ARMV4I"
+# elif _M_ARM == 5
+# define ARCHITECTURE_ID "ARMV5I"
+# else
+# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
+# endif
+
+# elif defined(_M_MIPS)
+# define ARCHITECTURE_ID "MIPS"
+
+# elif defined(_M_SH)
+# define ARCHITECTURE_ID "SHx"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__WATCOMC__)
+# if defined(_M_I86)
+# define ARCHITECTURE_ID "I86"
+
+# elif defined(_M_IX86)
+# define ARCHITECTURE_ID "X86"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# if defined(__ICCARM__)
+# define ARCHITECTURE_ID "ARM"
+
+# elif defined(__ICCRX__)
+# define ARCHITECTURE_ID "RX"
+
+# elif defined(__ICCRH850__)
+# define ARCHITECTURE_ID "RH850"
+
+# elif defined(__ICCRL78__)
+# define ARCHITECTURE_ID "RL78"
+
+# elif defined(__ICCRISCV__)
+# define ARCHITECTURE_ID "RISCV"
+
+# elif defined(__ICCAVR__)
+# define ARCHITECTURE_ID "AVR"
+
+# elif defined(__ICC430__)
+# define ARCHITECTURE_ID "MSP430"
+
+# elif defined(__ICCV850__)
+# define ARCHITECTURE_ID "V850"
+
+# elif defined(__ICC8051__)
+# define ARCHITECTURE_ID "8051"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__ghs__)
+# if defined(__PPC64__)
+# define ARCHITECTURE_ID "PPC64"
+
+# elif defined(__ppc__)
+# define ARCHITECTURE_ID "PPC"
+
+# elif defined(__ARM__)
+# define ARCHITECTURE_ID "ARM"
+
+# elif defined(__x86_64__)
+# define ARCHITECTURE_ID "x64"
+
+# elif defined(__i386__)
+# define ARCHITECTURE_ID "X86"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+#else
+# define ARCHITECTURE_ID
+#endif
+
+/* Convert integer to decimal digit literals. */
+#define DEC(n) \
+ ('0' + (((n) / 10000000)%10)), \
+ ('0' + (((n) / 1000000)%10)), \
+ ('0' + (((n) / 100000)%10)), \
+ ('0' + (((n) / 10000)%10)), \
+ ('0' + (((n) / 1000)%10)), \
+ ('0' + (((n) / 100)%10)), \
+ ('0' + (((n) / 10)%10)), \
+ ('0' + ((n) % 10))
+
+/* Convert integer to hex digit literals. */
+#define HEX(n) \
+ ('0' + ((n)>>28 & 0xF)), \
+ ('0' + ((n)>>24 & 0xF)), \
+ ('0' + ((n)>>20 & 0xF)), \
+ ('0' + ((n)>>16 & 0xF)), \
+ ('0' + ((n)>>12 & 0xF)), \
+ ('0' + ((n)>>8 & 0xF)), \
+ ('0' + ((n)>>4 & 0xF)), \
+ ('0' + ((n) & 0xF))
+
+/* Construct a string literal encoding the version number components. */
+#ifdef COMPILER_VERSION_MAJOR
+char const info_version[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
+ COMPILER_VERSION_MAJOR,
+# ifdef COMPILER_VERSION_MINOR
+ '.', COMPILER_VERSION_MINOR,
+# ifdef COMPILER_VERSION_PATCH
+ '.', COMPILER_VERSION_PATCH,
+# ifdef COMPILER_VERSION_TWEAK
+ '.', COMPILER_VERSION_TWEAK,
+# endif
+# endif
+# endif
+ ']','\0'};
+#endif
+
+/* Construct a string literal encoding the internal version number. */
+#ifdef COMPILER_VERSION_INTERNAL
+char const info_version_internal[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
+ 'i','n','t','e','r','n','a','l','[',
+ COMPILER_VERSION_INTERNAL,']','\0'};
+#endif
+
+/* Construct a string literal encoding the version number components. */
+#ifdef SIMULATE_VERSION_MAJOR
+char const info_simulate_version[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
+ SIMULATE_VERSION_MAJOR,
+# ifdef SIMULATE_VERSION_MINOR
+ '.', SIMULATE_VERSION_MINOR,
+# ifdef SIMULATE_VERSION_PATCH
+ '.', SIMULATE_VERSION_PATCH,
+# ifdef SIMULATE_VERSION_TWEAK
+ '.', SIMULATE_VERSION_TWEAK,
+# endif
+# endif
+# endif
+ ']','\0'};
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+ getting matched. Store it in a pointer rather than an array
+ because some compilers will just produce instructions to fill the
+ array rather than assigning a pointer to a static array. */
+char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
+char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
+
+
+
+
+#if !defined(__STDC__)
+# if (defined(_MSC_VER) && !defined(__clang__)) \
+ || (defined(__ibmxl__) || defined(__IBMC__))
+# define C_DIALECT "90"
+# else
+# define C_DIALECT
+# endif
+#elif __STDC_VERSION__ >= 201000L
+# define C_DIALECT "11"
+#elif __STDC_VERSION__ >= 199901L
+# define C_DIALECT "99"
+#else
+# define C_DIALECT "90"
+#endif
+const char* info_language_dialect_default =
+ "INFO" ":" "dialect_default[" C_DIALECT "]";
+
+/*--------------------------------------------------------------------------*/
+
+#ifdef ID_VOID_MAIN
+void main() {}
+#else
+# if defined(__CLASSIC_C__)
+int main(argc, argv) int argc; char *argv[];
+# else
+int main(int argc, char* argv[])
+# endif
+{
+ int require = 0;
+ require += info_compiler[argc];
+ require += info_platform[argc];
+ require += info_arch[argc];
+#ifdef COMPILER_VERSION_MAJOR
+ require += info_version[argc];
+#endif
+#ifdef COMPILER_VERSION_INTERNAL
+ require += info_version_internal[argc];
+#endif
+#ifdef SIMULATE_ID
+ require += info_simulate[argc];
+#endif
+#ifdef SIMULATE_VERSION_MAJOR
+ require += info_simulate_version[argc];
+#endif
+#if defined(__CRAYXE) || defined(__CRAYXC)
+ require += info_cray[argc];
+#endif
+ require += info_language_dialect_default[argc];
+ (void)argv;
+ return require;
+}
+#endif
diff --git a/CMakeFiles/3.18.1/CompilerIdCXX/CMakeCXXCompilerId.cpp b/CMakeFiles/3.18.1/CompilerIdCXX/CMakeCXXCompilerId.cpp
index 37c21ca..17def8c 100644
--- a/CMakeFiles/3.18.1/CompilerIdCXX/CMakeCXXCompilerId.cpp
+++ b/CMakeFiles/3.18.1/CompilerIdCXX/CMakeCXXCompilerId.cpp
@@ -1,663 +1,663 @@
-/* This source file must have a .cpp extension so that all C++ compilers
- recognize the extension without flags. Borland does not know .cxx for
- example. */
-#ifndef __cplusplus
-# error "A C compiler has been selected for C++."
-#endif
-
-
-/* Version number components: V=Version, R=Revision, P=Patch
- Version date components: YYYY=Year, MM=Month, DD=Day */
-
-#if defined(__COMO__)
-# define COMPILER_ID "Comeau"
- /* __COMO_VERSION__ = VRR */
-# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100)
-# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100)
-
-#elif defined(__INTEL_COMPILER) || defined(__ICC)
-# define COMPILER_ID "Intel"
-# if defined(_MSC_VER)
-# define SIMULATE_ID "MSVC"
-# endif
-# if defined(__GNUC__)
-# define SIMULATE_ID "GNU"
-# endif
- /* __INTEL_COMPILER = VRP */
-# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
-# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
-# if defined(__INTEL_COMPILER_UPDATE)
-# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
-# else
-# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
-# endif
-# if defined(__INTEL_COMPILER_BUILD_DATE)
- /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
-# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
-# endif
-# if defined(_MSC_VER)
- /* _MSC_VER = VVRR */
-# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
-# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
-# endif
-# if defined(__GNUC__)
-# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
-# elif defined(__GNUG__)
-# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
-# endif
-# if defined(__GNUC_MINOR__)
-# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
-# endif
-# if defined(__GNUC_PATCHLEVEL__)
-# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
-# endif
-
-#elif defined(__PATHCC__)
-# define COMPILER_ID "PathScale"
-# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
-# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
-# if defined(__PATHCC_PATCHLEVEL__)
-# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
-# endif
-
-#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
-# define COMPILER_ID "Embarcadero"
-# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
-# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
-# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF)
-
-#elif defined(__BORLANDC__)
-# define COMPILER_ID "Borland"
- /* __BORLANDC__ = 0xVRR */
-# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
-# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
-
-#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
-# define COMPILER_ID "Watcom"
- /* __WATCOMC__ = VVRR */
-# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
-# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
-# if (__WATCOMC__ % 10) > 0
-# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
-# endif
-
-#elif defined(__WATCOMC__)
-# define COMPILER_ID "OpenWatcom"
- /* __WATCOMC__ = VVRP + 1100 */
-# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
-# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
-# if (__WATCOMC__ % 10) > 0
-# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
-# endif
-
-#elif defined(__SUNPRO_CC)
-# define COMPILER_ID "SunPro"
-# if __SUNPRO_CC >= 0x5100
- /* __SUNPRO_CC = 0xVRRP */
-# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12)
-# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF)
-# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
-# else
- /* __SUNPRO_CC = 0xVRP */
-# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8)
-# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF)
-# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
-# endif
-
-#elif defined(__HP_aCC)
-# define COMPILER_ID "HP"
- /* __HP_aCC = VVRRPP */
-# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000)
-# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100)
-# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100)
-
-#elif defined(__DECCXX)
-# define COMPILER_ID "Compaq"
- /* __DECCXX_VER = VVRRTPPPP */
-# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000)
-# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100)
-# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000)
-
-#elif defined(__IBMCPP__) && defined(__COMPILER_VER__)
-# define COMPILER_ID "zOS"
- /* __IBMCPP__ = VRP */
-# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
-# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
-# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
-
-#elif defined(__ibmxl__) && defined(__clang__)
-# define COMPILER_ID "XLClang"
-# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
-# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
-# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
-# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
-
-
-#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800
-# define COMPILER_ID "XL"
- /* __IBMCPP__ = VRP */
-# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
-# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
-# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
-
-#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800
-# define COMPILER_ID "VisualAge"
- /* __IBMCPP__ = VRP */
-# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
-# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
-# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
-
-#elif defined(__PGI)
-# define COMPILER_ID "PGI"
-# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
-# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
-# if defined(__PGIC_PATCHLEVEL__)
-# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
-# endif
-
-#elif defined(_CRAYC)
-# define COMPILER_ID "Cray"
-# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
-# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
-
-#elif defined(__TI_COMPILER_VERSION__)
-# define COMPILER_ID "TI"
- /* __TI_COMPILER_VERSION__ = VVVRRRPPP */
-# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
-# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000)
-# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)
-
-#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version)
-# define COMPILER_ID "Fujitsu"
-
-#elif defined(__ghs__)
-# define COMPILER_ID "GHS"
-/* __GHS_VERSION_NUMBER = VVVVRP */
-# ifdef __GHS_VERSION_NUMBER
-# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
-# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
-# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10)
-# endif
-
-#elif defined(__SCO_VERSION__)
-# define COMPILER_ID "SCO"
-
-#elif defined(__ARMCC_VERSION) && !defined(__clang__)
-# define COMPILER_ID "ARMCC"
-#if __ARMCC_VERSION >= 1000000
- /* __ARMCC_VERSION = VRRPPPP */
- # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
- # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
- # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
-#else
- /* __ARMCC_VERSION = VRPPPP */
- # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
- # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
- # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
-#endif
-
-
-#elif defined(__clang__) && defined(__apple_build_version__)
-# define COMPILER_ID "AppleClang"
-# if defined(_MSC_VER)
-# define SIMULATE_ID "MSVC"
-# endif
-# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
-# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
-# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
-# if defined(_MSC_VER)
- /* _MSC_VER = VVRR */
-# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
-# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
-# endif
-# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
-
-#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
-# define COMPILER_ID "ARMClang"
- # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
- # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
- # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000)
-# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
-
-#elif defined(__clang__)
-# define COMPILER_ID "Clang"
-# if defined(_MSC_VER)
-# define SIMULATE_ID "MSVC"
-# endif
-# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
-# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
-# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
-# if defined(_MSC_VER)
- /* _MSC_VER = VVRR */
-# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
-# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
-# endif
-
-#elif defined(__GNUC__) || defined(__GNUG__)
-# define COMPILER_ID "GNU"
-# if defined(__GNUC__)
-# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
-# else
-# define COMPILER_VERSION_MAJOR DEC(__GNUG__)
-# endif
-# if defined(__GNUC_MINOR__)
-# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
-# endif
-# if defined(__GNUC_PATCHLEVEL__)
-# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
-# endif
-
-#elif defined(_MSC_VER)
-# define COMPILER_ID "MSVC"
- /* _MSC_VER = VVRR */
-# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
-# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
-# if defined(_MSC_FULL_VER)
-# if _MSC_VER >= 1400
- /* _MSC_FULL_VER = VVRRPPPPP */
-# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
-# else
- /* _MSC_FULL_VER = VVRRPPPP */
-# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
-# endif
-# endif
-# if defined(_MSC_BUILD)
-# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
-# endif
-
-#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
-# define COMPILER_ID "ADSP"
-#if defined(__VISUALDSPVERSION__)
- /* __VISUALDSPVERSION__ = 0xVVRRPP00 */
-# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24)
-# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF)
-# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF)
-#endif
-
-#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
-# define COMPILER_ID "IAR"
-# if defined(__VER__) && defined(__ICCARM__)
-# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
-# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
-# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
-# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
-# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__))
-# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
-# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
-# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
-# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
-# endif
-
-
-/* These compilers are either not known or too old to define an
- identification macro. Try to identify the platform and guess that
- it is the native compiler. */
-#elif defined(__hpux) || defined(__hpua)
-# define COMPILER_ID "HP"
-
-#else /* unknown compiler */
-# define COMPILER_ID ""
-#endif
-
-/* Construct the string literal in pieces to prevent the source from
- getting matched. Store it in a pointer rather than an array
- because some compilers will just produce instructions to fill the
- array rather than assigning a pointer to a static array. */
-char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
-#ifdef SIMULATE_ID
-char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
-#endif
-
-#ifdef __QNXNTO__
-char const* qnxnto = "INFO" ":" "qnxnto[]";
-#endif
-
-#if defined(__CRAYXE) || defined(__CRAYXC)
-char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
-#endif
-
-#define STRINGIFY_HELPER(X) #X
-#define STRINGIFY(X) STRINGIFY_HELPER(X)
-
-/* Identify known platforms by name. */
-#if defined(__linux) || defined(__linux__) || defined(linux)
-# define PLATFORM_ID "Linux"
-
-#elif defined(__CYGWIN__)
-# define PLATFORM_ID "Cygwin"
-
-#elif defined(__MINGW32__)
-# define PLATFORM_ID "MinGW"
-
-#elif defined(__APPLE__)
-# define PLATFORM_ID "Darwin"
-
-#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
-# define PLATFORM_ID "Windows"
-
-#elif defined(__FreeBSD__) || defined(__FreeBSD)
-# define PLATFORM_ID "FreeBSD"
-
-#elif defined(__NetBSD__) || defined(__NetBSD)
-# define PLATFORM_ID "NetBSD"
-
-#elif defined(__OpenBSD__) || defined(__OPENBSD)
-# define PLATFORM_ID "OpenBSD"
-
-#elif defined(__sun) || defined(sun)
-# define PLATFORM_ID "SunOS"
-
-#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
-# define PLATFORM_ID "AIX"
-
-#elif defined(__hpux) || defined(__hpux__)
-# define PLATFORM_ID "HP-UX"
-
-#elif defined(__HAIKU__)
-# define PLATFORM_ID "Haiku"
-
-#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
-# define PLATFORM_ID "BeOS"
-
-#elif defined(__QNX__) || defined(__QNXNTO__)
-# define PLATFORM_ID "QNX"
-
-#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
-# define PLATFORM_ID "Tru64"
-
-#elif defined(__riscos) || defined(__riscos__)
-# define PLATFORM_ID "RISCos"
-
-#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
-# define PLATFORM_ID "SINIX"
-
-#elif defined(__UNIX_SV__)
-# define PLATFORM_ID "UNIX_SV"
-
-#elif defined(__bsdos__)
-# define PLATFORM_ID "BSDOS"
-
-#elif defined(_MPRAS) || defined(MPRAS)
-# define PLATFORM_ID "MP-RAS"
-
-#elif defined(__osf) || defined(__osf__)
-# define PLATFORM_ID "OSF1"
-
-#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
-# define PLATFORM_ID "SCO_SV"
-
-#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
-# define PLATFORM_ID "ULTRIX"
-
-#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
-# define PLATFORM_ID "Xenix"
-
-#elif defined(__WATCOMC__)
-# if defined(__LINUX__)
-# define PLATFORM_ID "Linux"
-
-# elif defined(__DOS__)
-# define PLATFORM_ID "DOS"
-
-# elif defined(__OS2__)
-# define PLATFORM_ID "OS2"
-
-# elif defined(__WINDOWS__)
-# define PLATFORM_ID "Windows3x"
-
-# elif defined(__VXWORKS__)
-# define PLATFORM_ID "VxWorks"
-
-# else /* unknown platform */
-# define PLATFORM_ID
-# endif
-
-#elif defined(__INTEGRITY)
-# if defined(INT_178B)
-# define PLATFORM_ID "Integrity178"
-
-# else /* regular Integrity */
-# define PLATFORM_ID "Integrity"
-# endif
-
-#else /* unknown platform */
-# define PLATFORM_ID
-
-#endif
-
-/* For windows compilers MSVC and Intel we can determine
- the architecture of the compiler being used. This is because
- the compilers do not have flags that can change the architecture,
- but rather depend on which compiler is being used
-*/
-#if defined(_WIN32) && defined(_MSC_VER)
-# if defined(_M_IA64)
-# define ARCHITECTURE_ID "IA64"
-
-# elif defined(_M_X64) || defined(_M_AMD64)
-# define ARCHITECTURE_ID "x64"
-
-# elif defined(_M_IX86)
-# define ARCHITECTURE_ID "X86"
-
-# elif defined(_M_ARM64)
-# define ARCHITECTURE_ID "ARM64"
-
-# elif defined(_M_ARM)
-# if _M_ARM == 4
-# define ARCHITECTURE_ID "ARMV4I"
-# elif _M_ARM == 5
-# define ARCHITECTURE_ID "ARMV5I"
-# else
-# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
-# endif
-
-# elif defined(_M_MIPS)
-# define ARCHITECTURE_ID "MIPS"
-
-# elif defined(_M_SH)
-# define ARCHITECTURE_ID "SHx"
-
-# else /* unknown architecture */
-# define ARCHITECTURE_ID ""
-# endif
-
-#elif defined(__WATCOMC__)
-# if defined(_M_I86)
-# define ARCHITECTURE_ID "I86"
-
-# elif defined(_M_IX86)
-# define ARCHITECTURE_ID "X86"
-
-# else /* unknown architecture */
-# define ARCHITECTURE_ID ""
-# endif
-
-#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
-# if defined(__ICCARM__)
-# define ARCHITECTURE_ID "ARM"
-
-# elif defined(__ICCRX__)
-# define ARCHITECTURE_ID "RX"
-
-# elif defined(__ICCRH850__)
-# define ARCHITECTURE_ID "RH850"
-
-# elif defined(__ICCRL78__)
-# define ARCHITECTURE_ID "RL78"
-
-# elif defined(__ICCRISCV__)
-# define ARCHITECTURE_ID "RISCV"
-
-# elif defined(__ICCAVR__)
-# define ARCHITECTURE_ID "AVR"
-
-# elif defined(__ICC430__)
-# define ARCHITECTURE_ID "MSP430"
-
-# elif defined(__ICCV850__)
-# define ARCHITECTURE_ID "V850"
-
-# elif defined(__ICC8051__)
-# define ARCHITECTURE_ID "8051"
-
-# else /* unknown architecture */
-# define ARCHITECTURE_ID ""
-# endif
-
-#elif defined(__ghs__)
-# if defined(__PPC64__)
-# define ARCHITECTURE_ID "PPC64"
-
-# elif defined(__ppc__)
-# define ARCHITECTURE_ID "PPC"
-
-# elif defined(__ARM__)
-# define ARCHITECTURE_ID "ARM"
-
-# elif defined(__x86_64__)
-# define ARCHITECTURE_ID "x64"
-
-# elif defined(__i386__)
-# define ARCHITECTURE_ID "X86"
-
-# else /* unknown architecture */
-# define ARCHITECTURE_ID ""
-# endif
-#else
-# define ARCHITECTURE_ID
-#endif
-
-/* Convert integer to decimal digit literals. */
-#define DEC(n) \
- ('0' + (((n) / 10000000)%10)), \
- ('0' + (((n) / 1000000)%10)), \
- ('0' + (((n) / 100000)%10)), \
- ('0' + (((n) / 10000)%10)), \
- ('0' + (((n) / 1000)%10)), \
- ('0' + (((n) / 100)%10)), \
- ('0' + (((n) / 10)%10)), \
- ('0' + ((n) % 10))
-
-/* Convert integer to hex digit literals. */
-#define HEX(n) \
- ('0' + ((n)>>28 & 0xF)), \
- ('0' + ((n)>>24 & 0xF)), \
- ('0' + ((n)>>20 & 0xF)), \
- ('0' + ((n)>>16 & 0xF)), \
- ('0' + ((n)>>12 & 0xF)), \
- ('0' + ((n)>>8 & 0xF)), \
- ('0' + ((n)>>4 & 0xF)), \
- ('0' + ((n) & 0xF))
-
-/* Construct a string literal encoding the version number components. */
-#ifdef COMPILER_VERSION_MAJOR
-char const info_version[] = {
- 'I', 'N', 'F', 'O', ':',
- 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
- COMPILER_VERSION_MAJOR,
-# ifdef COMPILER_VERSION_MINOR
- '.', COMPILER_VERSION_MINOR,
-# ifdef COMPILER_VERSION_PATCH
- '.', COMPILER_VERSION_PATCH,
-# ifdef COMPILER_VERSION_TWEAK
- '.', COMPILER_VERSION_TWEAK,
-# endif
-# endif
-# endif
- ']','\0'};
-#endif
-
-/* Construct a string literal encoding the internal version number. */
-#ifdef COMPILER_VERSION_INTERNAL
-char const info_version_internal[] = {
- 'I', 'N', 'F', 'O', ':',
- 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
- 'i','n','t','e','r','n','a','l','[',
- COMPILER_VERSION_INTERNAL,']','\0'};
-#endif
-
-/* Construct a string literal encoding the version number components. */
-#ifdef SIMULATE_VERSION_MAJOR
-char const info_simulate_version[] = {
- 'I', 'N', 'F', 'O', ':',
- 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
- SIMULATE_VERSION_MAJOR,
-# ifdef SIMULATE_VERSION_MINOR
- '.', SIMULATE_VERSION_MINOR,
-# ifdef SIMULATE_VERSION_PATCH
- '.', SIMULATE_VERSION_PATCH,
-# ifdef SIMULATE_VERSION_TWEAK
- '.', SIMULATE_VERSION_TWEAK,
-# endif
-# endif
-# endif
- ']','\0'};
-#endif
-
-/* Construct the string literal in pieces to prevent the source from
- getting matched. Store it in a pointer rather than an array
- because some compilers will just produce instructions to fill the
- array rather than assigning a pointer to a static array. */
-char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
-char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
-
-
-
-
-#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L
-# if defined(__INTEL_CXX11_MODE__)
-# if defined(__cpp_aggregate_nsdmi)
-# define CXX_STD 201402L
-# else
-# define CXX_STD 201103L
-# endif
-# else
-# define CXX_STD 199711L
-# endif
-#elif defined(_MSC_VER) && defined(_MSVC_LANG)
-# define CXX_STD _MSVC_LANG
-#else
-# define CXX_STD __cplusplus
-#endif
-
-const char* info_language_dialect_default = "INFO" ":" "dialect_default["
-#if CXX_STD > 201703L
- "20"
-#elif CXX_STD >= 201703L
- "17"
-#elif CXX_STD >= 201402L
- "14"
-#elif CXX_STD >= 201103L
- "11"
-#else
- "98"
-#endif
-"]";
-
-/*--------------------------------------------------------------------------*/
-
-int main(int argc, char* argv[])
-{
- int require = 0;
- require += info_compiler[argc];
- require += info_platform[argc];
-#ifdef COMPILER_VERSION_MAJOR
- require += info_version[argc];
-#endif
-#ifdef COMPILER_VERSION_INTERNAL
- require += info_version_internal[argc];
-#endif
-#ifdef SIMULATE_ID
- require += info_simulate[argc];
-#endif
-#ifdef SIMULATE_VERSION_MAJOR
- require += info_simulate_version[argc];
-#endif
-#if defined(__CRAYXE) || defined(__CRAYXC)
- require += info_cray[argc];
-#endif
- require += info_language_dialect_default[argc];
- (void)argv;
- return require;
-}
+/* This source file must have a .cpp extension so that all C++ compilers
+ recognize the extension without flags. Borland does not know .cxx for
+ example. */
+#ifndef __cplusplus
+# error "A C compiler has been selected for C++."
+#endif
+
+
+/* Version number components: V=Version, R=Revision, P=Patch
+ Version date components: YYYY=Year, MM=Month, DD=Day */
+
+#if defined(__COMO__)
+# define COMPILER_ID "Comeau"
+ /* __COMO_VERSION__ = VRR */
+# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100)
+# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100)
+
+#elif defined(__INTEL_COMPILER) || defined(__ICC)
+# define COMPILER_ID "Intel"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+# if defined(__GNUC__)
+# define SIMULATE_ID "GNU"
+# endif
+ /* __INTEL_COMPILER = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
+# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
+# if defined(__INTEL_COMPILER_UPDATE)
+# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
+# else
+# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
+# endif
+# if defined(__INTEL_COMPILER_BUILD_DATE)
+ /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
+# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
+# endif
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+# if defined(__GNUC__)
+# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
+# elif defined(__GNUG__)
+# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
+# endif
+# if defined(__GNUC_MINOR__)
+# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
+# endif
+# if defined(__GNUC_PATCHLEVEL__)
+# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+# endif
+
+#elif defined(__PATHCC__)
+# define COMPILER_ID "PathScale"
+# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
+# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
+# if defined(__PATHCC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
+# endif
+
+#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
+# define COMPILER_ID "Embarcadero"
+# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
+# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
+# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF)
+
+#elif defined(__BORLANDC__)
+# define COMPILER_ID "Borland"
+ /* __BORLANDC__ = 0xVRR */
+# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
+# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
+
+#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
+# define COMPILER_ID "Watcom"
+ /* __WATCOMC__ = VVRR */
+# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
+# if (__WATCOMC__ % 10) > 0
+# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
+# endif
+
+#elif defined(__WATCOMC__)
+# define COMPILER_ID "OpenWatcom"
+ /* __WATCOMC__ = VVRP + 1100 */
+# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
+# if (__WATCOMC__ % 10) > 0
+# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
+# endif
+
+#elif defined(__SUNPRO_CC)
+# define COMPILER_ID "SunPro"
+# if __SUNPRO_CC >= 0x5100
+ /* __SUNPRO_CC = 0xVRRP */
+# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12)
+# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF)
+# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
+# else
+ /* __SUNPRO_CC = 0xVRP */
+# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8)
+# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF)
+# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
+# endif
+
+#elif defined(__HP_aCC)
+# define COMPILER_ID "HP"
+ /* __HP_aCC = VVRRPP */
+# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000)
+# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100)
+# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100)
+
+#elif defined(__DECCXX)
+# define COMPILER_ID "Compaq"
+ /* __DECCXX_VER = VVRRTPPPP */
+# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000)
+# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100)
+# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000)
+
+#elif defined(__IBMCPP__) && defined(__COMPILER_VER__)
+# define COMPILER_ID "zOS"
+ /* __IBMCPP__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
+
+#elif defined(__ibmxl__) && defined(__clang__)
+# define COMPILER_ID "XLClang"
+# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
+# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
+# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
+# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
+
+
+#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800
+# define COMPILER_ID "XL"
+ /* __IBMCPP__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
+
+#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800
+# define COMPILER_ID "VisualAge"
+ /* __IBMCPP__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
+
+#elif defined(__PGI)
+# define COMPILER_ID "PGI"
+# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
+# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
+# if defined(__PGIC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
+# endif
+
+#elif defined(_CRAYC)
+# define COMPILER_ID "Cray"
+# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
+# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
+
+#elif defined(__TI_COMPILER_VERSION__)
+# define COMPILER_ID "TI"
+ /* __TI_COMPILER_VERSION__ = VVVRRRPPP */
+# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
+# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000)
+# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)
+
+#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version)
+# define COMPILER_ID "Fujitsu"
+
+#elif defined(__ghs__)
+# define COMPILER_ID "GHS"
+/* __GHS_VERSION_NUMBER = VVVVRP */
+# ifdef __GHS_VERSION_NUMBER
+# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
+# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10)
+# endif
+
+#elif defined(__SCO_VERSION__)
+# define COMPILER_ID "SCO"
+
+#elif defined(__ARMCC_VERSION) && !defined(__clang__)
+# define COMPILER_ID "ARMCC"
+#if __ARMCC_VERSION >= 1000000
+ /* __ARMCC_VERSION = VRRPPPP */
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
+ # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
+ # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
+#else
+ /* __ARMCC_VERSION = VRPPPP */
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
+ # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
+ # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
+#endif
+
+
+#elif defined(__clang__) && defined(__apple_build_version__)
+# define COMPILER_ID "AppleClang"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
+
+#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
+# define COMPILER_ID "ARMClang"
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
+ # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
+ # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000)
+# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
+
+#elif defined(__clang__)
+# define COMPILER_ID "Clang"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+
+#elif defined(__GNUC__) || defined(__GNUG__)
+# define COMPILER_ID "GNU"
+# if defined(__GNUC__)
+# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
+# else
+# define COMPILER_VERSION_MAJOR DEC(__GNUG__)
+# endif
+# if defined(__GNUC_MINOR__)
+# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
+# endif
+# if defined(__GNUC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+# endif
+
+#elif defined(_MSC_VER)
+# define COMPILER_ID "MSVC"
+ /* _MSC_VER = VVRR */
+# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
+# if defined(_MSC_FULL_VER)
+# if _MSC_VER >= 1400
+ /* _MSC_FULL_VER = VVRRPPPPP */
+# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
+# else
+ /* _MSC_FULL_VER = VVRRPPPP */
+# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
+# endif
+# endif
+# if defined(_MSC_BUILD)
+# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
+# endif
+
+#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
+# define COMPILER_ID "ADSP"
+#if defined(__VISUALDSPVERSION__)
+ /* __VISUALDSPVERSION__ = 0xVVRRPP00 */
+# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24)
+# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF)
+# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF)
+#endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# define COMPILER_ID "IAR"
+# if defined(__VER__) && defined(__ICCARM__)
+# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
+# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
+# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
+# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
+# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__))
+# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
+# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
+# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
+# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
+# endif
+
+
+/* These compilers are either not known or too old to define an
+ identification macro. Try to identify the platform and guess that
+ it is the native compiler. */
+#elif defined(__hpux) || defined(__hpua)
+# define COMPILER_ID "HP"
+
+#else /* unknown compiler */
+# define COMPILER_ID ""
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+ getting matched. Store it in a pointer rather than an array
+ because some compilers will just produce instructions to fill the
+ array rather than assigning a pointer to a static array. */
+char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
+#ifdef SIMULATE_ID
+char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
+#endif
+
+#ifdef __QNXNTO__
+char const* qnxnto = "INFO" ":" "qnxnto[]";
+#endif
+
+#if defined(__CRAYXE) || defined(__CRAYXC)
+char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
+#endif
+
+#define STRINGIFY_HELPER(X) #X
+#define STRINGIFY(X) STRINGIFY_HELPER(X)
+
+/* Identify known platforms by name. */
+#if defined(__linux) || defined(__linux__) || defined(linux)
+# define PLATFORM_ID "Linux"
+
+#elif defined(__CYGWIN__)
+# define PLATFORM_ID "Cygwin"
+
+#elif defined(__MINGW32__)
+# define PLATFORM_ID "MinGW"
+
+#elif defined(__APPLE__)
+# define PLATFORM_ID "Darwin"
+
+#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+# define PLATFORM_ID "Windows"
+
+#elif defined(__FreeBSD__) || defined(__FreeBSD)
+# define PLATFORM_ID "FreeBSD"
+
+#elif defined(__NetBSD__) || defined(__NetBSD)
+# define PLATFORM_ID "NetBSD"
+
+#elif defined(__OpenBSD__) || defined(__OPENBSD)
+# define PLATFORM_ID "OpenBSD"
+
+#elif defined(__sun) || defined(sun)
+# define PLATFORM_ID "SunOS"
+
+#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
+# define PLATFORM_ID "AIX"
+
+#elif defined(__hpux) || defined(__hpux__)
+# define PLATFORM_ID "HP-UX"
+
+#elif defined(__HAIKU__)
+# define PLATFORM_ID "Haiku"
+
+#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
+# define PLATFORM_ID "BeOS"
+
+#elif defined(__QNX__) || defined(__QNXNTO__)
+# define PLATFORM_ID "QNX"
+
+#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
+# define PLATFORM_ID "Tru64"
+
+#elif defined(__riscos) || defined(__riscos__)
+# define PLATFORM_ID "RISCos"
+
+#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
+# define PLATFORM_ID "SINIX"
+
+#elif defined(__UNIX_SV__)
+# define PLATFORM_ID "UNIX_SV"
+
+#elif defined(__bsdos__)
+# define PLATFORM_ID "BSDOS"
+
+#elif defined(_MPRAS) || defined(MPRAS)
+# define PLATFORM_ID "MP-RAS"
+
+#elif defined(__osf) || defined(__osf__)
+# define PLATFORM_ID "OSF1"
+
+#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
+# define PLATFORM_ID "SCO_SV"
+
+#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
+# define PLATFORM_ID "ULTRIX"
+
+#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
+# define PLATFORM_ID "Xenix"
+
+#elif defined(__WATCOMC__)
+# if defined(__LINUX__)
+# define PLATFORM_ID "Linux"
+
+# elif defined(__DOS__)
+# define PLATFORM_ID "DOS"
+
+# elif defined(__OS2__)
+# define PLATFORM_ID "OS2"
+
+# elif defined(__WINDOWS__)
+# define PLATFORM_ID "Windows3x"
+
+# elif defined(__VXWORKS__)
+# define PLATFORM_ID "VxWorks"
+
+# else /* unknown platform */
+# define PLATFORM_ID
+# endif
+
+#elif defined(__INTEGRITY)
+# if defined(INT_178B)
+# define PLATFORM_ID "Integrity178"
+
+# else /* regular Integrity */
+# define PLATFORM_ID "Integrity"
+# endif
+
+#else /* unknown platform */
+# define PLATFORM_ID
+
+#endif
+
+/* For windows compilers MSVC and Intel we can determine
+ the architecture of the compiler being used. This is because
+ the compilers do not have flags that can change the architecture,
+ but rather depend on which compiler is being used
+*/
+#if defined(_WIN32) && defined(_MSC_VER)
+# if defined(_M_IA64)
+# define ARCHITECTURE_ID "IA64"
+
+# elif defined(_M_X64) || defined(_M_AMD64)
+# define ARCHITECTURE_ID "x64"
+
+# elif defined(_M_IX86)
+# define ARCHITECTURE_ID "X86"
+
+# elif defined(_M_ARM64)
+# define ARCHITECTURE_ID "ARM64"
+
+# elif defined(_M_ARM)
+# if _M_ARM == 4
+# define ARCHITECTURE_ID "ARMV4I"
+# elif _M_ARM == 5
+# define ARCHITECTURE_ID "ARMV5I"
+# else
+# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
+# endif
+
+# elif defined(_M_MIPS)
+# define ARCHITECTURE_ID "MIPS"
+
+# elif defined(_M_SH)
+# define ARCHITECTURE_ID "SHx"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__WATCOMC__)
+# if defined(_M_I86)
+# define ARCHITECTURE_ID "I86"
+
+# elif defined(_M_IX86)
+# define ARCHITECTURE_ID "X86"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# if defined(__ICCARM__)
+# define ARCHITECTURE_ID "ARM"
+
+# elif defined(__ICCRX__)
+# define ARCHITECTURE_ID "RX"
+
+# elif defined(__ICCRH850__)
+# define ARCHITECTURE_ID "RH850"
+
+# elif defined(__ICCRL78__)
+# define ARCHITECTURE_ID "RL78"
+
+# elif defined(__ICCRISCV__)
+# define ARCHITECTURE_ID "RISCV"
+
+# elif defined(__ICCAVR__)
+# define ARCHITECTURE_ID "AVR"
+
+# elif defined(__ICC430__)
+# define ARCHITECTURE_ID "MSP430"
+
+# elif defined(__ICCV850__)
+# define ARCHITECTURE_ID "V850"
+
+# elif defined(__ICC8051__)
+# define ARCHITECTURE_ID "8051"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__ghs__)
+# if defined(__PPC64__)
+# define ARCHITECTURE_ID "PPC64"
+
+# elif defined(__ppc__)
+# define ARCHITECTURE_ID "PPC"
+
+# elif defined(__ARM__)
+# define ARCHITECTURE_ID "ARM"
+
+# elif defined(__x86_64__)
+# define ARCHITECTURE_ID "x64"
+
+# elif defined(__i386__)
+# define ARCHITECTURE_ID "X86"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+#else
+# define ARCHITECTURE_ID
+#endif
+
+/* Convert integer to decimal digit literals. */
+#define DEC(n) \
+ ('0' + (((n) / 10000000)%10)), \
+ ('0' + (((n) / 1000000)%10)), \
+ ('0' + (((n) / 100000)%10)), \
+ ('0' + (((n) / 10000)%10)), \
+ ('0' + (((n) / 1000)%10)), \
+ ('0' + (((n) / 100)%10)), \
+ ('0' + (((n) / 10)%10)), \
+ ('0' + ((n) % 10))
+
+/* Convert integer to hex digit literals. */
+#define HEX(n) \
+ ('0' + ((n)>>28 & 0xF)), \
+ ('0' + ((n)>>24 & 0xF)), \
+ ('0' + ((n)>>20 & 0xF)), \
+ ('0' + ((n)>>16 & 0xF)), \
+ ('0' + ((n)>>12 & 0xF)), \
+ ('0' + ((n)>>8 & 0xF)), \
+ ('0' + ((n)>>4 & 0xF)), \
+ ('0' + ((n) & 0xF))
+
+/* Construct a string literal encoding the version number components. */
+#ifdef COMPILER_VERSION_MAJOR
+char const info_version[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
+ COMPILER_VERSION_MAJOR,
+# ifdef COMPILER_VERSION_MINOR
+ '.', COMPILER_VERSION_MINOR,
+# ifdef COMPILER_VERSION_PATCH
+ '.', COMPILER_VERSION_PATCH,
+# ifdef COMPILER_VERSION_TWEAK
+ '.', COMPILER_VERSION_TWEAK,
+# endif
+# endif
+# endif
+ ']','\0'};
+#endif
+
+/* Construct a string literal encoding the internal version number. */
+#ifdef COMPILER_VERSION_INTERNAL
+char const info_version_internal[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
+ 'i','n','t','e','r','n','a','l','[',
+ COMPILER_VERSION_INTERNAL,']','\0'};
+#endif
+
+/* Construct a string literal encoding the version number components. */
+#ifdef SIMULATE_VERSION_MAJOR
+char const info_simulate_version[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
+ SIMULATE_VERSION_MAJOR,
+# ifdef SIMULATE_VERSION_MINOR
+ '.', SIMULATE_VERSION_MINOR,
+# ifdef SIMULATE_VERSION_PATCH
+ '.', SIMULATE_VERSION_PATCH,
+# ifdef SIMULATE_VERSION_TWEAK
+ '.', SIMULATE_VERSION_TWEAK,
+# endif
+# endif
+# endif
+ ']','\0'};
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+ getting matched. Store it in a pointer rather than an array
+ because some compilers will just produce instructions to fill the
+ array rather than assigning a pointer to a static array. */
+char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
+char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
+
+
+
+
+#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L
+# if defined(__INTEL_CXX11_MODE__)
+# if defined(__cpp_aggregate_nsdmi)
+# define CXX_STD 201402L
+# else
+# define CXX_STD 201103L
+# endif
+# else
+# define CXX_STD 199711L
+# endif
+#elif defined(_MSC_VER) && defined(_MSVC_LANG)
+# define CXX_STD _MSVC_LANG
+#else
+# define CXX_STD __cplusplus
+#endif
+
+const char* info_language_dialect_default = "INFO" ":" "dialect_default["
+#if CXX_STD > 201703L
+ "20"
+#elif CXX_STD >= 201703L
+ "17"
+#elif CXX_STD >= 201402L
+ "14"
+#elif CXX_STD >= 201103L
+ "11"
+#else
+ "98"
+#endif
+"]";
+
+/*--------------------------------------------------------------------------*/
+
+int main(int argc, char* argv[])
+{
+ int require = 0;
+ require += info_compiler[argc];
+ require += info_platform[argc];
+#ifdef COMPILER_VERSION_MAJOR
+ require += info_version[argc];
+#endif
+#ifdef COMPILER_VERSION_INTERNAL
+ require += info_version_internal[argc];
+#endif
+#ifdef SIMULATE_ID
+ require += info_simulate[argc];
+#endif
+#ifdef SIMULATE_VERSION_MAJOR
+ require += info_simulate_version[argc];
+#endif
+#if defined(__CRAYXE) || defined(__CRAYXC)
+ require += info_cray[argc];
+#endif
+ require += info_language_dialect_default[argc];
+ (void)argv;
+ return require;
+}
diff --git a/CMakeFiles/CMakeDirectoryInformation.cmake b/CMakeFiles/CMakeDirectoryInformation.cmake
index fe32db3..1ddd1af 100644
--- a/CMakeFiles/CMakeDirectoryInformation.cmake
+++ b/CMakeFiles/CMakeDirectoryInformation.cmake
@@ -1,16 +1,16 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "MinGW Makefiles" Generator, CMake Version 3.18
-
-# Relative path conversion top directories.
-set(CMAKE_RELATIVE_PATH_TOP_SOURCE "C:/Users/jaksk/Desktop/dev/_cpp/age")
-set(CMAKE_RELATIVE_PATH_TOP_BINARY "C:/Users/jaksk/Desktop/dev/_cpp/age")
-
-# Force unix paths in dependencies.
-set(CMAKE_FORCE_UNIX_PATHS 1)
-
-
-# The C and CXX include file regular expressions for this directory.
-set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$")
-set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$")
-set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})
-set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "MinGW Makefiles" Generator, CMake Version 3.18
+
+# Relative path conversion top directories.
+set(CMAKE_RELATIVE_PATH_TOP_SOURCE "C:/Users/jaksk/Desktop/dev/_cpp/age")
+set(CMAKE_RELATIVE_PATH_TOP_BINARY "C:/Users/jaksk/Desktop/dev/_cpp/age")
+
+# Force unix paths in dependencies.
+set(CMAKE_FORCE_UNIX_PATHS 1)
+
+
+# The C and CXX include file regular expressions for this directory.
+set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$")
+set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$")
+set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})
+set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})
diff --git a/CMakeFiles/Makefile.cmake b/CMakeFiles/Makefile.cmake
index 50a0369..32bbdf6 100644
--- a/CMakeFiles/Makefile.cmake
+++ b/CMakeFiles/Makefile.cmake
@@ -1,54 +1,54 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "MinGW Makefiles" Generator, CMake Version 3.18
-
-# The generator used is:
-set(CMAKE_DEPENDS_GENERATOR "MinGW Makefiles")
-
-# The top level Makefile was generated from the following files:
-set(CMAKE_MAKEFILE_DEPENDS
- "CMakeCache.txt"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeCInformation.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeCXXInformation.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeCommonLanguageInclude.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeGenericSystem.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeInitializeConfigs.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeLanguageInformation.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeRCInformation.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeSystemSpecificInformation.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeSystemSpecificInitialize.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/Compiler/CMakeCommonCompilerMacros.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/Compiler/GNU-C.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/Compiler/GNU-CXX.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/Compiler/GNU.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/Internal/CMakeCheckCompilerFlag.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/Platform/Windows-GNU-C-ABI.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/Platform/Windows-GNU-C.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/Platform/Windows-GNU-CXX-ABI.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/Platform/Windows-GNU-CXX.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/Platform/Windows-GNU.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/Platform/Windows-windres.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/Platform/Windows.cmake"
- "C:/Program Files/CMake/share/cmake-3.18/Modules/Platform/WindowsPaths.cmake"
- "CMakeFiles/3.18.1/CMakeCCompiler.cmake"
- "CMakeFiles/3.18.1/CMakeCXXCompiler.cmake"
- "CMakeFiles/3.18.1/CMakeRCCompiler.cmake"
- "CMakeFiles/3.18.1/CMakeSystem.cmake"
- "CMakeLists.txt"
- )
-
-# The corresponding makefile is:
-set(CMAKE_MAKEFILE_OUTPUTS
- "Makefile"
- "CMakeFiles/cmake.check_cache"
- )
-
-# Byproducts of CMake generate step:
-set(CMAKE_MAKEFILE_PRODUCTS
- "CMakeFiles/CMakeDirectoryInformation.cmake"
- )
-
-# Dependency information for all targets:
-set(CMAKE_DEPEND_INFO_FILES
- "CMakeFiles/sdl_test.dir/DependInfo.cmake"
- )
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "MinGW Makefiles" Generator, CMake Version 3.18
+
+# The generator used is:
+set(CMAKE_DEPENDS_GENERATOR "MinGW Makefiles")
+
+# The top level Makefile was generated from the following files:
+set(CMAKE_MAKEFILE_DEPENDS
+ "CMakeCache.txt"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeCInformation.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeCXXInformation.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeCommonLanguageInclude.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeGenericSystem.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeInitializeConfigs.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeLanguageInformation.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeRCInformation.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeSystemSpecificInformation.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeSystemSpecificInitialize.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/Compiler/CMakeCommonCompilerMacros.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/Compiler/GNU-C.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/Compiler/GNU-CXX.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/Compiler/GNU.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/Internal/CMakeCheckCompilerFlag.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/Platform/Windows-GNU-C-ABI.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/Platform/Windows-GNU-C.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/Platform/Windows-GNU-CXX-ABI.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/Platform/Windows-GNU-CXX.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/Platform/Windows-GNU.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/Platform/Windows-windres.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/Platform/Windows.cmake"
+ "C:/Program Files/CMake/share/cmake-3.18/Modules/Platform/WindowsPaths.cmake"
+ "CMakeFiles/3.18.1/CMakeCCompiler.cmake"
+ "CMakeFiles/3.18.1/CMakeCXXCompiler.cmake"
+ "CMakeFiles/3.18.1/CMakeRCCompiler.cmake"
+ "CMakeFiles/3.18.1/CMakeSystem.cmake"
+ "CMakeLists.txt"
+ )
+
+# The corresponding makefile is:
+set(CMAKE_MAKEFILE_OUTPUTS
+ "Makefile"
+ "CMakeFiles/cmake.check_cache"
+ )
+
+# Byproducts of CMake generate step:
+set(CMAKE_MAKEFILE_PRODUCTS
+ "CMakeFiles/CMakeDirectoryInformation.cmake"
+ )
+
+# Dependency information for all targets:
+set(CMAKE_DEPEND_INFO_FILES
+ "CMakeFiles/sdl_test.dir/DependInfo.cmake"
+ )
diff --git a/CMakeFiles/Makefile2 b/CMakeFiles/Makefile2
index 123b2dd..48264c9 100644
--- a/CMakeFiles/Makefile2
+++ b/CMakeFiles/Makefile2
@@ -1,124 +1,124 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "MinGW Makefiles" Generator, CMake Version 3.18
-
-# Default target executed when no arguments are given to make.
-default_target: all
-
-.PHONY : default_target
-
-#=============================================================================
-# Special targets provided by cmake.
-
-# Disable implicit rules so canonical targets will work.
-.SUFFIXES:
-
-
-# Disable VCS-based implicit rules.
-% : %,v
-
-
-# Disable VCS-based implicit rules.
-% : RCS/%
-
-
-# Disable VCS-based implicit rules.
-% : RCS/%,v
-
-
-# Disable VCS-based implicit rules.
-% : SCCS/s.%
-
-
-# Disable VCS-based implicit rules.
-% : s.%
-
-
-.SUFFIXES: .hpux_make_needs_suffix_list
-
-
-# Command-line flag to silence nested $(MAKE).
-$(VERBOSE)MAKESILENT = -s
-
-#Suppress display of executed commands.
-$(VERBOSE).SILENT:
-
-# A target that is always out of date.
-cmake_force:
-
-.PHONY : cmake_force
-
-#=============================================================================
-# Set environment variables for the build.
-
-SHELL = cmd.exe
-
-# The CMake executable.
-CMAKE_COMMAND = "C:\Program Files\CMake\bin\cmake.exe"
-
-# The command to remove a file.
-RM = "C:\Program Files\CMake\bin\cmake.exe" -E rm -f
-
-# Escaping for special characters.
-EQUALS = =
-
-# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = C:\Users\jaksk\Desktop\dev\_cpp\age
-
-# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = C:\Users\jaksk\Desktop\dev\_cpp\age
-
-#=============================================================================
-# Directory level rules for the build root directory
-
-# The main recursive "all" target.
-all: CMakeFiles/sdl_test.dir/all
-
-.PHONY : all
-
-# The main recursive "preinstall" target.
-preinstall:
-
-.PHONY : preinstall
-
-# The main recursive "clean" target.
-clean: CMakeFiles/sdl_test.dir/clean
-
-.PHONY : clean
-
-#=============================================================================
-# Target rules for target CMakeFiles/sdl_test.dir
-
-# All Build rule for target.
-CMakeFiles/sdl_test.dir/all:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/depend
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/build
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 "Built target sdl_test"
-.PHONY : CMakeFiles/sdl_test.dir/all
-
-# Build rule for subdir invocation for target.
-CMakeFiles/sdl_test.dir/rule: cmake_check_build_system
- $(CMAKE_COMMAND) -E cmake_progress_start C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles 15
- $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 CMakeFiles/sdl_test.dir/all
- $(CMAKE_COMMAND) -E cmake_progress_start C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles 0
-.PHONY : CMakeFiles/sdl_test.dir/rule
-
-# Convenience name for target.
-sdl_test: CMakeFiles/sdl_test.dir/rule
-
-.PHONY : sdl_test
-
-# clean rule for target.
-CMakeFiles/sdl_test.dir/clean:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/clean
-.PHONY : CMakeFiles/sdl_test.dir/clean
-
-#=============================================================================
-# Special targets to cleanup operation of make.
-
-# Special rule to run CMake to check the build system integrity.
-# No rule that depends on this can have commands that come from listfiles
-# because they might be regenerated.
-cmake_check_build_system:
- $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles\Makefile.cmake 0
-.PHONY : cmake_check_build_system
-
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "MinGW Makefiles" Generator, CMake Version 3.18
+
+# Default target executed when no arguments are given to make.
+default_target: all
+
+.PHONY : default_target
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+
+# Disable VCS-based implicit rules.
+% : %,v
+
+
+# Disable VCS-based implicit rules.
+% : RCS/%
+
+
+# Disable VCS-based implicit rules.
+% : RCS/%,v
+
+
+# Disable VCS-based implicit rules.
+% : SCCS/s.%
+
+
+# Disable VCS-based implicit rules.
+% : s.%
+
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+
+# Command-line flag to silence nested $(MAKE).
+$(VERBOSE)MAKESILENT = -s
+
+#Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+# A target that is always out of date.
+cmake_force:
+
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+SHELL = cmd.exe
+
+# The CMake executable.
+CMAKE_COMMAND = "C:\Program Files\CMake\bin\cmake.exe"
+
+# The command to remove a file.
+RM = "C:\Program Files\CMake\bin\cmake.exe" -E rm -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = C:\Users\jaksk\Desktop\dev\_cpp\age
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = C:\Users\jaksk\Desktop\dev\_cpp\age
+
+#=============================================================================
+# Directory level rules for the build root directory
+
+# The main recursive "all" target.
+all: CMakeFiles/sdl_test.dir/all
+
+.PHONY : all
+
+# The main recursive "preinstall" target.
+preinstall:
+
+.PHONY : preinstall
+
+# The main recursive "clean" target.
+clean: CMakeFiles/sdl_test.dir/clean
+
+.PHONY : clean
+
+#=============================================================================
+# Target rules for target CMakeFiles/sdl_test.dir
+
+# All Build rule for target.
+CMakeFiles/sdl_test.dir/all:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/depend
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/build
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 "Built target sdl_test"
+.PHONY : CMakeFiles/sdl_test.dir/all
+
+# Build rule for subdir invocation for target.
+CMakeFiles/sdl_test.dir/rule: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles 15
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 CMakeFiles/sdl_test.dir/all
+ $(CMAKE_COMMAND) -E cmake_progress_start C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles 0
+.PHONY : CMakeFiles/sdl_test.dir/rule
+
+# Convenience name for target.
+sdl_test: CMakeFiles/sdl_test.dir/rule
+
+.PHONY : sdl_test
+
+# clean rule for target.
+CMakeFiles/sdl_test.dir/clean:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/clean
+.PHONY : CMakeFiles/sdl_test.dir/clean
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+ $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles\Makefile.cmake 0
+.PHONY : cmake_check_build_system
+
diff --git a/CMakeFiles/TargetDirectories.txt b/CMakeFiles/TargetDirectories.txt
index 8e375f4..bf1ad51 100644
--- a/CMakeFiles/TargetDirectories.txt
+++ b/CMakeFiles/TargetDirectories.txt
@@ -1,3 +1,3 @@
-C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir
-C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/edit_cache.dir
-C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/rebuild_cache.dir
+C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir
+C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/edit_cache.dir
+C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/rebuild_cache.dir
diff --git a/CMakeFiles/cmake.check_cache b/CMakeFiles/cmake.check_cache
index 3dccd73..56c437b 100644
--- a/CMakeFiles/cmake.check_cache
+++ b/CMakeFiles/cmake.check_cache
@@ -1 +1 @@
-# This file is generated by cmake for dependency checking of the CMakeCache.txt file
+# This file is generated by cmake for dependency checking of the CMakeCache.txt file
diff --git a/CMakeFiles/feature_tests.cxx b/CMakeFiles/feature_tests.cxx
index ea528b4..9c9063e 100644
--- a/CMakeFiles/feature_tests.cxx
+++ b/CMakeFiles/feature_tests.cxx
@@ -1,405 +1,405 @@
-
- const char features[] = {"\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && __cplusplus
-"1"
-#else
-"0"
-#endif
-"cxx_template_template_parameters\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_alias_templates\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_alignas\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_alignof\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_attributes\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_auto_type\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_constexpr\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_decltype\n"
-"CXX_FEATURE:"
-#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_decltype_incomplete_return_types\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_default_function_template_args\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_defaulted_functions\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_defaulted_move_initializers\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_delegating_constructors\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_deleted_functions\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_enum_forward_declarations\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_explicit_conversions\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_extended_friend_declarations\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_extern_templates\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_final\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_func_identifier\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_generalized_initializers\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_inheriting_constructors\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_inline_namespaces\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_lambdas\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_local_type_template_args\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_long_long_type\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_noexcept\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_nonstatic_member_init\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_nullptr\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_override\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_range_for\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_raw_string_literals\n"
-"CXX_FEATURE:"
-#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_reference_qualified_functions\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_right_angle_brackets\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_rvalue_references\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_sizeof_member\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_static_assert\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_strong_enums\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_thread_local\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_trailing_return_types\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_unicode_literals\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_uniform_initialization\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_unrestricted_unions\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_user_literals\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_variadic_macros\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
-"1"
-#else
-"0"
-#endif
-"cxx_variadic_templates\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L
-"1"
-#else
-"0"
-#endif
-"cxx_aggregate_default_initializers\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_attribute_deprecated\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_binary_literals\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_contextual_conversions\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_decltype_auto\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_digit_separators\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_generic_lambdas\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_lambda_init_captures\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L
-"1"
-#else
-"0"
-#endif
-"cxx_relaxed_constexpr\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
-"1"
-#else
-"0"
-#endif
-"cxx_return_type_deduction\n"
-"CXX_FEATURE:"
-#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L
-"1"
-#else
-"0"
-#endif
-"cxx_variable_templates\n"
-
-};
-
-int main(int argc, char** argv) { (void)argv; return features[argc]; }
+
+ const char features[] = {"\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && __cplusplus
+"1"
+#else
+"0"
+#endif
+"cxx_template_template_parameters\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_alias_templates\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_alignas\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_alignof\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_attributes\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_auto_type\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_constexpr\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_decltype\n"
+"CXX_FEATURE:"
+#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_decltype_incomplete_return_types\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_default_function_template_args\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_defaulted_functions\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_defaulted_move_initializers\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_delegating_constructors\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_deleted_functions\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_enum_forward_declarations\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_explicit_conversions\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_extended_friend_declarations\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_extern_templates\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_final\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_func_identifier\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_generalized_initializers\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_inheriting_constructors\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_inline_namespaces\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_lambdas\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_local_type_template_args\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_long_long_type\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_noexcept\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_nonstatic_member_init\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_nullptr\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_override\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_range_for\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_raw_string_literals\n"
+"CXX_FEATURE:"
+#if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_reference_qualified_functions\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_right_angle_brackets\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_rvalue_references\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_sizeof_member\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_static_assert\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_strong_enums\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_thread_local\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_trailing_return_types\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_unicode_literals\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_uniform_initialization\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_unrestricted_unions\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_user_literals\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_variadic_macros\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__))
+"1"
+#else
+"0"
+#endif
+"cxx_variadic_templates\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L
+"1"
+#else
+"0"
+#endif
+"cxx_aggregate_default_initializers\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_attribute_deprecated\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_binary_literals\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_contextual_conversions\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_decltype_auto\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_digit_separators\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_generic_lambdas\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_lambda_init_captures\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L
+"1"
+#else
+"0"
+#endif
+"cxx_relaxed_constexpr\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L
+"1"
+#else
+"0"
+#endif
+"cxx_return_type_deduction\n"
+"CXX_FEATURE:"
+#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L
+"1"
+#else
+"0"
+#endif
+"cxx_variable_templates\n"
+
+};
+
+int main(int argc, char** argv) { (void)argv; return features[argc]; }
diff --git a/CMakeFiles/progress.marks b/CMakeFiles/progress.marks
index 60d3b2f..53457f8 100644
--- a/CMakeFiles/progress.marks
+++ b/CMakeFiles/progress.marks
@@ -1 +1 @@
-15
+15
diff --git a/CMakeFiles/sdl_test.dir/CXX.includecache b/CMakeFiles/sdl_test.dir/CXX.includecache
index 44aa3c5..f57c2f7 100644
--- a/CMakeFiles/sdl_test.dir/CXX.includecache
+++ b/CMakeFiles/sdl_test.dir/CXX.includecache
@@ -1,876 +1,876 @@
-#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">])
-
-#IncludeRegexScan: ^.*$
-
-#IncludeRegexComplain: ^$
-
-#IncludeRegexTransform:
-
-C:/MinGW_libs/include/SDL2/SDL.h
-SDL_main.h
-C:/MinGW_libs/include/SDL2/SDL_main.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_assert.h
-C:/MinGW_libs/include/SDL2/SDL_assert.h
-SDL_atomic.h
-C:/MinGW_libs/include/SDL2/SDL_atomic.h
-SDL_audio.h
-C:/MinGW_libs/include/SDL2/SDL_audio.h
-SDL_clipboard.h
-C:/MinGW_libs/include/SDL2/SDL_clipboard.h
-SDL_cpuinfo.h
-C:/MinGW_libs/include/SDL2/SDL_cpuinfo.h
-SDL_endian.h
-C:/MinGW_libs/include/SDL2/SDL_endian.h
-SDL_error.h
-C:/MinGW_libs/include/SDL2/SDL_error.h
-SDL_events.h
-C:/MinGW_libs/include/SDL2/SDL_events.h
-SDL_filesystem.h
-C:/MinGW_libs/include/SDL2/SDL_filesystem.h
-SDL_gamecontroller.h
-C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
-SDL_haptic.h
-C:/MinGW_libs/include/SDL2/SDL_haptic.h
-SDL_hints.h
-C:/MinGW_libs/include/SDL2/SDL_hints.h
-SDL_joystick.h
-C:/MinGW_libs/include/SDL2/SDL_joystick.h
-SDL_loadso.h
-C:/MinGW_libs/include/SDL2/SDL_loadso.h
-SDL_log.h
-C:/MinGW_libs/include/SDL2/SDL_log.h
-SDL_messagebox.h
-C:/MinGW_libs/include/SDL2/SDL_messagebox.h
-SDL_metal.h
-C:/MinGW_libs/include/SDL2/SDL_metal.h
-SDL_mutex.h
-C:/MinGW_libs/include/SDL2/SDL_mutex.h
-SDL_power.h
-C:/MinGW_libs/include/SDL2/SDL_power.h
-SDL_render.h
-C:/MinGW_libs/include/SDL2/SDL_render.h
-SDL_rwops.h
-C:/MinGW_libs/include/SDL2/SDL_rwops.h
-SDL_sensor.h
-C:/MinGW_libs/include/SDL2/SDL_sensor.h
-SDL_shape.h
-C:/MinGW_libs/include/SDL2/SDL_shape.h
-SDL_system.h
-C:/MinGW_libs/include/SDL2/SDL_system.h
-SDL_thread.h
-C:/MinGW_libs/include/SDL2/SDL_thread.h
-SDL_timer.h
-C:/MinGW_libs/include/SDL2/SDL_timer.h
-SDL_version.h
-C:/MinGW_libs/include/SDL2/SDL_version.h
-SDL_video.h
-C:/MinGW_libs/include/SDL2/SDL_video.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_assert.h
-SDL_config.h
-C:/MinGW_libs/include/SDL2/SDL_config.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-signal.h
--
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_atomic.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_platform.h
-C:/MinGW_libs/include/SDL2/SDL_platform.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-sys/cpuinline.h
--
-mbarrier.h
--
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_audio.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_error.h
-C:/MinGW_libs/include/SDL2/SDL_error.h
-SDL_endian.h
-C:/MinGW_libs/include/SDL2/SDL_endian.h
-SDL_mutex.h
-C:/MinGW_libs/include/SDL2/SDL_mutex.h
-SDL_thread.h
-C:/MinGW_libs/include/SDL2/SDL_thread.h
-SDL_rwops.h
-C:/MinGW_libs/include/SDL2/SDL_rwops.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_blendmode.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_clipboard.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_config.h
-SDL_platform.h
-C:/MinGW_libs/include/SDL2/SDL_platform.h
-
-C:/MinGW_libs/include/SDL2/SDL_cpuinfo.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-intrin.h
--
-intrin.h
--
-altivec.h
--
-arm_neon.h
--
-armintr.h
--
-arm_neon.h
--
-arm64intr.h
--
-arm64_neon.h
--
-mm3dnow.h
--
-immintrin.h
--
-mmintrin.h
--
-xmmintrin.h
--
-emmintrin.h
--
-pmmintrin.h
--
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_endian.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-endian.h
--
-endian.h
--
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_error.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_events.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_error.h
-C:/MinGW_libs/include/SDL2/SDL_error.h
-SDL_video.h
-C:/MinGW_libs/include/SDL2/SDL_video.h
-SDL_keyboard.h
-C:/MinGW_libs/include/SDL2/SDL_keyboard.h
-SDL_mouse.h
-C:/MinGW_libs/include/SDL2/SDL_mouse.h
-SDL_joystick.h
-C:/MinGW_libs/include/SDL2/SDL_joystick.h
-SDL_gamecontroller.h
-C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
-SDL_quit.h
-C:/MinGW_libs/include/SDL2/SDL_quit.h
-SDL_gesture.h
-C:/MinGW_libs/include/SDL2/SDL_gesture.h
-SDL_touch.h
-C:/MinGW_libs/include/SDL2/SDL_touch.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_filesystem.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_error.h
-C:/MinGW_libs/include/SDL2/SDL_error.h
-SDL_rwops.h
-C:/MinGW_libs/include/SDL2/SDL_rwops.h
-SDL_joystick.h
-C:/MinGW_libs/include/SDL2/SDL_joystick.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_gesture.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_error.h
-C:/MinGW_libs/include/SDL2/SDL_error.h
-SDL_video.h
-C:/MinGW_libs/include/SDL2/SDL_video.h
-SDL_touch.h
-C:/MinGW_libs/include/SDL2/SDL_touch.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_haptic.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_error.h
-C:/MinGW_libs/include/SDL2/SDL_error.h
-SDL_joystick.h
-C:/MinGW_libs/include/SDL2/SDL_joystick.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_hints.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_joystick.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_error.h
-C:/MinGW_libs/include/SDL2/SDL_error.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_keyboard.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_error.h
-C:/MinGW_libs/include/SDL2/SDL_error.h
-SDL_keycode.h
-C:/MinGW_libs/include/SDL2/SDL_keycode.h
-SDL_video.h
-C:/MinGW_libs/include/SDL2/SDL_video.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_keycode.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_scancode.h
-C:/MinGW_libs/include/SDL2/SDL_scancode.h
-
-C:/MinGW_libs/include/SDL2/SDL_loadso.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_error.h
-C:/MinGW_libs/include/SDL2/SDL_error.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_log.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_main.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_messagebox.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_video.h
-C:/MinGW_libs/include/SDL2/SDL_video.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_metal.h
-SDL_video.h
-C:/MinGW_libs/include/SDL2/SDL_video.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_mouse.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_error.h
-C:/MinGW_libs/include/SDL2/SDL_error.h
-SDL_video.h
-C:/MinGW_libs/include/SDL2/SDL_video.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_mutex.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_error.h
-C:/MinGW_libs/include/SDL2/SDL_error.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_pixels.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_endian.h
-C:/MinGW_libs/include/SDL2/SDL_endian.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_platform.h
-AvailabilityMacros.h
-C:/MinGW_libs/include/SDL2/AvailabilityMacros.h
-TargetConditionals.h
-C:/MinGW_libs/include/SDL2/TargetConditionals.h
-winapifamily.h
--
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_power.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_quit.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_error.h
-C:/MinGW_libs/include/SDL2/SDL_error.h
-
-C:/MinGW_libs/include/SDL2/SDL_rect.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_error.h
-C:/MinGW_libs/include/SDL2/SDL_error.h
-SDL_pixels.h
-C:/MinGW_libs/include/SDL2/SDL_pixels.h
-SDL_rwops.h
-C:/MinGW_libs/include/SDL2/SDL_rwops.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_render.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_rect.h
-C:/MinGW_libs/include/SDL2/SDL_rect.h
-SDL_video.h
-C:/MinGW_libs/include/SDL2/SDL_video.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_rwops.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_error.h
-C:/MinGW_libs/include/SDL2/SDL_error.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_scancode.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-
-C:/MinGW_libs/include/SDL2/SDL_sensor.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_error.h
-C:/MinGW_libs/include/SDL2/SDL_error.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_shape.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_pixels.h
-C:/MinGW_libs/include/SDL2/SDL_pixels.h
-SDL_rect.h
-C:/MinGW_libs/include/SDL2/SDL_rect.h
-SDL_surface.h
-C:/MinGW_libs/include/SDL2/SDL_surface.h
-SDL_video.h
-C:/MinGW_libs/include/SDL2/SDL_video.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_config.h
-C:/MinGW_libs/include/SDL2/SDL_config.h
-sys/types.h
--
-stdio.h
--
-stdlib.h
--
-stddef.h
--
-stdarg.h
--
-stdlib.h
--
-malloc.h
--
-stddef.h
--
-stdarg.h
--
-memory.h
--
-string.h
--
-strings.h
--
-wchar.h
--
-inttypes.h
--
-stdint.h
--
-ctype.h
--
-math.h
--
-float.h
--
-alloca.h
--
-malloc.h
--
-malloc.h
--
-malloc.h
--
-stdlib.h
--
-sal.h
--
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_surface.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_pixels.h
-C:/MinGW_libs/include/SDL2/SDL_pixels.h
-SDL_rect.h
-C:/MinGW_libs/include/SDL2/SDL_rect.h
-SDL_blendmode.h
-C:/MinGW_libs/include/SDL2/SDL_blendmode.h
-SDL_rwops.h
-C:/MinGW_libs/include/SDL2/SDL_rwops.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_system.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_keyboard.h
-C:/MinGW_libs/include/SDL2/SDL_keyboard.h
-SDL_render.h
-C:/MinGW_libs/include/SDL2/SDL_render.h
-SDL_video.h
-C:/MinGW_libs/include/SDL2/SDL_video.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_thread.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_error.h
-C:/MinGW_libs/include/SDL2/SDL_error.h
-SDL_atomic.h
-C:/MinGW_libs/include/SDL2/SDL_atomic.h
-SDL_mutex.h
-C:/MinGW_libs/include/SDL2/SDL_mutex.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-process.h
--
-process.h
--
-stdlib.h
--
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_timer.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_error.h
-C:/MinGW_libs/include/SDL2/SDL_error.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_touch.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_error.h
-C:/MinGW_libs/include/SDL2/SDL_error.h
-SDL_video.h
-C:/MinGW_libs/include/SDL2/SDL_video.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_version.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/SDL_video.h
-SDL_stdinc.h
-C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-SDL_pixels.h
-C:/MinGW_libs/include/SDL2/SDL_pixels.h
-SDL_rect.h
-C:/MinGW_libs/include/SDL2/SDL_rect.h
-SDL_surface.h
-C:/MinGW_libs/include/SDL2/SDL_surface.h
-begin_code.h
-C:/MinGW_libs/include/SDL2/begin_code.h
-close_code.h
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/MinGW_libs/include/SDL2/begin_code.h
-
-C:/MinGW_libs/include/SDL2/close_code.h
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/commands/commands.h
-iostream
--
-vector
--
-SDL2/SDL.h
--
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/action.h
-string
--
-vector
--
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/engine.h
-iostream
--
-string
--
-vector
--
-limits
--
-cmath
--
-../ground.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
-../gst.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
-action.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/action.h
-tactic.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/tactic.h
-generator.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/generator.h
-evaluator.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/evaluator.h
-performer.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/performer.h
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/evaluator.h
-iostream
--
-string
--
-vector
--
-../ground.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
-../gst.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/generator.h
-iostream
--
-string
--
-vector
--
-../ground.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
-../gst.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
-action.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/action.h
-tactic.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/tactic.h
-performer.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/performer.h
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/performer.h
-iostream
--
-string
--
-vector
--
-../ground.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
-../gst.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
-action.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/action.h
-tactic.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/tactic.h
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/tactic.h
-string
--
-vector
--
-action.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/action.h
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
-vector
--
-string
--
-iostream
--
-../umath/vec2.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
-entity.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
-iostream
--
-algorithm
--
-string
--
-vector
--
-functional
--
-random
--
-ground.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
-entity.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
-tile.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
-player.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/player.h
-tech.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/load.h
-gst.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/menu.h
-vector
--
-string
--
-../umath/vec2.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
-tech.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/player.h
-vector
--
-tech.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/playercontrol.h
-iostream
--
-gst.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
-view.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/view.h
-vector
--
-functional
--
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
-vector
--
-unordered_map
--
-string
--
-math.h
--
-iostream
--
-../umath/vec2.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
-vector
--
-string
--
-../umath/vec2.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/view.h
-vector
--
-functional
--
-gst.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
-menu.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/menu.h
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/graphics/cam.h
-vector
--
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/graphics/graphics.h
-vector
--
-string
--
-SDL2/SDL.h
--
-../game/gst.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
-../game/view.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/view.h
-cam.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/graphics/cam.h
-string
--
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/main.cpp
-iostream
--
-vector
--
-umath/vec2.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
-graphics/graphics.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/graphics/graphics.h
-commands/commands.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/commands/commands.h
-timing/timing.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/timing/timing.h
-game/entity.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
-game/ground.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
-game/playercontrol.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/playercontrol.h
-game/gst.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
-game/tile.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
-game/load.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/load.h
-game/ai/engine.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/engine.h
-game/ai/performer.h
-C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/performer.h
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/timing/timing.h
-SDL2/SDL.h
--
-
-C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
-
+#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">])
+
+#IncludeRegexScan: ^.*$
+
+#IncludeRegexComplain: ^$
+
+#IncludeRegexTransform:
+
+C:/MinGW_libs/include/SDL2/SDL.h
+SDL_main.h
+C:/MinGW_libs/include/SDL2/SDL_main.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_assert.h
+C:/MinGW_libs/include/SDL2/SDL_assert.h
+SDL_atomic.h
+C:/MinGW_libs/include/SDL2/SDL_atomic.h
+SDL_audio.h
+C:/MinGW_libs/include/SDL2/SDL_audio.h
+SDL_clipboard.h
+C:/MinGW_libs/include/SDL2/SDL_clipboard.h
+SDL_cpuinfo.h
+C:/MinGW_libs/include/SDL2/SDL_cpuinfo.h
+SDL_endian.h
+C:/MinGW_libs/include/SDL2/SDL_endian.h
+SDL_error.h
+C:/MinGW_libs/include/SDL2/SDL_error.h
+SDL_events.h
+C:/MinGW_libs/include/SDL2/SDL_events.h
+SDL_filesystem.h
+C:/MinGW_libs/include/SDL2/SDL_filesystem.h
+SDL_gamecontroller.h
+C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
+SDL_haptic.h
+C:/MinGW_libs/include/SDL2/SDL_haptic.h
+SDL_hints.h
+C:/MinGW_libs/include/SDL2/SDL_hints.h
+SDL_joystick.h
+C:/MinGW_libs/include/SDL2/SDL_joystick.h
+SDL_loadso.h
+C:/MinGW_libs/include/SDL2/SDL_loadso.h
+SDL_log.h
+C:/MinGW_libs/include/SDL2/SDL_log.h
+SDL_messagebox.h
+C:/MinGW_libs/include/SDL2/SDL_messagebox.h
+SDL_metal.h
+C:/MinGW_libs/include/SDL2/SDL_metal.h
+SDL_mutex.h
+C:/MinGW_libs/include/SDL2/SDL_mutex.h
+SDL_power.h
+C:/MinGW_libs/include/SDL2/SDL_power.h
+SDL_render.h
+C:/MinGW_libs/include/SDL2/SDL_render.h
+SDL_rwops.h
+C:/MinGW_libs/include/SDL2/SDL_rwops.h
+SDL_sensor.h
+C:/MinGW_libs/include/SDL2/SDL_sensor.h
+SDL_shape.h
+C:/MinGW_libs/include/SDL2/SDL_shape.h
+SDL_system.h
+C:/MinGW_libs/include/SDL2/SDL_system.h
+SDL_thread.h
+C:/MinGW_libs/include/SDL2/SDL_thread.h
+SDL_timer.h
+C:/MinGW_libs/include/SDL2/SDL_timer.h
+SDL_version.h
+C:/MinGW_libs/include/SDL2/SDL_version.h
+SDL_video.h
+C:/MinGW_libs/include/SDL2/SDL_video.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_assert.h
+SDL_config.h
+C:/MinGW_libs/include/SDL2/SDL_config.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+signal.h
+-
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_atomic.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_platform.h
+C:/MinGW_libs/include/SDL2/SDL_platform.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+sys/cpuinline.h
+-
+mbarrier.h
+-
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_audio.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_error.h
+C:/MinGW_libs/include/SDL2/SDL_error.h
+SDL_endian.h
+C:/MinGW_libs/include/SDL2/SDL_endian.h
+SDL_mutex.h
+C:/MinGW_libs/include/SDL2/SDL_mutex.h
+SDL_thread.h
+C:/MinGW_libs/include/SDL2/SDL_thread.h
+SDL_rwops.h
+C:/MinGW_libs/include/SDL2/SDL_rwops.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_blendmode.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_clipboard.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_config.h
+SDL_platform.h
+C:/MinGW_libs/include/SDL2/SDL_platform.h
+
+C:/MinGW_libs/include/SDL2/SDL_cpuinfo.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+intrin.h
+-
+intrin.h
+-
+altivec.h
+-
+arm_neon.h
+-
+armintr.h
+-
+arm_neon.h
+-
+arm64intr.h
+-
+arm64_neon.h
+-
+mm3dnow.h
+-
+immintrin.h
+-
+mmintrin.h
+-
+xmmintrin.h
+-
+emmintrin.h
+-
+pmmintrin.h
+-
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_endian.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+endian.h
+-
+endian.h
+-
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_error.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_events.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_error.h
+C:/MinGW_libs/include/SDL2/SDL_error.h
+SDL_video.h
+C:/MinGW_libs/include/SDL2/SDL_video.h
+SDL_keyboard.h
+C:/MinGW_libs/include/SDL2/SDL_keyboard.h
+SDL_mouse.h
+C:/MinGW_libs/include/SDL2/SDL_mouse.h
+SDL_joystick.h
+C:/MinGW_libs/include/SDL2/SDL_joystick.h
+SDL_gamecontroller.h
+C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
+SDL_quit.h
+C:/MinGW_libs/include/SDL2/SDL_quit.h
+SDL_gesture.h
+C:/MinGW_libs/include/SDL2/SDL_gesture.h
+SDL_touch.h
+C:/MinGW_libs/include/SDL2/SDL_touch.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_filesystem.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_error.h
+C:/MinGW_libs/include/SDL2/SDL_error.h
+SDL_rwops.h
+C:/MinGW_libs/include/SDL2/SDL_rwops.h
+SDL_joystick.h
+C:/MinGW_libs/include/SDL2/SDL_joystick.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_gesture.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_error.h
+C:/MinGW_libs/include/SDL2/SDL_error.h
+SDL_video.h
+C:/MinGW_libs/include/SDL2/SDL_video.h
+SDL_touch.h
+C:/MinGW_libs/include/SDL2/SDL_touch.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_haptic.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_error.h
+C:/MinGW_libs/include/SDL2/SDL_error.h
+SDL_joystick.h
+C:/MinGW_libs/include/SDL2/SDL_joystick.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_hints.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_joystick.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_error.h
+C:/MinGW_libs/include/SDL2/SDL_error.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_keyboard.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_error.h
+C:/MinGW_libs/include/SDL2/SDL_error.h
+SDL_keycode.h
+C:/MinGW_libs/include/SDL2/SDL_keycode.h
+SDL_video.h
+C:/MinGW_libs/include/SDL2/SDL_video.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_keycode.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_scancode.h
+C:/MinGW_libs/include/SDL2/SDL_scancode.h
+
+C:/MinGW_libs/include/SDL2/SDL_loadso.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_error.h
+C:/MinGW_libs/include/SDL2/SDL_error.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_log.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_main.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_messagebox.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_video.h
+C:/MinGW_libs/include/SDL2/SDL_video.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_metal.h
+SDL_video.h
+C:/MinGW_libs/include/SDL2/SDL_video.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_mouse.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_error.h
+C:/MinGW_libs/include/SDL2/SDL_error.h
+SDL_video.h
+C:/MinGW_libs/include/SDL2/SDL_video.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_mutex.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_error.h
+C:/MinGW_libs/include/SDL2/SDL_error.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_pixels.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_endian.h
+C:/MinGW_libs/include/SDL2/SDL_endian.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_platform.h
+AvailabilityMacros.h
+C:/MinGW_libs/include/SDL2/AvailabilityMacros.h
+TargetConditionals.h
+C:/MinGW_libs/include/SDL2/TargetConditionals.h
+winapifamily.h
+-
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_power.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_quit.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_error.h
+C:/MinGW_libs/include/SDL2/SDL_error.h
+
+C:/MinGW_libs/include/SDL2/SDL_rect.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_error.h
+C:/MinGW_libs/include/SDL2/SDL_error.h
+SDL_pixels.h
+C:/MinGW_libs/include/SDL2/SDL_pixels.h
+SDL_rwops.h
+C:/MinGW_libs/include/SDL2/SDL_rwops.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_render.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_rect.h
+C:/MinGW_libs/include/SDL2/SDL_rect.h
+SDL_video.h
+C:/MinGW_libs/include/SDL2/SDL_video.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_rwops.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_error.h
+C:/MinGW_libs/include/SDL2/SDL_error.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_scancode.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+
+C:/MinGW_libs/include/SDL2/SDL_sensor.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_error.h
+C:/MinGW_libs/include/SDL2/SDL_error.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_shape.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_pixels.h
+C:/MinGW_libs/include/SDL2/SDL_pixels.h
+SDL_rect.h
+C:/MinGW_libs/include/SDL2/SDL_rect.h
+SDL_surface.h
+C:/MinGW_libs/include/SDL2/SDL_surface.h
+SDL_video.h
+C:/MinGW_libs/include/SDL2/SDL_video.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_config.h
+C:/MinGW_libs/include/SDL2/SDL_config.h
+sys/types.h
+-
+stdio.h
+-
+stdlib.h
+-
+stddef.h
+-
+stdarg.h
+-
+stdlib.h
+-
+malloc.h
+-
+stddef.h
+-
+stdarg.h
+-
+memory.h
+-
+string.h
+-
+strings.h
+-
+wchar.h
+-
+inttypes.h
+-
+stdint.h
+-
+ctype.h
+-
+math.h
+-
+float.h
+-
+alloca.h
+-
+malloc.h
+-
+malloc.h
+-
+malloc.h
+-
+stdlib.h
+-
+sal.h
+-
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_surface.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_pixels.h
+C:/MinGW_libs/include/SDL2/SDL_pixels.h
+SDL_rect.h
+C:/MinGW_libs/include/SDL2/SDL_rect.h
+SDL_blendmode.h
+C:/MinGW_libs/include/SDL2/SDL_blendmode.h
+SDL_rwops.h
+C:/MinGW_libs/include/SDL2/SDL_rwops.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_system.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_keyboard.h
+C:/MinGW_libs/include/SDL2/SDL_keyboard.h
+SDL_render.h
+C:/MinGW_libs/include/SDL2/SDL_render.h
+SDL_video.h
+C:/MinGW_libs/include/SDL2/SDL_video.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_thread.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_error.h
+C:/MinGW_libs/include/SDL2/SDL_error.h
+SDL_atomic.h
+C:/MinGW_libs/include/SDL2/SDL_atomic.h
+SDL_mutex.h
+C:/MinGW_libs/include/SDL2/SDL_mutex.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+process.h
+-
+process.h
+-
+stdlib.h
+-
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_timer.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_error.h
+C:/MinGW_libs/include/SDL2/SDL_error.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_touch.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_error.h
+C:/MinGW_libs/include/SDL2/SDL_error.h
+SDL_video.h
+C:/MinGW_libs/include/SDL2/SDL_video.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_version.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/SDL_video.h
+SDL_stdinc.h
+C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+SDL_pixels.h
+C:/MinGW_libs/include/SDL2/SDL_pixels.h
+SDL_rect.h
+C:/MinGW_libs/include/SDL2/SDL_rect.h
+SDL_surface.h
+C:/MinGW_libs/include/SDL2/SDL_surface.h
+begin_code.h
+C:/MinGW_libs/include/SDL2/begin_code.h
+close_code.h
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/MinGW_libs/include/SDL2/begin_code.h
+
+C:/MinGW_libs/include/SDL2/close_code.h
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/commands/commands.h
+iostream
+-
+vector
+-
+SDL2/SDL.h
+-
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/action.h
+string
+-
+vector
+-
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/engine.h
+iostream
+-
+string
+-
+vector
+-
+limits
+-
+cmath
+-
+../ground.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
+../gst.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
+action.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/action.h
+tactic.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/tactic.h
+generator.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/generator.h
+evaluator.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/evaluator.h
+performer.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/performer.h
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/evaluator.h
+iostream
+-
+string
+-
+vector
+-
+../ground.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
+../gst.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/generator.h
+iostream
+-
+string
+-
+vector
+-
+../ground.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
+../gst.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
+action.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/action.h
+tactic.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/tactic.h
+performer.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/performer.h
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/performer.h
+iostream
+-
+string
+-
+vector
+-
+../ground.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
+../gst.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
+action.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/action.h
+tactic.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/tactic.h
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/tactic.h
+string
+-
+vector
+-
+action.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/action.h
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
+vector
+-
+string
+-
+iostream
+-
+../umath/vec2.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
+entity.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
+iostream
+-
+algorithm
+-
+string
+-
+vector
+-
+functional
+-
+random
+-
+ground.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
+entity.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
+tile.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
+player.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/player.h
+tech.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/load.h
+gst.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/menu.h
+vector
+-
+string
+-
+../umath/vec2.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
+tech.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/player.h
+vector
+-
+tech.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/playercontrol.h
+iostream
+-
+gst.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
+view.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/view.h
+vector
+-
+functional
+-
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
+vector
+-
+unordered_map
+-
+string
+-
+math.h
+-
+iostream
+-
+../umath/vec2.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
+vector
+-
+string
+-
+../umath/vec2.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/view.h
+vector
+-
+functional
+-
+gst.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
+menu.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/menu.h
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/graphics/cam.h
+vector
+-
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/graphics/graphics.h
+vector
+-
+string
+-
+SDL2/SDL.h
+-
+../game/gst.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
+../game/view.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/view.h
+cam.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/graphics/cam.h
+string
+-
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/main.cpp
+iostream
+-
+vector
+-
+umath/vec2.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
+graphics/graphics.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/graphics/graphics.h
+commands/commands.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/commands/commands.h
+timing/timing.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/timing/timing.h
+game/entity.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
+game/ground.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
+game/playercontrol.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/playercontrol.h
+game/gst.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
+game/tile.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
+game/load.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/load.h
+game/ai/engine.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/engine.h
+game/ai/performer.h
+C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/performer.h
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/timing/timing.h
+SDL2/SDL.h
+-
+
+C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
+
diff --git a/CMakeFiles/sdl_test.dir/DependInfo.cmake b/CMakeFiles/sdl_test.dir/DependInfo.cmake
index 47792b8..7f11140 100644
--- a/CMakeFiles/sdl_test.dir/DependInfo.cmake
+++ b/CMakeFiles/sdl_test.dir/DependInfo.cmake
@@ -1,34 +1,34 @@
-# The set of languages for which implicit dependencies are needed:
-set(CMAKE_DEPENDS_LANGUAGES
- "CXX"
- )
-# The set of files for implicit dependencies of each language:
-set(CMAKE_DEPENDS_CHECK_CXX
- "C:/Users/jaksk/Desktop/dev/_cpp/age/commands/commands.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/commands/commands.cpp.obj"
- "C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/action.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj"
- "C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/game/entity.cpp.obj"
- "C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/game/ground.cpp.obj"
- "C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/game/gst.cpp.obj"
- "C:/Users/jaksk/Desktop/dev/_cpp/age/game/load.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/game/load.cpp.obj"
- "C:/Users/jaksk/Desktop/dev/_cpp/age/game/menu.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/game/menu.cpp.obj"
- "C:/Users/jaksk/Desktop/dev/_cpp/age/game/playercontrol.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj"
- "C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/game/tech.cpp.obj"
- "C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/game/tile.cpp.obj"
- "C:/Users/jaksk/Desktop/dev/_cpp/age/game/view.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/game/view.cpp.obj"
- "C:/Users/jaksk/Desktop/dev/_cpp/age/graphics/graphics.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj"
- "C:/Users/jaksk/Desktop/dev/_cpp/age/main.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/main.cpp.obj"
- "C:/Users/jaksk/Desktop/dev/_cpp/age/timing/timing.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/timing/timing.cpp.obj"
- )
-set(CMAKE_CXX_COMPILER_ID "GNU")
-
-# The include file search paths:
-set(CMAKE_CXX_TARGET_INCLUDE_PATH
- "C:/MinGW_libs/include"
- )
-
-# Targets to which this target links.
-set(CMAKE_TARGET_LINKED_INFO_FILES
- )
-
-# Fortran module output directory.
-set(CMAKE_Fortran_TARGET_MODULE_DIR "")
+# The set of languages for which implicit dependencies are needed:
+set(CMAKE_DEPENDS_LANGUAGES
+ "CXX"
+ )
+# The set of files for implicit dependencies of each language:
+set(CMAKE_DEPENDS_CHECK_CXX
+ "C:/Users/jaksk/Desktop/dev/_cpp/age/commands/commands.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/commands/commands.cpp.obj"
+ "C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/action.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj"
+ "C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/game/entity.cpp.obj"
+ "C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/game/ground.cpp.obj"
+ "C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/game/gst.cpp.obj"
+ "C:/Users/jaksk/Desktop/dev/_cpp/age/game/load.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/game/load.cpp.obj"
+ "C:/Users/jaksk/Desktop/dev/_cpp/age/game/menu.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/game/menu.cpp.obj"
+ "C:/Users/jaksk/Desktop/dev/_cpp/age/game/playercontrol.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj"
+ "C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/game/tech.cpp.obj"
+ "C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/game/tile.cpp.obj"
+ "C:/Users/jaksk/Desktop/dev/_cpp/age/game/view.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/game/view.cpp.obj"
+ "C:/Users/jaksk/Desktop/dev/_cpp/age/graphics/graphics.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj"
+ "C:/Users/jaksk/Desktop/dev/_cpp/age/main.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/main.cpp.obj"
+ "C:/Users/jaksk/Desktop/dev/_cpp/age/timing/timing.cpp" "C:/Users/jaksk/Desktop/dev/_cpp/age/CMakeFiles/sdl_test.dir/timing/timing.cpp.obj"
+ )
+set(CMAKE_CXX_COMPILER_ID "GNU")
+
+# The include file search paths:
+set(CMAKE_CXX_TARGET_INCLUDE_PATH
+ "C:/MinGW_libs/include"
+ )
+
+# Targets to which this target links.
+set(CMAKE_TARGET_LINKED_INFO_FILES
+ )
+
+# Fortran module output directory.
+set(CMAKE_Fortran_TARGET_MODULE_DIR "")
diff --git a/CMakeFiles/sdl_test.dir/build.make b/CMakeFiles/sdl_test.dir/build.make
index 0fee87f..b82fea1 100644
--- a/CMakeFiles/sdl_test.dir/build.make
+++ b/CMakeFiles/sdl_test.dir/build.make
@@ -1,327 +1,327 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "MinGW Makefiles" Generator, CMake Version 3.18
-
-# Delete rule output on recipe failure.
-.DELETE_ON_ERROR:
-
-
-#=============================================================================
-# Special targets provided by cmake.
-
-# Disable implicit rules so canonical targets will work.
-.SUFFIXES:
-
-
-# Disable VCS-based implicit rules.
-% : %,v
-
-
-# Disable VCS-based implicit rules.
-% : RCS/%
-
-
-# Disable VCS-based implicit rules.
-% : RCS/%,v
-
-
-# Disable VCS-based implicit rules.
-% : SCCS/s.%
-
-
-# Disable VCS-based implicit rules.
-% : s.%
-
-
-.SUFFIXES: .hpux_make_needs_suffix_list
-
-
-# Command-line flag to silence nested $(MAKE).
-$(VERBOSE)MAKESILENT = -s
-
-#Suppress display of executed commands.
-$(VERBOSE).SILENT:
-
-# A target that is always out of date.
-cmake_force:
-
-.PHONY : cmake_force
-
-#=============================================================================
-# Set environment variables for the build.
-
-SHELL = cmd.exe
-
-# The CMake executable.
-CMAKE_COMMAND = "C:\Program Files\CMake\bin\cmake.exe"
-
-# The command to remove a file.
-RM = "C:\Program Files\CMake\bin\cmake.exe" -E rm -f
-
-# Escaping for special characters.
-EQUALS = =
-
-# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = C:\Users\jaksk\Desktop\dev\_cpp\age
-
-# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = C:\Users\jaksk\Desktop\dev\_cpp\age
-
-# Include any dependencies generated for this target.
-include CMakeFiles/sdl_test.dir/depend.make
-
-# Include the progress variables for this target.
-include CMakeFiles/sdl_test.dir/progress.make
-
-# Include the compile flags for this target's objects.
-include CMakeFiles/sdl_test.dir/flags.make
-
-CMakeFiles/sdl_test.dir/main.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
-CMakeFiles/sdl_test.dir/main.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
-CMakeFiles/sdl_test.dir/main.cpp.obj: main.cpp
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/sdl_test.dir/main.cpp.obj"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\main.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\main.cpp
-
-CMakeFiles/sdl_test.dir/main.cpp.i: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/main.cpp.i"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\main.cpp > CMakeFiles\sdl_test.dir\main.cpp.i
-
-CMakeFiles/sdl_test.dir/main.cpp.s: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/main.cpp.s"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\main.cpp -o CMakeFiles\sdl_test.dir\main.cpp.s
-
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: graphics/graphics.cpp
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\graphics\graphics.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\graphics\graphics.cpp
-
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.i: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/graphics/graphics.cpp.i"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\graphics\graphics.cpp > CMakeFiles\sdl_test.dir\graphics\graphics.cpp.i
-
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.s: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/graphics/graphics.cpp.s"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\graphics\graphics.cpp -o CMakeFiles\sdl_test.dir\graphics\graphics.cpp.s
-
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: commands/commands.cpp
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/sdl_test.dir/commands/commands.cpp.obj"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\commands\commands.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\commands\commands.cpp
-
-CMakeFiles/sdl_test.dir/commands/commands.cpp.i: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/commands/commands.cpp.i"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\commands\commands.cpp > CMakeFiles\sdl_test.dir\commands\commands.cpp.i
-
-CMakeFiles/sdl_test.dir/commands/commands.cpp.s: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/commands/commands.cpp.s"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\commands\commands.cpp -o CMakeFiles\sdl_test.dir\commands\commands.cpp.s
-
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: timing/timing.cpp
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object CMakeFiles/sdl_test.dir/timing/timing.cpp.obj"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\timing\timing.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\timing\timing.cpp
-
-CMakeFiles/sdl_test.dir/timing/timing.cpp.i: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/timing/timing.cpp.i"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\timing\timing.cpp > CMakeFiles\sdl_test.dir\timing\timing.cpp.i
-
-CMakeFiles/sdl_test.dir/timing/timing.cpp.s: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/timing/timing.cpp.s"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\timing\timing.cpp -o CMakeFiles\sdl_test.dir\timing\timing.cpp.s
-
-CMakeFiles/sdl_test.dir/game/entity.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
-CMakeFiles/sdl_test.dir/game/entity.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
-CMakeFiles/sdl_test.dir/game/entity.cpp.obj: game/entity.cpp
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object CMakeFiles/sdl_test.dir/game/entity.cpp.obj"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\game\entity.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\game\entity.cpp
-
-CMakeFiles/sdl_test.dir/game/entity.cpp.i: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/game/entity.cpp.i"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\game\entity.cpp > CMakeFiles\sdl_test.dir\game\entity.cpp.i
-
-CMakeFiles/sdl_test.dir/game/entity.cpp.s: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/game/entity.cpp.s"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\game\entity.cpp -o CMakeFiles\sdl_test.dir\game\entity.cpp.s
-
-CMakeFiles/sdl_test.dir/game/ground.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
-CMakeFiles/sdl_test.dir/game/ground.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
-CMakeFiles/sdl_test.dir/game/ground.cpp.obj: game/ground.cpp
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building CXX object CMakeFiles/sdl_test.dir/game/ground.cpp.obj"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\game\ground.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\game\ground.cpp
-
-CMakeFiles/sdl_test.dir/game/ground.cpp.i: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/game/ground.cpp.i"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\game\ground.cpp > CMakeFiles\sdl_test.dir\game\ground.cpp.i
-
-CMakeFiles/sdl_test.dir/game/ground.cpp.s: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/game/ground.cpp.s"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\game\ground.cpp -o CMakeFiles\sdl_test.dir\game\ground.cpp.s
-
-CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
-CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
-CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/playercontrol.cpp
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building CXX object CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\game\playercontrol.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\game\playercontrol.cpp
-
-CMakeFiles/sdl_test.dir/game/playercontrol.cpp.i: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/game/playercontrol.cpp.i"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\game\playercontrol.cpp > CMakeFiles\sdl_test.dir\game\playercontrol.cpp.i
-
-CMakeFiles/sdl_test.dir/game/playercontrol.cpp.s: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/game/playercontrol.cpp.s"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\game\playercontrol.cpp -o CMakeFiles\sdl_test.dir\game\playercontrol.cpp.s
-
-CMakeFiles/sdl_test.dir/game/gst.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
-CMakeFiles/sdl_test.dir/game/gst.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
-CMakeFiles/sdl_test.dir/game/gst.cpp.obj: game/gst.cpp
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building CXX object CMakeFiles/sdl_test.dir/game/gst.cpp.obj"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\game\gst.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\game\gst.cpp
-
-CMakeFiles/sdl_test.dir/game/gst.cpp.i: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/game/gst.cpp.i"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\game\gst.cpp > CMakeFiles\sdl_test.dir\game\gst.cpp.i
-
-CMakeFiles/sdl_test.dir/game/gst.cpp.s: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/game/gst.cpp.s"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\game\gst.cpp -o CMakeFiles\sdl_test.dir\game\gst.cpp.s
-
-CMakeFiles/sdl_test.dir/game/view.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
-CMakeFiles/sdl_test.dir/game/view.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
-CMakeFiles/sdl_test.dir/game/view.cpp.obj: game/view.cpp
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Building CXX object CMakeFiles/sdl_test.dir/game/view.cpp.obj"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\game\view.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\game\view.cpp
-
-CMakeFiles/sdl_test.dir/game/view.cpp.i: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/game/view.cpp.i"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\game\view.cpp > CMakeFiles\sdl_test.dir\game\view.cpp.i
-
-CMakeFiles/sdl_test.dir/game/view.cpp.s: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/game/view.cpp.s"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\game\view.cpp -o CMakeFiles\sdl_test.dir\game\view.cpp.s
-
-CMakeFiles/sdl_test.dir/game/menu.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
-CMakeFiles/sdl_test.dir/game/menu.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
-CMakeFiles/sdl_test.dir/game/menu.cpp.obj: game/menu.cpp
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Building CXX object CMakeFiles/sdl_test.dir/game/menu.cpp.obj"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\game\menu.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\game\menu.cpp
-
-CMakeFiles/sdl_test.dir/game/menu.cpp.i: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/game/menu.cpp.i"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\game\menu.cpp > CMakeFiles\sdl_test.dir\game\menu.cpp.i
-
-CMakeFiles/sdl_test.dir/game/menu.cpp.s: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/game/menu.cpp.s"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\game\menu.cpp -o CMakeFiles\sdl_test.dir\game\menu.cpp.s
-
-CMakeFiles/sdl_test.dir/game/tile.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
-CMakeFiles/sdl_test.dir/game/tile.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
-CMakeFiles/sdl_test.dir/game/tile.cpp.obj: game/tile.cpp
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_11) "Building CXX object CMakeFiles/sdl_test.dir/game/tile.cpp.obj"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\game\tile.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\game\tile.cpp
-
-CMakeFiles/sdl_test.dir/game/tile.cpp.i: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/game/tile.cpp.i"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\game\tile.cpp > CMakeFiles\sdl_test.dir\game\tile.cpp.i
-
-CMakeFiles/sdl_test.dir/game/tile.cpp.s: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/game/tile.cpp.s"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\game\tile.cpp -o CMakeFiles\sdl_test.dir\game\tile.cpp.s
-
-CMakeFiles/sdl_test.dir/game/load.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
-CMakeFiles/sdl_test.dir/game/load.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
-CMakeFiles/sdl_test.dir/game/load.cpp.obj: game/load.cpp
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_12) "Building CXX object CMakeFiles/sdl_test.dir/game/load.cpp.obj"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\game\load.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\game\load.cpp
-
-CMakeFiles/sdl_test.dir/game/load.cpp.i: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/game/load.cpp.i"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\game\load.cpp > CMakeFiles\sdl_test.dir\game\load.cpp.i
-
-CMakeFiles/sdl_test.dir/game/load.cpp.s: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/game/load.cpp.s"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\game\load.cpp -o CMakeFiles\sdl_test.dir\game\load.cpp.s
-
-CMakeFiles/sdl_test.dir/game/tech.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
-CMakeFiles/sdl_test.dir/game/tech.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
-CMakeFiles/sdl_test.dir/game/tech.cpp.obj: game/tech.cpp
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_13) "Building CXX object CMakeFiles/sdl_test.dir/game/tech.cpp.obj"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\game\tech.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\game\tech.cpp
-
-CMakeFiles/sdl_test.dir/game/tech.cpp.i: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/game/tech.cpp.i"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\game\tech.cpp > CMakeFiles\sdl_test.dir\game\tech.cpp.i
-
-CMakeFiles/sdl_test.dir/game/tech.cpp.s: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/game/tech.cpp.s"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\game\tech.cpp -o CMakeFiles\sdl_test.dir\game\tech.cpp.s
-
-CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
-CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
-CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj: game/ai/action.cpp
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_14) "Building CXX object CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\game\ai\action.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\game\ai\action.cpp
-
-CMakeFiles/sdl_test.dir/game/ai/action.cpp.i: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/game/ai/action.cpp.i"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\game\ai\action.cpp > CMakeFiles\sdl_test.dir\game\ai\action.cpp.i
-
-CMakeFiles/sdl_test.dir/game/ai/action.cpp.s: cmake_force
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/game/ai/action.cpp.s"
- C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\game\ai\action.cpp -o CMakeFiles\sdl_test.dir\game\ai\action.cpp.s
-
-# Object files for target sdl_test
-sdl_test_OBJECTS = \
-"CMakeFiles/sdl_test.dir/main.cpp.obj" \
-"CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj" \
-"CMakeFiles/sdl_test.dir/commands/commands.cpp.obj" \
-"CMakeFiles/sdl_test.dir/timing/timing.cpp.obj" \
-"CMakeFiles/sdl_test.dir/game/entity.cpp.obj" \
-"CMakeFiles/sdl_test.dir/game/ground.cpp.obj" \
-"CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj" \
-"CMakeFiles/sdl_test.dir/game/gst.cpp.obj" \
-"CMakeFiles/sdl_test.dir/game/view.cpp.obj" \
-"CMakeFiles/sdl_test.dir/game/menu.cpp.obj" \
-"CMakeFiles/sdl_test.dir/game/tile.cpp.obj" \
-"CMakeFiles/sdl_test.dir/game/load.cpp.obj" \
-"CMakeFiles/sdl_test.dir/game/tech.cpp.obj" \
-"CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj"
-
-# External object files for target sdl_test
-sdl_test_EXTERNAL_OBJECTS =
-
-build/sdl_test.exe: CMakeFiles/sdl_test.dir/main.cpp.obj
-build/sdl_test.exe: CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj
-build/sdl_test.exe: CMakeFiles/sdl_test.dir/commands/commands.cpp.obj
-build/sdl_test.exe: CMakeFiles/sdl_test.dir/timing/timing.cpp.obj
-build/sdl_test.exe: CMakeFiles/sdl_test.dir/game/entity.cpp.obj
-build/sdl_test.exe: CMakeFiles/sdl_test.dir/game/ground.cpp.obj
-build/sdl_test.exe: CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj
-build/sdl_test.exe: CMakeFiles/sdl_test.dir/game/gst.cpp.obj
-build/sdl_test.exe: CMakeFiles/sdl_test.dir/game/view.cpp.obj
-build/sdl_test.exe: CMakeFiles/sdl_test.dir/game/menu.cpp.obj
-build/sdl_test.exe: CMakeFiles/sdl_test.dir/game/tile.cpp.obj
-build/sdl_test.exe: CMakeFiles/sdl_test.dir/game/load.cpp.obj
-build/sdl_test.exe: CMakeFiles/sdl_test.dir/game/tech.cpp.obj
-build/sdl_test.exe: CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj
-build/sdl_test.exe: CMakeFiles/sdl_test.dir/build.make
-build/sdl_test.exe: CMakeFiles/sdl_test.dir/linklibs.rsp
-build/sdl_test.exe: CMakeFiles/sdl_test.dir/objects1.rsp
-build/sdl_test.exe: CMakeFiles/sdl_test.dir/link.txt
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_15) "Linking CXX executable build\sdl_test.exe"
- $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles\sdl_test.dir\link.txt --verbose=$(VERBOSE)
-
-# Rule to build all files generated by this target.
-CMakeFiles/sdl_test.dir/build: build/sdl_test.exe
-
-.PHONY : CMakeFiles/sdl_test.dir/build
-
-CMakeFiles/sdl_test.dir/clean:
- $(CMAKE_COMMAND) -P CMakeFiles\sdl_test.dir\cmake_clean.cmake
-.PHONY : CMakeFiles/sdl_test.dir/clean
-
-CMakeFiles/sdl_test.dir/depend:
- $(CMAKE_COMMAND) -E cmake_depends "MinGW Makefiles" C:\Users\jaksk\Desktop\dev\_cpp\age C:\Users\jaksk\Desktop\dev\_cpp\age C:\Users\jaksk\Desktop\dev\_cpp\age C:\Users\jaksk\Desktop\dev\_cpp\age C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles\sdl_test.dir\DependInfo.cmake --color=$(COLOR)
-.PHONY : CMakeFiles/sdl_test.dir/depend
-
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "MinGW Makefiles" Generator, CMake Version 3.18
+
+# Delete rule output on recipe failure.
+.DELETE_ON_ERROR:
+
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+
+# Disable VCS-based implicit rules.
+% : %,v
+
+
+# Disable VCS-based implicit rules.
+% : RCS/%
+
+
+# Disable VCS-based implicit rules.
+% : RCS/%,v
+
+
+# Disable VCS-based implicit rules.
+% : SCCS/s.%
+
+
+# Disable VCS-based implicit rules.
+% : s.%
+
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+
+# Command-line flag to silence nested $(MAKE).
+$(VERBOSE)MAKESILENT = -s
+
+#Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+# A target that is always out of date.
+cmake_force:
+
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+SHELL = cmd.exe
+
+# The CMake executable.
+CMAKE_COMMAND = "C:\Program Files\CMake\bin\cmake.exe"
+
+# The command to remove a file.
+RM = "C:\Program Files\CMake\bin\cmake.exe" -E rm -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = C:\Users\jaksk\Desktop\dev\_cpp\age
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = C:\Users\jaksk\Desktop\dev\_cpp\age
+
+# Include any dependencies generated for this target.
+include CMakeFiles/sdl_test.dir/depend.make
+
+# Include the progress variables for this target.
+include CMakeFiles/sdl_test.dir/progress.make
+
+# Include the compile flags for this target's objects.
+include CMakeFiles/sdl_test.dir/flags.make
+
+CMakeFiles/sdl_test.dir/main.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
+CMakeFiles/sdl_test.dir/main.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
+CMakeFiles/sdl_test.dir/main.cpp.obj: main.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/sdl_test.dir/main.cpp.obj"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\main.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\main.cpp
+
+CMakeFiles/sdl_test.dir/main.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/main.cpp.i"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\main.cpp > CMakeFiles\sdl_test.dir\main.cpp.i
+
+CMakeFiles/sdl_test.dir/main.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/main.cpp.s"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\main.cpp -o CMakeFiles\sdl_test.dir\main.cpp.s
+
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: graphics/graphics.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\graphics\graphics.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\graphics\graphics.cpp
+
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/graphics/graphics.cpp.i"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\graphics\graphics.cpp > CMakeFiles\sdl_test.dir\graphics\graphics.cpp.i
+
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/graphics/graphics.cpp.s"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\graphics\graphics.cpp -o CMakeFiles\sdl_test.dir\graphics\graphics.cpp.s
+
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: commands/commands.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/sdl_test.dir/commands/commands.cpp.obj"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\commands\commands.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\commands\commands.cpp
+
+CMakeFiles/sdl_test.dir/commands/commands.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/commands/commands.cpp.i"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\commands\commands.cpp > CMakeFiles\sdl_test.dir\commands\commands.cpp.i
+
+CMakeFiles/sdl_test.dir/commands/commands.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/commands/commands.cpp.s"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\commands\commands.cpp -o CMakeFiles\sdl_test.dir\commands\commands.cpp.s
+
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: timing/timing.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object CMakeFiles/sdl_test.dir/timing/timing.cpp.obj"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\timing\timing.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\timing\timing.cpp
+
+CMakeFiles/sdl_test.dir/timing/timing.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/timing/timing.cpp.i"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\timing\timing.cpp > CMakeFiles\sdl_test.dir\timing\timing.cpp.i
+
+CMakeFiles/sdl_test.dir/timing/timing.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/timing/timing.cpp.s"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\timing\timing.cpp -o CMakeFiles\sdl_test.dir\timing\timing.cpp.s
+
+CMakeFiles/sdl_test.dir/game/entity.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
+CMakeFiles/sdl_test.dir/game/entity.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
+CMakeFiles/sdl_test.dir/game/entity.cpp.obj: game/entity.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object CMakeFiles/sdl_test.dir/game/entity.cpp.obj"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\game\entity.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\game\entity.cpp
+
+CMakeFiles/sdl_test.dir/game/entity.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/game/entity.cpp.i"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\game\entity.cpp > CMakeFiles\sdl_test.dir\game\entity.cpp.i
+
+CMakeFiles/sdl_test.dir/game/entity.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/game/entity.cpp.s"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\game\entity.cpp -o CMakeFiles\sdl_test.dir\game\entity.cpp.s
+
+CMakeFiles/sdl_test.dir/game/ground.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
+CMakeFiles/sdl_test.dir/game/ground.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
+CMakeFiles/sdl_test.dir/game/ground.cpp.obj: game/ground.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building CXX object CMakeFiles/sdl_test.dir/game/ground.cpp.obj"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\game\ground.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\game\ground.cpp
+
+CMakeFiles/sdl_test.dir/game/ground.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/game/ground.cpp.i"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\game\ground.cpp > CMakeFiles\sdl_test.dir\game\ground.cpp.i
+
+CMakeFiles/sdl_test.dir/game/ground.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/game/ground.cpp.s"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\game\ground.cpp -o CMakeFiles\sdl_test.dir\game\ground.cpp.s
+
+CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
+CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
+CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/playercontrol.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building CXX object CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\game\playercontrol.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\game\playercontrol.cpp
+
+CMakeFiles/sdl_test.dir/game/playercontrol.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/game/playercontrol.cpp.i"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\game\playercontrol.cpp > CMakeFiles\sdl_test.dir\game\playercontrol.cpp.i
+
+CMakeFiles/sdl_test.dir/game/playercontrol.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/game/playercontrol.cpp.s"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\game\playercontrol.cpp -o CMakeFiles\sdl_test.dir\game\playercontrol.cpp.s
+
+CMakeFiles/sdl_test.dir/game/gst.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
+CMakeFiles/sdl_test.dir/game/gst.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
+CMakeFiles/sdl_test.dir/game/gst.cpp.obj: game/gst.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building CXX object CMakeFiles/sdl_test.dir/game/gst.cpp.obj"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\game\gst.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\game\gst.cpp
+
+CMakeFiles/sdl_test.dir/game/gst.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/game/gst.cpp.i"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\game\gst.cpp > CMakeFiles\sdl_test.dir\game\gst.cpp.i
+
+CMakeFiles/sdl_test.dir/game/gst.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/game/gst.cpp.s"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\game\gst.cpp -o CMakeFiles\sdl_test.dir\game\gst.cpp.s
+
+CMakeFiles/sdl_test.dir/game/view.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
+CMakeFiles/sdl_test.dir/game/view.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
+CMakeFiles/sdl_test.dir/game/view.cpp.obj: game/view.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Building CXX object CMakeFiles/sdl_test.dir/game/view.cpp.obj"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\game\view.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\game\view.cpp
+
+CMakeFiles/sdl_test.dir/game/view.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/game/view.cpp.i"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\game\view.cpp > CMakeFiles\sdl_test.dir\game\view.cpp.i
+
+CMakeFiles/sdl_test.dir/game/view.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/game/view.cpp.s"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\game\view.cpp -o CMakeFiles\sdl_test.dir\game\view.cpp.s
+
+CMakeFiles/sdl_test.dir/game/menu.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
+CMakeFiles/sdl_test.dir/game/menu.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
+CMakeFiles/sdl_test.dir/game/menu.cpp.obj: game/menu.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Building CXX object CMakeFiles/sdl_test.dir/game/menu.cpp.obj"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\game\menu.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\game\menu.cpp
+
+CMakeFiles/sdl_test.dir/game/menu.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/game/menu.cpp.i"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\game\menu.cpp > CMakeFiles\sdl_test.dir\game\menu.cpp.i
+
+CMakeFiles/sdl_test.dir/game/menu.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/game/menu.cpp.s"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\game\menu.cpp -o CMakeFiles\sdl_test.dir\game\menu.cpp.s
+
+CMakeFiles/sdl_test.dir/game/tile.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
+CMakeFiles/sdl_test.dir/game/tile.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
+CMakeFiles/sdl_test.dir/game/tile.cpp.obj: game/tile.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_11) "Building CXX object CMakeFiles/sdl_test.dir/game/tile.cpp.obj"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\game\tile.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\game\tile.cpp
+
+CMakeFiles/sdl_test.dir/game/tile.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/game/tile.cpp.i"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\game\tile.cpp > CMakeFiles\sdl_test.dir\game\tile.cpp.i
+
+CMakeFiles/sdl_test.dir/game/tile.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/game/tile.cpp.s"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\game\tile.cpp -o CMakeFiles\sdl_test.dir\game\tile.cpp.s
+
+CMakeFiles/sdl_test.dir/game/load.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
+CMakeFiles/sdl_test.dir/game/load.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
+CMakeFiles/sdl_test.dir/game/load.cpp.obj: game/load.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_12) "Building CXX object CMakeFiles/sdl_test.dir/game/load.cpp.obj"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\game\load.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\game\load.cpp
+
+CMakeFiles/sdl_test.dir/game/load.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/game/load.cpp.i"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\game\load.cpp > CMakeFiles\sdl_test.dir\game\load.cpp.i
+
+CMakeFiles/sdl_test.dir/game/load.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/game/load.cpp.s"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\game\load.cpp -o CMakeFiles\sdl_test.dir\game\load.cpp.s
+
+CMakeFiles/sdl_test.dir/game/tech.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
+CMakeFiles/sdl_test.dir/game/tech.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
+CMakeFiles/sdl_test.dir/game/tech.cpp.obj: game/tech.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_13) "Building CXX object CMakeFiles/sdl_test.dir/game/tech.cpp.obj"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\game\tech.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\game\tech.cpp
+
+CMakeFiles/sdl_test.dir/game/tech.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/game/tech.cpp.i"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\game\tech.cpp > CMakeFiles\sdl_test.dir\game\tech.cpp.i
+
+CMakeFiles/sdl_test.dir/game/tech.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/game/tech.cpp.s"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\game\tech.cpp -o CMakeFiles\sdl_test.dir\game\tech.cpp.s
+
+CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj: CMakeFiles/sdl_test.dir/flags.make
+CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj: CMakeFiles/sdl_test.dir/includes_CXX.rsp
+CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj: game/ai/action.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_14) "Building CXX object CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles\sdl_test.dir\game\ai\action.cpp.obj -c C:\Users\jaksk\Desktop\dev\_cpp\age\game\ai\action.cpp
+
+CMakeFiles/sdl_test.dir/game/ai/action.cpp.i: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/sdl_test.dir/game/ai/action.cpp.i"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E C:\Users\jaksk\Desktop\dev\_cpp\age\game\ai\action.cpp > CMakeFiles\sdl_test.dir\game\ai\action.cpp.i
+
+CMakeFiles/sdl_test.dir/game/ai/action.cpp.s: cmake_force
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/sdl_test.dir/game/ai/action.cpp.s"
+ C:\MinGW64\bin\g++.exe $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S C:\Users\jaksk\Desktop\dev\_cpp\age\game\ai\action.cpp -o CMakeFiles\sdl_test.dir\game\ai\action.cpp.s
+
+# Object files for target sdl_test
+sdl_test_OBJECTS = \
+"CMakeFiles/sdl_test.dir/main.cpp.obj" \
+"CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj" \
+"CMakeFiles/sdl_test.dir/commands/commands.cpp.obj" \
+"CMakeFiles/sdl_test.dir/timing/timing.cpp.obj" \
+"CMakeFiles/sdl_test.dir/game/entity.cpp.obj" \
+"CMakeFiles/sdl_test.dir/game/ground.cpp.obj" \
+"CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj" \
+"CMakeFiles/sdl_test.dir/game/gst.cpp.obj" \
+"CMakeFiles/sdl_test.dir/game/view.cpp.obj" \
+"CMakeFiles/sdl_test.dir/game/menu.cpp.obj" \
+"CMakeFiles/sdl_test.dir/game/tile.cpp.obj" \
+"CMakeFiles/sdl_test.dir/game/load.cpp.obj" \
+"CMakeFiles/sdl_test.dir/game/tech.cpp.obj" \
+"CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj"
+
+# External object files for target sdl_test
+sdl_test_EXTERNAL_OBJECTS =
+
+build/sdl_test.exe: CMakeFiles/sdl_test.dir/main.cpp.obj
+build/sdl_test.exe: CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj
+build/sdl_test.exe: CMakeFiles/sdl_test.dir/commands/commands.cpp.obj
+build/sdl_test.exe: CMakeFiles/sdl_test.dir/timing/timing.cpp.obj
+build/sdl_test.exe: CMakeFiles/sdl_test.dir/game/entity.cpp.obj
+build/sdl_test.exe: CMakeFiles/sdl_test.dir/game/ground.cpp.obj
+build/sdl_test.exe: CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj
+build/sdl_test.exe: CMakeFiles/sdl_test.dir/game/gst.cpp.obj
+build/sdl_test.exe: CMakeFiles/sdl_test.dir/game/view.cpp.obj
+build/sdl_test.exe: CMakeFiles/sdl_test.dir/game/menu.cpp.obj
+build/sdl_test.exe: CMakeFiles/sdl_test.dir/game/tile.cpp.obj
+build/sdl_test.exe: CMakeFiles/sdl_test.dir/game/load.cpp.obj
+build/sdl_test.exe: CMakeFiles/sdl_test.dir/game/tech.cpp.obj
+build/sdl_test.exe: CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj
+build/sdl_test.exe: CMakeFiles/sdl_test.dir/build.make
+build/sdl_test.exe: CMakeFiles/sdl_test.dir/linklibs.rsp
+build/sdl_test.exe: CMakeFiles/sdl_test.dir/objects1.rsp
+build/sdl_test.exe: CMakeFiles/sdl_test.dir/link.txt
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles --progress-num=$(CMAKE_PROGRESS_15) "Linking CXX executable build\sdl_test.exe"
+ $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles\sdl_test.dir\link.txt --verbose=$(VERBOSE)
+
+# Rule to build all files generated by this target.
+CMakeFiles/sdl_test.dir/build: build/sdl_test.exe
+
+.PHONY : CMakeFiles/sdl_test.dir/build
+
+CMakeFiles/sdl_test.dir/clean:
+ $(CMAKE_COMMAND) -P CMakeFiles\sdl_test.dir\cmake_clean.cmake
+.PHONY : CMakeFiles/sdl_test.dir/clean
+
+CMakeFiles/sdl_test.dir/depend:
+ $(CMAKE_COMMAND) -E cmake_depends "MinGW Makefiles" C:\Users\jaksk\Desktop\dev\_cpp\age C:\Users\jaksk\Desktop\dev\_cpp\age C:\Users\jaksk\Desktop\dev\_cpp\age C:\Users\jaksk\Desktop\dev\_cpp\age C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles\sdl_test.dir\DependInfo.cmake --color=$(COLOR)
+.PHONY : CMakeFiles/sdl_test.dir/depend
+
diff --git a/CMakeFiles/sdl_test.dir/cmake_clean.cmake b/CMakeFiles/sdl_test.dir/cmake_clean.cmake
index cabfeec..a50e8ab 100644
--- a/CMakeFiles/sdl_test.dir/cmake_clean.cmake
+++ b/CMakeFiles/sdl_test.dir/cmake_clean.cmake
@@ -1,25 +1,25 @@
-file(REMOVE_RECURSE
- "CMakeFiles/sdl_test.dir/commands/commands.cpp.obj"
- "CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj"
- "CMakeFiles/sdl_test.dir/game/entity.cpp.obj"
- "CMakeFiles/sdl_test.dir/game/ground.cpp.obj"
- "CMakeFiles/sdl_test.dir/game/gst.cpp.obj"
- "CMakeFiles/sdl_test.dir/game/load.cpp.obj"
- "CMakeFiles/sdl_test.dir/game/menu.cpp.obj"
- "CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj"
- "CMakeFiles/sdl_test.dir/game/tech.cpp.obj"
- "CMakeFiles/sdl_test.dir/game/tile.cpp.obj"
- "CMakeFiles/sdl_test.dir/game/view.cpp.obj"
- "CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj"
- "CMakeFiles/sdl_test.dir/main.cpp.obj"
- "CMakeFiles/sdl_test.dir/timing/timing.cpp.obj"
- "build/libsdl_test.dll.a"
- "build/sdl_test.exe"
- "build/sdl_test.exe.manifest"
- "build/sdl_test.pdb"
-)
-
-# Per-language clean rules from dependency scanning.
-foreach(lang CXX)
- include(CMakeFiles/sdl_test.dir/cmake_clean_${lang}.cmake OPTIONAL)
-endforeach()
+file(REMOVE_RECURSE
+ "CMakeFiles/sdl_test.dir/commands/commands.cpp.obj"
+ "CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj"
+ "CMakeFiles/sdl_test.dir/game/entity.cpp.obj"
+ "CMakeFiles/sdl_test.dir/game/ground.cpp.obj"
+ "CMakeFiles/sdl_test.dir/game/gst.cpp.obj"
+ "CMakeFiles/sdl_test.dir/game/load.cpp.obj"
+ "CMakeFiles/sdl_test.dir/game/menu.cpp.obj"
+ "CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj"
+ "CMakeFiles/sdl_test.dir/game/tech.cpp.obj"
+ "CMakeFiles/sdl_test.dir/game/tile.cpp.obj"
+ "CMakeFiles/sdl_test.dir/game/view.cpp.obj"
+ "CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj"
+ "CMakeFiles/sdl_test.dir/main.cpp.obj"
+ "CMakeFiles/sdl_test.dir/timing/timing.cpp.obj"
+ "build/libsdl_test.dll.a"
+ "build/sdl_test.exe"
+ "build/sdl_test.exe.manifest"
+ "build/sdl_test.pdb"
+)
+
+# Per-language clean rules from dependency scanning.
+foreach(lang CXX)
+ include(CMakeFiles/sdl_test.dir/cmake_clean_${lang}.cmake OPTIONAL)
+endforeach()
diff --git a/CMakeFiles/sdl_test.dir/depend.internal b/CMakeFiles/sdl_test.dir/depend.internal
index 5edf746..2211c3e 100644
--- a/CMakeFiles/sdl_test.dir/depend.internal
+++ b/CMakeFiles/sdl_test.dir/depend.internal
@@ -1,302 +1,302 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "MinGW Makefiles" Generator, CMake Version 3.18
-
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj
- C:/MinGW_libs/include/SDL2/SDL.h
- C:/MinGW_libs/include/SDL2/SDL_assert.h
- C:/MinGW_libs/include/SDL2/SDL_atomic.h
- C:/MinGW_libs/include/SDL2/SDL_audio.h
- C:/MinGW_libs/include/SDL2/SDL_blendmode.h
- C:/MinGW_libs/include/SDL2/SDL_clipboard.h
- C:/MinGW_libs/include/SDL2/SDL_config.h
- C:/MinGW_libs/include/SDL2/SDL_cpuinfo.h
- C:/MinGW_libs/include/SDL2/SDL_endian.h
- C:/MinGW_libs/include/SDL2/SDL_error.h
- C:/MinGW_libs/include/SDL2/SDL_events.h
- C:/MinGW_libs/include/SDL2/SDL_filesystem.h
- C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
- C:/MinGW_libs/include/SDL2/SDL_gesture.h
- C:/MinGW_libs/include/SDL2/SDL_haptic.h
- C:/MinGW_libs/include/SDL2/SDL_hints.h
- C:/MinGW_libs/include/SDL2/SDL_joystick.h
- C:/MinGW_libs/include/SDL2/SDL_keyboard.h
- C:/MinGW_libs/include/SDL2/SDL_keycode.h
- C:/MinGW_libs/include/SDL2/SDL_loadso.h
- C:/MinGW_libs/include/SDL2/SDL_log.h
- C:/MinGW_libs/include/SDL2/SDL_main.h
- C:/MinGW_libs/include/SDL2/SDL_messagebox.h
- C:/MinGW_libs/include/SDL2/SDL_metal.h
- C:/MinGW_libs/include/SDL2/SDL_mouse.h
- C:/MinGW_libs/include/SDL2/SDL_mutex.h
- C:/MinGW_libs/include/SDL2/SDL_pixels.h
- C:/MinGW_libs/include/SDL2/SDL_platform.h
- C:/MinGW_libs/include/SDL2/SDL_power.h
- C:/MinGW_libs/include/SDL2/SDL_quit.h
- C:/MinGW_libs/include/SDL2/SDL_rect.h
- C:/MinGW_libs/include/SDL2/SDL_render.h
- C:/MinGW_libs/include/SDL2/SDL_rwops.h
- C:/MinGW_libs/include/SDL2/SDL_scancode.h
- C:/MinGW_libs/include/SDL2/SDL_sensor.h
- C:/MinGW_libs/include/SDL2/SDL_shape.h
- C:/MinGW_libs/include/SDL2/SDL_stdinc.h
- C:/MinGW_libs/include/SDL2/SDL_surface.h
- C:/MinGW_libs/include/SDL2/SDL_system.h
- C:/MinGW_libs/include/SDL2/SDL_thread.h
- C:/MinGW_libs/include/SDL2/SDL_timer.h
- C:/MinGW_libs/include/SDL2/SDL_touch.h
- C:/MinGW_libs/include/SDL2/SDL_version.h
- C:/MinGW_libs/include/SDL2/SDL_video.h
- C:/MinGW_libs/include/SDL2/begin_code.h
- C:/MinGW_libs/include/SDL2/close_code.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/commands/commands.cpp
- C:/Users/jaksk/Desktop/dev/_cpp/age/commands/commands.h
-CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/action.cpp
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/action.h
-CMakeFiles/sdl_test.dir/game/entity.cpp.obj
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.cpp
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
-CMakeFiles/sdl_test.dir/game/ground.cpp.obj
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.cpp
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/player.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
-CMakeFiles/sdl_test.dir/game/gst.cpp.obj
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.cpp
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/player.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
-CMakeFiles/sdl_test.dir/game/load.cpp.obj
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/load.cpp
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/load.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/nlohmann/json.hpp
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/player.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
-CMakeFiles/sdl_test.dir/game/menu.cpp.obj
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/menu.cpp
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/menu.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
-CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/menu.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/player.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/playercontrol.cpp
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/playercontrol.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/view.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
-CMakeFiles/sdl_test.dir/game/tech.cpp.obj
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.cpp
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
-CMakeFiles/sdl_test.dir/game/tile.cpp.obj
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.cpp
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
-CMakeFiles/sdl_test.dir/game/view.cpp.obj
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/menu.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/player.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/view.cpp
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/view.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj
- C:/MinGW_libs/include/SDL2/SDL.h
- C:/MinGW_libs/include/SDL2/SDL_assert.h
- C:/MinGW_libs/include/SDL2/SDL_atomic.h
- C:/MinGW_libs/include/SDL2/SDL_audio.h
- C:/MinGW_libs/include/SDL2/SDL_blendmode.h
- C:/MinGW_libs/include/SDL2/SDL_clipboard.h
- C:/MinGW_libs/include/SDL2/SDL_config.h
- C:/MinGW_libs/include/SDL2/SDL_cpuinfo.h
- C:/MinGW_libs/include/SDL2/SDL_endian.h
- C:/MinGW_libs/include/SDL2/SDL_error.h
- C:/MinGW_libs/include/SDL2/SDL_events.h
- C:/MinGW_libs/include/SDL2/SDL_filesystem.h
- C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
- C:/MinGW_libs/include/SDL2/SDL_gesture.h
- C:/MinGW_libs/include/SDL2/SDL_haptic.h
- C:/MinGW_libs/include/SDL2/SDL_hints.h
- C:/MinGW_libs/include/SDL2/SDL_joystick.h
- C:/MinGW_libs/include/SDL2/SDL_keyboard.h
- C:/MinGW_libs/include/SDL2/SDL_keycode.h
- C:/MinGW_libs/include/SDL2/SDL_loadso.h
- C:/MinGW_libs/include/SDL2/SDL_log.h
- C:/MinGW_libs/include/SDL2/SDL_main.h
- C:/MinGW_libs/include/SDL2/SDL_messagebox.h
- C:/MinGW_libs/include/SDL2/SDL_metal.h
- C:/MinGW_libs/include/SDL2/SDL_mouse.h
- C:/MinGW_libs/include/SDL2/SDL_mutex.h
- C:/MinGW_libs/include/SDL2/SDL_pixels.h
- C:/MinGW_libs/include/SDL2/SDL_platform.h
- C:/MinGW_libs/include/SDL2/SDL_power.h
- C:/MinGW_libs/include/SDL2/SDL_quit.h
- C:/MinGW_libs/include/SDL2/SDL_rect.h
- C:/MinGW_libs/include/SDL2/SDL_render.h
- C:/MinGW_libs/include/SDL2/SDL_rwops.h
- C:/MinGW_libs/include/SDL2/SDL_scancode.h
- C:/MinGW_libs/include/SDL2/SDL_sensor.h
- C:/MinGW_libs/include/SDL2/SDL_shape.h
- C:/MinGW_libs/include/SDL2/SDL_stdinc.h
- C:/MinGW_libs/include/SDL2/SDL_surface.h
- C:/MinGW_libs/include/SDL2/SDL_system.h
- C:/MinGW_libs/include/SDL2/SDL_thread.h
- C:/MinGW_libs/include/SDL2/SDL_timer.h
- C:/MinGW_libs/include/SDL2/SDL_touch.h
- C:/MinGW_libs/include/SDL2/SDL_version.h
- C:/MinGW_libs/include/SDL2/SDL_video.h
- C:/MinGW_libs/include/SDL2/begin_code.h
- C:/MinGW_libs/include/SDL2/close_code.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/constants.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/menu.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/player.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/view.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/graphics/cam.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/graphics/graphics.cpp
- C:/Users/jaksk/Desktop/dev/_cpp/age/graphics/graphics.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
-CMakeFiles/sdl_test.dir/main.cpp.obj
- C:/MinGW_libs/include/SDL2/SDL.h
- C:/MinGW_libs/include/SDL2/SDL_assert.h
- C:/MinGW_libs/include/SDL2/SDL_atomic.h
- C:/MinGW_libs/include/SDL2/SDL_audio.h
- C:/MinGW_libs/include/SDL2/SDL_blendmode.h
- C:/MinGW_libs/include/SDL2/SDL_clipboard.h
- C:/MinGW_libs/include/SDL2/SDL_config.h
- C:/MinGW_libs/include/SDL2/SDL_cpuinfo.h
- C:/MinGW_libs/include/SDL2/SDL_endian.h
- C:/MinGW_libs/include/SDL2/SDL_error.h
- C:/MinGW_libs/include/SDL2/SDL_events.h
- C:/MinGW_libs/include/SDL2/SDL_filesystem.h
- C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
- C:/MinGW_libs/include/SDL2/SDL_gesture.h
- C:/MinGW_libs/include/SDL2/SDL_haptic.h
- C:/MinGW_libs/include/SDL2/SDL_hints.h
- C:/MinGW_libs/include/SDL2/SDL_joystick.h
- C:/MinGW_libs/include/SDL2/SDL_keyboard.h
- C:/MinGW_libs/include/SDL2/SDL_keycode.h
- C:/MinGW_libs/include/SDL2/SDL_loadso.h
- C:/MinGW_libs/include/SDL2/SDL_log.h
- C:/MinGW_libs/include/SDL2/SDL_main.h
- C:/MinGW_libs/include/SDL2/SDL_messagebox.h
- C:/MinGW_libs/include/SDL2/SDL_metal.h
- C:/MinGW_libs/include/SDL2/SDL_mouse.h
- C:/MinGW_libs/include/SDL2/SDL_mutex.h
- C:/MinGW_libs/include/SDL2/SDL_pixels.h
- C:/MinGW_libs/include/SDL2/SDL_platform.h
- C:/MinGW_libs/include/SDL2/SDL_power.h
- C:/MinGW_libs/include/SDL2/SDL_quit.h
- C:/MinGW_libs/include/SDL2/SDL_rect.h
- C:/MinGW_libs/include/SDL2/SDL_render.h
- C:/MinGW_libs/include/SDL2/SDL_rwops.h
- C:/MinGW_libs/include/SDL2/SDL_scancode.h
- C:/MinGW_libs/include/SDL2/SDL_sensor.h
- C:/MinGW_libs/include/SDL2/SDL_shape.h
- C:/MinGW_libs/include/SDL2/SDL_stdinc.h
- C:/MinGW_libs/include/SDL2/SDL_surface.h
- C:/MinGW_libs/include/SDL2/SDL_system.h
- C:/MinGW_libs/include/SDL2/SDL_thread.h
- C:/MinGW_libs/include/SDL2/SDL_timer.h
- C:/MinGW_libs/include/SDL2/SDL_touch.h
- C:/MinGW_libs/include/SDL2/SDL_version.h
- C:/MinGW_libs/include/SDL2/SDL_video.h
- C:/MinGW_libs/include/SDL2/begin_code.h
- C:/MinGW_libs/include/SDL2/close_code.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/commands/commands.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/action.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/engine.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/evaluator.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/generator.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/performer.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/tactic.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/load.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/menu.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/player.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/playercontrol.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/game/view.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/graphics/cam.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/graphics/graphics.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/main.cpp
- C:/Users/jaksk/Desktop/dev/_cpp/age/timing/timing.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj
- C:/MinGW_libs/include/SDL2/SDL.h
- C:/MinGW_libs/include/SDL2/SDL_assert.h
- C:/MinGW_libs/include/SDL2/SDL_atomic.h
- C:/MinGW_libs/include/SDL2/SDL_audio.h
- C:/MinGW_libs/include/SDL2/SDL_blendmode.h
- C:/MinGW_libs/include/SDL2/SDL_clipboard.h
- C:/MinGW_libs/include/SDL2/SDL_config.h
- C:/MinGW_libs/include/SDL2/SDL_cpuinfo.h
- C:/MinGW_libs/include/SDL2/SDL_endian.h
- C:/MinGW_libs/include/SDL2/SDL_error.h
- C:/MinGW_libs/include/SDL2/SDL_events.h
- C:/MinGW_libs/include/SDL2/SDL_filesystem.h
- C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
- C:/MinGW_libs/include/SDL2/SDL_gesture.h
- C:/MinGW_libs/include/SDL2/SDL_haptic.h
- C:/MinGW_libs/include/SDL2/SDL_hints.h
- C:/MinGW_libs/include/SDL2/SDL_joystick.h
- C:/MinGW_libs/include/SDL2/SDL_keyboard.h
- C:/MinGW_libs/include/SDL2/SDL_keycode.h
- C:/MinGW_libs/include/SDL2/SDL_loadso.h
- C:/MinGW_libs/include/SDL2/SDL_log.h
- C:/MinGW_libs/include/SDL2/SDL_main.h
- C:/MinGW_libs/include/SDL2/SDL_messagebox.h
- C:/MinGW_libs/include/SDL2/SDL_metal.h
- C:/MinGW_libs/include/SDL2/SDL_mouse.h
- C:/MinGW_libs/include/SDL2/SDL_mutex.h
- C:/MinGW_libs/include/SDL2/SDL_pixels.h
- C:/MinGW_libs/include/SDL2/SDL_platform.h
- C:/MinGW_libs/include/SDL2/SDL_power.h
- C:/MinGW_libs/include/SDL2/SDL_quit.h
- C:/MinGW_libs/include/SDL2/SDL_rect.h
- C:/MinGW_libs/include/SDL2/SDL_render.h
- C:/MinGW_libs/include/SDL2/SDL_rwops.h
- C:/MinGW_libs/include/SDL2/SDL_scancode.h
- C:/MinGW_libs/include/SDL2/SDL_sensor.h
- C:/MinGW_libs/include/SDL2/SDL_shape.h
- C:/MinGW_libs/include/SDL2/SDL_stdinc.h
- C:/MinGW_libs/include/SDL2/SDL_surface.h
- C:/MinGW_libs/include/SDL2/SDL_system.h
- C:/MinGW_libs/include/SDL2/SDL_thread.h
- C:/MinGW_libs/include/SDL2/SDL_timer.h
- C:/MinGW_libs/include/SDL2/SDL_touch.h
- C:/MinGW_libs/include/SDL2/SDL_version.h
- C:/MinGW_libs/include/SDL2/SDL_video.h
- C:/MinGW_libs/include/SDL2/begin_code.h
- C:/MinGW_libs/include/SDL2/close_code.h
- C:/Users/jaksk/Desktop/dev/_cpp/age/timing/timing.cpp
- C:/Users/jaksk/Desktop/dev/_cpp/age/timing/timing.h
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "MinGW Makefiles" Generator, CMake Version 3.18
+
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj
+ C:/MinGW_libs/include/SDL2/SDL.h
+ C:/MinGW_libs/include/SDL2/SDL_assert.h
+ C:/MinGW_libs/include/SDL2/SDL_atomic.h
+ C:/MinGW_libs/include/SDL2/SDL_audio.h
+ C:/MinGW_libs/include/SDL2/SDL_blendmode.h
+ C:/MinGW_libs/include/SDL2/SDL_clipboard.h
+ C:/MinGW_libs/include/SDL2/SDL_config.h
+ C:/MinGW_libs/include/SDL2/SDL_cpuinfo.h
+ C:/MinGW_libs/include/SDL2/SDL_endian.h
+ C:/MinGW_libs/include/SDL2/SDL_error.h
+ C:/MinGW_libs/include/SDL2/SDL_events.h
+ C:/MinGW_libs/include/SDL2/SDL_filesystem.h
+ C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
+ C:/MinGW_libs/include/SDL2/SDL_gesture.h
+ C:/MinGW_libs/include/SDL2/SDL_haptic.h
+ C:/MinGW_libs/include/SDL2/SDL_hints.h
+ C:/MinGW_libs/include/SDL2/SDL_joystick.h
+ C:/MinGW_libs/include/SDL2/SDL_keyboard.h
+ C:/MinGW_libs/include/SDL2/SDL_keycode.h
+ C:/MinGW_libs/include/SDL2/SDL_loadso.h
+ C:/MinGW_libs/include/SDL2/SDL_log.h
+ C:/MinGW_libs/include/SDL2/SDL_main.h
+ C:/MinGW_libs/include/SDL2/SDL_messagebox.h
+ C:/MinGW_libs/include/SDL2/SDL_metal.h
+ C:/MinGW_libs/include/SDL2/SDL_mouse.h
+ C:/MinGW_libs/include/SDL2/SDL_mutex.h
+ C:/MinGW_libs/include/SDL2/SDL_pixels.h
+ C:/MinGW_libs/include/SDL2/SDL_platform.h
+ C:/MinGW_libs/include/SDL2/SDL_power.h
+ C:/MinGW_libs/include/SDL2/SDL_quit.h
+ C:/MinGW_libs/include/SDL2/SDL_rect.h
+ C:/MinGW_libs/include/SDL2/SDL_render.h
+ C:/MinGW_libs/include/SDL2/SDL_rwops.h
+ C:/MinGW_libs/include/SDL2/SDL_scancode.h
+ C:/MinGW_libs/include/SDL2/SDL_sensor.h
+ C:/MinGW_libs/include/SDL2/SDL_shape.h
+ C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+ C:/MinGW_libs/include/SDL2/SDL_surface.h
+ C:/MinGW_libs/include/SDL2/SDL_system.h
+ C:/MinGW_libs/include/SDL2/SDL_thread.h
+ C:/MinGW_libs/include/SDL2/SDL_timer.h
+ C:/MinGW_libs/include/SDL2/SDL_touch.h
+ C:/MinGW_libs/include/SDL2/SDL_version.h
+ C:/MinGW_libs/include/SDL2/SDL_video.h
+ C:/MinGW_libs/include/SDL2/begin_code.h
+ C:/MinGW_libs/include/SDL2/close_code.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/commands/commands.cpp
+ C:/Users/jaksk/Desktop/dev/_cpp/age/commands/commands.h
+CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/action.cpp
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/action.h
+CMakeFiles/sdl_test.dir/game/entity.cpp.obj
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.cpp
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
+CMakeFiles/sdl_test.dir/game/ground.cpp.obj
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.cpp
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/player.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
+CMakeFiles/sdl_test.dir/game/gst.cpp.obj
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.cpp
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/player.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
+CMakeFiles/sdl_test.dir/game/load.cpp.obj
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/load.cpp
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/load.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/nlohmann/json.hpp
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/player.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
+CMakeFiles/sdl_test.dir/game/menu.cpp.obj
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/menu.cpp
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/menu.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
+CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/menu.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/player.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/playercontrol.cpp
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/playercontrol.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/view.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
+CMakeFiles/sdl_test.dir/game/tech.cpp.obj
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.cpp
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
+CMakeFiles/sdl_test.dir/game/tile.cpp.obj
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.cpp
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
+CMakeFiles/sdl_test.dir/game/view.cpp.obj
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/menu.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/player.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/view.cpp
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/view.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj
+ C:/MinGW_libs/include/SDL2/SDL.h
+ C:/MinGW_libs/include/SDL2/SDL_assert.h
+ C:/MinGW_libs/include/SDL2/SDL_atomic.h
+ C:/MinGW_libs/include/SDL2/SDL_audio.h
+ C:/MinGW_libs/include/SDL2/SDL_blendmode.h
+ C:/MinGW_libs/include/SDL2/SDL_clipboard.h
+ C:/MinGW_libs/include/SDL2/SDL_config.h
+ C:/MinGW_libs/include/SDL2/SDL_cpuinfo.h
+ C:/MinGW_libs/include/SDL2/SDL_endian.h
+ C:/MinGW_libs/include/SDL2/SDL_error.h
+ C:/MinGW_libs/include/SDL2/SDL_events.h
+ C:/MinGW_libs/include/SDL2/SDL_filesystem.h
+ C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
+ C:/MinGW_libs/include/SDL2/SDL_gesture.h
+ C:/MinGW_libs/include/SDL2/SDL_haptic.h
+ C:/MinGW_libs/include/SDL2/SDL_hints.h
+ C:/MinGW_libs/include/SDL2/SDL_joystick.h
+ C:/MinGW_libs/include/SDL2/SDL_keyboard.h
+ C:/MinGW_libs/include/SDL2/SDL_keycode.h
+ C:/MinGW_libs/include/SDL2/SDL_loadso.h
+ C:/MinGW_libs/include/SDL2/SDL_log.h
+ C:/MinGW_libs/include/SDL2/SDL_main.h
+ C:/MinGW_libs/include/SDL2/SDL_messagebox.h
+ C:/MinGW_libs/include/SDL2/SDL_metal.h
+ C:/MinGW_libs/include/SDL2/SDL_mouse.h
+ C:/MinGW_libs/include/SDL2/SDL_mutex.h
+ C:/MinGW_libs/include/SDL2/SDL_pixels.h
+ C:/MinGW_libs/include/SDL2/SDL_platform.h
+ C:/MinGW_libs/include/SDL2/SDL_power.h
+ C:/MinGW_libs/include/SDL2/SDL_quit.h
+ C:/MinGW_libs/include/SDL2/SDL_rect.h
+ C:/MinGW_libs/include/SDL2/SDL_render.h
+ C:/MinGW_libs/include/SDL2/SDL_rwops.h
+ C:/MinGW_libs/include/SDL2/SDL_scancode.h
+ C:/MinGW_libs/include/SDL2/SDL_sensor.h
+ C:/MinGW_libs/include/SDL2/SDL_shape.h
+ C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+ C:/MinGW_libs/include/SDL2/SDL_surface.h
+ C:/MinGW_libs/include/SDL2/SDL_system.h
+ C:/MinGW_libs/include/SDL2/SDL_thread.h
+ C:/MinGW_libs/include/SDL2/SDL_timer.h
+ C:/MinGW_libs/include/SDL2/SDL_touch.h
+ C:/MinGW_libs/include/SDL2/SDL_version.h
+ C:/MinGW_libs/include/SDL2/SDL_video.h
+ C:/MinGW_libs/include/SDL2/begin_code.h
+ C:/MinGW_libs/include/SDL2/close_code.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/constants.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/menu.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/player.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/view.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/graphics/cam.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/graphics/graphics.cpp
+ C:/Users/jaksk/Desktop/dev/_cpp/age/graphics/graphics.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
+CMakeFiles/sdl_test.dir/main.cpp.obj
+ C:/MinGW_libs/include/SDL2/SDL.h
+ C:/MinGW_libs/include/SDL2/SDL_assert.h
+ C:/MinGW_libs/include/SDL2/SDL_atomic.h
+ C:/MinGW_libs/include/SDL2/SDL_audio.h
+ C:/MinGW_libs/include/SDL2/SDL_blendmode.h
+ C:/MinGW_libs/include/SDL2/SDL_clipboard.h
+ C:/MinGW_libs/include/SDL2/SDL_config.h
+ C:/MinGW_libs/include/SDL2/SDL_cpuinfo.h
+ C:/MinGW_libs/include/SDL2/SDL_endian.h
+ C:/MinGW_libs/include/SDL2/SDL_error.h
+ C:/MinGW_libs/include/SDL2/SDL_events.h
+ C:/MinGW_libs/include/SDL2/SDL_filesystem.h
+ C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
+ C:/MinGW_libs/include/SDL2/SDL_gesture.h
+ C:/MinGW_libs/include/SDL2/SDL_haptic.h
+ C:/MinGW_libs/include/SDL2/SDL_hints.h
+ C:/MinGW_libs/include/SDL2/SDL_joystick.h
+ C:/MinGW_libs/include/SDL2/SDL_keyboard.h
+ C:/MinGW_libs/include/SDL2/SDL_keycode.h
+ C:/MinGW_libs/include/SDL2/SDL_loadso.h
+ C:/MinGW_libs/include/SDL2/SDL_log.h
+ C:/MinGW_libs/include/SDL2/SDL_main.h
+ C:/MinGW_libs/include/SDL2/SDL_messagebox.h
+ C:/MinGW_libs/include/SDL2/SDL_metal.h
+ C:/MinGW_libs/include/SDL2/SDL_mouse.h
+ C:/MinGW_libs/include/SDL2/SDL_mutex.h
+ C:/MinGW_libs/include/SDL2/SDL_pixels.h
+ C:/MinGW_libs/include/SDL2/SDL_platform.h
+ C:/MinGW_libs/include/SDL2/SDL_power.h
+ C:/MinGW_libs/include/SDL2/SDL_quit.h
+ C:/MinGW_libs/include/SDL2/SDL_rect.h
+ C:/MinGW_libs/include/SDL2/SDL_render.h
+ C:/MinGW_libs/include/SDL2/SDL_rwops.h
+ C:/MinGW_libs/include/SDL2/SDL_scancode.h
+ C:/MinGW_libs/include/SDL2/SDL_sensor.h
+ C:/MinGW_libs/include/SDL2/SDL_shape.h
+ C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+ C:/MinGW_libs/include/SDL2/SDL_surface.h
+ C:/MinGW_libs/include/SDL2/SDL_system.h
+ C:/MinGW_libs/include/SDL2/SDL_thread.h
+ C:/MinGW_libs/include/SDL2/SDL_timer.h
+ C:/MinGW_libs/include/SDL2/SDL_touch.h
+ C:/MinGW_libs/include/SDL2/SDL_version.h
+ C:/MinGW_libs/include/SDL2/SDL_video.h
+ C:/MinGW_libs/include/SDL2/begin_code.h
+ C:/MinGW_libs/include/SDL2/close_code.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/commands/commands.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/action.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/engine.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/evaluator.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/generator.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/performer.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/ai/tactic.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/entity.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/ground.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/gst.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/load.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/menu.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/player.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/playercontrol.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/tech.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/tile.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/game/view.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/graphics/cam.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/graphics/graphics.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/main.cpp
+ C:/Users/jaksk/Desktop/dev/_cpp/age/timing/timing.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/umath/vec2.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj
+ C:/MinGW_libs/include/SDL2/SDL.h
+ C:/MinGW_libs/include/SDL2/SDL_assert.h
+ C:/MinGW_libs/include/SDL2/SDL_atomic.h
+ C:/MinGW_libs/include/SDL2/SDL_audio.h
+ C:/MinGW_libs/include/SDL2/SDL_blendmode.h
+ C:/MinGW_libs/include/SDL2/SDL_clipboard.h
+ C:/MinGW_libs/include/SDL2/SDL_config.h
+ C:/MinGW_libs/include/SDL2/SDL_cpuinfo.h
+ C:/MinGW_libs/include/SDL2/SDL_endian.h
+ C:/MinGW_libs/include/SDL2/SDL_error.h
+ C:/MinGW_libs/include/SDL2/SDL_events.h
+ C:/MinGW_libs/include/SDL2/SDL_filesystem.h
+ C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
+ C:/MinGW_libs/include/SDL2/SDL_gesture.h
+ C:/MinGW_libs/include/SDL2/SDL_haptic.h
+ C:/MinGW_libs/include/SDL2/SDL_hints.h
+ C:/MinGW_libs/include/SDL2/SDL_joystick.h
+ C:/MinGW_libs/include/SDL2/SDL_keyboard.h
+ C:/MinGW_libs/include/SDL2/SDL_keycode.h
+ C:/MinGW_libs/include/SDL2/SDL_loadso.h
+ C:/MinGW_libs/include/SDL2/SDL_log.h
+ C:/MinGW_libs/include/SDL2/SDL_main.h
+ C:/MinGW_libs/include/SDL2/SDL_messagebox.h
+ C:/MinGW_libs/include/SDL2/SDL_metal.h
+ C:/MinGW_libs/include/SDL2/SDL_mouse.h
+ C:/MinGW_libs/include/SDL2/SDL_mutex.h
+ C:/MinGW_libs/include/SDL2/SDL_pixels.h
+ C:/MinGW_libs/include/SDL2/SDL_platform.h
+ C:/MinGW_libs/include/SDL2/SDL_power.h
+ C:/MinGW_libs/include/SDL2/SDL_quit.h
+ C:/MinGW_libs/include/SDL2/SDL_rect.h
+ C:/MinGW_libs/include/SDL2/SDL_render.h
+ C:/MinGW_libs/include/SDL2/SDL_rwops.h
+ C:/MinGW_libs/include/SDL2/SDL_scancode.h
+ C:/MinGW_libs/include/SDL2/SDL_sensor.h
+ C:/MinGW_libs/include/SDL2/SDL_shape.h
+ C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+ C:/MinGW_libs/include/SDL2/SDL_surface.h
+ C:/MinGW_libs/include/SDL2/SDL_system.h
+ C:/MinGW_libs/include/SDL2/SDL_thread.h
+ C:/MinGW_libs/include/SDL2/SDL_timer.h
+ C:/MinGW_libs/include/SDL2/SDL_touch.h
+ C:/MinGW_libs/include/SDL2/SDL_version.h
+ C:/MinGW_libs/include/SDL2/SDL_video.h
+ C:/MinGW_libs/include/SDL2/begin_code.h
+ C:/MinGW_libs/include/SDL2/close_code.h
+ C:/Users/jaksk/Desktop/dev/_cpp/age/timing/timing.cpp
+ C:/Users/jaksk/Desktop/dev/_cpp/age/timing/timing.h
diff --git a/CMakeFiles/sdl_test.dir/depend.make b/CMakeFiles/sdl_test.dir/depend.make
index 0d1b776..1cc1c35 100644
--- a/CMakeFiles/sdl_test.dir/depend.make
+++ b/CMakeFiles/sdl_test.dir/depend.make
@@ -1,302 +1,302 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "MinGW Makefiles" Generator, CMake Version 3.18
-
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_assert.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_atomic.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_audio.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_blendmode.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_clipboard.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_config.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_cpuinfo.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_endian.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_error.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_events.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_filesystem.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_gesture.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_haptic.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_hints.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_joystick.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_keyboard.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_keycode.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_loadso.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_log.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_main.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_messagebox.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_metal.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_mouse.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_mutex.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_pixels.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_platform.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_power.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_quit.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_rect.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_render.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_rwops.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_scancode.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_sensor.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_shape.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_surface.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_system.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_thread.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_timer.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_touch.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_version.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_video.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/begin_code.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/close_code.h
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: commands/commands.cpp
-CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: commands/commands.h
-
-CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj: game/ai/action.cpp
-CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj: game/ai/action.h
-
-CMakeFiles/sdl_test.dir/game/entity.cpp.obj: game/entity.cpp
-CMakeFiles/sdl_test.dir/game/entity.cpp.obj: game/entity.h
-CMakeFiles/sdl_test.dir/game/entity.cpp.obj: umath/vec2.h
-
-CMakeFiles/sdl_test.dir/game/ground.cpp.obj: game/entity.h
-CMakeFiles/sdl_test.dir/game/ground.cpp.obj: game/ground.cpp
-CMakeFiles/sdl_test.dir/game/ground.cpp.obj: game/ground.h
-CMakeFiles/sdl_test.dir/game/ground.cpp.obj: game/gst.h
-CMakeFiles/sdl_test.dir/game/ground.cpp.obj: game/player.h
-CMakeFiles/sdl_test.dir/game/ground.cpp.obj: game/tech.h
-CMakeFiles/sdl_test.dir/game/ground.cpp.obj: game/tile.h
-CMakeFiles/sdl_test.dir/game/ground.cpp.obj: umath/vec2.h
-
-CMakeFiles/sdl_test.dir/game/gst.cpp.obj: game/entity.h
-CMakeFiles/sdl_test.dir/game/gst.cpp.obj: game/ground.h
-CMakeFiles/sdl_test.dir/game/gst.cpp.obj: game/gst.cpp
-CMakeFiles/sdl_test.dir/game/gst.cpp.obj: game/gst.h
-CMakeFiles/sdl_test.dir/game/gst.cpp.obj: game/player.h
-CMakeFiles/sdl_test.dir/game/gst.cpp.obj: game/tech.h
-CMakeFiles/sdl_test.dir/game/gst.cpp.obj: game/tile.h
-CMakeFiles/sdl_test.dir/game/gst.cpp.obj: umath/vec2.h
-
-CMakeFiles/sdl_test.dir/game/load.cpp.obj: game/entity.h
-CMakeFiles/sdl_test.dir/game/load.cpp.obj: game/ground.h
-CMakeFiles/sdl_test.dir/game/load.cpp.obj: game/gst.h
-CMakeFiles/sdl_test.dir/game/load.cpp.obj: game/load.cpp
-CMakeFiles/sdl_test.dir/game/load.cpp.obj: game/load.h
-CMakeFiles/sdl_test.dir/game/load.cpp.obj: game/nlohmann/json.hpp
-CMakeFiles/sdl_test.dir/game/load.cpp.obj: game/player.h
-CMakeFiles/sdl_test.dir/game/load.cpp.obj: game/tech.h
-CMakeFiles/sdl_test.dir/game/load.cpp.obj: game/tile.h
-CMakeFiles/sdl_test.dir/game/load.cpp.obj: umath/vec2.h
-
-CMakeFiles/sdl_test.dir/game/menu.cpp.obj: game/menu.cpp
-CMakeFiles/sdl_test.dir/game/menu.cpp.obj: game/menu.h
-CMakeFiles/sdl_test.dir/game/menu.cpp.obj: game/tech.h
-CMakeFiles/sdl_test.dir/game/menu.cpp.obj: umath/vec2.h
-
-CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/entity.h
-CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/ground.h
-CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/gst.h
-CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/menu.h
-CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/player.h
-CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/playercontrol.cpp
-CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/playercontrol.h
-CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/tech.h
-CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/tile.h
-CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/view.h
-CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: umath/vec2.h
-
-CMakeFiles/sdl_test.dir/game/tech.cpp.obj: game/tech.cpp
-CMakeFiles/sdl_test.dir/game/tech.cpp.obj: game/tech.h
-CMakeFiles/sdl_test.dir/game/tech.cpp.obj: umath/vec2.h
-
-CMakeFiles/sdl_test.dir/game/tile.cpp.obj: game/tile.cpp
-CMakeFiles/sdl_test.dir/game/tile.cpp.obj: game/tile.h
-CMakeFiles/sdl_test.dir/game/tile.cpp.obj: umath/vec2.h
-
-CMakeFiles/sdl_test.dir/game/view.cpp.obj: game/entity.h
-CMakeFiles/sdl_test.dir/game/view.cpp.obj: game/ground.h
-CMakeFiles/sdl_test.dir/game/view.cpp.obj: game/gst.h
-CMakeFiles/sdl_test.dir/game/view.cpp.obj: game/menu.h
-CMakeFiles/sdl_test.dir/game/view.cpp.obj: game/player.h
-CMakeFiles/sdl_test.dir/game/view.cpp.obj: game/tech.h
-CMakeFiles/sdl_test.dir/game/view.cpp.obj: game/tile.h
-CMakeFiles/sdl_test.dir/game/view.cpp.obj: game/view.cpp
-CMakeFiles/sdl_test.dir/game/view.cpp.obj: game/view.h
-CMakeFiles/sdl_test.dir/game/view.cpp.obj: umath/vec2.h
-
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_assert.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_atomic.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_audio.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_blendmode.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_clipboard.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_config.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_cpuinfo.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_endian.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_error.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_events.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_filesystem.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_gesture.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_haptic.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_hints.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_joystick.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_keyboard.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_keycode.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_loadso.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_log.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_main.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_messagebox.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_metal.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_mouse.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_mutex.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_pixels.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_platform.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_power.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_quit.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_rect.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_render.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_rwops.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_scancode.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_sensor.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_shape.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_surface.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_system.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_thread.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_timer.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_touch.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_version.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_video.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/begin_code.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/close_code.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: game/constants.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: game/entity.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: game/ground.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: game/gst.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: game/menu.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: game/player.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: game/tech.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: game/tile.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: game/view.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: graphics/cam.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: graphics/graphics.cpp
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: graphics/graphics.h
-CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: umath/vec2.h
-
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_assert.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_atomic.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_audio.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_blendmode.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_clipboard.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_config.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_cpuinfo.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_endian.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_error.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_events.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_filesystem.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_gesture.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_haptic.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_hints.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_joystick.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_keyboard.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_keycode.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_loadso.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_log.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_main.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_messagebox.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_metal.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_mouse.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_mutex.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_pixels.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_platform.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_power.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_quit.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_rect.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_render.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_rwops.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_scancode.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_sensor.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_shape.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_surface.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_system.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_thread.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_timer.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_touch.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_version.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_video.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/begin_code.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/close_code.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: commands/commands.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: game/ai/action.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: game/ai/engine.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: game/ai/evaluator.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: game/ai/generator.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: game/ai/performer.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: game/ai/tactic.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: game/entity.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: game/ground.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: game/gst.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: game/load.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: game/menu.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: game/player.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: game/playercontrol.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: game/tech.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: game/tile.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: game/view.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: graphics/cam.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: graphics/graphics.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: main.cpp
-CMakeFiles/sdl_test.dir/main.cpp.obj: timing/timing.h
-CMakeFiles/sdl_test.dir/main.cpp.obj: umath/vec2.h
-
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_assert.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_atomic.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_audio.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_blendmode.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_clipboard.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_config.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_cpuinfo.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_endian.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_error.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_events.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_filesystem.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_gesture.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_haptic.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_hints.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_joystick.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_keyboard.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_keycode.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_loadso.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_log.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_main.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_messagebox.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_metal.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_mouse.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_mutex.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_pixels.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_platform.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_power.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_quit.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_rect.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_render.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_rwops.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_scancode.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_sensor.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_shape.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_stdinc.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_surface.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_system.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_thread.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_timer.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_touch.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_version.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_video.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/begin_code.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/close_code.h
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: timing/timing.cpp
-CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: timing/timing.h
-
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "MinGW Makefiles" Generator, CMake Version 3.18
+
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_assert.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_atomic.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_audio.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_blendmode.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_clipboard.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_config.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_cpuinfo.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_endian.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_error.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_events.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_filesystem.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_gesture.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_haptic.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_hints.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_joystick.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_keyboard.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_keycode.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_loadso.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_log.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_main.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_messagebox.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_metal.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_mouse.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_mutex.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_pixels.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_platform.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_power.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_quit.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_rect.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_render.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_rwops.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_scancode.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_sensor.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_shape.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_surface.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_system.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_thread.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_timer.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_touch.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_version.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_video.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/begin_code.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: C:/MinGW_libs/include/SDL2/close_code.h
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: commands/commands.cpp
+CMakeFiles/sdl_test.dir/commands/commands.cpp.obj: commands/commands.h
+
+CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj: game/ai/action.cpp
+CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj: game/ai/action.h
+
+CMakeFiles/sdl_test.dir/game/entity.cpp.obj: game/entity.cpp
+CMakeFiles/sdl_test.dir/game/entity.cpp.obj: game/entity.h
+CMakeFiles/sdl_test.dir/game/entity.cpp.obj: umath/vec2.h
+
+CMakeFiles/sdl_test.dir/game/ground.cpp.obj: game/entity.h
+CMakeFiles/sdl_test.dir/game/ground.cpp.obj: game/ground.cpp
+CMakeFiles/sdl_test.dir/game/ground.cpp.obj: game/ground.h
+CMakeFiles/sdl_test.dir/game/ground.cpp.obj: game/gst.h
+CMakeFiles/sdl_test.dir/game/ground.cpp.obj: game/player.h
+CMakeFiles/sdl_test.dir/game/ground.cpp.obj: game/tech.h
+CMakeFiles/sdl_test.dir/game/ground.cpp.obj: game/tile.h
+CMakeFiles/sdl_test.dir/game/ground.cpp.obj: umath/vec2.h
+
+CMakeFiles/sdl_test.dir/game/gst.cpp.obj: game/entity.h
+CMakeFiles/sdl_test.dir/game/gst.cpp.obj: game/ground.h
+CMakeFiles/sdl_test.dir/game/gst.cpp.obj: game/gst.cpp
+CMakeFiles/sdl_test.dir/game/gst.cpp.obj: game/gst.h
+CMakeFiles/sdl_test.dir/game/gst.cpp.obj: game/player.h
+CMakeFiles/sdl_test.dir/game/gst.cpp.obj: game/tech.h
+CMakeFiles/sdl_test.dir/game/gst.cpp.obj: game/tile.h
+CMakeFiles/sdl_test.dir/game/gst.cpp.obj: umath/vec2.h
+
+CMakeFiles/sdl_test.dir/game/load.cpp.obj: game/entity.h
+CMakeFiles/sdl_test.dir/game/load.cpp.obj: game/ground.h
+CMakeFiles/sdl_test.dir/game/load.cpp.obj: game/gst.h
+CMakeFiles/sdl_test.dir/game/load.cpp.obj: game/load.cpp
+CMakeFiles/sdl_test.dir/game/load.cpp.obj: game/load.h
+CMakeFiles/sdl_test.dir/game/load.cpp.obj: game/nlohmann/json.hpp
+CMakeFiles/sdl_test.dir/game/load.cpp.obj: game/player.h
+CMakeFiles/sdl_test.dir/game/load.cpp.obj: game/tech.h
+CMakeFiles/sdl_test.dir/game/load.cpp.obj: game/tile.h
+CMakeFiles/sdl_test.dir/game/load.cpp.obj: umath/vec2.h
+
+CMakeFiles/sdl_test.dir/game/menu.cpp.obj: game/menu.cpp
+CMakeFiles/sdl_test.dir/game/menu.cpp.obj: game/menu.h
+CMakeFiles/sdl_test.dir/game/menu.cpp.obj: game/tech.h
+CMakeFiles/sdl_test.dir/game/menu.cpp.obj: umath/vec2.h
+
+CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/entity.h
+CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/ground.h
+CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/gst.h
+CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/menu.h
+CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/player.h
+CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/playercontrol.cpp
+CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/playercontrol.h
+CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/tech.h
+CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/tile.h
+CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: game/view.h
+CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj: umath/vec2.h
+
+CMakeFiles/sdl_test.dir/game/tech.cpp.obj: game/tech.cpp
+CMakeFiles/sdl_test.dir/game/tech.cpp.obj: game/tech.h
+CMakeFiles/sdl_test.dir/game/tech.cpp.obj: umath/vec2.h
+
+CMakeFiles/sdl_test.dir/game/tile.cpp.obj: game/tile.cpp
+CMakeFiles/sdl_test.dir/game/tile.cpp.obj: game/tile.h
+CMakeFiles/sdl_test.dir/game/tile.cpp.obj: umath/vec2.h
+
+CMakeFiles/sdl_test.dir/game/view.cpp.obj: game/entity.h
+CMakeFiles/sdl_test.dir/game/view.cpp.obj: game/ground.h
+CMakeFiles/sdl_test.dir/game/view.cpp.obj: game/gst.h
+CMakeFiles/sdl_test.dir/game/view.cpp.obj: game/menu.h
+CMakeFiles/sdl_test.dir/game/view.cpp.obj: game/player.h
+CMakeFiles/sdl_test.dir/game/view.cpp.obj: game/tech.h
+CMakeFiles/sdl_test.dir/game/view.cpp.obj: game/tile.h
+CMakeFiles/sdl_test.dir/game/view.cpp.obj: game/view.cpp
+CMakeFiles/sdl_test.dir/game/view.cpp.obj: game/view.h
+CMakeFiles/sdl_test.dir/game/view.cpp.obj: umath/vec2.h
+
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_assert.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_atomic.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_audio.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_blendmode.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_clipboard.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_config.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_cpuinfo.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_endian.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_error.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_events.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_filesystem.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_gesture.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_haptic.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_hints.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_joystick.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_keyboard.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_keycode.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_loadso.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_log.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_main.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_messagebox.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_metal.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_mouse.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_mutex.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_pixels.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_platform.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_power.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_quit.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_rect.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_render.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_rwops.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_scancode.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_sensor.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_shape.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_surface.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_system.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_thread.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_timer.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_touch.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_version.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_video.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/begin_code.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: C:/MinGW_libs/include/SDL2/close_code.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: game/constants.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: game/entity.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: game/ground.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: game/gst.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: game/menu.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: game/player.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: game/tech.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: game/tile.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: game/view.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: graphics/cam.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: graphics/graphics.cpp
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: graphics/graphics.h
+CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj: umath/vec2.h
+
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_assert.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_atomic.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_audio.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_blendmode.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_clipboard.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_config.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_cpuinfo.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_endian.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_error.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_events.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_filesystem.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_gesture.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_haptic.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_hints.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_joystick.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_keyboard.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_keycode.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_loadso.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_log.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_main.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_messagebox.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_metal.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_mouse.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_mutex.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_pixels.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_platform.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_power.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_quit.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_rect.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_render.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_rwops.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_scancode.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_sensor.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_shape.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_surface.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_system.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_thread.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_timer.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_touch.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_version.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_video.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/begin_code.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: C:/MinGW_libs/include/SDL2/close_code.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: commands/commands.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: game/ai/action.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: game/ai/engine.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: game/ai/evaluator.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: game/ai/generator.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: game/ai/performer.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: game/ai/tactic.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: game/entity.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: game/ground.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: game/gst.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: game/load.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: game/menu.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: game/player.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: game/playercontrol.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: game/tech.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: game/tile.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: game/view.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: graphics/cam.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: graphics/graphics.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: main.cpp
+CMakeFiles/sdl_test.dir/main.cpp.obj: timing/timing.h
+CMakeFiles/sdl_test.dir/main.cpp.obj: umath/vec2.h
+
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_assert.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_atomic.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_audio.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_blendmode.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_clipboard.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_config.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_cpuinfo.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_endian.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_error.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_events.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_filesystem.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_gamecontroller.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_gesture.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_haptic.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_hints.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_joystick.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_keyboard.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_keycode.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_loadso.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_log.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_main.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_messagebox.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_metal.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_mouse.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_mutex.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_pixels.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_platform.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_power.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_quit.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_rect.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_render.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_rwops.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_scancode.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_sensor.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_shape.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_stdinc.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_surface.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_system.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_thread.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_timer.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_touch.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_version.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/SDL_video.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/begin_code.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: C:/MinGW_libs/include/SDL2/close_code.h
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: timing/timing.cpp
+CMakeFiles/sdl_test.dir/timing/timing.cpp.obj: timing/timing.h
+
diff --git a/CMakeFiles/sdl_test.dir/flags.make b/CMakeFiles/sdl_test.dir/flags.make
index 4b02a46..8773aaa 100644
--- a/CMakeFiles/sdl_test.dir/flags.make
+++ b/CMakeFiles/sdl_test.dir/flags.make
@@ -1,10 +1,10 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "MinGW Makefiles" Generator, CMake Version 3.18
-
-# compile CXX with C:/MinGW64/bin/g++.exe
-CXX_DEFINES =
-
-CXX_INCLUDES = @CMakeFiles/sdl_test.dir/includes_CXX.rsp
-
-CXX_FLAGS = -std=c++11
-
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "MinGW Makefiles" Generator, CMake Version 3.18
+
+# compile CXX with C:/MinGW64/bin/g++.exe
+CXX_DEFINES =
+
+CXX_INCLUDES = @CMakeFiles/sdl_test.dir/includes_CXX.rsp
+
+CXX_FLAGS = -std=c++11
+
diff --git a/CMakeFiles/sdl_test.dir/includes_CXX.rsp b/CMakeFiles/sdl_test.dir/includes_CXX.rsp
index ee67c49..2557c64 100644
--- a/CMakeFiles/sdl_test.dir/includes_CXX.rsp
+++ b/CMakeFiles/sdl_test.dir/includes_CXX.rsp
@@ -1 +1 @@
--IC:/MinGW_libs/include
+-IC:/MinGW_libs/include
diff --git a/CMakeFiles/sdl_test.dir/link.txt b/CMakeFiles/sdl_test.dir/link.txt
index 84a2ca2..4b46697 100644
--- a/CMakeFiles/sdl_test.dir/link.txt
+++ b/CMakeFiles/sdl_test.dir/link.txt
@@ -1,3 +1,3 @@
-"C:\Program Files\CMake\bin\cmake.exe" -E rm -f CMakeFiles\sdl_test.dir/objects.a
-C:\MinGW64\bin\ar.exe cr CMakeFiles\sdl_test.dir/objects.a @CMakeFiles\sdl_test.dir\objects1.rsp
-C:\MinGW64\bin\g++.exe -Wl,--whole-archive CMakeFiles\sdl_test.dir/objects.a -Wl,--no-whole-archive -o build\sdl_test.exe -Wl,--out-implib,build\libsdl_test.dll.a -Wl,--major-image-version,0,--minor-image-version,0 @CMakeFiles\sdl_test.dir\linklibs.rsp
+"C:\Program Files\CMake\bin\cmake.exe" -E rm -f CMakeFiles\sdl_test.dir/objects.a
+C:\MinGW64\bin\ar.exe cr CMakeFiles\sdl_test.dir/objects.a @CMakeFiles\sdl_test.dir\objects1.rsp
+C:\MinGW64\bin\g++.exe -Wl,--whole-archive CMakeFiles\sdl_test.dir/objects.a -Wl,--no-whole-archive -o build\sdl_test.exe -Wl,--out-implib,build\libsdl_test.dll.a -Wl,--major-image-version,0,--minor-image-version,0 @CMakeFiles\sdl_test.dir\linklibs.rsp
diff --git a/CMakeFiles/sdl_test.dir/linklibs.rsp b/CMakeFiles/sdl_test.dir/linklibs.rsp
index 7824870..7c80ae1 100644
--- a/CMakeFiles/sdl_test.dir/linklibs.rsp
+++ b/CMakeFiles/sdl_test.dir/linklibs.rsp
@@ -1 +1 @@
- -LC:/MinGW_libs/lib -lSDL2main -lSDL2 -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
+ -LC:/MinGW_libs/lib -lSDL2main -lSDL2 -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
diff --git a/CMakeFiles/sdl_test.dir/objects1.rsp b/CMakeFiles/sdl_test.dir/objects1.rsp
index 764058d..8a59fac 100644
--- a/CMakeFiles/sdl_test.dir/objects1.rsp
+++ b/CMakeFiles/sdl_test.dir/objects1.rsp
@@ -1 +1 @@
-CMakeFiles/sdl_test.dir/main.cpp.obj CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj CMakeFiles/sdl_test.dir/commands/commands.cpp.obj CMakeFiles/sdl_test.dir/timing/timing.cpp.obj CMakeFiles/sdl_test.dir/game/entity.cpp.obj CMakeFiles/sdl_test.dir/game/ground.cpp.obj CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj CMakeFiles/sdl_test.dir/game/gst.cpp.obj CMakeFiles/sdl_test.dir/game/view.cpp.obj CMakeFiles/sdl_test.dir/game/menu.cpp.obj CMakeFiles/sdl_test.dir/game/tile.cpp.obj CMakeFiles/sdl_test.dir/game/load.cpp.obj CMakeFiles/sdl_test.dir/game/tech.cpp.obj CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj
+CMakeFiles/sdl_test.dir/main.cpp.obj CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj CMakeFiles/sdl_test.dir/commands/commands.cpp.obj CMakeFiles/sdl_test.dir/timing/timing.cpp.obj CMakeFiles/sdl_test.dir/game/entity.cpp.obj CMakeFiles/sdl_test.dir/game/ground.cpp.obj CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj CMakeFiles/sdl_test.dir/game/gst.cpp.obj CMakeFiles/sdl_test.dir/game/view.cpp.obj CMakeFiles/sdl_test.dir/game/menu.cpp.obj CMakeFiles/sdl_test.dir/game/tile.cpp.obj CMakeFiles/sdl_test.dir/game/load.cpp.obj CMakeFiles/sdl_test.dir/game/tech.cpp.obj CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj
diff --git a/CMakeFiles/sdl_test.dir/progress.make b/CMakeFiles/sdl_test.dir/progress.make
index 1029366..21578a7 100644
--- a/CMakeFiles/sdl_test.dir/progress.make
+++ b/CMakeFiles/sdl_test.dir/progress.make
@@ -1,16 +1,16 @@
-CMAKE_PROGRESS_1 = 1
-CMAKE_PROGRESS_2 = 2
-CMAKE_PROGRESS_3 = 3
-CMAKE_PROGRESS_4 = 4
-CMAKE_PROGRESS_5 = 5
-CMAKE_PROGRESS_6 = 6
-CMAKE_PROGRESS_7 = 7
-CMAKE_PROGRESS_8 = 8
-CMAKE_PROGRESS_9 = 9
-CMAKE_PROGRESS_10 = 10
-CMAKE_PROGRESS_11 = 11
-CMAKE_PROGRESS_12 = 12
-CMAKE_PROGRESS_13 = 13
-CMAKE_PROGRESS_14 = 14
-CMAKE_PROGRESS_15 = 15
-
+CMAKE_PROGRESS_1 = 1
+CMAKE_PROGRESS_2 = 2
+CMAKE_PROGRESS_3 = 3
+CMAKE_PROGRESS_4 = 4
+CMAKE_PROGRESS_5 = 5
+CMAKE_PROGRESS_6 = 6
+CMAKE_PROGRESS_7 = 7
+CMAKE_PROGRESS_8 = 8
+CMAKE_PROGRESS_9 = 9
+CMAKE_PROGRESS_10 = 10
+CMAKE_PROGRESS_11 = 11
+CMAKE_PROGRESS_12 = 12
+CMAKE_PROGRESS_13 = 13
+CMAKE_PROGRESS_14 = 14
+CMAKE_PROGRESS_15 = 15
+
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ed7acb4..b91379d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,36 +1,36 @@
-cmake_minimum_required(VERSION 3.16)
-project(sdl_test VERSION 1.0.0)
-
-set(CMAKE_CXX_STANDARD 11)
-set(CMAKE_CXX_STANDARD_REQUIRED YES)
-set(CMAKE_CXX_EXTENSIONS OFF)
-
-set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/build)
-
-add_executable(sdl_test
- main.cpp
- graphics/graphics.cpp graphics/graphics.h
- graphics/cam.h
- commands/commands.cpp commands/commands.h
- timing/timing.cpp timing/timing.h
- game/entity.cpp game/entity.h
- game/ground.cpp game/ground.h
- game/playercontrol.cpp game/playercontrol.h
- game/gst.cpp game/gst.h
- game/view.cpp game/view.h
- game/menu.cpp game/menu.h
- game/tile.cpp game/tile.h
- game/load.cpp game/load.h
- game/tech.cpp game/tech.h
- game/player.h
- game/constants.h
- game/ai/action.cpp game/ai/action.h
- game/ai/generator.h
- game/ai/engine.h
- game/ai/evaluator.h
- game/ai/tactic.h
- umath/vec2.h)
-
-target_include_directories(sdl_test PUBLIC "C:/MinGW_libs/include")
-target_link_libraries(sdl_test -LC:/MinGW_libs/lib)
+cmake_minimum_required(VERSION 3.16)
+project(sdl_test VERSION 1.0.0)
+
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD_REQUIRED YES)
+set(CMAKE_CXX_EXTENSIONS OFF)
+
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/build)
+
+add_executable(sdl_test
+ main.cpp
+ graphics/graphics.cpp graphics/graphics.h
+ graphics/cam.h
+ commands/commands.cpp commands/commands.h
+ timing/timing.cpp timing/timing.h
+ game/entity.cpp game/entity.h
+ game/ground.cpp game/ground.h
+ game/playercontrol.cpp game/playercontrol.h
+ game/gst.cpp game/gst.h
+ game/view.cpp game/view.h
+ game/menu.cpp game/menu.h
+ game/tile.cpp game/tile.h
+ game/load.cpp game/load.h
+ game/tech.cpp game/tech.h
+ game/player.h
+ game/constants.h
+ game/ai/action.cpp game/ai/action.h
+ game/ai/generator.h
+ game/ai/engine.h
+ game/ai/evaluator.h
+ game/ai/tactic.h
+ umath/vec2.h)
+
+target_include_directories(sdl_test PUBLIC "C:/MinGW_libs/include")
+target_link_libraries(sdl_test -LC:/MinGW_libs/lib)
target_link_libraries(sdl_test -lSDL2main -lSDL2) \ No newline at end of file
diff --git a/Makefile b/Makefile
index 52a8d4c..45343ca 100644
--- a/Makefile
+++ b/Makefile
@@ -1,586 +1,586 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "MinGW Makefiles" Generator, CMake Version 3.18
-
-# Default target executed when no arguments are given to make.
-default_target: all
-
-.PHONY : default_target
-
-# Allow only one "make -f Makefile2" at a time, but pass parallelism.
-.NOTPARALLEL:
-
-
-#=============================================================================
-# Special targets provided by cmake.
-
-# Disable implicit rules so canonical targets will work.
-.SUFFIXES:
-
-
-# Disable VCS-based implicit rules.
-% : %,v
-
-
-# Disable VCS-based implicit rules.
-% : RCS/%
-
-
-# Disable VCS-based implicit rules.
-% : RCS/%,v
-
-
-# Disable VCS-based implicit rules.
-% : SCCS/s.%
-
-
-# Disable VCS-based implicit rules.
-% : s.%
-
-
-.SUFFIXES: .hpux_make_needs_suffix_list
-
-
-# Command-line flag to silence nested $(MAKE).
-$(VERBOSE)MAKESILENT = -s
-
-#Suppress display of executed commands.
-$(VERBOSE).SILENT:
-
-# A target that is always out of date.
-cmake_force:
-
-.PHONY : cmake_force
-
-#=============================================================================
-# Set environment variables for the build.
-
-SHELL = cmd.exe
-
-# The CMake executable.
-CMAKE_COMMAND = "C:\Program Files\CMake\bin\cmake.exe"
-
-# The command to remove a file.
-RM = "C:\Program Files\CMake\bin\cmake.exe" -E rm -f
-
-# Escaping for special characters.
-EQUALS = =
-
-# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = C:\Users\jaksk\Desktop\dev\_cpp\age
-
-# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = C:\Users\jaksk\Desktop\dev\_cpp\age
-
-#=============================================================================
-# Targets provided globally by CMake.
-
-# Special rule for the target edit_cache
-edit_cache:
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
- "C:\Program Files\CMake\bin\cmake-gui.exe" -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
-.PHONY : edit_cache
-
-# Special rule for the target edit_cache
-edit_cache/fast: edit_cache
-
-.PHONY : edit_cache/fast
-
-# Special rule for the target rebuild_cache
-rebuild_cache:
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
- "C:\Program Files\CMake\bin\cmake.exe" --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
-.PHONY : rebuild_cache
-
-# Special rule for the target rebuild_cache
-rebuild_cache/fast: rebuild_cache
-
-.PHONY : rebuild_cache/fast
-
-# The main all target
-all: cmake_check_build_system
- $(CMAKE_COMMAND) -E cmake_progress_start C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles C:\Users\jaksk\Desktop\dev\_cpp\age\\CMakeFiles\progress.marks
- $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 all
- $(CMAKE_COMMAND) -E cmake_progress_start C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles 0
-.PHONY : all
-
-# The main clean target
-clean:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 clean
-.PHONY : clean
-
-# The main clean target
-clean/fast: clean
-
-.PHONY : clean/fast
-
-# Prepare targets for installation.
-preinstall: all
- $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 preinstall
-.PHONY : preinstall
-
-# Prepare targets for installation.
-preinstall/fast:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 preinstall
-.PHONY : preinstall/fast
-
-# clear depends
-depend:
- $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles\Makefile.cmake 1
-.PHONY : depend
-
-#=============================================================================
-# Target rules for targets named sdl_test
-
-# Build rule for target.
-sdl_test: cmake_check_build_system
- $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 sdl_test
-.PHONY : sdl_test
-
-# fast build rule for target.
-sdl_test/fast:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/build
-.PHONY : sdl_test/fast
-
-commands/commands.obj: commands/commands.cpp.obj
-
-.PHONY : commands/commands.obj
-
-# target to build an object file
-commands/commands.cpp.obj:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/commands/commands.cpp.obj
-.PHONY : commands/commands.cpp.obj
-
-commands/commands.i: commands/commands.cpp.i
-
-.PHONY : commands/commands.i
-
-# target to preprocess a source file
-commands/commands.cpp.i:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/commands/commands.cpp.i
-.PHONY : commands/commands.cpp.i
-
-commands/commands.s: commands/commands.cpp.s
-
-.PHONY : commands/commands.s
-
-# target to generate assembly for a file
-commands/commands.cpp.s:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/commands/commands.cpp.s
-.PHONY : commands/commands.cpp.s
-
-game/ai/action.obj: game/ai/action.cpp.obj
-
-.PHONY : game/ai/action.obj
-
-# target to build an object file
-game/ai/action.cpp.obj:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj
-.PHONY : game/ai/action.cpp.obj
-
-game/ai/action.i: game/ai/action.cpp.i
-
-.PHONY : game/ai/action.i
-
-# target to preprocess a source file
-game/ai/action.cpp.i:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/ai/action.cpp.i
-.PHONY : game/ai/action.cpp.i
-
-game/ai/action.s: game/ai/action.cpp.s
-
-.PHONY : game/ai/action.s
-
-# target to generate assembly for a file
-game/ai/action.cpp.s:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/ai/action.cpp.s
-.PHONY : game/ai/action.cpp.s
-
-game/entity.obj: game/entity.cpp.obj
-
-.PHONY : game/entity.obj
-
-# target to build an object file
-game/entity.cpp.obj:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/entity.cpp.obj
-.PHONY : game/entity.cpp.obj
-
-game/entity.i: game/entity.cpp.i
-
-.PHONY : game/entity.i
-
-# target to preprocess a source file
-game/entity.cpp.i:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/entity.cpp.i
-.PHONY : game/entity.cpp.i
-
-game/entity.s: game/entity.cpp.s
-
-.PHONY : game/entity.s
-
-# target to generate assembly for a file
-game/entity.cpp.s:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/entity.cpp.s
-.PHONY : game/entity.cpp.s
-
-game/ground.obj: game/ground.cpp.obj
-
-.PHONY : game/ground.obj
-
-# target to build an object file
-game/ground.cpp.obj:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/ground.cpp.obj
-.PHONY : game/ground.cpp.obj
-
-game/ground.i: game/ground.cpp.i
-
-.PHONY : game/ground.i
-
-# target to preprocess a source file
-game/ground.cpp.i:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/ground.cpp.i
-.PHONY : game/ground.cpp.i
-
-game/ground.s: game/ground.cpp.s
-
-.PHONY : game/ground.s
-
-# target to generate assembly for a file
-game/ground.cpp.s:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/ground.cpp.s
-.PHONY : game/ground.cpp.s
-
-game/gst.obj: game/gst.cpp.obj
-
-.PHONY : game/gst.obj
-
-# target to build an object file
-game/gst.cpp.obj:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/gst.cpp.obj
-.PHONY : game/gst.cpp.obj
-
-game/gst.i: game/gst.cpp.i
-
-.PHONY : game/gst.i
-
-# target to preprocess a source file
-game/gst.cpp.i:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/gst.cpp.i
-.PHONY : game/gst.cpp.i
-
-game/gst.s: game/gst.cpp.s
-
-.PHONY : game/gst.s
-
-# target to generate assembly for a file
-game/gst.cpp.s:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/gst.cpp.s
-.PHONY : game/gst.cpp.s
-
-game/load.obj: game/load.cpp.obj
-
-.PHONY : game/load.obj
-
-# target to build an object file
-game/load.cpp.obj:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/load.cpp.obj
-.PHONY : game/load.cpp.obj
-
-game/load.i: game/load.cpp.i
-
-.PHONY : game/load.i
-
-# target to preprocess a source file
-game/load.cpp.i:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/load.cpp.i
-.PHONY : game/load.cpp.i
-
-game/load.s: game/load.cpp.s
-
-.PHONY : game/load.s
-
-# target to generate assembly for a file
-game/load.cpp.s:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/load.cpp.s
-.PHONY : game/load.cpp.s
-
-game/menu.obj: game/menu.cpp.obj
-
-.PHONY : game/menu.obj
-
-# target to build an object file
-game/menu.cpp.obj:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/menu.cpp.obj
-.PHONY : game/menu.cpp.obj
-
-game/menu.i: game/menu.cpp.i
-
-.PHONY : game/menu.i
-
-# target to preprocess a source file
-game/menu.cpp.i:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/menu.cpp.i
-.PHONY : game/menu.cpp.i
-
-game/menu.s: game/menu.cpp.s
-
-.PHONY : game/menu.s
-
-# target to generate assembly for a file
-game/menu.cpp.s:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/menu.cpp.s
-.PHONY : game/menu.cpp.s
-
-game/playercontrol.obj: game/playercontrol.cpp.obj
-
-.PHONY : game/playercontrol.obj
-
-# target to build an object file
-game/playercontrol.cpp.obj:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj
-.PHONY : game/playercontrol.cpp.obj
-
-game/playercontrol.i: game/playercontrol.cpp.i
-
-.PHONY : game/playercontrol.i
-
-# target to preprocess a source file
-game/playercontrol.cpp.i:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/playercontrol.cpp.i
-.PHONY : game/playercontrol.cpp.i
-
-game/playercontrol.s: game/playercontrol.cpp.s
-
-.PHONY : game/playercontrol.s
-
-# target to generate assembly for a file
-game/playercontrol.cpp.s:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/playercontrol.cpp.s
-.PHONY : game/playercontrol.cpp.s
-
-game/tech.obj: game/tech.cpp.obj
-
-.PHONY : game/tech.obj
-
-# target to build an object file
-game/tech.cpp.obj:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/tech.cpp.obj
-.PHONY : game/tech.cpp.obj
-
-game/tech.i: game/tech.cpp.i
-
-.PHONY : game/tech.i
-
-# target to preprocess a source file
-game/tech.cpp.i:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/tech.cpp.i
-.PHONY : game/tech.cpp.i
-
-game/tech.s: game/tech.cpp.s
-
-.PHONY : game/tech.s
-
-# target to generate assembly for a file
-game/tech.cpp.s:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/tech.cpp.s
-.PHONY : game/tech.cpp.s
-
-game/tile.obj: game/tile.cpp.obj
-
-.PHONY : game/tile.obj
-
-# target to build an object file
-game/tile.cpp.obj:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/tile.cpp.obj
-.PHONY : game/tile.cpp.obj
-
-game/tile.i: game/tile.cpp.i
-
-.PHONY : game/tile.i
-
-# target to preprocess a source file
-game/tile.cpp.i:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/tile.cpp.i
-.PHONY : game/tile.cpp.i
-
-game/tile.s: game/tile.cpp.s
-
-.PHONY : game/tile.s
-
-# target to generate assembly for a file
-game/tile.cpp.s:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/tile.cpp.s
-.PHONY : game/tile.cpp.s
-
-game/view.obj: game/view.cpp.obj
-
-.PHONY : game/view.obj
-
-# target to build an object file
-game/view.cpp.obj:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/view.cpp.obj
-.PHONY : game/view.cpp.obj
-
-game/view.i: game/view.cpp.i
-
-.PHONY : game/view.i
-
-# target to preprocess a source file
-game/view.cpp.i:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/view.cpp.i
-.PHONY : game/view.cpp.i
-
-game/view.s: game/view.cpp.s
-
-.PHONY : game/view.s
-
-# target to generate assembly for a file
-game/view.cpp.s:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/view.cpp.s
-.PHONY : game/view.cpp.s
-
-graphics/graphics.obj: graphics/graphics.cpp.obj
-
-.PHONY : graphics/graphics.obj
-
-# target to build an object file
-graphics/graphics.cpp.obj:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj
-.PHONY : graphics/graphics.cpp.obj
-
-graphics/graphics.i: graphics/graphics.cpp.i
-
-.PHONY : graphics/graphics.i
-
-# target to preprocess a source file
-graphics/graphics.cpp.i:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/graphics/graphics.cpp.i
-.PHONY : graphics/graphics.cpp.i
-
-graphics/graphics.s: graphics/graphics.cpp.s
-
-.PHONY : graphics/graphics.s
-
-# target to generate assembly for a file
-graphics/graphics.cpp.s:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/graphics/graphics.cpp.s
-.PHONY : graphics/graphics.cpp.s
-
-main.obj: main.cpp.obj
-
-.PHONY : main.obj
-
-# target to build an object file
-main.cpp.obj:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/main.cpp.obj
-.PHONY : main.cpp.obj
-
-main.i: main.cpp.i
-
-.PHONY : main.i
-
-# target to preprocess a source file
-main.cpp.i:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/main.cpp.i
-.PHONY : main.cpp.i
-
-main.s: main.cpp.s
-
-.PHONY : main.s
-
-# target to generate assembly for a file
-main.cpp.s:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/main.cpp.s
-.PHONY : main.cpp.s
-
-timing/timing.obj: timing/timing.cpp.obj
-
-.PHONY : timing/timing.obj
-
-# target to build an object file
-timing/timing.cpp.obj:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/timing/timing.cpp.obj
-.PHONY : timing/timing.cpp.obj
-
-timing/timing.i: timing/timing.cpp.i
-
-.PHONY : timing/timing.i
-
-# target to preprocess a source file
-timing/timing.cpp.i:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/timing/timing.cpp.i
-.PHONY : timing/timing.cpp.i
-
-timing/timing.s: timing/timing.cpp.s
-
-.PHONY : timing/timing.s
-
-# target to generate assembly for a file
-timing/timing.cpp.s:
- $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/timing/timing.cpp.s
-.PHONY : timing/timing.cpp.s
-
-# Help Target
-help:
- @echo The following are some of the valid targets for this Makefile:
- @echo ... all (the default if no target is provided)
- @echo ... clean
- @echo ... depend
- @echo ... edit_cache
- @echo ... rebuild_cache
- @echo ... sdl_test
- @echo ... commands/commands.obj
- @echo ... commands/commands.i
- @echo ... commands/commands.s
- @echo ... game/ai/action.obj
- @echo ... game/ai/action.i
- @echo ... game/ai/action.s
- @echo ... game/entity.obj
- @echo ... game/entity.i
- @echo ... game/entity.s
- @echo ... game/ground.obj
- @echo ... game/ground.i
- @echo ... game/ground.s
- @echo ... game/gst.obj
- @echo ... game/gst.i
- @echo ... game/gst.s
- @echo ... game/load.obj
- @echo ... game/load.i
- @echo ... game/load.s
- @echo ... game/menu.obj
- @echo ... game/menu.i
- @echo ... game/menu.s
- @echo ... game/playercontrol.obj
- @echo ... game/playercontrol.i
- @echo ... game/playercontrol.s
- @echo ... game/tech.obj
- @echo ... game/tech.i
- @echo ... game/tech.s
- @echo ... game/tile.obj
- @echo ... game/tile.i
- @echo ... game/tile.s
- @echo ... game/view.obj
- @echo ... game/view.i
- @echo ... game/view.s
- @echo ... graphics/graphics.obj
- @echo ... graphics/graphics.i
- @echo ... graphics/graphics.s
- @echo ... main.obj
- @echo ... main.i
- @echo ... main.s
- @echo ... timing/timing.obj
- @echo ... timing/timing.i
- @echo ... timing/timing.s
-.PHONY : help
-
-
-
-#=============================================================================
-# Special targets to cleanup operation of make.
-
-# Special rule to run CMake to check the build system integrity.
-# No rule that depends on this can have commands that come from listfiles
-# because they might be regenerated.
-cmake_check_build_system:
- $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles\Makefile.cmake 0
-.PHONY : cmake_check_build_system
-
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "MinGW Makefiles" Generator, CMake Version 3.18
+
+# Default target executed when no arguments are given to make.
+default_target: all
+
+.PHONY : default_target
+
+# Allow only one "make -f Makefile2" at a time, but pass parallelism.
+.NOTPARALLEL:
+
+
+#=============================================================================
+# Special targets provided by cmake.
+
+# Disable implicit rules so canonical targets will work.
+.SUFFIXES:
+
+
+# Disable VCS-based implicit rules.
+% : %,v
+
+
+# Disable VCS-based implicit rules.
+% : RCS/%
+
+
+# Disable VCS-based implicit rules.
+% : RCS/%,v
+
+
+# Disable VCS-based implicit rules.
+% : SCCS/s.%
+
+
+# Disable VCS-based implicit rules.
+% : s.%
+
+
+.SUFFIXES: .hpux_make_needs_suffix_list
+
+
+# Command-line flag to silence nested $(MAKE).
+$(VERBOSE)MAKESILENT = -s
+
+#Suppress display of executed commands.
+$(VERBOSE).SILENT:
+
+# A target that is always out of date.
+cmake_force:
+
+.PHONY : cmake_force
+
+#=============================================================================
+# Set environment variables for the build.
+
+SHELL = cmd.exe
+
+# The CMake executable.
+CMAKE_COMMAND = "C:\Program Files\CMake\bin\cmake.exe"
+
+# The command to remove a file.
+RM = "C:\Program Files\CMake\bin\cmake.exe" -E rm -f
+
+# Escaping for special characters.
+EQUALS = =
+
+# The top-level source directory on which CMake was run.
+CMAKE_SOURCE_DIR = C:\Users\jaksk\Desktop\dev\_cpp\age
+
+# The top-level build directory on which CMake was run.
+CMAKE_BINARY_DIR = C:\Users\jaksk\Desktop\dev\_cpp\age
+
+#=============================================================================
+# Targets provided globally by CMake.
+
+# Special rule for the target edit_cache
+edit_cache:
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
+ "C:\Program Files\CMake\bin\cmake-gui.exe" -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : edit_cache
+
+# Special rule for the target edit_cache
+edit_cache/fast: edit_cache
+
+.PHONY : edit_cache/fast
+
+# Special rule for the target rebuild_cache
+rebuild_cache:
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
+ "C:\Program Files\CMake\bin\cmake.exe" --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+.PHONY : rebuild_cache
+
+# Special rule for the target rebuild_cache
+rebuild_cache/fast: rebuild_cache
+
+.PHONY : rebuild_cache/fast
+
+# The main all target
+all: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles C:\Users\jaksk\Desktop\dev\_cpp\age\\CMakeFiles\progress.marks
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 all
+ $(CMAKE_COMMAND) -E cmake_progress_start C:\Users\jaksk\Desktop\dev\_cpp\age\CMakeFiles 0
+.PHONY : all
+
+# The main clean target
+clean:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 clean
+.PHONY : clean
+
+# The main clean target
+clean/fast: clean
+
+.PHONY : clean/fast
+
+# Prepare targets for installation.
+preinstall: all
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 preinstall
+.PHONY : preinstall
+
+# Prepare targets for installation.
+preinstall/fast:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 preinstall
+.PHONY : preinstall/fast
+
+# clear depends
+depend:
+ $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles\Makefile.cmake 1
+.PHONY : depend
+
+#=============================================================================
+# Target rules for targets named sdl_test
+
+# Build rule for target.
+sdl_test: cmake_check_build_system
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\Makefile2 sdl_test
+.PHONY : sdl_test
+
+# fast build rule for target.
+sdl_test/fast:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/build
+.PHONY : sdl_test/fast
+
+commands/commands.obj: commands/commands.cpp.obj
+
+.PHONY : commands/commands.obj
+
+# target to build an object file
+commands/commands.cpp.obj:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/commands/commands.cpp.obj
+.PHONY : commands/commands.cpp.obj
+
+commands/commands.i: commands/commands.cpp.i
+
+.PHONY : commands/commands.i
+
+# target to preprocess a source file
+commands/commands.cpp.i:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/commands/commands.cpp.i
+.PHONY : commands/commands.cpp.i
+
+commands/commands.s: commands/commands.cpp.s
+
+.PHONY : commands/commands.s
+
+# target to generate assembly for a file
+commands/commands.cpp.s:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/commands/commands.cpp.s
+.PHONY : commands/commands.cpp.s
+
+game/ai/action.obj: game/ai/action.cpp.obj
+
+.PHONY : game/ai/action.obj
+
+# target to build an object file
+game/ai/action.cpp.obj:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/ai/action.cpp.obj
+.PHONY : game/ai/action.cpp.obj
+
+game/ai/action.i: game/ai/action.cpp.i
+
+.PHONY : game/ai/action.i
+
+# target to preprocess a source file
+game/ai/action.cpp.i:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/ai/action.cpp.i
+.PHONY : game/ai/action.cpp.i
+
+game/ai/action.s: game/ai/action.cpp.s
+
+.PHONY : game/ai/action.s
+
+# target to generate assembly for a file
+game/ai/action.cpp.s:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/ai/action.cpp.s
+.PHONY : game/ai/action.cpp.s
+
+game/entity.obj: game/entity.cpp.obj
+
+.PHONY : game/entity.obj
+
+# target to build an object file
+game/entity.cpp.obj:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/entity.cpp.obj
+.PHONY : game/entity.cpp.obj
+
+game/entity.i: game/entity.cpp.i
+
+.PHONY : game/entity.i
+
+# target to preprocess a source file
+game/entity.cpp.i:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/entity.cpp.i
+.PHONY : game/entity.cpp.i
+
+game/entity.s: game/entity.cpp.s
+
+.PHONY : game/entity.s
+
+# target to generate assembly for a file
+game/entity.cpp.s:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/entity.cpp.s
+.PHONY : game/entity.cpp.s
+
+game/ground.obj: game/ground.cpp.obj
+
+.PHONY : game/ground.obj
+
+# target to build an object file
+game/ground.cpp.obj:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/ground.cpp.obj
+.PHONY : game/ground.cpp.obj
+
+game/ground.i: game/ground.cpp.i
+
+.PHONY : game/ground.i
+
+# target to preprocess a source file
+game/ground.cpp.i:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/ground.cpp.i
+.PHONY : game/ground.cpp.i
+
+game/ground.s: game/ground.cpp.s
+
+.PHONY : game/ground.s
+
+# target to generate assembly for a file
+game/ground.cpp.s:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/ground.cpp.s
+.PHONY : game/ground.cpp.s
+
+game/gst.obj: game/gst.cpp.obj
+
+.PHONY : game/gst.obj
+
+# target to build an object file
+game/gst.cpp.obj:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/gst.cpp.obj
+.PHONY : game/gst.cpp.obj
+
+game/gst.i: game/gst.cpp.i
+
+.PHONY : game/gst.i
+
+# target to preprocess a source file
+game/gst.cpp.i:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/gst.cpp.i
+.PHONY : game/gst.cpp.i
+
+game/gst.s: game/gst.cpp.s
+
+.PHONY : game/gst.s
+
+# target to generate assembly for a file
+game/gst.cpp.s:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/gst.cpp.s
+.PHONY : game/gst.cpp.s
+
+game/load.obj: game/load.cpp.obj
+
+.PHONY : game/load.obj
+
+# target to build an object file
+game/load.cpp.obj:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/load.cpp.obj
+.PHONY : game/load.cpp.obj
+
+game/load.i: game/load.cpp.i
+
+.PHONY : game/load.i
+
+# target to preprocess a source file
+game/load.cpp.i:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/load.cpp.i
+.PHONY : game/load.cpp.i
+
+game/load.s: game/load.cpp.s
+
+.PHONY : game/load.s
+
+# target to generate assembly for a file
+game/load.cpp.s:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/load.cpp.s
+.PHONY : game/load.cpp.s
+
+game/menu.obj: game/menu.cpp.obj
+
+.PHONY : game/menu.obj
+
+# target to build an object file
+game/menu.cpp.obj:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/menu.cpp.obj
+.PHONY : game/menu.cpp.obj
+
+game/menu.i: game/menu.cpp.i
+
+.PHONY : game/menu.i
+
+# target to preprocess a source file
+game/menu.cpp.i:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/menu.cpp.i
+.PHONY : game/menu.cpp.i
+
+game/menu.s: game/menu.cpp.s
+
+.PHONY : game/menu.s
+
+# target to generate assembly for a file
+game/menu.cpp.s:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/menu.cpp.s
+.PHONY : game/menu.cpp.s
+
+game/playercontrol.obj: game/playercontrol.cpp.obj
+
+.PHONY : game/playercontrol.obj
+
+# target to build an object file
+game/playercontrol.cpp.obj:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/playercontrol.cpp.obj
+.PHONY : game/playercontrol.cpp.obj
+
+game/playercontrol.i: game/playercontrol.cpp.i
+
+.PHONY : game/playercontrol.i
+
+# target to preprocess a source file
+game/playercontrol.cpp.i:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/playercontrol.cpp.i
+.PHONY : game/playercontrol.cpp.i
+
+game/playercontrol.s: game/playercontrol.cpp.s
+
+.PHONY : game/playercontrol.s
+
+# target to generate assembly for a file
+game/playercontrol.cpp.s:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/playercontrol.cpp.s
+.PHONY : game/playercontrol.cpp.s
+
+game/tech.obj: game/tech.cpp.obj
+
+.PHONY : game/tech.obj
+
+# target to build an object file
+game/tech.cpp.obj:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/tech.cpp.obj
+.PHONY : game/tech.cpp.obj
+
+game/tech.i: game/tech.cpp.i
+
+.PHONY : game/tech.i
+
+# target to preprocess a source file
+game/tech.cpp.i:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/tech.cpp.i
+.PHONY : game/tech.cpp.i
+
+game/tech.s: game/tech.cpp.s
+
+.PHONY : game/tech.s
+
+# target to generate assembly for a file
+game/tech.cpp.s:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/tech.cpp.s
+.PHONY : game/tech.cpp.s
+
+game/tile.obj: game/tile.cpp.obj
+
+.PHONY : game/tile.obj
+
+# target to build an object file
+game/tile.cpp.obj:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/tile.cpp.obj
+.PHONY : game/tile.cpp.obj
+
+game/tile.i: game/tile.cpp.i
+
+.PHONY : game/tile.i
+
+# target to preprocess a source file
+game/tile.cpp.i:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/tile.cpp.i
+.PHONY : game/tile.cpp.i
+
+game/tile.s: game/tile.cpp.s
+
+.PHONY : game/tile.s
+
+# target to generate assembly for a file
+game/tile.cpp.s:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/tile.cpp.s
+.PHONY : game/tile.cpp.s
+
+game/view.obj: game/view.cpp.obj
+
+.PHONY : game/view.obj
+
+# target to build an object file
+game/view.cpp.obj:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/view.cpp.obj
+.PHONY : game/view.cpp.obj
+
+game/view.i: game/view.cpp.i
+
+.PHONY : game/view.i
+
+# target to preprocess a source file
+game/view.cpp.i:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/view.cpp.i
+.PHONY : game/view.cpp.i
+
+game/view.s: game/view.cpp.s
+
+.PHONY : game/view.s
+
+# target to generate assembly for a file
+game/view.cpp.s:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/game/view.cpp.s
+.PHONY : game/view.cpp.s
+
+graphics/graphics.obj: graphics/graphics.cpp.obj
+
+.PHONY : graphics/graphics.obj
+
+# target to build an object file
+graphics/graphics.cpp.obj:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/graphics/graphics.cpp.obj
+.PHONY : graphics/graphics.cpp.obj
+
+graphics/graphics.i: graphics/graphics.cpp.i
+
+.PHONY : graphics/graphics.i
+
+# target to preprocess a source file
+graphics/graphics.cpp.i:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/graphics/graphics.cpp.i
+.PHONY : graphics/graphics.cpp.i
+
+graphics/graphics.s: graphics/graphics.cpp.s
+
+.PHONY : graphics/graphics.s
+
+# target to generate assembly for a file
+graphics/graphics.cpp.s:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/graphics/graphics.cpp.s
+.PHONY : graphics/graphics.cpp.s
+
+main.obj: main.cpp.obj
+
+.PHONY : main.obj
+
+# target to build an object file
+main.cpp.obj:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/main.cpp.obj
+.PHONY : main.cpp.obj
+
+main.i: main.cpp.i
+
+.PHONY : main.i
+
+# target to preprocess a source file
+main.cpp.i:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/main.cpp.i
+.PHONY : main.cpp.i
+
+main.s: main.cpp.s
+
+.PHONY : main.s
+
+# target to generate assembly for a file
+main.cpp.s:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/main.cpp.s
+.PHONY : main.cpp.s
+
+timing/timing.obj: timing/timing.cpp.obj
+
+.PHONY : timing/timing.obj
+
+# target to build an object file
+timing/timing.cpp.obj:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/timing/timing.cpp.obj
+.PHONY : timing/timing.cpp.obj
+
+timing/timing.i: timing/timing.cpp.i
+
+.PHONY : timing/timing.i
+
+# target to preprocess a source file
+timing/timing.cpp.i:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/timing/timing.cpp.i
+.PHONY : timing/timing.cpp.i
+
+timing/timing.s: timing/timing.cpp.s
+
+.PHONY : timing/timing.s
+
+# target to generate assembly for a file
+timing/timing.cpp.s:
+ $(MAKE) $(MAKESILENT) -f CMakeFiles\sdl_test.dir\build.make CMakeFiles/sdl_test.dir/timing/timing.cpp.s
+.PHONY : timing/timing.cpp.s
+
+# Help Target
+help:
+ @echo The following are some of the valid targets for this Makefile:
+ @echo ... all (the default if no target is provided)
+ @echo ... clean
+ @echo ... depend
+ @echo ... edit_cache
+ @echo ... rebuild_cache
+ @echo ... sdl_test
+ @echo ... commands/commands.obj
+ @echo ... commands/commands.i
+ @echo ... commands/commands.s
+ @echo ... game/ai/action.obj
+ @echo ... game/ai/action.i
+ @echo ... game/ai/action.s
+ @echo ... game/entity.obj
+ @echo ... game/entity.i
+ @echo ... game/entity.s
+ @echo ... game/ground.obj
+ @echo ... game/ground.i
+ @echo ... game/ground.s
+ @echo ... game/gst.obj
+ @echo ... game/gst.i
+ @echo ... game/gst.s
+ @echo ... game/load.obj
+ @echo ... game/load.i
+ @echo ... game/load.s
+ @echo ... game/menu.obj
+ @echo ... game/menu.i
+ @echo ... game/menu.s
+ @echo ... game/playercontrol.obj
+ @echo ... game/playercontrol.i
+ @echo ... game/playercontrol.s
+ @echo ... game/tech.obj
+ @echo ... game/tech.i
+ @echo ... game/tech.s
+ @echo ... game/tile.obj
+ @echo ... game/tile.i
+ @echo ... game/tile.s
+ @echo ... game/view.obj
+ @echo ... game/view.i
+ @echo ... game/view.s
+ @echo ... graphics/graphics.obj
+ @echo ... graphics/graphics.i
+ @echo ... graphics/graphics.s
+ @echo ... main.obj
+ @echo ... main.i
+ @echo ... main.s
+ @echo ... timing/timing.obj
+ @echo ... timing/timing.i
+ @echo ... timing/timing.s
+.PHONY : help
+
+
+
+#=============================================================================
+# Special targets to cleanup operation of make.
+
+# Special rule to run CMake to check the build system integrity.
+# No rule that depends on this can have commands that come from listfiles
+# because they might be regenerated.
+cmake_check_build_system:
+ $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles\Makefile.cmake 0
+.PHONY : cmake_check_build_system
+
diff --git a/age_gameplay.png b/age_gameplay.png
new file mode 100644
index 0000000..4f0dfae
--- /dev/null
+++ b/age_gameplay.png
Binary files differ
diff --git a/age_unit.png b/age_unit.png
new file mode 100644
index 0000000..be31359
--- /dev/null
+++ b/age_unit.png
Binary files differ
diff --git a/age_unit_detail.png b/age_unit_detail.png
new file mode 100644
index 0000000..973f5cf
--- /dev/null
+++ b/age_unit_detail.png
Binary files differ
diff --git a/build/abilities.txt b/build/abilities.txt
index 1f81a35..411dd58 100644
--- a/build/abilities.txt
+++ b/build/abilities.txt
@@ -1,33 +1,33 @@
-> Combat Order
-Anti-Cavalry - When fighting cavalry, gets 83% ATK and DEF bonus and "First Strike."
-Skirmish - Gains First Strike against all units with a range of 1.
-First Strike - Always strike first, even when defending (unless fighting another First Strike unit).
-Rapid Fire - When attacking, gets additional attack after opponent's counter-attack.
-
-> Attack targets filter
-Units Only - May not attack buildings.
-Buildings Only - May only attack buildings.
-No Counter - May not counterattack when attacked.
-No Move & Attack - May not attack in the turn that it moves.
-
-> Battle bonuses
-Causes Fear - Opponents always suffer -25% ATK and DEF.
-Desert Charge - Gain +33% ATK when attacking units on Desert that don't have "Desert Charge"
-Plains Charge - Gains +33% ATK when attacking units on Plains that don't have "Plains Charge"
-Scares Horses - +33% ATK and DEF when fighting horse units.
-Woodsman - +33% ATK and DEF when fighting in the forest.
-Volley - When health greater than 50% +33% ATK.
-Frenzy - Attack and counterattack at full health (100) until completely dead.
-Zeal - Automatically heals 20 Health after any battle against another unit (but not buildings)
-
-> Movement discounts
-Scout - Mountains, forests, hills, and swamps only cost 2 move points.
-
-> Activated Abilities
-Convert - May attempt to convert enemy units.
-Heal - May heal units; 20% per use (increased by certain techs)
-
-> Veteran
-Seasoned Veteran - Achieves Veteran Status more quickly: 2 battles, 4, and 6.
-
+> Combat Order
+Anti-Cavalry - When fighting cavalry, gets 83% ATK and DEF bonus and "First Strike."
+Skirmish - Gains First Strike against all units with a range of 1.
+First Strike - Always strike first, even when defending (unless fighting another First Strike unit).
+Rapid Fire - When attacking, gets additional attack after opponent's counter-attack.
+
+> Attack targets filter
+Units Only - May not attack buildings.
+Buildings Only - May only attack buildings.
+No Counter - May not counterattack when attacked.
+No Move & Attack - May not attack in the turn that it moves.
+
+> Battle bonuses
+Causes Fear - Opponents always suffer -25% ATK and DEF.
+Desert Charge - Gain +33% ATK when attacking units on Desert that don't have "Desert Charge"
+Plains Charge - Gains +33% ATK when attacking units on Plains that don't have "Plains Charge"
+Scares Horses - +33% ATK and DEF when fighting horse units.
+Woodsman - +33% ATK and DEF when fighting in the forest.
+Volley - When health greater than 50% +33% ATK.
+Frenzy - Attack and counterattack at full health (100) until completely dead.
+Zeal - Automatically heals 20 Health after any battle against another unit (but not buildings)
+
+> Movement discounts
+Scout - Mountains, forests, hills, and swamps only cost 2 move points.
+
+> Activated Abilities
+Convert - May attempt to convert enemy units.
+Heal - May heal units; 20% per use (increased by certain techs)
+
+> Veteran
+Seasoned Veteran - Achieves Veteran Status more quickly: 2 battles, 4, and 6.
+
Hero Powers - Has Hero Powers (see section 2.1 - Heroes) \ No newline at end of file
diff --git a/build/content/entities.json b/build/content/entities.json
index 45d9b78..d0f3e75 100644
--- a/build/content/entities.json
+++ b/build/content/entities.json
@@ -1,571 +1,571 @@
-[
- {
- "name": "Town Center",
- "id": 100, "unit": 0, "class": "bld", "level": 0,
- "move" : 0, "attack": 0, "defence": 500,
- "range": 0, "sight": 10,
- "spritebounds": [ 528, 16 ],
- "train_id": [ 0 ],
- "prod": [ 30, 25 ],
- "cost": [ 600, 400 ],
- "defence_bonus": 0.2
- },{
- "name": "Mill",
- "id": 101, "unit": 0, "class": "bld", "level": 0,
- "move" : 0, "attack": 0, "defence": 250,
- "range": 0, "sight": 7,
- "spritebounds": [ 544, 16 ],
- "prod": [ 50, 0 ],
- "cost": [ 120, 90 ],
- "defence_bonus": 0.2
- },{
- "name": "Mine",
- "id": 102, "unit": 0, "class": "bld", "level": 0,
- "move" : 0, "attack": 0, "defence": 300,
- "range": 0, "sight": 7,
- "spritebounds": [ 560, 16 ],
- "prod": [ 0, 150 ],
- "cost": [ 360, 240 ],
- "defence_bonus": 0.2
- },{
- "name": "Farm",
- "id": 103, "unit": 0, "class": "bld", "level": 0,
- "move" : 0, "attack": 0, "defence": 100,
- "range": 0, "sight": 7,
- "spritebounds": [ 576, 16 ],
- "prod": [ 50, 0 ],
- "cost": [ 90, 60 ],
- "adjacent": [ 101 ],
- "defence_bonus": 0.1
- },{
- "name": "Barracks",
- "id": 104, "unit": 0, "class": "bld", "level": 0,
- "move" : 0, "attack": 0, "defence": 300,
- "range": 0, "sight": 7,
- "spritebounds": [ 592, 16 ],
- "train_id": [ 1, 6, 7, 10, 11, 27, 28, 40 ],
- "prod": [ 0, 0 ],
- "cost": [ 360, 240 ],
- "adjacent": [ 100 ],
- "defence_bonus": 0.2
- },{
- "name": "Archery Range",
- "id": 105, "unit": 0, "class": "bld", "level": 1,
- "move" : 0, "attack": 0, "defence": 300,
- "range": 0, "sight": 7,
- "spritebounds": [ 608, 32 ],
- "train_id": [ 3, 4, 13, 14, 15, 24, 29, 30, 31, 32, 39 ],
- "prod": [ 0, 0 ],
- "cost": [ 360, 240 ],
- "adjacent": [ 100 ],
- "defence_bonus": 0.2
- },{
- "name": "Blacksmith",
- "id": 106, "unit": 0, "class": "bld", "level": 1,
- "move" : 0, "attack": 0, "defence": 300,
- "range": 0, "sight": 7,
- "spritebounds": [ 624, 32 ],
- "prod": [ 0, 0 ],
- "cost": [ 285, 165 ],
- "adjacent": [ 100 ],
- "defence_bonus": 0.2
- },{
- "name": "Market",
- "id": 107, "unit": 0, "class": "bld", "level": 1,
- "move" : 0, "attack": 0, "defence": 300,
- "range": 0, "sight": 7,
- "spritebounds": [ 640, 32 ],
- "train_class": [ "inf", "cav", "ran", "sie" ],
- "prod": [ 0, 0 ],
- "cost": [ 360, 240 ],
- "adjacent": [ 100 ],
- "defence_bonus": 0.2
- },{
- "name": "Stable",
- "id": 108, "unit": 0, "class": "bld", "level": 0,
- "move" : 0, "attack": 0, "defence": 300,
- "range": 0, "sight": 7,
- "spritebounds": [ 656, 16 ],
- "train_id": [ 2, 5, 8, 9, 33, 34, 41 ],
- "prod": [ 0, 0 ],
- "cost": [ 360, 240 ],
- "adjacent": [ 100 ],
- "defence_bonus": 0.2
- },{
- "name": "Siege Workshop",
- "id": 109, "unit": 0, "class": "bld", "level": 2,
- "move" : 0, "attack": 0, "defence": 300,
- "range": 0, "sight": 7,
- "spritebounds": [ 672, 48 ],
- "train_id": [ 20, 21, 22, 38, 42, 43 ],
- "prod": [ 0, 0 ],
- "cost": [ 450, 300 ],
- "adjacent": [ 100 ],
- "defence_bonus": 0.2
- },{
- "name": "Church",
- "id": 110, "unit": 0, "class": "bld", "level": 2,
- "move" : 0, "attack": 0, "defence": 300,
- "range": 0, "sight": 7,
- "spritebounds": [ 688, 48 ],
- "train_id": [ 23, 44 ],
- "prod": [ 0, 0 ],
- "cost": [ 360, 240 ],
- "adjacent": [ 100 ],
- "defence_bonus": 0.2
- },{
- "name": "University",
- "id": 111, "unit": 0, "class": "bld", "level": 2,
- "move" : 0, "attack": 0, "defence": 300,
- "range": 0, "sight": 7,
- "spritebounds": [ 704, 48 ],
- "prod": [ 0, 0 ],
- "cost": [ 450, 300 ],
- "adjacent": [ 100 ],
- "defence_bonus": 0.2
- },{
- "name": "Tower",
- "id": 112, "unit": 0, "class": "bld", "level": 1,
- "move" : 0, "attack": 0, "defence": 300,
- "range": 0, "sight": 7,
- "spritebounds": [ 720, 48 ],
- "prod": [ 0, 0 ],
- "cost": [ 360, 240 ],
- "diagonal": [ 100 ],
- "defence_bonus": 0.4,
- "defence_bonus_adj": 0.25
- },{
- "name": "Castle",
- "id": 113, "unit": 0, "class": "bld", "level": 2,
- "move" : 0, "attack": 0, "defence": 300,
- "range": 0, "sight": 7,
- "spritebounds": [ 720, 48 ],
- "train_id": [ 10, 27, 37 ],
- "prod": [ 0, 0 ],
- "cost": [ 900, 600 ],
- "defence_bonus": 0.4
- },{
- "name": "Villager",
- "id": 0, "unit": 1, "class": "inf", "level": -1,
- "move" : 7, "attack": 50, "defence": 50,
- "range": 1, "sight": 7,
- "spritebounds": [ 96, 16 ],
- "build": [
- 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
- 111, 112, 113
- ],
- "cost": [ 100, 100 ]
- },{
- "name": "Militia",
- "id": 1, "unit": 1, "class": "inf", "level": 0,
- "move" : 7, "attack": 100, "defence": 100,
- "range": 1, "sight": 7,
- "spritebounds": [ 112, 16 ],
- "cost": [ 75, 25 ],
- "upgrade": 6
- },{
- "name": "Scout Cavalry",
- "id": 2, "unit": 1, "class": "cav", "level": 0,
- "move" : 12, "attack": 100, "defence": 100,
- "range": 1, "sight": 7,
- "spritebounds": [ 128, 16 ],
- "cost": [ 120, 30 ],
- "abilities": [ "Scout" ]
- },{
- "name": "Archers",
- "id": 3, "unit": 1, "class": "ran", "level": 1,
- "move" : 7, "attack": 150, "defence": 100,
- "range": 3, "sight": 7,
- "spritebounds": [ 160, 32 ],
- "cost": [ 105, 45 ],
- "upgrade": 24
- },{
- "name": "Skirmishers",
- "id": 4, "unit": 1, "class": "ran", "level": 1,
- "move" : 7, "attack": 110, "defence": 110,
- "range": 2, "sight": 7,
- "spritebounds": [ 176, 32 ],
- "cost": [ 95, 40 ],
- "abilities": [ "Skirmish" ],
- "upgrade": 14
- },{
- "name": "Light Cavalry",
- "id": 5, "unit": 1, "class": "cav", "level": 1,
- "move" : 10, "attack": 150, "defence": 150,
- "range": 1, "sight": 7,
- "spritebounds": [ 128, 32 ],
- "cost": [ 140, 35 ],
- "abilities": [ "Plains Charge" ],
- "upgrade": 8
- },{
- "name": "Men at Arms",
- "id": 6, "unit": 1, "class": "inf", "level": 1,
- "move" : 7, "attack": 150, "defence": 150,
- "range": 1, "sight": 7,
- "spritebounds": [ 112, 32 ],
- "cost": [ 95, 30 ],
- "upgrade": 10
- },{
- "name": "Spearmen",
- "id": 7, "unit": 1, "class": "inf", "level": 1,
- "move" : 7, "attack": 150, "defence": 150,
- "range": 1, "sight": 7,
- "spritebounds": [ 144, 32 ],
- "cost": [ 115, 40 ],
- "abilities": [ "Anti-Cavalry" ],
- "upgrade": 11
- },{
- "name": "Knight",
- "id": 8, "unit": 1, "class": "cav", "level": 2,
- "move" : 10, "attack": 200, "defence": 200,
- "range": 1, "sight": 7,
- "spritebounds": [ 128, 48 ],
- "cost": [ 190, 45 ],
- "abilities": [ "Plains Charge" ],
- "upgrade": 33
- },{
- "name": "Camels",
- "id": 9, "unit": 1, "class": "cav", "level": 2,
- "move" : 10, "attack": 200, "defence": 200,
- "range": 1, "sight": 7,
- "spritebounds": [ 192, 48 ],
- "cost": [ 200, 50 ],
- "abilities": [ "Desert Charge", "Scares Horses" ],
- "upgrade": 34
- },{
- "name": "Longswordmen",
- "id": 10, "unit": 1, "class": "inf", "level": 2,
- "move" : 7, "attack": 200, "defence": 200,
- "range": 1, "sight": 7,
- "spritebounds": [ 112, 48 ],
- "cost": [ 130, 45 ],
- "upgrade": 27
- },{
- "name": "Pikemen",
- "id": 11, "unit": 1, "class": "inf", "level": 2,
- "move" : 7, "attack": 150, "defence": 200,
- "range": 1, "sight": 7,
- "spritebounds": [ 144, 48 ],
- "cost": [ 160, 55 ],
- "abilities": [ "Anti-Cavalry" ],
- "upgrade": 28
- },{
- "name": "Viking Berserkers",
- "id": 12, "unit": 1, "class": "inf", "level": 2,
- "move" : 7, "attack": 200, "defence": 200,
- "range": 1, "sight": 7,
- "spritebounds": [ 208, 48 ],
- "cost": [ 170, 55 ],
- "abilities": [ "Frenzy" ],
- "upgrade": 35
- },{
- "name": "Crossbowmen",
- "id": 13, "unit": 1, "class": "ran", "level": 2,
- "move" : 7, "attack": 200, "defence": 175,
- "range": 3, "sight": 7,
- "spritebounds": [ 224, 48 ],
- "cost": [ 125, 50 ],
- "abilities": [ "No Move & Attack" ],
- "upgrade": 30
- },{
- "name": "Elite Skirmishers",
- "id": 14, "unit": 1, "class": "ran", "level": 2,
- "move" : 7, "attack": 150, "defence": 150,
- "range": 2, "sight": 7,
- "spritebounds": [ 176, 48 ],
- "cost": [ 125, 50 ],
- "abilities": [ "Skirmish" ],
- "upgrade": 31
- },{
- "name": "Horse Archers",
- "id": 15, "unit": 1, "class": "ran", "level": 2,
- "move" : 10, "attack": 150, "defence": 150,
- "range": 2, "sight": 7,
- "spritebounds": [ 240, 48 ],
- "cost": [ 125, 50 ],
- "upgrade": 32
- },{
- "name": "Throwing Axemen",
- "id": 16, "unit": 1, "class": "inf", "level": 2,
- "move" : 7, "attack": 225, "defence": 250,
- "range": 1, "sight": 7,
- "spritebounds": [ 256, 48 ],
- "cost": [ 125, 50 ],
- "abilities": [ "Skirmish", "Woodsman" ],
- "upgrade": 49
- },{
- "name": "Persian War Elephants",
- "id": 17, "unit": 1, "class": "cav", "level": 2,
- "move" : 7, "attack": 200, "defence": 250,
- "range": 1, "sight": 7,
- "spritebounds": [ 272, 48 ],
- "cost": [ 210, 55 ],
- "abilities": [ "Causes Fear" ],
- "upgrade": 47
- },{
- "name": "Celtic Woad Raiders",
- "id": 18, "unit": 1, "class": "inf", "level": 2,
- "move" : 7, "attack": 200, "defence": 200,
- "range": 1, "sight": 7,
- "spritebounds": [ 288, 48 ],
- "cost": [ 200, 65 ],
- "abilities": [ "Causes Fear" ],
- "upgrade": 36
- },{
- "name": "Knights Templar",
- "id": 19, "unit": 1, "class": "cav", "level": 2,
- "move" : 7, "attack": 200, "defence": 200,
- "range": 1, "sight": 7,
- "spritebounds": [ 304, 48 ],
- "cost": [ 215, 55 ],
- "abilities": [ "Plains Charge", "Zeal" ],
- "upgrade": 45
- },{
- "name": "Scorpions",
- "id": 20, "unit": 1, "class": "sie", "level": 2,
- "move" : 7, "attack": 350, "defence": 250,
- "range": 3, "sight": 7,
- "spritebounds": [ 320, 48 ],
- "cost": [ 65, 190 ],
- "abilities": [ "Units Only", "No Counter", "No Move & Attack" ],
- "upgrade": 42
- },{
- "name": "Battering Rams",
- "id": 21, "unit": 1, "class": "sie", "level": 2,
- "move" : 7, "attack": 400, "defence": 325,
- "range": 1, "sight": 7,
- "spritebounds": [ 336, 48 ],
- "cost": [ 50, 155 ],
- "abilities": [ "Buildings Only", "No Counter" ],
- "upgrade": 43
- },{
- "name": "Onagers",
- "id": 22, "unit": 1, "class": "sie", "level": 2,
- "move" : 7, "attack": 275, "defence": 275,
- "range": 1, "sight": 7,
- "spritebounds": [ 352, 48 ],
- "cost": [ 60, 180 ],
- "abilities": [ "No Move & Attack", "No Counter" ]
- },{
- "name": "Monks",
- "id": 23, "unit": 1, "class": "inf", "level": 2,
- "move" : 9, "attack": 50, "defence": 150,
- "range": 1, "sight": 7,
- "spritebounds": [ 368, 48 ],
- "cost": [ 50, 155 ],
- "abilities": [ "Heal", "Convert" ],
- "upgrade": 44
- },{
- "name": "Archers",
- "id": 24, "unit": 1, "class": "ran", "level": 2,
- "move" : 7, "attack": 150, "defence": 100,
- "range": 3, "sight": 7,
- "spritebounds": [ 160, 32 ],
- "cost": [ 105, 45 ],
- "upgrade": 29
- },{
- "name": "Turkish Janissaries",
- "id": 25, "unit": 1, "class": "ran", "level": 2,
- "move" : 7, "attack": 250, "defence": 175,
- "range": 3, "sight": 7,
- "spritebounds": [ 432, 48 ],
- "cost": [ 145, 60 ],
- "abilities": [ "No Move & Attack" ],
- "upgrade": 46
- },{
- "name": "Chinese Chu Ko Nu",
- "id": 26, "unit": 1, "class": "ran", "level": 2,
- "move" : 7, "attack": 150, "defence": 150,
- "range": 3, "sight": 7,
- "spritebounds": [ 384, 48 ],
- "cost": [ 125, 55 ],
- "abilities": [ "No Move & Attack", "Rapid Fire" ],
- "upgrade": 48
- },{
- "name": "Two Handed Swordsman",
- "id": 27, "unit": 1, "class": "inf", "level": 3,
- "move" : 7, "attack": 250, "defence": 250,
- "range": 1, "sight": 7,
- "spritebounds": [ 112, 64 ],
- "cost": [ 190, 65 ]
- },{
- "name": "Halberdier",
- "id": 28, "unit": 1, "class": "inf", "level": 3,
- "move" : 7, "attack": 200, "defence": 250,
- "range": 1, "sight": 7,
- "spritebounds": [ 144, 64 ],
- "cost": [ 230, 75 ],
- "abilities": [ "Anti-Cavalry" ]
- },{
- "name": "Elite Archers",
- "id": 29, "unit": 1, "class": "ran", "level": 3,
- "move" : 7, "attack": 200, "defence": 200,
- "range": 3, "sight": 7,
- "spritebounds": [ 160, 64 ],
- "cost": [ 205, 90 ]
- },{
- "name": "Arbalests",
- "id": 30, "unit": 1, "class": "ran", "level": 3,
- "move" : 7, "attack": 250, "defence": 225,
- "range": 3, "sight": 7,
- "spritebounds": [ 224, 64 ],
- "cost": [ 180, 75 ],
- "abilities": [ "No Move & Attack" ]
- },{
- "name": "Expert Skirmishers",
- "id": 31, "unit": 1, "class": "ran", "level": 3,
- "move" : 7, "attack": 190, "defence": 190,
- "range": 2, "sight": 7,
- "spritebounds": [ 176, 64 ],
- "cost": [ 160, 70 ],
- "abilities": [ "Skirmish" ]
- },{
- "name": "Heavy Horse Archers",
- "id": 32, "unit": 1, "class": "ran", "level": 3,
- "move" : 10, "attack": 200, "defence": 200,
- "range": 2, "sight": 7,
- "spritebounds": [ 240, 64 ],
- "cost": [ 180, 75 ]
- },{
- "name": "Cavaliers",
- "id": 33, "unit": 1, "class": "cav", "level": 3,
- "move" : 10, "attack": 250, "defence": 250,
- "range": 1, "sight": 7,
- "spritebounds": [ 128, 64 ],
- "cost": [ 260, 65 ]
- },{
- "name": "Heavy Camels",
- "id": 34, "unit": 1, "class": "cav", "level": 3,
- "move" : 10, "attack": 250, "defence": 250,
- "range": 1, "sight": 7,
- "spritebounds": [ 192, 64 ],
- "cost": [ 275, 70 ],
- "abilities": [ "Desert Charge", "Scares Horses" ]
- },{
- "name": "Elite Berserkers",
- "id": 35, "unit": 1, "class": "inf", "level": 3,
- "move" : 7, "attack": 250, "defence": 250,
- "range": 1, "sight": 7,
- "spritebounds": [ 208, 64 ],
- "cost": [ 235, 80 ],
- "abilities": [ "Frenzy" ]
- },{
- "name": "Elite Woad Raiders",
- "id": 36, "unit": 1, "class": "inf", "level": 3,
- "move" : 7, "attack": 250, "defence": 250,
- "range": 1, "sight": 7,
- "spritebounds": [ 288, 64 ],
- "cost": [ 270, 90 ],
- "abilities": [ "Causes Fear" ]
- },{
- "name": "Trebuchets",
- "id": 37, "unit": 1, "class": "sie", "level": 3,
- "move" : 7, "attack": 375, "defence": 350,
- "range": 3, "sight": 7,
- "spritebounds": [ 400, 64 ],
- "cost": [ 90, 270 ],
- "abilities": [ "Min Range 2", "No Counter", "No Move & Attack" ],
- "req_tech": [ 55 ]
- },{
- "name": "Bombard Cannons",
- "id": 38, "unit": 1, "class": "sie", "level": 3,
- "move" : 7, "attack": 325, "defence": 325,
- "range": 3, "sight": 7,
- "spritebounds": [ 448, 64 ],
- "cost": [ 85, 250 ],
- "abilities": [ "No Counter", "No Move & Attack" ],
- "req_tech": [ 57 ]
- },{
- "name": "Hand Cannoneers",
- "id": 39, "unit": 1, "class": "ran", "level": 3,
- "move" : 7, "attack": 300, "defence": 225,
- "range": 3, "sight": 7,
- "spritebounds": [ 416, 64 ],
- "cost": [ 205, 90 ],
- "abilities": [ "No Move & Attack" ],
- "req_tech": [ 57 ]
- },{
- "name": "Champions",
- "id": 40, "unit": 1, "class": "inf", "level": 3,
- "move" : 7, "attack": 300, "defence": 300,
- "range": 1, "sight": 7,
- "spritebounds": [ 250, 85 ],
- "cost": [ 250, 85 ],
- "req_tech": [ 43 ]
- },{
- "name": "Paladins",
- "id": 41, "unit": 1, "class": "cav", "level": 3,
- "move" : 7, "attack": 300, "defence": 300,
- "range": 1, "sight": 7,
- "spritebounds": [ 128, 80 ],
- "cost": [ 330, 80 ],
- "abilities": [ "Plains Charge" ],
- "req_tech": [ 44 ]
- },{
- "name": "Heavy Scorpions",
- "id": 42, "unit": 1, "class": "sie", "level": 3,
- "move" : 7, "attack": 400, "defence": 300,
- "range": 3, "sight": 7,
- "spritebounds": [ 320, 64 ],
- "cost": [ 95, 265 ],
- "abilities": [ "Units Only", "No Counter", "No Move & Attack" ],
- "req_tech": [ 55 ]
- },{
- "name": "Siege Rams",
- "id": 43, "unit": 1, "class": "sie", "level": 3,
- "move" : 7, "attack": 500, "defence": 375,
- "range": 1, "sight": 7,
- "spritebounds": [ 336, 64 ],
- "cost": [ 85, 245 ],
- "abilities": [ "Buildings Only", "No Counter" ],
- "req_tech": [ 55 ]
- },{
- "name": "Elite Monks",
- "id": 44, "unit": 1, "class": "inf", "level": 3,
- "move" : 9, "attack": 50, "defence": 200,
- "range": 1, "sight": 7,
- "spritebounds": [ 368, 64 ],
- "cost": [ 75, 220 ],
- "abilities": [ "Heal", "Convert" ]
- },{
- "name": "Elite Knights Templar",
- "id": 45, "unit": 1, "class": "cav", "level": 3,
- "move" : 10, "attack": 250, "defence": 250,
- "range": 1, "sight": 7,
- "spritebounds": [ 304, 64 ],
- "cost": [ 300, 75 ],
- "abilities": [ "Plains Charge", "Zeal" ]
- },{
- "name": "Elite Janissaries",
- "id": 46, "unit": 1, "class": "ran", "level": 3,
- "move" : 7, "attack": 300, "defence": 225,
- "range": 3, "sight": 7,
- "spritebounds": [ 432, 64 ],
- "cost": [ 205, 90 ],
- "abilities": [ "No Move & Attack" ]
- },{
- "name": "Elite War Elephants",
- "id": 47, "unit": 1, "class": "cav", "level": 3,
- "move" : 7, "attack": 250, "defence": 300,
- "range": 1, "sight": 7,
- "spritebounds": [ 272, 64 ],
- "cost": [ 290, 75 ],
- "abilities": [ "Causes Fear" ]
- },{
- "name": "Elite Chu Ko Nu",
- "id": 48, "unit": 1, "class": "ran", "level": 3,
- "move" : 7, "attack": 200, "defence": 200,
- "range": 3, "sight": 7,
- "spritebounds": [ 272, 64 ],
- "cost": [ 180, 75 ],
- "abilities": [ "No Move & Attack", "Rapid Fire" ]
- },{
- "name": "Elite Throwing Axemen",
- "id": 49, "unit": 1, "class": "inf", "level": 3,
- "move" : 7, "attack": 275, "defence": 300,
- "range": 1, "sight": 7,
- "spritebounds": [ 256, 64 ],
- "cost": [ 295, 95 ],
- "abilities": [ "Skirmish", "Woodsman" ]
- }
+[
+ {
+ "name": "Town Center",
+ "id": 100, "unit": 0, "class": "bld", "level": 0,
+ "move" : 0, "attack": 0, "defence": 500,
+ "range": 0, "sight": 10,
+ "spritebounds": [ 528, 16 ],
+ "train_id": [ 0 ],
+ "prod": [ 30, 25 ],
+ "cost": [ 600, 400 ],
+ "defence_bonus": 0.2
+ },{
+ "name": "Mill",
+ "id": 101, "unit": 0, "class": "bld", "level": 0,
+ "move" : 0, "attack": 0, "defence": 250,
+ "range": 0, "sight": 7,
+ "spritebounds": [ 544, 16 ],
+ "prod": [ 50, 0 ],
+ "cost": [ 120, 90 ],
+ "defence_bonus": 0.2
+ },{
+ "name": "Mine",
+ "id": 102, "unit": 0, "class": "bld", "level": 0,
+ "move" : 0, "attack": 0, "defence": 300,
+ "range": 0, "sight": 7,
+ "spritebounds": [ 560, 16 ],
+ "prod": [ 0, 150 ],
+ "cost": [ 360, 240 ],
+ "defence_bonus": 0.2
+ },{
+ "name": "Farm",
+ "id": 103, "unit": 0, "class": "bld", "level": 0,
+ "move" : 0, "attack": 0, "defence": 100,
+ "range": 0, "sight": 7,
+ "spritebounds": [ 576, 16 ],
+ "prod": [ 50, 0 ],
+ "cost": [ 90, 60 ],
+ "adjacent": [ 101 ],
+ "defence_bonus": 0.1
+ },{
+ "name": "Barracks",
+ "id": 104, "unit": 0, "class": "bld", "level": 0,
+ "move" : 0, "attack": 0, "defence": 300,
+ "range": 0, "sight": 7,
+ "spritebounds": [ 592, 16 ],
+ "train_id": [ 1, 6, 7, 10, 11, 27, 28, 40 ],
+ "prod": [ 0, 0 ],
+ "cost": [ 360, 240 ],
+ "adjacent": [ 100 ],
+ "defence_bonus": 0.2
+ },{
+ "name": "Archery Range",
+ "id": 105, "unit": 0, "class": "bld", "level": 1,
+ "move" : 0, "attack": 0, "defence": 300,
+ "range": 0, "sight": 7,
+ "spritebounds": [ 608, 32 ],
+ "train_id": [ 3, 4, 13, 14, 15, 24, 29, 30, 31, 32, 39 ],
+ "prod": [ 0, 0 ],
+ "cost": [ 360, 240 ],
+ "adjacent": [ 100 ],
+ "defence_bonus": 0.2
+ },{
+ "name": "Blacksmith",
+ "id": 106, "unit": 0, "class": "bld", "level": 1,
+ "move" : 0, "attack": 0, "defence": 300,
+ "range": 0, "sight": 7,
+ "spritebounds": [ 624, 32 ],
+ "prod": [ 0, 0 ],
+ "cost": [ 285, 165 ],
+ "adjacent": [ 100 ],
+ "defence_bonus": 0.2
+ },{
+ "name": "Market",
+ "id": 107, "unit": 0, "class": "bld", "level": 1,
+ "move" : 0, "attack": 0, "defence": 300,
+ "range": 0, "sight": 7,
+ "spritebounds": [ 640, 32 ],
+ "train_class": [ "inf", "cav", "ran", "sie" ],
+ "prod": [ 0, 0 ],
+ "cost": [ 360, 240 ],
+ "adjacent": [ 100 ],
+ "defence_bonus": 0.2
+ },{
+ "name": "Stable",
+ "id": 108, "unit": 0, "class": "bld", "level": 0,
+ "move" : 0, "attack": 0, "defence": 300,
+ "range": 0, "sight": 7,
+ "spritebounds": [ 656, 16 ],
+ "train_id": [ 2, 5, 8, 9, 33, 34, 41 ],
+ "prod": [ 0, 0 ],
+ "cost": [ 360, 240 ],
+ "adjacent": [ 100 ],
+ "defence_bonus": 0.2
+ },{
+ "name": "Siege Workshop",
+ "id": 109, "unit": 0, "class": "bld", "level": 2,
+ "move" : 0, "attack": 0, "defence": 300,
+ "range": 0, "sight": 7,
+ "spritebounds": [ 672, 48 ],
+ "train_id": [ 20, 21, 22, 38, 42, 43 ],
+ "prod": [ 0, 0 ],
+ "cost": [ 450, 300 ],
+ "adjacent": [ 100 ],
+ "defence_bonus": 0.2
+ },{
+ "name": "Church",
+ "id": 110, "unit": 0, "class": "bld", "level": 2,
+ "move" : 0, "attack": 0, "defence": 300,
+ "range": 0, "sight": 7,
+ "spritebounds": [ 688, 48 ],
+ "train_id": [ 23, 44 ],
+ "prod": [ 0, 0 ],
+ "cost": [ 360, 240 ],
+ "adjacent": [ 100 ],
+ "defence_bonus": 0.2
+ },{
+ "name": "University",
+ "id": 111, "unit": 0, "class": "bld", "level": 2,
+ "move" : 0, "attack": 0, "defence": 300,
+ "range": 0, "sight": 7,
+ "spritebounds": [ 704, 48 ],
+ "prod": [ 0, 0 ],
+ "cost": [ 450, 300 ],
+ "adjacent": [ 100 ],
+ "defence_bonus": 0.2
+ },{
+ "name": "Tower",
+ "id": 112, "unit": 0, "class": "bld", "level": 1,
+ "move" : 0, "attack": 0, "defence": 300,
+ "range": 0, "sight": 7,
+ "spritebounds": [ 720, 48 ],
+ "prod": [ 0, 0 ],
+ "cost": [ 360, 240 ],
+ "diagonal": [ 100 ],
+ "defence_bonus": 0.4,
+ "defence_bonus_adj": 0.25
+ },{
+ "name": "Castle",
+ "id": 113, "unit": 0, "class": "bld", "level": 2,
+ "move" : 0, "attack": 0, "defence": 300,
+ "range": 0, "sight": 7,
+ "spritebounds": [ 720, 48 ],
+ "train_id": [ 10, 27, 37 ],
+ "prod": [ 0, 0 ],
+ "cost": [ 900, 600 ],
+ "defence_bonus": 0.4
+ },{
+ "name": "Villager",
+ "id": 0, "unit": 1, "class": "inf", "level": -1,
+ "move" : 7, "attack": 50, "defence": 50,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 96, 16 ],
+ "build": [
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+ 111, 112, 113
+ ],
+ "cost": [ 100, 100 ]
+ },{
+ "name": "Militia",
+ "id": 1, "unit": 1, "class": "inf", "level": 0,
+ "move" : 7, "attack": 100, "defence": 100,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 112, 16 ],
+ "cost": [ 75, 25 ],
+ "upgrade": 6
+ },{
+ "name": "Scout Cavalry",
+ "id": 2, "unit": 1, "class": "cav", "level": 0,
+ "move" : 12, "attack": 100, "defence": 100,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 128, 16 ],
+ "cost": [ 120, 30 ],
+ "abilities": [ "Scout" ]
+ },{
+ "name": "Archers",
+ "id": 3, "unit": 1, "class": "ran", "level": 1,
+ "move" : 7, "attack": 150, "defence": 100,
+ "range": 3, "sight": 7,
+ "spritebounds": [ 160, 32 ],
+ "cost": [ 105, 45 ],
+ "upgrade": 24
+ },{
+ "name": "Skirmishers",
+ "id": 4, "unit": 1, "class": "ran", "level": 1,
+ "move" : 7, "attack": 110, "defence": 110,
+ "range": 2, "sight": 7,
+ "spritebounds": [ 176, 32 ],
+ "cost": [ 95, 40 ],
+ "abilities": [ "Skirmish" ],
+ "upgrade": 14
+ },{
+ "name": "Light Cavalry",
+ "id": 5, "unit": 1, "class": "cav", "level": 1,
+ "move" : 10, "attack": 150, "defence": 150,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 128, 32 ],
+ "cost": [ 140, 35 ],
+ "abilities": [ "Plains Charge" ],
+ "upgrade": 8
+ },{
+ "name": "Men at Arms",
+ "id": 6, "unit": 1, "class": "inf", "level": 1,
+ "move" : 7, "attack": 150, "defence": 150,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 112, 32 ],
+ "cost": [ 95, 30 ],
+ "upgrade": 10
+ },{
+ "name": "Spearmen",
+ "id": 7, "unit": 1, "class": "inf", "level": 1,
+ "move" : 7, "attack": 150, "defence": 150,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 144, 32 ],
+ "cost": [ 115, 40 ],
+ "abilities": [ "Anti-Cavalry" ],
+ "upgrade": 11
+ },{
+ "name": "Knight",
+ "id": 8, "unit": 1, "class": "cav", "level": 2,
+ "move" : 10, "attack": 200, "defence": 200,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 128, 48 ],
+ "cost": [ 190, 45 ],
+ "abilities": [ "Plains Charge" ],
+ "upgrade": 33
+ },{
+ "name": "Camels",
+ "id": 9, "unit": 1, "class": "cav", "level": 2,
+ "move" : 10, "attack": 200, "defence": 200,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 192, 48 ],
+ "cost": [ 200, 50 ],
+ "abilities": [ "Desert Charge", "Scares Horses" ],
+ "upgrade": 34
+ },{
+ "name": "Longswordmen",
+ "id": 10, "unit": 1, "class": "inf", "level": 2,
+ "move" : 7, "attack": 200, "defence": 200,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 112, 48 ],
+ "cost": [ 130, 45 ],
+ "upgrade": 27
+ },{
+ "name": "Pikemen",
+ "id": 11, "unit": 1, "class": "inf", "level": 2,
+ "move" : 7, "attack": 150, "defence": 200,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 144, 48 ],
+ "cost": [ 160, 55 ],
+ "abilities": [ "Anti-Cavalry" ],
+ "upgrade": 28
+ },{
+ "name": "Viking Berserkers",
+ "id": 12, "unit": 1, "class": "inf", "level": 2,
+ "move" : 7, "attack": 200, "defence": 200,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 208, 48 ],
+ "cost": [ 170, 55 ],
+ "abilities": [ "Frenzy" ],
+ "upgrade": 35
+ },{
+ "name": "Crossbowmen",
+ "id": 13, "unit": 1, "class": "ran", "level": 2,
+ "move" : 7, "attack": 200, "defence": 175,
+ "range": 3, "sight": 7,
+ "spritebounds": [ 224, 48 ],
+ "cost": [ 125, 50 ],
+ "abilities": [ "No Move & Attack" ],
+ "upgrade": 30
+ },{
+ "name": "Elite Skirmishers",
+ "id": 14, "unit": 1, "class": "ran", "level": 2,
+ "move" : 7, "attack": 150, "defence": 150,
+ "range": 2, "sight": 7,
+ "spritebounds": [ 176, 48 ],
+ "cost": [ 125, 50 ],
+ "abilities": [ "Skirmish" ],
+ "upgrade": 31
+ },{
+ "name": "Horse Archers",
+ "id": 15, "unit": 1, "class": "ran", "level": 2,
+ "move" : 10, "attack": 150, "defence": 150,
+ "range": 2, "sight": 7,
+ "spritebounds": [ 240, 48 ],
+ "cost": [ 125, 50 ],
+ "upgrade": 32
+ },{
+ "name": "Throwing Axemen",
+ "id": 16, "unit": 1, "class": "inf", "level": 2,
+ "move" : 7, "attack": 225, "defence": 250,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 256, 48 ],
+ "cost": [ 125, 50 ],
+ "abilities": [ "Skirmish", "Woodsman" ],
+ "upgrade": 49
+ },{
+ "name": "Persian War Elephants",
+ "id": 17, "unit": 1, "class": "cav", "level": 2,
+ "move" : 7, "attack": 200, "defence": 250,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 272, 48 ],
+ "cost": [ 210, 55 ],
+ "abilities": [ "Causes Fear" ],
+ "upgrade": 47
+ },{
+ "name": "Celtic Woad Raiders",
+ "id": 18, "unit": 1, "class": "inf", "level": 2,
+ "move" : 7, "attack": 200, "defence": 200,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 288, 48 ],
+ "cost": [ 200, 65 ],
+ "abilities": [ "Causes Fear" ],
+ "upgrade": 36
+ },{
+ "name": "Knights Templar",
+ "id": 19, "unit": 1, "class": "cav", "level": 2,
+ "move" : 7, "attack": 200, "defence": 200,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 304, 48 ],
+ "cost": [ 215, 55 ],
+ "abilities": [ "Plains Charge", "Zeal" ],
+ "upgrade": 45
+ },{
+ "name": "Scorpions",
+ "id": 20, "unit": 1, "class": "sie", "level": 2,
+ "move" : 7, "attack": 350, "defence": 250,
+ "range": 3, "sight": 7,
+ "spritebounds": [ 320, 48 ],
+ "cost": [ 65, 190 ],
+ "abilities": [ "Units Only", "No Counter", "No Move & Attack" ],
+ "upgrade": 42
+ },{
+ "name": "Battering Rams",
+ "id": 21, "unit": 1, "class": "sie", "level": 2,
+ "move" : 7, "attack": 400, "defence": 325,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 336, 48 ],
+ "cost": [ 50, 155 ],
+ "abilities": [ "Buildings Only", "No Counter" ],
+ "upgrade": 43
+ },{
+ "name": "Onagers",
+ "id": 22, "unit": 1, "class": "sie", "level": 2,
+ "move" : 7, "attack": 275, "defence": 275,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 352, 48 ],
+ "cost": [ 60, 180 ],
+ "abilities": [ "No Move & Attack", "No Counter" ]
+ },{
+ "name": "Monks",
+ "id": 23, "unit": 1, "class": "inf", "level": 2,
+ "move" : 9, "attack": 50, "defence": 150,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 368, 48 ],
+ "cost": [ 50, 155 ],
+ "abilities": [ "Heal", "Convert" ],
+ "upgrade": 44
+ },{
+ "name": "Archers",
+ "id": 24, "unit": 1, "class": "ran", "level": 2,
+ "move" : 7, "attack": 150, "defence": 100,
+ "range": 3, "sight": 7,
+ "spritebounds": [ 160, 32 ],
+ "cost": [ 105, 45 ],
+ "upgrade": 29
+ },{
+ "name": "Turkish Janissaries",
+ "id": 25, "unit": 1, "class": "ran", "level": 2,
+ "move" : 7, "attack": 250, "defence": 175,
+ "range": 3, "sight": 7,
+ "spritebounds": [ 432, 48 ],
+ "cost": [ 145, 60 ],
+ "abilities": [ "No Move & Attack" ],
+ "upgrade": 46
+ },{
+ "name": "Chinese Chu Ko Nu",
+ "id": 26, "unit": 1, "class": "ran", "level": 2,
+ "move" : 7, "attack": 150, "defence": 150,
+ "range": 3, "sight": 7,
+ "spritebounds": [ 384, 48 ],
+ "cost": [ 125, 55 ],
+ "abilities": [ "No Move & Attack", "Rapid Fire" ],
+ "upgrade": 48
+ },{
+ "name": "Two Handed Swordsman",
+ "id": 27, "unit": 1, "class": "inf", "level": 3,
+ "move" : 7, "attack": 250, "defence": 250,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 112, 64 ],
+ "cost": [ 190, 65 ]
+ },{
+ "name": "Halberdier",
+ "id": 28, "unit": 1, "class": "inf", "level": 3,
+ "move" : 7, "attack": 200, "defence": 250,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 144, 64 ],
+ "cost": [ 230, 75 ],
+ "abilities": [ "Anti-Cavalry" ]
+ },{
+ "name": "Elite Archers",
+ "id": 29, "unit": 1, "class": "ran", "level": 3,
+ "move" : 7, "attack": 200, "defence": 200,
+ "range": 3, "sight": 7,
+ "spritebounds": [ 160, 64 ],
+ "cost": [ 205, 90 ]
+ },{
+ "name": "Arbalests",
+ "id": 30, "unit": 1, "class": "ran", "level": 3,
+ "move" : 7, "attack": 250, "defence": 225,
+ "range": 3, "sight": 7,
+ "spritebounds": [ 224, 64 ],
+ "cost": [ 180, 75 ],
+ "abilities": [ "No Move & Attack" ]
+ },{
+ "name": "Expert Skirmishers",
+ "id": 31, "unit": 1, "class": "ran", "level": 3,
+ "move" : 7, "attack": 190, "defence": 190,
+ "range": 2, "sight": 7,
+ "spritebounds": [ 176, 64 ],
+ "cost": [ 160, 70 ],
+ "abilities": [ "Skirmish" ]
+ },{
+ "name": "Heavy Horse Archers",
+ "id": 32, "unit": 1, "class": "ran", "level": 3,
+ "move" : 10, "attack": 200, "defence": 200,
+ "range": 2, "sight": 7,
+ "spritebounds": [ 240, 64 ],
+ "cost": [ 180, 75 ]
+ },{
+ "name": "Cavaliers",
+ "id": 33, "unit": 1, "class": "cav", "level": 3,
+ "move" : 10, "attack": 250, "defence": 250,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 128, 64 ],
+ "cost": [ 260, 65 ]
+ },{
+ "name": "Heavy Camels",
+ "id": 34, "unit": 1, "class": "cav", "level": 3,
+ "move" : 10, "attack": 250, "defence": 250,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 192, 64 ],
+ "cost": [ 275, 70 ],
+ "abilities": [ "Desert Charge", "Scares Horses" ]
+ },{
+ "name": "Elite Berserkers",
+ "id": 35, "unit": 1, "class": "inf", "level": 3,
+ "move" : 7, "attack": 250, "defence": 250,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 208, 64 ],
+ "cost": [ 235, 80 ],
+ "abilities": [ "Frenzy" ]
+ },{
+ "name": "Elite Woad Raiders",
+ "id": 36, "unit": 1, "class": "inf", "level": 3,
+ "move" : 7, "attack": 250, "defence": 250,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 288, 64 ],
+ "cost": [ 270, 90 ],
+ "abilities": [ "Causes Fear" ]
+ },{
+ "name": "Trebuchets",
+ "id": 37, "unit": 1, "class": "sie", "level": 3,
+ "move" : 7, "attack": 375, "defence": 350,
+ "range": 3, "sight": 7,
+ "spritebounds": [ 400, 64 ],
+ "cost": [ 90, 270 ],
+ "abilities": [ "Min Range 2", "No Counter", "No Move & Attack" ],
+ "req_tech": [ 55 ]
+ },{
+ "name": "Bombard Cannons",
+ "id": 38, "unit": 1, "class": "sie", "level": 3,
+ "move" : 7, "attack": 325, "defence": 325,
+ "range": 3, "sight": 7,
+ "spritebounds": [ 448, 64 ],
+ "cost": [ 85, 250 ],
+ "abilities": [ "No Counter", "No Move & Attack" ],
+ "req_tech": [ 57 ]
+ },{
+ "name": "Hand Cannoneers",
+ "id": 39, "unit": 1, "class": "ran", "level": 3,
+ "move" : 7, "attack": 300, "defence": 225,
+ "range": 3, "sight": 7,
+ "spritebounds": [ 416, 64 ],
+ "cost": [ 205, 90 ],
+ "abilities": [ "No Move & Attack" ],
+ "req_tech": [ 57 ]
+ },{
+ "name": "Champions",
+ "id": 40, "unit": 1, "class": "inf", "level": 3,
+ "move" : 7, "attack": 300, "defence": 300,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 250, 85 ],
+ "cost": [ 250, 85 ],
+ "req_tech": [ 43 ]
+ },{
+ "name": "Paladins",
+ "id": 41, "unit": 1, "class": "cav", "level": 3,
+ "move" : 7, "attack": 300, "defence": 300,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 128, 80 ],
+ "cost": [ 330, 80 ],
+ "abilities": [ "Plains Charge" ],
+ "req_tech": [ 44 ]
+ },{
+ "name": "Heavy Scorpions",
+ "id": 42, "unit": 1, "class": "sie", "level": 3,
+ "move" : 7, "attack": 400, "defence": 300,
+ "range": 3, "sight": 7,
+ "spritebounds": [ 320, 64 ],
+ "cost": [ 95, 265 ],
+ "abilities": [ "Units Only", "No Counter", "No Move & Attack" ],
+ "req_tech": [ 55 ]
+ },{
+ "name": "Siege Rams",
+ "id": 43, "unit": 1, "class": "sie", "level": 3,
+ "move" : 7, "attack": 500, "defence": 375,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 336, 64 ],
+ "cost": [ 85, 245 ],
+ "abilities": [ "Buildings Only", "No Counter" ],
+ "req_tech": [ 55 ]
+ },{
+ "name": "Elite Monks",
+ "id": 44, "unit": 1, "class": "inf", "level": 3,
+ "move" : 9, "attack": 50, "defence": 200,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 368, 64 ],
+ "cost": [ 75, 220 ],
+ "abilities": [ "Heal", "Convert" ]
+ },{
+ "name": "Elite Knights Templar",
+ "id": 45, "unit": 1, "class": "cav", "level": 3,
+ "move" : 10, "attack": 250, "defence": 250,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 304, 64 ],
+ "cost": [ 300, 75 ],
+ "abilities": [ "Plains Charge", "Zeal" ]
+ },{
+ "name": "Elite Janissaries",
+ "id": 46, "unit": 1, "class": "ran", "level": 3,
+ "move" : 7, "attack": 300, "defence": 225,
+ "range": 3, "sight": 7,
+ "spritebounds": [ 432, 64 ],
+ "cost": [ 205, 90 ],
+ "abilities": [ "No Move & Attack" ]
+ },{
+ "name": "Elite War Elephants",
+ "id": 47, "unit": 1, "class": "cav", "level": 3,
+ "move" : 7, "attack": 250, "defence": 300,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 272, 64 ],
+ "cost": [ 290, 75 ],
+ "abilities": [ "Causes Fear" ]
+ },{
+ "name": "Elite Chu Ko Nu",
+ "id": 48, "unit": 1, "class": "ran", "level": 3,
+ "move" : 7, "attack": 200, "defence": 200,
+ "range": 3, "sight": 7,
+ "spritebounds": [ 272, 64 ],
+ "cost": [ 180, 75 ],
+ "abilities": [ "No Move & Attack", "Rapid Fire" ]
+ },{
+ "name": "Elite Throwing Axemen",
+ "id": 49, "unit": 1, "class": "inf", "level": 3,
+ "move" : 7, "attack": 275, "defence": 300,
+ "range": 1, "sight": 7,
+ "spritebounds": [ 256, 64 ],
+ "cost": [ 295, 95 ],
+ "abilities": [ "Skirmish", "Woodsman" ]
+ }
] \ No newline at end of file
diff --git a/build/content/raw_ents name.json b/build/content/raw_ents name.json
index e80a1c3..0a5163c 100644
--- a/build/content/raw_ents name.json
+++ b/build/content/raw_ents name.json
@@ -1,94 +1,94 @@
-Buildings:
-Town Center
-Mill
-Mine
-Farm
-Barracks
-Archery Range
-Blacksmith
-University
-Stable
-Market
-Siege Workshop
-Church
-Castle
-Tower
-
-
-Age 1:
-
-Unit name: Villagers
-Unit name: Militia
-Unit name: Scout Cavalry
-
-Age 2:
-
-Unit name: Archers
-Unit name: Skirmishers
-Unit name: Light Cavalry
-Unit name: Men-at-Arms
-Unit name: Spearmen
-
-Age 3:
-
-Unit name: Knights
-Unit name: Camels
-Unit name: Longswordmen
-Unit name: Pikemen
-Unit name: Viking Berserkers
-Unit name: Crossbowmen
-Unit name: Elite Skirmishers
-Unit name: Horse Archers
-Unit name: Throwing Axmen
-Unit name: Persian War Elephants
-Unit name: Celtic Woad Raiders
-Unit name: Knights Templar
-Unit name: Scorpions
-Unit name: Battering Rams
-Unit name: Onagers
-Unit name: Monks
-
-Age 4:
-
-Unit name: Two Handed Swordsmen
-Unit name: Elite Pikemen
-Unit name: Elite Archers
-Unit name: Arbalests
-Unit name: Expert Skirmishers
-Unit name: Hvy Horse Archers
-Unit name: Cavaliers
-Unit name: Heavy Camels
-Unit name: Elite Berserkers
-Unit name: Elite Woad Raiders
-Unit name: Trebuchets
-Unit name: Bombard Cannons
-Unit name: Hand Cannoneers
-Unit name: Champions
-Unit name: Paladins
-Unit name: Heavy Scorpions
-Unit name: Siege Rams
-Unit name: Elite Monks
-Unit name: Elite Knights Templar
-Unit name: Elite Janissaries
-
-Civ Specific Units:
-
--Franks
-Unit name: Throwing Axmen
-Unit name: Elite Throwing Axmen
-
--Britons
-Unit name: Longbowmen
-Unit name: Elite Longbowmen
-
--Mongols
-Unit name: Mangudai
-Unit name: Elite Mangudai
-
--Saracens
-Unit name: Mamelukes
-Unit name: Elite Mamelukes
-
--Japanese
-Unit name: Samurai
+Buildings:
+Town Center
+Mill
+Mine
+Farm
+Barracks
+Archery Range
+Blacksmith
+University
+Stable
+Market
+Siege Workshop
+Church
+Castle
+Tower
+
+
+Age 1:
+
+Unit name: Villagers
+Unit name: Militia
+Unit name: Scout Cavalry
+
+Age 2:
+
+Unit name: Archers
+Unit name: Skirmishers
+Unit name: Light Cavalry
+Unit name: Men-at-Arms
+Unit name: Spearmen
+
+Age 3:
+
+Unit name: Knights
+Unit name: Camels
+Unit name: Longswordmen
+Unit name: Pikemen
+Unit name: Viking Berserkers
+Unit name: Crossbowmen
+Unit name: Elite Skirmishers
+Unit name: Horse Archers
+Unit name: Throwing Axmen
+Unit name: Persian War Elephants
+Unit name: Celtic Woad Raiders
+Unit name: Knights Templar
+Unit name: Scorpions
+Unit name: Battering Rams
+Unit name: Onagers
+Unit name: Monks
+
+Age 4:
+
+Unit name: Two Handed Swordsmen
+Unit name: Elite Pikemen
+Unit name: Elite Archers
+Unit name: Arbalests
+Unit name: Expert Skirmishers
+Unit name: Hvy Horse Archers
+Unit name: Cavaliers
+Unit name: Heavy Camels
+Unit name: Elite Berserkers
+Unit name: Elite Woad Raiders
+Unit name: Trebuchets
+Unit name: Bombard Cannons
+Unit name: Hand Cannoneers
+Unit name: Champions
+Unit name: Paladins
+Unit name: Heavy Scorpions
+Unit name: Siege Rams
+Unit name: Elite Monks
+Unit name: Elite Knights Templar
+Unit name: Elite Janissaries
+
+Civ Specific Units:
+
+-Franks
+Unit name: Throwing Axmen
+Unit name: Elite Throwing Axmen
+
+-Britons
+Unit name: Longbowmen
+Unit name: Elite Longbowmen
+
+-Mongols
+Unit name: Mangudai
+Unit name: Elite Mangudai
+
+-Saracens
+Unit name: Mamelukes
+Unit name: Elite Mamelukes
+
+-Japanese
+Unit name: Samurai
Unit name: Elite Samurai \ No newline at end of file
diff --git a/build/content/raw_ents.json b/build/content/raw_ents.json
index 9d513ba..2a141bd 100644
--- a/build/content/raw_ents.json
+++ b/build/content/raw_ents.json
@@ -1,564 +1,564 @@
-Unit name: Militia
-Unit type: Infantry
-Bonuses: +33% vs. siege +33% vs. Building
-Move: 7
-Attack: 100
-Defense: 100
-Sight: 7
-Range: 1
-Specials: None
-
-
-Unit name: Villagers
-Unit type: Infantry
-Bonuses: +33% vs. siege +33% vs. Building
-Move: 7
-Attack: 50
-Defense: 50
-Sight: 7
-Range: 1
-Specials: Build
-
-
-Unit name: Scout Cavalry
-Unit type: Cavalry
-Bonuses: +33% vs. Infantry +33% vs. Ranged -50% Vs. Building
-Move: 12
-Attack: 100
-Defense: 100
-Sight: 10
-Range: 1
-Specials: Scout
-
-
-Age 2:
-
-Unit name: Archers
-Unit type: Ranged
-Bonuses: -50% vs. Building
-Move: 7
-Attack: 150
-Defense: 100
-Sight: 7
-Range: 3
-Specials: None
-
-
-Unit name: Skirmishers
-Unit type: Ranged
-Bonuses: -50% vs. Building
-Move: 7
-Attack: 110
-Defense: 110
-Sight: 7
-Range: 2
-Specials: Skirmish
-
-
-Unit name: Light Cavalry
-Unit type: Cavalry
-Bonuses: +33% vs. Infantry +33% vs. Ranged -50% vs. Building
-Move: 10
-Attack: 150
-Defense: 150
-Sight: 7
-Range: 1
-Specials: Plains Charge
-
-
-Unit name: Men-at-Arms
-Unit type: Infantry
-Bonuses: +33% vs. siege +33% vs. Building
-Move: 7
-Attack: 150
-Defense: 150
-Sight: 7
-Range: 1
-Specials: None
-
-
-Unit name: Spearmen
-Unit type: Infantry
-Bonuses: +33% vs. siege +33% vs. Building
-Move: 7
-Attack: 100
-Defense: 150
-Sight: 7
-Range: 1
-Specials: Anti-Cavalry
-
-
-Age 3:
-
-Unit name: Knights
-Unit type: Cavalry
-Bonuses: +33% vs. Infantry +33% vs. Ranged -50% Vs. Building
-Move: 10
-Attack: 200
-Defense: 200
-Sight: 7
-Range: 1
-Specials: Plains Charge
-
-
-Unit name: Camels
-Unit type: Cavalry
-Bonuses: +33% vs. Infantry +33% vs. Ranged -50% Vs. Building
-Move: 10
-Attack: 200
-Defense: 200
-Sight: 7
-Range: 1
-Specials: Desert Charge, Scares Horses.
-
-
-Unit name: Longswordmen
-Unit type: Infantry
-Bonuses: +33% vs. Siege +33% vs. Building
-Move: 7
-Attack: 200
-Defense: 200
-Sight: 7
-Range: 1
-Specials: None
-
-Unit name: Pikemen
-Unit type: Infantry
-Bonuses: +33% vs. Siege +33% vs. Building
-Move: 7
-Attack: 150
-Defense: 200
-Sight: 7
-Range: 1
-Specials: Anti-Cavalry
-
-Unit name: Viking Berserkers
-Unit type: Infantry
-Bonuses: +33% vs. Siege +33% vs. Building
-Move: 7
-Attack: 200
-Defense: 200
-Sight: 7
-Range: 1
-Specials: Frenzy
-
-Unit name: Crossbowmen
-Unit type: Ranged
-Bonuses: -50% vs. Building
-Move: 7
-Attack: 200
-Defense: 175
-Sight: 7
-Range: 3
-Specials: No Move & Attack.
-
-Unit name: Elite Skirmishers
-Unit type: Ranged
-Bonuses: -50% vs. Building
-Move: 7
-Attack: 150
-Defense: 150
-Sight: 7
-Range: 2
-Specials: Skirmish
-
-Unit name: Horse Archers
-Unit type: Ranged
-Bonuses: -50% vs. Building
-Move: 10
-Attack: 150
-Defense: 150
-Sight: 7
-Range: 2
-Specials: None
-
-Unit name: Throwing Axmen
-Unit type: Infantry
-Bonuses: 33% vs. Siege 33% vs. Building
-Move: 7
-Attack: 225
-Defense: 250
-Sight: 7
-Range: 1
-Specials: Skirmish, Woodsman
-
-Unit name: Persian War Elephants
-Unit type: Cavalry
-Bonuses: 33% vs. Infantry 33% vs. Ranged -50% vs. Building
-Move: 7
-Attack: 200
-Defense: 250
-Sight: 7
-Range: 1
-Specials: Causes Fear
-
-Unit name: Celtic Woad Raiders
-Unit type: Infantry
-Bonuses: 33% vs. Siege 33% vs. Building
-Move: 7
-Attack: 200
-Defense: 200
-Sight: 7
-Range: 1
-Specials: Causes Fear
-
-Unit name: Knights Templar
-Unit type: Cavalry
-Bonuses: 33% vs. Infantry 33% vs. Ranged -50% vs. Building
-Move: 10
-Attack: 200
-Defense: 200
-Sight: 7
-Range: 1
-Specials: Plains Charge, Zeal
-
-Unit name: Scorpions
-Unit type: Siege
-Bonuses: 50% vs. Building
-Move: 7
-Attack: 350
-Defense: 250
-Sight: 7
-Range: 3
-Specials: Units only, No Counter, No Move & Attack
-
-Unit name: Battering Rams
-Unit type: Siege
-Bonuses: 50% vs. Building
-Move: 7
-Attack: 400
-Defense: 325
-Sight: 7
-Range: 1
-Specials: Buildings only, No Counter.
-
-Unit name: Onagers
-Unit type: Siege
-Bonuses: 50% vs. Building
-Move: 7
-Attack: 275
-Defense: 275
-Sight: 7
-Range: 3
-Specials: No Counter, No Move & Attack
-
-
-Age 4:
-
-Unit name: Two Handed Swordsmen
-Unit type: Infantry
-Bonuses: +33% vs. Siege +33% vs. Building
-Move: 7
-Attack: 250
-Defense: 250
-Sight: 7
-Range: 1
-Specials: None
-
-Unit name: Elite Pikemen
-Unit type: Infantry
-Bonuses: +33% vs. Siege +33% vs. Building
-Move: 7
-Attack: 200
-Defense: 250
-Sight: 7
-Range: 1
-Specials: Anti-Cavalry
-
-Unit name: Archers
-Unit type: Ranged
-Bonuses: -50% vs. Building
-Move: 7
-Attack: 200
-Defense: 200
-Sight: 7
-Range: 3
-Specials: None
-
-Unit name: Arbalests
-Unit type: Ranged
-Bonuses: -50% vs. Building
-Move: 7
-Attack: 250
-Defense: 225
-Sight: 7
-Range: 3
-Specials: No Move & Attack.
-
-Unit name: Expert Skirmishers
-Unit type: Ranged
-Bonuses: -50% vs. Building
-Move: 7
-Attack: 190
-Defense: 190
-Sight: 7
-Range: 2
-Specials: Skirmish
-
-Unit name: Hvy Horse Archers
-Unit type: Ranged
-Bonuses: -50% vs. Building
-Move: 10
-Attack: 200
-Defense: 200
-Sight: 7
-Range: 2
-Specials: None
-
-Unit name: Cavaliers
-Unit type: Cavalry
-Bonuses: +33% vs. Infantry +33% vs. Ranged -50% Vs. Building
-Move: 10
-Attack: 250
-Defense: 250
-Sight: 7
-Range: 1
-Specials: Plains Charge
-
-Unit name: Heavy Camels
-Unit type: Cavalry
-Bonuses: +33% vs. Infantry +33% vs. Ranged -50% Vs. Building
-Move: 10
-Attack: 250
-Defense: 250
-Sight: 7
-Range: 1
-Specials: Desert Charge, Scares Horses.
-
-Unit name: Elite Berserkers
-Unit type: Infantry
-Bonuses: +33% vs. Siege +33% vs. Building
-Move: 7
-Attack: 250
-Defense: 250
-Sight: 7
-Range: 1
-Specials: Frenzy
-
-Unit name: Elite Woad Raiders
-Unit type: Infantry
-Bonuses: 33% vs. Siege 33% vs. Building
-Move: 7
-Attack: 250
-Defense: 250
-Sight: 7
-Range: 1
-Specials: Causes Fear
-
-Unit name: Trebuchets
-Unit type: Siege
-Bonuses: 50% vs. Building
-Move: 7
-Attack: 375
-Defense: 350
-Sight: 7
-Range: 3
-Specials: Min Range 2, No Counter, No Move & Attack
-
-Unit name: Bombard Cannons
-Unit type: Siege
-Bonuses: 50% vs. Building
-Move: 7
-Attack: 325
-Defense: 325
-Sight: 7
-Range: 3
-Specials: No Counter, No Move & Attack
-(Notes: You need to research 'Chemistry' To raise these.)
-
-Unit name: Hand Cannoneers
-Unit type: Ranged
-Bonuses: -50% vs. Building
-Move: 7
-Attack: 300
-Defense: 225
-Sight: 7
-Range: 3
-Specials: No Move & Attack
-(Notes: You need to research 'Chemistry' To raise these.)
-
-Unit name: Champions
-Unit type: Infantry
-Bonuses: +33% vs. Siege +33% vs. Building
-Move: 7
-Attack: 300
-Defense: 300
-Sight: 7
-Range: 1
-Specials: None
-(Notes: You need to research 'Arena' To raise these.)
-
-Unit name: Paladins
-Unit type: Cavalry
-Bonuses: +33% vs. Infantry +33% vs. Ranged -50% Vs. Building
-Move: 10
-Attack: 300
-Defense: 300
-Sight: 7
-Range: 1
-Specials: Plains Charge
-(Note: You need to research 'Squire' to create Paladins)
-
-Unit name: Heavy Scorpions
-Unit type: Siege
-Bonuses: 50% vs. Building
-Move: 7
-Attack: 400
-Defense: 300
-Sight: 7
-Range: 3
-Specials: Units only, No Counter, No Move & Attack
-(Note: You need to Research Siege Engineers to raise these.)
-
-Unit name: Siege Rams
-Unit type: Siege
-Bonuses: 50% vs. Building
-Move: 7
-Attack: 500
-Defense: 375
-Sight: 7
-Range: 3
-Specials: Buildings only, No Counter.
-
-
-Unit name: Elite Monks
-Unit type: Infantry
-Bonuses: 33% vs. Siege 33% vs. Building
-Move: 7
-Attack: 50
-Defense: 200
-Sight: 7
-Range: 1
-Specials: Improved Heal, Improved Convert
-
-Unit name: Elite Knights Templar
-Unit type: Cavalry
-Bonuses: 33% vs. Infantry 33% vs. Ranged -50% vs. Building
-Move: 10
-Attack: 250
-Defense: 250
-Sight: 7
-Range: 1
-Specials: Plains Charge, Zeal
-
-
-Unit name: Elite Janissaries
-Unit type: Ranged
-Bonuses: -50% vs. Building
-Move: 7
-Attack: 300
-Defense: 225
-Sight: 7
-Range: 1
-Specials: No Move & Attack
-
-Civ Specific Units:
-
--Franks
-Unit name: Throwing Axmen
-Unit type: Infantry
-Bonuses: 33% vs. Siege 33% vs. Building
-Move: 7
-Attack: 250
-Defense: 275
-Sight: 7
-Range: 1
-Specials: Skirmish, Woodsman
-
-
-Unit name: Elite Throwing Axmen
-Unit type: Infantry
-Bonuses: 33% vs. Siege 33% vs. Building
-Move: 7
-Attack: 275
-Defense: 300
-Sight: 7
-Range: 1
-Specials: Skirmish, Woodsman
-
--Britons
-Unit name: Longbowmen
-Unit type: Ranged
-Bonuses: -50% vs. Buildings
-Move: 7
-Attack: 250
-Defense: 200
-Sight: 7
-Range: 3
-Specials: Volley
-
-
-Unit name: Elite Longbowmen
-Unit type: Ranged
-Bonuses: -50% vs. Buildings
-Move: 7
-Attack: 275
-Defense: 250
-Sight: 7
-Range: 3
-Specials: Volley
-
--Mongols
-Unit name: Mangudai
-Unit type: Ranged
-Bonuses: -50% vs. Buildings
-Move: 7
-Attack: 150
-Defense: 150
-Sight: 7
-Range: 2
-Specials: First Strike
-
-Unit name: Elite Mangudai
-Unit type: Ranged
-Bonuses: -50% vs. Buildings
-Move: 7
-Attack: 200
-Defense: 200
-Sight: 7
-Range: 2
-Specials: First Strike
-
--Saracens
-Unit name: Mamelukes
-Unit type: Cavalry
-Bonuses: +33% vs. Infantry & Ranged, -50% vs. Buildings
-Move: 7
-Attack: 250
-Defense: 250
-Sight: 7
-Range: 1
-Specials: Desert Charge, Scares Horses
-
-
-Unit name: Elite Mamelukes
-Unit type: Cavalry
-Bonuses: +33% vs. Infantry & Ranged, -50% vs. Buildings
-Move: 7
-Attack: 300
-Defense: 300
-Sight: 7
-Range: 1
-Specials: Desert Charge, Scares Horses
-
--Japanese
-Unit name: Samurai
-Unit type: Infantry
-Bonuses: +33% vs. Siege & Buildings
-Move: 9
-Attack: 250
-Defense: 250
-Sight: 7
-Range: 1
-Specials: Seasoned Veteran
-
-
-Unit name: Elite Samurai
-Unit type: Infantry
-Bonuses: +33% vs. Siege & Buildings
-Move: 9
-Attack: 300
-Defense: 300
-Sight: 7
-Range: 1
+Unit name: Militia
+Unit type: Infantry
+Bonuses: +33% vs. siege +33% vs. Building
+Move: 7
+Attack: 100
+Defense: 100
+Sight: 7
+Range: 1
+Specials: None
+
+
+Unit name: Villagers
+Unit type: Infantry
+Bonuses: +33% vs. siege +33% vs. Building
+Move: 7
+Attack: 50
+Defense: 50
+Sight: 7
+Range: 1
+Specials: Build
+
+
+Unit name: Scout Cavalry
+Unit type: Cavalry
+Bonuses: +33% vs. Infantry +33% vs. Ranged -50% Vs. Building
+Move: 12
+Attack: 100
+Defense: 100
+Sight: 10
+Range: 1
+Specials: Scout
+
+
+Age 2:
+
+Unit name: Archers
+Unit type: Ranged
+Bonuses: -50% vs. Building
+Move: 7
+Attack: 150
+Defense: 100
+Sight: 7
+Range: 3
+Specials: None
+
+
+Unit name: Skirmishers
+Unit type: Ranged
+Bonuses: -50% vs. Building
+Move: 7
+Attack: 110
+Defense: 110
+Sight: 7
+Range: 2
+Specials: Skirmish
+
+
+Unit name: Light Cavalry
+Unit type: Cavalry
+Bonuses: +33% vs. Infantry +33% vs. Ranged -50% vs. Building
+Move: 10
+Attack: 150
+Defense: 150
+Sight: 7
+Range: 1
+Specials: Plains Charge
+
+
+Unit name: Men-at-Arms
+Unit type: Infantry
+Bonuses: +33% vs. siege +33% vs. Building
+Move: 7
+Attack: 150
+Defense: 150
+Sight: 7
+Range: 1
+Specials: None
+
+
+Unit name: Spearmen
+Unit type: Infantry
+Bonuses: +33% vs. siege +33% vs. Building
+Move: 7
+Attack: 100
+Defense: 150
+Sight: 7
+Range: 1
+Specials: Anti-Cavalry
+
+
+Age 3:
+
+Unit name: Knights
+Unit type: Cavalry
+Bonuses: +33% vs. Infantry +33% vs. Ranged -50% Vs. Building
+Move: 10
+Attack: 200
+Defense: 200
+Sight: 7
+Range: 1
+Specials: Plains Charge
+
+
+Unit name: Camels
+Unit type: Cavalry
+Bonuses: +33% vs. Infantry +33% vs. Ranged -50% Vs. Building
+Move: 10
+Attack: 200
+Defense: 200
+Sight: 7
+Range: 1
+Specials: Desert Charge, Scares Horses.
+
+
+Unit name: Longswordmen
+Unit type: Infantry
+Bonuses: +33% vs. Siege +33% vs. Building
+Move: 7
+Attack: 200
+Defense: 200
+Sight: 7
+Range: 1
+Specials: None
+
+Unit name: Pikemen
+Unit type: Infantry
+Bonuses: +33% vs. Siege +33% vs. Building
+Move: 7
+Attack: 150
+Defense: 200
+Sight: 7
+Range: 1
+Specials: Anti-Cavalry
+
+Unit name: Viking Berserkers
+Unit type: Infantry
+Bonuses: +33% vs. Siege +33% vs. Building
+Move: 7
+Attack: 200
+Defense: 200
+Sight: 7
+Range: 1
+Specials: Frenzy
+
+Unit name: Crossbowmen
+Unit type: Ranged
+Bonuses: -50% vs. Building
+Move: 7
+Attack: 200
+Defense: 175
+Sight: 7
+Range: 3
+Specials: No Move & Attack.
+
+Unit name: Elite Skirmishers
+Unit type: Ranged
+Bonuses: -50% vs. Building
+Move: 7
+Attack: 150
+Defense: 150
+Sight: 7
+Range: 2
+Specials: Skirmish
+
+Unit name: Horse Archers
+Unit type: Ranged
+Bonuses: -50% vs. Building
+Move: 10
+Attack: 150
+Defense: 150
+Sight: 7
+Range: 2
+Specials: None
+
+Unit name: Throwing Axmen
+Unit type: Infantry
+Bonuses: 33% vs. Siege 33% vs. Building
+Move: 7
+Attack: 225
+Defense: 250
+Sight: 7
+Range: 1
+Specials: Skirmish, Woodsman
+
+Unit name: Persian War Elephants
+Unit type: Cavalry
+Bonuses: 33% vs. Infantry 33% vs. Ranged -50% vs. Building
+Move: 7
+Attack: 200
+Defense: 250
+Sight: 7
+Range: 1
+Specials: Causes Fear
+
+Unit name: Celtic Woad Raiders
+Unit type: Infantry
+Bonuses: 33% vs. Siege 33% vs. Building
+Move: 7
+Attack: 200
+Defense: 200
+Sight: 7
+Range: 1
+Specials: Causes Fear
+
+Unit name: Knights Templar
+Unit type: Cavalry
+Bonuses: 33% vs. Infantry 33% vs. Ranged -50% vs. Building
+Move: 10
+Attack: 200
+Defense: 200
+Sight: 7
+Range: 1
+Specials: Plains Charge, Zeal
+
+Unit name: Scorpions
+Unit type: Siege
+Bonuses: 50% vs. Building
+Move: 7
+Attack: 350
+Defense: 250
+Sight: 7
+Range: 3
+Specials: Units only, No Counter, No Move & Attack
+
+Unit name: Battering Rams
+Unit type: Siege
+Bonuses: 50% vs. Building
+Move: 7
+Attack: 400
+Defense: 325
+Sight: 7
+Range: 1
+Specials: Buildings only, No Counter.
+
+Unit name: Onagers
+Unit type: Siege
+Bonuses: 50% vs. Building
+Move: 7
+Attack: 275
+Defense: 275
+Sight: 7
+Range: 3
+Specials: No Counter, No Move & Attack
+
+
+Age 4:
+
+Unit name: Two Handed Swordsmen
+Unit type: Infantry
+Bonuses: +33% vs. Siege +33% vs. Building
+Move: 7
+Attack: 250
+Defense: 250
+Sight: 7
+Range: 1
+Specials: None
+
+Unit name: Elite Pikemen
+Unit type: Infantry
+Bonuses: +33% vs. Siege +33% vs. Building
+Move: 7
+Attack: 200
+Defense: 250
+Sight: 7
+Range: 1
+Specials: Anti-Cavalry
+
+Unit name: Archers
+Unit type: Ranged
+Bonuses: -50% vs. Building
+Move: 7
+Attack: 200
+Defense: 200
+Sight: 7
+Range: 3
+Specials: None
+
+Unit name: Arbalests
+Unit type: Ranged
+Bonuses: -50% vs. Building
+Move: 7
+Attack: 250
+Defense: 225
+Sight: 7
+Range: 3
+Specials: No Move & Attack.
+
+Unit name: Expert Skirmishers
+Unit type: Ranged
+Bonuses: -50% vs. Building
+Move: 7
+Attack: 190
+Defense: 190
+Sight: 7
+Range: 2
+Specials: Skirmish
+
+Unit name: Hvy Horse Archers
+Unit type: Ranged
+Bonuses: -50% vs. Building
+Move: 10
+Attack: 200
+Defense: 200
+Sight: 7
+Range: 2
+Specials: None
+
+Unit name: Cavaliers
+Unit type: Cavalry
+Bonuses: +33% vs. Infantry +33% vs. Ranged -50% Vs. Building
+Move: 10
+Attack: 250
+Defense: 250
+Sight: 7
+Range: 1
+Specials: Plains Charge
+
+Unit name: Heavy Camels
+Unit type: Cavalry
+Bonuses: +33% vs. Infantry +33% vs. Ranged -50% Vs. Building
+Move: 10
+Attack: 250
+Defense: 250
+Sight: 7
+Range: 1
+Specials: Desert Charge, Scares Horses.
+
+Unit name: Elite Berserkers
+Unit type: Infantry
+Bonuses: +33% vs. Siege +33% vs. Building
+Move: 7
+Attack: 250
+Defense: 250
+Sight: 7
+Range: 1
+Specials: Frenzy
+
+Unit name: Elite Woad Raiders
+Unit type: Infantry
+Bonuses: 33% vs. Siege 33% vs. Building
+Move: 7
+Attack: 250
+Defense: 250
+Sight: 7
+Range: 1
+Specials: Causes Fear
+
+Unit name: Trebuchets
+Unit type: Siege
+Bonuses: 50% vs. Building
+Move: 7
+Attack: 375
+Defense: 350
+Sight: 7
+Range: 3
+Specials: Min Range 2, No Counter, No Move & Attack
+
+Unit name: Bombard Cannons
+Unit type: Siege
+Bonuses: 50% vs. Building
+Move: 7
+Attack: 325
+Defense: 325
+Sight: 7
+Range: 3
+Specials: No Counter, No Move & Attack
+(Notes: You need to research 'Chemistry' To raise these.)
+
+Unit name: Hand Cannoneers
+Unit type: Ranged
+Bonuses: -50% vs. Building
+Move: 7
+Attack: 300
+Defense: 225
+Sight: 7
+Range: 3
+Specials: No Move & Attack
+(Notes: You need to research 'Chemistry' To raise these.)
+
+Unit name: Champions
+Unit type: Infantry
+Bonuses: +33% vs. Siege +33% vs. Building
+Move: 7
+Attack: 300
+Defense: 300
+Sight: 7
+Range: 1
+Specials: None
+(Notes: You need to research 'Arena' To raise these.)
+
+Unit name: Paladins
+Unit type: Cavalry
+Bonuses: +33% vs. Infantry +33% vs. Ranged -50% Vs. Building
+Move: 10
+Attack: 300
+Defense: 300
+Sight: 7
+Range: 1
+Specials: Plains Charge
+(Note: You need to research 'Squire' to create Paladins)
+
+Unit name: Heavy Scorpions
+Unit type: Siege
+Bonuses: 50% vs. Building
+Move: 7
+Attack: 400
+Defense: 300
+Sight: 7
+Range: 3
+Specials: Units only, No Counter, No Move & Attack
+(Note: You need to Research Siege Engineers to raise these.)
+
+Unit name: Siege Rams
+Unit type: Siege
+Bonuses: 50% vs. Building
+Move: 7
+Attack: 500
+Defense: 375
+Sight: 7
+Range: 3
+Specials: Buildings only, No Counter.
+
+
+Unit name: Elite Monks
+Unit type: Infantry
+Bonuses: 33% vs. Siege 33% vs. Building
+Move: 7
+Attack: 50
+Defense: 200
+Sight: 7
+Range: 1
+Specials: Improved Heal, Improved Convert
+
+Unit name: Elite Knights Templar
+Unit type: Cavalry
+Bonuses: 33% vs. Infantry 33% vs. Ranged -50% vs. Building
+Move: 10
+Attack: 250
+Defense: 250
+Sight: 7
+Range: 1
+Specials: Plains Charge, Zeal
+
+
+Unit name: Elite Janissaries
+Unit type: Ranged
+Bonuses: -50% vs. Building
+Move: 7
+Attack: 300
+Defense: 225
+Sight: 7
+Range: 1
+Specials: No Move & Attack
+
+Civ Specific Units:
+
+-Franks
+Unit name: Throwing Axmen
+Unit type: Infantry
+Bonuses: 33% vs. Siege 33% vs. Building
+Move: 7
+Attack: 250
+Defense: 275
+Sight: 7
+Range: 1
+Specials: Skirmish, Woodsman
+
+
+Unit name: Elite Throwing Axmen
+Unit type: Infantry
+Bonuses: 33% vs. Siege 33% vs. Building
+Move: 7
+Attack: 275
+Defense: 300
+Sight: 7
+Range: 1
+Specials: Skirmish, Woodsman
+
+-Britons
+Unit name: Longbowmen
+Unit type: Ranged
+Bonuses: -50% vs. Buildings
+Move: 7
+Attack: 250
+Defense: 200
+Sight: 7
+Range: 3
+Specials: Volley
+
+
+Unit name: Elite Longbowmen
+Unit type: Ranged
+Bonuses: -50% vs. Buildings
+Move: 7
+Attack: 275
+Defense: 250
+Sight: 7
+Range: 3
+Specials: Volley
+
+-Mongols
+Unit name: Mangudai
+Unit type: Ranged
+Bonuses: -50% vs. Buildings
+Move: 7
+Attack: 150
+Defense: 150
+Sight: 7
+Range: 2
+Specials: First Strike
+
+Unit name: Elite Mangudai
+Unit type: Ranged
+Bonuses: -50% vs. Buildings
+Move: 7
+Attack: 200
+Defense: 200
+Sight: 7
+Range: 2
+Specials: First Strike
+
+-Saracens
+Unit name: Mamelukes
+Unit type: Cavalry
+Bonuses: +33% vs. Infantry & Ranged, -50% vs. Buildings
+Move: 7
+Attack: 250
+Defense: 250
+Sight: 7
+Range: 1
+Specials: Desert Charge, Scares Horses
+
+
+Unit name: Elite Mamelukes
+Unit type: Cavalry
+Bonuses: +33% vs. Infantry & Ranged, -50% vs. Buildings
+Move: 7
+Attack: 300
+Defense: 300
+Sight: 7
+Range: 1
+Specials: Desert Charge, Scares Horses
+
+-Japanese
+Unit name: Samurai
+Unit type: Infantry
+Bonuses: +33% vs. Siege & Buildings
+Move: 9
+Attack: 250
+Defense: 250
+Sight: 7
+Range: 1
+Specials: Seasoned Veteran
+
+
+Unit name: Elite Samurai
+Unit type: Infantry
+Bonuses: +33% vs. Siege & Buildings
+Move: 9
+Attack: 300
+Defense: 300
+Sight: 7
+Range: 1
Specials: Seasoned Veteran \ No newline at end of file
diff --git a/build/content/raw_techs.json b/build/content/raw_techs.json
index 3f27597..5a39e01 100644
--- a/build/content/raw_techs.json
+++ b/build/content/raw_techs.json
@@ -1,303 +1,303 @@
-[A1] List of Technologies
-
----------
-Dark Age:
----------
-
-* Loom
-Requires: Town Center
-Cost: 50f 150g
-All Villagers get +25 DEF
-
-* Town Scouts
-Requires: Town Center
-Cost: 50f 150g
-Town Centers gain +4 Sight
-
-* Leather Soles
-Prereqs: Town Center
-Cost: 50f 150g
-Villagers gain +1 Move
-
-* Weaponsmith
-Requires: Barracks
-Cost: 50f 150g
-Militia gain +25 ATT
-
-============
--Feudal Age:
-============
-
-* Town Watch
-Requires: Town Center
-Cost: 95f 280g
-Improves Town Center DEF by +20% and Sight by +2
-
-* Wheelbarrow
-Requires: Town Center
-Cost: 125f 375g
-Cost of buildings is reduced by 10%
-
-* Advanced Mining
-Requires: Mine
-Cost: 95f 280g
-+15% to Mine income
-
-* Horse Collar
-Requires: Mill
-Cost: 95f 280g
-+15% to food income
-
-* Scale Mail Armor
-Requires: Blacksmith
-Cost: 95f 280g
-+25% DEF for Infantry
-
-* Scale Barding
-Requires: Blacksmith
-Cost: 95f 280g
-+25% DEF for Cavalry
-
-* Fletching
-Requires: Blacksmith
-Cost: 95f 280g
-+25% ATT for Ranged Units
-
-* Padded Armor
-Requires: Blacksmith
-Cost: 95f 280g
-+25% DEF for Ranged Units
-
-* Forging
-Requires: Blacksmith
-Cost: 155f 470g
-+25% ATT for Infantry and Cavalry
-
-* Tracking
-Requires: Barracks
-Cost: 95f 280g
-+2 Sight for Infantry
-
-* Cartography
-Requires: Market
-Cost: 95f 280g
-+1 Sight for all units
-
-++++++++++++
--Castle Age:
-++++++++++++
-
-* Town Patrol
-Requires: Town Center
-Cost: 150f 450g
-+2 Sight and +20% DEF for Town Center
-
-* Hand Cart
-Requires: Town Center
-Cost: 150f 450g
-Cost of Building is reduced by 10%
-
-* Shaft Mining
-Requires: Mine
-Cost: 150f 450g
-+15% to Mine income
-
-* Heavy Plow
-Requires: Mill
-Cost: 150f 450g
-+15% to food income
-
-* Chain Mail Armor
-Requires: Blacksmith
-Cost: 150f 450g
-+25% DEF to Age 3 infantry
-
-* Chain Barding
-Requires: Blacksmith
-Cost: 150f 450g
-+25% DEF to Age 3 Cavalry
-
-* Bodkin Arrow
-Requires: Blacksmith
-Cost: 150f 450g
-+25% ATT to Age 3 Ranged Units
-
-* Leather Armor
-Requires: Blacksmith
-Cost: 150f 450g
-+25% DEF to Age 3 Ranged Units
-
-* Iron Casting
-Requires: Blacksmith
-Cost: 250f 750g
-+25% ATT to Age 3 Infantry and Cavalry
-
-* Conscription
-Requires: Barracks
-Cost: 150f 450g
-Cost of Infantry is reduced by 15 food and 15 gold
-
-* Husbandry
-Requires: Stable
-Cost: 150f 450g
-Cost of Cavalry is reduced by 15 food and 15 gold
-
-* Archery Tournaments
-Requires: Archery Range
-Cost: 150f 450g
-Cost of Ranged Units is reduced by 15 food and 15 gold
-
-* Mechanics Guild
-Requires: Siege Workshop
-Cost: 150f 450g
-Cost of Siege Units is reduced by 15 food and 15 gold
-
-* Banking
-Requires: Market
-Cost: 200f 600g
-+ 5% gold Income and improved Trade Rate
-
-* Merchant Network
-Requires: Market
-Cost: 150f 450g
-Price for Mercenaries is reduced by 25%
-
-* Redemption
-Requires: Church
-Cost: 150f 450g
-Improves Heal ability of Monks and Elite Monks
-
-* Fervor
-Requires: Church
-Cost: 150f 450g
-Improves Convert ability of Monks and Elite Monks
-
-* Sanctity
-Requires: Church
-Cost: 150f 450g
-+25% DEF for Monks and Elite Monks
-
-* Murder Holes
-Requires: University
-Cost: 95f 280g
-+25% DEF for Towers
-
-* Masonry
-Requires: University
-Cost: 150f 450g
-+5% DEF for all buildings
-
-/////////////
-Imperial Age:
-\\\\\\\\\\\\\
-
-
-* Crop Rotation
-Requires: Mill
-Cost: 250f 750g
-+10% to food income
-
-* Plate Mail Armor
-Requires: Blacksmith
-Cost: 250f 750g
-Age 4 Infantry units gain +25% DEF
-
-* Plate Barding
-Requires: Blacksmith
-Cost: 250f 750g
-Age 4 Cavalry units gain +25% DEF
-
-* Bracers
-Requires: Blacksmith
-Cost: 250f 750g
-Age 4 Ranged units gain +25% ATK
-
-* Ring Archer Armor
-Requires: Blacksmith
-Cost: 250f 750g
-Age 4 Ranged units gain +25% DEF
-
-* Blast Furnace
-Requires: Blacksmith
-Cost: 625f 975g
-Age 4 INF and CAV units gain +25% ATK
-
-* Arena
-Requires: Barracks
-Cost: 250f 750g
-Allows Champions
-
-* Squires
-Requires: Stables
-Cost: 250f 750g
-Allows Paladins
-
-* Flaming Arrows
-Requires: Archery Range
-Cost: 300f 900g
-RNG units no longer suffer penalty vs. BLDGS
-
-* Sappers
-Requires: Castle
-Cost: 300f 900g
-All INF units improve in +50% ATK vs. buildings
-
-* Hoardings
-Requires: Castle
-Cost: 250f 750g
-Improves Castle DEF by +35%
-
-* Spies
-Requires: Castles
-Cost: 300f 900g
-All enemy Town Complexes are now sighted
-
-* Guilds
-Requires: Market
-Cost: 300f 900g
-+5% gold income and improves Trade rate
-
-* Atonement
-Requires: Church
-Cost: 250f 750g
-Improves Heal ability of Monks or Elite Monks
-
-* Block Printing
-Requires: Church
-Cost: 250f 750g
-Improves Convert ability of Monks or Elite Monks
-
-* Illumination
-Requires: Church
-Cost: 250f 750g
-+505 gold income from all relics
-
-* Faith
-Requires: Church
-Cost: 250f 750g
-Monks and Elite Monks gain +25% DEF
-
-* Treadmill Crane
-Requires: University
-Cost: 250f 750g
-Cost of buildings is reduced by 10%
-
-* Siege Engineers
-Requires: University
-Cost: 250f 750g
-Allows Imperial Age Siege units to be built
-
-* Architecture
-Requires: University
-Cost: 250f 750g
-+5% DEF for all buildings
-
-* Chemistry
-Requires: University
-Cost: 250f 750g
-Allows Hand Cannondeers and Bombard Cannons
-
-* Ballistics
-Requires: University
-Cost: 300f 900g
+[A1] List of Technologies
+
+---------
+Dark Age:
+---------
+
+* Loom
+Requires: Town Center
+Cost: 50f 150g
+All Villagers get +25 DEF
+
+* Town Scouts
+Requires: Town Center
+Cost: 50f 150g
+Town Centers gain +4 Sight
+
+* Leather Soles
+Prereqs: Town Center
+Cost: 50f 150g
+Villagers gain +1 Move
+
+* Weaponsmith
+Requires: Barracks
+Cost: 50f 150g
+Militia gain +25 ATT
+
+============
+-Feudal Age:
+============
+
+* Town Watch
+Requires: Town Center
+Cost: 95f 280g
+Improves Town Center DEF by +20% and Sight by +2
+
+* Wheelbarrow
+Requires: Town Center
+Cost: 125f 375g
+Cost of buildings is reduced by 10%
+
+* Advanced Mining
+Requires: Mine
+Cost: 95f 280g
++15% to Mine income
+
+* Horse Collar
+Requires: Mill
+Cost: 95f 280g
++15% to food income
+
+* Scale Mail Armor
+Requires: Blacksmith
+Cost: 95f 280g
++25% DEF for Infantry
+
+* Scale Barding
+Requires: Blacksmith
+Cost: 95f 280g
++25% DEF for Cavalry
+
+* Fletching
+Requires: Blacksmith
+Cost: 95f 280g
++25% ATT for Ranged Units
+
+* Padded Armor
+Requires: Blacksmith
+Cost: 95f 280g
++25% DEF for Ranged Units
+
+* Forging
+Requires: Blacksmith
+Cost: 155f 470g
++25% ATT for Infantry and Cavalry
+
+* Tracking
+Requires: Barracks
+Cost: 95f 280g
++2 Sight for Infantry
+
+* Cartography
+Requires: Market
+Cost: 95f 280g
++1 Sight for all units
+
+++++++++++++
+-Castle Age:
+++++++++++++
+
+* Town Patrol
+Requires: Town Center
+Cost: 150f 450g
++2 Sight and +20% DEF for Town Center
+
+* Hand Cart
+Requires: Town Center
+Cost: 150f 450g
+Cost of Building is reduced by 10%
+
+* Shaft Mining
+Requires: Mine
+Cost: 150f 450g
++15% to Mine income
+
+* Heavy Plow
+Requires: Mill
+Cost: 150f 450g
++15% to food income
+
+* Chain Mail Armor
+Requires: Blacksmith
+Cost: 150f 450g
++25% DEF to Age 3 infantry
+
+* Chain Barding
+Requires: Blacksmith
+Cost: 150f 450g
++25% DEF to Age 3 Cavalry
+
+* Bodkin Arrow
+Requires: Blacksmith
+Cost: 150f 450g
++25% ATT to Age 3 Ranged Units
+
+* Leather Armor
+Requires: Blacksmith
+Cost: 150f 450g
++25% DEF to Age 3 Ranged Units
+
+* Iron Casting
+Requires: Blacksmith
+Cost: 250f 750g
++25% ATT to Age 3 Infantry and Cavalry
+
+* Conscription
+Requires: Barracks
+Cost: 150f 450g
+Cost of Infantry is reduced by 15 food and 15 gold
+
+* Husbandry
+Requires: Stable
+Cost: 150f 450g
+Cost of Cavalry is reduced by 15 food and 15 gold
+
+* Archery Tournaments
+Requires: Archery Range
+Cost: 150f 450g
+Cost of Ranged Units is reduced by 15 food and 15 gold
+
+* Mechanics Guild
+Requires: Siege Workshop
+Cost: 150f 450g
+Cost of Siege Units is reduced by 15 food and 15 gold
+
+* Banking
+Requires: Market
+Cost: 200f 600g
++ 5% gold Income and improved Trade Rate
+
+* Merchant Network
+Requires: Market
+Cost: 150f 450g
+Price for Mercenaries is reduced by 25%
+
+* Redemption
+Requires: Church
+Cost: 150f 450g
+Improves Heal ability of Monks and Elite Monks
+
+* Fervor
+Requires: Church
+Cost: 150f 450g
+Improves Convert ability of Monks and Elite Monks
+
+* Sanctity
+Requires: Church
+Cost: 150f 450g
++25% DEF for Monks and Elite Monks
+
+* Murder Holes
+Requires: University
+Cost: 95f 280g
++25% DEF for Towers
+
+* Masonry
+Requires: University
+Cost: 150f 450g
++5% DEF for all buildings
+
+/////////////
+Imperial Age:
+\\\\\\\\\\\\\
+
+
+* Crop Rotation
+Requires: Mill
+Cost: 250f 750g
++10% to food income
+
+* Plate Mail Armor
+Requires: Blacksmith
+Cost: 250f 750g
+Age 4 Infantry units gain +25% DEF
+
+* Plate Barding
+Requires: Blacksmith
+Cost: 250f 750g
+Age 4 Cavalry units gain +25% DEF
+
+* Bracers
+Requires: Blacksmith
+Cost: 250f 750g
+Age 4 Ranged units gain +25% ATK
+
+* Ring Archer Armor
+Requires: Blacksmith
+Cost: 250f 750g
+Age 4 Ranged units gain +25% DEF
+
+* Blast Furnace
+Requires: Blacksmith
+Cost: 625f 975g
+Age 4 INF and CAV units gain +25% ATK
+
+* Arena
+Requires: Barracks
+Cost: 250f 750g
+Allows Champions
+
+* Squires
+Requires: Stables
+Cost: 250f 750g
+Allows Paladins
+
+* Flaming Arrows
+Requires: Archery Range
+Cost: 300f 900g
+RNG units no longer suffer penalty vs. BLDGS
+
+* Sappers
+Requires: Castle
+Cost: 300f 900g
+All INF units improve in +50% ATK vs. buildings
+
+* Hoardings
+Requires: Castle
+Cost: 250f 750g
+Improves Castle DEF by +35%
+
+* Spies
+Requires: Castles
+Cost: 300f 900g
+All enemy Town Complexes are now sighted
+
+* Guilds
+Requires: Market
+Cost: 300f 900g
++5% gold income and improves Trade rate
+
+* Atonement
+Requires: Church
+Cost: 250f 750g
+Improves Heal ability of Monks or Elite Monks
+
+* Block Printing
+Requires: Church
+Cost: 250f 750g
+Improves Convert ability of Monks or Elite Monks
+
+* Illumination
+Requires: Church
+Cost: 250f 750g
++505 gold income from all relics
+
+* Faith
+Requires: Church
+Cost: 250f 750g
+Monks and Elite Monks gain +25% DEF
+
+* Treadmill Crane
+Requires: University
+Cost: 250f 750g
+Cost of buildings is reduced by 10%
+
+* Siege Engineers
+Requires: University
+Cost: 250f 750g
+Allows Imperial Age Siege units to be built
+
+* Architecture
+Requires: University
+Cost: 250f 750g
++5% DEF for all buildings
+
+* Chemistry
+Requires: University
+Cost: 250f 750g
+Allows Hand Cannondeers and Bombard Cannons
+
+* Ballistics
+Requires: University
+Cost: 300f 900g
+25% ATK for Siege units with Range above 1 \ No newline at end of file
diff --git a/build/content/techs.json b/build/content/techs.json
index 871b5e2..4cadf44 100644
--- a/build/content/techs.json
+++ b/build/content/techs.json
@@ -1,394 +1,394 @@
-[
- {
- "name": "Loom", "id": 0, "level": 0,
- "cost": [ 50, 150 ], "req_id": 100,
- "bonus": {
- "aff_id": [ 0 ],
- "defence": 0.25
- }
- },{
- "name": "Town Scouts", "id": 1, "level": 0,
- "cost": [ 50, 150 ], "req_id": 100,
- "bonus": {
- "aff_id": [ 100 ],
- "sight": 4
- }
- },{
- "name": "Leather Soles", "id": 2, "level": 0,
- "cost": [ 50, 150 ], "req_id": 100,
- "bonus": {
- "aff_id": [ 0 ],
- "move": 1
- }
- },{
- "name": "Weaponsmith", "id": 3, "level": 0,
- "cost": [ 50, 150 ], "req_id": 104,
- "bonus": {
- "aff_id": [ 1 ],
- "attack": 0.25
- }
- },{
- "name": "Town Watch", "id": 4, "level": 1,
- "cost": [ 95, 280 ], "req_id": 100,
- "bonus": {
- "aff_id": [ 100 ],
- "defence": 0.2, "sight": 2
- }
- },{
- "name": "Wheelbarrow", "id": 5, "level": 1,
- "cost": [ 125, 375 ], "req_id": 100,
- "bonus": {
- "aff_class": [ "bld" ],
- "cost": [ -0.1, -0.1 ]
- }
- },{
- "name": "Advanced Mining", "id": 6, "level": 1,
- "cost": [ 95, 280 ], "req_id": 102,
- "bonus": {
- "aff_id": [ 102 ],
- "prod": [ 0, 0.15 ]
- }
- },{
- "name": "Horse Collar", "id": 7, "level": 1,
- "cost": [ 95, 280 ], "req_id": 101,
- "bonus": {
- "prod": [ 0.15, 0 ]
- }
- },{
- "name": "Scale Mail Armor", "id": 8, "level": 1,
- "cost": [ 95, 280 ], "req_id": 106,
- "bonus": {
- "aff_class": [ "inf" ],
- "aff_level": 1,
- "defence": 0.25
- }
- },{
- "name": "Scale Barding", "id": 9, "level": 1,
- "cost": [ 95, 280 ], "req_id": 106,
- "bonus": {
- "aff_class": [ "cav" ],
- "aff_level": 1,
- "defence": 0.25
- }
- },{
- "name": "Fletching", "id": 10, "level": 1,
- "cost": [ 95, 280 ], "req_id": 106,
- "bonus": {
- "aff_class": [ "ran" ],
- "aff_level": 1,
- "attack": 0.25
- }
- },{
- "name": "Padded Armor", "id": 11, "level": 1,
- "cost": [ 95, 280 ], "req_id": 106,
- "bonus": {
- "aff_class": [ "ran" ],
- "aff_level": 1,
- "defence": 0.25
- }
- },{
- "name": "Forging", "id": 12, "level": 1,
- "cost": [ 155, 470 ], "req_id": 106,
- "bonus": {
- "aff_class": [ "inf", "cav" ],
- "aff_level": 1,
- "attack": 0.25
- }
- },{
- "name": "Tracking", "id": 13, "level": 1,
- "cost": [ 95, 280 ], "req_id": 104,
- "bonus": {
- "aff_class": [ "inf" ],
- "sight": 2
- }
- },{
- "name": "Cartography", "id": 14, "level": 1,
- "cost": [ 95, 280 ], "req_id": 107,
- "bonus": {
- "sight": 1
- }
- },{
- "name": "Trading", "id": 15, "level": 1,
- "cost": [ 95, 280 ], "req_id": 107,
- "bonus": {
- "trade": 1
- }
- },{
- "name": "Coniage", "id": 16, "level": 1,
- "cost": [ 125, 375 ], "req_id": 107,
- "bonus": {
- "prod": [ 0, 0.1 ]
- }
- },{
- "name": "Town Patrol", "id": 17, "level": 2,
- "cost": [ 150, 450 ], "req_id": 100,
- "bonus": {
- "aff_id": [ 100 ],
- "defence": 0.2, "sight": 2
- }
- },{
- "name": "Hand Cart", "id": 18, "level": 2,
- "cost": [ 150, 450 ], "req_id": 100,
- "bonus": {
- "aff_class": [ "bld" ],
- "cost": [ -0.1, -0.1 ]
- }
- },{
- "name": "Shaft Mining", "id": 19, "level": 2,
- "cost": [ 150, 450 ], "req_id": 102,
- "bonus": {
- "aff_id": [ 102 ],
- "prod": [ 0, 0.15 ]
- }
- },{
- "name": "Heavy Plow", "id": 20, "level": 2,
- "cost": [ 150, 450 ], "req_id": 101,
- "bonus": {
- "prod": [ 0.1, 0 ]
- }
- },{
- "name": "Chain Mail Armor", "id": 21, "level": 2,
- "cost": [ 150, 450 ], "req_id": 106,
- "bonus": {
- "aff_level": 2,
- "aff_class": [ "inf" ],
- "defence": 0.25
- }
- },{
- "name": "Chain Barding", "id": 22, "level": 2,
- "cost": [ 150, 450 ], "req_id": 106,
- "bonus": {
- "aff_level": 2,
- "aff_class": [ "cav" ],
- "defence": 0.25
- }
- },{
- "name": "Bodkin Arrow", "id": 23, "level": 2,
- "cost": [ 150, 450 ], "req_id": 106,
- "bonus": {
- "aff_level": 2,
- "aff_class": [ "ran" ],
- "attack": 0.25
- }
- },{
- "name": "Leather Armor", "id": 24, "level": 2,
- "cost": [ 150, 450 ], "req_id": 106,
- "bonus": {
- "aff_level": 2,
- "aff_class": [ "ran" ],
- "defence": 0.25
- }
- },{
- "name": "Iron Casting", "id": 25, "level": 2,
- "cost": [ 250, 750 ], "req_id": 106,
- "bonus": {
- "aff_level": 2,
- "aff_class": [ "inf", "cav" ],
- "attack": 0.25
- }
- },{
- "name": "Conscription", "id": 26, "level": 2,
- "cost": [ 150, 450 ], "req_id": 104,
- "bonus": {
- "aff_class": [ "inf" ],
- "cost_abs": [ -15, -15 ]
- }
- },{
- "name": "Husbandry", "id": 27, "level": 2,
- "cost": [ 150, 450 ], "req_id": 108,
- "bonus": {
- "aff_class": [ "cav" ],
- "cost_abs": [ -15, -15 ]
- }
- },{
- "name": "Tournaments", "id": 28, "level": 2,
- "cost": [ 150, 450 ], "req_id": 105,
- "bonus": {
- "aff_class": [ "ran" ],
- "cost_abs": [ -15, -15 ]
- }
- },{
- "name": "Mechanics Guild", "id": 29, "level": 2,
- "cost": [ 150, 450 ], "req_id": 109,
- "bonus": {
- "aff_class": [ "sie" ],
- "cost_abs": [ -15, -15 ]
- }
- },{
- "name": "Banking", "id": 30, "level": 2,
- "cost": [ 200, 600 ], "req_id": 107,
- "bonus": {
- "trade": 1,
- "prod": [ 0, 0.05 ]
- }
- },{
- "name": "Merchant Network", "id": 31, "level": 2,
- "cost": [ 150, 450 ], "req_id": 107
- },{
- "name": "Redemption", "id": 32, "level": 2,
- "cost": [ 150, 450 ], "req_id": 110,
- "bonus": {
- "aff_id": [ 23 ],
- "improved_heal": 1
- }
- },{
- "name": "Fervor", "id": 33, "level": 2,
- "cost": [ 150, 450 ], "req_id": 110,
- "bonus": {
- "aff_id": [ 23 ],
- "improved_convert": 1
- }
- },{
- "name": "Sanctity", "id": 34, "level": 2,
- "cost": [ 150, 450 ], "req_id": 110,
- "bonus": {
- "aff_id": [ 23 ],
- "defence": 0.25
- }
- },{
- "name": "Murder Holes", "id": 35, "level": 2,
- "cost": [ 95, 280 ], "req_id": 111,
- "bonus": {
- "aff_id": [ 112 ],
- "defence": 0.25
- }
- },{
- "name": "Masonry", "id": 36, "level": 2,
- "cost": [ 95, 280 ], "req_id": 111,
- "bonus": {
- "aff_class": [ "bld" ],
- "defence": 0.05
- }
- },{
- "name": "Crop Rotation", "id": 37, "level": 3,
- "cost": [ 250, 750 ], "req_id": 101,
- "bonus": {
- "prod": [ 0.1, 0 ]
- }
- },{
- "name": "Plate Mail", "id": 38, "level": 3,
- "cost": [ 250, 750 ], "req_id": 106,
- "bonus": {
- "aff_level": 3,
- "aff_class": [ "inf" ],
- "defence": 0.25
- }
- },{
- "name": "Plate Barding", "id": 39, "level": 3,
- "cost": [ 250, 750 ], "req_id": 106,
- "bonus": {
- "aff_level": 3,
- "aff_class": [ "cav" ],
- "defence": 0.25
- }
- },{
- "name": "Bracers", "id": 40, "level": 3,
- "cost": [ 250, 750 ], "req_id": 106,
- "bonus": {
- "aff_level": 3,
- "aff_class": [ "ran" ],
- "attack": 0.25
- }
- },{
- "name": "Ring Archer Armor", "id": 41, "level": 3,
- "cost": [ 250, 750 ], "req_id": 106,
- "bonus": {
- "aff_level": 3,
- "aff_class": [ "ran" ],
- "defence": 0.25
- }
- },{
- "name": "Blast Furnace", "id": 42, "level": 3,
- "cost": [ 625, 975 ], "req_id": 106,
- "bonus": {
- "aff_level": 3,
- "aff_class": [ "inf", "cav" ],
- "attack": 0.25
- }
- },{
- "name": "Arena", "id": 43, "level": 3,
- "cost": [ 250, 750 ], "req_id": 104
- },{
- "name": "Squires", "id": 44, "level": 3,
- "cost": [ 250, 750 ], "req_id": 108
- },{
- "name": "Flaming Arrows", "id": 45, "level": 3,
- "cost": [ 300, 900 ], "req_id": 105
- },{
- "name": "Sappers", "id": 46, "level": 3,
- "cost": [ 300, 900 ], "req_id": 113
- },{
- "name": "Hoardings", "id": 47, "level": 3,
- "cost": [ 250, 750 ], "req_id": 113,
- "bonus": {
- "aff_id": [ 113 ],
- "defence": 0.35
- }
- },{
- "name": "Spies", "id": 48, "level": 3,
- "cost": [ 300, 900 ], "req_id": 113
- },{
- "name": "Guilds", "id": 49, "level": 3,
- "cost": [ 250, 750 ], "req_id": 107,
- "bonus": {
- "trade": 1,
- "prod": [ 0, 0.05 ]
- }
- },{
- "name": "Atonement", "id": 50, "level": 3,
- "cost": [ 250, 750 ], "req_id": 110,
- "bonus": {
- "aff_id": [ 23 ],
- "improved_heal": 1
- }
- },{
- "name": "Block Printing", "id": 51, "level": 3,
- "cost": [ 250, 750 ], "req_id": 110,
- "bonus": {
- "aff_id": [ 23 ],
- "improved_convert": 1
- }
- },{
- "name": "Illumination", "id": 52, "level": 3,
- "cost": [ 250, 750 ], "req_id": 110,
- "bonus": {
- "aff_id": [ 110 ],
- "prod": [ 0, 0.5 ]
- }
- },{
- "name": "Faith", "id": 53, "level": 3,
- "cost": [ 250, 750 ], "req_id": 110,
- "bonus": {
- "aff_id": [ 23 ],
- "defence": 0.25
- }
- },{
- "name": "Treadmill Crane", "id": 54, "level": 3,
- "cost": [ 250, 750 ], "req_id": 111,
- "bonus": {
- "aff_class": [ "bld" ],
- "cost": [ 0.1, 0.1 ]
- }
- },{
- "name": "Siege Engineers", "id": 55, "level": 3,
- "cost": [ 250, 750 ], "req_id": 111
- },{
- "name": "Architecture", "id": 56, "level": 3,
- "cost": [ 250, 750 ], "req_id": 111,
- "bonus": {
- "aff_class": [ "bld" ],
- "defence": 0.05
- }
- },{
- "name": "Chemistry", "id": 57, "level": 3,
- "cost": [ 250, 750 ], "req_id": 111
- },{
- "name": "Ballistics", "id": 58, "level": 3,
- "cost": [ 300, 900 ], "req_id": 111,
- "bonus": {
- "aff_class": [ "sie" ],
- "req_range": 1,
- "attack": 0.25
- }
- }
+[
+ {
+ "name": "Loom", "id": 0, "level": 0,
+ "cost": [ 50, 150 ], "req_id": 100,
+ "bonus": {
+ "aff_id": [ 0 ],
+ "defence": 0.25
+ }
+ },{
+ "name": "Town Scouts", "id": 1, "level": 0,
+ "cost": [ 50, 150 ], "req_id": 100,
+ "bonus": {
+ "aff_id": [ 100 ],
+ "sight": 4
+ }
+ },{
+ "name": "Leather Soles", "id": 2, "level": 0,
+ "cost": [ 50, 150 ], "req_id": 100,
+ "bonus": {
+ "aff_id": [ 0 ],
+ "move": 1
+ }
+ },{
+ "name": "Weaponsmith", "id": 3, "level": 0,
+ "cost": [ 50, 150 ], "req_id": 104,
+ "bonus": {
+ "aff_id": [ 1 ],
+ "attack": 0.25
+ }
+ },{
+ "name": "Town Watch", "id": 4, "level": 1,
+ "cost": [ 95, 280 ], "req_id": 100,
+ "bonus": {
+ "aff_id": [ 100 ],
+ "defence": 0.2, "sight": 2
+ }
+ },{
+ "name": "Wheelbarrow", "id": 5, "level": 1,
+ "cost": [ 125, 375 ], "req_id": 100,
+ "bonus": {
+ "aff_class": [ "bld" ],
+ "cost": [ -0.1, -0.1 ]
+ }
+ },{
+ "name": "Advanced Mining", "id": 6, "level": 1,
+ "cost": [ 95, 280 ], "req_id": 102,
+ "bonus": {
+ "aff_id": [ 102 ],
+ "prod": [ 0, 0.15 ]
+ }
+ },{
+ "name": "Horse Collar", "id": 7, "level": 1,
+ "cost": [ 95, 280 ], "req_id": 101,
+ "bonus": {
+ "prod": [ 0.15, 0 ]
+ }
+ },{
+ "name": "Scale Mail Armor", "id": 8, "level": 1,
+ "cost": [ 95, 280 ], "req_id": 106,
+ "bonus": {
+ "aff_class": [ "inf" ],
+ "aff_level": 1,
+ "defence": 0.25
+ }
+ },{
+ "name": "Scale Barding", "id": 9, "level": 1,
+ "cost": [ 95, 280 ], "req_id": 106,
+ "bonus": {
+ "aff_class": [ "cav" ],
+ "aff_level": 1,
+ "defence": 0.25
+ }
+ },{
+ "name": "Fletching", "id": 10, "level": 1,
+ "cost": [ 95, 280 ], "req_id": 106,
+ "bonus": {
+ "aff_class": [ "ran" ],
+ "aff_level": 1,
+ "attack": 0.25
+ }
+ },{
+ "name": "Padded Armor", "id": 11, "level": 1,
+ "cost": [ 95, 280 ], "req_id": 106,
+ "bonus": {
+ "aff_class": [ "ran" ],
+ "aff_level": 1,
+ "defence": 0.25
+ }
+ },{
+ "name": "Forging", "id": 12, "level": 1,
+ "cost": [ 155, 470 ], "req_id": 106,
+ "bonus": {
+ "aff_class": [ "inf", "cav" ],
+ "aff_level": 1,
+ "attack": 0.25
+ }
+ },{
+ "name": "Tracking", "id": 13, "level": 1,
+ "cost": [ 95, 280 ], "req_id": 104,
+ "bonus": {
+ "aff_class": [ "inf" ],
+ "sight": 2
+ }
+ },{
+ "name": "Cartography", "id": 14, "level": 1,
+ "cost": [ 95, 280 ], "req_id": 107,
+ "bonus": {
+ "sight": 1
+ }
+ },{
+ "name": "Trading", "id": 15, "level": 1,
+ "cost": [ 95, 280 ], "req_id": 107,
+ "bonus": {
+ "trade": 1
+ }
+ },{
+ "name": "Coniage", "id": 16, "level": 1,
+ "cost": [ 125, 375 ], "req_id": 107,
+ "bonus": {
+ "prod": [ 0, 0.1 ]
+ }
+ },{
+ "name": "Town Patrol", "id": 17, "level": 2,
+ "cost": [ 150, 450 ], "req_id": 100,
+ "bonus": {
+ "aff_id": [ 100 ],
+ "defence": 0.2, "sight": 2
+ }
+ },{
+ "name": "Hand Cart", "id": 18, "level": 2,
+ "cost": [ 150, 450 ], "req_id": 100,
+ "bonus": {
+ "aff_class": [ "bld" ],
+ "cost": [ -0.1, -0.1 ]
+ }
+ },{
+ "name": "Shaft Mining", "id": 19, "level": 2,
+ "cost": [ 150, 450 ], "req_id": 102,
+ "bonus": {
+ "aff_id": [ 102 ],
+ "prod": [ 0, 0.15 ]
+ }
+ },{
+ "name": "Heavy Plow", "id": 20, "level": 2,
+ "cost": [ 150, 450 ], "req_id": 101,
+ "bonus": {
+ "prod": [ 0.1, 0 ]
+ }
+ },{
+ "name": "Chain Mail Armor", "id": 21, "level": 2,
+ "cost": [ 150, 450 ], "req_id": 106,
+ "bonus": {
+ "aff_level": 2,
+ "aff_class": [ "inf" ],
+ "defence": 0.25
+ }
+ },{
+ "name": "Chain Barding", "id": 22, "level": 2,
+ "cost": [ 150, 450 ], "req_id": 106,
+ "bonus": {
+ "aff_level": 2,
+ "aff_class": [ "cav" ],
+ "defence": 0.25
+ }
+ },{
+ "name": "Bodkin Arrow", "id": 23, "level": 2,
+ "cost": [ 150, 450 ], "req_id": 106,
+ "bonus": {
+ "aff_level": 2,
+ "aff_class": [ "ran" ],
+ "attack": 0.25
+ }
+ },{
+ "name": "Leather Armor", "id": 24, "level": 2,
+ "cost": [ 150, 450 ], "req_id": 106,
+ "bonus": {
+ "aff_level": 2,
+ "aff_class": [ "ran" ],
+ "defence": 0.25
+ }
+ },{
+ "name": "Iron Casting", "id": 25, "level": 2,
+ "cost": [ 250, 750 ], "req_id": 106,
+ "bonus": {
+ "aff_level": 2,
+ "aff_class": [ "inf", "cav" ],
+ "attack": 0.25
+ }
+ },{
+ "name": "Conscription", "id": 26, "level": 2,
+ "cost": [ 150, 450 ], "req_id": 104,
+ "bonus": {
+ "aff_class": [ "inf" ],
+ "cost_abs": [ -15, -15 ]
+ }
+ },{
+ "name": "Husbandry", "id": 27, "level": 2,
+ "cost": [ 150, 450 ], "req_id": 108,
+ "bonus": {
+ "aff_class": [ "cav" ],
+ "cost_abs": [ -15, -15 ]
+ }
+ },{
+ "name": "Tournaments", "id": 28, "level": 2,
+ "cost": [ 150, 450 ], "req_id": 105,
+ "bonus": {
+ "aff_class": [ "ran" ],
+ "cost_abs": [ -15, -15 ]
+ }
+ },{
+ "name": "Mechanics Guild", "id": 29, "level": 2,
+ "cost": [ 150, 450 ], "req_id": 109,
+ "bonus": {
+ "aff_class": [ "sie" ],
+ "cost_abs": [ -15, -15 ]
+ }
+ },{
+ "name": "Banking", "id": 30, "level": 2,
+ "cost": [ 200, 600 ], "req_id": 107,
+ "bonus": {
+ "trade": 1,
+ "prod": [ 0, 0.05 ]
+ }
+ },{
+ "name": "Merchant Network", "id": 31, "level": 2,
+ "cost": [ 150, 450 ], "req_id": 107
+ },{
+ "name": "Redemption", "id": 32, "level": 2,
+ "cost": [ 150, 450 ], "req_id": 110,
+ "bonus": {
+ "aff_id": [ 23 ],
+ "improved_heal": 1
+ }
+ },{
+ "name": "Fervor", "id": 33, "level": 2,
+ "cost": [ 150, 450 ], "req_id": 110,
+ "bonus": {
+ "aff_id": [ 23 ],
+ "improved_convert": 1
+ }
+ },{
+ "name": "Sanctity", "id": 34, "level": 2,
+ "cost": [ 150, 450 ], "req_id": 110,
+ "bonus": {
+ "aff_id": [ 23 ],
+ "defence": 0.25
+ }
+ },{
+ "name": "Murder Holes", "id": 35, "level": 2,
+ "cost": [ 95, 280 ], "req_id": 111,
+ "bonus": {
+ "aff_id": [ 112 ],
+ "defence": 0.25
+ }
+ },{
+ "name": "Masonry", "id": 36, "level": 2,
+ "cost": [ 95, 280 ], "req_id": 111,
+ "bonus": {
+ "aff_class": [ "bld" ],
+ "defence": 0.05
+ }
+ },{
+ "name": "Crop Rotation", "id": 37, "level": 3,
+ "cost": [ 250, 750 ], "req_id": 101,
+ "bonus": {
+ "prod": [ 0.1, 0 ]
+ }
+ },{
+ "name": "Plate Mail", "id": 38, "level": 3,
+ "cost": [ 250, 750 ], "req_id": 106,
+ "bonus": {
+ "aff_level": 3,
+ "aff_class": [ "inf" ],
+ "defence": 0.25
+ }
+ },{
+ "name": "Plate Barding", "id": 39, "level": 3,
+ "cost": [ 250, 750 ], "req_id": 106,
+ "bonus": {
+ "aff_level": 3,
+ "aff_class": [ "cav" ],
+ "defence": 0.25
+ }
+ },{
+ "name": "Bracers", "id": 40, "level": 3,
+ "cost": [ 250, 750 ], "req_id": 106,
+ "bonus": {
+ "aff_level": 3,
+ "aff_class": [ "ran" ],
+ "attack": 0.25
+ }
+ },{
+ "name": "Ring Archer Armor", "id": 41, "level": 3,
+ "cost": [ 250, 750 ], "req_id": 106,
+ "bonus": {
+ "aff_level": 3,
+ "aff_class": [ "ran" ],
+ "defence": 0.25
+ }
+ },{
+ "name": "Blast Furnace", "id": 42, "level": 3,
+ "cost": [ 625, 975 ], "req_id": 106,
+ "bonus": {
+ "aff_level": 3,
+ "aff_class": [ "inf", "cav" ],
+ "attack": 0.25
+ }
+ },{
+ "name": "Arena", "id": 43, "level": 3,
+ "cost": [ 250, 750 ], "req_id": 104
+ },{
+ "name": "Squires", "id": 44, "level": 3,
+ "cost": [ 250, 750 ], "req_id": 108
+ },{
+ "name": "Flaming Arrows", "id": 45, "level": 3,
+ "cost": [ 300, 900 ], "req_id": 105
+ },{
+ "name": "Sappers", "id": 46, "level": 3,
+ "cost": [ 300, 900 ], "req_id": 113
+ },{
+ "name": "Hoardings", "id": 47, "level": 3,
+ "cost": [ 250, 750 ], "req_id": 113,
+ "bonus": {
+ "aff_id": [ 113 ],
+ "defence": 0.35
+ }
+ },{
+ "name": "Spies", "id": 48, "level": 3,
+ "cost": [ 300, 900 ], "req_id": 113
+ },{
+ "name": "Guilds", "id": 49, "level": 3,
+ "cost": [ 250, 750 ], "req_id": 107,
+ "bonus": {
+ "trade": 1,
+ "prod": [ 0, 0.05 ]
+ }
+ },{
+ "name": "Atonement", "id": 50, "level": 3,
+ "cost": [ 250, 750 ], "req_id": 110,
+ "bonus": {
+ "aff_id": [ 23 ],
+ "improved_heal": 1
+ }
+ },{
+ "name": "Block Printing", "id": 51, "level": 3,
+ "cost": [ 250, 750 ], "req_id": 110,
+ "bonus": {
+ "aff_id": [ 23 ],
+ "improved_convert": 1
+ }
+ },{
+ "name": "Illumination", "id": 52, "level": 3,
+ "cost": [ 250, 750 ], "req_id": 110,
+ "bonus": {
+ "aff_id": [ 110 ],
+ "prod": [ 0, 0.5 ]
+ }
+ },{
+ "name": "Faith", "id": 53, "level": 3,
+ "cost": [ 250, 750 ], "req_id": 110,
+ "bonus": {
+ "aff_id": [ 23 ],
+ "defence": 0.25
+ }
+ },{
+ "name": "Treadmill Crane", "id": 54, "level": 3,
+ "cost": [ 250, 750 ], "req_id": 111,
+ "bonus": {
+ "aff_class": [ "bld" ],
+ "cost": [ 0.1, 0.1 ]
+ }
+ },{
+ "name": "Siege Engineers", "id": 55, "level": 3,
+ "cost": [ 250, 750 ], "req_id": 111
+ },{
+ "name": "Architecture", "id": 56, "level": 3,
+ "cost": [ 250, 750 ], "req_id": 111,
+ "bonus": {
+ "aff_class": [ "bld" ],
+ "defence": 0.05
+ }
+ },{
+ "name": "Chemistry", "id": 57, "level": 3,
+ "cost": [ 250, 750 ], "req_id": 111
+ },{
+ "name": "Ballistics", "id": 58, "level": 3,
+ "cost": [ 300, 900 ], "req_id": 111,
+ "bonus": {
+ "aff_class": [ "sie" ],
+ "req_range": 1,
+ "attack": 0.25
+ }
+ }
] \ No newline at end of file
diff --git a/build/content/tiles.json b/build/content/tiles.json
index 40373ed..05e7975 100644
--- a/build/content/tiles.json
+++ b/build/content/tiles.json
@@ -1,24 +1,24 @@
-[
- {
- "name": "Plains",
- "move_cost": 2,
- "sight_cost": 2,
- "range_bonus": 0,
- "defence_bonus": 0.0,
- "spritebounds": [ 0, 16 ]
- },{
- "name": "Mountain",
- "move_cost": 4,
- "sight_cost": 4,
- "range_bonus": 1,
- "defence_bonus": 0.4,
- "spritebounds": [ 16, 16 ]
- },{
- "name": "Forest",
- "move_cost": 3,
- "sight_cost": 4,
- "range_bonus": -1,
- "defence_bonus": 0.2,
- "spritebounds": [ 80, 16 ]
- }
+[
+ {
+ "name": "Plains",
+ "move_cost": 2,
+ "sight_cost": 2,
+ "range_bonus": 0,
+ "defence_bonus": 0.0,
+ "spritebounds": [ 0, 16 ]
+ },{
+ "name": "Mountain",
+ "move_cost": 4,
+ "sight_cost": 4,
+ "range_bonus": 1,
+ "defence_bonus": 0.4,
+ "spritebounds": [ 16, 16 ]
+ },{
+ "name": "Forest",
+ "move_cost": 3,
+ "sight_cost": 4,
+ "range_bonus": -1,
+ "defence_bonus": 0.2,
+ "spritebounds": [ 80, 16 ]
+ }
] \ No newline at end of file
diff --git a/cmake_install.cmake b/cmake_install.cmake
index cbfda33..3bda814 100644
--- a/cmake_install.cmake
+++ b/cmake_install.cmake
@@ -1,49 +1,49 @@
-# Install script for directory: C:/Users/jaksk/Desktop/dev/_cpp/age
-
-# Set the install prefix
-if(NOT DEFINED CMAKE_INSTALL_PREFIX)
- set(CMAKE_INSTALL_PREFIX "C:/Program Files (x86)/sdl_test")
-endif()
-string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
-
-# Set the install configuration name.
-if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
- if(BUILD_TYPE)
- string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
- CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
- else()
- set(CMAKE_INSTALL_CONFIG_NAME "")
- endif()
- message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
-endif()
-
-# Set the component getting installed.
-if(NOT CMAKE_INSTALL_COMPONENT)
- if(COMPONENT)
- message(STATUS "Install component: \"${COMPONENT}\"")
- set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
- else()
- set(CMAKE_INSTALL_COMPONENT)
- endif()
-endif()
-
-# Is this installation the result of a crosscompile?
-if(NOT DEFINED CMAKE_CROSSCOMPILING)
- set(CMAKE_CROSSCOMPILING "FALSE")
-endif()
-
-# Set default install directory permissions.
-if(NOT DEFINED CMAKE_OBJDUMP)
- set(CMAKE_OBJDUMP "C:/MinGW64/bin/objdump.exe")
-endif()
-
-if(CMAKE_INSTALL_COMPONENT)
- set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt")
-else()
- set(CMAKE_INSTALL_MANIFEST "install_manifest.txt")
-endif()
-
-string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT
- "${CMAKE_INSTALL_MANIFEST_FILES}")
-file(WRITE "C:/Users/jaksk/Desktop/dev/_cpp/age/${CMAKE_INSTALL_MANIFEST}"
- "${CMAKE_INSTALL_MANIFEST_CONTENT}")
+# Install script for directory: C:/Users/jaksk/Desktop/dev/_cpp/age
+
+# Set the install prefix
+if(NOT DEFINED CMAKE_INSTALL_PREFIX)
+ set(CMAKE_INSTALL_PREFIX "C:/Program Files (x86)/sdl_test")
+endif()
+string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+# Set the install configuration name.
+if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
+ if(BUILD_TYPE)
+ string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
+ CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
+ else()
+ set(CMAKE_INSTALL_CONFIG_NAME "")
+ endif()
+ message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
+endif()
+
+# Set the component getting installed.
+if(NOT CMAKE_INSTALL_COMPONENT)
+ if(COMPONENT)
+ message(STATUS "Install component: \"${COMPONENT}\"")
+ set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
+ else()
+ set(CMAKE_INSTALL_COMPONENT)
+ endif()
+endif()
+
+# Is this installation the result of a crosscompile?
+if(NOT DEFINED CMAKE_CROSSCOMPILING)
+ set(CMAKE_CROSSCOMPILING "FALSE")
+endif()
+
+# Set default install directory permissions.
+if(NOT DEFINED CMAKE_OBJDUMP)
+ set(CMAKE_OBJDUMP "C:/MinGW64/bin/objdump.exe")
+endif()
+
+if(CMAKE_INSTALL_COMPONENT)
+ set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt")
+else()
+ set(CMAKE_INSTALL_MANIFEST "install_manifest.txt")
+endif()
+
+string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT
+ "${CMAKE_INSTALL_MANIFEST_FILES}")
+file(WRITE "C:/Users/jaksk/Desktop/dev/_cpp/age/${CMAKE_INSTALL_MANIFEST}"
+ "${CMAKE_INSTALL_MANIFEST_CONTENT}")
diff --git a/commands/commands.cpp b/commands/commands.cpp
index 7053316..cdaf30b 100644
--- a/commands/commands.cpp
+++ b/commands/commands.cpp
@@ -1,70 +1,70 @@
-#include <algorithm>
-
-#include "commands.h"
-
-Commands_sdl::Commands_sdl () {
- for (int i=0; i<3; i++) {
- mclick[i] = 0;
- mheld[i] = 0;
- }
-}
-
-Commands_sdl::~Commands_sdl () {
-
-}
-
-bool Commands_sdl::check_keydown (SDL_Scancode key) {
- return std::find(keysdown.begin(), keysdown.end(), key) != keysdown.end();
-}
-bool Commands_sdl::check_key (SDL_Scancode key) {
- return std::find(keys.begin(), keys.end(), key) != keys.end();
-}
-
-bool Commands_sdl::process_events () {
- SDL_GetMouseState(&mx, &my);
-
- resx = -1; resy = -1;
-
- SDL_Event e;
- while(SDL_PollEvent(&e) != 0) {
- if(e.type == SDL_QUIT) {
- return true;
- }
- if(e.type == SDL_KEYDOWN && e.key.repeat == 0) {
- keys.push_back(e.key.keysym.scancode);
- keysdown.push_back(e.key.keysym.scancode);
- }
- if(e.type == SDL_KEYUP) {
- keysdown.erase(std::remove(keysdown.begin(), keysdown.end(),
- e.key.keysym.scancode), keysdown.end());
- }
-
- if(e.type == SDL_MOUSEBUTTONDOWN) {
- if (e.button.button == SDL_BUTTON_LEFT) { mclick[0] = 1; }
- if (e.button.button == SDL_BUTTON_MIDDLE) { mclick[1] = 1; }
- if (e.button.button == SDL_BUTTON_RIGHT) { mclick[2] = 1; }
- }
- if(e.type == SDL_MOUSEBUTTONUP) {
- if (e.button.button == SDL_BUTTON_LEFT) { mclick[0] = 0; }
- if (e.button.button == SDL_BUTTON_MIDDLE) { mclick[1] = 0; }
- if (e.button.button == SDL_BUTTON_RIGHT) { mclick[2] = 0; }
- }
- if(e.type == SDL_WINDOWEVENT
- && e.window.event == SDL_WINDOWEVENT_RESIZED ) {
- resx = e.window.data1; resy = e.window.data2;
- }
- }
- return false;
-}
-
-void Commands_sdl::process_clicks () {
- for (int i=0; i<3; i++) {
- if (mclick[i] > 0) { mheld[i] += 1; }
- else if (mheld[i] > 0) { mheld[i] = -1; }
- else { mheld[i] = 0; }
- }
-}
-
-void Commands_sdl::process_keys () {
- keys.clear();
+#include <algorithm>
+
+#include "commands.h"
+
+Commands_sdl::Commands_sdl () {
+ for (int i=0; i<3; i++) {
+ mclick[i] = 0;
+ mheld[i] = 0;
+ }
+}
+
+Commands_sdl::~Commands_sdl () {
+
+}
+
+bool Commands_sdl::check_keydown (SDL_Scancode key) {
+ return std::find(keysdown.begin(), keysdown.end(), key) != keysdown.end();
+}
+bool Commands_sdl::check_key (SDL_Scancode key) {
+ return std::find(keys.begin(), keys.end(), key) != keys.end();
+}
+
+bool Commands_sdl::process_events () {
+ SDL_GetMouseState(&mx, &my);
+
+ resx = -1; resy = -1;
+
+ SDL_Event e;
+ while(SDL_PollEvent(&e) != 0) {
+ if(e.type == SDL_QUIT) {
+ return true;
+ }
+ if(e.type == SDL_KEYDOWN && e.key.repeat == 0) {
+ keys.push_back(e.key.keysym.scancode);
+ keysdown.push_back(e.key.keysym.scancode);
+ }
+ if(e.type == SDL_KEYUP) {
+ keysdown.erase(std::remove(keysdown.begin(), keysdown.end(),
+ e.key.keysym.scancode), keysdown.end());
+ }
+
+ if(e.type == SDL_MOUSEBUTTONDOWN) {
+ if (e.button.button == SDL_BUTTON_LEFT) { mclick[0] = 1; }
+ if (e.button.button == SDL_BUTTON_MIDDLE) { mclick[1] = 1; }
+ if (e.button.button == SDL_BUTTON_RIGHT) { mclick[2] = 1; }
+ }
+ if(e.type == SDL_MOUSEBUTTONUP) {
+ if (e.button.button == SDL_BUTTON_LEFT) { mclick[0] = 0; }
+ if (e.button.button == SDL_BUTTON_MIDDLE) { mclick[1] = 0; }
+ if (e.button.button == SDL_BUTTON_RIGHT) { mclick[2] = 0; }
+ }
+ if(e.type == SDL_WINDOWEVENT
+ && e.window.event == SDL_WINDOWEVENT_RESIZED ) {
+ resx = e.window.data1; resy = e.window.data2;
+ }
+ }
+ return false;
+}
+
+void Commands_sdl::process_clicks () {
+ for (int i=0; i<3; i++) {
+ if (mclick[i] > 0) { mheld[i] += 1; }
+ else if (mheld[i] > 0) { mheld[i] = -1; }
+ else { mheld[i] = 0; }
+ }
+}
+
+void Commands_sdl::process_keys () {
+ keys.clear();
} \ No newline at end of file
diff --git a/commands/commands.h b/commands/commands.h
index 5513790..020f186 100644
--- a/commands/commands.h
+++ b/commands/commands.h
@@ -1,30 +1,30 @@
-#ifndef COMMANDS_H
-#define COMMANDS_H
-
-#include <iostream>
-#include <vector>
-
-#define SDL_MAIN_HANDLED
-#include <SDL2/SDL.h>
-
-class Commands_sdl {
- public:
- Commands_sdl ();
- ~Commands_sdl ();
- bool process_events ();
- void process_clicks ();
- void process_keys ();
- bool check_keydown(SDL_Scancode key);
- bool check_key(SDL_Scancode key);
- int mx, my;
- int mclick[3];
- int mheld[3];
-
- int resx, resy;
-
- private:
- std::vector<SDL_Scancode> keys;
- std::vector<SDL_Scancode> keysdown;
-};
-
+#ifndef COMMANDS_H
+#define COMMANDS_H
+
+#include <iostream>
+#include <vector>
+
+#define SDL_MAIN_HANDLED
+#include <SDL2/SDL.h>
+
+class Commands_sdl {
+ public:
+ Commands_sdl ();
+ ~Commands_sdl ();
+ bool process_events ();
+ void process_clicks ();
+ void process_keys ();
+ bool check_keydown(SDL_Scancode key);
+ bool check_key(SDL_Scancode key);
+ int mx, my;
+ int mclick[3];
+ int mheld[3];
+
+ int resx, resy;
+
+ private:
+ std::vector<SDL_Scancode> keys;
+ std::vector<SDL_Scancode> keysdown;
+};
+
#endif \ No newline at end of file
diff --git a/game/ai/action.cpp b/game/ai/action.cpp
index 63218ba..d85eb4d 100644
--- a/game/ai/action.cpp
+++ b/game/ai/action.cpp
@@ -1,76 +1,76 @@
-#include "action.h"
-
-bool ai::compare_action(ai::action a, ai::action b) {
- return (a.heuristic < b.heuristic);
-}
-
-std::string ai::action::to_string () {
- if (type == actype::attack) {
- if (abs(x-mx)+abs(y-my) != 0) {
- return "[" + std::to_string(x) + ", " + std::to_string(y) + "]"
- + " move " +
- "[" + std::to_string(mx) + ", " + std::to_string(my) + "]"
- + " attack " +
- "[" + std::to_string(tx) + ", " + std::to_string(ty) + "]";
- } else {
- return "[" + std::to_string(x) + ", " + std::to_string(y) + "]"
- + " attack " +
- "[" + std::to_string(tx) + ", " + std::to_string(ty) + "]";
- }
- }
- if (type == actype::heal) {
- if (abs(x-mx)+abs(y-my) != 0) {
- return "[" + std::to_string(x) + ", " + std::to_string(y) + "]"
- + " move " +
- "[" + std::to_string(mx) + ", " + std::to_string(my) + "]"
- + " heal " +
- "[" + std::to_string(tx) + ", " + std::to_string(ty) + "]";
- } else {
- return "[" + std::to_string(x) + ", " + std::to_string(y) + "]"
- + " heal " +
- "[" + std::to_string(tx) + ", " + std::to_string(ty) + "]";
- }
- }
- if (type == actype::convert) {
- if (abs(x-mx)+abs(y-my) != 0) {
- return "[" + std::to_string(x) + ", " + std::to_string(y) + "]"
- + " move " +
- "[" + std::to_string(mx) + ", " + std::to_string(my) + "]"
- + " convert " +
- "[" + std::to_string(tx) + ", " + std::to_string(ty) + "]";
- } else {
- return "[" + std::to_string(x) + ", " + std::to_string(y) + "]"
- + " convert " +
- "[" + std::to_string(tx) + ", " + std::to_string(ty) + "]";
- }
- }
- if (type == actype::move) {
- return "[" + std::to_string(x) + ", " + std::to_string(y) + "]"
- + " move " +
- "[" + std::to_string(mx) + ", " + std::to_string(my) + "]";
- }
- if (type == actype::build) {
- if (abs(x-mx)+abs(y-my) != 0) {
- return "[" + std::to_string(x) + ", " + std::to_string(y)
- + "]" + " move " +
- "[" + std::to_string(mx) + ", " + std::to_string(my)
- + "]" + " build " +
- std::to_string(v);
- } else {
- return "[" + std::to_string(mx) + ", " + std::to_string(my)
- + "]" + " build " +
- std::to_string(v);
- }
- }
- if (type == actype::train) {
- return "[" + std::to_string(x) + ", " + std::to_string(y) + "]" +
- " train " + std::to_string(v);
- }
- if (type == actype::trade) {
- return "[" + std::to_string(x) + ", " + std::to_string(y) + "]" +
- " trade " + std::to_string(v);
- }
- if (type == actype::tech) {
- return "tech " + std::to_string(v);
- }
+#include "action.h"
+
+bool ai::compare_action(ai::action a, ai::action b) {
+ return (a.heuristic < b.heuristic);
+}
+
+std::string ai::action::to_string () {
+ if (type == actype::attack) {
+ if (abs(x-mx)+abs(y-my) != 0) {
+ return "[" + std::to_string(x) + ", " + std::to_string(y) + "]"
+ + " move " +
+ "[" + std::to_string(mx) + ", " + std::to_string(my) + "]"
+ + " attack " +
+ "[" + std::to_string(tx) + ", " + std::to_string(ty) + "]";
+ } else {
+ return "[" + std::to_string(x) + ", " + std::to_string(y) + "]"
+ + " attack " +
+ "[" + std::to_string(tx) + ", " + std::to_string(ty) + "]";
+ }
+ }
+ if (type == actype::heal) {
+ if (abs(x-mx)+abs(y-my) != 0) {
+ return "[" + std::to_string(x) + ", " + std::to_string(y) + "]"
+ + " move " +
+ "[" + std::to_string(mx) + ", " + std::to_string(my) + "]"
+ + " heal " +
+ "[" + std::to_string(tx) + ", " + std::to_string(ty) + "]";
+ } else {
+ return "[" + std::to_string(x) + ", " + std::to_string(y) + "]"
+ + " heal " +
+ "[" + std::to_string(tx) + ", " + std::to_string(ty) + "]";
+ }
+ }
+ if (type == actype::convert) {
+ if (abs(x-mx)+abs(y-my) != 0) {
+ return "[" + std::to_string(x) + ", " + std::to_string(y) + "]"
+ + " move " +
+ "[" + std::to_string(mx) + ", " + std::to_string(my) + "]"
+ + " convert " +
+ "[" + std::to_string(tx) + ", " + std::to_string(ty) + "]";
+ } else {
+ return "[" + std::to_string(x) + ", " + std::to_string(y) + "]"
+ + " convert " +
+ "[" + std::to_string(tx) + ", " + std::to_string(ty) + "]";
+ }
+ }
+ if (type == actype::move) {
+ return "[" + std::to_string(x) + ", " + std::to_string(y) + "]"
+ + " move " +
+ "[" + std::to_string(mx) + ", " + std::to_string(my) + "]";
+ }
+ if (type == actype::build) {
+ if (abs(x-mx)+abs(y-my) != 0) {
+ return "[" + std::to_string(x) + ", " + std::to_string(y)
+ + "]" + " move " +
+ "[" + std::to_string(mx) + ", " + std::to_string(my)
+ + "]" + " build " +
+ std::to_string(v);
+ } else {
+ return "[" + std::to_string(mx) + ", " + std::to_string(my)
+ + "]" + " build " +
+ std::to_string(v);
+ }
+ }
+ if (type == actype::train) {
+ return "[" + std::to_string(x) + ", " + std::to_string(y) + "]" +
+ " train " + std::to_string(v);
+ }
+ if (type == actype::trade) {
+ return "[" + std::to_string(x) + ", " + std::to_string(y) + "]" +
+ " trade " + std::to_string(v);
+ }
+ if (type == actype::tech) {
+ return "tech " + std::to_string(v);
+ }
} \ No newline at end of file
diff --git a/game/ai/action.h b/game/ai/action.h
index 12da451..6b631ca 100644
--- a/game/ai/action.h
+++ b/game/ai/action.h
@@ -1,52 +1,52 @@
-#ifndef ACTION_H
-#define ACTION_H
-
-#include <string>
-#include <vector>
-
-namespace ai {
-
-enum actype {
- attack, heal, convert, build, train, trade, move, tech
-};
-
-class action {
- public:
- action (actype type, int v) :
- type(type), v(v) {}
- action (actype type, int x, int y, int v) :
- type(type), x(x), y(y), v(v) {}
- action (actype type, int x, int y, int mx, int my) :
- type(type), x(x), y(y), mx(mx), my(my) {}
- action (actype type, int x, int y, int mx, int my, int v) :
- type(type), x(x), y(y), mx(mx), my(my), v(v) {}
- action (actype type, int x, int y, int mx, int my, int tx, int ty) :
- type(type), x(x), y(y), mx(mx), my(my), tx(tx), ty(ty) {}
- action (actype type, int x, int y, int mx, int my, int tx, int ty, int v) :
- type(type), x(x), y(y), mx(mx), my(my), tx(tx), ty(ty), v(v) {}
-
- action (const action& rhs) {
- type = rhs.type; x = rhs.x; y = rhs.y; mx = rhs.mx; my = rhs.my;
- tx = rhs.tx; ty = rhs.ty; v = rhs.v;
- }
- action& operator=(const action& rhs) {
- type = rhs.type; x = rhs.x; y = rhs.y; mx = rhs.mx; my = rhs.my;
- tx = rhs.tx; ty = rhs.ty; v = rhs.v;
- }
-
- actype type;
- int x, y; // start
- int mx, my; // moved
- int tx, ty; // target
- int v; // value (id of trainee, building or f/g trade, or tech id)
-
- float heuristic { 0 };
-
- std::string to_string ();
-};
-
-bool compare_action(action a, action b);
-
-}
-
+#ifndef ACTION_H
+#define ACTION_H
+
+#include <string>
+#include <vector>
+
+namespace ai {
+
+enum actype {
+ attack, heal, convert, build, train, trade, move, tech
+};
+
+class action {
+ public:
+ action (actype type, int v) :
+ type(type), v(v) {}
+ action (actype type, int x, int y, int v) :
+ type(type), x(x), y(y), v(v) {}
+ action (actype type, int x, int y, int mx, int my) :
+ type(type), x(x), y(y), mx(mx), my(my) {}
+ action (actype type, int x, int y, int mx, int my, int v) :
+ type(type), x(x), y(y), mx(mx), my(my), v(v) {}
+ action (actype type, int x, int y, int mx, int my, int tx, int ty) :
+ type(type), x(x), y(y), mx(mx), my(my), tx(tx), ty(ty) {}
+ action (actype type, int x, int y, int mx, int my, int tx, int ty, int v) :
+ type(type), x(x), y(y), mx(mx), my(my), tx(tx), ty(ty), v(v) {}
+
+ action (const action& rhs) {
+ type = rhs.type; x = rhs.x; y = rhs.y; mx = rhs.mx; my = rhs.my;
+ tx = rhs.tx; ty = rhs.ty; v = rhs.v;
+ }
+ action& operator=(const action& rhs) {
+ type = rhs.type; x = rhs.x; y = rhs.y; mx = rhs.mx; my = rhs.my;
+ tx = rhs.tx; ty = rhs.ty; v = rhs.v;
+ }
+
+ actype type;
+ int x, y; // start
+ int mx, my; // moved
+ int tx, ty; // target
+ int v; // value (id of trainee, building or f/g trade, or tech id)
+
+ float heuristic { 0 };
+
+ std::string to_string ();
+};
+
+bool compare_action(action a, action b);
+
+}
+
#endif \ No newline at end of file
diff --git a/game/ai/engine.h b/game/ai/engine.h
index d3755e1..584cb11 100644
--- a/game/ai/engine.h
+++ b/game/ai/engine.h
@@ -1,66 +1,66 @@
-#ifndef ENGINE_H
-#define ENGINE_H
-
-#include <iostream>
-
-#include <string>
-#include <vector>
-#include <limits>
-#include <cmath>
-
-#include "../ground.h"
-#include "../gst.h"
-
-#include "action.h"
-#include "tactic.h"
-#include "generator.h"
-#include "evaluator.h"
-#include "performer.h"
-
-namespace ai {
-
-class engine {
- public:
- engine (Gst &gst) : init(gst) {}
- Gst &init;
-
- tactic get_best () {
- tactic t { search(init, 4) };
- std::cout << t.to_string();
- return t;
- }
-
- tactic search (Gst &gst, int depth) {
- generator gen { gst };
- std::vector<tactic> tactics = gen.tactics();
- tactic best; best.eval = std::numeric_limits<float>::lowest();
- for (tactic t : tactics) {
- performer perf { gst };
- Gst next { perf.apply(t) };
- t.eval = negamax(next, depth, gst.turn);
- std::cout << "depth " << depth << " eval " << t.eval << "\n";
- if (t.eval > best.eval) best = t;
- }
- return best;
- }
-
- float negamax (Gst gst, int depth, int player) {
- //for (int i=0; i<3-depth; i++) std::cout << " "; std::cout << depth << "\n";
- if (depth == 0) {
- evaluator eval { gst };
- return eval.eval(player);
- }
- float value = std::numeric_limits<float>::lowest();
- generator gen { gst };
- auto tactics = gen.tactics();
- for (tactic t : tactics) {
- performer perf { gst };
- Gst next { perf.apply(t) };
- value = fmax(value, negamax(next, depth-1, -player));
- }
- return -value;
- }
-};
-
-}
+#ifndef ENGINE_H
+#define ENGINE_H
+
+#include <iostream>
+
+#include <string>
+#include <vector>
+#include <limits>
+#include <cmath>
+
+#include "../ground.h"
+#include "../gst.h"
+
+#include "action.h"
+#include "tactic.h"
+#include "generator.h"
+#include "evaluator.h"
+#include "performer.h"
+
+namespace ai {
+
+class engine {
+ public:
+ engine (Gst &gst) : init(gst) {}
+ Gst &init;
+
+ tactic get_best () {
+ tactic t { search(init, 4) };
+ std::cout << t.to_string();
+ return t;
+ }
+
+ tactic search (Gst &gst, int depth) {
+ generator gen { gst };
+ std::vector<tactic> tactics = gen.tactics();
+ tactic best; best.eval = std::numeric_limits<float>::lowest();
+ for (tactic t : tactics) {
+ performer perf { gst };
+ Gst next { perf.apply(t) };
+ t.eval = negamax(next, depth, gst.turn);
+ std::cout << "depth " << depth << " eval " << t.eval << "\n";
+ if (t.eval > best.eval) best = t;
+ }
+ return best;
+ }
+
+ float negamax (Gst gst, int depth, int player) {
+ //for (int i=0; i<3-depth; i++) std::cout << " "; std::cout << depth << "\n";
+ if (depth == 0) {
+ evaluator eval { gst };
+ return eval.eval(player);
+ }
+ float value = std::numeric_limits<float>::lowest();
+ generator gen { gst };
+ auto tactics = gen.tactics();
+ for (tactic t : tactics) {
+ performer perf { gst };
+ Gst next { perf.apply(t) };
+ value = fmax(value, negamax(next, depth-1, -player));
+ }
+ return -value;
+ }
+};
+
+}
#endif \ No newline at end of file
diff --git a/game/ai/evaluator.h b/game/ai/evaluator.h
index 75684de..b288076 100644
--- a/game/ai/evaluator.h
+++ b/game/ai/evaluator.h
@@ -1,30 +1,30 @@
-#ifndef EVALUATOR_H
-#define EVALUATOR_H
-
-#include <iostream>
-
-#include <string>
-#include <vector>
-
-#include "../ground.h"
-#include "../gst.h"
-
-namespace ai {
-
-class evaluator {
- public:
- evaluator (Gst gst) : gst(gst) {}
- Gst gst;
-
- float eval (int player) {
- float val = 0;
- for (Entity &ent : gst.entities) {
- int own = (int)(ent.owner != player)*2-1;
- val += own*(ent.info->cost[0] + ent.info->cost[1])*(ent.hp/100.0f);
- }
- return val;
- }
-};
-
-}
+#ifndef EVALUATOR_H
+#define EVALUATOR_H
+
+#include <iostream>
+
+#include <string>
+#include <vector>
+
+#include "../ground.h"
+#include "../gst.h"
+
+namespace ai {
+
+class evaluator {
+ public:
+ evaluator (Gst gst) : gst(gst) {}
+ Gst gst;
+
+ float eval (int player) {
+ float val = 0;
+ for (Entity &ent : gst.entities) {
+ int own = (int)(ent.owner != player)*2-1;
+ val += own*(ent.info->cost[0] + ent.info->cost[1])*(ent.hp/100.0f);
+ }
+ return val;
+ }
+};
+
+}
#endif \ No newline at end of file
diff --git a/game/ai/generator.h b/game/ai/generator.h
index c6cb288..39bde4f 100644
--- a/game/ai/generator.h
+++ b/game/ai/generator.h
@@ -1,102 +1,102 @@
-#ifndef GENERATOR_H
-#define GENERATOR_H
-
-#include <iostream>
-
-#include <string>
-#include <vector>
-
-#include "../ground.h"
-#include "../gst.h"
-#include "action.h"
-#include "tactic.h"
-#include "performer.h"
-
-namespace ai {
-
-const int maxiter = 100000;
-
-
-class generator {
- public:
- generator (Gst &gst) : init(gst) {}
- Gst &init;
-
- std::vector<action> valid_actions (Gst &gst) {
- Ground &gr = gst.inv->ground;
- std::vector<action> acts;
- for (Entity &ent : gst.entities) {
- if (ent.done) continue;
- if (ent.owner != gst.turn) continue;
-
- std::vector<action> ent_acts;
-
- std::vector<int> moves = gr.move_area(gst, ent);
- for (auto move : moves) {
- int mx = move%gr.sizex, my = move/gr.sizex;
- action act { actype::move, ent.x, ent.y, mx, my };
-
- performer perf { gst };
- Gst next { gst };
- next = perf.act(next, act);
- Entity &matk = next.get_at(mx, my);
- std::vector<int> atks = gr.attack_targets(next, matk);
- for (auto atk : atks) {
- int tx = atk%gr.sizex, ty = atk/gr.sizex;
- action act_atk { actype::attack, ent.x, ent.y,
- mx, my, tx, ty };
- Entity &mdef = next.get_at(tx, ty);
-
- BattleResult res = gst.battle_res(matk, mdef);
- float heur = (mdef.hp-res.def_hp);
- heur *= (mdef.info->cost[0] + mdef.info->cost[1]);
- act_atk.heuristic = heur;
- ent_acts.push_back(act_atk);
- }
-
- int dist = 999999;
- int pos = gst.get_nearest_enemy(ent, dist);
- float heur = 1.0f/dist;
- act.heuristic = heur;
- ent_acts.push_back(act);
- }
- std::sort(ent_acts.begin(), ent_acts.end(), compare_action);
- for (int i=0; i<3 && i<ent_acts.size(); i++) {
- acts.push_back(ent_acts[i]);
- }
- }
- std::sort(acts.begin(), acts.end(), compare_action);
- return acts;
- }
-
- tactic valid_tactic (int &n) {
- tactic t;
- Gst gst { init };
- for (int i=0; i<ai::maxiter; i++) {
- std::vector<action> acts { valid_actions(gst) };
- if (acts.size() == 0) break;
- performer perf { gst };
- int j = n % (acts.size());
- n /= acts.size();
- action &act = acts[j];
- gst = perf.act(gst, act);
- t.acts.push_back(act);
- //std::cout << act.to_string() << std::endl;
- }
- return t;
- }
-
- std::vector<tactic> tactics () {
- std::vector<tactic> ts;
- for (int i=0; i<3; i++) {
- int n = i;
- tactic t = valid_tactic(n);
- if (n > 0) break;
- ts.push_back(t);
- }
- return ts;
- }
-};
-
-}
+#ifndef GENERATOR_H
+#define GENERATOR_H
+
+#include <iostream>
+
+#include <string>
+#include <vector>
+
+#include "../ground.h"
+#include "../gst.h"
+#include "action.h"
+#include "tactic.h"
+#include "performer.h"
+
+namespace ai {
+
+const int maxiter = 100000;
+
+
+class generator {
+ public:
+ generator (Gst &gst) : init(gst) {}
+ Gst &init;
+
+ std::vector<action> valid_actions (Gst &gst) {
+ Ground &gr = gst.inv->ground;
+ std::vector<action> acts;
+ for (Entity &ent : gst.entities) {
+ if (ent.done) continue;
+ if (ent.owner != gst.turn) continue;
+
+ std::vector<action> ent_acts;
+
+ std::vector<int> moves = gr.move_area(gst, ent);
+ for (auto move : moves) {
+ int mx = move%gr.sizex, my = move/gr.sizex;
+ action act { actype::move, ent.x, ent.y, mx, my };
+
+ performer perf { gst };
+ Gst next { gst };
+ next = perf.act(next, act);
+ Entity &matk = next.get_at(mx, my);
+ std::vector<int> atks = gr.attack_targets(next, matk);
+ for (auto atk : atks) {
+ int tx = atk%gr.sizex, ty = atk/gr.sizex;
+ action act_atk { actype::attack, ent.x, ent.y,
+ mx, my, tx, ty };
+ Entity &mdef = next.get_at(tx, ty);
+
+ BattleResult res = gst.battle_res(matk, mdef);
+ float heur = (mdef.hp-res.def_hp);
+ heur *= (mdef.info->cost[0] + mdef.info->cost[1]);
+ act_atk.heuristic = heur;
+ ent_acts.push_back(act_atk);
+ }
+
+ int dist = 999999;
+ int pos = gst.get_nearest_enemy(ent, dist);
+ float heur = 1.0f/dist;
+ act.heuristic = heur;
+ ent_acts.push_back(act);
+ }
+ std::sort(ent_acts.begin(), ent_acts.end(), compare_action);
+ for (int i=0; i<3 && i<ent_acts.size(); i++) {
+ acts.push_back(ent_acts[i]);
+ }
+ }
+ std::sort(acts.begin(), acts.end(), compare_action);
+ return acts;
+ }
+
+ tactic valid_tactic (int &n) {
+ tactic t;
+ Gst gst { init };
+ for (int i=0; i<ai::maxiter; i++) {
+ std::vector<action> acts { valid_actions(gst) };
+ if (acts.size() == 0) break;
+ performer perf { gst };
+ int j = n % (acts.size());
+ n /= acts.size();
+ action &act = acts[j];
+ gst = perf.act(gst, act);
+ t.acts.push_back(act);
+ //std::cout << act.to_string() << std::endl;
+ }
+ return t;
+ }
+
+ std::vector<tactic> tactics () {
+ std::vector<tactic> ts;
+ for (int i=0; i<3; i++) {
+ int n = i;
+ tactic t = valid_tactic(n);
+ if (n > 0) break;
+ ts.push_back(t);
+ }
+ return ts;
+ }
+};
+
+}
#endif \ No newline at end of file
diff --git a/game/ai/performer.h b/game/ai/performer.h
index 472773b..17be028 100644
--- a/game/ai/performer.h
+++ b/game/ai/performer.h
@@ -1,49 +1,49 @@
-#ifndef PERFORMER_H
-#define PERFORMER_H
-
-#include <iostream>
-
-#include <string>
-#include <vector>
-
-#include "../ground.h"
-#include "../gst.h"
-#include "action.h"
-#include "tactic.h"
-
-namespace ai {
-
-class performer {
- public:
- performer (Gst &gst) : init(gst) {}
- Gst &init;
-
- Gst apply (tactic t) {
- Gst next { init };
- for (action a : t.acts) {
- next = act(next, a);
- }
- next.end_day();
- return next;
- }
-
- Gst& act (Gst &gst, action a) {
- if (a.type == actype::move) {
- Entity &ent = gst.get_at(a.x, a.y);
- ent.x = a.mx; ent.y = a.my;
- ent.moved = 1; ent.done = true;
- }
- if (a.type == actype::attack) {
- Entity &ent = gst.get_at(a.x, a.y);
- ent.x = a.mx; ent.y = a.my;
- ent.moved = 1;
- Entity &def = gst.get_at(a.tx, a.ty);
- gst.battle(ent, def);
- ent.done = true;
- }
- return gst;
- }
-};
-
-}
+#ifndef PERFORMER_H
+#define PERFORMER_H
+
+#include <iostream>
+
+#include <string>
+#include <vector>
+
+#include "../ground.h"
+#include "../gst.h"
+#include "action.h"
+#include "tactic.h"
+
+namespace ai {
+
+class performer {
+ public:
+ performer (Gst &gst) : init(gst) {}
+ Gst &init;
+
+ Gst apply (tactic t) {
+ Gst next { init };
+ for (action a : t.acts) {
+ next = act(next, a);
+ }
+ next.end_day();
+ return next;
+ }
+
+ Gst& act (Gst &gst, action a) {
+ if (a.type == actype::move) {
+ Entity &ent = gst.get_at(a.x, a.y);
+ ent.x = a.mx; ent.y = a.my;
+ ent.moved = 1; ent.done = true;
+ }
+ if (a.type == actype::attack) {
+ Entity &ent = gst.get_at(a.x, a.y);
+ ent.x = a.mx; ent.y = a.my;
+ ent.moved = 1;
+ Entity &def = gst.get_at(a.tx, a.ty);
+ gst.battle(ent, def);
+ ent.done = true;
+ }
+ return gst;
+ }
+};
+
+}
#endif \ No newline at end of file
diff --git a/game/ai/tactic.h b/game/ai/tactic.h
index 7eefef9..ec2e382 100644
--- a/game/ai/tactic.h
+++ b/game/ai/tactic.h
@@ -1,32 +1,32 @@
-#ifndef TACTIC_H
-#define TACTIC_H
-
-#include <string>
-#include <vector>
-
-#include "action.h"
-
-namespace ai {
-
-class tactic {
- public:
- tactic () { }
-
- std::vector<action> acts;
- float eval = 0;
-
- // copy constructor
- tactic (const tactic& rhs) { acts = rhs.acts; eval = rhs.eval; }
- tactic& operator=(const tactic& rhs) { acts = rhs.acts; eval = rhs.eval; }
-
- std::string to_string () {
- std::string str = "tactic eval= " + std::to_string(eval) + "\n";
- for (action act : acts) {
- str += act.to_string() + "\n";
- }
- return str;
- }
-};
-
-}
+#ifndef TACTIC_H
+#define TACTIC_H
+
+#include <string>
+#include <vector>
+
+#include "action.h"
+
+namespace ai {
+
+class tactic {
+ public:
+ tactic () { }
+
+ std::vector<action> acts;
+ float eval = 0;
+
+ // copy constructor
+ tactic (const tactic& rhs) { acts = rhs.acts; eval = rhs.eval; }
+ tactic& operator=(const tactic& rhs) { acts = rhs.acts; eval = rhs.eval; }
+
+ std::string to_string () {
+ std::string str = "tactic eval= " + std::to_string(eval) + "\n";
+ for (action act : acts) {
+ str += act.to_string() + "\n";
+ }
+ return str;
+ }
+};
+
+}
#endif \ No newline at end of file
diff --git a/game/constants.h b/game/constants.h
index 2ba343a..ef6a477 100644
--- a/game/constants.h
+++ b/game/constants.h
@@ -1,17 +1,17 @@
-#ifndef CONSTANTS_H
-#define CONSTANTS_H
-
-namespace constants {
- const int col_gud_r = 40;
- const int col_gud_g = 120;
- const int col_gud_b = 0;
- const int col_bad_r = 255;
- const int col_bad_g = 120;
- const int col_bad_b = 0;
-
- const float menu_attack_margin_amt = 60;
- const float menu_attack_margin_arrow = 80;
- const float menu_attack_margin_mod = 93;
-}
-
+#ifndef CONSTANTS_H
+#define CONSTANTS_H
+
+namespace constants {
+ const int col_gud_r = 40;
+ const int col_gud_g = 120;
+ const int col_gud_b = 0;
+ const int col_bad_r = 255;
+ const int col_bad_g = 120;
+ const int col_bad_b = 0;
+
+ const float menu_attack_margin_amt = 60;
+ const float menu_attack_margin_arrow = 80;
+ const float menu_attack_margin_mod = 93;
+}
+
#endif \ No newline at end of file
diff --git a/game/entity.cpp b/game/entity.cpp
index f127150..8539045 100644
--- a/game/entity.cpp
+++ b/game/entity.cpp
@@ -1,11 +1,11 @@
-#include "entity.h"
-#include <iostream>
-
-
-int EntityClass::from_string (std::string str) {
- if (str == "inf") return EntityInfo::Class::inf;
- if (str == "cav") return EntityInfo::Class::cav;
- if (str == "ran") return EntityInfo::Class::ran;
- if (str == "sie") return EntityInfo::Class::sie;
- if (str == "bld") return EntityInfo::Class::bld;
+#include "entity.h"
+#include <iostream>
+
+
+int EntityClass::from_string (std::string str) {
+ if (str == "inf") return EntityInfo::Class::inf;
+ if (str == "cav") return EntityInfo::Class::cav;
+ if (str == "ran") return EntityInfo::Class::ran;
+ if (str == "sie") return EntityInfo::Class::sie;
+ if (str == "bld") return EntityInfo::Class::bld;
} \ No newline at end of file
diff --git a/game/entity.h b/game/entity.h
index a15ebdb..f9f6781 100644
--- a/game/entity.h
+++ b/game/entity.h
@@ -1,82 +1,82 @@
-#ifndef ENTITIES_H
-#define ENTITIES_H
-
-#include <vector>
-#include <string>
-
-#include <iostream>
-
-#include "../umath/vec2.h"
-
-
-class EntityInfo {
- public:
- EntityInfo() { spritebounds = vec2 { 16*6, 16 }; }
-
- enum Class { inf, cav, ran, sie, bld };
- Class ent_class;
-
- std::string name;
-
- int id;
- int level;
-
- float hp;
- float attack;
- float defence;
- int range;
- float sight;
- int move;
- int unit;
- std::vector<int> abilities;
- std::vector<int> build;
- std::vector<int> train_id;
- std::vector<Class> train_class;
-
- std::vector<float> prod { 0, 0 };
- std::vector<float> cost { 0, 0 };
-
- std::vector<int> adjacent;
- std::vector<int> diagonal;
- float defence_bonus { 0 };
- int upgrade { -1 };
-
- vec2 spritebounds;
-};
-
-namespace EntityClass {
- int from_string(std::string str);
-}
-
-class Entity {
- public:
- Entity (int x, int y, EntityInfo *info, int owner)
- : x(x), y(y), info(info), owner(owner) { moved = 0; hp = 100; }
-
- // copy constructor
- Entity (const Entity& rhs) {
- building = rhs.building; hp = rhs.hp; x = rhs.x; y = rhs.y;
- done = rhs.done; moved = rhs.moved; info = rhs.info;
- fights = rhs.fights; owner = rhs.owner;
- }
- Entity& operator=(const Entity& rhs) {
- building = rhs.building; hp = rhs.hp; x = rhs.x; y = rhs.y;
- done = rhs.done; moved = rhs.moved; info = rhs.info;
- fights = rhs.fights; owner = rhs.owner;
- };
-
- bool operator==(Entity oth) {
- return x == oth.x && y == oth.y && info->unit == oth.info->unit;
- }
-
- int building { 0 };
- float hp;
- int x, y;
- bool done = false;
- int moved;
- EntityInfo *info;
- int fights { 0 };
- int owner;
-};
-
+#ifndef ENTITIES_H
+#define ENTITIES_H
+
+#include <vector>
+#include <string>
+
+#include <iostream>
+
+#include "../umath/vec2.h"
+
+
+class EntityInfo {
+ public:
+ EntityInfo() { spritebounds = vec2 { 16*6, 16 }; }
+
+ enum Class { inf, cav, ran, sie, bld };
+ Class ent_class;
+
+ std::string name;
+
+ int id;
+ int level;
+
+ float hp;
+ float attack;
+ float defence;
+ int range;
+ float sight;
+ int move;
+ int unit;
+ std::vector<int> abilities;
+ std::vector<int> build;
+ std::vector<int> train_id;
+ std::vector<Class> train_class;
+
+ std::vector<float> prod { 0, 0 };
+ std::vector<float> cost { 0, 0 };
+
+ std::vector<int> adjacent;
+ std::vector<int> diagonal;
+ float defence_bonus { 0 };
+ int upgrade { -1 };
+
+ vec2 spritebounds;
+};
+
+namespace EntityClass {
+ int from_string(std::string str);
+}
+
+class Entity {
+ public:
+ Entity (int x, int y, EntityInfo *info, int owner)
+ : x(x), y(y), info(info), owner(owner) { moved = 0; hp = 100; }
+
+ // copy constructor
+ Entity (const Entity& rhs) {
+ building = rhs.building; hp = rhs.hp; x = rhs.x; y = rhs.y;
+ done = rhs.done; moved = rhs.moved; info = rhs.info;
+ fights = rhs.fights; owner = rhs.owner;
+ }
+ Entity& operator=(const Entity& rhs) {
+ building = rhs.building; hp = rhs.hp; x = rhs.x; y = rhs.y;
+ done = rhs.done; moved = rhs.moved; info = rhs.info;
+ fights = rhs.fights; owner = rhs.owner;
+ };
+
+ bool operator==(Entity oth) {
+ return x == oth.x && y == oth.y && info->unit == oth.info->unit;
+ }
+
+ int building { 0 };
+ float hp;
+ int x, y;
+ bool done = false;
+ int moved;
+ EntityInfo *info;
+ int fights { 0 };
+ int owner;
+};
+
#endif \ No newline at end of file
diff --git a/game/ground.cpp b/game/ground.cpp
index cd67751..610b096 100644
--- a/game/ground.cpp
+++ b/game/ground.cpp
@@ -1,132 +1,132 @@
-#include "ground.h"
-#include "gst.h"
-
-#include <iostream>
-#include <algorithm>
-
-void Ground::build (int sx, int sy) {
- sizex = sx; sizey = sy;
- tiles = new int[sx*sy];
- for (int i=0; i<sx*sy; i++) tiles[i] = 0;
-}
-
-int Ground::at(int x, int y) {
- return x+y*sizex;
-}
-
-
-// areas
-std::vector<int> Ground::star (int pos) {
- std::vector<int> fs;
- int x = pos % sizex, y = pos / sizex;
- if (x-1 >= 0) { fs.push_back(at(x-1, y)); }
- if (x+1 < sizex) { fs.push_back(at(x+1, y)); }
- if (y-1 >= 0) { fs.push_back(at(x, y-1)); }
- if (y+1 < sizey) { fs.push_back(at(x, y+1)); }
- return fs;
-}
-
-class step { public:
- step(int pos, int m) : pos(pos), m(m) {};
- bool operator==(step oth) { return pos==oth.pos && m==oth.m; }
- bool operator==(int p) { return pos==p; }
- int pos, m;
-};
-
-std::vector<int> Ground::move_area (Gst &gst, Entity &ent) {
- Player &player = gst.players[ent.owner];
- int move_num = ent.info->move;
- move_num += player.tech_lookup.id(ent.info->id).move;
-
- std::vector<int> moves;
- std::vector<int> visited { at(ent.x, ent.y) };
- std::vector<step> frontier { step { at(ent.x, ent.y), move_num } };
-
- int maxcost = 99;
- if (gst.inv->info_has_ability(ent.info, "Scout")) maxcost = 2;
-
- int iter=0;
- for (; iter<10000; iter++) {
-
- if (frontier.size() == 0) break;
- step maxf {-1, -1};
- for (step t : frontier) {
- if (t.m > maxf.m) {
- maxf.pos = t.pos;
- maxf.m = t.m;
- }
- }
- frontier.erase(std::remove(frontier.begin(), frontier.end(), maxf),
- frontier.end());
- auto forward_star = star(maxf.pos);
- for (int t : forward_star) {
- if (!(std::find(visited.begin(), visited.end(), t) != visited.end())
- && !(std::find(frontier.begin(), frontier.end(), t) != frontier.end())) {
- int movecost = gst.inv->tiles[tiles[t]].move_cost;
- if (movecost > maxcost) movecost = maxcost;
- int walkedm = maxf.m - movecost;
- bool obs_enemy = false, obs_friend = false;
- for (Entity &e : gst.entities) {
- if (at(e.x, e.y) == t) {
- if (e.owner != ent.owner) obs_enemy = true;
- else obs_friend = true;
- break;
- }
- }
- if (walkedm >= 0 && !obs_enemy) {
- frontier.emplace_back(t, walkedm);
- if (!obs_friend) {
- moves.push_back(t);
- }
- }
- }
- }
- visited.push_back(maxf.pos);
- }
-
-
- return moves;
-}
-
-std::vector<int> Ground::attack_targets (Gst &gst, Entity &ent) {
- std::vector<int> attacks;
- int range = gst.get_range(ent);
- bool builds = !gst.inv->info_has_ability(ent.info, "Units Only");
- bool units = !gst.inv->info_has_ability(ent.info, "Buildings Only");
- for (Entity &e : gst.entities) {
- if (!units && e.info->unit == 1) continue;
- if (!builds && e.info->unit == 0) continue;
- int dist = abs(e.x-ent.x)+abs(e.y-ent.y);
- if (dist > 0 && e.owner != ent.owner && dist <= range) {
- attacks.push_back(at(e.x, e.y));
- }
- }
- return attacks;
-}
-
-std::vector<int> Ground::heal_targets (Gst &gst, Entity &ent) {
- std::vector<int> heals;
- int range = gst.get_range(ent);
- for (Entity &e : gst.entities) {
- if (e.info->unit == 0) continue;
- if (e.info->ent_class == EntityInfo::Class::sie) continue;
- int dist = abs(e.x-ent.x)+abs(e.y-ent.y);
- if (dist > 0 && e.owner == ent.owner && dist <= range) {
- heals.push_back(at(e.x, e.y));
- }
- }
- return heals;
-}
-
-std::vector<int> Ground::convert_targets (Gst &gst, Entity &ent) {
- std::vector<int> converts;
- int range = gst.get_range(ent);
- for (Entity &e : gst.entities) {
- if (e.info->unit == 0) continue;
- int dist = abs(e.x-ent.x)+abs(e.y-ent.y);
- if (dist > 0 && e.owner != ent.owner && dist <= range) {
- converts.push_back(at(e.x, e.y));
- }
- }
- return converts;
+#include "ground.h"
+#include "gst.h"
+
+#include <iostream>
+#include <algorithm>
+
+void Ground::build (int sx, int sy) {
+ sizex = sx; sizey = sy;
+ tiles = new int[sx*sy];
+ for (int i=0; i<sx*sy; i++) tiles[i] = 0;
+}
+
+int Ground::at(int x, int y) {
+ return x+y*sizex;
+}
+
+
+// areas
+std::vector<int> Ground::star (int pos) {
+ std::vector<int> fs;
+ int x = pos % sizex, y = pos / sizex;
+ if (x-1 >= 0) { fs.push_back(at(x-1, y)); }
+ if (x+1 < sizex) { fs.push_back(at(x+1, y)); }
+ if (y-1 >= 0) { fs.push_back(at(x, y-1)); }
+ if (y+1 < sizey) { fs.push_back(at(x, y+1)); }
+ return fs;
+}
+
+class step { public:
+ step(int pos, int m) : pos(pos), m(m) {};
+ bool operator==(step oth) { return pos==oth.pos && m==oth.m; }
+ bool operator==(int p) { return pos==p; }
+ int pos, m;
+};
+
+std::vector<int> Ground::move_area (Gst &gst, Entity &ent) {
+ Player &player = gst.players[ent.owner];
+ int move_num = ent.info->move;
+ move_num += player.tech_lookup.id(ent.info->id).move;
+
+ std::vector<int> moves;
+ std::vector<int> visited { at(ent.x, ent.y) };
+ std::vector<step> frontier { step { at(ent.x, ent.y), move_num } };
+
+ int maxcost = 99;
+ if (gst.inv->info_has_ability(ent.info, "Scout")) maxcost = 2;
+
+ int iter=0;
+ for (; iter<10000; iter++) {
+
+ if (frontier.size() == 0) break;
+ step maxf {-1, -1};
+ for (step t : frontier) {
+ if (t.m > maxf.m) {
+ maxf.pos = t.pos;
+ maxf.m = t.m;
+ }
+ }
+ frontier.erase(std::remove(frontier.begin(), frontier.end(), maxf),
+ frontier.end());
+ auto forward_star = star(maxf.pos);
+ for (int t : forward_star) {
+ if (!(std::find(visited.begin(), visited.end(), t) != visited.end())
+ && !(std::find(frontier.begin(), frontier.end(), t) != frontier.end())) {
+ int movecost = gst.inv->tiles[tiles[t]].move_cost;
+ if (movecost > maxcost) movecost = maxcost;
+ int walkedm = maxf.m - movecost;
+ bool obs_enemy = false, obs_friend = false;
+ for (Entity &e : gst.entities) {
+ if (at(e.x, e.y) == t) {
+ if (e.owner != ent.owner) obs_enemy = true;
+ else obs_friend = true;
+ break;
+ }
+ }
+ if (walkedm >= 0 && !obs_enemy) {
+ frontier.emplace_back(t, walkedm);
+ if (!obs_friend) {
+ moves.push_back(t);
+ }
+ }
+ }
+ }
+ visited.push_back(maxf.pos);
+ }
+
+
+ return moves;
+}
+
+std::vector<int> Ground::attack_targets (Gst &gst, Entity &ent) {
+ std::vector<int> attacks;
+ int range = gst.get_range(ent);
+ bool builds = !gst.inv->info_has_ability(ent.info, "Units Only");
+ bool units = !gst.inv->info_has_ability(ent.info, "Buildings Only");
+ for (Entity &e : gst.entities) {
+ if (!units && e.info->unit == 1) continue;
+ if (!builds && e.info->unit == 0) continue;
+ int dist = abs(e.x-ent.x)+abs(e.y-ent.y);
+ if (dist > 0 && e.owner != ent.owner && dist <= range) {
+ attacks.push_back(at(e.x, e.y));
+ }
+ }
+ return attacks;
+}
+
+std::vector<int> Ground::heal_targets (Gst &gst, Entity &ent) {
+ std::vector<int> heals;
+ int range = gst.get_range(ent);
+ for (Entity &e : gst.entities) {
+ if (e.info->unit == 0) continue;
+ if (e.info->ent_class == EntityInfo::Class::sie) continue;
+ int dist = abs(e.x-ent.x)+abs(e.y-ent.y);
+ if (dist > 0 && e.owner == ent.owner && dist <= range) {
+ heals.push_back(at(e.x, e.y));
+ }
+ }
+ return heals;
+}
+
+std::vector<int> Ground::convert_targets (Gst &gst, Entity &ent) {
+ std::vector<int> converts;
+ int range = gst.get_range(ent);
+ for (Entity &e : gst.entities) {
+ if (e.info->unit == 0) continue;
+ int dist = abs(e.x-ent.x)+abs(e.y-ent.y);
+ if (dist > 0 && e.owner != ent.owner && dist <= range) {
+ converts.push_back(at(e.x, e.y));
+ }
+ }
+ return converts;
} \ No newline at end of file
diff --git a/game/ground.h b/game/ground.h
index d1a4f34..fcded29 100644
--- a/game/ground.h
+++ b/game/ground.h
@@ -1,37 +1,37 @@
-#ifndef GROUND_H
-#define GROUND_H
-
-#include "entity.h"
-
-class Gst;
-
-class Resource {
- public:
- Resource (int pos, int kind) : pos(pos), kind(kind) {}
-
- enum Type { gold, food };
-
- int pos, kind;
-};
-
-class Ground {
- public:
- Ground () {}
-
- int *tiles;
-
- std::vector<Resource> resources;
-
- void build (int sx, int sy);
-
- int sizex;
- int sizey;
- int at (int x, int y);
- std::vector<int> star (int pos);
- std::vector<int> move_area (Gst &gst, Entity &ent);
- std::vector<int> attack_targets (Gst &gst, Entity &ent);
- std::vector<int> heal_targets (Gst &gst, Entity &ent);
- std::vector<int> convert_targets (Gst &gst, Entity &ent);
-};
-
+#ifndef GROUND_H
+#define GROUND_H
+
+#include "entity.h"
+
+class Gst;
+
+class Resource {
+ public:
+ Resource (int pos, int kind) : pos(pos), kind(kind) {}
+
+ enum Type { gold, food };
+
+ int pos, kind;
+};
+
+class Ground {
+ public:
+ Ground () {}
+
+ int *tiles;
+
+ std::vector<Resource> resources;
+
+ void build (int sx, int sy);
+
+ int sizex;
+ int sizey;
+ int at (int x, int y);
+ std::vector<int> star (int pos);
+ std::vector<int> move_area (Gst &gst, Entity &ent);
+ std::vector<int> attack_targets (Gst &gst, Entity &ent);
+ std::vector<int> heal_targets (Gst &gst, Entity &ent);
+ std::vector<int> convert_targets (Gst &gst, Entity &ent);
+};
+
#endif \ No newline at end of file
diff --git a/game/gst.cpp b/game/gst.cpp
index 334844a..35f2b44 100644
--- a/game/gst.cpp
+++ b/game/gst.cpp
@@ -1,605 +1,605 @@
-#include "gst.h"
-
-#include <map>
-#include <iostream>
-
-
-Tech* Inv::get_tech (int id) {
- for (auto &tech : techs) {
- if (id == tech.id) return &tech;
- }
-}
-
-EntityInfo* Inv::get_info (std::string name) {
- for (EntityInfo &info : infos) {
- if (name == info.name) return &info;
- }
-}
-
-EntityInfo* Inv::get_info (int id) {
- for (EntityInfo &info : infos) {
- if (id == info.id) return &info;
- }
-}
-
-bool Inv::info_has_ability (EntityInfo* info, std::string name) {
- for (int ab : info->abilities) {
- if (abilities[ab].name == name) return true;
- }
- return false;
-}
-
-
-
-Player& Gst::get_player (int id) {
- for (auto &player : players) {
- if (id == player.id) return player;
- }
-}
-
-Entity& Gst::get_at (int x, int y) {
- for (Entity &e : entities) {
- if (e.x ==x && e.y == y) return e;
- }
-}
-
-std::vector<float> Gst::get_cost (EntityInfo *info, Player &player) {
- std::vector<float> cost = info->cost;
-
- std::cout << "cost : " << player.tech_lookup.id(info->id).cost[0] << " " << player.tech_lookup.id(info->id).cost[1] << "\n";
- for (int i=0; i<info->cost.size(); i++) {
- cost[i] *= 1+player.tech_lookup.id(info->id).cost[i];
- cost[i] += player.tech_lookup.id(info->id).cost_abs[i];
- }
- return cost;
-}
-
-float Gst::get_trade_rate (Player &player) {
- float rate = 250;
- rate -= player.tech_lookup.id(0).trade * 25;
- return rate;
-}
-
-float Gst::get_type_bonus (Entity &atk, Entity &def) {
- float b = 0;
- switch(atk.info->ent_class) {
- case EntityInfo::Class::inf:
- if (def.info->ent_class == EntityInfo::Class::bld) b += 1.0f/3.0f;
- if (def.info->ent_class == EntityInfo::Class::sie) b += 1.0f/3.0f;
- break;
-
- case EntityInfo::Class::cav:
- if (def.info->ent_class == EntityInfo::Class::bld) b += -0.5;
- if (def.info->ent_class == EntityInfo::Class::inf) b += 1.0f/3.0f;
- if (def.info->ent_class == EntityInfo::Class::ran) b += 1.0f/3.0f;
- break;
-
- case EntityInfo::Class::ran:
- if (def.info->ent_class == EntityInfo::Class::bld) b += -0.5f;
- break;
-
- case EntityInfo::Class::sie:
- if (def.info->ent_class == EntityInfo::Class::bld) b += +0.5f;
- break;
- }
- return b;
-}
-
-int Gst::get_vet_level (Entity &ent) { return std::min(3, ent.fights/3); }
-
-std::vector<Bonus> Gst::get_bonuses (Entity &atk, Entity &def) {
- auto &tiles = inv->tiles;
- auto &ground = inv->ground;
- std::vector<Bonus> bs;
- if (tiles[ground.tiles[ground.at(atk.x, atk.y)]].attack_bonus != 0) {
-
- bs.emplace_back(
- tiles[ground.tiles[ground.at(atk.x, atk.y)]].attack_bonus,
- Bonus::Id::ground, true);
- }
- if (tiles[ground.tiles[ground.at(def.x, def.y)]].defence_bonus != 0) {
- bs.emplace_back(
- tiles[ground.tiles[ground.at(def.x, def.y)]].defence_bonus,
- Bonus::Id::ground, false);
- }
-
- if (check_obstructed(def)) {
- for (Entity &e : entities) {
- if (&def != &e && e.x == def.x && def.y == e.y) {
- bs.emplace_back(e.info->defence_bonus,
- Bonus::Id::on_bld, false);
- }
- }
- }
-
- if (get_type_bonus(atk, def) != 0) {
- bs.emplace_back(get_type_bonus(atk, def), Bonus::Id::type, true);
- }
- /* only attack bonuses
- if (get_type_bonus(def, atk) != 0) {
- bs.emplace_back(get_type_bonus(def, atk), Bonus::Id::type, false);
- }*/
-
- if (inv->info_has_ability(atk.info, "Causes Fear"))
- bs.emplace_back(-1.0f/3, Bonus::Id::ability, false);
- if (inv->info_has_ability(def.info, "Causes Fear"))
- bs.emplace_back(-1.0f/3, Bonus::Id::ability, true);
-
- if (inv->info_has_ability(atk.info, "Anti-Cavalry"))
- bs.emplace_back(4.0f/3, Bonus::Id::ability, true);
- if (inv->info_has_ability(def.info, "Anti-Cavalry"))
- bs.emplace_back(4.0f/3, Bonus::Id::ability, false);
-
- if (inv->info_has_ability(atk.info, "Desert Charge")
- && !inv->info_has_ability(def.info, "Desert Charge")
- && tiles[ground.tiles[ground.at(def.x, def.y)]].name == "Desert")
- bs.emplace_back(1.0f/3, Bonus::Id::ability, true);
-
- if (inv->info_has_ability(atk.info, "Plains Charge")
- && !inv->info_has_ability(def.info, "Plains Charge")
- && tiles[ground.tiles[ground.at(def.x, def.y)]].name == "Plains")
- bs.emplace_back(1.0f/3, Bonus::Id::ability, true);
-
- if (inv->info_has_ability(atk.info, "Woodsman")
- && !inv->info_has_ability(def.info, "Woodsman")
- && tiles[ground.tiles[ground.at(def.x, def.y)]].name == "Forest")
- bs.emplace_back(1.0f/3, Bonus::Id::ability, true);
-
- if (inv->info_has_ability(atk.info, "Volley") && atk.hp >= 50)
- bs.emplace_back(1.0f/3, Bonus::Id::ability, true);
-
- if (inv->info_has_ability(atk.info, "Frenzy"))
- bs.emplace_back(1/atk.hp, Bonus::Id::ability, true);
-
- Player &player_atk = players[atk.owner];
- Player &player_def = players[def.owner];
- float tech_attack = player_atk.tech_lookup.id(atk.info->id).attack;
- if (tech_attack != 0)
- bs.emplace_back(tech_attack, Bonus::Id::tech, true);
- float tech_defence = player_def.tech_lookup.id(def.info->id).defence;
- if (tech_defence != 0)
- bs.emplace_back(tech_defence, Bonus::Id::tech, false);
-
- float atk_vet = get_vet_level(atk) * 0.15f;
- if (atk_vet > 0)
- bs.emplace_back(atk_vet, Bonus::Id::veteran, true);
- float def_vet = get_vet_level(def) * 0.15f;
- if (def_vet > 0)
- bs.emplace_back(def_vet, Bonus::Id::veteran, false);
-
- return bs;
-}
-
-float Gst::get_damage (Entity &atk, Entity &def, float atk_hp) {
- float atkmul = 1;
- float defmul = 1;
-
- auto bonuses = get_bonuses(atk, def);
- for (auto bonus : bonuses) {
- if (bonus.atk) { atkmul += bonus.amt; }
- else { defmul += bonus.amt; }
- }
-
- float dam = (atk.info->attack * atk_hp * atkmul)
- / (2.0f*def.info->defence * defmul);
-
- return dam;
-}
-
-float Gst::get_damage (Entity &atk, Entity &def) {
- return get_damage(atk, def, atk.hp);
-}
-
-bool Gst::get_first_strike (Entity &atk, Entity &def) {
- bool fs { false };
- fs = inv->info_has_ability(atk.info, "First Strike");
- return fs;
-}
-
-float clamp_hp (float hp) {
- if (hp > 100) hp = 100;
- if (hp < 0) hp = 0;
- return hp;
-}
-
-BattleResult Gst::battle_res (Entity &atk, Entity &def) {
- BattleResult result { atk.hp, def.hp };
- bool first_strike_atk = inv->info_has_ability(atk.info, "First Strike");
- bool first_strike_def = inv->info_has_ability(def.info, "First Strike");
- bool skirmish_atk = inv->info_has_ability(atk.info, "Skirmish");
- bool skirmish_def = inv->info_has_ability(def.info, "Skirmish");
- bool anticav_atk = inv->info_has_ability(atk.info, "Anti-Cavalry");
- bool anticav_def = inv->info_has_ability(def.info, "Anti-Cavalry");
- first_strike_atk = first_strike_atk
- || (skirmish_atk && def.info->range == 1);
- first_strike_def = first_strike_def
- || (skirmish_def && atk.info->range == 1);
- first_strike_atk = first_strike_atk
- || (anticav_atk && def.info->ent_class == EntityInfo::Class::cav);
- first_strike_def = first_strike_def
- || (anticav_def && atk.info->ent_class == EntityInfo::Class::cav);
-
- int dist = abs(atk.x-def.x) + abs(atk.y-def.y);
- bool def_inrange = (dist <= get_range(def)) ? true : false;
-
- bool swap = false;
- if (first_strike_def && !first_strike_atk) swap = true;
- if (swap) {
- if (def_inrange) {
- result.atk_hp = clamp_hp(
- result.atk_hp - get_damage(def, atk, result.def_hp));
- }
- if (!inv->info_has_ability(atk.info, "No Counter"))
- if (result.atk_hp > 0)
- result.def_hp = clamp_hp(
- result.def_hp - get_damage(atk, def, result.atk_hp));
- } else {
- result.def_hp = clamp_hp(
- result.def_hp - get_damage(atk, def, result.atk_hp));
- if (!inv->info_has_ability(def.info, "No Counter") && def_inrange)
- if (result.def_hp > 0)
- result.atk_hp = clamp_hp(
- result.atk_hp - get_damage(def, atk, result.def_hp));
- }
-
- if (inv->info_has_ability(atk.info, "Rapid Fire"))
- if (result.def_hp > 0)
- result.def_hp = clamp_hp(
- result.def_hp - get_damage(atk, def, result.def_hp));
-
- if (inv->info_has_ability(def.info, "Rapid Fire") && def_inrange)
- if (result.atk_hp > 0)
- result.atk_hp = clamp_hp(
- result.atk_hp - get_damage(def, atk, result.def_hp));
-
- if (result.atk_hp > 0 && inv->info_has_ability(atk.info, "Zeal"))
- result.atk_hp = clamp_hp(result.atk_hp + 20);
- if (result.def_hp > 0 && inv->info_has_ability(def.info, "Zeal"))
- result.def_hp = clamp_hp(result.def_hp + 20);
-
- return result;
-}
-
-void Gst::battle (Entity &atk, Entity &def) {
- /*std::cout << "! attack " << atk.info->name << "(hp:" << atk.hp << "), "
- << def.info->name << "(hp:" << def.hp << ") \n";*/
-
- auto result = battle_res(atk, def);
- atk.hp = result.atk_hp;
- def.hp = result.def_hp;
-
- if (atk.info->unit == 1) atk.fights += 1;
- if (def.info->unit == 1) def.fights += 1;
-
- /*std::cout << "! result " << atk.info->name << "(hp:" << atk.hp << "), "
- << def.info->name << "(hp:" << def.hp << ") \n";*/
- clear_dead();
-}
-
-void Gst::clear_dead() {
- auto i = std::begin(entities);
- while (i != std::end(entities)) {
- if (i->hp <= 0) {
- entities.erase(i);
- }
- else i++;
- }
-}
-
-int Gst::get_range (Entity &ent) {
- int range = ent.info->range;
- if (range > 1) {
- auto &tiles = inv->tiles;
- auto &ground = inv->ground;
- range += tiles[ground.tiles[ground.at(ent.x, ent.y)]].range_bonus;
- }
- if (range < 1) range = 1;
- return range;
-}
-
-
-void Gst::heal (Entity &atk, Entity &def) {
- Player &player = get_player(atk.owner);
- float amt = 20;
- if (atk.info->level == 3) { amt += 10; } // improved heal
- if (player.has_tech(52)) { amt += 10; } // tech illumination
- def.hp = clamp_hp(def.hp + amt);
-}
-
-void Gst::convert (Entity &atk, Entity &def) {
- Player &player = get_player(atk.owner);
- float amt = 0.20f;
- if (player.has_tech(53)) { amt += 0.10f; } // tech faith
- // caution, randomness
- std::uniform_real_distribution<float> odds(0, 1);
- float value = odds(inv->engine);
- std::cout << value << " / " << amt << " odds\n";
- if (value < amt) {
- def.owner = atk.owner;
- }
-}
-
-
-int Gst::get_nearest_enemy (Entity &ent, int &mindist) {
- auto &ground = inv->ground;
- int pos = -1; mindist = 9999999;
- for (Entity &oth : entities) {
- if (oth.owner == ent.owner) continue;
- int dist = abs(oth.x-ent.x) + abs(oth.y-ent.y);
- if (dist < mindist) {
- mindist = dist;
- pos = ground.at(oth.x, oth.y);
- }
- }
-}
-
-
-std::vector<int> Gst::get_possible_trains (Entity &ent) {
- Player &player = get_player(ent.owner);
- auto &cls = ent.info->train_class;
- std::vector<int> trains;
- if (ent.info->id == 107) { // market special case
- std::vector<int> candidates;
- for (EntityInfo &info : inv->infos) {
- if (info.id == 0) continue; // villager only in train_id
- if (info.level > player.level) continue;
- if (info.level < player.level && info.upgrade != -1) continue;
- if (std::find(cls.begin(), cls.end(), info.ent_class) != cls.end())
- {
- candidates.push_back(info.id);
- }
- }
- std::shuffle(candidates.begin(), candidates.end(), inv->engine);
- // pick 3 cands at random
- for (int i=0; i<3; i++) trains.push_back(candidates[i]);
- return trains;
- }
-
- for (int id : ent.info->train_id) {
- auto info = inv->get_info(id);
- if (info->level > player.level) continue;
- if (info->level < player.level && info->upgrade != -1) continue;
- trains.push_back(id);
- }
- /*
- // get all train class ids, highest upgrade level
- for (EntityInfo &info : infos) {
- if (info.id == 0) continue; // villager only in train_id
- if (info.level > player.level) continue;
- if (info.level < player.level && info.upgrade != -1) continue;
- if (std::find(cls.begin(), cls.end(), info.ent_class) != cls.end()) {
- if (std::find(trains.begin(), trains.end(), info.id)
- != trains.end())
- {
- trains.push_back(info.id);
- }
- }
- }*/
- return trains;
-}
-
-std::vector<int> Gst::get_possible_builds (Entity &ent) {
- std::vector<int> builds;
- for (int id : ent.info->build) {
- if (check_req_build(ent, inv->get_info(id))) {
- builds.push_back(id);
- }
- }
- return builds;
-}
-
-
-bool Gst::check_req_build(Entity &ent, EntityInfo *info) {
- auto &ground = inv->ground;
- Player &player = players[ent.owner];
- if (player.level < info->level) return false;
- for (int id : info->adjacent) {
- bool adj = false;
- for (Entity &e : entities) {
- if (e.info->id == id && ent.owner == e.owner) {
- int dist = abs(e.x-ent.x) + abs(e.y-ent.y);
- if (dist == 1) {
- adj = true;
- }
- }
- }
- if (!adj) return false;
- }
- for (int id : info->diagonal) {
- bool diag = false;
- for (Entity &e : entities) {
- if (e.info->id == id && ent.owner == e.owner) {
- int dx = abs(e.x-ent.x), dy = abs(e.y-ent.y);
- int dist = dx + dy;
- if (dx == 1 && dy == 1) {
- diag = true;
- }
- }
- }
- if (!diag) return false;
- }
- if (info->id == 100) {
- for (Resource &r : ground.resources) {
- if (r.pos == ground.at(ent.x, ent.y)) {
- return false;
- }
- }
- int mindist = 9999;
- for (Entity &e : entities) {
- if (e.info->id == 100 && ent.owner == e.owner) {
- int dist = abs(e.x-ent.x) + abs(ent.y-e.y);
- if (dist < mindist) {
- mindist = dist;
- }
- }
- }
- if (mindist < 5) {
- return false;
- }
- return true;
- }
- if (info->id == 101) {
- for (Resource &r : ground.resources) {
- if (r.kind == Resource::Type::food
- && r.pos == ground.at(ent.x, ent.y)) {
- return true;
- }
- }
- return false;
- }
- if (info->id == 102) {
- for (Resource &r : ground.resources) {
- if (r.kind == Resource::Type::gold
- && r.pos == ground.at(ent.x, ent.y)) {
- return true;
- }
- }
- return false;
- }
- return true;
-}
-
-
-bool Gst::check_req_tech (Tech *tech, Player &player) {
- if (player.leveling_up == 1) return false;
- if (tech->level > player.level) {
- return false;
- }
- if (tech->cost[0] > player.res[0]
- || tech->cost[1] > player.res[1] )
- {
- return false;
- }
- if (player.has_tech(tech->id)) {
- return false;
- }
- bool req_id = false;
- for (auto &ent : entities) {
- if (ent.owner == turn // WARNING: turn is not player.id
- && ent.info->id == tech->req_id
- && ent.building == 0)
- {
- req_id = true;
- break;
- }
- }
- if (!req_id) {
- return false;
- }
- return true;
-}
-
-bool Gst::check_req_level (Player &player) {
- if (player.leveling_up == 1) return false;
-
- for (float v : player.res) {
- if (v <= (player.level+1)*500) return false;
- }
-
- std::map<int, int> lv_techs;
- for (int id : player.techs) lv_techs[inv->get_tech(id)->level] ++;
- if (player.level == 0) {
- if (lv_techs[0] >= 3) return true;
- }
- if (player.level == 1) {
- if (lv_techs[1] >= 7) return true;
- }
- if (player.level == 2) {
- if (lv_techs[2] >= 11) return true;
- }
- return false;
-}
-
-bool Gst::check_obstructed (Entity &ent) {
- for (Entity &e : entities) {
- if (&ent != &e && e.x == ent.x && ent.y == e.y) return true;
- }
- return false;
-}
-
-void Gst::end_day () {
- turn++;
- if (turn >= players.size()) {
- turn = 0;
- day++;
- }
- Player &player = players[turn];
- if (player.leveling_up != -1) {
- level_upgrade(player);
- player.level ++;
- player.leveling_up = -1;
- }
- for (Entity &e : entities) {
- e.done = false;
- e.moved = 0;
- if (get_player(e.owner) == player) {
- for (int i=0; i<player.res.size(); i++) {
- player.res[i] += e.info->prod[i] *
- (1+player.tech_lookup.id(e.info->id).prod[i]);
- }
- if (e.building < 0) {
- e.building++;
- if (e.building == 0) {
- e.hp = clamp_hp(e.hp + 50);
- }
- }
- if (e.info->unit == 1 && check_obstructed(e)) {
- e.hp = clamp_hp(e.hp + 20);
- }
- }
- }
- if (player.researching != -1) {
- player.techs.push_back(player.researching);
- update_tech_lookup(player);
- player.researching = -1;
- }
-}
-
-void Gst::level_upgrade (Player &player) {
- for (Entity &e : entities) {
- if (get_player(e.owner) == player) {
- if (e.info->upgrade != -1 && e.info->level == player.level) {
- e.info = inv->get_info(e.info->upgrade);
- }
- }
- }
-}
-
-
-void Gst::update_tech_lookup (Player &player) {
- player.tech_lookup.map_id.clear();
- for (int i : player.techs) {
- Tech *tech = inv->get_tech(i);
- std::vector<int> ids { };
- bool noaff = true;
- if (tech->bonus.aff_id.size() > 0) {
- ids = tech->bonus.aff_id;
- noaff = false;
- } else {
- if (tech->bonus.aff_level != -1) {
- for (EntityInfo info : inv->infos) {
- if (info.level == tech->bonus.aff_level) {
- ids.push_back(info.id);
- }
- }
- noaff = false;
- }
- if (tech->bonus.aff_class.size() > 0) {
- for (EntityInfo info : inv->infos) {
- auto &cls = tech->bonus.aff_class;
- if (std::find(cls.begin(), cls.end(),
- info.ent_class) != cls.end())
- {
- ids.push_back(info.id);
- }
- }
- noaff = false;
- }
- }
- if (noaff) { for (auto info : inv->infos) ids.push_back(info.id); }
- for (int id : ids) {
- player.tech_lookup.map_id[id] =
- player.tech_lookup.map_id[id] + tech->bonus;
- }
- }
+#include "gst.h"
+
+#include <map>
+#include <iostream>
+
+
+Tech* Inv::get_tech (int id) {
+ for (auto &tech : techs) {
+ if (id == tech.id) return &tech;
+ }
+}
+
+EntityInfo* Inv::get_info (std::string name) {
+ for (EntityInfo &info : infos) {
+ if (name == info.name) return &info;
+ }
+}
+
+EntityInfo* Inv::get_info (int id) {
+ for (EntityInfo &info : infos) {
+ if (id == info.id) return &info;
+ }
+}
+
+bool Inv::info_has_ability (EntityInfo* info, std::string name) {
+ for (int ab : info->abilities) {
+ if (abilities[ab].name == name) return true;
+ }
+ return false;
+}
+
+
+
+Player& Gst::get_player (int id) {
+ for (auto &player : players) {
+ if (id == player.id) return player;
+ }
+}
+
+Entity& Gst::get_at (int x, int y) {
+ for (Entity &e : entities) {
+ if (e.x ==x && e.y == y) return e;
+ }
+}
+
+std::vector<float> Gst::get_cost (EntityInfo *info, Player &player) {
+ std::vector<float> cost = info->cost;
+
+ std::cout << "cost : " << player.tech_lookup.id(info->id).cost[0] << " " << player.tech_lookup.id(info->id).cost[1] << "\n";
+ for (int i=0; i<info->cost.size(); i++) {
+ cost[i] *= 1+player.tech_lookup.id(info->id).cost[i];
+ cost[i] += player.tech_lookup.id(info->id).cost_abs[i];
+ }
+ return cost;
+}
+
+float Gst::get_trade_rate (Player &player) {
+ float rate = 250;
+ rate -= player.tech_lookup.id(0).trade * 25;
+ return rate;
+}
+
+float Gst::get_type_bonus (Entity &atk, Entity &def) {
+ float b = 0;
+ switch(atk.info->ent_class) {
+ case EntityInfo::Class::inf:
+ if (def.info->ent_class == EntityInfo::Class::bld) b += 1.0f/3.0f;
+ if (def.info->ent_class == EntityInfo::Class::sie) b += 1.0f/3.0f;
+ break;
+
+ case EntityInfo::Class::cav:
+ if (def.info->ent_class == EntityInfo::Class::bld) b += -0.5;
+ if (def.info->ent_class == EntityInfo::Class::inf) b += 1.0f/3.0f;
+ if (def.info->ent_class == EntityInfo::Class::ran) b += 1.0f/3.0f;
+ break;
+
+ case EntityInfo::Class::ran:
+ if (def.info->ent_class == EntityInfo::Class::bld) b += -0.5f;
+ break;
+
+ case EntityInfo::Class::sie:
+ if (def.info->ent_class == EntityInfo::Class::bld) b += +0.5f;
+ break;
+ }
+ return b;
+}
+
+int Gst::get_vet_level (Entity &ent) { return std::min(3, ent.fights/3); }
+
+std::vector<Bonus> Gst::get_bonuses (Entity &atk, Entity &def) {
+ auto &tiles = inv->tiles;
+ auto &ground = inv->ground;
+ std::vector<Bonus> bs;
+ if (tiles[ground.tiles[ground.at(atk.x, atk.y)]].attack_bonus != 0) {
+
+ bs.emplace_back(
+ tiles[ground.tiles[ground.at(atk.x, atk.y)]].attack_bonus,
+ Bonus::Id::ground, true);
+ }
+ if (tiles[ground.tiles[ground.at(def.x, def.y)]].defence_bonus != 0) {
+ bs.emplace_back(
+ tiles[ground.tiles[ground.at(def.x, def.y)]].defence_bonus,
+ Bonus::Id::ground, false);
+ }
+
+ if (check_obstructed(def)) {
+ for (Entity &e : entities) {
+ if (&def != &e && e.x == def.x && def.y == e.y) {
+ bs.emplace_back(e.info->defence_bonus,
+ Bonus::Id::on_bld, false);
+ }
+ }
+ }
+
+ if (get_type_bonus(atk, def) != 0) {
+ bs.emplace_back(get_type_bonus(atk, def), Bonus::Id::type, true);
+ }
+ /* only attack bonuses
+ if (get_type_bonus(def, atk) != 0) {
+ bs.emplace_back(get_type_bonus(def, atk), Bonus::Id::type, false);
+ }*/
+
+ if (inv->info_has_ability(atk.info, "Causes Fear"))
+ bs.emplace_back(-1.0f/3, Bonus::Id::ability, false);
+ if (inv->info_has_ability(def.info, "Causes Fear"))
+ bs.emplace_back(-1.0f/3, Bonus::Id::ability, true);
+
+ if (inv->info_has_ability(atk.info, "Anti-Cavalry"))
+ bs.emplace_back(4.0f/3, Bonus::Id::ability, true);
+ if (inv->info_has_ability(def.info, "Anti-Cavalry"))
+ bs.emplace_back(4.0f/3, Bonus::Id::ability, false);
+
+ if (inv->info_has_ability(atk.info, "Desert Charge")
+ && !inv->info_has_ability(def.info, "Desert Charge")
+ && tiles[ground.tiles[ground.at(def.x, def.y)]].name == "Desert")
+ bs.emplace_back(1.0f/3, Bonus::Id::ability, true);
+
+ if (inv->info_has_ability(atk.info, "Plains Charge")
+ && !inv->info_has_ability(def.info, "Plains Charge")
+ && tiles[ground.tiles[ground.at(def.x, def.y)]].name == "Plains")
+ bs.emplace_back(1.0f/3, Bonus::Id::ability, true);
+
+ if (inv->info_has_ability(atk.info, "Woodsman")
+ && !inv->info_has_ability(def.info, "Woodsman")
+ && tiles[ground.tiles[ground.at(def.x, def.y)]].name == "Forest")
+ bs.emplace_back(1.0f/3, Bonus::Id::ability, true);
+
+ if (inv->info_has_ability(atk.info, "Volley") && atk.hp >= 50)
+ bs.emplace_back(1.0f/3, Bonus::Id::ability, true);
+
+ if (inv->info_has_ability(atk.info, "Frenzy"))
+ bs.emplace_back(1/atk.hp, Bonus::Id::ability, true);
+
+ Player &player_atk = players[atk.owner];
+ Player &player_def = players[def.owner];
+ float tech_attack = player_atk.tech_lookup.id(atk.info->id).attack;
+ if (tech_attack != 0)
+ bs.emplace_back(tech_attack, Bonus::Id::tech, true);
+ float tech_defence = player_def.tech_lookup.id(def.info->id).defence;
+ if (tech_defence != 0)
+ bs.emplace_back(tech_defence, Bonus::Id::tech, false);
+
+ float atk_vet = get_vet_level(atk) * 0.15f;
+ if (atk_vet > 0)
+ bs.emplace_back(atk_vet, Bonus::Id::veteran, true);
+ float def_vet = get_vet_level(def) * 0.15f;
+ if (def_vet > 0)
+ bs.emplace_back(def_vet, Bonus::Id::veteran, false);
+
+ return bs;
+}
+
+float Gst::get_damage (Entity &atk, Entity &def, float atk_hp) {
+ float atkmul = 1;
+ float defmul = 1;
+
+ auto bonuses = get_bonuses(atk, def);
+ for (auto bonus : bonuses) {
+ if (bonus.atk) { atkmul += bonus.amt; }
+ else { defmul += bonus.amt; }
+ }
+
+ float dam = (atk.info->attack * atk_hp * atkmul)
+ / (2.0f*def.info->defence * defmul);
+
+ return dam;
+}
+
+float Gst::get_damage (Entity &atk, Entity &def) {
+ return get_damage(atk, def, atk.hp);
+}
+
+bool Gst::get_first_strike (Entity &atk, Entity &def) {
+ bool fs { false };
+ fs = inv->info_has_ability(atk.info, "First Strike");
+ return fs;
+}
+
+float clamp_hp (float hp) {
+ if (hp > 100) hp = 100;
+ if (hp < 0) hp = 0;
+ return hp;
+}
+
+BattleResult Gst::battle_res (Entity &atk, Entity &def) {
+ BattleResult result { atk.hp, def.hp };
+ bool first_strike_atk = inv->info_has_ability(atk.info, "First Strike");
+ bool first_strike_def = inv->info_has_ability(def.info, "First Strike");
+ bool skirmish_atk = inv->info_has_ability(atk.info, "Skirmish");
+ bool skirmish_def = inv->info_has_ability(def.info, "Skirmish");
+ bool anticav_atk = inv->info_has_ability(atk.info, "Anti-Cavalry");
+ bool anticav_def = inv->info_has_ability(def.info, "Anti-Cavalry");
+ first_strike_atk = first_strike_atk
+ || (skirmish_atk && def.info->range == 1);
+ first_strike_def = first_strike_def
+ || (skirmish_def && atk.info->range == 1);
+ first_strike_atk = first_strike_atk
+ || (anticav_atk && def.info->ent_class == EntityInfo::Class::cav);
+ first_strike_def = first_strike_def
+ || (anticav_def && atk.info->ent_class == EntityInfo::Class::cav);
+
+ int dist = abs(atk.x-def.x) + abs(atk.y-def.y);
+ bool def_inrange = (dist <= get_range(def)) ? true : false;
+
+ bool swap = false;
+ if (first_strike_def && !first_strike_atk) swap = true;
+ if (swap) {
+ if (def_inrange) {
+ result.atk_hp = clamp_hp(
+ result.atk_hp - get_damage(def, atk, result.def_hp));
+ }
+ if (!inv->info_has_ability(atk.info, "No Counter"))
+ if (result.atk_hp > 0)
+ result.def_hp = clamp_hp(
+ result.def_hp - get_damage(atk, def, result.atk_hp));
+ } else {
+ result.def_hp = clamp_hp(
+ result.def_hp - get_damage(atk, def, result.atk_hp));
+ if (!inv->info_has_ability(def.info, "No Counter") && def_inrange)
+ if (result.def_hp > 0)
+ result.atk_hp = clamp_hp(
+ result.atk_hp - get_damage(def, atk, result.def_hp));
+ }
+
+ if (inv->info_has_ability(atk.info, "Rapid Fire"))
+ if (result.def_hp > 0)
+ result.def_hp = clamp_hp(
+ result.def_hp - get_damage(atk, def, result.def_hp));
+
+ if (inv->info_has_ability(def.info, "Rapid Fire") && def_inrange)
+ if (result.atk_hp > 0)
+ result.atk_hp = clamp_hp(
+ result.atk_hp - get_damage(def, atk, result.def_hp));
+
+ if (result.atk_hp > 0 && inv->info_has_ability(atk.info, "Zeal"))
+ result.atk_hp = clamp_hp(result.atk_hp + 20);
+ if (result.def_hp > 0 && inv->info_has_ability(def.info, "Zeal"))
+ result.def_hp = clamp_hp(result.def_hp + 20);
+
+ return result;
+}
+
+void Gst::battle (Entity &atk, Entity &def) {
+ /*std::cout << "! attack " << atk.info->name << "(hp:" << atk.hp << "), "
+ << def.info->name << "(hp:" << def.hp << ") \n";*/
+
+ auto result = battle_res(atk, def);
+ atk.hp = result.atk_hp;
+ def.hp = result.def_hp;
+
+ if (atk.info->unit == 1) atk.fights += 1;
+ if (def.info->unit == 1) def.fights += 1;
+
+ /*std::cout << "! result " << atk.info->name << "(hp:" << atk.hp << "), "
+ << def.info->name << "(hp:" << def.hp << ") \n";*/
+ clear_dead();
+}
+
+void Gst::clear_dead() {
+ auto i = std::begin(entities);
+ while (i != std::end(entities)) {
+ if (i->hp <= 0) {
+ entities.erase(i);
+ }
+ else i++;
+ }
+}
+
+int Gst::get_range (Entity &ent) {
+ int range = ent.info->range;
+ if (range > 1) {
+ auto &tiles = inv->tiles;
+ auto &ground = inv->ground;
+ range += tiles[ground.tiles[ground.at(ent.x, ent.y)]].range_bonus;
+ }
+ if (range < 1) range = 1;
+ return range;
+}
+
+
+void Gst::heal (Entity &atk, Entity &def) {
+ Player &player = get_player(atk.owner);
+ float amt = 20;
+ if (atk.info->level == 3) { amt += 10; } // improved heal
+ if (player.has_tech(52)) { amt += 10; } // tech illumination
+ def.hp = clamp_hp(def.hp + amt);
+}
+
+void Gst::convert (Entity &atk, Entity &def) {
+ Player &player = get_player(atk.owner);
+ float amt = 0.20f;
+ if (player.has_tech(53)) { amt += 0.10f; } // tech faith
+ // caution, randomness
+ std::uniform_real_distribution<float> odds(0, 1);
+ float value = odds(inv->engine);
+ std::cout << value << " / " << amt << " odds\n";
+ if (value < amt) {
+ def.owner = atk.owner;
+ }
+}
+
+
+int Gst::get_nearest_enemy (Entity &ent, int &mindist) {
+ auto &ground = inv->ground;
+ int pos = -1; mindist = 9999999;
+ for (Entity &oth : entities) {
+ if (oth.owner == ent.owner) continue;
+ int dist = abs(oth.x-ent.x) + abs(oth.y-ent.y);
+ if (dist < mindist) {
+ mindist = dist;
+ pos = ground.at(oth.x, oth.y);
+ }
+ }
+}
+
+
+std::vector<int> Gst::get_possible_trains (Entity &ent) {
+ Player &player = get_player(ent.owner);
+ auto &cls = ent.info->train_class;
+ std::vector<int> trains;
+ if (ent.info->id == 107) { // market special case
+ std::vector<int> candidates;
+ for (EntityInfo &info : inv->infos) {
+ if (info.id == 0) continue; // villager only in train_id
+ if (info.level > player.level) continue;
+ if (info.level < player.level && info.upgrade != -1) continue;
+ if (std::find(cls.begin(), cls.end(), info.ent_class) != cls.end())
+ {
+ candidates.push_back(info.id);
+ }
+ }
+ std::shuffle(candidates.begin(), candidates.end(), inv->engine);
+ // pick 3 cands at random
+ for (int i=0; i<3; i++) trains.push_back(candidates[i]);
+ return trains;
+ }
+
+ for (int id : ent.info->train_id) {
+ auto info = inv->get_info(id);
+ if (info->level > player.level) continue;
+ if (info->level < player.level && info->upgrade != -1) continue;
+ trains.push_back(id);
+ }
+ /*
+ // get all train class ids, highest upgrade level
+ for (EntityInfo &info : infos) {
+ if (info.id == 0) continue; // villager only in train_id
+ if (info.level > player.level) continue;
+ if (info.level < player.level && info.upgrade != -1) continue;
+ if (std::find(cls.begin(), cls.end(), info.ent_class) != cls.end()) {
+ if (std::find(trains.begin(), trains.end(), info.id)
+ != trains.end())
+ {
+ trains.push_back(info.id);
+ }
+ }
+ }*/
+ return trains;
+}
+
+std::vector<int> Gst::get_possible_builds (Entity &ent) {
+ std::vector<int> builds;
+ for (int id : ent.info->build) {
+ if (check_req_build(ent, inv->get_info(id))) {
+ builds.push_back(id);
+ }
+ }
+ return builds;
+}
+
+
+bool Gst::check_req_build(Entity &ent, EntityInfo *info) {
+ auto &ground = inv->ground;
+ Player &player = players[ent.owner];
+ if (player.level < info->level) return false;
+ for (int id : info->adjacent) {
+ bool adj = false;
+ for (Entity &e : entities) {
+ if (e.info->id == id && ent.owner == e.owner) {
+ int dist = abs(e.x-ent.x) + abs(e.y-ent.y);
+ if (dist == 1) {
+ adj = true;
+ }
+ }
+ }
+ if (!adj) return false;
+ }
+ for (int id : info->diagonal) {
+ bool diag = false;
+ for (Entity &e : entities) {
+ if (e.info->id == id && ent.owner == e.owner) {
+ int dx = abs(e.x-ent.x), dy = abs(e.y-ent.y);
+ int dist = dx + dy;
+ if (dx == 1 && dy == 1) {
+ diag = true;
+ }
+ }
+ }
+ if (!diag) return false;
+ }
+ if (info->id == 100) {
+ for (Resource &r : ground.resources) {
+ if (r.pos == ground.at(ent.x, ent.y)) {
+ return false;
+ }
+ }
+ int mindist = 9999;
+ for (Entity &e : entities) {
+ if (e.info->id == 100 && ent.owner == e.owner) {
+ int dist = abs(e.x-ent.x) + abs(ent.y-e.y);
+ if (dist < mindist) {
+ mindist = dist;
+ }
+ }
+ }
+ if (mindist < 5) {
+ return false;
+ }
+ return true;
+ }
+ if (info->id == 101) {
+ for (Resource &r : ground.resources) {
+ if (r.kind == Resource::Type::food
+ && r.pos == ground.at(ent.x, ent.y)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ if (info->id == 102) {
+ for (Resource &r : ground.resources) {
+ if (r.kind == Resource::Type::gold
+ && r.pos == ground.at(ent.x, ent.y)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ return true;
+}
+
+
+bool Gst::check_req_tech (Tech *tech, Player &player) {
+ if (player.leveling_up == 1) return false;
+ if (tech->level > player.level) {
+ return false;
+ }
+ if (tech->cost[0] > player.res[0]
+ || tech->cost[1] > player.res[1] )
+ {
+ return false;
+ }
+ if (player.has_tech(tech->id)) {
+ return false;
+ }
+ bool req_id = false;
+ for (auto &ent : entities) {
+ if (ent.owner == turn // WARNING: turn is not player.id
+ && ent.info->id == tech->req_id
+ && ent.building == 0)
+ {
+ req_id = true;
+ break;
+ }
+ }
+ if (!req_id) {
+ return false;
+ }
+ return true;
+}
+
+bool Gst::check_req_level (Player &player) {
+ if (player.leveling_up == 1) return false;
+
+ for (float v : player.res) {
+ if (v <= (player.level+1)*500) return false;
+ }
+
+ std::map<int, int> lv_techs;
+ for (int id : player.techs) lv_techs[inv->get_tech(id)->level] ++;
+ if (player.level == 0) {
+ if (lv_techs[0] >= 3) return true;
+ }
+ if (player.level == 1) {
+ if (lv_techs[1] >= 7) return true;
+ }
+ if (player.level == 2) {
+ if (lv_techs[2] >= 11) return true;
+ }
+ return false;
+}
+
+bool Gst::check_obstructed (Entity &ent) {
+ for (Entity &e : entities) {
+ if (&ent != &e && e.x == ent.x && ent.y == e.y) return true;
+ }
+ return false;
+}
+
+void Gst::end_day () {
+ turn++;
+ if (turn >= players.size()) {
+ turn = 0;
+ day++;
+ }
+ Player &player = players[turn];
+ if (player.leveling_up != -1) {
+ level_upgrade(player);
+ player.level ++;
+ player.leveling_up = -1;
+ }
+ for (Entity &e : entities) {
+ e.done = false;
+ e.moved = 0;
+ if (get_player(e.owner) == player) {
+ for (int i=0; i<player.res.size(); i++) {
+ player.res[i] += e.info->prod[i] *
+ (1+player.tech_lookup.id(e.info->id).prod[i]);
+ }
+ if (e.building < 0) {
+ e.building++;
+ if (e.building == 0) {
+ e.hp = clamp_hp(e.hp + 50);
+ }
+ }
+ if (e.info->unit == 1 && check_obstructed(e)) {
+ e.hp = clamp_hp(e.hp + 20);
+ }
+ }
+ }
+ if (player.researching != -1) {
+ player.techs.push_back(player.researching);
+ update_tech_lookup(player);
+ player.researching = -1;
+ }
+}
+
+void Gst::level_upgrade (Player &player) {
+ for (Entity &e : entities) {
+ if (get_player(e.owner) == player) {
+ if (e.info->upgrade != -1 && e.info->level == player.level) {
+ e.info = inv->get_info(e.info->upgrade);
+ }
+ }
+ }
+}
+
+
+void Gst::update_tech_lookup (Player &player) {
+ player.tech_lookup.map_id.clear();
+ for (int i : player.techs) {
+ Tech *tech = inv->get_tech(i);
+ std::vector<int> ids { };
+ bool noaff = true;
+ if (tech->bonus.aff_id.size() > 0) {
+ ids = tech->bonus.aff_id;
+ noaff = false;
+ } else {
+ if (tech->bonus.aff_level != -1) {
+ for (EntityInfo info : inv->infos) {
+ if (info.level == tech->bonus.aff_level) {
+ ids.push_back(info.id);
+ }
+ }
+ noaff = false;
+ }
+ if (tech->bonus.aff_class.size() > 0) {
+ for (EntityInfo info : inv->infos) {
+ auto &cls = tech->bonus.aff_class;
+ if (std::find(cls.begin(), cls.end(),
+ info.ent_class) != cls.end())
+ {
+ ids.push_back(info.id);
+ }
+ }
+ noaff = false;
+ }
+ }
+ if (noaff) { for (auto info : inv->infos) ids.push_back(info.id); }
+ for (int id : ids) {
+ player.tech_lookup.map_id[id] =
+ player.tech_lookup.map_id[id] + tech->bonus;
+ }
+ }
} \ No newline at end of file
diff --git a/game/gst.h b/game/gst.h
index 376026e..8ade237 100644
--- a/game/gst.h
+++ b/game/gst.h
@@ -1,125 +1,125 @@
-#ifndef GST_H
-#define GST_H
-
-#include <iostream>
-#include <algorithm>
-#include <string>
-#include <vector>
-#include <functional>
-
-#include <random> // just for picking market trains
-
-#include "ground.h"
-#include "entity.h"
-#include "tile.h"
-#include "player.h"
-#include "tech.h"
-
-class Ability {
- public:
- Ability(std::string name) : name(name) {}
- std::string name;
-};
-
-class Bonus {
- public:
- Bonus(float amt, int id, bool atk) : amt(amt), id(id), atk(atk) {}
- float amt; int id; bool atk;
- enum Id { ground, type, ability, tech, veteran, on_bld, adjacency };
- std::string id_string () {
- switch (id) {
- case ground: return "Ground";
- case type: return "Class";
- case ability: return "Ability";
- case tech: return "Tech";
- case veteran: return "Veteran";
- case on_bld: return "On Building";
- case adjacency: return "Adjacency";
- }
- }
-};
-
-class BattleResult {
- public:
- BattleResult(float atk_hp, float def_hp)
- : atk_hp(atk_hp), def_hp(def_hp) {}
- float atk_hp, def_hp;
-};
-
-class Inv {
- public:
- Inv () {}
-
- std::vector<Tech> techs;
- std::vector<Ability> abilities;
- std::vector<EntityInfo> infos;
- std::vector<Tile> tiles;
- Ground ground;
-
- Tech* get_tech (int id);
- EntityInfo* get_info (std::string name);
- EntityInfo* get_info (int id);
- bool info_has_ability (EntityInfo* info, std::string name);
-
- std::default_random_engine engine = std::default_random_engine{};
-};
-
-class Gst {
- public:
- Gst(Inv *inv) : inv(inv) { }
-
- // copy constructor
- Gst (const Gst& rhs) {
- inv = rhs.inv; entities = rhs.entities; players = rhs.players;
- turn = rhs.turn; day = rhs.day;
- }
- Gst& operator=(const Gst& rhs) {
- inv = rhs.inv; entities = rhs.entities; players = rhs.players;
- turn = rhs.turn; day = rhs.day;
- };
-
- Inv *inv;
-
- std::vector<Entity> entities;
- std::vector<Player> players;
- int turn { 0 };
- int day { 0 };
-
- Player& get_player (int id);
-
- Entity& get_at (int x, int y);
- std::vector<float> get_cost (EntityInfo *info, Player &player);
- float get_trade_rate (Player &player);
-
- int get_vet_level (Entity &ent);
- float get_type_bonus (Entity &atk, Entity &def);
- std::vector<Bonus> get_bonuses (Entity &atk, Entity &def);
- float get_damage (Entity &atk, Entity &def);
- float get_damage (Entity &atk, Entity &def, float atk_hp);
- bool get_first_strike (Entity &atk, Entity &def);
- BattleResult battle_res (Entity &atk, Entity &def);
- void clear_dead();
- int get_range(Entity &ent);
-
- void battle (Entity &atk, Entity &def);
-
- void heal (Entity &atk, Entity &def);
- void convert (Entity &atk, Entity &def);
-
- int get_nearest_enemy (Entity &ent, int &mindist);
-
- std::vector<int> get_possible_trains (Entity &ent);
- std::vector<int> get_possible_builds (Entity &ent);
-
- bool check_req_build (Entity &ent, EntityInfo *info);
- bool check_req_tech (Tech *tech, Player &player);
- bool check_req_level (Player &player);
- bool check_obstructed (Entity &ent);
-
- void end_day ();
- void level_upgrade (Player &player);
-
- void update_tech_lookup (Player &player);
-};
-
+#ifndef GST_H
+#define GST_H
+
+#include <iostream>
+#include <algorithm>
+#include <string>
+#include <vector>
+#include <functional>
+
+#include <random> // just for picking market trains
+
+#include "ground.h"
+#include "entity.h"
+#include "tile.h"
+#include "player.h"
+#include "tech.h"
+
+class Ability {
+ public:
+ Ability(std::string name) : name(name) {}
+ std::string name;
+};
+
+class Bonus {
+ public:
+ Bonus(float amt, int id, bool atk) : amt(amt), id(id), atk(atk) {}
+ float amt; int id; bool atk;
+ enum Id { ground, type, ability, tech, veteran, on_bld, adjacency };
+ std::string id_string () {
+ switch (id) {
+ case ground: return "Ground";
+ case type: return "Class";
+ case ability: return "Ability";
+ case tech: return "Tech";
+ case veteran: return "Veteran";
+ case on_bld: return "On Building";
+ case adjacency: return "Adjacency";
+ }
+ }
+};
+
+class BattleResult {
+ public:
+ BattleResult(float atk_hp, float def_hp)
+ : atk_hp(atk_hp), def_hp(def_hp) {}
+ float atk_hp, def_hp;
+};
+
+class Inv {
+ public:
+ Inv () {}
+
+ std::vector<Tech> techs;
+ std::vector<Ability> abilities;
+ std::vector<EntityInfo> infos;
+ std::vector<Tile> tiles;
+ Ground ground;
+
+ Tech* get_tech (int id);
+ EntityInfo* get_info (std::string name);
+ EntityInfo* get_info (int id);
+ bool info_has_ability (EntityInfo* info, std::string name);
+
+ std::default_random_engine engine = std::default_random_engine{};
+};
+
+class Gst {
+ public:
+ Gst(Inv *inv) : inv(inv) { }
+
+ // copy constructor
+ Gst (const Gst& rhs) {
+ inv = rhs.inv; entities = rhs.entities; players = rhs.players;
+ turn = rhs.turn; day = rhs.day;
+ }
+ Gst& operator=(const Gst& rhs) {
+ inv = rhs.inv; entities = rhs.entities; players = rhs.players;
+ turn = rhs.turn; day = rhs.day;
+ };
+
+ Inv *inv;
+
+ std::vector<Entity> entities;
+ std::vector<Player> players;
+ int turn { 0 };
+ int day { 0 };
+
+ Player& get_player (int id);
+
+ Entity& get_at (int x, int y);
+ std::vector<float> get_cost (EntityInfo *info, Player &player);
+ float get_trade_rate (Player &player);
+
+ int get_vet_level (Entity &ent);
+ float get_type_bonus (Entity &atk, Entity &def);
+ std::vector<Bonus> get_bonuses (Entity &atk, Entity &def);
+ float get_damage (Entity &atk, Entity &def);
+ float get_damage (Entity &atk, Entity &def, float atk_hp);
+ bool get_first_strike (Entity &atk, Entity &def);
+ BattleResult battle_res (Entity &atk, Entity &def);
+ void clear_dead();
+ int get_range(Entity &ent);
+
+ void battle (Entity &atk, Entity &def);
+
+ void heal (Entity &atk, Entity &def);
+ void convert (Entity &atk, Entity &def);
+
+ int get_nearest_enemy (Entity &ent, int &mindist);
+
+ std::vector<int> get_possible_trains (Entity &ent);
+ std::vector<int> get_possible_builds (Entity &ent);
+
+ bool check_req_build (Entity &ent, EntityInfo *info);
+ bool check_req_tech (Tech *tech, Player &player);
+ bool check_req_level (Player &player);
+ bool check_obstructed (Entity &ent);
+
+ void end_day ();
+ void level_upgrade (Player &player);
+
+ void update_tech_lookup (Player &player);
+};
+
#endif \ No newline at end of file
diff --git a/game/load.cpp b/game/load.cpp
index ea4e9e7..f9b0135 100644
--- a/game/load.cpp
+++ b/game/load.cpp
@@ -1,150 +1,150 @@
-#include <iostream>
-#include <fstream>
-#include <vector>
-
-#include "load.h"
-
-#include "nlohmann/json.hpp"
-using json = nlohmann::json;
-
-std::vector<Ability> load_abilities () {
- std::vector<Ability> abs;
- abs.emplace_back("Anti-Cavalry");
- abs.emplace_back("Skirmish");
- abs.emplace_back("First Strike");
- abs.emplace_back("Rapid Fire");
- abs.emplace_back("Units Only");
- abs.emplace_back("Buildings Only");
- abs.emplace_back("No Counter");
- abs.emplace_back("No Move & Attack");
- abs.emplace_back("Causes Fear");
- abs.emplace_back("Desert Charge");
- abs.emplace_back("Plains Charge");
- abs.emplace_back("Scares Horses");
- abs.emplace_back("Woodsman");
- abs.emplace_back("Volley");
- abs.emplace_back("Frenzy");
- abs.emplace_back("Zeal");
- abs.emplace_back("Scout");
- abs.emplace_back("Convert");
- abs.emplace_back("Heal");
- abs.emplace_back("Seasoned Veteran");
- return abs;
-}
-
-void load_json (Inv &inv) {
- inv.abilities = load_abilities();
-
- std::ifstream file_tiles("content/tiles.json");
- json j_tiles; file_tiles >> j_tiles;
- for (auto it : j_tiles) {
- Tile tile;
- tile.name = it["name"];
- tile.move_cost = it["move_cost"];
- tile.defence_bonus = it["defence_bonus"];
- tile.range_bonus = it["range_bonus"];
- tile.spritebounds = vec2 { it["spritebounds"][0], it["spritebounds"][1] };
- inv.tiles.push_back(tile);
- }
-
- std::ifstream file_ents("content/entities.json");
- json j_ents; file_ents >> j_ents;
- for (auto it : j_ents) {
- EntityInfo ent;
- ent.id = it["id"];
- ent.name = it["name"];
- ent.level = it["level"];
- ent.range = it["range"];
- ent.move = it["move"];
- ent.attack = it["attack"];
- ent.defence = it["defence"];
- ent.sight = it["sight"];
- ent.unit = it["unit"];
- for (int i=0; i<it["prod"].size(); i++) {
- ent.prod[i] = it["prod"][i];
- }
- for (int i=0; i<it["cost"].size(); i++) {
- ent.cost[i] = it["cost"][i];
- }
- for (auto blds : it["build"]) {
- ent.build.push_back(blds);
- }
- for (auto train : it["train_id"]) {
- ent.train_id.push_back(train);
- }
- for (auto train : it["train_class"]) {
- ent.train_class.push_back((EntityInfo::Class)
- EntityClass::from_string(train.get<std::string>()));
- }
- for (auto ad : it["adjacent"]) {
- ent.adjacent.push_back(ad);
- }
- for (auto ad : it["diagonal"]) {
- ent.diagonal.push_back(ad);
- }
- ent.ent_class = (EntityInfo::Class) EntityClass::from_string(
- it["class"].get<std::string>());
- for (auto ab : it["abilities"]) {
- int index = 0;
- for (int i=0; i<inv.abilities.size(); i++) {
- if (inv.abilities[i].name == ab) { index = i; break; }
- }
- ent.abilities.push_back(index);
- }
- ent.spritebounds = vec2 { it["spritebounds"][0], it["spritebounds"][1] };
- if (it.contains("upgrade")) { ent.upgrade = it["upgrade"]; }
- if (it.contains("defence_bonus")) {
- ent.defence_bonus = it["defence_bonus"];
- }
- inv.infos.push_back(ent);
- }
-
- std::ifstream file_techs("content/techs.json");
- json j_techs; file_techs >> j_techs;
- for (auto it : j_techs) {
- Tech tech;
- tech.name = it["name"];
- tech.id = it["id"];
- tech.level = it["level"];
- tech.req_id = it["req_id"];
- for (int i=0; i<it["cost"].size(); i++) {
- tech.cost[i] = it["cost"][i];
- }
- auto b = it["bonus"];
- if (b != nullptr) {
- if (b.contains("attack")) { tech.bonus.attack = b["attack"]; }
- if (b.contains("defence")) { tech.bonus.defence = b["defence"]; }
- if (b.contains("sight")) { tech.bonus.sight = b["sight"]; }
- if (b.contains("move")) { tech.bonus.move = b["move"]; }
- if (b.contains("trade")) { tech.bonus.trade = b["trade"]; }
- if (b.contains("req_range")) {
- tech.bonus.req_range = b["req_range"];
- }
- if (b.contains("improved_heal")) {
- tech.bonus.improved_heal = b["improved_heal"];
- }
- if (b.contains("improved_convert")) {
- tech.bonus.improved_convert = b["improved_convert"];
- }
- if (b.contains("cost")) tech.bonus.cost.clear();
- for (auto v : b["cost"]) { tech.bonus.cost.push_back(v); }
- if (b.contains("cost_abs")) tech.bonus.cost_abs.clear();
- for (auto v : b["cost_abs"]) { tech.bonus.cost_abs.push_back(v); }
- if (b.contains("prod")) tech.bonus.prod.clear();
- for (auto v : b["prod"]) { tech.bonus.prod.push_back(v); }
-
- for (auto v : b["aff_id"]) { tech.bonus.aff_id.push_back(v); }
- for (auto v : b["aff_class"]) {
- tech.bonus.aff_class.push_back(EntityClass::from_string(
- v.get<std::string>()));
- }
- if (b.contains("aff_level")) {
- tech.bonus.aff_level = b["aff_level"];
- }
- if (b.contains("aff_all")) {
- tech.bonus.aff_all = b["aff_all"];
- }
- }
- inv.techs.push_back(tech);
- }
+#include <iostream>
+#include <fstream>
+#include <vector>
+
+#include "load.h"
+
+#include "nlohmann/json.hpp"
+using json = nlohmann::json;
+
+std::vector<Ability> load_abilities () {
+ std::vector<Ability> abs;
+ abs.emplace_back("Anti-Cavalry");
+ abs.emplace_back("Skirmish");
+ abs.emplace_back("First Strike");
+ abs.emplace_back("Rapid Fire");
+ abs.emplace_back("Units Only");
+ abs.emplace_back("Buildings Only");
+ abs.emplace_back("No Counter");
+ abs.emplace_back("No Move & Attack");
+ abs.emplace_back("Causes Fear");
+ abs.emplace_back("Desert Charge");
+ abs.emplace_back("Plains Charge");
+ abs.emplace_back("Scares Horses");
+ abs.emplace_back("Woodsman");
+ abs.emplace_back("Volley");
+ abs.emplace_back("Frenzy");
+ abs.emplace_back("Zeal");
+ abs.emplace_back("Scout");
+ abs.emplace_back("Convert");
+ abs.emplace_back("Heal");
+ abs.emplace_back("Seasoned Veteran");
+ return abs;
+}
+
+void load_json (Inv &inv) {
+ inv.abilities = load_abilities();
+
+ std::ifstream file_tiles("content/tiles.json");
+ json j_tiles; file_tiles >> j_tiles;
+ for (auto it : j_tiles) {
+ Tile tile;
+ tile.name = it["name"];
+ tile.move_cost = it["move_cost"];
+ tile.defence_bonus = it["defence_bonus"];
+ tile.range_bonus = it["range_bonus"];
+ tile.spritebounds = vec2 { it["spritebounds"][0], it["spritebounds"][1] };
+ inv.tiles.push_back(tile);
+ }
+
+ std::ifstream file_ents("content/entities.json");
+ json j_ents; file_ents >> j_ents;
+ for (auto it : j_ents) {
+ EntityInfo ent;
+ ent.id = it["id"];
+ ent.name = it["name"];
+ ent.level = it["level"];
+ ent.range = it["range"];
+ ent.move = it["move"];
+ ent.attack = it["attack"];
+ ent.defence = it["defence"];
+ ent.sight = it["sight"];
+ ent.unit = it["unit"];
+ for (int i=0; i<it["prod"].size(); i++) {
+ ent.prod[i] = it["prod"][i];
+ }
+ for (int i=0; i<it["cost"].size(); i++) {
+ ent.cost[i] = it["cost"][i];
+ }
+ for (auto blds : it["build"]) {
+ ent.build.push_back(blds);
+ }
+ for (auto train : it["train_id"]) {
+ ent.train_id.push_back(train);
+ }
+ for (auto train : it["train_class"]) {
+ ent.train_class.push_back((EntityInfo::Class)
+ EntityClass::from_string(train.get<std::string>()));
+ }
+ for (auto ad : it["adjacent"]) {
+ ent.adjacent.push_back(ad);
+ }
+ for (auto ad : it["diagonal"]) {
+ ent.diagonal.push_back(ad);
+ }
+ ent.ent_class = (EntityInfo::Class) EntityClass::from_string(
+ it["class"].get<std::string>());
+ for (auto ab : it["abilities"]) {
+ int index = 0;
+ for (int i=0; i<inv.abilities.size(); i++) {
+ if (inv.abilities[i].name == ab) { index = i; break; }
+ }
+ ent.abilities.push_back(index);
+ }
+ ent.spritebounds = vec2 { it["spritebounds"][0], it["spritebounds"][1] };
+ if (it.contains("upgrade")) { ent.upgrade = it["upgrade"]; }
+ if (it.contains("defence_bonus")) {
+ ent.defence_bonus = it["defence_bonus"];
+ }
+ inv.infos.push_back(ent);
+ }
+
+ std::ifstream file_techs("content/techs.json");
+ json j_techs; file_techs >> j_techs;
+ for (auto it : j_techs) {
+ Tech tech;
+ tech.name = it["name"];
+ tech.id = it["id"];
+ tech.level = it["level"];
+ tech.req_id = it["req_id"];
+ for (int i=0; i<it["cost"].size(); i++) {
+ tech.cost[i] = it["cost"][i];
+ }
+ auto b = it["bonus"];
+ if (b != nullptr) {
+ if (b.contains("attack")) { tech.bonus.attack = b["attack"]; }
+ if (b.contains("defence")) { tech.bonus.defence = b["defence"]; }
+ if (b.contains("sight")) { tech.bonus.sight = b["sight"]; }
+ if (b.contains("move")) { tech.bonus.move = b["move"]; }
+ if (b.contains("trade")) { tech.bonus.trade = b["trade"]; }
+ if (b.contains("req_range")) {
+ tech.bonus.req_range = b["req_range"];
+ }
+ if (b.contains("improved_heal")) {
+ tech.bonus.improved_heal = b["improved_heal"];
+ }
+ if (b.contains("improved_convert")) {
+ tech.bonus.improved_convert = b["improved_convert"];
+ }
+ if (b.contains("cost")) tech.bonus.cost.clear();
+ for (auto v : b["cost"]) { tech.bonus.cost.push_back(v); }
+ if (b.contains("cost_abs")) tech.bonus.cost_abs.clear();
+ for (auto v : b["cost_abs"]) { tech.bonus.cost_abs.push_back(v); }
+ if (b.contains("prod")) tech.bonus.prod.clear();
+ for (auto v : b["prod"]) { tech.bonus.prod.push_back(v); }
+
+ for (auto v : b["aff_id"]) { tech.bonus.aff_id.push_back(v); }
+ for (auto v : b["aff_class"]) {
+ tech.bonus.aff_class.push_back(EntityClass::from_string(
+ v.get<std::string>()));
+ }
+ if (b.contains("aff_level")) {
+ tech.bonus.aff_level = b["aff_level"];
+ }
+ if (b.contains("aff_all")) {
+ tech.bonus.aff_all = b["aff_all"];
+ }
+ }
+ inv.techs.push_back(tech);
+ }
} \ No newline at end of file
diff --git a/game/load.h b/game/load.h
index d9da659..7dce21e 100644
--- a/game/load.h
+++ b/game/load.h
@@ -1,8 +1,8 @@
-#ifndef LOAD_H
-#define LOAD_H
-
-#include "gst.h"
-
-void load_json (Inv &inv);
-
+#ifndef LOAD_H
+#define LOAD_H
+
+#include "gst.h"
+
+void load_json (Inv &inv);
+
#endif \ No newline at end of file
diff --git a/game/menu.cpp b/game/menu.cpp
index b5a91b9..6349f29 100644
--- a/game/menu.cpp
+++ b/game/menu.cpp
@@ -1,77 +1,77 @@
-#include <iostream>
-
-#include "menu.h"
-
-void Menu::close () {
- active = false;
-}
-
-void Menu::open (vec2 res) {
- over = -1;
- active = true;
- pos = vec2 { (float)res.x, (float)res.y };
- float height = options.size() * 20;
- size = vec2 { 150, height+10 };
- pos *= 0.5f;
- pos -= size/2;
-}
-
-int Menu::mouse_option (vec2 mouse) {
- int i=0;
- for (Option opt : options) {
- vec2 off { 0, 5.0f + i*20 };
- vec2 sizeopt { 150, 20 };
- off += pos;
- if (off.x < mouse.x && mouse.x < off.x+sizeopt.x
- && off.y < mouse.y && mouse.y < off.y+sizeopt.y ) {
- return opt.id;
- }
- i++;
- }
- return -1;
-}
-
-
-void Menu_tech::open (vec2 res) {
- over = -1;
- active = true;
- pos = vec2 { (float)res.x, (float)res.y };
-
- tech_opt_ordered.clear();
- tech_opt_ordered.emplace_back();
- tech_opt_ordered.emplace_back();
- tech_opt_ordered.emplace_back();
- tech_opt_ordered.emplace_back();
-
- for (OptionTech opt : tech_options) {
- tech_opt_ordered[opt.tech->level].emplace_back(opt);
- }
- int maxsize = 0;
- for (auto v : tech_opt_ordered) {
- maxsize = maxsize < v.size() ? v.size() : maxsize;
- }
-
- float width = 150 * tech_opt_ordered.size();
- float height = maxsize * 10;
- size = vec2 { width, height+20 };
- pos *= 0.5f;
- pos -= size/2;
-}
-
-int Menu_tech::mouse_option (vec2 mouse) {
- float x = 0, y = 0;
- for (auto v : tech_opt_ordered) {
- for (auto opt : v) {
- vec2 off { x*150, 10.0f + y*10 };
- vec2 sizeopt { 150, 10 };
- off += pos;
- if (off.x < mouse.x && mouse.x < off.x+sizeopt.x
- && off.y < mouse.y && mouse.y < off.y+sizeopt.y ) {
- return opt.tech->id;
- }
- y++;
- }
- x++; y=0;
- }
- return -1;
+#include <iostream>
+
+#include "menu.h"
+
+void Menu::close () {
+ active = false;
+}
+
+void Menu::open (vec2 res) {
+ over = -1;
+ active = true;
+ pos = vec2 { (float)res.x, (float)res.y };
+ float height = options.size() * 20;
+ size = vec2 { 150, height+10 };
+ pos *= 0.5f;
+ pos -= size/2;
+}
+
+int Menu::mouse_option (vec2 mouse) {
+ int i=0;
+ for (Option opt : options) {
+ vec2 off { 0, 5.0f + i*20 };
+ vec2 sizeopt { 150, 20 };
+ off += pos;
+ if (off.x < mouse.x && mouse.x < off.x+sizeopt.x
+ && off.y < mouse.y && mouse.y < off.y+sizeopt.y ) {
+ return opt.id;
+ }
+ i++;
+ }
+ return -1;
+}
+
+
+void Menu_tech::open (vec2 res) {
+ over = -1;
+ active = true;
+ pos = vec2 { (float)res.x, (float)res.y };
+
+ tech_opt_ordered.clear();
+ tech_opt_ordered.emplace_back();
+ tech_opt_ordered.emplace_back();
+ tech_opt_ordered.emplace_back();
+ tech_opt_ordered.emplace_back();
+
+ for (OptionTech opt : tech_options) {
+ tech_opt_ordered[opt.tech->level].emplace_back(opt);
+ }
+ int maxsize = 0;
+ for (auto v : tech_opt_ordered) {
+ maxsize = maxsize < v.size() ? v.size() : maxsize;
+ }
+
+ float width = 150 * tech_opt_ordered.size();
+ float height = maxsize * 10;
+ size = vec2 { width, height+20 };
+ pos *= 0.5f;
+ pos -= size/2;
+}
+
+int Menu_tech::mouse_option (vec2 mouse) {
+ float x = 0, y = 0;
+ for (auto v : tech_opt_ordered) {
+ for (auto opt : v) {
+ vec2 off { x*150, 10.0f + y*10 };
+ vec2 sizeopt { 150, 10 };
+ off += pos;
+ if (off.x < mouse.x && mouse.x < off.x+sizeopt.x
+ && off.y < mouse.y && mouse.y < off.y+sizeopt.y ) {
+ return opt.tech->id;
+ }
+ y++;
+ }
+ x++; y=0;
+ }
+ return -1;
} \ No newline at end of file
diff --git a/game/menu.h b/game/menu.h
index 41348a7..471bfd7 100644
--- a/game/menu.h
+++ b/game/menu.h
@@ -1,90 +1,90 @@
-#ifndef MENU_H
-#define MENU_H
-
-#include <vector>
-#include <string>
-
-#include "../umath/vec2.h"
-#include "tech.h"
-
-class Option {
- public:
- Option(std::string name, int id) : name(name), id(id) {}
-
- std::string name;
- int id;
-
- std::vector<float> cost;
-};
-
-
-class Menu {
- public:
- bool active { false };
- std::vector<Option> options;
- vec2 pos, size;
- int over;
-
- void close ();
- virtual void open (vec2 res);
- virtual int mouse_option (vec2 mouse);
-};
-
-class Menu_unit : public Menu {
- public:
- Menu_unit () {}
-
- enum Opts {
- move, attack, done, build, train, trade, age_up, heal, convert
- };
-};
-
-class Menu_day : public Menu {
- public:
- Menu_day () {}
-
- enum Opts {
- end_day, tech, empire_review, scoring
- };
-};
-
-class Menu_build : public Menu {
- public:
- Menu_build () {}
-};
-class Menu_train : public Menu {
- public:
- Menu_train () {}
-};
-class Menu_trade : public Menu {
- public:
- Menu_trade () {}
-
- enum Opts {
- food, gold
- };
-};
-class Menu_age_up : public Menu {
- public:
- Menu_age_up () {}
-};
-
-class OptionTech {
- public:
- OptionTech(std::string name, Tech *tech) : name(name), tech(tech) {}
-
- std::string name;
- Tech *tech;
-};
-
-class Menu_tech : public Menu {
- public:
- Menu_tech () {}
- std::vector<OptionTech> tech_options;
- std::vector<std::vector<OptionTech>> tech_opt_ordered;
-
- void open (vec2 res) override;
- int mouse_option (vec2 mouse) override;
-};
-
+#ifndef MENU_H
+#define MENU_H
+
+#include <vector>
+#include <string>
+
+#include "../umath/vec2.h"
+#include "tech.h"
+
+class Option {
+ public:
+ Option(std::string name, int id) : name(name), id(id) {}
+
+ std::string name;
+ int id;
+
+ std::vector<float> cost;
+};
+
+
+class Menu {
+ public:
+ bool active { false };
+ std::vector<Option> options;
+ vec2 pos, size;
+ int over;
+
+ void close ();
+ virtual void open (vec2 res);
+ virtual int mouse_option (vec2 mouse);
+};
+
+class Menu_unit : public Menu {
+ public:
+ Menu_unit () {}
+
+ enum Opts {
+ move, attack, done, build, train, trade, age_up, heal, convert
+ };
+};
+
+class Menu_day : public Menu {
+ public:
+ Menu_day () {}
+
+ enum Opts {
+ end_day, tech, empire_review, scoring
+ };
+};
+
+class Menu_build : public Menu {
+ public:
+ Menu_build () {}
+};
+class Menu_train : public Menu {
+ public:
+ Menu_train () {}
+};
+class Menu_trade : public Menu {
+ public:
+ Menu_trade () {}
+
+ enum Opts {
+ food, gold
+ };
+};
+class Menu_age_up : public Menu {
+ public:
+ Menu_age_up () {}
+};
+
+class OptionTech {
+ public:
+ OptionTech(std::string name, Tech *tech) : name(name), tech(tech) {}
+
+ std::string name;
+ Tech *tech;
+};
+
+class Menu_tech : public Menu {
+ public:
+ Menu_tech () {}
+ std::vector<OptionTech> tech_options;
+ std::vector<std::vector<OptionTech>> tech_opt_ordered;
+
+ void open (vec2 res) override;
+ int mouse_option (vec2 mouse) override;
+};
+
#endif \ No newline at end of file
diff --git a/game/player.h b/game/player.h
index cf4146f..c29ea7e 100644
--- a/game/player.h
+++ b/game/player.h
@@ -1,46 +1,46 @@
-#ifndef PLAYER_H
-#define PLAYER_H
-
-#include <vector>
-
-#include "tech.h"
-
-
-class Player {
- public:
- Player (int r, int g, int b, int id) : r(r), g(g), b(b), id(id) { }
-
- void pay (std::vector<float> cost) {
- for (int i=0; i<res.size(); i++) {
- res[i] -= cost[i];
- }
- }
- void gain (std::vector<float> gain) {
- for (int i=0; i<res.size(); i++) {
- res[i] += gain[i];
- }
- }
-
- bool has_tech (int id) {
- if (std::find(techs.begin(), techs.end(), id) != techs.end())
- return true;
- return false;
- }
-
- bool operator== (Player &oth) { return id == oth.id; }
-
- int id;
-
- std::vector<float> res { 0, 0 };
- std::vector<int> techs;
-
- TechLookup tech_lookup;
-
- int researching { -1 };
- int leveling_up { -1 };
- int level { 0 };
-
- int r, g, b;
-};
-
+#ifndef PLAYER_H
+#define PLAYER_H
+
+#include <vector>
+
+#include "tech.h"
+
+
+class Player {
+ public:
+ Player (int r, int g, int b, int id) : r(r), g(g), b(b), id(id) { }
+
+ void pay (std::vector<float> cost) {
+ for (int i=0; i<res.size(); i++) {
+ res[i] -= cost[i];
+ }
+ }
+ void gain (std::vector<float> gain) {
+ for (int i=0; i<res.size(); i++) {
+ res[i] += gain[i];
+ }
+ }
+
+ bool has_tech (int id) {
+ if (std::find(techs.begin(), techs.end(), id) != techs.end())
+ return true;
+ return false;
+ }
+
+ bool operator== (Player &oth) { return id == oth.id; }
+
+ int id;
+
+ std::vector<float> res { 0, 0 };
+ std::vector<int> techs;
+
+ TechLookup tech_lookup;
+
+ int researching { -1 };
+ int leveling_up { -1 };
+ int level { 0 };
+
+ int r, g, b;
+};
+
#endif \ No newline at end of file
diff --git a/game/playercontrol.cpp b/game/playercontrol.cpp
index 3fe178a..dad5b2a 100644
--- a/game/playercontrol.cpp
+++ b/game/playercontrol.cpp
@@ -1,449 +1,449 @@
-#include <iostream>
-#include <string>
-
-#include "playercontrol.h"
-#include "entity.h"
-
-void open_unit_menu (Gst &gst, View &view, Fsm &fsm, int p) {
- Entity &ent = gst.entities[view.selected_entity];
- Player &player = gst.players[ent.owner];
- view.menu_unit.options.clear();
- if (ent.info->unit == 1) {
- if (gst.inv->ground.move_area(gst, ent).size() > 0
- && ent.moved == 0)
- {
- view.menu_unit.options.emplace_back("Move",
- Menu_unit::Opts::move);
- }
- if (gst.inv->ground.attack_targets(gst, ent).size() > 0
- && (!gst.inv->info_has_ability(ent.info, "No Move & Attack")
- || ent.moved == 0)) {
- view.menu_unit.options.emplace_back("Attack",
- Menu_unit::Opts::attack);
- }
- if (ent.info->build.size() > 0
- && !gst.check_obstructed(ent)
- && gst.get_possible_builds(ent).size() > 0)
- {
- view.menu_unit.options.emplace_back("Build",
- Menu_unit::Opts::build);
- }
- if (gst.inv->ground.heal_targets(gst, ent).size() > 0
- && (gst.inv->info_has_ability(ent.info, "Heal")))
- {
- view.menu_unit.options.emplace_back("Heal",
- Menu_unit::Opts::heal);
- }
- if (gst.inv->ground.convert_targets(gst, ent).size() > 0
- && (gst.inv->info_has_ability(ent.info, "Convert")))
- {
- view.menu_unit.options.emplace_back("Convert",
- Menu_unit::Opts::convert);
- }
- view.menu_unit.options.emplace_back("Done",
- Menu_unit::Opts::done);
- } else {
- if (gst.get_possible_trains(ent).size()
- && !gst.check_obstructed(ent))
- {
- view.menu_unit.options.emplace_back("Train",
- Menu_unit::Opts::train);
- }
- if (ent.info->id == 100
- || ent.info->id == 101) {
- int rate = (int)gst.get_trade_rate(player);
- if (player.res[0] >= rate || player.res[1] >= rate) {
- view.menu_unit.options.emplace_back("Trade",
- Menu_unit::Opts::trade);
- }
- }
- if (ent.info->id == 100) {
- view.menu_unit.options.emplace_back("Age Up",
- Menu_unit::Opts::age_up);
- }
- }
- view.menu_unit.open(view.res);
-}
-
-Player_control::Player_control () {
- fsm.arcs.emplace_back(
- select, sel_ground, -1,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- view.selected_ground = p;
- std::cout << "selected ground " << p << "\n";
- view.menu_day.options.clear();
- view.menu_day.options.emplace_back("End Day",
- Menu_day::Opts::end_day);
- view.menu_day.options.emplace_back("Research",
- Menu_day::Opts::tech);
- view.menu_day.options.emplace_back("Empire Review",
- Menu_day::Opts::empire_review);
- view.menu_day.options.emplace_back("Scoring",
- Menu_day::Opts::scoring);
- view.menu_day.open(view.res);
- return menu_day;
- }
- );
- fsm.arcs.emplace_back(
- menu_day, opt, Menu_day::Opts::end_day,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- view.menu_day.close();
- view.selected_ground = -1;
- gst.end_day();
- std::cout << "end day " << p << "\n";
- return select;
- }
- );
- fsm.arcs.emplace_back(
- menu_day, back, -1,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- view.menu_day.close();
- view.selected_ground = -1;
- return select;
- }
- );
- fsm.arcs.emplace_back(
- menu_day, opt, Menu_day::Opts::tech,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- view.menu_day.close();
- view.menu_tech.tech_options.clear();
- for (Tech &tech : gst.inv->techs) {
- view.menu_tech.tech_options.emplace_back(tech.name, &tech);
- }
- view.menu_tech.open(view.res);
- std::cout << "tech screen " << "\n";
- return menu_tech;
- }
- );
- fsm.arcs.emplace_back(
- menu_tech, opt, -1,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- if (p == -1)
- return menu_tech;
- Player &player = gst.players[gst.turn];
- Tech *tech = gst.inv->get_tech(p);
- if (!gst.check_req_tech(tech, player)) {
- return menu_tech;
- }
- if (player.researching != -1) {
- player.gain(tech->cost);
- }
- player.researching = p;
- player.pay(tech->cost);
- view.menu_tech.close();
- view.selected_ground = -1;
- std::cout << "selected tech " << p << "\n";
- return select;
- }
- );
- fsm.arcs.emplace_back(
- menu_tech, back, -1,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- view.menu_tech.close();
- view.selected_ground = -1;
- return select;
- }
- );
- fsm.arcs.emplace_back(
- select, sel_unit, -1,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- view.selected_entity = p;
- open_unit_menu(gst, view, fsm, p);
- std::cout << "selected unit " << p << "\n";
- return menu_unit;
- }
- );
- fsm.arcs.emplace_back(
- menu_unit, back, -1,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- view.selected_entity = -1;
- view.menu_unit.close();
- return select;
- }
- );
- fsm.arcs.emplace_back(
- menu_unit, opt, Menu_unit::Opts::train,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- view.menu_unit.close();
- std::cout << "train " << p << "\n";
- Entity &ent = gst.entities[view.selected_entity];
- Player &player = gst.players[ent.owner];
- view.menu_train.options.clear();
- auto trains = gst.get_possible_trains(ent);
- for (int id : trains) {
- EntityInfo *info = gst.inv->get_info(id);
- Option opt { info->name, id };
- opt.cost = gst.get_cost(info, player);
- if (ent.info->id == 107) { // market
- // tech.id = 31 -> merc network
- opt.cost[1] += 50 - (int)player.has_tech(31)*25;
- }
- view.menu_train.options.push_back(opt);
- }
- view.menu_train.open(view.res);
- return menu_train;
- }
- );
- fsm.arcs.emplace_back(
- menu_train, opt, -1,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- std::vector<float> cost { -1, -1 };
- for (auto o : view.menu_train.options) {
- if (o.id == p) {cost = o.cost; break; }
- }
- view.menu_train.close();
- Entity &ent = gst.entities[view.selected_entity];
- ent.done = true;
- Entity entb { ent.x, ent.y, gst.inv->get_info(p), ent.owner };
- entb.building = -1;
- entb.done = true;
- entb.hp = 50;
- gst.entities.push_back(entb);
- Player &player = gst.players[gst.turn];
- player.pay(cost);
- view.selected_entity = -1;
- return select;
- }
- );
- fsm.arcs.emplace_back(
- menu_unit, opt, Menu_unit::Opts::build,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- view.menu_unit.close();
- std::cout << "build " << p << "\n";
- Entity &ent = gst.entities[view.selected_entity];
- Player &player = gst.players[ent.owner];
- view.menu_build.options.clear();
- for (int id : ent.info->build) {
- EntityInfo *info = gst.inv->get_info(id);
- if(!gst.check_req_build(ent, info)) continue;
- Option opt { info->name, id };
- opt.cost = gst.get_cost(info, player);
- view.menu_build.options.push_back(opt);
- }
- view.menu_build.open(view.res);
- return menu_build;
- }
- );
- fsm.arcs.emplace_back(
- menu_build, opt, -1,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- view.menu_build.close();
- std::cout << "building " << p << "\n";
- Entity &ent = gst.entities[view.selected_entity];
- ent.done = true;
- Entity entb { ent.x, ent.y, gst.inv->get_info(p), ent.owner };
- entb.building = -1;
- entb.done = true;
- entb.hp = 50;
- gst.entities.push_back(entb);
- Player &player = gst.players[gst.turn];
- player.pay(gst.get_cost(entb.info, player));
- view.selected_entity = -1;
- return select;
- }
- );
- fsm.arcs.emplace_back(
- menu_unit, opt, Menu_unit::Opts::move,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- view.menu_unit.close();
- std::cout << "move " << p << "\n";
- Entity &ent = gst.entities[view.selected_entity];
- view.moves = gst.inv->ground.move_area(gst, ent);
- return move;
- }
- );
- fsm.arcs.emplace_back(
- move, sel_ground, -1,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- std::cout << "moved to " << p << "\n";
- Entity &ent = gst.entities[view.selected_entity];
- view.moves.clear();
- ent.x = p % gst.inv->ground.sizex;
- ent.y = p / gst.inv->ground.sizex;
- ent.moved = 1;
- open_unit_menu(gst, view, fsm, p);
- return menu_unit;
- }
- );
- fsm.arcs.emplace_back(
- menu_unit, opt, Menu_unit::Opts::attack,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- view.menu_unit.close();
- std::cout << "attack " << p << "\n";
- Entity &ent = gst.entities[view.selected_entity];
- view.attacks = gst.inv->ground.attack_targets(gst, ent);
- return attack;
- }
- );
- fsm.arcs.emplace_back(
- attack, sel_ground, -1,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- std::cout << "attacked " << p << "\n";
- Entity &atk = gst.entities[view.selected_entity];
- int x = view.cursor_ground % gst.inv->ground.sizex;
- int y = view.cursor_ground / gst.inv->ground.sizex;
- std::cout << "selg " << x << " " << y << "\n";
- Entity &def = gst.get_at(x, y);
- atk.done = true;
- gst.battle(atk, def);
- view.attacks.clear();
- view.selected_entity = -1;
- return select;
- }
- );
- fsm.arcs.emplace_back(
- menu_unit, opt, Menu_unit::Opts::trade,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- Player &player = gst.players[gst.turn];
- view.menu_unit.close();
- view.menu_trade.options.clear();
- int rate = (int)gst.get_trade_rate(player);
- if (player.res[0] >= rate) {
- view.menu_trade.options.emplace_back(
- std::to_string(rate) + " Food for 100 Gold",
- Menu_trade::Opts::food);
- }
- if (player.res[1] >= rate) {
- view.menu_trade.options.emplace_back(
- std::to_string(rate) + " Gold for 100 Food",
- Menu_trade::Opts::gold);
- }
- view.menu_trade.open(view.res);
- std::cout << "trade open " << p << "\n";
- return menu_trade;
- }
- );
- fsm.arcs.emplace_back(
- menu_trade, opt, -1,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- Player &player = gst.players[gst.turn];
- view.menu_trade.close();
- int rate = (int)gst.get_trade_rate(player);
- int sel = p;
- player.pay(std::vector<float>
- { (float)rate*(1-sel), (float)rate*sel });
- player.gain(std::vector<float>
- { 100.0f*sel, 100.0f*(1-sel) });
- gst.entities[view.selected_entity].done = true;
- view.selected_entity = -1;
- std::cout << "done trading " << p << "\n";
- return select;
- }
- );
- fsm.arcs.emplace_back(
- menu_unit, opt, Menu_unit::Opts::age_up,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- Player &player = gst.players[gst.turn];
- view.menu_unit.close();
- view.menu_age_up.options.clear();
- if (gst.check_req_level(player)) {
- view.menu_age_up.options.emplace_back("Age Up", 0);
- }
- view.menu_age_up.open(view.res);
- std::cout << "age up open " << p << "\n";
- return menu_age_up;
- }
- );
- fsm.arcs.emplace_back(
- menu_age_up, opt, 0,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- Player &player = gst.players[gst.turn];
- player.leveling_up = 1;
- float cost = (player.level+1)*500;
- player.pay(std::vector<float>{ cost, cost });
- view.menu_age_up.close();
- gst.entities[view.selected_entity].done = true;
- view.selected_entity = -1;
- std::cout << "aged up " << p << "\n";
- return select;
- }
- );
- fsm.arcs.emplace_back(
- menu_age_up, back, -1,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- view.menu_age_up.close();
- view.selected_entity = -1;
- std::cout << "closed ageup " << p << "\n";
- return select;
- }
- );
- fsm.arcs.emplace_back(
- menu_unit, opt, Menu_unit::Opts::heal,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- Player &player = gst.players[gst.turn];
- view.menu_unit.close();
- Entity &ent = gst.entities[view.selected_entity];
- view.heals = gst.inv->ground.heal_targets(gst, ent);
- std::cout << "heal targeting " << p << "\n";
- return target_heal;
- }
- );
- fsm.arcs.emplace_back(
- target_heal, sel_ground, -1,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- std::cout << "healed " << p << "\n";
- Entity &atk = gst.entities[view.selected_entity];
- int x = view.cursor_ground % gst.inv->ground.sizex;
- int y = view.cursor_ground / gst.inv->ground.sizex;
- std::cout << "selg " << x << " " << y << "\n";
- Entity &def = gst.get_at(x, y);
- atk.done = true;
- gst.heal(atk, def);
- view.heals.clear();
- view.selected_entity = -1;
- return select;
- }
- );
- fsm.arcs.emplace_back(
- menu_unit, opt, Menu_unit::Opts::convert,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- Player &player = gst.players[gst.turn];
- view.menu_unit.close();
- Entity &ent = gst.entities[view.selected_entity];
- view.converts = gst.inv->ground.convert_targets(gst, ent);
- std::cout << "convert targeting " << p << "\n";
- return target_convert;
- }
- );
- fsm.arcs.emplace_back(
- target_convert, sel_ground, -1,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- std::cout << "converted " << p << "\n";
- Entity &atk = gst.entities[view.selected_entity];
- int x = view.cursor_ground % gst.inv->ground.sizex;
- int y = view.cursor_ground / gst.inv->ground.sizex;
- std::cout << "selg " << x << " " << y << "\n";
- Entity &def = gst.get_at(x, y);
- atk.done = true;
- gst.convert(atk, def);
- view.converts.clear();
- view.selected_entity = -1;
- return select;
- }
- );
- fsm.arcs.emplace_back(
- menu_unit, opt, Menu_unit::Opts::done,
- [](Gst &gst, View &view, Fsm &fsm, int p) {
- view.menu_unit.close();
- gst.entities[view.selected_entity].done = true;
- view.selected_entity = -1;
- std::cout << "done " << p << "\n";
- return select;
- }
- );
-}
-
-void Player_control::process (Gst &gst, View &view) {
- if (view.cursor_entity != -1) {
- fsm.transition(gst, view, fsm, sel_unit, view.cursor_entity);
- }
- if (view.cursor_ground != -1) {
- fsm.transition(gst, view, fsm, sel_ground, view.cursor_ground);
- }
- if (view.back != -1) {
- fsm.transition(gst, view, fsm, back, 0);
- }
- if (view.opt != -1) {
- fsm.transition(gst, view, fsm, opt, view.opt);
- }
+#include <iostream>
+#include <string>
+
+#include "playercontrol.h"
+#include "entity.h"
+
+void open_unit_menu (Gst &gst, View &view, Fsm &fsm, int p) {
+ Entity &ent = gst.entities[view.selected_entity];
+ Player &player = gst.players[ent.owner];
+ view.menu_unit.options.clear();
+ if (ent.info->unit == 1) {
+ if (gst.inv->ground.move_area(gst, ent).size() > 0
+ && ent.moved == 0)
+ {
+ view.menu_unit.options.emplace_back("Move",
+ Menu_unit::Opts::move);
+ }
+ if (gst.inv->ground.attack_targets(gst, ent).size() > 0
+ && (!gst.inv->info_has_ability(ent.info, "No Move & Attack")
+ || ent.moved == 0)) {
+ view.menu_unit.options.emplace_back("Attack",
+ Menu_unit::Opts::attack);
+ }
+ if (ent.info->build.size() > 0
+ && !gst.check_obstructed(ent)
+ && gst.get_possible_builds(ent).size() > 0)
+ {
+ view.menu_unit.options.emplace_back("Build",
+ Menu_unit::Opts::build);
+ }
+ if (gst.inv->ground.heal_targets(gst, ent).size() > 0
+ && (gst.inv->info_has_ability(ent.info, "Heal")))
+ {
+ view.menu_unit.options.emplace_back("Heal",
+ Menu_unit::Opts::heal);
+ }
+ if (gst.inv->ground.convert_targets(gst, ent).size() > 0
+ && (gst.inv->info_has_ability(ent.info, "Convert")))
+ {
+ view.menu_unit.options.emplace_back("Convert",
+ Menu_unit::Opts::convert);
+ }
+ view.menu_unit.options.emplace_back("Done",
+ Menu_unit::Opts::done);
+ } else {
+ if (gst.get_possible_trains(ent).size()
+ && !gst.check_obstructed(ent))
+ {
+ view.menu_unit.options.emplace_back("Train",
+ Menu_unit::Opts::train);
+ }
+ if (ent.info->id == 100
+ || ent.info->id == 101) {
+ int rate = (int)gst.get_trade_rate(player);
+ if (player.res[0] >= rate || player.res[1] >= rate) {
+ view.menu_unit.options.emplace_back("Trade",
+ Menu_unit::Opts::trade);
+ }
+ }
+ if (ent.info->id == 100) {
+ view.menu_unit.options.emplace_back("Age Up",
+ Menu_unit::Opts::age_up);
+ }
+ }
+ view.menu_unit.open(view.res);
+}
+
+Player_control::Player_control () {
+ fsm.arcs.emplace_back(
+ select, sel_ground, -1,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ view.selected_ground = p;
+ std::cout << "selected ground " << p << "\n";
+ view.menu_day.options.clear();
+ view.menu_day.options.emplace_back("End Day",
+ Menu_day::Opts::end_day);
+ view.menu_day.options.emplace_back("Research",
+ Menu_day::Opts::tech);
+ view.menu_day.options.emplace_back("Empire Review",
+ Menu_day::Opts::empire_review);
+ view.menu_day.options.emplace_back("Scoring",
+ Menu_day::Opts::scoring);
+ view.menu_day.open(view.res);
+ return menu_day;
+ }
+ );
+ fsm.arcs.emplace_back(
+ menu_day, opt, Menu_day::Opts::end_day,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ view.menu_day.close();
+ view.selected_ground = -1;
+ gst.end_day();
+ std::cout << "end day " << p << "\n";
+ return select;
+ }
+ );
+ fsm.arcs.emplace_back(
+ menu_day, back, -1,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ view.menu_day.close();
+ view.selected_ground = -1;
+ return select;
+ }
+ );
+ fsm.arcs.emplace_back(
+ menu_day, opt, Menu_day::Opts::tech,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ view.menu_day.close();
+ view.menu_tech.tech_options.clear();
+ for (Tech &tech : gst.inv->techs) {
+ view.menu_tech.tech_options.emplace_back(tech.name, &tech);
+ }
+ view.menu_tech.open(view.res);
+ std::cout << "tech screen " << "\n";
+ return menu_tech;
+ }
+ );
+ fsm.arcs.emplace_back(
+ menu_tech, opt, -1,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ if (p == -1)
+ return menu_tech;
+ Player &player = gst.players[gst.turn];
+ Tech *tech = gst.inv->get_tech(p);
+ if (!gst.check_req_tech(tech, player)) {
+ return menu_tech;
+ }
+ if (player.researching != -1) {
+ player.gain(tech->cost);
+ }
+ player.researching = p;
+ player.pay(tech->cost);
+ view.menu_tech.close();
+ view.selected_ground = -1;
+ std::cout << "selected tech " << p << "\n";
+ return select;
+ }
+ );
+ fsm.arcs.emplace_back(
+ menu_tech, back, -1,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ view.menu_tech.close();
+ view.selected_ground = -1;
+ return select;
+ }
+ );
+ fsm.arcs.emplace_back(
+ select, sel_unit, -1,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ view.selected_entity = p;
+ open_unit_menu(gst, view, fsm, p);
+ std::cout << "selected unit " << p << "\n";
+ return menu_unit;
+ }
+ );
+ fsm.arcs.emplace_back(
+ menu_unit, back, -1,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ view.selected_entity = -1;
+ view.menu_unit.close();
+ return select;
+ }
+ );
+ fsm.arcs.emplace_back(
+ menu_unit, opt, Menu_unit::Opts::train,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ view.menu_unit.close();
+ std::cout << "train " << p << "\n";
+ Entity &ent = gst.entities[view.selected_entity];
+ Player &player = gst.players[ent.owner];
+ view.menu_train.options.clear();
+ auto trains = gst.get_possible_trains(ent);
+ for (int id : trains) {
+ EntityInfo *info = gst.inv->get_info(id);
+ Option opt { info->name, id };
+ opt.cost = gst.get_cost(info, player);
+ if (ent.info->id == 107) { // market
+ // tech.id = 31 -> merc network
+ opt.cost[1] += 50 - (int)player.has_tech(31)*25;
+ }
+ view.menu_train.options.push_back(opt);
+ }
+ view.menu_train.open(view.res);
+ return menu_train;
+ }
+ );
+ fsm.arcs.emplace_back(
+ menu_train, opt, -1,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ std::vector<float> cost { -1, -1 };
+ for (auto o : view.menu_train.options) {
+ if (o.id == p) {cost = o.cost; break; }
+ }
+ view.menu_train.close();
+ Entity &ent = gst.entities[view.selected_entity];
+ ent.done = true;
+ Entity entb { ent.x, ent.y, gst.inv->get_info(p), ent.owner };
+ entb.building = -1;
+ entb.done = true;
+ entb.hp = 50;
+ gst.entities.push_back(entb);
+ Player &player = gst.players[gst.turn];
+ player.pay(cost);
+ view.selected_entity = -1;
+ return select;
+ }
+ );
+ fsm.arcs.emplace_back(
+ menu_unit, opt, Menu_unit::Opts::build,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ view.menu_unit.close();
+ std::cout << "build " << p << "\n";
+ Entity &ent = gst.entities[view.selected_entity];
+ Player &player = gst.players[ent.owner];
+ view.menu_build.options.clear();
+ for (int id : ent.info->build) {
+ EntityInfo *info = gst.inv->get_info(id);
+ if(!gst.check_req_build(ent, info)) continue;
+ Option opt { info->name, id };
+ opt.cost = gst.get_cost(info, player);
+ view.menu_build.options.push_back(opt);
+ }
+ view.menu_build.open(view.res);
+ return menu_build;
+ }
+ );
+ fsm.arcs.emplace_back(
+ menu_build, opt, -1,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ view.menu_build.close();
+ std::cout << "building " << p << "\n";
+ Entity &ent = gst.entities[view.selected_entity];
+ ent.done = true;
+ Entity entb { ent.x, ent.y, gst.inv->get_info(p), ent.owner };
+ entb.building = -1;
+ entb.done = true;
+ entb.hp = 50;
+ gst.entities.push_back(entb);
+ Player &player = gst.players[gst.turn];
+ player.pay(gst.get_cost(entb.info, player));
+ view.selected_entity = -1;
+ return select;
+ }
+ );
+ fsm.arcs.emplace_back(
+ menu_unit, opt, Menu_unit::Opts::move,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ view.menu_unit.close();
+ std::cout << "move " << p << "\n";
+ Entity &ent = gst.entities[view.selected_entity];
+ view.moves = gst.inv->ground.move_area(gst, ent);
+ return move;
+ }
+ );
+ fsm.arcs.emplace_back(
+ move, sel_ground, -1,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ std::cout << "moved to " << p << "\n";
+ Entity &ent = gst.entities[view.selected_entity];
+ view.moves.clear();
+ ent.x = p % gst.inv->ground.sizex;
+ ent.y = p / gst.inv->ground.sizex;
+ ent.moved = 1;
+ open_unit_menu(gst, view, fsm, p);
+ return menu_unit;
+ }
+ );
+ fsm.arcs.emplace_back(
+ menu_unit, opt, Menu_unit::Opts::attack,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ view.menu_unit.close();
+ std::cout << "attack " << p << "\n";
+ Entity &ent = gst.entities[view.selected_entity];
+ view.attacks = gst.inv->ground.attack_targets(gst, ent);
+ return attack;
+ }
+ );
+ fsm.arcs.emplace_back(
+ attack, sel_ground, -1,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ std::cout << "attacked " << p << "\n";
+ Entity &atk = gst.entities[view.selected_entity];
+ int x = view.cursor_ground % gst.inv->ground.sizex;
+ int y = view.cursor_ground / gst.inv->ground.sizex;
+ std::cout << "selg " << x << " " << y << "\n";
+ Entity &def = gst.get_at(x, y);
+ atk.done = true;
+ gst.battle(atk, def);
+ view.attacks.clear();
+ view.selected_entity = -1;
+ return select;
+ }
+ );
+ fsm.arcs.emplace_back(
+ menu_unit, opt, Menu_unit::Opts::trade,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ Player &player = gst.players[gst.turn];
+ view.menu_unit.close();
+ view.menu_trade.options.clear();
+ int rate = (int)gst.get_trade_rate(player);
+ if (player.res[0] >= rate) {
+ view.menu_trade.options.emplace_back(
+ std::to_string(rate) + " Food for 100 Gold",
+ Menu_trade::Opts::food);
+ }
+ if (player.res[1] >= rate) {
+ view.menu_trade.options.emplace_back(
+ std::to_string(rate) + " Gold for 100 Food",
+ Menu_trade::Opts::gold);
+ }
+ view.menu_trade.open(view.res);
+ std::cout << "trade open " << p << "\n";
+ return menu_trade;
+ }
+ );
+ fsm.arcs.emplace_back(
+ menu_trade, opt, -1,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ Player &player = gst.players[gst.turn];
+ view.menu_trade.close();
+ int rate = (int)gst.get_trade_rate(player);
+ int sel = p;
+ player.pay(std::vector<float>
+ { (float)rate*(1-sel), (float)rate*sel });
+ player.gain(std::vector<float>
+ { 100.0f*sel, 100.0f*(1-sel) });
+ gst.entities[view.selected_entity].done = true;
+ view.selected_entity = -1;
+ std::cout << "done trading " << p << "\n";
+ return select;
+ }
+ );
+ fsm.arcs.emplace_back(
+ menu_unit, opt, Menu_unit::Opts::age_up,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ Player &player = gst.players[gst.turn];
+ view.menu_unit.close();
+ view.menu_age_up.options.clear();
+ if (gst.check_req_level(player)) {
+ view.menu_age_up.options.emplace_back("Age Up", 0);
+ }
+ view.menu_age_up.open(view.res);
+ std::cout << "age up open " << p << "\n";
+ return menu_age_up;
+ }
+ );
+ fsm.arcs.emplace_back(
+ menu_age_up, opt, 0,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ Player &player = gst.players[gst.turn];
+ player.leveling_up = 1;
+ float cost = (player.level+1)*500;
+ player.pay(std::vector<float>{ cost, cost });
+ view.menu_age_up.close();
+ gst.entities[view.selected_entity].done = true;
+ view.selected_entity = -1;
+ std::cout << "aged up " << p << "\n";
+ return select;
+ }
+ );
+ fsm.arcs.emplace_back(
+ menu_age_up, back, -1,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ view.menu_age_up.close();
+ view.selected_entity = -1;
+ std::cout << "closed ageup " << p << "\n";
+ return select;
+ }
+ );
+ fsm.arcs.emplace_back(
+ menu_unit, opt, Menu_unit::Opts::heal,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ Player &player = gst.players[gst.turn];
+ view.menu_unit.close();
+ Entity &ent = gst.entities[view.selected_entity];
+ view.heals = gst.inv->ground.heal_targets(gst, ent);
+ std::cout << "heal targeting " << p << "\n";
+ return target_heal;
+ }
+ );
+ fsm.arcs.emplace_back(
+ target_heal, sel_ground, -1,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ std::cout << "healed " << p << "\n";
+ Entity &atk = gst.entities[view.selected_entity];
+ int x = view.cursor_ground % gst.inv->ground.sizex;
+ int y = view.cursor_ground / gst.inv->ground.sizex;
+ std::cout << "selg " << x << " " << y << "\n";
+ Entity &def = gst.get_at(x, y);
+ atk.done = true;
+ gst.heal(atk, def);
+ view.heals.clear();
+ view.selected_entity = -1;
+ return select;
+ }
+ );
+ fsm.arcs.emplace_back(
+ menu_unit, opt, Menu_unit::Opts::convert,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ Player &player = gst.players[gst.turn];
+ view.menu_unit.close();
+ Entity &ent = gst.entities[view.selected_entity];
+ view.converts = gst.inv->ground.convert_targets(gst, ent);
+ std::cout << "convert targeting " << p << "\n";
+ return target_convert;
+ }
+ );
+ fsm.arcs.emplace_back(
+ target_convert, sel_ground, -1,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ std::cout << "converted " << p << "\n";
+ Entity &atk = gst.entities[view.selected_entity];
+ int x = view.cursor_ground % gst.inv->ground.sizex;
+ int y = view.cursor_ground / gst.inv->ground.sizex;
+ std::cout << "selg " << x << " " << y << "\n";
+ Entity &def = gst.get_at(x, y);
+ atk.done = true;
+ gst.convert(atk, def);
+ view.converts.clear();
+ view.selected_entity = -1;
+ return select;
+ }
+ );
+ fsm.arcs.emplace_back(
+ menu_unit, opt, Menu_unit::Opts::done,
+ [](Gst &gst, View &view, Fsm &fsm, int p) {
+ view.menu_unit.close();
+ gst.entities[view.selected_entity].done = true;
+ view.selected_entity = -1;
+ std::cout << "done " << p << "\n";
+ return select;
+ }
+ );
+}
+
+void Player_control::process (Gst &gst, View &view) {
+ if (view.cursor_entity != -1) {
+ fsm.transition(gst, view, fsm, sel_unit, view.cursor_entity);
+ }
+ if (view.cursor_ground != -1) {
+ fsm.transition(gst, view, fsm, sel_ground, view.cursor_ground);
+ }
+ if (view.back != -1) {
+ fsm.transition(gst, view, fsm, back, 0);
+ }
+ if (view.opt != -1) {
+ fsm.transition(gst, view, fsm, opt, view.opt);
+ }
} \ No newline at end of file
diff --git a/game/playercontrol.h b/game/playercontrol.h
index c0075d4..d6b1fd7 100644
--- a/game/playercontrol.h
+++ b/game/playercontrol.h
@@ -1,92 +1,92 @@
-#ifndef PLAYERCONTROL_H
-#define PLAYERCONTROL_H
-
-#include <iostream>
-
-#include "gst.h"
-#include "view.h"
-#include <vector>
-#include <functional>
-
-
-enum pc_state {
- select,
- move,
- attack,
- train,
- build,
- merge,
- trade,
- age_up,
- heal,
- power,
- move_target,
- attack_target,
- menu_train,
- menu_build,
- target_build,
- merge_target,
- target_heal,
- target_convert,
- menu_power,
- target_power,
- menu_unit,
- menu_day,
- menu_tech,
- menu_trade,
- menu_age_up,
- end
-};
-
-enum pc_action {
- sel_unit,
- sel_ground,
- opt,
- back
-};
-
-
-class Fsm;
-using lambda = std::function<pc_state(Gst&, View&, Fsm&, int p)>;
-
-
-class Arc {
- public:
- Arc (pc_state from, pc_action act, int p, lambda f)
- : from(from), act(act), p(p), f(f) {};
- pc_state from;
- pc_action act;
- int p;
-
- lambda f;
-};
-
-class Fsm {
- public:
- Fsm() { state = select; }
-
- void transition (Gst &gst, View &view, Fsm &fsm, pc_action act, int p) {
- std::cout << "> transitioning from " << state << " with " << act << std::endl;
- for (Arc a : arcs) {
- if (a.from == state && a.act == act && (a.p == p || a.p == -1)) {
- state = a.f(gst, view, fsm, p);
- break;
- }
- }
- }
- std::vector<Arc> arcs;
-
- private:
- pc_state state;
-};
-
-
-class Player_control {
- public:
- Player_control ();
- void process (Gst &gst, View &view);
-
- Fsm fsm;
-};
-
+#ifndef PLAYERCONTROL_H
+#define PLAYERCONTROL_H
+
+#include <iostream>
+
+#include "gst.h"
+#include "view.h"
+#include <vector>
+#include <functional>
+
+
+enum pc_state {
+ select,
+ move,
+ attack,
+ train,
+ build,
+ merge,
+ trade,
+ age_up,
+ heal,
+ power,
+ move_target,
+ attack_target,
+ menu_train,
+ menu_build,
+ target_build,
+ merge_target,
+ target_heal,
+ target_convert,
+ menu_power,
+ target_power,
+ menu_unit,
+ menu_day,
+ menu_tech,
+ menu_trade,
+ menu_age_up,
+ end
+};
+
+enum pc_action {
+ sel_unit,
+ sel_ground,
+ opt,
+ back
+};
+
+
+class Fsm;
+using lambda = std::function<pc_state(Gst&, View&, Fsm&, int p)>;
+
+
+class Arc {
+ public:
+ Arc (pc_state from, pc_action act, int p, lambda f)
+ : from(from), act(act), p(p), f(f) {};
+ pc_state from;
+ pc_action act;
+ int p;
+
+ lambda f;
+};
+
+class Fsm {
+ public:
+ Fsm() { state = select; }
+
+ void transition (Gst &gst, View &view, Fsm &fsm, pc_action act, int p) {
+ std::cout << "> transitioning from " << state << " with " << act << std::endl;
+ for (Arc a : arcs) {
+ if (a.from == state && a.act == act && (a.p == p || a.p == -1)) {
+ state = a.f(gst, view, fsm, p);
+ break;
+ }
+ }
+ }
+ std::vector<Arc> arcs;
+
+ private:
+ pc_state state;
+};
+
+
+class Player_control {
+ public:
+ Player_control ();
+ void process (Gst &gst, View &view);
+
+ Fsm fsm;
+};
+
#endif \ No newline at end of file
diff --git a/game/tech.cpp b/game/tech.cpp
index 848b211..d540236 100644
--- a/game/tech.cpp
+++ b/game/tech.cpp
@@ -1 +1 @@
-#include "tech.h"
+#include "tech.h"
diff --git a/game/tech.h b/game/tech.h
index b22b173..d5a9e24 100644
--- a/game/tech.h
+++ b/game/tech.h
@@ -1,132 +1,132 @@
-#ifndef TECH_H
-#define TECH_H
-
-#include <vector>
-#include <unordered_map>
-#include <string>
-
-#include <math.h>
-
-#include <iostream>
-
-#include "../umath/vec2.h"
-
-class TechBonus {
- public:
- float attack { 0 };
- float defence { 0 };
- int sight { 0 };
- int range { 0 };
- int move { 0 };
- std::vector<float> cost { 0, 0 };
- std::vector<float> cost_abs { 0, 0 };
- std::vector<float> prod { 0, 0 };
- int trade { 0 } ;
- int improved_heal { 0 };
- int improved_convert { 0 };
- int req_range { 999 };
-
- std::vector<int> aff_id;
- std::vector<int> aff_class;
- int aff_level { -1 };
- int aff_all { 0 };
-
- TechBonus operator+(const TechBonus &rhs) {
- TechBonus b;
- b.attack = attack + rhs.attack;
- b.defence = defence + rhs.defence;
- b.sight = sight + rhs.sight;
- b.move = move + rhs.move;
- for (int i=0; i<cost.size(); i++) {
- b.cost[i] = cost[i] + rhs.cost[i];
- b.cost_abs[i] = cost_abs[i] + rhs.cost_abs[i];
- b.prod[i] = prod[i] + rhs.prod[i];
- }
- b.trade = trade + rhs.trade;
- b.improved_heal = improved_heal + rhs.improved_heal;
- b.improved_convert = improved_convert + rhs.improved_convert;
- return b;
- }
-
- std::string to_string () {
- std::string str = "";
- if (attack != 0) {
- int value = (int)roundf(attack*100);
- str += "Attack: " + std::to_string(value) + "%\n";
- }
- if (defence != 0) {
- int value = (int)roundf(defence*100);
- str += "Defence: " + std::to_string(value) + "%\n";
- }
- if (sight != 0) {
- str += "Sight: " + std::to_string(sight) + "\n";
- }
- if (range != 0) {
- str += "Range: " + std::to_string(range) + "\n";
- }
- if (move != 0) {
- str += "Range: " + std::to_string(range) + "\n";
- }
- if (cost[0] != 0 || cost[1] != 0) {
- int vf = (int)roundf(cost[0]*100);
- int vg = (int)roundf(cost[1]*100);
- str += "Cost f: " + std::to_string(vf);
- str += "%, g: " + std::to_string(vg) + "%\n";
- }
- if (cost_abs[0] != 0 || cost_abs[1] != 0) {
- int vf = (int)roundf(cost_abs[0]);
- int vg = (int)roundf(cost_abs[1]);
- str += "Cost f: " + std::to_string(vf);
- str += ", g: " + std::to_string(vg) + "\n";
- }
- if (prod[0] != 0 || prod[1] != 0) {
- int vf = (int)roundf(prod[0]*100);
- int vg = (int)roundf(prod[1]*100);
- str += "Production f: " + std::to_string(vf);
- str += "%, g: " + std::to_string(vg) + "%\n";
- }
- if (trade != 0) { str += "Improves Trade Rate\n"; }
- if (improved_heal != 0) { str += "Improves Heal Ability\n"; }
- if (improved_convert != 0) { str += "Improves Convert Ability\n"; }
- if (aff_id.size() > 0) {
- str += "of entitiy ";
- for (int id : aff_id) str += std::to_string(id) + " ";
- str += "\n";
- }
- if (aff_class.size() > 0) {
- str += "of class ";
- for (int c : aff_class) str += std::to_string(c) + " ";
- str += "\n";
- }
- if (aff_level != -1) {
- str += "of level " + std::to_string(aff_level) + "\n";
- }
- return str;
- }
-};
-
-class TechLookup {
- public:
- TechLookup() {}
-
- TechBonus id (int i) { return map_id[i]; }
-
- std::unordered_map<int, TechBonus> map_id;
-};
-
-class Tech {
- public:
- Tech() {}
-
- std::string name;
- int id;
- int level;
- int req_id;
- std::vector<float> cost { 0, 0 };
-
- TechBonus bonus;
-
- vec2 spritebounds { 0, 0 };
-};
-
+#ifndef TECH_H
+#define TECH_H
+
+#include <vector>
+#include <unordered_map>
+#include <string>
+
+#include <math.h>
+
+#include <iostream>
+
+#include "../umath/vec2.h"
+
+class TechBonus {
+ public:
+ float attack { 0 };
+ float defence { 0 };
+ int sight { 0 };
+ int range { 0 };
+ int move { 0 };
+ std::vector<float> cost { 0, 0 };
+ std::vector<float> cost_abs { 0, 0 };
+ std::vector<float> prod { 0, 0 };
+ int trade { 0 } ;
+ int improved_heal { 0 };
+ int improved_convert { 0 };
+ int req_range { 999 };
+
+ std::vector<int> aff_id;
+ std::vector<int> aff_class;
+ int aff_level { -1 };
+ int aff_all { 0 };
+
+ TechBonus operator+(const TechBonus &rhs) {
+ TechBonus b;
+ b.attack = attack + rhs.attack;
+ b.defence = defence + rhs.defence;
+ b.sight = sight + rhs.sight;
+ b.move = move + rhs.move;
+ for (int i=0; i<cost.size(); i++) {
+ b.cost[i] = cost[i] + rhs.cost[i];
+ b.cost_abs[i] = cost_abs[i] + rhs.cost_abs[i];
+ b.prod[i] = prod[i] + rhs.prod[i];
+ }
+ b.trade = trade + rhs.trade;
+ b.improved_heal = improved_heal + rhs.improved_heal;
+ b.improved_convert = improved_convert + rhs.improved_convert;
+ return b;
+ }
+
+ std::string to_string () {
+ std::string str = "";
+ if (attack != 0) {
+ int value = (int)roundf(attack*100);
+ str += "Attack: " + std::to_string(value) + "%\n";
+ }
+ if (defence != 0) {
+ int value = (int)roundf(defence*100);
+ str += "Defence: " + std::to_string(value) + "%\n";
+ }
+ if (sight != 0) {
+ str += "Sight: " + std::to_string(sight) + "\n";
+ }
+ if (range != 0) {
+ str += "Range: " + std::to_string(range) + "\n";
+ }
+ if (move != 0) {
+ str += "Range: " + std::to_string(range) + "\n";
+ }
+ if (cost[0] != 0 || cost[1] != 0) {
+ int vf = (int)roundf(cost[0]*100);
+ int vg = (int)roundf(cost[1]*100);
+ str += "Cost f: " + std::to_string(vf);
+ str += "%, g: " + std::to_string(vg) + "%\n";
+ }
+ if (cost_abs[0] != 0 || cost_abs[1] != 0) {
+ int vf = (int)roundf(cost_abs[0]);
+ int vg = (int)roundf(cost_abs[1]);
+ str += "Cost f: " + std::to_string(vf);
+ str += ", g: " + std::to_string(vg) + "\n";
+ }
+ if (prod[0] != 0 || prod[1] != 0) {
+ int vf = (int)roundf(prod[0]*100);
+ int vg = (int)roundf(prod[1]*100);
+ str += "Production f: " + std::to_string(vf);
+ str += "%, g: " + std::to_string(vg) + "%\n";
+ }
+ if (trade != 0) { str += "Improves Trade Rate\n"; }
+ if (improved_heal != 0) { str += "Improves Heal Ability\n"; }
+ if (improved_convert != 0) { str += "Improves Convert Ability\n"; }
+ if (aff_id.size() > 0) {
+ str += "of entitiy ";
+ for (int id : aff_id) str += std::to_string(id) + " ";
+ str += "\n";
+ }
+ if (aff_class.size() > 0) {
+ str += "of class ";
+ for (int c : aff_class) str += std::to_string(c) + " ";
+ str += "\n";
+ }
+ if (aff_level != -1) {
+ str += "of level " + std::to_string(aff_level) + "\n";
+ }
+ return str;
+ }
+};
+
+class TechLookup {
+ public:
+ TechLookup() {}
+
+ TechBonus id (int i) { return map_id[i]; }
+
+ std::unordered_map<int, TechBonus> map_id;
+};
+
+class Tech {
+ public:
+ Tech() {}
+
+ std::string name;
+ int id;
+ int level;
+ int req_id;
+ std::vector<float> cost { 0, 0 };
+
+ TechBonus bonus;
+
+ vec2 spritebounds { 0, 0 };
+};
+
#endif \ No newline at end of file
diff --git a/game/tile.h b/game/tile.h
index 64e9132..c5c46c6 100644
--- a/game/tile.h
+++ b/game/tile.h
@@ -1,23 +1,23 @@
-#ifndef TILE_H
-#define TILE_H
-
-#include <vector>
-#include <string>
-
-#include "../umath/vec2.h"
-
-class Tile {
- public:
- Tile() {}
-
- std::string name;
- int move_cost { 1 };
- int sight_cost { 1 };
- int range_bonus { 0 };
- float attack_bonus { 0 };
- float defence_bonus { 0 };
-
- vec2 spritebounds;
-};
-
+#ifndef TILE_H
+#define TILE_H
+
+#include <vector>
+#include <string>
+
+#include "../umath/vec2.h"
+
+class Tile {
+ public:
+ Tile() {}
+
+ std::string name;
+ int move_cost { 1 };
+ int sight_cost { 1 };
+ int range_bonus { 0 };
+ float attack_bonus { 0 };
+ float defence_bonus { 0 };
+
+ vec2 spritebounds;
+};
+
#endif \ No newline at end of file
diff --git a/game/view.cpp b/game/view.cpp
index 190bd53..1542fa5 100644
--- a/game/view.cpp
+++ b/game/view.cpp
@@ -1,207 +1,207 @@
-#include "view.h"
-
-void View::process (Gst &gst, vec2 cam, vec2 mouse, int *mheld) {
- Ground &gr = gst.inv->ground;
- std::vector<Entity> &entities = gst.entities;
-
- vec2 absmouse { mouse };
- absmouse -= cam;
-
- cursor_ground = -1;
- cursor_entity = -1;
- back = -1;
- opt = -1;
- hover_ground = -1;
-
- bool hfound = false;
- for (int y=0; y<gr.sizey && !hfound; y++) {
- for (int x=0; x<gr.sizex && !hfound; x++) {
- vec2 pos { (float)x*32, (float)y*32 };
- if (pos.x < absmouse.x && absmouse.x <= pos.x+32
- && pos.y < absmouse.y && absmouse.y <= pos.y+32)
- {
- hover_ground = x+y*gr.sizex;
- hfound = true;
- }
- }
- }
-
- if (menu_train.active) {
- menu_train.over = menu_train.mouse_option(mouse);
- }
- if (menu_build.active) {
- menu_build.over = menu_build.mouse_option(mouse);
- }
- if (menu_unit.active) {
- menu_unit.over = menu_unit.mouse_option(mouse);
- }
- if (menu_day.active) {
- menu_day.over = menu_day.mouse_option(mouse);
- }
- if (menu_tech.active) {
- menu_tech.over = menu_tech.mouse_option(mouse);
- }
- if (menu_trade.active) {
- menu_trade.over = menu_trade.mouse_option(mouse);
- }
- if (menu_age_up.active) {
- menu_age_up.over = menu_age_up.mouse_option(mouse);
- }
-
- if (mheld[0] == 1) {
- bool found = false;
-
- if (moves.size() > 0 && !found) {
- for (int i=0; i<moves.size() && !found; i++) {
- int x = moves[i] % gr.sizex;
- int y = moves[i] / gr.sizex;
- int valid = 1;
- for (Entity &e : gst.entities) {
- if (e.x == x && e.y == y && e.info->unit == 1) {
- valid = 0;
- }
- }
- if (!valid) continue;
- vec2 pos { (float)x*32, (float)y*32 };
- if (pos.x < absmouse.x && absmouse.x <= pos.x+32
- && pos.y < absmouse.y && absmouse.y <= pos.y+32)
- {
- cursor_ground = moves[i];
- }
- }
- found = true;
- }
-
- if (attacks.size() > 0 && !found) {
- for (int i=0; i<attacks.size() && !found; i++) {
- int x = attacks[i] % gr.sizex;
- int y = attacks[i] / gr.sizex;
- vec2 pos { (float)x*32, (float)y*32 };
- if (pos.x < absmouse.x && absmouse.x <= pos.x+32
- && pos.y < absmouse.y && absmouse.y <= pos.y+32)
- {
- cursor_ground = attacks[i];
- }
- }
- found = true;
- }
-
- if (heals.size() > 0 && !found) {
- for (int i=0; i<heals.size() && !found; i++) {
- int x = heals[i] % gr.sizex;
- int y = heals[i] / gr.sizex;
- vec2 pos { (float)x*32, (float)y*32 };
- if (pos.x < absmouse.x && absmouse.x <= pos.x+32
- && pos.y < absmouse.y && absmouse.y <= pos.y+32)
- {
- cursor_ground = heals[i];
- }
- }
- found = true;
- }
-
- if (converts.size() > 0 && !found) {
- for (int i=0; i<converts.size() && !found; i++) {
- int x = converts[i] % gr.sizex;
- int y = converts[i] / gr.sizex;
- vec2 pos { (float)x*32, (float)y*32 };
- if (pos.x < absmouse.x && absmouse.x <= pos.x+32
- && pos.y < absmouse.y && absmouse.y <= pos.y+32)
- {
- cursor_ground = converts[i];
- }
- }
- found = true;
- }
-
- if (menu_train.active && !found) {
- int selected = menu_train.mouse_option(mouse);
- if (selected != -1) {
- opt = selected; found = true;
- } else {
- back = 1; found = 1;
- }
- }
-
- if (menu_build.active && !found) {
- int selected = menu_build.mouse_option(mouse);
- if (selected != -1) {
- opt = selected; found = true;
- } else {
- back = 1; found = 1;
- }
- }
-
- if (menu_unit.active && !found) {
- int selected = menu_unit.mouse_option(mouse);
- if (selected != -1) {
- opt = selected; found = true;
- } else {
- back = 1; found = 1;
- }
- }
-
- if (menu_day.active && !found) {
- int selected = menu_day.mouse_option(mouse);
- if (selected != -1) {
- opt = selected; found = true;
- } else {
- back = 1; found = 1;
- }
- }
-
- if (menu_tech.active && !found) {
- int selected = menu_tech.mouse_option(mouse);
- if (selected != -1) {
- opt = selected; found = true;
- } else {
- back = 1; found = 1;
- }
- }
-
- if (menu_trade.active && !found) {
- int selected = menu_trade.mouse_option(mouse);
- if (selected != -1) {
- opt = selected; found = true;
- } else {
- back = 1; found = 1;
- }
- }
-
- if (menu_age_up.active && !found) {
- int selected = menu_age_up.mouse_option(mouse);
- if (selected != -1) {
- opt = selected; found = true;
- } else {
- back = 1; found = 1;
- }
- }
-
- for (int i=0; i<entities.size() && !found; i++) {
- if (entities[i].done) continue;
- if (entities[i].owner != gst.turn) continue;
- vec2 pos { (float)entities[i].x*32, (float)entities[i].y*32 };
- if (pos.x < absmouse.x && absmouse.x <= pos.x+32
- && pos.y < absmouse.y && absmouse.y <= pos.y+32)
- {
- cursor_entity = i;
- if (entities[i].info->unit == 1) {
- found = true;
- }
- }
- }
- if (cursor_entity != -1) found = true;
-
- for (int y=0; y<gr.sizey && !found; y++) {
- for (int x=0; x<gr.sizex && !found; x++) {
- vec2 pos { (float)x*32, (float)y*32 };
- if (pos.x < absmouse.x && absmouse.x <= pos.x+32
- && pos.y < absmouse.y && absmouse.y <= pos.y+32)
- {
- cursor_ground = x+y*gr.sizex;
- found = true;
- }
- }
- }
- }
+#include "view.h"
+
+void View::process (Gst &gst, vec2 cam, vec2 mouse, int *mheld) {
+ Ground &gr = gst.inv->ground;
+ std::vector<Entity> &entities = gst.entities;
+
+ vec2 absmouse { mouse };
+ absmouse -= cam;
+
+ cursor_ground = -1;
+ cursor_entity = -1;
+ back = -1;
+ opt = -1;
+ hover_ground = -1;
+
+ bool hfound = false;
+ for (int y=0; y<gr.sizey && !hfound; y++) {
+ for (int x=0; x<gr.sizex && !hfound; x++) {
+ vec2 pos { (float)x*32, (float)y*32 };
+ if (pos.x < absmouse.x && absmouse.x <= pos.x+32
+ && pos.y < absmouse.y && absmouse.y <= pos.y+32)
+ {
+ hover_ground = x+y*gr.sizex;
+ hfound = true;
+ }
+ }
+ }
+
+ if (menu_train.active) {
+ menu_train.over = menu_train.mouse_option(mouse);
+ }
+ if (menu_build.active) {
+ menu_build.over = menu_build.mouse_option(mouse);
+ }
+ if (menu_unit.active) {
+ menu_unit.over = menu_unit.mouse_option(mouse);
+ }
+ if (menu_day.active) {
+ menu_day.over = menu_day.mouse_option(mouse);
+ }
+ if (menu_tech.active) {
+ menu_tech.over = menu_tech.mouse_option(mouse);
+ }
+ if (menu_trade.active) {
+ menu_trade.over = menu_trade.mouse_option(mouse);
+ }
+ if (menu_age_up.active) {
+ menu_age_up.over = menu_age_up.mouse_option(mouse);
+ }
+
+ if (mheld[0] == 1) {
+ bool found = false;
+
+ if (moves.size() > 0 && !found) {
+ for (int i=0; i<moves.size() && !found; i++) {
+ int x = moves[i] % gr.sizex;
+ int y = moves[i] / gr.sizex;
+ int valid = 1;
+ for (Entity &e : gst.entities) {
+ if (e.x == x && e.y == y && e.info->unit == 1) {
+ valid = 0;
+ }
+ }
+ if (!valid) continue;
+ vec2 pos { (float)x*32, (float)y*32 };
+ if (pos.x < absmouse.x && absmouse.x <= pos.x+32
+ && pos.y < absmouse.y && absmouse.y <= pos.y+32)
+ {
+ cursor_ground = moves[i];
+ }
+ }
+ found = true;
+ }
+
+ if (attacks.size() > 0 && !found) {
+ for (int i=0; i<attacks.size() && !found; i++) {
+ int x = attacks[i] % gr.sizex;
+ int y = attacks[i] / gr.sizex;
+ vec2 pos { (float)x*32, (float)y*32 };
+ if (pos.x < absmouse.x && absmouse.x <= pos.x+32
+ && pos.y < absmouse.y && absmouse.y <= pos.y+32)
+ {
+ cursor_ground = attacks[i];
+ }
+ }
+ found = true;
+ }
+
+ if (heals.size() > 0 && !found) {
+ for (int i=0; i<heals.size() && !found; i++) {
+ int x = heals[i] % gr.sizex;
+ int y = heals[i] / gr.sizex;
+ vec2 pos { (float)x*32, (float)y*32 };
+ if (pos.x < absmouse.x && absmouse.x <= pos.x+32
+ && pos.y < absmouse.y && absmouse.y <= pos.y+32)
+ {
+ cursor_ground = heals[i];
+ }
+ }
+ found = true;
+ }
+
+ if (converts.size() > 0 && !found) {
+ for (int i=0; i<converts.size() && !found; i++) {
+ int x = converts[i] % gr.sizex;
+ int y = converts[i] / gr.sizex;
+ vec2 pos { (float)x*32, (float)y*32 };
+ if (pos.x < absmouse.x && absmouse.x <= pos.x+32
+ && pos.y < absmouse.y && absmouse.y <= pos.y+32)
+ {
+ cursor_ground = converts[i];
+ }
+ }
+ found = true;
+ }
+
+ if (menu_train.active && !found) {
+ int selected = menu_train.mouse_option(mouse);
+ if (selected != -1) {
+ opt = selected; found = true;
+ } else {
+ back = 1; found = 1;
+ }
+ }
+
+ if (menu_build.active && !found) {
+ int selected = menu_build.mouse_option(mouse);
+ if (selected != -1) {
+ opt = selected; found = true;
+ } else {
+ back = 1; found = 1;
+ }
+ }
+
+ if (menu_unit.active && !found) {
+ int selected = menu_unit.mouse_option(mouse);
+ if (selected != -1) {
+ opt = selected; found = true;
+ } else {
+ back = 1; found = 1;
+ }
+ }
+
+ if (menu_day.active && !found) {
+ int selected = menu_day.mouse_option(mouse);
+ if (selected != -1) {
+ opt = selected; found = true;
+ } else {
+ back = 1; found = 1;
+ }
+ }
+
+ if (menu_tech.active && !found) {
+ int selected = menu_tech.mouse_option(mouse);
+ if (selected != -1) {
+ opt = selected; found = true;
+ } else {
+ back = 1; found = 1;
+ }
+ }
+
+ if (menu_trade.active && !found) {
+ int selected = menu_trade.mouse_option(mouse);
+ if (selected != -1) {
+ opt = selected; found = true;
+ } else {
+ back = 1; found = 1;
+ }
+ }
+
+ if (menu_age_up.active && !found) {
+ int selected = menu_age_up.mouse_option(mouse);
+ if (selected != -1) {
+ opt = selected; found = true;
+ } else {
+ back = 1; found = 1;
+ }
+ }
+
+ for (int i=0; i<entities.size() && !found; i++) {
+ if (entities[i].done) continue;
+ if (entities[i].owner != gst.turn) continue;
+ vec2 pos { (float)entities[i].x*32, (float)entities[i].y*32 };
+ if (pos.x < absmouse.x && absmouse.x <= pos.x+32
+ && pos.y < absmouse.y && absmouse.y <= pos.y+32)
+ {
+ cursor_entity = i;
+ if (entities[i].info->unit == 1) {
+ found = true;
+ }
+ }
+ }
+ if (cursor_entity != -1) found = true;
+
+ for (int y=0; y<gr.sizey && !found; y++) {
+ for (int x=0; x<gr.sizex && !found; x++) {
+ vec2 pos { (float)x*32, (float)y*32 };
+ if (pos.x < absmouse.x && absmouse.x <= pos.x+32
+ && pos.y < absmouse.y && absmouse.y <= pos.y+32)
+ {
+ cursor_ground = x+y*gr.sizex;
+ found = true;
+ }
+ }
+ }
+ }
} \ No newline at end of file
diff --git a/game/view.h b/game/view.h
index 6a316de..26ef3fc 100644
--- a/game/view.h
+++ b/game/view.h
@@ -1,40 +1,40 @@
-#ifndef VIEW_H
-#define VIEW_H
-
-#include <vector>
-#include <functional>
-
-#include "gst.h"
-#include "menu.h"
-
-class View {
- public:
- View (vec2 res) : res(res) {}
-
- vec2 res;
-
- int hover_ground {-1};
- int selected_ground {-1};
- int selected_entity {-1};
- int cursor_ground {-1};
- int cursor_entity {-1};
- int back {-1};
- int opt {-1};
- std::vector<int> moves;
- std::vector<int> attacks;
- std::vector<int> builds;
- std::vector<int> heals;
- std::vector<int> converts;
-
- Menu_unit menu_unit;
- Menu_day menu_day;
- Menu_build menu_build;
- Menu_train menu_train;
- Menu_tech menu_tech;
- Menu_trade menu_trade;
- Menu_age_up menu_age_up;
-
- void process (Gst &gst, vec2 cam, vec2 mouse, int *mheld);
-};
-
+#ifndef VIEW_H
+#define VIEW_H
+
+#include <vector>
+#include <functional>
+
+#include "gst.h"
+#include "menu.h"
+
+class View {
+ public:
+ View (vec2 res) : res(res) {}
+
+ vec2 res;
+
+ int hover_ground {-1};
+ int selected_ground {-1};
+ int selected_entity {-1};
+ int cursor_ground {-1};
+ int cursor_entity {-1};
+ int back {-1};
+ int opt {-1};
+ std::vector<int> moves;
+ std::vector<int> attacks;
+ std::vector<int> builds;
+ std::vector<int> heals;
+ std::vector<int> converts;
+
+ Menu_unit menu_unit;
+ Menu_day menu_day;
+ Menu_build menu_build;
+ Menu_train menu_train;
+ Menu_tech menu_tech;
+ Menu_trade menu_trade;
+ Menu_age_up menu_age_up;
+
+ void process (Gst &gst, vec2 cam, vec2 mouse, int *mheld);
+};
+
#endif \ No newline at end of file
diff --git a/graphics/cam.h b/graphics/cam.h
index e3e158f..3f1496f 100644
--- a/graphics/cam.h
+++ b/graphics/cam.h
@@ -1,14 +1,14 @@
-#ifndef CAM_H
-#define CAM_H
-
-#include <vector>
-
-
-class Cam {
- public:
- Cam () { pos = vec2(); scale = 1; }
- vec2 pos;
- float scale;
-};
-
+#ifndef CAM_H
+#define CAM_H
+
+#include <vector>
+
+
+class Cam {
+ public:
+ Cam () { pos = vec2(); scale = 1; }
+ vec2 pos;
+ float scale;
+};
+
#endif \ No newline at end of file
diff --git a/graphics/graphics.cpp b/graphics/graphics.cpp
index fa0c9c8..823668a 100644
--- a/graphics/graphics.cpp
+++ b/graphics/graphics.cpp
@@ -1,794 +1,794 @@
-#include <algorithm>
-#include <iostream>
-#include <string>
-
-#include <math.h>
-
-#include "graphics.h"
-#include "../game/menu.h"
-#include "../game/tile.h"
-#include "../game/constants.h"
-
-Graphics::~Graphics () {
-}
-
-void Graphics::present () {
- backend.present();
-}
-
-void render_ent (Graphics *graphics, Gst &gst, Entity &ent,
- vec2 pos, int dflag)
-{
- Player &player = gst.players[ent.owner];
- float bound_y = ent.info->spritebounds.y;
- if (ent.info->unit == 0) { bound_y = player.level*16+16; }
- int done = 0;
- if (dflag == 1) done = 512;
- graphics->backend.render_sprite(
- (int)ent.info->spritebounds.x,
- (int)bound_y+done, 16, 16,
- (int)pos.x, (int)pos.y, 32, 32
- );
- if (dflag == 0) {
- graphics->backend.render_sprite(
- (int)ent.info->spritebounds.x,
- (int)bound_y+768, 16, 16,
- (int)pos.x, (int)pos.y, 32, 32,
- player.r, player.g, player.b
- );
- }
-}
-
-void render_ents (Graphics *graphics, Gst &gst, int unit) {
- std::vector<Entity> &entities = gst.entities;
- for (int i=0; i<entities.size(); i++) {
- if (entities[i].info->unit != unit) continue;
- Player &player = gst.players[entities[i].owner];
- int dflag = 0;
- if (unit) dflag = entities[i].done;
- vec2 pos {
- graphics->cam.pos.x + entities[i].x*32,
- graphics->cam.pos.y + entities[i].y*32
- };
- render_ent(graphics, gst, entities[i], pos, dflag);
- }
-}
-
-void render_menu (Graphics *graphics, Gst &gst, Menu &menu) {
- vec2 res { (float)graphics->resx, (float)graphics->resy };
- if (menu.active) {
- vec2 pos { res };
- float height = menu.options.size() * 20;
- vec2 size { 120, height+10 };
- pos *= 0.5f;
- pos -= size/2;
- graphics->backend.render_rect(
- 255,255,255,255,
- menu.pos.x,menu.pos.y,menu.size.x,menu.size.y
- );
- float acc = 0;
- for (Option opt : menu.options) {
- int r=0, g=0, b=0;
- if (opt.id == menu.over) {
- Player &player = gst.players[gst.turn];
- r = player.r; g = player.g; b = player.b;
- }
- graphics->backend.txt.render_text(
- opt.name, menu.pos + vec2 {10, 10 + acc}, r, g, b);
- float width = graphics->backend.txt.get_width(opt.name);
- if (opt.cost.size() > 0) {
- graphics->backend.txt.render_text(
- std::to_string((int)roundf(opt.cost[0])) + "f",
- menu.pos + vec2 { width + 20, 10 + acc });
- graphics->backend.txt.render_text(
- std::to_string((int)roundf(opt.cost[1])) + "g",
- menu.pos + vec2 { width + 50, 10 + acc });
- }
- acc += 20;
- }
- }
-}
-
-void render_menu_tech (Graphics *graphics, Gst &gst, View &view) {
- vec2 res { (float)graphics->resx, (float)graphics->resy };
- if (view.menu_tech.active) {
- vec2 pos { res };
- float height = view.menu_tech.options.size() * 20;
- vec2 size { 120, height+10 };
- pos *= 0.5f;
- pos -= size/2;
- graphics->backend.render_rect(
- 255,255,255,255,
- view.menu_tech.pos.x,view.menu_tech.pos.y,
- view.menu_tech.size.x,view.menu_tech.size.y
- );
-
- float x = 0, y = 0;
- for (auto v : view.menu_tech.tech_opt_ordered) {
- for (auto opt : v) {
- int r=0, g=0, b=0;
- Player &player = gst.players[gst.turn];
- if (opt.tech->id == view.menu_tech.over) {
- r = player.r; g = player.g; b = player.b;
- }
- if (!gst.check_req_tech(opt.tech, player)) {
- r = 100; g = 100; b = 100;
- }
- if (player.has_tech(opt.tech->id)) {
- r = constants::col_gud_r;
- g = constants::col_gud_g;
- b = constants::col_gud_b;
- }
- graphics->backend.txt.render_text(opt.name,
- view.menu_tech.pos + vec2 {10 + x, 10 + y}, r, g, b);
- float width = graphics->backend.txt.get_width(opt.name);
- /*
- if (opt.tech->cost.size() > 0) {
- graphics->backend.txt.render_text(
- std::to_string (opt.tech->cost[0]) + "f",
- view.menu_tech.pos + vec2 { width + 20 + x, 10 + y });
- graphics->backend.txt.render_text(
- std::to_string (opt.tech->cost[1]) + "g",
- view.menu_tech.pos + vec2 { width + 50 + x, 10 + y });
- }*/
- y += 10;
- }
- x += 150; y = 0;
- }
- }
-}
-
-
-int get_entity_info_height (Entity &ent) {
- return 155+10*ent.info->abilities.size();
-}
-
-void render_entity_info (Graphics *graphics, Gst &gst, vec2 pos, int i) {
- Entity &ent = gst.entities[i];
- Player &player = gst.players[ent.owner];
- auto &tech = player.tech_lookup;
- int id = ent.info->id;
- int w = 200, h = get_entity_info_height(ent);
-
- graphics->backend.render_rect (0,0,0,255,
- (int)pos.x,(int)pos.y,w,h);
- graphics->backend.render_rect (255,255,255,255,
- (int)pos.x+1,(int)pos.y+1,w-2,h-2);
-
- graphics->backend.render_rect (
- 0,0,0,255, (int)pos.x+w-32-10-1, (int)pos.y+10-1,34,34);
- graphics->backend.render_rect (
- 255,255,255,255, (int)pos.x+w-32-10, (int)pos.y+10,32,32);
-
- render_ent(graphics, gst, ent, vec2 { w-32-10.0f, 10 } + pos, 0);
-
- graphics->backend.txt.render_text(ent.info->name, pos + vec2 { 10, 10 });
- graphics->backend.txt.render_text("Attack", pos + vec2 { 10, 30 });
- float attack = ent.info->attack * (1+tech.id(id).attack);
- graphics->backend.txt.render_text(
- std::to_string((int)roundf(attack)), pos + vec2 { 90, 30 });
- graphics->backend.txt.render_text("Defence", pos + vec2 { 10, 45 });
- float defence = ent.info->defence * (1+tech.id(id).defence);
- graphics->backend.txt.render_text(
- std::to_string((int)roundf(defence)), pos + vec2 { 90, 45 });
- graphics->backend.txt.render_text("Move", pos + vec2 { 10, 60 });
- int move = ent.info->move + tech.id(id).move;
- graphics->backend.txt.render_text(
- std::to_string(move), pos + vec2 { 90, 60 });
- graphics->backend.txt.render_text("Range", pos + vec2 { 10, 75 });
- int range = ent.info->range + tech.id(id).range;
- graphics->backend.txt.render_text(
- std::to_string(range), pos + vec2 { 90, 75 });
- graphics->backend.txt.render_text("Sight", pos + vec2 { 10, 90 });
- int sight = ent.info->sight + tech.id(id).sight;
- graphics->backend.txt.render_text(
- std::to_string(sight), pos + vec2 { 90, 90 });
- graphics->backend.txt.render_text("Health", pos + vec2 { 10, 105 });
- graphics->backend.txt.render_text(
- std::to_string((int)roundf(ent.hp)), pos + vec2 { 90, 105 });
- graphics->backend.txt.render_text("Class", pos + vec2 { 10, 120 });
- std::string ent_class = "";
- switch (ent.info->ent_class) {
- case EntityInfo::Class::inf: ent_class = "Infantry"; break;
- case EntityInfo::Class::cav: ent_class = "Cavalry"; break;
- case EntityInfo::Class::ran: ent_class = "Ranged"; break;
- case EntityInfo::Class::sie: ent_class = "Siege"; break;
- case EntityInfo::Class::bld: ent_class = "Building"; break;
- }
- graphics->backend.txt.render_text(ent_class, pos + vec2 { 90, 120 });
- graphics->backend.txt.render_text("Abilities", pos + vec2 { 10, 135 });
- std::string abname;
- for (int s=0; s<ent.info->abilities.size(); s++) {
- abname = gst.inv->abilities[ent.info->abilities[s]].name;
- graphics->backend.txt.render_text(abname,
- pos + vec2 { 90, 135+s*10.0f });
- }
-}
-
-void render_tile_info (Graphics *graphics, Gst &gst, vec2 pos, int i) {
- int x = i % gst.inv->ground.sizex;
- int y = i / gst.inv->ground.sizex;
- Tile &tile = gst.inv->tiles[gst.inv->ground.tiles[gst.inv->ground.at(x,y)]];
-
- int w = 200, h = 95;
- graphics->backend.render_rect (
- 0,0,0,255,
- (int)pos.x,(int)pos.y,w,h
- );
- graphics->backend.render_rect (
- 255,255,255,255,
- (int)pos.x+1,(int)pos.y+1,w-2,h-2
- );
-
- graphics->backend.render_sprite (
- (int)tile.spritebounds.x,
- (int)tile.spritebounds.y-16, 16, 32,
- (int)pos.x + w-32-10,
- (int)pos.y + 10-32, 32, 64
- );
-
- graphics->backend.txt.render_text(tile.name, pos + vec2 { 10, 10 });
- graphics->backend.txt.render_text("Move", pos + vec2 { 10, 30 });
- graphics->backend.txt.render_text(
- std::to_string(tile.move_cost), pos + vec2 { 90, 30 });
- graphics->backend.txt.render_text("Sight", pos + vec2 { 10, 45 });
- graphics->backend.txt.render_text(
- std::to_string(tile.sight_cost), pos + vec2 { 90, 45 });
- graphics->backend.txt.render_text("Defence Bonus", pos + vec2 { 10, 60 });
- graphics->backend.txt.render_text(
- std::to_string((int)roundf(tile.defence_bonus*100))+"%", pos + vec2 { 90, 60 });
- graphics->backend.txt.render_text("Range Bonus", pos + vec2 { 10, 75 });
- graphics->backend.txt.render_text(
- std::to_string(tile.range_bonus), pos + vec2 { 90, 75 });
-}
-
-int render_attack_info_bonus (Graphics *graphics, Gst &gst, vec2 pos,
- Entity &atk, Entity &def, bool attack, int rtl)
-{
- float margin_amt = constants::menu_attack_margin_amt;
- float margin_arrow = constants::menu_attack_margin_arrow;
- float margin_mod = constants::menu_attack_margin_mod;
-
- std::vector<Bonus> bonuses;
- if (attack) { bonuses = gst.get_bonuses(atk, def); }
- else { bonuses = gst.get_bonuses(def, atk); }
-
- float value = attack ? atk.info->attack : atk.info->defence;
-
- {
- std::string nlabel = attack ? "Attack" : "Defence";
- float labw = graphics->backend.txt.get_width(nlabel);
- graphics->backend.txt.render_text(nlabel,
- pos + vec2 { -labw*rtl, 0 });
- } {
- std::string nlabel = std::to_string((int)roundf(value));
- float labw = graphics->backend.txt.get_width(nlabel);
- graphics->backend.txt.render_text(nlabel,
- pos + vec2 { margin_amt*(1-rtl*2)-labw*rtl, 0 });
- }
-
- int bonusnum = 0; float atk_mod = 1;
- for (int s=0; s<bonuses.size(); s++) {
- Bonus &b = bonuses[s];
- if (b.atk == attack) {
- float idw = graphics->backend.txt.get_width(b.id_string());
- graphics->backend.txt.render_text(
- b.id_string(), pos + vec2 { -idw*rtl, 10.0f+bonusnum*10 });
- std::string amt;
- if (b.amt > 0) amt += "+";
- amt += std::to_string((int)roundf(b.amt*100)) + "%";
- float labw = graphics->backend.txt.get_width(amt);
- graphics->backend.txt.render_text(
- amt, pos + vec2 {
- margin_amt*(1-rtl*2)-labw*rtl,
- 10.0f+bonusnum*10 });
- atk_mod += b.amt;
- bonusnum ++;
- }
- }
-
- if (bonusnum > 0) {
- {
- std::string label = rtl ? "<-" : "->";
- float labw = graphics->backend.txt.get_width(label);
- graphics->backend.txt.render_text(label,
- pos + vec2 { margin_arrow*(1-rtl*2)-labw*rtl, 0 });
- }
- {
- std::string label = std::to_string((int)roundf(value * atk_mod));
- float labw = graphics->backend.txt.get_width(label);
- graphics->backend.txt.render_text(label,
- pos + vec2 { margin_mod*(1-rtl*2)-labw*rtl, 0 });
- }
- }
-
- return bonusnum*10;
-}
-
-
-void render_attack_info (Graphics *graphics, Gst &gst, vec2 pos, int i, int j) {
- float margin_amt = constants::menu_attack_margin_amt;
- float margin_arrow = constants::menu_attack_margin_arrow;
- float margin_mod = constants::menu_attack_margin_mod;
-
- Entity &atk = gst.entities[i];
- Entity &def = gst.entities[j];
- int w = 300, h = 250;
-
- graphics->backend.render_rect (0,0,0,255,
- (int)pos.x,(int)pos.y,w,h);
- graphics->backend.render_rect (255,255,255,255,
- (int)pos.x+1,(int)pos.y+1,w-2,h-2);
-
- graphics->backend.render_rect (
- 0,0,0,255, (int)pos.x+10-1, (int)pos.y+35-1,34,34);
- graphics->backend.render_rect (
- 255,255,255,255, (int)pos.x+10, (int)pos.y+35,32,32);
- graphics->backend.render_sprite (
- (int)atk.info->spritebounds.x,
- (int)atk.info->spritebounds.y, 16, 16,
- (int)pos.x + 10,
- (int)pos.y + 35, 32, 32
- );
- {
- Tile &tile = gst.inv->tiles[gst.inv->ground.tiles[
- gst.inv->ground.at(atk.x,atk.y)]];
- graphics->backend.render_sprite (
- (int)tile.spritebounds.x,
- (int)tile.spritebounds.y-16, 16, 32,
- (int)pos.x + 52,
- (int)pos.y + 35-32, 32, 64
- );
- }
-
- graphics->backend.render_rect (
- 0,0,0,255, (int)pos.x+w-42-1, (int)pos.y+35-1,34,34);
- graphics->backend.render_rect (
- 255,255,255,255, (int)pos.x+w-42, (int)pos.y+35,32,32);
- graphics->backend.render_sprite (
- (int)def.info->spritebounds.x,
- (int)def.info->spritebounds.y, 16, 16,
- (int)pos.x + w-42,
- (int)pos.y + 35, 32, 32
- );
- {
- Tile &tile = gst.inv->tiles[gst.inv->ground.tiles[
- gst.inv->ground.at(def.x,def.y)]];
- graphics->backend.render_sprite (
- (int)tile.spritebounds.x,
- (int)tile.spritebounds.y-16, 16, 32,
- (int)pos.x + w-84,
- (int)pos.y + 35-32, 32, 64
- );
- }
-
- graphics->backend.txt.render_text(atk.info->name, pos + vec2 { 10, 10 });
- {
- int txtwidth = graphics->backend.txt.get_width(def.info->name);
- graphics->backend.txt.render_text(def.info->name,
- pos + vec2 { w-10.0f-txtwidth, 10 });
- }
-
- BattleResult result = gst.battle_res(atk, def);
- std::vector<std::string> sres = { "++", "+", "=", "-", "--" };
- float atk_loss = atk.hp-result.atk_hp;
- float def_loss = def.hp-result.def_hp;
- float est_atk = def_loss - atk_loss;
- float est_def = atk_loss - def_loss;
- int atk_res = 2;
- int def_res = 2;
- if (est_atk > 40) { atk_res = 0; }
- else if (est_atk > 5) { atk_res = 1; }
- if (est_atk < -40) { atk_res = 4; }
- else if (est_atk < -5) { atk_res = 3; }
- if (est_def > 40) { def_res = 0; }
- else if (est_def > 5) { def_res = 1; }
- if (est_def < -40) { def_res = 4; }
- else if (est_def < -5) { def_res = 3; }
-
- graphics->backend.txt.render_text("Health", pos + vec2 { 10, 80 });
- graphics->backend.txt.render_text(
- std::to_string((int)roundf(atk.hp)),
- pos + vec2 { 10+margin_amt, 80 });
- graphics->backend.txt.render_text("->",
- pos + vec2 { 10+margin_arrow, 80 });
- graphics->backend.txt.render_text(
- std::to_string((int)roundf(result.atk_hp)),
- pos + vec2 { 10+margin_mod, 80 });
- graphics->backend.txt.render_text(
- sres[atk_res],
- pos + vec2 { 10+margin_mod+20, 80 });
- {
- int txtwidth = graphics->backend.txt.get_width("Health");
- graphics->backend.txt.render_text("Health",
- pos + vec2 { w-10.0f-txtwidth, 80 });
- std::string label = std::to_string((int)roundf(def.hp));
- int txtwidthlabel = graphics->backend.txt.get_width(label);
- graphics->backend.txt.render_text(label,
- pos + vec2 { w-10.0f-margin_amt-txtwidthlabel, 80 });
- } {
- int txtwidth = graphics->backend.txt.get_width("<-");
- graphics->backend.txt.render_text("<-",
- pos + vec2 { w-10.0f-margin_arrow-txtwidth, 80 });
- } {
- std::string label = std::to_string((int)roundf(result.def_hp));
- int txtwidth = graphics->backend.txt.get_width(label);
- graphics->backend.txt.render_text(label,
- pos + vec2 { w-10.0f-margin_mod-txtwidth, 80 });
- } {
- int txtwidth = graphics->backend.txt.get_width(sres[def_res]);
- graphics->backend.txt.render_text(sres[def_res],
- pos + vec2 { w-10.0f-margin_mod-20-txtwidth, 80 });
- }
-
- {
- int batkh = render_attack_info_bonus(graphics, gst,
- pos + vec2 { 10, 95 }, atk, def, true, 0);
- int bdefh = render_attack_info_bonus(graphics, gst,
- pos + vec2 { 10, 95 + batkh + 15.0f }, atk, def, false, 0);
- } {
- int batkh = render_attack_info_bonus(graphics, gst,
- pos + vec2 { w-10.0f, 95 }, def, atk, true, 1);
- int bdefh = render_attack_info_bonus(graphics, gst,
- pos + vec2 { w-10.0f, 95 + batkh + 15.0f }, def, atk, false, 1);
- }
-}
-
-void Graphics::render (Gst &gst, View &view)
-{
- Ground &gr = gst.inv->ground;
- std::vector<Entity> &entities = gst.entities;
- vec2 res { (float)resx, (float)resy };
-
- for (int y=0; y<gr.sizey; y++) {
- for (int x=0; x<gr.sizex; x++) {
- Tile &tile = gst.inv->tiles[gr.tiles[gr.at(x,y)]];
- backend.render_sprite(
- (int)tile.spritebounds.x,
- (int)tile.spritebounds.y, 16, 16,
- (int)cam.pos.x + x*32, (int)cam.pos.y + y*32, 32, 32
- );
- }
- }
-
- for (Resource res : gr.resources) {
- int x = res.pos % gr.sizex;
- int y = res.pos / gr.sizex;
- backend.render_sprite(
- 16*res.kind, 16*2, 16, 16,
- (int)cam.pos.x + x*32, (int)cam.pos.y + y*32, 32, 32
- );
- }
-
- render_ents(this, gst, 0);
- render_ents(this, gst, 1);
-
- /* overlay */
- for (int y=0; y<gr.sizey; y++) {
- for (int x=0; x<gr.sizex; x++) {
- Tile &tile = gst.inv->tiles[gr.tiles[gr.at(x,y)]];
- backend.render_sprite(
- (int)tile.spritebounds.x,
- (int)tile.spritebounds.y-16, 16, 16,
- (int)cam.pos.x + x*32, (int)cam.pos.y + y*32-32, 32, 32
- );
- }
- }
-
- if (view.selected_entity != -1) {
- int i = view.selected_entity;
- Entity &ent = entities[i];
- Player &player = gst.get_player(ent.owner);
- float bound_y = ent.info->spritebounds.y;
- if (ent.info->unit == 0) { bound_y = player.level*16+16; }
- vec2 pos { (float)ent.x*32, (float)ent.y*32 };
- backend.render_sprite (
- (int)ent.info->spritebounds.x,
- (int)bound_y+256, 16, 16,
- (int)cam.pos.x + (int)pos.x,
- (int)cam.pos.y + (int)pos.y, 32, 32
- );
- }
-
- if (view.selected_ground != -1) {
- int x = view.selected_ground % gr.sizex;
- int y = view.selected_ground / gr.sizex;
- vec2 pos { (float)x*32, (float)y*32 };
- Tile &tile = gst.inv->tiles[gr.tiles[gr.at(x,y)]];
- backend.render_sprite(
- (int)tile.spritebounds.x,
- (int)tile.spritebounds.y+256-16, 16, 32,
- (int)cam.pos.x + (int)pos.x,
- (int)cam.pos.y + (int)pos.y-32, 32, 64
- );
- }
-
- for (int i=0; i<entities.size(); i++) {
- Entity &ent = entities[i];
- if (ent.info->unit == 1) {
- backend.render_rect(
- 0, 0, 0, 255,
- (int)cam.pos.x + (int)ent.x*32+2,
- (int)cam.pos.y + (int)ent.y*32+30, 28, 2
- );
- int amt = 28 * (entities[i].hp / 100);
- Player &player = gst.get_player(ent.owner);
- backend.render_rect(
- player.r, player.g, player.b, 255,
- (int)cam.pos.x + (int)ent.x*32+2,
- (int)cam.pos.y + (int)ent.y*32+30, amt, 2
- );
- }
- }
-
- render_menu(this, gst, view.menu_unit);
- render_menu(this, gst, view.menu_day);
- render_menu(this, gst, view.menu_build);
- render_menu(this, gst, view.menu_train);
- render_menu(this, gst, view.menu_trade);
- render_menu(this, gst, view.menu_age_up);
- render_menu_tech(this, gst, view);
-
- if (view.moves.size() > 0) {
- for (int m : view.moves) {
- int x = m % gr.sizex; int y = m / gr.sizex;
- backend.render_rect(
- 0, 120, 255, 100,
- (int)cam.pos.x + x*32, (int)cam.pos.y + y*32, 32, 32
- );
- }
- }
-
- if (view.attacks.size() > 0) {
- for (int m : view.attacks) {
- int x = m % gr.sizex; int y = m / gr.sizex;
- backend.render_rect(
- 255, 120, 0, 100,
- (int)cam.pos.x + x*32, (int)cam.pos.y + y*32, 32, 32
- );
- }
- }
-
- if (view.heals.size() > 0) {
- for (int m : view.heals) {
- int x = m % gr.sizex; int y = m / gr.sizex;
- backend.render_rect(
- 0, 200, 0, 100,
- (int)cam.pos.x + x*32, (int)cam.pos.y + y*32, 32, 32
- );
- }
- }
-
- if (view.converts.size() > 0) {
- for (int m : view.converts) {
- int x = m % gr.sizex; int y = m / gr.sizex;
- backend.render_rect(
- 200, 0, 200, 100,
- (int)cam.pos.x + x*32, (int)cam.pos.y + y*32, 32, 32
- );
- }
- }
-
- // top bar
- vec2 pos { 0,0 };
- backend.render_rect (
- 255,255,255,255,
- (int)pos.x,(int)pos.y,(int)res.x, 30
- );
- Player &player = gst.players[gst.turn];
- backend.render_rect (
- player.r, player.g, player.b, 255,
- (int)pos.x+5,(int)pos.y+5, 20, 20
- );
- std::string txtfood = std::to_string((int)roundf(player.res[0])) + "f";
- std::string txtgold = std::to_string((int)roundf(player.res[1])) + "g";
- backend.txt.render_text(
- txtfood, pos + vec2 { -backend.txt.get_width(txtfood) + res.x/2-10, 10 }
- );
- backend.txt.render_text(txtgold, pos + vec2 { res.x/2+10, 10 });
- std::string txtres = "Researching: ";
- if (player.researching != -1) {
- txtres += gst.inv->get_tech(player.researching)->name;
- } else { txtres += "None"; }
- float reswidth = backend.txt.get_width(txtres);
- backend.txt.render_text(txtres, pos + vec2 { res.x-reswidth-10, 10 });
-
- // low bar
- backend.render_rect (
- 255,255,255,255,
- 0,(int)res.y-30,(int)res.x, 30
- );
-
- // info stack box
- int info_ground = -1;
- if (view.hover_ground != -1) { info_ground = view.hover_ground; }
- if (view.selected_entity != -1) {
- int i = view.selected_entity;
- info_ground = gr.at(entities[i].x, entities[i].y);
- }
- if (view.selected_ground != -1) { info_ground = view.selected_ground; }
-
- if (info_ground != -1) {
- int unit = -1;
- int bld = -1;
- int x = info_ground % gr.sizex;
- int y = info_ground / gr.sizex;
- for (int i=0; i < gst.entities.size(); i++) {
- Entity &ent = gst.entities[i];
- if (ent.x == x && ent.y == y) {
- if (ent.info->unit) { unit = i; }
- else { bld = i; }
- }
- }
-
- float hoff = -95;
- if (bld != -1) hoff -= get_entity_info_height(gst.entities[bld]);
- if (unit != -1) hoff -= get_entity_info_height(gst.entities[unit]);
-
- if (unit != -1) {
- render_entity_info(this, gst, vec2 { 0, res.y-30+hoff }, unit);
- hoff += get_entity_info_height(gst.entities[unit]);
- }
- if (bld != -1) {
- render_entity_info(this, gst, vec2 { 0, res.y-30+hoff }, bld);
- hoff += get_entity_info_height(gst.entities[bld]);
- }
- render_tile_info(this, gst, vec2 { 0, res.y-30+hoff }, info_ground);
- }
-
- if (view.attacks.size() > 0 && view.hover_ground != -1) {
- int def = -1;
- int x = view.hover_ground % gr.sizex;
- int y = view.hover_ground / gr.sizex;
- for (int i=0; i < gst.entities.size(); i++) {
- Entity &ent = gst.entities[i];
- if (ent.x == x && ent.y == y && ent.owner != gst.turn) {
- def = i; break;
- }
- }
- if (def != -1) {
- render_attack_info(this, gst, vec2 { res.x/2-175, res.y/2-125 },
- view.selected_entity, def);
- }
- }
-}
-
-
-Graphics_sdl::Graphics_sdl (int resx, int resy) {
- SDL_Init(SDL_INIT_VIDEO);
-
- SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "0");
-
- window = SDL_CreateWindow("age", SDL_WINDOWPOS_UNDEFINED,
- SDL_WINDOWPOS_UNDEFINED, resx, resy, SDL_WINDOW_SHOWN
- | SDL_WINDOW_RESIZABLE);
- screenSurface = SDL_GetWindowSurface(window);
-
- rend = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
- SDL_SetRenderDrawBlendMode(rend, SDL_BLENDMODE_BLEND);
-
- load_sheet();
-
- txt.gRenderer = rend;
-}
-
-Graphics_sdl::~Graphics_sdl () {
- SDL_DestroyWindow(window);
- SDL_Quit();
-}
-
-SDL_Renderer* Graphics_sdl::get_renderer () { return rend; }
-
-void Graphics_sdl::present () {
- SDL_RenderPresent(rend);
- SDL_SetRenderDrawColor(rend, 0, 0, 0, 255);
- SDL_RenderClear(rend);
-}
-
-void Graphics_sdl::load_sheet () {
- SDL_Surface* surf = SDL_LoadBMP("content/sprites.bmp");
- SDL_SetColorKey(surf, SDL_TRUE, SDL_MapRGB(surf ->format,255,0,255));
- if (!surf) {
- std::cout << "Error loading image: " << SDL_GetError() << std::endl;
- system("pause");
- return;
- }
- txsprites = SDL_CreateTextureFromSurface(rend, surf);
- SDL_FreeSurface(surf);
-
- SDL_Surface* surftext = SDL_LoadBMP("content/gf.bmp");
- SDL_SetColorKey(surftext, SDL_TRUE, SDL_MapRGB(surftext ->format,255,0,255));
- if (!surftext) {
- std::cout << "Error loading image: " << SDL_GetError() << std::endl;
- system("pause");
- return;
- }
- txt.tex = SDL_CreateTextureFromSurface(rend, surftext);
- SDL_FreeSurface(surftext);
-}
-
-void Graphics_sdl::render_sprite (
- int x, int y, int w, int h,
- int u, int v, int s, int t)
-{
- SDL_Rect srcRect = { x, y, w, h };
- SDL_Rect dstRect = { u, v, s, t };
- SDL_RenderCopy(rend, txsprites, &srcRect, &dstRect);
-}
-
-void Graphics_sdl::render_sprite (
- int x, int y, int w, int h,
- int u, int v, int s, int t,
- int r, int g, int b)
-{
- SDL_SetTextureColorMod(txsprites, r, g, b);
- render_sprite(x, y, w, h, u, v, s, t);
- SDL_SetTextureColorMod(txsprites, 255, 255, 255);
-}
-
-void Graphics_sdl::render_rect (
- int r, int g, int b, int a,
- int x, int y, int w, int h)
-{
- SDL_SetRenderDrawColor(rend, r, g, b, a);
- SDL_Rect rect = { x, y, w, h };
- SDL_RenderFillRect(rend, &rect);
-}
-
-
-
-Graphics_sdl_text::Graphics_sdl_text () {
- for (int i=0; i<128; char_width[i++]=5);
- char_width['('] = 2; char_width[')'] = 2;
- char_width['['] = 2; char_width[']'] = 2;
- char_width['{'] = 3; char_width['}'] = 3;
- char_width[','] = 1; char_width['-'] = 5; char_width['.'] = 1;
- char_width['/'] = 4; char_width['!'] = 1;
- char_width[':'] = 1; char_width[';'] = 1;
- char_width['%'] = 4;
- char_width['<'] = 3; char_width['>'] = 3; char_width['='] = 4;
- char_width['I'] = 1;
- char_width['f'] = 4; char_width['i'] = 1; char_width['j'] = 3;
- char_width['l'] = 1; char_width['k'] = 4; char_width['t'] = 4;
-}
-
-int Graphics_sdl_text::get_width (std::string str) {
- int width = 0;
- for (int i=0; str[i]!='\0'; i++) {
- width += char_width[str[i]];
- if (str[i+1]!='\0') width++;
- }
- return width;
-}
-
-void Graphics_sdl_text::render_text (std::string str, vec2 off) {
- render_text(str, off, 0, 0, 0);
-}
-
-void Graphics_sdl_text::render_text (std::string str, vec2 off,
- int r, int g, int b)
-{
- SDL_SetTextureColorMod(tex, r, g, b);
- int width = 0;
- for (int i=0; str[i]!='\0'; i++) {
- int char_i = str[i];
- SDL_Rect srcRect = { (char_i%32)*6+1, (char_i/32)*12+1, 5, 11 };
- SDL_Rect dstRect = { (int)off.x+width, (int)off.y, 5, 11 };
- SDL_RenderCopy(gRenderer, tex, &srcRect, &dstRect);
- width += char_width[char_i]+1;
- }
-}
-
-/*
-void render_text_scaled (SDL_Renderer* rend, char str[],
- float off[], txtd *t, float scale)
-{
- int width = 0;
- for (int i=0; str[i]!='\0'; i++) {
- int char_i = str[i];
- SDL_Rect srcRect = { (char_i%32)*6+1, (char_i/32)*12+1, 5, 11 };
- SDL_Rect dstRect = { off[0]+width, off[1], 5*scale, 11*scale };
- SDL_RenderCopy(rend, t->tex, &srcRect, &dstRect);
- width += t->cw[char_i]*scale+1*scale;
- }
+#include <algorithm>
+#include <iostream>
+#include <string>
+
+#include <math.h>
+
+#include "graphics.h"
+#include "../game/menu.h"
+#include "../game/tile.h"
+#include "../game/constants.h"
+
+Graphics::~Graphics () {
+}
+
+void Graphics::present () {
+ backend.present();
+}
+
+void render_ent (Graphics *graphics, Gst &gst, Entity &ent,
+ vec2 pos, int dflag)
+{
+ Player &player = gst.players[ent.owner];
+ float bound_y = ent.info->spritebounds.y;
+ if (ent.info->unit == 0) { bound_y = player.level*16+16; }
+ int done = 0;
+ if (dflag == 1) done = 512;
+ graphics->backend.render_sprite(
+ (int)ent.info->spritebounds.x,
+ (int)bound_y+done, 16, 16,
+ (int)pos.x, (int)pos.y, 32, 32
+ );
+ if (dflag == 0) {
+ graphics->backend.render_sprite(
+ (int)ent.info->spritebounds.x,
+ (int)bound_y+768, 16, 16,
+ (int)pos.x, (int)pos.y, 32, 32,
+ player.r, player.g, player.b
+ );
+ }
+}
+
+void render_ents (Graphics *graphics, Gst &gst, int unit) {
+ std::vector<Entity> &entities = gst.entities;
+ for (int i=0; i<entities.size(); i++) {
+ if (entities[i].info->unit != unit) continue;
+ Player &player = gst.players[entities[i].owner];
+ int dflag = 0;
+ if (unit) dflag = entities[i].done;
+ vec2 pos {
+ graphics->cam.pos.x + entities[i].x*32,
+ graphics->cam.pos.y + entities[i].y*32
+ };
+ render_ent(graphics, gst, entities[i], pos, dflag);
+ }
+}
+
+void render_menu (Graphics *graphics, Gst &gst, Menu &menu) {
+ vec2 res { (float)graphics->resx, (float)graphics->resy };
+ if (menu.active) {
+ vec2 pos { res };
+ float height = menu.options.size() * 20;
+ vec2 size { 120, height+10 };
+ pos *= 0.5f;
+ pos -= size/2;
+ graphics->backend.render_rect(
+ 255,255,255,255,
+ menu.pos.x,menu.pos.y,menu.size.x,menu.size.y
+ );
+ float acc = 0;
+ for (Option opt : menu.options) {
+ int r=0, g=0, b=0;
+ if (opt.id == menu.over) {
+ Player &player = gst.players[gst.turn];
+ r = player.r; g = player.g; b = player.b;
+ }
+ graphics->backend.txt.render_text(
+ opt.name, menu.pos + vec2 {10, 10 + acc}, r, g, b);
+ float width = graphics->backend.txt.get_width(opt.name);
+ if (opt.cost.size() > 0) {
+ graphics->backend.txt.render_text(
+ std::to_string((int)roundf(opt.cost[0])) + "f",
+ menu.pos + vec2 { width + 20, 10 + acc });
+ graphics->backend.txt.render_text(
+ std::to_string((int)roundf(opt.cost[1])) + "g",
+ menu.pos + vec2 { width + 50, 10 + acc });
+ }
+ acc += 20;
+ }
+ }
+}
+
+void render_menu_tech (Graphics *graphics, Gst &gst, View &view) {
+ vec2 res { (float)graphics->resx, (float)graphics->resy };
+ if (view.menu_tech.active) {
+ vec2 pos { res };
+ float height = view.menu_tech.options.size() * 20;
+ vec2 size { 120, height+10 };
+ pos *= 0.5f;
+ pos -= size/2;
+ graphics->backend.render_rect(
+ 255,255,255,255,
+ view.menu_tech.pos.x,view.menu_tech.pos.y,
+ view.menu_tech.size.x,view.menu_tech.size.y
+ );
+
+ float x = 0, y = 0;
+ for (auto v : view.menu_tech.tech_opt_ordered) {
+ for (auto opt : v) {
+ int r=0, g=0, b=0;
+ Player &player = gst.players[gst.turn];
+ if (opt.tech->id == view.menu_tech.over) {
+ r = player.r; g = player.g; b = player.b;
+ }
+ if (!gst.check_req_tech(opt.tech, player)) {
+ r = 100; g = 100; b = 100;
+ }
+ if (player.has_tech(opt.tech->id)) {
+ r = constants::col_gud_r;
+ g = constants::col_gud_g;
+ b = constants::col_gud_b;
+ }
+ graphics->backend.txt.render_text(opt.name,
+ view.menu_tech.pos + vec2 {10 + x, 10 + y}, r, g, b);
+ float width = graphics->backend.txt.get_width(opt.name);
+ /*
+ if (opt.tech->cost.size() > 0) {
+ graphics->backend.txt.render_text(
+ std::to_string (opt.tech->cost[0]) + "f",
+ view.menu_tech.pos + vec2 { width + 20 + x, 10 + y });
+ graphics->backend.txt.render_text(
+ std::to_string (opt.tech->cost[1]) + "g",
+ view.menu_tech.pos + vec2 { width + 50 + x, 10 + y });
+ }*/
+ y += 10;
+ }
+ x += 150; y = 0;
+ }
+ }
+}
+
+
+int get_entity_info_height (Entity &ent) {
+ return 155+10*ent.info->abilities.size();
+}
+
+void render_entity_info (Graphics *graphics, Gst &gst, vec2 pos, int i) {
+ Entity &ent = gst.entities[i];
+ Player &player = gst.players[ent.owner];
+ auto &tech = player.tech_lookup;
+ int id = ent.info->id;
+ int w = 200, h = get_entity_info_height(ent);
+
+ graphics->backend.render_rect (0,0,0,255,
+ (int)pos.x,(int)pos.y,w,h);
+ graphics->backend.render_rect (255,255,255,255,
+ (int)pos.x+1,(int)pos.y+1,w-2,h-2);
+
+ graphics->backend.render_rect (
+ 0,0,0,255, (int)pos.x+w-32-10-1, (int)pos.y+10-1,34,34);
+ graphics->backend.render_rect (
+ 255,255,255,255, (int)pos.x+w-32-10, (int)pos.y+10,32,32);
+
+ render_ent(graphics, gst, ent, vec2 { w-32-10.0f, 10 } + pos, 0);
+
+ graphics->backend.txt.render_text(ent.info->name, pos + vec2 { 10, 10 });
+ graphics->backend.txt.render_text("Attack", pos + vec2 { 10, 30 });
+ float attack = ent.info->attack * (1+tech.id(id).attack);
+ graphics->backend.txt.render_text(
+ std::to_string((int)roundf(attack)), pos + vec2 { 90, 30 });
+ graphics->backend.txt.render_text("Defence", pos + vec2 { 10, 45 });
+ float defence = ent.info->defence * (1+tech.id(id).defence);
+ graphics->backend.txt.render_text(
+ std::to_string((int)roundf(defence)), pos + vec2 { 90, 45 });
+ graphics->backend.txt.render_text("Move", pos + vec2 { 10, 60 });
+ int move = ent.info->move + tech.id(id).move;
+ graphics->backend.txt.render_text(
+ std::to_string(move), pos + vec2 { 90, 60 });
+ graphics->backend.txt.render_text("Range", pos + vec2 { 10, 75 });
+ int range = ent.info->range + tech.id(id).range;
+ graphics->backend.txt.render_text(
+ std::to_string(range), pos + vec2 { 90, 75 });
+ graphics->backend.txt.render_text("Sight", pos + vec2 { 10, 90 });
+ int sight = ent.info->sight + tech.id(id).sight;
+ graphics->backend.txt.render_text(
+ std::to_string(sight), pos + vec2 { 90, 90 });
+ graphics->backend.txt.render_text("Health", pos + vec2 { 10, 105 });
+ graphics->backend.txt.render_text(
+ std::to_string((int)roundf(ent.hp)), pos + vec2 { 90, 105 });
+ graphics->backend.txt.render_text("Class", pos + vec2 { 10, 120 });
+ std::string ent_class = "";
+ switch (ent.info->ent_class) {
+ case EntityInfo::Class::inf: ent_class = "Infantry"; break;
+ case EntityInfo::Class::cav: ent_class = "Cavalry"; break;
+ case EntityInfo::Class::ran: ent_class = "Ranged"; break;
+ case EntityInfo::Class::sie: ent_class = "Siege"; break;
+ case EntityInfo::Class::bld: ent_class = "Building"; break;
+ }
+ graphics->backend.txt.render_text(ent_class, pos + vec2 { 90, 120 });
+ graphics->backend.txt.render_text("Abilities", pos + vec2 { 10, 135 });
+ std::string abname;
+ for (int s=0; s<ent.info->abilities.size(); s++) {
+ abname = gst.inv->abilities[ent.info->abilities[s]].name;
+ graphics->backend.txt.render_text(abname,
+ pos + vec2 { 90, 135+s*10.0f });
+ }
+}
+
+void render_tile_info (Graphics *graphics, Gst &gst, vec2 pos, int i) {
+ int x = i % gst.inv->ground.sizex;
+ int y = i / gst.inv->ground.sizex;
+ Tile &tile = gst.inv->tiles[gst.inv->ground.tiles[gst.inv->ground.at(x,y)]];
+
+ int w = 200, h = 95;
+ graphics->backend.render_rect (
+ 0,0,0,255,
+ (int)pos.x,(int)pos.y,w,h
+ );
+ graphics->backend.render_rect (
+ 255,255,255,255,
+ (int)pos.x+1,(int)pos.y+1,w-2,h-2
+ );
+
+ graphics->backend.render_sprite (
+ (int)tile.spritebounds.x,
+ (int)tile.spritebounds.y-16, 16, 32,
+ (int)pos.x + w-32-10,
+ (int)pos.y + 10-32, 32, 64
+ );
+
+ graphics->backend.txt.render_text(tile.name, pos + vec2 { 10, 10 });
+ graphics->backend.txt.render_text("Move", pos + vec2 { 10, 30 });
+ graphics->backend.txt.render_text(
+ std::to_string(tile.move_cost), pos + vec2 { 90, 30 });
+ graphics->backend.txt.render_text("Sight", pos + vec2 { 10, 45 });
+ graphics->backend.txt.render_text(
+ std::to_string(tile.sight_cost), pos + vec2 { 90, 45 });
+ graphics->backend.txt.render_text("Defence Bonus", pos + vec2 { 10, 60 });
+ graphics->backend.txt.render_text(
+ std::to_string((int)roundf(tile.defence_bonus*100))+"%", pos + vec2 { 90, 60 });
+ graphics->backend.txt.render_text("Range Bonus", pos + vec2 { 10, 75 });
+ graphics->backend.txt.render_text(
+ std::to_string(tile.range_bonus), pos + vec2 { 90, 75 });
+}
+
+int render_attack_info_bonus (Graphics *graphics, Gst &gst, vec2 pos,
+ Entity &atk, Entity &def, bool attack, int rtl)
+{
+ float margin_amt = constants::menu_attack_margin_amt;
+ float margin_arrow = constants::menu_attack_margin_arrow;
+ float margin_mod = constants::menu_attack_margin_mod;
+
+ std::vector<Bonus> bonuses;
+ if (attack) { bonuses = gst.get_bonuses(atk, def); }
+ else { bonuses = gst.get_bonuses(def, atk); }
+
+ float value = attack ? atk.info->attack : atk.info->defence;
+
+ {
+ std::string nlabel = attack ? "Attack" : "Defence";
+ float labw = graphics->backend.txt.get_width(nlabel);
+ graphics->backend.txt.render_text(nlabel,
+ pos + vec2 { -labw*rtl, 0 });
+ } {
+ std::string nlabel = std::to_string((int)roundf(value));
+ float labw = graphics->backend.txt.get_width(nlabel);
+ graphics->backend.txt.render_text(nlabel,
+ pos + vec2 { margin_amt*(1-rtl*2)-labw*rtl, 0 });
+ }
+
+ int bonusnum = 0; float atk_mod = 1;
+ for (int s=0; s<bonuses.size(); s++) {
+ Bonus &b = bonuses[s];
+ if (b.atk == attack) {
+ float idw = graphics->backend.txt.get_width(b.id_string());
+ graphics->backend.txt.render_text(
+ b.id_string(), pos + vec2 { -idw*rtl, 10.0f+bonusnum*10 });
+ std::string amt;
+ if (b.amt > 0) amt += "+";
+ amt += std::to_string((int)roundf(b.amt*100)) + "%";
+ float labw = graphics->backend.txt.get_width(amt);
+ graphics->backend.txt.render_text(
+ amt, pos + vec2 {
+ margin_amt*(1-rtl*2)-labw*rtl,
+ 10.0f+bonusnum*10 });
+ atk_mod += b.amt;
+ bonusnum ++;
+ }
+ }
+
+ if (bonusnum > 0) {
+ {
+ std::string label = rtl ? "<-" : "->";
+ float labw = graphics->backend.txt.get_width(label);
+ graphics->backend.txt.render_text(label,
+ pos + vec2 { margin_arrow*(1-rtl*2)-labw*rtl, 0 });
+ }
+ {
+ std::string label = std::to_string((int)roundf(value * atk_mod));
+ float labw = graphics->backend.txt.get_width(label);
+ graphics->backend.txt.render_text(label,
+ pos + vec2 { margin_mod*(1-rtl*2)-labw*rtl, 0 });
+ }
+ }
+
+ return bonusnum*10;
+}
+
+
+void render_attack_info (Graphics *graphics, Gst &gst, vec2 pos, int i, int j) {
+ float margin_amt = constants::menu_attack_margin_amt;
+ float margin_arrow = constants::menu_attack_margin_arrow;
+ float margin_mod = constants::menu_attack_margin_mod;
+
+ Entity &atk = gst.entities[i];
+ Entity &def = gst.entities[j];
+ int w = 300, h = 250;
+
+ graphics->backend.render_rect (0,0,0,255,
+ (int)pos.x,(int)pos.y,w,h);
+ graphics->backend.render_rect (255,255,255,255,
+ (int)pos.x+1,(int)pos.y+1,w-2,h-2);
+
+ graphics->backend.render_rect (
+ 0,0,0,255, (int)pos.x+10-1, (int)pos.y+35-1,34,34);
+ graphics->backend.render_rect (
+ 255,255,255,255, (int)pos.x+10, (int)pos.y+35,32,32);
+ graphics->backend.render_sprite (
+ (int)atk.info->spritebounds.x,
+ (int)atk.info->spritebounds.y, 16, 16,
+ (int)pos.x + 10,
+ (int)pos.y + 35, 32, 32
+ );
+ {
+ Tile &tile = gst.inv->tiles[gst.inv->ground.tiles[
+ gst.inv->ground.at(atk.x,atk.y)]];
+ graphics->backend.render_sprite (
+ (int)tile.spritebounds.x,
+ (int)tile.spritebounds.y-16, 16, 32,
+ (int)pos.x + 52,
+ (int)pos.y + 35-32, 32, 64
+ );
+ }
+
+ graphics->backend.render_rect (
+ 0,0,0,255, (int)pos.x+w-42-1, (int)pos.y+35-1,34,34);
+ graphics->backend.render_rect (
+ 255,255,255,255, (int)pos.x+w-42, (int)pos.y+35,32,32);
+ graphics->backend.render_sprite (
+ (int)def.info->spritebounds.x,
+ (int)def.info->spritebounds.y, 16, 16,
+ (int)pos.x + w-42,
+ (int)pos.y + 35, 32, 32
+ );
+ {
+ Tile &tile = gst.inv->tiles[gst.inv->ground.tiles[
+ gst.inv->ground.at(def.x,def.y)]];
+ graphics->backend.render_sprite (
+ (int)tile.spritebounds.x,
+ (int)tile.spritebounds.y-16, 16, 32,
+ (int)pos.x + w-84,
+ (int)pos.y + 35-32, 32, 64
+ );
+ }
+
+ graphics->backend.txt.render_text(atk.info->name, pos + vec2 { 10, 10 });
+ {
+ int txtwidth = graphics->backend.txt.get_width(def.info->name);
+ graphics->backend.txt.render_text(def.info->name,
+ pos + vec2 { w-10.0f-txtwidth, 10 });
+ }
+
+ BattleResult result = gst.battle_res(atk, def);
+ std::vector<std::string> sres = { "++", "+", "=", "-", "--" };
+ float atk_loss = atk.hp-result.atk_hp;
+ float def_loss = def.hp-result.def_hp;
+ float est_atk = def_loss - atk_loss;
+ float est_def = atk_loss - def_loss;
+ int atk_res = 2;
+ int def_res = 2;
+ if (est_atk > 40) { atk_res = 0; }
+ else if (est_atk > 5) { atk_res = 1; }
+ if (est_atk < -40) { atk_res = 4; }
+ else if (est_atk < -5) { atk_res = 3; }
+ if (est_def > 40) { def_res = 0; }
+ else if (est_def > 5) { def_res = 1; }
+ if (est_def < -40) { def_res = 4; }
+ else if (est_def < -5) { def_res = 3; }
+
+ graphics->backend.txt.render_text("Health", pos + vec2 { 10, 80 });
+ graphics->backend.txt.render_text(
+ std::to_string((int)roundf(atk.hp)),
+ pos + vec2 { 10+margin_amt, 80 });
+ graphics->backend.txt.render_text("->",
+ pos + vec2 { 10+margin_arrow, 80 });
+ graphics->backend.txt.render_text(
+ std::to_string((int)roundf(result.atk_hp)),
+ pos + vec2 { 10+margin_mod, 80 });
+ graphics->backend.txt.render_text(
+ sres[atk_res],
+ pos + vec2 { 10+margin_mod+20, 80 });
+ {
+ int txtwidth = graphics->backend.txt.get_width("Health");
+ graphics->backend.txt.render_text("Health",
+ pos + vec2 { w-10.0f-txtwidth, 80 });
+ std::string label = std::to_string((int)roundf(def.hp));
+ int txtwidthlabel = graphics->backend.txt.get_width(label);
+ graphics->backend.txt.render_text(label,
+ pos + vec2 { w-10.0f-margin_amt-txtwidthlabel, 80 });
+ } {
+ int txtwidth = graphics->backend.txt.get_width("<-");
+ graphics->backend.txt.render_text("<-",
+ pos + vec2 { w-10.0f-margin_arrow-txtwidth, 80 });
+ } {
+ std::string label = std::to_string((int)roundf(result.def_hp));
+ int txtwidth = graphics->backend.txt.get_width(label);
+ graphics->backend.txt.render_text(label,
+ pos + vec2 { w-10.0f-margin_mod-txtwidth, 80 });
+ } {
+ int txtwidth = graphics->backend.txt.get_width(sres[def_res]);
+ graphics->backend.txt.render_text(sres[def_res],
+ pos + vec2 { w-10.0f-margin_mod-20-txtwidth, 80 });
+ }
+
+ {
+ int batkh = render_attack_info_bonus(graphics, gst,
+ pos + vec2 { 10, 95 }, atk, def, true, 0);
+ int bdefh = render_attack_info_bonus(graphics, gst,
+ pos + vec2 { 10, 95 + batkh + 15.0f }, atk, def, false, 0);
+ } {
+ int batkh = render_attack_info_bonus(graphics, gst,
+ pos + vec2 { w-10.0f, 95 }, def, atk, true, 1);
+ int bdefh = render_attack_info_bonus(graphics, gst,
+ pos + vec2 { w-10.0f, 95 + batkh + 15.0f }, def, atk, false, 1);
+ }
+}
+
+void Graphics::render (Gst &gst, View &view)
+{
+ Ground &gr = gst.inv->ground;
+ std::vector<Entity> &entities = gst.entities;
+ vec2 res { (float)resx, (float)resy };
+
+ for (int y=0; y<gr.sizey; y++) {
+ for (int x=0; x<gr.sizex; x++) {
+ Tile &tile = gst.inv->tiles[gr.tiles[gr.at(x,y)]];
+ backend.render_sprite(
+ (int)tile.spritebounds.x,
+ (int)tile.spritebounds.y, 16, 16,
+ (int)cam.pos.x + x*32, (int)cam.pos.y + y*32, 32, 32
+ );
+ }
+ }
+
+ for (Resource res : gr.resources) {
+ int x = res.pos % gr.sizex;
+ int y = res.pos / gr.sizex;
+ backend.render_sprite(
+ 16*res.kind, 16*2, 16, 16,
+ (int)cam.pos.x + x*32, (int)cam.pos.y + y*32, 32, 32
+ );
+ }
+
+ render_ents(this, gst, 0);
+ render_ents(this, gst, 1);
+
+ /* overlay */
+ for (int y=0; y<gr.sizey; y++) {
+ for (int x=0; x<gr.sizex; x++) {
+ Tile &tile = gst.inv->tiles[gr.tiles[gr.at(x,y)]];
+ backend.render_sprite(
+ (int)tile.spritebounds.x,
+ (int)tile.spritebounds.y-16, 16, 16,
+ (int)cam.pos.x + x*32, (int)cam.pos.y + y*32-32, 32, 32
+ );
+ }
+ }
+
+ if (view.selected_entity != -1) {
+ int i = view.selected_entity;
+ Entity &ent = entities[i];
+ Player &player = gst.get_player(ent.owner);
+ float bound_y = ent.info->spritebounds.y;
+ if (ent.info->unit == 0) { bound_y = player.level*16+16; }
+ vec2 pos { (float)ent.x*32, (float)ent.y*32 };
+ backend.render_sprite (
+ (int)ent.info->spritebounds.x,
+ (int)bound_y+256, 16, 16,
+ (int)cam.pos.x + (int)pos.x,
+ (int)cam.pos.y + (int)pos.y, 32, 32
+ );
+ }
+
+ if (view.selected_ground != -1) {
+ int x = view.selected_ground % gr.sizex;
+ int y = view.selected_ground / gr.sizex;
+ vec2 pos { (float)x*32, (float)y*32 };
+ Tile &tile = gst.inv->tiles[gr.tiles[gr.at(x,y)]];
+ backend.render_sprite(
+ (int)tile.spritebounds.x,
+ (int)tile.spritebounds.y+256-16, 16, 32,
+ (int)cam.pos.x + (int)pos.x,
+ (int)cam.pos.y + (int)pos.y-32, 32, 64
+ );
+ }
+
+ for (int i=0; i<entities.size(); i++) {
+ Entity &ent = entities[i];
+ if (ent.info->unit == 1) {
+ backend.render_rect(
+ 0, 0, 0, 255,
+ (int)cam.pos.x + (int)ent.x*32+2,
+ (int)cam.pos.y + (int)ent.y*32+30, 28, 2
+ );
+ int amt = 28 * (entities[i].hp / 100);
+ Player &player = gst.get_player(ent.owner);
+ backend.render_rect(
+ player.r, player.g, player.b, 255,
+ (int)cam.pos.x + (int)ent.x*32+2,
+ (int)cam.pos.y + (int)ent.y*32+30, amt, 2
+ );
+ }
+ }
+
+ render_menu(this, gst, view.menu_unit);
+ render_menu(this, gst, view.menu_day);
+ render_menu(this, gst, view.menu_build);
+ render_menu(this, gst, view.menu_train);
+ render_menu(this, gst, view.menu_trade);
+ render_menu(this, gst, view.menu_age_up);
+ render_menu_tech(this, gst, view);
+
+ if (view.moves.size() > 0) {
+ for (int m : view.moves) {
+ int x = m % gr.sizex; int y = m / gr.sizex;
+ backend.render_rect(
+ 0, 120, 255, 100,
+ (int)cam.pos.x + x*32, (int)cam.pos.y + y*32, 32, 32
+ );
+ }
+ }
+
+ if (view.attacks.size() > 0) {
+ for (int m : view.attacks) {
+ int x = m % gr.sizex; int y = m / gr.sizex;
+ backend.render_rect(
+ 255, 120, 0, 100,
+ (int)cam.pos.x + x*32, (int)cam.pos.y + y*32, 32, 32
+ );
+ }
+ }
+
+ if (view.heals.size() > 0) {
+ for (int m : view.heals) {
+ int x = m % gr.sizex; int y = m / gr.sizex;
+ backend.render_rect(
+ 0, 200, 0, 100,
+ (int)cam.pos.x + x*32, (int)cam.pos.y + y*32, 32, 32
+ );
+ }
+ }
+
+ if (view.converts.size() > 0) {
+ for (int m : view.converts) {
+ int x = m % gr.sizex; int y = m / gr.sizex;
+ backend.render_rect(
+ 200, 0, 200, 100,
+ (int)cam.pos.x + x*32, (int)cam.pos.y + y*32, 32, 32
+ );
+ }
+ }
+
+ // top bar
+ vec2 pos { 0,0 };
+ backend.render_rect (
+ 255,255,255,255,
+ (int)pos.x,(int)pos.y,(int)res.x, 30
+ );
+ Player &player = gst.players[gst.turn];
+ backend.render_rect (
+ player.r, player.g, player.b, 255,
+ (int)pos.x+5,(int)pos.y+5, 20, 20
+ );
+ std::string txtfood = std::to_string((int)roundf(player.res[0])) + "f";
+ std::string txtgold = std::to_string((int)roundf(player.res[1])) + "g";
+ backend.txt.render_text(
+ txtfood, pos + vec2 { -backend.txt.get_width(txtfood) + res.x/2-10, 10 }
+ );
+ backend.txt.render_text(txtgold, pos + vec2 { res.x/2+10, 10 });
+ std::string txtres = "Researching: ";
+ if (player.researching != -1) {
+ txtres += gst.inv->get_tech(player.researching)->name;
+ } else { txtres += "None"; }
+ float reswidth = backend.txt.get_width(txtres);
+ backend.txt.render_text(txtres, pos + vec2 { res.x-reswidth-10, 10 });
+
+ // low bar
+ backend.render_rect (
+ 255,255,255,255,
+ 0,(int)res.y-30,(int)res.x, 30
+ );
+
+ // info stack box
+ int info_ground = -1;
+ if (view.hover_ground != -1) { info_ground = view.hover_ground; }
+ if (view.selected_entity != -1) {
+ int i = view.selected_entity;
+ info_ground = gr.at(entities[i].x, entities[i].y);
+ }
+ if (view.selected_ground != -1) { info_ground = view.selected_ground; }
+
+ if (info_ground != -1) {
+ int unit = -1;
+ int bld = -1;
+ int x = info_ground % gr.sizex;
+ int y = info_ground / gr.sizex;
+ for (int i=0; i < gst.entities.size(); i++) {
+ Entity &ent = gst.entities[i];
+ if (ent.x == x && ent.y == y) {
+ if (ent.info->unit) { unit = i; }
+ else { bld = i; }
+ }
+ }
+
+ float hoff = -95;
+ if (bld != -1) hoff -= get_entity_info_height(gst.entities[bld]);
+ if (unit != -1) hoff -= get_entity_info_height(gst.entities[unit]);
+
+ if (unit != -1) {
+ render_entity_info(this, gst, vec2 { 0, res.y-30+hoff }, unit);
+ hoff += get_entity_info_height(gst.entities[unit]);
+ }
+ if (bld != -1) {
+ render_entity_info(this, gst, vec2 { 0, res.y-30+hoff }, bld);
+ hoff += get_entity_info_height(gst.entities[bld]);
+ }
+ render_tile_info(this, gst, vec2 { 0, res.y-30+hoff }, info_ground);
+ }
+
+ if (view.attacks.size() > 0 && view.hover_ground != -1) {
+ int def = -1;
+ int x = view.hover_ground % gr.sizex;
+ int y = view.hover_ground / gr.sizex;
+ for (int i=0; i < gst.entities.size(); i++) {
+ Entity &ent = gst.entities[i];
+ if (ent.x == x && ent.y == y && ent.owner != gst.turn) {
+ def = i; break;
+ }
+ }
+ if (def != -1) {
+ render_attack_info(this, gst, vec2 { res.x/2-175, res.y/2-125 },
+ view.selected_entity, def);
+ }
+ }
+}
+
+
+Graphics_sdl::Graphics_sdl (int resx, int resy) {
+ SDL_Init(SDL_INIT_VIDEO);
+
+ SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "0");
+
+ window = SDL_CreateWindow("age", SDL_WINDOWPOS_UNDEFINED,
+ SDL_WINDOWPOS_UNDEFINED, resx, resy, SDL_WINDOW_SHOWN
+ | SDL_WINDOW_RESIZABLE);
+ screenSurface = SDL_GetWindowSurface(window);
+
+ rend = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
+ SDL_SetRenderDrawBlendMode(rend, SDL_BLENDMODE_BLEND);
+
+ load_sheet();
+
+ txt.gRenderer = rend;
+}
+
+Graphics_sdl::~Graphics_sdl () {
+ SDL_DestroyWindow(window);
+ SDL_Quit();
+}
+
+SDL_Renderer* Graphics_sdl::get_renderer () { return rend; }
+
+void Graphics_sdl::present () {
+ SDL_RenderPresent(rend);
+ SDL_SetRenderDrawColor(rend, 0, 0, 0, 255);
+ SDL_RenderClear(rend);
+}
+
+void Graphics_sdl::load_sheet () {
+ SDL_Surface* surf = SDL_LoadBMP("content/sprites.bmp");
+ SDL_SetColorKey(surf, SDL_TRUE, SDL_MapRGB(surf ->format,255,0,255));
+ if (!surf) {
+ std::cout << "Error loading image: " << SDL_GetError() << std::endl;
+ system("pause");
+ return;
+ }
+ txsprites = SDL_CreateTextureFromSurface(rend, surf);
+ SDL_FreeSurface(surf);
+
+ SDL_Surface* surftext = SDL_LoadBMP("content/gf.bmp");
+ SDL_SetColorKey(surftext, SDL_TRUE, SDL_MapRGB(surftext ->format,255,0,255));
+ if (!surftext) {
+ std::cout << "Error loading image: " << SDL_GetError() << std::endl;
+ system("pause");
+ return;
+ }
+ txt.tex = SDL_CreateTextureFromSurface(rend, surftext);
+ SDL_FreeSurface(surftext);
+}
+
+void Graphics_sdl::render_sprite (
+ int x, int y, int w, int h,
+ int u, int v, int s, int t)
+{
+ SDL_Rect srcRect = { x, y, w, h };
+ SDL_Rect dstRect = { u, v, s, t };
+ SDL_RenderCopy(rend, txsprites, &srcRect, &dstRect);
+}
+
+void Graphics_sdl::render_sprite (
+ int x, int y, int w, int h,
+ int u, int v, int s, int t,
+ int r, int g, int b)
+{
+ SDL_SetTextureColorMod(txsprites, r, g, b);
+ render_sprite(x, y, w, h, u, v, s, t);
+ SDL_SetTextureColorMod(txsprites, 255, 255, 255);
+}
+
+void Graphics_sdl::render_rect (
+ int r, int g, int b, int a,
+ int x, int y, int w, int h)
+{
+ SDL_SetRenderDrawColor(rend, r, g, b, a);
+ SDL_Rect rect = { x, y, w, h };
+ SDL_RenderFillRect(rend, &rect);
+}
+
+
+
+Graphics_sdl_text::Graphics_sdl_text () {
+ for (int i=0; i<128; char_width[i++]=5);
+ char_width['('] = 2; char_width[')'] = 2;
+ char_width['['] = 2; char_width[']'] = 2;
+ char_width['{'] = 3; char_width['}'] = 3;
+ char_width[','] = 1; char_width['-'] = 5; char_width['.'] = 1;
+ char_width['/'] = 4; char_width['!'] = 1;
+ char_width[':'] = 1; char_width[';'] = 1;
+ char_width['%'] = 4;
+ char_width['<'] = 3; char_width['>'] = 3; char_width['='] = 4;
+ char_width['I'] = 1;
+ char_width['f'] = 4; char_width['i'] = 1; char_width['j'] = 3;
+ char_width['l'] = 1; char_width['k'] = 4; char_width['t'] = 4;
+}
+
+int Graphics_sdl_text::get_width (std::string str) {
+ int width = 0;
+ for (int i=0; str[i]!='\0'; i++) {
+ width += char_width[str[i]];
+ if (str[i+1]!='\0') width++;
+ }
+ return width;
+}
+
+void Graphics_sdl_text::render_text (std::string str, vec2 off) {
+ render_text(str, off, 0, 0, 0);
+}
+
+void Graphics_sdl_text::render_text (std::string str, vec2 off,
+ int r, int g, int b)
+{
+ SDL_SetTextureColorMod(tex, r, g, b);
+ int width = 0;
+ for (int i=0; str[i]!='\0'; i++) {
+ int char_i = str[i];
+ SDL_Rect srcRect = { (char_i%32)*6+1, (char_i/32)*12+1, 5, 11 };
+ SDL_Rect dstRect = { (int)off.x+width, (int)off.y, 5, 11 };
+ SDL_RenderCopy(gRenderer, tex, &srcRect, &dstRect);
+ width += char_width[char_i]+1;
+ }
+}
+
+/*
+void render_text_scaled (SDL_Renderer* rend, char str[],
+ float off[], txtd *t, float scale)
+{
+ int width = 0;
+ for (int i=0; str[i]!='\0'; i++) {
+ int char_i = str[i];
+ SDL_Rect srcRect = { (char_i%32)*6+1, (char_i/32)*12+1, 5, 11 };
+ SDL_Rect dstRect = { off[0]+width, off[1], 5*scale, 11*scale };
+ SDL_RenderCopy(rend, t->tex, &srcRect, &dstRect);
+ width += t->cw[char_i]*scale+1*scale;
+ }
}*/ \ No newline at end of file
diff --git a/graphics/graphics.h b/graphics/graphics.h
index af8630a..a5b5eee 100644
--- a/graphics/graphics.h
+++ b/graphics/graphics.h
@@ -1,79 +1,79 @@
-#ifndef GRAPHICS_H
-#define GRAPHICS_H
-
-#include <vector>
-#include <string>
-
-#define SDL_MAIN_HANDLED
-#include <SDL2/SDL.h>
-
-#include "../game/gst.h"
-#include "../game/view.h"
-#include "cam.h"
-
-#include <string>
-
-
-class Graphics_sdl_text {
- public:
- Graphics_sdl_text();
- int get_width (std::string str);
- void render_text (std::string str, vec2 off);
- void render_text (std::string str, vec2 off, int r, int g, int b);
- SDL_Renderer* gRenderer;
- SDL_Texture *tex;
- int char_width[128];
-};
-
-
-class Graphics_sdl {
- public:
- Graphics_sdl (int resx, int resy);
- ~Graphics_sdl ();
- SDL_Renderer* get_renderer ();
- void load_sheet ();
- void present ();
- void change_res (int resx, int resy) {
- SDL_SetWindowSize(window, resx, resy);
- }
- void render_sprite (
- int x, int y, int w, int h,
- int u, int v, int s, int t);
- void render_rect (
- int r, int g, int b, int a,
- int x, int y, int w, int h);
- void render_sprite (
- int x, int y, int w, int h,
- int u, int v, int s, int t,
- int r, int g, int b);
-
- Graphics_sdl_text txt;
-
- private:
- SDL_Window* window = NULL;
- SDL_Surface* screenSurface = NULL;
- SDL_Renderer* rend = NULL;
- SDL_Texture* txsprites = NULL;
-};
-
-
-class Graphics {
- public:
- Graphics (int resx, int resy)
- : resx(resx), resy(resy), backend(resx, resy) {}
- ~Graphics ();
-
- Graphics_sdl backend;
-
- int resx, resy;
- Cam cam;
-
- void render (Gst &gst, View &view);
- void present ();
- void change_res (int x, int y) {
- resx = x; resy = y;
- backend.change_res(x, y);
- }
-};
-
+#ifndef GRAPHICS_H
+#define GRAPHICS_H
+
+#include <vector>
+#include <string>
+
+#define SDL_MAIN_HANDLED
+#include <SDL2/SDL.h>
+
+#include "../game/gst.h"
+#include "../game/view.h"
+#include "cam.h"
+
+#include <string>
+
+
+class Graphics_sdl_text {
+ public:
+ Graphics_sdl_text();
+ int get_width (std::string str);
+ void render_text (std::string str, vec2 off);
+ void render_text (std::string str, vec2 off, int r, int g, int b);
+ SDL_Renderer* gRenderer;
+ SDL_Texture *tex;
+ int char_width[128];
+};
+
+
+class Graphics_sdl {
+ public:
+ Graphics_sdl (int resx, int resy);
+ ~Graphics_sdl ();
+ SDL_Renderer* get_renderer ();
+ void load_sheet ();
+ void present ();
+ void change_res (int resx, int resy) {
+ SDL_SetWindowSize(window, resx, resy);
+ }
+ void render_sprite (
+ int x, int y, int w, int h,
+ int u, int v, int s, int t);
+ void render_rect (
+ int r, int g, int b, int a,
+ int x, int y, int w, int h);
+ void render_sprite (
+ int x, int y, int w, int h,
+ int u, int v, int s, int t,
+ int r, int g, int b);
+
+ Graphics_sdl_text txt;
+
+ private:
+ SDL_Window* window = NULL;
+ SDL_Surface* screenSurface = NULL;
+ SDL_Renderer* rend = NULL;
+ SDL_Texture* txsprites = NULL;
+};
+
+
+class Graphics {
+ public:
+ Graphics (int resx, int resy)
+ : resx(resx), resy(resy), backend(resx, resy) {}
+ ~Graphics ();
+
+ Graphics_sdl backend;
+
+ int resx, resy;
+ Cam cam;
+
+ void render (Gst &gst, View &view);
+ void present ();
+ void change_res (int x, int y) {
+ resx = x; resy = y;
+ backend.change_res(x, y);
+ }
+};
+
#endif \ No newline at end of file
diff --git a/main.cpp b/main.cpp
index be62a7d..d6e0255 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,117 +1,117 @@
-#include <iostream>
-#include <vector>
-
-#include "umath/vec2.h"
-
-#include "graphics/graphics.h"
-#include "commands/commands.h"
-#include "timing/timing.h"
-#include "game/entity.h"
-#include "game/ground.h"
-#include "game/playercontrol.h"
-#include "game/gst.h"
-#include "game/tile.h"
-#include "game/load.h"
-
-#include "game/ai/engine.h"
-#include "game/ai/performer.h"
-
-
-int main () {
- Graphics graphics (900, 600);
- Commands_sdl com;
- timing_sdl timing (60);
-
- Player_control control;
-
- float ts = 16;
-
- Inv inv;
- load_json(inv);
-
- inv.ground.build(15,15);
- inv.ground.tiles[1] = 1;
- inv.ground.tiles[8] = 1;
- inv.ground.tiles[11] = 2;
- inv.ground.tiles[12] = 2;
- for (int i=0; i<2000; i+=37) {
- inv.ground.tiles[i%(inv.ground.sizex*inv.ground.sizey)] = 2;
- inv.ground.tiles[(i+1)%(inv.ground.sizex*inv.ground.sizey)] = 2;
- }
- for (int i=0; i<2000; i+=71) {
- inv.ground.tiles[i%(inv.ground.sizex*inv.ground.sizey)] = 1;
- }
- inv.ground.resources.emplace_back(inv.ground.at(3, 4), Resource::Type::gold);
- inv.ground.resources.emplace_back(inv.ground.at(4, 4), Resource::Type::food);
-
-
- Gst gst { &inv };
-
- gst.players.emplace_back(255, 0, 0, 0);
- gst.players[0].res = std::vector<float> { 1500, 1500 };
- gst.players.emplace_back(0, 0, 255, 1);
- gst.players[1].res = std::vector<float> { 1500, 1500 };
- gst.players[0].level = 2;
-
- gst.entities.emplace_back(5, 1, inv.get_info("Town Center"), 0);
- gst.entities.emplace_back(6, 1, inv.get_info("Barracks"), 0);
- gst.entities.emplace_back(5, 0, inv.get_info("Stable"), 0);
- gst.entities.emplace_back(4, 1, inv.get_info("Market"), 0);
- gst.entities.emplace_back(1, 1, inv.get_info("Villager"), 0);
- gst.entities.emplace_back(2, 1, inv.get_info("Light Cavalry"), 0);
- gst.entities.emplace_back(4, 2, inv.get_info("Light Cavalry"), 1);
- gst.entities.emplace_back(10, 10, inv.get_info("Villager"), 1);
- gst.entities.emplace_back(1, 5, inv.get_info("Villager"), 1);
- gst.entities.emplace_back(2, 5, inv.get_info("Militia"), 1);
- gst.entities.emplace_back(0, 0, inv.get_info("Scout Cavalry"), 0);
- gst.entities.emplace_back(1, 0, inv.get_info("Persian War Elephants"), 0);
- gst.entities.emplace_back(0, 1, inv.get_info("Scorpions"), 1);
- gst.entities.emplace_back(1, 2, inv.get_info("Archers"), 1);
- gst.entities.emplace_back(4, 3, inv.get_info("Monks"), 0);
-
- View view (vec2 { (float)graphics.resx, (float)graphics.resy });
-
- vec2 mouselast { 0, 0 };
-
- while(true) {
- if (com.process_events()) break;
- if (com.resx != -1) {
- graphics.change_res(com.resx, com.resy);
- view.res = vec2 { (float)com.resx, (float)com.resy };
- }
- vec2 mousepos { (float)com.mx, (float)com.my };
- vec2 mousedelta { mousepos };
- mousedelta -= mouselast;
-
- if (com.mclick[1]) {
- graphics.cam.pos += mousedelta;
- }
-
- mouselast = vec2 { (float)com.mx, (float)com.my };
-
- timing.process();
- while (timing.check_process()) {
- com.process_clicks();
- view.process(gst, graphics.cam.pos, mousepos, com.mheld);
- if (com.check_key(SDL_SCANCODE_ESCAPE)) {
- view.back = 1;
- }
-
- if (com.check_key(SDL_SCANCODE_SPACE)) {
- ai::engine eng { gst };
- auto best = eng.get_best();
-
- ai::performer perf { gst };
- gst = perf.apply(best);
- }
-
- control.process(gst, view);
- com.process_keys();
- }
- if (timing.check_render()) {
- graphics.render(gst, view);
- graphics.present();
- }
- }
- return 0;
+#include <iostream>
+#include <vector>
+
+#include "umath/vec2.h"
+
+#include "graphics/graphics.h"
+#include "commands/commands.h"
+#include "timing/timing.h"
+#include "game/entity.h"
+#include "game/ground.h"
+#include "game/playercontrol.h"
+#include "game/gst.h"
+#include "game/tile.h"
+#include "game/load.h"
+
+#include "game/ai/engine.h"
+#include "game/ai/performer.h"
+
+
+int main () {
+ Graphics graphics (900, 600);
+ Commands_sdl com;
+ timing_sdl timing (60);
+
+ Player_control control;
+
+ float ts = 16;
+
+ Inv inv;
+ load_json(inv);
+
+ inv.ground.build(15,15);
+ inv.ground.tiles[1] = 1;
+ inv.ground.tiles[8] = 1;
+ inv.ground.tiles[11] = 2;
+ inv.ground.tiles[12] = 2;
+ for (int i=0; i<2000; i+=37) {
+ inv.ground.tiles[i%(inv.ground.sizex*inv.ground.sizey)] = 2;
+ inv.ground.tiles[(i+1)%(inv.ground.sizex*inv.ground.sizey)] = 2;
+ }
+ for (int i=0; i<2000; i+=71) {
+ inv.ground.tiles[i%(inv.ground.sizex*inv.ground.sizey)] = 1;
+ }
+ inv.ground.resources.emplace_back(inv.ground.at(3, 4), Resource::Type::gold);
+ inv.ground.resources.emplace_back(inv.ground.at(4, 4), Resource::Type::food);
+
+
+ Gst gst { &inv };
+
+ gst.players.emplace_back(255, 0, 0, 0);
+ gst.players[0].res = std::vector<float> { 1500, 1500 };
+ gst.players.emplace_back(0, 0, 255, 1);
+ gst.players[1].res = std::vector<float> { 1500, 1500 };
+ gst.players[0].level = 2;
+
+ gst.entities.emplace_back(5, 1, inv.get_info("Town Center"), 0);
+ gst.entities.emplace_back(6, 1, inv.get_info("Barracks"), 0);
+ gst.entities.emplace_back(5, 0, inv.get_info("Stable"), 0);
+ gst.entities.emplace_back(4, 1, inv.get_info("Market"), 0);
+ gst.entities.emplace_back(1, 1, inv.get_info("Villager"), 0);
+ gst.entities.emplace_back(2, 1, inv.get_info("Light Cavalry"), 0);
+ gst.entities.emplace_back(4, 2, inv.get_info("Light Cavalry"), 1);
+ gst.entities.emplace_back(10, 10, inv.get_info("Villager"), 1);
+ gst.entities.emplace_back(1, 5, inv.get_info("Villager"), 1);
+ gst.entities.emplace_back(2, 5, inv.get_info("Militia"), 1);
+ gst.entities.emplace_back(0, 0, inv.get_info("Scout Cavalry"), 0);
+ gst.entities.emplace_back(1, 0, inv.get_info("Persian War Elephants"), 0);
+ gst.entities.emplace_back(0, 1, inv.get_info("Scorpions"), 1);
+ gst.entities.emplace_back(1, 2, inv.get_info("Archers"), 1);
+ gst.entities.emplace_back(4, 3, inv.get_info("Monks"), 0);
+
+ View view (vec2 { (float)graphics.resx, (float)graphics.resy });
+
+ vec2 mouselast { 0, 0 };
+
+ while(true) {
+ if (com.process_events()) break;
+ if (com.resx != -1) {
+ graphics.change_res(com.resx, com.resy);
+ view.res = vec2 { (float)com.resx, (float)com.resy };
+ }
+ vec2 mousepos { (float)com.mx, (float)com.my };
+ vec2 mousedelta { mousepos };
+ mousedelta -= mouselast;
+
+ if (com.mclick[1]) {
+ graphics.cam.pos += mousedelta;
+ }
+
+ mouselast = vec2 { (float)com.mx, (float)com.my };
+
+ timing.process();
+ while (timing.check_process()) {
+ com.process_clicks();
+ view.process(gst, graphics.cam.pos, mousepos, com.mheld);
+ if (com.check_key(SDL_SCANCODE_ESCAPE)) {
+ view.back = 1;
+ }
+
+ if (com.check_key(SDL_SCANCODE_SPACE)) {
+ ai::engine eng { gst };
+ auto best = eng.get_best();
+
+ ai::performer perf { gst };
+ gst = perf.apply(best);
+ }
+
+ control.process(gst, view);
+ com.process_keys();
+ }
+ if (timing.check_render()) {
+ graphics.render(gst, view);
+ graphics.present();
+ }
+ }
+ return 0;
} \ No newline at end of file
diff --git a/notes.txt b/notes.txt
index 71a8ba7..c06a3ea 100644
--- a/notes.txt
+++ b/notes.txt
@@ -1,47 +1,47 @@
-DEV
-[x] level restrict train and build
-[x] current tech gui
-[x] tech bonus addition
-[x] some tech effects
-[x] tc and market trade
-[x] age up menu
-[x] end day upgrade on age up
-[x] end day heal when on bld
-[x] bld ages upgrades (just graphical)
-[x] train problem
-[x] more train problems (normal blds train mercs & monks in barracks)
-[x] market (+50g mercs & discount tech)
-[x] tech effects
-[x] veterancy ranks
-[x] heal
-[x] convert
-[ ] relics
-[x] tower diagonal constraint
-[ ] tower defence effect -> new bonus type
-[ ] castle
-[ ] frenzy special case
-[ ] gui tech
-[ ] gui production
-[ ] gui train build
-[ ] unit tech requirement (paladin, champion, imp siege)
-[ ] fsm back
-[ ] undo
-[x] bld defence bonus
-[ ] demolish
-[x] imp entities
-[ ] gst state / invariant
-[ ] map saveload
-[ ] map editor
-
-[ ] use maps to speed up lookups (even in ground.pos -> ent)
-
-ART
-[x] imp unit sprites
-[x] sprites stable, uni, market, church, tower and bld upgrade
-[ ] castle
-
-BUGS
-[ ] wheelbarrow doesn't work
-[ ] search player by id, not by index
-
+DEV
+[x] level restrict train and build
+[x] current tech gui
+[x] tech bonus addition
+[x] some tech effects
+[x] tc and market trade
+[x] age up menu
+[x] end day upgrade on age up
+[x] end day heal when on bld
+[x] bld ages upgrades (just graphical)
+[x] train problem
+[x] more train problems (normal blds train mercs & monks in barracks)
+[x] market (+50g mercs & discount tech)
+[x] tech effects
+[x] veterancy ranks
+[x] heal
+[x] convert
+[ ] relics
+[x] tower diagonal constraint
+[ ] tower defence effect -> new bonus type
+[ ] castle
+[ ] frenzy special case
+[ ] gui tech
+[ ] gui production
+[ ] gui train build
+[ ] unit tech requirement (paladin, champion, imp siege)
+[ ] fsm back
+[ ] undo
+[x] bld defence bonus
+[ ] demolish
+[x] imp entities
+[ ] gst state / invariant
+[ ] map saveload
+[ ] map editor
+
+[ ] use maps to speed up lookups (even in ground.pos -> ent)
+
+ART
+[x] imp unit sprites
+[x] sprites stable, uni, market, church, tower and bld upgrade
+[ ] castle
+
+BUGS
+[ ] wheelbarrow doesn't work
+[ ] search player by id, not by index
+
[x] trained man at arms, bad alloc \ No newline at end of file
diff --git a/timing/timing.cpp b/timing/timing.cpp
index 37c5f40..38c9c29 100644
--- a/timing/timing.cpp
+++ b/timing/timing.cpp
@@ -1,44 +1,44 @@
-#include "timing.h"
-
-timing_sdl::timing_sdl (double fps) {
- frame_time = 1/fps;
- last_time = SDL_GetTicks();
- frame_counter = 0;
- tot_time = 0;
- unprocessed_time = 0;
- frames = 0;
- render = false;
-}
-
-void timing_sdl::process () {
- render = false;
-
- double startTime = SDL_GetTicks();
- double passedTime = (startTime - last_time)/1000;
- last_time = startTime;
-
- unprocessed_time += passedTime;
- frame_counter += passedTime;
- tot_time += passedTime;
-
- if (frame_counter >= 1.0) {
- //printf("FPS: %i | %f ms\n", frames, 1000.0 / ((double)frames));
- frames = 0;
- frame_counter = 0;
- }
-}
-
-bool timing_sdl::check_process () {
- if (unprocessed_time > frame_time) {
- render = true;
- unprocessed_time -= frame_time;
- return true;
- } else {
- return false;
- }
-}
-
-bool timing_sdl::check_render () {
- if (render) { frames ++; }
- return render;
+#include "timing.h"
+
+timing_sdl::timing_sdl (double fps) {
+ frame_time = 1/fps;
+ last_time = SDL_GetTicks();
+ frame_counter = 0;
+ tot_time = 0;
+ unprocessed_time = 0;
+ frames = 0;
+ render = false;
+}
+
+void timing_sdl::process () {
+ render = false;
+
+ double startTime = SDL_GetTicks();
+ double passedTime = (startTime - last_time)/1000;
+ last_time = startTime;
+
+ unprocessed_time += passedTime;
+ frame_counter += passedTime;
+ tot_time += passedTime;
+
+ if (frame_counter >= 1.0) {
+ //printf("FPS: %i | %f ms\n", frames, 1000.0 / ((double)frames));
+ frames = 0;
+ frame_counter = 0;
+ }
+}
+
+bool timing_sdl::check_process () {
+ if (unprocessed_time > frame_time) {
+ render = true;
+ unprocessed_time -= frame_time;
+ return true;
+ } else {
+ return false;
+ }
+}
+
+bool timing_sdl::check_render () {
+ if (render) { frames ++; }
+ return render;
} \ No newline at end of file
diff --git a/timing/timing.h b/timing/timing.h
index f420582..f036abc 100644
--- a/timing/timing.h
+++ b/timing/timing.h
@@ -1,24 +1,24 @@
-#ifndef TIMING_H
-#define TIMING_H
-
-#define SDL_MAIN_HANDLED
-#include <SDL2/SDL.h>
-
-class timing_sdl {
- public:
- timing_sdl(double fps);
- void process();
- bool check_process();
- bool check_render();
-
- private:
- double frame_time;
- double last_time;
- double frame_counter;
- double tot_time;
- double unprocessed_time;
- int frames;
- bool render;
-};
-
+#ifndef TIMING_H
+#define TIMING_H
+
+#define SDL_MAIN_HANDLED
+#include <SDL2/SDL.h>
+
+class timing_sdl {
+ public:
+ timing_sdl(double fps);
+ void process();
+ bool check_process();
+ bool check_render();
+
+ private:
+ double frame_time;
+ double last_time;
+ double frame_counter;
+ double tot_time;
+ double unprocessed_time;
+ int frames;
+ bool render;
+};
+
#endif \ No newline at end of file
diff --git a/umath/intersect.h b/umath/intersect.h
index 1cb1923..2705707 100644
--- a/umath/intersect.h
+++ b/umath/intersect.h
@@ -1,6 +1,6 @@
-#ifndef INTERSECT_H
-#define INTERSECT_H
-
-bool intersect_
-
+#ifndef INTERSECT_H
+#define INTERSECT_H
+
+bool intersect_
+
#endif \ No newline at end of file
diff --git a/umath/vec2.h b/umath/vec2.h
index ee72143..248dcc1 100644
--- a/umath/vec2.h
+++ b/umath/vec2.h
@@ -1,33 +1,33 @@
-#ifndef VEC2_H
-#define VEC2_H
-
-class vec2 {
- public:
- float x;
- float y;
-
- vec2() : x(0), y(0) {};
- vec2(float x, float y) : x(x), y(y) {};
-
- vec2(const vec2 &oth) { x = oth.x; y = oth.y; };
- vec2(vec2 &oth) { x = oth.x; y = oth.y; };
-
- vec2 operator+(const vec2 &rhs) {
- return vec2 { x + rhs.x, y + rhs.y };
- }
- vec2 operator-(const vec2 &rhs) {
- return vec2 { x - rhs.x, y - rhs.y };
- }
- vec2 operator*(const float m) {
- return vec2 { x * m, y * m };
- }
- vec2 operator/(const float m) {
- return vec2 { x / m, y / m };
- }
- vec2 operator+=(vec2 oth) { x += oth.x; y += oth.y; }
- vec2 operator-=(vec2 oth) { x -= oth.x; y -= oth.y; }
- vec2 operator*=(float m) { x *= m; y *= m; }
- vec2 operator/=(float m) { x /= m; y /= m; }
-};
-
+#ifndef VEC2_H
+#define VEC2_H
+
+class vec2 {
+ public:
+ float x;
+ float y;
+
+ vec2() : x(0), y(0) {};
+ vec2(float x, float y) : x(x), y(y) {};
+
+ vec2(const vec2 &oth) { x = oth.x; y = oth.y; };
+ vec2(vec2 &oth) { x = oth.x; y = oth.y; };
+
+ vec2 operator+(const vec2 &rhs) {
+ return vec2 { x + rhs.x, y + rhs.y };
+ }
+ vec2 operator-(const vec2 &rhs) {
+ return vec2 { x - rhs.x, y - rhs.y };
+ }
+ vec2 operator*(const float m) {
+ return vec2 { x * m, y * m };
+ }
+ vec2 operator/(const float m) {
+ return vec2 { x / m, y / m };
+ }
+ vec2 operator+=(vec2 oth) { x += oth.x; y += oth.y; }
+ vec2 operator-=(vec2 oth) { x -= oth.x; y -= oth.y; }
+ vec2 operator*=(float m) { x *= m; y *= m; }
+ vec2 operator/=(float m) { x /= m; y /= m; }
+};
+
#endif \ No newline at end of file