ThomasSpeedrunner

Untitled

Aug 12th, 2013
5,363
0
Never
2
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; loc_1E7D0:
  2. FindFloor:
  3.     bsr.w   Floor_ChkTile
  4.     move.w  (a1),d0
  5.     move.w  d0,d4
  6.     andi.w  #$3FF,d0
  7.     beq.s   loc_1E7E2
  8.     btst    d5,d4
  9.     bne.s   loc_1E7F0
  10.  
  11. loc_1E7E2:
  12.     add.w   a3,d2
  13.     bsr.w   FindFloor2
  14.     sub.w   a3,d2
  15.     addi.w  #$10,d1
  16.     rts
  17. ; ===========================================================================
  18.  
  19. loc_1E7F0:  ; block has some solidity
  20.     movea.l (Collision_addr).w,a2   ; pointer to collision data, i.e. blockID -> collisionID array
  21.     move.b  (a2,d0.w),d0    ; get collisionID
  22.     andi.w  #$FF,d0
  23.     beq.s   loc_1E7E2
  24.     cmpi.b  #death_egg_zone,(Current_Zone).w
  25.     bne.s   LoadFloorColCurveMap_NotDEZ
  26.     lea (ColCurveMap_DEZ).l,a2
  27.     bra.s   ContinueLoadingFloorColCurveMap
  28.  
  29. LoadFloorColCurveMap_NotDEZ:
  30.     lea (ColCurveMap).l,a2
  31.  
  32. ContinueLoadingFloorColCurveMap:
  33.     move.b  (a2,d0.w),(a4)  ; get angle from AngleMap --> (a4)
  34.     lsl.w   #4,d0
  35.     move.w  d3,d1   ; x_pos
  36.     btst    #$A,d4  ; adv.blockID in d4 - X flipping
  37.     beq.s   +
  38.     not.w   d1
  39.     neg.b   (a4)
  40. +
  41.     btst    #$B,d4  ; Y flipping
  42.     beq.s   +
  43.     addi.b  #$40,(a4)
  44.     neg.b   (a4)
  45.     subi.b  #$40,(a4)
  46. +
  47.     andi.w  #$F,d1  ; x_pos (mod 16)
  48.     add.w   d0,d1   ; d0 = 16*blockID -> offset in ColArray to look up
  49.     cmpi.b  #death_egg_zone,(Current_Zone).w
  50.     bne.s   LoadFloorColArray_NotDEZ
  51.     lea (ColArray_DEZ).l,a2
  52.     bra.s   ContinueLoadingFloorColArray
  53.  
  54. LoadFloorColArray_NotDEZ:
  55.     lea (ColArray).l,a2
  56.  
  57. ContinueLoadingFloorColArray:
  58.     move.b  (a2,d1.w),d0    ; heigth from ColArray
  59.     ext.w   d0
  60.     eor.w   d6,d4
  61.     btst    #$B,d4  ; Y flipping
  62.     beq.s   +
  63.     neg.w   d0
  64. +
  65.     tst.w   d0
  66.     beq.w   loc_1E7E2   ; no collision
  67.     bmi.s   loc_1E85E
  68.     cmpi.b  #$10,d0
  69.     beq.s   loc_1E86A
  70.     move.w  d2,d1
  71.     andi.w  #$F,d1
  72.     add.w   d1,d0
  73.     move.w  #$F,d1
  74.     sub.w   d0,d1
  75.     rts
  76. ; ===========================================================================
  77.  
  78. loc_1E85E:
  79.     move.w  d2,d1
  80.     andi.w  #$F,d1
  81.     add.w   d1,d0
  82.     bpl.w   loc_1E7E2
  83.  
  84. loc_1E86A:
  85.     sub.w   a3,d2
  86.     bsr.w   FindFloor2
  87.     add.w   a3,d2
  88.     subi.w  #$10,d1
  89.     rts
  90. ; End of function FindFloor
  91.  
  92.  
  93. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  94.  
  95.  
  96. ; loc_1E878:
  97. FindFloor2:
  98.     bsr.w   Floor_ChkTile
  99.     move.w  (a1),d0
  100.     move.w  d0,d4
  101.     andi.w  #$3FF,d0
  102.     beq.s   loc_1E88A
  103.     btst    d5,d4
  104.     bne.s   loc_1E898
  105.  
  106. loc_1E88A:
  107.     move.w  #$F,d1
  108.     move.w  d2,d0
  109.     andi.w  #$F,d0
  110.     sub.w   d0,d1
  111.     rts
  112. ; ===========================================================================
  113.  
  114. loc_1E898:
  115.     movea.l (Collision_addr).w,a2
  116.     move.b  (a2,d0.w),d0
  117.     andi.w  #$FF,d0
  118.     beq.s   loc_1E88A
  119.     cmpi.b  #death_egg_zone,(Current_Zone).w
  120.     bne.s   LoadFloor2ColCurveMap_NotDEZ
  121.     lea (ColCurveMap_DEZ).l,a2
  122.     bra.s   ContinueLoadingFloor2ColCurveMap
  123.  
  124. LoadFloor2ColCurveMap_NotDEZ:
  125.     lea (ColCurveMap).l,a2
  126.  
  127. ContinueLoadingFloor2ColCurveMap:
  128.     move.b  (a2,d0.w),(a4)
  129.     lsl.w   #4,d0
  130.     move.w  d3,d1
  131.     btst    #$A,d4
  132.     beq.s   +
  133.     not.w   d1
  134.     neg.b   (a4)
  135. +
  136.     btst    #$B,d4
  137.     beq.s   +
  138.     addi.b  #$40,(a4)
  139.     neg.b   (a4)
  140.     subi.b  #$40,(a4)
  141. +
  142.     andi.w  #$F,d1
  143.     add.w   d0,d1
  144.     cmpi.b  #death_egg_zone,(Current_Zone).w
  145.     bne.s   LoadFloor2ColArray_NotDEZ
  146.     lea (ColArray_DEZ).l,a2
  147.     bra.s   ContinueLoadingFloor2ColArray
  148.  
  149. LoadFloor2ColArray_NotDEZ:
  150.     lea (ColArray).l,a2
  151.  
  152. ContinueLoadingFloor2ColArray:
  153.     move.b  (a2,d1.w),d0
  154.     ext.w   d0
  155.     eor.w   d6,d4
  156.     btst    #$B,d4
  157.     beq.s   +
  158.     neg.w   d0
  159. +
  160.     tst.w   d0
  161.     beq.w   loc_1E88A
  162.     bmi.s   loc_1E900
  163.     move.w  d2,d1
  164.     andi.w  #$F,d1
  165.     add.w   d1,d0
  166.     move.w  #$F,d1
  167.     sub.w   d0,d1
  168.     rts
  169. ; ===========================================================================
  170.  
  171. loc_1E900:
  172.     move.w  d2,d1
  173.     andi.w  #$F,d1
  174.     add.w   d1,d0
  175.     bpl.w   loc_1E88A
  176.     not.w   d1
  177.     rts
  178. ; ===========================================================================
  179. ; loc_1E910:
  180. Obj_CheckInFloor:
  181.     bsr.w   Floor_ChkTile
  182.     move.w  (a1),d0
  183.     move.w  d0,d4
  184.     andi.w  #$3FF,d0
  185.     beq.s   loc_1E922
  186.     btst    d5,d4
  187.     bne.s   loc_1E928
  188.  
  189. loc_1E922:
  190.     move.w  #$10,d1
  191.     rts
  192. ; ===========================================================================
  193.  
  194. loc_1E928:
  195.     movea.l (Collision_addr).w,a2
  196.     move.b  (a2,d0.w),d0
  197.     andi.w  #$FF,d0
  198.     beq.s   loc_1E922
  199.     cmpi.b  #death_egg_zone,(Current_Zone).w
  200.     bne.s   LoadObjChkFloorColCurveMap_NotDEZ
  201.     lea (ColCurveMap_DEZ).l,a2
  202.     bra.s   ContinueLoadingObjChkFloorColCurveMap
  203.  
  204. LoadObjChkFloorColCurveMap_NotDEZ:
  205.     lea (ColCurveMap).l,a2
  206.  
  207. ContinueLoadingObjChkFloorColCurveMap:
  208.     move.b  (a2,d0.w),(a4)
  209.     lsl.w   #4,d0
  210.     move.w  d3,d1
  211.     btst    #$A,d4
  212.     beq.s   +
  213.     not.w   d1
  214.     neg.b   (a4)
  215. +
  216.     btst    #$B,d4
  217.     beq.s   +
  218.     addi.b  #$40,(a4)
  219.     neg.b   (a4)
  220.     subi.b  #$40,(a4)
  221. +
  222.     andi.w  #$F,d1
  223.     add.w   d0,d1
  224.     cmpi.b  #death_egg_zone,(Current_Zone).w
  225.     bne.s   LoadFloorCheckColArray_NotDEZ
  226.     lea (ColArray_DEZ).l,a2
  227.     bra.s   ContinueLoadingFloorCheckColArray
  228.  
  229. LoadFloorCheckColArray_NotDEZ:
  230.     lea (ColArray).l,a2
  231.  
  232. ContinueLoadingFloorCheckColArray:
  233.     move.b  (a2,d1.w),d0
  234.     ext.w   d0
  235.     eor.w   d6,d4
  236.     btst    #$B,d4
  237.     beq.s   +
  238.     neg.w   d0
  239. +
  240.     tst.w   d0
  241.     beq.s   loc_1E922
  242.     bmi.s   loc_1E996
  243.     cmpi.b  #$10,d0
  244.     beq.s   loc_1E9A2
  245.     move.w  d2,d1
  246.     andi.w  #$F,d1
  247.     add.w   d1,d0
  248.     move.w  #$F,d1
  249.     sub.w   d0,d1
  250.     rts
  251. ; ===========================================================================
  252.  
  253. loc_1E996:
  254.     move.w  d2,d1
  255.     andi.w  #$F,d1
  256.     add.w   d1,d0
  257.     bpl.w   loc_1E922
  258.  
  259. loc_1E9A2:
  260.     sub.w   a3,d2
  261.     bsr.w   FindFloor2
  262.     add.w   a3,d2
  263.     subi.w  #$10,d1
  264.     rts
  265. ; ===========================================================================
  266.  
  267. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  268.  
  269. ; d2 = y_pos
  270. ; d3 = x_pos
  271. ; d5 = ($c,$d) - solidity type bit (L/R/B or top)
  272. ; returns relevant block ID in (a1)
  273. ; returns distance to left/right in d1
  274. ; returns angle in (a4)
  275.  
  276. ; loc_1E9B0:
  277. FindWall:
  278.     bsr.w   Floor_ChkTile
  279.     move.w  (a1),d0
  280.     move.w  d0,d4
  281.     andi.w  #$3FF,d0    ; plain blockID
  282.     beq.s   loc_1E9C2   ; no collision
  283.     btst    d5,d4
  284.     bne.s   loc_1E9D0
  285.  
  286. loc_1E9C2:
  287.     add.w   a3,d3
  288.     bsr.w   FindWall2
  289.     sub.w   a3,d3
  290.     addi.w  #$10,d1
  291.     rts
  292. ; ===========================================================================
  293.  
  294. loc_1E9D0:
  295.     movea.l (Collision_addr).w,a2
  296.     move.b  (a2,d0.w),d0
  297.     andi.w  #$FF,d0 ; relevant collisionArrayEntry
  298.     beq.s   loc_1E9C2
  299.     cmpi.b  #death_egg_zone,(Current_Zone).w
  300.     bne.s   LoadWallColCurveMap_NotDEZ
  301.     lea (ColCurveMap_DEZ).l,a2
  302.     bra.s   ContinueLoadingWallColCurveMap
  303.  
  304. LoadWallColCurveMap_NotDEZ:
  305.     lea (ColCurveMap).l,a2
  306.  
  307. ContinueLoadingWallColCurveMap:
  308.     move.b  (a2,d0.w),(a4)
  309.     lsl.w   #4,d0   ; offset in collision array
  310.     move.w  d2,d1   ; y
  311.     btst    #$B,d4  ; y-mirror?
  312.     beq.s   +
  313.     not.w   d1
  314.     addi.b  #$40,(a4)
  315.     neg.b   (a4)
  316.     subi.b  #$40,(a4)
  317. +
  318.     btst    #$A,d4  ; x-mirror?
  319.     beq.s   +
  320.     neg.b   (a4)
  321. +
  322.     andi.w  #$F,d1  ; y
  323.     add.w   d0,d1   ; line to look up
  324.     cmpi.b  #death_egg_zone,(Current_Zone).w
  325.     bne.s   LoadWallColArray_NotDEZ
  326.     lea (ColArray2_DEZ).l,a2
  327.     bra.s   ContinueLoadingWallColArray
  328.  
  329. LoadWallColArray_NotDEZ:
  330.     lea (ColArray2).l,a2    ; rotated collision array
  331.  
  332. ContinueLoadingWallColArray:
  333.     move.b  (a2,d1.w),d0    ; collision value
  334.     ext.w   d0
  335.     eor.w   d6,d4   ; set x-flip flag if from the right
  336.     btst    #$A,d4  ; x-mirror?
  337.     beq.s   +
  338.     neg.w   d0
  339. +
  340.     tst.w   d0
  341.     beq.w   loc_1E9C2
  342.     bmi.s   loc_1EA3E
  343.     cmpi.b  #$10,d0
  344.     beq.s   loc_1EA4A
  345.     move.w  d3,d1   ; x
  346.     andi.w  #$F,d1
  347.     add.w   d1,d0
  348.     move.w  #$F,d1
  349.     sub.w   d0,d1
  350.     rts
  351. ; ===========================================================================
  352.  
  353. loc_1EA3E:
  354.     move.w  d3,d1
  355.     andi.w  #$F,d1
  356.     add.w   d1,d0
  357.     bpl.w   loc_1E9C2   ; no collision
  358.  
  359. loc_1EA4A:
  360.     sub.w   a3,d3
  361.     bsr.w   FindWall2
  362.     add.w   a3,d3
  363.     subi.w  #$10,d1
  364.     rts
  365. ; End of function FindWall
  366.  
  367.  
  368. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  369.  
  370. ; loc_1EA58:
  371. FindWall2:
  372.     bsr.w   Floor_ChkTile
  373.     move.w  (a1),d0
  374.     move.w  d0,d4
  375.     andi.w  #$3FF,d0
  376.     beq.s   loc_1EA6A
  377.     btst    d5,d4
  378.     bne.s   loc_1EA78
  379.  
  380. loc_1EA6A:
  381.     move.w  #$F,d1
  382.     move.w  d3,d0
  383.     andi.w  #$F,d0
  384.     sub.w   d0,d1
  385.     rts
  386. ; ===========================================================================
  387.  
  388. loc_1EA78:
  389.     movea.l (Collision_addr).w,a2
  390.     move.b  (a2,d0.w),d0
  391.     andi.w  #$FF,d0
  392.     beq.s   loc_1EA6A
  393.     cmpi.b  #death_egg_zone,(Current_Zone).w
  394.     bne.s   LoadWall2ColCurveMap_NotDEZ
  395.     lea (ColCurveMap_DEZ).l,a2
  396.     bra.s   ContinueLoadingWall2ColCurveMap
  397.  
  398. LoadWall2ColCurveMap_NotDEZ:
  399.     lea (ColCurveMap).l,a2
  400.  
  401. ContinueLoadingWall2ColCurveMap:
  402.     move.b  (a2,d0.w),(a4)
  403.     lsl.w   #4,d0
  404.     move.w  d2,d1
  405.     btst    #$B,d4
  406.     beq.s   +
  407.     not.w   d1
  408.     addi.b  #$40,(a4)
  409.     neg.b   (a4)
  410.     subi.b  #$40,(a4)
  411. +
  412.     btst    #$A,d4
  413.     beq.s   +
  414.     neg.b   (a4)
  415. +
  416.     andi.w  #$F,d1
  417.     add.w   d0,d1
  418.     cmpi.b  #death_egg_zone,(Current_Zone).w
  419.     bne.s   LoadWall2ColArray_NotDEZ
  420.     lea (ColArray2_DEZ).l,a2
  421.     bra.s   ContinueLoadingWall2ColArray
  422.  
  423. LoadWall2ColArray_NotDEZ:
  424.     lea (ColArray2).l,a2    ; rotated collision array
  425.  
  426. ContinueLoadingWall2ColArray:
  427.     move.b  (a2,d1.w),d0
  428.     ext.w   d0
  429.     eor.w   d6,d4
  430.     btst    #$A,d4
  431.     beq.s   +
  432.     neg.w   d0
  433. +
  434.     tst.w   d0
  435.     beq.w   loc_1EA6A
  436.     bmi.s   loc_1EAE0
  437.     move.w  d3,d1
  438.     andi.w  #$F,d1
  439.     add.w   d1,d0
  440.     move.w  #$F,d1
  441.     sub.w   d0,d1
  442.     rts
  443. ; ===========================================================================
  444.  
  445. loc_1EAE0:
  446.     move.w  d3,d1
  447.     andi.w  #$F,d1
  448.     add.w   d1,d0
  449.     bpl.w   loc_1EA6A
  450.     not.w   d1
  451.     rts
  452. ; End of function FindWall2
Advertisement