Advertisement
Guest User

Untitled

a guest
Jun 15th, 2017
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
BOO 27.02 KB | None | 0 0
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2.  
  3. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  4.  
  5. !FrameNum = $1510
  6. !TempDir = $02
  7. !TilesTemp = $06
  8. !OneTileTemp = $07
  9.  
  10. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  11. ; INIT and MAIN JSL targets
  12. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  13.  
  14.                     print "INIT ",pc
  15.                     JSR SUB_HORZ_POS
  16. TYA
  17. STA $157C,x
  18.                                         RTL
  19.                         print "MAIN ",pc                      
  20.                     PHB
  21.                     PHK                        
  22.                     PLB
  23.                     JSR SPRITE_ROUTINE
  24.                     PLB
  25.                     RTL    
  26.  
  27.  
  28. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  29. ; SPRITE_ROUTINE
  30. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  31. Y_SPEEDS:
  32.                         db $10,$F0    
  33.  
  34. SPRITE_ROUTINE:  
  35.             JSR SUB_GFX
  36.  
  37.             LDA $14C8,x                         ; |     if sprite state != 8,
  38.             CMP #$08                            ; |     return
  39.             BNE Returnas                            ;/      to previous return, as BNE is out of range
  40.            
  41.             LDA $9D                             ;\      if sprites are locked,
  42.             BNE Returnas                            ;/      return
  43.                                         INC !FrameNum,x
  44.                                         LDA !FrameNum,x ;\Only allow 16 frames
  45.                                         AND #$0F              ;|
  46.                                         STA !FrameNum,x ;/
  47.                                                                                 JSR SUB_HORZ_POS
  48. TYA
  49. STA $157C,x
  50.  JSL  $019138
  51. LDA $14D4,x : XBA : LDA $D8,x : REP #$20 : SEC : SBC $96 : CLC : ADC #$0010 : CMP #$0020 : SEP #$20 : BCC NotInRange
  52.                                                                                 LDA #$01
  53.                                                                                 STA $10D0
  54.                                                                                 NotInRange:
  55.                                                                                
  56. LDA $1588,x
  57. AND #$0C
  58. BEQ +
  59.  
  60. LDA $C2,x
  61. EOR #$01
  62. STA $C2,x
  63.  
  64.  
  65. +
  66. LDY $C2,x
  67. LDA Y_SPEEDS,y
  68. STA $AA,x
  69.  
  70. JSL $01801A                     ; Apply speed.
  71.  
  72.                                                         JSL $01A7DC         ;deflt interaction
  73.  
  74.                                         RTS
  75.                                         Returnas:
  76.                                     STZ $AA,x
  77.                                     JSL $01801A    
  78.                                         RTS
  79. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  80. ; GRAPHICS ROUTINE
  81. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  82. Tiles:
  83. db $00,$02,$20,$22
  84. XOff:
  85. db $F8,$08,$F8,$08
  86. YOff:
  87. db $F8,$F8,$08,$08
  88. Frames:
  89. db $00,$01,$02,$03
  90. db $10,$11,$12,$13
  91. db $20,$21,$22,$23
  92. db $30,$31,$32,$33
  93. AltFrames:
  94. db $40,$41,$42,$43
  95. db $50,$51,$52,$53
  96. db $60,$61,$62,$63
  97. db $70,$71,$72,$73
  98. SUB_GFX:            JSR GET_DRAW_INFO       ; after: Y = index to sprite OAM ($300)
  99.                                             ;      $00 = sprite x position relative to screen boarder
  100.                                             ;      $01 = sprite y position relative to screen boarder  
  101.                    
  102.                     LDA $157C,x             ; $02 = sprite direction
  103.                     STA !TempDir
  104.                                         STZ !TilesTemp
  105.                                        
  106.                                        
  107.                                         LDA $10D0
  108.                                         BEQ showalt
  109.                                         LDA !FrameNum,x
  110.                                         PHX
  111.                                         TAX
  112.                                        
  113.                                         LDA Frames,x
  114.                                         PLX
  115.                                         BRA derp
  116.                                         showalt:
  117.                                         LDA !FrameNum,x
  118.                                           PHX
  119.                                         TAX
  120.                                        
  121.                                         LDA AltFrames,x
  122.                                         PLX
  123.                                         derp:
  124.                                         JSR GETSLOT
  125.                                         BEQ EndIt
  126.                                         STA !OneTileTemp
  127.                                         PHX
  128.                                         LDX #$00
  129.                                         TileLoop:
  130.                                         LDA $00
  131.                                         PHY
  132.                                         LDY !TempDir
  133.                                         BEQ right
  134.                                         CLC
  135.                                         ADC XOff,x
  136.                                         BRA Flipped
  137.                                         right:
  138.                                         SEC
  139.                                         SBC XOff,x
  140.                                         Flipped:
  141.                                         PLY
  142.                                         STA $0300,y
  143.                                         LDA $01
  144.                                         CLC
  145.                                         ADC YOff,x
  146.                                         STA $0301,y
  147.                                         LDA !OneTileTemp
  148.                                         CLC
  149.                                         ADC Tiles,x
  150.                                         STA $0302,y
  151.                                         PHX
  152.                                         LDX $15E9
  153.                                         LDA $15F6,x
  154.                                         ORA #$0F
  155.                                         ORA $64
  156.                                         LDX !TempDir
  157.                                         BNE left
  158.                                         ORA #$40
  159.                                         left:
  160.                                         PLX
  161.                                         STA $0303,y
  162.                                         INC !TilesTemp
  163.                                         INY
  164.                                         INY
  165.                                         INY
  166.                                         INY
  167.                                         INX
  168.                                         CPX #$04
  169.                                         BCC TileLoop
  170.                                         PLX
  171.                                         LDA !TilesTemp
  172.                                         BEQ EndIt
  173.                                         DEC
  174.                                         LDY #$02
  175.                                         JSL $01B7B3
  176.                                         EndIt:
  177.                                         RTS
  178.                                      
  179.  
  180.  
  181. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  182. ; Dynamic sprite routine
  183. ; Programmed mainly by SMKDan, but based on some of my code
  184. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  185.  
  186. !TEMP = $09
  187.  
  188. !SLOTPTR = $0660                ;16bit pointer for source GFX
  189. !SLOTBANK = $0662       ;bank
  190. !SLOTDEST = $0663       ;VRAM address
  191. !SLOTSUSED = $06FE      ;how many slots have been used
  192.  
  193. !MAXSLOTS = $04         ;maximum selected slots
  194.  
  195. SLOTS:
  196. db $CC,$C8,$C4,$C0      ;avaliable slots.  Any more transfers and it's overflowing by a dangerous amount.
  197.  
  198. GETSLOT:
  199.        PHY             ;preserve OAM index
  200.        PHA             ;preserve frame
  201.        LDA !SLOTSUSED  ;test if slotsused == maximum allowed
  202.        CMP #!MAXSLOTS
  203.        BEQ NoneFree
  204.  
  205.        PLA             ;pop frame
  206.        REP #$20        ;16bit A
  207.        AND.w #$00FF    ;wipe high
  208.        XBA             ;<< 8
  209.        LSR A           ;>> 1 = << 7
  210.        STA !TEMP       ;back to scratch
  211.        ;PEA SPRITEGFX  ;push 16bit address, since i'm not sure how else i'm going to get the address of the label itself in TRASM
  212.        ;PLA            ;pull 16bit address
  213.        LDA GFXPointer
  214.        CLC
  215.        ADC !TEMP       ;add frame offset      
  216.        STA !SLOTPTR    ;store to pointer to be used at transfer time
  217.        SEP #$20        ;8bit store
  218.        PHB             ;push db...
  219.        PLA             ;pull to A...
  220.        STA !SLOTBANK   ;store bank to 24bit pointer
  221.  
  222.        LDY !SLOTSUSED  ;calculate VRAM address + tile number
  223.        LDA SLOTS,y     ;get tile# in VRAM
  224.        PHA             ;preserve for eventual pull
  225.        SEC
  226.        SBC #$C0        ;starts at C0h, they start at C0 in tilemap
  227.        REP #$20        ;16bit math
  228.        AND.w #$00FF    ;wipe high byte
  229.        ASL A           ;multiply by 32, since 32 bytes/16 words equates to 1 32bytes tile
  230.        ASL A
  231.        ASL A
  232.        ASL A
  233.        ASL A
  234.        CLC
  235.        ADC #$0B44      ;add 0B44, base address of buffer      
  236.        STA !SLOTDEST   ;destination address in the buffer
  237.  
  238.        JSR DMABUFFER   ;ROM -> RAM copy
  239.  
  240.        SEP #$20        ;8bit A
  241.        INC !SLOTSUSED  ;one extra slot has been used
  242.  
  243.        PLA             ;return starting tile number
  244.        PLY
  245.        RTS
  246.              
  247. NoneFree:
  248.        PLA
  249.        PLY
  250.        LDA #$00        ;zero on no free slots
  251.        RTS
  252.  
  253. ;;;;;;;;;;;;;;;;
  254. ;Tansfer routine
  255. ;;;;;;;;;;;;;;;;
  256.  
  257. ;DMA ROM -> RAM ROUTINE
  258.  
  259. DMABUFFER:
  260. ;set destination RAM address
  261.        REP #$20
  262.        LDA !SLOTDEST
  263.        STA $2181       ;16bit RAM dest
  264.        LDY #$7F
  265.        STY $2183       ;set 7F as bank
  266.  
  267. ;common DMA settings
  268.        STZ $4300       ;1 reg only
  269.        LDY #$80        ;to 2180, RAM write/read
  270.        STY $4301
  271.  
  272. ;first line
  273.        LDA !SLOTPTR
  274.        STA $4302       ;low 16bits
  275.        LDY !SLOTBANK
  276.        STY $4304       ;bank
  277.        LDY #$80        ;128 bytes
  278.        STY $4305
  279.        LDY #$01
  280.        STY $420B       ;transfer
  281.  
  282. ;second line
  283.        LDA !SLOTDEST   ;update buffer dest
  284.        CLC
  285.        ADC #$0200      ;512 byte rule for sprites
  286.        STA !SLOTDEST   ;updated base
  287.        STA $2181       ;updated RAM address
  288.  
  289.        LDA !SLOTPTR    ;update source address
  290.        CLC
  291.        ADC #$0200      ;512 bytes, next row
  292.        STA !SLOTPTR
  293.        STA $4302       ;low 16bits
  294.        LDY !SLOTBANK
  295.        STY $4304       ;bank
  296.        LDY #$80
  297.        STY $4305
  298.        LDY #$01
  299.        STY $420B       ;transfer
  300.  
  301. ;third line
  302.        LDA !SLOTDEST   ;update buffer dest
  303.        CLC
  304.        ADC #$0200      ;512 byte rule for sprites
  305.        STA !SLOTDEST   ;updated base
  306.        STA $2181       ;updated RAM address
  307.  
  308.        LDA !SLOTPTR    ;update
  309.        CLC
  310.        ADC #$0200
  311.        STA !SLOTPTR
  312.        STA $4302
  313.        LDY !SLOTBANK
  314.        STY $4304
  315.        LDY #$80
  316.        STY $4305
  317.        LDY #$01
  318.        STY $420B       ;transfer
  319.  
  320. ;fourth line
  321.        LDA !SLOTDEST   ;update buffer dest
  322.        CLC
  323.        ADC #$0200      ;512 byte rule for sprites
  324.        STA !SLOTDEST   ;updated base
  325.        STA $2181       ;updated RAM address
  326.  
  327.        LDA !SLOTPTR
  328.        CLC
  329.        ADC #$0200
  330.        STA !SLOTPTR
  331.        STA $4302
  332.        LDY !SLOTBANK
  333.        STY $4304
  334.        LDY #$80
  335.        STY $4305
  336.        LDY #$01
  337.        STY $420B
  338.  
  339.        SEP #$20        ;8bit A
  340.        RTS             ;all done, return
  341.  
  342.  
  343. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  344. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  345. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  346. ; ROUTINES FROM THE LIBRARY ARE PASTED BELOW
  347. ; You should never have to modify this code
  348. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  349. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  350. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  351.  
  352.  
  353.  
  354. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  355. ; GET_DRAW_INFO
  356. ; This is a helper for the graphics routine.  It sets off screen flags, and sets up
  357. ; variables.  It will return with the following:
  358. ;
  359. ;       Y = index to sprite OAM ($300)
  360. ;       $00 = sprite x position relative to screen boarder
  361. ;       $01 = sprite y position relative to screen boarder  
  362. ;
  363. ; It is adapted from the subroutine at $03B760
  364. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  365.  
  366. SPR_T1:              db $0C,$1C
  367. SPR_T2:              db $01,$02
  368.  
  369. GET_DRAW_INFO:       STZ $186C,x             ; reset sprite offscreen flag, vertical
  370.                    STZ $15A0,x             ; reset sprite offscreen flag, horizontal
  371.                    LDA $E4,x               ; \
  372.                    CMP $1A                 ;  | set horizontal offscreen if necessary
  373.                    LDA $14E0,x             ;  |
  374.                    SBC $1B                 ;  |
  375.                    BEQ ON_SCREEN_X         ;  |
  376.                    INC $15A0,x             ; /
  377.  
  378. ON_SCREEN_X:         LDA $14E0,x             ; \
  379.                    XBA                     ;  |
  380.                    LDA $E4,x               ;  |
  381.                    REP #$20                ;  |
  382.                    SEC                     ;  |
  383.                    SBC $1A                 ;  | mark sprite invalid if far enough off screen
  384.                    CLC                     ;  |
  385.                    ADC.w #$0040            ;  |
  386.                    CMP.w #$0180            ;  |
  387.                    SEP #$20                ;  |
  388.                    ROL A                   ;  |
  389.                    AND #$01                ;  |
  390.                    STA $15C4,x             ; /
  391.                    BNE INVALID             ;
  392.                  
  393.                    LDY #$00                ; \ set up loop:
  394.                    LDA $1662,x             ;  |
  395.                    AND #$20                ;  | if not smushed (1662 & 0x20), go through loop twice
  396.                    BEQ ON_SCREEN_LOOP      ;  | else, go through loop once
  397.                    INY                     ; /
  398. ON_SCREEN_LOOP:      LDA $D8,x               ; \
  399.                    CLC                     ;  | set vertical offscreen if necessary
  400.                    ADC SPR_T1,y            ;  |
  401.                    PHP                     ;  |
  402.                    CMP $1C                 ;  | (vert screen boundry)
  403.                    ROL $00                 ;  |
  404.                    PLP                     ;  |
  405.                    LDA $14D4,x             ;  |
  406.                    ADC #$00                ;  |
  407.                    LSR $00                 ;  |
  408.                    SBC $1D                 ;  |
  409.                    BEQ ON_SCREEN_Y         ;  |
  410.                    LDA $186C,x             ;  | (vert offscreen)
  411.                    ORA SPR_T2,y            ;  |
  412.                    STA $186C,x             ;  |
  413. ON_SCREEN_Y:         DEY                     ;  |
  414.                    BPL ON_SCREEN_LOOP      ; /
  415.  
  416.                    LDY $15EA,x             ; get offset to sprite OAM
  417.                    LDA $E4,x               ; \
  418.                    SEC                     ;  |
  419.                    SBC $1A                 ;  | $00 = sprite x position relative to screen boarder
  420.                    STA $00                 ; /
  421.                    LDA $D8,x               ; \
  422.                    SEC                     ;  |
  423.                    SBC $1C                 ;  | $01 = sprite y position relative to screen boarder
  424.                    STA $01                 ; /
  425.                    RTS                     ; return
  426.  
  427. INVALID:             PLA                     ; \ return from *main gfx routine* subroutine...
  428.                    PLA                     ;  |    ...(not just this subroutine)
  429.                    RTS                     ; /
  430.  
  431.  
  432. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  433. ; SUB_OFF_SCREEN
  434. ; This subroutine deals with sprites that have moved off screen
  435. ; It is adapted from the subroutine at $01AC0D
  436. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  437.                  
  438. SPR_T12:             db $40,$B0
  439. SPR_T13:             db $01,$FF
  440. SPR_T14:             db $30,$C0,$A0,$C0,$A0,$F0,$60,$90         ;bank 1 sizes
  441.                            db $30,$C0,$A0,$80,$A0,$40,$60,$B0          ;bank 3 sizes
  442. SPR_T15:             db $01,$FF,$01,$FF,$01,$FF,$01,$FF         ;bank 1 sizes
  443.                                        db $01,$FF,$01,$FF,$01,$00,$01,$FF              ;bank 3 sizes
  444.  
  445. SUB_OFF_SCREEN_X1:   LDA #$02                ; \ entry point of routine determines value of $03
  446.                    BRA STORE_03            ;  | (table entry to use on horizontal levels)
  447. SUB_OFF_SCREEN_X2:   LDA #$04                ;  |
  448.                    BRA STORE_03            ;  |
  449. SUB_OFF_SCREEN_X3:   LDA #$06                ;  |
  450.                    BRA STORE_03            ;  |
  451. SUB_OFF_SCREEN_X4:   LDA #$08                ;  |
  452.                    BRA STORE_03            ;  |
  453. SUB_OFF_SCREEN_X5:   LDA #$0A                ;  |
  454.                    BRA STORE_03            ;  |
  455. SUB_OFF_SCREEN_X6:  LDA #$0C                ;  |
  456.                    BRA STORE_03            ;  |
  457. SUB_OFF_SCREEN_X7:   LDA #$0E                ;  |
  458. STORE_03:                       STA $03                                 ;  |            
  459.                                        BRA START_SUB                   ;  |
  460. SUB_OFF_SCREEN_X0:   STZ $03                                    ; /
  461.  
  462. START_SUB:           JSR SUB_IS_OFF_SCREEN   ; \ if sprite is not off screen, return
  463.                    BEQ RETURN_35           ; /
  464.                    LDA $5B                 ; \ goto VERTICAL_LEVEL if vertical level
  465.                    AND #$01                ; |
  466.                    BNE VERTICAL_LEVEL      ; /    
  467.                    LDA $D8,x               ; \
  468.                    CLC                     ; |
  469.                    ADC #$50                ; | if the sprite has gone off the bottom of the level...
  470.                    LDA $14D4,x             ; | (if adding 0x50 to the sprite y position would make the high byte >= 2)
  471.                    ADC #$00                ; |
  472.                    CMP #$02                ; |
  473.                    BPL ERASE_SPRITE        ; /    ...erase the sprite
  474.                    LDA $167A,x             ; \ if "process offscreen" flag is set, return
  475.                    AND #$04                ; |
  476.                    BNE RETURN_35           ; /
  477.                    LDA $13                 ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZcHC:0756 VC:176 00 FL:205
  478.                    AND #$01                ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0780 VC:176 00 FL:205
  479.                    ORA $03                 ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0796 VC:176 00 FL:205
  480.                    STA $01                 ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0820 VC:176 00 FL:205
  481.                    TAY                     ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0844 VC:176 00 FL:205
  482.                    LDA $1A                 ;A:8A01 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizcHC:0858 VC:176 00 FL:205
  483.                    CLC                     ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZcHC:0882 VC:176 00 FL:205
  484.                    ADC SPR_T14,y           ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZcHC:0896 VC:176 00 FL:205
  485.                    ROL $00                 ;A:8AC0 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:eNvMXdizcHC:0928 VC:176 00 FL:205
  486.                    CMP $E4,x               ;A:8AC0 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:eNvMXdizCHC:0966 VC:176 00 FL:205
  487.                    PHP                     ;A:8AC0 X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:0996 VC:176 00 FL:205
  488.                    LDA $1B                 ;A:8AC0 X:0009 Y:0001 D:0000 DB:01 S:01F0 P:envMXdizCHC:1018 VC:176 00 FL:205
  489.                    LSR $00                 ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F0 P:envMXdiZCHC:1042 VC:176 00 FL:205
  490.                    ADC SPR_T15,y           ;A:8A00 X:0009 Y:0001 D:0000 DB:01 S:01F0 P:envMXdizcHC:1080 VC:176 00 FL:205
  491.                    PLP                     ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F0 P:eNvMXdizcHC:1112 VC:176 00 FL:205
  492.                    SBC $14E0,x             ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:1140 VC:176 00 FL:205
  493.                    STA $00                 ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:eNvMXdizCHC:1172 VC:176 00 FL:205
  494.                    LSR $01                 ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:eNvMXdizCHC:1196 VC:176 00 FL:205
  495.                    BCC SPR_L31             ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZCHC:1234 VC:176 00 FL:205
  496.                    EOR #$80                ;A:8AFF X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdiZCHC:1250 VC:176 00 FL:205
  497.                    STA $00                 ;A:8A7F X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:1266 VC:176 00 FL:205
  498. SPR_L31:             LDA $00                 ;A:8A7F X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:1290 VC:176 00 FL:205
  499.                    BPL RETURN_35           ;A:8A7F X:0009 Y:0001 D:0000 DB:01 S:01F1 P:envMXdizCHC:1314 VC:176 00 FL:205
  500. ERASE_SPRITE:        LDA $14C8,x             ; \ if sprite status < 8, permanently erase sprite
  501.                    CMP #$08                ; |
  502.                    BCC KILL_SPRITE         ; /    
  503.                    LDY $161A,x             ;A:FF08 X:0007 Y:0001 D:0000 DB:01 S:01F3 P:envMXdiZCHC:1108 VC:059 00 FL:2878
  504.                    CPY #$FF                ;A:FF08 X:0007 Y:0000 D:0000 DB:01 S:01F3 P:envMXdiZCHC:1140 VC:059 00 FL:2878
  505.                    BEQ KILL_SPRITE         ;A:FF08 X:0007 Y:0000 D:0000 DB:01 S:01F3 P:envMXdizcHC:1156 VC:059 00 FL:2878
  506.                    LDA #$00                ;A:FF08 X:0007 Y:0000 D:0000 DB:01 S:01F3 P:envMXdizcHC:1172 VC:059 00 FL:2878
  507.                    STA $1938,y             ;A:FF00 X:0007 Y:0000 D:0000 DB:01 S:01F3 P:envMXdiZcHC:1188 VC:059 00 FL:2878
  508. KILL_SPRITE:         STZ $14C8,x             ; erase sprite
  509. RETURN_35:           RTS                     ; return
  510.  
  511. VERTICAL_LEVEL:      LDA $167A,x             ; \ if "process offscreen" flag is set, return
  512.                    AND #$04                ; |
  513.                    BNE RETURN_35           ; /
  514.                    LDA $13                 ; \
  515.                    LSR A                   ; |
  516.                    BCS RETURN_35           ; /
  517.                    LDA $E4,x               ; \
  518.                    CMP #$00                ;  | if the sprite has gone off the side of the level...
  519.                    LDA $14E0,x             ;  |
  520.                    SBC #$00                ;  |
  521.                    CMP #$02                ;  |
  522.                    BCS ERASE_SPRITE        ; /  ...erase the sprite
  523.                    LDA $13                 ;A:0000 X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:1218 VC:250 00 FL:5379
  524.                    LSR A                   ;A:0016 X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:envMXdizcHC:1242 VC:250 00 FL:5379
  525.                    AND #$01                ;A:000B X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:envMXdizcHC:1256 VC:250 00 FL:5379
  526.                    STA $01                 ;A:0001 X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:envMXdizcHC:1272 VC:250 00 FL:5379
  527.                    TAY                     ;A:0001 X:0009 Y:00E4 D:0000 DB:01 S:01F3 P:envMXdizcHC:1296 VC:250 00 FL:5379
  528.                    LDA $1C                 ;A:001A X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0052 VC:251 00 FL:5379
  529.                    CLC                     ;A:00BD X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0076 VC:251 00 FL:5379
  530.                    ADC SPR_T12,y           ;A:00BD X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0090 VC:251 00 FL:5379
  531.                    ROL $00                 ;A:006D X:0009 Y:0001 D:0000 DB:01 S:01F3 P:enVMXdizCHC:0122 VC:251 00 FL:5379
  532.                    CMP $D8,x               ;A:006D X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNVMXdizcHC:0160 VC:251 00 FL:5379
  533.                    PHP                     ;A:006D X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNVMXdizcHC:0190 VC:251 00 FL:5379
  534.                    LDA.w $001D             ;A:006D X:0009 Y:0001 D:0000 DB:01 S:01F2 P:eNVMXdizcHC:0212 VC:251 00 FL:5379
  535.                    LSR $00                 ;A:0000 X:0009 Y:0001 D:0000 DB:01 S:01F2 P:enVMXdiZcHC:0244 VC:251 00 FL:5379
  536.                    ADC SPR_T13,y           ;A:0000 X:0009 Y:0001 D:0000 DB:01 S:01F2 P:enVMXdizCHC:0282 VC:251 00 FL:5379
  537.                    PLP                     ;A:0000 X:0009 Y:0001 D:0000 DB:01 S:01F2 P:envMXdiZCHC:0314 VC:251 00 FL:5379
  538.                    SBC $14D4,x             ;A:0000 X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNVMXdizcHC:0342 VC:251 00 FL:5379
  539.                    STA $00                 ;A:00FF X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0374 VC:251 00 FL:5379
  540.                    LDY $01                 ;A:00FF X:0009 Y:0001 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0398 VC:251 00 FL:5379
  541.                    BEQ SPR_L38             ;A:00FF X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0422 VC:251 00 FL:5379
  542.                    EOR #$80                ;A:00FF X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0438 VC:251 00 FL:5379
  543.                    STA $00                 ;A:007F X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0454 VC:251 00 FL:5379
  544. SPR_L38:            
  545.                                        LDA $00                 ;A:007F X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0478 VC:251 00 FL:5379
  546.                    BPL RETURN_35           ;A:007F X:0009 Y:0001 D:0000 DB:01 S:01F3 P:envMXdizcHC:0502 VC:251 00 FL:5379
  547.                    BMI ERASE_SPRITE        ;A:8AFF X:0002 Y:0000 D:0000 DB:01 S:01F3 P:eNvMXdizcHC:0704 VC:184 00 FL:5490
  548.  
  549. SUB_IS_OFF_SCREEN:   LDA $15A0,x             ; \ if sprite is on screen, accumulator = 0
  550.                    ORA $186C,x             ; |  
  551.                    RTS                     ; / return
  552.  
  553. SUB_HORZ_POS:        LDY #$00                ;A:25D0 X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizCHC:1020 VC:097 00 FL:31642
  554.                    LDA $94                 ;A:25D0 X:0006 Y:0000 D:0000 DB:03 S:01ED P:envMXdiZCHC:1036 VC:097 00 FL:31642
  555.                    SEC                     ;A:25F0 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizCHC:1060 VC:097 00 FL:31642
  556.                    SBC $E4,x               ;A:25F0 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizCHC:1074 VC:097 00 FL:31642
  557.                    STA $0F                 ;A:25F4 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1104 VC:097 00 FL:31642
  558.                    LDA $95                 ;A:25F4 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1128 VC:097 00 FL:31642
  559.                    SBC $14E0,x             ;A:2500 X:0006 Y:0000 D:0000 DB:03 S:01ED P:envMXdiZcHC:1152 VC:097 00 FL:31642
  560.                    BPL LABEL16             ;A:25FF X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1184 VC:097 00 FL:31642
  561.                    INY                     ;A:25FF X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1200 VC:097 00 FL:31642
  562. LABEL16:             RTS    
  563. GFXPointer:
  564. dw SPRITEGFX
  565. SPRITEGFX:
  566. INCBIN sprites\koopy.bin              ;included graphics file
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement