Advertisement
vladikcomper

Sonic 2 - New CPZ deformation code

Jun 23rd, 2012
320
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               ; d4 = CamXdiff / 8 (16 fixed)
  7.     move.w  (Camera_Y_pos_diff).w,d5
  8.     ext.l   d5
  9.     asl.l   #6,d5               ; d5 = CamYdiff / 4 (16 fixed)
  10.     bsr.w   SetHorizVertiScrollFlagsBG  ; scroll layer #1!
  11.     move.w  (Camera_X_pos_diff).w,d4
  12.     ext.l   d4
  13.     asl.l   #7,d4               ; d4 = CamXdiff / 2 (16 fixed)
  14.     moveq   #4,d6               ; set bit #2 of scroll flags
  15.     bsr.w   SetHorizScrollFlagsBG2      ; scroll layer #2!
  16.  
  17.     move.w  (Camera_BG_Y_pos).w,d0
  18.     move.w  d0,(Camera_BG2_Y_pos).w
  19.     move.w  d0,(Vscroll_Factor+2).w     ; set Y-pos to VSRAM buffer
  20.     move.b  (Scroll_flags_BG).w,d0
  21.     or.b    (Scroll_flags_BG2).w,d0
  22.     move.b  d0,(Scroll_flags_BG3).w
  23.     clr.b   (Scroll_flags_BG).w
  24.     clr.b   (Scroll_flags_BG2).w
  25.  
  26. ; --------------------------------------------------------------
  27. ; NEW SCROLL CODE
  28.  
  29.     lea (Horiz_Scroll_Buf).w,a1        
  30.     move.w  (Camera_X_pos).w,d0
  31.     neg.w   d0
  32.     swap    d0              ; setup plane A scrolling
  33.     move.w  #224,d4             ; d4 = lines counter
  34.     move.w  (Camera_BG_X_pos).w,d0
  35.     neg.w   d0                        
  36.     move.w  #$120,d1
  37.     sub.w   (Camera_BG_Y_pos).w,d1      ; d1 = lines until ripple
  38.     beq.s   SwScrl_CPZ_Ripple       ; if BG starts on ripple or lower, branch
  39.     bmi.s   SwScrl_CPZ_Ripple
  40.     ;bhi?
  41.     subq.w  #1,d1
  42.  
  43. ; ---------------------------------------------------------------
  44. ;SwScrl_CPZ_Top:
  45. -   move.l  d0,(a1)+
  46.     subq.w  #1,d4
  47.     beq.s   SwScrl_CPZ_End
  48.     dbf d1,-
  49.  
  50.     moveq   #$F,d2
  51.     bra.s   +
  52.  
  53. ; ---------------------------------------------------------------
  54. SwScrl_CPZ_Ripple:
  55.     moveq   #$F,d2
  56.     add.w   d1,d2
  57.     bmi.s   SwScrl_CPZ_Bottom       ; if BG starts past ripple, branch
  58.  
  59. +   move.w  (TempArray_LayerDef).w,d1
  60.     move.b  (Timer_frames+1).w,d3
  61.     andi.b  #%111,d3
  62.     bne.s   +
  63.     subq.w  #1,d1
  64. +   andi.w  #$1F,d1
  65.     lea SwScrl_RippleData(pc),a2
  66.     lea (a2,d1.w),a2
  67.     move.w  d1,(TempArray_LayerDef).w
  68.     move.w  d0,d1
  69.  
  70. /   move.b  (a2)+,d0
  71.     ext.w   d0
  72.     add.w   d1,d0
  73.     move.l  d0,(a1)+
  74.     subq.w  #1,d4
  75.     beq.s   SwScrl_CPZ_End
  76.     dbf d2,-
  77.    
  78. ; ---------------------------------------------------------------
  79. SwScrl_CPZ_Bottom:
  80.     move.w  (Camera_BG2_X_pos).w,d0
  81.     neg.w   d0
  82.     subq.w  #1,d4
  83.     bmi.s   SwScrl_CPZ_End
  84.  
  85. -   move.l  d0,(a1)+
  86.     dbf d4,-
  87.  
  88. ; ---------------------------------------------------------------
  89. SwScrl_CPZ_End:
  90.     rts
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement