mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-24 02:30:46 +00:00
Polymost:
* rudimentary TROR support * free mixing of multi- and single-tile pskies * Don't cull models behind you. That is, treat them like floor sprites in that respect. This way large models like corpses don't disappear from the view unexpectedly. Classic: * tweak the last row and column of the translucency table so that e.g. a transparent sprite against a FANSPRITE wall doesn't show up purple (only if Duke3D table is found) Misc.: * fixes TROR-nextwall corruption when deleting sectors * tile selector 'goto' now has also completion * I forgot a file for the non-OpenGL build last time git-svn-id: https://svn.eduke32.com/eduke32@1892 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
8e75a11188
commit
e92099b2f7
12 changed files with 488 additions and 218 deletions
|
@ -676,8 +676,8 @@ int32_t wallvisible(int32_t x, int32_t y, int16_t wallnum);
|
|||
#define STATUS2DSIZ 144
|
||||
#define STATUS2DSIZ2 26
|
||||
|
||||
void qsetmode640350(void);
|
||||
void qsetmode640480(void);
|
||||
//void qsetmode640350(void);
|
||||
//void qsetmode640480(void);
|
||||
void qsetmodeany(int32_t,int32_t);
|
||||
void clear2dscreen(void);
|
||||
void draw2dgrid(int32_t posxe, int32_t posye, int32_t posze, int16_t cursectnum, int16_t ange, int32_t zoome, int16_t gride);
|
||||
|
|
|
@ -79,7 +79,7 @@ extern int32_t pk_turnaccel,pk_turndecel,pk_uedaccel;
|
|||
extern int32_t revertCTRL,scrollamount;
|
||||
extern int32_t autosave;
|
||||
extern int32_t mlook;
|
||||
extern int16_t prefixtiles[16];
|
||||
extern int16_t prefixtiles[10];
|
||||
|
||||
extern int32_t numsprites;
|
||||
extern int32_t showfirstwall;
|
||||
|
|
|
@ -122,10 +122,10 @@ static int32_t currentlist=0;
|
|||
|
||||
static int32_t fillist[640];
|
||||
// used for fillsector and point selection in side-view mode:
|
||||
static int32_t tempxyar[MAXWALLS][2];
|
||||
static int32_t tempxyar[MAXWALLS][2] ATTRIBUTE((aligned(8)));
|
||||
|
||||
static int32_t mousx, mousy;
|
||||
int16_t prefixtiles[16] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
|
||||
int16_t prefixtiles[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
|
||||
uint8_t hlsectorbitmap[MAXSECTORS>>3]; // show2dsector is already taken...
|
||||
|
||||
static uint8_t visited[MAXWALLS>>3]; // used for AlignWalls and trace_loop
|
||||
|
@ -2228,10 +2228,9 @@ void bfirst_search_init(int16_t *list, uint8_t *bitmap, int32_t *eltnumptr, int3
|
|||
{
|
||||
Bmemset(bitmap, 0, (maxnum+7)>>3);
|
||||
|
||||
*eltnumptr = 0;
|
||||
list[*eltnumptr] = firstelt;
|
||||
bitmap[*eltnumptr>>3] |= (1<<(*eltnumptr&7));
|
||||
(*eltnumptr)++;
|
||||
list[0] = firstelt;
|
||||
bitmap[firstelt>>3] |= (1<<(firstelt&7));
|
||||
*eltnumptr = 1;
|
||||
}
|
||||
|
||||
void bfirst_search_try(int16_t *list, uint8_t *bitmap, int32_t *eltnumptr, int16_t elt)
|
||||
|
@ -2248,13 +2247,27 @@ void bfirst_search_try(int16_t *list, uint8_t *bitmap, int32_t *eltnumptr, int16
|
|||
}
|
||||
|
||||
#ifdef YAX_ENABLE
|
||||
// whether all highlighted sectors are in one connected component
|
||||
// wrt the nextsector relation
|
||||
static int32_t highlighted_sectors_in_one_component()
|
||||
static int32_t collnumsects[2];
|
||||
static int16_t collsectlist[2][MAXSECTORS];
|
||||
static uint8_t collsectbitmap[2][MAXSECTORS>>3];
|
||||
|
||||
static void collect_sectors1(int16_t *sectlist, uint8_t *sectbitmap, int32_t *numsectptr, int16_t startsec)
|
||||
{
|
||||
int32_t j, k, startwall, endwall, sectcnt, sectnum;
|
||||
static int16_t sectlist[MAXSECTORS];
|
||||
static uint8_t sectbitmap[MAXSECTORS>>3];
|
||||
int32_t j, startwall, endwall, sectcnt;
|
||||
|
||||
bfirst_search_init(sectlist, sectbitmap, numsectptr, MAXSECTORS, startsec);
|
||||
|
||||
for (sectcnt=0; sectcnt<*numsectptr; sectcnt++)
|
||||
for (WALLS_OF_SECTOR(sectlist[sectcnt], j))
|
||||
bfirst_search_try(sectlist, sectbitmap, numsectptr, wall[j].nextsector);
|
||||
}
|
||||
|
||||
// whether all highlighted sectors are in one (returns 1), two (2)
|
||||
// or more (>2) connected components wrt the nextsector relation
|
||||
// -1 means error
|
||||
static int32_t highlighted_sectors_components(void)
|
||||
{
|
||||
int32_t j, k, tmp;
|
||||
|
||||
if (highlightsectorcnt<1)
|
||||
return 0;
|
||||
|
@ -2262,21 +2275,54 @@ static int32_t highlighted_sectors_in_one_component()
|
|||
if (highlightsectorcnt==1)
|
||||
return 1;
|
||||
|
||||
bfirst_search_init(sectlist, sectbitmap, §num, MAXSECTORS, highlightsector[0]);
|
||||
|
||||
for (sectcnt=0; sectcnt<sectnum; sectcnt++)
|
||||
for (WALLS_OF_SECTOR(sectlist[sectcnt], j))
|
||||
bfirst_search_try(sectlist, sectbitmap, §num, wall[j].nextsector);
|
||||
collect_sectors1(collsectlist[0], collsectbitmap[0], &collnumsects[0], highlightsector[0]);
|
||||
|
||||
for (k=0; k<highlightsectorcnt; k++)
|
||||
{
|
||||
j = highlightsector[k];
|
||||
if ((sectbitmap[j>>3]&(1<<(j&7)))==0)
|
||||
return 0;
|
||||
if ((collsectbitmap[0][j>>3]&(1<<(j&7)))==0)
|
||||
{
|
||||
// sector j not collected --> more than 1 conn. comp.
|
||||
collect_sectors1(collsectlist[1], collsectbitmap[1], &collnumsects[1], j);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
if (k == highlightsectorcnt)
|
||||
return 1;
|
||||
|
||||
for (k=0; k<highlightsectorcnt; k++)
|
||||
{
|
||||
j = highlightsector[k];
|
||||
tmp = (((collsectbitmap[0][j>>3]&(1<<(j&7)))!=0) + (((collsectbitmap[1][j>>3]&(1<<(j&7)))!=0)<<1));
|
||||
|
||||
if (tmp==3)
|
||||
return -1; // components only weakly connected
|
||||
|
||||
if (tmp==0)
|
||||
return 3; // sector j not reached
|
||||
}
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static int cmpgeomwal1(const int16_t *w1, const int16_t *w2)
|
||||
{
|
||||
const walltype *wal1 = &wall[*w1];
|
||||
const walltype *wal2 = &wall[*w2];
|
||||
|
||||
if (wal1->x == wal2->x)
|
||||
return wal1->y - wal2->y;
|
||||
|
||||
return wal1->x - wal2->x;
|
||||
}
|
||||
|
||||
static void sort_walls_geometrically(int16_t *wallist, int32_t nwalls)
|
||||
{
|
||||
qsort(wallist, nwalls, sizeof(int16_t), (int(*)(const void *, const void *))&cmpgeomwal1);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
void overheadeditor(void)
|
||||
|
@ -2303,7 +2349,6 @@ void overheadeditor(void)
|
|||
|
||||
m32_setkeyfilter(1);
|
||||
|
||||
//qsetmode640480();
|
||||
qsetmodeany(xdim2d,ydim2d);
|
||||
xdim2d = xdim;
|
||||
ydim2d = ydim;
|
||||
|
@ -3125,7 +3170,7 @@ void overheadeditor(void)
|
|||
goto end_yax;
|
||||
}
|
||||
|
||||
if (!highlighted_sectors_in_one_component())
|
||||
if (highlighted_sectors_components() != 1)
|
||||
{
|
||||
message("Sectors to extend must be in one connected component");
|
||||
goto end_yax;
|
||||
|
@ -3239,7 +3284,7 @@ void overheadeditor(void)
|
|||
update_highlightsector();
|
||||
|
||||
message("Extended %ss of highlighted sectors, creating bunch %d",
|
||||
cfs[cf], numyaxbunches);
|
||||
cfs[cf], numyaxbunches-1);
|
||||
asksave = 1;
|
||||
end_yax: ;
|
||||
}
|
||||
|
@ -4223,6 +4268,126 @@ end_point_dragging:
|
|||
goto end_join_sectors;
|
||||
}
|
||||
|
||||
#if 0
|
||||
//def YAX_ENABLE
|
||||
if (highlightsectorcnt > 0 && eitherCTRL)
|
||||
{
|
||||
// [component][ceiling(0) or floor(1)]
|
||||
// compstat: &1: "has extension", &2: "differ in z", &4: "sloped"
|
||||
int32_t cf, comp, compstat[2][2]={{0,0},{0,0}}, compcfz[2][2];
|
||||
|
||||
// joinstat:
|
||||
// &1: ceil(comp 0) <-> flor(comp 1), &2: flor(comp 0) <-> ceil(comp 1)
|
||||
// (doesn't yet say which is stationary)
|
||||
int32_t joinstat, needsdisp, dx,dy,dz;
|
||||
|
||||
// tempxyar: int32_t [MAXWALLS][2]
|
||||
int32_t numouterwalls[2] = {0,0}, numowals;
|
||||
int16_t *const outerwall[2] = { (int16_t *)tempxyar, ((int16_t *)tempxyar)+MAXWALLS };
|
||||
const walltype *wal0, *wal1;
|
||||
|
||||
// join sector ceilings/floors to a new bunch
|
||||
if (numyaxbunches==YAX_MAXBUNCHES)
|
||||
{
|
||||
message("Bunch limit of %d reached, cannot join", YAX_MAXBUNCHES);
|
||||
goto end_join_sectors;
|
||||
}
|
||||
|
||||
// first, see whether we have exactly two connected components
|
||||
// wrt wall[].nextsector
|
||||
if (highlighted_sectors_components() != 2)
|
||||
{
|
||||
message("Sectors must be partitioned in two components to join");
|
||||
goto end_join_sectors;
|
||||
}
|
||||
|
||||
for (k=0; k<highlightsectorcnt; k++)
|
||||
{
|
||||
j = highlightsector[k];
|
||||
comp = !!(collsectbitmap[1][j>>3]&(1<<(j&7)));
|
||||
|
||||
for (cf=0; cf<2; cf++)
|
||||
{
|
||||
if (k==0)
|
||||
compcfz[comp][cf] = SECTORFLD(j,z, cf);
|
||||
|
||||
if (yax_getbunch(j, cf)>=0)
|
||||
compstat[comp][cf] |= 1;
|
||||
if (SECTORFLD(j,z, cf) != compcfz[comp][cf])
|
||||
compstat[comp][cf] |= 2;
|
||||
if (SECTORFLD(j,stat, cf)&2)
|
||||
compstat[comp][cf] |= 4;
|
||||
|
||||
compcfz[comp][cf] = SECTORFLD(j,z, cf);
|
||||
}
|
||||
}
|
||||
|
||||
// check for consistency
|
||||
joinstat = 0;
|
||||
if (!compstat[0][YAX_CEILING] && !compstat[1][YAX_FLOOR])
|
||||
joinstat |= 1;
|
||||
if (!compstat[0][YAX_FLOOR] && !compstat[1][YAX_CEILING])
|
||||
joinstat |= 2;
|
||||
|
||||
if (joinstat==0)
|
||||
{
|
||||
message("No consistent joining combination found");
|
||||
goto end_join_sectors;
|
||||
}
|
||||
if (joinstat==3)
|
||||
{
|
||||
if (compcfz[0][YAX_CEILING] != compstat[1][YAX_FLOOR])
|
||||
joinstat &= 1;
|
||||
if (compcfz[0][YAX_CEILING] != compstat[1][YAX_FLOOR])
|
||||
joinstat &= 2;
|
||||
|
||||
if (joinstat == 0)
|
||||
joinstat = 3; // we couldn't disambiguate
|
||||
}
|
||||
|
||||
for (comp=0; comp<2; comp++)
|
||||
for (k=0; k<collnumsects[comp]; k++)
|
||||
{
|
||||
i = collsectlist[comp][k];
|
||||
for (WALLS_OF_SECTOR(i, j))
|
||||
if (wall[j].nextwall < 0)
|
||||
outerwall[comp][numouterwalls[comp]++] = j;
|
||||
}
|
||||
|
||||
if (numouterwalls[0] != numouterwalls[1])
|
||||
{
|
||||
message("Number of outer walls must be equal for both components");
|
||||
goto end_join_sectors;
|
||||
}
|
||||
numowals = numouterwalls[0];
|
||||
|
||||
// now sort outer walls 'geometrically'
|
||||
for (comp=0; comp<2; comp++)
|
||||
sort_walls_geometrically(outerwall[comp], numouterwalls[comp]);
|
||||
|
||||
needsdisp = 0;
|
||||
for (k=0; k<numowals; k++)
|
||||
{
|
||||
wal0 = &wall[outerwall[0][k]];
|
||||
wal1 = &wall[outerwall[1][k]];
|
||||
|
||||
if (k==0)
|
||||
{
|
||||
dx = wal1->x - wal0->x;
|
||||
dy = wal1->y - wal0->y;
|
||||
}
|
||||
|
||||
if (wal1->x - wal0->x != dx || wal1->y - wal0->y != dy ||
|
||||
wall[wal1->point2].x - wall[wal0->point2].x != dx ||
|
||||
wall[wal1->point2].y - wall[wal0->point2].y != dy)
|
||||
{
|
||||
message("Outer wall coordinates must coincide for both components");
|
||||
goto end_join_sectors;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif // defined YAX_ENABLE
|
||||
if (joinsector[0] < 0)
|
||||
{
|
||||
joinsector[0] = -1;
|
||||
|
@ -6547,6 +6712,10 @@ static int32_t deletesector(int16_t sucksect)
|
|||
endwall = startwall + sector[sucksect].wallnum - 1;
|
||||
j = sector[sucksect].wallnum;
|
||||
|
||||
#ifdef YAX_ENABLE
|
||||
yax_setbunches(sucksect, -1, -1);
|
||||
#endif
|
||||
|
||||
for (i=sucksect; i<numsectors-1; i++)
|
||||
{
|
||||
k = headspritesect[i+1];
|
||||
|
@ -6563,11 +6732,13 @@ static int32_t deletesector(int16_t sucksect)
|
|||
numsectors--;
|
||||
|
||||
for (i=startwall; i<=endwall; i++)
|
||||
{
|
||||
if (wall[i].nextwall >= 0)
|
||||
{
|
||||
NEXTWALL(i).nextwall = -1;
|
||||
NEXTWALL(i).nextsector = -1;
|
||||
}
|
||||
}
|
||||
|
||||
movewalls(startwall, -j);
|
||||
for (i=0; i<numwalls; i++)
|
||||
|
@ -6930,11 +7101,22 @@ int32_t _getnumber16(const char *namestart, int32_t num, int32_t maxnumber, char
|
|||
return oldnum;
|
||||
}
|
||||
|
||||
static void getnumber_clearline(void)
|
||||
{
|
||||
char cbuf[128];
|
||||
int32_t i;
|
||||
for (i=0; i<min(xdim>>3, (signed)sizeof(cbuf)-1); i++)
|
||||
cbuf[i] = ' ';
|
||||
cbuf[i] = 0;
|
||||
printext256(0, 0, whitecol, 0, cbuf, 0);
|
||||
}
|
||||
|
||||
// sign: |16: don't draw scene
|
||||
int32_t _getnumber256(const char *namestart, int32_t num, int32_t maxnumber, char sign, void *(func)(int32_t))
|
||||
{
|
||||
char buffer[80], ch;
|
||||
int32_t danum, oldnum;
|
||||
uint8_t flags = (sign>>1)&3;
|
||||
uint8_t flags = (sign>>1)&(3|8);
|
||||
sign &= 1;
|
||||
|
||||
danum = num;
|
||||
|
@ -6946,22 +7128,25 @@ int32_t _getnumber256(const char *namestart, int32_t num, int32_t maxnumber, cha
|
|||
if (handleevents())
|
||||
quitevent = 0;
|
||||
|
||||
yax_preparedrawrooms();
|
||||
drawrooms(pos.x,pos.y,pos.z,ang,horiz,cursectnum);
|
||||
yax_drawrooms(ExtAnalyzeSprites, horiz, cursectnum);
|
||||
|
||||
ExtAnalyzeSprites();
|
||||
drawmasks();
|
||||
|
||||
#ifdef POLYMER
|
||||
if (rendmode == 4 && searchit == 2)
|
||||
if ((flags&8)==0)
|
||||
{
|
||||
polymer_editorpick();
|
||||
yax_preparedrawrooms();
|
||||
drawrooms(pos.x,pos.y,pos.z,ang,horiz,cursectnum);
|
||||
yax_drawrooms(ExtAnalyzeSprites, horiz, cursectnum);
|
||||
|
||||
ExtAnalyzeSprites();
|
||||
drawmasks();
|
||||
}
|
||||
|
||||
#ifdef POLYMER
|
||||
if (rendmode == 4 && searchit == 2)
|
||||
{
|
||||
polymer_editorpick();
|
||||
drawrooms(pos.x,pos.y,pos.z,ang,horiz,cursectnum);
|
||||
ExtAnalyzeSprites();
|
||||
drawmasks();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
ch = bgetchar();
|
||||
if (keystatus[0x1])
|
||||
|
@ -6972,7 +7157,10 @@ int32_t _getnumber256(const char *namestart, int32_t num, int32_t maxnumber, cha
|
|||
searchx = osearchx;
|
||||
searchy = osearchy;
|
||||
|
||||
ExtCheckKeys();
|
||||
if ((flags&8)==0)
|
||||
ExtCheckKeys();
|
||||
|
||||
getnumber_clearline();
|
||||
|
||||
Bsprintf(buffer,"%s%d",namestart,danum);
|
||||
if (totalclock & 32) Bstrcat(buffer,"_ ");
|
||||
|
@ -6986,7 +7174,7 @@ int32_t _getnumber256(const char *namestart, int32_t num, int32_t maxnumber, cha
|
|||
showframe(1);
|
||||
|
||||
if (getnumber_internal1(ch, &danum, maxnumber, sign) ||
|
||||
getnumber_autocomplete(namestart, ch, &danum, flags))
|
||||
getnumber_autocomplete(namestart, ch, &danum, flags&(1+2)))
|
||||
{
|
||||
if (danum != oldnum)
|
||||
asksave = 1;
|
||||
|
@ -7041,14 +7229,7 @@ const char *getstring_simple(const char *querystr, const char *defaultstr, int32
|
|||
while (1)
|
||||
{
|
||||
if (qsetmode==200)
|
||||
{
|
||||
char cbuf[128];
|
||||
int32_t i;
|
||||
for (i=0; i<min(xdim>>3, (signed)sizeof(cbuf)-1); i++)
|
||||
cbuf[i] = ' ';
|
||||
cbuf[i] = 0;
|
||||
printext256(0, 0, whitecol, 0, cbuf, 0);
|
||||
}
|
||||
getnumber_clearline();
|
||||
|
||||
if (qsetmode==200)
|
||||
printext256(0, 0, whitecol, 0, buf, 0);
|
||||
|
|
|
@ -188,16 +188,6 @@ int16_t editstatus = 0;
|
|||
|
||||
////////// YAX //////////
|
||||
|
||||
#ifdef YAX_DEBUG
|
||||
extern char m32_debugstr[64][128];
|
||||
extern int32_t m32_numdebuglines;
|
||||
# define yaxdebug(fmt, ...) do { if (m32_numdebuglines<64) Bsnprintf(m32_debugstr[m32_numdebuglines++], 128, fmt, ##__VA_ARGS__); } while (0)
|
||||
# define yaxprintf(fmt, ...) do { initprintf(fmt, ##__VA_ARGS__); } while (0)
|
||||
#else
|
||||
# define yaxdebug(fmt, ...)
|
||||
# define yaxprintf(fmt, ...)
|
||||
#endif
|
||||
|
||||
uint8_t graysectbitmap[MAXSECTORS>>3];
|
||||
uint8_t graywallbitmap[MAXWALLS>>3];
|
||||
int32_t autogray = 0;
|
||||
|
@ -263,7 +253,7 @@ void yax_updategrays(int32_t posze)
|
|||
// get/set functions!
|
||||
|
||||
static int32_t g_nodraw = 0;
|
||||
static int32_t scansector_retfast = 0;
|
||||
int32_t scansector_retfast = 0;
|
||||
static int32_t scansector_collectsprites = 1;
|
||||
static int32_t yax_globalcf = -1;
|
||||
static int32_t yax_globallev = YAX_MAXDRAWS;
|
||||
|
@ -317,11 +307,17 @@ void yax_setbunch(int16_t i, int16_t cf, int16_t bunchnum)
|
|||
if (bunchnum<0)
|
||||
{
|
||||
int32_t j;
|
||||
int16_t ynw;
|
||||
|
||||
// TODO: for in-game too?
|
||||
for (j=sector[i].wallptr; j<sector[i].wallptr+sector[i].wallnum; j++)
|
||||
{
|
||||
yax_setnextwall(j, YAX_CEILING, -1);
|
||||
yax_setnextwall(j, YAX_FLOOR, -1);
|
||||
ynw = yax_getnextwall(j, cf);
|
||||
if (ynw >= 0)
|
||||
{
|
||||
yax_setnextwall(ynw, !cf, -1);
|
||||
yax_setnextwall(j, cf, -1);
|
||||
}
|
||||
}
|
||||
|
||||
*(§or[i].ceilingstat + cf) &= ~YAX_BIT;
|
||||
|
@ -608,7 +604,12 @@ static void yax_scanbunches(int32_t bbeg, int32_t numhere, const uint8_t *lastgo
|
|||
if (checkthisec)
|
||||
{
|
||||
numscans = numbunches = 0;
|
||||
scansector(k);
|
||||
if (getrendermode()==0)
|
||||
scansector(k);
|
||||
#ifdef USE_OPENGL
|
||||
else
|
||||
polymost_scansector(k);
|
||||
#endif
|
||||
if (numbunches > 0)
|
||||
{
|
||||
bestsec = k;
|
||||
|
@ -705,9 +706,10 @@ static void yax_copytsprite(int32_t curbunchnum, int32_t resetsortcnt)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void yax_preparedrawrooms(void)
|
||||
{
|
||||
if (getrendermode()!=0 || numyaxbunches==0)
|
||||
if (getrendermode()==4 || numyaxbunches==0)
|
||||
return;
|
||||
|
||||
g_nodraw = 1;
|
||||
|
@ -745,7 +747,7 @@ void yax_drawrooms(void (*ExtAnalyzeSprites)(void), int32_t horiz, int16_t sectn
|
|||
int32_t t;
|
||||
#endif
|
||||
|
||||
if (getrendermode()!=0 || numyaxbunches==0)
|
||||
if (getrendermode()==4 || numyaxbunches==0)
|
||||
{
|
||||
#ifdef ENGINE_SCREENSHOT_DEBUG
|
||||
engine_screenshot = 0;
|
||||
|
@ -872,13 +874,19 @@ void yax_drawrooms(void (*ExtAnalyzeSprites)(void), int32_t horiz, int16_t sectn
|
|||
scansector_collectsprites = 0;
|
||||
|
||||
#ifdef ENGINE_CLEAR_SCREEN
|
||||
if (rendmode==0)
|
||||
if (getrendermode()==0)
|
||||
{
|
||||
begindrawing();
|
||||
for (i=0; i<xdim*ydim; i++)
|
||||
for (i=0; i<xdimen*ydimen; i++)
|
||||
*((char *)frameplace + i) = i;
|
||||
enddrawing();
|
||||
}
|
||||
#ifdef USE_OPENGL
|
||||
else
|
||||
{
|
||||
bglClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
for (cf=0; cf<2; cf++)
|
||||
|
@ -944,7 +952,7 @@ void yax_drawrooms(void (*ExtAnalyzeSprites)(void), int32_t horiz, int16_t sectn
|
|||
#endif
|
||||
|
||||
#ifdef YAX_DEBUG_YMOSTS
|
||||
if (rendmode==0)
|
||||
if (getrendermode()==0)
|
||||
{
|
||||
begindrawing();
|
||||
for (i=0; i<numyaxbunches; i++)
|
||||
|
@ -2078,6 +2086,70 @@ static inline int32_t getpalookup(int32_t davis, int32_t dashade)
|
|||
}
|
||||
|
||||
|
||||
// returns: 0=continue;
|
||||
// 1=break;
|
||||
int32_t engine_addtsprite(int16_t z, int16_t sectnum)
|
||||
{
|
||||
spritetype *spr = &sprite[z];
|
||||
#ifdef YAX_ENABLE
|
||||
int16_t cb, fb, *sortcnt;
|
||||
int32_t spheight, spzofs;
|
||||
|
||||
if (g_nodraw==0)
|
||||
{
|
||||
#endif
|
||||
if (spritesortcnt >= MAXSPRITESONSCREEN)
|
||||
return 1;
|
||||
|
||||
copybufbyte(spr,&tsprite[spritesortcnt],sizeof(spritetype));
|
||||
spriteext[z].tspr = (spritetype *)&tsprite[spritesortcnt];
|
||||
tsprite[spritesortcnt++].owner = z;
|
||||
#ifdef YAX_ENABLE
|
||||
}
|
||||
else
|
||||
{
|
||||
sortcnt = &yax_spritesortcnt[yax_globallev];
|
||||
if (*sortcnt >= MAXSPRITESONSCREEN)
|
||||
return 0;
|
||||
|
||||
yax_tsprite[yax_globallev][*sortcnt] = z;
|
||||
(*sortcnt)++;
|
||||
|
||||
// now check whether the tsprite needs duplication into another level
|
||||
if ((spr->cstat&48)==32)
|
||||
return 0;
|
||||
|
||||
yax_getbunches(sectnum, &cb, &fb);
|
||||
if (cb < 0 && fb < 0)
|
||||
return 0;
|
||||
|
||||
spriteheightofs(z, &spheight, &spzofs);
|
||||
|
||||
// TODO: get*zofslope?
|
||||
if (cb>=0 && spr->z+spzofs-spheight < sector[sectnum].ceilingz)
|
||||
{
|
||||
sortcnt = &yax_spritesortcnt[yax_globallev-1];
|
||||
if (*sortcnt < MAXSPRITESONSCREEN)
|
||||
{
|
||||
yax_tsprite[yax_globallev-1][*sortcnt] = z|MAXSPRITES;
|
||||
(*sortcnt)++;
|
||||
}
|
||||
}
|
||||
if (fb>=0 && spr->z+spzofs > sector[sectnum].floorz)
|
||||
{
|
||||
sortcnt = &yax_spritesortcnt[yax_globallev+1];
|
||||
if (*sortcnt < MAXSPRITESONSCREEN)
|
||||
{
|
||||
yax_tsprite[yax_globallev+1][*sortcnt] = z|(MAXSPRITES<<1);
|
||||
(*sortcnt)++;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//
|
||||
// scansector (internal)
|
||||
//
|
||||
|
@ -2088,10 +2160,6 @@ static void scansector(int16_t sectnum)
|
|||
int32_t xs, ys, x1, y1, x2, y2, xp1, yp1, xp2=0, yp2=0, tempint;
|
||||
int16_t z, zz, startwall, endwall, numscansbefore, scanfirst, bunchfrst;
|
||||
int16_t nextsectnum;
|
||||
#ifdef YAX_ENABLE
|
||||
int16_t cb, fb, *sortcnt;
|
||||
int32_t spheight, spzofs;
|
||||
#endif
|
||||
|
||||
if (sectnum < 0) return;
|
||||
|
||||
|
@ -2112,60 +2180,8 @@ static void scansector(int16_t sectnum)
|
|||
{
|
||||
xs = spr->x-globalposx; ys = spr->y-globalposy;
|
||||
if ((spr->cstat&48) || (xs*cosglobalang+ys*singlobalang > 0))
|
||||
{
|
||||
#ifdef YAX_ENABLE
|
||||
if (g_nodraw==0)
|
||||
{
|
||||
#endif
|
||||
if (spritesortcnt >= MAXSPRITESONSCREEN)
|
||||
break;
|
||||
|
||||
copybufbyte(spr,&tsprite[spritesortcnt],sizeof(spritetype));
|
||||
spriteext[z].tspr = (spritetype *)&tsprite[spritesortcnt];
|
||||
tsprite[spritesortcnt++].owner = z;
|
||||
#ifdef YAX_ENABLE
|
||||
}
|
||||
else
|
||||
{
|
||||
sortcnt = &yax_spritesortcnt[yax_globallev];
|
||||
if (*sortcnt >= MAXSPRITESONSCREEN)
|
||||
break;
|
||||
|
||||
yax_tsprite[yax_globallev][*sortcnt] = z;
|
||||
(*sortcnt)++;
|
||||
|
||||
// now check whether the tsprite needs duplication into another level
|
||||
if ((spr->cstat&48)==32)
|
||||
continue;
|
||||
|
||||
yax_getbunches(sectnum, &cb, &fb);
|
||||
if (cb < 0 && fb < 0)
|
||||
continue;
|
||||
|
||||
spriteheightofs(z, &spheight, &spzofs);
|
||||
|
||||
// TODO: get*zofslope?
|
||||
if (cb>=0 && spr->z+spzofs-spheight < sector[sectnum].ceilingz)
|
||||
{
|
||||
sortcnt = &yax_spritesortcnt[yax_globallev-1];
|
||||
if (*sortcnt < MAXSPRITESONSCREEN)
|
||||
{
|
||||
yax_tsprite[yax_globallev-1][*sortcnt] = z|MAXSPRITES;
|
||||
(*sortcnt)++;
|
||||
}
|
||||
}
|
||||
if (fb>=0 && spr->z+spzofs > sector[sectnum].floorz)
|
||||
{
|
||||
sortcnt = &yax_spritesortcnt[yax_globallev+1];
|
||||
if (*sortcnt < MAXSPRITESONSCREEN)
|
||||
{
|
||||
yax_tsprite[yax_globallev+1][*sortcnt] = z|(MAXSPRITES<<1);
|
||||
(*sortcnt)++;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
if (engine_addtsprite(z, sectnum))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6979,6 +6995,19 @@ static void loadpalette(void)
|
|||
|
||||
kread(fil,palookup[globalpal],numpalookups<<8);
|
||||
kread(fil,transluc,65536);
|
||||
|
||||
if (crc32once((uint8_t *)transluc, 65536)==0x94a1fac6)
|
||||
{
|
||||
int32_t i;
|
||||
// fix up translucency table so that transluc(255,x)
|
||||
// and transluc(x,255) is black instead of purple
|
||||
for (i=0; i<256; i++)
|
||||
{
|
||||
transluc[(255<<8) + i] = transluc[i];
|
||||
transluc[255 + (i<<8)] = transluc[i<<8];
|
||||
}
|
||||
}
|
||||
|
||||
kclose(fil);
|
||||
|
||||
initfastcolorlookup(30L,59L,11L);
|
||||
|
@ -7676,7 +7705,7 @@ void drawrooms(int32_t daposx, int32_t daposy, int32_t daposz,
|
|||
if (!g_nodraw)
|
||||
#endif
|
||||
if (numyaxbunches==0)
|
||||
for (i=0; i<xdim*ydim; i++)
|
||||
for (i=0; i<xdimen*ydimen; i++)
|
||||
*((char *)frameplace + i) = i;
|
||||
#endif
|
||||
|
||||
|
@ -7948,7 +7977,7 @@ static inline int32_t sameside(_equation *eq, _point2d *p1, _point2d *p2
|
|||
//
|
||||
void drawmasks(void)
|
||||
{
|
||||
int32_t i, j, k, l, gap, xs, ys, xp, yp, yoff, yspan;
|
||||
int32_t i, j, k, l, gap, xs, ys, xp, yp, yoff, yspan, modelp=0;
|
||||
// PLAG: sorting stuff
|
||||
_equation maskeq, p1eq, p2eq;
|
||||
_point2d dot, dot2, middle, pos, spr;
|
||||
|
@ -7966,6 +7995,9 @@ void drawmasks(void)
|
|||
{
|
||||
xs = tspriteptr[i]->x-globalposx; ys = tspriteptr[i]->y-globalposy;
|
||||
yp = dmulscale6(xs,cosviewingrangeglobalang,ys,sinviewingrangeglobalang);
|
||||
#ifdef USE_OPENGL
|
||||
modelp = (usemodels && tile2model[tspriteptr[i]->picnum].modelid >= 0);
|
||||
#endif
|
||||
if (yp > (4<<8))
|
||||
{
|
||||
xp = dmulscale6(ys,cosglobalang,-xs,singlobalang);
|
||||
|
@ -7975,12 +8007,15 @@ void drawmasks(void)
|
|||
else if ((tspriteptr[i]->cstat&48) == 0)
|
||||
{
|
||||
killsprite:
|
||||
spritesortcnt--; //Delete face sprite if on wrong side!
|
||||
if (i == spritesortcnt) continue;
|
||||
tspriteptr[i] = tspriteptr[spritesortcnt];
|
||||
spritesx[i] = spritesx[spritesortcnt];
|
||||
spritesy[i] = spritesy[spritesortcnt];
|
||||
continue;
|
||||
if (!modelp)
|
||||
{
|
||||
spritesortcnt--; //Delete face sprite if on wrong side!
|
||||
if (i == spritesortcnt) continue;
|
||||
tspriteptr[i] = tspriteptr[spritesortcnt];
|
||||
spritesx[i] = spritesx[spritesortcnt];
|
||||
spritesy[i] = spritesy[spritesortcnt];
|
||||
continue;
|
||||
}
|
||||
}
|
||||
spritesy[i] = yp;
|
||||
}
|
||||
|
@ -13725,7 +13760,7 @@ void drawcircle16(int32_t x1, int32_t y1, int32_t r, int32_t eccen, char col)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
//
|
||||
// qsetmode640350
|
||||
//
|
||||
|
@ -13787,7 +13822,7 @@ void qsetmode640480(void)
|
|||
|
||||
qsetmode = 480;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
//
|
||||
// qsetmodeany
|
||||
|
|
|
@ -70,6 +70,24 @@ extern palette_t palookupfog[MAXPALOOKUPS];
|
|||
int32_t wallfront(int32_t l1, int32_t l2);
|
||||
int32_t animateoffs(int16_t tilenum, int16_t fakevar);
|
||||
|
||||
////// yax'y stuff //////
|
||||
#ifdef USE_OPENGL
|
||||
extern void polymost_scansector(int32_t sectnum);
|
||||
#endif
|
||||
int32_t engine_addtsprite(int16_t z, int16_t sectnum);
|
||||
int32_t scansector_retfast;
|
||||
|
||||
#ifdef YAX_DEBUG
|
||||
extern char m32_debugstr[64][128];
|
||||
extern int32_t m32_numdebuglines;
|
||||
# define yaxdebug(fmt, ...) do { if (m32_numdebuglines<64) Bsnprintf(m32_debugstr[m32_numdebuglines++], 128, fmt, ##__VA_ARGS__); } while (0)
|
||||
# define yaxprintf(fmt, ...) do { initprintf(fmt, ##__VA_ARGS__); } while (0)
|
||||
#else
|
||||
# define yaxdebug(fmt, ...)
|
||||
# define yaxprintf(fmt, ...)
|
||||
#endif
|
||||
|
||||
|
||||
extern int32_t indrawroomsandmasks;
|
||||
|
||||
|
||||
|
|
|
@ -3066,7 +3066,7 @@ void domost(float x0, float y0, float x1, float y1)
|
|||
}
|
||||
}
|
||||
|
||||
static void polymost_scansector(int32_t sectnum);
|
||||
void polymost_scansector(int32_t sectnum);
|
||||
|
||||
// variables that are set to ceiling- or floor-members, depending
|
||||
// on which one is processed right now
|
||||
|
@ -3219,6 +3219,10 @@ static void polymost_drawalls(int32_t bunch)
|
|||
int32_t i, x, y, z, cz, fz, wallnum, sectnum, nextsectnum;
|
||||
int32_t ypan,yoffs; // for panning correction
|
||||
|
||||
int16_t dapskybits;
|
||||
static const int16_t zeropskyoff[MAXPSKYTILES];
|
||||
const int16_t *dapskyoff;
|
||||
|
||||
sectnum = thesector[bunchfirst[bunch]]; sec = §or[sectnum];
|
||||
|
||||
#if 0 // USE_OPENGL
|
||||
|
@ -3289,17 +3293,36 @@ static void polymost_drawalls(int32_t bunch)
|
|||
cy1 = ((float)(cz-globalposz))*ryp1 + ghoriz;
|
||||
fy1 = ((float)(fz-globalposz))*ryp1 + ghoriz;
|
||||
|
||||
|
||||
globalpicnum = sec->floorpicnum; globalshade = sec->floorshade; globalpal = (int32_t)((uint8_t)sec->floorpal);
|
||||
globalorientation = sec->floorstat;
|
||||
if (picanm[globalpicnum]&192) globalpicnum += animateoffs(globalpicnum,sectnum);
|
||||
|
||||
// multi-psky stuff
|
||||
dapskyoff = zeropskyoff;
|
||||
dapskybits = pskybits;
|
||||
|
||||
for (i=0; i<pskynummultis; i++)
|
||||
{
|
||||
if (globalpicnum == pskymultilist[i])
|
||||
{
|
||||
dapskybits = pskymultibits[i];
|
||||
dapskyoff = pskymultioff[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
//
|
||||
|
||||
global_cf_shade = sec->floorshade, global_cf_pal = sec->floorpal; global_cf_z = sec->floorz; // REFACT
|
||||
global_cf_xpanning = sec->floorxpanning; global_cf_ypanning = sec->floorypanning, global_cf_heinum = sec->floorheinum;
|
||||
global_getzofslope_func = &getflorzofslope;
|
||||
|
||||
if (!(globalorientation&1))
|
||||
polymost_internal_nonparallaxed(nx0, ny0, nx1, ny1, ryp0, ryp1, x0, x1, fy0, fy1, 1, sectnum);
|
||||
{
|
||||
#ifdef YAX_ENABLE
|
||||
if (globalposz <= sec->floorz || yax_getbunch(sectnum, YAX_FLOOR) < 0 || yax_getnextwall(wallnum, YAX_FLOOR) >= 0)
|
||||
#endif
|
||||
polymost_internal_nonparallaxed(nx0, ny0, nx1, ny1, ryp0, ryp1, x0, x1, fy0, fy1, 1, sectnum);
|
||||
}
|
||||
else if ((nextsectnum < 0) || (!(sector[nextsectnum].floorstat&1)))
|
||||
{
|
||||
//Parallaxing sky... hacked for Ken's mountain texture; paper-sky only :/
|
||||
|
@ -3321,15 +3344,15 @@ static void polymost_drawalls(int32_t bunch)
|
|||
}
|
||||
|
||||
//Use clamping for tiled sky textures
|
||||
for (i=(1<<pskybits)-1; i>0; i--)
|
||||
if (pskyoff[i] != pskyoff[i-1])
|
||||
for (i=(1<<dapskybits)-1; i>0; i--)
|
||||
if (dapskyoff[i] != dapskyoff[i-1])
|
||||
{ skyclamphack = r_parallaxskyclamping; break; }
|
||||
}
|
||||
#endif
|
||||
if (bpp == 8 || !usehightile || !hicfindsubst(globalpicnum,globalpal,1))
|
||||
{
|
||||
dd[0] = (float)xdimen*.0000001; //Adjust sky depth based on screen size!
|
||||
t = (double)((1<<(picsiz[globalpicnum]&15))<<pskybits);
|
||||
t = (double)((1<<(picsiz[globalpicnum]&15))<<dapskybits);
|
||||
vv[1] = dd[0]*((double)xdimscale*(double)viewingrange)/(65536.0*65536.0);
|
||||
vv[0] = dd[0]*((double)((tilesizy[globalpicnum]>>1)+parallaxyoffs)) - vv[1]*ghoriz;
|
||||
i = (1<<(picsiz[globalpicnum]>>4)); if (i != tilesizy[globalpicnum]) i += i;
|
||||
|
@ -3364,20 +3387,19 @@ static void polymost_drawalls(int32_t bunch)
|
|||
i = globalpicnum; r = (fy1-fy0)/(x1-x0); //slope of line
|
||||
oy = ((double)viewingrange)/(ghalfx*256.0); oz = 1/oy;
|
||||
|
||||
y = ((((int32_t)((x0-ghalfx)*oy))+globalang)>>(11-pskybits));
|
||||
y = ((((int32_t)((x0-ghalfx)*oy))+globalang)>>(11-dapskybits));
|
||||
fx = x0;
|
||||
do
|
||||
{
|
||||
globalpicnum = pskyoff[y&((1<<pskybits)-1)]+i;
|
||||
guo = gdo*(t*((double)(globalang-(y<<(11-pskybits))))/2048.0 + (double)((r_parallaxskypanning)?sec->floorxpanning:0)) - gux*ghalfx;
|
||||
globalpicnum = dapskyoff[y&((1<<dapskybits)-1)]+i;
|
||||
guo = gdo*(t*((double)(globalang-(y<<(11-dapskybits))))/2048.0 + (double)((r_parallaxskypanning)?sec->floorxpanning:0)) - gux*ghalfx;
|
||||
y++;
|
||||
ox = fx; fx = ((double)((y<<(11-pskybits))-globalang))*oz+ghalfx;
|
||||
ox = fx; fx = ((double)((y<<(11-dapskybits))-globalang))*oz+ghalfx;
|
||||
if (fx > x1) { fx = x1; i = -1; }
|
||||
|
||||
pow2xsplit = 0; domost(ox,(ox-x0)*r+fy0,fx,(fx-x0)*r+fy0); //flor
|
||||
}
|
||||
while (i >= 0);
|
||||
|
||||
}
|
||||
else //NOTE: code copied from ceiling code... lots of duplicated stuff :/
|
||||
{
|
||||
|
@ -3567,12 +3589,32 @@ static void polymost_drawalls(int32_t bunch)
|
|||
globalorientation = sec->ceilingstat;
|
||||
if (picanm[globalpicnum]&192) globalpicnum += animateoffs(globalpicnum,sectnum);
|
||||
|
||||
// multi-psky stuff
|
||||
dapskyoff = zeropskyoff;
|
||||
dapskybits = pskybits;
|
||||
|
||||
for (i=0; i<pskynummultis; i++)
|
||||
{
|
||||
if (globalpicnum == pskymultilist[i])
|
||||
{
|
||||
dapskybits = pskymultibits[i];
|
||||
dapskyoff = pskymultioff[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
//
|
||||
|
||||
global_cf_shade = sec->ceilingshade, global_cf_pal = sec->ceilingpal; global_cf_z = sec->ceilingz; // REFACT
|
||||
global_cf_xpanning = sec->ceilingxpanning; global_cf_ypanning = sec->ceilingypanning, global_cf_heinum = sec->ceilingheinum;
|
||||
global_getzofslope_func = &getceilzofslope;
|
||||
|
||||
if (!(globalorientation&1))
|
||||
polymost_internal_nonparallaxed(nx0, ny0, nx1, ny1, ryp0, ryp1, x0, x1, cy0, cy1, 0, sectnum);
|
||||
{
|
||||
#ifdef YAX_ENABLE
|
||||
if (globalposz >= sec->ceilingz || yax_getbunch(sectnum, YAX_CEILING) < 0 || yax_getnextwall(wallnum, YAX_CEILING) >= 0)
|
||||
#endif
|
||||
polymost_internal_nonparallaxed(nx0, ny0, nx1, ny1, ryp0, ryp1, x0, x1, cy0, cy1, 0, sectnum);
|
||||
}
|
||||
else if ((nextsectnum < 0) || (!(sector[nextsectnum].ceilingstat&1)))
|
||||
{
|
||||
#ifdef USE_OPENGL
|
||||
|
@ -3592,8 +3634,8 @@ static void polymost_drawalls(int32_t bunch)
|
|||
bglFogfv(GL_FOG_COLOR,fogcol);
|
||||
}
|
||||
//Use clamping for tiled sky textures
|
||||
for (i=(1<<pskybits)-1; i>0; i--)
|
||||
if (pskyoff[i] != pskyoff[i-1])
|
||||
for (i=(1<<dapskybits)-1; i>0; i--)
|
||||
if (dapskyoff[i] != dapskyoff[i-1])
|
||||
{ skyclamphack = r_parallaxskyclamping; break; }
|
||||
}
|
||||
#endif
|
||||
|
@ -3602,7 +3644,7 @@ static void polymost_drawalls(int32_t bunch)
|
|||
{
|
||||
//Render for parallaxtype == 0 / paper-sky
|
||||
dd[0] = (float)xdimen*.0000001; //Adjust sky depth based on screen size!
|
||||
t = (double)((1<<(picsiz[globalpicnum]&15))<<pskybits);
|
||||
t = (double)((1<<(picsiz[globalpicnum]&15))<<dapskybits);
|
||||
vv[1] = dd[0]*((double)xdimscale*(double)viewingrange)/(65536.0*65536.0);
|
||||
vv[0] = dd[0]*((double)((tilesizy[globalpicnum]>>1)+parallaxyoffs)) - vv[1]*ghoriz;
|
||||
i = (1<<(picsiz[globalpicnum]>>4)); if (i != tilesizy[globalpicnum]) i += i;
|
||||
|
@ -3636,14 +3678,14 @@ static void polymost_drawalls(int32_t bunch)
|
|||
i = globalpicnum; r = (cy1-cy0)/(x1-x0); //slope of line
|
||||
oy = ((double)viewingrange)/(ghalfx*256.0); oz = 1/oy;
|
||||
|
||||
y = ((((int32_t)((x0-ghalfx)*oy))+globalang)>>(11-pskybits));
|
||||
y = ((((int32_t)((x0-ghalfx)*oy))+globalang)>>(11-dapskybits));
|
||||
fx = x0;
|
||||
do
|
||||
{
|
||||
globalpicnum = pskyoff[y&((1<<pskybits)-1)]+i;
|
||||
guo = gdo*(t*((double)(globalang-(y<<(11-pskybits))))/2048.0 + (double)((r_parallaxskypanning)?sec->ceilingxpanning:0)) - gux*ghalfx;
|
||||
globalpicnum = dapskyoff[y&((1<<dapskybits)-1)]+i;
|
||||
guo = gdo*(t*((double)(globalang-(y<<(11-dapskybits))))/2048.0 + (double)((r_parallaxskypanning)?sec->ceilingxpanning:0)) - gux*ghalfx;
|
||||
y++;
|
||||
ox = fx; fx = ((double)((y<<(11-pskybits))-globalang))*oz+ghalfx;
|
||||
ox = fx; fx = ((double)((y<<(11-dapskybits))-globalang))*oz+ghalfx;
|
||||
if (fx > x1) { fx = x1; i = -1; }
|
||||
pow2xsplit = 0; domost(fx,(fx-x0)*r+cy0,ox,(ox-x0)*r+cy0); //ceil
|
||||
}
|
||||
|
@ -4068,7 +4110,7 @@ static int32_t polymost_bunchfront(int32_t b1, int32_t b2)
|
|||
return(wallfront(i,b2f));
|
||||
}
|
||||
|
||||
static void polymost_scansector(int32_t sectnum)
|
||||
void polymost_scansector(int32_t sectnum)
|
||||
{
|
||||
double d, xp1, yp1, xp2, yp2;
|
||||
walltype *wal, *wal2;
|
||||
|
@ -4088,15 +4130,13 @@ static void polymost_scansector(int32_t sectnum)
|
|||
{
|
||||
spr = &sprite[z];
|
||||
if ((((spr->cstat&0x8000) == 0) || (showinvisibility)) &&
|
||||
(spr->xrepeat > 0) && (spr->yrepeat > 0) &&
|
||||
(spritesortcnt < MAXSPRITESONSCREEN))
|
||||
(spr->xrepeat > 0) && (spr->yrepeat > 0))
|
||||
{
|
||||
xs = spr->x-globalposx; ys = spr->y-globalposy;
|
||||
if ((spr->cstat&48) || (xs*gcosang+ys*gsinang > 0))
|
||||
if ((spr->cstat&48) || (xs*gcosang+ys*gsinang > 0) || (usemodels && tile2model[spr->picnum].modelid>=0))
|
||||
{
|
||||
copybufbyte(spr,&tsprite[spritesortcnt],sizeof(spritetype));
|
||||
spriteext[z].tspr = (spritetype *)&tsprite[spritesortcnt];
|
||||
tsprite[spritesortcnt++].owner = z;
|
||||
if (engine_addtsprite(z, sectnum))
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4119,7 +4159,7 @@ static void polymost_scansector(int32_t sectnum)
|
|||
if ((nextsectnum >= 0) && (!(wal->cstat&32)) && (!(gotsector[nextsectnum>>3]&pow2char[nextsectnum&7])))
|
||||
{
|
||||
d = (double)x1*(double)y2 - (double)x2*(double)y1; xp1 = (double)(x2-x1); yp1 = (double)(y2-y1);
|
||||
if (d *d <= (xp1*xp1 + yp1*yp1)*(SCISDIST*SCISDIST*260.0))
|
||||
if (d*d <= (xp1*xp1 + yp1*yp1)*(SCISDIST*SCISDIST*260.0))
|
||||
sectorborder[sectorbordercnt++] = nextsectnum;
|
||||
}
|
||||
|
||||
|
@ -4152,7 +4192,13 @@ static void polymost_scansector(int32_t sectnum)
|
|||
|
||||
for (z=numscansbefore; z<numscans; z++)
|
||||
if ((wall[thewall[z]].point2 != thewall[p2[z]]) || (dxb2[z] > dxb1[p2[z]]))
|
||||
{ bunchfirst[numbunches++] = p2[z]; p2[z] = -1; }
|
||||
{
|
||||
bunchfirst[numbunches++] = p2[z]; p2[z] = -1;
|
||||
#ifdef YAX_ENABLE
|
||||
if (scansector_retfast)
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
|
||||
for (z=bunchfrst; z<numbunches; z++)
|
||||
{
|
||||
|
|
|
@ -3861,50 +3861,10 @@ static int32_t OnSaveTileGroup(void)
|
|||
|
||||
static int32_t OnGotoTile(int32_t iTile)
|
||||
{
|
||||
int32_t iTemp, iNewTile;
|
||||
char ch;
|
||||
char szTemp[128];
|
||||
|
||||
//Automatically press 'V'
|
||||
iTile = SelectAllTiles(iTile);
|
||||
|
||||
bflushchars();
|
||||
|
||||
iNewTile = iTemp = 0; //iTile; //PK
|
||||
|
||||
while (keystatus[KEYSC_ESC] == 0)
|
||||
{
|
||||
if (handleevents())
|
||||
quitevent = 0;
|
||||
|
||||
idle_waitevent();
|
||||
|
||||
ch = bgetchar();
|
||||
|
||||
Bsprintf(szTemp, "Goto tile: %d_ ", iNewTile);
|
||||
printext256(0, 0, whitecol, 0, szTemp, 0);
|
||||
showframe(1);
|
||||
|
||||
if (ch >= '0' && ch <= '9')
|
||||
{
|
||||
iTemp = (iNewTile*10) + (ch-'0');
|
||||
if (iTemp < MAXTILES)
|
||||
iNewTile = iTemp;
|
||||
}
|
||||
else if (ch == 8)
|
||||
{
|
||||
iNewTile /= 10;
|
||||
}
|
||||
else if (ch == 13)
|
||||
{
|
||||
iTile = iNewTile;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
clearkeys();
|
||||
|
||||
return iTile;
|
||||
return getnumber256("Goto tile: ", 0, MAXTILES-1, 0+2+16);
|
||||
}
|
||||
|
||||
|
||||
|
@ -7923,14 +7883,14 @@ static void Keys2d(void)
|
|||
j = 0;
|
||||
x = wall[sector[i].wallptr].x;
|
||||
y = wall[sector[i].wallptr].y;
|
||||
z = sector[i].floorz;
|
||||
z = getflorzofslope(i, x, y);
|
||||
break;
|
||||
case CORRUPT_WALL:
|
||||
i = k&(MAXWALLS-1);
|
||||
j = 1;
|
||||
x = wall[i].x;
|
||||
y = wall[i].y;
|
||||
z = sector[sectorofwall(i)].floorz;
|
||||
z = getflorzofslope(sectorofwall(i), x, y);
|
||||
break;
|
||||
case CORRUPT_SPRITE:
|
||||
i = k&(MAXSPRITES-1);
|
||||
|
|
|
@ -750,7 +750,7 @@ int32_t CONFIG_ReadSetup(void)
|
|||
Bsprintf(buf,"WeaponChoice%d",i);
|
||||
dummy = -1;
|
||||
SCRIPT_GetNumber(ud.config.scripthandle, "Misc", buf, &dummy);
|
||||
if (dummy >= 0) g_player[0].wchoice[i] = dummy;
|
||||
if (dummy >= 0 && dummy<10) g_player[0].wchoice[i] = dummy;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
|
|
|
@ -2533,6 +2533,27 @@ static void G_ShowScores(void)
|
|||
}
|
||||
#undef SCORESHEETOFFSET
|
||||
|
||||
#ifdef YAX_DEBUG
|
||||
// ugh...
|
||||
char m32_debugstr[64][128];
|
||||
int32_t m32_numdebuglines=0;
|
||||
|
||||
static void M32_drawdebug(void)
|
||||
{
|
||||
int i, col=getclosestcol(63,63,63);
|
||||
int x=4, y=8;
|
||||
|
||||
if (m32_numdebuglines>0)
|
||||
{
|
||||
begindrawing();
|
||||
for (i=0; i<m32_numdebuglines && y<ydim-8; i++, y+=8)
|
||||
printext256(x,y,col,0,m32_debugstr[i],xdim>640?0:1);
|
||||
enddrawing();
|
||||
}
|
||||
m32_numdebuglines=0;
|
||||
}
|
||||
#endif
|
||||
|
||||
void G_DisplayRest(int32_t smoothratio)
|
||||
{
|
||||
int32_t a, i, j;
|
||||
|
@ -2800,6 +2821,10 @@ void G_DisplayRest(int32_t smoothratio)
|
|||
if (ud.coords)
|
||||
G_PrintCoords(screenpeek);
|
||||
|
||||
#ifdef YAX_DEBUG
|
||||
M32_drawdebug();
|
||||
#endif
|
||||
|
||||
#ifdef USE_OPENGL
|
||||
{
|
||||
extern int32_t mdpause;
|
||||
|
@ -3473,10 +3498,17 @@ void G_DrawRooms(int32_t snum, int32_t smoothratio)
|
|||
j = visibility;
|
||||
visibility = (j>>1) + (j>>2);
|
||||
|
||||
yax_preparedrawrooms();
|
||||
drawrooms(tposx,tposy,ud.camera.z,tang,ud.camerahoriz,g_mirrorSector[i]+MAXSECTORS);
|
||||
g_yax_smoothratio = smoothratio;
|
||||
yax_drawrooms(G_AnalyzeSprites, ud.camerahoriz, g_mirrorSector[i]+MAXSECTORS);
|
||||
if (getrendermode()==0)
|
||||
{
|
||||
yax_preparedrawrooms();
|
||||
drawrooms(tposx,tposy,ud.camera.z,tang,ud.camerahoriz,g_mirrorSector[i]+MAXSECTORS);
|
||||
g_yax_smoothratio = smoothratio;
|
||||
yax_drawrooms(G_AnalyzeSprites, ud.camerahoriz, g_mirrorSector[i]+MAXSECTORS);
|
||||
}
|
||||
#ifdef USE_OPENGL
|
||||
else
|
||||
drawrooms(tposx,tposy,ud.camera.z,tang,ud.camerahoriz,g_mirrorSector[i]+MAXSECTORS);
|
||||
#endif
|
||||
|
||||
display_mirror = 1;
|
||||
G_DoSpriteAnimations(tposx,tposy,tang,smoothratio);
|
||||
|
|
|
@ -1856,7 +1856,7 @@ static int32_t C_CountCaseStatements()
|
|||
|
||||
static int32_t C_ParseCommand(int32_t loop)
|
||||
{
|
||||
int32_t i, j=0, k=0, done, tw, otw;
|
||||
int32_t i, j=0, k=0, tw, otw;
|
||||
char *temptextptr;
|
||||
intptr_t *tempscrptr = NULL;
|
||||
|
||||
|
|
|
@ -496,6 +496,10 @@ const memberlabel_t SpriteLabels[]=
|
|||
{ "", -1, 0, 0, 0 } // END OF LIST
|
||||
};
|
||||
|
||||
#ifndef POLYMER
|
||||
# define PR_MAXLIGHTPRIORITY 6
|
||||
#endif
|
||||
|
||||
const memberlabel_t LightLabels[]=
|
||||
{
|
||||
{ "x", LIGHT_X, 0, -BXY_MAX, BXY_MAX },
|
||||
|
@ -1103,9 +1107,7 @@ static void C_GetNextVarType(int32_t type)
|
|||
if (*textptr == '[') //read of array as a gamevar
|
||||
{
|
||||
int32_t lLabelID = -1, aridx;
|
||||
#ifdef POLYMER
|
||||
int32_t lightp = 0;
|
||||
#endif
|
||||
|
||||
textptr++;
|
||||
flags |= M32_FLAG_ARRAY;
|
||||
|
|
|
@ -5355,11 +5355,7 @@ HORIZONLY:
|
|||
{
|
||||
p->pos.x += p->vel.x>>14;
|
||||
p->pos.y += p->vel.y>>14;
|
||||
#ifdef YAX_ENABLE
|
||||
updatesectorz(p->pos.x,p->pos.y,p->pos.z,&p->cursectnum);
|
||||
#else
|
||||
updatesector(p->pos.x,p->pos.y,&p->cursectnum);
|
||||
#endif
|
||||
changespritesect(p->i,p->cursectnum);
|
||||
}
|
||||
else
|
||||
|
|
Loading…
Reference in a new issue