ベーマガの投稿作品は「作者本人であること」「非営利であること」「転載元を明記すること」という条件をクリアすればwebで公開することができます。なので、公開してみました。
「ニルナ・ノーグ」は、マップや名前、敵の形状、攻撃パターンまですべて乱数で展開するという変わったRPGです。
乱数なので何度でも遊べます。
対応機種はシャープのX1です(turboではない)。
誤植のせいで誌面どおりに打ち込んでも動かないという悲劇の作品でしたが、17年ぶりにリベンジできて良かったです。
転載元:電波新聞社「マイコンBASICマガジン」 1991年5月号
題名:X1用「ランダムRPG ニルナ・ノーグ」
▲画面構成です。
左がマップです。右上の三角形が主人公です。
テンキーで移動(8で前進、4or6で方向転換)/選択。
スペースキーでキャンプ/決定です。
▲キャンプ中の画面。食事することができます。
集めるべき「7つの秘宝」が表示されています。
たとえば、「SHOES」があるとマップを長距離に移動できるようになります。
「BANGLE」があると壁を押して動かすことができるようになります。
「ARMOR」があると攻撃をはね返すことができるようになります。
残りは実際にやってみてください。
▲「引き算の館」。計算問題の早押しに正解すると賞金がもらえます。
▲武器屋です。
▲食料を買うお店です。
店によって価格の差がありますので、別の店で売れば差額で儲けることもできます。
▲「7つの秘宝」のうちの一つ「MIRROR」を入手したときの様子。
マップのマスクが外れました。
▲ラスボスです。
秘宝の「JEWEL」がないと攻撃が当たりません。
一見弱そうですが、簡単などんでんがえしがあります。
▼プログラムリスト
(コードをすべてASCIIに書き直しました。メッセージを英語表示に書換えました)
10 POKE &H01A2,&HB7 20 '+----------------------------------------------------+ 30 '| RANDOM RPG NIRUNA-NORG BY TAKUYA MATSUBARA | 35 '| FROM(ORIGINAL) MICOM BASIC MAGIZINE 1991/5 | 40 '+----------------------------------------------------+ 50 DEFINT A-Z:WIDTH 80:PALET:TEMPO500 51 C$=CHR$(&H0D):'CR 52 R$=CHR$(&H1C):'CURSOR RIGHT 53 L$=CHR$(&H1D):'CURSOR LEFT 54 U$=CHR$(&H1E):'CURSOR UP 55 D$=CHR$(&H1F):'CURSOR DOWN 56 F$=CHR$(&H87):'FILL BOX 60 N=0:FOR I=1 TO 4:READ H$(I),X(I),Y(I):NEXT 70 DATA "NORTH",0,-1,"EAST",1,0,"SOUTH",0,1,"WEST",-1,0 80 LINE(32,32)-(231,159),PSET,1,BF 90 COLOR1:LINE(34,0)-(79,24),F$,BF:LINE(6,5)-(26,18),F$,BF 100 COLOR7:CONSOLE 0,25,0,80:LOCATE 38,7:PRINT "YOU ";SPC(35) 110 LINE(48,40)-(215,151),PSET,0,BF 120 LINE(369,31)-(376,24)-(383,31)-(369,31) 130 GOSUB"C2":PRINT C$;R$;"RANDOM RPG";D$;"'NIRUNA-NORG'";C$;R$;"FOR X1 BY T.MATSUBARA";C$ 140 LINE(36,18)-(77,22),F$,B:B$="EASY,NORMAL,HARD":GOSUB "#" 150 PRINT C$;C$;"----------MISSION";C$;"SEVEN TREASURE " 160 FOR I=1 TO7:GOSUB"/":A$=MID$("BANGLESWORD MIRRORARMOR AMULETSHOES JEWEL ",I*6-5,6)+" OF "+T$:PRINT " ";A$:I$(I)=A$:NEXT 170 GOSUB"/":O$=T$:PRINT "YOUR MISSION FINDS OUT A TREASURE, AND KILL A KING ";O$;"!";C$ 180 CFLASH1:PRINT"NOW MAKING MAP(PLEASE WAIT).";:CFLASH:R=900:D=1 190 '----------------------------MAP 200 D=D-1:IF D THEN220 210 D=S*3:C=RND+S:X=INT(RND*38)*4+48:Y=INT(RND*55)*2+38:IF POINT(X,Y) THEN210 220 LINE(X,Y)-(X,Y),PSET,C 230 I=INT(RND*4)+1:IF ABS(A-I)=2 THEN230 ELSE A=I 240 X=X+X(A)*4:Y=Y+Y(A)*2 250 Z=POINT(X,Y):IF Z THEN IF Z=1 THEN210 ELSE200 260 LINE-(X,Y),PSET,C:R=R-1:IF R GOTO230 270 FOR R=0 TO 1:FOR I=1 TO 7 280 X=INT(RND*60)*2+70:Y=RND*80+60:IF POINT(X,Y) THEN280 290 PSET(X,Y,R+6):PSET(X+1,Y,I):NEXT:NEXT 300 LINE(X-4,Y-2)-(X+4,Y+2),PSET,4,B:PSET(130,136,5) 310 FD=5:ST=7:S$="UNARMED":K=10:F(0)=7 320 FOR I=1 TO7:F(I)=0:NEXTI 330 FD=FD+1:X=130:Y=135:A=1:HP=30:B=1:GOSUB"@" 340 FOR I=1 TO 15:PRINT:NEXT:GOTO410 350 LABEL "$":'----------------------MAIN 360 FOR I=1 TO2:LINE(X-4,Y-2)-(X+4,Y+2),XOR,7,B:NEXT 370 IF STRIG(N) THEN620 380 S=STICK(N):ON S-3 GOTO 560,350,580,350,520 390 GOTO"$" 400 LABEL"=":PRINT H$(A);C$:PLAY"O4C:O3D" 410 GOSUB"C1":FOR J=1 TO5:FORI=1 TO5 420 ON A GOSUB 480,490,500,510 430 COLOR C:PRINT CHR$(&HF0);CHR$(&HF0); 440 NEXT:PRINT:NEXT:GOSUB"C2":COLOR7 450 GOSUB"C3":LOCATE X/8,Y/8:PRINT L$;L$;" ";L$;L$;L$;U$;" ":GOSUB"C2":COLOR 7 460 IF RND>SGN(K)-.05 THEN830 ELSE GOTO"$" 470 '------------------------------------SUB 480 C=POINT(X+I*2-6,Y+J-3):RETURN 490 C=POINT(X+6-J*2,Y+I-3):RETURN 500 C=POINT(X+6-I*2,Y+3-J):RETURN 510 C=POINT(X+J*2-6,Y+3-I):RETURN 520 X=X+X(A)*2:Y=Y+Y(A):C=POINT(X,Y):IF C>4 THEN1280 530 IF C=0 THEN PRINT"(FOW)";:GOTO"=" 540 IF F(1) THEN710 550 X=X-X(A)*2:Y=Y-Y(A):GOTO"=" 560 PRINT"(TURN L)";:A=A-1:IF A<1 THEN A=4 570 GOTO"=" 580 PRINT"(TURN R)";:A=(A MOD 4)+1:GOTO"=" 590 LABEL"C1":CONSOLE 1,22,42,38:RETURN 600 LABEL"C2":CONSOLE 9,15,36,42:LOCATE36,23:RETURN 610 LABEL"C3":CONSOLE 0,25,0,34:RETURN 620 '----------------------------------CAMP 630 PRINT C$;"HP=";HP;" WEPON=";S$;" STR=";ST;" GOLD=";K 640 FOR I=1 TO7:COLOR F(I)*6+1:PRINT I$(I):NEXT:COLOR7 650 B$="EXIT,EAT FOOD"+STR$(FD)+",OTHER":IF F(6) THEN B$=B$+",JUMP TO "+H$(A)+"" 660 GOSUB"#":ON S GOTO400,670,680,700 670 GOSUB"@":GOTO620 680 B$="SOUND NORMAL,SOUND FAST":GOSUB"#":TEMPO S*500 690 B$="KEYBOARD,JOYSTICK":GOSUB"#":N=S-1:GOTO620 700 PLAY"D:F":X=X+X(A)*10:Y=Y+Y(A)*5:GOTO"=" 710 I=X+X(A)*2:R=Y+Y(A):IF POINT(I,R) THEN550 720 LINE(X,Y)-(X+1,Y),PSET,0:PRINT I$(1) 730 LINE(I,R)-(I+1,R),PSET,C:PLAY"D":GOTO400 740 LABEL"#":'----------------------COMMAND SELECT 750 I=0:S=1:D=0:GOTO 770 760 I=I+1:A$=MID$(B$,I,1):IF A$<>"," THEN780 770 D=D+1:A$=C$+" " 780 PRINT A$;:IF A$="" THEN COLOR5:PRINT:GOTO820 ELSE760 790 IF STRIG(N)=-1 THEN COLOR7:LOCATE36,23:PRINT:PLAY"FE":RETURN 800 I=STICK(N):IF I=0 THEN790 810 PRINT" ":S=S+(I=8)-(I=2) 815 IF S<1 THEN S=D ELSE IF S>D THEN S=1 820 LOCATE 36,22-D+S:PRINT "=>";L$;L$;:PLAY"D4":GOTO 790 830 '----------------------ENCOUNT 840 C=RND*5+1:TP=RND*HP+5:TS=RND*ST+2:GOSUB"/" 850 GOSUB"C1":COLOR C:RESTORE1680 860 FOR I=1 TO5:R=INT(RND*4) 870 FOR J=0 TO3:READ A$:IF R=J THEN LOCATE59,I:PRINTA$; 880 NEXT:NEXT 890 IF B*K<0 THEN T$="KANEGO":LOCATE 61,1:PRINT"\ \\ \" 900 LINE(472,57)-(472+TP,62),PSET,2,BF 910 LOCATE 58-LEN(T$),7:PRINT T$:GOSUB"C2" 920 PLAY"E9A2D5DG:D9CFD4":IF RND THEN1100 930 COLOR7:B$="ATTACK,CHARGE,ESCAPE,EAT FOOD"+STR$(FD) 940 GOSUB"#":ON S GOTO 980,980,950,970 950 R=RND+1:B$="RIGHT,LEFT":GOSUB"#" 960 IF S=R THEN PRINT"YOU WERE ARRESTED.";C$:GOTO1100 ELSE1060 970 GOSUB"@":GOTO1100 980 PRINT"YOU";:D=0:R=ST:GOSUB"!" 990 IF S=2 THEN PLAY"DF":IF RND THEN PRINT" FAILED";C$:GOTO1100 ELSE PRINT" X3 HIT!":Z=Z*3 1000 IF B THEN 1020 1010 IF F(7)=0 OR RND THEN COLOR C:PRINT" REJECTED!":PLAY"O7BO4":GOTO1110 1020 J=TP:D=1:GOSUB"*":TP=J 1030 IF TP>0 THEN 1100 1040 R=RND*6*TS:PRINT C$;"YOU KILLED ";T$;".";C$;"YOU GOT";R;"GOLD.":K=K+R 1050 PLAY"CD3GF4:E5DA4":IF B=0 THEN1590 1060 LINE(59,1)-(68,5)," ",BF:LINE(52,7)-(58,7)," ":LINE(472,56)-(572,64),PSET,0,BF:B=1 1070 IF HP>0 THENGOTO"$" 1080 COLOR3:PRINT"GAME OVER";C$:PAUSE20:IF F(5)=0 THEN90 1090 FOR I=0 TO 7:PALET I,7:PLAY"O"+HEX$(I)+"CDO4":NEXT:PALET:GOTO330 1100 COLOR C:PRINT T$;:D=1:R=TS:GOSUB"!" 1110 IF F(4) AND RND THEN COLOR7:PRINT" REJECTED!":PLAY"O6BO4":GOTO1000 1120 D=0:J=HP:GOSUB"*":HP=J 1130 IF C=4 THEN R=RND*K/10:PRINT C$;" ";T$;" STOLE YOUR MONEY ";R;"GOLD.":K=K-R 1140 FOR I=0 TO Z:R=RND*2+87:OUT&H1800,2:PAUSE1:OUT&H1801,R:NEXT 1150 IF HP>0 THEN 930 ELSE 1060 1160 LABEL"!":PRINT "'S ATTACK " : '-------------ENCOUNT 1170 Z=0:LINE(36,23)-(77,23)," ":LOCATE36,23 1180 PRINT F$;:Z=Z+1:IF D THEN IF RND>.99 THEN RETURN ELSE1200 1190 IF STRIG(N) THEN RETURN 1200 IF Z<R THEN 1180 ELSE 1170 1210 LABEL"*":J=J-Z:LINE(470+138*D,56)-(334+138*D+J,64),PSET,0,BF 1220 IF D THEN PRINT" ATTACK"; ELSE PRINT " DAMAGE"; 1221 PRINT Z;" POINT";C$ 1230 PLAY CHR$(67+D)+":E":RETURN 1240 LABEL"@":IF FD<1 THEN1260 1250 FD=FD-1:HP=HP+30:IF HP>80 THEN HP=80 1260 LINE(334,57)-(334+HP,62),PSET,4,BF:RETURN 1270 LABEL"Q":'------------------ETC 1280 D=POINT(X+1,Y):ON C-5 GOTO 1310,1360 1290 PRINT"GATE OF RESET":B$="BACK,RESET GAME":GOSUB"#" 1300 ON S GOTO550,90 1310 F(D)=1:F(0)=F(0)-1:PRINT C$;C$;R$;"YOU FIND TRESURE ";I$(D);".";C$;C$;C$; 1320 COLOR D:LINE(36,18)-(74,22),F$,B:COLOR7:PLAY"CFDEGB:CEE" 1330 IF D=3 THEN GOSUB"C3":CLS:GOSUB"C2" 1340 IF D=2 THEN S$=I$(2):ST=39 1350 LINE(X,Y)-(X+1,Y),PSET,0:GOTO400 1360 ON D-3 GOTO 1370,1420,1470,1560 1370 Z=D:R=Z*7 1380 PRINT"#####FOOD SHOP NO.";Z;"####";C$;"PRICE";R;"[GOLD/FOOD]";C$;"YOUR GOLD=";K;" FOOD=";FD 1390 B$="EXIT,BUY,SALE":GOSUB"#":ON S GOTO550 1400 FD=FD-S*2+5:IF FD<0 THEN FD=0:R=0:BEEP 1410 K=K+R*(S*2-5):GOTO 1380 1420 PRINT "*****WEPON SHOP*****";C$;"YOUR GOLD=";K 1430 B$="EXIT,CUDGEL 80,SPEAR 120,SWORD 160,SCYTHE 200,HAMMAR 240,NSWORD 280":GOSUB"#" 1440 ON S GOTO 550:R$=SCRN$(38,S+14,6) 1450 R=S*40:B$="EXIT,BUY":GOSUB"#":ON S GOTO1420 1460 K=K-R:ST=R/8:S$=R$:PRINT"THANK YOU.":GOTO550 1470 PRINT"WELCOME TO HOUSE OF SUBTRACTION.":PAUSE30:Z=100:J=5 1480 PRINT"A PRIZE=";J;"GOLD.";C$;"TIME LIMIT=";Z; "TICK";C$ :PAUSE30 1490 R=RND*8+1:I=RND*J*5+9 1500 PRINT I;"-";I-R;"=??";C$ 1510 S=STICK(0):IF S THEN 1530 1520 Z=Z-1:PRINT "TICK ";:PLAY"D:A":IF Z THEN 1510 1530 PRINT:IF S=R THEN PRINT"THE RIGHT ANSWER(";R;")":K=K+J:J=J*2:PLAY"BABA":GOTO1480 1540 PRINT"MISTAKE!!!":PLAY"ACDDF":GOTO550 1550 '---------------------BOSS 1560 T$=O$:PRINT"WELCOME! MY NAME IS KING ";O$;"!";C$; 1570 PLAY"CABABEDEDF2G9F9F4":PAUSE30 1580 B=0:TP=20:TS=13:C=6:GOTO850 1590 PLAY"CGBDGC:ABFBGB":IF T$<>"CORE!" THEN TP=110:TS=20:C=2:T$="CORE!":GOTO 850 1600 GOSUB"C1":FOR I=1 TO200:LOCATE RND*9+59,RND*4+1 1610 PRINT CHR$(233+RND*5):PALET 0,RND*6:NEXT:PALET 1620 GOSUB"C2":PRINT C$;"HAPPY ENDING!" 1630 T=(ST+HP+F(0)*10+K+FD)/20:PRINT"TOTAL SCORE";T;"POINT.";C$;"HIT TRIGGER"; 1640 A$=CHR$(65+RND*6):PLAY "V1504"+A$+":V13R604"+A$ 1650 IF STRIG(N) THEN 90 ELSE 1640 1660 LABEL"/" :'----------------NAME 1670 T$="":FOR J=0 TORND*3+1:T$=T$+CHR$(RND*43+177):NEXT:RETURN 1680 DATA " () "," O O "," /A /A "," " 1690 DATA " I-%%%%-I "," @@@@ ","+O**##**O+"," <##> " 1700 DATA " %%%% "," @@@@@@@@ "," TTUUTT "," #### " 1710 DATA " I I ","@@@@@@@@@@"," H H "," ++++ " 1720 DATA " -+ +- "," @@@@ "," # # "," "
エミュレータ用のテープイメージの場合の実行方法です。
・X1用 HuBASIC(CZ-8CB01)を起動。
・テープをセットする。
・「RUN ""」を入力。