This commit is contained in:
Daveo 2001-04-07 21:17:27 +00:00
parent aefdd396f8
commit 4e8b7d3628
11 changed files with 414 additions and 484 deletions

View file

@ -35,16 +35,6 @@ sBackRGBTable CLayerBack::BackRGBTable[]=
#define BackRGBTableSize sizeof(BackRGBTable)/sizeof(sBackRGBTable)
sBackSpriteInfo CLayerBack::InfoTab[]=
{
{FRM_FLOWER,0,0},
{FRM_GHOST,0,3},
{FRM_PUMPKIN,0,3},
{FRM_BUBBLE,NO_SPIN | NO_SCALE | NO_COLOR,3 },
{FRM_BUBBLESMALL,NO_SPIN | NO_SCALE | NO_COLOR,3},
{FRM_FISHBONE,NO_COLOR,0},
};
/*****************************************************************************/
/*****************************************************************************/
/*****************************************************************************/
@ -54,8 +44,44 @@ CLayerBack::CLayerBack(sLayerHdr *Hdr,sTile *TileBank) : CLayerTile(Hdr,TileBank
ASSERT(Data->Count<=LAYER_SHADE_RGB_MAX);
BandCount=Data->Count-1;
// Setup back gfx
for (int i=0; i<SPRITE_MAX; i++)
{
int Type=i&1;
POLY_GT4 *Gt4=&SpriteList[i].Poly;
SpriteList[i].Type=Type;
setPolyGT4(Gt4);
Gt4->tpage=Data->BackGfx[Type].TPage;
Gt4->clut=Data->BackGfx[Type].Clut;
setUVWH(Gt4,Data->BackGfx[Type].U,Data->BackGfx[Type].V,Data->BackGfx[Type].W,Data->BackGfx[Type].H);
SpriteList[i].W=Data->BackGfx[Type].W;
SpriteList[i].H=Data->BackGfx[Type].H;
setSemiTrans(Gt4,1);
Gt4->u1--; Gt4->u3--;
Gt4->v2--; Gt4->v3--;
// Init all
setRGB0(Gt4,255,255,255);
setRGB1(Gt4,255,255,255);
setRGB2(Gt4,255,255,255);
setRGB3(Gt4,255,255,255);
SpriteList[i].Angle=0;
SpriteList[i].AngleInc=0;
SpriteList[i].PosInc.vx=0;
SpriteList[i].PosInc.vy=0;
SpriteList[i].Scale.vx=1024;
SpriteList[i].Scale.vy=1024;
SpriteList[i].ScaleInc.vx=0;
SpriteList[i].ScaleInc.vy=0;
InitSprite(&SpriteList[i]);
SpriteList[i].Pos.vx=getRndRange(512<<MOVE_SHIFT);
SpriteList[i].Pos.vy=getRndRange(256<<MOVE_SHIFT);
}
Sprites=CGameScene::GetBackSprites();
}
/*****************************************************************************/
@ -88,56 +114,6 @@ void CLayerBack::init(DVECTOR &MapPos,int Shift)
YOfs=MapPos.vy;
}
/*****************************************************************************/
void CLayerBack::SetFrames(int Spr0,int Spr1)
{
int Spr[2];
Spr[0]=Spr0;
Spr[1]=Spr1;
for (int i=0; i<SPRITE_MAX; i++)
{
int Type=Spr[i&1];
POLY_GT4 *Gt4=&SpriteList[i].Poly;
sFrameHdr *Frm=Sprites->getFrameHeader(InfoTab[Type].Frame);
SpriteList[i].Type=Type;
Sprites->prepareGT4(Gt4,Frm,0,0,0,0);
SpriteList[i].W=Frm->W;
SpriteList[i].H=Frm->W;
setSemiTrans(Gt4,1);
Gt4->tpage|=InfoTab[Type].Trans<<5;
if (Frm->Rotated)
{
Gt4->u2++; Gt4->u3++;
Gt4->v2++; Gt4->v3++;
}
else
{
Gt4->u1--; Gt4->u3--;
Gt4->v2--; Gt4->v3--;
}
// Init all
setRGB0(Gt4,255,255,255);
setRGB1(Gt4,255,255,255);
setRGB2(Gt4,255,255,255);
setRGB3(Gt4,255,255,255);
SpriteList[i].Angle=0;
SpriteList[i].AngleInc=0;
SpriteList[i].PosInc.vx=0;
SpriteList[i].PosInc.vy=0;
SpriteList[i].Scale.vx=1024;
SpriteList[i].Scale.vy=1024;
SpriteList[i].ScaleInc.vx=0;
SpriteList[i].ScaleInc.vy=0;
InitSprite(&SpriteList[i]);
SpriteList[i].Pos.vx=getRndRange(512<<MOVE_SHIFT);
SpriteList[i].Pos.vy=getRndRange(256<<MOVE_SHIFT);
}
}
/*****************************************************************************/
void CLayerBack::shutdown()
{
@ -152,7 +128,7 @@ int Pos=getRnd();
int XInc=(getRndRange((1<<((MOVE_SHIFT*1)/3))-1)+1)<<MOVE_SHIFT;
int YInc=(getRndRange((1<<((MOVE_SHIFT*1)/3))-1)+1)<<MOVE_SHIFT;
if (!(InfoTab[SpritePtr->Type].Flags & NO_MOVE))
if (Data->BackGfx[SpritePtr->Type].Flags & MOVE)
{
switch(StartPos&3)
{
@ -198,7 +174,7 @@ int YInc=(getRndRange((1<<((MOVE_SHIFT*1)/3))-1)+1)<<MOVE_SHIFT;
SpritePtr->Pos.vy<<=MOVE_SHIFT;
}
if (!(InfoTab[SpritePtr->Type].Flags & NO_SCALE))
if (Data->BackGfx[SpritePtr->Type].Flags & SCALE)
{
SpritePtr->Scale.vx=getRndRange(4095);
SpritePtr->Scale.vy=getRndRange(4095);
@ -207,13 +183,13 @@ int YInc=(getRndRange((1<<((MOVE_SHIFT*1)/3))-1)+1)<<MOVE_SHIFT;
SpritePtr->ScaleInc.vy=getRndRange(31)+31;
if (SpritePtr->ScaleInc.vy&1) SpritePtr->ScaleInc.vy=-SpritePtr->ScaleInc.vy;
}
if (!(InfoTab[SpritePtr->Type].Flags & NO_SPIN))
if (Data->BackGfx[SpritePtr->Type].Flags & SPIN)
{
SpritePtr->AngleInc=getRndRange(31)+31;
if (SpritePtr->AngleInc&1) SpritePtr->AngleInc=-SpritePtr->AngleInc;
}
if (!(InfoTab[SpritePtr->Type].Flags & NO_COLOR))
if (Data->BackGfx[SpritePtr->Type].Flags & COLOR)
{
int i;
i=getRndRange(BackRGBTableSize-1); SpritePtr->Poly.r0=BackRGBTable[i].R; SpritePtr->Poly.g0=BackRGBTable[i].G; SpritePtr->Poly.b0=BackRGBTable[i].B;
@ -281,8 +257,7 @@ int ScaleY=msin(SpritePtr->Scale.vy);
Gt4->tpage|=Tran<<5;
sBox Box;
Sprites->RotateBox(&Box,SpritePtr->W,SpritePtr->W,ScaleX,ScaleY,SpritePtr->Angle);
RotateBox(&Box,SpritePtr->W,SpritePtr->W,ScaleX,ScaleY,SpritePtr->Angle);
Gt4->x0=X+Box.x0; Gt4->y0=Y+Box.y0;
Gt4->x1=X+Box.x1; Gt4->y1=Y+Box.y1;
Gt4->x2=X+Box.x2; Gt4->y2=Y+Box.y2;