Advertisement
Guest User

collision_prevention_13.bas

a guest
Jun 27th, 2013
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.05 KB | None | 0 0
  1. set kernel multisprite
  2. set optimization noinlinedata
  3.  
  4. dim dx = temp1
  5. dim dy = temp2
  6. dim pptr = temp3
  7. dim dir = temp4
  8. dim cf = temp6
  9.  
  10. dim sc0 = score
  11. dim sc1 = score + 1
  12. dim sc2 = score + 2
  13.  
  14. dim jf = c
  15. dim sf = d
  16. dim pno = e
  17. dim pxcnt = f
  18.  
  19. const pxb = player0x
  20. const pyb = player0y
  21.  
  22. pfheight = 7
  23.  
  24. mk1
  25.  
  26. gosub define_players
  27. gosub b00
  28.  
  29. pno = 0 : pxcnt = 0 : cf = $FF : jf = $80
  30.  
  31. COLUPF = $92
  32. COLUBK = $9C
  33. COLUP2 = $56
  34. COLUP3 = $46
  35. COLUP4 = $36
  36. COLUP5 = $26
  37.  
  38. player0x = $16 : player1x = $16 : player2x = $16
  39. player3x = $16 : player4x = $16 : player5x = $16
  40. player0y = $0C : player1y = $18 : player2y = $24
  41. player3y = $30 : player4y = $3C : player5y = $48
  42.  
  43. main
  44.  
  45. temp2 = ((jf ^ $80) & INPT4) & $80 : jf = INPT4
  46. if temp2 then pno = pno_tbl[pno]
  47.  
  48. temp2 = ((SWCHA ^ $FF) & sf)/16 : sf = SWCHA
  49. temp2 = (sf/16) ^ $0F
  50. dir = dir_tbl[temp2]
  51.  
  52. if temp2 then gosub move_player
  53.  
  54. no_move
  55. COLUP0 = $1C
  56. COLUP1 = $66
  57.  
  58. drawscreen
  59. goto main
  60.  
  61. move_player
  62.  
  63. gosub test
  64. if !cf then move
  65.  
  66. rem if not odd-diagonal then done
  67. rem else check x, y individually
  68.  
  69. if !dir{0} then move_done
  70. dir = (dir - 1) & 7
  71. gosub test
  72. if !cf then move
  73. dir = (dir + 2) & 7
  74. gosub test
  75. if cf then move_done
  76. move
  77.  
  78. rem adjust player position according to direction
  79.  
  80. pxb[pno] = pxb[pno] + dx_tbl[dir]
  81. pyb[pno] = pyb[pno] + dy_tbl[dir]
  82. temp1 = pxb[pno] : temp2 = pyb[pno]
  83. gosub update_scr
  84. move_done
  85. gosub update_bar
  86. return
  87.  
  88. test
  89. dx = dx_tbl[dir] + pxb[pno] : dy = dy_tbl[dir] + pyb[pno]
  90. pptr = pno_mul_tbl[pno] + dir : cf = $FF
  91. pxcnt = pxcnt + 1
  92. if !pfread(2, 0) then test_done
  93. pxcnt = pxcnt + 1
  94. if !pfread(1, 0) then test_done
  95. pxcnt = pxcnt + 1
  96. if !pfread(3, 0) then test_done
  97. pxcnt = pxcnt + 1
  98. if !pfread(4, 0) then test_done
  99. pxcnt = pxcnt + 1
  100. if !pfread(0, 0) then test_done
  101. cf = cf + 1
  102. test_done
  103. return
  104.  
  105.  
  106. data px_tbl
  107. -16, -15, -13, -10, -9, -10, -13, -15, -16, -15, -13, -10
  108. -21, -20, -19, -18, -17, -18, -19, -20, -21, -20, -19, -18
  109. -24, -24, -20, -17, -17, -19, -21, -22, -24, -24, -20, -17
  110. -24, -22, -20, -18, -17, -20, -21, -23, -24, -22, -20, -18
  111. -23, -20, -20, -20, -18, -21, -21, -21, -23, -20, -20, -20
  112. -24, -21, -21, -17, -17, -19, -21, -24, -24, -21, -21, -17
  113. end
  114.  
  115. data py_tbl
  116. -7, -5, -4, -5, -7, -9, -10, -9, -7, -5, -4, -5
  117. -4, -2, -1, -2, -4, -4, -4, -4, -4, -2, -1, -2
  118. -4, -3, -1, -3, -6, -8, -8, -6, -4, -3, -1, -3
  119. -4, -3, -1, -3, -5, -6, -8, -6, -4, -3, -1, -3
  120. -5, -5, -2, -5, -5, -5, -8, -5, -5, -5, -2, -5
  121. -3, -3, -1, -1, -4, -6, -7, -5, -3, -3, -1, -1
  122. end
  123.  
  124. data dx_tbl
  125. 0, 1, 1, 1, 0, -1, -1, -1
  126. end
  127.  
  128. data dy_tbl
  129. 1, 1, 0, -1, -1, -1, 0, 1
  130. end
  131.  
  132. data dir_tbl
  133. 0, 0, 4, 0, 6, 7, 5, 0, 2, 1, 3
  134. end
  135.  
  136. data pno_tbl
  137. 1, 2, 3, 4, 5, 0
  138. end
  139.  
  140. data pno_mul_tbl
  141. 0, 12, 24, 36, 48, 60
  142. end
  143.  
  144.  
  145. update_scr
  146. sc0 = 0 : sc1 = sc1 & 15
  147. if temp1 >= 100 then sc0 = sc0 + 16 : temp1 = temp1 - 100
  148. if temp1 >= 100 then sc0 = sc0 + 16 : temp1 = temp1 - 100
  149. if temp1 >= 50 then sc0 = sc0 + 5 : temp1 = temp1 - 50
  150. if temp1 >= 30 then sc0 = sc0 + 3 : temp1 = temp1 - 30
  151. if temp1 >= 20 then sc0 = sc0 + 2 : temp1 = temp1 - 20
  152. if temp1 >= 10 then sc0 = sc0 + 1 : temp1 = temp1 - 10
  153. sc1 = (temp1 * 4 * 4) | sc1
  154.  
  155. sc1 = sc1 & 240 : sc2 = 0
  156. if temp2 >= 100 then sc1 = sc1 + 1 : temp2 = temp2 - 100
  157. if temp2 >= 100 then sc1 = sc1 + 1 : temp2 = temp2 - 100
  158. if temp2 >= 50 then sc2 = sc2 + 80 : temp2 = temp2 - 50
  159. if temp2 >= 30 then sc2 = sc2 + 48 : temp2 = temp2 - 30
  160. if temp2 >= 20 then sc2 = sc2 + 32 : temp2 = temp2 - 20
  161. if temp2 >= 10 then sc2 = sc2 + 16 : temp2 = temp2 - 10
  162. sc2 = sc2 | temp2
  163. return
  164.  
  165. asm
  166. pfread
  167. clc
  168. adc pptr
  169. tax
  170. lda py_tbl,x
  171. clc
  172. adc dy
  173. lsr
  174. lsr
  175. lsr
  176. tay
  177. clc
  178. lda px_tbl,x
  179. adc dx
  180. lsr
  181. lsr
  182. clc
  183. adc #$08
  184. tax
  185. and #$10
  186. bne skip_PF2_and
  187. lda bit_masks-8,x
  188. and (PF1pointer),y
  189. rts
  190. skip_PF2_and
  191. lda bit_masks-8,x
  192. and (PF2pointer),y
  193. rts
  194.  
  195. bit_masks
  196. .byte $80, $40, $20, $10, $08, $04, $02, $01
  197. .byte $01, $02, $04, $08, $10, $20, $40, $80
  198. .byte $80, $40, $20, $10, $08, $04, $02, $01
  199. .byte $01, $02, $04, $08, $10, $20, $40, $80
  200. end
  201.  
  202. mk2
  203.  
  204. asm
  205. echo (.mk2 - .mk1)d
  206. end
  207.  
  208. update_bar
  209. rem if pxcnt > 15 then goto b15
  210. on pxcnt gosub b00 b01 b02 b03 b04 b05 b06 b07 b08 b09 b10 b11 b12 b13 b14 b15
  211. pxcnt = 0
  212. return
  213.  
  214.  
  215. define_players
  216.  
  217. player0:
  218. %00010000
  219. %01000010
  220. %00000000
  221. %10000001
  222. %00000000
  223. %01000010
  224. %00010000
  225. %10000000
  226. end
  227.  
  228. rem 0 0 upper left
  229. rem table order left middle = 0
  230. rem increasing counter clockwise
  231. rem -16 x offset -10 y offset
  232.  
  233. rem 0, 1, 3, 6, 7, 6, 3, 1
  234. rem -16, -15, -13, -10, -9, -10, -13, -15
  235.  
  236. rem 3, 5, 6, 5, 3, 1, 0, 1
  237. rem -7, -5, -4, -5, -7, -9, -10, -9
  238.  
  239. player1:
  240. %00000000
  241. %00000000
  242. %00000000
  243. %00000000
  244. %00011111
  245. %00001110
  246. %00001110
  247. %10000100
  248. end
  249.  
  250. rem 0 0 upper left
  251. rem table order left middle = 0
  252. rem increasing counter clockwise
  253. rem -24 x offset -8 y offset
  254.  
  255. rem 3, 4, 5, 6, 7, 6, 5, 4
  256. rem -21, -20, -19, -18, -17, -18, -19, -20
  257.  
  258. rem 4, 6, 7, 6, 4, 4, 4, 4
  259. rem -4, -2, -1, -2, -4, -4, -4, -4
  260.  
  261. player2:
  262. %00011100
  263. %00000000
  264. %00110001
  265. %00000001
  266. %10000001
  267. %10000001
  268. %00000000
  269. %00011000
  270. end
  271.  
  272. rem 0, 0, 4, 7, 7, 5, 3, 2
  273. rem -24, -24, -20, -17, -17, -19, -21, -22
  274.  
  275. rem 4, 5, 7, 5, 2, 0, 0, 2
  276. rem -4, -3, -1, -3, -6, -8, -8, -6
  277.  
  278. player3:
  279. %00010000
  280. %00010000
  281. %01111000
  282. %00011111
  283. %11111000
  284. %00111110
  285. %00001000
  286. %00001000
  287. end
  288.  
  289. rem 0, 2, 4, 6, 7, 4, 3, 1
  290. rem -24, -22, -20, -18, -17, -20, -21, -23
  291.  
  292. rem 4, 5, 7, 5, 3, 2, 0, 2
  293. rem -4, -3, -1, -3, -5, -6, -8, -6
  294.  
  295. player4:
  296. %00010000
  297. %00010000
  298. %00010000
  299. %01111110
  300. %00001000
  301. %00001000
  302. %00001000
  303. %00000000
  304. end
  305.  
  306. rem 1, 4, 4, 4, 6, 3, 3, 3
  307. rem -23, -20, -20, -20, -18, -21, -21, -21
  308.  
  309. rem 3, 3, 6, 3, 3, 3, 0, 3
  310. rem -5, -5, -2, -5, -5, -5, -8, -5
  311.  
  312.  
  313. player5:
  314. %00000000
  315. %00010000
  316. %00011100
  317. %00110000
  318. %10000001
  319. %10010111
  320. %00010100
  321. %00011100
  322. end
  323. return
  324.  
  325. rem 0, 3, 3, 7, 7, 5, 3, 0
  326. rem -24, -21, -21, -17, -17, -19, -21, -24
  327.  
  328. rem 5, 5, 7, 7, 4, 2, 1, 3
  329. rem -3, -3, -1, -1, -4, -6, -7, -5
  330.  
  331.  
  332.  
  333. b00
  334. playfield:
  335. ................
  336. .X.X.X.X.X.X.X..
  337. ................
  338. ...........XXXXX
  339. ...........X....
  340. ...........X....
  341. ...........X....
  342. ...........X....
  343. ...........XXXX.
  344. ................
  345. ................
  346. end
  347. return
  348.  
  349. b01
  350. playfield:
  351. X...............
  352. .X.X.X.X.X.X.X..
  353. ................
  354. ...........XXXXX
  355. ...........X....
  356. ...........X....
  357. ...........X....
  358. ...........X....
  359. ...........XXXX.
  360. ................
  361. ................
  362. end
  363. return
  364.  
  365. b02
  366. playfield:
  367. XX..............
  368. .X.X.X.X.X.X.X..
  369. ................
  370. ...........XXXXX
  371. ...........X....
  372. ...........X....
  373. ...........X....
  374. ...........X....
  375. ...........XXXX.
  376. ................
  377. ................
  378. end
  379. return
  380.  
  381. b03
  382. playfield:
  383. XXX.............
  384. .X.X.X.X.X.X.X..
  385. ................
  386. ...........XXXXX
  387. ...........X....
  388. ...........X....
  389. ...........X....
  390. ...........X....
  391. ...........XXXX.
  392. ................
  393. ................
  394. end
  395. return
  396.  
  397. b04
  398. playfield:
  399. XXXX............
  400. .X.X.X.X.X.X.X..
  401. ................
  402. ...........XXXXX
  403. ...........X....
  404. ...........X....
  405. ...........X....
  406. ...........X....
  407. ...........XXXX.
  408. ................
  409. ................
  410. end
  411. return
  412.  
  413. b05
  414. playfield:
  415. XXXXX...........
  416. .X.X.X.X.X.X.X..
  417. ................
  418. ...........XXXXX
  419. ...........X....
  420. ...........X....
  421. ...........X....
  422. ...........X....
  423. ...........XXXX.
  424. ................
  425. ................
  426. end
  427. return
  428.  
  429. b06
  430. playfield:
  431. XXXXXX..........
  432. .X.X.X.X.X.X.X..
  433. ................
  434. ...........XXXXX
  435. ...........X....
  436. ...........X....
  437. ...........X....
  438. ...........X....
  439. ...........XXXX.
  440. ................
  441. ................
  442. end
  443. return
  444.  
  445. b07
  446. playfield:
  447. XXXXXXX.........
  448. .X.X.X.X.X.X.X..
  449. ................
  450. ...........XXXXX
  451. ...........X....
  452. ...........X....
  453. ...........X....
  454. ...........X....
  455. ...........XXXX.
  456. ................
  457. ................
  458. end
  459. return
  460.  
  461. b08
  462. playfield:
  463. XXXXXXXX........
  464. .X.X.X.X.X.X.X..
  465. ................
  466. ...........XXXXX
  467. ...........X....
  468. ...........X....
  469. ...........X....
  470. ...........X....
  471. ...........XXXX.
  472. ................
  473. ................
  474. end
  475. return
  476.  
  477. b09
  478. playfield:
  479. XXXXXXXXX.......
  480. .X.X.X.X.X.X.X..
  481. ................
  482. ...........XXXXX
  483. ...........X....
  484. ...........X....
  485. ...........X....
  486. ...........X....
  487. ...........XXXX.
  488. ................
  489. ................
  490. end
  491. return
  492.  
  493. b10
  494. playfield:
  495. XXXXXXXXXX......
  496. .X.X.X.X.X.X.X..
  497. ................
  498. ...........XXXXX
  499. ...........X....
  500. ...........X....
  501. ...........X....
  502. ...........X....
  503. ...........XXXX.
  504. ................
  505. ................
  506. end
  507. return
  508.  
  509. b11
  510. playfield:
  511. XXXXXXXXXXX.....
  512. .X.X.X.X.X.X.X..
  513. ................
  514. ...........XXXXX
  515. ...........X....
  516. ...........X....
  517. ...........X....
  518. ...........X....
  519. ...........XXXX.
  520. ................
  521. ................
  522. end
  523. return
  524.  
  525. b12
  526. playfield:
  527. XXXXXXXXXXXX....
  528. .X.X.X.X.X.X.X..
  529. ................
  530. ...........XXXXX
  531. ...........X....
  532. ...........X....
  533. ...........X....
  534. ...........X....
  535. ...........XXXX.
  536. ................
  537. ................
  538. end
  539. return
  540.  
  541. b13
  542. playfield:
  543. XXXXXXXXXXXXX...
  544. .X.X.X.X.X.X.X..
  545. ................
  546. ...........XXXXX
  547. ...........X....
  548. ...........X....
  549. ...........X....
  550. ...........X....
  551. ...........XXXX.
  552. ................
  553. ................
  554. end
  555. return
  556.  
  557. b14
  558. playfield:
  559. XXXXXXXXXXXXXX..
  560. .X.X.X.X.X.X.X..
  561. ................
  562. ...........XXXXX
  563. ...........X....
  564. ...........X....
  565. ...........X....
  566. ...........X....
  567. ...........XXXX.
  568. ................
  569. ................
  570. end
  571. return
  572.  
  573. b15
  574. playfield:
  575. XXXXXXXXXXXXXXX.
  576. .X.X.X.X.X.X.X..
  577. ................
  578. ...........XXXXX
  579. ...........X....
  580. ...........X....
  581. ...........X....
  582. ...........X....
  583. ...........XXXX.
  584. ................
  585. ................
  586. end
  587. return
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement