From 278f2e9b6640d0b148a7c7f37343e8beabd93684 Mon Sep 17 00:00:00 2001 From: Sryder13 Date: Sat, 30 Aug 2014 14:10:55 +0100 Subject: [PATCH 01/21] Polyobject top/bottom texture + translucency polyobjects do have top/bottom textures, silly. And translucency. --- src/hardware/hw_main.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index b9977968e..58aacf022 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -1393,11 +1393,7 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) } // check TOP TEXTURE - if (worldhigh < worldtop && texturetranslation[gr_sidedef->toptexture] -#ifdef POLYOBJECTS // polyobjects don't have top textures, silly. - && !gr_curline->polyseg -#endif - ) + if (worldhigh < worldtop && texturetranslation[gr_sidedef->toptexture]) { if (drawtextured) { @@ -1435,11 +1431,7 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) } // check BOTTOM TEXTURE - if (worldlow > worldbottom && texturetranslation[gr_sidedef->bottomtexture] -#ifdef POLYOBJECTS // polyobjects don't have bottom textures, silly. - && !gr_curline->polyseg -#endif - ) //only if VISIBLE!!! + if (worldlow > worldbottom && texturetranslation[gr_sidedef->bottomtexture]) //only if VISIBLE!!! { if (drawtextured) { @@ -1646,6 +1638,17 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) blendmode = PF_Masked; break; } + +#ifdef POLYOBJECTS + if (gr_curline->polyseg && gr_curline->polyseg->translucency > 0) + { + if (gr_curline->polyseg->translucency >= NUMTRANSMAPS) // wall not drawn + return; + + blendmode = HWR_TranstableToAlpha(gr_curline->polyseg->translucency, &Surf); + } +#endif + if (grTex->mipmap.flags & TF_TRANSPARENT) blendmode = PF_Translucent; From ae27ace7fef6467cfa99b38d026b36818f2fc156 Mon Sep 17 00:00:00 2001 From: Sryder13 Date: Sat, 30 Aug 2014 14:20:07 +0100 Subject: [PATCH 02/21] Polyobject translucency quick fix. I realise what I did before may cause FOF's in the same sector to not be drawn, if they were before. --- src/hardware/hw_main.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 58aacf022..93d0e2614 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -1643,7 +1643,10 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) if (gr_curline->polyseg && gr_curline->polyseg->translucency > 0) { if (gr_curline->polyseg->translucency >= NUMTRANSMAPS) // wall not drawn - return; + { + Surf.FlatColor.s.alpha = 0x00; // This shouldn't draw anything regardless of blendmode + blendmode = PF_Masked; + } blendmode = HWR_TranstableToAlpha(gr_curline->polyseg->translucency, &Surf); } From d96eaa768c02d140d536cda96aafd3b1887a0e34 Mon Sep 17 00:00:00 2001 From: Sryder13 Date: Sat, 30 Aug 2014 14:36:18 +0100 Subject: [PATCH 03/21] else added less redundancy. --- src/hardware/hw_main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 93d0e2614..7e64243a4 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -1647,8 +1647,8 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) Surf.FlatColor.s.alpha = 0x00; // This shouldn't draw anything regardless of blendmode blendmode = PF_Masked; } - - blendmode = HWR_TranstableToAlpha(gr_curline->polyseg->translucency, &Surf); + else + blendmode = HWR_TranstableToAlpha(gr_curline->polyseg->translucency, &Surf); } #endif From da2b6f2c01eb6c0085f675de2d97edfccd823297 Mon Sep 17 00:00:00 2001 From: Sryder13 Date: Wed, 3 Sep 2014 02:10:47 +0100 Subject: [PATCH 04/21] Fix certain textures with holes in see: CEZ1 skybox in linear filtermodes. --- src/hardware/hw_cache.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hardware/hw_cache.c b/src/hardware/hw_cache.c index c97e51616..3899b75b8 100644 --- a/src/hardware/hw_cache.c +++ b/src/hardware/hw_cache.c @@ -452,7 +452,7 @@ static void HWR_GenerateTexture(INT32 texnum, GLTexture_t *grtex) //Hurdler: not efficient at all but I don't remember exactly how HWR_DrawPatchInCache works :( if (format2bpp[grtex->mipmap.grInfo.format]==4) { - for (i = 3; i < blocksize; i += 4) + for (i = 3; i < blocksize*4; i += 4) // blocksize*4 because blocksize doesn't include the bpp { if (block[i] == 0) { From ca0f0bf2fdbd3f958ea90aa616a8c740d36349e2 Mon Sep 17 00:00:00 2001 From: Sryder13 Date: Thu, 4 Sep 2014 01:35:29 +0100 Subject: [PATCH 05/21] OpenGL Fade masks I think I've done this all right, someone correct me if I haven't. --- src/f_wipe.c | 14 +-- src/hardware/hw_cache.c | 104 +++++++++++++++++++++ src/hardware/hw_glob.h | 1 + src/hardware/hw_main.c | 37 ++++++-- src/hardware/hw_main.h | 2 +- src/hardware/r_opengl/ogl_win.c | 4 + src/hardware/r_opengl/r_opengl.c | 152 ++++++++++++++++++++++++++++++- src/hardware/r_opengl/r_opengl.h | 8 ++ 8 files changed, 299 insertions(+), 23 deletions(-) diff --git a/src/f_wipe.c b/src/f_wipe.c index 4b4ecd7e3..69e956216 100644 --- a/src/f_wipe.c +++ b/src/f_wipe.c @@ -172,15 +172,6 @@ static fademask_t *F_GetFadeMask(UINT8 masknum, UINT8 scrnnum) { */ static void F_DoWipe(fademask_t *fademask) { -#ifdef HWRENDER - /// \todo Mask wipes for OpenGL - if(rendermode != render_soft) - { - HWR_DoScreenWipe(); - return; - } -#endif - // Software mask wipe -- optimized; though it might not look like it! // Okay, to save you wondering *how* this is more optimized than the simpler // version that came before it... @@ -344,6 +335,11 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu) I_Sleep(); lastwipetic = nowtime; +#ifdef HWRENDER + if (rendermode == render_opengl) + HWR_DoWipe(wipetype, wipeframe-1); // send in the wipe type and wipeframe because we need to cache the graphic + else +#endif F_DoWipe(fmask); I_OsPolling(); I_UpdateNoBlit(); diff --git a/src/hardware/hw_cache.c b/src/hardware/hw_cache.c index 3899b75b8..4b2ff9f22 100644 --- a/src/hardware/hw_cache.c +++ b/src/hardware/hw_cache.c @@ -1002,4 +1002,108 @@ GLPatch_t *HWR_GetCachedGLPatch(lumpnum_t lumpnum) return HWR_GetCachedGLPatchPwad(WADFILENUM(lumpnum),LUMPNUM(lumpnum)); } +// Need to do this because they aren't powers of 2 +static void HWR_DrawFadeMaskInCache(GLMipmap_t *mipmap, INT32 pblockwidth, INT32 pblockheight, + lumpnum_t fademasklumpnum, UINT16 fmwidth, UINT16 fmheight) +{ + INT32 i,j; + fixed_t posx, posy, stepx, stepy; + UINT8 *block = mipmap->grInfo.data; // places the data directly into here, it already has the space allocated from HWR_ResizeBlock + UINT8 *flat; + UINT8 *dest, *src, texel; + RGBA_t col; + + // Place the flats data into flat + W_ReadLump(fademasklumpnum, Z_Malloc(W_LumpLength(fademasklumpnum), + PU_HWRCACHE, &flat)); + + stepy = ((INT32)SHORT(fmheight)<>FRACBITS)*SHORT(fmwidth)]; + for (i = 0; i < pblockwidth;i++) + { + // fademask bpp is always 1, and is used just for alpha + texel = src[(posx)>>FRACBITS]; + col = V_GetColor(texel); + *dest = col.s.red; // take the red level of the colour and use it for alpha, as fademasks do + + dest++; + posx += stepx; + } + posy += stepy; + } + + Z_Free(flat); +} + +static void HWR_CacheFadeMask(GLMipmap_t *grMipmap, lumpnum_t fademasklumpnum) +{ + size_t size; + UINT16 fmheight = 0, fmwidth = 0; + UINT8 *block; // The fade mask's pixels + + // setup the texture info + grMipmap->grInfo.format = GR_TEXFMT_ALPHA_8; // put the correct alpha levels straight in so I don't need to convert it later + grMipmap->flags = 0; + + size = W_LumpLength(fademasklumpnum); + + switch (size) + { + // None of these are powers of 2, so I'll need to do what is done for textures and make them powers of 2 before they can be used + case 256000: // 640x400 + fmwidth = 640; + fmheight = 400; + break; + case 64000: // 320x200 + fmwidth = 320; + fmheight = 200; + break; + case 16000: // 160x100 + fmwidth = 160; + fmheight = 100; + break; + case 4000: // 80x50 (minimum) + fmwidth = 80; + fmheight = 50; + break; + default: // Bad lump + CONS_Alert(CONS_WARNING, "Fade mask lump of incorrect size, ignored\n"); // I should avoid this by checking the lumpnum in HWR_RunWipe + break; + } + + // Thankfully, this will still work for this scenario + HWR_ResizeBlock(fmwidth, fmheight, &grMipmap->grInfo); + + grMipmap->width = blockwidth; + grMipmap->height = blockheight; + + block = MakeBlock(grMipmap); + + HWR_DrawFadeMaskInCache(grMipmap, blockwidth, blockheight, fademasklumpnum, fmwidth, fmheight); + + // I DO need to convert this because it isn't power of 2 and we need the alpha +} + + +void HWR_GetFadeMask(lumpnum_t fademasklumpnum) +{ + GLMipmap_t *grmip; + + grmip = &HWR_GetCachedGLPatch(fademasklumpnum)->mipmap; + + if (!grmip->downloaded && !grmip->grInfo.data) + HWR_CacheFadeMask(grmip, fademasklumpnum); + + HWD.pfnSetTexture(grmip); + + // The system-memory data can be purged now. + Z_ChangeTag(grmip->grInfo.data, PU_HWRCACHE_UNLOCKED); +} + #endif //HWRENDER diff --git a/src/hardware/hw_glob.h b/src/hardware/hw_glob.h index ee84e8b10..88786bc11 100644 --- a/src/hardware/hw_glob.h +++ b/src/hardware/hw_glob.h @@ -106,6 +106,7 @@ GLPatch_t *HWR_GetPic(lumpnum_t lumpnum); void HWR_SetPalette(RGBA_t *palette); GLPatch_t *HWR_GetCachedGLPatchPwad(UINT16 wad, UINT16 lump); GLPatch_t *HWR_GetCachedGLPatch(lumpnum_t lumpnum); +void HWR_GetFadeMask(lumpnum_t fademasklumpnum); // -------- // hw_draw.c diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 7e64243a4..e832457c0 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -5419,7 +5419,7 @@ void HWR_StartScreenWipe(void) void HWR_EndScreenWipe(void) { - HWRWipeCounter = 1.0f; + HWRWipeCounter = 0.0f; //CONS_Debug(DBG_RENDER, "In HWR_EndScreenWipe()\n"); HWD.pfnEndScreenWipe(); } @@ -5429,17 +5429,38 @@ void HWR_DrawIntermissionBG(void) HWD.pfnDrawIntermissionBG(); } -void HWR_DoScreenWipe(void) +void HWR_DoWipe(UINT8 wipenum, UINT8 scrnnum) { - //CONS_Debug(DBG_RENDER, "In HWR_DoScreenWipe(). Alpha =%f\n", HWRWipeCounter); + static char lumpname[9] = "FADEmmss"; + lumpnum_t lumpnum; + size_t lsize; - HWD.pfnDoScreenWipe(HWRWipeCounter); + if (wipenum > 99 || scrnnum > 99) // not a valid wipe number + return; // shouldn't end up here really, the loop should've stopped running beforehand - // This works for all the cases in vanilla until fade masks get done - HWRWipeCounter -= 0.05f; // Go less opaque after + // puts the numbers into the lumpname + sprintf(&lumpname[4], "%.2hu%.2hu", (UINT16)wipenum, (UINT16)scrnnum); + lumpnum = W_CheckNumForName(lumpname); - if (HWRWipeCounter < 0) - HWRWipeCounter = 0; + if (lumpnum == LUMPERROR) // again, shouldn't be here really + return; + + lsize = W_LumpLength(lumpnum); + + if (!(lsize == 256000 || lsize == 64000 || lsize == 16000 || lsize == 4000)) + { + CONS_Alert(CONS_WARNING, "Fade mask lump %s of incorrect size, ignored\n", lumpname); + return; // again, shouldn't get here if it is a bad size + } + + HWR_GetFadeMask(lumpnum); + + HWD.pfnDoScreenWipe(HWRWipeCounter); // Still send in wipecounter since old stuff might not support multitexturing + + HWRWipeCounter += 0.05f; // increase opacity of end screen + + if (HWRWipeCounter > 1.0f) + HWRWipeCounter = 1.0f; } #endif // HWRENDER diff --git a/src/hardware/hw_main.h b/src/hardware/hw_main.h index 8d8b69e60..969946442 100644 --- a/src/hardware/hw_main.h +++ b/src/hardware/hw_main.h @@ -63,8 +63,8 @@ INT32 HWR_GetTextureUsed(void); void HWR_DoPostProcessor(player_t *player); void HWR_StartScreenWipe(void); void HWR_EndScreenWipe(void); -void HWR_DoScreenWipe(void); void HWR_DrawIntermissionBG(void); +void HWR_DoWipe(UINT8 wipenum, UINT8 scrnnum); // This stuff is put here so MD2's can use them UINT32 HWR_Lighting(INT32 light, UINT32 color, UINT32 fadecolor, boolean fogblockpoly, boolean plane); diff --git a/src/hardware/r_opengl/ogl_win.c b/src/hardware/r_opengl/ogl_win.c index daf37fe29..bfdc96d6a 100644 --- a/src/hardware/r_opengl/ogl_win.c +++ b/src/hardware/r_opengl/ogl_win.c @@ -366,6 +366,10 @@ static INT32 WINAPI SetRes(viddef_t *lvid, vmode_t *pcurrentmode) else maximumAnisotropy = 0; +#ifndef MINI_GL_COMPATIBILITY + SetupGLFunc13(); +#endif + screen_depth = (GLbyte)(lvid->bpp*8); if (screen_depth > 16) diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index b853f084e..7590f49f4 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -157,6 +157,10 @@ float byteasfloat(UINT8 fbyte) static I_Error_t I_Error_GL = NULL; +#ifndef MINI_GL_COMPATIBILITY +static boolean gl13 = false; // whether we can use opengl 1.3 functions +#endif + // -----------------+ // DBG_Printf : Output error messages to debug log if DEBUG_TO_FILE is defined, @@ -263,6 +267,11 @@ FUNCPRINTF void DBG_Printf(const char *lpFmt, ...) /* GLU functions */ #define pgluBuild2DMipmaps gluBuild2DMipmaps #endif +#ifndef MINI_GL_COMPATIBILITY +/* 1.3 functions for multitexturing */ +#define pglActiveTexture, glActiveTexture; +#define pglMultiTexCoord2f, glMultiTexCoord2f; +#endif #else //!STATIC_OPENGL /* 1.0 functions */ @@ -387,6 +396,14 @@ static PFNglCopyTexImage2D pglCopyTexImage2D; /* GLU functions */ typedef GLint (APIENTRY * PFNgluBuild2DMipmaps) (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *data); static PFNgluBuild2DMipmaps pgluBuild2DMipmaps; + +#ifndef MINI_GL_COMPATIBILITY +/* 1.3 functions for multitexturing */ +typedef void (APIENTRY *PFNGLACTIVETEXTUREPROC) (GLenum); +static PFNGLACTIVETEXTUREPROC pglActiveTexture; +typedef void (APIENTRY *PFNGLMULTITEXCOORD2FPROC) (GLenum, GLfloat, GLfloat); +static PFNGLMULTITEXCOORD2FPROC pglMultiTexCoord2f; +#endif #endif #ifndef MINI_GL_COMPATIBILITY @@ -402,6 +419,14 @@ static PFNgluBuild2DMipmaps pgluBuild2DMipmaps; #define GL_TEXTURE_MAX_LOD 0x813B #endif +/* 1.3 GL_TEXTUREi */ +#ifndef GL_TEXTURE0 +#define GL_TEXTURE0 0x84C0 +#endif +#ifndef GL_TEXTURE1 +#define GL_TEXTURE1 0x84C1 +#endif + #endif #ifdef MINI_GL_COMPATIBILITY @@ -492,6 +517,39 @@ boolean SetupGLfunc(void) return true; } +#ifndef MINI_GL_COMPATIBILITY +// This has to be done after the context is created so the version number can be obtained +boolean SetupGLFunc13(void) +{ +#ifndef STATIC_OPENGL +#define GETOPENGLFUNC(func, proc) \ + func = GetGLFunc(#proc); \ + if (!func) \ + { \ + DBG_Printf("failed to get OpenGL function: %s", #proc); \ + } \ + + const char *glversion = (const char *)pglGetString(GL_VERSION); + UINT32 majorversion = 0, minorversion = 0; + + if (glversion != NULL && sscanf((char *)glversion, "%u.%u", &majorversion, &minorversion) == 2) // There is a version number I can identify + { + if (majorversion > 1 || (majorversion == 1 && minorversion >= 3)) // Version of OpenGL is equal to or greater than 1.3 + { + // Get the functions + GETOPENGLFUNC(pglActiveTexture , glActiveTexture) + GETOPENGLFUNC(pglMultiTexCoord2f , glMultiTexCoord2f) + + gl13 = true; // This is now true, so the new fade mask stuff can be done, if OpenGL version is less than 1.3, it still uses the old fade stuff. + } + } +#undef GETOPENGLFUNC + +#endif + return true; +} +#endif + // -----------------+ // SetNoTexture : Disable texture // -----------------+ @@ -1234,6 +1292,23 @@ EXPORT void HWRAPI(SetTexture) (FTextureInfo *pTexInfo) } } } + else if (pTexInfo->grInfo.format == GR_TEXFMT_ALPHA_8) // Used for fade masks + { + const GLubyte *pImgData = (const GLubyte *)pTexInfo->grInfo.data; + INT32 i, j; + + for (j = 0; j < h; j++) + { + for (i = 0; i < w; i++) + { + tex[w*j+i] = (pImgData>>4)<<12; + tex[w*j+i] |= (255>>4)<<8; + tex[w*j+i] |= (255>>4)<<4; + tex[w*j+i] |= (255>>4); + pImgData++; + } + } + } else DBG_Printf ("SetTexture(bad format) %ld\n", pTexInfo->grInfo.format); #else @@ -1299,6 +1374,23 @@ EXPORT void HWRAPI(SetTexture) (FTextureInfo *pTexInfo) } } } + else if (pTexInfo->grInfo.format == GR_TEXFMT_ALPHA_8) // Used for fade masks + { + const GLubyte *pImgData = (const GLubyte *)pTexInfo->grInfo.data; + INT32 i, j; + + for (j = 0; j < h; j++) + { + for (i = 0; i < w; i++) + { + tex[w*j+i].s.red = 255; // 255 because the fade mask is modulated with the screen texture, so alpha affects it while the colours don't + tex[w*j+i].s.green = 255; + tex[w*j+i].s.blue = 255; + tex[w*j+i].s.alpha = *pImgData; + pImgData++; + } + } + } else DBG_Printf ("SetTexture(bad format) %ld\n", pTexInfo->grInfo.format); #endif @@ -2109,6 +2201,10 @@ EXPORT void HWRAPI(DoScreenWipe)(float alpha) INT32 texsize = 2048; float xfix, yfix; +#ifndef MINI_GL_COMPATIBILITY + INT32 fademaskdownloaded = tex_downloaded; // the fade mask that has been set +#endif + // Use a power of two texture, dammit if(screen_width <= 1024) texsize = 1024; @@ -2122,8 +2218,8 @@ EXPORT void HWRAPI(DoScreenWipe)(float alpha) SetBlend(PF_Modulated|PF_NoDepthTest|PF_Clip|PF_NoZClip); - // Draw the screen on bottom to fade to - pglBindTexture(GL_TEXTURE_2D, endScreenWipe); + // Draw the original screen + pglBindTexture(GL_TEXTURE_2D, startScreenWipe); pglBegin(GL_QUADS); pglColor4f(1.0f, 1.0f, 1.0f, 1.0f); @@ -2142,12 +2238,56 @@ EXPORT void HWRAPI(DoScreenWipe)(float alpha) // Bottom right pglTexCoord2f(xfix, 0.0f); pglVertex3f(1.0f, -1.0f, 1.0f); + pglEnd(); SetBlend(PF_Modulated|PF_Translucent|PF_NoDepthTest|PF_Clip|PF_NoZClip); - // Draw the screen on top that fades. - pglBindTexture(GL_TEXTURE_2D, startScreenWipe); +#ifndef MINI_GL_COMPATIBILITY + if (gl13) + { + // Draw the end screen that fades in + pglActiveTexture(GL_TEXTURE0); + pglEnable(GL_TEXTURE_2D); + pglBindTexture(GL_TEXTURE_2D, endScreenWipe); + + pglActiveTexture(GL_TEXTURE1); + pglEnable(GL_TEXTURE_2D); + pglBindTexture(GL_TEXTURE_2D, fademaskdownloaded); + + pglTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + pglBegin(GL_QUADS); + pglColor4f(1.0f, 1.0f, 1.0f, 1.0f); + + // Bottom left + pglMultiTexCoord2f(GL_TEXTURE0, 0.0f, 0.0f); + pglMultiTexCoord2f(GL_TEXTURE1, 0.0f, 0.0f); + pglVertex3f(-1.0f, -1.0f, 1.0f); + + // Top left + pglMultiTexCoord2f(GL_TEXTURE0, 0.0f, yfix); + pglMultiTexCoord2f(GL_TEXTURE1, 0.0f, 1.0f); + pglVertex3f(-1.0f, 1.0f, 1.0f); + + // Top right + pglMultiTexCoord2f(GL_TEXTURE0, xfix, yfix); + pglMultiTexCoord2f(GL_TEXTURE1, 1.0f, 1.0f); + pglVertex3f(1.0f, 1.0f, 1.0f); + + // Bottom right + pglMultiTexCoord2f(GL_TEXTURE0, xfix, 0.0f); + pglMultiTexCoord2f(GL_TEXTURE1, 1.0f, 0.0f); + pglVertex3f(1.0f, -1.0f, 1.0f); + pglEnd(); + + pglDisable(GL_TEXTURE_2D); // disable the texture in the 2nd texture unit + pglActiveTexture(GL_TEXTURE0); + } + else + { +#endif + // Draw the end screen that fades in + pglBindTexture(GL_TEXTURE_2D, endScreenWipe); pglBegin(GL_QUADS); pglColor4f(1.0f, 1.0f, 1.0f, alpha); @@ -2166,8 +2306,10 @@ EXPORT void HWRAPI(DoScreenWipe)(float alpha) // Bottom right pglTexCoord2f(xfix, 0.0f); pglVertex3f(1.0f, -1.0f, 1.0f); - pglEnd(); +#ifndef MINI_GL_COMPATIBILITY + } +#endif tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now } diff --git a/src/hardware/r_opengl/r_opengl.h b/src/hardware/r_opengl/r_opengl.h index fd018f4b1..f4d4f77e0 100644 --- a/src/hardware/r_opengl/r_opengl.h +++ b/src/hardware/r_opengl/r_opengl.h @@ -35,6 +35,13 @@ #else #include #include + +#ifndef MINI_GL_COMPATIBILITY +#ifdef STATIC_OPENGL // Because of the 1.3 functions, you'll need GLext to compile it if static +#define GL_GLEXT_PROTOTYPES +#include +#endif +#endif #endif #define _CREATE_DLL_ // necessary for Unix AND Windows @@ -66,6 +73,7 @@ boolean LoadGL(void); void *GetGLFunc(const char *proc); boolean SetupGLfunc(void); +boolean SetupGLFunc13(void); void Flush(void); INT32 isExtAvailable(const char *extension, const GLubyte *start); boolean SetupPixelFormat(INT32 WantColorBits, INT32 WantStencilBits, INT32 WantDepthBits); From 8a4ec56ef50326666d8d0f341a93c26a479ccb51 Mon Sep 17 00:00:00 2001 From: Wolfy Date: Tue, 2 Sep 2014 20:03:02 -0500 Subject: [PATCH 06/21] Merge the dedicatedserver and server global variables Previously in Lua, dedicatedserver would only return true if the player running the script was the one hosting the dedicated server. In all other cases, it would return nil. This fixes it to point to the server host no matter what. --- src/dehacked.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 5149fddd5..334179ace 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -8681,12 +8681,7 @@ static inline int lib_getenum(lua_State *L) lua_pushinteger(L, mapmusic); return 1; } else if (fastcmp(word,"server")) { - if (dedicated || !playeringame[serverplayer]) - return 0; - LUA_PushUserdata(L, &players[serverplayer], META_PLAYER); - return 1; - } else if (fastcmp(word,"dedicatedserver")) { - if (!dedicated) + if (!playeringame[serverplayer]) return 0; LUA_PushUserdata(L, &players[serverplayer], META_PLAYER); return 1; From c97eef238e7823beedf8d67d99cae7b3f7ff6204 Mon Sep 17 00:00:00 2001 From: Ronald Kinard Date: Sun, 31 Aug 2014 23:23:04 +0000 Subject: [PATCH 07/21] Use gcc_struct on ATTRPACK too --- src/doomtype.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/doomtype.h b/src/doomtype.h index a365e3c56..6bc563527 100644 --- a/src/doomtype.h +++ b/src/doomtype.h @@ -307,7 +307,11 @@ typedef UINT32 tic_t; #define FUNCTARGET(X) __attribute__ ((__target__ (X))) #endif #endif +#if defined (__MINGW32__) && ((__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +#define ATTRPACK __attribute__((packed, gcc_struct)) +#else #define ATTRPACK __attribute__((packed)) +#endif #define ATTRUNUSED __attribute__((unused)) #ifdef _XBOX #define FILESTAMP I_OutputMsg("%s:%d\n",__FILE__,__LINE__); From eece38609e7508582c0db6c47e740b4986e55482 Mon Sep 17 00:00:00 2001 From: Ronald Kinard Date: Sun, 31 Aug 2014 23:57:08 +0000 Subject: [PATCH 08/21] SDL2: Fix 320x200 mode --- src/sdl/i_video.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sdl/i_video.c b/src/sdl/i_video.c index fd029832a..2ee8352d2 100644 --- a/src/sdl/i_video.c +++ b/src/sdl/i_video.c @@ -1652,7 +1652,7 @@ INT32 VID_SetMode(INT32 modeNum) vid.recalc = 1; vid.bpp = 1; - if (modeNum >= 0 && modeNum < MAXWINMODES-1) + if (modeNum >= 0 && modeNum < MAXWINMODES) { vid.width = windowedModes[modeNum][0]; vid.height = windowedModes[modeNum][1]; From 31abd19f75a38b8daeffdbe9891809903be8637c Mon Sep 17 00:00:00 2001 From: Ronald Kinard Date: Mon, 1 Sep 2014 00:15:08 +0000 Subject: [PATCH 09/21] SDL2: Reimplement some stubbed commands Also remove some unnecessary functions. --- src/sdl/i_video.c | 79 +++++------------------------------------------ 1 file changed, 7 insertions(+), 72 deletions(-) diff --git a/src/sdl/i_video.c b/src/sdl/i_video.c index 2ee8352d2..66070f6c3 100644 --- a/src/sdl/i_video.c +++ b/src/sdl/i_video.c @@ -629,50 +629,20 @@ static void VID_Command_Info_f (void) static void VID_Command_ModeList_f(void) { - SDL2STUB(); -#if 0 -#if !defined (DC) && !defined (_WIN32_WCE) && !defined (_PSP) && !defined(GP2X) - INT32 i; -#ifdef HWRENDER - if (rendermode == render_opengl) - modeList = SDL_ListModes(NULL, SDL_OPENGL|SDL_FULLSCREEN); - else -#endif - modeList = SDL_ListModes(NULL, surfaceFlagsF|SDL_HWSURFACE); //Alam: At least hardware surface - - if (modeList == (SDL_Rect **)0 && cv_fullscreen.value) + // List windowed modes + INT32 i = 0; + CONS_Printf("NOTE: Under SDL2, all modes are supported on all platforms.\n"); + CONS_Printf("Under opengl, fullscreen only supports native desktop resolution.\n"); + CONS_Printf("Under software, the mode is stretched up to desktop resolution.\n"); + for (i = 0; i < MAXWINMODES; i++) { - CONS_Printf("%s", M_GetText("No video modes present\n")); - cv_fullscreen.value = 0; + CONS_Printf("%2d: %dx%d\n", i, windowedModes[i][0], windowedModes[i][1]); } - else if (modeList != (SDL_Rect **)0) - { - numVidModes = 0; - if (modeList == (SDL_Rect **)-1) - numVidModes = -1; // should not happen with fullscreen modes - else while (modeList[numVidModes]) - numVidModes++; - } - CONS_Printf(M_GetText("Found %d FullScreen Video Modes:\n"), numVidModes); - for (i=0 ; i= numVidModes) - break; - CONS_Printf(M_GetText("%dx%d and "), - modeList[modeNum]->w, - modeList[modeNum]->h); - } - CONS_Printf("%s", M_GetText("None\n")); -#endif -#endif } static void VID_Command_Mode_f (void) { - SDL2STUB(); -#if 0 INT32 modenum; if (COM_Argc()!= 2) @@ -687,7 +657,6 @@ static void VID_Command_Mode_f (void) CONS_Printf(M_GetText("Video mode not present\n")); else setmodeneeded = modenum+1; // request vid mode change -#endif } #if 0 @@ -1614,37 +1583,6 @@ static inline void SDLESSet(void) SDL2STUB(); } -static void SDLWMSet(void) -{ - SDL2STUB(); -#if 0 -#ifdef RPC_NO_WINDOWS_H - SDL_SysWMinfo SDLWM; - memset(&SDLWM,0,sizeof (SDL_SysWMinfo)); - SDL_VERSION(&SDLWM.version) - if (SDL_GetWMInfo(&SDLWM)) - vid.WndParent = SDLWM.window; - else - vid.WndParent = INVALID_HANDLE_VALUE; - if (vid.WndParent != INVALID_HANDLE_VALUE) - { - SetFocus(vid.WndParent); - ShowWindow(vid.WndParent, SW_SHOW); - } - SDL_EventState(SDL_SYSWMEVENT, SDL_ENABLE); -#endif - SDL_EventState(SDL_VIDEORESIZE, SDL_IGNORE); -#endif -} - -#if 0 -static void* SDLGetDirect(void) -{ - // you can not use the video memory in pixels member in fullscreen mode - return NULL; -} -#endif - INT32 VID_SetMode(INT32 modeNum) { SDLdoUngrabMouse(); @@ -1757,7 +1695,6 @@ static void Impl_SetWindowName(const char *title) { return; } - SDL2STUB(); SDL_SetWindowTitle(window, title); } @@ -1959,8 +1896,6 @@ void I_StartupGraphics(void) if (!disable_mouse) SDL_ShowCursor(SDL_DISABLE); SDLdoUngrabMouse(); - SDLWMSet(); - graphics_started = true; } From 399eddefe6ea5c243f02d28976b263dc0a129472 Mon Sep 17 00:00:00 2001 From: Ronald Kinard Date: Mon, 1 Sep 2014 00:43:01 +0000 Subject: [PATCH 10/21] SDL2: Do not use xinput, force directinput Fixes axes issue with xinput controllers. --- src/sdl/i_system.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c index cfc2e210d..d3793b6da 100644 --- a/src/sdl/i_system.c +++ b/src/sdl/i_system.c @@ -1519,6 +1519,7 @@ static int joy_open2(const char *fname) void I_InitJoystick(void) { I_ShutdownJoystick(); + SDL_SetHintWithPriority("SDL_XINPUT_ENABLED", "0", SDL_HINT_OVERRIDE); if (!strcmp(cv_usejoystick.string, "0") || M_CheckParm("-nojoy")) return; if (joy_open(cv_usejoystick.string) != -1) @@ -1534,6 +1535,7 @@ void I_InitJoystick(void) void I_InitJoystick2(void) { I_ShutdownJoystick2(); + SDL_SetHintWithPriority("SDL_XINPUT_ENABLED", "0", SDL_HINT_OVERRIDE); if (!strcmp(cv_usejoystick2.string, "0") || M_CheckParm("-nojoy")) return; if (joy_open2(cv_usejoystick2.string) != -1) From 5b07cf8ff0d4dbd04180e5dcbcb090da5f4bf256 Mon Sep 17 00:00:00 2001 From: Ronald Kinard Date: Mon, 1 Sep 2014 00:59:41 +0000 Subject: [PATCH 11/21] SDL2: Add 1600x1200 mode --- src/sdl/i_video.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sdl/i_video.c b/src/sdl/i_video.c index 66070f6c3..336a57ea0 100644 --- a/src/sdl/i_video.c +++ b/src/sdl/i_video.c @@ -83,7 +83,7 @@ #endif // maximum number of windowed modes (see windowedModes[][]) -#define MAXWINMODES (17) +#define MAXWINMODES (18) /** \brief */ @@ -148,6 +148,7 @@ static INT32 windowedModes[MAXWINMODES][2] = {1920,1200}, // 1.60,6.00 {1920,1080}, // 1.66 {1680,1050}, // 1.60,5.25 + {1600,1200}, // 1.33 {1600, 900}, // 1.66 {1366, 768}, // 1.66 {1440, 900}, // 1.60,4.50 From bc0b5505a84596d6f4a437042dc57efda5c5957d Mon Sep 17 00:00:00 2001 From: Sryder13 Date: Mon, 8 Sep 2014 00:55:32 +0100 Subject: [PATCH 12/21] OpenGL: Fix sky drawing sky positioning and scaling more correct compared to software. --- src/hardware/hw_main.c | 59 ++++++++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 23 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index e832457c0..77c56a734 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -4355,7 +4355,7 @@ static void HWR_DrawSkyBackground(player_t *player) { FOutVector v[4]; angle_t angle; - float f; + float dimensionmultiply; // 3--2 // | /| @@ -4377,36 +4377,49 @@ static void HWR_DrawSkyBackground(player_t *player) // X - if (textures[skytexture]->width > 256) - angle = (angle_t)((float)(dup_viewangle + gr_xtoviewangle[0]) - /((float)textures[skytexture]->width/256.0f)) - %(ANGLE_90-1); - else - angle = (dup_viewangle + gr_xtoviewangle[0])%(ANGLE_90-1); + // NOTE: This doesn't work right with texture widths greater than 1024 + // software doesn't draw any further than 1024 for skies anyway, but this doesn't overlap properly + // The only time this will probably be an issue is when a sky wider than 1024 is used as a sky AND a regular wall texture - f = (float)((textures[skytexture]->width/2) - * FIXED_TO_FLOAT(FINETANGENT((2048 - - ((INT32)angle>>(ANGLETOFINESHIFT + 1))) & FINEMASK))); + angle = (dup_viewangle + gr_xtoviewangle[0]); - v[0].sow = v[3].sow = 0.22f+(f)/(textures[skytexture]->width/2); - v[2].sow = v[1].sow = 0.22f+(f+(127))/(textures[skytexture]->width/2); + dimensionmultiply = ((float)textures[skytexture]->width/256.0f); + v[0].sow = v[3].sow = ((float) angle / ((ANGLE_90-1)*dimensionmultiply)); + v[2].sow = v[1].sow = (-1.0f/dimensionmultiply)+((float) angle / ((ANGLE_90-1)*dimensionmultiply)); // Y + angle = aimingangle; + + float aspectratio = (float)vid.width/(float)vid.height; + dimensionmultiply = ((float)textures[skytexture]->height/(128.0f*aspectratio)); + float angleturn = (((float)ANGLE_45-1.0f)*aspectratio)*dimensionmultiply; - if (textures[skytexture]->height > 256) - angle = (angle_t)((float)(aimingangle) - *(256.0f/(float)textures[skytexture]->height)) - %(ANGLE_90-1); // Just so that looking up and down scales right + // Middle of the sky should always be at angle 0 + // need to keep correct aspect ratio with X + if (atransform.flip) + { + // During vertical flip the sky should be flipped and it's y movement should also be flipped obviously + v[3].tow = v[2].tow = -(0.5f-(0.5f/dimensionmultiply)); + v[0].tow = v[1].tow = (-1.0f/dimensionmultiply)-(0.5f-(0.5f/dimensionmultiply)); + } else - angle = (aimingangle); + { + v[3].tow = v[2].tow = (-1.0f/dimensionmultiply)-(0.5f-(0.5f/dimensionmultiply)); + v[0].tow = v[1].tow = -(0.5f-(0.5f/dimensionmultiply)); + } - f = (float)((textures[skytexture]->height/2) - * FIXED_TO_FLOAT(FINETANGENT((2048 - - ((INT32)angle>>(ANGLETOFINESHIFT + 1))) & FINEMASK))); - - v[3].tow = v[2].tow = 0.22f+(f)/(textures[skytexture]->height/2); - v[0].tow = v[1].tow = 0.22f+(f+(127))/(textures[skytexture]->height/2); + if (angle > ANGLE_180) // Do this because we don't want the sky to suddenly teleport when crossing over 0 to 360 and vice versa + { + angle = InvAngle(angle); + v[3].tow = v[2].tow += ((float) angle / angleturn); + v[0].tow = v[1].tow += ((float) angle / angleturn); + } + else + { + v[3].tow = v[2].tow -= ((float) angle / angleturn); + v[0].tow = v[1].tow -= ((float) angle / angleturn); + } HWD.pfnDrawPolygon(NULL, v, 4, 0); } From b2852ec0f44d22d96869a06cc921f8ab61e2dc95 Mon Sep 17 00:00:00 2001 From: Sryder13 Date: Mon, 8 Sep 2014 23:29:05 +0100 Subject: [PATCH 13/21] OpenGL: Sky culling Gets rid of stuff being drawn where the sky should be being drawn. --- src/hardware/hw_main.c | 75 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 77c56a734..581a8bb71 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -1286,6 +1286,25 @@ static void HWR_SplitFog(sector_t *sector, wallVert3D *wallVerts, FSurfaceInfo* HWR_AddTransparentWall(wallVerts, Surf, 0, PF_Translucent|PF_NoTexture, true, lightnum, colormap); } +// HWR_DrawSkyWalls +// Draw walls into the depth buffer so that anything behind is culled properly +static void HWR_DrawSkyWall(wallVert3D *wallVerts, FSurfaceInfo *Surf, fixed_t bottom, fixed_t top) +{ + HWD.pfnSetTexture(NULL); + // no texture + wallVerts[3].t = wallVerts[2].t = 0; + wallVerts[0].t = wallVerts[1].t = 0; + wallVerts[0].s = wallVerts[3].s = 0; + wallVerts[2].s = wallVerts[1].s = 0; + // set top/bottom coords + wallVerts[2].y = wallVerts[3].y = FIXED_TO_FLOAT(top); // No real way to find the correct height of this + wallVerts[0].y = wallVerts[1].y = FIXED_TO_FLOAT(bottom); // worldlow/bottom because it needs to cover up the lower thok barrier wall + HWR_ProjectWall(wallVerts, Surf, PF_Invisible|PF_Clip|PF_NoTexture, 255, NULL); + // PF_Invisible so it's not drawn into the colour buffer + // PF_NoTexture for no texture + // PF_Occlude is set in HWR_ProjectWall to draw into the depth buffer +} + // // HWR_StoreWallRange // A portion or all of a wall segment will be drawn, from startfrac to endfrac, @@ -1674,6 +1693,57 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) Surf.FlatColor.rgba = 0xffffffff; }*/ } + + // Isn't this just the most lovely mess + if (gr_frontsector->ceilingpic == skyflatnum || gr_backsector->ceilingpic == skyflatnum) + { + if (gr_frontsector->ceilingheight-gr_frontsector->floorheight <= 0) // current sector is a thok barrier + { + if (gr_backsector->ceilingheight-gr_backsector->floorheight <= 0) // behind sector is also a thok barrier + HWR_DrawSkyWall(wallVerts, &Surf, worldbottom < worldlow ? worldbottom : worldlow, INT32_MAX); + // behind sector is not a thok barrier + else if (gr_backsector->ceilingheight <= gr_frontsector->ceilingheight) // behind sector ceiling is lower or equal to current sector + HWR_DrawSkyWall(wallVerts, &Surf, worldhigh, INT32_MAX); + } + else if (gr_backsector->ceilingheight-gr_backsector->floorheight <= 0) // behind sector is a thok barrier, current sector is not + { + if (gr_backsector->ceilingheight >= gr_frontsector->ceilingheight // thok barrier ceiling height is equal to or greater than current sector ceiling height + || gr_backsector->floorheight <= gr_frontsector->floorheight // thok barrier ceiling height is equal to or less than current sector floor height + || gr_backsector->ceilingpic != skyflatnum) // thok barrier is not a sky + HWR_DrawSkyWall(wallVerts, &Surf, worldhigh, INT32_MAX); + } + else // neither sectors are thok barriers + { + if ((gr_backsector->ceilingheight < gr_frontsector->ceilingheight && !gr_sidedef->toptexture) // no top texture and sector behind is lower + || gr_backsector->ceilingpic != skyflatnum) // behind sector is not a sky + HWR_DrawSkyWall(wallVerts, &Surf, worldhigh, INT32_MAX); + } + } + // And now for sky floors! + if (gr_frontsector->floorpic == skyflatnum || gr_backsector->floorpic == skyflatnum) + { + if (gr_frontsector->ceilingheight-gr_frontsector->floorheight <= 0) // current sector is a thok barrier + { + if (gr_backsector->ceilingheight-gr_backsector->floorheight <= 0) // behind sector is also a thok barrier + HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, worldtop > worldhigh ? worldtop : worldhigh); + // behind sector is not a thok barrier + else if (gr_backsector->floorheight >= gr_frontsector->floorheight) // behind sector floor is greater or equal to current sector + HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, worldlow); + } + else if (gr_backsector->ceilingheight-gr_backsector->floorheight <= 0) // behind sector is a thok barrier, current sector is not + { + if (gr_backsector->floorheight <= gr_frontsector->floorheight // thok barrier floor height is equal to or less than current sector floor height + || gr_backsector->ceilingheight >= gr_frontsector->ceilingheight // thok barrier floor height is equal to or greater than current sector ceiling height + || gr_backsector->floorpic != skyflatnum) // thok barrier is not a sky + HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, worldlow); + } + else // neither sectors are thok barriers + { + if ((gr_backsector->floorheight > gr_frontsector->floorheight && !gr_sidedef->bottomtexture) // no bottom texture and sector behind is higher + || gr_backsector->floorpic != skyflatnum) // behind sector is not a sky + HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, worldlow); + } + } } else { @@ -1713,6 +1783,11 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) HWR_ProjectWall(wallVerts, &Surf, PF_Masked, lightnum, colormap); } } + + if (gr_frontsector->ceilingpic == skyflatnum) // It's a single-sided line with sky for its sector + HWR_DrawSkyWall(wallVerts, &Surf, worldtop, INT32_MAX); + if (gr_frontsector->floorpic == skyflatnum) + HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, worldbottom); } From cee8fff7b317a0d9e5191e67fd4e487f9ed27b3f Mon Sep 17 00:00:00 2001 From: Sryder13 Date: Tue, 9 Sep 2014 01:59:19 +0100 Subject: [PATCH 14/21] Quick sky fix Avoid Z-Fighting on the depth wall with the regular walls to stop the possibility of regular walls being made partially invisible. --- src/hardware/hw_main.c | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 581a8bb71..da9c5f22f 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -1697,51 +1697,76 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) // Isn't this just the most lovely mess if (gr_frontsector->ceilingpic == skyflatnum || gr_backsector->ceilingpic == skyflatnum) { + fixed_t depthwallheight; + + if (!gr_sidedef->toptexture) + depthwallheight = gr_frontsector->ceilingheight < gr_backsector->ceilingheight ? gr_frontsector->ceilingheight : gr_backsector->ceilingheight; + else + depthwallheight = gr_frontsector->ceilingheight > gr_backsector->ceilingheight ? gr_frontsector->ceilingheight : gr_backsector->ceilingheight; + if (gr_frontsector->ceilingheight-gr_frontsector->floorheight <= 0) // current sector is a thok barrier { if (gr_backsector->ceilingheight-gr_backsector->floorheight <= 0) // behind sector is also a thok barrier - HWR_DrawSkyWall(wallVerts, &Surf, worldbottom < worldlow ? worldbottom : worldlow, INT32_MAX); + { + if (!gr_sidedef->bottomtexture) // Only extend further down if there's no texture + HWR_DrawSkyWall(wallVerts, &Surf, worldbottom < worldlow ? worldbottom : worldlow, INT32_MAX); + else + HWR_DrawSkyWall(wallVerts, &Surf, worldbottom > worldlow ? worldbottom : worldlow, INT32_MAX); + } // behind sector is not a thok barrier else if (gr_backsector->ceilingheight <= gr_frontsector->ceilingheight) // behind sector ceiling is lower or equal to current sector - HWR_DrawSkyWall(wallVerts, &Surf, worldhigh, INT32_MAX); + HWR_DrawSkyWall(wallVerts, &Surf, depthwallheight, INT32_MAX); + // gr_front/backsector heights need to be used here because of the worldtop being set to worldhigh earlier on } else if (gr_backsector->ceilingheight-gr_backsector->floorheight <= 0) // behind sector is a thok barrier, current sector is not { if (gr_backsector->ceilingheight >= gr_frontsector->ceilingheight // thok barrier ceiling height is equal to or greater than current sector ceiling height || gr_backsector->floorheight <= gr_frontsector->floorheight // thok barrier ceiling height is equal to or less than current sector floor height || gr_backsector->ceilingpic != skyflatnum) // thok barrier is not a sky - HWR_DrawSkyWall(wallVerts, &Surf, worldhigh, INT32_MAX); + HWR_DrawSkyWall(wallVerts, &Surf, depthwallheight, INT32_MAX); } else // neither sectors are thok barriers { if ((gr_backsector->ceilingheight < gr_frontsector->ceilingheight && !gr_sidedef->toptexture) // no top texture and sector behind is lower || gr_backsector->ceilingpic != skyflatnum) // behind sector is not a sky - HWR_DrawSkyWall(wallVerts, &Surf, worldhigh, INT32_MAX); + HWR_DrawSkyWall(wallVerts, &Surf, depthwallheight, INT32_MAX); } } // And now for sky floors! if (gr_frontsector->floorpic == skyflatnum || gr_backsector->floorpic == skyflatnum) { + fixed_t depthwallheight; + + if (!gr_sidedef->bottomtexture) + depthwallheight = worldbottom > worldlow ? worldbottom : worldlow; + else + depthwallheight = worldbottom < worldlow ? worldbottom : worldlow; + if (gr_frontsector->ceilingheight-gr_frontsector->floorheight <= 0) // current sector is a thok barrier { if (gr_backsector->ceilingheight-gr_backsector->floorheight <= 0) // behind sector is also a thok barrier - HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, worldtop > worldhigh ? worldtop : worldhigh); + { + if (!gr_sidedef->toptexture) // Only extend up if there's no texture + HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, worldtop > worldhigh ? worldtop : worldhigh); + else + HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, worldtop < worldhigh ? worldtop : worldhigh); + } // behind sector is not a thok barrier else if (gr_backsector->floorheight >= gr_frontsector->floorheight) // behind sector floor is greater or equal to current sector - HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, worldlow); + HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, depthwallheight); } else if (gr_backsector->ceilingheight-gr_backsector->floorheight <= 0) // behind sector is a thok barrier, current sector is not { if (gr_backsector->floorheight <= gr_frontsector->floorheight // thok barrier floor height is equal to or less than current sector floor height || gr_backsector->ceilingheight >= gr_frontsector->ceilingheight // thok barrier floor height is equal to or greater than current sector ceiling height || gr_backsector->floorpic != skyflatnum) // thok barrier is not a sky - HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, worldlow); + HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, depthwallheight); } else // neither sectors are thok barriers { if ((gr_backsector->floorheight > gr_frontsector->floorheight && !gr_sidedef->bottomtexture) // no bottom texture and sector behind is higher || gr_backsector->floorpic != skyflatnum) // behind sector is not a sky - HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, worldlow); + HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, depthwallheight); } } } From 987f9f5c261291dfa0d23587036d27a0426c851b Mon Sep 17 00:00:00 2001 From: Sryder13 Date: Tue, 9 Sep 2014 23:57:12 +0100 Subject: [PATCH 15/21] Quick sky fix 2 walls not extending down when a thok barrier has top textures and both ceilings have sky. --- src/hardware/hw_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index da9c5f22f..621ec7237 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -1699,7 +1699,7 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) { fixed_t depthwallheight; - if (!gr_sidedef->toptexture) + if (!gr_sidedef->toptexture || (gr_frontsector->ceilingpic == skyflatnum && gr_backsector->ceilingpic == skyflatnum)) // when both sectors are sky, the top texture isn't drawn depthwallheight = gr_frontsector->ceilingheight < gr_backsector->ceilingheight ? gr_frontsector->ceilingheight : gr_backsector->ceilingheight; else depthwallheight = gr_frontsector->ceilingheight > gr_backsector->ceilingheight ? gr_frontsector->ceilingheight : gr_backsector->ceilingheight; From 781dd16fa6c3a5174fe35961d2296e9f509c4205 Mon Sep 17 00:00:00 2001 From: Sryder13 Date: Wed, 10 Sep 2014 00:22:39 +0100 Subject: [PATCH 16/21] Fix THOK MD2's not rotating with camera Will also fix any other case that an mobj has a skin and a single frame. --- src/hardware/hw_md2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index 0af7455ed..02f505351 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -1230,7 +1230,7 @@ void HWR_DrawMD2(gr_vissprite_t *spr) else p.z = FIXED_TO_FLOAT(spr->mobj->z); - if (spr->mobj->skin) + if (spr->mobj->skin && spr->mobj->sprite == SPR_PLAY) sprdef = &((skin_t *)spr->mobj->skin)->spritedef; else sprdef = &sprites[spr->mobj->sprite]; From 0c0ede6f18387003ca808bcb6d0ddc33a585f36f Mon Sep 17 00:00:00 2001 From: Sryder13 Date: Mon, 27 Oct 2014 20:57:45 +0000 Subject: [PATCH 17/21] OpenGL: Polyobject Planes --- src/hardware/hw_main.c | 487 ++++++++++++++++++++++++++++++++++------- 1 file changed, 413 insertions(+), 74 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 621ec7237..f87af0741 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -66,6 +66,8 @@ static void HWR_ProjectPrecipitationSprite(precipmobj_t *thing); #ifdef SORTING void HWR_AddTransparentFloor(lumpnum_t lumpnum, extrasubsector_t *xsub, fixed_t fixedheight, INT32 lightlevel, INT32 alpha, sector_t *FOFSector, FBITFIELD blend, boolean fogplane, extracolormap_t *planecolormap); +void HWR_AddTransparentPolyobjectFloor(lumpnum_t lumpnum, polyobj_t *polysector, fixed_t fixedheight, + INT32 lightlevel, INT32 alpha, sector_t *FOFSector, FBITFIELD blend, extracolormap_t *planecolormap); #else static void HWR_Add3DWater(lumpnum_t lumpnum, extrasubsector_t *xsub, fixed_t fixedheight, INT32 lightlevel, INT32 alpha, sector_t *FOFSector); @@ -1695,78 +1697,81 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) } // Isn't this just the most lovely mess - if (gr_frontsector->ceilingpic == skyflatnum || gr_backsector->ceilingpic == skyflatnum) + if (!gr_curline->polyseg) // Don't do it for polyobjects { - fixed_t depthwallheight; - - if (!gr_sidedef->toptexture || (gr_frontsector->ceilingpic == skyflatnum && gr_backsector->ceilingpic == skyflatnum)) // when both sectors are sky, the top texture isn't drawn - depthwallheight = gr_frontsector->ceilingheight < gr_backsector->ceilingheight ? gr_frontsector->ceilingheight : gr_backsector->ceilingheight; - else - depthwallheight = gr_frontsector->ceilingheight > gr_backsector->ceilingheight ? gr_frontsector->ceilingheight : gr_backsector->ceilingheight; - - if (gr_frontsector->ceilingheight-gr_frontsector->floorheight <= 0) // current sector is a thok barrier + if (gr_frontsector->ceilingpic == skyflatnum || gr_backsector->ceilingpic == skyflatnum) { - if (gr_backsector->ceilingheight-gr_backsector->floorheight <= 0) // behind sector is also a thok barrier + fixed_t depthwallheight; + + if (!gr_sidedef->toptexture || (gr_frontsector->ceilingpic == skyflatnum && gr_backsector->ceilingpic == skyflatnum)) // when both sectors are sky, the top texture isn't drawn + depthwallheight = gr_frontsector->ceilingheight < gr_backsector->ceilingheight ? gr_frontsector->ceilingheight : gr_backsector->ceilingheight; + else + depthwallheight = gr_frontsector->ceilingheight > gr_backsector->ceilingheight ? gr_frontsector->ceilingheight : gr_backsector->ceilingheight; + + if (gr_frontsector->ceilingheight-gr_frontsector->floorheight <= 0) // current sector is a thok barrier { - if (!gr_sidedef->bottomtexture) // Only extend further down if there's no texture - HWR_DrawSkyWall(wallVerts, &Surf, worldbottom < worldlow ? worldbottom : worldlow, INT32_MAX); - else - HWR_DrawSkyWall(wallVerts, &Surf, worldbottom > worldlow ? worldbottom : worldlow, INT32_MAX); + if (gr_backsector->ceilingheight-gr_backsector->floorheight <= 0) // behind sector is also a thok barrier + { + if (!gr_sidedef->bottomtexture) // Only extend further down if there's no texture + HWR_DrawSkyWall(wallVerts, &Surf, worldbottom < worldlow ? worldbottom : worldlow, INT32_MAX); + else + HWR_DrawSkyWall(wallVerts, &Surf, worldbottom > worldlow ? worldbottom : worldlow, INT32_MAX); + } + // behind sector is not a thok barrier + else if (gr_backsector->ceilingheight <= gr_frontsector->ceilingheight) // behind sector ceiling is lower or equal to current sector + HWR_DrawSkyWall(wallVerts, &Surf, depthwallheight, INT32_MAX); + // gr_front/backsector heights need to be used here because of the worldtop being set to worldhigh earlier on } - // behind sector is not a thok barrier - else if (gr_backsector->ceilingheight <= gr_frontsector->ceilingheight) // behind sector ceiling is lower or equal to current sector - HWR_DrawSkyWall(wallVerts, &Surf, depthwallheight, INT32_MAX); - // gr_front/backsector heights need to be used here because of the worldtop being set to worldhigh earlier on - } - else if (gr_backsector->ceilingheight-gr_backsector->floorheight <= 0) // behind sector is a thok barrier, current sector is not - { - if (gr_backsector->ceilingheight >= gr_frontsector->ceilingheight // thok barrier ceiling height is equal to or greater than current sector ceiling height - || gr_backsector->floorheight <= gr_frontsector->floorheight // thok barrier ceiling height is equal to or less than current sector floor height - || gr_backsector->ceilingpic != skyflatnum) // thok barrier is not a sky - HWR_DrawSkyWall(wallVerts, &Surf, depthwallheight, INT32_MAX); - } - else // neither sectors are thok barriers - { - if ((gr_backsector->ceilingheight < gr_frontsector->ceilingheight && !gr_sidedef->toptexture) // no top texture and sector behind is lower - || gr_backsector->ceilingpic != skyflatnum) // behind sector is not a sky - HWR_DrawSkyWall(wallVerts, &Surf, depthwallheight, INT32_MAX); - } - } - // And now for sky floors! - if (gr_frontsector->floorpic == skyflatnum || gr_backsector->floorpic == skyflatnum) - { - fixed_t depthwallheight; - - if (!gr_sidedef->bottomtexture) - depthwallheight = worldbottom > worldlow ? worldbottom : worldlow; - else - depthwallheight = worldbottom < worldlow ? worldbottom : worldlow; - - if (gr_frontsector->ceilingheight-gr_frontsector->floorheight <= 0) // current sector is a thok barrier - { - if (gr_backsector->ceilingheight-gr_backsector->floorheight <= 0) // behind sector is also a thok barrier + else if (gr_backsector->ceilingheight-gr_backsector->floorheight <= 0) // behind sector is a thok barrier, current sector is not { - if (!gr_sidedef->toptexture) // Only extend up if there's no texture - HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, worldtop > worldhigh ? worldtop : worldhigh); - else - HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, worldtop < worldhigh ? worldtop : worldhigh); + if (gr_backsector->ceilingheight >= gr_frontsector->ceilingheight // thok barrier ceiling height is equal to or greater than current sector ceiling height + || gr_backsector->floorheight <= gr_frontsector->floorheight // thok barrier ceiling height is equal to or less than current sector floor height + || gr_backsector->ceilingpic != skyflatnum) // thok barrier is not a sky + HWR_DrawSkyWall(wallVerts, &Surf, depthwallheight, INT32_MAX); + } + else // neither sectors are thok barriers + { + if ((gr_backsector->ceilingheight < gr_frontsector->ceilingheight && !gr_sidedef->toptexture) // no top texture and sector behind is lower + || gr_backsector->ceilingpic != skyflatnum) // behind sector is not a sky + HWR_DrawSkyWall(wallVerts, &Surf, depthwallheight, INT32_MAX); } - // behind sector is not a thok barrier - else if (gr_backsector->floorheight >= gr_frontsector->floorheight) // behind sector floor is greater or equal to current sector - HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, depthwallheight); } - else if (gr_backsector->ceilingheight-gr_backsector->floorheight <= 0) // behind sector is a thok barrier, current sector is not + // And now for sky floors! + if (gr_frontsector->floorpic == skyflatnum || gr_backsector->floorpic == skyflatnum) { - if (gr_backsector->floorheight <= gr_frontsector->floorheight // thok barrier floor height is equal to or less than current sector floor height - || gr_backsector->ceilingheight >= gr_frontsector->ceilingheight // thok barrier floor height is equal to or greater than current sector ceiling height - || gr_backsector->floorpic != skyflatnum) // thok barrier is not a sky - HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, depthwallheight); - } - else // neither sectors are thok barriers - { - if ((gr_backsector->floorheight > gr_frontsector->floorheight && !gr_sidedef->bottomtexture) // no bottom texture and sector behind is higher - || gr_backsector->floorpic != skyflatnum) // behind sector is not a sky - HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, depthwallheight); + fixed_t depthwallheight; + + if (!gr_sidedef->bottomtexture) + depthwallheight = worldbottom > worldlow ? worldbottom : worldlow; + else + depthwallheight = worldbottom < worldlow ? worldbottom : worldlow; + + if (gr_frontsector->ceilingheight-gr_frontsector->floorheight <= 0) // current sector is a thok barrier + { + if (gr_backsector->ceilingheight-gr_backsector->floorheight <= 0) // behind sector is also a thok barrier + { + if (!gr_sidedef->toptexture) // Only extend up if there's no texture + HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, worldtop > worldhigh ? worldtop : worldhigh); + else + HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, worldtop < worldhigh ? worldtop : worldhigh); + } + // behind sector is not a thok barrier + else if (gr_backsector->floorheight >= gr_frontsector->floorheight) // behind sector floor is greater or equal to current sector + HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, depthwallheight); + } + else if (gr_backsector->ceilingheight-gr_backsector->floorheight <= 0) // behind sector is a thok barrier, current sector is not + { + if (gr_backsector->floorheight <= gr_frontsector->floorheight // thok barrier floor height is equal to or less than current sector floor height + || gr_backsector->ceilingheight >= gr_frontsector->ceilingheight // thok barrier floor height is equal to or greater than current sector ceiling height + || gr_backsector->floorpic != skyflatnum) // thok barrier is not a sky + HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, depthwallheight); + } + else // neither sectors are thok barriers + { + if ((gr_backsector->floorheight > gr_frontsector->floorheight && !gr_sidedef->bottomtexture) // no bottom texture and sector behind is higher + || gr_backsector->floorpic != skyflatnum) // behind sector is not a sky + HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, depthwallheight); + } } } } @@ -1809,10 +1814,13 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) } } - if (gr_frontsector->ceilingpic == skyflatnum) // It's a single-sided line with sky for its sector - HWR_DrawSkyWall(wallVerts, &Surf, worldtop, INT32_MAX); - if (gr_frontsector->floorpic == skyflatnum) - HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, worldbottom); + if (!gr_curline->polyseg) + { + if (gr_frontsector->ceilingpic == skyflatnum) // It's a single-sided line with sky for its sector + HWR_DrawSkyWall(wallVerts, &Surf, worldtop, INT32_MAX); + if (gr_frontsector->floorpic == skyflatnum) + HWR_DrawSkyWall(wallVerts, &Surf, INT32_MIN, worldbottom); + } } @@ -2612,6 +2620,234 @@ static inline void HWR_AddPolyObjectSegs(void) Z_Free(pv1); Z_Free(gr_fakeline); } + +#ifdef POLYOBJECTS_PLANES +static void HWR_RenderPolyObjectPlane(polyobj_t *polysector, fixed_t fixedheight, + FBITFIELD blendmode, UINT8 lightlevel, lumpnum_t lumpnum, sector_t *FOFsector, + UINT8 alpha, extracolormap_t *planecolormap) +{ + float height; //constant y for all points on the convex flat polygon + FOutVector *v3d; + INT32 i; + float flatxref,flatyref; + float fflatsize; + INT32 flatflag; + size_t len; + float scrollx = 0.0f, scrolly = 0.0f; + angle_t angle = 0; + FSurfaceInfo Surf; + fixed_t tempxsow, tempytow; + size_t nrPlaneVerts; + + static FOutVector *planeVerts = NULL; + static UINT16 numAllocedPlaneVerts = 0; + + nrPlaneVerts = polysector->numVertices; + + height = FIXED_TO_FLOAT(fixedheight); + + if (nrPlaneVerts < 3) //not even a triangle ? + return; + + if (nrPlaneVerts > UINT16_MAX) // FIXME: exceeds plVerts size + { + CONS_Debug(DBG_RENDER, "polygon size of %d exceeds max value of %d vertices\n", nrPlaneVerts, UINT16_MAX); + return; + } + + // Allocate plane-vertex buffer if we need to + if (!planeVerts || nrPlaneVerts > numAllocedPlaneVerts) + { + numAllocedPlaneVerts = (UINT16)nrPlaneVerts; + Z_Free(planeVerts); + Z_Malloc(numAllocedPlaneVerts * sizeof (FOutVector), PU_LEVEL, &planeVerts); + } + + len = W_LumpLength(lumpnum); + + switch (len) + { + case 4194304: // 2048x2048 lump + fflatsize = 2048.0f; + flatflag = 2047; + break; + case 1048576: // 1024x1024 lump + fflatsize = 1024.0f; + flatflag = 1023; + break; + case 262144:// 512x512 lump + fflatsize = 512.0f; + flatflag = 511; + break; + case 65536: // 256x256 lump + fflatsize = 256.0f; + flatflag = 255; + break; + case 16384: // 128x128 lump + fflatsize = 128.0f; + flatflag = 127; + break; + case 1024: // 32x32 lump + fflatsize = 32.0f; + flatflag = 31; + break; + default: // 64x64 lump + fflatsize = 64.0f; + flatflag = 63; + break; + } + + // reference point for flat texture coord for each vertex around the polygon + flatxref = (float)(((fixed_t)FIXED_TO_FLOAT(polysector->origVerts[0].x) & (~flatflag)) / fflatsize); + flatyref = (float)(((fixed_t)FIXED_TO_FLOAT(polysector->origVerts[0].y) & (~flatflag)) / fflatsize); + + // transform + v3d = planeVerts; + + if (FOFsector != NULL) + { + if (fixedheight == FOFsector->floorheight) // it's a floor + { + scrollx = FIXED_TO_FLOAT(FOFsector->floor_xoffs)/fflatsize; + scrolly = FIXED_TO_FLOAT(FOFsector->floor_yoffs)/fflatsize; + angle = FOFsector->floorpic_angle>>ANGLETOFINESHIFT; + } + else // it's a ceiling + { + scrollx = FIXED_TO_FLOAT(FOFsector->ceiling_xoffs)/fflatsize; + scrolly = FIXED_TO_FLOAT(FOFsector->ceiling_yoffs)/fflatsize; + angle = FOFsector->ceilingpic_angle>>ANGLETOFINESHIFT; + } + } + else if (gr_frontsector) + { + if (fixedheight < dup_viewz) // it's a floor + { + scrollx = FIXED_TO_FLOAT(gr_frontsector->floor_xoffs)/fflatsize; + scrolly = FIXED_TO_FLOAT(gr_frontsector->floor_yoffs)/fflatsize; + angle = gr_frontsector->floorpic_angle>>ANGLETOFINESHIFT; + } + else // it's a ceiling + { + scrollx = FIXED_TO_FLOAT(gr_frontsector->ceiling_xoffs)/fflatsize; + scrolly = FIXED_TO_FLOAT(gr_frontsector->ceiling_yoffs)/fflatsize; + angle = gr_frontsector->ceilingpic_angle>>ANGLETOFINESHIFT; + } + } + + if (angle) // Only needs to be done if there's an altered angle + { + // This needs to be done so that it scrolls in a different direction after rotation like software + tempxsow = FLOAT_TO_FIXED(scrollx); + tempytow = FLOAT_TO_FIXED(scrolly); + scrollx = (FIXED_TO_FLOAT(FixedMul(tempxsow, FINECOSINE(angle)) - FixedMul(tempytow, FINESINE(angle)))); + scrolly = (FIXED_TO_FLOAT(FixedMul(tempxsow, FINESINE(angle)) + FixedMul(tempytow, FINECOSINE(angle)))); + + // This needs to be done so everything aligns after rotation + // It would be done so that rotation is done, THEN the translation, but I couldn't get it to rotate AND scroll like software does + tempxsow = FLOAT_TO_FIXED(flatxref); + tempytow = FLOAT_TO_FIXED(flatyref); + flatxref = (FIXED_TO_FLOAT(FixedMul(tempxsow, FINECOSINE(angle)) - FixedMul(tempytow, FINESINE(angle)))); + flatyref = (FIXED_TO_FLOAT(FixedMul(tempxsow, FINESINE(angle)) + FixedMul(tempytow, FINECOSINE(angle)))); + } + + for (i = 0; i < nrPlaneVerts; i++,v3d++) + { + // Hurdler: add scrolling texture on floor/ceiling + v3d->sow = (float)((FIXED_TO_FLOAT(polysector->origVerts[i].x) / fflatsize) - flatxref + scrollx); // Go from the polysector's original vertex locations + v3d->tow = (float)(flatyref - (FIXED_TO_FLOAT(polysector->origVerts[i].y) / fflatsize) + scrolly); // Means the flat is offset based on the original vertex locations + + // Need to rotate before translate + if (angle) // Only needs to be done if there's an altered angle + { + tempxsow = FLOAT_TO_FIXED(v3d->sow); + tempytow = FLOAT_TO_FIXED(v3d->tow); + v3d->sow = (FIXED_TO_FLOAT(FixedMul(tempxsow, FINECOSINE(angle)) - FixedMul(tempytow, FINESINE(angle)))); + v3d->tow = (FIXED_TO_FLOAT(-FixedMul(tempxsow, FINESINE(angle)) - FixedMul(tempytow, FINECOSINE(angle)))); + } + + v3d->x = FIXED_TO_FLOAT(polysector->lines[i]->v1->x); + v3d->y = height; + v3d->z = FIXED_TO_FLOAT(polysector->lines[i]->v1->y); + } + + + if (planecolormap) + Surf.FlatColor.rgba = HWR_Lighting(lightlevel, planecolormap->rgba, planecolormap->fadergba, false, true); + else + Surf.FlatColor.rgba = HWR_Lighting(lightlevel, NORMALFOG, FADEFOG, false, true); + + if (blendmode & PF_Translucent) + { + Surf.FlatColor.s.alpha = (UINT8)alpha; + blendmode |= PF_Modulated|PF_Occlude|PF_Clip; + } + else + blendmode |= PF_Masked|PF_Modulated|PF_Clip; + + HWD.pfnDrawPolygon(&Surf, planeVerts, nrPlaneVerts, blendmode); +} + +static void HWR_AddPolyObjectPlanes(void) +{ + size_t i; + sector_t *polyobjsector; + + // Polyobject Planes need their own function for drawing because they don't have extrasubsectors by themselves + // It should be okay because polyobjects should always be convex anyway + + for (i = 0; i < numpolys; i++) + { + polyobjsector = po_ptrs[i]->lines[0]->backsector; // the in-level polyobject sector + + if (!(po_ptrs[i]->flags & POF_RENDERPLANES)) // Only render planes when you should + continue; + + if (po_ptrs[i]->translucency >= NUMTRANSMAPS) + continue; + + if (polyobjsector->floorheight <= gr_frontsector->ceilingheight + && polyobjsector->floorheight >= gr_frontsector->floorheight + && (viewz < polyobjsector->floorheight)) + { + if (po_ptrs[i]->translucency > 0) + { + FSurfaceInfo Surf; + FBITFIELD blendmode = HWR_TranstableToAlpha(po_ptrs[i]->translucency, &Surf); + HWR_AddTransparentPolyobjectFloor(levelflats[polyobjsector->floorpic].lumpnum, po_ptrs[i], polyobjsector->floorheight, + polyobjsector->lightlevel, Surf.FlatColor.s.alpha, polyobjsector, blendmode, NULL); + } + else + { + HWR_GetFlat(levelflats[polyobjsector->floorpic].lumpnum); + HWR_RenderPolyObjectPlane(po_ptrs[i], polyobjsector->floorheight, PF_Occlude, + polyobjsector->lightlevel, levelflats[polyobjsector->floorpic].lumpnum, + polyobjsector, 255, NULL); + } + } + + if (polyobjsector->ceilingheight >= gr_frontsector->floorheight + && polyobjsector->ceilingheight <= gr_frontsector->ceilingheight + && (viewz > polyobjsector->ceilingheight)) + { + if (po_ptrs[i]->translucency > 0) + { + FSurfaceInfo Surf; + FBITFIELD blendmode = HWR_TranstableToAlpha(po_ptrs[i]->translucency, &Surf); + HWR_AddTransparentPolyobjectFloor(levelflats[polyobjsector->ceilingpic].lumpnum, po_ptrs[i], polyobjsector->ceilingheight, + polyobjsector->lightlevel, Surf.FlatColor.s.alpha, polyobjsector, blendmode, NULL); + } + else + { + HWR_GetFlat(levelflats[polyobjsector->ceilingpic].lumpnum); + HWR_RenderPolyObjectPlane(po_ptrs[i], polyobjsector->ceilingheight, PF_Occlude, + polyobjsector->lightlevel, levelflats[polyobjsector->floorpic].lumpnum, + polyobjsector, 255, NULL); + } + } + } +} +#endif #endif // -----------------+ @@ -2922,8 +3158,13 @@ static void HWR_Subsector(size_t num) // Draw polyobject lines. HWR_AddPolyObjectSegs(); - // Draw polyobject planes - //HWR_AddPolyObjectPlanes(); +#ifdef POLYOBJECTS_PLANES + if (sub->validcount != validcount) // This validcount situation seems to let us know that the floors have already been drawn. + { + // Draw polyobject planes + HWR_AddPolyObjectPlanes(); + } +#endif } #endif @@ -3804,6 +4045,22 @@ typedef struct static size_t numplanes = 0; // a list of transparent floors to be drawn static planeinfo_t *planeinfo = NULL; +typedef struct +{ + polyobj_t *polysector; + fixed_t fixedheight; + INT32 lightlevel; + lumpnum_t lumpnum; + INT32 alpha; + sector_t *FOFSector; + FBITFIELD blend; + extracolormap_t *planecolormap; + INT32 drawcount; +} polyplaneinfo_t; + +static size_t numpolyplanes = 0; // a list of transparent poyobject floors to be drawn +static polyplaneinfo_t *polyplaneinfo = NULL; + #ifndef SORTING size_t numfloors = 0; #else @@ -3813,6 +4070,7 @@ size_t numfloors = 0; typedef struct gr_drawnode_s { planeinfo_t *plane; + polyplaneinfo_t *polyplane; wallinfo_t *wall; gr_vissprite_t *sprite; @@ -3853,6 +4111,35 @@ void HWR_AddTransparentFloor(lumpnum_t lumpnum, extrasubsector_t *xsub, numplanes++; } +// Adding this for now until I can create extrasubsector info for polyobjects +// When that happens it'll just be done through HWR_AddTransparentFloor and HWR_RenderPlane +void HWR_AddTransparentPolyobjectFloor(lumpnum_t lumpnum, polyobj_t *polysector, + fixed_t fixedheight, INT32 lightlevel, INT32 alpha, sector_t *FOFSector, FBITFIELD blend, extracolormap_t *planecolormap) +{ + static size_t allocedpolyplanes = 0; + + // Force realloc if buffer has been freed + if (!polyplaneinfo) + allocedpolyplanes = 0; + + if (allocedpolyplanes < numpolyplanes + 1) + { + allocedpolyplanes += MAX_TRANSPARENTFLOOR; + Z_Realloc(polyplaneinfo, allocedpolyplanes * sizeof (*polyplaneinfo), PU_LEVEL, &polyplaneinfo); + } + + polyplaneinfo[numpolyplanes].fixedheight = fixedheight; + polyplaneinfo[numpolyplanes].lightlevel = lightlevel; + polyplaneinfo[numpolyplanes].lumpnum = lumpnum; + polyplaneinfo[numpolyplanes].polysector = polysector; + polyplaneinfo[numpolyplanes].alpha = alpha; + polyplaneinfo[numpolyplanes].FOFSector = FOFSector; + polyplaneinfo[numpolyplanes].blend = blend; + polyplaneinfo[numpolyplanes].planecolormap = planecolormap; + polyplaneinfo[numpolyplanes].drawcount = drawcount++; + numpolyplanes++; +} + // // HWR_CreateDrawNodes // Creates and sorts a list of drawnodes for the scene being rendered. @@ -3865,12 +4152,13 @@ static void HWR_CreateDrawNodes(void) // Could this be optimized into _AddTransparentWall/_AddTransparentPlane? // Hell yes! But sort algorithm must be modified to use a linked list. gr_drawnode_t *sortnode = Z_Calloc((sizeof(planeinfo_t)*numplanes) + + (sizeof(polyplaneinfo_t)*numpolyplanes) + (sizeof(wallinfo_t)*numwalls) ,PU_STATIC, NULL); // todo: // However, in reality we shouldn't be re-copying and shifting all this information // that is already lying around. This should all be in some sort of linked list or lists. - size_t *sortindex = Z_Calloc(sizeof(size_t) * (numplanes + numwalls), PU_STATIC, NULL); + size_t *sortindex = Z_Calloc(sizeof(size_t) * (numplanes + numpolyplanes + numwalls), PU_STATIC, NULL); // If true, swap the draw order. boolean shift = false; @@ -3881,6 +4169,12 @@ static void HWR_CreateDrawNodes(void) sortindex[p] = p; } + for (i = 0; i < numpolyplanes; i++, p++) + { + sortnode[p].polyplane = &polyplaneinfo[i]; + sortindex[p] = p; + } + for (i = 0; i < numwalls; i++, p++) { sortnode[p].wall = &wallinfo[i]; @@ -3916,6 +4210,12 @@ static void HWR_CreateDrawNodes(void) if (ABS(sortnode[sortindex[i]].plane->fixedheight - pviewz) > ABS(sortnode[sortindex[prev]].plane->fixedheight - pviewz)) shift = true; } + if (sortnode[sortindex[prev]].polyplane) + { + // Plane (i) is further away than polyplane (prev) + if (ABS(sortnode[sortindex[i]].plane->fixedheight - pviewz) > ABS(sortnode[sortindex[prev]].polyplane->fixedheight - pviewz)) + shift = true; + } else if (sortnode[sortindex[prev]].wall) { // Plane (i) is further than wall (prev) @@ -3923,6 +4223,28 @@ static void HWR_CreateDrawNodes(void) shift = true; } } + else if (sortnode[sortindex[i]].polyplane) + { + // What are we comparing it with? + if (sortnode[sortindex[prev]].plane) + { + // Plane (i) is further away than plane (prev) + if (ABS(sortnode[sortindex[i]].polyplane->fixedheight - pviewz) > ABS(sortnode[sortindex[prev]].plane->fixedheight - pviewz)) + shift = true; + } + if (sortnode[sortindex[prev]].polyplane) + { + // Plane (i) is further away than polyplane (prev) + if (ABS(sortnode[sortindex[i]].polyplane->fixedheight - pviewz) > ABS(sortnode[sortindex[prev]].polyplane->fixedheight - pviewz)) + shift = true; + } + else if (sortnode[sortindex[prev]].wall) + { + // Plane (i) is further than wall (prev) + if (sortnode[sortindex[i]].polyplane->drawcount > sortnode[sortindex[prev]].wall->drawcount) + shift = true; + } + } else if (sortnode[sortindex[i]].wall) { // What are we comparing it with? @@ -3932,6 +4254,12 @@ static void HWR_CreateDrawNodes(void) if (sortnode[sortindex[i]].wall->drawcount > sortnode[sortindex[prev]].plane->drawcount) shift = true; } + if (sortnode[sortindex[prev]].polyplane) + { + // Wall (i) is further than polyplane(prev) + if (sortnode[sortindex[i]].wall->drawcount > sortnode[sortindex[prev]].polyplane->drawcount) + shift = true; + } else if (sortnode[sortindex[prev]].wall) { // Wall (i) is further than wall (prev) @@ -3968,6 +4296,16 @@ static void HWR_CreateDrawNodes(void) HWR_RenderPlane(NULL, sortnode[sortindex[i]].plane->xsub, sortnode[sortindex[i]].plane->fixedheight, sortnode[sortindex[i]].plane->blend, sortnode[sortindex[i]].plane->lightlevel, sortnode[sortindex[i]].plane->lumpnum, sortnode[sortindex[i]].plane->FOFSector, sortnode[sortindex[i]].plane->alpha, sortnode[sortindex[i]].plane->fogplane, sortnode[sortindex[i]].plane->planecolormap); } + else if (sortnode[sortindex[i]].polyplane) + { + // We aren't traversing the BSP tree, so make gr_frontsector null to avoid crashes. + gr_frontsector = NULL; + + if (!(sortnode[sortindex[i]].polyplane->blend & PF_NoTexture)) + HWR_GetFlat(sortnode[sortindex[i]].polyplane->lumpnum); + HWR_RenderPolyObjectPlane(sortnode[sortindex[i]].polyplane->polysector, sortnode[sortindex[i]].polyplane->fixedheight, sortnode[sortindex[i]].polyplane->blend, sortnode[sortindex[i]].polyplane->lightlevel, + sortnode[sortindex[i]].polyplane->lumpnum, sortnode[sortindex[i]].polyplane->FOFSector, sortnode[sortindex[i]].polyplane->alpha, sortnode[sortindex[i]].polyplane->planecolormap); + } else if (sortnode[sortindex[i]].wall) { if (!(sortnode[sortindex[i]].wall->blend & PF_NoTexture)) @@ -3979,6 +4317,7 @@ static void HWR_CreateDrawNodes(void) numwalls = 0; numplanes = 0; + numpolyplanes = 0; // No mem leaks, please. Z_Free(sortnode); @@ -4768,7 +5107,7 @@ if (0) #endif #ifdef SORTING - if (numplanes || numwalls) //Hurdler: render 3D water and transparent walls after everything + if (numplanes || numpolyplanes || numwalls) //Hurdler: render 3D water and transparent walls after everything { HWR_CreateDrawNodes(); } @@ -4998,12 +5337,12 @@ if (0) #endif #ifdef SORTING - if (numplanes || numwalls) //Hurdler: render 3D water and transparent walls after everything + if (numplanes || numpolyplanes || numwalls) //Hurdler: render 3D water and transparent walls after everything { HWR_CreateDrawNodes(); } #else - if (numfloors || numwalls) + if (numfloors || numpolyplanes || numwalls) { HWD.pfnSetTransform(&atransform); if (numfloors) From aa612bcf917603771ce064fb014d794fa6d406a1 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Sat, 1 Nov 2014 23:52:17 -0400 Subject: [PATCH 18/21] whiteline checkup --- src/hardware/hw_main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index f87af0741..43be6ed0b 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -2791,7 +2791,7 @@ static void HWR_RenderPolyObjectPlane(polyobj_t *polysector, fixed_t fixedheight static void HWR_AddPolyObjectPlanes(void) { size_t i; - sector_t *polyobjsector; + sector_t *polyobjsector; // Polyobject Planes need their own function for drawing because they don't have extrasubsectors by themselves // It should be okay because polyobjects should always be convex anyway @@ -4829,7 +4829,7 @@ static void HWR_DrawSkyBackground(player_t *player) // Y angle = aimingangle; - + float aspectratio = (float)vid.width/(float)vid.height; dimensionmultiply = ((float)textures[skytexture]->height/(128.0f*aspectratio)); float angleturn = (((float)ANGLE_45-1.0f)*aspectratio)*dimensionmultiply; From 9d1da548aa7f76f194bd89ce15ab6c099fbe3878 Mon Sep 17 00:00:00 2001 From: JTE Date: Sun, 2 Nov 2014 04:15:05 +0000 Subject: [PATCH 19/21] Fix hardware / r_opengl warnings. --- src/hardware/hw_cache.c | 3 +-- src/hardware/hw_main.c | 2 +- src/hardware/r_opengl/r_opengl.c | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/hardware/hw_cache.c b/src/hardware/hw_cache.c index 4b2ff9f22..78fc31afc 100644 --- a/src/hardware/hw_cache.c +++ b/src/hardware/hw_cache.c @@ -1045,7 +1045,6 @@ static void HWR_CacheFadeMask(GLMipmap_t *grMipmap, lumpnum_t fademasklumpnum) { size_t size; UINT16 fmheight = 0, fmwidth = 0; - UINT8 *block; // The fade mask's pixels // setup the texture info grMipmap->grInfo.format = GR_TEXFMT_ALPHA_8; // put the correct alpha levels straight in so I don't need to convert it later @@ -1083,7 +1082,7 @@ static void HWR_CacheFadeMask(GLMipmap_t *grMipmap, lumpnum_t fademasklumpnum) grMipmap->width = blockwidth; grMipmap->height = blockheight; - block = MakeBlock(grMipmap); + MakeBlock(grMipmap); HWR_DrawFadeMaskInCache(grMipmap, blockwidth, blockheight, fademasklumpnum, fmwidth, fmheight); diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 43be6ed0b..3e5ee377b 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -2751,7 +2751,7 @@ static void HWR_RenderPolyObjectPlane(polyobj_t *polysector, fixed_t fixedheight flatyref = (FIXED_TO_FLOAT(FixedMul(tempxsow, FINESINE(angle)) + FixedMul(tempytow, FINECOSINE(angle)))); } - for (i = 0; i < nrPlaneVerts; i++,v3d++) + for (i = 0; i < (INT32)nrPlaneVerts; i++,v3d++) { // Hurdler: add scrolling texture on floor/ceiling v3d->sow = (float)((FIXED_TO_FLOAT(polysector->origVerts[i].x) / fflatsize) - flatxref + scrollx); // Go from the polysector's original vertex locations diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index 7590f49f4..c136d0634 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -532,7 +532,7 @@ boolean SetupGLFunc13(void) const char *glversion = (const char *)pglGetString(GL_VERSION); UINT32 majorversion = 0, minorversion = 0; - if (glversion != NULL && sscanf((char *)glversion, "%u.%u", &majorversion, &minorversion) == 2) // There is a version number I can identify + if (glversion != NULL && sscanf(glversion, "%u.%u", &majorversion, &minorversion) == 2) // There is a version number I can identify { if (majorversion > 1 || (majorversion == 1 && minorversion >= 3)) // Version of OpenGL is equal to or greater than 1.3 { From 6d773c54a584900ed677eb428cc5465e69e9fe70 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Sun, 2 Nov 2014 01:11:37 -0500 Subject: [PATCH 20/21] Use OpenGL 1.3 in static builds and on SDL interfaces --- src/hardware/r_opengl/ogl_win.c | 3 --- src/hardware/r_opengl/r_opengl.c | 24 +++++++++++------------- src/sdl/ogl_sdl.c | 2 ++ src/sdl12/ogl_sdl.c | 2 ++ 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/hardware/r_opengl/ogl_win.c b/src/hardware/r_opengl/ogl_win.c index bfdc96d6a..5cc075cea 100644 --- a/src/hardware/r_opengl/ogl_win.c +++ b/src/hardware/r_opengl/ogl_win.c @@ -366,10 +366,7 @@ static INT32 WINAPI SetRes(viddef_t *lvid, vmode_t *pcurrentmode) else maximumAnisotropy = 0; -#ifndef MINI_GL_COMPATIBILITY SetupGLFunc13(); -#endif - screen_depth = (GLbyte)(lvid->bpp*8); if (screen_depth > 16) diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index c136d0634..0f0f7e014 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -517,18 +517,15 @@ boolean SetupGLfunc(void) return true; } -#ifndef MINI_GL_COMPATIBILITY // This has to be done after the context is created so the version number can be obtained boolean SetupGLFunc13(void) { -#ifndef STATIC_OPENGL -#define GETOPENGLFUNC(func, proc) \ - func = GetGLFunc(#proc); \ - if (!func) \ - { \ - DBG_Printf("failed to get OpenGL function: %s", #proc); \ - } \ - +#ifdef MINI_GL_COMPATIBILITY + return false; +#else +#ifdef STATIC_OPENGL + gl13 = true; +#else const char *glversion = (const char *)pglGetString(GL_VERSION); UINT32 majorversion = 0, minorversion = 0; @@ -537,18 +534,19 @@ boolean SetupGLFunc13(void) if (majorversion > 1 || (majorversion == 1 && minorversion >= 3)) // Version of OpenGL is equal to or greater than 1.3 { // Get the functions - GETOPENGLFUNC(pglActiveTexture , glActiveTexture) - GETOPENGLFUNC(pglMultiTexCoord2f , glMultiTexCoord2f) + pglActiveTexture = GetGLFunc("glActiveTexture"); + pglMultiTexCoord2f = GetGLFunc("glMultiTexCoord2f"); - gl13 = true; // This is now true, so the new fade mask stuff can be done, if OpenGL version is less than 1.3, it still uses the old fade stuff. + if (pglMultiTexCoord2f) + gl13 = true; // This is now true, so the new fade mask stuff can be done, if OpenGL version is less than 1.3, it still uses the old fade stuff. } } #undef GETOPENGLFUNC #endif return true; -} #endif +} // -----------------+ // SetNoTexture : Disable texture diff --git a/src/sdl/ogl_sdl.c b/src/sdl/ogl_sdl.c index 62055e104..6cbecaf3c 100644 --- a/src/sdl/ogl_sdl.c +++ b/src/sdl/ogl_sdl.c @@ -176,6 +176,8 @@ boolean OglSdlSurface(INT32 w, INT32 h) else maximumAnisotropy = 1; + SetupGLFunc13(); + granisotropicmode_cons_t[1].value = maximumAnisotropy; SDL_GL_SetSwapInterval(cv_vidwait.value ? 1 : 0); diff --git a/src/sdl12/ogl_sdl.c b/src/sdl12/ogl_sdl.c index e726bf07d..eb7e9996d 100644 --- a/src/sdl12/ogl_sdl.c +++ b/src/sdl12/ogl_sdl.c @@ -237,6 +237,8 @@ boolean OglSdlSurface(INT32 w, INT32 h, boolean isFullscreen) #endif maximumAnisotropy = 0; + SetupGLFunc13(); + granisotropicmode_cons_t[1].value = maximumAnisotropy; SetModelView(w, h); From 404b5f666cfa3c60d7d4637d3d3193431f3bf941 Mon Sep 17 00:00:00 2001 From: Alam Ed Arias Date: Tue, 11 Nov 2014 19:55:07 -0500 Subject: [PATCH 21/21] SRB2 2.1.12 release --- doc/manual/1up.png | Bin 1106 -> 0 bytes doc/manual/RNGA0000.png | Bin 1094 -> 0 bytes doc/manual/RNGB0000.png | Bin 1275 -> 0 bytes doc/manual/RNGE0000.png | Bin 1323 -> 0 bytes doc/manual/RNGG0000.png | Bin 1227 -> 0 bytes doc/manual/RNGR0000.png | Bin 1161 -> 0 bytes doc/manual/RNGS0000.png | Bin 1127 -> 0 bytes doc/manual/Ring0000.png | Bin 1174 -> 0 bytes doc/manual/acz.png | Bin 43670 -> 0 bytes doc/manual/airspin.png | Bin 3384 -> 0 bytes doc/manual/attack.png | Bin 3164 -> 0 bytes doc/manual/blue_monitor.png | Bin 1160 -> 0 bytes doc/manual/blue_ring.png | Bin 1218 -> 0 bytes doc/manual/bshield.png | Bin 1114 -> 0 bytes doc/manual/cez.png | Bin 36151 -> 0 bytes doc/manual/controls.png | Bin 17029 -> 0 bytes doc/manual/conveyor.png | Bin 47925 -> 0 bytes doc/manual/coop.png | Bin 9034 -> 0 bytes doc/manual/crusher.png | Bin 42536 -> 0 bytes doc/manual/ctf.png | Bin 6805 -> 0 bytes doc/manual/dsz.png | Bin 32144 -> 0 bytes doc/manual/eggbox.png | Bin 1157 -> 0 bytes doc/manual/eggman.png | Bin 10631 -> 0 bytes doc/manual/emblem.png | Bin 1367 -> 0 bytes doc/manual/fan.png | Bin 1088 -> 0 bytes doc/manual/gfz.png | Bin 19494 -> 0 bytes doc/manual/gshield.png | Bin 1113 -> 0 bytes doc/manual/invc.png | Bin 1112 -> 0 bytes doc/manual/knuckles.png | Bin 13021 -> 0 bytes doc/manual/koneup.png | Bin 1492 -> 0 bytes doc/manual/manual.htm | 4 +- doc/manual/match.png | Bin 6155 -> 0 bytes doc/manual/metal.png | Bin 5104 -> 0 bytes doc/manual/mixup.png | Bin 1162 -> 0 bytes doc/manual/pit.png | Bin 4114 -> 0 bytes doc/manual/platform.png | Bin 36247 -> 0 bytes doc/manual/race.png | Bin 7665 -> 0 bytes doc/manual/random.png | Bin 1105 -> 0 bytes doc/manual/recycler.png | Bin 1230 -> 0 bytes doc/manual/red_monitor.png | Bin 1199 -> 0 bytes doc/manual/red_ring.png | Bin 1219 -> 0 bytes doc/manual/ring.png | Bin 1109 -> 0 bytes doc/manual/rshield.png | Bin 1110 -> 0 bytes doc/manual/rvz.png | Bin 110609 -> 0 bytes doc/manual/shoes.png | Bin 1118 -> 0 bytes doc/manual/slime.png | Bin 42024 -> 0 bytes doc/manual/soneup.png | Bin 1488 -> 0 bytes doc/manual/spring1.png | Bin 938 -> 0 bytes doc/manual/spring2.png | Bin 938 -> 0 bytes doc/manual/spring3.png | Bin 1069 -> 0 bytes doc/manual/spring4.png | Bin 1045 -> 0 bytes doc/manual/spring5.png | Bin 1104 -> 0 bytes doc/manual/spring6.png | Bin 1133 -> 0 bytes doc/manual/spring7.png | Bin 937 -> 0 bytes doc/manual/spring8.png | Bin 937 -> 0 bytes doc/manual/stats_lives.png | Bin 19359 -> 0 bytes doc/manual/stats_rings.png | Bin 19450 -> 0 bytes doc/manual/tag.png | Bin 8905 -> 0 bytes doc/manual/tailsfly.png | Bin 14376 -> 0 bytes doc/manual/thanks.png | Bin 6951 -> 0 bytes doc/manual/thz.png | Bin 23896 -> 0 bytes doc/manual/title.png | Bin 34519 -> 0 bytes doc/manual/token.png | Bin 1121 -> 0 bytes doc/manual/toneup.png | Bin 1487 -> 0 bytes doc/manual/unknown.png | Bin 502 -> 0 bytes doc/manual/water.png | Bin 28174 -> 0 bytes doc/manual/wpnpanel_auto.png | Bin 1399 -> 0 bytes doc/manual/wpnpanel_bounce.png | Bin 1533 -> 0 bytes doc/manual/wpnpanel_explosion.png | Bin 1359 -> 0 bytes doc/manual/wpnpanel_grenade.png | Bin 1455 -> 0 bytes doc/manual/wpnpanel_rail.png | Bin 1489 -> 0 bytes doc/manual/wpnpanel_scatter.png | Bin 1370 -> 0 bytes doc/manual/wshield.png | Bin 1400 -> 0 bytes doc/manual/yshield.png | Bin 1112 -> 0 bytes readme.txt | 2 +- src/blua/lapi.c | 23 - src/blua/lauxlib.c | 14 - src/blua/lauxlib.h | 5 +- src/blua/lua.h | 6 +- src/blua/lvm.c | 18 +- src/command.c | 25 +- src/d_clisrv.c | 12 + src/d_main.c | 4 +- src/d_netcmd.c | 32 +- src/d_player.h | 1 + src/dehacked.c | 1 + src/doomdef.h | 14 +- src/doomstat.h | 1 - src/f_finale.c | 38 +- src/g_game.c | 277 ++++++--- src/g_game.h | 3 +- src/hardware/hw_main.c | 71 ++- src/hardware/r_opengl/r_opengl.c | 29 +- src/hu_stuff.c | 30 +- src/info.c | 36 +- src/lua_baselib.c | 19 + src/lua_hook.h | 2 +- src/lua_hooklib.c | 5 +- src/lua_hudlib.c | 45 +- src/lua_maplib.c | 11 +- src/m_menu.c | 394 ++++++++---- src/m_random.c | 8 +- src/p_enemy.c | 10 +- src/p_floor.c | 47 +- src/p_local.h | 4 + src/p_map.c | 566 +++++++---------- src/p_maputl.c | 20 +- src/p_mobj.c | 68 ++- src/p_polyobj.c | 279 ++++++++- src/p_polyobj.h | 30 +- src/p_saveg.c | 202 ++++++- src/p_setup.c | 38 +- src/p_spec.c | 274 +++++---- src/p_spec.h | 1 + src/p_tick.c | 17 +- src/p_user.c | 144 +++-- src/r_bsp.c | 133 ++-- src/r_bsp.h | 3 +- src/r_defs.h | 15 + src/r_main.c | 201 ++++++- src/r_main.h | 2 + src/r_plane.c | 90 ++- src/r_plane.h | 4 +- src/r_segs.c | 66 +- src/r_state.h | 4 + src/r_things.c | 567 ++++++++---------- src/r_things.h | 3 + src/s_sound.c | 7 +- src/sdl/i_cdmus.c | 1 - src/sdl/i_video.c | 6 +- .../macosx/Srb2mac.xcodeproj/project.pbxproj | 4 +- src/sdl12/SRB2CE/cehelp.c | 1 - .../macosx/Srb2mac.xcodeproj/project.pbxproj | 4 +- src/sounds.c | 2 +- src/st_stuff.c | 93 +-- src/v_video.c | 6 +- src/w_wad.c | 2 + src/win32/Makefile.cfg | 4 +- src/y_inter.c | 9 +- 139 files changed, 2551 insertions(+), 1506 deletions(-) delete mode 100644 doc/manual/1up.png delete mode 100644 doc/manual/RNGA0000.png delete mode 100644 doc/manual/RNGB0000.png delete mode 100644 doc/manual/RNGE0000.png delete mode 100644 doc/manual/RNGG0000.png delete mode 100644 doc/manual/RNGR0000.png delete mode 100644 doc/manual/RNGS0000.png delete mode 100644 doc/manual/Ring0000.png delete mode 100644 doc/manual/acz.png delete mode 100644 doc/manual/airspin.png delete mode 100644 doc/manual/attack.png delete mode 100644 doc/manual/blue_monitor.png delete mode 100644 doc/manual/blue_ring.png delete mode 100644 doc/manual/bshield.png delete mode 100644 doc/manual/cez.png delete mode 100644 doc/manual/controls.png delete mode 100644 doc/manual/conveyor.png delete mode 100644 doc/manual/coop.png delete mode 100644 doc/manual/crusher.png delete mode 100644 doc/manual/ctf.png delete mode 100644 doc/manual/dsz.png delete mode 100644 doc/manual/eggbox.png delete mode 100644 doc/manual/eggman.png delete mode 100644 doc/manual/emblem.png delete mode 100644 doc/manual/fan.png delete mode 100644 doc/manual/gfz.png delete mode 100644 doc/manual/gshield.png delete mode 100644 doc/manual/invc.png delete mode 100644 doc/manual/knuckles.png delete mode 100644 doc/manual/koneup.png delete mode 100644 doc/manual/match.png delete mode 100644 doc/manual/metal.png delete mode 100644 doc/manual/mixup.png delete mode 100644 doc/manual/pit.png delete mode 100644 doc/manual/platform.png delete mode 100644 doc/manual/race.png delete mode 100644 doc/manual/random.png delete mode 100644 doc/manual/recycler.png delete mode 100644 doc/manual/red_monitor.png delete mode 100644 doc/manual/red_ring.png delete mode 100644 doc/manual/ring.png delete mode 100644 doc/manual/rshield.png delete mode 100644 doc/manual/rvz.png delete mode 100644 doc/manual/shoes.png delete mode 100644 doc/manual/slime.png delete mode 100644 doc/manual/soneup.png delete mode 100644 doc/manual/spring1.png delete mode 100644 doc/manual/spring2.png delete mode 100644 doc/manual/spring3.png delete mode 100644 doc/manual/spring4.png delete mode 100644 doc/manual/spring5.png delete mode 100644 doc/manual/spring6.png delete mode 100644 doc/manual/spring7.png delete mode 100644 doc/manual/spring8.png delete mode 100644 doc/manual/stats_lives.png delete mode 100644 doc/manual/stats_rings.png delete mode 100644 doc/manual/tag.png delete mode 100644 doc/manual/tailsfly.png delete mode 100644 doc/manual/thanks.png delete mode 100644 doc/manual/thz.png delete mode 100644 doc/manual/title.png delete mode 100644 doc/manual/token.png delete mode 100644 doc/manual/toneup.png delete mode 100644 doc/manual/unknown.png delete mode 100644 doc/manual/water.png delete mode 100644 doc/manual/wpnpanel_auto.png delete mode 100644 doc/manual/wpnpanel_bounce.png delete mode 100644 doc/manual/wpnpanel_explosion.png delete mode 100644 doc/manual/wpnpanel_grenade.png delete mode 100644 doc/manual/wpnpanel_rail.png delete mode 100644 doc/manual/wpnpanel_scatter.png delete mode 100644 doc/manual/wshield.png delete mode 100644 doc/manual/yshield.png diff --git a/doc/manual/1up.png b/doc/manual/1up.png deleted file mode 100644 index d8617cb8bccfa11165a14ac82f70494e8ee83a50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1106 zcmW-hacCQL6vy8z>$Qzt2C1CeZOiO|DV%a@7}t?)xAnT-YQ}E#Dz|yk3~rjun?|@l zt`Owb-7rej2w}!8LS&r_BeG6Yi8ZV#bPy$KRx*iOz>M{eIP0iTXHjI&+u;4)#KMyl-&Csau`b+tKFa&J)a!0Bvw^|L9()^^z{qO$38MM5HLn z#`|g$P0=2$>)x01-d{z@;WG z*052=S`n*xEN8Kl#$pol_G&J=JZZGjdNZlj<7(BGE0$D>2J?oPiwKiCpVk725EoPY zmdu(Gql>Q4~p%L{St3ArJ^~9LKV(&*!6Q+Qdj? zIUH_=LRCdAN%E8!%q=CU%uq0*2w|BI1vy3V%RHO0wS+0#de98MuG z7QmYB;lVwlJ@R*b zc4ONQ_8qeCbNBh4z7L3nu1)9fwl6&YT#y^ueOaat_w2sj@irX0*xpjk7;7J29lL+x z?ztzPp*o%#_~_Zw+@W22et~OGzkBKAld|W}ZM|Pmf9<(*^HTfh#8mM!>#^yHPiCR> z$_?wrQS+>969wrB$w2^ diff --git a/doc/manual/RNGA0000.png b/doc/manual/RNGA0000.png deleted file mode 100644 index 78f98625ce7f803a40544e00ec4bbb0536fae266..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1094 zcmW-hafsV=6vyA#By;W2gF3P;e{`D7ig9EbSWY_3ZMm7hV!bgG}VkC|h7z(S^l~QTBP*}?4dYMc&m2xbrZJJHPXy|%f(`u?( zk>#=^6$POX3fUZ&W7!PDq-i=C2qY*fPLihIZ}@ysk0(M98bK%oAp=MNA^vwE}^h- znK7hbM5GlV5aua?B{{~=(7t}Z-|O|d-LB&}?RLA_Y&IH=dc9t)Rx6cCsZ=T!i}`#$ zm&;|d*>pOcOePbFL_8jk#bSnG=(?_HnyRX@EK8Ckiee}f;(4BB*oikWym6|)mY*3#3a zmNZmLm*bIeOckSw5DD|D$SDGwPwJVtk~G5ch!9mcO=9E_Epn8V&|{_=HDpbf6g4Et zoFFm05JWVW9JNyu&)RI+3fP)IB@!kBuGZ){SgWCJqh(X1h%_P;1<3P| zWg$ho<_wA~#nXP4^0+H*S}6p;0?+^?faeA!FJdo@mOF|qXyw6Vu1bl>Jtl1-`{nw^~n6xLH9#|(LLiMAMSqa$p6hC)ZG98 diff --git a/doc/manual/RNGB0000.png b/doc/manual/RNGB0000.png deleted file mode 100644 index 71a9c51be612475283523e913328e4f5acf97296..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1275 zcmXw(4NOy46o3yCQYSNS{>;LvmaWE;Re2ynH^n`mbyX@93#^VGpUAX>f<-IoHq=-D zC~nTjWUNLoRdA_4!)nOZX&KK%rMNPmlMI~bDs!$wqD9$;W5%lK^1y@?~nh5M##o#0kQwKKfCo5W*~aO*)*qGILP4gd5W`(*Vw}kxz;v z#w$yf=`#U7oC{#v1u!P0Y`+6k#RJ@11F+}-fVi^h+{zSy36Q-acj@TpXebm427`e> zps%lw=Xsyc$8ns;<8iy)E|<&cbUGXkmSydBJHs$mtJQ2a8;wSqrVR#zPN&moG!#WC zl}eH%<#M@HDiw>x1VM;IBB49yVm*gz-3M&0y7!%XHh#Xnbl(TXHJkFcmFcV2W>n;- zugh6nq)p6KDORM+Q6);aYHgcEbJDD8F;R^ri&s@mP1LkN(n`Z z6BW}GG6IJJc&7*Zec0ngz72gYq?_RSs)QZ@*Q1H7);qivF}xdw7AWZhnd_HmOoJf6eT< z+0nC8r;FnWB4(0^2>%(6`F{PZwaeDfYTB}Y)w@=8Mt=MPY8K!#O70mS^NfrdXBt-m z7=Qo=oD-Z3Ff`Bbs3?I(SV4d*0AB$# z0SK?%1RzYzf5Mai^8cNQ1p7S0d(0ju?X>IcX3A_J4V09U6LReVDweC$a$nbN ztzTKcBWC*U{-4hDCMOj{jM2YXvIZ^T-NPfJg&Et|KkA5WV*LZFuYa?!1;JdO2~ zXhVPfwE3`o=HBwl*>66P_-}0O?3$yo&MS{dZT{`_ykjBDk@twCC2YbcCwklm!_VK# zx}}Nf+00c9bZg1m%{hI=QCBxy3pT4^)8?}F<8i$$k*cC=Q(rsL{v|QjnVBw|^0-FP zu=*dPSN6vDspgs^v6q6@A7(ykpK-Zg>*=!o-J7QftrgvGYJ~^g^;YqpufFpV@ic6B Y;EVguWh9*z{s&mTG)sLdea()40i+l!NB{r; diff --git a/doc/manual/RNGE0000.png b/doc/manual/RNGE0000.png deleted file mode 100644 index 960b9c3bae1f065bb24bbd173a44d9e0d22f2647..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1323 zcmW-fe{2(V7{=eZxSNzwu#y553LIpFs+Uk^Nea2S8y;KPZg9W>bt%iCMNa6#F&j9g zV}(>wus}`5tgdrSRMU7-Nd^q~dXT(7^8WFD-Zy!k z12xrj(S#Wj0HCO1MfqyE&z5sxVZK~%lgHZt@}Xwsn&tASRV&m=%w#elgftqBN~KaL z6c~mP1}&~rs4UADo>v2-2L6OK}s{BQVB|>RiUt8m>I)Z3}XOj015zQ(`YD( zQgM`wqW&<72T{z2qFxksj)kOLK+O1rw3i=noBN$?!okEOQ&^-!HYy;HKHliD7+jp* z!4h^xC(y+f3TH{J$)F(#wO*&v;mTYtm&s((>2xZUN+y$uL?RxK$6~QaBoYpXL!nSG z81(!7&CShTuh;E%JDpC4!(q4EZ8n=A2t3c5&1R0{7>1!~nxZJ9(P%Ij2!bdsF2-@( zj%>D^)ta_g`Z;rqVLNG)pQOA7(n%OZ9l_(ptVT=ZbOXY3Y}jianAX)zf%O3#vn-^qLItWz-AEu@vzn`s?m#3{W-a_}~h zvkHuvr&-QOGkTKN8OUOU#B7Qih*IZ#M5m^5fB0G6L|bPgdVj@ee0X4( zuVxyL-WeSqezr9DVA|~amgKG{56YOiTgH|>Yd!Prp4aQ@M>C77{9);svwQ#0&APqr zRoJGtu185u+;d^8a)Gx=yiCt*in|r33pV8X&OUB?ymdyG*i;ETOv)`9kXP>2~bEQ+aU;X=}y9?Tt3~mU|mCF z&*%QznWvTSv^3n>{c5FRqv^&smbdrqyZ-TC-GhhqSE~!k3%?7mg@bL4m7ikk7yh>4 zV$o!N~8G1vM8`}>gn;pCv>R&O6}yTA7`!3GMfu?o?AP(7ITAg+0PG`K4(iRn%a7D zs%X!AQ^%zb2CrQ`^~0=xmzSO#zfd-(_P=etM|K>m^6d;4-pI~xaV2Y8#_P9rI36h) WREb&lYg4i<04kPOm!Bxx)bu}YVN2lv diff --git a/doc/manual/RNGG0000.png b/doc/manual/RNGG0000.png deleted file mode 100644 index 38c552fcab5a5549bcfc1e8edac9c809c6884a47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1227 zcmXw&4NOy47=~X30)kq9QxUW{omH8XAGJ*DuB9M<;>7~1g64u~n0BsegB7dZDhhKl zuMu6D=;}mPr@?B#RVCxPso+9lmxy3QsZL4fbXLPAn=^j9xGXv6d^umf{8k9etpVigk6c=!0RoV{C^x0Qzu)io`+PpH*W1bi3Uym&@sNIvftW-7W}1Wo0GL^A?N6WHObMlyDqpFc?^tO-)T@7)GsDt5hnb zQmIfV~(=UIAom+oGq zb~{}xrIUGNpFYmMol0!HM~>&jFF2$V22J5{OJhERl*xMg)%s zE*As=CKFf|DivfhY2N&#+tAglyHcxiSrxSfqbqg6=4h!;5G3V9CCR_qa`N2j{3{D@}~apfWHDMk!Nf)~I`>OwCVE*5)R%-&g;%;Y#e# zlzR(5Ih=l>x-jUMYcUyP>%*cOdIOgC?lrYuoAP{@u)Ae~>FLY&FE5+9GGqGR=R5OW zyu84)d>+?%afIBqGNfmoPggbaY+qu%CjQ{i!7a(*3j;$6?>GYkCh22t z#n;!2Iy7X=*1)#d5#P>edM7Nh$^1HT%kcai zyv>P`w$5DZl8-d6zAJn>eu4i|K-$P7vkzQZswjIVAM)|Epwm^I`O~kKJyXH{;LlCo zp)Y4xmvtZfXWxf^y?ge}*rokd>Vz}K+UhTz^%bu|?i5@un$e`4G^?Ux_`MfDh&{$3 b58ueXsoLaTrJg-k$~)3i7AK!cD%|-mPy-0s diff --git a/doc/manual/RNGR0000.png b/doc/manual/RNGR0000.png deleted file mode 100644 index ad9c5c073282040361a6a092a8ec1d17eb1f5d62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1161 zcmW-hamW*O7{?!#*DFum+q-h;m3!%kDOc|$Bk!$~4!z0gd+C{{9D2nS2Q4{p%Bh3* zg1t3zZw^~Db9ens6Tj1ugPqM|;Z?e$t7PnaYPg3t*>#2Ua!~bblUB9tJP{W8ufa;R;yL3)pEI9DwPU_LO!3* z<#L%!CY??vlgW5I9*f1I(P$(Ru`J6pOP7{Nwz~C2Mq%S0sVdi=mE?DGy&=W zRe%ye9v};l1c(9H0ATufRgvRd7r7WWT#UpKf_BXr5Lt?&y(~q#D;`;i2Venc03QJPkdhOzBctPv;tb5>AR7TIZ&`ocE&U2G zFSI$de#h|9$!qf7_>28xx5h`8Hn!N4ht~~W{XKbW_pa$Z+}hwJt#)W&aR2PaCk6)I zTY=ZfJGJRy;b{NY%RgE9{`Z{o?sxu`W2rCuhC6>A>x<-0e0YEF56`bUvg&8&%FTft zq4mRq3#P_zkF^)Ro(YXl9r*UA`D-4(bfbU&RCH-?-m*8&wVal8~Nq%ECrv-(ZW-w&QIMtG(Y#n=v4juf%!v| zXFuhw(M^-;zM;Q&PvbWW*X;fG=`(9i-3!Z`Uf#EQ=fPbA_t*0Cwl2PZ@OtCFf%6yk zd^J11xc`o`>Ui;4^6K_GPmV3azCV_K_C|GRL-X{mgtzPdDX@9t*3h{PZ+-AT-q7s} diff --git a/doc/manual/RNGS0000.png b/doc/manual/RNGS0000.png deleted file mode 100644 index bbcb6636a59011311da1535b1edf8f8eb1d503ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1127 zcmXw&4Qx|Y6vzL_mLki11aJeUv;v{V$==3v}TbG{)T%T{M6wW&JY zE8AQ_2#+wa(=m%|rbJQ-SxALN-x3#w8R21uR0UTIkZw+yIFd%AIlj%9+Q3eJEWLb_zqmf7?6bc1{!9XA&Ns{017e&$Q^}1ZH>gsAi5F8E%&+`_Gh2uDb z!N9VtUa!|`wV9cj48v$N8nwF|lAl)bTVi77uzZYb$-TTZ)7T~4lJ=W0nX_#OG8jrH=`PK#bJEw*vm5LsOz20|ovP;VRcG$&6tjCZ*c9nN^$&e*{UrP($p@^t?e z-MT=70lMI!Q)Lt=pw{{1!9*SI?Z)?&7%anAr8u_^-9-o#fM}dZA&L-5L@pwph$Ui( zpeTq$AW3k!!1G{PFpOI79=qv?^_sr!U?UCMj*2;clg6E`=858Ql4S}8Nfb#Ch~r4B zC14zg1B&VjhyX!A0z|+C2mlXo01IdV2B2tkqN^(*NjDoB2Axj1qN0cALmYQF2d#QE z>fo7=y4l#BhRRfw0bb(ke=n)I{o;;m#`3;G>sdp|iRGpv%L;u@KVQFiS=GX&o98cF zGdDArVRSP!Ov*5w8o2vG__FU<*!j-UZM(eY;_}?(+>@XwN_mP;oFd~UnI@Hh;)u(T zg9wTc1qd9t(b0+i{+~NLuX??`c6-QZY|hDfDJ$!_?;emmMxWoIV?UAa2GuH5c9}St z44rXSlJ(x8RuCb}5Jd9u1EBxknMSp*h)UEI4GKX&?{{%72kYRpoSxB_v>WcJWBS7ev(dhS54RaJ`gJo* z4X;X}xka(6H7Tnn_Sn1y!t84=-%~CQKQgj?|HG_jSH*ubpBnzPZ`R2@P0u9rw!Zg3 zXJ`7BG^L&Y%-Oo=?5vE_a~H+Z+xx2un(l{Ln5&o6ZSf*U*IhIiP267Dvf^Q-v90*} z8^cR$+*?nM`EC?PS5Di$MatN#w-xQ*HtpipKWm@5Z`15MSoq_v{`{uS`m~{M!&j~! zNd4lq7Tq_CMl_#3e)N+^-)&pqO78ix#qg0QoR@30_Z3{>8voD-JVkdiLi3W5e>&vS Z7fc@)-g=CmHK9Hd8`f+if{#g#&KOnVe9=ku-8Zb(c`^ z)D9c1P?7>&D6t8RPAR6*VVYQCNlL(2pphj^7+8}U2$Z;Cg^37ao(IYMk@v^@yqA2x zJ65ic=d?f34ghodUg=rw^o95Hp*E-Xe6jOKfHqk9T7R!I(iBO#iC{2@h(4ds>-CZ( zNe~1l&5-AiOs1JiH4=%sZI4@4%`~fqQPK6XrWF-s zRF?CiI1&hCc|OB&DV9w#Oq`};K3|lgEU(veyTc?IA_$!zRDw_dWB>^OCmVQq9P3pa zFXLDdt9h(sv7E+Y{C2@^jabdB*+?4`NqsD?)?!M<4i+uB5RpbqF>3@;At9mhF_nud ztSS3L5~GTAQ1FQy#j{?PakpBnX0zF7H0t&G`1p9OR;yO4l}e>lDiw>xLZOh)=X1GS zCX-30)5&Bq9*@Ujv1l|Ji9}4(Gz>%6bxqS0MUiD$lB7T&AP54-aelv_VVEdJBCT+^ z5ekiIdPPx3oThZ7>W1UF(YDWVN=l!S=9ov z!izF1h<-$CvaU^(r4w0h)TXn#Hz5%g3y#)UuVcB4*(};NhC(QcNYe<=0=Nt?0Z;>| z02Bf809k+}Kn%bF2m|NSSVmBg_eb?ih|&{$iX<_U>t@6aJJ(BCV+bX z?qnS&%2>@}(Z&%SQvriqx1`dKP-H>cg}POMQc2>hi(oZ-yS25O z4~B2YJl45QJ43H82}cfJV6WZn=65Y>-!u49$H4Zhr_Rn-7I)m(c<9dW8!j&I+WDp1 zUi{Out9Gw@_q_Rc=jMHDW?nq8qIGaUsvcQ(@AA#T_m=&8Y0KCpNs`_FP4}B0{tq|Y@?8J` diff --git a/doc/manual/acz.png b/doc/manual/acz.png deleted file mode 100644 index f8d98a6537b7fa0ccc155f9e5a1b9d53fe8f1ac7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43670 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�uXo5{;gX|U4PJ!k_^(2p`n~1{P+7awbm}3!XVRmj2UYN4U8k5!Bz3P|Gq*yNX_c#i_o=h-nVS#csZ6u#BjgqXN6qnZ zrbD%+6F01&F|AbbU4tz(B!xU4h>fFohNfoNR7QR%7o$oMU-+YZ!ChpC;FiHq<1^r@ z8evMwqBWPKo48i9ir_YxsT2p{C4QJ3r)AE-+iWgGz|G7zwc8{?NF1MwNyh4Ffz7{9Pn76g^R;5%Ve&h6|Qla&3MPHn`<;;xt%-wOw{hi5;`+OKF*vtsQLt z!NYk~viOr=E@GZ(L1Sq%1no|=fAd3Jtkesl^JS0#q46hIv6z5!L|N=})ZF@aZ% zLWwZNls;DDp4%9xKh)Q76QO*E2mq2Fj2;h@Cw(MJN4!aNmXW%gB2=VU{)0m zL#$fy9N#L?E0xqlA|t_Ha~v!1C*;JLt*sq0jv3z?`Imv~MV2%dn7HS0<#3DVpAny$ z;5m4lF2lXYeXKz>f(G`a4kJPU_29*%rH=GyOMt$v1``T!g3{EN4~n3H&I0dc;LfOg zV8J=PcX7KAMnoBTSYLiink>#Z!3+*@Trh~}6k)^Z5+}4hDbfLSZl!!V-oP9WOZFU3 z7Uawk?M9=ar$Ct;OXadwH3>8cbIfTFAkT!GXzs@fM*bHjXtl&pEp7Y8hM%Oyn2G$>lp z0}j!%w!j#UV_H1m$Fk_O9S~}6RFh(_DU+y_QeF?BG|!P^p3#-Wahfk|-CeS2=(=$s3x9BnPC1uyzty!N&Js4Yoz86byr)&h_L;xU;%C;Q9P>|6?v)np5 z1p&^;V93JO$Ulb-$A+VErV_?u3yZTXldL{}o)->EhR9F=@Pw}wD+Y?yQi-6EKpILF zxGb|!Z1#Hl^#IOrJ(aU{EuuGC^GhWN!#SfGw4do|jjgw=^)PvAb7u@|Ct!^^gxrjj zfS6OK1OqkaKpv5{6p>g9x@FFS)y?Kx1`xj@KS<0ci~xF8OgSQrcbfaSnsO9B$o(;L zhNp{A1dwFq6nwbU(!XfbX;}pm0r8#L8u?#a=Rxk#88){?$HkT>7FVHvG!RhQ`ler& zRrJ2N;2Vgn-0(AcWOP2MsW~Mp8TKt+Ar>qgtLSi1yLwA#`j!A`Z}g28i65c}_W($N z3ZdL%ql#7ZjI@eyozt_@C?EW)l(2MeGO$R2pqw;P%Lo*l5rlHZYnFoX+Tc@pf-4QE zQ8F*3X*wHrZpr36&)YKQnj5rL*rg`QCnR#TL^{jew(}{7F_B7we?fq!W)`=0Cahjr zmK`!YmS6z{nQ?^Oz0a=;PlW%2#s}Mvc$R`Rp*lIX^+~mh;6#@>yh?C;gB#jt%CfQP z1*K26W?0rO4K$j4s)X2bTW+vTi|n&hknOoLEX1IzNkY+Rg0i5wif^cL5s7$b7^vE; zyICHa2N8mW#xO(0Y2sR~Y}!@NAP$n!v?l?t!Yl@D_g2{RBs7VZAR2o`CYHD!#o#su zuVkp1EGH~lR^!iXEuC1Ln>`hqU6+Y&KSi6QBQv0j}>AEN`p9pjrxQMnvRk zX&j(^o4RyN!nf%~X?m|WgB!scdpxQ#P1!W5fEVTRTgEJHZUtr+5eK-qpafzi(lGLp zgWGa#&7_2>Wn}}5Ch#&Z7HhI3t_L+oRnN1}$>OjzbyaRR8Ar9+sMm67x7G;mtu%?5 zTS)p=Cb3p9f^kKJJ55GzKpQ!=O(*45Y-V}%e9K~NT~erXvOp^~cZC@jS&|SNiNKP% zLiHQ;z}(qYYYvx57YwWcDr2iDN%Br9Ql8L)su?qTTPUzDcEXlsNV1Us4RHl2fsZv& zRRYSyLaizqX>KXOt%v2xM4Tp?XXcp-Pp6e;gQ>17$`+&vTqXUhj(gOUJ_)1D$TfgO zj0ST-ju&)k{)@p;3CUHdC}nhAdIlI79j}y?(iS&%Ws5~4Z~T7-b+<{cklYji0000< KMNUMnLSTYc9gQgf diff --git a/doc/manual/airspin.png b/doc/manual/airspin.png deleted file mode 100644 index 943ee546a6e9b2e17247cbea4b01e83af05b6346..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3384 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 diff --git a/doc/manual/attack.png b/doc/manual/attack.png deleted file mode 100644 index 3f3e48fddff34bc22766e48a84cea30a891d5a44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3164 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 diff --git a/doc/manual/blue_monitor.png b/doc/manual/blue_monitor.png deleted file mode 100644 index f6d01f802f702d6a4621b240814f717dbb86c4d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1160 zcmXw&4{Q^46vw{|W?_Szf@Z*w79rH6zzqfzWqNkqEYQKtZcC+;-2Mm?I?`!vDipZF zmUYV(j_}7W8KcNZIw4!Z#WXndP$nf?wj&~p$VMdt>qISv#0eUn2gc<0`@OuEm;65Y zlgVTvk%-6R zLqkJ~qQqh`S(c;GXe1H|hr^*zC>RV%k`xF8L{ap5y)Kuls;Wv51iRhN^Ss4k;W*A{ zG_owK*Xy-fZAL~0!!R0+M*Uq5OVQ&EkrsdWz(=9R_dnjdb^ng?`VSm?w%I%t>$W>` zHy5qmWX&!%8wzq3n6oowpS9ahIl4dpGSvJ?4w8Y{aK+Eu9fCYupC4P85%mEK?{%qDX>397kF$ z0ZAYZD5@(U0)zkw5CIn;06f3}ET9D#fTGa{?d=Iky6N-vJDqZAX*bV@Id1jka$LxO7>_TFx58}xd6ii^W0Q|*!^?__2!zxD^o_vq9p9T_42b=sy-$z|eX zGPcE8N!EKqT0w*?Llhwh;J8GBE?uI|PHJu@x0`G>TDp{G&QxjClK=*R&w-G*ZfJ!PTix<3zxe*%pzwv)j9jwEQgPsQ{kOz>Pl&CcyB@lQ@tfHwQ*kApS4ZW zNP$0i!*u?!X4lBcl@D81^)6s^9i=A@^zAq`W7$T(>1<(BdRE6@sWt8OHPaf(zkm2^ z{*|zU0$$J zp4ePm*_7p{G+rSzXDXJ0Q^=0@JbUvY~`_@wV41DA#Y8=im|b=a5x+ag=AR{ z27{6$`Tc%T6n#FQ*X#9oJc1xJHa7A+?{qpjjDKr6ZTboynD;R?WJ{Z7wxJrRlm71rPvu01m(kzydG;Gyn;p0U!X-=NoNp4e|UyO-;aJ5sQnv7{)`>2a};r z3%e4aIu5oz2W69CLlhJO*paFH!?@+Am8Dm8MSYp3GnBC3C^z<=h1&vlH{; zW-pr_n?eu?lT<|HAh!E|Zs@q=INV{`d1&1xd)DfrlvFw%@Cl{(gpYedMvpU%D*=>2 z7C{t1;DBR+rGXwE9=&kkR&#T|-QHVJ;L+)7lapUps~3HLAH}

NXy}iH_@7Az|Sq zq(!8fWs(=Qc0t2(Ad0|oz_LKop%7lYh#ehx-~ifeXfol#g*bDjLZhq@KtI420LK87 z-);d=67!!h3PAh6GnHar;v}EdC$NH(aaw7snKaWHT1#k+P1GGFQ;Sw*=?a!G@71rJ zay}(mZ@<^Pq%iT+RrQs0SKGCdpU^qmqW0YMk4ii4Rdro2q6VbrTQ+yb9C7@4-4fx> zj_?ldc9qUJSJn(y@{ZhLUfw;DeF84T{S}CRCNO_aUrtrV)OX5fy)|%rX>`J;Uwzn~ z;W(7%iF7Rs3eD=zTqSBaQ~K?@OXqEi-#MXA$MqA#xr0<{`yP4m<>?cKhNy@KGe*-V z+<&dsy*)Wz?YK`o_-M|-Bezt2TUHVU6+x<}@9XV7zvK-S*4r8uI~z_8H9bDs_IZUr zb?s$yQDwukW9z!2|DMB~ii@23bY0Ads^wvV-qlxsvLVA$dLq%iKT7&eKAzii^v8KG z8p)c5k(f8is^*t`W3oS5KkRev3=U+iH3{U_7 diff --git a/doc/manual/bshield.png b/doc/manual/bshield.png deleted file mode 100644 index 01f16a3af592165cc6594ede9fa186116980b157..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1114 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 diff --git a/doc/manual/controls.png b/doc/manual/controls.png deleted file mode 100644 index 8422625a1088a70806882a7a7722b3f395abba8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17029 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 diff --git a/doc/manual/crusher.png b/doc/manual/crusher.png deleted file mode 100644 index 42859e61ddf04b2152b9cd4eaab2c85649c15005..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42536 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 Ux9lgYvH$=807*qoM6N<$f`O`H2LJ#7 diff --git a/doc/manual/ctf.png b/doc/manual/ctf.png deleted file mode 100644 index 24712f6534d713b2effa5f4ad60a40f013abf2d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6805 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 DwE<#l diff --git a/doc/manual/dsz.png b/doc/manual/dsz.png deleted file mode 100644 index cc062bf8ee36f959939da7b619899a44c03700fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32144 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 XOhh3c$nX~x00000NkvXXu0mjfFFCkA diff --git a/doc/manual/eggbox.png b/doc/manual/eggbox.png deleted file mode 100644 index a45ead1bfdd6b54aeb8a7fbeeda8de106e5bd881..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1157 zcmW-hag5V+6vrRjX*ue#;7k^%+QTAKM=YV3o-VQ6^+-$%^(XLx|4~MOypo8Q%5rKl>M;)2~$Qg6fPLiJPXPDy_fgL`@ENY zzxnN6J1BL}ov0nSm)Fp=RGs4!^vH5`+fxIfVFFeRyZx~Aw4c45C|Y5MNw|I zn{a#nlHY^IGyQlE-z)u>Xj<&qW1n^G<;ju}E)_a}mUOyz8a zjmSPj@&-jl5$FI<39N_nxqXbQ-EKFV%|@e9uh(m}TBTAcm&>J6sZc27^Z8sZm(6A~ znM^8`N+y%>csv@7+O{2uM8e^)VHmouYnrC2sw~TrB#ENv_xpLCXIa+k^)d_-!Em@8 z3N?bks;ZS_Wn2nm1To1AQI59iWWT{&gEuE(nFN8i9#kep0cxvNG29e+eXsT zrVa( zz>MXq2Kt7!U)fvh+Y?>##PHSOKMsCLZlBq8e({GB2i7gver#L)#n1d7Y`A>ryzzro zU9yGRymQaqcj?y;Fa7EA;3#+E?%*CS`_*r24C1??^t{exh5ai#H*Q#1gvD3pZ=#P6 z@9yA6wsb9==)6qqn|Yu z;nMYy@~d%pa^?Qb{nu_%+umsIm|b0qjy zI@)(;<}&Zxj{S=+^{oBkbpNHE<#W5*b4POL8r9yvmroo$B##z%9X{H+O&^SQ|9au& z&}+5cfyw7y**fRZCA(6F_r2-;=KfYga6< zzG7Dt8&>R!i1~hVFBv9VW@k4`vI%pZ`|u=TcXns~_nuy))TIN7#C-%V-Y)s3ojZ3v zRGyxE^2tB`_`}7!rqN@MJ+@@Yl7QbK+;LgyDaQ@zu;u0%|2(s}^!ZDz>&pk`esJem@2;6OWq6mg)D*D4 z=bn39ysIC5{`u#e+Nh|gm|D>{&OXuuW}j=vL-U@vVoKi*ExLB?3b%Lht~T_a|NJL6 zJF}#Dj))xHuVmby_StDkudkeGLffZZ)2y__L0t~YNJ$uaaN!sCpKJct?q?SN_tsN~ zbSnb&ZQHiFct<)t_~3&X>8Xz{J>i@Q{WOsOK6lBzizaNldyWa}M|aKsYx5$0_*5_Y`sbg2ezDM>fBspKtNrhP|Er&t z0@zL%xVb)AKc{Vr+~1$P(Btph?>nb+ao+6Nvv=>_?cyCC`tN`LD~jsINMfv{r>D1V z+jiQtX{VfW%IT+{&SBlLV+Z@d$)&#i_S;UKI^DH!oJQ-nCoeqzgn@nAH@jp0Xe){w z?kU5%05EITnBG5ax`03a`ouz?Tj9^AFM{o#bIv&~-eIFBo_J!+m@$p&$(2Lo;{L`u zueVHWYpii4(lk}F>ZeScIC0^^g>S$8w#{{pKmPbLM)%S~_g^e=n*RLNJ7Z)2_ z`-)SC>AydI`Q-Szv32X#O-f2iOiYZ8jcwCB$NuzxcJDdO8>ZiU^UW^aVWT~J_MCg} zx%p|ar+1S}2g>Dx<@&?qmf^B$gt4v~BK*B~BdMPd-KS5VwQJXY_0?A%S6I1nWru=> z8le|&oSqn0Cm|tW)22=B+O-4Pj)lg5tvvVWxH`3AA$QzyN8`qgQxw&yQ|HxNX4pf% zVd_*wCe>`PB9@ZH?kx-{rcA~V-v|9$`RHs;I)~s1LRrn!4D+M15 z7QoC^OZDLz;h$AY=dKW~IY;!2a&L?|$Kh7hJsk(pzu6 zHEh_hCYcGS>nP_w@wTFFedyCWOUvxo@q^pv)K7-@0wl_L)6|?Rhs=0)`fcM%2I5{d z&%Gvo<Yu~%$4B(9 zdX<}*c4U$9uxyaFLH)+VrGFEHyK<&$*RI_(HTS1EkCZOh%=&xY6U7;gQQA$U*$vUr z(JeFN=$3Nb(28PgvrsC<8O2RhzA{`libC!G`*Tg(1T`&*YCvQLL+ zO=>5#qGWWd{yXP9tijf6WMNNEGprt@lj=tIYa*w0EhiToE_M|>z+5o%D+cdd*B@5y zf2|APk0_G7dQrW5_g=GR&Gzlv4@A5_`|Pvk&71ekmvei10?9#lvP>ObgLhmT>7LhW z*SyEAV6!%iy`)jSECe}cdQpGhSaJo{O@|w>0Up=H0)&h3`t$qjT@H64Ukp8fUDc(5 zG)omU5*SbIXo-%}>V)78JmB!gd6Eztjhe&Lnb%9sJlIf_rgoH*I>?j`f-Qc0+W?E# z@ZxEmj5nU4+%?GlXGbsd0DI5;r)KvUlN1{T_qL*oX$Lb$FM~-Syf5q*9BaW9c%DW2 za0|1$OW(#)oEe=EAAjtz$6k2hg&Q|++_GiM7himV^Vq!c-+%x8_19lNfbb?#a^;m* zHq1-VYm9o@2T+ibb0 zp8>FD!T@|xzfi=7bsbeK&C?7C!uRjhND}KrHE7Ua&YU^VJoAiekL@EY)DuoPp-wG1 zw1x4Q4oWvxem#Tl@k6_8E^JflhFt%G}y|`LUQel32 z$5g5@-lUFPbkRj9s6O402=%;VJ4lXcDV-ZgS{&QO*ffB;eOcGiRekjO<@z2h^H+0y zvAo;z(aqZCC#J_4mht!!N6dpT9c%#j&+2Z6J)0vlsn(4*-ss{TG@<68)A|Dd$4Fd^ z3>Y9QR>+Gl%5AsF$dS@GC+3*W85>S-?G3ZX`gdjTXU=Imp?g+NQdFm0LzxdsKR_Iy z82V)UXdwx8Ym;-~;vF2}1Vt!%pJ^n0M#5gCUw&D(Y?0Srmp9*(S6-1dYh>0eNlTLs zjT3tn)SERp?~ap-HqI*fJu7>ApuTHGuld6pr6^Ng`M^m^(k;|2M7(lA-P`HI7Zj0bffKf8yZAKZWc{Vv{) zXxXx5_`i696WYij%_JjP7A-Px^#-aDMfaafz8@2(mKiD{A?GG_10VR z?z;wKU?CA6d{B-(R_fK2LCrj|M4v~$!`{POM6uxK5rw{${HY3cSbbr^K|lZevx|3N zB1~D5WvEeT;2k>1=FN6Ud#q0F)(Hkx1$hj-MW{(H)&!3>C@t`pI}%7>_T34)m75BuQY6E zIL7PMF(Th%%ftcBgBH!3xp)VrBab{1owUJH5z1{}`$t zkmC(%)5bW>-b@>2-lvc8nipP>+iyo3m#DJ%2WiX1xe0%fVTW-~3PyOPcn!q+ufP5} z^w2{|NcrWLAizd)7dDsoy})MuPo#6_ATGs%!vp7Y&l%=G^K?(Q3_Bn>K^}fs4nIs< zh+H7DPGpJ5aUx_b@j~Zq8Ydzff7;mu(V~@{5br>mPTW`J9 z#oITLJy;;}t{6|#IX2khP1EExKX`NgmMse!ZxeDD`_Q3eD3oLDlt3)-^Kqc(;GRk9Sc~ z5m{94z4sm=NHmM9ufBReIeu;Er=NZz5RP&?Q{>;W$8;gHmor#)k;D z3Hiq#8<5YQZRErq(rljyf5sW)e<_*LG&lE+H{PgXyt{Yr{@QD=>7Qw5Gh@b#p+kq# z8KH8J#=}hUNBjKz5sHDoZh1y`i1h2{2#@jOB<6asK@IR`r-K#G!xl%{TWq(&Xe)`PW71wCzN0F8_4i zafTD#n36cV!~HGJ)YcWn`|GczWlK3rWR=KtF@o+mRf5Hv^_@sp5e&8}!<)uM6kB@~ zzkozmR#q6T2oHMdsi(-s?JcrGMKwU0@WvlrPp2Ttuz>B6m^RIGqj;>PB6H_f2<%0H1@BUIo2NuY!B)NNTPp)^4m8CaciwrY$KOd1MuVdoiVFI0 z!TixjA5rnkt+t4Y+9a||-T!+cnc~}&nk91e)d9?~+}OR>@wc4o0sc;Q`}PLdd(_oF z6S+;~Dv?|sw=I6OQB!;iU28_jv4K?2W;SLoeULLYBmX~Lkb9*cod|h$% zvqf;BhK9FZpNr&0M=xHyxC;C&NE8w)ea7d>FKg4L%^7E$ft%BzU`9GPJWS z6FFbx2Nk!l-taDk^x;Z<_4!18ML9~4Z@={o#?L=XPPS|d^jH%lM6kd7QZnnw{T7qK zjJ`aqAfMpNS0B_OXxlw1iYM>9s4Q&$wc*2u)0fVlLwoMrxrZEb2qv<(wMOqE3@U2p z=}&m(nP;|c-8xkzmRuq};*!?&l^7=MPqwdtrC)G?Z#=HQUQTuJOdFF{$W&L{Tm||#=rIou7OrvlGjvQ&B%_n<+8h`a{n>hjRcK^pCP*REYYUw__t=Z#a}3?uTeP;Y6W z;};|8$FQ+h?(=3JGO(QI)n>7)$WIFB9w$d7E5E?WyA=>$N6>yAnl>Sb?erRh=v{BsN$0+PtM87A*X`+41A)+#l>wEp|a7Q z5~Hh2mo9BBL|_VqF4(3b#8k93GDzf};Em4M;9V1mvN!o0XW5m`-i7|ZcCBBeNtQw_ zXr5}gNcTh-*!q+cJ139N4)4K(2cv2c+=Tmo^UXK!l@U$pXis*NqK6-T_&p1;2|ztq z8IL)Brute7m98GtouGdm8vOmACo+7vp;8qzmM9L z0VY1yaIX$^_WDajrcU+L>hHeW$R+JmM;1$9$6O?=myKPU{qe^i`@kFIFr$M-E;PJ9 z{q$3fH}+T)DOb$lu~5RlR6geosLI4Y2qro(yM3++%AIhogI8|FOOqtue6ts6ib%$e zH4-2PDLK8Xaxp^(L=*fz)VC8tBwN=v-U#ntJG1L|1&cRrW3w_dKT=UbXd`-t&$X~XI@j9k!2h?>59m&jj!It%S#S_U zXiPY9(6QJZO$fF0#L+nLQlQdM4Fo9_sAA zqnOVIwO09GC63)J-V3g9r-PS0uVN$_8Oh0Y3^V=Xs^i9->_bFusPJ{}#UdRu#)rO! zD~%j9l16Zx;WfMX;)`dL5$Of^x|!dCb&fgTP7%$ZGBY!2IOiSY22mQK;dCPyy4j0f zeDOtQJIz%P(iLTaEym`$MI|kLzn`D-vns~AOdaSd6ulU$NB9r*2DRX$-Me)0ZGYo^ z#RpCb!+1q>Ke|y7c`WP(G7fl+cCteJz^}CR_Q0FtPCnCSTO#M_DurTCl}qXb@98S~ zY40u98A#hy^z0)giA$^DVo$dfxi(B!`(30(aYMAz)+FUV)2p)>nWpiijzmYtMHxiTqejuudCFIRs9M9+ zD~GCo=P19;){p`=`)}=5$NK#62?ZWkadx&}ykY4<`BSgI{(3Wm4j%sU%P((sKy*}^ zu23uzqa@P_-i1ox0?XQp;>#0lP3dr(tf*dj;xGI!|0XKpXZ;p98J;CBh&QICddizr zylzL8;!QS0|M0nHx2UKwK})}QAAR)ELABw>D@QKF4?p|>SJ>>B@b*m)QhqmOB2C@8 z;Mcix=agUwq`{TF!Y=XtU%e*?%(D-;J{|3AE5&fG^8I~MxoSBIEbiVn!gRGy)N`Yd z<+|&x^NTl17K-{Ux7_k*89o2}^S@aLcbon@+kyc=aAuw(zoLaX#~WwuaZ34Y5DeaW zmIQtR=V0qYkD5v77A!rwS=+n|>|+$QjgCHDxzqpH|9GzvIW0_=`dP(uiJjynCx7t4 z2X^@mH0eC-u)}EE53l1HkrLWd5!yKUM*3$)`4Cn?p(76o{qC~ME^`hx69e?4)F~B5 ztD8i9yU9P;H>u!??m!9u7xjGsx!KLyAI$7sZdo%DlL7E9I7DJhOmCH; z{Mmjx-0hT_S@BE#szN4MG#x~&+*<5&jSo8LAZ9}Z#18=Q#X3Ry+H0@np@SCtgNAwJ zw(=KJC)i$$`$<(l&%7e5vboTf{F;s+;dyTvJaj8L>T+i89(&z(6;WR7kQ zm6(x>5znJx)DwX<%ygU7Hhbc|<}3;Drah_?8B8j)$8~TSX(hmejQ)IOPAE-ig>ZEz zyNcfTwPRv>sG_xsMMm4|)vIy4TX7|)5x*OM#=4g)r%-s7su!Ftv1}!o>JYq%s3iEfU&s&*_F~dk? zp7QiL$Lw6?J_p*Urw$NcqF!X#3M^VH&)mY84(*`khZ(W-6i~FVClvB*8LO=B>W;(o2s#^2pm| zWD^_J@S}EZmzB#COQ*9b{sVF(U;QVYIkB?irbSe6IxbW6nhYw=I z5%@v%Vd@YGpVm*rASK7@tG$D#it*HgkuIy#4$7|!yhZjYr3(5!&zx{c_YNy=@E+DPJ*%<3o zJ(@XpNI@sgwV+Nm7rgi0dmY{^u3tP|ZKI;DR4Uj^|6r3DksBY6(NwAR{*^$ubhPwE zZ8q`7F%a-n;X5-%_}WIs*a}$NI#-jiN6sUs4h=KF#@R=FD5zT|bFi(BX{r#SH`we0 zMw#O8s_gy_l|UR0?cl_wGV!J|IiO?JA+aYYYdzwKBiJ7mF}uBq-GhS?k7Tf&>F{k3 zfEcDqEE=dx6{|MhmsU^RyHhCQ{DRd9Z!}LWzafHbCgj9Y!=*o?((@4&x4AuxJsiyV zp23?epkVJB#@@G2pE1henp$R;FIG&R(;sa7shagiCPuDL9!ZiW-nbXi($Z2QlC)4D z;X+3oY%1~X%dZlmqOMT^(>AJ5hSWQRP6$z`YKAw7Fq9M zB7MoYS=~c2RwZ?r`AIb#Z!+G^Od}GiOuSL2BNJ~_0WuCW-emoT9R5d;mz0#i!?8sx zGElbq^}8qXqw&U3RxR2P`AJBYNEV_HG1nbz-2_ zR8MR(ZXqb%P9X%dsmv?jZy_PzK*76I4FNV4H=1}_6*qQ3q!xQMffEyQID7;;RypOTopzcBRP}K->%mAUUSOdJeWp9)b`kfXj)`%a4#@46h4yM0b?L%%~iBgpOXdU{<3 z>wc;B^FvAb(>)z{npC?XBTdLDSB}iM8JecffTlaRPt-psPw;J&HS24rbwV_trUdI= ztqJpDSFBiJn&X^lGg}#g$wy`!MHiaW=?crjC+b$Rs%cbjv5(o=xLlkhtkpogi5=mH zFmp*McQVa0TrmzS#jAw)&ZNFHZQ7JMzyYf;$x&zC6Jm=x*8A?e?*Q_rdK2yo)K@LY zA-pl>5eIVY)JSu}SS31+BT&aDL#etq%;@2yUDN5903bgEtDx0Pyi3(Q9BYNXS(Bg% z&s4-hjt0lf2lge1(qN%u8R0Rd-vmlHeqz{oMPh3;5bx5m1Xc|>Ps-|ai&)6f-RN#& z&LW^-;8_dN-z>b3s7B$fO&37bjGg8VXPtGH2jpb@M^rS001wp#mG*pU8r~4c0zF8d zayTSq!&b;?&`;;r2mzbJUBUbX7jJ{81I60W0W=Z>2%1?ThtH$I(W9Vh!N#LbE22t% zGBp!#i1ynQRqK3pI6TdFh)`Kkht=cStSaLhu!(0^{$r`JctiN5k&f0fB779qunL5e zt1^RW+WJC=puJeIqXk^N0~0M>aYdPSx%Roz4brN*Q)J4#B$PW;`uzEx47rT~$u`5Z-IbieC(DE{4mCE70DVPNctaPN9g z_$tSm0zqqDvz3UxP@{zvhkFZQkGq>vMH1jc02>b)UcV}T6bA&}&=pr);j@#6CUyf- zoK`A`b8EQ8AK}-eQqjw%kQll~ldG&@*`X)eRchN(&zXgGdS&!4^v|9M7`I-JG*R(qlEbTlkwSRX{o##)Zj*dM z(u930R@2i`k;Yjr-r*;vDftw};7vBWzjsmF;e@55;k$T87Ll*+(}h9-03&k!y$dbf zoP1}Kjz}e2SSkcuyu(IJvL>g|8!h-e1(-H(G>edJlr@iOg)ZKaasPhsUb%9m&AUi? zw0FY8@F@Xw@s2p6BZ#;11(poXvw0WUGWH@IWsQzJF5VGGoK)|*6>wv!_iWx}A3H&K z<7uz7F?=rGK@k0JP`-kVbC8@wrIJ5)jlb!XF5Xp7ILT=U;Ne2ySI)it8~x20*6KZ@ zbzHn7l*kyqQf5c-%xB9?}`%Pa5^klg|U;ol&xF0`ox>-Sch1;ct;{3jIAo0 z6TIOHKJi95r|!hXJEDn(I94m1Ga9hg3%vdL-tBF77w@VkLLk;rvKZD(h;t(KeJX1e zY?=x($)b@8srL{+d=gkx*j&z8|HHlO_5#k(313YryfvK0ar=F<<) z=lR~aaifcOq|>5Bi>&$=9vGVx7l@fNKI?(e1FUo7UA!Zd=t6B(+2H47zXUwr-dQdP z^$$P%(8W8_>AUZ~LtiuTvq@3aM2RoGJ-kC?;O(C8>Opj-HM5k!8z)Q%=NrNA;$1z6 z#$2Y?1@mmegb5+wjUWhNsJn}I6%g&Y%#fD`l7vPZeT{x?-gslAMM$d_7w-Us9c6Wi z+e>2PH!Yn!97lm{Svt(@6rYy@LKz5Q$84U>=Ldvx(GNAz1Yk1Szq zQeXVN^8NSUx7u%}<2}+EI=Fb-(V#(ttSY(<-ahjkT)g)?F=%m{B4%-JE2EHSY+Lb$ zIWzdnpDSg^}jw=GrtiZ(2qSYy`Yx6-}Bni5})SP=N#y z%dl`gJemUy>HuR(an7;#SEBDOssLM%tpnb$Zdx&Ue|knn1|Q02u^Z^C&9nsW;*v`) zsX~Wqq~lGmTHpi*9vm2>WFca~*yPC-Ar3c}>RLwnnjCI8JTPk&0qhw$ZT(7k&UqJV z0sMn6<79vxyA73sjfJ(wMnSk#732|(HY*l;pUE1zcrzHtX2MKm5@*r$%)oMj?TT$9GPsnt z&*wnIo1tOaeHICLv+Ya~j!GX?i{yY;rj*IWyAH&>6(TIf$7itGJ=1?WuWA(}?K@r~pNGK)I?eFpbgv&%kJK^GlZY#4sA#(Ne zS6+FAv3$BhN5?UBz>yu0tSBr-5mJK-YG`%L6j8ztgunDmLGl`Q?%YYZ-Q+#^aq+qG z8eLMFTt?2n53l4#02`OPd1cq%vX^LGOMNyC53eaBT9e}2(%~uKsjVnh5kK&kSX<&X zY#^N_!F4DTIaAT7QKPu{nl)>vHL({rMCyow;D_(syLVAhQLZ9=ULn2!DxTg7dK2g% zEPnxJ{cT5#7*QoXeX4Oj6G6$36oJtC_3KwEqR5Y5UwY{!_6NUW#G_gh6agWU(Fk4e z1Akw)Zk>K_7{3p*#`)++9(jaMC$vfz7ksXS-gQ{7xgzww)vH&3@WBUeyrgClVSDz0 hP2GZvw@dqx{vU8lPw0YaO{o9?002ovPDHLkV1i_a7SsR$ diff --git a/doc/manual/emblem.png b/doc/manual/emblem.png deleted file mode 100644 index 0aa63b651bf0fa88f342f4bc74350d2f1f4f69b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1367 zcmW-h0ZbET6vv+mJEUSK4J)IviYM#F8IIX)#ntU_2cB5voMpMN>Z-fB%5JV|ab+p4 zLfIMzvx}Xe>9!itHPR`@4jL_{ATgD66BG;?opugqbu4tiGG?ZJJ5ApAy?n{{e(xp! zf8M_J6--8YPC5W&l&>z`Am$?REJ~Xr-h8^G5MU0hUt3uwK9zEbT#D&*I)soyp^(XB z5{U%EFjAw$38`F(N#($52}X@mgaQSFGk*VcTibYRYr^GaB=kt2Kt*xzYx4WsS$>DI=?RKlxYBrk%LEw4bU@&kT$FeNLFf>hTwOWlvLz1LQ zrNVLCip=Ju$rLvl2RK8R)psyDFGagGl!Me*2$IKDdWDjf%hggDE|JKwu+J6rIy+kJ zK9|+&G<)oV+r~Fp3=V;_@vPOTGjp^_PZ@O@j#ld_((B+|R=q>eS&fuQuQo6QtHo)x z!e-~q7S1HF2A7p->2UJjiB4 zMkAsqq*Nk+B)}NJ2tX7d3=jbD0eAqK0PFx3026=#K$J|>E0I8v2=e=p%Y`f!q}L;j zMs$&g5ktg?3=tq!I{*X#{iD9)F*FiF5f2L3P@4g{w8*ZQw#diL(zr=FVw6NVtdE5t z10D3^InfA00fbx#2?#L=;Ru0`0VPqX4rr%S%^Q7Dsn~WjNq3npZk~Gj%ktr=Y$dD^+nQ z+E?<(E4W1xunP-nhzIZ#qXzVdaL?( zOM2PEy+`NQ4vsZ$T8l5to@>9Anwqoz67lLfbz>FQJ_r>z8W%f{b{BU1y@E-518bk> z$myAWN51XW*{O5gS6>+Izf+R6XWwwG_%CzSwH^1e2O0`$%k}l7wD(~9@PU?adfmR^ z&)rnxnGfFGWglLWktX~8;?}DE;z+XYYvx4r%)_S|E*@>U+j&@W>ZS7SlW8|^PgK_7 ziRAgIoh_eD{&gu+y`W)rv$6Tb=Vz~yHMqJK-{$1(PiWT{~4Ma44Ve!f1{rj`d z*4CUU^xD?kFUUPqmzRw^V8F_IBquxBU>BEZl3Jc`koe^&hv&dDV>Zckk8X zOL7~!&YA7i-CdU#{2T9LdyDd}E4~>l&fP!1Ul)u&eK({2r-^D<6X`5@Hm=UP*_l87 zaz^mv__@&l1eDll`UnIJEXPw{9PJJ|YBQ<(zR(5+&-h=!314PfJ)Ed@Q zJ(#!dTX|3Y`IJ!l@RP3`E4w$AM0uz8lwBFxvU`u~@YIhRQ^t?{Q*>>TdF`6rQ&Y0x UzfW&37B?i6msOOWdVO=l|BMx0RsaA1 diff --git a/doc/manual/fan.png b/doc/manual/fan.png deleted file mode 100644 index 74e4a17d06fd5b6e9f6eec83706390b2e04b1b7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1088 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 AT>t<8 diff --git a/doc/manual/invc.png b/doc/manual/invc.png deleted file mode 100644 index f0e7a63409c3c43752bbeb820e6eb00b3ce7a267..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1112 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 diff --git a/doc/manual/manual.htm b/doc/manual/manual.htm index bdf4d2a98..3fea1b66f 100644 --- a/doc/manual/manual.htm +++ b/doc/manual/manual.htm @@ -13,7 +13,7 @@ doc = doc || document; // from http://stackoverflow.com/questions/1145850/get-height-of-entire-document-with-javascript var body = doc.body, html = doc.documentElement; - var height = Math.max( body.scrollHeight, body.offsetHeight, + var height = Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight ); return height; } @@ -65,4 +65,4 @@

- \ No newline at end of file + diff --git a/doc/manual/match.png b/doc/manual/match.png deleted file mode 100644 index a89bf8d5d4461eea400f41e18dd49b9acfc298c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6155 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 diff --git a/doc/manual/metal.png b/doc/manual/metal.png deleted file mode 100644 index 6fc385c42183b7a4fbbf678e1e37e84759295e6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5104 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 diff --git a/doc/manual/platform.png b/doc/manual/platform.png deleted file mode 100644 index c0e4c4993b82b71cf4d3a58551dce569ad85b810..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36247 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 diff --git a/doc/manual/recycler.png b/doc/manual/recycler.png deleted file mode 100644 index 12e0343f63330fde4da5a2924ea0b2d16edc2a31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1230 zcmXw&4NOy46vxj5S3h7CKUNrnHlTDH!sAP8CitKQDpY)|Pzwe3P$W!hQ$|OsLU?sB zI@I|<=O6=C4K6iesf5jn&3sM9fQ3ojbV7n!H*}R5MTbd~W%2CkvgF=-a!zh?fBEJ9 z+X}ZULzlg=3;;s&wq~pOD&cp`k|6$Ex-b4JUtTe(m2w!Ed~=R(f~&I%vH%9z<^Swj z%=ePYt?B}RgK+?s7J$F`k>vqEeGeYLm&@gJI_-A5&1UQD>||NiYPB*9V>X+OMq_n#HBHl6t(KxFrBX?f zq)a9w2tq2Aip64)NF)>r1p)#8I%j8Hr#^LdS?ulmZEYWZacJ+c1G`%5bWJtt`rY{k zoxG}O^G;Q2u_At3`dUS5B-fxCGAa9wiatHrUAdX1Wmat}Q$(1lc)e0eD`JaCu}T(6 z5~9@jRq?SxeCWg3>o_xp*WKtH!ZAB?-RM4nL(PHyhWS2|zgzD+Q8{&_%-dWv!BF`4 z7Ty}hiB24@$Fmyj+=#6aSPu&ZxL*a+J7GctR|;S-2hL=08RiK01LnX7y)Pi3V;M40K@=70Cc$)`uhAVJJZlGq1SU|WkVEY zC&^=p&?8hnH!UhT7PK zis-n)i0I7Kq9mbEvP>WhzJq7S?tShUx14n78;_UlF=yxNl2XVhz?YQVOFrf$8To?g zg%Us?_&DHfU}J!xfhK{Rn_Cze`K`Bi(rk7Y7u&P4niCVtBO}v(eTv*eJU5FcZ=>ZV z)_74fjwFY&ULV17QnO7=Gr)1cFhJ8ll72sqj-tbXM~|Y(glaV=Cu4XxPs1-iz$C!8 z06hTwZ`T9xiTO{M3_$w7GXZbk%XnQzmyNbrDXWn*Y6&eVCZ$5Ds!MjC&s1h!c2@Bw z>a!CC1Iki+@nfyiZEU`4Oc6~|hPqIq+QjPAru;sg%K`B#^|A$pw zb9|88qn>rt(^U?^-BxE^a2l~D`EiP5Fy?KGZp&!wll{@pJUvmh;Tf!EQ_JRqlEABR zTYn4*QC57Z$v)@#=E1$iBgM{k!>Ms~P+j2C`i1g~o~HA0KR0ezvL`4wPFC^zh^y|% z%90yVIYVnQRVMLA$?GIPFLDfrDkCpWoYzT98k z$`!iUv9FB<5W8$?wo$C9;+{MvT0CFcoc6O=Ua%T5__Gvvvl)t$Vem-35Ua>P^iDZ zKNt-9{eD3Zd_JGo>-Bg%ZnxXza`8OxbUHbXv)ODGi>0EXf@N8g$z(7XbUGcwFe;Tw zsZ=Ty3b|Y^l}aTNNlZ+P_`2ZXeaH8Cn;o8mJKc5L4p(nH@IhJa_ToL8j8*UERu*Ti z%U`@!pHZMq%TrI)X2=A)zSF8ZZPB)wnU?a!Jgah=GPr!D&5&l+DOl~4d`7NU$rzE~G4mFnd?=K0~o_4jDMZ&7;f@|KcBr#8l#CeDdMArb^~yNTn7Wr<-( zE+-%Ygn*#v3h)AMfCo6h0Z^o4La$+eW?9{qp97z`=izG*|Kws)8{d-gPv0g&-u9LWXvlp3Y%Nbau5V?99R|%6Ash)^VHr>4Gm+W=TcIVNF%N=5CFacjsfCt zHv?i~{u8DG6#qMm5$y-LpwHrSvu>xsX<;lTrHPR<3W-ABtQrzCHECJ4reKkwsZkSm zHZ?xSo){RMq^_3sc9-3&KR99U%z^HIm>*KtZ+h(6e^y<~MCS#Dl-sv#@7lfU{rp*< zrJOo6=J*qBVN`;oei18+Z}{}ViyO9;FS)rRWyjg0aRm*5@(FPR2U0G4}mb8FGaq5j9YH68XNGX@Jk$0w?b^}E`ls)u6l z+`A!r^>Ew_=YptYb)^c^3@U-1dhe4gUGb@#B)JyVI+O zn}52Umpd~dA#Z9;()je9MJt4kzh}AMNlfVYxH2)a`nSi6ds|mWPwQebN;hA*sef2@ zZ{Uxzrni4B{#qB{V}q^Us-h#=>WP=XyPEjr(UT`mZ@Iri%rutetjIo-Rl4_I)m{3H diff --git a/doc/manual/red_ring.png b/doc/manual/red_ring.png deleted file mode 100644 index c3dcdd4c38c3b253d8807d4d58ca0dd2e8652cd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1219 zcmXw&0Z>zQ9LIks+)%@pso`8W40YX+3?X=3kk2`A$b^RjnnLy<;!u`1Xh%aa-xOnM z=39b+PVS+g<20N`wS>;crRTI2ugh{>C@(Qvq_jM)uulE;uVb{0dN)4DeeSzzb~vu{DSL)@A}sg@QFj*%K2J;cz$<3Q3X_ z3!w2+Z-NOJ-@s5gB_dpZ7FYhqhx!vsqWR>%_S=< z3o|wtQ;YP8Ycdzq7IIsp=8E9ErD9`YfTi*GYk2J} z23qlK9d;LEYdSV5u@1&J!>vmAVFLt;;anb^$%d{Mp*0;4!-yiH7m-7>BGQOjL;?{+ z5xidDIIvoQra`L(f{^EJw};HZe*Jm3*4vpEJA5%FHL(WYF`pG zX<&Oi)G1-}6Hqw=Hbg-&fF0?YKa87xT2=myu4Ew7bec4Fr088sGab*Q)g&w}Td<@+ zxnRYd*kpo;pROPxhq2rLb4$-9$AKQpw*Bi~vuEX&B&SeufR8AJM||ufGHQ}(QVF00 zk^lk^JPRxX3FCvM__>*%&Cg`gn$S(oQR7HEYe3n$i#&V;gx(&Q#j!EM3v_^xMsA zXP!@v*4ytqIQC^0J?p!ZgXylWE60yfdG%2{ulvWvt#@jBua=NQ;*%X4PsJQ`{CU+9 z;m(Qh4)1W4&plV!4qp`l668GL;xbNT%#lWUjL{W8+>>K!eOW!XABgM_OmNaL}@sYNNhq^wl z_NT19Y%Zy3d3<7BZ}i^_=@ZJxS<{+g#uOd*1yoeTRNr z^t4gi&@vYDN@eZhvM)^b2kWPvFWi-Q{cP^8^_3gT9*zYA%9)HhoHzX7)9|pef1*Br ST7^N*Ijqjk&pNfTZ0EnaqYY&M diff --git a/doc/manual/ring.png b/doc/manual/ring.png deleted file mode 100644 index 6f7c54f0d77a9fa15399ac39e74c50b0ce4fab96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1109 zcmW-hacmQH6vyAj=D{i{TI7&36um%+2OhB@7jwkJ-S8Zz9D3+QPg9ng=^uxw<_0C4 zrm&(_8d6P1ns7+PMv7D&q#=zdq{0%LSar%w8dtOaF`&k3ri?f-xaUFge(&Y|@jmY* z-*0~JZQmv>?pe_T0E_#d>U++utK9d{!Ub+#w2S!;U;%7@ddC*G^^+dbOUSZ}h!jQn zd_IrILl6YZ`Dw;W`Ux)y3eQMET3{$FmF5bC*<7xj$+S|bW+KtB?Fq}OnP$~6D!N|Q zw4$PnN>W}Bay;(@gBg}hF-(%C<9>gPqM{^e`Fy6=8}@iY1fdgzN)QTw1Rw%nyNS~i z*r?(}8OMuQ&11#EavF>Axq>~Dvs#YXOdIv2J|0(VF{NV5MN29~#GENO2A>LX2`v~? z*{H&pQXnMKs^FJ7N?^$#<6~&=%*;%y)oM1IjYeZ)Vxm^7RjbuXrBW)Dip64~P{`-= z*=#nG$)wZiWHK3#$78WrG#ZUWBBp5?hN0`arfG_zNRlLqBG2<2$FVFM2n1-Fj$$M- z6Am{+p>a*GDC(#rX9Y3M32~OQ7}lTzD&-eRGU)Zu9uG-W@~KibF`9|xQ_*Z9;>66f zZ6qx{ZfdrnL_=~!6T_+yk~vKbssfvh8>y%oH|1zZ2&+L|VicYhgOnXJB9<0572S|j zjhB?5ATgW}K(yKotzH(#9Cp<9JGw6+5*7ol*4SuZxr~m3wvC|>3Ih852rvUM4NwQD z0aO5r0C@lhAPEoyumHjUI)E#gt5>Uq)hZSWm`b5#p{gRsxh`@sZnzki;R4+0IDiSD z-rn18V7-i02a7i5bWHIWqh>9#9q~59-g?MW(}*zzN)n8UckaYGVi7TgXd+68G$P~$ z$a0WoAwj$542Uen(LR>)xGU~hi3eZ-XaEwxbDNSCu_dGJj^a3sXTgbpnK#YfXN!{n z9ZUNAp4hQ>@<@8%o3T}QZ(gvQn0$WlC;z!!tBv8kYwJ@x6F+zF`(X8_Z@%#O`bKW) zGsic+)cwhgj;#kSUxUxTq6}yGbpILER~x=^c6fRJ=2QFmj?*KTZocyRBVF=^=wnCA zdweH9Jk!GuJpA^?@B3cXdykPT&wqRN!A+Uh=C9s#_Dh}fYjzx3*ZpqeQF^5F+TlaJ zQ)>q=4%mesUp;ZXxb?)PHC@Yw){nlpaNU__514}&%R{$5%O~Fd`o_LDrih(mUk*JP zT>8<5)_n(;Y?41-bosC2_l}&b?S{~Wu4AWuY5y=cc4RAm^`Cm@_!ZyvKVqHd_y-Q( zf0h}(_1ntm`NMlQ{I{hoNABXM{+$1H{@~v$M*ao=>1FS9-t$(${U4xz%eKBRdUp>0 E4}9?2-~a#s diff --git a/doc/manual/rshield.png b/doc/manual/rshield.png deleted file mode 100644 index 7a346cab58d54e25f69005819f5d895bb2ac167b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1110 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 diff --git a/doc/manual/shoes.png b/doc/manual/shoes.png deleted file mode 100644 index 5667f5462dd0bbd64dc0c8c999efbefae0ce9e13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1118 zcmW-hZ)_8F7{?zr-Azu?7bQ8z0bMvvO-{K;V-7gYjosKu>bQkNPrYatj!^K_s;B9a zf@ipB(JGacSdt1w8`5BLgH)`hY8QdjtSoy`waFT-g0V`8BU#MAKY2Vzp5OE2dGUOn zC;5K!duw#7ylm-;r2w#O%OgYE+}iKHHND+#zT-J|2A~^8AKkv$ZG99;d5B;zh=?>z zd%a$gBng7xcpt-hC?DaWKoM9uz=$l3rP5-du#n4j(&=_G*^0-Tu~^-*YNlB=jEb(8 zHLa*9ld_x_#hf5y0)aHgC0RDXFpke>({z-gEU(w}c)}zZA_$!zRDw_dWB>^OJ1x9i z$7U7lWt=TyHIJ1HmQz@C77MZYoYl^lt(4J7=(CPmvz1CLShVCqM9P_B#t@PrKCT69 zm5VB@Df>ebql&&DPm3HCV7)BknV+9;x7)2&tJ!SU>-Ac#R;^Yml}f2pDi(`{LLr~e zXS3OKI-N?T5{ZQ4IJRv^qtQqtVw$F57`m=&nx-gQW1Fd% zk+5{f)MADb4Fw~b6jsGhkk_PuDsoxJNJdr13`Rp@SPkehs|bt~pkuZXv9z$M=!UFn zf~*8YndL=4qSa|?jk0tu!%fC~8QmL~2#W<*Yiu^LT*gcWV=)YcP!!SULx6dJ%K#04 z8bAf02#^QJ03-lx01F@tpaZy)xq7wRSgm5AfXO6U7OE=pyz3$t}iC^nns*cpd`bjbn8xRAQlmmh$f9@s`SMOQ# zu(Id6*V&8j*t?q9Fo2NG(xpYN&_4Fs5eNPUowc+bcy?6gPu=@u5+e4FMLmzbw!sDH% zZrhQA>}Pv>PjSoFoxXo8I(q$y4fp!nM%JCN_oNGS`!-p=Mf79B2eBJXC!{eP32f9b1EB=1%$nIz3UtxHP`Qq^P ztM=;?!pgI&&(t>F`0mGv@xGbk|D?9%pYiPa^5?&P*f;RsDmZ4J@9SRm`PviiM*&+l LZylN#9NYgt{5spj diff --git a/doc/manual/slime.png b/doc/manual/slime.png deleted file mode 100644 index 857f98fd3878e89bdc5e4cce500988b0651edd20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42024 zcmV*fKv2JlP) zqSjl^10^v=jgmp5XeMLSB$`fId$p@qR#sN8{P}wLe*0Z}UuR$EI`{oN&pGc~NV@H_ z&U$OtKF`@_56|`7({37E=P%s3W%WH< z*S_!N2fzLJb=-*oKJv~j2jMUGeDwLF`?egw@%Z$i=dZf^gaht7XAwVi^{=eGa>D`q z7Qdq7@E~vb_pAKByEZN0AUrYr7lZNMbNpaeb_4e7dt%r58-&-@=>E znj1I>&hsN%55z6i4Vn7&le(kvjjzlc6Rv`@qTBej1s}uj*2Y}%l+`-E9{qUZ84LUf zCxbbFTZdoAC3lZ_%R#q2XBD1;W+O-5aQG?=zUkQq`YpX@^TO_9SMibYjXS_&;*Q}d z;|O@B{L$- z^>IS|9$VsYBRdcZdw(?OAN#l0IpfPSW8fA_r8wBQ>jNyOsF zc;tc&ehx>w_qYRb1b*w@Q`P|LM4itw-Vhy-SAk*J&jVt{;3tR~E{mK2T$=L5?dWu<@6_&W$^dSm2ugo;gMf z1Wq0+CdcghwN>FbTum?r7t0MFqvLad(@OWQUq6tb#kJr;0I@g}<|prut{uNShT^ca z;qrL{Irlh{pv6?dNIcVSer{b$N#KCQLd-`dz;mW?36M0>N4#p@SUlYRp05T70mXN| z^PTtJdoQr}m9KmSkpBGVKkw+pe*x6r{oUWi_T`sf4)k*8pZ@8e0@xq>*vByJjyvwa zSAgU%eBlc?LWeXg;X)U|iHmdqYl?Fx79pG#N51yp0|+);vt+DbteMSKpr22x2@*U8 ze1!+W_zuARy(YpbDhI?aQp^f4cybtqo%kYt1z*&YSE3irF?drnHY~_5}%y0Tqzuo*ycRJ8;?~xIe;qyf11DE zUrYDvTs3&Nf!;gsyz~D1?*|SkW+9LPMPL#@#ZCehILG!I`xnsr#V>yG>tFvm(F^1g zy}&<2_cy-rjofpHU8Gb?tH-xE zpQw`)W;~PbR*x0tMd6%lho&Y5^CtvyTstikN3tssKaCBkvKem^&3SsvJc|)GDBJx< z?>^x`-29?$3^|X-fjh~O_@cCB?BN({cDR|GoRfKS{5m2Zit&BNE=bIBJf;xFL#pA4 z_nPKp5^}zc&-u7cPbnXB>?lg1TChHmTIaMejKi1T=Mawf*-Dw$OkfAwR4?ZwgZ(T4#V>z z&Z(UDYWZY}OGVck<|QT~mNSmowdv=0Kv&nZ-kv|IjnQ$mA#le@Vs!7Vah^*m$HrV6x~$ggT&@T z#5LmN@!at(>chYP`@jF#V~-Jg?|Rp}Abx>fKvbGD@Qj^TTye$ix8E+!nX(sv#}~ie zzW`(W7duD6Y;%*9lg!Oy2QWv{r$V!eAOVcI5MYl3n3$yS;p5kFfJR@dB&eZDVm$9V zeNp%?e~71z-=c7)4lJQcRJ$hwcbS6SMJP^#+Yq_ZpF895h&8@Sh1v|`85?k70sr`DM77?k2~FO(5tf-x>xtd zBk4fG{gvX1Z(#r>wgW79q1~&5_gGaPj87=obVL!@*ohzN{8;_^N)=T8s^06nM#7US z1I~ehog$P*xUdI6;+PnQ0u$zqN!&Zl;QlIb4*Z= zS2o7g3fGM(z;UG#gIxZ!=<}+nDu)mQO;*ZM_iXd)n8U&zj*o-mfl_UB&`OODHZ!CM zEh$&#fnNBWC^?}a6TOhV*h&8uWiRbssMa^%d^2S)22=L_LI1)L0A@JDICvy?8DXs1 ztcU96v0_feFcS4=hp_{g3au;N4FKyjh+&Boh{{gBJ#!5Zg)!Kso2nDAodv#L{;IKV z+%Fa`;<{CQu+{H4a;)$(L?lg{j|T^lCHH>Jbt~-JoZZmhc*@O90#WVnLmvU zE+|y6sj|xE#4Uq_$E~6K!D(kFmcy8;J52ySMWB%q7|~H23Tv>e9jfR-yvVOEz`G4B zKXb46t)nxao;f!!6(a6_u@vXT=`k87ot!7>er(=wtQ|ZWppLKbz6E!*v|{Y3sn8B` zS8jQ>6l?OcgYlq z90U*1+r_I+S`>ymRc8PU{)-1dy&Bt!qxxxR4RUELQ&u7r(ilQjCNyV&>#I0u6H+K(<;y^;O)dy_W-ZYQ~{4#F|F&t zD>m^$GkQUgQ)8zC0#i*+Ecv%I^`q~7Sd8#ET*WPp3A(ha$MUqVU`%j6OQwbBn#XcP z7vYWN(k8`NhDKOM<$MYN<}DIpDW!CJxVKzqG21pHAT6{A0m?>8+bY& zn!zEA#5iz~U%`tK`~W0eV5e(r9&64xAH_L4cptlllNd^!2oLh#x(eO%E*5FOh1nKV zXgO)HC}4Ww`O5TVKv?lANOIZae)%-#@P7BR#|)%Ah6AYf`xt=}YnhL6`#+C)-{w{B zBXFV)jg$_7y&RVOcf}a@go<&e*&eZm0+T$JqAAN2p;y$$jE)dS^3~0?Vv1a{HA2|Q zoYkGr5|;zL_o9m~0y5!<26_QPpb?Umj%bQgMvNd`&pYotgpnYhp*dqG20(7RBO2Z; ze5JF2alZ&!#xQa)DSM%vLB)w%9OgQ6P^z&~76BZ>NF5QXr&V~^hJYD!JX0K)F;Yq! zDxVJH5C^6;OUsiXA~~Of3Qe;akDs0`o)5jyTi7#e$14x7!R5`C&uhL7nG z-anBsr-JaNa_fQ)0LBEB0H@0|sL;5LA3C!eNhb|9bgLzSyYKdz1#cr(7W}#^Aad=5 zF&>xpF=K0J^EkdT@j@TA%ExG3sEwhIfMcAf6FkQHbytkJAa<^n{zAlB@e>}aJbk!9 zNRy0}7rKvntk*0hVl|$N2!ACK5H^oxH4W)*(YfzFYR&*EgTQn|5xo$n0xF1EKqkXT z7_T5O>67q6D~yDZV}~=QFHS|_4F!_|Nej@GwM^m6IG$o8qz!RcR;s0?Q{0JKp!-Wd zummRNG&YD~92U}#fWZb2-nphvTJ$&}p*SW^Zaz>`-@y?S@JRsvI;$+Jw9{oJX~llUgj}g$J-LP(5?-+ zR@KmoeSq^W=`2uaih6SPLh}yD2hQ~fIxs`H)STgG7JZUpma-Qw!kA$s+Q1l$ui%S+ z+`q7a!3;!A;=sB9a#IydA|9ky6NeKTRu2H4w4%ox=Espt<^jhnrIQw=RFhEc^bdu0 zh~a)&9fxgt8rIK^Exi*uGeblUoQy94+`#Ro2*r)=7$bvg8U`of>H#M@pGkqH%?#yJ z(I#$4Y)V)KhaZ2`J)g9Z0(~l|h>8OjDbQ^$G@#D2k{wPlsDuYBXL5#(c^$vD;M~s| z7dkkEXO7VVfxnys*pMx%;{+}=#z^N6hs|7Q%2-STu4^(z+8C^Lh+V#wW7n-IVm-x3x;}9wn#H3rJHSGmHe#64E4K-FoY-G={O0vKL=x z7zzKy5$LrZ<>*mo6HZ&dT%X(v?bdP^M;X>UMURDW9w#W(yopLY&?-PWlwgcsr&pGQ zXU2i)xWX_7koXbDE41sY0MvDEW8okdS}Hm<*m2<3TwJpKdWpIo1{IypTALNT4ap4t zmTMh@X)+XP6(NkIkdH(t!xesR4H-T^7n*hro+B|p&6%qV(`z1=4ZOM0-+53_#y^1# z?a>%+bpG&RgJZO(n;V;3TxhzByIa?J6V|$nRbq*2#T{8{S}V?UNX2zs@N)LL7doiW z%0t30LifQ>kbnj3!Iec%6(OCok$_&<#=rTSzexfXU0E0m*B3AkHZ^t%>LZUHdDxcZ z#}HL=Cl;qZR(Hyo5Wfl0W6Zw{U^-o$k4fPsGA8G!+rVNe1H;s-JzAWlyhC9mWjIpoD?@{fOQH9{ z2OlIWL+EvNTCA+szy9@5r?K<1pZzR$0@#$j$TajUrHPkVK%F?81}bG1r0p=0P~l!^ zd{HER_d*jqz4K{3R};aQtW>&)8SHh5#{iPBO;N^s2e5UK-eV8YibzYim`;diCPhOq z_Gv+-n&%e2F3XJ(S2}gYtO(?RF%jyR3Bsj9(}N&UTw^{_EtL0|)Df|@C^|e295nXv zj}BgFa-p$y>?apGQ=tFVxzJfFM!=bmay<8rn4}QG^#cdHi{heJnIip;k9^G8Wavjnf4-q@3g92krz z`@qqwl+Vz|vBs}i$+E^nHc}2OF)xBHA6KCjah)hH)A9jNnxMrsI$_Yc z&|K{4V^d}#zD324Q&#t_W4W0mA5(?Kq>lBOCdmtLaG?oxI)o%Ef#g3|OlF`94R0>H{5r7**^3aa zIF(FY@H~F(fqNO*{0bvMVv7;YKon37z%$PQzt;&>>dDk^9l!y8H5FP8WC$wXZHIYV!dOzd+>h3}ji$?%h#LPL?@oiNx(pE_A3vP~qolPKRcKEh6s4q?PS{(j-F`efFnss^D?#8U>2wMFVJo zUIu}fjR4sTaFVTooy4Zui7J*i2jLLbS+>>prWLgGn zx|R5(ZW3^+LB*1l=<5XqwQNx>`8l1C3%{oa%6tu6X!^HsVz_CV>wYUl{}7QVtI#3g zA*;vYIrC|@$5=Qzs>de;;iYcTe`cZDj_V5|U@#LH5*VO`F3rL^A&dm!%rKI23F-F&fJxy1q=9y9OfX3r zqx57ZpaHXHcOvKa?6p7&C(93H?-YRr!SyPl*lmOpY;jM2B;CYdL^<1k5M7(D{*b z1{E&O2@mdtmZdE&H1B_d3+*a&=0ekR<|=gNLhB$LQ{*`Z6?*2F8W);5YMEcfnkT_e zN%Mr|uauKOu}mYSn3V5?YF2Ks45Y5omDFj`$lQaiLU}kJ$X;Sk#xNbx^iG9rBuHR} zkwku07#VxK62KHDJqMUpsJozZLVtE*$KPH};U{96(a z8ULipH-7vlEy}IMxr-GY7YKMG%}w5v9DotJfIVI*qK_%B^q+qP{3bZ@-z zMuw5FAIXLVp-QJ5_cOfVq^kyiJpqWWFL5(-WVl<*`ibatE<6vFqz&F9Rpd~$I(l)K zRLEjl?)?{`QdtUKT0Xao3G{!Wz&@=%WTxhxRW^$pi zlgl*zQYEGpN&!m?wpfuPurd`c%E=5~NFeZb$PA&{%*QGR7(Sxr!lHK4oWI(?XbdA_ z1WAjJ-u&h_GaHHI=N&tCU?&M!(6kjs#$Qi<7-dWr>q0A*i#OzFC_o#WSb?4?F4S~L zX`PpJA)QNMVfnqMO6m+1IZ#-P)Le??z=aNVMaWX-O5uzs>ecjk6DKu(55L|$iQzaR zNKhJ(O`(F%*n=PP5?q>RjiRub3$1Kh>1nKP*N4g?1$u1p4uB`xiDCMRYFuc7q{fAI zll2MXLNkYX9xn8BHo~|_6{l9HH5&jdH9=P=Zxcfp#bgH0KypPomZ2S-Sk$pGpK%0` ztK^7+J`9N7cH3=qWr>x+FcJjprI%iM!womkzXe&%a?mO$%c7Pnmo-wY_F7?gXGC}O zvB5PJ%E~e%BU$bA%*@U7qISd>IS(PKp;UfnV(};NAUWq)Vm1TVt#?}#%ISnEsY&xV zQ<14Ycus$>M2xjf59)Ff&}5kMk)E_j;<4j={=)7xF0_O>^O+=YC@NL_yd5Jr+-?fzN~dtK6RngF%#n=x_)K$U z*uBb1X7HNN(AV@8Mq5G^4o+;Y8ayB;5|v@PvS{}L(o}|77K;=P&?;FM8t@KbB%&7w z!B?2)fc;Y%vLm@&7aAv|WW&x+GZ3e7t`gU{YYt#>r1&fCqIRx|D;r4w9*0;<3H?ft z5IsXxKBzQ$I$_6p>&vXVzuL2rM5y3F`T~0Ez0OuB`0Nfp`g>KOvVrqSdg@TqgYcFw zFobO=IRgbc)W<7wp)->IkLE&?$dPMe6}?SLEWxdFmP>DfO)?oMU2`&nE7+Pm?u8Dm zRhWk)A&;MfETt*Sa?mt}u@joJhmo)WQT!Kw@fW*x?E*^S@q$36BbtFITF#WoILO%H zqZl@cX!btB*DwC5XqHX!a`9y*2MC98tR{-_6uH-Bjox!6N`2)?z?gc z#nA9{LM}rBe3%VgJ-yB2uoDxKR zH!|rml3lxQhmo9d=_!G^K!@AFp(d8p?A`}{U@ob{DzgMCGmV@J&3h-iSA=1uLsFvl zdj5KEZYIq?+rW~*6llQx9q-lZy&mJci^ocNMl z-6lcolNN^_RIB-;q*6n2N^Am$kj8REdo~hXSq@nbp8(0Mpg15;h&k4_hU9$Qm8vAjfo_0EIUd$Ijge-QHH@ zDK`hC*93oQ24@wTtGEX+-Eks~i8k1If#(N+~N&Jq_DM?LrudHjK(R zOZ8W^t)dREMvD&kWSj7*;kC z0O{FC*aN#4VI+F35k}%*p_j=I%n+W0wnUuFNah@3e&ezL97=geL#`FIQ%x+T6EnEg zMRCqqWKRK(-(7A70jpxiUZ7y^eQ{+NZFtS>m ztI(nAZ>XEWy#%Ag;x88 z&iH)JlzLp~jkNi|phD;7-C>M-p(p*5rpGLo3+;6?f`o9+mYhtqd%KnTm{qEa&`4%b zEJ|WL*vxWJYk|O_=tid4gl`$yg5p%=Y$Tu*zAgx442E|ab}#g2AQqw<4r-zo?H#%> z5|;``mo#3F3gUTETqTLM6O zjzoYBg|idIDCgQ@p5;@@A+P+Fm= znYX#n^e;FUT4v`wT$kwf%4vLf!(;`3!J`r*lG#WQr+_O2va*q=NHdItoj|fOfjQWF z1&>6KWPIPEy9FexQK6h7|gn@1P__|WKhzlMXw{{Olrv; z8hrbG)M6pg>N!Bl6Lx7I68e3;2<=*OGDDFIEj^Pn#tXYE`QDpcPmI-pgcKMZT^Q+U zV_PHl!kpBFK69OCDHplW0tpua(JdNWXln01#;a1gbGuy^nm}!Hp*dzI7kc7bK4ih; zH?&&mxMpHWF|9Wz;>TuX)9FVpSH;8<*(0=8k)x5FjR;7p({x0K(j3Z00+$1L_Hxjy z!b83X(ipe|jQvb1>@F{hkQ~?-eX8)9kl`R9;524uTn1W*08B~{sg%6eP6&}m=_T!0 z0+avDJ5@;N?}e>v&hk2v_N>$Pva)h_QB;b6?Xy!BvOBR=k)v4fxt7dOEDFo86XQu_ zEU8i?(-mbsT8wwS3Qz||2kDI}{@&n1k9i}{sB)o2Z*1_TIRHOb<3fuj$uUJPw2!HA zp#@<1+c?MAUQ|}AXkN8vp_+J#LNO;y>U2(K2y{#N+s2Z4^8s{)g#JF5_M~k>_OiPI zU0DhvslvOmk?Yag>yAJTrL;dDbQ~5dO2w6^W&QPi3_bRhb!YkE7du3q1!y?<#M5w zZYivi3*BGBg3~jKTxeo7B$jxH7?WY#bnf{JA)_cKGdP2?+MRGPBF61Yd%GRz1wDhR zGJuDEWt6?wU3VSDGP98o`=uiq5*TR5&Ohp3azwKN9`pOLztA2Qr=E*NXD>8Sin(5^ zN?Aj4qo^GZ%O9d8iASYmHvyRSF))c$N7{Q1clF1HQkYB$7Q#aum_{o)WF9t90$B12*KOi>73Lg~b!6CtppoLkb!XPU`{W<)e|p~+bG0@1~d-kcft zaj2C${_zrDr8qJ(#BO$ z9d#!S$qYrOJvB6u6GNFuqTRzt1ATvOhI+1vVVMgpqV>-_7kZ#N7v!pF@XSmK zF=r(ncylu)GvH2A>N4py1gjZ_%&k?t2Dq}3pf)SHmkCBp&G&31*tftoWG_(4qIRTk zFppmmW2)by5IVBtq4nd&c{ZS((C_IT#dhIBviRTanpi5SLvT`M70i^-?_I)*<*C^( zd)$_(6ujZnqI^(Ao}uL0dQV95iaa@)!TroC?5;u_A@{`#U#TL8ZivTG^3=cfH zGqXN(p~ozaXCDvBH?#H{O)VR=%F;5s5x*=CdS}e*{6?UhQ>;-7O`dqQRj#`Iu z0R5e=fyaE{VTB#5(9alWBLR496pAns8PV*n!m?P(M#2WOkr+n8V4xR&DX7)2khQhc z!Z#Lnmt$E2D3)t+VELT6ILTruBDq!*%hQH}&P-@gAAaA~HEhG5a@Cg@=R!-aPS(?7*LY!f_3Z9)jGq(lc`=zmV?1p}A%>trPfASp z>`VL{nUBoZhvuvlg%C!9P=!E7uooQ|NZ}wO8iR>mLLH)eoQ))(GuDX!U_}?@k%p#P zEi1cq?A4&+O{nMI4o-CfazwpSO)QS5Sio1NO6qJHM}66NVH_nM5`#P+7(e9vDrcB@ zIw8F~c(g1}8T2t~3M_WPge197-3zVCFPu_752hR^Crw2)Whw_1T3Iq)#d6%Jey~&n z7uu`&Hn`9Nd5sHQ%zUb4LAu~=jB%dxipR9M&|E&qu?u`JkNN~Jv~w-E5O`=esKg2p zb)7e#vU<+eDnn(T@pDudN$G(=uUDCreG5VT*0;VDHZV}il9UW1F>M(CWq67ECpK`g zuzTo}(zbzR-+EQbVE1amb%Jy{{aE>ZE)8h?O5+6+i|hzxF9c_-xWsfXiC;w!DxHv` zRY5Ej!OOXF$}1e&XRPy zy)k8?TcIWbKXaiyhgs6B&2tuCTB7&~<3hW!8dT^>=6yP)T-aT!fX9{8+G7Nf>_&Pq#SO}_>gI%o}<=bSZ*`Ny!;J69z#s3=tB0oEPHrxLleRCN$_ z)lp%0tpXvL!E<_pL=8Y4m*CnQ$#A)~O4ktYfd>RgsLkrGfXfKSel6ua#E;cvwYYf>)Stj$GX^&B8Q@aL8oL--k8FFFw zkl3ig?#@`E+-BYB%!M8YEe95{vkt||q`>!%O+_xW^oS``7#BK}JuGsegL+)#IWKpN zuS!_3+{6uBXtx?dLCL5>4;g}N0!pQ0lD9PJRJK+?RmNf{m)B^mLNa`(V8YwlqZc|b z1TWkC;=c+bu~9H(FZKYas0;0R{Hh&|0XPVj0P;Xa*upoz^{sCqYYA(>XFl_p4}IuE zAbEUb_gmg~!?qia|26kfH&Rtr?B66tliagc6 zGgPINNc2J?A&XEtt&kj&874i)dQBC7J!yXr$XU9NDxppm& zm)pR~su3NE!~^kf$##(D8EV1GzeQ~gtP)Wmg+s4* z^iC-o33vn&Ve2w=N$tNSdzlnL^}9=wKw%E{LBrR8XNX?_9jf)7J$nG`&wcK5_*H1( zz;oBsaQBsu+;N@LJe16!SzfG4sV3{hM($4Nm8Dryhn{UQv4%R#48yEZfg9ssu4iFn zvK^5UTuiX`xjtCtYg9yfY*uY?*8V2(NS6@Iogv4X_ zKLJr870Dw~#qNa8g6{0_O{Cy|wOoZ=WihXxlKE3e3&GEg%Yy5>++`_FO7*yGn0!$@2L zJgAG}+z`K;`o{uSI zl3r+PdZ7etW;=KXFim1=93DmzV`sU(d#ZOFT37>Pb)NKrr+ zn3QihXCqy4#T69P(5u0BpjQWD)qch}90R zd-p;nW8|ZcK1w`e3|0YbcUsk)MeP)Jq8*FBWO}HqtSWNw%~ouo!FMoY z#_dHnF*$5Q=9_h`s#BxhZ@800G-JQrm!9q8T zH00nkQcWz0dTnGUmU5nc_PEg4$XsaNG4MuR>7{ux)h_2bWzvY6o2jy7NM^7~V5_N1 z=ep2vr~5h%IfQTw#OCW>_d3X4$W@>hpd-n7_wL;QHfrcF8wqg5N7!c0Alnh5dAWwB9{fD@t?2tFG_02Vc5Wg>qq(*284g@%WAuULEu757ho}?6>y;&V;*-dbkTt% z6crn$P?cq2cMs>vMkUe873pH91?t=H+q}v{W%O?az{^djlCR80V)-kDk;uv-eNx#- zfGG1EAcWaSN!4c|oaxHKK~x#9b7B#SSQu~!$XKA1$}`(2LGTLL*Z^W_QUk6SjA0bu z_!f<4VjDU(2IGt=t{>}Pl4)z4`0YCcW;ODY6L`$r7)t6$PbPthcxFOBHAxga0ZT3t_>^HN4#OCHgaN=Rwy{CsPQ>zPTv`ZzoB{sw;Pk3>QvEaU z|Kk1E+<*QFl64|-31%UAfbJ_+&tPJZ`WR>ab^vn?z=8QZUUUcYGeV2%xSf+3JSxi? z{}iy!zjZN1I+3RnhN_g_^pFN~P@!w(V9AAcb{EcMiU?ieLbIj4=+NRqH+atTaG|?; zH;*?L+7pbVLd#3f+rnhe5Qfc#-6d}WgFUAQ;yFsqR`sP~YZb1cot!vga{lb7NZ&H4 z8uCJsXysufY_K;H!blAEQq5K#Kf8)5|6$y73Gx%r!V&Qoq8I=J@o%%5$iu zBAi<+sYCY_6Z&Zb6ClJC2W-Y_c7VaL;VXJcVh@490NU>_H^82$2tq>Gz7x#ql zHI2gVVo-;|?q12k!Qf6TUkm&ii(F`Lq*UWV<4TJvv~!_d#q}{tlrQp}-3DIS7+0aC z?iRVwLLhI8m$rdpsaSy41BWthgG9aigag$$R_izw2hxocfg=r5H;OSlo-@$IFcN@= zjaq*Ogpsh5rFIxD!e77#nlsy=sU#&G*CYI&N-~g!g91x9E}%s~0(C&zXFvN{mf;b$ zaX5Sm_T^Xl7xiQez^6PE{-Wv+zb>7eiv^L-F&K|SVE`;=Y5{O-V=!#;NA}!Bb{B<% z14bS!D#pbI-}LfJu!s}J*~U1K;>=3@EoLLBnN!~+Z5_QqN@nnBt@hJ%7Ix3+gwEv- zgsMOVp{^b%knY4%(tk*Ps&S!RDi#%o+8A@puJJ|39aNLb)pLx23L3I=Yg}kAxSxH? zo=6lVu(d&&dTKm)NM-=TWI_&|Xy)s=xc7M=k%md(@39r4S79VEqFL$6!$_2|Z+OES z*vtXj7_2;gWcEvdW6uaM!#|7(0brE6I5fTk_)(AoX|Qjx4X6WSWMk4=#tTvu`*CQD z!C?HCqL>2!axMX%>0cOzU&Io?1%e7Z^a1c=isY;#26bm9GvweX z)L@2)7zAc%4&W0ZqL7UQj365cVI(g}Nvf1R$U)N{;V1wS&`Z@9$Hjjk9)U>! z660`O90fb+YQ`|iRgC%V{zYdM{`-ga;&G^N6R|iTmj-;D1?K<$@BbdhgcS`3HBI~< z{NM+GJ(Oe8}`6DOFGv-bH)#mJSj`nadTJhEyvkoOANi%DB)Bz3@GA%zei$)BsE> zmBthSES(=?=Hx;%uuKn=M5wG#uGiF}J+VZ3O)l&{Gns+6j(1qM-HW+<*aYF+p( zjQ`L7`9CX3FsJXaf{%zFB66s#q#Hs;ik=E1iS@yqd>-EJOuDp(QYqneJ~{_?{Hn@i zyRduiI9Y*5AZl`eCkJuWDgTd^WXCp`OF z{6*immqrjtHh{Bmz-Pu(BnS@xkNFItunuLf7q!DM7^Jt}dMm5X0(aD$>4*j@83ab4 z82d+%c!>9ccR}|OzQZ(N4uaUE_RG){zWld;`?vU%$w`1W{|ns!zm1*P26};c91!vr zU&jDI8p{ETe$cIjp8!h10>vI+73js8L2pNT6!rtj*n>j}b;?-C3H{`Fh#QROB>fq- zpFd6~CwsYutZYxU-W#%!JWoTMC#qF}uuTp~H`o^XN7OeGoY|CUso_eD}k-9UDq7W%3NwX*T#SwpO7~VGvl&%2c$SC{;ER zll~zxQPd7_fE;E)S-QCBpjNlhE{w#q1VD~%Du4&tEMNxs0mDEV#VO!QaSA+R7!6lq z4_^Ua665i$AO7%%Ks!cKw8B$`qhY|_{skE0>pb8G`xg-YcYpVHKsfd=`3VPyKnCnP zm3v@fP}q85cO~=_#wzU2d|;&nx7&-#PwUE3ketdE#FOy)c>kqe#2u>Q`NL6dDtpX==Z|z%o&nHh!ykP239(u%H>Ge9+GL-hAbi~0&-K+X^96TSsh5uDi0Xw zN_h#V4IdgowW*6C{Nu}kRwdq(z=E!Ep?$iC#X`aA@Sbywz)5%A%EoxI$|Mx`{0WV* z0ZZL;6?PA#ORsS$MLH)lhz3iSgwlhh#s?~;d$8zugUqBROwSPjf^A4w_8DY05)5O8 znvl$}ZQC~VH$zGTX_d%=xa_jawr<^e>Zzx0-n{v^ zEGB{#f$BQY3xSM1@>e51=AFJdH91`vw&6+~+tN?_66D?>*HXo+zc}FkouG;Q&FEh5R29e@IE3D$BUL`_{T<8!x&F?3k3(Zn0wJ}Od znwg=IxzH@Brw(H^Cb@bz=vj#M)nRheq!YRbZP}|#Varmd%rOr6z`3=GpC`jelCi3E z1+1wYG+kVf#(?_ir=JddzOa8i|M|~<(TiS$Jud(!LD;^1=}Up(v(7pT{{?{Y(dh5{ z7cc`+33oBQQ;>(m5^#wB!gUOo!FL5w$!a@5BV;xH%Y=TYyR=%_34-tjTuG~@eEwel z!btoV$E0}-p-t~JEouOsIyvBd(@i%~A10eht?Q{aV^yPttVE?+BtRS;*}y?W^BEwT zuZa@s#dy;Hgi$n<)Nv+OAUV6|(|xvjx`BP+h26!4R!RL}19L4%89eKQm6#j86uHo@ zJ79KlmDG>Y()0J6V^~KCe+8`-jA7MVuG$V8SD^ze*|N~pir|F~`MU0HqD>JdQt(|- zB+&O!$Ok@bm7gSMR3I}m6@g{3NUR`DlG#X*d8eIr+Dl&Yk{7@D#e(bc#~;6G)25S7 zItd>E$@mnI9zn)3HU-hjk~$FX^j!gjP>-Q)V?V%#|3ac!_?5T4?QQr9%;O*Z=ttO3ehKyf?Nqt(qxcqnt5=XFb)?lM zGZv{bA_qwY1iUkxLo7j4oUSI8gJ<-W)7_hrjdRV;TqmnLBr`~lr9$OwjZkuphfGo*b7r60q6)1sL6>&**rB!DF|I!+Y43lNWvUv1e(-+OiHINKEa|xh7j0eFUTqoUbSVU;qvM4;$kFZ#3y)V`c zR%A$`HBg-z&CR%qb4_(g%QOb*s9r*y4_>lD>jkG*NMQ?gUWbAYYja_Dt_U^iqI_MP z9P@CY-9zI{EH4nhVlK3`ad<+x&@5^dU>Tgr;#7oZp~XVfbQcT(kRV#3Y>O}%ia&Fe zclK3a+E7zqu$PW#0F_}RX7yk{fTL_Ac!IG1j5E%FjD_qKVzCV*Lnfbn_SulVV-=eG z|uabpR`CColD7inMl>O zU@`+U<|cliXH*Njd%u-1V~Xj7&gKoG#`DF+g&qnC7P!#i1d3efTH-|DIoHNG&)J>i zH7>N}?yW11DR!<1TxivZ4ND|}RO3Q(B%6tcr{=B%Cw1I*^nn;0NhZg7BB#i+4d7-?zKCD4IHLvNM=yA0KOrpMT@7? z+aoJrHS(PcyK5;?I|WaN&V}9kCii2WbBzlv(LFyGIwwweRZ1U|-2_^6L@D(cZ(f+x z+OIgq*N*wQ&@L*&Di)qaz$63js$~_D8EEd(YT(oNvK~^Qb1I@IGYGwOWwA7e$~!Zk zftkR}b0BCTerf#z&k)G;U;)4s%lJDY0fSJa4Geq&hqPt^GXM#2qFPJgOj(Kn91KX) zH4TtsJY8Q5H38=UGh9>n2uA?IA)kqGe1-07N_Z?2^nTMNM(_7H>2END-D$)s7OFC* zGOHd#&utWCn?7=&Ov%(1IeLk^Eb(%HA$4)On_;8RM-_ z<;iqH-|i^Er;gu&1LzK05~25>3%#r{H7>N<;WaL_#)Pa)2e2}MoC{4|I^_Ma+5zIm z!l8?O`Xi{<6ng^iPcj3yal2@;@oqzHrX!k+XqCSLdZCtzs=@v6Z=Kw~0NOLpJQIH* ziUH#jPB;O!F=31sc8=%-Bc++FX1usC076i7As7K~;u+v1w5a6*z2bF1*(R+Lck#vi}S{D@GTsH;b=u`lsqJEF!sBTx5jXy=%?J8^AMD3xx1{hxp6@QW?;=7DrmLDhR|9i$CeocX4z+D_QK%|q+r{#kyx_h^!^37Ld*iU zG=O0k1J5V+FW?ynA3>-x{0pBju!;@rQHBtJMBfzzCRxq+lyP11G|2jZ*aWKSsV2*c zzGw~ro^h^Jr*S~KyRi1)FFqw!5qTmDn#wcI1ZZcjT(KgDmzZ-Wha=XyD@;l^DxEMi zHw!I7J+oh>gLM$K5v!4$i~QRa7k1xIF0?{u4KB2^R+dYOZfs;Ov_7Kz&tp6%A#Aui z+MA5ExzNSM)RQzlnSsv85Jr+CDp00t+-Z5CUFiUz040Ty#E6C?n#JpsjRf?CFPFM-YjC8Ce{pYEU*(*QK^BS2I2Z>hNDIB+Mwn225yx6Wcfr zgfK)g)P0=mU-vHzV1f}o!dI{;&^%@$1cOz;Dq>3*#zZBo1rW$rUww5TX~+hq`wEa# zW|HRvtHwGVp3Xt9r4xE04vk@|TkiDo#)}Hx7W>nyk}E_?yRdsMsl#51ZR+BjT`)X9%b8fU)+&0FKB?k$s;Z&>4CGpZutih@rSw!$ z2;&7vV<&J+;S6HdMHgK(B0Gu(FjIfo4~e=oHXuA97|FY$D+_R?G-jg*2wS?Qv6HGY z)L@KfQ4Zz+Q%lDWVdG72dJ{AU9vLb+E{QZTEChhJ*q2?Uf}vp=wG@@GVf7}?*H9Na zgke}1$+?ZWCKf@Z+ILD?f;z2er-v?_9z%$BymWw<8V=f;2$; z@|V9H^*U}m=Z0IJanp!Bmsp+-dMuq!SP~dIf>gwQN@J2P@G1Ta$%#b*srdjQ;0J8O zw@lHBlfZI-uVak?y%Tx@m1hz;5TOQuLns($&&mPxZ{a#|8n_bNx@uzOndkN2 ziqzs77kaXwY+fiP^!qz-p=)E@K~)^%-3eK_rm?`$9nc_h@V4Y!+)&tEn9LP0J()q$ z*pnH&CZ>2J41cICi$cUAz+mmhtX2-7$~!CL7a~pBNZ1cG_KG83_ua`*352JGC&5@01u36vPG*R8bF7$n9;V(%qH5PB*8E)POxRo* z7n(fBHWzy47?uaY-v$?Y<{0)jV(c(~y=$a0cEXkK9t%h6S*Q(~k{Plt-A-n3<5rb1 zbAMpLn?5jhFe7?H7|FAd7)HXF*ByQtpu2P975K~dRf})XHs3(c4`+y&G zT~y_PbY+khF&?_6AUWw+#uph$A`~G=aS&i0DgnMu)}+F`P}Es#76-u@L!H(h27aMD z!-LH_9yF@)X(*}VVVj-*<=9&vHypY*Q7hG@w#vl*r!XwTHK8agwaGSChf3F$s97|xxIvf#z`9lAK z&k1%Zges0A;Ryud$M7@wl!QlGummTAKoqvX?f1X`eTr84t^sxUx9N+f=b5o3D&*um z)AJ0E7jq|QgyXxpq>d-_^F}kmq!tJ2+3n#|*fZ3tRVGqo!}p$eAQj_=Ys5`o72omx zz(ONSReJ%~Mq&4`7Vx6_2I8w3Xz?i(s#4a(?EY|}iz>8pp?yq^3+;A(jptlbp=)F2 z=R!}`h0O+?(5u`D&%D^w( z*JMpn*%pxl@)=^B#jc=NbM1ku%sL*plBNEIJ%8K3a1QL<#!3JHxo)V6KRbZEs2vLe z^WKS6$O@J0V>a<^m>~o@j>^G$Bfmg161zjcsH!d@td(l~ugex%qim|U&=XR`P$$*B zHEz4YxS-}AI+c2fMx5=kxX|wL{#W5bV+@wUdAQJis&Z=R?%~epCSzsH0jDWde4wMK zLS=6J?Ica1TD@{7&e47q4t1viG<7gzCNO*a0=+Dpu52XcGraAH+a4W#nQ-O%d!z5+ z?>9%^0GNSf?(A$}92CfeO9^oGdROE~F_J{(8R(TPW%4~~mB1bTsN zfd?`Zb#kW=WffY9W8wxE3%je^m6UUrz?v(rCgj#CUh~=OLWf9caama|7dlAznPcQ6 z4?JfdY*`bvCse} zuzOX!PGKZwBe8I-!bkwi&Zl1i@k_Y!FTgC{mHsy(JlC4QY7e9eLTzlv+qd>-?$kxIaZ@&3vsw?g^(sPxn z6U0s}AGnrINSNWR%8%6jR5oDZIJ?NB9@wSzh|jap@Ap>hJ8;M2gV^-o({l< zwoIC&TvN1-S<8y0Gk|A`U)GKlk%JXEFaYwLrK{=gLJbkt&|;b~sn=4TF@QgWbI8^m zZ?w{kWcqqOu;Rw5y5w=1na$07gVR*OdNq=#=V{`x?4d&5pVw#g+N+L)T$WWqQ34oq zMYAVUI~1kh>R#kRcfw~mTxc2vfuF>vd*DL1$G9sFf7N*~bD^a|=P}|!hhz_2X^ji* zPnqw29h|@{KMOsqoWP*$B5teXz=XTHdBUaVwl~M1JkYAa<&5Zs+N}Nz5Xjyr*t3)X zA^@1SF2pbXLVue3H~u>UV1PZyPXLB(7MOAX8Aw)^68h=Nf|g5|NqJ^am!j2) z9L!Q;ObGftenp;VmB_*#EH)6%#l$7s#bjprLUDIF6`Tvrjsfhu!`ahl0g;){^K+qhhbkNCt%tuw&;^q3AMJ+7rQJ)z_`bz^I|)qu;OICI zL?u&vp(;av2CB)s!a-TOopB~clBhh>j>V_+A@lt35p#xVEi3B~2nTKvnj%)YC;;ui zJlh|$qz++^VOlcjA>Tz z!G-p^eE+9VDOGqRX!6VALN7O&!M`Yh?}-gXrx$Y=8M1=xg(Q=VmBSfEFHq*$NZ3Zi zSSmCv-r9Qv2@cQ#hcrQz(@Q@S6Z)CMpd=(FEkJE%feuEJ*aHGf09Fxts;G^_7{&&) zYo;#BE`cv_y&FM?#x?^|R*xJW~FI*u!5oY_u(%yEStxbs3oLb4VIc$Dlj$a+_*?aX3y z*r3~q*?$cAur?i)Z8lPod}anesU0L~(5wYkiFtUZ$$4hg9vqOV#e_Wz-+9A(IkAWY z)pi^!R6}DCPbU<@Jupj+3wOW4RSG2+U8F10F!4f<)wZ?8B$aszyL(BUtQ06UVlwpy zwNs5za>cxyGV#;nLT3u}6UK$kDGIeLg;>~q60%y&H><$PnIDoFLUxhAsfXwAM<@W! zyj^I{kZ?pPWU~4Xs^AXx!ybP7+u!bCB>q(xi2-45kI3QxZUHB@{Dfe{FR^0-eOEvi z36Bc=(vHQq=<5QEfj68DY0@Ne0GafXv)Tr!S}b!%%;QS12(kMaJ!PHd2G?OcT0MRMqPTP=5Lo^|z-VQZp>B zDK5KeJm)8j3q8*mBr`9I3tbyCKNp&fSDZtx_sqiXMe?S{IBM^CTC3pA9>3}{sH`Kk z`Sxrih-)yhpghxeMaLD9Y)bV~r$V#!5o1C`k(vgI6ip`+;0ha+G!N$YidKp7I46w% z?svZnRT&#>8cHG;zQX(jHeSF0ev9Ny98FolWK*-S7QW@(tEIAvWln1(G&c(*JFniF zOX@iFCy3BuYn9+e4mNpaCQIPAhjmg&;0i>+!vw+0zGQ5z0F@ZfRWVAEBAKE@mX*4qFkhe9`B02$467oC6FIP- z%xW^Fsk%ezG73$hO|}+>!H_06RTJ0^HkDZqDwcWkSF;9pc#7GHMeVf4Ta=9iCW)6C z_6i}YE)W!86%!A`YAUoBcAsj2J*d#C!&>7xi#EJJTxed1i`g0%+BuaqE;Pk#g9|-# z4B4O*#cfJD!{2ld#qk=Q7h`@J_3 zAO;(_7)BDc0}6JhLIa}24?qRjh=v91p$Ck$p4=%C5UltZe@?0dvk zNjL%vR+6@XF@Q0YXL_FTEi3`-gv5qvEU5#V8TpCsYI3iyq>~~mnaGjJLtgC4X*#MP zC#}h|kz6=yIgr>7$qb(57noSZ!tRZ#l+F(cx}tNT1JBu&5tTCjX>g&7V_d}zDzq1@ zuc^?gDY^e#Xf;3y{>wa4Pc39+Iv}U4u%2Zdk{QBy{|Y7#=$~MQGV6#f{unM|J_Aqy zi`TP}7+&%)Qm-v9iBl+Y|@ok9D}52AY8UFb9d#JQtem_U|&MT zgm4f>bh!jT!G>IA=QNhQWC|fWA&ITU#0GpCW~7){1ViYJ6c#^Pv!TREQHA!$=9PC` zg_bW3t3dEV2PPJb_F7?gCouakX>^zbI#sPHGRuoLFn_T~8`hYRV&MRmqKHYRcUa@!AdD!^<_rK|PcVGGO+jn5kC-1oU3-7%ed$55|KXTgz-X)k)RIOED zlmnTNw_GMz;1U;uRY1LwFrJx)EUClVAXt-}h2y=EC^L&(Xjg~Cr)#7W27X`W2}*?q zkkntxOX@fUk9j8&Ann5LQpP-;kWRSJ!Xvj<2^?mp4Lvbj=-|}-X>g&vYG;iL9Zn;w zHd@7sh28yec*&GnGK15KWUNtpuc^?YzSFp6pFx$yLKrDzBSCz!{dXe{EMvF}BXvvu z`M=ua!Z{NV?0z)FFo;r%zgtk^1^8){0TYC8%5ibRe#LGFQdj{|3ZU$JH?QVvOE zFD5g1O{`E4bxLhJX_B?uDD18f5#9|hbl@i!xzK^EKMxl=|5oNg7jBX9ZE9s@^IDn9 z%4RNfzNj`AT0zi%Npkb;Ua3Kvnyg~h8d66{A7+@XUS znl>aH!bp#d_7%fOWI;c0@OwKOm_X%C_qzDn?~Q+aus;BAqRni34wF8k<-jc{hB3Ss zwy&4W7IF%qyjh|F5*p-|*~?bn_xx2~er2bWa^fnC)CHV|qqzd2qVuGJkmsD4_fAR+DqN8Z9pqJ!MpENK zD?*mJ&^-Q%xzH+ep$im4BP1T^RC#}HI%J`E_wuvwk>RQFhe)J%T263NOU$w)wTGQ} zMXKG6Hz@ARIwJEK=>RH8sW4K=MnXv)hLOakoVfyu&`>ow#9)0N_cSUOQS03UIuDx1os85qdgfVwfW@Uk`9Sf~EL<4ORV z5B!_+SO3d3|K`J|F8tHZ4gYZQ&;Q`^4WHch^M8K9&wu%qKmW~(H(=uvryub7YZpFz za`)bM_L}w&&A-v$Lg&H0Ci;e7(aevOr|BDwk5sb1u@P44z=bZRCFH{H{($^jC6al0 zo5lKN-Dq1(Y-z0e$iqcYk^y5V(h$fnBv}?q*+@V&?9CiTN=&Rh|GNV?l+gD0R*q=JG_SkVh*8qwoLuOYB{LAc(2W&F0(xN*=WHYrA{0jQV3LQC zpkQ}4u%P8;J$-}R@0vp!ze zs?gloqq?(@J6AiPB@Ny?FJpgkX9lobwLUBylNFxb$P55>6EvjDPBF0t0#NuUIF`kv z4Se8S7do)mLpD-44Gj+G;}zSBOx^L$W7quSU8@0L$l?F-;J^96ixL9#Ne#&U; zQ%BE#^5_lE>;C(Sqt_j=agpzQN`b>1Hdere&VGT~;nW5+< z$>WPj$n1dxIZTH$y9)uR*bh_#$)1e_|CYSapgkAENDMEHY7G0@y9nS0Q@{Q$0Jt$; z&CQ&Eu3V*%4_tdI7}I78&r|eROsv{~97du+?l$lj&psd&b{{7OA9vu(pMDVEnK)77 zFgwB9!_NM80#=Pv9WKAY;Ga3B*xYQnW1PsLo#KiVBkePvMPp>HiB&6DU1MV5w?Ywr z{FkLRP$7d2fr(x?oLN7^%Vj~wb^vGe(v>wXYL{oZr)7ksE{?m>nA+|UIx@PV(}xUhZoYQ6(M`HAF0J8|v* zEH3n%h20;=WCo6Bc%nE7Ve7(Q1=&lN6@$PmtOHal8wuzoVGB$whKp2#k{)TO(07jB z!986Vsg@!W>SzXElpO1fYRp7V@tXZOjLP#g#N6_6uV$Jqh0iXb`|y9T4j6J8i%=alWv|8 z#Vg}NdrQP3KUsWfiQ=Cs7n<>c8W%d3YtLs}V@>PYm0_-jo0Azdz`K7ilvr%7;?qW9 zB%l-!h1Uuj3M0{#Mf5ToiJcidjMVd=Qy6J})Cs^^oSdY#0s!;b;DCHPfQtztjwrXT zRVv*z8Sbyu0e6xn4xSs7xyO=YoQT3Gg6Ai5(gYfDK{$cn>AT|0Z?6`PxRGDF4CTd$^EAsb1ICZZIg6@nM|B;7cN zkrW)BBcXrK3;<`*L;x34r5(Ub$8Ep4^g74O0i5CI+~bhb<5W9Q8oK_#W}ESG1}=1- zF_Sv_$%}&v&s~Vx729)R_uHQS!egKEECBe_#VxP;xtE{z)ODdE2OstoCp_u+|L_aY zpU+w-kbXlwXXio(Rw?@ugtJ-}7uxS3NXYFmI7sOFC2)#(7{)jk+Q-zm(Ae)Eg)(Nf z>eIO*htmYv`o#OordBDF+$Jv>@13-YPApCvM!Z58iH>OYM#|Yp*I$2q2qP(&Bro(h z8%a9h%r}KC303UZr0V+tz|>46TKO)vpHccw2qSUHcY3BvJSEv^&C6csP@ccYg|0pC zK#|v4t^~%gpg390E4HI1TPW=Qu3tIs*AD%qE$dEx*0Y|qVZ(+up7ZQbk%PBUHZbIH z<|qI3xX_|E{LFBnYZW=1cgUyKPG)e8AQaqJNX5sylZ?45KqW*Ljn`~8 zp=W>i&>itW?mdg=+8+8 z7=V$tEpEBvDJSnaY}+TF`f3~jzjE_aj>9&OgEx4g}>VLU!|;v@XZt|y<&!MHA*Fy0(<)zL>`0DlW(a55aj zlR0bQ`8Wcv7jIk(hG9JR;5_jWE}0);KR)FKcE021&*5pjbzvLs=Z-^<#r`iI`s$DT z%Gn_foLir`-d-zG7m^uhl90C-0GvBNFowibd1T`vs}ICUWFw&s68@rND6)}Y0AGCZ z#mGiNAK-T%e)soA-~Ha`JH4cR>_?*?0>(hB4B&AXNdOLc3q_A~jmRM`==Hzx8y~pp zs=e1bzSUav%+>hFxC-X zNHLwzp9+?YPaO3h-oFvEXFF#n<_BjL-k4_}ddkgxubL(Hn8Nn88?I)gj`x>sN+P!1%BeL4R_+xouga0A6>1s zjIQOUa%u1cc8+%G2p)S-Cp+%P3GiDu4V`npXZJOST;e)4-;LkG9^H`s`1@`g-L+$MwT{WbsEW$N^2lleq&9rG$-6e(!jE`NeI0IC?BN$R zm1!CBAbwcCMQRJ?XX1AoZ#_hnt+89N+w=QA_0-ETNw7xTa>U_Swz#HXmBBjl(85lx zR#^D3=wL1T=F`9N&!c}vnjP}(k#Y;47P_E({iLt6GzYko-}=_KAbug7F$SWTxw_au z-X1fD|Kg0l_`%D5@WWUC@V{RCU;oP+{tMne-tptHwVCr78eV8v*jPgT@gM&Y$$;NX zFMNvh;O`GFc3Qz1-}$N+dxM!`7|GMMxgUv_RKFDmc7<*1fix$FDCW3vcyrmN9Kahg z2QuV=f43b^Vt9CadwA@cp33SdwZwVgAk<8~Yr{MHjdy5gKX^Ace0pKh_s@QBkJWux zR?1yTd|aB2Ka`T$i(v$L=>5ebU=Lx> zU*|K$O2G@%4H@?A(Ou$o@kjaV{seVHx|W~)4{<@%%E-YwKKJmPRl=&zDEba-veU7Q z|Gxi>hyLV(Kl$eCzVVlr{N-0(_LYxb^--kL0?eqEfh;BD*aG2jbg{=6%U2;|7k^RH z1|XjhIfC3T)(Rqk5oJbB@1?^FqW{6+b;tDU`r*}8sJ!ykGVA$nP$@%7rxPcri&CSb zmW4Y7F{p{|Q=iWd%fFUb^=0IJ54;vW`_P3oh>m`Hw*b@sboZ6*{UZ-ve)8S4v~!9~ zPvRw)51JNy_B%&6NuCq2_}_Gfg(vN_wfVTSs711xN3XMnA%v!J#2Uw3plbFZq(+ zeEK)PzvKHqxbg>o_1eDz!oP6l7g$LS;u;ckipT-~-tSy`;saM+{H8O`xaXpa?tk6u z_T7I!OlqtI_zT2?sEKV#{~r%8tQIJIg<>6850ITt!OP-1{(9*8S5E8a1qlqxBxFLv zu%TfFRaW2}=J!5Vknp~2m{rr$7k73acWU-*A6=p~*zqQnsmI&CPapk>kMH>CLpvUP zppq|Lwp1H>{Lsr~26|9>D=M`FO%Q z2hBp)OR--c*({l?^qP*YF}mc@0eM3(p?Nu`SyAUlK>`Sg-%;sawarhDCLjZ3;+FOdO<4=B9{XB{PWM}e;vIz$b;9O?^WY~ zOqdM>CzV@>(@*@uyEF;h>~YD!XQPMe3prIIzrPX=JfP->bQ?|-rg!)P@y3I%!r=F9 z>q=qcB)|@Cb6lnOG1m!Y;4>(x;qFH9RKR|JKfBa=o4slSG|rYe;r>Zw8DZS(HD@HTwEXIm}bqKAuQR zx;X>>ci;V_cLn`|_ZF~}u%!?dKH24{6Sh-Q`n&yqzYF(OFROnjCKdra&PEC<>pQj` z4~_SZ`fJy&UDr>)K3#bU_JBINnLV`qLBCVJqzzAZX;`ZFXsHgXohyF*fA_i>iLVgA zZgJ^}4l2+)f~IZHV~=DMC+>S+v|AUxz4E&9$}6+I@bT>*_0>1@Xy!F?K27^(ZV&N# zv!M25@#V1L+@(HGx08mXq!0nTa?TAthl z4UFHS&{KzNJ??2|!M)BF)-oZebAm~cwo_dy%1jM&^}*Lo9SR$-Jmlr>C)3w;N`T^E z1AoUws4CPEnUJ)^Gv2^$?}+{`ziVT@L6R2UQ*mHy@7=lm(?6XT0Ia!-qc|ZC1pdq_D?F#_~7ojUTIW0Vvw8xhr zyQRCO9`nDlfH)7`{i%<_(oFpsZ&|-oj44ZdN&6$Oyg`$AaD7c6EmeHn;9C(qxP|aD zE1t691tUApX)cEnl5*S|hIiY{9^Y0OsM|-EWzEVJylEk`q(`V(E-kv4qGiPKeO#@v z=({e2Ju2u&6j^);3SiI-xvpyuT?Wxu2-#e((!tA$P z)Pf=vT3&kIH=fdki*Mv5XUQBc7Aq`QH(Nn=yP=EsO&fMF+7t`{9huLIw`E8Fe21sM z7dA^+F1sJycm+j*UmAbZ-D4p@sMA(zfqW47BD|!KM!12zYMZo6x^F@Cl{n=#Ax#WZ z(-z=|iqMY@8u(+{?j*3^lukc6|1)#W(MKyUYR*ubC%ex7@)s}t{Jvv86(W<E`YIY;d0^Ax_jHZe6{j3aS5rZ z7k#DW{=41r%_*uO|s!UZM)tRnSUH<8FJv#>R6{VS+e5_C5+01vVb~&SzIO&gV z`v~1Ojh7rY584Z~5^Zxf(=P8d`0n>$d~V%vfop3HJYI9}65K2EObfZo>TDARx#32U zK9c_wO(}=Ldm&X>)*}xqgb!}vDN_^M2w*tCT$lrg56=CLMR=xIV zmlTDw0s{;tNxn%y?S~EgG0ZCRANg1FEUXlo4V(%(0lx#=C#KyV|B9xyvx0(65tvvK z=2@i|MJZUD7`$^3O)g#}T|G$CU-d3p)Y1Z6RSpY;4t3$;4Op{0#@1i>Wqzv8lPMC# z99M!Cq3BPR8nwFygDob{1-^)A`754uxei5ZV#l=7CuLiw1QxApc|i%%X$0T0gO=Jd z6=v$&_$$l{_M?E46;D~3e|SCip2xm+=^w-B4bE}AeOmaMCrRsOQXneG4T#6gd*tH6 z%_==ztOammFmBnaa69CRbiF-mQyhaY-gWW2R(31)9K>&x{Kw?IWI>S;Vq9e|2w*M$1Mt5Sl$fDkj|JPr8%=)kn_X$BWHQ^`buyb~0|ocaHgv+`=y9q#<*4psaJ@DIbZOSb;Ku zQ~khE@B8rid!eO2c;WqfF8#otUjNOnUi_8M?f9(Td(Yc*-^usxJMYt9zWnz-bNRzy zlD+5Jdv;y?=C@sTTampKf}c)(p{fbx+^;1te#1o6e8uI6ni?W`&MwX~I4l+dlBni^ zaVgBWA(j(4bOLW!xEvb3?zT9pIS_>nhyfa$WV~z~owx0f;{i_U7q0mSF`!tNf@fH^ zsL2ONTV!NR{uOUWK5A8{lt3QGfk6^<8`$E@`vgT*qtyvHrPJ32MVzJRD&$3L$87^X z54x;e!>KL6)Kz#6zW<_w-+0vqW(!O?w|3eybM9ew|Ae_{l-GT{OfFSer10jpzrS?M z7yX{lm#Fk0O$9tWEDc~0U)H~aA4q3KJJzqd``v54`iUz)hMsTe9mS*(kT=0^#qxn9 zHEe*?iI2c+#b5jvy{XV#65D7W2L>nyf2n`ryI56*lRu-dWEfYB!T%eBaXxM9E(O+?^Jj}5 zDXj~X3Oav(2U#tbo(y%JIShENYx2WomBHRiaL{C>#@()?-#YUiDOCJmh*mu;FbCYb zn(ks&cpkpeWiyJgJ-y;ih0Zf*C4}8j;Ye5)(4DXZDtupC!riWWTN9~2)tDvSM z?+j1`AkiT5^{;>ZTi^Ot$D2@-P1a43iuC#r}o;U+Z671+X75{_S@> zqG=~QaC*J&@XN5ExSF$LFhjEJ4fZx8Jy}e-%yBlNJ0LYo3=NNy>FuUEy4BYie zIx$*9cBv_k{+AGQ!ikX(9^``yMv*r?Gg%PYws00uVNAxU0Xs(zX6-$&61FEtu^dz( z3YDyYB{xPg_5$nM6THWchK*OeX8pD9h;r|#a-@CE@Wi%v7RPI706VWEGwP&Ky1PfG zjVq;RBsf!oOJyXAvci&FlbDXpN)408R&eqyq<<|rhB}y9W+Et_xef~JpV3T zT^R`w4K_Tq$RJuq2>b?jVvsPI;Wen!KO{}WTZYqSrYsWaESN63p64ENEFKaUX?OjH znT_Y?dx(%hi|D2i49gcBvh~boZ^d+RLFzX;tnp#ZE6QHR>*N9;jA=)BsNK^?2zUj z1(4zRV|x*|6yps0-+Jq5AC}Va4=S()?2QIyW}(qNTRrDO1H2 zbJLAyH&3K<@qKY01it83UgLh2;%eoYYOcF-iqf^I+34CtF=^bhR)REg%TW}UUBf*A{8X9TN!e>y8-;*hWmp*IfoplJ?DGe*Q&2L zzm5Ev5DS2CCaV9u@^S*1zl7WCuDcF7RcD=b7TF-Uw|K+R5JIV$LFp1qzSbbUG2`jM zDvGaA0-;zxHDo?G$Tc4Ttzv}PLj6lY!iN~7KHWJDNEdyWB(9HOIbev$mm!Ze$e;_H z*-fJhaL$`Ho+WmtC%uOCC8>wI!-~*JV98JMLhc`ON5b5tuB!)@r?t!Na4X${O<62^ z>BtF>CzAo4C5Ia-_oMh2zOaQ8z}ksQRB!{jByrd4eT%yt{CxHUN%e=c5u|iDlRi^t zoM03}CR$KC&O@&<+&DbxaDTeBd3Yhw`Z{|7cmdnom1;0`U4_z2^H3bNOgE*EaT z1n8bBB9aYMe;D-4Nx6`n?|HUXX5lfZ)^b5}?GH8U;Mt--T<@S->zo;9_U!8|Tebjo z0yfGgT$*0nXT2P^dIeZsV`Sz`?$wMB9(6Hug2z?xa5dGRatJr{?(S=8VUZ4nb%gUL zn>-;kP0N8KlYDIOs^WlH2)6dRhLa`Tfm9U2MW0R<;1S7g54@Tn zlRFh!6i_BTDE;5nV-@cy7L*E_=QIHr@#|foSd_{9eOwW7E1&b6llj1Q*eak)l8Zkm z#@UDs_}47-+A-7q`rUnLyD3FW^&A8@%7b(!n4Vcc7-{UGqCUv;koQu)O!=z(|L|ldUz2c;n1Ny+N z0@=iNb+RO{;x!AehW^DB;l;mxR#*}8^#;G@jWOqR;@{!C#Q~9VL4_sM{c*2bacL+9 z90nEoUARcJ;|+RQ8m(c3QLmc|$(^1isuU5X!iU zZxd1@1C=#I1cbn%4n;Ria0KWcdR)pKW^!H>XFpd2Wal#NG?Q41-8x;T!2DDJiEwEu zx)uuVcIfTz8$9P1_W>kiQ`WfmMM>^g?FKoPn~w6?KMq_GX|uWtUf|dZ9kh10f%ym@0mYUAvk2ch-Ap(Olb9*;A zF3EI%XZE`ykRwldLDkiTSb{4>!ZV$m8t_B{7#hLZ$Gn&}XVEq2H6J~g;e`+!vAig( z)Tb_PD<)&)TN>_m^4srr3pNz86Y)4aog85bRkc*qE)jL(N6>dd-2gw}XDeOfW$i632 zDTWdzWgp+&r?CQ%C4qsTF?6{1&{g{FOJ*2R05P`FiHY_m0tBxhP4H%*CZB zpgs6z_|cHVv3syWANJ68(F^4u$8soNl*_u{G;;G>Q%6BX&eR}vry0Lfi%5`8d~7)> zeEYC)hPj(TUgLhxV*@|FFJD=v(_*Hsj@8zrmxZ}NG6A= zi8VqGF%&aVojNyI!s!`F_F>h~0VFo{zuqTTZ<8dqfbC^LY!D!Uw(Z^)leD{wfmJv0 zdJ4dKMe@v0^4=GhE?zKF^`=~@EU*{WtcJH~D`w74;^FR?XE|S}_ zJ>}kYZ?_c!OZgcE(*Jb0VJW+Of+Fn-ry_7cg_&N^m$DKUgtnjIwuP5yKFh^eTYp1@ zHcT+r8p7l5gyO~v`3{6)O()fjD%PM5?+KA3`1cb-eYY#+(8afIcm;1q5p^L(5~{}4 zR`+b{I}!R;Bf$m#nNC|i`swJ=Qm{5d9&Alf$#!*0h1pjOt|+A@M`A(}zmm)3$>+Ba z_QaH$Cz)}@FVehN5(vDGtmuXd32AphrOIljvl?m07{zT*c1H_c?dMXoJSE3qVd*Nu zOwQ#Kiu?U7OD$;5xvaE`4Z{BF-C(;FK^)BQy?K)0lHC~;4B&w@etTFw{gM?%nu|$6+aZN-N1J(9Ug#vK zI@A3xCTt#;qRza_HD$akxCegkEEJ|#a@9z-1D;BbaJbJb6YByykMCOjt^Gu`4%-#n z@2MT=TbrYFHN!q=t$u0lD5|+$9YVTSVNv!dK)z|kQu5iqn6&^eoRAZ(hj`f1^t|2Y zkC^TfNUxeFNEHjRYlHg{%~E`uvs%8`nzYY3Rmz1Jse-ZmE1e&F+Cg z=skJy8=S_wLYWd3^1r#SmU7_{=kMt4UQ`$}GF_*6(rJ{7LilvaCy8cGL>7r6rv!DG`L%lnFU9n&9@EH79S$S01HqDl-iZ^uK zTKgROu>_G{cx0z0WZxOw> z+bdN6oTqk55Wj#cMXsRB*Y?4Gy=9dW`+#zZ7vT4V`p4`_e)W<4DUW;B8p4DjY zF(1rl@44prdNRGnJAi~N4c$1%^OqibPSE%*(;&oSFXJu9;h$R;F2WQMZ9`9mj$d|r zDBjsxicF3rWYzJ)-cnT^oKO(cCrX&L;Yy39b*`VT0|x8~y0`D&E7Z^wkwZ7rQxrVm z%v6}2-hk5|y=*RSfb%rC`Y*GKUCM|JNX}h+YqHMoHaP<7R9F*Eg912JbH8XF)_y%u zfQluDa^&9wB`PNn{Qn{3QFH_AG)7tfe&Pb}r0 z+ob4SHdum3x)@y0uZT0Nit5?e4o}>xz00=GOL>^3HJ*Pafz_yrBURt?lIf8FI1aHH_?f!@&JEa&| z%=TB7z#+csbH;flxkG?2h;Ra-+y@$|iepFfEv!35!LGTQGY4awX|N_-?ALlG7V#CF zBQo{9@psYB$5nL{*1W9cx0j;a4A#pC6@B_ycMY+`qL(`t$PRuEN%dT7(iNM0GMRlU zV)|J}pNVJb`j~e%3wp52}3XZ((YH^G}_@I zN@6B!ULht~j4%aD%46eMJbFwRx>a^J7V*&FwB~XmngBz))578#s!tWUmQu|ihv|-? z&g`pFuGdw>t!@rgfHq4v*!(Cg`<=`{Wc|xirvvNReV+>~6vNFqoE5qg1)n}`t!%ri z9cwK?B4pC!#KvMG2p?pouW*H7`4a$L#)MHTHz#I< zdEek0G|GBrY)E4&+FZO3wV-IAf8|P)*_(tV(EW!I|IU^TRFR}rbra~afjtOXGBO82me#C zEm-j!icdOgWx4HTZa9+telu6ZV4R28sn2zqXAHAT)N|$LGuCRw^Hf2cpB{8kpkHl- zYvI6f_cH%HKgUeHAY!wH<#*dIy+^ zJY&a`f1UYBAwC}-R`A?rUPs1TE#98%FuMmXI9Bt72`fUb91yCyXF(FkzaFToIZ#5K zz-&AQC-x{84Jq0u#V~26af?sqT};FEKts4{^=3#R)b;YLz@qcBsBIRnJfpE#Zy>Kh zt|k>rzy>a7@liQ3L#&%9>AW$KoK*1xU}G1XBD1pis&Tfy`rud4t~pd7 zRpL&O;?9pYrDZOcvn!@g(^l+qgO5DLAsW{4>_y9uK0nZGOScDjU$RiTw5@Clz1A7@ z;WinmnBmx%$=L!gwxpVrm31d@7*{O9JVacsotc4=BPD!ta84X`)QLxJIMWrC;8ia| zw+H{O;u2E}!RN&#^r7n1 z{u|!t(gNyEb_8&p^>(K<%}v^w_u>gfSoww#7)Tv~(_SkZUUb;jBIoV~&)jKRl||oY zo;g~nvnJmth2;d#R4O2PNsH0%+L779&SU1;(J)q_i%cvRxpWM6c5~m;t;kPk_zZ|! zy7GCPV335GMj>ckj6G)RS-5LkN_mJi=83Nw+e-#QO&Q5_ob1bSJFWN#8{}ShF*<`M zH>ny5&3`vEz9|*Noj7254%na5=;h%n+D%>_v6hJD#_f5BzEX2B=gNg>zq^sL+1$|E zi_a9vIf(F|aqz1a7q=h}K@Nyw+EYyw=Q5@_JeJ#|)hq?i44E{PpKjk-Bx!|t7{f?b z8znl5a}iw~eev?Rd%-0rcL;Z5I2hNpM3Jk-i64ealWxdQx>bhrj4(xB@*OS)sKvIq!U7$ zwxPHuHY7-brWx$vd{ITFlc!__U7)DXyAv*CkIXMiMl5uk>rT|pHM38_Kse#BbC|S1 zhblPFp*&iRJ5g&J%_q90RCuZAN6EE3aT-|iU-F!@4>@GB7L;1=$(mE$sVTMOnBp1~ zH1_b=G+msQQ1pR&<0T*#ja~5m$>=BA@E#GltA@XG3@i+&wP*?tC3qP!qqbP3!~+~s zP{S(k+@9ds4vsMu>k0WGJ`Ld2R}7`*-)^((!h9>%KW?PW)`%jc@n=If*n=9+GcOYC zJ0=!1u7+$0nfH0pPcSnqu}E6LU;L`#A|C22CVz);KdunDhecOPsOaq>;_cJwI;}P3 zDux1OVL2!o-norsek7rOb*2`z_2inKmH|vxmg?8)ouzBQd=bD!gcl?Hp?Xfx`m!Iv z#gTJ~a$2u`0{ZPy8(x}yW3Fx0R{vbCxX4f-ryBX~SkSjU_guKsT$yhtoHexK0F8N6 zdYu)n8kM~u{NSGlSfJH=Il;gkuGLZNs#20{7|PhrRBm1FW&eBI0pK$!8@;uk*71*A z+=i6`Z{@5tmepGPqqasCS!hz%14uNt-F(8Jt{dJx#5+MAo=5#VqA~Zy~`@ zswm2yZyDV+e~dS$Phmm9kwAqP0L@F*U{(Ozpr zT9cW6{_c7WGGWu`yw^VYEW9yMP!7QpAsQi;VDoGr3T4&s*=}k>9ovoMnQzr0s;wzA zE#$yks0I0R0oUxAug$<9^Sum1rqR(jaQ7z!a!?z=7k>yyi+D^?y z{KBVQz(l3mLXZpOhr3V3%#9Xb$a1?Tuk(=o4%lC8LG0aaM8jC|TMN_n3T|^;q!_}< zYuQX%a&RcN713O}FgOB>l>5-9KAW{Q`!QE?Zm4Xzz_pX81D_P1LV1Q){L)`Mlbi^s z_n5-D-av!tG^vRN37jj-v`JSXSW=wp4KIIKab3n1lLU$~Ss^=R1z=<2=sb6x70*p! zlAL-fBcw=D7SS5z>m;a@noZVE}V_fuI zi7-bsxCpIcH;E8m$vRHJd=OlDYK8lgJBdnLaShXT`#|8$k~Sxk&a_TzYmF1I+NCU< z*O5CR2lj+`@xLWWl3 zfwk&C9b9ommo?rqUE-Q*AsJxiGnEU?d%hP9%S>$ar!zCp#G#cntYQXoO#&CI3%6aK z)AcH<#GzUdr7Y4KzLH5YgFp40N9KO8aJ!3+zDA;U09E#hd0$7P7RlMO|<5u)P`zM>gQh|$s zAl(IBuFWe&Q3ai;&=$R|dB%FRsyC{On<^qF+aWm%ta$7BQD120vcMlGCJAI^zQ}zqD#=Cfci_j@gpAW=#%+7HZY77L zSd%rd7k$j&VBZmBOO6BORs%H?piRtb6FE{_z;X_7n}g|c2`(8@efl8z84MycI@Hzp zm5uCtXSvn76W4m;)=oP}ywC(QOoMhrs^;j`4fM${vjVn$ZscLKY3J%?swV)}NMKXt zT0S|IEc5%@Mo8$Z=3a5PfW)49a#RUb@|4 z<~1kF{0^5IfjOiugd_x=q15sQufC`uW)(GrW*Z6f<9y&6S1T0hDmHQTdT}|sGDPis zMUhfh)Lz13*>-?A$rcMu?jKilgBMdWoJdq;0@WtBZkGa*^Us@NhJ!A)Na4t(8`~y8 zO%AJ&5cTRJ?|oQYZlr51Se`Wi2fj*eZm{%c&2QpQE$G93=L0Ki{?)VAHFjo|xEdR$ zEri{hIMd0R?dn>~l~E&NR6}oYh!;^-Ps1n{8P3t~nW+w;2c0e%gc;X(i%rto@!r5Tno|9d`qI9vLKU^VwJA(hA)b9KwkfID|%+G9A6a&knIR$12Qb{EvS~OjJ)^gF> zlsF*`URPeNwT9^k9?EL7-UG+o!S4y^ZNhy`Vn`Rr$(&&+J#z8I2oyWnBd83;KF(pG z40(mbFoVOH(UBEn)dpz$w6k1oyJU*Vx*ny3PyY1NPiKq`066KSlfZrfu#tR%_dKzd zITca)IG0=hv61%RllEB$pL62jXCvtk7%mdmv*Wf};lO-vz96nZgBwfWndV0=linBL zP!{~S)ki${kYi6d>Znb_>&PQdIdwYqFEp?!iriWrc1;Osn*g;k4n=l!BUT*vEscOa zM3BTzFzILZ&I)Us8?nk~Xj{nPsX2gaCPvVt8tQ$~r%-$ZT`jv)Pt{B~{P2?zCIFK0 z_Ui48*0>o7jr3jm+cuRtfVOKeWyzn_S{2qTG9XfanHGZ}2g6sOK8!rl9h9h6giDnPmWY z&Wy+4PAC$myI{kUUJaw4^|7RB%#(=I@O~|eo0{v|*634tP8XG*Mx|eO%LU@=Oy2yQ zg;(aOAzbrb=A6oW>vB|crUVGfM3Ht@!-*%j=QyV~pn+;#$-05Yd4bLM(+!^kn6jiHq6Mg=ZcQSU! z{PH7&Ufwm=+KQFHnF72xQ)~X7TIUpBFPKM>i@&Z+pK1v z^`hOrDbc)UDu8gav2`fjZ}34<)ki@XepGZx)^1dwAvS8i1e0wg0Ctv4E;@yNxhIxt zA&oPkBOM9%gfX^Jca^-|9Nny`Z0(wu8HQ4bb~fo{qr3uPDxkClGS~4&?GFGL z_mQWr4A`1lTPvy2W-R4imHQ*aa9)vK#V1{CNIjEk8s>^GVGR{v z9@j;1E6y~$i@jPKinEWD8u0~qJJmO*N@+fC&6CUctw*LMxT z?!Im$71dnjwd}E6oiwblZG&QF_bspNS5*ERRzP_A?gV`y$t8ATaz2@GOYsw|*)~PwaGx91dRpojid1z>ar}h}f&GUb zdTPyLEUFFe&Y7nef^#j}3E~*ewk?uDC6qJG*Zgr99Hgj@kvR9kLU#wrzP)Vdo&QspFEzi9dv6Q3SA7h?+ z13`HD441Q7+S#~3&0yU$s#`A0Z?6WzT{1)MrgNE5syg0Ku|nm?Ov%XA1Lv%^fxkP3 zo3dpV*>L8AEQbDhH(4>PJ;UaVYBn_I6%c^t>@2e^0(m3M7%H=dGX3+co>}hIsJylH zz3n`g&XQYQ&#Xt)euA|OoNVQVphm4%gIw{&cE^y5&|BeG4<&1sWyVjtn$Tw^l?a%joN+sT>lKQli>JSR=?Kp%-a6Cq7jb}*SV`VU9{nJj|Sns zz~3hSL8G&4uy$m-&ht3kTfX8bSEJ6BM|XdD;kn2OK_FmLc$Jz$Wp7!nRc~=-`*`=O z6&tV1x3?_na_$1(a1aKQq{wCu2k{jU1qN#XZe(-@j&x2x@LZQ=DZt@q#iHUN2s#g- zMl*ds_$3CiYkJW<(5-bnojC*Y0tPod-Z&+uYaVjQR?KgB@Y#q6KB{Hu`MD-TcE;uy zOfHuxo zz$Xb|_V&uvX4lL~j8o8l9$&q?f&ACqV5!wDZBz>^GqH*Vp8*mUYAdR^bDD_Z7VNYb zM!RfRt-UhW6lx>=X9S`U%A}U&ZQWGVOgv-<=xnq5KoqjN&dp+{c@BGoV_PVZkVUs?ok zW4$b<6U|v-UNzt5Va$6Kgko-L+luL8*L`!w`E%Kpm95$6>NYX+=VH+p+9Cvs(MEIg47axE|9~MUEPD0}oEnRZ^w02(my98fgY|Bf};%DWB)< z0rXk{ko>!$$XQ2}Ao6z094^ z=2^m)8)M4_D00j;7*;uSG_xS-JZW=93@f{41sHCtEunjGZBB-aky^w%-@wt#vK2LR zSC)g!F4*34W=AYn z2zmE{nx8z_2%|vvnV+suyb+;fR8d1-nKqSsC^zOhA7s~R$S}Nu*nO^JDhJ8NzR&pl z==D5JeX+JA=lDl$UbeFib8=;VQkgH&NFnya&gmwd%2Dkj*t`SE;%wMEp6L->hB>mh zVZ%%3WD~B~;4D^I@?wVb2T@VfX4j-g z(L@X`F0xPYmoQ!dyQpT!)nbh8BkS$~_DE(#Xcup6zzO%l7ru}+(~&fidk)W(Q8lXI z%3MLA;YK@@JwJfM{8?N)zU%F1ukFTH$?gsa59jrd8}HE?R?|V7a|vD^Hx1G-RYTVHBWYa?uRx%Js5Xj+rmrm28#}> zSP$JZSp1N$jNwr8V1N80#dgP8#MP>i&hO{*axpa|=Z=3KnsVAgF|~W#;CnWQvoB2N z6+mm$mOz?Wmh$Y41w3HrhG?+6igmeQ{UW5KWq5yz1h@i|IgGMK=0`7XBh#&Eu%UW5 z$gw0^sa^u|u9=VBc6HR;6WLv)z@yk&MF)wRq|L16wOk3@sEk*n$A-GCH3#7eOlvQ1 z8fyLKNzx#kx;wMcScel>*`SSjpv7Fb&><|BLyaYMvee}b#oYvYYr$1_n%5c>h-cpr z%kJC`4XkH638z`LWAcd;Usmj)Z7XbTsa{-P0v81vfGz-xstISD(RpG>N1+K&({$!p zk81hYH5aj0z;Cn;kOVHq4rdyHp#t%omDP$swVe9@Pv?}s1E?k4Ea2z zLpQmV)qx8Y=7i)?O+oKU>5tB<@n*x>HyY0ee{$#rSdS=>`AA~}Cja^V4?U_Xbx5Ft9-s5+o< z%xM0yhAU7zXErOUC1;1^q1qXSW`#2~M#*9Q6^v`F@!WpZ^-L!l*E~aw^t9Uhv}cSv z2_d!w!x)q=4`}PD*9!WCO76A5o)q0sF^j5uF4pNi&1wLiS$MRuCemJTK89Nmp`E}A zre&?3YhL~yM_>o8?)+gSH*`bkY*(^IIUQ_fp5)3(inK}dc}A|lyV%GU%*}7zZMIxZ zCio0za&a;RZKgE{bsFe>`M=xVIk%p5I=LJTerRa$GqYBKb0PDZ!fu*1AzYNeA?Loh zur|`6HVwIxjGwjR;q9)sjZ!Bwg@JQ;_p`ilU@i=m2C6-l8iB5$?m1FMjRH>6Fz27& zf$3H(u#%mqGy8+gQxIomeRPV!&w1Ru`?F3Lo3PZDEv8;^S|4}ZnaipQG*4ns(bVtK zNH?C<)}ll1dk6>>`55z5)u#QwViHw5U?D+OTl?m3BDG=#e$x;z>xn%RI$GN;ucTsE cp>e|hKWL~e-JYzA-v9sr07*qoM6N<$f^TQG=l}o! diff --git a/doc/manual/soneup.png b/doc/manual/soneup.png deleted file mode 100644 index f9f869f0c33f06c8b5bf0e2332deb0f32116856e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1488 zcmd^8|8Em@7=HIfZmd8FMQb>v$dMFMW81 zP@usEYf_-YDkUt~kQyebQn1kiQ#xp1hJuwfOC=B*>0ktK7}31m_&0p>c|Y$DZ{Fv9 zlIMB%banER8)q~Ez~qkh))iWvrRD5~I_;mh$#O|6M0dyXHsV@?VYHO-7wjPuT5tL?lVlU@+)(I)Wf*#za~4MiZeof?%`o zR*JQdm`*=VCLi|pR-@5MI9v_}OFm!0?ar%ePEoS5oROrIAoTHkf@OPcwwTo#rRlK6 z5~8Sp$>b+VkJ0Eh7*xI9sna2UD0!U^a%C2&Mv$ zlfKbjcO|BlBT6wO4+g}%U GDL0>ValI-VQ*2=e6O^oek@g4{l{Y&$N@PuThGc1@ z)nc$v`q9zRN~KaRmrJEmp-{-@^SN9uo6V-v=~OC}OePbFL_8jkMx&8PBoqn-0s+6@ z@9}tCE|;pRilWG}EJ>0e2t3bo9A~rH7>1!~+H5vc6y-seYt-p1I~;?OoE5}A-X3SU z2*U=6U1-Q!@LqE+TCf{o&=q|dLo+>%ojWQ7+c8!uQ{-omhEM0d3$ z6*F9ajPCQ9VzME~5pD};T4Sk%nGD8a=<}h&fh>zA69S9^+yp2Bk(DS!k(3?KyH z2heQf1dstV$uzwx70l%@nZ$4y-EI^`WEjmw8jSWd7!5-M(53?bDu6h?w_3tt26Hh? z`LI{Uunqm>L$|T&(wCk3qC=OLh<*XmJoIr-d14VUg&0Ou5qU%k5fUuK8Hmsjq%?Dy zIhtfB15N6*6;G{X1E2vY03(2I93{?S#g0C06bE524lx&~2~{0=m>SY<;IHl#olm)q z^ZTC#%)NY)0jP0wv@Tic9okzM?hG_dC+^RwhI@Xp6UB=h#0R^ZcHL7j`|*Ejzbh&cfD(=lTAg+A}|IY_64~ z+uyvgZO-dyw(iA0wRGLt{mYbrnRAuK!&g4? zKM0M~&5qAIY8}4!sKI-%W%I3dIN`yQ6z{IyB_ro<+h&-oXO4DvH0@g z*3Wj{nYd$G%_obu>}^>c&@GJ-mTdUI@&s0kGHJf@gESF2+{xm diff --git a/doc/manual/spring1.png b/doc/manual/spring1.png deleted file mode 100644 index 8a222f378de25c9d0f2cb9cddbc3ae1a88460a2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 938 zcmW-gLCD)=7{?zsG;Z05Qbs<^AxaJ%1dSLWN(S+3I^#!V8D^M6VEI_k3OPi`AxOli z!4+2}haNh}Awq?S0egtjK@SCo_RvEa6$%z9vO^CQ3i}QN5gzjm-sgRJ4$trZ!vFt# zef^qt@%#(t0pQ}%JMH)C_r=qC_H2E(zrXW4z*)Hd?v1N;%hDuG5xTA;BEv9^MuQ|t zf*=Hm<#>u_35o_o<~5O1cm~Jg$7Ojk9PS2#ZJKVn-E|Z#gJAA?GuNHk_QbL(!x(8= zp(sOH&O~t_2r19^I4)t?m|;Si4jK)QqBA9lz zB_$E0fEQe@X)>%z(<0U2NRlR|MLN#Aqd{DxVczw#*y~4bFR&BOid-Xfbl*}trsC+5 zrHZB^0O$bN0JUYc zU)wFtW>}V(rWgchnkY$iifT-KYD~?j0rhkO-~pJYy1O;5COFHmig0LSDr3x?1oY0Q zHXUl^kaLT;Z@^fCk^1DHxI(NDQ$!C@L*x*lP#~9}FF=>8!`V~?M&cR*L)H>cq9g+d z02}}fK%P=^6}LJ@^(Zc2kwfN#S9sn(C)JTKBH}c<1oena_aw;lk@cUB3Hi ztJP|^;h?TJU%m8kp$Nk;5RqkBnx;vT zBnU#3IbNU`j-VJY6+xGHRbX*Ad|Z|%gTbcPTW8s--CoA=JPfD4Kk>Y=`$oM>wl+ zQs6kpQ5UQ9aT#w1;X3zMU2oBGW~ntz%yDc~p} zGh|j38A+f8p4x7=>-BoIS}m8$`FuW|PA8Mecsw2shgDUTWmyzOzu)imdfjff)9IvX znj}dSML`hwzVCUS<2bf$o2IGjx~6H0qR6r=iejVD;CVj6AlSBAE7zUb&e*h$bfd3o zU0F>XZ&)m+F^ojfJV`RdxX6b6_E9e>vZ&t<^2G1PUMF-?-;O;qa*e>&T9)b> zvaLy$D)v(^i>%Z)B3Er$lA{Zz!fO&6CteWRE#GuJ-Le(klvG`i)dpg?S=x({c0U)7 zVlH>+wnl^k)L!FqiK7wbImR)%E~+YW90F_sjsX?`Q-Co*1yBIw03Cn?AOvUuH~_U} zwO{KsP9|8Em}MA-Xjv%Bb&6_CeQHe2r~&nK3g81+r@EUZE=D-Xv5IlvV5VTgo`lRM zpjItv;gVCExNpKxha>IDKXHLrA!dj^qK?QTLZL!mhOP*0z7A(Y6Iq$3MV723ozqxzx>K*U!McBD^>FX=clxN}A zuetp3pFe*zfAEXH`0?H9^7$_gk00K7WB1!XK797>f7kB4{=@Cv51#%EsPE6e0@Rhe zpYHALHJh+g*K03b`h@=Hcer(S=ktHxdH&_69>KkfFgn=2_t*R1{8kIX{?+TvpY{&F F{2!`ufDr%y diff --git a/doc/manual/spring3.png b/doc/manual/spring3.png deleted file mode 100644 index c7b88b88af5c19c35fb11a0118655e793ad819e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1069 zcmW-gacCQL6vyA#^ki|%G|XFjLWWn!+MAp+9mfdU;jZ1ai{?si_2$kR-L>S8V@7w_ zIPZ^}JtWMa5d+3?Xv!jl8f?VOr6qr4I3ZwQod$^-Fv^5X>kQgKDTvS8;P-w%-XHJt z-jDD1U6_c7JGS?42Y?;pVEb(S;f^d)(cp3u$sZLy-_rKd86y-os8B>sjIf!u%wz9E*oMoF64FI(L(7cmsEn5 z%qAp87Xwj&mU(}eqj;7KGCqd(_IkZ;x7+D-+U<6;*=#f#^?JQlt5qtMa=BbA77K+! zE|<$@vzbgLl}g#RZCO?#k%-6Rx~^-QrmCuIw9M7I1%Mza!?f+DMSlF%Cxk&p~Q4a)kIkd ziBgak8IBJi8f$H(RTZu|Y{~RHsxK)J1_Q3v*luIBijIS(iP0$XJo^0z&;z&$&;n=x z)Bwr=1po&i1z-Uf05Jd+z?IC^tJ}qT9g9Uwr_nG_mXYIJ7r7YsxEPn=0^DjFKnIZT z_FZdZtBQ38%O>VkOoz~-)(vtk?(M|9t*ED=5Z5HAh)@#l&513LAl6K7*5Lk+%eJtg1Timl!2!I8k0Z0JPT}n>CZWv9s6jxz22TmOHg0BC$UjE75 zfm`DvPn{U6-~K+l)84!5{7aAgJW+jUXY89B_U4Bx$F@9v^u9i4`1ebA?DW46?wP-| zIsA9l+B`gdWPN$x;I>yrC!c@w?V*9sR^Gog-T(0?+K;7yJ?~w8V&L@s^9QCb99rD+ z>B9%aJ~zI+a%XO6ao@o^`!7z+jBT8Zym2ZsIDMnDP z;4*u4Y3k8)3)ANhUi|L*vuEqgnZi5vnHP3Pp80%^y7EWmzgg+X-0)s?Oq+H84CAAb Kk)@+A&i@ZH{KZiK diff --git a/doc/manual/spring4.png b/doc/manual/spring4.png deleted file mode 100644 index d16919266b9cae87bd09e1fbc6df909f78754606..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1045 zcmW-gafsV=6vrRjMvnE)>Iw^(Va1^J%(gJAhMJAwqTC$6j!tx0}Gy`vID38_{;|H_a47L-sim^ z-|z3x%r0qs-M#AoU_3rOHS5=yey43I%0kw_pSMNy$p zC=dt`1i^A)nhBC&B1nSFGg6cm7z*q4Th;1nxx7*=4)XbaHrsQYj%Bq>vuPNfrZrTx zCd&(wR1t(S&%4oRk!AA?lcVWOIGm;^nKA(zW#GMRKbZQFJ#l`>7!Fbqx8R8^H_S&}4C6nUQKIF4o6NF+kjw2i6MFq!P@ zdRx^zSy_-0B|$83LWbomhBfGjLWM<=j0Qt=AV3mcC0{RP7mDdh-Y#WRZrUt3M$XbQ zrs^27ttV2dm{bHk!Kq?Y5!h13$lFTBOxU`RRHB;1$UH4ZDJN~DEH!D$njtAFFUe6s zVmKj!Xsz_rZbMvj*##%;YN4!1SPb}DW3Pve2D&af4(d7z0*1o~Fa)>`&;@7#cmOqk z3V;ic14si{07(E1z?aO|YcRlO6RTCs=h3oIQIO+&7x@@Je2mZV0e*J|zywfk&t2(Z zw}DL;YYvt*%=4J0RxNTR73?R2T|LlJiA5Re5-f;!_QWn?4Ka^sB1(ufB2)w@aZq3( zOZ(=Gh%Cj?A(jgGBkov<2Venc01_Z@n^F>SkU+<8#Wu7{;HJQ=nC73WwJZJ~xE!B) zYHqrDTBm(sMt&(bE2l zFSCp5?>Y43Td#b3@ys)@_RNxfbZ2~G`^LF%zI6SLnRn2;ZP_pg_BubG1NSo1MvxM@~N&KRkELoL$Fy@QjZX7ByeBflMty?W!Hhflpc nc}+jJ<-Qs3@i)KT;;k9^>GcgKe&6c94dOd?O?@%>!omLmsSCM8 diff --git a/doc/manual/spring5.png b/doc/manual/spring5.png deleted file mode 100644 index 0eedf4a6fd0b2bdf117fddd71266533d22990b43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1104 zcmW-hafsV=6vy8jyXeB`?W#nK*o|yftzOiCVJjGK>BzR;mbnar3)<6o6c;2&ZdXUp z>UCI0$I9qN#UQ;=M<-QJ4N}j7<#uSrqTTHD*vhD|xlXH8JhyWwJhQ?3y~q3Gecprb zm*2siJET=B?^+1}tF~^5?DFac@7;gvaxZ^A`0|4Q%VFo}?#*5sph(I`M59qeq-omk z_md<^5CqEyn2?VO5Izdza7f}9Aw*-PvQ#cF7K^=nzMIW<(&@Hsw=An+7>;M!(oTx@+_MTg)$723IvigouDYo?>BtDI7!9`LL&%;AY=duKm@>E2QRj; zUB^}xn=aN%SaYzNLpQZlw);h^>lmG!zL3$HDW#E=Yj)JNq_Qa%4Z+dF*%+Tzxun7- zUL+H{ge&ek)Q zmNHaZmlLt5sfuw$h(&o-Fd&Ub{?wns{;b?4{e!g$?OjKfOMdU%ls0)xEs`rxy;~dCQ;Ud!AWi z4t}!Y!UH4uYXhsVJ{34NHgRz2r1{~ssYjlF_wCIi>&K^=;Uia;O>P&Da#z<5J$`)e zTSJdtd3Dv^V0+@XFAkjBAGs}k@%_xvHEZXd+cM-k{phbD=cn(Pm^``fOZC1ZwL;{`duQq{n`#}M-uBIOFSG80Q{CLg&y3fF u@qLHS4$pnnnVVhl&tt+5wf{1It-LTVo!HptzV^Nb*t&T~Le$OWa2^&BmwnVNZ#+gyg%OOz2y7N zZ~NG4VW59jKL8Ajjts4J>T>5Tnl{zR-^|#w7+@-ltz0+kv|fs&T!bi!i0JWn+-^5X zk_168te5t?C@`svb|8>un55sIplQqNH9ejvMHz0l?sA1mGDHw6LC6Fl0SEv*0Cw9r(ZE&} z8)d8)v6{n*jpY;;ty}q6FKcvcy`9pU3AJv?HB+j@#G)bOBYalpY%Q1!v2i6}%1l)9 z>w+)D(=z83Sr5lh0l(W%yL!D|r_*V-+pSis(P-3awQ99msZ>g(Qn6Uf=kvK-E|bZm z)9F+yl}IEk%Q8(f8jVIG5nb0cO;c4>Q4~p%1VP|=J{SzLEXy#A&*!6QI*O4!vQ$c7Jv>Q-`(47 zVY7@?8;dc_s+bI->6tXBZp76NyP6@grVuA3C<##D@7;+_#3Eu6QAZRIX++3zkYORk zK%92W>Ejs>OS>5l>8!YCr62$UKm$+!a`1JKC&L00lzP}{oc15etAS8uZL4xmzjIWrCX2B-u300nHS~MugCW6*z)q8 z_pd)(nU#)?dyS_~FFajawnaLW=M?|| diff --git a/doc/manual/spring7.png b/doc/manual/spring7.png deleted file mode 100644 index 98c88bcd6a6a66e9f53313c8a361825abcd0dbbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 937 zcmW-gL5SmI6vyArps^E|?hqts4pDL_nnM>+3l0V71n zxIu~*iBP3r4q2#}L(vL3ROq40F4#knf<+2jma@!B4;6Zt!yccRh3|bI-{JlK5B~r6 z&Cw0*^4?2(0C4&6y@L;`_vMRvZnwG*e*X4PfL%Cx|M+_KWoeSG6S}S=BEv8gMUf;) z5QHGH9ABqdqE3S$^P0#hJcGmGlYala*V}Zv>oi@pTFWS!2f@_yCaycS?U7}bhB45z zLQ#6MoQYyr5K^9Rb6mo*F~fv39Z-~4uQy53AqblwOoA`~GyoLp2P93RbiLoh!2JdMNN99a~ z)g?v|XpyIQuD;!F*X#9awOTHh^Z9%_olYi`@pwEO4$HFa_xnXrPQWPKBu$6`<-)06YNmLU*&o#Rw-EmJ#-BOl6Fj^MKy? z^;NUJaLB1e+&5sT!9aaFCoT|6#1zp()DSsDC=|#g=m^l_s&F<`fsr^$V8}}1X_RCD z0e}Ob0mutVuHst9sA|O-%yP(l@CwiS@4S3a?ZBh#O!;m4EHzhA7? zYWw?_POj`)qdXKfCwI&gsqbU;fJ8{Pe*epP&8ohWDZR z$`yF#^xn0@JGG-1yhpEn|1Z(1^=t6OwMRR>y?1}ufrmG@AGe=<{86O`hu3c${Pxbt G?f(Itw|^V} diff --git a/doc/manual/spring8.png b/doc/manual/spring8.png deleted file mode 100644 index ec552eebfe18578a7b21343ff6e27e563aec1312..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 937 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 q9igzY7bv!?X#}ytH`deoJ diff --git a/doc/manual/tag.png b/doc/manual/tag.png deleted file mode 100644 index 72954b2b78795d80a37a0a893b56f8f128356c85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8905 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 iAX#Jp$s$X0<^KU`XF|Tb)&_n60000zZQ# diff --git a/doc/manual/thanks.png b/doc/manual/thanks.png deleted file mode 100644 index 8cb0ad1159b40e4f1fca83255106e529a0c44699..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6951 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 diff --git a/doc/manual/thz.png b/doc/manual/thz.png deleted file mode 100644 index f4db3c59ce66c64eab6b0d2d2dfc33b6272e265c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23896 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 diff --git a/doc/manual/title.png b/doc/manual/title.png deleted file mode 100644 index e4ea963a95bc7af8d6d0491c526ea2a4c33c7055..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34519 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 K@P!xlPyP>#8Qx6* diff --git a/doc/manual/toneup.png b/doc/manual/toneup.png deleted file mode 100644 index 425973294424925218d840cc94086c58b4a1172a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1487 zcmd^8@oy7#6n~>G2h>rekkd6--2G5Yk%N?YN{JVCBgZW4=5FH{7bs9oNsds-&2)MR zWz^7N!6r1O;9&~vhe`@gETKPCtP4oNW(=sLVO5(9w24DXLSRbFo;UstU%v1Aet3DG z_enmVcd)aAZ<^aY7XX^t*R^#Sb+M5xvrWc7XP0x-C`4cThPA})+13Tt7Ew-aoaub9 zu2%(^`*0>3TF&5y)k*s(hiJ2NBr)p7V-sD$*%~qj~693FSuCV$*>MYb+RIr zbKE7J9@gx-Y>jY)>I6e;tW+?ULtRHrL$4QE7VUNfr~}*uC<7D$@&Flt6o3v81qcBc zHu3|=0ET3SUbPw)3Ybn~EQYFzqKFJ*xX6Gpo&jTE7y!m}7(f9KXZB83u$;q!ju{Py zWQ@5nWP7BNlL1TBZz+4tMTxj1K$eGL?io)kBW4g|hzcT)NFhRsg(L%U8X}ZoP6tQZ z7|Kf9%*KjmR&oQ-02BZTV4guqa#-`AW{lz(j3q%2fRa*_`;Ri?#tr=4*VXZi+YG<| zS-_I(7Z`wst?g}Vy8FiumqNSuFJC}BBu_tBy>&b4M-Oz)|MZ$rrEgT7G0-+9@30 zIWSB3c@YGjZu|KD`{SnhGXG}s`skOLShEh_Hr!cwf8wdOvU%jSd7}&8o7(nd*Rr0T zEv;AnJ@MPiVo&6!%jd||BZ<>&I=teKvrj&Q%HX*mH=vzZ^#ZLP|DNc!+|%1l*G({S zXmrEHrtNU~%(V%!Q(At^b%4`lRu1PHe{AZ1d!xPo*1jV!b^EP>BQQtU zdHA`$o6~!{?hfoB@9Y&m+%oInshxOJ{>GF$z5C=+&xWfj$nuS5^QJ4Kj~AbRJpRK= ziQM{AOL`}6UCB;|OkcET_xP}(f6-UngWZi6J61LRv-xb-vB4$xRv&6>DSf`VwuU&6 b92vKV&kz23t;aTPxDDFZcC>xnx^4e|2zmhV diff --git a/doc/manual/unknown.png b/doc/manual/unknown.png deleted file mode 100644 index a59a6c7645d451003ee3a71548e0af10b17a0409..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 502 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoPp|+9hRXR}Wk7+wo-U3d6}R5r(Dy$aAktRI z#v{<7>aAdK#Kcix)&vK&9}FBaY=%C@hKzECrlE{-j4x^#oYa0yH@xvPfT!wK&RZd# zlW`|L7rWZ-e7*C|?U|Awv*BRIGADtyM1|Srw>RWBmxXT1Uz*(6AAE3MsC22`_3$@+ ztbBb}jwx>{{5vV^!K~D~nY;z&;uaI6o_5XrCRC=zvX6UjYxhgG8+`qj3o~D`T(eoZ z{qNT;&;9kS8n6Fb{43_o@1j#*&i5u09{=)w{N&lhSw&T;k1gd^8 z*lz3|6@013-NO8u?bHJmd*>C|SH-Jtm@VCzy7qwEl)E8EnA($f-|p~IJ|CUcXy4yE z<44J7t=r*S?!;twmgnsbc{|&D<6)<3o%8pF{Qgsre11{w$;=C{7B$Yk_kDqt;z`k; zUM3qfD_+krQQX8Wv9V$QXSRKvdI?3&)9x~BSH;^Ni~Zr=zbYf%@zd*99jtG4)$XR` zh5r7tEpt_VLeXuJeP^y7dGGbF{)wCIhNW^5>JtvE)O^q4ta{hsPxVuWKe8#a6(=|_ kajF0bMtG<~7!S_>W>LELtRVE+JuQ%kr>mdKI;Vst0OyF@`2YX_ diff --git a/doc/manual/water.png b/doc/manual/water.png deleted file mode 100644 index 2d5d607e06c19ba59dbb8eb1245dde1772e40533..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28174 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 diff --git a/doc/manual/wpnpanel_auto.png b/doc/manual/wpnpanel_auto.png deleted file mode 100644 index af71f98bff842bd32831c97c07e148b602a4cea1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1399 zcmXw(4NOy46o3x`D`H$1U;@KgqDWCDMG)&0eU?&wELbS8IuOh67&fdRVnH@v5k^6j zG7wOZ)rnip2vqDw6~u>sppwuT$53$=B3Kc%Ae%TRJA1k;x%Zyjlarh;U+%f(QCmY7 z+J9gV01Lyzg2i<7qW4F3*7WJ#ZXZqut6Xtt5VQ>}o}e!_8N5gyK)ZUu>tx$EHK}3Z zNPxYb0Ll`8S9D7G2q4cF;BgYb`Xd0&*~dDg0|BfdDk4@eJ3DK!Sj=X#$z&QD8ZsJ< zeSLitMHvhRold9KYBd^7eSN)JtyZa2BuOe13b|aKk&z*lN+lABNF)jk4J8PI%jI%7 z95$QHVzHc^otaD~gTbJ?Q(Cp*c$w~qQd^a;DbJ}Z%B(C%F5MNsZ>KmfWlL6kPw{<0W?CFHsh9A|%T zNAG1!oHXHsTR7Z@x4O`%$387mjo4L#`r_G^LQ8Y5xlv}SNgb+4Fc!!3lOlX}5AU7B z{(3x@ho|DOel3=|Vjj$7!FW2{PK5qAxDW~L0yw!5>em9I1<{D8LsTQm5k-g`L?$8_ zjiA$kS`BhJh(y5Q0Fz1A=S~hwhPwEd8#%f{R%3#riqFXPrt^p<6H*jvG)R&tl_EhP zi-iCd026?bb_JjV&;Y0bNB}v26hH((0B`_U089Wh7-pKA&1&^7kmw1qeT1&Xq#gqb5D$-nU8djiF$xx(Xq{Hj%fO0R(IWvh~w zct*J{+3e)(%VfISGnh8_@l@Z~;nr))+E&?@)!Wh(!CT^e{fG|%-%?U<`N+3q#2cnJ zN&rn@qJYwXh6GXyQUZvHiJ2=`Mw^-j6pF6cSS^oN?BlcD&27!#G*XlJ;{&Yy9hJY~ zP9w%$LxMtXlZm6I*a{6xN&-azNrF@g1YtH~Z!fmC;=zNMn~P#Gu3n8UE;J3j%m4!b zKLZ>CpkKQTfS#EDgmD4b|2t#Q_Kl>`AU9~F8kI;TC*%^2gkTYDCR=!fJ5JBkM0hYS zHcVJs8@{L6*Gcf{*Q#XO@%Npq_qwP)^S%?&RO7JoVkP&z(bn<#cDyr;8yc627OiQ* z@q9u2$n|d9oW<Rj2sROq;wvf?v~Q>yc`ldEkqA6x&B zS(Uyism`|GnbIKY{i*9?WAT~YivqqP&3gT|I$qoznSLZ~SnLzwzNb>WNJ~vH$~xLcc<4Jvi8{@6n*1x-q{691ImKuha5faVb$?;^z(&0 z&%{yf^Q!%n`Q`o#Goti@p{HRM^0x`>@Yhd2;UDpPkN_&NS|8Ph$Sq?Nf z293XTD3z>u()0H}cKhB9nMzr^@?vYxs_aEqO3vp$+!BBMM9I>z!J6nx!V6}HktG3v z!PCD!oL2emc-Ea$_NuZfIBb z)(65wQw@%y1S%537`h*wqhxg!r&t8E^VuPpodaR0+gWv4a?d?ECnvdIzTA5c#H@>O zv|nNm0FI)_@K|g1vc^g~8|&`YYA>>;X$7$nVbF5(!x3vSV{2%1C_t;y;cfcNcQYB0 zvC#l~mjNis0bW~Mir)YVeF2`Q0en&m;GBQzyY+kk8;DsOFPxm5v{)==v)N=a8I4AR z!JyOWXqxWm=+J7l8jVJ+R@c(9361NpZG|2?@IYeE?Y9-05lm<|7T)Bjk6Tv109&rRq%wrN< z=K#(Ejt2urP5AgW4(afA7aH17r$M?7yN+R7*<@3ZrM|#imt#7XVLX^@D2vlm5_~a? z!=0$F!OlW#Ou(8TtZ>0X7|VmFnJ|z7`ULns8d`;LE*NTp0MUYIK-3~C5oL%HL@pu& z5ex>Ls`rctd%ib9e^ zfRD+Apt;+lKel!*}twy?+Z=p=Eq*-iO={8RNj1rS75$} zciPfrF)m9(oSc0b3^#jQ#*7EpsC#m}xmQu$oKt)>af>`WD#_QMa0Pr%Nx$c#-jfmU znBFM?G=Yf*S`BInC=y5lh>?-8>(?KiK7CUz?~0Gtgoc*+_-tY_Kk9#p^eA3|mX{^f( za1)>%;1q!Mw&ws?U(A2PcmVAGo!MIL8z@7EtV2zzDrJtxy+LzKVjP_>crWv{idq#W;{Q}OD4VJ+G zRlZBp{Er>3pPKqB{ifrHf8V*%VPTTi$Rq|T(w*3%u*j1Q8&7<*+}%_3$je?{YOxt# zG?(EUGo1TD{_eIT#U!|z%UYQ0OrvjN=Z>cwTuu)4x3{~gcC8Mb=dRmvXQQcWNR;m7 z^}P4gS`}2BbrMeB_En}ZV9^&cr<798WU-H)OSE*adeM18STbOltjxGqpldzu>1r6+ z=|qJCOYAJXuQ6?}SUx8J2^!&~3-z@z-}+2>z-U%2|*cj8L+&nqs@at$6^Ja9L+#1tH8 z+>_<${-a*HmvB(Y#vk6v%i^obH=mI#CT{66e)(YG`Mr-Hs?1aF+@qHkK1tKu zaAR(2>m4)2$6KJ=a5$OkMX= z9hWEny}Q#Za(CeD^G&Vn%V$!r4KVqU#+>p#o7zzy&KTdKHTO@pj9!}qGUkL0#VVsB a1y`wiTGgrzFhpB_NDv9vg|~#Iefck)WS*7) diff --git a/doc/manual/wpnpanel_explosion.png b/doc/manual/wpnpanel_explosion.png deleted file mode 100644 index f3bd45decb7f51d119f8cc5a6e940ae596efeeb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1359 zcmXw(4NOy46o3x`mQhWex&h)S6GJup6hWyd`lv-qsrax^s~~I93Bg*6V$&hhR+&^M z@)$o>K`a?caR#aqSApr%_=66iI-PYvR-Ds{Ogl#=+r*qbU6$N?PwvS{&X+Iu+F3Ryp{M;NOz{pPx7+1%Ih{_2 z!_nQ{P1Cg9ZnxQNR;$%wv6#(filR&=lfhun>-Ac#Ha|aKsZ=Ty3X&wnVlhDw0)c?f z=ks_xE|(h+5WwMZSS%LPowic;#=W*fMr-9~mVH|e?kcD#&Mn)TwR59Pw=PwawPZua z!W?N_rYK^0;!IIoFkK>TFA|^Bikj3!{rZKJQeaZV88Y~KGD0opDMeu!1Xn5uCinqy z5mO?)LP0Pq3002~0c+eez3+!WPcQqrSV)7jbWBxxmx zifAa~!Ol?71%YNVY+yrK*6YUFR`usqt3TBzr)I^(5+4D+qom*Q8Qzf*Z<*dI z0d#?j2HFA^0~nN`B!Czi8o6@iVM9ZoUf-3OX%z}fqodab2haWSCDOzA%_FQGK;u2! z=s@{(Bxn>gxcC&!(_6So1JE=W44_m3LAc#`?HabWVtF|h6`@RqbLL=RAVb3}H$Wf2 zS%4z|%xhNzFcb5iFaZGXe`hSlzQf?KYwZ@L#YCF4gjT^<5L|-C;Ykk(9y2p_Ns=tg zOp(^suGw4~GbyPxRsO-eR4>YYs-ZDK__xaBIWs+sUfZmHUO87)oxIh}&O5s3)u!<3 z~m~AN|c(c648Cl{;Q_wEF8) zUi){~9G|%Q;ITH%#m?}wc3%f)ReY~^%wkuQ-?z{6N|R=v7&~xABXMfBnal++?nWU%t&o3NRxq>?@yDA=?3yC9t8olDPBk4<-LwDk?AgM5L?jBD*s!C`eo;OBRk)49;(3?~!(7=1vt)E*`wSZkpKJhjZ5=QWmN%WmNugwZR4z zq%i$q?}xrHth;q~r@Hy@FDb0vY*Xj#SF@*^`$JoN69+FkN7y&}#?>8uZ>I5F!^@{D z-+$WpNuK}Z$hKue3znb!KJBn%j$WABa}`Kac*RlU8duq&Weq-AE*^9aNI8{-9u{|ClFozxag!ywovUEjq J+Y;68e*wU$O4|Sc diff --git a/doc/manual/wpnpanel_grenade.png b/doc/manual/wpnpanel_grenade.png deleted file mode 100644 index f0e18fa08bfa338c5524def0b0de8ebb1e966398..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1455 zcmXw&3rv$&6o8Kis}JxO1q(857YN0n6alGD+z*smd08l}-FU1ZG8Dw>np$4kDr$Yr zGLhm0EDi);P=!fV)L$dB43rulV~AP_n#$Z{1RcK5eqEN_b5G96N$!^~_v}bmDs-7J zeF6ZuL@$XF)7g)X&&Q3W?|+^QO6W93DHcXTQ}?HXbm5pC5g!3?N<3`3tvZ(&1~3*9;v|C6(b1uyA-mmfv)OujdaPEf z#bTi-%4{~9Os0m02BXnfQBk4S>vcMvMx#-y)e40oJ3Cu0m&;@_kw_#I3Q3aW@pxP= zm&4((SS%)!Ne~2s!JuEK8uaFx?WXeNieg)o!s7~lZ7x}vxlk|X>14s0B(7TIpDX0Z`QAw+E0*U)a+$&Y zQ~kXOd}_miTi9p8TWx4EhVGJi-u~I_R3saS!U0!6l+ORmqvuo?%}<& z*j0gNRd_^-6`{Dz6IC#h2amJh_cZ8|!o_$vC4jm`P!S4|BhYtaB;?sh~!IQ;*-4Cnjn7ZoG`85ytUqQ z(r5Z6c+L!WV+Ilgdjf-Se1JzRkM=coXv-UOi}!xDLLC*892i8-0Q^WvedN=8BqKjC zeNX~u0~-aD5sVtp$U#m5IXF1d-riqb-K|!)NhA#s5hVcusa{?ocZQLAipK`9{61=b z!yGG0JCLN1S8e0!DURC6l52pXK%)V<97xh`$E#Pdu@QIgMx_$PVw^h{Jv?X{`q%-w z0Zs!{0nooa7l7WF|Ag@XIR86i(Dtnwt65<-%8fdaPC+VUTp7tCIRqzmKkqSs!)MV^ z5t8|$>hhGmm4TB5r-_o`+wGq`U+xsX)$D=8CtJ#Tr5DTcs~R6qa1513vj+*E7~QS| z7jrt^TxAk?1ww zdt-U)!MoctRy_Fmr(-+)=51;nI{R$a{EdYR&L2$edQmL*XkNCnCSjoZ`cYHji6q;| z^Go?5O=AkRhIA;t>azFb5rmDJk`=fn9uFi8y;rf&s zPT;q3N>|DHME2z!565p2UAsStTehjU+5QG2XNE0|Vl~BE+;6mgq7688;qdAl zv9|Sv#qFKzjN;DMR__BZ3kmM~+Fr$*4XfX>E}%o$ZLwg%AsxL^0MUY_QB9HQoBsvn C41Rh5 diff --git a/doc/manual/wpnpanel_rail.png b/doc/manual/wpnpanel_rail.png deleted file mode 100644 index bf0822360903e25dbf24d6bc40d06275ef83c22f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1489 zcmXw(3rv$&6o3x`tKwK4vQ?;~Ou?cE#TWH~{QefGZ>{O^SZ==FPysfYa%8I2@gwop!t3 zX0y>WZM9m>X0yp;G8&BrgF&y?>vTGbqBI(fTCL8?$|6ZpsZ`44a;a2G5QI=D6bJ-- zKA*?qaX1_{o6TaenA2&K-delOT%|Sb{>iv~L*1xWlaUrQ))?_il|<_Ku-#F%2`yRKqC)UN%^E?aw5T#3Au!TGb?y} z@MJdjJFw>_cG>V|3)-8|W6=r<19b(?YL#Q(>du{M_R_>QN{%n?;k~oi zX27$Bcp@1M;aKK_g)o={y_s-#CA1~O`8cpd!_kFc2nWOgL_4AxQIDublp_id*@$4b zgV_vvJ*d?nmxDk6Y&J7r(BGx(Y>`~77MP29)oJ5(5>`Pl(?@hTkfzaSM2bR^M1nvb z4*>=M8~}F46@VGQ2%ra`0Mq~^fE<7T5CHH1*Z^p?4%XE<_4=;j;x?6vPD^W&%S{Ba zD-_E3u-P99eIUmRGRMM7cSr`%pgiv{S@wg)>DNT5tr3bwp{#bMWOqn}HfT=XGKoZ`p`qV#xwCJ-M7keO_F%<*)ZW2$ zc1*s41dYN&4uPKLYm7XS0-6Sj0+IxRa60kwWvs8q@^UOFK!pNl%)ki~7#e0d0XhKA z0Mr05w_OFmyqN!l2?6;3J7Y2S?UdcBwi-#JPOeiEYNbF)@CZJeFRK#v0*sQxM2V7? z$SNvid#l67m95BH{miG>Uz}I+a?GQxF5GipJUG=Zp3511bXt5_?6GI>QUV@*p0^`r zTBdw#Y0=$ZZ>-&Vix)EFcv|^7U~YiuMa)6F^LVCUqV4^YqQe8M3%-lTy_t##QRd1cwLm4TyDD>J$#)#k`{Mze1XajDR+_x8;0ALhGSN{)9P?OD>$ zHGN-R>8%Lbr8$?oR4m>bL0nVmp<($@{^@sqUi0ibxewL_7IphvGR+ZPe zc%*Krcwo3zSYB8@vtm>H`Ip>R38@F$f0)^3m0sWMc9p&~CxvVZ|3ehA{PHWlhbKCNZ?kjRXutK7Lj~QcK_;B%jqkPIf>4ckoy8QMvP50OT_~CH; mS$C~p@I(d{l#YRms0>vy7?$ diff --git a/doc/manual/wpnpanel_scatter.png b/doc/manual/wpnpanel_scatter.png deleted file mode 100644 index 497f1abe1421f6d0cde6916548a939345e8b1d03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1370 zcmXw(4NOy46o3zktD>f6;wnE{CP-mS3xXC0^I2LfQn6BCo&5M{pFS9lXM&SjE{TAae$Qbhan2IP2m#LMXHKR~V{)(b zD0vLP$G!mCeE|P3CG7)%{6K(*sQ~ZQ0C2V)KNlMgFcmhei;tX`m>3%yb2uD!yWM89 zS*_Ndo*tT}Ef$N}Y&Mxp27{rxx>~Q->vTGbqBI(fN~Oxm$|6Zpp-{+VGKoY&5QIP= z;Pd%B9*@iAayT3|o6TaenC`SmZ!vymuF;wf?J|_+Rqf3=xI3+6d*Yrg^8AmYa}y&n zTjuU=O-L+NPGAQi&RsL|uBAo)qX5!BiYyBMVSUc%;ZXj^IiK9t58g z956S)n~fuOyn77?dhl8YTHCP4gmfKt9Kp7tiBkn*jcP}o(tae}R+eNfitD9hI68=f z?but5?fG~z0jpPFi5up_crFZO!fz?in*cw=z?n$+{C%ii0f=LWRzx$R9#MrTL*yf} z5y5H&vl;YyP^myB13n+vZ05dtWI$o-5Ovn^%>~@Lq`5i~OC7+}5$$%QX*3v+qL3t! zAdt&NfH43&fR%9tUbsMln~ zE2dXU0PSF>fi{4F0*VBZ0AhG}ysPVWeSN=1(-9wU5(3t zKfpHt#{rnvt^{Bv=09Nq0N(%3Sd4uuWwod*2GXFD=~RSD!B-Gmg2(1bYXn2gO!ci5 z3*$p&^_9x)MP9DOzenv@@}#(CGVYgApWe3YzOSyT`Ez2!u2&uFoAWGmkfX>WR(7%0 zR16irJJOW%_11y2Bj?UuKbPa4aCwpSs&k*={88u1rWT8b|I-&)?38AeMfrtKNSu6K zh0iKat+@6}UGl7`jEy^I-QVc@IGk|0-|n~n$Gz4UdmX(kmrl%)M>j|sgMM~DQ113< zSRNf)wcjzG?p{8(wJ@V3uXcCSWx3yl)R17eWZ7VP!{1fW{(Hq6BNxT2u1%YgHP7jL zq4Z$)XxEvbzLcj%-tLh*p;;j=;_T-75?-3g@!chD#FfLHo}U~j92;0ZC6>48a5689 zwXgWw#iz9&7@sV7P*OHSypo=`G8#-Q=gwObDXdnu(6=-x^QGia;N(uPoAQ&{LuY*& zy1U)V9$jpZC>N#=3?`>mCH*8&YH*|XJJyFGKa&z7vq5ZnW+)e6) z&9|~`j-L*%h<@wzuF=Vq$F~a|F*_E=+Ftr!>A&OWxM4Rwbl0D{C+cm|&lqSAZ<$a( zDHArdX2dwThG-LVPoq(KT;*@7bv3GA1VvI}7G4Oo6#MQO>@1@~o~sS|BlgDU0?Q+4 UC8?dynC}PHMy?mPM5KQDFG;UltN;K2 diff --git a/doc/manual/wshield.png b/doc/manual/wshield.png deleted file mode 100644 index 20e3cf3445255adc7d97facc1b0f4c745aabab5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1400 zcmd^8@oO7(6o1{2n~gPttVDa3Y&}?@2y}BzL^VCdFjc{e@cEyN? z%WQ^W1i7(n&F~nv5oV?tR*f1kZjnuwvAAX!U0^|?bdW*Sio>n=L!a0E8$Q18`+j)5 z&-=jV^A3)U3SFH&odD1^GCa7$sq3BWTeI5v@13BpIE9!R**--4yvDQ6(_`%PUs~x* z4)4?fI{#Y9j;&|v~nwDymvml#(nLL~&LSavYZp2CYCK!!RaI zrzk4n^TkOr=Jo0xkLGqqT&^%dCvrmMtu$v5>fv zHx{#c+tONTwUJV438@+v%SNc63;8IY)i_HHnqf962jUVF6KPHGhj~ikd?A+P7;k{~ z(3E>|ak1TQw_2@cvstg#tJP|yQYn|q#bU8gDCG0`TrOwZb|#Zar_-raDv?OUQ50F0MNt$4f#>;PFvzkj!!UlopQ5N3Mx%?7NGlw!$x2z2W`&T=@oAPz zFsx29D&?0*AMf=B+#bs1@)G5oS+tY0nRw2O*~zFC*V2ZX(v^fJ8>$!!hoUkck+^V( zmHB|gF?K>VV^Ts3#ll=f3Mc|C1}Q#38gVtM%MndfR6&x1f*9Zgn&te6`a)A~l=ur4 zGi&%P#gpU-od!p1Y&Nk}Ld!zKz;GBj4t+iZSOk~{XaH0J$^Zp`9DoIo0*C`RHi`f! z0FGpiUhOtkDwxlsX`-&9Bq7T>E^=U;=fF4^4uCVA0MG!WmAwm1Y?QEKVZp$xf@Too z&@AAY3Vgb=a)DQ(k3K4P~*es+ONK%eD{X9dml!qZ* z&WgKM3IZ?y6o41NwSr>v*bbrLjA9LHHds;6a+>!0t-^KZ29~CFjNaw8!tZ|;@bKJM zEI*8&H-`Vi% zr`~(;&GQovO!~jw*!S=5wOJ@n&3E6}{P^Laj#qn5c0G3Gr(c&&?>)0Wb1i#Lv6k6%P`nQrbswQBcP*RJPA$P>LC+fu#j=grB@2M=vn?)ZYZ$z1*52C=m7%6+Ht=>i%wQ#y0m3|NZ^mvi8)*Y~O*;w>5^7Q`+(E z&un_+@}qwCl_S$fUeo^=EWUK`$xBnUx#wduAN5{aw%>hv)69*}%KKk%_fvEImRwT zLcqF?2ubGyKl>y0XMIGo>~MLfXRbX``k9@_xQbpD2j*}2n2jS zpU2}N2!dvUB<1x739la{mJ-4wM+LB4zF8<-&*gfVOxLzM$z^_r$tRkflh zB}pm@LZ0JtEbD~B8Je~!Dn*i3FqjAg;(ov3^XXo1)Z>W|gh~)HK}Y}s01tq@4qk0y zyN1mQHcD8_W7WY*8cWvAg4xd*T}SVvwN^@PSaLlfRZX#E2!$A*(>X_D?Ff@p!U>s< zOO!5zB0MQ`L6He?v_DMwDAL>S_q*M0r_*V-+s$UPUa!|`wQ99mE|*KCQlU`D=kwWY zHj~Mu)9F+yWm#4tk%-6Ru~H>XNDnvcd{d zm=h?53n3c4w$iHb7ah821|8Lx5gIp8d-2+pyze{&+DZt0IPiC zV|%7vxbjZ(*F|gdx}oXy#ew7Z|8U7WdiKJZtuKH0`o{ya^WQhw1G|2s=5L%D{p!gr z+lJwS4^|!eYi#cPf#08d`?JBnCr>@Qu6KC2P@ zd~EtOKc5-dxbysX^75{O2fv*j&fV1Jx4-mFaAjp;?$v)*|MI{>cK5NjaG|@CT=+M& zcW9_r+_X469HfX>zC5XI7LQ+E7@dB4P2 z_B`I*k-K#C=*1)3Cr`h4?!Dz=X3Kq#EE%mYmQJ5Jarjns==N4;eeFM(U79XV*-!m^ zIe+cM*J6?V>HUwM`23UR%IaeIn)k;REZ_6crw`wl**JL3{UTs|-^AFtz0-651B)iu AX8-^I diff --git a/readme.txt b/readme.txt index f96d3823c..8a09f0bc5 100644 --- a/readme.txt +++ b/readme.txt @@ -1,4 +1,4 @@ -Here it is! SRB2 v2.1.11 source code! +Here it is! SRB2 v2.1.12 source code! (why do we keep the version number up to date when everything else in this file is hilariously old? - Inuyasha) diff --git a/src/blua/lapi.c b/src/blua/lapi.c index 2d837057c..73fbbf561 100644 --- a/src/blua/lapi.c +++ b/src/blua/lapi.c @@ -319,21 +319,6 @@ LUA_API lua_Number lua_tonumber (lua_State *L, int idx) { return 0; } - -LUA_API lua_Integer lua_tointeger (lua_State *L, int idx) { - TValue n; - const TValue *o = index2adr(L, idx); - if (tonumber(o, &n)) { - lua_Integer res; - lua_Number num = nvalue(o); - lua_number2integer(res, num); - return res; - } - else - return 0; -} - - LUA_API int lua_toboolean (lua_State *L, int idx) { const TValue *o = index2adr(L, idx); return !l_isfalse(o); @@ -446,14 +431,6 @@ LUA_API void lua_pushnumber (lua_State *L, lua_Number n) { } -LUA_API void lua_pushinteger (lua_State *L, lua_Integer n) { - lua_lock(L); - setnvalue(L->top, cast_num(n)); - api_incr_top(L); - lua_unlock(L); -} - - LUA_API void lua_pushlstring (lua_State *L, const char *s, size_t len) { lua_lock(L); luaC_checkGC(L); diff --git a/src/blua/lauxlib.c b/src/blua/lauxlib.c index c43cefd1e..db7d9d0d5 100644 --- a/src/blua/lauxlib.c +++ b/src/blua/lauxlib.c @@ -186,20 +186,6 @@ LUALIB_API lua_Number luaL_optnumber (lua_State *L, int narg, lua_Number def) { } -LUALIB_API lua_Integer luaL_checkinteger (lua_State *L, int narg) { - lua_Integer d = lua_tointeger(L, narg); - if (d == 0 && !lua_isnumber(L, narg)) /* avoid extra test when d is not 0 */ - tag_error(L, narg, LUA_TNUMBER); - return d; -} - - -LUALIB_API lua_Integer luaL_optinteger (lua_State *L, int narg, - lua_Integer def) { - return luaL_opt(L, luaL_checkinteger, narg, def); -} - - LUALIB_API int luaL_getmetafield (lua_State *L, int obj, const char *event) { if (!lua_getmetatable(L, obj)) /* no metatable? */ return 0; diff --git a/src/blua/lauxlib.h b/src/blua/lauxlib.h index 032041052..c5ea45a1c 100644 --- a/src/blua/lauxlib.h +++ b/src/blua/lauxlib.h @@ -54,9 +54,8 @@ LUALIB_API const char *(luaL_optlstring) (lua_State *L, int numArg, LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int numArg); LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int nArg, lua_Number def); -LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int numArg); -LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int nArg, - lua_Integer def); +#define luaL_checkinteger luaL_checknumber +#define luaL_optinteger luaL_optnumber LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg); LUALIB_API void (luaL_checktype) (lua_State *L, int narg, int t); diff --git a/src/blua/lua.h b/src/blua/lua.h index a945fcb5c..4e26c2a79 100644 --- a/src/blua/lua.h +++ b/src/blua/lua.h @@ -100,7 +100,7 @@ typedef LUA_NUMBER lua_Number; /* type for integer functions */ -typedef LUA_INTEGER lua_Integer; +#define lua_Integer lua_Number @@ -144,7 +144,7 @@ LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2); LUA_API int (lua_lessthan) (lua_State *L, int idx1, int idx2); LUA_API lua_Number (lua_tonumber) (lua_State *L, int idx); -LUA_API lua_Integer (lua_tointeger) (lua_State *L, int idx); +#define lua_tointeger lua_tonumber LUA_API int (lua_toboolean) (lua_State *L, int idx); LUA_API const char *(lua_tolstring) (lua_State *L, int idx, size_t *len); LUA_API size_t (lua_objlen) (lua_State *L, int idx); @@ -159,7 +159,7 @@ LUA_API const void *(lua_topointer) (lua_State *L, int idx); */ LUA_API void (lua_pushnil) (lua_State *L); LUA_API void (lua_pushnumber) (lua_State *L, lua_Number n); -LUA_API void (lua_pushinteger) (lua_State *L, lua_Integer n); +#define lua_pushinteger lua_pushnumber LUA_API void (lua_pushlstring) (lua_State *L, const char *s, size_t l); LUA_API void (lua_pushstring) (lua_State *L, const char *s); LUA_API const char *(lua_pushvfstring) (lua_State *L, const char *fmt, diff --git a/src/blua/lvm.c b/src/blua/lvm.c index 17764846e..a921d4437 100644 --- a/src/blua/lvm.c +++ b/src/blua/lvm.c @@ -323,7 +323,7 @@ static void Arith (lua_State *L, StkId ra, TValue *rb, case TM_SUB: setnvalue(ra, luai_numsub(nb, nc)); break; case TM_MUL: setnvalue(ra, luai_nummul(nb, nc)); break; case TM_DIV: if (nc == 0) { lua_pushliteral(L, "divide by zero error"); lua_error(L); } else setnvalue(ra, luai_numdiv(nb, nc)); break; - case TM_MOD: setnvalue(ra, luai_nummod(nb, nc)); break; + case TM_MOD: if (nc == 0) { lua_pushliteral(L, "modulo by zero error"); lua_error(L); } else setnvalue(ra, luai_nummod(nb, nc)); break; case TM_POW: setnvalue(ra, luai_numpow(nb, nc)); break; case TM_UNM: setnvalue(ra, luai_numunm(nb)); break; case TM_AND: setnvalue(ra, luai_numand(nb, nc)); break; @@ -494,7 +494,7 @@ void luaV_execute (lua_State *L, int nexeccalls) { if (nc == 0) { lua_pushliteral(L, "divide by zero error"); lua_error(L); - } + } else setnvalue(ra, luai_numdiv(nb, nc)); } @@ -503,7 +503,19 @@ void luaV_execute (lua_State *L, int nexeccalls) { continue; } case OP_MOD: { - arith_op(luai_nummod, TM_MOD); + TValue *rb = RKB(i); + TValue *rc = RKC(i); + if (ttisnumber(rb) && ttisnumber(rc)) { + lua_Number nb = nvalue(rb), nc = nvalue(rc); + if (nc == 0) { + lua_pushliteral(L, "modulo by zero error"); + lua_error(L); + } + else + setnvalue(ra, luai_nummod(nb, nc)); + } + else + Protect(Arith(L, ra, rb, rc, TM_MOD)); continue; } case OP_POW: { diff --git a/src/command.c b/src/command.c index baf97cbd1..09588eb84 100644 --- a/src/command.c +++ b/src/command.c @@ -1055,9 +1055,22 @@ static void Setvalue(consvar_t *var, const char *valstr, boolean stealth) if (var->PossibleValue) { - INT32 v = atoi(valstr); - if (!v && valstr[0] != '0') - v = INT32_MIN; // Invalid integer trigger + INT32 v; + + if (var->flags & CV_FLOAT) + { + double d = atof(valstr); + if (!d && valstr[0] != '0') + v = INT32_MIN; + else + v = (INT32)(d * FRACUNIT); + } + else + { + v = atoi(valstr); + if (!v && valstr[0] != '0') + v = INT32_MIN; // Invalid integer trigger + } if (var->PossibleValue[0].strvalue && !stricmp(var->PossibleValue[0].strvalue, "MIN")) // bounded cvar { @@ -1134,13 +1147,13 @@ found: var->string = var->zstring = Z_StrDup(valstr); - if (var->flags & CV_FLOAT) + if (override) + var->value = overrideval; + else if (var->flags & CV_FLOAT) { double d = atof(var->string); var->value = (INT32)(d * FRACUNIT); } - else if (override) - var->value = overrideval; else var->value = atoi(var->string); diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 659dac1d0..e24a1426a 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -2921,6 +2921,12 @@ static void Got_AddPlayer(UINT8 **p, INT32 playernum) displayplayer = newplayernum; secondarydisplayplayer = newplayernum; DEBFILE("spawning me\n"); + // Apply player flags as soon as possible! + players[newplayernum].pflags &= ~(PF_FLIPCAM|PF_ANALOGMODE); + if (cv_flipcam.value) + players[newplayernum].pflags |= PF_FLIPCAM; + if (cv_analog.value) + players[newplayernum].pflags |= PF_ANALOGMODE; } else { @@ -2928,6 +2934,12 @@ static void Got_AddPlayer(UINT8 **p, INT32 playernum) DEBFILE("spawning my brother\n"); if (botingame) players[newplayernum].bot = 1; + // Same goes for player 2 when relevant + players[newplayernum].pflags &= ~(/*PF_FLIPCAM|*/PF_ANALOGMODE); + //if (cv_flipcam2.value) + //players[newplayernum].pflags |= PF_FLIPCAM; + if (cv_analog2.value) + players[newplayernum].pflags |= PF_ANALOGMODE; } D_SendPlayerConfig(); addedtogame = true; diff --git a/src/d_main.c b/src/d_main.c index bf1bc7330..4cea94a81 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -1087,14 +1087,14 @@ void D_SRB2Main(void) #endif D_CleanFile(); -#if 1 // md5s last updated 8/05/14 +#if 1 // md5s last updated 11/10/14 // Check MD5s of autoloaded files W_VerifyFileMD5(0, "ac309fb3c7d4b5b685e2cd26beccf0e8"); // srb2.srb/srb2.wad W_VerifyFileMD5(1, "f39b6c849295e3c81875726e8cc0e2c7"); // zones.dta W_VerifyFileMD5(2, "cfca0f1c73023cbbd8f844f45480f799"); // player.dta W_VerifyFileMD5(3, "85901ad4bf94637e5753d2ac2c03ea26"); // rings.dta - W_VerifyFileMD5(4, "3d6cfc185fd7c195eb934ce593b0248f"); // patch.dta + W_VerifyFileMD5(4, "a45cc59d13dce924f2112b3e4201d0ae"); // patch.dta // don't check music.dta because people like to modify it, and it doesn't matter if they do // ...except it does if they slip maps in there, and that's what W_VerifyNMUSlumps is for. #endif diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 5e81a5a55..377da8433 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -164,6 +164,7 @@ static void Command_Archivetest_f(void); // ========================================================================= void SendWeaponPref(void); +void SendWeaponPref2(void); static CV_PossibleValue_t usemouse_cons_t[] = {{0, "Off"}, {1, "On"}, {2, "Force"}, {0, NULL}}; #if (defined (__unix__) && !defined (MSDOS)) || defined(__APPLE__) || defined (UNIXCOMMON) @@ -1345,26 +1346,34 @@ void SendWeaponPref(void) XBOXSTATIC UINT8 buf[1]; buf[0] = 0; - if (cv_flipcam.value) + if (players[consoleplayer].pflags & PF_FLIPCAM) buf[0] |= 1; + if (players[consoleplayer].pflags & PF_ANALOGMODE) + buf[0] |= 2; SendNetXCmd(XD_WEAPONPREF, buf, 1); +} - if (splitscreen) - { - buf[0] = 0; - if (cv_flipcam2.value) - buf[0] |= 1; - SendNetXCmd2(XD_WEAPONPREF, buf, 1); - } +void SendWeaponPref2(void) +{ + XBOXSTATIC UINT8 buf[1]; + + buf[0] = 0; + if (players[secondarydisplayplayer].pflags & PF_FLIPCAM) + buf[0] |= 1; + if (players[secondarydisplayplayer].pflags & PF_ANALOGMODE) + buf[0] |= 2; + SendNetXCmd2(XD_WEAPONPREF, buf, 1); } static void Got_WeaponPref(UINT8 **cp,INT32 playernum) { UINT8 prefs = READUINT8(*cp); + + players[playernum].pflags &= ~(PF_FLIPCAM|PF_ANALOGMODE); if (prefs & 1) players[playernum].pflags |= PF_FLIPCAM; - else - players[playernum].pflags &= ~PF_FLIPCAM; + if (prefs & 2) + players[playernum].pflags |= PF_ANALOGMODE; } void D_SendPlayerConfig(void) @@ -1373,6 +1382,8 @@ void D_SendPlayerConfig(void) if (splitscreen || botingame) SendNameAndColor2(); SendWeaponPref(); + if (splitscreen) + SendWeaponPref2(); } // Only works for displayplayer, sorry! @@ -1798,7 +1809,6 @@ static void Got_Mapcmd(UINT8 **cp, INT32 playernum) if (demorecording) // Okay, level loaded, character spawned and skinned, G_BeginRecording(); // I AM NOW READY TO RECORD. demo_start = true; - metal_start = true; } static void Command_Pause(void) diff --git a/src/d_player.h b/src/d_player.h index b0484f0a1..b9fcdef75 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -151,6 +151,7 @@ typedef enum /*** misc ***/ PF_FORCESTRAFE = 1<<29, // Turning inputs are translated into strafing inputs + PF_ANALOGMODE = 1<<30, // Analog mode? // free: 1<<30 and 1<<31 } pflags_t; diff --git a/src/dehacked.c b/src/dehacked.c index 334179ace..ccb7248e3 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -7273,6 +7273,7 @@ static const char *const PLAYERFLAG_LIST[] = { /*** misc ***/ "FORCESTRAFE", // Translate turn inputs into strafe inputs + "ANALOGMODE", // Analog mode? NULL // stop loop here. }; diff --git a/src/doomdef.h b/src/doomdef.h index a978e047b..a9e18eaf6 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -144,8 +144,8 @@ extern FILE *logstream; #define VERSIONSTRING "Trunk" #else #define VERSION 201 // Game version -#define SUBVERSION 11 // more precise version number -#define VERSIONSTRING "v2.1.11" +#define SUBVERSION 12 // more precise version number +#define VERSIONSTRING "v2.1.12" #endif // Modification options @@ -428,9 +428,8 @@ extern const char *compdate, *comptime, *comprevision; // Compile them at your own risk! /// Max recursive portal renders -/// \note sadly some additional work will need to be done -/// before anything > 1 will function correctly -#define PORTAL_LIMIT 1 +/// \note obsoleted by cv_maxportals +//#define PORTAL_LIMIT 8 /// Fun experimental slope stuff! //#define SLOPENESS @@ -453,7 +452,7 @@ extern const char *compdate, *comptime, *comprevision; //#define CHAOSISNOTDEADYET /// Polyobject fake flat code -//#define POLYOBJECTS_PLANES +#define POLYOBJECTS_PLANES /// Blue spheres for future use. /// \todo Remove this define. @@ -493,4 +492,7 @@ extern const char *compdate, *comptime, *comprevision; #define CLIENT_LOADINGSCREEN #endif +/// Experimental tweaks to analog mode. (Needs a lot of work before it's ready for primetime.) +//#define REDSANALOG + #endif // __DOOMDEF__ diff --git a/src/doomstat.h b/src/doomstat.h index 3cf70e463..b05b3833c 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -165,7 +165,6 @@ extern cutscene_t *cutscenes[128]; // For the Custom Exit linedef. extern INT16 nextmapoverride; -extern INT32 nextmapgametype; extern boolean skipstats; extern UINT32 totalrings; // Total # of rings in a level diff --git a/src/f_finale.c b/src/f_finale.c index 103c7df31..f541995d4 100644 --- a/src/f_finale.c +++ b/src/f_finale.c @@ -958,29 +958,30 @@ boolean F_IntroResponder(event_t *event) // CREDITS // ========= static const char *credits[] = { - "\1Sonic Team Junior", - "\1Staff", + "\1Sonic Robo Blast II", + "\1Credits", "", "\1Game Design", - "\"SSNTails\"", "Ben \"Mystic\" Geyer", + "\"SSNTails\"", "Johnny \"Sonikku\" Wallbank", "", "\1Programming", - "\"SSNTails\"", "Alam \"GBC\" Arias", "Logan \"GBA\" Arias", + "Tim \"RedEnchilada\" Bordelon", "Callum Dickinson", "Scott \"Graue\" Feeney", "Nathan \"Jazz\" Giroux", "Thomas \"Shadow Hog\" Igoe", "\"Monster\" Iestyn Jealous", + "Ronald \"Furyhunter\" Kinard", // The SDL2 port "John \"JTE\" Muniz", + "\"SSNTails\"", "Matthew \"Inuyasha\" Walsh", "", "\1Programming", "\1Assistance", - "Tim \"RedEnchilada\" Bordelon", "Andrew \"orospakr\" Clunis", "Gregor \"Oogaland\" Dick", "Julio \"Chaos Zero 64\" Guir", @@ -993,7 +994,6 @@ static const char *credits[] = { "Ben \"Cue\" Woodford", "", "\1Sprite Artists", - "\"SSNTails\"", "Odi \"Iceman404\" Atunzu", "Victor \"VAdaPEGA\" Ara\x1Fjo", // Araújo -- sorry for our limited font! D: "Jim \"MotorRoach\" DeMello", @@ -1001,6 +1001,7 @@ static const char *credits[] = { "Sherman \"CoatRack\" DesJardins", "Andrew \"Senku Niola\" Moran", "David \"Instant Sonic\" Spencer Jr.", + "\"SSNTails\"", "", "\1Texture Artists", "Ryan \"Blaze Hedgehog\" Bloom", @@ -1010,8 +1011,6 @@ static const char *credits[] = { "", "\1Music and Sound", "\1Production", - "\"SSNTails\"", - "Michael \"Spazzo\" Antonakes", "Malcolm \"RedXVI\" Brown", "David \"Bulmybag\" Bulmer", "Paul \"Boinciel\" Clempson", @@ -1021,12 +1020,12 @@ static const char *credits[] = { "Jarel \"Arrow\" Jones", "Stefan \"Stuf\" Rimalia", "Shane Strife", + "\"Spazzo\"", "David \"Big Wave Dave\" Spencer Sr.", "David \"Instant Sonic\" Spencer Jr.", + "\"SSNTails\"", "", "\1Level Design", - "\"SSNTails\"", - "Michael \"Spazzo\" Antonakes", "Matthew \"Fawfulfan\" Chapman", "Paul \"Boinciel\" Clempson", "Desmond \"Blade\" DesJardins", @@ -1038,12 +1037,22 @@ static const char *credits[] = { "Thomas \"Shadow Hog\" Igoe", "Erik \"Torgo\" Nielsen", "Wessel \"Spherallic\" Smit", + "\"Spazzo\"", + "\"SSNTails\"", "Rob Tisdell", "Jarrett \"JEV3\" Voight", "Johnny \"Sonikku\" Wallbank", "Matthew \"Inuyasha\" Walsh", "Marco \"Digiku\" Zafra", "", + "\1Boss Design", + "Ben \"Mystic\" Geyer", + "Thomas \"Shadow Hog\" Igoe", + "John \"JTE\" Muniz", + "Samuel \"Prime 2.0\" Peters", + "\"SSNTails\"", + "Johnny \"Sonikku\" Wallbank", + "", "\1Testing", "Hank \"FuriousFox\" Brannock", "Cody \"SRB2 Playah\" Koester", @@ -1060,9 +1069,12 @@ static const char *credits[] = { "Alex \"MistaED\" Fuller", "FreeDoom Project", // Used some of the mancubus and rocket launcher sprites for Brak "Randy Heit ()", // For his MSPaint sprite that we nicked -#if 0 // (don't take your anger out on me anymore, ok, JTE...?) - "Abigail \"Raspberry\" Fox", // (Inuyasha's girlfriend. >_> <_< >_>) -#endif + "", + "\1Produced By", + "Sonic Team Junior", + "", + "\1Published By", + "A 28K dialup modem", "", "\1Thank you", "\1for playing!", diff --git a/src/g_game.c b/src/g_game.c index 21112ca3c..50f30dfca 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -131,7 +131,6 @@ boolean countdowntimeup = false; cutscene_t *cutscenes[128]; INT16 nextmapoverride; -INT32 nextmapgametype; boolean skipstats; // Pointers to each CTF flag @@ -244,7 +243,6 @@ mobj_t *metalplayback; static UINT8 *metalbuffer = NULL; static UINT8 *metal_p; static UINT16 metalversion; -boolean metal_start; // extra data stuff (events registered this frame while recording) static struct { @@ -283,6 +281,8 @@ static void UserAnalog_OnChange(void); static void UserAnalog2_OnChange(void); static void Analog_OnChange(void); static void Analog2_OnChange(void); +void SendWeaponPref(void); +void SendWeaponPref2(void); static CV_PossibleValue_t crosshair_cons_t[] = {{0, "Off"}, {1, "Cross"}, {2, "Angle"}, {3, "Point"}, {0, NULL}}; static CV_PossibleValue_t joyaxis_cons_t[] = {{0, "None"}, @@ -595,14 +595,18 @@ void G_AddTempNightsRecords(UINT32 pscore, tic_t ptime, UINT8 mare) void G_SetNightsRecords(void) { INT32 i; + UINT32 totalscore = 0; + tic_t totaltime = 0; + + const size_t glen = strlen(srb2home)+1+strlen("replay")+1+strlen(timeattackfolder)+1+strlen("MAPXX")+1; + char *gpath; + char lastdemo[256], bestdemo[256]; if (!ntemprecords.nummares) return; // Set overall { - UINT32 totalscore = 0; - tic_t totaltime = 0; UINT8 totalrank = 0, realrank = 0; for (i = 1; i <= ntemprecords.nummares; ++i) @@ -648,6 +652,50 @@ void G_SetNightsRecords(void) memset(&ntemprecords, 0, sizeof(nightsdata_t)); + // Save demo! + bestdemo[255] = '\0'; + lastdemo[255] = '\0'; + G_SetDemoTime(totaltime, totalscore, 0); + G_CheckDemoStatus(); + + I_mkdir(va("%s"PATHSEP"replay", srb2home), 0755); + I_mkdir(va("%s"PATHSEP"replay"PATHSEP"%s", srb2home, timeattackfolder), 0755); + + if ((gpath = malloc(glen)) == NULL) + I_Error("Out of memory for replay filepath\n"); + + sprintf(gpath,"%s"PATHSEP"replay"PATHSEP"%s"PATHSEP"%s", srb2home, timeattackfolder, G_BuildMapName(gamemap)); + snprintf(lastdemo, 255, "%s-last.lmp", gpath); + + if (FIL_FileExists(lastdemo)) + { + UINT8 *buf; + size_t len = FIL_ReadFile(lastdemo, &buf); + + snprintf(bestdemo, 255, "%s-time-best.lmp", gpath); + if (!FIL_FileExists(bestdemo) || G_CmpDemoTime(bestdemo, lastdemo) & 1) + { // Better time, save this demo. + if (FIL_FileExists(bestdemo)) + remove(bestdemo); + FIL_WriteFile(bestdemo, buf, len); + CONS_Printf("\x83%s\x80 %s '%s'\n", M_GetText("NEW RECORD TIME!"), M_GetText("Saved replay as"), bestdemo); + } + + snprintf(bestdemo, 255, "%s-score-best.lmp", gpath); + if (!FIL_FileExists(bestdemo) || (G_CmpDemoTime(bestdemo, lastdemo) & (1<<1))) + { // Better score, save this demo. + if (FIL_FileExists(bestdemo)) + remove(bestdemo); + FIL_WriteFile(bestdemo, buf, len); + CONS_Printf("\x83%s\x80 %s '%s'\n", M_GetText("NEW HIGH SCORE!"), M_GetText("Saved replay as"), bestdemo); + } + + //CONS_Printf("%s '%s'\n", M_GetText("Saved replay as"), lastdemo); + + Z_Free(buf); + } + free(gpath); + // If the mare count changed, this will update the score display CV_AddValue(&cv_nextmap, 1); CV_AddValue(&cv_nextmap, -1); @@ -909,6 +957,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics) // these ones used for multiple conditions boolean turnleft, turnright, mouseaiming, analogjoystickmove, gamepadjoystickmove; player_t *player = &players[consoleplayer]; + camera_t *thiscam = &camera; static INT32 turnheld; // for accelerative turning static boolean keyboard_look; // true if lookup/down using keyboard @@ -1172,8 +1221,16 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics) cmd->forwardmove = (SINT8)(cmd->forwardmove + forward); cmd->sidemove = (SINT8)(cmd->sidemove + side); - localangle += (cmd->angleturn<<16); - cmd->angleturn = (INT16)(localangle >> 16); + if (cv_analog.value) { + cmd->angleturn = (INT16)(thiscam->angle >> 16); + if (player->awayviewtics) + cmd->angleturn = (INT16)(player->awayviewmobj->angle >> 16); + } + else + { + localangle += (cmd->angleturn<<16); + cmd->angleturn = (INT16)(localangle >> 16); + } //Reset away view if a command is given. if ((cmd->forwardmove || cmd->sidemove || cmd->buttons) @@ -1190,6 +1247,7 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics) // these ones used for multiple conditions boolean turnleft, turnright, mouseaiming, analogjoystickmove, gamepadjoystickmove; player_t *player = &players[secondarydisplayplayer]; + camera_t *thiscam = (player->bot == 2 ? &camera : &camera2); static INT32 turnheld; // for accelerative turning static boolean keyboard_look; // true if lookup/down using keyboard @@ -1463,8 +1521,16 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics) } } - localangle2 += (cmd->angleturn<<16); - cmd->angleturn = (INT16)(localangle2 >> 16); + if (cv_analog2.value) { + cmd->angleturn = (INT16)(thiscam->angle >> 16); + if (player->awayviewtics) + cmd->angleturn = (INT16)(player->awayviewmobj->angle >> 16); + } + else + { + localangle2 += (cmd->angleturn<<16); + cmd->angleturn = (INT16)(localangle2 >> 16); + } } // User has designated that they want @@ -1497,25 +1563,45 @@ static void Analog_OnChange(void) if (leveltime > 1) CV_SetValue(&cv_cam_dist, 128); - if (netgame) - CV_StealthSetValue(&cv_analog, 0); - else if (cv_analog.value || demoplayback) + if (cv_analog.value || demoplayback) CV_SetValue(&cv_cam_dist, 192); + + if (!cv_chasecam.value && cv_analog.value) { + CV_SetValue(&cv_analog, 0); + return; + } + + if (cv_analog.value) + players[consoleplayer].pflags |= PF_ANALOGMODE; + else + players[consoleplayer].pflags &= ~PF_ANALOGMODE; + + SendWeaponPref(); } static void Analog2_OnChange(void) { - if (!splitscreen || !cv_cam2_dist.string) + if (!(splitscreen || botingame) || !cv_cam2_dist.string) return; // cameras are not initialized at this point if (leveltime > 1) CV_SetValue(&cv_cam2_dist, 128); - if (netgame) - CV_StealthSetValue(&cv_analog2, 0); - else if (cv_analog2.value) + if (cv_analog2.value) CV_SetValue(&cv_cam2_dist, 192); + + if (!cv_chasecam2.value && cv_analog2.value) { + CV_SetValue(&cv_analog2, 0); + return; + } + + if (cv_analog2.value) + players[secondarydisplayplayer].pflags |= PF_ANALOGMODE; + else + players[secondarydisplayplayer].pflags &= ~PF_ANALOGMODE; + + SendWeaponPref2(); } // @@ -1999,7 +2085,7 @@ void G_PlayerReborn(INT32 player) exiting = players[player].exiting; jointime = players[player].jointime; spectator = players[player].spectator; - pflags = (players[player].pflags & (PF_TIMEOVER|PF_FLIPCAM|PF_TAGIT|PF_TAGGED)); + pflags = (players[player].pflags & (PF_TIMEOVER|PF_FLIPCAM|PF_TAGIT|PF_TAGGED|PF_ANALOGMODE)); // As long as we're not in multiplayer, carry over cheatcodes from map to map if (!(netgame || multiplayer)) @@ -2838,23 +2924,12 @@ static void G_DoWorldDone(void) { if (server) { - INT32 nextgametype; - - // for custom exit (linetype 2) that changes gametype - if (nextmapgametype != -1) - nextgametype = nextmapgametype; - else - { - // use current gametype by default - nextgametype = gametype; - } - - if (gametype == GT_COOP && nextgametype == GT_COOP) + if (gametype == GT_COOP) // don't reset player between maps - D_MapChange(nextmap+1, nextgametype, ultimatemode, false, 0, false, false); + D_MapChange(nextmap+1, gametype, ultimatemode, false, 0, false, false); else // resetplayer in match/chaos/tag/CTF/race for more equality - D_MapChange(nextmap+1, nextgametype, ultimatemode, true, 0, false, false); + D_MapChange(nextmap+1, gametype, ultimatemode, true, 0, false, false); } gameaction = ga_nothing; @@ -3618,6 +3693,7 @@ static ticcmd_t oldcmd; // Not used for Metal Sonic #define GZT_SPRITE 0x10 // Animation frame #define GZT_EXTRA 0x20 +#define GZT_NIGHTS 0x40 // NiGHTS Mode stuff! // GZT_EXTRA flags #define EZT_THOK 0x01 // Spawned a thok object @@ -3632,6 +3708,21 @@ static ticcmd_t oldcmd; static mobj_t oldmetal, oldghost; +void G_SaveMetal(UINT8 **buffer) +{ + I_Assert(buffer != NULL && *buffer != NULL); + + WRITEUINT32(*buffer, metal_p - metalbuffer); +} + +void G_LoadMetal(UINT8 **buffer) +{ + I_Assert(buffer != NULL && *buffer != NULL); + + G_DoPlayMetal(); + metal_p = metalbuffer + READUINT32(*buffer); +} + ticcmd_t *G_CopyTiccmd(ticcmd_t* dest, const ticcmd_t* src, const size_t n) { return M_Memcpy(dest, src, n*sizeof(*src)); @@ -3814,6 +3905,13 @@ void G_WriteGhostTic(mobj_t *ghost) if (!(demoflags & DF_GHOST)) return; // No ghost data to write. + if (ghost->player && ghost->player->pflags & PF_NIGHTSMODE && ghost->tracer) + { + // We're talking about the NiGHTS thing, not the normal platforming thing! + ziptic |= GZT_NIGHTS; + ghost = ghost->tracer; + } + ziptic_p = demo_p++; // the ziptic, written at the end of this function #define MAXMOM (0xFFFF<<8) @@ -3875,10 +3973,7 @@ void G_WriteGhostTic(mobj_t *ghost) } // Store the sprite frame. - if (ghost->player && ghost->player->pflags & PF_NIGHTSMODE && ghost->tracer) - frame = ghost->tracer->frame & 0xFF; // get frame from NiGHTS tracer - else - frame = ghost->frame & 0xFF; // get frame from player + frame = ghost->frame & 0xFF; if (frame != oldghost.frame) { oldghost.frame = frame; @@ -3887,10 +3982,7 @@ void G_WriteGhostTic(mobj_t *ghost) } // Check for sprite set changes - if (ghost->player && ghost->player->pflags & PF_NIGHTSMODE && ghost->tracer) - sprite = ghost->tracer->sprite; // get sprite from NiGHTS tracer - else - sprite = ghost->sprite; // get sprite from player + sprite = ghost->sprite; if (sprite != oldghost.sprite) { oldghost.sprite = sprite; @@ -3957,12 +4049,16 @@ void G_ConsGhostTic(void) { UINT8 ziptic; UINT16 px,py,pz,gx,gy,gz; + mobj_t *testmo; + boolean nightsfail = false; if (!demo_p || !demo_start) return; if (!(demoflags & DF_GHOST)) return; // No ghost data to use. + testmo = players[0].mo; + // Grab ghost data. ziptic = READUINT8(demo_p); if (ziptic & GZT_XYZ) @@ -3988,6 +4084,12 @@ void G_ConsGhostTic(void) demo_p++; if (ziptic & GZT_SPRITE) demo_p++; + if(ziptic & GZT_NIGHTS) { + if (!testmo->player || !(testmo->player->pflags & PF_NIGHTSMODE) || !testmo->tracer) + nightsfail = true; + else + testmo = testmo->tracer; + } if (ziptic & GZT_EXTRA) { // But wait, there's more! @@ -4029,7 +4131,12 @@ void G_ConsGhostTic(void) mobj = NULL; // wasn't this one, keep searching. } if (mobj && mobj->health != health) // Wasn't damaged?! This is desync! Fix it! + { + if (demosynced) + CONS_Alert(CONS_WARNING, M_GetText("Demo playback has desynced!\n")); + demosynced = false; P_DamageMobj(mobj, players[0].mo, players[0].mo, 1); + } } } if (ziptic & EZT_SPRITE) @@ -4037,24 +4144,24 @@ void G_ConsGhostTic(void) } // Re-synchronise - px = players[0].mo->x>>FRACBITS; - py = players[0].mo->y>>FRACBITS; - pz = players[0].mo->z>>FRACBITS; + px = testmo->x>>FRACBITS; + py = testmo->y>>FRACBITS; + pz = testmo->z>>FRACBITS; gx = oldghost.x>>FRACBITS; gy = oldghost.y>>FRACBITS; gz = oldghost.z>>FRACBITS; - if (px != gx || py != gy || pz != gz) + if (nightsfail || px != gx || py != gy || pz != gz) { if (demosynced) CONS_Alert(CONS_WARNING, M_GetText("Demo playback has desynced!\n")); demosynced = false; - P_UnsetThingPosition(players[0].mo); - players[0].mo->x = oldghost.x; - players[0].mo->y = oldghost.y; - P_SetThingPosition(players[0].mo); - players[0].mo->z = oldghost.z; + P_UnsetThingPosition(testmo); + testmo->x = oldghost.x; + testmo->y = oldghost.y; + P_SetThingPosition(testmo); + testmo->z = oldghost.z; } if (*demo_p == DEMOMARKER) @@ -4272,7 +4379,7 @@ void G_ReadMetalTic(mobj_t *metal) UINT16 speed; UINT8 statetype; - if (!metal_p || !metal_start) + if (!metal_p) return; ziptic = READUINT8(metal_p); @@ -4517,11 +4624,7 @@ void G_BeginRecording(void) memset(name,0,sizeof(name)); demo_p = demobuffer; - demoflags = DF_GHOST; - if (modeattacking == ATTACKING_RECORD) - demoflags |= DF_RECORDATTACK; - else if (modeattacking == ATTACKING_NIGHTS) - demoflags |= DF_NIGHTSATTACK; + demoflags = DF_GHOST|(modeattacking<frontsector->floorheight); + if (cullheight->flags & ML_NOCLIMB) // Group culling + { + if (!viewcullheight) + return false; + + // Make sure this is part of the same group + if (viewcullheight->frontsector == cullheight->frontsector) + { + // OK, we can cull + if (vz > cullplane && toph < cullplane) // Cull if below plane + return true; + + if (bottomh > cullplane && vz <= cullplane) // Cull if above plane + return true; + } + } + else // Quick culling + { + if (vz > cullplane && toph < cullplane) // Cull if below plane + return true; + + if (bottomh > cullplane && vz <= cullplane) // Cull if above plane + return true; + } + + return false; +} + // -----------------+ // HWR_DrawSprite : Draw flat sprites // : (monsters, bonuses, weapons, lights, ...) @@ -4607,29 +4647,8 @@ static void HWR_ProjectSprite(mobj_t *thing) if (thing->subsector->sector->cullheight) { - float cullplane = FIXED_TO_FLOAT(thing->subsector->sector->cullheight->frontsector->floorheight); - if (thing->subsector->sector->cullheight->flags & ML_NOCLIMB) // Group culling - { - // Make sure this is part of the same group - if (viewsector->cullheight && viewsector->cullheight->frontsector - == thing->subsector->sector->cullheight->frontsector) - { - // OK, we can cull - if (gr_viewz > cullplane && gzt < cullplane) // Cull if below plane - return; - - if (gz > cullplane && gr_viewz <= cullplane) // Cull if above plane - return; - } - } - else // Quick culling - { - if (gr_viewz > cullplane && gzt < cullplane) // Cull if below plane - return; - - if (gz > cullplane && gr_viewz <= cullplane) // Cull if above plane - return; - } + if (HWR_DoCulling(thing->subsector->sector->cullheight, viewsector->cullheight, gr_viewz, gz, gzt)) + return; } heightsec = thing->subsector->sector->heightsec; @@ -4795,6 +4814,8 @@ static void HWR_DrawSkyBackground(player_t *player) FOutVector v[4]; angle_t angle; float dimensionmultiply; + float aspectratio; + float angleturn; // 3--2 // | /| @@ -4830,9 +4851,9 @@ static void HWR_DrawSkyBackground(player_t *player) // Y angle = aimingangle; - float aspectratio = (float)vid.width/(float)vid.height; + aspectratio = (float)vid.width/(float)vid.height; dimensionmultiply = ((float)textures[skytexture]->height/(128.0f*aspectratio)); - float angleturn = (((float)ANGLE_45-1.0f)*aspectratio)*dimensionmultiply; + angleturn = (((float)ANGLE_45-1.0f)*aspectratio)*dimensionmultiply; // Middle of the sky should always be at angle 0 // need to keep correct aspect ratio with X diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index 0f0f7e014..631bb6658 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -399,10 +399,10 @@ static PFNgluBuild2DMipmaps pgluBuild2DMipmaps; #ifndef MINI_GL_COMPATIBILITY /* 1.3 functions for multitexturing */ -typedef void (APIENTRY *PFNGLACTIVETEXTUREPROC) (GLenum); -static PFNGLACTIVETEXTUREPROC pglActiveTexture; -typedef void (APIENTRY *PFNGLMULTITEXCOORD2FPROC) (GLenum, GLfloat, GLfloat); -static PFNGLMULTITEXCOORD2FPROC pglMultiTexCoord2f; +typedef void (APIENTRY *PFNglActiveTexture) (GLenum); +static PFNglActiveTexture pglActiveTexture; +typedef void (APIENTRY *PFNglMultiTexCoord2f) (GLenum, GLfloat, GLfloat); +static PFNglMultiTexCoord2f pglMultiTexCoord2f; #endif #endif @@ -526,21 +526,18 @@ boolean SetupGLFunc13(void) #ifdef STATIC_OPENGL gl13 = true; #else - const char *glversion = (const char *)pglGetString(GL_VERSION); - UINT32 majorversion = 0, minorversion = 0; - - if (glversion != NULL && sscanf(glversion, "%u.%u", &majorversion, &minorversion) == 2) // There is a version number I can identify + if (isExtAvailable("GL_ARB_multitexture", gl_extensions)) { - if (majorversion > 1 || (majorversion == 1 && minorversion >= 3)) // Version of OpenGL is equal to or greater than 1.3 - { - // Get the functions - pglActiveTexture = GetGLFunc("glActiveTexture"); - pglMultiTexCoord2f = GetGLFunc("glMultiTexCoord2f"); + // Get the functions + pglActiveTexture = GetGLFunc("glActiveTextureARB"); + pglMultiTexCoord2f = GetGLFunc("glMultiTexCoord2fARB"); + + gl13 = true; // This is now true, so the new fade mask stuff can be done, if OpenGL version is less than 1.3, it still uses the old fade stuff. + DBG_Printf("GL_ARB_multitexture support: enabled\n"); - if (pglMultiTexCoord2f) - gl13 = true; // This is now true, so the new fade mask stuff can be done, if OpenGL version is less than 1.3, it still uses the old fade stuff. - } } + else + DBG_Printf("GL_ARB_multitexture support: disabled\n"); #undef GETOPENGLFUNC #endif diff --git a/src/hu_stuff.c b/src/hu_stuff.c index a6c6dbe0a..80e30beb5 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -1028,20 +1028,26 @@ UINT16 hu_demorings; static void HU_DrawDemoInfo(void) { V_DrawString(4, 188-24, V_YELLOWMAP, va(M_GetText("%s's replay"), player_names[0])); - V_DrawString(4, 188-16, V_YELLOWMAP|V_MONOSPACE, "SCORE:"); - V_DrawRightAlignedString(120, 188-16, V_MONOSPACE, va("%d", hu_demoscore)); + if (modeattacking) + { + V_DrawString(4, 188-16, V_YELLOWMAP|V_MONOSPACE, "SCORE:"); + V_DrawRightAlignedString(120, 188-16, V_MONOSPACE, va("%d", hu_demoscore)); - V_DrawString(4, 188- 8, V_YELLOWMAP|V_MONOSPACE, "TIME:"); - if (hu_demotime != UINT32_MAX) - V_DrawRightAlignedString(120, 188- 8, V_MONOSPACE, va("%i:%02i.%02i", - G_TicsToMinutes(hu_demotime,true), - G_TicsToSeconds(hu_demotime), - G_TicsToCentiseconds(hu_demotime))); - else - V_DrawRightAlignedString(120, 188- 8, V_MONOSPACE, "--:--.--"); + V_DrawString(4, 188- 8, V_YELLOWMAP|V_MONOSPACE, "TIME:"); + if (hu_demotime != UINT32_MAX) + V_DrawRightAlignedString(120, 188- 8, V_MONOSPACE, va("%i:%02i.%02i", + G_TicsToMinutes(hu_demotime,true), + G_TicsToSeconds(hu_demotime), + G_TicsToCentiseconds(hu_demotime))); + else + V_DrawRightAlignedString(120, 188- 8, V_MONOSPACE, "--:--.--"); - V_DrawString(4, 188 , V_YELLOWMAP|V_MONOSPACE, "RINGS:"); - V_DrawRightAlignedString(120, 188 , V_MONOSPACE, va("%d", hu_demorings)); + if (modeattacking == ATTACKING_RECORD) + { + V_DrawString(4, 188 , V_YELLOWMAP|V_MONOSPACE, "RINGS:"); + V_DrawRightAlignedString(120, 188 , V_MONOSPACE, va("%d", hu_demorings)); + } + } } // Heads up displays drawer, call each frame diff --git a/src/info.c b/src/info.c index a15646f01..c8f754b54 100644 --- a/src/info.c +++ b/src/info.c @@ -570,7 +570,7 @@ state_t states[NUMSTATES] = {SPR_EGGO, 9, 8, {A_BossScream}, 0, 0, S_EGGMOBILE3_DIE14}, // S_EGGMOBILE3_DIE13 {SPR_EGGO, 9, -1, {A_BossDeath}, 0, 0, S_NULL}, // S_EGGMOBILE3_DIE14 {SPR_EGGO, 10, 5, {NULL}, 0, 0, S_EGGMOBILE3_FLEE2}, // S_EGGMOBILE3_FLEE1 - {SPR_EGGO, 11, 5, {A_BossScream}, 0, 0, S_EGGMOBILE3_FLEE1}, // S_EGGMOBILE3_FLEE2 + {SPR_EGGO, 11, 5, {NULL}, 0, 0, S_EGGMOBILE3_FLEE1}, // S_EGGMOBILE3_FLEE2 // Boss 3 Propeller {SPR_PRPL, 0, 1, {NULL}, 0, 0, S_PROPELLER2}, // S_PROPELLER1 @@ -3349,7 +3349,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_None, // seesound 2*TICRATE, // reactiontime sfx_None, // attacksound - S_CCOMMAND1, // painstate + S_CCOMMAND3, // painstate 200, // painchance sfx_dmpain, // painsound S_NULL, // meleestate @@ -13452,7 +13452,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 1000, // mass 0, // damage sfx_None, // activesound - MF_NOBLOCKMAP, // flags + MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_SCENERY|MF_NOCLIPHEIGHT, // flags S_NULL // raisestate }, @@ -13479,7 +13479,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 1000, // mass 0, // damage sfx_None, // activesound - MF_NOBLOCKMAP, // flags + MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_SCENERY|MF_NOCLIPHEIGHT, // flags S_NULL // raisestate }, @@ -13506,7 +13506,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 1000, // mass 0, // damage sfx_None, // activesound - MF_NOBLOCKMAP, // flags + MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_SCENERY|MF_NOCLIPHEIGHT, // flags S_NULL // raisestate }, @@ -13533,7 +13533,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 1000, // mass 0, // damage sfx_None, // activesound - MF_NOBLOCKMAP, // flags + MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_SCENERY|MF_NOCLIPHEIGHT, // flags S_NULL // raisestate }, @@ -13560,7 +13560,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 1000, // mass 0, // damage sfx_None, // activesound - MF_NOBLOCKMAP, // flags + MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_SCENERY|MF_NOCLIPHEIGHT, // flags S_NULL // raisestate }, @@ -13587,7 +13587,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 1000, // mass 0, // damage sfx_None, // activesound - MF_NOBLOCKMAP, // flags + MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_SCENERY|MF_NOCLIPHEIGHT, // flags S_NULL // raisestate }, @@ -13614,7 +13614,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 1000, // mass 0, // damage sfx_None, // activesound - MF_NOBLOCKMAP, // flags + MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_SCENERY|MF_NOCLIPHEIGHT, // flags S_NULL // raisestate }, @@ -13641,7 +13641,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 1000, // mass 0, // damage sfx_None, // activesound - MF_NOBLOCKMAP, // flags + MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_SCENERY|MF_NOCLIPHEIGHT, // flags S_NULL // raisestate }, @@ -13668,7 +13668,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 1000, // mass 0, // damage sfx_None, // activesound - MF_NOBLOCKMAP, // flags + MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_SCENERY|MF_NOCLIPHEIGHT, // flags S_NULL // raisestate }, @@ -13695,7 +13695,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 1000, // mass 0, // damage sfx_None, // activesound - MF_NOBLOCKMAP, // flags + MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_SCENERY|MF_NOCLIPHEIGHT, // flags S_NULL // raisestate }, @@ -13722,7 +13722,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 1000, // mass 0, // damage sfx_None, // activesound - MF_NOBLOCKMAP, // flags + MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_SCENERY|MF_NOCLIPHEIGHT, // flags S_NULL // raisestate }, @@ -13749,7 +13749,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 1000, // mass 0, // damage sfx_None, // activesound - MF_NOBLOCKMAP, // flags + MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_SCENERY|MF_NOCLIPHEIGHT, // flags S_NULL // raisestate }, @@ -13776,7 +13776,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 1000, // mass 0, // damage sfx_None, // activesound - MF_NOBLOCKMAP, // flags + MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_SCENERY|MF_NOCLIPHEIGHT, // flags S_NULL // raisestate }, @@ -13803,7 +13803,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 1000, // mass 0, // damage sfx_None, // activesound - MF_NOBLOCKMAP, // flags + MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_SCENERY|MF_NOCLIPHEIGHT, // flags S_NULL // raisestate }, @@ -13830,7 +13830,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 1000, // mass 0, // damage sfx_None, // activesound - MF_NOBLOCKMAP, // flags + MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_SCENERY|MF_NOCLIPHEIGHT, // flags S_NULL // raisestate }, @@ -13857,7 +13857,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 1000, // mass 0, // damage sfx_None, // activesound - MF_NOBLOCKMAP, // flags + MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_SCENERY|MF_NOCLIPHEIGHT, // flags S_NULL // raisestate }, diff --git a/src/lua_baselib.c b/src/lua_baselib.c index 6124b3498..ad5d740f8 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -1744,7 +1744,26 @@ static int lib_gDoReborn(lua_State *L) static int lib_gExitLevel(lua_State *L) { + int n = lua_gettop(L); // Num arguments NOHUD + + // LUA EXTENSION: Custom exit like support + // Supported: + // G_ExitLevel(); [no modifications] + // G_ExitLevel(int) [nextmap override only] + // G_ExitLevel(bool) [skipstats only] + // G_ExitLevel(int, bool) [both of the above] + if (n >= 1) + { + if (lua_isnumber(L, 1) || n >= 2) + { + nextmapoverride = (INT16)luaL_checknumber(L, 1); + lua_pop(L, 1); // pop nextmapoverride; skipstats now 1 if available + } + skipstats = lua_optboolean(L, 1); + } + // --- + G_ExitLevel(); return 0; } diff --git a/src/lua_hook.h b/src/lua_hook.h index 85d00533b..fae3bb7e6 100644 --- a/src/lua_hook.h +++ b/src/lua_hook.h @@ -71,7 +71,7 @@ boolean LUAh_MobjDeath(mobj_t *target, mobj_t *inflictor, mobj_t *source); // Ho #define LUAh_JumpSpinSpecial(player) LUAh_PlayerHook(player, hook_JumpSpinSpecial) // Hook for P_DoJumpStuff (Spin button effect (mid-air)) boolean LUAh_BotTiccmd(player_t *bot, ticcmd_t *cmd); // Hook for B_BuildTiccmd boolean LUAh_BotAI(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd); // Hook for B_BuildTailsTiccmd by skin name -boolean LUAh_LinedefExecute(line_t *line, mobj_t *mo); // Hook for linedef executors +boolean LUAh_LinedefExecute(line_t *line, mobj_t *mo, sector_t *sector); // Hook for linedef executors boolean LUAh_PlayerMsg(int source, int target, int flags, char *msg); // Hook for chat messages boolean LUAh_DeathMsg(player_t *player, mobj_t *inflictor, mobj_t *source); // Hook for hurt messages diff --git a/src/lua_hooklib.c b/src/lua_hooklib.c index 4e9328e1c..532726ac2 100644 --- a/src/lua_hooklib.c +++ b/src/lua_hooklib.c @@ -873,7 +873,7 @@ boolean LUAh_BotAI(mobj_t *sonic, mobj_t *tails, ticcmd_t *cmd) } // Hook for linedef executors -boolean LUAh_LinedefExecute(line_t *line, mobj_t *mo) +boolean LUAh_LinedefExecute(line_t *line, mobj_t *mo, sector_t *sector) { if (!gL || !(hooksAvailable[hook_LinedefExecute/8] & (1<<(hook_LinedefExecute%8)))) return false; @@ -898,7 +898,8 @@ boolean LUAh_LinedefExecute(line_t *line, mobj_t *mo) LUA_PushUserdata(gL, line, META_LINE); LUA_PushUserdata(gL, mo, META_MOBJ); - LUA_Call(gL, 2); // pops hook function, line, mo + LUA_PushUserdata(gL, sector, META_SECTOR); + LUA_Call(gL, 3); // pops hook function, line, mo, sector lua_pop(gL, -1); lua_gc(gL, LUA_GCSTEP, 1); diff --git a/src/lua_hudlib.c b/src/lua_hudlib.c index 6800a2f98..19390d50d 100644 --- a/src/lua_hudlib.c +++ b/src/lua_hudlib.c @@ -13,6 +13,7 @@ #include "doomdef.h" #ifdef HAVE_BLUA #include "r_defs.h" +#include "r_local.h" #include "st_stuff.h" // hudinfo[] #include "g_game.h" #include "p_local.h" // camera_t @@ -222,6 +223,11 @@ static int hudinfo_num(lua_State *L) return 1; } +static int colormap_get(lua_State *L) +{ + return luaL_error(L, "colormap is not a struct."); +} + static int patch_get(lua_State *L) { patch_t *patch = *((patch_t **)luaL_checkudata(L, 1, META_PATCH)); @@ -352,7 +358,7 @@ static int libd_draw(lua_State *L) patch = *((patch_t **)luaL_checkudata(L, 3, META_PATCH)); flags = luaL_optinteger(L, 4, 0); if (!lua_isnoneornil(L, 5)) - colormap = luaL_checkudata(L, 5, META_COLORMAP); + colormap = *((UINT8 **)luaL_checkudata(L, 5, META_COLORMAP)); flags &= ~V_PARAMMASK; // Don't let crashes happen. @@ -374,7 +380,7 @@ static int libd_drawScaled(lua_State *L) patch = *((patch_t **)luaL_checkudata(L, 4, META_PATCH)); flags = luaL_optinteger(L, 5, 0); if (!lua_isnoneornil(L, 6)) - colormap = luaL_checkudata(L, 6, META_COLORMAP); + colormap = *((UINT8 **)luaL_checkudata(L, 6, META_COLORMAP)); flags &= ~V_PARAMMASK; // Don't let crashes happen. @@ -490,6 +496,35 @@ static int libd_stringWidth(lua_State *L) return 1; } +static int libd_getColormap(lua_State *L) +{ + INT32 skinnum = TC_DEFAULT; + skincolors_t color = luaL_optinteger(L, 2, 0); + UINT8* colormap = NULL; + //HUDSAFE + if (lua_isnoneornil(L, 1)) + ; // defaults to TC_DEFAULT + else if (lua_type(L, 1) == LUA_TNUMBER) // skin number + { + skinnum = (INT32)luaL_checkinteger(L, 1); + if (skinnum < TC_ALLWHITE || skinnum >= MAXSKINS) + return luaL_error(L, "argument #1 is out of range"); + } + else // skin name + { + const char *skinname = luaL_checkstring(L, 1); + INT32 i = R_SkinAvailable(skinname); + if (i != -1) // if -1, just default to TC_DEFAULT as above + skinnum = i; + } + + // all was successful above, now we generate the colormap at last! + + colormap = R_GetTranslationColormap(skinnum, color, GTC_CACHE); + LUA_PushUserdata(L, colormap, META_COLORMAP); // push as META_COLORMAP userdata, specifically for patches to use! + return 1; +} + static luaL_Reg lib_draw[] = { {"patchExists", libd_patchExists}, {"cachePatch", libd_cachePatch}, @@ -500,6 +535,7 @@ static luaL_Reg lib_draw[] = { {"drawFill", libd_drawFill}, {"drawString", libd_drawString}, {"stringWidth", libd_stringWidth}, + {"getColormap", libd_getColormap}, {NULL, NULL} }; @@ -592,6 +628,11 @@ int LUA_HudLib(lua_State *L) lua_setmetatable(L, -2); lua_setglobal(L, "hudinfo"); + luaL_newmetatable(L, META_COLORMAP); + lua_pushcfunction(L, colormap_get); + lua_setfield(L, -2, "__index"); + lua_pop(L,1); + luaL_newmetatable(L, META_PATCH); lua_pushcfunction(L, patch_get); lua_setfield(L, -2, "__index"); diff --git a/src/lua_maplib.c b/src/lua_maplib.c index 3209fc532..80f66ed60 100644 --- a/src/lua_maplib.c +++ b/src/lua_maplib.c @@ -89,7 +89,8 @@ enum line_e { line_validcount, line_firsttag, line_nexttag, - line_text + line_text, + line_callcount }; static const char *const line_opt[] = { @@ -111,6 +112,7 @@ static const char *const line_opt[] = { "firsttag", "nexttag", "text", + "callcount", NULL}; enum side_e { @@ -574,6 +576,9 @@ static int line_get(lua_State *L) case line_text: lua_pushstring(L, line->text); return 1; + case line_callcount: + lua_pushinteger(L, line->callcount); + return 1; } return 0; } @@ -1033,7 +1038,7 @@ static int ffloor_set(lua_State *L) boolean flag; fixed_t lastpos = *ffloor->topheight; sector_t *sector = §ors[ffloor->secnum]; - sector->floorheight = (fixed_t)luaL_checkinteger(L, 3); + sector->ceilingheight = (fixed_t)luaL_checkinteger(L, 3); flag = P_CheckSector(sector, true); if (flag && sector->numattached) { @@ -1052,7 +1057,7 @@ static int ffloor_set(lua_State *L) boolean flag; fixed_t lastpos = *ffloor->bottomheight; sector_t *sector = §ors[ffloor->secnum]; - sector->ceilingheight = (fixed_t)luaL_checkinteger(L, 3); + sector->floorheight = (fixed_t)luaL_checkinteger(L, 3); flag = P_CheckSector(sector, true); if (flag && sector->numattached) { diff --git a/src/m_menu.c b/src/m_menu.c index 830b26443..b8be38e82 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -250,7 +250,8 @@ static void M_ModeAttackEndGame(INT32 choice); static void M_SetGuestReplay(INT32 choice); static void M_ChoosePlayer(INT32 choice); menu_t SP_GameStatsDef, SP_LevelStatsDef; -static menu_t SP_TimeAttackDef, SP_NightsAttackDef, SP_ReplayDef, SP_GuestReplayDef, SP_GhostDef; +static menu_t SP_TimeAttackDef, SP_ReplayDef, SP_GuestReplayDef, SP_GhostDef; +static menu_t SP_NightsAttackDef, SP_NightsReplayDef, SP_NightsGuestReplayDef, SP_NightsGhostDef; // Multiplayer #ifndef NONET @@ -733,6 +734,17 @@ static menuitem_t SP_ReplayMenu[] = {IT_WHITESTRING|IT_SUBMENU, NULL, "Back", &SP_TimeAttackDef, 50} }; +static menuitem_t SP_NightsReplayMenu[] = +{ + {IT_WHITESTRING|IT_CALL, NULL, "Replay Best Score", M_ReplayTimeAttack, 8}, + {IT_WHITESTRING|IT_CALL, NULL, "Replay Best Time", M_ReplayTimeAttack,16}, + + {IT_WHITESTRING|IT_CALL, NULL, "Replay Last", M_ReplayTimeAttack,29}, + {IT_WHITESTRING|IT_CALL, NULL, "Replay Guest", M_ReplayTimeAttack,37}, + + {IT_WHITESTRING|IT_SUBMENU, NULL, "Back", &SP_NightsAttackDef, 50} +}; + static menuitem_t SP_GuestReplayMenu[] = { {IT_WHITESTRING|IT_CALL, NULL, "Save Best Score as Guest", M_SetGuestReplay, 0}, @@ -745,6 +757,17 @@ static menuitem_t SP_GuestReplayMenu[] = {IT_WHITESTRING|IT_SUBMENU, NULL, "Back", &SP_TimeAttackDef, 50} }; +static menuitem_t SP_NightsGuestReplayMenu[] = +{ + {IT_WHITESTRING|IT_CALL, NULL, "Save Best Score as Guest", M_SetGuestReplay, 8}, + {IT_WHITESTRING|IT_CALL, NULL, "Save Best Time as Guest", M_SetGuestReplay,16}, + {IT_WHITESTRING|IT_CALL, NULL, "Save Last as Guest", M_SetGuestReplay,24}, + + {IT_WHITESTRING|IT_CALL, NULL, "Delete Guest Replay", M_SetGuestReplay,37}, + + {IT_WHITESTRING|IT_SUBMENU, NULL, "Back", &SP_NightsAttackDef, 50} +}; + static menuitem_t SP_GhostMenu[] = { {IT_STRING|IT_CVAR, NULL, "Best Score", &cv_ghost_bestscore, 0}, @@ -757,18 +780,37 @@ static menuitem_t SP_GhostMenu[] = {IT_WHITESTRING|IT_SUBMENU, NULL, "Back", &SP_TimeAttackDef, 50} }; +static menuitem_t SP_NightsGhostMenu[] = +{ + {IT_STRING|IT_CVAR, NULL, "Best Score", &cv_ghost_bestscore, 8}, + {IT_STRING|IT_CVAR, NULL, "Best Time", &cv_ghost_besttime, 16}, + {IT_STRING|IT_CVAR, NULL, "Last", &cv_ghost_last, 24}, + + {IT_STRING|IT_CVAR, NULL, "Guest", &cv_ghost_guest, 37}, + + {IT_WHITESTRING|IT_SUBMENU, NULL, "Back", &SP_NightsAttackDef, 50} +}; + // Single Player Nights Attack static menuitem_t SP_NightsAttackMenu[] = { {IT_STRING|IT_CVAR, NULL, "Level", &cv_nextmap, 44}, - {IT_STRING|IT_CVAR, NULL, "Show Records For", &cv_dummymares, 60}, - {IT_WHITESTRING|IT_CALL, NULL, "Start", M_ChooseNightsAttack, 130}, + {IT_STRING|IT_CVAR, NULL, "Show Records For", &cv_dummymares, 54}, + + {IT_DISABLED, NULL, "Guest Option...", &SP_NightsGuestReplayDef, 108}, + {IT_DISABLED, NULL, "Replay...", &SP_NightsReplayDef, 118}, + {IT_DISABLED, NULL, "Ghosts...", &SP_NightsGhostDef, 128}, + {IT_WHITESTRING|IT_CALL, NULL, "Start", M_ChooseNightsAttack, 138}, }; enum { nalevel, narecords, + + naguest, + nareplay, + naghost, nastart }; @@ -1515,6 +1557,40 @@ static menu_t SP_NightsAttackDef = 0, NULL }; +static menu_t SP_NightsReplayDef = +{ + "M_NIGHTS", + sizeof(SP_NightsReplayMenu)/sizeof(menuitem_t), + &SP_NightsAttackDef, + SP_NightsReplayMenu, + M_DrawNightsAttackMenu, + 32, 120, + 0, + NULL +}; +static menu_t SP_NightsGuestReplayDef = +{ + "M_NIGHTS", + sizeof(SP_NightsGuestReplayMenu)/sizeof(menuitem_t), + &SP_NightsAttackDef, + SP_NightsGuestReplayMenu, + M_DrawNightsAttackMenu, + 32, 120, + 0, + NULL +}; +static menu_t SP_NightsGhostDef = +{ + "M_NIGHTS", + sizeof(SP_NightsGhostMenu)/sizeof(menuitem_t), + &SP_NightsAttackDef, + SP_NightsGhostMenu, + M_DrawNightsAttackMenu, + 32, 120, + 0, + NULL +}; + menu_t SP_PlayerDef = { @@ -1682,7 +1758,7 @@ static void Nextmap_OnChange(void) char *leveltitle; char tabase[256]; short i; - boolean active = false; + boolean active; // Update the string in the consvar. Z_Free(cv_nextmap.zstring); @@ -1697,9 +1773,53 @@ static void Nextmap_OnChange(void) SP_NightsAttackMenu[narecords].status = IT_DISABLED; else SP_NightsAttackMenu[narecords].status = IT_STRING|IT_CVAR; + + // Do the replay things. + active = false; + SP_NightsAttackMenu[naguest].status = IT_DISABLED; + SP_NightsAttackMenu[nareplay].status = IT_DISABLED; + SP_NightsAttackMenu[naghost].status = IT_DISABLED; + + // Check if file exists, if not, disable REPLAY option + sprintf(tabase,"%s"PATHSEP"replay"PATHSEP"%s"PATHSEP"%s",srb2home, timeattackfolder, G_BuildMapName(cv_nextmap.value)); + for (i = 0; i < 4; i++) { + SP_NightsReplayMenu[i].status = IT_DISABLED; + SP_NightsGuestReplayMenu[i].status = IT_DISABLED; + } + if (FIL_FileExists(va("%s-score-best.lmp", tabase))) { + SP_NightsReplayMenu[0].status = IT_WHITESTRING|IT_CALL; + SP_NightsGuestReplayMenu[0].status = IT_WHITESTRING|IT_CALL; + active = true; + } + if (FIL_FileExists(va("%s-time-best.lmp", tabase))) { + SP_NightsReplayMenu[1].status = IT_WHITESTRING|IT_CALL; + SP_NightsGuestReplayMenu[1].status = IT_WHITESTRING|IT_CALL; + active = true; + } + if (FIL_FileExists(va("%s-last.lmp", tabase))) { + SP_NightsReplayMenu[2].status = IT_WHITESTRING|IT_CALL; + SP_NightsGuestReplayMenu[2].status = IT_WHITESTRING|IT_CALL; + active = true; + } + if (FIL_FileExists(va("%s-guest.lmp", tabase))) { + SP_NightsReplayMenu[3].status = IT_WHITESTRING|IT_CALL; + SP_NightsGuestReplayMenu[3].status = IT_WHITESTRING|IT_CALL; + active = true; + } + if (active) { + SP_NightsAttackMenu[naguest].status = IT_WHITESTRING|IT_SUBMENU; + SP_NightsAttackMenu[nareplay].status = IT_WHITESTRING|IT_SUBMENU; + SP_NightsAttackMenu[naghost].status = IT_WHITESTRING|IT_SUBMENU; + } + else if(itemOn == nareplay) // Reset lastOn so replay isn't still selected when not available. + { + currentMenu->lastOn = itemOn; + itemOn = nastart; + } } else if (currentMenu == &SP_TimeAttackDef) { + active = false; SP_TimeAttackMenu[taguest].status = IT_DISABLED; SP_TimeAttackMenu[tareplay].status = IT_DISABLED; SP_TimeAttackMenu[taghost].status = IT_DISABLED; @@ -5287,54 +5407,69 @@ void M_DrawNightsAttackMenu(void) if (P_HasGrades(cv_nextmap.value, 0)) V_DrawScaledPatch(200, 28 + 8, 0, ngradeletters[bestoverall]); - if (P_HasGrades(cv_nextmap.value, cv_dummymares.value)) + if (currentMenu == &SP_NightsAttackDef) { - V_DrawString(160-88, 130, V_YELLOWMAP, "BEST GRADE:"); - V_DrawSmallScaledPatch(160 + 86 - (ngradeletters[bestgrade]->width/2), - 130 + 8 - (ngradeletters[bestgrade]->height/2), - 0, ngradeletters[bestgrade]); - } - - if (!bestscore) - sprintf(beststr, "(none)"); - else - sprintf(beststr, "%u", bestscore); - - V_DrawString(160 - 88, 140, V_YELLOWMAP, "BEST SCORE:"); - V_DrawRightAlignedString(160 + 88, 140, V_ALLOWLOWERCASE, beststr); - - if (besttime == UINT32_MAX) - sprintf(beststr, "(none)"); - else - sprintf(beststr, "%i:%02i.%02i", G_TicsToMinutes(besttime, true), - G_TicsToSeconds(besttime), - G_TicsToCentiseconds(besttime)); - - V_DrawString(160-88, 150, V_YELLOWMAP, "BEST TIME:"); - V_DrawRightAlignedString(160+88, 150, V_ALLOWLOWERCASE, beststr); - - if (cv_dummymares.value == 0) { - // Draw record emblems. - em = M_GetLevelEmblems(cv_nextmap.value); - while (em) + if (P_HasGrades(cv_nextmap.value, cv_dummymares.value)) { - switch (em->type) - { - case ET_NGRADE: yHeight = 130; break; - case ET_NTIME: yHeight = 150; break; - default: - goto skipThisOne; - } - - if (em->collected) - V_DrawSmallMappedPatch(160+88, yHeight, 0, W_CachePatchName(M_GetEmblemPatch(em), PU_CACHE), - R_GetTranslationColormap(TC_DEFAULT, M_GetEmblemColor(em), GTC_CACHE)); - else - V_DrawSmallScaledPatch(160+88, yHeight, 0, W_CachePatchName("NEEDIT", PU_CACHE)); - - skipThisOne: - em = M_GetLevelEmblems(-1); + V_DrawString(160-88, 112, V_YELLOWMAP, "BEST GRADE:"); + V_DrawSmallScaledPatch(160 + 86 - (ngradeletters[bestgrade]->width/2), + 112 + 8 - (ngradeletters[bestgrade]->height/2), + 0, ngradeletters[bestgrade]); } + + if (!bestscore) + sprintf(beststr, "(none)"); + else + sprintf(beststr, "%u", bestscore); + + V_DrawString(160 - 88, 122, V_YELLOWMAP, "BEST SCORE:"); + V_DrawRightAlignedString(160 + 88, 122, V_ALLOWLOWERCASE, beststr); + + if (besttime == UINT32_MAX) + sprintf(beststr, "(none)"); + else + sprintf(beststr, "%i:%02i.%02i", G_TicsToMinutes(besttime, true), + G_TicsToSeconds(besttime), + G_TicsToCentiseconds(besttime)); + + V_DrawString(160-88, 132, V_YELLOWMAP, "BEST TIME:"); + V_DrawRightAlignedString(160+88, 132, V_ALLOWLOWERCASE, beststr); + + if (cv_dummymares.value == 0) { + // Draw record emblems. + em = M_GetLevelEmblems(cv_nextmap.value); + while (em) + { + switch (em->type) + { + case ET_NGRADE: yHeight = 112; break; + case ET_NTIME: yHeight = 132; break; + default: + goto skipThisOne; + } + + if (em->collected) + V_DrawSmallMappedPatch(160+88, yHeight, 0, W_CachePatchName(M_GetEmblemPatch(em), PU_CACHE), + R_GetTranslationColormap(TC_DEFAULT, M_GetEmblemColor(em), GTC_CACHE)); + else + V_DrawSmallScaledPatch(160+88, yHeight, 0, W_CachePatchName("NEEDIT", PU_CACHE)); + + skipThisOne: + em = M_GetLevelEmblems(-1); + } + } + } + // ALWAYS DRAW level name even when not on this menu! + else + { + consvar_t *ncv; + INT32 x = SP_NightsAttackDef.x; + INT32 y = SP_NightsAttackDef.y; + + ncv = (consvar_t *)SP_NightsAttackMenu[0].itemaction; + V_DrawString(x, y + SP_NightsAttackMenu[0].alphaKey, V_TRANSLUCENT, SP_NightsAttackMenu[0].text); + V_DrawString(BASEVIDWIDTH - x - V_StringWidth(ncv->string, 0), + y + SP_NightsAttackMenu[0].alphaKey, V_YELLOWMAP|V_TRANSLUCENT, ncv->string); } } } @@ -5368,16 +5503,25 @@ static void M_NightsAttack(INT32 choice) } // Player has selected the "START" from the nights attack screen -// (no demo recording yet) static void M_ChooseNightsAttack(INT32 choice) { + char nameofdemo[256]; (void)choice; emeralds = 0; M_ClearMenus(true); modeattacking = ATTACKING_NIGHTS; - // Demos and NiGHTS don't play well together - G_DeferedInitNew(false, G_BuildMapName(cv_nextmap.value), (UINT8)(cv_chooseskin.value-1), false, false); + I_mkdir(va("%s"PATHSEP"replay", srb2home), 0755); + I_mkdir(va("%s"PATHSEP"replay"PATHSEP"%s", srb2home, timeattackfolder), 0755); + + snprintf(nameofdemo, sizeof nameofdemo, "replay"PATHSEP"%s"PATHSEP"%s-last", timeattackfolder, G_BuildMapName(cv_nextmap.value)); + + if (!cv_autorecord.value) + remove(va("%s"PATHSEP"%s.lmp", srb2home, nameofdemo)); + else + G_RecordDemo(nameofdemo); + + G_DeferedInitNew(false, G_BuildMapName(cv_nextmap.value), 0, false, false); } // Player has selected the "START" from the time attack screen @@ -5415,28 +5559,50 @@ static void M_ReplayTimeAttack(INT32 choice) M_ClearMenus(true); modeattacking = ATTACKING_RECORD; // set modeattacking before G_DoPlayDemo so the map loader knows - switch(choice) { - default: - case 0: // best score - which = "score-best"; - break; - case 1: // best time - which = "time-best"; - break; - case 2: // best rings - which = "rings-best"; - break; - case 3: // last - which = "last"; - break; - case 4: // guest - // srb2/replay/main/map01-guest.lmp - G_DoPlayDemo(va("%s"PATHSEP"replay"PATHSEP"%s"PATHSEP"%s-guest.lmp", srb2home, timeattackfolder, G_BuildMapName(cv_nextmap.value))); - return; + if (currentMenu == &SP_ReplayDef) + { + switch(choice) { + default: + case 0: // best score + which = "score-best"; + break; + case 1: // best time + which = "time-best"; + break; + case 2: // best rings + which = "rings-best"; + break; + case 3: // last + which = "last"; + break; + case 4: // guest + // srb2/replay/main/map01-guest.lmp + G_DoPlayDemo(va("%s"PATHSEP"replay"PATHSEP"%s"PATHSEP"%s-guest.lmp", srb2home, timeattackfolder, G_BuildMapName(cv_nextmap.value))); + return; + } + // srb2/replay/main/map01-sonic-time-best.lmp + G_DoPlayDemo(va("%s"PATHSEP"replay"PATHSEP"%s"PATHSEP"%s-%s-%s.lmp", srb2home, timeattackfolder, G_BuildMapName(cv_nextmap.value), cv_chooseskin.string, which)); + } + else if (currentMenu == &SP_NightsReplayDef) + { + switch(choice) { + default: + case 0: // best score + which = "score-best"; + break; + case 1: // best time + which = "time-best"; + break; + case 2: // last + which = "last"; + break; + case 3: // guest + which = "guest"; + break; + } + // srb2/replay/main/map01-score-best.lmp + G_DoPlayDemo(va("%s"PATHSEP"replay"PATHSEP"%s"PATHSEP"%s-%s.lmp", srb2home, timeattackfolder, G_BuildMapName(cv_nextmap.value), which)); } - - // srb2/replay/main/map01-sonic-time-best.lmp - G_DoPlayDemo(va("%s"PATHSEP"replay"PATHSEP"%s"PATHSEP"%s-%s-%s.lmp", srb2home, timeattackfolder, G_BuildMapName(cv_nextmap.value), cv_chooseskin.string, which)); } static void M_EraseGuest(INT32 choice) @@ -5445,17 +5611,24 @@ static void M_EraseGuest(INT32 choice) (void)choice; if (FIL_FileExists(rguest)) remove(rguest); - M_SetupNextMenu(&SP_TimeAttackDef); + if (currentMenu == &SP_NightsGuestReplayDef) + M_SetupNextMenu(&SP_NightsAttackDef); + else + M_SetupNextMenu(&SP_TimeAttackDef); CV_AddValue(&cv_nextmap, -1); CV_AddValue(&cv_nextmap, 1); M_StartMessage(M_GetText("Guest replay data erased.\n"),NULL,MM_NOTHING); } -static void M_OverwriteGuest(const char *which) +static void M_OverwriteGuest(const char *which, boolean nights) { char *rguest = Z_StrDup(va("%s"PATHSEP"replay"PATHSEP"%s"PATHSEP"%s-guest.lmp", srb2home, timeattackfolder, G_BuildMapName(cv_nextmap.value))); UINT8 *buf; - size_t len = FIL_ReadFile(va("%s"PATHSEP"replay"PATHSEP"%s"PATHSEP"%s-%s-%s.lmp", srb2home, timeattackfolder, G_BuildMapName(cv_nextmap.value), cv_chooseskin.string, which), &buf); + size_t len; + if (!nights) + len = FIL_ReadFile(va("%s"PATHSEP"replay"PATHSEP"%s"PATHSEP"%s-%s-%s.lmp", srb2home, timeattackfolder, G_BuildMapName(cv_nextmap.value), cv_chooseskin.string, which), &buf); + else + len = FIL_ReadFile(va("%s"PATHSEP"replay"PATHSEP"%s"PATHSEP"%s-%s.lmp", srb2home, timeattackfolder, G_BuildMapName(cv_nextmap.value), which), &buf); if (!len) { return; } @@ -5465,7 +5638,10 @@ static void M_OverwriteGuest(const char *which) } FIL_WriteFile(rguest, buf, len); Z_Free(rguest); - M_SetupNextMenu(&SP_TimeAttackDef); + if (currentMenu == &SP_NightsGuestReplayDef) + M_SetupNextMenu(&SP_NightsAttackDef); + else + M_SetupNextMenu(&SP_TimeAttackDef); CV_AddValue(&cv_nextmap, -1); CV_AddValue(&cv_nextmap, 1); M_StartMessage(M_GetText("Guest replay data saved.\n"),NULL,MM_NOTHING); @@ -5474,30 +5650,32 @@ static void M_OverwriteGuest(const char *which) static void M_OverwriteGuest_Time(INT32 choice) { (void)choice; - M_OverwriteGuest("time-best"); + M_OverwriteGuest("time-best", currentMenu == &SP_NightsGuestReplayDef); } static void M_OverwriteGuest_Score(INT32 choice) { (void)choice; - M_OverwriteGuest("score-best"); + M_OverwriteGuest("score-best", currentMenu == &SP_NightsGuestReplayDef); } static void M_OverwriteGuest_Rings(INT32 choice) { (void)choice; - M_OverwriteGuest("rings-best"); + M_OverwriteGuest("rings-best", false); } static void M_OverwriteGuest_Last(INT32 choice) { (void)choice; - M_OverwriteGuest("last"); + M_OverwriteGuest("last", currentMenu == &SP_NightsGuestReplayDef); } static void M_SetGuestReplay(INT32 choice) { void (*which)(INT32); + if (currentMenu == &SP_NightsGuestReplayDef && choice >= 2) + choice++; // skip best rings switch(choice) { case 0: // best score @@ -5526,51 +5704,39 @@ static void M_SetGuestReplay(INT32 choice) static void M_ModeAttackRetry(INT32 choice) { (void)choice; - if (modeattacking == ATTACKING_RECORD) // Cancel recording - { - G_CheckDemoStatus(); + G_CheckDemoStatus(); // Cancel recording + if (modeattacking == ATTACKING_RECORD) M_ChooseTimeAttack(0); - } else if (modeattacking == ATTACKING_NIGHTS) - { - // No demos to cancel M_ChooseNightsAttack(0); - } } static void M_ModeAttackEndGame(INT32 choice) { (void)choice; - if (modeattacking == ATTACKING_RECORD) // Cancel recording + G_CheckDemoStatus(); // Cancel recording + + if (gamestate == GS_LEVEL || gamestate == GS_INTERMISSION) + Command_ExitGame_f(); + + M_StartControlPanel(); + switch(modeattacking) { - G_CheckDemoStatus(); - - if (gamestate == GS_LEVEL || gamestate == GS_INTERMISSION) - Command_ExitGame_f(); - - M_StartControlPanel(); + default: + case ATTACKING_RECORD: currentMenu = &SP_TimeAttackDef; - itemOn = currentMenu->lastOn; - modeattacking = ATTACKING_NONE; - G_SetGamestate(GS_TIMEATTACK); - S_ChangeMusic(mus_racent, true); - // Update replay availability. - CV_AddValue(&cv_nextmap, 1); - CV_AddValue(&cv_nextmap, -1); - } - else if (modeattacking == ATTACKING_NIGHTS) - { - // No demos to cancel - if (gamestate == GS_LEVEL || gamestate == GS_INTERMISSION) - Command_ExitGame_f(); - - M_StartControlPanel(); + break; + case ATTACKING_NIGHTS: currentMenu = &SP_NightsAttackDef; - itemOn = currentMenu->lastOn; - modeattacking = ATTACKING_NONE; - G_SetGamestate(GS_TIMEATTACK); - S_ChangeMusic(mus_racent, true); + break; } + itemOn = currentMenu->lastOn; + G_SetGamestate(GS_TIMEATTACK); + modeattacking = ATTACKING_NONE; + S_ChangeMusic(mus_racent, true); + // Update replay availability. + CV_AddValue(&cv_nextmap, 1); + CV_AddValue(&cv_nextmap, -1); } // ======== diff --git a/src/m_random.c b/src/m_random.c index ddf5e135b..fce65b88a 100644 --- a/src/m_random.c +++ b/src/m_random.c @@ -131,7 +131,9 @@ INT32 P_RandomKeyD(const char *rfile, INT32 rline, INT32 a) { CONS_Printf("P_RandomKey() at: %sp %d\n", rfile, rline); #endif - return (INT32)(((P_Random()|(P_Random() << 8))/65536.0f)*a); + INT32 prandom = P_Random(); // note: forcing explicit function call order + prandom |= P_Random() << 8; // (function call order is not strictly defined) + return (INT32)((prandom/65536.0f)*a); } /** Provides a random number in between a specific range. @@ -148,7 +150,9 @@ INT32 P_RandomRangeD(const char *rfile, INT32 rline, INT32 a, INT32 b) { CONS_Printf("P_RandomRange() at: %sp %d\n", rfile, rline); #endif - return (INT32)(((P_Random()|(P_Random() << 8))/65536.0f)*(b-a+1))+a; + INT32 prandom = P_Random(); // note: forcing explicit function call order + prandom |= P_Random() << 8; // (function call order is not strictly defined) + return (INT32)((prandom/65536.0f)*(b-a+1))+a; } /** Provides a random byte without saving what the seed would be. diff --git a/src/p_enemy.c b/src/p_enemy.c index 2a8280f14..54e151123 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -2089,7 +2089,7 @@ void A_Boss1Laser(mobj_t *actor) actor->angle = R_PointToAngle2(x, y, actor->target->x, actor->target->y); if (mobjinfo[locvar1].seesound) S_StartSound(actor, mobjinfo[locvar1].seesound); - if (!(actor->spawnpoint->options & MTF_AMBUSH)) + if (!(actor->spawnpoint && actor->spawnpoint->options & MTF_AMBUSH)) { point = P_SpawnMobj(x + P_ReturnThrustX(actor, actor->angle, actor->radius), y + P_ReturnThrustY(actor, actor->angle, actor->radius), actor->z - actor->height / 2, MT_EGGMOBILE_TARGET); point->fuse = actor->tics+1; @@ -2097,10 +2097,10 @@ void A_Boss1Laser(mobj_t *actor) P_SetTarget(&actor->target, point); } } - else if (actor->target && !(actor->spawnpoint->options & MTF_AMBUSH)) + else if (actor->target && !(actor->spawnpoint && actor->spawnpoint->options & MTF_AMBUSH)) actor->angle = R_PointToAngle2(x, y, actor->target->x, actor->target->y); - if (actor->spawnpoint->options & MTF_AMBUSH) + if (actor->spawnpoint && actor->spawnpoint->options & MTF_AMBUSH) angle = FixedAngle(FixedDiv(actor->tics*160*FRACUNIT, actor->state->tics*FRACUNIT) + 10*FRACUNIT); else angle = R_PointToAngle2(z + (mobjinfo[locvar1].height>>1), 0, actor->target->z, R_PointToDist2(x, y, actor->target->x, actor->target->y)); @@ -9608,10 +9608,6 @@ void A_TrapShot(mobj_t *actor) missile->momz = FixedMul(FINESINE(vertang>>ANGLETOFINESHIFT), speed); } -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// TODO: Test the HELL out of these, then remove these annoying lines that are only here to remind you of that -SH // -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // Function: A_VileTarget // // Description: Spawns an object directly on the target, and sets this object as the actor's tracer. diff --git a/src/p_floor.c b/src/p_floor.c index 6d28175eb..f798174ad 100644 --- a/src/p_floor.c +++ b/src/p_floor.c @@ -1242,11 +1242,8 @@ void T_FloatSector(levelspecthink_t *floater) if (actionsector) { - boolean tofloat = false; - boolean floatanyway = false; // Ignore the crumblestate setting. - fixed_t waterheight = actionsector->floorheight - 512*FRACUNIT; - - waterheight = P_SectorCheckWater(actionsector, floater->sector); // find the highest suitable water block around + //boolean floatanyway = false; // Ignore the crumblestate setting. + fixed_t waterheight = P_SectorCheckWater(actionsector, floater->sector); // find the highest suitable water block around if (waterheight == cheeseheight) // same height, no floating needed ; @@ -1254,10 +1251,8 @@ void T_FloatSector(levelspecthink_t *floater) ; else if (floater->sector->ceilingheight == actionsector->ceilingheight && waterheight > cheeseheight) // too high ; - else // we have something to float in! Or we're for some reason above the ground, let's fall anyway - tofloat = true; - - if (tofloat && (floater->sector->crumblestate == 0 || floater->sector->crumblestate >= 3 || floatanyway)) + // we have something to float in! Or we're for some reason above the ground, let's fall anyway + else if (floater->sector->crumblestate == 0 || floater->sector->crumblestate >= 3/* || floatanyway*/) EV_BounceSector(floater->sector, FRACUNIT, floater->sourceline); P_RecalcPrecipInSector(actionsector); @@ -2252,6 +2247,9 @@ void T_EachTimeThinker(levelspecthink_t *eachtime) // This should now run ONLY the stuff for eachtime->sourceline itself, instead of all trigger linedefs sharing the same tag. // Makes much more sense doing it this way, honestly. P_RunTriggerLinedef(eachtime->sourceline, players[affectPlayer].mo, sec); + + if (!eachtime->sourceline->special) // this happens only for "Trigger on X calls" linedefs + P_RemoveThinker(&eachtime->thinker); } } @@ -2852,30 +2850,33 @@ void EV_CrumbleChain(sector_t *sec, ffloor_t *rover) fixed_t topy, bottomy; fixed_t topz; fixed_t a, b, c; + mobjtype_t type = MT_ROCKCRUMBLE1; + + // If the control sector has a special + // of Section3:7-15, use the custom debris. + if (GETSECSPECIAL(rover->master->frontsector->special, 3) >= 8) + type = MT_ROCKCRUMBLE1+(GETSECSPECIAL(rover->master->frontsector->special, 3)-7); // soundorg z height never gets set normally, so MEH. sec->soundorg.z = sec->floorheight; S_StartSound(&sec->soundorg, sfx_crumbl); - // Find the leftmost vertex in the subsector. + // Find the outermost vertexes in the subsector for (i = 0; i < sec->linecount; i++) + { + // Find the leftmost vertex in the subsector. if ((sec->lines[i]->v1->x < sec->lines[leftmostvertex]->v1->x)) leftmostvertex = i; - - // Find the rightmost vertex in the subsector. - for (i = 0; i < sec->linecount; i++) + // Find the rightmost vertex in the subsector. if ((sec->lines[i]->v1->x > sec->lines[rightmostvertex]->v1->x)) rightmostvertex = i; - - // Find the topmost vertex in the subsector. - for (i = 0; i < sec->linecount; i++) + // Find the topmost vertex in the subsector. if ((sec->lines[i]->v1->y > sec->lines[topmostvertex]->v1->y)) topmostvertex = i; - - // Find the bottommost vertex in the subsector. - for (i = 0; i < sec->linecount; i++) + // Find the bottommost vertex in the subsector. if ((sec->lines[i]->v1->y < sec->lines[bottommostvertex]->v1->y)) bottommostvertex = i; + } leftx = sec->lines[leftmostvertex]->v1->x+(16<lines[rightmostvertex]->v1->x; @@ -2892,13 +2893,7 @@ void EV_CrumbleChain(sector_t *sec, ffloor_t *rover) mobj_t *spawned = NULL; for (c = topz; c > *rover->bottomheight; c -= (32<master->frontsector->special, 3) >= 8) - spawned = P_SpawnMobj(a, b, c, MT_ROCKCRUMBLE1+(GETSECSPECIAL(rover->master->frontsector->special, 3)-7)); - else - spawned = P_SpawnMobj(a, b, c, MT_ROCKCRUMBLE1); - + spawned = P_SpawnMobj(a, b, c, type); spawned->fuse = 3*TICRATE; } } diff --git a/src/p_local.h b/src/p_local.h index f5c765fe6..9f8918cd8 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -373,6 +373,10 @@ void P_DoNightsScore(player_t *player); extern INT32 ceilmovesound; +// Factor to scale scrolling effect into mobj-carrying properties = 3/32. +// (This is so scrolling floors and objects on them can move at same speed.) +#define CARRYFACTOR ((3*FRACUNIT)/32) + void P_MixUp(mobj_t *thing, fixed_t x, fixed_t y, fixed_t z, angle_t angle, INT16 starpostx, INT16 starposty, INT16 starpostz, INT32 starpostnum, tic_t starposttime, angle_t starpostangle, diff --git a/src/p_map.c b/src/p_map.c index be59af0a8..62cbf7b77 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -211,12 +211,160 @@ void P_DoSpring(mobj_t *spring, mobj_t *object) } } +static void P_DoFanAndGasJet(mobj_t *spring, mobj_t *object) +{ + player_t *p = object->player; // will be NULL if not a player + fixed_t zdist; // distance between bottoms + fixed_t speed = spring->info->mass; // conveniently, both fans and gas jets use this for the vertical thrust + SINT8 flipval = P_MobjFlip(spring); // virtually everything here centers around the thruster's gravity, not the object's! + + if (p && object->state == &states[object->info->painstate]) // can't use fans and gas jets when player is in pain! + return; + + // is object below thruster's position? if not, calculate distance between their bottoms + if (spring->eflags & MFE_VERTICALFLIP) + { + if (object->z + object->height > spring->z + spring->height) + return; + zdist = (spring->z + spring->height) - (object->z + object->height); + } + else + { + if (object->z < spring->z) + return; + zdist = object->z - spring->z; + } + + switch (spring->type) + { + case MT_FAN: // fan + if (zdist > (spring->health << FRACBITS)) // max z distance determined by health (set by map thing angle) + break; + if (flipval*object->momz >= FixedMul(speed, spring->scale)) // if object's already moving faster than your best, don't bother + break; + if (p && (p->climbing || p->pflags & PF_GLIDING)) // doesn't affect Knux when he's using his abilities! + break; + + object->momz += flipval*FixedMul(speed/4, spring->scale); + + // limit the speed if too high + if (flipval*object->momz > FixedMul(speed, spring->scale)) + object->momz = flipval*FixedMul(speed, spring->scale); + + if (p && !p->powers[pw_tailsfly]) // doesn't reset anim for Tails' flight + { + P_ResetPlayer(p); + if (p->panim != PA_FALL) + P_SetPlayerMobjState(object, S_PLAY_FALL1); + } + break; + case MT_STEAM: // Steam + if (zdist > FixedMul(16*FRACUNIT, spring->scale)) + break; + if (spring->state != &states[S_STEAM1]) // Only when it bursts + break; + + object->momz = flipval*FixedMul(speed, FixedSqrt(FixedMul(spring->scale, object->scale))); // scale the speed with both objects' scales, just like with springs! + + if (p) + { + P_ResetPlayer(p); + if (p->panim != PA_FALL) + P_SetPlayerMobjState(object, S_PLAY_FALL1); + } + break; + default: + break; + } +} + +static void P_DoTailsCarry(player_t *sonic, player_t *tails) +{ + INT32 p; + fixed_t zdist; // z distance between the two players' bottoms + + if ((tails->pflags & PF_CARRIED) && tails->mo->tracer == sonic->mo) + return; + if ((sonic->pflags & PF_CARRIED) && sonic->mo->tracer == tails->mo) + return; + + if (!tails->powers[pw_tailsfly] && !(tails->charability == CA_FLY && (tails->mo->state >= &states[S_PLAY_SPC1] && tails->mo->state <= &states[S_PLAY_SPC4]))) + return; + + if (tails->bot == 1) + return; + + if (sonic->pflags & PF_NIGHTSMODE) + return; + + if (sonic->mo->tracer && sonic->mo->tracer->type == MT_TUBEWAYPOINT + && !(sonic->pflags & PF_ROPEHANG)) + return; // don't steal players from zoomtubes! + + if ((sonic->mo->eflags & MFE_VERTICALFLIP) != (tails->mo->eflags & MFE_VERTICALFLIP)) + return; // Both should be in same gravity + + if (tails->mo->eflags & MFE_VERTICALFLIP) + { + if (tails->mo->ceilingz - (tails->mo->z + tails->mo->height) < sonic->mo->height-FixedMul(2*FRACUNIT, sonic->mo->scale)) + return; + } + else if (tails->mo->z - tails->mo->floorz < sonic->mo->height-FixedMul(2*FRACUNIT, sonic->mo->scale)) + return; // No room to pick up this guy! + + // Search in case another player is already being carried by this fox. + for (p = 0; p < MAXPLAYERS; p++) + if (playeringame[p] && players[p].mo + && players[p].pflags & PF_CARRIED && players[p].mo->tracer == tails->mo) + return; + + if (tails->mo->eflags & MFE_VERTICALFLIP) + zdist = (sonic->mo->z + sonic->mo->height) - (tails->mo->z + tails->mo->height); + else + zdist = tails->mo->z - sonic->mo->z; + + if (zdist <= sonic->mo->height + FixedMul(FRACUNIT, sonic->mo->scale) + && zdist > sonic->mo->height*2/3 + && P_MobjFlip(tails->mo)*sonic->mo->momz <= 0) + { + // Why block opposing teams from tailsflying each other? + // Sneaking into the hands of a flying tails player in Race might be a viable strategy, who knows. + /* + if (gametype == GT_RACE || gametype == GT_COMPETITION + || (netgame && (tails->spectator || sonic->spectator)) + || (G_TagGametype() && (!(tails->pflags & PF_TAGIT) != !(sonic->pflags & PF_TAGIT))) + || (gametype == GT_MATCH) + || (G_GametypeHasTeams() && tails->ctfteam != sonic->ctfteam)) + sonic->pflags &= ~PF_CARRIED; */ + if (tails->spectator || sonic->spectator) + sonic->pflags &= ~PF_CARRIED; + else + { + if (sonic-players == consoleplayer && botingame) + CV_SetValue(&cv_analog2, false); + P_ResetPlayer(sonic); + P_SetTarget(&sonic->mo->tracer, tails->mo); + sonic->pflags |= PF_CARRIED; + S_StartSound(sonic->mo, sfx_s3k4a); + P_UnsetThingPosition(sonic->mo); + sonic->mo->x = tails->mo->x; + sonic->mo->y = tails->mo->y; + P_SetThingPosition(sonic->mo); + } + } + else { + if (sonic-players == consoleplayer && botingame) + CV_SetValue(&cv_analog2, true); + sonic->pflags &= ~PF_CARRIED; + } +} + // // PIT_CheckThing // static boolean PIT_CheckThing(mobj_t *thing) { - fixed_t blockdist, topz, tmtopz; + fixed_t blockdist; // don't clip against self tmsprung = false; @@ -662,103 +810,17 @@ static boolean PIT_CheckThing(mobj_t *thing) if (thing->flags & MF_PUSHABLE) { - if (tmthing->eflags & MFE_VERTICALFLIP) - { - if (thing->z + thing->height <= tmthing->z + tmthing->height) - { - switch (tmthing->type) - { - case MT_FAN: // fan - if (thing->z + thing->height >= tmthing->z + tmthing->height - (tmthing->health << FRACBITS) && thing->momz > -FixedMul(tmthing->info->mass, tmthing->scale)) - { - thing->momz -= FixedMul(tmthing->info->mass/4, tmthing->scale); - - if (thing->momz < -FixedMul(tmthing->info->mass, tmthing->scale)) - thing->momz = -FixedMul(tmthing->info->mass, tmthing->scale); - } - break; - case MT_STEAM: // Steam - if (tmthing->state == &states[S_STEAM1] && thing->z + thing->height >= tmthing->z + tmthing->height - FixedMul(16*FRACUNIT, tmthing->scale)) // Only when it bursts - thing->momz = -FixedMul(tmthing->info->mass, FixedSqrt(FixedMul(tmthing->scale, thing->scale))); - break; - default: - break; - } - } - } - else - { - if (thing->z >= tmthing->z) - { - switch (tmthing->type) - { - case MT_FAN: // fan - if (thing->z <= tmthing->z + (tmthing->health << FRACBITS) && thing->momz < FixedMul(tmthing->info->mass, tmthing->scale)) - { - thing->momz += FixedMul(tmthing->info->mass/4, tmthing->scale); - - if (thing->momz > FixedMul(tmthing->info->mass, tmthing->scale)) - thing->momz = FixedMul(tmthing->info->mass, tmthing->scale); - } - break; - case MT_STEAM: // Steam - if (tmthing->state == &states[S_STEAM1] && thing->z <= tmthing->z + FixedMul(16*FRACUNIT, tmthing->scale)) // Only when it bursts - thing->momz = FixedMul(tmthing->info->mass, FixedSqrt(FixedMul(tmthing->scale, thing->scale))); - break; - default: - break; - } - } - } + if (tmthing->type == MT_FAN || tmthing->type == MT_STEAM) + P_DoFanAndGasJet(tmthing, thing); } if (tmthing->flags & MF_PUSHABLE) { - if ((thing->eflags & MFE_VERTICALFLIP) && tmthing->z + tmthing->height <= thing->z + thing->height) - { - switch (thing->type) - { - case MT_FAN: // fan - if (tmthing->z + tmthing->height >= thing->z + thing->height - (thing->health << FRACBITS) && tmthing->momz > -FixedMul(thing->info->mass, thing->scale)) - { - tmthing->momz -= FixedMul(thing->info->mass/4, thing->scale); - - if (tmthing->momz < -FixedMul(thing->info->mass, thing->scale)) - tmthing->momz = -FixedMul(thing->info->mass, thing->scale); - } - break; - case MT_STEAM: // Steam - if (thing->state == &states[S_STEAM1] && tmthing->z + tmthing->height >= thing->z + thing->height - FixedMul(16*FRACUNIT, thing->scale)) // Only when it bursts - tmthing->momz = -FixedMul(thing->info->mass, FixedSqrt(FixedMul(thing->scale, tmthing->scale))); - break; - default: - break; - } - } - else if (!(thing->eflags & MFE_VERTICALFLIP) && tmthing->z >= thing->z) - { - switch (thing->type) - { - case MT_FAN: // fan - if (tmthing->z <= thing->z + (thing->health << FRACBITS) && tmthing->momz < FixedMul(thing->info->mass, thing->scale)) - { - tmthing->momz += FixedMul(thing->info->mass/4, thing->scale); - - if (tmthing->momz > FixedMul(thing->info->mass, thing->scale)) - tmthing->momz = FixedMul(thing->info->mass, thing->scale); - } - break; - case MT_STEAM: // Steam - if (thing->state == &states[S_STEAM1] && tmthing->z <= thing->z + FixedMul(16*FRACUNIT, thing->scale)) // Only when it bursts - tmthing->momz = FixedMul(thing->info->mass, FixedSqrt(FixedMul(thing->scale, tmthing->scale))); - break; - default: - break; - } - } + if (thing->type == MT_FAN || thing->type == MT_STEAM) + P_DoFanAndGasJet(thing, tmthing); if ((!(thing->eflags & MFE_VERTICALFLIP) && (tmthing->z <= (thing->z + thing->height + FixedMul(FRACUNIT, thing->scale)) && (tmthing->z + tmthing->height) >= thing->z)) - || ((thing->eflags & MFE_VERTICALFLIP) && (tmthing->z + tmthing->height >= (thing->z - FixedMul(FRACUNIT, thing->scale)) && tmthing->z <= (thing->z + thing->height)))) + || ((thing->eflags & MFE_VERTICALFLIP) && (tmthing->z + tmthing->height >= (thing->z - FixedMul(FRACUNIT, thing->scale)) && tmthing->z <= (thing->z + thing->height)))) { if (thing->flags & MF_SPRING) { @@ -799,78 +861,7 @@ static boolean PIT_CheckThing(mobj_t *thing) { if (tmthing->player && thing->player) { - if ((tmthing->player->pflags & PF_CARRIED) && tmthing->tracer == thing) - return true; - else if ((thing->player->pflags & PF_CARRIED) && thing->tracer == tmthing) - return true; - else if (tmthing->player->powers[pw_tailsfly] - || (tmthing->player->charability == CA_FLY && (tmthing->state >= &states[S_PLAY_SPC1] && tmthing->state <= &states[S_PLAY_SPC4]))) - { - INT32 p; - - if (tmthing->player->bot == 1) - return true; - - if (thing->player->pflags & PF_NIGHTSMODE) - return true; - - if (thing->tracer && thing->tracer->type == MT_TUBEWAYPOINT - && !(thing->player->pflags & PF_ROPEHANG)) - return true; // don't steal players from zoomtubes! - - if ((thing->eflags & MFE_VERTICALFLIP) != (tmthing->eflags & MFE_VERTICALFLIP)) - return true; // Both should be in same gravity - - if ((tmthing->eflags & MFE_VERTICALFLIP) - && tmthing->ceilingz - (tmthing->z + tmthing->height) < thing->height-FixedMul(2*FRACUNIT, thing->scale)) - return true; - else if (tmthing->z - tmthing->floorz < thing->height-FixedMul(2*FRACUNIT, thing->scale)) - return true; // No room to pick up this guy! - - // Search in case another player is already being carried by this fox. - for (p = 0; p < MAXPLAYERS; p++) - if (playeringame[p] && players[p].mo - && players[p].pflags & PF_CARRIED && players[p].mo->tracer == tmthing) - return true; - - if ((!(tmthing->eflags & MFE_VERTICALFLIP) && (tmthing->z <= thing->z + thing->height + FixedMul(FRACUNIT, thing->scale)) - && tmthing->z > thing->z + thing->height*2/3 - && thing->momz <= 0) - || ((tmthing->eflags & MFE_VERTICALFLIP) && (tmthing->z + tmthing->height >= thing->z - FixedMul(FRACUNIT, thing->scale)) - && tmthing->z + tmthing->height < thing->z + thing->height - thing->height*2/3 - && thing->momz >= 0)) - { - // Why block opposing teams from tailsflying each other? - // Sneaking into the hands of a flying tails player in Race might be a viable strategy, who knows. - /* - if (gametype == GT_RACE || gametype == GT_COMPETITION - || (netgame && (tmthing->player->spectator || thing->player->spectator)) - || (G_TagGametype() && (!(tmthing->player->pflags & PF_TAGIT) != !(thing->player->pflags & PF_TAGIT))) - || (gametype == GT_MATCH) - || (G_GametypeHasTeams() && tmthing->player->ctfteam != thing->player->ctfteam)) - thing->player->pflags &= ~PF_CARRIED; */ - if (tmthing->player->spectator || thing->player->spectator) - thing->player->pflags &= ~PF_CARRIED; - else - { - if (thing->player-players == consoleplayer && botingame) - CV_SetValue(&cv_analog2, false); - P_ResetPlayer(thing->player); - P_SetTarget(&thing->tracer, tmthing); - thing->player->pflags |= PF_CARRIED; - S_StartSound(thing, sfx_s3k4a); - P_UnsetThingPosition(thing); - thing->x = tmthing->x; - thing->y = tmthing->y; - P_SetThingPosition(thing); - } - } - else { - if (thing->player-players == consoleplayer && botingame) - CV_SetValue(&cv_analog2, true); - thing->player->pflags &= ~PF_CARRIED; - } - } + P_DoTailsCarry(thing->player, tmthing->player); return true; } } @@ -882,114 +873,33 @@ static boolean PIT_CheckThing(mobj_t *thing) if (thing->player) { - if (tmthing->eflags & MFE_VERTICALFLIP) //doesn't matter what gravity player's following! Just do your stuff in YOUR direction only + // Doesn't matter what gravity player's following! Just do your stuff in YOUR direction only + if (tmthing->eflags & MFE_VERTICALFLIP + && (tmthing->z + tmthing->height + tmthing->momz > thing->z + || tmthing->z + tmthing->height + tmthing->momz >= thing->z + thing->height)) + ; + else if (!(tmthing->eflags & MFE_VERTICALFLIP) + && (tmthing->z + tmthing->momz > thing->z + thing->height + || tmthing->z + tmthing->momz <= thing->z)) + ; + else if (P_IsObjectOnGround(thing) + && !P_IsObjectOnGround(tmthing) // Don't crush if the monitor is on the ground... + && (tmthing->flags & MF_SOLID)) { - // Objects kill you if it falls from above. - if (tmthing->z + tmthing->height + tmthing->momz >= thing->z - && tmthing->z + tmthing->height + tmthing->momz < thing->z + thing->height - && P_IsObjectOnGround(thing) - && !P_IsObjectOnGround(tmthing) // Don't crush if the monitor is on the ground... - && (tmthing->flags & MF_SOLID)) + if (tmthing->flags & (MF_MONITOR|MF_PUSHABLE)) { - if (tmthing->flags & (MF_MONITOR|MF_PUSHABLE)) - { - if (thing != tmthing->target) - P_DamageMobj(thing, tmthing, tmthing->target, 10000); + // Objects kill you if it falls from above. + if (thing != tmthing->target) + P_DamageMobj(thing, tmthing, tmthing->target, 10000); - tmthing->momz = -tmthing->momz/2; // Bounce, just for fun! - // The tmthing->target allows the pusher of the object - // to get the point if he topples it on an opponent. - } - } - - if (thing->z + thing->height <= tmthing->z + tmthing->height && !(thing->state == &states[thing->info->painstate])) // Stuff where da player don't gotta move - { - switch (tmthing->type) - { - case MT_FAN: // fan - if (thing->z + thing->height >= tmthing->z + tmthing->height - (tmthing->health << FRACBITS) && thing->momz > -FixedMul(tmthing->info->mass, tmthing->scale) && !(thing->player->climbing || (thing->player->pflags & PF_GLIDING))) - { - thing->momz -= FixedMul(tmthing->info->mass/4, tmthing->scale); - - if (thing->momz < -FixedMul(tmthing->info->mass, tmthing->scale)) - thing->momz = -FixedMul(tmthing->info->mass, tmthing->scale); - - if (!thing->player->powers[pw_tailsfly]) - { - P_ResetPlayer(thing->player); - if (thing->player->panim != PA_FALL) - P_SetPlayerMobjState(thing, S_PLAY_FALL1); - } - } - break; - case MT_STEAM: // Steam - if (tmthing->state == &states[S_STEAM1] && thing->z + thing->height >= tmthing->z + tmthing->height - FixedMul(16*FRACUNIT, tmthing->scale)) // Only when it bursts - { - thing->momz = -FixedMul(tmthing->info->mass, FixedSqrt(FixedMul(tmthing->scale, thing->scale))); - P_ResetPlayer(thing->player); - if (thing->player->panim != PA_FALL) - P_SetPlayerMobjState(thing, S_PLAY_FALL1); - } - break; - default: - break; - } + tmthing->momz = -tmthing->momz/2; // Bounce, just for fun! + // The tmthing->target allows the pusher of the object + // to get the point if he topples it on an opponent. } } - else - { - // Objects kill you if it falls from above. - if (tmthing->z + tmthing->momz <= thing->z + thing->height - && tmthing->z + tmthing->momz > thing->z - && P_IsObjectOnGround(thing) - && !P_IsObjectOnGround(tmthing) // Don't crush if the monitor is on the ground... - && (tmthing->flags & MF_SOLID)) - { - if (tmthing->flags & (MF_MONITOR|MF_PUSHABLE)) - { - if (thing != tmthing->target) - P_DamageMobj(thing, tmthing, tmthing->target, 10000); - tmthing->momz = -tmthing->momz/2; // Bounce, just for fun! - // The tmthing->target allows the pusher of the object - // to get the point if he topples it on an opponent. - } - } - - if (thing->z >= tmthing->z && !(thing->state == &states[thing->info->painstate])) // Stuff where da player don't gotta move - { - switch (tmthing->type) - { - case MT_FAN: // fan - if (thing->z <= tmthing->z + (tmthing->health << FRACBITS) && thing->momz < FixedMul(tmthing->info->mass, tmthing->scale) && !(thing->player->climbing || (thing->player->pflags & PF_GLIDING))) - { - thing->momz += FixedMul(tmthing->info->mass/4, tmthing->scale); - - if (thing->momz > FixedMul(tmthing->info->mass, tmthing->scale)) - thing->momz = FixedMul(tmthing->info->mass, tmthing->scale); - - if (!thing->player->powers[pw_tailsfly]) - { - P_ResetPlayer(thing->player); - if (thing->player->panim != PA_FALL) - P_SetPlayerMobjState(thing, S_PLAY_FALL1); - } - } - break; - case MT_STEAM: // Steam - if (tmthing->state == &states[S_STEAM1] && thing->z <= tmthing->z + FixedMul(16*FRACUNIT, tmthing->scale)) // Only when it bursts - { - thing->momz = FixedMul(tmthing->info->mass, FixedSqrt(FixedMul(tmthing->scale, thing->scale))); - P_ResetPlayer(thing->player); - if (thing->player->panim != PA_FALL) - P_SetPlayerMobjState(thing, S_PLAY_FALL1); - } - break; - default: - break; - } - } - } + if (tmthing->type == MT_FAN || tmthing->type == MT_STEAM) + P_DoFanAndGasJet(tmthing, thing); } if (tmthing->player) // Is the moving/interacting object the player? @@ -997,72 +907,8 @@ static boolean PIT_CheckThing(mobj_t *thing) if (!tmthing->health) return true; - if ((thing->eflags & MFE_VERTICALFLIP) && tmthing->z + tmthing->height <= thing->z + thing->height && !(tmthing->state == &states[tmthing->info->painstate])) - { - switch (thing->type) - { - case MT_FAN: // fan - if (tmthing->z + tmthing->height >= thing->z + thing->height - (thing->health << FRACBITS) && tmthing->momz > -FixedMul(thing->info->mass, thing->scale) && !(tmthing->player->climbing || (tmthing->player->pflags & PF_GLIDING))) - { - tmthing->momz -= FixedMul(thing->info->mass/4, thing->scale); - - if (tmthing->momz < -FixedMul(thing->info->mass, thing->scale)) - tmthing->momz = -FixedMul(thing->info->mass, thing->scale); - - if (!tmthing->player->powers[pw_tailsfly]) - { - P_ResetPlayer(tmthing->player); - if (tmthing->player->panim != PA_FALL) - P_SetPlayerMobjState(tmthing, S_PLAY_FALL1); - } - } - break; - case MT_STEAM: // Steam - if (thing->state == &states[S_STEAM1] && tmthing->z + tmthing->height >= thing->z + thing->height - FixedMul(16*FRACUNIT, thing->scale)) // Only when it bursts - { - tmthing->momz = -FixedMul(thing->info->mass, FixedSqrt(FixedMul(thing->scale, tmthing->scale))); - P_ResetPlayer(tmthing->player); - if (tmthing->player->panim != PA_FALL) - P_SetPlayerMobjState(tmthing, S_PLAY_FALL1); - } - break; - default: - break; - } - } - else if (!(thing->eflags & MFE_VERTICALFLIP) && tmthing->z >= thing->z && !(tmthing->state == &states[tmthing->info->painstate])) - { - switch (thing->type) - { - case MT_FAN: // fan - if (tmthing->z <= thing->z + (thing->health << FRACBITS) && tmthing->momz < FixedMul(thing->info->mass, thing->scale) && !(tmthing->player->climbing || (tmthing->player->pflags & PF_GLIDING))) - { - tmthing->momz += FixedMul(thing->info->mass/4, thing->scale); - - if (tmthing->momz > FixedMul(thing->info->mass, thing->scale)) - tmthing->momz = FixedMul(thing->info->mass, thing->scale); - - if (!tmthing->player->powers[pw_tailsfly]) - { - P_ResetPlayer(tmthing->player); - if (tmthing->player->panim != PA_FALL) - P_SetPlayerMobjState(tmthing, S_PLAY_FALL1); - } - } - break; - case MT_STEAM: // Steam - if (thing->state == &states[S_STEAM1] && tmthing->z <= thing->z + FixedMul(16*FRACUNIT, thing->scale)) // Only when it bursts - { - tmthing->momz = FixedMul(thing->info->mass, FixedSqrt(FixedMul(thing->scale, tmthing->scale))); - P_ResetPlayer(tmthing->player); - if (tmthing->player->panim != PA_FALL) - P_SetPlayerMobjState(tmthing, S_PLAY_FALL1); - } - break; - default: - break; - } - } + if (thing->type == MT_FAN || thing->type == MT_STEAM) + P_DoFanAndGasJet(thing, tmthing); // Are you touching the side of the object you're interacting with? if (thing->z - FixedMul(FRACUNIT, thing->scale) <= tmthing->z + tmthing->height @@ -1104,6 +950,8 @@ static boolean PIT_CheckThing(mobj_t *thing) else if ((thing->flags & (MF_SOLID|MF_NOCLIP)) == MF_SOLID && (tmthing->flags & (MF_SOLID|MF_NOCLIP)) == MF_SOLID) { + fixed_t topz, tmtopz; + if (tmthing->eflags & MFE_VERTICALFLIP) { // pass under @@ -1415,8 +1263,8 @@ boolean P_CheckPosition(mobj_t *thing, fixed_t x, fixed_t y) ; else if (thing->type == MT_SKIM && (rover->flags & FF_SWIMMABLE)) ; - else if (!((((rover->flags & FF_BLOCKPLAYER) && thing->player) - || ((rover->flags & FF_BLOCKOTHERS) && !thing->player)) + else if (!((rover->flags & FF_BLOCKPLAYER && thing->player) + || (rover->flags & FF_BLOCKOTHERS && !thing->player) || rover->flags & FF_QUICKSAND)) continue; @@ -1450,16 +1298,21 @@ boolean P_CheckPosition(mobj_t *thing, fixed_t x, fixed_t y) } } + // The bounding box is extended by MAXRADIUS + // because mobj_ts are grouped into mapblocks + // based on their origin point, and can overlap + // into adjacent blocks by up to MAXRADIUS units. + + xl = (unsigned)(tmbbox[BOXLEFT] - bmaporgx - MAXRADIUS)>>MAPBLOCKSHIFT; + xh = (unsigned)(tmbbox[BOXRIGHT] - bmaporgx + MAXRADIUS)>>MAPBLOCKSHIFT; + yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy - MAXRADIUS)>>MAPBLOCKSHIFT; + yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy + MAXRADIUS)>>MAPBLOCKSHIFT; + #ifdef POLYOBJECTS // Check polyobjects and see if tmfloorz/tmceilingz need to be altered { validcount++; - xl = (unsigned)(tmbbox[BOXLEFT] - bmaporgx - MAXRADIUS)>>MAPBLOCKSHIFT; - xh = (unsigned)(tmbbox[BOXRIGHT] - bmaporgx + MAXRADIUS)>>MAPBLOCKSHIFT; - yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy - MAXRADIUS)>>MAPBLOCKSHIFT; - yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy + MAXRADIUS)>>MAPBLOCKSHIFT; - for (by = yl; by <= yh; by++) for (bx = xl; bx <= xh; bx++) { @@ -1533,15 +1386,6 @@ boolean P_CheckPosition(mobj_t *thing, fixed_t x, fixed_t y) return true; // Check things first, possibly picking things up. - // The bounding box is extended by MAXRADIUS - // because mobj_ts are grouped into mapblocks - // based on their origin point, and can overlap - // into adjacent blocks by up to MAXRADIUS units. - - xl = (unsigned)(tmbbox[BOXLEFT] - bmaporgx - MAXRADIUS)>>MAPBLOCKSHIFT; - xh = (unsigned)(tmbbox[BOXRIGHT] - bmaporgx + MAXRADIUS)>>MAPBLOCKSHIFT; - yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy - MAXRADIUS)>>MAPBLOCKSHIFT; - yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy + MAXRADIUS)>>MAPBLOCKSHIFT; // MF_NOCLIPTHING: used by camera to not be blocked by things if (!(thing->flags & MF_NOCLIPTHING)) @@ -1671,16 +1515,21 @@ boolean P_CheckCameraPosition(fixed_t x, fixed_t y, camera_t *thiscam) } } + // The bounding box is extended by MAXRADIUS + // because mobj_ts are grouped into mapblocks + // based on their origin point, and can overlap + // into adjacent blocks by up to MAXRADIUS units. + + xl = (unsigned)(tmbbox[BOXLEFT] - bmaporgx)>>MAPBLOCKSHIFT; + xh = (unsigned)(tmbbox[BOXRIGHT] - bmaporgx)>>MAPBLOCKSHIFT; + yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT; + yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT; + #ifdef POLYOBJECTS // Check polyobjects and see if tmfloorz/tmceilingz need to be altered { validcount++; - xl = (unsigned)(tmbbox[BOXLEFT] - bmaporgx)>>MAPBLOCKSHIFT; - xh = (unsigned)(tmbbox[BOXRIGHT] - bmaporgx)>>MAPBLOCKSHIFT; - yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT; - yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT; - for (by = yl; by <= yh; by++) for (bx = xl; bx <= xh; bx++) { @@ -1749,18 +1598,7 @@ boolean P_CheckCameraPosition(fixed_t x, fixed_t y, camera_t *thiscam) } #endif - // Check things. - // The bounding box is extended by MAXRADIUS - // because mobj_ts are grouped into mapblocks - // based on their origin point, and can overlap - // into adjacent blocks by up to MAXRADIUS units. - // check lines - xl = (unsigned)(tmbbox[BOXLEFT] - bmaporgx)>>MAPBLOCKSHIFT; - xh = (unsigned)(tmbbox[BOXRIGHT] - bmaporgx)>>MAPBLOCKSHIFT; - yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT; - yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT; - for (bx = xl; bx <= xh; bx++) for (by = yl; by <= yh; by++) if (!P_BlockLinesIterator(bx, by, PIT_CheckCameraLine)) diff --git a/src/p_maputl.c b/src/p_maputl.c index d46080abb..48dd54e8d 100644 --- a/src/p_maputl.c +++ b/src/p_maputl.c @@ -538,8 +538,14 @@ void P_LineOpening(line_t *linedef) // Check for frontsector's fake floors for (rover = front->ffloors; rover; rover = rover->next) { - if (!(rover->flags & FF_EXISTS) || !(((rover->flags & FF_BLOCKPLAYER) && tmthing->player) - || ((rover->flags & FF_BLOCKOTHERS) && !tmthing->player))) continue; + if (!(rover->flags & FF_EXISTS)) + continue; + + if (tmthing->player && (P_CheckSolidLava(tmthing, rover) || P_CanRunOnWater(tmthing->player, rover))) + ; + else if (!((rover->flags & FF_BLOCKPLAYER && tmthing->player) + || (rover->flags & FF_BLOCKOTHERS && !tmthing->player))) + continue; delta1 = abs(tmthing->z - (*rover->bottomheight + ((*rover->topheight - *rover->bottomheight)/2))); delta2 = abs(thingtop - (*rover->bottomheight + ((*rover->topheight - *rover->bottomheight)/2))); @@ -564,8 +570,14 @@ void P_LineOpening(line_t *linedef) // Check for backsectors fake floors for (rover = back->ffloors; rover; rover = rover->next) { - if (!(rover->flags & FF_EXISTS) || !(((rover->flags & FF_BLOCKPLAYER) && tmthing->player) - || ((rover->flags & FF_BLOCKOTHERS) && !tmthing->player))) continue; + if (!(rover->flags & FF_EXISTS)) + continue; + + if (tmthing->player && (P_CheckSolidLava(tmthing, rover) || P_CanRunOnWater(tmthing->player, rover))) + ; + else if (!((rover->flags & FF_BLOCKPLAYER && tmthing->player) + || (rover->flags & FF_BLOCKOTHERS && !tmthing->player))) + continue; delta1 = abs(tmthing->z - (*rover->bottomheight + ((*rover->topheight - *rover->bottomheight)/2))); delta2 = abs(thingtop - (*rover->bottomheight + ((*rover->topheight - *rover->bottomheight)/2))); diff --git a/src/p_mobj.c b/src/p_mobj.c index 1ee30fbc7..e85e25b05 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -2030,6 +2030,7 @@ static void P_PlayerZMovement(mobj_t *mo) // Check if we're on a polyobject // that triggers a linedef executor. msecnode_t *node; + boolean stopmovecut = false; for (node = mo->touching_sectorlist; node; node = node->m_snext) { @@ -2051,6 +2052,18 @@ static void P_PlayerZMovement(mobj_t *mo) while(po) { + if (!P_MobjInsidePolyobj(po, mo)) + { + po = (polyobj_t *)(po->link.next); + continue; + } + + polysec = po->lines[0]->backsector; + + // Moving polyobjects should act like conveyors if the player lands on one. (I.E. none of the momentum cut thing below) -Red + if ((mo->z == polysec->ceilingheight || mo->z+mo->height == polysec->floorheight) && (po->flags & POF_SOLID) && po->thinker) + stopmovecut = true; + if (!(po->flags & POF_LDEXEC) || !(po->flags & POF_SOLID)) { @@ -2058,14 +2071,7 @@ static void P_PlayerZMovement(mobj_t *mo) continue; } - if (!P_MobjInsidePolyobj(po, mo)) - { - po = (polyobj_t *)(po->link.next); - continue; - } - // We're inside it! Yess... - polysec = po->lines[0]->backsector; if (mo->z == polysec->ceilingheight) { @@ -2080,6 +2086,8 @@ static void P_PlayerZMovement(mobj_t *mo) } } } + + if (!stopmovecut) #endif // Cut momentum in half when you hit the ground and @@ -5761,6 +5769,29 @@ void P_MobjThinker(mobj_t *mobj) case MT_SEED: mobj->momz = mobj->info->speed; break; + case MT_ROCKCRUMBLE1: + case MT_ROCKCRUMBLE2: + case MT_ROCKCRUMBLE3: + case MT_ROCKCRUMBLE4: + case MT_ROCKCRUMBLE5: + case MT_ROCKCRUMBLE6: + case MT_ROCKCRUMBLE7: + case MT_ROCKCRUMBLE8: + case MT_ROCKCRUMBLE9: + case MT_ROCKCRUMBLE10: + case MT_ROCKCRUMBLE11: + case MT_ROCKCRUMBLE12: + case MT_ROCKCRUMBLE13: + case MT_ROCKCRUMBLE14: + case MT_ROCKCRUMBLE15: + case MT_ROCKCRUMBLE16: + if (mobj->z <= P_FloorzAtPos(mobj->x, mobj->y, mobj->z, mobj->height) + && mobj->state != &states[mobj->info->deathstate]) + { + P_SetMobjState(mobj, mobj->info->deathstate); + return; + } + break; default: if (mobj->fuse) { // Scenery object fuse! Very basic! @@ -5951,29 +5982,6 @@ void P_MobjThinker(mobj_t *mobj) } else switch (mobj->type) { - case MT_ROCKCRUMBLE1: - case MT_ROCKCRUMBLE2: - case MT_ROCKCRUMBLE3: - case MT_ROCKCRUMBLE4: - case MT_ROCKCRUMBLE5: - case MT_ROCKCRUMBLE6: - case MT_ROCKCRUMBLE7: - case MT_ROCKCRUMBLE8: - case MT_ROCKCRUMBLE9: - case MT_ROCKCRUMBLE10: - case MT_ROCKCRUMBLE11: - case MT_ROCKCRUMBLE12: - case MT_ROCKCRUMBLE13: - case MT_ROCKCRUMBLE14: - case MT_ROCKCRUMBLE15: - case MT_ROCKCRUMBLE16: - if (mobj->z <= P_FloorzAtPos(mobj->x, mobj->y, mobj->z, mobj->height) - && mobj->state != &states[mobj->info->deathstate]) - { - P_SetMobjState(mobj, mobj->info->deathstate); - return; - } - break; case MT_EMERALDSPAWN: if (mobj->threshold) { diff --git a/src/p_polyobj.c b/src/p_polyobj.c index b6d7caa9c..9c955c97b 100644 --- a/src/p_polyobj.c +++ b/src/p_polyobj.c @@ -142,6 +142,16 @@ FUNCINLINE static ATTRINLINE void Polyobj_vecSub2(vertex_t *dst, vertex_t *v1, v dst->y = v1->y - v2->y; } +// Add the polyobject's thinker to the thinker list +// Unlike P_AddThinker, this adds it to the front of the list instead of the back, so that carrying physics can work right. -Red +FUNCINLINE static ATTRINLINE void PolyObj_AddThinker(thinker_t *th) +{ + thinkercap.next->prev = th; + th->next = thinkercap.next; + th->prev = &thinkercap; + thinkercap.next = th; +} + // // P_PointInsidePolyobj // @@ -573,7 +583,7 @@ static void Polyobj_spawnPolyObj(INT32 num, mobj_t *spawnSpot, INT32 id) // set to default thrust; may be modified by attached thinkers // TODO: support customized thrust? po->thrust = FRACUNIT; - po->flags = 0; + po->spawnflags = po->flags = 0; // 1. Search segs for "line start" special with tag matching this // polyobject's id number. If found, iterate through segs which @@ -613,6 +623,8 @@ static void Polyobj_spawnPolyObj(INT32 num, mobj_t *spawnSpot, INT32 id) if (seg->linedef->flags & ML_NOCLIMB) // Has a linedef executor po->flags |= POF_LDEXEC; + po->spawnflags = po->flags; // save original flags to reference later for netgames! + Polyobj_findSegs(po, seg); po->parent = parentID; if (po->parent == po->id) // do not allow a self-reference @@ -966,6 +978,38 @@ static void Polyobj_pushThing(polyobj_t *po, line_t *line, mobj_t *mo) } } +// +// Polyobj_slideThing +// +// Moves an object resting on top of a polyobject by (x, y). Template function to make alteration easier. +// +static void Polyobj_slideThing(mobj_t *mo, fixed_t dx, fixed_t dy) +{ + if (mo->player) { // Do something similar to conveyor movement. -Red + mo->player->cmomx += dx; + mo->player->cmomy += dy; + + dx = FixedMul(dx, CARRYFACTOR); + dy = FixedMul(dy, CARRYFACTOR); + + mo->player->cmomx -= dx; + mo->player->cmomy -= dy; + + if (mo->player->pflags & PF_SPINNING && (mo->player->rmomx || mo->player->rmomy) && !(mo->player->pflags & PF_STARTDASH)) { +#define SPINMULT 5184 // Consider this a substitute for properly calculating FRACUNIT-friction. I'm tired. -Red + dx = FixedMul(dx, SPINMULT); + dy = FixedMul(dy, SPINMULT); +#undef SPINMULT + } + + mo->momx += dx; + mo->momy += dy; + + mo->player->onconveyor = 1; + } else + P_TryMove(mo, mo->x+dx, mo->y+dy, true); +} + // // Polyobj_carryThings // @@ -1015,7 +1059,7 @@ static void Polyobj_carryThings(polyobj_t *po, fixed_t dx, fixed_t dy) if (!P_MobjInsidePolyobj(po, mo)) continue; - P_TryMove(mo, mo->x+dx, mo->y+dy, true); + Polyobj_slideThing(mo, dx, dy); } } } @@ -1206,12 +1250,91 @@ static void Polyobj_rotateLine(line_t *ld) } } +// +// Polyobj_rotateThings +// +// Causes objects resting on top of the rotating polyobject to 'ride' with its movement. +// +static void Polyobj_rotateThings(polyobj_t *po, vertex_t origin, angle_t delta, UINT8 turnthings) +{ + static INT32 pomovecount = 10000; + INT32 x, y; + + pomovecount++; + + if (!(po->flags & POF_SOLID)) + return; + + for (y = po->blockbox[BOXBOTTOM]; y <= po->blockbox[BOXTOP]; ++y) + { + for (x = po->blockbox[BOXLEFT]; x <= po->blockbox[BOXRIGHT]; ++x) + { + mobj_t *mo; + + if (x < 0 || y < 0 || x >= bmapwidth || y >= bmapheight) + continue; + + mo = blocklinks[y * bmapwidth + x]; + + for (; mo; mo = mo->bnext) + { + if (mo->lastlook == pomovecount) + continue; + + mo->lastlook = pomovecount; + + // always push players even if not solid + if (!((mo->flags & MF_SOLID) || mo->player)) + continue; + + if (mo->flags & MF_NOCLIP) + continue; + + if ((mo->eflags & MFE_VERTICALFLIP) && mo->z + mo->height != po->lines[0]->backsector->floorheight) + continue; + + if (!(mo->eflags & MFE_VERTICALFLIP) && mo->z != po->lines[0]->backsector->ceilingheight) + continue; + + if (!P_MobjInsidePolyobj(po, mo)) + continue; + + { + fixed_t newxoff, newyoff; + angle_t angletoobj = R_PointToAngle2(origin.x, origin.y, mo->x, mo->y); + fixed_t disttoobj = R_PointToDist2(origin.x, origin.y, mo->x, mo->y); + + if (mo->player) // Hack to fix players sliding off of spinning polys -Red + { + disttoobj = FixedMul(disttoobj, 0xfe40); + } + + angletoobj += delta; + angletoobj >>= ANGLETOFINESHIFT; + newxoff = FixedMul(FINECOSINE(angletoobj), disttoobj); + newyoff = FixedMul(FINESINE(angletoobj), disttoobj); + + Polyobj_slideThing(mo, origin.x+newxoff-mo->x, origin.y+newyoff-mo->y); + + if (turnthings == 2 || (turnthings == 1 && !mo->player)) { + mo->angle += delta; + if (mo->player == &players[consoleplayer]) + localangle = mo->angle; + else if (mo->player == &players[secondarydisplayplayer]) + localangle2 = mo->angle; + } + } + } + } + } +} + // // Polyobj_rotate // // Rotates a polyobject around its start point. // -static boolean Polyobj_rotate(polyobj_t *po, angle_t delta) +static boolean Polyobj_rotate(polyobj_t *po, angle_t delta, UINT8 turnthings) { size_t i; angle_t angle; @@ -1247,6 +1370,8 @@ static boolean Polyobj_rotate(polyobj_t *po, angle_t delta) for (i = 0; i < po->numLines; ++i) hitflags |= Polyobj_clipThings(po, po->lines[i]); + Polyobj_rotateThings(po, origin, delta, turnthings); + if (hitflags & 2) { // reset vertices to previous positions @@ -1466,7 +1591,7 @@ void Polyobj_MoveOnLoad(polyobj_t *po, angle_t angle, fixed_t x, fixed_t y) fixed_t dx, dy; // first, rotate to the saved angle - Polyobj_rotate(po, angle); + Polyobj_rotate(po, angle, false); // determine component distances to translate dx = x - po->spawnSpot.x; @@ -1513,7 +1638,7 @@ void T_PolyObjRotate(polyrotate_t *th) // rotate by 'speed' angle per frame // if distance == -1, this polyobject rotates perpetually - if (Polyobj_rotate(po, th->speed) && th->distance != -1) + if (Polyobj_rotate(po, th->speed, th->turnobjs) && th->distance != -1) { INT32 avel = abs(th->speed); @@ -1551,8 +1676,21 @@ void T_PolyObjRotate(polyrotate_t *th) FUNCINLINE static ATTRINLINE void Polyobj_componentSpeed(INT32 resVel, INT32 angle, fixed_t *xVel, fixed_t *yVel) { - *xVel = FixedMul(resVel, FINECOSINE(angle)); - *yVel = FixedMul(resVel, FINESINE(angle)); + if (angle == 0) + { + *xVel = resVel; + *yVel = 0; + } + else if (angle == (INT32)(ANGLE_90>>ANGLETOFINESHIFT)) + { + *xVel = 0; + *yVel = resVel; + } + else + { + *xVel = FixedMul(resVel, FINECOSINE(angle)); + *yVel = FixedMul(resVel, FINESINE(angle)); + } } void T_PolyObjMove(polymove_t *th) @@ -1694,15 +1832,16 @@ void T_PolyObjWaypoint(polywaypoint_t *th) if (dist>>FRACBITS <= P_AproxDistance(P_AproxDistance(target->x - adjustx - momx, target->y - adjusty - momy), target->z - adjustz - momz)>>FRACBITS) { // If further away, set XYZ of polyobject to waypoint location - fixed_t amtx, amty; + fixed_t amtx, amty, amtz; + fixed_t diffz; amtx = (target->x - th->diffx) - po->centerPt.x; amty = (target->y - th->diffy) - po->centerPt.y; Polyobj_moveXY(po, amtx, amty); // TODO: use T_MovePlane - amtx = (po->lines[0]->backsector->ceilingheight - po->lines[0]->backsector->floorheight)/2; - po->lines[0]->backsector->floorheight = target->z - amtx; - po->lines[0]->backsector->ceilingheight = target->z + amtx; - + amtz = (po->lines[0]->backsector->ceilingheight - po->lines[0]->backsector->floorheight)/2; + diffz = po->lines[0]->backsector->floorheight - (target->z - amtz); + po->lines[0]->backsector->floorheight = target->z - amtz; + po->lines[0]->backsector->ceilingheight = target->z + amtz; // Apply action to mirroring polyobjects as well start = 0; while ((po = Polyobj_GetChild(oldpo, &start))) @@ -1712,9 +1851,8 @@ void T_PolyObjWaypoint(polywaypoint_t *th) Polyobj_moveXY(po, amtx, amty); // TODO: use T_MovePlane - amtx = (po->lines[0]->backsector->ceilingheight - po->lines[0]->backsector->floorheight)/2; - po->lines[0]->backsector->floorheight = target->z - amtx; - po->lines[0]->backsector->ceilingheight = target->z + amtx; + po->lines[0]->backsector->floorheight += diffz; // move up/down by same amount as the parent did + po->lines[0]->backsector->ceilingheight += diffz; } po = oldpo; @@ -2035,7 +2173,7 @@ void T_PolyDoorSwing(polyswingdoor_t *th) // rotate by 'speed' angle per frame // if distance == -1, this polyobject rotates perpetually - if (Polyobj_rotate(po, th->speed) && th->distance != -1) + if (Polyobj_rotate(po, th->speed, false) && th->distance != -1) { INT32 avel = abs(th->speed); @@ -2091,6 +2229,46 @@ void T_PolyDoorSwing(polyswingdoor_t *th) } } +// T_PolyObjDisplace: shift a polyobject based on a control sector's heights. -Red +void T_PolyObjDisplace(polydisplace_t *th) +{ + polyobj_t *po = Polyobj_GetForNum(th->polyObjNum); + fixed_t newheights, delta; + fixed_t dx, dy; + + if (!po) +#ifdef RANGECHECK + I_Error("T_PolyDoorSwing: thinker has invalid id %d\n", th->polyObjNum); +#else + { + CONS_Debug(DBG_POLYOBJ, "T_PolyDoorSwing: thinker with invalid id %d removed.\n", th->polyObjNum); + P_RemoveThinkerDelayed(&th->thinker); + return; + } +#endif + + // check for displacement due to override and reattach when possible + if (po->thinker == NULL) + { + po->thinker = &th->thinker; + + // reset polyobject's thrust + po->thrust = FRACUNIT; + } + + newheights = th->controlSector->floorheight+th->controlSector->ceilingheight; + delta = newheights-th->oldHeights; + + if (!delta) + return; + + dx = FixedMul(th->dx, delta); + dy = FixedMul(th->dy, delta); + + if (Polyobj_moveXY(po, dx, dy)) + th->oldHeights = newheights; +} + static inline INT32 Polyobj_AngSpeed(INT32 speed) { return (speed*ANG1)>>3; // no FixedAngle() @@ -2122,7 +2300,7 @@ INT32 EV_DoPolyObjRotate(polyrotdata_t *prdata) // create a new thinker th = Z_Malloc(sizeof(polyrotate_t), PU_LEVSPEC, NULL); th->thinker.function.acp1 = (actionf_p1)T_PolyObjRotate; - P_AddThinker(&th->thinker); + PolyObj_AddThinker(&th->thinker); po->thinker = &th->thinker; // set fields @@ -2149,10 +2327,15 @@ INT32 EV_DoPolyObjRotate(polyrotdata_t *prdata) oldpo = po; + th->turnobjs = prdata->turnobjs; + // apply action to mirroring polyobjects as well start = 0; while ((po = Polyobj_GetChild(oldpo, &start))) + { + prdata->polyObjNum = po->id; // change id to match child polyobject's EV_DoPolyObjRotate(prdata); + } // action was successful return 1; @@ -2182,7 +2365,7 @@ INT32 EV_DoPolyObjMove(polymovedata_t *pmdata) // create a new thinker th = Z_Malloc(sizeof(polymove_t), PU_LEVSPEC, NULL); th->thinker.function.acp1 = (actionf_p1)T_PolyObjMove; - P_AddThinker(&th->thinker); + PolyObj_AddThinker(&th->thinker); po->thinker = &th->thinker; // set fields @@ -2208,7 +2391,10 @@ INT32 EV_DoPolyObjMove(polymovedata_t *pmdata) // apply action to mirroring polyobjects as well start = 0; while ((po = Polyobj_GetChild(oldpo, &start))) + { + pmdata->polyObjNum = po->id; // change id to match child polyobject's EV_DoPolyObjMove(pmdata); + } // action was successful return 1; @@ -2240,7 +2426,7 @@ INT32 EV_DoPolyObjWaypoint(polywaypointdata_t *pwdata) // create a new thinker th = Z_Malloc(sizeof(polywaypoint_t), PU_LEVSPEC, NULL); th->thinker.function.acp1 = (actionf_p1)T_PolyObjWaypoint; - P_AddThinker(&th->thinker); + PolyObj_AddThinker(&th->thinker); po->thinker = &th->thinker; // set fields @@ -2382,7 +2568,7 @@ static void Polyobj_doSlideDoor(polyobj_t *po, polydoordata_t *doordata) // allocate and add a new slide door thinker th = Z_Malloc(sizeof(polyslidedoor_t), PU_LEVSPEC, NULL); th->thinker.function.acp1 = (actionf_p1)T_PolyDoorSlide; - P_AddThinker(&th->thinker); + PolyObj_AddThinker(&th->thinker); // point the polyobject to this thinker po->thinker = &th->thinker; @@ -2430,7 +2616,7 @@ static void Polyobj_doSwingDoor(polyobj_t *po, polydoordata_t *doordata) // allocate and add a new swing door thinker th = Z_Malloc(sizeof(polyswingdoor_t), PU_LEVSPEC, NULL); th->thinker.function.acp1 = (actionf_p1)T_PolyDoorSwing; - P_AddThinker(&th->thinker); + PolyObj_AddThinker(&th->thinker); // point the polyobject to this thinker po->thinker = &th->thinker; @@ -2492,6 +2678,52 @@ INT32 EV_DoPolyDoor(polydoordata_t *doordata) return 1; } +INT32 EV_DoPolyObjDisplace(polydisplacedata_t *prdata) +{ + polyobj_t *po; + polyobj_t *oldpo; + polydisplace_t *th; + INT32 start; + + if (!(po = Polyobj_GetForNum(prdata->polyObjNum))) + { + CONS_Debug(DBG_POLYOBJ, "EV_DoPolyObjRotate: bad polyobj %d\n", prdata->polyObjNum); + return 0; + } + + // don't allow line actions to affect bad polyobjects + if (po->isBad) + return 0; + + // create a new thinker + th = Z_Malloc(sizeof(polydisplace_t), PU_LEVSPEC, NULL); + th->thinker.function.acp1 = (actionf_p1)T_PolyObjDisplace; + PolyObj_AddThinker(&th->thinker); + po->thinker = &th->thinker; + + // set fields + th->polyObjNum = prdata->polyObjNum; + + th->controlSector = prdata->controlSector; + th->oldHeights = th->controlSector->floorheight+th->controlSector->ceilingheight; + + th->dx = prdata->dx; + th->dy = prdata->dy; + + oldpo = po; + + // apply action to mirroring polyobjects as well + start = 0; + while ((po = Polyobj_GetChild(oldpo, &start))) + { + prdata->polyObjNum = po->id; // change id to match child polyobject's + EV_DoPolyObjDisplace(prdata); + } + + // action was successful + return 1; +} + void T_PolyObjFlag(polymove_t *th) { polyobj_t *po = Polyobj_GetForNum(th->polyObjNum); @@ -2567,7 +2799,7 @@ INT32 EV_DoPolyObjFlag(line_t *pfdata) // create a new thinker th = Z_Malloc(sizeof(polymove_t), PU_LEVSPEC, NULL); th->thinker.function.acp1 = (actionf_p1)T_PolyObjFlag; - P_AddThinker(&th->thinker); + PolyObj_AddThinker(&th->thinker); po->thinker = &th->thinker; // set fields @@ -2586,7 +2818,10 @@ INT32 EV_DoPolyObjFlag(line_t *pfdata) // apply action to mirroring polyobjects as well start = 0; while ((po = Polyobj_GetChild(oldpo, &start))) + { + pfdata->tag = po->id; EV_DoPolyObjFlag(pfdata); + } // action was successful return 1; diff --git a/src/p_polyobj.h b/src/p_polyobj.h index 4e21f4a8c..71cf965e3 100644 --- a/src/p_polyobj.h +++ b/src/p_polyobj.h @@ -99,6 +99,9 @@ typedef struct polyobj_s UINT8 isBad; // a bad polyobject: should not be rendered/manipulated INT32 translucency; // index to translucency tables + + // these are saved for netgames, so do not let Lua touch these! + INT32 spawnflags; // Flags the polyobject originally spawned with } polyobj_t; // @@ -122,6 +125,7 @@ typedef struct polyrotate_s INT32 polyObjNum; // numeric id of polyobject (avoid C pointers here) INT32 speed; // speed of movement per frame INT32 distance; // distance to move + UINT8 turnobjs; // turn objects? 0=no, 1=everything but players, 2=everything } polyrotate_t; typedef struct polymove_s @@ -189,6 +193,17 @@ typedef struct polyswingdoor_s UINT8 closing; // if true, is closing } polyswingdoor_t; +typedef struct polydisplace_s +{ + thinker_t thinker; // must be first + + INT32 polyObjNum; + struct sector_s *controlSector; + fixed_t dx; + fixed_t dy; + fixed_t oldHeights; +} polydisplace_t; + // // Line Activation Data Structures // @@ -199,7 +214,8 @@ typedef struct polyrotdata_s INT32 direction; // direction of rotation INT32 speed; // angular speed INT32 distance; // distance to move - UINT8 overRide; // if true, will override any action on the object + UINT8 turnobjs; // rotate objects being carried? + UINT8 overRide; // if true, will override any action on the object } polyrotdata_t; typedef struct polymovedata_s @@ -208,7 +224,7 @@ typedef struct polymovedata_s fixed_t distance; // distance to move fixed_t speed; // linear speed angle_t angle; // angle of movement - UINT8 overRide; // if true, will override any action on the object + UINT8 overRide; // if true, will override any action on the object } polymovedata_t; typedef struct polywaypointdata_s @@ -239,6 +255,14 @@ typedef struct polydoordata_s INT32 delay; // delay time after opening } polydoordata_t; +typedef struct polydisplacedata_s +{ + INT32 polyObjNum; + struct sector_s *controlSector; + fixed_t dx; + fixed_t dy; +} polydisplacedata_t; + // // Functions // @@ -258,12 +282,14 @@ void T_PolyObjMove (polymove_t *); void T_PolyObjWaypoint (polywaypoint_t *); void T_PolyDoorSlide(polyslidedoor_t *); void T_PolyDoorSwing(polyswingdoor_t *); +void T_PolyObjDisplace (polydisplace_t *); void T_PolyObjFlag (polymove_t *); INT32 EV_DoPolyDoor(polydoordata_t *); INT32 EV_DoPolyObjMove(polymovedata_t *); INT32 EV_DoPolyObjWaypoint(polywaypointdata_t *); INT32 EV_DoPolyObjRotate(polyrotdata_t *); +INT32 EV_DoPolyObjDisplace(polydisplacedata_t *); INT32 EV_DoPolyObjFlag(struct line_s *); diff --git a/src/p_saveg.c b/src/p_saveg.c index 3392d1e24..bf64d9a2b 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -143,13 +143,13 @@ static inline void P_NetArchivePlayers(void) WRITEUINT16(save_p, players[i].flashcount); WRITEUINT32(save_p, players[i].score); - WRITEINT32(save_p, players[i].dashspeed); + WRITEFIXED(save_p, players[i].dashspeed); WRITEINT32(save_p, players[i].dashtime); WRITESINT8(save_p, players[i].lives); WRITESINT8(save_p, players[i].continues); WRITESINT8(save_p, players[i].xtralife); WRITEUINT8(save_p, players[i].gotcontinue); - WRITEINT32(save_p, players[i].speed); + WRITEFIXED(save_p, players[i].speed); WRITEUINT8(save_p, players[i].jumping); WRITEUINT8(save_p, players[i].secondjump); WRITEUINT8(save_p, players[i].fly1); @@ -172,8 +172,8 @@ static inline void P_NetArchivePlayers(void) ///////////////////// // Race Mode Stuff // ///////////////////// - WRITEINT32(save_p, players[i].numboxes); - WRITEINT32(save_p, players[i].totalring); + WRITEINT16(save_p, players[i].numboxes); + WRITEINT16(save_p, players[i].totalring); WRITEUINT32(save_p, players[i].realtime); WRITEUINT8(save_p, players[i].laps); @@ -211,7 +211,7 @@ static inline void P_NetArchivePlayers(void) WRITEUINT32(save_p, players[i].marebegunat); WRITEUINT32(save_p, players[i].startedtime); WRITEUINT32(save_p, players[i].finishedtime); - WRITEUINT16(save_p, players[i].finishedrings); + WRITEINT16(save_p, players[i].finishedrings); WRITEUINT32(save_p, players[i].marescore); WRITEUINT32(save_p, players[i].lastmarescore); WRITEUINT8(save_p, players[i].lastmare); @@ -318,13 +318,13 @@ static inline void P_NetUnArchivePlayers(void) players[i].flashcount = READUINT16(save_p); players[i].score = READUINT32(save_p); - players[i].dashspeed = READINT32(save_p); // dashing speed + players[i].dashspeed = READFIXED(save_p); // dashing speed players[i].dashtime = READINT32(save_p); // dashing speed players[i].lives = READSINT8(save_p); players[i].continues = READSINT8(save_p); // continues that player has acquired players[i].xtralife = READSINT8(save_p); // Ring Extra Life counter players[i].gotcontinue = READUINT8(save_p); // got continue from stage - players[i].speed = READINT32(save_p); // Player's speed (distance formula of MOMX and MOMY values) + players[i].speed = READFIXED(save_p); // Player's speed (distance formula of MOMX and MOMY values) players[i].jumping = READUINT8(save_p); // Jump counter players[i].secondjump = READUINT8(save_p); players[i].fly1 = READUINT8(save_p); // Tails flying @@ -347,8 +347,8 @@ static inline void P_NetUnArchivePlayers(void) ///////////////////// // Race Mode Stuff // ///////////////////// - players[i].numboxes = READINT32(save_p); // Number of item boxes obtained for Race Mode - players[i].totalring = READINT32(save_p); // Total number of rings obtained for Race Mode + players[i].numboxes = READINT16(save_p); // Number of item boxes obtained for Race Mode + players[i].totalring = READINT16(save_p); // Total number of rings obtained for Race Mode players[i].realtime = READUINT32(save_p); // integer replacement for leveltime players[i].laps = READUINT8(save_p); // Number of laps (optional) @@ -386,7 +386,7 @@ static inline void P_NetUnArchivePlayers(void) players[i].marebegunat = READUINT32(save_p); players[i].startedtime = READUINT32(save_p); players[i].finishedtime = READUINT32(save_p); - players[i].finishedrings = READUINT16(save_p); + players[i].finishedrings = READINT16(save_p); players[i].marescore = READUINT32(save_p); players[i].lastmarescore = READUINT32(save_p); players[i].lastmare = READUINT8(save_p); @@ -447,6 +447,7 @@ static inline void P_NetUnArchivePlayers(void) #define SD_LIGHT 0x10 #define SD_SPECIAL 0x20 #define SD_DIFF2 0x40 +#define SD_FFLOORS 0x80 // diff2 flags #define SD_FXOFFS 0x01 @@ -459,6 +460,7 @@ static inline void P_NetUnArchivePlayers(void) #define LD_FLAG 0x01 #define LD_SPECIAL 0x02 +#define LD_CLLCOUNT 0x04 #define LD_S1TEXOFF 0x08 #define LD_S1TOPTEX 0x10 #define LD_S1BOTTEX 0x20 @@ -515,23 +517,37 @@ static void P_NetArchiveWorld(void) if (ss->special != SHORT(ms->special)) diff |= SD_SPECIAL; - /// \todo this makes Flat Alignment (linetype 7) increase the savegame size! - if (ss->floor_xoffs != 0) + if (ss->floor_xoffs != ss->spawn_flr_xoffs) diff2 |= SD_FXOFFS; - if (ss->floor_yoffs != 0) + if (ss->floor_yoffs != ss->spawn_flr_yoffs) diff2 |= SD_FYOFFS; - if (ss->ceiling_xoffs != 0) + if (ss->ceiling_xoffs != ss->spawn_ceil_xoffs) diff2 |= SD_CXOFFS; - if (ss->ceiling_yoffs != 0) + if (ss->ceiling_yoffs != ss->spawn_ceil_yoffs) diff2 |= SD_CYOFFS; - if (ss->floorpic_angle != 0) + if (ss->floorpic_angle != ss->spawn_flrpic_angle) diff2 |= SD_FLOORANG; - if (ss->ceilingpic_angle != 0) + if (ss->ceilingpic_angle != ss->spawn_flrpic_angle) diff2 |= SD_CEILANG; if (ss->tag != SHORT(ms->tag)) diff2 |= SD_TAG; + // Check if any of the sector's FOFs differ from how they spawned + if (ss->ffloors) + { + ffloor_t *rover; + for (rover = ss->ffloors; rover; rover = rover->next) + { + if (rover->flags != rover->spawnflags + || rover->alpha != rover->spawnalpha) + { + diff |= SD_FFLOORS; // we found an FOF that changed! + break; // don't bother checking for more, we do that later + } + } + } + if (diff2) diff |= SD_DIFF2; @@ -573,6 +589,35 @@ static void P_NetArchiveWorld(void) WRITEANGLE(put, ss->floorpic_angle); if (diff2 & SD_CEILANG) WRITEANGLE(put, ss->ceilingpic_angle); + + // Special case: save the stats of all modified ffloors along with their ffloor "number"s + // we don't bother with ffloors that haven't changed, that would just add to savegame even more than is really needed + if (diff & SD_FFLOORS) + { + size_t j = 0; // ss->ffloors is saved as ffloor #0, ss->ffloors->next is #1, etc + ffloor_t *rover; + UINT8 fflr_diff; + for (rover = ss->ffloors; rover; rover = rover->next) + { + fflr_diff = 0; // reset diff flags + if (rover->flags != rover->spawnflags) + fflr_diff |= 1; + if (rover->alpha != rover->spawnalpha) + fflr_diff |= 2; + + if (fflr_diff) + { + WRITEUINT16(put, j); // save ffloor "number" + WRITEUINT8(put, fflr_diff); + if (fflr_diff & 1) + WRITEUINT16(put, rover->flags); + if (fflr_diff & 2) + WRITEINT16(put, rover->alpha); + } + j++; + } + WRITEUINT16(put, 0xffff); + } } } @@ -588,6 +633,9 @@ static void P_NetArchiveWorld(void) if (li->special != SHORT(mld->special)) diff |= LD_SPECIAL; + if (mld->special == 321 || mld->special == 322) // only reason li->callcount would be non-zero is if either of these are involved + diff |= LD_CLLCOUNT; + if (li->sidenum[0] != 0xffff) { si = &sides[li->sidenum[0]]; @@ -633,6 +681,8 @@ static void P_NetArchiveWorld(void) WRITEINT16(put, li->flags); if (diff & LD_SPECIAL) WRITEINT16(put, li->special); + if (diff & LD_CLLCOUNT) + WRITEINT16(put, li->callcount); si = &sides[li->sidenum[0]]; if (diff & LD_S1TEXOFF) @@ -732,6 +782,46 @@ static void P_NetUnArchiveWorld(void) sectors[i].floorpic_angle = READANGLE(get); if (diff2 & SD_CEILANG) sectors[i].ceilingpic_angle = READANGLE(get); + + if (diff & SD_FFLOORS) + { + UINT16 j = 0; // number of current ffloor in loop + UINT16 fflr_i; // saved ffloor "number" of next modified ffloor + UINT16 fflr_diff; // saved ffloor diff + ffloor_t *rover; + + rover = sectors[i].ffloors; + if (!rover) // it is assumed sectors[i].ffloors actually exists, but just in case... + I_Error("Sector does not have any ffloors!"); + + fflr_i = READUINT16(get); // get first modified ffloor's number ready + for (;;) // for some reason the usual for (rover = x; ...) thing doesn't work here? + { + if (fflr_i == 0xffff) // end of modified ffloors list, let's stop already + break; + // should NEVER need to be checked + //if (rover == NULL) + //break; + if (j != fflr_i) // this ffloor was not modified + { + j++; + rover = rover->next; + continue; + } + + fflr_diff = READUINT8(get); + + if (fflr_diff & 1) + rover->flags = READUINT16(get); + if (fflr_diff & 2) + rover->alpha = READINT16(get); + + fflr_i = READUINT16(get); // get next ffloor "number" ready + + j++; + rover = rover->next; + } + } } for (;;) @@ -754,6 +844,8 @@ static void P_NetUnArchiveWorld(void) li->flags = READINT16(get); if (diff & LD_SPECIAL) li->special = READINT16(get); + if (diff & LD_CLLCOUNT) + li->callcount = READINT16(get); si = &sides[li->sidenum[0]]; if (diff & LD_S1TEXOFF) @@ -869,6 +961,7 @@ typedef enum tc_polyslidedoor, tc_polyswingdoor, tc_polyflag, + tc_polydisplace, #endif tc_end } specials_e; @@ -1149,6 +1242,7 @@ static void SaveExecutorThinker(const thinker_t *th, const UINT8 type) WRITEUINT8(save_p, type); WRITEUINT32(save_p, SaveLine(ht->line)); WRITEUINT32(save_p, SaveMobjnum(ht->caller)); + WRITEUINT32(save_p, SaveSector(ht->sector)); WRITEINT32(save_p, ht->timer); } @@ -1269,6 +1363,17 @@ static void SavePolyswingdoorThinker(const thinker_t *th, const UINT8 type) WRITEUINT8(save_p, ht->closing); } +static void SavePolydisplaceThinker(const thinker_t *th, const UINT8 type) +{ + const polydisplace_t *ht = (const void *)th; + WRITEUINT8(save_p, type); + WRITEINT32(save_p, ht->polyObjNum); + WRITEUINT32(save_p, SaveSector(ht->controlSector)); + WRITEFIXED(save_p, ht->dx); + WRITEFIXED(save_p, ht->dy); + WRITEFIXED(save_p, ht->oldHeights); +} + #endif /* // @@ -1696,6 +1801,11 @@ static void P_NetArchiveThinkers(void) SavePolymoveThinker(th, tc_polyflag); continue; } + else if (th->function.acp1 == (actionf_p1)T_PolyObjDisplace) + { + SavePolydisplaceThinker(th, tc_polydisplace); + continue; + } #endif #ifdef PARANOIA else if (th->function.acv != P_RemoveThinkerDelayed) // wait garbage collection @@ -2057,6 +2167,7 @@ static inline void LoadExecutorThinker(actionf_p1 thinker) ht->thinker.function.acp1 = thinker; ht->line = LoadLine(READUINT32(save_p)); ht->caller = LoadMobj(READUINT32(save_p)); + ht->sector = LoadSector(READUINT32(save_p)); ht->timer = READINT32(save_p); P_AddThinker(&ht->thinker); } @@ -2183,6 +2294,23 @@ static inline void LoadPolyswingdoorThinker(actionf_p1 thinker) ht->closing = READUINT8(save_p); P_AddThinker(&ht->thinker); } + +// +// LoadPolydisplaceThinker +// +// Loads a polydisplace_t thinker +// +static inline void LoadPolydisplaceThinker(actionf_p1 thinker) +{ + polydisplace_t *ht = Z_Malloc(sizeof (*ht), PU_LEVSPEC, NULL); + ht->thinker.function.acp1 = thinker; + ht->polyObjNum = READINT32(save_p); + ht->controlSector = LoadSector(READUINT32(save_p)); + ht->dx = READFIXED(save_p); + ht->dy = READFIXED(save_p); + ht->oldHeights = READFIXED(save_p); + P_AddThinker(&ht->thinker); +} #endif /* @@ -2574,9 +2702,14 @@ static void P_NetUnArchiveThinkers(void) case tc_polyswingdoor: LoadPolyswingdoorThinker((actionf_p1)T_PolyDoorSwing); break; + case tc_polyflag: LoadPolymoveThinker((actionf_p1)T_PolyObjFlag); break; + + case tc_polydisplace: + LoadPolydisplaceThinker((actionf_p1)T_PolyObjDisplace); + break; #endif case tc_scroll: LoadScrollThinker((actionf_p1)T_Scroll); @@ -2617,13 +2750,29 @@ static void P_NetUnArchiveThinkers(void) // haleyjd 03/26/06: PolyObject saving code // #ifdef POLYOBJECTS +#define PD_FLAGS 0x01 +#define PD_TRANS 0x02 + static inline void P_ArchivePolyObj(polyobj_t *po) { + UINT8 diff = 0; WRITEINT32(save_p, po->id); WRITEANGLE(save_p, po->angle); WRITEFIXED(save_p, po->spawnSpot.x); WRITEFIXED(save_p, po->spawnSpot.y); + + if (po->flags != po->spawnflags) + diff |= PD_FLAGS; + if (po->translucency != 0) + diff |= PD_TRANS; + + WRITEUINT8(save_p, diff); + + if (diff & PD_FLAGS) + WRITEINT32(save_p, po->flags); + if (diff & PD_TRANS) + WRITEINT32(save_p, po->translucency); } static inline void P_UnArchivePolyObj(polyobj_t *po) @@ -2631,6 +2780,7 @@ static inline void P_UnArchivePolyObj(polyobj_t *po) INT32 id; UINT32 angle; fixed_t x, y; + UINT8 diff; // nullify all polyobject thinker pointers; // the thinkers themselves will fight over who gets the field @@ -2644,6 +2794,13 @@ static inline void P_UnArchivePolyObj(polyobj_t *po) x = READFIXED(save_p); y = READFIXED(save_p); + diff = READUINT8(save_p); + + if (diff & PD_FLAGS) + po->flags = READINT32(save_p); + if (diff & PD_TRANS) + po->translucency = READINT32(save_p); + // if the object is bad or isn't in the id hash, we can do nothing more // with it, so return now if (po->isBad || po != Polyobj_GetForNum(id)) @@ -2812,6 +2969,14 @@ static inline void P_NetArchiveSpecials(void) // Current global weather type WRITEUINT8(save_p, globalweather); + + if (metalplayback) // Is metal sonic running? + { + WRITEUINT8(save_p, 0x01); + G_SaveMetal(&save_p); + } + else + WRITEUINT8(save_p, 0x00); } // @@ -2851,6 +3016,9 @@ static void P_NetUnArchiveSpecials(void) if (curWeather != PRECIP_NONE) P_SwitchWeather(globalweather); } + + if (READUINT8(save_p) == 0x01) // metal sonic + G_LoadMetal(&save_p); } // ======================================================================= diff --git a/src/p_setup.c b/src/p_setup.c index b3e85966a..ca78db05a 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -642,7 +642,9 @@ static void P_LoadSectors(lumpnum_t lumpnum) ss->extra_colormap = NULL; ss->floor_xoffs = ss->ceiling_xoffs = ss->floor_yoffs = ss->ceiling_yoffs = 0; + ss->spawn_flr_xoffs = ss->spawn_ceil_xoffs = ss->spawn_flr_yoffs = ss->spawn_ceil_yoffs = 0; ss->floorpic_angle = ss->ceilingpic_angle = 0; + ss->spawn_flrpic_angle = ss->spawn_ceilpic_angle = 0; ss->bottommap = ss->midmap = ss->topmap = -1; ss->gravity = NULL; ss->cullheight = NULL; @@ -1139,6 +1141,7 @@ static void P_LoadLineDefs(lumpnum_t lumpnum) ld->frontsector = ld->backsector = NULL; ld->validcount = 0; ld->firsttag = ld->nexttag = -1; + ld->callcount = 0; // killough 11/98: fix common wad errors (missing sidedefs): if (ld->sidenum[0] == 0xffff) @@ -1380,7 +1383,6 @@ static void P_LoadSideDefs2(lumpnum_t lumpnum) { col = msd->bottomtexture; - sec->extra_colormap->fadergba = (HEX2INT(col[1]) << 4) + (HEX2INT(col[2]) << 0) + (HEX2INT(col[3]) << 12) + (HEX2INT(col[4]) << 8) + @@ -1393,7 +1395,7 @@ static void P_LoadSideDefs2(lumpnum_t lumpnum) sec->extra_colormap->fadergba += (25 << 24); } else - sec->extra_colormap->fadergba = 0x19000000; + sec->extra_colormap->fadergba = 0x19000000; // default alpha, (25 << 24) #undef ALPHA2INT #undef HEX2INT } @@ -2341,6 +2343,35 @@ static void P_LoadRecordGhosts(void) free(gpath); } +static void P_LoadNightsGhosts(void) +{ + const size_t glen = strlen(srb2home)+1+strlen("replay")+1+strlen(timeattackfolder)+1+strlen("MAPXX")+1; + char *gpath = malloc(glen); + + if (!gpath) + return; + + sprintf(gpath,"%s"PATHSEP"replay"PATHSEP"%s"PATHSEP"%s", srb2home, timeattackfolder, G_BuildMapName(gamemap)); + + // Best Score ghost + if (cv_ghost_bestscore.value && FIL_FileExists(va("%s-score-best.lmp", gpath))) + G_AddGhost(va("%s-score-best.lmp", gpath)); + + // Best Time ghost + if (cv_ghost_besttime.value && FIL_FileExists(va("%s-time-best.lmp", gpath))) + G_AddGhost(va("%s-time-best.lmp", gpath)); + + // Last ghost + if (cv_ghost_last.value && FIL_FileExists(va("%s-last.lmp", gpath))) + G_AddGhost(va("%s-last.lmp", gpath)); + + // Guest ghost + if (cv_ghost_guest.value && FIL_FileExists(va("%s-guest.lmp", gpath))) + G_AddGhost(va("%s-guest.lmp", gpath)); + + free(gpath); +} + /** Loads a level from a lump or external wad. * * \param skipprecip If true, don't spawn precipitation. @@ -2602,6 +2633,8 @@ boolean P_SetupLevel(boolean skipprecip) if (modeattacking == ATTACKING_RECORD && !demoplayback) P_LoadRecordGhosts(); + else if (modeattacking == ATTACKING_NIGHTS && !demoplayback) + P_LoadNightsGhosts(); if (G_TagGametype()) { @@ -2750,7 +2783,6 @@ boolean P_SetupLevel(boolean skipprecip) R_PrecacheLevel(); nextmapoverride = 0; - nextmapgametype = -1; skipstats = false; if (!(netgame || multiplayer) && (!modifiedgame || savemoddata)) diff --git a/src/p_spec.c b/src/p_spec.c index 3c9af246d..323b93c6d 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -50,10 +50,6 @@ mobj_t *skyboxmo[2]; // Amount (dx, dy) vector linedef is shifted right to get scroll amount #define SCROLL_SHIFT 5 -// Factor to scale scrolling effect into mobj-carrying properties = 3/32. -// (This is so scrolling floors and objects on them can move at same speed.) -#define CARRYFACTOR ((3*FRACUNIT)/32) - /** Animated texture descriptor * This keeps track of an animated texture or an animated flat. * \sa P_UpdateSpecials, P_InitPicAnims, animdef_t @@ -107,7 +103,7 @@ static void P_AddBlockThinker(sector_t *sec, line_t *sourceline); static void P_AddFloatThinker(sector_t *sec, INT32 tag, line_t *sourceline); static void P_AddBridgeThinker(line_t *sourceline, sector_t *sec); static void P_AddFakeFloorsByLine(size_t line, ffloortype_e ffloorflags, thinkerlist_t *secthinkers); -static void P_ProcessLineSpecial(line_t *line, mobj_t *mo); +static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec); static void Add_Friction(INT32 friction, INT32 movefactor, INT32 affectee, INT32 referrer); static void P_AddSpikeThinker(sector_t *sec, INT32 referrer); @@ -1388,9 +1384,34 @@ static boolean PolyRotate(line_t *line) // Polyobj_OR types have override set to true prd.overRide = (line->special == 485 || line->special == 487); + if (line->flags & ML_NOCLIMB) + prd.turnobjs = 0; + else if (line->flags & ML_EFFECT4) + prd.turnobjs = 2; + else + prd.turnobjs = 1; + return EV_DoPolyObjRotate(&prd); } +// +// PolyDisplace +// +// Parses arguments for parameterized polyobject move-by-sector-heights specials +// +static boolean PolyDisplace(line_t *line) +{ + polydisplacedata_t pdd; + + pdd.polyObjNum = line->tag; + + pdd.controlSector = line->frontsector; + pdd.dx = line->dx>>8; + pdd.dy = line->dy>>8; + + return EV_DoPolyObjDisplace(&pdd); +} + #endif // ifdef POLYOBJECTS /** Changes a sector's tag. @@ -1512,13 +1533,13 @@ void T_ExecutorDelay(executor_t *e) { if (e->caller && P_MobjWasRemoved(e->caller)) // If the mobj died while we were delaying P_SetTarget(&e->caller, NULL); // Call with no mobj! - P_ProcessLineSpecial(e->line, e->caller); + P_ProcessLineSpecial(e->line, e->caller, e->sector); P_SetTarget(&e->caller, NULL); // Let the mobj know it can be removed now. P_RemoveThinker(&e->thinker); } } -static void P_AddExecutorDelay(line_t *line, mobj_t *mobj) +static void P_AddExecutorDelay(line_t *line, mobj_t *mobj, sector_t *sector) { executor_t *e; @@ -1529,13 +1550,12 @@ static void P_AddExecutorDelay(line_t *line, mobj_t *mobj) e->thinker.function.acp1 = (actionf_p1)T_ExecutorDelay; e->line = line; + e->sector = sector; e->timer = (line->backsector->ceilingheight>>FRACBITS)+(line->backsector->floorheight>>FRACBITS); P_SetTarget(&e->caller, mobj); // Use P_SetTarget to make sure the mobj doesn't get freed while we're delaying. P_AddThinker(&e->thinker); } -static sector_t *triplinecaller; - /** Used by P_LinedefExecute to check a trigger linedef's conditions * The linedef executor specials in the trigger linedef's sector are run if all conditions are met. * Return false cancels P_LinedefExecute, this happens if a condition is not met. @@ -1672,7 +1692,7 @@ boolean P_RunTriggerLinedef(line_t *triggerline, mobj_t *actor, sector_t *caller // If we were not triggered by a sector type especially for the purpose, // a Linedef Executor linedef trigger is not handling sector triggers properly, return. - else if ((!GETSECSPECIAL(caller->special, 2) || GETSECSPECIAL(caller->special, 2) > 7) && (specialtype > 320)) + else if ((!GETSECSPECIAL(caller->special, 2) || GETSECSPECIAL(caller->special, 2) > 7) && (specialtype > 322)) { CONS_Alert(CONS_WARNING, M_GetText("Linedef executor trigger isn't handling sector triggers properly!\nspecialtype = %d, if you are not a dev, report this warning instance\nalong with the wad that caused it!\n"), @@ -1737,6 +1757,15 @@ boolean P_RunTriggerLinedef(line_t *triggerline, mobj_t *actor, sector_t *caller return false; } break; + case 321: // continuous + case 322: // each time + // decrement calls left before triggering + if (triggerline->callcount > 0) + { + if (--triggerline->callcount > 0) + return false; + } + break; default: break; } @@ -1745,7 +1774,6 @@ boolean P_RunTriggerLinedef(line_t *triggerline, mobj_t *actor, sector_t *caller // Processing linedef specials // ///////////////////////////////// - triplinecaller = caller; ctlsector = triggerline->frontsector; sectori = (size_t)(ctlsector - sectors); linecnt = ctlsector->linecount; @@ -1757,9 +1785,9 @@ boolean P_RunTriggerLinedef(line_t *triggerline, mobj_t *actor, sector_t *caller && ctlsector->lines[i]->special < 500) { if (ctlsector->lines[i]->flags & ML_DONTPEGTOP) - P_AddExecutorDelay(ctlsector->lines[i], actor); + P_AddExecutorDelay(ctlsector->lines[i], actor, caller); else - P_ProcessLineSpecial(ctlsector->lines[i], actor); + P_ProcessLineSpecial(ctlsector->lines[i], actor, caller); } } else // walk around the sector in a defined order @@ -1845,13 +1873,17 @@ boolean P_RunTriggerLinedef(line_t *triggerline, mobj_t *actor, sector_t *caller && ctlsector->lines[i]->special < 500) { if (ctlsector->lines[i]->flags & ML_DONTPEGTOP) - P_AddExecutorDelay(ctlsector->lines[i], actor); + P_AddExecutorDelay(ctlsector->lines[i], actor, caller); else - P_ProcessLineSpecial(ctlsector->lines[i], actor); + P_ProcessLineSpecial(ctlsector->lines[i], actor, caller); } } } + // "Trigger on X calls" linedefs reset if noclimb is set + if ((specialtype == 321 || specialtype == 322) && triggerline->flags & ML_NOCLIMB) + triggerline->callcount = sides[triggerline->sidenum[0]].textureoffset>>FRACBITS; + else // These special types work only once if (specialtype == 302 // Once || specialtype == 304 // Ring count - Once @@ -1860,6 +1892,7 @@ boolean P_RunTriggerLinedef(line_t *triggerline, mobj_t *actor, sector_t *caller || specialtype == 315 // No of pushables - Once || specialtype == 318 // Unlockable trigger - Once || specialtype == 320 // Unlockable - Once + || specialtype == 321 || specialtype == 322 // Trigger on X calls - Continuous + Each Time || specialtype == 399) // Level Load triggerline->special = 0; // Clear it out @@ -1899,7 +1932,8 @@ void P_LinedefExecute(INT16 tag, mobj_t *actor, sector_t *caller) || lines[masterline].special == 301 // Each time || lines[masterline].special == 306 // Character ability - Each time || lines[masterline].special == 310 // CTF Red team - Each time - || lines[masterline].special == 312) // CTF Blue team - Each time + || lines[masterline].special == 312 // CTF Blue team - Each time + || lines[masterline].special == 322) // Trigger on X calls - Each Time continue; if (lines[masterline].special < 300 @@ -2149,22 +2183,20 @@ static mobj_t *P_GetObjectTypeInSectorNum(mobjtype_t type, size_t s) } /** Processes the line special triggered by an object. - * The external variable ::triplinecaller points to the sector in which the - * action was initiated; it can be NULL. Because of the A_LinedefExecute() - * action, even if non-NULL, this sector might not have the same tag as the - * linedef executor, and it might not have the linedef executor sector type. * * \param line Line with the special command on it. * \param mo mobj that triggered the line. Must be valid and non-NULL. - * \todo Get rid of the secret parameter and make ::triplinecaller actually get - * passed to the function. + * \param callsec sector in which action was initiated; this can be NULL. + * Because of the A_LinedefExecute() action, even if non-NULL, + * this sector might not have the same tag as the linedef executor, + * and it might not have the linedef executor sector type. * \todo Handle mo being NULL gracefully. T_MoveFloor() and T_MoveCeiling() * don't have an object to pass. * \todo Split up into multiple functions. * \sa P_LinedefExecute * \author Graue */ -static void P_ProcessLineSpecial(line_t *line, mobj_t *mo) +static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec) { INT32 secnum = -1; mobj_t *bot = NULL; @@ -2365,7 +2397,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo) if (musicnum >= NUMMUSIC || musicnum == mus_None) S_StopMusic(); else - S_ChangeMusic(mapmusic, !(line->flags & ML_NOCLIMB)); + S_ChangeMusic(mapmusic, !(line->flags & ML_EFFECT4)); // Except, you can use the ML_BLOCKMONSTERS flag to change this behavior. // if (mapmusic & MUSIC_RELOADRESET) then it will reset the music in G_PlayerReborn. @@ -2431,8 +2463,8 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo) else if (line->flags & ML_BLOCKMONSTERS) { // play the sound from calling sector's soundorg - if (triplinecaller) - S_StartSound(&triplinecaller->soundorg, sfxnum); + if (callsec) + S_StartSound(&callsec->soundorg, sfxnum); else if (mo) S_StartSound(&mo->subsector->sector->soundorg, sfxnum); } @@ -2976,7 +3008,7 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo) case 443: // Calls a named Lua function #ifdef HAVE_BLUA - LUAh_LinedefExecute(line, mo); + LUAh_LinedefExecute(line, mo, callsec); #else CONS_Alert(CONS_ERROR, "The map is trying to run a Lua script, but this exe was not compiled with Lua support!\n"); #endif @@ -3392,9 +3424,9 @@ static boolean P_ThingIsOnThe3DFloor(mobj_t *mo, sector_t *sector, sector_t *tar static inline boolean P_MobjReadyToTrigger(mobj_t *mo, sector_t *sec) { if (mo->eflags & MFE_VERTICALFLIP) - return (mo->z+mo->height == sec->ceilingheight); + return (mo->z+mo->height == sec->ceilingheight && sec->flags & SF_FLIPSPECIAL_CEILING); else - return (mo->z == sec->floorheight); + return (mo->z == sec->floorheight && sec->flags & SF_FLIPSPECIAL_FLOOR); } /** Applies a sector special to a player. @@ -3715,15 +3747,6 @@ DoneSection2: if (lines[lineindex].flags & ML_NOCLIMB) skipstats = true; - - // change the gametype using front x offset if passuse flag is given - // ...but not in single player! - if (multiplayer && lines[lineindex].flags & ML_EFFECT4) - { - INT32 xofs = sides[lines[lineindex].sidenum[0]].textureoffset; - if (xofs >= 0 && xofs < NUMGAMETYPES) - nextmapgametype = xofs; - } } } break; @@ -4861,7 +4884,7 @@ static ffloor_t *P_AddFakeFloor(sector_t *sec, sector_t *sec2, line_t *master, f if ((flags & FF_SOLID) && (master->flags & ML_EFFECT2)) // Block all BUT player flags &= ~FF_BLOCKPLAYER; - ffloor->flags = flags; + ffloor->spawnflags = ffloor->flags = flags; ffloor->master = master; ffloor->norender = INFTICS; @@ -4927,6 +4950,8 @@ static ffloor_t *P_AddFakeFloor(sector_t *sec, sector_t *sec2, line_t *master, f else ffloor->alpha = 0xff; + ffloor->spawnalpha = ffloor->alpha; // save for netgames + if (flags & FF_QUICKSAND) CheckForQuicksand = true; @@ -5607,13 +5632,13 @@ void P_SpawnSpecials(INT32 fromnetsave) if (!(lines[i].flags & ML_EFFECT5)) // Align floor unless ALLTRIGGER flag is set { for (s = -1; (s = P_FindSectorFromLineTag(lines + i, s)) >= 0 ;) - sectors[s].floorpic_angle = R_PointToAngle2(lines[i].v1->x, lines[i].v1->y, lines[i].v2->x, lines[i].v2->y); + sectors[s].spawn_flrpic_angle = sectors[s].floorpic_angle = R_PointToAngle2(lines[i].v1->x, lines[i].v1->y, lines[i].v2->x, lines[i].v2->y); } if (!(lines[i].flags & ML_BOUNCY)) // Align ceiling unless BOUNCY flag is set { for (s = -1; (s = P_FindSectorFromLineTag(lines + i, s)) >= 0 ;) - sectors[s].ceilingpic_angle = R_PointToAngle2(lines[i].v1->x, lines[i].v1->y, lines[i].v2->x, lines[i].v2->y); + sectors[s].spawn_ceilpic_angle = sectors[s].ceilingpic_angle = R_PointToAngle2(lines[i].v1->x, lines[i].v1->y, lines[i].v2->x, lines[i].v2->y); } } else // Do offsets @@ -5624,6 +5649,9 @@ void P_SpawnSpecials(INT32 fromnetsave) { sectors[s].floor_xoffs += lines[i].dx; sectors[s].floor_yoffs += lines[i].dy; + // saved for netgames + sectors[s].spawn_flr_xoffs = sectors[s].floor_xoffs; + sectors[s].spawn_flr_yoffs = sectors[s].floor_yoffs; } } @@ -5633,6 +5661,9 @@ void P_SpawnSpecials(INT32 fromnetsave) { sectors[s].ceiling_xoffs += lines[i].dx; sectors[s].ceiling_yoffs += lines[i].dy; + // saved for netgames + sectors[s].spawn_ceil_xoffs = sectors[s].ceiling_xoffs; + sectors[s].spawn_ceil_yoffs = sectors[s].ceiling_yoffs; } } } @@ -6305,6 +6336,20 @@ void P_SpawnSpecials(INT32 fromnetsave) case 320: break; + // Trigger on X calls + case 321: + case 322: + if (lines[i].flags & ML_NOCLIMB && sides[lines[i].sidenum[0]].rowoffset > 0) // optional "starting" count + lines[i].callcount = sides[lines[i].sidenum[0]].rowoffset>>FRACBITS; + else + lines[i].callcount = sides[lines[i].sidenum[0]].textureoffset>>FRACBITS; + if (lines[i].special == 322) // Each time + { + sec = sides[*lines[i].sidenum].sector - sectors; + P_AddEachTimeThinker(§ors[sec], &lines[i]); + } + break; + case 399: // Linedef execute on map load // This is handled in P_RunLevelLoadExecutors. break; @@ -6444,6 +6489,10 @@ void P_SpawnSpecials(INT32 fromnetsave) case 30: // Polyobj_Flag EV_DoPolyObjFlag(&lines[i]); break; + + case 31: // Polyobj_Displace + PolyDisplace(&lines[i]); + break; } } #endif @@ -6476,6 +6525,47 @@ static void P_AddFakeFloorsByLine(size_t line, ffloortype_e ffloorflags, thinker P_SpawnScrollers */ +// helper function for T_Scroll +static void P_DoScrollMove(mobj_t *thing, fixed_t dx, fixed_t dy, INT32 exclusive) +{ + fixed_t fuckaj = 0; // Nov 05 14:12:08 <+MonsterIestyn> I've heard of explicitly defined variables but this is ridiculous + if (thing->player) + { + if (!(dx | dy)) + { + thing->player->cmomx = 0; + thing->player->cmomy = 0; + } + else + { + thing->player->cmomx += dx; + thing->player->cmomy += dy; + thing->player->cmomx = FixedMul(thing->player->cmomx, 0xe800); + thing->player->cmomy = FixedMul(thing->player->cmomy, 0xe800); + } + } + + if (thing->player && (thing->player->pflags & PF_SPINNING) && (thing->player->rmomx || thing->player->rmomy) && !(thing->player->pflags & PF_STARTDASH)) + fuckaj = FixedDiv(549*ORIG_FRICTION,500*FRACUNIT); + else if (thing->friction != ORIG_FRICTION) + fuckaj = thing->friction; + + if (fuckaj) { + // refactor thrust for new friction + dx = FixedDiv(dx, CARRYFACTOR); + dy = FixedDiv(dy, CARRYFACTOR); + + dx = FixedMul(dx, FRACUNIT-fuckaj); + dy = FixedMul(dy, FRACUNIT-fuckaj); + } + + thing->momx += dx; + thing->momy += dy; + + if (exclusive) + thing->flags2 |= MF2_PUSHED; +} + /** Processes an active scroller. * This function, with the help of r_plane.c and r_bsp.c, supports generalized * scrolling floors and walls, with optional mobj-carrying properties, e.g. @@ -6585,26 +6675,7 @@ void T_Scroll(scroll_t *s) { // Move objects only if on floor // non-floating, and clipped. - thing->momx += dx; - thing->momy += dy; - if (thing->player) - { - if (!(dx | dy)) - { - thing->player->cmomx = 0; - thing->player->cmomy = 0; - } - else - { - thing->player->cmomx += dx; - thing->player->cmomy += dy; - thing->player->cmomx = FixedMul(thing->player->cmomx, 0xe800); - thing->player->cmomy = FixedMul(thing->player->cmomy, 0xe800); - } - } - - if (s->exclusive) - thing->flags2 |= MF2_PUSHED; + P_DoScrollMove(thing, dx, dy, s->exclusive); } } // end of for loop through touching_thinglist } // end of loop through sectors @@ -6619,31 +6690,12 @@ void T_Scroll(scroll_t *s) if (thing->flags2 & MF2_PUSHED) continue; - if (!((thing = node->m_thing)->flags & MF_NOCLIP) && + if (!(thing->flags & MF_NOCLIP) && (!(thing->flags & MF_NOGRAVITY || thing->z > height))) { // Move objects only if on floor or underwater, // non-floating, and clipped. - thing->momx += dx; - thing->momy += dy; - if (thing->player) - { - if (!(dx | dy)) - { - thing->player->cmomx = 0; - thing->player->cmomy = 0; - } - else - { - thing->player->cmomx += dx; - thing->player->cmomy += dy; - thing->player->cmomx = FixedMul(thing->player->cmomx, 0xe800); - thing->player->cmomy = FixedMul(thing->player->cmomy, 0xe800); - } - } - - if (s->exclusive) - thing->flags2 |= MF2_PUSHED; + P_DoScrollMove(thing, dx, dy, s->exclusive); } } } @@ -6682,26 +6734,7 @@ void T_Scroll(scroll_t *s) { // Move objects only if on floor or underwater, // non-floating, and clipped. - thing->momx += dx; - thing->momy += dy; - if (thing->player) - { - if (!(dx | dy)) - { - thing->player->cmomx = 0; - thing->player->cmomy = 0; - } - else - { - thing->player->cmomx += dx; - thing->player->cmomy += dy; - thing->player->cmomx = FixedMul(thing->player->cmomx, 0xe800); - thing->player->cmomy = FixedMul(thing->player->cmomy, 0xe800); - } - } - - if (s->exclusive) - thing->flags2 |= MF2_PUSHED; + P_DoScrollMove(thing, dx, dy, s->exclusive); } } // end of for loop through touching_thinglist } // end of loop through sectors @@ -6716,31 +6749,12 @@ void T_Scroll(scroll_t *s) if (thing->flags2 & MF2_PUSHED) continue; - if (!((thing = node->m_thing)->flags & MF_NOCLIP) && + if (!(thing->flags & MF_NOCLIP) && (!(thing->flags & MF_NOGRAVITY || thing->z+thing->height < height))) { // Move objects only if on floor or underwater, // non-floating, and clipped. - thing->momx += dx; - thing->momy += dy; - if (thing->player) - { - if (!(dx | dy)) - { - thing->player->cmomx = 0; - thing->player->cmomy = 0; - } - else - { - thing->player->cmomx += dx; - thing->player->cmomy += dy; - thing->player->cmomx = FixedMul(thing->player->cmomx, 0xe800); - thing->player->cmomy = FixedMul(thing->player->cmomy, 0xe800); - } - } - - if (s->exclusive) - thing->flags2 |= MF2_PUSHED; + P_DoScrollMove(thing, dx, dy, s->exclusive); } } } @@ -7440,16 +7454,16 @@ void T_Pusher(pusher_t *p) thing = node->m_thing; if (thing->flags & (MF_NOGRAVITY | MF_NOCLIP) && !(thing->type == MT_SMALLBUBBLE - || thing->type == MT_MEDIUMBUBBLE - || thing->type == MT_EXTRALARGEBUBBLE)) + || thing->type == MT_MEDIUMBUBBLE + || thing->type == MT_EXTRALARGEBUBBLE)) continue; if (!(thing->flags & MF_PUSHABLE) && !(thing->type == MT_PLAYER - || thing->type == MT_SMALLBUBBLE - || thing->type == MT_MEDIUMBUBBLE - || thing->type == MT_EXTRALARGEBUBBLE - || thing->type == MT_LITTLETUMBLEWEED - || thing->type == MT_BIGTUMBLEWEED)) + || thing->type == MT_SMALLBUBBLE + || thing->type == MT_MEDIUMBUBBLE + || thing->type == MT_EXTRALARGEBUBBLE + || thing->type == MT_LITTLETUMBLEWEED + || thing->type == MT_BIGTUMBLEWEED)) continue; if (thing->flags2 & MF2_PUSHED) diff --git a/src/p_spec.h b/src/p_spec.h index 04152f68d..7b6a5655c 100644 --- a/src/p_spec.h +++ b/src/p_spec.h @@ -347,6 +347,7 @@ typedef struct thinker_t thinker; // Thinker for linedef executor delay line_t *line; // Pointer to line that is waiting. mobj_t *caller; // Pointer to calling mobj + sector_t *sector; // Pointer to triggering sector INT32 timer; // Delay timer } executor_t; diff --git a/src/p_tick.c b/src/p_tick.c index 9a0f80165..3b7d3683b 100644 --- a/src/p_tick.c +++ b/src/p_tick.c @@ -523,19 +523,20 @@ static inline void P_DoTagStuff(void) //increment survivor scores if (leveltime % TICRATE == 0 && leveltime > (hidetime * TICRATE)) { - INT32 spectators = 0; + INT32 participants = 0; - for (i=0; i < MAXPLAYERS; i++) //count spectators to subtract from the player count. + for (i=0; i < MAXPLAYERS; i++) { - if (players[i].spectator) - spectators++; + if (playeringame[i] && !players[i].spectator) + participants++; } for (i=0; i < MAXPLAYERS; i++) { - if (!(players[i].pflags & PF_TAGIT) && !(players[i].pflags & PF_TAGGED) - && !players[i].spectator && playeringame[i] && players[i].playerstate == PST_LIVE) - P_AddPlayerScore(&players[i], (D_NumPlayers() - spectators) / 2); //points given is the number of participating players divided by two. + if (playeringame[i] && !players[i].spectator && players[i].playerstate == PST_LIVE + && !(players[i].pflags & (PF_TAGIT|PF_TAGGED))) + //points given is the number of participating players divided by two. + P_AddPlayerScore(&players[i], participants/2); } } } @@ -691,7 +692,7 @@ void P_Ticker(boolean run) G_WriteGhostTic(players[consoleplayer].mo); if (demoplayback) // Use Ghost data for consistency checks. G_ConsGhostTic(); - if (modeattacking == ATTACKING_RECORD) + if (modeattacking) G_GhostTicker(); } diff --git a/src/p_user.c b/src/p_user.c index a31666c9f..3c2d34a6e 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -660,6 +660,7 @@ void P_NightserizePlayer(player_t *player, INT32 nighttime) player->mo->tracer->destscale = player->mo->scale; P_SetScale(player->mo->tracer, player->mo->scale); player->mo->tracer->eflags = (player->mo->tracer->eflags & ~MFE_VERTICALFLIP)|(player->mo->eflags & MFE_VERTICALFLIP); + player->mo->height = player->mo->tracer->height; } player->pflags &= ~(PF_USEDOWN|PF_JUMPDOWN|PF_ATTACKDOWN|PF_STARTDASH|PF_GLIDING|PF_JUMPED|PF_THOKKED|PF_SPINNING|PF_DRILLING); @@ -3998,10 +3999,7 @@ static void P_DoJumpStuff(player_t *player, ticcmd_t *cmd) static boolean P_AnalogMove(player_t *player) { - if (netgame) - return false; - return ((player == &players[consoleplayer] && cv_analog.value) - || (player == &players[secondarydisplayplayer] && cv_analog2.value)); + return player->pflags & PF_ANALOGMODE; } // @@ -4124,7 +4122,11 @@ static void P_2dMovement(player_t *player) } else if (player->onconveyor == 4 && !P_IsObjectOnGround(player->mo)) // Actual conveyor belt player->cmomx = player->cmomy = 0; - else if (player->onconveyor != 2 && player->onconveyor != 4) + else if (player->onconveyor != 2 && player->onconveyor != 4 +#ifdef POLYOBJECTS + && player->onconveyor != 1 +#endif + ) player->cmomx = player->cmomy = 0; player->rmomx = player->mo->momx - player->cmomx; @@ -4264,22 +4266,16 @@ static void P_3dMovement(player_t *player) fixed_t movepushforward = 0, movepushside = 0; INT32 mforward = 0, mbackward = 0; angle_t dangle; // replaces old quadrants bits - camera_t *thiscam; fixed_t normalspd = FixedMul(player->normalspeed, player->mo->scale); boolean analogmove = false; #ifndef OLD_MOVEMENT_CODE fixed_t oldMagnitude, newMagnitude; // Get the old momentum; this will be needed at the end of the function! -SH - oldMagnitude = R_PointToDist2(player->mo->momx, player->mo->momy, 0, 0); + oldMagnitude = R_PointToDist2(player->mo->momx - player->cmomx, player->mo->momy - player->cmomy, 0, 0); #endif - if (splitscreen && player == &players[secondarydisplayplayer]) - thiscam = &camera2; - else - thiscam = &camera; - - analogmove = (P_AnalogMove(player) && thiscam->chase); + analogmove = P_AnalogMove(player); cmd = &player->cmd; @@ -4306,16 +4302,13 @@ static void P_3dMovement(player_t *player) if (analogmove) { - if (player->awayviewtics) - movepushangle = player->awayviewmobj->angle; - else - movepushangle = thiscam->angle; + movepushangle = (cmd->angleturn<<16 /* not FRACBITS */); } else { movepushangle = player->mo->angle; } - movepushsideangle = movepushangle-ANGLE_90; + movepushsideangle = movepushangle-ANGLE_90; // cmomx/cmomy stands for the conveyor belt speed. if (player->onconveyor == 2) // Wind/Current @@ -4326,7 +4319,11 @@ static void P_3dMovement(player_t *player) } else if (player->onconveyor == 4 && !P_IsObjectOnGround(player->mo)) // Actual conveyor belt player->cmomx = player->cmomy = 0; - else if (player->onconveyor != 2 && player->onconveyor != 4) + else if (player->onconveyor != 2 && player->onconveyor != 4 +#ifdef POLYOBJECTS + && player->onconveyor != 1 +#endif + ) player->cmomx = player->cmomy = 0; player->rmomx = player->mo->momx - player->cmomx; @@ -4482,8 +4479,6 @@ static void P_3dMovement(player_t *player) if (!(player->pflags & PF_GLIDING || player->exiting || P_PlayerInPain(player))) { angle_t controldirection; - fixed_t tempx = 0, tempy = 0; - angle_t tempangle; #ifdef OLD_MOVEMENT_CODE angle_t controlplayerdirection; boolean cforward; // controls pointing forward from the player @@ -4494,17 +4489,8 @@ static void P_3dMovement(player_t *player) #endif // Calculate the angle at which the controls are pointing // to figure out the proper mforward and mbackward. - tempangle = movepushangle; - tempangle >>= ANGLETOFINESHIFT; - tempx += FixedMul(cmd->forwardmove*FRACUNIT,FINECOSINE(tempangle)); - tempy += FixedMul(cmd->forwardmove*FRACUNIT,FINESINE(tempangle)); - - tempangle = movepushsideangle; - tempangle >>= ANGLETOFINESHIFT; - tempx += FixedMul(cmd->sidemove*FRACUNIT,FINECOSINE(tempangle)); - tempy += FixedMul(cmd->sidemove*FRACUNIT,FINESINE(tempangle)); - - controldirection = R_PointToAngle2(0, 0, tempx, tempy); + // (Why was it so complicated before? ~Red) + controldirection = R_PointToAngle2(0, 0, cmd->forwardmove*FRACUNIT, -cmd->sidemove*FRACUNIT)+movepushangle; #ifdef OLD_MOVEMENT_CODE controlplayerdirection = player->mo->angle; @@ -4624,22 +4610,27 @@ static void P_3dMovement(player_t *player) // If "no" to 2, normalize to topspeed, so we can't suddenly run faster than it of our own accord. // If "no" to 1, we're not reaching any limits yet, so ignore this entirely! // -Shadow Hog - newMagnitude = R_PointToDist2(player->mo->momx, player->mo->momy, 0, 0); + newMagnitude = R_PointToDist2(player->mo->momx - player->cmomx, player->mo->momy - player->cmomy, 0, 0); if (newMagnitude > topspeed) { + fixed_t tempmomx, tempmomy; if (oldMagnitude > topspeed) { if (newMagnitude > oldMagnitude) { - player->mo->momx = FixedMul(FixedDiv(player->mo->momx, newMagnitude), oldMagnitude); - player->mo->momy = FixedMul(FixedDiv(player->mo->momy, newMagnitude), oldMagnitude); + tempmomx = FixedMul(FixedDiv(player->mo->momx - player->cmomx, newMagnitude), oldMagnitude); + tempmomy = FixedMul(FixedDiv(player->mo->momy - player->cmomy, newMagnitude), oldMagnitude); + player->mo->momx = tempmomx + player->cmomx; + player->mo->momy = tempmomy + player->cmomy; } // else do nothing } else { - player->mo->momx = FixedMul(FixedDiv(player->mo->momx, newMagnitude), topspeed); - player->mo->momy = FixedMul(FixedDiv(player->mo->momy, newMagnitude), topspeed); + tempmomx = FixedMul(FixedDiv(player->mo->momx - player->cmomx, newMagnitude), topspeed); + tempmomy = FixedMul(FixedDiv(player->mo->momy - player->cmomy, newMagnitude), topspeed); + player->mo->momx = tempmomx + player->cmomx; + player->mo->momy = tempmomy + player->cmomy; } } #endif @@ -6060,6 +6051,7 @@ static void P_SkidStuff(player_t *player) particle->eflags |= player->mo->eflags & MFE_VERTICALFLIP; P_SetScale(particle, player->mo->scale >> 2); particle->destscale = player->mo->scale << 2; + particle->scalespeed = FixedMul(particle->scalespeed, player->mo->scale); // scale the scaling speed! P_SetObjectMomZ(particle, FRACUNIT, false); S_StartSound(player->mo, sfx_s3k7e); // the proper "Knuckles eats dirt" sfx. } @@ -6080,6 +6072,7 @@ static void P_SkidStuff(player_t *player) particle->eflags |= player->mo->eflags & MFE_VERTICALFLIP; P_SetScale(particle, player->mo->scale >> 2); particle->destscale = player->mo->scale << 2; + particle->scalespeed = FixedMul(particle->scalespeed, player->mo->scale); // scale the scaling speed! P_SetObjectMomZ(particle, FRACUNIT, false); } } @@ -6120,17 +6113,11 @@ static void P_MovePlayer(player_t *player) ticcmd_t *cmd; INT32 i; - camera_t *thiscam; fixed_t runspd; if (countdowntimeup) return; - if (splitscreen && player == &players[secondarydisplayplayer]) - thiscam = &camera2; - else - thiscam = &camera; - if (player->mo->state >= &states[S_PLAY_SUPERTRANS1] && player->mo->state <= &states[S_PLAY_SUPERTRANS9]) { player->mo->momx = player->mo->momy = player->mo->momz = 0; @@ -6256,7 +6243,7 @@ static void P_MovePlayer(player_t *player) P_2dMovement(player); else { - if (!player->climbing && (!P_AnalogMove(player) || player->pflags & PF_SPINNING)) + if (!player->climbing && (!P_AnalogMove(player))) player->mo->angle = (cmd->angleturn<<16 /* not FRACBITS */); ticruned++; @@ -6572,31 +6559,45 @@ static void P_MovePlayer(player_t *player) ////////////////// // This really looks like it should be moved to P_3dMovement. -Red - if (P_AnalogMove(player) && thiscam->chase + if (P_AnalogMove(player) && (cmd->forwardmove != 0 || cmd->sidemove != 0) && !player->climbing && !twodlevel && !(player->mo->flags2 & MF2_TWOD)) { // If travelling slow enough, face the way the controls // point and not your direction of movement. if (player->speed < FixedMul(5*FRACUNIT, player->mo->scale) || player->pflags & PF_GLIDING || !onground) { - fixed_t tempx = 0, tempy = 0; angle_t tempangle; - if (player->awayviewtics) - tempangle = player->awayviewmobj->angle; - else - tempangle = thiscam->angle; - tempangle >>= ANGLETOFINESHIFT; - tempx += FixedMul(cmd->forwardmove*FRACUNIT,FINECOSINE(tempangle)); - tempy += FixedMul(cmd->forwardmove*FRACUNIT,FINESINE(tempangle)); + tempangle = (cmd->angleturn << 16); - tempangle <<= ANGLETOFINESHIFT; - tempangle -= ANGLE_90; - tempangle >>= ANGLETOFINESHIFT; - tempx += FixedMul(cmd->sidemove*FRACUNIT,FINECOSINE(tempangle)); - tempy += FixedMul(cmd->sidemove*FRACUNIT,FINESINE(tempangle)); +#ifdef REDSANALOG // Ease to it. Chillax. ~Red + tempangle += R_PointToAngle2(0, 0, cmd->forwardmove*FRACUNIT, -cmd->sidemove*FRACUNIT); + { + fixed_t tweenvalue = max(abs(cmd->forwardmove), abs(cmd->sidemove)); - player->mo->angle = R_PointToAngle2(0, 0, tempx, tempy); + if (tweenvalue < 10 && (cmd->buttons & (BT_CAMLEFT|BT_CAMRIGHT)) == (BT_CAMLEFT|BT_CAMRIGHT)) { + tempangle = (cmd->angleturn << 16); + tweenvalue = 16; + } + + tweenvalue *= tweenvalue*tweenvalue*1536; + + //if (player->pflags & PF_GLIDING) + //tweenvalue >>= 1; + + tempangle -= player->mo->angle; + + if (tempangle < ANGLE_180 && tempangle > tweenvalue) + player->mo->angle += tweenvalue; + else if (tempangle >= ANGLE_180 && InvAngle(tempangle) > tweenvalue) + player->mo->angle -= tweenvalue; + else + player->mo->angle += tempangle; + } +#else + // Less math this way ~Red + player->mo->angle = R_PointToAngle2(0, 0, cmd->forwardmove*FRACUNIT, -cmd->sidemove*FRACUNIT)+tempangle; +#endif } // Otherwise, face the direction you're travelling. else if (player->panim == PA_WALK || player->panim == PA_RUN || player->panim == PA_ROLL @@ -7559,19 +7560,20 @@ static void CV_CamRotate2_OnChange(void) CV_SetValue(&cv_cam2_rotate, cv_cam2_rotate.value % 360); } +static CV_PossibleValue_t CV_CamSpeed[] = {{0, "MIN"}, {1*FRACUNIT, "MAX"}, {0, NULL}}; static CV_PossibleValue_t rotation_cons_t[] = {{1, "MIN"}, {45, "MAX"}, {0, NULL}}; static CV_PossibleValue_t CV_CamRotate[] = {{-720, "MIN"}, {720, "MAX"}, {0, NULL}}; consvar_t cv_cam_dist = {"cam_dist", "128", CV_FLOAT, NULL, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_cam_height = {"cam_height", "20", CV_FLOAT, NULL, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_cam_still = {"cam_still", "Off", 0, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_cam_speed = {"cam_speed", "0.25", CV_FLOAT, NULL, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_cam_speed = {"cam_speed", "0.25", CV_FLOAT, CV_CamSpeed, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_cam_rotate = {"cam_rotate", "0", CV_CALL|CV_NOINIT, CV_CamRotate, CV_CamRotate_OnChange, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_cam_rotspeed = {"cam_rotspeed", "10", 0, rotation_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_cam2_dist = {"cam2_dist", "128", CV_FLOAT, NULL, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_cam2_height = {"cam2_height", "20", CV_FLOAT, NULL, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_cam2_still = {"cam2_still", "Off", 0, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_cam2_speed = {"cam2_speed", "0.25", CV_FLOAT, NULL, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_cam2_speed = {"cam2_speed", "0.25", CV_FLOAT, CV_CamSpeed, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_cam2_rotate = {"cam2_rotate", "0", CV_CALL|CV_NOINIT, CV_CamRotate, CV_CamRotate2_OnChange, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_cam2_rotspeed = {"cam2_rotspeed", "10", 0, rotation_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; @@ -7724,6 +7726,15 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall camheight = FixedMul(cv_cam2_height.value, mo->scale); } +#ifdef REDSANALOG + if (P_AnalogMove(player) && (player->cmd.buttons & (BT_CAMLEFT|BT_CAMRIGHT)) == (BT_CAMLEFT|BT_CAMRIGHT)) { + camstill = true; + + if (camspeed < 4*FRACUNIT/5) + camspeed = 4*FRACUNIT/5; + } +#endif // REDSANALOG + if (mo->eflags & MFE_VERTICALFLIP) camheight += thiscam->height; @@ -7772,6 +7783,9 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall if (!objectplacing && !(twodlevel || (mo->flags2 & MF2_TWOD)) && !(player->pflags & PF_NIGHTSMODE)) { +#ifdef REDSANALOG + if ((player->cmd.buttons & (BT_CAMLEFT|BT_CAMRIGHT)) == (BT_CAMLEFT|BT_CAMRIGHT)); else +#endif if (player->cmd.buttons & BT_CAMLEFT) { if (thiscam == &camera) @@ -8569,6 +8583,9 @@ void P_PlayerThink(player_t *player) // check water content, set stuff in mobj P_MobjCheckWater(player->mo); +#ifdef POLYOBJECTS + if (player->onconveyor != 1 || !P_IsObjectOnGround(player->mo)) +#endif player->onconveyor = 0; // check special sectors : damage & secrets @@ -8707,6 +8724,11 @@ void P_PlayerThink(player_t *player) if (!player->mo) return; // P_MovePlayer removed player->mo. +#ifdef POLYOBJECTS + if (player->onconveyor == 1) + player->cmomy = player->cmomx = 0; +#endif + P_DoSuperStuff(player); P_CheckSneakerAndLivesTimer(player); P_DoBubbleBreath(player); // Spawn Sonic's bubbles diff --git a/src/r_bsp.c b/src/r_bsp.c index 5a90f1fca..e5e0942e3 100644 --- a/src/r_bsp.c +++ b/src/r_bsp.c @@ -192,6 +192,14 @@ void R_ClearClipSegs(void) solidsegs[1].last = 0x7fffffff; newend = solidsegs + 2; } +void R_PortalClearClipSegs(INT32 start, INT32 end) +{ + solidsegs[0].first = -0x7fffffff; + solidsegs[0].last = start-1; + solidsegs[1].first = end; + solidsegs[1].last = 0x7fffffff; + newend = solidsegs + 2; +} // R_DoorClosed @@ -423,9 +431,9 @@ static void R_AddLine(seg_t *line) backsector = line->backsector; // Portal line - if (line->linedef->special == 40) + if (line->linedef->special == 40 && P_PointOnLineSide(viewx, viewy, line->linedef) == 0) { - if (portalrender < PORTAL_LIMIT) + if (portalrender < cv_maxportals.value) { // Find the other side! INT32 line2 = P_FindSpecialLineFromTag(40, line->linedef->tag, -1); @@ -433,8 +441,9 @@ static void R_AddLine(seg_t *line) line2 = P_FindSpecialLineFromTag(40, line->linedef->tag, line2); if (line2 >= 0) // found it! { - R_AddPortal(line->linedef-lines, line2); // Remember the lines for later rendering - return; // Don't fill in that space now! + R_AddPortal(line->linedef-lines, line2, x1, x2); // Remember the lines for later rendering + //return; // Don't fill in that space now! + goto clipsolid; } } // Recursed TOO FAR (viewing a portal within a portal) @@ -683,6 +692,33 @@ void R_SortPolyObjects(subsector_t *sub) } } +// +// R_PolysegCompare +// +// Callback for qsort to sort the segs of a polyobject. Returns such that the +// closer one is sorted first. I sure hope this doesn't break anything. -Red +// +static int R_PolysegCompare(const void *p1, const void *p2) +{ + const seg_t *seg1 = *(const seg_t * const *)p1; + const seg_t *seg2 = *(const seg_t * const *)p2; + fixed_t dist1, dist2; + + // TODO might be a better way to get distance? +#define vxdist(v) FixedMul(R_PointToDist(v->x, v->y), FINECOSINE((R_PointToAngle(v->x, v->y)-viewangle)>>ANGLETOFINESHIFT))+0xFFFFFFF + + dist1 = min(vxdist(seg1->v1), vxdist(seg1->v2)); + dist2 = min(vxdist(seg2->v1), vxdist(seg2->v2)); + + if (dist1 == dist2) { // Segs connect toward the front, so use the back verts to determine order! + dist1 = max(vxdist(seg1->v1), vxdist(seg1->v2)); + dist2 = max(vxdist(seg2->v1), vxdist(seg2->v2)); + } +#undef vxdist + + return dist1-dist2; +} + // // R_AddPolyObjects // @@ -709,6 +745,7 @@ static void R_AddPolyObjects(subsector_t *sub) // render polyobjects for (i = 0; i < numpolys; ++i) { + qsort(po_ptrs[i]->segs, po_ptrs[i]->segCount, sizeof(seg_t *), R_PolysegCompare); for (j = 0; j < po_ptrs[i]->segCount; ++j) R_AddLine(po_ptrs[i]->segs[j]); } @@ -809,43 +846,10 @@ static void R_Subsector(size_t num) if (frontsector->cullheight) { - if (frontsector->cullheight->flags & ML_NOCLIMB) // Group culling + if (R_DoCulling(frontsector->cullheight, viewsector->cullheight, viewz, *rover->bottomheight, *rover->topheight)) { - // Make sure this is part of the same group - if (viewsector->cullheight && viewsector->cullheight->frontsector - == frontsector->cullheight->frontsector) - { - // OK, we can cull - if (viewz > frontsector->cullheight->frontsector->floorheight - && *rover->topheight < frontsector->cullheight->frontsector->floorheight) // Cull if below plane - { - rover->norender = leveltime; - continue; - } - - if (*rover->bottomheight > frontsector->cullheight->frontsector->floorheight - && viewz <= frontsector->cullheight->frontsector->floorheight) // Cull if above plane - { - rover->norender = leveltime; - continue; - } - } - } - else // Quick culling - { - if (viewz > frontsector->cullheight->frontsector->floorheight - && *rover->topheight < frontsector->cullheight->frontsector->floorheight) // Cull if below plane - { - rover->norender = leveltime; - continue; - } - - if (*rover->bottomheight > frontsector->cullheight->frontsector->floorheight - && viewz <= frontsector->cullheight->frontsector->floorheight) // Cull if above plane - { - rover->norender = leveltime; - continue; - } + rover->norender = leveltime; + continue; } } @@ -909,15 +913,28 @@ static void R_Subsector(size_t num) && polysec->floorheight >= frontsector->floorheight && (viewz < polysec->floorheight)) { + fixed_t xoff, yoff; + xoff = polysec->floor_xoffs; + yoff = polysec->floor_yoffs; + + if (po->angle != 0) { + angle_t fineshift = po->angle >> ANGLETOFINESHIFT; + + xoff -= FixedMul(FINECOSINE(fineshift), po->centerPt.x)+FixedMul(FINESINE(fineshift), po->centerPt.y); + yoff -= FixedMul(FINESINE(fineshift), po->centerPt.x)-FixedMul(FINECOSINE(fineshift), po->centerPt.y); + } else { + xoff -= po->centerPt.x; + yoff += po->centerPt.y; + } + light = R_GetPlaneLight(frontsector, polysec->floorheight, viewz < polysec->floorheight); light = 0; ffloor[numffloors].plane = R_FindPlane(polysec->floorheight, polysec->floorpic, - polysec->lightlevel, polysec->floor_xoffs, - polysec->floor_yoffs, - polysec->floorpic_angle, + polysec->lightlevel, xoff, yoff, + polysec->floorpic_angle-po->angle, NULL, NULL); - ffloor[numffloors].plane->polyobj = true; + ffloor[numffloors].plane->polyobj = po; ffloor[numffloors].height = polysec->floorheight; ffloor[numffloors].polyobj = po; @@ -934,12 +951,27 @@ static void R_Subsector(size_t num) && polysec->ceilingheight <= frontsector->ceilingheight && (viewz > polysec->ceilingheight)) { + fixed_t xoff, yoff; + xoff = polysec->ceiling_xoffs; + yoff = polysec->ceiling_yoffs; + + if (po->angle != 0) { + angle_t fineshift = po->angle >> ANGLETOFINESHIFT; + + xoff -= FixedMul(FINECOSINE(fineshift), po->centerPt.x)+FixedMul(FINESINE(fineshift), po->centerPt.y); + yoff -= FixedMul(FINESINE(fineshift), po->centerPt.x)-FixedMul(FINECOSINE(fineshift), po->centerPt.y); + } else { + xoff -= po->centerPt.x; + yoff += po->centerPt.y; + } + light = R_GetPlaneLight(frontsector, polysec->ceilingheight, viewz < polysec->ceilingheight); light = 0; ffloor[numffloors].plane = R_FindPlane(polysec->ceilingheight, polysec->ceilingpic, - polysec->lightlevel, polysec->ceiling_xoffs, polysec->ceiling_yoffs, polysec->ceilingpic_angle, + polysec->lightlevel, xoff, yoff, polysec->ceilingpic_angle-po->angle, NULL, NULL); - ffloor[numffloors].plane->polyobj = true; + ffloor[numffloors].plane->polyobj = po; + ffloor[numffloors].polyobj = po; ffloor[numffloors].height = polysec->ceilingheight; // ffloor[numffloors].ffloor = rover; @@ -1147,5 +1179,14 @@ void R_RenderBSPNode(INT32 bspnum) bspnum = bsp->children[side^1]; } + + // PORTAL CULLING + if (portalcullsector) { + sector_t *sect = subsectors[bspnum & ~NF_SUBSECTOR].sector; + if (sect != portalcullsector) + return; + portalcullsector = NULL; + } + R_Subsector(bspnum == -1 ? 0 : bspnum & ~NF_SUBSECTOR); } diff --git a/src/r_bsp.h b/src/r_bsp.h index a765b656a..20a80d89a 100644 --- a/src/r_bsp.h +++ b/src/r_bsp.h @@ -37,9 +37,10 @@ typedef void (*drawfunc_t)(INT32 start, INT32 stop); // BSP? void R_ClearClipSegs(void); +void R_PortalClearClipSegs(INT32 start, INT32 end); void R_ClearDrawSegs(void); void R_RenderBSPNode(INT32 bspnum); -void R_AddPortal(INT32 line1, INT32 line2); +void R_AddPortal(INT32 line1, INT32 line2, INT32 x1, INT32 x2); #ifdef POLYOBJECTS void R_SortPolyObjects(subsector_t *sub); diff --git a/src/r_defs.h b/src/r_defs.h index 5a5eaf97a..7f8bd7e1d 100644 --- a/src/r_defs.h +++ b/src/r_defs.h @@ -167,6 +167,10 @@ typedef struct ffloor_s INT32 lastlight; INT32 alpha; tic_t norender; // for culling + + // these are saved for netgames, so do not let Lua touch these! + ffloortype_e spawnflags; // flags the 3D floor spawned with + INT32 spawnalpha; // alpha the 3D floor spawned with } ffloor_t; @@ -332,6 +336,16 @@ typedef struct sector_s // list of precipitation mobjs in sector precipmobj_t *preciplist; struct mprecipsecnode_s *touching_preciplist; + + // these are saved for netgames, so do not let Lua touch these! + + // offsets sector spawned with (via linedef type 7) + fixed_t spawn_flr_xoffs, spawn_flr_yoffs; + fixed_t spawn_ceil_xoffs, spawn_ceil_yoffs; + + // flag angles sector spawned with (via linedef type 7) + angle_t spawn_flrpic_angle; + angle_t spawn_ceilpic_angle; } sector_t; // @@ -381,6 +395,7 @@ typedef struct line_s #endif char *text; // a concatination of all front and back texture names, for linedef specials that require a string. + INT16 callcount; // no. of calls left before triggering, for the "X calls" linedef specials, defaults to 0 } line_t; // diff --git a/src/r_main.c b/src/r_main.c index 231dfe29b..f2c641f6a 100644 --- a/src/r_main.c +++ b/src/r_main.c @@ -73,14 +73,29 @@ player_t *viewplayer; // PORTALS! // You can thank and/or curse JTE for these. UINT8 portalrender; +sector_t *portalcullsector; typedef struct portal_pair { INT32 line1; INT32 line2; UINT8 pass; struct portal_pair *next; + + fixed_t viewx; + fixed_t viewy; + fixed_t viewz; + angle_t viewangle; + + INT32 start; + INT32 end; + INT16 *ceilingclip; + INT16 *floorclip; + fixed_t *frontscale; + size_t seg; } portal_pair; portal_pair *portal_base, *portal_cap; +line_t *portalclipline; +INT32 portalclipstart, portalclipend; // // precalculated math tables @@ -123,17 +138,21 @@ static CV_PossibleValue_t drawdist_cons_t[] = { {8192, "8192"}, {0, "Infinite"}, {0, NULL}}; static CV_PossibleValue_t precipdensity_cons_t[] = {{0, "None"}, {1, "Light"}, {2, "Moderate"}, {4, "Heavy"}, {6, "Thick"}, {8, "V.Thick"}, {0, NULL}}; static CV_PossibleValue_t translucenthud_cons_t[] = {{0, "MIN"}, {10, "MAX"}, {0, NULL}}; +static CV_PossibleValue_t maxportals_cons_t[] = {{0, "MIN"}, {12, "MAX"}, {0, NULL}}; // lmao rendering 32 portals, you're a card static CV_PossibleValue_t homremoval_cons_t[] = {{0, "No"}, {1, "Yes"}, {2, "Flash"}, {0, NULL}}; static void ChaseCam_OnChange(void); static void ChaseCam2_OnChange(void); +static void FlipCam_OnChange(void); +static void FlipCam2_OnChange(void); void SendWeaponPref(void); +void SendWeaponPref2(void); consvar_t cv_tailspickup = {"tailspickup", "On", CV_NETVAR, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_chasecam = {"chasecam", "On", CV_CALL, CV_OnOff, ChaseCam_OnChange, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_chasecam2 = {"chasecam2", "On", CV_CALL, CV_OnOff, ChaseCam2_OnChange, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_flipcam = {"flipcam", "No", CV_SAVE|CV_CALL|CV_NOINIT, CV_YesNo, SendWeaponPref, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_flipcam2 = {"flipcam2", "No", CV_SAVE|CV_CALL|CV_NOINIT, CV_YesNo, SendWeaponPref, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_flipcam = {"flipcam", "No", CV_SAVE|CV_CALL|CV_NOINIT, CV_YesNo, FlipCam_OnChange, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_flipcam2 = {"flipcam2", "No", CV_SAVE|CV_CALL|CV_NOINIT, CV_YesNo, FlipCam2_OnChange, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_shadow = {"shadow", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_shadowoffs = {"offsetshadows", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; @@ -151,6 +170,8 @@ consvar_t cv_precipdensity = {"precipdensity", "Moderate", CV_SAVE, precipdensit // Okay, whoever said homremoval causes a performance hit should be shot. consvar_t cv_homremoval = {"homremoval", "No", CV_SAVE, homremoval_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_maxportals = {"maxportals", "2", CV_SAVE, maxportals_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; + void SplitScreen_OnChange(void) { if (!cv_debug && netgame) @@ -207,6 +228,26 @@ static void ChaseCam2_OnChange(void) CV_SetValue(&cv_analog2, 1); } +static void FlipCam_OnChange(void) +{ + if (cv_flipcam.value) + players[consoleplayer].pflags |= PF_FLIPCAM; + else + players[consoleplayer].pflags &= ~PF_FLIPCAM; + + SendWeaponPref(); +} + +static void FlipCam2_OnChange(void) +{ + if (cv_flipcam2.value) + players[secondarydisplayplayer].pflags |= PF_FLIPCAM; + else + players[secondarydisplayplayer].pflags &= ~PF_FLIPCAM; + + SendWeaponPref2(); +} + // // R_PointOnSide // Traverse BSP (sub) tree, @@ -425,6 +466,47 @@ fixed_t R_ScaleFromGlobalAngle(angle_t visangle) return 64*FRACUNIT; } +// +// R_DoCulling +// Checks viewz and top/bottom heights of an item against culling planes +// Returns true if the item is to be culled, i.e it shouldn't be drawn! +// if ML_NOCLIMB is set, the camera view is required to be in the same area for culling to occur +boolean R_DoCulling(line_t *cullheight, line_t *viewcullheight, fixed_t vz, fixed_t bottomh, fixed_t toph) +{ + fixed_t cullplane; + + if (!cullheight) + return false; + + cullplane = cullheight->frontsector->floorheight; + if (cullheight->flags & ML_NOCLIMB) // Group culling + { + if (!viewcullheight) + return false; + + // Make sure this is part of the same group + if (viewcullheight->frontsector == cullheight->frontsector) + { + // OK, we can cull + if (vz > cullplane && toph < cullplane) // Cull if below plane + return true; + + if (bottomh > cullplane && vz <= cullplane) // Cull if above plane + return true; + } + } + else // Quick culling + { + if (vz > cullplane && toph < cullplane) // Cull if below plane + return true; + + if (bottomh > cullplane && vz <= cullplane) // Cull if above plane + return true; + } + + return false; +} + // // R_InitTextureMapping // @@ -1070,7 +1152,9 @@ void R_SetupFrame(player_t *player, boolean skybox) centeryfrac = centery<dx,dest->dy) - R_PointToAngle2(start->dx,start->dy,0,0); #endif - R_SetupFrame(player, false); + //R_SetupFrame(player, false); + viewx = portal->viewx; + viewy = portal->viewy; + viewz = portal->viewz; + + viewangle = portal->viewangle; + viewsin = FINESINE(viewangle>>ANGLETOFINESHIFT); + viewcos = FINECOSINE(viewangle>>ANGLETOFINESHIFT); + + portalcullsector = dest->frontsector; + viewsector = dest->frontsector; + portalclipline = dest; + portalclipstart = portal->start; + portalclipend = portal->end; // Offset the portal view by the linedef centers @@ -1090,6 +1187,9 @@ static void R_PortalFrame(player_t *player, line_t *start, line_t *dest) dest_c.x = (dest->v1->x + dest->v2->x) / 2; dest_c.y = (dest->v1->y + dest->v2->y) / 2; + // Heights! + viewz += dest->frontsector->floorheight - start->frontsector->floorheight; + // calculate the difference in position and rotation! #ifdef ANGLED_PORTALS if (dangle == 0) @@ -1104,22 +1204,51 @@ static void R_PortalFrame(player_t *player, line_t *start, line_t *dest) viewangle += dangle; viewsin = FINESINE(viewangle>>ANGLETOFINESHIFT); viewcos = FINECOSINE(viewangle>>ANGLETOFINESHIFT); - CONS_Printf("dangle == %u\n", AngleFixed(dangle)>>FRACBITS); + //CONS_Printf("dangle == %u\n", AngleFixed(dangle)>>FRACBITS); // ???? - viewx = dest_c.x - viewx; - viewy = dest_c.y - viewy; + { + fixed_t disttopoint; + angle_t angtopoint; + + disttopoint = R_PointToDist2(start_c.x, start_c.y, viewx, viewy); + angtopoint = R_PointToAngle2(start_c.x, start_c.y, viewx, viewy); + angtopoint += dangle; + + viewx = dest_c.x+FixedMul(FINECOSINE(angtopoint>>ANGLETOFINESHIFT), disttopoint); + viewy = dest_c.y+FixedMul(FINESINE(angtopoint>>ANGLETOFINESHIFT), disttopoint); + } #endif } -void R_AddPortal(INT32 line1, INT32 line2) +void R_AddPortal(INT32 line1, INT32 line2, INT32 x1, INT32 x2) { portal_pair *portal = Z_Malloc(sizeof(portal_pair), PU_LEVEL, NULL); + INT16 *ceilingclipsave = Z_Malloc(sizeof(INT16)*(x2-x1), PU_LEVEL, NULL); + INT16 *floorclipsave = Z_Malloc(sizeof(INT16)*(x2-x1), PU_LEVEL, NULL); + fixed_t *frontscalesave = Z_Malloc(sizeof(fixed_t)*(x2-x1), PU_LEVEL, NULL); + portal->line1 = line1; portal->line2 = line2; portal->pass = portalrender+1; portal->next = NULL; + R_PortalStoreClipValues(x1, x2, ceilingclipsave, floorclipsave, frontscalesave); + + portal->ceilingclip = ceilingclipsave; + portal->floorclip = floorclipsave; + portal->frontscale = frontscalesave; + + portal->start = x1; + portal->end = x2; + + portal->seg = ds_p-drawsegs; + + portal->viewx = viewx; + portal->viewy = viewy; + portal->viewz = viewz; + portal->viewangle = viewangle; + if (!portal_base) { portal_base = portal; @@ -1203,6 +1332,7 @@ void R_RenderPlayerView(player_t *player) ProfZeroTimer(); #endif R_RenderBSPNode((INT32)numnodes - 1); + R_ClipSprites(); #ifdef TIMING RDMSR(0x10, &mycount); mytotal += mycount; // 64bit add @@ -1211,6 +1341,41 @@ void R_RenderPlayerView(player_t *player) #endif //profile stuff --------------------------------------------------------- + // PORTAL RENDERING + for(portal = portal_base; portal; portal = portal_base) + { + // render the portal + CONS_Debug(DBG_RENDER, "Rendering portal from line %d to %d\n", portal->line1, portal->line2); + portalrender = portal->pass; + + R_PortalFrame(&lines[portal->line1], &lines[portal->line2], portal); + + R_PortalClearClipSegs(portal->start, portal->end); + + R_PortalRestoreClipValues(portal->start, portal->end, portal->ceilingclip, portal->floorclip, portal->frontscale); + + validcount++; + + if (portal->seg) + { + // Push the portal's old drawseg out of the way so it isn't interfering with sprite clipping. -Red + drawseg_t *seg = drawsegs+portal->seg; + seg->scale1 = 0; + seg->scale2 = 0; + } + + R_RenderBSPNode((INT32)numnodes - 1); + R_ClipSprites(); + //R_DrawPlanes(); + //R_DrawMasked(); + + // okay done. free it. + portalcullsector = NULL; // Just in case... + portal_base = portal->next; + Z_Free(portal); + } + // END PORTAL RENDERING + R_DrawPlanes(); #ifdef FLOORSPLATS R_DrawVisibleFloorSplats(); @@ -1219,24 +1384,6 @@ void R_RenderPlayerView(player_t *player) // And now 3D floors/sides! R_DrawMasked(); - // PORTAL RENDERING - for(portal = portal_base; portal; portal = portal_base) - { - // render the portal - CONS_Debug(DBG_RENDER, "Rendering portal from line %d to %d\n", portal->line1, portal->line2); - portalrender = portal->pass; - R_PortalFrame(player, &lines[portal->line1], &lines[portal->line2]); - validcount++; - R_RenderBSPNode((INT32)numnodes - 1); - R_DrawPlanes(); - R_DrawMasked(); - - // okay done. free it. - portal_base = portal->next; - Z_Free(portal); - } - // END PORTAL RENDERING - // Check for new console commands. NetUpdate(); } @@ -1286,6 +1433,8 @@ void R_RegisterEngineStuff(void) CV_RegisterVar(&cv_showhud); CV_RegisterVar(&cv_translucenthud); + CV_RegisterVar(&cv_maxportals); + // Default viewheight is changeable, // initialized to standard viewheight CV_RegisterVar(&cv_viewheight); diff --git a/src/r_main.h b/src/r_main.h index a367960c7..0d3f2def5 100644 --- a/src/r_main.h +++ b/src/r_main.h @@ -77,6 +77,8 @@ fixed_t R_ScaleFromGlobalAngle(angle_t visangle); subsector_t *R_PointInSubsector(fixed_t x, fixed_t y); subsector_t *R_IsPointInSubsector(fixed_t x, fixed_t y); +boolean R_DoCulling(line_t *cullheight, line_t *viewcullheight, fixed_t vz, fixed_t bottomh, fixed_t toph); + // // REFRESH - the actual rendering functions. // diff --git a/src/r_plane.c b/src/r_plane.c index 7e1764fc5..dcff25c13 100644 --- a/src/r_plane.c +++ b/src/r_plane.c @@ -106,6 +106,50 @@ void R_InitPlanes(void) // FIXME: unused } +// R_PortalStoreClipValues +// Saves clipping values for later. -Red +void R_PortalStoreClipValues(INT32 start, INT32 end, INT16 *ceil, INT16 *floor, fixed_t *scale) +{ + INT32 i; + for (i = 0; i < end-start; i++) + { + *ceil = ceilingclip[start+i]; + ceil++; + *floor = floorclip[start+i]; + floor++; + *scale = frontscale[start+i]; + scale++; + } +} + +// R_PortalRestoreClipValues +// Inverse of the above. Restores the old value! +void R_PortalRestoreClipValues(INT32 start, INT32 end, INT16 *ceil, INT16 *floor, fixed_t *scale) +{ + INT32 i; + for (i = 0; i < end-start; i++) + { + ceilingclip[start+i] = *ceil; + ceil++; + floorclip[start+i] = *floor; + floor++; + frontscale[start+i] = *scale; + scale++; + } + + // HACKS FOLLOW + for (i = 0; i < start; i++) + { + floorclip[i] = -1; + ceilingclip[i] = (INT16)viewheight; + } + for (i = end; i < vid.width; i++) + { + floorclip[i] = -1; + ceilingclip[i] = (INT16)viewheight; + } +} + //profile stuff --------------------------------------------------------- //#define TIMING @@ -409,6 +453,10 @@ visplane_t *R_FindPlane(fixed_t height, INT32 picnum, INT32 lightlevel, for (check = visplanes[hash]; check; check = check->next) { +#ifdef POLYOBJECTS_PLANES + if (check->polyobj && pfloor) + continue; +#endif if (height == check->height && picnum == check->picnum && lightlevel == check->lightlevel && xoff == check->xoffs && yoff == check->yoffs @@ -434,6 +482,9 @@ visplane_t *R_FindPlane(fixed_t height, INT32 picnum, INT32 lightlevel, check->viewz = viewz; check->viewangle = viewangle + plangle; check->plangle = plangle; +#ifdef POLYOBJECTS_PLANES + check->polyobj = NULL; +#endif memset(check->top, 0xff, sizeof (check->top)); memset(check->bottom, 0x00, sizeof (check->bottom)); @@ -590,6 +641,7 @@ void R_MakeSpans(INT32 x, INT32 t1, INT32 b1, INT32 t2, INT32 b2) void R_DrawPlanes(void) { visplane_t *pl; + angle_t skyviewangle = viewangle; // the flat angle itself can mess with viewangle, so do your own angle instead! INT32 x; INT32 angle; INT32 i; @@ -628,7 +680,7 @@ void R_DrawPlanes(void) if (dc_yl <= dc_yh) { - angle = (viewangle + xtoviewangle[x])>>ANGLETOSKYSHIFT; + angle = (skyviewangle + xtoviewangle[x])>>ANGLETOSKYSHIFT; dc_x = x; dc_source = R_GetColumn(skytexture, @@ -666,6 +718,42 @@ void R_DrawSinglePlane(visplane_t *pl) itswater = false; #endif spanfunc = basespanfunc; + +#ifdef POLYOBJECTS_PLANES + if (pl->polyobj && pl->polyobj->translucency != 0) { + spanfunc = R_DrawTranslucentSpan_8; + + // Hacked up support for alpha value in software mode Tails 09-24-2002 (sidenote: ported to polys 10-15-2014, there was no time travel involved -Red) + if (pl->polyobj->translucency >= 10) + return; // Don't even draw it + else if (pl->polyobj->translucency == 9) + ds_transmap = ((tr_trans90)<polyobj->translucency == 8) + ds_transmap = ((tr_trans80)<polyobj->translucency == 7) + ds_transmap = ((tr_trans70)<polyobj->translucency == 6) + ds_transmap = ((tr_trans60)<polyobj->translucency == 5) + ds_transmap = ((tr_trans50)<polyobj->translucency == 4) + ds_transmap = ((tr_trans40)<polyobj->translucency == 3) + ds_transmap = ((tr_trans30)<polyobj->translucency == 2) + ds_transmap = ((tr_trans20)<polyobj->translucency == 1) + ds_transmap = ((tr_trans10)<extra_colormap && pl->extra_colormap->fog) + light = (pl->lightlevel >> LIGHTSEGSHIFT); + else + light = LIGHTLEVELS-1; + + } else +#endif if (pl->ffloor) { // Don't draw planes that shouldn't be drawn. diff --git a/src/r_plane.h b/src/r_plane.h index 1f046588f..f3a7f573f 100644 --- a/src/r_plane.h +++ b/src/r_plane.h @@ -59,7 +59,7 @@ typedef struct visplane_s struct ffloor_s *ffloor; #ifdef POLYOBJECTS_PLANES - boolean polyobj; + polyobj_t *polyobj; #endif } visplane_t; @@ -83,6 +83,8 @@ extern fixed_t *yslope; extern fixed_t distscale[MAXVIDWIDTH]; void R_InitPlanes(void); +void R_PortalStoreClipValues(INT32 start, INT32 end, INT16 *ceil, INT16 *floor, fixed_t *scale); +void R_PortalRestoreClipValues(INT32 start, INT32 end, INT16 *ceil, INT16 *floor, fixed_t *scale); void R_ClearPlanes(void); void R_MapPlane(INT32 y, INT32 x1, INT32 x2); diff --git a/src/r_segs.c b/src/r_segs.c index 1070bff7c..c73cfdf9f 100644 --- a/src/r_segs.c +++ b/src/r_segs.c @@ -589,7 +589,8 @@ void R_RenderMaskedSegRange(drawseg_t *ds, INT32 x1, INT32 x2) // draw the texture col = (column_t *)((UINT8 *)R_GetColumn(texnum, maskedtexturecol[dc_x]) - 3); -#ifdef POLYOBJECTS_PLANES +//#ifdef POLYOBJECTS_PLANES +#if 0 // Disabling this allows inside edges to render below the planes, for until the clipping is fixed to work right when POs are near the camera. -Red if (curline->dontrenderme && curline->polyseg && (curline->polyseg->flags & POF_RENDERPLANES)) { fixed_t my_topscreen; @@ -611,7 +612,7 @@ void R_RenderMaskedSegRange(drawseg_t *ds, INT32 x1, INT32 x2) for (i = 0; i < numffloors; i++) { - if (!ffloor[i].polyobj) + if (!ffloor[i].polyobj || ffloor[i].polyobj != curline->polyseg) continue; if (ffloor[i].height < viewz) @@ -650,6 +651,15 @@ void R_RenderMaskedSegRange(drawseg_t *ds, INT32 x1, INT32 x2) colfunc = wallcolfunc; } +// Loop through R_DrawMaskedColumn calls +static void R_DrawRepeatMaskedColumn(column_t *col) +{ + do { + R_DrawMaskedColumn(col); + sprtopscreen += dc_texheight*spryscale; + } while (sprtopscreen < sprbotscreen); +} + // // R_RenderThickSideRange // Renders all the thick sides in the given range. @@ -836,7 +846,7 @@ void R_RenderThickSideRange(drawseg_t *ds, INT32 x1, INT32 x2, ffloor_t *pfloor) //faB: handle case where multipatch texture is drawn on a 2sided wall, multi-patch textures // are not stored per-column with post info anymore in Doom Legacy if (textures[texnum]->holes) - colfunc_2s = R_DrawMaskedColumn; //render the usual 2sided single-patch packed texture + colfunc_2s = R_DrawRepeatMaskedColumn; //render the usual 2sided single-patch packed texture else { colfunc_2s = R_Render2sidedMultiPatchColumn; //render multipatch with no holes (no post_t info) @@ -1120,8 +1130,16 @@ static void R_RenderSegLoop (void) for (i = 0; i < numffloors; i++) { #ifdef POLYOBJECTS_PLANES - if (curline->polyseg && !ffloor[i].polyobj) - continue; + //if (curline->polyseg && (!ffloor[i].polyobj || ffloor[i].polyobj != curline->polyseg)) + //continue; // Causes issues with FOF planes in The Wall -Red + + // FIXME hack to fix planes disappearing when a seg goes behind the camera. This NEEDS to be changed to be done properly. -Red + if (curline->polyseg) { + if (ffloor[i].plane->minx > rw_x) + ffloor[i].plane->minx = rw_x; + else if (ffloor[i].plane->maxx < rw_x) + ffloor[i].plane->maxx = rw_x; + } #endif if (ffloor[i].height < viewz) @@ -1135,6 +1153,13 @@ static void R_RenderSegLoop (void) if (bottom_w > bottom) bottom_w = bottom; +#ifdef POLYOBJECTS_PLANES + // Polyobject-specific hack to fix plane leaking -Red + if (curline->polyseg && ffloor[i].polyobj && ffloor[i].polyobj == curline->polyseg && top_w >= bottom_w) { + ffloor[i].plane->top[rw_x] = ffloor[i].plane->bottom[rw_x] = 0xFFFF; + } else +#endif + if (top_w <= bottom_w) { ffloor[i].plane->top[rw_x] = (INT16)top_w; @@ -1152,6 +1177,13 @@ static void R_RenderSegLoop (void) if (bottom_w > bottom) bottom_w = bottom; +#ifdef POLYOBJECTS_PLANES + // Polyobject-specific hack to fix plane leaking -Red + if (curline->polyseg && ffloor[i].polyobj && ffloor[i].polyobj == curline->polyseg && top_w >= bottom_w) { + ffloor[i].plane->top[rw_x] = ffloor[i].plane->bottom[rw_x] = 0xFFFF; + } else +#endif + if (top_w <= bottom_w) { ffloor[i].plane->top[rw_x] = (INT16)top_w; @@ -1327,9 +1359,9 @@ static void R_RenderSegLoop (void) for (i = 0; i < numffloors; i++) { -#ifdef POLYOBJECTS_PLANES - if (curline->polyseg && !ffloor[i].polyobj) - continue; +#if 0 //#ifdef POLYOBJECTS_PLANES + if (curline->polyseg && (!ffloor[i].polyobj || ffloor[i].polyobj != curline->polyseg)) + continue; // Causes issues with FOF planes in The Wall -Red #endif ffloor[i].f_frac += ffloor[i].f_step; @@ -1339,9 +1371,9 @@ static void R_RenderSegLoop (void) { INT32 y_w; -#ifdef POLYOBJECTS_PLANES - if (curline->polyseg && !ffloor[i].polyobj) - continue; +#if 0 //#ifdef POLYOBJECTS_PLANES + if (curline->polyseg && (!ffloor[i].polyobj || ffloor[i].polyobj != curline->polyseg)) + continue; // Causes issues with FOF planes in The Wall -Red #endif y_w = ffloor[i].b_frac >> HEIGHTBITS; @@ -1488,9 +1520,9 @@ void R_StoreWallRange(INT32 start, INT32 stop) { for (i = 0; i < numffloors; i++) { -#ifdef POLYOBJECTS_PLANES - if (ds_p->curline->polyseg && !ffloor[i].polyobj) - continue; +#if 0 //#ifdef POLYOBJECTS_PLANES + if (ds_p->curline->polyseg && (!ffloor[i].polyobj || ffloor[i].polyobj != ds_p->curline->polyseg)) + continue; // Causes issues with FOF planes in The Wall -Red #endif ffloor[i].f_pos = ffloor[i].height - viewz; } @@ -1989,8 +2021,10 @@ void R_StoreWallRange(INT32 start, INT32 stop) { for (i = 0; i < numffloors; i++) { -// if (curline->polyseg && !ffloor[i].polyobj) -// continue; +#if 0 //#ifdef POLYOBJECTS_PLANES + if (curline->polyseg && (!ffloor[i].polyobj || ffloor[i].polyobj != curline->polyseg)) + continue; // Causes issues with FOF planes in The Wall -Red +#endif ffloor[i].f_pos >>= 4; ffloor[i].f_step = FixedMul(-rw_scalestep, ffloor[i].f_pos); diff --git a/src/r_state.h b/src/r_state.h index aec0a6485..dc1ed931b 100644 --- a/src/r_state.h +++ b/src/r_state.h @@ -88,8 +88,12 @@ extern boolean viewsky, skyVisible; extern sector_t *viewsector; extern player_t *viewplayer; extern UINT8 portalrender; +extern sector_t *portalcullsector; +extern line_t *portalclipline; +extern INT32 portalclipstart, portalclipend; extern consvar_t cv_allowmlook; +extern consvar_t cv_maxportals; extern angle_t clipangle; extern angle_t doubleclipangle; diff --git a/src/r_things.c b/src/r_things.c index c0f33dafb..6372ddb4c 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -489,6 +489,7 @@ void R_DelSpriteDefs(UINT16 wadnum) // GAME FUNCTIONS // static UINT32 visspritecount; +static UINT32 clippedvissprites; static vissprite_t *visspritechunks[MAXVISSPRITES >> VISSPRITECHUNKBITS] = {NULL}; @@ -546,7 +547,7 @@ void R_InitSprites(void) // void R_ClearSprites(void) { - visspritecount = 0; + visspritecount = clippedvissprites = 0; } static inline void R_ResetVisSpriteChunks(void) @@ -608,8 +609,7 @@ void R_DrawMaskedColumn(column_t *column) topdelta += prevdelta; prevdelta = topdelta; topscreen = sprtopscreen + spryscale*topdelta; - bottomscreen = sprbotscreen == INT32_MAX ? topscreen + spryscale*column->length - : sprbotscreen + spryscale*column->length; + bottomscreen = topscreen + spryscale*column->length; dc_yl = (topscreen+FRACUNIT-1)>>FRACBITS; dc_yh = (bottomscreen-1)>>FRACBITS; @@ -1157,6 +1157,16 @@ static void R_ProjectSprite(mobj_t *thing) if (x2 < 0) return; + // PORTAL SPRITE CLIPPING + if (portalrender) + { + if (x2 < portalclipstart || x1 > portalclipend) + return; + + if (P_PointOnLineSide(thing->x, thing->y, portalclipline) != 0) + return; + } + //SoM: 3/17/2000: Disregard sprites that are out of view.. if (thing->eflags & MFE_VERTICALFLIP) { @@ -1174,29 +1184,8 @@ static void R_ProjectSprite(mobj_t *thing) if (thing->subsector->sector->cullheight) { - fixed_t cullplane = thing->subsector->sector->cullheight->frontsector->floorheight; - if (thing->subsector->sector->cullheight->flags & ML_NOCLIMB) // Group culling - { - // Make sure this is part of the same group - if (viewsector->cullheight && viewsector->cullheight->frontsector - == thing->subsector->sector->cullheight->frontsector) - { - // OK, we can cull - if (viewz > cullplane && gzt < cullplane) // Cull if below plane - return; - - if (gz > cullplane && viewz <= cullplane) // Cull if above plane - return; - } - } - else // Quick culling - { - if (viewz > cullplane && gzt < cullplane) // Cull if below plane - return; - - if (gz > cullplane && viewz <= cullplane) // Cull if above plane - return; - } + if (R_DoCulling(thing->subsector->sector->cullheight, viewsector->cullheight, viewz, gz, gzt)) + return; } if (thing->subsector->sector->numlights) @@ -1258,6 +1247,16 @@ static void R_ProjectSprite(mobj_t *thing) vis->x1 = x1 < 0 ? 0 : x1; vis->x2 = x2 >= viewwidth ? viewwidth-1 : x2; + + // PORTAL SEMI-CLIPPING + if (portalrender) + { + if (vis->x1 < portalclipstart) + vis->x1 = portalclipstart; + if (vis->x2 > portalclipend) + vis->x2 = portalclipend; + } + vis->xscale = xscale; //SoM: 4/17/2000 vis->sector = thing->subsector->sector; vis->szt = (INT16)((centeryfrac - FixedMul(vis->gzt - viewz, yscale))>>FRACBITS); @@ -1350,7 +1349,7 @@ static void R_ProjectPrecipitationSprite(precipmobj_t *thing) fixed_t iscale; //SoM: 3/17/2000 - fixed_t gzt; + fixed_t gz ,gzt; // transform the origin point tr_x = thing->x - viewx; @@ -1417,33 +1416,24 @@ static void R_ProjectPrecipitationSprite(precipmobj_t *thing) if (x2 < 0) return; + // PORTAL SPRITE CLIPPING + if (portalrender) + { + if (x2 < portalclipstart || x1 > portalclipend) + return; + + if (P_PointOnLineSide(thing->x, thing->y, portalclipline) != 0) + return; + } + //SoM: 3/17/2000: Disregard sprites that are out of view.. gzt = thing->z + spritecachedinfo[lump].topoffset; + gz = gzt - spritecachedinfo[lump].height; if (thing->subsector->sector->cullheight) { - if (thing->subsector->sector->cullheight->flags & ML_NOCLIMB) // Group culling - { - // Make sure this is part of the same group - if (viewsector->cullheight && viewsector->cullheight->frontsector - == thing->subsector->sector->cullheight->frontsector) - { - // OK, we can cull - if (viewz > thing->subsector->sector->cullheight->frontsector->floorheight - && gzt < thing->subsector->sector->cullheight->frontsector->floorheight) // Cull if below plane - return; - else if (gzt - spritecachedinfo[lump].height > thing->subsector->sector->cullheight->frontsector->floorheight) // Cull if above plane - return; - } - } - else // Quick culling - { - if (viewz > thing->subsector->sector->cullheight->frontsector->floorheight - && gzt < thing->subsector->sector->cullheight->frontsector->floorheight) // Cull if below plane - return; - else if (gzt - spritecachedinfo[lump].height > thing->subsector->sector->cullheight->frontsector->floorheight) // Cull if above plane - return; - } + if (R_DoCulling(thing->subsector->sector->cullheight, viewsector->cullheight, viewz, gz, gzt)) + return; } // quick check for possible overflows @@ -1454,13 +1444,12 @@ static void R_ProjectPrecipitationSprite(precipmobj_t *thing) return; } - // store information in a vissprite vis = R_NewVisSprite(); vis->scale = yscale; //<gx = thing->x; vis->gy = thing->y; - vis->gz = gzt - spritecachedinfo[lump].height; + vis->gz = gz; vis->gzt = gzt; vis->thingheight = 4*FRACUNIT; vis->pz = thing->z; @@ -1469,6 +1458,16 @@ static void R_ProjectPrecipitationSprite(precipmobj_t *thing) vis->x1 = x1 < 0 ? 0 : x1; vis->x2 = x2 >= viewwidth ? viewwidth-1 : x2; + + // PORTAL SEMI-CLIPPING + if (portalrender) + { + if (vis->x1 < portalclipstart) + vis->x1 = portalclipstart; + if (vis->x2 > portalclipend) + vis->x2 = portalclipend; + } + vis->xscale = xscale; //SoM: 4/17/2000 vis->sector = thing->subsector->sector; vis->szt = (INT16)((centeryfrac - FixedMul(vis->gzt - viewz, yscale))>>FRACBITS); @@ -1830,6 +1829,20 @@ static void R_CreateDrawNodes(void) } else if (r2->seg) { +#ifdef POLYOBJECTS_PLANES + if (r2->seg->curline->polyseg && rover->mobj && P_MobjInsidePolyobj(r2->seg->curline->polyseg, rover->mobj)) { + // Determine if we need to sort in front of the polyobj, based on the planes. This fixes the issue where + // polyobject planes render above the object standing on them. (A bit hacky... but it works.) -Red + mobj_t *mo = rover->mobj; + sector_t *po = r2->seg->curline->backsector; + + if (po->ceilingheight < viewz && mo->z+mo->height > po->ceilingheight) + continue; + + if (po->floorheight > viewz && mo->z < po->floorheight) + continue; + } +#endif if (rover->x1 > r2->seg->x2 || rover->x2 < r2->seg->x1) continue; @@ -1937,297 +1950,201 @@ void R_InitDrawNodes(void) // don't draw the part of sprites hidden under the console static void R_DrawSprite(vissprite_t *spr) { - drawseg_t *ds; - INT16 clipbot[MAXVIDWIDTH]; - INT16 cliptop[MAXVIDWIDTH]; - INT32 x; - INT32 r1; - INT32 r2; - fixed_t scale; - fixed_t lowscale; - INT32 silhouette; - - memset(clipbot,0x00,sizeof (clipbot)); - memset(cliptop,0x00,sizeof (cliptop)); - for (x = spr->x1; x <= spr->x2; x++) - clipbot[x] = cliptop[x] = -2; - - // Scan drawsegs from end to start for obscuring segs. - // The first drawseg that has a greater scale - // is the clip seg. - //SoM: 4/8/2000: - // Pointer check was originally nonportable - // and buggy, by going past LEFT end of array: - - // for (ds = ds_p-1; ds >= drawsegs; ds--) old buggy code - for (ds = ds_p; ds-- > drawsegs ;) - { - // determine if the drawseg obscures the sprite - if (ds->x1 > spr->x2 || - ds->x2 < spr->x1 || - (!ds->silhouette - && !ds->maskedtexturecol)) - { - // does not cover sprite - continue; - } - - r1 = ds->x1 < spr->x1 ? spr->x1 : ds->x1; - r2 = ds->x2 > spr->x2 ? spr->x2 : ds->x2; - - if (ds->scale1 > ds->scale2) - { - lowscale = ds->scale2; - scale = ds->scale1; - } - else - { - lowscale = ds->scale1; - scale = ds->scale2; - } - - if (scale < spr->scale || - (lowscale < spr->scale && - !R_PointOnSegSide (spr->gx, spr->gy, ds->curline))) - { - // masked mid texture? - /*if (ds->maskedtexturecol) - R_RenderMaskedSegRange (ds, r1, r2);*/ - // seg is behind sprite - continue; - } - - // clip this piece of the sprite - silhouette = ds->silhouette; - - if (spr->gz >= ds->bsilheight) - silhouette &= ~SIL_BOTTOM; - - if (spr->gzt <= ds->tsilheight) - silhouette &= ~SIL_TOP; - - if (silhouette == 1) - { - // bottom sil - for (x = r1; x <= r2; x++) - if (clipbot[x] == -2) - clipbot[x] = ds->sprbottomclip[x]; - } - else if (silhouette == 2) - { - // top sil - for (x = r1; x <= r2; x++) - if (cliptop[x] == -2) - cliptop[x] = ds->sprtopclip[x]; - } - else if (silhouette == 3) - { - // both - for (x = r1; x <= r2; x++) - { - if (clipbot[x] == -2) - clipbot[x] = ds->sprbottomclip[x]; - if (cliptop[x] == -2) - cliptop[x] = ds->sprtopclip[x]; - } - } - } - //SoM: 3/17/2000: Clip sprites in water. - if (spr->heightsec != -1) // only things in specially marked sectors - { - fixed_t mh, h; - INT32 phs = viewplayer->mo->subsector->sector->heightsec; - if ((mh = sectors[spr->heightsec].floorheight) > spr->gz && - (h = centeryfrac - FixedMul(mh -= viewz, spr->scale)) >= 0 && - (h >>= FRACBITS) < viewheight) - { - if (mh <= 0 || (phs != -1 && viewz > sectors[phs].floorheight)) - { // clip bottom - for (x = spr->x1; x <= spr->x2; x++) - if (clipbot[x] == -2 || h < clipbot[x]) - clipbot[x] = (INT16)h; - } - else // clip top - { - for (x = spr->x1; x <= spr->x2; x++) - if (cliptop[x] == -2 || h > cliptop[x]) - cliptop[x] = (INT16)h; - } - } - - if ((mh = sectors[spr->heightsec].ceilingheight) < spr->gzt && - (h = centeryfrac - FixedMul(mh-viewz, spr->scale)) >= 0 && - (h >>= FRACBITS) < viewheight) - { - if (phs != -1 && viewz >= sectors[phs].ceilingheight) - { // clip bottom - for (x = spr->x1; x <= spr->x2; x++) - if (clipbot[x] == -2 || h < clipbot[x]) - clipbot[x] = (INT16)h; - } - else // clip top - { - for (x = spr->x1; x <= spr->x2; x++) - if (cliptop[x] == -2 || h > cliptop[x]) - cliptop[x] = (INT16)h; - } - } - } - if (spr->cut & SC_TOP && spr->cut & SC_BOTTOM) - { - for (x = spr->x1; x <= spr->x2; x++) - { - if (cliptop[x] == -2 || spr->szt > cliptop[x]) - cliptop[x] = spr->szt; - - if (clipbot[x] == -2 || spr->sz < clipbot[x]) - clipbot[x] = spr->sz; - } - } - else if (spr->cut & SC_TOP) - { - for (x = spr->x1; x <= spr->x2; x++) - { - if (cliptop[x] == -2 || spr->szt > cliptop[x]) - cliptop[x] = spr->szt; - } - } - else if (spr->cut & SC_BOTTOM) - { - for (x = spr->x1; x <= spr->x2; x++) - { - if (clipbot[x] == -2 || spr->sz < clipbot[x]) - clipbot[x] = spr->sz; - } - } - - // all clipping has been performed, so draw the sprite - - // check for unclipped columns - for (x = spr->x1; x <= spr->x2; x++) - { - if (clipbot[x] == -2) - clipbot[x] = (INT16)viewheight; - - if (cliptop[x] == -2) - //Fab : 26-04-98: was -1, now clips against console bottom - cliptop[x] = (INT16)con_clipviewtop; - } - - mfloorclip = clipbot; - mceilingclip = cliptop; + mfloorclip = spr->clipbot; + mceilingclip = spr->cliptop; R_DrawVisSprite(spr); } // Special drawer for precipitation sprites Tails 08-18-2002 static void R_DrawPrecipitationSprite(vissprite_t *spr) { - drawseg_t *ds; - INT16 clipbot[MAXVIDWIDTH]; - INT16 cliptop[MAXVIDWIDTH]; - INT32 x; - INT32 r1; - INT32 r2; - fixed_t scale; - fixed_t lowscale; - INT32 silhouette; + mfloorclip = spr->clipbot; + mceilingclip = spr->cliptop; + R_DrawPrecipitationVisSprite(spr); +} - memset(clipbot,0x00,sizeof (clipbot)); - memset(cliptop,0x00,sizeof (cliptop)); - for (x = spr->x1; x <= spr->x2; x++) - clipbot[x] = cliptop[x] = -2; - - // Scan drawsegs from end to start for obscuring segs. - // The first drawseg that has a greater scale - // is the clip seg. - //SoM: 4/8/2000: - // Pointer check was originally nonportable - // and buggy, by going past LEFT end of array: - - // for (ds = ds_p-1; ds >= drawsegs; ds--) old buggy code - for (ds = ds_p; ds-- > drawsegs ;) +// R_ClipSprites +// Clips vissprites without drawing, so that portals can work. -Red +void R_ClipSprites(void) +{ + vissprite_t *spr; + for (;clippedvissprites < visspritecount; clippedvissprites++) { - // determine if the drawseg obscures the sprite - if (ds->x1 > spr->x2 || - ds->x2 < spr->x1 || - (!ds->silhouette && - !ds->maskedtexturecol)) - { - // does not cover sprite - continue; - } + drawseg_t *ds; + INT32 x; + INT32 r1; + INT32 r2; + fixed_t scale; + fixed_t lowscale; + INT32 silhouette; - r1 = ds->x1 < spr->x1 ? spr->x1 : ds->x1; - r2 = ds->x2 > spr->x2 ? spr->x2 : ds->x2; + spr = R_GetVisSprite(clippedvissprites); - if (ds->scale1 > ds->scale2) - { - lowscale = ds->scale2; - scale = ds->scale1; - } - else - { - lowscale = ds->scale1; - scale = ds->scale2; - } + for (x = spr->x1; x <= spr->x2; x++) + spr->clipbot[x] = spr->cliptop[x] = -2; - if (scale < spr->scale || - (lowscale < spr->scale && - !R_PointOnSegSide (spr->gx, spr->gy, ds->curline))) - { - // masked mid texture? - /*if (ds->maskedtexturecol) - R_RenderMaskedSegRange(ds, r1, r2);*/ - // seg is behind sprite - continue; - } + // Scan drawsegs from end to start for obscuring segs. + // The first drawseg that has a greater scale + // is the clip seg. + //SoM: 4/8/2000: + // Pointer check was originally nonportable + // and buggy, by going past LEFT end of array: - // clip this piece of the sprite - silhouette = ds->silhouette; - - if (silhouette == 1) + // for (ds = ds_p-1; ds >= drawsegs; ds--) old buggy code + for (ds = ds_p; ds-- > drawsegs ;) { - // bottom sil - for (x = r1; x <= r2; x++) - if (clipbot[x] == -2) - clipbot[x] = ds->sprbottomclip[x]; - } - else if (silhouette == 2) - { - // top sil - for (x = r1; x <= r2; x++) - if (cliptop[x] == -2) - cliptop[x] = ds->sprtopclip[x]; - } - else if (silhouette == 3) - { - // both - for (x = r1; x <= r2; x++) + // determine if the drawseg obscures the sprite + if (ds->x1 > spr->x2 || + ds->x2 < spr->x1 || + (!ds->silhouette + && !ds->maskedtexturecol)) { - if (clipbot[x] == -2) - clipbot[x] = ds->sprbottomclip[x]; - if (cliptop[x] == -2) - cliptop[x] = ds->sprtopclip[x]; + // does not cover sprite + continue; + } + + r1 = ds->x1 < spr->x1 ? spr->x1 : ds->x1; + r2 = ds->x2 > spr->x2 ? spr->x2 : ds->x2; + + if (ds->scale1 > ds->scale2) + { + lowscale = ds->scale2; + scale = ds->scale1; + } + else + { + lowscale = ds->scale1; + scale = ds->scale2; + } + + if (scale < spr->scale || + (lowscale < spr->scale && + !R_PointOnSegSide (spr->gx, spr->gy, ds->curline))) + { + // masked mid texture? + /*if (ds->maskedtexturecol) + R_RenderMaskedSegRange (ds, r1, r2);*/ + // seg is behind sprite + continue; + } + + // clip this piece of the sprite + silhouette = ds->silhouette; + + if (spr->gz >= ds->bsilheight) + silhouette &= ~SIL_BOTTOM; + + if (spr->gzt <= ds->tsilheight) + silhouette &= ~SIL_TOP; + + if (silhouette == 1) + { + // bottom sil + for (x = r1; x <= r2; x++) + if (spr->clipbot[x] == -2) + spr->clipbot[x] = ds->sprbottomclip[x]; + } + else if (silhouette == 2) + { + // top sil + for (x = r1; x <= r2; x++) + if (spr->cliptop[x] == -2) + spr->cliptop[x] = ds->sprtopclip[x]; + } + else if (silhouette == 3) + { + // both + for (x = r1; x <= r2; x++) + { + if (spr->clipbot[x] == -2) + spr->clipbot[x] = ds->sprbottomclip[x]; + if (spr->cliptop[x] == -2) + spr->cliptop[x] = ds->sprtopclip[x]; + } } } + //SoM: 3/17/2000: Clip sprites in water. + if (spr->heightsec != -1) // only things in specially marked sectors + { + fixed_t mh, h; + INT32 phs = viewplayer->mo->subsector->sector->heightsec; + if ((mh = sectors[spr->heightsec].floorheight) > spr->gz && + (h = centeryfrac - FixedMul(mh -= viewz, spr->scale)) >= 0 && + (h >>= FRACBITS) < viewheight) + { + if (mh <= 0 || (phs != -1 && viewz > sectors[phs].floorheight)) + { // clip bottom + for (x = spr->x1; x <= spr->x2; x++) + if (spr->clipbot[x] == -2 || h < spr->clipbot[x]) + spr->clipbot[x] = (INT16)h; + } + else // clip top + { + for (x = spr->x1; x <= spr->x2; x++) + if (spr->cliptop[x] == -2 || h > spr->cliptop[x]) + spr->cliptop[x] = (INT16)h; + } + } + + if ((mh = sectors[spr->heightsec].ceilingheight) < spr->gzt && + (h = centeryfrac - FixedMul(mh-viewz, spr->scale)) >= 0 && + (h >>= FRACBITS) < viewheight) + { + if (phs != -1 && viewz >= sectors[phs].ceilingheight) + { // clip bottom + for (x = spr->x1; x <= spr->x2; x++) + if (spr->clipbot[x] == -2 || h < spr->clipbot[x]) + spr->clipbot[x] = (INT16)h; + } + else // clip top + { + for (x = spr->x1; x <= spr->x2; x++) + if (spr->cliptop[x] == -2 || h > spr->cliptop[x]) + spr->cliptop[x] = (INT16)h; + } + } + } + if (spr->cut & SC_TOP && spr->cut & SC_BOTTOM) + { + for (x = spr->x1; x <= spr->x2; x++) + { + if (spr->cliptop[x] == -2 || spr->szt > spr->cliptop[x]) + spr->cliptop[x] = spr->szt; + + if (spr->clipbot[x] == -2 || spr->sz < spr->clipbot[x]) + spr->clipbot[x] = spr->sz; + } + } + else if (spr->cut & SC_TOP) + { + for (x = spr->x1; x <= spr->x2; x++) + { + if (spr->cliptop[x] == -2 || spr->szt > spr->cliptop[x]) + spr->cliptop[x] = spr->szt; + } + } + else if (spr->cut & SC_BOTTOM) + { + for (x = spr->x1; x <= spr->x2; x++) + { + if (spr->clipbot[x] == -2 || spr->sz < spr->clipbot[x]) + spr->clipbot[x] = spr->sz; + } + } + + // all clipping has been performed, so store the values - what, did you think we were drawing them NOW? + + // check for unclipped columns + for (x = spr->x1; x <= spr->x2; x++) + { + if (spr->clipbot[x] == -2) + spr->clipbot[x] = (INT16)viewheight; + + if (spr->cliptop[x] == -2) + //Fab : 26-04-98: was -1, now clips against console bottom + spr->cliptop[x] = (INT16)con_clipviewtop; + } } - - // all clipping has been performed, so draw the sprite - - // check for unclipped columns - for (x = spr->x1; x <= spr->x2; x++) - { - if (clipbot[x] == -2) - clipbot[x] = (INT16)viewheight; - - if (cliptop[x] == -2) - //Fab : 26-04-98: was -1, now clips against console bottom - cliptop[x] = (INT16)con_clipviewtop; - } - - mfloorclip = clipbot; - mceilingclip = cliptop; - R_DrawPrecipitationVisSprite(spr); } // diff --git a/src/r_things.h b/src/r_things.h index 226b8e476..5a7036c6a 100644 --- a/src/r_things.h +++ b/src/r_things.h @@ -54,6 +54,7 @@ void R_DelSpriteDefs(UINT16 wadnum); void R_AddSprites(sector_t *sec, INT32 lightlevel); void R_InitSprites(void); void R_ClearSprites(void); +void R_ClipSprites(void); void R_DrawMasked(void); // ----------- @@ -156,6 +157,8 @@ typedef struct vissprite_s spritecut_e cut; + INT16 clipbot[MAXVIDWIDTH], cliptop[MAXVIDWIDTH]; + boolean precip; boolean vflip; // Flip vertically boolean isScaled; diff --git a/src/s_sound.c b/src/s_sound.c index b48b60a05..14a8cc425 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -192,10 +192,9 @@ static INT32 S_getChannel(const void *origin, sfxinfo_t *sfxinfo) S_StopChannel(cnum); break; } - else if (origin && channels[cnum].origin == origin && ((channels[cnum].sfxinfo == sfxinfo) - || (channels[cnum].sfxinfo->name != sfxinfo->name - && channels[cnum].sfxinfo->pitch == 1 && sfxinfo->pitch == 1 - && channels[cnum].sfxinfo->pitch == sfxinfo->pitch))) + else if (origin && channels[cnum].origin == origin + && channels[cnum].sfxinfo->name != sfxinfo->name + && channels[cnum].sfxinfo->pitch == SF_TOTALLYSINGLE && sfxinfo->pitch == SF_TOTALLYSINGLE) { S_StopChannel(cnum); break; diff --git a/src/sdl/i_cdmus.c b/src/sdl/i_cdmus.c index fc35eb9cf..f3f703667 100644 --- a/src/sdl/i_cdmus.c +++ b/src/sdl/i_cdmus.c @@ -35,4 +35,3 @@ boolean I_SetVolumeCD(int volume) (void)volume; return false; } - diff --git a/src/sdl/i_video.c b/src/sdl/i_video.c index 336a57ea0..a59db26cc 100644 --- a/src/sdl/i_video.c +++ b/src/sdl/i_video.c @@ -835,7 +835,7 @@ static void Impl_HandleMouseMotionEvent(SDL_MouseMotionEvent evt) event.data2 = (evt.xrel) * (wwidth / realwidth); event.data3 = -evt.yrel * (wheight / realheight); } - + event.type = ev_mouse; if (SDL_GetMouseFocus() == window && SDL_GetKeyboardFocus() == window) @@ -1853,12 +1853,12 @@ void I_StartupGraphics(void) // Fury: we do window initialization after GL setup to allow // SDL_GL_LoadLibrary to work well on Windows - + // Create window //Impl_CreateWindow(USE_FULLSCREEN); //Impl_SetWindowName("SRB2"); VID_SetMode(VID_GetModeForSize(BASEVIDWIDTH, BASEVIDHEIGHT)); - + vid.buffer = NULL; // For software mode vid.width = BASEVIDWIDTH; // Default size for startup vid.height = BASEVIDHEIGHT; // BitsPerPixel is the SDL interface's diff --git a/src/sdl/macosx/Srb2mac.xcodeproj/project.pbxproj b/src/sdl/macosx/Srb2mac.xcodeproj/project.pbxproj index c34690b3b..a205d30ce 100644 --- a/src/sdl/macosx/Srb2mac.xcodeproj/project.pbxproj +++ b/src/sdl/macosx/Srb2mac.xcodeproj/project.pbxproj @@ -1214,7 +1214,7 @@ C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CURRENT_PROJECT_VERSION = 2.1.11; + CURRENT_PROJECT_VERSION = 2.1.12; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", NORMALSRB2, @@ -1226,7 +1226,7 @@ C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CURRENT_PROJECT_VERSION = 2.1.11; + CURRENT_PROJECT_VERSION = 2.1.12; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PREPROCESSOR_DEFINITIONS = ( diff --git a/src/sdl12/SRB2CE/cehelp.c b/src/sdl12/SRB2CE/cehelp.c index b9fafd040..7c5efdee9 100644 --- a/src/sdl12/SRB2CE/cehelp.c +++ b/src/sdl12/SRB2CE/cehelp.c @@ -444,4 +444,3 @@ VOID WINAPI OutputDebugStringA( OutputDebugStringW(lpOutputStringW); } - diff --git a/src/sdl12/macosx/Srb2mac.xcodeproj/project.pbxproj b/src/sdl12/macosx/Srb2mac.xcodeproj/project.pbxproj index c34690b3b..a205d30ce 100644 --- a/src/sdl12/macosx/Srb2mac.xcodeproj/project.pbxproj +++ b/src/sdl12/macosx/Srb2mac.xcodeproj/project.pbxproj @@ -1214,7 +1214,7 @@ C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CURRENT_PROJECT_VERSION = 2.1.11; + CURRENT_PROJECT_VERSION = 2.1.12; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", NORMALSRB2, @@ -1226,7 +1226,7 @@ C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CURRENT_PROJECT_VERSION = 2.1.11; + CURRENT_PROJECT_VERSION = 2.1.12; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PREPROCESSOR_DEFINITIONS = ( diff --git a/src/sounds.c b/src/sounds.c index c03d6cea2..1ec86e7bc 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -1375,7 +1375,7 @@ sfxinfo_t S_sfx[NUMSFX] = {"s3k61", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, {"s3k62", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, {"s3k63", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, - {"s3k64", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, + {"s3k64", false, 64, 2, -1, NULL, 0, -1, -1, LUMPERROR}, {"s3k65", false, 255, 0, -1, NULL, 0, -1, -1, LUMPERROR}, // Blue Spheres {"s3k66", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, {"s3k67", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, diff --git a/src/st_stuff.c b/src/st_stuff.c index ae8c2f500..0d0cb1aef 100644 --- a/src/st_stuff.c +++ b/src/st_stuff.c @@ -461,6 +461,19 @@ static INT32 STRINGY(INT32 y) return y; } +static INT32 SPLITFLAGS(INT32 f) +{ + // Pass this V_SNAPTO(TOP|BOTTOM) and it'll trim them to account for splitscreen! -Red + if (splitscreen) + { + if (stplyr != &players[displayplayer]) + f &= ~V_SNAPTOTOP; + else + f &= ~V_SNAPTOBOTTOM; + } + return f; +} + static INT32 SCX(INT32 x) { return FixedInt(FixedMul(x<width); const UINT8 *colormap; - a &= V_ALPHAMASK; + // I want my V_SNAPTOx flags. :< -Red + //a &= V_ALPHAMASK; if (colornum == 0) colormap = colormaps; @@ -520,8 +534,8 @@ static void ST_DrawNightsOverlayNum(INT32 x /* right border */, INT32 y, INT32 a // draw the number do { - x -= (w * vid.dupx); - V_DrawTranslucentMappedPatch(x, y, V_NOSCALESTART|a, numpat[num % 10], colormap); + x -= w; + V_DrawTranslucentMappedPatch(x, y, a, numpat[num % 10], colormap); num /= 10; } while (num); @@ -924,7 +938,7 @@ static void ST_drawNightsRecords(void) V_DrawString(BASEVIDWIDTH/2 - 48, STRINGY(148), aflag, "BONUS:"); V_DrawRightAlignedString(BASEVIDWIDTH/2 + 48, STRINGY(140), V_ORANGEMAP|aflag, va("%d", stplyr->finishedrings)); V_DrawRightAlignedString(BASEVIDWIDTH/2 + 48, STRINGY(148), V_ORANGEMAP|aflag, va("%d", stplyr->finishedrings * 50)); - ST_DrawNightsOverlayNum(SCX(BASEVIDWIDTH/2 + 48), SCY(160), aflag, stplyr->lastmarescore, nightsnum, SKINCOLOR_STEELBLUE); + ST_DrawNightsOverlayNum(BASEVIDWIDTH/2 + 48, STRINGY(160), aflag, stplyr->lastmarescore, nightsnum, SKINCOLOR_STEELBLUE); // If new record, say so! if (!(netgame || multiplayer) && G_GetBestNightsScore(gamemap, stplyr->lastmare + 1) <= stplyr->lastmarescore) @@ -936,10 +950,10 @@ static void ST_drawNightsRecords(void) if (P_HasGrades(gamemap, stplyr->lastmare + 1)) { if (aflag) - V_DrawTranslucentPatch(SCX(BASEVIDWIDTH/2 + 60), SCY(160), V_NOSCALESTART|aflag, + V_DrawTranslucentPatch(BASEVIDWIDTH/2 + 60, STRINGY(160), aflag, ngradeletters[P_GetGrade(stplyr->lastmarescore, gamemap, stplyr->lastmare)]); else - V_DrawScaledPatch(SCX(BASEVIDWIDTH/2 + 60), SCY(160), V_NOSCALESTART, + V_DrawScaledPatch(BASEVIDWIDTH/2 + 60, STRINGY(160), 0, ngradeletters[P_GetGrade(stplyr->lastmarescore, gamemap, stplyr->lastmare)]); } } @@ -986,14 +1000,14 @@ static void ST_drawNiGHTSHUD(void) if (splitscreen) { - ST_DrawNightsOverlayNum(SCX(256), SCY(160), linktrans, (stplyr->linkcount-1), nightsnum, colornum); - V_DrawTranslucentMappedPatch(SCX(264), SCY(160), V_NOSCALESTART|linktrans, nightslink, + ST_DrawNightsOverlayNum(256, STRINGY(152), SPLITFLAGS(V_SNAPTOBOTTOM)|V_SNAPTORIGHT|linktrans, (stplyr->linkcount-1), nightsnum, colornum); + V_DrawTranslucentMappedPatch(264, STRINGY(152), SPLITFLAGS(V_SNAPTOBOTTOM)|V_SNAPTORIGHT|linktrans, nightslink, colornum == 0 ? colormaps : R_GetTranslationColormap(TC_DEFAULT, colornum, GTC_CACHE)); } else { - ST_DrawNightsOverlayNum(SCX(160), SCY(160), linktrans, (stplyr->linkcount-1), nightsnum, colornum); - V_DrawTranslucentMappedPatch(SCX(168), SCY(160), V_NOSCALESTART|linktrans, nightslink, + ST_DrawNightsOverlayNum(160, 160, V_SNAPTOBOTTOM|linktrans, (stplyr->linkcount-1), nightsnum, colornum); + V_DrawTranslucentMappedPatch(168, 160, V_SNAPTOBOTTOM|linktrans, nightslink, colornum == 0 ? colormaps : R_GetTranslationColormap(TC_DEFAULT, colornum, GTC_CACHE)); } } @@ -1004,28 +1018,28 @@ static void ST_drawNiGHTSHUD(void) { INT32 offs = 10 - (stplyr->linktimer - (2*TICRATE - 9)); INT32 ghosttrans = offs << V_ALPHASHIFT; - ST_DrawNightsOverlayNum(SCX(160), SCY(160)+(offs*2), ghosttrans, (stplyr->linkcount-2), + ST_DrawNightsOverlayNum(160, STRINGY(160+offs), SPLITFLAGS(V_SNAPTOBOTTOM)|ghosttrans, (stplyr->linkcount-2), nightsnum, colornum); } #endif if (splitscreen) { - ST_DrawNightsOverlayNum(SCX(256), SCY(160), 0, (stplyr->linkcount-1), nightsnum, colornum); - V_DrawMappedPatch(SCX(264), SCY(160), V_NOSCALESTART, nightslink, + ST_DrawNightsOverlayNum(256, STRINGY(152), SPLITFLAGS(V_SNAPTOBOTTOM)|V_SNAPTORIGHT, (stplyr->linkcount-1), nightsnum, colornum); + V_DrawMappedPatch(264, STRINGY(152), SPLITFLAGS(V_SNAPTOBOTTOM)|V_SNAPTORIGHT, nightslink, colornum == 0 ? colormaps : R_GetTranslationColormap(TC_DEFAULT, colornum, GTC_CACHE)); } else { - ST_DrawNightsOverlayNum(SCX(160), SCY(160), 0, (stplyr->linkcount-1), nightsnum, colornum); - V_DrawMappedPatch(SCX(168), SCY(160), V_NOSCALESTART, nightslink, + ST_DrawNightsOverlayNum(160, 160, V_SNAPTOBOTTOM, (stplyr->linkcount-1), nightsnum, colornum); + V_DrawMappedPatch(168, 160, V_SNAPTOBOTTOM, nightslink, colornum == 0 ? colormaps : R_GetTranslationColormap(TC_DEFAULT, colornum, GTC_CACHE)); } } // Show remaining link time left in debug if (cv_debug & DBG_NIGHTSBASIC) - V_DrawCenteredString(SCX(BASEVIDWIDTH/2), SCY(180), V_NOSCALESTART, va("End in %d.%02d", stplyr->linktimer/TICRATE, G_TicsToCentiseconds(stplyr->linktimer))); + V_DrawCenteredString(BASEVIDWIDTH/2, 180, V_SNAPTOBOTTOM, va("End in %d.%02d", stplyr->linktimer/TICRATE, G_TicsToCentiseconds(stplyr->linktimer))); } // Drill meter @@ -1039,7 +1053,7 @@ static void ST_drawNiGHTSHUD(void) INT32 dfill; UINT8 fillpatch; - if (splitscreen) + if (splitscreen || nosshack) { locx = 110; locy = 188; @@ -1057,25 +1071,25 @@ static void ST_drawNiGHTSHUD(void) fillpatch = 0; if (splitscreen) - { // Dirty hack because V_SNAPTOBOTTOM doesn't have a way to account for splitscreen, but better than overlapping bars. - V_DrawScaledPatch(SCX(locx), SCY(locy), V_NOSCALESTART|V_HUDTRANS, drillbar); + { // 11-5-14 Replaced the old hack with a slightly better hack. -Red + V_DrawScaledPatch(locx, STRINGY(locy)-3, SPLITFLAGS(V_SNAPTOBOTTOM)|V_HUDTRANS, drillbar); for (dfill = 0; dfill < stplyr->drillmeter/20 && dfill < 96; ++dfill) - V_DrawScaledPatch(SCX(locx + 2 + dfill), SCY(locy + 3), V_NOSCALESTART|V_HUDTRANS, drillfill[fillpatch]); + V_DrawScaledPatch(locx + 2 + dfill, STRINGY(locy + 3), SPLITFLAGS(V_SNAPTOBOTTOM)|V_HUDTRANS, drillfill[fillpatch]); } else if (nosshack) { // Even dirtier hack-of-a-hack to draw seperate drill meters in splitscreen special stages but nothing else. splitscreen = true; - V_DrawScaledPatch(SCX(locx), SCY(locy), V_NOSCALESTART|V_HUDTRANS, drillbar); + V_DrawScaledPatch(locx, STRINGY(locy)-3, V_HUDTRANS, drillbar); for (dfill = 0; dfill < stplyr->drillmeter/20 && dfill < 96; ++dfill) - V_DrawScaledPatch(SCX(locx + 2 + dfill), SCY(locy + 3), V_NOSCALESTART|V_HUDTRANS, drillfill[fillpatch]); + V_DrawScaledPatch(locx + 2 + dfill, STRINGY(locy + 3), V_HUDTRANS, drillfill[fillpatch]); stplyr = &players[secondarydisplayplayer]; if (stplyr->pflags & PF_DRILLING) fillpatch = (stplyr->drillmeter & 1) + 1; else fillpatch = 0; - V_DrawScaledPatch(locx, locy, V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_HUDTRANS, drillbar); + V_DrawScaledPatch(locx, STRINGY(locy-3), V_SNAPTOBOTTOM|V_HUDTRANS, drillbar); for (dfill = 0; dfill < stplyr->drillmeter/20 && dfill < 96; ++dfill) - V_DrawScaledPatch(locx + 2 + dfill, locy + 3, V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_HUDTRANS, drillfill[fillpatch]); + V_DrawScaledPatch(locx + 2 + dfill, STRINGY(locy + 3), V_SNAPTOBOTTOM|V_HUDTRANS, drillfill[fillpatch]); stplyr = &players[displayplayer]; splitscreen = false; } @@ -1206,7 +1220,7 @@ static void ST_drawNiGHTSHUD(void) #endif ) { - ST_DrawNightsOverlayNum(SCX(304), SCY(16), 0, stplyr->marescore, nightsnum, SKINCOLOR_STEELBLUE); + ST_DrawNightsOverlayNum(304, STRINGY(16), SPLITFLAGS(V_SNAPTOTOP)|V_SNAPTORIGHT, stplyr->marescore, nightsnum, SKINCOLOR_STEELBLUE); } if (!stplyr->exiting @@ -1219,19 +1233,22 @@ static void ST_drawNiGHTSHUD(void) if (modeattacking == ATTACKING_NIGHTS) { INT32 maretime = max(stplyr->realtime - stplyr->marebegunat, 0); + fixed_t cornerx = vid.width, cornery = vid.height-SCZ(20); - ST_DrawOverlayPatch(SCX(298), SCY(180), W_CachePatchName("NGRTIMER", PU_HUDGFX)); - ST_DrawPaddedOverlayNum(SCX(298), SCY(180), G_TicsToCentiseconds(maretime), 2); - ST_DrawOverlayPatch(SCX(274), SCY(180), sboperiod); +#define ASSISHHUDFIX(n) (n*vid.dupx) + ST_DrawOverlayPatch(cornerx-ASSISHHUDFIX(22), cornery, W_CachePatchName("NGRTIMER", PU_HUDGFX)); + ST_DrawPaddedOverlayNum(cornerx-ASSISHHUDFIX(22), cornery, G_TicsToCentiseconds(maretime), 2); + ST_DrawOverlayPatch(cornerx-ASSISHHUDFIX(46), cornery, sboperiod); if (maretime < 60*TICRATE) - ST_DrawOverlayNum(SCX(274), SCY(180), G_TicsToSeconds(maretime)); + ST_DrawOverlayNum(cornerx-ASSISHHUDFIX(46), cornery, G_TicsToSeconds(maretime)); else { - ST_DrawPaddedOverlayNum(SCX(274), SCY(180), G_TicsToSeconds(maretime), 2); - ST_DrawOverlayPatch(SCX(250), SCY(180), sbocolon); - ST_DrawOverlayNum(SCX(250), SCY(180), G_TicsToMinutes(maretime, true)); + ST_DrawPaddedOverlayNum(cornerx-ASSISHHUDFIX(46), cornery, G_TicsToSeconds(maretime), 2); + ST_DrawOverlayPatch(cornerx-ASSISHHUDFIX(70), cornery, sbocolon); + ST_DrawOverlayNum(cornerx-ASSISHHUDFIX(70), cornery, G_TicsToMinutes(maretime, true)); } } +#undef ASSISHHUDFIX } // Ideya time remaining @@ -1267,22 +1284,22 @@ static void ST_drawNiGHTSHUD(void) } if (realnightstime < 10) - numbersize = SCX(16)/2; + numbersize = 16/2; else if (realnightstime < 100) - numbersize = SCX(32)/2; + numbersize = 32/2; else - numbersize = SCX(48)/2; + numbersize = 48/2; if (realnightstime < 10) - ST_DrawNightsOverlayNum(SCX(160) + numbersize, SCY(12), 0, realnightstime, + ST_DrawNightsOverlayNum(160 + numbersize, STRINGY(12), SPLITFLAGS(V_SNAPTOTOP), realnightstime, nightsnum, SKINCOLOR_RED); else - ST_DrawNightsOverlayNum(SCX(160) + numbersize, SCY(12), 0, realnightstime, + ST_DrawNightsOverlayNum(160 + numbersize, STRINGY(12), SPLITFLAGS(V_SNAPTOTOP), realnightstime, nightsnum, SKINCOLOR_SUPER4); // Show exact time in debug if (cv_debug & DBG_NIGHTSBASIC) - V_DrawString(SCX(160) + numbersize + 8, SCY(24), V_NOSCALESTART|((realnightstime < 10) ? V_REDMAP : V_YELLOWMAP), va("%02d", G_TicsToCentiseconds(stplyr->nightstime))); + V_DrawString(160 + numbersize + 8, 24, V_SNAPTOTOP|((realnightstime < 10) ? V_REDMAP : V_YELLOWMAP), va("%02d", G_TicsToCentiseconds(stplyr->nightstime))); } // Show pickup durations diff --git a/src/v_video.c b/src/v_video.c index 926107ff2..64bf825bd 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -484,7 +484,7 @@ void V_DrawFixedPatch(fixed_t x, fixed_t y, fixed_t pscale, INT32 scrn, patch_t INT32 topdelta, prevdelta = -1; if (x < 0) // don't draw off the left of the screen (WRAP PREVENTION) continue; - if (x > vid.width) // don't draw off the right of the screen (WRAP PREVENTION) + if (x >= vid.width) // don't draw off the right of the screen (WRAP PREVENTION) break; column = (const column_t *)((const UINT8 *)(patch) + LONG(patch->columnofs[col>>FRACBITS])); @@ -596,7 +596,7 @@ void V_DrawCroppedPatch(fixed_t x, fixed_t y, fixed_t pscale, INT32 scrn, patch_ INT32 topdelta, prevdelta = -1; if (x < 0) // don't draw off the left of the screen (WRAP PREVENTION) continue; - if (x > vid.width) // don't draw off the right of the screen (WRAP PREVENTION) + if (x >= vid.width) // don't draw off the right of the screen (WRAP PREVENTION) break; column = (const column_t *)((const UINT8 *)(patch) + LONG(patch->columnofs[col>>FRACBITS])); @@ -1609,7 +1609,7 @@ INT32 V_CreditStringWidth(const char *string) { c = toupper(string[i]) - CRED_FONTSTART; if (c < 0 || c >= CRED_FONTSIZE) - w += 8; + w += 16; else w += SHORT(cred_font[c]->width); } diff --git a/src/w_wad.c b/src/w_wad.c index b09236a20..adcbb4811 100644 --- a/src/w_wad.c +++ b/src/w_wad.c @@ -418,6 +418,7 @@ UINT16 W_LoadWadFile(const char *filename) free(fileinfov); } +#ifndef NOMD5 // // w-waiiiit! // Let's not add a wad file if the MD5 matches @@ -433,6 +434,7 @@ UINT16 W_LoadWadFile(const char *filename) return INT16_MAX; } } +#endif // // link wad file to search files diff --git a/src/win32/Makefile.cfg b/src/win32/Makefile.cfg index b989923fe..c369651bf 100644 --- a/src/win32/Makefile.cfg +++ b/src/win32/Makefile.cfg @@ -53,9 +53,9 @@ endif # name of the exefile ifdef SDL - EXENAME?=srb2sdl2.exe -else EXENAME?=srb2win.exe +else + EXENAME?=srb2dd.exe endif ifdef SDL diff --git a/src/y_inter.c b/src/y_inter.c index 35ecf62aa..498afa7cf 100644 --- a/src/y_inter.c +++ b/src/y_inter.c @@ -770,11 +770,12 @@ void Y_Ticker(void) } // -// Y_UpdateReplays +// Y_UpdateRecordReplays // -// Update replay files/data, etc +// Update replay files/data, etc. for Record Attack +// See G_SetNightsRecords for NiGHTS Attack. // -static void Y_UpdateReplays(void) +static void Y_UpdateRecordReplays(void) { const size_t glen = strlen(srb2home)+1+strlen("replay")+1+strlen(timeattackfolder)+1+strlen("MAPXX")+1; char *gpath; @@ -962,7 +963,7 @@ void Y_StartIntermission(void) mapvisited[gamemap-1] |= MV_PERFECT; if (modeattacking == ATTACKING_RECORD) - Y_UpdateReplays(); + Y_UpdateRecordReplays(); } for (i = 0; i < 4; ++i)