SHOW:
|
|
- or go back to the newest paste.
| 1 | ; =========================================================================== | |
| 2 | ; --------------------------------------------------------------------------- | |
| 3 | ; Scroll routine for Labyrinth Zone - optimised by MarkeyJester | |
| 4 | ; --------------------------------------------------------------------------- | |
| 5 | ||
| 6 | Deform_LZ: | |
| 7 | moveq #$07,d0 ; prepare multiplication 100 / 2 for BG scrolling | |
| 8 | move.w ($FFFFF73A).w,d4 ; load horizontal movement distance (Since last frame) | |
| 9 | ext.l d4 ; extend to long-word signed | |
| 10 | asl.l d0,d4 ; align as fixed point 16, but divide by 2 for BG | |
| 11 | move.w ($FFFFF73C).w,d5 ; load vertical movement distance (Since last frame) | |
| 12 | ext.l d5 ; extend to long-word signed | |
| 13 | asl.l d0,d5 ; align as fixed point 16, but divide by 2 for BG | |
| 14 | bsr.w ScrollBlock1 ; adjust BG scroll positions (and set draw code direction flags) | |
| 15 | move.w ($FFFFF70C).w,($FFFFF618).w ; set BG V-scroll position | |
| 16 | lea ($FFFFCC00).w,a1 ; load H-scroll buffer | |
| 17 | move.w ($FFFFF700).w,d0 ; load FG X position | |
| 18 | neg.w d0 ; reverse | |
| 19 | swap d0 ; send to upper word | |
| 20 | move.w ($FFFFF708).w,d0 ; load BG X position | |
| 21 | neg.w d0 ; reverse | |
| 22 | moveq #$00,d3 ; clear d3 | |
| 23 | move.b ($FFFFF7D8).w,d3 ; load wave-scroll timer | |
| 24 | addi.w #$0080,($FFFFF7D8).w ; increase wave-scroll timer | |
| 25 | move.w #$00E0,d2 ; prepare water-line count | |
| 26 | move.w ($FFFFF646).w,d1 ; load water line position | |
| 27 | sub.w ($FFFFF704).w,d1 ; minus FG Y position | |
| 28 | bmi.s DLZ_Water ; if the screen is already underwater, branch | |
| 29 | cmp.w d2,d1 ; is the water line below the screen? | |
| 30 | ble.s DLZ_NoWater ; if not, branch | |
| 31 | move.w d2,d1 ; set at maximum | |
| 32 | ||
| 33 | DLZ_NoWater: | |
| 34 | sub.w d1,d2 ; subtract from water-line count | |
| 35 | add.b d1,d3 ; advance scroll wave timer to correct amount | |
| 36 | subq.b #$01,d1 ; decrease above water count | |
| 37 | bcs.s DLZ_Water ; if finished, branch | |
| 38 | ||
| 39 | DLZ_Above: | |
| 40 | move.l d0,(a1)+ ; save scroll position to buffer | |
| 41 | dbf d1,DLZ_Above ; repeat for all above water lines | |
| 42 | ||
| 43 | DLZ_Water: | |
| 44 | subq.b #$01,d2 ; decrease below water count | |
| 45 | bcs.s DLZ_Finish ; if finished, branch | |
| 46 | move.w d0,d1 ; copy BG position back to d1 | |
| 47 | swap d0 ; move FG position back to lower word in d0 | |
| 48 | move.w d3,d4 ; copy sroll timer for BG use | |
| 49 | add.b ($FFFFF704+$01).w,d3 ; add FG Y position | |
| 50 | add.b ($FFFFF70C+$01).w,d4 ; add BG Y position | |
| 51 | add.w d3,d3 ; multiply by word size (2) | |
| 52 | add.w d4,d4 ; '' | |
| 53 | lea (DLZ_WaveBG).l,a3 ; load beginning of BG wave data | |
| 54 | adda.w d4,a3 ; advance to correct starting point | |
| 55 | move.b (a3),d4 ; get current position byte | |
| 56 | asr.b #$02,d4 ; get only the position bits | |
| 57 | ext.w d4 ; extend to word | |
| 58 | add.w d4,d1 ; adjust BG's current position | |
| 59 | lea DLZ_WaveFG(pc,d3.w),a2 ; load correct starting point of FG wave data | |
| 60 | move.b (a2),d4 ; get current position byte | |
| 61 | asr.b #$02,d4 ; get only the position bits | |
| 62 | ext.w d4 ; extend to word | |
| 63 | add.w d4,d0 ; adjust FG's current position | |
| 64 | ||
| 65 | DLZ_Below: | |
| 66 | add.w (a2)+,d0 ; alter FG horizontal position | |
| 67 | move.w d0,(a1)+ ; save to scroll buffer | |
| 68 | add.w (a3)+,d1 ; alter BG horizontal position | |
| 69 | move.w d1,(a1)+ ; save to scroll buffer | |
| 70 | dbf d2,DLZ_Below ; repeat for all below water lines | |
| 71 | ||
| 72 | DLZ_Finish: | |
| 73 | rts ; return | |
| 74 | ||
| 75 | ; --------------------------------------------------------------------------- | |
| 76 | ; Scroll data for the FG | |
| 77 | ; --------------------------------------------------------------------------- | |
| 78 | ||
| 79 | DLZ_WaveFG: | |
| 80 | rept $02 | |
| 81 | dc.w $0001,$0400,$0401,$0800,$0801,$0C00,$0C00,$0C00,$0FFF,$0800,$0BFF,$0400,$07FF,$0000,$0000,$0000 | |
| 82 | dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 | |
| 83 | dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 | |
| 84 | dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 | |
| 85 | dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 | |
| 86 | dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 | |
| 87 | dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 | |
| 88 | dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 | |
| 89 | dc.w $03FF,$FC00,$FFFF,$F800,$FBFF,$F400,$F400,$F400,$F401,$F800,$F801,$FC00,$FC01,$0000,$0000,$0000 | |
| 90 | dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 | |
| 91 | dc.w $0001,$0400,$0401,$0800,$0801,$0C00,$0C00,$0C00,$0FFF,$0800,$0BFF,$0400,$07FF,$0000,$0000,$0000 | |
| 92 | dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 | |
| 93 | dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 | |
| 94 | dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 | |
| 95 | dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 | |
| 96 | dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 | |
| 97 | endr | |
| 98 | ||
| 99 | ; --------------------------------------------------------------------------- | |
| 100 | ; Scroll data for the BG | |
| 101 | ; --------------------------------------------------------------------------- | |
| 102 | ||
| 103 | DLZ_WaveBG: rept $04 | |
| 104 | - | dc.w $FC01,$0000,$0000,$0000,$0000,$0000,$0401,$0400,$0400,$0400,$0400,$0401,$0800,$0800,$0800,$0800 |
| 104 | + | dc.w $FC01,$0000,$0000,$0000,$0000,$0000,$0001,$0400,$0400,$0400,$0400,$0401,$0800,$0800,$0800,$0800 |
| 105 | dc.w $0800,$0800,$0801,$0C00,$0C00,$0C00,$0C00,$0C00,$0C00,$0C00,$0C00,$0C00,$0C00,$0C00,$0C00,$0C00 | |
| 106 | dc.w $0C01,$13FF,$0C00,$0C00,$0C00,$0C00,$0C00,$0C00,$0C00,$0C00,$0C00,$0C00,$0C00,$0C00,$0C00,$0FFF | |
| 107 | dc.w $0800,$0800,$0800,$0800,$0800,$0800,$0BFF,$0400,$0400,$0400,$0400,$07FF,$0000,$0000,$0000,$0000 | |
| 108 | dc.w $0000,$03FF,$FC00,$FC00,$FC00,$FC00,$FFFF,$F800,$F800,$F800,$F800,$FBFF,$F400,$F400,$F400,$F400 | |
| 109 | dc.w $F400,$F400,$F7FF,$F000,$F000,$F000,$F000,$F000,$F000,$F000,$F000,$F000,$F000,$F000,$F000,$F000 | |
| 110 | dc.w $F000,$F000,$F000,$F000,$F000,$F000,$F000,$F000,$F000,$F000,$F000,$F000,$F000,$F000,$F000,$F001 | |
| 111 | dc.w $F400,$F400,$F400,$F400,$F400,$F400,$F401,$F800,$F800,$F800,$F800,$F801,$FC00,$FC00,$FC00,$FC00 | |
| 112 | endr | |
| 113 | ||
| 114 | ; =========================================================================== |