mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-15 08:52:00 +00:00
* Auto-grayout for plain old sectors toggled with Ctrl-A. When it is in effect, _all_ sectors which fall outside the [min ceiling z, max floor z] bounds of all active extended sectors are deactivated.
* make it possible to duplicate from extended sectors; all extensions are cleared from them * lazy hightile loading in tile selector can now be disabled in mapster32.cfg * fixes USE_OPENGL=0 build git-svn-id: https://svn.eduke32.com/eduke32@1890 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
219dc6dd26
commit
0c190bfa55
7 changed files with 118 additions and 62 deletions
|
@ -97,6 +97,7 @@ extern const char *g_namesFileName;
|
|||
|
||||
extern const char *defsfilename; // set in bstub.c
|
||||
|
||||
extern int32_t g_lazy_tileselector;
|
||||
extern int32_t m32_osd_tryscript;
|
||||
extern int32_t showheightindicators;
|
||||
extern int32_t showambiencesounds;
|
||||
|
@ -105,6 +106,7 @@ extern uint8_t graysectbitmap[MAXSECTORS>>3];
|
|||
extern uint8_t graywallbitmap[MAXWALLS>>3];
|
||||
|
||||
#ifdef YAX_ENABLE
|
||||
extern int32_t autogray;
|
||||
int32_t yax_is121(int16_t bunchnum, int16_t getfloor);
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1595,17 +1595,7 @@ static void duplicate_selected_sectors(void)
|
|||
int32_t i, j, startwall, endwall, newnumsectors, newwalls = 0;
|
||||
int32_t minx=INT32_MAX, maxx=INT32_MIN, miny=INT32_MAX, maxy=INT32_MIN, dx, dy;
|
||||
#ifdef YAX_ENABLE
|
||||
int16_t cb, fb;
|
||||
|
||||
for (i=0; i<highlightsectorcnt; i++)
|
||||
{
|
||||
yax_getbunches(highlightsector[i], &cb, &fb);
|
||||
if (cb>=0 || fb>=0)
|
||||
{
|
||||
printmessage16("Cannot duplicate extended sectors!");
|
||||
return;
|
||||
}
|
||||
}
|
||||
int16_t cb, fb, hadextended=0;
|
||||
#endif
|
||||
|
||||
for (i=0; i<highlightsectorcnt; i++)
|
||||
|
@ -1630,6 +1620,19 @@ static void duplicate_selected_sectors(void)
|
|||
for (i=0; i<highlightsectorcnt; i++)
|
||||
{
|
||||
copysector(highlightsector[i], newnumsectors, newnumwalls, 1, oldtonewsect);
|
||||
#ifdef YAX_ENABLE
|
||||
yax_getbunches(highlightsector[i], &cb, &fb);
|
||||
if (cb>=0 || fb>=0)
|
||||
{
|
||||
hadextended = 1;
|
||||
yax_setbunches(newnumsectors, -1, -1);
|
||||
for (WALLS_OF_SECTOR(newnumsectors, j))
|
||||
{
|
||||
yax_setnextwall(j, 0, -1);
|
||||
yax_setnextwall(j, 1, -1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
newnumsectors++;
|
||||
newnumwalls += sector[highlightsector[i]].wallnum;
|
||||
}
|
||||
|
@ -1695,7 +1698,12 @@ static void duplicate_selected_sectors(void)
|
|||
newnumsectors = -1;
|
||||
|
||||
updatenumsprites();
|
||||
printmessage16("Sectors duplicated and stamped.");
|
||||
#ifdef YAX_ENABLE
|
||||
if (hadextended)
|
||||
printmessage16("Sectors duplicated and stamped, clearing extensions.");
|
||||
else
|
||||
#endif
|
||||
printmessage16("Sectors duplicated and stamped.");
|
||||
asksave = 1;
|
||||
}
|
||||
else
|
||||
|
|
|
@ -169,6 +169,7 @@ int32_t loadsetup(const char *fn)
|
|||
#ifdef USE_OPENGL
|
||||
if (readconfig(fp, "usemodels", val, VL) > 0) usemodels = !!atoi_safe(val);
|
||||
if (readconfig(fp, "usehightile", val, VL) > 0) usehightile = !!atoi_safe(val);
|
||||
if (readconfig(fp, "lazytileselector", val, VL) > 0) g_lazy_tileselector = !!atoi_safe(val);
|
||||
|
||||
glusetexcache = -1;
|
||||
if (readconfig(fp, "glusetexcache", val, VL) > 0)
|
||||
|
@ -364,6 +365,7 @@ int32_t writesetup(const char *fn)
|
|||
"; OpenGL mode options\n"
|
||||
"usemodels = %d\n"
|
||||
"usehightile = %d\n"
|
||||
"lazytileselector = %d\n"
|
||||
"; glusetexcache: 0:no, 1:yes, 2:compressed\n"
|
||||
"glusetexcache = %d\n"
|
||||
"gltexfiltermode = %d\n"
|
||||
|
@ -523,7 +525,7 @@ int32_t writesetup(const char *fn)
|
|||
#endif
|
||||
editorgridextent, clamp(default_grid, 0, 9),
|
||||
#ifdef USE_OPENGL
|
||||
usemodels, usehightile,
|
||||
usemodels, usehightile, g_lazy_tileselector,
|
||||
glusetexcache, gltexfiltermode, glanisotropy,r_downsize,glusetexcompr,
|
||||
shadescale,
|
||||
#endif
|
||||
|
|
|
@ -200,6 +200,7 @@ extern int32_t m32_numdebuglines;
|
|||
|
||||
uint8_t graysectbitmap[MAXSECTORS>>3];
|
||||
uint8_t graywallbitmap[MAXWALLS>>3];
|
||||
int32_t autogray = 0;
|
||||
|
||||
#ifdef ENGINE_SCREENSHOT_DEBUG
|
||||
int32_t engine_screenshot = 0;
|
||||
|
@ -208,9 +209,12 @@ int32_t engine_screenshot = 0;
|
|||
void yax_updategrays(int32_t posze)
|
||||
{
|
||||
int32_t i, j, k=1;
|
||||
#ifndef YAX_ENABLE
|
||||
#ifdef YAX_ENABLE
|
||||
int32_t mingoodz=INT32_MAX, maxgoodz=INT32_MIN;
|
||||
#else
|
||||
UNREFERENCED_PARAMETER(posze);
|
||||
#endif
|
||||
|
||||
Bmemset(graysectbitmap, 0, sizeof(graysectbitmap));
|
||||
Bmemset(graywallbitmap, 0, sizeof(graywallbitmap));
|
||||
|
||||
|
@ -220,18 +224,36 @@ void yax_updategrays(int32_t posze)
|
|||
int16_t cb, fb;
|
||||
|
||||
yax_getbunches(i, &cb, &fb);
|
||||
// update grayouts due to yax
|
||||
// update grayouts due to yax --v-- has to be half-open --v--
|
||||
// because only one level should v be ever active v
|
||||
k = ((cb<0 || sector[i].ceilingz < posze) && (fb<0 || posze <= sector[i].floorz));
|
||||
if (autogray && (cb>=0 || fb>=0) && (sector[i].ceilingz <= posze && posze <= sector[i].floorz))
|
||||
{
|
||||
mingoodz = min(mingoodz, sector[i].ceilingz);
|
||||
maxgoodz = max(maxgoodz, sector[i].floorz);
|
||||
}
|
||||
#endif
|
||||
// update grayouts due to editorzrange
|
||||
k &= (sector[i].ceilingz >= editorzrange[0] && sector[i].floorz <= editorzrange[1]);
|
||||
|
||||
if (!k) // outside bounds, gray out!
|
||||
{
|
||||
graysectbitmap[i>>3] |= (1<<(i&7));
|
||||
}
|
||||
|
||||
#ifdef YAX_ENABLE
|
||||
if (autogray && mingoodz<=maxgoodz)
|
||||
{
|
||||
for (i=0; i<numsectors; i++)
|
||||
if (!(mingoodz <= sector[i].ceilingz && sector[i].floorz <= maxgoodz))
|
||||
graysectbitmap[i>>3] |= (1<<(i&7));
|
||||
}
|
||||
#endif
|
||||
|
||||
for (i=0; i<numsectors; i++)
|
||||
{
|
||||
if (graysectbitmap[i>>3]&(1<<(i&7)))
|
||||
for (j=sector[i].wallptr; j<sector[i].wallptr+sector[i].wallnum; j++)
|
||||
graywallbitmap[j>>3] |= (1<<(j&7));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -611,17 +633,19 @@ static int yax_cmpbunches(const int16_t *b1, const int16_t *b2)
|
|||
static void yax_tweakpicnums(int32_t bunchnum, int32_t cf, int32_t restore)
|
||||
{
|
||||
static int16_t opicnum[2][MAXSECTORS];
|
||||
int32_t i;
|
||||
int32_t i, stat;
|
||||
|
||||
for (SECTORS_OF_BUNCH(bunchnum, cf, i))
|
||||
if ((SECTORFLD(i,stat, cf)&(128+256))==0)
|
||||
{
|
||||
stat = (SECTORFLD(i,stat, cf)&(128+256+4096));
|
||||
if ((stat&4096) || stat==0)
|
||||
{
|
||||
if (!restore)
|
||||
{
|
||||
opicnum[cf][i] = SECTORFLD(i,picnum, cf);
|
||||
if (editstatus && showinvisibility)
|
||||
SECTORFLD(i,picnum, cf) = MAXTILES-1-((SECTORFLD(i,stat, cf)&4096)>>12);
|
||||
else
|
||||
SECTORFLD(i,picnum, cf) = MAXTILES-1-((stat&4096)>>12);
|
||||
else if ((stat&(128+256))==0)
|
||||
SECTORFLD(i,picnum, cf) = 13; //FOF;
|
||||
}
|
||||
else
|
||||
|
@ -629,6 +653,7 @@ static void yax_tweakpicnums(int32_t bunchnum, int32_t cf, int32_t restore)
|
|||
SECTORFLD(i,picnum, cf) = opicnum[cf][i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void yax_copytsprite(int32_t curbunchnum, int32_t resetsortcnt)
|
||||
|
@ -682,7 +707,7 @@ static void yax_copytsprite(int32_t curbunchnum, int32_t resetsortcnt)
|
|||
|
||||
void yax_preparedrawrooms(void)
|
||||
{
|
||||
if (rendmode!=0 || numyaxbunches==0)
|
||||
if (getrendermode()!=0 || numyaxbunches==0)
|
||||
return;
|
||||
|
||||
g_nodraw = 1;
|
||||
|
@ -720,7 +745,7 @@ void yax_drawrooms(void (*ExtAnalyzeSprites)(void), int32_t horiz, int16_t sectn
|
|||
int32_t t;
|
||||
#endif
|
||||
|
||||
if (rendmode!=0 || numyaxbunches==0)
|
||||
if (getrendermode()!=0 || numyaxbunches==0)
|
||||
{
|
||||
#ifdef ENGINE_SCREENSHOT_DEBUG
|
||||
engine_screenshot = 0;
|
||||
|
@ -762,7 +787,7 @@ void yax_drawrooms(void (*ExtAnalyzeSprites)(void), int32_t horiz, int16_t sectn
|
|||
j = yax_getbunch(i, cf);
|
||||
if (j >= 0 && !(havebunch[j>>3]&(1<<(j&7))))
|
||||
{
|
||||
if ((haveymost[j>>3]&(1<<(j&7)))==0)
|
||||
if (getrendermode()==0 && (haveymost[j>>3]&(1<<(j&7)))==0)
|
||||
{
|
||||
yaxdebug("%s, l %d: skipped bunch %d (no *most)", cf?"v":"^", lev, j);
|
||||
continue;
|
||||
|
@ -847,10 +872,13 @@ void yax_drawrooms(void (*ExtAnalyzeSprites)(void), int32_t horiz, int16_t sectn
|
|||
scansector_collectsprites = 0;
|
||||
|
||||
#ifdef ENGINE_CLEAR_SCREEN
|
||||
begindrawing();
|
||||
for (i=0; i<xdim*ydim; i++)
|
||||
*((char *)frameplace + i) = i;
|
||||
enddrawing();
|
||||
if (rendmode==0)
|
||||
{
|
||||
begindrawing();
|
||||
for (i=0; i<xdim*ydim; i++)
|
||||
*((char *)frameplace + i) = i;
|
||||
enddrawing();
|
||||
}
|
||||
#endif
|
||||
|
||||
for (cf=0; cf<2; cf++)
|
||||
|
@ -916,28 +944,31 @@ void yax_drawrooms(void (*ExtAnalyzeSprites)(void), int32_t horiz, int16_t sectn
|
|||
#endif
|
||||
|
||||
#ifdef YAX_DEBUG_YMOSTS
|
||||
begindrawing();
|
||||
for (i=0; i<numyaxbunches; i++)
|
||||
if (rendmode==0)
|
||||
{
|
||||
int32_t x, x1;
|
||||
char purple = getclosestcol(63, 0, 63);
|
||||
char yellow = getclosestcol(63, 63, 0);
|
||||
|
||||
if ((haveymost[i>>3]&(1<<i&7))==0)
|
||||
continue;
|
||||
|
||||
x1 = i*xdimen;
|
||||
|
||||
for (x=x1; x<x1+xdimen; x++)
|
||||
begindrawing();
|
||||
for (i=0; i<numyaxbunches; i++)
|
||||
{
|
||||
if (yumost[x] >= 0 && yumost[x] < ydim)
|
||||
*((char *)frameplace + yumost[x]*bytesperline + x-x1) = purple;
|
||||
int32_t x, x1;
|
||||
char purple = getclosestcol(63, 0, 63);
|
||||
char yellow = getclosestcol(63, 63, 0);
|
||||
|
||||
if (ydmost[x]-1 >= 0 && ydmost[x]-1 < ydim)
|
||||
*((char *)frameplace + (ydmost[x]-1)*bytesperline + x-x1) = yellow;
|
||||
if ((haveymost[i>>3]&(1<<i&7))==0)
|
||||
continue;
|
||||
|
||||
x1 = i*xdimen;
|
||||
|
||||
for (x=x1; x<x1+xdimen; x++)
|
||||
{
|
||||
if (yumost[x] >= 0 && yumost[x] < ydim)
|
||||
*((char *)frameplace + yumost[x]*bytesperline + x-x1) = purple;
|
||||
|
||||
if (ydmost[x]-1 >= 0 && ydmost[x]-1 < ydim)
|
||||
*((char *)frameplace + (ydmost[x]-1)*bytesperline + x-x1) = yellow;
|
||||
}
|
||||
}
|
||||
enddrawing();
|
||||
}
|
||||
enddrawing();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -7588,7 +7619,7 @@ void drawrooms(int32_t daposx, int32_t daposy, int32_t daposz,
|
|||
|
||||
i = mulscale16(xdimenscale,viewingrangerecip);
|
||||
globalpisibility = mulscale16(parallaxvisibility,i);
|
||||
globalvisibility = rendmode==0 ? mulscale16(visibility,i) : scale(visibility<<2,4,3);
|
||||
globalvisibility = getrendermode()==0 ? mulscale16(visibility,i) : scale(visibility<<2,4,3);
|
||||
globalhisibility = mulscale16(globalvisibility,xyaspect);
|
||||
globalcisibility = mulscale8(globalhisibility,320);
|
||||
|
||||
|
@ -14437,12 +14468,12 @@ void draw2dscreen(const vec3_t *pos, int16_t cursectnum, int16_t ange, int32_t z
|
|||
{
|
||||
for (i=numwalls-1; i>=0; i--)
|
||||
#ifdef YAX_ENABLE
|
||||
if (graywallbitmap[(i)>>3]&(1<<((i)&7)))
|
||||
if (graywallbitmap[i>>3]&(1<<(i&7)))
|
||||
drawscreen_drawwall(i,posxe,posye,posze,zoome);
|
||||
for (i=numwalls-1; i>=0; i--)
|
||||
if ((graywallbitmap[(i)>>3]&(1<<((i)&7)))==0)
|
||||
if ((graywallbitmap[i>>3]&(1<<(i&7)))==0)
|
||||
#endif
|
||||
drawscreen_drawwall(i,posxe,posye,posze,zoome);
|
||||
drawscreen_drawwall(i,posxe,posye,posze,zoome);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -14918,11 +14949,13 @@ int32_t screencapture_png(const char *filename, char inverseit, const char *vers
|
|||
buf = (png_bytep)png_malloc(png_ptr, xdim*ydim);
|
||||
Bmemcpy(buf, (char *)frameplace, xdim*ydim);
|
||||
}
|
||||
#ifdef USE_OPENGL
|
||||
else
|
||||
{
|
||||
buf = (png_bytep)png_malloc(png_ptr, xdim*ydim*3);
|
||||
bglReadPixels(0,0,xdim,ydim,GL_RGB,GL_UNSIGNED_BYTE,buf);
|
||||
}
|
||||
#endif
|
||||
enddrawing(); //}}}
|
||||
|
||||
rowptrs = (png_bytepp)png_malloc(png_ptr, ydim*sizeof(png_bytep));
|
||||
|
|
|
@ -2186,7 +2186,7 @@ void drawpoly(double *dpx, double *dpy, int32_t n, int32_t method)
|
|||
|
||||
{
|
||||
float pc[4];
|
||||
int32_t shadebound = (shadescale_unbounded || globalshade>31) ? numpalookups : 31;
|
||||
int32_t shadebound = (shadescale_unbounded || globalshade>=numpalookups) ? numpalookups : numpalookups-1;
|
||||
f = ((float)(numpalookups-min(max((globalshade * shadescale),0),shadebound)))/((float)numpalookups);
|
||||
pc[0] = pc[1] = pc[2] = f;
|
||||
switch (method&3)
|
||||
|
@ -4177,9 +4177,11 @@ void polymost_drawrooms()
|
|||
if (rendmode >= 3)
|
||||
{
|
||||
resizeglcheck();
|
||||
|
||||
if (editstatus)
|
||||
bglClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
|
||||
#ifdef YAX_ENABLE
|
||||
if (numyaxbunches==0)
|
||||
#endif
|
||||
if (editstatus)
|
||||
bglClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
bglDisable(GL_BLEND);
|
||||
bglEnable(GL_TEXTURE_2D);
|
||||
|
@ -5795,7 +5797,7 @@ void polymost_fillpolygon(int32_t npoints)
|
|||
pthtyp *pth;
|
||||
float f,a=0.0;
|
||||
int32_t i;
|
||||
int32_t shadebound = (shadescale_unbounded || globalshade>31) ? numpalookups : 31;
|
||||
int32_t shadebound = (shadescale_unbounded || globalshade>=numpalookups) ? numpalookups : numpalookups-1;
|
||||
|
||||
globalx1 = mulscale16(globalx1,xyaspect);
|
||||
globaly2 = mulscale16(globaly2,xyaspect);
|
||||
|
|
|
@ -939,11 +939,12 @@ int32_t checkvideomode(int32_t *x, int32_t *y, int32_t c, int32_t fs, int32_t fo
|
|||
int32_t setvideomode(int32_t x, int32_t y, int32_t c, int32_t fs)
|
||||
{
|
||||
int32_t regrab = 0;
|
||||
#ifdef USE_OPENGL
|
||||
static int32_t warnonce = 0;
|
||||
#if (SDL_MAJOR_VERSION == 1 && SDL_MINOR_VERSION < 3)
|
||||
static int32_t ovsync = 1;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
if ((fs == fullscreen) && (x == xres) && (y == yres) && (c == bpp) &&
|
||||
!videomodereset)
|
||||
{
|
||||
|
|
|
@ -97,6 +97,7 @@ static struct strllist
|
|||
const char *scripthist[SCRIPTHISTSIZ];
|
||||
int32_t scripthistend = 0;
|
||||
|
||||
int32_t g_lazy_tileselector = 1;
|
||||
int32_t showambiencesounds=2;
|
||||
|
||||
int32_t autocorruptcheck = 0;
|
||||
|
@ -3945,8 +3946,9 @@ static int32_t OnSelectTile(int32_t iTile)
|
|||
bflushchars();
|
||||
|
||||
setpolymost2dview();
|
||||
#ifdef USE_OPENGL
|
||||
bglEnable(GL_TEXTURE_2D);
|
||||
|
||||
#endif
|
||||
clearview(0);
|
||||
|
||||
//
|
||||
|
@ -4072,7 +4074,6 @@ static void tilescreen_drawbox(int32_t iTopLeft, int32_t iSelected, int32_t nXTi
|
|||
char markedcol = editorcolors[14];
|
||||
|
||||
setpolymost2dview();
|
||||
bglEnable(GL_TEXTURE_2D);
|
||||
|
||||
y1=max(y1, 0);
|
||||
y2=min(y2, ydim-1);
|
||||
|
@ -4157,8 +4158,9 @@ static int32_t DrawTiles(int32_t iTopLeft, int32_t iSelected, int32_t nXTiles, i
|
|||
static uint8_t loadedhitile[(MAXTILES+7)>>3];
|
||||
|
||||
setpolymost2dview();
|
||||
#ifdef USE_OPENGL
|
||||
bglEnable(GL_TEXTURE_2D);
|
||||
|
||||
#endif
|
||||
clearview(0);
|
||||
|
||||
begindrawing();
|
||||
|
@ -4172,8 +4174,7 @@ restart:
|
|||
|
||||
if (iTile < 0 || iTile >= localartlookupnum)
|
||||
continue;
|
||||
|
||||
usehitile = runi;
|
||||
usehitile = (runi || !g_lazy_tileselector);
|
||||
|
||||
idTile = localartlookup[ iTile ];
|
||||
if (loadedhitile[idTile>>3]&(1<<(idTile&7)))
|
||||
|
@ -4205,7 +4206,7 @@ restart:
|
|||
|
||||
tilescreen_drawbox(iTopLeft, iSelected, nXTiles, TileDim, offset, iTile, idTile);
|
||||
|
||||
if (runi==1)
|
||||
if (runi==1 && g_lazy_tileselector)
|
||||
{
|
||||
int32_t k;
|
||||
|
||||
|
@ -4238,7 +4239,7 @@ restart:
|
|||
|
||||
tilescreen_drawrest(iSelected, showmsg);
|
||||
|
||||
if (rendmode>=3 && qsetmode==200)
|
||||
if (getrendermode()>=3 && qsetmode==200 && g_lazy_tileselector)
|
||||
{
|
||||
if (runi==0)
|
||||
{
|
||||
|
@ -7585,6 +7586,13 @@ static void Keys2d(void)
|
|||
updatesectorz(pos.x, pos.y, pos.z, &cursectnum);
|
||||
}
|
||||
}
|
||||
|
||||
if (eitherCTRL && PRESSED_KEYSC(A))
|
||||
{
|
||||
autogray = !autogray;
|
||||
printmessage16("Automatic grayout of plain sectors %s", ONOFF(autogray));
|
||||
yax_updategrays(pos.z);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Ctrl-R set editor z range to hightlightsectors' c/f bounds
|
||||
|
|
Loading…
Reference in a new issue