- Fixed: ANIMATED allowed animations between different texture types.

- Added a debuganimated CCMD that can be used to output some information
  if a WAD shows broken animations.
- Fixed: The handling for enum values in Xlat was incorrect. The rule with 
  value assignment must set the counter one higher than the current value.
- Fixed: The definition of enums in the Xlat grammar was right-recursive
  which could create stack overflows in the parser. Made it left-recursive as
  recommended in Lemon's docs. 


SVN r850 (trunk)
This commit is contained in:
Christoph Oelckers 2008-03-25 09:43:50 +00:00
parent aef34f9aa5
commit 14533f867d
8 changed files with 60 additions and 15 deletions

View file

@ -1,3 +1,8 @@
March 25, 2008 (Changes by Graf Zahl)
- Fixed: ANIMATED allowed animations between different texture types.
- Added a debuganimated CCMD that can be used to output some information
if a WAD shows broken animations.
March 24, 2008 March 24, 2008
- Removed xlat_parser.h from the repository. Lemon was always being run on - Removed xlat_parser.h from the repository. Lemon was always being run on
xlat_parser.y because both files had the same time stamp after an update, xlat_parser.y because both files had the same time stamp after an update,
@ -10,6 +15,11 @@ March 24, 2008
- Restored the sound limiting. - Restored the sound limiting.
March 24, 2008 (Changes by Graf Zahl) March 24, 2008 (Changes by Graf Zahl)
- Fixed: THe handling for enum values in Xlat was incorrect. The rule with
value assignment must set the counter one higher than the current value.
- Fixed: The definition of enums in the Xlat grammar was right-recursive
which could create stack overflows in the parser. Made it left-recursive as
recommended in Lemon's docs.
- Added Thomas's submissions for decal assignment to puffs and NOINFIGHTING flag. - Added Thomas's submissions for decal assignment to puffs and NOINFIGHTING flag.
- Reverted changes of r715 in v_collection.cpp because they broke loading - Reverted changes of r715 in v_collection.cpp because they broke loading
of status bar face graphics belonging to skins. of status bar face graphics belonging to skins.

View file

