ベーマガの投稿作品は「作者本人であること」「非営利であること」「転載元を明記すること」という条件をクリアすれば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」を入力