10000 !========================================== 10010 ! MAP EDITOR DX Ver.0.3 10020 ! Programed by Ohari 10030 !========================================== 10040 FKEY "RENUMBER AT 10000",7 10050 FKEY "TEXTMODE 2",12 10060 CALL PAD_SETTING 10070 INIT ALL 10080 TEXTMODE 2 10090 PRINT " 初期化中・・・" 10100 PRINT " しばらくお待ち下さい" 10110 FILEX,FILEY=30 10120 CALL INIT_SYSTEM 10130 FUNC=2 ! EDIT MODE 10140 FN$="MAP/MAP" 10150 !----------------------------------------- 10160 DO 10170 CLEAR 10180 CALL MENU(FUNC) 10190 SELECT CASE FUNC 10200 CASE 0 10210 CALL FILE 10220 CASE 1 10230 CALL DATASET 10240 CASE 2 10250 CALL EDIT 10260 CASE 3 10270 CALL SEARCH 10280 CASE 4 10290 CALL SHEET 10300 CASE ELSE 10310 CALL OPTIONS 10320 END SELECT 10330 IF PADX(1,2,2)=1 OR PADX(1,9,2)=1 THEN FUNC=FUNC-1 10340 IF PADX(1,1,2)=1 OR PADX(1,10,2)=1 THEN FUNC=FUNC+1 10350 IF FUNC<0 THEN FUNC=5 10360 IF FUNC>5 THEN FUNC=0 10370 LOOP 10380 !========================================== 10390 ! DEFAULTのパラメータ 10400 !------------------------------------------ 10410 SUB DEF_PRM(F(),N) 10420 RESTORE *DEF_PRM 10430 CALL D2B(BDB,F,N) 10440 FOR I=0 TO BDB(0) 10450 READ BDB(1),BDB(2),BDB(3),BDB(4),BDB(5),BDB(6),BDB(7),BDB(12),BDB(13),BDB(14),BDB(15) 10460 NEXT I 10470 CALL B2D(F,BDB,N) 10480 END SUB 10490 !========================================== 10500 ! DEFAULTの進入禁止フラグ,敵出現率 10510 !------------------------------------------ 10520 SUB DEF_FLG(F(),N) 10530 RESTORE *DEF_PRM 10540 CALL D2B(BDB,F,N) 10550 FOR I=0 TO BDB(0) 10560 READ DF1,BDB(2),BDB(3),BDB(4),BDB(5),BDB(6),BDB(7),BDB(12),DF2,BDB(14),BDB(15) 10570 NEXT I 10580 CALL B2D(F,BDB,N) 10590 END SUB 10600 !****************************************** 10610 LABEL DEF_PRM 10620 DATA 1,0,0,0,1,0,0,3,2,0,0 ! 草原 10630 DATA 1,0,0,1,1,1,0,5,3,0,0 ! 森 10640 DATA 1,0,0,1,1,1,0,7,4,0,0 ! 山 10650 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 岩山 10660 DATA 1,0,0,1,1,1,0,4,5,0,0 ! 砂漠 10670 DATA 1,0,0,0,1,0,0,2,1,0,0 ! 道路 10680 DATA 1,0,0,1,1,1,0,0,0,0,0 ! 階段下り 10690 DATA 1,0,0,1,1,1,0,0,0,0,0 ! 階段上り 10700 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 城左上 10710 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 城右上 10720 DATA 1,0,0,1,1,1,0,0,0,0,0 ! 街左 10730 DATA 1,0,0,1,1,1,0,0,0,0,0 ! 街右 10740 DATA 1,0,0,1,1,1,0,0,0,0,0 ! 城左下 10750 DATA 1,0,0,1,1,1,0,0,0,0,0 ! 城右下 10760 DATA 1,0,0,1,1,1,0,0,0,0,0 ! 洞窟 10770 DATA 1,0,0,1,1,1,0,0,0,0,0 ! 家 10780 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁・穴 10790 DATA 1,0,0,1,1,1,0,0,0,0,0 ! 宝箱閉 10800 DATA 1,0,0,1,1,1,0,0,0,0,0 ! 宝箱開 10810 DATA 1,0,0,1,1,1,0,0,0,0,0 ! 壷 10820 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 10830 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 10840 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 10850 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 10860 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 10870 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 10880 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 10890 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 10900 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 10910 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 10920 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 10930 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 10940 !------------------------------------------ 10950 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 10960 DATA 9,0,1,1,1,1,0,0,9,0,0 ! 海上岩山 10970 DATA 9,0,0,1,1,1,0,3,1,0,0 ! 島 10980 DATA 9,0,1,1,1,1,0,3,9,0,0 ! 池 10990 DATA 9,0,0,0,1,1,0,2,1,0,0 ! 橋横 11000 DATA 9,0,0,0,1,1,0,2,1,0,0 ! 橋縦 11010 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11020 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11030 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11040 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11050 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11060 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11070 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11080 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11090 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11100 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11110 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11120 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11130 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11140 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11150 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11160 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11170 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11180 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11190 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11200 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11210 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11220 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11230 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11240 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11250 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11260 DATA 9,0,1,1,0,1,0,3,9,0,0 ! 海・川 11270 !------------------------------------------ 11280 DATA 1,0,0,1,1,1,0,5,7,0,0 ! 床 11290 DATA 1,0,0,1,1,1,0,5,7,0,0 ! カラー床 11300 DATA 1,0,0,1,1,1,0,5,7,0,0 ! ?床 11310 DATA 1,0,0,1,1,1,0,5,7,0,0 ! !床 11320 DATA 1,0,0,1,1,1,0,5,7,0,0 ! →床 11330 DATA 1,0,0,1,1,1,0,5,7,0,0 ! ↑床 11340 DATA 1,0,0,1,1,1,0,5,7,0,0 ! ←床 11350 DATA 1,0,0,1,1,1,0,5,7,0,0 ! ↓床 11360 DATA 1,0,0,1,1,1,0,5,7,0,0 ! 床 11370 DATA 1,0,0,1,1,1,0,5,7,0,0 ! 床 11380 DATA 1,0,0,1,1,1,0,5,7,0,0 ! 床 11390 DATA 1,0,0,1,1,1,0,5,7,0,0 ! 床 11400 DATA 1,0,0,1,1,1,0,5,7,0,0 ! 床 11410 DATA 1,0,0,1,1,1,0,5,7,0,0 ! 床 11420 DATA 1,0,0,1,1,1,0,5,7,0,0 ! 床 11430 DATA 1,0,0,1,1,1,0,5,7,0,0 ! 床 11440 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 11450 DATA 1,0,0,1,1,1,0,0,0,0,0 ! 宝箱閉 11460 DATA 1,0,0,1,1,1,0,0,0,0,0 ! 宝箱開 11470 DATA 1,0,0,1,1,1,0,0,0,0,0 ! 壷 11480 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 11490 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 11500 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 11510 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 11520 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 11530 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 11540 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 11550 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 11560 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 11570 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 11580 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 11590 DATA 1,0,1,1,1,1,0,0,0,0,0 ! 壁 11600 !------------------------------------------ 11610 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11620 DATA 1,0,1,1,1,1,0,5,6,0,0 ! 橋横ひび 11630 DATA 1,0,1,1,1,1,0,5,6,0,0 ! 橋縦ひび 11640 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11650 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 橋横 11660 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 橋縦 11670 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11680 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11690 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11700 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11710 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11720 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11730 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11740 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11750 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11760 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11770 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11780 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11790 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11800 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11810 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11820 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11830 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11840 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11850 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11860 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11870 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11880 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11890 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11900 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11910 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11920 DATA 1,0,0,1,1,1,0,5,6,0,0 ! 迷路 11930 !========================================== 11940 ! ERROR 11950 !------------------------------------------ 11960 LABEL ERR 11970 PRINT "" 11980 PRINT "異常なFILEです(NO EOC)" 11990 STOP 12000 END 12010 !========================================= 12020 ! アナログパッド関連の設定 12030 !----------------------------------------- 12040 SUB PAD_SETTING 12050 LABEL PAD_SETTING 12060 RESTORE *PAD_SETTING 12070 OPTION BASE 1 12080 DIM PADX(2,20,5) 12090 DIM PADON(2) 12100 !----- オートリピート設定値 -------------- 12110 AUTO_S=20 ! オートリピート開始までの待ち 12120 AUTO_E=21 ! オートリピート周期+AUTO_S 12130 !----- 遊び幅設定値 ---------------------- 12140 DATA 4, 4, 4, 4 ! 方向ボタン 12150 DATA 4, 4, 4, 4 ! 右ボタン 12160 DATA 4, 4, 4, 4 ! 肩ボタン 12170 DATA 96,96,96,96 ! スティック傾け 12180 DATA 0, 0, 0, 0 ! デジタルボタン 12190 !----- 押下判定のしきい値設定 ------------ 12200 FOR I=1 TO 2 12210 FOR J=1 TO 20 12220 PADX(I,J,1)=PAD(I,J) 12230 NEXT J 12240 NEXT I 12250 FOR J=1 TO 20 12260 READ K 12270 FOR I=1 TO 2 12280 PADX(I,J,4)=PADX(I,J,1)-K/2 12290 PADX(I,J,5)=PADX(I,J,1)+K/2 12300 NEXT I 12310 NEXT J 12320 END SUB 12330 !========================================= 12340 ! 拡張型PAD入力参照処理 12350 !----------------------------------------- 12360 SUB PADX(B) 12370 PADON(1),PADON(2)=0 12380 FOR J=1 TO 2 12390 IF J=B OR B=3 THEN 12400 FOR I=1 TO 20 12410 A,PADX(J,I,1)=PAD(J,I) 12420 IF A>PADX(J,I,5) THEN 12430 PADON(J)=1 12440 A=MAX(0,PADX(J,I,3)+1) 12450 IF A>AUTO_E THEN A=AUTO_S 12460 PADX(J,I,3)=A 12470 IF A=1 OR A=AUTO_S THEN 12480 PADX(J,I,2)=1 12490 ELSE 12500 PADX(J,I,2)=2 12510 END IF 12520 ELSEIF AAUTO_E THEN A=AUTO_S 12560 PADX(J,I,3)=A 12570 IF A=1 OR A=AUTO_S THEN 12580 PADX(J,I,2)=-1 12590 ELSE 12600 PADX(J,I,2)=-2 12610 END IF 12620 ELSE 12630 PADX(J,I,2),PADX(J,I,3)=0 12640 END IF 12650 NEXT I 12660 END IF 12670 A=MAX(MAX(PADX(J,1,3),PADX(J,2,3)),MAX(PADX(J,3,3),PADX(J,4,3))) 12680 PADX(J,1,3),PADX(J,2,3),PADX(J,3,3),PADX(J,4,3)=A 12690 A=MAX(PADX(J,13,3),PADX(J,14,3)) 12700 PADX(J,13,3),PADX(J,14,3)=A 12710 A=MAX(PADX(J,15,3),PADX(J,16,3)) 12720 PADX(J,15,3),PADX(J,16,3)=A 12730 NEXT J 12740 END SUB 12750 !========================================== 12760 ! WAIT UNTIL PAD ON 12770 !------------------------------------------ 12780 SUB PADON(A) 12790 DO 12800 CALL PADX(A) 12810 LOOP UNTIL PADON(A)>0 12820 END SUB 12830 !========================================== 12840 ! WAIT UNTIL PAD OFF 12850 !------------------------------------------ 12860 SUB PADOFF(A) 12870 DO 12880 CALL PADX(A) 12890 LOOP UNTIL PADON(A)=0 12900 END SUB 12910 !========================================== 12920 ! システム初期化 12930 !------------------------------------------ 12940 SUB INIT_SYSTEM 12950 DMAX=100000*2+10000 12960 IF SYSINI=0 THEN 12970 SYSINI=1 12980 OPTION BASE 0 12990 DIM CELL(1) ! MAP-CELL 13000 DIM CELLT(1) ! MAP-CELL TEMP 13010 DIM L_(DMAX-1) ! MAP DATA1 13020 DIM R_(DMAX-1) ! MAP DATA2 13030 DIM A_(127) ! TEX-X 13040 DIM B_(127) ! TEX-Y 13050 DIM C_(127) ! TEX PAGE 13060 DIM XF(256) ! MAP X-SIZE 13070 DIM YF(256) ! MAP Y-SIZE 13080 DIM ZO(256) ! MAP Z-POS OFFSET 13090 DIM BN(23) ! BINARY 2^N 13100 DIM BDB(15) ! BINARY DATA BUFFER 13110 DIM TBLP(11) ! TABLE POINTER (+EOF) 13120 DIM TBLN(10) ! TABLE NUMBER 13130 DIM TBRP(11) ! TABLE POINTER (+EOF) 13140 DIM TBRN(10) ! TABLE NUMBER 13150 END IF 13160 FOR I=0 TO 127 13170 A_(I)=MOD(I,4)*32+384 13180 B_(I)=INT(MOD(I,32)/4)*32 13190 C_(I)=INT(I/32)+9 13200 NEXT I 13210 FOR I=0 TO 23 13220 BN(I)=2^I 13230 NEXT I 13240 FOR I=0 TO DMAX-1 13250 L_(I),R_(I)=0 13260 NEXT I 13270 EOC=FILEX*FILEY*2 ! END OF CHIP-DATA 13280 BOD=EOC+1 ! BEGIN OF DEFINITION DATA 13290 L_(EOC)=-1 ! EOC CODE (=-1) 13300 CELL(0)=0 13310 CALL DEF_PRM(CELL,0) 13320 FOR I=0 TO EOC-1 STEP 2 13330 L_(I)=CELL(0) 13340 L_(I+1)=CELL(1) 13350 NEXT I 13360 TBLN(0),L_(BOD)=1 13370 L_(1+BOD)=FILEX 13380 L_(2+BOD)=FILEY 13390 L_(3+BOD)=131 13400 CALL GET_FINF(L_,TBLP,TBLN) 13410 CELL(0)=1 13420 CALL DEF_PRM(CELL,0) 13430 XL,YL,ZL,XR,YR,ZR=0 ! DEFAULT VALUE 13440 END SUB 13450 !========================================== 13460 ! GET FILE INFORMATION 13470 !------------------------------------------ 13480 SUB GET_FINF(F(),P(),N()) 13490 FOR EOC=0 TO DMAX-1 STEP 2 13500 IF F(EOC)=-1 THEN EXIT FOR 13510 NEXT EOC 13520 IF EOC=0 THEN *ERR 13530 IF EOC>=DMAX THEN *ERR 13540 BOD=EOC+1 13550 IF BOD>=DMAX THEN *ERR 13560 P(0)=BOD 13570 N(0)=F(BOD) 13580 EOF=BOD+1+N(0)*3 13590 IF EOF>=DMAX THEN *ERR 13600 FOR I=1 TO 10 13610 P(I)=EOF 13620 N(I)=F(EOF) 13630 EOF=EOF+2+N(I)*2 13640 IF EOF>=DMAX THEN EXIT FOR 13650 NEXT I 13660 IF EOF>=DMAX THEN *ERR 13670 P(11)=EOF 13680 F(EOF)=-2 ! EOF 13690 CALL ZO_INF(F,N) 13700 END SUB 13710 !========================================== 13720 ! ZO VALUE INFORMATION 13730 !------------------------------------------ 13740 SUB ZO_INF(F(),N()) 13750 ZO(0)=0 13760 FOR I=0 TO N(0)-1 13770 XF(I)=F(I*3+1+BOD) 13780 YF(I)=F(I*3+2+BOD) 13790 ZO(I+1)=ZO(I)+XF(I)*YF(I) 13800 NEXT I 13810 IF ZO(N(0))*2<>EOC THEN *ERR 13820 END SUB 13830 !========================================== 13840 ! SEARCH TABLE INFORMATION 13850 !------------------------------------------ 13860 SUB SRCHTBL(R,M,X,Y,Z) 13870 A=X+Y*256+Z*65536 13880 R=-1 13890 FOR I=TBLP(M)+2 TO TBLP(M+1)-2 STEP 2 13900 IF L_(I)=A THEN 13910 R=L_(I+1) 13920 EXIT FOR 13930 END IF 13940 NEXT I 13950 END SUB 13960 !========================================== 13970 ! DELETE TABLE INFORMATION 13980 !------------------------------------------ 13990 SUB DELTBL(M,X,Y,Z) 14000 IF M<1 OR M>10 THEN EXIT SUB 14010 A=X+Y*256+Z*65536 14020 I=TBLP(M)+2 14030 DO WHILE I=S THEN 14710 B=MOD(A,65536) 14720 F(P(I)+J*2)=(C+V)*65536+B 14730 END IF 14740 IF I=1 THEN 14750 A=F(P(I)+J*2+1) 14760 C=INT(A/65536) 14770 IF C>=S THEN 14780 B=MOD(A,65536) 14790 F(P(I)+J*2+1)=(C+V)*65536+B 14800 END IF 14810 END IF 14820 NEXT J 14830 NEXT I 14840 END SUB 14850 !========================================= 14860 ! 拡張PRINT(LOCATE X,Y:COLOR C:PRINT S$;) 14870 !----------------------------------------- 14880 SUB CLPRINT(C,X,Y,S$) 14890 IF X>=0 THEN 14900 IF Y>=0 THEN LOCATE X,Y ELSE LOCATE X 14910 END IF 14920 CALL TEXTCOLX(C) 14930 PRINT S$; 14940 END SUB 14950 !========================================= 14960 ! TEXT-COLOR変更 14970 !----------------------------------------- 14980 SUB TEXTCOLX(C) 14990 SELECT CASE C 15000 CASE 0 15010 TEXTCOL BLACK 15020 CASE 1 15030 TEXTCOL BLUE 15040 CASE 2 15050 TEXTCOL RED 15060 CASE 3 15070 TEXTCOL PURPLE 15080 CASE 4 15090 TEXTCOL GREEN 15100 CASE 5 15110 TEXTCOL CYAN 15120 CASE 6 15130 TEXTCOL YELLOW 15140 CASE 7 15150 TEXTCOL WHITE 15160 END SELECT 15170 END SUB 15180 !========================================= 15190 ! スクリーン文字列の取得 15200 !----------------------------------------- 15210 SUB SCRSTR(S$,X,Y,N) 15220 S$="" 15230 FOR I=0 TO N-1 15240 T$=SCRCHR$(X+I,Y) 15250 IF T$="" THEN S$=S$+" " ELSE S$=S$+T$ 15260 NEXT I 15270 END SUB 15280 !========================================== 15290 ! DATA TO BINARY 15300 !------------------------------------------ 15310 SUB D2B(B(),D(),A) 15320 C=D(A) 15330 B(0)=MOD(C,128) ! TEX 15340 C=INT(C/128) 15350 B(1)=MOD(C,16) ! PAL 15360 C=INT(C/16) 15370 B(2)=MOD(C,2) ! Z-POS 15380 C=INT(C/2) 15390 B(3)=MOD(C,2) ! WALK X 15400 C=INT(C/2) 15410 B(4)=MOD(C,2) ! SHIP X 15420 C=INT(C/2) 15430 B(5)=MOD(C,2) ! ???? X 15440 C=INT(C/2) 15450 B(6)=MOD(C,2) ! LANDING X 15460 C=INT(C/2) 15470 B(7)=MOD(C,4) ! RESERVE 15480 C=INT(C/4) 15490 B(8)=MOD(C,8) ! JUMP 15500 C=INT(C/8) 15510 B(9)=MOD(C,2) ! AUTO EVENT 15520 C=INT(C/2) 15530 B(10)=MOD(C,2) ! EVENT 15540 B(11)=INT(C/2) ! ITEM 15550 C=D(A+1) 15560 B(12)=MOD(C,64) ! RANDOM ENCOUNT 15570 C=INT(C/64) 15580 B(13)=MOD(C,256) ! ENEMY 15590 C=INT(C/256) 15600 B(14)=MOD(C,4) ! FLOOR 15610 B(15)=INT(C/4) ! DAMAGE 15620 END SUB 15630 !========================================== 15640 ! BINARY TO DATA 15650 !------------------------------------------ 15660 SUB B2D(D(),B(),A) 15670 D(A)=B(0)+B(1)*BN(7)+B(2)*BN(11)+B(3)*BN(12)+B(4)*BN(13)+B(5)*BN(14)+B(6)*BN(15) 15680 D(A)=D(A)+B(7)*BN(16)+B(8)*BN(18)+B(9)*BN(21)+B(10)*BN(22)+B(11)*BN(23) 15690 D(A+1)=B(12)+B(13)*BN(6)+B(14)*BN(14)+B(15)*BN(16) 15700 END SUB 15710 !========================================== 15720 ! BINARY FORMAT 15730 !------------------------------------------ 15740 SUB BINFORM(R,V,A,B) 15750 R=MOD(INT(V/BN(A)),BN(B)) 15760 END SUB 15770 !========================================== 15780 ! VALUE FORMAT 15790 !------------------------------------------ 15800 SUB VALFORM(R$,V,C) 15810 R$=STR$(V) 15820 IF LEN(R$)0)*9) 15930 R=R+((PADX(1,13,2)=-1)-(PADX(1,13,2)=1))*(1+(PADX(1,8,2)>0)*9) 15940 IF PADX(1,8,2)>0 THEN 15950 IF RM THEN R=M 15970 ELSE 15980 IF RM THEN R=N 16000 END IF 16010 IF PADX(1,7,2)=1 THEN R=VS_A 16020 IF PADX(1,5,2)=1 OR PADX(1,6,2)=1 OR PADX(1,7,2)=1 THEN 16030 CALL TEXTCOLX(7) 16040 ELSE 16050 CALL TEXTCOLX(C) 16060 END IF 16070 IF M=63 THEN 16080 VS_B=INT(R/0.63+.5) 16090 CALL CLPRINT(-1,X,Y,REPEAT$(" ",3-LEN(STR$(VS_B)))+STR$(VS_B)) 16100 ELSE 16110 CALL CLPRINT(-1,X,Y,REPEAT$(" ",VS_C-LEN(STR$(R)))+STR$(R)) 16120 END IF 16130 IF PADX(1,5,2)=1 OR PADX(1,6,2)=1 OR PADX(1,7,2)=1 THEN EXIT DO 16140 FSYNC 1 16150 LOOP 16160 END SUB 16170 !========================================== 16180 ! MAP-CHIP SELECT 16190 !------------------------------------------ 16200 SUB CHIPSEL(CST,CSP) 16210 AUTO_S=20 16220 AUTO_E=21 16230 CS_A=CST 16240 CS_B=CSP 16250 FSYNC 1 16260 CLEAR 16270 SPROFF 601 16280 SPROFF 602 16290 TILEOFF 601 16300 TILEOFF 602 16310 TILECOL 2,0,0,255,32 16320 TILECOL 3,255,255,255,128 16330 TILEPOS 2,24,41,296,189,1 16340 TILEPOS 3,22,40,298,190,0 16350 TILEDISP 2 16360 TILEDISP 3 16370 CALL MENU(FUNC) 16380 IF CST>31 AND CST<64 THEN CSP=MOD(CSP-8,16) 16390 FOR CS_I=0 TO 127 16400 SPRTEX CS_I+800,C_(CS_I),A_(CS_I),B_(CS_I),A_(CS_I)+32,B_(CS_I)+32 16410 NEXT CS_I 16420 TILECOL 800,64,128,64,128 16430 DO 16440 CS_P=INT(CST/64) 16450 FOR CS_I=0 TO 127 16460 IF INT(CS_I/64)=CS_P THEN 16470 CS_X=INT(MOD(CS_I,64)/32)*128+MOD(CS_I,4)*32+32 16480 CS_Y=INT(MOD(CS_I,32)/4)*16+50 16490 IF CST=CS_I THEN 16500 SPRPOS CS_I+800,CS_X,CS_Y,800 16510 TILEPOS 800,CS_X-2,CS_Y-1,CS_X+34,CS_Y+17,800 16520 TILEDISP 800 16530 ELSE 16540 SPRPOS2 CS_I+800,CS_X+4,CS_Y+2,CS_X+28,CS_Y+14,800 16550 END IF 16560 IF CS_I>31 AND CS_I<64 THEN 16570 SPRPAL CS_I+800,10,MOD(CSP+8,16),1 16580 ELSE 16590 SPRPAL CS_I+800,10,CSP,1 16600 END IF 16610 SPRDISP CS_I+800 16620 ELSE 16630 SPROFF CS_I+800 16640 END IF 16650 NEXT CS_I 16660 FSYNC 1 16670 CALL PADX(1) 16680 IF PADX(1,1,2)=1 OR PADX(1,14,2)=1 THEN CST=MOD(CST+1+(MOD(CST,4)=3)*28,128) 16690 IF PADX(1,2,2)=1 OR PADX(1,14,2)=-1 THEN CST=MOD(CST-1-(MOD(CST,4)=0)*28,128) 16700 IF PADX(1,3,2)=1 OR PADX(1,13,2)=-1 THEN CST=CST-4+(INT(MOD(CST,32)/4)=0)*32 16710 IF PADX(1,4,2)=1 OR PADX(1,13,2)=1 THEN CST=CST+4-(INT(MOD(CST,32)/4)=7)*32 16720 CST=MOD(CST+64*((PADX(1,10,2)=1)-(PADX(1,9,2)=1)),128) 16730 CSP=MOD(CSP+(PADX(1,12,2)=1)-(PADX(1,11,2)=1),16) 16740 LOOP UNTIL PADX(1,5,2)=1 OR PADX(1,6,2)=1 OR PADX(1,7,2)=1 16750 TILEOFF 800 16760 FOR CS_I=800 TO 927 16770 SPROFF CS_I 16780 NEXT CS_I 16790 IF CST>31 AND CST<64 THEN CSP=MOD(CSP+8,16) 16800 IF PADX(1,7,2)=1 THEN 16810 CST=CS_A 16820 CSP=CS_B 16830 END IF 16840 FSYNC 1 16850 TILEOFF 2 16860 TILEOFF 3 16870 END SUB 16880 !========================================== 16890 ! SCREEN MAKING 16900 ! A 0:POS&DISPなし, 1:POS&DISPあり 16910 !------------------------------------------ 16920 SUB SCM(X,Y,Z,W) 16930 IF W>0 THEN 16940 TILECOL 1,64,128,64,128 16950 TILEPOS 1,314,45,614,195,0 16960 TILEDISP 1 16970 END IF 16980 I=0 16990 J=101 17000 FOR Y0=Y-4 TO Y+4 17010 FOR X0=X-4 TO X+4 17020 IF X0<0 OR X0>=XF(Z) OR Y0<0 OR Y0>=YF(Z) THEN 17030 H=L_(Z*3+3+BOD) 17040 ELSE 17050 H=L_((X0*YF(Z)+Y0+ZO(Z))*2) 17060 END IF 17070 T=MOD(H,128) 17080 P=MOD(INT(H/128),16) 17090 SPRTEX I+J,C_(T),A_(T),B_(T),A_(T)+32,B_(T)+32 17100 SPRPAL I+J,10,P,1 17110 IF W>0 THEN 17120 SPRPOS I+J,MOD(I,9)*32+320,INT(I/9)*16+48,1 17130 SPRDISP I+J 17140 END IF 17150 I=I+1 17160 NEXT X0 17170 NEXT Y0 17180 TEXTCOL WHITE 17190 LOCATE 29,2 17200 PRINT "SIZE="; 17210 CALL VALFORM(X$,XF(Z),3) 17220 CALL VALFORM(Y$,YF(Z),3) 17230 CALL VALFORM(Z$,TBLN(0),3) 17240 PRINT "("+X$+","+Y$+","+Z$+")" 17250 LOCATE 26,3 17260 PRINT "(X,Y,N)="; 17270 CALL VALFORM(X$,X,3) 17280 CALL VALFORM(Y$,Y,3) 17290 CALL VALFORM(Z$,Z,3) 17300 PRINT "("+X$+","+Y$+","+Z$+")" 17310 END SUB 17320 !========================================== 17330 ! CURSOL MAKING 17340 ! A 0:CHIP SEL, 1:CHIP PUT 17350 !------------------------------------------ 17360 SUB CSR(A) 17370 X=128+320 17380 Y=64+48 17390 TILEPOS 501,X,Y,X+32,Y+16,2 17400 IF A=1 THEN 17410 T=MOD(CELL(0),128) 17420 P=MOD(INT(CELL(0)/128),16) 17430 SPRTEX 501,C_(T),A_(T),B_(T),A_(T)+32,B_(T)+32 17440 SPRPAL 501,10,P,2 17450 SPRPOS 501,X,Y,3 17460 BLINK=BLINK+1 17470 IF BLINK>23 THEN BLINK=0 17480 IF PADON(1)>0 THEN BLINK=0 17490 IF BLINK<12 THEN 17500 TILECOL 501,255,255,255,32 17510 TILEDISP 501 17520 SPROFF 501 17530 ELSE 17540 TILECOL 501,0,0,0,96 17550 TILEDISP 501 17560 SPRDISP 501 17570 END IF 17580 ELSE 17590 TILECOL 501,255,255,255,32 17600 TILEDISP 501 17610 SPROFF 501 17620 END IF 17630 END SUB 17640 !========================================== 17650 ! YES/NO SELECT 17660 !------------------------------------------ 17670 SUB YNSELECT(R,C,X,Y) 17680 DO 17690 CALL CLPRINT(C*(R=0),X,Y,"はい ") 17700 CALL CLPRINT(C*(R=1),-1,-1," いいえ") 17710 FSYNC 1 17720 CALL PADX(1) 17730 IF PADX(1,2,2)=1 OR PADX(1,14,2)=-1 THEN R=0 17740 IF PADX(1,1,2)=1 OR PADX(1,14,2)=1 THEN R=1 17750 LOOP UNTIL PADX(1,6,2)=1 OR PADX(1,7,2)=1 OR PADX(1,20,2)=1 17760 IF PADX(1,7,2)=1 THEN R=1 17770 CALL CLPRINT(7,X,Y," ") 17780 END SUB 17790 !========================================== 17800 ! 拡張INKEY$ 17810 !------------------------------------------ 17820 SUB INKEYX(INK,INK$) 17830 INK$=INKEY$ 17840 IF INK$="" OR INK$<>INK0$ THEN 17850 INKT=0 17860 ELSE 17870 INKT=INKT+1 17880 END IF 17890 INK0$=INK$ 17900 IF INKT>30 THEN INKT=27 17910 IF INKT>0 AND INKT<30 THEN INK$="" 17920 INK=ORD(INK$) 17930 END SUB 17940 !========================================== 17950 ! S/W KEYBOARD 17960 !------------------------------------------ 17970 SUB KEYBOARD(R$,C,X,Y) 17980 CALL CLPRINT(0,X,Y+1,"ABCDEFGHIJKLM") 17990 CALL CLPRINT(0,X,Y+2,"NOPQRSTUVWXYZ") 18000 CALL CLPRINT(0,X,Y+3,"0123456789_/.") 18010 DO 18020 KB_T$=SCRCHR$(KBX+X,KBY+Y+1) 18030 CALL CLPRINT(0,KBX+X,KBY+Y+1,KB_T$) 18040 CALL PADX(1) 18050 CALL INKEYX(INK,INK$) 18060 KBX=MOD(KBX+(PADX(1,1,2)=1)-(PADX(1,2,2)=1),13) 18070 KBY=MOD(KBY+(PADX(1,4,2)=1)-(PADX(1,3,2)=1),3) 18080 KBX=MOD(KBX+(PADX(1,14,2)=1)-(PADX(1,14,2)=-1),13) 18090 KBY=MOD(KBY+(PADX(1,13,2)=1)-(PADX(1,13,2)=-1),3) 18100 SELECT CASE INK 18110 CASE 47 ! / 18120 KBX=11 18130 KBY=2 18140 CASE 48 TO 57 ! 0-9 18150 KBX=INK-48 18160 KBY=2 18170 CASE 65 TO 90 ! A-Z 18180 KBX=MOD(INK-65,13) 18190 KBY=INT((INK-65)/13) 18200 CASE 95 ! _ 18210 KBX=10 18220 KBY=2 18230 CASE 97 TO 122 ! a-z 18240 KBX=MOD(INK-97,13) 18250 KBY=INT((INK-97)/13) 18260 CASE ELSE 18270 INK$="" 18280 END SELECT 18290 KB_T$=SCRCHR$(KBX+X,KBY+Y+1) 18300 CALL CLPRINT(C,KBX+X,KBY+Y+1,KB_T$) 18310 KBLINK=MOD(KBLINK+1,60) 18320 IF KBLINK<30 THEN 18330 CALL CLPRINT(C,X,Y,">"+R$+" ") 18340 ELSE 18350 CALL CLPRINT(C,X,Y,">"+R$+CHR$(160)+" ") 18360 END IF 18370 FSYNC 1 18380 IF PADX(1,6,2)=1 OR PADX(1,5,2)=1 OR INK$<>"" THEN 18390 IF KB_T$="." THEN EXIT DO 18400 R$=R$(1:16)+KB_T$ 18410 END IF 18420 IF PADX(1,7,2)=1 OR INK=8 THEN R$(LEN(R$):LEN(R$))="" 18430 IF INK=27 THEN 18440 CALL CLPRINT(C,X,Y,REPEAT$(" ",19)) 18450 R$="" 18460 END IF 18470 LOOP UNTIL PADX(1,20,2)=1 OR INK=10 18480 CALL CLPRINT(7,X,Y,REPEAT$(" ",LEN(R$)+2)) 18490 CALL CLPRINT(7,X,Y+1," ") 18500 CALL CLPRINT(7,X,Y+2," ") 18510 CALL CLPRINT(7,X,Y+3," ") 18520 END SUB 18530 !========================================== 18540 ! FUNCTION INFORMATION 18550 !------------------------------------------ 18560 SUB MENU(F) 18570 TILEOFF 601 18580 SPROFF 601 18590 TILEOFF 602 18600 SPROFF 602 18610 CLEAR 18620 CALL CLPRINT((F=0)*7,1,0,"FILE") 18630 CALL CLPRINT(0,-1,-1," / ") 18640 CALL CLPRINT((F=1)*7,-1,-1,"DATA") 18650 CALL CLPRINT(0,-1,-1," / ") 18660 CALL CLPRINT((F=2)*7,-1,-1,"EDIT") 18670 CALL CLPRINT(0,-1,-1," / ") 18680 CALL CLPRINT((F=3)*7,-1,-1,"SEARCH") 18690 CALL CLPRINT(0,-1,-1," / ") 18700 CALL CLPRINT((F=4)*7,-1,-1,"SHEET") 18710 CALL VALFORM(R$,EOF+1,6) 18720 CALL CLPRINT(7,13,1,"DATA SIZE:"+R$) 18730 CALL VALFORM(R$,DMAX,6) 18740 CALL CLPRINT(-1,-1,-1,"/"+R$) 18750 CALL VALFORM(R$,DMAX-EOF-1,6) 18760 CALL CLPRINT(-1,-1,-1," REST:"+R$) 18770 TEXTCOL WHITE 18780 LOCATE 29,2 18790 PRINT "SIZE="; 18800 CALL VALFORM(X$,XF(ZL),3) 18810 CALL VALFORM(Y$,YF(ZL),3) 18820 CALL VALFORM(Z$,TBLN(0),3) 18830 PRINT "("+X$+","+Y$+","+Z$+")" 18840 LOCATE 26,3 18850 PRINT "(X,Y,N)="; 18860 CALL VALFORM(X$,XL,3) 18870 CALL VALFORM(Y$,YL,3) 18880 CALL VALFORM(Z$,ZL,3) 18890 PRINT "("+X$+","+Y$+","+Z$+")" 18900 END SUB 18910 !========================================== 18920 ! FILE OPERATION 18930 !------------------------------------------ 18940 SUB FILE 18950 AUTO_S=30 18960 AUTO_E=33 18970 CALL CLPRINT(0,2,5,"新規作成") 18980 CALL CLPRINT(0,2,6,"新規SHEET追加") 18990 CALL CLPRINT(0,2,7,"開く") 19000 CALL CLPRINT(0,2,8,"追加で開く") 19010 CALL CLPRINT(0,2,9,"名前を付けて保存") 19020 CALL CLPRINT(0,2,10,"最適化保存して終了") 19030 CALL CLPRINT(0,2,11,"旧形式の読み込み") 19040 DO 19050 CALL SCRSTR(S$,2,FCSR+5,18) 19060 CALL CLPRINT(0,2,FCSR+5,S$) 19070 CALL PADX(1) 19080 FCSR=MOD(FCSR+(PADX(1,4,2)=1)-(PADX(1,3,2)=1),7) 19090 FCSR=MOD(FCSR+(PADX(1,13,2)=1)-(PADX(1,13,2)=-1),7) 19100 CALL SCRSTR(S$,2,FCSR+5,18) 19110 CALL CLPRINT(7,2,FCSR+5,S$) 19120 FSYNC 1 19130 IF PADX(1,5,2)=1 OR PADX(1,6,2)=1 THEN 19140 CALL FILE1 19150 EXIT DO 19160 END IF 19170 IF PADX(1,1,2)=1 OR PADX(1,2,2)=1 OR PADX(1,9,2)=1 OR PADX(1,10,2)=1 THEN 19180 EXIT DO 19190 END IF 19200 LOOP 19210 END SUB 19220 !========================================== 19230 ! FILE OPERATION SUB1 19240 !------------------------------------------ 19250 SUB FILE1 19260 SELECT CASE FCSR 19270 CASE 0 ! 新規作成 19280 CALL CLPRINT(7,2,13,"編集中のデータは") 19290 CALL CLPRINT(7,2,14," 失われます") 19300 CALL CLPRINT(7,2,15,"よろしいですか?") 19310 R=1 19320 CALL YNSELECT(R,7,2,17) 19330 CALL CLPRINT(7,2,13," ") 19340 CALL CLPRINT(7,2,14," ") 19350 CALL CLPRINT(7,2,15," ") 19360 IF R=0 THEN 19370 DO 19380 CALL CLPRINT(7,2,13,"SIZE X= ,Y= ") 19390 CALL VALSET(FILEX,4,9,13,1,256) 19400 IF PADX(1,7,2)=1 THEN EXIT DO 19410 CALL VALSET(FILEY,4,15,13,1,256) 19420 IF PADX(1,7,2)<>1 THEN 19430 CALL CLPRINT(7,2,14,"初期化中です ") 19440 CALL CLPRINT(7,2,15,"しばらくお待ち下さい") 19450 CALL INIT_SYSTEM 19460 CALL SCM(XL,YL,ZL,0) 19470 EXIT DO 19480 END IF 19490 LOOP 19500 END IF 19510 CASE 1 ! 追加で新規作成 19520 DO 19530 CALL CLPRINT(7,2,13,"SIZE X= ,Y= ") 19540 CALL VALSET(FILEX,4,9,13,1,256) 19550 IF PADX(1,7,2)=1 THEN EXIT DO 19560 CALL VALSET(FILEY,4,15,13,1,256) 19570 IF PADX(1,7,2)<>1 THEN 19580 CALL SHEETINS(FILEX,FILEY) 19590 CALL SCM(XL,YL,ZL,0) 19600 EXIT DO 19610 END IF 19620 LOOP 19630 CASE 2 ! 開く 19640 S$=FN$ 19650 CALL KEYBOARD(S$,7,2,13) 19660 CALL FNCHK(R,S$) 19670 IF R=0 THEN 19680 FN$=S$ 19690 CALL CLPRINT(7,2,13,CHR$(34)+FN$+CHR$(34)) 19700 CALL CLPRINT(7,2,14," を開いています") 19710 CALL FLOAD(FN$,L_) 19720 CALL SCM(XL,YL,ZL,0) 19730 END IF 19740 CASE 3 ! 追加で開く 19750 S$=FN$ 19760 CALL KEYBOARD(S$,7,2,13) 19770 CALL FNCHK(R,S$) 19780 IF R=0 THEN 19790 FN$=S$ 19800 CALL CLPRINT(7,2,13,CHR$(34)+FN$+CHR$(34)) 19810 CALL CLPRINT(7,2,14," を開いています") 19820 VARLOAD FN$,R_ 19830 CALL CLPRINT(7,2,13,CHR$(34)+FN$+CHR$(34)) 19840 CALL CLPRINT(7,2,14," を結合しています") 19850 CALL FMERGE 19860 CALL SCM(XL,YL,ZL,0) 19870 END IF 19880 CASE 4 ! 名前をつけて保存 19890 S$=FN$ 19900 CALL KEYBOARD(S$,7,2,13) 19910 CALL FNCHK(R,S$) 19920 IF R=0 THEN 19930 FN$=S$ 19940 CALL CLPRINT(7,2,13,CHR$(34)+FN$+CHR$(34)) 19950 CALL CLPRINT(7,2,14," を保存しています") 19960 CALL FSAVE(FN$,L_) 19970 END IF 19980 CASE 5 ! 最適化保存して終了 19990 S$=FN$ 20000 CALL KEYBOARD(S$,7,2,13) 20010 CALL FNCHK(R,S$) 20020 IF R=0 THEN 20030 FN$=S$ 20040 CALL CLPRINT(7,2,13,CHR$(34)+FN$+CHR$(34)) 20050 CALL CLPRINT(7,2,14," を保存しています") 20060 CALL FSAVE2(FN$,L_,EOF) 20070 END IF 20080 CASE 6 ! 旧形式の読み込み 20090 S$=FN$ 20100 CALL KEYBOARD(S$,7,2,13) 20110 CALL FNCHK(R,S$) 20120 IF R=0 THEN 20130 FN$=S$ 20140 CALL CLPRINT(7,2,13,CHR$(34)+FN$+CHR$(34)) 20150 DO 20160 CALL CLPRINT(7,2,15,"SIZE X= ,Y= ") 20170 CALL VALSET(FILEX,4,9,15,1,256) 20180 IF PADX(1,7,2)=1 THEN EXIT DO 20190 CALL VALSET(FILEY,4,15,15,1,256) 20200 IF PADX(1,7,2)<>1 THEN 20210 CALL CLPRINT(7,2,17," 開いています") 20220 CALL FLOAD2(FN$,L_,FILEX,FILEY) 20230 CALL SCM(XL,YL,ZL,0) 20240 EXIT DO 20250 END IF 20260 LOOP 20270 END IF 20280 END SELECT 20290 END SUB 20300 !========================================== 20310 ! SHEET INSERT 20320 !------------------------------------------ 20330 SUB SHEETINS(SI_X,SI_Y) 20340 IF TBLN(0)>255 THEN 20350 CALL CLPRINT(2,2,22,"これ以上追加できません") 20360 CALL PADOFF(1) 20370 CALL PADON(1) 20380 CALL CLPRINT(0,0,22,REPEAT$(" ",49)) 20390 CALL PADOFF(1) 20400 EXIT SUB 20410 END IF 20420 SI_A=SI_X*SI_Y*2 20430 IF SI_A+3+EOF>=DMAX THEN 20440 CALL CLPRINT(2,2,22,"DATA SIZEが大きすぎます") 20450 CALL PADOFF(1) 20460 CALL PADON(1) 20470 CALL CLPRINT(0,0,22,REPEAT$(" ",49)) 20480 CALL PADOFF(1) 20490 EXIT SUB 20500 END IF 20510 FOR I=EOF TO TBLP(1) STEP -1 20520 L_(I+SI_A+3)=L_(I) 20530 NEXT I 20540 FOR I=TBLP(1)-1 TO EOC STEP -1 20550 L_(I+SI_A)=L_(I) 20560 NEXT I 20570 CALL DEF_PRM(CELLT,0) 20580 FOR I=EOC TO EOC+SI_A-1 STEP 2 20590 L_(I)=CELLT(0) 20600 L_(I+1)=CELLT(1) 20610 NEXT I 20620 EOC=EOC+SI_A 20630 BOD,TBLP(0)=EOC+1 20640 FOR I=1 TO 11 20650 TBLP(I)=TBLP(I)+SI_A+3 20660 NEXT I 20670 EOF=EOF+SI_A+3 20680 TBLN(0)=TBLN(0)+1 20690 L_(BOD)=TBLN(0) 20700 L_(BOD+TBLN(0)*3-2)=SI_X 20710 L_(BOD+TBLN(0)*3-1)=SI_Y 20720 L_(BOD+TBLN(0)*3)=131 20730 CALL ZO_INF(L_,TBLN) 20740 END SUB 20750 !========================================== 20760 ! FILE MERGE 20770 !------------------------------------------ 20780 SUB FMERGE 20790 CALL GET_FINF(R_,TBRP,TBRN) 20800 IF TBLN(0)+TBRN(0)>256 THEN 20810 CALL CLPRINT(2,2,22,"SHEET数が多すぎます") 20820 CALL PADOFF(1) 20830 CALL PADON(1) 20840 CALL CLPRINT(0,0,22,REPEAT$(" ",49)) 20850 CALL PADOFF(1) 20860 EXIT SUB 20870 END IF 20880 FM_A=TBLP(11)+TBRP(11)-22 ! =EOF 20890 IF FM_A>=DMAX THEN 20900 CALL CLPRINT(2,2,22,"DATA SIZEが大きすぎます") 20910 CALL PADOFF(1) 20920 CALL PADON(1) 20930 CALL CLPRINT(0,0,22,REPEAT$(" ",49)) 20940 CALL PADOFF(1) 20950 EXIT SUB 20960 END IF 20970 CALL SFTTBL(R_,TBRP,TBRN,0,TBLN(0)) 20980 EOF,TBLP(11)=FM_A 20990 L_(EOF)=-2 21000 FOR I=10 TO 1 STEP -1 21010 FM_A=TBLP(I)+TBRP(I)-I*2 21020 FOR J=TBLN(I)*2+1 TO 0 STEP -1 21030 L_(J+FM_A)=L_(J+TBLP(I)) 21040 NEXT J 21050 TBLP(I)=FM_A 21060 FM_A=FM_A+TBLN(I)*2 21070 FOR J=2 TO TBRN(I)*2+1 21080 L_(J+FM_A)=R_(J+TBRP(I)) 21090 NEXT J 21100 L_(TBLP(I)),TBLN(I)=TBLN(I)+TBRN(I) 21110 NEXT I 21120 FM_A=TBLP(0)+TBRP(0)-1 21130 FOR J=TBLN(0)*3 TO 0 STEP -1 21140 L_(J+FM_A)=L_(J+TBLP(0)) 21150 NEXT J 21160 BOD=FM_A 21170 FM_A=FM_A+TBLN(0)*3 21180 FOR J=1 TO TBRN(I)*3 21190 L_(J+FM_A)=R_(J+TBRP(0)) 21200 NEXT J 21210 L_(BOD),TBLN(0)=TBLN(0)+TBRN(0) 21220 FM_A=TBLP(0)-1 21230 FOR J=0 TO TBRP(0)-2 21240 L_(J+FM_A)=R_(J) 21250 NEXT J 21260 TBLP(0)=BOD 21270 EOC=BOD-1 21280 L_(EOC)=-1 21290 CALL ZO_INF(L_,TBLN) 21300 END SUB 21310 !========================================== 21320 ! FILE NAME CHECK 21330 !------------------------------------------ 21340 SUB FNCHK(R,S$) 21350 IF LEN(S$)=0 THEN R=1 ELSE R=0 21360 FN_D$="" 21370 FN_N$=S$ 21380 A=0 21390 FOR I=1 TO LEN(S$) 21400 IF S$(I:I)="/" THEN 21410 IF A=0 THEN 21420 FN_D$=S$(1:I-1) 21430 FN_N$=S$(I+1:LEN(S$)) 21440 A=1 21450 ELSE 21460 R=1 21470 EXIT FOR 21480 END IF 21490 END IF 21500 NEXT I 21510 IF LEN(FN_D$)>8 THEN R=1 21520 IF LEN(FN_N$)>8 THEN R=1 21530 END SUB 21540 !========================================== 21550 ! FILE LOAD 21560 !------------------------------------------ 21570 SUB FLOAD(S$,F()) 21580 VARLOAD S$,F 21590 CALL GET_FINF(F,TBLP,TBLN) 21600 XL,YL,ZL=0 21610 END SUB 21620 !========================================== 21630 ! FILE LOAD 2 21640 !------------------------------------------ 21650 SUB FLOAD2(S$,F(),X,Y) 21660 VARLOAD S$,R_ 21670 EOC=X*Y 21680 FOR FL_I=0 TO EOC-1 21690 L_(FL_I*2)=R_(FL_I) 21700 CALL DEF_PRM(F,FL_I*2) 21710 NEXT FL_I 21720 EOC=EOC*2 21730 F(EOC)=-1 21740 BOD=EOC+1 21750 F(BOD)=1 21760 F(BOD+1)=X 21770 F(BOD+2)=Y 21780 F(BOD+3)=128+3 21790 FOR I=1 TO 20 21800 F(BOD+3+I)=0 21810 NEXT I 21820 CALL GET_FINF(F,TBLP,TBLN) 21830 XL,YL,ZL=0 21840 END SUB 21850 !========================================== 21860 ! FILE SAVE 21870 !------------------------------------------ 21880 SUB FSAVE(S$,F()) 21890 VARSAVE S$,F 21900 END SUB 21910 !========================================== 21920 ! FILE SAVE 2 21930 !------------------------------------------ 21940 SUB FSAVE2(S$,F(),E) 21950 DIM SS(E) 21960 FOR I=0 TO E 21970 SS(I)=F(I) 21980 NEXT I 21990 VARSAVE S$,SS 22000 INIT 22010 TEXTMODE 2 22020 END 22030 END SUB 22040 !========================================== 22050 ! MAP-CHIP INFORMATION 22060 !------------------------------------------ 22070 SUB CHIP_INF(X,Y,Z,W) 22080 IF W>1 THEN 22090 LOCATE 0,5 22100 PRINT " MAP-CHIP:" 22110 PRINT " Z-POS FLAG:" 22120 PRINT " WALK X:" 22130 PRINT " ???? X:" 22140 PRINT " SHIP X:" 22150 PRINT " LANDING X:" 22160 PRINT " RESERVE:" 22170 PRINT " JUMP INDEX:---" 22180 PRINT " A-EVENT FLAG:---" 22190 PRINT " EVENT FLAG:---" 22200 PRINT " ITEM FLAG:---" 22210 PRINT " ENCOUNT: % %" 22220 PRINT " ENEMY INDEX:" 22230 PRINT " FLOOR INDEX:" 22240 PRINT " DAMAGE:" 22250 END IF 22260 IF W>0 THEN 22270 CALL D2B(BDB,CELL,0) 22280 T=BDB(0) 22290 SPRTEX 601,C_(T),A_(T),B_(T),A_(T)+32,B_(T)+32 22300 SPRPAL 601,10,BDB(1),1 22310 SPRPOS 601,188,44,9 22320 SPRDISP 601 22330 TILECOL 601,64,128,64,128 22340 TILEPOS 601,186,43,222,61,8 22350 TILEDISP 601 22360 FOR CI_I=2 TO 15 22370 IF CI_I<8 OR CI_I>11 THEN 22380 LOCATE 14,CI_I+4 22390 IF CI_I=12 THEN 22400 A=INT(BDB(CI_I)/.63+.5) 22410 CALL VALFORM(R$,A,3) 22420 ELSE 22430 CALL VALFORM(R$,BDB(CI_I),3) 22440 END IF 22450 PRINT R$ 22460 END IF 22470 NEXT CI_I 22480 END IF 22490 H=(X*YF(Z)+Y+ZO(Z))*2 22500 CALL D2B(BDB,L_,H) 22510 T=BDB(0) 22520 SPRTEX 602,C_(T),A_(T),B_(T),A_(T)+32,B_(T)+32 22530 SPRPAL 602,10,BDB(1),1 22540 IF W>0 THEN 22550 SPRPOS 602,248,44,9 22560 SPRDISP 602 22570 TILECOL 602,64,128,64,128 22580 TILEPOS 602,246,43,282,61,8 22590 TILEDISP 602 22600 END IF 22610 FOR CI_I=2 TO 15 22620 LOCATE 19,CI_I+4 22630 IF CI_I=12 THEN 22640 H=INT(BDB(CI_I)/.63+.5) 22650 CALL VALFORM(R$,H,3) 22660 ELSE 22670 CALL VALFORM(R$,BDB(CI_I),3) 22680 END IF 22690 PRINT R$ 22700 NEXT CI_I 22710 END SUB 22720 !========================================== 22730 ! MAP-CHIP DATA SETTING 22740 !------------------------------------------ 22750 SUB DATASET 22760 AUTO_S=30 22770 AUTO_E=33 22780 CALL CSR(0) 22790 TEXTCOL BLACK 22800 CALL CHIP_INF(XL,YL,ZL,2) 22810 DO 22820 TILECOL 2,0,0,255,32 22830 TILECOL 3,255,255,255,128 22840 TILEPOS 2,24,41,296,189,1 22850 TILEPOS 3,22,40,298,190,0 22860 TILEDISP 2 22870 TILEDISP 3 22880 CALL SCRSTR(S$,1,DCSR+5,22) 22890 CALL CLPRINT(0,1,DCSR+5,S$) 22900 CALL PADX(1) 22910 DCSR=MOD(DCSR+(PADX(1,4,2)=1)-(PADX(1,3,2)=1),15) 22920 DCSR=MOD(DCSR+(PADX(1,13,2)=1)-(PADX(1,13,2)=-1),15) 22930 CALL SCRSTR(S$,1,DCSR+5,13) 22940 CALL CLPRINT(7,1,DCSR+5,S$) 22950 IF DCSR<7 OR DCSR>10 THEN 22960 CALL SCRSTR(S$,14,DCSR+5,4) 22970 CALL CLPRINT(-1,14,DCSR+5,S$) 22980 ELSE 22990 CALL SCRSTR(S$,19,DCSR+5,4) 23000 CALL CLPRINT(-1,19,DCSR+5,S$) 23010 END IF 23020 FSYNC 1 23030 IF PADX(1,5,2)=1 OR PADX(1,6,2)=1 THEN 23040 CALL DATASET1 23050 IF PADX(1,6,2)=1 THEN 23060 FUNC=2 23070 EXIT DO 23080 END IF 23090 ELSEIF PADX(1,1,2)=1 OR PADX(1,2,2)=1 OR PADX(1,9,2)=1 OR PADX(1,10,2)=1 THEN 23100 EXIT DO 23110 ELSEIF PADX(1,17,2)=1 THEN 23120 CALL DEF_FLG(CELL,0) 23130 TEXTCOL BLACK 23140 CALL CHIP_INF(XL,YL,ZL,1) 23150 END IF 23160 LOOP 23170 TILEOFF 2 23180 TILEOFF 3 23190 END SUB 23200 !========================================== 23210 ! MAP-CHIP DATA SETTING SUB 23220 !------------------------------------------ 23230 SUB DATASET1 23240 IF DCSR<7 OR DCSR>10 THEN 23250 CALL D2B(BDB,CELL,0) 23260 ELSE 23270 E2_D=(XL*YF(ZL)+YL+ZO(ZL))*2 23280 CALL D2B(BDB,L_,E2_D) 23290 END IF 23300 SELECT CASE DCSR 23310 CASE 0 ! TEX&PAL CHANGE 23320 E2_T=BDB(0) 23330 E2_P=BDB(1) 23340 CALL CHIPSEL(E2_T,E2_P) 23350 IF PADX(1,5,2)=1 OR PADX(1,6,2)=1 THEN 23360 BDB(0)=E2_T 23370 BDB(1)=E2_P 23380 CALL B2D(CELL,BDB,0) 23390 CALL DEF_FLG(CELL,0) 23400 END IF 23410 AUTO_S=30 23420 AUTO_E=33 23430 CASE 1 TO 5 ! Z-POS TO LANDING X 23440 E2_V=BDB(DCSR+1) 23450 CALL VALSET(E2_V,4,16,DCSR+5,0,1) 23460 BDB(DCSR+1)=E2_V 23470 CASE 6 ! RESERVE 23480 E2_V=BDB(7) 23490 CALL VALSET(E2_V,4,16,11,0,3) 23500 BDB(7)=E2_V 23510 CASE 7 ! JUMP INDEX 23520 DO 23530 E2_V=BDB(8) 23540 CALL VALSET(E2_V,4,21,12,0,7) 23550 IF PADX(1,7,2)=1 THEN EXIT DO 23560 SELECT CASE E2_V 23570 CASE 1 ! FILED移動 23580 DO 23590 CALL CLPRINT(7,2,21,"<フィールド> ジャンプ先を指定して下さい") 23600 CALL POSSEL 23610 IF PADX(1,7,2)=1 THEN EXIT DO 23620 DO 23630 CALL PADX(1) 23640 DIRCSR=MOD(DIRCSR+(PADX(1,1,2)=1)-(PADX(1,2,2)=1),3) 23650 DIRCSR=MOD(DIRCSR+(PADX(1,14,2)=1)-(PADX(1,14,2)=-1),3) 23660 CALL CLPRINT((DIRCSR=0)*7, 4,22,"双方向") 23670 CALL CLPRINT(0,-1,-1," / ") 23680 CALL CLPRINT((DIRCSR=1)*7,-1,-1,"順方向") 23690 CALL CLPRINT(0,-1,-1," / ") 23700 CALL CLPRINT((DIRCSR=2)*7,-1,-1,"逆方向") 23710 IF PADX(1,5,2)=1 OR PADX(1,6,2)=1 OR PADX(1,7,2)=1 THEN EXIT DO 23720 FSYNC 1 23730 LOOP 23740 IF PADX(1,5,2)=1 OR PADX(1,6,2)=1 THEN 23750 CALL DELTBL(BDB(8),XL,YL,ZL) 23760 IF DIRCSR<>1 THEN 23770 E2_D=XL+YL*256+ZL*65536 23780 CALL SETTBL(1,XR,YR,ZR,E2_D) 23790 E2_D=(XR*YF(ZR)+YR+ZO(ZR))*2 23800 CALL D2B(BDB,L_,E2_D) 23810 BDB(8)=1 23820 CALL B2D(L_,BDB,E2_D) 23830 END IF 23840 IF DIRCSR<>2 THEN 23850 E2_D=XR+YR*256+ZR*65536 23860 CALL SETTBL(1,XL,YL,ZL,E2_D) 23870 E2_D=(XL*YF(ZL)+YL+ZO(ZL))*2 23880 CALL D2B(BDB,L_,E2_D) 23890 BDB(8)=1 23900 CALL B2D(L_,BDB,E2_D) 23910 END IF 23920 END IF 23930 CALL CLPRINT(0,0,22,REPEAT$(" ",49)) 23940 LOOP UNTIL PADX(1,5,2)=1 OR PADX(1,6,2)=1 23950 CALL SCM(XL,YL,ZL,1) 23960 CASE 2 ! 街 23970 CALL CLPRINT(7,2,21,"<街> 街番号: ") 23980 CALL SRCHTBL(E2_D,E2_V,XL,YL,ZL) 23990 IF E2_D<0 THEN E2_D=0 24000 CALL VALSET(E2_D,4,14,21,0,99) 24010 CASE 3 ! 城 24020 CALL CLPRINT(7,2,21,"<城> 城番号: ") 24030 CALL SRCHTBL(E2_D,E2_V,XL,YL,ZL) 24040 IF E2_D<0 THEN E2_D=0 24050 CALL VALSET(E2_D,4,14,21,0,99) 24060 CASE 4 ! 家 24070 CALL CLPRINT(7,2,21,"<家> 家番号: ") 24080 CALL SRCHTBL(E2_D,E2_V,XL,YL,ZL) 24090 IF E2_D<0 THEN E2_D=0 24100 CALL VALSET(E2_D,4,14,21,0,99) 24110 CASE 5 ! 予約1 24120 CALL CLPRINT(7,2,21,"<予約1> 予約1番号: ") 24130 CALL SRCHTBL(E2_D,E2_V,XL,YL,ZL) 24140 IF E2_D<0 THEN E2_D=0 24150 CALL VALSET(E2_D,4,20,21,0,99) 24160 CASE 6 ! 予約2 24170 CALL CLPRINT(7,2,21,"<予約2> 予約2番号: ") 24180 CALL SRCHTBL(E2_D,E2_V,XL,YL,ZL) 24190 IF E2_D<0 THEN E2_D=0 24200 CALL VALSET(E2_D,4,20,21,0,99) 24210 CASE 7 ! 予約3 24220 CALL CLPRINT(7,2,21,"<予約3> 予約3番号: ") 24230 CALL SRCHTBL(E2_D,E2_V,XL,YL,ZL) 24240 IF E2_D<0 THEN E2_D=0 24250 CALL VALSET(E2_D,4,20,21,0,99) 24260 END SELECT 24270 IF E2_V<>1 AND(PADX(1,5,2)=1 OR PADX(1,6,2)=1) THEN 24280 IF BDB(8)>0 AND E2_V<>BDB(8) THEN CALL DELTBL(BDB(8),XL,YL,ZL) 24290 IF E2_V>0 THEN CALL SETTBL(E2_V,XL,YL,ZL,E2_D) 24300 BDB(8)=E2_V 24310 E2_D=(XL*YF(ZL)+YL+ZO(ZL))*2 24320 CALL B2D(L_,BDB,E2_D) 24330 END IF 24340 CALL CLPRINT(0,0,21,REPEAT$(" ",49)) 24350 LOOP UNTIL PADX(1,5,2)=1 OR PADX(1,6,2)=1 24360 CASE 8 TO 10 ! A-EVENT,EVENT,ITEM FLAG 24370 DO 24380 E2_V=BDB(DCSR+1) 24390 CALL VALSET(E2_V,4,21,DCSR+5,0,1) 24400 IF PADX(1,7,2)=1 THEN EXIT DO 24410 IF E2_V>0 THEN 24420 SELECT CASE DCSR 24430 CASE 8 ! A-EVENT 24440 CALL CLPRINT(7,2,21,"A-EVENT番号: ") 24450 CALL SRCHTBL(E2_D,DCSR,XL,YL,ZL) 24460 IF E2_D<0 THEN E2_D=0 24470 CALL VALSET(E2_D,4,14,21,0,999) 24480 CASE 9 ! EVENT 24490 CALL CLPRINT(7,2,21,"EVENT番号: ") 24500 CALL SRCHTBL(E2_D,DCSR,XL,YL,ZL) 24510 IF E2_D<0 THEN E2_D=0 24520 CALL VALSET(E2_D,4,12,21,0,999) 24530 CASE 10 ! ITEM 24540 CALL CLPRINT(7,2,21,"ITEM番号: ") 24550 CALL SRCHTBL(E2_D,DCSR,XL,YL,ZL) 24560 IF E2_D<0 THEN E2_D=0 24570 CALL VALSET(E2_D,4,11,21,0,999) 24580 END SELECT 24590 IF PADX(1,5,2)=1 OR PADX(1,6,2)=1 THEN 24600 CALL SETTBL(DCSR,XL,YL,ZL,E2_D) 24610 BDB(DCSR+1)=1 24620 E2_D=(XL*YF(ZL)+YL+ZO(ZL))*2 24630 CALL B2D(L_,BDB,E2_D) 24640 END IF 24650 CALL CLPRINT(0,0,21,REPEAT$(" ",49)) 24660 ELSE 24670 CALL DELTBL(DCSR,XL,YL,ZL) 24680 BDB(DCSR+1)=0 24690 E2_D=(XL*YF(ZL)+YL+ZO(ZL))*2 24700 CALL B2D(L_,BDB,E2_D) 24710 END IF 24720 LOOP UNTIL PADX(1,5,2)=1 OR PADX(1,6,2)=1 24730 CASE 11 ! ENCOUNT 24740 E2_V=BDB(12) 24750 CALL VALSET(E2_V,4,14,16,0,63) 24760 BDB(12)=E2_V 24770 CASE 12 ! ENEMY INDEX 24780 E2_V=BDB(13) 24790 CALL VALSET(E2_V,4,14,17,0,255) 24800 BDB(13)=E2_V 24810 CASE 13 ! FLOOR INDEX 24820 E2_V=BDB(14) 24830 CALL VALSET(E2_V,4,16,18,0,3) 24840 BDB(14)=E2_V 24850 CASE 14 ! DAMAGE 24860 E2_V=BDB(15) 24870 CALL VALSET(E2_V,4,14,19,0,127) 24880 BDB(15)=E2_V 24890 END SELECT 24900 IF DCSR<7 OR DCSR>10 THEN CALL B2D(CELL,BDB,0) 24910 FSYNC 1 24920 TEXTCOL BLACK 24930 CALL CHIP_INF(XL,YL,ZL,2) 24940 CALL CSR(1) 24950 END SUB 24960 !========================================== 24970 ! POSITION SELECT FOR FIELD JUMP 24980 !------------------------------------------ 24990 SUB POSSEL 25000 AUTO_S=20 25010 AUTO_E=21 25020 CALL SRCHTBL(R,1,XL,YL,ZL) 25030 IF R<0 THEN 25040 ! XR=XL 25050 ! YR=YL 25060 ! ZR=ZL 25070 ELSE 25080 XR=MOD(R,256) 25090 YR=MOD(INT(R/256),256) 25100 ZR=INT(R/65536) 25110 END IF 25120 CALL SCM(XR,YR,ZR,0) 25130 CALL CSR(0) 25140 CALL PADOFF(1) 25150 DO 25160 CALL PADX(1) 25170 ZR=MOD(ZR+(PADX(1,12,2)=1)-(PADX(1,11,2)=1),TBLN(0)) 25180 XR=MIN(XF(ZR)-1,MAX(0,XR+(PADX(1,14,2)=1)-(PADX(1,14,2)=-1))) 25190 YR=MIN(YF(ZR)-1,MAX(0,YR+(PADX(1,13,2)=1)-(PADX(1,13,2)=-1))) 25200 XR=MIN(XF(ZR)-1,MAX(0,XR+(PADX(1,1,2)=1)-(PADX(1,2,2)=1))) 25210 YR=MIN(YF(ZR)-1,MAX(0,YR+(PADX(1,4,2)=1)-(PADX(1,3,2)=1))) 25220 CALL SCM(XR,YR,ZR,0) 25230 IF PADX(1,5,2)=1 OR PADX(1,6,2)=1 OR PADX(1,7,2)=1 THEN EXIT DO 25240 CALL CSR(0) 25250 FSYNC 1 25260 LOOP 25270 TILECOL 1,32,64,32,128 25280 AUTO_S=30 25290 AUTO_E=33 25300 END SUB 25310 !========================================== 25320 ! MAP-CHIP EDIT 25330 !------------------------------------------ 25340 SUB EDIT 25350 AUTO_S=20 25360 AUTO_E=21 25370 CALL SCM(XL,YL,ZL,1) 25380 CALL CSR(1) 25390 TEXTCOL WHITE 25400 CALL CHIP_INF(XL,YL,ZL,2) 25410 CALL PADOFF(1) 25420 DO 25430 CALL PADX(1) 25440 ZL=MOD(ZL+(PADX(1,12,2)=1)-(PADX(1,11,2)=1),TBLN(0)) 25450 XL=MIN(XF(ZL)-1,MAX(0,XL+(PADX(1,14,2)=1)-(PADX(1,14,2)=-1))) 25460 YL=MIN(YF(ZL)-1,MAX(0,YL+(PADX(1,13,2)=1)-(PADX(1,13,2)=-1))) 25470 XL=MIN(XF(ZL)-1,MAX(0,XL+(PADX(1,1,2)=1)-(PADX(1,2,2)=1))) 25480 YL=MIN(YF(ZL)-1,MAX(0,YL+(PADX(1,4,2)=1)-(PADX(1,3,2)=1))) 25490 CALL SCM(XL,YL,ZL,0) 25500 IF PADX(1,6,2)>0 THEN 25510 H=(XL*YF(ZL)+YL+ZO(ZL))*2 25520 L_(H)=INT(L_(H)/BN(18))*BN(18)+CELL(0) 25530 L_(H+1)=CELL(1) 25540 CALL CHIP_INF(XL,YL,ZL,0) 25550 ELSEIF PADX(1,7,2)>0 THEN 25560 H=(XL*YF(ZL)+YL+ZO(ZL))*2 25570 CELL(0)=MOD(L_(H),BN(18)) 25580 CELL(1)=L_(H+1) 25590 CALL CHIP_INF(XL,YL,ZL,1) 25600 ELSEIF PADX(1,8,2)=1 THEN 25610 CALL FILL 25620 CALL CHIP_INF(XL,YL,ZL,0) 25630 ELSEIF PADX(1,9,2)=1 OR PADX(1,10,2)=1 THEN 25640 EXIT DO 25650 ELSEIF PADX(1,5,2)=1 THEN 25660 CALL D2B(BDB,CELL,0) 25670 E2_T=BDB(0) 25680 E2_P=BDB(1) 25690 CALL CHIPSEL(E2_T,E2_P) 25700 BDB(0)=E2_T 25710 BDB(1)=E2_P 25720 IF PADX(1,5,2)=1 OR PADX(1,6,2)=1 THEN 25730 CALL B2D(CELL,BDB,0) 25740 CALL DEF_FLG(CELL,0) 25750 END IF 25760 CALL CHIP_INF(XL,YL,ZL,2) 25770 CALL PADOFF(1) 25780 ELSEIF PADX(1,17,2)=1 THEN 25790 CALL DEF_FLG(CELL,0) 25800 CALL CHIP_INF(XL,YL,ZL,1) 25810 ELSE 25820 CALL CHIP_INF(XL,YL,ZL,0) 25830 END IF 25840 CALL CSR(1) 25850 FSYNC 1 25860 LOOP 25870 TILECOL 1,32,64,32,128 25880 END SUB 25890 !========================================== 25900 ! MAP-CHIP FILLING 25910 !------------------------------------------ 25920 SUB FILL 25930 A=MOD(L_((XL*YF(ZL)+YL+ZO(ZL))*2),2048) 25940 R_(0)=XL 25950 R_(1)=YL 25960 X=XF(ZL) 25970 Y=YF(ZL) 25980 Z=ZO(ZL) 25990 B=0 26000 C=(R_(B)*Y+R_(B+1)+Z)*2 26010 DO 26020 D=L_(C+1) 26030 IF D>-1 AND R_(B)>0 AND REMAINDER(L_(C-Y*2),2048)=A THEN 26040 L_(C+1)=-1 26050 R_(B+2)=R_(B)-1 26060 R_(B+3)=R_(B+1) 26070 B=B+2 26080 C=C-Y*2 26090 ELSEIF D>-2 AND R_(B+1)>0 AND REMAINDER(L_(C-2),2048)=A THEN 26100 L_(C+1)=-2 26110 R_(B+2)=R_(B) 26120 R_(B+3)=R_(B+1)-1 26130 B=B+2 26140 C=C-2 26150 ELSEIF D>-3 AND R_(B)-4 AND R_(B+1)TBLN(J) 27190 DS_V=L_(I*2+TBLP(J)) 27200 DS_Z=MOD(INT(DS_V/65536),256) 27210 IF DS_Z=DS_N THEN 27220 FOR K=I*2+TBLP(J) TO EOF-2 27230 L_(K)=L_(K+2) 27240 NEXT K 27250 FOR K=J+1 TO 11 27260 TBLP(K)=TBLP(K)-2 27270 NEXT K 27280 EOF=TBLP(11) 27290 TBLN(J)=TBLN(J)-1 27300 L_(TBLP(J))=TBLN(J) 27310 ELSE 27320 I=I+1 27330 END IF 27340 LOOP 27350 NEXT J 27360 I=1 27370 DO UNTIL I>TBLN(1) 27380 DS_V=L_(I*2+1+TBLP(1)) 27390 DS_Z=MOD(INT(DS_V/65536),256) 27400 IF DS_Z=DS_N THEN 27410 DS_V=L_(I*2+TBLP(1)) 27420 DS_X=MOD(DS_V,256) 27430 DS_Y=MOD(INT(DS_V/256),256) 27440 DS_Z=MOD(INT(DS_V/65536),256) 27450 DS_A=(DS_X*YF(DS_Z)+DS_Y+ZO(DS_Z))*2 27460 CELLT(0)=L_(DS_A) 27470 CELLT(1)=L_(DS_A+1) 27480 CALL D2B(BDB,CELLT,0) 27490 IF BDB(8)=1 THEN BDB(8)=0 27500 CALL B2D(CELLT,BDB,0) 27510 L_(DS_A)=CELLT(0) 27520 FOR K=I*2+TBLP(1) TO EOF-2 27530 L_(K)=L_(K+2) 27540 NEXT K 27550 FOR K=2 TO 11 27560 TBLP(K)=TBLP(K)-2 27570 NEXT K 27580 EOF=TBLP(11) 27590 TBLN(1)=TBLN(1)-1 27600 L_(TBLP(1))=TBLN(1) 27610 ELSE 27620 I=I+1 27630 END IF 27640 LOOP 27650 FOR I=DS_N*3+1+TBLP(0) TO EOF-3 27660 L_(I)=L_(I+3) 27670 NEXT I 27680 TBLN(0)=TBLN(0)-1 27690 L_(TBLP(0))=TBLN(0) 27700 EOF=EOF-3 27710 FOR I=1 TO 11 27720 TBLP(I)=TBLP(I)-3 27730 NEXT I 27740 DS_A=ZO(DS_N)*2 27750 DS_B=ZO(DS_N+1)*2 27760 DS_C=DS_B-DS_A 27770 FOR I=DS_B TO EOF 27780 L_(I-DS_C)=L_(I) 27790 NEXT I 27800 EOC=EOC-DS_C 27810 BOD=BOD-DS_C 27820 EOF=EOF-DS_C 27830 FOR I=0 TO 11 27840 TBLP(I)=TBLP(I)-DS_C 27850 NEXT I 27860 CALL ZO_INF(L_,TBLN) 27870 FOR J=1 TO 10 27880 FOR I=1 TO TBLN(J) 27890 DS_V=L_(I*2+TBLP(J)) 27900 DS_Z=MOD(INT(DS_V/65536),256) 27910 IF DS_Z>DS_N THEN 27920 DS_A=MOD(DS_V,65536) 27930 DS_Z=DS_Z-1 27940 L_(I*2+TBLP(J))=DS_Z*65536+DS_A 27950 END IF 27960 NEXT I 27970 NEXT J 27980 FOR I=1 TO TBLN(1) 27990 DS_V=L_(I*2+1+TBLP(1)) 28000 DS_Z=MOD(INT(DS_V/65536),256) 28010 IF DS_Z>DS_N THEN 28020 DS_A=MOD(DS_V,65536) 28030 DS_Z=DS_Z-1 28040 L_(I*2+1+TBLP(1))=DS_Z*65536+DS_A 28050 END IF 28060 NEXT I 28070 END SUB 28080 !========================================== 28090 ! OPTIONS 28100 !------------------------------------------ 28110 SUB OPTIONS 28120 END SUB