Advertisement
Guest User

Untitled

a guest
Aug 10th, 2015
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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   .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. ; ===========================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement