rubixcuber

Screen Locked

Dec 31st, 2020
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.12 KB | None | 0 0
  1. print "INIT ",pc
  2. STZ !1510,x
  3. STZ !151C,x
  4.  
  5. STZ $05
  6. PHX
  7. DEX
  8. -
  9. LDA !14C8,x
  10. BNE +
  11. INC $05
  12. BRA ++
  13. +
  14. DEX
  15. BPL -
  16. ++
  17. PLX
  18.  
  19. ;try to force sprite into a lower slot
  20. LDA $05
  21. BEQ +
  22.  
  23. PHX
  24. INX
  25. -
  26. LDA !14C8,x
  27. BNE ++
  28. LDA #$FF
  29. STA !14C8,x
  30. ++
  31. INX
  32. CPX #!SprSize
  33. BNE -
  34. PLX
  35.  
  36. +
  37.  
  38.  
  39. LDA #$00
  40. JSR GetExtraByte
  41. STA $04
  42.  
  43. stz $00
  44. stz $01
  45. stz $02
  46. stz $03
  47. lda !extra_bits,x ;\
  48. and #$04 ;| Extra bit set = custom
  49. lsr #3 ;/
  50.  
  51. LDA $04
  52. %SpawnSprite()
  53. bcc + ;\
  54. stz !14C8,x ;| If spawn failed, kill the sprite.
  55. rtl ;/
  56. +
  57. tya
  58. sta !1504,x
  59.  
  60. LDA #$03
  61. JSR GetExtraByte
  62. and #$0F ;| Set the sprite state
  63. beq + ;|
  64. sta !14C8,y ;/
  65. +
  66. LDA #$03
  67. JSR GetExtraByte
  68. bpl + ;|
  69. tyx ;|
  70. lda !extra_bits,x ;| Set the extra bit
  71. ora #$04 ;|
  72. sta !extra_bits,x ;|
  73. ldx $15E9|!Base2 ;/
  74. +
  75. ;lda #$01 ;\ Disable object interaction
  76. ;sta !15DC,y ;/
  77.  
  78. ;restore sprite slots
  79. LDA $05
  80. BEQ +
  81.  
  82. PHX
  83. INX
  84. -
  85. LDA !14C8,x
  86. CMP #$FF
  87. BNE ++
  88. STZ !14C8,x
  89. ++
  90. INX
  91. CPX #!SprSize
  92. BNE -
  93. PLX
  94.  
  95. +
  96.  
  97. ;Types 1 and 4 start out activated
  98. LDA #$04
  99. JSR GetExtraByte
  100. and #$F0
  101. lsr #4
  102. cmp #$01
  103. beq .startx
  104. cmp #$04
  105. bne .nox
  106. .startx:
  107. LDA #$01
  108. STA !1510,x
  109. .nox:
  110.  
  111. LDA #$04
  112. JSR GetExtraByte
  113. and #$0F
  114. cmp #$01
  115. beq .starty
  116. cmp #$04
  117. bne .noy
  118. .starty:
  119. LDA #$01
  120. STA !151C,x
  121. .noy:
  122.  
  123.  
  124. rtl
  125.  
  126. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  127. ; MAIN
  128. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  129.  
  130. print "MAIN ",pc
  131. phb : phk : plb : jsr Main : plb
  132. rtl
  133.  
  134. Main:
  135. lda $9D
  136. beq +
  137. rts
  138. +
  139.  
  140. lda !1504,x
  141. tay
  142.  
  143. lda !14C8,y
  144. bne CheckState
  145.  
  146.  
  147. Kill2:
  148. lda #$00 ;\ Re-enable object interaction.
  149. sta !15DC,y ;/
  150. Kill:
  151. stz !14C8,x
  152. lda #$FF ;\ Make it not respawn.
  153. sta !161A,x ;/
  154. rts
  155.  
  156. CheckState:
  157. cmp #$02 ;\
  158. bcc Alive ;| If the sprite is dead, kill this one too.
  159. cmp #$07 ;|
  160. bcc Kill ;/
  161.  
  162. cmp #$0B ;\
  163. beq Kill2 ;| If Mario or Yoshi grabbed the sprite,
  164. cmp #$07 ;| make it interact with objects and kill this sprite.
  165. beq Kill2 ;/
  166.  
  167. lda !15D0,y ;\ If on Yoshi's tongue, kill.
  168. bne Kill2 ;/
  169.  
  170. ldx #!SprSize-1 ;\
  171. - lda !14C8,x ;|
  172. cmp #$08 ;|
  173. bcc + ;|
  174. lda !9E,x ;|
  175. cmp #$2D ;|
  176. bne + ;| If the sprite is being eaten by Baby Yoshi, kill.
  177. tya ;|
  178. cmp !160E,x ;|
  179. bne + ;|
  180. ldx $15E9|!Base2 ;|
  181. bra Kill ;|
  182. + dex ;|
  183. bpl - ;|
  184. ldx $15E9|!Base2 ;/
  185.  
  186. Alive:
  187. lda.w !9E,y ;\
  188. cmp #$35 ;| If it's Yoshi and he's not idle anymore,
  189. bne + ;| kill this sprite and enable object interaction for Yoshi.
  190. lda.w !C2,y ;|
  191. bne Kill2 ;/
  192. +
  193. lda $14AE|!Base2 ;\
  194. beq + ;|
  195. lda !190F,y ;|
  196. and #$40 ;|
  197. bne + ;|
  198. lda.w !9E,y ;| If the silver switch is active and the sprite is not a silver coin,
  199. cmp.b #read1($02B9DA) ;| turn it into a silver coin (if the tweaker is not set).
  200. bne ++ ;| This both fixes the issue where sprites spawned in the
  201. lda !15F6,y ;| 2 highest slots don't turn into silver coins, and
  202. and #$02 ;| the issue where spawning after hitting the switch
  203. bne + ;| wouldn't make it spawn as a silver coin.
  204. ++ phk ;|
  205. pea.w .jslrtsreturn-1 ;|
  206. pea.w $02B889-1 ;|
  207. jml $02B9D9|!BankB ;|
  208. .jslrtsreturn ;/
  209. +
  210.  
  211. ;Run X lock routines
  212. LDA #$04
  213. JSR GetExtraByte
  214. AND #$F0
  215. BEQ ++
  216. CMP #$40
  217. BCS +
  218.  
  219. JSR RelX
  220. BRA ++
  221. +
  222.  
  223. JSR AbsX
  224. ++
  225.  
  226. ;Run Y lock routines
  227. LDA #$04
  228. JSR GetExtraByte
  229. AND #$0F
  230. BEQ ++
  231. CMP #$04
  232. BCS +
  233.  
  234. JSR RelY
  235. BRA ++
  236. +
  237.  
  238. JSR AbsY
  239. ++
  240.  
  241.  
  242. ;Move wrapper with sprite
  243. lda.w !E4,y
  244. sta !E4,x
  245. lda !14E0,y
  246. sta !14E0,x
  247.  
  248. lda.w !D8,y
  249. sta !D8,x
  250. lda !14D4,y
  251. sta !14D4,x
  252.  
  253.  
  254. rts
  255.  
  256. print "relx", pc
  257. RelX:
  258. LDA #$01
  259. JSR GetExtraByte
  260. STA $00
  261. STZ $01
  262.  
  263. LDA !1510,x
  264. BNE .Active
  265.  
  266. LDA !14E0,y
  267. XBA
  268. LDA !E4,y
  269.  
  270. REP #$20
  271. SEC
  272. SBC $1A
  273. SEC
  274. SBC $00
  275. CLC
  276. ADC #$0004
  277. CMP #$0008
  278. SEP #$20
  279. BCS .NotReady
  280.  
  281. LDA #$01
  282. STA !1510,x
  283. BRA .Active
  284.  
  285. .NotReady:
  286.  
  287. REP #$20
  288. STA $0C
  289. LDA $00
  290. PHA
  291. SEP #$20
  292.  
  293. LDA #$04
  294. JSR GetExtraByte
  295. AND #$F0
  296. CMP #$30
  297. BNE +
  298.  
  299. LDA #$01
  300. STA !151C,x
  301.  
  302. REP #$20
  303. PLA
  304. STA $00
  305. LDA #$0000
  306. BRA .SetPos
  307.  
  308.  
  309. +
  310. REP #$20
  311. PLA
  312. STA $00
  313. LDA $0C
  314. SEC
  315. SBC #$0004
  316. BMI +
  317.  
  318. DEC
  319. BEQ ++
  320. DEC
  321. BEQ ++
  322. DEC
  323. BEQ ++
  324. DEC
  325. BRA ++
  326. +
  327. INC
  328. BEQ ++
  329. INC
  330. BEQ ++
  331. INC
  332. BEQ ++
  333. INC
  334. ++
  335. .SetPos:
  336. CLC
  337. ADC $1A
  338. CLC
  339. ADC $00
  340.  
  341. SEP #$20
  342.  
  343. STA !E4,y
  344. XBA
  345. STA !14E0,y
  346.  
  347. LDA #$00
  348. STA !B6,y
  349. RTS
  350.  
  351. .Active:
  352. PHX
  353. TYX
  354. LDY #$00
  355. LDA $17BD|!Base2 ; move sprite with screen X
  356. BPL +
  357. DEY
  358. + CLC : ADC !E4,x
  359. STA !E4,x
  360. TYA
  361. ADC !14E0,x
  362. STA !14E0,x
  363. TXY
  364. PLX
  365. RTS
  366.  
  367. RelY:
  368. LDA #$02
  369. JSR GetExtraByte
  370. STA $00
  371. STZ $01
  372.  
  373. LDA !151C,x
  374. BNE .Active
  375.  
  376. LDA !14D4,y
  377. XBA
  378. LDA !D8,y
  379.  
  380. REP #$20
  381. SEC
  382. SBC $1C
  383. SEC
  384. SBC $00
  385. CLC
  386. ADC #$0004
  387. CMP #$0008
  388. SEP #$20
  389. BCS .NotReady
  390.  
  391. LDA #$01
  392. STA !151C,x
  393. BRA .Active
  394.  
  395. .NotReady:
  396. REP #$20
  397. STA $0C
  398. LDA $00
  399. PHA
  400. SEP #$20
  401.  
  402. LDA #$04
  403. JSR GetExtraByte
  404. AND #$0F
  405. CMP #$03
  406. BNE +
  407.  
  408. LDA #$01
  409. STA !151C,x
  410.  
  411. REP #$20
  412. PLA
  413. STA $00
  414. LDA #$0000
  415. BRA .SetPos
  416.  
  417.  
  418. +
  419. REP #$20
  420. PLA
  421. STA $00
  422. LDA $0C
  423. SEC
  424. SBC #$0004
  425. BMI +
  426.  
  427. DEC
  428. BEQ ++
  429. DEC
  430. BEQ ++
  431. DEC
  432. BEQ ++
  433. DEC
  434. BRA ++
  435. +
  436. INC
  437. BEQ ++
  438. INC
  439. BEQ ++
  440. INC
  441. BEQ ++
  442. INC
  443. ++
  444. .SetPos:
  445. CLC
  446. ADC $1C
  447. CLC
  448. ADC $00
  449.  
  450. SEP #$20
  451.  
  452. STA !D8,y
  453. XBA
  454. STA !14D4,y
  455.  
  456. LDA #$00
  457. STA !AA,y
  458. RTS
  459.  
  460. .Active:
  461. PHX
  462. TYX
  463. LDY #$00
  464. LDA $17BC|!Base2 ; move sprite with screen Y
  465. BPL ++
  466. DEY
  467. ++ CLC : ADC !D8,x
  468. STA !D8,x
  469. TYA
  470. ADC !14D4,x
  471. STA !14D4,x
  472. TXY
  473. PLX
  474. RTS
  475.  
  476. AbsX:
  477. LDA #$01
  478. JSR GetExtraByte
  479. STA $00
  480. STZ $01
  481.  
  482. LDA !1510,x
  483. BNE .Active
  484.  
  485. LDA !14E0,y
  486. XBA
  487. LDA !E4,y
  488.  
  489. REP #$20
  490. SEC
  491. SBC $1A
  492. SEC
  493. SBC $00
  494. CLC
  495. ADC #$0004
  496. CMP #$0008
  497. SEP #$20
  498. BCS .NotReady
  499.  
  500. LDA #$01
  501. STA !1510,x
  502. BRA .Active
  503.  
  504. .NotReady:
  505.  
  506. REP #$20
  507. SEC
  508. SBC #$0004
  509. BMI +
  510.  
  511. DEC
  512. BEQ ++
  513. DEC
  514. BEQ ++
  515. DEC
  516. BEQ ++
  517. DEC
  518. BRA ++
  519. +
  520. INC
  521. BEQ ++
  522. INC
  523. BEQ ++
  524. INC
  525. BEQ ++
  526. INC
  527. ++
  528. .SetPos:
  529. CLC
  530. ADC $1A
  531. CLC
  532. ADC $00
  533.  
  534. SEP #$20
  535.  
  536. STA !E4,y
  537. XBA
  538. STA !14E0,y
  539.  
  540. LDA #$00
  541. STA !B6,y
  542. RTS
  543.  
  544. .Active:
  545. REP #$20
  546. LDA #$0000
  547. BRA .SetPos
  548.  
  549.  
  550. AbsY:
  551. LDA #$02
  552. JSR GetExtraByte
  553. STA $00
  554. STZ $01
  555.  
  556. LDA !151C,x
  557. BNE .Active
  558.  
  559. LDA !14D4,y
  560. XBA
  561. LDA !D8,y
  562.  
  563. REP #$20
  564. SEC
  565. SBC $1C
  566. SEC
  567. SBC $00
  568. CLC
  569. ADC #$0004
  570. CMP #$0008
  571. SEP #$20
  572. BCS .NotReady
  573.  
  574. LDA #$01
  575. STA !151C,x
  576. BRA .Active
  577.  
  578. .NotReady:
  579.  
  580. REP #$20
  581. SEC
  582. SBC #$0004
  583. BMI +
  584.  
  585. DEC
  586. BEQ ++
  587. DEC
  588. BEQ ++
  589. DEC
  590. BEQ ++
  591. DEC
  592. BRA ++
  593. +
  594. INC
  595. BEQ ++
  596. INC
  597. BEQ ++
  598. INC
  599. BEQ ++
  600. INC
  601. ++
  602. .SetPos:
  603. CLC
  604. ADC $1C
  605. CLC
  606. ADC $00
  607.  
  608. SEP #$20
  609.  
  610. STA !D8,y
  611. XBA
  612. STA !14D4,y
  613.  
  614. LDA #$00
  615. STA !AA,y
  616. RTS
  617.  
  618. .Active:
  619. REP #$20
  620. LDA #$0000
  621. BRA .SetPos
  622.  
  623. GetExtraByte:
  624. PHY
  625. TAY
  626. LDA !extra_byte_1,x
  627. STA $00
  628. LDA !extra_byte_2,x
  629. STA $01
  630. LDA !extra_byte_3,x
  631. STA $02
  632. LDA [$00],y
  633. PLY
  634. RTS
Add Comment
Please, Sign In to add comment