From c18c245fe20ce47ae6e08cc5e1d29fab5080cfb7 Mon Sep 17 00:00:00 2001 From: Knightmare66 Date: Sun, 11 Apr 2021 21:07:08 -0400 Subject: [PATCH] Renamed qcommon/files.c to qcommon/filesystem.c. Added qcommon/filesystem.h for filesystem structs/prototypes. Added update version to console (e.g. KMQuake2 v0.20u8). --- Makefile | 8 +- client/cl_console.c | 4 +- missionpack/g_items.c | 4 +- missionpack/p_client.c | 36 +++++++- projects/VC6/kmquake2.dsp | 6 +- projects/VS2005/kmquake2_2005.vcproj | 6 +- projects/VS2008/kmquake2_2008.vcproj | 10 ++- qcommon/{files.c => filesystem.c} | 112 ++----------------------- qcommon/filesystem.h | 121 +++++++++++++++++++++++++++ qcommon/qcommon.h | 3 +- 10 files changed, 188 insertions(+), 122 deletions(-) rename qcommon/{files.c => filesystem.c} (96%) create mode 100644 qcommon/filesystem.h diff --git a/Makefile b/Makefile index 2c475cc..e21bd7d 100644 --- a/Makefile +++ b/Makefile @@ -242,7 +242,7 @@ QUAKE2_OBJS = \ $(BUILDDIR)/client/common.o \ $(BUILDDIR)/client/crc.o \ $(BUILDDIR)/client/cvar.o \ - $(BUILDDIR)/client/files.o \ + $(BUILDDIR)/client/filesystem.o \ $(BUILDDIR)/client/md4.o \ $(BUILDDIR)/client/net_chan.o \ $(BUILDDIR)/client/wildcard.o \ @@ -487,7 +487,7 @@ $(BUILDDIR)/client/crc.o : $(COMMON_DIR)/crc.c $(BUILDDIR)/client/cvar.o : $(COMMON_DIR)/cvar.c $(DO_CC) -$(BUILDDIR)/client/files.o : $(COMMON_DIR)/files.c +$(BUILDDIR)/client/filesystem.o : $(COMMON_DIR)/filesystem.c $(DO_CC) $(BUILDDIR)/client/md4.o : $(COMMON_DIR)/md4.c @@ -657,7 +657,7 @@ Q2DED_OBJS = \ $(BUILDDIR)/ded/common.o \ $(BUILDDIR)/ded/crc.o \ $(BUILDDIR)/ded/cvar.o \ - $(BUILDDIR)/ded/files.o \ + $(BUILDDIR)/ded/filesystem.o \ $(BUILDDIR)/ded/md4.o \ $(BUILDDIR)/ded/net_chan.o \ $(BUILDDIR)/ded/wildcard.o \ @@ -702,7 +702,7 @@ $(BUILDDIR)/ded/crc.o : $(COMMON_DIR)/crc.c $(BUILDDIR)/ded/cvar.o : $(COMMON_DIR)/cvar.c $(DO_DED_CC) -$(BUILDDIR)/ded/files.o : $(COMMON_DIR)/files.c +$(BUILDDIR)/ded/filesystem.o : $(COMMON_DIR)/filesystem.c $(DO_DED_CC) $(BUILDDIR)/ded/md4.o : $(COMMON_DIR)/md4.c diff --git a/client/cl_console.c b/client/cl_console.c index 886aa21..ce3fdba 100644 --- a/client/cl_console.c +++ b/client/cl_console.c @@ -954,9 +954,9 @@ void Con_DrawConsole (float frac, qboolean trans) // changed to "KMQuake2 vx.xx" #ifdef ERASER_COMPAT_BUILD - Com_sprintf (version, sizeof(version), S_COLOR_BOLD S_COLOR_SHADOW S_COLOR_ALT"KMQuake2 v%4.2f (Eraser compatible)", VERSION); + Com_sprintf (version, sizeof(version), S_COLOR_BOLD S_COLOR_SHADOW S_COLOR_ALT"KMQuake2 v%4.2fu%d (Eraser compatible)", VERSION, VERSION_UPDATE); #else // ERASER_COMPAT_BUILD - Com_sprintf (version, sizeof(version), S_COLOR_BOLD S_COLOR_SHADOW S_COLOR_ALT"KMQuake2 v%4.2f", VERSION); + Com_sprintf (version, sizeof(version), S_COLOR_BOLD S_COLOR_SHADOW S_COLOR_ALT"KMQuake2 v%4.2fu%d", VERSION, VERSION_UPDATE); #endif // NEW_ENTITY_STATE_MEMBERS Con_DrawString ((int)(conLeft+conWidth)-FONT_SIZE*(stringLen((const char *)&version))-3, y-(int)(1.25*FONT_SIZE), version, FONT_CONSOLE, 255); diff --git a/missionpack/g_items.c b/missionpack/g_items.c index 03658a9..23538dc 100644 --- a/missionpack/g_items.c +++ b/missionpack/g_items.c @@ -324,7 +324,7 @@ qboolean Pickup_Powerup (edict_t *ent, edict_t *other) if ((coop->value) && (ent->item->flags & IT_STAY_COOP) && (quantity > 0)) return false; - //Can only pickup one flashlight + // Can only pickup one flashlight if (!strcmp(ent->classname, "item_flashlight") && quantity >= 1) return false; @@ -352,7 +352,7 @@ qboolean Pickup_Powerup (edict_t *ent, edict_t *other) other->client->pers.inventory[ITEM_INDEX(ent->item)]++; - //Knightmare- set cell usage for flashlight + // Knightmare- set cell usage for flashlight if (!strcmp(ent->classname, "item_flashlight")) { if (ent->count) diff --git a/missionpack/p_client.c b/missionpack/p_client.c index 17c633e..9c719f8 100644 --- a/missionpack/p_client.c +++ b/missionpack/p_client.c @@ -1145,7 +1145,7 @@ void TossClientWeapon (edict_t *self) { gitem_t *item; edict_t *drop; - qboolean quad; + qboolean quad, doubled, quadfire; float spread; if (!deathmatch->value) @@ -1162,10 +1162,16 @@ void TossClientWeapon (edict_t *self) if (item && (strcmp (item->pickup_name, "Homing Rocket Launcher") == 0)) item = FindItem("Rocket Launcher"); - if (!((int)(dmflags->value) & DF_QUAD_DROP)) + if (!((int)(dmflags->value) & DF_QUAD_DROP)) { quad = false; - else + doubled = false; + quadfire = false; + } + else { quad = (self->client->quad_framenum > (level.framenum + 10)); + doubled = (self->client->double_framenum > (level.framenum + 10)); + quadfire = (self->client->quadfire_framenum > (level.framenum + 10)); + } if (item && quad) spread = 22.5; @@ -1191,6 +1197,30 @@ void TossClientWeapon (edict_t *self) drop->nextthink = level.time + (self->client->quad_framenum - level.framenum) * FRAMETIME; drop->think = G_FreeEdict; } + + if (doubled) + { + self->client->v_angle[YAW] += spread; + drop = Drop_Item (self, FindItemByClassname ("item_double")); + self->client->v_angle[YAW] -= spread; + drop->spawnflags |= DROPPED_PLAYER_ITEM; + + drop->touch = Touch_Item; + drop->nextthink = level.time + (self->client->double_framenum - level.framenum) * FRAMETIME; + drop->think = G_FreeEdict; + } + + if (quadfire) + { + self->client->v_angle[YAW] += spread; + drop = Drop_Item (self, FindItemByClassname ("item_quadfire")); + self->client->v_angle[YAW] -= spread; + drop->spawnflags |= DROPPED_PLAYER_ITEM; + + drop->touch = Touch_Item; + drop->nextthink = level.time + (self->client->quadfire_framenum - level.framenum) * FRAMETIME; + drop->think = G_FreeEdict; + } } diff --git a/projects/VC6/kmquake2.dsp b/projects/VC6/kmquake2.dsp index 37c72b9..c997fb3 100644 --- a/projects/VC6/kmquake2.dsp +++ b/projects/VC6/kmquake2.dsp @@ -245,7 +245,7 @@ SOURCE=..\..\qcommon\cvar.c # End Source File # Begin Source File -SOURCE=..\..\qcommon\files.c +SOURCE=..\..\qcommon\filesystem.c # End Source File # Begin Source File @@ -586,6 +586,10 @@ SOURCE=..\..\client\console.h # End Source File # Begin Source File +SOURCE=..\..\qcommon\filesystem.h +# End Source File +# Begin Source File + SOURCE=..\..\game\game.h # End Source File # Begin Source File diff --git a/projects/VS2005/kmquake2_2005.vcproj b/projects/VS2005/kmquake2_2005.vcproj index 4bd1a13..1f20e33 100644 --- a/projects/VS2005/kmquake2_2005.vcproj +++ b/projects/VS2005/kmquake2_2005.vcproj @@ -372,7 +372,7 @@ > + + diff --git a/projects/VS2008/kmquake2_2008.vcproj b/projects/VS2008/kmquake2_2008.vcproj index d818796..75061c6 100644 --- a/projects/VS2008/kmquake2_2008.vcproj +++ b/projects/VS2008/kmquake2_2008.vcproj @@ -580,7 +580,7 @@ > + + diff --git a/qcommon/files.c b/qcommon/filesystem.c similarity index 96% rename from qcommon/files.c rename to qcommon/filesystem.c index 73fe3b4..07fa5f1 100644 --- a/qcommon/files.c +++ b/qcommon/filesystem.c @@ -20,14 +20,10 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA =========================================================================== */ +// filesystem.c -- game filesystem and PAK/PK3 file loading + #include "qcommon.h" -#if defined (_MSC_VER) && (_MSC_VER <= 1200) // use older version of zlib for MSVC6 -#include "../include/zlibpng_vc6/unzip.h" -#include "../include/zlibpng_vc6/zip.h" -#else -#include "../include/zlibpng/unzip.h" -#include "../include/zlibpng/zip.h" -#endif +#include "filesystem.h" #ifdef _WIN32 #include "../win32/winquake.h" @@ -36,7 +32,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // enables faster binary pak searck, still experimental #define BINARY_PACK_SEARCH - #pragma warning (disable : 4715) /* @@ -67,108 +62,17 @@ executing. This is a precacution against having a malicious server instruct clients to write files over areas they shouldn't. */ -#define BASEDIRNAME "baseq2" - -#define MAX_HANDLES 32 -#define MAX_READ 0x10000 -#define MAX_WRITE 0x10000 -#define MAX_FIND_FILES 0x04000 - -#define USE_SAVEGAMEDIR // whether to use new fs_savegamedir/fs_downloaddir paths - -// -// in memory -// - -// -// Berserk's pk3 file support -// - -typedef struct { - char name[MAX_QPATH]; - unsigned int hash; // To speed up searching - int size; - int offset; // This is ignored in PK3 files - qboolean ignore; // Whether this file should be ignored -} fsPackFile_t; - -typedef struct { - char name[MAX_QPATH]; - fsMode_t mode; - FILE *file; // Only one of file or - unzFile *zip; // zip will be used - zipFile *writeZip; // Only used for writing to zip file - fsPackFile_t *pakFile; // Only used for seek/tell in .pak files -} fsHandle_t; - -typedef struct fsLink_s { - char *from; - int length; - char *to; - struct fsLink_s *next; -} fsLink_t; - - -typedef struct { - char name[MAX_OSPATH]; - FILE *pak; - unzFile *pk3; - int numFiles; - fsPackFile_t *files; - unsigned int contentFlags; - qboolean isProtectedPak; // from Yamagi Q2 -} fsPack_t; - -typedef struct fsSearchPath_s { - char path[MAX_OSPATH]; // Only one of path or - fsPack_t *pack; // pack will be used - struct fsSearchPath_s *next; -} fsSearchPath_t; - -fsHandle_t fs_handles[MAX_HANDLES]; -fsLink_t *fs_links; -fsSearchPath_t *fs_searchPaths; -fsSearchPath_t *fs_baseSearchPaths; - -char fs_gamedir[MAX_OSPATH]; -char fs_savegamedir[MAX_OSPATH]; -char fs_downloaddir[MAX_OSPATH]; -static char fs_currentGame[MAX_QPATH]; - -static char fs_fileInPath[MAX_OSPATH]; -static qboolean fs_fileInPack; - -int file_from_protected_pak; // This is set by FS_FOpenFile, from Yamagi Q2 -int file_from_pak = 0; // This is set by FS_FOpenFile -int file_from_pk3 = 0; // This is set by FS_FOpenFile -char last_pk3_name[MAX_QPATH]; // This is set by FS_FOpenFile - -cvar_t *fs_homepath; -cvar_t *fs_basedir; -cvar_t *fs_cddir; -cvar_t *fs_basegamedir; -cvar_t *fs_basegamedir2; -cvar_t *fs_basegamedir3; // So we can mount Rogue, Xatrix, and Zaero assets at once -cvar_t *fs_gamedirvar; -cvar_t *fs_debug; -cvar_t *fs_roguegame; - -#ifdef _WIN32 -cvar_t *win_use_profile_dir; // whether to use user profile dir for savegames, configs, screenshots, etc -#endif - void CDAudio_Stop (void); void Com_FileExtension (const char *path, char *dst, int dstSize); - /* ================= -Com_FilePath +FS_FilePath Returns the path up to, but not including the last / ================= */ -void Com_FilePath (const char *path, char *dst, int dstSize) +void FS_FilePath (const char *path, char *dst, int dstSize) { const char *s, *last; @@ -433,8 +337,6 @@ FS_FileForHandle Returns a FILE * for a fileHandle_t ================= */ -fsHandle_t *FS_GetFileByHandle (fileHandle_t f); - FILE *FS_FileForHandle (fileHandle_t f) { fsHandle_t *handle; @@ -678,7 +580,7 @@ int FS_FOpenFileRead (fsHandle_t *handle) if (!Q_stricmp(pack->files[i].name, handle->name)) { // Found it! - Com_FilePath(pack->name, fs_fileInPath, sizeof(fs_fileInPath)); + FS_FilePath (pack->name, fs_fileInPath, sizeof(fs_fileInPath)); fs_fileInPack = true; // if (fs_debug->value) @@ -1320,7 +1222,7 @@ char **FS_FindFiles (const char *path, const char *extension, int *num) continue; // check path - COM_FilePath (pak->files[i].name, dir, sizeof(dir)); + FS_FilePath (pak->files[i].name, dir, sizeof(dir)); if ( Q_stricmp((char *)path, dir) ) continue; diff --git a/qcommon/filesystem.h b/qcommon/filesystem.h new file mode 100644 index 0000000..d34a3cf --- /dev/null +++ b/qcommon/filesystem.h @@ -0,0 +1,121 @@ +/* +=========================================================================== +Copyright (C) 1997-2001 Id Software, Inc. + +This file is part of Quake 2 source code. + +Quake 2 source code is free software; you can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation; either version 2 of the License, +or (at your option) any later version. + +Quake 2 source code is distributed in the hope that it will be +useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Quake 2 source code; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +=========================================================================== +*/ + +#if defined (_MSC_VER) && (_MSC_VER <= 1200) // use older version of zlib for MSVC6 +#include "../include/zlibpng_vc6/unzip.h" +#include "../include/zlibpng_vc6/zip.h" +#else +#include "../include/zlibpng/unzip.h" +#include "../include/zlibpng/zip.h" +#endif + +#define BASEDIRNAME "baseq2" + +#define MAX_HANDLES 32 +#define MAX_READ 0x10000 +#define MAX_WRITE 0x10000 +#define MAX_FIND_FILES 0x04000 + +#define USE_SAVEGAMEDIR // whether to use new fs_savegamedir/fs_downloaddir paths + +// +// in memory +// + +// +// Berserk's pk3 file support +// + +typedef struct { + char name[MAX_QPATH]; + unsigned int hash; // To speed up searching + int size; + int offset; // This is ignored in PK3 files + qboolean ignore; // Whether this file should be ignored +} fsPackFile_t; + +typedef struct { + char name[MAX_QPATH]; + fsMode_t mode; + FILE *file; // Only one of file or + unzFile *zip; // zip will be used + zipFile *writeZip; // Only used for writing to zip file + fsPackFile_t *pakFile; // Only used for seek/tell in .pak files +} fsHandle_t; + +typedef struct fsLink_s { + char *from; + int length; + char *to; + struct fsLink_s *next; +} fsLink_t; + + +typedef struct { + char name[MAX_OSPATH]; + FILE *pak; + unzFile *pk3; + int numFiles; + fsPackFile_t *files; + unsigned int contentFlags; + qboolean isProtectedPak; // from Yamagi Q2 +} fsPack_t; + +typedef struct fsSearchPath_s { + char path[MAX_OSPATH]; // Only one of path or + fsPack_t *pack; // pack will be used + struct fsSearchPath_s *next; +} fsSearchPath_t; + +fsHandle_t fs_handles[MAX_HANDLES]; +fsLink_t *fs_links; +fsSearchPath_t *fs_searchPaths; +fsSearchPath_t *fs_baseSearchPaths; + +char fs_gamedir[MAX_OSPATH]; +char fs_savegamedir[MAX_OSPATH]; +char fs_downloaddir[MAX_OSPATH]; +static char fs_currentGame[MAX_QPATH]; + +static char fs_fileInPath[MAX_OSPATH]; +static qboolean fs_fileInPack; + +int file_from_protected_pak; // This is set by FS_FOpenFile, from Yamagi Q2 +int file_from_pak = 0; // This is set by FS_FOpenFile +int file_from_pk3 = 0; // This is set by FS_FOpenFile +char last_pk3_name[MAX_QPATH]; // This is set by FS_FOpenFile + +cvar_t *fs_homepath; +cvar_t *fs_basedir; +cvar_t *fs_cddir; +cvar_t *fs_basegamedir; +cvar_t *fs_basegamedir2; +cvar_t *fs_basegamedir3; // So we can mount Rogue, Xatrix, and Zaero assets at once +cvar_t *fs_gamedirvar; +cvar_t *fs_debug; +cvar_t *fs_roguegame; + +#ifdef _WIN32 +cvar_t *win_use_profile_dir; // whether to use user profile dir for savegames, configs, screenshots, etc +#endif + +fsHandle_t *FS_GetFileByHandle (fileHandle_t f); diff --git a/qcommon/qcommon.h b/qcommon/qcommon.h index f392d90..3774f07 100644 --- a/qcommon/qcommon.h +++ b/qcommon/qcommon.h @@ -26,7 +26,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "../game/q_shared.h" -#define VERSION 0.20 // was 3.21 +#define VERSION 0.20 // was 3.21 +#define VERSION_UPDATE 8 #define BASEDIRNAME "baseq2"