Mapster32 changes:

-2d mode sprite colors are now automatically generated from the sprite's 8-bit tile.
-Zooming in and out has been smoothed out.
-The 2d mode crosshair cursor is now 1px thick instead of 2.
-The left mouse button can now be used to select multiple wall points and sprites in 2d mode.
-Ctrl-x now skips corrupt maps instead of going into an infinite loop. ;)
-'-L function in 3d mode works again.
-Sprites with a clipdist that has been changed from the default value of 32 will display a circular approximation of the distance in 2d mode. Note that the real clipping distance is actually closer to a square, but a circle looks much less confusing/stupid alongside the display of floor sprites.
-2d mode status bar has been made a few shades lighter.

git-svn-id: https://svn.eduke32.com/eduke32@5282 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
terminx 2015-07-08 03:34:46 +00:00
parent 86f94d2897
commit f72dffce07
5 changed files with 160 additions and 73 deletions

View file

@ -830,6 +830,8 @@ EXTERN char faketile[(MAXTILES+7)>>3];
EXTERN char *faketiledata[MAXTILES]; EXTERN char *faketiledata[MAXTILES];
EXTERN char spritecol2d[MAXTILES][2]; EXTERN char spritecol2d[MAXTILES][2];
EXTERN uint8_t tilecols[MAXTILES];
extern char vgapal16[4*256]; extern char vgapal16[4*256];
extern uint32_t drawlinepat; extern uint32_t drawlinepat;

View file

@ -375,6 +375,7 @@ static inline int32_t m32_is2d3dmode(void)
searchy > m32_2d3d.y && searchy < (m32_2d3d.y + YSIZE_2D3D); searchy > m32_2d3d.y && searchy < (m32_2d3d.y + YSIZE_2D3D);
} }
extern int32_t getspritecol(int32_t spr);
#define NEXTWALL(i) (wall[wall[i].nextwall]) #define NEXTWALL(i) (wall[wall[i].nextwall])
#define POINT2(i) (wall[wall[i].point2]) #define POINT2(i) (wall[wall[i].point2])

View file

