TO: DAVE WARHOL FROM: KEITH ROBINSON RE: "KILLER" I thought this was an unmodiifed killer, but on closer inspection it is something called "Man Dives." I don't know how different it is from the pure "Killer." TITLE "KILLER (TRIVIA II)-- DEMONSTRATION PROGRAM" ;REWRITTEN FROM TRIVIA ON 26 MAY 1981 BY JOHN P. SOHL ;REFERENCES TO "YOUR FRIEND THE EXEC" ARE SECTIONS ; SO (EXEC 2.5.1) REFERS TO SECTION 2.5.1 ON PAGE 2-4 INSERT "SWELL" INSERT "COLORS" INSERT "MACROS" ;INSERT FILES FOR MACRO DEFINITIONS SEXTERN .OBJ0,.OBJ1 ; RAM DATA BASES SEXTERN .KEYDSP EXTERN FILLRAM,INITOBJS,GETVEL ;EXEC ROUTINES EXTERN INLMES,CLEARRAM MAN=.OBJ0 ;MAN IS OBJECT ZERO MINE=.OBJ1 ;MINE IS OBJECT ONE PSECT ;UNIVERSAL DATA BLOCK (EXEC 2.2) BIDECLE MOVGRAM ;MOVING PICTURE BASE BIDECLE CNTERS ;PROCESS TABLE BIDECLE RESET ;RESET ROUTINE BIDECLE BAKGRAM ;BACKGROUND PICTURE BASE BIDECLE BLIST ;BACKGROUND LIST BIDECLE TNAME ;PROGRAM NAME DECLE %10000001 ;SPECIAL TITLE + KEYPAD CLICKS DECLE 0 ;NO EXTENDED BORDER DECLE 1 ;COLOR STACK MODE DECLE 0,0,0,0 ;COLOR STACK CONTENTS DECLE BD.RED ;BORDER COLOR DECLE 62*8 ;RESERVE SPACE IN GRAM FOR MAN ; DOUBLE RESOLUTION NEEDS 2 GRAM PICS DECLE 61*8 ;SINGLE-RESOLUTION MINE ; NEEDS ONLY ONE GRAM PICTURE CNTERS: ;(EXEC 2.4) PROCESS PROCESS1,20 ;PROCESS CALLED EVERY TWENTY TICKS PROCESS 0,0 ;TERMINATE LIST BLIST: DECLE ..NUMPCT ;(EXEC A.1) .NUMPCT.==0 GM.CHAR "A"-" ",YMIR!GRO,1 ;THIS IS FOR SHOW ONLY (EXEC A.2) ;IT PUTS AN UPSIDE DOWN "A" IN GRAM PICTURE #0 ;(AT LEAST ONE GRAM PICTURE MUST BE FILLED ; FOR THE PROGRAM TO WORK) ..NUMPCT=.NUMPCT. TITLE "SPECIAL TITLE (EXEC 2.3)" TNAME: DECLE 81," MAN DIVES ",0 ;YEAR AND GAME DOTITL: BEGIN MOV #CH.WHITE,R3 ;WRITE IN WHITE MOV #BACKTAB+3*BACKX+1,R4 ;STARTING POSITION ON SCREEN CALL INLMES ;WRITE MESSAGE (EXEC B.2.1 ROUTINE) DECLE " ONE MUSKETEER ",0 RETURN TITLE "RESET ROUTINE" RESET: BEGIN MOV #240,R0 MOV #BACKTAB,R4 CALL CLEARRAM MOV #MAN,R2 ;DATA BASE OF OBJECT MOV #MANRAM,R1 ;PROTOTYPE DATA BASE MOV #2,R0 ;NUMBER OF OBJECTS CALL INITOBJS ;INITIALIZE BOTH MOVING OBJECTS (EXEC 3.5) ;NOW SET UP THE KEYPAD DISPATCH (EXEC 4.2.2) MOV #KEYTAB,R0 ;MOVE ADDRESS OF KEYPAD DISPATCH TABLE TO R0 MOV R0,.KEYDSP ;SET UP KEYPAD ADDRESS RETURN ;END OF RESET ROUTINE KEYTAB: BIDECLE CTRL,0,0,0,0 ;DISPATCH ONLY ON WHEEL PRESS TITLE "PROCESS1, WHICH IS CALLED ONCE PER SECOND" PROCESS1:BEGIN ;THIS PROCESS TOGGLES THE GREEN BIT OF THE MINE ; EVERY SECOND, CHANGING IT FROM RED TO YELLOW MOV MINE+.OBJSTAT,R0 ;GET STATUS WORD XOR #CH.GREEN,R0 ;TOGGLE GREEN BIT MOV R0,MINE+.OBJSTAT ;REWRITE STATUS WORD RETURN TITLE "CONTROL MOVEMENT OF MAN" CTRL: BEGIN ;CALLED BY PRESSING THE WHEEL--ON ENTRY, R0 HAS WHEEL ; VALUE (0-15) OR -1 IF NEWLY RELEASED (EXEC 4.2.2/1) MOV MAN+.OBJSEQ,R3 ;CLEAR SPEED OF SEQUENCING AND #NOT $03F0,R3 ; MASK HERE IS %1111110000001111 TST R0 ;R0 HAS WHELL DIRECTION (OR -1) BMI STPGUY ;STOP MOTION IF WHEEL NOT PUSHED XOR #$0140,R3 ;MOVING, SO HE SEQUENCES AT MAX RATE MOV R3,MAN+.OBJSEQ ;REWRITE SEQUENCE WORD MOV R0,R1 ;PUT WHEEL DIRECTION IN R1 FOR GETVEL CALL MOV #12,R0 ;SPEED AT WHICH HE RUNS CALL GETVEL ;FIGURE VELOCITY (EXEC B.6 ROUTINE) ; ON RETURN, R0 HAS (XVEL,YVEL) MOV R0,MAN+.OBJMOT ;AND STORE IT MOV MAN+.OBJSTAT,R1 ;GET STATUS BITS AND #NOT ST.XMIRROR,R1 ;CLEAR MIRROR-IN-X BIT TST R0 ;FACING PROPERLY? (I.E. RIGHT?) ;R0 STILL HAS PACKED VELOCITY, WITH SIGN OF XVEL IN SIGN BIT BMI CTRL1 ;GO IF YES XOR #ST.XMIRROR,R1 ;NO, MUST MIRROR IN X CTRL1: MOV R1,MAN+.OBJSTAT ;AND RESTORE STATUS WORD RETURN STPGUY: MOV R3,MAN+.OBJSEQ ;STOP SEQUENCING CLR R0 ;AND MOTION MOV R0,MAN+.OBJMOT ; .. RETURN TITLE "MAN STARTS TO RUN OFF SCREEN EDGE" CENTER: BEGIN ;ON ENTRY R2 HAS 0=RIGHT 1=LEFT 2=BOTTOM 3=TOP SLL R2,1 ;OFFSET IS NOW 0,2,4,6 ADD R2,R7 ;DISPATCH BY BUMPING UP PROGRAM COUNTER BRA OFFRIT BRA OFFLFT BRA OFFBOT ; BRA OFFTOP OFFTOP: MOV #FOREY,R0 SWAP R0 INC R7 OFFBOT: CLR R0 MOV R0,MAN+.OBJY RETURN ;AND RETURN OFFLFT: MOV #FOREX,R0 SWAP R0 INC R7 OFFRIT: CLR R0 MOV R0,MAN+.OBJX RETURN TITLE "MAN RUNS INTO MINE" HITMINE:BEGIN MOV @R1,R0 ;STATUS WORD OF MAN AND #NOT ST.RED,R0 ;SET RED BIT OF MAN XOR #ST.RED,R0 ; .. MOV R0,@R1 ;AND RESTORE STATUS WORD ADD #.OBJTIM,R1 ;R1 NOW POINTS AT TIME-OUT COUNTER MOV #120,R0 ;6 SECONDS = 120 TICKS MOV R0,@R1 ;STORE TIME OUT COUNTER RETURN TITLE "TIMEOUT COUNTER REACHES ZERO" HITDONE:BEGIN ;TIMER EXPIRES MOV @R1,R0 ;CLEAR RED BIT OF MAN AND #NOT ST.RED,R0 ; .. MOV R0,@R1 ;AND RESTORE STATUS WORD RETURN TITLE "PROTOTYPE DATA BLOCK" MANRAM: BIDECLE ST.VISIBLE!ST.INTERACT!ST.YRES!ST.BLUE ;BLUE MAN BIDECLE MANROM ;ROM DATA BLOCK POSITION FOREX/2 ;INITIALIZE IN CENTER POSITION FOREY/2 ; .. DECLE 0,0 ;NO INITIAL SPEED SEQRATE 0 ;DOES NOT SEQUENCE INITIALLY BIDECLE 0 ;NO INITIAL TIME-OUT BIDECLE 0 ;NO EXTRA WORD MINERAM:BIDECLE ST.VISIBLE!ST.INTERACT!ST.YFULL!ST.RED ;MINE BIDECLE MINEROM ;ROM DATA BLOCK POSITION FOREX-30 ;INITIALIZE TO RIGHT POSITION FOREY/2 ;IN CENTER DECLE 0,0 ;NO SPEED SEQRATE 0 ;NO SEQUENCE BIDECLE 0 ;NO TIME OUT BIDECLE 0 ;NO EXTRA WORD MANROM: OFF OF.SCREEN,CENTER ;ROUTINE TO CALL WHEN GUY STEPS OFF BIDECLE HITDONE ;TIME OUT SEQDEF MANPCT,9 ;MAN HAS EIGHT PICTURES IN SEQUENCE INTDEF 0,1 ;CAN HIT MINE INTERACT 1,HITMINE ;WHERE TO GO WHEN HIT MINEROM:OFF OF.CENTER,0 ;WILL NOT LEAVE SCREEN BIDECLE 0 ;NO TIME OUT SEQDEF MINEPCT,1 ;ONLY 1 PICTURE INTDEF 0,0 ;NO INTERATION WITH ANYTHING TITLE "RUNNING MAN PICTURES" MOVGRAM: MANPCT=(*-MOVGRAM)/8 ;THE FIRST MAN PICTURE IS ; $0C ----XX-- ; $0E ----XXX- ; $00 -------- ; $0C ----XX-- ; $0C ----XX-- ; $0C ----XX-- ; $0C ----XX-- ; $0E ----XXX- ; $0C ----XX-- ; $0C ----XX-- ; $0C ----XX-- ; $3C --XXXX-- ; $28 --X-X--- ; $28 --X-X--- ; $08 ----X--- ; $0C ----XX-- ; DECLE $0C,$0E,$00,$0C,$0C,$0C,$0C,$0E ; DECLE $0C,$0C,$0C,$3C,$28,$28,$08,$0C ; DECLE $06,$07,$00,$0C,$1C,$1C,$1E,$18 ; DECLE $1C,$3E,$22,$2E,$28,$20,$20,$10 ; DECLE $06,$07,$00,$1C,$3C,$2E,$2C,$00 ; DECLE $1C,$3F,$21,$27,$24,$44,$40,$40 ; DECLE $0C,$0E,$00,$78,$58,$5F,$18,$00 ; DECLE $18,$3F,$21,$62,$42,$C0,$80,$80 ; DECLE $0C,$0E,$70,$58,$5F,$18,$18,$00 ; DECLE $18,$3F,$21,$61,$41,$C0,$80,$00 ; DECLE $0C,$0E,$00,$78,$58,$5F,$18,$00 ; DECLE $18,$3C,$24,$66,$C2,$82,$03,$00 ; DECLE $06,$07,$00,$1C,$3C,$2E,$2C,$00 ; DECLE $38,$3C,$24,$E4,$84,$84,$04,$06 ; DECLE $06,$07,$00,$0C,$1C,$1C,$1E,$18 ; DECLE $18,$18,$18,$78,$48,$48,$08,$0C DECLE $40,$58,$50,$58,$70,$78,$38,$18 DECLE $18,$18,$1C,$1C,$16,$1B,$0C,$06 DECLE $00,$00,$B0,$A0,$F0,$E0,$70,$70 DECLE $38,$38,$3C,$16,$1B,$0C,$06,$00 DECLE $00,$00,$00,$00,$00,$60,$40,$E0 DECLE $C0,$F0,$F8,$7E,$1B,$0E,$03,$00 DECLE $00,$00,$00,$00,$00,$00,$00,$00 DECLE $00,$00,$C1,$83,$C6,$BD,$FB,$7E DECLE $00,$00,$00,$00,$00,$00,$00,$00 DECLE $00,$00,$08,$1C,$FC,$7C,$D7,$37 DECLE $00,$00,$00,$00,$00,$00,$00,$00 DECLE $00,$00,$18,$FC,$7C,$EE,$27,$6D DECLE $00,$00,$00,$00,$00,$00,$00,$00 DECLE $D8,$7C,$FE,$3F,$37,$25,$25,$6D DECLE $00,$00,$00,$C0,$78,$FC,$3C,$3E DECLE $3E,$6E,$0A,$0A,$0B,$09,$09,$19 DECLE $60,$20,$60,$38,$38,$F8,$F8,$30 DECLE $30,$30,$38,$38,$2C,$2C,$24,$64 MINEPCT=(*-MOVGRAM)/8 DECLE $AA,$55,$AA,$55,$AA,$55,$AA,$55 BAKGRAM:DECLE $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ;FULL PICTURE BOARD: DECLE $11,$22,$33,$FF,$11,$DD,$11,$00