lightweight operation and simple AI\r
- Not practical; client would still need to show smooth movement.\r
\r
+SUGG: Make a system for pregenerating quick information for mapblocks, so\r
+ that the client can show them as cubes before they are actually sent\r
+ or even generated.\r
+\r
Gaming ideas:\r
-------------\r
\r
FIXME: The new optimized map sending doesn't sometimes send enough blocks\r
from big caves and such\r
\r
+Environment:\r
+------------\r
+\r
TODO: A list of "active blocks" in which stuff happens.\r
+ Add a never-resetted game timer to the server\r
+ Add a timestamp value to blocks\r
\r
Misc. stuff:\r
------------\r
-* Make an "environment metafile" to store at least time of day\r
-* Move digging property stuff from material.{h,cpp} to mapnode.cpp...\r
- - Or maybe move content_features to material.{h,cpp}?\r
-* Maybe:\r
- Make a system for pregenerating quick information for mapblocks, so\r
- that the client can show them as cubes before they are actually sent\r
- or even generated.\r
+* Move digging property stuff from material.{h,cpp} to mapnode.cpp\r
+ - ...Or maybe move content_features to material.{h,cpp}?\r
\r
Making it more portable:\r
------------------------\r
-* Some MSVC: std::sto* are defined without a namespace and collide\r
- with the ones in utility.h\r
+ \r
+Stuff to do before release:\r
+---------------------------\r
+- Player default privileges and default password\r
+- Chat privilege\r
+- Some simple block-based dynamic stuff in the world (finish the\r
+ ActiveBlockModifier stuff)\r
+- Protocol version field\r
+- Consider getting some textures from cisoun's texture pack\r
+- Add a long step function to objects that is called with the time\r
+ difference when block activates\r
\r
======================================================================\r
\r
#include "materials.h"\r
#include "game.h"\r
#include "keycode.h"\r
-#include "sha1.h"\r
-#include "base64.h"\r
\r
// This makes textures\r
ITextureSource *g_texturesource = NULL;\r
\r
playername = wide_to_narrow(menudata.name);\r
\r
- // Get an sha-1 hash of the player's name combined with\r
- // the password entered. That's what the server uses as\r
- // their password. (Exception : if the password field is\r
- // blank, we send a blank password - this is for backwards\r
- // compatibility with password-less players).\r
- if(menudata.password.length() > 0)\r
- {\r
- std::string slt=playername + wide_to_narrow(menudata.password);\r
- SHA1 *sha1 = new SHA1();\r
- sha1->addBytes(slt.c_str(), slt.length());\r
- unsigned char *digest = sha1->getDigest();\r
- password = base64_encode(digest, 20);\r
- free(digest);\r
- }\r
- else\r
- {\r
- password = "";\r
- }\r
+ password = translatePassword(playername, menudata.password);\r
\r
address = wide_to_narrow(menudata.address);\r
int newport = stoi(wide_to_narrow(menudata.port));\r