Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
- Obj48_Move: ; XREF: Obj48_Display2
- move.w d7,-(sp)
- lea ($FFFFFFFF).w,a1
- movea.w $34(a0),a1 ; загрузить главный объект (Эггмобиль)
- tst.b $36(a1) ; крутить шар во круг босса?
- bne.s Obj48_Move_Looping ; крутить, если да
- move.w #$100,d7 ; загрузить X-горизонтальный радиус
- tst.b $3D(a0) ; качать шар влево?
- bne.s loc_7B9C ; перейти, если да
- move.w $3E(a0),d0 ; заргузить относительную градусную меру цепочки
- addq.w #8,d0 ; прибавить 8 к градусной мере
- move.w d0,$3E(a0) ; сохранить текущую относительную градусную меру
- add.w d0,$26(a0) ; переместить шар вправо
- cmpi.w #$200,d0 ; шар дошел до $200 градусов?
- bne.s loc_7BB6 ; перейти, если нет
- move.b #1,$3D(a0) ; указать, что качать шар влево
- bra.s loc_7BB6 ; качать шар
- ; ===========================================================================
- loc_7B9C:
- move.w $3E(a0),d0 ; заргузить относительную градусную меру цепочки
- subq.w #8,d0 ; вычесть 8 к градусной мере
- move.w d0,$3E(a0) ; сохранить текущую относительную градусную меру
- add.w d0,$26(a0) ; переместить шар влево
- cmpi.w #-$200,d0 ; шар дошел до -$200 градусов?
- bne.s loc_7BB6 ; перейти, если нет
- move.b #0,$3D(a0) ; указать, что качать шар вправо
- bra.s loc_7BB6
- ; ===========================================================================
- Obj48_Move_Looping:
- move.b $36(a1),d0 ; заргузить скорость перемещения
- move.b $26(a0),d1 ; загрузить градус наклона
- sub.b d0,d1 ; переместить шар по кругу
- move.b d1,$26(a0) ; задать градус наклона
- subi.b #1,$37(a1) ; вычесть из X-горизонтального радиуса отдаления от босса
- move.b $37(a1),d7 ; загрузить X-горизонтальный радиус
- moveq #0,d1
- loc_7BB6:
- move.b $26(a0),d0 ; загрузить градусную меру
- ; End of function Obj48_Move
- ; ||||||||||||||| S U B R O U T I N E |||||||||||||||||||||||||||||||||||||||
- Obj15_Move2: ; XREF: Obj15_Move; Obj48_Display
- bsr.w CalcSine ; получить синус, косинус в d0 и в d1
- move.w $38(a0),d2 ; загрузить Y-поз штучки в d2
- move.w $3A(a0),d3 ; загрузить X-поз штучки в d3
- lea $28(a0),a2 ; загрузить таблицу адресов объектов в a2
- moveq #0,d6
- move.b (a2)+,d6 ; загрузить количество объектов
- loc_7BCE:
- ; получаем адрес объекта в цепочке
- moveq #0,d4
- move.b (a2)+,d4 ; загрузить адрес объекта в цепочке
- lsl.w #6,d4 ; умножить на $40
- addi.l #$FFD000,d4 ; прибавить $FFD000, чтобы получить полный адрес объекта
- movea.l d4,a1 ; загрузить адрес объекта
- ; перемещаем объект на X градусов вперед\назад
- moveq #0,d4
- move.b $3C(a1),d4 ; Y-поз объекта
- move.l d4,d5 ; переместить Y-поз объекта, очистить от мусора d5
- muls.w d0,d4 ; умножить синус с Y-поз объекта
- lsr.l #8,d4 ; поделить на 100
- muls.w d1,d5 ; умножить косинус с копией Y-поз объекта
- divs.w d7,d5 ; поделить на X
- ; объект относителен штучке
- add.w d2,d4 ; относительно штучки
- add.w d3,d5 ; относительно штучки
- move.w d4,$C(a1) ; переместить Y-поз объекта
- move.w d5,8(a1) ; переместить X-поз объекта
- dbf d6,loc_7BCE ; перемещать все объекты в цепочке
- move.w (sp)+,d7
- rts
- ; End of function Obj15_Move2
- ; ===========================================================================
Add Comment
Please, Sign In to add comment