@ -135,9 +135,14 @@ static FRandom pr_animatepictures ("AnimatePics");
// //
//========================================================================== //==========================================================================
CVAR(Bool, debuganimated, false, 0)
void R_InitPicAnims (void) void R_InitPicAnims (void)
{ {
const BITFIELD texflags = FTextureManager::TEXMAN_Overridable | FTextureManager::TEXMAN_TryAny; const BITFIELD texflags = FTextureManager::TEXMAN_Overridable;
// I think better not! This is only for old ANIMATED definition that
// don't know about ZDoom's more flexible texture system.
// | FTextureManager::TEXMAN_TryAny;
if (Wads.CheckNumForName ("ANIMATED") != -1) if (Wads.CheckNumForName ("ANIMATED") != -1)
{ {
@ -175,6 +180,35 @@ void R_InitPicAnims (void)
Printf ("Animation %s in ANIMATED has only one frame", anim_p + 10); Printf ("Animation %s in ANIMATED has only one frame", anim_p + 10);
continue; continue;
} }
FTexture *tex1 = TexMan[pic1];
FTexture *tex2 = TexMan[pic1];
if (tex1->UseType != tex2->UseType)
{
// not the same type -
continue;
}
if (debuganimated)
{
Printf("Defining animation '%s' (texture %d, lump %d, file %d) to '%s' (texture %d, lump %d, file %d)\n",
tex1->Name, tex1->GetSourceLump(), Wads.GetLumpFile(tex1->GetSourceLump()),
tex2->Name, tex2->GetSourceLump(), Wads.GetLumpFile(tex2->GetSourceLump()));
}
/* FIXME: doesn't work with hires texture replacements.
int l1 = tex1->GetSourceLump();
int l2 = tex2->GetSourceLump();
if (tex1->UseType == FTexture::TEX_Wall && l1 != l2)
{
// Animated walls must be in the same definition lumo
continue;
}
*/
// [RH] Allow for backward animations as well as forward. // [RH] Allow for backward animations as well as forward.
if (pic1 > pic2) if (pic1 > pic2)
{ {

View file

@ -82,7 +82,7 @@ struct FPatchLookup
class FMultiPatchTexture : public FTexture class FMultiPatchTexture : public FTexture
{ {
public: public:
FMultiPatchTexture (const void *texdef, FPatchLookup *patchlookup, int maxpatchnum, bool strife); FMultiPatchTexture (const void *texdef, FPatchLookup *patchlookup, int maxpatchnum, bool strife, int deflump);
~FMultiPatchTexture (); ~FMultiPatchTexture ();
const BYTE *GetColumn (unsigned int column, const Span **spans_out); const BYTE *GetColumn (unsigned int column, const Span **spans_out);
@ -92,10 +92,12 @@ public:
virtual void SetFrontSkyLayer (); virtual void SetFrontSkyLayer ();
int CopyTrueColorPixels(BYTE *buffer, int buf_pitch, int buf_height, int x, int y); int CopyTrueColorPixels(BYTE *buffer, int buf_pitch, int buf_height, int x, int y);
int GetSourceLump() { return DefinitionLump; }
protected: protected:
BYTE *Pixels; BYTE *Pixels;
Span **Spans; Span **Spans;
int DefinitionLump;
struct TexPart struct TexPart
{ {

View file

@ -929,7 +929,7 @@ public:
void WriteTexture (FArchive &arc, int picnum); void WriteTexture (FArchive &arc, int picnum);
int ReadTexture (FArchive &arc); int ReadTexture (FArchive &arc);
void AddTexturesLump (const void *lumpdata, int lumpsize, int patcheslump, int firstdup=0, bool texture1=false); void AddTexturesLump (const void *lumpdata, int lumpsize, int deflumpnum, int patcheslump, int firstdup=0, bool texture1=false);
void AddTexturesLumps (int lump1, int lump2, int patcheslump); void AddTexturesLumps (int lump1, int lump2, int patcheslump);
void AddGroup(int wadnum, const char * startlump, const char * endlump, int ns, int usetype); void AddGroup(int wadnum, const char * startlump, const char * endlump, int ns, int usetype);
void AddPatches (int lumpnum); void AddPatches (int lumpnum);

View file

@ -59,7 +59,7 @@
// //
//========================================================================== //==========================================================================
FMultiPatchTexture::FMultiPatchTexture (const void *texdef, FPatchLookup *patchlookup, int maxpatchnum, bool strife) FMultiPatchTexture::FMultiPatchTexture (const void *texdef, FPatchLookup *patchlookup, int maxpatchnum, bool strife, int deflumpnum)
: Pixels (0), Spans(0), Parts(0), bRedirect(false) : Pixels (0), Spans(0), Parts(0), bRedirect(false)
{ {
union union
@ -159,6 +159,7 @@ FMultiPatchTexture::FMultiPatchTexture (const void *texdef, FPatchLookup *patchl
bRedirect = true; bRedirect = true;
} }
} }
DefinitionLump = deflumpnum;
} }
//========================================================================== //==========================================================================
@ -467,7 +468,7 @@ FTextureFormat FMultiPatchTexture::GetFormat()
// //
//========================================================================== //==========================================================================
void FTextureManager::AddTexturesLump (const void *lumpdata, int lumpsize, int patcheslump, int firstdup, bool texture1) void FTextureManager::AddTexturesLump (const void *lumpdata, int lumpsize, int deflumpnum, int patcheslump, int firstdup, bool texture1)
{ {
FPatchLookup *patchlookup; FPatchLookup *patchlookup;
int i, j; int i, j;
@ -596,7 +597,7 @@ void FTextureManager::AddTexturesLump (const void *lumpdata, int lumpsize, int p
} }
if (j + 1 == firstdup) if (j + 1 == firstdup)
{ {
FTexture *tex = new FMultiPatchTexture ((const BYTE *)maptex + offset, patchlookup, numpatches, isStrife); FMultiPatchTexture *tex = new FMultiPatchTexture ((const BYTE *)maptex + offset, patchlookup, numpatches, isStrife, deflumpnum);
if (i == 1 && texture1) if (i == 1 && texture1)
{ {
tex->UseType = FTexture::TEX_Null; tex->UseType = FTexture::TEX_Null;
@ -621,12 +622,12 @@ void FTextureManager::AddTexturesLumps (int lump1, int lump2, int patcheslump)
if (lump1 >= 0) if (lump1 >= 0)
{ {
FMemLump texdir = Wads.ReadLump (lump1); FMemLump texdir = Wads.ReadLump (lump1);
AddTexturesLump (texdir.GetMem(), Wads.LumpLength (lump1), patcheslump, firstdup, true); AddTexturesLump (texdir.GetMem(), Wads.LumpLength (lump1), lump1, patcheslump, firstdup, true);
} }
if (lump2 >= 0) if (lump2 >= 0)
{ {
FMemLump texdir = Wads.ReadLump (lump2); FMemLump texdir = Wads.ReadLump (lump2);
AddTexturesLump (texdir.GetMem(), Wads.LumpLength (lump2), patcheslump, firstdup, false); AddTexturesLump (texdir.GetMem(), Wads.LumpLength (lump2), lump2, patcheslump, firstdup, false);
} }
} }

View file

@ -67,7 +67,7 @@ enum_open ::= ENUM LBRACE.
enum_list ::= . /* empty */ enum_list ::= . /* empty */
enum_list ::= single_enum. enum_list ::= single_enum.
enum_list ::= single_enum COMMA enum_list. enum_list ::= enum_list COMMA single_enum.
single_enum ::= SYM(A). single_enum ::= SYM(A).
{ {
@ -76,7 +76,8 @@ single_enum ::= SYM(A).
single_enum ::= SYM(A) EQUALS exp(B). single_enum ::= SYM(A) EQUALS exp(B).
{ {
context->AddSym (A.sym, context->EnumVal = B); context->AddSym (A.sym, B);
context->EnumVal = B+1;
} }
//========================================================================== //==========================================================================

View file

@ -141,11 +141,8 @@ enum
sDamage_Hellslime = 105, sDamage_Hellslime = 105,
Damage_InstantDeath = 115, Damage_InstantDeath = 115,
sDamage_SuperHellslime = 116, sDamage_SuperHellslime = 116,
Scroll_StrifeCurrent = 118 Scroll_StrifeCurrent = 118,
}
enum
{
// Caverns of Darkness healing sector // Caverns of Darkness healing sector
Sector_Heal = 196, Sector_Heal = 196,

View file

@ -3540,7 +3540,7 @@
Name="VCCustomBuildTool" Name="VCCustomBuildTool"
Description="Generating xlat_parser.c and xlat_parser.h..." Description="Generating xlat_parser.c and xlat_parser.h..."
CommandLine="tools\lemon\lemon.exe "$(InputPath)"
" CommandLine="tools\lemon\lemon.exe "$(InputPath)"
"
Outputs="$(InputDir)xlat_parser.c:$(InputDir)xlat_parser.h" Outputs="$(InputDir)xlat_parser.c;$(InputDir)xlat_parser.h"
/> />
</FileConfiguration> </FileConfiguration>
</File> </File>