disable net

This commit is contained in:
Dethrace Labs 2025-06-30 19:47:30 +12:00
parent 41fc648397
commit f1e2b9b192
7 changed files with 1435 additions and 36 deletions

View File

@ -41,6 +41,7 @@ option(DETHRACE_WERROR "Treat warnings as errors")
option(DETHRACE_FIX_BUGS "Fix Dethrace bugs" ON)
option(DETHRACE_3DFX_PATCH "Include changes from VOODOO2C.EXE" ON)
option(DETHRACE_SOUND_ENABLED "Include audio support" ON)
option(DETHRACE_NET_ENABLED "Include net support" ON)
function(add_compile_flag_if_supported TARGET FLAG)
cmake_parse_arguments(ARGS "" "" "LANGUAGES" ${ARGN})

View File

@ -5,12 +5,12 @@ option(DETHRACE_REPLAY_DEBUG "Debug replay" OFF)
target_include_directories(dethrace_obj
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
common
pd
${CMAKE_CURRENT_SOURCE_DIR}
common
pd
)
if (DETHRACE_ASAN)
if(DETHRACE_ASAN)
target_compile_options(dethrace_obj PUBLIC -fsanitize=address)
target_link_options(dethrace_obj PUBLIC -fsanitize=address)
endif()
@ -36,10 +36,13 @@ else()
-Wstrict-prototypes
)
endif()
target_compile_definitions(dethrace_obj PRIVATE INSIDE_DETHRACE)
if(DETHRACE_FIX_BUGS)
target_compile_definitions(dethrace_obj PRIVATE DETHRACE_FIX_BUGS)
endif()
if(DETHRACE_3DFX_PATCH)
target_compile_definitions(dethrace_obj PRIVATE DETHRACE_3DFX_PATCH)
endif()
@ -162,8 +165,6 @@ target_sources(dethrace_obj PRIVATE
pd/net.h
pd/sys.h
# dethrace-added cross platform sys and network implementation
pc-all/allnet.c
pc-all/allsys.c
# original win95 sys and network
@ -172,10 +173,17 @@ target_sources(dethrace_obj PRIVATE
# pc-win95/ssdx.h
# original dos sys and network
#pc-dos/dosnet.c
# pc-dos/dosnet.c
# pc-dos/dossys.c
)
if(DETHRACE_NET_ENABLED)
# dethrace-added cross platform sys and network implementation
target_sources(dethrace_obj PRIVATE pc-all/allnet.c)
else()
target_sources(dethrace_obj PRIVATE pc-none/nonet.c)
endif()
# Create our main game binary.
add_executable(dethrace
WIN32
@ -200,6 +208,7 @@ if(DETHRACE_IDE_ROOT_DIR)
VS_DEBUGGER_ENVIRONMENT "DETHRACE_ROOT_DIR=${DETHRACE_IDE_ROOT_DIR}"
)
endif()
if(DETHRACE_IDE_ARGUMENTS)
message(STATUS "before: ${DETHRACE_IDE_ARGUMENTS}")
separate_arguments(DETHRACE_IDE_ARGUMENTS NATIVE_COMMAND "${DETHRACE_IDE_ARGUMENTS}")
@ -241,7 +250,6 @@ if(DETHRACE_INSTALL)
"
COMPONENT RUNTIME
)
endif()
if(MSVC)
@ -249,12 +257,14 @@ if(DETHRACE_INSTALL)
DESTINATION "."
OPTIONAL
)
if(DETHRACE_PLATFORM_SDL_DYNAMIC)
if(DETHRACE_PLATFORM_SDL1)
get_filename_component(sdl1_lib_dir "${SDL_LIBRARY}" DIRECTORY)
get_filename_component(sdl1_root_dir "${SDL_LIBRARY}" PATH)
set(sdl1_bin_dir "${sdl1_root_dir}/bin" PATH)
find_file(SDL1DLL_PATH NAMES "SDL.dll" PATHS ${sdl1_lib_dir} ${sdl1_root_dir} PATH_SUFFIXES "bin" REQUIRED)
if(SDL1DLL_PATH)
install(FILES "${SDL1DLL_PATH}"
DESTINATION "."
@ -262,6 +272,7 @@ if(DETHRACE_INSTALL)
)
endif()
endif()
if(DETHRACE_PLATFORM_SDL2)
install(FILES "$<TARGET_FILE:SDL2::SDL2>"
DESTINATION "."

View File

@ -1,38 +1,36 @@
#ifndef WIN95_NET_TYPES_H
#define WIN95_NET_TYPES_H
#ifndef PC_ALL_NET_TYPES_H
#define PC_ALL_NET_TYPES_H
// #include "dr_types.h"
#include "harness/win95_polyfill.h"
#include "harness/winsock.h"
#include <dr_types.h>
// dethrace: have switched out IPX implementation for IP
// This file added dethrace
// - have switched out IPX implementation for IP
// - cross-platform instead of per-platform implementation
// cannot be a regular sockaddr_in because it is transmitted between OS's
typedef struct tCopyable_sockaddr_in {
#if _MSC_VER == 1020
long address;
long port;
#else
uint64_t address;
uint32_t port;
#endif
} tCopyable_sockaddr_in;
typedef struct tPD_net_player_info {
// struct sockaddr_ipx addr_ipx;
// cannot be a regular sockaddr_in because it is transmitted between machines
// cannot be a regular sockaddr_in because it is transmitted between OS's
tCopyable_sockaddr_in addr_in;
// added by dethrace
// tU32 pad0;
} tPD_net_player_info;
// has to match `tPD_net_player_info`
// has to match `tPD_net_player_info` - see `PDNetGetNextJoinGame`
typedef struct tPD_net_game_info {
// struct sockaddr_ipx addr_ipx;
// cannot be a regular sockaddr_in because it is transmitted between machines
// cannot be a regular sockaddr_in because it is transmitted between OS's
tCopyable_sockaddr_in addr_in;
tU32 last_response;
uint32_t last_response;
} tPD_net_game_info;
// typedef struct tIPX_netnum {
// unsigned char bNetwork[4];
// } tIPX_netnum;
#endif

View File

@ -0,0 +1,219 @@
#include "pd/net.h"
#include "brender.h"
#include "dr_types.h"
#include "errors.h"
#include "globvrpb.h"
#include "harness/config.h"
#include "harness/hooks.h"
#include "harness/os.h"
#include "harness/trace.h"
#include "net_types.h"
#include "network.h"
#include "pd/net.h"
#include "pd/sys.h"
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
// IDA: void __cdecl ClearupPDNetworkStuff()
void ClearupPDNetworkStuff(void) {
NOT_IMPLEMENTED();
}
// IDA: void __usercall MATTMessageCheck(char *pFunction_name@<EAX>, tNet_message *pMessage@<EDX>, int pAlleged_size@<EBX>)
void MATTMessageCheck(char* pFunction_name, tNet_message* pMessage, int pAlleged_size) {
NOT_IMPLEMENTED();
}
// IDA: int __usercall GetProfileText@<EAX>(char *pDest@<EAX>, int pDest_len@<EDX>, char *pFname@<EBX>, char *pKeyname@<ECX>)
int GetProfileText(char* pDest, int pDest_len, char* pFname, char* pKeyname) {
FILE* fp;
char in_buf[256];
int i;
int j;
int len;
NOT_IMPLEMENTED();
}
// IDA: int __cdecl GetSocketNumberFromProfileFile()
int GetSocketNumberFromProfileFile(void) {
char str[256];
int sscanf_res;
tU32 socknum;
NOT_IMPLEMENTED();
}
// IDA: int __usercall GetMessageTypeFromMessage@<EAX>(char *pMessage_str@<EAX>)
int GetMessageTypeFromMessage(char* pMessage_str) {
char* real_msg;
int msg_type_int;
return 999;
}
// IDA: void __usercall MakeMessageToSend(int pMessage_type@<EAX>)
void MakeMessageToSend(int pMessage_type) {
}
// IDA: int __cdecl ReceiveHostResponses()
int ReceiveHostResponses(void) {
char str[256];
int i;
int already_registered;
char addr_string[32];
unsigned int sa_len;
int error;
return 0;
}
// IDA: int __cdecl BroadcastMessage()
int BroadcastMessage(void) {
int i;
int errors;
char broadcast_addr_string[32];
char* real_msg;
return 0;
}
// IDA: int __cdecl PDNetInitialise()
int PDNetInitialise(void) {
tU32 timenow;
char profile_string[32];
char key_name[32];
int sscanf_res;
int i;
tU32 netnum;
char str[256];
int mess_num;
return 0;
}
// IDA: int __cdecl PDNetShutdown()
int PDNetShutdown(void) {
return 0;
}
// IDA: void __cdecl PDNetStartProducingJoinList()
void PDNetStartProducingJoinList(void) {
}
// IDA: void __cdecl PDNetEndJoinList()
void PDNetEndJoinList(void) {
}
// IDA: int __usercall PDNetGetNextJoinGame@<EAX>(tNet_game_details *pGame@<EAX>, int pIndex@<EDX>)
int PDNetGetNextJoinGame(tNet_game_details* pGame, int pIndex) {
static tU32 next_broadcast_time = 0;
int i;
int j;
int number_of_hosts_has_changed;
char str[256];
return 1;
}
// IDA: void __usercall PDNetDisposeGameDetails(tNet_game_details *pDetails@<EAX>)
void PDNetDisposeGameDetails(tNet_game_details* pDetails) {
NOT_IMPLEMENTED();
}
// IDA: int __usercall PDNetHostGame@<EAX>(tNet_game_details *pDetails@<EAX>, char *pHost_name@<EDX>, void **pHost_address@<EBX>)
int PDNetHostGame(tNet_game_details* pDetails, char* pHost_name, void** pHost_address) {
return 1;
}
// IDA: int __usercall PDNetJoinGame@<EAX>(tNet_game_details *pDetails@<EAX>, char *pPlayer_name@<EDX>)
int PDNetJoinGame(tNet_game_details* pDetails, char* pPlayer_name) {
dr_dprintf("PDNetJoinGame()");
return 0;
}
// IDA: void __usercall PDNetLeaveGame(tNet_game_details *pDetails@<EAX>)
void PDNetLeaveGame(tNet_game_details* pDetails) {
}
// IDA: void __usercall PDNetHostFinishGame(tNet_game_details *pDetails@<EAX>)
void PDNetHostFinishGame(tNet_game_details* pDetails) {
}
// IDA: tU32 __usercall PDNetExtractGameID@<EAX>(tNet_game_details *pDetails@<EAX>)
tU32 PDNetExtractGameID(tNet_game_details* pDetails) {
return 0;
}
// IDA: tPlayer_ID __usercall PDNetExtractPlayerID@<EAX>(tNet_game_details *pDetails@<EAX>)
tPlayer_ID PDNetExtractPlayerID(tNet_game_details* pDetails) {
return 0;
}
// IDA: void __usercall PDNetObtainSystemUserName(char *pName@<EAX>, int pMax_length@<EDX>)
void PDNetObtainSystemUserName(char* pName, int pMax_length) {
int result;
char* found;
}
// IDA: int __usercall PDNetSendMessageToPlayer@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>, tPlayer_ID pPlayer@<EBX>)
int PDNetSendMessageToPlayer(tNet_game_details* pDetails, tNet_message* pMessage, tPlayer_ID pPlayer) {
char str[256];
NOT_IMPLEMENTED();
}
// IDA: int __usercall PDNetSendMessageToAllPlayers@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>)
int PDNetSendMessageToAllPlayers(tNet_game_details* pDetails, tNet_message* pMessage) {
char str[256];
int i;
return 0;
}
// IDA: tNet_message* __usercall PDNetGetNextMessage@<EAX>(tNet_game_details *pDetails@<EAX>, void **pSender_address@<EDX>)
tNet_message* PDNetGetNextMessage(tNet_game_details* pDetails, void** pSender_address) {
char* receive_buffer;
char str[256];
int msg_type;
return 0;
}
// IDA: tNet_message* __usercall PDNetAllocateMessage@<EAX>(tU32 pSize@<EAX>, tS32 pSize_decider@<EDX>)
tNet_message* PDNetAllocateMessage(tU32 pSize, tS32 pSize_decider) {
NOT_IMPLEMENTED();
}
// IDA: void __usercall PDNetDisposeMessage(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>)
void PDNetDisposeMessage(tNet_game_details* pDetails, tNet_message* pMessage) {
NOT_IMPLEMENTED();
}
// IDA: void __usercall PDNetSetPlayerSystemInfo(tNet_game_player_info *pPlayer@<EAX>, void *pSender_address@<EDX>)
void PDNetSetPlayerSystemInfo(tNet_game_player_info* pPlayer, void* pSender_address) {
}
// IDA: void __usercall PDNetDisposePlayer(tNet_game_player_info *pPlayer@<EAX>)
void PDNetDisposePlayer(tNet_game_player_info* pPlayer) {
NOT_IMPLEMENTED();
}
// IDA: int __usercall PDNetSendMessageToAddress@<EAX>(tNet_game_details *pDetails@<EAX>, tNet_message *pMessage@<EDX>, void *pAddress@<EBX>)
int PDNetSendMessageToAddress(tNet_game_details* pDetails, tNet_message* pMessage, void* pAddress) {
char str[256];
return 0;
}
// IDA: int __usercall PDNetInitClient@<EAX>(tNet_game_details *pDetails@<EAX>)
int PDNetInitClient(tNet_game_details* pDetails) {
NOT_IMPLEMENTED();
}
// IDA: int __cdecl PDNetGetHeaderSize()
int PDNetGetHeaderSize(void) {
return 0;
}

1107
src/DETHRACE/pc-none/nosys.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -103,17 +103,23 @@ if(DETHRACE_PLATFORM_SDL_DYNAMIC)
target_link_libraries(harness PRIVATE ${CMAKE_DL_LIBS})
endif()
if(WIN32)
if(!DETHRACE_NET_ENABLED)
target_sources(harness PRIVATE
os/windows.c
)
target_link_libraries(harness PRIVATE dbghelp ws2_32)
elseif(APPLE)
target_sources(harness PRIVATE
os/macos.c
os/null.c
)
else()
target_sources(harness PRIVATE
os/linux.c
)
if(WIN32)
target_sources(harness PRIVATE
os/windows.c
)
target_link_libraries(harness PRIVATE dbghelp ws2_32)
elseif(APPLE)
target_sources(harness PRIVATE
os/macos.c
)
else()
target_sources(harness PRIVATE
os/linux.c
)
endif()
endif()

57
src/harness/os/null.c Normal file
View File

@ -0,0 +1,57 @@
#include <stdio.h>
#include <string.h>
void OS_InstallSignalHandler(char* program_name) {
}
char* OS_GetFirstFileInDirectory(char* path) {
return NULL;
}
// Required: continue directory iteration. If no more files, return NULL
char* OS_GetNextFileInDirectory(void) {
return NULL;
}
FILE* OS_fopen(const char* pathname, const char* mode) {
return NULL;
}
size_t OS_ConsoleReadPassword(char* pBuffer, size_t pBufferLen) {
return 0;
}
char* OS_Dirname(const char* path) {
return NULL;
}
char* OS_Basename(const char* path) {
return NULL;
}
char* OS_GetWorkingDirectory(char* argv0) {
return NULL;
}
int OS_GetAdapterAddress(char* name, void* pSockaddr_in) {
return 0;
}
int OS_InitSockets(void) {
return 0;
}
int OS_GetLastSocketError(void) {
return 0;
}
void OS_CleanupSockets(void) {
}
int OS_SetSocketNonBlocking(int socket) {
return 0;
}
int OS_CloseSocket(int socket) {
return 0;
}