プチコンmkII

  1. ’=====================
  2. ’CHARACTER EDITOR v2.1
  3. ’(c)SmileBoom Co.Ltd.
  4. ’・ハ゜レットカンケイシュウセイ
  5. ’=====================
  6. CLS:ICONCLR
  7. FOR P=1 TO 0 STEP -1
  8.  GPAGE P,P,P:GCLS 0:GPRIO 3
  9.  SPPAGE P:SPCLR
  10.  BGPAGE P:BGCLR
  11.  BGCLIP 0,0,31,23
  12.  BGOFS 0,0,0:BGOFS 1,0,0
  13. NEXT
  14. VISIBLE 1,1,0,0,1,1
  15. ’---
  16. CLEAR
  17. DIM CBANK(3),CBMAX(3),CSTR$(3)
  18. DIM CS$(3,4),CTYPE$(3)
  19. DIM MD$(4),SPIN(5),OFS(8,8)
  20. DIM BCNT(4),ZST(4),BZC(4)
  21. DIM SW(8,8)
  22. ’--- キャラハ゛ンク
  23. DATA ”BGU”,4,”BG”
  24. DATA ”SPU”,8,”SP”
  25. DATA ”BGF”,1,”BG”
  26. FOR I=0 TO 2
  27.  READ CSTR$(I),CBMAX(I),CTYPE$(I)
  28. NEXT
  29. ’---
  30. BCNT(0)=1:ZST(0)=8:BZC(0)=2
  31. BCNT(1)=2:ZST(1)=8:BZC(1)=2
  32. BCNT(2)=4:ZST(2)=4:BZC(2)=4
  33. BCNT(3)=8:ZST(3)=2:BZC(3)=8
  34. ’--- カ-ソル
  35. DATA ”й”,”и”,”ж”,”з”
  36. DATA ” ”,” ”,” ”,” ”
  37. FOR I=0 TO 1
  38.  FOR J=0 TO 3
  39.   READ CS$(I,J)
  40.  NEXT
  41. NEXT
  42. ’--- モート゛モシ゛レツ
  43. DATA ” FILE”
  44. DATA ”CLEAR”
  45. DATA ”PAINT”
  46. DATA ”  PEN”
  47. FOR I=0 TO 3
  48.  READ MD$(I)
  49. NEXT
  50. ’--- スフ゜ライトホ゛タン
  51. _X=0:_Y=1:_N=2:_G=3
  52. _C=4:_T=5:_MAX=6
  53. TP=8:SPTOP=32:PR=0
  54. SBMAX=29:SPINTOP=19
  55. DIM SB(SBMAX,_MAX)
  56. ’---0-7:chr bank
  57. DATA   8,160,48,1,0,0
  58. DATA  24,160,49,1,0,0
  59. DATA  40,160,50,1,0,0
  60. DATA  56,160,51,1,0,0
  61. DATA  72,160,52,1,0,0
  62. DATA  88,160,53,1,0,0
  63. DATA 104,160,54,1,0,0
  64. DATA 120,160,55,1,0,0
  65. ’---8-10:bg/sp
  66. DATA 144,104,64,8,0,0
  67. DATA 144,120,67,8,0,1
  68. DATA 144,136,66,8,0,0
  69. ’---11-18:size
  70. DATA 192,128,76,11,0,0
  71. DATA 208,128,77,11,0,0
  72. DATA 224,128,78,11,0,0
  73. DATA 240,128,79,11,0,0
  74. DATA 192,144,76,15,0,0
  75. DATA 208,144,77,15,0,0
  76. DATA 224,144,78,15,0,0
  77. DATA 240,144,79,15,0,0
  78. ’---19-24:r,g,b
  79. DATA 152,24,92,0,0,0
  80. DATA 168,24,93,0,0,0
  81. DATA 152,48,92,0,0,0
  82. DATA 168,48,93,0,0,0
  83. DATA 152,72,92,0,0,0
  84. DATA 168,72,93,0,0,0
  85. ’---25-28:anim c,w
  86. DATA 224, 96,92,0,0,0
  87. DATA 240, 96,93,0,0,0
  88. DATA 224,112,92,0,0,0
  89. DATA 240,112,93,0,0,0
  90. ’---29
  91. SPPAGE 1
  92. FOR I=0 TO SBMAX-1
  93.  FOR J=0 TO _MAX-1
  94.   READ SB(I,J)
  95.  NEXT
  96.  SPSET I+SPTOP,SB(I,_N),0,0,0,PR
  97.  SPOFS I+SPTOP,SB(I,_X),-16
  98. NEXT
  99. ’---
  100. FOR I=0 TO 3
  101.  BREPEAT I,20,2
  102. NEXT
  103. ’--- ショキカ
  104. CPTP=-1:CTYPE=0
  105. GOSUB @SETCSTR
  106. PAL=0:COL=0:XC=7
  107. MODE=3:SPSW=FALSE
  108. CX=0:CY=0
  109. CSX=1:CSY=1:CSZ=1
  110. ZX=BCNT(CSX):ZY=BCNT(CSY)
  111. GOSUB @CALCZ:ZZ=BCNT(CSZ)
  112. GSX=256:ANTOP=84
  113. W1=0:W2=0:OLDAC=-1
  114. SPIN(3)=2:SPIN(4)=16
  115. GOSUB @ZSWON
  116. GOSUB @MKOFS
  117. GOSUB @SETCSUB
  118. GOSUB @DISPINIT
  119. ’+---------+
  120. ’| メインル-フ゜ |
  121. ’+---------+
  122. @MAIN
  123.  ’
  124.  OX=TX:OY=TY:OS=TS
  125.  TX=TCHX:TY=TCHY:TS=TCHST
  126.  OLDB=B:B=BTRIG():BN=BUTTON()
  127.  OLDIC=IC:IC=ICONCHK()
  128.  ’
  129.  GOSUB @SPBUT
  130.  GOSUB @SELCOL
  131.  GOSUB @CSRMOVE
  132.  GOSUB @COLCSR
  133.  GOSUB @DRAWCOL
  134.  GOSUB @CHKMODE
  135.  GOSUB @SETAN
  136.  ’
  137.  VSYNC 1
  138.  ’
  139. GOTO @MAIN
  140. ’====================
  141. @CSRMOVE ’ウエカ゛メンノカ-ソル
  142. ’====================
  143. VX=0:VY=0
  144. IF B AND 1 THEN VY=VY-1
  145. IF B AND 2 THEN VY=VY+1
  146. IF B AND 4 THEN VX=VX-1
  147. IF B AND 8 THEN VX=VX+1
  148. IF VX+VY==0 THEN @PUTCSR
  149. IF BN AND 256 THEN @LBUTSUB
  150. ’---
  151. GOSUB @CLRCSR
  152. GOSUB @CMCHECK
  153. GOSUB @MKOFS
  154. GOSUB @CHRZOOM
  155. ’---
  156. @PUTCSR
  157. N=OFS(0,0)+(CBANK(CTYPE)*256)
  158. LOCATE 23,23
  159. PRINT RIGHT$(”   ”+STR$(N),4);
  160. LOCATE 28,23
  161. PRINT RIGHT$(” ”+STR$(CX),2);”,”;CY;
  162. COLOR CC:CC=CC+1
  163. CC=CC AND 15:N=0
  164. ’---
  165. @PCSRSUB
  166. IF CY THEN O=0:YO=CY-1:GOSUB @PCSRX
  167. IF CX THEN O=1:XO=CX-1:GOSUB @PCSRY
  168. O=2:YO=CY+ZY:GOSUB @PCSRX
  169. IF CX<32-ZX THEN O=3:XO=CX+ZX:GOSUB @PCSRY
  170. COLOR 0
  171. RETURN
  172. ’---
  173. @PCSRX
  174. FOR J=0 TO ZX-1
  175.  IF CX+J<32 THEN LOCATE CX+J,YO:PRINT CS$(N,O)
  176. NEXT
  177. RETURN
  178. ’---
  179. @PCSRY
  180. FOR J=0 TO ZY-1
  181.  LOCATE XO,CY+J:PRINT CS$(N,O)
  182. NEXT
  183. RETURN
  184. ’---
  185. @CLRCSR
  186. N=1:GOSUB @PCSRSUB
  187. RETURN
  188. ’====================
  189. @CMCHECK
  190. IF CTYPE!=1 THEN @CMS
  191. VX=VX*BZC(CSX)
  192. VY=VY*BZC(CSY)
  193. ’---
  194. @CMS
  195. CX=CX+VX
  196. IF CX<0 THEN CX=0
  197. IF CX>32-ZX THEN CX=32-ZX
  198. CY=CY+VY
  199. IF CY<0 THEN CY=0
  200. IF CY>8-ZY THEN CY=8-ZY
  201. ’---
  202. IF CTYPE!=1 THEN RETURN
  203. ’--- イチ ホセイ
  204. CX=FLOOR(CX/BZC(CSX))*BZC(CSX)
  205. CY=FLOOR(CY/BZC(CSY))*BZC(CSY)
  206. RETURN
  207. ’====================
  208. @SELCOL ’イロセンタク
  209. ’====================
  210. X=HDX:Y=HDY:W=255:H=15
  211. GOSUB @TOUCH
  212. IF R GOTO @_COLNEW
  213. ’--- ハ゛ンク
  214. X=PDX:Y=PDY:W=63:H=W
  215. GOSUB @TOUCH
  216. IF R==FALSE THEN RETURN
  217. X=FLOOR((X-PDX)/16)
  218. Y=FLOOR((Y-PDY)/16)
  219. SPCHR PAL+2,PAL+48,0,0,0,1
  220. C=PAL:PAL=Y*4+X
  221. SPCHR PAL+2,PAL+48,XC,0,0,1
  222. IF C==PAL THEN RETURN
  223. GOTO @SETCOLOR
  224. ’--- イロ
  225. @_COLNEW
  226. COL=FLOOR((X-HDX)/16)
  227. ’---
  228. @COLCSR
  229. X=COL*16:Y=0
  230. SPOFS 0,HDX+X,HDY+Y
  231. ’---
  232. @COLRGB
  233. X=19:C=PAL*16+COL
  234. COLREAD(CT$,C),SPIN(0),SPIN(1),SPIN(2)
  235. ’---
  236. @PUTSPIN
  237. N=0:Y= 2:C=13:GOSUB @PSPIN
  238. N=1:Y= 5:C= 4:GOSUB @PSPIN
  239. N=2:Y= 8:C=11:GOSUB @PSPIN
  240. X=24
  241. N=3:Y=12:C= 0:GOSUB @PSPIN
  242. N=4:Y=14:C= 0:GOSUB @PSPIN
  243. RETURN
  244. ’====================
  245. @COLBOX
  246. FOR I=0 TO 15
  247.  X=I*16+HDX+1:Y=HDY+1
  248.  GFILL X+1,Y,X+11,Y+12,PAL*16+I
  249.  GFILL X,Y+1,X+12,Y+11,PAL*16+I
  250. NEXT
  251. X=HDX+1:Y=HDY+1
  252. GLINE X,Y+12,X+12,Y,PAL*16+15
  253. RETURN
  254. ’====================
  255. @DRAWCOL ’ト゛ットヲオク
  256. ’====================
  257. IF BN AND 256 THEN @_SPOIT
  258. IF TS GOTO @DRCHECK
  259. IF DR THEN @DCOLSUB
  260. RETURN
  261. ’--- 
  262. @DRCHECK
  263. X=EX:Y=EY:W=127:H=W
  264. GOSUB @TOUCH
  265. IF R==FALSE THEN RETURN
  266. ’---
  267. GOSUB @CALCZ:Z=ZST(CSZ)
  268. X=EX+(FLOOR((TX-EX)/Z)*Z)
  269. Y=EY+(FLOOR((TY-EY)/Z)*Z)
  270. C=PAL*16+COL:DR=TRUE
  271. IF (C AND 15)==0 THEN C=0
  272. IF MODE==1 GOTO @_CLEAR
  273. IF MODE==3 GOTO @_PEN
  274. ’---
  275. @_PAINT
  276. C2=C+16:C2=C2 AND 255
  277. GBOX EX-1,EY-1,EX+128,EY+128,C2
  278. GPAINT X,Y,C
  279. GOSUB @ZSWON
  280. RETURN
  281. ’---
  282. @_CLEAR
  283. Z=Z*8
  284. X=FLOOR((X-EX)/Z)
  285. Y=FLOOR((Y-EY)/Z)
  286. XX=EX+X*Z:YY=EY+Y*Z
  287. GFILL XX,YY,XX+Z-1,YY+Z-1,C
  288. GOSUB @ZSWSET
  289. RETURN
  290. ’---
  291. @_PEN
  292. GFILL X,Y,X+Z-1,Y+Z-1,C
  293. X=FLOOR((X-EX)/(Z*8))
  294. Y=FLOOR((Y-EY)/(Z*8))
  295. GOSUB @ZSWSET
  296. RETURN
  297. ’---
  298. @_SPOIT
  299. COL=GSPOIT(TX,TY) AND 15
  300. RETURN
  301. ’---
  302. @ZSWON
  303. N=1:GOTO @ZSW
  304. @ZSWOFF
  305. N=0
  306. @ZSW
  307. FOR Y=0 TO 7
  308.  FOR X=0 TO 7
  309.   SW(X,Y)=N
  310.  NEXT
  311. NEXT
  312. RETURN
  313. ’---
  314. @ZSWSET
  315. SW(X,Y)=1
  316. RETURN
  317. ’====================
  318. @DCOLSUB ’ハナサレタラ サイヒ゛ョウカ゛
  319. GOSUB @REDO
  320. ’---
  321. @DRAWSUB
  322. SPPAGE 0:BGPAGE 0:GPAGE 1
  323. ZS=ZST(CSZ):ZD=ZS*8
  324. FOR YD=0 TO ZY-1
  325.  FOR XD=0 TO ZX-1
  326.   IF SW(XD,YD)==0 THEN @DSN
  327.   X=EX+XD*ZD:Y=EY+YD*ZD
  328.   I=OFS(XD,YD):GOSUB @SETCHR
  329. @DSN
  330.  NEXT
  331. NEXT
  332. GOSUB @ZSWOFF
  333. SPPAGE 1:BGPAGE 1
  334. DR=FALSE
  335. RETURN
  336. ’---
  337. @SETCHR ’I=INDEX,X,Y=OFS
  338. CH$=””
  339. FOR IY=0 TO 7
  340.  FOR IX=0 TO 7
  341.   C=GSPOIT(IX*ZS+X,IY*ZS+Y)
  342.   CH$=CH$+HEX$(C AND 15)
  343.  NEXT
  344. NEXT
  345. ’---
  346. X=(CX+XD)*8:Y=(CY+YD)*8
  347. CHRSET CN$,I,CH$
  348. GPAGE 0
  349. GFILL X,Y,X+7,Y+7,0
  350. GPUTCHR X,Y,CN$,I,PAL,1
  351. GPAGE 1
  352. RETURN
  353. ’====================
  354. @CHKMODE ’モ-ト゛カクニン
  355. ’====================
  356. IF B==16 THEN @COPY
  357. IF B==32 THEN @PASTE
  358. IF B==64 THEN @REVH
  359. IF B==128 THEN @REVV
  360. IF B==512 THEN @UNDO
  361. ’---
  362. IF MODE==IC THEN RETURN
  363. IF IC==-1 THEN RETURN
  364. IF IC==0 GOTO @FILEMODE
  365. MODE=IC
  366. ’---
  367. @PUTMODE
  368. PNLSTR 27,20,MD$(MODE)
  369. RETURN
  370. ’====================
  371. @LBUTSUB ’ VX,VY
  372. GPAGE 0
  373. DX=ZX*8:XX=GX+DX-1
  374. DY=ZY*8:YY=GY+DY-1
  375. IF VY>0 THEN @SCRLD
  376. IF VY<0 THEN @SCRLU
  377. IF VX>0 THEN @SCRLR
  378. ’--- ←
  379. GCOPY GX,GY,GX,YY,GX+DX,GY,1
  380. GCOPY GX+1,GY,XX+2,YY,GX,GY,1
  381. GPAGE 1
  382. RETURN
  383. ’--- →
  384. @SCRLR
  385. GCOPY XX,GY,XX,YY,GX-1,GY,1
  386. GCOPY GX-2,GY,XX-1,YY,GX-1,GY,1
  387. GPAGE 1
  388. RETURN
  389. ’--- ↑
  390. @SCRLU
  391. GCOPY GX,GY,XX,GY,GX,GY+DY,1
  392. GCOPY GX,GY+1,XX,YY+2,GX,GY,1
  393. GPAGE 1
  394. RETURN
  395. ’--- ↓
  396. @SCRLD
  397. GCOPY GX,YY,XX,YY,GX,GY-1,1
  398. GCOPY GX,GY-2,XX,YY-1,GX,GY-1,1
  399. GPAGE 1
  400. RETURN
  401. ’--- ←→
  402. @REVH
  403. GPAGE 0
  404. X1=GX:X2=GX+(ZX*8)-1:X3=GX-1
  405. YY=GY+(ZY*8)-1:DX=FLOOR(ZX*4)
  406. FOR XX=0 TO DX-1
  407.  GCOPY X1,GY,X1,YY,X3,GY,1
  408.  GCOPY X2,GY,X2,YY,X1,GY,1
  409.  GCOPY X3,GY,X3,YY,X2,GY,1
  410.  GFILL X3,GY,X3,YY,0
  411.  X1=X1+1:X2=X2-1
  412. NEXT
  413. GPAGE 1
  414. RETURN
  415. ’--- ↑↓
  416. @REVV
  417. GPAGE 0
  418. XX=GX+(ZX*8)-1:DY=FLOOR(ZY*4)
  419. Y1=GY:Y2=GY+(ZY*8)-1:Y3=GY-1
  420. FOR YY=0 TO DY-1
  421.  GCOPY GX,Y1,XX,Y1,GX,Y3,1
  422.  GCOPY GX,Y2,XX,Y2,GX,Y1,1
  423.  GCOPY GX,Y3,XX,Y3,GX,Y2,1
  424.  GFILL GX,Y3,XX,Y3,0
  425.  Y1=Y1+1:Y2=Y2-1
  426. NEXT
  427. GPAGE 1
  428. RETURN
  429. ’---カンイコヒ゜-(ウエカ゛メンニノコス)
  430. @COPY
  431. IX=GX:IY=GY
  432. ’---
  433. @PUSHIMG
  434. GPAGE 0
  435. X=CX*8:Y=CY*8
  436. GFILL IX,IY,IX+63,IY+63,0
  437. J=((BN AND 256)!=0)
  438. GCOPY X,Y,X+ZX*8-1,Y+ZY*8-1,IX,IY,J
  439. GPAGE 1
  440. RETURN
  441. ’---REDO
  442. @REDO
  443. IX=RX:IY=RY
  444. GOSUB @PUSHIMG
  445. RETURN
  446. ’---UNDO
  447. @UNDO
  448. IX=RX:IY=RY
  449. GOTO @PSTSUB
  450. ’---PASTE
  451. @PASTE
  452. GOSUB @REDO
  453. IX=GX:IY=GY
  454. ’---
  455. @PSTSUB
  456. J=BN AND 256
  457. DX=ZST(CSZ):DY=ZST(CSZ)
  458. FOR YY=0 TO ZY*8-1
  459.  FOR XX=0 TO ZX*8-1
  460.   GPAGE 0
  461.   I=GSPOIT(IX+XX,IY+YY)
  462.   GPAGE 1
  463.   IF J==0 THEN @PSTOK
  464.   IF (I AND 15)==0 THEN @SKPPST
  465. @PSTOK
  466.   GPSET EX+XX*DX,EY+YY*DY,I
  467. @SKPPST
  468.  NEXT
  469. NEXT
  470. ’---
  471. GOSUB @ZSWON
  472. GOSUB @DRAWSUB
  473. GOSUB @CHRZOOM
  474. RETURN
  475. ’====================
  476. @SPBUT ’スフ゜ライトホ゛タン
  477. ’====================
  478. SBIX=-1
  479. IF SPSW==FALSE GOTO @_TOFF
  480. IF TS==0 GOTO @_TCLR0
  481. ’--- リヒ゜-トカクニン
  482. IF W1==30 GOTO @KR2
  483. W1=W1+1:IF W1<30 THEN RETURN
  484. GOTO @_TOFF
  485. @KR2
  486. W2=W2+1:IF W2<8 THEN RETURN
  487. GOTO @_TOFF
  488. ’--- スヒ゜ンホ゛タンカイホウ
  489. @_TCLR0
  490. W1=0:W2=0
  491. SPSW=FALSE
  492. ’---
  493. @_TCLR
  494. FOR I=SPINTOP TO SBMAX-1
  495.  SB(I,_C)=0
  496.  SPCHR I+SPTOP,SB(I,_N),SB(I,_C),0,0,PR
  497.  SPOFS I+SPTOP,SB(I,_X),SB(I,_Y)
  498. NEXT
  499. RETURN
  500. ’---
  501. @_TOFF
  502. IF TS==FALSE THEN @_TCLR0
  503. SPSW=FALSE:W=15:H=W
  504. FOR I=0 TO SBMAX-1
  505.  IF SPSW GOTO @_SKIPSP
  506.  IF SB(I,_C)==XC THEN @SKIPSP
  507.  X=SB(I,_X):Y=SB(I,_Y)
  508.  GOSUB @TOUCH
  509.  IF R==FALSE GOTO @_SKIPSP
  510.   GOSUB @SETSB
  511.   SPSW=TRUE
  512. @_SKIPSP
  513. NEXT
  514. RETURN
  515. ’--- ホ゛タンハ゛ンコ゛ウテ゛ショリ
  516. @SETSB
  517. OLDCB=CBANK(CTYPE)
  518. OLDCT=CTYPE
  519. OLDX=CSX:OLDY=CSY
  520. SBIX=I:G=SB(I,_G)
  521. IF G==1 THEN @SBCHRBK
  522. IF G==8 THEN @SBTYPE
  523. IF G==11 THEN @SBSX
  524. IF G==15 THEN @SBSY
  525. ’--- スヒ゜ンホ゛タンカイホウ
  526. GOSUB @_TCLR
  527. I=SBIX:C=6:SB(I,_C)=C
  528. SPCHR I+SPTOP,SB(I,_N),C,0,0,PR
  529. SPOFS I+SPTOP,SB(I,_X)+1,SB(I,_Y)+1
  530. ’--- スヒ゜ンヘンカ
  531. I=SBIX-SPINTOP
  532. V=-1:IF I AND 1 THEN V=1
  533. I=FLOOR(I/2)
  534. MI=1:MX=1024
  535. IF I<3 THEN V=V*8:MI=0:MX=255
  536. J=SPIN(I)+V
  537. IF J<MI THEN J=MI
  538. IF J>=MX THEN J=MX-1
  539. SPIN(I)=J
  540. IF I>2 THEN RETURN
  541. ’---
  542. C$=HEX$(SPIN(0),2)
  543. C$=C$+HEX$(SPIN(1),2)
  544. C$=C$+HEX$(SPIN(2),2)
  545. SPPAGE 0:BGPAGE 0
  546. P=COL+PAL*16:P2=COL
  547. GOSUB @CSET
  548. GOSUB @COLRGB
  549. GOSUB @SETCTYPE
  550. ’---
  551. @SETCOLOR
  552. GOSUB @SETCSUB
  553. GOSUB @CHRALL
  554. GOSUB @CHRZOOM
  555. RETURN
  556. ’--- set chrbank
  557. @SBCHRBK
  558. CBANK(CTYPE)=I
  559. GOTO @_SKIPSSB
  560. ’--- change BGU/SPU/BGF
  561. @SBTYPE
  562. GOSUB @CLRCSR
  563. CTYPE=I-G
  564. GOSUB @CMCHECK
  565. ’---
  566. @_SKIPSSB
  567. IF OLDCT!=CTYPE THEN @_SSBE
  568. IF OLDCB!=CBANK(CTYPE) THEN @_SSBE
  569. IF OLDX!=CSX THEN @_SSBE
  570. IF OLDY==CSY THEN RETURN
  571. @_SSBE
  572. GOSUB @SETCTYPE
  573. GOSUB @CHRALL
  574. GOSUB @CHRZOOM
  575. RETURN
  576. ’--- set size
  577. @SBSY
  578. CSY=I-G:GOSUB @CLRCSR
  579. IF CSY==3 AND CSX<2 THEN CSY=2:BEEP
  580. IF CSY<2 AND CSX==3 THEN CSX=2:BEEP
  581. GOTO @_SBSE
  582. ’---
  583. @SBSX
  584. CSX=I-G:GOSUB @CLRCSR
  585. IF CSX==3 AND CSY<2 THEN CSX=2:BEEP
  586. IF CSX<2 AND CSY==3 THEN CSY=2:BEEP
  587. ’---
  588. @_SBSE
  589. ZX=BCNT(CSX):ZY=BCNT(CSY)
  590. GOSUB @CALCZ:ZZ=BCNT(CSZ)
  591. IF CX+ZX>=32 THEN CX=32-ZX
  592. IF CY+ZY>=8 THEN CY=8-ZY
  593. CX=FLOOR(CX/ZX)*ZX
  594. CY=FLOOR(CY/ZY)*ZY
  595. GOTO @_SKIPSSB
  596. ’--- ハ゛ンクタンイテ゛イロヘンコウ
  597. @SETCSUB
  598. TMP=COL
  599. P=PAL*16
  600. FOR COL=0 TO 15
  601.  SPPAGE 0:BGPAGE 0
  602.  COLREAD(CT$,P),SPIN(0),SPIN(1),SPIN(2)
  603.  C$=HEX$(SPIN(0),2)
  604.  C$=C$+HEX$(SPIN(1),2)
  605.  C$=C$+HEX$(SPIN(2),2)
  606.  P2=P:GOSUB @CSET
  607.  P=P+1
  608. NEXT
  609. COL=TMP
  610. GOTO @COLBOX
  611. ’---イロヘンコウ(スフ゜ライトBGト゛クリツ)
  612. @CSET
  613. FOR I=0 TO 1
  614.  SPPAGE I:BGPAGE I:GPAGE I
  615.  COLSET CT$,P,C$
  616.  COLSET ”GRP”,P2,C$
  617. NEXT
  618. RETURN
  619. ’====================
  620. @SETCTYPE
  621. ’====================
  622. ’--- chr bank(off==minus)
  623. MAX=CBMAX(CTYPE)
  624. FOR I=0 TO 7
  625.  SB(I,_Y)=ABS(SB(I,_Y))
  626.  X=SB(I,_X):Y=SB(I,_Y):C=0
  627.  IF I>MAX-1 THEN Y=-Y:SB(I,_Y)=Y
  628.  IF CBANK(CTYPE)!=I GOTO @_CBKSKIP
  629.  X=X+1:Y=Y+1:C=XC
  630. @_CBKSKIP
  631.  SPCHR I+SPTOP,SB(I,_N),C,0,0,PR
  632.  SPOFS I+SPTOP,X,Y
  633. NEXT
  634. ’--- chr type
  635. FOR I=8 TO 10
  636.  X=SB(I,_X):Y=SB(I,_Y):C=0
  637.  IF CTYPE==I-8 THEN X=X+1:Y=Y+1:C=XC
  638.  SPCHR I+SPTOP,SB(I,_N),C,0,0,PR
  639.  SPOFS I+SPTOP,X,Y
  640. NEXT
  641. ’--- size x
  642. FOR I=11 TO 14
  643.  X=SB(I,_X):Y=SB(I,_Y):C=0
  644.  IF CSX!=I-11 THEN @_CSX
  645.  X=X+1:Y=Y+1:C=XC
  646. @_CSX
  647.  SPCHR I+SPTOP,SB(I,_N),C,0,0,PR
  648.  SPOFS I+SPTOP,X,Y
  649. NEXT
  650. ’--- size y
  651. FOR I=15 TO 18
  652.  X=SB(I,_X):Y=SB(I,_Y):C=0
  653.  IF CSY!=I-15 THEN @_CSY
  654.  X=X+1:Y=Y+1:C=XC
  655. @_CSY
  656.  SPCHR I+SPTOP,SB(I,_N),C,0,0,PR
  657.  SPOFS I+SPTOP,X,Y
  658. NEXT
  659. ’--- キャラクタメイセイセイ
  660. @SETCSTR
  661. CN$=CSTR$(CTYPE)
  662. CN$=CN$+STR$(CBANK(CTYPE))
  663. CT$=CTYPE$(CTYPE)
  664. RETURN
  665. ’====================
  666. @SETAN ’アニメカンケイ
  667. ’====================
  668. IF CTYPE==1 THEN @ASTART
  669. IF OLDCT==CTYPE THEN RETURN
  670. ’--- erase
  671. OLDCT=CTYPE
  672. SPPAGE 0
  673. SPCLR ANTOP
  674. SPPAGE 1
  675. OLDAN=-1:OLDAP=-1:OLDAX=-1
  676. OLDAY=-1:OLDAC=-1:OLDAW=-1
  677. RETURN
  678. ’--- start
  679. @ASTART
  680. OLDCT=CTYPE:AX=ZX*8:AY=ZY*8
  681. C=SPIN(3):IF C<1 THEN C=1
  682. W=SPIN(4):IF W<1 THEN W=1
  683. N=(OFS(0,0)+CBANK(CTYPE)*256)
  684. N=FLOOR(N/(2*2)):’(BZC(CSX)*BZC(CSY)))
  685. ’---ヘンカシタカ?
  686. IF OLDAN!=N THEN @ATOP
  687. IF OLDAP!=PAL THEN @ATOP
  688. IF OLDAX!=AX THEN @ATOP
  689. IF OLDAY!=AY THEN @ATOP
  690. IF OLDAC!=C THEN @ATOP
  691. IF OLDAW==W THEN RETURN
  692. ’---
  693. @ATOP
  694. OLDAN=N:OLDAX=AX:OLDAY=AY
  695. OLDAP=PAL:OLDAC=C:OLDAW=W
  696. SPPAGE 0
  697. SPSET ANTOP,N,PAL,0,0,PR,AX,AY
  698. SPOFS ANTOP,184,80
  699. SPANIM ANTOP,C,W,0
  700. SPPAGE 1
  701. RETURN
  702. ’====================
  703. @DISPINIT ’カ゛メンノショキカ
  704. ’====================
  705. CLS:COLOR 0:GPAGE 0
  706. ’+---------+
  707. ’| ウエ カ゛メン |
  708. ’+---------+
  709. LOCATE 0,23
  710. PRINT”CHARACTER EDITOR v2.1”;
  711. COLOR 14:X=10:Y=9
  712. RX=(X+1)*8:RY=(Y+1)*8
  713. GOSUB @PUTWIN
  714. COLOR 7:X=0:Y=9
  715. GX=(X+1)*8:GY=(Y+1)*8
  716. GOSUB @PUTWIN
  717. LOCATE 0,19
  718. PRINT”А=COPY    К=PASTE2”
  719. PRINT”Б=PASTE”
  720. PRINT”Ф=←→ Х=↑↓
  721. PRINT”КП=SCROLL”
  722. COLOR 0
  723. X=22:Y=9:GOSUB @PUTWIN
  724. LOCATE X,Y+1:COLOR 7
  725. PRINT ”  SPANIM”:COLOR 0
  726. GFILL 0,67,255,68,15
  727. GOSUB @CHRALL
  728. ’+---------+
  729. ’| シタ カ゛メン |
  730. ’+---------+
  731. PNLTYPE ”OFF”
  732. GPAGE 1:GCOLOR 0:GCLS
  733. ’--- ヘンシュウエリア
  734. X=0:Y=2
  735. PNLSTR X,Y, ”┌”+”─”*16+”┐”
  736. FOR I=1 TO 16
  737.  ’PNLSTR X,Y+I,”│”+”С”*16+”│”
  738.  PNLSTR X,Y+I,”│”+” ”*16+”│”
  739. NEXT I
  740. I=Y+I:C$=”│”+” ”*16+”│”
  741. PNLSTR X,I+0, ”├”+”─”*16+”┤”
  742. PNLSTR X,I+1, C$
  743. PNLSTR X,I+2, C$
  744. PNLSTR X,I+3, ”└”+”─”*16+”┘”
  745. I=X+17:J=Y+10
  746. PNLSTR I,J  , ”├──┐”
  747. FOR K=1 TO 6
  748.  PNLSTR I,J+K,”│  │”
  749. NEXT
  750. PNLSTR I,J+K, ”┼──┘”
  751. ’---
  752. EX=(X+1)*8:EY=(Y+1)*8
  753. DR=FALSE
  754. GOSUB @CHRZOOM
  755. FOR I=0 TO SBMAX-1
  756.  SPOFS I+SPTOP,SB(I,_X),SB(I,_Y)
  757. NEXT
  758. ’---
  759. PNLSTR 27,2,”color”,7
  760. PNLSTR 26,11,”SPANIM”,7
  761. PNLSTR 22,12,”cn”,7
  762. PNLSTR 22,14,”wa”,7
  763. PNLSTR 22,16,”sx”,7
  764. PNLSTR 22,18,”sy”,7
  765. ’--- イロミホン
  766. HX=0:HY=0:HDX=HX*8:HDY=HY*8
  767. GOSUB @COLBOX
  768. SPSET 0,103,0,0,0,0
  769. GOSUB @COLCSR
  770. GOSUB @SETCTYPE
  771. ’--- イロハ゛ンク
  772. X=23:Y=3
  773. PDX=X*8+8:PDY=Y*8
  774. FOR I=0 TO 15
  775.  X=FLOOR(I%4)*16+PDX
  776.  Y=FLOOR(I/4)*16+PDY
  777.  SPSET I+2,I+48,0,0,0,PR
  778.  SPOFS I+2,X,Y
  779. NEXT
  780. SPCHR PAL+2,PAL+48,XC,0,0,1
  781. ’--- システムアイコン
  782. ICONPUSE=FALSE
  783. ICONPAGE=0
  784. ICONPMAX=4
  785. ICONSET 0,59:’ERASE
  786. ICONSET 1,39:’FILE
  787. ICONSET 2,6 :’PAINT
  788. ICONSET 3,5 :’PEN
  789. GOSUB @PUTMODE
  790. GOSUB @PUTGRID
  791. RETURN
  792. ’---
  793. @PUTWIN
  794. LOCATE X,Y
  795. PRINT”┌”+”─”*8+”┐”:Y=Y+1
  796. FOR I=0 TO 7
  797.  LOCATE X,Y:PRINT”│”+” ”*8+”│”
  798.  Y=Y+1
  799. NEXT
  800. LOCATE X,Y
  801. PRINT”└”+”─”*8+”┘”
  802. RETURN
  803. ’---
  804. @PUTGRID
  805. GOSUB @CALCZ:Z=ZST(CSZ)
  806. FOR Y=0 TO 15
  807.  J=FLOOR(Y%Z)
  808.  FOR X=0 TO 15
  809.   K=FLOOR(X%Z)
  810.   GOSUB @MKGRID
  811.   PNLSTR X+1,Y+3,C$
  812.  NEXT
  813. NEXT
  814. RETURN
  815. ’---
  816. @MKGRID
  817. IF J==0 AND K==0 THEN C$=”С”:RETURN
  818. IF J!=0 AND K==0 THEN C$=”У”:RETURN
  819. IF K!=0 AND J==0 THEN C$=”Т”:RETURN
  820. C$=” ”
  821. RETURN
  822. ’====================
  823. @TOUCH ’アタリハンテイ
  824. R=FALSE
  825. IF TS==FALSE THEN RETURN
  826. IF TX<X THEN RETURN
  827. IF TX>X+W THEN RETURN
  828. IF TY<Y THEN RETURN
  829. IF TY>Y+H THEN RETURN
  830. X=TX AND &HF8
  831. Y=TY AND &HF8
  832. R=TRUE
  833. RETURN
  834. ’====================
  835. @PSPIN ’
  836. N=SPIN(N)
  837. @PUTNUM
  838. N$=RIGHT$(”   ”+STR$(N),4)
  839. PNLSTR X,Y,N$,C
  840. RETURN
  841. ’====================
  842. @MKOFS ’テキセツナオフセットセッテイ
  843. IF CTYPE==1 GOTO @_OFSSP
  844. ’---
  845. CH=CY*32+CX
  846. FOR Y=0 TO ZY-1
  847.  FOR X=0 TO ZX-1
  848.   OFS(X,Y)=CH+X+(Y*32)
  849.  NEXT
  850. NEXT
  851. RETURN
  852. ’---
  853. @_OFSSP
  854. X=BZC(CSX):Y=BZC(CSY)
  855. CH=FLOOR(CX/X)
  856. CH=CH+FLOOR(CY/Y)*(32/X)
  857. CH=CH*(X*Y)
  858. FOR Y=0 TO ZY-1
  859.  FOR X=0 TO ZX-1
  860.   OFS(X,Y)=CH+X+(Y*ZX)
  861.  NEXT
  862. NEXT
  863. RETURN
  864. ’====================
  865. @CHRZOOM ’シタカ゛メンニキャラヒョウシ゛
  866. GOSUB @MKOFS
  867. GOSUB @CALCZ:Z=ZST(CSZ)
  868. SPPAGE 0:BGPAGE 0:GPAGE 1
  869. GFILL EX,EY,EX+127,EY+127,0
  870. FOR Y=0 TO ZY-1
  871.  YO=EY+(Y*Z*8)
  872.  FOR X=0 TO ZX-1
  873.   XO=EX+(X*Z*8)
  874.   GPUTCHR XO,YO,CN$,OFS(X,Y),PAL,Z
  875.  NEXT
  876. NEXT
  877. SPPAGE 1:BGPAGE 1
  878. GOSUB @PUTGRID
  879. RETURN
  880. ’---
  881. @CALCZ
  882. CSZ=CSX
  883. IF CSZ<CSY THEN CSZ=CSY
  884. RETURN
  885. ’====================
  886. @CHRALL ’ウエカ゛メンニ1ハ゛ンクフ゛ンノキャラヒョウシ゛
  887. C$=CN$+”/”+CT$+”/(”
  888. C$=C$+STR$(ZX*8)+”,”
  889. C$=C$+STR$(ZY*8)+”) ”
  890. PNLSTR 1,23, C$
  891. SPPAGE 0:BGPAGE 0:GPAGE 0
  892. GFILL 0,0,255,63,0
  893. X=0:Y=0:I=0:S=ZX*ZY
  894. IF CTYPE==1 THEN GOSUB @CHRSP
  895. IF CTYPE!=1 THEN GOSUB @CHRBG
  896. SPPAGE 1:BGPAGE 1:GPAGE 1
  897. RETURN
  898. ’--- bg chr
  899. @CHRBG
  900. GPUTCHR X,Y,CN$,I,PAL,1
  901. X=X+8
  902. IF X>=GSX THEN X=0:Y=Y+8
  903. I=I+1
  904. IF I<256 THEN @CHRBG
  905. RETURN
  906. ’--- sprite chr
  907. @CHRSP
  908. YY=Y:DX=BZC(CSX):DY=BZC(CSY)
  909. FOR J=0 TO DY-1
  910.  XX=X
  911.  FOR K=0 TO DX-1
  912.   GPUTCHR XX,YY,CN$,I,PAL,1
  913.   XX=XX+8:I=I+1
  914.  NEXT
  915.  YY=YY+8
  916. NEXT
  917. X=X+DX*8
  918. IF X>=GSX THEN X=0:Y=Y+DY*8
  919. IF I<256 THEN @CHRSP
  920. RETURN
  921. ’====================
  922. @FILEMODE ’ファイルノヨミカキ
  923. ’====================
  924. PNLTYPE ”KYA”:ICONCLR
  925. GCLS 0
  926. GCOPY 0,0,0,255,63,0,0,TRUE
  927. GPAGE 0,1,1
  928. ’---
  929. @_FLOOP
  930. CLS
  931. LOCATE 0,8
  932. PRINT”─”*32;
  933. PRINT” L:CHRヨミコミ”
  934. PRINT” S:CHRホソ゛ン”
  935. PRINT”LC:イロヨミコミ”
  936. PRINT”SC:イロホソ゛ン”
  937. PRINT” Q:ファイルメニュ-オワリ”
  938. PRINT” E:ツ-ルオワリ”
  939. PRINT”─”*32;
  940. ’---
  941. INPUT”コマント゛”;K$
  942. IF K$==”Q” GOTO @_FQUIT
  943. IF K$==”E” GOTO @_FEXIT
  944. IF K$==”S” GOTO @_FSAVE
  945. IF K$==”L” GOTO @_FLOAD
  946. IF K$==”SC” GOTO @_FCSAVE
  947. IF K$==”LC” GOTO @_FCLOAD
  948. GOTO @_FLOOP
  949. ’---
  950. @LCSUB
  951. ’SYSBEEP=FALSE
  952. FOR I=0 TO 1
  953.  BGPAGE I:SPPAGE I
  954.  LOAD N$,FALSE
  955. NEXT
  956. ’SYSBEEP=TRUE
  957. RETURN
  958. ’---イロヨミコミ
  959. @_FCLOAD
  960. INPUT”スフ゜ライトノイロヲLOADシマスカ(Y/N)”;K$
  961. IF K$!=”Y” THEN @FLD_BG
  962. INPUT”SP/ヨミコムナマエ(COL):”;K$
  963. N$=”COL1:”+K$
  964. GOSUB @LCSUB
  965. @FLD_BG
  966. INPUT”BGノイロヲLOADシマスカ(Y/N)”;K$
  967. IF K$!=”Y” THEN @_FQUIT
  968. INPUT”BG/ヨミコムナマエ(COL):”;K$
  969. N$=”COL0:”+K$
  970. GOSUB @LCSUB
  971. GOTO @_FQUIT
  972. ’---イロホソ゛ン
  973. @_FCSAVE
  974. SPPAGE 0:BGPAGE 0
  975. INPUT”スフ゜ライトノイロヲSAVEシマスカ(Y/N)”;K$
  976. IF K$!=”Y” THEN @FSV_BG
  977. INPUT”SP:ホソ゛ンスルナマエ(COL):”;K$
  978. N$=”COL1:”+K$
  979. SAVE N$
  980. @FSV_BG
  981. INPUT”BGノイロヲSAVEシマスカ(Y/N)”;K$
  982. IF K$!=”Y” THEN @_FQUIT
  983. INPUT”BG:ホソ゛ンスルナマエ(COL):”;K$
  984. N$=”COL0:”+K$
  985. SAVE N$
  986. GOTO @_FQUIT
  987. ’---
  988. @_FLOAD
  989. INPUT”ヨミコムナマエ(CHR):”;K$
  990. K$=CN$+”:”+K$:PRINT K$
  991. BGPAGE 0:SPPAGE 0
  992. LOAD K$,FALSE
  993. BGPAGE 1:SPPAGE 1
  994. ’---スフ゜ライトハシタヲヨマナイ
  995. IF CTYPE==1 GOTO @_FQUIT
  996. LOAD K$,FALSE
  997. GOTO @_FQUIT
  998. ’---
  999. @_FSAVE
  1000. INPUT”ホソ゛ンスルナマエ(CHR):”;K$
  1001. K$=CN$+”:”+K$:PRINT K$
  1002. BGPAGE 0:SPPAGE 0
  1003. SAVE K$
  1004. ’---
  1005. @_FQUIT
  1006. BGPAGE 1:SPPAGE 1
  1007. GPAGE 0,0,0
  1008. GOSUB @DISPINIT
  1009. RETURN
  1010. ’---
  1011. @_FEXIT
  1012. ICONCLR
  1013. ACLS
  1014. PRINT ”オツカレサマ!”
  1015. END