/* LORD OF HOSTS - display.c --- Grafikroutinen */ #include "Lord.h" extern struct RastPort *RP; extern struct ViewPort *VP; extern struct BitMap *BM,PiecesBM; /* IMAGES - erstellt mit NGI 1.3 */ UWORD RKingData[168] = { /* BitPlane 0 */ 0x7FFF,0xF000, 0x0000,0x0800, 0x01F8,0x0800, 0x03FC,0x0800, 0x03FC,0x0800, 0x03FC,0x0800, 0x03FC,0x0800, 0x03FC,0x0800, 0x01F8,0x0800, 0x00F8,0x0800, 0x0000,0x0800, 0x2040,0x4800, 0x2040,0x8800, 0x2081,0x0800, 0x2082,0x0800, 0x1104,0x0800, 0x1000,0x0800, 0x0800,0x0800, 0x0FFF,0x8800, 0x0000,0x0800, 0x0000,0x0000, /* BitPlane 1 */ 0xFFFF,0xF800, 0x7F07,0xF800, 0x7FFB,0xF800, 0x7FFD,0xF800, 0x7FFD,0xF800, 0x7FFD,0xF800, 0x7FFD,0xF800, 0x7FFD,0xF800, 0x7FFB,0xF800, 0x7FFF,0xF800, 0x7FFF,0xF800, 0x5F9F,0xB800, 0x4F9F,0x3800, 0x470E,0x3800, 0x430C,0x3800, 0x6000,0x7800, 0x6000,0x7800, 0x7000,0x7800, 0x7000,0x7800, 0x7FFF,0xF800, 0x8000,0x0800, /* BitPlane 2 */ 0x0000,0x0000, 0x80F8,0x0000, 0x80FC,0x0000, 0x81FE,0x0000, 0x81FE,0x0000, 0x81FE,0x0000, 0x81FE,0x0000, 0x81FE,0x0000, 0x80FC,0x0000, 0x8000,0x0000, 0xA000,0x2000, 0xB040,0x6000, 0xA850,0xA000, 0xA489,0x2000, 0xA28A,0x2000, 0x9104,0x4000, 0x9000,0x4000, 0x8800,0x0000, 0x8FFF,0x8000, 0x8000,0x0000, 0x7FFF,0xF000, /* BitPlane 3 */ 0x0000,0x0000, 0x0000,0x0000, 0x00F8,0x0000, 0x01FC,0x0000, 0x01FC,0x0000, 0x01FC,0x0000, 0x01FC,0x0000, 0x01FC,0x0000, 0x00F8,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0020,0x0000, 0x1020,0x4000, 0x1870,0xC000, 0x1C71,0xC000, 0x0EFB,0x8000, 0x0FFF,0x8000, 0x07FF,0x8000, 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000 }; UWORD WKingData[168] = { /* BitPlane 0 */ 0x8000,0x0800, 0xFFFF,0xF000, 0xF000,0x7000, 0xF000,0x3000, 0xF000,0x3000, 0xF000,0x3000, 0xE186,0x1000, 0xE387,0x1000, 0xE7CF,0x9000, 0xEFCF,0xD000, 0xFFFF,0xF000, 0xFFFF,0xF000, 0xFEFF,0xF000, 0xFDFF,0xF000, 0xFDFF,0xF000, 0xFDFF,0xF000, 0xFDFF,0xF000, 0xFDFF,0xF000, 0xFEFF,0xF000, 0xFF07,0xF000, 0xFFFF,0xF800, /* BitPlane 1 */ 0x7FFF,0xF000, 0x8000,0x0800, 0x8FFF,0x8800, 0x9000,0x4800, 0x9000,0x4800, 0x9104,0x4800, 0xA28A,0x2800, 0xA489,0x2800, 0xA850,0xA800, 0xB010,0x6800, 0xA000,0x2800, 0x80F8,0x0800, 0x81FC,0x0800, 0x83FE,0x0800, 0x83FE,0x0800, 0x83FE,0x0800, 0x83FE,0x0800, 0x83FE,0x0800, 0x81FC,0x0800, 0x80F8,0x0800, 0x7FFF,0xF000, /* BitPlane 2 */ 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xF000,0x7800, 0xF000,0x7800, 0xF104,0x7800, 0xE38E,0x3800, 0xE78F,0x3800, 0xEFDF,0xB800, 0xFF9F,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, /* BitPlane 3 */ 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0FFF,0x8000, 0x0FFF,0x8000, 0x0EFB,0x8000, 0x1C71,0xC000, 0x1870,0xC000, 0x1020,0x4000, 0x0020,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x00F8,0x0000, 0x01FC,0x0000, 0x01FC,0x0000, 0x01FC,0x0000, 0x01FC,0x0000, 0x01FC,0x0000, 0x00F8,0x0000, 0x0000,0x0000, 0x0000,0x0000 }; UWORD RKnightData[168] = { /* BitPlane 0 */ 0x7FFF,0xF000, 0x0000,0x0800, 0x01F8,0x0800, 0x03FC,0x0800, 0x03FC,0x0800, 0x03FC,0x0800, 0x03FC,0x0800, 0x03FC,0x0800, 0x01F8,0x0800, 0x00F8,0x0800, 0x0000,0x0800, 0x0000,0x0800, 0x0010,0x0800, 0x0008,0x0800, 0x0004,0x0800, 0x0002,0x0800, 0x0001,0x0800, 0x0000,0x8800, 0x0000,0x4800, 0x0000,0x0800, 0x0000,0x0000, /* BitPlane 1 */ 0xFFFF,0xF800, 0x7F07,0xF800, 0x7FFB,0xF800, 0x7FFD,0xF800, 0x7FFD,0xF800, 0x7FFD,0xF800, 0x7FFD,0xF800, 0x7FFD,0xF800, 0x7FFB,0xF800, 0x7FFF,0xF800, 0x7FFF,0xF800, 0x7FDF,0xF800, 0x7FBF,0xF800, 0x7F7F,0xF800, 0x7EFF,0xF800, 0x7DFF,0xF800, 0x7BFF,0xF800, 0x77FF,0xF800, 0x6000,0x7800, 0x7FFF,0xF800, 0x8000,0x0800, /* BitPlane 2 */ 0x0000,0x0000, 0x80F8,0x0000, 0x80FC,0x0000, 0x81FE,0x0000, 0x81FE,0x0000, 0x81FE,0x0000, 0x81FE,0x0000, 0x81FE,0x0000, 0x80FC,0x0000, 0x8000,0x0000, 0x8000,0x0000, 0x8020,0x0000, 0x8040,0x0000, 0x8080,0x0000, 0x8100,0x0000, 0x8200,0x0000, 0x8400,0x0000, 0x8800,0x0000, 0x9FFF,0x8000, 0x8000,0x0000, 0x7FFF,0xF000, /* BitPlane 3 */ 0x0000,0x0000, 0x0000,0x0000, 0x00F8,0x0000, 0x01FC,0x0000, 0x01FC,0x0000, 0x01FC,0x0000, 0x01FC,0x0000, 0x01FC,0x0000, 0x00F8,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000 }; UWORD WKnightData[168] = { /* BitPlane 0 */ 0x8000,0x0800, 0xFFFF,0xF000, 0xF000,0x3000, 0xFFFF,0x7000, 0xFFFE,0xF000, 0xFFFD,0xF000, 0xFFFB,0xF000, 0xFFF7,0xF000, 0xFFEF,0xF000, 0xFFDF,0xF000, 0xFFFF,0xF000, 0xFFFF,0xF000, 0xFEFF,0xF000, 0xFDFF,0xF000, 0xFDFF,0xF000, 0xFDFF,0xF000, 0xFDFF,0xF000, 0xFDFF,0xF000, 0xFEFF,0xF000, 0xFF07,0xF000, 0xFFFF,0xF800, /* BitPlane 1 */ 0x7FFF,0xF000, 0x8000,0x0800, 0x9FFF,0xC800, 0x8800,0x8800, 0x8401,0x0800, 0x8202,0x0800, 0x8104,0x0800, 0x8088,0x0800, 0x8050,0x0800, 0x8020,0x0800, 0x8000,0x0800, 0x80F8,0x0800, 0x81FC,0x0800, 0x83FE,0x0800, 0x83FE,0x0800, 0x83FE,0x0800, 0x83FE,0x0800, 0x83FE,0x0800, 0x81FC,0x0800, 0x80F8,0x0800, 0x7FFF,0xF000, /* BitPlane 2 */ 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, 0xFFFF,0xF800, /* BitPlane 3 */ 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x0000,0x0000, 0x00F8,0x0000, 0x01FC,0x0000, 0x01FC,0x0000, 0x01FC,0x0000, 0x01FC,0x0000, 0x01FC,0x0000, 0x00F8,0x0000, 0x0000,0x0000, 0x0000,0x0000 }; UWORD BlendFrageData[20] = { /* BitPlane 0 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 1 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 2 */ 0x8800, 0x6000, 0xC800, 0xF800, 0xC800, /* BitPlane 3 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800 }; UWORD Blend1Data[20] = { /* BitPlane 0 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 1 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 2 */ 0xD800, 0x9800, 0xD800, 0xD800, 0x8800, /* BitPlane 3 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800 }; UWORD Blend2Data[20] = { /* BitPlane 0 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 1 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 2 */ 0x8800, 0x6000, 0xC800, 0x9800, 0x0000, /* BitPlane 3 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800 }; UWORD Blend3Data[20] = { /* BitPlane 0 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 1 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 2 */ 0x8800, 0x6000, 0xC800, 0x6000, 0x8800, /* BitPlane 3 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800 }; UWORD Blend4Data[20] = { /* BitPlane 0 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 1 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 2 */ 0xE800, 0xC800, 0xA800, 0x0000, 0xE800, /* BitPlane 3 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800 }; UWORD SetFrageData[20] = { /* BitPlane 0 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 1 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 2 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 3 */ 0x8800, 0x6000, 0xC800, 0xF800, 0xC800 }; UWORD Set1Data[20] = { /* BitPlane 0 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 1 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 2 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 3 */ 0xD800, 0x9800, 0xD800, 0xD800, 0x8800 }; UWORD Set2Data[20] = { /* BitPlane 0 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 1 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 2 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 3 */ 0x8800, 0x6000, 0xC800, 0x9800, 0x0000 }; UWORD Set3Data[20] = { /* BitPlane 0 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 1 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 2 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 3 */ 0x8800, 0x6000, 0xC800, 0x6000, 0x8800 }; UWORD Set4Data[20] = { /* BitPlane 0 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 1 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 2 */ 0xF800, 0xF800, 0xF800, 0xF800, 0xF800, /* BitPlane 3 */ 0xE800, 0xC800, 0xA800, 0x0000, 0xE800 }; struct Image Blend[5] = { { 0, 0, 5, 5, 4, &BlendFrageData[0], 0x0F, 0x00, NULL }, { 0, 0, 5, 5, 4, &Blend1Data[0], 0x0F, 0x00, NULL }, { 0, 0, 5, 5, 4, &Blend2Data[0], 0x0F, 0x00, NULL }, { 0, 0, 5, 5, 4, &Blend3Data[0], 0x0F, 0x00, NULL }, { 0, 0, 5, 5, 4, &Blend4Data[0], 0x0F, 0x00, NULL } }; struct Image Set[5] = { { 0, 0, 5, 5, 4, &SetFrageData[0], 0x0F, 0x00, NULL }, { 0, 0, 5, 5, 4, &Set1Data[0], 0x0F, 0x00, NULL }, { 0, 0, 5, 5, 4, &Set2Data[0], 0x0F, 0x00, NULL }, { 0, 0, 5, 5, 4, &Set3Data[0], 0x0F, 0x00, NULL }, { 0, 0, 5, 5, 4, &Set4Data[0], 0x0F, 0x00, NULL } }; struct Image Pieces[4] = { { 0, 0, 21, 21, 4, &RKingData[0], 0x0F, 0x00, NULL }, { 0, 0, 21, 21, 4, &WKingData[0], 0x0F, 0x00, NULL }, { 0, 0, 21, 21, 4, &RKnightData[0], 0x0F, 0x00, NULL }, { 0, 0, 21, 21, 4, &WKnightData[0], 0x0F, 0x00, NULL } }; /* Ende der Images-Definitionen */ void DrawRect(ULONG Color, ULONG DrMd, ULONG fromx, ULONG fromy, ULONG tox, ULONG toy) { SetAPen(RP,Color); SetDrMd(RP,DrMd); Move(RP,fromx,fromy); Draw(RP,tox,fromy); Draw(RP,tox,toy); Draw(RP,fromx,toy); Draw(RP,fromx,fromy); } void DrawLine(ULONG Color, ULONG DrMd, ULONG fromx, ULONG fromy, ULONG tox, ULONG toy) { SetAPen(RP,Color); SetDrMd(RP,DrMd); Move(RP,fromx,fromy); Draw(RP,tox,toy); } void FillRect(ULONG Color, ULONG fromx, ULONG fromy, ULONG tox, ULONG toy) { SetAPen(RP,Color); SetDrMd(RP,JAM1); RectFill(RP,fromx,fromy,tox,toy); } void DrawText(ULONG Color, ULONG DrMd, ULONG x, ULONG y, char *string) { int len; SetAPen(RP,Color); SetDrMd(RP,DrMd); len = strlen(string); Move(RP, x, y+7); Text(RP, string, len); } void drawboard(void) { int i,j,col=0; DrawRect(6, JAM1, 0, 11, 187, 198); DrawRect(5, JAM1, 1, 12, 186, 197); for (i=2;i<=164;i+=23) { DrawLine(14,JAM1,i,13,i,196); DrawLine(12,JAM1,i+22,13,i+22,196); } for (i=13;i<=174;i+=23) { DrawLine(14,JAM1,2,i,185,i); DrawLine(12,JAM1,2,i+22,185,i+22); } for (i=3;i<=164;i+=23) { col=2-col; /* Umschalten zwischen den Schachbrettfarben */ for (j=14;j<=175;j+=23) { col=2-col; FillRect(13+col,i,j,i+20,j+20); } } } void drawplayers(char *Name1, char *Name2) { int i,rng[5]={1,0,2,0,1},len; for (i=0;i<=4;++i) { DrawRect(2+rng[i],JAM1,190+i,11+i,319-i,40-i); DrawRect(5+rng[i],JAM1,190+i,44+i,319-i,72-i); } FillRect(13,195,16,314,35); FillRect(13,195,49,314,67); DrawText(1,JAM1,219,16,"Spieler 1"); DrawText(1,JAM1,219,49,"Spieler 2"); len = strlen(Name1) * 8; /* Pixelbreite von Name1 */ len /= 2; DrawText(2,JAM1,255-len,25,Name1); len = strlen(Name2) * 8; /* Pixelbreite von Name2 */ len /= 2; DrawText(5,JAM1,255-len,58,Name2); } void SetPiece(struct Piece Which, BOOL FadeIn, BOOL StayBlend) { /* die beiden BOOLs: Farben hochfahren, Am Ende Farbe 1 setzen ? */ int xpos,ypos,i; BOOL white=FALSE; xpos = 3 + 23*Which.x; ypos = 14+ 23*Which.y; DrawImage(RP,&Pieces[Which.ID],xpos,ypos); if (Which.ID % 2) white = TRUE; SetRGB4(VP,11,0,0,0); DrawImage(RP,&Blend[Which.Value],xpos+8,ypos+(white ? 13 : 3)); if (FadeIn) { for (i=1;i<=15;++i) { SetRGB4(VP,11,i,i,i); WaitTOF(); } } SetRGB4(VP,11,15,15,15); if (!StayBlend) DrawImage(RP,&Set[Which.Value],xpos+8,ypos+(white ? 13 : 3)); } /* vor MovePiece muß SetPiece mit StayBlend == TRUE gesetzt werden, sonst wird der Zahlenwert des Steins nicht ausgeblendet. Außerdem darf nur entweder xdist ODER ydist != 0 sein !!! (Sonst wird nur xdist beachtet) Nach MovePiece muß SetPiece mit StayBlend == FALSE und FadeIn == TRUE aufgerufen werden */ void MovePiece(UBYTE x, UBYTE y, int xdist, int ydist, BOOL FadeOut) { int xpos,ypos,i,j,fieldcol,sign,brightness=15; xpos = 3 + 23*x; ypos = 14+ 23*y; BltBitMap(BM,xpos,ypos,&PiecesBM,0,0,21,21,0x00c0,0x00ff,NULL); if (xdist) { sign = (xdist>0) ? 1 : -1; for (i=0; (xdist>0)? ixdist; (xdist>0)? ++i: --i) { if ((x + y) % 2) fieldcol = 15; else fieldcol = 13; for (j=0; j!=21*sign; j+=sign) { xpos+=sign; BltBitMap(&PiecesBM,0,0,BM,xpos,ypos,21,21,0x00c0,0x00ff,NULL); if (sign>0) DrawLine(fieldcol,JAM1,xpos-1,ypos,xpos-1,ypos+20); else DrawLine(fieldcol,JAM1,xpos+21,ypos,xpos+21,ypos+20); if (brightness > 0 && FadeOut == TRUE) { SetRGB4(VP,11,brightness,brightness,brightness); --brightness; } WaitTOF(); } xpos+=sign; BltBitMap(&PiecesBM,0,0,BM,xpos,ypos,21,21,0x00c0,0x00ff,NULL); if (sign>0) DrawLine(12,JAM1,xpos-1,ypos,xpos-1,ypos+20); else DrawLine(14,JAM1,xpos+21,ypos,xpos+21,ypos+20); WaitTOF(); xpos+=sign; BltBitMap(&PiecesBM,0,0,BM,xpos,ypos,21,21,0x00c0,0x00ff,NULL); if (sign>0) DrawLine(14,JAM1,xpos-1,ypos,xpos-1,ypos+20); else DrawLine(12,JAM1,xpos+21,ypos,xpos+21,ypos+20); WaitTOF(); x += sign; } } else /* ydist != 0 */ { sign = (ydist>0) ? 1 : -1; for (i=0; (ydist>0)? iydist; (ydist>0)? ++i: --i) { if ((x + y) % 2) fieldcol = 15; else fieldcol = 13; for (j=0; j!=21*sign; j+=sign) { ypos+=sign; BltBitMap(&PiecesBM,0,0,BM,xpos,ypos,21,21,0x00c0,0x00ff,NULL); if (sign>0) DrawLine(fieldcol,JAM1,xpos,ypos-1,xpos+20,ypos-1); else DrawLine(fieldcol,JAM1,xpos,ypos+21,xpos+20,ypos+21); if (brightness > 0 && FadeOut == TRUE) { SetRGB4(VP,11,brightness,brightness,brightness); --brightness; } WaitTOF(); } ypos+=sign; BltBitMap(&PiecesBM,0,0,BM,xpos,ypos,21,21,0x00c0,0x00ff,NULL); if (sign>0) DrawLine(12,JAM1,xpos,ypos-1,xpos+20,ypos-1); else DrawLine(14,JAM1,xpos,ypos+21,xpos+20,ypos+21); WaitTOF(); ypos+=sign; BltBitMap(&PiecesBM,0,0,BM,xpos,ypos,21,21,0x00c0,0x00ff,NULL); if (sign>0) DrawLine(14,JAM1,xpos,ypos-1,xpos+20,ypos-1); else DrawLine(12,JAM1,xpos,ypos+21,xpos+20,ypos+21); WaitTOF(); y += sign; } } } void Highlight(UBYTE x, UBYTE y) { int xpos,ypos; xpos = 1 + 23*x; ypos = 12+ 23*y; DrawRect(1,COMPLEMENT,xpos,ypos,xpos+24,ypos+24); DrawRect(1,COMPLEMENT,xpos+1,ypos+1,xpos+23,ypos+23); }