home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 601-625 / apd621 / steven_mortimer / vecmorphbobs.amos / vecmorphbobs.amosSourceCode < prev   
AMOS Source Code  |  1986-08-03  |  7KB  |  389 lines

  1. 'Quackers/Dm-x 
  2. '
  3. '
  4. 'hello! this is my first atempt at 3D bob vectors, there 
  5. 'is a slight problem with the bob scaling, but who cares!!!
  6. 'can you look through the source and gives us some hints!!!
  7. '
  8. 'p.s. runs at 25 frames per secound!!!!
  9. '
  10. '
  11. '
  12. 'a faster method of clearing a screen than cls!
  13. '
  14. 'open up a black screen, and use screen copy!!!
  15. '
  16. '
  17. '
  18. 'To get to run properly use break off, forbid etc. 
  19.  
  20. Global X#,Y#,Z#
  21. '_BOBS 
  22. '_MAKE 
  23. _DO
  24. Procedure _DO
  25.    Unpack 10 To 2
  26.    Shift Up 1,0,3,1
  27.    Palette 0,0,0,0,0,0,0,0
  28.    Screen Open 1,400,200,4,Lowres
  29.    Paper 0
  30.    Curs Off 
  31.    Flash Off 
  32.    Cls 
  33.    Screen Hide 1
  34.    Screen Open 0,400,200,4,Lowres
  35.    Paper 0
  36.    Curs Off 
  37.    Flash Off 
  38.    Cls 
  39.    Get Sprite Palette 
  40.    Screen 0
  41.    Double Buffer : Autoback 0
  42.    Wait Vbl 
  43.    Screen Display 0,100,,,
  44.    Screen Display 2,100,,,
  45.    Wait Vbl 
  46.    Dual Playfield 2,0
  47.    Wait Vbl 
  48.    Dual Priority 0,2
  49.    Wait Vbl 
  50.    Screen 2
  51.    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
  52.    Hide 
  53.    '
  54.    Degree 
  55.    Dim S1(360),S2(360)
  56.    For F=0 To 360
  57.       S1(F)=Sin(F)*50
  58.       S2(F)=Sin(F)*20
  59.    Next F
  60.    Shift Off 
  61.    Fade 1,0,$200,$400,$600,$0,$200,$400,$600,0,$8,$2A,$4C,$6F
  62.    Wait 16
  63.    Shift Up 1,0,3,1
  64.    Screen 0
  65.    ST=Start(11)
  66.    X1=90
  67.    Repeat 
  68.       Add X1,2,0 To 358
  69.       Add Y1,3,0 To 357
  70.       X=S1(X1)
  71.       Y=S2(Y1)
  72.       Add POS,52,0 To 65468
  73.       PP=POS+ST
  74.       For F=1 To 13
  75.          Paste Bob X+Deek(PP),Y+Peek(PP+2),Peek(PP+3)
  76.          Add PP,4
  77.       Next F
  78.       Screen Swap 
  79.       Wait Vbl 
  80.       Screen Copy 1 To 0
  81.    Until Mouse Key
  82.    '16 frames per secound! (timed using TIMER!!)
  83. End Proc
  84.  
  85. Procedure _MAKE
  86.    '    y|  /z  
  87.    '     | /  
  88.    '     |/   
  89.    '------------x 
  90.    '    /|    
  91.    '   / |      
  92.    '  /  |  
  93.    '
  94.    NO=13
  95.    '
  96.    Screen Open 2,320,256,32,Lowres
  97.    Curs Off 
  98.    Flash Off 
  99.    Paper 0
  100.    Cls 
  101.    Screen Hide 2
  102.    Screen Open 0,320,256,32,Lowres
  103.    Curs Off 
  104.    Flash Off 
  105.    Paper 0
  106.    Cls 
  107.    Degree 
  108.    '
  109.    'init 3d 
  110.    'Extension E 
  111.    'Extension E 0,0,0,0 
  112.    '
  113.    Dim P(NO,3),B(NO,3)
  114.    Dim A(6,NO+1,3),S#(NO+1,3)
  115.    For MO=1 To 6
  116.       For F=1 To NO
  117.          Read X,Y,Z
  118.          X=X
  119.          Y=Y
  120.          A(MO,F,3)=Z
  121.          A(MO,F,1)=X
  122.          A(MO,F,2)=Y
  123.       Next F
  124.    Next MO
  125.    MORF=0
  126.    '
  127.    '3d stuff commented so not to load 3d
  128.   ' Extension E 200
  129.    DIST=800
  130.    AX=0
  131.    AY=0
  132.    AZ=0
  133.    '
  134.    Reserve As Data 11,70000
  135.    ST=Start(11)
  136. Bell 
  137.    '
  138.    '
  139.    For F=1 To NO
  140.       B(F,1)=A(1,F,1)
  141.       B(F,2)=A(1,F,2)
  142.       B(F,3)=A(1,F,3)
  143.    Next F
  144.    MO=0
  145.    Get Sprite Palette 
  146.    For G=0 To 10000
  147.       If G mod 216=0
  148.          Inc MO
  149.          If MO=7
  150.             End 
  151.          End If 
  152.          'init the morf 
  153.          MORF=10
  154.          'stepsize
  155.          For CA=1 To NO
  156.             S#(CA,1)=(A(MO,CA,1)-A(MO-1,CA,1))/10
  157.             S#(CA,2)=(A(MO,CA,2)-A(MO-1,CA,2))/10
  158.             S#(CA,3)=(A(MO,CA,3)-A(MO-1,CA,3))/10
  159.          Next CA
  160.       End If 
  161.       If MO=1
  162.          MORF=0
  163.       End If 
  164.       'do morf 
  165.       If MORF>0
  166.          Dec MORF
  167.          For CA=1 To NO
  168.             B(CA,1)=B(CA,1)+S#(CA,1)
  169.             B(CA,2)=B(CA,2)+S#(CA,2)
  170.             B(CA,3)=B(CA,3)+S#(CA,3)
  171.             If MORF=0
  172.                B(CA,1)=A(MO,CA,1)
  173.                B(CA,2)=A(MO,CA,2)
  174.                B(CA,3)=A(MO,CA,3)
  175.             End If 
  176.          Next CA
  177.       End If 
  178.             Add AX,3,0 To 357
  179.             Add AZ,5,0 To 355
  180.             Add AY,2,0 To 358
  181.       For F=1 To NO
  182.          X#=B(F,1)
  183.          Y#=B(F,2)
  184.          Z#=B(F,3)
  185.          ROTX[AX]
  186.          ROTY[AY]
  187.          ROTZ[AZ]
  188.    '      X= Extension E(X#,Y#,Z#+DIST) 
  189.    '      Y= Extension E  
  190.          P(F,1)=X
  191.          P(F,2)=Y
  192.          A=20-Int((Z#/25)+11)
  193.          P(F,3)=A
  194.       Next F
  195.       'lets work out the new order of them there bobs! , the ones closest, 
  196.       'print last!!! 
  197.       'use a bubble sort, so I can swap all three arrays at one!   
  198.       PASSES=1
  199.       While PASSES<=NO-1
  200.          ITEM=1
  201.          While ITEM<=NO-1
  202.             If P(ITEM,3)>P(ITEM+1,3)
  203.                Swap P(ITEM,3),P(ITEM+1,3)
  204.                Swap P(ITEM,2),P(ITEM+1,2)
  205.                Swap P(ITEM,1),P(ITEM+1,1)
  206.             End If 
  207.             Inc ITEM
  208.          Wend 
  209.          Inc PASSES
  210.       Wend 
  211.       '
  212.       'clear bobs
  213.       Screen Copy 2 To 0
  214.       'print new ones
  215.       For F=1 To NO
  216.          Paste Bob P(F,1),P(F,2),P(F,3)
  217.          Doke ST,P(F,1)
  218.          Poke ST+2,P(F,2)
  219.          Poke ST+3,P(F,3)
  220.          Add ST,4
  221.          If ST>Start(11)+68000
  222.             Bell 
  223.             Print " error"
  224.             End 
  225.          End If 
  226.       Next F
  227.    Next G
  228.    '
  229.    '
  230.    '  
  231.    'bob pos data... x,y,z positions 
  232.    '
  233.    '
  234.    '
  235.    ' o o o o
  236.    '      
  237.    ' o     o
  238.    '    o 
  239.    ' o     o
  240.    '
  241.    ' o o o o
  242.    '
  243.    Data -150,-150,0
  244.    Data -50,-150,0
  245.    Data 50,-150,0
  246.    Data 150,-150,0
  247.    Data -150,-50,0
  248.    Data 150,-50,0
  249.    Data -150,50,0
  250.    Data 150,50,0
  251.    Data -150,150,0
  252.    Data -50,150,0
  253.    Data 50,150,0
  254.    Data 150,150,0
  255.    Data 0,0,0
  256.    '
  257.    'CROSS 2D
  258.    Data -150,-150,0
  259.    Data 0,-150,0
  260.    Data 150,-150,0
  261.    Data 0,-75,0
  262.    Data -150,0,0
  263.    Data -75,0,0
  264.    Data 0,0,0
  265.    Data 75,0,0
  266.    Data 150,0,0
  267.    Data 0,75,0
  268.    Data -150,150,0
  269.    Data 0,150,0
  270.    Data 150,150,0
  271.    'HEXAGON 
  272.    Data -50,-100,0
  273.    Data 0,-100,0
  274.    Data 50,-100,0
  275.    Data -50,100,0
  276.    Data 0,100,0
  277.    Data 50,100,0
  278.    Data -100,0,0
  279.    Data 100,0,0
  280.    Data 0,0,0
  281.    Data -75,50,0
  282.    Data 75,50,0
  283.    Data -75,-50,0
  284.    Data 75,-50,0
  285.    '  
  286.    'ox Y
  287.    Data 100,100,100
  288.    Data 100,100,-100
  289.    Data 100,-100,100
  290.    Data 100,-100,-100
  291.    Data -100,100,100
  292.    Data -100,100,-100
  293.    Data -100,-100,100
  294.    Data -100,-100,-100
  295.    Data 100,100,100
  296.    Data 100,100,100
  297.    Data 100,100,100
  298.    Data 100,100,100
  299.    Data 100,100,100
  300.    '  
  301.    'cross 
  302.    Data 0,0,0
  303.    Data 0,0,-150
  304.    Data 0,0,150
  305.    Data 0,150,0
  306.    Data 0,-150,0
  307.    Data 150,0,0
  308.    Data -150,0,0
  309.    Data 0,0,-75
  310.    Data 0,0,75
  311.    Data 0,-75,0
  312.    Data 0,75,0
  313.    Data -75,0,0
  314.    Data 75,0,0
  315. '
  316. 'first thing again!
  317.    Data -150,-150,0
  318.    Data -50,-150,0
  319.    Data 50,-150,0
  320.    Data 150,-150,0
  321.    Data -150,-50,0
  322.    Data 150,-50,0
  323.    Data -150,50,0
  324.    Data 150,50,0
  325.    Data -150,150,0
  326.    Data -50,150,0
  327.    Data 50,150,0
  328.    Data 150,150,0
  329.    Data 0,0,0
  330. End Proc
  331. 'rotate around the z axis
  332. Procedure ROTZ[A#]
  333.    X1#=(Cos(A#)*X#)+(-Sin(A#)*Y#)
  334.    Z1#=Z#
  335.    Y1#=(Sin(A#)*X#)+(Cos(A#)*Y#)
  336.    
  337.    X#=X1#
  338.    Z#=Z1#
  339.    Y#=Y1#
  340. End Proc
  341. 'rotate around the y axis
  342. Procedure ROTY[A#]
  343.    
  344.    X1#=(Cos(A#)*X#)+(-Sin(A#)*Z#)
  345.    Y1#=Y#
  346.    Z1#=(Sin(A#)*X#)+(Cos(A#)*Z#)
  347.    
  348.    X#=X1#
  349.    Z#=Z1#
  350.    Y#=Y1#
  351. End Proc
  352. 'rotate around the x axis
  353. Procedure ROTX[A#]
  354.    Z1#=(Cos(A#)*Z#)+(-Sin(A#)*Y#)
  355.    X1#=X#
  356.    Y1#=(Sin(A#)*Z#)+(Cos(A#)*Y#)
  357.    
  358.    X#=X1#
  359.    Z#=Z1#
  360.    Y#=Y1#
  361. End Proc
  362. Procedure _BOBS
  363. BN=1
  364.    Screen Open 0,320,256,4,Lowres
  365.    Paper 0
  366.    Curs Off 
  367.    Flash Off 
  368.    Get Sprite Palette 
  369.    For F#=5 To 14.5 Step 0.5
  370.       Cls 
  371.       A#=F#/3
  372.       C=F#/5
  373.       D=F#/3
  374.       A=A#*2
  375.       B=A#
  376.       Ink 1
  377.       Circle F#+1,F#+1,F#
  378.       Paint F#+1,F#+1
  379.       Ink 2
  380.       Circle F#+C,F#-C,A
  381.       Paint F#+C,F#-C
  382.       Ink 3
  383.       Circle F#+D,F#-D,B
  384.       Paint F#+D,F#-D
  385.       Get Bob BN,0,0 To 10+F#*2,10+F#*2
  386.       Hot Spot BN,F#,F#
  387.       Inc BN
  388.    Next F#
  389. End Proc