mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2024-11-15 08:41:59 +00:00
Merge branch 'master' of https://github.com/rheit/zdoom
# By Christoph Oelckers (2) and Edward Richardson (1) # Via Christoph Oelckers * 'master' of https://github.com/rheit/zdoom: - fixed: The map setup code was still truncating texture names in several places. Fix nettic run-out at end of demo playback - fixed: ACS's check...Texture functions must use the same search flags as the texture initialization code in p_setup.cpp and p_udmf.cpp. It also should not create textures that don't exist yet. We are only doing a comparison so it's not relevant if the texture exists or not.
This commit is contained in:
commit
ae8995e65b
7 changed files with 52 additions and 42 deletions
|
@ -1054,7 +1054,7 @@ void NetUpdate (void)
|
|||
|
||||
if (demoplayback)
|
||||
{
|
||||
nettics[0] = (maketic / ticdup);
|
||||
resendto[0] = nettics[0] = (maketic / ticdup);
|
||||
return; // Don't touch netcmd data while playing a demo, as it'll already exist.
|
||||
}
|
||||
|
||||
|
|
|
@ -85,6 +85,14 @@ struct mapsidedef_t
|
|||
short sector; // Front sector, towards viewer.
|
||||
};
|
||||
|
||||
struct intmapsidedef_t
|
||||
{
|
||||
FString toptexture;
|
||||
FString bottomtexture;
|
||||
FString midtexture;
|
||||
};
|
||||
|
||||
|
||||
// A LineDef, as used for editing, and as input to the BSP builder.
|
||||
struct maplinedef_t
|
||||
{
|
||||
|
|
|
@ -3944,7 +3944,9 @@ bool DLevelScript::DoCheckActorTexture(int tid, AActor *activator, int string, b
|
|||
{
|
||||
return 0;
|
||||
}
|
||||
FTexture *tex = TexMan.FindTexture(FBehavior::StaticLookupString(string));
|
||||
FTexture *tex = TexMan.FindTexture(FBehavior::StaticLookupString(string), FTexture::TEX_Flat,
|
||||
FTextureManager::TEXMAN_Overridable|FTextureManager::TEXMAN_TryAny|FTextureManager::TEXMAN_DontCreate);
|
||||
|
||||
if (tex == NULL)
|
||||
{ // If the texture we want to check against doesn't exist, then
|
||||
// they're obviously not the same.
|
||||
|
|
|
@ -577,13 +577,11 @@ void MapData::GetChecksum(BYTE cksum[16])
|
|||
//
|
||||
//===========================================================================
|
||||
|
||||
static void SetTexture (side_t *side, int position, const char *name8, FMissingTextureTracker &track)
|
||||
static void SetTexture (side_t *side, int position, const char *name, FMissingTextureTracker &track)
|
||||
{
|
||||
static const char *positionnames[] = { "top", "middle", "bottom" };
|
||||
static const char *sidenames[] = { "first", "second" };
|
||||
char name[9];
|
||||
strncpy (name, name8, 8);
|
||||
name[8] = 0;
|
||||
|
||||
FTextureID texture = TexMan.CheckForTexture (name, FTexture::TEX_Wall,
|
||||
FTextureManager::TEXMAN_Overridable|FTextureManager::TEXMAN_TryAny);
|
||||
|
||||
|
@ -619,12 +617,17 @@ static void SetTexture (side_t *side, int position, const char *name8, FMissingT
|
|||
//
|
||||
//===========================================================================
|
||||
|
||||
void SetTexture (sector_t *sector, int index, int position, const char *name8, FMissingTextureTracker &track)
|
||||
void SetTexture (sector_t *sector, int index, int position, const char *name, FMissingTextureTracker &track, bool truncate)
|
||||
{
|
||||
static const char *positionnames[] = { "floor", "ceiling" };
|
||||
char name[9];
|
||||
strncpy (name, name8, 8);
|
||||
name[8] = 0;
|
||||
char name8[9];
|
||||
if (truncate)
|
||||
{
|
||||
strncpy(name8, name, 8);
|
||||
name8[8] = 0;
|
||||
name = name8;
|
||||
}
|
||||
|
||||
FTextureID texture = TexMan.CheckForTexture (name, FTexture::TEX_Flat,
|
||||
FTextureManager::TEXMAN_Overridable|FTextureManager::TEXMAN_TryAny);
|
||||
|
||||
|
@ -674,11 +677,8 @@ static void SummarizeMissingTextures(const FMissingTextureTracker &missing)
|
|||
//
|
||||
//===========================================================================
|
||||
|
||||
static void SetTexture (side_t *side, int position, DWORD *blend, char *name8)
|
||||
static void SetTexture (side_t *side, int position, DWORD *blend, const char *name)
|
||||
{
|
||||
char name[9];
|
||||
strncpy (name, name8, 8);
|
||||
name[8] = 0;
|
||||
FTextureID texture;
|
||||
if ((*blend = R_ColormapNumForName (name)) == 0)
|
||||
{
|
||||
|
@ -705,12 +705,9 @@ static void SetTexture (side_t *side, int position, DWORD *blend, char *name8)
|
|||
side->SetTexture(position, texture);
|
||||
}
|
||||
|
||||
static void SetTextureNoErr (side_t *side, int position, DWORD *color, char *name8, bool *validcolor, bool isFog)
|
||||
static void SetTextureNoErr (side_t *side, int position, DWORD *color, const char *name, bool *validcolor, bool isFog)
|
||||
{
|
||||
char name[9];
|
||||
FTextureID texture;
|
||||
strncpy (name, name8, 8);
|
||||
name[8] = 0;
|
||||
*validcolor = false;
|
||||
texture = TexMan.CheckForTexture (name, FTexture::TEX_Wall,
|
||||
FTextureManager::TEXMAN_Overridable|FTextureManager::TEXMAN_TryAny);
|
||||
|
@ -1515,8 +1512,8 @@ void P_LoadSectors (MapData *map, FMissingTextureTracker &missingtex)
|
|||
ss->ceilingplane.d = ss->GetPlaneTexZ(sector_t::ceiling);
|
||||
ss->ceilingplane.c = -FRACUNIT;
|
||||
ss->ceilingplane.ic = -FRACUNIT;
|
||||
SetTexture(ss, i, sector_t::floor, ms->floorpic, missingtex);
|
||||
SetTexture(ss, i, sector_t::ceiling, ms->ceilingpic, missingtex);
|
||||
SetTexture(ss, i, sector_t::floor, ms->floorpic, missingtex, true);
|
||||
SetTexture(ss, i, sector_t::ceiling, ms->ceilingpic, missingtex, true);
|
||||
ss->lightlevel = LittleShort(ms->lightlevel);
|
||||
if (map->HasBehavior)
|
||||
ss->special = LittleShort(ms->special);
|
||||
|
@ -2473,11 +2470,8 @@ int P_DetermineTranslucency (int lumpnum)
|
|||
return newcolor.r;
|
||||
}
|
||||
|
||||
void P_ProcessSideTextures(bool checktranmap, side_t *sd, sector_t *sec, mapsidedef_t *msd, int special, int tag, short *alpha, FMissingTextureTracker &missingtex)
|
||||
void P_ProcessSideTextures(bool checktranmap, side_t *sd, sector_t *sec, intmapsidedef_t *msd, int special, int tag, short *alpha, FMissingTextureTracker &missingtex)
|
||||
{
|
||||
char name[9];
|
||||
name[8] = 0;
|
||||
|
||||
switch (special)
|
||||
{
|
||||
case Transfer_Heights: // variable colormap via 242 linedef
|
||||
|
@ -2503,7 +2497,6 @@ void P_ProcessSideTextures(bool checktranmap, side_t *sd, sector_t *sec, mapside
|
|||
|
||||
SetTextureNoErr (sd, side_t::bottom, &fog, msd->bottomtexture, &foggood, true);
|
||||
SetTextureNoErr (sd, side_t::top, &color, msd->toptexture, &colorgood, false);
|
||||
strncpy (name, msd->midtexture, 8);
|
||||
SetTexture(sd, side_t::mid, msd->midtexture, missingtex);
|
||||
|
||||
if (colorgood | foggood)
|
||||
|
@ -2534,8 +2527,7 @@ void P_ProcessSideTextures(bool checktranmap, side_t *sd, sector_t *sec, mapside
|
|||
case Sector_Set3DFloor:
|
||||
if (msd->toptexture[0]=='#')
|
||||
{
|
||||
strncpy (name, msd->toptexture, 8);
|
||||
sd->SetTexture(side_t::top, FNullTextureID() +(-strtol(name+1, NULL, 10))); // store the alpha as a negative texture index
|
||||
sd->SetTexture(side_t::top, FNullTextureID() +(-strtol(&msd->toptexture[1], NULL, 10))); // store the alpha as a negative texture index
|
||||
// This will be sorted out by the 3D-floor code later.
|
||||
}
|
||||
else
|
||||
|
@ -2629,7 +2621,13 @@ void P_LoadSideDefs2 (MapData *map, FMissingTextureTracker &missingtex)
|
|||
{
|
||||
sd->sector = sec = §ors[LittleShort(msd->sector)];
|
||||
}
|
||||
P_ProcessSideTextures(!map->HasBehavior, sd, sec, msd,
|
||||
|
||||
intmapsidedef_t imsd;
|
||||
imsd.toptexture.CopyCStrPart(msd->toptexture, 8);
|
||||
imsd.midtexture.CopyCStrPart(msd->midtexture, 8);
|
||||
imsd.bottomtexture.CopyCStrPart(msd->bottomtexture, 8);
|
||||
|
||||
P_ProcessSideTextures(!map->HasBehavior, sd, sec, &imsd,
|
||||
sidetemp[i].a.special, sidetemp[i].a.tag, &sidetemp[i].a.alpha, missingtex);
|
||||
}
|
||||
delete[] msdf;
|
||||
|
|
|
@ -118,8 +118,8 @@ enum
|
|||
// namespace for each game
|
||||
};
|
||||
|
||||
void SetTexture (sector_t *sector, int index, int position, const char *name8, FMissingTextureTracker &);
|
||||
void P_ProcessSideTextures(bool checktranmap, side_t *sd, sector_t *sec, mapsidedef_t *msd, int special, int tag, short *alpha, FMissingTextureTracker &);
|
||||
void SetTexture (sector_t *sector, int index, int position, const char *name, FMissingTextureTracker &, bool truncate);
|
||||
void P_ProcessSideTextures(bool checktranmap, side_t *sd, sector_t *sec, intmapsidedef_t *msd, int special, int tag, short *alpha, FMissingTextureTracker &);
|
||||
void P_AdjustLine (line_t *ld);
|
||||
void P_FinishLoadingLineDef(line_t *ld, int alpha);
|
||||
void SpawnMapThing(int index, FMapThing *mt, int position);
|
||||
|
@ -394,7 +394,7 @@ class UDMFParser : public UDMFParserBase
|
|||
|
||||
TArray<line_t> ParsedLines;
|
||||
TArray<side_t> ParsedSides;
|
||||
TArray<mapsidedef_t> ParsedSideTextures;
|
||||
TArray<intmapsidedef_t> ParsedSideTextures;
|
||||
TArray<sector_t> ParsedSectors;
|
||||
TArray<vertex_t> ParsedVertices;
|
||||
TArray<vertexdata_t> ParsedVertexDatas;
|
||||
|
@ -1089,14 +1089,14 @@ public:
|
|||
//
|
||||
//===========================================================================
|
||||
|
||||
void ParseSidedef(side_t *sd, mapsidedef_t *sdt, int index)
|
||||
void ParseSidedef(side_t *sd, intmapsidedef_t *sdt, int index)
|
||||
{
|
||||
fixed_t texofs[2]={0,0};
|
||||
|
||||
memset(sd, 0, sizeof(*sd));
|
||||
strncpy(sdt->bottomtexture, "-", 8);
|
||||
strncpy(sdt->toptexture, "-", 8);
|
||||
strncpy(sdt->midtexture, "-", 8);
|
||||
sdt->bottomtexture = "-";
|
||||
sdt->toptexture = "-";
|
||||
sdt->midtexture = "-";
|
||||
sd->SetTextureXScale(FRACUNIT);
|
||||
sd->SetTextureYScale(FRACUNIT);
|
||||
|
||||
|
@ -1115,15 +1115,15 @@ public:
|
|||
continue;
|
||||
|
||||
case NAME_Texturetop:
|
||||
strncpy(sdt->toptexture, CheckString(key), 8);
|
||||
sdt->toptexture = CheckString(key);
|
||||
continue;
|
||||
|
||||
case NAME_Texturebottom:
|
||||
strncpy(sdt->bottomtexture, CheckString(key), 8);
|
||||
sdt->bottomtexture = CheckString(key);
|
||||
continue;
|
||||
|
||||
case NAME_Texturemiddle:
|
||||
strncpy(sdt->midtexture, CheckString(key), 8);
|
||||
sdt->midtexture = CheckString(key);
|
||||
continue;
|
||||
|
||||
case NAME_Sector:
|
||||
|
@ -1287,11 +1287,11 @@ public:
|
|||
continue;
|
||||
|
||||
case NAME_Texturefloor:
|
||||
SetTexture(sec, index, sector_t::floor, CheckString(key), missingTex);
|
||||
SetTexture(sec, index, sector_t::floor, CheckString(key), missingTex, false);
|
||||
continue;
|
||||
|
||||
case NAME_Textureceiling:
|
||||
SetTexture(sec, index, sector_t::ceiling, CheckString(key), missingTex);
|
||||
SetTexture(sec, index, sector_t::ceiling, CheckString(key), missingTex, false);
|
||||
continue;
|
||||
|
||||
case NAME_Lightlevel:
|
||||
|
@ -1799,7 +1799,7 @@ public:
|
|||
else if (sc.Compare("sidedef"))
|
||||
{
|
||||
side_t si;
|
||||
mapsidedef_t st;
|
||||
intmapsidedef_t st;
|
||||
ParseSidedef(&si, &st, ParsedSides.Size());
|
||||
ParsedSides.Push(si);
|
||||
ParsedSideTextures.Push(st);
|
||||
|
|
|
@ -238,6 +238,7 @@ FTextureID FTextureManager::CheckForTexture (const char *name, int usetype, BITF
|
|||
FTexture *tex = Wads.GetLinkedTexture(lump);
|
||||
if (tex == NO_TEXTURE) return FTextureID(-1);
|
||||
if (tex != NULL) return tex->id;
|
||||
if (flags & TEXMAN_DontCreate) return FTextureID(-1); // we only want to check, there's no need to create a texture if we don't have one yet.
|
||||
tex = FTexture::CreateTexture("", lump, FTexture::TEX_Override);
|
||||
if (tex != NULL)
|
||||
{
|
||||
|
|
|
@ -363,7 +363,8 @@ public:
|
|||
TEXMAN_Overridable = 2,
|
||||
TEXMAN_ReturnFirst = 4,
|
||||
TEXMAN_AllowSkins = 8,
|
||||
TEXMAN_ShortNameOnly = 16
|
||||
TEXMAN_ShortNameOnly = 16,
|
||||
TEXMAN_DontCreate = 32
|
||||
};
|
||||
|
||||
FTextureID CheckForTexture (const char *name, int usetype, BITFIELD flags=TEXMAN_TryAny);
|
||||
|
|
Loading…
Reference in a new issue