summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.lib1
-rw-r--r--src/command.cpp8
-rw-r--r--src/date.cpp3
-rw-r--r--src/debug.cpp17
-rw-r--r--src/debug.h6
-rw-r--r--src/network/network.cpp26
-rw-r--r--src/network/network.h11
-rw-r--r--src/network/network_data.cpp7
-rw-r--r--src/openttd.cpp2
-rw-r--r--src/players.cpp2
-rw-r--r--src/saveload.cpp4
-rw-r--r--src/video/sdl_v.cpp1
12 files changed, 41 insertions, 47 deletions
diff --git a/config.lib b/config.lib
index ebdf4fae8..efb308289 100644
--- a/config.lib
+++ b/config.lib
@@ -2242,6 +2242,7 @@ showhelp() {
echo ""
echo "Features and packages:"
echo " --enable-debug[=LVL] enable debug-mode (LVL=[0123], 0 is release)"
+ echo " --enable_desync_debug=[LVL] enable desync debug options (LVL=[012], 0 is none"
echo " --enable-profiling enables profiling"
echo " --enable-dedicated compile a dedicated server (without video)"
echo " --enable-static enable static compile (doesn't work for"
diff --git a/src/command.cpp b/src/command.cpp
index 38193d41c..95dde1d7f 100644
--- a/src/command.cpp
+++ b/src/command.cpp
@@ -18,6 +18,8 @@
#include "gfx_func.h"
#include "functions.h"
#include "town.h"
+#include "date_func.h"
+#include "debug.h"
const char *_cmd_text = NULL;
@@ -613,11 +615,7 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback,
return true;
}
#endif /* ENABLE_NETWORK */
-#ifdef DEBUG_DUMP_COMMANDS
- extern Date _date;
- extern DateFract _date_fract;
- debug_dump_commands("ddc:cmd:%d;%d;%d;%d;%d;%d;%d;%s\n", _date, _date_fract, (int)_current_player, tile, p1, p2, cmd, _cmd_text);
-#endif /* DUMP_COMMANDS */
+ DebugDumpCommands("ddc:cmd:%d;%d;%d;%d;%d;%d;%d;%s\n", _date, _date_fract, (int)_current_player, tile, p1, p2, cmd, _cmd_text);
/* update last build coordinate of player. */
if (tile != 0 && IsValidPlayer(_current_player)) {
diff --git a/src/date.cpp b/src/date.cpp
index 7c9ac1226..c6de516aa 100644
--- a/src/date.cpp
+++ b/src/date.cpp
@@ -13,6 +13,7 @@
#include "functions.h"
#include "date_func.h"
#include "vehicle_base.h"
+#include "debug.h"
#ifdef DEBUG_DUMP_COMMANDS
#include "saveload.h"
#include "town_map.h"
@@ -282,7 +283,7 @@ void IncreaseDate()
char name[MAX_PATH];
snprintf(name, lengthof(name), "dmp_cmds_%d.sav", _date);
SaveOrLoad(name, SL_SAVE, AUTOSAVE_DIR);
- debug_dump_commands("ddc:save:%s\n", name);
+ DebugDumpCommands("ddc:save:%s\n", name);
#endif /* DUMP_COMMANDS */
if (_opt.autosave != 0 && (_cur_month % _autosave_months[_opt.autosave]) == 0) {
_do_autosave = true;
diff --git a/src/debug.cpp b/src/debug.cpp
index 1b811b9cc..d6104f9b0 100644
--- a/src/debug.cpp
+++ b/src/debug.cpp
@@ -176,3 +176,20 @@ const char *GetDebugString()
return dbgstr;
}
+
+#ifdef DEBUG_DUMP_COMMANDS
+#include "fileio.h"
+
+void CDECL DebugDumpCommands(const char *s, ...)
+{
+ static FILE *f = FioFOpenFile("commands-out.log", "wb", AUTOSAVE_DIR);
+ if (f == NULL) return;
+
+ va_list va;
+ va_start(va, s);
+ vfprintf(f, s, va);
+ va_end(va);
+
+ fflush(f);
+}
+#endif /* DEBUG_DUMP_COMMANDS */
diff --git a/src/debug.h b/src/debug.h
index 30b495e6f..4432a5666 100644
--- a/src/debug.h
+++ b/src/debug.h
@@ -132,4 +132,10 @@ const char *GetDebugString();
void ShowInfo(const char *str);
void CDECL ShowInfoF(const char *str, ...);
+#ifdef DEBUG_DUMP_COMMANDS
+ void CDECL DebugDumpCommands(const char *s, ...);
+#else /* DEBUG_DUMP_COMMANDS */
+ static inline void DebugDumpCommands(const char *s, ...) {}
+#endif /* DEBUG_DUMP_COMMANDS */
+
#endif /* DEBUG_H */
diff --git a/src/network/network.cpp b/src/network/network.cpp
index 625c04821..cba0c3829 100644
--- a/src/network/network.cpp
+++ b/src/network/network.cpp
@@ -34,7 +34,7 @@ extern const char _openttd_revision[];
#include "../string_func.h"
#ifdef DEBUG_DUMP_COMMANDS
#include "../core/alloc_func.hpp"
-#endif
+#endif /* DEBUG_DUMP_COMMANDS */
/* Check whether NETWORK_NUM_LANDSCAPES is still in sync with NUM_LANDSCAPE */
assert_compile((int)NETWORK_NUM_LANDSCAPES == (int)NUM_LANDSCAPE);
@@ -193,9 +193,7 @@ void CDECL NetworkTextMessage(NetworkAction action, uint16 color, bool self_send
break;
}
-#ifdef DEBUG_DUMP_COMMANDS
- debug_dump_commands("ddc:cmsg:%d;%d;%s\n", _date, _date_fract, message);
-#endif /* DUMP_COMMANDS */
+ DebugDumpCommands("ddc:cmsg:%d;%d;%s\n", _date, _date_fract, message);
IConsolePrintF(color, "%s", message);
AddChatMessage(color, duration, "%s", message);
}
@@ -1236,9 +1234,7 @@ static bool NetworkDoClientLoop()
if (_sync_seed_1 != _random_seeds[0][0]) {
#endif
NetworkError(STR_NETWORK_ERR_DESYNC);
-#ifdef DEBUG_DUMP_COMMANDS
- debug_dump_commands("ddc:serr:%d;%d\n", _date, _date_fract);
-#endif /* DUMP_COMMANDS */
+ DebugDumpCommands("ddc:serr:%d;%d\n", _date, _date_fract);
DEBUG(net, 0, "Sync error detected!");
NetworkClientError(NETWORK_RECV_STATUS_DESYNC, DEREF_CLIENT(0));
return false;
@@ -1313,7 +1309,7 @@ void NetworkGameLoop()
sscanf(&buff[8], "%d;%d;%d;%d;%d;%d;%d;%s", &next_date, &next_date_fract, &player, &cp->tile, &cp->p1, &cp->p2, &cp->cmd, cp->text);
cp->player = (Owner)player;
}
-#endif /* DUMP_COMMANDS */
+#endif /* DEBUG_DUMP_COMMANDS */
bool send_frame = false;
@@ -1467,18 +1463,4 @@ bool IsNetworkCompatibleVersion(const char *other)
return strncmp(_openttd_revision, other, NETWORK_REVISION_LENGTH - 1) == 0;
}
-#ifdef DEBUG_DUMP_COMMANDS
-void CDECL debug_dump_commands(const char *s, ...)
-{
- static FILE *f = FioFOpenFile("commands-out.log", "wb", AUTOSAVE_DIR);
- if (f == NULL) return;
-
- va_list va;
- va_start(va, s);
- vfprintf(f, s, va);
- va_end(va);
-
- fflush(f);
-}
-#endif /* DEBUG_DUMP_COMMANDS */
#endif /* ENABLE_NETWORK */
diff --git a/src/network/network.h b/src/network/network.h
index d2a18749b..81075d137 100644
--- a/src/network/network.h
+++ b/src/network/network.h
@@ -18,17 +18,6 @@
// nothing will happen.
//#define ENABLE_NETWORK_SYNC_EVERY_FRAME
-/*
- * Dumps all commands that are sent/received to stderr and saves every month.
- * This log can become quite large over time; say in the order of two to three
- * times the bandwidth used for network games.
- */
-//#define DEBUG_DUMP_COMMANDS
-
-#ifdef DEBUG_DUMP_COMMANDS
-void CDECL debug_dump_commands(const char *s, ...);
-#endif /* DEBUG_DUMP_COMMANDS */
-
// In theory sending 1 of the 2 seeds is enough to check for desyncs
// so in theory, this next define can be left off.
//#define NETWORK_SEND_DOUBLE_SEED
diff --git a/src/network/network_data.cpp b/src/network/network_data.cpp
index 28d6c0984..33e594256 100644
--- a/src/network/network_data.cpp
+++ b/src/network/network_data.cpp
@@ -10,6 +10,7 @@
#include "../callback_table.h"
#include "../core/alloc_func.hpp"
#include "../string_func.h"
+#include "../date_func.h"
// Add a command to the local command queue
void NetworkAddCommandQueue(NetworkTCPSocketHandler *cs, CommandPacket *cp)
@@ -99,11 +100,7 @@ void NetworkExecuteCommand(CommandPacket *cp)
cp->callback = 0;
}
-#ifdef DEBUG_DUMP_COMMANDS
- extern Date _date;
- extern DateFract _date_fract;
- debug_dump_commands("ddc:cmd:%d;%d;%d;%d;%d;%d;%d;%s\n", _date, _date_fract, (int)cp->player, cp->tile, cp->p1, cp->p2, cp->cmd, cp->text);
-#endif /* DUMP_COMMANDS */
+ DebugDumpCommands("ddc:cmd:%d;%d;%d;%d;%d;%d;%d;%s\n", _date, _date_fract, (int)cp->player, cp->tile, cp->p1, cp->p2, cp->cmd, cp->text);
DoCommandP(cp->tile, cp->p1, cp->p2, _callback_table[cp->callback], cp->cmd | CMD_NETWORK_COMMAND, cp->my_cmd);
}
diff --git a/src/openttd.cpp b/src/openttd.cpp
index ab8e81c2a..7890c3cf6 100644
--- a/src/openttd.cpp
+++ b/src/openttd.cpp
@@ -696,12 +696,14 @@ static void MakeNewGameDone()
SettingsDisableElrail(_patches.disable_elrails);
SetDefaultRailGui();
+#ifdef ENABLE_NETWORK
/* We are the server, we start a new player (not dedicated),
* so set the default password *if* needed. */
if (_network_server && !StrEmpty(_network_default_company_pass)) {
char *password = _network_default_company_pass;
NetworkChangeCompanyPassword(1, &password);
}
+#endif /* ENABLE_NETWORK */
MarkWholeScreenDirty();
}
diff --git a/src/players.cpp b/src/players.cpp
index f886e287a..3945b2424 100644
--- a/src/players.cpp
+++ b/src/players.cpp
@@ -811,10 +811,12 @@ CommandCost CmdPlayerCtrl(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
if (_local_player != _network_playas && _network_playas == p->index) {
assert(_local_player == PLAYER_SPECTATOR);
SetLocalPlayer(p->index);
+#ifdef ENABLE_NETWORK
if (!StrEmpty(_network_default_company_pass)) {
char *password = _network_default_company_pass;
NetworkChangeCompanyPassword(1, &password);
}
+#endif /* ENABLE_NETWORK */
MarkWholeScreenDirty();
}
diff --git a/src/saveload.cpp b/src/saveload.cpp
index cf34fbcb4..0a627a0dd 100644
--- a/src/saveload.cpp
+++ b/src/saveload.cpp
@@ -1655,9 +1655,7 @@ SaveOrLoadResult SaveOrLoad(const char *filename, int mode, Subdirectory sb)
}
} else { /* LOAD game */
assert(mode == SL_LOAD);
- #ifdef DEBUG_DUMP_COMMANDS
- debug_dump_commands("ddc:load:%s\n", filename);
- #endif /* DUMP_COMMANDS */
+ DebugDumpCommands("ddc:load:%s\n", filename);
if (fread(hdr, sizeof(hdr), 1, _sl.fh) != 1) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE);
diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp
index cf0e9971d..f52478c5d 100644
--- a/src/video/sdl_v.cpp
+++ b/src/video/sdl_v.cpp
@@ -11,6 +11,7 @@
#include "../variables.h"
#include "../blitter/factory.hpp"
#include "../network/network.h"
+#include "../core/math_func.hpp"
#include "sdl_v.h"
#include <SDL.h>