mirror of
https://github.com/Shpoike/Quakespasm.git
synced 2024-11-10 07:21:58 +00:00
Merge branch 'master' of https://git.code.sf.net/p/quakespasm/quakespasm into HEAD
This commit is contained in:
commit
9119c1d546
58 changed files with 777 additions and 566 deletions
|
@ -2,14 +2,13 @@
|
|||
<article>
|
||||
<title>QuakeSpasm
|
||||
<toc>
|
||||
<verb></verb>
|
||||
|
||||
<em>Page last edited: August 2021</em>
|
||||
|
||||
<sect> About <p>
|
||||
|
||||
<url url="http://quakespasm.sourceforge.net" name="QuakeSpasm">
|
||||
is a modern, cross-platform Quake 1 engine based on <url url="http://www.celephais.net/fitzquake" name="FitzQuake">.
|
||||
is a modern, cross-platform Quake engine based on <url url="http://www.celephais.net/fitzquake" name="FitzQuake">.
|
||||
</p><p>
|
||||
It includes support for 64 bit CPUs and custom music playback, a new
|
||||
sound driver, some graphical niceities, and numerous bug-fixes and other improvements.
|
||||
|
@ -22,30 +21,26 @@ SDL is probably less buggy, but SDL2 has nicer features and smoother mouse input
|
|||
<itemize>
|
||||
<item><url url="http://quakespasm.sourceforge.net/download.htm" name="Project Downloads">
|
||||
<item><url url="https://sourceforge.net/p/quakespasm/quakespasm/ci/master/tree/" name="Latest code repository">
|
||||
<item><url url="http://quakespasm.ericwa.com/job/quakespasm-sdl2/" name="Automatic Builds (dead link)">
|
||||
</itemize>
|
||||
|
||||
|
||||
<sect> Hints <p>
|
||||
|
||||
<em>Visit the <url url="http://www.celephais.net/fitzquake" name="FitzQuake homepage"> for a full run-down of the engine's commands and variables.</em>
|
||||
|
||||
<itemize>
|
||||
<item>To disable some changes, use "<bf>quakespasm -fitz</bf>"
|
||||
|
||||
<item>Quakespasm's custom data is stored in "quakespasm.pak". Install this file alongside your id1 directory to enable the custom console background and other minor features.
|
||||
|
||||
<item>For different sound backend drivers use "<bf>SDL_AUDIODRIVER=</bf><em>DRIVER</em><bf> ./quakespasm</bf>"
|
||||
, where DRIVER may be alsa, dsp, pulse, esd ...
|
||||
|
||||
<item>For different sound backend drivers use :<newline>
|
||||
"<bf>SDL_AUDIODRIVER=</bf><em>DRIVER</em><bf> ./quakespasm</bf>"<newline>
|
||||
where DRIVER may be alsa, dsp, pulse, esd ...
|
||||
<item><bf>Shift+Escape</bf> draws the Console.
|
||||
<item>From the console, use <bf>UP</bf> to browse the command line history and
|
||||
<bf>TAB</bf> to autocomplete command and map names.
|
||||
<item>There is currently no CD Music volume support and SDL2 doesn't support CD audio. cd_sdl.c needs replacing with cd_linux.c, cd_bsd.c etc..
|
||||
<item>In windows, alternative CD drives are accessible by "<bf>quakespasm -cddev F</bf>" (for example)
|
||||
|
||||
<item>Quakespasm allows loading new games (mods) on the fly with "<bf>game</bf> <em>GAMENAME {-quoth/hipnotic/rogue}</em>"
|
||||
|
||||
<item>In windows, alternative CD drives are accessible by<newline>
|
||||
"<bf>quakespasm -cddev F</bf>" (for example)
|
||||
<item>Quakespasm allows loading new games (mods) on the fly with<newline>
|
||||
"<bf>game</bf> <em>GAMENAME {-quoth/hipnotic/rogue}</em>"
|
||||
<item>Use "<bf>quakespasm -condebug</bf>" to save console log to "qconsole.log". SDL2 builds no longer generate stdout.txt/stderr.txt.
|
||||
</itemize>
|
||||
</p>
|
||||
|
@ -103,10 +98,12 @@ These buttons can be bound normally:
|
|||
<item>XBUTTON
|
||||
<item>YBUTTON
|
||||
</itemize>
|
||||
|
||||
quakespasm.pak contains a default.cfg which has been updated to give some default bindings. L/R shoulder buttons are bound to weapon switching, and L/R triggers are jump and attack.
|
||||
<p>
|
||||
The controller support started as Jeremiah Sypult's implementation in Quakespasm-Rift and also uses ideas and code from LordHavoc (DarkPlaces).
|
||||
|
||||
|
||||
<sect> Compiling and Installation<p>
|
||||
<p>See the Downloads section to get the sourcecode, then below for platform specific instructions.
|
||||
Quakespasm can also be built with the cross-platform Codeblocks.
|
||||
|
@ -122,12 +119,12 @@ Compile time options include
|
|||
<itemize>
|
||||
<item><bf>make DO_USERDIRS=1</bf> to include user directories support
|
||||
<item><bf>make DEBUG=1</bf> for debugging
|
||||
<item><bf>make SDL_CONFIG=</bf><em>/PATH/TO/SDL-CONFIG</em> for unusual SDL installations
|
||||
<item><bf>make SDL_CONFIG=</bf><em>/PATH/TO/sdl-config</em> for unusual SDL installations
|
||||
<item><bf>make USE_SDL2=1</bf> to compile against SDL2 instead of SDL-1.2
|
||||
</itemize>
|
||||
|
||||
<sect1> Windows <p>
|
||||
The QuakeSpasm developers cross-compile windows binaries using <url url="http://www.mingw.org" name="MinGW"> and <url url="http://mingw-w64.sf.net" name="Mingw-w64">.
|
||||
The QuakeSpasm developers cross-compile windows binaries using <url url="http://www.mingw.org" name="MinGW"> and <url url="http://mingw-w64.sf.net" name="MinGW-w64">.
|
||||
|
||||
The project can also be built using Visual Studio 2005 (or newer).</p>
|
||||
|
||||
|
@ -137,29 +134,31 @@ A Quakespasm App (including program launcher and update framework) can be made u
|
|||
Alternatively, have a look at <bf>Makefile.darwin</bf> for more instructions on building from a console.
|
||||
</p>
|
||||
|
||||
<sect> Known Bugs <p>
|
||||
Brightness issues should be fixed with GLSL gamma in 0.90.1, if your system supports OpenGL 2. For reference on older systems:
|
||||
<newline>
|
||||
Some versions of Xorg and SDL have brightness issues.
|
||||
<newline>
|
||||
Try setting "export SDL_VIDEO_X11_NODIRECTCOLOR=1", or if you have Xorg >= 7.5 and broken brightness,
|
||||
these patched libSDL binaries may help.
|
||||
|
||||
<sect> Quake '2021 re-release' <p>
|
||||
QuakeSpasm 0.94.0 has initial support for playing the 2021 re-release content:
|
||||
<itemize>
|
||||
<item><url url="http://sf.net/projects/quakespasm/files/Support%20Files/libSDL_gamma_patched.tgz/download"
|
||||
name="Gamma patched libSDL (i686-linux)"></li>
|
||||
<item><url url="http://sf.net/projects/quakespasm/files/Support%20Files/libSDL_gamma_patched-AMD64.tgz/download"
|
||||
name="Gamma patched libSDL (x86_64-linux)">
|
||||
<item> Copy the quakespasm exe to your rerelease installation.
|
||||
<item> Extract the localization folder from QuakeEX.kpf (which is actually a zip file), and place it in the rerelease directory. Linux (Unix) users can do the following, for example:<newline>
|
||||
<verb>unzip QuakeEX.kpf localization/loc_english.txt</verb>
|
||||
<item> Run quakespasm as you normally do.
|
||||
</itemize>
|
||||
|
||||
|
||||
<sect> Changes<p>
|
||||
|
||||
<sect1> Changes in 0.93.3<p>
|
||||
<sect1> Changes in 0.94.0<p>
|
||||
<itemize>
|
||||
<item> Initial support for playing the 'Quake 2021 re-release' content (thanks to Andrei Drexler for bulk of the work.)
|
||||
<item> Fix rendering bug when cl_bobcycle was set to zero (sf.net bug/41)
|
||||
<item> Fixed buffer overflow with large char skybox names (sf.net bug/38)
|
||||
<item> Fixed a missing MAXALIASFRAMES bounds check (sf.net bug/37)
|
||||
<item> OpenGL: workaround Intel UHD 600 driver bug (sf.net bug/39)
|
||||
<item> OpenGL: merged surface mark & cull optimizations from vkQuake.
|
||||
<item> Changed 'model has a skin taller than 480' error into a warning
|
||||
<item> Reject lit files if they're the wrong size (eg hipnotic/start.bsp vs id1/start.lit or just a bsp that no longer has any coloured lits, etc)
|
||||
<item> External ent files are now versioned using 4 digit crc of the original map's ents, like e1m1@c49d.ent, which is much safer. The old method (e.g. e1m1.ent) still works but isn't recommended.
|
||||
<item> Support for external vis files.
|
||||
<item> Save: remove CR/LFs from level name to avoids broken saves, e.g. with autumn_sp map.
|
||||
<item> Music: improvements to mp3 tag detection / skipping.
|
||||
<item> Music: umx loader fix for malformed / crafted files.
|
||||
|
@ -174,7 +173,7 @@ these patched libSDL binaries may help.
|
|||
<item> Lightmaps are now dynamically allocated (from QSS), and BLOCK_WIDTH/HEIGHT raised from 128 to 256.
|
||||
<item> Fixed several uncheked limits that would crash the Slayer's Testaments mod (sf.net bug #33).
|
||||
<item> Raised MAXALIASTRIS from 2048 to 4096, so that the Slayer's Testaments mod works.
|
||||
<item> Fixed 'pants' and 'shirt' types so that those textures load correctly on platforms where char is unsigned by default (sf.net bug #28).
|
||||
<item> Fixed 'pants' and 'shirt' types so that those textures load correctly on platforms where char type is unsigned by default (sf.net bug #28).
|
||||
<item> Windows audio: WASAPI-enabled SDL2 dlls function properly now.
|
||||
<item> Update the third-party libraries. Other fixes/cleanups.
|
||||
</itemize>
|
||||
|
@ -210,11 +209,11 @@ these patched libSDL binaries may help.
|
|||
<item> Change default screenshot format to png. The 'screenshot' command now supports optional format (tga, png or jpg) and quality (1-100) arguments.
|
||||
<item> Revert "always run" changes from 0.85.9 and move the QuakeSpasm customizations to a new "cl_alwaysrun" cvar: Set to 1 in order to scale forward/side/up speed by "cl_movespeedkey" (usually 2), and to make "speedkey" act as "slowkey".
|
||||
<item> Change the "always run" menu option to offer three choices:
|
||||
<itemize>
|
||||
<item> off (cl_alwaysrun 0, cl_forwardspeed 200, cl_backspeed 200)
|
||||
<item> vanilla (cl_alwaysrun 0, cl_forwardspeed 400, cl_backspeed 400)
|
||||
<item> quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
|
||||
</itemize>
|
||||
<verb>
|
||||
off (cl_alwaysrun 0, cl_forwardspeed 200, cl_backspeed 200)
|
||||
vanilla (cl_alwaysrun 0, cl_forwardspeed 400, cl_backspeed 400)
|
||||
quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
|
||||
</verb>
|
||||
<item> New "r_scale" cvar. Set to 2, 3, or 4 to render the view at 1/2, 1/3, or 1/4 resolution.
|
||||
<item> New "r_viewmodel_quake" cvar. Set to 1 for WinQuake gun position (from MarkV).
|
||||
<item> New "find" / "apropos" command, searches for commands/cvar names for the given substring (from Spike).
|
||||
|
@ -348,7 +347,8 @@ these patched libSDL binaries may help.
|
|||
<sect1> Changes in 0.90.0<p>
|
||||
<itemize>
|
||||
<item> Fix issues on Windows systems with DPI scaling.</item>
|
||||
<item> Unix/Mac user directories support. Disabled by default, 'make DO_USERDIRS=1' to enable it.
|
||||
<item> Unix/Mac user directories support. Disabled by default,<newline>
|
||||
'make DO_USERDIRS=1' to enable it.
|
||||
<item> SDL2 support. Disabled by default, 'make USE_SDL2=1' to enable it.
|
||||
<item> Revised keyboard input code.
|
||||
<item> Revised/improved the 'game' command, i.e. on-the-fly mod changing. It now accepts an optional second argument for mission packs or quoth support i.e. -hipnotic, -rogue, or -quoth. For example, for WarpSpasm: "game warp -quoth"
|
||||
|
@ -546,12 +546,6 @@ these patched libSDL binaries may help.
|
|||
</itemize>
|
||||
|
||||
|
||||
<sect> Todo <p>
|
||||
<itemize>
|
||||
<item>Add uHexen2's first person camera (and menu item)
|
||||
<item>Native CD audio support (if desired). cd_sdl.c doesn't have proper volume controls and SDL2 doesn't support CD audio
|
||||
</itemize>
|
||||
|
||||
<sect> Copyright <p>
|
||||
<itemize>
|
||||
<item>Quake and Quakespasm are released under the <url url="http://www.gnu.org/licenses/gpl-2.0.html" name="GNU GENERAL PUBLIC LICENSE Version 2">
|
||||
|
|
Binary file not shown.
|
@ -17,7 +17,7 @@
|
|||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.93.3</string>
|
||||
<string>0.94.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
|
|
Binary file not shown.
|
@ -1,6 +1,10 @@
|
|||
#ifndef XMP_H
|
||||
#define XMP_H
|
||||
|
||||
#if defined(EMSCRIPTEN)
|
||||
# include <emscripten.h>
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
@ -26,7 +30,6 @@ extern "C" {
|
|||
#elif defined(__SUNPRO_C) && defined(XMP_LDSCOPE_GLOBAL)
|
||||
# define LIBXMP_EXPORT __global
|
||||
#elif defined(EMSCRIPTEN)
|
||||
# include <emscripten.h>
|
||||
# define LIBXMP_EXPORT EMSCRIPTEN_KEEPALIVE
|
||||
# define LIBXMP_EXPORT_VAR
|
||||
#else
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,10 +1,10 @@
|
|||
allow plain files to override files inside a PAK file -- Sander van Dijk.
|
||||
|
||||
Index: Quake/common.c
|
||||
===================================================================
|
||||
--- Quake/common.c (revision 1476)
|
||||
+++ Quake/common.c (working copy)
|
||||
@@ -2036,13 +2036,6 @@ static void COM_AddGameDirectory (const
|
||||
diff --git a/Quake/common.c b/Quake/common.c
|
||||
index 6206c3f..27833b8 100644
|
||||
--- a/Quake/common.c
|
||||
+++ b/Quake/common.c
|
||||
@@ -2037,13 +2037,6 @@ static void COM_AddGameDirectory (const char *base, const char *dir)
|
||||
else path_id = 1U;
|
||||
|
||||
_add_path:
|
||||
|
@ -18,7 +18,7 @@ Index: Quake/common.c
|
|||
// add any pak files in the format pak0.pak pak1.pak, ...
|
||||
for (i = 0; ; i++)
|
||||
{
|
||||
@@ -2074,6 +2067,13 @@ _add_path:
|
||||
@@ -2075,6 +2068,13 @@ _add_path:
|
||||
if (!pak) break;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
INPUT := gfx/conback.lmp \
|
||||
maps/e1m1.ent \
|
||||
maps/e1m2.ent \
|
||||
maps/e1m4.ent \
|
||||
maps/e2m2.ent \
|
||||
maps/e2m3.ent \
|
||||
maps/e2m7.ent \
|
||||
maps/e1m1@c49d.ent \
|
||||
maps/e1m2@0caa.ent \
|
||||
maps/e1m4@958e.ent \
|
||||
maps/e2m2@fbfe.ent \
|
||||
maps/e2m3@237a.ent \
|
||||
maps/e2m7@10a8.ent \
|
||||
default.cfg
|
||||
|
||||
OUTPUT := quakespasm.pak
|
||||
|
|
|
@ -1,41 +1,39 @@
|
|||
|
||||
Index: Quake/gl_model.c
|
||||
===================================================================
|
||||
--- Quake/gl_model.c (revision 1463)
|
||||
+++ Quake/gl_model.c (working copy)
|
||||
@@ -429,6 +429,8 @@ void Mod_LoadTextures (lump_t *l)
|
||||
extern byte *hunk_base;
|
||||
//johnfitz
|
||||
diff --git a/Quake/gl_model.c b/Quake/gl_model.c
|
||||
index 2b15080..07ff6fd 100644
|
||||
--- a/Quake/gl_model.c
|
||||
+++ b/Quake/gl_model.c
|
||||
@@ -37,6 +37,8 @@ qmodel_t *Mod_LoadModel (qmodel_t *mod, qboolean crash);
|
||||
cvar_t external_ents = {"external_ents", "1", CVAR_ARCHIVE};
|
||||
cvar_t external_vis = {"external_vis", "1", CVAR_ARCHIVE};
|
||||
|
||||
+ extern cvar_t r_externaltexture_fix; //mk
|
||||
+extern cvar_t r_externaltexture_fix; //mk
|
||||
+
|
||||
//johnfitz -- don't return early if no textures; still need to create dummy texture
|
||||
if (!l->filelen)
|
||||
{
|
||||
@@ -490,7 +492,17 @@ void Mod_LoadTextures (lump_t *l)
|
||||
static byte *mod_novis;
|
||||
static int mod_novis_capacity;
|
||||
|
||||
@@ -498,7 +500,16 @@ void Mod_LoadTextures (lump_t *l)
|
||||
if (!isDedicated) //no texture uploading for dedicated server
|
||||
{
|
||||
if (!q_strncasecmp(tx->name,"sky",3)) //sky texture //also note -- was Q_strncmp, changed to match qbsp
|
||||
+ {
|
||||
+ //mk -- begin
|
||||
+ if (r_externaltexture_fix.value) {
|
||||
+ if (r_externaltexture_fix.value) { //mk
|
||||
+ if (strstr(tx->name,"sky4")) {
|
||||
+ if (CRC_Block((byte *)(tx+1), tx->width * tx->height)==13039)
|
||||
+ q_strlcpy(tx->name, "sky1", sizeof(tx->name));
|
||||
+ Con_Printf(" using %s\n", tx->name);
|
||||
+ }
|
||||
+ } //mk -- end
|
||||
+ }
|
||||
Sky_LoadTexture (tx);
|
||||
+ }
|
||||
else if (tx->name[0] == '*') //warping texture
|
||||
{
|
||||
//external textures -- first look in "textures/mapname/" then look in "textures/"
|
||||
@@ -540,6 +552,52 @@ void Mod_LoadTextures (lump_t *l)
|
||||
@@ -548,6 +559,50 @@ void Mod_LoadTextures (lump_t *l)
|
||||
//external textures -- first look in "textures/mapname/" then look in "textures/"
|
||||
mark = Hunk_LowMark ();
|
||||
COM_StripExtension (loadmodel->name + 5, mapname, sizeof(mapname));
|
||||
+ //mk begin
|
||||
+ if (r_externaltexture_fix.value) {
|
||||
+
|
||||
+ if (r_externaltexture_fix.value) { //mk
|
||||
+ if (strstr(tx->name,"plat_top1")) {
|
||||
+ if (CRC_Block((byte *)(tx+1), tx->width * tx->height)==24428)
|
||||
+ q_strlcpy(tx->name, "plat_top1_cable", sizeof(tx->name));
|
||||
|
@ -43,7 +41,6 @@ Index: Quake/gl_model.c
|
|||
+ q_strlcpy(tx->name, "plat_top1_bolt", sizeof(tx->name));
|
||||
+ Con_Printf(" using %s\n", tx->name);
|
||||
+ }
|
||||
+
|
||||
+ if (strstr(tx->name,"metal5_2")) {
|
||||
+ if (CRC_Block((byte *)(tx+1), tx->width * tx->height)==49173)
|
||||
+ q_strlcpy(tx->name, "metal5_2_x", sizeof(tx->name));
|
||||
|
@ -51,7 +48,6 @@ Index: Quake/gl_model.c
|
|||
+ q_strlcpy(tx->name, "metal5_2_arc", sizeof(tx->name));
|
||||
+ Con_Printf(" using %s\n", tx->name);
|
||||
+ }
|
||||
+
|
||||
+ if (strstr(tx->name,"metal5_4")) {
|
||||
+ if (CRC_Block((byte *)(tx+1), tx->width * tx->height)==20977)
|
||||
+ q_strlcpy(tx->name, "metal5_4_double", sizeof(tx->name));
|
||||
|
@ -78,29 +74,29 @@ Index: Quake/gl_model.c
|
|||
+ q_strlcpy(tx->name, "window03_e4m2", sizeof(tx->name));
|
||||
+ Con_Printf(" using %s\n", tx->name);
|
||||
+ }
|
||||
+ } //mk end
|
||||
+ }
|
||||
+
|
||||
q_snprintf (filename, sizeof(filename), "textures/%s/%s", mapname, tx->name);
|
||||
data = Image_LoadImage (filename, &fwidth, &fheight);
|
||||
if (!data)
|
||||
Index: Quake/gl_rmain.c
|
||||
===================================================================
|
||||
--- Quake/gl_rmain.c (revision 1406)
|
||||
+++ Quake/gl_rmain.c (working copy)
|
||||
@@ -101,6 +101,8 @@
|
||||
|
||||
diff --git a/Quake/gl_rmain.c b/Quake/gl_rmain.c
|
||||
index a41d8b1..b0020c5 100644
|
||||
--- a/Quake/gl_rmain.c
|
||||
+++ b/Quake/gl_rmain.c
|
||||
@@ -102,6 +102,8 @@ cvar_t r_noshadow_list = {"r_noshadow_list", "progs/flame2.mdl,progs/flame.mdl,p
|
||||
extern cvar_t r_vfog;
|
||||
//johnfitz
|
||||
+
|
||||
+cvar_t r_externaltexture_fix = {"r_externaltexture_fix","0", CVAR_ARCHIVE}; //mk
|
||||
|
||||
+cvar_t r_externaltexture_fix = {"r_externaltexture_fix", "0", CVAR_ARCHIVE}; //mk
|
||||
+
|
||||
cvar_t gl_zfix = {"gl_zfix", "0", CVAR_NONE}; // QuakeSpasm z-fighting fix
|
||||
|
||||
Index: Quake/gl_rmisc.c
|
||||
===================================================================
|
||||
--- Quake/gl_rmisc.c (revision 1406)
|
||||
+++ Quake/gl_rmisc.c (working copy)
|
||||
@@ -47,6 +47,7 @@
|
||||
cvar_t r_lavaalpha = {"r_lavaalpha","0",CVAR_NONE};
|
||||
diff --git a/Quake/gl_rmisc.c b/Quake/gl_rmisc.c
|
||||
index dfdb84d..9c441bd 100644
|
||||
--- a/Quake/gl_rmisc.c
|
||||
+++ b/Quake/gl_rmisc.c
|
||||
@@ -47,6 +47,7 @@ extern cvar_t r_nolerp_list;
|
||||
extern cvar_t r_noshadow_list;
|
||||
//johnfitz
|
||||
extern cvar_t gl_zfix; // QuakeSpasm z-fighting fix
|
||||
|
@ -108,7 +104,7 @@ Index: Quake/gl_rmisc.c
|
|||
|
||||
extern gltexture_t *playertextures[MAX_SCOREBOARD]; //johnfitz
|
||||
|
||||
@@ -231,6 +232,7 @@ void R_Init (void)
|
||||
@@ -218,6 +219,7 @@ void R_Init (void)
|
||||
Cvar_RegisterVariable (&r_noshadow_list);
|
||||
Cvar_SetCallback (&r_noshadow_list, R_Model_ExtraFlags_List_f);
|
||||
//johnfitz
|
||||
|
|
|
@ -265,6 +265,9 @@ void Cmd_StuffCmds_f (void)
|
|||
Cbuf_InsertText (cmds);
|
||||
}
|
||||
|
||||
/* id1/pak0.pak from 2021 re-release doesn't have a default.cfg
|
||||
* embedding Quakespasm's customized default.cfg for that... */
|
||||
#include "default_cfg.h"
|
||||
|
||||
/*
|
||||
===============
|
||||
|
@ -284,6 +287,9 @@ void Cmd_Exec_f (void)
|
|||
|
||||
mark = Hunk_LowMark ();
|
||||
f = (char *)COM_LoadHunkFile (Cmd_Argv(1), NULL);
|
||||
if (!f && !strcmp(Cmd_Argv(1), "default.cfg")) {
|
||||
f = default_cfg; /* see above.. */
|
||||
}
|
||||
if (!f)
|
||||
{
|
||||
if (cmd_warncmd.value)
|
||||
|
|
422
Quake/common.c
422
Quake/common.c
|
@ -3370,3 +3370,425 @@ void COM_Effectinfo_Enumerate(int (*cb)(const char *pname))
|
|||
}
|
||||
free(buf);
|
||||
}
|
||||
|
||||
/*
|
||||
============================================================================
|
||||
LOCALIZATION
|
||||
============================================================================
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
char *key;
|
||||
char *value;
|
||||
} locentry_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int numentries;
|
||||
int maxnumentries;
|
||||
int numindices;
|
||||
unsigned *indices;
|
||||
locentry_t *entries;
|
||||
char *text;
|
||||
} localization_t;
|
||||
|
||||
static localization_t localization;
|
||||
|
||||
/*
|
||||
================
|
||||
COM_HashString
|
||||
Computes the FNV-1a hash of string str
|
||||
================
|
||||
*/
|
||||
unsigned COM_HashString (const char *str)
|
||||
{
|
||||
unsigned hash = 0x811c9dc5u;
|
||||
while (*str)
|
||||
{
|
||||
hash ^= *str++;
|
||||
hash *= 0x01000193u;
|
||||
}
|
||||
return hash;
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
LOC_LoadFile
|
||||
================
|
||||
*/
|
||||
void LOC_LoadFile (const char *file)
|
||||
{
|
||||
char path[1024];
|
||||
FILE *fp = NULL;
|
||||
int i,lineno;
|
||||
char *cursor;
|
||||
|
||||
// clear existing data
|
||||
if (localization.text)
|
||||
{
|
||||
free(localization.text);
|
||||
localization.text = NULL;
|
||||
}
|
||||
localization.numentries = 0;
|
||||
localization.numindices = 0;
|
||||
|
||||
if (!file || !*file)
|
||||
return;
|
||||
|
||||
Con_Printf("\nLanguage initialization\n");
|
||||
|
||||
q_snprintf(path, sizeof(path), "%s/%s", com_basedir, file);
|
||||
fp = fopen(path, "r");
|
||||
if (!fp) goto fail;
|
||||
fseek(fp, 0, SEEK_END);
|
||||
i = ftell(fp);
|
||||
if (i <= 0) goto fail;
|
||||
localization.text = (char *) calloc(1, i+1);
|
||||
if (!localization.text)
|
||||
{
|
||||
fail: if (fp) fclose(fp);
|
||||
Con_Printf("Couldn't load '%s'\nfrom '%s'\n", file, com_basedir);
|
||||
return;
|
||||
}
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
fread(localization.text, 1, i, fp);
|
||||
fclose(fp);
|
||||
|
||||
cursor = localization.text;
|
||||
|
||||
// skip BOM
|
||||
if ((unsigned char)(cursor[0]) == 0xEF && (unsigned char)(cursor[1]) == 0xBB && cursor[2] == 0xB)
|
||||
cursor += 3;
|
||||
|
||||
lineno = 0;
|
||||
while (*cursor)
|
||||
{
|
||||
char *line, *equals;
|
||||
|
||||
lineno++;
|
||||
|
||||
// skip leading whitespace
|
||||
while (q_isblank(*cursor))
|
||||
++cursor;
|
||||
|
||||
line = cursor;
|
||||
equals = NULL;
|
||||
// find line end and first equals sign, if any
|
||||
while (*cursor && *cursor != '\n')
|
||||
{
|
||||
if (*cursor == '=' && !equals)
|
||||
equals = cursor;
|
||||
cursor++;
|
||||
}
|
||||
|
||||
if (line[0] == '/')
|
||||
{
|
||||
if (line[1] != '/')
|
||||
Con_DPrintf("LOC_LoadFile: malformed comment on line %d\n", lineno);
|
||||
}
|
||||
else if (equals)
|
||||
{
|
||||
char *key_end = equals;
|
||||
qboolean leading_quote;
|
||||
qboolean trailing_quote;
|
||||
locentry_t *entry;
|
||||
char *value_src;
|
||||
char *value_dst;
|
||||
char *value;
|
||||
|
||||
// trim whitespace before equals sign
|
||||
while (key_end != line && q_isspace(key_end[-1]))
|
||||
key_end--;
|
||||
*key_end = 0;
|
||||
|
||||
value = equals + 1;
|
||||
// skip whitespace after equals sign
|
||||
while (value != cursor && q_isspace(*value))
|
||||
value++;
|
||||
|
||||
leading_quote = (*value == '\"');
|
||||
trailing_quote = false;
|
||||
value += leading_quote;
|
||||
|
||||
// transform escape sequences in-place
|
||||
value_src = value;
|
||||
value_dst = value;
|
||||
while (value_src != cursor)
|
||||
{
|
||||
if (*value_src == '\\' && value_src + 1 != cursor)
|
||||
{
|
||||
char c = value_src[1];
|
||||
value_src += 2;
|
||||
switch (c)
|
||||
{
|
||||
case 'n': *value_dst++ = '\n'; break;
|
||||
case 't': *value_dst++ = '\t'; break;
|
||||
case 'v': *value_dst++ = '\v'; break;
|
||||
case 'b': *value_dst++ = '\b'; break;
|
||||
case 'f': *value_dst++ = '\f'; break;
|
||||
|
||||
case '"':
|
||||
case '\'':
|
||||
*value_dst++ = c;
|
||||
break;
|
||||
|
||||
default:
|
||||
Con_Printf("LOC_LoadFile: unrecognized escape sequence \\%c on line %d\n", c, lineno);
|
||||
*value_dst++ = c;
|
||||
break;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if (*value_src == '\"')
|
||||
{
|
||||
trailing_quote = true;
|
||||
*value_dst = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
*value_dst++ = *value_src++;
|
||||
}
|
||||
|
||||
// if not a quoted string, trim trailing whitespace
|
||||
if (!trailing_quote)
|
||||
{
|
||||
while (value_dst != value && q_isblank(value_dst[-1]))
|
||||
{
|
||||
*value_dst = 0;
|
||||
value_dst--;
|
||||
}
|
||||
}
|
||||
|
||||
if (localization.numentries == localization.maxnumentries)
|
||||
{
|
||||
// grow by 50%
|
||||
localization.maxnumentries += localization.maxnumentries >> 1;
|
||||
localization.maxnumentries = q_max(localization.maxnumentries, 32);
|
||||
localization.entries = (locentry_t*) realloc(localization.entries, sizeof(*localization.entries) * localization.maxnumentries);
|
||||
}
|
||||
|
||||
entry = &localization.entries[localization.numentries++];
|
||||
entry->key = line;
|
||||
entry->value = value;
|
||||
}
|
||||
|
||||
if (*cursor)
|
||||
*cursor++ = 0; // terminate line and advance to next
|
||||
}
|
||||
|
||||
// hash all entries
|
||||
|
||||
localization.numindices = localization.numentries * 2; // 50% load factor
|
||||
if (localization.numindices == 0)
|
||||
{
|
||||
Con_Printf("No localized strings in file '%s'\n", file);
|
||||
return;
|
||||
}
|
||||
|
||||
localization.indices = (unsigned*) realloc(localization.indices, localization.numindices * sizeof(*localization.indices));
|
||||
memset(localization.indices, 0, localization.numindices * sizeof(*localization.indices));
|
||||
|
||||
for (i = 0; i < localization.numentries; i++)
|
||||
{
|
||||
locentry_t *entry = &localization.entries[i];
|
||||
unsigned pos = COM_HashString(entry->key) % localization.numindices, end = pos;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (!localization.indices[pos])
|
||||
{
|
||||
localization.indices[pos] = i + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
++pos;
|
||||
if (pos == localization.numindices)
|
||||
pos = 0;
|
||||
|
||||
if (pos == end)
|
||||
Sys_Error("LOC_LoadFile failed");
|
||||
}
|
||||
}
|
||||
|
||||
Con_Printf("Loaded %d strings from '%s'\n", localization.numentries, file);
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
LOC_Init
|
||||
================
|
||||
*/
|
||||
void LOC_Init(void)
|
||||
{
|
||||
LOC_LoadFile("localization/loc_english.txt");
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
LOC_Shutdown
|
||||
================
|
||||
*/
|
||||
void LOC_Shutdown(void)
|
||||
{
|
||||
free(localization.indices);
|
||||
free(localization.entries);
|
||||
free(localization.text);
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
LOC_GetRawString
|
||||
|
||||
Returns localized string if available, or NULL otherwise
|
||||
================
|
||||
*/
|
||||
const char* LOC_GetRawString (const char *key)
|
||||
{
|
||||
unsigned pos, end;
|
||||
|
||||
if (!localization.numindices || !key || !*key || *key != '$')
|
||||
return NULL;
|
||||
key++;
|
||||
|
||||
pos = COM_HashString(key) % localization.numindices;
|
||||
end = pos;
|
||||
|
||||
do
|
||||
{
|
||||
unsigned idx = localization.indices[pos];
|
||||
locentry_t *entry;
|
||||
if (!idx)
|
||||
return NULL;
|
||||
|
||||
entry = &localization.entries[idx - 1];
|
||||
if (!Q_strcmp(entry->key, key))
|
||||
return entry->value;
|
||||
|
||||
++pos;
|
||||
if (pos == localization.numindices)
|
||||
pos = 0;
|
||||
} while (pos != end);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
LOC_GetString
|
||||
|
||||
Returns localized string if available, or input string otherwise
|
||||
================
|
||||
*/
|
||||
const char* LOC_GetString (const char *key)
|
||||
{
|
||||
const char* value = LOC_GetRawString(key);
|
||||
return value ? value : key;
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
LOC_ParseArg
|
||||
|
||||
Returns argument index (>= 0) and advances the string if it starts with a placeholder ({} or {N}),
|
||||
otherwise returns a negative value and leaves the pointer unchanged
|
||||
================
|
||||
*/
|
||||
static int LOC_ParseArg (const char **pstr)
|
||||
{
|
||||
int arg;
|
||||
const char *start;
|
||||
const char *str = *pstr;
|
||||
|
||||
// opening brace
|
||||
if (*str != '{')
|
||||
return -1;
|
||||
start = ++str;
|
||||
|
||||
// optional index, defaulting to 0
|
||||
arg = 0;
|
||||
while (q_isdigit(*str))
|
||||
arg = arg * 10 + *str++ - '0';
|
||||
|
||||
// closing brace
|
||||
if (*str != '}')
|
||||
return -1;
|
||||
*pstr = ++str;
|
||||
|
||||
return arg;
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
LOC_HasPlaceholders
|
||||
================
|
||||
*/
|
||||
qboolean LOC_HasPlaceholders (const char *str)
|
||||
{
|
||||
if (!localization.numindices)
|
||||
return false;
|
||||
while (*str)
|
||||
{
|
||||
if (LOC_ParseArg(&str) >= 0)
|
||||
return true;
|
||||
str++;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
LOC_Format
|
||||
|
||||
Replaces placeholders (of the form {} or {N}) with the corresponding arguments
|
||||
|
||||
Returns number of written chars, excluding the NUL terminator
|
||||
If len > 0, output is always NUL-terminated
|
||||
================
|
||||
*/
|
||||
size_t LOC_Format (const char *format, const char* (*getarg_fn) (int idx, void* userdata), void* userdata, char* out, size_t len)
|
||||
{
|
||||
size_t written = 0;
|
||||
int numargs = 0;
|
||||
|
||||
if (!len)
|
||||
{
|
||||
Con_DPrintf("LOC_Format: no output space\n");
|
||||
return 0;
|
||||
}
|
||||
--len; // reserve space for the terminator
|
||||
|
||||
while (*format && written < len)
|
||||
{
|
||||
const char* insert;
|
||||
size_t space_left;
|
||||
size_t insert_len;
|
||||
int argindex = LOC_ParseArg(&format);
|
||||
|
||||
if (argindex < 0)
|
||||
{
|
||||
out[written++] = *format++;
|
||||
continue;
|
||||
}
|
||||
|
||||
insert = getarg_fn(argindex, userdata);
|
||||
space_left = len - written;
|
||||
insert_len = Q_strlen(insert);
|
||||
|
||||
if (insert_len > space_left)
|
||||
{
|
||||
Con_DPrintf("LOC_Format: overflow at argument #%d\n", numargs);
|
||||
insert_len = space_left;
|
||||
}
|
||||
|
||||
Q_memcpy(out + written, insert, insert_len);
|
||||
written += insert_len;
|
||||
}
|
||||
|
||||
if (*format)
|
||||
Con_DPrintf("LOC_Format: overflow\n");
|
||||
|
||||
out[written] = 0;
|
||||
|
||||
return written;
|
||||
}
|
||||
|
|
|
@ -218,6 +218,15 @@ void COM_CreatePath (char *path);
|
|||
char *va (const char *format, ...) FUNC_PRINTF(1,2);
|
||||
// does a varargs printf into a temp buffer
|
||||
|
||||
unsigned COM_HashString (const char *str);
|
||||
|
||||
// localization support for 2021 rerelease version:
|
||||
void LOC_Init (void);
|
||||
void LOC_Shutdown (void);
|
||||
const char* LOC_GetRawString (const char *key);
|
||||
const char* LOC_GetString (const char *key);
|
||||
qboolean LOC_HasPlaceholders (const char *str);
|
||||
size_t LOC_Format (const char *format, const char* (*getarg_fn)(int idx, void* userdata), void* userdata, char* out, size_t len);
|
||||
|
||||
//============================================================================
|
||||
|
||||
|
|
92
Quake/default_cfg.h
Normal file
92
Quake/default_cfg.h
Normal file
|
@ -0,0 +1,92 @@
|
|||
// keep in sync with Misc/qs_pak/default.cfg
|
||||
|
||||
static char default_cfg[] =
|
||||
"unbindall\n"
|
||||
|
||||
"bind ALT +strafe\n"
|
||||
|
||||
"bind , +moveleft\n"
|
||||
"bind a +moveleft\n"
|
||||
"bind . +moveright\n"
|
||||
"bind d +moveright\n"
|
||||
"bind DEL +lookdown\n"
|
||||
"bind PGDN +lookup\n"
|
||||
"bind END centerview\n"
|
||||
|
||||
"bind e +moveup\n"
|
||||
"bind c +movedown\n"
|
||||
"bind SHIFT +speed\n"
|
||||
"bind CTRL +attack\n"
|
||||
"bind UPARROW +forward\n"
|
||||
"bind w +forward\n"
|
||||
"bind DOWNARROW +back\n"
|
||||
"bind s +back\n"
|
||||
"bind LEFTARROW +left\n"
|
||||
"bind RIGHTARROW +right\n"
|
||||
|
||||
"bind SPACE +jump\n"
|
||||
|
||||
"bind TAB +showscores\n"
|
||||
|
||||
"bind 1 \"impulse 1\"\n"
|
||||
"bind 2 \"impulse 2\"\n"
|
||||
"bind 3 \"impulse 3\"\n"
|
||||
"bind 4 \"impulse 4\"\n"
|
||||
"bind 5 \"impulse 5\"\n"
|
||||
"bind 6 \"impulse 6\"\n"
|
||||
"bind 7 \"impulse 7\"\n"
|
||||
"bind 8 \"impulse 8\"\n"
|
||||
|
||||
"bind 0 \"impulse 0\"\n"
|
||||
|
||||
"bind / \"impulse 10\"\n"
|
||||
"bind MWHEELDOWN \"impulse 10\"\n"
|
||||
"bind MWHEELUP \"impulse 12\"\n"
|
||||
|
||||
"alias zoom_in \"sensitivity 2;fov 90;wait;fov 70;wait;fov 50;wait;fov 30;wait;fov 10;wait;fov 5;bind F11 zoom_out\"\n"
|
||||
"alias zoom_out \"sensitivity 4;fov 5;wait;fov 10;wait;fov 30;wait;fov 50;wait;fov 70;wait;fov 90;bind F11 zoom_in; sensitivity 3\"\n"
|
||||
"bind F11 zoom_in\n"
|
||||
|
||||
"bind F1 \"help\"\n"
|
||||
"bind F2 \"menu_save\"\n"
|
||||
"bind F3 \"menu_load\"\n"
|
||||
"bind F4 \"menu_options\"\n"
|
||||
"bind F5 \"menu_multiplayer\"\n"
|
||||
"bind F6 \"echo Quicksaving...; wait; save quick\"\n"
|
||||
"bind F9 \"echo Quickloading...; wait; load quick\"\n"
|
||||
"bind F10 \"quit\"\n"
|
||||
"bind F12 \"screenshot\"\n"
|
||||
|
||||
"bind \\ +mlook\n"
|
||||
|
||||
"bind PAUSE \"pause\"\n"
|
||||
"bind ESCAPE \"togglemenu\"\n"
|
||||
"bind ~ \"toggleconsole\"\n"
|
||||
"bind ` \"toggleconsole\"\n"
|
||||
|
||||
"bind t \"messagemode\"\n"
|
||||
|
||||
"bind + \"sizeup\"\n"
|
||||
"bind = \"sizeup\"\n"
|
||||
"bind - \"sizedown\"\n"
|
||||
|
||||
"bind INS +klook\n"
|
||||
|
||||
"bind MOUSE1 +attack\n"
|
||||
"bind MOUSE2 +jump\n"
|
||||
|
||||
"bind LSHOULDER \"impulse 12\"\n"
|
||||
"bind RSHOULDER \"impulse 10\"\n"
|
||||
"bind LTRIGGER +jump\n"
|
||||
"bind RTRIGGER +attack\n"
|
||||
|
||||
"gamma 1.0\n"
|
||||
"volume 0.7\n"
|
||||
"sensitivity 3\n"
|
||||
|
||||
"viewsize 110\n"
|
||||
"scr_conscale 1.6\n"
|
||||
"scr_menuscale 1.6\n"
|
||||
"scr_sbarscale 1.6\n"
|
||||
|
||||
"+mlook\n";
|
|
@ -1068,20 +1068,35 @@ Mod_LoadEntities
|
|||
*/
|
||||
void Mod_LoadEntities (lump_t *l)
|
||||
{
|
||||
char basemapname[MAX_QPATH];
|
||||
char entfilename[MAX_QPATH];
|
||||
char *ents;
|
||||
int mark;
|
||||
unsigned int path_id;
|
||||
unsigned int crc = 0;
|
||||
|
||||
if (! external_ents.value)
|
||||
goto _load_embedded;
|
||||
|
||||
q_strlcpy(entfilename, loadmodel->name, sizeof(entfilename));
|
||||
COM_StripExtension(entfilename, entfilename, sizeof(entfilename));
|
||||
q_strlcat(entfilename, ".ent", sizeof(entfilename));
|
||||
Con_DPrintf2("trying to load %s\n", entfilename);
|
||||
mark = Hunk_LowMark();
|
||||
if (l->filelen > 0) {
|
||||
crc = CRC_Block(mod_base + l->fileofs, l->filelen - 1);
|
||||
}
|
||||
|
||||
q_strlcpy(basemapname, loadmodel->name, sizeof(basemapname));
|
||||
COM_StripExtension(basemapname, basemapname, sizeof(basemapname));
|
||||
|
||||
q_snprintf(entfilename, sizeof(entfilename), "%s@%04x.ent", basemapname, crc);
|
||||
Con_DPrintf2("trying to load %s\n", entfilename);
|
||||
ents = (char *) COM_LoadHunkFile (entfilename, &path_id);
|
||||
|
||||
if (!ents)
|
||||
{
|
||||
q_snprintf(entfilename, sizeof(entfilename), "%s.ent", basemapname);
|
||||
Con_DPrintf2("trying to load %s\n", entfilename);
|
||||
ents = (char *) COM_LoadHunkFile (entfilename, &path_id);
|
||||
}
|
||||
|
||||
if (ents)
|
||||
{
|
||||
// use ent file only from the same gamedir as the map
|
||||
|
|
|
@ -1727,11 +1727,18 @@ void VID_Init (void)
|
|||
vid.colormap = host_colormap;
|
||||
vid.fullbright = 256 - LittleLong (*((int *)vid.colormap + 2048));
|
||||
|
||||
#if !defined(USE_SDL2)
|
||||
// set window icon
|
||||
PL_SetWindowIcon();
|
||||
#endif
|
||||
|
||||
VID_SetMode (width, height, refreshrate, bpp, fullscreen);
|
||||
|
||||
#if defined(USE_SDL2)
|
||||
// set window icon
|
||||
PL_SetWindowIcon();
|
||||
#endif
|
||||
|
||||
GL_Init ();
|
||||
GL_SetupState ();
|
||||
Cmd_AddCommand ("gl_info", GL_Info_f); //johnfitz
|
||||
|
|
|
@ -1085,6 +1085,8 @@ void Host_Init (void)
|
|||
CL_Init ();
|
||||
}
|
||||
|
||||
LOC_Init (); // for 2021 rerelease support.
|
||||
|
||||
Hunk_AllocName (0, "-HOST_HUNKLEVEL-");
|
||||
host_hunklevel = Hunk_LowMark ();
|
||||
|
||||
|
@ -1167,5 +1169,7 @@ void Host_Shutdown(void)
|
|||
}
|
||||
|
||||
LOG_Close ();
|
||||
|
||||
LOC_Shutdown ();
|
||||
}
|
||||
|
||||
|
|
|
@ -42,21 +42,44 @@ char *PR_GetTempString (void)
|
|||
===============================================================================
|
||||
*/
|
||||
|
||||
static const char* PF_GetStringArg(int idx, void* userdata)
|
||||
{
|
||||
if (userdata)
|
||||
idx += *(int*)userdata;
|
||||
if (idx < 0 || idx >= qcvm->argc)
|
||||
return "";
|
||||
return LOC_GetString(G_STRING(OFS_PARM0 + idx * 3));
|
||||
}
|
||||
|
||||
char *PF_VarString (int first)
|
||||
{
|
||||
int i;
|
||||
static char out[1024];
|
||||
const char *format;
|
||||
size_t s;
|
||||
|
||||
out[0] = 0;
|
||||
s = 0;
|
||||
for (i = first; i < qcvm->argc; i++)
|
||||
|
||||
if (first >= qcvm->argc)
|
||||
return out;
|
||||
|
||||
format = LOC_GetString(G_STRING((OFS_PARM0 + first * 3)));
|
||||
if (LOC_HasPlaceholders(format))
|
||||
{
|
||||
s = q_strlcat(out, G_STRING((OFS_PARM0+i*3)), sizeof(out));
|
||||
if (s >= sizeof(out))
|
||||
int offset = first + 1;
|
||||
s = LOC_Format(format, PF_GetStringArg, &offset, out, sizeof(out));
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = first; i < qcvm->argc; i++)
|
||||
{
|
||||
Con_Warning("PF_VarString: overflow (string truncated)\n");
|
||||
return out;
|
||||
s = q_strlcat(out, LOC_GetString(G_STRING(OFS_PARM0+i*3)), sizeof(out));
|
||||
if (s >= sizeof(out))
|
||||
{
|
||||
Con_Warning("PF_VarString: overflow (string truncated)\n");
|
||||
return out;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (s > 255)
|
||||
|
@ -1649,7 +1672,7 @@ static void PF_sv_WriteCoord (void)
|
|||
|
||||
static void PF_sv_WriteString (void)
|
||||
{
|
||||
MSG_WriteString (WriteDest(), G_STRING(OFS_PARM1));
|
||||
MSG_WriteString (WriteDest(), LOC_GetString(G_STRING(OFS_PARM1)));
|
||||
}
|
||||
|
||||
static void PF_sv_WriteEntity (void)
|
||||
|
|
|
@ -36,8 +36,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#define X11_VERSION 1.10
|
||||
|
||||
#define FITZQUAKE_VERSION 0.85 //johnfitz
|
||||
#define QUAKESPASM_VERSION 0.93
|
||||
#define QUAKESPASM_VER_PATCH 3 // helper to print a string like 0.93.2
|
||||
#define QUAKESPASM_VERSION 0.94
|
||||
#define QUAKESPASM_VER_PATCH 0 // helper to print a string like 0.93.3
|
||||
#ifndef QUAKESPASM_VER_SUFFIX
|
||||
#define QUAKESPASM_VER_SUFFIX // optional version suffix string literal like "-beta1"
|
||||
#endif
|
||||
|
|
Binary file not shown.
110
Quakespasm.html
110
Quakespasm.html
|
@ -8,10 +8,6 @@
|
|||
<H1>QuakeSpasm</H1>
|
||||
|
||||
<H2></H2>
|
||||
<P>
|
||||
<PRE>
|
||||
</PRE>
|
||||
</P>
|
||||
<P><EM>Page last edited: August 2021</EM></P>
|
||||
|
||||
<P>
|
||||
|
@ -36,13 +32,13 @@
|
|||
<LI><A NAME="toc4.3">4.3</A> <A HREF="Quakespasm.html#ss4.3">Mac OS X </A>
|
||||
</UL>
|
||||
<P>
|
||||
<H2><A NAME="toc5">5.</A> <A HREF="Quakespasm.html#s5">Known Bugs </A></H2>
|
||||
<H2><A NAME="toc5">5.</A> <A HREF="Quakespasm.html#s5">Quake '2021 re-release' </A></H2>
|
||||
|
||||
<P>
|
||||
<H2><A NAME="toc6">6.</A> <A HREF="Quakespasm.html#s6">Changes</A></H2>
|
||||
|
||||
<UL>
|
||||
<LI><A NAME="toc6.1">6.1</A> <A HREF="Quakespasm.html#ss6.1">Changes in 0.93.3</A>
|
||||
<LI><A NAME="toc6.1">6.1</A> <A HREF="Quakespasm.html#ss6.1">Changes in 0.94.0</A>
|
||||
<LI><A NAME="toc6.2">6.2</A> <A HREF="Quakespasm.html#ss6.2">Changes in 0.93.2</A>
|
||||
<LI><A NAME="toc6.3">6.3</A> <A HREF="Quakespasm.html#ss6.3">Changes in 0.93.1</A>
|
||||
<LI><A NAME="toc6.4">6.4</A> <A HREF="Quakespasm.html#ss6.4">Changes in 0.93.0</A>
|
||||
|
@ -62,16 +58,13 @@
|
|||
<LI><A NAME="toc6.18">6.18</A> <A HREF="Quakespasm.html#ss6.18">Changes in 0.85.1</A>
|
||||
</UL>
|
||||
<P>
|
||||
<H2><A NAME="toc7">7.</A> <A HREF="Quakespasm.html#s7">Todo </A></H2>
|
||||
<H2><A NAME="toc7">7.</A> <A HREF="Quakespasm.html#s7">Copyright </A></H2>
|
||||
|
||||
<P>
|
||||
<H2><A NAME="toc8">8.</A> <A HREF="Quakespasm.html#s8">Copyright </A></H2>
|
||||
<H2><A NAME="toc8">8.</A> <A HREF="Quakespasm.html#s8">Contact </A></H2>
|
||||
|
||||
<P>
|
||||
<H2><A NAME="toc9">9.</A> <A HREF="Quakespasm.html#s9">Contact </A></H2>
|
||||
|
||||
<P>
|
||||
<H2><A NAME="toc10">10.</A> <A HREF="Quakespasm.html#s10">Links </A></H2>
|
||||
<H2><A NAME="toc9">9.</A> <A HREF="Quakespasm.html#s9">Links </A></H2>
|
||||
|
||||
|
||||
<HR>
|
||||
|
@ -80,7 +73,7 @@
|
|||
|
||||
<P>
|
||||
<A HREF="http://quakespasm.sourceforge.net">QuakeSpasm</A>
|
||||
is a modern, cross-platform Quake 1 engine based on
|
||||
is a modern, cross-platform Quake engine based on
|
||||
<A HREF="http://www.celephais.net/fitzquake">FitzQuake</A>.</P>
|
||||
<P>It includes support for 64 bit CPUs and custom music playback, a new
|
||||
sound driver, some graphical niceities, and numerous bug-fixes and other improvements.</P>
|
||||
|
@ -96,8 +89,6 @@ SDL is probably less buggy, but SDL2 has nicer features and smoother mouse input
|
|||
<A HREF="http://quakespasm.sourceforge.net/download.htm">Project Downloads</A></LI>
|
||||
<LI>
|
||||
<A HREF="https://sourceforge.net/p/quakespasm/quakespasm/ci/master/tree/">Latest code repository</A></LI>
|
||||
<LI>
|
||||
<A HREF="http://quakespasm.ericwa.com/job/quakespasm-sdl2/">Automatic Builds (dead link)</A></LI>
|
||||
</UL>
|
||||
</P>
|
||||
|
||||
|
@ -106,24 +97,21 @@ SDL is probably less buggy, but SDL2 has nicer features and smoother mouse input
|
|||
|
||||
|
||||
<P><EM>Visit the
|
||||
<A HREF="http://www.celephais.net/fitzquake">FitzQuake homepage</A> for a full run-down of the engine's commands and variables.</EM></P>
|
||||
<P>
|
||||
<A HREF="http://www.celephais.net/fitzquake">FitzQuake homepage</A> for a full run-down of the engine's commands and variables.</EM>
|
||||
<UL>
|
||||
<LI>To disable some changes, use "<B>quakespasm -fitz</B>"
|
||||
</LI>
|
||||
<LI>Quakespasm's custom data is stored in "quakespasm.pak". Install this file alongside your id1 directory to enable the custom console background and other minor features.
|
||||
</LI>
|
||||
<LI>For different sound backend drivers use "<B>SDL_AUDIODRIVER=</B><EM>DRIVER</EM><B> ./quakespasm</B>"
|
||||
, where DRIVER may be alsa, dsp, pulse, esd ...
|
||||
</LI>
|
||||
<LI>To disable some changes, use "<B>quakespasm -fitz</B>"</LI>
|
||||
<LI>Quakespasm's custom data is stored in "quakespasm.pak". Install this file alongside your id1 directory to enable the custom console background and other minor features.</LI>
|
||||
<LI>For different sound backend drivers use :<BR>
|
||||
"<B>SDL_AUDIODRIVER=</B><EM>DRIVER</EM><B> ./quakespasm</B>"<BR>
|
||||
where DRIVER may be alsa, dsp, pulse, esd ...</LI>
|
||||
<LI><B>Shift+Escape</B> draws the Console.</LI>
|
||||
<LI>From the console, use <B>UP</B> to browse the command line history and
|
||||
<B>TAB</B> to autocomplete command and map names.</LI>
|
||||
<LI>There is currently no CD Music volume support and SDL2 doesn't support CD audio. cd_sdl.c needs replacing with cd_linux.c, cd_bsd.c etc..</LI>
|
||||
<LI>In windows, alternative CD drives are accessible by "<B>quakespasm -cddev F</B>" (for example)
|
||||
</LI>
|
||||
<LI>Quakespasm allows loading new games (mods) on the fly with "<B>game</B> <EM>GAMENAME {-quoth/hipnotic/rogue}</EM>"
|
||||
</LI>
|
||||
<LI>In windows, alternative CD drives are accessible by<BR>
|
||||
"<B>quakespasm -cddev F</B>" (for example)</LI>
|
||||
<LI>Quakespasm allows loading new games (mods) on the fly with<BR>
|
||||
"<B>game</B> <EM>GAMENAME {-quoth/hipnotic/rogue}</EM>"</LI>
|
||||
<LI>Use "<B>quakespasm -condebug</B>" to save console log to "qconsole.log". SDL2 builds no longer generate stdout.txt/stderr.txt.</LI>
|
||||
</UL>
|
||||
</P>
|
||||
|
@ -189,10 +177,11 @@ SDL is probably less buggy, but SDL2 has nicer features and smoother mouse input
|
|||
<LI>XBUTTON</LI>
|
||||
<LI>YBUTTON</LI>
|
||||
</UL>
|
||||
|
||||
quakespasm.pak contains a default.cfg which has been updated to give some default bindings. L/R shoulder buttons are bound to weapon switching, and L/R triggers are jump and attack.</P>
|
||||
</P>
|
||||
<P>quakespasm.pak contains a default.cfg which has been updated to give some default bindings. L/R shoulder buttons are bound to weapon switching, and L/R triggers are jump and attack.</P>
|
||||
<P>The controller support started as Jeremiah Sypult's implementation in Quakespasm-Rift and also uses ideas and code from LordHavoc (DarkPlaces).</P>
|
||||
|
||||
|
||||
<H2><A NAME="s4">4.</A> <A HREF="#toc4">Compiling and Installation</A></H2>
|
||||
|
||||
|
||||
|
@ -209,7 +198,7 @@ Compile time options include
|
|||
<UL>
|
||||
<LI><B>make DO_USERDIRS=1</B> to include user directories support</LI>
|
||||
<LI><B>make DEBUG=1</B> for debugging</LI>
|
||||
<LI><B>make SDL_CONFIG=</B><EM>/PATH/TO/SDL-CONFIG</EM> for unusual SDL installations</LI>
|
||||
<LI><B>make SDL_CONFIG=</B><EM>/PATH/TO/sdl-config</EM> for unusual SDL installations</LI>
|
||||
<LI><B>make USE_SDL2=1</B> to compile against SDL2 instead of SDL-1.2</LI>
|
||||
</UL>
|
||||
</P>
|
||||
|
@ -219,42 +208,47 @@ Compile time options include
|
|||
|
||||
<P>The QuakeSpasm developers cross-compile windows binaries using
|
||||
<A HREF="http://www.mingw.org">MinGW</A> and
|
||||
<A HREF="http://mingw-w64.sf.net">Mingw-w64</A>.</P>
|
||||
<A HREF="http://mingw-w64.sf.net">MinGW-w64</A>.</P>
|
||||
<P>The project can also be built using Visual Studio 2005 (or newer).</P>
|
||||
<H2><A NAME="ss4.3">4.3</A> <A HREF="#toc4.3">Mac OS X </A>
|
||||
</H2>
|
||||
|
||||
<P>A Quakespasm App (including program launcher and update framework) can be made using the <B>Xcode</B> template found in the MacOSX directory.</P>
|
||||
<P>Alternatively, have a look at <B>Makefile.darwin</B> for more instructions on building from a console.</P>
|
||||
<H2><A NAME="s5">5.</A> <A HREF="#toc5">Known Bugs </A></H2>
|
||||
<H2><A NAME="s5">5.</A> <A HREF="#toc5">Quake '2021 re-release' </A></H2>
|
||||
|
||||
<P>Brightness issues should be fixed with GLSL gamma in 0.90.1, if your system supports OpenGL 2. For reference on older systems:<BR>
|
||||
|
||||
Some versions of Xorg and SDL have brightness issues.<BR>
|
||||
Try setting "export SDL_VIDEO_X11_NODIRECTCOLOR=1", or if you have Xorg >= 7.5 and broken brightness,
|
||||
these patched libSDL binaries may help.
|
||||
<P>QuakeSpasm 0.94.0 has initial support for playing the 2021 re-release content:
|
||||
<UL>
|
||||
<LI>
|
||||
<A HREF="http://sf.net/projects/quakespasm/files/Support%20Files/libSDL_gamma_patched.tgz/download">Gamma patched libSDL (i686-linux)</A></LI>
|
||||
<LI>
|
||||
<A HREF="http://sf.net/projects/quakespasm/files/Support%20Files/libSDL_gamma_patched-AMD64.tgz/download">Gamma patched libSDL (x86_64-linux)</A></LI>
|
||||
<LI> Copy the quakespasm exe to your rerelease installation.</LI>
|
||||
<LI> Extract the localization folder from QuakeEX.kpf (which is actually a zip file), and place it in the rerelease directory. Linux (Unix) users can do the following, for example:<BR>
|
||||
<PRE>
|
||||
unzip QuakeEX.kpf localization/loc_english.txt
|
||||
</PRE>
|
||||
</LI>
|
||||
<LI> Run quakespasm as you normally do.</LI>
|
||||
</UL>
|
||||
</P>
|
||||
|
||||
|
||||
<H2><A NAME="s6">6.</A> <A HREF="#toc6">Changes</A></H2>
|
||||
|
||||
|
||||
|
||||
<H2><A NAME="ss6.1">6.1</A> <A HREF="#toc6.1">Changes in 0.93.3</A>
|
||||
<H2><A NAME="ss6.1">6.1</A> <A HREF="#toc6.1">Changes in 0.94.0</A>
|
||||
</H2>
|
||||
|
||||
<P>
|
||||
<UL>
|
||||
<LI> Initial support for playing the 'Quake 2021 re-release' content (thanks to Andrei Drexler for bulk of the work.)</LI>
|
||||
<LI> Fix rendering bug when cl_bobcycle was set to zero (sf.net bug/41)</LI>
|
||||
<LI> Fixed buffer overflow with large char skybox names (sf.net bug/38)</LI>
|
||||
<LI> Fixed a missing MAXALIASFRAMES bounds check (sf.net bug/37)</LI>
|
||||
<LI> OpenGL: workaround Intel UHD 600 driver bug (sf.net bug/39)</LI>
|
||||
<LI> OpenGL: merged surface mark & cull optimizations from vkQuake.</LI>
|
||||
<LI> Changed 'model has a skin taller than 480' error into a warning</LI>
|
||||
<LI> Reject lit files if they're the wrong size (eg hipnotic/start.bsp vs id1/start.lit or just a bsp that no longer has any coloured lits, etc)</LI>
|
||||
<LI> External ent files are now versioned using 4 digit crc of the original map's ents, like e1m1@c49d.ent, which is much safer. The old method (e.g. e1m1.ent) still works but isn't recommended.</LI>
|
||||
<LI> Support for external vis files.</LI>
|
||||
<LI> Save: remove CR/LFs from level name to avoids broken saves, e.g. with autumn_sp map.</LI>
|
||||
<LI> Music: improvements to mp3 tag detection / skipping.</LI>
|
||||
<LI> Music: umx loader fix for malformed / crafted files.</LI>
|
||||
|
@ -271,7 +265,7 @@ these patched libSDL binaries may help.
|
|||
<LI> Lightmaps are now dynamically allocated (from QSS), and BLOCK_WIDTH/HEIGHT raised from 128 to 256.</LI>
|
||||
<LI> Fixed several uncheked limits that would crash the Slayer's Testaments mod (sf.net bug #33).</LI>
|
||||
<LI> Raised MAXALIASTRIS from 2048 to 4096, so that the Slayer's Testaments mod works.</LI>
|
||||
<LI> Fixed 'pants' and 'shirt' types so that those textures load correctly on platforms where char is unsigned by default (sf.net bug #28).</LI>
|
||||
<LI> Fixed 'pants' and 'shirt' types so that those textures load correctly on platforms where char type is unsigned by default (sf.net bug #28).</LI>
|
||||
<LI> Windows audio: WASAPI-enabled SDL2 dlls function properly now.</LI>
|
||||
<LI> Update the third-party libraries. Other fixes/cleanups.</LI>
|
||||
</UL>
|
||||
|
@ -311,11 +305,11 @@ these patched libSDL binaries may help.
|
|||
<LI> Change default screenshot format to png. The 'screenshot' command now supports optional format (tga, png or jpg) and quality (1-100) arguments.</LI>
|
||||
<LI> Revert "always run" changes from 0.85.9 and move the QuakeSpasm customizations to a new "cl_alwaysrun" cvar: Set to 1 in order to scale forward/side/up speed by "cl_movespeedkey" (usually 2), and to make "speedkey" act as "slowkey".</LI>
|
||||
<LI> Change the "always run" menu option to offer three choices:
|
||||
<UL>
|
||||
<LI> off (cl_alwaysrun 0, cl_forwardspeed 200, cl_backspeed 200)</LI>
|
||||
<LI> vanilla (cl_alwaysrun 0, cl_forwardspeed 400, cl_backspeed 400)</LI>
|
||||
<LI> quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)</LI>
|
||||
</UL>
|
||||
<PRE>
|
||||
off (cl_alwaysrun 0, cl_forwardspeed 200, cl_backspeed 200)
|
||||
vanilla (cl_alwaysrun 0, cl_forwardspeed 400, cl_backspeed 400)
|
||||
quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
|
||||
</PRE>
|
||||
</LI>
|
||||
<LI> New "r_scale" cvar. Set to 2, 3, or 4 to render the view at 1/2, 1/3, or 1/4 resolution.</LI>
|
||||
<LI> New "r_viewmodel_quake" cvar. Set to 1 for WinQuake gun position (from MarkV).</LI>
|
||||
|
@ -489,7 +483,8 @@ these patched libSDL binaries may help.
|
|||
<P>
|
||||
<UL>
|
||||
<LI> Fix issues on Windows systems with DPI scaling.</LI>
|
||||
<LI> Unix/Mac user directories support. Disabled by default, 'make DO_USERDIRS=1' to enable it.</LI>
|
||||
<LI> Unix/Mac user directories support. Disabled by default,<BR>
|
||||
'make DO_USERDIRS=1' to enable it.</LI>
|
||||
<LI> SDL2 support. Disabled by default, 'make USE_SDL2=1' to enable it.</LI>
|
||||
<LI> Revised keyboard input code.</LI>
|
||||
<LI> Revised/improved the 'game' command, i.e. on-the-fly mod changing. It now accepts an optional second argument for mission packs or quoth support i.e. -hipnotic, -rogue, or -quoth. For example, for WarpSpasm: "game warp -quoth"</LI>
|
||||
|
@ -710,16 +705,7 @@ these patched libSDL binaries may help.
|
|||
</P>
|
||||
|
||||
|
||||
<H2><A NAME="s7">7.</A> <A HREF="#toc7">Todo </A></H2>
|
||||
|
||||
<P>
|
||||
<UL>
|
||||
<LI>Add uHexen2's first person camera (and menu item)</LI>
|
||||
<LI>Native CD audio support (if desired). cd_sdl.c doesn't have proper volume controls and SDL2 doesn't support CD audio</LI>
|
||||
</UL>
|
||||
</P>
|
||||
|
||||
<H2><A NAME="s8">8.</A> <A HREF="#toc8">Copyright </A></H2>
|
||||
<H2><A NAME="s7">7.</A> <A HREF="#toc7">Copyright </A></H2>
|
||||
|
||||
<P>
|
||||
<UL>
|
||||
|
@ -730,7 +716,7 @@ these patched libSDL binaries may help.
|
|||
</UL>
|
||||
</P>
|
||||
|
||||
<H2><A NAME="s9">9.</A> <A HREF="#toc9">Contact </A></H2>
|
||||
<H2><A NAME="s8">8.</A> <A HREF="#toc8">Contact </A></H2>
|
||||
|
||||
<P>
|
||||
<UL>
|
||||
|
@ -745,7 +731,7 @@ these patched libSDL binaries may help.
|
|||
</UL>
|
||||
</P>
|
||||
|
||||
<H2><A NAME="s10">10.</A> <A HREF="#toc10">Links </A></H2>
|
||||
<H2><A NAME="s9">9.</A> <A HREF="#toc9">Links </A></H2>
|
||||
|
||||
|
||||
<P>
|
||||
|
|
119
Quakespasm.txt
119
Quakespasm.txt
|
@ -17,9 +17,10 @@
|
|||
4.2 Windows
|
||||
4.3 Mac OS X
|
||||
|
||||
5. Known Bugs
|
||||
5. Quake '2021 re-release'
|
||||
|
||||
6. Changes
|
||||
6.1 Changes in 0.93.3
|
||||
6.1 Changes in 0.94.0
|
||||
6.2 Changes in 0.93.2
|
||||
6.3 Changes in 0.93.1
|
||||
6.4 Changes in 0.93.0
|
||||
|
@ -48,21 +49,20 @@
|
|||
6.17 Changes in 0.85.2
|
||||
6.18 Changes in 0.85.1
|
||||
|
||||
7. Todo
|
||||
8. Copyright
|
||||
9. Contact
|
||||
10. Links
|
||||
7. Copyright
|
||||
8. Contact
|
||||
9. Links
|
||||
|
||||
|
||||
______________________________________________________________________
|
||||
|
||||
|
||||
Page last edited: August 2021
|
||||
|
||||
|
||||
1. About
|
||||
|
||||
QuakeSpasm <http://quakespasm.sourceforge.net> is a modern, cross-
|
||||
platform Quake 1 engine based on FitzQuake
|
||||
platform Quake engine based on FitzQuake
|
||||
<http://www.celephais.net/fitzquake>.
|
||||
|
||||
It includes support for 64 bit CPUs and custom music playback, a new
|
||||
|
@ -81,9 +81,6 @@
|
|||
o Latest code repository:
|
||||
https://sourceforge.net/p/quakespasm/quakespasm/ci/master/tree/
|
||||
|
||||
o Automatic Builds (dead link):
|
||||
http://quakespasm.ericwa.com/job/quakespasm-sdl2/
|
||||
|
||||
|
||||
3. Hints
|
||||
|
||||
|
@ -110,10 +107,10 @@
|
|||
cd_bsd.c etc..
|
||||
|
||||
o In windows, alternative CD drives are accessible by
|
||||
"quakespasm -cddev F" (for example)
|
||||
"quakespasm -cddev F" (for example)
|
||||
|
||||
o Quakespasm allows loading new games (mods) on the fly with
|
||||
"game GAMENAME {-quoth/hipnotic/rogue}"
|
||||
"game GAMENAME {-quoth/hipnotic/rogue}"
|
||||
|
||||
o Use "quakespasm -condebug" to save console log to "qconsole.log".
|
||||
SDL2 builds no longer generate stdout.txt/stderr.txt.
|
||||
|
@ -182,35 +179,22 @@
|
|||
menu:
|
||||
|
||||
o Back - alias for TAB
|
||||
|
||||
o Start - alias for ESC
|
||||
|
||||
o DPad, analog sticks - mapped to arrow keys
|
||||
|
||||
o A Button - alias for ENTER in menus
|
||||
|
||||
o B Button - alias for ESC in menus
|
||||
|
||||
These buttons can be bound normally:
|
||||
|
||||
o LTRIGGER - Left trigger
|
||||
|
||||
o RTRIGGER - Right trigger
|
||||
|
||||
o LSHOULDER - Left shoulder button
|
||||
|
||||
o RSHOULDER - Right shoulder button
|
||||
|
||||
o LTHUMB - Clicking the left thumbstick
|
||||
|
||||
o RTHUMB - Clicking the right thumbstick
|
||||
|
||||
o ABUTTON
|
||||
|
||||
o BBUTTON
|
||||
|
||||
o XBUTTON
|
||||
|
||||
o YBUTTON
|
||||
|
||||
quakespasm.pak contains a default.cfg which has been updated to give
|
||||
|
@ -247,14 +231,14 @@
|
|||
|
||||
o make DEBUG=1 for debugging
|
||||
|
||||
o make SDL_CONFIG=/PATH/TO/SDL-CONFIG for unusual SDL installations
|
||||
o make SDL_CONFIG=/PATH/TO/sdl-config for unusual SDL installations
|
||||
|
||||
o make USE_SDL2=1 to compile against SDL2 instead of SDL-1.2
|
||||
|
||||
4.2. Windows
|
||||
|
||||
The QuakeSpasm developers cross-compile windows binaries using MinGW
|
||||
<http://www.mingw.org> and Mingw-w64 <http://mingw-w64.sf.net>.
|
||||
<http://www.mingw.org> and MinGW-w64 <http://mingw-w64.sf.net>.
|
||||
|
||||
The project can also be built using Visual Studio 2005 (or newer).
|
||||
|
||||
|
@ -267,27 +251,28 @@
|
|||
building from a console.
|
||||
|
||||
|
||||
5. Known Bugs
|
||||
5. Quake '2021 re-release'
|
||||
|
||||
Brightness issues should be fixed with GLSL gamma in 0.90.1, if your
|
||||
system supports OpenGL 2. For reference on older systems:
|
||||
QuakeSpasm 0.94.0 has initial support for playing the 2021 re-release
|
||||
content:
|
||||
|
||||
Some versions of Xorg and SDL have brightness issues.
|
||||
Try setting "export SDL_VIDEO_X11_NODIRECTCOLOR=1", or if you have
|
||||
Xorg >= 7.5 and broken brightness, these patched libSDL binaries may
|
||||
help.
|
||||
o Copy the quakespasm exe to your rerelease installation.
|
||||
|
||||
o Gamma patched libSDL (i686-linux)
|
||||
http://sf.net/projects/quakespasm/files/Support%20Files/libSDL_gamma_patched.tgz/download
|
||||
o Extract the localization folder from QuakeEX.kpf (which is actually
|
||||
a zip file), and place it in the rerelease directory. Linux (Unix)
|
||||
users can do the following, for example:
|
||||
unzip QuakeEX.kpf localization/loc_english.txt
|
||||
|
||||
o Gamma patched libSDL (x86_64-linux)
|
||||
http://sf.net/projects/quakespasm/files/Support%20Files/libSDL_gamma_patched-AMD64.tgz/download
|
||||
o Run quakespasm as you normally do.
|
||||
|
||||
|
||||
6. Changes
|
||||
|
||||
|
||||
6.1. Changes in 0.93.3
|
||||
6.1. Changes in 0.94.0
|
||||
|
||||
o Initial support for playing the 'Quake 2021 re-release' content
|
||||
(thanks to Andrei Drexler for bulk of the work.)
|
||||
|
||||
o Fix rendering bug when cl_bobcycle was set to zero (sf.net bug/41)
|
||||
|
||||
|
@ -299,10 +284,18 @@
|
|||
|
||||
o OpenGL: merged surface mark & cull optimizations from vkQuake.
|
||||
|
||||
o Changed 'model has a skin taller than 480' error into a warning
|
||||
|
||||
o Reject lit files if they're the wrong size (eg hipnotic/start.bsp
|
||||
vs id1/start.lit or just a bsp that no longer has any coloured
|
||||
lits, etc)
|
||||
|
||||
o External ent files are now versioned using 4 digit crc of the
|
||||
original map's ents, like e1m1@c49d.ent, which is much safer. The
|
||||
old method (e.g. e1m1.ent) still works but isn't recommended.
|
||||
|
||||
o Support for external vis files.
|
||||
|
||||
o Save: remove CR/LFs from level name to avoids broken saves, e.g.
|
||||
with autumn_sp map.
|
||||
|
||||
|
@ -321,22 +314,22 @@
|
|||
|
||||
6.2. Changes in 0.93.2
|
||||
|
||||
o Lightmaps are now dynamically allocated (from QSS), and
|
||||
BLOCK_WIDTH/HEIGHT raised from 128 to 256.
|
||||
o Lightmaps are now dynamically allocated (from QSS), and
|
||||
BLOCK_WIDTH/HEIGHT raised from 128 to 256.
|
||||
|
||||
o Fixed several uncheked limits that would crash the Slayer's
|
||||
Testaments mod (sf.net bug #33).
|
||||
o Fixed several uncheked limits that would crash the Slayer's
|
||||
Testaments mod (sf.net bug #33).
|
||||
|
||||
o Raised MAXALIASTRIS from 2048 to 4096, so that the Slayer's
|
||||
Testaments mod works.
|
||||
o Raised MAXALIASTRIS from 2048 to 4096, so that the Slayer's
|
||||
Testaments mod works.
|
||||
|
||||
o Fixed 'pants' and 'shirt' types so that those textures load
|
||||
correctly on platforms where char is unsigned by default
|
||||
(sf.net bug #28).
|
||||
o Fixed 'pants' and 'shirt' types so that those textures load
|
||||
correctly on platforms where char type is unsigned by default
|
||||
(sf.net bug #28).
|
||||
|
||||
o Windows audio: WASAPI-enabled SDL2 dlls function properly now.
|
||||
o Windows audio: WASAPI-enabled SDL2 dlls function properly now.
|
||||
|
||||
o Update the third-party libraries. Other fixes/cleanups.
|
||||
o Update the third-party libraries. Other fixes/cleanups.
|
||||
|
||||
|
||||
6.3. Changes in 0.93.1
|
||||
|
@ -348,7 +341,7 @@
|
|||
o Fixed buttons crushing players in 64-bit builds.
|
||||
|
||||
o Change controller movement to use cubic easing by default; added
|
||||
"joy_exponent_move" cvar.
|
||||
"joy_exponent_move" cvar.
|
||||
|
||||
o config.cfg is no longer written in case of a Sys_Error.
|
||||
|
||||
|
@ -397,10 +390,10 @@
|
|||
scale forward/side/up speed by "cl_movespeedkey" (usually 2), and
|
||||
to make "speedkey" act as "slowkey".
|
||||
|
||||
o Change "always run" menu option to offer three choices:
|
||||
- off (cl_alwaysrun 0, cl_forwardspeed 200, cl_backspeed 200)
|
||||
- vanilla (cl_alwaysrun 0, cl_forwardspeed 400, cl_backspeed 400)
|
||||
- quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
|
||||
o Change the "always run" menu option to offer three choices:
|
||||
off (cl_alwaysrun 0, cl_forwardspeed 200, cl_backspeed 200)
|
||||
vanilla (cl_alwaysrun 0, cl_forwardspeed 400, cl_backspeed 400)
|
||||
quakespasm (cl_alwaysrun 1, cl_forwardspeed 200, cl_backspeed 200)
|
||||
|
||||
o New "r_scale" cvar. Set to 2, 3, or 4 to render the view at 1/2,
|
||||
1/3, or 1/4 resolution.
|
||||
|
@ -1032,15 +1025,7 @@
|
|||
r_wateralpha, r_dynamic, r_novis
|
||||
|
||||
|
||||
7. Todo
|
||||
|
||||
o Add uHexen2's first person camera (and menu item)
|
||||
|
||||
o Native CD audio support (if desired). cd_sdl.c doesn't have proper
|
||||
volume controls and SDL2 doesn't support CD audio
|
||||
|
||||
|
||||
8. Copyright
|
||||
7. Copyright
|
||||
|
||||
o Quake and Quakespasm are released under the GNU GENERAL PUBLIC
|
||||
LICENSE Version 2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
@ -1050,7 +1035,7 @@
|
|||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
|
||||
9. Contact
|
||||
8. Contact
|
||||
|
||||
o QuakeSpasm Project page:
|
||||
https://sourceforge.net/projects/quakespasm/
|
||||
|
@ -1063,7 +1048,7 @@
|
|||
Sander <mailto:gmail - dot - com - username - a.h.vandijk>
|
||||
|
||||
|
||||
10. Links
|
||||
9. Links
|
||||
|
||||
o QuakeSpasm Homepage: http://quakespasm.sourceforge.net
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,6 +1,10 @@
|
|||
#ifndef XMP_H
|
||||
#define XMP_H
|
||||
|
||||
#if defined(EMSCRIPTEN)
|
||||
# include <emscripten.h>
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
@ -26,7 +30,6 @@ extern "C" {
|
|||
#elif defined(__SUNPRO_C) && defined(XMP_LDSCOPE_GLOBAL)
|
||||
# define LIBXMP_EXPORT __global
|
||||
#elif defined(EMSCRIPTEN)
|
||||
# include <emscripten.h>
|
||||
# define LIBXMP_EXPORT EMSCRIPTEN_KEEPALIVE
|
||||
# define LIBXMP_EXPORT_VAR
|
||||
#else
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,167 +0,0 @@
|
|||
; Definition file of vulkan-1.dll
|
||||
; Automatic generated by gendef
|
||||
; written by Kai Tietz 2008
|
||||
;
|
||||
; generated from VulkanSDK/1.0.54.0/Source/lib/vulkan-1.dll
|
||||
; to build an import library:
|
||||
; x86_64-w64-mingw32-dlltool --as-flags=--64 -m i386:x86-64 -k --as=x86_64-w64-mingw32-as --output-lib libvulkan-1.dll.a --input-def vulkan-1.def
|
||||
;
|
||||
LIBRARY "vulkan-1.dll"
|
||||
EXPORTS
|
||||
vkAcquireNextImageKHR
|
||||
vkAllocateCommandBuffers
|
||||
vkAllocateDescriptorSets
|
||||
vkAllocateMemory
|
||||
vkBeginCommandBuffer
|
||||
vkBindBufferMemory
|
||||
vkBindImageMemory
|
||||
vkCmdBeginQuery
|
||||
vkCmdBeginRenderPass
|
||||
vkCmdBindDescriptorSets
|
||||
vkCmdBindIndexBuffer
|
||||
vkCmdBindPipeline
|
||||
vkCmdBindVertexBuffers
|
||||
vkCmdBlitImage
|
||||
vkCmdClearAttachments
|
||||
vkCmdClearColorImage
|
||||
vkCmdClearDepthStencilImage
|
||||
vkCmdCopyBuffer
|
||||
vkCmdCopyBufferToImage
|
||||
vkCmdCopyImage
|
||||
vkCmdCopyImageToBuffer
|
||||
vkCmdCopyQueryPoolResults
|
||||
vkCmdDispatch
|
||||
vkCmdDispatchIndirect
|
||||
vkCmdDraw
|
||||
vkCmdDrawIndexed
|
||||
vkCmdDrawIndexedIndirect
|
||||
vkCmdDrawIndirect
|
||||
vkCmdEndQuery
|
||||
vkCmdEndRenderPass
|
||||
vkCmdExecuteCommands
|
||||
vkCmdFillBuffer
|
||||
vkCmdNextSubpass
|
||||
vkCmdPipelineBarrier
|
||||
vkCmdPushConstants
|
||||
vkCmdResetEvent
|
||||
vkCmdResetQueryPool
|
||||
vkCmdResolveImage
|
||||
vkCmdSetBlendConstants
|
||||
vkCmdSetDepthBias
|
||||
vkCmdSetDepthBounds
|
||||
vkCmdSetEvent
|
||||
vkCmdSetLineWidth
|
||||
vkCmdSetScissor
|
||||
vkCmdSetStencilCompareMask
|
||||
vkCmdSetStencilReference
|
||||
vkCmdSetStencilWriteMask
|
||||
vkCmdSetViewport
|
||||
vkCmdUpdateBuffer
|
||||
vkCmdWaitEvents
|
||||
vkCmdWriteTimestamp
|
||||
vkCreateBuffer
|
||||
vkCreateBufferView
|
||||
vkCreateCommandPool
|
||||
vkCreateComputePipelines
|
||||
vkCreateDescriptorPool
|
||||
vkCreateDescriptorSetLayout
|
||||
vkCreateDevice
|
||||
vkCreateDisplayModeKHR
|
||||
vkCreateDisplayPlaneSurfaceKHR
|
||||
vkCreateEvent
|
||||
vkCreateFence
|
||||
vkCreateFramebuffer
|
||||
vkCreateGraphicsPipelines
|
||||
vkCreateImage
|
||||
vkCreateImageView
|
||||
vkCreateInstance
|
||||
vkCreatePipelineCache
|
||||
vkCreatePipelineLayout
|
||||
vkCreateQueryPool
|
||||
vkCreateRenderPass
|
||||
vkCreateSampler
|
||||
vkCreateSemaphore
|
||||
vkCreateShaderModule
|
||||
vkCreateSharedSwapchainsKHR
|
||||
vkCreateSwapchainKHR
|
||||
vkCreateWin32SurfaceKHR
|
||||
vkDestroyBuffer
|
||||
vkDestroyBufferView
|
||||
vkDestroyCommandPool
|
||||
vkDestroyDescriptorPool
|
||||
vkDestroyDescriptorSetLayout
|
||||
vkDestroyDevice
|
||||
vkDestroyEvent
|
||||
vkDestroyFence
|
||||
vkDestroyFramebuffer
|
||||
vkDestroyImage
|
||||
vkDestroyImageView
|
||||
vkDestroyInstance
|
||||
vkDestroyPipeline
|
||||
vkDestroyPipelineCache
|
||||
vkDestroyPipelineLayout
|
||||
vkDestroyQueryPool
|
||||
vkDestroyRenderPass
|
||||
vkDestroySampler
|
||||
vkDestroySemaphore
|
||||
vkDestroyShaderModule
|
||||
vkDestroySurfaceKHR
|
||||
vkDestroySwapchainKHR
|
||||
vkDeviceWaitIdle
|
||||
vkEndCommandBuffer
|
||||
vkEnumerateDeviceExtensionProperties
|
||||
vkEnumerateDeviceLayerProperties
|
||||
vkEnumerateInstanceExtensionProperties
|
||||
vkEnumerateInstanceLayerProperties
|
||||
vkEnumeratePhysicalDevices
|
||||
vkFlushMappedMemoryRanges
|
||||
vkFreeCommandBuffers
|
||||
vkFreeDescriptorSets
|
||||
vkFreeMemory
|
||||
vkGetBufferMemoryRequirements
|
||||
vkGetDeviceMemoryCommitment
|
||||
vkGetDeviceProcAddr
|
||||
vkGetDeviceQueue
|
||||
vkGetDisplayModePropertiesKHR
|
||||
vkGetDisplayPlaneCapabilitiesKHR
|
||||
vkGetDisplayPlaneSupportedDisplaysKHR
|
||||
vkGetEventStatus
|
||||
vkGetFenceStatus
|
||||
vkGetImageMemoryRequirements
|
||||
vkGetImageSparseMemoryRequirements
|
||||
vkGetImageSubresourceLayout
|
||||
vkGetInstanceProcAddr
|
||||
vkGetPhysicalDeviceDisplayPlanePropertiesKHR
|
||||
vkGetPhysicalDeviceDisplayPropertiesKHR
|
||||
vkGetPhysicalDeviceFeatures
|
||||
vkGetPhysicalDeviceFormatProperties
|
||||
vkGetPhysicalDeviceImageFormatProperties
|
||||
vkGetPhysicalDeviceMemoryProperties
|
||||
vkGetPhysicalDeviceProperties
|
||||
vkGetPhysicalDeviceQueueFamilyProperties
|
||||
vkGetPhysicalDeviceSparseImageFormatProperties
|
||||
vkGetPhysicalDeviceSurfaceCapabilitiesKHR
|
||||
vkGetPhysicalDeviceSurfaceFormatsKHR
|
||||
vkGetPhysicalDeviceSurfacePresentModesKHR
|
||||
vkGetPhysicalDeviceSurfaceSupportKHR
|
||||
vkGetPhysicalDeviceWin32PresentationSupportKHR
|
||||
vkGetPipelineCacheData
|
||||
vkGetQueryPoolResults
|
||||
vkGetRenderAreaGranularity
|
||||
vkGetSwapchainImagesKHR
|
||||
vkInvalidateMappedMemoryRanges
|
||||
vkMapMemory
|
||||
vkMergePipelineCaches
|
||||
vkQueueBindSparse
|
||||
vkQueuePresentKHR
|
||||
vkQueueSubmit
|
||||
vkQueueWaitIdle
|
||||
vkResetCommandBuffer
|
||||
vkResetCommandPool
|
||||
vkResetDescriptorPool
|
||||
vkResetEvent
|
||||
vkResetFences
|
||||
vkSetEvent
|
||||
vkUnmapMemory
|
||||
vkUpdateDescriptorSets
|
||||
vkWaitForFences
|
Binary file not shown.
|
@ -1,167 +0,0 @@
|
|||
; Definition file of vulkan-1.dll
|
||||
; Automatic generated by gendef
|
||||
; written by Kai Tietz 2008
|
||||
;
|
||||
; generated from VulkanSDK/1.0.54.0/Source/lib32/vulkan-1.dll
|
||||
; to build an import library:
|
||||
; i686-w64-mingw32-dlltool --as-flags=--32 -m i386 -k --as=i686-w64-mingw32-as --output-lib libvulkan-1.dll.a --input-def vulkan-1.def
|
||||
;
|
||||
LIBRARY "vulkan-1.dll"
|
||||
EXPORTS
|
||||
vkAcquireNextImageKHR@40
|
||||
vkAllocateCommandBuffers@12
|
||||
vkAllocateDescriptorSets@12
|
||||
vkAllocateMemory@16
|
||||
vkBeginCommandBuffer@8
|
||||
vkBindBufferMemory@28
|
||||
vkBindImageMemory@28
|
||||
vkCmdBeginQuery@20
|
||||
vkCmdBeginRenderPass@12
|
||||
vkCmdBindDescriptorSets@36
|
||||
vkCmdBindIndexBuffer@24
|
||||
vkCmdBindPipeline@16
|
||||
vkCmdBindVertexBuffers@20
|
||||
vkCmdBlitImage@40
|
||||
vkCmdClearAttachments@20
|
||||
vkCmdClearColorImage@28
|
||||
vkCmdClearDepthStencilImage@28
|
||||
vkCmdCopyBuffer@28
|
||||
vkCmdCopyBufferToImage@32
|
||||
vkCmdCopyImage@36
|
||||
vkCmdCopyImageToBuffer@32
|
||||
vkCmdCopyQueryPoolResults@48
|
||||
vkCmdDispatch@16
|
||||
vkCmdDispatchIndirect@20
|
||||
vkCmdDraw@20
|
||||
vkCmdDrawIndexed@24
|
||||
vkCmdDrawIndexedIndirect@28
|
||||
vkCmdDrawIndirect@28
|
||||
vkCmdEndQuery@16
|
||||
vkCmdEndRenderPass@4
|
||||
vkCmdExecuteCommands@12
|
||||
vkCmdFillBuffer@32
|
||||
vkCmdNextSubpass@8
|
||||
vkCmdPipelineBarrier@40
|
||||
vkCmdPushConstants@28
|
||||
vkCmdResetEvent@16
|
||||
vkCmdResetQueryPool@20
|
||||
vkCmdResolveImage@36
|
||||
vkCmdSetBlendConstants@8
|
||||
vkCmdSetDepthBias@16
|
||||
vkCmdSetDepthBounds@12
|
||||
vkCmdSetEvent@16
|
||||
vkCmdSetLineWidth@8
|
||||
vkCmdSetScissor@16
|
||||
vkCmdSetStencilCompareMask@12
|
||||
vkCmdSetStencilReference@12
|
||||
vkCmdSetStencilWriteMask@12
|
||||
vkCmdSetViewport@16
|
||||
vkCmdUpdateBuffer@32
|
||||
vkCmdWaitEvents@44
|
||||
vkCmdWriteTimestamp@20
|
||||
vkCreateBuffer@16
|
||||
vkCreateBufferView@16
|
||||
vkCreateCommandPool@16
|
||||
vkCreateComputePipelines@28
|
||||
vkCreateDescriptorPool@16
|
||||
vkCreateDescriptorSetLayout@16
|
||||
vkCreateDevice@16
|
||||
vkCreateDisplayModeKHR@24
|
||||
vkCreateDisplayPlaneSurfaceKHR@16
|
||||
vkCreateEvent@16
|
||||
vkCreateFence@16
|
||||
vkCreateFramebuffer@16
|
||||
vkCreateGraphicsPipelines@28
|
||||
vkCreateImage@16
|
||||
vkCreateImageView@16
|
||||
vkCreateInstance@12
|
||||
vkCreatePipelineCache@16
|
||||
vkCreatePipelineLayout@16
|
||||
vkCreateQueryPool@16
|
||||
vkCreateRenderPass@16
|
||||
vkCreateSampler@16
|
||||
vkCreateSemaphore@16
|
||||
vkCreateShaderModule@16
|
||||
vkCreateSharedSwapchainsKHR@20
|
||||
vkCreateSwapchainKHR@16
|
||||
vkCreateWin32SurfaceKHR@16
|
||||
vkDestroyBuffer@16
|
||||
vkDestroyBufferView@16
|
||||
vkDestroyCommandPool@16
|
||||
vkDestroyDescriptorPool@16
|
||||
vkDestroyDescriptorSetLayout@16
|
||||
vkDestroyDevice@8
|
||||
vkDestroyEvent@16
|
||||
vkDestroyFence@16
|
||||
vkDestroyFramebuffer@16
|
||||
vkDestroyImage@16
|
||||
vkDestroyImageView@16
|
||||
vkDestroyInstance@8
|
||||
vkDestroyPipeline@16
|
||||
vkDestroyPipelineCache@16
|
||||
vkDestroyPipelineLayout@16
|
||||
vkDestroyQueryPool@16
|
||||
vkDestroyRenderPass@16
|
||||
vkDestroySampler@16
|
||||
vkDestroySemaphore@16
|
||||
vkDestroyShaderModule@16
|
||||
vkDestroySurfaceKHR@16
|
||||
vkDestroySwapchainKHR@16
|
||||
vkDeviceWaitIdle@4
|
||||
vkEndCommandBuffer@4
|
||||
vkEnumerateDeviceExtensionProperties@16
|
||||
vkEnumerateDeviceLayerProperties@12
|
||||
vkEnumerateInstanceExtensionProperties@12
|
||||
vkEnumerateInstanceLayerProperties@8
|
||||
vkEnumeratePhysicalDevices@12
|
||||
vkFlushMappedMemoryRanges@12
|
||||
vkFreeCommandBuffers@20
|
||||
vkFreeDescriptorSets@20
|
||||
vkFreeMemory@16
|
||||
vkGetBufferMemoryRequirements@16
|
||||
vkGetDeviceMemoryCommitment@16
|
||||
vkGetDeviceProcAddr@8
|
||||
vkGetDeviceQueue@16
|
||||
vkGetDisplayModePropertiesKHR@20
|
||||
vkGetDisplayPlaneCapabilitiesKHR@20
|
||||
vkGetDisplayPlaneSupportedDisplaysKHR@16
|
||||
vkGetEventStatus@12
|
||||
vkGetFenceStatus@12
|
||||
vkGetImageMemoryRequirements@16
|
||||
vkGetImageSparseMemoryRequirements@20
|
||||
vkGetImageSubresourceLayout@20
|
||||
vkGetInstanceProcAddr@8
|
||||
vkGetPhysicalDeviceDisplayPlanePropertiesKHR@12
|
||||
vkGetPhysicalDeviceDisplayPropertiesKHR@12
|
||||
vkGetPhysicalDeviceFeatures@8
|
||||
vkGetPhysicalDeviceFormatProperties@12
|
||||
vkGetPhysicalDeviceImageFormatProperties@28
|
||||
vkGetPhysicalDeviceMemoryProperties@8
|
||||
vkGetPhysicalDeviceProperties@8
|
||||
vkGetPhysicalDeviceQueueFamilyProperties@12
|
||||
vkGetPhysicalDeviceSparseImageFormatProperties@32
|
||||
vkGetPhysicalDeviceSurfaceCapabilitiesKHR@16
|
||||
vkGetPhysicalDeviceSurfaceFormatsKHR@20
|
||||
vkGetPhysicalDeviceSurfacePresentModesKHR@20
|
||||
vkGetPhysicalDeviceSurfaceSupportKHR@20
|
||||
vkGetPhysicalDeviceWin32PresentationSupportKHR@8
|
||||
vkGetPipelineCacheData@20
|
||||
vkGetQueryPoolResults@40
|
||||
vkGetRenderAreaGranularity@16
|
||||
vkGetSwapchainImagesKHR@20
|
||||
vkInvalidateMappedMemoryRanges@12
|
||||
vkMapMemory@36
|
||||
vkMergePipelineCaches@20
|
||||
vkQueueBindSparse@20
|
||||
vkQueuePresentKHR@8
|
||||
vkQueueSubmit@20
|
||||
vkQueueWaitIdle@4
|
||||
vkResetCommandBuffer@8
|
||||
vkResetCommandPool@16
|
||||
vkResetDescriptorPool@16
|
||||
vkResetEvent@12
|
||||
vkResetFences@12
|
||||
vkSetEvent@12
|
||||
vkUnmapMemory@12
|
||||
vkUpdateDescriptorSets@20
|
||||
vkWaitForFences@24
|
Loading…
Reference in a new issue