mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-15 17:01:51 +00:00
Introduce "twalltype" for temporary uses of walltype where using wall_tracker_hook() would be invalid. This is similar to "tspritetype" and fixes a bunch of problems in the editor that cropped up when changing the tracker sanity checks to an assert that only exists in debug builds (branching upon any write to a sprite, sector or wall had an unacceptable impact on performance).
git-svn-id: https://svn.eduke32.com/eduke32@4903 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
364cf15c4f
commit
107bb7a3fa
5 changed files with 43 additions and 34 deletions
|
@ -364,6 +364,17 @@ typedef struct
|
|||
Tracker(Wall, int16_t) extra;
|
||||
} walltypev7;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int32_t x, y;
|
||||
int16_t point2, nextwall, nextsector;
|
||||
uint16_t cstat;
|
||||
int16_t picnum, overpicnum;
|
||||
int8_t shade;
|
||||
uint8_t pal, xrepeat, yrepeat, xpanning, ypanning;
|
||||
uint16_t lotag, hitag;
|
||||
int16_t extra;
|
||||
} twalltype;
|
||||
|
||||
enum {
|
||||
SPR_XFLIP = 4,
|
||||
|
@ -1268,7 +1279,7 @@ int32_t sectorofwall_noquick(int16_t theline);
|
|||
int32_t loopnumofsector(int16_t sectnum, int16_t wallnum);
|
||||
void setslope(int32_t sectnum, int32_t cf, int16_t slope);
|
||||
|
||||
int32_t lineintersect(int32_t x1, int32_t y1, int32_t z1, int32_t x2, int32_t y2, int32_t z2, int32_t x3,
|
||||
int32_t lintersect(int32_t x1, int32_t y1, int32_t z1, int32_t x2, int32_t y2, int32_t z2, int32_t x3,
|
||||
int32_t y3, int32_t x4, int32_t y4, int32_t *intx, int32_t *inty, int32_t *intz);
|
||||
|
||||
int32_t rayintersect(int32_t x1, int32_t y1, int32_t z1, int32_t vx, int32_t vy, int32_t vz, int32_t x3,
|
||||
|
|
|
@ -192,8 +192,8 @@ typedef struct
|
|||
int16_t *ynextwall; // [numwalls][2]
|
||||
#endif
|
||||
sectortype *sector;
|
||||
walltype *wall;
|
||||
spritetype *sprite;
|
||||
twalltype *wall;
|
||||
tspritetype *sprite;
|
||||
} mapinfofull_t;
|
||||
|
||||
int32_t g_doScreenShot;
|
||||
|
@ -1605,7 +1605,7 @@ static int32_t backup_highlighted_map(mapinfofull_t *mapinfo)
|
|||
|
||||
// allocate temp storage
|
||||
mapinfo->sector = (sectortype *)Xmalloc(highlightsectorcnt * sizeof(sectortype));
|
||||
mapinfo->wall = (walltype *)Xmalloc(tmpnumwalls * sizeof(walltype));
|
||||
mapinfo->wall = (twalltype *)Xmalloc(tmpnumwalls * sizeof(walltype));
|
||||
|
||||
#ifdef YAX_ENABLE
|
||||
if (mapinfo->numyaxbunches > 0)
|
||||
|
@ -1621,7 +1621,7 @@ static int32_t backup_highlighted_map(mapinfofull_t *mapinfo)
|
|||
|
||||
if (tmpnumsprites>0)
|
||||
{
|
||||
mapinfo->sprite = (spritetype *)Xmalloc(tmpnumsprites * sizeof(spritetype));
|
||||
mapinfo->sprite = (tspritetype *)Xmalloc(tmpnumsprites * sizeof(spritetype));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1838,7 +1838,7 @@ static int32_t restore_highlighted_map(mapinfofull_t *mapinfo, int32_t forreal)
|
|||
// insert sprites
|
||||
for (i=0; i<mapinfo->numsprites; i++)
|
||||
{
|
||||
const spritetype *srcspr = &mapinfo->sprite[i];
|
||||
const tspritetype *srcspr = &mapinfo->sprite[i];
|
||||
int32_t sect = onumsectors + srcspr->sectnum;
|
||||
|
||||
j = insertsprite(sect, srcspr->statnum);
|
||||
|
@ -2245,9 +2245,9 @@ void fade_editor_screen(int32_t keepcol)
|
|||
|
||||
static void copy_some_wall_members(int16_t dst, int16_t src, int32_t reset_some)
|
||||
{
|
||||
static walltype nullwall;
|
||||
walltype *dstwal=&wall[dst];
|
||||
const walltype *srcwal = src >= 0 ? &wall[src] : &nullwall;
|
||||
static twalltype nullwall;
|
||||
walltype * const dstwal = &wall[dst];
|
||||
const twalltype *srcwal = src >= 0 ? (twalltype *)&wall[src] : &nullwall;
|
||||
|
||||
memset(&nullwall, 0, sizeof(nullwall));
|
||||
nullwall.yrepeat = 8;
|
||||
|
@ -2472,7 +2472,7 @@ static int32_t trace_loop(int32_t j, uint8_t *visitedwall, int16_t *ignore_ret,
|
|||
// Context that needs special treatment: suckwall, splitsect, splitstartwall
|
||||
static int32_t backup_drawn_walls(int32_t restore)
|
||||
{
|
||||
static walltype *tmpwall;
|
||||
static twalltype *tmpwall;
|
||||
|
||||
// back up
|
||||
if (restore==0)
|
||||
|
@ -2485,7 +2485,7 @@ static int32_t backup_drawn_walls(int32_t restore)
|
|||
return 2;
|
||||
|
||||
Bfree(tmpwall);
|
||||
tmpwall = (walltype *)Xmalloc((newnumwalls-numwalls) * sizeof(walltype));
|
||||
tmpwall = (twalltype *)Xmalloc((newnumwalls-numwalls) * sizeof(walltype));
|
||||
|
||||
ovh.bak_wallsdrawn = newnumwalls-numwalls;
|
||||
|
||||
|
@ -2636,8 +2636,8 @@ static int32_t sectors_components(int16_t hlsectcnt, const int16_t *hlsector, in
|
|||
|
||||
static int cmpgeomwal1(const void *w1, const void *w2)
|
||||
{
|
||||
const walltype *wal1 = &wall[*(int16_t *)w1];
|
||||
const walltype *wal2 = &wall[*(int16_t *)w2];
|
||||
twalltype const * const wal1 = (twalltype *)&wall[*(int16_t *)w1];
|
||||
twalltype const * const wal2 = (twalltype *)&wall[*(int16_t *)w2];
|
||||
|
||||
if (wal1->x == wal2->x)
|
||||
return wal1->y - wal2->y;
|
||||
|
@ -2944,7 +2944,7 @@ static int32_t lineintersect2v(const vec2_t *p1, const vec2_t *p2, // line segm
|
|||
vec2_t *pint)
|
||||
{
|
||||
int32_t intz;
|
||||
return lineintersect(p1->x, p1->y, 0, p2->x, p2->y, 0,
|
||||
return lintersect(p1->x, p1->y, 0, p2->x, p2->y, 0,
|
||||
q1->x, q1->y, q2->x, q2->y,
|
||||
&pint->x, &pint->y, &intz);
|
||||
}
|
||||
|
@ -3431,7 +3431,7 @@ void overheadeditor(void)
|
|||
i = newnumwalls-1;
|
||||
for (; i>=0; i--)
|
||||
{
|
||||
const walltype *wal = &wall[i];
|
||||
walltype const * const wal = &wall[i];
|
||||
|
||||
if (j>=0 && sector[j].wallptr > i)
|
||||
j--;
|
||||
|
@ -3605,7 +3605,7 @@ void overheadeditor(void)
|
|||
|
||||
if ((highlight[i]&16384)==0)
|
||||
{
|
||||
const walltype *wal = &wall[highlight[i]];
|
||||
walltype const * const wal = &wall[highlight[i]];
|
||||
const int32_t p2=wal->point2, hlp=(show2dwall[p2>>3]&(1<<(p2&7)));
|
||||
vec3_t v1 = { x, y, 0 }, v2 = { wall[p2].x, wall[p2].y, 0 };
|
||||
|
||||
|
@ -3799,7 +3799,7 @@ void overheadeditor(void)
|
|||
int32_t startofloop, endofloop;
|
||||
int32_t numtoswap = -1;
|
||||
int32_t w=0;
|
||||
walltype tempwall;
|
||||
twalltype tempwall;
|
||||
|
||||
startofloop = startwall = sector[highlightsector[i]].wallptr;
|
||||
endofloop = endwall = startwall+sector[highlightsector[i]].wallnum-1;
|
||||
|
@ -5067,7 +5067,7 @@ end_yax: ;
|
|||
sector[refsect].wallnum += n;
|
||||
if (refsect != numsectors-1)
|
||||
{
|
||||
walltype *tmpwall = (walltype *)Xmalloc(n * sizeof(walltype));
|
||||
twalltype *tmpwall = (twalltype *)Xmalloc(n * sizeof(walltype));
|
||||
int16_t *tmponw = (int16_t *)Xmalloc(n * sizeof(int16_t));
|
||||
|
||||
for (m=0; m<numwalls; m++)
|
||||
|
@ -5824,7 +5824,7 @@ end_point_dragging:
|
|||
|
||||
int32_t numouterwalls[2] = {0,0}, numowals;
|
||||
static int16_t outerwall[2][MAXWALLS];
|
||||
const walltype *wal0, *wal1, *wal0p2, *wal1p2;
|
||||
const twalltype *wal0, *wal1, *wal0p2, *wal1p2;
|
||||
|
||||
// join sector ceilings/floors to a new bunch
|
||||
if (numyaxbunches==YAX_MAXBUNCHES)
|
||||
|
@ -5918,11 +5918,11 @@ end_point_dragging:
|
|||
|
||||
for (k=0; k<numowals; k++)
|
||||
{
|
||||
wal0 = &wall[outerwall[0][k]];
|
||||
wal1 = &wall[outerwall[1][k]];
|
||||
wal0 = (twalltype *)&wall[outerwall[0][k]];
|
||||
wal1 = (twalltype *)&wall[outerwall[1][k]];
|
||||
|
||||
wal0p2 = &wall[wal0->point2];
|
||||
wal1p2 = &wall[wal1->point2];
|
||||
wal0p2 = (twalltype *)&wall[wal0->point2];
|
||||
wal1p2 = (twalltype *)&wall[wal1->point2];
|
||||
|
||||
if (k==0)
|
||||
{
|
||||
|
@ -5935,14 +5935,14 @@ end_point_dragging:
|
|||
{
|
||||
pos.x = wal0->x + (wal0p2->x - wal0->x)/4;
|
||||
pos.y = wal0->y + (wal0p2->y - wal0->y)/4;
|
||||
pos.z = getflorzofslope(sectorofwall(wal0-wall), pos.x, pos.y);
|
||||
pos.z = getflorzofslope(sectorofwall(wal0-(twalltype *)wall), pos.x, pos.y);
|
||||
|
||||
if (!delayerr)
|
||||
message("Outer wall coordinates must coincide for both components");
|
||||
OSD_Printf("wal0:%d (%d,%d)--(%d,%d)\n",(int)(wal0-wall),
|
||||
TrackerCast(wal0->x),TrackerCast(wal0->y), TrackerCast(wal0p2->x),TrackerCast(wal0p2->y));
|
||||
OSD_Printf("wal1:%d (%d,%d)--(%d,%d)\n",(int)(wal1-wall),
|
||||
TrackerCast(wal1->x),TrackerCast(wal1->y), TrackerCast(wal1p2->x),TrackerCast(wal1p2->y));
|
||||
OSD_Printf("wal0:%d (%d,%d)--(%d,%d)\n",(int)(wal0-(twalltype *)wall),
|
||||
wal0->x,wal0->y, wal0p2->x,wal0p2->y);
|
||||
OSD_Printf("wal1:%d (%d,%d)--(%d,%d)\n",(int)(wal1-(twalltype *)wall),
|
||||
wal1->x,wal1->y, wal1p2->x,wal1p2->y);
|
||||
|
||||
goto end_join_sectors;
|
||||
}
|
||||
|
@ -10250,14 +10250,12 @@ void showsectordata(int16_t sectnum, int16_t small)
|
|||
|
||||
void showwalldata(int16_t wallnum, int16_t small)
|
||||
{
|
||||
walltype *wal;
|
||||
walltype const * const wal = &wall[wallnum];
|
||||
int32_t sec;
|
||||
char snotbuf[80];
|
||||
int32_t col=0; //, row = 0;
|
||||
int32_t color = small ? whitecol : editorcolors[11];
|
||||
|
||||
wal = &wall[wallnum];
|
||||
|
||||
if (small)
|
||||
{
|
||||
_printmessage16("^10Wall %d %s ^O(F8 to edit)", wallnum,
|
||||
|
|
|
@ -9853,7 +9853,7 @@ int32_t ExtPostStartupWindow(void)
|
|||
}
|
||||
|
||||
if (ReadPaletteTable())
|
||||
return -1;
|
||||
return 0;
|
||||
|
||||
InitCustomColors();
|
||||
|
||||
|
|
|
@ -2986,7 +2986,7 @@ nullquote:
|
|||
int32_t intx, inty, intz, ret;
|
||||
|
||||
if (tw==CON_LINEINTERSECT)
|
||||
ret = lineintersect(x1, y1, z1, x2, y2, z2, x3, y3, x4, y4, &intx, &inty, &intz);
|
||||
ret = lintersect(x1, y1, z1, x2, y2, z2, x3, y3, x4, y4, &intx, &inty, &intz);
|
||||
else
|
||||
ret = rayintersect(x1, y1, z1, x2, y2, z2, x3, y3, x4, y4, &intx, &inty, &intz);
|
||||
|
||||
|
|
|
@ -1820,7 +1820,7 @@ badindex:
|
|||
int32_t intx, inty, intz, ret;
|
||||
|
||||
if (tw==CON_LINEINTERSECT)
|
||||
ret = lineintersect(x1, y1, z1, x2, y2, z2, x3, y3, x4, y4, &intx, &inty, &intz);
|
||||
ret = lintersect(x1, y1, z1, x2, y2, z2, x3, y3, x4, y4, &intx, &inty, &intz);
|
||||
else
|
||||
ret = rayintersect(x1, y1, z1, x2, y2, z2, x3, y3, x4, y4, &intx, &inty, &intz);
|
||||
|
||||
|
|
Loading…
Reference in a new issue