home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / totallyamos / issue3 / programming / 3.seq < prev    next >
Text File  |  1992-02-28  |  9KB  |  258 lines

  1.  255
  2. aaa00000fb05fe0080333fff70f
  3. ^2*********************************************************************
  4.  
  5. ^3                    P r o g r a m   P a r l o u r
  6.             
  7. ^2                                T w o
  8.  
  9. ^3                      b y   B e n   A s h l e y
  10.  
  11. ^2*********************************************************************
  12.  
  13. ^1 Last time, we looked at PROGRAM PROTECTION.  This issue though, I`ll
  14. ^1be  giving  you  a  tutorial  on  AMOS 3D.  Yes, I know its been done
  15. ^1rather  badly, and many people have binned it and ripped it off their
  16. ^1AMOS program disks.  But for those of us, who have for some reason or
  17. ^1another, KEPT it on, then you might find this tutorial rather nice.
  18.  
  19. ^1 Firstly,  I`ll  give  you  a  full  blown  program, and explain each
  20. ^1section  bit-by-bit.   After  that,  I`ll  tell you about the uses of
  21. ^1other 3D commands which are not exploited in the 3D demo.
  22.  
  23. ^1 Ok,  so  lets  go.   Load  up  AMOS,  and  MAKE SURE you have the 3D
  24. ^1extension loaded in.
  25.  
  26. ^2Now  I`ll  explain  it  all,  bit  by  bit.   So,  I  always start my
  27. ^2programs`s with REM`s, the following can be ommited..
  28.  
  29. ^2  ' AMOS 3D Tutorial Program
  30. ^2  ' ========================
  31.  
  32. ^2  ' Written for TOTALLY AMOS, by Ben Ashley of Odyssey Software
  33.  
  34. ^2  ' Please note: Requires the OBJECTS directory, to be in the ROOT 
  35. ^2  ' directory, and the file, WB.IFF, to also be in the root directory. 
  36.  
  37. ^1 No Problem.  So now I`ll create a simple, 16 colour LOW RES screen^1^1.
  38.  
  39. ^2  Screen Open 0,320,256,16,Lowres
  40.  
  41. ^1 And  I`ll do a simple setup procedure, of setting colour 1 to white,
  42. ^1setting  the PEN and PAPER colours, turning the cursor and flash off,
  43. ^1and finally hiding the Mouse and clearing the screen.
  44.  
  45. ^2   Colour 1,$FFF :  Pen 1 :  Paper 0 :  Curs Off :  Flash Off :
  46. ^2 Hide On :  Cls 0
  47.  
  48. ^1 Now,  to prevent flicker when displaying the 3D screen, we'll double
  49. ^1buffer and autoback it.
  50.  
  51. ^2  Double Buffer :  Autoback 0
  52.  
  53. ^1 If  you don`t have AMOS LIBS on the disk with which you are working,
  54. ^1you need a routine to find the AMOS:  disk, and set the drive...
  55.  
  56. ^2    If Not Exist("AMOS:")
  57. ^2       Centre At(,10)+"Please insert volume AMOS:"
  58. ^2       Centre At(,11)+"into any drive"
  59. ^2       Repeat 
  60. ^2          Curs Off 
  61. ^2       Until Exist("AMOS:")
  62. ^2    End If 
  63.  
  64. ^1 So,  I  clear the screen, set the directory to `AMOS:', and load the
  65. ^13D extension by using the command, TD KEEP ON.
  66.  
  67. ^2    Cls 0
  68. ^2    Dir$="AMOS:"
  69. ^2    Td Keep On 
  70.  
  71. ^1 Now,  I need to set the directory path, BACK to my 3D work disk.  As
  72. ^1I  have  a  directory,  called  `Objects', I`ll ask AMOS to find that
  73. ^1disk, and on finding it, set the directory...
  74.  
  75. ^2    If Not Exist("Df0:Objects")
  76. ^2       Centre At(,10)+"Please insert TA in drive Df0:"
  77. ^2       Repeat 
  78. ^2          Curs Off 
  79. ^2       Until Exist("Df0:Objects")
  80. ^2       Cls 0
  81. ^2    End If 
  82.  
  83. ^1 This program assumes that the 3D work disk is in Df0:...
  84.  
  85. ^2    Dir$="Df0:"
  86. ^2    Cls 0
  87.  
  88. ^1 Now,  I  set  the  Screen Height.  In this 3D demo, I`m using a full
  89. ^1screen  value  of 256.  Usually, I use a value of 200, so as to leave
  90. ^1room for a status display.
  91.  
  92. ^2    Td Screen Height 256
  93.  
  94. ^1 Now,  I set the TD directory.  This is the directory, which contains
  95. ^1all of the object definitions.
  96.  
  97. ^2    Td Dir "Df0:Objects/"
  98.  
  99. ^1 In  this  short  demo,  I  only need to load up ONE previously saved
  100. ^1object, called `cube1'.
  101.  
  102. ^2    Td Load "cube1"
  103.  
  104. ^1 This  is  a  simple cube, with `TA', on all sides.  Next, I place my
  105. ^1objects  using  the  TD  OBJECT command.  Notice how I use the single
  106. ^1cube  definition  for  2  objects.   The  first  object  is placed at
  107. ^1X-co-ordinate  2000, Y-co-ordinate 2500 and a Z value of 2000.  I did
  108. ^1not  want the cube to be at any special attitude, so I just set these
  109. ^1to  0,0,0.  The second object is placed, higher up, ( Less Y value ),
  110. ^1and farther into the distance, ( Greater Z Value).
  111.  
  112. ^2    Td Object 1,"cube1",2000,2500,2000,0,0,0
  113. ^2    Td Object 2,"cube1",2000,2000,6000,0,0,0
  114.  
  115. ^1 Next, I want to move the viewpoint, so that when the program starts,
  116. ^1the  viewer  sees both cubes directly in front.  Remember that object
  117. ^10,  is  the  viewpoint.   And  I move it to X:2000, which is the same
  118. ^1value as my two previously defined cubes.  Y:2300, is a value sort of
  119. ^1inbetween the Y values of the 2 cubes.  Finally, the Z value is 0.
  120.  
  121. ^2    Td Move 0,2000,2300,0
  122.     
  123. ^1 Next,  I  set  some  variables  for the demo.  F1, is the Z movement
  124. ^1value  for  cube  1,  and F2 is the Z movement value for cube 2.  The
  125. ^1TIME variable, determines exactly how many times the cubes will move.
  126.  
  127. ^2    F1=400
  128. ^2    F2=-400
  129. ^2    TIME=0
  130.  
  131.  ^1So, now I start up my REPEAT loop.
  132.  
  133. ^2    Repeat
  134.  
  135. ^1 The  following  bit  is  the  USUAL way of drawing 3D objects on the
  136. ^1screen.   First  it  clears  any previous frames, draws the new ones,
  137. ^1swaps the physical and logical screens, and finally, synchronizes it.
  138.  
  139. ^2        Td Cls
  140. ^2        Td Redraw
  141. ^2        Screen Swap
  142. ^2        Wait Vbl
  143.  
  144. ^1 Now,  I  want  my  first  cube  to be spinning in all 3 ways, in one
  145. ^1direction,  whilst  the  other,  doing  the  same  thing,  but in the
  146. ^1opposite  direction.   The  3 values after the object number, are the
  147. ^1attitude values of A,B and C.
  148.  
  149. ^2        Td Angle Rel 1,1000,1000,1000
  150. ^2        Td Angle Rel 2,-1000,-1000,-1000
  151.  
  152. ^1 Now,  I  move  the  2 cubes corresponding to what direction thay are
  153. ^1going,  so  I  use  the  values  F1,  and F2, which have been defined
  154. ^1previously.
  155.  
  156. ^2        Td Move Rel 1,0,0,F1
  157. ^2        Td Move Rel 2,0,0,F2
  158.  
  159. ^1 Now, I add the TIME value, by one.
  160.  
  161. ^2        Add TIME,1
  162.  
  163. ^1 If  the timer value has reached 13, it checks to see which direction
  164. ^1cube  1  is  going.  If it is going towards the eye, then it knows to
  165. ^1set  the other cube to go towards the viewpoint, whilst cube 1, to go
  166. ^1away.   If not, then it tells cube 1 to go towards the viewpoint, and
  167. ^1cube  2,  to  go away.  I know it sounds complicated, but it is quite
  168. ^1logical.  Finally, it sets the TIME counter back to 0.
  169.  
  170. ^2        If TIME>13
  171. ^2           If F1=-400
  172. ^2                F1=400
  173. ^2                F2=-400
  174. ^2           Else 
  175. ^2                F1=-400
  176. ^2                F2=400
  177. ^2           End If 
  178. ^2           TIME=0
  179. ^2        End If 
  180.  
  181. ^1 Finally,  to  add a little `Spice', to the demo, I`ve decided to put
  182. ^1in some world controls.  Basically, the following section, allows you
  183. ^1to  control  the  viewpoint`s  X  and Y values using the cursor keys.
  184. ^1(76=up, 77=down, 79=left, 78=right)
  185.  
  186. ^2        If Key State(79)
  187. ^2           Td Move Rel 0,-200,0,0
  188. ^2        End If 
  189. ^2        If Key State(78)
  190. ^2           Td Move Rel 0,200,0,0
  191. ^2        End If 
  192. ^2        If Key State(76)
  193. ^2           Td Move Rel 0,0,200,0
  194. ^2        End If 
  195. ^2        If Key State(77)
  196. ^2           Td Move Rel 0,0,-200,0
  197. ^2        End If 
  198.  
  199. ^1 And at last, it checks to see if QUIT=True.  As I have not put in an
  200. ^1EXIT feature on this demo, it will never be true.
  201.  
  202. ^2     Until QUIT=True
  203.  
  204. ^1 If  you  want  to see how this looks straight away, then load up the
  205. ^13D-Tutorial.AMOS,  program,  which  is  the  above  program,  in full
  206. ^1working form.
  207.  
  208. ^4Other 3D Commands
  209. ^5+-+-+-+-+-+-+-+-+
  210.  
  211. ^61.  Td Background
  212. ^7=================
  213.  
  214. ^6 I found the TD BACKGROUND command very useful.  Although I have only
  215. ^6got it work on LOW RES screens.
  216.  
  217. ^6 You can use it for a sky background, or even an amazing Hit tech HUD
  218. ^6display.   Believe me, if TD BACKGROUND had not been included, the 3D
  219. ^6programs would be drab and boring.
  220.  
  221. ^6 Firstly,  you  have  to  note  the following point.  If you want the
  222. ^6screen  to  be displayed behind the objects, ie, like for a sky, then
  223. ^6it  must  be placed BEFORE the TD REDRAW command.  If you want to use
  224. ^6it as a HUD or a SHIPS COCKPIT picture, then use it after.
  225.  
  226. ^6 It  is  perfectly  feasible to have 2 backgrounds.  I used two in my
  227. ^6space  game ZION.  screen 2 had stars on, whilst screen 3 had the HUD
  228. ^6on, I simply did it like this...
  229.  
  230. ^5                 Td Cls
  231. ^5                 Td Background 2,0,0,320,200 to 0,0,0
  232. ^5                 Td Redraw
  233. ^5                 Td Background 3,0,0,320,200 to 0,0,0
  234. ^5                 Screen Swap
  235. ^5                 Wait Vbl
  236.  
  237. ^6See?  It`s quite easy.
  238.  
  239. ^62.  Td Range
  240. ^7============
  241.  
  242. ^6 I  used  this  command,  INSTEAD of setting zones.  To me, it worked
  243. ^6better.  Just specify two objects, and you are returned with a value!
  244. ^6So if you wanted to see if missile 3, hit ship 7, you`d use something
  245. ^6like....
  246.  
  247. ^5                          If Td Range(3,7)<1000
  248. ^5                             Proc WHAMBAMTHANKYAMAM
  249. ^5                          End If
  250.  
  251. ^6 There are many other 3D commands.  Some of which are easy and useful
  252. ^6(  TD  FACE ), and others which are more obscure, ( TD ADVANCED ).  I
  253. ^6hope this quick tutorial has helped.
  254.  
  255. ^7=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  256. ^7-z-z-z-z-z-z-z-z-z-z-z-z-z-z-z-z-z-z-z-z-z-z-z-z-z-z-z-z-z-z-z-z-z-z-
  257. \
  258.