Advertisement
Erik557

Untitled

Jun 10th, 2016
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;; Foliage the Para-Plant
  3. ;; For Morton's Empire
  4. ;;;;;;;;;;;;;;;;;;;;;;;;;
  5.  
  6. !RAM_SprClipXDisp = $7FABAA     ; 12 bytes of free RAM used for the X displacement of a custom sprite clipping field
  7. !RAM_SprClipYDisp = $7FABB6     ; 12 bytes of free RAM used for the Y displacement of a custom sprite clipping field
  8. !RAM_SprClipWidth = $7FABC2     ; 12 bytes of free RAM used for the width of a custom sprite clipping field
  9. !RAM_SprClipHeight = $7FABCE        ; 12 bytes of free RAM used for the height of a custom sprite clipping field
  10.  
  11. ;;; INIT Routine wrapper
  12. print "INIT ",pc
  13.     LDA #$6F            ;\ Set timer
  14.     STA $1540,x         ; |
  15.     LDA #$DF            ; |
  16.     STA $15AC,x         ;/
  17.     LDA #$0F
  18.     STA $154C,x
  19.  
  20.     STZ $1528,x         ;/
  21.     STZ $18BB
  22.    
  23.     STZ $151C,x
  24.     LDA #$F0
  25.     STA !RAM_SprClipXDisp,x
  26.     LDA #$00
  27.     STA !RAM_SprClipYDisp,x
  28.    
  29.     LDA #32
  30.     STA !RAM_SprClipWidth,x
  31.     LDA #48
  32.     STA !RAM_SprClipHeight,x
  33.    
  34.     PHY
  35.     JSR SubHorzPos
  36.     TYA
  37.     STA $157C,x
  38.     PLY
  39. RTL
  40.  
  41. ;;; Main Routine wrapper
  42. print "MAIN ",pc
  43.     PHB
  44.     PHK
  45.     PLB
  46.     JSR MainRt
  47.     PLB
  48. RTL
  49.  
  50. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  51. ;;Main routine
  52. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  53.  
  54. MainRt:
  55.     JSR SubGFX
  56.    
  57.     LDA $14C8,x         ;\ Return if status ain't normal
  58.     CMP #$08            ; |
  59.     BNE Return          ;/
  60.     LDA $9D             ;\ If sprites locked, return
  61.     BNE Return          ;/
  62.  
  63.     LDA $1528,x
  64.     CMP #$04
  65.     BCS +++
  66.    
  67.     JSL $01A7DC
  68.     BCC +++
  69.  
  70.     LDA $7D
  71.     BMI +
  72.  
  73.     LDA $140D
  74.     ORA $187A
  75.     BEQ +
  76.     BRA ++
  77.    
  78. +
  79.     JSL $00F5B7
  80.     BRA +++
  81. ++
  82.     LDA #$02
  83.     STA $1DF9
  84.    
  85.     JSL $01AA33
  86.     JSL $01AB99
  87.  
  88. +++
  89.     LDA $C2,x           ;\ Set pointers
  90.     JSL $0086DF         ;/
  91.    
  92. ;pointers:
  93.     dw FaceMario        ; State 0: Mario faces the plant in a fght pose
  94.     dw SetX             ; State 1: Set up X positions
  95.     dw Fireballs        ; State 2: Rising (fireballs and go up??)
  96.     dw Bombs            ; State 3: Rising (bombs and go up??)
  97.     dw Hit              ; State 4: Get hit
  98.     dw Ded              ; State 5: Dead
  99.     dw lol
  100.     dw FireAtkSet
  101.     dw FireAtk
  102.     RTS
  103.  
  104. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  105. ;;State 0: Facing Mario
  106. FaceMario:
  107. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  108.  
  109.     LDY #$00
  110.  
  111.     LDA $15AC,x         ;\ Continue if facing time is over
  112.     BEQ .go             ;/
  113.    
  114.     STZ $76             ;\
  115.     STZ $7B             ; | Lock player
  116.     STZ $7D             ;/
  117.  
  118.     LDA #$B5            ;\ Set the player pose
  119.     STA $13E0           ;/
  120.  
  121.     LDA $154C,x
  122.     BEQ +
  123.     RTS
  124. +      
  125.     LDA #$04
  126.     STA $1DF9
  127.    
  128.     LDA $1540,x         ;\ Set X Speed depending on time
  129.     BNE +               ; |
  130.     INY                 ;/
  131. +  
  132.     LDA Yspd,y
  133.     STA $AA,x
  134.     JSL $01802A
  135.     RTS
  136. .go
  137.  
  138.     LDA #$02
  139.     STA $15AC,x
  140.  
  141.     INC $C2,x
  142.    
  143. Return:
  144.     RTS
  145. Yspd:       db $FA,$EC
  146. AngryYSpd:  db $F0,$DC
  147. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  148. ;;State 1: Set up X Positions
  149. SetX:
  150. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  151.  
  152.     LDA $15AC,x
  153.     BNE .done
  154.  
  155.     LDA #$6F
  156.     STA $1540,x
  157.  
  158.     LDA $1528,x
  159.     CMP #$02
  160.     BCS +
  161.     LDA #$45
  162.     STA $154C,x
  163.     LDA #$D5
  164.     STA $15AC,x
  165.     BRA ++
  166.  
  167. +   LDA #$2F
  168.     STA $154C,x
  169.     LDA #$95
  170.     STA $15AC,x
  171.    
  172.     LDA $1528,x
  173.     CMP #$02
  174.     BCS .newloop
  175. ++  LDA #$05
  176.     JSR Random
  177.     TAY
  178.     LDA attack,y
  179.     STA $C2,x
  180.     RTS
  181. .newloop
  182.     LDA #$05
  183.     JSR Random
  184.     TAY
  185.     LDA angryatk,y
  186.     STA $C2,x
  187.     RTS
  188. .done
  189.     LDA #$02
  190.     JSR Random
  191.     TAY
  192.     LDA XPos,y          ;\
  193.     STA $E4,x           ; | Set sprite position
  194.     LDA #$01            ; |
  195.     STA $14D4,x         ; |
  196.     LDA #$80            ; |
  197.     STA $D8,x           ;/
  198.     LDA #$04
  199.     STA $1DF9
  200.     RTS
  201.    
  202. XPos:       db $40,$80,$C0
  203. attack:     db $02,$03,$03,$03,$02,$02
  204. angryatk:   db $02,$02,$03,$03,$07,$07
  205.    
  206. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  207. ;;State 2: Rise
  208. Fireballs:
  209. Bombs:
  210. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  211.     LDA $15AC,x
  212.     BEQ .Return
  213.  
  214.     LDY #$00
  215.    
  216. +
  217.     LDA $1540,x
  218.     BNE +  
  219.     INY
  220. +
  221.     LDA $1528,x
  222.     CMP #$02
  223.     BCS +
  224.     LDA Yspd,y          ;\ Rise
  225.     STA $AA,x           ;/
  226.     JSL $01802A
  227.     BRA ++
  228. +   LDA AngryYSpd,y
  229.     STA $AA,x
  230.     JSL $01802A
  231.  
  232. ;attacks
  233. ++  LDA $1564,x
  234.     BNE +
  235.     JSR BobOmb
  236. +
  237.     LDA $C2,x
  238.     CMP #$02
  239.     BEQ .Fire
  240.  
  241.     LDA $154C,x
  242.     BNE +
  243.    
  244.    
  245.     LDY $18BB
  246.     LDA .Spr,y
  247.     JSR Spawn
  248. +   RTS
  249.  
  250. .Spr    db $14,$40
  251. .Return
  252.     LDA #$02
  253.     STA $15AC,x
  254.     LDA #$04
  255.     STA $1DF9
  256.     LDA #$01
  257.     STA $C2,x
  258.  
  259. .Fire
  260.    
  261.     LDA $154C,x
  262.     BNE +
  263.  
  264.     LDA #$10
  265.     JSR SpitFire
  266.     LDA #$F0
  267.     JSR SpitFire
  268. +   RTS
  269.  
  270. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  271. ;; State 5: Fire Attack
  272. FireAtkSet:
  273. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  274.     LDA #$02
  275.     JSR Random
  276.     TAY
  277.     LDA XPos,y          ;\
  278.     STA $E4,x           ; | Set sprite position
  279.     LDA #$D0
  280.     STA $D8,x
  281.     STZ $14D4,x
  282.     INC $C2,x
  283.     RTS
  284.    
  285. FireAtk:
  286.     JSR DownGraphics
  287.    
  288.     LDA $15AC,x
  289.     BEQ .Return
  290.  
  291.     LDY #$00
  292.    
  293.     LDA $1540,x
  294.     BNE +  
  295.     INY
  296. +
  297.     LDA DownYspd,y          ;\ Rise
  298.     STA $AA,x           ;/
  299.     JSL $01802A
  300.    
  301.     LDA $1564,x
  302.     BNE +
  303.     JSR BobOmb
  304. +
  305.     LDA $154C,x
  306.     BNE +
  307.     JSR FireSpawn
  308. +   RTS
  309.    
  310. .Return
  311.     LDA #$02
  312.     STA $15AC,x
  313.     LDA #$04
  314.     STA $1DF9
  315.     LDA #$01
  316.     STA $C2,x
  317.     RTS
  318. DownYspd:   db $10,$24
  319. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  320. ;; State 3: Get hit
  321. Hit:
  322. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  323.     JSR FlashGFX
  324.  
  325.     LDA $154C,x
  326.     BEQ .Done
  327.  
  328.     LDY #$00
  329.     LDA $1540,x
  330.     CMP #$2F
  331.     BCC +
  332.     INY
  333. +  
  334.     LDA speedb,y            ;\ Set faster Y speed
  335.     STA $AA,x               ;/
  336.     JSL $01802A
  337.     RTS
  338.  
  339. .Done
  340.     LDA #$02
  341.     STA $15AC,x
  342.    
  343.     LDA #$01
  344.     STA $C2,x
  345.  
  346.     RTS
  347.  
  348. speedb: db $E9,$00
  349.  
  350.    
  351. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  352. ;; State 4: Die
  353. Ded:
  354. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  355.  
  356.     LDA #$F0
  357.     STA $AA,x
  358.     JSL $01802A
  359.  
  360.     JSR KillSprites
  361.    
  362.     LDA #$35
  363.     STA $15AC,x
  364.    
  365.     LDA $D8,x
  366.     CMP #$21
  367.     BCS +
  368.     INC $C2,x
  369. +   RTS
  370.  
  371. lol:   
  372.     JSR DownGraphics
  373.    
  374.     STZ $AA,x
  375.     JSL $01802A
  376.    
  377.     LDA $15AC,x
  378.     BEQ +
  379.    
  380.     LDA #$30
  381.     STA $154C,x
  382.     RTS
  383. +
  384.     JSR DownGraphics
  385.    
  386.     LDA $154C,x
  387.     BEQ +
  388.    
  389.     LDA #$23
  390.     STA $1DF9
  391.     RTS
  392.  
  393. +   LDA #$45
  394.     STA $AA,x
  395.     JSL $01802A
  396.    
  397.     JSR DownGraphics
  398.    
  399.     LDA #$80
  400.     STA $1DFB
  401.     LDA #$FF
  402.     STA $1493 ; activate "end level" flag
  403.     LDA #$00
  404.     STA $141C ; normal path
  405.     LDA #$0B
  406.     STA $71
  407.     RTS
  408.    
  409. ;==================================================================
  410. ; Spit Fireball Subroutine
  411. ;==================================================================
  412. SpitFire:
  413.     XBA
  414.    
  415.     LDA $1564,x
  416.     BNE +
  417.     JSR BobOmb
  418. +  
  419.    
  420.     LDA $1528,x
  421.     CMP #$02
  422.     BCC +
  423.     LDA #$35
  424.     STA $154C,x
  425.     BRA ++
  426. +   LDA #$50                ;\ Set a timer
  427.     STA $154C,x             ;/
  428. ++
  429.     LDA #$06
  430.     STA $1DFC
  431.        
  432.     LDY #$07                ; 8 extended sprite indexes to loop through
  433. -   LDA $170B,y             ; check this slot
  434.     BEQ +                   ; if the slot is free, we can use it for a fireball
  435.     DEY                     ; if not, decrement the index
  436.     BPL -                   ; and try again
  437.     RTS
  438. +  
  439.     LDA $1528,x
  440.     CMP #$02
  441.     BCC +
  442.    
  443.     LDA #$04                ; extended sprite number = 0B
  444.     STA $170B,y             ; piranha fireball
  445.     BRA ++
  446. +   LDA #$0B                ; extended sprite number = 0B
  447.     STA $170B,y             ; piranha fireball
  448.    
  449. ++  LDA $E4,x               ; sprite X position
  450.     SEC
  451.     SBC #8
  452.     STA $171F,y
  453.     LDA $14E0,x
  454.     STA $1733,y
  455.  
  456.     LDA $D8,x
  457.     STA $1715,y             ; same Y position as the plant
  458.     LDA $14D4,x
  459.     STA $1729,y
  460.  
  461.     LDA #$D0                ; extended sprite Y speed = D0
  462.     STA $173D,y
  463.     XBA
  464.     STA $1747,y
  465.     RTS
  466.    
  467. ;============;
  468. ;RNG by 1024
  469. ;============;
  470.  
  471. Random:
  472.     PHX
  473.     PHP
  474.     SEP #$30
  475.     PHA
  476.     JSL $01ACF9
  477.     PLX
  478.     CPX #$FF
  479.     BNE NORMALRT
  480.     LDA $148D
  481.     BRA ENDRANDOM
  482. NORMALRT:
  483.     INX
  484.     LDA $148D
  485.     STA $4202
  486.     STX $4203
  487.     NOP #4
  488.     LDA $4217  
  489. ENDRANDOM:
  490.     PLP
  491.     PLX
  492.     RTS
  493.    
  494. ;============================
  495. FireSpawn:
  496. ;============================
  497. PHA : PHX : PHY
  498.     LDA $1564,x
  499.     BNE +
  500.     JSR BobOmb
  501. +
  502. PLY : PLX  
  503.  
  504.     LDA #$C0
  505.     STA $154C,x
  506.    
  507.     LDA #$06
  508.     STA $1DFC
  509.     PLA
  510.    
  511.     LDA $186C,x
  512.     BNE EndSpawn
  513.     JSL $02A9DE
  514.     BMI EndSpawn
  515.     LDA #$01                ; Sprite state ($14C8,x).
  516.     STA $14C8,y
  517.     PHX
  518.     TYX
  519.     LDA #$6A                ; This the sprite number to spawn.
  520.     STA $7FAB9E,x
  521.     PLX
  522.     LDA $E4,x
  523.     SEC
  524.     SBC #8
  525.     STA $00E4,y
  526.     LDA $14E0,x
  527.     STA $14E0,y
  528.     LDA $D8,x
  529.     CLC
  530.     ADC #24
  531.     STA $00D8,y
  532.     LDA $14D4,x
  533.     INC
  534.     STA $14D4,y
  535.     PHX
  536.     TYX
  537.     JSL $07F7D2
  538.     JSL $0187A7
  539.     LDA #$08
  540.     STA $7FAB10,x
  541.     PLX
  542. EndSpawn:
  543.     RTS
  544.  
  545. ;============================
  546. KillSprites:
  547. ;============================
  548.  
  549.     LDY #$09                    ; setup loop
  550. -   LDA $14C8,y                 ;\ if sprite non-existent,
  551.     BEQ ++                      ;/ branch
  552.     LDA.w $9E,y                 ;
  553.     CMP #$A9                    ;\ if sprite is Reznor,
  554.     BEQ ++                      ;/ branch
  555.     CMP #$29                    ;\ if sprite is Koopa Kid,
  556.     BEQ ++                      ;/ branch
  557.     CMP #$A0                    ;\ if sprite is Bowser,
  558.     BEQ ++                      ;/ branch
  559.     CMP #$C5                    ;\ if sprite is Big Boo Boss,
  560.     BEQ ++                      ;/ branch
  561.     LDA $7FAB9E,x               ;\ if custom sprite is same number as this one (i.e. one of the dummies),
  562.     PHX                         ; |
  563.     TYX                         ; |
  564.     CMP $7FAB9E,x               ; |
  565.     BEQ +                       ;/ branch
  566.     LDA #$04                    ;\ set sprite status (killed by spinjump)
  567.     STA $14C8,y                 ;/
  568.     LDA #$1F                    ;\ set time to show smoke cloud
  569.     STA $1540,y                 ;/
  570. +   PLX
  571. ++  DEY                         ; decrease sprite index
  572.     BPL -                       ; if still sprites left to check, branch
  573.     RTS                         ; return
  574.    
  575. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  576. ;; Spawn Sprite
  577. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  578. SprXPos: db $10,$D0
  579. Spawn:
  580.     XBA
  581. PHA : PHX : PHY
  582.     LDA $1564,x
  583.     BNE +
  584.     JSR BobOmb
  585. +
  586. PLY : PLX  
  587.  
  588.     LDA #$C0
  589.     STA $154C,x
  590.     PLA
  591.  
  592.     ;Spawn a normal sprite.
  593.     ;Replace !SpriteNumber with the number of the sprite.
  594.     LDA $186C,x
  595.     BNE .EndSpawn
  596.     JSL $02A9DE
  597.     BMI .EndSpawn
  598.     LDA #$01
  599.     STA $14C8,y
  600.     XBA
  601.     STA $009E,y
  602.     LDA #$01
  603.     JSR Random
  604.     TAX
  605.     LDA SprXPos,x
  606.     STA $00E4,y
  607.     LDA $14E0,x
  608.     STA $14E0,y
  609.     LDA #$00
  610.     STA $00D8,y
  611.     LDA #$01
  612.     STA $14D4,y
  613.     PHX
  614.     TYX
  615.     JSL $07F7D2
  616.     PLX
  617.     LDA $18BB
  618.     BNE +
  619.     INC $18BB
  620. .EndSpawn
  621.     RTS
  622. +   DEC $18BB : RTS
  623.  
  624. ;==========================
  625.  
  626. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  627. ;; Be killed by bob-ombs
  628. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  629. BobOmb:
  630.         LDY #$09                ; \ Loop over sprites:
  631. --
  632.         LDA $1534,y             ; \ Bomb-omb is exploding!
  633.         BNE .HandleExplode      ; /
  634. -
  635.         DEY                     ; |
  636.         BPL --                  ; /
  637. .ReturnBob
  638.         RTS                     ; Return
  639.  
  640. .HandleExplode
  641.         LDA $00E4,Y             ; \
  642.         SEC                     ; | This is all mikey's code...
  643.         SBC #$1A                ; |
  644.         STA $00                 ; |
  645.         LDA $14E0,Y             ; | ...I don't know what it does...
  646.         SBC #$00                ; |
  647.         STA $08                 ; |
  648.         LDA #$44                ; | ...lols...
  649.         STA $02                 ; |
  650.         LDA $00D8,Y             ; |
  651.         STA $01                 ; | ...but it seems to detect item proximity...
  652.         LDA $14D4,Y             ; |
  653.         STA $09                 ; |
  654.         LDA #$10                ; | ...so I'm using it for the bob-omb check.
  655.         STA $03                 ; |
  656.         JSL $03B69F             ; |
  657.         JSL $03B72B             ; /
  658.         BCC -                   ; If not close to bomb, go back to main loop
  659.        
  660.         LDA $14C8,y             ; \
  661.         CMP #$08                ; | If the bob-omb is dead, don't count it (this is important!!)
  662.         BNE .ReturnBob          ; /
  663.        
  664.         LDA #$A0                ; \ Grant brief immunity to bombs
  665.         STA $1564,x     ; /
  666.         INC $1528,x     ; Increase hit counter
  667.        
  668.        
  669.         LDA $1528,x
  670.         CMP #$04
  671.         BCS +
  672.         LDA #$C0
  673.         EOR $D8,x
  674.         STA $154C,x
  675.         LDA #$28                ; \ Play hit sound
  676.         STA $1DFC               ; /
  677.         LDA #$04
  678.         STA $C2,x
  679.         BRA ++
  680. +      
  681.         LDA #$28
  682.         STA $1DFC
  683.  
  684.         LDA #$05
  685.         STA $C2,x
  686. ++      RTS    
  687. ;====================================================
  688. ;================Graphics Routine====================
  689. ;====================================================
  690.  
  691. ;Tables for Frames:
  692. ;###############  Tables for FPP1   #############
  693. PROPERTIES_FPP1: db $09,$09,$49,$49,$0B,$0B
  694. TILEMAP_FPP1: db $C0,$E0,$A0,$EE,$88,$8A
  695. XDISP_FPP1: db $F0,$00,$00,$F0,$F0,$00
  696. YDISP_FPP1: db $00,$00,$10,$10,$20,$20
  697.  
  698. ;###############  Tables for FPP2   #############
  699. PROPERTIES_FPP2: db $09,$09,$09,$09,$0B,$0B
  700. TILEMAP_FPP2: db $C4,$86,$A4,$A6,$8C,$8E
  701. XDISP_FPP2: db $F0,$00,$F0,$00,$F0,$00
  702. YDISP_FPP2: db $00,$00,$10,$10,$20,$20
  703.  
  704. SubGFX:
  705.  
  706. JSR Main_Start
  707.  
  708. RTS
  709.  
  710. ;########################################################################
  711.  
  712.  
  713. Main_Start:
  714. LDA $14
  715. LSR A
  716. LSR A
  717. LSR A
  718. AND #$01
  719. Main_Frame_1:
  720. CMP #$00
  721. BNE Main_Frame_2
  722. JSR FPP1_Start
  723. RTS
  724.  
  725. Main_Frame_2:
  726. CMP #$01
  727. BNE Main_End_Code
  728. JSR FPP2_Start
  729.  
  730. Main_End_Code:
  731. RTS
  732.  
  733. ;########################################################################
  734.  
  735.  
  736. FPP1_Start:
  737. JSR GetDrawInfo
  738.  
  739. PHX
  740. LDX #$05
  741. Loop_FPP1:
  742. LDA $00
  743. CLC
  744. ADC XDISP_FPP1,x
  745. STA $0300,y
  746.  
  747. LDA $01
  748. CLC
  749. ADC YDISP_FPP1,x
  750. STA $0301,y
  751.  
  752. LDA TILEMAP_FPP1,x
  753. STA $0302,y
  754.  
  755. LDA PROPERTIES_FPP1,x
  756. ORA $64
  757. STA $0303,y
  758. ++
  759. INY
  760. INY
  761. INY
  762. INY
  763.  
  764. DEX
  765. BPL Loop_FPP1
  766. PLX
  767.  
  768. LDY #$02
  769. LDA #$05
  770. JSL $01B7B3
  771. RTS
  772.  
  773.  
  774. ;########################################################################
  775.  
  776.  
  777.  
  778. FPP2_Start:
  779. JSR GetDrawInfo
  780.  
  781. PHX
  782. LDX #$05
  783. Loop_FPP2:
  784. LDA $00
  785. CLC
  786. ADC XDISP_FPP2,x
  787. STA $0300,y
  788.  
  789. LDA $01
  790. CLC
  791. ADC YDISP_FPP2,x
  792. STA $0301,y
  793.  
  794. LDA TILEMAP_FPP2,x
  795. STA $0302,y
  796.  
  797. LDA PROPERTIES_FPP2,x
  798. ORA $64
  799. STA $0303,y
  800.  
  801. INY
  802. INY
  803. INY
  804. INY
  805.  
  806. DEX
  807. BPL Loop_FPP2
  808. PLX
  809.  
  810. LDY #$02
  811. LDA #$05
  812. JSL $01B7B3
  813. RTS
  814.  
  815.  
  816. ;########################################################################
  817.  
  818. ;====================================================
  819. ;================Graphics Routine====================
  820. ;====================================================
  821.  
  822. ;Tables for Frames:
  823. ;###############  Tables for FPP1   #############
  824. PROPERTIES_Flash1: db $05,$05,$45,$45,$0B,$0B
  825. TILEMAP_Flash1: db $C0,$E0,$A0,$EE,$88,$8A
  826. XDISP_Flash1: db $F0,$00,$00,$F0,$F0,$00
  827. YDISP_Flash1: db $00,$00,$10,$10,$20,$20
  828.  
  829. ;###############  Tables for FPP2   #############
  830. PROPERTIES_Flash2: db $05,$05,$05,$05,$0B,$0B
  831. TILEMAP_Flash2: db $C4,$86,$A4,$A6,$8C,$8E
  832. XDISP_Flash2: db $F0,$00,$F0,$00,$F0,$00
  833. YDISP_Flash2: db $00,$00,$10,$10,$20,$20
  834.  
  835. FlashGFX:
  836.  
  837. JSR MainFlash_Start
  838.  
  839. RTS
  840.  
  841. ;########################################################################
  842.  
  843.  
  844. MainFlash_Start:
  845. LDA $14
  846. LSR A
  847. LSR A
  848. LSR A
  849. AND #$01
  850. MainFlash_Frame_1:
  851. CMP #$00
  852. BNE MainFlash_Frame_2
  853. JSR Flash1_Start
  854. RTS
  855.  
  856. MainFlash_Frame_2:
  857. CMP #$01
  858. BNE MainFlash_End_Code
  859. JSR Flash2_Start
  860.  
  861. MainFlash_End_Code:
  862. RTS
  863.  
  864. ;########################################################################
  865. FlashTable:
  866.     db $08,$08,$0C,$0C,$0C,$06,$06,$06
  867.  
  868. Flash1_Start:
  869. JSR GetDrawInfo
  870.  
  871. PHX
  872. LDX #$05
  873. Loop_Flash1:
  874. LDA $00
  875. CLC
  876. ADC XDISP_Flash1,x
  877. STA $0300,y
  878.  
  879. LDA $01
  880. CLC
  881. ADC YDISP_Flash1,x
  882. STA $0301,y
  883.  
  884. LDA TILEMAP_Flash1,x
  885. STA $0302,y
  886.  
  887. LDA PROPERTIES_Flash1,x
  888. ORA $64
  889. STA $0303,y
  890.  
  891. INY
  892. INY
  893. INY
  894. INY
  895.  
  896. DEX
  897. BPL Loop_Flash1
  898. PLX
  899.  
  900. LDY #$02
  901. LDA #$05
  902. JSL $01B7B3
  903. RTS
  904.  
  905.  
  906. ;########################################################################
  907.  
  908.  
  909.  
  910. Flash2_Start:
  911. JSR GetDrawInfo
  912.  
  913. PHX
  914. LDX #$05
  915. Loop_Flash2:
  916. LDA $00
  917. CLC
  918. ADC XDISP_Flash2,x
  919. STA $0300,y
  920.  
  921. LDA $01
  922. CLC
  923. ADC YDISP_Flash2,x
  924. STA $0301,y
  925.  
  926. LDA TILEMAP_Flash2,x
  927. STA $0302,y
  928.  
  929. LDA PROPERTIES_Flash2,x
  930. ORA $64
  931. STA $0303,y
  932.  
  933. INY
  934. INY
  935. INY
  936. INY
  937.  
  938. DEX
  939. BPL Loop_Flash2
  940. PLX
  941.  
  942. LDY #$02
  943. LDA #$05
  944. JSL $01B7B3
  945. RTS
  946.  
  947.  
  948. ;########################################################################
  949.  
  950. ;====================================================
  951. ;================Graphics Routine====================
  952. ;====================================================
  953.  
  954. ;Tables for Frames:
  955. ;###############  Tables for Frame1   #############
  956. PROPERTIES_Frame1: db $AB,$AB,$A9,$A9,$A9,$A9
  957. TILEMAP_Frame1: db $88,$8A,$A0,$EE,$C0,$E0
  958. XDISP_Frame1: db $F0,$00,$F0,$00,$F0,$00
  959. YDISP_Frame1: db $0,$0,$10,$10,$20,$20
  960.  
  961. ;###############  Tables for Frame2   #############
  962. PROPERTIES_Frame2: db $AB,$AB,$A9,$A9,$A9,$A9
  963. TILEMAP_Frame2: db $8C,$8E,$A4,$A6,$C4,$86
  964. XDISP_Frame2: db $F0,$00,$F0,$00,$F0,$00
  965. YDISP_Frame2: db $00,$00,$10,$10,$20,$20
  966.  
  967. DownGraphics:
  968.  
  969. JSR Down_Start
  970.  
  971. RTS
  972.  
  973. ;########################################################################
  974.  
  975.  
  976. Down_Start:
  977. LDA $14
  978. LSR A
  979. LSR A
  980. LSR A
  981. LSR A
  982. LSR A
  983. AND #$01
  984. Down_Frame_1:
  985. CMP #$00
  986. BNE Down_Frame_2
  987. JSR Frame1_Start
  988. BRA Down_End_Code
  989.  
  990. Down_Frame_2:
  991. CMP #$01
  992. BNE Down_Frame_3
  993. JSR Frame2_Start
  994. BRA Down_End_Code
  995.  
  996. Down_Frame_3:
  997. Down_End_Code:
  998.  
  999. ;Your Code for Down
  1000. ;Hallo
  1001.  
  1002. RTS
  1003.  
  1004. ;########################################################################
  1005.  
  1006.  
  1007.  
  1008. Frame1_Start:
  1009. JSR GetDrawInfo
  1010.  
  1011. PHX
  1012. LDX #$05
  1013. Loop_Frame1:
  1014. LDA $00
  1015. CLC
  1016. ADC XDISP_Frame1,x
  1017. STA $0300,y
  1018.  
  1019. LDA $01
  1020. CLC
  1021. ADC YDISP_Frame1,x
  1022. STA $0301,y
  1023.  
  1024. LDA TILEMAP_Frame1,x
  1025. STA $0302,y
  1026.  
  1027. LDA PROPERTIES_Frame1,x
  1028. ORA $64
  1029. STA $0303,y
  1030.  
  1031. INY
  1032. INY
  1033. INY
  1034. INY
  1035.  
  1036. DEX
  1037. BPL Loop_Frame1
  1038. PLX
  1039.  
  1040. LDY #$02
  1041. LDA #$05
  1042. JSL $01B7B3
  1043. RTS
  1044.  
  1045.  
  1046. ;########################################################################
  1047.  
  1048.  
  1049.  
  1050. Frame2_Start:
  1051. JSR GetDrawInfo
  1052.  
  1053. PHX
  1054. LDX #$05
  1055. Loop_Frame2:
  1056. LDA $00
  1057. CLC
  1058. ADC XDISP_Frame2,x
  1059. STA $0300,y
  1060.  
  1061. LDA $01
  1062. CLC
  1063. ADC YDISP_Frame2,x
  1064. STA $0301,y
  1065.  
  1066. LDA TILEMAP_Frame2,x
  1067. STA $0302,y
  1068.  
  1069. LDA PROPERTIES_Frame2,x
  1070. ORA $64
  1071. STA $0303,y
  1072.  
  1073. INY
  1074. INY
  1075. INY
  1076. INY
  1077.  
  1078. DEX
  1079. BPL Loop_Frame2
  1080. PLX
  1081.  
  1082. LDY #$02
  1083. LDA #$05
  1084. JSL $01B7B3
  1085. RTS
  1086.  
  1087.  
  1088. ;########################################################################
  1089.  
  1090. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1091. ;;Misc routines
  1092. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1093.  
  1094.  
  1095. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1096. ; $B760 - graphics routine helper - shared
  1097. ; sets off screen flags and sets index to OAM
  1098. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1099.  
  1100.         ;org $03B75C
  1101.  
  1102. TABLE1:              db $0C,$1C
  1103. TABLE2:              db $01,$02
  1104.  
  1105. GetDrawInfo:       STZ $186C,x             ; reset sprite offscreen flag, vertical
  1106.         STZ $15A0,x             ; reset sprite offscreen flag, horizontal
  1107.         LDA $E4,x               ; \
  1108.         CMP $1A                 ;  | set horizontal offscreen if necessary
  1109.         LDA $14E0,x             ;  |
  1110.         SBC $1B                 ;  |
  1111.         BEQ ON_SCREEN_X         ;  |
  1112.         INC $15A0,x             ; /
  1113.  
  1114. ON_SCREEN_X:         LDA $14E0,x             ; \
  1115.         XBA      ;  |
  1116.         LDA $E4,x               ;  |
  1117.         REP #$20                ;  |
  1118.         SEC      ;  |
  1119.         SBC $1A                 ;  | mark sprite INVALID if far enough off screen
  1120.         CLC      ;  |
  1121.         ADC.w #$0040            ;  |
  1122.         CMP.w #$0180            ;  |
  1123.         SEP #$20                ;  |
  1124.         ROL A                   ;  |
  1125.         AND #$01                ;  |
  1126.         STA $15C4,x             ; /
  1127.         BNE INVALID             ;
  1128.        
  1129.         LDY #$00                ; \ set up LOOP:
  1130.         LDA $1662,x             ;  |
  1131.         AND #$20                ;  | if not smushed (1662 & 0x20), go through LOOP twice
  1132.         BEQ ON_SCREEN_LOOP      ;  | else, go through LOOP once
  1133.         INY      ; /
  1134. ON_SCREEN_LOOP:      LDA $D8,x               ; \
  1135.         CLC      ;  | set vertical offscreen if necessary
  1136.         ADC TABLE1,y            ;  |
  1137.         PHP      ;  |
  1138.         CMP $1C                 ;  | (vert screen boundry)
  1139.         ROL $00                 ;  |
  1140.         PLP      ;  |
  1141.         LDA $14D4,x             ;  |
  1142.         ADC #$00                ;  |
  1143.         LSR $00                 ;  |
  1144.         SBC $1D                 ;  |
  1145.         BEQ ON_SCREEN_Y         ;  |
  1146.         LDA $186C,x             ;  | (vert offscreen)
  1147.         ORA TABLE2,y            ;  |
  1148.         STA $186C,x             ;  |
  1149. ON_SCREEN_Y:         DEY         ;  |
  1150.         BPL ON_SCREEN_LOOP      ; /
  1151.  
  1152.         LDY $15EA,x             ; get offset to sprite OAM
  1153.         LDA $E4,x               ; \
  1154.         SEC      ;  |
  1155.         SBC $1A                 ;  | $00 = sprite x position relative to screen boarder
  1156.         STA $00                 ; /
  1157.         LDA $D8,x               ; \
  1158.         SEC      ;  |
  1159.         SBC $1C                 ;  | $01 = sprite y position relative to screen boarder
  1160.         STA $01                 ; /
  1161.         RTS      ; RETURN
  1162.  
  1163. INVALID:             PLA         ; \ RETURN from *main gfx routine* subroutine...
  1164.         PLA      ;  |    ...(not just this subroutine)
  1165.         RTS      ; /
  1166.        
  1167. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1168. ; SUB HORZ POS
  1169. ;
  1170. ; $B817 - horizontal mario/sprite check - shared
  1171. ; Y = 1 if mario left of sprite??
  1172. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1173.  
  1174.  
  1175. SubHorzPos:        LDY #$00                ;A:25D0 X:0006 Y:0001 D:0000 DB:03 S:01ED P:eNvMXdizCHC:1020 VC:097 00 FL:31642
  1176.                     LDA $94                 ;A:25D0 X:0006 Y:0000 D:0000 DB:03 S:01ED P:envMXdiZCHC:1036 VC:097 00 FL:31642
  1177.                     SEC                     ;A:25F0 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizCHC:1060 VC:097 00 FL:31642
  1178.                     SBC $E4,x               ;A:25F0 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizCHC:1074 VC:097 00 FL:31642
  1179.                     STA $0F                 ;A:25F4 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1104 VC:097 00 FL:31642
  1180.                     LDA $95                 ;A:25F4 X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1128 VC:097 00 FL:31642
  1181.                     SBC $14E0,x             ;A:2500 X:0006 Y:0000 D:0000 DB:03 S:01ED P:envMXdiZcHC:1152 VC:097 00 FL:31642
  1182.                     BPL LABEL16             ;A:25FF X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1184 VC:097 00 FL:31642
  1183.                     INY                     ;A:25FF X:0006 Y:0000 D:0000 DB:03 S:01ED P:eNvMXdizcHC:1200 VC:097 00 FL:31642
  1184. LABEL16:             RTS                     ;A:25FF X:0006 Y:0001 D:0000 DB:03 S:01ED P:envMXdizcHC:1214 VC:097 00 FL:31642
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement