iw4x-sp/src/client/game/game.cpp

147 lines
2.8 KiB
C++

#include <std_include.hpp>
namespace game {
int FS_FOpenFileReadForThread(const char* filename, int* file,
FsThread thread) {
const static DWORD FS_FOpenFileReadForThread_t = 0x630380;
int result{};
__asm {
pushad;
mov eax, file;
push thread;
push filename;
call FS_FOpenFileReadForThread_t;
add esp, 0x8;
mov result, eax;
popad;
}
return result;
}
void IN_KeyDown(kbutton_t* b) {
const static DWORD IN_KeyDown_t = 0x57A350;
__asm {
pushad;
mov esi, b;
call IN_KeyDown_t;
popad;
}
}
void IN_KeyUp(kbutton_t* b) {
const static DWORD IN_KeyUp_t = 0x57A3F0;
__asm {
pushad;
mov esi, b;
call IN_KeyUp_t;
popad;
}
}
bool ScrPlace_IsFullScreenActive() {
return *activeScreenPlacementMode == SCRMODE_FULL;
}
ScreenPlacement* ScrPlace_GetUnsafeFullPlacement() {
return scrPlaceFullUnsafe;
}
bool Sys_TryEnterCriticalSection(CriticalSection critSect) {
assert(static_cast<std::uint32_t>(critSect) <
static_cast<std::uint32_t>(CRITSECT_COUNT));
return TryEnterCriticalSection(&s_criticalSection[critSect]) != FALSE;
}
void Sys_LockRead(FastCriticalSection* critSect) {
InterlockedIncrement(&critSect->readCount);
while (critSect->writeCount) {
Sys_Sleep(0);
}
}
void Sys_UnlockRead(FastCriticalSection* critSect) {
assert(critSect->readCount > 0);
InterlockedDecrement(&critSect->readCount);
}
void Sys_UnlockWrite(FastCriticalSection* critSect) {
assert(critSect->writeCount > 0);
InterlockedDecrement(&critSect->writeCount);
Sys_TempPriorityEnd(&critSect->tempPriority);
}
void Sys_SnapVector(float* v) {
v[0] = std::floorf(v[0] + 0.5f);
v[1] = std::floorf(v[1] + 0.5f);
v[2] = std::floorf(v[2] + 0.5f);
}
HANDLE Sys_OpenFileReliable(const char* filename) {
return ::CreateFileA(filename, GENERIC_READ, FILE_SHARE_READ, nullptr,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING, nullptr);
}
int PC_Int_Parse(int handle, int* i) {
const static DWORD PC_Int_Parse_t = 0x62DF10;
int result{};
__asm {
pushad;
mov eax, handle;
mov esi, i;
call PC_Int_Parse_t;
mov result, eax;
popad;
}
return result;
}
int PC_Float_Parse(int handle, float* f) {
const static DWORD PC_Float_Parse_t = 0x62DE40;
int result{};
__asm {
pushad;
mov eax, handle;
mov esi, f;
call PC_Float_Parse_t;
mov result, eax;
popad;
}
return result;
}
void Menu_FreeItemMemory(itemDef_s* item) {
const static DWORD Menu_FreeItemMemory_t = 0x62B7E0;
__asm {
pushad;
mov edi, item;
call Menu_FreeItemMemory_t;
popad;
}
}
char* Com_GetCommandLine() { return reinterpret_cast<char*>(0x145D800); }
} // namespace game