From 8fb54b51c33628cfb334c7feab5d380adfc3ba4a Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 2 Nov 2019 12:59:59 +0100 Subject: [PATCH] - rewrote the screenshot code to use m_png as its backend. Mainly to finally get rid of kplib. There's really no use to keep such code around if alternatives are already present. --- source/CMakeLists.txt | 4 +- source/blood/src/barf.cpp | 3 - source/blood/src/blood.cpp | 2 +- source/blood/src/globals.cpp | 13 - source/blood/src/globals.h | 2 +- source/blood/src/osdcmd.cpp | 6 +- source/build/include/build.h | 5 +- source/build/include/kplib.h | 33 -- source/build/include/pngwrite.h | 39 --- source/build/src/common.cpp | 1 - source/build/src/defs.cpp | 1 - source/build/src/engine.cpp | 11 +- source/build/src/hightile.cpp | 1 - source/build/src/kplib.cpp | 548 ------------------------------- source/build/src/mdsprite.cpp | 1 - source/build/src/pngwrite.cpp | 97 ------ source/build/src/polymost.cpp | 1 - source/build/src/screenshot.cpp | 207 ++++-------- source/build/src/voxmodel.cpp | 1 - source/common/fonts/v_font.cpp | 4 +- source/common/gameconfigfile.cpp | 4 +- source/common/searchpaths.cpp | 2 +- source/common/utility/files.h | 8 +- source/common/utility/m_png.cpp | 1 + source/{ => common}/version.h | 55 +--- source/duke3d/src/actors.cpp | 3 - source/duke3d/src/game.cpp | 9 +- source/duke3d/src/osdcmds.cpp | 12 +- source/gitinfo.cpp | 65 ++++ source/rr/src/game.cpp | 5 +- source/rr/src/osdcmds.cpp | 7 +- source/sw/src/draw.cpp | 2 +- 32 files changed, 163 insertions(+), 990 deletions(-) delete mode 100644 source/build/include/kplib.h delete mode 100644 source/build/include/pngwrite.h delete mode 100644 source/build/src/kplib.cpp delete mode 100644 source/build/src/pngwrite.cpp rename source/{ => common}/version.h (57%) create mode 100644 source/gitinfo.cpp diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 802c2169a..55a380f82 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -685,6 +685,7 @@ set( FASTMATH_SOURCES # Another bit of cruft just to make S(hit)DL happy... sdlappicon.cpp + gitinfo.cpp ) @@ -745,13 +746,11 @@ set (PCH_SOURCES build/src/glsurface.cpp build/src/hash.cpp build/src/hightile.cpp - build/src/kplib.cpp build/src/mdsprite.cpp build/src/mhk.cpp build/src/mutex.cpp build/src/osd.cpp build/src/palette.cpp - build/src/pngwrite.cpp build/src/polymost.cpp build/src/pragmas.cpp build/src/rev.cpp @@ -872,6 +871,7 @@ endif() target_link_libraries( demolition ${DEMOLITION_LIBS} gdtoa lzma duke3d blood rr sw ) include_directories( + ${CMAKE_CURRENT_SOURCE_DIR} build/include mact/include audiolib/include diff --git a/source/blood/src/barf.cpp b/source/blood/src/barf.cpp index 9635edcf8..839f59766 100644 --- a/source/blood/src/barf.cpp +++ b/source/blood/src/barf.cpp @@ -24,9 +24,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "ns.h" // Must come before everything else! #include "compat.h" -#ifdef WITHKPLIB -#include "kplib.h" -#endif #include "common_game.h" #include "resource.h" #include "misc.h" diff --git a/source/blood/src/blood.cpp b/source/blood/src/blood.cpp index 94f6ad144..2f47558d3 100644 --- a/source/blood/src/blood.cpp +++ b/source/blood/src/blood.cpp @@ -953,7 +953,7 @@ void LocalKeys(void) case sc_F11: break; case sc_F12: - videoCaptureScreen("blud0000.tga", 0); + videoCaptureScreen(); break; } } diff --git a/source/blood/src/globals.cpp b/source/blood/src/globals.cpp index af840518d..a9d70643a 100644 --- a/source/blood/src/globals.cpp +++ b/source/blood/src/globals.cpp @@ -67,17 +67,4 @@ void _consoleSysMsg(const char* pzFormat, ...) { OSD_Printf(OSDTEXT_RED "%s(%i): %s\n", _module, _line, buffer); } - -const char *GetVersionString(void) -{ - if (!gVersionString) - { - gVersionString = gVersionStringBuf; - if (!gVersionString) - return NULL; - sprintf(gVersionString, "%d.%02d", EXEVERSION / 100, EXEVERSION % 100); - } - return gVersionString; -} - END_BLD_NS diff --git a/source/blood/src/globals.h b/source/blood/src/globals.h index 1a3e778f5..e8349a456 100644 --- a/source/blood/src/globals.h +++ b/source/blood/src/globals.h @@ -24,6 +24,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "compat.h" #include "build.h" #include "resource.h" +#include "version.h" BEGIN_BLD_NS @@ -36,6 +37,5 @@ extern int gGamma; extern bool bVanilla; extern Resource &gSysRes; -const char *GetVersionString(void); END_BLD_NS diff --git a/source/blood/src/osdcmd.cpp b/source/blood/src/osdcmd.cpp index 4a94dff4b..f83c00f5c 100644 --- a/source/blood/src/osdcmd.cpp +++ b/source/blood/src/osdcmd.cpp @@ -465,11 +465,7 @@ static int osdcmd_quickload(osdcmdptr_t UNUSED(parm)) static int osdcmd_screenshot(osdcmdptr_t parm) { - static const char *fn = "blud0000.png"; - - if (parm->numparms == 1 && !Bstrcasecmp(parm->parms[0], "tga")) - videoCaptureScreenTGA(fn, 0); - else videoCaptureScreen(fn, 0); + videoCaptureScreen(); return OSDCMD_OK; } diff --git a/source/build/include/build.h b/source/build/include/build.h index 00ef486a0..f4326c123 100644 --- a/source/build/include/build.h +++ b/source/build/include/build.h @@ -1232,8 +1232,7 @@ static FORCE_INLINE int32_t spriteheightofs(int16_t i, int32_t *height, int32_t return spriteheightofsptr((uspriteptr_t)&sprite[i], height, alsotileyofs); } -int videoCaptureScreen(const char *filename, char inverseit) ATTRIBUTE((nonnull(1))); -int videoCaptureScreenTGA(const char *filename, char inverseit) ATTRIBUTE((nonnull(1))); +int videoCaptureScreen(); struct OutputFileCounter { uint16_t count = 0; @@ -1285,8 +1284,6 @@ enum cutsceneflags { CUTSCENE_TEXTUREFILTER = 4, }; -extern int32_t benchmarkScreenshot; - #ifdef USE_OPENGL enum { diff --git a/source/build/include/kplib.h b/source/build/include/kplib.h deleted file mode 100644 index fbce46cc1..000000000 --- a/source/build/include/kplib.h +++ /dev/null @@ -1,33 +0,0 @@ - -#ifndef compat_h_ -#include "compat.h" -#endif - -#include "vfs.h" - -typedef struct -{ - buildvfs_FILE fil; //0:no file open, !=0:open file (either stand-alone or zip) - int32_t comptyp; //0:raw data (can be ZIP or stand-alone), 8:PKZIP LZ77 *flate - int32_t seek0; //0:stand-alone file, !=0: start of zip compressed stream data - int32_t compleng;//Global variable for compression FIFO - int32_t comptell;//Global variable for compression FIFO - int32_t leng; //Uncompressed file size (bytes) - int32_t pos; //Current uncompressed relative file position (0<=pos<=leng) - int32_t endpos; //Temp global variable for kzread - int32_t jmpplc; //Store place where decompression paused - int32_t i; //For stand-alone/ZIP comptyp#0, this is like "uncomptell" - //For ZIP comptyp#8&btype==0 "<64K store", this saves i state - int32_t bfinal; //LZ77 decompression state (for later calls) -} kzfilestate; - -extern kzfilestate kzfs; - -extern uint8_t toupperlookup[256]; -static inline int32_t filnamcmp(const char *j, const char *i) -{ - // If we reach at the end of both strings, we are done - while (*i && *j && (toupperlookup[*i] == toupperlookup[*j])) - i++, j++; - return *i != '\0' || *j != '\0'; -} diff --git a/source/build/include/pngwrite.h b/source/build/include/pngwrite.h deleted file mode 100644 index 8620efd78..000000000 --- a/source/build/include/pngwrite.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef __PNGWRITE_H__ -#define __PNGWRITE_H__ - -#include - -#include "vfs.h" - -#define CHUNK_COMPRESSED 1 -#define CHUNK_ROW 2 - -enum -{ - PNG_TRUECOLOR = 2, - PNG_INDEXED = 3, -}; - -#pragma pack(push, 1) -typedef struct -{ - z_stream *zs; - buildvfs_FILE file; - uint8_t *pal_data; - uint16_t pal_entries; - uint8_t *text; - uint8_t textlen; -} pngwrite_t; - -typedef struct -{ - uint32_t width, height; - uint8_t depth, type, filler[3]; -} png_ihdr_t; -#pragma pack(pop) - -void png_set_pal(uint8_t const * data, int numentries); -void png_set_text(char const * keyword, char const * text); -void png_write(buildvfs_FILE const file, int const width, int const height, uint8_t const type, uint8_t const * const data); - -#endif diff --git a/source/build/src/common.cpp b/source/build/src/common.cpp index cf7fa1f8a..3d195699f 100644 --- a/source/build/src/common.cpp +++ b/source/build/src/common.cpp @@ -3,7 +3,6 @@ #include "build.h" #include "scriptfile.h" #include "cache1d.h" -#include "kplib.h" #include "baselayer.h" #include "common.h" diff --git a/source/build/src/defs.cpp b/source/build/src/defs.cpp index a58e9e967..2f8bedfca 100644 --- a/source/build/src/defs.cpp +++ b/source/build/src/defs.cpp @@ -11,7 +11,6 @@ #include "baselayer.h" #include "scriptfile.h" #include "cache1d.h" -#include "kplib.h" #include "lz4.h" #include "common.h" #include "mdsprite.h" // md3model_t diff --git a/source/build/src/engine.cpp b/source/build/src/engine.cpp index d2f0c1e14..088e9c390 100644 --- a/source/build/src/engine.cpp +++ b/source/build/src/engine.cpp @@ -131,8 +131,6 @@ static int32_t distrecipagecnt = 0; static int32_t *lookups = NULL; static int32_t beforedrawrooms = 1; -int32_t benchmarkScreenshot = 0; - static int32_t oxdimen = -1, oviewingrange = -1, oxyaspect = -1; // r_usenewaspect is the cvar, newaspect_enable to trigger the new behaviour in the code @@ -4654,8 +4652,7 @@ static void classicDrawBunches(int32_t bunch) yax_globalbunch, sectnum, wallnum); printext256(8,8, whitecol,0, tmpbuf, 0); - Bsprintf(fn, "engshot%04d.png", engine_screenshot); - videoCaptureScreen(fn, 0); + videoCaptureScreen(); engine_screenshot++; Bmemcpy((char *)frameplace, bakframe, xdim*ydim); @@ -10464,12 +10461,6 @@ void videoNextPage(void) } videoEndDrawing(); //}}} - if (benchmarkScreenshot) - { - videoCaptureScreen("reference0000.png", 0); - benchmarkScreenshot = 0; - } - OSD_Draw(); videoShowFrame(0); diff --git a/source/build/src/hightile.cpp b/source/build/src/hightile.cpp index d4027f226..8708850f2 100644 --- a/source/build/src/hightile.cpp +++ b/source/build/src/hightile.cpp @@ -6,7 +6,6 @@ #include "build.h" #include "compat.h" -#include "kplib.h" #include "hightile.h" #include "baselayer.h" diff --git a/source/build/src/kplib.cpp b/source/build/src/kplib.cpp deleted file mode 100644 index 4fbbf5e47..000000000 --- a/source/build/src/kplib.cpp +++ /dev/null @@ -1,548 +0,0 @@ -/************************************************************************************************** -KPLIB.C: Ken's Picture LIBrary written by Ken Silverman -Copyright (c) 1998-2008 Ken Silverman -Ken Silverman's official web site: http://advsys.net/ken - -Features of KPLIB.C: - * Routines for reading files out of ZIP/GRP files. All ZIP/GRP functions start with "kz". - * Multi-platform support: Dos/Windows/Linux/Mac/etc.. - * Compact code, all in a single source file. Yeah, bad design on my part... but makes life - easier for everyone else - you simply add a single C file to your project, throw a few - externs in there, add the function calls, and you're done! - -Brief history: -1998?: Wrote KPEG, a JPEG viewer for DOS -2000: Wrote KPNG, a PNG viewer for DOS -2001: Combined KPEG & KPNG, ported to Visual C, and made it into a library called KPLIB.C -2002: Added support for TGA,GIF,CEL,ZIP -2003: Added support for BMP -05/18/2004: Added support for 8&24 bit PCX -12/09/2005: Added support for progressive JPEG -01/05/2006: Added support for DDS -07/28/2007: Added support for GRP (Build Engine archive) - -I offer this code to the community for free use - all I ask is that my name be included in the -credits. - --Ken S. -**************************************************************************************************/ - -#include "compat.h" -#include "baselayer.h" -#include "kplib.h" -#include "pragmas.h" - -#include "vfs.h" - -#if !defined(_WIN32) -static FORCE_INLINE CONSTEXPR int32_t klrotl(int32_t i, int sh) { return (i >> (-sh)) | (i << sh); } -#else -# define klrotl(i, sh) _lrotl(i, sh) -# ifdef __clang__ -# include -# else -# include -# endif -#endif - -//use GCC-specific extension to force symbol name to be something in particular to override underscoring. -#if defined(__GNUC__) && defined(__i386__) && !defined(NOASM) -#define ASMNAME(x) asm(x) -#else -#define ASMNAME(x) -#endif - -static intptr_t kp_frameplace; -static int32_t kp_bytesperline, kp_xres, kp_yres; - -static CONSTEXPR const int32_t pow2mask[32] = -{ - 0x00000000,0x00000001,0x00000003,0x00000007, - 0x0000000f,0x0000001f,0x0000003f,0x0000007f, - 0x000000ff,0x000001ff,0x000003ff,0x000007ff, - 0x00000fff,0x00001fff,0x00003fff,0x00007fff, - 0x0000ffff,0x0001ffff,0x0003ffff,0x0007ffff, - 0x000fffff,0x001fffff,0x003fffff,0x007fffff, - 0x00ffffff,0x01ffffff,0x03ffffff,0x07ffffff, - 0x0fffffff,0x1fffffff,0x3fffffff,0x7fffffff, -}; -static CONSTEXPR const int32_t pow2long[32] = -{ - 0x00000001,0x00000002,0x00000004,0x00000008, - 0x00000010,0x00000020,0x00000040,0x00000080, - 0x00000100,0x00000200,0x00000400,0x00000800, - 0x00001000,0x00002000,0x00004000,0x00008000, - 0x00010000,0x00020000,0x00040000,0x00080000, - 0x00100000,0x00200000,0x00400000,0x00800000, - 0x01000000,0x02000000,0x04000000,0x08000000, - 0x10000000,0x20000000,0x40000000,(int32_t)0x80000000, -}; - -//Hack for peekbits,getbits,suckbits (to prevent lots of duplicate code) -// 0: PNG: do 12-byte chunk_header removal hack -// !=0: ZIP: use 64K buffer (olinbuf) -static int32_t zipfilmode; -kzfilestate kzfs; - -// GCC 4.6 LTO build fix -#ifdef USING_LTO -# define B_KPLIB_STATIC -#else -# define B_KPLIB_STATIC static -#endif - -//Initialized tables (can't be in union) -//jpg: png: -// crmul 16384 abstab10 4096 -// cbmul 16384 hxbit 472 -// dct 4608 pow2mask 128* -// colclip 4096 -// colclipup8 4096 -// colclipup16 4096 -// unzig 256 -// pow2mask 128* -// dcflagor 64 - -B_KPLIB_STATIC int32_t ATTRIBUTE((used)) palcol[256] ASMNAME("palcol"); -static int32_t paleng, bakcol, numhufblocks, zlibcompflags; -static int8_t kcoltype, filtype, bitdepth; - -//============================ KPNGILIB begins =============================== - -//07/31/2000: KPNG.C first ported to C from READPNG.BAS -//10/11/2000: KPNG.C split into 2 files: KPNG.C and PNGINLIB.C -//11/24/2000: Finished adding support for coltypes 4&6 -//03/31/2001: Added support for Adam7-type interlaced images -//Currently, there is no support for: -// * 16-bit color depth -// * Some useless ancillary chunks, like: gAMA(gamma) & pHYs(aspect ratio) - -//.PNG specific variables: -static int32_t bakr = 0x80, bakg = 0x80, bakb = 0x80; //this used to be public... -static int32_t gslidew = 0, gslider = 0, xm, xmn[4], xr0, xr1, xplc, yplc; -static intptr_t nfplace; -static int32_t clen[320], cclen[19], bitpos, filt, xsiz, ysiz; -int32_t xsizbpl, ixsiz, ixoff, iyoff, ixstp, iystp, intlac, nbpl; -B_KPLIB_STATIC int32_t ATTRIBUTE((used)) trnsrgb ASMNAME("trnsrgb"); -static int32_t ccind[19] = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15}; -static int32_t hxbit[59][2], ibuf0[288], nbuf0[32], ibuf1[32], nbuf1[32]; -static const uint8_t *filptr; -static uint8_t slidebuf[32768], opixbuf0[4], opixbuf1[4]; -static uint8_t pnginited = 0; -B_KPLIB_STATIC uint8_t olinbuf[131072] ASMNAME("olinbuf"); //WARNING:max kp_xres is: 131072/bpp-1 -B_KPLIB_STATIC int32_t ATTRIBUTE((used)) abstab10[1024] ASMNAME("abstab10"); - -//Variables to speed up dynamic Huffman decoding: -#define LOGQHUFSIZ0 9 -#define LOGQHUFSIZ1 6 -static int32_t qhufval0[1<(kzfs.compleng-kzfs.comptell, sizeof(olinbuf)-4); - buildvfs_fread(&olinbuf[4], n, 1, kzfs.fil); - kzfs.comptell += n; - bitpos -= ((sizeof(olinbuf)-4)<<3); - return; - } - - if (nfilptr) - { - filptr = nfilptr; nfilptr = 0; - bitpos -= ((nbitpos-4)<<3); - return; - } - //if (n_from_suckbits < 4) will it crash? - - //|===|===|crc|lng|typ|===|===| - // \ fakebuf: / - // |===|===| - //----x O---x O-------- - nbitpos = B_BIG32(B_UNBUF32(&filptr[8])); - nfilptr = &filptr[nbitpos+12]; - B_BUF32(&fakebuf[0], B_UNBUF32(&filptr[0])); //Copy last dword of IDAT chunk - if (B_UNBUF32(&filptr[12]) == B_LITTLE32(0x54414449)) //Copy 1st dword of next IDAT chunk - B_BUF32(&fakebuf[4], B_UNBUF32(&filptr[16])); - filptr = &fakebuf[4]; bitpos -= 32; -} - -static inline int32_t peekbits(int32_t n) { return (B_LITTLE32(B_UNBUF32(&filptr[bitpos>>3]))>>(bitpos&7))&pow2mask[n]; } -static inline void suckbits(int32_t n) { bitpos += n; if (bitpos < 0) return; suckbitsnextblock(); } -static inline int32_t getbits(int32_t n) { int32_t i = peekbits(n); suckbits(n); return i; } - -static int32_t hufgetsym(int32_t *hitab, const int32_t *hbmax) -{ - int32_t v, n; - - v = n = 0; - do { v = (v<<1)+getbits(1)+hbmax[n]-hbmax[n+1]; n++; } - while (v >= 0); - return hitab[hbmax[n]+v]; -} - -//This did not result in a speed-up on P4-3.6Ghz (02/22/2005) -//static int32_t hufgetsym_skipb (int32_t *hitab, int32_t *hbmax, int32_t n, int32_t addit) -//{ -// int32_t v; -// -// v = bitrev(getbits(n),n)+addit; -// do { v = (v<<1)+getbits(1)+hbmax[n]-hbmax[n+1]; n++; } while (v >= 0); -// return hitab[hbmax[n]+v]; -//} - -static void qhufgencode(const int32_t *hitab, const int32_t *hbmax, int32_t *qhval, uint8_t *qhbit, int32_t numbits) -{ - int32_t i, j, k, n, r; - - //r is the bit reverse of i. Ex: if: i = 1011100111, r = 1110011101 - i = r = 0; - for (n=1; n<=numbits; n++) - for (k=hbmax[n-1]; k>n)&1) + hbmax[n]-hbmax[n+1]; - // - //n = numbits; - //k = hbmax[n]-r; - // - //j = peekbits(LOGQHUFSIZ); i = qhufval[j]; j = qhufbit[j]; - // - //i = j = 0; - //do - //{ - // i = (i<<1)+getbits(1)+nbuf0[j]-nbuf0[j+1]; j++; - //} while (i >= 0); - //i = ibuf0[nbuf0[j]+i]; - //qhval[r] = k; - - qhbit[r] = 0; //n-32; - } - - // //hufgetsym_skipb related code: - //for(k=n=0;n=0; i--) tbuf[inbuf[i]]++; - tbuf[0] = hbmax[0] = 0; //Hack to remove symbols of length 0? - for (i=0; i<28; i += 4) - { - tbufptr = &tbuf[i]; - hbmaxptr = &hbmax[i]; - - *(hbmaxptr+1) = *hbmaxptr + *tbufptr; - *(hbmaxptr+2) = *(hbmaxptr+1) + *(tbufptr+1); - *(hbmaxptr+3) = *(hbmaxptr+2) + *(tbufptr+2); - *(hbmaxptr+4) = *(hbmaxptr+3) + *(tbufptr+3); - } - - tbufptr = &tbuf[i]; - hbmaxptr = &hbmax[i]; - - *(hbmaxptr+1) = *hbmaxptr + *tbufptr; - *(hbmaxptr+2) = *(hbmaxptr+1) + *(tbufptr+1); - *(hbmaxptr+3) = *(hbmaxptr+2) + *(tbufptr+2); - - for (i=0; i>i)&15); - iyoff = ((0x00402010>>i)&15); - if (((ixoff >= xsiz) || (iyoff >= ysiz)) && (intlac >= 2)) { i = -1; intlac--; } - } - while (i < 0); - j = ((0x33221100>>i)&15); ixstp = (1<>i)&15); iystp = (1<>3) = 2 - //j=3,ixoff=4 2 ((12+(1<<3)-1 - 4)>>3) = 1 - //j=2,ixoff=2 3 4 5 ((12+(1<<2)-1 - 2)>>2) = 3 - //j=1,ixoff=1 6 7 8 9 a b ((12+(1<<1)-1 - 1)>>1) = 6 - ixsiz = ((xsiz+ixstp-1-ixoff)>>j); //It's confusing! See the above example. - nbpl = (kp_bytesperline<>(kcoltype<<2))&15)*ixsiz; - switch (bitdepth) - { - case 1: xsizbpl = ((xsizbpl+7)>>3); break; - case 2: xsizbpl = ((xsizbpl+3)>>2); break; - case 4: xsizbpl = ((xsizbpl+1)>>1); break; - } - - Bmemset(olinbuf,0,(xsizbpl+1)*sizeof(olinbuf[0])); - B_BUF32(&opixbuf0[0], 0); - B_BUF32(&opixbuf1[0], 0); - xplc = xsizbpl; yplc = iyoff; xm = 0; filt = -1; - - i = ixoff; i = (((-(i>=0))|(ixstp-1))&i); - k = (((-(yplc>=0))|(iystp-1))&yplc); - nfplace = k*kp_bytesperline + (i<<2) + kp_frameplace; - - //Precalculate x-clipping to screen borders (speeds up putbuf) - //Equation: (0 <= xr <= ixsiz) && (0 <= xr*ixstp+globxoffs+ixoff <= kp_xres) - xr0 = max((-ixoff+(1<>j,0); - xr1 = min((kp_xres-ixoff+(1<>j,ixsiz); - xr0 = ixsiz-xr0; - xr1 = ixsiz-xr1; - - if (kcoltype == 4) { xr0 = xr0*2; xr1 = xr1*2; } - else if (kcoltype == 2) { xr0 = xr0*3-2; xr1 = xr1*3-2; } - else if (kcoltype == 6) { xr0 = xr0*4-2; xr1 = xr1*4-2; } - else - { - switch (bitdepth) - { - case 1: xr0 += ((-ixsiz)&7)+7; - xr1 += ((-ixsiz)&7)+7; break; - case 2: xr0 = ((xr0+((-ixsiz)&3)+3)<<1); - xr1 = ((xr1+((-ixsiz)&3)+3)<<1); break; - case 4: xr0 = ((xr0+((-ixsiz)&1)+1)<<2); - xr1 = ((xr1+((-ixsiz)&1)+1)<<2); break; - } - } - ixstp <<= 2; - return 0; -} - - -static inline int32_t Paeth686(int32_t const a, int32_t const b, int32_t c) -{ - int32_t const * const ptr = &abstab10[(c - a) - (b - 512)]; - int32_t const esi = *(ptr + b); - int32_t edi = *(ptr + c); - if (edi >= esi) edi = esi, c = b; - return (edi < *(ptr + a)) ? c : a; -} - -static inline void rgbhlineasm(int32_t x, int32_t xr1, intptr_t p, int32_t ixstp) -{ - if (!trnsrgb) - { - for (; x>xr1; p+=ixstp,x-=3) B_BUF32((void *) p, (B_UNBUF32(&olinbuf[x]))|B_LITTLE32(0xff000000)); - return; - } - for (; x>xr1; p+=ixstp,x-=3) - { - int32_t i = (B_UNBUF32(&olinbuf[x]))|B_LITTLE32(0xff000000); - if (i == trnsrgb) i &= B_LITTLE32(0xffffff); - B_BUF32((void *) p, i); - } -} - -static inline void pal8hlineasm(int32_t x, int32_t xr1, intptr_t p, int32_t ixstp) -{ - for (; x>xr1; p+=ixstp,x--) B_BUF32((void *) p, palcol[olinbuf[x]]); -} - - -//Autodetect filter -// /f0: 0000000... -// /f1: 1111111... -// /f2: 2222222... -// /f3: 1333333... -// /f3: 3333333... -// /f4: 4444444... -// /f5: 0142321... -static int32_t filter1st, filterest; -static void putbuf(const uint8_t *buf, int32_t leng) -{ - int32_t i; - intptr_t p; - - if (filt < 0) - { - if (leng <= 0) return; - filt = buf[0]; - if (filter1st < 0) filter1st = filt; else filterest |= (1< leng) x = leng; - switch (filt) - { - case 0: - while (i < x) { olinbuf[xplc--] = buf[i++]; } - break; - case 1: - while (i < x) - { - olinbuf[xplc--] = (uint8_t)(opixbuf1[xm] += buf[i++]); - xm = xmn[xm]; - } - break; - case 2: - while (i < x) { olinbuf[xplc--] += (uint8_t)buf[i++]; } - break; - case 3: - while (i < x) - { - opixbuf1[xm] = olinbuf[xplc] = (uint8_t)(((opixbuf1[xm]+olinbuf[xplc])>>1)+buf[i++]); - xm = xmn[xm]; xplc--; - } - break; - case 4: - while (i < x) - { - opixbuf1[xm] = (uint8_t)(Paeth686(opixbuf1[xm],olinbuf[xplc],opixbuf0[xm])+buf[i++]); - opixbuf0[xm] = olinbuf[xplc]; - olinbuf[xplc--] = opixbuf1[xm]; - xm = xmn[xm]; - } - break; - } - - if (xplc > 0) return; - - //Draw line! - if ((uint32_t)yplc < (uint32_t)kp_yres) - { - x = xr0; p = nfplace; - switch (kcoltype) - { - case 2: rgbhlineasm(x,xr1,p,ixstp); break; - case 4: - for (; x>xr1; p+=ixstp,x-=2) - B_BUF32((void *) p, (palcol[olinbuf[x]]&B_LITTLE32(0xffffff))|B_BIG32((int32_t)olinbuf[x-1])); - break; - case 6: - for (; x>xr1; p+=ixstp,x-=4) - { - *(char *)(p) = olinbuf[x ]; //B - *(char *)(p+1) = olinbuf[x+1]; //G - *(char *)(p+2) = olinbuf[x+2]; //R - *(char *)(p+3) = olinbuf[x-1]; //A - } - break; - default: - switch (bitdepth) - { - case 1: for (; x>xr1; p+=ixstp,x--) B_BUF32((void *) p, palcol[olinbuf[x>>3]>>(x&7)]); break; - case 2: for (; x>xr1; p+=ixstp,x-=2) B_BUF32((void *) p, palcol[olinbuf[x>>3]>>(x&6)]); break; - case 4: for (; x>xr1; p+=ixstp,x-=4) B_BUF32((void *) p, palcol[olinbuf[x>>3]>>(x&4)]); break; - case 8: pal8hlineasm(x,xr1,p,ixstp); break; //for(;x>xr1;p+=ixstp,x-- ) B_BUF32((void *) p, palcol[olinbuf[x]]); break; - } - break; - } - nfplace += nbpl; - } - - B_BUF32(&opixbuf0[0], 0); - B_BUF32(&opixbuf1[0], 0); - xplc = xsizbpl; yplc += iystp; - if ((intlac) && (yplc >= ysiz)) { intlac--; initpass(); } - if (i < leng) - { - filt = buf[i++]; - if (filter1st < 0) filter1st = filt; else filterest |= (1<= 2)); - } - j = 3; k = 0; - for (i=257; i<285; i++) - { - hxbit[i+30-257][1] = j; j += (1<= 264)); - } - hxbit[285+30-257][1] = 258; hxbit[285+30-257][0] = 0; - - for (i=0; i<512; i++) abstab10[512+i] = abstab10[512-i] = i; -} - - -//============================= KPNGILIB ends ================================ - -//==================== External picture interface ends ======================= diff --git a/source/build/src/mdsprite.cpp b/source/build/src/mdsprite.cpp index 8978b57c3..0846dec5c 100644 --- a/source/build/src/mdsprite.cpp +++ b/source/build/src/mdsprite.cpp @@ -11,7 +11,6 @@ #include "polymost.h" #include "mdsprite.h" #include "cache1d.h" -#include "kplib.h" #include "common.h" #include "palette.h" #include "textures.h" diff --git a/source/build/src/pngwrite.cpp b/source/build/src/pngwrite.cpp deleted file mode 100644 index a91c37afe..000000000 --- a/source/build/src/pngwrite.cpp +++ /dev/null @@ -1,97 +0,0 @@ -#include "compat.h" -#include "pngwrite.h" -#include "crc32_.h" - -#include "vfs.h" - -pngwrite_t png; - -#define png_write_buf(p, size) buildvfs_fwrite(p, size, 1, png.file) - -static FORCE_INLINE void png_write_uint32(uint32_t const in) -{ - uint32_t const buf = B_BIG32(in); - png_write_buf(&buf, sizeof(uint32_t)); -} - -static void png_write_chunk(uint32_t const size, char const *const type, - uint8_t const *const data, uint32_t flags) -{ - uLongf chunk_size = (flags & CHUNK_COMPRESSED) ? compressBound(size) : size; - uint8_t * const chunk = (uint8_t *) Xcalloc(1, 4 + chunk_size); - - Bmemcpy(chunk, type, 4); - - if (flags & CHUNK_COMPRESSED) - compress(chunk + 4, (uLongf *) &chunk_size, data, size); - else - Bmemcpy(chunk + 4, data, size); - - png_write_uint32(chunk_size); - png_write_buf(chunk, chunk_size + 4); - - uint32_t crc = Bcrc32(NULL, 0, 0L); - crc = Bcrc32(chunk, chunk_size + 4, crc); - png_write_uint32(crc); - - Xfree(chunk); -} - -void png_set_pal(uint8_t const * const data, int numentries) -{ - png.pal_entries = numentries; - png.pal_data = (uint8_t *)Xmalloc(numentries * 3); - - Bmemcpy(png.pal_data, data, numentries * 3); -} - -void png_set_text(char const * const keyword, char const * const text) -{ - unsigned const keylen = Bstrlen(keyword); - Bassert(keylen < 79); - unsigned const textlen = Bstrlen(text); - - png.textlen = keylen + textlen + 1; - png.text = (uint8_t *) Xrealloc(png.text, png.textlen); - - Bmemcpy(png.text, keyword, keylen); - *(png.text + keylen) = 0; - Bmemcpy(png.text + keylen + 1, text, textlen); -} - -void png_write(buildvfs_FILE const file, int const width, int const height, - uint8_t const type, uint8_t const * const data) -{ - png.file = file; - - png_write_buf("\x89\x50\x4E\x47\x0D\x0A\x1A\x0A", 8); - - png_ihdr_t const png_header = { B_BIG32((unsigned)width), B_BIG32((unsigned)height), 8, type, 0 }; - png_write_chunk(sizeof(png_ihdr_t), "IHDR", (uint8_t const *)&png_header, 0); - - if (png.text) - { - png_write_chunk(png.textlen, "tEXt", png.text, 0); - DO_FREE_AND_NULL(png.text); - } - - int const bytesPerPixel = (type == PNG_TRUECOLOR ? 3 : 1); - int const bytesPerLine = width * bytesPerPixel; - - if (png.pal_data) - { - png_write_chunk(png.pal_entries * 3, "PLTE", png.pal_data, 0); - DO_FREE_AND_NULL(png.pal_data); - } - - int const linesiz = height * bytesPerLine + height; - uint8_t *lines = (uint8_t *) Xcalloc(1, linesiz); - - for (int i = 0; i < height; i++) - Bmemcpy(lines + i * bytesPerLine + i + 1, data + i * bytesPerLine, bytesPerLine); - - png_write_chunk(linesiz, "IDAT", lines, CHUNK_COMPRESSED); - png_write_chunk(0, "IEND", NULL, 0); - - Xfree(lines); -} diff --git a/source/build/src/polymost.cpp b/source/build/src/polymost.cpp index c3b5489d4..21389cbcd 100644 --- a/source/build/src/polymost.cpp +++ b/source/build/src/polymost.cpp @@ -9,7 +9,6 @@ Ken Silverman's official web site: http://www.advsys.net/ken #include "build.h" #include "common.h" #include "engine_priv.h" -#include "kplib.h" #include "mdsprite.h" #include "polymost.h" #include "files.h" diff --git a/source/build/src/screenshot.cpp b/source/build/src/screenshot.cpp index 48a97e377..46a403e09 100644 --- a/source/build/src/screenshot.cpp +++ b/source/build/src/screenshot.cpp @@ -1,12 +1,17 @@ #include "compat.h" #include "build.h" #include "baselayer.h" - -#include "pngwrite.h" +#include "version.h" +#include "m_png.h" +#include "i_specialpaths.h" +#include "m_argv.h" +#include "cmdlib.h" +#include "gamecontrol.h" #include "vfs.h" #include "../../glbackend/glbackend.h" +EXTERN_CVAR(Float, png_gamma) // // screencapture // @@ -44,14 +49,6 @@ buildvfs_FILE OutputFileCounter::opennextfile_withext(char *fn, const char *ext) static OutputFileCounter capturecounter; -static void screencapture_end(char *fn, buildvfs_FILE * filptr) -{ - buildvfs_fclose(*filptr); - OSD_Printf("Saved screenshot to %s\n", fn); - Xfree(fn); - capturecounter.count++; -} - # ifdef USE_OPENGL # define HICOLOR (videoGetRenderMode() >= REND_POLYMOST && in3dmode()) # else @@ -63,16 +60,64 @@ void getScreen(uint8_t* imgBuf) GLInterface.ReadPixels(xdim, ydim, imgBuf); } -int videoCaptureScreen(const char *filename, char inverseit) -{ - char *fn = Xstrdup(filename); - buildvfs_FILE fp = capturecounter.opennextfile_withext(fn, "png"); - if (fp == nullptr) +CVAR(String, screenshotname, "", CVAR_ARCHIVE) // not GLOBALCONFIG - allow setting this per game. +CVAR(String, screenshot_dir, "", CVAR_ARCHIVE) // same here. + +// +// WritePNGfile +// +void WritePNGfile(FileWriter* file, const uint8_t* buffer, const PalEntry* palette, + ESSType color_type, int width, int height, int pitch, float gamma) +{ + FStringf software("Demolition %s", GetVersionString()); + if (!M_CreatePNG(file, buffer, palette, color_type, width, height, pitch, gamma) || + !M_AppendPNGText(file, "Software", software) || + !M_FinishPNG(file)) + { + OSD_Printf("Failed writing screenshot\n"); + } +} + + +int videoCaptureScreen() +{ + PalEntry Palette[256]; + + size_t dirlen; + FString autoname = Args->CheckValue("-shotdir"); + if (autoname.IsEmpty()) + { + autoname = screenshot_dir; + } + dirlen = autoname.Len(); + if (dirlen == 0) + { + autoname = M_GetScreenshotsPath(); + dirlen = autoname.Len(); + } + if (dirlen > 0) + { + if (autoname[dirlen - 1] != '/' && autoname[dirlen - 1] != '\\') + { + autoname += '/'; + } + } + autoname = NicePath(autoname); + CreatePath(autoname); + + if (**screenshotname) autoname << screenshotname; + else autoname << currentGame; + autoname << "_0000"; + char* fn = autoname.LockBuffer(); + buildvfs_FILE fp = capturecounter.opennextfile_withext(fn, "png"); + autoname.UnlockBuffer(); + + if (fp == nullptr) { - Xfree(fn); return -1; } + FileWriter writer(fp); uint8_t * const imgBuf = (uint8_t *) Xmalloc(xdim * ydim * (HICOLOR ? 3 : 1)); @@ -84,12 +129,6 @@ int videoCaptureScreen(const char *filename, char inverseit) getScreen(imgBuf); int const bytesPerLine = xdim * 3; - if (inverseit) - { - for (int i=0, j = ydim * bytesPerLine; iversion.buf); - png_write(fp, xdim, ydim, HICOLOR ? PNG_TRUECOLOR : PNG_INDEXED, imgBuf); + WritePNGfile(&writer, imgBuf, Palette, HICOLOR ? SS_RGB : SS_PAL, xdim, ydim, HICOLOR? xdim*3 : xdim, png_gamma); Xfree(imgBuf); - screencapture_end(fn, &fp); + OSD_Printf("Saved screenshot to %s\n", fn); + capturecounter.count++; return 0; } -int videoCaptureScreenTGA(const char *filename, char inverseit) -{ - int32_t i; - char head[18] = { 0,1,1,0,0,0,1,24,0,0,0,0,0/*wlo*/,0/*whi*/,0/*hlo*/,0/*hhi*/,8,0 }; - //char palette[4*256]; - char *fn = Xstrdup(filename); - - buildvfs_FILE fil = capturecounter.opennextfile_withext(fn, "tga"); - if (fil == nullptr) - { - Xfree(fn); - return -1; - } - -#ifdef USE_OPENGL - if (HICOLOR) - { - head[1] = 0; // no colourmap - head[2] = 2; // uncompressed truecolour - head[3] = 0; // (low) first colourmap index - head[4] = 0; // (high) first colourmap index - head[5] = 0; // (low) number colourmap entries - head[6] = 0; // (high) number colourmap entries - head[7] = 0; // colourmap entry size - head[16] = 24; // 24 bits per pixel - } -#endif - - head[12] = xdim & 0xff; - head[13] = (xdim >> 8) & 0xff; - head[14] = ydim & 0xff; - head[15] = (ydim >> 8) & 0xff; - - buildvfs_fwrite(head, 18, 1, fil); - - // palette first -#ifdef USE_OPENGL - if (!HICOLOR) -#endif - { - if (inverseit) - { - for (i=0; i<256; i++) - { - buildvfs_fputc(255 - curpalettefaded[i].b, fil); - buildvfs_fputc(255 - curpalettefaded[i].g, fil); - buildvfs_fputc(255 - curpalettefaded[i].r, fil); - } - } - else - { - for (i=0; i<256; i++) - { - buildvfs_fputc(curpalettefaded[i].b, fil); - buildvfs_fputc(curpalettefaded[i].g, fil); - buildvfs_fputc(curpalettefaded[i].r, fil); - } - } - } - - videoBeginDrawing(); //{{{ - -# ifdef USE_OPENGL - if (HICOLOR) - { - // 24bit - int const size = xdim * ydim * 3; - uint8_t *inversebuf = (uint8_t *) Xmalloc(size); - - getScreen(inversebuf); - - for (i = 0; i < size; i += 3) - swapchar(&inversebuf[i], &inversebuf[i + 2]); - - buildvfs_fwrite(inversebuf, xdim*ydim, 3, fil); - Xfree(inversebuf); - } - else -# endif - { - char * const ptr = (char *) frameplace; - - for (i = ydim-1; i >= 0; i--) - buildvfs_fwrite(ptr + i * bytesperline, xdim, 1, fil); - } - - videoEndDrawing(); //}}} - - screencapture_end(fn, &fil); - - return 0; -} #undef HICOLOR diff --git a/source/build/src/voxmodel.cpp b/source/build/src/voxmodel.cpp index 45d5e2d88..c03b83f4e 100644 --- a/source/build/src/voxmodel.cpp +++ b/source/build/src/voxmodel.cpp @@ -11,7 +11,6 @@ #include "polymost.h" #include "mdsprite.h" #include "cache1d.h" -#include "kplib.h" #include "palette.h" #include "../../glbackend/glbackend.h" diff --git a/source/common/fonts/v_font.cpp b/source/common/fonts/v_font.cpp index 735767335..3354373db 100644 --- a/source/common/fonts/v_font.cpp +++ b/source/common/fonts/v_font.cpp @@ -50,6 +50,7 @@ #include "cache1d.h" #include "m_png.h" #include "printf.h" +#include "filesystem.h" #include "fontinternals.h" @@ -403,8 +404,7 @@ void V_InitFontColors () TranslationColors.Clear(); FScanner sc; - sc.Open("textcolors.txt"); - //while ((lump = Wads.FindLump ("TEXTCOLO", &lastlump)) != -1) + while ((lump = fileSystem.Iterate("textcolors.txt", &lastlump)) != -1) { while (sc.GetString()) { diff --git a/source/common/gameconfigfile.cpp b/source/common/gameconfigfile.cpp index 908f7d444..979749c0f 100644 --- a/source/common/gameconfigfile.cpp +++ b/source/common/gameconfigfile.cpp @@ -50,8 +50,8 @@ #include "control.h" #include "osd.h" #include "gamecontrol.h" +#include "version.h" -#define GAMENAME "Demolition" #define LASTRUNVERSION "1" #if !defined _MSC_VER && !defined __APPLE__ @@ -184,7 +184,7 @@ FGameConfigFile::~FGameConfigFile () void FGameConfigFile::WriteCommentHeader (FileWriter *file) const { - file->Printf ("# This file was generated by " GAMENAME " %s\n", ""/*GetVersionString()*/); + file->Printf ("# This file was generated by " GAMENAME " %s\n", GetVersionString()); } void FGameConfigFile::DoAutoloadSetup (/*FIWadManager *iwad_man*/) diff --git a/source/common/searchpaths.cpp b/source/common/searchpaths.cpp index 78fa3f03b..4b565a113 100644 --- a/source/common/searchpaths.cpp +++ b/source/common/searchpaths.cpp @@ -823,7 +823,7 @@ TArray ParseAllGrpInfos(TArray& filelist) TArray groups; TMap CRCMap; extern FString progdir; - // This opens the base resource only for reading the grpinfo from it. + // This opens the base resource only for reading the grpinfo from it which we need before setting up the game state. std::unique_ptr engine_res; FString baseres = progdir + "demolition.pk3"; engine_res.reset(FResourceFile::OpenResourceFile(baseres, true, true)); diff --git a/source/common/utility/files.h b/source/common/utility/files.h index 525cd0a09..92d6eccc3 100644 --- a/source/common/utility/files.h +++ b/source/common/utility/files.h @@ -309,11 +309,11 @@ class FileWriter protected: bool OpenDirect(const char *filename); - FileWriter() - { - File = NULL; - } public: + FileWriter(FILE *f = nullptr) // if passed, this writer will take over the file. + { + File = f; + } virtual ~FileWriter() { if (File != NULL) fclose(File); diff --git a/source/common/utility/m_png.cpp b/source/common/utility/m_png.cpp index 888b705be..e58742da4 100644 --- a/source/common/utility/m_png.cpp +++ b/source/common/utility/m_png.cpp @@ -45,6 +45,7 @@ #include "basics.h" #include "m_crc32.h" #include "m_swap.h" +#include "c_cvars.h" #include "m_png.h" diff --git a/source/version.h b/source/common/version.h similarity index 57% rename from source/version.h rename to source/common/version.h index 3c10e1000..388737dbf 100644 --- a/source/version.h +++ b/source/common/version.h @@ -41,66 +41,23 @@ const char *GetVersionString(); /** Lots of different version numbers **/ -#define VERSIONSTR "4.3pre" +#define VERSIONSTR "0.0.1" // The version as seen in the Windows resource -#define RC_FILEVERSION 0,1,9999,0 -#define RC_PRODUCTVERSION 0,1,9999,0 +#define RC_FILEVERSION 0,0,1,0 +#define RC_PRODUCTVERSION 0,0,1,0 #define RC_PRODUCTVERSION2 VERSIONSTR // These are for content versioning. #define VER_MAJOR 0 -#define VER_MINOR 1 -#define VER_REVISION 0 - -// This should always refer to the version a derived port is based on and not reflect the derived port's version number! -#define ENG_MAJOR 0 -#define ENG_MINOR 1 -#define ENG_REVISION 0 - -// Version identifier for network games. -// Bump it every time you do a release unless you're certain you -// didn't change anything that will affect sync. -#define NETGAMEVERSION 235 - -// Version stored in the ini's [LastRun] section. -// Bump it if you made some configuration change that you want to -// be able to migrate in FGameConfigFile::DoGlobalSetup(). -#define LASTRUNVERSION "218" - -// Protocol version used in demos. -// Bump it if you change existing DEM_ commands or add new ones. -// Otherwise, it should be safe to leave it alone. -#define DEMOGAMEVERSION 0x221 - -// Minimum demo version we can play. -// Bump it whenever you change or remove existing DEM_ commands. -#define MINDEMOVERSION 0x21F - -// SAVEVER is the version of the information stored in level snapshots. -// Note that SAVEVER is not directly comparable to VERSION. -// SAVESIG should match SAVEVER. - -// extension for savegames -#define SAVEGAME_EXT "des" - -// MINSAVEVER is the minimum level snapshot version that can be loaded. -#define MINSAVEVER 1 - -// Use 4500 as the base git save version, since it's higher than the -// SVN revision ever got. -#define SAVEVER 1 - -// This is so that derivates can use the same savegame versions without worrying about engine compatibility -#define GAMESIG "DEMOLITION" -#define BASEWAD "demolition.pk3" -//#define OPTIONALWAD "game_support.pk3" +#define VER_MINOR 0 +#define VER_REVISION 1 // More stuff that needs to be different for derivatives. #define GAMENAME "Demolition" #define WGAMENAME L"Demolition" #define GAMENAMELOWERCASE "demolition" #define FORUM_URL "http://forum.zdoom.org/" -#define BUGS_FORUM_URL "http://forum.zdoom.org/viewforum.php?f=2" +//#define BUGS_FORUM_URL "http://forum.zdoom.org/viewforum.php?f=2" #if defined(__APPLE__) || defined(_WIN32) #define GAME_DIR GAMENAME diff --git a/source/duke3d/src/actors.cpp b/source/duke3d/src/actors.cpp index cb1f5864c..c3d9fc606 100644 --- a/source/duke3d/src/actors.cpp +++ b/source/duke3d/src/actors.cpp @@ -7604,9 +7604,6 @@ ACTOR_STATIC void G_MoveEffectors(void) //STATNUM 3 pData[8] = (((int32_t) getangle(-ksqrt(cameraDirection.x*cameraDirection.x+cameraDirection.y*cameraDirection.y), cameraDirection.z)*(400.f/1024.f)))-300; } } - - //if we are benchmarking, take a screenshot at each waypoint (camera start point/locator) - benchmarkScreenshot = false; } if (pSprite->owner == -1) { diff --git a/source/duke3d/src/game.cpp b/source/duke3d/src/game.cpp index 31b589b3d..d1d246550 100644 --- a/source/duke3d/src/game.cpp +++ b/source/duke3d/src/game.cpp @@ -212,14 +212,7 @@ void G_HandleSpecialKeys(void) if (KB_UnBoundKeyPressed(sc_F12)) { KB_ClearKeyDown(sc_F12); - videoCaptureScreen( -#ifndef EDUKE32_STANDALONE - "duke0000.tga" -#else - "capt0000.tga" -#endif - , - 0); + videoCaptureScreen(); P_DoQuote(QUOTE_SCREEN_SAVED, &myplayer); } diff --git a/source/duke3d/src/osdcmds.cpp b/source/duke3d/src/osdcmds.cpp index c09cea05f..28df772e5 100644 --- a/source/duke3d/src/osdcmds.cpp +++ b/source/duke3d/src/osdcmds.cpp @@ -845,17 +845,7 @@ static int osdcmd_quickload(osdcmdptr_t UNUSED(parm)) static int osdcmd_screenshot(osdcmdptr_t parm) { -// KB_ClearKeysDown(); -#ifndef EDUKE32_STANDALONE - static const char *fn = "duke0000.png"; -#else - static const char *fn = "capt0000.png"; -#endif - - if (parm->numparms == 1 && !Bstrcasecmp(parm->parms[0], "tga")) - videoCaptureScreenTGA(fn, 0); - else videoCaptureScreen(fn, 0); - + videoCaptureScreen(); return OSDCMD_OK; } diff --git a/source/gitinfo.cpp b/source/gitinfo.cpp new file mode 100644 index 000000000..4ef00dcf5 --- /dev/null +++ b/source/gitinfo.cpp @@ -0,0 +1,65 @@ +/* +** gitinfo.cpp +** Returns strings from gitinfo.h. +** +**--------------------------------------------------------------------------- +** Copyright 2013 Randy Heit +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions +** are met: +** +** 1. Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** 2. Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in the +** documentation and/or other materials provided with the distribution. +** 3. The name of the author may not be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**--------------------------------------------------------------------------- +** +** This file is just here so that when gitinfo.h changes, only one source +** file needs to be recompiled. +*/ + +#include "gitinfo.h" +#include "version.h" + +const char *GetGitDescription() +{ + return GIT_DESCRIPTION; +} + +const char *GetGitHash() +{ + return GIT_HASH; +} + +const char *GetGitTime() +{ + return GIT_TIME; +} + +const char *GetVersionString() +{ + if (GetGitDescription()[0] == '\0') + { + return VERSIONSTR; + } + else + { + return GIT_DESCRIPTION; + } +} diff --git a/source/rr/src/game.cpp b/source/rr/src/game.cpp index 7386b8ede..0440fde6b 100644 --- a/source/rr/src/game.cpp +++ b/source/rr/src/game.cpp @@ -189,10 +189,7 @@ void G_HandleSpecialKeys(void) if (KB_UnBoundKeyPressed(sc_F12)) { KB_ClearKeyDown(sc_F12); - videoCaptureScreen( - "duke0000.tga" - , - 0); + videoCaptureScreen(); P_DoQuote(QUOTE_SCREEN_SAVED, g_player[myconnectindex].ps); } diff --git a/source/rr/src/osdcmds.cpp b/source/rr/src/osdcmds.cpp index e9047f5a9..2980ca9d9 100644 --- a/source/rr/src/osdcmds.cpp +++ b/source/rr/src/osdcmds.cpp @@ -688,12 +688,7 @@ static int osdcmd_quickload(osdcmdptr_t UNUSED(parm)) static int osdcmd_screenshot(osdcmdptr_t parm) { -// KB_ClearKeysDown(); - static const char *fn = "duke0000.png"; - - if (parm->numparms == 1 && !Bstrcasecmp(parm->parms[0], "tga")) - videoCaptureScreenTGA(fn, 0); - else videoCaptureScreen(fn, 0); + videoCaptureScreen(); return OSDCMD_OK; } diff --git a/source/sw/src/draw.cpp b/source/sw/src/draw.cpp index d5ed9822e..275601af2 100644 --- a/source/sw/src/draw.cpp +++ b/source/sw/src/draw.cpp @@ -1675,7 +1675,7 @@ void ScreenCaptureKeys(void) { inputState.ClearKeyStatus(KEYSC_F12); PauseAction(); - videoCaptureScreenTGA("swcpxxxx.tga", KB_KeyPressed(KEYSC_LSHIFT) | KB_KeyPressed(KEYSC_RSHIFT)); + videoCaptureScreen(); ResumeAction(); PutStringInfo(Player + myconnectindex, "Screen Captured"); }