View difference between Paste ID: Br8wGURr and 6vyiQVUu
SHOW: | | - or go back to the newest paste.
1
; ===========================================================================
2
; loc_D27C:
3
SwScrl_CPZ:
4
	move.w	(Camera_X_pos_diff).w,d4
5
	ext.l	d4
6
	asl.l	#5,d4
7
	move.w	(Camera_Y_pos_diff).w,d5
8
	ext.l	d5
9
	asl.l	#6,d5
10
	bsr.w	SetHorizVertiScrollFlagsBG
11
	move.w	(Camera_X_pos_diff).w,d4
12
	ext.l	d4
13
	asl.l	#7,d4
14
	moveq	#4,d6
15
	bsr.w	SetHorizScrollFlagsBG2
16
	move.w	(Camera_BG_Y_pos).w,d0
17
	move.w	d0,(Camera_BG2_Y_pos).w
18
	move.w	d0,(Vscroll_Factor_BG).w
19
	move.b	(Scroll_flags_BG).w,d0
20
	or.b	(Scroll_flags_BG2).w,d0
21
	move.b	d0,(Scroll_flags_BG3).w
22
	clr.b	(Scroll_flags_BG).w
23
	clr.b	(Scroll_flags_BG2).w
24
25
	lea	(Horiz_Scroll_Buf).w,a1
26
	moveq	#0,d0
27
	sub.w	(Camera_X_pos).w,d0
28
	swap	d0
29
	sub.w	(Camera_BG_X_pos).w,d0
30
31
	move.w	#223,d4
32
	move.w	(Camera_BG_Y_pos).w,d1
33
	subi.w	#$120,d1
34
	bpl.s	SwScrl_CPZ_Ripple
35
	not.w	d1						; for d1 < 0, this is equal to neg.w d1 / subq.w #1,d1
36
	sub.w	d1,d4
37-
	bpl.s	.loop
37+
	bpl.s	.duffsdevice
38
	add.w	d4,d1
39
40
.duffsdevice:
41
	move.w	d1,d3
42
	not.w	d3
43
	andi.w	#$F,d3
44
	add.w	d3,d3
45
	lsr.w	#4,d1
46
	jmp	.loop(pc,d3.w)
47
; ---------------------------------------------------------------------------
48
.loop:
49
	rept (1<<4)
50
		move.l	d0,(a1)+
51
	endm
52
	dbf	d1,.loop
53
54
	subq.w	#1,d4
55
	bmi.s	SwScrl_CPZ_End
56
57
	moveq	#$F,d1
58
	sub.w	d1,d4
59
	bpl.s	SwScrl_CPZ_DoRipple
60
	add.w	d4,d1
61
	bra.s	SwScrl_CPZ_DoRipple
62
; ---------------------------------------------------------------------------
63
SwScrl_CPZ_Ripple:
64
	subi.w	#$10,d1
65
	bpl.s	SwScrl_CPZ_Bottom
66
	not.w	d1						; for d1 < 0, this is equal to neg.w d1 / subq.w #1,d1
67
	sub.w	d1,d4
68
	; Note: d4 simply can't be negative here.
69
70
SwScrl_CPZ_DoRipple:
71
	move.w	(TempArray_LayerDef).w,d2
72
	moveq	#7,d3
73
	and.b	(Timer_frames+1).w,d3
74
	bne.s	.skip_wave_dec
75
	subq.w	#1,d2
76
	andi.w	#$1F,d2
77
	move.w	d2,(TempArray_LayerDef).w
78
79
.skip_wave_dec:
80
	lea	SwScrl_RippleData(pc),a2
81
	lea	(a2,d2.w),a2
82
	move.w	d0,d2
83
84
.loop:
85
	move.b	(a2)+,d0
86
	ext.w	d0
87
	add.w	d2,d0
88
	move.l	d0,(a1)+
89
	dbf	d1,.loop
90
91
	subq.w	#1,d4
92
	bmi.s	SwScrl_CPZ_End
93
94
SwScrl_CPZ_Bottom:
95
	move.w	(Camera_BG2_X_pos).w,d0
96
	neg.w	d0
97
	move.w	d4,d3
98
	not.w	d3
99
	andi.w	#$F,d3
100
	add.w	d3,d3
101
	lsr.w	#4,d4
102
	jmp	.loop(pc,d3.w)
103
; ---------------------------------------------------------------------------
104
.loop:
105
	rept (1<<4)
106
		move.l	d0,(a1)+
107
	endm
108
	dbf	d4,.loop
109
110
SwScrl_CPZ_End:
111
	rts
112
; ===========================================================================