カモーン

ベーマガの投稿作品は「作者本人であること」「非営利であること」「転載元を明記すること」という条件をクリアすればwebで公開することができます。なので、公開してみました。

「カモーン」は、古典的なパズルアクションゲームです。
対応機種はシャープのX1 turboです(CZ-8FB02)。


転載元:電波新聞社マイコンBASICマガジン」 1991年6月号
題名:X1 turbo用「カモーン」


▲タイトル画面。

▲右に見えるのがロケットです。
白いキャラがプレイヤーです。
緑色が敵のエイリアンです。
、、、わかる人はわかると思いますが、「宇宙輸送船ノストロモ」をリスペクトしています。
散乱している岩は障害物です。岩は押して動かすことができます。


▲敵を避けながら、黄色の荷物をロケットまで運んでください。
ピンクのブヨブヨが相棒の「カモーン」です。
スペースキーを押し続けるとカモーンがプレイヤーの元に寄ってきます。
カモーンを突き飛ばすと壁まで飛んでいきます(これをカモカモボンバーと呼んでいます)。
カモーンは無敵なので攻撃と防御に使えます。

キャラを呼ぶって発想は、ベーマガで読んだ「カモンピコ」の紹介記事が元になってます。


▲時間切れになった場合。ロケットが発射されました。
発射に間に合わないとミスになります。
エイリアンがプレイヤーに触れてもミスになります。
3回ミスするとゲームオーバー。

▲惑星の脱出に成功。ちゃんとプレイヤーもカモーンもロケットに乗せましょう。
全部で9面あります。
エイリアンが容赦なく追ってきたり、時間制限があったり、非常にスリリングで難しい(難しすぎるか)ゲームになってます。


▼プログラムリスト「comeon.bas」
(コードをすべてASCIIに書き直しました。メッセージを英語表示に書換えました)

