mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-27 20:20:40 +00:00
- fixed some automap issues:
* Blood's automap was not drawn at all. * SW's automap always showed all sectors * SW's player sprite was not rendered. * Non-automap: Forward gotsector to the game code because there's still a few places in Blood that need it.
This commit is contained in:
parent
85020b374a
commit
80e5cd0dc5
11 changed files with 29 additions and 25 deletions
|
@ -271,7 +271,7 @@ EXTERN int16_t prevspritesect[MAXSPRITES], prevspritestat[MAXSPRITES];
|
|||
EXTERN int16_t nextspritesect[MAXSPRITES], nextspritestat[MAXSPRITES];
|
||||
|
||||
EXTERN uint8_t gotpic[(MAXTILES+7)>>3];
|
||||
EXTERN char gotsector[(MAXSECTORS+7)>>3];
|
||||
extern FixedBitArray<MAXSECTORS> gotsector;
|
||||
|
||||
|
||||
extern uint32_t drawlinepat;
|
||||
|
|
|
@ -1818,7 +1818,7 @@ static void polymost_drawalls(int32_t const bunch)
|
|||
domostpolymethod = DAMETH_NOMASK;
|
||||
|
||||
if (nextsectnum >= 0)
|
||||
if ((!(gotsector[nextsectnum>>3]& (1<<(nextsectnum&7)))) && testvisiblemost(x0,x1))
|
||||
if (!gotsector[nextsectnum] && testvisiblemost(x0,x1))
|
||||
polymost_scansector(nextsectnum);
|
||||
}
|
||||
}
|
||||
|
@ -1919,7 +1919,7 @@ void polymost_scansector(int32_t sectnum)
|
|||
}
|
||||
}
|
||||
|
||||
gotsector[sectnum>>3] |= 1<<(sectnum&7);
|
||||
gotsector.Set(sectnum);
|
||||
|
||||
int const bunchfrst = numbunches;
|
||||
int const onumscans = numscans;
|
||||
|
@ -1942,7 +1942,7 @@ void polymost_scansector(int32_t sectnum)
|
|||
int const nextsectnum = wal->nextsector; //Scan close sectors
|
||||
|
||||
if (nextsectnum >= 0 && !(wal->cstat&32) && sectorbordercnt < countof(sectorborder))
|
||||
if ((gotsector[nextsectnum>>3]&(1<<(nextsectnum&7))) == 0)
|
||||
if (gotsector[nextsectnum] == 0)
|
||||
{
|
||||
double const d = fp1.X* fp2.Y - fp2.X * fp1.Y;
|
||||
DVector2 const p1 = fp2 - fp1;
|
||||
|
@ -1952,7 +1952,7 @@ void polymost_scansector(int32_t sectnum)
|
|||
if (d*d < (p1.LengthSquared()) * 256.f)
|
||||
{
|
||||
sectorborder[sectorbordercnt++] = nextsectnum;
|
||||
gotsector[nextsectnum>>3] |= 1<<(nextsectnum&7);
|
||||
gotsector.Set(nextsectnum);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3355,7 +3355,7 @@ int32_t renderDrawRoomsQ16(int32_t daposx, int32_t daposy, int32_t daposz,
|
|||
|
||||
global100horiz = dahoriz;
|
||||
|
||||
memset(gotsector, 0, sizeof(gotsector));
|
||||
gotsector.Zero();
|
||||
qglobalhoriz = MulScale(dahoriz, DivScale(xdimenscale, viewingrange, 16), 16) + IntToFixed(ydimen >> 1);
|
||||
globalcursectnum = dacursectnum;
|
||||
Polymost::polymost_drawrooms();
|
||||
|
|
|
@ -565,7 +565,7 @@ void renderDrawMapView(int cposx, int cposy, int czoom, int cang)
|
|||
|
||||
for (int i = numsectors - 1; i >= 0; i--)
|
||||
{
|
||||
if (!gFullMap && !show2dsector[i] && !(g_gameType & GAMEFLAG_SW)) continue;
|
||||
if (!gFullMap && !show2dsector[i]) continue;
|
||||
|
||||
//Collect floor sprites to draw
|
||||
SectIterator it(i);
|
||||
|
@ -585,6 +585,9 @@ void renderDrawMapView(int cposx, int cposy, int czoom, int cang)
|
|||
|
||||
if (sector[i].floorstat & CSTAT_SECTOR_SKY) continue;
|
||||
|
||||
int picnum = sector[i].floorpicnum;
|
||||
if ((unsigned)picnum >= (unsigned)MAXTILES) continue;
|
||||
|
||||
auto mesh = sectorGeometry.get(i, 0);
|
||||
vertices.Resize(mesh->vertices.Size());
|
||||
for (unsigned j = 0; j < mesh->vertices.Size(); j++)
|
||||
|
@ -595,8 +598,6 @@ void renderDrawMapView(int cposx, int cposy, int czoom, int cang)
|
|||
int y1 = DMulScale(oy, xvect, ox, yvect, 16) + (height << 11);
|
||||
vertices[j] = { x1 / 4096.f, y1 / 4096.f, mesh->texcoords[j].X, mesh->texcoords[j].Y };
|
||||
}
|
||||
int picnum = sector[i].floorpicnum;
|
||||
if ((unsigned)picnum >= (unsigned)MAXTILES) continue;
|
||||
|
||||
int translation = TRANSLATION(Translation_Remap + curbasepal, sector[i].floorpal);
|
||||
setgotpic(picnum);
|
||||
|
@ -616,6 +617,7 @@ void renderDrawMapView(int cposx, int cposy, int czoom, int cang)
|
|||
vertices.Resize(4);
|
||||
for (auto sn : floorsprites)
|
||||
{
|
||||
if (!gFullMap && !show2dsprite[sn]) continue;
|
||||
auto spr = &sprite[sn];
|
||||
vec2_t pp[4];
|
||||
GetFlatSpritePosition(spr, spr->pos.vec2, pp, true);
|
||||
|
|
|
@ -453,6 +453,8 @@ void BunchDrawer::ProcessSector(int sectnum)
|
|||
}
|
||||
SetupSprite.Unclock();
|
||||
|
||||
if (automapping)
|
||||
show2dsector.Set(sectnum);
|
||||
|
||||
SetupFlat.Clock();
|
||||
HWFlat flat;
|
||||
|
|
|
@ -37,7 +37,6 @@ private:
|
|||
CL_Pass = 2,
|
||||
};
|
||||
|
||||
|
||||
void StartScene();
|
||||
void StartBunch(int sectnum, int linenum, binangle startan, binangle endan);
|
||||
void AddLineToBunch(int line, binangle newan);
|
||||
|
@ -53,4 +52,5 @@ private:
|
|||
public:
|
||||
void Init(HWDrawInfo* _di, Clipper* c, vec2_t& view);
|
||||
void RenderScene(const int* viewsectors, unsigned sectcount);
|
||||
const FixedBitArray<MAXSECTORS>& GotSector() const { return gotsector; }
|
||||
};
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
#include "v_draw.h"
|
||||
#include "gamecvars.h"
|
||||
#include "gamestruct.h"
|
||||
#include "automap.h"
|
||||
|
||||
EXTERN_CVAR(Float, r_visibility)
|
||||
CVAR(Bool, gl_bandedswlight, false, CVAR_ARCHIVE)
|
||||
|
@ -51,6 +52,8 @@ CVAR(Bool, gl_texture, true, 0)
|
|||
CVAR(Float, gl_mask_threshold, 0.5f, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(Float, gl_mask_sprite_threshold, 0.5f, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
|
||||
FixedBitArray<MAXSECTORS> gotsector;
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
//
|
||||
|
@ -281,6 +284,9 @@ void HWDrawInfo::DispatchSprites()
|
|||
if (spritenum < 0 || (unsigned)tilenum >= MAXTILES)
|
||||
continue;
|
||||
|
||||
if (automapping == 1 && (unsigned)spritenum < MAXSPRITES)
|
||||
show2dsprite.Set(spritenum);
|
||||
|
||||
setgotpic(tilenum);
|
||||
|
||||
while (!(spriteext[spritenum].flags & SPREXT_NOTMD))
|
||||
|
@ -648,4 +654,8 @@ void HWDrawInfo::ProcessScene(bool toscreen)
|
|||
{
|
||||
portalState.BeginScene();
|
||||
DrawScene(toscreen ? DM_MAINVIEW : DM_OFFSCREEN);
|
||||
if (toscreen && isBlood())
|
||||
{
|
||||
gotsector = mDrawer.GotSector(); // Blood needs this to implement some lighting effect hacks. Needs to be refactored to use better info.
|
||||
}
|
||||
}
|
||||
|
|
|
@ -725,7 +725,7 @@ void viewDrawScreen(bool sceneonly)
|
|||
int nXSprite = pSprite->extra;
|
||||
assert(nXSprite > 0 && nXSprite < kMaxXSprites);
|
||||
XSPRITE* pXSprite = &xsprite[nXSprite];
|
||||
if (TestBitString(gotsector, pSprite->sectnum))
|
||||
if (gotsector[pSprite->sectnum])
|
||||
{
|
||||
brightness += pXSprite->data3 * 32;
|
||||
}
|
||||
|
@ -739,7 +739,7 @@ void viewDrawScreen(bool sceneonly)
|
|||
case kMissileTeslaAlt:
|
||||
case kMissileFlareAlt:
|
||||
case kMissileTeslaRegular:
|
||||
if (TestBitString(gotsector, pSprite->sectnum)) brightness += 256;
|
||||
if (gotsector[pSprite->sectnum]) brightness += 256;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -209,7 +209,7 @@ void V_AddBlend (float r, float g, float b, float a, float v_blend[4])
|
|||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
// 'rest' in this case means everything not part of the 3D scene and its weapon sprite.
|
||||
// draws everything not part of the 3D scene and its weapon sprite.
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
|
|
@ -134,7 +134,7 @@ void FAF_DrawRooms(int x, int y, int z, fixed_t q16ang, fixed_t q16horiz, short
|
|||
while ((i = it.NextIndex()) >= 0)
|
||||
{
|
||||
// manually set gotpic
|
||||
if (TEST_GOTSECTOR(sprite[i].sectnum))
|
||||
if (gotsector[sprite[i].sectnum])
|
||||
{
|
||||
SET_GOTPIC(FAF_MIRROR_PIC);
|
||||
}
|
||||
|
|
|
@ -1446,12 +1446,6 @@ void RestorePortalState()
|
|||
StatIterator it(STAT_CEILING_FLOOR_PIC_OVERRIDE);
|
||||
while ((i = it.NextIndex()) >= 0)
|
||||
{
|
||||
// manually set gotpic
|
||||
if (TEST_GOTSECTOR(sprite[i].sectnum))
|
||||
{
|
||||
SET_GOTPIC(FAF_MIRROR_PIC);
|
||||
}
|
||||
|
||||
if (SPRITE_TAG3(i) == 0)
|
||||
{
|
||||
// restore ceilingpicnum and ceilingstat
|
||||
|
@ -1794,7 +1788,7 @@ bool GameInterface::DrawAutomapPlayer(int cposx, int cposy, int czoom, int cang,
|
|||
x1 = sprx - cposx;
|
||||
y1 = spry - cposy;
|
||||
|
||||
if (((gotsector[i >> 3] & (1 << (i & 7))) > 0) && (czoom > 192))
|
||||
if (czoom > 192)
|
||||
{
|
||||
daang = ((!SyncInput() ? spr->ang : spr->interpolatedang(smoothratio)) - cang) & 2047;
|
||||
|
||||
|
|
|
@ -355,10 +355,6 @@ inline int SPRITEp_SIZE_BOS(const spritetype* sp)
|
|||
// just determine if the player is moving
|
||||
#define PLAYER_MOVING(pp) ((pp)->xvect|(pp)->yvect)
|
||||
|
||||
#define TEST_GOTSECTOR(sect_num) (TEST(gotsector[(sect_num) >> 3], 1 << ((sect_num) & 7)))
|
||||
#define RESET_GOTSECTOR(sect_num) (RESET(gotsector[(sect_num) >> 3], 1 << ((sect_num) & 7)))
|
||||
#define SET_GOTSECTOR(sect_num) (SET(gotsector[(sect_num) >> 3], 1 << ((sect_num) & 7)))
|
||||
|
||||
#define TEST_GOTPIC(tile_num) (TEST(gotpic[(tile_num) >> 3], 1 << ((tile_num) & 7)))
|
||||
#define RESET_GOTPIC(tile_num) (RESET(gotpic[(tile_num) >> 3], 1 << ((tile_num) & 7)))
|
||||
#define SET_GOTPIC(tile_num) (SET(gotpic[(tile_num) >> 3], 1 << ((tile_num) & 7)))
|
||||
|
|
Loading…
Reference in a new issue