mirror of
https://github.com/ZDoom/raze-gles.git
synced 2025-01-12 03:00:38 +00:00
New sector selection mode in 2d mode: if RCtrl is pressed when releasing RAlt, then instead of the sector having to be contained in the rectangle, the mouse pointer must be inside a sector to be selected. This way it's easy to select sectors with arbitrary shapes. Set ops work independently of it, too. Also some annoyance fixes with sprite movement.
git-svn-id: https://svn.eduke32.com/eduke32@1816 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
0c9618bc44
commit
0fbd035e54
4 changed files with 360 additions and 164 deletions
|
@ -61,6 +61,17 @@ extern "C" {
|
||||||
#define PR_LIGHT_PRIO_LOW 4
|
#define PR_LIGHT_PRIO_LOW 4
|
||||||
#define PR_LIGHT_PRIO_LOW_GAME 5
|
#define PR_LIGHT_PRIO_LOW_GAME 5
|
||||||
|
|
||||||
|
////////// yax defs //////////
|
||||||
|
#define YAX_BIT 1024
|
||||||
|
#define YAX_CEILING 0
|
||||||
|
#define YAX_FLOOR 1
|
||||||
|
|
||||||
|
#define YAX_SECTORFLD(Sect,Fld, Cf) (*((uint8_t *)§or[Sect].ceiling##Fld + (Cf)*((char*)§or[0].floor##Fld - (char*)§or[0].ceiling##Fld)))
|
||||||
|
|
||||||
|
int16_t yax_getbunch(int16_t i, int16_t cf);
|
||||||
|
void yax_setbunch(int16_t i, int16_t cf, int16_t bunchnum);
|
||||||
|
|
||||||
|
|
||||||
#define CLIPMASK0 (((1L)<<16)+1L)
|
#define CLIPMASK0 (((1L)<<16)+1L)
|
||||||
#define CLIPMASK1 (((256L)<<16)+64L)
|
#define CLIPMASK1 (((256L)<<16)+64L)
|
||||||
|
|
||||||
|
@ -577,6 +588,8 @@ int32_t changespritesect(int16_t spritenum, int16_t newsectnum);
|
||||||
int32_t changespritestat(int16_t spritenum, int16_t newstatnum);
|
int32_t changespritestat(int16_t spritenum, int16_t newstatnum);
|
||||||
int32_t setsprite(int16_t spritenum, const vec3_t *new) ATTRIBUTE((nonnull(2)));
|
int32_t setsprite(int16_t spritenum, const vec3_t *new) ATTRIBUTE((nonnull(2)));
|
||||||
|
|
||||||
|
int32_t spriteheight(int16_t i, int32_t *basez);
|
||||||
|
|
||||||
int32_t screencapture(const char *filename, char inverseit) ATTRIBUTE((nonnull(1)));
|
int32_t screencapture(const char *filename, char inverseit) ATTRIBUTE((nonnull(1)));
|
||||||
|
|
||||||
int32_t getclosestcol(int32_t r, int32_t g, int32_t b);
|
int32_t getclosestcol(int32_t r, int32_t g, int32_t b);
|
||||||
|
|
|
@ -1110,13 +1110,15 @@ void editinput(void)
|
||||||
cz = getceilzofslope(hitinfo.hitsect, hitinfo.pos.x, hitinfo.pos.y);
|
cz = getceilzofslope(hitinfo.hitsect, hitinfo.pos.x, hitinfo.pos.y);
|
||||||
fz = getflorzofslope(hitinfo.hitsect, hitinfo.pos.x, hitinfo.pos.y);
|
fz = getflorzofslope(hitinfo.hitsect, hitinfo.pos.x, hitinfo.pos.y);
|
||||||
|
|
||||||
j = (tilesizy[sprite[i].picnum]*sprite[i].yrepeat)<<1;
|
j = spriteheight(i, NULL)>>1;
|
||||||
sprite[i].z = hitinfo.pos.z;
|
sprite[i].z = hitinfo.pos.z;
|
||||||
if ((sprite[i].cstat&128) == 0)
|
if ((sprite[i].cstat&48)!=32)
|
||||||
bclamp(&sprite[i].z, cz+(j<<1), fz);
|
{
|
||||||
else
|
if ((sprite[i].cstat&128) == 0)
|
||||||
bclamp(&sprite[i].z, cz+j, fz-j);
|
bclamp(&sprite[i].z, cz+(j<<1), fz);
|
||||||
|
else
|
||||||
|
bclamp(&sprite[i].z, cz+j, fz-j);
|
||||||
|
}
|
||||||
|
|
||||||
if (searchstat == 0 || searchstat == 4)
|
if (searchstat == 0 || searchstat == 4)
|
||||||
{
|
{
|
||||||
|
@ -1796,21 +1798,106 @@ static int32_t copyloop1(int16_t *danumwalls, int32_t *m)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void updatesprite1(int16_t j)
|
static void updatesprite1(int16_t i)
|
||||||
{
|
{
|
||||||
int32_t tempint;
|
setsprite(i, (vec3_t *)&sprite[i]);
|
||||||
|
|
||||||
setsprite(j, (vec3_t *)&sprite[j]);
|
if ((sprite[i].cstat&48)!=32 && sprite[i].sectnum>=0)
|
||||||
|
|
||||||
tempint = (tilesizy[sprite[j].picnum]*sprite[j].yrepeat)<<2;
|
|
||||||
if (sprite[j].sectnum>=0)
|
|
||||||
{
|
{
|
||||||
sprite[j].z = max(sprite[j].z, getceilzofslope(sprite[j].sectnum,sprite[j].x,sprite[j].y)+tempint);
|
int32_t tempint, cz, fz;
|
||||||
sprite[j].z = min(sprite[j].z, getflorzofslope(sprite[j].sectnum,sprite[j].x,sprite[j].y));
|
tempint = spriteheight(i, NULL);
|
||||||
|
if (sprite[i].cstat&128)
|
||||||
|
tempint >>= 1;
|
||||||
|
cz = getceilzofslope(sprite[i].sectnum, sprite[i].x,sprite[i].y);
|
||||||
|
fz = getflorzofslope(sprite[i].sectnum, sprite[i].x,sprite[i].y);
|
||||||
|
sprite[i].z = max(sprite[i].z, cz+tempint);
|
||||||
|
sprite[i].z = min(sprite[i].z, fz);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t ask_if_sure(const char *query, uint32_t flags);
|
static int32_t ask_if_sure(const char *query, uint32_t flags);
|
||||||
|
static int32_t ask_above_or_below();
|
||||||
|
|
||||||
|
// returns:
|
||||||
|
// 0: continue
|
||||||
|
// >0: newnumwalls
|
||||||
|
// <0: error
|
||||||
|
static int32_t trace_loop(int32_t j, uint8_t *visitedwall, int16_t *ignore_ret, int16_t *refsect_ret)
|
||||||
|
{
|
||||||
|
int16_t refsect, ignore;
|
||||||
|
int32_t k, n, refwall;
|
||||||
|
|
||||||
|
if (wall[j].nextwall>=0 || (visitedwall[j>>3]&(1<<(j&7))))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
n=2*MAXWALLS; // simple inf loop check
|
||||||
|
refwall = j;
|
||||||
|
k = numwalls;
|
||||||
|
|
||||||
|
ignore = 0;
|
||||||
|
|
||||||
|
if (ignore_ret)
|
||||||
|
{
|
||||||
|
refsect = -1;
|
||||||
|
updatesectorexclude(wall[j].x, wall[j].y, &refsect, hlsectorbitmap);
|
||||||
|
if (refsect<0)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (j!=refwall && visitedwall[j>>3]&(1<<(j&7)))
|
||||||
|
ignore = 1;
|
||||||
|
visitedwall[j>>3] |= (1<<(j&7));
|
||||||
|
|
||||||
|
if (ignore_ret)
|
||||||
|
{
|
||||||
|
if (inside(wall[j].x, wall[j].y, refsect) != 1)
|
||||||
|
ignore = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ignore)
|
||||||
|
{
|
||||||
|
if (k>=MAXWALLS)
|
||||||
|
{
|
||||||
|
message("Wall limits exceeded while tracing outer loop.");
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bmemcpy(&wall[k], &wall[j], sizeof(walltype));
|
||||||
|
wall[k].point2 = k+1;
|
||||||
|
wall[k].nextsector = wall[k].nextwall = wall[k].extra = -1;
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
|
||||||
|
j = wall[j].point2;
|
||||||
|
n--;
|
||||||
|
|
||||||
|
while (wall[j].nextwall>=0 && n>0)
|
||||||
|
{
|
||||||
|
j = wall[wall[j].nextwall].point2;
|
||||||
|
// if (j!=refwall && (visitedwall[j>>3]&(1<<(j&7))))
|
||||||
|
// ignore = 1;
|
||||||
|
// visitedwall[j>>3] |= (1<<(j&7));
|
||||||
|
n--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (j!=refwall && n>0);
|
||||||
|
|
||||||
|
if (j!=refwall)
|
||||||
|
{
|
||||||
|
message("internal error while tracing outer loop: didn't reach refwall");
|
||||||
|
return -3;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ignore_ret)
|
||||||
|
*ignore_ret = ignore;
|
||||||
|
|
||||||
|
if (refsect_ret)
|
||||||
|
*refsect_ret = refsect;
|
||||||
|
|
||||||
|
return k;
|
||||||
|
}
|
||||||
|
|
||||||
void overheadeditor(void)
|
void overheadeditor(void)
|
||||||
{
|
{
|
||||||
|
@ -2224,7 +2311,7 @@ void overheadeditor(void)
|
||||||
printext16(8,8, editorcolors[13],editorcolors[0],cbuf,0);
|
printext16(8,8, editorcolors[13],editorcolors[0],cbuf,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((keystatus[0x36] || keystatus[0xb8]) && !eitherCTRL) // RSHIFT || RALT
|
if (keystatus[0x36] || keystatus[0xb8]) // RSHIFT || RALT
|
||||||
{
|
{
|
||||||
if (keystatus[0x27] || keystatus[0x28]) // ' and ;
|
if (keystatus[0x27] || keystatus[0x28]) // ' and ;
|
||||||
{
|
{
|
||||||
|
@ -2252,10 +2339,8 @@ void overheadeditor(void)
|
||||||
x2 = mulscale14(dax-pos.x,zoom);
|
x2 = mulscale14(dax-pos.x,zoom);
|
||||||
y2 = mulscale14(day-pos.y,zoom);
|
y2 = mulscale14(day-pos.y,zoom);
|
||||||
|
|
||||||
if (wall[linehighlight].nextsector >= 0)
|
drawline16base(halfxdim16+x2,midydim16+y2, 0,0, 0,0,
|
||||||
drawline16base(halfxdim16+x2,midydim16+y2, 0,0, 0,0, editorcolors[15]);
|
wall[linehighlight].nextsector >= 0 ? editorcolors[15] : editorcolors[5]);
|
||||||
else
|
|
||||||
drawline16base(halfxdim16+x2,midydim16+y2, 0,0, 0,0, editorcolors[5]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enddrawing(); //}}}
|
enddrawing(); //}}}
|
||||||
|
@ -2676,15 +2761,49 @@ void overheadeditor(void)
|
||||||
{
|
{
|
||||||
keystatus[0x12] = 0;
|
keystatus[0x12] = 0;
|
||||||
|
|
||||||
if (pointhighlight >= 16384)
|
if (!eitherCTRL)
|
||||||
{
|
{
|
||||||
i = pointhighlight-16384;
|
if (pointhighlight >= 16384)
|
||||||
Bsprintf(buffer, "Sprite (%d) Status list: ", i);
|
{
|
||||||
changespritestat(i, getnumber16(buffer, sprite[i].statnum, 65535, 0));
|
i = pointhighlight-16384;
|
||||||
|
Bsprintf(buffer, "Sprite (%d) Status list: ", i);
|
||||||
|
changespritestat(i, getnumber16(buffer, sprite[i].statnum, MAXSTATUS-1, 0));
|
||||||
// clearmidstatbar16();
|
// clearmidstatbar16();
|
||||||
// showspritedata((int16_t)i);
|
// showspritedata((int16_t)i);
|
||||||
|
// printmessage16("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (highlightsectorcnt > 0&&0)
|
||||||
|
{
|
||||||
|
////////// YAX //////////
|
||||||
|
static const char *cfs[2] = {"ceiling", "floor"};
|
||||||
|
|
||||||
|
int32_t cf, good, thez;
|
||||||
|
|
||||||
|
cf = ask_above_or_below();
|
||||||
|
if (!cf)
|
||||||
|
goto end_yax;
|
||||||
|
|
||||||
|
cf--;
|
||||||
|
|
||||||
|
good = (highlightsectorcnt==1 || (YAX_SECTORFLD(highlightsector[0],stat, cf)&2)==0);
|
||||||
|
|
||||||
|
thez = YAX_SECTORFLD(highlightsector[0],z, cf);
|
||||||
|
for (i=1; i<highlightsectorcnt; i++)
|
||||||
|
{
|
||||||
|
if (YAX_SECTORFLD(highlightsector[i],z, cf) != thez)
|
||||||
|
{
|
||||||
|
message("All sectors must have the same %s height", cfs[cf]);
|
||||||
|
goto end_yax;
|
||||||
|
}
|
||||||
|
if ((YAX_SECTORFLD(highlightsector[i],stat, cf)&2)!=0)
|
||||||
|
{
|
||||||
|
message("Sector %ss must not be sloped", cfs[cf]);
|
||||||
|
goto end_yax;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end_yax: ;
|
||||||
}
|
}
|
||||||
// printmessage16("");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (highlightsectorcnt < 0)
|
if (highlightsectorcnt < 0)
|
||||||
|
@ -2724,12 +2843,13 @@ void overheadeditor(void)
|
||||||
if (highlighty1 > highlighty2)
|
if (highlighty1 > highlighty2)
|
||||||
swaplong(&highlighty1, &highlighty2);
|
swaplong(&highlighty1, &highlighty2);
|
||||||
|
|
||||||
|
// Ctrl+RShift: select all wall-points of highlighted wall's loop:
|
||||||
if (eitherCTRL)
|
if (eitherCTRL)
|
||||||
{
|
{
|
||||||
Bmemset(show2dwall, 0, sizeof(show2dwall));
|
Bmemset(show2dwall, 0, sizeof(show2dwall));
|
||||||
Bmemset(show2dsprite, 0, sizeof(show2dsprite));
|
Bmemset(show2dsprite, 0, sizeof(show2dsprite));
|
||||||
|
|
||||||
if ((linehighlight >= 0) && (linehighlight < MAXWALLS))
|
if (linehighlight >= 0 && linehighlight < MAXWALLS)
|
||||||
{
|
{
|
||||||
i = linehighlight;
|
i = linehighlight;
|
||||||
do
|
do
|
||||||
|
@ -2793,14 +2913,17 @@ void overheadeditor(void)
|
||||||
{
|
{
|
||||||
if (highlightsectorcnt == 0)
|
if (highlightsectorcnt == 0)
|
||||||
{
|
{
|
||||||
int32_t xx[] = { highlightx1, highlightx1, searchx, searchx, highlightx1 };
|
if (!eitherCTRL)
|
||||||
int32_t yy[] = { highlighty1, searchy, searchy, highlighty1, highlighty1 };
|
{
|
||||||
|
int32_t xx[] = { highlightx1, highlightx1, searchx, searchx, highlightx1 };
|
||||||
|
int32_t yy[] = { highlighty1, searchy, searchy, highlighty1, highlighty1 };
|
||||||
|
|
||||||
highlightx2 = searchx;
|
highlightx2 = searchx;
|
||||||
highlighty2 = searchy;
|
highlighty2 = searchy;
|
||||||
ydim16 = ydim-STATUS2DSIZ2;
|
ydim16 = ydim-STATUS2DSIZ2;
|
||||||
|
|
||||||
plotlines2d(xx, yy, 5, editorcolors[10]);
|
plotlines2d(xx, yy, 5, editorcolors[10]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2833,84 +2956,28 @@ void overheadeditor(void)
|
||||||
clearkeys();
|
clearkeys();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!didmakered && !hadouterpoint && newnumwalls<0)
|
||||||
while (!didmakered && !hadouterpoint && newnumwalls<0) // if
|
|
||||||
{
|
{
|
||||||
int32_t tmpnumwalls=0, refwall;
|
|
||||||
uint8_t *visitedwall = Bcalloc((numwalls+7)>>3,1);
|
uint8_t *visitedwall = Bcalloc((numwalls+7)>>3,1);
|
||||||
|
int16_t ignore, refsect;
|
||||||
|
int32_t n;
|
||||||
|
|
||||||
if (!visitedwall)
|
if (!visitedwall)
|
||||||
{
|
{
|
||||||
message("out of memory!");
|
message("out of memory!");
|
||||||
break;
|
goto outtathis;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=0; i<highlightsectorcnt; i++)
|
|
||||||
tmpnumwalls += sector[highlightsector[i]].wallnum;
|
|
||||||
|
|
||||||
for (i=0; i<highlightsectorcnt; i++)
|
for (i=0; i<highlightsectorcnt; i++)
|
||||||
{
|
{
|
||||||
for (WALLS_OF_SECTOR(highlightsector[i], j))
|
for (WALLS_OF_SECTOR(highlightsector[i], j))
|
||||||
{
|
{
|
||||||
int16_t refsect, ignore;
|
k = trace_loop(j, visitedwall, &ignore, &refsect);
|
||||||
int32_t n;
|
if (k == 0)
|
||||||
|
|
||||||
if (wall[j].nextwall>=0 || (visitedwall[j>>3]&(1<<(j&7))))
|
|
||||||
continue;
|
continue;
|
||||||
|
else if (k < 0)
|
||||||
n=2*tmpnumwalls; // simple inf loop check
|
|
||||||
refwall = j;
|
|
||||||
k = numwalls;
|
|
||||||
|
|
||||||
ignore = 0;
|
|
||||||
refsect = -1;
|
|
||||||
updatesectorexclude(wall[j].x, wall[j].y, &refsect, hlsectorbitmap);
|
|
||||||
if (refsect<0)
|
|
||||||
goto outtathis;
|
goto outtathis;
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
if (j!=refwall && visitedwall[j>>3]&(1<<(j&7)))
|
|
||||||
ignore = 1;
|
|
||||||
visitedwall[j>>3] |= (1<<(j&7));
|
|
||||||
|
|
||||||
if (inside(wall[j].x, wall[j].y, refsect)!=1)
|
|
||||||
ignore = 1;
|
|
||||||
|
|
||||||
if (!ignore)
|
|
||||||
{
|
|
||||||
if (k>=MAXWALLS)
|
|
||||||
{
|
|
||||||
message("Wall limits exceeded while tracing outer loop.");
|
|
||||||
goto outtathis;
|
|
||||||
}
|
|
||||||
|
|
||||||
Bmemcpy(&wall[k], &wall[j], sizeof(walltype));
|
|
||||||
wall[k].point2 = k+1;
|
|
||||||
wall[k].nextsector = wall[k].nextwall = wall[k].extra = -1;
|
|
||||||
k++;
|
|
||||||
}
|
|
||||||
|
|
||||||
j = wall[j].point2;
|
|
||||||
n--;
|
|
||||||
|
|
||||||
while (wall[j].nextwall>=0 && n>0)
|
|
||||||
{
|
|
||||||
j = wall[wall[j].nextwall].point2;
|
|
||||||
// if (j!=refwall && (visitedwall[j>>3]&(1<<(j&7))))
|
|
||||||
// ignore = 1;
|
|
||||||
// visitedwall[j>>3] |= (1<<(j&7));
|
|
||||||
n--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
while (j!=refwall && n>0);
|
|
||||||
|
|
||||||
if (j!=refwall)
|
|
||||||
{
|
|
||||||
message("internal error while tracing outer loop: didn't reach refwall");
|
|
||||||
goto outtathis;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ignore)
|
if (!ignore)
|
||||||
{
|
{
|
||||||
wall[k-1].point2 = numwalls; // close the loop
|
wall[k-1].point2 = numwalls; // close the loop
|
||||||
|
@ -2967,15 +3034,14 @@ void overheadeditor(void)
|
||||||
}
|
}
|
||||||
outtathis:
|
outtathis:
|
||||||
newnumwalls = -1;
|
newnumwalls = -1;
|
||||||
Bfree(visitedwall);
|
if (visitedwall)
|
||||||
|
Bfree(visitedwall);
|
||||||
break; // --|
|
}
|
||||||
} // <---------/
|
|
||||||
|
|
||||||
highlightx1 = searchx;
|
highlightx1 = searchx;
|
||||||
highlighty1 = searchy;
|
highlighty1 = searchy;
|
||||||
highlightx2 = searchx;
|
highlightx2 = searchx;
|
||||||
highlighty2 = searchx;
|
highlighty2 = searchy;
|
||||||
highlightsectorcnt = 0;
|
highlightsectorcnt = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2984,29 +3050,41 @@ outtathis:
|
||||||
if (highlightsectorcnt == 0)
|
if (highlightsectorcnt == 0)
|
||||||
{
|
{
|
||||||
int32_t add=keystatus[0x28], sub=(!add && keystatus[0x27]), setop=(add||sub);
|
int32_t add=keystatus[0x28], sub=(!add && keystatus[0x27]), setop=(add||sub);
|
||||||
|
int32_t pointsel = eitherCTRL;
|
||||||
|
|
||||||
getpoint(highlightx1,highlighty1, &highlightx1,&highlighty1);
|
getpoint(highlightx1,highlighty1, &highlightx1,&highlighty1);
|
||||||
getpoint(highlightx2,highlighty2, &highlightx2,&highlighty2);
|
getpoint(highlightx2,highlighty2, &highlightx2,&highlighty2);
|
||||||
|
|
||||||
if (highlightx1 > highlightx2)
|
if (!pointsel)
|
||||||
swaplong(&highlightx1, &highlightx2);
|
{
|
||||||
if (highlighty1 > highlighty2)
|
if (highlightx1 > highlightx2)
|
||||||
swaplong(&highlighty1, &highlighty2);
|
swaplong(&highlightx1, &highlightx2);
|
||||||
|
if (highlighty1 > highlighty2)
|
||||||
|
swaplong(&highlighty1, &highlighty2);
|
||||||
|
}
|
||||||
|
|
||||||
if (!setop)
|
if (!setop)
|
||||||
Bmemset(hlsectorbitmap, 0, sizeof(hlsectorbitmap));
|
Bmemset(hlsectorbitmap, 0, sizeof(hlsectorbitmap));
|
||||||
|
|
||||||
for (i=0; i<numsectors; i++)
|
for (i=0; i<numsectors; i++)
|
||||||
{
|
{
|
||||||
bad = 0;
|
if (pointsel)
|
||||||
for (WALLS_OF_SECTOR(i, j))
|
|
||||||
{
|
{
|
||||||
if (wall[j].x < highlightx1) bad = 1;
|
bad = (inside(highlightx2, highlighty2, i)!=1);
|
||||||
if (wall[j].x > highlightx2) bad = 1;
|
|
||||||
if (wall[j].y < highlighty1) bad = 1;
|
|
||||||
if (wall[j].y > highlighty2) bad = 1;
|
|
||||||
if (bad == 1) break;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bad = 0;
|
||||||
|
for (WALLS_OF_SECTOR(i, j))
|
||||||
|
{
|
||||||
|
if (wall[j].x < highlightx1) bad = 1;
|
||||||
|
if (wall[j].x > highlightx2) bad = 1;
|
||||||
|
if (wall[j].y < highlighty1) bad = 1;
|
||||||
|
if (wall[j].y > highlighty2) bad = 1;
|
||||||
|
if (bad == 1) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (bad == 0)
|
if (bad == 0)
|
||||||
{
|
{
|
||||||
if (sub)
|
if (sub)
|
||||||
|
@ -3026,6 +3104,9 @@ outtathis:
|
||||||
|
|
||||||
update_highlightsector();
|
update_highlightsector();
|
||||||
ovh_whiteoutgrab();
|
ovh_whiteoutgrab();
|
||||||
|
|
||||||
|
if (highlightsectorcnt>0)
|
||||||
|
printmessage16("Total selected sectors: %d", highlightsectorcnt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3145,7 +3226,7 @@ end_after_dragging:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((cursectorhighlight >= 0) && (cursectorhighlight < numsectors))
|
if (cursectorhighlight >= 0 && cursectorhighlight < numsectors)
|
||||||
{
|
{
|
||||||
// for (i=0; i<highlightsectorcnt; i++)
|
// for (i=0; i<highlightsectorcnt; i++)
|
||||||
// if (cursectorhighlight == highlightsector[i])
|
// if (cursectorhighlight == highlightsector[i])
|
||||||
|
@ -3200,7 +3281,7 @@ end_after_dragging:
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else //if (highlightsectorcnt <= 0)
|
||||||
{
|
{
|
||||||
if ((bstatus&1) > (oldmousebstatus&1))
|
if ((bstatus&1) > (oldmousebstatus&1))
|
||||||
pointhighlight = getpointhighlight(mousxplc, mousyplc, pointhighlight);
|
pointhighlight = getpointhighlight(mousxplc, mousyplc, pointhighlight);
|
||||||
|
@ -3286,7 +3367,7 @@ end_after_dragging:
|
||||||
if (setsprite(daspr, &vec) == -1 && osec>=0)
|
if (setsprite(daspr, &vec) == -1 && osec>=0)
|
||||||
Bmemcpy(&sprite[daspr], &ovec, sizeof(vec3_t));
|
Bmemcpy(&sprite[daspr], &ovec, sizeof(vec3_t));
|
||||||
#if 0
|
#if 0
|
||||||
daz = ((tilesizy[sprite[daspr].picnum]*sprite[daspr].yrepeat)<<2);
|
daz = spriteheight(daspr, NULL);
|
||||||
|
|
||||||
for (i=0; i<numsectors; i++)
|
for (i=0; i<numsectors; i++)
|
||||||
if (inside(dax,day,i) == 1)
|
if (inside(dax,day,i) == 1)
|
||||||
|
@ -3414,7 +3495,7 @@ end_point_dragging:
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m32_sideview = !m32_sideview;
|
m32_sideview = !m32_sideview;
|
||||||
message("Side view %s", m32_sideview?"enabled":"disabled");
|
printmessage16("Side view %s", m32_sideview?"enabled":"disabled");
|
||||||
|
|
||||||
m32_setkeyfilter(1);
|
m32_setkeyfilter(1);
|
||||||
}
|
}
|
||||||
|
@ -3673,6 +3754,7 @@ end_point_dragging:
|
||||||
deletesector(joinsector[1]);
|
deletesector(joinsector[1]);
|
||||||
|
|
||||||
printmessage16("Sectors joined.");
|
printmessage16("Sectors joined.");
|
||||||
|
asksave = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
joinsector[0] = -1;
|
joinsector[0] = -1;
|
||||||
|
@ -3747,8 +3829,9 @@ end_join_sectors:
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sprite[i].z = getflorzofslope(sucksect,dax,day);
|
sprite[i].z = getflorzofslope(sucksect,dax,day);
|
||||||
if ((sprite[i].cstat&128) != 0)
|
// if (sprite[i].cstat&128)
|
||||||
sprite[i].z -= ((tilesizy[sprite[i].picnum]*sprite[i].yrepeat)<<1);
|
// sprite[i].z -= spriteheight(i, NULL)>>1;
|
||||||
|
|
||||||
// PK
|
// PK
|
||||||
if (prefixarg)
|
if (prefixarg)
|
||||||
{
|
{
|
||||||
|
@ -5044,6 +5127,35 @@ static int32_t ask_if_sure(const char *query, uint32_t flags)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t ask_above_or_below()
|
||||||
|
{
|
||||||
|
char ch;
|
||||||
|
int32_t ret=0;
|
||||||
|
|
||||||
|
_printmessage16("Extend above (a) or below (z)?");
|
||||||
|
|
||||||
|
showframe(1);
|
||||||
|
bflushchars();
|
||||||
|
|
||||||
|
while ((keystatus[1]|keystatus[0x2e]) == 0 && ret==0)
|
||||||
|
{
|
||||||
|
if (handleevents())
|
||||||
|
quitevent = 0;
|
||||||
|
|
||||||
|
idle();
|
||||||
|
ch = bgetchar();
|
||||||
|
|
||||||
|
if (ch == 'a' || ch == 'A')
|
||||||
|
ret = 1;
|
||||||
|
else if (ch == 'z' || ch == 'Z')
|
||||||
|
ret = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
clearkeys();
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
// flags: 1:no ExSaveMap (backup.map)
|
// flags: 1:no ExSaveMap (backup.map)
|
||||||
const char *SaveBoard(const char *fn, uint32_t flags)
|
const char *SaveBoard(const char *fn, uint32_t flags)
|
||||||
{
|
{
|
||||||
|
@ -5527,7 +5639,7 @@ void fixspritesectors(void)
|
||||||
|
|
||||||
if (inside(dax,day,sprite[i].sectnum) != 1)
|
if (inside(dax,day,sprite[i].sectnum) != 1)
|
||||||
{
|
{
|
||||||
daz = (tilesizy[sprite[i].picnum]*sprite[i].yrepeat)<<2;
|
daz = spriteheight(i, NULL);
|
||||||
|
|
||||||
for (j=0; j<numsectors; j++)
|
for (j=0; j<numsectors; j++)
|
||||||
if (inside(dax,day, j) == 1
|
if (inside(dax,day, j) == 1
|
||||||
|
@ -6326,12 +6438,11 @@ int32_t fillsector(int16_t sectnum, char fillcolor)
|
||||||
endwall = startwall + sector[sectnum].wallnum - 1;
|
endwall = startwall + sector[sectnum].wallnum - 1;
|
||||||
for (z=startwall; z<=endwall; z++)
|
for (z=startwall; z<=endwall; z++)
|
||||||
{
|
{
|
||||||
y1 = (((wall[z].y-pos.y)*zoom)>>14)+midydim16;
|
y1 = midydim16 + (((wall[z].y-pos.y)*zoom)>>14);
|
||||||
y2 = (((POINT2(z).y-pos.y)*zoom)>>14)+midydim16;
|
y2 = midydim16 + (((POINT2(z).y-pos.y)*zoom)>>14);
|
||||||
if (y1 < miny) miny = y1;
|
|
||||||
if (y2 < miny) miny = y2;
|
miny = min(miny, min(y1, y2));
|
||||||
if (y1 > maxy) maxy = y1;
|
maxy = max(maxy, max(y1, y2));
|
||||||
if (y2 > maxy) maxy = y2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (miny < uborder) miny = uborder;
|
if (miny < uborder) miny = uborder;
|
||||||
|
@ -6340,7 +6451,7 @@ int32_t fillsector(int16_t sectnum, char fillcolor)
|
||||||
//+((totalclock>>2)&3)
|
//+((totalclock>>2)&3)
|
||||||
for (sy=miny; sy<=maxy; sy+=3) // JBF 20040116: numframes%3 -> (totalclock>>2)&3
|
for (sy=miny; sy<=maxy; sy+=3) // JBF 20040116: numframes%3 -> (totalclock>>2)&3
|
||||||
{
|
{
|
||||||
y = pos.y+(((sy-midydim16)<<14)/zoom);
|
y = pos.y + ((sy-midydim16)<<14)/zoom;
|
||||||
|
|
||||||
fillist[0] = lborder; fillcnt = 1;
|
fillist[0] = lborder; fillcnt = 1;
|
||||||
for (z=startwall; z<=endwall; z++)
|
for (z=startwall; z<=endwall; z++)
|
||||||
|
@ -6349,28 +6460,29 @@ int32_t fillsector(int16_t sectnum, char fillcolor)
|
||||||
y1 = wall[z].y; y2 = POINT2(z).y;
|
y1 = wall[z].y; y2 = POINT2(z).y;
|
||||||
if (y1 > y2)
|
if (y1 > y2)
|
||||||
{
|
{
|
||||||
tempint = x1; x1 = x2; x2 = tempint;
|
swaplong(&x1, &x2);
|
||||||
tempint = y1; y1 = y2; y2 = tempint;
|
swaplong(&y1, &y2);
|
||||||
}
|
}
|
||||||
if ((y1 <= y) && (y2 > y))
|
|
||||||
|
if (y1 <= y && y < y2)
|
||||||
//if (x1*(y-y2) + x2*(y1-y) <= 0)
|
//if (x1*(y-y2) + x2*(y1-y) <= 0)
|
||||||
{
|
{
|
||||||
dax = x1+scale(y-y1,x2-x1,y2-y1);
|
if (fillcnt == sizeof(fillist)/sizeof(fillist[0]))
|
||||||
dax = (((dax-pos.x)*zoom)>>14)+halfxdim16;
|
break;
|
||||||
|
|
||||||
|
dax = x1 + scale(y-y1, x2-x1, y2-y1);
|
||||||
|
dax = halfxdim16 + (((dax-pos.x)*zoom)>>14);
|
||||||
if (dax >= lborder)
|
if (dax >= lborder)
|
||||||
fillist[fillcnt++] = dax;
|
fillist[fillcnt++] = dax;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fillcnt > 0)
|
if (fillcnt > 0)
|
||||||
{
|
{
|
||||||
for (z=1; z<fillcnt; z++)
|
for (z=1; z<fillcnt; z++)
|
||||||
for (zz=0; zz<z; zz++)
|
for (zz=0; zz<z; zz++)
|
||||||
if (fillist[z] < fillist[zz])
|
if (fillist[z] < fillist[zz])
|
||||||
{
|
swaplong(&fillist[z], &fillist[zz]);
|
||||||
tempint = fillist[z];
|
|
||||||
fillist[z] = fillist[zz];
|
|
||||||
fillist[zz] = tempint;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (z=(fillcnt&1); z<fillcnt-1; z+=2)
|
for (z=(fillcnt&1); z<fillcnt-1; z+=2)
|
||||||
{
|
{
|
||||||
|
@ -6378,11 +6490,13 @@ int32_t fillsector(int16_t sectnum, char fillcolor)
|
||||||
break;
|
break;
|
||||||
if (fillist[z+1] > rborder)
|
if (fillist[z+1] > rborder)
|
||||||
fillist[z+1] = rborder;
|
fillist[z+1] = rborder;
|
||||||
|
|
||||||
drawline16(fillist[z],sy, fillist[z+1],sy, 159 //editorcolors[fillcolor]
|
drawline16(fillist[z],sy, fillist[z+1],sy, 159 //editorcolors[fillcolor]
|
||||||
-klabs(sintable[((totalclock<<3)&2047)]>>11));
|
-klabs(sintable[((totalclock<<3)&2047)]>>11));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6690,11 +6804,15 @@ nonextsector:
|
||||||
while (j >= 0)
|
while (j >= 0)
|
||||||
{
|
{
|
||||||
m = insertsprite(destsector,sprite[j].statnum);
|
m = insertsprite(destsector,sprite[j].statnum);
|
||||||
if (m>=0)
|
if (m<0)
|
||||||
{
|
{
|
||||||
Bmemcpy(&sprite[m],&sprite[j],sizeof(spritetype));
|
message("Some sprites not duplicated because limit was reached.");
|
||||||
sprite[m].sectnum = destsector; //Don't let memcpy overwrite sector!
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Bmemcpy(&sprite[m],&sprite[j],sizeof(spritetype));
|
||||||
|
sprite[m].sectnum = destsector; //Don't let memcpy overwrite sector!
|
||||||
|
|
||||||
j = nextspritesect[j];
|
j = nextspritesect[j];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,6 +173,32 @@ static int16_t maphacklightcnt=0;
|
||||||
static int16_t maphacklight[PR_MAXLIGHTS];
|
static int16_t maphacklight[PR_MAXLIGHTS];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
////////// YAX //////////
|
||||||
|
#define YAX_BUNCHNUM(Sect, Cf) (*(int16_t *)(§or[Sect].ceilingxpanning + 6*Cf))
|
||||||
|
|
||||||
|
int16_t yax_getbunch(int16_t i, int16_t cf)
|
||||||
|
{
|
||||||
|
if (((*(§or[i].ceilingstat + cf))&YAX_BIT)==0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return YAX_BUNCHNUM(i, cf);
|
||||||
|
}
|
||||||
|
|
||||||
|
void yax_setbunch(int16_t i, int16_t cf, int16_t bunchnum)
|
||||||
|
{
|
||||||
|
if (i<0)
|
||||||
|
{
|
||||||
|
*(§or[i].ceilingstat + cf) &= ~YAX_BIT;
|
||||||
|
YAX_BUNCHNUM(i, cf) = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
*(§or[i].ceilingstat + cf) |= YAX_BIT;
|
||||||
|
YAX_BUNCHNUM(i, cf) = bunchnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
////////// editor side view //////////
|
////////// editor side view //////////
|
||||||
int32_t m32_sideview = 0;
|
int32_t m32_sideview = 0;
|
||||||
int32_t m32_sideelev = 256; // elevation in BUILD degrees, 0..512
|
int32_t m32_sideelev = 256; // elevation in BUILD degrees, 0..512
|
||||||
|
@ -295,7 +321,7 @@ int32_t clipmapinfo_load(const char *filename)
|
||||||
int32_t i,k,w, px,py,pz;
|
int32_t i,k,w, px,py,pz;
|
||||||
int16_t ang,cs;
|
int16_t ang,cs;
|
||||||
|
|
||||||
char fn[BMAX_PATH], loadedwhich[32]= {0}, *lwcp=loadedwhich;
|
char fn[BMAX_PATH], loadedwhich[32]={0}, *lwcp=loadedwhich;
|
||||||
int32_t slen, fi, fisec[10], fispr[10];
|
int32_t slen, fi, fisec[10], fispr[10];
|
||||||
int32_t ournumsectors=0, ournumwalls=0, ournumsprites=0, numsprites;
|
int32_t ournumsectors=0, ournumwalls=0, ournumsprites=0, numsprites;
|
||||||
|
|
||||||
|
@ -6053,6 +6079,7 @@ static inline void keepaway(int32_t *x, int32_t *y, int32_t w)
|
||||||
y1 = clipit[w].y1; dy = clipit[w].y2-y1;
|
y1 = clipit[w].y1; dy = clipit[w].y2-y1;
|
||||||
ox = ksgn(-dy); oy = ksgn(dx);
|
ox = ksgn(-dy); oy = ksgn(dx);
|
||||||
first = (klabs(dx) <= klabs(dy));
|
first = (klabs(dx) <= klabs(dy));
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
if (dx*(*y-y1) > (*x-x1)*dy) return;
|
if (dx*(*y-y1) > (*x-x1)*dy) return;
|
||||||
|
@ -8929,6 +8956,27 @@ int32_t krecip(int32_t num)
|
||||||
return(krecipasm(num));
|
return(krecipasm(num));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t spriteheight(int16_t i, int32_t *basez)
|
||||||
|
{
|
||||||
|
int32_t hei, flooraligned=((sprite[i].cstat&48)==32);
|
||||||
|
|
||||||
|
if (flooraligned)
|
||||||
|
{
|
||||||
|
if (basez)
|
||||||
|
*basez = sprite[i].z;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
hei = (tilesizy[sprite[i].picnum]*sprite[i].yrepeat)<<2;
|
||||||
|
if (basez)
|
||||||
|
{
|
||||||
|
*basez = sprite[i].z;
|
||||||
|
if (sprite[i].cstat&128)
|
||||||
|
*basez -= (hei>>1);
|
||||||
|
}
|
||||||
|
return hei;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// setsprite
|
// setsprite
|
||||||
//
|
//
|
||||||
|
|
|
@ -3692,11 +3692,12 @@ static int32_t spriteonceilingz(int32_t searchwall)
|
||||||
// int32_t z=sprite[searchwall].z;
|
// int32_t z=sprite[searchwall].z;
|
||||||
|
|
||||||
int32_t z = getceilzofslope(searchsector,sprite[searchwall].x,sprite[searchwall].y);
|
int32_t z = getceilzofslope(searchsector,sprite[searchwall].x,sprite[searchwall].y);
|
||||||
|
int32_t tmphei = spriteheight(searchwall, NULL);
|
||||||
|
|
||||||
if (sprite[searchwall].cstat&128)
|
if (sprite[searchwall].cstat&128)
|
||||||
z -= ((tilesizy[sprite[searchwall].picnum]*sprite[searchwall].yrepeat)<<1);
|
z -= tmphei>>1;
|
||||||
if ((sprite[searchwall].cstat&48) != 32)
|
if ((sprite[searchwall].cstat&48) != 32)
|
||||||
z += ((tilesizy[sprite[searchwall].picnum]*sprite[searchwall].yrepeat)<<2);
|
z += tmphei;
|
||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3707,7 +3708,7 @@ static int32_t spriteongroundz(int32_t searchwall)
|
||||||
int32_t z = getflorzofslope(searchsector,sprite[searchwall].x,sprite[searchwall].y);
|
int32_t z = getflorzofslope(searchsector,sprite[searchwall].x,sprite[searchwall].y);
|
||||||
|
|
||||||
if (sprite[searchwall].cstat&128)
|
if (sprite[searchwall].cstat&128)
|
||||||
z -= ((tilesizy[sprite[searchwall].picnum]*sprite[searchwall].yrepeat)<<1);
|
z -= spriteheight(searchwall, NULL)>>1;
|
||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4271,6 +4272,7 @@ static void mouseaction_movesprites(int32_t *sumxvect, int32_t *sumyvect, int32_
|
||||||
xvect = daxvect;
|
xvect = daxvect;
|
||||||
yvect = dayvect;
|
yvect = dayvect;
|
||||||
|
|
||||||
|
// test run
|
||||||
for (ii=0; ii<highlightcnt; ii++)
|
for (ii=0; ii<highlightcnt; ii++)
|
||||||
if (highlight[ii]&16384)
|
if (highlight[ii]&16384)
|
||||||
{
|
{
|
||||||
|
@ -4282,6 +4284,7 @@ static void mouseaction_movesprites(int32_t *sumxvect, int32_t *sumyvect, int32_
|
||||||
xvect = (tvec.x - sprite[spi].x)<<14;
|
xvect = (tvec.x - sprite[spi].x)<<14;
|
||||||
yvect = (tvec.y - sprite[spi].y)<<14;
|
yvect = (tvec.y - sprite[spi].y)<<14;
|
||||||
}
|
}
|
||||||
|
// the real thing
|
||||||
for (ii=0; ii<highlightcnt; ii++)
|
for (ii=0; ii<highlightcnt; ii++)
|
||||||
if (highlight[ii]&16384)
|
if (highlight[ii]&16384)
|
||||||
{
|
{
|
||||||
|
@ -4653,7 +4656,7 @@ static void Keys3d(void)
|
||||||
|
|
||||||
if (AIMING_AT_WALL_OR_MASK && PRESSED_KEYSC(PERIOD))
|
if (AIMING_AT_WALL_OR_MASK && PRESSED_KEYSC(PERIOD))
|
||||||
{
|
{
|
||||||
AutoAlignWalls((int32_t)searchwall, 0);
|
AutoAlignWalls(searchwall, 0);
|
||||||
message("Wall %d autoalign", searchwall);
|
message("Wall %d autoalign", searchwall);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4688,7 +4691,7 @@ static void Keys3d(void)
|
||||||
sector[searchsector].ceilingheinum = 0;
|
sector[searchsector].ceilingheinum = 0;
|
||||||
}
|
}
|
||||||
getnumberptr256("Sector ceiling slope: ", §or[searchsector].ceilingheinum,
|
getnumberptr256("Sector ceiling slope: ", §or[searchsector].ceilingheinum,
|
||||||
sizeof(sector[0].ceilingheinum), 65536, 1, NULL);
|
sizeof(sector[0].ceilingheinum), 32767, 1, NULL);
|
||||||
break;
|
break;
|
||||||
case SEARCH_FLOOR:
|
case SEARCH_FLOOR:
|
||||||
getnumberptr256("Sector floorz: ", §or[searchsector].floorz,
|
getnumberptr256("Sector floorz: ", §or[searchsector].floorz,
|
||||||
|
@ -4699,7 +4702,7 @@ static void Keys3d(void)
|
||||||
sector[searchsector].floorstat |= 2;
|
sector[searchsector].floorstat |= 2;
|
||||||
}
|
}
|
||||||
getnumberptr256("Sector floor slope: ", §or[searchsector].floorheinum,
|
getnumberptr256("Sector floor slope: ", §or[searchsector].floorheinum,
|
||||||
sizeof(sector[0].floorheinum), 65536, 1, NULL);
|
sizeof(sector[0].floorheinum), 32767, 1, NULL);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SEARCH_SPRITE:
|
case SEARCH_SPRITE:
|
||||||
|
@ -5175,16 +5178,19 @@ static void Keys3d(void)
|
||||||
int16_t sect = k ? highlightsector[0] :
|
int16_t sect = k ? highlightsector[0] :
|
||||||
((AIMING_AT_WALL && wall[searchwall].nextsector>=0 && (eitherALT && !(bstatus&1))) ?
|
((AIMING_AT_WALL && wall[searchwall].nextsector>=0 && (eitherALT && !(bstatus&1))) ?
|
||||||
wall[searchwall].nextsector : searchsector);
|
wall[searchwall].nextsector : searchsector);
|
||||||
|
int32_t tmphei;
|
||||||
|
|
||||||
for (j=0; j<(k?k:1); j++, sect=highlightsector[j])
|
for (j=0; j<(k?k:1); j++, sect=highlightsector[j])
|
||||||
{
|
{
|
||||||
for (i=headspritesect[sect]; i!=-1; i=nextspritesect[i])
|
for (i=headspritesect[sect]; i!=-1; i=nextspritesect[i])
|
||||||
{
|
{
|
||||||
|
tmphei = spriteheight(i, NULL);
|
||||||
|
|
||||||
tempint = getceilzofslope(sect, sprite[i].x, sprite[i].y);
|
tempint = getceilzofslope(sect, sprite[i].x, sprite[i].y);
|
||||||
tempint += (tilesizy[sprite[i].picnum]*sprite[i].yrepeat)<<2;
|
tempint += tmphei;
|
||||||
|
|
||||||
if (sprite[i].cstat&128)
|
if (sprite[i].cstat&128)
|
||||||
tempint += (tilesizy[sprite[i].picnum]*sprite[i].yrepeat)<<1;
|
tempint += tmphei>>1;
|
||||||
|
|
||||||
if (sprite[i].z == tempint)
|
if (sprite[i].z == tempint)
|
||||||
sprite[i].z += tsign * (updownunits << (eitherCTRL<<1)); // JBF 20031128
|
sprite[i].z += tsign * (updownunits << (eitherCTRL<<1)); // JBF 20031128
|
||||||
|
@ -5205,7 +5211,7 @@ static void Keys3d(void)
|
||||||
tempint = getflorzofslope(sect,sprite[i].x,sprite[i].y);
|
tempint = getflorzofslope(sect,sprite[i].x,sprite[i].y);
|
||||||
|
|
||||||
if (sprite[i].cstat&128)
|
if (sprite[i].cstat&128)
|
||||||
tempint += ((tilesizy[sprite[i].picnum]*sprite[i].yrepeat)<<1);
|
tempint += spriteheight(i, NULL)>>1;
|
||||||
|
|
||||||
if (sprite[i].z == tempint)
|
if (sprite[i].z == tempint)
|
||||||
sprite[i].z += tsign * (updownunits << (eitherCTRL<<1)); // JBF 20031128
|
sprite[i].z += tsign * (updownunits << (eitherCTRL<<1)); // JBF 20031128
|
||||||
|
@ -6866,7 +6872,7 @@ static void Keys2d(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PRESSED_KEYSC(E)) // E (expand)
|
if (!eitherCTRL && PRESSED_KEYSC(E)) // E (expand)
|
||||||
{
|
{
|
||||||
for (i=0; i<numsectors; i++)
|
for (i=0; i<numsectors; i++)
|
||||||
if (inside(mousxplc,mousyplc,i) == 1)
|
if (inside(mousxplc,mousyplc,i) == 1)
|
||||||
|
@ -7131,8 +7137,7 @@ static void Keys2d(void)
|
||||||
sprite[i].ang &= 2047;
|
sprite[i].ang &= 2047;
|
||||||
printmessage16("Sprite %d updated", i);
|
printmessage16("Sprite %d updated", i);
|
||||||
}
|
}
|
||||||
|
else if (pointhighlight >= 0)
|
||||||
else if (pointhighlight >= 0 /*<= 16383*/)
|
|
||||||
{
|
{
|
||||||
i = linehighlight;
|
i = linehighlight;
|
||||||
j = wall[i].x;
|
j = wall[i].x;
|
||||||
|
@ -9996,11 +10001,23 @@ void ExtCheckKeys(void)
|
||||||
|
|
||||||
if (asksave == 1 && (bstatus + lastbstatus) == 0 && mapstate)
|
if (asksave == 1 && (bstatus + lastbstatus) == 0 && mapstate)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
|
int32_t i;
|
||||||
|
// check keys so that e.g. bunch deletions won't produce
|
||||||
|
// as much revisions
|
||||||
|
for (i=sizeof(keystatus)/sizeof(keystatus[0]) - 1; i>=0; i--)
|
||||||
|
if (keystatus[i])
|
||||||
|
break;
|
||||||
// message("Saved undo rev %d",map_revision);
|
// message("Saved undo rev %d",map_revision);
|
||||||
create_map_snapshot();
|
if (i==-1)
|
||||||
asksave++;
|
#endif
|
||||||
|
{
|
||||||
|
create_map_snapshot();
|
||||||
|
asksave++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (asksave == 2) asksave++;
|
else if (asksave == 2)
|
||||||
|
asksave++;
|
||||||
|
|
||||||
if (totalclock > autosavetimer && autosave)
|
if (totalclock > autosavetimer && autosave)
|
||||||
{
|
{
|
||||||
|
@ -10532,7 +10549,7 @@ static void EditSectorData(int16_t sectnum)
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
handlemed(0, "Ceiling heinum", "Ceiling Heinum", §or[sectnum].ceilingheinum,
|
handlemed(0, "Ceiling heinum", "Ceiling Heinum", §or[sectnum].ceilingheinum,
|
||||||
sizeof(sector[sectnum].ceilingheinum), 65536L, 1);
|
sizeof(sector[sectnum].ceilingheinum), 32767, 1);
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
handlemed(0, "Palookup number", "Ceiling Palookup Number", §or[sectnum].ceilingpal,
|
handlemed(0, "Palookup number", "Ceiling Palookup Number", §or[sectnum].ceilingpal,
|
||||||
|
@ -10546,7 +10563,7 @@ static void EditSectorData(int16_t sectnum)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
handlemed(1, "Flags (hex)", "Floor Flags", §or[sectnum].floorstat,
|
handlemed(1, "Flags (hex)", "Floor Flags", §or[sectnum].floorstat,
|
||||||
sizeof(sector[sectnum].floorstat), 65536, 0);
|
sizeof(sector[sectnum].floorstat), 65535, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -10576,7 +10593,7 @@ static void EditSectorData(int16_t sectnum)
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
handlemed(0, "Floor heinum", "Floor Heinum", §or[sectnum].floorheinum,
|
handlemed(0, "Floor heinum", "Floor Heinum", §or[sectnum].floorheinum,
|
||||||
sizeof(sector[sectnum].floorheinum), 65536, 1);
|
sizeof(sector[sectnum].floorheinum), 32767, 1);
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
handlemed(0, "Palookup number", "Floor Palookup Number", §or[sectnum].floorpal,
|
handlemed(0, "Palookup number", "Floor Palookup Number", §or[sectnum].floorpal,
|
||||||
|
@ -10624,7 +10641,7 @@ static void EditWallData(int16_t wallnum)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
handlemed(1, "Flags (hex)", "Flags", &wall[wallnum].cstat,
|
handlemed(1, "Flags (hex)", "Flags", &wall[wallnum].cstat,
|
||||||
sizeof(wall[wallnum].cstat), 65536L, 0);
|
sizeof(wall[wallnum].cstat), 65535, 0);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
handlemed(0, "Shade", "Shade", &wall[wallnum].shade,
|
handlemed(0, "Shade", "Shade", &wall[wallnum].shade,
|
||||||
|
@ -10871,15 +10888,15 @@ static void EditSpriteData(int16_t spritenum)
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
handlemed(0, "X-Velocity", "X-Velocity", &sprite[spritenum].xvel,
|
handlemed(0, "X-Velocity", "X-Velocity", &sprite[spritenum].xvel,
|
||||||
sizeof(sprite[spritenum].xvel), 65536, 1);
|
sizeof(sprite[spritenum].xvel), 65535, 1);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
handlemed(0, "Y-Velocity", "Y-Velocity", &sprite[spritenum].yvel,
|
handlemed(0, "Y-Velocity", "Y-Velocity", &sprite[spritenum].yvel,
|
||||||
sizeof(sprite[spritenum].yvel), 65536, 1);
|
sizeof(sprite[spritenum].yvel), 65535, 1);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
handlemed(0, "Z-Velocity", "Z-Velocity", &sprite[spritenum].zvel,
|
handlemed(0, "Z-Velocity", "Z-Velocity", &sprite[spritenum].zvel,
|
||||||
sizeof(sprite[spritenum].zvel), 65536, 1);
|
sizeof(sprite[spritenum].zvel), 65535, 1);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
handlemed(0, "Owner", "Owner", &sprite[spritenum].owner,
|
handlemed(0, "Owner", "Owner", &sprite[spritenum].owner,
|
||||||
|
@ -10936,10 +10953,10 @@ static void GenericSpriteSearch()
|
||||||
|
|
||||||
static int32_t maxval[7][3] =
|
static int32_t maxval[7][3] =
|
||||||
{
|
{
|
||||||
{ BXY_MAX , 65536 , 2048 },
|
{ BXY_MAX , 65535 , 2048 },
|
||||||
{ BXY_MAX , 128 , 65536 },
|
{ BXY_MAX , 128 , 65535 },
|
||||||
{ BZ_MAX , MAXPALOOKUPS-1, 65536 },
|
{ BZ_MAX , MAXPALOOKUPS-1, 65535 },
|
||||||
{ MAXSECTORS-1, 128 , 65536 },
|
{ MAXSECTORS-1, 128 , 65535 },
|
||||||
{ MAXSTATUS-1 , 128 , MAXSPRITES-1 },
|
{ MAXSTATUS-1 , 128 , MAXSPRITES-1 },
|
||||||
{ BTAG_MAX , MAXTILES-1 , 256 },
|
{ BTAG_MAX , MAXTILES-1 , 256 },
|
||||||
{ BTAG_MAX , 0 , BTAG_MAX }
|
{ BTAG_MAX , 0 , BTAG_MAX }
|
||||||
|
|
Loading…
Reference in a new issue