(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP")
(FILECREATED " 1-May-87 17:22:51" {ERIS}<SHIH>F>CODE>MISSILE.;2 34474  

      changes to%:  (FNS COIN-FLIP)

      previous date%: "20-May-86 20:49:29" {ERIS}<SHIH>F>CODE>MISSILE.;1)


(* "
Copyright (c) 1987 by Xerox Corporation.  All rights reserved.
")

(PRETTYCOMPRINT MISSILECOMS)

(RPAQQ MISSILECOMS 
       ((VARS *BLASTED-SKYLINE* *MISSILE-COMMAND-ICON* *MISSILE-COMMAND-MASK* *MISSLE-COMMAND-ICON* 
              *SCORE* *SKYLINE*)
        (RECORDS CITY SHOCK TRACE)
        (FNS BARGRAPH-ERASE BLAST-CITY BONUS-DISPLAY BUMP-TRACE COIN-FLIP COLLIDE-TRACE 
             DISPLAY-MISSILES GEN-MIRV GEN-SHOCK GEN-TARGETS GEN-TRACES GROW-SHOCK INIT-MISSILE 
             INIT-TRACE INTERCEPTED MAIN-LOOP MAIN-LOOP-AUX MISSILE-COMMAND MOVE-TRACE MYINSIDE 
             NEXT-PHASE PICK-TARGETS SCORE-ADD SHOCK-COLLISION STROBE-CITIES UPDATE-BARGRAPH 
             UPDATE-SCORE)))

(RPAQQ *BLASTED-SKYLINE* #*(180 50)@@D@@@@@L@@@@@@@@@@@@@@@@@@CL@@@@@@@@@H@@@@AH@@@@@F@@@@@N@@@@@@@@@@@@@@@@@@GN@@@@@@@@AH@@@@CH@@@@@N@@@@AO@@@@@@@@@@@@@@@@@@OO@@@@@@@@AL@@@@CH@@@@@O@@@@AO@@@@@@@@@@@@@@@@@AOO@@@@@@@@CL@@@@GH@@@@@OH@@@AOH@@@@@@@@@@@@@@@@COOH@@@@@@@CL@@@@OL@@@@@OH@@@COL@@@@@@@@@@@@@@@@GOOL@@@@@@@GN@@@@OL@@@@@OL@@@CON@@@@@@@@@@@@@@@@OOON@@@@@@@GN@@@AOL@@@@@ON@@@CON@@@@@@@@@@@@@@@AOOON@@@@@@@ON@@@COL@@@@@ON@@@GOO@@@@@@@@@@@@@@@COOOO@@@@@@@OO@@@CON@@@@@OO@@@GOOH@@@@@@@@@@@@@@GOOOOH@@@@@AOO@@@GON@@@@@OOH@@GOOL@@@@@@@@@@@@@@OOOOOL@@@@@AOO@@@OON@@@@AOOH@@OOOL@@@@@@@@@@@@@AOOOOOL@@@@@COOH@@OON@@@@AOOL@@OOON@@@@@@@@@@@@@COOOOON@@@@@COOH@AOOO@@@@AOON@@OOOO@@@@@@@@@@@@@GOOOOOO@@@@@GOOH@COOO@@@@AOON@AOOOOH@@@@@@H@@@@@OOOOOOOH@@@@GOOL@COOO@@@@AOOO@AOOOOH@@@@@AN@@@@AOOOOOOOH@@@@OOOL@GOOO@@@@AOOOHAOOOOL@@@@@COH@@@COOOOOOOL@@@@OOOL@OOOO@@@@AOOOHCOOOON@@@@@GON@@@GOOOOOOON@@@AOOON@OOOO@@@@AOOOLCOOOOO@@@@@OOOH@@OOOOOOOOO@@@AOOONAOOOO@@@@AOOONCOOOOO@@@@AOOON@AOOOOOOOOO@@@COOONCOOOO@@@@COOONGOOOOOH@@@COOOOHCOOOOOOOOOH@@COOOOCOOOO@@@@COOOOGOOOOOL@@@GOOOONGOOOOOOOOOL@@GOOOOGOOOO@@@@COOOOOOOOOON@@@OOOOOOOOOOOOOOOON@@GOOOOOOOOO@@@@COOOOOOOOOON@@AOOOOOOOOOOOOOOOON@@OOOOOOOOOO@@@@COOOOOOOOOOO@@COOOOOOOOOOOOOOOOO@@OOOOOOOOOO@@@@COOOOOOOOOOOH@GOOOOOOOOOOOOOOOOOHAOOOOOOOOOO@@@@COOOOOOOOOOOL@OOOOOOOOOOOOOOOOOOLAOOOOOOOOOO@@@@COOOOOOOOOOOLAOOOOOOOOOOOOOOOOOOLCOOOOOOOOOO@@@@COOOOOOOOOOONCOOOOOOOOOOOOOOOOOONCOOOOOOOOOO@@@@GOOOOOOOOOOOOGOOOOOOOOOOOOOOOOOOOGOOOOOOOOOO@@@@GOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@GOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@GOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@GOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@GOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@GOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@GOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@GOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@AOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@AOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@AOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@
)

(RPAQQ *MISSILE-COMMAND-ICON* #*(80 60)@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B@@@@@@@@@@@@@@@@@@@G@@@@@@@@@@@@@@@@@@@OH@@@@@@@@@@@@@@@@@AOL@@@@@@@@@@@@@@@@@CON@@@@@@@@@@@@@@@@@GOO@@@@@@@@@@@@@@@@@OOOH@@@@@@@@@@@@@@@AOOOL@@@@@@@@@@@@@@@COOON@@@@@@@@@@@@@@@GOOOO@@@@@@@@@@@@@@@OOOOOH@@@@@@@@@@@@@AOOOOOL@@@@@@@@@@@@@COOOOON@@@@@@@@@@@@@GOOOOOO@@@@@@@@@@@@@EOOOOOI@@@@@@@@@@@@@DAOOONA@@@@@@@@@@@@@D@@OL@A@@@@@@@@@@@@@D@@@@@A@@@@@@@@@@@@@D@@@@@A@@@@@@@@@@@@@D@B@H@A@@@@@@@@@@@@@D@C@H@A@@@@@@@@@@@@@D@BHH@A@@@@@@@@@@@@@D@BDH@A@@@@@@@@@@@@@D@BBH@A@@@@@@@@@@@@@D@BAH@A@@@@@@@@@@@@@D@B@H@A@@@@@@@@@@@@@D@@@@@A@@@@@@@@@@@@@D@@D@@A@@@@@@@@@@@@@D@@D@@A@@@@@@@@@@@@@D@@D@@A@@@@@@@@@@@@@D@@D@@A@@@@@@@@@@@@@L@@D@@A@@@@@@@@@@@@AL@@D@@A@@@@@@@@@@@@CL@@D@@AH@@@@@@@@@@@GL@@@@@AL@@@@@@@@@@@GL@BAH@AN@@@@@@@@@@@OL@BB@@AO@@@@@@@@@@@OL@BD@@AOH@@@@@@@@@AOL@BH@@AOL@@@@@@@@@AOL@C@@@AOL@@@@@@@@@COL@BH@@AON@@@@@@@@@COL@BD@@AON@@@@@@@@@GOL@BB@@AOO@@@@@@@@@GOL@BAH@AOOH@@@@@@@@OOL@@@@@AOOH@@@@@@@@OOL@AOL@AOOH@@@@@@@AOOL@A@@@AOOL@@@@@@@AOOL@A@@@AOOL@@@@@@@AOOL@A@@@AOOL@@@@@@@COOL@AOH@AOON@@@@@@@COOL@A@@@AOON@@@@@@@GOOL@A@@@AOON@@@@@@@GOOL@A@@@AOON@@@@@@@GOOO@AOL@OOOO@@@@@@@GOOLN@@@GIOOO@@@@@@@@@@@CN@CLAOOO@@@@@@@@@@@@CON@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
)

(RPAQQ *MISSILE-COMMAND-MASK* #*(80 60)@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B@@@@@@@@@@@@@@@@@@@G@@@@@@@@@@@@@@@@@@@OH@@@@@@@@@@@@@@@@@AOL@@@@@@@@@@@@@@@@@CON@@@@@@@@@@@@@@@@@GOO@@@@@@@@@@@@@@@@@OOOH@@@@@@@@@@@@@@@AOOOL@@@@@@@@@@@@@@@COOON@@@@@@@@@@@@@@@GOOOO@@@@@@@@@@@@@@@OOOOOH@@@@@@@@@@@@@AOOOOOL@@@@@@@@@@@@@COOOOON@@@@@@@@@@@@@GOOOOOO@@@@@@@@@@@@@GOOOOOO@@@@@@@@@@@@@GOOOOOO@@@@@@@@@@@@@GOOOOOO@@@@@@@@@@@@@GOOOOOO@@@@@@@@@@@@@GOOOOOO@@@@@@@@@@@@@GOOOOOO@@@@@@@@@@@@@GOOOOOO@@@@@@@@@@@@@GOOOOOO@@@@@@@@@@@@@GOOOOOO@@@@@@@@@@@@@GOOOOOO@@@@@@@@@@@@@GOOOOOO@@@@@@@@@@@@@GOOOOOO@@@@@@@@@@@@@GOOOOOO@@@@@@@@@@@@@GOOOOOO@@@@@@@@@@@@@GOOOOOO@@@@@@@@@@@@@GOOOOOO@@@@@@@@@@@@@GOOOOOO@@@@@@@@@@@@@OOOOOOO@@@@@@@@@@@@AOOOOOOO@@@@@@@@@@@@COOOOOOOH@@@@@@@@@@@GOOOOOOOL@@@@@@@@@@@GOOOOOOON@@@@@@@@@@@OOOOOOOOO@@@@@@@@@@@OOOOOOOOOH@@@@@@@@@AOOOOOOOOOL@@@@@@@@@AOOOOOOOOOL@@@@@@@@@COOOOOOOOON@@@@@@@@@COOOOOOOOON@@@@@@@@@GOOOOOOOOOO@@@@@@@@@GOOOOOOOOOOH@@@@@@@@OOOOOOOOOOOH@@@@@@@@OOOOOOOOOOOH@@@@@@@AOOOOOOOOOOOL@@@@@@@AOOOOOOOOOOOL@@@@@@@AOOOOOOOOOOOL@@@@@@@COOOOOOOOOOON@@@@@@@COOOOOOOOOOON@@@@@@@GOOOOOOOOOOON@@@@@@@GOOOOOOOOOOON@@@@@@@GOOOOOOOOOOOO@@@@@@@GOOLOOOOOIOOO@@@@@@@@@@@COOOLAOOO@@@@@@@@@@@@CON@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
)

(RPAQQ *MISSLE-COMMAND-ICON* #*(80 60)@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B@@@@@@@@@@@@@@@@@@@G@@@@@@@@@@@@@@@@@@@OH@@@@@@@@@@@@@@@@@AOL@@@@@@@@@@@@@@@@@CON@@@@@@@@@@@@@@@@@GOO@@@@@@@@@@@@@@@@@OOOH@@@@@@@@@@@@@@@AOOOL@@@@@@@@@@@@@@@COOON@@@@@@@@@@@@@@@GOOOO@@@@@@@@@@@@@@@OOOOOH@@@@@@@@@@@@@AOOOOOL@@@@@@@@@@@@@COOOOON@@@@@@@@@@@@@GOOOOOO@@@@@@@@@@@@@EOOOOOI@@@@@@@@@@@@@DAOOONA@@@@@@@@@@@@@D@@OL@A@@@@@@@@@@@@@D@@@@@A@@@@@@@@@@@@@D@@@@@A@@@@@@@@@@@@@D@B@H@A@@@@@@@@@@@@@D@C@H@A@@@@@@@@@@@@@D@BHH@A@@@@@@@@@@@@@D@BDH@A@@@@@@@@@@@@@D@BBH@A@@@@@@@@@@@@@D@BAH@A@@@@@@@@@@@@@D@B@H@A@@@@@@@@@@@@@D@@@@@A@@@@@@@@@@@@@D@@D@@A@@@@@@@@@@@@@D@@D@@A@@@@@@@@@@@@@D@@D@@A@@@@@@@@@@@@@D@@D@@A@@@@@@@@@@@@@L@@D@@A@@@@@@@@@@@@AL@@D@@A@@@@@@@@@@@@CL@@D@@AH@@@@@@@@@@@GL@@@@@AL@@@@@@@@@@@GL@BAH@AN@@@@@@@@@@@OL@BB@@AO@@@@@@@@@@@OL@BD@@AOH@@@@@@@@@AOL@BH@@AOL@@@@@@@@@AOL@C@@@AOL@@@@@@@@@COL@BH@@AON@@@@@@@@@COL@BD@@AON@@@@@@@@@GOL@BB@@AOO@@@@@@@@@GOL@BAH@AOOH@@@@@@@@OOL@@@@@AOOH@@@@@@@@OOL@AOL@AOOH@@@@@@@AOOL@A@@@AOOL@@@@@@@AOOL@A@@@AOOL@@@@@@@AOOL@A@@@AOOL@@@@@@@COOL@AOH@AOON@@@@@@@COOL@A@@@AOON@@@@@@@GOOL@A@@@AOON@@@@@@@GOOL@A@@@AOON@@@@@@@GOOO@AOL@OOOO@@@@@@@GOOLN@@@GIOOO@@@@@@@@@@@CN@CLAOOO@@@@@@@@@@@@CON@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
)

(RPAQQ *SCORE* 17490)

(RPAQQ *SKYLINE* #*(180 50)@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OO@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OO@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OO@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OO@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OO@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AOL@GOO@@@@@@@@@@@@@@@@COOOH@@@@@@@@@@@@@@@@@@@@AOL@GOO@@AON@@@@@@@@@@@COOOH@@@@@@@@@@@@@@@@@@@@AOL@GOO@@AON@@@@@@@@@@@COOOH@@@@@@@@@@@@@@@@@@@@AOL@GOO@@AON@@@@@@@@@@@COOOH@@@@@@@@@@@@@@@@@@@@AOL@GOO@@AON@@@@@@@@@@@COOOH@@@@@@@@@@@@@@@@@@COOOL@GOO@@AON@@@@@@@@@@@COOOH@@@@@@GOOOOO@@@@@@COOOL@GOOOOOON@@@@@@@@@@@COOOH@@@@@@GOOOOO@@@@@@COOOLAOOOOOOON@@@@@@@@@@@COOOH@@@@@@GOOOOO@@@@@@COOOLAOOOOOOON@@@@@@@@@@@COOOH@@@@@@GOOOOO@@@@@@COOOLAOOOOOOONCO@@@@OOOOOOOOOH@@@@@@GOOOOO@@@@@@OOOOLAOOOOOOONCO@@@@OOOOOOOOOH@@@@GOOOOOOO@@@@@@OOOOLAOOOOOOONCO@@@@OOOOOOOOOH@@@@GOOOOOOO@@@@@@OOOOLAOOOOOOONCO@@@@OOOOOOOOOH@@@@GOOOOOOO@@@@@@OOOOLAOOOOOOONCO@@@@OOOOOOOOOHOOO@GOOOOOOO@@@@@@OOOOOOOOOOOOONCO@@@@OOOOOOOOOHOOO@GOOOOOOO@@@@@@OOOOOOOOOOOOONCO@@@@OOOOOOOOOHOOO@GOOOOOOO@@@@@@OOOOOOOOOOOOONCO@@@@OOOOOOOOOHOOO@GOOOOOOO@@@@@@OOOOOOOOOOOOONCO@@@@OOOOOOOOOHOOO@GOOOOOOO@@@@@@OOOOOOOOOOOOONCO@@@@OOOOOOOOOHOOO@GOOOOOOO@@@OOOOOOOOOOOOOOOOOOO@@@@OOOOOOOOOHOOO@GOOOOOOO@@@OOOOOOOOOOOOOOOOOOO@GOOOOOOOOOOOHOOO@GOOOOOOO@@@OOOOOOOOOOOOOOOOOOO@GOOOOOOOOOOOHOOO@GOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHOOO@GOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO@@@
)
(DECLARE%: EVAL@COMPILE

(RECORD CITY (X Y STATUS REGION)
             X _ 0 Y _ 0 STATUS _ 'OK [ACCESSFNS ([DRAW (COND
                                                           ((EQ (FETCH (CITY STATUS) OF DATUM)
                                                                'OK)
                                                            (BITBLT *SKYLINE* 0 0 *GAME-WINDOW*
                                                                   (FETCH (CITY X) OF DATUM)
                                                                   (FETCH (CITY Y) OF DATUM)))
                                                           (T (BITBLT *BLASTED-SKYLINE* 0 0 
                                                                     *GAME-WINDOW*
                                                                     (FETCH (CITY X) OF DATUM)
                                                                     (FETCH (CITY Y) OF DATUM]
                                                  [ERASE (COND
                                                            ((EQ (FETCH (CITY STATUS) OF DATUM)
                                                                 'OK)
                                                             (BITBLT *SKYLINE* 0 0 *GAME-WINDOW*
                                                                    (FETCH (CITY X) OF DATUM)
                                                                    (FETCH (CITY Y) OF DATUM)
                                                                    NIL NIL NIL 'ERASE))
                                                            (T (BITBLT *BLASTED-SKYLINE* 0 0 
                                                                      *GAME-WINDOW*
                                                                      (FETCH (CITY X) OF DATUM)
                                                                      (FETCH (CITY Y) OF DATUM)
                                                                      NIL NIL NIL 'ERASE]
                                                  (BLAST (BLAST-CITY DATUM])

(RECORD SHOCK (X Y RADIUS REGION)
              X _ 100 Y _ 100 RADIUS _ 10 REGION _ NIL
              [ACCESSFNS ((DRAW (PROG NIL
                                      (BLOCK *BLOCK-TIME*)
                                      (FILLCIRCLE (FETCH (SHOCK X) OF DATUM)
                                             (FETCH (SHOCK Y) OF DATUM)
                                             (FETCH (SHOCK RADIUS) OF DATUM)
                                             BLACKSHADE *GAME-WINDOW*)))
                          (ERASE (PROG NIL
                                       (BLOCK *BLOCK-TIME*)
                                       (FILLCIRCLE (FETCH (SHOCK X) OF DATUM)
                                              (FETCH (SHOCK Y) OF DATUM)
                                              (FETCH (SHOCK RADIUS) OF DATUM)
                                              WHITESHADE *GAME-WINDOW*)))
                          (GROW (GROW-SHOCK DATUM])

(RECORD TRACE (X0 Y0 XN YN TARGET DX DY)
              X0 _ 0 Y0 _ 0 XN _ 0 YN _ 0 TARGET _ (PICK-TARGETS)
              [ACCESSFNS ((INIT (INIT-TRACE DATUM))
                          (DRAW (PROG NIL
                                      (BLOCK *BLOCK-TIME*)
                                      (DRAWLINE (FETCH (TRACE X0) OF DATUM)
                                             (FETCH (TRACE Y0) OF DATUM)
                                             (FETCH (TRACE XN) OF DATUM)
                                             (FETCH (TRACE YN) OF DATUM)
                                             2
                                             'REPLACE *GAME-WINDOW*)))
                          (ERASE (PROG NIL
                                       (BLOCK *BLOCK-TIME*)
                                       (DRAWLINE (fetch (TRACE X0) of DATUM)
                                              (fetch (TRACE Y0) of DATUM)
                                              (fetch (TRACE XN) of DATUM)
                                              (fetch (TRACE YN) of DATUM)
                                              2
                                              'ERASE *GAME-WINDOW*)))
                          (BUMP (BUMP-TRACE DATUM))
                          (MOVE (MOVE-TRACE DATUM))
                          (COLLIDE (COLLIDE-TRACE DATUM])
)
(DEFINEQ

(BARGRAPH-ERASE
  [LAMBDA NIL                                                (* edited%: "19-May-86 11:49")
    (DSPFILL *BAR-GRAPH* WHITESHADE 'REPLACE *GAME-WINDOW*])

(BLAST-CITY
  [LAMBDA (X)                                                (* edited%: "16-May-86 18:19")
    (if (EQ (fetch (CITY STATUS) of X)
            'GONE)
        then (fetch (CITY ERASE) of X)
             (fetch (CITY DRAW) of X)
      else (fetch (CITY ERASE) of X)
           (replace (CITY STATUS) of X with 'GONE)
           (fetch (CITY DRAW) of X)
           (DREMOVE X *TARGETS*)
           (RINGBELLS 2])

(BONUS-DISPLAY
  [LAMBDA NIL                                                (* edited%: "20-May-86 14:02")
    (CLEARW *GAME-WINDOW*)
    (MOVETO 350 700 *GAME-WINDOW*)
    (PRIN1 "                                                                      " *GAME-WINDOW*)
    (MOVETO 350 700 *GAME-WINDOW*)
    (PRIN1 "BONUS=" *GAME-WINDOW*)
    (PRIN1 *BONUS* *GAME-WINDOW*)
    (STROBE-CITIES)
    (MOVETO 350 660 *GAME-WINDOW*)
    (PRIN1 "  X " *GAME-WINDOW*)
    (PRIN1 (SUB1 (LENGTH *TARGETS*))
           *GAME-WINDOW*)
    (MOVETO 350 600 *GAME-WINDOW*)
    (PRIN1 "TOTAL is  " *GAME-WINDOW*)
    (PRIN1 (ITIMES (SUB1 (LENGTH *TARGETS*))
                  *BONUS*)
           *GAME-WINDOW*)
    (DISMISS 2000)
    (SETQ *SCORE* (IPLUS *SCORE* (PRIN1 (ITIMES (SUB1 (LENGTH *TARGETS*))
                                               *BONUS*)
                                        *GAME-WINDOW*)))
    (SETQ *BONUS* (IPLUS *BONUS-DELTA* *BONUS*])

(BUMP-TRACE
  [LAMBDA (NEWTRACE)                                         (* edited%: "19-May-86 10:07")
    [replace (TRACE XN) of NEWTRACE with (ABS (IDIFFERENCE (fetch (TRACE XN) of NEWTRACE)
                                                     (fetch (TRACE DX) of NEWTRACE]
    (replace (TRACE YN) of NEWTRACE with (ABS (IDIFFERENCE (fetch (TRACE YN) of NEWTRACE)
                                                     (fetch (TRACE DY) of NEWTRACE])

(COIN-FLIP
  [LAMBDA NIL                                                (* edited%: "20-May-86 19:51")
    (if (AND (ILEQ (RAND 1 100)
                   *GUESSFACTOR*)
             (IGEQ (LENGTH *TARGETS*)
                   3))
        then T
      else NIL])

(COLLIDE-TRACE
  [LAMBDA (NEWTRACE)                                         (* edited%: "16-May-86 16:48")
    (LET* ((ENDX (fetch (TRACE XN) of NEWTRACE))
           (ENDY (fetch (TRACE YN) of NEWTRACE))
           (TRACE-TARGET (fetch (TRACE TARGET) of NEWTRACE))
           (TRACE-POS (CONS ENDX ENDY))
           (TRACE-REGION (fetch (CITY REGION) of TRACE-TARGET)))
          (COND
             ((MYINSIDE TRACE-REGION TRACE-POS)
              (fetch (TRACE ERASE) of NEWTRACE)
              (fetch (CITY BLAST) of TRACE-TARGET)
              (DREMOVE TRACE-TARGET *TARGETS*)
              (DREMOVE NEWTRACE *TRACES*)
              T)
             ((NOT (MYINSIDE *LEGAL-REGION* TRACE-POS))
              (fetch (TRACE ERASE) of NEWTRACE)
              (fetch (CITY DRAW) of TRACE-TARGET)
              (DREMOVE NEWTRACE *TRACES*)
              T)
             ((INTERCEPTED NEWTRACE TRACE-POS)
              T)
             (T NIL])

(DISPLAY-MISSILES
  [LAMBDA NIL                                                (* edited%: "19-May-86 12:49")
    (BARGRAPH-ERASE)
    (MOVETO *BAR-GRAPHX* *BAR-GRAPHY* *GAME-WINDOW*)
    (SETQ *MISSILES-USED* (ADD1 *MISSILES-USED*))
    (SETQ *MISSILES-LEFT* (IDIFFERENCE *MAX-MISSILES* *MISSILES-USED*))
    (SETQ *BAR-GRAPH* (LIST *BARDISPX* *BARDISPY* (ITIMES *MISSILES-LEFT* *BARFACTOR*)
                            *BARHEIGHT*))
    (UPDATE-BARGRAPH])

(GEN-MIRV
  [LAMBDA (NEWTRACE)                                         (* edited%: "20-May-86 20:41")
    (LET* [(SX (fetch (TRACE XN) of NEWTRACE))
           (SY (fetch (TRACE YN) of NEWTRACE))
           (CLUSTER (for N to (SUB1 (LENGTH *TARGETS*))
                       collect (PROG ((TMP (create TRACE)))
                                     (replace (TRACE TARGET) of TMP with (CAR (NTH *TARGETS* N)))
                                     (replace (TRACE X0) of TMP with SX)
                                     (replace (TRACE XN) of TMP with SX)
                                     (replace (TRACE Y0) of TMP with SY)
                                     (replace (TRACE YN) of TMP with SY)
                                     (replace (TRACE DX) of TMP
                                        with (IQUOTIENT (IDIFFERENCE
                                                         SX
                                                         (PLUS (fetch (CITY X)
                                                                  of (fetch (TRACE TARGET)
                                                                        of TMP))
                                                               *CITY-XOFST*))
                                                    *SPEED*))
                                     (replace (TRACE DY) of TMP
                                        with (IQUOTIENT (IDIFFERENCE
                                                         SY
                                                         (PLUS (fetch (CITY Y)
                                                                  of (fetch (TRACE TARGET)
                                                                        of TMP))
                                                               *CITY-YOFST*))
                                                    *SPEED*))
                                     (fetch (TRACE DRAW) of TMP)
                                     (RETURN TMP]
          (DREMOVE NEWTRACE *TRACES*)
          (SETQ *TRACES* (NCONC CLUSTER *TRACES*])

(GEN-SHOCK
  [LAMBDA NIL                                                (* edited%: "19-May-86 12:54")
    (COND
       ((IGEQ *MISSILES-USED* *MAX-MISSILES*)
        NIL)
       (T (GETMOUSESTATE)
          (LET ((POSX (LASTMOUSEX *GAME-WINDOW*))
                (POSY (LASTMOUSEY *GAME-WINDOW*))
                (NEWSHOCK (create SHOCK))
                (SIZE (IPLUS *RADIUS-DELTA* *RADIUS-DELTA*)))
               (DISPLAY-MISSILES)
               (replace (SHOCK X) of NEWSHOCK with POSX)
               (replace (SHOCK Y) of NEWSHOCK with POSY)
               (replace (SHOCK RADIUS) of NEWSHOCK with *RADIUS-DELTA*)
               (fetch (SHOCK DRAW) of NEWSHOCK)
               (replace (SHOCK REGION) of NEWSHOCK with (LIST (DIFFERENCE POSX *RADIUS-DELTA*)
                                                              (DIFFERENCE POSY *RADIUS-DELTA*)
                                                              SIZE SIZE))
               (SETQ *SHOCK-WAVES* (CONS NEWSHOCK *SHOCK-WAVES*])

(GEN-TARGETS
  [LAMBDA NIL                                                (* edited%: "19-May-86 20:05")
    (for I from 100 to 900 by 200 do (LET* ((TMP (create CITY)))
                                           (replace X of TMP with (DIFFERENCE I 90))
                                           (replace Y of TMP with 50)
                                           (replace (CITY REGION) of TMP
                                              with (LIST (DIFFERENCE I 90)
                                                         50 *CITY-WIDTH* *CITY-HEIGHT*))
                                           (SETQ *TARGETS* (CONS TMP *TARGETS*))
                                           (fetch (CITY DRAW) of TMP])

(GEN-TRACES
  [LAMBDA NIL                                                (* edited%: "15-May-86 17:14")
    [SETQ *TRACES* (for N to (RAND 1 *MAX-TRACES*) collect (PROG ((TMP (create TRACE)))
                                                                 (fetch (TRACE INIT) of TMP)
                                                                 (RETURN TMP]
    (NCONC *TRACES* (LIST T])

(GROW-SHOCK
  [LAMBDA (SHOCKWAVE)                                        (* edited%: "16-May-86 16:21")
    (fetch (SHOCK ERASE) of SHOCKWAVE)
    (COND
       ((EQ T SHOCKWAVE)
        NIL)
       ((GREATERP (IPLUS (fetch (SHOCK RADIUS) of SHOCKWAVE)
                         *RADIUS-DELTA*)
               *MAX-RADIUS*)
        (DREMOVE SHOCKWAVE *SHOCK-WAVES*))
       (T (replace (SHOCK RADIUS) of SHOCKWAVE with (IPLUS *RADIUS-DELTA* (fetch (SHOCK RADIUS)
                                                                             of SHOCKWAVE)))
          (fetch (SHOCK DRAW) of SHOCKWAVE)
          (LET* ((DISP (fetch (SHOCK RADIUS) of SHOCKWAVE))
                 (SIZE (IPLUS DISP DISP)))
                (replace (SHOCK REGION) of SHOCKWAVE with (LIST (IDIFFERENCE (fetch (SHOCK X)
                                                                                of SHOCKWAVE)
                                                                       DISP)
                                                                (IDIFFERENCE (fetch (SHOCK Y)
                                                                                of SHOCKWAVE)
                                                                       DISP)
                                                                SIZE SIZE))
                (SHOCK-COLLISION SHOCKWAVE])

(INIT-MISSILE
  [LAMBDA NIL                                                (* edited%: "20-May-86 20:43")
    (SETCURSOR WAITINGCURSOR)
    [COND
       ((AND (BOUNDP '*GAME-WINDOW*)
             *GAME-WINDOW*)
        (CLEARW *GAME-WINDOW*))
       (T (SETQ *GAME-WINDOW* (CREATEW '(5 20 1010 780) "Missile Command"))
          (WINDOWPROP *GAME-WINDOW* 'BUTTONEVENTFN 'GEN-SHOCK)
          (DSPFONT (FONTCREATE 'TIMESROMAN 36 'BOLD)
                 *GAME-WINDOW*)
          (WINDOWPROP *GAME-WINDOW* 'ICON (ICONW *MISSILE-COMMAND-ICON* *MISSILE-COMMAND-MASK*
                                                 '(20 . 20]
    (COND
       ((ASSOC 'MissileCommand BackgroundMenuCommands)
        NIL)
       (T [SETQ BackgroundMenuCommands (APPEND BackgroundMenuCommands (LIST (LIST 'MissileCommand
                                                                                  '(MISSILE-COMMAND]
          (SETQ BackgroundMenu NIL)))
    (SETQ *TARGETS* '(T))
    (SETQ *TRACES* '(T))
    (SETQ *MAX-TRACES* 50)
    (SETQ *MISSILES* '(T))
    (SETQ *LEFT* 10)
    (SETQ *RIGHT* 1000)
    (SETQ *FLOOR* 65)
    (SETQ *INITIAL-Y* 760)
    (SETQ *SPEED* 9)
    (SETQ *CITY-HEIGHT* 50)
    (SETQ *CITY-WIDTH* 180)
    (SETQ *CITY-XOFST* 90)
    (SETQ *CITY-YOFST* 25)
    (SETQ *SCORE* 0)
    (SETQ *SCOREX* 425)
    (SETQ *SCOREY* 5)
    (SETQ *SCORE-DELTA* 10)
    (SETQ *SCORE-INCR* 10)
    (SETQ *MAX-RADIUS* 75)
    (SETQ *RADIUS-DELTA* 26)
    (SETQ *SHOCK-WAVES* '(T))
    (SETQ *MAX-MISSILES* 75)
    (SETQ *MISSILES-USED* 0)
    (SETQ *MISSILES-LEFT* (IDIFFERENCE *MAX-MISSILES* *MISSILES-USED*))
    (SETQ *BARDISPX* 200)
    (SETQ *BARDISPY* 5)
    (SETQ *BARHEIGHT* 25)
    (SETQ *BARFACTOR* 2)
    (SETQ *BAR-GRAPH* (LIST *BARDISPX* *BARDISPY* (ITIMES *MISSILES-LEFT* *BARFACTOR*)
                            *BARHEIGHT*))
    (SETQ *BAR-GRAPHX* 5)
    (SETQ *BAR-GRAPHY* 5)
    (SETQ *BARMSGX* 10)
    (SETQ *BARMSGY* 5)
    (SETQ *BLOCK-TIME* 20)
    (SETQ *LEGAL-REGION* (LIST *LEFT* *FLOOR* 1005 725))
    (SETQ *BONUS* 100)
    (SETQ *BONUS-DELTA* 100)
    (SETQ *ROUND* 0)
    (SETQ *GUESSFACTOR* 2)
    (GEN-TARGETS)
    (GEN-TRACES)
    (SETCURSOR DEFAULTCURSOR)
    (UPDATE-SCORE)
    (DISPLAY-MISSILES])

(INIT-TRACE
  [LAMBDA (NEWTRACE)                                         (* edited%: "20-May-86 19:36")
    (LET [(SPOT (RAND *LEFT* *RIGHT*))
          (XT (fetch (CITY X) of (fetch (TRACE TARGET) of NEWTRACE)))
          (YT (fetch (CITY Y) of (fetch (TRACE TARGET) of NEWTRACE]
         (replace (TRACE X0) of NEWTRACE with SPOT)
         (replace (TRACE Y0) of NEWTRACE with *INITIAL-Y*)
         (replace (TRACE DX) of NEWTRACE with (IQUOTIENT (IDIFFERENCE SPOT (PLUS XT *CITY-XOFST*))
                                                     *SPEED*))
         (replace (TRACE DY) of NEWTRACE with (IQUOTIENT (IDIFFERENCE *INITIAL-Y* (PLUS YT 
                                                                                        *CITY-YOFST*)
                                                                )
                                                     *SPEED*))
         (replace (TRACE XN) of NEWTRACE with SPOT)
         (replace (TRACE YN) of NEWTRACE with *INITIAL-Y*])

(INTERCEPTED
  [LAMBDA (NEWTRACE TRACEPOS)                                (* edited%: "19-May-86 10:08")
    (LET* ((SHOCKS *SHOCK-WAVES*))
          (for N from 1 to (SUB1 (LENGTH SHOCKS)) do (COND
                                                        ((MYINSIDE (fetch (SHOCK REGION)
                                                                      of (CAR SHOCKS))
                                                                TRACEPOS)
                                                         (fetch (TRACE ERASE) of NEWTRACE)
                                                         (DREMOVE NEWTRACE *TRACES*)
                                                         (SCORE-ADD *SCORE-DELTA*)))
                                                     (SETQ SHOCKS (CDR SHOCKS])

(MAIN-LOOP
  [LAMBDA NIL                                                (* edited%: "19-May-86 20:06")
    (INIT-MISSILE)
    (SETCURSOR CROSSHAIRS)
    (until (EQ (CAR *TARGETS*)
               T) do (COND
                        ((EQ T (CAR *TRACES*))
                         (GEN-TRACES)
                         (NEXT-PHASE)))
                     (MAIN-LOOP-AUX))
    (SETCURSOR DEFAULTCURSOR)
    (SHRINKW *GAME-WINDOW*)
    (WAKE.PROCESS MY-PARENT T])

(MAIN-LOOP-AUX
  [LAMBDA NIL                                                (* edited%: "16-May-86 13:50")
    (LET [[SHOCKS (CAR (FNTH *SHOCK-WAVES* (RAND 1 (SUB1 (LENGTH *SHOCK-WAVES*]
          (TRACES (CAR (FNTH *TRACES* (RAND 1 (SUB1 (LENGTH *TRACES*]
         (COND
            ((AND (EQ TRACES T)
                  (EQ SHOCKS T))
             T)
            (T (if (AND (NEQ TRACES T)
                        (NEQ TRACES NIL))
                   then (fetch (TRACE MOVE) of TRACES))
               (if (AND (NEQ SHOCKS T)
                        (NEQ SHOCKS NIL))
                   then (fetch (SHOCK GROW) of SHOCKS])

(MISSILE-COMMAND
  [LAMBDA NIL                                                (* edited%: "19-May-86 20:06")
    (SETQ MISSILE-PROC (ADD.PROCESS '(MAIN-LOOP) 'NAME 'MissileCommand 'SUSPEND T))
    (TTY.PROCESS MISSILE-PROC)
    (SPAWN.MOUSE)
    (SETQ MY-PARENT (THIS.PROCESS))
    (WAKE.PROCESS MISSILE-PROC T)
    (BLOCK T)
    (DEL.PROCESS MISSILE-PROC])

(MOVE-TRACE
  [LAMBDA (NEWTRACE)                                         (* edited%: "20-May-86 18:37")
    (COND
       ((fetch (TRACE COLLIDE) of NEWTRACE)
        NIL)
       ((COIN-FLIP)
        (GEN-MIRV NEWTRACE))
       (T (fetch (TRACE ERASE) of NEWTRACE)
          (fetch (TRACE BUMP) of NEWTRACE)
          (fetch (TRACE DRAW) of NEWTRACE])

(MYINSIDE
  [LAMBDA (REGION POS)                                       (* edited%: "16-May-86 16:52")
    (LET ((XT (CAR POS))
          (YT (CDR POS))
          (LEFT (CAR REGION))
          (BOT (CADR REGION))
          (WIDTH (CADDR REGION))
          (HEIGHT (CADDDR REGION)))
         (if (AND (IGEQ XT LEFT)
                  (IGEQ YT BOT)
                  (ILEQ XT (IPLUS LEFT WIDTH))
                  (ILEQ YT (IPLUS BOT HEIGHT)))
             then T
           else NIL])

(NEXT-PHASE
  [LAMBDA NIL                                                (* edited%: "20-May-86 16:59")
    (SETQ *ROUND* (ADD1 *ROUND*))
    (CLEARW *GAME-WINDOW*)
    (SETQ *SHOCK-WAVES* '(T))
    (OR (EQ *SPEED* 1)
        (SETQ *SPEED* (SUB1 *SPEED*)))
    (UPDATE-SCORE)
    (SETQ *MISSILES-USED* -1)
    (BONUS-DISPLAY)
    (CLEARW *GAME-WINDOW*)
    (UPDATE-SCORE)
    (MOVETO 375 500 *GAME-WINDOW*)
    (PRIN1 "End of Round " *GAME-WINDOW*)
    (PRIN1 *ROUND* *GAME-WINDOW*)
    (DISMISS 5000)
    (CLEARW *GAME-WINDOW*)
    (DISPLAY-MISSILES)
    (UPDATE-SCORE)
    (SETQ *SCORE-DELTA* (IPLUS *SCORE-DELTA* *SCORE-INCR*))
    (for SOMECITY in *TARGETS* unless (EQ SOMECITY T) do (fetch (CITY DRAW) of SOMECITY])

(PICK-TARGETS
  [LAMBDA NIL                                                (* edited%: "15-May-86 17:51")
    (CAR (NTH *TARGETS* (RAND 1 (SUB1 (LENGTH *TARGETS*])

(SCORE-ADD
  [LAMBDA (N)                                                (* edited%: "19-May-86 10:04")
    (SETQ *SCORE* (IPLUS *SCORE* N))
    (UPDATE-SCORE])

(SHOCK-COLLISION
  [LAMBDA (SHOCKWAVE)                                        (* edited%: "19-May-86 10:09")
    (LET* ((TRACES *TRACES*))
          (for N from 1 to (SUB1 (LENGTH TRACES)) do (COND
                                                        ((EQ T (CAR TRACES))
                                                         NIL)
                                                        ([MYINSIDE (fetch (SHOCK REGION) of SHOCKWAVE
                                                                          )
                                                                (CONS (fetch (TRACE XN)
                                                                         of (CAR TRACES))
                                                                      (fetch (TRACE YN)
                                                                         of (CAR TRACES]
                                                         (fetch (TRACE ERASE) of (CAR TRACES))
                                                         (DREMOVE (CAR TRACES)
                                                                *TRACES*)
                                                         (SCORE-ADD *SCORE-DELTA*)))
                                                     (SETQ TRACES (CDR TRACES])

(STROBE-CITIES
  [LAMBDA NIL                                                (* edited%: "20-May-86 13:32")
    (LET ((TMP 1))
         (for SOMECITY in *TARGETS* unless (EQ SOMECITY T)
            do (fetch (CITY DRAW) of SOMECITY)
               (PLAYTUNE (LIST (CONS (IPLUS 300 (ITIMES TMP 100))
                                     30000)))
               (fetch (CITY ERASE) of SOMECITY)
               (SETQ TMP (ADD1 TMP))
               (fetch (CITY DRAW) of SOMECITY))
         (SUB1 (LENGTH *TARGETS*])

(UPDATE-BARGRAPH
  [LAMBDA NIL                                                (* edited%: "19-May-86 12:42")
    (BARGRAPH-ERASE)
    (MOVETO *BARMSGX* *BARMSGY* *GAME-WINDOW*)
    (PRIN1 "MISSILES> " *GAME-WINDOW*)
    (DSPFILL *BAR-GRAPH* BLACKSHADE 'REPLACE *GAME-WINDOW*])

(UPDATE-SCORE
  [LAMBDA NIL                                                (* edited%: "19-May-86 09:48")
    (MOVETO *SCOREX* *SCOREY* *GAME-WINDOW*)
    (PRIN1 "SCORE: " *GAME-WINDOW*)
    (PRIN1 *SCORE* *GAME-WINDOW*])
)
(PUTPROPS MISSILE COPYRIGHT ("Xerox Corporation" 1987))
(DECLARE%: DONTCOPY
  (FILEMAP (NIL (14185 34395 (BARGRAPH-ERASE 14195 . 14375) (BLAST-CITY 14377 . 14874) (BONUS-DISPLAY 
14876 . 15841) (BUMP-TRACE 15843 . 16363) (COIN-FLIP 16365 . 16650) (COLLIDE-TRACE 16652 . 17678) (
DISPLAY-MISSILES 17680 . 18157) (GEN-MIRV 18159 . 20400) (GEN-SHOCK 20402 . 21477) (GEN-TARGETS 21479
 . 22272) (GEN-TRACES 22274 . 22702) (GROW-SHOCK 22704 . 24151) (INIT-MISSILE 24153 . 26410) (
INIT-TRACE 26412 . 27516) (INTERCEPTED 27518 . 28359) (MAIN-LOOP 28361 . 28856) (MAIN-LOOP-AUX 28858
 . 29528) (MISSILE-COMMAND 29530 . 29903) (MOVE-TRACE 29905 . 30307) (MYINSIDE 30309 . 30815) (
NEXT-PHASE 30817 . 31593) (PICK-TARGETS 31595 . 31770) (SCORE-ADD 31772 . 31947) (SHOCK-COLLISION 
31949 . 33299) (STROBE-CITIES 33301 . 33864) (UPDATE-BARGRAPH 33866 . 34158) (UPDATE-SCORE 34160 . 
34393)))))
STOP
