Advertisement
Guest User

Untitled

a guest
Jun 28th, 2010
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; ---------------------------------------------------------------------------
  2. ; Object 60 - Orbinaut enemy (LZ, SLZ, SBZ)
  3. ; ---------------------------------------------------------------------------
  4.  
  5. Obj60:                  ; XREF: Obj_Index
  6.         moveq   #0,d0
  7.         move.b  $24(a0),d0
  8.         move.w  Obj60_Index(pc,d0.w),d1
  9.         jmp Obj60_Index(pc,d1.w)
  10. ; ===========================================================================
  11. Obj60_Index:    dc.w Obj60_Main-Obj60_Index
  12.         dc.w Obj60_ChkSonic-Obj60_Index
  13.         dc.w Obj60_Display-Obj60_Index
  14.         dc.w Obj60_MoveOrb-Obj60_Index
  15.         dc.w Obj60_ChkDel2-Obj60_Index
  16. ; ===========================================================================
  17.  
  18. Obj60_Main:             ; XREF: Obj60_Index
  19.         move.l  #Map_obj60,4(a0)
  20.         move.w  #$429,2(a0) ; SBZ specific code
  21.         cmpi.b  #5,($FFFFFE10).w ; check if level is SBZ
  22.         beq.s   loc_11D02
  23.         move.w  #$2429,2(a0)    ; SLZ specific code
  24.  
  25. loc_11D02:
  26.         cmpi.b  #1,($FFFFFE10).w ; check if level is LZ
  27.         bne.s   loc_11D10
  28.         move.w  #$467,2(a0) ; LZ specific code
  29.  
  30. loc_11D10:
  31.         ori.b   #4,1(a0)
  32.         move.b  #4,$18(a0)
  33.         move.b  #$B,$20(a0)
  34.         move.b  #$C,$19(a0)
  35.         moveq   #0,d2
  36.         lea $37(a0),a2
  37.         movea.l a2,a3
  38.         addq.w  #1,a2
  39.         moveq   #3,d1
  40.  
  41. Obj60_MakeOrbs:
  42.         bsr.w   SingleObjLoad2
  43.         bne.s   loc_11D90
  44.         addq.b  #1,(a3)
  45.         move.w  a1,d5
  46.         subi.w  #-$3000,d5
  47.         lsr.w   #6,d5
  48.         andi.w  #$7F,d5
  49.         move.b  d5,(a2)+
  50.         move.b  0(a0),0(a1) ; load spiked orb object
  51.         move.b  #6,$24(a1)
  52.         move.l  4(a0),4(a1)
  53.         move.w  2(a0),2(a1)
  54.         ori.b   #4,1(a1)
  55.         move.b  #4,$18(a1)
  56.         move.b  #8,$19(a1)
  57.         move.b  #3,$1A(a1)
  58.         move.b  #$98,$20(a1)
  59.         move.b  d2,$26(a1)
  60.         addi.b  #$40,d2
  61.         move.l  a0,$3C(a1)
  62.         dbf d1,Obj60_MakeOrbs ; repeat sequence 3 more times
  63.  
  64. loc_11D90:
  65.         moveq   #1,d0
  66.         btst    #0,$22(a0)
  67.         beq.s   Obj60_Move
  68.         neg.w   d0
  69.  
  70. Obj60_Move:
  71.         move.b  d0,$36(a0)
  72.         move.b  $28(a0),$24(a0) ; if type is 02, skip the firing rountine
  73.         addq.b  #2,$24(a0)
  74.         move.w  #-$40,$10(a0)   ; move orbinaut to the left
  75.         btst    #0,$22(a0)  ; is orbinaut reversed?
  76.         beq.s   locret_11DBC    ; if not, branch
  77.         neg.w   $10(a0)     ; move orbinaut to the right
  78.  
  79. locret_11DBC:
  80.         rts
  81. ; ===========================================================================
  82.  
  83. Obj60_ChkSonic:             ; XREF: Obj60_Index
  84.         move.w  ($FFFFD008).w,d0
  85.         sub.w   8(a0),d0
  86.         bcc.s   loc_11DCA
  87.         neg.w   d0
  88.  
  89. loc_11DCA:
  90.         cmpi.w  #$A0,d0     ; is Sonic within $A0 pixels of orbinaut?
  91.         bcc.s   Obj60_Animate   ; if not, branch
  92.         move.w  ($FFFFD00C).w,d0
  93.         sub.w   $C(a0),d0
  94.         bcc.s   loc_11DDC
  95.         neg.w   d0
  96.  
  97. loc_11DDC:
  98.         cmpi.w  #$50,d0     ; is Sonic within $50 pixels of orbinaut?
  99.         bcc.s   Obj60_Animate   ; if not, branch
  100.         tst.w   ($FFFFFE08).w   ; is debug mode on?
  101.         bne.s   Obj60_Animate   ; if yes, branch
  102.         move.b  #1,$1C(a0)  ; use "angry" animation
  103.  
  104. Obj60_Animate:
  105.         lea (Ani_obj60).l,a1
  106.         bsr.w   AnimateSprite
  107.         bra.w   Obj60_ChkDel
  108. ; ===========================================================================
  109.  
  110. Obj60_Display:              ; XREF: Obj60_Index
  111.         bsr.w   SpeedToPos
  112.  
  113. Obj60_ChkDel:               ; XREF: Obj60_Animate
  114.         move.w  8(a0),d0
  115.         andi.w  #$FF80,d0
  116.         move.w  ($FFFFF700).w,d1
  117.         subi.w  #$80,d1
  118.         andi.w  #$FF80,d1
  119.         sub.w   d1,d0
  120.         cmpi.w  #$280,d0
  121.         bhi.w   Obj60_ChkGone
  122.         bra.w   DisplaySprite
  123. ; ===========================================================================
  124.  
  125. Obj60_ChkGone:              ; XREF: Obj60_ChkDel
  126.         lea ($FFFFFC00).w,a2
  127.         moveq   #0,d0
  128.         move.b  $23(a0),d0
  129.         beq.s   loc_11E34
  130.         bclr    #7,2(a2,d0.w)
  131.  
  132. loc_11E34:
  133.         lea $37(a0),a2
  134.         moveq   #0,d2
  135.         move.b  (a2)+,d2
  136.         subq.w  #1,d2
  137.         bcs.s   Obj60_Delete
  138.  
  139. loc_11E40:
  140.         moveq   #0,d0
  141.         move.b  (a2)+,d0
  142.         lsl.w   #6,d0
  143.         addi.l  #$FFD000,d0
  144.         movea.l d0,a1
  145.         bsr.w   DeleteObject2
  146.         dbf d2,loc_11E40
  147.  
  148. Obj60_Delete:
  149.         bra.w   DeleteObject
  150. ; ===========================================================================
  151.  
  152. Obj60_MoveOrb:              ; XREF: Obj60_Index
  153.         movea.l $3C(a0),a1
  154.         cmpi.b  #$60,0(a1)
  155.         bne.w   DeleteObject
  156.         cmpi.b  #2,$1A(a1)
  157.         bne.s   Obj60_Circle
  158.         cmpi.b  #$40,$26(a0)
  159.         bne.s   Obj60_Circle
  160.         addq.b  #2,$24(a0)
  161.         subq.b  #1,$37(a1)
  162.         bne.s   Obj60_FireOrb
  163.         addq.b  #2,$24(a1)
  164.  
  165. Obj60_FireOrb:
  166.         move.w  #-$200,$10(a0)  ; move orb to the left (quickly)
  167.         btst    #0,$22(a1)
  168.         beq.s   Obj60_Display2
  169.         neg.w   $10(a0)
  170.  
  171. Obj60_Display2:
  172.         bra.w   DisplaySprite
  173. ; ===========================================================================
  174.  
  175. Obj60_Circle:               ; XREF: Obj60_MoveOrb
  176.         move.b  $26(a0),d0
  177.         jsr (CalcSine).l
  178.         asr.w   #4,d1
  179.         add.w   8(a1),d1
  180.         move.w  d1,8(a0)
  181.         asr.w   #4,d0
  182.         add.w   $C(a1),d0
  183.         move.w  d0,$C(a0)
  184.         move.b  $36(a1),d0
  185.         add.b   d0,$26(a0)
  186.         bra.w   DisplaySprite
  187. ; ===========================================================================
  188.  
  189. Obj60_ChkDel2:              ; XREF: Obj60_Index
  190.         bsr.w   SpeedToPos
  191.         tst.b   1(a0)
  192.         bpl.w   DeleteObject
  193.         bra.w   DisplaySprite
  194. ; ===========================================================================
  195. Ani_obj60:
  196.     include "_anim\obj60.asm"
  197.  
  198. ; ---------------------------------------------------------------------------
  199. ; Sprite mappings - Orbinaut enemy (LZ, SLZ, SBZ)
  200. ; ---------------------------------------------------------------------------
  201. Map_obj60:
  202.     include "_maps\obj60.asm"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement