Advertisement
vladikcomper

Sonic 1 - New LZ deformation code

Jun 24th, 2012
355
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Deform_LZ_Extended:
  2.         move.w  ($FFFFF73A).w,d4    ; d4 = Cam_X_shift (8 fixed)
  3.         ext.l   d4
  4.         asl.l   #7,d4           ; d4 = Cam_X_shift / 2 (16 fixed)
  5.         move.w  ($FFFFF73C).w,d5    ; d5 = Cam_Y_shift (8 fixed)
  6.         ext.l   d5
  7.         asl.l   #7,d5           ; d5 = Cam_Y_shify / 2 (16 fixed)
  8.         bsr ScrollBlock1        ; scroll layer, setup redraw flags
  9.         move.w  ($FFFFF70C).w,($FFFFF618).w ; load 'Cam_BG_Y' into VSRAM buffer
  10.  
  11.         ; Setup scroll value
  12.         lea ($FFFFCC00).w,a1
  13.         move.w  ($FFFFF700).w,d0
  14.         neg.w   d0          ; d0 = Plane A scrolling
  15.         move.w  d0,d1           ; d1 = Plane A scrolling (backup)
  16.         swap    d0
  17.         move.w  ($FFFFF708).w,d0
  18.         neg.w   d0          ; d0 = Plane B scrolling
  19.  
  20.         ; Calculate water line and decide where to start
  21.         moveq   #0,d2
  22.         move.b  ($FFFFF7D8).w,d2
  23.         move.w  d2,d3
  24.         addi.w  #$80,($FFFFF7D8).w  ; WaveValue += 0.5    
  25.         add.b   ($FFFFF704+1).w,d3  ; d3 = (WaveValue + Cam_Y) & $FF
  26.         add.b   ($FFFFF70C+1).w,d2  ; d2 = (WaveValue + Cam_Y) & $FF
  27.         move.w  #224,d6         ; d6 = Number of lines
  28.         move.w  ($FFFFF646).w,d4    ; d4 = WaterLevel
  29.         sub.w   ($FFFFF704).w,d4    ; d4 = WaterLevel - Cam_Y
  30.         beq.s   @DeformWater_2
  31.         bmi.s   @DeformWater_2      ; if water line is above screen, branch
  32.         cmp.w   d6,d4           ; d4 > Lines on screen?
  33.         blt.s   @DeformDry_Partial  ; if not, branch
  34.  
  35. ; ---------------------------------------------------------------------------
  36. ; Works, if full screen is dry
  37.  
  38.         subq.w  #1,d6
  39.  
  40. @DeformDry_Full:
  41.         move.l  d0,(a1)+
  42.         dbf d6,@DeformDry_Full
  43.         rts
  44.  
  45. ; ---------------------------------------------------------------------------
  46. ; Works, if only part of screen is dry
  47.  
  48. @DeformDry_Partial:
  49.         move.w  d4,d5           ; d5 = WaterLevel
  50.         subq.w  #1,d4
  51.  
  52.     @0: move.l  d0,(a1)+
  53.         dbf d4,@0
  54.  
  55. ; ---------------------------------------------------------------------------
  56. ; Works if screen is full of water, or water at least takes place
  57.  
  58. @DeformWater:
  59.         sub.w   d5,d6           ; d6 = 224 - WaterLevel = Lines left for water
  60.         add.b   d5,d2           ;
  61.         add.b   d5,d3           ;
  62.  
  63. @DeformWater_2:
  64.         subq.w  #1,d6
  65.         lea (Obj0A_WobbleData).l,a2 ; a2 = Water Deformation Data for Plane B
  66.         lea LZ_Wave_Data(pc),a3 ; a3 = Water Deformation Data for Plane A
  67.         add.w   d2,a2           ; load array from position of water line
  68.         add.w   d3,a3           ;
  69.  
  70.     @1: move.b  (a3)+,d2
  71.         ext.w   d2
  72.         add.w   d1,d2           ; d2 = Plane A scrolling
  73.         move.w  d2,(a1)+
  74.         move.b  (a2)+,d2
  75.         ext.w   d2
  76.         add.w   d0,d2           ; d2 = Plane B scrolling
  77.         move.w  d2,(a1)+
  78.         dbf d6,@1
  79.         rts
  80.  
  81. ; ===========================================================================
  82. LZ_Wave_Data:   dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  83.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  84.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  85.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  86.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  87.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  88.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  89.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  90.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  91.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  92.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  93.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  94.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  95.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  96.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  97.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  98.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  99.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  100.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  101.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  102.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  103.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  104.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  105.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  106.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  107.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  108.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  109.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  110.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  111.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  112.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  113.         dc.b   1,  1,  2,  2,  3,  3,  3,  3,  2,  2,  1,  1,  0,  0,  0,  0
  114.  
  115. ; ===============================================================================
  116.  
  117. Obj0A_WobbleData:
  118.                dc.b 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2
  119.         dc.b 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3
  120.         dc.b 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2
  121.         dc.b 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0
  122.         dc.b 0, -1, -1, -1, -1, -1, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3
  123.         dc.b -3, -3, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4
  124.         dc.b -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -3
  125.         dc.b -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -1, -1, -1, -1, -1
  126.         dc.b 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2
  127.         dc.b 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3
  128.         dc.b 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2
  129.         dc.b 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0
  130.         dc.b 0, -1, -1, -1, -1, -1, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3
  131.         dc.b -3, -3, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4
  132.         dc.b -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -3
  133.         dc.b -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -1, -1, -1, -1, -1
  134.  
  135.         dc.b 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2
  136.         dc.b 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3
  137.         dc.b 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2
  138.         dc.b 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0
  139.         dc.b 0, -1, -1, -1, -1, -1, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3
  140.         dc.b -3, -3, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4
  141.         dc.b -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -3
  142.         dc.b -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -1, -1, -1, -1, -1
  143.         dc.b 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2
  144.         dc.b 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3
  145.         dc.b 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2
  146.         dc.b 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0
  147.         dc.b 0, -1, -1, -1, -1, -1, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3
  148.         dc.b -3, -3, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4
  149.         dc.b -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -3
  150.         dc.b -3, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -1, -1, -1, -1, -1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement