Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- !yxppccct = %00001100
- !nTiles = $01 ; Number of 16x16 tiles - 1
- !spriteStatusTable = $14C8
- print "INIT ",pc
- rtl
- print "MAIN ",pc
- phb
- phk
- plb
- jsr .spriteStart
- plb
- rtl
- .spriteStart:
- lda !spriteStatusTable,x ;
- cmp #$08 ;
- bne .return ; if status != normal, return
- lda $9D : bne .return
- lda #$00 : %SubOffScreen()
- jsr .graphics
- jsr .move
- jsl $01A7DC ; Check for contact with mario
- bcc .return
- jsr .onContact
- .return:
- rts
- .move:
- lda $14E4,x ;
- xba ;
- lda $00E4,x ;
- rep #$20 ;
- sbc $D1 ;
- cmp #$007F
- bpl .clampLow
- lda #$007F
- .clampLow:
- cmp #$FF80
- bmi .doneClamping
- lda #$FF80
- .doneClamping:
- sep #$20
- eor #$FF
- sta $B6,x
- jsl $018022
- rts
- .onContact:
- lda #$00 : sta !spriteStatusTable,x
- lda #$09 : sta $1DFC
- stz $00 : stz $01
- lda #$1C : sta $02
- lda #$01
- %SpawnSmoke()
- rts
- ;;============;;
- ;; Graphics ;;
- ;;============;;
- .graphics:
- %GetDrawInfo() ; y = index, $00 = xpos, $01 = ypos
- phx
- ldx #!nTiles
- .graphicLoop:
- lda $00 : adc hDisp,x : sta $0300|!Base2,y
- lda $01 : adc vDisp,x : sta $0301|!Base2,y
- lda tilemap,x : sta $0302|!Base2,y
- lda #!yxppccct
- ora $64
- sta $0303|!Base2,y
- iny #4 ; See Asar's pseudo opcodes
- dex
- bpl .graphicLoop
- plx
- lda #!nTiles
- ldy #$02
- jsl $01B7B3
- rts
- tilemap: db $40, $42, $40, $42
- hDisp: db $00, $10, $FF, $10
- vDisp: db $00, $00, $F0, $F0
Advertisement
Advertisement
Advertisement
RAW Paste Data
Copied
Advertisement