Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion include/gameinfo.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ struct GameInfo {
// find a plugin file to load
bool LoadPlugin(std::string plugin_path);
// route syscall or vmMain call to plugins and mod
intptr_t Route(bool is_syscall, intptr_t cmd, intptr_t* args);
intptr_t Route(bool is_syscall, intptr_t cmd, intptr_t* args) const;

// cache some dynamic message values that get evaluated a lot
static intptr_t msg_G_PRINT, msg_GAME_INIT, msg_GAME_CONSOLE_COMMAND, msg_GAME_SHUTDOWN;
Expand Down
3 changes: 3 additions & 0 deletions include/log.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ Created By:
#include <aixlog/aixlog.hpp>
#include <string>

#define QMMLOG(severity, tag) if (log_level_match(severity)) LOG(severity, tag)

#ifdef _DEBUG
constexpr AixLog::Severity QMM2_LOG_DEFAULT_SEVERITY = AixLog::Severity::debug;
#else
Expand All @@ -25,6 +27,7 @@ constexpr AixLog::Severity QMM2_LOG_DEFAULT_SEVERITY = AixLog::Severity::info;

constexpr AixLog::Severity QMM2_LOG_CONSOLE_SEVERITY = AixLog::Severity::info;

bool log_level_match(int severity);

void log_init(std::string file, AixLog::Severity severity = QMM2_LOG_DEFAULT_SEVERITY, bool append = false);

Expand Down
10 changes: 6 additions & 4 deletions include/qmmapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ typedef void* (*mod_GetGameAPI)(void*, void*);
// 4:3
// - changed type names away from those ending with "_t" - added typedefs for old names marked deprecated. define QMM_USE_DEPRECATED_TYPES to use old types without warning
// - added QMM_MODDIR
// 4:4
// - swapped order of severity and text in QMM_WRITEQMMLOG and also made it vararg. string construction is ignored if log won't write

// holds plugin info to pass back to QMM
typedef struct {
Expand Down Expand Up @@ -120,8 +122,8 @@ typedef enum {

// prototype struct for QMM plugin util funcs
typedef struct {
void (*pfnWriteQMMLog)(plugin_id plid, const char* text, int severity); // write to the QMM log
char* (*pfnVarArgs)(plugin_id plid, const char* format, ...); // simple vsprintf helper with rotating buffer
void (*pfnWriteQMMLog)(plugin_id plid, int severity, const char* fmt, ...); // write to the QMM log
char* (*pfnVarArgs)(plugin_id plid, const char* fmt, ...); // simple vsprintf helper with rotating buffer
int (*pfnIsQVM)(plugin_id plid); // returns 1 if the mod is QVM
const char* (*pfnEngMsgName)(plugin_id plid, intptr_t msg); // get the string name of a syscall code
const char* (*pfnModMsgName)(plugin_id plid, intptr_t msg); // get the string name of a vmMain code
Expand All @@ -146,8 +148,8 @@ typedef struct {
} plugin_funcs;

// macros for QMM plugin util funcs
#define QMM_WRITEQMMLOG(text, severity) (g_pluginfuncs->pfnWriteQMMLog)(PLID, text, severity) // write to the QMM log
#define QMM_VARARGS(format, ...) (g_pluginfuncs->pfnVarArgs)(PLID, format, __VA_ARGS__) // simple vsprintf helper
#define QMM_WRITEQMMLOG(sev, fmt, ...) (g_pluginfuncs->pfnWriteQMMLog)(PLID, sev, fmt, __VA_ARGS__) // write to the QMM log
#define QMM_VARARGS(fmt, ...) (g_pluginfuncs->pfnVarArgs)(PLID, fmt, __VA_ARGS__) // simple vsprintf helper
#define QMM_ISQVM() (g_pluginfuncs->pfnIsQVM)(PLID) // returns 1 if the mod is QVM
#define QMM_ENGMSGNAME(cmd) (g_pluginfuncs->pfnEngMsgName)(PLID, cmd) // get the string name of a syscall code
#define QMM_MODMSGNAME(cmd) (g_pluginfuncs->pfnModMsgName)(PLID, cmd) // get the string name of a vmMain code
Expand Down
2 changes: 1 addition & 1 deletion include/version.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Created By:
#define STRINGIFY2(x) #x

#define QMM_VERSION_MAJOR 2
#define QMM_VERSION_MINOR 5
#define QMM_VERSION_MINOR 6
#define QMM_VERSION_REV 0

#define QMM_VERSION STRINGIFY(QMM_VERSION_MAJOR) "." STRINGIFY(QMM_VERSION_MINOR) "." STRINGIFY(QMM_VERSION_REV)
Expand Down
22 changes: 7 additions & 15 deletions src/game_cod11mp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ Created By:

#include "game_api.hpp"
#include "log.hpp"
#include "format.hpp"
#include <string>
// QMM-specific COD11MP header
#include "game_cod11mp.h"
Expand Down Expand Up @@ -66,10 +65,9 @@ bool COD11MP_GameSupport::AutoDetect(APIType) {
intptr_t COD11MP_GameSupport::syscall(intptr_t cmd, ...) {
QMM_GET_SYSCALL_ARGS();

#ifdef _DEBUG
if (cmd != G_PRINT)
LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("COD11MP_GameSupport::syscall({} {}) called\n", EngMsgName(cmd), cmd);
#endif
QMMLOG(QMM_LOG_TRACE, "QMM") << "COD11MP_GameSupport::syscall(" << EngMsgName(cmd) << "(" << cmd << ")) called\n";


intptr_t ret = 0;

Expand Down Expand Up @@ -99,10 +97,8 @@ intptr_t COD11MP_GameSupport::syscall(intptr_t cmd, ...) {

// do anything that needs to be done after function call here

#ifdef _DEBUG
if (cmd != G_PRINT)
LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("COD11MP_GameSupport::syscall({} {}) returning {}\n", EngMsgName(cmd), cmd, ret);
#endif
QMMLOG(QMM_LOG_TRACE, "QMM") << "COD11MP_GameSupport::syscall(" << EngMsgName(cmd) << "(" << cmd << ")) reutrning " << ret << "\n";

return ret;
}
Expand All @@ -113,9 +109,7 @@ intptr_t COD11MP_GameSupport::syscall(intptr_t cmd, ...) {
intptr_t COD11MP_GameSupport::vmMain(intptr_t cmd, ...) {
QMM_GET_VMMAIN_ARGS();

#ifdef _DEBUG
LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("COD11MP_GameSupport::vmMain({} {}) called\n", ModMsgName(cmd), cmd);
#endif
QMMLOG(QMM_LOG_TRACE, "QMM") << "COD11MP_GameSupport::vmMain(" << ModMsgName(cmd) << "(" << cmd << ")) called\n";

if (!orig_vmMain)
return 0;
Expand All @@ -126,21 +120,19 @@ intptr_t COD11MP_GameSupport::vmMain(intptr_t cmd, ...) {
// all normal mod functions go to vmMain
ret = orig_vmMain(cmd, QMM_PUT_VMMAIN_ARGS());

#ifdef _DEBUG
LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("COD11MP_GameSupport::vmMain({} {}) returning {}\n", ModMsgName(cmd), cmd, ret);
#endif
QMMLOG(QMM_LOG_TRACE, "QMM") << "COD11MP_GameSupport::vmMain(" << ModMsgName(cmd) << "(" << cmd << ")) returning " << ret << "\n";

return ret;
}


void* COD11MP_GameSupport::Entry(void* syscall, void*, APIType) {
LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("COD11MP_GameSupport::Entry({}) called\n", syscall);
QMMLOG(QMM_LOG_DEBUG, "QMM") << "COD11MP_GameSupport::Entry(" << syscall << ") called\n";

// store original syscall from engine
orig_syscall = (eng_syscall)syscall;

LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("COD11MP_GameSupport::Entry({}) returning\n", syscall);
QMMLOG(QMM_LOG_DEBUG, "QMM") << "COD11MP_GameSupport::Entry(" << syscall << ") returning\n";

return nullptr;
}
Expand Down
22 changes: 7 additions & 15 deletions src/game_codmp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ Created By:

#include "game_api.hpp"
#include "log.hpp"
#include "format.hpp"
#include <string>
// QMM-specific CODMP header
#include "game_codmp.h"
Expand Down Expand Up @@ -78,10 +77,9 @@ bool CODMP_GameSupport::AutoDetect(APIType engineapi) {
intptr_t CODMP_GameSupport::syscall(intptr_t cmd, ...) {
QMM_GET_SYSCALL_ARGS();

#ifdef _DEBUG
if (cmd != G_PRINT)
LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("CODMP_GameSupport::syscall({} {}) called\n", EngMsgName(cmd), cmd);
#endif
QMMLOG(QMM_LOG_TRACE, "QMM") << "CODMP_GameSupport::syscall(" << EngMsgName(cmd) << "(" << cmd << ")) called\n";


intptr_t ret = 0;

Expand Down Expand Up @@ -111,10 +109,8 @@ intptr_t CODMP_GameSupport::syscall(intptr_t cmd, ...) {

// do anything that needs to be done after function call here

#ifdef _DEBUG
if (cmd != G_PRINT)
LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("CODMP_GameSupport::syscall({} {}) returning {}\n", EngMsgName(cmd), cmd, ret);
#endif
QMMLOG(QMM_LOG_TRACE, "QMM") << "CODMP_GameSupport::syscall(" << EngMsgName(cmd) << "(" << cmd << ")) reutrning " << ret << "\n";

return ret;
}
Expand All @@ -125,9 +121,7 @@ intptr_t CODMP_GameSupport::syscall(intptr_t cmd, ...) {
intptr_t CODMP_GameSupport::vmMain(intptr_t cmd, ...) {
QMM_GET_VMMAIN_ARGS();

#ifdef _DEBUG
LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("CODMP_GameSupport::vmMain({} {}) called\n", ModMsgName(cmd), cmd);
#endif
QMMLOG(QMM_LOG_TRACE, "QMM") << "CODMP_GameSupport::vmMain(" << ModMsgName(cmd) << "(" << cmd << ")) called\n";

if (!orig_vmMain)
return 0;
Expand All @@ -138,21 +132,19 @@ intptr_t CODMP_GameSupport::vmMain(intptr_t cmd, ...) {
// all normal mod functions go to vmMain
ret = orig_vmMain(cmd, QMM_PUT_VMMAIN_ARGS());

#ifdef _DEBUG
LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("CODMP_GameSupport::vmMain({} {}) returning {}\n", ModMsgName(cmd), cmd, ret);
#endif
QMMLOG(QMM_LOG_TRACE, "QMM") << "CODMP_GameSupport::vmMain(" << ModMsgName(cmd) << "(" << cmd << ")) returning " << ret << "\n";

return ret;
}


void* CODMP_GameSupport::Entry(void* syscall, void*, APIType) {
LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("CODMP_GameSupport::Entry({}) called\n", syscall);
QMMLOG(QMM_LOG_DEBUG, "QMM") << "CODMP_GameSupport::Entry(" << syscall << ") called\n";

// store original syscall from engine
orig_syscall = (eng_syscall)syscall;

LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("CODMP_GameSupport::Entry({}) returning\n", syscall);
QMMLOG(QMM_LOG_DEBUG, "QMM") << "CODMP_GameSupport::Entry(" << syscall << ") returning\n";

return nullptr;
}
Expand Down
22 changes: 7 additions & 15 deletions src/game_coduomp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ Created By:

#include "game_api.hpp"
#include "log.hpp"
#include "format.hpp"
#include <string>
// QMM-specific CODUOMP header
#include "game_coduomp.h"
Expand Down Expand Up @@ -78,10 +77,9 @@ bool CODUOMP_GameSupport::AutoDetect(APIType engineapi) {
intptr_t CODUOMP_GameSupport::syscall(intptr_t cmd, ...) {
QMM_GET_SYSCALL_ARGS();

#ifdef _DEBUG
if (cmd != G_PRINT)
LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("CODUOMP_GameSupport::syscall({} {}) called\n", EngMsgName(cmd), cmd);
#endif
QMMLOG(QMM_LOG_TRACE, "QMM") << "CODUOMP_GameSupport::syscall(" << EngMsgName(cmd) << "(" << cmd << ")) called\n";


intptr_t ret = 0;

Expand Down Expand Up @@ -111,10 +109,8 @@ intptr_t CODUOMP_GameSupport::syscall(intptr_t cmd, ...) {

// do anything that needs to be done after function call here

#ifdef _DEBUG
if (cmd != G_PRINT)
LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("CODUOMP_GameSupport::syscall({} {}) returning {}\n", EngMsgName(cmd), cmd, ret);
#endif
QMMLOG(QMM_LOG_TRACE, "QMM") << "CODUOMP_GameSupport::syscall(" << EngMsgName(cmd) << "(" << cmd << ")) reutrning " << ret << "\n";

return ret;
}
Expand All @@ -125,9 +121,7 @@ intptr_t CODUOMP_GameSupport::syscall(intptr_t cmd, ...) {
intptr_t CODUOMP_GameSupport::vmMain(intptr_t cmd, ...) {
QMM_GET_VMMAIN_ARGS();

#ifdef _DEBUG
LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("CODUOMP_GameSupport::vmMain({} {}) called\n", ModMsgName(cmd), cmd);
#endif
QMMLOG(QMM_LOG_TRACE, "QMM") << "CODUOMP_GameSupport::vmMain(" << ModMsgName(cmd) << "(" << cmd << ")) called\n";

if (!orig_vmMain)
return 0;
Expand All @@ -138,21 +132,19 @@ intptr_t CODUOMP_GameSupport::vmMain(intptr_t cmd, ...) {
// all normal mod functions go to vmMain
ret = orig_vmMain(cmd, QMM_PUT_VMMAIN_ARGS());

#ifdef _DEBUG
LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("CODUOMP_GameSupport::vmMain({} {}) returning {}\n", ModMsgName(cmd), cmd, ret);
#endif
QMMLOG(QMM_LOG_TRACE, "QMM") << "CODUOMP_GameSupport::vmMain(" << ModMsgName(cmd) << "(" << cmd << ")) returning " << ret << "\n";

return ret;
}


void* CODUOMP_GameSupport::Entry(void* syscall, void*, APIType) {
LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("CODUOMP_GameSupport::Entry({}) called\n", syscall);
QMMLOG(QMM_LOG_DEBUG, "QMM") << "CODUOMP_GameSupport::Entry(" << syscall << ") called\n";

// store original syscall from engine
orig_syscall = (eng_syscall)syscall;

LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("CODUOMP_GameSupport::Entry({}) returning\n", syscall);
QMMLOG(QMM_LOG_DEBUG, "QMM") << "CODUOMP_GameSupport::Entry(" << syscall << ") returning\n";

return nullptr;
}
Expand Down
24 changes: 8 additions & 16 deletions src/game_jamp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ Created By:

#include "game_api.hpp"
#include "log.hpp"
#include "format.hpp"
#include <string>
// QMM-specific JAMP header
#include "game_jamp.h"
Expand Down Expand Up @@ -100,10 +99,9 @@ bool JAMP_GameSupport::AutoDetect(APIType engineapi) {
intptr_t JAMP_GameSupport::syscall(intptr_t cmd, ...) {
QMM_GET_SYSCALL_ARGS();

#ifdef _DEBUG
if (cmd != G_PRINT)
LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("JAMP_GameSupport::syscall({} {}) called\n", EngMsgName(cmd), cmd);
#endif
QMMLOG(QMM_LOG_TRACE, "QMM") << "JAMP_GameSupport::syscall(" << EngMsgName(cmd) << "(" << cmd << ")) called\n";


// store return value since we do some stuff after the function call is over
intptr_t ret = 0;
Expand Down Expand Up @@ -472,10 +470,8 @@ intptr_t JAMP_GameSupport::syscall(intptr_t cmd, ...) {

// do anything that needs to be done after function call here

#ifdef _DEBUG
if (cmd != G_PRINT)
LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("JAMP_GameSupport::syscall({} {}) returning {}\n", EngMsgName(cmd), cmd, ret);
#endif
QMMLOG(QMM_LOG_TRACE, "QMM") << "JAMP_GameSupport::syscall(" << EngMsgName(cmd) << "(" << cmd << ")) reutrning " << ret << "\n";

return ret;
}
Expand All @@ -486,9 +482,7 @@ intptr_t JAMP_GameSupport::syscall(intptr_t cmd, ...) {
intptr_t JAMP_GameSupport::vmMain(intptr_t cmd, ...) {
QMM_GET_VMMAIN_ARGS();

#ifdef _DEBUG
LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("JAMP_GameSupport::vmMain({} {}) called\n", ModMsgName(cmd), cmd);
#endif
QMMLOG(QMM_LOG_TRACE, "QMM") << "JAMP_GameSupport::vmMain(" << ModMsgName(cmd) << "(" << cmd << ")) called\n";

// store return value since we do some stuff after the function call is over
intptr_t ret = 0;
Expand Down Expand Up @@ -547,16 +541,14 @@ intptr_t JAMP_GameSupport::vmMain(intptr_t cmd, ...) {
};
}

#ifdef _DEBUG
LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("JAMP_GameSupport::vmMain({} {}) returning {}\n", ModMsgName(cmd), cmd, ret);
#endif
QMMLOG(QMM_LOG_TRACE, "QMM") << "JAMP_GameSupport::vmMain(" << ModMsgName(cmd) << "(" << cmd << ")) returning " << ret << "\n";

return ret;
}


void* JAMP_GameSupport::Entry(void* arg0, void* arg1, APIType engine) {
LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("JAMP_GameSupport::Entry({}, {}, {}) called\n", arg0, arg1, APIType_Name(engine));
QMMLOG(QMM_LOG_DEBUG, "QMM") << "JAMP_GameSupport::Entry(" << arg0 << ", " << arg1 << ", " << APIType_Name(engine) << ") called\n";

if (engine == QMM_API_GETMODULEAPI) {
orig_apiversion = (intptr_t)arg0;
Expand All @@ -568,7 +560,7 @@ void* JAMP_GameSupport::Entry(void* arg0, void* arg1, APIType engine) {

// fill in variables of our hooked import struct to pass to the mod

LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("JAMP_GameSupport::Entry({}, {}, {}) returning {}\n", arg0, arg1, APIType_Name(engine), fmt::ptr(&qmm_export));
QMMLOG(QMM_LOG_DEBUG, "QMM") << "JAMP_GameSupport::Entry(" << arg0 << ", " << arg1 << ", " << APIType_Name(engine) << ") returning " << &qmm_export << "\n";

// struct full of export lambdas to QMM's vmMain
// this gets returned to the game engine, but we haven't loaded the mod yet.
Expand All @@ -578,7 +570,7 @@ void* JAMP_GameSupport::Entry(void* arg0, void* arg1, APIType engine) {
// store original syscall from engine
orig_syscall = (eng_syscall)arg0;

LOG(QMM_LOG_DEBUG, "QMM") << fmt::format("JAMP_GameSupport::Entry({}, {}, {}) returning\n", arg0, arg1, APIType_Name(engine));
QMMLOG(QMM_LOG_DEBUG, "QMM") << "JAMP_GameSupport::Entry(" << arg0 << ", " << arg1 << ", " << APIType_Name(engine) << ") returning\n";

return nullptr;
}
Expand Down
Loading
Loading