2
0
mirror of https://frontier.innolan.net/github/amigaos-cross-toolchain6.git synced 2024-10-19 10:29:55 +00:00
Files
2017-05-27 00:00:48 +02:00

1151 lines
41 KiB
C
Executable File

#include "IT2_Defines.h"
#include "IT2_Types.h"
#include "IT2_Vars.h"
#include "IT2_Functions.h"
// will be global variables... waste of memory - maybe we can move them to the heap? ...
double FactorCos, FactorSin, FactorMSin, FactorMCos;
uint8 AScr;
VectorObj VObj[13];
APTR SMemA[4];
uint32 SMemL[4];
// ------------------------------
void SETDARKCOLOR(char* FName, r_Col* Colors)
{
uint32 AddrX, ISize;
uint8 i;
uint32* ColorID;
r_Col* Col;
BPTR FHandle;
FHandle = OPENSMOOTH(FName, MODE_OLDFILE);
if (FHandle == 0) { return; }
ISize = Seek(FHandle, 0, OFFSET_END);
ISize = Seek(FHandle, 0, OFFSET_BEGINNING);
(void) Read(FHandle, IMemA[0], ISize);
Close(FHandle);
AddrX = (uint32) IMemA[0];
do
{
ColorID = (uint32*) AddrX;
AddrX += 4;
}
while ((AddrX < ((uint32) IMemA[0]+ISize)) && (*ColorID != _COLOR_CMAP_TEXT_));
if (*ColorID == _COLOR_CMAP_TEXT_)
{
AddrX += 4;
i = 0;
do
{
Col = (r_Col*) AddrX;
AddrX += 3;
Colors[i] = *Col;
SetRGB32(&(MyScreen[1]->ViewPort),i,0,0,0);
SetRGB32(&(MyScreen[2]->ViewPort),i,0,0,0);
i++;
}
while (AddrX < ((uint32) IMemA[0]+ISize));
}
Colors[31] = (r_Col) {45,45,62};
}
void INTROEXIT(PLANEPTR MyRastPtr)
{
uint8 i;
SWITCHDISPLAY();
(void) SetTaskPri(FindTask(NULL),0);
if (MyRastPtr != NULL) { FreeRaster(MyRastPtr,640,360); }
MyRastPtr = NULL;
for (i = 1; i<=2; i++)
{
if (MyScreen[i] != NULL)
{
RECT(MyScreen[i],0,0,75,639,434);
}
}
for (i = 1; i<=2; i++)
{
if (MyScreen[i] != NULL)
{
CloseScreen(MyScreen[i]);
MyScreen[i] = NULL;
}
}
for (i = 1; i<=3; i++)
{
if (SMemA[i]>0)
{
FreeMem(SMemA[i],SMemL[i]);
SMemA[i] = 0;
}
}
for (i = 0; i<=1; i++)
{
if (IMemA[i] > 0)
{
FreeMem(IMemA[i],IMemL[i]);
IMemA[i] = 0;
}
}
/* if (TMPtr != 0)
{
StopPlayer;
UnloadModule(TMPtr);
}
TMPtr = 0;
*/
custom.dmacon = BITCLR | DMAF_AUDIO; // 0x000F
}
void ROTATEpX(uint8 k)
{
int i;
double store;
if (VObj[k].Size1 == 0) { return; }
for (i = 0; i<VObj[k].Size1; i++)
{
store = VObj[k].Y1[i];
VObj[k].Y1[i] = store*FactorCos - VObj[k].Z1[i]*FactorSin;
VObj[k].Z1[i] = store*FactorSin + VObj[k].Z1[i]*FactorCos;
}
if (VObj[k].Size2 == 0) { return; }
for (i = 0; i<VObj[k].Size2; i++)
{
store = VObj[k].Y2[i];
VObj[k].Y2[i] = store*FactorCos - VObj[k].Z2[i]*FactorSin;
VObj[k].Z2[i] = store*FactorSin + VObj[k].Z2[i]*FactorCos;
}
}
void ROTATEpY(uint8 k)
{
int i;
double store;
if (VObj[k].Size1 == 0) { return; }
for (i = 0; i<VObj[k].Size1; i++)
{
store = VObj[k].X1[i];
VObj[k].X1[i] = store*FactorCos - VObj[k].Z1[i]*FactorSin;
VObj[k].Z1[i] = store*FactorSin + VObj[k].Z1[i]*FactorCos;
}
if (VObj[k].Size2 == 0) { return; }
for (i = 0; i<VObj[k].Size2; i++)
{
store = VObj[k].X2[i];
VObj[k].X2[i] = store*FactorCos - VObj[k].Z2[i]*FactorSin;
VObj[k].Z2[i] = store*FactorSin + VObj[k].Z2[i]*FactorCos;
}
}
void ROTATEpZ(uint8 k)
{
int i;
double store;
if (VObj[k].Size1 == 0) { return; }
for (i = 0; i<VObj[k].Size1; i++)
{
store = VObj[k].X1[i];
VObj[k].X1[i] = store*FactorCos-VObj[k].Y1[i]*FactorSin;
VObj[k].Y1[i] = store*FactorSin+VObj[k].Y1[i]*FactorCos;
}
if (VObj[k].Size2 == 0) { return; }
for (i = 0; i<VObj[k].Size2; i++)
{
store = VObj[k].X2[i];
VObj[k].X2[i] = store*FactorCos-VObj[k].Y2[i]*FactorSin;
VObj[k].Y2[i] = store*FactorSin+VObj[k].Y2[i]*FactorCos;
}
}
void ROTATEnX(uint8 k)
{
int i;
double store;
if (VObj[k].Size1 == 0) { return; }
for (i = 0; i<VObj[k].Size1; i++)
{
store = VObj[k].Y1[i];
VObj[k].Y1[i] = store*FactorMCos-VObj[k].Z1[i]*FactorMSin;
VObj[k].Z1[i] = store*FactorMSin+VObj[k].Z1[i]*FactorMCos;
}
if (VObj[k].Size2 == 0) { return; }
for (i = 0; i<VObj[k].Size2; i++)
{
store = VObj[k].Y2[i];
VObj[k].Y2[i] = store*FactorMCos-VObj[k].Z2[i]*FactorMSin;
VObj[k].Z2[i] = store*FactorMSin+VObj[k].Z2[i]*FactorMCos;
}
}
void ROTATEnY(uint8 k)
{
int i;
double store;
if (VObj[k].Size1 == 0) { return; }
for (i = 0; i<VObj[k].Size1; i++)
{
store = VObj[k].X1[i];
VObj[k].X1[i] = store*FactorMCos - VObj[k].Z1[i]*FactorMSin;
VObj[k].Z1[i] = store*FactorMSin + VObj[k].Z1[i]*FactorMCos;
}
if (VObj[k].Size2 == 0) { return; }
for (i = 0; i<VObj[k].Size2; i++)
{
store = VObj[k].X2[i];
VObj[k].X2[i] = store*FactorMCos - VObj[k].Z2[i]*FactorMSin;
VObj[k].Z2[i] = store*FactorMSin + VObj[k].Z2[i]*FactorMCos;
}
}
void ROTATEnZ(uint8 k)
{
int i;
double store;
if (VObj[k].Size1 == 0) { return; }
for (i = 0; i<VObj[k].Size1; i++)
{
store = VObj[k].X1[i];
VObj[k].X1[i] = store*FactorMCos-VObj[k].Y1[i]*FactorMSin;
VObj[k].Y1[i] = store*FactorMSin+VObj[k].Y1[i]*FactorMCos;
}
if (VObj[k].Size2 == 0) { return; }
for (i = 0; i<VObj[k].Size2; i++)
{
store = VObj[k].X2[i];
VObj[k].X2[i] = store*FactorMCos-VObj[k].Y2[i]*FactorMSin;
VObj[k].Y2[i] = store*FactorMSin+VObj[k].Y2[i]*FactorMCos;
}
}
void FLY(uint8 k, double Factor)
{
int i;
if (VObj[k].Size1 == 0) { return; }
for (i = 0; i<VObj[k].Size1; i++)
{
VObj[k].X1[i] = VObj[k].X1[i]*Factor;
VObj[k].Y1[i] = VObj[k].Y1[i]*Factor;
VObj[k].Z1[i] = VObj[k].Z1[i]*Factor;
if ((it_round(VObj[k].PosX-VObj[k].X1[i])<0) || (it_round(VObj[k].PosX-VObj[k].X1[i])>639)
|| (it_round(VObj[k].PosY-VObj[k].Y1[i])<75) || (it_round(VObj[k].PosY-VObj[k].Y1[i])>434))
{
VObj[k].Size1 = 0;
return;
}
}
if (VObj[k].Size2 == 0) { return; }
for (i = 0; i<VObj[k].Size2; i++)
{
VObj[k].X2[i] = VObj[k].X2[i]*Factor;
VObj[k].Y2[i] = VObj[k].Y2[i]*Factor;
VObj[k].Z2[i] = VObj[k].Z2[i]*Factor;
if ((it_round(VObj[k].PosX-VObj[k].X2[i])<0) || (it_round(VObj[k].PosX-VObj[k].X2[i])>639)
|| (it_round(VObj[k].PosY-VObj[k].Y2[i])<75) || (it_round(VObj[k].PosY-VObj[k].Y2[i])>434))
{
VObj[k].Size1 = 0;
VObj[k].Size2 = 0;
return;
}
}
}
void GREATEFFECT(uint8 Objects, r_Col* Colors)
{
uint16 Ctr;
int i, j, k;
double Factor;
WaitTOF();
Factor = 0.0;
Ctr = 0;
do
{
ScreenToFront(MyScreen[AScr]);
AScr = 3-AScr;
Factor = Factor+0.02;
Ctr++;
for (i = 1; i<=31; i++)
{
SetRGB32(&(MyScreen[AScr]->ViewPort),i,it_round(Colors[i].r*Factor)<<24,
it_round(Colors[i].g*Factor)<<24,
it_round(Colors[i].b*Factor)<<24);
}
if (Ctr == 11)
{
/* SPAddrD^ = SMemA[2]; SPAddrC^ = SMemA[2]+SMemL[2] div 2;
SPVolD^ = 64; SPVolC^ = 64;
SPFreqD^ = 380; SPFreqC^ = 380;
SPLengthD^ = SMemL[2] div 4; SPLengthC^ = SMemL[2] div 4;
*/
custom.dmacon = BITSET | DMAF_AUD2 | DMAF_AUD3; // 0x800C
} else if (Ctr == 12)
{
/* SPLengthD^ = 1;
* SPLengthC^ = 1;
*/
}
}
while (Factor < 1);
SetRGB4(&(MyScreen[3-AScr]->ViewPort),0,8,8,10);
WaitTOF();
WaitTOF();
SetRGB4(&(MyScreen[3-AScr]->ViewPort),0,0,0,0);
for (i = 1; i<=31; i++)
{
SetRGB32(&(MyScreen[3-AScr]->ViewPort),i,Colors[i].r<<24,Colors[i].g<<24,Colors[i].b<<24);
}
delay(50);
do
{
ScreenToFront(MyScreen[AScr]);
AScr = 3-AScr;
Factor = Factor-0.02;
SetRGB32(&(MyScreen[AScr]->ViewPort),31,it_round(Colors[31].r*Factor)<<24,
it_round(Colors[31].g*Factor)<<24,
it_round(Colors[31].b*Factor)<<24);
}
while (Factor > 0);
for (i = 0; i<Objects; i++)
{
for (j = 0; j<VObj[i].Size1; j++)
{
VObj[i].PosX = VObj[i].PosX+VObj[i].X1[j];
VObj[i].PosY = VObj[i].PosY+VObj[i].Y1[j];
}
VObj[i].PosX = it_round(VObj[i].PosX / (double) VObj[i].Size1);
VObj[i].PosY = 235+it_round(VObj[i].PosY / (double) VObj[i].Size1);
for (j = 0; j<VObj[i].Size1; j++)
{
VObj[i].X1[j] = (VObj[i].PosX+1)-VObj[i].X1[j];
VObj[i].Y1[j] = (VObj[i].PosY+1)-VObj[i].Y1[j]-235;
}
if (VObj[i].Size2>0)
{
for (j = 0; j<VObj[i].Size2; j++)
{
VObj[i].X2[j] = (VObj[i].PosX+1)-VObj[i].X2[j];
VObj[i].Y2[j] = (VObj[i].PosY+1)-VObj[i].Y2[j]-235;
}
}
}
/* SPAddrD^ = SMemA[3]; SPAddrC^ = SMemA[3]+SMemL[3] div 2;
SPVolD^ = 64; SPVolC^ = 64;
SPFreqD^ = 550; SPFreqC^ = 550;
SPLengthD^ = SMemL[3] div 4; SPLengthC^ = SMemL[3] div 4;
*/
custom.dmacon = BITSET | DMAF_AUD2 | DMAF_AUD3; // 0x800C
Factor = 1.0025;
for (i = 1; (i<=29) && LMB_NOTPRESSED; i++)
{
Factor = Factor+0.004;
if (i>1)
{
SetAPen(&(MyScreen[AScr]->RastPort),0);
RectFill(&(MyScreen[AScr]->RastPort),0,150,639,330); /*75..434*/
} else {
for (j = 2; j<=30; j++)
{
SetRGB32(&(MyScreen[AScr]->ViewPort), j, (Colors[j].r*0xA)<<20,
(Colors[j].g*0xA)<<20,
(Colors[j].b*0xA)<<20);
}
}
if (i>16) { VObj[rand()%13].Size1 = 0; }
for (j = 0; j<Objects; j++)
{
if (VObj[j].Size1>0)
{
if (j > 1)
{
SetAPen(&(MyScreen[AScr]->RastPort),0);
if (VObj[j].Size2>4)
{
AreaMove( &(MyScreen[AScr]->RastPort),it_round(VObj[j].PosX-VObj[j].X2[3]),it_round(VObj[j].PosY-VObj[j].Y2[3]));
for (k = 4; k<=5; k++)
{
AreaDraw(&(MyScreen[AScr]->RastPort),it_round(VObj[j].PosX-VObj[j].X2[k]),it_round(VObj[j].PosY-VObj[j].Y2[k]));
}
}
AreaMove( &(MyScreen[AScr]->RastPort),it_round(VObj[j].PosX-VObj[j].X1[3]),it_round(VObj[j].PosY-VObj[j].Y1[3]));
for (k = 4; k<=5; k++)
{
AreaDraw(&(MyScreen[AScr]->RastPort),it_round(VObj[j].PosX-VObj[j].X1[k]),it_round(VObj[j].PosY-VObj[j].Y1[k]));
}
AreaEnd(&(MyScreen[AScr]->RastPort));
}
SetAPen(&(MyScreen[AScr]->RastPort),1);
AreaMove( &(MyScreen[AScr]->RastPort),it_round(VObj[j].PosX-VObj[j].X1[0]),it_round(VObj[j].PosY-VObj[j].Y1[0]));
for (k = 1; k<VObj[j].Size1; k++)
{
AreaDraw(&(MyScreen[AScr]->RastPort),it_round(VObj[j].PosX-VObj[j].X1[k]),it_round(VObj[j].PosY-VObj[j].Y1[k]));
}
AreaEnd(&(MyScreen[AScr]->RastPort));
if (VObj[j].Size2>0)
{
AreaMove( &(MyScreen[AScr]->RastPort),it_round(VObj[j].PosX-VObj[j].X2[0]),it_round(VObj[j].PosY-VObj[j].Y2[0]));
for (k = 1; k<VObj[j].Size2; k++)
{
AreaDraw(&(MyScreen[AScr]->RastPort),it_round(VObj[j].PosX-VObj[j].X2[k]),it_round(VObj[j].PosY-VObj[j].Y2[k]));
}
AreaEnd(&(MyScreen[AScr]->RastPort));
}
}
if ((VObj[j].Flag & ROTATE_PX) != 0) { ROTATEpX(j); }
if ((VObj[j].Flag & ROTATE_PY) != 0) { ROTATEpY(j); }
if ((VObj[j].Flag & ROTATE_PZ) != 0) { ROTATEpZ(j); }
if ((VObj[j].Flag & ROTATE_NX) != 0) { ROTATEnX(j); }
if ((VObj[j].Flag & ROTATE_NY) != 0) { ROTATEnY(j); }
if ((VObj[j].Flag & ROTATE_NZ) != 0) { ROTATEnZ(j); }
FLY(j, Factor);
}
ScreenToFront(MyScreen[AScr]);
AScr = 3-AScr;
if (i == 1)
{
/* SPLengthD^ = 1;
* SPLengthC^ = 1;
*/
}
}
for (i = 1; i<=2; i++)
{
SetAPen(&(MyScreen[AScr]->RastPort),0);
RectFill(&(MyScreen[AScr]->RastPort),0,75,639,434);
ScreenToFront(MyScreen[AScr]);
AScr = 3-AScr;
}
custom.dmacon = BITCLR | DMAF_AUD2 | DMAF_AUD3; // 0x000C
}
BOOL LOADSOUNDS()
{
uint8 i;
uint8 path_len;
uint32 ssize;
char s[40];
BPTR FHandle;
// INITCHANNELS();
path_len=strlen(PathStr[8]);
strcpy(s, PathStr[8]);
strcpy(s+path_len, "Snd0.RAW");
path_len+=3;
for (i = 1; i<=3; i++)
{
s[path_len] = i+'0';
FHandle = OPENSMOOTH(s,MODE_OLDFILE);
if (FHandle != 0)
{
ssize = Seek(FHandle,0,OFFSET_END);
ssize = Seek(FHandle,0,OFFSET_BEGINNING);
SMemL[i] = ssize;
SMemA[i] = AllocMem(ssize,MEMF_CHIP+MEMF_CLEAR);
if (SMemA[i] == 0) { return FALSE; }
ssize = Read(FHandle, SMemA[i], SMemL[i]);
Close(FHandle);
} else {
return FALSE;
}
}
return TRUE;
}
void MAININTRO()
{
char s[35];
BPTR FHandle;
int pathname_len;
r_Col Colors[128];
PLANEPTR MyRastPtr;
ITBitMap IntroBitMap;
struct BitMap MyBitMap;
struct TmpRas MyTmpRas;
struct AreaInfo MyAI;
StrArr16 SArr;
FontArr16 FArr;
r_Coords ShipX,ShipY,ShipZ;
int LEdge[3], TEdge[3];
uint8 btx;
uint32 l, ISize;
double SizeFactor;
double Factor;
double store;
uint8 i, j ,k;
// i = SetTaskPri(FindTask(NULL),120);
TMPtr = 0;
AScr = 1;
MyRastPtr = NULL;
for (i = 1; i<=2; i++) { MyScreen[i] = NULL; }
for (i = 1; i<=3; i++) { SMemA[i] = NULL; }
for (i = 0; i<=1; i++) { IMemA[i] = NULL; }
if (!LOADSOUNDS())
{
INTROEXIT(MyRastPtr); return;
}
for (i = 1; i<=2; i++)
{
MyScreen[i] = OPENCINEMA(5);
if (MyScreen[i] == NULL)
{
INTROEXIT(MyRastPtr); return;
}
}
IMemL[0] = 73500;
IMemA[0] = AllocMem(IMemL[0],MEMF_CHIP);
if (IMemA[0] == NULL)
{
INTROEXIT(MyRastPtr); return;
}
IntroBitMap = (ITBitMap) {80,183,1,5,0, {(PLANEPTR) IMemA[0], (PLANEPTR) (IMemA[0]+14640),
(PLANEPTR) (IMemA[0]+29280), (PLANEPTR) (IMemA[0]+43920),
(PLANEPTR) (IMemA[0]+58560), NULL, NULL, NULL},
IMemA[0], IMemL[0]};
pathname_len = strlen(PathStr[8]);
(void) strncpy(s, PathStr[8], pathname_len);
strcpy(s+pathname_len, "Frame0.pal");
l = SETCOLOR(MyScreen[1],s);
l = SETCOLOR(MyScreen[2],s);
strcpy(s+pathname_len, "Frame0.img"); // Touchbyte ...
if (!RAWLOADIMAGE(s,0,0,640,183,5,&IntroBitMap))
{
INTROEXIT(MyRastPtr); return;
}
for (i = 1; i<=8; i++)
{
BltBitMapRastPort((struct BitMap*) &IntroBitMap,0,0,&(MyScreen[3-AScr]->RastPort),640-i*5,340,i*5,90,192);
AScr = 3-AScr;
ScreenToFront(MyScreen[AScr]);
}
l = 590;
do
{
l = l-5;
BltBitMapRastPort((struct BitMap*) &IntroBitMap, 0,0,&(MyScreen[3-AScr]->RastPort),l ,340,49,90,192);
BltBitMapRastPort((struct BitMap*) &IntroBitMap,41,0,&(MyScreen[3-AScr]->RastPort),l+49,340, 5,90,192);
AScr = 3-AScr;
ScreenToFront(MyScreen[AScr]);
if (LMB_PRESSED)
{ INTROEXIT(MyRastPtr); return; }
}
while (l > 10);
ClipBlit(&(MyScreen[AScr]->RastPort),10,340,&(MyScreen[3-AScr]->RastPort),10,340,50,90,192);
for (i = 1; i<=9; i++)
{
BltBitMapRastPort((struct BitMap*) &IntroBitMap,50,0,&(MyScreen[3-AScr]->RastPort),640-i*5,340,i*5,90,192);
AScr = 3-AScr;
ScreenToFront(MyScreen[AScr]);
}
l = 595;
SetAPen(&(MyScreen[AScr]->RastPort),0);
SetAPen(&(MyScreen[3-AScr]->RastPort),0);
do
{
l = l-5;
BltBitMapRastPort((struct BitMap*) &IntroBitMap,50,0,&(MyScreen[3-AScr]->RastPort),l,340,41,90,192);
RectFill(&(MyScreen[3-AScr]->RastPort),l+41,340,l+50,430);
AScr = 3-AScr;
ScreenToFront(MyScreen[AScr]);
if (LMB_PRESSED)
{ INTROEXIT(MyRastPtr); return; }
}
while (l > 60);
ClipBlit(&(MyScreen[AScr]->RastPort),10,340,&(MyScreen[3-AScr]->RastPort),10,340,150,90,192);
delay(5);
for (i = 1; i<=2; i++)
{
BltBitMapRastPort((struct BitMap*) &IntroBitMap,0,0,&(MyScreen[3-AScr]->RastPort),10,340,616,91,192);
AScr = 3-AScr;
ScreenToFront(MyScreen[AScr]);
}
if (LMB_PRESSED)
{ INTROEXIT(MyRastPtr); return; }
delay(15);
BltBitMapRastPort((struct BitMap*) &IntroBitMap,0,90,&(MyScreen[3-AScr]->RastPort),10,337,98,91,192);
AScr = 3-AScr;
ScreenToFront(MyScreen[AScr]);
custom.dmacon = BITCLR | DMAF_AUDIO; // 0x000F
delay(15);
/* SPAddrA^ = SMemA[1]; SPAddrB^ = SMemA[1]+SMemL[1] div 2;
SPVolA^ = 0; SPVolB^ = 0;
SPFreqA^ = 856; SPFreqB^ = 856;
SPLengthA^ = SMemL[1] div 4; SPLengthB^ = SMemL[1] div 4;
SPAddrD^ = SMemA[2]; SPAddrC^ = SMemA[2]+SMemL[2] div 2;
SPVolD^ = 64; SPVolC^ = 64;
SPFreqD^ = 380; SPFreqC^ = 380;
SPLengthD^ = 1; SPLengthC^ = 1;
*/
custom.dmacon = BITSET | DMAF_AUD0 | DMAF_AUD1; // 0x8003
/* for (btx = 1; btx<=64; btx++)
{
SPVolA^ = btx;
SPVolB^ = btx;
WaitTOF();
}
*/
delay(25);
FactorSin = sin(0.04);
FactorCos = cos(0.03);
FactorMSin = sin(-0.05);
FactorMCos = cos(-0.02);
for (i = 1; i<=2; i++)
{
SetAPen(&(MyScreen[3-AScr]->RastPort),0);
RectFill(&(MyScreen[3-AScr]->RastPort),0,335,640,430);
AScr = 3-AScr;
ScreenToFront(MyScreen[AScr]);
}
MyRastPtr = AllocRaster(640,360);
if (MyRastPtr == NULL)
{
INTROEXIT(MyRastPtr); return;
}
InitTmpRas(&MyTmpRas,MyRastPtr,21000);
InitArea(&MyAI,IMemA[0],200);
MyScreen[1]->RastPort.TmpRas = &MyTmpRas;
MyScreen[2]->RastPort.TmpRas = &MyTmpRas;
MyScreen[1]->RastPort.AreaInfo = &MyAI;
MyScreen[2]->RastPort.AreaInfo = &MyAI;
/*****************************************************************************/
/* TOUCHBYTE SOFTWARE PRESENTS */
strcpy(s+pathname_len, "Frame1.pal");
SETDARKCOLOR(s, Colors);
strcpy(s+pathname_len, "Frame1.img");
if (!DISPLAYIMAGE(s,0,235,640,37,5,MyScreen[AScr],0)) { }
WRITE(320,285,31,16,MyScreen[AScr],5,"PRESENTS");
ClipBlit(&(MyScreen[AScr]->RastPort),0,235,&(MyScreen[3-AScr]->RastPort),0,235,640,75,192);
/* T */
VObj[0] = (VectorObj){0,0,ROTATE_PY+ROTATE_PX,
6,4,{38, 9, 9, 9, 9,38},{ 2, 2,10,10, 2, 2},{1,1,1,3,3,3},
{18,18,18,18, 0, 0},{11,36,36,11, 0, 0},{1,1,3,3,0,0}};
/* U */
VObj[1] = (VectorObj){0,0,ROTATE_PX+ROTATE_PZ,
6,6,{91,80,80,80,80,91},{1,1,26,26,1,1},{1,1,1,3,3,3},
{111,100,100,100,100,111},{1,1,24,24,1,1},{1,1,1,3,3,3}};
/* H */
VObj[2] = (VectorObj){0,0,ROTATE_PY+ROTATE_NZ,
6,6,{163,152,152,152,152,163},{2,2,36,36,2,2},{1,1,1,3,3,3},
{184,173,173,173,173,184},{2,2,12,12,2,2},{1,1,1,3,3,3}};
/* B */
VObj[3] = (VectorObj){0,0,ROTATE_NX+ROTATE_PZ,
6,6,{209,187,187,187,187,209},{2,2,10,10,2,2},{1,1,1,3,3,3},
{205,187,187,187,187,205},{15,15,36,36,15,15},{1,1,1,3,3,3}};
/* Y */
VObj[4] = (VectorObj){0,0,ROTATE_PZ+ROTATE_NX,
6,6,{229,217,229,229,217,229},{2,2,19,19,2,2},{1,1,1,3,3,3},
{254,242,236,236,242,254},{2,2,12,12,2,2},{1,1,1,3,3,3}};
/* T */
VObj[5] = (VectorObj){0,0,ROTATE_NX+ROTATE_NY,
6,4,{285,256,256,256,256,285},{2,2,9,9,1,1},{1,1,1,3,3,3},
{266,266,266,266,0,0},{11,36,36,11,0,0},{1,1,3,3,0,0}};
/* E */
VObj[6] = (VectorObj){0,0,ROTATE_PX+ROTATE_PY,
6,6,{318,289,289,289,289,318},{2,2,10,10,2,2},{1,1,1,3,3,3},
{315,289,289,289,289,315},{14,14,36,36,14,14},{1,1,1,3,3,3}};
/* F */
VObj[7] = (VectorObj){0,0,ROTATE_NX+ROTATE_PZ,
6,6,{440,410,410,410,410,440},{2,2,10,10,2,2},{1,1,1,3,3,3},
{437,410,410,410,410,437},{14,14,36,36,14,14},{1,1,1,3,3,3}};
/* T */
VObj[8] = (VectorObj){0,0,ROTATE_NZ+ROTATE_NY,
6,4,{472,443,443,443,443,472},{2,2,10,10,2,2},{1,1,1,3,3,3},
{452,452,452,452,0,0},{11,36,36,11,0,0},{1,1,3,3,0,0}};
/* W */
VObj[9] = (VectorObj){0,0,ROTATE_PX+ROTATE_PZ,
6,6,{486,475,486,486,475,486},{2,2,36,36,2,2},{1,1,1,3,3,3},
{506,497,492,492,497,506},{2,2,16,16,2,2},{1,1,1,3,3,3}};
/* A */
VObj[10] = (VectorObj){0,0,ROTATE_PX+ROTATE_PY,
6,0,{547,536,521,521,536,547},{2,2,36,36,2,2},{1,1,1,3,3,3},
{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0}};
/* R */
VObj[11] = (VectorObj){0,0,ROTATE_PX+ROTATE_PZ,
6,6,{589,565,565,565,565,589},{3,2,10,10,2,3},{1,1,1,3,3,3},
{576,565,565,565,565,576},{16,16,36,36,16,16},{1,1,1,3,3,3}};
/* E */
VObj[12] = (VectorObj){0,0,ROTATE_NX+ROTATE_NY,
6,6,{630,601,601,601,601,630},{2,2,10,10,2,2},{1,1,1,3,3,3},
{627,601,601,601,601,627},{14,14,36,36,14,14},{1,1,1,3,3,3}};
if (LMB_PRESSED) { INTROEXIT(MyRastPtr); return; }
GREATEFFECT(13, Colors);
if (LMB_PRESSED) { INTROEXIT(MyRastPtr); return; }
/*****************************************************************************/
/* A VIRTUAL WORLDS PRODUCTION */
strcpy(s+pathname_len, "Frame2.pal");
SETDARKCOLOR(s, Colors);
strcpy(s+pathname_len, "Frame2.img");
if (!DISPLAYIMAGE(s,0,235,640,37,5,MyScreen[AScr],0)) { }
WRITE(320,205,31,16,MyScreen[AScr],5,"A");
WRITE(320,285,31,16,MyScreen[AScr],5,"PRODUCTION");
ClipBlit(&(MyScreen[AScr]->RastPort),0,200,&(MyScreen[3-AScr]->RastPort),0,200,640,100,192);
/* V */
VObj[0] = (VectorObj) {0,0,ROTATE_PY+ROTATE_PX,
6,6,{98,86,101,101,86,98},{2,2,36,36,2,2},{1,1,1,3,3,3},
{126,114,106,106,114,126},{2,2,23,23,2,2},{1,1,1,3,3,3}};
/* I */
VObj[1] = (VectorObj) {0,0,ROTATE_PX+ROTATE_PZ,
6,0,{140,129,129,129,129,140},{2,2,36,36,2,2},{1,1,1,3,3,3},
{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0}};
/* R */
VObj[2] = (VectorObj) {0,0,ROTATE_NX+ROTATE_PZ,
6,6,{167,143,143,143,143,167},{3,2,10,10,2,3},{1,1,1,3,3,3},
{154,143,143,143,143,154},{16,16,36,36,16,16},{1,1,1,3,3,3}};
/* T */
VObj[3] = (VectorObj) {0,0,ROTATE_PY+ROTATE_NZ,
6,4,{206,177,177,177,177,206},{2,2,10,10,2,2},{1,1,1,3,3,3},
{186,186,186,186,0,0},{11,36,36,11,0,0},{1,1,3,3,0,0}};
/* U */
VObj[4] = (VectorObj) {0,0,ROTATE_NX+ROTATE_PZ,
6,6,{220,209,209,209,209,220},{2,2,27,27,2,2},{1,1,1,3,3,3},
{240,229,229,229,229,240},{2,2,25,25,2,2},{1,1,1,3,3,3}};
/* A */
VObj[5] = (VectorObj) {0,0,ROTATE_PZ+ROTATE_NX,
6,0,{266,255,240,240,255,266},{2,2,36,36,2,2},{1,1,1,3,3,3},
{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0}};
/* L */
VObj[6] = (VectorObj) {0,0,ROTATE_NX+ROTATE_NY,
6,4,{295,284,284,284,284,295},{2,2,36,36,2,2},{1,1,1,3,3,3},
{311,296,296,311,0,0},{26,26,26,26,0,0},{1,1,3,3,0,0}};
/* W */
VObj[7] = (VectorObj) {0,0,ROTATE_PX+ROTATE_PY,
6,6,{335,324,335,335,324,335},{2,2,36,36,2,2},{1,1,1,3,3,3},
{355,346,341,341,346,355},{2,2,16,16,2,2},{1,1,1,3,3,3}};
/* R */
VObj[8] = (VectorObj) {0,0,ROTATE_NX+ROTATE_PZ,
6,6,{441,417,417,417,417,441},{3,2,10,10,2,3},{1,1,1,3,3,3},
{428,417,417,417,417,428},{16,16,36,36,16,16},{1,1,1,3,3,3}};
/* L */
VObj[9] = (VectorObj) {0,0,ROTATE_NZ+ROTATE_NY,
6,4,{464,453,453,453,453,464},{2,2,36,36,2,2},{1,1,1,3,3,3},
{480,465,465,480,0,0},{26,26,26,26,0,0},{1,1,3,3,0,0}};
/* D */
VObj[10] = (VectorObj) {0,0,ROTATE_PX+ROTATE_PZ,
6,0,{505,483,483,483,483,505},{3,2,36,36,2,3},{1,1,1,3,3,3},
{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0}};
if (LMB_PRESSED) { INTROEXIT(MyRastPtr); return; }
GREATEFFECT(11, Colors);
if (LMB_PRESSED) { INTROEXIT(MyRastPtr); return; }
/*****************************************************************************/
/* IMPERIUM TERRANUM */
strcpy(s+pathname_len, "Frame3.pal");
SETDARKCOLOR(s, Colors);
strcpy(s+pathname_len, "Frame3.img");
if (!DISPLAYIMAGE(s,0,235,640,37,5,MyScreen[AScr],0)) { }
ClipBlit(&(MyScreen[AScr]->RastPort),0,235,&(MyScreen[3-AScr]->RastPort),0,235,640,37,192);
/* I */
VObj[0] = (VectorObj) {0,0,ROTATE_PY+ROTATE_PX,
6,6,{48,37,37,37,37,48},{2,2,36,36,2,2},{1,1,1,3,3,3},
{95,84,73,73,84,95},{2,2,18,18,2,2},{1,1,1,3,3,3}};
/* M */
VObj[1] = (VectorObj) {0,0,ROTATE_PX+ROTATE_PZ,
6,0,{62,51,51,51,51,62},{2,2,36,36,2,2},{1,1,1,3,3,3},
{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0}};
/* E */
VObj[2] = (VectorObj) {0,0,ROTATE_NX+ROTATE_PZ,
6,6,{161,132,132,132,132,161},{2,2,10,10,2,2},{1,1,1,3,3,3},
{158,132,132,132,132,158},{14,14,36,36,14,14},{1,1,1,3,3,3}};
/* I */
VObj[3] = (VectorObj) {0,0,ROTATE_PY+ROTATE_NZ,
6,0,{211,200,200,200,200,211},{2,2,36,36,2,2},{1,1,1,3,3,3},
{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0}};
/* U */
VObj[4] = (VectorObj) {0,0,ROTATE_NX+ROTATE_PZ,
6,6,{225,214,214,214,214,225},{2,2,27,27,2,2},{1,1,1,3,3,3},
{245,234,234,234,234,245},{2,2,25,25,2,2},{1,1,1,3,3,3}};
/* M */
VObj[5] = (VectorObj) {0,0,ROTATE_PZ+ROTATE_NX,
6,6,{259,248,248,248,248,259},{2,2,36,36,2,2},{1,1,1,3,3,3},
{292,281,270,270,281,292},{2,2,18,18,2,2},{1,1,1,3,3,3}};
/* T */
VObj[6] = (VectorObj) {0,0,ROTATE_NX+ROTATE_NY,
6,4,{338,309,309,309,309,338},{2,2,10,10,2,2},{1,1,1,3,3,3},
{318,318,318,318,0,0},{21,36,36,11,0,0},{1,1,3,3,0,0}};
/* E */
VObj[7] = (VectorObj) {0,0,ROTATE_PX+ROTATE_PY,
6,6,{370,341,341,341,341,370},{2,2,10,10,2,2},{1,1,1,3,3,3},
{367,341,341,341,341,367},{14,14,36,36,14,14},{1,1,1,3,3,3}};
/* R */
VObj[8] = (VectorObj) {0,0,ROTATE_NX+ROTATE_PZ,
6,6,{433,409,409,409,409,433},{3,2,10,10,2,3},{1,1,1,3,3,3},
{420,409,409,409,409,420},{16,16,36,36,16,16},{1,1,1,3,3,3}};
/* A */
VObj[9] = (VectorObj) {0,0,ROTATE_NZ+ROTATE_NY,
6,0,{471,460,445,445,460,471},{2,2,36,36,2,2},{1,1,1,3,3,3},
{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0}};
/* N */
VObj[10] = (VectorObj) {0,0,ROTATE_PX+ROTATE_PZ,
6,6,{500,489,489,489,489,500},{2,2,36,36,2,2},{1,1,1,3,3,3},
{521,510,510,510,510,521},{2,2,17,17,2,2},{1,1,1,3,3,3}};
/* M */
VObj[11] = (VectorObj) {0,0,ROTATE_PX+ROTATE_PZ,
6,6,{569,558,558,558,558,569},{2,2,36,36,2,2},{1,1,1,3,3,3},
{602,591,580,580,591,602},{2,2,18,18,2,2},{1,1,1,3,3,3}};
if (LMB_PRESSED) { INTROEXIT(MyRastPtr); return; }
GREATEFFECT(12, Colors);
if (LMB_PRESSED) { INTROEXIT(MyRastPtr); return; }
/*****************************************************************************/
// cleanup...
FreeRaster(MyRastPtr,640,360);
MyRastPtr = NULL;
for (i = 1; i<=2; i++)
{
if (MyScreen[i] != NULL)
{
CloseScreen(MyScreen[i]);
MyScreen[i] = NULL;
}
}
FreeMem(IMemA[0],IMemL[0]);
IMemA[0] = NULL;
for (i = 1; i<=2; i++)
{
MyScreen[i] = OPENCINEMA(7);
if (MyScreen[i] == NULL)
{
INTROEXIT(MyRastPtr); return;
}
}
/*****************************************************************************/
// prepare next effect...
IMemL[0] = 201856;
IMemL[1] = 21000;
for (i = 0; i<=1; i++)
{
IMemA[i] = AllocMem(IMemL[i],MEMF_CHIP);
if (IMemA[i] == NULL)
{
INTROEXIT(MyRastPtr); return;
}
}
/* SPAddrD^ = SMemA[2]+6500; SPAddrC^ = SMemA[2]+(SMemL[2] div 2)+6500;
SPVolD^ = 64; SPVolC^ = 64;
SPFreqD^ = 380; SPFreqC^ = 380;
SPLengthD^ = (SMemL[2]-13000) div 4; SPLengthC^ = (SMemL[2]-13000) div 4;
*/
custom.dmacon = BITSET | DMAF_AUD2 | DMAF_AUD3; // 0x800C
WaitTOF();
/* SPLengthD^ = 1; SPLengthC^ = 1;
*/
btx = 255;
do
{
SetRGB32(&(MyScreen[2]->ViewPort), 0, btx<<24, btx<<24, btx<<24);
btx = btx-5;
WaitTOF();
}
while (btx > 10);
SetRGB32(&(MyScreen[2]->ViewPort),0,0,0,0);
custom.dmacon = BITCLR | DMAF_AUD2 | DMAF_AUD3; // 0x000C
if (LMB_PRESSED)
{ INTROEXIT(MyRastPtr); return; }
strcpy(s+pathname_len, "MOD.Intro");
FHandle = OPENSMOOTH(s,MODE_OLDFILE);
if (FHandle != 0) { Close(FHandle); }
// TMPtr = LoadModule(s);
// PlayModule(TMPtr);
strcpy(s+pathname_len, "Frame4.pal");
SETDARKCOLOR(s, Colors);
strcpy(s+pathname_len, "Frame4.img"); // terrain with stars...
if (!DISPLAYIMAGE(s,0,75,640,360,7,MyScreen[2],0)) { }
ClipBlit(&(MyScreen[2]->RastPort),0,75,&(MyScreen[1]->RastPort),0,75,640,360,192);
strcpy(s+pathname_len, "Frame5.img"); // little earth-image..
FHandle = OPENSMOOTH(s,MODE_OLDFILE);
if (FHandle != 0)
{
ISize = Seek(FHandle,0,OFFSET_END);
ISize = Seek(FHandle,0,OFFSET_BEGINNING);
(void) Read(FHandle,(APTR) (IMemA[0]+IMemL[0]-ISize-250), ISize);
UNPACK(IMemA[0],IMemA[0]+IMemL[0]-ISize-250,20160,0);
Close(FHandle);
}
MyBitMap = (struct BitMap) { 20, 144, 1, 7, 0,
{(PLANEPTR) (IMemA[0]), (PLANEPTR) (IMemA[0]+2880), (PLANEPTR) (IMemA[0]+5760),
(PLANEPTR) (IMemA[0]+8640), (PLANEPTR) (IMemA[0]+11520),(PLANEPTR) (IMemA[0]+14400),
(PLANEPTR) (IMemA[0]+17280), NULL }};
// fade in....
Factor = 0;
ScreenToFront(MyScreen[AScr]);
// AScr = 3-AScr;
do
{
Factor += 0.05;
for (i = 1; i<=127; i++)
{
SetRGB32(&(MyScreen[AScr]->ViewPort), i, it_round(Colors[i].r*Factor)<<24,
it_round(Colors[i].g*Factor)<<24,
it_round(Colors[i].b*Factor)<<24);
}
}
while (Factor < 1);
for (i = 1; i<=127; i++)
{
SetRGB32(&(MyScreen[3-AScr]->ViewPort), i, Colors[i].r<<24,
Colors[i].g<<24,
Colors[i].b<<24);
SetRGB32(&(MyScreen[ AScr]->ViewPort), i, Colors[i].r<<24,
Colors[i].g<<24,
Colors[i].b<<24);
}
ScrollRaster(&(MyScreen[AScr]->RastPort),0,-4,0,75,639,434);
for (i = 1; i<=6; i++)
{
ScreenToFront(MyScreen[AScr]);
AScr = 3-AScr;
ScrollRaster(&(MyScreen[AScr]->RastPort),0,-8,0,75,639,434);
ClipBlit(&(MyScreen[AScr]->RastPort),0,270,&(MyScreen[AScr]->RastPort),0,75,640,8,192);
if (LMB_PRESSED)
{ INTROEXIT(MyRastPtr); return; }
}
for (i = 1; i<=35; i++)
{
ScreenToFront(MyScreen[AScr]);
AScr = 3-AScr;
ScrollRaster(&(MyScreen[AScr]->RastPort),0,-8,0,75,639,434);
ClipBlit(&(MyScreen[AScr]->RastPort),0,270,&(MyScreen[AScr]->RastPort),0,75,640,8,192);
BltBitMapRastPort(&MyBitMap,0,140-i*4,&(MyScreen[AScr]->RastPort),380,75,160,8,192);
if (LMB_PRESSED)
{ INTROEXIT(MyRastPtr); return; }
}
ScreenToFront(MyScreen[AScr]);
AScr = 3-AScr;
ScrollRaster(&(MyScreen[AScr]->RastPort),0,-8,0,75,639,434);
ClipBlit(&(MyScreen[AScr]->RastPort),0,270,&(MyScreen[AScr]->RastPort),0,75,640,8,192);
BltBitMapRastPort(&MyBitMap,0,0,&(MyScreen[AScr]->RastPort),380,79,160,4,192);
for (i = 1; i<=14; i++)
{
ScreenToFront(MyScreen[AScr]);
AScr = 3-AScr;
ScrollRaster(&(MyScreen[AScr]->RastPort),0,-8,0,75,639,434);
ClipBlit(&(MyScreen[AScr]->RastPort),0,270,&(MyScreen[AScr]->RastPort),0,75,640,8,192);
if (LMB_PRESSED)
{ INTROEXIT(MyRastPtr); return; }
}
delay(10);
if (LMB_PRESSED)
{ INTROEXIT(MyRastPtr); return; }
RECT(MyScreen[AScr],0,0,75,639,434);
ScreenToFront(MyScreen[AScr]);
AScr = 3-AScr;
RECT(MyScreen[AScr],0,0,75,639,434);
strcpy(s+pathname_len, "Frame6.pal");
l = SETCOLOR(MyScreen[AScr],s);
l = SETCOLOR(MyScreen[3-AScr],s);
SetRGB4(&(MyScreen[AScr]->ViewPort),127,9,9,11); SetRGB4(&(MyScreen[3-AScr]->ViewPort),127,9,9,11);
SetRGB4(&(MyScreen[AScr]->ViewPort),126,11,11,15); SetRGB4(&(MyScreen[3-AScr]->ViewPort),126,11,11,15);
SetRGB4(&(MyScreen[AScr]->ViewPort),125,15,0,15); SetRGB4(&(MyScreen[3-AScr]->ViewPort),125,15,0,15);
SetRGB4(&(MyScreen[AScr]->ViewPort),124,13,0,0); SetRGB4(&(MyScreen[3-AScr]->ViewPort),124,15,2,2);
SetRGB4(&(MyScreen[AScr]->ViewPort),123,14,14,15); SetRGB4(&(MyScreen[3-AScr]->ViewPort),123,14,14,15);
strcpy(s+pathname_len, "Frame6.img");
if (!DISPLAYIMAGE(s,0,75,640,360,7,MyScreen[AScr],0)) { }
MyBitMap = (struct BitMap) { 80, 360, 1, 7, 0,
{(PLANEPTR) (IMemA[0]), (PLANEPTR) (IMemA[0]+28800), (PLANEPTR) (IMemA[0]+57600),
(PLANEPTR) (IMemA[0]+86400), (PLANEPTR) (IMemA[0]+115200),(PLANEPTR) (IMemA[0]+144000),
(PLANEPTR) (IMemA[0]+172800)}};
BltBitMapRastPort(&MyBitMap,0,0,&(MyScreen[3-AScr]->RastPort),0,75,640,360,192);
MyRastPtr = AllocRaster(640,360);
if (MyRastPtr == NULL)
{
INTROEXIT(MyRastPtr); return;
}
InitTmpRas(&MyTmpRas,MyRastPtr,21000);
InitArea(&MyAI, IMemA[1], 200);
MyScreen[1]->RastPort.TmpRas = &MyTmpRas;
MyScreen[2]->RastPort.TmpRas = &MyTmpRas;
MyScreen[1]->RastPort.AreaInfo = &MyAI;
MyScreen[2]->RastPort.AreaInfo = &MyAI;
SArr = (StrArr16){{"",
"Software & Design", "Oxygenic",
"Art Director", "Cybertrace",
"Music by", "Ludwig v.Beethoven N.N. Ikonnikow Richard Wagner",
"Special Effects", "Oxygenic",
"Credits go to", "Adam Benjamin Rikard Cederlund",
"Jakob Gaardsted Andy Jones", "George Moore",
"Surround-Sounds created with", "WaveTracer DS®",
"Colors in Technicolor®", "Panaflex® Camera and Lenses by Panavision®"}};
FArr = (FontArr16) {{0, 4,5, 4,5, 4,5, 4,5, 4,5, 5,5, 4,5, 4,4}};
ShipX = (r_Coords) {{ 390, 264,252,186,186,192,256,290,354,360,360,294,282, 252, 256, 290,294, 282,294,294, 258,265,273,281,288, 185,185,190,190, 356,356,361,361,0,0,0,0,0,0,0,0}};
ShipY = (r_Coords) {{ 315, 174,275,250,188,225,234,234,225,188,250,275,174, 275, 243, 243,275, 174,275,275, 269,342,269,342,269, 187,172,172,187, 187,172,172,187,0,0,0,0,0,0,0,0}};
ShipZ = (r_Coords) {{-2.5, -5, -1, -5, -5, -5, -1, -1, -5, -5, -5, -1, -5, -1,-1.1,-1.1, -1, -5, -8, -1, -2, -2, -2, -2, -2, -5, -5, -5, -5, -5, -5, -5, -5,0,0,0,0,0,0,0,0}};
for (i = 1; i<=40; i++)
{
ShipX.data[i] = 273-ShipX.data[i];
ShipY.data[i] = 257-ShipY.data[i];
}
FactorSin = sin(0.45);
FactorCos = cos(0.45);
for (j = 1; j<=3; j++)
{
for (i = 1; i<=40; i++)
{
store = ShipY.data[i];
ShipY.data[i] = store*FactorCos - ShipZ.data[i]*FactorSin; /*X*/
ShipZ.data[i] = store*FactorSin + ShipZ.data[i]*FactorCos;
}
}
FactorSin = sin(-0.44);
FactorCos = cos(-0.44);
for (i = 1; i<=40; i++)
{
store = ShipX.data[i];
ShipX.data[i] = store*FactorCos - ShipZ.data[i]*FactorSin;
ShipZ.data[i] = store*FactorSin + ShipZ.data[i]*FactorCos;
}
FactorSin = sin(-0.08);
FactorCos = cos(-0.08);
for (i = 1; i<=40; i++)
{
store = ShipX.data[i];
ShipX.data[i] = store*FactorCos - ShipY.data[i]*FactorSin;
ShipY.data[i] = store*FactorSin + ShipY.data[i]*FactorCos;
}
if (LMB_PRESSED)
{ INTROEXIT(MyRastPtr); return; }
Factor = 0.0074;
SizeFactor = 0.009;
LEdge[1] = 0;
TEdge[1] = 75;
LEdge[2] = 0;
TEdge[2] = 75;
l = 1;
ISize = 0;
do
{
ScreenToFront(MyScreen[AScr]);
AScr = 3-AScr;
ShipX.data[0] = ShipX.data[0]-Factor-Factor-0.22;
ShipY.data[0] = ShipY.data[0]-Factor;
BltBitMapRastPort(&MyBitMap,LEdge[AScr],TEdge[AScr]-75,&(MyScreen[AScr]->RastPort),LEdge[AScr],TEdge[AScr],160,80,192);
BltBitMapRastPort(&MyBitMap,20,145,&(MyScreen[AScr]->RastPort),20,220,600,55,192);
LEdge[AScr] = it_round(ShipX.data[0]-90);
if (LEdge[AScr]<0) { LEdge[AScr] = 0; }
TEdge[AScr] = it_round(ShipY.data[0]-60);
if (TEdge[AScr]<75) { TEdge[AScr] = 75; }
for (i = 1; i<=40; i++)
{
if ((ShipX.data[0]-ShipX.data[i]*SizeFactor)<0)
{
FactorSin = (ShipX.data[0]+abs(ShipX.data[0]-ShipX.data[i]*SizeFactor))/ShipX.data[0];
ShipX.data[i] = ShipX.data[0]/SizeFactor;
ShipY.data[i] = ShipY.data[i]/FactorSin;
}
}
SetAPen(&(MyScreen[AScr]->RastPort),124);
/*** Antrieb ***/
AreaMove(&(MyScreen[AScr]->RastPort),it_round(ShipX.data[0]-ShipX.data[20]*SizeFactor),it_round(ShipY.data[0]-ShipY.data[20]*SizeFactor));
for (k = 21; k<=24; k++) { AreaDraw(&(MyScreen[AScr]->RastPort),it_round(ShipX.data[0]-ShipX.data[k]*SizeFactor),it_round(ShipY.data[0]-ShipY.data[k]*SizeFactor)); }
AreaEnd(&(MyScreen[AScr]->RastPort));
SetAPen(&(MyScreen[AScr]->RastPort),126);
/*** BodenPlatte hell ***/
AreaMove(&(MyScreen[AScr]->RastPort),it_round(ShipX.data[0]-ShipX.data[13]*SizeFactor),it_round(ShipY.data[0]-ShipY.data[13]*SizeFactor));
for (k = 14; k<=16; k++) { AreaDraw(&(MyScreen[AScr]->RastPort),it_round(ShipX.data[0]-ShipX.data[k]*SizeFactor),it_round(ShipY.data[0]-ShipY.data[k]*SizeFactor)); }
AreaEnd(&(MyScreen[AScr]->RastPort));
/*** Seitenwand ***/
AreaMove(&(MyScreen[AScr]->RastPort),it_round(ShipX.data[0]-ShipX.data[17]*SizeFactor),it_round(ShipY.data[0]-ShipY.data[17]*SizeFactor));
for (k = 18; k<=19; k++) { AreaDraw(&(MyScreen[AScr]->RastPort),it_round(ShipX.data[0]-ShipX.data[k]*SizeFactor),it_round(ShipY.data[0]-ShipY.data[k]*SizeFactor)); }
AreaEnd(&(MyScreen[AScr]->RastPort));
SetAPen(&(MyScreen[AScr]->RastPort),127);
/*** BodenPlatte ***/
AreaMove(&(MyScreen[AScr]->RastPort),it_round(ShipX.data[0]-ShipX.data[1]*SizeFactor),it_round(ShipY.data[0]-ShipY.data[1]*SizeFactor));
for (k = 2; k<=12; k++) { AreaDraw(&(MyScreen[AScr]->RastPort),it_round(ShipX.data[0]-ShipX.data[k]*SizeFactor),it_round(ShipY.data[0]-ShipY.data[k]*SizeFactor)); }
AreaEnd(&(MyScreen[AScr]->RastPort));
SetAPen(&(MyScreen[AScr]->RastPort),125);
/*** Waffen ***/
AreaMove(&(MyScreen[AScr]->RastPort),it_round(ShipX.data[0]-ShipX.data[25]*SizeFactor),it_round(ShipY.data[0]-ShipY.data[25]*SizeFactor));
for (k = 26; k<=28; k++) { AreaDraw(&(MyScreen[AScr]->RastPort),it_round(ShipX.data[0]-ShipX.data[k]*SizeFactor),it_round(ShipY.data[0]-ShipY.data[k]*SizeFactor)); }
AreaEnd(&(MyScreen[AScr]->RastPort));
AreaMove(&(MyScreen[AScr]->RastPort),it_round(ShipX.data[0]-ShipX.data[29]*SizeFactor),it_round(ShipY.data[0]-ShipY.data[29]*SizeFactor));
for (k = 30; k<=32; k++) { AreaDraw(&(MyScreen[AScr]->RastPort),it_round(ShipX.data[0]-ShipX.data[k]*SizeFactor),it_round(ShipY.data[0]-ShipY.data[k]*SizeFactor)); }
AreaEnd(&(MyScreen[AScr]->RastPort));
SetAPen(&(MyScreen[AScr]->RastPort),0);
RectFill(&(MyScreen[AScr]->RastPort),0,75,0,200);
if (ISize>1)
{
WRITE(320,220,123,16,MyScreen[AScr],FArr.data[l],SArr.data[l]);
WRITE(320,245,123,16,MyScreen[AScr],FArr.data[l+1],SArr.data[l+1]);
}
ISize++;
if (ISize>55)
{
l = l+2;
ISize = 0;
}
Factor = Factor*1.018;
SizeFactor = SizeFactor*1.0137;
}
while ((Factor<=3.2) && (SizeFactor<=3.2) && LMB_NOTPRESSED);
if (LMB_PRESSED)
{ INTROEXIT(MyRastPtr); return; }
if (l<16)
{
do
{
ScreenToFront(MyScreen[AScr]);
AScr = 3-AScr;
BltBitMapRastPort(&MyBitMap,0,0,&(MyScreen[AScr]->RastPort),0,75,640,360,192);
if (ISize>0)
{
WRITE(320,220,123,16,MyScreen[AScr],FArr.data[l],SArr.data[l]);
WRITE(320,245,123,16,MyScreen[AScr],FArr.data[l+1],SArr.data[l+1]);
}
ISize++;
if (ISize>20)
{
l = l+2;
ISize = 0;
}
}
while ((l<=16) && LMB_NOTPRESSED);
}
INTROEXIT(MyRastPtr);
}