mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-11-11 07:11:39 +00:00
fixes: various ones accumulated in the forum (falling into infinity, stuck in doors), crash in polymer mouse picker when in void space, creation of surplus loops on sector split when sector has weird geometry.
addition: disable sprite sectnum checking with m32script expert mode enabled. git-svn-id: https://svn.eduke32.com/eduke32@1843 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
0c2157f5eb
commit
16557ff1bb
7 changed files with 457 additions and 439 deletions
|
@ -69,7 +69,9 @@ extern "C" {
|
|||
#define YAX_SECTORFLD(Sect,Fld, Cf) (*((Cf) ? (§or[Sect].floor##Fld) : (§or[Sect].ceiling##Fld)))
|
||||
|
||||
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);
|
||||
|
||||
|
||||
#define CLIPMASK0 (((1L)<<16)+1L)
|
||||
|
|
|
@ -123,6 +123,8 @@ extern int32_t corruptlevel, numcorruptthings, corruptthings[MAXCORRUPTTHINGS];
|
|||
extern int32_t autocorruptcheck;
|
||||
extern int32_t CheckMapCorruption(int32_t printfromlev, uint64_t tryfixing);
|
||||
|
||||
extern int32_t m32_script_expertmode; // if true, make read-only vars writable
|
||||
|
||||
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);
|
||||
|
|
|
@ -172,7 +172,6 @@ extern uint32_t m32_drawlinepat;
|
|||
|
||||
extern int32_t g_iReturnVar;
|
||||
extern int32_t m32_sortvar1, m32_sortvar2;
|
||||
extern int32_t m32_script_expertmode; // if true, make read-only vars writable
|
||||
|
||||
//extern int32_t g_numRealPalettes;
|
||||
//extern int32_t g_scriptDebug;
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -173,24 +173,45 @@ static int16_t maphacklight[PR_MAXLIGHTS];
|
|||
inline int32_t getscreenvdisp(int32_t bz, int32_t zoome);
|
||||
void screencoords(int32_t *xres, int32_t *yres, int32_t x, int32_t y, int32_t zoome);
|
||||
|
||||
int16_t editstatus = 0;
|
||||
|
||||
|
||||
////////// YAX //////////
|
||||
#define YAX_BUNCHNUM(Sect, Cf) (*(int16_t *)(§or[Sect].ceilingxpanning + 6*Cf))
|
||||
|
||||
#ifdef YAX_ENABLE
|
||||
// all references to floor/ceiling bunchnums should be through the
|
||||
// get/set functions!
|
||||
|
||||
// game-time YAX data structures
|
||||
static int16_t yax_bunchnum[MAXSECTORS][2];
|
||||
|
||||
#define YAX_BUNCHNUM(Sect, Cf) (*(int16_t *)(§or[Sect].ceilingxpanning + 6*Cf))
|
||||
int16_t yax_getbunch(int16_t i, int16_t cf)
|
||||
{
|
||||
if (editstatus==0)
|
||||
return yax_bunchnum[i][cf];
|
||||
|
||||
if (((*(§or[i].ceilingstat + cf))&YAX_BIT)==0)
|
||||
return -1;
|
||||
|
||||
return YAX_BUNCHNUM(i, cf);
|
||||
}
|
||||
|
||||
void yax_getbunches(int16_t i, int16_t *cb, int16_t *fb)
|
||||
{
|
||||
*cb = yax_getbunch(i, YAX_CEILING);
|
||||
*fb = yax_getbunch(i, YAX_FLOOR);
|
||||
}
|
||||
|
||||
void yax_setbunch(int16_t i, int16_t cf, int16_t bunchnum)
|
||||
{
|
||||
if (i<0)
|
||||
if (editstatus==0)
|
||||
yax_bunchnum[i][cf] = bunchnum;
|
||||
|
||||
if (bunchnum<0)
|
||||
{
|
||||
*(§or[i].ceilingstat + cf) &= ~YAX_BIT;
|
||||
YAX_BUNCHNUM(i, cf) = 0;
|
||||
// YAX_BUNCHNUM(i, cf) = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -198,6 +219,15 @@ void yax_setbunch(int16_t i, int16_t cf, int16_t bunchnum)
|
|||
YAX_BUNCHNUM(i, cf) = bunchnum;
|
||||
}
|
||||
|
||||
void yax_setbunches(int16_t i, int16_t cb, int16_t fb)
|
||||
{
|
||||
yax_setbunch(i, YAX_CEILING, cb);
|
||||
yax_setbunch(i, YAX_FLOOR, fb);
|
||||
}
|
||||
|
||||
#undef YAX_BUNCHNUM
|
||||
|
||||
#endif
|
||||
|
||||
////////// editor side view //////////
|
||||
int32_t m32_sideview = 0;
|
||||
|
@ -1147,7 +1177,7 @@ static char tablesloaded = 0;
|
|||
int32_t pageoffset, ydim16, qsetmode = 0;
|
||||
int32_t startposx, startposy, startposz;
|
||||
int16_t startang, startsectnum;
|
||||
int16_t pointhighlight, linehighlight, highlightcnt;
|
||||
int16_t pointhighlight=-1, linehighlight=-1, highlightcnt=0;
|
||||
int32_t lastx[MAXYDIM];
|
||||
char *transluc = NULL, paletteloaded = 0;
|
||||
|
||||
|
@ -1196,7 +1226,6 @@ char vgapal16[4*256] =
|
|||
63,63,63,00
|
||||
};
|
||||
|
||||
int16_t editstatus = 0;
|
||||
int16_t searchit;
|
||||
int32_t searchx = -1, searchy; //search input
|
||||
int16_t searchsector, searchwall, searchstat; //search output
|
||||
|
@ -6215,7 +6244,7 @@ int32_t preinitengine(void)
|
|||
{
|
||||
dynarray[0].size += M32_FIXME_SECTORS*sizeof(sectortype); // join sectors needs a temp. sector
|
||||
dynarray[1].size += M32_FIXME_WALLS*sizeof(walltype);
|
||||
Bprintf("FIXME: Allocating additional space beyond wall[] for editor bugs.\n");
|
||||
// Bprintf("FIXME: Allocating additional space beyond wall[] for editor bugs.\n");
|
||||
}
|
||||
|
||||
for (i=0; i<(signed)(sizeof(dynarray)/sizeof(dynarray[0])); i++)
|
||||
|
@ -6318,10 +6347,6 @@ int32_t initengine(void)
|
|||
clearbuf(&show2dwall[0],(int32_t)((MAXWALLS+3)>>5),0L);
|
||||
automapping = 0;
|
||||
|
||||
pointhighlight = -1;
|
||||
linehighlight = -1;
|
||||
highlightcnt = 0;
|
||||
|
||||
totalclock = 0;
|
||||
visibility = 512;
|
||||
parallaxvisibility = 512;
|
||||
|
|
|
@ -1148,54 +1148,62 @@ void polymer_editorpick(void)
|
|||
scrvxz[0] = x-scrx;
|
||||
scrvxz[1] = z-scrz;
|
||||
|
||||
if (searchstat==1)
|
||||
pl = &prsectors[searchsector]->ceil.plane[0];
|
||||
else
|
||||
pl = &prsectors[searchsector]->floor.plane[0];
|
||||
|
||||
t = dot3f(pl,scrv);
|
||||
svcoeff = -(dot3f(pl,scr)+pl[3])/t;
|
||||
|
||||
// point on plane (x and z)
|
||||
p[0] = scrx + svcoeff*scrv[0];
|
||||
p[1] = scrz + svcoeff*scrv[2];
|
||||
|
||||
for (k=0; k<sector[searchsector].wallnum; k++)
|
||||
if (prsectors[searchsector]==NULL)
|
||||
{
|
||||
w1[1] = -(float)wal[k].x;
|
||||
w1[0] = (float)wal[k].y;
|
||||
w2[1] = -(float)wall[wal[k].point2].x;
|
||||
w2[0] = (float)wall[wal[k].point2].y;
|
||||
|
||||
scrvxznorm = sqrt(dot2f(scrvxz,scrvxz));
|
||||
scrvxzn[0] = scrvxz[1]/scrvxznorm;
|
||||
scrvxzn[1] = -scrvxz[0]/scrvxznorm;
|
||||
|
||||
relvec2f(p,w1, pw1);
|
||||
relvec2f(p,w2, pw2);
|
||||
relvec2f(w2,w1, w21);
|
||||
|
||||
w1d = dot2f(scrvxzn,pw1);
|
||||
w2d = dot2f(scrvxzn,pw2);
|
||||
w2d = -w2d;
|
||||
if (w1d <= 0 || w2d <= 0)
|
||||
continue;
|
||||
|
||||
ptonline[0] = w2[0]+(w2d/(w1d+w2d))*w21[0];
|
||||
ptonline[1] = w2[1]+(w2d/(w1d+w2d))*w21[1];
|
||||
relvec2f(p,ptonline, scrpxz);
|
||||
if (dot2f(scrvxz,scrpxz)<0)
|
||||
continue;
|
||||
|
||||
wdistsq = dot2f(scrpxz,scrpxz);
|
||||
if (wdistsq < bestwdistsq)
|
||||
{
|
||||
bestk = k;
|
||||
bestwdistsq = wdistsq;
|
||||
}
|
||||
//OSD_Printf("polymer_editorpick: prsectors[searchsector]==NULL !!!\n");
|
||||
searchwall = sector[num].wallptr;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (searchstat==1)
|
||||
pl = &(prsectors[searchsector]->ceil.plane[0]);
|
||||
else
|
||||
pl = &(prsectors[searchsector]->floor.plane[0]);
|
||||
|
||||
searchwall = sector[searchsector].wallptr + bestk;
|
||||
t = dot3f(pl,scrv);
|
||||
svcoeff = -(dot3f(pl,scr)+pl[3])/t;
|
||||
|
||||
// point on plane (x and z)
|
||||
p[0] = scrx + svcoeff*scrv[0];
|
||||
p[1] = scrz + svcoeff*scrv[2];
|
||||
|
||||
for (k=0; k<sector[searchsector].wallnum; k++)
|
||||
{
|
||||
w1[1] = -(float)wal[k].x;
|
||||
w1[0] = (float)wal[k].y;
|
||||
w2[1] = -(float)wall[wal[k].point2].x;
|
||||
w2[0] = (float)wall[wal[k].point2].y;
|
||||
|
||||
scrvxznorm = sqrt(dot2f(scrvxz,scrvxz));
|
||||
scrvxzn[0] = scrvxz[1]/scrvxznorm;
|
||||
scrvxzn[1] = -scrvxz[0]/scrvxznorm;
|
||||
|
||||
relvec2f(p,w1, pw1);
|
||||
relvec2f(p,w2, pw2);
|
||||
relvec2f(w2,w1, w21);
|
||||
|
||||
w1d = dot2f(scrvxzn,pw1);
|
||||
w2d = dot2f(scrvxzn,pw2);
|
||||
w2d = -w2d;
|
||||
if (w1d <= 0 || w2d <= 0)
|
||||
continue;
|
||||
|
||||
ptonline[0] = w2[0]+(w2d/(w1d+w2d))*w21[0];
|
||||
ptonline[1] = w2[1]+(w2d/(w1d+w2d))*w21[1];
|
||||
relvec2f(p,ptonline, scrpxz);
|
||||
if (dot2f(scrvxz,scrpxz)<0)
|
||||
continue;
|
||||
|
||||
wdistsq = dot2f(scrpxz,scrpxz);
|
||||
if (wdistsq < bestwdistsq)
|
||||
{
|
||||
bestk = k;
|
||||
bestwdistsq = wdistsq;
|
||||
}
|
||||
}
|
||||
|
||||
searchwall = sector[searchsector].wallptr + bestk;
|
||||
}
|
||||
}
|
||||
// :P
|
||||
|
||||
|
|
|
@ -206,7 +206,7 @@ extern int16_t capturecount;
|
|||
extern int32_t editorgridextent; // in engine.c
|
||||
extern char game_executable[BMAX_PATH];
|
||||
|
||||
extern int32_t fillsector(int16_t sectnum, char fillcolor);
|
||||
//extern int32_t fillsector(int16_t sectnum, char fillcolor);
|
||||
|
||||
static void drawgradient()
|
||||
{
|
||||
|
@ -9294,13 +9294,13 @@ void app_crashhandler(void)
|
|||
|
||||
void ExtUnInit(void)
|
||||
{
|
||||
int32_t i;
|
||||
// int32_t i;
|
||||
// setvmode(0x03);
|
||||
writesetup(setupfilename);
|
||||
|
||||
S_SoundShutdown();
|
||||
uninitgroupfile();
|
||||
|
||||
#if 0
|
||||
for (i = MAX_TILE_GROUPS-1; i >= 0; i--)
|
||||
{
|
||||
if (s_TileGroups[i].pIds != NULL)
|
||||
|
@ -9310,6 +9310,7 @@ void ExtUnInit(void)
|
|||
}
|
||||
for (i = numhelppages-1; i >= 0; i--) Bfree(helppage[i]);
|
||||
if (helppage) Bfree(helppage);
|
||||
#endif
|
||||
}
|
||||
|
||||
void ExtPreCheckKeys(void) // just before drawrooms
|
||||
|
|
Loading…
Reference in a new issue