aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/README.txt238
-rw-r--r--doc/changelog.txt11
-rw-r--r--doc/mapformat.txt89
-rw-r--r--doc/protocol.txt72
4 files changed, 171 insertions, 239 deletions
diff --git a/doc/README.txt b/doc/README.txt
deleted file mode 100644
index 645e2a560..000000000
--- a/doc/README.txt
+++ /dev/null
@@ -1,238 +0,0 @@
-Minetest-c55
----------------
-An InfiniMiner/Minecraft inspired game.
-Copyright (c) 2010-2011 Perttu Ahola <celeron55@gmail.com>
-
-Further documentation:
-----------------------
-- Website: http://celeron.55.lt/~celeron55/minetest/
-- Wiki: http://celeron.55.lt/~celeron55/minetest/wiki/
-- Forum: http://celeron.55.lt/~celeron55/minetest/forum/
-
-This is a development version:
-------------------------------
-- Don't expect it to work as well as a finished game will.
-- Please report any bugs to me. That way I can fix them to the next release.
- - debug.txt is useful when the game crashes.
-
-Controls:
----------
-- See the in-game pause menu
-- Settable in the configuration file, see the section below.
-
-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
-- 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
- Linux: ~/.minetest/map
- OS X: ~/Library/Application Support/minetest/map
-
-Configuration file:
--------------------
-- An optional configuration file can be used. See minetest.conf.example.
-- Path to file can be passed as a parameter to the executable:
- --config <path-to-file>
-- Defaults:
- - If built with -DRUN_IN_PLACE=1:
- ../minetest.conf
- ../../minetest.conf
- - Otherwise something like this:
- Windows: C:\Documents and Settings\user\Application Data\minetest\minetest.conf
- Linux: ~/.minetest/minetest.conf
- OS X: ~/Library/Application Support/minetest.conf
-
-Command-line options:
----------------------
-- Use --help
-
-Compiling on GNU/Linux:
------------------------
-
-Install dependencies. Here's an example for Debian/Ubuntu:
-$ apt-get install build-essential libirrlicht-dev cmake libbz2-dev libpng12-dev libjpeg8-dev libxxf86vm-dev libgl1-mesa-dev
-
-Download source, extract (this is the URL to the latest of source repository, which might not work at all times):
-$ wget https://bitbucket.org/celeron55/minetest/get/tip.tar.gz
-$ tar xf tip.tar.gz
-$ cd minetest
-
-Build a version that runs directly from the source directory:
-$ cmake . -DRUN_IN_PLACE=1
-$ make -j2
-
-Run it:
-$ cd bin
-$ ./minetest
-
-- Use cmake . -LH to see all CMake options and their current state
-- If you want to install it system-wide (or are making a distribution package), you will want to use -DRUN_IN_PLACE=0
-- You can build a bare server or a bare client by specifying -DBUILD_CLIENT=0 or -DBUILD_SERVER=0
-- You can select between Release and Debug build by -DCMAKE_BUILD_TYPE=<Debug or Release>
- - Note that the Debug build is considerably slower
-
-Compiling on Windows:
----------------------
-
-- 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
- - 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"
- If using MSVC:
- - Open the generated minetest.sln
- - The project defaults to the "Debug" configuration. Make very sure to
- select "Release", unless you want to debug some stuff (it's slower)
- - Build the ALL_BUILD project
- - Build the INSTALL project
- - You should now have a working game with the executable in
- DIR/minetest-install/bin/minetest.exe
- - Additionally you may create a zip package by building the PACKAGE
- project.
- If using MinGW:
- - Using the command line, browse to the build directory and run 'make'
- (or mingw32-make or whatever it happens to be)
- - You should now have a working game with the executable in
- DIR/minetest/bin/minetest.exe
-
-License of Minetest-c55
------------------------
-
-Minetest-c55
-Copyright (C) 2010-2011 celeron55, Perttu Ahola <celeron55@gmail.com>
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Irrlicht
----------------
-
-This program uses the Irrlicht Engine. http://irrlicht.sourceforge.net/
-
- The Irrlicht Engine License
-
-Copyright © 2002-2005 Nikolaus Gebhardt
-
-This software is provided 'as-is', without any express or implied
-warranty. In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute
-it freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you
- must not claim that you wrote the original software. If you use
- this software in a product, an acknowledgment in the product
- documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must
- not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source
- distribution.
-
-
-JThread
----------------
-
-This program uses the JThread library. License for JThread follows:
-
-Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-IN THE SOFTWARE.
-
-
diff --git a/doc/changelog.txt b/doc/changelog.txt
index f43a68f12..5a01b6bc4 100644
--- a/doc/changelog.txt
+++ b/doc/changelog.txt
@@ -3,7 +3,12 @@ Minetest-c55 changelog
This should contain all the major changes.
For minor stuff, refer to the commit log of the repository.
-X:
+2011-06-02:
+- Password crash on windows fixed
+- Optimized server CPU usage a lot
+- Furnaces now work also while players are not near to them
+
+2011-05-29:
- Optimized smooth lighting
- A number of small fixes
- Added clouds and simple skyboxes
@@ -13,6 +18,10 @@ X:
- Slightly updated map format
- Player passwords
- All textures first searched from texture_path
+- Map directory ("map") has been renamed to "world" (just rename it to load an old world)
+- Mouse inversion (invert_mouse)
+- Grass doesn't grow immediately anymore
+- Fence added
2011-04-24:
- Smooth lighting with simple ambient occlusion
diff --git a/doc/mapformat.txt b/doc/mapformat.txt
new file mode 100644
index 000000000..a0241804e
--- /dev/null
+++ b/doc/mapformat.txt
@@ -0,0 +1,89 @@
+I'll try to quickly document the newest block format in here (might contain
+errors). Refer to the mapgen or minetestmapper script for the directory
+structure and file naming. There are two sector namings possible,
+sector/XXXXZZZZ and sector/XXX/ZZZ.
+
+There also exists files map_meta.txt and chunk_meta, that are used by the
+generator. If they are not found or invalid, the generator will currently
+behave quite strangely.
+
+The MapBlock file format (sectors2/XXX/ZZZ/YYYY):
+-------------------------------------------------
+
+NOTE: Byte order is MSB first.
+
+u8 version
+- map format version number, this one is version 17
+
+u8 flags
+- Flag bitmasks:
+ - 0x01: is_underground: Should be set to 0 if there will be no light
+ obstructions above the block. If/when sunlight of a block is updated and
+ there is no block above it, this value is checked for determining whether
+ sunlight comes from the top.
+ - 0x02: day_night_differs: Whether the lighting of the block is different on
+ day and night. Only blocks that have this bit set are updated when day
+ transforms to night.
+ - 0x04: lighting_expired: If true, lighting is invalid and should be updated.
+ If you can't calculate lighting in your generator properly, you could try
+ setting this 1 to everything and setting the uppermost block in every
+ sector as is_underground=0. I am quite sure it doesn't work properly,
+ though.
+
+zlib-compressed map data:
+- content:
+ u8[4096]: content types
+ u8[4096]: param1 values
+ u8[4096]: param2 values
+
+zlib-compressed node metadata
+- content:
+ u16 version (=1)
+ u16 count of metadata
+ foreach count:
+ u16 position (= p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X)
+ u16 type_id
+ u16 content_size
+ u8[content_size] misc. stuff contained in the metadata
+
+u16 mapblockobject_count
+- always write as 0.
+- if read != 0, just fail.
+
+foreach mapblockobject_count:
+ - deprecated, should not be used. Length of this data can only be known by
+ properly parsing it. Just hope not to run into any of this.
+
+u8 static object version:
+- currently 0
+
+u16 static_object_count
+
+foreach static_object_count:
+ u8 type (object type-id)
+ s32 pos_x * 1000
+ s32 pos_y * 1000
+ s32 pos_z * 1000
+ u16 data_size
+ u8[data_size] data
+
+u32 timestamp
+- Timestamp when last saved, as seconds from starting the game.
+- 0xffffffff = invalid/unknown timestamp, nothing will be done with the time
+ difference when loaded (recommended)
+
+Node metadata format:
+---------------------
+
+Sign metadata:
+ u16 string_len
+ u8[string_len] string
+
+Furnace metadata:
+ TBD
+
+Chest metadata:
+ TBD
+
+// END
+
diff --git a/doc/protocol.txt b/doc/protocol.txt
new file mode 100644
index 000000000..da2d3394f
--- /dev/null
+++ b/doc/protocol.txt
@@ -0,0 +1,72 @@
+Minetest-c55 protocol (incomplete, early draft):
+Updated 2011-06-18
+
+A custom protocol over UDP.
+Integers are big endian.
+Refer to connection.{h,cpp} for further reference.
+
+Initialization:
+- A dummy reliable packet with peer_id=PEER_ID_INEXISTENT=0 is sent to the server:
+ - Actually this can be sent without the reliable packet header, too, i guess,
+ but the sequence number in the header allows the sender to re-send the
+ packet without accidentally getting a double initialization.
+ - Packet content:
+ # Basic header
+ u32 protocol_id = PROTOCOL_ID = 0x4f457403
+ u16 sender_peer_id = PEER_ID_INEXISTENT = 0
+ u8 channel = 0
+ # Reliable packet header
+ u8 type = TYPE_RELIABLE = 3
+ u16 seqnum = SEQNUM_INITIAL = 65500
+ # Original packet header
+ u8 type = TYPE_ORIGINAL = 1
+ # And no actual payload.
+- Server responds with something like this:
+ - Packet content:
+ # Basic header
+ u32 protocol_id = PROTOCOL_ID = 0x4f457403
+ u16 sender_peer_id = PEER_ID_INEXISTENT = 0
+ u8 channel = 0
+ # Reliable packet header
+ u8 type = TYPE_RELIABLE = 3
+ u16 seqnum = SEQNUM_INITIAL = 65500
+ # Control packet header
+ u8 type = TYPE_CONTROL = 0
+ u8 controltype = CONTROLTYPE_SET_PEER_ID = 1
+ u16 peer_id_new = assigned peer id to client (other than 0 or 1)
+- Then the connection can be disconnected by sending:
+ - Packet content:
+ # Basic header
+ u32 protocol_id = PROTOCOL_ID = 0x4f457403
+ u16 sender_peer_id = whatever was gotten in CONTROLTYPE_SET_PEER_ID
+ u8 channel = 0
+ # Control packet header
+ u8 type = TYPE_CONTROL = 0
+ u8 controltype = CONTROLTYPE_DISCO = 2
+
+- Here's a quick untested connect-disconnect done in PHP:
+# host: ip of server (use gethostbyname(hostname) to get from a dns name)
+# port: port of server
+function check_if_minetestserver_up($host, $port)
+{
+ $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
+ $timeout = array("sec" => 1, "usec" => 0);
+ socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, $timeout);
+ $buf = "\x4f\x45\x74\x03\x00\x00\x00\x03\xff\xdc\x01";
+ socket_sendto($socket, $buf, strlen($buf), 0, $host, $port);
+ $buf = socket_read($socket, 1000);
+ if($buf != "")
+ {
+ # We got a reply! read the peer id from it.
+ $peer_id = substr($buf, 9, 2);
+
+ # Disconnect
+ $buf = "\x4f\x45\x74\x03".$peer_id."\x00\x00\x02";
+ socket_sendto($socket, $buf, strlen($buf), 0, $host, $port);
+ socket_close($socket);
+
+ return true;
+ }
+ return false;
+}
+