Set union ['] and difference [;] for sector selection in Mapster32; probably fix for crash on clipshape-init; replace tabs in doc/build*.txt with three spaces.

git-svn-id: https://svn.eduke32.com/eduke32@1728 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
helixhorned 2010-11-20 16:47:18 +00:00
parent a633e8baa6
commit 07ecd3eede
7 changed files with 5653 additions and 5584 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -122,6 +122,7 @@ extern char lastpm16buf[156];
void getpoint(int32_t searchxe, int32_t searchye, int32_t *x, int32_t *y); void getpoint(int32_t searchxe, int32_t searchye, int32_t *x, int32_t *y);
int32_t getpointhighlight(int32_t xplc, int32_t yplc, int32_t point); int32_t getpointhighlight(int32_t xplc, int32_t yplc, int32_t point);
void update_highlight(); void update_highlight();
void update_highlightsector();
#ifdef _WIN32 #ifdef _WIN32
#define DEFAULT_GAME_EXEC "eduke32.exe" #define DEFAULT_GAME_EXEC "eduke32.exe"

View file

@ -153,6 +153,7 @@ static int32_t fillist[640];
static int32_t mousx, mousy; static int32_t mousx, mousy;
int16_t prefixtiles[16] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int16_t prefixtiles[16] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
uint8_t hlsectorbitmap[MAXSECTORS>>3]; // show2dsector is already taken...
/* /*
static char scantoasc[128] = static char scantoasc[128] =
@ -445,9 +446,7 @@ int32_t app_main(int32_t argc, const char **argv)
} }
k = clipmapinfo_load("_clipshape0.map"); k = clipmapinfo_load("_clipshape0.map");
if (k==0) if (k>0)
initprintf("Loaded sprite clipping map.\n");
else if (k>0)
initprintf("There was an error loading the sprite clipping map (status %d).\n", k); initprintf("There was an error loading the sprite clipping map (status %d).\n", k);
for (i=0; i<MAXSECTORS; i++) sector[i].extra = -1; for (i=0; i<MAXSECTORS; i++) sector[i].extra = -1;
@ -1315,6 +1314,7 @@ static void duplicate_selected_sectors()
newnumwalls += sector[highlightsector[i]].wallnum; newnumwalls += sector[highlightsector[i]].wallnum;
} }
Bmemset(hlsectorbitmap, 0, sizeof(hlsectorbitmap));
for (i=0; i<highlightsectorcnt; i++) for (i=0; i<highlightsectorcnt; i++)
{ {
// first, make red lines of old selected sectors, effectively // first, make red lines of old selected sectors, effectively
@ -1330,12 +1330,15 @@ static void duplicate_selected_sectors()
// Then, highlight the ones just copied. // Then, highlight the ones just copied.
// These will have all walls whited out. // These will have all walls whited out.
highlightsector[i] = numsectors+i; j = numsectors + i;
hlsectorbitmap[j>>3] |= (1<<(j&7));
} }
numsectors = newnumsectors; numsectors = newnumsectors;
numwalls = newnumwalls; numwalls = newnumwalls;
update_highlightsector(); // must be after numsectors = newnumsectors
newnumwalls = -1; newnumwalls = -1;
newnumsectors = -1; newnumsectors = -1;
@ -1396,6 +1399,19 @@ void update_highlight()
highlightcnt = -1; highlightcnt = -1;
} }
void update_highlightsector()
{
int32_t i;
highlightsectorcnt = 0;
for (i=0; i<numsectors; i++)
if (hlsectorbitmap[i>>3]&(1<<(i&7)))
highlightsector[highlightsectorcnt++] = i;
if (highlightsectorcnt==0)
highlightsectorcnt = -1;
}
void overheadeditor(void) void overheadeditor(void)
{ {
char buffer[80], *dabuffer, ch; char buffer[80], *dabuffer, ch;
@ -1448,12 +1464,12 @@ void overheadeditor(void)
enddrawing(); //}}} enddrawing(); //}}}
pag = 0; pag = 0;
highlightcnt = -1;
cursectorhighlight = -1; cursectorhighlight = -1;
lastpm16time = -1; lastpm16time = -1;
ovh_whiteoutgrab(); ovh_whiteoutgrab();
highlightcnt = -1;
Bmemset(show2dwall, 0, sizeof(show2dwall)); //Clear all highlights Bmemset(show2dwall, 0, sizeof(show2dwall)); //Clear all highlights
Bmemset(show2dsprite, 0, sizeof(show2dsprite)); Bmemset(show2dsprite, 0, sizeof(show2dsprite));
@ -1777,9 +1793,10 @@ void overheadeditor(void)
numwalls = tempint; numwalls = tempint;
if (highlightsectorcnt > 0) if (highlightsectorcnt >= 0)
for (i=0; i<highlightsectorcnt; i++) for (i=0; i<numsectors; i++)
fillsector(highlightsector[i],2); if (hlsectorbitmap[i>>3]&(1<<(i&7)))
fillsector(i,2);
if (keystatus[0x2a]) // FIXME if (keystatus[0x2a]) // FIXME
{ {
@ -1809,7 +1826,7 @@ void overheadeditor(void)
if (joinsector[0] >= 0) if (joinsector[0] >= 0)
col = editorcolors[11]; col = editorcolors[11];
if (keystatus[0x36] && !eitherCTRL) // RSHIFT if ((keystatus[0x36] || keystatus[0xb8]) && !eitherCTRL) // RSHIFT || RALT
{ {
if (keystatus[0x27] || keystatus[0x28]) // ' and ; if (keystatus[0x27] || keystatus[0x28]) // ' and ;
{ {
@ -2486,6 +2503,8 @@ void overheadeditor(void)
{ {
if (highlightsectorcnt == 0) if (highlightsectorcnt == 0)
{ {
int32_t add=keystatus[0x28], sub=(!add && keystatus[0x27]), setop=(add||sub);
getpoint(highlightx1,highlighty1, &highlightx1,&highlighty1); getpoint(highlightx1,highlighty1, &highlightx1,&highlighty1);
getpoint(highlightx2,highlighty2, &highlightx2,&highlighty2); getpoint(highlightx2,highlighty2, &highlightx2,&highlighty2);
@ -2494,6 +2513,9 @@ void overheadeditor(void)
if (highlighty1 > highlighty2) if (highlighty1 > highlighty2)
swaplong(&highlighty1, &highlighty2); swaplong(&highlighty1, &highlighty2);
if (!setop)
Bmemset(hlsectorbitmap, 0, sizeof(hlsectorbitmap));
for (i=0; i<numsectors; i++) for (i=0; i<numsectors; i++)
{ {
startwall = sector[i].wallptr; startwall = sector[i].wallptr;
@ -2508,11 +2530,23 @@ void overheadeditor(void)
if (bad == 1) break; if (bad == 1) break;
} }
if (bad == 0) if (bad == 0)
highlightsector[highlightsectorcnt++] = i; {
if (sub)
{
hlsectorbitmap[i>>3] &= ~(1<<(i&7));
for (j=sector[i].wallptr; j<sector[i].wallptr+sector[i].wallnum; j++)
{
if (wall[j].nextwall >= 0)
checksectorpointer(wall[j].nextwall,wall[j].nextsector);
checksectorpointer((int16_t)j, i);
}
}
else
hlsectorbitmap[i>>3] |= (1<<(i&7));
}
} }
if (highlightsectorcnt <= 0)
highlightsectorcnt = -1;
update_highlightsector();
ovh_whiteoutgrab(); ovh_whiteoutgrab();
} }
} }
@ -3997,6 +4031,7 @@ SKIP:
} }
newnumwalls = -1; newnumwalls = -1;
Bmemset(hlsectorbitmap, 0, sizeof(hlsectorbitmap));
highlightsectorcnt = -1; highlightsectorcnt = -1;
Bmemset(show2dwall, 0, sizeof(show2dwall)); Bmemset(show2dwall, 0, sizeof(show2dwall));
@ -4009,6 +4044,7 @@ SKIP:
if (k == 0) if (k == 0)
{ {
deletesector((int16_t)i); deletesector((int16_t)i);
Bmemset(hlsectorbitmap, 0, sizeof(hlsectorbitmap));
highlightsectorcnt = -1; highlightsectorcnt = -1;
Bmemset(show2dwall, 0, sizeof(show2dwall)); Bmemset(show2dwall, 0, sizeof(show2dwall));
@ -4149,6 +4185,9 @@ nextmap:
Bstrcpy(boardfilename, selectedboardfilename); Bstrcpy(boardfilename, selectedboardfilename);
highlightcnt = -1; highlightcnt = -1;
Bmemset(show2dwall, 0, sizeof(show2dwall)); //Clear all highlights
Bmemset(show2dsprite, 0, sizeof(show2dsprite));
sectorhighlightstat = -1; sectorhighlightstat = -1;
newnumwalls = -1; newnumwalls = -1;
joinsector[0] = -1; joinsector[0] = -1;
@ -4242,9 +4281,10 @@ CANCEL:
if (ch == 'Y' || ch == 'y') if (ch == 'Y' || ch == 'y')
{ {
Bmemset(hlsectorbitmap, 0, sizeof(hlsectorbitmap));
highlightsectorcnt = -1; highlightsectorcnt = -1;
highlightcnt = -1;
highlightcnt = -1;
//Clear all highlights //Clear all highlights
Bmemset(show2dwall, 0, sizeof(show2dwall)); Bmemset(show2dwall, 0, sizeof(show2dwall));
Bmemset(show2dsprite, 0, sizeof(show2dsprite)); Bmemset(show2dsprite, 0, sizeof(show2dsprite));
@ -4311,6 +4351,7 @@ CANCEL:
updatenumsprites(); updatenumsprites();
if ((numsectors+highlightsectorcnt > MAXSECTORS) || (numwalls+j > MAXWALLS) || (numsprites+k > MAXSPRITES)) if ((numsectors+highlightsectorcnt > MAXSECTORS) || (numwalls+j > MAXWALLS) || (numsprites+k > MAXSPRITES))
{ {
Bmemset(hlsectorbitmap, 0, sizeof(hlsectorbitmap));
highlightsectorcnt = -1; highlightsectorcnt = -1;
} }
else else
@ -4353,6 +4394,9 @@ CANCEL:
} }
highlightcnt = -1; highlightcnt = -1;
Bmemset(show2dwall, 0, sizeof(show2dwall)); //Clear all highlights
Bmemset(show2dsprite, 0, sizeof(show2dsprite));
sectorhighlightstat = -1; sectorhighlightstat = -1;
newnumwalls = -1; newnumwalls = -1;
joinsector[0] = -1; joinsector[0] = -1;
@ -4380,18 +4424,22 @@ CANCEL:
{ {
if ((numsectors+highlightsectorcnt > MAXSECTORS) || (sector[MAXSECTORS-highlightsectorcnt].wallptr < numwalls)) if ((numsectors+highlightsectorcnt > MAXSECTORS) || (sector[MAXSECTORS-highlightsectorcnt].wallptr < numwalls))
{ {
Bmemset(hlsectorbitmap, 0, sizeof(hlsectorbitmap));
highlightsectorcnt = -1; highlightsectorcnt = -1;
} }
else else
{ {
//Re-attach sectors&walls //Re-attach sectors&walls
Bmemset(hlsectorbitmap, 0, sizeof(hlsectorbitmap));
for (i=0; i<highlightsectorcnt; i++) for (i=0; i<highlightsectorcnt; i++)
{ {
copysector((int16_t)(MAXSECTORS-highlightsectorcnt+i),numsectors,numwalls,0); copysector((int16_t)(MAXSECTORS-highlightsectorcnt+i),numsectors,numwalls,0);
highlightsector[i] = numsectors; hlsectorbitmap[numsectors>>3] |= (1<<(numsectors&7));
numwalls += sector[numsectors].wallnum; numwalls += sector[numsectors].wallnum;
numsectors++; numsectors++;
} }
update_highlightsector();
//Re-attach sprites //Re-attach sprites
while (m < MAXSPRITES) while (m < MAXSPRITES)
{ {

View file

@ -264,14 +264,19 @@ static void clipmapinfo_init()
clipmapinfo.numsectors = clipmapinfo.numwalls = 0; clipmapinfo.numsectors = clipmapinfo.numwalls = 0;
clipmapinfo.sector=NULL; clipmapinfo.sector=NULL;
clipmapinfo.wall=NULL; clipmapinfo.wall=NULL;
numsectors = 0;
numwalls = 0;
} }
// loads the clip maps 0 through 9.
// this should be called before any real map is loaded.
int32_t clipmapinfo_load(char *filename) int32_t clipmapinfo_load(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]; 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;
@ -337,6 +342,14 @@ int32_t clipmapinfo_load(char *filename)
ournumsectors += numsectors; ournumsectors += numsectors;
ournumwalls += numwalls; ournumwalls += numwalls;
ournumsprites += numsprites; ournumsprites += numsprites;
if (lwcp != loadedwhich)
{
*lwcp++ = ',';
*lwcp++ = ' ';
}
*lwcp++ = fi;
*lwcp = 0;
} }
quickloadboard = 0; quickloadboard = 0;
@ -346,6 +359,7 @@ int32_t clipmapinfo_load(char *filename)
return -1; return -1;
} }
// shrink
loadsector = Brealloc(loadsector, ournumsectors*sizeof(sectortype)); loadsector = Brealloc(loadsector, ournumsectors*sizeof(sectortype));
loadwall = Brealloc(loadwall, ournumwalls*sizeof(walltype)); loadwall = Brealloc(loadwall, ournumwalls*sizeof(walltype));
@ -621,6 +635,12 @@ int32_t clipmapinfo_load(char *filename)
Bfree(loadsprite); loadsprite=NULL; Bfree(loadsprite); loadsprite=NULL;
Bfree(tempictoidx); tempictoidx=NULL; Bfree(tempictoidx); tempictoidx=NULL;
// don't let other code be distracted by the temporary map we constructed
numsectors = 0;
numwalls = 0;
initprintf("Loaded clip map%s %s.\n", lwcp==loadedwhich+1?"":"s", loadedwhich);
return 0; return 0;
} }
@ -7162,6 +7182,7 @@ int32_t loadboard(char *filename, char fromwhere, int32_t *daposx, int32_t *dapo
{ {
initprintf(OSD_ERROR "Map error: sprite #%d(%d,%d) with illegal picnum(%d). Map is corrupt!\n",i,sprite[i].x,sprite[i].y,sprite[i].picnum); initprintf(OSD_ERROR "Map error: sprite #%d(%d,%d) with illegal picnum(%d). Map is corrupt!\n",i,sprite[i].x,sprite[i].y,sprite[i].picnum);
dq[dnum++] = i; dq[dnum++] = i;
sprite[i].picnum = 0;
} }
} }
@ -9491,7 +9512,7 @@ int32_t lastwall(int16_t point)
////////// //////////
static int32_t clipsprite_try(spritetype *spr, int32_t xmin, int32_t ymin, int32_t xmax, int32_t ymax) static int32_t clipsprite_try(const spritetype *spr, int32_t xmin, int32_t ymin, int32_t xmax, int32_t ymax)
{ {
int32_t i,k,tempint1,tempint2; int32_t i,k,tempint1,tempint2;
@ -9969,7 +9990,8 @@ int32_t clipmove(vec3_t *vect, int16_t *sectnum,
do do
{ {
intx = goalx; inty = goaly; intx = goalx; inty = goaly;
if ((hitwall = raytrace(vect->x, vect->y, &intx, &inty)) >= 0) hitwall = raytrace(vect->x, vect->y, &intx, &inty);
if (hitwall >= 0)
{ {
lx = clipit[hitwall].x2-clipit[hitwall].x1; lx = clipit[hitwall].x2-clipit[hitwall].x1;
ly = clipit[hitwall].y2-clipit[hitwall].y1; ly = clipit[hitwall].y2-clipit[hitwall].y1;
@ -12148,7 +12170,7 @@ void draw2dscreen(int32_t posxe, int32_t posye, int16_t ange, int32_t zoome, int
if (totalclock & 16) if (totalclock & 16)
pointsize++; pointsize++;
} }
else if ((highlightcnt > 0) && (editstatus == 1)) else //if (highlightcnt > 0)
{ {
if (show2dwall[i>>3]&pow2char[i&7]) if (show2dwall[i>>3]&pow2char[i&7])
{ {
@ -12193,7 +12215,7 @@ void draw2dscreen(int32_t posxe, int32_t posye, int16_t ange, int32_t zoome, int
{ {
if (totalclock & 32) col += (2<<2); if (totalclock & 32) col += (2<<2);
} }
else if ((highlightcnt > 0) && (editstatus == 1)) else // if (highlightcnt > 0)
{ {
if (show2dsprite[j>>3]&pow2char[j&7]) if (show2dsprite[j>>3]&pow2char[j&7])
if (totalclock & 32) col += (2<<2); if (totalclock & 32) col += (2<<2);

View file

@ -9860,9 +9860,7 @@ CLEAN_DIRECTORY:
} }
i = clipmapinfo_load("_clipshape0.map"); i = clipmapinfo_load("_clipshape0.map");
if (i==0) if (i>0)
initprintf("Loaded sprite clipping map.\n");
else if (i>0)
initprintf("There was an error loading the sprite clipping map (status %d).\n", i); initprintf("There was an error loading the sprite clipping map (status %d).\n", i);
OSD_Exec("autoexec.cfg"); OSD_Exec("autoexec.cfg");