71 lines
1.7 KiB
C++
71 lines
1.7 KiB
C++
|
|
#include "TRACK.h"
|
|
#include "MEDIA.h"
|
|
|
|
|
|
class PALT_Grabber:public INPUT_IO
|
|
{
|
|
public:
|
|
int INIT (class WORLD*){return 0;};
|
|
int FRAME (void){return 0;};
|
|
int END (void){return 0;};
|
|
IOTYPE GetType() {return IOtype_PALT;};
|
|
|
|
};
|
|
|
|
|
|
INPUT_IO *PALT_CREATE(char *Filename)
|
|
{
|
|
u32 SX,SY,NBZones;
|
|
INPUT_IO *Ret;
|
|
Ret = (INPUT_IO *)new(PALT_Grabber);
|
|
SX = SY = NBZones = 0;
|
|
u32 NBX, NBY;
|
|
|
|
u32 *tabPtr;
|
|
u32 tab4[4] = { 0x000000, 0xFF0000, 0x00FF00, 0x0000FF };
|
|
u32 tab16[16] = { 0x000000, 0xFF0000, 0x00FF00, 0x0000FF, 0xBFBFBF, 0xFFFF00, 0xFF00FF, 0x00FFFF,
|
|
0xFFFFFF, 0xFF7F7F, 0x7FFF7F, 0x7F7FFF, 0x3F3F3F, 0xFFFF7F, 0xFF7FFF, 0x7FFFFF};
|
|
|
|
tabPtr = NULL;
|
|
|
|
while (*Filename && (!IsDeci(*Filename))) Filename++;
|
|
while (*Filename && (IsDeci(*Filename))) {SX *= 10; SX += IsDeci(*Filename++) - 1;};
|
|
while (*Filename && (!IsDeci(*Filename))) Filename++;
|
|
while (*Filename && (IsDeci(*Filename))) {SY *= 10; SY += IsDeci(*Filename++) - 1;};
|
|
while (*Filename && (!IsDeci(*Filename))) Filename++;
|
|
while (*Filename && (IsDeci(*Filename))) {NBZones*= 10; NBZones += IsDeci(*Filename++) - 1;};
|
|
strcpy((char*)Ret->MediaName,Filename);
|
|
if (SX > 512) SX = 512;
|
|
if (SY > 512) SY = 512;
|
|
if (SX < 4) SX = 4;
|
|
if (SY < 4) SY = 4;
|
|
Ret->Image.SetSize(SX, SY);
|
|
Ret->dTotalTime = 0;
|
|
Ret->dAvgFramePerSecond = 30.0;
|
|
|
|
if (NBZones == 4)
|
|
{
|
|
tabPtr = tab4;
|
|
NBX = NBY = 2;
|
|
}
|
|
if (NBZones == 16)
|
|
{
|
|
tabPtr = tab16;
|
|
NBX = NBY = 4;
|
|
}
|
|
|
|
s32 *pBASE = Ret->Image.GetBase();
|
|
if (tabPtr != NULL)
|
|
{
|
|
for (u32 counterY=0; counterY<SY; counterY++) {
|
|
for (u32 counterX=0; counterX<SX; counterX++) {
|
|
pBASE[counterX + (SY - counterY - 1)*SX] = tabPtr[counterX*NBX/SX + counterY*NBY/SY*NBX];
|
|
}
|
|
}
|
|
}
|
|
|
|
return (INPUT_IO *)Ret;
|
|
};
|
|
|
|
|