From a0e8f3afd3444e4ad7e8647672c51555b74bd218 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Tue, 15 Feb 2011 20:53:29 +0200 Subject: might work good on cmake+msvc now --- CMakeLists.txt | 13 ++--- cmake/Modules/FindIrrlicht.cmake | 4 +- data/stone.png | Bin 951 -> 1563 bytes doc/README.txt | 99 ++++++++++++++++++++++++++++++++------- minetest.conf.example | 2 + src/CMakeLists.txt | 12 +++-- src/defaultsettings.cpp | 2 + src/tile.cpp | 27 ++++++++--- 8 files changed, 121 insertions(+), 38 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0e218990c..a0f248d13 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,12 +77,13 @@ set(CPACK_PACKAGE_CONTACT "Perttu Ahola ") if(WIN32) # For some reason these aren't copied otherwise - if(BUILD_CLIENT) - install(FILES bin/minetest.exe DESTINATION bin) - endif() - if(BUILD_SERVER) - install(FILES bin/minetestserver.exe DESTINATION bin) - endif() + # NOTE: For some reason now it seems to work without these + #if(BUILD_CLIENT) + # install(FILES bin/minetest.exe DESTINATION bin) + #endif() + #if(BUILD_SERVER) + # install(FILES bin/minetestserver.exe DESTINATION bin) + #endif() set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION_STRING}-win32") diff --git a/cmake/Modules/FindIrrlicht.cmake b/cmake/Modules/FindIrrlicht.cmake index 01e7088c9..a5d0bdd0b 100644 --- a/cmake/Modules/FindIrrlicht.cmake +++ b/cmake/Modules/FindIrrlicht.cmake @@ -22,7 +22,7 @@ endif() FIND_PATH(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h PATHS - "${IRRLICHT_SOURCE_DIR_INCLUDE}" + ${IRRLICHT_SOURCE_DIR_INCLUDE} /usr/local/include/irrlicht /usr/include/irrlicht ) @@ -31,7 +31,7 @@ FIND_PATH(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h FIND_LIBRARY(IRRLICHT_LIBRARY NAMES libIrrlicht.a Irrlicht PATHS - "${IRRLICHT_SOURCE_DIR_LIBS}" + ${IRRLICHT_SOURCE_DIR_LIBS} /usr/local/lib /usr/lib ) diff --git a/data/stone.png b/data/stone.png index 1d8aee9d5..c7a453e3f 100644 Binary files a/data/stone.png and b/data/stone.png differ diff --git a/doc/README.txt b/doc/README.txt index 7c672478b..fe6448770 100644 --- a/doc/README.txt +++ b/doc/README.txt @@ -1,7 +1,7 @@ Minetest-c55 --------------- An InfiniMiner/Minecraft inspired game. -Copyright (c) 2010 Perttu Ahola +Copyright (c) 2010-2011 Perttu Ahola This is a development version: ------------------------------ @@ -9,11 +9,6 @@ This is a development version: - Please report any bugs to me. That way I can fix them to the next release. - debug.txt is useful when the game crashes. -Public servers: ---------------- - kray.dy.fi :30000 (friend's server) - celeron.55.lt :30000 (my own server) - Controls: --------- - See the in-game pause menu @@ -22,7 +17,7 @@ Map directory: -------------- - Map is stored in a directory, which can be removed to generate a new map. - There is a command-line option for it: --map-dir -- As default, it is located in: +- For a RUN_IN_PLACE build, it is located in: ../map - Otherwise something like this: Windows: C:\Documents and Settings\user\Application Data\minetest\map @@ -35,7 +30,7 @@ Configuration file: - Path to file can be passed as a parameter to the executable: --config - Defaults: - - If built with -DRUN_IN_PLACE: + - If built with -DRUN_IN_PLACE=1: ../minetest.conf ../../minetest.conf - Otherwise something like this: @@ -73,21 +68,89 @@ $ ./minetest - Note that the Debug build is considerably slower Compiling on Windows: -- NOTE: Seems that the CMake build system produces executables that don't work - for many people. The old build system is still included, but it's not - documented anywhere. -- You need CMake, Irrlicht, Zlib and Visual Studio or MinGW - - you can get zlibwapi.lib from a file called zlib125dll.zip -- NOTE: Probably it will not work easily and you will need to fix some stuff. +--------------------- + +- You need: + * CMake: + http://www.cmake.org/cmake/resources/software.html + * MinGW or Visual Studio + http://www.mingw.org/ + http://msdn.microsoft.com/en-us/vstudio/default + * Irrlicht SDK 1.7: + http://irrlicht.sourceforge.net/downloads.html + * Zlib headers (zlib125.zip) + http://www.winimage.com/zLibDll/index.html + * Zlib library (zlibwapi.lib and zlibwapi.dll from zlib125dll.zip): + http://www.winimage.com/zLibDll/index.html + * And, of course, Minetest-c55: + http://celeron.55.lt/~celeron55/minetest/download - Steps: + - Select a directory called DIR hereafter in which you will operate. + - Make sure you have CMake and a compiler installed. + - Download all the other stuff to DIR and extract them into there. All those + packages contain a nice base directory in them, which should end up being + the direct subdirectories of DIR. + - You will end up with a directory structure like this (+=dir, -=file): + ----------------- + + DIR + - zlib-1.2.5.tar.gz + - zlib125dll.zip + - irrlicht-1.7.1.zip + - 110214175330.zip (or whatever, this is the minetest source) + + zlib-1.2.5 + - zlib.h + + win32 + ... + + zlib125dll + - readme.txt + + dll32 + ... + + irrlicht-1.7.1 + + lib + + include + ... + + minetest + + src + + doc + - CMakeLists.txt + ... + ----------------- - Start up the CMake GUI + - Select "Browse Source..." and select DIR/minetest + - Now, if using MSVC: + - Select "Browse Build..." and select DIR/minetest-build + - Else if using MinGW: + - Select "Browse Build..." and select DIR/minetest + - Select "Configure" - Select your compiler - - Hit "Configure" - - Set up some options and paths + - It will warn about missing stuff, ignore that at this point. (later don't) + - Make sure the configuration is as follows + (note that the versions may differ for you): + ----------------- + BUILD_CLIENT [X] + BUILD_SERVER [ ] + CMAKE_BUILD_TYPE Release + CMAKE_INSTALL_PREFIX DIR/minetest-install + IRRLICHT_SOURCE_DIR DIR/irrlicht-1.7.1 + RUN_IN_PLACE [X] + WARN_ALL [ ] + ZLIB_DLL DIR/zlib125dll/dll32/zlibwapi.dll + ZLIB_INCLUDE_DIR DIR/zlib-1.2.5 + ZLIB_LIBRARIES DIR/zlib125dll/dll32/zlibwapi.lib + ----------------- - Hit "Configure" - Hit "Generate" - - MSVC: Open the generated .sln and build it - MinGW: Browse to the build directory and run 'make' + If using MSVC: + - Open the generated minetest.sln + - Build the ALL_BUILD project + - Build the INSTALL project + - You should now have a working game executable in + DIR/minetest-install/bin/minetest.exe + - Additionally you may create a zip package by building the PACKAGE project. + If using MinGW: + - Using a command line, browse to the build directory and run 'make' + - You should now have a working game executable in + DIR/minetest/bin/minetest.exe License of Minetest-c55 ----------------------- diff --git a/minetest.conf.example b/minetest.conf.example index 37c93a5a2..24865da7d 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -26,6 +26,8 @@ #new_style_water = true #new_style_leaves = true #frametime_graph = false +#enable_texture_atlas = true +#texture_path = # Server side stuff diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6d9601c65..3fccce665 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -5,7 +5,9 @@ if(RUN_IN_PLACE) add_definitions ( -DRUN_IN_PLACE ) endif(RUN_IN_PLACE) -set(USE_GPROF 0 CACHE BOOL "Use -pg flag for g++") +if(NOT MSVC) + set(USE_GPROF 0 CACHE BOOL "Use -pg flag for g++") +endif() # Use cmake_config.h add_definitions ( -DUSE_CMAKE_CONFIG_H ) @@ -22,9 +24,9 @@ if(WIN32) set(ZLIB_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/../../zlib/zlib-1.2.5" CACHE PATH "Zlib include directory") set(ZLIB_LIBRARIES "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.lib" - CACHE PATH "Path to zlibwapi.lib") + CACHE FILEPATH "Path to zlibwapi.lib") set(ZLIB_DLL "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.dll" - CACHE PATH "Path to zlibwapi.dll (for installation)") + CACHE FILEPATH "Path to zlibwapi.dll (for installation)") else() # Unix probably if(BUILD_CLIENT) @@ -149,7 +151,7 @@ if(MSVC) if(BUILD_SERVER) set_target_properties(minetestserver PROPERTIES - COMPILE_FLAGS "/D SERVER") + COMPILE_DEFINITIONS "/D SERVER") endif(BUILD_SERVER) else() @@ -170,7 +172,7 @@ else() if(BUILD_SERVER) set_target_properties(minetestserver PROPERTIES - COMPILE_FLAGS "-DSERVER") + COMPILE_DEFINITIONS "-DSERVER") endif(BUILD_SERVER) endif() diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 63163add9..72f63d9fb 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -42,6 +42,8 @@ void set_default_settings() g_settings.setDefault("new_style_water", "false"); g_settings.setDefault("new_style_leaves", "true"); g_settings.setDefault("frametime_graph", "false"); + g_settings.setDefault("enable_texture_atlas", "true"); + g_settings.setDefault("texture_path", ""); g_settings.setDefault("free_move", "false"); g_settings.setDefault("continuous_forward", "false"); diff --git a/src/tile.cpp b/src/tile.cpp index 1bf09caff..aa4b3d042 100644 --- a/src/tile.cpp +++ b/src/tile.cpp @@ -19,6 +19,16 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "tile.h" #include "debug.h" +#include "main.h" // for g_settings + +inline std::string getTexturePath(std::string filename) +{ + std::string texture_path = g_settings.get("texture_path"); + if(texture_path == "") + return porting::getDataPath(filename.c_str()); + else + return texture_path + '/' + filename; +} TextureSource::TextureSource(IrrlichtDevice *device): m_device(device), @@ -36,7 +46,10 @@ TextureSource::TextureSource(IrrlichtDevice *device): m_name_to_id[""] = 0; // Build main texture atlas - buildMainAtlas(); + if(g_settings.getBool("enable_texture_atlas")) + buildMainAtlas(); + else + dstream<<"INFO: Not building texture atlas."<createImageFromFile( - porting::getDataPath(name.c_str()).c_str()); + getTexturePath(name.c_str()).c_str()); if(img == NULL) continue; @@ -517,7 +530,7 @@ void TextureSource::buildMainAtlas() Write image to file so that it can be inspected */ /*driver->writeImageToFile(atlas_img, - porting::getDataPath("main_atlas.png").c_str());*/ + getTexturePath("main_atlas.png").c_str());*/ } video::IImage* generate_image_from_scratch(std::string name, @@ -596,7 +609,7 @@ bool generate_image(std::string part_of_name, video::IImage *& baseimg, if(part_of_name[0] != '[') { // A normal texture; load it from a file - std::string path = porting::getDataPath(part_of_name.c_str()); + std::string path = getTexturePath(part_of_name.c_str()); dstream<<"INFO: getTextureIdDirect(): Loading path \""< pos_other(0, 16 * progression); video::IImage *crackimage = driver->createImageFromFile( - porting::getDataPath("crack.png").c_str()); + getTexturePath("crack.png").c_str()); if(crackimage) { @@ -755,7 +768,7 @@ bool generate_image(std::string part_of_name, video::IImage *& baseimg, <<"\" to combined ("<createImageFromFile( - porting::getDataPath(filename.c_str()).c_str()); + getTexturePath(filename.c_str()).c_str()); if(img) { core::dimension2d dim = img->getDimension(); @@ -814,7 +827,7 @@ bool generate_image(std::string part_of_name, video::IImage *& baseimg, std::string filename = part_of_name.substr(9); - std::string path = porting::getDataPath(filename.c_str()); + std::string path = getTexturePath(filename.c_str()); dstream<<"INFO: getTextureIdDirect(): Loading path \""<