mirror of
https://github.com/jmarshall23/CnC_Remastered_Collection.git
synced 2026-08-12 08:00:55 +02:00
Tiberian Sun Iso tiles now load into the placement dialog editor.
This commit is contained in:
@@ -29,112 +29,8 @@
|
||||
using std::memcpy;
|
||||
|
||||
class GraphicViewPortClass;
|
||||
|
||||
struct IsoTileHeader_t {
|
||||
int TileWidth;
|
||||
int TileHeight;
|
||||
int TileImageWidth;
|
||||
int TileImageHeight;
|
||||
};
|
||||
|
||||
byte TempTSStampData[48 * 24 * 4];
|
||||
|
||||
struct IsoTileImageHeader
|
||||
{
|
||||
int TileX;
|
||||
int TileY;
|
||||
uint8_t* GetExtraData(IsoTile *tile)
|
||||
{
|
||||
return reinterpret_cast<uint8_t*>(tile) + ExtraOffset;
|
||||
}
|
||||
|
||||
uint8_t* GetZData(IsoTile* tile)
|
||||
{
|
||||
return reinterpret_cast<uint8_t*>(tile) + ZDataoffset;
|
||||
}
|
||||
|
||||
uint8_t* GetExtraZData(IsoTile* tile)
|
||||
{
|
||||
return reinterpret_cast<uint8_t*>(tile) + ExtraZOffset;
|
||||
}
|
||||
|
||||
uint8_t* GetData() {
|
||||
return reinterpret_cast<uint8_t*>(this) + sizeof(IsoTileImageHeader);
|
||||
}
|
||||
|
||||
// https://xhp.xwis.net/documents/TMP_TS_Format.html
|
||||
uint8_t* GetRasterizedData() {
|
||||
memset(TempTSStampData, 0, sizeof(TempTSStampData));
|
||||
uint8_t* tileData = GetData();
|
||||
byte* w_line = TempTSStampData;
|
||||
int x = 24;
|
||||
int global_cx = 48;
|
||||
int cx = 0;
|
||||
for (int y = 0; y < 12; y++)
|
||||
{
|
||||
cx += 4;
|
||||
x -= 2;
|
||||
memcpy(w_line + x, tileData, cx);
|
||||
tileData += cx;
|
||||
w_line += global_cx;
|
||||
}
|
||||
for (; y < 23; y++)
|
||||
{
|
||||
cx -= 4;
|
||||
x += 2;
|
||||
memcpy(w_line + x, tileData, cx);
|
||||
tileData += cx;
|
||||
w_line += global_cx;
|
||||
}
|
||||
|
||||
return TempTSStampData;
|
||||
}
|
||||
|
||||
int32_t ExtraOffset;
|
||||
int32_t ZDataoffset;
|
||||
int32_t ExtraZOffset;
|
||||
signed int ExtraX;
|
||||
signed int ExtraY;
|
||||
int ExtraWidth;
|
||||
int ExtraHeight;
|
||||
struct Flags
|
||||
{
|
||||
unsigned int HasExtraData : 1; //1
|
||||
unsigned int HasZData : 1; //2
|
||||
unsigned int HasDamagedData : 1; //4
|
||||
// invalid cause memory wasn'y cleared so all bitfields are at 0xCD by default
|
||||
//unsigned int Bit8 : 1; //8
|
||||
//unsigned int Bit16 : 1; //16
|
||||
//unsigned int Bit32 : 1; //32
|
||||
//unsigned int Bit64 : 1; //64
|
||||
//unsigned int Bit128 : 1; //128
|
||||
|
||||
};
|
||||
unsigned char Height;
|
||||
unsigned char TileType;
|
||||
unsigned char RampType;
|
||||
RGBClass LowRGB;
|
||||
RGBClass HighRGB;
|
||||
unsigned char Padding[3];
|
||||
};
|
||||
|
||||
class IsoTile {
|
||||
public:
|
||||
int TileImageWidth() { return header.TileImageWidth; }
|
||||
int TileImageHeight() { return header.TileImageHeight; }
|
||||
|
||||
IsoTileImageHeader *GetTileInfo(int idx) {
|
||||
uint8_t* ptr = reinterpret_cast<uint8_t*>(this);
|
||||
ptr += sizeof(IsoTileHeader_t);
|
||||
uint32_t* offsets = (uint32_t*)ptr;
|
||||
IsoTileImageHeader* tileImageHeaders = (IsoTileImageHeader * )(((uint8_t*)this) + offsets[idx]);
|
||||
return tileImageHeaders;
|
||||
}
|
||||
int NumTiles(void) { return header.TileWidth * header.TileHeight; }
|
||||
private:
|
||||
IsoTileHeader_t header;
|
||||
};
|
||||
|
||||
Image_t* Load_StampHD(int theater, const char* iconName, const void* icondata) {
|
||||
char filename[2048];
|
||||
Image_t* image = NULL;
|
||||
|
||||
Reference in New Issue
Block a user