- added SMMU/Eternity method of defining warped textures (Patch by Gez)

SVN r3433 (trunk)
This commit is contained in:
Christoph Oelckers 2012-03-12 14:30:45 +00:00
parent ce43552ebb
commit 365311ec36

View file

@ -198,44 +198,52 @@ void FTextureManager::InitAnimated (void)
!(pic2 = CheckForTexture (anim_p + 1 /* .startname */, FTexture::TEX_Flat, texflags)).Exists()) !(pic2 = CheckForTexture (anim_p + 1 /* .startname */, FTexture::TEX_Flat, texflags)).Exists())
continue; continue;
} }
if (pic1 == pic2)
{
// This animation only has one frame. Skip it. (Doom aborted instead.)
Printf ("Animation %s in ANIMATED has only one frame\n", anim_p + 10);
continue;
}
FTexture *tex1 = Texture(pic1); FTexture *tex1 = Texture(pic1);
FTexture *tex2 = Texture(pic2); FTexture *tex2 = Texture(pic2);
if (tex1->UseType != tex2->UseType) animspeed = (BYTE(anim_p[19]) << 0) | (BYTE(anim_p[20]) << 8) |
(BYTE(anim_p[21]) << 16) | (BYTE(anim_p[22]) << 24);
// SMMU-style swirly hack? Don't apply on already-warping texture
if (animspeed > 65535 && tex1 != null && !tex1->bWarped)
{ {
// not the same type - FTexture *warper = new FWarp2Texture (tex1);
continue; ReplaceTexture (pic1, warper, false);
} }
// These tests were not really relevant for swirling textures, or even potentially
if (debuganimated) // harmful, so they have been moved to the else block.
else
{ {
Printf("Defining animation '%s' (texture %d, lump %d, file %d) to '%s' (texture %d, lump %d, file %d)\n", if (tex1->UseType != tex2->UseType)
tex1->Name, pic1.GetIndex(), tex1->GetSourceLump(), Wads.GetLumpFile(tex1->GetSourceLump()), {
tex2->Name, pic2.GetIndex(), tex2->GetSourceLump(), Wads.GetLumpFile(tex2->GetSourceLump())); // 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, pic1.GetIndex(), tex1->GetSourceLump(), Wads.GetLumpFile(tex1->GetSourceLump()),
tex2->Name, pic2.GetIndex(), tex2->GetSourceLump(), Wads.GetLumpFile(tex2->GetSourceLump()));
}
if (pic1 == pic2)
{
// This animation only has one frame. Skip it. (Doom aborted instead.)
Printf ("Animation %s in ANIMATED has only one frame\n", anim_p + 10);
continue;
}
// [RH] Allow for backward animations as well as forward.
else if (pic1 > pic2)
{
swapvalues (pic1, pic2);
animtype = FAnimDef::ANIM_Backward;
}
// Speed is stored as tics, but we want ms so scale accordingly.
AddSimpleAnim (pic1, pic2 - pic1 + 1, animtype, Scale (animspeed, 1000, 35));
} }
// [RH] Allow for backward animations as well as forward.
if (pic1 > pic2)
{
swapvalues (pic1, pic2);
animtype = FAnimDef::ANIM_Backward;
}
// Speed is stored as tics, but we want ms so scale accordingly.
animspeed = /* .speed */
Scale ((BYTE(anim_p[19]) << 0) |
(BYTE(anim_p[20]) << 8) |
(BYTE(anim_p[21]) << 16) |
(BYTE(anim_p[22]) << 24), 1000, 35);
AddSimpleAnim (pic1, pic2 - pic1 + 1, animtype, animspeed);
} }
} }
} }