aboutsummaryrefslogtreecommitdiff
path: root/src/common.hh
diff options
context:
space:
mode:
authorfusion32 <marcopuzziello@gmail.com>2025-05-22 14:52:20 -0300
committerfusion32 <marcopuzziello@gmail.com>2025-05-22 14:52:20 -0300
commit74f12f3f2bb6cafc25ba1e943d01583b1ac0d766 (patch)
treed9f58c475e99a6d7fe0d05eb4867425e154a0df1 /src/common.hh
parent3edeaf1f5280b88da6cf60ad65f9c5c5c8d508c2 (diff)
downloadgame-74f12f3f2bb6cafc25ba1e943d01583b1ac0d766.tar.gz
game-74f12f3f2bb6cafc25ba1e943d01583b1ac0d766.zip
rename `main.hh` to `common.hh`
Diffstat (limited to 'src/common.hh')
-rw-r--r--src/common.hh142
1 files changed, 142 insertions, 0 deletions
diff --git a/src/common.hh b/src/common.hh
new file mode 100644
index 0000000..b057465
--- /dev/null
+++ b/src/common.hh
@@ -0,0 +1,142 @@
+#ifndef TIBIA_COMMON_HH_
+#define TIBIA_COMMON_HH_ 1
+
+#include <float.h>
+#include <limits.h>
+#include <stddef.h>
+#include <stdarg.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <algorithm>
+
+typedef uint8_t uint8;
+typedef uint16_t uint16;
+typedef uint32_t uint32;
+typedef uintptr_t uintptr;
+typedef size_t usize;
+
+#define STATIC_ASSERT(expr) static_assert((expr), "static assertion failed: " #expr)
+#define NARRAY(arr) (sizeof(arr) / sizeof(arr[0]))
+#define ISPOW2(x) ((x) != 0 && ((x) & ((x) - 1)) == 0)
+#define KB(x) ((usize)(x) << 10)
+#define MB(x) ((usize)(x) << 20)
+#define GB(x) ((usize)(x) << 30)
+
+// TODO(fusion): We might not actually compile the output for the decompilation
+// step but if we did, we'd need to make sure we're compiling in 32 bits mode.
+STATIC_ASSERT(sizeof(bool) == 1);
+STATIC_ASSERT(sizeof(int) == 4);
+//STATIC_ASSERT(sizeof(void*) == 4);
+
+#if !OS_WINDOWS && !OS_LINUX
+# if defined(_WIN32)
+# define OS_WINDOWS 1
+# elif defined(__linux__) || defined(__gnu_linux__)
+# define OS_LINUX 1
+# else
+# error "Operating system not supported."
+# endif
+#endif
+
+#if !COMPILER_MSVC && !COMPILER_GCC && !COMPILER_CLANG
+# if defined(_MSC_VER)
+# define COMPILER_MSVC 1
+# elif defined(__GNUC__)
+# define COMPILER_GCC 1
+# elif defined(__clang__)
+# define COMPILER_CLANG 1
+# endif
+#endif
+
+// NOTE(fusion): Compiler attributes.
+#if COMPILER_GCC || COMPILER_CLANG
+# define ATTR_FALLTHROUGH __attribute__((fallthrough))
+# define ATTR_PRINTF(x, y) __attribute__((format(printf, x, y)))
+#else
+# define ATTR_FALLTHROUGH
+# define ATTR_PRINTF(x, y)
+#endif
+
+#if COMPILER_MSVC
+# define TRAP() __debugbreak();
+#elif COMPILER_GCC || COMPILER_CLANG
+# define TRAP() __builtin_trap()
+#else
+# define TRAP() abort()
+#endif
+
+#define ASSERT_ALWAYS(expr) if(!(expr)) { TRAP(); }
+#if BUILD_DEBUG
+# define ASSERT(expr) ASSERT_ALWAYS(expr)
+#else
+# define ASSERT(expr) ((void)(expr))
+#endif
+
+// TODO(fusion): We should re-implement the multi-process structure used by the
+// original code but only for reference. Making it compile on Windows shouldn't
+// be too difficult either. Overall this design is outdated and should be reviewed.
+// Nevertheless, we should focus on getting it working as intended, on the target
+// platform (which is Linux 32-bits) before attempting to refine it.
+//STATIC_ASSERT(OS_LINUX);
+//#include <sys/types.h>
+typedef int pid_t;
+//
+
+// shm.cc
+// =============================================================================
+void StartGame(void);
+void CloseGame(void);
+void EndGame(void);
+bool LoginAllowed(void);
+bool GameRunning(void);
+bool GameStarting(void);
+bool GameEnding(void);
+pid_t GetGameThreadPID(void);
+int GetPrintlogPosition(void);
+char *GetPrintlogLine(int Line);
+void IncrementObjectCounter(void);
+void DecrementObjectCounter(void);
+uint32 GetObjectCounter(void);
+void IncrementPlayersOnline(void);
+void DecrementPlayersOnline(void);
+int GetPlayersOnline(void);
+void IncrementNewbiesOnline(void);
+void DecrementNewbiesOnline(void);
+int GetNewbiesOnline(void);
+void SetRoundNr(uint32 RoundNr);
+uint32 GetRoundNr(void);
+void SetCommand(int Command, char *Text);
+int GetCommand(void);
+char *GetCommandBuffer(void);
+void InitSHM(bool Verbose);
+void ExitSHM(void);
+void InitSHMExtern(bool Verbose);
+void ExitSHMExtern(void);
+
+// time.cc
+// =============================================================================
+extern uint32 RoundNr;
+extern uint32 ServerMilliseconds;
+
+void GetRealTime(int *Hour, int *Minute);
+void GetTime(int *Hour, int *Minute);
+void GetDate(int *Year, int *Cycle, int *Day);
+void GetAmbiente(int *Brightness, int *Color);
+uint32 GetRoundAtTime(int Hour, int Minute);
+uint32 GetRoundForNextMinute(void);
+
+// util.cc
+// =============================================================================
+typedef void TErrorFunction(const char *Text);
+typedef void TPrintFunction(int Level, const char *Text);
+void SetErrorFunction(TErrorFunction *Function);
+void SetPrintFunction(TPrintFunction *Function);
+void error(char *Text, ...) ATTR_PRINTF(1, 2);
+void print(int Level, char *Text, ...) ATTR_PRINTF(1, 2);
+
+//
+
+#endif //TIBIA_COMMON_HH_