View difference between Paste ID: W9588Rww and 3bH8VCBV
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
; ===========================================================================