home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMOS PD CD
/
amospdcd.iso
/
601-625
/
apd621
/
steven_mortimer
/
vecmorphbobs.amos
/
vecmorphbobs.amosSourceCode
< prev
Wrap
AMOS Source Code
|
1986-08-03
|
7KB
|
389 lines
'Quackers/Dm-x
'
'
'hello! this is my first atempt at 3D bob vectors, there
'is a slight problem with the bob scaling, but who cares!!!
'can you look through the source and gives us some hints!!!
'
'p.s. runs at 25 frames per secound!!!!
'
'
'
'a faster method of clearing a screen than cls!
'
'open up a black screen, and use screen copy!!!
'
'
'
'To get to run properly use break off, forbid etc.
Global X#,Y#,Z#
'_BOBS
'_MAKE
_DO
Procedure _DO
Unpack 10 To 2
Shift Up 1,0,3,1
Palette 0,0,0,0,0,0,0,0
Screen Open 1,400,200,4,Lowres
Paper 0
Curs Off
Flash Off
Cls
Screen Hide 1
Screen Open 0,400,200,4,Lowres
Paper 0
Curs Off
Flash Off
Cls
Get Sprite Palette
Screen 0
Double Buffer : Autoback 0
Wait Vbl
Screen Display 0,100,,,
Screen Display 2,100,,,
Wait Vbl
Dual Playfield 2,0
Wait Vbl
Dual Priority 0,2
Wait Vbl
Screen 2
Palette 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Hide
'
Degree
Dim S1(360),S2(360)
For F=0 To 360
S1(F)=Sin(F)*50
S2(F)=Sin(F)*20
Next F
Shift Off
Fade 1,0,$200,$400,$600,$0,$200,$400,$600,0,$8,$2A,$4C,$6F
Wait 16
Shift Up 1,0,3,1
Screen 0
ST=Start(11)
X1=90
Repeat
Add X1,2,0 To 358
Add Y1,3,0 To 357
X=S1(X1)
Y=S2(Y1)
Add POS,52,0 To 65468
PP=POS+ST
For F=1 To 13
Paste Bob X+Deek(PP),Y+Peek(PP+2),Peek(PP+3)
Add PP,4
Next F
Screen Swap
Wait Vbl
Screen Copy 1 To 0
Until Mouse Key
'16 frames per secound! (timed using TIMER!!)
End Proc
Procedure _MAKE
' y| /z
' | /
' |/
'------------x
' /|
' / |
' / |
'
NO=13
'
Screen Open 2,320,256,32,Lowres
Curs Off
Flash Off
Paper 0
Cls
Screen Hide 2
Screen Open 0,320,256,32,Lowres
Curs Off
Flash Off
Paper 0
Cls
Degree
'
'init 3d
'Extension E
'Extension E 0,0,0,0
'
Dim P(NO,3),B(NO,3)
Dim A(6,NO+1,3),S#(NO+1,3)
For MO=1 To 6
For F=1 To NO
Read X,Y,Z
X=X
Y=Y
A(MO,F,3)=Z
A(MO,F,1)=X
A(MO,F,2)=Y
Next F
Next MO
MORF=0
'
'3d stuff commented so not to load 3d
' Extension E 200
DIST=800
AX=0
AY=0
AZ=0
'
Reserve As Data 11,70000
ST=Start(11)
Bell
'
'
For F=1 To NO
B(F,1)=A(1,F,1)
B(F,2)=A(1,F,2)
B(F,3)=A(1,F,3)
Next F
MO=0
Get Sprite Palette
For G=0 To 10000
If G mod 216=0
Inc MO
If MO=7
End
End If
'init the morf
MORF=10
'stepsize
For CA=1 To NO
S#(CA,1)=(A(MO,CA,1)-A(MO-1,CA,1))/10
S#(CA,2)=(A(MO,CA,2)-A(MO-1,CA,2))/10
S#(CA,3)=(A(MO,CA,3)-A(MO-1,CA,3))/10
Next CA
End If
If MO=1
MORF=0
End If
'do morf
If MORF>0
Dec MORF
For CA=1 To NO
B(CA,1)=B(CA,1)+S#(CA,1)
B(CA,2)=B(CA,2)+S#(CA,2)
B(CA,3)=B(CA,3)+S#(CA,3)
If MORF=0
B(CA,1)=A(MO,CA,1)
B(CA,2)=A(MO,CA,2)
B(CA,3)=A(MO,CA,3)
End If
Next CA
End If
Add AX,3,0 To 357
Add AZ,5,0 To 355
Add AY,2,0 To 358
For F=1 To NO
X#=B(F,1)
Y#=B(F,2)
Z#=B(F,3)
ROTX[AX]
ROTY[AY]
ROTZ[AZ]
' X= Extension E(X#,Y#,Z#+DIST)
' Y= Extension E
P(F,1)=X
P(F,2)=Y
A=20-Int((Z#/25)+11)
P(F,3)=A
Next F
'lets work out the new order of them there bobs! , the ones closest,
'print last!!!
'use a bubble sort, so I can swap all three arrays at one!
PASSES=1
While PASSES<=NO-1
ITEM=1
While ITEM<=NO-1
If P(ITEM,3)>P(ITEM+1,3)
Swap P(ITEM,3),P(ITEM+1,3)
Swap P(ITEM,2),P(ITEM+1,2)
Swap P(ITEM,1),P(ITEM+1,1)
End If
Inc ITEM
Wend
Inc PASSES
Wend
'
'clear bobs
Screen Copy 2 To 0
'print new ones
For F=1 To NO
Paste Bob P(F,1),P(F,2),P(F,3)
Doke ST,P(F,1)
Poke ST+2,P(F,2)
Poke ST+3,P(F,3)
Add ST,4
If ST>Start(11)+68000
Bell
Print " error"
End
End If
Next F
Next G
'
'
'
'bob pos data... x,y,z positions
'
'
'
' o o o o
'
' o o
' o
' o o
'
' o o o o
'
Data -150,-150,0
Data -50,-150,0
Data 50,-150,0
Data 150,-150,0
Data -150,-50,0
Data 150,-50,0
Data -150,50,0
Data 150,50,0
Data -150,150,0
Data -50,150,0
Data 50,150,0
Data 150,150,0
Data 0,0,0
'
'CROSS 2D
Data -150,-150,0
Data 0,-150,0
Data 150,-150,0
Data 0,-75,0
Data -150,0,0
Data -75,0,0
Data 0,0,0
Data 75,0,0
Data 150,0,0
Data 0,75,0
Data -150,150,0
Data 0,150,0
Data 150,150,0
'HEXAGON
Data -50,-100,0
Data 0,-100,0
Data 50,-100,0
Data -50,100,0
Data 0,100,0
Data 50,100,0
Data -100,0,0
Data 100,0,0
Data 0,0,0
Data -75,50,0
Data 75,50,0
Data -75,-50,0
Data 75,-50,0
'
'ox Y
Data 100,100,100
Data 100,100,-100
Data 100,-100,100
Data 100,-100,-100
Data -100,100,100
Data -100,100,-100
Data -100,-100,100
Data -100,-100,-100
Data 100,100,100
Data 100,100,100
Data 100,100,100
Data 100,100,100
Data 100,100,100
'
'cross
Data 0,0,0
Data 0,0,-150
Data 0,0,150
Data 0,150,0
Data 0,-150,0
Data 150,0,0
Data -150,0,0
Data 0,0,-75
Data 0,0,75
Data 0,-75,0
Data 0,75,0
Data -75,0,0
Data 75,0,0
'
'first thing again!
Data -150,-150,0
Data -50,-150,0
Data 50,-150,0
Data 150,-150,0
Data -150,-50,0
Data 150,-50,0
Data -150,50,0
Data 150,50,0
Data -150,150,0
Data -50,150,0
Data 50,150,0
Data 150,150,0
Data 0,0,0
End Proc
'rotate around the z axis
Procedure ROTZ[A#]
X1#=(Cos(A#)*X#)+(-Sin(A#)*Y#)
Z1#=Z#
Y1#=(Sin(A#)*X#)+(Cos(A#)*Y#)
X#=X1#
Z#=Z1#
Y#=Y1#
End Proc
'rotate around the y axis
Procedure ROTY[A#]
X1#=(Cos(A#)*X#)+(-Sin(A#)*Z#)
Y1#=Y#
Z1#=(Sin(A#)*X#)+(Cos(A#)*Z#)
X#=X1#
Z#=Z1#
Y#=Y1#
End Proc
'rotate around the x axis
Procedure ROTX[A#]
Z1#=(Cos(A#)*Z#)+(-Sin(A#)*Y#)
X1#=X#
Y1#=(Sin(A#)*Z#)+(Cos(A#)*Y#)
X#=X1#
Z#=Z1#
Y#=Y1#
End Proc
Procedure _BOBS
BN=1
Screen Open 0,320,256,4,Lowres
Paper 0
Curs Off
Flash Off
Get Sprite Palette
For F#=5 To 14.5 Step 0.5
Cls
A#=F#/3
C=F#/5
D=F#/3
A=A#*2
B=A#
Ink 1
Circle F#+1,F#+1,F#
Paint F#+1,F#+1
Ink 2
Circle F#+C,F#-C,A
Paint F#+C,F#-C
Ink 3
Circle F#+D,F#-D,B
Paint F#+D,F#-D
Get Bob BN,0,0 To 10+F#*2,10+F#*2
Hot Spot BN,F#,F#
Inc BN
Next F#
End Proc