mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-25 03:00:46 +00:00
Mapster32: allow setting first walls of TROR sectors independently.
In 3D mode, Alt+F now only attempts to set the first wall of the aimed at wall, not collecting upper/lower neighbors. For this, press Shift+Alt+F. In 2D mode, they are always collected. git-svn-id: https://svn.eduke32.com/eduke32@3825 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
4457a5fbca
commit
593b82692e
3 changed files with 62 additions and 33 deletions
|
@ -151,7 +151,7 @@ extern void fixxrepeat(int16_t wallnum, uint32_t lenrepquot);
|
||||||
extern void AlignWallPoint2(int32_t w0);
|
extern void AlignWallPoint2(int32_t w0);
|
||||||
extern int32_t AutoAlignWalls(int32_t w0, uint32_t flags, int32_t nrecurs);
|
extern int32_t AutoAlignWalls(int32_t w0, uint32_t flags, int32_t nrecurs);
|
||||||
|
|
||||||
extern void SetFirstWall(int32_t sectnum, int32_t wallnum);
|
extern void SetFirstWall(int32_t sectnum, int32_t wallnum, int32_t alsoynw);
|
||||||
extern int32_t fixspritesectors(void);
|
extern int32_t fixspritesectors(void);
|
||||||
extern void clearkeys(void);
|
extern void clearkeys(void);
|
||||||
|
|
||||||
|
|
|
@ -2588,45 +2588,72 @@ static void sort_walls_geometrically(int16_t *wallist, int32_t nwalls)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void SetFirstWall(int32_t sectnum, int32_t wallnum)
|
void SetFirstWall(int32_t sectnum, int32_t wallnum, int32_t alsoynw)
|
||||||
{
|
{
|
||||||
#ifdef YAX_ENABLE
|
#ifdef YAX_ENABLE
|
||||||
int32_t i, j, k, startwall, endwall;
|
int32_t i, j, k=0;
|
||||||
int16_t cf, bunchnum, tempsect, tempwall;
|
#endif
|
||||||
|
const sectortype *sec = §or[sectnum];
|
||||||
|
|
||||||
for (i=0; i<numwalls; i++)
|
if (sec->wallptr == wallnum)
|
||||||
wall[i].cstat &= ~(1<<14);
|
|
||||||
|
|
||||||
for (cf=0; cf<2; cf++)
|
|
||||||
{
|
{
|
||||||
tempsect = sectnum;
|
message("Wall %d already first wall of sector %d", wallnum, sectnum);
|
||||||
tempwall = wallnum;
|
return;
|
||||||
|
|
||||||
while ((bunchnum = yax_getbunch(tempsect, cf)) >= 0 &&
|
|
||||||
(tempsect=yax_is121(bunchnum, cf)) >= 0)
|
|
||||||
{
|
|
||||||
tempwall = yax_getnextwall(tempwall, cf);
|
|
||||||
if (tempwall < 0)
|
|
||||||
break; // corrupt!
|
|
||||||
wall[tempwall].cstat |= (1<<14);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
k = 0;
|
#ifdef YAX_ENABLE
|
||||||
for (i=0; i<numsectors; i++)
|
if (alsoynw)
|
||||||
for (WALLS_OF_SECTOR(i, j))
|
{
|
||||||
|
// Also consider upper/lower TROR neighbor walls.
|
||||||
|
int32_t startwall, endwall;
|
||||||
|
int16_t cf;
|
||||||
|
|
||||||
|
for (i=0; i<numwalls; i++)
|
||||||
|
wall[i].cstat &= ~(1<<14);
|
||||||
|
|
||||||
|
for (cf=0; cf<2; cf++)
|
||||||
{
|
{
|
||||||
if (wall[j].cstat & (1<<14))
|
int16_t bunchnum;
|
||||||
|
int32_t tempsect=sectnum, tempwall=wallnum;
|
||||||
|
|
||||||
|
while ((bunchnum = yax_getbunch(tempsect, cf)) >= 0 &&
|
||||||
|
(tempsect=yax_is121(bunchnum, cf)) >= 0)
|
||||||
{
|
{
|
||||||
setfirstwall(i, j);
|
tempwall = yax_getnextwall(tempwall, cf);
|
||||||
k++;
|
if (tempwall < 0)
|
||||||
break;
|
break; // corrupt!
|
||||||
|
wall[tempwall].cstat |= (1<<14);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (i=0; i<numsectors; i++)
|
||||||
|
for (WALLS_OF_SECTOR(i, j))
|
||||||
|
{
|
||||||
|
if (wall[j].cstat & (1<<14))
|
||||||
|
{
|
||||||
|
setfirstwall(i, j);
|
||||||
|
k++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Only consider aimed at wall <wallnum>.
|
||||||
|
int16_t cb = yax_getbunch(sectnum, YAX_CEILING);
|
||||||
|
int16_t fb = yax_getbunch(sectnum, YAX_FLOOR);
|
||||||
|
|
||||||
|
if ((cb>=0 && (sec->ceilingstat&2)) || (fb >= 0 && (sec->floorstat&2)))
|
||||||
|
{
|
||||||
|
message("Extended ceilings/floors must not be sloped to set first wall");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (k > 0)
|
if (k > 0)
|
||||||
message("Set first walls (sector[].wallptr) for %d sectors", k+1);
|
message("Set first walls (sector[].wallptr) for %d sectors", k+1);
|
||||||
else
|
|
||||||
|
if (k == 0)
|
||||||
#endif
|
#endif
|
||||||
message("This wall now sector %d's first wall (sector[].wallptr)", sectnum);
|
message("This wall now sector %d's first wall (sector[].wallptr)", sectnum);
|
||||||
|
|
||||||
|
@ -3851,7 +3878,7 @@ void overheadeditor(void)
|
||||||
{
|
{
|
||||||
linehighlight = getlinehighlight(mousxplc, mousyplc, linehighlight);
|
linehighlight = getlinehighlight(mousxplc, mousyplc, linehighlight);
|
||||||
if (linehighlight >= 0)
|
if (linehighlight >= 0)
|
||||||
SetFirstWall(sectorofwall(linehighlight), linehighlight);
|
SetFirstWall(sectorofwall(linehighlight), linehighlight, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5692,7 +5692,7 @@ static void Keys3d(void)
|
||||||
if (eitherALT) //ALT-F (relative alignmment flip)
|
if (eitherALT) //ALT-F (relative alignmment flip)
|
||||||
{
|
{
|
||||||
if (!AIMING_AT_SPRITE && ASSERT_AIMING)
|
if (!AIMING_AT_SPRITE && ASSERT_AIMING)
|
||||||
SetFirstWall(searchsector, searchwall);
|
SetFirstWall(searchsector, searchwall, eitherSHIFT);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -7373,16 +7373,18 @@ paste_ceiling_or_floor:
|
||||||
else if (AIMING_AT_CEILING_OR_FLOOR)
|
else if (AIMING_AT_CEILING_OR_FLOOR)
|
||||||
{
|
{
|
||||||
#ifdef YAX_ENABLE
|
#ifdef YAX_ENABLE
|
||||||
j = yax_getbunch(searchsector, AIMING_AT_FLOOR);
|
int16_t bunchnum = yax_getbunch(searchsector, AIMING_AT_FLOOR);
|
||||||
if (j < 0)
|
# if !defined NEW_MAP_FORMAY
|
||||||
|
if (bunchnum < 0)
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
AIMED_CEILINGFLOOR(xpanning) = 0;
|
AIMED_CEILINGFLOOR(xpanning) = 0;
|
||||||
AIMED_CEILINGFLOOR(ypanning) = 0;
|
AIMED_CEILINGFLOOR(ypanning) = 0;
|
||||||
AIMED_CEILINGFLOOR(stat) &= ~2;
|
AIMED_CEILINGFLOOR(stat) &= ~2;
|
||||||
AIMED_CEILINGFLOOR(heinum) = 0;
|
AIMED_CEILINGFLOOR(heinum) = 0;
|
||||||
#ifdef YAX_ENABLE
|
#ifdef YAX_ENABLE
|
||||||
if (j >= 0)
|
if (bunchnum >= 0)
|
||||||
for (SECTORS_OF_BUNCH(j,!AIMING_AT_FLOOR, i))
|
for (SECTORS_OF_BUNCH(bunchnum,!AIMING_AT_FLOOR, i))
|
||||||
{
|
{
|
||||||
SECTORFLD(i,stat, !AIMING_AT_FLOOR) &= ~2;
|
SECTORFLD(i,stat, !AIMING_AT_FLOOR) &= ~2;
|
||||||
SECTORFLD(i,heinum, !AIMING_AT_FLOOR) = 0;
|
SECTORFLD(i,heinum, !AIMING_AT_FLOOR) = 0;
|
||||||
|
|
Loading…
Reference in a new issue