Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; ===========================================================================
- ; ---------------------------------------------------------------------------
- ; Object 85 - Eggman (FZ)
- ; ---------------------------------------------------------------------------
- Obj85_Delete:
- jmp DeleteObject
- ; ===========================================================================
- Obj85: ; XREF: Obj_Index
- moveq #0,d0
- move.b $24(a0),d0
- move.w Obj85_Index(pc,d0.w),d0
- jmp Obj85_Index(pc,d0.w)
- ; ===========================================================================
- Obj85_Index: dc.w Obj85_Main-Obj85_Index
- dc.w Obj85_Eggman-Obj85_Index
- dc.w loc_1A38E-Obj85_Index
- dc.w loc_1A346-Obj85_Index
- dc.w loc_1A2C6-Obj85_Index
- dc.w loc_1A3AC-Obj85_Index
- dc.w loc_1A264-Obj85_Index
- Obj85_ObjData: dc.w $100, $100, $470 ; X pos, Y pos, VRAM setting
- dc.l Map_obj82 ; mappings pointer
- dc.w $25B0, $590, $300
- dc.l Map_obj84
- dc.w $26E0, $596, $3A0
- dc.l Map_FZBoss
- dc.w $26E0, $596, $470
- dc.l Map_obj82
- dc.w $26E0, $596, $400
- dc.l Map_Eggman
- dc.w $26E0, $596, $400
- dc.l Map_Eggman
- Obj85_ObjData2: dc.b 2, 0, 4, $20, $19 ; routine num, animation, sprite priority, width, height
- dc.b 4, 0, 1, $12, 8
- dc.b 6, 0, 3, 0, 0
- dc.b 8, 0, 3, 0, 0
- dc.b $A, 0, 3, $20, $20
- dc.b $C, 0, 3, 0, 0
- ; ===========================================================================
- Obj85_Main: ; XREF: Obj85_Index
- lea Obj85_ObjData(pc),a2
- lea Obj85_ObjData2(pc),a3
- movea.l a0,a1
- moveq #5,d1
- bra.s Obj85_LoadBoss
- ; ===========================================================================
- Obj85_Loop:
- jsr SingleObjLoad2
- bne.s loc_19E20
- Obj85_LoadBoss: ; XREF: Obj85_Main
- move.b #$85,(a1)
- move.w (a2)+,8(a1)
- move.w (a2)+,$C(a1)
- move.w (a2)+,2(a1)
- move.l (a2)+,4(a1)
- move.b (a3)+,$24(a1)
- move.b (a3)+,$1C(a1)
- move.b (a3)+,$18(a1)
- move.b (a3)+,$17(a1)
- move.b (a3)+,$16(a1)
- move.b #4,1(a1)
- bset #7,1(a0)
- move.l a0,$34(a1)
- dbf d1,Obj85_Loop ; do 6 objects
- loc_19E20:
- lea $36(a0),a2
- jsr SingleObjLoad
- bne.s loc_19E5A
- move.b #$86,(a1) ; load energy ball object
- move.w a1,(a2) ; remember its slot
- move.l a0,$34(a1) ; tell object this slot
- lea $38(a0),a2
- moveq #0,d2
- moveq #3,d1
- loc_19E3E:
- jsr SingleObjLoad2
- bne.s loc_19E5A
- move.w a1,(a2)+ ; remember object's slot
- move.b #$84,(a1) ; load crushing cylinder object
- move.l a0,$34(a1) ; tell object this slot
- move.b d2,$28(a1)
- addq.w #2,d2
- dbf d1,loc_19E3E ; do 4 objects
- loc_19E5A:
- move.w #0,$34(a0)
- move.b #var_BHits_FZ,$21(a0)
- move.w #-1,$30(a0)
- Obj85_Eggman: ; XREF: Obj85_Index
- moveq #0,d0
- move.b $34(a0),d0
- move.w off_19E80(pc,d0.w),d0
- jsr off_19E80(pc,d0.w)
- jmp DisplaySprite
- ; ===========================================================================
- off_19E80: dc.w loc_19E90-off_19E80
- dc.w loc_19EA8-off_19E80
- dc.w loc_19FE6-off_19E80
- dc.w loc_1A02A-off_19E80
- dc.w loc_1A074-off_19E80
- dc.w loc_1A112-off_19E80
- dc.w loc_1A192-off_19E80
- dc.w loc_1A1D4-off_19E80
- ; ===========================================================================
- loc_19E90: ; XREF: off_19E80
- tst.l ($FFFFF680).w ; PLC ready?
- bne.s loc_19EA2 ; if not, branch
- cmpi.w #$2450,($FFFFF700).w ; is camera at $2450 X-pos?
- bcs.s loc_19EA2 ; if still not, branch
- addq.b #2,$34(a0)
- loc_19EA2:
- addq.l #1,($FFFFF636).w ; randomize!
- rts
- ; ===========================================================================
- loc_19EA8: ; XREF: off_19E80
- tst.w $30(a0)
- bpl.s loc_19F10
- clr.w $30(a0)
- jsr (RandomNumber).l
- andi.w #$C,d0
- move.w d0,d1
- addq.w #2,d1
- tst.l d0
- bpl.s loc_19EC6
- exg d1,d0
- loc_19EC6:
- ; set capsules to move
- lea word_19FD6(pc),a1
- move.w (a1,d0.w),d0
- move.w (a1,d1.w),d1
- move.w d0,$30(a0)
- moveq #-1,d2
- move.w $38(a0,d0.w),d2
- movea.l d2,a1
- move.b #-1,$29(a1)
- move.w #-1,$30(a1)
- move.w $38(a0,d1.w),d2
- movea.l d2,a1
- move.b #1,$29(a1)
- move.w #0,$30(a1)
- move.w #1,$32(a0)
- clr.b $35(a0)
- move.w #$B7,d0
- jsr (PlaySound_Special).l ; play rumbling sound
- loc_19F10:
- tst.w $32(a0)
- bmi.w loc_19FA6
- bclr #0,$22(a0)
- move.w ($FFFFD008).w,d0
- sub.w 8(a0),d0
- bcs.s loc_19F2E
- bset #0,$22(a0)
- loc_19F2E:
- move.w #$2B,d1
- move.w #$14,d2
- move.w #$14,d3
- move.w 8(a0),d4
- jsr SolidObject
- tst.w d4 ; was the capsule touched by Sonic?
- bgt.s loc_19F50 ; if yes, branch
- loc_19F48:
- tst.b $35(a0)
- bne.s loc_19F88
- bra.s loc_19F96
- ; ===========================================================================
- loc_19F50:
- addq.w #7,($FFFFF636).w
- cmpi.b #2,($FFFFD01C).w ; is Sonic rolling
- bne.s loc_19F48 ; if not, branch
- move.w #$300,d0
- btst #0,$22(a0)
- bne.s loc_19F6A
- neg.w d0
- loc_19F6A:
- move.w d0,($FFFFD010).w ; make Sonic bounce
- tst.b $35(a0)
- bne.s loc_19F88
- subq.b #1,$21(a0) ; subtract 1 from hits number
- move.b #$64,$35(a0)
- move.w #$AC,d0
- jsr (PlaySound_Special).l ; play boss damage sound
- loc_19F88:
- subq.b #1,$35(a0)
- beq.s loc_19F96
- move.b #3,$1C(a0)
- bra.s loc_19F9C
- ; ===========================================================================
- loc_19F96:
- move.b #1,$1C(a0)
- loc_19F9C:
- lea Ani_obj82(pc),a1
- jmp AnimateSprite
- ; ===========================================================================
- loc_19FA6:
- tst.b $21(a0) ; no more health?
- beq.s loc_19FBC ; if yes, branch
- addq.b #2,$34(a0)
- move.w #-1,$30(a0)
- clr.w $32(a0)
- rts
- ; ===========================================================================
- loc_19FBC:
- move.b #6,$34(a0) ; => "loc_1A02A"
- move.w #$25C0,8(a0) ; move Eggman
- move.w #$53C,$C(a0) ;
- move.b #$14,$16(a0)
- rts
- ; ===========================================================================
- word_19FD6: dc.w 0, 2, 2, 4, 4, 6, 6, 0
- ; ===========================================================================
- loc_19FE6: ; XREF: off_19E80
- moveq #-1,d0
- move.w $36(a0),d0
- movea.l d0,a1
- tst.w $30(a0)
- bpl.s loc_1A000
- clr.w $30(a0)
- move.b #-1,$29(a1)
- bsr.s loc_1A020
- loc_1A000:
- moveq #$F,d0
- and.w ($FFFFFE0E).w,d0
- bne.s loc_1A00A
- bsr.s loc_1A020
- loc_1A00A:
- tst.w $32(a0)
- beq.s locret_1A01E
- subq.b #2,$34(a0)
- move.w #-1,$30(a0)
- clr.w $32(a0)
- locret_1A01E:
- rts
- ; ===========================================================================
- loc_1A020:
- move.w #$B1,d0
- jmp (PlaySound_Special).l ; play electricity sound
- ; ===========================================================================
- loc_1A02A: ; XREF: off_19E80
- ; Eggman falls from the capsule
- move.b #$30,$17(a0)
- bset #0,$22(a0)
- jsr SpeedToPos
- move.b #6,$1A(a0)
- addi.w #$10,$12(a0) ; make Eggman fall increasingly fast
- cmpi.w #$59C,$C(a0) ; is Eggman's Y-pos $59C? (floor)
- bcs.s loc_1A070 ; if less than, branch
- move.w #$59C,$C(a0) ; fix Y-pos
- addq.b #2,$34(a0) ; => "loc_1A074" (he's landed, time for another code!)
- move.b #$20,$17(a0)
- move.w #$100,$10(a0) ; move him right
- move.w #-$100,$12(a0) ; make him jump up
- addq.b #2,($FFFFF742).w ; increase dyn resize routine
- loc_1A070:
- bra.w loc_1A166
- ; ===========================================================================
- loc_1A074: ; XREF: off_19E80
- ; he's escaping!
- bset #0,$22(a0) ; he's moving right
- move.b #4,$1C(a0)
- jsr SpeedToPos
- addi.w #$10,$12(a0) ; make Eggman fall
- cmpi.w #$5A3,$C(a0) ; is Eggman's Y-pos $5A3? (floor?
- bcs.s loc_1A09A ; if less than, branch
- move.w #-$40,$12(a0) ; small bounce up
- loc_1A09A:
- move.w #$400,$10(a0) ; set running speed
- move.w 8(a0),d0
- sub.w ($FFFFD008).w,d0 ; has Sonic overtook him?
- bpl.s loc_1A0B4 ; if not, branch
- move.w #$500,$10(a0) ; set running speed (he's faster than Sonic =P)
- bra.w loc_1A0F2
- ; ===========================================================================
- loc_1A0B4:
- ; set Eggman's speed depending on distance between him and Sonic
- subi.w #$70,d0
- bcs.s loc_1A0F2
- subi.w #$100,$10(a0)
- subq.w #8,d0
- bcs.s loc_1A0F2
- subi.w #$100,$10(a0)
- subq.w #8,d0
- bcs.s loc_1A0F2
- subi.w #$80,$10(a0)
- subq.w #8,d0
- bcs.s loc_1A0F2
- subi.w #$80,$10(a0)
- subq.w #8,d0
- bcs.s loc_1A0F2
- subi.w #$80,$10(a0)
- subi.w #$38,d0
- bcs.s loc_1A0F2
- clr.w $10(a0)
- loc_1A0F2:
- ; Eggman jumps in a ship
- cmpi.w #$26A0,8(a0) ; is the ship close enough?
- bcs.s loc_1A110 ; if not, branch
- move.w #$26A0,8(a0) ; fix his position to make everything go perfect
- move.w #$240,$10(a0) ; set right speed for entering teh ship
- move.w #-$4C0,$12(a0) ; make him jump high
- addq.b #2,$34(a0) ; => "loc_1A112"
- loc_1A110:
- bra.s loc_1A15C
- ; ===========================================================================
- loc_1A112: ; XREF: off_19E80
- ; Eggman in his jump, falling exactly in the ship
- jsr SpeedToPos
- cmpi.w #$26E0,8(a0) ; is Eggman at the same X-pos as the ship? (exactly above the ship)
- bcs.s loc_1A124 ; if not, branch
- clr.w $10(a0) ; clear X-vel (make him stop)
- loc_1A124:
- addi.w #$34,$12(a0) ; make him fall
- tst.w $12(a0) ; is Eggman falling down?
- bmi.s loc_1A142 ; if not, branch
- cmpi.w #$592,$C(a0) ; is Eggman at the same Y-pos as the ship?
- bcs.s loc_1A142 ; if not, branch
- move.w #$592,$C(a0) ; fix Y-pos
- clr.w $12(a0) ; clear Y-vel
- loc_1A142:
- move.w $10(a0),d0
- or.w $12(a0),d0
- bne.s loc_1A15C ; if Eggman isn't in the ship yet, branch
- addq.b #2,$34(a0) ; => "loc_1A192"
- move.w #-$180,$12(a0) ; set raising speed
- move.b #1,$21(a0) ; set one hit to destroy teh ship
- loc_1A15C:
- lea Ani_obj82(pc),a1
- jsr AnimateSprite
- loc_1A166:
- cmpi.w #$2700,($FFFFF72A).w
- bge.s loc_1A172
- addq.w #2,($FFFFF72A).w ; move camera right
- loc_1A172:
- cmpi.b #$C,$34(a0)
- bge.s locret_1A190
- move.w #$1B,d1
- move.w #$70,d2
- move.w #$71,d3
- move.w 8(a0),d4
- jmp SolidObject
- ; ===========================================================================
- locret_1A190:
- rts
- ; ===========================================================================
- loc_1A192: ; XREF: off_19E80
- move.l #Map_Eggman,4(a0) ; use ship mappings
- move.w #$400,2(a0) ; setup art ptr
- move.b #0,$1C(a0)
- bset #0,$22(a0)
- jsr SpeedToPos
- cmpi.w #$544,$C(a0) ; has the ship raised high enough?
- bcc.s loc_1A1D0 ; if not, branch
- move.w #$180,$10(a0) ; make ship move right
- move.w #-$18,$12(a0) ; make ship move slightly up
- move.b #$F,$20(a0) ; touch repsonse!
- addq.b #2,$34(a0) ; => "loc_1A1D4"
- loc_1A1D0:
- bra.w loc_1A15C
- ; ===========================================================================
- loc_1A1D4: ; XREF: off_19E80
- ; some stuff to process exploding ship
- bset #0,$22(a0)
- jsr SpeedToPos
- tst.w $30(a0)
- bne.s loc_1A1FC
- tst.b $20(a0) ; was the ship been hit?
- bne.s loc_1A216 ; if not, branch
- move.w #$1E,$30(a0)
- move.w #$AC,d0
- jsr (PlaySound_Special).l ; play boss damage sound
- loc_1A1FC:
- subq.w #1,$30(a0)
- bne.s loc_1A216
- tst.b $22(a0)
- bpl.s loc_1A210
- move.w #$60,$12(a0)
- bra.s loc_1A216
- ; ===========================================================================
- loc_1A210:
- move.b #$F,$20(a0)
- loc_1A216:
- cmpi.w #$2790,($FFFFD008).w ; is Sonic's X-axis more than $2790?
- blt.s loc_1A23A ; if not, branch
- move.b #1,($FFFFF7CC).w ; lock controls
- move.w #0,(SonicControl) ; clear joypad input
- clr.w ($FFFFD014).w ; clear Sonic's inertia
- tst.w $12(a0) ; is sonic's Y speed positive?
- bpl.s loc_1A248 ; if yes, branch
- move.w #(Up)<<8,(SonicControl) ; hold Up button
- loc_1A23A:
- cmpi.w #$27E0,($FFFFD008).w ; is Sonic's X-axis more than $27E0?
- blt.s loc_1A248 ; if not, branch
- move.w #$27E0,($FFFFD008).w ; set Sonic's X-axis to $27E0
- ; Vladikcomper: Some code was changed to fit level order.
- loc_1A248:
- cmpi.w #$2900,8(a0)
- bcs.s loc_1A260
- tst.b 1(a0)
- bmi.s loc_1A260
- move.b #$18,($FFFFF600).w ; set game mode to Ending sequence
- lea LevelOrder,a2 ; load level order array
- move.w $2C(a2),d0
- beq.s @RemoveObject
- move.w d0,($FFFFFE10).w
- move.w #1,($FFFFFE02).w ; set restart level flag
- move.b #$C,($FFFFF600).w ; set game mode to level
- @RemoveObject:
- bra.w Obj85_Delete
- ; ===========================================================================
- loc_1A260:
- bra.w loc_1A15C
- ; ===========================================================================
- loc_1A264: ; XREF: Obj85_Index
- movea.l $34(a0),a1
- move.b (a1),d0
- cmp.b (a0),d0
- bne.w Obj85_Delete
- move.b #7,$1C(a0)
- cmpi.b #$C,$34(a1)
- bge.s loc_1A280
- bra.s loc_1A2A6
- ; ===========================================================================
- loc_1A280:
- tst.w $10(a1)
- beq.s loc_1A28C
- move.b #$B,$1C(a0)
- loc_1A28C:
- lea Ani_Eggman(pc),a1
- jsr AnimateSprite
- loc_1A296:
- movea.l $34(a0),a1
- move.w 8(a1),8(a0)
- move.w $C(a1),$C(a0)
- loc_1A2A6:
- movea.l $34(a0),a1
- move.b $22(a1),$22(a0)
- moveq #3,d0
- and.b $22(a0),d0
- andi.b #-4,1(a0)
- or.b d0,1(a0)
- jmp DisplaySprite
- ; ===========================================================================
- loc_1A2C6: ; XREF: Obj85_Index
- movea.l $34(a0),a1
- move.b (a1),d0
- cmp.b (a0),d0
- bne.w Obj85_Delete
- cmpi.l #Map_Eggman,4(a1)
- beq.s loc_1A2E4
- move.b #$A,$1A(a0)
- bra.s loc_1A2A6
- ; ===========================================================================
- loc_1A2E4:
- move.b #1,$1C(a0)
- tst.b $21(a1)
- ble.s loc_1A312
- move.b #6,$1C(a0)
- move.l #Map_Eggman,4(a0)
- move.w #$400,2(a0)
- lea Ani_Eggman(pc),a1
- jsr AnimateSprite
- bra.w loc_1A296
- ; ===========================================================================
- loc_1A312:
- tst.b 1(a0)
- bpl.w Obj85_Delete
- bsr.w BossDefeated
- move.b #2,$18(a0)
- move.b #0,$1C(a0)
- move.l #Map_Eggman2,4(a0)
- move.w #$3A0,2(a0)
- lea Ani_obj85(pc),a1
- jsr AnimateSprite
- bra.w loc_1A296
- ; ===========================================================================
- loc_1A346: ; XREF: Obj85_Index
- bset #0,$22(a0)
- movea.l $34(a0),a1
- cmpi.l #Map_Eggman,4(a1)
- beq.s loc_1A35E
- bra.w loc_1A2A6
- ; ===========================================================================
- loc_1A35E:
- move.w 8(a1),8(a0)
- move.w $C(a1),$C(a0)
- tst.b $1E(a0)
- bne.s loc_1A376
- move.b #$14,$1E(a0)
- loc_1A376:
- subq.b #1,$1E(a0)
- bgt.s loc_1A38A
- addq.b #1,$1A(a0)
- cmpi.b #2,$1A(a0)
- bgt.w Obj85_Delete
- loc_1A38A:
- bra.w loc_1A296
- ; ===========================================================================
- loc_1A38E: ; XREF: Obj85_Index
- move.b #$B,$1A(a0)
- move.w ($FFFFD008).w,d0
- sub.w 8(a0),d0
- bcs.s loc_1A3A6
- tst.b 1(a0)
- bpl.w Obj85_Delete
- loc_1A3A6:
- jmp DisplaySprite
- ; ===========================================================================
- loc_1A3AC: ; XREF: Obj85_Index
- move.b #0,$1A(a0)
- bset #0,$22(a0)
- movea.l $34(a0),a1
- cmpi.b #$C,$34(a1)
- bne.s loc_1A3D0
- cmpi.l #Map_Eggman,4(a1)
- beq.w Obj85_Delete
- loc_1A3D0:
- bra.w loc_1A2A6
- ; ===========================================================================
- Ani_obj85:
- include "_anim\obj85.asm"
- Map_Eggman2:
- include "_maps\Eggman2.asm"
- Map_FZBoss:
- include "_maps\FZ boss.asm"
- ; ===========================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement