From 253f0b877183dc1f869e0e7ec8694c63e9aea21f Mon Sep 17 00:00:00 2001 From: terminx Date: Fri, 10 Jul 2015 07:56:48 +0000 Subject: [PATCH] Mapster32: improve 2d mode sprite label display. I want to test this further, so this is marked as DONT_BUILD. git-svn-id: https://svn.eduke32.com/eduke32@5289 1a8010ca-5511-0410-912e-c29ae57300e0 --- polymer/eduke32/build/include/editor.h | 3 +- polymer/eduke32/build/src/build.c | 103 ++++++++++++++----------- polymer/eduke32/build/src/engine.c | 20 +++-- polymer/eduke32/source/astub.c | 60 ++++++++------ polymer/eduke32/source/m32exec.c | 2 +- 5 files changed, 109 insertions(+), 79 deletions(-) diff --git a/polymer/eduke32/build/include/editor.h b/polymer/eduke32/build/include/editor.h index b4546e535..27a58f191 100644 --- a/polymer/eduke32/build/include/editor.h +++ b/polymer/eduke32/build/include/editor.h @@ -262,10 +262,11 @@ extern void showsectordata(int16_t sectnum, int16_t small); extern void showwalldata(int16_t wallnum, int16_t small); extern void showspritedata(int16_t spritenum, int16_t small); -extern void drawsmallabel(const char *text, char col, char backcol, int32_t dax, int32_t day, int32_t daz); +extern void drawsmallabel(const char *text, char col, char backcol, char border, int32_t dax, int32_t day, int32_t daz); extern int32_t whitecol; extern int32_t circlewall; +extern int32_t searchlock; int32_t loadsetup(const char *fn); // from config.c int32_t writesetup(const char *fn); // from config.c diff --git a/polymer/eduke32/build/src/build.c b/polymer/eduke32/build/src/build.c index 0a7f58482..5db9906d5 100644 --- a/polymer/eduke32/build/src/build.c +++ b/polymer/eduke32/build/src/build.c @@ -176,6 +176,7 @@ static int32_t mousx, mousy; int16_t prefixtiles[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; uint8_t hlsectorbitmap[MAXSECTORS>>3]; // show2dsector is already taken... static int32_t minhlsectorfloorz, numhlsecwalls; +int32_t searchlock = 0; // used for: // - hl_all_bunch_sectors_p @@ -1570,7 +1571,7 @@ static inline void drawline16base(int32_t bx, int32_t by, int32_t x1, int32_t y1 drawline16(bx+x1, by+y1, bx+x2, by+y2, col); } -void drawsmallabel(const char *text, char col, char backcol, int32_t dax, int32_t day, int32_t daz) +void drawsmallabel(const char *text, char col, char backcol, char border, int32_t dax, int32_t day, int32_t daz) { int32_t x1, y1, x2, y2; @@ -1583,9 +1584,21 @@ void drawsmallabel(const char *text, char col, char backcol, int32_t dax, int32_ x2 = x1 + (Bstrlen(text)<<2)+2; y2 = y1 + 7; - if ((x1 > 3) && (x2 < xdim) && (y1 > 1) && (y2 < ydim16)) + int f = mulscale8(x2-x1, zoom); + + if ((x1 > -f) && (x2 < xdim+f) && (y1 > -f) && (y2 < ydim16+f)) { printext16(x1,y1, col,backcol, text,1); + + drawline16(x1-2, y1-2, x2-2, y1-2, border); + drawline16(x1-2, y2+2, x2-2, y2+2, border); + + drawline16(x1-2, y1-1, x2-2, y1-1, border); + drawline16(x1-2, y2+1, x2-2, y2+1, border); + + drawline16(x1-3, y1-1, x1-3, y2+1, border); + drawline16(x2-1, y1-1, x2-1, y2+1, border); + drawline16(x1-1,y1-1, x2-3,y1-1, backcol); drawline16(x1-1,y2+1, x2-3,y2+1, backcol); @@ -3237,6 +3250,29 @@ static void isc_transform(int32_t *x, int32_t *y) } } +static void drawspritelabel(int i) +{ + const char *dabuffer = CallExtGetSpriteCaption(i); + if (dabuffer[0] != 0) + { + int const blocking = (sprite[i].cstat & 1); + + int col = spritecol2d[sprite[i].picnum][0] ? editorcolors[spritecol2d[sprite[i].picnum][0]] : getspritecol(i); + + if (col == -1) + col = editorcolors[3]; + + if ((i == pointhighlight - 16384) && (totalclock & 32)) + col += 4; + + if (sprite[i].sectnum < 0) + col = editorcolors[4]; // red + + drawsmallabel(dabuffer, editorcolors[0], col, /*blocking ? editorcolors[5] :*/ col - 3, + sprite[i].x, sprite[i].y, sprite[i].z); + } +} + #define EDITING_MAP_P() (newnumwalls>=0 || joinsector[0]>=0 || circlewall>=0 || (bstatus&1) || isc.active) #define HLMEMBERX(Hl, Member) (*(((Hl)&16384) ? &sprite[(Hl)&16383].Member : &wall[Hl].Member)) @@ -3502,8 +3538,7 @@ void overheadeditor(void) get_sectors_center(&secshort, 1, &dax, &day); - drawsmallabel(dabuffer, editorcolors[0], editorcolors[7], - dax, day, getflorzofslope(i,dax,day)); + drawsmallabel(dabuffer, editorcolors[0], editorcolors[7], editorcolors[7] - 3, dax, day, getflorzofslope(i,dax,day)); } } @@ -3543,8 +3578,7 @@ void overheadeditor(void) dax = (wal->x+wall[wal->point2].x)>>1; day = (wal->y+wall[wal->point2].y)>>1; - drawsmallabel(dabuffer, editorcolors[0], editorcolors[31], - dax, day, (i >= numwalls || j<0) ? 0 : getflorzofslope(j, dax,day)); + drawsmallabel(dabuffer, editorcolors[0], editorcolors[31], editorcolors[31] - 3, dax, day, (i >= numwalls || j<0) ? 0 : getflorzofslope(j, dax,day)); } } @@ -3568,39 +3602,11 @@ void overheadeditor(void) if ((!m32_sideview || !alwaysshowgray) && sprite[i].sectnum >= 0) YAX_SKIPSECTOR(sprite[i].sectnum); - dabuffer = CallExtGetSpriteCaption(i); - if (dabuffer[0] != 0) - { -/* - int32_t blocking = (sprite[i].cstat&1); - - col = 3 + 2*blocking; - if (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)) - col += 4; - - drawsmallabel(dabuffer, editorcolors[0], col, - sprite[i].x, sprite[i].y, sprite[i].z); - } + drawspritelabel(i); } + + if (pointhighlight & 16384) + drawspritelabel(pointhighlight - 16384); } } @@ -3784,7 +3790,7 @@ void overheadeditor(void) drawline16(0,searchy, 8,searchy, editorcolors[15]); // 2d3d mode - if (m32_2d3dmode) + if (m32_2d3dmode && xdimgame == xdim2d && ydimgame == ydim2d) { int bakrendmode = rendmode; vec2_t bdim ={ xdim, ydim }; @@ -3825,7 +3831,7 @@ void overheadeditor(void) if (!m32_is2d3dmode()) { ////// draw mouse pointer - col = editorcolors[15 - 3*gridlock]; + col = searchlock ? editorcolors[13] : editorcolors[15 - 3*gridlock]; if (joinsector[0] >= 0) col = editorcolors[11]; @@ -5961,8 +5967,17 @@ end_point_dragging: if (keystatus[0x26]) // L (grid lock) { keystatus[0x26] = 0; - gridlock = !gridlock; - printmessage16("Grid locking %s", gridlock?"on":"off"); + + if (eitherSHIFT) + { + searchlock = 1-searchlock; + silentmessage("Selection lock %s", searchlock ? "on" : "off"); + } + else + { + gridlock = !gridlock; + silentmessage("Grid locking %s", gridlock ? "on" : "off"); + } } if (keystatus[0x24]) // J (join sectors) @@ -8446,7 +8461,7 @@ static int32_t getlinehighlight(int32_t xplc, int32_t yplc, int32_t line, int8_t if (numwalls == 0) return -1; - if (mouseb & 1) + if (mouseb & 1 || searchlock) return line; if (!ignore_pointhighlight && (pointhighlight&0xc000) == 16384) @@ -8521,7 +8536,7 @@ int32_t getpointhighlight(int32_t xplc, int32_t yplc, int32_t point) if (numwalls == 0) return -1; - if (mouseb & 1) + if (mouseb & 1 || searchlock) return point; if (grid < 1) diff --git a/polymer/eduke32/build/src/engine.c b/polymer/eduke32/build/src/engine.c index a18c21012..c6226f4d0 100644 --- a/polymer/eduke32/build/src/engine.c +++ b/polymer/eduke32/build/src/engine.c @@ -17178,8 +17178,8 @@ static void drawscreen_drawwall(int32_t i, int32_t posxe, int32_t posye, int32_t { // Red walls. Show them on equal-height walls ONLY with setting 2. int32_t bb = (z2 < z1); - int32_t dx = mulscale11(sintable[(k+1024 + 1024*bb)&2047],zoome) / 2560; - int32_t dy = mulscale11(sintable[(k+512 + 1024*bb)&2047],zoome) / 2560; + int32_t dx = mulscale11(sintable[(k+1024 + 1024*bb)&2047],min(4096, zoome)) / 2560; + int32_t dy = mulscale11(sintable[(k+512 + 1024*bb)&2047],min(4096, zoome)) / 2560; dy = scalescreeny(dy); drawline16mid(dax,day, dax+dx,day+dy, editorcolors[col]); @@ -17188,8 +17188,8 @@ static void drawscreen_drawwall(int32_t i, int32_t posxe, int32_t posye, int32_t else if (showheightindicators == 2) { // Show them on white walls ONLY with setting 2. - int32_t dx = mulscale11(sintable[(k+2048)&2047],zoome) / 2560; - int32_t dy = mulscale11(sintable[(k+1536)&2047],zoome) / 2560; + int32_t dx = mulscale11(sintable[(k+2048)&2047],min(4096, zoome)) / 2560; + int32_t dy = mulscale11(sintable[(k+1536)&2047],min(4096, zoome)) / 2560; dy = scalescreeny(dy); drawline16mid(dax,day, dax+dx,day+dy, editorcolors[col]); @@ -17321,8 +17321,10 @@ static void drawscreen_drawsprite(int32_t j, int32_t posxe, int32_t posye, int32 if (m32_sideview) y1 += getscreenvdisp(sprite[j].z-posze,zoome); - if ((halfxdim16+x1 >= 0) && (halfxdim16+x1 < xdim) && - (midydim16+y1 >= 0) && (midydim16+y1 < ydim16)) + int f = mulscale12(128, zoome); + + if ((halfxdim16+x1 >= -f) && (halfxdim16+x1 < xdim+f) && + (midydim16+y1 >= -f) && (midydim16+y1 < ydim16+f)) { if (zoome > 512 && sprite[j].clipdist > 32) drawcircle16(halfxdim16+x1, midydim16+y1, mulscale14(sprite[j].clipdist<<2, zoome), 16384, col); @@ -17596,9 +17598,11 @@ static int32_t printext_checkypos(int32_t ypos, int32_t *yminptr, int32_t *ymaxp if (ypos < 0) { +/* ymin = 0-ypos; if (ymin > 7) return 1; +*/ } else if (ypos+7 >= ydim) { @@ -17725,8 +17729,8 @@ int32_t printext16(int32_t xpos, int32_t ypos, int16_t col, int16_t backcol, con { for (x=0; x= xdim) - break; + if ((unsigned)(stx+x) >= xdim || ptr < (char *)frameplace) + continue; if (letptr[y]&pow2char[7-(fontsize&1)-x]) ptr[x] = (uint8_t)col; else if (backcol >= 0) diff --git a/polymer/eduke32/source/astub.c b/polymer/eduke32/source/astub.c index 9ef5846ce..aa253196b 100644 --- a/polymer/eduke32/source/astub.c +++ b/polymer/eduke32/source/astub.c @@ -670,8 +670,8 @@ const char *ExtGetSectorType(int32_t lotag) { switch (lotag) { - case 1: return "WATER (SE 7)"; - case 2: return "UNDERWATER (SE 7)"; + case 1: return "WATER"; + case 2: return "UNDERWATER"; case 9: return "STAR TREK DOORS"; case 15: return "ELEVATOR TRANSPORT (SE 17)"; case 16: return "ELEVATOR PLATFORM DOWN"; @@ -689,7 +689,7 @@ const char *ExtGetSectorType(int32_t lotag) case 29: return "TEETH DOOR (SE 22)"; case 30: return "ROTATE RISE BRIDGE"; case 31: return "2 WAY TRAIN (SE=30)"; - case 32767: return "SECRET ROOM"; + case 32767: return "SECRET AREA"; case -1: return "END OF LEVEL"; default: if (lotag > 10000 && lotag < 32767) @@ -779,17 +779,17 @@ const char *SectorEffectorTagText(int32_t lotag) static const char *tags[] = { "ROTATED SECTOR", // 0 - "PIVOT SPRITE FOR SE 0", + "ROTATION PIVOT", "EARTHQUAKE", "RANDOM LIGHTS AFTER SHOT OUT", "RANDOM LIGHTS", "(UNKNOWN)", // 5 "SUBWAY", "TRANSPORT", - "UP OPEN DOOR LIGHTS", - "DOWN OPEN DOOR LIGHTS", - "DOOR AUTO CLOSE (H=DELAY)", // 10 - "ROTATE SECTOR DOOR", + "RISING DOOR LIGHTS", + "LOWERING DOOR LIGHTS", + "DOOR CLOSE DELAY", // 10 + "SWING DOOR PIVOT (ST 23)", "LIGHT SWITCH", "EXPLOSIVE", "SUBWAY CAR", @@ -801,34 +801,34 @@ const char *SectorEffectorTagText(int32_t lotag) "BRIDGE (ST 27)", // 20 "DROP FLOOR (ST 28)", "TEETH DOOR (ST 29)", - "1-WAY SE7 DESTINATION (H=SE 7)", - "CONVEYER BELT", + "1-WAY TRANSPORT DESTINATION", + "CONVEYOR BELT", "ENGINE", // 25 "(UNKNOWN)", - "CAMERA FOR PLAYBACK", - "LIGHTNING (H=TILE#4890)", + "DEMO CAMERA", + "LIGHTNING (4890) CONTROLLER", "FLOAT", - "2 WAY TRAIN (ST=31)", // 30 - "FLOOR RISE/FALL", - "CEILING RISE/FALL", - "SPAWN JIB W/QUAKE", + "2 WAY TRAIN (ST 31)", // 30 + "FLOOR Z", + "CEILING Z", + "EARTHQUAKE DEBRIS", }; Bmemset(tempbuf,0,sizeof(tempbuf)); if (lotag>=0 && lotag<(int32_t)ARRAY_SIZE(tags)) - Bsprintf(tempbuf, "%d: %s", lotag, tags[lotag]); + Bsprintf(tempbuf, "%s", tags[lotag]); else switch (lotag) { case 36: - Bsprintf(tempbuf,"%d: SHOOTER",lotag); + Bsprintf(tempbuf,"SHOOTER"); break; case 49: - Bsprintf(tempbuf,"%d: POINT LIGHT",lotag); + Bsprintf(tempbuf,"POINT LIGHT"); break; case 50: - Bsprintf(tempbuf,"%d: SPOTLIGHT",lotag); + Bsprintf(tempbuf,"SPOTLIGHT"); break; default: Bsprintf(tempbuf,"%d: (UNKNOWN)",lotag); @@ -866,7 +866,11 @@ const char *SectorEffectorText(int32_t spritenum) if (!lo[5]) // tags are 5 chars or less SpriteName(spritenum, tempbuf); else - Bsprintf(tempbuf, "SE %s",lo); + { + if (cursprite == spritenum) + Bsprintf(tempbuf, "SE %d %s", sprite[spritenum].lotag, lo); + else Bstrcpy(tempbuf, lo); + } return (tempbuf); } @@ -10250,8 +10254,11 @@ void ExtPreCheckKeys(void) // just before drawrooms ydim16 = ydim - STATUS2DSIZ2; // XXX? - if (xp1 < 4 || xp1 > xdim-6 || yp1 < 4 || yp1 > ydim16-6) + int f = mulscale12(128, zoom); + + if (xp1 < -f || xp1 > xdim+f || yp1 < -f || yp1 > ydim16+f) continue; + rotatesprite(xp1<<16,yp1<<16,zoom<<5,daang,picnum, shade,sprite[i].pal,flags,0,0,xdim-1,ydim16-1); } @@ -10478,7 +10485,10 @@ static void Keys2d3d(void) { keystatus[KEYSC_F10]=0; - if (!in3dmode()) + if (xdimgame != xdim2d || ydimgame != ydim2d) + message("2d and 3d mode resolutions don't match!"); + + else if (!in3dmode()) { if (eitherSHIFT) { @@ -10492,12 +10502,12 @@ static void Keys2d3d(void) if (++m32_2d3dsize > 5) m32_2d3dsize = 3; - printmessage16("2d3d size %d", m32_2d3dsize); + message("2d3d size %d", m32_2d3dsize); } else { m32_2d3dmode = !m32_2d3dmode; - printmessage16("2d3d mode %s", m32_2d3dmode ? "enabled" : "disabled"); + message("2d3d mode %s", m32_2d3dmode ? "enabled" : "disabled"); } } } diff --git a/polymer/eduke32/source/m32exec.c b/polymer/eduke32/source/m32exec.c index b37f44113..6b7fc9248 100644 --- a/polymer/eduke32/source/m32exec.c +++ b/polymer/eduke32/source/m32exec.c @@ -2517,7 +2517,7 @@ badindex: { drawsmallabel(quotetext, editorcolors[backcol&255], // col - fontsize < 0 ? -1 : editorcolors[fontsize&255], // backcol + fontsize < 0 ? -1 : editorcolors[fontsize&255], editorcolors[fontsize&255] - 3, // backcol x, y, col); // x y z } }