nba-hangtime/VDASTUFF/PAPER.ASM

254 lines
5.1 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

**************************************************************************
* *
* 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