diff --git a/polymer/eduke32/build/include/build.h b/polymer/eduke32/build/include/build.h index ca0c64684..0bb895a24 100644 --- a/polymer/eduke32/build/include/build.h +++ b/polymer/eduke32/build/include/build.h @@ -64,15 +64,23 @@ extern "C" { ////////// yax defs ////////// #define YAX_MAXBUNCHES (MAXSECTORS>>1) #define YAX_BIT 1024 +// "has next wall when constrained"-bit (1<<10: ceiling, 1<<11: floor) +#define YAX_NEXTWALLBIT(Cf) (1<<(10+Cf)) +#define YAX_NEXTWALLBITS (YAX_NEXTWALLBIT(0)|YAX_NEXTWALLBIT(1)) #define YAX_CEILING 0 // don't change! #define YAX_FLOOR 1 // don't change! #define SECTORFLD(Sect,Fld, Cf) (*((Cf) ? (§or[Sect].floor##Fld) : (§or[Sect].ceiling##Fld))) +// more user tag hijacking: lotag/extra :/ +#define YAX_NEXTWALL(Wall, Cf) (*(&wall[Wall].lotag + 2*Cf)) + int16_t yax_getbunch(int16_t i, int16_t cf); void yax_getbunches(int16_t i, int16_t *cb, int16_t *fb); void yax_setbunch(int16_t i, int16_t cf, int16_t bunchnum); void yax_setbunches(int16_t i, int16_t cb, int16_t fb); +int16_t yax_getnextwall(int16_t wal, int16_t cf); +void yax_setnextwall(int16_t wal, int16_t cf, int16_t thenextwall); void yax_update(int32_t onlyreset); @@ -134,7 +142,8 @@ typedef struct // bit 7: 1 = Transluscence, 0 = not "T" // bit 8: 1 = y-flipped, 0 = normal "F" // bit 9: 1 = Transluscence reversing, 0 = normal "T" -// bits 10-15: reserved +// bits 10 and 11: reserved (in use by YAX) +// bits 12-15: reserved //32 bytes typedef struct diff --git a/polymer/eduke32/build/include/editor.h b/polymer/eduke32/build/include/editor.h index 7f467276a..7e9bdd5b4 100644 --- a/polymer/eduke32/build/include/editor.h +++ b/polymer/eduke32/build/include/editor.h @@ -76,7 +76,8 @@ extern int32_t m32_sideelev; extern int16_t m32_sideang; extern int32_t m32_sidecos, m32_sidesin; extern int32_t m32_swcnt; -extern int16_t *m32_wallsprite; +extern int32_t m32_wallscreenxy[MAXWALLS][2]; +extern int16_t m32_wallsprite[MAXWALLS+MAXSPRITES]; extern int8_t sideview_reversehrot; extern inline int32_t scalescreeny(int32_t sy); extern void screencoords(int32_t *xres, int32_t *yres, int32_t x, int32_t y, int32_t zoome) ATTRIBUTE((nonnull)); diff --git a/polymer/eduke32/build/src/build.c b/polymer/eduke32/build/src/build.c index 2d101620e..a134b0f02 100644 --- a/polymer/eduke32/build/src/build.c +++ b/polymer/eduke32/build/src/build.c @@ -26,24 +26,6 @@ static int32_t crctable[256]; static char kensig[64]; extern const char *ExtGetVer(void); -extern int32_t ExtInit(void); -extern int32_t ExtPreInit(int32_t argc,const char **argv); -extern void ExtUnInit(void); -extern void ExtPreCheckKeys(void); -extern void ExtAnalyzeSprites(void); -extern void ExtCheckKeys(void); -extern void ExtLoadMap(const char *mapname); -extern void ExtSaveMap(const char *mapname); -extern const char *ExtGetSectorCaption(int16_t sectnum); -extern const char *ExtGetWallCaption(int16_t wallnum); -extern const char *ExtGetSpriteCaption(int16_t spritenum); -extern void ExtShowSectorData(int16_t sectnum); -extern void ExtShowWallData(int16_t wallnum); -extern void ExtShowSpriteData(int16_t spritenum); -extern void ExtEditSectorData(int16_t sectnum); -extern void ExtEditWallData(int16_t wallnum); -extern void ExtEditSpriteData(int16_t spritenum); -extern const char *ExtGetSectorType(int32_t lotag); extern char spritecol2d[MAXTILES][2]; @@ -232,7 +214,8 @@ void fixspritesectors(void); static int32_t movewalls(int32_t start, int32_t offs); int32_t loadnames(const char *namesfile); void updatenumsprites(void); -static void getclosestpointonwall(int32_t x, int32_t y, int32_t dawall, int32_t *nx, int32_t *ny); +static void getclosestpointonwall(int32_t x, int32_t y, int32_t dawall, int32_t *nx, int32_t *ny, + int32_t maybe_screen_coord_p); static void initcrc(void); int32_t gettile(int32_t tilenum); @@ -357,6 +340,21 @@ static void M32_drawdebug(void) #endif #ifdef YAX_ENABLE +static void yax_tweakwalls(int16_t start, int16_t offs) +{ + int32_t i, nw; + for (i=0; i= start) + yax_setnextwall(i, YAX_CEILING, nw+offs); + + nw = yax_getnextwall(i, YAX_FLOOR); + if (nw >= start) + yax_setnextwall(i, YAX_FLOOR, nw+offs); + } +} + static void yax_resetbunchnums(void) { int32_t i; @@ -384,6 +382,12 @@ static void setslope(int32_t sectnum, int32_t cf, int16_t slope) // If false, it's a wall that you can freely move around, // attach points to, etc... static int32_t yax_islockedwall(int16_t sec, int16_t line) +#if 1 +{ + UNREFERENCED_PARAMETER(sec); + return !!(wall[line].cstat&YAX_NEXTWALLBITS); +} +#else { int16_t cb,fb, cbn,fbn; int16_t ns = wall[line].nextsector; @@ -397,26 +401,6 @@ static int32_t yax_islockedwall(int16_t sec, int16_t line) return (cb!=cbn || fb!=fbn); } - -#if 0 -static int32_t yax_nextwall(int16_t sec, int16_t line, int32_t downp) -{ - int16_t bunchnum = yax_getbunch(sec, downp); - int32_t i, j; - - if (bunchnum==-1) - return -1; - - for (i=headsectbunch[!downp][bunchnum]; i!=-1; i=nextsectbunch[!downp][i]) - { - for (j=sector[i].wallptr; j0: newnumwalls // <0: error -static int32_t trace_loop(int32_t j, uint8_t *visitedwall, int16_t *ignore_ret, int16_t *refsect_ret) +static int32_t trace_loop(int32_t j, uint8_t *visitedwall, int16_t *ignore_ret, int16_t *refsect_ret, + int16_t trace_loop_yaxcf) { int16_t refsect, ignore; int32_t k, n, refwall; +#ifndef YAX_ENABLE + UNREFERENCED_PARAMETER(trace_loop_yaxcf); +#endif + if (wall[j].nextwall>=0 || (visitedwall[j>>3]&(1<<(j&7)))) return 0; @@ -1978,6 +1967,10 @@ static int32_t trace_loop(int32_t j, uint8_t *visitedwall, int16_t *ignore_ret, Bmemcpy(&wall[k], &wall[j], sizeof(walltype)); wall[k].point2 = k+1; wall[k].nextsector = wall[k].nextwall = wall[k].extra = -1; +#ifdef YAX_ENABLE + if (trace_loop_yaxcf >= 0) + yax_setnextwall(k, trace_loop_yaxcf, j); +#endif k++; } @@ -2079,7 +2072,8 @@ static int32_t compare_wall_coords(const void *w1, const void *w2) void overheadeditor(void) { - char buffer[80], *dabuffer, ch; + char buffer[80], ch; + const char *dabuffer; int32_t i, j, k, m=0, mousxplc, mousyplc, firstx=0, firsty=0, oposz, col; int32_t tempint, tempint1, tempint2; int32_t startwall=0, endwall, dax, day, x1, y1, x2, y2, x3, y3, x4, y4; @@ -2276,7 +2270,7 @@ void overheadeditor(void) { int16_t secshort = i; - dabuffer = (char *)ExtGetSectorCaption(i); + dabuffer = ExtGetSectorCaption(i); if (dabuffer[0] == 0) continue; @@ -2299,24 +2293,28 @@ void overheadeditor(void) } i = numwalls-1; + j = numsectors-1; if (newnumwalls >= 0) i = newnumwalls-1; for (wal=&wall[i]; i>=0; i--,wal--) { + if (sector[j].wallptr > i) + j--; + if (zoom < 768 && !(wal->cstat & (1<<14))) continue; //Get average point of wall - dax = (wal->x+wall[wal->point2].x)>>1; - day = (wal->y+wall[wal->point2].y)>>1; - if ((dax > x3) && (dax < x4) && (day > y3) && (day < y4)) +// if ((dax > x3) && (dax < x4) && (day > y3) && (day < y4)) { - dabuffer = (char *)ExtGetWallCaption(i); + dabuffer = ExtGetWallCaption(i); if (dabuffer[0] == 0) continue; + dax = (wal->x+wall[wal->point2].x)>>1; + day = (wal->y+wall[wal->point2].y)>>1; drawsmallabel(dabuffer, editorcolors[0], editorcolors[31], - dax, day, getflorzofslope(sectorofwall(i), dax,day)); + dax, day, getflorzofslope(j, dax,day)); } } @@ -2334,7 +2332,7 @@ void overheadeditor(void) if (sprite[i].statnum < MAXSTATUS) { - dabuffer = (char *)ExtGetSpriteCaption(i); + dabuffer = ExtGetSpriteCaption(i); if (dabuffer[0] != 0) { int32_t blocking = (sprite[i].cstat&1); @@ -2446,14 +2444,23 @@ void overheadeditor(void) drawline16base(searchx,searchy, +2,+1, +9,+1, col); ////// Draw the white pixel closest to mouse cursor on linehighlight - if (linehighlight>=0 && !m32_sideview) + if (linehighlight>=0) { - getclosestpointonwall(mousxplc,mousyplc, linehighlight, &dax,&day); - x2 = mulscale14(dax-pos.x,zoom); - y2 = mulscale14(day-pos.y,zoom); + char col = wall[linehighlight].nextsector >= 0 ? editorcolors[15] : editorcolors[5]; - drawline16base(halfxdim16+x2,midydim16+y2, 0,0, 0,0, - wall[linehighlight].nextsector >= 0 ? editorcolors[15] : editorcolors[5]); + if (m32_sideview) + { + getclosestpointonwall(searchx,searchy, linehighlight, &dax,&day, 1); + drawline16base(dax,day, 0,0, 0,0, col); + } + else + { + getclosestpointonwall(mousxplc,mousyplc, linehighlight, &dax,&day, 0); + x2 = mulscale14(dax-pos.x,zoom); + y2 = mulscale14(day-pos.y,zoom); + + drawline16base(halfxdim16+x2,midydim16+y2, 0,0, 0,0, col); + } } enddrawing(); //}}} @@ -2887,7 +2894,7 @@ void overheadeditor(void) for (i=0; i= begwalltomove) wall[m].nextwall += n; } +#ifdef YAX_ENABLE + yax_tweakwalls(begwalltomove, n); +#endif for (m=refsect+1; m= suckwall) wall[i].point2 += j; } +#ifdef YAX_ENABLE + yax_tweakwalls(suckwall, j); +#endif Bmemmove(&wall[suckwall+j], &wall[suckwall], (newnumwalls-suckwall)*sizeof(walltype)); Bmemmove(&wall[suckwall], &wall[newnumwalls], j*sizeof(walltype)); @@ -4962,12 +4992,32 @@ end_space_handling: } else { - getclosestpointonwall(mousxplc,mousyplc, linehighlight, &dax,&day); - adjustmark(&dax,&day, newnumwalls); - + getclosestpointonwall(m32_sideview?searchx:mousxplc, m32_sideview?searchy:mousyplc, + linehighlight, &dax,&day, 1); i = linehighlight; + if (m32_sideview) + { + int32_t y_p, d, dx, dy, frac; + + dx = dax - m32_wallscreenxy[i][0]; + dy = day - m32_wallscreenxy[i][1]; + d = max(dx, dy); + y_p = (dy>dx); + + if (d==0) + goto point_not_inserted; + + frac = divscale24(d, m32_wallscreenxy[wall[i].point2][y_p]-m32_wallscreenxy[i][y_p]); + dax = POINT2(i).x - wall[i].x; + day = POINT2(i).y - wall[i].y; + dax = wall[i].x + mulscale24(dax,frac); + day = wall[i].y + mulscale24(day,frac); + } + + adjustmark(&dax,&day, newnumwalls); if ((wall[i].x == dax && wall[i].y == day) || (POINT2(i).x == dax && POINT2(i).y == day)) { +point_not_inserted: printmessage16("Point not inserted."); } else @@ -5572,6 +5622,7 @@ void getpoint(int32_t searchxe, int32_t searchye, int32_t *x, int32_t *y) static int32_t getlinehighlight(int32_t xplc, int32_t yplc, int32_t line) { int32_t i, dst, dist, closest, x1, y1, x2, y2, nx, ny; + int32_t daxplc, dayplc; if (numwalls == 0) return -1; @@ -5583,11 +5634,23 @@ static int32_t getlinehighlight(int32_t xplc, int32_t yplc, int32_t line) return -1; dist = 1024; + if (m32_sideview) + { + daxplc = searchx; + dayplc = searchy; + dist = mulscale14(dist, zoom); + } + else + { + daxplc = xplc; + dayplc = yplc; + } + closest = -1; for (i=0; i= 0) + if (dmulscale32(daxplc-x1,y2-y1,-(x2-x1),dayplc-y1) >= 0) closest = wall[closest].nextwall; } @@ -5970,6 +6033,9 @@ static int32_t movewalls(int32_t start, int32_t offs) if (wall[i].nextwall >= start) wall[i].nextwall += offs; if (wall[i].point2 >= start) wall[i].point2 += offs; } +#ifdef YAX_ENABLE + yax_tweakwalls(start, offs); +#endif return(0); } @@ -7258,7 +7324,8 @@ void showwalldata(int16_t wallnum, int16_t small) if (small) { - _printmessage16("^10Wall %d %s ^O(F8 to edit)", wallnum, ExtGetWallCaption(wallnum)); + _printmessage16("^10Wall %d %s ^O(F8 to edit)", wallnum, + ExtGetWallCaption(wallnum)); return; } @@ -7440,21 +7507,35 @@ void printmessage256(int32_t x, int32_t y, const char *name) } //Find closest point (*dax, *day) on wall (dawall) to (x, y) -static void getclosestpointonwall(int32_t x, int32_t y, int32_t dawall, int32_t *nx, int32_t *ny) +static void getclosestpointonwall(int32_t x, int32_t y, int32_t dawall, int32_t *nx, int32_t *ny, + int32_t maybe_screen_coord_p) { - walltype *wal; - int64_t i, j, dx, dy; + int64_t i, j, wx,wy, wx2,wy2, dx, dy; - wal = &wall[dawall]; - dx = wall[wal->point2].x - wal->x; - dy = wall[wal->point2].y - wal->y; - i = dx*(x-wal->x) + dy*(y-wal->y); - if (i <= 0) { *nx = wal->x; *ny = wal->y; return; } - j = dx*dx+dy*dy; - if (i >= j) { *nx = wal->x+dx; *ny = wal->y+dy; return; } + if (m32_sideview && maybe_screen_coord_p) + { + wx = m32_wallscreenxy[dawall][0]; + wy = m32_wallscreenxy[dawall][1]; + wx2 = m32_wallscreenxy[wall[dawall].point2][0]; + wy2 = m32_wallscreenxy[wall[dawall].point2][1]; + } + else + { + wx = wall[dawall].x; + wy = wall[dawall].y; + wx2 = POINT2(dawall).x; + wy2 = POINT2(dawall).y; + } + + dx = wx2 - wx; + dy = wy2 - wy; + i = dx*(x-wx) + dy*(y-wy); + if (i <= 0) { *nx = wx; *ny = wy; return; } + j = dx*dx + dy*dy; + if (i >= j) { *nx = wx2; *ny = wy2; return; } i=((i<<15)/j)<<15; - *nx = wal->x + ((dx*i)>>30); - *ny = wal->y + ((dy*i)>>30); + *nx = wx + ((dx*i)>>30); + *ny = wy + ((dy*i)>>30); } static void initcrc(void) diff --git a/polymer/eduke32/build/src/engine.c b/polymer/eduke32/build/src/engine.c index 9361272a7..36db60e00 100644 --- a/polymer/eduke32/build/src/engine.c +++ b/polymer/eduke32/build/src/engine.c @@ -192,8 +192,33 @@ int16_t editstatus = 0; // game-time YAX data structures static int16_t yax_bunchnum[MAXSECTORS][2]; +static int16_t yax_nextwall[MAXWALLS][2]; + +static int32_t yax_islockededge(/*int16_t sec,*/ int16_t line, int16_t cf) +#if 1 +{ +// UNREFERENCED_PARAMETER(sec); + return !!(wall[line].cstat&(YAX_NEXTWALLBIT(cf))); +} +#else +{ + int16_t bunchnum, nextbunch; + int16_t ns = wall[line].nextsector; + + bunchnum = yax_getbunch(sec, cf); + + if (ns < 0) + return (bunchnum >= 0); + + nextbunch = yax_getbunch(ns, cf); + + return (bunchnum != nextbunch); +} +#endif #define YAX_BUNCHNUM(Sect, Cf) (*(int16_t *)(§or[Sect].ceilingxpanning + 6*Cf)) + +//// bunch getters/setters int16_t yax_getbunch(int16_t i, int16_t cf) { if (editstatus==0) @@ -214,7 +239,10 @@ void yax_getbunches(int16_t i, int16_t *cb, int16_t *fb) void yax_setbunch(int16_t i, int16_t cf, int16_t bunchnum) { if (editstatus==0) + { yax_bunchnum[i][cf] = bunchnum; + return; + } if (bunchnum<0) { @@ -233,9 +261,38 @@ void yax_setbunches(int16_t i, int16_t cb, int16_t fb) yax_setbunch(i, YAX_FLOOR, fb); } +//// nextwall getters/setters +int16_t yax_getnextwall(int16_t wal, int16_t cf) +{ + if (editstatus==0) + return yax_nextwall[wal][cf]; + + if (!yax_islockededge(wal, cf)) + return -1; + + return YAX_NEXTWALL(wal, cf); +} + +// unchecked! +void yax_setnextwall(int16_t wal, int16_t cf, int16_t thenextwall) +{ + if (editstatus==0) + { + yax_nextwall[wal][cf] = thenextwall; + return; + } + + if (thenextwall >= 0) + wall[wal].cstat |= YAX_NEXTWALLBIT(cf); + else + wall[wal].cstat &= ~YAX_NEXTWALLBIT(cf); + YAX_NEXTWALL(wal, cf) = thenextwall; +} + +//// in-struct --> array transfer; list construction void yax_update(int32_t onlyreset) { - int32_t i, oeditstatus=editstatus; + int32_t i, j, oeditstatus=editstatus; int16_t cb, fb, tmpsect; numyaxbunches = 0; @@ -247,6 +304,8 @@ void yax_update(int32_t onlyreset) } for (i=0; i= 0) { + for (j=sector[i].wallptr; j= 0) { + for (j=sector[i].wallptr; j= 0) wall[wall[i].nextwall].nextwall = i; +#ifdef YAX_ENABLE + { + int16_t cb, fb; + yax_getbunches(sectnum, &cb, &fb); + + if (cb>=0 || fb>=0) + { + for (i=startwall; i= 0) + yax_setnextwall(j, YAX_FLOOR, i); + + j = yax_getnextwall(i, YAX_FLOOR); + if (j >= 0) + yax_setnextwall(j, YAX_CEILING, i); + } + } + } +#endif Bfree(tmpwall); } @@ -12854,6 +12946,9 @@ static void drawscreen_drawwall(int32_t i, int32_t posxe, int32_t posye, int32_t // if (i < wall[j].point2) drawline16mid(x1,y1, x1,y1+getscreenvdisp(fzn-fz,zoome), editorcolors[col]); } + + m32_wallscreenxy[i][0] = halfxdim16+x1; + m32_wallscreenxy[i][1] = midydim16+y1; } if (wal->cstat&64) // if hitscan bit set @@ -13117,18 +13212,6 @@ void draw2dscreen(const vec3_t *pos, int16_t cursectnum, int16_t ange, int32_t z if (qsetmode == 200) return; setup_sideview_sincos(); - if (m32_sideview && !m32_wallsprite) - { - m32_wallsprite = Bmalloc((MAXWALLS+MAXSPRITES)*sizeof(int16_t)); - m32_sidedist = Bmalloc((MAXWALLS+MAXSPRITES)*sizeof(m32_sidedist[0])); - if (!m32_wallsprite || !m32_sidedist) - { - if (m32_wallsprite) Bfree(m32_wallsprite); - if (m32_sidedist) { Bfree(m32_sidedist); m32_sidedist=NULL; } - initprintf("out of memory!"); - m32_sideview = 0; - } - } begindrawing(); //{{{ diff --git a/polymer/eduke32/source/astub.c b/polymer/eduke32/source/astub.c index 38fa7b682..b7b9bd8a5 100644 --- a/polymer/eduke32/source/astub.c +++ b/polymer/eduke32/source/astub.c @@ -795,81 +795,36 @@ static int32_t tileInGroup(int32_t group, int32_t tilenum) const char *ExtGetSectorType(int32_t lotag) { - static char tempbuf[64]; - - Bmemset(tempbuf,0,sizeof(tempbuf)); switch (lotag) { - case 1: - Bsprintf(tempbuf,"WATER (SE 7)"); - break; - case 2: - Bsprintf(tempbuf,"UNDERWATER (SE 7)"); - break; - case 9: - Bsprintf(tempbuf,"STAR TREK DOORS"); - break; - case 15: - Bsprintf(tempbuf,"ELEVATOR TRANSPORT (SE 17)"); - break; - case 16: - Bsprintf(tempbuf,"ELEVATOR PLATFORM DOWN"); - break; - case 17: - Bsprintf(tempbuf,"ELEVATOR PLATFORM UP"); - break; - case 18: - Bsprintf(tempbuf,"ELEVATOR DOWN"); - break; - case 19: - Bsprintf(tempbuf,"ELEVATOR UP"); - break; - case 20: - Bsprintf(tempbuf,"CEILING DOOR"); - break; - case 21: - Bsprintf(tempbuf,"FLOOR DOOR"); - break; - case 22: - Bsprintf(tempbuf,"SPLIT DOOR"); - break; - case 23: - Bsprintf(tempbuf,"SWING DOOR (SE 11)"); - break; - case 25: - Bsprintf(tempbuf,"SLIDE DOOR (SE 15)"); - break; - case 26: - Bsprintf(tempbuf,"SPLIT STAR TREK DOOR"); - break; - case 27: - Bsprintf(tempbuf,"BRIDGE (SE 20)"); - break; - case 28: - Bsprintf(tempbuf,"DROP FLOOR (SE 21)"); - break; - case 29: - Bsprintf(tempbuf,"TEETH DOOR (SE 22)"); - break; - case 30: - Bsprintf(tempbuf,"ROTATE RISE BRIDGE"); - break; - case 31: - Bsprintf(tempbuf,"2 WAY TRAIN (SE=30)"); - break; - case 32767: - Bsprintf(tempbuf,"SECRET ROOM"); - break; - case -1: - Bsprintf(tempbuf,"END OF LEVEL"); - break; - default : + case 1: return "WATER (SE 7)"; + case 2: return "UNDERWATER (SE 7)"; + case 9: return "STAR TREK DOORS"; + case 15: return "ELEVATOR TRANSPORT (SE 17)"; + case 16: return "ELEVATOR PLATFORM DOWN"; + case 17: return "ELEVATOR PLATFORM UP"; + case 18: return "ELEVATOR DOWN"; + case 19: return "ELEVATOR UP"; + case 20: return "CEILING DOOR"; + case 21: return "FLOOR DOOR"; + case 22: return "SPLIT DOOR"; + case 23: return "SWING DOOR (SE 11)"; + case 25: return "SLIDE DOOR (SE 15)"; + case 26: return "SPLIT STAR TREK DOOR"; + case 27: return "BRIDGE (SE 20)"; + case 28: return "DROP FLOOR (SE 21)"; + 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 -1: return "END OF LEVEL"; + default: if (lotag > 10000 && lotag < 32767) - Bsprintf(tempbuf,"1 TIME SOUND"); - // else Bsprintf(tempbuf,"%hu",lotag); - break; + return "1 TIME SOUND"; +// else Bsprintf(tempbuf,"%hu",lotag); } - return(tempbuf); + + return ""; } const char *ExtGetSectorCaption(int16_t sectnum) @@ -916,7 +871,19 @@ const char *ExtGetWallCaption(int16_t wallnum) if ((wall[wallnum].lotag|wall[wallnum].hitag) == 0) tempbuf[0] = 0; else + { +#ifdef YAX_ENABLE + if (yax_getnextwall(wallnum, YAX_CEILING) >= 0) // ceiling nextwall: lotag + { + if (wall[wallnum].hitag == 0) + tempbuf[0] = 0; + else + Bsprintf(tempbuf, "%hu,*", wall[wallnum].hitag); + } + else +#endif Bsprintf(tempbuf, "%hu,%hu", wall[wallnum].hitag, wall[wallnum].lotag); + } return(tempbuf); } //end @@ -1104,8 +1071,7 @@ void ExtShowSectorData(int16_t sectnum) //F5 for (i=0; i