Advertisement
Guest User

Untitled

a guest
Nov 12th, 2016
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; ---------------------------------------------------------------------------
  2. ; Object 72 - teleporter (SBZ)
  3. ; ---------------------------------------------------------------------------
  4.  
  5. Teleport:
  6.         moveq   #0,d0
  7.         move.b  obRoutine(a0),d0
  8.         move.w  Tele_Index(pc,d0.w),d1
  9.         jsr Tele_Index(pc,d1.w)
  10.         out_of_range.s  @delete
  11.         rts
  12.  
  13.     @delete:
  14.         jmp (DeleteObject).l
  15. ; ===========================================================================
  16. Tele_Index: dc.w Tele_Main-Tele_Index
  17.         dc.w loc_166C8-Tele_Index
  18.         dc.w loc_1675E-Tele_Index
  19.         dc.w loc_16798-Tele_Index
  20. ; ===========================================================================
  21.  
  22. Tele_Main:  ; Routine 0
  23.         addq.b  #2,obRoutine(a0)
  24.         move.b  obSubtype(a0),d0
  25.         add.w   d0,d0
  26.         andi.w  #$1E,d0
  27.         lea Tele_Data(pc),a2
  28.         adda.w  (a2,d0.w),a2
  29.         move.w  (a2)+,$3A(a0)
  30.         move.l  a2,$3C(a0)
  31.         move.w  (a2)+,$36(a0)
  32.         move.w  (a2)+,$38(a0)
  33.  
  34. loc_166C8:  ; Routine 2
  35.         lea (v_player).w,a1
  36.         move.w  obX(a1),d0
  37.         sub.w   obX(a0),d0
  38.         btst    #0,obStatus(a0)
  39.         beq.s   loc_166E0
  40.         addi.w  #$F,d0
  41.  
  42. loc_166E0:
  43.         cmpi.w  #$10,d0
  44.         bcc.s   locret_1675C
  45.         move.w  obY(a1),d1
  46.         sub.w   obY(a0),d1
  47.         addi.w  #$20,d1
  48.         cmpi.w  #$40,d1
  49.         bcc.s   locret_1675C
  50.         tst.b   (f_lockmulti).w
  51.         bne.s   locret_1675C
  52.         cmpi.b  #7,obSubtype(a0)
  53.         bne.s   loc_1670E
  54.         cmpi.w  #50,(v_rings).w
  55.         bcs.s   locret_1675C
  56.  
  57. loc_1670E:
  58.         addq.b  #2,obRoutine(a0)
  59.         move.b  #$81,(f_lockmulti).w ; lock controls
  60.         move.b  #id_Roll,obAnim(a1) ; use Sonic's rolling animation
  61.         move.w  #$800,obInertia(a1)
  62.         move.w  #0,obVelX(a1)
  63.         move.w  #0,obVelY(a1)
  64.         bclr    #5,obStatus(a0)
  65.         bclr    #5,obStatus(a1)
  66.         bset    #1,obStatus(a1)
  67.         move.w  obX(a0),obX(a1)
  68.         move.w  obY(a0),obY(a1)
  69.         clr.b   $32(a0)
  70.         sfx sfx_Roll,0,0,0  ; play Sonic rolling sound
  71.  
  72. locret_1675C:
  73.         rts
  74. ; ===========================================================================
  75.  
  76. loc_1675E:  ; Routine 4
  77.         lea (v_player).w,a1
  78.         move.b  $32(a0),d0
  79.         addq.b  #2,$32(a0)
  80.         jsr (CalcSine).l
  81.         asr.w   #5,d0
  82.         move.w  obY(a0),d2
  83.         sub.w   d0,d2
  84.         move.w  d2,obY(a1)
  85.         cmpi.b  #$80,$32(a0)
  86.         bne.s   locret_16796
  87.         bsr.w   sub_1681C
  88.         addq.b  #2,obRoutine(a0)
  89.         sfx sfx_Teleport,0,0,0  ; play teleport sound
  90.  
  91. locret_16796:
  92.         rts
  93. ; ===========================================================================
  94.  
  95. loc_16798:  ; Routine 6
  96.         addq.l  #4,sp
  97.         lea (v_player).w,a1
  98.         subq.b  #1,$2E(a0)
  99.         bpl.s   loc_167DA
  100.         move.w  $36(a0),obX(a1)
  101.         move.w  $38(a0),obY(a1)
  102.         moveq   #0,d1
  103.         move.b  $3A(a0),d1
  104.         addq.b  #4,d1
  105.         cmp.b   $3B(a0),d1
  106.         bcs.s   loc_167C2
  107.         moveq   #0,d1
  108.         bra.s   loc_16800
  109. ; ===========================================================================
  110.  
  111. loc_167C2:
  112.         move.b  d1,$3A(a0)
  113.         movea.l $3C(a0),a2
  114.         move.w  (a2,d1.w),$36(a0)
  115.         move.w  2(a2,d1.w),$38(a0)
  116.         bra.w   sub_1681C
  117. ; ===========================================================================
  118.  
  119. loc_167DA:
  120.         move.l  obX(a1),d2
  121.         move.l  obY(a1),d3
  122.         move.w  obVelX(a1),d0
  123.         ext.l   d0
  124.         asl.l   #8,d0
  125.         add.l   d0,d2
  126.         move.w  obVelY(a1),d0
  127.         ext.l   d0
  128.         asl.l   #8,d0
  129.         add.l   d0,d3
  130.         move.l  d2,obX(a1)
  131.         move.l  d3,obY(a1)
  132.         rts
  133. ; ===========================================================================
  134.  
  135. loc_16800:
  136.         andi.w  #$7FF,obY(a1)
  137.         clr.b   obRoutine(a0)
  138.         clr.b   (f_lockmulti).w
  139.         move.w  #0,obVelX(a1)
  140.         move.w  #$200,obVelY(a1)
  141.         rts
  142.  
  143. ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
  144.  
  145.  
  146. sub_1681C:
  147.         moveq   #0,d0
  148.         move.w  #$1000,d2
  149.         move.w  $36(a0),d0
  150.         sub.w   obX(a1),d0
  151.         bge.s   loc_16830
  152.         neg.w   d0
  153.         neg.w   d2
  154.  
  155. loc_16830:
  156.         moveq   #0,d1
  157.         move.w  #$1000,d3
  158.         move.w  $38(a0),d1
  159.         sub.w   obY(a1),d1
  160.         bge.s   loc_16844
  161.         neg.w   d1
  162.         neg.w   d3
  163.  
  164. loc_16844:
  165.         cmp.w   d0,d1
  166.         bcs.s   loc_1687A
  167.         moveq   #0,d1
  168.         move.w  $38(a0),d1
  169.         sub.w   obY(a1),d1
  170.         swap    d1
  171.         divs.w  d3,d1
  172.         moveq   #0,d0
  173.         move.w  $36(a0),d0
  174.         sub.w   obX(a1),d0
  175.         beq.s   loc_16866
  176.         swap    d0
  177.         divs.w  d1,d0
  178.  
  179. loc_16866:
  180.         move.w  d0,obVelX(a1)
  181.         move.w  d3,obVelY(a1)
  182.         tst.w   d1
  183.         bpl.s   loc_16874
  184.         neg.w   d1
  185.  
  186. loc_16874:
  187.         move.w  d1,$2E(a0)
  188.         rts
  189. ; ===========================================================================
  190.  
  191. loc_1687A:
  192.         moveq   #0,d0
  193.         move.w  $36(a0),d0
  194.         sub.w   obX(a1),d0
  195.         swap    d0
  196.         divs.w  d2,d0
  197.         moveq   #0,d1
  198.         move.w  $38(a0),d1
  199.         sub.w   obY(a1),d1
  200.         beq.s   loc_16898
  201.         swap    d1
  202.         divs.w  d0,d1
  203.  
  204. loc_16898:
  205.         move.w  d1,obVelY(a1)
  206.         move.w  d2,obVelX(a1)
  207.         tst.w   d0
  208.         bpl.s   loc_168A6
  209.         neg.w   d0
  210.  
  211. loc_168A6:
  212.         move.w  d0,$2E(a0)
  213.         rts
  214. ; End of function sub_1681C
  215.  
  216. ; ===========================================================================
  217. Tele_Data:  dc.w @type00-Tele_Data, @type01-Tele_Data, @type02-Tele_Data
  218.         dc.w @type03-Tele_Data, @type04-Tele_Data, @type05-Tele_Data
  219.         dc.w @type06-Tele_Data, @type07-Tele_Data
  220. @type00:    dc.w 4, $794, $98C
  221. @type01:    dc.w 4, $94, $38C
  222. @type02:    dc.w $1C, $794, $2E8
  223.         dc.w $7A4, $2C0, $7D0
  224.         dc.w $2AC, $858, $2AC
  225.         dc.w $884, $298, $894
  226.         dc.w $270, $894, $190
  227. @type03:    dc.w 4, $894, $690
  228. @type04:    dc.w $1C, $1194, $470
  229.         dc.w $1184, $498, $1158
  230.         dc.w $4AC, $FD0, $4AC
  231.         dc.w $FA4, $4C0, $F94
  232.         dc.w $4E8, $F94, $590
  233. @type05:    dc.w 4, $1294, $490
  234. @type06:    dc.w $1C, $1594, $FFE8
  235.         dc.w $1584, $FFC0, $1560
  236.         dc.w $FFAC, $14D0, $FFAC
  237.         dc.w $14A4, $FF98, $1494
  238.         dc.w $FF70, $1494, $FD90
  239. @type07:    dc.w 4, $894, $90
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement