mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-15 08:52:00 +00:00
- sectnum reduction.
This commit is contained in:
parent
4c13f24357
commit
a22634f228
10 changed files with 46 additions and 40 deletions
|
@ -44,6 +44,7 @@ void renderPrepareMirror(int32_t dax, int32_t day, int32_t daz, fixed_t daang,
|
||||||
void renderCompleteMirror(void);
|
void renderCompleteMirror(void);
|
||||||
|
|
||||||
int32_t renderDrawRoomsQ16(int32_t daposx, int32_t daposy, int32_t daposz, fixed_t daang, fixed_t dahoriz, int dacursectnum, bool fromoutside);
|
int32_t renderDrawRoomsQ16(int32_t daposx, int32_t daposy, int32_t daposz, fixed_t daang, fixed_t dahoriz, int dacursectnum, bool fromoutside);
|
||||||
|
int32_t renderDrawRoomsQ16(int32_t daposx, int32_t daposy, int32_t daposz, fixed_t daang, fixed_t dahoriz, sectortype* dacursect, bool fromoutside);
|
||||||
|
|
||||||
void renderDrawMasks(void);
|
void renderDrawMasks(void);
|
||||||
|
|
||||||
|
|
|
@ -225,7 +225,7 @@ static int32_t engineLoadTables(void)
|
||||||
|
|
||||||
///// sector lists of sprites /////
|
///// sector lists of sprites /////
|
||||||
|
|
||||||
// insert sprite at the head of sector list, change .sectnum
|
// insert sprite at the head of sector list, change sectnum
|
||||||
static void do_insertsprite_at_headofsect(int16_t spritenum, int16_t sectnum)
|
static void do_insertsprite_at_headofsect(int16_t spritenum, int16_t sectnum)
|
||||||
{
|
{
|
||||||
int16_t const ohead = headspritesect[sectnum];
|
int16_t const ohead = headspritesect[sectnum];
|
||||||
|
@ -344,7 +344,7 @@ int32_t deletesprite(int16_t spritenum)
|
||||||
do_deletespritesect(spritenum);
|
do_deletespritesect(spritenum);
|
||||||
|
|
||||||
// (dummy) insert at tail of sector freelist, compat
|
// (dummy) insert at tail of sector freelist, compat
|
||||||
// for code that checks .sectnum==MAXSECTOR
|
// for code that checks sectnum==MAXSECTOR
|
||||||
sprite[spritenum].sectnum = MAXSECTORS;
|
sprite[spritenum].sectnum = MAXSECTORS;
|
||||||
|
|
||||||
// insert at tail of status freelist
|
// insert at tail of status freelist
|
||||||
|
@ -769,34 +769,34 @@ int32_t spriteheightofsptr(uspriteptr_t spr, int32_t *height, int32_t alsotileyo
|
||||||
//
|
//
|
||||||
int32_t setsprite(int16_t spritenum, const vec3_t *newpos)
|
int32_t setsprite(int16_t spritenum, const vec3_t *newpos)
|
||||||
{
|
{
|
||||||
int tempsectnum = sprite[spritenum].sectnum;
|
auto tempsector = sprite[spritenum].sector();
|
||||||
|
|
||||||
if (newpos != &sprite[spritenum].pos)
|
if (newpos != &sprite[spritenum].pos)
|
||||||
sprite[spritenum].pos = *newpos;
|
sprite[spritenum].pos = *newpos;
|
||||||
|
|
||||||
updatesector(newpos->x,newpos->y,&tempsectnum);
|
updatesector(newpos->x,newpos->y,&tempsector);
|
||||||
|
|
||||||
if (tempsectnum < 0)
|
if (tempsector == nullptr)
|
||||||
return -1;
|
return -1;
|
||||||
if (tempsectnum != sprite[spritenum].sectnum)
|
if (tempsector != sprite[spritenum].sector())
|
||||||
changespritesect(spritenum,tempsectnum);
|
changespritesect(spritenum, sectnum(tempsector));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t setspritez(int16_t spritenum, const vec3_t *newpos)
|
int32_t setspritez(int16_t spritenum, const vec3_t *newpos)
|
||||||
{
|
{
|
||||||
int tempsectnum = sprite[spritenum].sectnum;
|
auto tempsectnum = sprite[spritenum].sector();
|
||||||
|
|
||||||
if ((void const *)newpos != (void *)&sprite[spritenum])
|
if ((void const *)newpos != (void *)&sprite[spritenum])
|
||||||
sprite[spritenum].pos = *newpos;
|
sprite[spritenum].pos = *newpos;
|
||||||
|
|
||||||
updatesectorz(newpos->x,newpos->y,newpos->z,&tempsectnum);
|
updatesectorz(newpos->x,newpos->y,newpos->z,&tempsectnum);
|
||||||
|
|
||||||
if (tempsectnum < 0)
|
if (tempsectnum == nullptr)
|
||||||
return -1;
|
return -1;
|
||||||
if (tempsectnum != sprite[spritenum].sectnum)
|
if (tempsectnum != sprite[spritenum].sector())
|
||||||
changespritesect(spritenum,tempsectnum);
|
changespritesect(spritenum, sectnum(tempsectnum));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3306,6 +3306,11 @@ void renderCompleteMirror(void)
|
||||||
//
|
//
|
||||||
EXTERN_CVAR(Int, gl_fogmode)
|
EXTERN_CVAR(Int, gl_fogmode)
|
||||||
|
|
||||||
|
int32_t renderDrawRoomsQ16(int32_t daposx, int32_t daposy, int32_t daposz, fixed_t daang, fixed_t dahoriz, sectortype* dacursect, bool fromoutside)
|
||||||
|
{
|
||||||
|
if (dacursect) return renderDrawRoomsQ16(daposx, daposy, daposz, daang, dahoriz, sectnum(dacursect), fromoutside);
|
||||||
|
}
|
||||||
|
|
||||||
int32_t renderDrawRoomsQ16(int32_t daposx, int32_t daposy, int32_t daposz,
|
int32_t renderDrawRoomsQ16(int32_t daposx, int32_t daposy, int32_t daposz,
|
||||||
fixed_t daang, fixed_t dahoriz, int dacursectnum, bool fromoutside)
|
fixed_t daang, fixed_t dahoriz, int dacursectnum, bool fromoutside)
|
||||||
{
|
{
|
||||||
|
|
|
@ -302,7 +302,7 @@ void HWDrawInfo::DispatchSprites()
|
||||||
{
|
{
|
||||||
HWSprite hwsprite;
|
HWSprite hwsprite;
|
||||||
int num = tiletovox[tilenum];
|
int num = tiletovox[tilenum];
|
||||||
if (hwsprite.ProcessVoxel(this, voxmodels[num], tspr, §or[tspr->sectnum], voxrotate[num]))
|
if (hwsprite.ProcessVoxel(this, voxmodels[num], tspr, tspr->sector(), voxrotate[num]))
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if ((tspr->cstat & CSTAT_SPRITE_ALIGNMENT) == CSTAT_SPRITE_ALIGNMENT_SLAB && tspr->picnum < MAXVOXELS && voxmodels[tilenum])
|
else if ((tspr->cstat & CSTAT_SPRITE_ALIGNMENT) == CSTAT_SPRITE_ALIGNMENT_SLAB && tspr->picnum < MAXVOXELS && voxmodels[tilenum])
|
||||||
|
|
|
@ -233,7 +233,7 @@ static void fakeProcessInput(PLAYER *pPlayer, InputPacket *pInput)
|
||||||
predict.at24 = 0;
|
predict.at24 = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int nSector = predict.sectnum;
|
int nSector = predict.sector;
|
||||||
int florhit = predict.at75.florhit.type;
|
int florhit = predict.at75.florhit.type;
|
||||||
bool va = (predict.floordist < 16 && (florhit == kHitSector || florhit == 0));
|
bool va = (predict.floordist < 16 && (florhit == kHitSector || florhit == 0));
|
||||||
|
|
||||||
|
@ -277,12 +277,12 @@ void fakePlayerProcess(PLAYER *pPlayer, InputPacket *pInput)
|
||||||
int dzt = (predict.z-top)/4;
|
int dzt = (predict.z-top)/4;
|
||||||
|
|
||||||
int dw = pSprite->clipdist<<2;
|
int dw = pSprite->clipdist<<2;
|
||||||
int nSector = predict.sectnum;
|
int nSector = predict.sector;
|
||||||
if (!gNoClip)
|
if (!gNoClip)
|
||||||
{
|
{
|
||||||
pushmove(&predict.pos, &predict.sectnum, dw, dzt, dzb, CLIPMASK0);
|
pushmove(&predict.pos, &predict.sector, dw, dzt, dzb, CLIPMASK0);
|
||||||
if (predict.sectnum == -1)
|
if (predict.sector == -1)
|
||||||
predict.sectnum = nSector;
|
predict.sector = nSector;
|
||||||
}
|
}
|
||||||
fakeProcessInput(pPlayer, pInput);
|
fakeProcessInput(pPlayer, pInput);
|
||||||
|
|
||||||
|
@ -346,7 +346,7 @@ void fakePlayerProcess(PLAYER *pPlayer, InputPacket *pInput)
|
||||||
if (predict.at48 == 1)
|
if (predict.at48 == 1)
|
||||||
{
|
{
|
||||||
predict.at72 = 1;
|
predict.at72 = 1;
|
||||||
int nSector = predict.sectnum;
|
int nSector = predict.sector;
|
||||||
auto nLink = getLowerLink(nSector);
|
auto nLink = getLowerLink(nSector);
|
||||||
if (nLink && (nLink->s().type == kMarkerLowGoo || nLink->s().type == kMarkerLowWater))
|
if (nLink && (nLink->s().type == kMarkerLowGoo || nLink->s().type == kMarkerLowWater))
|
||||||
{
|
{
|
||||||
|
@ -371,7 +371,7 @@ static void fakeMoveDude(spritetype *pSprite)
|
||||||
int bz = (bottom-predict.z)/4;
|
int bz = (bottom-predict.z)/4;
|
||||||
int tz = (predict.z-top)/4;
|
int tz = (predict.z-top)/4;
|
||||||
int wd = pSprite->clipdist*4;
|
int wd = pSprite->clipdist*4;
|
||||||
int nSector = predict.sectnum;
|
int nSector = predict.sector;
|
||||||
assert(validSectorIndex(nSector));
|
assert(validSectorIndex(nSector));
|
||||||
if (predict.xvel || predict.yvel)
|
if (predict.xvel || predict.yvel)
|
||||||
{
|
{
|
||||||
|
@ -380,7 +380,7 @@ static void fakeMoveDude(spritetype *pSprite)
|
||||||
predict.x += predict.xvel>>12;
|
predict.x += predict.xvel>>12;
|
||||||
predict.y += predict.yvel>>12;
|
predict.y += predict.yvel>>12;
|
||||||
if (!FindSector(predict.x, predict.y, &nSector))
|
if (!FindSector(predict.x, predict.y, &nSector))
|
||||||
nSector = predict.sectnum;
|
nSector = predict.sector;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -388,7 +388,7 @@ static void fakeMoveDude(spritetype *pSprite)
|
||||||
pSprite->cstat &= ~257;
|
pSprite->cstat &= ~257;
|
||||||
ClipMove(&predict.pos, &nSector, predict.xvel >> 12, predict.yvel >> 12, wd, tz, bz, CLIPMASK0, predict.at75.hit);
|
ClipMove(&predict.pos, &nSector, predict.xvel >> 12, predict.yvel >> 12, wd, tz, bz, CLIPMASK0, predict.at75.hit);
|
||||||
if (nSector == -1)
|
if (nSector == -1)
|
||||||
nSector = predict.sectnum;
|
nSector = predict.sector;
|
||||||
|
|
||||||
if (sector[nSector].type >= kSectorPath && sector[nSector].type <= kSectorRotate)
|
if (sector[nSector].type >= kSectorPath && sector[nSector].type <= kSectorRotate)
|
||||||
{
|
{
|
||||||
|
@ -421,16 +421,16 @@ static void fakeMoveDude(spritetype *pSprite)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (predict.sectnum != nSector)
|
if (predict.sector != nSector)
|
||||||
{
|
{
|
||||||
assert(validSectorIndex(nSector));
|
assert(validSectorIndex(nSector));
|
||||||
predict.sectnum = nSector;
|
predict.sector = nSector;
|
||||||
}
|
}
|
||||||
bool bUnderwater = 0;
|
bool bUnderwater = 0;
|
||||||
bool bDepth = 0;
|
bool bDepth = 0;
|
||||||
if (sector[sectnum].hasX())
|
if (sector[sector].hasX())
|
||||||
{
|
{
|
||||||
XSECTOR *pXSector = §or[sectnum].xs();
|
XSECTOR *pXSector = §or[sector].xs();
|
||||||
if (pXSector->Underwater)
|
if (pXSector->Underwater)
|
||||||
bUnderwater = 1;
|
bUnderwater = 1;
|
||||||
if (pXSector->Depth)
|
if (pXSector->Depth)
|
||||||
|
@ -454,7 +454,7 @@ static void fakeMoveDude(spritetype *pSprite)
|
||||||
pTempSprite->x = predict.x;
|
pTempSprite->x = predict.x;
|
||||||
pTempSprite->y = predict.y;
|
pTempSprite->y = predict.y;
|
||||||
pTempSprite->z = predict.z;
|
pTempSprite->z = predict.z;
|
||||||
pTempSprite-> sectnum = predict. sectnum;
|
pTempSprite-> sector = predict. sector;
|
||||||
int ceilZ, floorZ;
|
int ceilZ, floorZ;
|
||||||
Collision ceilColl, floorColl;
|
Collision ceilColl, floorColl;
|
||||||
GetZRange(pTempSprite, &ceilZ, &ceilColl, &floorZ, &floorColl, wd, CLIPMASK0);
|
GetZRange(pTempSprite, &ceilZ, &ceilColl, &floorZ, &floorColl, wd, CLIPMASK0);
|
||||||
|
@ -575,8 +575,8 @@ static void fakeActAirDrag(spritetype *, int num)
|
||||||
#if 0
|
#if 0
|
||||||
int xvec = 0;
|
int xvec = 0;
|
||||||
int yvec = 0;
|
int yvec = 0;
|
||||||
assert(validSectorIndex(predict.sectnum));
|
assert(validSectorIndex(predict.sector));
|
||||||
sectortype *pSector = §or[predict.sectnum];
|
sectortype *pSector = §or[predict.sector];
|
||||||
if (pSector->hasX())
|
if (pSector->hasX())
|
||||||
{
|
{
|
||||||
XSECTOR *pXSector = &pSector->xs();
|
XSECTOR *pXSector = &pSector->xs();
|
||||||
|
@ -601,8 +601,8 @@ void fakeActProcessSprites(void)
|
||||||
spritetype *pSprite = gMe->pSprite;
|
spritetype *pSprite = gMe->pSprite;
|
||||||
if (pSprite->statnum == kStatDude)
|
if (pSprite->statnum == kStatDude)
|
||||||
{
|
{
|
||||||
int nSector = predict.sectnum;
|
int nSector = predict.sector;
|
||||||
auto pSector = §or[predict.sectnum];
|
auto pSector = §or[predict.sector];
|
||||||
auto pXSector = pSector->hasX()? &pSector->xs() : nullptr;
|
auto pXSector = pSector->hasX()? &pSector->xs() : nullptr;
|
||||||
if (pXSector)
|
if (pXSector)
|
||||||
{
|
{
|
||||||
|
|
|
@ -91,7 +91,7 @@ void SE40_Draw(int tag, spritetype *spr, int x, int y, int z, binangle a, fixedh
|
||||||
offx = x - floor1->x;
|
offx = x - floor1->x;
|
||||||
offy = y - floor1->y;
|
offy = y - floor1->y;
|
||||||
|
|
||||||
renderDrawRoomsQ16(floor2->x + offx, floor2->y + offy, z, a.asq16(), h.asq16(), floor2->sectnum, false);
|
renderDrawRoomsQ16(floor2->x + offx, floor2->y + offy, z, a.asq16(), h.asq16(), floor2->sector(), false);
|
||||||
fi.animatesprites(pm_tsprite, pm_spritesortcnt, offx + floor2->x, offy + floor2->y, a.asbuild(), smoothratio);
|
fi.animatesprites(pm_tsprite, pm_spritesortcnt, offx + floor2->x, offy + floor2->y, a.asbuild(), smoothratio);
|
||||||
renderDrawMasks();
|
renderDrawMasks();
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ BEGIN_DUKE_NS
|
||||||
//
|
//
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
void renderView(spritetype* playersprite, int sectnum, int x, int y, int z, binangle a, fixedhoriz h, binangle rotscrnang, int smoothratio)
|
void renderView(spritetype* playersprite, sectortype* sect, int x, int y, int z, binangle a, fixedhoriz h, binangle rotscrnang, int smoothratio)
|
||||||
{
|
{
|
||||||
if (!testnewrenderer)
|
if (!testnewrenderer)
|
||||||
{
|
{
|
||||||
|
@ -73,13 +73,13 @@ void renderView(spritetype* playersprite, int sectnum, int x, int y, int z, bina
|
||||||
|
|
||||||
se40code(x, y, z, a, h, smoothratio);
|
se40code(x, y, z, a, h, smoothratio);
|
||||||
renderMirror(x, y, z, a, h, smoothratio);
|
renderMirror(x, y, z, a, h, smoothratio);
|
||||||
renderDrawRoomsQ16(x, y, z, a.asq16(), h.asq16(), sectnum, false);
|
renderDrawRoomsQ16(x, y, z, a.asq16(), h.asq16(), sect, false);
|
||||||
fi.animatesprites(pm_tsprite, pm_spritesortcnt, x, y, a.asbuild(), smoothratio);
|
fi.animatesprites(pm_tsprite, pm_spritesortcnt, x, y, a.asbuild(), smoothratio);
|
||||||
renderDrawMasks();
|
renderDrawMasks();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
render_drawrooms(playersprite, { x, y, z }, sectnum, a, h, rotscrnang, smoothratio);
|
render_drawrooms(playersprite, { x, y, z }, sectnum(sect), a, h, rotscrnang, smoothratio);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ void GameInterface::UpdateCameras(double smoothratio)
|
||||||
if (!testnewrenderer)
|
if (!testnewrenderer)
|
||||||
{
|
{
|
||||||
// Note: no ROR or camera here - Polymost has no means to detect these things before rendering the scene itself.
|
// Note: no ROR or camera here - Polymost has no means to detect these things before rendering the scene itself.
|
||||||
renderDrawRoomsQ16(camera->x, camera->y, camera->z, ang.asq16(), IntToFixed(camera->shade), camera->sectnum, false); // why 'shade'...?
|
renderDrawRoomsQ16(camera->x, camera->y, camera->z, ang.asq16(), IntToFixed(camera->shade), camera->sector(), false); // why 'shade'...?
|
||||||
fi.animatesprites(pm_tsprite, pm_spritesortcnt, camera->x, camera->y, ang.asbuild(), (int)smoothratio);
|
fi.animatesprites(pm_tsprite, pm_spritesortcnt, camera->x, camera->y, ang.asbuild(), (int)smoothratio);
|
||||||
renderDrawMasks();
|
renderDrawMasks();
|
||||||
}
|
}
|
||||||
|
@ -292,7 +292,7 @@ void displayrooms(int snum, double smoothratio)
|
||||||
cang = buildang(interpolatedangle(ud.cameraactor->tempang, s->ang, smoothratio));
|
cang = buildang(interpolatedangle(ud.cameraactor->tempang, s->ang, smoothratio));
|
||||||
|
|
||||||
auto bh = buildhoriz(s->yvel);
|
auto bh = buildhoriz(s->yvel);
|
||||||
renderView(s, s->sectnum, s->x, s->y, s->z - (4 << 8), cang, bh, buildang(0), (int)smoothratio);
|
renderView(s, s->sector(), s->x, s->y, s->z - (4 << 8), cang, bh, buildang(0), (int)smoothratio);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -410,7 +410,7 @@ void displayrooms(int snum, double smoothratio)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
renderView(viewer, sectnum(sect), cposx, cposy, cposz, cang, choriz, rotscrnang, (int)smoothratio);
|
renderView(viewer, sect, cposx, cposy, cposz, cang, choriz, rotscrnang, (int)smoothratio);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//GLInterface.SetMapFog(false);
|
//GLInterface.SetMapFog(false);
|
||||||
|
|
|
@ -411,7 +411,7 @@ MOVEEND:
|
||||||
|
|
||||||
nVal = coll.type || coll.exbits? 1:0;
|
nVal = coll.type || coll.exbits? 1:0;
|
||||||
|
|
||||||
// pSprite.sectnum may have changed since we set nSectFlag ?
|
// pSprite's sector may have changed since we set nSectFlag ?
|
||||||
int nFlagVal = nSectFlag ^ pSprite->sector()->Flag;
|
int nFlagVal = nSectFlag ^ pSprite->sector()->Flag;
|
||||||
if (nFlagVal & kSectUnderwater)
|
if (nFlagVal & kSectUnderwater)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2276,7 +2276,7 @@ sectdone:
|
||||||
|
|
||||||
// loc_1BC57:
|
// loc_1BC57:
|
||||||
|
|
||||||
// CHECKME - are we finished with 'nSector' variable at this point? if so, maybe set it to pPlayerSprite->sectnum so we can make this code a bit neater. Don't assume pPlayerSprite->sectnum == nSector here!!
|
// CHECKME - are we finished with 'nSector' variable at this point? if so, maybe set it to pPlayerSprite->sector() so we can make this code a bit neater. Don't assume pPlayerSprite->sectnum == nSector here!!
|
||||||
if (nStandHeight > (pPlayerSprite->sector()->floorz - pPlayerSprite->sector()->ceilingz)) {
|
if (nStandHeight > (pPlayerSprite->sector()->floorz - pPlayerSprite->sector()->ceilingz)) {
|
||||||
var_48 = 1;
|
var_48 = 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -285,7 +285,7 @@ void JS_DrawMirrors(PLAYERp pp, int tx, int ty, int tz, fixed_t tpq16ang, fixed
|
||||||
|
|
||||||
if (mirror[cnt].campic != -1)
|
if (mirror[cnt].campic != -1)
|
||||||
tileDelete(mirror[cnt].campic);
|
tileDelete(mirror[cnt].campic);
|
||||||
renderDrawRoomsQ16(dx, dy, dz, tpq16ang, tpq16horiz, sp->sectnum, true);
|
renderDrawRoomsQ16(dx, dy, dz, tpq16ang, tpq16horiz, sp->sector(), true);
|
||||||
analyzesprites(pm_tsprite, pm_spritesortcnt, dx, dy, dz, false);
|
analyzesprites(pm_tsprite, pm_spritesortcnt, dx, dy, dz, false);
|
||||||
renderDrawMasks();
|
renderDrawMasks();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue