プチコンmkII

  1. ’DRAW EDITOR
  2. ’(C)SmileBoom Co.Ltd
  3. ’
  4. ’・テキストカ-ソルノヘンスウメイカフ゛リカイヒ
  5. ’
  6. CLEAR:ACLS:SPPAGE 1
  7. BGPAGE 1:BGCLR
  8. VISIBLE 1,1,1,1,1,1
  9. RECMAX=8000:HSIZE=256
  10. TXMAX=4:TXLEN=32
  11. _CMD=0:_TXY=1:_EXY=2:_MAX=3
  12. DIM B(RECMAX,_MAX)
  13. DIM TX$(TXMAX)
  14. FOR I=0 TO TXMAX-1
  15.  TX$(I)=” ”*TXLEN
  16. NEXT
  17. ’---
  18. DATA ”LINE  ”
  19. DATA ”CIRCLE”
  20. DATA ”BOX   ”
  21. DATA ”PAINT ”
  22. DATA ”PSET  ”
  23. DATA ”CLEAR ”
  24. DATA ”FILL  ”
  25. CMDMAX=7
  26. DIM C$(CMDMAX)
  27. FOR I=0 TO CMDMAX-1
  28.  READ C$(I)
  29. NEXT
  30. ’---
  31. N$=”SPS0”
  32. C$=”0”*8:Z$=C$*8
  33. B$=”F0000000”+C$*7
  34. CHRSET N$,0,B$
  35. CHRSET N$,1,Z$
  36. CHRSET N$,2,Z$
  37. CHRSET N$,3,Z$
  38. A$=”FFF00000”
  39. A$=A$+”F0F00000”+A$+C$*5
  40. CHRSET N$,4,A$
  41. CHRSET N$,5,Z$
  42. CHRSET N$,6,Z$
  43. CHRSET N$,7,Z$
  44. A$=”F0000000”+C$*7
  45. CHRSET ”BGU0”,1,A$
  46. A$=”E0E0E0E00E0E0E0E”*4
  47. CHRSET ”BGU0”,2,A$
  48. ’---
  49. SPMAX=88
  50. FOR I=0 TO SPMAX-1
  51.  SPSET I,0,0,0,0,0
  52.  SPOFS I,-16,-16
  53. NEXT
  54. ’---
  55. PNLTYPE”OFF”
  56. ICONPUSE=FALSE
  57. ICONCLR:ICONPMAX=3
  58. ’---
  59. FOR I=0 TO 3
  60.  BREPEAT I,20,4
  61. NEXT
  62. BREPEAT 7,20,2:’Y BUTTON
  63. ’---
  64. OLDCMD=-1:CMD=4
  65. DR=0:GR=1:TM=FALSE
  66. REC=0:COL=15:QT=0:WM=16
  67. MX=0:MY=0:MW=8:MB=-1:MC=0
  68. GOSUB @INIT
  69. ’========
  70. ’  main  
  71. ’========
  72. @MAIN
  73. OS=TS:TS=TCHST
  74. OB=BT:BT=BTRIG():BN=BUTTON()
  75. IF TM==FALSE THEN @MSKIP
  76. K$=INKEY$()
  77. GOSUB @TEXTSUB
  78. GOTO @MNEXT
  79. ’---
  80. @MSKIP
  81. GOSUB @BUTCTRL
  82. IF QT THEN @QUIT
  83. GOSUB @TOUCH
  84. ’---
  85. @MNEXT
  86. GOSUB @PUTCOL
  87. VSYNC 1
  88. GOTO @MAIN
  89. ’---
  90. @QUIT
  91. GPAGE 1:GCLS 0:
  92. GPAGE 0:GCLS 0
  93. CLS
  94. PRINT”オツカレサマ!”
  95. END
  96. ’==============
  97. ’  initialize
  98. ’==============
  99. @INIT
  100. CLS
  101. PRINT”DRAW EDITOR V1.1”
  102. PRINT”─”*32;
  103. COLOR 7
  104. FOR I=0 TO CMDMAX-1
  105.  PRINT ” ”+C$(I)
  106. NEXT
  107. ’---
  108. LOCATE 0,11
  109. PRINT”А:file К:grid”
  110. PRINT”Х:delete”
  111. PRINT
  112. PRINT”START:setting”
  113. PRINT” wait(   )”
  114. PRINT”  bgm(   )”
  115. ’---
  116. LOCATE 18,0
  117. PRINT”REC:     C:”
  118. ’---
  119. WX=0:WY=20
  120. LOCATE 0,WY-2:PRINT”Б:text”
  121. COLOR 0:PRINT ”─”*32;
  122. GFILL 0,(WY*8)-4,255,(WY+TXMAX)*8-1,255
  123. BGFILL 0,WX,WY,WX+31,WY+TXMAX-1,&H0002
  124. GOSUB @PUTST
  125. GOSUB @PUTREC
  126. ’---
  127. GPAGE 0:CX=15:CY=2
  128. LOCATE CX-1,CY-1
  129. PRINT”┬”+”─”*16+”┬”;
  130. FOR Y=0 TO 15
  131.  LOCATE CX-1,CY+Y
  132.  PRINT”│”+” ”*16+”│”;
  133.  FOR X=0 TO 15
  134.   TX=CX*8+X*8:TY=CY*8+Y*8
  135.   C=Y*16+X
  136.   GFILL TX,TY,TX+7,TY+7,C
  137.  NEXT
  138. NEXT
  139. LOCATE CX-1,CY+16
  140. PRINT”└”+”─”*16+”┘”;
  141. GPAGE 1
  142. GOSUB @PUTCOL0
  143. GOSUB @PUTGRID
  144. RETURN
  145. ’---
  146. @PUTGRID
  147. SC=&H0:IF GR THEN SC=&HE001
  148. BGFILL 1,0,0,31,23,SC
  149. RETURN
  150. ’================
  151. ’ button control
  152. ’================
  153. @BUTCTRL
  154. D=BT AND 15
  155. IF D THEN @BUTDIR
  156. IF BT==128 THEN @BUTY
  157. IF OB THEN RETURN
  158. IF BT==32 THEN @BUTB
  159. IF BT==64 THEN @BUTX
  160. IF BT==16 THEN @BUTA
  161. IF BT==512 THEN @BUTR
  162. IF BT==1024 THEN @BSTART
  163. RETURN
  164. ’---
  165. @BSTART
  166. VISIBLE 1,1,0,0,0,0:CLS
  167. INPUT”BGM(0-,-1=OFF)=”;MB
  168. INPUT”WAIT(0-)=”;MW
  169. BGMPLAY MB
  170. VISIBLE 1,1,1,1,1,1
  171. GOSUB @INIT
  172. RETURN
  173. ’---Б:text
  174. @BUTB
  175. TM=TRUE:TW=0:PNLTYPE”KYA”
  176. BGPAGE 0:DR=0
  177. RETURN
  178. ’---А:file menu
  179. @BUTA
  180. GOSUB @FILE
  181. GPAGE 0:GCLS 0:GPAGE 1
  182. GOSUB @INIT
  183. GOSUB @CLRCOL
  184. GOSUB @PUTREC
  185. GOSUB @REPLAY
  186. RETURN
  187. ’---К:grid
  188. @BUTR
  189. GR=GR XOR 1:DR=0
  190. GOSUB @PUTGRID
  191. RETURN
  192. ’---Х:delete
  193. @BUTY
  194. IF REC==0 THEN RETURN
  195. REC=REC-1:DR=0
  196. GOSUB @CLRCOL
  197. GOSUB @PUTREC
  198. GOSUB @REPLAY
  199. GOSUB @PUTST
  200. OLDCMD=-1
  201. RETURN
  202. ’---
  203. @GETVEC
  204. VX=0:VY=0
  205. IF D AND 1 THEN VY=-1
  206. IF D AND 2 THEN VY=1
  207. IF D AND 4 THEN VX=-1
  208. IF D AND 8 THEN VX=1
  209. RETURN
  210. ’---
  211. @BUTDIR
  212. GOSUB @GETVEC
  213. IF VX+VY==0 THEN @PUTCOL
  214. ’---
  215. @MOVCOL
  216. GOSUB @CLRCOL
  217. COL=COL+(VY*16)+VX
  218. COL=COL AND 255
  219. ’---
  220. @PUTCOL0
  221. LOCATE 29,0
  222. PRINT RIGHT$(” ”+STR$(COL),3);
  223. ’---
  224. @PUTCOL
  225. LOCATE CX+COL%16,CY+COL/16
  226. CC=RND(15)
  227. COLOR CC:PRINT”□”:COLOR 15
  228. RETURN
  229. ’---
  230. @CLRCOL
  231. LOCATE CX+COL%16,CY+COL/16
  232. PRINT” ”
  233. RETURN
  234. ’---Ф:command select
  235. @BUTX
  236. LOCATE 0,2+CMD:PRINT” ”
  237. VY=1:IF BN AND 256 THEN VY=-1
  238. CMD=CMD+VY
  239. IF CMD<0 THEN CMD=CMDMAX-1
  240. CMD=CMD%CMDMAX
  241. DR=0:GOSUB @PUTST
  242. RETURN
  243. ’=============
  244. ’ check touch 
  245. ’=============
  246. @TOUCH
  247. ON DR GOTO @L0,@L1,@L2
  248. RETURN
  249. ’---
  250. @L0
  251. IF TS==FALSE THEN RETURN
  252. TX=TCHX:TY=TCHY
  253. IF CMD==3 THEN @L0P
  254. IF CMD==5 THEN @L0CLS
  255. EX=TX:EY=TY:DR=1
  256. RETURN
  257. ’---
  258. @L0P
  259. N=GSPOIT(TX,TY)
  260. IF N==COL THEN RETURN
  261. GPAINT TX,TY,COL
  262. GOTO @LREC
  263. ’---
  264. @L0CLS
  265. IF OLDCMD==CMD THEN RETURN
  266. GCLS COL
  267. GOTO @LREC
  268. ’---
  269. @L1
  270. X=TX:Y=TY
  271. EX=TCHX:EY=TCHY
  272. GOSUB @GUIDE
  273. IF TS==0 THEN @L1SUB
  274. IF CMD==4 THEN @L1PS
  275. RETURN
  276. ’---
  277. @L1SUB
  278. ON CMD GOTO @L1L,@L1C,@L1B
  279. IF CMD!=6 THEN RETURN
  280. ’---
  281. GFILL TX,TY,EX,EY,COL
  282. GOTO @LREC
  283. ’---
  284. @L1B
  285. GBOX TX,TY,EX,EY,COL
  286. ’---
  287. @LREC
  288. GOSUB @CMDREC:DR=0
  289. RETURN
  290. ’---
  291. @L1C
  292. EX=R:GCIRCLE TX,TY,EX,COL
  293. GOTO @LREC
  294. ’---
  295. @L1L
  296. GLINE TX,TY,EX,EY,COL
  297. GOSUB @CMDREC
  298. TX=EX:TY=EY:DR=2
  299. RETURN
  300. ’---
  301. @L1PS
  302. GOSUB @L1L:DR=1
  303. RETURN
  304. ’---
  305. @L2
  306. IF TS==FALSE THEN RETURN
  307. TX=EX:TY=EY:DR=1
  308. RETURN
  309. ’========
  310. ’ record 
  311. ’========
  312. @CMDREC
  313. OLDCMD=CMD
  314. IF REC>=RECMAX THEN RETURN
  315. B(REC,_CMD)=CMD+(COL*256)
  316. B(REC,_TXY)=TX*256+TY
  317. B(REC,_EXY)=EX*256+EY
  318. REC=REC+1
  319. ’---
  320. @PUTREC
  321. LOCATE 22,0:R=RECMAX-REC
  322. PRINT RIGHT$(”   ”+STR$(R),4);
  323. RETURN
  324. ’---
  325. @PUTN
  326. PRINT RIGHT$(”  ”+STR$(N),3);
  327. RETURN
  328. ’============
  329. ’ text write
  330. ’============
  331. @TEXTSUB
  332. IF OB THEN @TXTOP
  333. IF BT!=32 THEN @TXTOP
  334. ’---Б:exit text
  335. PNLTYPE”OFF”
  336. BGPUT 0,MX+WX,MY+WY,1,0,0,0
  337. BGPAGE 1:TM=FALSE
  338. RETURN
  339. ’---
  340. @TXTOP
  341. GOSUB @TXIN
  342. GOSUB @TXCSR
  343. N=13:IF TW>=8 THEN N=0
  344. BGPUT 0,MX+WX,MY+WY,N,0,0,0
  345. TW=TW+1
  346. IF TW==16 THEN TW=0
  347. RETURN
  348. ’---
  349. @TXCSR
  350. D=BT:GOSUB @GETVEC
  351. IF VX+VY!=0 THEN @TXMOV
  352. RETURN
  353. ’---
  354. @BS
  355. VX=-1:VY=0:K$=” ”
  356. GOTO @TXIN2
  357. ’---
  358. @ENTER
  359. BGPUT 0,MX+WX,MY+WY,1,0,0,0
  360. MX=0:VY=1:GOTO @TXMOV
  361. ’---
  362. @TXIN
  363. IF KEYBOARD==15 THEN @BS
  364. IF KEYBOARD==60 THEN @ENTER
  365. IF K$==”” THEN RETURN
  366. VX=1:VY=0
  367. ’---
  368. @TXIN2
  369. TX$(MY)=SUBST$(TX$(MY),MX,1,K$)
  370. GOSUB @PUTST
  371. ’---
  372. @TXMOV
  373. BGPUT 0,MX+WX,MY+WY,1,0,0,0
  374. MX=MX+VX:M=TXLEN-1
  375. IF MX<0 THEN MX=M:VY=VY-1
  376. IF MX>M THEN MX=0:VY=VY+1
  377. MY=MY+VY
  378. IF MY>TXMAX-1 THEN MY=0
  379. IF MY<0 THEN MY=TXMAX-1
  380. W=0
  381. RETURN
  382. ’============
  383. ’ put status 
  384. ’============
  385. @PUTST
  386. LOCATE 0,2+CMD:PRINT”Ф”
  387. ’---
  388. FOR I=0 TO TXMAX-1
  389.  LOCATE WX,WY+I
  390.  PRINT TX$(I);
  391.  PNLSTR WX,WY+I,TX$(I)
  392. NEXT
  393. ’---
  394. LOCATE 6,15:N=MW:GOSUB @PUTN
  395. LOCATE 6,16:N=MB:GOSUB @PUTN
  396. RETURN
  397. ’============
  398. ’ guide line 
  399. ’============
  400. @GUIDE
  401. ON CMD GOTO @SPL,@SPC,@SPB
  402. IF CMD==6 THEN @SPB
  403. RETURN
  404. ’=============
  405. ’ sprite line 
  406. ’=============
  407. @SPL
  408. N=0:M=20:C=RND(16)
  409. GOSUB @SPLSUB
  410. GOTO @SPOFF
  411. ’---
  412. @SPLSUB
  413. VX=EX-X:SX=SGN(VX):AX=ABS(VX)
  414. VY=EY-Y:SY=SGN(VY):AY=ABS(VY)
  415. J=W:W=W+1:SMX=N+M
  416. IF AX>AY THEN @XLINE
  417. ’---
  418. IF AY==0 THEN RETURN
  419. VX=VX/AY
  420. FOR I=Y TO EY STEP SY
  421.  IF (J % WM) THEN @SKIPX
  422.  IF N>=SMX THEN @SKIPX
  423.  SPOFS N,X,I
  424.  SPCHR N,0,C,0,0,0
  425.  N=N+1
  426. @SKIPX
  427.  X=X+VX:J=J+1
  428. NEXT
  429. GOTO @ELINE
  430. ’---
  431. @XLINE
  432. IF AX==0 THEN RETURN
  433. VY=VY/AX
  434. FOR I=X TO EX STEP SX
  435.  IF (J % WM) THEN @SKIPY
  436.  IF N>=MX THEN @SKIPY
  437.  SPOFS N,I,Y:SPCHR N,0
  438.  SPCHR N,0,C,0,0,0
  439.  N=N+1
  440. @SKIPY
  441.  Y=Y+VY:J=J+1
  442. NEXT
  443. ’---
  444. @ELINE
  445. SPOFS N,EX-1,EY-1
  446. SPCHR N,1,C,0,0,0
  447. N=N+1
  448. RETURN
  449. ’===============
  450. ’ sprite circle 
  451. ’===============
  452. @SPC
  453. VX=ABS(EX-X)
  454. VY=ABS(EY-Y)
  455. R=SQR(VX*VX+VY*VY)
  456. M=20:ST=360/M
  457. J=W/ST:W=W+WM
  458. C=RND(16)
  459. FOR N=0 TO M-1
  460.  A=RAD(J%360):J=J+ST
  461.  OX=X+COS(A)*R
  462.  OY=Y+SIN(A)*R
  463.  SPOFS N,OX,OY
  464.  SPCHR N,0,C,0,0,0
  465. NEXT
  466. SPOFS M,X-1,Y-1
  467. SPCHR M,1,C,0,0,0
  468. RETURN
  469. ’============
  470. ’ sprite box 
  471. ’============
  472. @SPB
  473. TMPX=EX:TMPY=EY
  474. N=0:M=20:C=RND(16)
  475. X=TX:Y=TY:EY=Y
  476. GOSUB @SPLSUB
  477. X=EX:Y=TY:EY=TMPY
  478. GOSUB @SPLSUB
  479. X=EX:Y=EY:EX=TX
  480. GOSUB @SPLSUB
  481. X=TX:Y=EY:EX=X:EY=TY
  482. GOSUB @SPLSUB
  483. EX=TMPX:EY=TMPY
  484. ’---
  485. @SPOFF
  486. FOR I=N TO SPMAX-1
  487.  SPOFS I,-16,-16
  488. NEXT
  489. RETURN
  490. ’===========
  491. ’ file menu 
  492. ’===========
  493. @FILE
  494. CLS:GPAGE 0:GCLS 0
  495. GP=1:GPAGE GP
  496. GF$=”GRP”+STR$(GP)+”:”
  497. PRINT”FILE MENU”
  498. PRINT”=”*32;
  499. PRINT” L:キロクノヨミコミ”
  500. PRINT” S:キロクノカキコミ”
  501. PRINT”SG:カ゛ソ゛ウノカキコミ”
  502. PRINT” X:カ゛メンショウキョ”
  503. PRINT” Q:メニュ-ヲヌケル”
  504. PRINT” E:ツ-ルシュウリョウ”
  505. PRINT”=”*32;
  506. INPUT”ト゛ウスル”;K$
  507. IF K$==”S” THEN @SVREC
  508. IF K$==”L” THEN @LDREC
  509. IF K$==”SG” THEN @SVGRP
  510. IF K$==”E” THEN QT=1
  511. IF K$==”X” THEN @XCLS
  512. RETURN
  513. ’==========================
  514. @XCLS
  515. INPUT”ショウキヨシマスカ”;K$
  516. IF K$!=”Y” THEN @FILE
  517. REC=0
  518. RETURN
  519. ’==========================
  520. @GLNUM
  521. TOTAL=TOTAL+1
  522. IF Y>191 THEN @LDERR
  523. N=GSPOIT(X,Y)
  524. X=X+1:IF X<256 THEN RETURN
  525. X=0:Y=Y+1
  526. RETURN
  527. ’---
  528. @GLCHR
  529. GOSUB @GLNUM
  530. N$=CHR$(N):RETURN
  531. ’---
  532. @GLWORD
  533. GOSUB @GLNUM:W=N*256
  534. GOSUB @GLNUM:W=W+N
  535. RETURN
  536. ’---
  537. @LDERR
  538. PRINT”コノファィルハ、ツカエマセン”
  539. @LDLOOP
  540. IF INKEY$()==”” THEN @LDLOOP
  541. RETURN
  542. ’==========================
  543. @LDREC
  544. GPAGE 1:X=0:Y=0:TOTAL=0
  545. INPUT”ヨミコムファィルメイ”;K$
  546. LOAD GF$+K$
  547. IF RESULT!=TRUE THEN RETURN
  548. ’--- header
  549. GOSUB @GLCHR:C$=N$
  550. GOSUB @GLCHR:C$=C$+N$
  551. GOSUB @GLCHR:C$=C$+N$
  552. GOSUB @GLCHR:C$=C$+N$
  553. IF C$!=”DE1:” THEN @LDERR
  554. ’--- 
  555. GOSUB @GLWORD:H=W
  556. GOSUB @GLWORD:REC=W
  557. GOSUB @GLWORD:MW=W
  558. GOSUB @GLWORD:MB=W-1
  559. GOSUB @GLWORD
  560. GOSUB @GLWORD
  561. ’--- text
  562. FOR IX=0 TO TXMAX-1
  563.  TX$(IX)=””
  564.  FOR J=0 TO TXLEN-1
  565.   GOSUB @GLCHR
  566.   TX$(IX)=TX$(IX)+N$
  567.  NEXT
  568. NEXT
  569. ’--- skip
  570. FOR I=0 TO (HSIZE-TOTAL)-1
  571.  GOSUB @GLNUM
  572. NEXT
  573. ’--- command
  574. FOR I=0 TO REC-1
  575.  GOSUB @GLWORD:B(I,_CMD)=W
  576.  GOSUB @GLWORD:B(I,_TXY)=W
  577.  GOSUB @GLWORD:B(I,_EXY)=W
  578.  LOCATE 0,23
  579.  PRINT I;”/”;REC;
  580. NEXT
  581. RETURN
  582. ’==========================
  583. @GSNUM
  584. TOTAL=TOTAL+1
  585. IF Y>191 THEN RETURN
  586. GPSET X,Y,N
  587. X=X+1:IF X<256 THEN RETURN
  588. X=0:Y=Y+1
  589. RETURN
  590. ’---
  591. @GSWORD
  592. N=(W/256) AND 255
  593. GOSUB @GSNUM
  594. N=W AND 255
  595. GOSUB @GSNUM
  596. RETURN
  597. ’==========================
  598. @SVREC
  599. GPAGE 1:X=0:Y=0:TOTAL=0
  600. ’--- header
  601. N=ASC(”D”):GOSUB @GSNUM
  602. N=ASC(”E”):GOSUB @GSNUM
  603. N=ASC(”1”):GOSUB @GSNUM
  604. N=ASC(”:”):GOSUB @GSNUM
  605. ’--- length
  606. W=HSIZE:GOSUB @GSWORD
  607. W=REC:GOSUB @GSWORD
  608. W=MW:GOSUB @GSWORD
  609. W=MB+1:GOSUB @GSWORD
  610. W=0:GOSUB @GSWORD
  611. W=0:GOSUB @GSWORD
  612. ’--- text
  613. FOR IX=0 TO TXMAX-1
  614.  C$=TX$(IX)
  615.  FOR J=0 TO TXLEN-1
  616.   N=ASC(MID$(C$,J,1))
  617.   GOSUB @GSNUM
  618.  NEXT
  619. NEXT
  620. ’--- skip
  621. FOR I=0 TO (HSIZE-TOTAL)-1
  622.  N=0:GOSUB @GSNUM
  623. NEXT
  624. ’--- command
  625. LY=CSRY
  626. FOR I=0 TO REC-1
  627.  W=B(I,_CMD):GOSUB @GSWORD
  628.  W=B(I,_TXY):GOSUB @GSWORD
  629.  W=B(I,_EXY):GOSUB @GSWORD
  630. NEXT
  631. ’---
  632. INPUT”ホソ゛ンスルファィルメイ”;K$
  633. SAVE GF$+K$
  634. RETURN
  635. ’==========================
  636. @SVGRP
  637. GPAGE 1
  638. INPUT”カ゛ソ゛ウトシテホソ゛ンスルファィルメイ”;K$
  639. SAVE GF$+K$
  640. RETURN
  641. ’==========================
  642. @REPLAY
  643. GCLS 0
  644. FOR IX=0 TO REC-1
  645.  O=_TXY:GOSUB @GETCMD
  646.  TX=X:TY=Y
  647.  O=_EXY:GOSUB @GETCMD
  648.  EX=X:EY=Y
  649.  O=_CMD:GOSUB @GETCMD
  650.  GOSUB @CMDSUB
  651. NEXT
  652. RETURN
  653. ’---
  654. @GETCMD
  655. X=B(IX,O):Y=X AND &HFF
  656. X=(X AND &HFF00)/256
  657. RETURN
  658. ’---
  659. @CMDSUB
  660. ON Y GOTO @RL,@RC,@RB,@RP,@RL,@RX
  661. ’---
  662. GFILL TX,TY,EX,EY,X:RETURN
  663. ’---
  664. @RX
  665. GCLS X:RETURN
  666. ’---
  667. @RL
  668. GLINE TX,TY,EX,EY,X:RETURN
  669. ’---
  670. @RC
  671. GCIRCLE TX,TY,EX,X:RETURN
  672. ’---
  673. @RB
  674. GBOX TX,TY,EX,EY,X:RETURN
  675. ’---
  676. @RP
  677. GPAINT TX,TY,X:RETURN