254 lines
5.1 KiB
NASM
254 lines
5.1 KiB
NASM
|
**************************************************************************
|
|||
|
* *
|
|||
|
* This loop spawns off the individual paper processes *
|
|||
|
* *
|
|||
|
**************************************************************************
|
|||
|
|
|||
|
movk 2,a5
|
|||
|
brc2 movi a_big_paper,a9 ; a9 = animation to use
|
|||
|
create pid_bani,garbage_straight
|
|||
|
movi a_lil_paper,a9 ; a9 = animation to use
|
|||
|
create pid_bani,garbage_straight
|
|||
|
movi a_leaf,a9 ; a9 = animation to use
|
|||
|
create pid_bani,garbage_straight
|
|||
|
create pid_bani,garbage_straight
|
|||
|
create pid_bani,garbage_straight ; straight does NOT loop on screen
|
|||
|
|
|||
|
movi a_big_paper,a9
|
|||
|
create pid_bani,garbage_loop ; does a Loop-dee-Loop onscreen
|
|||
|
movi a_lil_paper,a9
|
|||
|
create pid_bani,garbage_loop
|
|||
|
dsj a5,brc2
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
;**********************************************
|
|||
|
|
|||
|
|
|||
|
garbage_straight
|
|||
|
callr get_paper_object ; you can write your version of this
|
|||
|
simp4 callr paper_start_position ; compute where to start paper (offscreen)
|
|||
|
callr paper_glide ; random velocities (to look real)
|
|||
|
callr paper_glide ; random velocities (to look real)
|
|||
|
clr a1 ; dx
|
|||
|
clr a2 ; dy
|
|||
|
jsrp paper_fly_offscreen ; wait for piece to go offscreen
|
|||
|
jruc simp4
|
|||
|
|
|||
|
|
|||
|
garbage_loop
|
|||
|
callr get_paper_object
|
|||
|
|
|||
|
ploop1 callr paper_start_position
|
|||
|
callr paper_glide
|
|||
|
*
|
|||
|
* this code makes the piece go Loop-dee-Loop
|
|||
|
*
|
|||
|
movi ->2800,a10 ; dy
|
|||
|
ploop2 movi ->4000,a1 ; dx
|
|||
|
move *a8(oxvel),a0,l
|
|||
|
abs a0
|
|||
|
cmpi >8000,a0
|
|||
|
jrhi ploop3
|
|||
|
movi >5000,a10 ; reached peak ---> head downwards
|
|||
|
ploop3 move a10,a2
|
|||
|
callr paper_loop_sleep
|
|||
|
cmpi ->20000,a1
|
|||
|
jrgt ploop2
|
|||
|
|
|||
|
ploop4 movi >3000,a1 ; dx
|
|||
|
movi >3000,a2 ; dy
|
|||
|
callr paper_loop_sleep
|
|||
|
|
|||
|
cmpi >30000,a2
|
|||
|
jrlt ploop5
|
|||
|
movi >30000,a2
|
|||
|
ploop5
|
|||
|
cmpi >30000,a1
|
|||
|
jrlt ploop4
|
|||
|
|
|||
|
movi >3000,a1 ; dx
|
|||
|
movi ->2000,a2 ; dy
|
|||
|
jsrp paper_fly_offscreen
|
|||
|
jruc ploop1 ; offscreen = start over agin !
|
|||
|
|
|||
|
|
|||
|
paper_fly_offscreen
|
|||
|
move a1,*a13(p_store1),w
|
|||
|
move a2,*a13(p_store2),w
|
|||
|
|
|||
|
pfo4 move *a13(p_store1),a1,w
|
|||
|
move *a13(p_store2),a2,w
|
|||
|
callr paper_loop_sleep
|
|||
|
calla next_anirate
|
|||
|
move @worldtlx1+16,a1,w
|
|||
|
addi scrrgt,a1 ; a1 = right edge
|
|||
|
move *a8(oxpos),a0,w ; a0 = obj position
|
|||
|
cmp a1,a0
|
|||
|
jrlt pfo4 ; on screen = loopy
|
|||
|
retp
|
|||
|
|
|||
|
*
|
|||
|
* Input:
|
|||
|
* a1 = x velocity change
|
|||
|
* a2 = y velocity change
|
|||
|
*
|
|||
|
paper_loop_sleep
|
|||
|
move *a8(oyvel),a0,l
|
|||
|
add a2,a0
|
|||
|
move a0,*a8(oyvel),l
|
|||
|
move *a8(oxvel),a0,l
|
|||
|
add a1,a0
|
|||
|
move a0,*a8(oxvel),l
|
|||
|
|
|||
|
pull a11 ; return address
|
|||
|
sleep 1
|
|||
|
calla next_anirate
|
|||
|
|
|||
|
move *a8(oxvel),a1,l
|
|||
|
move *a8(oyvel),a2,l
|
|||
|
jump a11 ; return
|
|||
|
|
|||
|
|
|||
|
paper_glide
|
|||
|
pull a11
|
|||
|
movi >20000,a0
|
|||
|
calla srand
|
|||
|
subi >4000,a0 ; nudge things up
|
|||
|
move a0,*a8(oyvel),l
|
|||
|
|
|||
|
movi >20,a0
|
|||
|
movi >08,a1
|
|||
|
calla randu_minimum
|
|||
|
move a0,a10
|
|||
|
glid3 sleep 1
|
|||
|
calla next_anirate
|
|||
|
dsj a10,glid3
|
|||
|
jump a11 ; return
|
|||
|
|
|||
|
;******************
|
|||
|
|
|||
|
get_paper_object
|
|||
|
pull a11
|
|||
|
|
|||
|
movi >30,a0
|
|||
|
calla randu
|
|||
|
calla prcslp
|
|||
|
|
|||
|
movk 4,a0
|
|||
|
calla init_anirate
|
|||
|
move *a9,a5,l
|
|||
|
|
|||
|
; you probably have a routine which
|
|||
|
; does the equivalent of this !
|
|||
|
calla gso_dmawnz ; get object with write non-zero bit set
|
|||
|
|
|||
|
movi baklst4,b4
|
|||
|
move a8,a0
|
|||
|
calla insobj_v ; insert on baklst 4 !!
|
|||
|
jump a11
|
|||
|
|
|||
|
*
|
|||
|
* Start position = just off the left side of the screen (flies to the right)
|
|||
|
*
|
|||
|
paper_start_position
|
|||
|
movi >0000fff0,a4
|
|||
|
movi >40,a0 ; this range !!
|
|||
|
movi >80,a1 ; at least this low on the screen
|
|||
|
calla randu_minimum ; a1 = randomness #
|
|||
|
sll 16,a0 ; random starting y position
|
|||
|
addxy a0,a4
|
|||
|
callr a4_to_world_coor ; and rets
|
|||
|
|
|||
|
movi >40000,a0
|
|||
|
movi >40000,a1
|
|||
|
calla randu_minimum
|
|||
|
move a0,*a8(oxvel),l ; random starting vel
|
|||
|
rets
|
|||
|
|
|||
|
*
|
|||
|
* Convert A4 (screen coordinates) to world coordinates
|
|||
|
*
|
|||
|
a4_to_world_coor
|
|||
|
move @worldtlx1+16,a0,w
|
|||
|
move @worldtly+16,a1,w
|
|||
|
sll 16,a1
|
|||
|
or a0,a1
|
|||
|
addxy a1,a4 ; a4 = coordinate for obj
|
|||
|
calla set_xy_coordinates
|
|||
|
rets
|
|||
|
|
|||
|
|
|||
|
;*****************************************************************
|
|||
|
|
|||
|
|
|||
|
*
|
|||
|
* Garbage/Paper animations
|
|||
|
*
|
|||
|
|
|||
|
a_paper1 .long PAPER1
|
|||
|
.long PAPER2
|
|||
|
.long PAPER3
|
|||
|
.long PAPER4
|
|||
|
.long PAPER5
|
|||
|
.long PAPER6
|
|||
|
.long PAPER7
|
|||
|
.long PAPER8
|
|||
|
.long PAPER9
|
|||
|
.long 0
|
|||
|
|
|||
|
|
|||
|
a_big_paper
|
|||
|
.long LGSHEET1
|
|||
|
.long LGSHEET2
|
|||
|
.long LGSHEET3
|
|||
|
.long LGSHEET4
|
|||
|
.long LGSHEET5
|
|||
|
.long LGSHEET6
|
|||
|
.long LGSHEET7
|
|||
|
.long LGSHEET8
|
|||
|
.long LGSHEET9
|
|||
|
.long ani_jump,a_big_paper
|
|||
|
|
|||
|
a_lil_paper
|
|||
|
.long SMSHEET1
|
|||
|
.long SMSHEET2
|
|||
|
.long SMSHEET3
|
|||
|
.long SMSHEET4
|
|||
|
.long SMSHEET5
|
|||
|
.long SMSHEET6
|
|||
|
.long SMSHEET7
|
|||
|
.long SMSHEET8
|
|||
|
.long SMSHEET9
|
|||
|
.long ani_jump,a_lil_paper
|
|||
|
|
|||
|
a_leaf .long LEAF1
|
|||
|
.long LEAF2
|
|||
|
.long LEAF3
|
|||
|
.long LEAF4
|
|||
|
.long LEAF5
|
|||
|
.long LEAF6
|
|||
|
.long LEAF7
|
|||
|
.long LEAF8
|
|||
|
.long ani_jump,a_leaf
|
|||
|
|
|||
|
|
|||
|
|
|||
|
*
|
|||
|
* LOD file for paper/garbage images
|
|||
|
*
|
|||
|
C:\VIDEO\KOMBAT3\IMG\MKBGANI2.IMG
|
|||
|
---> PAPER1,LGSHEET1,SMSHEET1,LEAF1,SKTORCH1
|
|||
|
POF>
|
|||
|
---> PAPER2,PAPER3,PAPER4,PAPER5,PAPER6,PAPER7,PAPER8,PAPER9
|
|||
|
---> LGSHEET2,LGSHEET3,LGSHEET4,LGSHEET5,LGSHEET6,LGSHEET7
|
|||
|
---> LGSHEET8,LGSHEET9,SMSHEET2,SMSHEET3,SMSHEET4,SMSHEET5
|
|||
|
---> SMSHEET6,SMSHEET7,SMSHEET8,SMSHEET9,LEAF2,LEAF3,LEAF4,LEAF5
|
|||
|
---> LEAF6,LEAF7,LEAF8
|
|||
|
|
|||
|
|