Advertisement
Guest User

Untitled

a guest
Oct 4th, 2019
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. jsr gerasprites
  2. jsr gerap
  3. lda #4
  4. sta $90
  5. lda #8
  6. sta $91
  7. lda #0
  8. sta $f0 ;modo de jogo
  9. lda #$20
  10. sta $f2
  11. lda #0
  12. sta $64
  13. sta $65; score
  14. lda #3
  15. sta $6E ;vidas
  16. lda #1
  17. sta $af ;velocidade
  18. gameloop:
  19. lda $f0
  20. cmp #1
  21. beq explosao
  22. cmp #2
  23. beq score
  24. ;modo normal
  25. jsr jogador
  26. jsr inimigo
  27. jmp gameloop
  28. explosao:
  29. ;modo explodindo
  30. lda #23
  31. sta $41
  32. lda #11
  33. sta $42
  34. lda #8
  35. sta $44
  36. lda $80
  37. sta $40
  38. lda $90
  39. sta $45
  40. lda #13
  41. sta $43
  42. jsr dsprite
  43. dec $f2
  44. bne explodindo
  45. jsr cls
  46. lda #0
  47. sta $f0
  48. dec $6e
  49. bne explodindo
  50. lda #2
  51. sta $f0 ; Game over
  52. explodindo:
  53. jmp gameloop
  54.  
  55. score:
  56. ;modo game over
  57. lda #0
  58. ldx #0
  59. limpatudo:
  60. sta $200,x
  61. sta $300,x
  62. sta $400,x
  63. sta $500,x
  64. inx
  65. bne limpatudo
  66. lda #0;limpa o contador
  67. sta $f5
  68. ;Faz operação decimal porca pra escrever o score
  69.  
  70. lda #0
  71. sta $6B
  72. lda #4
  73. sta $f1
  74. sta $43
  75. sta $6A
  76. lda #10
  77. sta $41
  78. lda #8
  79. sta $44
  80. lda #6
  81. sta $40
  82.  
  83. scoreloop:
  84. lda #0
  85. sta $f5
  86. conta:
  87. ldx $6b
  88. lda tabelabcd,x
  89. sta $f9
  90. inx
  91. lda tabelabcd,x
  92. sta $f8
  93. sec
  94. lda $65
  95. sbc $f8
  96. sta $67
  97. lda $64
  98. sbc $f9
  99. sta $66
  100. bmi smallcon
  101. inc $f5
  102. sta $64
  103. lda $67
  104. sta $65
  105. jmp conta
  106. smallcon:
  107. asl $f5
  108. asl $f5
  109.  
  110. lda #34
  111. adc $f5
  112. sta $42
  113. jsr dsprite
  114. clc
  115. lda #5
  116. adc $40
  117. sta $40
  118. inc $6b
  119. inc $6b
  120. dec $6a
  121. bne scoreloop
  122. jmp fim
  123. tabelabcd:
  124. dcb $3,$E8,0,$64,0,10,0,1
  125.  
  126.  
  127. jogador:
  128. ;Desenha e calcula o jogador
  129. lda #23
  130. sta $41
  131. lda #0
  132. sta $42
  133. sta $44
  134. lda $80
  135. sta $40
  136. lda $90
  137. sta $45
  138. lda #11
  139. sta $43
  140. jsr dsprite
  141. lda $85
  142. sta $40
  143. jsr csprite
  144. lda $80
  145. sta $85
  146.  
  147. lda $80 ;calcula o controle pra esquerda e direita
  148. cmp #0
  149. beq noleft
  150. lda $ff
  151. cmp #97
  152. bne noleft
  153. dec $80
  154. dec $80
  155. noleft:
  156.  
  157. lda $80
  158. cmp #20
  159. beq noright
  160. lda $ff
  161. cmp #100
  162. bne noright
  163. inc $80
  164. inc $80
  165. noright:
  166.  
  167. lda $80 ;breca o personagem no meio
  168. cmp #10
  169. bne midstop
  170. lda $0
  171. sta $ff
  172. midstop:
  173. inc $90
  174. rts
  175.  
  176. inimigo:
  177. ;desenha o inimigo
  178. lda $af
  179. clc
  180. adc $A1
  181. sta $a1
  182. lda $A1
  183. cmp #16
  184. bmi noreset
  185. ;evento de quando o inimigo atinge o fundo
  186. lda #0
  187. sta $A1;manda o inimigo pro alto
  188. lda #16
  189. sta $A0
  190. lda $fe
  191. and #3
  192. asl
  193. asl
  194. asl
  195. asl ;calcula o proximo caminho
  196. sta $AE
  197. clc
  198. lda #1
  199. adc $65
  200. sta $65
  201. lda #0
  202. adc $64
  203. sta $64
  204. lda $65;determina a velocidade do jogo
  205. cmp #10
  206. bmi noreset
  207. lda #2
  208. sta $af
  209. lda $65;velocidade maxima
  210. cmp #20
  211. bmi noreset
  212. lda #3
  213. sta $af
  214. noreset:
  215. clc
  216.  
  217. lda $A1
  218. clc
  219. adc $ae
  220. tax
  221. lda carpts,x
  222. clc
  223. adc #16
  224. sta $a0 ;calcula a posição do inimigo pela altura
  225.  
  226. lda $A1
  227. cmp #5
  228. bpl farcar ;BPL/BMI são a comparação de maior que/menor que
  229. clc ;desenha e ajusta o inimigo quando esta longe
  230. adc #4
  231. sta $41
  232. sta $A4
  233. lda #31
  234. sta $42
  235. lda $A0
  236. clc
  237. sbc #1
  238. sta $40
  239. sta $A3
  240. lda #3
  241. sta $43
  242. sta $AA
  243. jmp renderenemy
  244. farcar:
  245.  
  246. lda $A1
  247. cmp #10
  248. bpl closercar
  249. clc
  250. adc #5
  251. sta $41
  252. sta $A4
  253. lda #25
  254. sta $42
  255. lda $A0
  256. clc
  257. sbc #3
  258. sta $40
  259. sta $A3
  260. lda #6
  261. sta $43
  262. sta $AA
  263.  
  264. jmp renderenemy
  265. closercar:
  266.  
  267. lda $A1
  268. clc
  269. adc #8
  270. sta $41
  271. sta $A4
  272. lda #0
  273. sta $42
  274. lda $A0
  275. clc
  276. sbc #5
  277. sta $40
  278. sta $A3
  279. lda #11
  280. sta $43
  281. sta $AA
  282. renderenemy:
  283.  
  284. lda #4 ;desenha e limpa o inimigo
  285. sta $44
  286. lda $91
  287. sta $45
  288. jsr dsprite
  289. lda $A5
  290. sta $40
  291. lda $A6
  292. sta $41
  293. lda $ab
  294. sta $43
  295. jsr csprite
  296. lda $A3
  297. sta $A5
  298. lda $A4
  299. sta $A6
  300. lda $AA
  301. sta $AB
  302. inc $91
  303.  
  304. lda $a1
  305. cmp #14
  306. bmi semkaboom
  307. sec
  308. lda $40
  309. sbc $80
  310. bpl nupos
  311. eor #$ff
  312. nupos:
  313. cmp #5
  314. bpl semkaboom
  315. lda #1
  316. sta $f0
  317. lda #20
  318. sta $f2 ;calcula se houve colisão de inimigo e se houve, seta o f1 pro modo explosão
  319. semkaboom:
  320.  
  321. rts
  322. carpts: ;trilhas que o inimigo pode seguir
  323. dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  324. dcb 0,0,1,1,2,2,3,3,4,5,6,7,8,9,10,11
  325. dcb 0,0,$ff,$ff,$fe,$fe,$fd,$fd,$fc,$fc,$fb,$fa,$f9,$f8,$f7,$f6
  326. dcb 0,0,1,1,2,2,3,3,2,1,0,$ff,$fd,$fb,$f9,$f6
  327.  
  328. add16:
  329. clc ;Rotina de adição de numero 8bit em numero 16bit reusada 1 trilhão de vezes
  330. adc $10
  331. sta $10
  332. lda #0
  333. adc $11
  334. sta $11
  335. rts
  336.  
  337. add162:
  338. clc ;usada pelo menos umas 2 vezes
  339. adc $12
  340. sta $12
  341. lda #0
  342. adc $13
  343. sta $13
  344. rts
  345.  
  346. dsprite:
  347. ;desenha sprite na tela
  348. ;$40 x $41 y $42 spini $43 splen $44 palette $45 spid
  349. lda $41
  350. lsr
  351. lsr
  352. lsr
  353. clc
  354. adc #2
  355. sta $11
  356. lda #$f
  357. sta $13
  358. lda $42
  359. sta $12
  360. lda #0
  361. sta $30
  362. tax
  363. tay
  364. lda $41
  365. and #7
  366. asl
  367. asl
  368. asl
  369. asl
  370. asl
  371. adc $40
  372. sta $10
  373. sta $15
  374. lda $11
  375. adc #$15
  376. sta $16
  377. dspritel:
  378. lda ($12),y
  379. cmp #0
  380. beq tra
  381. clc
  382. adc $44
  383. tax
  384. lda pal,x
  385. sta ($10),y
  386. lda $45
  387. sta ($15),y
  388. tra:
  389. iny
  390. cpy $43
  391. bne dspritel
  392. ldy #0
  393. lda #32
  394. jsr add16
  395. lda #74
  396. jsr add162
  397. lda $10
  398. sta $15
  399. lda $11
  400. adc #$15
  401. sta $16
  402. inc $30
  403. lda #8
  404. cmp $30
  405. bne dspritel
  406. rts
  407. pal:
  408. dcb 0,0,2,$a,0,0,5,$d,0,1,7,$8
  409.  
  410. csprite:
  411. ;Apaga o sprite anterior usando a tabela em 1fxx
  412. lda $41
  413. lsr
  414. lsr
  415. lsr
  416. clc
  417. adc #2
  418. sta $11
  419. adc #$26
  420. sta $13
  421. lda #0
  422. sta $30
  423. tax
  424. tay
  425. lda $41
  426. and #7
  427. asl
  428. asl
  429. asl
  430. asl
  431. asl
  432. adc $40
  433. sta $10
  434. sta $12
  435. sta $15
  436. lda $11
  437. adc #$15
  438. sta $16
  439. cspritel:
  440. lda ($15),y
  441. cmp $45
  442. beq masked
  443. lda ($12),y
  444. sta ($10),y
  445. masked:
  446. iny
  447. cpy $43
  448. bne cspritel
  449. ldy #0
  450. lda #32
  451. jsr add16
  452. lda #32
  453. jsr add162
  454. lda $10
  455. sta $15
  456. lda $11
  457. adc #$15
  458. sta $16
  459. inc $30
  460. lda #8
  461. cmp $30
  462. bne cspritel
  463. rts
  464.  
  465.  
  466. gerap:
  467. ;Gera o background
  468. lda #$28
  469. sta $11
  470. lda #0
  471. sta $10
  472. tay
  473. tax
  474. loop:
  475. lda ecor,x
  476. sta ($10),y
  477. iny
  478. cpy #32 ;Compare com o y que dá zero se y=32
  479. bne loop
  480. lda #32 ;bota 32
  481. jsr add16
  482. ldy #0
  483. inx
  484. cpx #32
  485. bne loop
  486. lda #12
  487. sta $20 ;começo inicial
  488. lda #7
  489. sta $21 ;tamanho inicial
  490. lda #$c
  491. sta $22 ;cor inicial
  492. lda #$40
  493. sta $10
  494. lda #$29
  495. sta $11
  496. lda #0;endereço do começo
  497. ldy $20
  498. lda #1;canto branco
  499. ldx $21
  500. edraw:
  501. sta ($10),y
  502. lda $22
  503. iny
  504. dex
  505. bne edraw
  506. lda #1
  507. sta ($10),y ;canto branco da direita
  508. lda #32 ;bota 32
  509. jsr add16
  510. lda $10
  511. cmp #0
  512. bne antesdametade
  513. lda #$b
  514. sta $22
  515. antesdametade:
  516. lda #1
  517. inc $21
  518. inc $21
  519. ldx $21
  520. dec $20
  521. ldy $20
  522. cpy #$ff
  523. bne edraw
  524. ;depois de plotar o background num buffer
  525. ;Copia pra tela
  526. cls:
  527. lda #2
  528. sta $11
  529. lda #$28
  530. sta $13
  531. lda #0
  532. sta $10
  533. sta $12
  534. ldx #4
  535. ldy #0
  536. plotatela:
  537. lda ($12),y
  538. sta ($10),y
  539. iny
  540. bne plotatela
  541. inc $11
  542. inc $13
  543. dex
  544. bne plotatela
  545. rts
  546.  
  547. ;tabela de cores do background
  548. ecor:
  549. dcb 1,1,1,3,1,3,3,3,3,3,8,8,8,8,8,8,9,9,9,9,9,9,9
  550. dcb $b,$b,$b,$b,$b,$b,$b,$b,$b
  551.  
  552. gerasprites:
  553. ;essa rotina é bem complicada e maluca porque decoda as imagens com 2bits de precisão naquele bloco (se fosse mandar as cores puras, seria um bloco 4 vezes maior)
  554. lda #$0
  555. sta $10
  556. sta $13
  557. sta $20
  558. tax
  559. tay
  560. lda #$F
  561. sta $11
  562. decodeb:
  563. ldy $13
  564. lda spri,y
  565. sta $14
  566. ldy #0
  567. ldx #4
  568. decodesb:
  569. lda $14
  570. and #3 ;"filtra" os dois primeiros bits com and
  571. sta ($10),y
  572. lsr $14 ;Divide o valor de $14 por 4. Isso, junto com o and
  573. lsr $14 ;acima "fatia" os 8 bits de cada byte em 4 fatias de 2 bits que contem os valores de cor que eu quero
  574. lda #74 ; são 74 pixels de sprite, então isso desce em Y no bitmap sendo gerado
  575. jsr add16
  576. dex ;4 vezes pra fatiar o byte
  577. bne decodesb
  578. clc
  579. lda $13
  580. and #1
  581. cmp #1
  582. bne par ;A cada 2 bytes, tem que empurrar o bitmap sendo desenhado pra direita, por isso só nos impares
  583. lda $20
  584. sta $10
  585. lda #$f
  586. sta $11
  587. inc $20
  588. par:
  589. inc $13
  590. lda $13
  591. cmp #150 ;74*2 bytes
  592. beq finishde
  593. jmp decodeb ;esses branches condicionais só podem pular 126 bytes pra cima ou 127 pra baixo ou algo assim, então precisa usar um JMP se salto for muito grande
  594. finishde:
  595. rts
  596. spri: ;tabela de sprites de 2 bits
  597. dcb 0,0,0,$54,0,$54,$14,$54,$14,$3E,$A0,$16,$E0,$16,$A0,$16
  598. dcb $14,$3E,$14,$54,0,$54,0,$54,0,$C,0,$C0
  599. dcb 0,$CF,0,$88,$8C,$6D,$C0,$58,$80,$57,$30,$58
  600. dcb $C0,$62,$80,$8F,$C,$E0,$C0,$C,0,$C0,0,$30
  601. dcb 0,$50,0,$51,0,$3A,0,$3A,0,$51,0,$50
  602. dcb 0,$44,0,$38,0,$44,$55,$55,1,$40,1,$40
  603. dcb $55,$55,$10,$40,4,$40,$55,$55,0,$40,$45,$55
  604. dcb $41,$40,$41,$40,$55,$50,5,$50,$41,$40,$41,$40
  605. dcb $55,$55,$55,1,0,1,0,1,$55,$55,$55,$50
  606. dcb $41,$40,$41,$40,$45,$55,$55,$55,$41,$40,$41,$40
  607. dcb $45,$55,1,$40,1,$14,$41,1,$15,0,$15,$55
  608. dcb $41,$40,$41,$40,$15,$55,$55,$50,$41,$40,$41,$40,$55,$55
  609. fim:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement