10000 !========================================= 10010 ! PROJECTγ PRESENTS 10020 ! "Beyond Story" (Trial) 10030 !========================================= 10040 !A=0 10050 !VARSAVE "PGBS00T/PGBS00T",A 10060 CALL PAD_SETTING 10070 LABEL START 10080 FKEY "RENUMBER AT 10000",6 10090 FKEY "TEXTMODE 2",12 10100 INIT ALL ! バッファ初期化 10110 RANDOMIZE ! 乱数初期化 10120 CALL LOGO 10130 CALL INIT_SYSTEM ! システム初期化 10140 CALL CLPRINT(7,15,13,"presents",1) 10150 CALL INIT_BUFFER ! バッファ類初期化 10160 CALL INIT_ITEM ! アイテム類テーブル初期化 10170 CALL INIT_MAGIC ! 魔法テーブル初期化 10180 CALL INIT_MYCHARA ! マイキャラ初期化 10190 CALL INIT_FDCHARA ! フィールドキャラ初期化 10200 TEXTMODE 2 ! TEXTMODE=2 (X,Y)=(0,0)-(50,22) 10210 CALL TITLE ! オープニングタイトル 10220 PP(253,1)=0 10230 PP(254,1)=TIME 10240 !========================================= 10250 ! メインループ(フィールド画面) 10260 !----------------------------------------- 10270 DO 10280 CALL EVENT(EVENT) 10290 IF EVFLAG>0 THEN EXIT DO 10300 DO 10310 !LOCATE 0,0 10320 !PRINT " X:";X_;"Y:";Y_;"Z:";Z_; 10330 !PRINT " H:";XF;"V:";YF;" "; 10340 R=0 10350 IF PAD(1,1)>PADX(1,1,5) THEN 10360 CALL S1(R,X_,Y_,Z_) 10370 IF R=1 THEN 10380 SPOT=MAX(12,SPOT-.2) 10390 CALL SPOT(SPOT) 10400 CALL EC(EVENT,X_,Y_,Z_) 10410 END IF 10420 IF EVENT<>0 THEN EXIT DO 10430 END IF 10440 IF PAD(1,2)>PADX(1,2,5) THEN 10450 CALL S2(R,X_,Y_,Z_) 10460 IF R=2 THEN 10470 SPOT=MAX(12,SPOT-.2) 10480 CALL SPOT(SPOT) 10490 CALL EC(EVENT,X_,Y_,Z_) 10500 END IF 10510 IF EVENT<>0 THEN EXIT DO 10520 END IF 10530 IF PAD(1,3)>PADX(1,3,5) THEN 10540 CALL S3(R,X_,Y_,Z_) 10550 IF R=3 THEN 10560 SPOT=MAX(12,SPOT-.2) 10570 CALL SPOT(SPOT) 10580 CALL EC(EVENT,X_,Y_,Z_) 10590 END IF 10600 IF EVENT<>0 THEN EXIT DO 10610 END IF 10620 IF PAD(1,4)>PADX(1,4,5) THEN 10630 CALL S4(R,X_,Y_,Z_) 10640 IF R=4 THEN 10650 SPOT=MAX(12,SPOT-.2) 10660 CALL SPOT(SPOT) 10670 CALL EC(EVENT,X_,Y_,Z_) 10680 END IF 10690 IF EVENT<>0 THEN EXIT DO 10700 END IF 10710 IF R=0 THEN 10720 CALL TM 10730 CALL PADX(1) 10740 IF PADX(1,5,2)=1 THEN 10750 CALL CMDDISP 10760 ELSEIF PADX(1,6,2)=1 THEN 10770 CALL SEARCH(X_,Y_,Z_) 10780 END IF 10790 CALL CD(MI,0,0) 10800 R=RND 10810 FSYNC 1 10820 IF PADX(1,11,2)>0 THEN 10830 VOL=MAX(0,VOL-.005) 10840 VOLUME 255*VOL 10850 ELSEIF PADX(1,12,2)>0 THEN 10860 VOL=MIN(1,VOL+.005) 10870 VOLUME 255*VOL 10880 END IF 10890 ! IF PP(256,1)=0 AND PADX(1,19,2)=1 AND PADX(1,9,2)>0 AND PADX(1,10,2)>0 THEN 10900 IF PADX(1,9,2)=1 THEN 10910 SPOT=128 10920 CALL SPOT(SPOT) 10930 END IF 10940 IF PADX(1,19,2)=1 AND PADX(1,9,2)>0 AND PADX(1,10,2)>0 THEN 10950 EVFLAG=1 10960 EXIT DO 10970 END IF 10980 IF PADX(1,20,2)=1 THEN 10990 CALL CLPRINT(7,23,13,"PAUSE",0) 11000 DO 11010 CALL PADX(1) 11020 LOOP UNTIL PADX(1,20,2)=0 11030 DO 11040 CALL PADX(1) 11050 LOOP UNTIL PADX(1,20,2)=1 11060 CLEAR 11070 PP(254,1)=TIME 11080 END IF 11090 END IF 11100 LOOP 11110 LOOP 11120 CALL ENDING 11130 GOTO *START 11140 !========================================= 11150 ! フィールド移動(スプライト移動) 11160 !----------------------------------------- 11170 SUB FM(X,Y,V,W) 11180 K=MOD(X+Y*XT,TT)+1 11190 FSYNC 1 11200 FOR J=YS+W TO YE+W STEP 16 11210 FOR I=XS+V TO XE+V STEP 32 11220 SPRPOS K,I,J,B_(K) 11230 K=K+1 11240 IF K>TT THEN K=1 11250 NEXT I 11260 NEXT J 11270 CALL CD(MI,0,0) 11280 END SUB 11290 !========================================= 11300 ! 右スクロール処理 11310 !----------------------------------------- 11320 SUB S1(R,X,Y,Z) 11330 MV(MI)=3 11340 IF X=0 AND I=0 AND JTT THEN K=K-TT 11570 NEXT J 11580 END IF 11590 CALL FM(X,Y,M,0) 11600 NEXT M 11610 END IF 11620 END SUB 11630 !========================================= 11640 ! 左スクロール処理 11650 !----------------------------------------- 11660 SUB S2(R,X,Y,Z) 11670 MV(MI)=1 11680 IF X>0 AND MOD(H_(((X-1)*YF+Y+ZO)*2),8192)<4096 THEN 11690 R=2 11700 X=X-1 11710 FOR M=-30 TO 0 STEP 2 11720 N=-M 11730 IF N=0 AND I=0 AND JTT THEN K=K-TT 11910 NEXT J 11920 END IF 11930 CALL FM(X,Y,M,0) 11940 NEXT M 11950 END IF 11960 END SUB 11970 !========================================= 11980 ! 上スクロール処理 11990 !----------------------------------------- 12000 SUB S3(R,X,Y,Z) 12010 MV(MI)=2 12020 IF Y>0 AND MOD(H_((X*YF+Y-1+ZO)*2),8192)<4096 THEN 12030 R=3 12040 Y=Y-1 12050 FOR M=-15 TO 0 STEP 1 12060 N=-M-M 12070 IF N=0 AND I=0 AND JTT THEN K=K-TT 12250 NEXT I 12260 END IF 12270 CALL FM(X,Y,0,M) 12280 NEXT M 12290 END IF 12300 END SUB 12310 !========================================= 12320 ! 下スクロール処理 12330 !----------------------------------------- 12340 SUB S4(R,X,Y,Z) 12350 MV(MI)=0 12360 IF Y=0 AND I=0 AND JTT THEN K=K-TT 12590 NEXT I 12600 END IF 12610 CALL FM(X,Y,0,M) 12620 NEXT M 12630 END IF 12640 END SUB 12650 !========================================= 12660 ! マイキャラクターの表示 12670 !----------------------------------------- 12680 SUB CD(I,X,Y) 12690 L=I+350 12700 K=INT(AF/8) 12710 E=ME(I,MV(I),K) 12720 F=MF(I,MV(I),K) 12730 SPRTEX L,MG(I),E,F,E+32,F+32 12740 SPRPAL L,MP(I),MQ(I),MR(I) 12750 SPRPOS L,X+304,Y+104,2 12760 SPRDISP L 12770 AF=AF+1 12780 IF AF>31 THEN AF=0 12790 END SUB 12800 !========================================= 12810 ! フィールドキャラクター表示 12820 !----------------------------------------- 12830 SUB FD(I,V,W) 12840 L=I+360 12850 K=INT(AF/8) 12860 E=CE(I,CV(I),K) 12870 F=CF(I,CV(I),K) 12880 SPRTEX L,CG(I),E,F,E+32,F+32 12890 SPRPAL L,CP(I),CQ(I),CR(I) 12900 C=(CX(I)-X_)*32+V+304 12910 D=(CY(I)-Y_)*16+W+104 12920 IF C>-32 AND C<672 AND D>-16 AND D<240 THEN 12930 SPRPOS L,C,D,1 12940 SPRDISP L 12950 ELSE 12960 SPROFF L 12970 END IF 12980 END SUB 12990 !========================================= 13000 ! イベント発生チェック 13010 !----------------------------------------- 13020 SUB EC(R,X,Y,Z) 13030 R=0 13040 H=(X*YF+Y+ZO)*2 13050 L=INT(H_(H)/262144) 13060 M=MOD(L,8) ! 移動INDEX 13070 L=INT(L/8) 13080 A=MOD(L,2) ! 自発イベントフラグ 13090 L=H_(H+1) 13100 E=MOD(L,64) ! 敵出現率 13110 L=INT(L/16384) 13120 F=MOD(L,4) ! 床INDEX 13130 D=INT(L/4) ! 床ダメージ量 13140 IF F>0 THEN 13150 SELECT CASE F 13160 CASE 1 ! HP絶対値ダメージ 13170 TILECOL 800,255,0,0,96 13180 FOR B=1 TO MN 13190 PP(11,B)=MAX(0,PP(11,B)-D) 13200 NEXT B 13210 FSYNC 1 13220 TILECOL 800,0,0,0,0 13230 CASE 2 ! HP比率ダメージ 13240 TILECOL 800,255,0,0,96 13250 FOR B=1 TO MN 13260 D=INT(PP(12,B)*D/100+.99) 13270 PP(11,B)=MAX(0,PP(11,B)-D) 13280 NEXT B 13290 FSYNC 1 13300 TILECOL 800,0,0,0,0 13310 CASE 3 ! HP&MP全回復 13320 TILECOL 800,255,255,255,96 13330 FOR B=1 TO MN 13340 PP(11,B)=PP(12,B) 13350 PP(13,B)=PP(14,B) 13360 NEXT B 13370 FSYNC 1 13380 TILECOL 800,0,0,0,0 13390 END SELECT 13400 D=0 13410 FOR B=1 TO MN 13420 IF PP(11,B)>0 THEN D=1 13430 NEXT B 13440 IF D=0 THEN 13450 R=10001 ! パーティ全滅 13460 ENCR=-2 13470 EXIT SUB 13480 END IF 13490 END IF 13500 IF M>0 AND M<>OLDM_ THEN 13510 R=M+1000 13520 ENCR=MIN(1,ENCR+1) 13530 OLDM_=M 13540 EXIT SUB 13550 ELSEIF A>0 THEN 13560 R=-1 13570 ENCR=MIN(1,ENCR+1) 13580 OLDM_=M 13590 EXIT SUB 13600 END IF 13610 !IF PP(256,1)>0 OR PAD(1,10)0 AND RND*630 THEN D=1 14240 NEXT I 14250 IF D=0 THEN ! 戦闘でパーティ全滅 14260 CALL SCENE(998) 14270 ELSE 14280 BGMPLAY 3 14290 CALL INIT_MYCHARA 14300 CALL INIT_FIELD(X_,Y_,Z_) 14310 END IF 14320 EVENT=0 14330 CASE 10001 ! フィールドでパーティー全滅 14340 BGMSTOP 14350 CALL FADE_OUT(1) 14360 CALL SCENE(998) 14370 EVENT=0 14380 CASE ELSE 14390 EVENT=0 14400 EXIT DO 14410 END SELECT 14420 CALL TM 14430 LOOP UNTIL EVENT=0 14440 END SUB 14450 !========================================= 14460 ! 全システムの初期化 14470 !----------------------------------------- 14480 SUB INIT_SYSTEM 14490 XR=10 ! DEFINE SCREEN X-SIZE FOR SCROLL 14500 YR=7 ! DEFINE SCREEN Y-SIZE FOR SCROLL 14510 XT=XR*2+1 ! SCREEN X-SIZE FOR SCROLL 14520 YT=YR*2+1 ! SCREEN Y-SIZE FOR SCROLL 14530 TT=XT*YT ! SCREEN AREA FOR SCROLL 14540 XS=320-16-32*XR ! SCREEN X1-POS FOR SCROLL 14550 YS=112- 8-16*YR ! SCREEN Y1-POS FOR SCROLL 14560 XE=320-16+32*XR ! SCREEN X2-POS FOR SCROLL 14570 YE=112- 8+16*YR ! SCREEN Y2-POS FOR SCROLL 14580 X_=15 ! INITIAL X-POS OF MY CHARA ON MAP 14590 Y_=15 ! INITIAL Y-POS OF MY CHARA ON MAP 14600 Z_= 0 ! INITIAL Z-POS OF MY CHARA ON MAP 14610 XF=99 ! MAX X_ (DUMMY VALUE) 14620 YF=99 ! MAX Y_ (DUMMY VALUE) 14630 ZF=99 ! MAX Z_ (DUMMY VALUE) 14640 ZO=99 ! Σ{XSIZE(Z)*YSIZE(Z)}(DUMMY VALUE) 14650 SPOT=12 ! SPOT-R 14660 MN=1 ! NUMBER OF MY PARTY MEMBER 14670 IF SYSINI=0 THEN 14680 VOL=1 ! SOUND ON 14690 OPTION BASE 0 14700 DMAX=210000 14710 AG=24 ! SPOT PARTS NUMBER 14720 DIM H_(DMAX-1) ! MAP-CHIP ID 14730 DIM B_(TT) ! Z-POS OF FIELD SPRITE 14740 DIM E_(127) ! TEX-X-POS OF MAP-CHIP 14750 DIM F_(127) ! TEX-Y-POS OF MAP-CHIP 14760 DIM G_(127) ! TEX-PAGE OF MAP-CHIP 14770 DIM XF_(255) ! MAP SHEET X-SIZE 14780 DIM YF_(255) ! MAP SHEET Y-SIZE 14790 DIM ZO_(255) ! MAP SHEET Z-OFFSET 14800 DIM S_(AG) ! SPOT X-POS 14810 DIM T_(AG) ! SPOT Y-POS 14820 DIM SX(AG) ! SPOT X-POS * R 14830 DIM SY(AG) ! SPOT Y-POS * R 14840 ! 14850 DIM ME(MN,4,4) ! TEX-X-POS OF MY CHARA 14860 DIM MF(MN,4,4) ! TEX-Y-POS OF MY CHARA 14870 DIM MG(MN) ! TEX-PAGE OF MY CHARA 14880 DIM MP(MN) ! PAL-PAGE OF MY CHARA 14890 DIM MQ(MN) ! PAL-OFFSET OF MY CHARA 14900 DIM MR(MN) ! PAL-ALPHA OF MY CHARA 14910 DIM MV(MN) ! DIRECTION OF MY CHARA 14920 DIM PN$(2,MN) ! MY CHARA NAME & Etc. 14930 DIM PP(256,MN) ! MY CHARA PARAMETERS 14940 ! 14950 DIM CE(16,4,4) ! TEX-X-POS OF FIELD CHARA 14960 DIM CF(16,4,4) ! TEX-Y-POS OF FIELD CHARA 14970 DIM CG(16) ! TEX-PAGE OF FIELD CHARA 14980 DIM CP(16) ! PAL-PAGE OF FIELD CHARA 14990 DIM CQ(16) ! PAL-OFFSET OF FIELD CHARA 15000 DIM CR(16) ! PAL-ALPHA OF FIELD CHARA 15010 DIM CS(16) ! EVENT INFO. SWAP BUFFER 15020 DIM CV(16) ! DIRECTION OF FIELD CHARA 15030 DIM CX(16) ! X-POS OF FIELD CHARA 15040 DIM CY(16) ! Y-POS OF FIELD CHARA 15050 ! 15060 DIM ITBL$(100) ! ITEM SCRIPT DATA TABLE 15070 DIM MTBL$(100) ! MAGIC SCRIPT DATA TABLE 15080 DIM ETBL$(100) ! ENEMY SCRIPT DATA TABLE 15090 DIM TTBL$(9,1) ! TOWN MENU DATA TABLE 15100 ! 15110 DIM BN(23) ! BINARY 2^N 15120 DIM BDB(15) ! BINARY DATA BUFFER 15130 DIM TBLP(11) ! TABLE POINTER (+EOF) 15140 DIM TBLN(10) ! TABLE NUMBER 15150 ! 15160 DIM LDB(790) ! LAYOUT DATA BUFFER(=41+15*N) 15170 DIM EVTBL$(15,1) ! TABLE BUFFER FOR EVENT 15180 DIM EVSTACK(15) ! STACK FOR EVENT 15190 ! 15200 DIM WX(9),WY(9) ! WINDOW POSITON 15210 DIM WV(9),WW(9) ! WINDOW SIZE 15220 DIM WCX(9),WCY(9) ! WINDOW CURSOL POSITION 15230 DIM WTC(9) ! WINDOW TEXT COLOR 15240 END IF 15250 ! 15260 FOR I=0 TO 127 15270 E_(I)=MOD(I,4)*32+384 15280 F_(I)=INT(MOD(I,32)/4)*32 15290 G_(I)=INT(I/32)+9 15300 NEXT I 15310 FOR I=0 TO 23 15320 BN(I)=2^I 15330 NEXT I 15340 FOR I=0 TO 255 15350 FOR J=0 TO MN 15360 PP(I,J)=0 15370 NEXT J 15380 NEXT I 15390 EVSTACKP=0 ! STACK PTR FOR ABOVE 15400 MI=1 ! HERO ID IN PARTY 15410 AF=0 ! CHARACTOR ACTION FRAME 15420 WDR=0 ! WINDOW COLOR R 15430 WDG=0 ! WINDOW COLOR G 15440 WDB=32 ! WINDOW COLOR B 15450 WDA=96 ! WINDOW ALPHA 15460 BLINKT=60 ! CURSOL BLINK PERIOD 15470 SYSINI=1 ! システム初期化済フラグ 15480 EVFLAG=0 ! EVENT FLAG 15490 FOR I=0 TO AG ! SPOT-POS INIT 15500 S_(I)=COS(RAD(I*360/AG))*2 15510 T_(I)=SIN(RAD(I*360/AG)) 15520 NEXT I 15530 END SUB 15540 !========================================= 15550 ! ロゴ表示 15560 !----------------------------------------- 15570 SUB LOGO 15580 INIT 15590 BGCOL 20,80,120 15600 EFFECT 110,-8,-4,648,228,0 15610 FOR J=1 TO 200 STEP 4 15620 FOR I=0 TO 10 15630 LINECOL I+1,200,255,255,128 15640 LINEPOS I+1,0,111+I*100/J,639,111+I*200/J,1 15650 LINEDISP I+1 15660 LINECOL I+11,200,255,255,128 15670 LINEPOS I+11,0,111-I*200/J,639,111-I*100/J,1 15680 LINEDISP I+11 15690 NEXT I 15700 FSYNC 1 15710 NEXT J 15720 INIT 15730 EFFECT 110,-8,-4,648,228,0 15740 BGCOL 255,255,255 15750 FSYNC 2 15760 BGCOL 0,0,0 15770 LOCATE 15,11 15780 PRINT "Projectγ" 15790 FSYNC 20 15800 EFFECT 0,0,0,0,0,0 15810 END SUB 15820 !========================================= 15830 ! グラフィックス&サウンドバッファの初期化 15840 !----------------------------------------- 15850 SUB INIT_BUFFER 15860 TEXCOPY 7,1 15870 TEXCOPY 8,2 15880 BGMLOAD "PGBS01T/LUNA4_3",1 15890 BGMLOAD "PGBS01T/ZEUS1",2 15900 BGMLOAD "PGBS01T/LUNA3_2",3 15910 SELOAD "PGBS01T/PGBS01T" 15920 VARLOAD "PGBS00T/PGBS00T",A 15930 PP(256,1)=A 15940 END SUB 15950 !========================================= 15960 ! マイキャラクター表示データの初期化 15970 !----------------------------------------- 15980 SUB INIT_MYCHARA 15990 LABEL INIT_MYCHARA 16000 RESTORE *INIT_MYCHARA 16010 FOR I=1 TO MN 16020 READ A,B,MG(I),MP(I),MQ(I),MR(I) 16030 FOR J=0 TO 3 16040 FOR K=0 TO 3 16050 ME(I,J,K)=A+J*96+(K=1)*32+(K=3)*64 16060 MF(I,J,K)=B 16070 NEXT K 16080 NEXT J 16090 NEXT I 16100 END SUB 16110 DATA 0, 0,9,9,1,1 16120 DATA 0,32,9,9,1,1 16130 DATA 0,64,9,9,1,1 16140 DATA 0,96,9,9,1,1 16150 !========================================= 16160 ! フィールドキャラクター表示データの初期化 16170 !----------------------------------------- 16180 SUB INIT_FDCHARA 16190 LABEL INIT_FDCHARA 16200 RESTORE *INIT_FDCHARA 16210 FOR I=1 TO 16 16220 CG(I)=9+INT((I-1)/8) 16230 CP(I)=9 16240 CQ(I)=1 16250 CR(I)=1 16260 FOR J=0 TO 3 16270 FOR K=0 TO 3 16280 CE(I,J,K)=J*96+(K=1)*32+(K=3)*64 16290 CF(I,J,K)=MOD(I-1,8)*32 16300 NEXT K 16310 NEXT J 16320 NEXT I 16330 END SUB 16340 !========================================= 16350 ! フィールド(マップ)表示の初期化 16360 !----------------------------------------- 16370 SUB INIT_FIELD(X,Y,Z) 16380 IF Z=1 OR Z=2 THEN 16390 CALL SCREEN_MASK(3) 16400 ELSE 16410 CALL SCREEN_MASK(1) 16420 END IF 16430 XF=XF_(Z) 16440 YF=YF_(Z) 16450 ZO=ZO_(Z) 16460 UF=H_(BOD+Z*3+3) 16470 X=MIN(X,XF-1) 16480 Y=MIN(Y,YF-1) 16490 K=MOD(X+Y*XT,TT) 16500 FOR J=Y-YR TO Y+YR 16510 FOR I=X-XR TO X+XR 16520 IF I>=0 AND I=0 AND JPA_D THEN 17720 PA_D=MAX(0,PADX(PA_J,PA_I,3)) 17730 IF PA_D=AUTO_S THEN PA_C=0 17740 IF PA_D=AUTO_E THEN PA_D=AUTO_S ELSE PA_D=PA_D+1 17750 PADX(PA_J,PA_I,3)=PA_D 17760 IF PA_C>0 THEN PADX(PA_J,PA_I,2)=2 ELSE PADX(PA_J,PA_I,2)=1 17770 END IF 17780 PA_D=PADX(PA_J,PA_I,4) 17790 IF PA_BPADX(1,8,5) THEN 18480 IF PAD(1,8)>PADX(1,8,5) THEN 18490 PP(11,MI),PP(12,MI),PP(13,MI),PP(14,MI)=999 18500 PP(61,MI),PP(62,MI),PP(63,MI),PP(64,MI),PP(65,MI),PP(66,MI)=255 18510 END IF 18520 CALL EQUIP_ALIGN(MI) 18530 FOR I=1 TO 24 18540 PP(I+80,MI)=I 18550 NEXT I 18560 PP(250,1),PP(251,1)=0 ! WON,LOST NUM 18570 EVENT=999 ! 初期スタートイベント 18580 IF PAD(1,12)>PADX(1,12,5) THEN EVENT=996 ! OPENING SKIP FOR DEBUG 18590 END SUB 18600 !========================================= 18610 ! テキスト文字テーブル作成 PAGE:P 18620 !----------------------------------------- 18630 SUB TXT_TBL(P) 18640 SELECT CASE P 18650 CASE 0 ! ひらがな,カタカナ 18660 CALL WOFF(2,0,0) 18670 !CALL WD(2,9,5,32,15) 18680 CALL TXT_TBL_SUB(1,33439,33521,1) 18690 CALL TXT_TBL_SUB(113,33600,33662,1) 18700 CALL TXT_TBL_SUB(176,33664,33686,1) 18710 CASE 1 ! 英数字 18720 CALL WOFF(2,0,0) 18730 !CALL WD(2,9,5,32,15) 18740 CALL TXT_TBL_SUB(1,33359,33368,1) 18750 CALL TXT_TBL_SUB(17,33376,33401,1) 18760 CALL TXT_TBL_SUB(49,33409,33434,1) 18770 CALL TXT_TBL_SUB(81,33695,33718,1) 18780 CALL TXT_TBL_SUB(113,33727,33750,1) 18790 CALL TXT_TBL_SUB(145,33856,33888,1) 18800 CALL TXT_TBL_SUB(193,33904,33918,1) 18810 CALL TXT_TBL_SUB(208,33920,33937,1) 18820 CASE 2 ! 記号 18830 CALL WOFF(2,0,0) 18840 !CALL WD(2,9,5,32,15) 18850 CALL TXT_TBL_SUB(0,33088,33196,1) 18860 J=129 18870 CALL TXT_TBL_SUB(J,33208,33215,1) 18880 CALL TXT_TBL_SUB(J,33224,33230,1) 18890 CALL TXT_TBL_SUB(J,33242,33256,1) 18900 CALL TXT_TBL_SUB(J,33264,33271,1) 18910 CALL TXT_TBL_SUB(J,33276,33276,1) 18920 CALL TXT_TBL_SUB(192,33951,33982,1) 18930 END SELECT 18940 END SUB 18950 !========================================= 18960 ! テキスト文字テーブル作成サブ 18970 !----------------------------------------- 18980 SUB TXT_TBL_SUB(J,A,B,C) 18990 FOR I=A TO B STEP C 19000 CALL WP(2,7,MOD(J,16)*2,INT(J/16),CHR$(INT(I/256))+CHR$(MOD(I,256)),0,0) 19010 J=J+1 19020 NEXT I 19030 END SUB 19040 !========================================= 19050 ! 進行データのロード 19060 !----------------------------------------- 19070 SUB LOAD_DATA 19080 CALL MAKE_CHARA 19090 EVENT=996 ! 本来は途中スタートイベント 19100 END SUB 19110 !========================================= 19120 ! 進行データのセーブ 19130 !----------------------------------------- 19140 SUB SAVE_DATA 19150 END SUB 19160 !========================================= 19170 ! マップデータのロード 19180 !----------------------------------------- 19190 SUB LOAD_MAP(N$) 19200 VARLOAD N$,H_ 19210 FOR EOC=0 TO DMAX-1 STEP 2 19220 IF H_(EOC)=-1 THEN EXIT FOR 19230 NEXT EOC 19240 BOD=EOC+1 19250 TBLP(0)=BOD 19260 TBLN(0)=H_(BOD) 19270 XF_(0)=H_(1+BOD) 19280 YF_(0)=H_(2+BOD) 19290 ZO_(0)=0 19300 FOR GF_I=1 TO TBLN(0)-1 19310 XF_(GF_I)=H_(GF_I*3+1+BOD) 19320 YF_(GF_I)=H_(GF_I*3+2+BOD) 19330 ZO_(GF_I)=ZO_(GF_I-1)+XF_(GF_I-1)*YF_(GF_I-1) 19340 NEXT GF_I 19350 EOF=BOD+1+TBLN(0)*3 19360 FOR GF_I=1 TO 10 19370 TBLP(GF_I)=EOF 19380 TBLN(GF_I)=H_(EOF) 19390 EOF=EOF+2+TBLN(GF_I)*2 19400 !PRINT BOD,GF_I,TBLP(GF_I),TBLN(GF_I) 19410 NEXT GF_I 19420 TBLP(11)=EOF 19430 H_(EOF)=-2 ! EOF 19440 END SUB 19450 !========================================== 19460 ! SEARCH TABLE INFORMATION 19470 !------------------------------------------ 19480 SUB SRCHTBL(R,M,X,Y,Z) 19490 ST_A=X+Y*256+Z*65536 19500 R=-1 19510 FOR ST_I=TBLP(M)+2 TO TBLP(M+1)-1 STEP 2 19520 IF H_(ST_I)=ST_A THEN 19530 R=H_(ST_I+1) 19540 EXIT FOR 19550 END IF 19560 NEXT ST_I 19570 END SUB 19580 !========================================= 19590 ! タイマー(プレイ時間の計算) 19600 !----------------------------------------- 19610 SUB TM 19620 TM_A=TIME 19630 TM_B=TM_A-PP(254,1) 19640 PP(253,1)=PP(253,1)+TM_B+86400*(TM_B<0) 19650 PP(254,1)=TM_A 19660 END SUB 19670 !========================================= 19680 ! タイマー文字列の作成 19690 !----------------------------------------- 19700 SUB TMSTR(T$) 19710 !CALL TM 19720 S=MOD(PP(253,1),60) 19730 A=INT(PP(253,1)/60) 19740 M=MOD(A,60) 19750 H=INT(A/60) 19760 IF S<10 THEN S$=":0"+STR$(S) ELSE S$=":"+STR$(S) 19770 IF M<10 THEN M$=":0"+STR$(M) ELSE M$=":"+STR$(M) 19780 IF H<10 THEN H$=" "+STR$(H) ELSE H$=STR$(H) 19790 T$=H$+M$+S$ 19800 END SUB 19810 !========================================= 19820 ! スキップ機能付きウェイト処理 19830 !----------------------------------------- 19840 SUB FSYNCX(W) 19850 FOR FI=1 TO W 19860 IF PAD(1,7)>PADX(1,7,5) THEN EXIT FOR 19870 FSYNC 1 19880 NEXT FI 19890 END SUB 19900 !========================================= 19910 ! 画面表示の全消去 19920 !----------------------------------------- 19930 SUB ALL_CLEAR 19940 CLEAR 19950 TILECOL 1000,0,0,0,128 19960 TILEPOS 1000,0,0,640,224,16777200 19970 TILEDISP 1000 19980 FSYNC 1 19990 FOR I=1 TO 1000 20000 LINEOFF I 20010 TRIOFF I 20020 SPROFF I 20030 MODOFF I 20040 NEXT I 20050 FOR I=1 TO 1000 20060 TILEOFF I 20070 NEXT I 20080 ALTEST 0 20090 EFFECT 0,0,0,640,224,0 20100 TEXTCOL WHITE 20110 FSYNC 1 20120 END SUB 20130 !========================================= 20140 ! 2バイト文字チェック 20150 !----------------------------------------- 20160 SUB DCHRCHK(R,S$) 20170 R=ORD(S$) 20180 IF (R>126 AND R<161)OR(R>223 AND R<255) THEN R=1 ELSE R=0 20190 END SUB 20200 !========================================= 20210 ! 拡張PRINT(LOCATE X,Y:COLOR C:PRINT S$;) 20220 ! FSYNC W 20230 !----------------------------------------- 20240 SUB CLPRINT(C,X,Y,S$,W) 20250 IF X>=0 AND Y>=0 THEN LOCATE X,Y 20260 CALL TEXTCOLX(C) 20270 FOR WJ=1 TO LEN(S$) 20280 CALL DCHRCHK(WR,S$(WJ:WJ)) 20290 IF WR=0 THEN 20300 PRINT S$(WJ:WJ); 20310 ELSE 20320 IF WJ+1>LEN(S$) THEN EXIT FOR 20330 PRINT S$(WJ:WJ+1); 20340 WJ=WJ+1 20350 END IF 20360 CALL FSYNCX(W) 20370 NEXT WJ 20380 END SUB 20390 !========================================= 20400 ! ParameterPRINT 最大値:B 20410 ! (LOCATE X,Y:COLOR C:PRINT S$;) 20420 ! IF P=0 AND Y>=0 THEN LOCATE X,Y 20470 CALL TEXTCOLX(C) 20480 PRINT S$; 20490 IF P=0 THEN WTC(A)=C 20700 CALL TEXTCOLX(WTC(A)) 20710 IF X>=0 THEN WCX(A)=X 20720 IF Y>=0 THEN WCY(A)=Y 20730 DO WHILE WCX(A)>WV(A) 20740 WCX(A)=WCX(A)-WV(A) 20750 WCY(A)=WCY(A)+1 20760 LOOP 20770 DO WHILE WCY(A)>=WW(A) 20780 CALL WSCR(A,WTC(A),1) 20790 WCY(A)=WCY(A)-1 20800 LOOP 20810 WPI=1 20820 DO 20830 IF WPI>LEN(S$) THEN EXIT DO 20840 WPS$=S$(WPI:WPI) 20850 IF WPS$="\" THEN 20860 IF WPI+1>LEN(S$) THEN EXIT DO 20870 WPI=WPI+1 20880 WPS$=S$(WPI:WPI) 20890 IF WPS$="m" THEN 20900 S$(WPI-1:WPI)=PN$(1,MI) 20910 WPI=WPI-2 20920 ELSEIF WPS$="'" THEN 20930 S$(WPI-1:WPI)=CHR$(34) 20940 WPI=WPI-2 20950 ELSEIF WPS$="\" THEN 20960 S$(WPI-1:WPI)="\" 20970 WPI=WPI-2 20980 ELSEIF WPS$="n" THEN 20990 WCX(A)=0 21000 WCY(A)=WCY(A)+1 21010 ELSEIF WPS$="c" THEN 21020 IF WPI+1>LEN(S$) THEN EXIT DO 21030 WPI=WPI+1 21040 WTC(A)=VAL(S$(WPI:WPI)) 21050 CALL TEXTCOLX(WTC(A)) 21060 ELSEIF WPS$="e" THEN 21070 CALL WOFF(A,0,0) 21080 WCX(A),WCY(A)=0 21090 END IF 21100 ELSE 21110 IF WCX(A)=WV(A) THEN 21120 WCX(A)=0 21130 WCY(A)=WCY(A)+1 21140 END IF 21150 IF WCY(A)=WW(A) THEN 21160 CALL WSCR(A,WTC(A),1) 21170 WCY(A)=WW(A)-1 21180 END IF 21190 LOCATE WCX(A)+WX(A),WCY(A)+WY(A) 21200 CALL DCHRCHK(WPR,WPS$) 21210 IF WPR=0 THEN 21220 IF V>0 AND PAD(1,7)LEN(S$) THEN EXIT DO 21260 IF WCX(A)0 AND PAD(1,7)=0 THEN WTC(A)=C 21470 CALL TEXTCOLX(WTC(A)) 21480 IF X>=0 THEN WCX(A)=X 21490 IF Y>=0 THEN WCY(A)=Y 21500 LOCATE WCX(A)+WX(A),WCY(A)+WY(A) 21510 PRINT S$; 21520 IF P0 THEN 21710 FOR WK=0 TO WW(A)-2 21720 CALL WSTR(W$,A,0,WK+1,WV(A)) 21730 LOCATE WX(A),WY(A)+WK 21740 PRINT W$; 21750 NEXT WK 21760 LOCATE WX(A),WY(A)+WW(A)-1 21770 PRINT REPEAT$(" ",WV(A)); 21780 ELSEIF D<0 THEN 21790 FOR WK=WW(A)-1 TO 1 STEP -1 21800 CALL WSTR(W$,A,0,WK-1,WV(A)) 21810 LOCATE WX(A),WY(A)+WK 21820 PRINT W$; 21830 NEXT WK 21840 LOCATE WX(A),WY(A) 21850 PRINT REPEAT$(" ",WV(A)); 21860 END IF 21870 END SUB 21880 !========================================= 21890 ! Window Display WinNo:A(0-9) 21900 ! TEXT座標:(X,Y)-STEP(V,W) 21910 !----------------------------------------- 21920 SUB WDISP(A,X,Y,V,W,S) 21930 WX(A)=X 21940 WY(A)=Y 21950 WV(A)=V 21960 WW(A)=W 21970 TILECOL A+900,WDR,WDG,WDB,WDA 21980 TILECOL A+910,191,191,191,128 21990 IF S>0 THEN 22000 TILEPOS A+900,X*12+14,Y*9+6,(X+V)*12+18,Y*9+8,16777001 22010 TILEPOS A+910,X*12+12,Y*9+5,(X+V)*12+20,Y*9+9,16777000 22020 TILEDISP A+900 22030 TILEDISP A+910 22040 FOR WI=0 TO W STEP 1/S 22050 TILEPOS A+900,X*12+14,Y*9+6,(X+V)*12+18,(Y+WI)*9+8,16777001 22060 TILEPOS A+910,X*12+12,Y*9+5,(X+V)*12+20,(Y+WI)*9+9,16777000 22070 NEXT WI 22080 ELSE 22090 TILEPOS A+900,X*12+14,Y*9+6,(X+V)*12+18,(Y+W)*9+8,16777001 22100 TILEPOS A+910,X*12+12,Y*9+5,(X+V)*12+20,(Y+W)*9+9,16777000 22110 TILEDISP A+900 22120 TILEDISP A+910 22130 END IF 22140 WCX(A),WCY(A),BLINK=0 22150 END SUB 22160 !========================================= 22170 ! Window OFF 22180 ! WinNo:A(0-9) IF D=0 THEN ONLY TEXT CLEAR 22190 ! Speed:S(>=0) 22200 !----------------------------------------- 22210 SUB WOFF(A,D,S) 22220 WCX(A),WCY(A)=0 22230 TILEOFF A+920 22240 TRIOFF A+920 22250 FOR WI=WY(A) TO WY(A)+WW(A)-1 22260 LOCATE WX(A),WI 22270 PRINT REPEAT$(" ",WV(A)); 22280 NEXT WI 22290 IF D>0 THEN 22300 IF S>0 THEN 22310 FOR WI=WW(A) TO 0 STEP -1/S 22320 TILEPOS A+900,WX(A)*12+14,WY(A)*9+6,(WX(A)+WV(A))*12+18,(WY(A)+WI)*9+8,16777001 22330 TILEPOS A+910,WX(A)*12+12,WY(A)*9+5,(WX(A)+WV(A))*12+20,(WY(A)+WI)*9+9,16777000 22340 NEXT WI 22350 END IF 22360 TILEOFF A+910 22370 TILEOFF A+900 22380 END IF 22390 END SUB 22400 !========================================= 22410 ! Window CuRSol WinNo:A(0-9) 22420 ! Cursol座標:(X,Y), STEP(X,Y):(V,W) 22430 ! CursolType:M 22440 ! ○ボタン押下時にカーソル消す:E>0 22450 !----------------------------------------- 22460 SUB WCSR(A,X,Y,V,W,M,E) 22470 IF V<>0 OR W<>0 THEN 22480 CALL PADX(1) 22490 X=MOD(X+((PADX(1,1,2)=1)-(PADX(1,2,2)=1))*V,WV(A)) 22500 Y=MOD(Y-((PADX(1,3,2)=1)-(PADX(1,4,2)=1))*W,WW(A)) 22510 BLINK=MOD(BLINK+1,BLINKT) 22520 END IF 22530 IF M=0 THEN 22540 TRICOL A+920,255,255,255,128 22550 TRIPOS A+920,(WX(A)+X)*12+17,(WY(A)+Y)*9+8,(WX(A)+X)*12+17,(WY(A)+Y)*9+15,(WX(A)+X)*12+26,(WY(A)+Y)*9+11.5,16777002 22560 ELSE 22570 TILECOL A+920,255,255,255,32 22580 TILEPOS A+920,(WX(A)+X)*12+16,(WY(A)+Y)*9+7,(WX(A)+X+M)*12+16,(WY(A)+Y+1)*9+7,16777002 22590 END IF 22600 IF V<>0 OR W<>0 THEN 22610 IF M=0 THEN 22620 IF BLINK1 OR E>0 THEN 22730 IF M=0 THEN TRIOFF A+920 ELSE TILEOFF A+920 22740 END IF 22750 END IF 22760 END SUB 22770 !========================================= 22780 ! TEXT-COLOR変更 22790 !----------------------------------------- 22800 SUB TEXTCOLX(C) 22810 SELECT CASE C 22820 CASE 0 22830 TEXTCOL BLACK 22840 CASE 1 22850 TEXTCOL BLUE 22860 CASE 2 22870 TEXTCOL RED 22880 CASE 3 22890 TEXTCOL PURPLE 22900 CASE 4 22910 TEXTCOL GREEN 22920 CASE 5 22930 TEXTCOL CYAN 22940 CASE 6 22950 TEXTCOL YELLOW 22960 CASE 7 22970 TEXTCOL WHITE 22980 END SELECT 22990 END SUB 23000 !========================================= 23010 ! スプライトフォントの表示 23020 !----------------------------------------- 23030 SUB SPRINT(IS,IE,FT,PP,PO,PA,X,Y,Z,XS,YS,PC,PS,ST$,WT) 23040 IF IS>IE OR IS<1 THEN EXIT SUB 23050 IF Z<0 OR Z>16777200 THEN EXIT SUB 23060 IF PP<1 OR PP>16 THEN EXIT SUB 23070 IF PO<0 OR PO>15 THEN EXIT SUB 23080 IF PA<0 OR PA>2 THEN EXIT SUB 23090 L=IS 23100 A=XS*LEN(ST$)+PC*(LEN(ST$)-1)*(LEN(ST$)>0) 23110 SELECT CASE PS 23120 CASE 0 ! 中央 23130 X=X-A/2 23140 CASE IS >0 23150 X=X-A ! 右詰め 23160 END SELECT 23170 Y=Y-YS/2 23180 FOR K=1 TO LEN(ST$) 23190 M=ORD(ST$(K:K))-32 23200 IF M<64 AND X<=640 AND Y<=224 AND X+XS>=0 AND Y+YS>=0 THEN 23210 A=MOD(M,16)*32 23220 B=INT(M/16)*32+(FT=2)*128 23230 SPROFF L 23240 SPRPAL L,PP,PO,PA 23250 SPRTEX L,7,A,B,A+32,B+32 23260 SPRPOS2 L,X,Y,X+XS,Y+YS,Z 23270 SPRDISP L 23280 L=L+1 23290 IF L>INT(IE) THEN L=INT(IS) 23300 END IF 23310 X=X+XS+PC 23320 CALL FSYNCX(WT) 23330 NEXT K 23340 END SUB 23350 !========================================= 23360 ! スクリーンマスク 23370 !----------------------------------------- 23380 SUB SCREEN_MASK(TYPE) 23390 FOR I=0 TO AG-1 23400 TRIOFF I+700 23410 NEXT I 23420 TILEOFF 799 23430 SELECT CASE TYPE 23440 CASE 0 ! マスクオフ 23450 FOR I=800 TO 899 23460 LINEOFF I 23470 TILEOFF I 23480 TRIOFF I 23490 SPROFF I 23500 NEXT I 23510 CASE 1 ! MAPフィールド用マスク 23520 TILECOL 800,0,0,0,128 23530 TILECOL 801,0,0,0,128 23540 TILECOL 802,0,0,0,128 23550 TILECOL 803,0,0,0,128 23560 TILECOL 804,0,0,0,128 23570 TILEPOS 800,0,0,640,224,16776000 23580 TILEPOS 801,0,0,640,8,16776000 23590 TILEPOS 802,0,224-8,640,224,16776000 23600 TILEPOS 803,0,0,16,224,16776000 23610 TILEPOS 804,640-16,0,640,224,16776000 23620 TILEDISP 800 23630 TILEDISP 801 23640 TILEDISP 802 23650 TILEDISP 803 23660 TILEDISP 804 23670 CASE 2 ! 全画面マスク 23680 TILECOL 800,0,0,0,128 23690 TILEPOS 800,0,0,640,224,16776000 23700 TILEDISP 800 23710 CASE 3 ! 全画面マスク+スポット 23720 TILECOL 800,0,0,0,128 23730 TILEPOS 800,0,0,640,224,16776000 23740 TILEDISP 800 23750 TILECOL 799,0,0,0,128 23760 TILEPOS 799,0,0,640,224,16775900 23770 TILEDISP 799 23780 FOR I=0 TO AG-1 23790 TRICOL3 I+700,0,0,0,1,0,0,0,128,0,0,0,128 23800 NEXT I 23810 CALL SPOT(SPOT) 23820 FOR I=0 TO AG-1 23830 TRIDISP I+700 23840 NEXT I 23850 END SELECT 23860 END SUB 23870 !========================================= 23880 ! スポット描画 23890 !----------------------------------------- 23900 SUB SPOT(S) 23910 FOR I=0 TO AG 23920 SX(I)=S_(I)*S+320 23930 SY(I)=T_(I)*S+112 23940 NEXT I 23950 FOR I=0 TO AG-1 23960 TRIPOS I+700,320,112,SX(I),SY(I),SX(I+1),SY(I+1),16775950 23970 NEXT I 23980 END SUB 23990 !========================================= 24000 ! フェードイン処理 24010 !----------------------------------------- 24020 SUB FADE_IN(TYPE) 24030 SELECT CASE TYPE 24040 CASE 1 ! 通常 24050 FOR A=128 TO 0 STEP -2 24060 TILECOL 800,0,0,0,A 24070 FSYNC 1 24080 NEXT A 24090 CASE 2 ! 通常2倍速 階段昇降時用 24100 FOR A=128 TO 0 STEP -4 24110 TILECOL 800,0,0,0,A 24120 FSYNC 1 24130 NEXT A 24140 CASE 3 ! 通常1/4倍速 OPENING TITLE用 24150 FOR A=128 TO 0 STEP -.5 24160 TILECOL 800,0,0,0,A 24170 CALL FSYNCX(1) 24180 NEXT A 24190 CASE 4 ! 通常1/4倍速 ENDING用 24200 FOR A=128 TO 64 STEP -.5 24210 TILECOL 800,0,0,0,A 24220 CALL FSYNCX(1) 24230 NEXT A 24240 END SELECT 24250 END SUB 24260 !========================================= 24270 ! フェードアウト処理 24280 !----------------------------------------- 24290 SUB FADE_OUT(TYPE) 24300 SELECT CASE TYPE 24310 CASE 1 ! 通常 24320 FOR A=0 TO 128 STEP 2 24330 TILECOL 800,0,0,0,A 24340 FSYNC 1 24350 NEXT A 24360 CASE 2 ! 階段昇降時 24370 FOR A=0 TO 128 STEP 2 24380 TILECOL 800,0,0,0,A 24390 IF MOD(A,68)=0 THEN SEPLAY 3,(255-A)*VOL,(255-A)*VOL 24400 IF MOD(A,68)=34 THEN SEPLAY 4,(255-A)*VOL,(255-A)*VOL 24410 FSYNC 1 24420 NEXT A 24430 CASE 3 ! スロー 24440 FOR A=0 TO 128 STEP 0.5 24450 TILECOL 800,0,0,0,A 24460 FSYNC 1 24470 NEXT A 24480 CASE 4 ! ENDING用 24490 FOR A=64 TO 128 STEP 0.5 24500 TILECOL 800,0,0,0,A 24510 FSYNC 1 24520 NEXT A 24530 END SELECT 24540 END SUB 24550 !========================================= 24560 ! 8BITテクスチャ描画 24570 !----------------------------------------- 24580 SUB IMAGE8DISP(I,P,WIDX,Z,YDIVX) 24590 SPRTEX I,1,0,0,256,256 24600 SPRTEX I+1,2,0,0,256,256 24610 SPRPAL I,P,0,1 24620 SPRPAL I+1,P,0,1 24630 J=WIDX/8 24640 SPRPOS2 I,320-J*4,112-J*YDIVX,320,112+J*YDIVX,Z 24650 SPRPOS2 I+1,320,112-J*YDIVX,320+J*4,112+J*YDIVX,Z 24660 SPRDISP I 24670 SPRDISP I+1 24680 END SUB 24690 !========================================= 24700 ! フィールドコマンド表示 24710 !----------------------------------------- 24720 SUB CMDDISP 24730 CALL WDISP(0,3,1,8,5,64) 24740 CALL WDISP(1,3,7,8,1,64) 24750 CALL WDISP(9,3,9,8,1,64) 24760 DO 24770 CALL WDISP(0,3,1,8,5,0) 24780 CALL ISORT(IA_NUM,IE_NUM,MI,0) ! 装備品を前へ 24790 CALL WP(0,(IA_NUM>0)*7,0,0," どうぐ",0,0) 24800 CALL MSORT(MA_NUM,MF_NUM,MB_NUM,MI,1) ! フィールド魔法を前へ 24810 CALL WP(0,(MF_NUM>0)*7,0,1," まほう",0,0) 24820 CALL WP(0,7,0,2," つよさ",0,0) 24830 CALL WP(0,0,0,3," セーブ",0,0) 24840 CALL WP(0,0,0,4," ロード",0,0) 24850 CALL WDISP(1,3,7,8,1,0) 24860 T$=" "+STR$(PP(3,MI))+"G" 24870 T$=T$(LEN(T$)-7:LEN(T$)) 24880 CALL WP(1,7,0,0,T$,0,0) 24890 DO 24900 CALL CD(MI,0,0) 24910 CALL WCSR(0,0,CMD,0,1,0,0) 24920 CALL TMSTR(T$) 24930 CALL WP(9,7,0,0,T$,0,0) 24940 LOOP UNTIL PADX(1,6,2)=1 OR PADX(1,7,2)=1 24950 IF PADX(1,6,2)=1 THEN 24960 SELECT CASE CMD 24970 CASE 0 24980 IF IA_NUM>0 THEN CALL CMD_ITEM(MI) 24990 CASE 1 25000 IF MF_NUM>0 THEN CALL CMD_MAGIC(MI) 25010 CASE 2 25020 CALL CMD_STATUS((MI)) 25030 CASE 3 25040 ! CALL CMD_SAVE 25050 CASE 4 25060 ! CALL CMD_LOAD 25070 END SELECT 25080 ELSE 25090 EXIT DO 25100 END IF 25110 LOOP 25120 CALL WOFF(9,1,32) 25130 CALL WOFF(1,1,32) 25140 CALL WOFF(0,1,32) 25150 CLEAR 25160 END SUB 25170 !========================================= 25180 ! コマンド「どうぐ」 25190 !----------------------------------------- 25200 SUB CMD_ITEM(MI) 25210 CALL WDISP(4,13,1,37,1,0) 25220 ITEM_PAGE=MIN(ITEM_PAGE,INT((IA_NUM-1)/20)) 25230 DO 25240 CALL WDISP(3,13,3,23,MIN(20,IA_NUM-ITEM_PAGE*20),0) 25250 FOR I=ITEM_PAGE*20 TO MIN(IA_NUM-1,ITEM_PAGE*20+19) 25260 CALL SCRIPT(R,R$,ITBL$(PP(I+111,MI)),"NM") 25270 IF I20 OR PADX(1,20,2)=1 THEN CALL WOFF(3,0,0) 25450 LOOP 25460 CALL WOFF(3,1,0) 25470 CALL WOFF(4,1,0) 25480 END SUB 25490 !========================================= 25500 ! コマンド「まほう」 25510 !----------------------------------------- 25520 SUB CMD_MAGIC(MI) 25530 CALL WDISP(4,13,1,37,1,0) 25540 MAGIC_PAGE=MIN(MAGIC_PAGE,INT((MF_NUM-1)/20)) 25550 DO 25560 CALL WDISP(3,13,3,23,MIN(20,MF_NUM-MAGIC_PAGE*20),0) 25570 FOR I=MAGIC_PAGE*20 TO MIN(MF_NUM-1,MAGIC_PAGE*20+19) 25580 CALL SCRIPT(R,R$,MTBL$(PP(I+81,MI)),"NM") 25590 CALL SCRIPT(R,S$,MTBL$(PP(I+81,MI)),"MP") 25600 CALL WP(3,(R<=PP(13,MI))*7,2,I-MAGIC_PAGE*20,R$,0,0) 25610 NEXT I 25620 MAGIC_CSR=MIN(MAGIC_CSR,I-MAGIC_PAGE*20-1) 25630 DO 25640 CALL WCSR(3,1,MAGIC_CSR,0,1,0,0) 25650 CALL SCRIPT(R,R$,MTBL$(PP(MAGIC_CSR+MAGIC_PAGE*20+81,MI)),"CM") 25660 CALL SCRIPT(R,S$,MTBL$(PP(MAGIC_CSR+MAGIC_PAGE*20+81,MI)),"MP") 25670 CALL WOFF(4,0,0) 25680 CALL WP(4,7,1,0,R$+"(MP消費:"+STR$(R)+")",0,0) 25690 CALL TMSTR(T$) 25700 CALL WP(9,7,0,0,T$,0,0) 25710 LOOP UNTIL PADX(1,7,2)=1 OR PADX(1,1,2)=1 OR PADX(1,2,2)=1 25720 IF PADX(1,7,2)=1 THEN EXIT DO 25730 IF PADX(1,1,2)=1 THEN MAGIC_PAGE=MOD(MAGIC_PAGE-1,INT((MF_NUM-1)/20)+1) 25740 IF PADX(1,2,2)=1 THEN MAGIC_PAGE=MOD(MAGIC_PAGE+1,INT((MF_NUM-1)/20)+1) 25750 IF MF_NUM>20 THEN CALL WOFF(3,0,0) 25760 LOOP 25770 CALL WOFF(3,1,0) 25780 CALL WOFF(4,1,0) 25790 END SUB 25800 !========================================= 25810 ! マイキャラクターの表示(ステータス用) 25820 !----------------------------------------- 25830 SUB CHARA_DISP(I,X,Y) 25840 K=INT(AF2/12) 25850 A=ME(I,0,K) 25860 B=MF(I,0,K) 25870 SPRTEX 1000,MG(I),A,B,A+32,B+32 25880 SPRPAL 1000,MP(I),MQ(I),1 25890 SPRPOS2 1000,X*12+16,Y*9+7,X*12+64,Y*9+31,16777010 25900 SPRDISP 1000 25910 AF2=AF2+1 25920 IF AF2>47 THEN AF2=0 25930 END SUB 25940 !========================================= 25950 ! コマンド「つよさ」 25960 !----------------------------------------- 25970 SUB CMD_STATUS(MI) 25980 CALL MSORT(MA_NUM,MF_NUM,MB_NUM,MI,0) ! 魔法番号順 25990 CALL WDISP(4,13,1,37,1,0) 26000 DO 26010 STS_PAGE=INT((MA_NUM+19)/20) 26020 CALL WP(4,7,1,0,PN$(1,MI)+"("+PN$(2,MI)+")",0,0) ! 名前+クラス 26030 CALL WDISP(3,13,3,30,20,0) 26040 CALL WPP(3,7,7,9,0," LV : ",PP(2,MI),999,0) ! LEVEL 26050 CALL WPP(3,7,6,9,1," HP : ",PP(11,MI),999,PP(12,MI)/5) ! HP 26060 CALL WPP(3,7,7,-1,-1,"/",PP(12,MI),999,0) ! MHP 26070 CALL WPP(3,7,6,9,2," MP : ",PP(13,MI),999,PP(14,MI)/5) ! MP 26080 CALL WPP(3,7,7,-1,-1,"/",PP(14,MI),999,0) ! MMP 26090 CALL WPP(3,7,7,9,3," EXP : ",PP(4,MI),999999,0) ! EXP 26100 CALL WPP(3,7,7,9,4,"NEXT : ",PP(5,MI),999999,0) ! NEXT-EXP 26110 CALL WPP(3,7,7,3,6," ちから : ",PP(61,MI),255,0) 26120 CALL WP(3,7,-1,-1," ("+STR$(PP(21,MI)-PP(61,MI))+")",0,0) 26130 CALL WPP(3,7,7,3,7,"みのまもり : ",PP(62,MI),255,0) 26140 CALL WP(3,7,-1,-1," ("+STR$(PP(22,MI)-PP(62,MI))+")",0,0) 26150 CALL WPP(3,7,7,3,8,"たいりょく : ",PP(63,MI),255,0) 26160 CALL WP(3,7,-1,-1," ("+STR$(PP(23,MI)-PP(63,MI))+")",0,0) 26170 CALL WPP(3,7,7,3,9," かしこさ : ",PP(64,MI),255,0) 26180 CALL WP(3,7,-1,-1," ("+STR$(PP(24,MI)-PP(64,MI))+")",0,0) 26190 CALL WPP(3,7,7,3,10," すばやさ : ",PP(65,MI),255,0) 26200 CALL WP(3,7,-1,-1," ("+STR$(PP(25,MI)-PP(65,MI))+")",0,0) 26210 CALL WPP(3,7,7,3,11,"うんのよさ : ",PP(66,MI),255,0) 26220 CALL WP(3,7,-1,-1," ("+STR$(PP(26,MI)-PP(66,MI))+")",0,0) 26230 CALL WPP(3,7,7,3,12," 攻撃力 : ",PP(41,MI),999,0) 26240 CALL WPP(3,7,7,3,13," 守備力 : ",PP(42,MI),999,0) 26250 IF PP(51,MI)>0 THEN 26260 CALL SCRIPT(R,R$,ITBL$(PP(51,MI)),"NM") 26270 ELSE 26280 R$="なし" 26290 END IF 26300 CALL WP(3,7,1,15," 武器 : "+R$,0,0) 26310 IF PP(52,MI)>0 THEN 26320 CALL SCRIPT(R,R$,ITBL$(PP(52,MI)),"NM") 26330 ELSE 26340 R$="なし" 26350 END IF 26360 CALL WP(3,7,1,16," 鎧 : "+R$,0,0) 26370 IF PP(53,MI)>0 THEN 26380 CALL SCRIPT(R,R$,ITBL$(PP(53,MI)),"NM") 26390 ELSE 26400 R$="なし" 26410 END IF 26420 CALL WP(3,7,1,17," 盾 : "+R$,0,0) 26430 IF PP(54,MI)>0 THEN 26440 CALL SCRIPT(R,R$,ITBL$(PP(54,MI)),"NM") 26450 ELSE 26460 R$="なし" 26470 END IF 26480 CALL WP(3,7,1,18," 兜 : "+R$,0,0) 26490 IF PP(55,MI)>0 THEN 26500 CALL SCRIPT(R,R$,ITBL$(PP(55,MI)),"NM") 26510 ELSE 26520 R$="なし" 26530 END IF 26540 CALL WP(3,7,1,19,"アクセサリ : "+R$,0,0) 26550 DO 26560 CALL CHARA_DISP(MI,15,4) 26570 FSYNC 1 26580 CALL PADX(1) 26590 CALL TMSTR(T$) 26600 CALL WP(9,7,0,0,T$,0,0) 26610 LOOP UNTIL PADX(1,7,2)=1 OR PADX(1,1,2)=1 OR PADX(1,2,2)=1 26620 SPROFF 1000 26630 IF PADX(1,7,2)<>1 AND MA_NUM>0 THEN 26640 IF PADX(1,1,2)=1 THEN STS_PAGE=0 ELSE STS_PAGE=INT((MA_NUM-1)/20) 26650 CALL WOFF(3,0,0) 26660 CALL WOFF(4,0,0) 26670 DO 26680 CALL WDISP(3,13,3,22,MIN(20,MA_NUM-STS_PAGE*20),0) 26690 FOR I=STS_PAGE*20 TO MIN(MA_NUM-1,STS_PAGE*20+19) 26700 CALL SCRIPT(R,R$,MTBL$(PP(I+81,MI)),"NM") 26710 CALL SCRIPT(R,S$,MTBL$(PP(I+81,MI)),"MP") 26720 CALL WP(3,(R<=PP(13,MI))*7,2,I-STS_PAGE*20,R$,0,0) 26730 NEXT I 26740 STS_CSR=MIN(STS_CSR,I-STS_PAGE*20-1) 26750 DO 26760 CALL WCSR(3,1,STS_CSR,0,1,0,0) 26770 CALL SCRIPT(R,R$,MTBL$(PP(STS_CSR+STS_PAGE*20+81,MI)),"CM") 26780 CALL SCRIPT(R,S$,MTBL$(PP(STS_CSR+STS_PAGE*20+81,MI)),"MP") 26790 CALL WOFF(4,0,0) 26800 CALL WP(4,7,1,0,R$+"(MP消費:"+STR$(R)+")",0,0) 26810 CALL TMSTR(T$) 26820 CALL WP(9,7,0,0,T$,0,0) 26830 LOOP UNTIL PADX(1,7,2)=1 OR PADX(1,1,2)=1 OR PADX(1,2,2)=1 26840 IF PADX(1,7,2)=1 THEN STS_PAGE=-1 26850 IF PADX(1,1,2)=1 THEN STS_PAGE=STS_PAGE+1 26860 IF PADX(1,2,2)=1 THEN STS_PAGE=STS_PAGE-1 26870 CALL WOFF(3,0,0) 26880 CALL WOFF(4,0,0) 26890 LOOP UNTIL STS_PAGE<0 OR STS_PAGE>INT((MA_NUM-1)/20) 26900 END IF 26910 LOOP UNTIL PADX(1,7,2)=1 26920 CALL WOFF(3,1,0) 26930 CALL WOFF(4,1,0) 26940 CALL MSORT(MA_NUM,MF_NUM,MB_NUM,MI,1) ! フィールド魔法を前へ 26950 END SUB 26960 !========================================= 26970 ! 便利ボタン:しらべる 26980 !----------------------------------------- 26990 SUB SEARCH(X,Y,Z) 27000 CALL WDISP(9,10,18,30,5,128) 27010 CALL WP(9,7,0,0,PN$(1,MI)+"は足元を探した",1,1) 27020 CALL WP(9,-1,-1,-1,"\n"+REPEAT$(".",120),1,1) 27030 FOR I=111 TO 140 27040 CALL SCRIPT(R,R$,ITBL$(PP(I,MI)),"NM") 27050 IF R$="" THEN EXIT FOR 27060 NEXT I 27070 IF I<141 THEN 27080 J=INT(RND*7)*10+INT(RND*9)+1 27090 PP(I,MI)=J 27100 CALL SCRIPT(R,R$,ITBL$(J),"NM") 27110 CALL WP(9,-1,-1,-1," なんと!「"+R$+"」を見つけた!!!",1,1) 27120 ELSE 27130 IF RND>.1 THEN 27140 CALL WP(9,-1,-1,-1,"しかし何も見つからなかった\n(T_T)",1,1) 27150 ELSE 27160 CALL WP(9,-1,-1,-1,"いつのまにかアイテムが無くなっていた\n(TOT)",1,1) 27170 FOR J=115 TO 140 27180 PP(J,MI)=0 27190 NEXT J 27200 CALL EQUIP_ALIGN(MI) 27210 END IF 27220 END IF 27230 FOR I=1 TO 7 27240 PADX(1,I,2)=2 27250 PADX(1,I,3)=0 27260 NEXT I 27270 DO 27280 CALL PADX(1) 27290 IF PADX(1,1,2)=1 THEN EXIT DO 27300 IF PADX(1,2,2)=1 THEN EXIT DO 27310 IF PADX(1,3,2)=1 THEN EXIT DO 27320 IF PADX(1,4,2)=1 THEN EXIT DO 27330 IF PADX(1,5,2)=1 THEN EXIT DO 27340 IF PADX(1,6,2)=1 THEN EXIT DO 27350 IF PADX(1,7,2)=1 THEN EXIT DO 27360 FSYNC 1 27370 LOOP 27380 CALL WOFF(9,1,64) 27390 CLEAR 27400 END SUB 27410 !========================================= 27420 ! 装備品による能力値修正 27430 !----------------------------------------- 27440 SUB EQUIP_ALIGN(N) 27450 LABEL EQUIP_ALIGN 27460 RESTORE *EQUIP_ALIGN 27470 DATA "STR","GRD","VIT","INT","DEX","LCK","ATK","DEF" 27480 FOR EA_I=1 TO 6 27490 READ EA_C$ 27500 PP(EA_I+20,N)=PP(EA_I+60,N) 27510 FOR EA_J=1 TO 5 27520 CALL SCRIPT(EA_R,EA_R$,ITBL$(PP(EA_J+50,N)),EA_C$) 27530 PP(EA_I+20,N)=MIN(999,MAX(0,PP(EA_I+20,N)+EA_R)) 27540 NEXT EA_J 27550 NEXT EA_I 27560 FOR EA_I=1 TO 2 27570 READ EA_C$ 27580 PP(EA_I+40,N)=PP(EA_I+20,N) 27590 FOR EA_J=1 TO 4 27600 CALL SCRIPT(EA_R,EA_R$,ITBL$(PP(EA_J+50,N)),EA_C$) 27610 PP(EA_I+40,N)=MIN(999,MAX(0,PP(EA_I+40,N)+EA_R)) 27620 NEXT EA_J 27630 NEXT EA_I 27640 END SUB 27650 !========================================= 27660 ! リストソート処理(一般形) 27670 !----------------------------------------- 27680 SUB SORT(L(,),K,A,B,C) 27690 FOR SO_I=A TO B-1 27700 FOR SO_J=SO_I+1 TO B 27710 IF L(SO_J,K)<>0 THEN 27720 IF L(SO_I,K)=0 OR SGN(L(SO_I,K)-L(SO_J,K))=SGN(C) THEN 27730 SO_D=L(SO_I,K) 27740 L(SO_I,K)=L(SO_J,K) 27750 L(SO_J,K)=SO_D 27760 END IF 27770 END IF 27780 NEXT SO_J 27790 NEXT SO_I 27800 END SUB 27810 !========================================= 27820 ! アイテムリストソート処理 K:キャラ番号 27830 ! 装備品は必ず前に, C>0:昇順, C<0:降順 27840 ! 戻値 A:総アイテム数, E:装備品数 27850 !----------------------------------------- 27860 SUB ISORT(A,E,K,C) 27870 A,E=0 27880 ! 空きを詰めて総アイテム数をカウント 27890 FOR SO_I=111 TO 140 27900 IF PP(SO_I,K)>0 THEN 27910 A=A+1 27920 PP(A+110,K)=PP(SO_I,K) 27930 END IF 27940 NEXT SO_I 27950 FOR SO_I=A+111 TO 140 27960 PP(SO_I,K)=0 27970 NEXT SO_I 27980 ! 装備品を前へ移動して装備品数をカウント 27990 FOR SO_J=1 TO 5 28000 FOR SO_I=E+111 TO A+110 28010 IF PP(SO_I,K)=PP(SO_J+50,MI) THEN 28020 E=E+1 28030 SO_A=PP(SO_I,K) 28040 FOR SO_K=SO_I TO E+111 STEP -1 28050 PP(SO_K,K)=PP(SO_K-1,K) 28060 NEXT SO_K 28070 PP(E+110,K)=SO_A 28080 EXIT FOR 28090 END IF 28100 NEXT SO_I 28110 IF SO_I>A+110 THEN PP(SO_J+50,MI)=0 28120 NEXT SO_J 28130 ! 昇降順で並び替え 28140 IF C<>0 THEN 28150 SO_K=SGN(C) 28160 FOR SO_I=E+111 TO A+109 28170 FOR SO_J=SO_I+1 TO A+110 28180 IF SGN(PP(SO_I,K)-PP(SO_J,K))=SO_K THEN 28190 SO_A=PP(SO_I,K) 28200 PP(SO_I,K)=PP(SO_J,K) 28210 PP(SO_J,K)=SO_A 28220 END IF 28230 NEXT SO_J 28240 NEXT SO_I 28250 END IF 28260 END SUB 28270 !========================================= 28280 ! 魔法リストソート処理 K:キャラ番号 28290 ! C=0:番号順, C=1:移動用前, C=2:戦闘用前 28300 ! 戻値 A:総数, F:移動用数, B:戦闘用数 28310 !----------------------------------------- 28320 SUB MSORT(A,F,B,K,C) 28330 A,F,B=0 28340 ! 空きを詰めて総魔法数をカウント 28350 FOR SO_I=81 TO 110 28360 IF PP(SO_I,K)>0 THEN 28370 A=A+1 28380 PP(A+80,K)=PP(SO_I,K) 28390 END IF 28400 NEXT SO_I 28410 FOR SO_I=A+81 TO 110 28420 PP(SO_I,K)=0 28430 NEXT SO_I 28440 ! 種類毎に昇順に並べ替え&カウント 28450 FOR SO_I=81 TO A+80 28460 CALL SCRIPT(SO_R,SO_R$,MTBL$(PP(SO_I,K)),"TP") 28470 IF SO_R<>2 THEN F=F+1 28480 IF SO_R<>1 THEN B=B+1 28490 IF C=1 AND SO_R=2 THEN 28500 PP(SO_I,K)=PP(SO_I,K)+500 28510 ELSEIF C=2 AND SO_S=1 THEN 28520 PP(SO_I,K)=PP(SO_I,K)+500 28530 END IF 28540 NEXT SO_I 28550 FOR SO_I=81 TO A+79 28560 FOR SO_J=SO_I+1 TO A+80 28570 IF PP(SO_I,K)>PP(SO_J,K) THEN 28580 SO_A=PP(SO_I,K) 28590 PP(SO_I,K)=PP(SO_J,K) 28600 PP(SO_J,K)=SO_A 28610 END IF 28620 NEXT SO_J 28630 NEXT SO_I 28640 FOR SO_I=81 TO A+80 28650 IF PP(SO_I,K)>500 THEN PP(SO_I,K)=PP(SO_I,K)-500 28660 NEXT SO_I 28670 END SUB 28680 !========================================= 28690 ! 拡張VAL関数 28700 !----------------------------------------- 28710 SUB VALX(R,R$) 28720 IF R$(1:1)="+" OR R$(1:1)="-" OR R$(1:1)="." OR("0"<=R$(1:1) AND R$(1:1)<="9") THEN R=VAL(R$) ELSE R=0 28730 END SUB 28740 !========================================= 28750 ! スクリプト構文解釈(識別子指定) 28760 ! 戻値:R,R$, 文字列:S$, 識別子:C$ 28770 !----------------------------------------- 28780 SUB SCRIPT(R,R$,S$,C$) 28790 R=0 28800 R$="" 28810 FOR SC_I=1 TO LEN(S$) 28820 IF S$(SC_I:SC_I+LEN(C$)+1)="\"+C$+":" THEN 28830 SC_I=SC_I+LEN(C$)+2 28840 FOR SC_J=SC_I TO LEN(S$) 28850 SC_S$=S$(SC_J:SC_J) 28860 CALL DCHRCHK(SC_R,SC_S$) 28870 IF SC_R=1 THEN 28880 R$=R$+S$(SC_J:SC_J+1) 28890 SC_J=SC_J+1 28900 ELSEIF SC_S$<>"\" THEN 28910 R$=R$+SC_S$ 28920 ELSE 28930 SC_J=SC_J+1 28940 IF S$(SC_J:SC_J)="\" THEN R$=R$+"\" ELSE EXIT FOR 28950 END IF 28960 NEXT SC_J 28970 CALL VALX(R,R$) 28980 EXIT FOR 28990 END IF 29000 NEXT SC_I 29010 END SUB 29020 !========================================= 29030 ! オープニングタイトル 29040 !----------------------------------------- 29050 SUB TITLE 29060 TEXLOAD "PGBS01T/TITLE" 29070 PALLOAD "PGBS01T/TITLE" 29080 EFFECT 127,0,0,640,224,10000 29090 FSYNC 1 29100 CLEAR 29110 CALL FSYNCX(120) 29120 EFFECT 0,0,0,640,224,0 29130 CALL SPRINT(101,101,2,4,0,1,320,104,1,48,24,-48,0,"BEYOND STORYYYY ",15) 29140 CALL SCREEN_MASK(2) 29150 CALL IMAGE8DISP(1,1,640,0,1.4) 29160 BGMPLAY 4 29170 CALL FADE_IN(3) 29180 FOR II=600 TO 24 STEP -8 29190 CALL SPRINT(101,120,2,4,0,1,320,104,1,II+II,II,II-28,0,"BEYOND STORY",0) 29200 CALL FSYNCX(1) 29210 NEXT II 29220 CALL FSYNCX(60) 29230 CALL CLPRINT(7,19,13,"体験版 Ver.1.3",1) 29240 !CALL SPRINT(121,140,2,4,0,1,632,128,1,16,8,-1,1,"TRIAL VERSION",1) 29250 MV(MI)=3 29260 FOR II=-340 TO -80 STEP 1 29270 CALL CD(MI,II,52) 29280 CALL FSYNCX(1) 29290 NEXT II 29300 FOR II=0 TO 30 29310 CALL CD(MI,-80,52) 29320 CALL FSYNCX(1) 29330 NEXT II 29340 CALL CLPRINT(0,21,17,"はじめから",0) 29350 IF PP(256,1)>0 THEN CALL CLPRINT(0,21,19,"記録挑戦",0) 29360 CALL CLPRINT(2,19,22,"Projectγ 2001",0) 29370 II,JJ,MM=52 29380 DO WHILE PAD(1,6)>PADX(1,6,5)/2 29390 LOOP 29400 DO 29410 CALL PADX(1) 29420 IF PAD(1,3)>0 THEN II=52 29430 IF PAD(1,4)>0 AND PP(256,1)>0 THEN II=71 29440 IF II<71 THEN 29450 CALL CLPRINT(6,21,17,"はじめから",0) 29460 IF PP(256,1)>0 THEN CALL CLPRINT(0,21,19,"記録挑戦",0) 29470 ELSE 29480 CALL CLPRINT(0,21,17,"はじめから",0) 29490 IF PP(256,1)>0 THEN CALL CLPRINT(6,21,19,"記録挑戦",0) 29500 END IF 29510 TEXTCOL WHITE 29520 MM=MM+SGN(II-MM) 29530 MV(MI)=(II=MM)*3+(IIJJ THEN SEPLAY 21,128*VOL,128*VOL 29560 JJ=II 29570 FSYNC 1 29580 LOOP UNTIL PADX(1,6,2)=1 OR PADX(1,20,2)=1 29590 SEPLAY 22,128*VOL,128*VOL 29600 CALL FADE_OUT(1) 29610 IF II=52 THEN 29620 PP(256,1)=0 29630 CALL MAKE_CHARA 29640 ELSE 29650 CALL LOAD_DATA 29660 END IF 29670 CALL ALL_CLEAR 29680 END SUB 29690 !========================================= 29700 ! 仮ENDING 29710 !----------------------------------------- 29720 SUB ENDING 29730 A,PP(256,1)=PP(256,1)+1 29740 VARSAVE "PGBS00T/PGBS00T",A 29750 BGMSTOP 29760 CALL FADE_OUT(3) 29770 CALL EVENT(997) 29780 CALL ALL_CLEAR 29790 TEXLOAD "PGBS01T/TITLE" 29800 PALLOAD "PGBS01T/TITLE" 29810 CALL SCREEN_MASK(2) 29820 CALL IMAGE8DISP(1,2,640,0,1.4) 29830 VOLUME 255*VOL 29840 CALL FADE_IN(4) 29850 FSYNC 60 29860 RESTORE *STAFF 29870 DO 29880 READ STYLE$ 29890 IF STYLE$="E" THEN EXIT DO 29900 CLEAR 29910 FSYNC 120 29920 !EFFECT 0,0,0,640,224,0 29930 READ NUM 29940 FOR I=1 TO NUM 29950 READ S$ 29960 IF STYLE$="C" THEN 29970 CALL CLPRINT(7,25-INT(LEN(S$)/2),10-NUM+I*2,S$,10) 29980 ELSE 29990 CALL CLPRINT(7,15+(I>1)*10,10-NUM+I*2,S$,10) 30000 END IF 30010 NEXT I 30020 READ S 30030 IF S>0 THEN FSYNC S*60 30040 !EFFECT 127,0,0,640,224,1000 30050 LOOP 30060 EFFECT 0,0,0,640,224,0 30070 LOCATE 0,0 30080 CALL FADE_OUT(4) 30090 FOR I=255 TO 0 STEP -1 30100 VOLUME I*VOL 30110 FSYNC 1 30120 NEXT I 30130 BGMSTOP 30140 CALL CLPRINT(7,18,14,"戦闘勝利回数:"+STR$(PP(250,1))+"回",10) 30150 CALL CLPRINT(7,18,15,"戦闘敗北回数:"+STR$(PP(251,1))+"回",10) 30160 CALL CLPRINT(7,18,16,"戦闘逃走回数:"+STR$(PP(252,1))+"回",10) 30170 CALL CLPRINT(7,18,17,"対ドラゴン戦:"+STR$(BTTURN)+"ターン",10) 30180 CALL TMSTR(T$) 30190 CALL CLPRINT(7,18,18,"総プレイ時間:"+T$,10) 30200 IF PP(256,1)=1 THEN 30210 CALL CLPRINT(7,23,21,"LET'S PLAY CHALLENGE-MODE !",10) 30220 CALL CLPRINT(7,30,22," (PUSH START)",10) 30230 END IF 30240 DO 30250 CALL PADX(1) 30260 LOOP UNTIL PADX(1,20,2)=1 30270 END SUB 30280 !***************************************** 30290 LABEL STAFF 30300 DATA C,1,"「Beyond Story 体験版」制作スタッフ",3 30310 DATA N,2,"DIRECTOR","まっさあ",3 30320 DATA N,2,"SCENARIO","伊園美和",3 30330 DATA N,2,"BATTLE EFFECTS","済帝紅",3 30340 DATA N,2,"SOUND SELECT"," MKN",3 30350 DATA N,4,"PROGRAM","おはり","chaba","済帝紅",5 30360 DATA N,3,"HELPER","AKA","MIU",4 30370 DATA N,2,"THANKS","大勢の皆様",3 30380 DATA N,3,"SPECIAL THANKS","3MA","(PSU Manager)",4 30390 DATA C,2,"βテスター","募集中(苦笑)",3 30400 DATA C,1,"",3 30410 DATA C,7,"Presented by Projectγ","http://www.project-gamma.org/" 30420 DATA ""," TO BE CONTINUED...","","","",10 30430 DATA E 30440 !========================================= 30450 ! アイテム類データテーブルの初期化 30460 !----------------------------------------- 30470 SUB INIT_ITEM 30480 RESTORE *ITEM_TABLE 30490 FOR I=0 TO 70 30500 READ S$ 30510 CALL FINE_SCRIPT(S$) 30520 ITBL$(I)=S$ 30530 NEXT I 30540 END SUB 30550 !========================================= 30560 ! 魔法データテーブルの初期化 30570 !----------------------------------------- 30580 SUB INIT_MAGIC 30590 RESTORE *MAGIC_TABLE 30600 FOR I=0 TO 24 30610 READ S$ 30620 CALL FINE_SCRIPT(S$) 30630 MTBL$(I)=S$ 30640 NEXT I 30650 END SUB 30660 !========================================= 30670 ! SCRIPT文字列最適化処理 30680 !----------------------------------------- 30690 SUB FINE_SCRIPT(S$) 30700 FOR A=1 TO LEN(S$) 30710 IF S$(A:A)="\" THEN 30720 IF S$(A+1:A+1)="\" THEN A=A+1 ELSE EXIT FOR 30730 END IF 30740 NEXT A 30750 S$(1:A-1)="" 30760 A=1 30770 FOR B=2 TO LEN(S$) 30780 CALL DCHRCHK(R,S$(B:B)) 30790 IF R=0 THEN 30800 IF S$(B:B)="," THEN 30810 S$(B:B)="" 30820 B=B-1 30830 END IF 30840 IF S$(B:B)="\" THEN 30850 IF S$(B+1:B+1)="\" THEN 30860 B=B+1 30870 ELSE 30880 S$(A:B-1)=RTRIM$(S$(A:B-1)) 30890 A=B 30900 END IF 30910 END IF 30920 ELSE 30930 B=B+1 30940 END IF 30950 NEXT B 30960 S$(A:B-1)=RTRIM$(S$(A:B-1)) 30970 END SUB 30980 !========================================= 30990 ! アイテム類データ 31000 !----------------------------------------- 31010 LABEL ITEM_TABLE 31020 DATA "DUMMY" 31030 !***** 武器 ****************************** 31040 DATA "\NM:ガンマソード,\PR:0,\EQ:1,\ATK:4,\STR:1,\CM:伝説の武器" 31050 DATA "\NM:ノーランの爪,\PR:0,\EQ:1,\ATK:2,\CM:格闘用の強力な爪" 31060 DATA "\NM:WEAPON-03,\PR:0,\EQ:1,\ATK:3,\CM:謎の武器3" 31070 DATA "\NM:WEAPON-04,\PR:0,\EQ:1,\ATK:4,\CM:謎の武器4" 31080 DATA "\NM:WEAPON-05,\PR:0,\EQ:1,\ATK:5,\CM:謎の武器5" 31090 DATA "\NM:WEAPON-06,\PR:0,\EQ:1,\ATK:6,\CM:謎の武器6" 31100 DATA "\NM:WEAPON-07,\PR:0,\EQ:1,\ATK:7,\CM:謎の武器7" 31110 DATA "\NM:WEAPON-08,\PR:0,\EQ:1,\ATK:8,\CM:謎の武器8" 31120 DATA "\NM:WEAPON-09,\PR:0,\EQ:1,\ATK:9,\CM:謎の武器9" 31130 DATA "\NM:WEAPON-10,\PR:0,\EQ:1,\ATK:10,\CM:謎の武器10" 31140 !***** 鎧 ******************************** 31150 DATA "\NM:ジャグラーアーマー,\PR:3800,\EQ:2,\DEF:1,\VIT:1,\CM:成長を促す鎧" 31160 DATA "\NM:冥界の鎧,\PR:0,\EQ:2,\DEF:2,\CM:あらゆるダメージ半減" 31170 DATA "\NM:ARMOR-03,\PR:0,\EQ:2,\DEF:3,\CM:謎の鎧3" 31180 DATA "\NM:ARMOR-04,\PR:0,\EQ:2,\DEF:4,\CM:謎の鎧4" 31190 DATA "\NM:ARMOR-05,\PR:0,\EQ:2,\DEF:5,\CM:謎の鎧5" 31200 DATA "\NM:ARMOR-06,\PR:0,\EQ:2,\DEF:6,\CM:謎の鎧6" 31210 DATA "\NM:ARMOR-07,\PR:0,\EQ:2,\DEF:7,\CM:謎の鎧7" 31220 DATA "\NM:ARMOR-08,\PR:0,\EQ:2,\DEF:8,\CM:謎の鎧8" 31230 DATA "\NM:ARMOR-09,\PR:0,\EQ:2,\DEF:9,\CM:謎の鎧9" 31240 DATA "\NM:ARMOR-10,\PR:0,\EQ:2,\DEF:10,\CM:謎の鎧10" 31250 !***** 盾 ******************************** 31260 DATA "\NM:ジェイラーの盾,\PR:0,\EQ:3,\DEF:1,\CM:異世界の強固な盾" 31270 DATA "\NM:20mm装甲板,\PR:0,\EQ:3,\DEF:2,\CM:重い金属板" 31280 DATA "\NM:SHIELD-03,\PR:0,\EQ:3,\DEF:3,\CM:謎の盾3" 31290 DATA "\NM:SHIELD-04,\PR:0,\EQ:3,\DEF:4,\CM:謎の盾4" 31300 DATA "\NM:SHIELD-05,\PR:0,\EQ:3,\DEF:5,\CM:謎の盾5" 31310 DATA "\NM:SHIELD-06,\PR:0,\EQ:3,\DEF:6,\CM:謎の盾6" 31320 DATA "\NM:SHIELD-07,\PR:0,\EQ:3,\DEF:7,\CM:謎の盾7" 31330 DATA "\NM:SHIELD-08,\PR:0,\EQ:3,\DEF:8,\CM:謎の盾8" 31340 DATA "\NM:SHIELD-09,\PR:0,\EQ:3,\DEF:9,\CM:謎の盾9" 31350 DATA "\NM:SHIELD-10,\PR:0,\EQ:3,\DEF:10,\CM:謎の盾10" 31360 !***** 兜 ******************************** 31370 DATA "\NM:HELMET-01,\PR:0,\EQ:4,\DEF:1,\CM:謎の兜1" 31380 DATA "\NM:ホイリーメット,\PR:0,\EQ:4,\DEF:2,\CM:首まで覆う大きな兜" 31390 DATA "\NM:HELMET-03,\PR:0,\EQ:4,\DEF:3,\CM:謎の兜3" 31400 DATA "\NM:HELMET-04,\PR:0,\EQ:4,\DEF:4,\CM:謎の兜4" 31410 DATA "\NM:HELMET-05,\PR:0,\EQ:4,\DEF:5,\CM:謎の兜5" 31420 DATA "\NM:HELMET-06,\PR:0,\EQ:4,\DEF:6,\CM:謎の兜6" 31430 DATA "\NM:HELMET-07,\PR:0,\EQ:4,\DEF:7,\CM:謎の兜7" 31440 DATA "\NM:HELMET-08,\PR:0,\EQ:4,\DEF:8,\CM:謎の兜8" 31450 DATA "\NM:HELMET-09,\PR:0,\EQ:4,\DEF:9,\CM:謎の兜9" 31460 DATA "\NM:HELMET-10,\PR:0,\EQ:4,\DEF:10,\CM:謎の兜10" 31470 !***** 装飾品 **************************** 31480 DATA "\NM:剛のめがね,\PR:0,\EQ:5,\STR:1,\GRD:1,\VIT:1,\INT:1,\DEX:1,\LCK:1,\CM:魔神語を読めるようになる" 31490 DATA "\NM:ACCESSORY-02,\PR:0,\EQ:5,\CM:謎のアクセサリ2" 31500 DATA "\NM:ACCESSORY-03,\PR:0,\EQ:5,\CM:謎のアクセサリ3" 31510 DATA "\NM:ACCESSORY-04,\PR:0,\EQ:5,\CM:謎のアクセサリ4" 31520 DATA "\NM:ACCESSORY-05,\PR:0,\EQ:5,\CM:謎のアクセサリ5" 31530 DATA "\NM:ACCESSORY-06,\PR:0,\EQ:5,\CM:謎のアクセサリ6" 31540 DATA "\NM:ACCESSORY-07,\PR:0,\EQ:5,\CM:謎のアクセサリ7" 31550 DATA "\NM:ACCESSORY-08,\PR:0,\EQ:5,\CM:謎のアクセサリ8" 31560 DATA "\NM:ACCESSORY-09,\PR:0,\EQ:5,\CM:謎のアクセサリ9" 31570 DATA "\NM:ACCESSORY-10,\PR:0,\EQ:5,\CM:謎のアクセサリ10" 31580 !***** 通常アイテム ********************** 31590 DATA "\NM:薬草,\PR:8,\CM:HPを少し回復" 31600 DATA "\NM:解毒草,\PR:5,\CM:毒を消しさる" 31610 DATA "\NM:魔法草,\PR:20,\CM:MPを少し回復" 31620 DATA "\NM:たいまつ,\PR:1,\CM:暗がりを照らす" 31630 DATA "\NM:かぎ,\PR:100,\CM:かぎを開ける" 31640 DATA "\NM:聖水,\PR:20,\CM:モンスターを封じる" 31650 DATA "\NM:チァーイカの翼,\PR:0,\CM:城へひとっ飛び" 31660 DATA "\NM:しかのふん,\PR:0,\CM:謎のアイテム" 31670 DATA "\NM:NOPチップ,\PR:0,\CM:謎のアイテム9" 31680 DATA "\NM:トムの魂,\PR:0,\CM:不屈の精神が宿る" 31690 !***** イベントアイテム ****************** 31700 DATA "\NM:裏技メモ1,\PR:0,\CM:□を押しながら名前決定" 31710 DATA "\NM:裏技メモ2,\PR:0,\CM:R1を押しながら移動" 31720 DATA "\NM:裏技メモ3,\PR:0,\CM:SELECT+L1+R1" 31730 DATA "\NM:裏技メモ4,\PR:0,\CM:一回クリアすると・・・" 31740 DATA "\NM:仕様書の断片1,\PR:0,\CM:死ぬと中ボス復活" 31750 DATA "\NM:仕様書の断片2,\PR:0,\CM:フィールド魔法:今回は無し" 31760 DATA "\NM:仕様書の断片3,\PR:0,\CM:STARTでアイテムソート" 31770 DATA "\NM:仕様書の断片4,\PR:0,\CM:記録挑戦は裏技不可" 31780 DATA "\NM:USBキーボード,\PR:0,\CM:プログラマー必須アイテム?" 31790 DATA "\NM:覚えよう!xx-BASIC,\PR:0,\CM:初心者向けのマンガ本" 31800 !========================================= 31810 ! 魔法データ 31820 !----------------------------------------- 31830 LABEL MAGIC_TABLE 31840 DATA "\CM:ダミー" 31850 DATA "\NM:ヒール,\TP:3,\MP:3,\CM:体力回復(小)" 31860 DATA "\NM:スリープ,\TP:2,\MP:3,\CM:敵を眠らせる" 31870 DATA "\NM:ライト,\TP:1,\MP:3,\CM:洞窟を照らす" 31880 DATA "\NM:ファイア,\TP:2,\MP:3,\CM:炎の攻撃" 31890 DATA "\NM:サイレンス,\TP:2,\MP:4,\CM:敵の魔法を封じる" 31900 DATA "\NM:イグジット,\TP:1,\MP:6,\CM:ダンジョンから脱出" 31910 DATA "\NM:キュア,\TP:3,\MP:2,\CM:毒を消しさる" 31920 DATA "\NM:イリュージョン,\TP:2,\MP:2,\CM:敵の攻撃命中を下げる" 31930 DATA "\NM:ワープ,\TP:1,\MP:2,\CM:街へ移動" 31940 DATA "\NM:ブリザード,\TP:2,\MP:3,\CM:氷の攻撃" 31950 DATA "\NM:プロテクション,\TP:2,\MP:2,\CM:自分の防御力を上げる" 31960 DATA "\NM:スティール,\TP:1,\MP:4,\CM:弱い敵に遭わなくなる" 31970 DATA "\NM:ヒール2,\TP:3,\MP:5,\CM:体力回復(中)" 31980 DATA "\NM:リフレクション,\TP:2,\MP:6,\CM:全ての魔法を跳ね返す" 31990 DATA "\NM:ディテクション,\TP:1,\MP:1,\CM:罠、隠し通路などの発見" 32000 DATA "\NM:サンダー,\TP:2,\MP:6,\CM:雷の攻撃" 32010 DATA "\NM:マジックローブ,\TP:2,\MP:5,\CM:炎・冷気のダメージ軽減" 32020 DATA "\NM:リジェクション,\TP:1,\MP:8,\CM:ダメージ床無効" 32030 DATA "\NM:ヒール3,\TP:3,\MP:7,\CM:体力完全回復" 32040 DATA "\NM:ブースト,\TP:2,\MP:7,\CM:自分の攻撃力倍増" 32050 DATA "\NM:インフレーション,\TP:2,\MP:10,\CM:究極の攻撃魔法" 32060 DATA "\NM:アンロック,\TP:1,\MP:12,\CM:全ての扉を開ける" 32070 DATA "\NM:サモンスピリット,\TP:2,\MP:11,\CM:精霊が戦闘に加わる" 32080 DATA "\NM:ハルマゲドン,\TP:3,\MP:20,\CM:謎の究極魔法" 32090 !========================================== 32100 ! レイアウトデータのロード・表示 32110 !------------------------------------------ 32120 SUB LODISP(L()) 32130 ALTEST L(0) 32140 EFFECT L(1),L(2),L(3),L(4),L(5),L(6) 32150 AMBCOL L(7),L(8),L(9) 32160 FOR LO_I=1 TO 3 32170 LO_J=LO_I*6+4 32180 IF L(LO_J)=0 THEN 32190 LIGCOL LO_I,0,0,0 32200 LIGVEC LO_I,0,0,0 32210 ELSE 32220 LIGCOL LO_I,L(LO_J+1),L(LO_J+2),L(LO_J+3) 32230 CALL ROT2XYZ(LO_X,LO_Y,LO_Z,L(LO_J+4),L(LO_J+5),1000) 32240 LIGVEC LO_I,-LO_X,-LO_Y,-LO_Z 32250 END IF 32260 NEXT LO_I 32270 CAMROT 1,RAD(L(28)),RAD(L(29)),RAD(L(30)) 32280 CALL ROT2XYZ(LO_X,LO_Y,LO_Z,L(28),L(29),L(31)) 32290 CAMPOS 1,LO_X+L(32),LO_Y+L(33),LO_Z+L(34) 32300 CAMLENS 1,L(35) 32310 FOGCOL L(36),L(37),L(38) 32320 FOGSET L(39),L(40) 32330 FOR LO_I=1 TO 50 32340 LO_J=LO_I*15+27 32350 IF L(LO_J)=0 THEN 32360 MODOFF LO_I 32370 ELSE 32380 MODSET LO_I,L(LO_J+1),L(LO_J+2) 32390 MODROT LO_I,RAD(L(LO_J+3)),RAD(L(LO_J+4)),RAD(L(LO_J+5)) 32400 MODPOS LO_I,L(LO_J+6),L(LO_J+7),L(LO_J+8) 32410 MODOPT LO_I,L(LO_J+9)*.01,L(LO_J+10),L(LO_J+11),L(LO_J+12) 32420 MODJOIN LO_I,L(LO_J+13) 32430 MODDISP LO_I 32440 END IF 32450 NEXT LO_I 32460 END SUB 32470 !========================================== 32480 ! 極座標から直交座標へ変換 32490 !------------------------------------------ 32500 SUB ROT2XYZ(X,Y,Z,RX,RY,R) 32510 X= R*COS(RAD(RX))*SIN(RAD(RY)) 32520 Y=-R*SIN(RAD(RX)) 32530 Z=-R*COS(RAD(RX))*COS(RAD(RY)) 32540 END SUB 32550 !========================================== 32560 ! 街の処理 32570 !------------------------------------------ 32580 SUB TOWN(TOWN_NO) 32590 CALL ALL_CLEAR 32600 CALL SCREEN_MASK(2) 32610 TOWNCMD=0 32620 BGMLOAD "PGBS01T/LUNA4_11",1 32630 BGMPLAY 4 32640 RESTORE *TOWN_DATA 32650 FOR J=1 TO TOWN_NO 32660 READ TTBL$(0,0),TTBL$(0,1),TTBL_NUM 32670 FOR I=1 TO TTBL_NUM 32680 READ TTBL$(I,0),TTBL$(I,1) 32690 NEXT I 32700 NEXT J 32710 DO 32720 PALLOAD TTBL$(0,1) 32730 TEXLOAD TTBL$(0,1) 32740 MODLOAD TTBL$(0,1),1 32750 VARLOAD TTBL$(0,1),LDB 32760 CALL LODISP(LDB) 32770 CALL FADE_IN(1) 32780 A=0 32790 FOR I=1 TO TTBL_NUM 32800 A=MAX(A,LEN(TTBL$(I,0))) 32810 NEXT I 32820 CALL WDISP(0,25-INT(LEN(TTBL$(0,0))/2),0,LEN(TTBL$(0,0)),1,64) 32830 CALL WP(0,7,0,0,TTBL$(0,0),0,0) 32840 CALL WDISP(1,3,2,A+2,TTBL_NUM,64) 32850 FOR I=0 TO TTBL_NUM-1 32860 CALL WP(1,7,1,I,TTBL$(I+1,0),0,0) 32870 NEXT I 32880 CALL WDISP(2,3,TTBL_NUM+3,8,1,64) 32890 T$=" "+STR$(PP(3,MI))+"G" 32900 T$=T$(LEN(T$)-7:LEN(T$)) 32910 CALL WDISP(9,3,TTBL_NUM+5,8,1,64) 32920 CALL WP(2,7,0,0,T$,0,0) 32930 DO 32940 CALL WCSR(1,0,TOWNCMD,0,1,0,1) 32950 CALL TMSTR(T$) 32960 CALL WP(9,7,0,0,T$,0,0) 32970 LOOP UNTIL PADX(1,6,2)=1 32980 CALL WOFF(9,1,32) 32990 CALL WOFF(2,1,32) 33000 CALL WOFF(1,1,32) 33010 CALL WOFF(0,1,32) 33020 CALL FADE_OUT(1) 33030 CALL ALL_CLEAR 33040 SELECT CASE VAL(TTBL$(TOWNCMD+1,1)) 33050 CASE 0 ! 街を出る 33060 EXIT DO 33070 CASE 1 ! 宿屋 33080 CALL INN(TOWN_NO) 33090 BGMPLAY 4 33100 CASE 2 ! ショップ 33110 !CALL SHOP(TOWN_NO) 33120 !BGMPLAY 4 33130 CASE ELSE ! その他 33140 !CALL EVENT(VAL(TTBL$(TOWNCMD+1,1))) 33150 !BGMPLAY 4 33160 END SELECT 33170 LOOP 33180 CALL FADE_OUT(1) 33190 CALL ALL_CLEAR 33200 BGMLOAD "PGBS01T/ZEUS3",1 33210 BGMLOAD "PGBS01T/LUNA4_10",3 33220 BGMPLAY 3 33230 END SUB 33240 !------------------------------------------ 33250 LABEL TOWN_DATA 33260 DATA "第1の街","PGBS02T/STREET",2 33270 DATA "宿屋",1 33280 !DATA "武具屋",2 33290 !DATA "アイテム屋",2 33300 !DATA "酒場",3 33310 DATA "街を出る",0 33320 DATA "第2の街","PGBS02T/STREET",2 33330 DATA "宿屋",1 33340 !DATA "武具屋",2 33350 !DATA "アイテム屋",2 33360 !DATA "酒場",3 33370 DATA "街を出る",0 33380 DATA "第3の街","PGBS02T/STREET",2 33390 DATA "宿屋",1 33400 !DATA "武具屋",2 33410 !DATA "アイテム屋",2 33420 !DATA "酒場",3 33430 DATA "街を出る",0 33440 !========================================== 33450 ! 宿屋処理 33460 !------------------------------------------ 33470 SUB INN(INN_NO) 33480 INNCMD=0 33490 CALL ALL_CLEAR 33500 CALL SCREEN_MASK(2) 33510 RESTORE *INN_DATA 33520 FOR I=1 TO INN_NO 33530 READ INN_NAME$,INN_FILE$,INN_COST 33540 NEXT I 33550 PALLOAD INN_FILE$ 33560 TEXLOAD INN_FILE$ 33570 MODLOAD INN_FILE$,1 33580 VARLOAD INN_FILE$,LDB 33590 CALL LODISP(LDB) 33600 BGMPLAY 1 33610 CALL FADE_IN(1) 33620 CALL WDISP(0,25-INT(LEN(INN_NAME$)/2),0,LEN(INN_NAME$),1,64) 33630 CALL WP(0,7,0,0,INN_NAME$,0,0) 33640 CALL WDISP(4,6,18,40,5,256) 33650 CALL WP(4,7,0,0,"「いらっしゃい!」",1,1) 33660 DO 33670 CALL WDISP(1,3,2,14,3,64) 33680 CALL WP(1,7,1,0,"主と話す",0,0) 33690 CALL WP(1,7,1,1,"泊まる("+STR$(INN_COST)+"G)",0,0) 33700 CALL WP(1,7,1,2,"宿屋を出る",0,0) 33710 CALL WDISP(2,3,6,8,1,64) 33720 T$=" "+STR$(PP(3,MI))+"G" 33730 T$=T$(LEN(T$)-7:LEN(T$)) 33740 CALL WP(2,7,0,0,T$,0,0) 33750 CALL WDISP(9,3,8,8,1,64) 33760 DO 33770 DO 33780 CALL WCSR(1,0,INNCMD,0,1,0,1) 33790 CALL TMSTR(T$) 33800 CALL WP(9,7,0,0,T$,0,0) 33810 LOOP UNTIL PADX(1,6,2)=1 33820 SELECT CASE INNCMD 33830 CASE 0 33840 CALL WOFF(4,0,0) 33850 RESTORE *INN_MSG 33860 DO 33870 READ S$ 33880 LOOP UNTIL S$="^"+STR$(INN_NO) 33890 A=INT(RND*100) 33900 DO 33910 DO 33920 READ S$ 33930 LOOP UNTIL S$(1:1)="%" 33940 S$(1:1)="" 33950 LOOP UNTIL VAL(S$)>=A 33960 DO 33970 READ S$ 33980 IF S$="^E" THEN EXIT DO 33990 CALL WP(4,7,-1,-1,S$,1,1) 34000 LOOP 34010 CASE 1 34020 CALL WOFF(4,0,0) 34030 IF PP(3,MI)-INN_COST<0 THEN 34040 S$="「お金が足りないみたいだが・・・」" 34050 CALL WP(4,7,0,0,S$,1,1) 34060 ELSE 34070 S$="「それではごゆっくり。」" 34080 CALL WP(4,7,0,0,S$,1,1) 34090 PP(3,MI)=PP(3,MI)-INN_COST 34100 T$=" "+STR$(PP(3,MI))+"G" 34110 T$=T$(LEN(T$)-7:LEN(T$)) 34120 CALL WP(2,7,0,0,T$,0,0) 34130 SEPLAY 19,255*VOL,255*VOL 34140 FSYNC 60 34150 CALL FADE_OUT(1) 34160 CALL WOFF(4,0,0) 34170 CALL WOFF(9,1,32) 34180 CALL WOFF(2,1,32) 34190 CALL WOFF(1,1,32) 34200 PP(11,MI)=PP(12,MI) 34210 PP(13,MI)=PP(14,MI) 34220 FSYNC 240 34230 CALL FADE_IN(1) 34240 S$="「おはよう。よく眠れたかい?」" 34250 CALL WP(4,7,0,0,S$,1,1) 34260 EXIT DO 34270 END IF 34280 CASE 2 34290 CALL WOFF(4,0,0) 34300 S$="「またのご利用を。」" 34310 CALL WP(4,7,0,0,S$,1,1) 34320 FSYNC 60 34330 CALL FADE_OUT(1) 34340 CALL WOFF(2,1,32) 34350 CALL WOFF(9,1,32) 34360 CALL WOFF(1,1,32) 34370 CALL WOFF(4,1,32) 34380 CALL WOFF(0,1,32) 34390 EXIT DO 34400 END SELECT 34410 LOOP 34420 LOOP UNTIL INNCMD=2 34430 END SUB 34440 !------------------------------------------ 34450 LABEL INN_DATA 34460 DATA "第1の宿屋","PGBS02T/SCENE03",10 34470 DATA "第2の宿屋","PGBS02T/SCENE03",20 34480 DATA "第3の宿屋","PGBS02T/SCENE03",30 34490 !------------------------------------------ 34500 LABEL INN_MSG 34510 DATA "^1" 34520 DATA "%12","「この前『まっさあ』とかいうのがやって来て、なんでも\'すたっふ\'(?)とかいうのを募集してるんだそうな」(笑)","^E" 34530 DATA "%24","「L2・R2で音が出たり消えたりするんだと。外でやらないと駄目らしいが」","^E" 34540 DATA "%36","「コンテスト締め切り前で手が離せないんだ。お代はその辺に置いといてくれ」","^E" 34550 DATA "%48","「最近の噂じゃ、この世界は\'ざんてい\'(?)なんだと。\nなんのことだか、さっぱりわからねぇが・・・」","^E" 34560 DATA "%60","「\'ネットワーク\'とかいう魔法を使えばいろんな世界が繋がってしまうらしいな。" 34570 DATA "\nそれで客が増えるんなら、うちは大助かりだが」(笑)","^E" 34580 DATA "%72","「遠い国から×(ばつ)と書いた大きな黒い箱が襲ってくるという噂だ」","^E" 34590 DATA "%84","「『美和』というシナリオ担当があれこれ文句をつけてたらしいな。仕事、ちゃんとやってたんだかねぇ・・・」","^E" 34600 DATA "%100","「やっぱりバランス取るのは難しいぞ。あとPCからの転送も公式サポートしてほしいもんだが。" 34610 DATA "・・・いや、独り言だ」","^E" 34620 DATA "^2" 34630 DATA "%12","「昨日来た客が、『時間がない』だとか『年休使いすぎた』とか、ぶつぶつ言っていてね。" 34640 DATA "ありゃあ相当疲れてるなぁ」(苦笑)","^E" 34650 DATA "%24","「なんでも、”ぷろじぇくと・がんま”は、まったく別のジャンルのゲームも企画しているってさ」","^E" 34660 DATA "%36","「なんでもこの世界を動かしているのはベーシックとか言う太古の言葉らしいぞ」","^E" 34670 DATA "%48","「やっぱりバランス取るのは難しいぞ。あとPCからの転送も公式サポートしてほしいもんだが。・・・いや、独り言だ」","^E" 34680 DATA "%60","「最近は別の世界では『召喚士』とかいうのが幅を利かせているらしいな・・・」","^E" 34690 DATA "%72","「『まっさあ』とかいうのは、”でぃれくたー”(?)とは名ばかりで、人に仕事を任せっきりだったらしいなぁ・・・」","^E" 34700 DATA "%84","「この世界をつづる道具を売る話があるらしいぜ」","^E" 34710 DATA "%96","「自称ヘビーゲーマって言ってるやつがいたな、確か…MKNとか名のってたな」(笑)","^E" 34720 DATA "%100","「ここが”どこかで見た世界だ”なんて言わないほうがいいぜ」","^E" 34730 DATA "^3" 34740 DATA "%12","「×なんとかってのはPCとかいうやつの性能とほぼ同じらしいな」","^E" 34750 DATA "%24","「この世界が誕生する以前は、世界は『魔神語』を操る神々に支配されていたんだと!」","^E" 34760 DATA "%36","「変わった連中の話題ばっかですまんな」","^E" 34770 DATA "%48","「AKAってなんか仕事してたのかな?・・・・・・ん? AKAって誰だ?」","^E" 34780 DATA "%60","「『ぷろじぇくと・がんま』(?)って連中が最近、容量がなんとかならないのか! ってぼやいてたな」","^E" 34790 DATA "%72","「お前は占いは信じるか? MKNってやつは風水って占いは信じないらしいぞ」","^E" 34800 DATA "%84","「おはりとchabaと済帝紅でプログラマー部隊だって、誰かが言ってたな」","^E" 34810 DATA "%100","「Projectγ(プロジェクト・ガンマ)のHPは\nhttp://www.project-gamma.org/らしいな」","^E" 34820 !========================================== 34830 ! シナリオイベント(3D)スクリプト処理 34840 !------------------------------------------ 34850 SUB SCENE(EVENT) 34860 EVADRS=0 34870 RESTORE *SCENE_DATA 34880 DO 34890 READ S$ 34900 EVADRS=EVADRS+1 34910 IF S$="^LABEL" THEN 34920 READ S 34930 EVADRS=EVADRS+1 34940 IF S=EVENT THEN EXIT DO 34950 END IF 34960 LOOP 34970 DO 34980 READ S$ 34990 EVADRS=EVADRS+1 35000 SELECT CASE S$ 35010 CASE "^IF" ! 条件分岐 35020 READ S$ 35030 EVADRS=EVADRS+1 35040 IF S$="LOSE" AND BTLRSLT<>1 THEN 35050 DO 35060 READ S$ 35070 EVADRS=EVADRS+1 35080 LOOP UNTIL S$="^ENDIF" 35090 END IF 35100 CASE "^ENDIF" ! 分岐終了 35110 ! 何もしない 35120 CASE "^LABEL" ! ラベル行 35130 READ S 35140 EVADRS=EVADRS+1 35150 CASE "^EVFLAG" ! イベントフラグ操作 35160 READ S 35170 EVADRS=EVADRS+1 35180 EVFLAG=S 35190 CASE "^FSYNC" ! 強制ウェイト 35200 READ S 35210 EVADRS=EVADRS+1 35220 FSYNC S 35230 CASE "^FSYNCX" ! スキップ付ウェイト 35240 READ S 35250 EVADRS=EVADRS+1 35260 CALL FSYNCX(S) 35270 CASE "^PALLOAD" ! パレットロード 35280 READ S$ 35290 EVADRS=EVADRS+1 35300 PALLOAD S$ 35310 CASE "^TEXLOAD" ! テクスチャロード 35320 READ S$ 35330 EVADRS=EVADRS+1 35340 TEXLOAD S$ 35350 CASE "^MODLOAD" ! モデルロード 35360 READ S$,S 35370 EVADRS=EVADRS+2 35380 MODLOAD S$,S 35390 CASE "^BGMLOAD" ! BGMロード 35400 READ S$,S 35410 EVADRS=EVADRS+2 35420 BGMLOAD S$,S 35430 CASE "^SELOAD" ! SEロード 35440 READ S$ 35450 EVADRS=EVADRS+1 35460 SELOAD S$ 35470 CASE "^LOLOAD" ! レイアウトロード 35480 READ S$ 35490 EVADRS=EVADRS+1 35500 VARLOAD S$,LDB 35510 CASE "^BGMPLAY" ! BGM PLAY 35520 READ S,R 35530 EVADRS=EVADRS+2 35540 VOLUME R*VOL 35550 BGMPLAY S 35560 CASE "^BGMFO" ! BGM FADE OUT 35570 FOR S=255 TO 0 STEP -1 35580 VOLUME S*VOL 35590 FSYNC 1 35600 NEXT S 35610 BGMSTOP 35620 CASE "^SEPLAY" ! SE PLAY 35630 READ S,L,R 35640 EVADRS=EVADRS+3 35650 SEPLAY S,L*VOL,R*VOL 35660 CASE "^LODISP" ! レイアウト表示 35670 CALL LODISP(LDB) 35680 CASE "^AC" ! 全消去 35690 CALL ALL_CLEAR 35700 CASE "^SMASK" ! スクリーンマスク 35710 CALL SCREEN_MASK(2) 35720 CASE "^FI" ! フェードイン 35730 CALL FADE_IN(1) 35740 CASE "^FO" ! フェードアウト 35750 CALL FADE_OUT(1) 35760 CASE "^WDISP" ! ウィンドウ表示 35770 CALL WDISP(0,6,18,40,5,256) 35780 CASE "^WOFFA" ! ウィンドウ全消去 35790 CALL WOFF(0,1,128) 35800 CASE "^WOFFT" ! ウィンドウ文字消去 35810 CALL WOFF(0,0,0) 35820 CASE "^CALL" ! イベントコール 35830 READ S 35840 EVADRS=EVADRS+1 35850 EVSTACK(EVSTACKP)=EVADRS 35860 EVSTACKP=EVADRSP+1 35870 CALL EVENT(S) 35880 EVSTACKP=EVSTACKP-1 35890 EVADRS=EVSTACK(EVSTACKP) 35900 RESTORE *SCENE_DATA 35910 FOR I=1 TO EVADRS 35920 READ S$ 35930 NEXT I 35940 CASE "^GOTO" ! イベントジャンプ 35950 READ EVENT 35960 EVADRS=0 35970 RESTORE *SCENE_DATA 35980 DO 35990 READ S$ 36000 EVADRS=EVADRS+1 36010 IF S$="^LABEL" THEN 36020 READ S 36030 EVADRS=EVADRS+1 36040 IF S=EVENT THEN EXIT DO 36050 END IF 36060 LOOP 36070 CASE "^RET" ! イベント終了 36080 EXIT DO 36090 CASE "^MAPLOAD" ! MAPロード 36100 READ S$ 36110 EVADRS=EVADRS+1 36120 CALL LOAD_MAP(S$) 36130 CASE "^MAPDISP" ! MAP表示(フェードイン) 36140 CALL ALL_CLEAR 36150 MV(MI)=0 36160 CALL INIT_MYCHARA 36170 CALL INIT_FIELD(X_,Y_,Z_) 36180 EXIT DO 36190 CASE "^POS" ! フィールド座標指定 36200 READ X_,Y_,Z_ 36210 EVADRS=EVADRS+3 36220 CASE "^RESTART" ! 死亡後STATUS再設定 36230 PP(11,1)=PP(12,1) 36240 PP(13,1)=PP(14,1) 36250 PP(3,1)=INT(PP(3,1)/2) 36260 CASE "^BATTLE" ! 戦闘 36270 READ S,T 36280 EVADRS=EVADRS+2 36290 EVSTACK(EVSTACKP)=EVADRS 36300 EVSTACKP=EVADRSP+1 36310 CALL BATTLE(S,T) 36320 EVSTACKP=EVSTACKP-1 36330 EVADRS=EVSTACK(EVSTACKP) 36340 RESTORE *SCENE_DATA 36350 FOR I=1 TO EVADRS 36360 READ S$ 36370 NEXT I 36380 CASE "^MCDCHNG" ! MAP-CHIP DATA置換 36390 READ X,Y,Z,S,T 36400 EVADRS=EVADRS+5 36410 IF X<0 THEN X=X_ 36420 IF Y<0 THEN Y=Y_ 36430 IF Z<0 THEN Z=Z_ 36440 H=(X*XF_(Z)+Y+ZO_(Z))*2 36450 CALL D2B(BDB,H_,H) 36460 BDB(S)=T 36470 CALL B2D(H_,BDB,H) 36480 CASE ELSE ! ウインドウ文字表示 36490 CALL WP(0,7,-1,-1,S$,1,1) 36500 PADX(1,6,2),PADX(1,7,2)=2 36510 PADX(1,6,3),PADX(1,7,3)=0 36520 DO 36530 CALL PADX(1) 36540 LOOP UNTIL PADX(1,6,2)=1 OR PADX(1,7,2)=1 36550 END SELECT 36560 LOOP 36570 END SUB 36580 !========================================== 36590 ! イベントスクリプトデータ 36600 !------------------------------------------ 36610 LABEL SCENE_DATA 36620 !****************************************** 36630 DATA "^LABEL",996 36640 DATA "^POS",12,22,0 36650 DATA "^MAPLOAD","PGBS00T/WORLD2" 36660 DATA "^BGMLOAD","PGBS01T/ZEUS3",1 36670 DATA "^BGMLOAD","PGBS01T/ZEUS5",2 36680 DATA "^BGMLOAD","PGBS01T/LUNA4_10",3 36690 DATA "^BGMPLAY",3,255 36700 DATA "^MAPDISP" 36710 !****************************************** 36720 DATA "^LABEL",1 36730 DATA "^SEPLAY",6,255,255 36740 DATA "^BATTLE",257,96 36750 DATA "^IF","LOSE" 36760 DATA "^GOTO",998 36770 DATA "^ENDIF" 36780 DATA "^MCDCHNG",-1,-1,-1,9,0 36790 DATA "^BGMPLAY",3,255 36800 DATA "^MAPDISP" 36810 !****************************************** 36820 DATA "^LABEL",2 36830 DATA "^SEPLAY",20,255,255 36840 DATA "^FSYNC",20 36850 DATA "^SEPLAY",20,255,255 36860 DATA "^FSYNC",20 36870 DATA "^SEPLAY",20,255,255 36880 DATA "^FSYNC",20 36890 DATA "^BATTLE",256,96 36900 DATA "^IF","LOSE" 36910 DATA "^GOTO",998 36920 DATA "^ENDIF" 36930 DATA "^MCDCHNG",-1,-1,-1,9,0 36940 DATA "^EVFLAG",1 36950 DATA "^BGMPLAY",3,255 36960 DATA "^MAPDISP" 36970 !****************************************** 36980 DATA "^LABEL",997 36990 DATA "^AC" 37000 DATA "^SMASK" 37010 DATA "^BGMPLAY",4,255 37020 DATA "^LOLOAD","PGBS02T/SCENE07" 37030 DATA "^LODISP" 37040 DATA "^FI" 37050 DATA "^WDISP" 37060 DATA "\m「エリザック王女! 助けにまいりました!」" 37070 DATA "\nエリザック「・・・・・」" 37080 DATA "^WOFFA" 37090 DATA "^FO" 37100 DATA "^RET" 37110 !****************************************** 37120 DATA "^LABEL",998 37130 DATA "^AC" 37140 DATA "^SMASK" 37150 DATA "^PALLOAD","PGBS01T/SCENE05" 37160 DATA "^TEXLOAD","PGBS01T/SCENE05" 37170 DATA "^BGMLOAD","PGBS01T/LUNA4_3",1 37180 DATA "^BGMPLAY",1,255 37190 DATA "^MODLOAD","PGBS01T/SCENE05",1 37200 DATA "^LOLOAD","PGBS01T/SCENE05" 37210 DATA "^LODISP" 37220 DATA "^FI" 37230 DATA "^WDISP" 37240 DATA "ガンダルシア王「\mよ、志なかばで倒れてしまうとは何事だ!」" 37250 DATA "\n\m「・・・・・」" 37260 DATA "\nガンダルシア王「そなたの力、決してその程度のものではないはず・・・」" 37270 DATA "\eガンダルシア王「その身に秘めたる真の力を引き出し、見事エリザックを連れ戻すのだ。" 37280 DATA "期待しているぞ。」" 37290 DATA "\n\m「はい。」" 37300 DATA "\nガンダルシア王「では、ゆくがよい。」" 37310 DATA "^WOFFA" 37320 DATA "^FO" 37330 DATA "^AC" 37340 DATA "^POS",12,22,0 37350 DATA "^RESTART" 37360 DATA "^BGMLOAD","PGBS01T/ZEUS3",1 37370 DATA "^BGMLOAD","PGBS01T/LUNA4_10",3 37380 DATA "^BGMPLAY",3,255 37390 DATA "^MAPDISP" 37400 !****************************************** 37410 DATA "^LABEL",999 37420 DATA "^AC" 37430 DATA "^SMASK" 37440 DATA "^PALLOAD","PGBS02T/SCENE01" 37450 DATA "^TEXLOAD","PGBS02T/SCENE01" 37460 DATA "^BGMPLAY",1,255 37470 DATA "^WDISP" 37480 DATA "^MODLOAD","PGBS02T/SCENE01",1 37490 DATA "^LOLOAD","PGBS02T/SCENE01" 37500 DATA "^LODISP" 37510 DATA "年に一度の、スリキュールの建国王アルディーン・スリキュールの慰霊祭の最中。" 37520 DATA "\n王位に就いている者のみが入ることが許される、王城の地下深くにある建国王の霊廟で、儀式が行わていた。" 37530 DATA "^FI" 37540 DATA "\e儀式が終わるのを待つ家臣の前に、1人の赤子を抱きかかえてガンダルシア・スリキュール王が現われた。" 37550 DATA "\n興奮に息を荒げながら、王は言った。" 37560 DATA "\nこの赤子を、『\m』と名付けると・・・" 37570 DATA "\eエリザック王女の誕生と同時に王妃に先立たれたばかりで、悲しみにくれていたガンダルシア王は、" 37580 DATA "待望の男子を得たと、周囲の反対を押し切り、\mを王女と共に王城で育てることにした。" 37590 DATA "\nそれと時を同じくして、平和だったスリキュールの周囲に、魔物が現れるようになった。" 37600 DATA "^FO" 37610 DATA "王城の周囲は、兵士も多く、被害がでることは稀であったが、" 37620 DATA "行商人や旅人は、武具を持たずに町から町へと移動することはできなくなっていた。" 37630 DATA "\e身寄りのない自分を育て上げてくれた王の恩義に報いようと、" 37640 DATA "\mは、王の役に立てるように戦士となるべく鍛錬をはじめていた。" 37650 DATA "\n王は、\mの成長振りを喜び、家臣にそれぞれの得意分野での\m専属の師範となることを命じ、" 37660 DATA "自らも、帝王学を教えるようになった。" 37670 DATA "\e吸収の早い\mは、武芸・魔法・学問などあらゆることに、並々ならぬ才を発揮しだしていた。" 37680 DATA "\n寡黙ながらも、誠実さと優しさと強さを身に付けた\mが、" 37690 DATA "ガンダルシア王に見出されてから、15回目のアルディーンの慰霊祭をまじかに控えた、ある日。" 37700 DATA "^WOFFT" 37710 DATA "^PALLOAD","PGBS01T/SCENE05" 37720 DATA "^TEXLOAD","PGBS01T/SCENE05" 37730 DATA "^MODLOAD","PGBS01T/SCENE05",1 37740 DATA "^LOLOAD","PGBS01T/SCENE05" 37750 DATA "^LODISP" 37760 DATA "^FI" 37770 DATA "ガンダルシア王「もうすぐオマエと出会ってから15回目のアルディーンの慰霊祭だな」" 37780 DATA "\n\m「はい」" 37790 DATA "\e普段から口数の少ない\mは、傍から見れば無愛想としかとれない返事をした。" 37800 DATA "\nだがその\mの表情には、ガンダルシア王への敬意で溢れていた。" 37810 DATA "\nガンダルシア王も\mのその性分を十分に理解していた。" 37820 DATA "\eガンダルシア王「\mよ、久しぶりにエリザックを連れて散歩に行ってくれないか?」" 37830 DATA "\n\m「・・・はい。かしこまりました」" 37840 DATA "\n\mは軽く一礼をすると退室した。" 37850 DATA "^FO" 37860 DATA "\e\mが出ていったのを見届け王は呟いた。" 37870 DATA "\nガンダルシア王「\mがエリザックの夫としてこの国を治めてくれたらどんなに嬉しいか」" 37880 DATA "\nその呟きを家臣は聞き逃さず釘をさす。" 37890 DATA "\e家臣「王。あのような身分の分からぬ者にそのような事を望んではなりません!" 37900 DATA "\nきっとエリザック王女にはもっとお似合いの・・・」" 37910 DATA "\n王は、それを遮り席を立った。" 37920 DATA "^WOFFT" 37930 DATA "^LOLOAD","PGBS02T/SCENE06" 37940 DATA "^LODISP" 37950 DATA "^BGMPLAY",4,255 37960 DATA "^FI" 37970 DATA "エリザック「ねぇ\m。お父さんはね、アナタに国王を継いでもらいたいんだって」" 37980 DATA "\n\m「・・・僕は、そんな器じゃないですよ・・・」" 37990 DATA "\n俯き加減に隣を歩く\mの方を向き直り、" 38000 DATA "\nエリザック「もう、ちゃんと話は最後まで聞いてよ」" 38010 DATA "\n\m「はい・・・」" 38020 DATA "\n\mの態度に勢いをそがれたのか、ややさっきより照れ気味に" 38030 DATA "\eエリザック「だからぁ、ね。私の夫としてこの国を治めて欲しいのよ、お父さんは」" 38040 DATA "\nさすがの\mもこれにはたじろぎ、" 38050 DATA "\n\m「え、いや・・・あの・・・」" 38060 DATA "\n焦る\mにはお構いなしに、エリザックは\mの腕に手を絡めてくる。" 38070 DATA "\n\m「姫、駄目ですよ・・・。こんなこと」" 38080 DATA "\nエリザック「いいのよ、別に。それにね・・・、私も\mのこと・・・」" 38090 DATA "\nお互いの時が止まり、再び時間が動き出そうという時にそれは起こった。" 38100 DATA "^BGMPLAY",2,255 38110 DATA "\e「ひぃぃぃぃーーー!!」" 38120 DATA "\n兵士の控える後方より悲鳴が聞こえてきた。" 38130 DATA "\n異変を察知した前方の兵士が姫の周りを囲む。" 38140 DATA "\n\mも後方の敵に備え、腰のレイピアに手をかける。" 38150 DATA "\e「グルルルル・・・」" 38160 DATA "\n森の奥より一匹の魔物が現れた。" 38170 DATA "\nその体はさっきまで護衛をしていた兵の返り血を浴び、赤く染まっていた。" 38180 DATA "\e「はぁぁぁぁぁぁぁっっっ!!」" 38190 DATA "^SEPLAY",10,255,255 38200 DATA "^FSYNC",15 38210 DATA "^SEPLAY",8,255,255 38220 DATA "\n魔物が襲いかかるよりも速く、\mの剣先が魔物の喉元を突き通る。" 38230 DATA "\n魔物から噴出した大量の鮮血が、兵の血で染まった魔物の体をもう一度染め直す。" 38240 DATA "\eエリザック「キャアァァァァ!!」" 38250 DATA "\n姫を守りながらどれくらいの数の魔物を切っただろうか、" 38260 DATA "\n\mの体は返り血で真っ赤に染まっていた。" 38270 DATA "\eエリザック「大丈夫?\m」" 38280 DATA "\n\m「ええ、大丈夫ですよ。アナタのことは、必ず守ります」" 38290 DATA "\n肩で息をしながらも、普段の\mからは想像も出来ない力強い口調で\mは言う。" 38300 DATA "\nその\mに姫は、いつも以上に心引かれた。" 38310 DATA "^FO" 38320 DATA "^WOFFT" 38330 DATA "^LOLOAD","PGBS02T/SCENE02" 38340 DATA "^LODISP" 38350 DATA "^FSYNC",120 38360 DATA "^SEPLAY",7,255,255 38370 DATA "\e\n\n「ガシッ!」" 38380 DATA "^WOFFT" 38390 DATA "^SEPLAY",20,255,255 38400 DATA "^FSYNC",20 38410 DATA "^SEPLAY",20,255,255 38420 DATA "^FSYNC",20 38430 DATA "^SEPLAY",20,255,255 38440 DATA "^FI" 38450 DATA "鈍い音が響いた。さすがの\mにも疲れが出始めた頃、背後からの魔物の一撃をまともにくらってしまった。" 38460 DATA "\n\mは遠のく意識の中、さらわれていく姫の姿を成す術も無く見届けることしか出来なかった。" 38470 DATA "^FO" 38480 DATA "^BGMFO" 38490 DATA "\e\m「痛っ!」" 38500 DATA "\n再び意識を取り戻した\mの周りには大量の魔物の死骸と、兵士の死体だった。" 38510 DATA "\nそして一番なくてはならない姫の姿はそこにはなかった。" 38520 DATA "\e「チックショォォォォォ!!!!」" 38530 DATA "\n\mは生まれて初めて、大声で叫んだ。何度も何度も・・・。" 38540 DATA "^WOFFT" 38550 DATA "^PALLOAD","PGBS01T/SCENE05" 38560 DATA "^TEXLOAD","PGBS01T/SCENE05" 38570 DATA "^BGMPLAY",1,255 38580 DATA "^MODLOAD","PGBS01T/SCENE05",1 38590 DATA "^LOLOAD","PGBS01T/SCENE05" 38600 DATA "^LODISP" 38610 DATA "^FI" 38620 DATA "ガンダルシア王「なにぃ、エリザックがさらわれただと!?」" 38630 DATA "\n\m「はい・・・、私がふがいないばかりに」" 38640 DATA "\eガンダルシア王「ええぃ、兵を集めよ!何としてもエリザックを助け出すのじゃ!」" 38650 DATA "\n兵「はっ!」" 38660 DATA "\eガンダルシア王「\m、おまえはここに残れ!」" 38670 DATA "\n\m「何故ですか? 私に姫を助けに行かせてください」" 38680 DATA "\nガンダルシア王「違うのだ\mよ・・・。" 38690 DATA "エリザックだけではなく、オマエまで居なくなったらワシはどうすればいいんだ」" 38700 DATA "\n\m「・・・」" 38710 DATA "\nガンダルシア王「・・・・・」" 38720 DATA "^WOFFT" 38730 DATA "^BGMLOAD","PGBS01T/ZEUS3",1 38740 DATA "^BGMLOAD","PGBS01T/ZEUS5",2 38750 DATA "^BGMPLAY",3,255 38760 DATA "\m「・・・僕は、行きます!」" 38770 DATA "\nガンダルシア王「\mよ・・・」" 38780 DATA "\n\m「一度だけ・・・、一度だけ私の我侭を聞き届けください!姫を・・・、" 38790 DATA "姫をこの手で救いたい!」" 38800 DATA "\nガンダルシア王「・・・・・・」" 38810 DATA "\n\m「僕は姫と約束しました・・・。どんなことがあっても必ず守ると!」" 38820 DATA "\nガンダルシア王「・・・\m、どうしても行くのか?」" 38830 DATA "\n\m「はい・・・」" 38840 DATA "\eガンダルシア王「まて、\mよ!」" 38850 DATA "\nガンダルシア王「これを持っていけ・・・」" 38860 DATA "^SEPLAY",18,255,255 38870 DATA "\nガンダルシア王、\mに剣と防具とお金を渡した。" 38880 DATA "\nガンダルシア王「そのかわり・・・、必ず、必ず生きて帰ってくるんだぞ!」" 38890 DATA "\n\m「・・・」" 38900 DATA "\e\m「はい!」" 38910 DATA "^WOFFA" 38920 DATA "^FO" 38930 DATA "^POS",12,22,0 38940 DATA "^MAPLOAD","PGBS00T/WORLD2" 38950 DATA "^MAPDISP" 38960 !========================================= 38970 ! 戦闘処理 38980 !----------------------------------------- 38990 SUB BATTLE(EID,GND) ! BATTLE-SKIN 39000 IF EID<256 THEN BGMPLAY 2 ELSE BGMPLAY 1 39010 CALL FADE_OUT(1) 39020 CALL ALL_CLEAR 39030 CALL SCREEN_MASK(2) 39040 CALL WDISP(0,6,18,40,5,128) 39050 SLRATE=0.5 39060 WURATE=0.2 39070 BTTURN=0 39080 CALL BATTLE0(EID,GND) 39090 IF BTSP=0 THEN FSYNC 60 ELSE FSYNC 30 39100 CALL WOFF(0,1,64) 39110 CALL WOFF(1,1,0) 39120 CALL FADE_OUT(1) 39130 CALL ALL_CLEAR 39140 IF BTLRSLT=0 THEN PP(250,1)=PP(250,1)+1 39150 IF BTLRSLT=1 THEN PP(251,1)=PP(251,1)+1 39160 IF BTLRSLT=2 THEN PP(252,1)=PP(252,1)+1 39170 END SUB 39180 !========================================= 39190 SUB BWP(S$,W,F) ! 文字列表示の拡張 39200 IF BTSP=0 THEN 39210 CALL WP(0,7,-1,-1,S$,W,1) 39220 CALL FSYNCX(F) 39230 ELSE 39240 CALL WP(0,7,-1,-1,S$,0,0) 39250 CALL FSYNCX(20) 39260 END IF 39270 END SUB 39280 !========================================== 39290 SUB BPAD(RET0,E,S) ! PAD入力 39300 RET0=0 39310 FOR I=5 TO E 39320 IF S<>1 OR I<>7 OR PP(256,1)=0 THEN 39330 P=PAD(1,I) 39340 IF P>PADX(1,I,5) THEN RET0=I 39350 IF RET0>0 THEN EXIT FOR 39360 END IF 39370 NEXT I 39380 END SUB 39390 !========================================== 39400 ! BATTLE - MAIN 39410 !========================================== 39420 SUB BATTLE0(EID,GND) 39430 CALL DATARESTORE(EID,GND,BGKIND) ! 地面種類によって種別の切り分け 39440 READ N 39450 M=INT(RND*N)+1 39460 FOR I=1 TO M 39470 READ N$, A1,A2,A3,A4,A5, M_XHP, M_STR,M_GRD,M_INT,M_DEX,M_LCK, M_MON,M_EXP 39480 NEXT I 39490 CALL MSET 39500 CALL GAMEN 39510 CALL BACK((BGKIND)) 39520 MODSET 1,A1,A2 39530 MODOPT 1,1,1,0,1 39540 AMBCOL A3,A4,A5 39550 MODDISP 1 39560 CALL FADE_IN(1) 39570 CALL BWP(N$+"が現れた!",1,60) 39580 CALL WDISP(1,1,1,8,3,0) ! STATUS WINDOW 39590 SLEEP=0 39600 !!PP(41,2)=STR ! 装備品など未考慮: 39610 !!PP(42,2)=GRD ! 敵の装備品修正は不要では? 39620 !!PP(25,2)=DEX 39630 !!PP(26,2)=LCK 39640 !!PP(11,2)=XHP !!! PPの定義が(256,1)なので(*,2)は使用不可 39650 DO 39660 CALL PRINTSTAT ! FOR DEBUG 39670 LABEL BTCM 39680 ! CALL BTLCOMMAND(1,COM1) ! コマンド入力 39690 CALL BTLMAINCOM(COM1) ! コマンド入力 39700 IF COM1=2 THEN ! 呪文 39710 IF PP(13,1)<3 THEN ! 暫定:消費MPは全部3 39720 CALL BWP("\eMPが足りない!",1,30) 39730 GOTO *BTCM 39740 END IF 39750 ! CALL BTLCOMMAND(2,COM2) ! コマンド入力 39760 CALL BTLMAGICCOM(COM2) ! コマンド入力 39770 IF COM2=-1THEN *BTCM 39780 ELSEIF COM1=4 THEN ! 道具 39790 CALL BTLCOMMAND(3,COM2) ! コマンド入力 39800 IF COM2=7 THEN *BTCM 39810 ELSEIF COM1=6 THEN ! 速度切替 39820 BTSP=1-BTSP 39830 GOTO *BTCM 39840 END IF 39850 IF COM1=5 THEN ! 逃げ 39860 BTTURN=BTTURN+1 39870 CALL BWP("\e\mは逃げ出した!",1,30) 39880 IF EID>=256 OR RND<0.5 THEN ! すばやさ未考慮&ボスなら逃げ不可 39890 CALL BWP("\nしかし、回り込まれてしまった!",1,30) 39900 CALL BMONSTER 39910 ELSE 39920 BTLRSLT=2 39930 EXIT SUB 39940 END IF 39950 ELSE 39960 T=INT(PP(65,1)*(0.5+RND)-M_DEX) !!! 先攻判断 39970 IF T>0 THEN 39980 CALL BPLAYER((COM1),(COM2)) 39990 IF M_XHP>0 THEN CALL BMONSTER 40000 ELSE 40010 CALL BMONSTER 40020 IF PP(11,1)>0 THEN CALL BPLAYER((COM1),(COM2)) 40030 END IF 40040 END IF 40050 IF PP(11,1)<=0 THEN !!! 死亡(かなり暫定) 40060 BGMSTOP 40070 FSYNC 60 40080 SEPLAY 17,200*VOL,200*VOL 40090 CALL BWP("\e\mは力つきた!",1,60) 40100 FSYNC 120 40110 BTLRSLT=1 40120 EXIT SUB 40130 ELSEIF M_XHP<=0 THEN !!! 敵を倒した 40140 MODOFF 1 40150 CALL BWP("\e"+N$+"を倒した!",1,60) 40160 IF M_EXP>0 THEN CALL BWP("\n"+STR$(M_EXP)+"の経験値取得",1,0) 40170 IF M_MON>0 THEN CALL BWP("\n"+STR$(M_MON)+"Gを手に入れた",1,60) 40180 CALL CHECKEXP(M_EXP) 40190 PP(3,1)=PP(3,1)+M_MON 40200 BTLRSLT=0 40210 EXIT SUB 40220 END IF 40230 LOOP 40240 END SUB 40250 !========================================== 40260 ! CANCEL INPUT 40270 !========================================== 40280 SUB CANCELINPUT 40290 DO ! 入力キャンセル 40300 CALL BPAD(PADIN,9,0) 40310 LOOP WHILE PADIN>0 40320 END SUB 40330 !========================================== 40340 ! BATTLE - COMMAND 40350 !========================================== 40360 SUB BEFOREBTLCOM(BWW, BWH) ! 使用前 40370 CALL WOFF(0,1,1) 40380 CALL WDISP(0,6,18,BWW,BWH,0) 40390 CALL CANCELINPUT 40400 END SUB 40410 SUB AFTERBTLCOM ! 使用後 40420 CALL WOFF(0,1,1) 40430 CALL WDISP(0,6,18,40,5,128) 40440 END SUB 40450 !========================================== 40460 SUB BTLMAINCOM(RET) ! MAIN 40470 CALL BEFOREBTLCOM(20,3) 40480 CALL WP(0,7, 0,0," 闘う",0,0) 40490 CALL WP(0,7,10,0," 呪文",0,0) 40500 CALL WP(0,7, 0,1," 防御",0,0) 40510 CALL WP(0,7,10,1," 道具",0,0) 40520 CALL WP(0,7, 0,2," 逃走",0,0) 40530 CALL WP(0,7,10,2," 設定",0,0) 40540 BCX=0 40550 BCY=0 40560 DO 40570 CALL WCSR(0,BCX,BCY,10,1,0,0) 40580 LOOP UNTIL PADX(1,6,2)=1 40590 IF BCX=10 THEN BCX=1 40600 RET=1+BCX+BCY*2 40610 CALL AFTERBTLCOM 40620 END SUB 40630 !========================================== 40640 SUB BTLMAGICCOM(RET) ! 呪文 40650 CALL BEFOREBTLCOM(40,4) 40660 MAGMENU=1 40670 LABEL BTLMAGDSP 40680 IF MAGMENU=1 THEN 40690 CALL WP(0,7, 0,0,"\e ヒール",0,0) 40700 CALL WP(0,7,20,0," スリープ",0,0) 40710 CALL WP(0,7, 0,1," ファイア",0,0) 40720 CALL WP(0,7,20,1," サイレンス",0,0) 40730 CALL WP(0,7, 0,2," イリュージョン",0,0) 40740 CALL WP(0,7,20,2," ブリザード",0,0) 40750 CALL WP(0,7, 0,3," プロテクション",0,0) 40760 CALL WP(0,7,20,3," キュア",0,0) 40770 ELSE 40780 CALL WP(0,7, 0,0,"\e リフレクション",0,0) 40790 CALL WP(0,7,20,0," サンダー",0,0) 40800 CALL WP(0,7, 0,1," マジックシェル",0,0) 40810 CALL WP(0,7,20,1," ブースト",0,0) 40820 CALL WP(0,7, 0,2," ホーリーフレア",0,0) 40830 CALL WP(0,7,20,2," サモンスピリット",0,0) 40840 CALL WP(0,7, 0,3," リカバー",0,0) 40850 CALL WP(0,7,20,3," ウィッシュ",0,0) 40860 END IF 40870 BCX=0 40880 BCY=0 40890 DO 40900 CALL WCSR(0,BCX,BCY,20,1,0,0) 40910 LOOP UNTIL PADX(1,6,2)=1 OR PADX(1,7,2)=1 OR PADX(1,5,2)=1 40920 IF PADX(1,6,2)=1 THEN !!! ○ 40930 IF BCX=20 THEN BCX=1 40940 RET=1+BCX+BCY*2+(MAGMENU-1)*8 40950 ELSEIF PADX(1,5,2)=1 THEN !!! △ 40960 MAGMENU=3-MAGMENU 40970 GOTO *BTLMAGDSP 40980 ELSE 40990 RET=-1 41000 END IF 41010 CALL AFTERBTLCOM 41020 END SUB 41030 !========================================== 41040 SUB BTLCOMMAND(T,RET) 41050 IF T=1 THEN 41060 DO ! 入力キャンセル 41070 CALL BPAD(PADIN,9,0) 41080 LOOP WHILE PADIN>0 41090 IF PP(256,1)=0 THEN 41100 IF BTSP=0 THEN 41110 CALL BWP("\eどうしますか?\n○闘う △呪文 □逃走 ×道具 L1高速",1,0) 41120 ELSE 41130 CALL BWP("\eどうしますか?\n○闘う △呪文 □逃走 ×道具 L1通常",1,0) 41140 END IF 41150 ELSE 41160 IF BTSP=0 THEN 41170 CALL BWP("\eどうしますか?\n○闘う △呪文 □逃走 L1高速",1,0) 41180 ELSE 41190 CALL BWP("\eどうしますか?\n○闘う △呪文 □逃走 L1通常",1,0) 41200 END IF 41210 END IF 41220 DO ! 入力待ち 41230 CALL BPAD(PADIN,9,T) 41240 LOOP WHILE PADIN=0 41250 ELSEIF T=2 THEN 41260 DO ! 入力キャンセル 41270 CALL BPAD(PADIN,9,0) 41280 LOOP WHILE PADIN>0 41290 CALL BWP("\n呪文を選んで下さい\n○回復 △攻撃 □催眠 ×取消",1,0) 41300 DO ! 入力待ち 41310 CALL BPAD(PADIN,8,T) 41320 LOOP WHILE PADIN=0 41330 ELSEIF T=3 THEN 41340 DO ! 入力キャンセル 41350 CALL BPAD(PADIN,9,0) 41360 LOOP WHILE PADIN>0 41370 CALL BWP("\n道具を選んで下さい\n○薬草 △魔草 □毒消 ×取消",1,0) 41380 DO ! 入力待ち 41390 CALL BPAD(PADIN,8,T) 41400 LOOP WHILE PADIN=0 41410 END IF 41420 RET=PADIN 41430 END SUB 41440 !========================================== 41450 ! BATTLE - PLAYER 41460 !========================================== 41470 SUB BPLAYER(C1,C2) 41480 BTTURN=BTTURN+1 41490 IF C1=1 THEN 41500 CALL BWP("\e\mの攻撃",1,20) 41510 D=(INT(PP(61,1)*(1+RND*0.1)-M_GRD*0.75)/1) 41520 IF D<1 THEN D=INT(RND*2) 41530 SEPLAY 8+(D=0)*2,255*VOL,255*VOL 41540 CALL EFE(1,0,0,0) ! EFFECT 41550 IF D>0 THEN CALL SCRVIB2 41560 CALL FSYNCX(30) 41570 IF D>0 THEN 41580 CALL BWP("\n"+N$+"に"+STR$(D)+"のダメージ!",1,30) 41590 ELSE 41600 CALL BWP("\n"+N$+"にダメージを与えられない!",1,30) 41610 END IF 41620 M_XHP=MAX(M_XHP-D,0) 41630 ELSEIF C1=2 THEN 41640 PP(13,1)=PP(13,1)-3 41650 CALL PRINTSTAT ! FOR DEBUG 41660 IF C2=1 THEN 41670 CALL BWP("\e\mはヒールを唱えた",1,30) 41680 CALL EFE(5,0,-70,1) ! EFFECT 41690 CURE=PP(64,1)+INT(RND*5)-2 41700 PP(11,1)=MIN(PP(11,1)+CURE,PP(12,1)) 41710 CALL BWP("\n\mのHPが"+STR$(CURE)+"回復した!",1,30) 41720 CALL PRINTSTAT ! FOR DEBUG 41730 ELSEIF C2=3 THEN 41740 CALL BWP("\e\mはファイアを唱えた",1,0) 41750 CALL EFE(15,-70,0,1) ! EFFECT 41760 D=(INT(PP(64,1)*(1+RND*0.25)-M_INT*0.75)/1) 41770 IF D<1 THEN D=INT(RND*2) 41780 IF D>0 THEN 41790 CALL BWP("\n"+N$+"に"+STR$(D)+"のダメージ!",1,30) 41800 ELSE 41810 CALL BWP("\n"+N$+"には効かなかった!",1,30) 41820 END IF 41830 M_XHP=MAX(M_XHP-D,0) 41840 ELSEIF C2=2 THEN 41850 CALL BWP("\e\mはスリープを唱えた",1,0) 41860 CALL EFE(6,-70,0,1) ! EFFECT 41870 IF SLEEP=1 THEN 41880 CALL BWP("\n"+N$+"は眠っている!",1,30) 41890 ELSEIF RND0 THEN CALL SCRVIB1 ELSE FSYNC 10 42390 CALL E_MOVE2 42400 IF D>0 THEN 42410 CALL BWP("\n\mに"+STR$(D)+"のダメージ!",1,30) 42420 ELSE 42430 CALL BWP("\n\mはダメージを受けなかった!",1,30) 42440 END IF 42450 PP(11,1)=MAX(PP(11,1)-D,0) 42460 CALL PRINTSTAT 42470 END IF 42480 END SUB 42490 !========================================== 42500 ! CHECK LEVEL-UP 42510 !========================================== 42520 SUB CHECKEXP(E) 42530 PP(4,1)=PP(4,1)+E 42540 DO 42550 IF PP(5,1)=0 OR PP(4,1)0 THEN CALL BWP("\nちからが "+STR$(STR0)+" 上がった!",1,30) 42760 IF GRD0>0 THEN CALL BWP("\nみのまもりが "+STR$(GRD0)+" 上がった!",1,30) 42770 IF VIT0>0 THEN CALL BWP("\nたいりょくが "+STR$(VIT0)+" 上がった!",1,30) 42780 IF INT0>0 THEN CALL BWP("\nかしこさが "+STR$(INT0)+" 上がった!",1,30) 42790 IF DEX0>0 THEN CALL BWP("\nすばやさが "+STR$(DEX0)+" 上がった!",1,30) 42800 IF LCK0>0 THEN CALL BWP("\nうんのよさが "+STR$(LCK0)+" 上がった!",1,30) 42810 PP(61,1)=PP(61,1)+STR0 42820 PP(62,1)=PP(62,1)+GRD0 42830 PP(63,1)=PP(63,1)+VIT0 42840 PP(64,1)=PP(64,1)+INT0 42850 PP(65,1)=PP(65,1)+DEX0 42860 PP(66,1)=PP(66,1)+LCK0 42870 CALL EQUIP_ALIGN(1) 42880 XHP0=MAX(0,MIN(999,PP(23,1)*2+INT(RND*10))-PP(12,1)) 42890 XMP0=MAX(0,MIN(999,PP(24,1)+INT(RND*5))-PP(14,1)) 42900 IF XHP0>0 THEN CALL BWP("\n最大HPが "+STR$(XHP0)+" 上がった!",1,30) 42910 IF XMP0>0 THEN CALL BWP("\n最大MPが "+STR$(XMP0)+" 上がった!",1,30) 42920 PP(12,1)=PP(12,1)+XHP0 42930 PP(14,1)=PP(14,1)+XMP0 42940 PP(5,1)=(PP(2,1)+1)^3 ! NEXT-EXP 42950 !PP(5,1)=PP(2,1) ! FOR DEBUG 42960 IF PP(2,1)>=30 THEN PP(5,1)=0 42970 CALL FSYNCX(60) 42980 LOOP 42990 END SUB 43000 !========================================== 43010 ! BATTLE DATA 43020 !========================================== 43030 SUB DATARESTORE(E,D,BGK) 43040 ! パターン<=127しか考慮していません 43050 IF D=0 THEN 43060 BGK=1 43070 ELSEIF D=1 THEN 43080 BGK=2 43090 ELSEIF D=2 THEN 43100 BGK=3 43110 ELSEIF D=4 THEN 43120 BGK=4 43130 ELSEIF D=23 OR D=26 OR D=27 THEN 43140 BGK=6 43150 ELSEIF D>=80 AND D<=127 THEN 43160 BGK=6 43170 ELSE 43180 BGK=1 43190 END IF 43200 EID$="*"+STR$(E) 43210 RESTORE *ENEMYDATA 43220 DO 43230 READ S$ 43240 IF S$="*END" OR S$=EID$ THEN EXIT DO 43250 LOOP 43260 END SUB 43270 !------------------------------------------ 43280 LABEL ENEMYDATA 43290 ! DATA "NAME", 0,0,0,0,0, maxhp, str,grd,dex,lck, money,exp 43300 DATA "*1" 43310 DATA 1 43320 DATA "スライム", 3,8,0,0,200, 10, 8,8,8,8,8, 10,1 43330 ! 43340 DATA "*2" 43350 DATA 3 43360 DATA "スライム", 3,8,0,0,200, 10, 8,8,8,8,8, 10,1 43370 DATA "ゴブリン", 6,7,0,0,0, 14, 10,9,9,8,9, 15,4 43380 DATA "やけん" , 8,1,0,0,0, 12, 12,9,9,8,9, 15,3 43390 ! 43400 DATA "*3" 43410 DATA 4 43420 DATA "スライムベス", 3,8,200,0,0, 15, 12,12,12,12,12, 12,5 43430 DATA "リトルブッシュ", 3,7,0,0,0, 20, 17,15,0,15,15, 20,6 43440 DATA "お化け樹木", 3,6,0,0,0, 30, 18,17,0,15,15, 25,10 43450 DATA "おおざる", 8,4,0,0,0, 22, 21,15,15,15,15, 23,7 43460 ! 43470 DATA "*4" 43480 DATA 4 43490 DATA "やまねこ", 8,2,0,0,0, 40, 25,26,20,20,20, 35,11 43500 DATA "やまざる", 8,4,0,150,0, 42, 27,17,15,15,15, 40,12 43510 DATA "浮遊ボックス", 4,3,0,0,100, 50, 21,25,50,20,20, 35,13 43520 DATA "スケルトン", 6,6,0,0,0, 46, 29,28,14,20,20, 30,14 43530 ! 43540 DATA "*5" 43550 DATA 5 43560 DATA "オイルタンク", 4,2,0,0,0, 62, 30,60,10,35,40, 85,21 43570 DATA "ゴールドスライム",3,8,200,200,0, 52, 38,38,99,40,40, 150,22 43580 DATA "砂ゴブリン", 6,7,200,200,0, 55, 42,40,80,15,45, 75,28 43590 DATA "ドライブッシュ", 3,7,200,0,0, 50, 45,45,0,38,40, 80,25 43600 DATA "デスハンター", 6,6,200,200,0, 60, 50,50,25,40,40, 30,30 43610 ! 43620 DATA "*6" 43630 DATA 6 43640 DATA "ダークハート", 4,4,0,0,100, 125, 50,50,50,40,60, 95,50 43650 DATA "ダラン", 4,6,0,0,0, 100, 52,52,53,120,60, 304,45 43660 DATA "ゴーストダイヤ", 4,8,0,0,0, 90, 50,500,0,58,60, 253,55 43670 DATA "ブラッドスカル", 6,6,200,0,0, 135, 63,55,23,60,60, 120,60 43680 DATA "早期警戒システム", 7,9,0,0,0, 130, 65,60,60,90,60, 122,62 43690 DATA "防衛システム", 7,10,0,0,0, 145, 62,65,65,30,60, 121,65 43700 ! 43710 DATA "*7" 43720 DATA 2 43730 DATA "こうもり", 7,1,0,0,0, 50, 30,30,30,30,30, 50,12 43740 DATA "ボム", 4,7,0,0,0, 50, 32,30,15,30,30, 45,3 43750 ! 43760 DATA "*8" 43770 DATA 2 43780 DATA "サイクロプス", 6,8,0,0,0, 70, 60,60,60,60,60, 100,200 43790 DATA "ロブスター", 7,5,0,0,0, 72, 62,60,60,60,60, 105,220 43800 ! 43810 DATA "*9" 43820 DATA 2 43830 DATA "ライン", 7,3,0,0,0, 100, 80,80,80,80,80, 150,420 43840 DATA "ユニコーン", 7,8,0,0,0, 102, 82,80,80,80,80, 150,430 43850 ! 43860 DATA "*256" 43870 DATA 1 43880 DATA "ドラゴン", 6,10,0,0,0, 400, 90,75,90,10,70, 0,0 43890 ! 43900 DATA "*257" 43910 DATA 1 43920 DATA "リトルデーモン", 6,9,0,0,0, 250, 75,75,70,70,70, 500,150 43930 ! 43940 DATA "*258" 43950 DATA 1 43960 DATA "クローラー", 7,2,0,0,0, 80, 80,65,60,50,50, 500,800 43970 ! 43980 DATA "*END" 43990 DATA 1 44000 DATA "スライム", 3,8,0,0,200, 10, 8,8,8,8,8, 10,1 44010 !========================================== 44020 SUB PRINTSTAT !!! FOR DEBUG 44030 CALL WPP(1,7,7,1,0,"LV:",PP(2,MI),100,0) 44040 CALL WPP(1,7,6,1,1,"HP:",PP(11,MI),999,PP(12,MI)/5) 44050 CALL WPP(1,7,6,1,2,"MP:",PP(13,MI),999,PP(14,MI)/5) 44060 END SUB 44070 !========================================== 44080 SUB MSET !---モデルデータ読み込み 44090 RESTORE *MDATA 44100 FOR I=100 TO 125 44110 IF I<105 OR I=115 OR I=119 THEN READ MD1,MD2 44120 MODSET I,3,MD1 44130 MODOPT I,MD2,0,1,1 44140 NEXT I 44150 END SUB 44160 !========================================== 44170 SUB GAMEN !---画面設定 44180 FOGCOL 0,0,0 44190 FOGSET 0,5500 44200 CAMROT 1,RAD(10),0,0 44210 CAMPOS 1,0,-15,-100 44220 LIGVEC 1,1,1,1 44230 LIGCOL 1,180,180,180 44240 LIGVEC 2,-1,1,1 44250 LIGCOL 2,135,135,135 44260 LIGVEC 3,0,-1,1 44270 LIGCOL 3,135,135,135 44280 END SUB 44290 !========================================== 44300 SUB EFE(EF0,EF1,EF2,EF3) !---エフェクト 44310 SELECT CASE EF0 44320 CASE 1 !--剣1 44330 TRIDISP 100 44340 FOR I=0 TO 50 STEP 10 44350 TRIPOS 100,350-I,48+I,355-I,51+I,352-I*2,52+I*2,16777200 44360 FSYNC 1 44370 NEXT I 44380 TRIOFF 100 44390 CASE 2 !--剣2 44400 TRIDISP 100 44410 FOR I=0 TO 50 STEP 5 44420 TRIPOS 100,318,50+I,322,50+I,320,50+I*2,16777200 44430 FSYNC 1 44440 NEXT I 44450 TRIOFF 100 44460 CASE 3 !--剣1 44470 TRIDISP 100 44480 FOR I=0 TO 70 STEP 20 44490 TRIPOS 100,230+I,109,230+I,112,250+I*4,110,16777200 44500 FSYNC 1 44510 NEXT I 44520 TRIOFF 100 44530 CASE 4 44540 CASE 5,13,17 !--ヒール 44550 SEPLAY 11,255*VOL,255*VOL 44560 MODSET 201,4,4 44570 MODOPT 201,0.8,0,0,1 44580 MODDISP 201 44590 CALL EFE1 (EF2) 44600 CASE 9 !---キュア 44610 SEPLAY 11,255*VOL,255*VOL 44620 MODSET 201,4,3 44630 MODOPT 201,0.4,0,0,1 44640 MODDISP 201 44650 CALL EFE1 (EF2) 44660 CASE 7 !---ファイア 44670 MODSET 201,5,9 44680 MODOPT 201,0.3,0,0,1 44690 MODDISP 201 44700 CALL EFE2 (EF1,EF2,EF3) 44710 CASE 11 !---ブリザード 44720 MODSET 201,4,8 44730 MODOPT 201,0.3,0,0,1 44740 MODDISP 201 44750 CALL EFE2 (EF1,EF2,EF3) 44760 CASE 15 !---サンダー 44770 MODSET 201,5,1 44780 MODOPT 201,0.3,0,0,1 44790 MODDISP 201 44800 SEPLAY 12,255*VOL,255*VOL 44810 CALL EFE2 (EF1,EF2,EF3) 44820 MODSET 201,5,9 44830 MODDISP 201 44840 SEPLAY 12,255*VOL,255*VOL 44850 FOR I=1 TO 6 STEP 0.2 44860 MODOPT 201,0.3*I,0,0,1 44870 FSYNC 1 44880 NEXT I 44890 MODOFF 201 44900 CASE 12 !---プロテクション 44910 MODSET 201,5,8 44920 MODOPT 201,0.3,0,0,1 44930 MODDISP 201 44940 CALL EFE3 (EF2) 44950 CASE 16 !---マジックローブ 44960 MODSET 201,5,2 44970 MODOPT 201,0.3,0,0,1 44980 MODDISP 201 44990 CALL EFE3 (EF2) 45000 CASE 18 !---ブースト 45010 MODSET 201,5,6 45020 MODOPT 201,0.3,0,0,1 45030 MODDISP 201 45040 CALL EFE3 (EF2) 45050 CASE 6 !---スリープ 45060 MODSET 201,5,10 45070 MODOPT 201,0.3,0,0,1 45080 MODDISP 201 45090 SEPLAY 13,255*VOL,255*VOL 45100 CALL EFE4 (EF2) 45110 CASE 10 !---イリュージョン 45120 MODSET 201,4,9 45130 MODOPT 201,0.3,0,0,1 45140 MODDISP 201 45150 CALL EFE4 (EF2) 45160 CASE 8 !---サイレンス 45170 MODSET 201,5,3 45180 MODOPT 201,0.3,0,0,1 45190 MODDISP 201 45200 CALL EFE4 (EF2) 45210 CASE 14 !---リフレクション 45220 MODSET 201,4,8 45230 MODOPT 201,0.3,0,0,1 45240 MODDISP 201 45250 CALL EFE4 (EF2) 45260 CASE 19 !---? 45270 END SELECT 45280 END SUB 45290 !========================================== 45300 SUB EFE1 (EF2) 45310 FOR I=1 TO 50 STEP 1 45320 MODPOS 201,0,I-50,EF2 45330 MODROT 201,0,RAD(MOD(I*12,360)),0 45340 FSYNC 1 45350 NEXT I 45360 MODOFF 201 45370 END SUB 45380 !========================================== 45390 SUB EFE2 (EF1,EF2,EF3) 45400 FOR I=EF1 TO EF2 STEP EF3*5 45410 MODPOS 201,0,0,I 45420 MODROT 201,0,RAD(90+90*EF3),0 45430 FSYNC 1 45440 NEXT I 45450 MODOFF 201 45460 END SUB 45470 !========================================== 45480 SUB EFE3 (EF2) 45490 FOR I=1 TO 3 45500 FOR J=0.5 TO 1.5 STEP 0.2 45510 MODPOS 201,0,-10,EF2 45520 MODOPT 201,J,0,0,1 45530 FSYNC 1 45540 NEXT J 45550 NEXT I 45560 MODOFF 201 45570 END SUB 45580 !========================================== 45590 SUB EFE4 (EF2) 45600 MODOPT 201,1.5,0,0,1 45610 MODPOS 201,0,-10,EF2+10 45620 FOR I=270 TO 360 STEP 3 45630 MODROT 201,0,RAD(I),0 45640 FSYNC 1 45650 NEXT I 45660 FOR I=1.5 TO 1 STEP -0.05 45670 MODOPT 201,I,0,0,1 45680 FSYNC 1 45690 NEXT I 45700 MODOFF 201 45710 END SUB 45720 !========================================== 45730 SUB BACK(BG) !---背景 45740 SELECT CASE BG 45750 CASE 1 !--"草" 45760 BGCOL 0,0,0 45770 MODPOS 101,0,2500,3000 45780 MODDISP 101 45790 CASE 2 !--"森" 45800 BGCOL 0,0,0 45810 MODPOS 101,0,2500,3000 45820 MODDISP 101 45830 FOR I=0 TO 10 45840 MODPOS I+104,I*1000-5000,-1500,INT(RND*(-1000))+5000 45850 MODDISP I+104 45860 NEXT I 45870 CASE 3 !--"山" 45880 BGCOL 0,0,0 45890 MODPOS 100,0,2500,3000 45900 MODDISP 100 45910 MODPOS 115,5000,0,6400 45920 MODDISP 115 45930 MODPOS 116,-5000,0,6300 45940 MODDISP 116 45950 CASE 4 !--"砂" 45960 BGCOL 0,0,0 45970 MODPOS 102,0,2500,3000 45980 MODDISP 102 45990 CASE 5 !--"煉瓦" 46000 BGCOL 0,0,0 46010 MODPOS 103,0,2500,3000 46020 MODDISP 103 46030 CASE 6 !--"地下" 46040 BGCOL 0,0,0 46050 MODPOS 103,0,2500,3000 46060 MODDISP 103 46070 MODPOS 119,4000,0,3000 46080 MODDISP 119 46090 MODPOS 120,-4000,0,3000 46100 MODDISP 120 46110 END SELECT 46120 END SUB 46130 !========================================== 46140 LABEL MDATA !---モデルデータ 46150 DATA 1,100,2,100,3,100,5,100,6,100,8,300,5,100 46160 !========================================== 46170 SUB SCRVIB1 !---画面振動1 46180 VIBRATE 1,192,1,0.3 46190 FOR SV_I=1 TO 10 46200 SV_X=INT(RND*9)-4 46210 SV_Y=INT(RND*5)-2 46220 EFFECT 127,SV_X,SV_Y,SV_X+640,SV_Y+224,16777200 46230 IF PAD(1,7)<=PADX(1,7,5) THEN FSYNC 2 46240 EFFECT 0,0,0,640,224,0 46250 IF PAD(1,7)<=PADX(1,7,5) THEN FSYNC 1 46260 NEXT SV_I 46270 END SUB 46280 !========================================== 46290 SUB SCRVIB2 !---画面振動2 46300 FOR SV_I=1 TO 10 46310 SV_X=INT(RND*3)-1 46320 SV_Y=INT(RND*3)-1 46330 MODPOS 1,SV_X,SV_Y,0 46340 IF PAD(1,7)<=PADX(1,7,5) THEN FSYNC 2 46350 MODPOS 1,0,0,0 46360 IF PAD(1,7)<=PADX(1,7,5) THEN FSYNC 1 46370 NEXT SV_I 46380 END SUB 46390 !========================================== 46400 SUB E_MOVE1 46410 IF BTSP=1 THEN EXIT SUB 46420 FOR EM_I=0 TO 10 STEP 2 46430 MODROT 1,0,RAD(EM_I),0 46440 IF PAD(1,7)<=PADX(1,7,5) THEN FSYNC 1 46450 NEXT EM_I 46460 FOR EM_I=10 TO -10 STEP -4 46470 MODROT 1,0,RAD(EM_I),0 46480 MODPOS 1,0,0,EM_I*2-20 46490 IF PAD(1,7)<=PADX(1,7,5) THEN FSYNC 1 46500 NEXT EM_I 46510 END SUB 46520 !========================================== 46530 SUB E_MOVE2 46540 IF BTSP=1 THEN EXIT SUB 46550 FOR EM_I=-10 TO 0 STEP 2.5 46560 MODROT 1,0,RAD(EM_I),0 46570 MODPOS 1,0,0,EM_I*4 46580 IF PAD(1,7)<=PADX(1,7,5) THEN FSYNC 1 46590 NEXT EM_I 46600 END SUB