mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-22 20:21:26 +00:00
- added handlers to load Strife’s startup screen images as textures
This commit is contained in:
parent
73abb2dfac
commit
c86d9f60d0
2 changed files with 110 additions and 3 deletions
|
@ -46,13 +46,30 @@
|
||||||
#define ST_NETNOTCH_WIDTH 4
|
#define ST_NETNOTCH_WIDTH 4
|
||||||
#define ST_NETNOTCH_HEIGHT 16
|
#define ST_NETNOTCH_HEIGHT 16
|
||||||
|
|
||||||
|
struct StrifeStartupInfo
|
||||||
|
{
|
||||||
|
char name[9];
|
||||||
|
uint8_t width, height;
|
||||||
|
};
|
||||||
|
|
||||||
|
static StrifeStartupInfo StrifeRawPics[] =
|
||||||
|
{
|
||||||
|
{ "STRTPA1", 32, 64},
|
||||||
|
{ "STRTPB1", 32, 64},
|
||||||
|
{ "STRTPC1", 32, 64},
|
||||||
|
{ "STRTPD1", 32, 64},
|
||||||
|
{ "STRLZ1", 16, 16},
|
||||||
|
{ "STRLZ2", 16, 16},
|
||||||
|
{ "STRTBOT", 48, 48}
|
||||||
|
};
|
||||||
|
|
||||||
// there is only one palette for all these images.
|
// there is only one palette for all these images.
|
||||||
static uint8_t startuppalette8[16];
|
static uint8_t startuppalette8[16];
|
||||||
static uint32_t startuppalette32[16];
|
static uint32_t startuppalette32[16];
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// A raw 320x200 graphic used by Heretic and Hexen fullscreen images
|
//
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
|
@ -72,6 +89,19 @@ public:
|
||||||
int CopyPixels(FBitmap *bmp, int conversion) override;
|
int CopyPixels(FBitmap *bmp, int conversion) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class FStrifeStartupTexture : public FImageSource
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
FStrifeStartupTexture (int lumpnum, int w, int h);
|
||||||
|
TArray<uint8_t> CreatePalettedPixels(int conversion) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class FStrifeStartupBackground : public FImageSource
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
FStrifeStartupBackground (int lumpnum);
|
||||||
|
TArray<uint8_t> CreatePalettedPixels(int conversion) override;
|
||||||
|
};
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
|
@ -83,7 +113,7 @@ bool CheckIfRaw(FileReader & data, int desiredsize);
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
//
|
// loads all raw images for Hexen's and Strife's startup screens
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
|
@ -104,6 +134,19 @@ FImageSource *StartupPageImage_TryCreate(FileReader & file, int lumpnum)
|
||||||
if (!CheckIfRaw(file, ST_NETNOTCH_WIDTH * ST_NETNOTCH_HEIGHT / 2)) return nullptr;
|
if (!CheckIfRaw(file, ST_NETNOTCH_WIDTH * ST_NETNOTCH_HEIGHT / 2)) return nullptr;
|
||||||
return new FNotchTexture(lumpnum, ST_NETNOTCH_WIDTH, ST_NETNOTCH_HEIGHT);
|
return new FNotchTexture(lumpnum, ST_NETNOTCH_WIDTH, ST_NETNOTCH_HEIGHT);
|
||||||
}
|
}
|
||||||
|
if (fileSystem.CheckFileName(lumpnum, "STARTUP0"))
|
||||||
|
{
|
||||||
|
if (!CheckIfRaw(file, 64000)) return nullptr;
|
||||||
|
return new FStrifeStartupBackground(lumpnum);
|
||||||
|
}
|
||||||
|
for(auto& sst : StrifeRawPics)
|
||||||
|
{
|
||||||
|
if (fileSystem.CheckFileName(lumpnum, sst.name))
|
||||||
|
{
|
||||||
|
if (!CheckIfRaw(file, sst.width * sst.height)) return nullptr;
|
||||||
|
return new FStrifeStartupTexture(lumpnum, sst.width, sst.height);
|
||||||
|
}
|
||||||
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -286,3 +329,67 @@ int FNotchTexture::CopyPixels(FBitmap *bmp, int conversion)
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
FStrifeStartupTexture::FStrifeStartupTexture (int lumpnum, int w, int h)
|
||||||
|
: FImageSource(lumpnum)
|
||||||
|
{
|
||||||
|
Width = w;
|
||||||
|
Height = h;
|
||||||
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
TArray<uint8_t> FStrifeStartupTexture::CreatePalettedPixels(int conversion)
|
||||||
|
{
|
||||||
|
FileData lump = fileSystem.ReadFile (SourceLump);
|
||||||
|
const uint8_t *source = (const uint8_t *)lump.GetMem();
|
||||||
|
TArray<uint8_t> Pixels(Width*Height, true);
|
||||||
|
const uint8_t *remap = ImageHelpers::GetRemap(conversion == luminance);
|
||||||
|
ImageHelpers::FlipNonSquareBlockRemap(Pixels.Data(), source, Width, Height, Width, remap);
|
||||||
|
return Pixels;
|
||||||
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
FStrifeStartupBackground::FStrifeStartupBackground (int lumpnum)
|
||||||
|
: FImageSource(lumpnum)
|
||||||
|
{
|
||||||
|
Width = 320;
|
||||||
|
Height = 200;
|
||||||
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// this image is very messy but let's prepare it just like Strife does
|
||||||
|
// so that the screen can be replaced with a whole image.
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
TArray<uint8_t> FStrifeStartupBackground::CreatePalettedPixels(int conversion)
|
||||||
|
{
|
||||||
|
TArray<uint8_t> source(64000, true);
|
||||||
|
memset(source.Data(), 0xF0, 64000);
|
||||||
|
auto lumpr = fileSystem.OpenFileReader(SourceLump);
|
||||||
|
lumpr.Seek(57 * 320, FileReader::SeekSet);
|
||||||
|
lumpr.Read(source.Data() + 41 * 320, 95 * 320);
|
||||||
|
|
||||||
|
TArray<uint8_t> Pixels(Width*Height, true);
|
||||||
|
const uint8_t *remap = ImageHelpers::GetRemap(conversion == luminance);
|
||||||
|
ImageHelpers::FlipNonSquareBlockRemap(Pixels.Data(), source.Data(), Width, Height, Width, remap);
|
||||||
|
return Pixels;
|
||||||
|
}
|
||||||
|
|
|
@ -351,12 +351,12 @@ FImageSource * FImageSource::GetImage(int lumpnum, bool isflat)
|
||||||
{ StbImage_TryCreate, false },
|
{ StbImage_TryCreate, false },
|
||||||
{ TGAImage_TryCreate, false },
|
{ TGAImage_TryCreate, false },
|
||||||
{ AnmImage_TryCreate, false },
|
{ AnmImage_TryCreate, false },
|
||||||
|
{ StartupPageImage_TryCreate, false },
|
||||||
{ RawPageImage_TryCreate, false },
|
{ RawPageImage_TryCreate, false },
|
||||||
{ FlatImage_TryCreate, true }, // flat detection is not reliable, so only consider this for real flats.
|
{ FlatImage_TryCreate, true }, // flat detection is not reliable, so only consider this for real flats.
|
||||||
{ PatchImage_TryCreate, false },
|
{ PatchImage_TryCreate, false },
|
||||||
{ EmptyImage_TryCreate, false },
|
{ EmptyImage_TryCreate, false },
|
||||||
{ AutomapImage_TryCreate, false },
|
{ AutomapImage_TryCreate, false },
|
||||||
{ StartupPageImage_TryCreate, false },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (lumpnum == -1) return nullptr;
|
if (lumpnum == -1) return nullptr;
|
||||||
|
|
Loading…
Reference in a new issue