10 ' ----------------------------------------------
20 ' 'COME ON' FOR X1TURBO BY TAKUYA MATSUBARA
30 ' FROM(ORIGINAL)MICOM BASIC MAGAZINE 1991/6
35 ' ----------------------------------------------
40 WIDTH 40,12:DEFINT A-Z:CONSOLE 0,12:CLICK OFF
50 KMODE 0:TEMPO 200:GOSUB"CC":CGEN 1
60 CLS 4:K=3:M=1:SC=0:GOSUB"FA"
70 COLOR 3:LOCATE 6,2:PRINT "COME O";
80 FOR I=1 TO 18:PRINT "-";:PAUSE1:NEXT
90 PRINT "N":COLOR 7
100 PLAY@"O4G3GFR5DF!:O5D3R6FEDC!"
110 B$=STRING$(6,CHR$(28))
120 PRINT B$;"ab [8][6][4][2]MOVE/PUSH"
130 PRINT B$;"   [5] GIVE UP"
140 PRINT B$;"hi   [SPACE] COME ON"
150 PRINT B$;"no ALIEN 10PTS"
160 PRINT B$;"cd CARGO"
170 PRINT:PRINT B$;B$;"HIT SPACE KEY";
180 IF STRIG(0)=0 THEN 180
190 A=CALC("0"):GOSUB"FA"
200 PLAY@"C2R2CR2DR2C!:O3D8FR6EDFR5O5!"
210 LOCATE12,8:PRINT"HIT SPACE KEY"
220 B$="STAGE"+STR$(M)+" ":GOSUB"WD"
230 S=STICK(0)
240 M=M+(S=2 AND M>1)-(S=8 AND M<9)
250 IF STRIG(0)=0 THEN 220
260 A=CALC("0"):RESTORE:FOR I=1 TO M:READ A$,V,Z:NEXT
270 LINE(35,1)-(38,9),CHR$(&H87),BF
280 LOCATE 36,0:PRINT CHR$(&HE6);CHR$(&HE7)
290 LOCATE 35,1:PRINT CHR$(&HE6);CHR$(&H87);CHR$(&H87);CHR$(&HE7)
300 GOSUB"ST":GOSUB"FA"
310 LINE(34,4)-(37,6)," ",BF
320 FOR I=1 TO 9:S=VAL("&H"+MID$(A$,I*4-3,4))
330 FOR J=15 TO 0 STEP-1:IF S>=2^J THEN S=S-2^J:LOCATE (16-J)*2,I:PRINT "ef"
340 NEXT J:NEXT I
350 LOCATE V,Z:PRINT"cd"
360 H=0:GOSUB"TA":H=1:GOSUB"TA"
370 X=36:Y=5:G=300:F=0:AT=0:A=V:B=Z-1
380 '----------------------------------------MAIN PROG
390 T=(T+2) MOD 4
400 IF T THEN G=G-1:LOCATE 32,11:PRINT USING"###";G;:IF G=0 THEN 1010
410 S=STICK(0):IF S=0 THEN 540
420 IF S=5 THEN B$="GIVE UP":GOSUB"WD":GOTO 940
430 X1=(S=4)*2-(S=6)*2:Y1=(S=8)-(S=2)
440 C=ASC(SCRN$(X+X1,Y+Y1))
450 IF C=32 THEN 520
460 IF C>102 THEN A1=X1:B1=Y1:AT=1:GOTO580
470 IF C>107 THEN 540
480 IF C=99 AND X+X1=34 THEN F=1:LOCATE 12,0:PRINT"ESCAPE FROM PLANET!":PLAY"A2EF"
490 IF SCRN$(X+X1*2,Y+Y1*2)<>" " THEN540
500 PLAY"E1:G1"
510 LOCATE X+X1*2,Y+Y1*2:PRINT SCRN$(X+X1,Y+Y1,2)
520 LOCATE X,Y:PRINT "  "
530 X=X+X1:Y=Y+Y1
540 LOCATE X,Y:PRINT CHR$(95+T,96+T)
550 '--------------------------------------COME ON
560 IF STRIG(0)=0 THEN 630
570 A1=0:B1=0:IF RND>.5 THEN A1=SGN(X-A)*2 ELSE B1=SGN(Y-B)
580 C$=SCRN$(A+A1,B+B1)
590 IF C$="n" THEN 780
600 IF C$<>" " THEN AT=0:GOTO 630
610 LOCATE A,B:PRINT "  "
620 A=A+A1:B=B+B1
630 LOCATE A,B:PRINT CHR$(T+104,T+105)
640 IF AT THEN 580
650 IF X=36 AND A=36 AND F=1 THEN 990
660 '---------------------------------------ALIEN
670 SWAP E,P:SWAP W,O:SWAP L,Q
680 IF L>0 THEN L=L-1:GOTO 770
690 IF RND>.5 THEN 760
700 E1=0:W1=0:IF RND>.5 THEN E1=SGN(X-E)*2 ELSE W1=SGN(Y-W)
710 C$=SCRN$(E+E1,w+W1)
720 IF C$="a" OR C$="_" THEN 920
730 IF C$<>" " THEN 760
740 LOCATE E,W:PRINT "  "
750 E=E+E1:W=W+W1
760 LOCATE E,W:PRINT "no"
770 GOTO 390
780 '---------------------------------------DEAD
790 H=1:SC=SC+10:IF E=A+A1 AND W=B+B1 THEN H=0
800 GOSUB"ST":GOSUB"TA":GOTO 610
810 '--------------------------------------SUB
820 LABEL"TA":PLAY"A2D:E2D"
830 I=RND*15:I=I*2+2:J=RND*9+1
840 IF SCRN$(I,J)<>" " THEN 830
850 IF H=0 THEN E=I:W=J:L=20 ELSE P=I:O=J:Q=20
860 LOCATE I,J:PRINT"lm":RETURN
870 LABEL"FA":FOR I=0 TO 5:LINE(0+I,0+I)-(34-I,10-I),"g",B:PAUSE1:NEXT
880 FOR I=5 TO1 STEP-1:LINE(1+I,0+I)-(34-I,10-I)," ",B:PAUSE1:NEXT:RETURN
890 LABEL"WD":COLOR 1:I=18-LEN(B$)/2:LINE(I-1,4)-(I+LEN(B$),6),CHR$(&H87),B
900 COLOR 7:LOCATE I,5:PRINT B$:RETURN
910 LABEL"ST":LOCATE 0,11:PRINT USING"ab=#      SCORE=#### TIME LIMIT=###";K,SC,G;:RETURN
920 '------------------------------------GAME OVER
930 B$="GYA-------!":GOSUB"WD"
940 COLOR3:FOR I=0 TO 20:T=(T+2) MOD 4
950 LOCATE X,Y:PRINT CHR$(T+95,T+96):PLAY"C1:F1":NEXT:COLOR 7
960 K=K-1:IF K>0 THEN 270
970 GOSUB "FA":B$=" G A M E O V E R ":GOSUB"WD":PLAY"C5ECECDG:C9DE"
980 PAUSE 20:GOTO 60
990 '----------------------------------CLEAR
1000 B$="LAUNCHING ROCKET!!":GOSUB"WD"
1010 CONSOLE 0,12,35,5
1020 FOR J=0 TO 69:COLOR(J MOD 7)+1:LINE(35,10)-(38,11),CHR$(240-J MOD 7),BF:NEXT
1030 FOR I=1TO24:PRINT:PAUSE 1:NEXT
1040 CONSOLE 0,12,0,40
1050 IF X<36 OR A<36 THEN B$="I MISSED A ROCKET!":GOSUB"WD":GOTO 940
1060 IF F=0 THEN B$="THERE IS NOT A CARGO":GOSUB"WD":GOTO 940
1070 FOR I=1 TOG:SC=SC+1:G=G-1:LOCATE 16,11:PRINT USING"#### TIME LIMIT=###";SC,G;:NEXT
1080 PLAY"C5DEFGABO5C9O4:C9"
1090 M=M+1:IF M<10 THEN 190
1100 CLS:FORI=0TO50:PSET(RND*300,RND*200,7):NEXT
1110 CIRCLE(140,100),20,2:PAINT(140,100),2
1120 FOR J=0 TO180:PSET(SIN(J/20)*40+140,J+100,5):NEXT
1130 FOR J=0 TO2:FOR I=0 TO 10:LINE(0,100-I)-(319,100+1),XOR,6,BF:NEXT:NEXT
1140 LOCATE 2,3:PRINT"ab I SUCCEEDED IN ESCAPE!!"
1150 LOCATE 13,9:PRINT"hi HAPPY END SCORE";SC
1160 PLAY"D9ADEFDGAGB1A9CGFDGEFDA":GOTO 60
1170 '-------------------------------------
1180 DATA "101110101110101110110011110100111100",22,7
1190 DATA "001040108A40508A01A2A1A8201080A01050",8,5
1200 DATA "11D0F1C0B30030808080000740308020F200",8,7
1210 DATA "2414000041C07FFE80017FFE20E424042004",12,6
1220 DATA "000010007DE0148015EF14B02480086A0006",6,5
1230 DATA "01003EE8A00A25C894522748A00A2EF80100",16,6
1240 DATA "00007F5440A841546BAC55042A0455FC0000",4,5
1250 DATA "FB00EC800A187524772441241724FF18F000",4,3
1260 DATA "01B020B4E0420B14081E6024912218213216",6,5
1270 LABEL"CC":'--------------------------- P C G
1280 FOR I=32 TO 250:C$=CGPAT$(&H100+I):DEFCHR$(I)=C$+C$+C$:NEXT
1290 RESTORE 1300:FOR I=95 TO111:READ C$:DEFCHR$(I)=HEXCHR$(C$):NEXT
1300 DATA "00010B39CAC50BF800011A28CAC5097800010A38CAC50BF8"
1310 DATA "0080D09C53A3D01F0000181C53A3D00F0000101C53A3D01F"
1320 DATA "010B192A45630C3C011A082A45610C3C010A182A45630C3C"
1330 DATA "80D09854A2C6303C00181854A2C6101C00101854A2C6303C"
1340 DATA "00000000000000000005161B2D160A050005060321100805"
1350 DATA "000000000000000000F8FC7E807EFCF800F8FC7E807EFCF8"
1360 DATA "003E75204E717F3F0000000040605020003E752040717E3F"
1370 DATA "00AA57AE01FFFFFE000000000000000000A8000000B4EAF4"
1380 DATA "0000000000000000BA75EAD5AF5DBA750000000000000000"
1390 DATA "0000001F77FFFF7C0000001F77FFFF7C0000001040808040"
1400 DATA "00000080C8AA5430000000F8EEFFFF3E0000000000000020"
1410 DATA "00070F1B7F7E7E3800070F1B7F7E7E380004081040404020"
1420 DATA "0080408050A8541000C0F0ECFEFE7E1C0000000000004010"
1430 DATA "000000000000100000000002400015060000000630381507"
1440 DATA "00000000000000000000000200060010000000C800067A70"
1450 DATA "80461020200424808046102321042480C0671C38380637F0"
1460 DATA "0408000000000408040800C08000040807EE200C2C70E60F"
1470 RETURN

X1エミュレータ用のフロッピーのイメージの場合の実行方法。
・X1 turbo用 HuBASIC(CZ-8FB02)を起動
・ディスク入れる
・「load "ドライブ番号:comeon.bas"」を入力
・「run」を入力