From dc098c1e65035b225c678bb560cda1baa88e134e Mon Sep 17 00:00:00 2001 From: James R Date: Sat, 19 Feb 2022 19:40:19 -0800 Subject: [PATCH 01/15] Use GNU C99 mode --- src/Makefile.d/versions.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Makefile.d/versions.mk b/src/Makefile.d/versions.mk index 27ac64e78..e49bf43c3 100644 --- a/src/Makefile.d/versions.mk +++ b/src/Makefile.d/versions.mk @@ -46,6 +46,7 @@ endif WFLAGS+=-Wpointer-arith -Wbad-function-cast ifdef GCC45 #WFLAGS+=-Wc++-compat + WFLAGS+=-std=gnu99 endif WFLAGS+=-Wcast-qual ifndef NOCASTALIGNWARN From cd5946be7331493da0f03ddbc5c4052d3b0f07c7 Mon Sep 17 00:00:00 2001 From: James R Date: Sat, 19 Feb 2022 19:41:19 -0800 Subject: [PATCH 02/15] Enable pedantic pike-in-your-bum mode, rip and tear --- src/Makefile.d/versions.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile.d/versions.mk b/src/Makefile.d/versions.mk index e49bf43c3..b20a4a643 100644 --- a/src/Makefile.d/versions.mk +++ b/src/Makefile.d/versions.mk @@ -22,7 +22,7 @@ ifndef GCC295 #WFLAGS+=-Wno-packed endif ifndef RELAXWARNINGS - WFLAGS+=-W + WFLAGS+=-W -pedantic #WFLAGS+=-Wno-sign-compare ifndef GCC295 WFLAGS+=-Wno-div-by-zero From bea79dfa657043b10a6c3d539a7da62e98b4325f Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 20 Feb 2022 03:10:04 -0800 Subject: [PATCH 03/15] Replace GNU zero-length array with ISO C99 flexible array member --- src/d_clisrv.h | 4 ++-- src/hardware/hw_glob.h | 4 ++-- src/r_defs.h | 2 +- src/r_textures.h | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/d_clisrv.h b/src/d_clisrv.h index 7cd8acce5..908514c09 100644 --- a/src/d_clisrv.h +++ b/src/d_clisrv.h @@ -212,7 +212,7 @@ typedef struct UINT8 iteration; UINT32 position; UINT16 size; - UINT8 data[0]; // Size is variable using hardware_MAXPACKETLENGTH + UINT8 data[]; // Size is variable using hardware_MAXPACKETLENGTH } ATTRPACK filetx_pak; typedef struct @@ -226,7 +226,7 @@ typedef struct UINT8 fileid; UINT8 iteration; UINT8 numsegments; - fileacksegment_t segments[0]; + fileacksegment_t segments[]; } ATTRPACK fileack_pak; #ifdef _MSC_VER diff --git a/src/hardware/hw_glob.h b/src/hardware/hw_glob.h index 79cdba4f3..5b3f4654a 100644 --- a/src/hardware/hw_glob.h +++ b/src/hardware/hw_glob.h @@ -48,7 +48,7 @@ typedef struct typedef struct { INT32 numpts; - polyvertex_t pts[0]; + polyvertex_t pts[]; } poly_t; #ifdef _MSC_VER @@ -140,4 +140,4 @@ void HWR_SetPalette(RGBA_t *palette); extern INT32 patchformat; extern INT32 textureformat; -#endif //_HW_GLOB_ \ No newline at end of file +#endif //_HW_GLOB_ diff --git a/src/r_defs.h b/src/r_defs.h index 7decdfeab..c69d78d64 100644 --- a/src/r_defs.h +++ b/src/r_defs.h @@ -718,7 +718,7 @@ typedef struct UINT8 mode; // see pic_mode_t above INT16 height; INT16 reserved1; // set to 0 - UINT8 data[0]; + UINT8 data[]; } ATTRPACK pic_t; #ifdef _MSC_VER diff --git a/src/r_textures.h b/src/r_textures.h index bd5f6388e..a4e208eb3 100644 --- a/src/r_textures.h +++ b/src/r_textures.h @@ -63,7 +63,7 @@ typedef struct // All the patches[patchcount] are drawn back to front into the cached texture. INT16 patchcount; - texpatch_t patches[0]; + texpatch_t patches[]; } texture_t; // all loaded and prepared textures from the start of the game From 59c04ae0413b57bcd81c9eaaecbd1c0a2f0642ab Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 20 Feb 2022 02:51:17 -0800 Subject: [PATCH 04/15] pedantic: resolve flexible array member in nested struct ISO C forbids a structure that has a flexible array member to be a member of another structure or element of an array. filetx_pak and fileack_pak are two such structures. These have been removed from doomdata_t's union. --- src/d_clisrv.h | 4 ++-- src/d_net.c | 8 +++++--- src/d_netfil.c | 17 +++++++++-------- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/d_clisrv.h b/src/d_clisrv.h index 908514c09..f607c6ebe 100644 --- a/src/d_clisrv.h +++ b/src/d_clisrv.h @@ -357,8 +357,8 @@ typedef struct servertics_pak serverpak; // 132495 bytes (more around 360, no?) serverconfig_pak servercfg; // 773 bytes UINT8 textcmd[MAXTEXTCMD+1]; // 66049 bytes (wut??? 64k??? More like 257 bytes...) - filetx_pak filetxpak; // 139 bytes - fileack_pak fileack; + char filetxpak[sizeof (filetx_pak)];// 139 bytes + char fileack[sizeof (fileack_pak)]; UINT8 filereceived; clientconfig_pak clientcfg; // 136 bytes UINT8 md5sum[16]; diff --git a/src/d_net.c b/src/d_net.c index 3e8d27c9b..426837617 100644 --- a/src/d_net.c +++ b/src/d_net.c @@ -913,11 +913,13 @@ static void DebugPrintpacket(const char *header) case PT_SERVERREFUSE: fprintf(debugfile, " reason %s\n", netbuffer->u.serverrefuse.reason); break; - case PT_FILEFRAGMENT: + case PT_FILEFRAGMENT: { + filetx_pak *pak = (void*)&netbuffer->u.filetxpak; fprintf(debugfile, " fileid %d datasize %d position %u\n", - netbuffer->u.filetxpak.fileid, (UINT16)SHORT(netbuffer->u.filetxpak.size), - (UINT32)LONG(netbuffer->u.filetxpak.position)); + pak->fileid, (UINT16)SHORT(pak->size), + (UINT32)LONG(pak->position)); break; + } case PT_REQUESTFILE: default: // write as a raw packet fprintfstringnewline((char *)netbuffer->u.textcmd, diff --git a/src/d_netfil.c b/src/d_netfil.c index fcfba62d9..3c269f63a 100644 --- a/src/d_netfil.c +++ b/src/d_netfil.c @@ -1124,7 +1124,7 @@ void FileSendTicker(void) } // Build a packet containing a file fragment - p = &netbuffer->u.filetxpak; + p = (void*)&netbuffer->u.filetxpak; fragmentsize = FILEFRAGMENTSIZE; if (f->size-transfer[i].position < fragmentsize) fragmentsize = f->size-transfer[i].position; @@ -1166,7 +1166,7 @@ void FileSendTicker(void) void PT_FileAck(void) { - fileack_pak *packet = &netbuffer->u.fileack; + fileack_pak *packet = (void*)&netbuffer->u.fileack; INT32 node = doomcom->remotenode; filetran_t *trans = &transfer[node]; INT32 i, j; @@ -1310,10 +1310,11 @@ void FileReceiveTicker(void) void PT_FileFragment(void) { - INT32 filenum = netbuffer->u.filetxpak.fileid; + filetx_pak *pak = (void*)&netbuffer->u.filetxpak; + INT32 filenum = pak->fileid; fileneeded_t *file = &fileneeded[filenum]; - UINT32 fragmentpos = LONG(netbuffer->u.filetxpak.position); - UINT16 fragmentsize = SHORT(netbuffer->u.filetxpak.size); + UINT32 fragmentpos = LONG(pak->position); + UINT16 fragmentsize = SHORT(pak->size); UINT16 boundedfragmentsize = doomcom->datalength - BASEPACKETSIZE - sizeof(netbuffer->u.filetxpak); char *filename; @@ -1381,7 +1382,7 @@ void PT_FileFragment(void) CONS_Printf("\r%s...\n",filename); file->currentsize = 0; - file->totalsize = LONG(netbuffer->u.filetxpak.filesize); + file->totalsize = LONG(pak->filesize); file->ackresendposition = UINT32_MAX; // Only used for resumed downloads file->receivedfragments = calloc(file->totalsize / fragmentsize + 1, sizeof(*file->receivedfragments)); @@ -1397,7 +1398,7 @@ void PT_FileFragment(void) if (fragmentpos >= file->totalsize) I_Error("Invalid file fragment\n"); - file->iteration = max(file->iteration, netbuffer->u.filetxpak.iteration); + file->iteration = max(file->iteration, pak->iteration); if (!file->receivedfragments[fragmentpos / fragmentsize]) // Not received yet { @@ -1405,7 +1406,7 @@ void PT_FileFragment(void) // We can receive packets in the wrong order, anyway all OSes support gaped files fseek(file->file, fragmentpos, SEEK_SET); - if (fragmentsize && fwrite(netbuffer->u.filetxpak.data, boundedfragmentsize, 1, file->file) != 1) + if (fragmentsize && fwrite(pak->data, boundedfragmentsize, 1, file->file) != 1) I_Error("Can't write to %s: %s\n",filename, M_FileError(file->file)); file->currentsize += boundedfragmentsize; From 286010c6e9817e58a1ecaf0628901af0da09448b Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 20 Feb 2022 03:13:23 -0800 Subject: [PATCH 05/15] pedantic: replace GNU empty initializer extension with C99 0 initializer --- src/k_kart.c | 2 +- src/k_pathfind.c | 6 +++--- src/k_waypoint.c | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index bf63ad04e..447241e50 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -7657,7 +7657,7 @@ void K_UpdateDistanceFromFinishLine(player_t *const player) const boolean useshortcuts = false; const boolean huntbackwards = false; boolean pathfindsuccess = false; - path_t pathtofinish = {}; + path_t pathtofinish = {0}; pathfindsuccess = K_PathfindToWaypoint(player->nextwaypoint, finishline, &pathtofinish, useshortcuts, huntbackwards); diff --git a/src/k_pathfind.c b/src/k_pathfind.c index 316eab418..eb91dda2b 100644 --- a/src/k_pathfind.c +++ b/src/k_pathfind.c @@ -298,7 +298,7 @@ boolean K_PathfindAStar(path_t *const path, pathfindsetup_t *const pathfindsetup else if (pathfindsetup->startnodedata == pathfindsetup->endnodedata) { // At the destination, return a simple 1 node path - pathfindnode_t singlenode = {}; + pathfindnode_t singlenode = {0}; singlenode.camefrom = NULL; singlenode.nodedata = pathfindsetup->endnodedata; singlenode.heapindex = SIZE_MAX; @@ -311,8 +311,8 @@ boolean K_PathfindAStar(path_t *const path, pathfindsetup_t *const pathfindsetup } else { - bheap_t openset = {}; - bheapitem_t poppedbheapitem = {}; + bheap_t openset = {0}; + bheapitem_t poppedbheapitem = {0}; pathfindnode_t *nodesarray = NULL; pathfindnode_t **closedset = NULL; pathfindnode_t *newnode = NULL; diff --git a/src/k_waypoint.c b/src/k_waypoint.c index 73eb82bfa..903e66e2a 100644 --- a/src/k_waypoint.c +++ b/src/k_waypoint.c @@ -302,7 +302,7 @@ static void K_CompareOverlappingWaypoint const boolean useshortcuts = false; const boolean huntbackwards = false; boolean pathfindsuccess = false; - path_t pathtofinish = {}; + path_t pathtofinish = {0}; pathfindsuccess = K_PathfindToWaypoint(checkwaypoint, finishline, &pathtofinish, useshortcuts, huntbackwards); @@ -1064,7 +1064,7 @@ boolean K_PathfindToWaypoint( } else { - pathfindsetup_t pathfindsetup = {}; + pathfindsetup_t pathfindsetup = {0}; getconnectednodesfunc nextnodesfunc = K_WaypointPathfindGetNext; getnodeconnectioncostsfunc nodecostsfunc = K_WaypointPathfindGetNextCosts; getnodeheuristicfunc heuristicfunc = K_WaypointPathfindGetHeuristic; @@ -1158,8 +1158,8 @@ waypoint_t *K_GetNextWaypointToDestination( } else { - path_t pathtowaypoint = {}; - pathfindsetup_t pathfindsetup = {}; + path_t pathtowaypoint = {0}; + pathfindsetup_t pathfindsetup = {0}; boolean pathfindsuccess = false; getconnectednodesfunc nextnodesfunc = K_WaypointPathfindGetNext; getnodeconnectioncostsfunc nodecostsfunc = K_WaypointPathfindGetNextCosts; @@ -1559,7 +1559,7 @@ static UINT32 K_SetupCircuitLength(void) { // Create a fake finishline waypoint, then try and pathfind to the finishline from it waypoint_t fakefinishline = *finishline; - path_t bestcircuitpath = {}; + path_t bestcircuitpath = {0}; const boolean useshortcuts = false; const boolean huntbackwards = false; From bef9f502ca5ba516e5a8f1700f7726eb3a044977 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 20 Feb 2022 03:15:51 -0800 Subject: [PATCH 06/15] pedantic: cast to (void*) for printf %p --- src/hardware/hw_md2.c | 4 ++-- src/m_misc.c | 4 ++-- src/p_enemy.c | 2 +- src/r_picformats.c | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index 38b151d91..4c60936b2 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -144,13 +144,13 @@ static inline void md2_printModelInfo (model_t *model) #ifdef HAVE_PNG static void PNG_error(png_structp PNG, png_const_charp pngtext) { - CONS_Debug(DBG_RENDER, "libpng error at %p: %s", PNG, pngtext); + CONS_Debug(DBG_RENDER, "libpng error at %p: %s", (void*)PNG, pngtext); //I_Error("libpng error at %p: %s", PNG, pngtext); } static void PNG_warn(png_structp PNG, png_const_charp pngtext) { - CONS_Debug(DBG_RENDER, "libpng warning at %p: %s", PNG, pngtext); + CONS_Debug(DBG_RENDER, "libpng warning at %p: %s", (void*)PNG, pngtext); } static GLTextureFormat_t PNG_Load(const char *filename, int *w, int *h, GLPatch_t *grpatch) diff --git a/src/m_misc.c b/src/m_misc.c index f4649a3ad..ccd4522a0 100644 --- a/src/m_misc.c +++ b/src/m_misc.c @@ -746,12 +746,12 @@ static const char *Newsnapshotfile(const char *pathname, const char *ext) FUNCNORETURN static void PNG_error(png_structp PNG, png_const_charp pngtext) { //CONS_Debug(DBG_RENDER, "libpng error at %p: %s", PNG, pngtext); - I_Error("libpng error at %p: %s", PNG, pngtext); + I_Error("libpng error at %p: %s", (void*)PNG, pngtext); } static void PNG_warn(png_structp PNG, png_const_charp pngtext) { - CONS_Debug(DBG_RENDER, "libpng warning at %p: %s", PNG, pngtext); + CONS_Debug(DBG_RENDER, "libpng warning at %p: %s", (void*)PNG, pngtext); } static void M_PNGhdr(png_structp png_ptr, png_infop png_info_ptr, PNG_CONST png_uint_32 width, PNG_CONST png_uint_32 height, PNG_CONST png_byte *palette) diff --git a/src/p_enemy.c b/src/p_enemy.c index 04e77bd8f..13aa583f1 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -8240,7 +8240,7 @@ void A_RemoteAction(mobj_t *actor) astate = &states[locvar2]; CONS_Debug(DBG_GAMELOGIC, "A_RemoteAction: Calling action on %p\n" - "var1 is %d\nvar2 is %d\n", actor->target, var1, var2); + "var1 is %d\nvar2 is %d\n", (void*)actor->target, var1, var2); states[locvar2].action.acp1(actor->target); } diff --git a/src/r_picformats.c b/src/r_picformats.c index d0cd5ba93..9f9028fc2 100644 --- a/src/r_picformats.c +++ b/src/r_picformats.c @@ -873,13 +873,13 @@ static int PNG_ChunkReader(png_structp png_ptr, png_unknown_chunkp chonk) static void PNG_error(png_structp PNG, png_const_charp pngtext) { - CONS_Debug(DBG_RENDER, "libpng error at %p: %s", PNG, pngtext); + CONS_Debug(DBG_RENDER, "libpng error at %p: %s", (void*)PNG, pngtext); //I_Error("libpng error at %p: %s", PNG, pngtext); } static void PNG_warn(png_structp PNG, png_const_charp pngtext) { - CONS_Debug(DBG_RENDER, "libpng warning at %p: %s", PNG, pngtext); + CONS_Debug(DBG_RENDER, "libpng warning at %p: %s", (void*)PNG, pngtext); } static png_byte grAb_chunk[5] = {'g', 'r', 'A', 'b', (png_byte)'\0'}; From 9722027fc155787830eebe74263fd9169937bba9 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 20 Feb 2022 03:18:47 -0800 Subject: [PATCH 07/15] Add macro to cast function pointer to void pointer Does not evaluate constant expression, I don't know if that's possible. --- src/doomtype.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/doomtype.h b/src/doomtype.h index 7e91ed7e4..c6cde7b6b 100644 --- a/src/doomtype.h +++ b/src/doomtype.h @@ -409,4 +409,12 @@ typedef UINT64 precise_t; #define intsign(n) \ ((n) < 0 ? -1 : (n) > 0 ? 1 : 0) +// ISO C forbids function pointer -> void pointer cast but +// if it's wrapped in a struct, we can take a pointer to +// that struct and it's fine... + +// Cast function pointer to (void*) +#define FUNCPTRCAST(p) ((union{void(*f)(void);void*v;})\ + {(void(*)(void))p}).v + #endif //__DOOMTYPE__ From d7087c7405ca6d6105bc0d998949aea26fd2cd3b Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 20 Feb 2022 03:22:25 -0800 Subject: [PATCH 08/15] pedantic: fix address loading function pointer casts --- src/hardware/r_opengl/r_opengl.c | 64 ++++++++++++++--------------- src/sdl/hwsym_sdl.c | 4 +- src/sdl/i_video.c | 70 ++++++++++++++++---------------- 3 files changed, 69 insertions(+), 69 deletions(-) diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index b2762dcbf..28dec4b08 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -457,7 +457,7 @@ boolean SetupGLfunc(void) { #ifndef STATIC_OPENGL #define GETOPENGLFUNC(func, proc) \ - func = GetGLFunc(#proc); \ + *(void**)&func = GetGLFunc(#proc); \ if (!func) \ { \ GL_MSG_Warning("failed to get OpenGL function: %s", #proc); \ @@ -900,46 +900,46 @@ static struct { void SetupGLFunc4(void) { - pglActiveTexture = GetGLFunc("glActiveTexture"); - pglMultiTexCoord2f = GetGLFunc("glMultiTexCoord2f"); - pglClientActiveTexture = GetGLFunc("glClientActiveTexture"); - pglMultiTexCoord2fv = GetGLFunc("glMultiTexCoord2fv"); + *(void**)&pglActiveTexture = GetGLFunc("glActiveTexture"); + *(void**)&pglMultiTexCoord2f = GetGLFunc("glMultiTexCoord2f"); + *(void**)&pglClientActiveTexture = GetGLFunc("glClientActiveTexture"); + *(void**)&pglMultiTexCoord2fv = GetGLFunc("glMultiTexCoord2fv"); /* 1.5 funcs */ - pglGenBuffers = GetGLFunc("glGenBuffers"); - pglBindBuffer = GetGLFunc("glBindBuffer"); - pglBufferData = GetGLFunc("glBufferData"); - pglDeleteBuffers = GetGLFunc("glDeleteBuffers"); + *(void**)&pglGenBuffers = GetGLFunc("glGenBuffers"); + *(void**)&pglBindBuffer = GetGLFunc("glBindBuffer"); + *(void**)&pglBufferData = GetGLFunc("glBufferData"); + *(void**)&pglDeleteBuffers = GetGLFunc("glDeleteBuffers"); /* 2.0 funcs */ - pglBlendEquation = GetGLFunc("glBlendEquation"); + *(void**)&pglBlendEquation = GetGLFunc("glBlendEquation"); #ifdef GL_SHADERS - pglCreateShader = GetGLFunc("glCreateShader"); - pglShaderSource = GetGLFunc("glShaderSource"); - pglCompileShader = GetGLFunc("glCompileShader"); - pglGetShaderiv = GetGLFunc("glGetShaderiv"); - pglGetShaderInfoLog = GetGLFunc("glGetShaderInfoLog"); - pglDeleteShader = GetGLFunc("glDeleteShader"); - pglCreateProgram = GetGLFunc("glCreateProgram"); - pglDeleteProgram = GetGLFunc("glDeleteProgram"); - pglAttachShader = GetGLFunc("glAttachShader"); - pglLinkProgram = GetGLFunc("glLinkProgram"); - pglGetProgramiv = GetGLFunc("glGetProgramiv"); - pglUseProgram = GetGLFunc("glUseProgram"); - pglUniform1i = GetGLFunc("glUniform1i"); - pglUniform1f = GetGLFunc("glUniform1f"); - pglUniform2f = GetGLFunc("glUniform2f"); - pglUniform3f = GetGLFunc("glUniform3f"); - pglUniform4f = GetGLFunc("glUniform4f"); - pglUniform1fv = GetGLFunc("glUniform1fv"); - pglUniform2fv = GetGLFunc("glUniform2fv"); - pglUniform3fv = GetGLFunc("glUniform3fv"); - pglGetUniformLocation = GetGLFunc("glGetUniformLocation"); + *(void**)&pglCreateShader = GetGLFunc("glCreateShader"); + *(void**)&pglShaderSource = GetGLFunc("glShaderSource"); + *(void**)&pglCompileShader = GetGLFunc("glCompileShader"); + *(void**)&pglGetShaderiv = GetGLFunc("glGetShaderiv"); + *(void**)&pglGetShaderInfoLog = GetGLFunc("glGetShaderInfoLog"); + *(void**)&pglDeleteShader = GetGLFunc("glDeleteShader"); + *(void**)&pglCreateProgram = GetGLFunc("glCreateProgram"); + *(void**)&pglDeleteProgram = GetGLFunc("glDeleteProgram"); + *(void**)&pglAttachShader = GetGLFunc("glAttachShader"); + *(void**)&pglLinkProgram = GetGLFunc("glLinkProgram"); + *(void**)&pglGetProgramiv = GetGLFunc("glGetProgramiv"); + *(void**)&pglUseProgram = GetGLFunc("glUseProgram"); + *(void**)&pglUniform1i = GetGLFunc("glUniform1i"); + *(void**)&pglUniform1f = GetGLFunc("glUniform1f"); + *(void**)&pglUniform2f = GetGLFunc("glUniform2f"); + *(void**)&pglUniform3f = GetGLFunc("glUniform3f"); + *(void**)&pglUniform4f = GetGLFunc("glUniform4f"); + *(void**)&pglUniform1fv = GetGLFunc("glUniform1fv"); + *(void**)&pglUniform2fv = GetGLFunc("glUniform2fv"); + *(void**)&pglUniform3fv = GetGLFunc("glUniform3fv"); + *(void**)&pglGetUniformLocation = GetGLFunc("glGetUniformLocation"); #endif // GLU - pgluBuild2DMipmaps = GetGLFunc("gluBuild2DMipmaps"); + *(void**)&pgluBuild2DMipmaps = GetGLFunc("gluBuild2DMipmaps"); } // jimita diff --git a/src/sdl/hwsym_sdl.c b/src/sdl/hwsym_sdl.c index 96e3d7d69..0baf05e86 100644 --- a/src/sdl/hwsym_sdl.c +++ b/src/sdl/hwsym_sdl.c @@ -57,7 +57,7 @@ #define GETFUNC(func) \ else if (0 == strcmp(#func, funcName)) \ - funcPointer = &func \ + funcPointer = FUNCPTRCAST(&func) \ // // /** \brief The *hwSym function @@ -75,7 +75,7 @@ void *hwSym(const char *funcName,void *handle) void *funcPointer = NULL; #ifdef HWRENDER if (0 == strcmp("SetPalette", funcName)) - funcPointer = &OglSdlSetPalette; + funcPointer = FUNCPTRCAST(&OglSdlSetPalette); GETFUNC(Init); GETFUNC(Draw2DLine); diff --git a/src/sdl/i_video.c b/src/sdl/i_video.c index c04eab8bc..02c75ebb8 100644 --- a/src/sdl/i_video.c +++ b/src/sdl/i_video.c @@ -1971,43 +1971,43 @@ void VID_StartupOpenGL(void) if (!glstartup) { CONS_Printf("VID_StartupOpenGL()...\n"); - HWD.pfnInit = hwSym("Init",NULL); - HWD.pfnFinishUpdate = NULL; - HWD.pfnDraw2DLine = hwSym("Draw2DLine",NULL); - HWD.pfnDrawPolygon = hwSym("DrawPolygon",NULL); - HWD.pfnDrawIndexedTriangles = hwSym("DrawIndexedTriangles",NULL); - HWD.pfnRenderSkyDome = hwSym("RenderSkyDome",NULL); - HWD.pfnSetBlend = hwSym("SetBlend",NULL); - HWD.pfnClearBuffer = hwSym("ClearBuffer",NULL); - HWD.pfnSetTexture = hwSym("SetTexture",NULL); - HWD.pfnUpdateTexture = hwSym("UpdateTexture",NULL); - HWD.pfnDeleteTexture = hwSym("DeleteTexture",NULL); - HWD.pfnReadRect = hwSym("ReadRect",NULL); - HWD.pfnGClipRect = hwSym("GClipRect",NULL); - HWD.pfnClearMipMapCache = hwSym("ClearMipMapCache",NULL); - HWD.pfnSetSpecialState = hwSym("SetSpecialState",NULL); - HWD.pfnSetPalette = hwSym("SetPalette",NULL); - HWD.pfnGetTextureUsed = hwSym("GetTextureUsed",NULL); - HWD.pfnDrawModel = hwSym("DrawModel",NULL); - HWD.pfnCreateModelVBOs = hwSym("CreateModelVBOs",NULL); - HWD.pfnSetTransform = hwSym("SetTransform",NULL); - HWD.pfnPostImgRedraw = hwSym("PostImgRedraw",NULL); - HWD.pfnFlushScreenTextures=hwSym("FlushScreenTextures",NULL); - HWD.pfnStartScreenWipe = hwSym("StartScreenWipe",NULL); - HWD.pfnEndScreenWipe = hwSym("EndScreenWipe",NULL); - HWD.pfnDoScreenWipe = hwSym("DoScreenWipe",NULL); - HWD.pfnDrawIntermissionBG=hwSym("DrawIntermissionBG",NULL); - HWD.pfnMakeScreenTexture= hwSym("MakeScreenTexture",NULL); - HWD.pfnMakeScreenFinalTexture=hwSym("MakeScreenFinalTexture",NULL); - HWD.pfnDrawScreenFinalTexture=hwSym("DrawScreenFinalTexture",NULL); + *(void**)&HWD.pfnInit = hwSym("Init",NULL); + *(void**)&HWD.pfnFinishUpdate = NULL; + *(void**)&HWD.pfnDraw2DLine = hwSym("Draw2DLine",NULL); + *(void**)&HWD.pfnDrawPolygon = hwSym("DrawPolygon",NULL); + *(void**)&HWD.pfnDrawIndexedTriangles = hwSym("DrawIndexedTriangles",NULL); + *(void**)&HWD.pfnRenderSkyDome = hwSym("RenderSkyDome",NULL); + *(void**)&HWD.pfnSetBlend = hwSym("SetBlend",NULL); + *(void**)&HWD.pfnClearBuffer = hwSym("ClearBuffer",NULL); + *(void**)&HWD.pfnSetTexture = hwSym("SetTexture",NULL); + *(void**)&HWD.pfnUpdateTexture = hwSym("UpdateTexture",NULL); + *(void**)&HWD.pfnDeleteTexture = hwSym("DeleteTexture",NULL); + *(void**)&HWD.pfnReadRect = hwSym("ReadRect",NULL); + *(void**)&HWD.pfnGClipRect = hwSym("GClipRect",NULL); + *(void**)&HWD.pfnClearMipMapCache = hwSym("ClearMipMapCache",NULL); + *(void**)&HWD.pfnSetSpecialState = hwSym("SetSpecialState",NULL); + *(void**)&HWD.pfnSetPalette = hwSym("SetPalette",NULL); + *(void**)&HWD.pfnGetTextureUsed = hwSym("GetTextureUsed",NULL); + *(void**)&HWD.pfnDrawModel = hwSym("DrawModel",NULL); + *(void**)&HWD.pfnCreateModelVBOs = hwSym("CreateModelVBOs",NULL); + *(void**)&HWD.pfnSetTransform = hwSym("SetTransform",NULL); + *(void**)&HWD.pfnPostImgRedraw = hwSym("PostImgRedraw",NULL); + *(void**)&HWD.pfnFlushScreenTextures=hwSym("FlushScreenTextures",NULL); + *(void**)&HWD.pfnStartScreenWipe = hwSym("StartScreenWipe",NULL); + *(void**)&HWD.pfnEndScreenWipe = hwSym("EndScreenWipe",NULL); + *(void**)&HWD.pfnDoScreenWipe = hwSym("DoScreenWipe",NULL); + *(void**)&HWD.pfnDrawIntermissionBG=hwSym("DrawIntermissionBG",NULL); + *(void**)&HWD.pfnMakeScreenTexture= hwSym("MakeScreenTexture",NULL); + *(void**)&HWD.pfnMakeScreenFinalTexture=hwSym("MakeScreenFinalTexture",NULL); + *(void**)&HWD.pfnDrawScreenFinalTexture=hwSym("DrawScreenFinalTexture",NULL); - HWD.pfnCompileShaders = hwSym("CompileShaders",NULL); - HWD.pfnCleanShaders = hwSym("CleanShaders",NULL); - HWD.pfnSetShader = hwSym("SetShader",NULL); - HWD.pfnUnSetShader = hwSym("UnSetShader",NULL); + *(void**)&HWD.pfnCompileShaders = hwSym("CompileShaders",NULL); + *(void**)&HWD.pfnCleanShaders = hwSym("CleanShaders",NULL); + *(void**)&HWD.pfnSetShader = hwSym("SetShader",NULL); + *(void**)&HWD.pfnUnSetShader = hwSym("UnSetShader",NULL); - HWD.pfnSetShaderInfo = hwSym("SetShaderInfo",NULL); - HWD.pfnLoadCustomShader = hwSym("LoadCustomShader",NULL); + *(void**)&HWD.pfnSetShaderInfo = hwSym("SetShaderInfo",NULL); + *(void**)&HWD.pfnLoadCustomShader = hwSym("LoadCustomShader",NULL); vid.glstate = HWD.pfnInit() ? VID_GL_LIBRARY_LOADED : VID_GL_LIBRARY_ERROR; // let load the OpenGL library From 366ac0b1b2a46cce8546727304cee61e94b7c548 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 20 Feb 2022 03:23:45 -0800 Subject: [PATCH 09/15] pedantic: fix paren surrounding braces --- src/byteptr.h | 71 +++++++++++++++++---------------------------------- 1 file changed, 23 insertions(+), 48 deletions(-) diff --git a/src/byteptr.h b/src/byteptr.h index 01a6293b4..fd178ba3b 100644 --- a/src/byteptr.h +++ b/src/byteptr.h @@ -43,8 +43,8 @@ #define WRITEANGLE(p,b) do { angle_t *p_tmp = (angle_t *)p; *p_tmp = (angle_t)(b); p_tmp++; p = (void *)p_tmp; } while (0) #endif -#ifdef __GNUC__ -#ifdef DEALIGNED +// what is this? +#if defined (__GNUC__) && defined (DEALIGNED) #define READUINT8(p) ({ UINT8 *p_tmp = (void *)p; UINT8 b; memcpy(&b, p, sizeof( UINT8)); p_tmp++; p = (void *)p_tmp; b; }) #define READSINT8(p) ({ SINT8 *p_tmp = (void *)p; SINT8 b; memcpy(&b, p, sizeof( SINT8)); p_tmp++; p = (void *)p_tmp; b; }) #define READINT16(p) ({ INT16 *p_tmp = (void *)p; INT16 b; memcpy(&b, p, sizeof( INT16)); p_tmp++; p = (void *)p_tmp; b; }) @@ -55,26 +55,15 @@ #define READFIXED(p) ({ fixed_t *p_tmp = (void *)p; fixed_t b; memcpy(&b, p, sizeof(fixed_t)); p_tmp++; p = (void *)p_tmp; b; }) #define READANGLE(p) ({ angle_t *p_tmp = (void *)p; angle_t b; memcpy(&b, p, sizeof(angle_t)); p_tmp++; p = (void *)p_tmp; b; }) #else -#define READUINT8(p) ({ UINT8 *p_tmp = ( UINT8 *)p; UINT8 b = *p_tmp; p_tmp++; p = (void *)p_tmp; b; }) -#define READSINT8(p) ({ SINT8 *p_tmp = ( SINT8 *)p; SINT8 b = *p_tmp; p_tmp++; p = (void *)p_tmp; b; }) -#define READINT16(p) ({ INT16 *p_tmp = ( INT16 *)p; INT16 b = *p_tmp; p_tmp++; p = (void *)p_tmp; b; }) -#define READUINT16(p) ({ UINT16 *p_tmp = ( UINT16 *)p; UINT16 b = *p_tmp; p_tmp++; p = (void *)p_tmp; b; }) -#define READINT32(p) ({ INT32 *p_tmp = ( INT32 *)p; INT32 b = *p_tmp; p_tmp++; p = (void *)p_tmp; b; }) -#define READUINT32(p) ({ UINT32 *p_tmp = ( UINT32 *)p; UINT32 b = *p_tmp; p_tmp++; p = (void *)p_tmp; b; }) -#define READCHAR(p) ({ char *p_tmp = ( char *)p; char b = *p_tmp; p_tmp++; p = (void *)p_tmp; b; }) -#define READFIXED(p) ({ fixed_t *p_tmp = (fixed_t *)p; fixed_t b = *p_tmp; p_tmp++; p = (void *)p_tmp; b; }) -#define READANGLE(p) ({ angle_t *p_tmp = (angle_t *)p; angle_t b = *p_tmp; p_tmp++; p = (void *)p_tmp; b; }) -#endif -#else -#define READUINT8(p) *(( UINT8 *)p)++ -#define READSINT8(p) *(( SINT8 *)p)++ -#define READINT16(p) *(( INT16 *)p)++ -#define READUINT16(p) *(( UINT16 *)p)++ -#define READINT32(p) *(( INT32 *)p)++ -#define READUINT32(p) *(( UINT32 *)p)++ -#define READCHAR(p) *(( char *)p)++ -#define READFIXED(p) *((fixed_t *)p)++ -#define READANGLE(p) *((angle_t *)p)++ +#define READUINT8(p) ((UINT8*)(p = (void*)&((UINT8*)p)[1]))[-1] +#define READSINT8(p) ((SINT8*)(p = (void*)&((SINT8*)p)[1]))[-1] +#define READINT16(p) ((INT16*)(p = (void*)&((INT16*)p)[1]))[-1] +#define READUINT16(p) ((UINT16*)(p = (void*)&((UINT16*)p)[1]))[-1] +#define READINT32(p) ((INT32*)(p = (void*)&((INT32*)p)[1]))[-1] +#define READUINT32(p) ((UINT32*)(p = (void*)&((UINT32*)p)[1]))[-1] +#define READCHAR(p) ((char*)(p = (void*)&((char*)p)[1]))[-1] +#define READFIXED(p) ((fixed_t*)(p = (void*)&((fixed_t*)p)[1]))[-1] +#define READANGLE(p) ((angle_t*)(p = (void*)&((angle_t*)p)[1]))[-1] #endif #else //SRB2_BIG_ENDIAN @@ -137,15 +126,15 @@ FUNCINLINE static ATTRINLINE UINT32 readulong(void *ptr) return (ucp[3] << 24) | (ucp[2] << 16) | (ucp[1] << 8) | ucp[0]; } -#define READUINT8(p) ({ UINT8 *p_tmp = ( UINT8 *)p; UINT8 b = *p_tmp; p_tmp++; p = (void *)p_tmp; b; }) -#define READSINT8(p) ({ SINT8 *p_tmp = ( SINT8 *)p; SINT8 b = *p_tmp; p_tmp++; p = (void *)p_tmp; b; }) -#define READINT16(p) ({ INT16 *p_tmp = ( INT16 *)p; INT16 b = readshort(p); p_tmp++; p = (void *)p_tmp; b; }) -#define READUINT16(p) ({ UINT16 *p_tmp = ( UINT16 *)p; UINT16 b = readushort(p); p_tmp++; p = (void *)p_tmp; b; }) -#define READINT32(p) ({ INT32 *p_tmp = ( INT32 *)p; INT32 b = readlong(p); p_tmp++; p = (void *)p_tmp; b; }) -#define READUINT32(p) ({ UINT32 *p_tmp = ( UINT32 *)p; UINT32 b = readulong(p); p_tmp++; p = (void *)p_tmp; b; }) -#define READCHAR(p) ({ char *p_tmp = ( char *)p; char b = *p_tmp; p_tmp++; p = (void *)p_tmp; b; }) -#define READFIXED(p) ({ fixed_t *p_tmp = (fixed_t *)p; fixed_t b = readlong(p); p_tmp++; p = (void *)p_tmp; b; }) -#define READANGLE(p) ({ angle_t *p_tmp = (angle_t *)p; angle_t b = readulong(p); p_tmp++; p = (void *)p_tmp; b; }) +#define READUINT8(p) ((UINT8*)(p = (void*)&((UINT8*)p)[1]))[-1] +#define READSINT8(p) ((SINT8*)(p = (void*)&((SINT8*)p)[1]))[-1] +#define READINT16(p) readshort(&((INT16*)(p = (void*)&((INT16*)p)[1]))[-1]) +#define READUINT16(p) readushort(&((UINT16*)(p = (void*)&((UINT16*)p)[1]))[-1]) +#define READINT32(p) readlong(&((INT32*)(p = (void*)&((INT32*)p)[1]))[-1]) +#define READUINT32(p) readulong(&((UINT32*)(p = (void*)&((UINT32*)p)[1])) +#define READCHAR(p) ((char*)(p = (void*)&((char*)p)[1]))[-1] +#define READFIXED(p) readlong(&((fixed_t*)(p = (void*)&((fixed_t*)p)[1]))[-1]) +#define READANGLE(p) readulong(&((angle_t*)(p = (void*)&((angle_t*)p)[1]))[-1]) #endif //SRB2_BIG_ENDIAN #undef DEALIGNED @@ -156,20 +145,6 @@ FUNCINLINE static ATTRINLINE UINT32 readulong(void *ptr) #define SKIPSTRING(p) while (READCHAR(p) != '\0') -#define READSTRINGN(p,s,n) ({ size_t tmp_i = 0; for (; tmp_i < n && (s[tmp_i] = READCHAR(p)) != '\0'; tmp_i++); s[tmp_i] = '\0';}) -#define READSTRING(p,s) ({ size_t tmp_i = 0; for (; (s[tmp_i] = READCHAR(p)) != '\0'; tmp_i++); s[tmp_i] = '\0';}) -#define READMEM(p,s,n) ({ memcpy(s, p, n); p += n; }) - -#if 0 // old names -#define WRITEBYTE(p,b) WRITEUINT8(p,b) -#define WRITESHORT(p,b) WRITEINT16(p,b) -#define WRITEUSHORT(p,b) WRITEUINT16(p,b) -#define WRITELONG(p,b) WRITEINT32(p,b) -#define WRITEULONG(p,b) WRITEUINT32(p,b) - -#define READBYTE(p) READUINT8(p) -#define READSHORT(p) READINT16(p) -#define READUSHORT(p) READUINT16(p) -#define READLONG(p) READINT32(p) -#define READULONG(p) READUINT32(p) -#endif +#define READSTRINGN(p,s,n) do { size_t tmp_i = 0; for (; tmp_i < n && (s[tmp_i] = READCHAR(p)) != '\0'; tmp_i++); s[tmp_i] = '\0';} while (0) +#define READSTRING(p,s) do { size_t tmp_i = 0; for (; (s[tmp_i] = READCHAR(p)) != '\0'; tmp_i++); s[tmp_i] = '\0';} while (0) +#define READMEM(p,s,n) do { memcpy(s, p, n); p += n; } while (0) From 2887385122c39e2b6da5659b24ffbdbc0408a2e6 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 20 Feb 2022 03:25:46 -0800 Subject: [PATCH 10/15] pedantic: ignore enums signed overflow --- src/p_mobj.h | 2 +- src/p_saveg.c | 2 +- src/r_defs.h | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/p_mobj.h b/src/p_mobj.h index c7ab1f364..2dfeff0a4 100644 --- a/src/p_mobj.h +++ b/src/p_mobj.h @@ -162,7 +162,7 @@ typedef enum // Disable momentum-based squash and stretch. MF_NOSQUISH = 1<<30, // Disable hitlag for this object - MF_NOHITLAGFORME = 1<<31, + MF_NOHITLAGFORME = (INT32)(1U<<31), // no more free slots, next up I suppose we can get rid of shit like MF_BOXICON? } mobjflag_t; diff --git a/src/p_saveg.c b/src/p_saveg.c index 0561d365a..5ebfc8478 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -1527,7 +1527,7 @@ typedef enum MD_DSCALE = 1<<28, MD_BLUEFLAG = 1<<29, MD_REDFLAG = 1<<30, - MD_MORE = 1<<31 + MD_MORE = (INT32)(1U<<31) } mobj_diff_t; typedef enum diff --git a/src/r_defs.h b/src/r_defs.h index c69d78d64..a466c856c 100644 --- a/src/r_defs.h +++ b/src/r_defs.h @@ -150,7 +150,7 @@ typedef enum FF_SPINBUST = 0x10000000, ///< Used with ::FF_BUSTUP. Also bustable if you're in your spinning frames. FF_STRONGBUST = 0x20000000, ///< Used with ::FF_BUSTUP. Only bustable by "strong" characters (Knuckles) and abilities (bouncing, twinspin, melee). FF_RIPPLE = 0x40000000, ///< Ripple the flats - FF_COLORMAPONLY = 0x80000000, ///< Only copy the colormap, not the lightlevel + FF_COLORMAPONLY = (INT32)0x80000000, ///< Only copy the colormap, not the lightlevel FF_GOOWATER = FF_SHATTERBOTTOM, ///< Used with ::FF_SWIMMABLE. Makes thick bouncey goop. } ffloortype_e; @@ -775,7 +775,7 @@ typedef enum RF_MODULATE = ((AST_MODULATE-1)< Date: Sun, 20 Feb 2022 03:28:22 -0800 Subject: [PATCH 11/15] pedantic: fix misc leniencies and GNU-isms --- src/d_clisrv.c | 6 +++--- src/d_main.c | 4 ++-- src/d_netcmd.c | 9 ++++----- src/deh_lua.c | 2 +- src/deh_lua.h | 2 +- src/dehacked.c | 2 +- src/m_cheat.c | 8 ++++---- src/p_mobj.c | 6 +++--- src/p_setup.c | 2 +- src/r_main.h | 2 +- src/r_things.c | 6 +++++- 11 files changed, 26 insertions(+), 23 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 31ecc92ca..0bc66b4d0 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -1585,7 +1585,7 @@ static boolean CL_FinishedFileList(void) "You may load server addons (if any), and wait for a slot.\n" "\n" "Press ACCEL to continue or BRAKE to cancel.\n\n" - ), M_ConfirmConnect, MM_EVENTHANDLER); + ), FUNCPTRCAST (M_ConfirmConnect), MM_EVENTHANDLER); cl_mode = CL_CONFIRMCONNECT; } else @@ -1652,13 +1652,13 @@ static boolean CL_FinishedFileList(void) "You may download, load server addons, and wait for a slot.\n" "\n" "Press ACCEL to continue or BRAKE to cancel.\n\n" - ), downloadsize), M_ConfirmConnect, MM_EVENTHANDLER); + ), downloadsize), FUNCPTRCAST(M_ConfirmConnect), MM_EVENTHANDLER); else M_StartMessage(va(M_GetText( "Download of %s additional content is required to join.\n" "\n" "Press ACCEL to continue or BRAKE to cancel.\n\n" - ), downloadsize), M_ConfirmConnect, MM_EVENTHANDLER); + ), downloadsize), FUNCPTRCAST(M_ConfirmConnect), MM_EVENTHANDLER); Z_Free(downloadsize); cl_mode = CL_CONFIRMCONNECT; diff --git a/src/d_main.c b/src/d_main.c index c95621a05..44e481108 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -819,7 +819,7 @@ void D_SRB2Loop(void) // Update display, next frame, with current state. // (Only display if not already done for frame interp) - cv_frameinterpolation.value == 0 ? D_Display() : 0; + cv_frameinterpolation.value == 0 ? D_Display() : (void)0; if (moviemode) M_SaveFrame(); @@ -829,7 +829,7 @@ void D_SRB2Loop(void) else if (rendertimeout < entertic) // in case the server hang or netsplit { // (Only display if not already done for frame interp) - cv_frameinterpolation.value == 0 ? D_Display() : 0; + cv_frameinterpolation.value == 0 ? D_Display() : (void)0; if (moviemode) M_SaveFrame(); diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 416aeb86a..24d2912ae 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -415,14 +415,13 @@ static CV_PossibleValue_t kartdebugitem_cons_t[] = consvar_t cv_kartdebugitem = CVAR_INIT ("kartdebugitem", "0", CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP, kartdebugitem_cons_t, NULL); static CV_PossibleValue_t kartdebugamount_cons_t[] = {{1, "MIN"}, {255, "MAX"}, {0, NULL}}; consvar_t cv_kartdebugamount = CVAR_INIT ("kartdebugamount", "1", CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP, kartdebugamount_cons_t, NULL); -consvar_t cv_kartallowgiveitem = CVAR_INIT ("kartallowgiveitem", #ifdef DEVELOP - "Yes", +#define VALUE "Yes" #else - "No", +#define VALUE "No" #endif - CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP, CV_YesNo, NULL -); +consvar_t cv_kartallowgiveitem = CVAR_INIT ("kartallowgiveitem", VALUE, CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP, CV_YesNo, NULL); +#undef VALUE consvar_t cv_kartdebugdistribution = CVAR_INIT ("kartdebugdistribution", "Off", CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP, CV_OnOff, NULL); consvar_t cv_kartdebughuddrop = CVAR_INIT ("kartdebughuddrop", "Off", CV_NETVAR|CV_CHEAT|CV_NOSHOWHELP, CV_OnOff, NULL); diff --git a/src/deh_lua.c b/src/deh_lua.c index 52fd4b83e..00897103a 100644 --- a/src/deh_lua.c +++ b/src/deh_lua.c @@ -673,7 +673,7 @@ void LUA_SetActionByName(void *state, const char *actiontocompare) } } -enum actionnum LUA_GetActionNumByName(const char *actiontocompare) +size_t LUA_GetActionNumByName(const char *actiontocompare) { size_t z; for (z = 0; actionpointers[z].name; z++) diff --git a/src/deh_lua.h b/src/deh_lua.h index cd927b9fd..0912907f2 100644 --- a/src/deh_lua.h +++ b/src/deh_lua.h @@ -16,6 +16,6 @@ boolean LUA_SetLuaAction(void *state, const char *actiontocompare); const char *LUA_GetActionName(void *action); void LUA_SetActionByName(void *state, const char *actiontocompare); -enum actionnum LUA_GetActionNumByName(const char *actiontocompare); +size_t LUA_GetActionNumByName(const char *actiontocompare); #endif diff --git a/src/dehacked.c b/src/dehacked.c index 9b81a7c13..57cf8ac6a 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -51,7 +51,7 @@ void deh_strlcpy(char *dst, const char *src, size_t size, const char *warntext) strlcpy(dst, src, size); } -ATTRINLINE static FUNCINLINE char myfget_color(MYFILE *f) +ATTRINLINE static FUNCINLINE unsigned char myfget_color(MYFILE *f) { char c = *f->curpos++; if (c == '^') // oh, nevermind then. diff --git a/src/m_cheat.c b/src/m_cheat.c index 384edbba2..ce925e931 100644 --- a/src/m_cheat.c +++ b/src/m_cheat.c @@ -50,7 +50,7 @@ typedef struct { UINT8 *p; UINT8 (*func)(void); // called when cheat confirmed. - UINT8 sequence[]; + UINT8 *sequence; } cheatseq_t; // ========================================================================== @@ -149,7 +149,7 @@ static UINT8 cheatf_devmode(void) static cheatseq_t cheat_warp = { 0, cheatf_warp, //{ SCRAMBLE('r'), SCRAMBLE('e'), SCRAMBLE('d'), SCRAMBLE('x'), SCRAMBLE('v'), SCRAMBLE('i'), 0xff } - { SCRAMBLE('b'), SCRAMBLE('a'), SCRAMBLE('n'), SCRAMBLE('a'), SCRAMBLE('n'), SCRAMBLE('a'), 0xff } + (UINT8[]){ SCRAMBLE('b'), SCRAMBLE('a'), SCRAMBLE('n'), SCRAMBLE('a'), SCRAMBLE('n'), SCRAMBLE('a'), 0xff } }; static cheatseq_t cheat_warp_joy = { @@ -158,7 +158,7 @@ static cheatseq_t cheat_warp_joy = { SCRAMBLE(KEY_RIGHTARROW), SCRAMBLE(KEY_RIGHTARROW), SCRAMBLE(KEY_UPARROW), SCRAMBLE(KEY_LEFTARROW), SCRAMBLE(KEY_UPARROW), SCRAMBLE(KEY_ENTER), 0xff }*/ - { SCRAMBLE(KEY_LEFTARROW), SCRAMBLE(KEY_UPARROW), SCRAMBLE(KEY_RIGHTARROW), + (UINT8[]){ SCRAMBLE(KEY_LEFTARROW), SCRAMBLE(KEY_UPARROW), SCRAMBLE(KEY_RIGHTARROW), SCRAMBLE(KEY_RIGHTARROW), SCRAMBLE(KEY_UPARROW), SCRAMBLE(KEY_LEFTARROW), SCRAMBLE(KEY_DOWNARROW), SCRAMBLE(KEY_RIGHTARROW), SCRAMBLE(KEY_ENTER), 0xff } @@ -167,7 +167,7 @@ static cheatseq_t cheat_warp_joy = { #ifdef DEVELOP static cheatseq_t cheat_devmode = { 0, cheatf_devmode, - { SCRAMBLE('d'), SCRAMBLE('e'), SCRAMBLE('v'), SCRAMBLE('m'), SCRAMBLE('o'), SCRAMBLE('d'), SCRAMBLE('e'), 0xff } + (UINT8[]){ SCRAMBLE('d'), SCRAMBLE('e'), SCRAMBLE('v'), SCRAMBLE('m'), SCRAMBLE('o'), SCRAMBLE('d'), SCRAMBLE('e'), 0xff } }; #endif diff --git a/src/p_mobj.c b/src/p_mobj.c index 2164038be..35f59e9b1 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -3919,7 +3919,7 @@ static void P_RingThinker(mobj_t *mobj) spark = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_SIGNSPARKLE); // Spawn a fancy sparkle K_MatchGenericExtraFlags(spark, mobj); spark->colorized = true; - spark->color = mobj->color ? : SKINCOLOR_YELLOW; // Use yellow if the ring doesn't use a skin color. (It should be red for SPB rings, but let normal rings look fancy too!) + spark->color = mobj->color ? mobj->color : SKINCOLOR_YELLOW; // Use yellow if the ring doesn't use a skin color. (It should be red for SPB rings, but let normal rings look fancy too!) P_RemoveMobj(mobj); // Adieu, monde cruel! return; } @@ -9053,7 +9053,7 @@ void P_MobjThinker(mobj_t *mobj) } else { - INT32 dur = (mobj->flags2 & MF2_BOSSNOTRAP) + UINT32 dur = (mobj->flags2 & MF2_BOSSNOTRAP) ? (2*mobj->fuse)/3 : mobj->fuse/2; if (((mobj->renderflags & RF_TRANSMASK) >> RF_TRANSSHIFT) < ((NUMTRANSMAPS-1) - dur)) @@ -12766,7 +12766,7 @@ static void P_SpawnItemRow(mapthing_t *mthing, mobjtype_t* itemtypes, UINT8 numi static void P_SpawnSingularItemRow(mapthing_t* mthing, mobjtype_t itemtype, INT32 numitems, fixed_t horizontalspacing, fixed_t verticalspacing, INT16 fixedangle) { mobjtype_t itemtypes[1] = { itemtype }; - return P_SpawnItemRow(mthing, itemtypes, 1, numitems, horizontalspacing, verticalspacing, fixedangle); + P_SpawnItemRow(mthing, itemtypes, 1, numitems, horizontalspacing, verticalspacing, fixedangle); } static void P_SpawnItemCircle(mapthing_t *mthing, mobjtype_t *itemtypes, UINT8 numitemtypes, INT32 numitems, fixed_t size) diff --git a/src/p_setup.c b/src/p_setup.c index 1a1583a0a..901807424 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -2465,7 +2465,7 @@ static boolean P_LoadExtendedSubsectorsAndSegs(UINT8 **data, nodetype_t nodetype segs[k - 1 + ((m == 0) ? subsectors[i].numlines : 0)].v2 = segs[k].v1 = &vertexes[vertexnum]; - READUINT32((*data)); // partner, can be ignored by software renderer + *data += sizeof (UINT32); // partner, can be ignored by software renderer linenum = (nodetype == NT_XGL3) ? READUINT32((*data)) : READUINT16((*data)); if (linenum != 0xFFFF && linenum >= numlines) diff --git a/src/r_main.h b/src/r_main.h index a2acf60d9..8a2feca97 100644 --- a/src/r_main.h +++ b/src/r_main.h @@ -36,7 +36,7 @@ extern size_t validcount, linecount, loopcount, framecount; // The fraction of a tic being drawn (for interpolation between two tics) extern fixed_t rendertimefrac; // Evaluated delta tics for this frame (how many tics since the last frame) -extern fixed_t renderdeltatics;; +extern fixed_t renderdeltatics; // // Lighting LUT. diff --git a/src/r_things.c b/src/r_things.c index 95482bc38..e67455f99 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -1793,7 +1793,11 @@ static void R_ProjectSprite(mobj_t *thing) range++; // fencepost problem - scalestep = ((yscale2 - yscale)/range) ?: 1; + scalestep = ((yscale2 - yscale)/range); + + if (scalestep == 0) + scalestep = 1; + xscale = FixedDiv(range< Date: Sun, 20 Feb 2022 03:29:41 -0800 Subject: [PATCH 12/15] Fix silly wrong pointer in apng.c --- src/apng.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/apng.c b/src/apng.c index 0abbe541d..a5f2485d7 100644 --- a/src/apng.c +++ b/src/apng.c @@ -1,5 +1,5 @@ /* -Copyright 2019-2020, James R. +Copyright 2019-2022, James R. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -116,7 +116,7 @@ apng_default_flush (png_structp pngp) if (!( pngp )) return; - fflush((png_FILE_p)png_get_io_ptr); + fflush((png_FILE_p)png_get_io_ptr(pngp)); } #endif/* PNG_STDIO_SUPPORTED */ #endif/* PNG_WRITE_FLUSH_SUPPORTED */ From a6ec9faf93ef1402603273774baf728043cc24db Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 20 Feb 2022 03:31:25 -0800 Subject: [PATCH 13/15] pedantic: fix m_menu.c --- src/m_menu.c | 962 +++++++++++++++++++++++++-------------------------- src/m_menu.h | 3 +- 2 files changed, 482 insertions(+), 483 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index 3a5be46a9..7ea47bd70 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -313,7 +313,7 @@ static void M_ResetControls(INT32 choice); // Video & Sound menu_t OP_VideoOptionsDef, OP_VideoModeDef; #ifdef HWRENDER -static void M_OpenGLOptionsMenu(void); +static void M_OpenGLOptionsMenu(INT32 choice); menu_t OP_OpenGLOptionsDef; #endif menu_t OP_SoundOptionsDef; @@ -509,17 +509,17 @@ static consvar_t cv_dummygpcup = CVAR_INIT ("dummygpcup", "TEMP", CV_HIDEN, dumm // --------- static menuitem_t MainMenu[] = { - {IT_SUBMENU|IT_STRING, NULL, "Extras", &SR_MainDef, 76}, + {IT_SUBMENU|IT_STRING, NULL, "Extras", {.submenu = &SR_MainDef}, 76}, #ifdef TESTERS - {IT_GRAYEDOUT, NULL, "1 Player", NULL, 84}, + {IT_GRAYEDOUT, NULL, "1 Player", {NULL}, 84}, #else - {IT_CALL |IT_STRING, NULL, "1 Player", M_SinglePlayerMenu, 84}, + {IT_CALL |IT_STRING, NULL, "1 Player", {.routine = M_SinglePlayerMenu}, 84}, #endif - {IT_SUBMENU|IT_STRING, NULL, "Multiplayer", &MP_MainDef, 92}, - {IT_CALL |IT_STRING, NULL, "Options", M_Options, 100}, + {IT_SUBMENU|IT_STRING, NULL, "Multiplayer", {.submenu = &MP_MainDef}, 92}, + {IT_CALL |IT_STRING, NULL, "Options", {.routine = M_Options}, 100}, /* I don't think is useful at all... */ - {IT_CALL |IT_STRING, NULL, "Addons", M_Addons, 108}, - {IT_CALL |IT_STRING, NULL, "Quit Game", M_QuitSRB2, 116}, + {IT_CALL |IT_STRING, NULL, "Addons", {.routine = M_Addons}, 108}, + {IT_CALL |IT_STRING, NULL, "Quit Game", {.routine = M_QuitSRB2}, 116}, }; typedef enum @@ -534,49 +534,49 @@ typedef enum static menuitem_t MISC_AddonsMenu[] = { - {IT_KEYHANDLER | IT_NOTHING, NULL, "", M_HandleAddons, 0}, // dummy menuitem for the control func + {IT_KEYHANDLER | IT_NOTHING, NULL, "", {.routine = M_HandleAddons}, 0}, // dummy menuitem for the control func }; static menuitem_t MISC_ReplayHutMenu[] = { - {IT_KEYHANDLER|IT_NOTHING, NULL, "", M_HandleReplayHutList, 0}, // Dummy menuitem for the replay list - {IT_NOTHING, NULL, "", NULL, 0}, // Dummy for handling wrapping to the top of the menu.. + {IT_KEYHANDLER|IT_NOTHING, NULL, "", {.routine = M_HandleReplayHutList}, 0}, // Dummy menuitem for the replay list + {IT_NOTHING, NULL, "", {NULL}, 0}, // Dummy for handling wrapping to the top of the menu.. }; static menuitem_t MISC_ReplayStartMenu[] = { - {IT_CALL |IT_STRING, NULL, "Load Addons and Watch", M_HutStartReplay, 0}, - {IT_CALL |IT_STRING, NULL, "Watch Without Addons", M_HutStartReplay, 10}, - {IT_CALL |IT_STRING, NULL, "Watch Replay", M_HutStartReplay, 10}, - {IT_SUBMENU |IT_STRING, NULL, "Back", &MISC_ReplayHutDef, 30}, + {IT_CALL |IT_STRING, NULL, "Load Addons and Watch", {.routine = M_HutStartReplay}, 0}, + {IT_CALL |IT_STRING, NULL, "Watch Without Addons", {.routine = M_HutStartReplay}, 10}, + {IT_CALL |IT_STRING, NULL, "Watch Replay", {.routine = M_HutStartReplay}, 10}, + {IT_SUBMENU |IT_STRING, NULL, "Back", {.submenu = &MISC_ReplayHutDef}, 30}, }; static menuitem_t MISC_ReplayOptionsMenu[] = { - {IT_CVAR|IT_STRING, NULL, "Record Replays", &cv_recordmultiplayerdemos, 0}, - {IT_CVAR|IT_STRING, NULL, "Sync Check Interval", &cv_netdemosyncquality, 10}, + {IT_CVAR|IT_STRING, NULL, "Record Replays", {.cvar = &cv_recordmultiplayerdemos}, 0}, + {IT_CVAR|IT_STRING, NULL, "Sync Check Interval", {.cvar = &cv_netdemosyncquality}, 10}, }; static tic_t playback_last_menu_interaction_leveltime = 0; static menuitem_t PlaybackMenu[] = { - {IT_CALL | IT_STRING, "M_PHIDE", "Hide Menu (Esc)", M_SelectableClearMenus, 0}, + {IT_CALL | IT_STRING, "M_PHIDE", "Hide Menu (Esc)", {.routine = M_SelectableClearMenus}, 0}, - {IT_CALL | IT_STRING, "M_PREW", "Rewind ([)", M_PlaybackRewind, 20}, - {IT_CALL | IT_STRING, "M_PPAUSE", "Pause (\\)", M_PlaybackPause, 36}, - {IT_CALL | IT_STRING, "M_PFFWD", "Fast-Forward (])", M_PlaybackFastForward, 52}, - {IT_CALL | IT_STRING, "M_PSTEPB", "Backup Frame ([)", M_PlaybackRewind, 20}, - {IT_CALL | IT_STRING, "M_PRESUM", "Resume", M_PlaybackPause, 36}, - {IT_CALL | IT_STRING, "M_PFADV", "Advance Frame (])", M_PlaybackAdvance, 52}, + {IT_CALL | IT_STRING, "M_PREW", "Rewind ([)", {.routine = M_PlaybackRewind}, 20}, + {IT_CALL | IT_STRING, "M_PPAUSE", "Pause (\\)", {.routine = M_PlaybackPause}, 36}, + {IT_CALL | IT_STRING, "M_PFFWD", "Fast-Forward (])", {.routine = M_PlaybackFastForward}, 52}, + {IT_CALL | IT_STRING, "M_PSTEPB", "Backup Frame ([)", {.routine = M_PlaybackRewind}, 20}, + {IT_CALL | IT_STRING, "M_PRESUM", "Resume", {.routine = M_PlaybackPause}, 36}, + {IT_CALL | IT_STRING, "M_PFADV", "Advance Frame (])", {.routine = M_PlaybackAdvance}, 52}, - {IT_ARROWS | IT_STRING, "M_PVIEWS", "View Count (- and =)", M_PlaybackSetViews, 72}, - {IT_ARROWS | IT_STRING, "M_PNVIEW", "Viewpoint (1)", M_PlaybackAdjustView, 88}, - {IT_ARROWS | IT_STRING, "M_PNVIEW", "Viewpoint 2 (2)", M_PlaybackAdjustView, 104}, - {IT_ARROWS | IT_STRING, "M_PNVIEW", "Viewpoint 3 (3)", M_PlaybackAdjustView, 120}, - {IT_ARROWS | IT_STRING, "M_PNVIEW", "Viewpoint 4 (4)", M_PlaybackAdjustView, 136}, + {IT_ARROWS | IT_STRING, "M_PVIEWS", "View Count (- and =)", {.routine = M_PlaybackSetViews}, 72}, + {IT_ARROWS | IT_STRING, "M_PNVIEW", "Viewpoint (1)", {.routine = M_PlaybackAdjustView}, 88}, + {IT_ARROWS | IT_STRING, "M_PNVIEW", "Viewpoint 2 (2)", {.routine = M_PlaybackAdjustView}, 104}, + {IT_ARROWS | IT_STRING, "M_PNVIEW", "Viewpoint 3 (3)", {.routine = M_PlaybackAdjustView}, 120}, + {IT_ARROWS | IT_STRING, "M_PNVIEW", "Viewpoint 4 (4)", {.routine = M_PlaybackAdjustView}, 136}, - {IT_CALL | IT_STRING, "M_PVIEWS", "Toggle Free Camera (')", M_PlaybackToggleFreecam, 156}, - {IT_CALL | IT_STRING, "M_PEXIT", "Stop Playback", M_PlaybackQuit, 172}, + {IT_CALL | IT_STRING, "M_PVIEWS", "Toggle Free Camera (')", {.routine = M_PlaybackToggleFreecam}, 156}, + {IT_CALL | IT_STRING, "M_PEXIT", "Stop Playback", {.routine = M_PlaybackQuit}, 172}, }; typedef enum { @@ -602,9 +602,9 @@ typedef enum // --------------------------------- static menuitem_t MAPauseMenu[] = { - {IT_CALL | IT_STRING, NULL, "Continue", M_SelectableClearMenus,48}, - {IT_CALL | IT_STRING, NULL, "Retry", M_ModeAttackRetry, 56}, - {IT_CALL | IT_STRING, NULL, "Abort", M_ModeAttackEndGame, 64}, + {IT_CALL | IT_STRING, NULL, "Continue", {.routine = M_SelectableClearMenus},48}, + {IT_CALL | IT_STRING, NULL, "Retry", {.routine = M_ModeAttackRetry}, 56}, + {IT_CALL | IT_STRING, NULL, "Abort", {.routine = M_ModeAttackEndGame}, 64}, }; typedef enum @@ -619,30 +619,30 @@ typedef enum // --------------------- static menuitem_t MPauseMenu[] = { - {IT_STRING | IT_CALL, NULL, "Addons...", M_Addons, 8}, - {IT_STRING | IT_SUBMENU, NULL, "Scramble Teams...", &MISC_ScrambleTeamDef, 16}, - {IT_STRING | IT_CALL, NULL, "Switch Map..." , M_MapChange, 24}, + {IT_STRING | IT_CALL, NULL, "Addons...", {.routine = M_Addons}, 8}, + {IT_STRING | IT_SUBMENU, NULL, "Scramble Teams...", {.submenu = &MISC_ScrambleTeamDef}, 16}, + {IT_STRING | IT_CALL, NULL, "Switch Map..." , {.routine = M_MapChange}, 24}, #ifdef HAVE_DISCORDRPC - {IT_STRING | IT_SUBMENU, NULL, "Ask To Join Requests...", &MISC_DiscordRequestsDef, 24}, + {IT_STRING | IT_SUBMENU, NULL, "Ask To Join Requests...", {.submenu = &MISC_DiscordRequestsDef}, 24}, #endif - {IT_CALL | IT_STRING, NULL, "Continue", M_SelectableClearMenus, 40}, - {IT_CALL | IT_STRING, NULL, "P1 Setup...", M_SetupMultiPlayer, 48}, // splitscreen - {IT_CALL | IT_STRING, NULL, "P2 Setup...", M_SetupMultiPlayer2, 56}, // splitscreen - {IT_CALL | IT_STRING, NULL, "P3 Setup...", M_SetupMultiPlayer3, 64}, // splitscreen - {IT_CALL | IT_STRING, NULL, "P4 Setup...", M_SetupMultiPlayer4, 72}, // splitscreen + {IT_CALL | IT_STRING, NULL, "Continue", {.routine = M_SelectableClearMenus}, 40}, + {IT_CALL | IT_STRING, NULL, "P1 Setup...", {.routine = M_SetupMultiPlayer}, 48}, // splitscreen + {IT_CALL | IT_STRING, NULL, "P2 Setup...", {.routine = M_SetupMultiPlayer2}, 56}, // splitscreen + {IT_CALL | IT_STRING, NULL, "P3 Setup...", {.routine = M_SetupMultiPlayer3}, 64}, // splitscreen + {IT_CALL | IT_STRING, NULL, "P4 Setup...", {.routine = M_SetupMultiPlayer4}, 72}, // splitscreen - {IT_STRING | IT_CALL, NULL, "Spectate", M_ConfirmSpectate, 48}, // alone - {IT_STRING | IT_CALL, NULL, "Enter Game", M_ConfirmEnterGame, 48}, // alone - {IT_STRING | IT_CALL, NULL, "Cancel Join", M_ConfirmSpectate, 48}, // alone - {IT_STRING | IT_SUBMENU, NULL, "Switch Team...", &MISC_ChangeTeamDef, 48}, - {IT_STRING | IT_SUBMENU, NULL, "Enter/Spectate...", &MISC_ChangeSpectateDef,48}, - {IT_CALL | IT_STRING, NULL, "Player Setup...", M_SetupMultiPlayer, 56}, // alone - {IT_CALL | IT_STRING, NULL, "Options", M_Options, 64}, + {IT_STRING | IT_CALL, NULL, "Spectate", {.routine = M_ConfirmSpectate}, 48}, // alone + {IT_STRING | IT_CALL, NULL, "Enter Game", {.routine = M_ConfirmEnterGame}, 48}, // alone + {IT_STRING | IT_CALL, NULL, "Cancel Join", {.routine = M_ConfirmSpectate}, 48}, // alone + {IT_STRING | IT_SUBMENU, NULL, "Switch Team...", {.submenu = &MISC_ChangeTeamDef}, 48}, + {IT_STRING | IT_SUBMENU, NULL, "Enter/Spectate...", {.submenu = &MISC_ChangeSpectateDef}, 48}, + {IT_CALL | IT_STRING, NULL, "Player Setup...", {.routine = M_SetupMultiPlayer}, 56}, // alone + {IT_CALL | IT_STRING, NULL, "Options", {.routine = M_Options}, 64}, - {IT_CALL | IT_STRING, NULL, "Return to Title", M_EndGame, 80}, - {IT_CALL | IT_STRING, NULL, "Quit Game", M_QuitSRB2, 88}, + {IT_CALL | IT_STRING, NULL, "Return to Title", {.routine = M_EndGame}, 80}, + {IT_CALL | IT_STRING, NULL, "Quit Game", {.routine = M_QuitSRB2}, 88}, }; typedef enum @@ -678,16 +678,16 @@ typedef enum static menuitem_t SPauseMenu[] = { // Pandora's Box will be shifted up if both options are available - {IT_CALL | IT_STRING, NULL, "Pandora's Box...", M_PandorasBox, 16}, - {IT_CALL | IT_STRING, NULL, "Medal Hints...", M_EmblemHints, 24}, + {IT_CALL | IT_STRING, NULL, "Pandora's Box...", {.routine = M_PandorasBox}, 16}, + {IT_CALL | IT_STRING, NULL, "Medal Hints...", {.routine = M_EmblemHints}, 24}, //{IT_CALL | IT_STRING, NULL, "Level Select...", M_LoadGameLevelSelect, 32}, - {IT_CALL | IT_STRING, NULL, "Continue", M_SelectableClearMenus,48}, - {IT_CALL | IT_STRING, NULL, "Retry", M_Retry, 56}, - {IT_CALL | IT_STRING, NULL, "Options", M_Options, 64}, + {IT_CALL | IT_STRING, NULL, "Continue", {.routine = M_SelectableClearMenus},48}, + {IT_CALL | IT_STRING, NULL, "Retry", {.routine = M_Retry}, 56}, + {IT_CALL | IT_STRING, NULL, "Options", {.routine = M_Options}, 64}, - {IT_CALL | IT_STRING, NULL, "Return to Title", M_EndGame, 80}, - {IT_CALL | IT_STRING, NULL, "Quit Game", M_QuitSRB2, 88}, + {IT_CALL | IT_STRING, NULL, "Return to Title", {.routine = M_EndGame}, 80}, + {IT_CALL | IT_STRING, NULL, "Quit Game", {.routine = M_QuitSRB2}, 88}, }; typedef enum @@ -706,7 +706,7 @@ typedef enum #ifdef HAVE_DISCORDRPC static menuitem_t MISC_DiscordRequestsMenu[] = { - {IT_KEYHANDLER|IT_NOTHING, NULL, "", M_HandleDiscordRequests, 0}, + {IT_KEYHANDLER|IT_NOTHING, NULL, "", {.routine = M_HandleDiscordRequests}, 0}, }; #endif @@ -716,47 +716,47 @@ static menuitem_t MISC_DiscordRequestsMenu[] = // Prefix: MISC_ static menuitem_t MISC_ScrambleTeamMenu[] = { - {IT_STRING|IT_CVAR, NULL, "Scramble Method", &cv_dummyscramble, 30}, - {IT_WHITESTRING|IT_CALL, NULL, "Confirm", M_ConfirmTeamScramble, 90}, + {IT_STRING|IT_CVAR, NULL, "Scramble Method", {.cvar = &cv_dummyscramble}, 30}, + {IT_WHITESTRING|IT_CALL, NULL, "Confirm", {.routine = M_ConfirmTeamScramble}, 90}, }; static menuitem_t MISC_ChangeTeamMenu[] = { - {IT_STRING|IT_CVAR, NULL, "Player", &cv_dummymenuplayer, 30}, - {IT_STRING|IT_CVAR, NULL, "Team", &cv_dummyteam, 40}, - {IT_WHITESTRING|IT_CALL, NULL, "Confirm", M_ConfirmTeamChange, 90}, + {IT_STRING|IT_CVAR, NULL, "Player", {.cvar = &cv_dummymenuplayer}, 30}, + {IT_STRING|IT_CVAR, NULL, "Team", {.cvar = &cv_dummyteam}, 40}, + {IT_WHITESTRING|IT_CALL, NULL, "Confirm", {.routine = M_ConfirmTeamChange}, 90}, }; static menuitem_t MISC_ChangeSpectateMenu[] = { - {IT_STRING|IT_CVAR, NULL, "Player", &cv_dummymenuplayer, 30}, - {IT_STRING|IT_CVAR, NULL, "Status", &cv_dummyspectate, 40}, - {IT_WHITESTRING|IT_CALL, NULL, "Confirm", M_ConfirmSpectateChange, 90}, + {IT_STRING|IT_CVAR, NULL, "Player", {.cvar = &cv_dummymenuplayer}, 30}, + {IT_STRING|IT_CVAR, NULL, "Status", {.cvar = &cv_dummyspectate}, 40}, + {IT_WHITESTRING|IT_CALL, NULL, "Confirm", {.routine = M_ConfirmSpectateChange}, 90}, }; static menuitem_t MISC_ChangeLevelMenu[] = { - {IT_STRING|IT_CVAR, NULL, "Game Type", &cv_newgametype, 68}, - {IT_STRING|IT_CVAR, NULL, "Level", &cv_nextmap, 78}, - {IT_WHITESTRING|IT_CALL, NULL, "Change Level", M_ChangeLevel, 130}, + {IT_STRING|IT_CVAR, NULL, "Game Type", {.cvar = &cv_newgametype}, 68}, + {IT_STRING|IT_CVAR, NULL, "Level", {.cvar = &cv_nextmap}, 78}, + {IT_WHITESTRING|IT_CALL, NULL, "Change Level", {.routine = M_ChangeLevel}, 130}, }; static menuitem_t MISC_HelpMenu[] = { - {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL00", M_HandleImageDef, 0}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL01", M_HandleImageDef, 1}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL02", M_HandleImageDef, 1}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL03", M_HandleImageDef, 1}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL04", M_HandleImageDef, 1}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL05", M_HandleImageDef, 1}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL06", M_HandleImageDef, 1}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL07", M_HandleImageDef, 1}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL08", M_HandleImageDef, 1}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL09", M_HandleImageDef, 1}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL10", M_HandleImageDef, 1}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL11", M_HandleImageDef, 1}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL12", M_HandleImageDef, 1}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL99", M_HandleImageDef, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL00", {.routine = M_HandleImageDef}, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL01", {.routine = M_HandleImageDef}, 1}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL02", {.routine = M_HandleImageDef}, 1}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL03", {.routine = M_HandleImageDef}, 1}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL04", {.routine = M_HandleImageDef}, 1}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL05", {.routine = M_HandleImageDef}, 1}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL06", {.routine = M_HandleImageDef}, 1}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL07", {.routine = M_HandleImageDef}, 1}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL08", {.routine = M_HandleImageDef}, 1}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL09", {.routine = M_HandleImageDef}, 1}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL10", {.routine = M_HandleImageDef}, 1}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL11", {.routine = M_HandleImageDef}, 1}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL12", {.routine = M_HandleImageDef}, 1}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "MANUAL99", {.routine = M_HandleImageDef}, 0}, }; // -------------------------------- @@ -767,57 +767,57 @@ static menuitem_t MISC_HelpMenu[] = // Pause Menu Pandora's Box Options static menuitem_t SR_PandorasBox[] = { - {IT_STRING | IT_CVAR, NULL, "Rings", &cv_dummyrings, 20}, - {IT_STRING | IT_CVAR, NULL, "Lives", &cv_dummylives, 30}, + {IT_STRING | IT_CVAR, NULL, "Rings", {.cvar = &cv_dummyrings}, 20}, + {IT_STRING | IT_CVAR, NULL, "Lives", {.cvar = &cv_dummylives}, 30}, - {IT_STRING | IT_CVAR, NULL, "Gravity", &cv_gravity, 60}, + {IT_STRING | IT_CVAR, NULL, "Gravity", {.cvar = &cv_gravity}, 60}, - {IT_STRING | IT_CALL, NULL, "Get All Emeralds", M_GetAllEmeralds, 90}, - {IT_STRING | IT_CALL, NULL, "Destroy All Robots", M_DestroyRobots, 100}, + {IT_STRING | IT_CALL, NULL, "Get All Emeralds", {.routine = M_GetAllEmeralds}, 90}, + {IT_STRING | IT_CALL, NULL, "Destroy All Robots", {.routine = M_DestroyRobots}, 100}, - {IT_STRING | IT_CALL, NULL, "Ultimate Cheat", M_UltimateCheat, 130}, + {IT_STRING | IT_CALL, NULL, "Ultimate Cheat", {.routine = M_UltimateCheat}, 130}, }; // Sky Room Custom Unlocks static menuitem_t SR_MainMenu[] = { #ifndef TESTERS - {IT_STRING|IT_SUBMENU, NULL, "Unlockables", &SR_UnlockChecklistDef, 100}, + {IT_STRING|IT_SUBMENU, NULL, "Unlockables", {.submenu = &SR_UnlockChecklistDef}, 100}, #endif - {IT_CALL|IT_STRING|IT_CALL_NOTMODIFIED, NULL, "Statistics", M_Statistics, 108}, - {IT_CALL|IT_STRING, NULL, "Replay Hut", M_ReplayHut, 116}, - {IT_DISABLED, NULL, "", NULL, 0}, // Custom1 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom2 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom3 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom4 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom5 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom6 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom7 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom8 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom9 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom10 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom11 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom12 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom13 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom14 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom15 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom16 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom17 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom18 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom19 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom20 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom21 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom22 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom23 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom24 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom25 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom26 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom27 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom28 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom29 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom30 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom31 - {IT_DISABLED, NULL, "", NULL, 0}, // Custom32 + {IT_CALL|IT_STRING|IT_CALL_NOTMODIFIED, NULL, "Statistics", {.routine = M_Statistics}, 108}, + {IT_CALL|IT_STRING, NULL, "Replay Hut", {.routine = M_ReplayHut}, 116}, + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom1 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom2 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom3 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom4 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom5 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom6 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom7 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom8 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom9 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom10 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom11 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom12 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom13 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom14 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom15 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom16 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom17 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom18 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom19 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom20 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom21 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom22 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom23 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom24 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom25 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom26 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom27 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom28 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom29 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom30 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom31 + {IT_DISABLED, NULL, "", {NULL}, 0}, // Custom32 }; @@ -829,13 +829,13 @@ static menuitem_t SR_MainMenu[] = static menuitem_t SR_UnlockChecklistMenu[] = { - {IT_SUBMENU | IT_STRING, NULL, "NEXT", &MainDef, 192}, + {IT_SUBMENU | IT_STRING, NULL, "NEXT", {.submenu = &MainDef}, 192}, }; static menuitem_t SR_EmblemHintMenu[] = { - {IT_STRING|IT_CVAR, NULL, "Medal Radar", &cv_itemfinder, 10}, - {IT_WHITESTRING|IT_SUBMENU, NULL, "Back", &SPauseDef, 20} + {IT_STRING|IT_CVAR, NULL, "Medal Radar", {.cvar = &cv_itemfinder}, 10}, + {IT_WHITESTRING|IT_SUBMENU, NULL, "Back", {.submenu = &SPauseDef}, 20} }; // -------------------------------- @@ -846,9 +846,9 @@ static menuitem_t SR_EmblemHintMenu[] = // Single Player Main static menuitem_t SP_MainMenu[] = { - {IT_STRING|IT_CALL, NULL, "Grand Prix", M_GrandPrixTemp, 92}, - {IT_SECRET, NULL, "Time Attack", M_TimeAttack, 100}, - {IT_SECRET, NULL, "Break the Capsules", M_BreakTheCapsules, 108}, + {IT_STRING|IT_CALL, NULL, "Grand Prix", {.routine = M_GrandPrixTemp}, 92}, + {IT_SECRET, NULL, "Time Attack", {.routine = M_TimeAttack}, 100}, + {IT_SECRET, NULL, "Break the Capsules", {.routine = M_BreakTheCapsules}, 108}, }; enum @@ -861,28 +861,28 @@ enum // Single Player Load Game static menuitem_t SP_GrandPrixPlaceholderMenu[] = { - {IT_STRING|IT_CVAR, NULL, "Character", &cv_chooseskin, 10}, - {IT_STRING|IT_CVAR, NULL, "Color", &cv_playercolor[0], 20}, + {IT_STRING|IT_CVAR, NULL, "Character", {.cvar = &cv_chooseskin}, 10}, + {IT_STRING|IT_CVAR, NULL, "Color", {.cvar = &cv_playercolor[0]}, 20}, - {IT_STRING|IT_CVAR, NULL, "Difficulty", &cv_dummygpdifficulty, 40}, - {IT_STRING|IT_CVAR, NULL, "Encore Mode", &cv_dummygpencore, 50}, + {IT_STRING|IT_CVAR, NULL, "Difficulty", {.cvar = &cv_dummygpdifficulty}, 40}, + {IT_STRING|IT_CVAR, NULL, "Encore Mode", {.cvar = &cv_dummygpencore}, 50}, - {IT_STRING|IT_CVAR, NULL, "Cup", &cv_dummygpcup, 70}, - {IT_STRING|IT_CALL, NULL, "Start", M_StartGrandPrix, 80}, + {IT_STRING|IT_CVAR, NULL, "Cup", {.cvar = &cv_dummygpcup}, 70}, + {IT_STRING|IT_CALL, NULL, "Start", {.routine = M_StartGrandPrix}, 80}, }; // Single Player Time Attack static menuitem_t SP_TimeAttackMenu[] = { - {IT_STRING|IT_CVAR|IT_CV_STRING, NULL, "Name", &cv_playername[0], 0}, - {IT_STRING|IT_CVAR, NULL, "Character", &cv_chooseskin, 13}, - {IT_STRING|IT_CVAR, NULL, "Color", &cv_playercolor[0], 26}, - {IT_STRING|IT_CVAR, NULL, "Level", &cv_nextmap, 78}, + {IT_STRING|IT_CVAR|IT_CV_STRING, NULL, "Name", {.cvar = &cv_playername[0]}, 0}, + {IT_STRING|IT_CVAR, NULL, "Character", {.cvar = &cv_chooseskin}, 13}, + {IT_STRING|IT_CVAR, NULL, "Color", {.cvar = &cv_playercolor[0]}, 26}, + {IT_STRING|IT_CVAR, NULL, "Level", {.cvar = &cv_nextmap}, 78}, - {IT_DISABLED, NULL, "Guest...", &SP_GuestReplayDef, 98}, - {IT_DISABLED, NULL, "Replay...", &SP_ReplayDef, 108}, - {IT_WHITESTRING|IT_SUBMENU, NULL, "Ghosts...", &SP_GhostDef, 118}, - {IT_WHITESTRING|IT_CALL|IT_CALL_NOTMODIFIED, NULL, "Start", M_ChooseTimeAttack, 130}, + {IT_DISABLED, NULL, "Guest...", {.submenu = &SP_GuestReplayDef}, 98}, + {IT_DISABLED, NULL, "Replay...", {.submenu = &SP_ReplayDef}, 108}, + {IT_WHITESTRING|IT_SUBMENU, NULL, "Ghosts...", {.submenu = &SP_GhostDef}, 118}, + {IT_WHITESTRING|IT_CALL|IT_CALL_NOTMODIFIED, NULL, "Start", {.routine = M_ChooseTimeAttack}, 130}, }; enum @@ -900,14 +900,14 @@ enum static menuitem_t SP_ReplayMenu[] = { - {IT_WHITESTRING|IT_CALL, NULL, "Replay Best Time", M_ReplayTimeAttack, 90}, - {IT_WHITESTRING|IT_CALL, NULL, "Replay Best Lap", M_ReplayTimeAttack, 98}, + {IT_WHITESTRING|IT_CALL, NULL, "Replay Best Time", {.routine = M_ReplayTimeAttack}, 90}, + {IT_WHITESTRING|IT_CALL, NULL, "Replay Best Lap", {.routine = M_ReplayTimeAttack}, 98}, - {IT_WHITESTRING|IT_CALL, NULL, "Replay Last", M_ReplayTimeAttack, 106}, - {IT_WHITESTRING|IT_CALL, NULL, "Replay Guest", M_ReplayTimeAttack, 114}, - {IT_WHITESTRING|IT_KEYHANDLER, NULL, "Replay Staff",M_HandleStaffReplay,122}, + {IT_WHITESTRING|IT_CALL, NULL, "Replay Last", {.routine = M_ReplayTimeAttack}, 106}, + {IT_WHITESTRING|IT_CALL, NULL, "Replay Guest", {.routine = M_ReplayTimeAttack}, 114}, + {IT_WHITESTRING|IT_KEYHANDLER, NULL, "Replay Staff",{.routine = M_HandleStaffReplay},122}, - {IT_WHITESTRING|IT_SUBMENU, NULL, "Back", &SP_TimeAttackDef, 130} + {IT_WHITESTRING|IT_SUBMENU, NULL, "Back", {.submenu = &SP_TimeAttackDef}, 130} }; /*static menuitem_t SP_NightsReplayMenu[] = @@ -924,13 +924,13 @@ static menuitem_t SP_ReplayMenu[] = static menuitem_t SP_GuestReplayMenu[] = { - {IT_WHITESTRING|IT_CALL, NULL, "Save Best Time as Guest", M_SetGuestReplay, 94}, - {IT_WHITESTRING|IT_CALL, NULL, "Save Best Lap as Guest", M_SetGuestReplay,102}, - {IT_WHITESTRING|IT_CALL, NULL, "Save Last as Guest", M_SetGuestReplay,110}, + {IT_WHITESTRING|IT_CALL, NULL, "Save Best Time as Guest", {.routine = M_SetGuestReplay}, 94}, + {IT_WHITESTRING|IT_CALL, NULL, "Save Best Lap as Guest", {.routine = M_SetGuestReplay},102}, + {IT_WHITESTRING|IT_CALL, NULL, "Save Last as Guest", {.routine = M_SetGuestReplay},110}, - {IT_WHITESTRING|IT_CALL, NULL, "Delete Guest Replay", M_SetGuestReplay,120}, + {IT_WHITESTRING|IT_CALL, NULL, "Delete Guest Replay", {.routine = M_SetGuestReplay},120}, - {IT_WHITESTRING|IT_SUBMENU, NULL, "Back", &SP_TimeAttackDef, 130} + {IT_WHITESTRING|IT_SUBMENU, NULL, "Back", {.submenu = &SP_TimeAttackDef}, 130} }; /*static menuitem_t SP_NightsGuestReplayMenu[] = @@ -946,13 +946,13 @@ static menuitem_t SP_GuestReplayMenu[] = static menuitem_t SP_GhostMenu[] = { - {IT_STRING|IT_CVAR, NULL, "Best Time", &cv_ghost_besttime, 88}, - {IT_STRING|IT_CVAR, NULL, "Best Lap", &cv_ghost_bestlap, 96}, - {IT_STRING|IT_CVAR, NULL, "Last", &cv_ghost_last, 104}, - {IT_DISABLED, NULL, "Guest", &cv_ghost_guest, 112}, - {IT_DISABLED, NULL, "Staff Attack",&cv_ghost_staff, 120}, + {IT_STRING|IT_CVAR, NULL, "Best Time", {.cvar = &cv_ghost_besttime}, 88}, + {IT_STRING|IT_CVAR, NULL, "Best Lap", {.cvar = &cv_ghost_bestlap}, 96}, + {IT_STRING|IT_CVAR, NULL, "Last", {.cvar = &cv_ghost_last}, 104}, + {IT_DISABLED, NULL, "Guest", {.cvar = &cv_ghost_guest}, 112}, + {IT_DISABLED, NULL, "Staff Attack", {.cvar = &cv_ghost_staff}, 120}, - {IT_WHITESTRING|IT_SUBMENU, NULL, "Back", &SP_TimeAttackDef, 130} + {IT_WHITESTRING|IT_SUBMENU, NULL, "Back", {.submenu = &SP_TimeAttackDef}, 130} }; /*static menuitem_t SP_NightsGhostMenu[] = @@ -993,7 +993,7 @@ enum // Statistics static menuitem_t SP_LevelStatsMenu[] = { - {IT_KEYHANDLER | IT_NOTHING, NULL, "", M_HandleLevelStats, '\0'}, // dummy menuitem for the control func + {IT_KEYHANDLER | IT_NOTHING, NULL, "", {.routine = M_HandleLevelStats}, '\0'}, // dummy menuitem for the control func }; // A rare case. @@ -1009,30 +1009,30 @@ menuitem_t PlayerMenu[MAXSKINS]; static menuitem_t MP_MainMenu[] = { - {IT_HEADER, NULL, "Players", NULL, 0}, - {IT_STRING|IT_CVAR, NULL, "Number of local players", &cv_splitplayers, 10}, + {IT_HEADER, NULL, "Players", {NULL}, 0}, + {IT_STRING|IT_CVAR, NULL, "Number of local players", {.cvar = &cv_splitplayers}, 10}, - {IT_STRING|IT_KEYHANDLER,NULL, "Player setup...", M_SetupMultiHandler,18}, + {IT_STRING|IT_KEYHANDLER,NULL, "Player setup...", {.routine = M_SetupMultiHandler}, 18}, - {IT_HEADER, NULL, "Host a game", NULL, 100-24}, + {IT_HEADER, NULL, "Host a game", {NULL}, 100-24}, #ifndef NOMENUHOST - {IT_STRING|IT_CALL, NULL, "Internet/LAN...", M_StartServerMenu, 110-24}, + {IT_STRING|IT_CALL, NULL, "Internet/LAN...", {.routine = M_StartServerMenu}, 110-24}, #else - {IT_GRAYEDOUT, NULL, "Internet/LAN...", NULL, 110-24}, + {IT_GRAYEDOUT, NULL, "Internet/LAN...", {NULL}, 110-24}, #endif #ifdef TESTERS - {IT_GRAYEDOUT, NULL, "Offline...", NULL, 118-24}, + {IT_GRAYEDOUT, NULL, "Offline...", {NULL}, 118-24}, #else - {IT_STRING|IT_CALL, NULL, "Offline...", M_StartOfflineServerMenu, 118-24}, + {IT_STRING|IT_CALL, NULL, "Offline...", {.routine = M_StartOfflineServerMenu}, 118-24}, #endif - {IT_HEADER, NULL, "Join a game", NULL, 132-24}, + {IT_HEADER, NULL, "Join a game", {NULL}, 132-24}, #ifndef NONET - {IT_STRING|IT_CALL, NULL, "Internet server browser...",M_ConnectMenuModChecks, 142-24}, - {IT_STRING|IT_KEYHANDLER, NULL, "Specify IPv4 address:", M_HandleConnectIP, 150-24}, + {IT_STRING|IT_CALL, NULL, "Internet server browser...",{.routine = M_ConnectMenuModChecks}, 142-24}, + {IT_STRING|IT_KEYHANDLER, NULL, "Specify IPv4 address:", {.routine = M_HandleConnectIP}, 150-24}, #else - {IT_GRAYEDOUT, NULL, "Internet server browser...",NULL, 142-24}, - {IT_GRAYEDOUT, NULL, "Specify IPv4 address:", NULL, 150-24}, + {IT_GRAYEDOUT, NULL, "Internet server browser...", {NULL}, 142-24}, + {IT_GRAYEDOUT, NULL, "Specify IPv4 address:", {NULL}, 150-24}, #endif //{IT_HEADER, NULL, "Player setup", NULL, 80}, //{IT_STRING|IT_CALL, NULL, "Name, character, color...", M_SetupMultiPlayer, 90}, @@ -1042,14 +1042,14 @@ static menuitem_t MP_MainMenu[] = static menuitem_t MP_ServerMenu[] = { - {IT_STRING|IT_CVAR, NULL, "Max. Player Count", &cv_maxplayers, 10}, - {IT_STRING|IT_CVAR, NULL, "Advertise", &cv_advertise, 20}, - {IT_STRING|IT_CVAR|IT_CV_STRING, NULL, "Server Name", &cv_servername, 30}, + {IT_STRING|IT_CVAR, NULL, "Max. Player Count", {.cvar = &cv_maxplayers}, 10}, + {IT_STRING|IT_CVAR, NULL, "Advertise", {.cvar = &cv_advertise}, 20}, + {IT_STRING|IT_CVAR|IT_CV_STRING, NULL, "Server Name", {.cvar = &cv_servername}, 30}, - {IT_STRING|IT_CVAR, NULL, "Game Type", &cv_newgametype, 68}, - {IT_STRING|IT_CVAR, NULL, "Level", &cv_nextmap, 78}, + {IT_STRING|IT_CVAR, NULL, "Game Type", {.cvar = &cv_newgametype}, 68}, + {IT_STRING|IT_CVAR, NULL, "Level", {.cvar = &cv_nextmap}, 78}, - {IT_WHITESTRING|IT_CALL, NULL, "Start", M_StartServer, 130}, + {IT_WHITESTRING|IT_CALL, NULL, "Start", {.routine = M_StartServer}, 130}, }; #endif @@ -1057,38 +1057,38 @@ static menuitem_t MP_ServerMenu[] = // Separated offline and normal servers. static menuitem_t MP_OfflineServerMenu[] = { - {IT_STRING|IT_CVAR, NULL, "Game Type", &cv_newgametype, 68}, - {IT_STRING|IT_CVAR, NULL, "Level", &cv_nextmap, 78}, + {IT_STRING|IT_CVAR, NULL, "Game Type", {.cvar = &cv_newgametype}, 68}, + {IT_STRING|IT_CVAR, NULL, "Level", {.cvar = &cv_nextmap}, 78}, - {IT_WHITESTRING|IT_CALL, NULL, "Start", M_StartServer, 130}, + {IT_WHITESTRING|IT_CALL, NULL, "Start", {.routine = M_StartServer}, 130}, }; static menuitem_t MP_PlayerSetupMenu[] = { - {IT_KEYHANDLER | IT_STRING, NULL, "Name", M_HandleSetupMultiPlayer, 0}, - {IT_KEYHANDLER | IT_STRING, NULL, "Character", M_HandleSetupMultiPlayer, 16}, // Tails 01-18-2001 - {IT_KEYHANDLER | IT_STRING, NULL, "Follower", M_HandleSetupMultiPlayer, 26}, - {IT_KEYHANDLER | IT_STRING, NULL, "Color", M_HandleSetupMultiPlayer, 152}, + {IT_KEYHANDLER | IT_STRING, NULL, "Name", {.routine = M_HandleSetupMultiPlayer}, 0}, + {IT_KEYHANDLER | IT_STRING, NULL, "Character", {.routine = M_HandleSetupMultiPlayer}, 16}, // Tails 01-18-2001 + {IT_KEYHANDLER | IT_STRING, NULL, "Follower", {.routine = M_HandleSetupMultiPlayer}, 26}, + {IT_KEYHANDLER | IT_STRING, NULL, "Color", {.routine = M_HandleSetupMultiPlayer}, 152}, }; #ifndef NONET static menuitem_t MP_ConnectMenu[] = { - {IT_STRING | IT_CVAR, NULL, "Sort By", &cv_serversort, 4}, - {IT_STRING | IT_KEYHANDLER, NULL, "Page", M_HandleServerPage, 12}, - {IT_STRING | IT_CALL, NULL, "Refresh", M_Refresh, 20}, + {IT_STRING | IT_CVAR, NULL, "Sort By", {.cvar = &cv_serversort}, 4}, + {IT_STRING | IT_KEYHANDLER, NULL, "Page", {.routine = M_HandleServerPage}, 12}, + {IT_STRING | IT_CALL, NULL, "Refresh", {.routine = M_Refresh}, 20}, - {IT_STRING | IT_SPACE, NULL, "", M_Connect, 36}, - {IT_STRING | IT_SPACE, NULL, "", M_Connect, 48}, - {IT_STRING | IT_SPACE, NULL, "", M_Connect, 60}, - {IT_STRING | IT_SPACE, NULL, "", M_Connect, 72}, - {IT_STRING | IT_SPACE, NULL, "", M_Connect, 84}, - {IT_STRING | IT_SPACE, NULL, "", M_Connect, 96}, - {IT_STRING | IT_SPACE, NULL, "", M_Connect, 108}, - {IT_STRING | IT_SPACE, NULL, "", M_Connect, 120}, - {IT_STRING | IT_SPACE, NULL, "", M_Connect, 132}, - {IT_STRING | IT_SPACE, NULL, "", M_Connect, 144}, - {IT_STRING | IT_SPACE, NULL, "", M_Connect, 156}, + {IT_STRING | IT_SPACE, NULL, "", {.routine = M_Connect}, 36}, + {IT_STRING | IT_SPACE, NULL, "", {.routine = M_Connect}, 48}, + {IT_STRING | IT_SPACE, NULL, "", {.routine = M_Connect}, 60}, + {IT_STRING | IT_SPACE, NULL, "", {.routine = M_Connect}, 72}, + {IT_STRING | IT_SPACE, NULL, "", {.routine = M_Connect}, 84}, + {IT_STRING | IT_SPACE, NULL, "", {.routine = M_Connect}, 96}, + {IT_STRING | IT_SPACE, NULL, "", {.routine = M_Connect}, 108}, + {IT_STRING | IT_SPACE, NULL, "", {.routine = M_Connect}, 120}, + {IT_STRING | IT_SPACE, NULL, "", {.routine = M_Connect}, 132}, + {IT_STRING | IT_SPACE, NULL, "", {.routine = M_Connect}, 144}, + {IT_STRING | IT_SPACE, NULL, "", {.routine = M_Connect}, 156}, }; enum @@ -1106,133 +1106,133 @@ enum // Prefix: OP_ static menuitem_t OP_MainMenu[] = { - {IT_SUBMENU|IT_STRING, NULL, "Control Setup...", &OP_ControlsDef, 10}, + {IT_SUBMENU|IT_STRING, NULL, "Control Setup...", {.submenu = &OP_ControlsDef}, 10}, - {IT_SUBMENU|IT_STRING, NULL, "Video Options...", &OP_VideoOptionsDef, 30}, - {IT_SUBMENU|IT_STRING, NULL, "Sound Options...", &OP_SoundOptionsDef, 40}, + {IT_SUBMENU|IT_STRING, NULL, "Video Options...", {.submenu = &OP_VideoOptionsDef}, 30}, + {IT_SUBMENU|IT_STRING, NULL, "Sound Options...", {.submenu = &OP_SoundOptionsDef}, 40}, - {IT_SUBMENU|IT_STRING, NULL, "HUD Options...", &OP_HUDOptionsDef, 60}, - {IT_SUBMENU|IT_STRING, NULL, "Gameplay Options...", &OP_GameOptionsDef, 70}, - {IT_SUBMENU|IT_STRING, NULL, "Server Options...", &OP_ServerOptionsDef, 80}, + {IT_SUBMENU|IT_STRING, NULL, "HUD Options...", {.submenu = &OP_HUDOptionsDef}, 60}, + {IT_SUBMENU|IT_STRING, NULL, "Gameplay Options...", {.submenu = &OP_GameOptionsDef}, 70}, + {IT_SUBMENU|IT_STRING, NULL, "Server Options...", {.submenu = &OP_ServerOptionsDef}, 80}, - {IT_SUBMENU|IT_STRING, NULL, "Data Options...", &OP_DataOptionsDef, 100}, + {IT_SUBMENU|IT_STRING, NULL, "Data Options...", {.submenu = &OP_DataOptionsDef}, 100}, - {IT_CALL|IT_STRING, NULL, "Tricks & Secrets (F1)", M_Manual, 120}, - {IT_CALL|IT_STRING, NULL, "Play Credits", M_Credits, 130}, + {IT_CALL|IT_STRING, NULL, "Tricks & Secrets (F1)", {.routine = M_Manual}, 120}, + {IT_CALL|IT_STRING, NULL, "Play Credits", {.routine = M_Credits}, 130}, }; static menuitem_t OP_ControlsMenu[] = { - {IT_CALL | IT_STRING, NULL, "Player 1 Controls...", M_Setup1PControlsMenu, 10}, - {IT_CALL | IT_STRING, NULL, "Player 2 Controls...", M_Setup2PControlsMenu, 20}, + {IT_CALL | IT_STRING, NULL, "Player 1 Controls...", {.routine = M_Setup1PControlsMenu}, 10}, + {IT_CALL | IT_STRING, NULL, "Player 2 Controls...", {.routine = M_Setup2PControlsMenu}, 20}, - {IT_CALL | IT_STRING, NULL, "Player 3 Controls...", &M_Setup3PControlsMenu, 30}, - {IT_CALL | IT_STRING, NULL, "Player 4 Controls...", &M_Setup4PControlsMenu, 40}, + {IT_CALL | IT_STRING, NULL, "Player 3 Controls...", {.routine = M_Setup3PControlsMenu}, 30}, + {IT_CALL | IT_STRING, NULL, "Player 4 Controls...", {.routine = M_Setup4PControlsMenu}, 40}, - {IT_STRING | IT_CVAR, NULL, "Controls per key", &cv_controlperkey, 60}, + {IT_STRING | IT_CVAR, NULL, "Controls per key", {.cvar = &cv_controlperkey}, 60}, }; static menuitem_t OP_AllControlsMenu[] = { - {IT_SUBMENU|IT_STRING, NULL, "Gamepad Options...", &OP_Joystick1Def, 0}, - {IT_CALL|IT_STRING, NULL, "Reset to defaults", M_ResetControls, 8}, + {IT_SUBMENU|IT_STRING, NULL, "Gamepad Options...", {.submenu = &OP_Joystick1Def}, 0}, + {IT_CALL|IT_STRING, NULL, "Reset to defaults", {.routine = M_ResetControls}, 8}, //{IT_SPACE, NULL, NULL, NULL, 0}, - {IT_HEADER, NULL, "Gameplay Controls", NULL, 0}, - {IT_SPACE, NULL, NULL, NULL, 0}, - {IT_CONTROL, NULL, "Accelerate", M_ChangeControl, gc_accelerate }, - {IT_CONTROL, NULL, "Turn Left", M_ChangeControl, gc_turnleft }, - {IT_CONTROL, NULL, "Turn Right", M_ChangeControl, gc_turnright }, - {IT_CONTROL, NULL, "Drift", M_ChangeControl, gc_drift }, - {IT_CONTROL, NULL, "Brake", M_ChangeControl, gc_brake }, - {IT_CONTROL, NULL, "Spindash", M_ChangeControl, gc_spindash }, - {IT_CONTROL, NULL, "Use/Throw Item", M_ChangeControl, gc_fire }, - {IT_CONTROL, NULL, "Aim Forward", M_ChangeControl, gc_aimforward }, - {IT_CONTROL, NULL, "Aim Backward", M_ChangeControl, gc_aimbackward}, - {IT_CONTROL, NULL, "Look Backward", M_ChangeControl, gc_lookback }, - {IT_HEADER, NULL, "Miscelleanous Controls", NULL, 0}, - {IT_SPACE, NULL, NULL, NULL, 0}, - {IT_CONTROL, NULL, "Chat", M_ChangeControl, gc_talkkey }, + {IT_HEADER, NULL, "Gameplay Controls", {NULL}, 0}, + {IT_SPACE, NULL, NULL, {NULL}, 0}, + {IT_CONTROL, NULL, "Accelerate", {.routine = M_ChangeControl}, gc_accelerate }, + {IT_CONTROL, NULL, "Turn Left", {.routine = M_ChangeControl}, gc_turnleft }, + {IT_CONTROL, NULL, "Turn Right", {.routine = M_ChangeControl}, gc_turnright }, + {IT_CONTROL, NULL, "Drift", {.routine = M_ChangeControl}, gc_drift }, + {IT_CONTROL, NULL, "Brake", {.routine = M_ChangeControl}, gc_brake }, + {IT_CONTROL, NULL, "Spindash", {.routine = M_ChangeControl}, gc_spindash }, + {IT_CONTROL, NULL, "Use/Throw Item", {.routine = M_ChangeControl}, gc_fire }, + {IT_CONTROL, NULL, "Aim Forward", {.routine = M_ChangeControl}, gc_aimforward }, + {IT_CONTROL, NULL, "Aim Backward", {.routine = M_ChangeControl}, gc_aimbackward}, + {IT_CONTROL, NULL, "Look Backward", {.routine = M_ChangeControl}, gc_lookback }, + {IT_HEADER, NULL, "Miscelleanous Controls", {NULL}, 0}, + {IT_SPACE, NULL, NULL, {NULL}, 0}, + {IT_CONTROL, NULL, "Chat", {.routine = M_ChangeControl}, gc_talkkey }, //{IT_CONTROL, NULL, "Team Chat", M_ChangeControl, gc_teamkey }, - {IT_CONTROL, NULL, "Show Rankings", M_ChangeControl, gc_scores }, - {IT_CONTROL, NULL, "Change Viewpoint", M_ChangeControl, gc_viewpoint }, - {IT_CONTROL, NULL, "Reset Camera", M_ChangeControl, gc_camreset }, - {IT_CONTROL, NULL, "Toggle First-Person", M_ChangeControl, gc_camtoggle }, - {IT_CONTROL, NULL, "Pause", M_ChangeControl, gc_pause }, - {IT_CONTROL, NULL, "Screenshot", M_ChangeControl, gc_screenshot }, - {IT_CONTROL, NULL, "Toggle GIF Recording", M_ChangeControl, gc_recordgif }, - {IT_CONTROL, NULL, "Open/Close Menu (ESC)", M_ChangeControl, gc_systemmenu }, - {IT_CONTROL, NULL, "Developer Console", M_ChangeControl, gc_console }, - {IT_HEADER, NULL, "Spectator Controls", NULL, 0}, - {IT_SPACE, NULL, NULL, NULL, 0}, - {IT_CONTROL, NULL, "Become Spectator", M_ChangeControl, gc_spectate }, - {IT_CONTROL, NULL, "Look Up", M_ChangeControl, gc_lookup }, - {IT_CONTROL, NULL, "Look Down", M_ChangeControl, gc_lookdown }, - {IT_CONTROL, NULL, "Center View", M_ChangeControl, gc_centerview }, - {IT_HEADER, NULL, "Custom Lua Actions", NULL, 0}, - {IT_SPACE, NULL, NULL, NULL, 0}, - {IT_CONTROL, NULL, "Custom Action 1", M_ChangeControl, gc_custom1 }, - {IT_CONTROL, NULL, "Custom Action 2", M_ChangeControl, gc_custom2 }, - {IT_CONTROL, NULL, "Custom Action 3", M_ChangeControl, gc_custom3 }, + {IT_CONTROL, NULL, "Show Rankings", {.routine = M_ChangeControl}, gc_scores }, + {IT_CONTROL, NULL, "Change Viewpoint", {.routine = M_ChangeControl}, gc_viewpoint }, + {IT_CONTROL, NULL, "Reset Camera", {.routine = M_ChangeControl}, gc_camreset }, + {IT_CONTROL, NULL, "Toggle First-Person", {.routine = M_ChangeControl}, gc_camtoggle }, + {IT_CONTROL, NULL, "Pause", {.routine = M_ChangeControl}, gc_pause }, + {IT_CONTROL, NULL, "Screenshot", {.routine = M_ChangeControl}, gc_screenshot }, + {IT_CONTROL, NULL, "Toggle GIF Recording", {.routine = M_ChangeControl}, gc_recordgif }, + {IT_CONTROL, NULL, "Open/Close Menu (ESC)", {.routine = M_ChangeControl}, gc_systemmenu }, + {IT_CONTROL, NULL, "Developer Console", {.routine = M_ChangeControl}, gc_console }, + {IT_HEADER, NULL, "Spectator Controls", {NULL}, 0}, + {IT_SPACE, NULL, NULL, {NULL}, 0}, + {IT_CONTROL, NULL, "Become Spectator", {.routine = M_ChangeControl}, gc_spectate }, + {IT_CONTROL, NULL, "Look Up", {.routine = M_ChangeControl}, gc_lookup }, + {IT_CONTROL, NULL, "Look Down", {.routine = M_ChangeControl}, gc_lookdown }, + {IT_CONTROL, NULL, "Center View", {.routine = M_ChangeControl}, gc_centerview }, + {IT_HEADER, NULL, "Custom Lua Actions", {NULL}, 0}, + {IT_SPACE, NULL, NULL, {NULL}, 0}, + {IT_CONTROL, NULL, "Custom Action 1", {.routine = M_ChangeControl}, gc_custom1 }, + {IT_CONTROL, NULL, "Custom Action 2", {.routine = M_ChangeControl}, gc_custom2 }, + {IT_CONTROL, NULL, "Custom Action 3", {.routine = M_ChangeControl}, gc_custom3 }, }; static menuitem_t OP_Joystick1Menu[] = { - {IT_STRING | IT_CALL, NULL, "Select Gamepad..." , M_Setup1PJoystickMenu, 10}, - {IT_STRING | IT_CVAR, NULL, "Aim Forward/Back" , &cv_aimaxis[0] , 30}, - {IT_STRING | IT_CVAR, NULL, "Turn Left/Right" , &cv_turnaxis[0] , 40}, - {IT_STRING | IT_CVAR, NULL, "Accelerate" , &cv_moveaxis[0] , 50}, - {IT_STRING | IT_CVAR, NULL, "Brake" , &cv_brakeaxis[0] , 60}, - {IT_STRING | IT_CVAR, NULL, "Drift" , &cv_driftaxis[0] , 70}, - {IT_STRING | IT_CVAR, NULL, "Use Item" , &cv_fireaxis[0] , 80}, - {IT_STRING | IT_CVAR, NULL, "Look Up/Down" , &cv_lookaxis[0] , 90}, + {IT_STRING | IT_CALL, NULL, "Select Gamepad..." , {.routine = M_Setup1PJoystickMenu}, 10}, + {IT_STRING | IT_CVAR, NULL, "Aim Forward/Back" , {.cvar = &cv_aimaxis[0]} , 30}, + {IT_STRING | IT_CVAR, NULL, "Turn Left/Right" , {.cvar = &cv_turnaxis[0]} , 40}, + {IT_STRING | IT_CVAR, NULL, "Accelerate" , {.cvar = &cv_moveaxis[0]} , 50}, + {IT_STRING | IT_CVAR, NULL, "Brake" , {.cvar = &cv_brakeaxis[0]} , 60}, + {IT_STRING | IT_CVAR, NULL, "Drift" , {.cvar = &cv_driftaxis[0]} , 70}, + {IT_STRING | IT_CVAR, NULL, "Use Item" , {.cvar = &cv_fireaxis[0]} , 80}, + {IT_STRING | IT_CVAR, NULL, "Look Up/Down" , {.cvar = &cv_lookaxis[0]} , 90}, }; static menuitem_t OP_Joystick2Menu[] = { - {IT_STRING | IT_CALL, NULL, "Select Gamepad..." , M_Setup2PJoystickMenu, 10}, - {IT_STRING | IT_CVAR, NULL, "Aim Forward/Back" , &cv_aimaxis[1] , 30}, - {IT_STRING | IT_CVAR, NULL, "Turn Left/Right" , &cv_turnaxis[1] , 40}, - {IT_STRING | IT_CVAR, NULL, "Accelerate" , &cv_moveaxis[1] , 50}, - {IT_STRING | IT_CVAR, NULL, "Brake" , &cv_brakeaxis[1] , 60}, - {IT_STRING | IT_CVAR, NULL, "Drift" , &cv_driftaxis[1] , 70}, - {IT_STRING | IT_CVAR, NULL, "Use Item" , &cv_fireaxis[1] , 80}, - {IT_STRING | IT_CVAR, NULL, "Look Up/Down" , &cv_lookaxis[1] , 90}, + {IT_STRING | IT_CALL, NULL, "Select Gamepad..." , {.routine = M_Setup2PJoystickMenu}, 10}, + {IT_STRING | IT_CVAR, NULL, "Aim Forward/Back" , {.cvar = &cv_aimaxis[1]} , 30}, + {IT_STRING | IT_CVAR, NULL, "Turn Left/Right" , {.cvar = &cv_turnaxis[1]} , 40}, + {IT_STRING | IT_CVAR, NULL, "Accelerate" , {.cvar = &cv_moveaxis[1]} , 50}, + {IT_STRING | IT_CVAR, NULL, "Brake" , {.cvar = &cv_brakeaxis[1]} , 60}, + {IT_STRING | IT_CVAR, NULL, "Drift" , {.cvar = &cv_driftaxis[1]} , 70}, + {IT_STRING | IT_CVAR, NULL, "Use Item" , {.cvar = &cv_fireaxis[1]} , 80}, + {IT_STRING | IT_CVAR, NULL, "Look Up/Down" , {.cvar = &cv_lookaxis[1]} , 90}, }; static menuitem_t OP_Joystick3Menu[] = { - {IT_STRING | IT_CALL, NULL, "Select Gamepad..." , M_Setup3PJoystickMenu, 10}, - {IT_STRING | IT_CVAR, NULL, "Aim Forward/Back" , &cv_aimaxis[2] , 30}, - {IT_STRING | IT_CVAR, NULL, "Turn Left/Right" , &cv_turnaxis[2] , 40}, - {IT_STRING | IT_CVAR, NULL, "Accelerate" , &cv_moveaxis[2] , 50}, - {IT_STRING | IT_CVAR, NULL, "Brake" , &cv_brakeaxis[2] , 60}, - {IT_STRING | IT_CVAR, NULL, "Drift" , &cv_driftaxis[2] , 70}, - {IT_STRING | IT_CVAR, NULL, "Use Item" , &cv_fireaxis[2] , 80}, - {IT_STRING | IT_CVAR, NULL, "Look Up/Down" , &cv_lookaxis[2] , 90}, + {IT_STRING | IT_CALL, NULL, "Select Gamepad..." , {.routine = M_Setup3PJoystickMenu}, 10}, + {IT_STRING | IT_CVAR, NULL, "Aim Forward/Back" , {.cvar = &cv_aimaxis[2]} , 30}, + {IT_STRING | IT_CVAR, NULL, "Turn Left/Right" , {.cvar = &cv_turnaxis[2]} , 40}, + {IT_STRING | IT_CVAR, NULL, "Accelerate" , {.cvar = &cv_moveaxis[2]} , 50}, + {IT_STRING | IT_CVAR, NULL, "Brake" , {.cvar = &cv_brakeaxis[2]} , 60}, + {IT_STRING | IT_CVAR, NULL, "Drift" , {.cvar = &cv_driftaxis[2]} , 70}, + {IT_STRING | IT_CVAR, NULL, "Use Item" , {.cvar = &cv_fireaxis[2]} , 80}, + {IT_STRING | IT_CVAR, NULL, "Look Up/Down" , {.cvar = &cv_lookaxis[2]} , 90}, }; static menuitem_t OP_Joystick4Menu[] = { - {IT_STRING | IT_CALL, NULL, "Select Gamepad..." , M_Setup4PJoystickMenu, 10}, - {IT_STRING | IT_CVAR, NULL, "Aim Forward/Back" , &cv_aimaxis[3] , 30}, - {IT_STRING | IT_CVAR, NULL, "Turn Left/Right" , &cv_turnaxis[3] , 40}, - {IT_STRING | IT_CVAR, NULL, "Accelerate" , &cv_moveaxis[3] , 50}, - {IT_STRING | IT_CVAR, NULL, "Brake" , &cv_brakeaxis[3] , 60}, - {IT_STRING | IT_CVAR, NULL, "Drift" , &cv_driftaxis[3] , 70}, - {IT_STRING | IT_CVAR, NULL, "Use Item" , &cv_fireaxis[3] , 80}, - {IT_STRING | IT_CVAR, NULL, "Look Up/Down" , &cv_lookaxis[3] , 90}, + {IT_STRING | IT_CALL, NULL, "Select Gamepad..." , {.routine = M_Setup4PJoystickMenu}, 10}, + {IT_STRING | IT_CVAR, NULL, "Aim Forward/Back" , {.cvar = &cv_aimaxis[3]} , 30}, + {IT_STRING | IT_CVAR, NULL, "Turn Left/Right" , {.cvar = &cv_turnaxis[3]} , 40}, + {IT_STRING | IT_CVAR, NULL, "Accelerate" , {.cvar = &cv_moveaxis[3]} , 50}, + {IT_STRING | IT_CVAR, NULL, "Brake" , {.cvar = &cv_brakeaxis[3]} , 60}, + {IT_STRING | IT_CVAR, NULL, "Drift" , {.cvar = &cv_driftaxis[3]} , 70}, + {IT_STRING | IT_CVAR, NULL, "Use Item" , {.cvar = &cv_fireaxis[3]} , 80}, + {IT_STRING | IT_CVAR, NULL, "Look Up/Down" , {.cvar = &cv_lookaxis[3]} , 90}, }; static menuitem_t OP_JoystickSetMenu[] = { - {IT_CALL | IT_NOTHING, "None", NULL, M_AssignJoystick, LINEHEIGHT+5}, - {IT_CALL | IT_NOTHING, "", NULL, M_AssignJoystick, (LINEHEIGHT*2)+5}, - {IT_CALL | IT_NOTHING, "", NULL, M_AssignJoystick, (LINEHEIGHT*3)+5}, - {IT_CALL | IT_NOTHING, "", NULL, M_AssignJoystick, (LINEHEIGHT*4)+5}, - {IT_CALL | IT_NOTHING, "", NULL, M_AssignJoystick, (LINEHEIGHT*5)+5}, - {IT_CALL | IT_NOTHING, "", NULL, M_AssignJoystick, (LINEHEIGHT*6)+5}, - {IT_CALL | IT_NOTHING, "", NULL, M_AssignJoystick, (LINEHEIGHT*7)+5}, - {IT_CALL | IT_NOTHING, "", NULL, M_AssignJoystick, (LINEHEIGHT*8)+5}, + {IT_CALL | IT_NOTHING, "None", NULL, {.routine = M_AssignJoystick}, LINEHEIGHT+5}, + {IT_CALL | IT_NOTHING, "", NULL, {.routine = M_AssignJoystick}, (LINEHEIGHT*2)+5}, + {IT_CALL | IT_NOTHING, "", NULL, {.routine = M_AssignJoystick}, (LINEHEIGHT*3)+5}, + {IT_CALL | IT_NOTHING, "", NULL, {.routine = M_AssignJoystick}, (LINEHEIGHT*4)+5}, + {IT_CALL | IT_NOTHING, "", NULL, {.routine = M_AssignJoystick}, (LINEHEIGHT*5)+5}, + {IT_CALL | IT_NOTHING, "", NULL, {.routine = M_AssignJoystick}, (LINEHEIGHT*6)+5}, + {IT_CALL | IT_NOTHING, "", NULL, {.routine = M_AssignJoystick}, (LINEHEIGHT*7)+5}, + {IT_CALL | IT_NOTHING, "", NULL, {.routine = M_AssignJoystick}, (LINEHEIGHT*8)+5}, }; /* @@ -1254,27 +1254,27 @@ static menuitem_t OP_MouseOptionsMenu[] = static menuitem_t OP_VideoOptionsMenu[] = { - {IT_STRING | IT_CALL, NULL, "Set Resolution...", M_VideoModeMenu, 10}, + {IT_STRING | IT_CALL, NULL, "Set Resolution...", {.routine = M_VideoModeMenu}, 10}, #if (defined (__unix__) && !defined (MSDOS)) || defined (UNIXCOMMON) || defined (HAVE_SDL) - {IT_STRING|IT_CVAR, NULL, "Fullscreen", &cv_fullscreen, 20}, + {IT_STRING|IT_CVAR, NULL, "Fullscreen", {.cvar = &cv_fullscreen}, 20}, #endif #ifdef HWRENDER - {IT_STRING | IT_CVAR, NULL, "Renderer", &cv_renderer, 30}, + {IT_STRING | IT_CVAR, NULL, "Renderer", {.cvar = &cv_renderer}, 30}, #else - {IT_TRANSTEXT | IT_PAIR, "Renderer", "Software", &cv_renderer, 30}, + {IT_TRANSTEXT | IT_PAIR, "Renderer", "Software", {.cvar = &cv_renderer}, 30}, #endif {IT_STRING | IT_CVAR | IT_CV_SLIDER, - NULL, "Gamma", &cv_globalgamma, 50}, + NULL, "Gamma", {.cvar = &cv_globalgamma}, 50}, - {IT_STRING | IT_CVAR, NULL, "Show FPS", &cv_ticrate, 60}, - {IT_STRING | IT_CVAR, NULL, "Vertical Sync", &cv_vidwait, 70}, + {IT_STRING | IT_CVAR, NULL, "Show FPS", {.cvar = &cv_ticrate}, 60}, + {IT_STRING | IT_CVAR, NULL, "Vertical Sync", {.cvar = &cv_vidwait}, 70}, - {IT_STRING | IT_CVAR, NULL, "Draw Distance", &cv_drawdist, 90}, - {IT_STRING | IT_CVAR, NULL, "Weather Draw Distance",&cv_drawdist_precip, 100}, - {IT_STRING | IT_CVAR, NULL, "Skyboxes", &cv_skybox, 110}, + {IT_STRING | IT_CVAR, NULL, "Draw Distance", {.cvar = &cv_drawdist}, 90}, + {IT_STRING | IT_CVAR, NULL, "Weather Draw Distance", {.cvar = &cv_drawdist_precip}, 100}, + {IT_STRING | IT_CVAR, NULL, "Skyboxes", {.cvar = &cv_skybox}, 110}, #ifdef HWRENDER - {IT_CALL | IT_STRING, NULL, "OpenGL Options...", &M_OpenGLOptionsMenu, 140}, + {IT_CALL | IT_STRING, NULL, "OpenGL Options...", {.routine = M_OpenGLOptionsMenu}, 140}, #endif }; @@ -1298,86 +1298,86 @@ enum static menuitem_t OP_VideoModeMenu[] = { - {IT_KEYHANDLER | IT_NOTHING, NULL, "", M_HandleVideoMode, '\0'}, // dummy menuitem for the control func + {IT_KEYHANDLER | IT_NOTHING, NULL, "", {.routine = M_HandleVideoMode}, '\0'}, // dummy menuitem for the control func }; #ifdef HWRENDER static menuitem_t OP_OpenGLOptionsMenu[] = { - {IT_STRING | IT_CVAR, NULL, "3D Models", &cv_glmodels, 10}, - {IT_STRING|IT_CVAR, NULL, "Shaders", &cv_glshaders, 20}, + {IT_STRING | IT_CVAR, NULL, "3D Models", {.cvar = &cv_glmodels}, 10}, + {IT_STRING|IT_CVAR, NULL, "Shaders", {.cvar = &cv_glshaders}, 20}, - {IT_STRING|IT_CVAR, NULL, "Texture Quality", &cv_scr_depth, 40}, - {IT_STRING|IT_CVAR, NULL, "Texture Filter", &cv_glfiltermode, 50}, - {IT_STRING|IT_CVAR, NULL, "Anisotropic", &cv_glanisotropicmode, 60}, + {IT_STRING|IT_CVAR, NULL, "Texture Quality", {.cvar = &cv_scr_depth}, 40}, + {IT_STRING|IT_CVAR, NULL, "Texture Filter", {.cvar = &cv_glfiltermode}, 50}, + {IT_STRING|IT_CVAR, NULL, "Anisotropic", {.cvar = &cv_glanisotropicmode}, 60}, - {IT_STRING|IT_CVAR, NULL, "Wall Contrast Style", &cv_glfakecontrast, 80}, - {IT_STRING|IT_CVAR, NULL, "Sprite Billboarding", &cv_glspritebillboarding, 90}, - {IT_STRING|IT_CVAR, NULL, "Software Perspective", &cv_glshearing, 100}, + {IT_STRING|IT_CVAR, NULL, "Wall Contrast Style", {.cvar = &cv_glfakecontrast}, 80}, + {IT_STRING|IT_CVAR, NULL, "Sprite Billboarding", {.cvar = &cv_glspritebillboarding}, 90}, + {IT_STRING|IT_CVAR, NULL, "Software Perspective", {.cvar = &cv_glshearing}, 100}, }; #endif static menuitem_t OP_SoundOptionsMenu[] = { - {IT_STRING|IT_CVAR, NULL, "SFX", &cv_gamesounds, 10}, + {IT_STRING|IT_CVAR, NULL, "SFX", {.cvar = &cv_gamesounds}, 10}, {IT_STRING|IT_CVAR|IT_CV_SLIDER, - NULL, "SFX Volume", &cv_soundvolume, 18}, + NULL, "SFX Volume", {.cvar = &cv_soundvolume}, 18}, - {IT_STRING|IT_CVAR, NULL, "Music", &cv_gamedigimusic, 30}, + {IT_STRING|IT_CVAR, NULL, "Music", {.cvar = &cv_gamedigimusic}, 30}, {IT_STRING|IT_CVAR|IT_CV_SLIDER, - NULL, "Music Volume", &cv_digmusicvolume, 38}, + NULL, "Music Volume", {.cvar = &cv_digmusicvolume}, 38}, //{IT_STRING|IT_CALL, NULL, "Restart Audio System", M_RestartAudio, 50}, - {IT_STRING|IT_CVAR, NULL, "Reverse L/R Channels", &stereoreverse, 50}, - {IT_STRING|IT_CVAR, NULL, "Surround Sound", &surround, 60}, + {IT_STRING|IT_CVAR, NULL, "Reverse L/R Channels", {.cvar = &stereoreverse}, 50}, + {IT_STRING|IT_CVAR, NULL, "Surround Sound", {.cvar = &surround}, 60}, - {IT_STRING|IT_CVAR, NULL, "Chat Notifications", &cv_chatnotifications, 75}, - {IT_STRING|IT_CVAR, NULL, "Character voices", &cv_kartvoices, 85}, - {IT_STRING|IT_CVAR, NULL, "Powerup Warning", &cv_kartinvinsfx, 95}, + {IT_STRING|IT_CVAR, NULL, "Chat Notifications", {.cvar = &cv_chatnotifications}, 75}, + {IT_STRING|IT_CVAR, NULL, "Character voices", {.cvar = &cv_kartvoices}, 85}, + {IT_STRING|IT_CVAR, NULL, "Powerup Warning", {.cvar = &cv_kartinvinsfx}, 95}, - {IT_KEYHANDLER|IT_STRING, NULL, "Sound Test", M_HandleSoundTest, 110}, + {IT_KEYHANDLER|IT_STRING, NULL, "Sound Test", {.routine = M_HandleSoundTest}, 110}, - {IT_STRING|IT_CVAR, NULL, "Play Music While Unfocused", &cv_playmusicifunfocused, 125}, - {IT_STRING|IT_CVAR, NULL, "Play SFX While Unfocused", &cv_playsoundifunfocused, 135}, + {IT_STRING|IT_CVAR, NULL, "Play Music While Unfocused", {.cvar = &cv_playmusicifunfocused}, 125}, + {IT_STRING|IT_CVAR, NULL, "Play SFX While Unfocused", {.cvar = &cv_playsoundifunfocused}, 135}, }; static menuitem_t OP_DataOptionsMenu[] = { - {IT_STRING | IT_CALL, NULL, "Screenshot Options...", M_ScreenshotOptions, 10}, - {IT_STRING | IT_CALL, NULL, "Addon Options...", M_AddonsOptions, 20}, - {IT_STRING | IT_SUBMENU, NULL, "Replay Options...", &MISC_ReplayOptionsDef, 30}, + {IT_STRING | IT_CALL, NULL, "Screenshot Options...", {.routine = M_ScreenshotOptions}, 10}, + {IT_STRING | IT_CALL, NULL, "Addon Options...", {.routine = M_AddonsOptions}, 20}, + {IT_STRING | IT_SUBMENU, NULL, "Replay Options...", {.submenu = &MISC_ReplayOptionsDef}, 30}, #ifdef HAVE_DISCORDRPC - {IT_STRING | IT_SUBMENU, NULL, "Discord Options...", &OP_DiscordOptionsDef, 40}, + {IT_STRING | IT_SUBMENU, NULL, "Discord Options...", {.submenu = &OP_DiscordOptionsDef}, 40}, - {IT_STRING | IT_SUBMENU, NULL, "Erase Data...", &OP_EraseDataDef, 60}, + {IT_STRING | IT_SUBMENU, NULL, "Erase Data...", {.submenu = &OP_EraseDataDef}, 60}, #else - {IT_STRING | IT_SUBMENU, NULL, "Erase Data...", &OP_EraseDataDef, 50}, + {IT_STRING | IT_SUBMENU, NULL, "Erase Data...", {.submenu = &OP_EraseDataDef}, 50}, #endif }; static menuitem_t OP_ScreenshotOptionsMenu[] = { - {IT_STRING|IT_CVAR, NULL, "Storage Location", &cv_screenshot_option, 10}, - {IT_STRING|IT_CVAR|IT_CV_STRING, NULL, "Custom Folder", &cv_screenshot_folder, 20}, + {IT_STRING|IT_CVAR, NULL, "Storage Location", {.cvar = &cv_screenshot_option}, 10}, + {IT_STRING|IT_CVAR|IT_CV_STRING, NULL, "Custom Folder", {.cvar = &cv_screenshot_folder}, 20}, - {IT_HEADER, NULL, "Screenshots (F8)", NULL, 50}, - {IT_STRING|IT_CVAR, NULL, "Memory Level", &cv_zlib_memory, 60}, - {IT_STRING|IT_CVAR, NULL, "Compression Level", &cv_zlib_level, 70}, - {IT_STRING|IT_CVAR, NULL, "Strategy", &cv_zlib_strategy, 80}, - {IT_STRING|IT_CVAR, NULL, "Window Size", &cv_zlib_window_bits, 90}, + {IT_HEADER, NULL, "Screenshots (F8)", {NULL}, 50}, + {IT_STRING|IT_CVAR, NULL, "Memory Level", {.cvar = &cv_zlib_memory}, 60}, + {IT_STRING|IT_CVAR, NULL, "Compression Level", {.cvar = &cv_zlib_level}, 70}, + {IT_STRING|IT_CVAR, NULL, "Strategy", {.cvar = &cv_zlib_strategy}, 80}, + {IT_STRING|IT_CVAR, NULL, "Window Size", {.cvar = &cv_zlib_window_bits}, 90}, - {IT_HEADER, NULL, "Movie Mode (F9)", NULL, 105}, - {IT_STRING|IT_CVAR, NULL, "Capture Mode", &cv_moviemode, 115}, + {IT_HEADER, NULL, "Movie Mode (F9)", {NULL}, 105}, + {IT_STRING|IT_CVAR, NULL, "Capture Mode", {.cvar = &cv_moviemode}, 115}, - {IT_STRING|IT_CVAR, NULL, "Region Optimizing", &cv_gif_optimize, 125}, - {IT_STRING|IT_CVAR, NULL, "Downscaling", &cv_gif_downscale, 135}, + {IT_STRING|IT_CVAR, NULL, "Region Optimizing", {.cvar = &cv_gif_optimize}, 125}, + {IT_STRING|IT_CVAR, NULL, "Downscaling", {.cvar = &cv_gif_downscale}, 135}, - {IT_STRING|IT_CVAR, NULL, "Memory Level", &cv_zlib_memorya, 125}, - {IT_STRING|IT_CVAR, NULL, "Compression Level", &cv_zlib_levela, 135}, - {IT_STRING|IT_CVAR, NULL, "Strategy", &cv_zlib_strategya, 145}, - {IT_STRING|IT_CVAR, NULL, "Window Size", &cv_zlib_window_bitsa, 155}, + {IT_STRING|IT_CVAR, NULL, "Memory Level", {.cvar = &cv_zlib_memorya}, 125}, + {IT_STRING|IT_CVAR, NULL, "Compression Level", {.cvar = &cv_zlib_levela}, 135}, + {IT_STRING|IT_CVAR, NULL, "Strategy", {.cvar = &cv_zlib_strategya}, 145}, + {IT_STRING|IT_CVAR, NULL, "Window Size", {.cvar = &cv_zlib_window_bitsa}, 155}, }; enum @@ -1392,23 +1392,23 @@ enum static menuitem_t OP_EraseDataMenu[] = { - {IT_STRING | IT_CALL, NULL, "Erase Record Data", M_EraseData, 10}, - {IT_STRING | IT_CALL, NULL, "Erase Unlockable Data", M_EraseData, 20}, + {IT_STRING | IT_CALL, NULL, "Erase Record Data", {.routine = M_EraseData}, 10}, + {IT_STRING | IT_CALL, NULL, "Erase Unlockable Data", {.routine = M_EraseData}, 20}, - {IT_STRING | IT_CALL, NULL, "\x85" "Erase ALL Data", M_EraseData, 40}, + {IT_STRING | IT_CALL, NULL, "\x85" "Erase ALL Data", {.routine = M_EraseData}, 40}, }; static menuitem_t OP_AddonsOptionsMenu[] = { - {IT_HEADER, NULL, "Menu", NULL, 0}, - {IT_STRING|IT_CVAR, NULL, "Location", &cv_addons_option, 10}, - {IT_STRING|IT_CVAR|IT_CV_STRING, NULL, "Custom Folder", &cv_addons_folder, 20}, - {IT_STRING|IT_CVAR, NULL, "Identify addons via", &cv_addons_md5, 48}, - {IT_STRING|IT_CVAR, NULL, "Show unsupported file types", &cv_addons_showall, 58}, + {IT_HEADER, NULL, "Menu", {NULL}, 0}, + {IT_STRING|IT_CVAR, NULL, "Location", {.cvar = &cv_addons_option}, 10}, + {IT_STRING|IT_CVAR|IT_CV_STRING, NULL, "Custom Folder", {.cvar = &cv_addons_folder}, 20}, + {IT_STRING|IT_CVAR, NULL, "Identify addons via", {.cvar = &cv_addons_md5}, 48}, + {IT_STRING|IT_CVAR, NULL, "Show unsupported file types", {.cvar = &cv_addons_showall}, 58}, - {IT_HEADER, NULL, "Search", NULL, 76}, - {IT_STRING|IT_CVAR, NULL, "Matching", &cv_addons_search_type, 86}, - {IT_STRING|IT_CVAR, NULL, "Case-sensitive", &cv_addons_search_case, 96}, + {IT_HEADER, NULL, "Search", {NULL}, 76}, + {IT_STRING|IT_CVAR, NULL, "Matching", {.cvar = &cv_addons_search_type}, 86}, + {IT_STRING|IT_CVAR, NULL, "Case-sensitive", {.cvar = &cv_addons_search_case}, 96}, }; enum @@ -1419,94 +1419,94 @@ enum #ifdef HAVE_DISCORDRPC static menuitem_t OP_DiscordOptionsMenu[] = { - {IT_STRING | IT_CVAR, NULL, "Rich Presence", &cv_discordrp, 10}, + {IT_STRING | IT_CVAR, NULL, "Rich Presence", {.cvar = &cv_discordrp}, 10}, - {IT_HEADER, NULL, "Rich Presence Settings", NULL, 30}, - {IT_STRING | IT_CVAR, NULL, "Streamer Mode", &cv_discordstreamer, 40}, + {IT_HEADER, NULL, "Rich Presence Settings", {NULL}, 30}, + {IT_STRING | IT_CVAR, NULL, "Streamer Mode", {.cvar = &cv_discordstreamer}, 40}, - {IT_STRING | IT_CVAR, NULL, "Allow Ask To Join", &cv_discordasks, 60}, - {IT_STRING | IT_CVAR, NULL, "Allow Invites", &cv_discordinvites, 70}, + {IT_STRING | IT_CVAR, NULL, "Allow Ask To Join", {.cvar = &cv_discordasks}, 60}, + {IT_STRING | IT_CVAR, NULL, "Allow Invites", {.cvar = &cv_discordinvites}, 70}, }; #endif static menuitem_t OP_HUDOptionsMenu[] = { - {IT_STRING | IT_CVAR, NULL, "Show HUD (F3)", &cv_showhud, 20}, + {IT_STRING | IT_CVAR, NULL, "Show HUD (F3)", {.cvar = &cv_showhud}, 20}, {IT_STRING | IT_CVAR | IT_CV_SLIDER, - NULL, "HUD Visibility", &cv_translucenthud, 30}, + NULL, "HUD Visibility", {.cvar = &cv_translucenthud}, 30}, - {IT_STRING | IT_SUBMENU, NULL, "Online HUD options...",&OP_ChatOptionsDef, 45}, - {IT_STRING | IT_CVAR, NULL, "Background Glass", &cons_backcolor, 55}, + {IT_STRING | IT_SUBMENU, NULL, "Online HUD options...", {.submenu = &OP_ChatOptionsDef}, 45}, + {IT_STRING | IT_CVAR, NULL, "Background Glass", {.cvar = &cons_backcolor}, 55}, {IT_STRING | IT_CVAR | IT_CV_SLIDER, - NULL, "Minimap Visibility", &cv_kartminimap, 70}, - {IT_STRING | IT_CVAR, NULL, "Speedometer Display", &cv_kartspeedometer, 80}, - {IT_STRING | IT_CVAR, NULL, "Show \"CHECK\"", &cv_kartcheck, 90}, + NULL, "Minimap Visibility", {.cvar = &cv_kartminimap}, 70}, + {IT_STRING | IT_CVAR, NULL, "Speedometer Display", {.cvar = &cv_kartspeedometer}, 80}, + {IT_STRING | IT_CVAR, NULL, "Show \"CHECK\"", {.cvar = &cv_kartcheck}, 90}, - {IT_STRING | IT_CVAR, NULL, "Menu Highlights", &cons_menuhighlight, 105}, + {IT_STRING | IT_CVAR, NULL, "Menu Highlights", {.cvar = &cons_menuhighlight}, 105}, // highlight info - (GOOD HIGHLIGHT, WARNING HIGHLIGHT) - 105 (see M_DrawHUDOptions) - {IT_STRING | IT_CVAR, NULL, "Console Text Size", &cv_constextsize, 130}, + {IT_STRING | IT_CVAR, NULL, "Console Text Size", {.cvar = &cv_constextsize}, 130}, - {IT_STRING | IT_CVAR, NULL, "Show \"FOCUS LOST\"", &cv_showfocuslost, 145}, + {IT_STRING | IT_CVAR, NULL, "Show \"FOCUS LOST\"", {.cvar = &cv_showfocuslost}, 145}, }; // Ok it's still called chatoptions but we'll put ping display in here to be clean static menuitem_t OP_ChatOptionsMenu[] = { // will ANYONE who doesn't know how to use the console want to touch this one? - {IT_STRING | IT_CVAR, NULL, "Chat Mode", &cv_consolechat, 10}, // nonetheless... + {IT_STRING | IT_CVAR, NULL, "Chat Mode", {.cvar = &cv_consolechat}, 10}, // nonetheless... {IT_STRING | IT_CVAR | IT_CV_SLIDER, - NULL, "Chat Box Width", &cv_chatwidth, 25}, + NULL, "Chat Box Width", {.cvar = &cv_chatwidth}, 25}, {IT_STRING | IT_CVAR | IT_CV_SLIDER, - NULL, "Chat Box Height", &cv_chatheight, 35}, + NULL, "Chat Box Height", {.cvar = &cv_chatheight}, 35}, - {IT_STRING | IT_CVAR, NULL, "Chat Background Tint", &cv_chatbacktint, 50}, - {IT_STRING | IT_CVAR, NULL, "Message Fadeout Time", &cv_chattime, 60}, - {IT_STRING | IT_CVAR, NULL, "Spam Protection", &cv_chatspamprotection, 70}, + {IT_STRING | IT_CVAR, NULL, "Chat Background Tint", {.cvar = &cv_chatbacktint}, 50}, + {IT_STRING | IT_CVAR, NULL, "Message Fadeout Time", {.cvar = &cv_chattime}, 60}, + {IT_STRING | IT_CVAR, NULL, "Spam Protection", {.cvar = &cv_chatspamprotection}, 70}, - {IT_STRING | IT_CVAR, NULL, "Local ping display", &cv_showping, 90}, // shows ping next to framerate if we want to. + {IT_STRING | IT_CVAR, NULL, "Local ping display", {.cvar = &cv_showping}, 90}, // shows ping next to framerate if we want to. }; static menuitem_t OP_GameOptionsMenu[] = { - {IT_STRING | IT_SUBMENU, NULL, "Random Item Toggles...", &OP_MonitorToggleDef, 10}, + {IT_STRING | IT_SUBMENU, NULL, "Random Item Toggles...", {.submenu = &OP_MonitorToggleDef}, 10}, - {IT_STRING | IT_CVAR, NULL, "Game Speed", &cv_kartspeed, 30}, - {IT_STRING | IT_CVAR, NULL, "Frantic Items", &cv_kartfrantic, 40}, - {IT_SECRET, NULL, "Encore Mode", &cv_kartencore, 50}, + {IT_STRING | IT_CVAR, NULL, "Game Speed", {.cvar = &cv_kartspeed}, 30}, + {IT_STRING | IT_CVAR, NULL, "Frantic Items", {.cvar = &cv_kartfrantic}, 40}, + {IT_SECRET, NULL, "Encore Mode", {.cvar = &cv_kartencore}, 50}, - {IT_STRING | IT_CVAR, NULL, "Number of Laps", &cv_basenumlaps, 70}, - {IT_STRING | IT_CVAR, NULL, "Exit Countdown Timer", &cv_countdowntime, 80}, + {IT_STRING | IT_CVAR, NULL, "Number of Laps", {.cvar = &cv_basenumlaps}, 70}, + {IT_STRING | IT_CVAR, NULL, "Exit Countdown Timer", {.cvar = &cv_countdowntime}, 80}, - {IT_STRING | IT_CVAR, NULL, "Time Limit", &cv_timelimit, 100}, - {IT_STRING | IT_CVAR, NULL, "Starting Bumpers", &cv_kartbumpers, 110}, - {IT_STRING | IT_CVAR, NULL, "Karma Comeback", &cv_kartcomeback, 120}, + {IT_STRING | IT_CVAR, NULL, "Time Limit", {.cvar = &cv_timelimit}, 100}, + {IT_STRING | IT_CVAR, NULL, "Starting Bumpers", {.cvar = &cv_kartbumpers}, 110}, + {IT_STRING | IT_CVAR, NULL, "Karma Comeback", {.cvar = &cv_kartcomeback}, 120}, - {IT_STRING | IT_CVAR, NULL, "Track Power Levels", &cv_kartusepwrlv, 140}, + {IT_STRING | IT_CVAR, NULL, "Track Power Levels", {.cvar = &cv_kartusepwrlv}, 140}, }; static menuitem_t OP_ServerOptionsMenu[] = { #ifndef NONET {IT_STRING | IT_CVAR | IT_CV_STRING, - NULL, "Server Name", &cv_servername, 10}, + NULL, "Server Name", {.cvar = &cv_servername}, 10}, #endif - {IT_STRING | IT_CVAR, NULL, "Intermission Timer", &cv_inttime, 40}, - {IT_STRING | IT_CVAR, NULL, "Map Progression", &cv_advancemap, 50}, - {IT_STRING | IT_CVAR, NULL, "Voting Timer", &cv_votetime, 60}, - {IT_STRING | IT_CVAR, NULL, "Voting Rule Changes", &cv_kartvoterulechanges, 70}, + {IT_STRING | IT_CVAR, NULL, "Intermission Timer", {.cvar = &cv_inttime}, 40}, + {IT_STRING | IT_CVAR, NULL, "Map Progression", {.cvar = &cv_advancemap}, 50}, + {IT_STRING | IT_CVAR, NULL, "Voting Timer", {.cvar = &cv_votetime}, 60}, + {IT_STRING | IT_CVAR, NULL, "Voting Rule Changes", {.cvar = &cv_kartvoterulechanges}, 70}, #ifndef NONET - {IT_STRING | IT_CVAR, NULL, "Max. Player Count", &cv_maxplayers, 90}, - {IT_STRING | IT_CVAR, NULL, "Allow Players to Join", &cv_allownewplayer, 100}, - {IT_STRING | IT_CVAR, NULL, "Allow Addon Downloading", &cv_downloading, 110}, - {IT_STRING | IT_CVAR, NULL, "Pause Permission", &cv_pause, 120}, - {IT_STRING | IT_CVAR, NULL, "Mute All Chat", &cv_mute, 130}, + {IT_STRING | IT_CVAR, NULL, "Max. Player Count", {.cvar = &cv_maxplayers}, 90}, + {IT_STRING | IT_CVAR, NULL, "Allow Players to Join", {.cvar = &cv_allownewplayer}, 100}, + {IT_STRING | IT_CVAR, NULL, "Allow Addon Downloading", {.cvar = &cv_downloading}, 110}, + {IT_STRING | IT_CVAR, NULL, "Pause Permission", {.cvar = &cv_pause}, 120}, + {IT_STRING | IT_CVAR, NULL, "Mute All Chat", {.cvar = &cv_mute}, 130}, - {IT_SUBMENU|IT_STRING, NULL, "Advanced Options...", &OP_AdvServerOptionsDef,150}, + {IT_SUBMENU|IT_STRING, NULL, "Advanced Options...", {.submenu = &OP_AdvServerOptionsDef}, 150}, #endif }; @@ -1514,20 +1514,20 @@ static menuitem_t OP_ServerOptionsMenu[] = static menuitem_t OP_AdvServerOptionsMenu[] = { {IT_STRING | IT_CVAR | IT_CV_STRING, - NULL, "Server Browser Address", &cv_masterserver, 10}, + NULL, "Server Browser Address", {.cvar = &cv_masterserver}, 10}, - {IT_STRING | IT_CVAR, NULL, "Attempts to resynchronise", &cv_resynchattempts, 40}, - {IT_STRING | IT_CVAR, NULL, "Ping limit (ms)", &cv_maxping, 50}, - {IT_STRING | IT_CVAR, NULL, "Ping timeout (s)", &cv_pingtimeout, 60}, - {IT_STRING | IT_CVAR, NULL, "Connection timeout (tics)", &cv_nettimeout, 70}, - {IT_STRING | IT_CVAR, NULL, "Join timeout (tics)", &cv_jointimeout, 80}, + {IT_STRING | IT_CVAR, NULL, "Attempts to resynchronise", {.cvar = &cv_resynchattempts}, 40}, + {IT_STRING | IT_CVAR, NULL, "Ping limit (ms)", {.cvar = &cv_maxping}, 50}, + {IT_STRING | IT_CVAR, NULL, "Ping timeout (s)", {.cvar = &cv_pingtimeout}, 60}, + {IT_STRING | IT_CVAR, NULL, "Connection timeout (tics)", {.cvar = &cv_nettimeout}, 70}, + {IT_STRING | IT_CVAR, NULL, "Join timeout (tics)", {.cvar = &cv_jointimeout}, 80}, - {IT_STRING | IT_CVAR, NULL, "Max. file transfer send (KB)", &cv_maxsend, 100}, - {IT_STRING | IT_CVAR, NULL, "File transfer packet rate", &cv_downloadspeed, 110}, + {IT_STRING | IT_CVAR, NULL, "Max. file transfer send (KB)", {.cvar = &cv_maxsend}, 100}, + {IT_STRING | IT_CVAR, NULL, "File transfer packet rate", {.cvar = &cv_downloadspeed}, 110}, - {IT_STRING | IT_CVAR, NULL, "Log join addresses", &cv_showjoinaddress, 130}, - {IT_STRING | IT_CVAR, NULL, "Log resyncs", &cv_blamecfail, 140}, - {IT_STRING | IT_CVAR, NULL, "Log file transfers", &cv_noticedownload, 150}, + {IT_STRING | IT_CVAR, NULL, "Log join addresses", {.cvar = &cv_showjoinaddress}, 130}, + {IT_STRING | IT_CVAR, NULL, "Log resyncs", {.cvar = &cv_blamecfail}, 140}, + {IT_STRING | IT_CVAR, NULL, "Log file transfers", {.cvar = &cv_noticedownload}, 150}, }; #endif @@ -1569,32 +1569,32 @@ static menuitem_t OP_MonitorToggleMenu[] = { // Mostly handled by the drawing function. // Instead of using this for dumb monitors, lets use the new item bools we have :V - {IT_KEYHANDLER | IT_NOTHING, NULL, "Sneakers", M_HandleMonitorToggles, KITEM_SNEAKER}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Sneakers x3", M_HandleMonitorToggles, KRITEM_TRIPLESNEAKER}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Rocket Sneakers", M_HandleMonitorToggles, KITEM_ROCKETSNEAKER}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Toggle All", M_HandleMonitorToggles, 0}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Bananas", M_HandleMonitorToggles, KITEM_BANANA}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Bananas x3", M_HandleMonitorToggles, KRITEM_TRIPLEBANANA}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Bananas x10", M_HandleMonitorToggles, KRITEM_TENFOLDBANANA}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Eggman Monitors", M_HandleMonitorToggles, KITEM_EGGMAN}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Orbinauts", M_HandleMonitorToggles, KITEM_ORBINAUT}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Orbinauts x3", M_HandleMonitorToggles, KRITEM_TRIPLEORBINAUT}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Orbinauts x4", M_HandleMonitorToggles, KRITEM_QUADORBINAUT}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Mines", M_HandleMonitorToggles, KITEM_MINE}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Jawz", M_HandleMonitorToggles, KITEM_JAWZ}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Jawz x2", M_HandleMonitorToggles, KRITEM_DUALJAWZ}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Ballhogs", M_HandleMonitorToggles, KITEM_BALLHOG}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Self-Propelled Bombs", M_HandleMonitorToggles, KITEM_SPB}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Invinciblity", M_HandleMonitorToggles, KITEM_INVINCIBILITY}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Grow", M_HandleMonitorToggles, KITEM_GROW}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Shrink", M_HandleMonitorToggles, KITEM_SHRINK}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Thunder Shields", M_HandleMonitorToggles, KITEM_THUNDERSHIELD}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Hyudoros", M_HandleMonitorToggles, KITEM_HYUDORO}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Pogo Springs", M_HandleMonitorToggles, KITEM_POGOSPRING}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Super Rings", M_HandleMonitorToggles, KITEM_SUPERRING}, - {IT_KEYHANDLER | IT_NOTHING, NULL, "Kitchen Sinks", M_HandleMonitorToggles, KITEM_KITCHENSINK}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Sneakers", {.routine = M_HandleMonitorToggles}, KITEM_SNEAKER}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Sneakers x3", {.routine = M_HandleMonitorToggles}, KRITEM_TRIPLESNEAKER}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Rocket Sneakers", {.routine = M_HandleMonitorToggles}, KITEM_ROCKETSNEAKER}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Toggle All", {.routine = M_HandleMonitorToggles}, 0}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Bananas", {.routine = M_HandleMonitorToggles}, KITEM_BANANA}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Bananas x3", {.routine = M_HandleMonitorToggles}, KRITEM_TRIPLEBANANA}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Bananas x10", {.routine = M_HandleMonitorToggles}, KRITEM_TENFOLDBANANA}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Eggman Monitors", {.routine = M_HandleMonitorToggles}, KITEM_EGGMAN}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Orbinauts", {.routine = M_HandleMonitorToggles}, KITEM_ORBINAUT}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Orbinauts x3", {.routine = M_HandleMonitorToggles}, KRITEM_TRIPLEORBINAUT}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Orbinauts x4", {.routine = M_HandleMonitorToggles}, KRITEM_QUADORBINAUT}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Mines", {.routine = M_HandleMonitorToggles}, KITEM_MINE}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Jawz", {.routine = M_HandleMonitorToggles}, KITEM_JAWZ}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Jawz x2", {.routine = M_HandleMonitorToggles}, KRITEM_DUALJAWZ}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Ballhogs", {.routine = M_HandleMonitorToggles}, KITEM_BALLHOG}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Self-Propelled Bombs", {.routine = M_HandleMonitorToggles}, KITEM_SPB}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Invinciblity", {.routine = M_HandleMonitorToggles}, KITEM_INVINCIBILITY}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Grow", {.routine = M_HandleMonitorToggles}, KITEM_GROW}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Shrink", {.routine = M_HandleMonitorToggles}, KITEM_SHRINK}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Thunder Shields", {.routine = M_HandleMonitorToggles}, KITEM_THUNDERSHIELD}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Hyudoros", {.routine = M_HandleMonitorToggles}, KITEM_HYUDORO}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Pogo Springs", {.routine = M_HandleMonitorToggles}, KITEM_POGOSPRING}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Super Rings", {.routine = M_HandleMonitorToggles}, KITEM_SUPERRING}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "Kitchen Sinks", {.routine = M_HandleMonitorToggles}, KITEM_KITCHENSINK}, #ifdef ITEMTOGGLEBOTTOMRIGHT - {IT_KEYHANDLER | IT_NOTHING, NULL, "---", M_HandleMonitorToggles, 255}, + {IT_KEYHANDLER | IT_NOTHING, NULL, "---", {.routine = M_HandleMonitorToggles}, 255}, #endif }; @@ -2063,8 +2063,10 @@ menu_t OP_MonitorToggleDef = }; #ifdef HWRENDER -static void M_OpenGLOptionsMenu(void) +static void M_OpenGLOptionsMenu(INT32 choice) { + (void)choice; + if (rendermode == render_opengl) M_SetupNextMenu(&OP_OpenGLOptionsDef); else @@ -2376,7 +2378,7 @@ void M_InitMenuPresTables(void) static void M_ChangeCvar(INT32 choice) { - consvar_t *cv = (consvar_t *)currentMenu->menuitems[itemOn].itemaction; + consvar_t *cv = currentMenu->menuitems[itemOn].itemaction.cvar; if (choice == -1) { @@ -2426,7 +2428,7 @@ static void M_ChangeCvar(INT32 choice) static boolean M_ChangeStringCvar(INT32 choice) { - consvar_t *cv = (consvar_t *)currentMenu->menuitems[itemOn].itemaction; + consvar_t *cv = currentMenu->menuitems[itemOn].itemaction.cvar; char buf[MAXSTRINGLENGTH]; size_t len; @@ -2729,7 +2731,7 @@ boolean M_Responder(event_t *ev) if ((ch == gamecontrol[0][gc_brake][0] || ch == gamecontrol[0][gc_brake][1]) && ch >= KEY_MOUSE1) // do this here, otherwise brake opens the menu mid-game ch = KEY_ESCAPE; - routine = currentMenu->menuitems[itemOn].itemaction; + routine = currentMenu->menuitems[itemOn].itemaction.routine; // Handle menuitems which need a specific key handling if (routine && (currentMenu->menuitems[itemOn].status & IT_TYPE) == IT_KEYHANDLER) @@ -2765,8 +2767,7 @@ boolean M_Responder(event_t *ev) return true; if (routine) { - void (*otherroutine)(event_t *sev) = currentMenu->menuitems[itemOn].itemaction; - otherroutine(ev); //Alam: what a hack + currentMenu->menuitems[itemOn].itemaction.eventhandler(ev); } return true; } @@ -2933,7 +2934,7 @@ boolean M_Responder(event_t *ev) break; case IT_SUBMENU: currentMenu->lastOn = itemOn; - M_SetupNextMenu((menu_t *)currentMenu->menuitems[itemOn].itemaction); + M_SetupNextMenu((menu_t *)currentMenu->menuitems[itemOn].itemaction.submenu); break; } } @@ -2979,7 +2980,7 @@ boolean M_Responder(event_t *ev) if (routine && ((currentMenu->menuitems[itemOn].status & IT_TYPE) == IT_ARROWS || (currentMenu->menuitems[itemOn].status & IT_TYPE) == IT_CVAR)) { - consvar_t *cv = (consvar_t *)currentMenu->menuitems[itemOn].itemaction; + consvar_t *cv = currentMenu->menuitems[itemOn].itemaction.cvar; if (cv == &cv_chooseskin || cv == &cv_dummystaff @@ -3522,7 +3523,7 @@ void M_Init(void) { PlayerMenu[i].status = (i == 0 ? IT_CALL : IT_DISABLED); PlayerMenu[i].patch = PlayerMenu[i].text = NULL; - PlayerMenu[i].itemaction = M_ChoosePlayer; + PlayerMenu[i].itemaction.routine = M_ChoosePlayer; PlayerMenu[i].alphaKey = 0; } @@ -3546,7 +3547,7 @@ void M_InitCharacterTables(void) { PlayerMenu[i].status = (i < 4 ? IT_CALL : IT_DISABLED); PlayerMenu[i].patch = PlayerMenu[i].text = NULL; - PlayerMenu[i].itemaction = M_ChoosePlayer; + PlayerMenu[i].itemaction.routine = M_ChoosePlayer; PlayerMenu[i].alphaKey = 0; } @@ -3890,7 +3891,7 @@ static void M_DrawGenericMenu(void) y = currentMenu->y+currentMenu->menuitems[i].alphaKey;//+= LINEHEIGHT; break; case IT_BIGSLIDER: - M_DrawThermo(x, y, (consvar_t *)currentMenu->menuitems[i].itemaction); + M_DrawThermo(x, y, currentMenu->menuitems[i].itemaction.cvar); y += LINEHEIGHT; break; case IT_STRING: @@ -3909,7 +3910,7 @@ static void M_DrawGenericMenu(void) switch (currentMenu->menuitems[i].status & IT_TYPE) case IT_CVAR: { - consvar_t *cv = (consvar_t *)currentMenu->menuitems[i].itemaction; + consvar_t *cv = currentMenu->menuitems[i].itemaction.cvar; switch (currentMenu->menuitems[i].status & IT_CVARTYPE) { case IT_CV_SLIDER: @@ -4213,7 +4214,7 @@ static void M_DrawCenteredMenu(void) y += LINEHEIGHT; break; case IT_BIGSLIDER: - M_DrawThermo(x, y, (consvar_t *)currentMenu->menuitems[i].itemaction); + M_DrawThermo(x, y, currentMenu->menuitems[i].itemaction.cvar); y += LINEHEIGHT; break; case IT_STRING: @@ -4232,7 +4233,7 @@ static void M_DrawCenteredMenu(void) switch(currentMenu->menuitems[i].status & IT_TYPE) case IT_CVAR: { - consvar_t *cv = (consvar_t *)currentMenu->menuitems[i].itemaction; + consvar_t *cv = currentMenu->menuitems[i].itemaction.cvar; switch(currentMenu->menuitems[i].status & IT_CVARTYPE) { case IT_CV_SLIDER: @@ -4495,11 +4496,7 @@ static INT32 M_GetFirstLevelInList(void) static void M_DrawMessageMenu(void); // Because this is just a hack-ish 'menu', I'm not putting this with the others -static menuitem_t MessageMenu[] = -{ - // TO HACK - {0,NULL,NULL,NULL,0} -}; +static menuitem_t MessageMenu[] = {0}; menu_t MessageDef = { @@ -4571,15 +4568,15 @@ void M_StartMessage(const char *string, void *routine, { case MM_NOTHING: MessageDef.menuitems[0].status = IT_MSGHANDLER; - MessageDef.menuitems[0].itemaction = M_StopMessage; + MessageDef.menuitems[0].itemaction.routine = M_StopMessage; break; case MM_YESNO: MessageDef.menuitems[0].status = IT_MSGHANDLER; - MessageDef.menuitems[0].itemaction = routine; + *(void**)&MessageDef.menuitems[0].itemaction.routine = routine; break; case MM_EVENTHANDLER: MessageDef.menuitems[0].status = IT_MSGHANDLER; - MessageDef.menuitems[0].itemaction = routine; + *(void**)&MessageDef.menuitems[0].itemaction.eventhandler = routine; break; } //added : 06-02-98: now draw a textbox around the message @@ -4964,7 +4961,7 @@ static boolean M_AddonsRefresh(void) if (message) { - M_StartMessage(message,M_AddonsClearName,MM_EVENTHANDLER); + M_StartMessage(message, FUNCPTRCAST(M_AddonsClearName), MM_EVENTHANDLER); return true; } @@ -5261,7 +5258,7 @@ static void M_HandleAddons(INT32 choice) } break; case EXT_TXT: - M_StartMessage(va("%c%s\x80\nThis file may not be a console script.\nAttempt to run anyways? \n\n(Press 'Y' to confirm)\n", ('\x80' + (highlightflags>>V_CHARCOLORSHIFT)), dirmenu[dir_on[menudepthleft]]+DIR_STRING),M_AddonExec,MM_YESNO); + M_StartMessage(va("%c%s\x80\nThis file may not be a console script.\nAttempt to run anyways? \n\n(Press 'Y' to confirm)\n", ('\x80' + (highlightflags>>V_CHARCOLORSHIFT)), dirmenu[dir_on[menudepthleft]]+DIR_STRING), FUNCPTRCAST(M_AddonExec) ,MM_YESNO); break; case EXT_CFG: M_AddonExec(KEY_ENTER); @@ -6339,7 +6336,7 @@ static void M_RetryResponse(INT32 ch) static void M_Retry(INT32 choice) { (void)choice; - M_StartMessage(M_GetText("Start this race over?\n\n(Press 'Y' to confirm)\n"),M_RetryResponse,MM_YESNO); + M_StartMessage(M_GetText("Start this race over?\n\n(Press 'Y' to confirm)\n"), FUNCPTRCAST(M_RetryResponse), MM_YESNO); } static void M_SelectableClearMenus(INT32 choice) @@ -6397,7 +6394,7 @@ static void M_DestroyRobots(INT32 choice) { (void)choice; - M_StartMessage(M_GetText("Do you want to destroy all\nrobots in the current level?\n\n(Press 'Y' to confirm)\n"),M_DestroyRobotsResponse,MM_YESNO); + M_StartMessage(M_GetText("Do you want to destroy all\nrobots in the current level?\n\n(Press 'Y' to confirm)\n"), FUNCPTRCAST(M_DestroyRobotsResponse), MM_YESNO); } /*static void M_LevelSelectWarp(INT32 choice) @@ -6614,7 +6611,7 @@ static void M_DrawSkyRoom(void) for (i = 0; i < currentMenu->numitems; ++i) { - if (currentMenu->menuitems[i].itemaction == M_HandleSoundTest) + if (currentMenu->menuitems[i].itemaction.routine == M_HandleSoundTest) { y = currentMenu->menuitems[i].alphaKey; break; @@ -7822,7 +7819,7 @@ void M_DrawTimeAttackMenu(void) // Cvar specific handling if ((currentMenu->menuitems[i].status & IT_TYPE) == IT_CVAR) { - consvar_t *cv = (consvar_t *)currentMenu->menuitems[i].itemaction; + consvar_t *cv = currentMenu->menuitems[i].itemaction.cvar; if (currentMenu->menuitems[i].status & IT_CV_STRING) { M_DrawTextBox(x + 32, y - 8, MAXPLAYERNAME, 1); @@ -7949,7 +7946,7 @@ void M_DrawTimeAttackMenu(void) { y = currentMenu->y+SP_TimeAttackMenu[i].alphaKey; V_DrawString(x, y, V_TRANSLUCENT, SP_TimeAttackMenu[i].text); - ncv = (consvar_t *)SP_TimeAttackMenu[i].itemaction; + ncv = SP_TimeAttackMenu[i].itemaction.cvar; if (SP_TimeAttackMenu[i].status & IT_CV_STRING) { M_DrawTextBox(x + 32, y - 8, MAXPLAYERNAME, 1); @@ -8259,11 +8256,11 @@ static void M_SetGuestReplay(INT32 choice) break; case 3: // guest default: - M_StartMessage(M_GetText("Are you sure you want to\ndelete the guest replay data?\n\n(Press 'Y' to confirm)\n"),M_EraseGuest,MM_YESNO); + M_StartMessage(M_GetText("Are you sure you want to\ndelete the guest replay data?\n\n(Press 'Y' to confirm)\n"), FUNCPTRCAST(M_EraseGuest), MM_YESNO); return; } if (FIL_FileExists(va("%s"PATHSEP"media"PATHSEP"replay"PATHSEP"%s"PATHSEP"%s-guest.lmp", srb2home, timeattackfolder, G_BuildMapName(cv_nextmap.value)))) - M_StartMessage(M_GetText("Are you sure you want to\noverwrite the guest replay data?\n\n(Press 'Y' to confirm)\n"),which,MM_YESNO); + M_StartMessage(M_GetText("Are you sure you want to\noverwrite the guest replay data?\n\n(Press 'Y' to confirm)\n"), FUNCPTRCAST(which), MM_YESNO); else which(0); } @@ -8321,7 +8318,7 @@ static void M_EndGame(INT32 choice) if (!Playing()) return; - M_StartMessage(M_GetText("Are you sure you want to end the game?\n\n(Press 'Y' to confirm)\n"), M_ExitGameResponse, MM_YESNO); + M_StartMessage(M_GetText("Are you sure you want to end the game?\n\n(Press 'Y' to confirm)\n"), FUNCPTRCAST(M_ExitGameResponse), MM_YESNO); } //=========================================================================== @@ -8785,7 +8782,7 @@ static void M_ConnectMenuModChecks(INT32 choice) if (modifiedgame) { - M_StartMessage(M_GetText("You have addons loaded.\nYou won't be able to join netgames!\n\nTo play online, restart the game\nand don't load any addons.\nSRB2Kart will automatically add\neverything you need when you join.\n\n(Press a key)\n"),M_ConnectMenu,MM_EVENTHANDLER); + M_StartMessage(M_GetText("You have addons loaded.\nYou won't be able to join netgames!\n\nTo play online, restart the game\nand don't load any addons.\nSRB2Kart will automatically add\neverything you need when you join.\n\n(Press a key)\n"), FUNCPTRCAST(M_ConnectMenu), MM_EVENTHANDLER); return; } @@ -8896,7 +8893,7 @@ static void M_DrawLevelSelectOnly(boolean leftfade, boolean rightfade) x = BASEVIDWIDTH/2 - w/2; y = currentMenu->y + 130 + 8 - i; - if (currentMenu->menuitems[itemOn].itemaction == &cv_nextmap && skullAnimCounter < 4) + if (currentMenu->menuitems[itemOn].itemaction.cvar == &cv_nextmap && skullAnimCounter < 4) trans = 0; else trans = G_GetGametypeColor(cv_newgametype.value); @@ -10244,7 +10241,7 @@ static void M_EraseData(INT32 choice) else eschoice = M_GetText("ALL game data"); - M_StartMessage(va(esstr, eschoice),M_EraseDataResponse,MM_YESNO); + M_StartMessage(va(esstr, eschoice), FUNCPTRCAST(M_EraseDataResponse), MM_YESNO); } static void M_ScreenshotOptions(INT32 choice) @@ -10405,7 +10402,7 @@ static void M_Setup1PControlsMenu(INT32 choice) currentMenu->lastOn = itemOn; // Set proper gamepad options - OP_AllControlsMenu[0].itemaction = &OP_Joystick1Def; + OP_AllControlsMenu[0].itemaction.submenu = &OP_Joystick1Def; // Unhide P1-only controls OP_AllControlsMenu[16].status = IT_CONTROL; // Chat @@ -10437,7 +10434,7 @@ static void M_Setup2PControlsMenu(INT32 choice) currentMenu->lastOn = itemOn; // Set proper gamepad options - OP_AllControlsMenu[0].itemaction = &OP_Joystick2Def; + OP_AllControlsMenu[0].itemaction.submenu = &OP_Joystick2Def; // Hide P1-only controls OP_AllControlsMenu[16].status = IT_GRAYEDOUT2; // Chat @@ -10469,7 +10466,7 @@ static void M_Setup3PControlsMenu(INT32 choice) currentMenu->lastOn = itemOn; // Set proper gamepad options - OP_AllControlsMenu[0].itemaction = &OP_Joystick3Def; + OP_AllControlsMenu[0].itemaction.submenu = &OP_Joystick3Def; // Hide P1-only controls OP_AllControlsMenu[16].status = IT_GRAYEDOUT2; // Chat @@ -10501,7 +10498,7 @@ static void M_Setup4PControlsMenu(INT32 choice) currentMenu->lastOn = itemOn; // Set proper gamepad options - OP_AllControlsMenu[0].itemaction = &OP_Joystick4Def; + OP_AllControlsMenu[0].itemaction.submenu = &OP_Joystick4Def; // Hide P1-only controls OP_AllControlsMenu[16].status = IT_GRAYEDOUT2; // Chat @@ -10730,7 +10727,7 @@ static void M_ChangecontrolResponse(event_t *ev) sprintf(tmp, M_GetText("The \x82Pause Key \x80is enabled, but \nit is not configurable. \n\nHit another key for\n%s\nESC for Cancel"), controltochangetext); - M_StartMessage(tmp, M_ChangecontrolResponse, MM_EVENTHANDLER); + M_StartMessage(tmp, FUNCPTRCAST(M_ChangecontrolResponse), MM_EVENTHANDLER); currentMenu->prevMenu = prev; S_StartSound(NULL, sfx_s3k42); @@ -10753,7 +10750,7 @@ static void M_ChangeControl(INT32 choice) currentMenu->menuitems[choice].text); strlcpy(controltochangetext, currentMenu->menuitems[choice].text, 33); - M_StartMessage(tmp, M_ChangecontrolResponse, MM_EVENTHANDLER); + M_StartMessage(tmp, FUNCPTRCAST(M_ChangecontrolResponse), MM_EVENTHANDLER); } static void M_ResetControlsResponse(INT32 ch) @@ -10789,7 +10786,7 @@ static void M_ResetControlsResponse(INT32 ch) static void M_ResetControls(INT32 choice) { (void)choice; - M_StartMessage(va(M_GetText("Reset Player %d's controls to defaults?\n\n(Press 'Y' to confirm)\n"), setupcontrolplayer), M_ResetControlsResponse, MM_YESNO); + M_StartMessage(va(M_GetText("Reset Player %d's controls to defaults?\n\n(Press 'Y' to confirm)\n"), setupcontrolplayer), FUNCPTRCAST(M_ResetControlsResponse), MM_YESNO); } // ===== @@ -10813,7 +10810,8 @@ static modedesc_t modedescs[MAXMODEDESCS]; static void M_VideoModeMenu(INT32 choice) { - INT32 i, j, vdup, nummodes, width, height; + INT32 i, j, vdup, nummodes; + UINT32 width, height; const char *desc; (void)choice; @@ -11417,7 +11415,7 @@ static void M_QuitSRB2(INT32 choice) // We pick index 0 which is language sensitive, or one at random, // between 1 and maximum number. (void)choice; - M_StartMessage(quitmsg[M_RandomKey(NUM_QUITMESSAGES)], M_QuitResponse, MM_YESNO); + M_StartMessage(quitmsg[M_RandomKey(NUM_QUITMESSAGES)], FUNCPTRCAST(M_QuitResponse), MM_YESNO); } #ifdef HAVE_DISCORDRPC diff --git a/src/m_menu.h b/src/m_menu.h index 3c2d7fb47..3f3d2e6cb 100644 --- a/src/m_menu.h +++ b/src/m_menu.h @@ -315,6 +315,7 @@ typedef union struct menu_s *submenu; // IT_SUBMENU consvar_t *cvar; // IT_CVAR void (*routine)(INT32 choice); // IT_CALL, IT_KEYHANDLER, IT_ARROWS + void (*eventhandler)(event_t *ev); // MM_EVENTHANDLER } itemaction_t; // @@ -329,7 +330,7 @@ typedef struct menuitem_s const char *text; // used when FONTBxx lump is found // FIXME: should be itemaction_t - void *itemaction; + itemaction_t itemaction; // hotkey in menu or y of the item UINT16 alphaKey; From bdbd85b2cd3a583eab168cd688c1b8ca0fb0ef34 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 20 Feb 2022 04:48:30 -0800 Subject: [PATCH 14/15] pedantic: fix win32 --- src/i_addrinfo.c | 4 ++-- src/m_misc.c | 9 ++++++++- src/sdl/i_system.c | 5 +++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/i_addrinfo.c b/src/i_addrinfo.c index e77774549..36633cfa3 100644 --- a/src/i_addrinfo.c +++ b/src/i_addrinfo.c @@ -80,10 +80,10 @@ static HMODULE WS_getfunctions(HMODULE tmp) { if (tmp != NULL) { - WS_getaddrinfo = (p_getaddrinfo)(LPVOID)GetProcAddress(tmp, "getaddrinfo"); + *(void**)&WS_getaddrinfo = FUNCPTRCAST(GetProcAddress(tmp, "getaddrinfo")); if (WS_getaddrinfo == NULL) return NULL; - WS_freeaddrinfo = (p_freeaddrinfo)(LPVOID)GetProcAddress(tmp, "freeaddrinfo"); + *(void**)&WS_freeaddrinfo = FUNCPTRCAST(GetProcAddress(tmp, "freeaddrinfo")); if (WS_freeaddrinfo == NULL) { WS_getaddrinfo = NULL; diff --git a/src/m_misc.c b/src/m_misc.c index ccd4522a0..cf5053078 100644 --- a/src/m_misc.c +++ b/src/m_misc.c @@ -63,7 +63,14 @@ typedef off_t off64_t; #if defined(__MINGW32__) && ((__GNUC__ > 7) || (__GNUC__ == 6 && __GNUC_MINOR__ >= 3)) && (__GNUC__ < 8) #define PRIdS "u" #elif defined (_WIN32) -#define PRIdS "Iu" +// pedantic: %I is nonstandard, is it ok to assume +// unsigned int? +//#define PRIdS "Iu" +#ifdef _WIN64 +#define PRIdS "lu" +#else +#define PRIdS "u" +#endif #elif defined (DJGPP) #define PRIdS "u" #else diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c index 004a6ff33..feb58d2e9 100644 --- a/src/sdl/i_system.c +++ b/src/sdl/i_system.c @@ -2120,7 +2120,7 @@ void I_GetDiskFreeSpace(INT64 *freespace) if (!testwin95) { - pfnGetDiskFreeSpaceEx = (p_GetDiskFreeSpaceExA)(LPVOID)GetProcAddress(GetModuleHandleA("kernel32.dll"), "GetDiskFreeSpaceExA"); + *(void**)&pfnGetDiskFreeSpaceEx = FUNCPTRCAST(GetProcAddress(GetModuleHandleA("kernel32.dll"), "GetDiskFreeSpaceExA")); testwin95 = true; } if (pfnGetDiskFreeSpaceEx) @@ -2628,7 +2628,8 @@ const CPUInfoFlags *I_CPUInfo(void) #if defined (_WIN32) static CPUInfoFlags WIN_CPUInfo; SYSTEM_INFO SI; - p_IsProcessorFeaturePresent pfnCPUID = (p_IsProcessorFeaturePresent)(LPVOID)GetProcAddress(GetModuleHandleA("kernel32.dll"), "IsProcessorFeaturePresent"); + p_IsProcessorFeaturePresent pfnCPUID; + *(void**)&pfnCPUID = FUNCPTRCAST(GetProcAddress(GetModuleHandleA("kernel32.dll"), "IsProcessorFeaturePresent")); ZeroMemory(&WIN_CPUInfo,sizeof (WIN_CPUInfo)); if (pfnCPUID) From 54b55efcb23d3df707df638cb73d14e8561c8079 Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 28 Feb 2022 14:12:59 -0800 Subject: [PATCH 15/15] Remove fixme --- src/m_menu.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/m_menu.h b/src/m_menu.h index 3f3d2e6cb..be199b142 100644 --- a/src/m_menu.h +++ b/src/m_menu.h @@ -329,7 +329,6 @@ typedef struct menuitem_s const char *patch; const char *text; // used when FONTBxx lump is found -// FIXME: should be itemaction_t itemaction_t itemaction; // hotkey in menu or y of the item