home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d1xx / d115 / marketroid.lha / Marketroid / src / misc.c < prev    next >
C/C++ Source or Header  |  1987-11-22  |  9KB  |  390 lines

  1. /*  :ts=8 bk=0
  2.  *
  3.  * misc.c:    Adjuncts to the Marketroid demo.  This is the most vile
  4.  *        and disgusting thing I've ever written....
  5.  *
  6.  * Leo L. Schwab            8710.9        (415) 456-3960
  7.  */
  8. #include <exec/types.h>
  9. #include <graphics/rastport.h>
  10. #include <graphics/gfxmacros.h>
  11. #include "marketroid.h"
  12.  
  13. extern struct obcontrol    *addobject();
  14. extern struct object    ob_RJ, ob_dale, ob_jay, ob_hero, ob_bike;
  15.             ob_1K, ob_2K, ob_3K, ob_4K, ob_5K;
  16. extern struct object    ob_M, ob_A, ob_R, ob_K, ob_E, ob_T, ob_O, ob_I, ob_D,
  17.             ob_colon;
  18. extern struct object    ob_boing, ob_1987;
  19. extern struct object    ob_amiga;
  20.  
  21. extern struct BitMap    *sbm;
  22. extern UWORD        colormap[];
  23. extern int        keyx;
  24. extern char        marketroid1987[], *keytext;
  25. extern void        *vp, *smallrobo, *bigrobo;
  26.  
  27. char realstory [] = "\015 THE \017REAL\015 STORY\033\
  28. BEHIND THE AMIGA";
  29.  
  30. char save[] = "SAVE THE LAST REAL HACKERS";
  31.  
  32. char *strings[] = {
  33.     "A PARODY OF THE ROLLING DEMO OF THE WILLIAMS GAME",
  34.     "\"ROBOTRON: 2084\".",
  35.     NULL,
  36.     "SPECIAL THANKS TO JAMES GRAHAM FOR HIS EXPERT ROBOTRON",
  37.     "KNOWLEDGE, AND TO -=RJ MICAL=- FOR USEFUL INFORMATION.",
  38.     NULL,
  39.     "PERPETRATED BY LEO L. SCHWAB",
  40.     NULL,
  41.     "CLICK LEFT MOUSE BUTTON TO EXIT"
  42. };
  43.  
  44. struct object *letters[] = {
  45.     &ob_M, &ob_A, &ob_R, &ob_K, &ob_E, &ob_T, &ob_R, &ob_O, &ob_I, &ob_D,
  46.     &ob_colon
  47. };
  48.  
  49. /*  "Save the last real hackers."  */
  50. save_em (rp)
  51. register struct RastPort *rp;
  52. {
  53.     register struct obcontrol    *hero;
  54.     register int            i;
  55.     struct obcontrol        *a, *b, *c, *d, *e;
  56.  
  57.     openanim ();
  58.     opencycle (vp, colormap, 16);
  59.     standardcycle ();
  60.  
  61.     SetRast (rp, 0L);
  62.     SetFont (rp, bigrobo);
  63.     standardscreen (rp);
  64.     SetAPen (rp, 1L);
  65.     Move (rp,
  66.           160 - TextLength (rp,
  67.                 marketroid1987,
  68.                 (long) strlen (marketroid1987)) / 2,
  69.           30L);
  70.     Text (rp, marketroid1987, (long) strlen (marketroid1987));
  71.  
  72.     Move (rp,
  73.           160 - TextLength (rp, save, (long) strlen (save)) / 2, 110L);
  74.     Text (rp, save, (long) strlen (save));
  75.  
  76.     hero = addobject (&ob_hero, 0, LEFT, 250, 60);
  77.     a = addobject (&ob_RJ, 1, RIGHT, 190, 58);
  78.     b = addobject (&ob_dale, 1, RIGHT, 160, 59);
  79.     c = addobject (&ob_jay, 1, RIGHT, 130, 59);
  80.     d = addobject (&ob_dale, 1, RIGHT, 100, 59);
  81.     e = addobject (&ob_jay, 1, RIGHT, 70, 59);
  82.     while (hero->x > a->x) {
  83.         animate ();  WaitTOF ();
  84.     }
  85.     removeobject (a);
  86.     a = addobject (&ob_1K, 1, UP, hero->x, hero->y + 4);
  87.     while (hero->x > b->x) {
  88.         animate ();  WaitTOF ();
  89.     }
  90.     removeobject (b);
  91.     b = addobject (&ob_2K, 1, UP, hero->x, hero->y + 4);
  92.     while (hero->x > c->x) {
  93.         animate ();  WaitTOF ();
  94.     }
  95.     removeobject (c);
  96.     c = addobject (&ob_3K, 1, UP, hero->x, hero->y + 4);
  97.     removeobject (a);
  98.     while (hero->x > d->x) {
  99.         animate ();  WaitTOF ();
  100.     }
  101.     removeobject (d);
  102.     d = addobject (&ob_4K, 1, UP, hero->x, hero->y + 4);
  103.     removeobject (b);
  104.     while (hero->x > e->x) {
  105.         animate ();  WaitTOF ();
  106.     }
  107.     removeobject (e);
  108.     e = addobject (&ob_5K, 1, UP, hero->x, hero->y + 4);
  109.     removeobject (c);
  110.  
  111.     for (i=0; i<30; i++) {
  112.         animate ();  WaitTOF ();
  113.     }
  114.     removeobject (d);
  115.     for (i=0; i<30; i++) {
  116.         animate ();  WaitTOF ();
  117.     }
  118.  
  119.     closeanim ();
  120.     closecycle ();
  121. }
  122.  
  123. /*  The main Marketroid credits screen  */
  124. market (rp)
  125. register struct RastPort *rp;
  126. {
  127.     register struct obcontrol    *oc;
  128.     register int            i, n, k;
  129.     UWORD                specialmap[16];
  130.  
  131.     CopyMem (colormap, specialmap, (long) sizeof (specialmap));
  132.     specialmap[15] = 0xf00;
  133.     specialmap[10] = 0xff0;
  134.     LoadRGB4 (vp, specialmap, 16L);
  135.  
  136.     openanim ();
  137.     SetRast (rp, 0L);
  138.  
  139.     for (i=0, n=0; i<11; i++) {
  140.         n += letters[i] -> width;
  141.         if (i != 10)
  142.             n += 3;
  143.     }
  144.     n = 160 - n/2;
  145.     for (i=0; i<11; i++) {
  146.         oc = addobject (letters[i], 1, UP, n, 40);
  147.         oc -> flags |= EXPLODING;
  148.         oc -> frame = 11;
  149.         oc -> dir = -1;
  150.         oc -> delay = 1;
  151.         n += letters[i] -> width + 3;
  152.         for (k=0; k<8; k++) {
  153.             animate ();  WaitTOF ();
  154.             fixexplode ();
  155.         }
  156.     }
  157.     while (oc -> frame > 1) {
  158.         animate ();  WaitTOF ();
  159.         fixexplode ();
  160.     }
  161.  
  162.     opencycle (vp, specialmap, 16);
  163.     standardcycle ();
  164.     BltBitMap (ob_1987.bitmap, 0L, 0L,
  165.            sbm, 160L - ob_1987.width/2, 65L,
  166.            (long) ob_1987.width, (long) ob_1987.height,
  167.            0xc0L, 0xffL, NULL);
  168.     dotext (realstory, 96, 105);
  169.     for (i=0; i<7; i++) {
  170.         BltBitMap (ob_boing.bitmap, 0L, 0L,
  171.                sbm, i * 42L, 0L,
  172.                (long) ob_boing.width, (long) ob_boing.height,
  173.                0xc0L, i + 1L, NULL);
  174.         Delay (5L);
  175.     }
  176.     for (i=0; i<7; i++) {
  177.         BltBitMap (ob_boing.bitmap, 0L, 0L,
  178.                sbm, 294L, i * 25L,
  179.                (long) ob_boing.width, (long) ob_boing.height,
  180.                0xc0L, i + 1L, NULL);
  181.         Delay (5L);
  182.     }
  183.     for (i=7; i>0; i--) {
  184.         BltBitMap (ob_boing.bitmap, 0L, 0L,
  185.                sbm, i * 42L, 175L,
  186.                (long) ob_boing.width, (long) ob_boing.height,
  187.                0xc0L, 8L - i, NULL);
  188.         Delay (5L);
  189.     }
  190.     for (i=7; i>0; i--) {
  191.         BltBitMap (ob_boing.bitmap, 0L, 0L,
  192.                sbm, 0L, i * 25L,
  193.                (long) ob_boing.width, (long) ob_boing.height,
  194.                0xc0L, 8L - i, NULL);
  195.         Delay (5L);
  196.     }
  197.  
  198.     waittext ();
  199.     addcycle (CYCLE_SIMPLE, NULL, 0, 1, 7, 4);
  200.     SetAPen (rp, 12L);
  201.     SetFont (rp, smallrobo);
  202.     for (i=0, n=125; i<10; i++, n += 7) {
  203.         if (!strings[i])
  204.             n -= 3;
  205.         else {
  206. /*- - - - - - - - - - -*/
  207. Move (rp,
  208.       160 - TextLength (rp, strings[i], (long) strlen (strings[i])) / 2,
  209.       (long) n);
  210. Text (rp, strings[i], (long) strlen (strings[i]));
  211. /*- - - - - - - - - - -*/
  212.         }
  213.     }
  214.     Delay (500L);
  215.  
  216.     closeanim ();
  217.     closecycle ();
  218. }
  219.  
  220. fixexplode ()
  221. {
  222.     extern struct List        guys;
  223.     register struct obcontrol    *oc;
  224.  
  225.     for (oc = (struct obcontrol *) guys.lh_Head;
  226.          oc -> node.ln_Succ;
  227.          oc = (struct obcontrol *) oc -> node.ln_Succ)
  228.         if (oc -> flags & EXPLODING && oc->frame == 1) {
  229.             oc -> flags &= ~EXPLODING;
  230.             oc -> flags |= FREEZE;
  231.         }
  232. }
  233.  
  234. static UWORD amymap[] = {
  235.     0x000, 0xfff, 0xff0, 0xf80, 0xf00, 0xf0f, 0x0f0, 0x00f,
  236.     0xf00, 0xfb0, 0x7f0, 0x0f5, 0x0df, 0x01f, 0xb0f, 0xf08,
  237. };
  238.  
  239. /*  Amiga.  No bullshit, just excellence.  */
  240. amy (rp)
  241. register struct RastPort *rp;
  242. {
  243.     register int    x, ax, i;
  244.     long        bbx, bsx, bwide;
  245.     long        abx, asx, awide;
  246.  
  247.     LoadRGB4 (vp, amymap, 16L);
  248.     SetRast (rp, 0L);
  249.     SetDrPt (rp, 0xaaaaL);
  250.     for (i=98; i>=0; i--) {
  251.         SetAPen (rp, 7L - (i & 7) + 8);
  252.         rp -> Flags |= FRST_DOT;
  253.         Move (rp, (long) i, (long) i);
  254.         Draw (rp, 318L - i, (long) i);
  255.         Draw (rp, 318L - i, 198L - i);
  256.         Draw (rp, (long) i, 198L - i);
  257.         Draw (rp, (long) i, (long) i);
  258.     }
  259.     SetDrPt (rp, -1L);
  260.     SetAPen (rp, 0L);
  261.     for (i=98; i>=20; i--) {
  262.         Move (rp, (long) i, (long) i);
  263.         Draw (rp, 318L - i, (long) i);
  264.         Draw (rp, 318L - i, 198L - i);
  265.         Draw (rp, (long) i, 198L - i);
  266.         Draw (rp, (long) i, (long) i);
  267.     }
  268.  
  269.     i = 0;
  270.     for (x=-ob_bike.width+20, ax=x-190; x<300; x++) {
  271.         if (x<20) {
  272.             bbx = 20 - x;
  273.             bwide = ob_bike.width - bbx;
  274.             bsx = 20;
  275.         } else if (x + ob_bike.width > 299) {
  276.             bbx = 0;
  277.             bwide = 299 - x;
  278.             bsx = x;
  279.         } else {
  280.             bbx = 0;
  281.             bwide = ob_bike.width;
  282.             bsx = x;
  283.         }
  284.         if (ax<20) {
  285.             abx = 20 - ax;
  286.             awide = ob_amiga.width - abx;
  287.             asx = 20;
  288.         } else {
  289.             abx = 0;
  290.             awide = ob_amiga.width;
  291.             asx = ax;
  292.         }
  293.         i = ob_bike.animseq[x / 4 % ob_bike.nframes];
  294.         if (bwide > 0)
  295.             BltBitMap (ob_bike.bitmap, bbx, (long) i,
  296.                    sbm, bsx, 90L,
  297.                    bwide, (long) ob_bike.height,
  298.                    0xc0L, 0xffL, NULL);
  299.         if (awide > 0 && ax < 90)
  300.             BltBitMap (ob_amiga.bitmap, abx, 0L,
  301.                    sbm, asx, 84L,
  302.                    awide, (long) ob_amiga.height,
  303.                    0xc0L, 1L, NULL);
  304.         WaitBOVP (vp);
  305.         if (bwide > 0)
  306.             BltBitMap (ob_bike.bitmap, 0L, 0L,
  307.                    sbm, bsx, 90L,
  308.                    bwide, (long) ob_bike.height,
  309.                    0L, 0xffL, NULL);
  310.         if (awide > 0 && ax < 89)
  311.             BltBitMap (ob_amiga.bitmap, 0L, 0L,
  312.                    sbm, asx, 84L,
  313.                    awide, (long) ob_amiga.height,
  314.                    0L, 1L, NULL);
  315.         if (ax < 100)
  316.             ax++;
  317.     }
  318.  
  319.     opencycle (vp, amymap, 16);
  320.     addcycle (CYCLE_SIMPLE, NULL, 0, 8, 15, 6);
  321.     dotext (keytext, keyx, 140);
  322.     for (i=0; i<20; i++) {
  323.         SetAPen (rp, (i & 7) + 8L);
  324.         x = 95 + i;
  325.         Move (rp, 35L + i, (long) x);
  326.         Draw (rp, 42L + i, (long) x);
  327.         Move (rp, 45L + i, (long) x);
  328.         Draw (rp, 52L + i, (long) x);
  329.         Delay (1L);
  330.     }
  331.     for (i=0; i<60; i++) {
  332.         SetAPen (rp, (i & 7) + 8L);
  333.         x = 115 - i;
  334.         Move (rp, 55L + i, (long) x);
  335.         Draw (rp, 62L + i, (long) x);
  336.         Move (rp, 65L + i, (long) x);
  337.         Draw (rp, 72L + i, (long) x);
  338.         Delay (1L);
  339.     }
  340.     waittext ();
  341.     Delay (400L);
  342.  
  343.     closecycle ();
  344. }
  345.  
  346.  
  347. /*  Dedication, followed by "powerup"  */
  348. char *dedication[] = {
  349.     "Dedicated to the wonderful people",
  350.     "from Amiga Los Gatos."
  351. };
  352.  
  353. coverpage (rp)
  354. register struct RastPort *rp;
  355. {
  356.     register int    i, n, k;
  357.  
  358.     SetAPen (rp, 1L);
  359.     for (i=0; i<2; i++) {
  360.         Move (rp,
  361.               160 - TextLength (rp,
  362.                     dedication[i],
  363.                     (long) strlen (dedication[i])) / 2,
  364.               80L + i*10);
  365.         Text (rp, dedication[i], (long) strlen (dedication[i]));
  366.     }
  367.     Delay (400L);
  368.  
  369.     SetAPen (rp, 15L);
  370.     for (i=0; i<2; i++) {
  371.         for (n=0; n<320; n++)
  372.             for (rp->Mask = 1; rp->Mask < 16; rp->Mask <<= 1) {
  373.                 SetDrPt (rp, rnd (0x7ffe) + (rnd (2) << 15));
  374.                 Move (rp, (long) n, 0L);
  375.                 Draw (rp, (long) n, 199L);
  376.             }
  377.         Delay (100L);
  378.     }
  379.     rp -> Mask = 0xff;
  380.     SetRast (rp, 0L);
  381.     SetAPen (rp, 1L);
  382.     SetDrPt (rp, -1L);
  383.     SetFont (rp, bigrobo);
  384.     Move (rp, 68L, 60L);
  385.     Text (rp, "INITIAL TESTS INDICATE:", 23L);
  386.     Move (rp, 116L, 90L);
  387.     Text (rp, "OPERATIONAL", 11L);
  388.     Delay (200L);
  389. }
  390.