@ -244,7 +244,7 @@ static void getclosestpointonwall(int32_t x, int32_t y, int32_t dawall, int32_t
static void initcrc(void); static void initcrc(void);
static int32_t menuselect(void); static int32_t menuselect(void);
static int32_t menuselect_auto(int32_t); //PK static int32_t menuselect_auto(int, int); //PK
static int32_t insert_sprite_common(int32_t sucksect, int32_t dax, int32_t day); static int32_t insert_sprite_common(int32_t sucksect, int32_t dax, int32_t day);
static void correct_ornamented_sprite(int32_t i, int32_t hitw); static void correct_ornamented_sprite(int32_t i, int32_t hitw);
@ -1025,13 +1025,13 @@ static void mainloop_move(void)
if (vel != 0) if (vel != 0)
{ {
xvect += (vel*doubvel*(int32_t) sintable[(ang+2560)&2047])>>3; xvect += ((vel*doubvel)>>3)*(int32_t) sintable[(ang+2560)&2047];
yvect += (vel*doubvel*(int32_t) sintable[(ang+2048)&2047])>>3; yvect += ((vel*doubvel)>>3)*(int32_t) sintable[(ang+2048)&2047];
} }
if (svel != 0) if (svel != 0)
{ {
xvect += (svel*doubvel*(int32_t) sintable[(ang+2048)&2047])>>3; xvect += ((svel*doubvel)>>3)*(int32_t) sintable[(ang+2048)&2047];
yvect += (svel*doubvel*(int32_t) sintable[(ang+1536)&2047])>>3; yvect += ((svel*doubvel)>>3)*(int32_t) sintable[(ang+1536)&2047];
} }
move_and_update(xvect, yvect, 0); move_and_update(xvect, yvect, 0);
@ -3301,13 +3301,25 @@ void overheadeditor(void)
{ {
int32_t mousx, mousy; int32_t mousx, mousy;
if (zoom < ztarget) zoom += (ztarget-zoom)>>3; if (zoom < ztarget)
if (zoom > ztarget) zoom -= (zoom-ztarget)>>3; {
if ((ztarget - zoom) >> 3)
zoom += (ztarget - zoom) >> 3;
else zoom++;
zoom = min(zoom, ztarget);
}
else if (zoom > ztarget)
{
if ((zoom - ztarget) >> 3)
zoom -= (zoom - ztarget) >> 3;
else zoom--;
zoom = max(zoom, ztarget);
}
if (!((vel|angvel|svel) //DOWN_BK(MOVEFORWARD) || DOWN_BK(MOVEBACKWARD) || DOWN_BK(TURNLEFT) || DOWN_BK(TURNRIGHT) if (!((vel|angvel|svel) //DOWN_BK(MOVEFORWARD) || DOWN_BK(MOVEBACKWARD) || DOWN_BK(TURNLEFT) || DOWN_BK(TURNRIGHT)
|| DOWN_BK(MOVEUP) || DOWN_BK(MOVEDOWN) || keystatus[0x10] || keystatus[0x11] || DOWN_BK(MOVEUP) || DOWN_BK(MOVEDOWN) || keystatus[0x10] || keystatus[0x11]
|| keystatus[0x48] || keystatus[0x4b] || keystatus[0x4d] || keystatus[0x50] // keypad keys || keystatus[0x48] || keystatus[0x4b] || keystatus[0x4d] || keystatus[0x50] // keypad keys
|| bstatus || OSD_IsMoving())) || bstatus || OSD_IsMoving() || ztarget != zoom))
{ {
if (totalclock > waitdelay) if (totalclock > waitdelay)
{ {
@ -3557,16 +3569,33 @@ void overheadeditor(void)
dabuffer = CallExtGetSpriteCaption(i); dabuffer = CallExtGetSpriteCaption(i);
if (dabuffer[0] != 0) if (dabuffer[0] != 0)
{ {
/*
int32_t blocking = (sprite[i].cstat&1); int32_t blocking = (sprite[i].cstat&1);
col = 3 + 2*blocking; col = 3 + 2*blocking;
if (spritecol2d[sprite[i].picnum][blocking]) if (spritecol2d[sprite[i].picnum][blocking])
col = spritecol2d[sprite[i].picnum][blocking]; col = spritecol2d[sprite[i].picnum][blocking];
*/
if (sprite[i].sectnum < 0)
col = editorcolors[4]; // red
else
{
if (spritecol2d[sprite[i].picnum][0])
col = editorcolors[spritecol2d[sprite[i].picnum][0]];
else
{
col = getspritecol(i);
if (col == -1)
col = editorcolors[3];
}
}
if ((i == pointhighlight-16384) && (totalclock & 32)) if ((i == pointhighlight-16384) && (totalclock & 32))
col += (2<<2); col += (2<<2);
drawsmallabel(dabuffer, editorcolors[0], editorcolors[col], drawsmallabel(dabuffer, editorcolors[0], col,
sprite[i].x, sprite[i].y, sprite[i].z); sprite[i].x, sprite[i].y, sprite[i].z);
} }
} }
@ -3848,13 +3877,10 @@ void overheadeditor(void)
} }
drawline16base(searchx, searchy, +0, -8, +0, -1, col); drawline16base(searchx, searchy, +0, -8, +0, -1, col);
drawline16base(searchx, searchy, +1, -8, +1, -1, col); drawline16base(searchx, searchy, +0, 1, +0, 8, col);
drawline16base(searchx, searchy, +0, +2, +0, +9, col);
drawline16base(searchx, searchy, +1, +2, +1, +9, col); drawline16base(searchx, searchy, -8, 0, -1, 0, col);
drawline16base(searchx, searchy, -8, +0, -1, +0, col); drawline16base(searchx, searchy, 1, 0, 8, 0, col);
drawline16base(searchx, searchy, -8, +1, -1, +1, col);
drawline16base(searchx, searchy, +2, +0, +9, +0, col);
drawline16base(searchx, searchy, +2, +1, +9, +1, col);
////// Draw the white pixel closest to mouse cursor on linehighlight ////// Draw the white pixel closest to mouse cursor on linehighlight
if (linehighlight>=0) if (linehighlight>=0)
@ -4846,7 +4872,7 @@ end_yax: ;
if (highlightsectorcnt < 0) if (highlightsectorcnt < 0)
{ {
if (keystatus[0x36]) //Right shift (point highlighting) if ((bstatus & 1 && highlightcnt <= 0) || (bstatus & 1 && pointhighlight == -1) || keystatus[0x36]) //Right shift (point highlighting)
{ {
if (highlightcnt == 0) if (highlightcnt == 0)
{ {
@ -4857,9 +4883,9 @@ end_yax: ;
highlighty2 = searchy; highlighty2 = searchy;
ydim16 = ydim-STATUS2DSIZ2; ydim16 = ydim-STATUS2DSIZ2;
plotlines2d(xx, yy, 5, editorcolors[5]); plotlines2d(xx, yy, 5, editorcolors[14]);
} }
else else if (pointhighlight == -1 || keystatus[0x36])
{ {
highlightcnt = 0; highlightcnt = 0;
@ -5881,7 +5907,7 @@ end_point_dragging:
if ((DOWN_BK(MOVEUP) || (bstatus&16)) && zoom < 32768) if ((DOWN_BK(MOVEUP) || (bstatus&16)) && zoom < 32768)
{ {
if (DOWN_BK(MOVEUP)) if (DOWN_BK(MOVEUP))
ztarget += synctics*(ztarget>>4); ztarget += (synctics*(ztarget>>4))>>(eitherSHIFT<<1);
if (bstatus&16) if (bstatus&16)
ztarget += 4*(ztarget>>4); ztarget += 4*(ztarget>>4);
@ -5891,7 +5917,7 @@ end_point_dragging:
if ((DOWN_BK(MOVEDOWN) || (bstatus&32)) && zoom > 32) if ((DOWN_BK(MOVEDOWN) || (bstatus&32)) && zoom > 32)
{ {
if (DOWN_BK(MOVEDOWN)) if (DOWN_BK(MOVEDOWN))
ztarget -= synctics*(ztarget>>4); ztarget -= (synctics*(ztarget>>4))>>(eitherSHIFT<<1);
if (bstatus&32) if (bstatus&32)
ztarget -= 4*(ztarget>>4); ztarget -= 4*(ztarget>>4);
@ -7778,11 +7804,13 @@ end_insert_points:
if (quickmapcycling && keystatus[0x2d]) //X if (quickmapcycling && keystatus[0x2d]) //X
{ {
if (eitherCTRL) //Ctrl if (eitherCTRL) //Ctrl
{ {
int skip = 0;
nextmap: nextmap:
// bad = 0; // bad = 0;
i = menuselect_auto(keystatus[0x2a] ? 0:1); // LShift: prev map i = menuselect_auto(keystatus[0x2a] ? 0:1, skip); // LShift: prev map
if (i < 0) if (i < 0)
{ {
if (i == -1) if (i == -1)
@ -7793,7 +7821,10 @@ nextmap:
else else
{ {
if (LoadBoard(NULL, 4)) if (LoadBoard(NULL, 4))
{
skip = 2;
goto nextmap; goto nextmap;
}
RESET_EDITOR_VARS(); RESET_EDITOR_VARS();
oposz = pos.z; oposz = pos.z;
@ -8965,15 +8996,15 @@ void clearmidstatbar16(void)
static void clearministatbar16(void) static void clearministatbar16(void)
{ {
int32_t i, col = whitecol - 21; int32_t i, col = whitecol - 16;
begindrawing(); begindrawing();
for (i=ydim-STATUS2DSIZ2; i<ydim; i++) for (i=ydim-STATUS2DSIZ2; i<ydim; i+=2)
{ {
// drawline256(0, i<<12, xdim<<12, i<<12, col); // drawline256(0, i<<12, xdim<<12, i<<12, col);
CLEARLINES2D(i, 1, (col<<24)|(col<<16)|(col<<8)|col); CLEARLINES2D(i, 1, (col<<24)|(col<<16)|(col<<8)|col);
CLEARLINES2D(i+1, 1, (col<<24)|(col<<16)|(col<<8)|col);
col--; col--;
if (col <= 0) break; if (col <= 0) break;
} }
@ -9522,7 +9553,7 @@ static void menuselect_try_findlast(void)
// vvv PK ------------------------------------ // vvv PK ------------------------------------
// copied off menuselect // copied off menuselect
static int32_t menuselect_auto(int32_t direction) // 20080104: jump to next (direction!=0) or prev (direction==0) file static int32_t menuselect_auto(int direction, int skip) // 20080104: jump to next (direction!=0) or prev (direction==0) file
{ {
Bstrcpy(selectedboardfilename, g_oldpath); Bstrcpy(selectedboardfilename, g_oldpath);
tweak_sboardfilename(); tweak_sboardfilename();
@ -9533,20 +9564,23 @@ static int32_t menuselect_auto(int32_t direction) // 20080104: jump to next (dir
menuselect_try_findlast(); menuselect_try_findlast();
if (direction) do
{ {
if (findfileshigh->next) if (direction)
findfileshigh=findfileshigh->next; {
if (findfileshigh->next)
findfileshigh=findfileshigh->next;
else
return -1;
}
else else
return -1; {
} if (findfileshigh->prev)
else findfileshigh=findfileshigh->prev;
{ else
if (findfileshigh->prev) return -1;
findfileshigh=findfileshigh->prev; }
else } while (skip--);
return -1;
}
Bstrcat(selectedboardfilename, findfileshigh->name); Bstrcat(selectedboardfilename, findfileshigh->name);
@ -10496,16 +10530,16 @@ static void keytimerstuff(void)
if (DOWN_BK(STRAFE) == 0) if (DOWN_BK(STRAFE) == 0)
{ {
if (DOWN_BK(TURNLEFT)) angvel = max(angvel-pk_turnaccel, -128); if (DOWN_BK(TURNLEFT)) angvel = max(angvel-pk_turnaccel, -127);
if (DOWN_BK(TURNRIGHT)) angvel = min(angvel+pk_turnaccel, 127); if (DOWN_BK(TURNRIGHT)) angvel = min(angvel+pk_turnaccel, 127);
} }
else else
{ {
if (DOWN_BK(TURNLEFT)) svel = min(svel+16, 255); // svel and vel aren't even chars... if (DOWN_BK(TURNLEFT)) svel = min(svel+16, 255); // svel and vel aren't even chars...
if (DOWN_BK(TURNRIGHT)) svel = max(svel-16, -256); if (DOWN_BK(TURNRIGHT)) svel = max(svel-16, -255);
} }
if (DOWN_BK(MOVEFORWARD)) vel = min(vel+16, 255); if (DOWN_BK(MOVEFORWARD)) vel = min(vel+16, 255);
if (DOWN_BK(MOVEBACKWARD)) vel = max(vel-16, -256); if (DOWN_BK(MOVEBACKWARD)) vel = max(vel-16, -255);
/* if (DOWN_BK(STRAFELEFT)) svel = min(svel+8, 127); /* if (DOWN_BK(STRAFELEFT)) svel = min(svel+8, 127);
if (DOWN_BK(STRAFERIGHT)) svel = max(svel-8, -128); */ if (DOWN_BK(STRAFERIGHT)) svel = max(svel-8, -128); */

View file

@ -10626,6 +10626,7 @@ static int32_t finish_loadboard(const vec3_t *dapos, int16_t *dacursectnum, int1
guniqhudid = 0; guniqhudid = 0;
Bmemset(tilecols, 0, sizeof(tilecols));
return numremoved; return numremoved;
} }
@ -17235,27 +17236,73 @@ static void drawscreen_drawwall(int32_t i, int32_t posxe, int32_t posye, int32_t
} }
} }
int32_t getspritecol(int32_t spr)
{
int picnum = sprite[spr].picnum;
int pal = sprite[spr].pal;
if (palookup[pal] == NULL) pal = 0;
if (tilecols[picnum]) return palookup[pal][tilecols[picnum]];
if (!waloff[picnum]) loadtile(picnum);
if (!waloff[picnum]) return -1;
uint32_t cols[256];
Bmemset(cols, 0, sizeof(cols));
for (int i = 0; i < tilesiz[picnum].x * tilesiz[picnum].y; i++)
cols[*((char *) waloff[picnum] + i)]++;
unsigned col = 0, cnt = 0;
for (int i = 0; i < 240; i++)
if (cols[i] > cnt)
col = i, cnt = cols[i];
float sum = (float)curpalette[col].r * GRAYSCALE_COEFF_RED + (float)curpalette[col].g * GRAYSCALE_COEFF_GREEN +
(float)curpalette[col].b * GRAYSCALE_COEFF_BLUE;
while (col < 240 &&
((float)curpalette[col + 1].r * GRAYSCALE_COEFF_RED + (float)curpalette[col + 1].g * GRAYSCALE_COEFF_GREEN +
(float)curpalette[col + 1].b * GRAYSCALE_COEFF_BLUE) > sum)
col++;
tilecols[picnum] = col - 8;
return palookup[pal][tilecols[picnum]];
}
static void drawscreen_drawsprite(int32_t j, int32_t posxe, int32_t posye, int32_t posze, int32_t zoome) static void drawscreen_drawsprite(int32_t j, int32_t posxe, int32_t posye, int32_t posze, int32_t zoome)
{ {
int32_t x1, y1, x2, y2; int32_t x1, y1, x2, y2;
char col; int col;
int16_t hitblocking=(sprite[j].cstat&256), flooraligned=(sprite[j].cstat&32), wallaligned=(sprite[j].cstat&16); int16_t hitblocking=(sprite[j].cstat&256), flooraligned=(sprite[j].cstat&32), wallaligned=(sprite[j].cstat&16);
int16_t angofs = m32_sideview ? m32_sideang : 0; int16_t angofs = m32_sideview ? m32_sideang : 0;
if (sprite[j].sectnum<0) if (sprite[j].sectnum<0)
col = 4; // red col = editorcolors[4]; // red
else else
{ {
col = 3;
if (spritecol2d[sprite[j].picnum][0]) if (spritecol2d[sprite[j].picnum][0])
col = spritecol2d[sprite[j].picnum][0]; col = spritecol2d[sprite[j].picnum][0];
else
{
col = getspritecol(j);
if (col == -1) col = editorcolors[3];
}
/*
else if ((sprite[j].cstat&1) > 0) else if ((sprite[j].cstat&1) > 0)
{ {
col = 5; col = 5;
if (spritecol2d[sprite[j].picnum][1]) if (spritecol2d[sprite[j].picnum][1])
col = spritecol2d[sprite[j].picnum][1]; col = spritecol2d[sprite[j].picnum][1];
} }
*/
} }
if (editstatus == 1) if (editstatus == 1)
@ -17282,20 +17329,23 @@ static void drawscreen_drawsprite(int32_t j, int32_t posxe, int32_t posye, int32
if ((halfxdim16+x1 >= 0) && (halfxdim16+x1 < xdim) && if ((halfxdim16+x1 >= 0) && (halfxdim16+x1 < xdim) &&
(midydim16+y1 >= 0) && (midydim16+y1 < ydim16)) (midydim16+y1 >= 0) && (midydim16+y1 < ydim16))
{ {
drawcircle16(halfxdim16+x1, midydim16+y1, 4, 16384, editorcolors[col]); if (zoome > 512 && sprite[j].clipdist > 32)
drawcircle16(halfxdim16+x1, midydim16+y1, mulscale14(sprite[j].clipdist<<2, zoome), 16384, col);
drawcircle16(halfxdim16+x1, midydim16+y1, 4, 16384, col);
x2 = mulscale11(sintable[(sprite[j].ang+angofs+2560)&2047],zoome) / 768; x2 = mulscale11(sintable[(sprite[j].ang+angofs+2560)&2047],zoome) / 768;
y2 = mulscale11(sintable[(sprite[j].ang+angofs+2048)&2047],zoome) / 768; y2 = mulscale11(sintable[(sprite[j].ang+angofs+2048)&2047],zoome) / 768;
y2 = scalescreeny(y2); y2 = scalescreeny(y2);
drawline16mid(x1,y1, x1+x2,y1+y2, editorcolors[col]); drawline16mid(x1,y1, x1+x2,y1+y2, col);
if (hitblocking) if (hitblocking)
{ {
drawline16mid(x1,y1+1, x1+x2,y1+y2+1, editorcolors[col]); drawline16mid(x1,y1+1, x1+x2,y1+y2+1, col);
drawline16mid(x1,y1-1, x1+x2,y1+y2-1, editorcolors[col]); drawline16mid(x1,y1-1, x1+x2,y1+y2-1, col);
drawline16mid(x1-1,y1, x1+x2-1,y1+y2, editorcolors[col]); drawline16mid(x1-1,y1, x1+x2-1,y1+y2, col);
drawline16mid(x1+1,y1, x1+x2+1,y1+y2, editorcolors[col]); drawline16mid(x1+1,y1, x1+x2+1,y1+y2, col);
} }
if (flooraligned) if (flooraligned)
@ -17324,15 +17374,15 @@ static void drawscreen_drawsprite(int32_t j, int32_t posxe, int32_t posye, int32
for (ii=3; ii>=0; ii--) for (ii=3; ii>=0; ii--)
{ {
in = (ii+1)&3; in = (ii+1)&3;
drawline16mid(x1+co[ii][0], y1-co[ii][1], x1+co[in][0], y1-co[in][1], editorcolors[col]); drawline16mid(x1+co[ii][0], y1-co[ii][1], x1+co[in][0], y1-co[in][1], col);
if (hitblocking) if (hitblocking)
{ {
drawline16mid(x1+co[ii][0], y1-co[ii][1]+1, x1+co[in][0], y1-co[in][1]+1, editorcolors[col]); drawline16mid(x1+co[ii][0], y1-co[ii][1]+1, x1+co[in][0], y1-co[in][1]+1, col);
drawline16mid(x1+co[ii][0], y1-co[ii][1]-1, x1+co[in][0], y1-co[in][1]-1, editorcolors[col]); drawline16mid(x1+co[ii][0], y1-co[ii][1]-1, x1+co[in][0], y1-co[in][1]-1, col);
drawline16mid(x1+co[ii][0]+1, y1-co[ii][1], x1+co[in][0]+1, y1-co[in][1], editorcolors[col]); drawline16mid(x1+co[ii][0]+1, y1-co[ii][1], x1+co[in][0]+1, y1-co[in][1], col);
drawline16mid(x1+co[ii][0]-1, y1-co[ii][1], x1+co[in][0]-1, y1-co[in][1], editorcolors[col]); drawline16mid(x1+co[ii][0]-1, y1-co[ii][1], x1+co[in][0]-1, y1-co[in][1], col);
} }
drawline16mid(x1, y1, x1 + co[in][0], y1 - co[in][1], editorcolors[col]); drawline16mid(x1, y1, x1 + co[in][0], y1 - co[in][1], col);
} }
drawlinepat = 0xffffffff; drawlinepat = 0xffffffff;
} }
@ -17345,21 +17395,21 @@ static void drawscreen_drawsprite(int32_t j, int32_t posxe, int32_t posye, int32
y2 = mulscale11(sintable[(sprite[j].ang+angofs+2048)&2047],zoome) / 6144; y2 = mulscale11(sintable[(sprite[j].ang+angofs+2048)&2047],zoome) / 6144;
y2 = scalescreeny(y2); y2 = scalescreeny(y2);
drawline16mid(x1,y1, x1+x2,y1+y2, editorcolors[col]); drawline16mid(x1,y1, x1+x2,y1+y2, col);
if (!(sprite[j].cstat&64)) // not 1-sided if (!(sprite[j].cstat&64)) // not 1-sided
{ {
drawline16mid(x1,y1, x1-x2,y1-y2, editorcolors[col]); drawline16mid(x1,y1, x1-x2,y1-y2, col);
if (hitblocking) if (hitblocking)
{ {
drawline16mid(x1-no,y1-one, x1-x2-no,y1-y2-one, editorcolors[col]); drawline16mid(x1-no,y1-one, x1-x2-no,y1-y2-one, col);
drawline16mid(x1+no,y1+one, x1-x2+no,y1-y2+one, editorcolors[col]); drawline16mid(x1+no,y1+one, x1-x2+no,y1-y2+one, col);
} }
} }
if (hitblocking) if (hitblocking)
{ {
drawline16mid(x1-no,y1-one, x1+x2-no,y1+y2-one, editorcolors[col]); drawline16mid(x1-no,y1-one, x1+x2-no,y1+y2-one, col);
drawline16mid(x1+no,y1+one, x1+x2+no,y1+y2+one, editorcolors[col]); drawline16mid(x1+no,y1+one, x1+x2+no,y1+y2+one, col);
} }
@ -17367,20 +17417,20 @@ static void drawscreen_drawsprite(int32_t j, int32_t posxe, int32_t posye, int32
y2 = mulscale13(sintable[(sprite[j].ang+angofs+512)&2047],zoome) * fx / 4096; y2 = mulscale13(sintable[(sprite[j].ang+angofs+512)&2047],zoome) * fx / 4096;
y2 = scalescreeny(y2); y2 = scalescreeny(y2);
drawline16mid(x1,y1, x1-x2,y1-y2, editorcolors[col]); drawline16mid(x1,y1, x1-x2,y1-y2, col);
drawline16mid(x1,y1, x1+x2,y1+y2, editorcolors[col]); drawline16mid(x1,y1, x1+x2,y1+y2, col);
if (hitblocking) if (hitblocking)
{ {
drawline16mid(x1+1,y1, x1+x2+1,y1+y2, editorcolors[col]); drawline16mid(x1+1,y1, x1+x2+1,y1+y2, col);
drawline16mid(x1-1,y1, x1-x2-1,y1-y2, editorcolors[col]); drawline16mid(x1-1,y1, x1-x2-1,y1-y2, col);
drawline16mid(x1-1,y1, x1+x2-1,y1+y2, editorcolors[col]); drawline16mid(x1-1,y1, x1+x2-1,y1+y2, col);
drawline16mid(x1+1,y1, x1-x2+1,y1-y2, editorcolors[col]); drawline16mid(x1+1,y1, x1-x2+1,y1-y2, col);
drawline16mid(x1,y1-1, x1+x2,y1+y2-1, editorcolors[col]); drawline16mid(x1,y1-1, x1+x2,y1+y2-1, col);
drawline16mid(x1,y1+1, x1-x2,y1-y2+1, editorcolors[col]); drawline16mid(x1,y1+1, x1-x2,y1-y2+1, col);
drawline16mid(x1,y1+1, x1+x2,y1+y2+1, editorcolors[col]); drawline16mid(x1,y1+1, x1+x2,y1+y2+1, col);
drawline16mid(x1,y1-1, x1-x2,y1-y2-1, editorcolors[col]); drawline16mid(x1,y1-1, x1-x2,y1-y2-1, col);
} }
} }
} }

View file

@ -4474,7 +4474,7 @@ static void Keys3d(void)
message("Visibility changed on all selected sectors"); message("Visibility changed on all selected sectors");
} }
if (PRESSED_KEYSC(L)) // L (grid lock) if (!keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(L)) // L (grid lock)
{ {
gridlock = !gridlock; gridlock = !gridlock;
message("Grid locking %s", gridlock ? "on" : "off"); message("Grid locking %s", gridlock ? "on" : "off");