(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP") (FILECREATED " 1-May-87 17:22:51" {ERIS}F>CODE>MISSILE.;2 34474 changes to%: (FNS COIN-FLIP) previous date%: "20-May-86 20:49:29" {ERIS}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