!General Information Author: Greg Knauss\\ Language: ACTION!\\ Compiler/Interpreter: ACTION!\\ Published: Antic Vol. 6 #10 (02/ 88) ---- !!!Killer Chess !!Two-player ACTION! shootout __Killer Chess brings a new frenzy of aggression to the classic game, as you mop up the chessboard without waiting for your opponent to make moves. This type-in program is written in ACTION! and requires the ACTION! language cartridge from Optimized Systems Software, as well as an 8-bit Atari computer with at least 32K memory and a disk drive.__ Unless you're a real fanatic or a tournament contender, I'll bet that you don't play much chess anymore. Let's face it, most "regular folks" find chess boring! But now imagine a revitalized, fast-ACTION! chess-where the players don't take turns. That's right. . . no turns. Killer Chess players make legal chess moves as fast as they can, deciding on instant strategies that they would have spent dull minutes pondering in a traditional game. Stodgy old chess becomes a fast-gun shootout. Welcome to Killer Chess, written in ACTION! the fast, powerful programming language from Optimized Systems Software. You and your human opponent will use an Atari 8-bit computer and a pair of joysticks to battle it out in a radical new version of a traditional game !GETTING STARTED TYPING IT IN: Insert the ACTION! cartridge into your 8-bit Atari and type in Listing 1, KILLER.ACT Type carefully; because there isn't a TYPO II for ACTION! After you have a copy of the complete program safely saved, go to the monitor by pressing [[CONTROL] [[SHIFT] [[M] and compile the program by typing [[C] [[RETURN]. When the cursor starts blinking again, type [[R] [[RETURN] and the title page should appear. MONTHLY DISK USERS: You can play Killer Chess without owning the ACTION! cartridge. Just insert your Antic Monthly Disk into your disk drive, remove all cartridges from your Atari (XL/XE owners should press the [[OPTION] key) and turn on your Atari. When the DOS menu appears, just type [[L][[RETURN], then type KILLER.EXE [[RETURN]. When the title screen is seen, press [[START] to begin a game. When the game begins, both players will be able to simultaneously move their respective cursors around the board. With joystick 0, player 1 controls the white cursor and white pieces. With joystick 1, player 2 controls the gray cursor and gray pieces. {{{ ; KILLER CHESS ; BY GREG KNAUSS ; (c)1987, ANTIC PUBLISHING CARD PM,CH BYTE I,J,K,STK,PLR,LOC,CAP,OK BYTE ARRAY X(2),Y(2),OX(2),OY(2), HOLD(2),PAU(2),SND(2),DIS(2) INT X1,Y1,DX,DY,DUM1,DUM2 PROC CURSOR() ; SHAPE FOR CURSORS [255 129 129 129 129 129 129 255] PROC CHRS() ; BOARD EDGE [ 0 0 0 0 0 0 0 0 0 0 0 0 15 15 15 15 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 240 240 240 240 15 15 15 15 15 15 15 15 240 240 240 240 240 240 240 240 15 15 15 15 0 0 0 0 255 255 255 255 0 0 0 0 240 240 240 240 0 0 0 0 ; PIECES 0 0 0 56 56 16 124 0 0 84 124 56 56 56 124 0 0 6 60 124 28 28 60 126 0 16 24 108 124 56 16 124 0 214 254 124 56 56 124 254 0 16 56 146 254 124 56 124 ; TITLE 0 247 108 112 112 108 246 3 0 62 102 96 96 102 60 0 24 0 56 24 24 24 60 0 224 96 124 102 102 102 247 0 56 24 24 24 24 24 60 0 0 0 60 102 126 96 62 0 0 0 220 102 96 96 240 0 0 0 62 96 60 6 124 0 ; "PRESS START" 0 238 170 238 140 138 0 0 0 238 136 206 130 238 0 0 1 225 129 225 33 225 1 0 255 17 123 27 219 27 255 0 255 17 85 17 83 85 255 0 240 16 176 176 176 180 240 0] PROC SETUP() GRAPHICS(18) POKE(559,0) POKE (559,46) ; COLORS SETBLOCK(706,2,66) POKE(704,14) POKE(705,8) POKE(708,10) POKE(710,4) POKE(709,142) POKE(711,15) ;DO 711 ; P/M GRAPHICS PM=(PEEK(106)-8)*256 POKE(54279,PM/256) POKE(53277,3) SETBLOCK(53258,2,3) ZERO(PM,1024) POKE(623,2) PM==+512 K=51 FOR I=32 TO 95 STEP 8 DO FOR J=0 TO 7 DO POKE(PM+I+J+256,K) POKE(PM+I+J+384,K) OD K=255-K OD ; REDEFINED CHARACTERS CH=(PEEK(106)-16)*256 MOVEBLOCK(CH,CHRS,512) POKE(756,CH/256) ; DRAW BOARD POSITION(5,1) PRINTD(6,"") FOR I=2 TO 9 DO POSITION(5,I) PRINTD(6," ") OD POSITION(5,10) PRINTD(6," ") POSITION(6,2) PRINTD(6,"+,-./-,+") POSITION(6,3) PRINTD(6,"********") POSITION(7,5) PRINTD(6,"’””•–") POSITION(7,6) PRINTD(6,"‘“•——") POSITION(6,8) PRINTD(6,"ªªªªªªªª") POSITION(6,9) PRINTD(6,"«¬®¯¬«") POSITION(7,11) PRINTD(6,"") POKE(53250,96) POKE(53251,128) POKE(559,46) ; WAIT FOR [START] I=0 DO POKE(54282,0) POKE(53273,I) I==+3 UNTIL PEEK(53279)=6 OD ; DRAW PIECES POSITION(6,2) PRINTD(6,"+* ª«") POSITION(6,3) PRINTD(6,",* ª¬") POSITION(6,4) PRINTD(6,"-* ª") POSITION(6,5) PRINTD(6,".* ª®") POSITION(6,6) PRINTD(6,"/* ª¯") POSITION(6,7) PRINTD(6,"-* ª") POSITION(6,8) PRINTD(6,",* ª¬") POSITION(6,9) PRINTD(6,"+* ª«") POSITION(7,11) PRINTD(6," ") RETURN PROC MAIN() ; GAME LOOP DO SETUP() X(0)=6 Y(0)=5 X(1)=13 Y(1)=6 HOLD(0)=0 HOLD(1)=0 PAU(0)=0 PAU(1)=0 PLR=1 ; PLAYER TURN LOOP DO ; ALTERNATE PLAYERS PLR=1-PLR ; RESET THESE FOR EACH TURN X1=0 Y1=0 POKE(77,0) IF PAU(PLR)=0 THEN SOUND(PLR,0,0,0) FI ; MOVE WHICH WAY??? STK=STICK(PLR) IF STK=14 OR STK=10 OR STK=6 THEN Y1=-1 FI IF STK=13 OR STK=9 OR STK=5 THEN Y1=1 FI IF STK=11 OR STK=10 OR STK=9 THEN X1=-1 FI IF STK=7 OR STK=6 OR STK=5 THEN X1=1 FI ; KEEP PLAYER ON BOARD LOC=LOCATE(X(PLR)+X1,Y(PLR)+Y1) IF LOC<10 THEN X1=0 Y1=0 FI ; MOVE CURSOR IF Y1<>0 THEN ZERO(PM+128*PLR+16+8*Y(PLR),8) FI X(PLR)==+X1 Y(PLR)==+Y1 POKE(53248+PLR,8*X(PLR)+48) MOVEBLOCK(PM+128*PLR+16+8*Y(PLR), CURSOR,8) ; WAIT! HE'S PLACING A PIECE! IF HOLD(PLR)>0 AND STRIG(PLR)=0 AND PAU(PLR)=0 THEN CAP=0 OK=0 DX=0 DY=0 ; SOMETHING TO CAPTURE! IF LOC<>32 THEN CAP=1 FI ; FIND DELTA VALUES DUM1=X(PLR) DUM2=OX(PLR) DX=DUM1-DUM2 DUM1=Y(PLR) DUM2=OY(PLR) DY=DUM1-DUM2 ; FLIP FOR PLAYER 2 IF PLR=1 THEN DX=-DX DY=-DY FI ; IS IT LEGAL??? ; PAWN IF HOLD(PLR)=1 THEN IF DX=1 AND DY=0 AND CAP=0 THEN OK=1 FI IF DX=2 AND DY=0 AND CAP=0 AND OX(PLR)=7+PLR*5 THEN OK=1 FI IF DX=1 AND (DY=1 OR DY=-1) AND CAP=1 THEN OK=1 FI FI ; ROOK IF HOLD(PLR)=2 THEN IF (DX<>0 AND DY=0) OR (DX=0 AND DY<>0) THEN OK=1 FI FI ; KNIGHT IF HOLD(PLR)=3 THEN IF (DX=2 AND DY=1) OR (DX=-2 AND DY=1) THEN OK=1 FI IF (DX=2 AND DY=-1) OR (DX=-2 AND DY=-1) THEN OK=1 FI IF (DX=1 AND DY=2) OR (DX=-1 AND DY=2) THEN OK=1 FI IF (DX=1 AND DY=-2) OR (DX=-1 OR DY=-2) THEN OK=1 FI FI ; BISHOP IF HOLD(PLR)=4 AND (DX=DY OR DX=-DY) THEN OK=1 FI ; QUEEN IF HOLD(PLR)=5 THEN IF DX=DY OR DX=-DY THEN OK=1 FI IF (DX<>0 AND DY=0) OR (DX=0 AND DY<>0) THEN OK=1 FI FI ; KING IF HOLD(PLR)=6 THEN IF (DX=1 AND DY=1) OR (DX=0 AND DY=1) OR (DX=-1 AND DY=1) THEN OK=1 FI IF (DX=1 AND DY=0) OR (DX=-1 AND DY=0) THEN OK=1 FI IF (DX=1 AND DY=-1) OR (DX=0 AND DY=-1) OR (DX=-1 AND DY=-1) THEN OK=1 FI FI ; CAN'T CAPTURE OWN PIECES OR ; BORDER IF LOC>128*PLR+41 AND LOC<128*PLR+127 OR LOC<10 THEN OK=0 FI ; DIDN'T MOVE IF DX=0 AND DY=0 THEN OK=1 FI ; MAKE SURE JUMPS WEREN'T MADE, ; EXCEPT BY KNIGHT IF HOLD(PLR)<>3 THEN I=OX(PLR) J=OY(PLR) X1=0 Y1=0 IF DX<0 THEN X1=-1 FI IF DX>0 THEN X1=1 FI IF DY<0 THEN Y1=-1 FI IF DY>0 THEN Y1=1 FI IF PLR=1 THEN X1=-X1 Y1=-Y1 FI IF (DX<-1 OR DX>1) OR (DY<-1 OR DY>1) THEN DO I==+X1 J==+Y1 K=LOCATE(I,J) IF K<>32 THEN OK=0 FI UNTIL (I=X(PLR)-X1 AND J=Y(PLR)-Y1) OR K<10 OD FI FI ; LEGAL MOVE! IF OK=1 THEN COLOR=32 PLOT(OX(PLR),OY(PLR)) COLOR=HOLD(PLR)+128*PLR+41 ; QUEEN ME! IF HOLD(PLR)=1 AND X(PLR)=7*(1-PLR)+6 THEN COLOR=128*PLR+46 FI ; KILL OTHER PLAYERS HOLD IF THAT'S ; WHAT WAS CAPTURED IF X(PLR)=OX(1-PLR) AND Y(PLR)=OY(1-PLR) THEN HOLD(1-PLR)=0 POSITION(11*(1-PLR)+4,2) PRINTD(6," ") FI ; WHO'D HE LAND ON?? K=LOCATE(X(PLR),Y(PLR)) ; WHOEVER IT WAS, KILL HIM PLOT(X(PLR),Y(PLR)) COLOR=32 PLOT(11*PLR+4,2) ; A KING DIED! IF K-128*(1-PLR)-41=6 THEN EXIT FI HOLD(PLR)=0 SND(PLR)=100*PLR+100 DIS(PLR)=14 FI ; ILLEGAL MOVE... IF OK=0 THEN SND(PLR)=255 DIS(PLR)=2 FI PAU(PLR)=5 FI ; PICK UP PIECE IF HOLD(PLR)=0 AND STRIG(PLR)=0 AND PAU(PLR)=0 AND LOC<>32 AND LOC>128*PLR+41 AND LOC<128*PLR+127 THEN ; Grab HOLD HOLD(PLR)=LOC-128*PLR-41 OX(PLR)=X(PLR) OY(PLR)=Y(PLR) COLOR=LOC PLOT(11*PLR+4,2) SND(PLR)=100*PLR+100 DIS(PLR)=10 PAU(PLR)=5 FI ; DELAY FOR CH=1 TO 2000 DO OD ; PAUSE FOR HUMANS IF PAU(PLR)>0 THEN PAU(PLR)==-1 SOUND(PLR,SND(PLR),DIS(PLR), PAU(PLR)*2) FI ; NEXT PLAYER OD ; VICTORY ROUTINE SNDRST() ZERO(PM,256) COLOR=32 FOR I=2 TO 9 DO FOR J=6 TO 13 DO LOC=LOCATE(J,I) IF LOC>128*(1-PLR) AND LOC<128*(1-PLR)+127 THEN PLOT(J,I) FI OD OD PLOT(4,2) PLOT(15,2) ; PAUSE CH=0 DO CH==+1 FOR I=1 TO 100 DO OD UNTIL CH=7500 OR PEEK(53279)=6 OD ; START NEW GAME OD }}}