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 | ; =========================================================================== |