スマイルブーム自家製プログラム特集 PART2 →PART3

ESCAPE2 by スマイルブーム

再生

 初代『ESCAPE』の続編、スプライトを使ったジャンプアクションのサンプルがこのプログラムだ。
 ガイコツの主人公を操作して、カギを取って扉にたどりつけば1面クリアー。
 「ある法則」で動くドロボーもカギを狙っているが、時にはこれをうまく利用することも必要とか……?
 操作は十字ボタン左右で移動、Bボタンでジャンプ、Yボタンでダッシュ。


 CHECK POiNT 

ワンパク
さっきはウマくまるめこまれた気がするが、……それにしても、これおかしくねェか……?

博士
ふむ。たしかにYボタンダッシュがいささか速すぎるようじゃの。しかしこれは176行の加速ルーチンのコントロールしだいでより使いやすくなるじゃろう。

インテリ
ジャンプや落下の処理は、他のゲームにも使い回せそうだね。もちろんこのプログラムはサンプルだから、誰が使ってもOKだよ。

ワンパク
いや、そうじゃなくてよォ……

博士
うむ。たしかに全3面とはサビしいかもしれんの。じゃが、このプログラムではステージ構成もシンプルに作ってあるので書き換えもカンタンじゃぞ。

神崎
325行以降で設定しているね。DATA文で定義している1文字がマップ1マスに対応してるのかあ。ステージもカンタンに増やせそうだよ。

ワンパク
そういう話じゃねえよ! シット! 敵にぶつかっても何も起きやしねエ! スコアやら時間制限やらの表示が何も動いてねェだろうが! ファーック!

博士
いやその、それはじゃの。あくまでサンプルとして、改造していかようにも使えるという……。

ワンパク
もうダマされねェぞ! 作り飽きた処理は全部スッ飛ばして作りやがったなテメェらー! デストローイ!

