{
GET(ObjectTypeClass *, pType, ECX);
TechnoTypeClass *pTechnoType = reinterpret_cast<TechnoTypeClass *>(pType);
TechnoTypeExt::ExtData * pTypeData = TechnoTypeExt::ExtMap.Find(pTechnoType);
char basename[256];
int scenarioTheater = ScenarioClass::Instance->Theater;
Theater *pTheaterData = &Theater::Array[scenarioTheater];
if(pTypeData) {
if(pTypeData->AlternateTheaterArt) {
if(!pType->ArcticArtInUse) {
pType->ArcticArtInUse = true;
_snprintf(basename, 256, "%s%s", pType->ImageFile, pTheaterData->Letter);
if(!CCINIClass::INI_Art->GetSection(basename)) {
pType->ArcticArtInUse = false;
_snprintf(basename, 256, "%s", pType->ImageFile);
}
AresCRT::strCopy(pType->ImageFile, basename, 0x19);
}
}
} else if(pType->AlternateArcticArt && scenarioTheater == th_Snow && !pType->ImageIsOutdated) {
if(!pType->ArcticArtInUse) {
_snprintf(basename, 256, "%sA", pType->ImageFile);
AresCRT::strCopy(pType->ImageFile, basename, 0x19);
pType->ArcticArtInUse = true;
}
} else {
AresCRT::strCopy(basename, pType->ImageFile, 0x1A);
pType->ArcticArtInUse = false;
}
_snprintf(basename, 256, "%s.%s", pType->ImageFile, (pType->Theater ? pTheaterData->Extension : "SHP"));
if(!pType->Theater && pType->NewTheater && scenarioTheater != -1) {
char c0 = basename[0];
char c1 = basename[1] & ~0x20;
if(isalpha(c0)) {
if(c1 == 'A' || c1 == 'T') {
basename[1] = pTheaterData->Letter[0];
}
}
}
if(pType->ImageIsOutdated) {
if(pType->Image) {
GAME_DEALLOC(pType->Image);
}
}
pType->Image = NULL;
pType->ImageIsOutdated = false;
switch(pType->WhatAmI()) {
case SmudgeTypeClass::AbsID:
case TerrainTypeClass::AbsID:
break;
case OverlayTypeClass::AbsID:
case AnimTypeClass::AbsID:
pType->Image = reinterpret_cast<SHPStruct *>(FileSystem::LoadFile(basename, true));
if(!pType->Image) {
basename[1] = 'G';
pType->Image = reinterpret_cast<SHPStruct *>(FileSystem::LoadFile(basename, true));
}
break;
default:
pType->Image = reinterpret_cast<SHPStruct *>(FileSystem::LoadFile(basename, false));
if(!pType->Image) {
basename[1] = 'G';
pType->Image = reinterpret_cast<SHPStruct *>(FileSystem::LoadFile(basename, true));
}
break;
}
if(SHPStruct *SHP = pType->Image) {
pType->MaxDimension = std::max<short>(std::max<short>(SHP->Width, SHP->Height), 8);
}
return 0x5F92C3;
}