home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / wbgames / targetus / targetus.c < prev    next >
C/C++ Source or Header  |  1997-03-20  |  16KB  |  557 lines

  1. /*
  2.  
  3.     $VER: Targetus.c 3.0 (20.03.1997)
  4.     Copyright 1991, 1995, 1997 by Dalibor Kezele
  5.  
  6.     e-mail: dkezele@mia.os.carnet.hr
  7.  
  8. */
  9.  
  10. #include <exec/types.h>
  11. #include <exec/memory.h>
  12. #include <graphics/gfx.h>
  13. #include <intuition/intuition.h>
  14. #include <intuition/intuitionbase.h>
  15.  
  16. void
  17.     SafeExit(int code),
  18.     DrawTarget(void),
  19.     PrintScore(char * message),
  20.     CheckShoot(void),
  21.     AskWait(char *message, char *gadgetmsg, char *condition, struct Image *image),
  22.     AskExit(void),
  23.     ChangeSpeed(unsigned char high_low),
  24.     AboutTarget(void),
  25.     HighScore(void),
  26.     _cli_parse() { };
  27.  
  28. struct GfxBase *GfxBase;
  29. struct IntuitionBase *IntuitionBase;
  30. struct Window *win1, *win2;
  31. struct Screen *WB;
  32. struct RastPort *rport1, *rport2;
  33. struct IntuiMessage *imsg1, *imsg2;
  34.  
  35. char
  36.     version[] = "$VER: Targetus 3.0 (20.03.1997) Copyright by Dalibor Kezele",
  37.     highname[10] = "(NOBODY)",
  38.     txtsht[6] = "SHOOT",
  39.     scoretext[160],
  40.     gadgtmsg[80],
  41.     gadgtext[80],
  42.     text1[48] = "Targetus version 3.0, 15.03.1997",
  43.     text2[48] = "Author's address:  Dalibor Kezele",
  44.     text3[48] = "                   Toplicka 127",
  45.     text4[48] = "                   42204 Turcin",
  46.     text5[48] = "                   CROATIA",
  47.     text6[48] = "and e-mail: dkezele@mia.os.carnet.hr",
  48.     text7[48] = "Feel the best power of BLAZEMONGER (tm).",
  49.     text8[18] = "Enter a name:",
  50.     topaz[12] = "topaz.font",
  51.     bms[16], bus[16];
  52.  
  53. struct TextAttr
  54.     T8 = { (UBYTE *) topaz, 8, 0, 0 },
  55.     T9 = { (UBYTE *) topaz, 9, 0, 0 };
  56.  
  57. short
  58.     coordin1[10] = { 611, 13, 611, 185, 7, 185, 7, 13, 611, 13 },
  59.     coordin2[10] = { 72, 0, 72, 11, 0, 11, 0, 0, 72, 0 },
  60.     coordin3[10] = { 338, 1, 338, 84, 1, 84, 1, 1, 338, 1 },
  61.     coordin4[10] = { 38, 1, 38, 26, 1, 26, 1, 1, 38, 1 },
  62.     coordin5[10] = { 0, 0, 107, 0, 107, 11, 0, 11, 0, 0 },
  63.     coordin6[10] = { 117, 0, 117, 25, 0, 25, 0, 0, 117, 0 },
  64.     coordin7[10] = { 38, 1, 38, 53, 1, 53, 1, 1, 38, 1 };
  65.  
  66. struct StringInfo
  67.     strinfo = { (UBYTE *)bms, (UBYTE *)bus, 0, 9, 0, 0, 9, 0, 0, 0, 0L, 0, 0L };
  68.  
  69. struct Border
  70.     border1 = { 0, 0, 1, 0, JAM1, 3, &coordin1[0], 0L },
  71.     border2 = { 0, 0, 2, 0, JAM1, 3, &coordin1[4], &border1 },
  72.     border3 = { 0, 0, 1, 0, JAM1, 3, &coordin2[0], 0L },
  73.     border4 = { 0, 0, 2, 0, JAM1, 3, &coordin2[4], &border3 },
  74.     border5 = { 0, 0, 2, 0, JAM1, 3, &coordin3[0], 0L },
  75.     border6 = { 0, 0, 1, 0, JAM1, 3, &coordin3[4], &border5 },
  76.     border7 = { 0, 0, 1, 0, JAM1, 3, &coordin4[0], 0L },
  77.     border8 = { 0, 0, 2, 0, JAM1, 3, &coordin4[4], &border7 },
  78.     border9 = { -3, -2, 3, 0, JAM1, 5, &coordin5[0], 0L },
  79.     border10 = { 0, 0, 2, 0, JAM1, 3, &coordin6[0], 0L },
  80.     border11 = { 0, 0, 1, 0, JAM1, 3, &coordin6[4], &border10 },
  81.     border12 = { 0, 0, 1, 0, JAM1, 3, &coordin7[0], 0L },
  82.     border13 = { 0, 0, 2, 0, JAM2, 3, &coordin7[4], &border12 };
  83.  
  84. struct IntuiText
  85.     itext0 = { 0, 1, JAM1,  4, 1, &T8, (UBYTE *) "Slower", 0L },
  86.     itext1 = { 0, 1, JAM1,  4, 1, &T8, (UBYTE *) "Faster", 0L },
  87.     itext2 = { 0, 1, JAM1,  2, 1, &T8, (UBYTE *) "------------", 0L },
  88.     itext3 = { 0, 1, JAM1,  4, 1, &T8, (UBYTE *) "Pause", 0L },
  89.     itext4 = { 0, 1, JAM1,  4, 1, &T8, (UBYTE *) "About", 0L },
  90.     itext5 = { 0, 1, JAM1,  4, 1, &T8, (UBYTE *) "Quit", 0L },
  91.     sctext = { 3, 0, JAM2,  0, 0, &T8, (UBYTE *) &scoretext, 0L },
  92.     rbtext = { 0, 1, JAM1, 20, 4, &T8, (UBYTE *) "Are you sure ?", 0L},
  93.     rptext = { 0, 1, JAM1,  6, 4, &T8, (UBYTE *) "Yes", 0L},
  94.     rntext = { 0, 1, JAM1,  7, 4, &T8, (UBYTE *) "No", 0L},
  95.     intxt0 = { 1, 0, JAM1, 5,  2, &T8, (UBYTE *) &gadgtmsg, 0L },
  96.     intxt7 = { 2, 0, JAM2, 0, 64, &T8, (UBYTE *) text7, 0L },
  97.     intxt6 = { 1, 0, JAM2, 0, 52, &T8, (UBYTE *) text6, &intxt7 },
  98.     intxt5 = { 1, 0, JAM2, 0, 42, &T8, (UBYTE *) text5, &intxt6 },
  99.     intxt4 = { 1, 0, JAM2, 0, 32, &T8, (UBYTE *) text4, &intxt5 },
  100.     intxt3 = { 1, 0, JAM2, 0, 22, &T8, (UBYTE *) text3, &intxt4 },
  101.     intxt2 = { 1, 0, JAM2, 0, 12, &T8, (UBYTE *) text2, &intxt3 },
  102.     intxt1 = { 3, 0, JAM2, 0,  0, &T9, (UBYTE *) text1, &intxt2 },
  103.     sttext = { 1, 0, JAM1, 0, -11, &T8, (UBYTE *) text8, NULL };
  104.  
  105. struct Gadget
  106.     gadget = { 0L, 90, 21, 73, 12, GADGHCOMP, GADGIMMEDIATE|RELVERIFY,
  107.         BOOLGADGET, (APTR) &border4, 0L, &intxt0, 0L, 0L, 1, 0L },
  108.     gadget2 = { 0L, 75, 28, 104, 10, GADGHCOMP, RELVERIFY|STRINGCENTER,
  109.         STRGADGET, (APTR)&border9, 0L, &sttext, 0L, (APTR)&strinfo, 1, 0L };
  110.  
  111. struct NewWindow
  112.     neww0 = {
  113.         0, 0, 620, 200, 0, 1, CLOSEWINDOW|MENUPICK|MOUSEBUTTONS|VANILLAKEY
  114.         |ACTIVEWINDOW|INACTIVEWINDOW, WINDOWCLOSE|WINDOWDRAG|
  115.         WINDOWDEPTH|ACTIVATE|NOCAREREFRESH, 0L, 0L, (UBYTE *) "Targetus", 0L, 0L,
  116.         0, 0, 0, 0, CUSTOMSCREEN },
  117.     neww1 = {
  118.         0, 0, 200, 46, 0, 1, GADGETUP|CLOSEWINDOW|VANILLAKEY,
  119.         WINDOWDRAG|WINDOWCLOSE|ACTIVATE|RMBTRAP|NOCAREREFRESH,
  120.         &gadget, 0L, (UBYTE *) gadgtext, 0L, 0L, 0, 0, 0, 0, CUSTOMSCREEN },
  121.     neww2 = {
  122.         0, 0, 404, 100, 0, 1, CLOSEWINDOW|MOUSEBUTTONS|VANILLAKEY,
  123.         WINDOWCLOSE|WINDOWDRAG|ACTIVATE|RMBTRAP|NOCAREREFRESH,
  124.         0L, 0L, (UBYTE *) "About Targetus", 0L, 0L, 0, 0, 0, 0, CUSTOMSCREEN },
  125.     neww3 = {
  126.         0, 0, 200, 46, 0, 1, GADGETUP|GADGETDOWN,
  127.         NOCAREREFRESH|WINDOWDRAG|ACTIVATE|RMBTRAP, &gadget2, 0,
  128.         (UBYTE *)"Targetus high score", 0L, 0L, 0, 0, 0, 0, CUSTOMSCREEN };
  129.  
  130. struct MenuItem
  131.     mintxt6 = {
  132.         0L, 10, 60, 92, 9, ITEMTEXT|ITEMENABLED|HIGHBOX|COMMSEQ,
  133.         0L, (APTR) &itext5, 0L, 'Q', 0L, 0 },
  134.     mintxt5 = {
  135.         &mintxt6, 10, 49, 92, 9, ITEMTEXT|ITEMENABLED|HIGHCOMP|COMMSEQ,
  136.         0L, (APTR) &itext4, 0L, 'A', 0L, 0 },
  137.     mintxt4 = {
  138.         &mintxt5, 6, 40, 92, 10, ITEMTEXT|HIGHNONE,
  139.         0L, (APTR) &itext2, 0L, 0, 0L, 0 },
  140.     mintxt3 = {
  141.         &mintxt4, 10, 30, 92, 10, ITEMTEXT|ITEMENABLED|HIGHCOMP|COMMSEQ,
  142.         0L, (APTR) &itext3, 0L, 'P', 0L, 0 },
  143.     mintxt2 = {
  144.         &mintxt3, 6, 20, 92, 10, ITEMTEXT|HIGHNONE,
  145.         0L, (APTR) &itext2, 0L, 0, 0L, 0 },
  146.     mintxt1 = {
  147.         &mintxt2, 10, 10, 92, 10, ITEMTEXT|ITEMENABLED|HIGHCOMP|COMMSEQ,
  148.         0L, (APTR) &itext1, 0L, 'F', 0L, 0 },
  149.     mintxt0 = {
  150.         &mintxt1, 10, 0, 92, 10, ITEMTEXT|ITEMENABLED|HIGHCOMP|COMMSEQ,
  151.         0L, (APTR) &itext0, 0L, 'S', 0L, 0 };
  152.  
  153. struct Menu
  154.     menu = {
  155.         0L, 0, 0, 112, 10, MENUENABLED, (BYTE *) " Preferences ", &mintxt0, 0, 0, 0, 0 };
  156.  
  157. UWORD
  158.     pointer_data[32] = {
  159.         0x0000, 0x0000, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100,
  160.         0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0280, 0x0280,
  161.         0xfefe, 0xfefe, 0x0280, 0x0280, 0x0100, 0x0100, 0x0100, 0x0100,
  162.         0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0100, 0x0000, 0x0000 },
  163.     *pointer_chip,
  164.     image_data[32] = {
  165.         0x03C0, 0x07e0, 0x0cf0, 0x7ffe, 0x1818, 0x1818, 0x1818, 0x0c30,
  166.         0x0660, 0x7c3e, 0xe007, 0xc003, 0xc003, 0xc003, 0xc003, 0xffff,
  167.         0x0000, 0x0000, 0x0300, 0x0000, 0x07e0, 0x07e0, 0x07e0, 0x03c0,
  168.         0x0180, 0x03c0, 0x1ff8, 0x3ffc, 0x3ffc, 0x3ffc, 0x3ffc, 0x0000 },
  169.     *image_chip,
  170.     caffee_data[32] = {
  171.         0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  172.         0x3ffc, 0x7ffe, 0x3ffc, 0x1ff8, 0x1ff8, 0x0ff0, 0xe007, 0x7ffe,
  173.         0x0550, 0x0aa8, 0x0550, 0x02a0, 0x0150, 0x02a0, 0x0140, 0x0280,
  174.         0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe007, 0x7ffe },
  175.     *caffee_chip,
  176.     info_data[32] = {
  177.         0x0fc0, 0x1f60, 0x1f60, 0x1f60, 0x1f60, 0x1f60, 0x1f60, 0x0fc0,
  178.         0x0000, 0x0fc0, 0x1ee0, 0x1f60, 0x1f60, 0x1f60, 0x1f60, 0x1f60,
  179.         0x1f60, 0x1f60, 0x1f60, 0x1f60, 0x1f60, 0x1f60, 0x1f60, 0x1f60,
  180.         0x1f60, 0x1f60, 0x7fbe, 0xffc3, 0xffc3, 0xffc3, 0xffc3, 0xffff },
  181.     *info_chip,
  182.     mark_data[32] = {
  183.         0x0fc0, 0x1f60, 0x1f60, 0x1f60, 0x1f60, 0x1f60, 0x1f60, 0x1f60,
  184.         0x1f60, 0x1f60, 0x0fc0, 0x0000, 0x0fc0, 0x1f60, 0x1f60, 0x0fc0,
  185.         0x0000, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
  186.         0x0080, 0x0080, 0x0000, 0x0000, 0x0000, 0x0080, 0x0080, 0x0000 },
  187.     *mark_chip;
  188.  
  189. struct Image
  190.     targetimage = { 0, 0, 16, 16, 2, 0L, 3, 0, 0L },
  191.     caffeeimage = { 0, 0, 16, 16, 2, 0L, 3, 0, 0L },
  192.     infoimage = { 0, 0, 16, 32, 1, 0L, 1, 0, 0L },
  193.     markimage = { 0, 0, 16, 16, 2, 0L, 3, 0, 0L };
  194.  
  195. int
  196.     speed = 60, real = 50, score = 0, high = 0, target = 0, toggle = 0, timer = 0;
  197.  
  198. unsigned char targetx, quit = 0;
  199. char targety, count;
  200. long xt = 100, yt = 100;
  201. unsigned mousex, mousey;
  202.  
  203. /* -------------------------------------------------------------------- */
  204.  
  205. int main(void)
  206. {
  207.  
  208. if(!(GfxBase = (struct GfxBase *) OpenLibrary("graphics.library", 0L)))
  209.     SafeExit(100);
  210.  
  211. if(!(IntuitionBase = (struct IntuitionBase *) OpenLibrary("intuition.library", 0L)))
  212.     SafeExit(200);
  213.  
  214. if(!(image_chip = (UWORD *) AllocMem ((long)(2L * sizeof(image_data)), MEMF_CHIP)))
  215.     SafeExit(300);
  216.  
  217. if(!(caffee_chip = (UWORD *) AllocMem ((long)(2L * sizeof(image_data)), MEMF_CHIP)))
  218.     SafeExit(400);
  219.  
  220. if(!(info_chip = (UWORD *) AllocMem ((long)(2L * sizeof(info_data)), MEMF_CHIP)))
  221.     SafeExit(500);
  222.  
  223. if(!(mark_chip = (UWORD *) AllocMem ((long)(2L * sizeof(mark_data)), MEMF_CHIP)))
  224.     SafeExit(600);
  225.  
  226. if(!(pointer_chip = (UWORD *) AllocMem((long)(sizeof(pointer_data)), MEMF_CHIP)))
  227.     SafeExit(700);
  228.  
  229. WB = (struct Screen *) IntuitionBase -> ActiveScreen;
  230. neww0.Screen = neww1.Screen = neww2.Screen = neww3.Screen = (struct Screen *) WB;
  231.  
  232. neww0.TopEdge = ((WB -> Height) - (neww0.Height)) / 2;
  233. neww0.LeftEdge = ((WB -> Width) - (neww0.Width)) / 2;
  234.  
  235. neww1.TopEdge = ((WB -> Height) - (neww1.Height)) / 2;
  236. neww1.LeftEdge = ((WB -> Width) - (neww1.Width)) / 2;
  237.  
  238. neww2.TopEdge = ((WB -> Height) - (neww2.Height)) / 2;
  239. neww2.LeftEdge = ((WB -> Width) - (neww2.Width)) / 2;
  240.  
  241. neww3.TopEdge = ((WB -> Height) - (neww3.Height)) / 2;
  242. neww3.LeftEdge = ((WB -> Width) - (neww3.Width)) / 2;
  243.  
  244. if(!(win1 = (struct Window *) OpenWindow(&neww0)))
  245.     SafeExit(800);
  246.  
  247. for (count = 0; count < 32; count++)
  248.  
  249. for (count = 0; count < 32; count++) {
  250.     *(image_chip + count) = image_data[count];
  251.     *(caffee_chip + count) = caffee_data[count];
  252.     *(info_chip + count) = info_data[count];
  253.     *(pointer_chip + count) = pointer_data[count];
  254.     *(mark_chip + count) = mark_data[count];
  255.     }
  256.  
  257. targetimage.ImageData = image_chip;
  258. caffeeimage.ImageData = caffee_chip;
  259. infoimage.ImageData = info_chip;
  260. markimage.ImageData = mark_chip;
  261.  
  262. rport1 = win1 -> RPort;
  263.  
  264. DrawBorder(rport1, &border2, 0, 0);
  265.  
  266. AskWait("Start Targetus", "Execute!", "START", &markimage);
  267.  
  268. SetPointer(win1, (short *) pointer_chip, 14, 16, -7, -7);
  269. SetMenuStrip(win1, &menu);
  270.  
  271. srand(rand());
  272. DrawTarget();
  273.  
  274. while (!quit) {
  275.     Delay(1L);
  276.     if(timer++ >= speed) DrawTarget();
  277.  
  278.     imsg1 = (struct IntuiMessage *) GetMsg(win1->UserPort);
  279.     if (!imsg1) continue;
  280.  
  281.     switch (imsg1 -> Class) {
  282.         case CLOSEWINDOW:
  283.             AskExit();
  284.             break;
  285.  
  286.         case INACTIVEWINDOW:
  287.             while(1) {
  288.                 Delay(5L);
  289.                 imsg1 = (struct IntuiMessage *) GetMsg(win1->UserPort);
  290.                 if(!imsg1) continue;
  291.                 if(imsg1 -> Class == ACTIVEWINDOW) break;
  292.                 ReplyMsg(imsg1);
  293.                 }
  294.             break;
  295.  
  296.         case VANILLAKEY:
  297.             if(imsg1 -> Code == 27) quit = 1;
  298.                 break;
  299.  
  300.         case MENUPICK :
  301.             if (!(MENUNUM(imsg1 -> Code)))
  302.                 switch(ITEMNUM(imsg1 -> Code)) {
  303.                     case 0: ChangeSpeed(FALSE); break;
  304.                     case 1: ChangeSpeed(TRUE); break;
  305.                     case 3: AskWait("Targetus Pause", "Continue", "PAUSE", 0L); break;
  306.                     case 5: AboutTarget(); break;
  307.                     case 6: AskExit();
  308.                 }
  309.             break;
  310.  
  311.         case MOUSEBUTTONS:
  312.             if (toggle ^= 1) CheckShoot();
  313.         }
  314.  
  315.     ReplyMsg(imsg1);
  316.     }
  317.  
  318. ClearMenuStrip(win1, &menu);
  319. ClearPointer(win1);
  320.  
  321. SafeExit(0);
  322. return 0;
  323. }
  324.  
  325. /* -------------------------------------------------------------------- */
  326.  
  327. void SafeExit(int code)
  328. {
  329.  
  330. if(code)
  331.     puts("***ERROR: Not enough memory!\n");
  332. if(pointer_chip)
  333.     FreeMem(pointer_chip, (long)(sizeof(pointer_data)));
  334. if(mark_chip)
  335.     FreeMem(mark_chip, (long)(2L * sizeof(mark_data)));
  336. if(info_chip)
  337.     FreeMem(info_chip, (long)(2L * sizeof(info_data)));
  338. if(caffee_chip)
  339.     FreeMem(caffee_chip, (long)(2L * sizeof(caffee_data)));
  340. if(image_chip)
  341.     FreeMem(image_chip, (long)(2L * sizeof(image_data)));
  342. if(win1)
  343.     CloseWindow(win1);
  344. if(IntuitionBase)
  345.     CloseLibrary(IntuitionBase);
  346. if(GfxBase)
  347.     CloseLibrary(GfxBase);
  348. if(code)
  349.     exit(code);
  350. }
  351.  
  352. /* -------------------------------------------------------------------- */
  353.  
  354. void DrawTarget(void)
  355. {
  356.  
  357. SetAPen(rport1, 0);
  358. RectFill(rport1, xt, yt, xt + 16, yt + 16);
  359.  
  360. targetx = rand();
  361. targety = rand();
  362. if (targety == -128) targety = 127;
  363. if (targety < 0) targety =- targety;
  364. xt = targetx * 2 + 45;
  365. yt = targety + 30;
  366. if (target++ == 64) {
  367.     target = 0;
  368.     if(high < score) HighScore();
  369.     AskWait("Targetus Game Over", "New Game", "START", &markimage);
  370.     score = 0;
  371.     }
  372. timer = 0;
  373.  
  374. DrawImage(rport1, &targetimage, xt, yt);
  375. PrintScore(0L);
  376.  
  377. }
  378.  
  379. /* -------------------------------------------------------------------- */
  380.  
  381. void PrintScore(char *message)
  382. {
  383.  
  384. if(!message) message = &txtsht[0];
  385.  
  386. real = 110 - speed;
  387.  
  388. sprintf(&scoretext,
  389.     "[%5s]  Score: %04d · Speed: %04d · Target: # %02d · High: %04d by %-9s",
  390.     message, score, real * 100, target, high, &highname);
  391.  
  392. PrintIText(rport1, &sctext, 12, 189);
  393.  
  394. }
  395.  
  396. /* -------------------------------------------------------------------- */
  397.  
  398. void CheckShoot(void)
  399. {
  400.  
  401. mousex = win1 -> MouseX;
  402. mousey = win1 -> MouseY;
  403.  
  404. if ((mousex >= xt) && (mousey >= yt)
  405.     && (mousex <= xt + 16) && (mousey <= yt + 16)) {
  406.         score += real;
  407.         DisplayBeep(win1 -> WScreen);
  408.         DrawTarget();
  409.         }
  410. }
  411.  
  412. /* -------------------------------------------------------------------- */
  413.  
  414. void AskExit(void)
  415. {
  416.  
  417. PrintScore("QUIT?");
  418.  
  419. quit = (unsigned char)
  420.     AutoRequest (win1, &rbtext, &rptext, &rntext, 0, 0, 170, 50);
  421.  
  422. PrintScore(0L);
  423.  
  424. }
  425.  
  426. /* -------------------------------------------------------------------- */
  427.  
  428. void AskWait(char *message, char *gadgetmsg, char *condition, struct Image *image)
  429. {
  430.  
  431. PrintScore(condition);
  432. strcpy(&gadgtext, message);
  433. strcpy(&gadgtmsg, gadgetmsg);
  434.  
  435. if(!image) image = &caffeeimage;
  436.  
  437. win2 = (struct Window *) OpenWindow(&neww1);
  438. if (win2) {
  439.  
  440.     rport2 = win2 -> RPort;
  441.     DrawImage(rport2, image, 25, 19);
  442.     DrawBorder(rport2, &border8, 13, 13);
  443.     DrawBorder(rport2, &border11, 67, 14);
  444.  
  445.     while(1) {
  446.         Delay(5L);
  447.         imsg2 = (struct IntuiMessage *) GetMsg(win2->UserPort);
  448.         if(!imsg2) continue;
  449.         if(imsg2 -> Class == GADGETUP) break;
  450.         if(imsg2 -> Class == CLOSEWINDOW) break;
  451.         if((imsg2 -> Class == VANILLAKEY) && (imsg2 -> Code == 13)) break;
  452.         }
  453.  
  454.     ReplyMsg(imsg2);
  455.     CloseWindow(win2);
  456.     }
  457. else
  458.     DisplayBeep(win1 -> WScreen);
  459.  
  460. PrintScore(0L);
  461.  
  462. }
  463.  
  464. /* -------------------------------------------------------------------- */
  465.  
  466. void ChangeSpeed(unsigned char high_low)
  467. {
  468.  
  469. if(!high_low) {
  470.     if (speed < 100) speed += 5;
  471.         }
  472. else
  473.     if (speed > 15) speed -= 5;
  474.  
  475. PrintScore(0L);
  476. }
  477.  
  478. /* -------------------------------------------------------------------- */
  479.  
  480. void AboutTarget(void)
  481. {
  482.  
  483. PrintScore("ABOUT");
  484.  
  485. if(win2 = (struct Window *) OpenWindow (&neww2)) {
  486.  
  487.     rport2 = win2 -> RPort;
  488.  
  489.     PrintIText(rport2, &intxt1, 66, 20);
  490.     DrawBorder(rport2, &border6, 56, 12);
  491.  
  492.     DrawImage(rport2, &targetimage, 21, 76);
  493.     DrawBorder(rport2, &border8, 9, 70);
  494.  
  495.     DrawImage(rport2, &infoimage, 21, 24);
  496.     DrawBorder(rport2, &border13, 9, 12);
  497.  
  498.     while (1) {
  499.         Delay(5L);
  500.         imsg2 = (struct IntuiMessage *) GetMsg(win2 -> UserPort);
  501.         if(!imsg2) continue;
  502.         if ((imsg2 -> Class == CLOSEWINDOW)
  503.             || (imsg2 -> Class == MOUSEBUTTONS))
  504.                 break;
  505.         if ((imsg2 -> Class == VANILLAKEY)
  506.             && (imsg2 -> Code == 27 || imsg2 -> Code == 13))
  507.                 break;
  508.         }
  509.     ReplyMsg(imsg2);
  510.     CloseWindow(win2);
  511.     }
  512. else
  513.     DisplayBeep(win1 -> WScreen);
  514.  
  515. PrintScore(0L);
  516. }
  517.  
  518. /* -------------------------------------------------------------------- */
  519.  
  520. void HighScore(void)
  521. {
  522.  
  523. PrintScore("SCORE");
  524.  
  525. high = score;
  526. if(win2 = (struct Window *) OpenWindow (&neww3)) {
  527.  
  528.     rport2 = win2 -> RPort;
  529.  
  530.     DrawImage(rport2, &markimage, 25, 19);
  531.     DrawBorder(rport2, &border8, 13, 13);
  532.     DrawBorder(rport2, &border11, 67, 14);
  533.  
  534.     do {
  535.         ActivateGadget(&gadget2, win2, 0L);
  536.  
  537.         while(1) {
  538.             Delay(5L);
  539.             imsg2 = (struct IntuiMessage *) GetMsg(win2->UserPort);
  540.             if(!imsg2) continue;
  541.             if(imsg2 -> Class == GADGETUP) break;
  542.             ReplyMsg(imsg2);
  543.             }
  544.         }
  545.         while(!strlen(&bms));
  546.  
  547.     strcpy(&highname, &bms);
  548.     CloseWindow(win2);
  549.     }
  550. else
  551.     DisplayBeep(win1 -> WScreen);
  552.  
  553. PrintScore(0L);
  554. }
  555.  
  556. /* -------------------------------------------------------------------- */
  557.