プログラムリスト

  1. ’┌─────────┐
  2. ’│アクションケ゛-ム│
  3. ’└─────────┘
  4. VISIBLE 1,1,1,1,1,0
  5. BGMSTOP
  6. COLOR 0:CLS
  7. BGPAGE 0
  8. BGOFS 0,0,0
  9. BGOFS 1,0,0
  10. CLEAR
  11. DIM W(6,4),M(16,12)
  12. ’---
  13. _T=0    :’シュルイ
  14. _D=1    :’ホウコウ
  15. _X=2    :’サ゛ヒョウ
  16. _Y=3    :’
  17. _VX=4   :’イト゛ウリョウ
  18. _VY=5   :’
  19. _V=6    :’シ゛ャンフ゜リョウ
  20. _J=7    :’シ゛ャンフ゜シ゛ョウタイ
  21. _B=8    :’カヘ゛シ゛ョウホウ
  22. _S=9    :’スヒ゜-ト゛
  23. _N=10   :’キャラ
  24. _JC=11  :’シ゛ャンフ゜シ゛カン
  25. ’_______
  26. STGMAX=3
  27. _MAX=16
  28. OMAX=3+3
  29. DIM O(OMAX,_MAX)
  30. PR=1
  31. GOSUB @GINIT
  32. FLOW=-1:REQ=0
  33. STG=0
  34. ’---
  35. @LOOP
  36.  OLDB=B:B=BUTTON()
  37.  IF FLOW==REQ GOTO @FSKIP
  38.  FLOW=REQ
  39.  ON FLOW GOSUB @TI,@GI,@CI
  40. @FSKIP
  41.  ON FLOW GOSUB @TM,@GM,@CM
  42.  VSYNC 1
  43. GOTO @LOOP
  44. END
  45. ’┌────┐
  46. ’│ケ゛-ム│
  47. ’└────┘
  48. @GI
  49. RETURN
  50. ’---
  51. @GM
  52. KX=O(1,_X)
  53. KY=O(1,_Y)
  54. FOR IX=0 TO OMAX-1
  55.  ’---
  56.  PX=O(IX,_X)
  57.  PY=O(IX,_Y)
  58.  VX=O(IX,_VX)
  59.  VY=O(IX,_VY)
  60.  JC=O(IX,_JC)
  61.  JS=O(IX,_J)
  62.  BG=O(IX,_B)
  63.  PD=O(IX,_D)
  64.  PV=O(IX,_V)
  65.  ’---
  66.  PS=O(IX,_S)
  67.  PN=O(IX,_N)
  68.  ’---
  69.  ON O(IX,_T) GOSUB @_X,@_P,@_K,@_D,@_E,@_W
  70.  ’---
  71.  O(IX,_X)=PX
  72.  O(IX,_Y)=PY
  73.  O(IX,_VX)=VX
  74.  O(IX,_VY)=VY
  75.  O(IX,_JC)=JC
  76.  O(IX,_J)=JS
  77.  O(IX,_B)=BG
  78.  O(IX,_D)=PD
  79.  O(IX,_V)=PV
  80.  ’---
  81. NEXT
  82. RETURN
  83. ’---0:ナシ
  84. @_X
  85. RETURN
  86. ’---3:ト゛ア
  87. @_D
  88. IF KN==-1 THEN RETURN
  89. X=O(KN,_X):Y=O(KN,_Y)
  90. GOSUB @HCHK
  91. IF R==FALSE THEN RETURN
  92. ’---
  93. REQ=2
  94. RETURN
  95. ’---2:カキ゛
  96. @_K
  97. IF KN==-1 THEN RETURN
  98. X=O(KN,_X):Y=O(KN,_Y)
  99. SPOFS IX,X-8,Y-32
  100. RETURN
  101. ’---ト゛アヒラク
  102. @OPENDOOR
  103. KN=IX
  104. I=OMAX-1
  105. O(I,_N)=59
  106. SPCHR I,O(I,_N)
  107. BEEP 15
  108. RETURN
  109. ’---
  110. @HITCHK
  111. X=KX:Y=KY
  112. @HCHK
  113. R=FALSE
  114. IF PX<X-8 THEN RETURN
  115. IF PX>X+8 THEN RETURN
  116. IF PY<Y-8 THEN RETURN
  117. IF PY>Y+8 THEN RETURN
  118. R=TRUE
  119. RETURN
  120. ’---5:テキ
  121. @_W
  122. VX=0.5
  123. IF PD THEN VX=-VX
  124. PY=PY+VY
  125. PX=PX+VX
  126. JC=JC+1
  127. IF JC<8 GOTO @E5CHK
  128. JC=0
  129. VY=-VY
  130. @E5CHK
  131. GOSUB @SIDE
  132. IF R==1 THEN PD=PD XOR 2
  133. SPCHR IX,PD*2+PN
  134. SPOFS IX,PX-8,PY-16
  135. RETURN
  136. ’---4:テキ
  137. @_E
  138. NS=4:PV=-6:PD=0:V=0.5
  139. ’BT=RND(256)
  140. ’V=RND(3)-1
  141. ’IF V<0 THEN PD=2
  142. IF O(0,_D)==0 THEN PD=2:V=-V
  143. GOTO @MOVE
  144. ’---1:フ゜レイヤ-
  145. @_P
  146. BT=B:OB=OLDB:NS=2
  147. V=0
  148. IF BT AND 4 THEN V=-0.25:PD=2
  149. IF BT AND 8 THEN V=V+0.25:PD=0
  150. ’---
  151. @MOVE
  152. ’---
  153. IF KN!=-1 GOTO @MVTOP
  154. GOSUB @HITCHK
  155. IF R==FALSE GOTO @MVTOP
  156. ’---カキ゛シュトク
  157. GOSUB @OPENDOOR
  158. ’---
  159. @MVTOP
  160. IF V!=0 GOTO @PVCLC
  161. ’---ケ゛ンソク
  162. IF VX>-0.01 AND VX<0.01 THEN VX=0
  163. IF VX<0 THEN V=0.25
  164. IF VX>0 THEN V=-0.25
  165. @PVCLC
  166. VX=VX+V
  167. IF VX<-2 THEN VX=-2
  168. IF VX>2 THEN VX=2
  169. ’---カソク
  170. S=PS
  171. IF BT AND 128 THEN S=S*2.0
  172. VX=VX*S
  173. IF JS GOTO @PJUMP
  174. ’---シ゛ャンフ゜ホ゛タンカクニン
  175. GOSUB @CHKJUMP
  176. GOTO @PMOVE
  177. ’---シ゛ャンフ゜シ゛ソ゛ク
  178. @PJUMP
  179. IF JC==0 GOTO @PMOVE
  180. IF BT AND 32 GOTO @PJCONT
  181. JC=0
  182. GOTO @PMOVE
  183. ’---
  184. @PJCONT
  185. JC=JC-1
  186. VY=PV
  187. ’--- 
  188. @PMOVE
  189. PX=PX+VX
  190. PY=PY+VY
  191. GOSUB @SIDE
  192. ’---
  193. SPCHR IX,PD*NS+PN
  194. SPOFS IX,PX-8,PY-16
  195. ’---アシモトカクニン(オチル?)
  196. JS=TRUE
  197. VY=VY+(0.98/2)
  198. IF VY>8 THEN VY=8
  199. X=PX:Y=PY+VY+1
  200. GOSUB @CHKWALL
  201. IF VY>0 GOTO @CHKUNDER
  202. ’---シ゛ョウショウチュウ
  203. BG=R:Y=Y-17
  204. GOSUB @CHKWALL
  205. IF R!=1 GOTO @PEND
  206. UY=UY+2
  207. GOTO @FALL
  208. ’---
  209. @CHKUNDER
  210. IF BG==0 GOTO @CHKSTOP
  211. IF R!=0 GOTO @PEND
  212. BG=R
  213. ’---
  214. @CHKSTOP
  215. IF R==0 GOTO @PEND
  216. ’---ユカノウエ(ラッカシュウリョウ)
  217. @FALL
  218. VY=0:PY=FLOOR(UY)*16-1
  219. @PSTOP
  220. JS=FALSE
  221. @PEND
  222. RETURN
  223. ’---
  224. @CHKJUMP
  225. IF JS THEN RETURN
  226. IF OB AND 32 THEN RETURN
  227. IF (BT AND 32)==0 THEN RETURN
  228. JC=4*PS:PV=-4:VY=PV
  229. JS=TRUE
  230. RETURN
  231. ’---カヘ゛ソ゛クセイカクニン(R==0ナシ)
  232. @CHKWALL
  233. UX=X/16:UY=Y/16:R=0
  234. IF UX<1 OR UX>14 THEN R=1
  235. IF UY>=0 AND UY<12 THEN R=M(UX,UY)
  236. RETURN
  237. ’---ヨコカクニン
  238. @SIDE
  239. IF VX==0 THEN RETURN
  240. V=SGN(VX):X=PX+V*8:Y=PY
  241. GOSUB @CHKWALL
  242. IF R!=1 THEN RETURN
  243. PX=UX*16-V*9
  244. VX=0
  245. RETURN
  246. ’┌────────────┐
  247. ’│オフ゛シ゛ェクトショキカ│
  248. ’└────────────┘
  249. @OINIT
  250. ’---
  251. KN=-1:TM=99
  252. ’---
  253. FOR IX=0 TO OMAX-1
  254.  ’---
  255.  FOR I=0 TO _MAX-1
  256.   O(IX,I)=0
  257.  NEXT
  258.  O(IX,_X)=-32:’RND(16)*16
  259.  O(IX,_Y)=-32:’RND(11)*16
  260.  O(IX,_S)=1.0
  261.  O(IX,_J)=FALSE
  262.  O(IX,_N)=64
  263.  ’---
  264.  SPSET IX,O(IX,_N),2,0,0,PR
  265.  SPANIM IX,4,4,0
  266.  SPOFS IX,O(IX,_X),O(IX,_Y)
  267.  ’---
  268. NEXT
  269. ’---カキ゛カクホ
  270. O(1,_T)=2
  271. O(1,_N)=14
  272. SPCHR 1,O(1,_N),0,0,0,PR
  273. SPANIM 1,1,1,0
  274. ’---ト゛アカクホ
  275. I=OMAX-1
  276. O(I,_T)=3
  277. O(I,_N)=58
  278. SPCHR I,O(I,_N),3,0,0,PR
  279. SPANIM I,1,1,0
  280. ’---フ゜レイヤ-カクホ
  281. O(0,_T)=1
  282. O(0,_N)=128
  283. SPCHR 0,O(0,_N),2,0,0,PR
  284. SPANIM 0,2,10,0
  285. RETURN
  286. ’┌────────┐
  287. ’│カ゛メンショキカ│
  288. ’└────────┘
  289. @GINIT
  290. SPPAGE 0:SPCLR
  291. BGPAGE 0
  292. BGCLIP 0,0,31,23
  293. ’---BGクリア
  294. FOR Y=0 TO 63
  295.  FOR X=0 TO 63
  296.   BGPUT 1,X,Y,&H327,13,0,0
  297.  NEXT
  298. NEXT
  299. ’---マッフ゜ノカヘ゛
  300. DATA &H000,&H000,&H000,&H000
  301. DATA &H2D1,&H2D2,&H2F1,&H2F2
  302. DATA &H193,&H194,&H1B3,&H1B4
  303. DATA &H194,&H194,&H1B4,&H1B4
  304. DATA &H194,&H195,&H1B4,&H1B5
  305. DATA &H2CF,&H2D0,&H2EF,&H2F0
  306. FOR I=0 TO 5
  307.  FOR J=0 TO 3
  308.   READ W(I,J)
  309.  NEXT J
  310. NEXT I
  311. RETURN
  312. ’┌─────────┐
  313. ’│ステ-シ゛セッテイ│
  314. ’└─────────┘
  315. @STGSET
  316. ’---
  317. ’0―9:WALL
  318. ’P  :PLAYER
  319. ’E  :ENEMY
  320. ’K  :KEY
  321. ’D  :DOOR
  322. ’---
  323. @STG3
  324. DATA ”1000000000000001”
  325. DATA ”100K002334000001”
  326. DATA ”1010100000010101”
  327. DATA ”100000000000E0D1”
  328. DATA ”1111111111111111”
  329. DATA ”10000000000W0001”
  330. DATA ”1000000233333401”
  331. DATA ”1023400000000001”
  332. DATA ”1000000023400001”
  333. DATA ”1023340000002401”
  334. DATA ”10P0000000000001”
  335. DATA ”1111111111111111”
  336. ’---
  337. @STG2
  338. DATA ”1000000000000001”
  339. DATA ”1000000000000001”
  340. DATA ”10E0000110000D01”
  341. DATA ”1023400000023401”
  342. DATA ”10000W0000000001”
  343. DATA ”1340000P0K002331”
  344. DATA ”1000023333400001”
  345. DATA ”1000000000000001”
  346. DATA ”1334000000002331”
  347. DATA ”1000000000000001”
  348. DATA ”1000011001100001”
  349. DATA ”1111111111111111”
  350. ’---
  351. @STG1
  352. DATA ”1000000000000001”
  353. DATA ”1000000000000001”
  354. DATA ”1000000000000001”
  355. DATA ”1000000000000001”
  356. DATA ”1000000000000001”
  357. DATA ”1000000000000001”
  358. DATA ”1000000000000001”
  359. DATA ”1000000000000001”
  360. DATA ”1000000000000001”
  361. DATA ”1000000000000001”
  362. DATA ”10P00000K0000D01”
  363. DATA ”1111111111111111”
  364. ’---
  365. RESTORE @STG1
  366. IF STG==1 THEN RESTORE @STG2
  367. IF STG==2 THEN RESTORE @STG3
  368. ’---マッフ゜スキャン
  369. IX=2
  370. Y=0:P=12
  371. FOR I=0 TO 11
  372.  READ M$
  373.  X=0
  374.  FOR J=0 TO 15
  375.   C$=MID$(M$,J,1)
  376.   N=VAL(C$)
  377.   T=0:IF C$==”P” GOTO @TPSET
  378.   T=1:IF C$==”K” GOTO @TPSET
  379.   T=OMAX-1:IF C$==”D” GOTO @TPSET
  380.   ’---
  381.   IF IX==OMAX GOTO @BGSET
  382.   IF O(IX,_T)!=0 GOTO @BGSET
  383.   E=4:IF C$==”E” GOTO @TP_E
  384.   E=5:IF C$!=”W” GOTO @BGSET
  385.   ’---テキ(フユウ)
  386. @TP_W
  387.   O(IX,_N)=192
  388.   O(IX,_VY)=-1.0
  389.   SPCHR IX,O(IX,_N)
  390.   SPANIM IX,2,10,0
  391.   ’---テキ(シ゛ツカ゛イナシ)
  392. @TP_E
  393.   T=IX:IX=IX+1
  394.   O(T,_T)=E
  395.   O(T,_D)=RND(2)*2
  396.   ’---サ゛ヒョウセッテイ
  397. @TPSET
  398.   O(T,_X)=X*8+7
  399.   O(T,_Y)=Y*8+15
  400.   SPOFS T,O(T,_X)-8,O(T,_Y)-16
  401.   ’---カヘ゛ハイチ
  402. @BGSET
  403.   M(J,I)=N
  404.   BGPUT 0,X,Y,W(N,0),P,0,0
  405.   BGPUT 0,X+1,Y,W(N,1),P,0,0
  406.   BGPUT 0,X,Y+1,W(N,2),P,0,0
  407.   BGPUT 0,X+1,Y+1,W(N,3),P,0,0
  408. @BGSKIP
  409.   X=X+2
  410.  NEXT J
  411.  Y=Y+2
  412. NEXT I
  413. RETURN
  414. ’┌────┐
  415. ’│タイトル│
  416. ’└────┘
  417. @TI
  418. CLS
  419. LOCATE 0,7
  420. PRINT”        ┌┐┌┐┌┐┌┐┌┐┌┐ ┬┬”
  421. PRINT”        ├┘└┐│ ┌┤├┘├┘:││”
  422. PRINT”        └┘└┘└┘└┘│ └┘ ┴┴”
  423. LOCATE 8,12
  424. PRINT”PUSH ANY BUTTON!”
  425. LOCATE 4,18
  426. PRINT”(C)2011 SmileBoom Co.Ltd.”
  427. ’---
  428. SC=0
  429. GOSUB @OINIT
  430. GOSUB @STGSET
  431. RETURN
  432. ’---
  433. @TM
  434. IF OLDB THEN RETURN
  435. IF B==0 THEN RETURN
  436. CLS
  437. GOSUB @PUTST
  438. REQ=1
  439. RETURN
  440. ’---
  441. @PUTST
  442. LOCATE 3,0:PRINT”SCORE:”;SC
  443. LOCATE 25,0:PRINT”Р:”;TM
  444. RETURN
  445. ’┌───┐
  446. ’│クリア│
  447. ’└───┘
  448. @CI
  449. CLS:BGMPLAY 5
  450. GOSUB @PUTST
  451. LOCATE 13,11
  452. PRINT”CLEAR!”
  453. IF KN==0 THEN RETURN
  454. LOCATE 10,13
  455. PRINT”(ホカノヒトカ゛・・・)”
  456. RETURN
  457. ’---
  458. @CM
  459. IF BGMCHK() THEN RETURN
  460. IF OLDB THEN RETURN
  461. IF B==0 THEN RETURN
  462. ’---
  463. CLS
  464. GOSUB @PUTST
  465. REQ=1
  466. STG=STG+1
  467. IF STG==STGMAX GOTO @GEND
  468. GOSUB @OINIT
  469. GOSUB @STGSET
  470. RETURN
  471. ’---
  472. @GEND
  473. REQ=0
  474. STG=0
  475. RETURN