mirror of
https://github.com/electronicarts/CNC_TS_and_RA2_Mission_Editor.git
synced 2025-04-30 17:11:40 -04:00
resolved palette house color issue .
This commit is contained in:
parent
79856fabd8
commit
bdb9c28fe0
6 changed files with 36 additions and 20 deletions
|
@ -635,7 +635,7 @@ __forceinline void BlitPic(void* dst, int x, int y, int dleft, int dtop, int dpi
|
|||
|
||||
if (dest >= dst) {
|
||||
int c;
|
||||
if (!color || newPal != iPalUnit || val < houseColorMin || val > houseColorMax) {
|
||||
if (!color || !pd.bHouseColor || val < houseColorMin || val > houseColorMax) {
|
||||
c = newPal[val];
|
||||
} else {
|
||||
// Replace the original palette color with the house color
|
||||
|
|
|
@ -1959,14 +1959,19 @@ void CLoading::LoadVehicleOrAircraft(const CString& ID)
|
|||
|
||||
}
|
||||
|
||||
void CLoading::SetImageData(unsigned char* pBuffer, const CString& NameInDict, int FullWidth, int FullHeight, Palette* pPal)
|
||||
void CLoading::SetImageData(unsigned char* pBuffer, const CString& NameInDict, int FullWidth, int FullHeight, Palette* pPal, bool forceNoRemap)
|
||||
{
|
||||
ASSERT(!NameInDict.IsEmpty());
|
||||
auto& data = pics[NameInDict];
|
||||
SetImageData(pBuffer, data, FullWidth, FullHeight, pPal);
|
||||
|
||||
if (NameInDict.Find("CNST") >= 0) {
|
||||
printf("");
|
||||
}
|
||||
|
||||
SetImageData(pBuffer, data, FullWidth, FullHeight, pPal, forceNoRemap);
|
||||
}
|
||||
|
||||
void CLoading::SetImageData(unsigned char* pBuffer, PICDATA& pData, const int FullWidth, const int FullHeight, Palette* pPal)
|
||||
void CLoading::SetImageData(unsigned char* pBuffer, PICDATA& pData, const int FullWidth, const int FullHeight, Palette* pPal, bool forceNoRemap)
|
||||
{
|
||||
if (pData.pic) {
|
||||
delete[](pData.pic);
|
||||
|
@ -2019,7 +2024,13 @@ void CLoading::SetImageData(unsigned char* pBuffer, PICDATA& pData, const int Fu
|
|||
//auto limited_to_theater = artSection.GetBool("TerrainPalette") ? shp->mixfile_theater : TheaterChar::None;
|
||||
auto limited_to_theater = TheaterChar::None;
|
||||
pData.bTerrain = limited_to_theater;
|
||||
pData.pal = pPal ? reinterpret_cast<const int*>(pPal->GetData()) : iPalUnit;
|
||||
if (pPal) {
|
||||
pData.pal = reinterpret_cast<const int*>(pPal->GetData());
|
||||
pData.bHouseColor = pPal->IsRemappable() && !forceNoRemap;
|
||||
return;
|
||||
}
|
||||
pData.pal = iPalUnit;
|
||||
pData.bHouseColor = true;
|
||||
}
|
||||
|
||||
void CLoading::LoadBuildingSubGraphic(const CString& subkey, const CIniFileSection& artSection, BOOL bAlwaysSetChar, char theat, HMIXFILE hShpMix, SHPHEADER& shp_h, BYTE*& shp)
|
||||
|
@ -3461,7 +3472,7 @@ void CLoading::LoadOverlayGraphic(const CString& lpOvrlName_, int iOvrlNum)
|
|||
char ic[50];
|
||||
itoa(i, ic, 10);
|
||||
|
||||
pics[(CString)"OVRL" + OvrlID + "_" + ic].bTried = TRUE;
|
||||
pics[(CString)"OVRL" + OvrlID + "_" + ic].bTried = true;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -115,8 +115,8 @@ public:
|
|||
void LoadTerrainOrSmudge(const CString& ID);
|
||||
void LoadVehicleOrAircraft(const CString& ID);
|
||||
|
||||
void SetImageData(unsigned char* pBuffer, const CString& NameInDict, int FullWidth, int FullHeight, Palette* pPal);
|
||||
void SetImageData(unsigned char* pBuffer, PICDATA& pData, const int FullWidth, const int FullHeight, Palette* pPal);
|
||||
void SetImageData(unsigned char* pBuffer, const CString& NameInDict, int FullWidth, int FullHeight, Palette* pPal, bool forceNoRemap = false);
|
||||
void SetImageData(unsigned char* pBuffer, PICDATA& pData, const int FullWidth, const int FullHeight, Palette* pPal, bool forceNoRemap);
|
||||
void UnionSHP_Add(unsigned char* pBuffer, int Width, int Height, int DeltaX = 0, int DeltaY = 0, bool UseTemp = false);
|
||||
void UnionSHP_GetAndClear(unsigned char*& pOutBuffer, int* OutWidth, int* OutHeight, bool clearBuffer = true, bool UseTemp = false);
|
||||
void VXL_Add(const unsigned char* pCache, int X, int Y, int Width, int Height);
|
||||
|
|
|
@ -113,12 +113,12 @@ void Palettes::Init()
|
|||
LoadedPalettes["isolun.pal"] = new Palette(m_hPalIsoLun);
|
||||
LoadedPalettes["isodes.pal"] = new Palette(m_hPalIsoDes);
|
||||
|
||||
LoadedPalettes["unittem.pal"] = new Palette(m_hPalUnitTemp);
|
||||
LoadedPalettes["unitsno.pal"] = new Palette(m_hPalUnitSnow);
|
||||
LoadedPalettes["uniturb.pal"] = new Palette(m_hPalUnitUrb);
|
||||
LoadedPalettes["unitubn.pal"] = new Palette(m_hPalUnitUbn);
|
||||
LoadedPalettes["unitlun.pal"] = new Palette(m_hPalUnitLun);
|
||||
LoadedPalettes["unitdes.pal"] = new Palette(m_hPalUnitDes);
|
||||
LoadedPalettes["unittem.pal"] = new Palette(m_hPalUnitTemp, true);
|
||||
LoadedPalettes["unitsno.pal"] = new Palette(m_hPalUnitSnow, true);
|
||||
LoadedPalettes["uniturb.pal"] = new Palette(m_hPalUnitUrb, true);
|
||||
LoadedPalettes["unitubn.pal"] = new Palette(m_hPalUnitUbn, true);
|
||||
LoadedPalettes["unitlun.pal"] = new Palette(m_hPalUnitLun, true);
|
||||
LoadedPalettes["unitdes.pal"] = new Palette(m_hPalUnitDes, true);
|
||||
|
||||
LoadedPalettes["temperat.pal"] = new Palette(m_hPalTemp);
|
||||
LoadedPalettes["snow.pal"] = new Palette(m_hPalSnow);
|
||||
|
@ -327,7 +327,8 @@ void Palettes::Clear()
|
|||
Init();
|
||||
}
|
||||
|
||||
Palette::Palette(const BytePalette& bytes)
|
||||
Palette::Palette(const BytePalette& bytes, bool remappable) :
|
||||
Remappable(remappable)
|
||||
{
|
||||
for (auto idx = 0; idx < 256; idx++) {
|
||||
Data[idx].R = bytes.Data[idx].red;
|
||||
|
@ -337,7 +338,8 @@ Palette::Palette(const BytePalette& bytes)
|
|||
}
|
||||
}
|
||||
|
||||
Palette::Palette(HTSPALETTE indexer)
|
||||
Palette::Palette(HTSPALETTE indexer, bool remappable) :
|
||||
Remappable(remappable)
|
||||
{
|
||||
for (auto idx = 0; idx < 256; idx++) {
|
||||
RGBTRIPLE ret;
|
||||
|
|
|
@ -29,8 +29,8 @@ public:
|
|||
class Palette
|
||||
{
|
||||
public:
|
||||
Palette(const BytePalette& bytes);
|
||||
Palette(HTSPALETTE raw);
|
||||
Palette(const BytePalette& bytes, bool remappable = false);
|
||||
Palette(HTSPALETTE raw, bool remappable = false);
|
||||
|
||||
BGRStruct& operator[](int index) { return Data[index]; }
|
||||
ColorStruct GetByteColor(int index) {
|
||||
|
@ -42,9 +42,11 @@ public:
|
|||
return ret;
|
||||
}
|
||||
const BGRStruct* GetData() const { return Data; }
|
||||
bool IsRemappable() const { return Remappable; }
|
||||
|
||||
private:
|
||||
BGRStruct Data[256];
|
||||
BGRStruct Data[256]{};
|
||||
bool Remappable{};
|
||||
};
|
||||
|
||||
class Palettes
|
||||
|
|
|
@ -133,7 +133,8 @@ struct PICDATA {
|
|||
WORD wMaxHeight = 0; // for SHPs (size of whole surface)
|
||||
BYTE bType = 0; // is loaded from voxel, shp, bmp, etc... (for drawing logic)
|
||||
TheaterChar bTerrain = TheaterChar::None;
|
||||
BOOL bTried = 0; // already tried to load this? - superseded by global array missingimages
|
||||
bool bTried = false; // already tried to load this? - superseded by global array missingimages
|
||||
bool bHouseColor = false;
|
||||
|
||||
inline ProjectedVec drawOffset() const
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue