Quellcode durchsuchen

Added _release/Tutorials

blitz-research vor 12 Jahren
Ursprung
Commit
499de8593d
77 geänderte Dateien mit 5245 neuen und 0 gelöschten Zeilen
  1. BIN
      _release/tutorials/GCUK_Tuts/10c.jpg
  2. BIN
      _release/tutorials/GCUK_Tuts/1c.jpg
  3. BIN
      _release/tutorials/GCUK_Tuts/2c.jpg
  4. BIN
      _release/tutorials/GCUK_Tuts/3c.jpg
  5. BIN
      _release/tutorials/GCUK_Tuts/4c.jpg
  6. BIN
      _release/tutorials/GCUK_Tuts/5c.jpg
  7. BIN
      _release/tutorials/GCUK_Tuts/6c.jpg
  8. BIN
      _release/tutorials/GCUK_Tuts/7c.jpg
  9. BIN
      _release/tutorials/GCUK_Tuts/8c.jpg
  10. BIN
      _release/tutorials/GCUK_Tuts/9c.jpg
  11. 149 0
      _release/tutorials/GCUK_Tuts/Cameras.html
  12. 62 0
      _release/tutorials/GCUK_Tuts/Entities.html
  13. BIN
      _release/tutorials/GCUK_Tuts/Gargoyle.md2
  14. 204 0
      _release/tutorials/GCUK_Tuts/Meshes.html
  15. 76 0
      _release/tutorials/GCUK_Tuts/Planes.html
  16. 147 0
      _release/tutorials/GCUK_Tuts/Terrains.html
  17. 192 0
      _release/tutorials/GCUK_Tuts/Texturing.html
  18. 34 0
      _release/tutorials/GCUK_Tuts/animation.bb
  19. BIN
      _release/tutorials/GCUK_Tuts/b3dlogo_small.jpg
  20. BIN
      _release/tutorials/GCUK_Tuts/blitztexture.bmp
  21. 43 0
      _release/tutorials/GCUK_Tuts/camera.bb
  22. 42 0
      _release/tutorials/GCUK_Tuts/collision.bb
  23. BIN
      _release/tutorials/GCUK_Tuts/house.3ds
  24. 61 0
      _release/tutorials/GCUK_Tuts/lights.bb
  25. 40 0
      _release/tutorials/GCUK_Tuts/movement.bb
  26. 185 0
      _release/tutorials/GCUK_Tuts/page1.html
  27. 157 0
      _release/tutorials/GCUK_Tuts/page2.html
  28. 96 0
      _release/tutorials/GCUK_Tuts/page3.html
  29. 212 0
      _release/tutorials/GCUK_Tuts/page4.html
  30. 109 0
      _release/tutorials/GCUK_Tuts/page5.html
  31. 255 0
      _release/tutorials/GCUK_Tuts/page6.html
  32. 253 0
      _release/tutorials/GCUK_Tuts/page7.html
  33. 267 0
      _release/tutorials/GCUK_Tuts/page8.html
  34. BIN
      _release/tutorials/GCUK_Tuts/plane.3ds
  35. BIN
      _release/tutorials/GCUK_Tuts/rocket.3ds
  36. 29 0
      _release/tutorials/GCUK_Tuts/settingup.bb
  37. 170 0
      _release/tutorials/GCUK_Tuts/startup.html
  38. 31 0
      _release/tutorials/GCUK_Tuts/texture.bb
  39. 70 0
      _release/tutorials/GCUK_Tuts/vertex.bb
  40. 15 0
      _release/tutorials/basic_tuts/array.bb
  41. 17 0
      _release/tutorials/basic_tuts/array1.bb
  42. 2 0
      _release/tutorials/basic_tuts/array2.bb
  43. 681 0
      _release/tutorials/basic_tuts/basic.html
  44. BIN
      _release/tutorials/basic_tuts/blitzlogo.gif
  45. 29 0
      _release/tutorials/basic_tuts/counter.bb
  46. 28 0
      _release/tutorials/basic_tuts/credits.html
  47. 27 0
      _release/tutorials/basic_tuts/doublebuffering.bb
  48. 7 0
      _release/tutorials/basic_tuts/end if.bb
  49. 62 0
      _release/tutorials/basic_tuts/examples.html
  50. 3 0
      _release/tutorials/basic_tuts/for next loop.bb
  51. 24 0
      _release/tutorials/basic_tuts/game.html
  52. 1107 0
      _release/tutorials/basic_tuts/gettingstarted.html
  53. 5 0
      _release/tutorials/basic_tuts/goto.bb
  54. 3 0
      _release/tutorials/basic_tuts/goto1.bb
  55. 0 0
      _release/tutorials/basic_tuts/hello.bb
  56. BIN
      _release/tutorials/basic_tuts/hello.gif
  57. BIN
      _release/tutorials/basic_tuts/hellooutput.gif
  58. 10 0
      _release/tutorials/basic_tuts/if then.bb
  59. 11 0
      _release/tutorials/basic_tuts/if then1.bb
  60. 14 0
      _release/tutorials/basic_tuts/index.html
  61. 14 0
      _release/tutorials/basic_tuts/input.bb
  62. 4 0
      _release/tutorials/basic_tuts/input1.bb
  63. 41 0
      _release/tutorials/basic_tuts/main.html
  64. 4 0
      _release/tutorials/basic_tuts/maths.bb
  65. 2 0
      _release/tutorials/basic_tuts/print.bb
  66. 26 0
      _release/tutorials/basic_tuts/random numbers.bb
  67. BIN
      _release/tutorials/basic_tuts/rocket.gif
  68. 8 0
      _release/tutorials/basic_tuts/simple maths.bb
  69. 4 0
      _release/tutorials/basic_tuts/step.bb
  70. BIN
      _release/tutorials/basic_tuts/toolbar1.bmp
  71. 22 0
      _release/tutorials/basic_tuts/topbar.html
  72. 92 0
      _release/tutorials/basic_tuts/types1.bb
  73. 78 0
      _release/tutorials/basic_tuts/types2.bb
  74. 4 0
      _release/tutorials/basic_tuts/variables.bb
  75. 3 0
      _release/tutorials/basic_tuts/variables1.bb
  76. 3 0
      _release/tutorials/basic_tuts/variables2.bb
  77. 11 0
      _release/tutorials/basic_tuts/variables3.bb

BIN
_release/tutorials/GCUK_Tuts/10c.jpg


BIN
_release/tutorials/GCUK_Tuts/1c.jpg


BIN
_release/tutorials/GCUK_Tuts/2c.jpg


BIN
_release/tutorials/GCUK_Tuts/3c.jpg


BIN
_release/tutorials/GCUK_Tuts/4c.jpg


BIN
_release/tutorials/GCUK_Tuts/5c.jpg


BIN
_release/tutorials/GCUK_Tuts/6c.jpg


BIN
_release/tutorials/GCUK_Tuts/7c.jpg


BIN
_release/tutorials/GCUK_Tuts/8c.jpg


BIN
_release/tutorials/GCUK_Tuts/9c.jpg


+ 149 - 0
_release/tutorials/GCUK_Tuts/Cameras.html

@@ -0,0 +1,149 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+	<title>Introduction to Camera Entities</title>
+</head>
+<body>
+
+<center><h1><font face="Verdana">Introduction to Camera Entities</font></h1>
+</center>
+
+<p>
+<font face="Verdana">
+Cameras allow you to see what's going on in the 3D world. Without at least one camera, nothing that may be happening in the world will be rendered to the screen.</font></p>
+<p>
+<font face="Verdana">
+Cameras also control a number of other effects, including rendering range, zoom and fog.</font></p>
+
+<h2><font face="Verdana"><span style="background-color: #6097C9">&nbsp;Creating Cameras&nbsp;</span></font></h2>
+<p>
+<font face="Verdana">
+To create a camera, simply use the <b>CreateCamera</b> command:</font>
+</p>
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+	
+&nbsp;&nbsp;&nbsp;&nbsp;<font face="Arial">;create a new camera!<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<b>camera=CreateCamera()</b></font><br><br>
+	
+    </td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+
+<h2><font face="Verdana"><span style="background-color: #6097C9">&nbsp;Camera Viewport&nbsp;</span></font></h2>
+<p>
+<font face="Verdana">
+A camera needs to know where on screen its view of the world is to be rendered. This area of the screen is known as the camera viewport. By default, a new camera's viewport is set to the entire screen.</font></p>
+
+<p>
+<font face="Verdana">
+To change the camera viewport use the <b>CameraViewport</b> command:</font></p>
+
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+	
+&nbsp;&nbsp;&nbsp;&nbsp;<font face="Arial">;Draw to top left corner of the screen<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<b>CameraViewport camera,0,0,GraphicsWidth()/2,GraphicsHeight()/2</b></font><br><br>
+	
+    </td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+
+
+<h2><font face="Verdana"><span style="background-color: #6097C9">&nbsp;Camera Range&nbsp;</span></font></h2>
+
+<p>
+<font face="Verdana">
+Camera range determines how far into the distance a camera can 'see'. You specify 2 values for camera range - a near value and a far value. All rendering is clipped to this range.</font></p>
+
+<p>
+<font face="Verdana">
+Its a good idea to try and keep the near value as high as possible, while keeping the far value as low as possible. This helps to minimize z-buffer problems like 'jaggies'. By default, the near value for a new camera is 1, and the far value is 1000.</font></p>
+
+<p>
+<font face="Verdana">
+To change the camera range, use the <b>CameraRange</b> command:</font></p>
+
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+	
+&nbsp;&nbsp;&nbsp;&nbsp;<font face="Arial">;Sets the near range to 5 and the far range to 5000<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<b>CameraRange camera,5,5000</b></font><br><br>
+	
+    </td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+
+<h2><font face="Verdana"><span style="background-color: #6097C9">&nbsp;Camera Zoom&nbsp;</span></font></h2>
+
+<p>
+<font face="Verdana">
+Changing a cameras zoom allows you to 'zoom-in' or 'zoom-out' of the action in the world. The default zoom value for a new camera is 1. Zoom values greater than 1 will cause a 'zoom-in' effect, while zoom values less than 1 will cause a 'zoom-out'. Zoom values should never be set at 0 or less!</font></p>
+
+<p>
+<font face="Verdana">
+The <b>CameraZoom</b> command controls camera zoom:</font></p>
+
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+	
+&nbsp;&nbsp;&nbsp;&nbsp;<font face="Arial">;Zoom-in a bit!<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<b>CameraZoom camera,1.5</b></font><br><br>
+	
+    </td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+
+<h2><font face="Verdana"><span style="background-color: #6097C9">&nbsp;Fog Effects&nbsp;</span></font></h2>
+
+<p>
+<font face="Verdana">
+Blitz3D allows you to setup fog effects independently for each camera. This can be useful for limiting what a certain camera can see. For example, a racing game might use a camera for its rearview mirror. However, you might want to limit what is visible in the rearview mirror in order to keep the game running fast.</font></p>
+
+<p><font face="Verdana">To setup a simple fog effect for a camera, you might use something like this:</font></p>
+
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+	
+&nbsp;&nbsp;&nbsp; &nbsp;<font face="Arial">;Sets the color of fog for this camera<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<b>CameraFogColor camera,0,128,255</b><br><br>
+
+&nbsp;&nbsp;&nbsp;&nbsp;;Sets the near/far range of fog for this camera<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<b>CameraFogRange camera,1,1000</b><br><br>
+
+&nbsp;&nbsp;&nbsp;&nbsp;;Sets the fog mode for this camera.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<b>CameraFogMode camera,1</b></font><br><br>
+	
+    </td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+
+<p>
+<font face="Verdana">
+Often, the fog range and camera range will be the same. However, by increasing the near value of fog, you can control how 'thick' fog appears to be. Smaller fog near values will result in a  thicker fog effect, since the fog will start nearer to the camera.</font></p>
+
+<p>
+<font face="Verdana">
+Unfortunately, fog is not well supported on all graphics cards. While all cards can perform some kind of fog effect, the quality varies a lot. For this reason, its a good idea to make fog optional in your Blitz3D games.</font></p>
+
+<p><center>
+<font color="#666666" face="Verdana">Copyright 2001 (c) Paul Gerfen -
+GamecodingUK</font></center></p>
+</body>
+</html>

+ 62 - 0
_release/tutorials/GCUK_Tuts/Entities.html

@@ -0,0 +1,62 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+	<title>Introduction to Entities</title>
+</head>
+<body>
+
+<center><h1><font face="Verdana">Introduction to Entities</font></h1>
+</center>
+<p>
+<font face="Verdana">
+Everything going on in a Blitz3D program takes place within a 3D world, which is populated by 'entities'.</font></p>
+<p>
+<font face="Verdana">
+Entities come in many flavors, and each kind of entity performs a certain, specialized task, but all entities have a few things in common, the most important of which are:</font></p>
+
+<p>
+<font face="Verdana">All entities have a position, a rotation and a size, and can be moved, rotated and
+scaled at will.</font></p>
+
+<p>
+<font face="Verdana">All entities have an optional 'parent' entity. If an entity has a parent, then it becomes 'attached' to the parent and will move, rotate and scale whenever the parent does.</font></p>
+
+<p>
+<font face="Verdana">
+Now, lets have a quick look at the kind of entities that can be used in the 3D world:</font></p>
+
+<h2><font face="Verdana"><span style="background-color: #6097C9">&nbsp;Cameras&nbsp;</span></font></h2>
+<p>
+<font face="Verdana">
+Camera entities allows you to 'see' what's going on in the world. If you don't create at least one camera, you wont be able to see anything! Cameras also control where on the screen 3D rendering occurs, and provide atmospheric fog effects.</font></p>
+<h2><span style="background-color: #6097C9"><font face="Verdana">&nbsp;Lights</font><font face="Verdana" color="#FFFFFF">&nbsp;</font></span></h2>
+<p>
+<font face="Verdana">
+Light entities provide illumination for the 3D world. Without any lights, you will still see what's happening in the world thanks to 'ambient light'. Amibent light is light that is 'everywhere at once', and illuminates everything equally. However, since ambient light has no position or direction, you wont get nice shading effects, and everything will look very flat.</font></p>
+<h2><span style="background-color: #6097C9"><font face="Verdana">&nbsp;Meshes</font><font face="Verdana" color="#FFFFFF">&nbsp;</font></span></h2>
+<p>
+<font face="Verdana">
+Mesh entities provide a way to add actual, physical items to the world. Meshes are made up of triangles, and each triangle can be colored or textured in a variety of ways. The most common way of adding a mesh to the world is to load it from a file produced by a 3D modelling program, but you can also create your own meshes.</font></p>
+<h2><span style="background-color: #6097C9"><font face="Verdana" color="#FFFFFF">&nbsp;</font><font face="Verdana">Pivots</font><font face="Verdana" color="#FFFFFF">&nbsp;</font></span></h2>
+<p>
+<font face="Verdana">
+Pivot entities don't actually do a lot! Their main purpose in life is to provide a parent for other entities. This can be useful for many reasons. For example, by attaching a bunch of meshes to a pivot, you can move all the meshes at once simply by moving the pivot!</font></p>
+<h2><span style="background-color: #6097C9"><font face="Verdana" color="#FFFFFF">&nbsp;</font><font face="Verdana">Sprites</font><font face="Verdana" color="#FFFFFF">&nbsp;</font></span></h2>
+<p>
+<font face="Verdana">
+Sprite entities are flat, 2D entities most commonly used for particle effects, like explosions, smoke and fire. Sprites automatically face the camera, regardless of the angle you view them from, so are often textured with a 'spherical' style texture.</font></p>
+<h2><span style="background-color: #6097C9"><font face="Verdana" color="#FFFFFF">&nbsp;</font><font face="Verdana">Planes</font><font face="Verdana" color="#FFFFFF">&nbsp;</font></span></h2>
+<p><font face="Verdana">Plane entities are infinitely large, flat surfaces that can be used for a variety of effects such as ground and water. Since planes are entities, they can also be moved and rotated, which means you can also use them for sky and cloud effects.</font></p>
+<h2><span style="background-color: #6097C9"><font face="Verdana" color="#FFFFFF">&nbsp;</font><font face="Verdana">Terrains</font><font face="Verdana" color="#FFFFFF">&nbsp;</font></span></h2>
+<p>
+<font face="Verdana">
+Terrain entities are used to create very large landscapes. They are constructed of a grid of triangles, and are rendered using a technique that draws an approximation of the terrain using a limited number of triangles. This is necessary for very large terrains that may contains millions of triangles - which would not only be far too slow for realtime rendering, but would also take up way too much memory!</font></p>
+<p>
+<font face="Verdana">
+These entities form the backbone of any B3D program, it really is worth spending the time getting to know the various instructions associated with them. As we shall see - by using different parameters and the special additional commands for controlling or altering their behavour, we can adapt an entity to our liking. Even if it means defining a special FX that Blitz, with its present command set cannot do !.</font>
+<p><center>
+<font color="#666666" face="Verdana">Copyright 2001 (c) Paul Gerfen -
+GamecodingUK</font></center></p>
+</body>
+</html>

BIN
_release/tutorials/GCUK_Tuts/Gargoyle.md2


+ 204 - 0
_release/tutorials/GCUK_Tuts/Meshes.html

@@ -0,0 +1,204 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+	<title>Planes</title>
+</head>
+
+<body>
+<center><h1><font face="Verdana">Introduction to Meshes</font></h1></center>
+
+<p><font face="Verdana">Meshes are the entities you will most frequently be
+working with - unless you're writing something weird (please do...)!</font>
+</p>
+<p><font face="Verdana">Meshes are made up of vertices and triangles, and can be
+either loaded from files (perhaps the result of a 3d modeler program), or built
+'by hand'. (assembled from within a B3d program in realtime)</font>
+</p>
+<h2><font face="Verdana"><span style="background-color: #6097C9">&nbsp;Loading
+Meshes&nbsp;</span></font></h2>
+<p><font face="Verdana">There are 2 commands provided for loading meshes from
+files - 'LoadMesh' and 'LoadAnimMesh', both of which load a '.X' or '.3DS' file
+and return an entity. So what's the difference ?</font>
+</p>
+<p><font face="Verdana">Models stored in files are usually made up of several
+'parts'. In the case of a character model, these parts may represent arms, legs
+etc.</font>
+</p>
+<p><font face="Verdana">In addition, files also contain animation information
+with the 'LoadAnimMesh' command. The entity returned will actually be the parent
+entity of the whole bunch of child 'parts'.</font>
+</p>
+<p><font face="Verdana">Therefore, 'LoadAnimMesh' really loads in several meshes
+!</font>
+</p>
+<p><font face="Verdana">If you don't need to animate a model, you can use 'LoadMesh'
+instead. This will 'collapse' all the parts in a mesh and return a single,
+combined mesh. The collapsed mesh will look the same as a mesh loaded with
+LoadAnimMesh, only you wont be able to animate it, and it wont have any child
+meshes.</font>
+</p>
+<p><font face="Verdana">Why bother with LoadMesh at all ? SPEED! - It's faster
+for B3D to deal with a single mesh than with multiple meshes, so if you're not
+planning to animate or doing anything tricky with a mesh, use LoadMesh.</font>
+</p>
+<h2><font face="Verdana"><span style="background-color: #6097C9">&nbsp;Creating
+Meshes&nbsp;</span></font></h2>
+<p><font face="Verdana">Before looking closely at creating meshes, you'll need
+to know about 'Brushes' in Blitz3D. A brush is a collection of properties used
+when rendering triangles. These properties are:</font>
+</p>
+<ul>
+  <li><font face="Verdana"><b>Colour</b> - The colour a triangle is rendered in.
+    (see BrushColor)<br>
+    </font></li>
+  <li><font face="Verdana"><b>Texture</b> - From 0 to 8 texture maps that are
+    used to render a triangle. (see BrushTexture)<br>
+    </font></li>
+  <li><font face="Verdana"><b>Alpha</b> - How transparent a triangle is. Alpha
+    can range from 0 (completely transparent) to 1 (completely opaque). (see
+    BrushAlpha)<br>
+    </font></li>
+  <li><font face="Verdana"><b>Shininess</b> - How 'shiny' a triangle is. This
+    value can range from 0 (not shiny) to 1 (really shiny!). (see BrushShininess)<br>
+    </font></li>
+  <li><font face="Verdana"><b>Blend</b> - The blend mode used to render a
+    triangle. Blend mode describes how a triangle is combined with what's
+    already on the screen. (see BrushBlend)<br>
+    </font></li>
+  <li><font face="Verdana"><b>FX</b> - Optional special effects for rendering.
+    (see BrushFX)<br>
+    </font></li>
+</ul>
+<p><font face="Verdana">To create a brush, you use the CreateBrush command:</font></p>
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+	
+&nbsp;&nbsp;&nbsp;&nbsp;<font face="Arial">;create a brush.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<b>brush=CreateBrush()</b><br></font><br>
+	
+    </td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+
+<p><font face="Verdana">Once we have a brush, we can set its properties:</font>
+</p>
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+	
+&nbsp;&nbsp;&nbsp;&nbsp;<font face="Arial">;a red brush.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<b>BrushColor brush,255,255,0</b></font>
+      <p><font face="Arial">&nbsp;&nbsp;a shiny red brush.&nbsp;<br>
+      </font>&nbsp;&nbsp; <font face="Arial"><b>BrushShininess brush,1</b></font><br><br>
+	
+      </p>
+	
+    </td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+
+<p><font face="Verdana">So what has all this got to do with meshes ?</font>
+</p>
+<p><font face="Verdana">Well, when I said meshes are made up of vertices and
+triangles, I sort of lied !. Meshes are actually made of 'surfaces', and
+surfaces are made up of vertices and triangles !.</font>
+</p>
+<p><font face="Verdana">When a surface is created, you provide it with a brush
+that controls how all the triangles in the surface are rendered.</font>
+</p>
+<p><font face="Verdana">So, a quick overview:</font>
+</p>
+<ul>
+  <li><font face="Verdana">A mesh is made up of any number of surfaces.<br>
+    </font></li>
+  <li><font face="Verdana">Each surface in a mesh contains any number of
+    vertices and triangles.<br>
+    </font></li>
+  <li><font face="Verdana">All triangles in a surface are rendered using a
+    common brush.</font></li>
+</ul>
+<p><font face="Verdana">Lets dive on in and create a simple mesh:</font></p>
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<font face="Arial"><br>
+&nbsp;&nbsp;&nbsp;&nbsp;<b>brush=CreateBrush()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b>
+      ; create a brush<br>
+      &nbsp;&nbsp;&nbsp; <b>BrushColor
+      brush,255,0,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+      </b>; a red brush</font>
+      <p><font face="Arial">&nbsp;&nbsp;&nbsp; <b>mesh=CreateMesh()&nbsp;&nbsp;</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+      ; create a mesh<br>
+      </font>&nbsp;&nbsp;&nbsp; &nbsp;<font face="Arial"><b> surf=CreateSurface(
+      mesh,brush)&nbsp;&nbsp;&nbsp;</b> ;  create a (red) surface</font></p>
+      <p><font face="Arial">&nbsp;&nbsp;&nbsp; <b>AddVertex surf,-1,1,0</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+      ; Now, we add 4 vertices...<br>
+      &nbsp;&nbsp;&nbsp; <b>AddVertex surf,1,1,0&nbsp;<br>
+      &nbsp;&nbsp;&nbsp; AddVertex surf,1-,1,0&nbsp;<br>
+      &nbsp;&nbsp;&nbsp; AddVertex surf,-1,-1,0</b></font></p>
+      <p><font face="Arial"><b>&nbsp;&nbsp;&nbsp; AddTriangle
+      surf,0,1,2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+      </b>; and 2 triangles...<b><br>
+      &nbsp;&nbsp;&nbsp; AddTriangle surf,0,2,3</b></font></p>
+      <p><font face="Arial"><b>&nbsp;&nbsp;&nbsp; UpdateNormals mesh</b>&nbsp;</font><br><br>
+	
+      </p>
+	
+    </td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+
+<p><font face="Verdana">This code will create a simple red square mesh entity.</font>
+</p>
+<p><font face="Verdana">So what's with the weird 'UpdateNormals' command at the
+end ?. Well, in order for a mesh to be correctly lit, its 'vertex normals' must
+be calculated. Without going into the gory details, the UpdateNormals command
+will do this for you. If you are aware of how normals work, you can actually set
+your own vertex normals using the VertexNormal command. If not, just remember to
+stick an 'UpdateNormals' command at the end of any mesh modifications you do, or
+else your meshes will not be correctly lit.</font>
+</p>
+<p><font face="Verdana">Note that you can create any number of surfaces you
+want. So, the same mesh can contain many differently coloured/textured/whatever
+triangles !.</font>
+</p>
+<p><font face="Verdana">Why bother with surfaces at all ?, Why not just create a
+bunch of separate meshes, each with its own rendering properties and skip all
+this surface nonsense ?. Well, again it comes down to SPEED !. It's faster for
+Blitz3D to handle multiple surfaces - which can NOT be moved or rotated as
+entities can - than it would be to handle multiple meshes.</font>
+</p>
+<h2><font face="Verdana"><span style="background-color: #6097C9">&nbsp;Modifying
+Meshes&nbsp;</span></font></h2>
+<p>
+<font face="Verdana">
+Once you've created a mesh, there are various commands available for modifying
+the mesh in realtime. This can be used to create a range of impressive special
+effects such as waving flags, rippling water and so on.</font></p>
+<p><font face="Verdana">These commands are:</font></p>
+<ul>
+  <li><font face="Verdana"><b>VertexCoords</b> - Changes the coordinates of a
+    vertex.<br>
+    </font></li>
+  <li><font face="Verdana"><b>VertexColor</b> - Changes the colour of a vertex.<br>
+    </font></li>
+  <li><font face="Verdana"><b>VertexTexCoords</b> - Changes the texture mapping
+    coordinates of a vertex.<br>
+    </font></li>
+  <li><font face="Verdana"><b>VertexNormal</b> - Changes the normal of a vertex.</font></li>
+</ul>
+<p><font face="Verdana">For more info on how to use these commands, take a look
+at the Vertex tutorial further on down the line.</font></p>
+
+<p><center><font color="#666666" face="Verdana">By Paul Gerfen (GamecodingUK)<br>Copyright 2001 Mark Sibly/Guildhall Leisure Ltd</font>
+
+</center></p>
+</body>
+</html>

+ 76 - 0
_release/tutorials/GCUK_Tuts/Planes.html

@@ -0,0 +1,76 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+	<title>Planes</title>
+</head>
+
+<body>
+<center><h1><font face="Verdana">Introduction to Planes</font></h1></center>
+
+<p>
+<font face="Verdana">
+Planes are a simple way to add large, flat surfaces to the world. Planes are useful for such things as ground, sea, sky, clouds and so on. Just about every 3d game will use planes in some way or another.</font>
+</p>
+<h2><font face="Verdana"><span style="background-color: #6097C9">&nbsp;Creating Planes&nbsp;</span></font></h2>
+<p>
+<font face="Verdana">
+How do you create a plane ? - Easy, just use the <b>CreatePlane</b> instruction:</font>
+</p>
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+	
+&nbsp;&nbsp;&nbsp;&nbsp;<font face="Arial">;create a simple plane.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<b>plane=CreatePlane()</b></font><br><br>
+	
+    </td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+
+<h2><font face="Verdana"><span style="background-color: #6097C9">&nbsp;Manipulating planes&nbsp;</span></font></h2>
+<p>
+<font face="Verdana">
+By default, a new Plane is positioned at 0,0,0 and faces upwards. However, you may want the plane to face a different direction, or to be moved up or down. To do this, you just need to use the standard entity commands.</font></p>
+<p>
+<font face="Verdana">
+For example, you might want to use a plane for a layer-of-clouds type effect. In this case, just rotate and position the plane as necessary:</font></p>
+
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+	
+&nbsp;&nbsp;&nbsp;&nbsp;<font face="Arial">;create clouds plane.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<b>plane=CreatePlane()</b><br><br>
+	
+&nbsp;&nbsp;&nbsp;&nbsp;;rotate plane so it faces downwards.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<b>RotateEntity clouds,0,0,180</b><br><br>
+
+&nbsp;&nbsp;&nbsp;&nbsp;;and position it up in the sky!<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<b>PositionEntity clouds,0,100,0</b></font><br><br>
+	
+	
+    </td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+<p>
+<font face="Verdana">
+So now we have a plane that is going to represent the sky, how can we make it look realistic ?</font></p>
+
+<p>
+<font face="Verdana">
+The easy answer would be to Texture it !, as you shall see later on in these tutorials - Blitz3D has ALL the answers.</font></p>
+
+<p>
+<font face="Verdana">
+If you take a careful look at most of todays top titles you will notice that most of the sky scenes contain more than one layer. Usually this consists of 2 - sometimes even 3 planes. The very top plane contains static objects such as the Sun, while the plane infront has a cloud layer. This can be achieved by using the BRUSHFX instuction (to make the texture slightly see-through) -in conjunction with an animated texture, that is slowly wrap-scrolling. (And YES, B3D can do this effect with ease!)</font></p>
+
+<p><center>
+<font color="#666666" face="Verdana">Copyright 2001 (c) Paul Gerfen -
+GamecodingUK</font></center></p>
+</body>
+</html>

+ 147 - 0
_release/tutorials/GCUK_Tuts/Terrains.html

@@ -0,0 +1,147 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+	<title>Introduction to Camera Entities</title>
+</head>
+<body>
+
+<center><h1><font face="Verdana">Introduction to Terrains</font></h1>
+</center>
+
+<p>
+<font face="Verdana">Terrain entities are used to draw very large landscapes made up
+of many, many triangles - even up to a million or more!<br>
+<br>
+To actually draw this many triangles would be a very slow process, so terrains use a technique known as
+'<b>dynamic level of detail</b>' to speed things up.<br>
+<br>
+This basically means that instead of drawing all of the triangles in a terrain, a smaller number of triangles is used to render an approximation of the terrain.<br>
+<br>
+Terrains have a few limitations:</font></p>
+
+<ul>
+  <li><font face="Verdana"> The vertices of a terrain are laid out in a square grid pattern, with the same number of vertices along each edge of the grid.<br>
+    </font></li>
+  <li><font face="Verdana"> Only the height of a vertex may be modified.<br>
+    </font></li>
+  <li><font face="Verdana"> The size of a terrain must be a 'power of 2' value,
+    eg: 2,4,8,16,32...</font></li>
+</ul>
+
+<h2><font face="Verdana"><span style="background-color: #6097C9">&nbsp;Creating
+Terrains&nbsp;</span></font></h2>
+<p>
+<font face="Verdana">You can create terrains either by loading in a heightmap image, or by creating an 'empty' terrain and setting the height of each vertex yourself.<br>
+<br>
+A heightmap image is simply a grayscale image, where black pixels represent 'low' vertices, and white pixels represent 'high' vertices. A heightmap image must be of a valid terrain size - ie: square, and a power of 2 wide/high.<br>
+<br>
+When a terrain is created, its width and depth are the same as the size of the terrain, and its height is 1. For example, if you create a terrain using:<br>
+<br>
+<b>terrain=CreateTerrain( 32 )</b><br>
+<br>
+The terrain will extend from 0 to 32 along the x and z axis', and from 0 to 1 along the y axis.<br>
+<br>
+However, you are free to position and scale the terrain as you see fit using entity manipulation commands such as ScaleEntity, PositionEntity. For example:</font>
+</p>
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+	<font face="Arial">
+&nbsp;&nbsp;&nbsp;&nbsp;;terrain is 32 x 1 x 32<b><br>
+      &nbsp;&nbsp;&nbsp; terrain=CreateTerrain( 32 )<br>
+      <br>
+      &nbsp;&nbsp;&nbsp; </b>;terrain is now 320 x 100 x 320<br>
+      &nbsp;&nbsp;&nbsp; <b>ScaleEntity terrain,10,100,10<br>
+      <br>
+      &nbsp;&nbsp;&nbsp; </b>;and centred (on x/z axis') at 0,0,0<br>
+      &nbsp;&nbsp;&nbsp; <b>PositionEntity terrain,-160,0,-160</b></font><br><br>
+	
+    </td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+
+<h2><font face="Verdana"><span style="background-color: #6097C9">&nbsp;Terrrain
+Detail Level&nbsp;</span></font></h2>
+
+<p>
+<font face="Verdana">You can directly control how many triangles are used to approximate a terrain using the
+<b> TerrainDetail</b> command.<br>
+<br>
+Using less triangles will naturally result in better speed, but beware that below a certain threshold your terrain will start to behave very strangely!<br>
+<br>
+For example, if you ask Blitz3D to render a detailed 1,000,000 triangle terrain using only 100 triangles, chances are it just wont be able to do a decent job.<br>
+<br>
+This usually leads to a phenomenon known as 'pop-in', where Blitz3D just isn't able to make its mind about about how to draw the terrain, and you end up with vertices abruptly changing position, or 'popping', when the camera view changes.<br>
+<br>
+So what number of triangles should be used? Well, this is definitely a 'trial and error' kind of thing and depends on a number of factors:</font></p>
+
+<ul>
+  <li><font face="Verdana">The variation in the terrain - ie: how 'bumpy' it is.<br>
+    </font></li>
+  <li><font face="Verdana"> The scale of the terrain - ie: how much of it is visible to the camera.<br>
+    </font></li>
+  <li><font face="Verdana"> The range of the camera.</font></li>
+</ul>
+<p><font face="Verdana">You can reduce the number of triangles needed to represent a terrain using the following tricks:</font></p>
+<ul>
+  <li><font face="Verdana"> 'Blur' or smooth out the terrain. For example, if you're using a heightmap image, just apply a 'blur' filter or equivalent to the
+    heightmap.<br>
+    </font></li>
+  <li><font face="Verdana"> Increase the scale of the terrain so less of it is visible to the camera.<br>
+    </font></li>
+  <li><font face="Verdana"> Decrease the camera range, again meaning less of the terrain is visible to the camera.</font></li>
+</ul>
+<p><font face="Verdana">If all of this sounds a bit wishy-washy, well, it is!<br>
+<br>
+Generating nice looking terrain with minimum pop-in is as much an artform as it is a science.<br>
+<br>
+Blitz3D also provides a technique called '<b>vertex morphing</b>' to help reduce pop-in. Vertex morphing involves Blitz3D automatically smoothing out the terrain a little to reduce pop-in. The
+<b> TerrainDetail</b> command is also used to enable vertex morphing.</font></p>
+
+
+<h2><font face="Verdana"><span style="background-color: #6097C9">&nbsp;Modifying
+Terrain&nbsp;</span></font></h2>
+
+<p>
+<font face="Verdana">The <b> ModifyTerrain</b> command is used to change the height of a terrain vertex, for example:</font></p>
+
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+	
+&nbsp;&nbsp;&nbsp;&nbsp;<font face="Arial">;create a terrain of size 32.</font><br>&nbsp;&nbsp;&nbsp;
+      <font face="Arial"><b>terrain=CreateTerrain( 32 )&nbsp;</b></font>
+      <p><font face="Arial">&nbsp;&nbsp; ;push the centre vertex up half-way.<br>
+      &nbsp;&nbsp; <b>ModifyTerrain terrain,16,16,.5</b></font><br><br>
+	
+      </p>
+	
+    </td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+
+<p>
+<font face="Verdana">The parameters used with <b> ModifyTerrain</b> must be given in 'terrain coordinates'. This means that the x and z values should always be from 0 to the size of the terrain, and the height value should always be from 0 to 1. In other words, any scale, position or rotation applied to the terrain will be ignored.</font></p>
+
+
+<h2><font face="Verdana"><span style="background-color: #6097C9">&nbsp;Texturing
+Terrains&nbsp;</span></font></h2>
+
+<p><font face="Verdana">By default the terrain you create will be just a plain
+colour, but by using the <b>EntityTexture</b> command it is possible to apply a
+texture brush to the whole landscape. Unfortunately at this time, it is not
+possible to texture different parts of the terrain with different textures. But
+fear not !, remember a brush can have 8 multitextures applied to it. By
+carefully building up these textures - it is possible to have different
+texturemaps applied onto the same landscape.</font></p>
+
+<p><center>
+<font color="#666666" face="Verdana">Copyright 2001 (c) Paul Gerfen -
+GamecodingUK</font></center></p>
+</body>
+</html>

+ 192 - 0
_release/tutorials/GCUK_Tuts/Texturing.html

@@ -0,0 +1,192 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+	<title>Introduction to Camera Entities</title>
+</head>
+<body>
+
+<center><h1><font face="Verdana">Introduction to Texturing</font></h1>
+</center>
+
+<p>
+<font face="Verdana">Textures are probably the coolest thing to happen to 3D graphics since polygons!<br>
+<br>
+Textures are special images which are drawn on top of polygons in order to give them added detail.<br>
+<br>
+Textures can be either created 'from scratch' or loaded from an image file.<br>
+<br>
+Just like ordinary Blitz2D images, textures are made up of pixels. These pixels can be accessed using x,y coordinates just like images - only, in a slightly different way.<br>
+<br>
+Instead of x,y values ranging from 0 up to the size of the texture, x,y values for textures range from 0 to 1. This means the texture pixel at location .5,.5 is always in the center of the texture. This is possibly a little confusing at first, but it actually turns out to be very convenient as you don't have to keep track of how big your textures are!</font>
+</p>
+<h2>
+<font face="Verdana"><span style="background-color: #6097C9">&nbsp;Texture
+Flags&nbsp;</span></font>
+</h2>
+<p>
+<font face="Verdana">When a texture is created, a 'texture flags' value is provided to indicate what type of texture you're after.<br>
+<br>
+Here are the legal texture flags values:</font>
+</p>
+<table border="1" width="100%">
+  <tr>
+    <td width="5%"><font face="Verdana">1:</font></td>
+    <td width="95%"><font face="Verdana">	Texture has color information.</font></td>
+  </tr>
+  <tr>
+    <td width="5%"><font face="Verdana">2:</font></td>
+    <td width="95%"><font face="Verdana">	Texture has alpha information.</font></td>
+  </tr>
+  <tr>
+    <td width="5%"><font face="Verdana">4:</font></td>
+    <td width="95%"><font face="Verdana">	Texture is a masked texture. This means that black pixels are transparent.</font></td>
+  </tr>
+  <tr>
+    <td width="5%"><font face="Verdana">8:</font></td>
+    <td width="95%"><font face="Verdana">	Texture is mipmapped.</font></td>
+  </tr>
+  <tr>
+    <td width="5%"><font face="Verdana">16:</font></td>
+    <td width="95%"><font face="Verdana">	Texture is horizontally clamped.</font></td>
+  </tr>
+  <tr>
+    <td width="5%"><font face="Verdana">32:</font></td>
+    <td width="95%"><font face="Verdana">	Texture is vertically clamped.</font></td>
+  </tr>
+  <tr>
+    <td width="5%"><font face="Verdana">64:</font></td>
+    <td width="95%"><font face="Verdana">	Texture is a spherical environment map.</font></td>
+  </tr>
+</table>
+<p>
+<font face="Verdana">Texture flags can be added together to combine the effect of separate flags. For example, a texture flags value of '3' indicates you want a texture with both color PLUS alpha information.<br>
+<br>
+If neither the color, alpha or mask flags are used, then the texture is created in a special format that allows you to draw to it using standard Blitz2D or even Blitz3D commands! A texture created this way will have color information, but may or may not have alpha information (this depends on what graphics card you're using!), so its really safest to assume it has no alpha information.<br>
+<br>
+If the masked flag is used, the color and alpha flags are ignored.<br>
+<br>
+The clamped flags allow you to control whether the texture 'wraps' or not. By default, textures will 'wrap' or 'repeat' if drawn on large triangles. However, you can prevent this by using the clamped flags.<br>
+<br>
+Finally, the spherical environment map flag provides a dead easy way to do cool 'reflective' type effects. Try it!</font>
+</p>
+
+<h2><font face="Verdana"><span style="background-color: #6097C9">&nbsp;Creating
+Textures&nbsp;</span></font></h2>
+
+<p>
+<font face="Verdana">You can either create a texture and draw to it by hand, or load a texture from an image file.<br>
+<br>
+Loading a texture from a file is easy:</font></p>
+
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+	
+      &nbsp;&nbsp;&nbsp; <font face="Arial"><b>texture=LoadTexture( "mytexture.jpg",3 )&nbsp;&nbsp;</b></font>&nbsp;&nbsp;<font face="Arial"><br>
+      </font><br>
+	
+    </td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+
+<p>
+<font face="Verdana">Note the texture flags value of '3'. This indicates we want the texture to contain both color and alpha information.<br>
+<br>
+However, the JPG file format does not support alpha information! In this case, Blitz3D will create its own alpha values based on the color values in the texture.<br>
+<br>
+However, both the PNG and TGA file formats do support alpha information, and Blitz3D will use this information if present.<br>
+<br>
+To create a texture by hand, use the <b> CreateTexture</b> command.</font></p>
+
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+	
+      &nbsp;&nbsp;&nbsp; <font face="Arial">;create a 256x256 texture</font><br>
+      &nbsp;&nbsp;&nbsp; <font face="Arial"><b>texture=CreateTexture( 256,256,0 )</b></font>
+      <p><font face="Arial">&nbsp;&nbsp;&nbsp; </font><font face="Arial">;retrieve its width</font><font face="Arial"><br>
+      &nbsp;&nbsp;&nbsp; <b>width=TextureWidth( texture )</b></font></p>
+      <p><font face="Arial">&nbsp;&nbsp;&nbsp; ;retrieve its height<br>
+      &nbsp;&nbsp;&nbsp; <b>height=TextureHeight( texture )</b><br>
+      </font><br>
+	
+    </td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+
+<p>
+<font face="Verdana">Why are we retrieving the texture size when we've already told Blitz3D how big we want the texture?<br>
+<br>
+Well, this is because all 3D graphics cards have limits on the size of texture they can handle. Typically, texture width and height should be a power of 2 value (eg: 1,2,4,8,16,32,64,128,256,512,1024...) and in some cases - 3DFX cards being the main culprit here - must be no larger than 256 by 256.<br>
+<br>
+There are also rumours out there that some cards can only handle square textures - although here at Blitz Research we are yet to run into any such beast!<br>
+<br>
+A texture size where width and height are both power of 2 values and &lt;= 256 is pretty much guaranteed to be supported by your card - but it never hurts to check!<br>
+<br>
+In the event that you specify a texture size not supported by your graphics card, Blitz3D will pick the nearest useful size instead.<br>
+<br>
+Also note that we are using a texture flags value of 0. This is because we probably want to draw something to the texture, and to be able to use graphics commands on a texture you should not specify the color, alpha or masked texture flags.<br>
+<br>
+OK, now we've created our texture we should probably draw something on it:</font></p>
+
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+	
+      &nbsp;&nbsp;&nbsp;&nbsp; <font face="Arial">;set drawing buffer to the texture<br>
+      &nbsp;&nbsp;&nbsp;<b> SetBuffer TextureBuffer( texture )</b></font>
+      <p><font face="Arial">&nbsp;&nbsp;&nbsp; ;set cls color to red<br>
+      &nbsp;&nbsp;&nbsp;<b> ClsColor 255,0,0</b></font></p>
+      <p><font face="Arial">&nbsp;&nbsp;&nbsp; ;clear the texture to red<br>
+      &nbsp;&nbsp;&nbsp;<b> Cls&nbsp;</b></font></p>
+      <p><font face="Arial">&nbsp;&nbsp;&nbsp; ;set drawing color to blue<br>
+      &nbsp;&nbsp;&nbsp; <b>Color 0,0,255&nbsp;</b></font></p>
+      <p><font face="Arial">&nbsp;&nbsp;&nbsp; ;draw a blue oval.<br>
+      &nbsp;<b>&nbsp;&nbsp; Oval 0,0,width,height&nbsp;</b></font></p>
+      <p><font face="Arial">&nbsp;&nbsp;&nbsp; ;back to the back buffer...&nbsp;&nbsp;&nbsp;<br>
+      &nbsp;&nbsp;&nbsp; <b>SetBuffer BackBuffer()</b>&nbsp;&nbsp;<br>
+      </font><br>
+	
+    </td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+
+<p>
+<br>
+<font face="Verdana">Finally, once you've finished with a texture, use <b> FreeTexture</b> to release it.</font></p>
+
+
+<h2><font face="Verdana"><span style="background-color: #6097C9">&nbsp;Animating
+Textures&nbsp;</span></font></h2>
+
+<p><font face="Verdana"><b>ScaleTexture</b>, <b> RotateTexture</b> and <b> PositionTexture</b> can all be used to animate textures. For example, to cause a texture to scroll, you might use something like...<br>
+<br>
+</font><font face="Arial"><b>texture_x#=texture_x#+.1</b>		;add .1 to texture x position.<br>
+<b>PositionTexture texture,texture_x#,0</b>	;position the texture.</font><font face="Verdana"><br>
+<br>
+...in your main loop. You can dynamically scale and rotate textures in a similar way.</font></p>
+
+<h2><font face="Verdana"><span style="background-color: #6097C9">&nbsp;Multitexturing&nbsp;</span></font></h2>
+
+<p><font face="Verdana">Blitz3D allows you to draw up to 8 textures to a single triangle, a technique known as
+'<b>multitexturing</b>'.<br>
+<br>
+A common use for multitexturing is '<b>light mapping</b>', a technique where a texture containing lighting information is combined with a texture containing color information to provide lighting effects.<br>
+<br>
+When you use the <b> EntityTexture</b> or <b> BrushTexture</b> commands, an optional 'index' parameter allows you to control which of the 8 textures you are setting.<br>
+<br>
+By default, multiple textures are combined using multiplication which achieves a lighting type effect. However, the
+<b> TextureBlend</b> command allows you to perform other operations such as alpha-blend and add on multiple textures.</font></p>
+
+<p><center>
+<font color="#666666" face="Verdana">Copyright 2001 (c) Paul Gerfen -
+GamecodingUK</font></center></p>
+</body>
+</html>

+ 34 - 0
_release/tutorials/GCUK_Tuts/animation.bb

@@ -0,0 +1,34 @@
+; Object Animation ***
+; By Paul Gerfen (www.gamecoding.co.uk)
+
+Graphics3D 800,600
+
+SetBuffer BackBuffer()
+
+camera=CreateCamera()
+CameraViewport camera,0,0,800,600
+
+light=CreateLight()
+
+man=LoadMD2( "gargoyle.md2" )
+PositionEntity man,0,-35,600
+RotateEntity man,0,180,0
+
+AnimateMD2 man,1,.1,32,46
+
+While Not KeyHit(1)
+
+	If dist<970 MoveEntity man,0,0,.5
+	If dist=970 AnimateMD2 man,1,.05,0,31
+
+	dist=dist+1
+		
+	UpdateWorld
+	RenderWorld
+	
+	Text 320,500,"An Animated MD2 Demo"
+	
+	Flip
+
+Wend
+End

BIN
_release/tutorials/GCUK_Tuts/b3dlogo_small.jpg


BIN
_release/tutorials/GCUK_Tuts/blitztexture.bmp


+ 43 - 0
_release/tutorials/GCUK_Tuts/camera.bb

@@ -0,0 +1,43 @@
+; Camera Movement ***
+; By Paul Gerfen (www.gamecoding.co.uk)
+
+Graphics3D 800,600
+
+SetBuffer BackBuffer()
+
+camera=CreateCamera()
+CameraViewport camera,0,0,800,600
+
+light=CreateLight()
+
+house=LoadMesh( "house.3ds" )
+RotateEntity house,0,90,0
+
+While Not KeyHit(1)
+
+	
+	If KeyDown(200)	Then
+		MoveEntity camera,0,0,1
+	EndIf
+	
+	If KeyDown(208)	Then
+		MoveEntity camera,0,0,-1
+	EndIf
+	
+	If KeyDown(203)	Then
+		TurnEntity camera,0,1.0,0 
+	EndIf
+	
+	If KeyDown(205)	Then
+		TurnEntity camera,0,-1.0,0 
+	EndIf
+	
+	UpdateWorld
+	RenderWorld
+	
+	Text 335,500,"Camera Movement"
+	
+	Flip
+
+Wend
+End

+ 42 - 0
_release/tutorials/GCUK_Tuts/collision.bb

@@ -0,0 +1,42 @@
+Graphics3D 800,600
+
+Const CUBE_COL=1
+Const SPHERE_COL=2
+
+SetBuffer BackBuffer()
+
+camera=CreateCamera()
+CameraViewport camera,0,0,800,600
+PositionEntity camera,0,0,-5
+
+light=CreateLight()
+
+cube=CreateCube()
+PositionEntity cube,-5,0,5
+EntityColor cube,70,80,190
+EntityType cube,CUBE_COL
+
+sphere=CreateSphere(12)
+PositionEntity sphere,5,0,5
+EntityColor sphere,170,80,90
+EntityType sphere,SPHERE_COL
+
+Collisions SPHERE_COL,CUBE_COL,3,1
+
+While Not KeyHit(1)
+	
+	MoveEntity sphere,-0.02,0,0
+	
+	UpdateWorld
+	RenderWorld
+	
+	If EntityCollided(sphere,CUBE_COL)
+	Text 370,80,"Collided !!!"
+	EndIf
+
+	Text 335,500,"Collision Detection"
+	
+	Flip
+
+Wend
+End

BIN
_release/tutorials/GCUK_Tuts/house.3ds


+ 61 - 0
_release/tutorials/GCUK_Tuts/lights.bb

@@ -0,0 +1,61 @@
+; Lighting ***
+; By Paul Gerfen (www.gamecoding.co.uk)
+
+Graphics3D 800,600
+
+SetBuffer BackBuffer()
+
+camera=CreateCamera()
+CameraViewport camera,0,0,800,600
+
+AmbientLight 0,0,0
+
+;cube 1
+cube=CreateCube()
+PositionEntity cube,0,0,5
+
+light=CreateLight(3)
+LightColor light,100,20,30
+LightConeAngles light,0,45
+PositionEntity light,0,0,0.5
+LightRange light,8
+PointEntity light,cube
+
+;cube 2
+cube2=CopyEntity(cube)
+PositionEntity cube2,-5,0,8
+
+light2=CreateLight(3)
+LightColor light2,40,150,60
+LightConeAngles light,0,45
+PositionEntity light2,-5,0,4.5
+LightRange light2,8
+PointEntity light2,cube2
+
+;cube 3
+cube3=CopyEntity(cube)
+PositionEntity cube3,5,0,8
+
+light3=CreateLight(3)
+LightColor light3,70,80,190
+LightConeAngles light,0,45
+PositionEntity light3,5,0,4.5
+LightRange light3,8
+PointEntity light3,cube3
+
+
+While Not KeyHit(1)
+
+	TurnEntity cube,0.1,0.2,0.3
+	TurnEntity cube2,0.3,0.2,0.1
+	TurnEntity cube3,0.3,0.2,0.1
+	
+	UpdateWorld
+	RenderWorld
+	
+	Text 310,500,"Coloured Lighting Demo"
+	
+	Flip
+
+Wend
+End

+ 40 - 0
_release/tutorials/GCUK_Tuts/movement.bb

@@ -0,0 +1,40 @@
+; Movement & Rotation ***
+; By Paul Gerfen (www.gamecoding.co.uk)
+
+Graphics3D 800,600
+
+SetBuffer BackBuffer()
+
+camera=CreateCamera()
+CameraViewport camera,0,0,800,600
+
+light=CreateLight()
+
+rocket=LoadMesh( "rocket.3ds" )
+PositionEntity rocket,0,0,7
+
+
+While Not KeyHit(1)
+
+	
+	If KeyDown(200)	Then
+		MoveEntity rocket,0,0.05,0
+	EndIf
+	
+	If KeyDown(203)	Then
+		TurnEntity rocket,0,0,1.0
+	EndIf
+	
+	If KeyDown(205)	Then
+		TurnEntity rocket,0,0,-1.0
+	EndIf
+	
+	UpdateWorld
+	RenderWorld
+	
+	Text 320,500,"Movement & Rotation"
+	
+	Flip
+
+Wend
+End

+ 185 - 0
_release/tutorials/GCUK_Tuts/page1.html

@@ -0,0 +1,185 @@
+<font face="verdana">
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="61%" bgcolor="#6097C9"><font face="verdana">
+<h1 align="left"><font color="#FFFFFF">&nbsp;Setting Up</font></h1>
+<p align="left"><b>&nbsp;Aim</b>: To setup a simple B3D program<br>
+&nbsp;<b>Skill level</b>: Beginner<br>
+&nbsp;<b>Files Needed</b>: settingup.bb</font>
+      <p>&nbsp;</td>
+    <td width="5%">&nbsp;</td>
+    <td width="34%"><font face="verdana"><img src="1c.jpg" alt="Setting Up" width="165" height="128" align="right">
+</font>
+    </td>
+  </tr>
+</table>
+
+<p>
+Blitz3D sits on top of the regular Blitz, instead of learning a totally new set of commands we can use the same programming techniques as we would with a any Blitz 2D program. (which is very handy if you have used Blitz before)</p>
+<p>
+Let's take a look at our first program, before we go any further.</p>
+
+<table border="1" width="86%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+      &nbsp; <font face="arial">Graphics3D 800,600<br>
+      <br>
+      &nbsp; SetBuffer BackBuffer()<br>
+      <br>
+      &nbsp; camera=CreateCamera()<br>
+      &nbsp; CameraViewport camera,0,0,800,600<br>
+      <br>
+      &nbsp; light=CreateLight()<br>
+      <br>
+	  &nbsp; cube=CreateCube()<br>
+	  &nbsp; PositionEntity cube,0,0,5<br><br>
+		  
+	  &nbsp; While Not KeyHit(1)<br>
+      <br>
+    
+	  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TurnEntity cube,.1,.2,.3<br><br>
+	 
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UpdateWorld<br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RenderWorld<br>
+      <br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Text 320,500,&quot;First Blitz3D Program&quot;<br>
+      <br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Flip<br>
+      <br>
+      &nbsp; Wend<br>
+      &nbsp; End<br><br>
+      </font></td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+
+<p>
+Run the program above if you haven't already,  hopefully you'll be confronted with a spinning 3D Cube and a short message. Not bad for only 15 lines of code !!!</p>
+<p>
+So what's happening here ? - lets go through it…</p>
+</font>
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<b><font face="Arial">Graphics3D 800,600</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+<p>
+
+Perhaps the most important line of the whole program, this instruction is responsible for initializing the 3d graphics card. As you've probably guessed I'm setting up the screen with the res of 800x600. If you have any problems running the programs then change the values of this command. (as not all graphics cards will be able to use the same res)</p>
+</font>
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%"><b><font face="Arial">SetBuffer BackBuffer()</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+<p>
+
+This command is the same as the original Blitz buffer instruction as we use in all our Blitz programs.</p>
+</font>
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%"><b><font face="Arial">camera=CreateCamera()<br>
+CameraViewport camera,0,0,800,600</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+<p>
+
+These two camera instructions firstly create a standard camera, then setup the variables to respond to the graphics mode we are in.<br> 
+Why do we need a camera ?, well the standard camera is what we can see. We could have multiple cameras setup in our program and switch between them. For example we could have one setup to follow a character in our program and one that remains static pointing at something. (for instance as a close circuit TV camera)</p>
+</font>
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%"><b><font face="Arial">light=CreateLight()</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+<p>
+
+We shed some light on our little scene by defining a standard light, by default B3D will already give us a light (so there's no real need for this instruction) - its just good practise to set things up properly.</p>
+</font>
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%"><b><font face="Arial">cube=CreateCube()<br>
+PositionEntity cube,0,0,5</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+<p>
+
+To make our little cube, instead of using a 3d modeller program - I've cheated and used the B3D autocreate command to give us a cube.<br><br>
+
+<b>NOTE:</b> Blitz3D contains a whole host of built in ready-to-use shapes such as Cube, Sphere, Cylinder and Cone. (See doc's for details)</p>
+</font>
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%"><b><font face="Arial">PositionEntity cube,0,0,5</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+<p>
+
+Now we have cube we need to position it, by using the POSITIONENTITY command. As you can see we positioned the CUBE, but we could also use the command to move anything - including the camera. The coordinates are in the format of X,Y and Z. Remember using negative coordinates will move the shape in the opposite direction, for example: PositionEntity cube,3,-2,7 is really moving the cube 3 units to the right, 2 units up and 7 units into the screen. (away from us)</p>
+<p>
+I expect you will use this command mostly in the beginning sections of your programs to move everything in position.</p>
+
+</font>
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%"><b><font face="Arial">While Not KeyHit(1)</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+
+<p>
+The start of our main programming loop, It's good manners to use a loop like this that will quit out when the ESC key is pressed. How many times have you run a program only to find that the only way of quitting out is to restart the computer ?</p>
+
+
+</font>
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%"><b><font face="Arial">TurnEntity cube,0.1,0.2,0.3</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+<p>
+There's going to be at least 2 commands that your program will rely heavily on, and this is one of them. This little beauty of an instruction turns the cube by the amount giving in the X,Y and Z amounts. In this case X=.1 of a unit, Y=.2 and Z=.3 - as before you use negative commands to spin in the other direction. (and of course you can use the instruction to spin anything, rather than just a shape - such as the camera)</p>
+<p>
+One important thing to remember is that although it rotates the object, the axis rotate with it. For example you designed a rocket pointing up and then rotated it until it was pointing downwards, if you then move the shape in the Y plane (up & down) down would become up !!. It will make sense once you've played around with the examples...</p>
+
+</font>
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%"><b><font face="Arial">UpdateWorld<br>
+	RenderWorld</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+<p>
+The UPDATEWORLD command is responsible for updating the coordinates of the
+entities in our world that may have moved from their last position. (such as moving,
+rotating and scaling objects) - and controlling any collisions that may have
+been setup. Without using this instruction, your world would
+be a very static place. Lastly we use RENDERWORLD to display the scene into our double buffer ready for us to flip into sight with the FLIP instruction.</p>
+
+</font>
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%"><b><font face="Arial">Text 320,500,&quot;First Blitz3D Program"<br>
+	  Flip<br>
+	  Wend<br>
+	  End</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+<p>
+This last section of code firstly prints a message to the screen, (which must be done every update in the loop as the buffer is cleared every time the loop repeats). This is a good time to do any other drawing to the screen such as using commands from the original 2d version of blitz. (such as scores or special effects). Now we flip the buffer onto the screen using the old FLIP instruction. The WEND command marks the end of our repeating loop, lastly we come to the END, which as we already know quits the program. (so we must have pressed the ESC key to reach this part in our program)</p>
+<p>
+<center><font color="#808080">That's it, we have successfully reached the end of our first program<br>
+Tutorial 2 - <a href="page2.html">Movement &amp; Rotation</a></font></center></p>
+</font>

+ 157 - 0
_release/tutorials/GCUK_Tuts/page2.html

@@ -0,0 +1,157 @@
+<font face="verdana">
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="61%" bgcolor="#6097C9"><font face="verdana">
+<h1 align="left"><font color="#FFFFFF">&nbsp;Movement &amp;<br>
+&nbsp;Rotation</font></h1>
+<p align="left"><b>&nbsp;Aim</b>: Move an object around 3d space<br>
+&nbsp;<b>Skill level</b>: Beginner<br>
+&nbsp;<b>Files Needed</b>: movement.bb / rocket.3ds</font>
+      <p>&nbsp;</td>
+    <td width="5%">&nbsp;</td>
+    <td width="34%">
+      <p align="center"><font face="verdana">
+<img src="2c.jpg" alt="Movement" width="167" height="127" align="right">
+</font>
+
+
+      </p>
+    </td>
+  </tr>
+</table>
+
+<p>
+Lets start to get things moving, in this tutorial we will be loading an object which I made up in 3D Studio. Granted its not wonderful and looks more like a candle than a state-of-the-art rocket, but it will do us.</p>
+<p>
+Let's take a look through the full source, feel free to run it and have a play !.</p>
+<p>NOTE: You will need to have the object ROCKET.3DS in the same directory as the sourcecode for Blitz to find it</p> 
+<p>
+You can move the rocket forwards with the <b>UP</b> cursor, and rotate it with the <b>LEFT</b> and <b>RIGHT</b> cursor keys.</p>
+<table border="1" width="86%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+      &nbsp; <font face="arial">Graphics3D 800,600<br>
+      <br>
+      &nbsp; SetBuffer BackBuffer()<br>
+      <br>
+      &nbsp; camera=CreateCamera()<br>
+      &nbsp; CameraViewport camera,0,0,800,600<br>
+      <br>
+      &nbsp; light=CreateLight()<br>
+      <br>
+      &nbsp; rocket=LoadMesh( &quot;rocket.3ds&quot; )<br>
+      &nbsp; PositionEntity rocket,0,0,7<br>
+      <br>
+      &nbsp; While Not KeyHit(1)<br>
+      <br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If KeyDown(200) Then<br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MoveEntity
+      rocket,0,0.05,0<br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EndIf<br>
+      <br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If KeyDown(203) Then<br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TurnEntity
+      rocket,0,0,1.0<br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EndIf<br>
+      <br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If KeyDown(205) Then<br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TurnEntity
+      rocket,0,0,-1.0<br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EndIf<br>
+      <br>
+      &nbsp; UpdateWorld<br>
+      &nbsp; RenderWorld<br>
+      <br>
+      &nbsp; Text 320,500,&quot;Movement &amp; Rotation&quot;<br>
+      <br>
+      &nbsp; Flip<br>
+      <br>
+      &nbsp; Wend<br>
+      &nbsp; End<br><br>
+      </font></td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+<p>
+I won't explain every line of code, just the new commands which we have yet to use. First up is:</p>
+</font>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<b><font face="Arial">rocket=LoadMesh(&quot;rocket.3ds&quot;)</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+<p>
+As you can probably guess, this line of code will load a 3d model called ROCKET.3DS into a handle variable called 'rocket'.</p>
+<p>
+What's a handle variable ?, its exactly the same type of label we use in normal blitz for initializing sprites. (It holds the address in memory of where the data is stored), in this case the variable rocket points to the location of where the model is stored.</p>
+</font>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<b><font face="Arial">If KeyDown(200)	Then<br>
+MoveEntity rocket,0,0.05,0<br>
+EndIf</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+<p>
+These 3 lines tell us that if you are pressing the UP cursor move the object 'ROCKET' in the Y axis 0.05 units upwards.</p>
+<p>
+Let's take a more indepth look at this, remember my rocket is pointing up - so to start with I want my rocket to travel upwards - hence why I am increasing the Y coordinate. (remember in 3D a positive Y means up - not down like in normal coordinate systems, such as plotting sprites in standard Blitz)</p>
+<p>
+If my rocket was a car, that was designed to be facing towards the right - then I would want my car to travel to the right of the screen, (it goes forwards) - so I would be  increasing the X coordinate. It's very important to get this right at the beginning of your program, or your shape could start moving in the wrong direction to what you want it to.</p>
+</font>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<p>
+<b><font face="Arial">If KeyDown(203)	Then<br>
+TurnEntity rocket,0,0,1.0<br>
+EndIf</font></b></p>
+<p>	
+<b><font face="Arial">If KeyDown(205)	Then<br>
+TurnEntity rocket,0,0,-1.0<br>
+EndIf</font></b></p>
+    </td>
+  </tr>
+</table>
+<font face="verdana">
+<p>
+It should be quite obvious to you that these lines control the rotation of our rocket. If you press the LEFT cursor - turn the rocket 1.0 unit clockwise, whereas pressing the RIGHT cursor results in turning -1.0 units anti clockwise.</p>
+<p>
+So how comes the shape still moves forward even though we are no longer pointing up ? .. well.. you've got to thank Mr Sibly for giving us the very easy TurnEntity command !. You see as we turn the object, the axis move with it. If we rotate the shape 90 degrees, the Y axis is now pointing where the X axis should be. Don't worry why or how.. just be thankful you don't have to work out any nasty calculations to do it.</p>
+<p>
+Just incase you where wondering, you can rotate the shape without the axis moving by using the RotateEntity command. This would be used mainly for placement of objects in your world - for example, if I designed the rocket on its side. I would firstly rotate it till its standing upright with the Rotate command - then I could use the turn command to move it.</p>
+<p>
+And that's about it really.. The only way of getting to know this command, (which will probably be your most widely used command) - is to experiment. Try getting the rocket to rotate in other directions !!</p>
+<p>
+remember here's the format you use:</p>
+<table border="0" width="100%" bgcolor="#FFFF00">
+  <tr>
+    <td width="100%">
+
+<font face="verdana">
+<i>TurnEntity [what object it is],<br>
+X [amount to rotate about the X axis],<br>
+Y [amount to rotate about the Y axis],<br>
+Z [amount to rotate about the Z axis]</i>
+</font>
+
+
+    </td>
+  </tr>
+</table>
+<p>NOTE: Blitz3D also contains a command for scaling an object, (see the doc's for info on SCALEENTITY) - if for instance we designed it too small we could increase it on-the-fly, or shrink it if its too large. If you choose to use a multitude of different 3d Packages to design your objects with, then you will need to use this command quite a lot. 3D Studio for instance, likes to scale your object much larger than other packages.</p>
+<center><font color="#808080">Tutorial 3 - <a href="page3.html">Camera Movement</a></font></center></font>

+ 96 - 0
_release/tutorials/GCUK_Tuts/page3.html

@@ -0,0 +1,96 @@
+<font face="verdana">
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="61%" bgcolor="#6097C9"><font face="verdana">
+<h1 align="left"><font color="#FFFFFF">&nbsp;Camera Movement</font></h1>
+<p align="left"><b>&nbsp;Aim</b>: Move the camera around 3d space<br>
+&nbsp;<b>Skill level</b>: Beginner<br>
+&nbsp;<b>Files Needed</b>: camera.bb / house.3ds
+</font>
+      <p>&nbsp;</td>
+    <td width="5%">&nbsp;</td>
+    <td width="34%"><font face="verdana">
+<img src="5c.jpg" alt="Camera" width="167" height="129" align="right">
+</font>
+
+
+    </td>
+  </tr>
+</table>
+
+<p>
+So far we have just used a static camera, which just sits there - pointing at the screen. But in the real world of PC games - we will want it to follow the main character around, (if a third person view is required - such as Tomb Raider) or perhaps give us a more personal
+view such as a first person view (used in Quake or Unreal).</p>
+<p>Take a good look at Mr Sibly's 'Marko' demo for a great example of an intelligent
+camera. The code to control your camera can be just as complicated as the main game code... if you want it to be !
+<p>
+Let's have a look at a basic example:
+</p>
+
+<table border="1" width="86%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+      
+	  
+	  
+	  &nbsp; <font face="arial">Graphics3D 800,600<br>
+      <br>
+      &nbsp; SetBuffer BackBuffer()<br>
+      <br>
+      &nbsp; camera=CreateCamera()<br>
+      &nbsp; CameraViewport camera,0,0,800,600<br>
+      <br>
+      &nbsp; light=CreateLight()<br>
+      <br>
+      &nbsp; house=LoadMesh( &quot;house.3ds&quot; )<br>
+      &nbsp; RotateEntity house,0,90,0<br>
+      <br>
+      &nbsp; While Not KeyHit(1)<br>
+      <br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If KeyDown(200) Then<br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MoveEntity
+      camera,0,0,1<br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EndIf<br>
+      <br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If KeyDown(208) Then<br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MoveEntity
+      camera,0,0,-1<br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EndIf<br>
+      <br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If KeyDown(203) Then<br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TurnEntity
+      camera,0,1.0,0<br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EndIf<br>
+      <br>
+	  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If KeyDown(205) Then<br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TurnEntity
+      camera,0,-1.0,0<br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EndIf<br>
+      <br>
+      &nbsp; UpdateWorld<br>
+      &nbsp; RenderWorld<br>
+      <br>
+      &nbsp; Text 3</font></font><font face="arial">35</font><font face="verdana"><font face="arial">,500,&quot;Camera Movement&quot;<br>
+      <br>
+      &nbsp; Flip<br>
+      <br>
+      &nbsp; Wend<br>
+      &nbsp; End<br><br>
+      </font></td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+<p>
+Using the cursor keys you can explore the environment,  The UP & DOWN cursors moving forward and back in space - the LEFT & RIGHT cursors panning the camera around on the spot.</p>
+<p>
+There's not really much more to it, we have already covered movement and rotation in the previous tutorial. The only difference here is that we are moving forward into the screen. Just as we moved the shape, we use the same MoveEntity and TurnEntity commands to move the camera, That's what makes B3D such a great language to learn !.<br>
+Instead of having to remember loads of different commands for objects, cameras and lights - we just use the same instructions.</p>
+<p>Perhaps you want to make the view bob up and down, such as the walking motion in Quake or Doom.. easy enough, just create a loop that moves the height of the camera up and down. I'll leave the actual coding part up to you !.
+<p>By Default Blitz3D will stop drawing an object if it is too far away from the camera, this is known as the CAMERA RANGE. Anything past its region will not be drawn. This is very handy if we have alot on screen, anything far into the distance will not show - meaning that we gain some extra processing time.</p>
+<p>BUT WAIT... Blitz3D can also give us a fog effect !. We've all seen games that use it, (Unreal or example). The further the object is away from the camera the less we can see it. For more info on these functions see the doc's under Camera Commands. Used correctly, the fog commands can give a 3D world something of a sinister lifelike look !.</p>
+</font>
+
+
+<p><font face="verdana"><center><font color="#808080">Tutorial 3 - <a href="page4.html">Object
+Animation</a></font></center></font></p>

+ 212 - 0
_release/tutorials/GCUK_Tuts/page4.html

@@ -0,0 +1,212 @@
+<font face="verdana">
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="61%" bgcolor="#6097C9"><font face="verdana">
+<h1 align="left"><font color="#FFFFFF">&nbsp;Object Animation</font></h1>
+<p align="left"><b>&nbsp;Aim</b>: To animate an object<br>
+&nbsp;<b>Skill level</b>: Intermediate<br>
+&nbsp;<b>Files Needed</b>: animation.bb / gargoyle.md2</font>
+      <p>&nbsp;</td>
+    <td width="5%">&nbsp;</td>
+    <td width="34%">
+      <p align="right"><font face="verdana">
+<img src="6c.jpg" alt="Animation" width="166" height="128"></font></p>
+    </td>
+  </tr>
+</table>
+
+<p>
+So far we have just used static objects, its Time to liven up our 3d world and think about animation. Blitz will load in animated meshes from a variety of sources, including X. format (DirectX), MD2 (used by the Quake 2 engine) and lastly 3DS
+(3D Studio).</p>
+
+<p>
+How do you draw and animate an object ?, although B3D has a few commands for building shapes such as the cube and sphere instructions - really we need to use a 3d modeller program to create our object.</p>
+
+<p>
+Most 3d packages will export/import just about every format you are going to ever need, personally I like to work with the Directx format (X). What modeller you choose to use really depends on your preference, Truespace (www.caligari.com), Rhino 3D (www.rhino3d.com) and Canvas 3d
+(www.amegia.com) - all support X format without any problems.</p>
+
+<p>
+Recently I've been using the AC3D modeller for my modelling needs, since its simple but powerful. You can download a fully working trial version from
+official website - (www.comp.lancs.ac.uk/computing/users/andy/ac3d.html), but of course designing an object that has realistic movement really is an art form all in itself. Most of us including me - are going to find it a struggle,
+luckily places such as 3dcafe (www.3dcafe.com) contain hundreds of ready made free models for us to use.
+</p>
+
+
+<p>
+Time for the source:
+</p>
+
+<table border="1" width="86%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+      
+	  
+	  
+	  &nbsp; <font face="arial">Graphics3D 800,600<br>
+      <br>
+      &nbsp; SetBuffer BackBuffer()<br>
+      <br>
+      &nbsp; camera=CreateCamera()<br>
+      &nbsp; CameraViewport camera,0,0,800,600<br>
+      <br>
+      &nbsp; light=CreateLight()<br>
+      <br>
+      &nbsp; man=LoadMD2( &quot;gargoyle.md2&quot; )<br>
+	  &nbsp; PositionEntity man,0,-35,600<br>
+      &nbsp; RotateEntity man,0,</font></font><font face="arial">180<font face="verdana">,0<br>
+	  <br>
+	  &nbsp; Animate</font></font><font face="arial">MD2</font><font face="arial"> <font face="verdana"> man,1,.1,32,46<br>
+      <br>
+      &nbsp; While Not KeyHit(1)<br>
+      <br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If dist<970 MoveEntity man,.5,0,0<br>
+	  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If dist=970 Animate</font>MD2 </font><font face="arial"><font face="verdana">man,1,.05,0,31<br>
+	<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dist=dist+1<br>
+	  
+	  
+      <br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UpdateWorld<br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RenderWorld<br>
+      <br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Text 320,500,&quot;An Animated M</font>D2</font><font face="verdana"><font face="arial"> Demo&quot;<br>
+      <br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Flip<br>
+      <br>
+      &nbsp; Wend<br>
+      &nbsp; End<br><br>
+      </font></font></td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+<p>
+So whats going on ?</p>
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<b><font face="Arial">man=LoadMD2( "gargoyle.md2" )<br>
+PositionEntity man,0,-35,600<br>
+RotateEntity man,0,-90,0</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+
+<p>
+Here, I've used the LoadMD2 command to load an MD2 animated object into the pointer handle 'man'.
+MD2 models can be found just about anywhere on the net, they are the staple diet
+of Quake 2 - So as you'd expect there's thousands of ready made objects with
+animation out there just waiting to be included in your epic. (Although be
+careful to read any copyright messages that may be attached to them).<br>
+<br>
+Unless you plan on using MD2 models all the time, I expect you will be using the LOADMESH
+command which does exactly the same thing as the LOADMD2 instruction. (but allows loading of X and 3DS animations)&nbsp;<br>
+<br>
+We wont be going into any of the details that involve creating animations from a modeller, but if your interested I'm sure whatever product you use will contain some sort of tutorial for creating animations. (You should be able to find some tutorials for 3d modelling from
+my Gamecoding website very soon)</p>
+
+<p>
+The frames of animation (keyframes) are loaded in with the model, all we have to do is tell B3D where to start - and where to end !. Before we look at this in action, you will notice that I've positioned and rotated the object to a new starting point. Originally the character was designed facing Right, so we need to rotate it by 90 degrees - so it faces us.
+(I did this by using the RotateEntity command)</p>
+
+</font>
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<b><font face="Arial">AnimateMD2 man,1,.1,32,46</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+
+<p>
+This instruction informs B3D that we want the object 'man' to animate in a loop (so the walking frames can restart), at a speed of .1 of a unit, starting at frame 32 - and ending in frame 46</p>
+
+<p>
+When we have set the command up, every update (depending on the animation speed you have selected) the animation will run by itself without us having to do any more to
+it.</p>
+
+<p>
+If we were using a regular animated object (X or 3DS format) - we would use the
+ANIMATE instruction, which works exactly like the ANIMATEMD2 command I've used
+here in this example.</p>
+
+<p>
+As you can see by looking through the source, I've setup a loop that continues to move the shape forwards until the counter is equal to 970. (using the
+MOVEENTITY command)</p>
+
+<p>
+After that the animation is reset to display the standing stance animation.. (frames 0-31). Why not alter the program to include rotation, so that the character can move about freely.</p>
+
+<p>
+Although I've setup the animation to loop, we can of course just have it run through the animation loop once if we had wanted to it.
+To do this you just change the MODE flag in the Animate instruction. Here's the instruction in full:</p>
+
+</font>
+<table border="0" width="100%" bgcolor="#FFFF00">
+  <tr>
+    <td width="100%">
+
+<font face="Arial"><i>Animate [entity name], [mode 0,1,2 or 3], [speed], [frame to begin at], [frame to end at]</i></font></td>
+  </tr>
+</table>
+<font face="verdana">
+
+<p>
+in the case of MD2's you'd use the instruction:</p>
+
+<table border="0" width="100%" bgcolor="#FFFF00">
+  <tr>
+    <td width="100%">
+
+<i>
+
+<font face="Arial">Animate</font></font><font face="Arial">MD2 [entity name], [mode
+0, 1,2 or 3], [speed], [frame to begin at], [frame to end at]</font></i></td>
+  </tr>
+</table>
+<font face="verdana">
+
+<p>
+Just incase your interested, here's a rundown of all the mode switches we can
+use: (Remember we used the loop anim mode)</p>
+
+<table border="0" width="100%" bgcolor="#FFFF00">
+  <tr>
+    <td width="100%">
+
+<font face="Arial"><i>0: Stop Anim<br>
+1: Loop Anim<br>
+2: Ping-Pong Anim<br>
+3: One-Shot Anim</i></font></td>
+  </tr>
+</table>
+
+<p><b>NOTE: To play an anim backwards use a negative speed value</b></p>
+
+<p>B3D thankfully makes animation very easy, it really is just a case of setting up whatever we need
+the anim to do first using the various flags in the ANIMATION instruction before
+setting it running. However to make the animation look convincing you need to get the timing right. How many times have you looked at a game only to see the
+main hero character float-walking over the floor rather than connecting with it ?.<br><br>
+
+But that's half the fun of it !, as you'll see a little effort can really make a big difference.</p>
+
+<p>B3D contains a large array of animation commands that will suit every purpose
+you will ever need, but tucked away in the depths you'll find a couple of incredible
+commands that can morph animation frames from one animation to another. For
+instance, an object of a man running can switch smoothly to an anim of him
+standing still. If you run this example a few times and watch the point that the
+object comes to a halt you'll notice the jump. But, by using these commands we
+could smooth out the change so it would be unnoticeable. Although I wont be
+using these commands in this tutorial, I may add a new tutorial on the subject
+very soon.</p>
+
+<p>
+So what are you waiting for !, go and design the next Quake !!</p>
+</font>
+<p><font face="verdana"><center><font color="#808080">Tutorial 4 - <a href="page5.html">Texturing</a></font></center>
+</font>
+</p>

+ 109 - 0
_release/tutorials/GCUK_Tuts/page5.html

@@ -0,0 +1,109 @@
+<font face="verdana">
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="61%" bgcolor="#6097C9"><font face="verdana">
+<h1 align="left"><font color="#FFFFFF">&nbsp;Texturing</font></h1>
+<p align="left"><b>&nbsp;Aim</b>: How to texture an object<br>
+&nbsp;<b>Skill level</b>: Intermediate<br>
+&nbsp;<b>Files Needed</b>: texture.bb / blitztexture.bmp
+</font>
+      <p>&nbsp;</td>
+    <td width="5%">&nbsp;</td>
+    <td width="34%">
+      <p align="right"><font face="verdana">
+<img src="7c.jpg" alt="Texturing" width="166" height="127">
+</font>
+
+
+      </p>
+    </td>
+  </tr>
+</table>
+
+<p>
+For our objects to look more realistic we really need to texture them, but what is texture mapping ?<br>
+Think if it as a way of adding extra details to an object. For example... You design an ordinary white cube, doesn't look much does it ?</p>
+<p>
+But add a texturemap to it, and suddenly you have a BORG cube !.<br>
+Textures are bitmap pictures that have been designed with a paint program (that can save BMP format files.)</p>
+<p>
+Another example... If you designed a basic model of a creature, using a texturemap you could add all the external features - such as clothes and facial expressions.</p>
+<p>
+Although B3D has alot of commands to manage multiple textures and special effects, for now we shall just be using the very basic EntityTexture command.<br>
+
+Of course we could save ourselves alot of time by designing our objects and applying the textures to them directly from a 3d modelling program, but that would make this tutorial a waste of time !.<br><br>
+
+So why would we want to apply a texture in realtime ?, well for starters a new texture may be put onto the object at any time. Take a wall, shoot it ! - now for things to look realistic in our 3d world, we would like to have somekind of indication that it was shot. We could do this by loading a texture of a bullet hole directly onto the wall. Every 3d game currently on the market uses texture trickery in some form or another, as your experience grows - so will your imagination !. Why have a flat river, when you could use texturemaps to give the impression of ripples or waves.</p>
+
+<p>B3D has so many lovely features for us to use including the new ANIMATED textures command, we will be using this later on !. (Quake I/II/III used this trick to give us the impression of moving water)</p>
+
+<p>Let's look at this in practice:</p>
+
+<table border="1" width="86%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+      &nbsp; <font face="arial">Graphics3D 800,600<br>
+      <br>
+      &nbsp; SetBuffer BackBuffer()<br>
+      <br>
+      &nbsp; camera=CreateCamera()<br>
+      &nbsp; CameraViewport camera,0,0,800,600<br>
+      <br>
+      &nbsp; light=CreateLight()<br>
+      <br>
+	  &nbsp; cube=CreateCube()<br>
+	  &nbsp; PositionEntity cube,0,0,5<br>
+	  
+	  
+	  <br>
+      &nbsp; texture=LoadTexture("blitztexture.bmp")<br>
+      &nbsp; EntityTexture cube,texture<br>
+      <br>
+      &nbsp; While Not KeyHit(1)<br>
+      <br>
+	  &nbsp; TurnEntity cube,0.1,0.2,0.3<br>      
+      <br>
+      &nbsp; UpdateWorld<br>
+      &nbsp; RenderWorld<br>
+      <br>
+      &nbsp; Text 340,500,&quot;Texturing Demo&quot;<br>
+      <br>
+      &nbsp; Flip<br>
+      <br>
+      &nbsp; Wend<br>
+      &nbsp; End<br><br>
+      </font></td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+<p>
+As you can see, a texture can make all the difference to a very basic object.</p> 
+<p>
+The only 2 lines of code we don't already know are:
+</p>
+
+</font>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+<b>
+<font face="Arial">texture=LoadTexture(&quot;blitztexture.bmp&quot;)<br>
+EntityTexture cube,texture</font></b>
+    </td>
+  </tr>
+</table>
+<font face="verdana">
+<p>
+Two nice and friendly commands, the first loads a texturemap into memory - with the pointer variable 'texture' pointing to it.<br><br>
+
+Once we have successfully loaded the texture, we assign it to the object using the <b>EntityTexture</b> command. (here we are assigning the variable pointer TEXTURE to the cube we defined earlier)<br><br>
+
+You could if you wanted load the picture file <b>BLITZTEXTURE.BMP</b> into MS Paint and make some changes.. if you wanted to !<br><br>
+
+And that's all there is to it, but a quick word of advice: If your object isn't textured as it should, always check that the texturemaps are in the right directory. It's all to easy to spend half the day trying to work out a texturing problem, only to find that you moved the program to another directory without dragging the associated texture files with it.
+</p>
+
+<center><font color="#808080">Tutorial 5 - <a href="page6.html">Lighting</a></font></center></font>

+ 255 - 0
_release/tutorials/GCUK_Tuts/page6.html

@@ -0,0 +1,255 @@
+<font face="verdana">
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="61%" bgcolor="#6097C9"><font face="verdana">
+<h1 align="left"><font color="#FFFFFF">&nbsp;Lighting</font></h1>
+<p align="left"><b>&nbsp;Aim</b>: Lighting a scene<br>
+&nbsp;<b>Skill level</b>: Intermediate<br>
+&nbsp;<b>Files Needed</b>: lights.bb</font>
+      <p>&nbsp;</td>
+    <td width="5%">&nbsp;</td>
+    <td width="34%">
+      <p align="right"><font face="verdana">
+<img src="4c.jpg" alt="Lighting" width="166" height="127">
+</font>
+
+
+      </p>
+    </td>
+  </tr>
+</table>
+
+<p>
+So we can now move objects (and ourselves) around, texture objects, animate... so what shall we look at now ?<br><br>
+
+How about lighting, used correctly we can make great use of it to really give our little world
+ambiance.<br><br>
+
+By default B3D will already give us a light in our scene, pointing directly into the screen. Think of it as a torch stuck
+on top of the camera, pointing at whatever we can see.</p>
+
+<p>Sourcecode time:</p>
+
+<table border="1" width="86%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br><font face="arial">
+      &nbsp; Graphics3D 800,600<br>
+      <br>
+      &nbsp; SetBuffer BackBuffer()<br>
+      <br>
+      &nbsp; camera=CreateCamera()<br>
+      &nbsp; CameraViewport camera,0,0,800,600<br>
+      <br>
+      &nbsp; AmbientLight 0,0,0<br>
+      <br>
+	  &nbsp; ;cube 1<br>
+	  &nbsp; cube=CreateCube()<br>
+	  &nbsp; PositionEntity cube,0,0,5<br>
+	  <br>
+	  &nbsp; light=CreateLight(3)<br>
+	  &nbsp; LightColor light,100,20,30<br>
+	  &nbsp; LightConeAngles light,0,45<br>
+	  &nbsp; PositionEntity light,0,0,0.5<br>
+	  &nbsp; LightRange light,8<br>
+	  &nbsp; PointEntity light,cube<br><br>
+
+	  &nbsp; ;cube 2<br>
+	  &nbsp; cube2=CopyEntity(cube)<br>
+	  &nbsp; PositionEntity cube2,-5,0,8<br>
+	  <br>
+	  &nbsp; light2=CreateLight(3)<br>
+	  &nbsp; LightColor light2,40,150,60<br>
+	  &nbsp; LightConeAngles light2,0,45<br>
+	  &nbsp; PositionEntity light2,-5,0,4.5<br>
+	  &nbsp; LightRange light2,8<br>
+	  &nbsp; PointEntity light2,cube2<br>
+	  <br>
+	  
+	  &nbsp; ;cube 3<br>
+	  &nbsp; cube3=CopyEntity(cube)<br>
+	  &nbsp; PositionEntity cube3,5,0,8<br>
+	  <br>
+	  &nbsp; light3=CreateLight(3)<br>
+	  &nbsp; LightColor light3,70,80,190<br>
+	  &nbsp; LightConeAngles light3,0,45<br>
+	  &nbsp; PositionEntity light3,5,0,4.5<br>
+	  &nbsp; LightRange light3,8<br>
+	  &nbsp; PointEntity light3,cube3<br>
+	  <br>
+	  
+      &nbsp; While Not KeyHit(1)<br>
+      <br>
+	  &nbsp; TurnEntity cube,0.1,0.2,0.3<br>      
+      
+	  &nbsp; TurnEntity cube2,0.3,0.2,0.1<br>
+	  
+	  &nbsp; TurnEntity cube3,0.3,0.2,0.1<br>
+	  <br>
+      &nbsp; UpdateWorld<br>
+      &nbsp; RenderWorld<br>
+      <br>
+      &nbsp; Text 3</font></font><font face="arial">1</font><font face="arial"><font face="verdana">0,500,&quot;</font>Coloured
+    Lighting</font><font face="verdana"><font face="arial"> Demo&quot;<br>
+      <br>
+      &nbsp; Flip<br>
+      <br>
+      &nbsp; Wend<br>
+      &nbsp; End<br><br>
+      </font></font></td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+
+<p>
+There's quite a few new commands to look at here.<br><br>
+
+Remember that torch I spoke about, well the first new command we will learn is strictly for changing the colour of the beam. (so to speak)</p>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<b><font face="Arial">AmbientLight 0,0,0</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+
+<p>
+
+This sets the light to black, so that any additional lights we use will show up with full effect. First thing to remember when using this command is that the colour values range from 0 to 255, and we have 3 separate colour shades to think of RED, GREEN & BLUE. (the same as a TV)<br><br>
+
+By changing these values we can just about get any colour we want, such as setting them all to 255 will result in the colour white. It's usually easier to work out the values you will need from a paint program such as Paintshop Pro.</p>
+
+</font>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<b><font face="Arial">light=CreateLight(3)</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+
+<p>
+
+B3D at present lets us use three different types of lighting. As with the ANMATE
+instruction these are selected with flags, these are:</p>
+
+</font>
+
+
+<table border="0" width="100%" bgcolor="#FFFF00">
+  <tr>
+    <td width="100%">
+
+<font face="Arial"><i>1: AREALIGHT - Which will light the whole surrounding area around it.<br>
+
+2: POINTLIGHT - A directional light that can light a specific area<br>
+
+3: SPOTLIGHT - Very similar to POINT, but can give off more light on a subject area than using
+POINTLIGHT.</i></font></td>
+  </tr>
+</table>
+<font face="verdana">
+
+<p>
+
+For this demo I chose to use SPOTLIGHT.</p>
+
+</font>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<b><font face="Arial">LightColor light,100,20,30</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+
+<p>
+
+Same as the AMBIENTLIGHT instruction, this command lets us select the colour of the light. Here I've set it up so that RED=100, GREEN=20 and BLUE=30 - which gives us a nice reddish glow.</p>
+
+</font>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<b><font face="Arial">LightConeAngles light,0,45</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+
+<p>
+
+We use this instruction to control the angle of light that comes from our spotlight. In this case I've set it up to 45 degrees, In-other-words.. The light has a radius of 45 degrees, any part of the object that is outside of this will not be lit.</p>
+
+</font>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<b><font face="Arial">PositionEntity light,0,0,0.5</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+
+<p>
+
+We move the light into position.</p>
+
+</font>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<b><font face="Arial">LightRange light,8</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+
+<p>
+
+This controls the distance of the light, I set it at 8 units.. If I wanted the light to shine further into the distance then I would increase this value.</p>
+
+</font>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<b><font face="Arial">PointEntity light,cube</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+
+<p>
+This command will point the light at our cube object. No matter where are light is
+positioned it will point towards the cube. But if you then move the object or light - you will have to repoint it with this command.<br><br>
+Something else you should think about is whether the light and object can see each other. (the LIGHTRANGE instruction)<br><br>
+
+I won't go into details with the rest of the program as you should be able to work out what is happening without any additional help.</p>
+
+<p>
+Where's the fancy lensflare commands, I can hear you cry. Well at present B3D doesn't
+have any readymade, built-in commands - so its really up to you the programmer -
+to come up with these effects. And believe me it is possible with a little careful
+effort. I've seen some of the Beta Testers come up with lighting effects that
+would equal Unreal !. But then this is a subject for another tutorial...</p>
+
+<p align="center">
+
+<center><font color="#808080">Tutorial 6 - </font><font color="#808080"><a href="page7.html">Collisions</a></font></font></center>

+ 253 - 0
_release/tutorials/GCUK_Tuts/page7.html

@@ -0,0 +1,253 @@
+<font face="verdana">
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="61%" bgcolor="#6097C9"><font face="verdana">
+<h1 align="left"><font color="#FFFFFF">&nbsp;Collision Detection</font></h1>
+<p align="left"><b>&nbsp;Aim</b>: To detect a collision between 2 objects<br>
+&nbsp;<b>Skill level</b>: Intermediate<br>
+&nbsp;<b>Files Needed</b>: collision.bb</font>
+      <p>&nbsp;</td>
+    <td width="5%">&nbsp;</td>
+    <td width="34%">
+      <p align="center"><font face="verdana">
+<img src="9c.jpg" alt="Movement" width="167" height="127" align="right">
+</font>
+
+
+      </p>
+    </td>
+  </tr>
+</table>
+
+<p>
+In this example I shall be using 2 ready-made entity objects, a Sphere and a
+Box.</p>
+
+<p>
+Hopefully The program will display a message once the sphere comes into contact
+with the box. Run the program first to fully understand what is happening before
+delving into the sourcecode below.</p>
+<table border="1" width="86%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+      <font face="arial">
+      &nbsp; Graphics3D 800,600<br>
+      <br>
+      &nbsp; Const CUBE_COL=1<br>
+      &nbsp; Const SPHERE_COL=2<br>
+      <br>
+      &nbsp; SetBuffer BackBuffer()<br>
+      <br>
+      &nbsp; camera=CreateCamera()<br>
+      &nbsp; CameraViewport camera,0,0,800,600<br>
+      &nbsp; PositionEntity camera,0,0,-5<br>
+      <br>
+      &nbsp; light=CreatLight()<br>
+      <br>
+      &nbsp; cube=CreateCube()<br>
+      &nbsp; PositionEntity cube,-5,0,5<br>
+      &nbsp; EntityColor cube,70,80,190<br>
+      &nbsp; EntityType cube,CUBE_COL<br>
+      <br>
+      &nbsp; sphere=CreateSphere(12)<br>
+      &nbsp; PositionEntity sphere,5,0,5<br>
+      &nbsp; EntityColor sphere,170,80,90<br>
+      &nbsp; EntityType sphere,SPHERE_COL<br>
+      <br>
+      &nbsp; Collisions SPHERE_COL,CUBE_COL,3,1<br>
+      <br>
+      &nbsp; While Not KeyHit(1)<br>
+      <br>
+      &nbsp; MoveEntity sphere,-0.02,0,0<br>
+      <br>
+      &nbsp; UpdateWorld<br>
+      &nbsp; RenderWorld<br>
+      <br>
+      &nbsp; If EntityCollided(sphere,CUBE_COL) Then<br>
+      &nbsp; Text 370,80,"Collided !!!"<br>
+      &nbsp; EndIf<br>
+      <br>
+      &nbsp; Text 335,500,"Collision Detection"<br>
+      &nbsp; Flip<br>
+      <br>
+      &nbsp; Wend<br>
+      <br>
+      &nbsp; End<br><br>
+      </font>
+    </font></td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+<p>
+Being able to check for collisions is perhaps the most major part of any game. After all, without collision detection
+what's to stop Mario falling through the floor, or the bullets from Max Payne's
+gun doing its damage. We need it - whether we want it or not !. </p>
+<p>
+If you look carefully through the above example you will&nbsp;notice quite a few
+new commands. Let's briefly run through the entire program before we look at
+these. </p>
+<p>
+Firstly we create 2 objects - a Cube and a Sphere.., then we setup the collision
+so that B3D will check these objects every time the UPDATEWORLD instruction is
+called. </p>
+<p>
+Slowly we move the Sphere towards the Cube, until they collide.. after that, we
+print up the collision message on the screen to signal that we have collided. </p>
+<p>
+So what do these new instructions do: </p>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<b><font face="Arial">Const CUBE_COL=1<br>
+Const SPHERE_COL=2</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+<p>
+Ok, its not an instruction, but just something I've strung together for this
+example. When programming always try and make things as easy as possible - It
+will certainly help when it comes to debugging. (working out any problems)</p>
+<p>
+The Collision instructions we have to setup rely on variables, but rather than
+just using numbers - I'll use the CONSTANT variables I've setup to represent
+them.</p>
+<p>
+So in the above two lines, I can use the variable names CUBE_COL every time I
+want to use a 1 - and SPHERE_COL instead of 2. Although of course I could just
+use the numbers with the instructions, as you'll see it will help us out.</p>
+</font>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<b><font face="Arial">EntityType cube,CUBE_COL</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+<p>
+After we've setup the basic entity object, we need to setup a collision variable
+for it. We do this by assigning a number to the entity, As you can see to do
+this we use the ENTITYTYPE command. Here I've set the entity cube to have a
+value of 1. (remember the CONST variable is set to 1)</p>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<b><font face="Arial">EntityType </font>
+</font>
+
+
+<font face="Arial">sphere,SPHERE_COL</font></b></td>
+  </tr>
+</table>
+<font face="verdana"><p>As before, we setup the sphere collision variable to
+have a value of 2.</p>
+<p><b>AN IMPORTANT NOTE TO REMEMBER !</b></p>
+<p>Every entity <b>DOES NOT</b> have to have a separate collision variable
+number. For example say we created a 3d maze game, that had 10 objects for the
+sides of the maze. We would want to check if we have collided with a wall, it wouldn't
+matter which wall.. just a wall. So every wall object(entity) would have the
+same collision variable.<br>
+I would use the code:<br>
+<br>
+Const WALL=1<br>
+EntityType wall1,WALL<br>
+EntityType wall2,WALL... etc</p>
+<p>Later on when we check for a collision we would just say, is there a
+collision with the wall ?. Nice and Easy isnt it ?</p>
+</font>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<b><font face="Arial">Collisions SPHERE_COL,CUBE_COL,3,1</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+<p>
+Now the fun begins, this is the main instruction that informs B3D which objects
+to check for collisions and what action it should take.</p>
+<p>
+The first part of the line &quot;<b>Collisions SPHERE_COL,CUBE_COL</b>,3,1&quot;,
+is saying that we want a check to take place between the collision markers 1 and
+2. (Remember the Sphere is 1 and the Cube is 2)</p>
+<p>
+If we had more entities with the same collision marker value, then of course
+these too would be included.</p>
+<p>&quot;Collisions SPHERE_COL,CUBE_COL,<b>3</b>,1&quot; - The first value (3</font>),
+<font face="verdana">represents the type of collision that we want B3D to
+perform, in this case we are using mode '3' - which is a Sphere-to-Box
+collision.</p>
+<p>
+B3D has 3 different types of collisions we can perform, these are:</p>
+
+
+<table border="0" width="100%" bgcolor="#FFFF00">
+  <tr>
+    <td width="100%">
+
+<i>1 = Sphere-to-Sphere<br>
+2 = Sphere-to-Polygon<br>
+3 = Sphere-to-Box</i></td>
+  </tr>
+</table>
+<p>Now we come to the last value, &quot;Collisions SPHERE_COL,CUBE_COL,3,<b>1</b>&quot;.
+This is the response value, it signals what B3D should do when a collision has
+taken place. I used the value 1 which is used for a dead stop. (when it collides
+with something, don't let it move any closer to it)</p>
+<p>
+As before there are 3 mode types we can use:</p>
+
+
+<table border="0" width="100%" bgcolor="#FFFF00">
+  <tr>
+    <td width="100%">
+
+<i>1 = Stop<br>
+2 = Slide1 - Full sliding collision<br>
+3 = Slide2 - Takes into consideration the angle of slopes</i></td>
+  </tr>
+</table>
+<p>Even though in my program I am moving the sphere into the box with the
+MOVEENTITY command, when it collides (because I've used the STOP mode).. the
+entity will NOT move through it.</p>
+<p>We have one more command to look at, that's the collision check instruction
+itself &quot;EntityCollided&quot;</font><font face="arial">.</font></p>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<font face="Arial">If
+
+<b> EntityCollided(sphere,CUBE_COL) </b> then</font><font face="arial"><br>
+Text 370,80,"Collided !!!"<br>
+EndIf
+      </font></td>
+  </tr>
+</table>
+<font face="verdana"><p>As you can can probably guess, this instruction (imbedded
+in an IF statement) - is checking the entity SPHERE for a collision with the
+collision marker 1 (the cube).</p>
+<p>If it has collided then print the message to signal a collision !.</p>
+<p>Ok, we have now run through the entire program - but did it make much sense
+to you ?, To begin with I couldn't grasp it at all !. The best way to understand the various collision
+instructions is to experiment yourself with the different mode settings.
+Eventually (if you haven't understood fully by now).. you will realize just how
+easy and powerful they can be.</p>
+
+
+
+<p align="center"><font color="#808080">Tutorial 8 - <a href="page8.html">Vertexes</a></font></p>
+</font>

+ 267 - 0
_release/tutorials/GCUK_Tuts/page8.html

@@ -0,0 +1,267 @@
+<font face="verdana">
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="61%" bgcolor="#6097C9"><font face="verdana">
+<h1 align="left"><font color="#FFFFFF">&nbsp;Vertexes</font></h1>
+<p align="left"><b>&nbsp;Aim</b>: To edit a meshes vertexes in Real-time<br>
+&nbsp;<b>Skill level</b>: Intermediate<br>
+&nbsp;<b>Files Needed</b>: vertex.bb / plane.3ds</font>
+      <p>&nbsp;</td>
+    <td width="5%">&nbsp;</td>
+    <td width="34%">
+      <p align="center"><font face="verdana">
+<img src="10c.jpg" alt="Movement" width="167" height="127" align="right">
+</font>
+
+
+      </p>
+    </td>
+  </tr>
+</table>
+
+<p>
+If you've already read the section on Meshes beforehand then hopefully you'll
+know most of what we will be doing already in this tutorial, if not - go away
+and read it first !.</p>
+
+<p>
+let's recap:</p>
+<ul>
+  <li>Each <b>MESH</b> (a 3d object), is made up of SURFACES.<br>
+  </li>
+  <li>Each <b>SURFACE</b> has a BRUSH.<br>
+  </li>
+  <li>Each <b>BRUSH</b> can be assigned 8 different texturemaps.<br>
+    (which can be overlaid on each other to create new effects)<br>
+  </li>
+  <li>Each SURFACE is made up of TRIANGLES.<br>
+  </li>
+  <li>Each <b>TRIANGLE</b> is made up of 3 VERTEXES.</li>
+</ul>
+<p>So, armed with that info - you should know what makes a 3d object tick !.
+Lets take a flat square as an example, it is made up of 4 vertexes and 2
+triangles. What we are planning of doing is to take 2 of those vertexes and
+change their coordinates.<br>
+</p>
+<p>Infact as mentioned in the Introduction to Meshes, we can even change the
+colour of the vertexes in realtime too. Run the example - what you can hopefully
+see is a square object (which is slowly spinning on the Z plane), being pulled
+out of shape in 2 corners - while every-so-often the colours change.</p>
+<p>It's a very easy effect to create, I wont go into great detail about how/why
+the program works - but here's a quick rundown if your interested:</p>
+<p>We setup the variable 'COUNTER', which does exactly that.. to be used as a
+counter. Every time the program runs through its main loop, it is incremented.
+Based on what value the counter is equal to, corresponds to what direction we
+should pull the vertexes. If the counter reaches 1000 then change the colour of
+each vertex to a random selection, before resetting the counter value.</p>
+<p>Let's take a look:</p>
+<table border="1" width="86%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="14%">&nbsp;</td>
+    <td width="72%" bordercolor="#000000" bgcolor="#C0C0C0">&nbsp;<br>
+      &nbsp;
+</font>
+
+
+    <font face="arial">Graphics3D 800,600<br>
+    <br>
+    &nbsp;&nbsp; SetBuffer BackBuffer()<br>
+    <br>
+    &nbsp;&nbsp; camera=CreateCamera()<br>
+    &nbsp;&nbsp; CameraViewport camera,0,0,800,600<br>
+    <br>
+    &nbsp;&nbsp; light=CreateLight()<br>
+    <br>
+    &nbsp;&nbsp; plane=LoadMesh(&quot;plane.3ds&quot;)<br>
+    &nbsp;&nbsp; PositionEntity plane,0,0,25<br>
+    &nbsp;&nbsp; EntityFX plane,2<br>
+    <br>
+    &nbsp;&nbsp; surface=GetSurface(plane,CountSurfaces(plane))<br>
+    <br>
+    &nbsp;&nbsp; VertexColor surface,0,255,0,0<br>
+    &nbsp;&nbsp; VertexColor surface,1,0,255,0<br>
+    &nbsp;&nbsp; VertexColor surface,2,0,0,255<br>
+    &nbsp;&nbsp; VertexColor surface,3,255,0,255<br>
+    <br>
+    &nbsp;&nbsp; While Not KeyHit(1)<br>
+    <br>
+    &nbsp;&nbsp; TurnEntity plane,0,0,.3<br>
+    <br>
+    &nbsp;&nbsp; counter=counter+1<br>
+    <br>
+    &nbsp;&nbsp; If counter&lt;500 Then&nbsp;<br>
+    &nbsp;&nbsp; x1#=-.01<br>
+    &nbsp;&nbsp; y1#=-.01<br>
+    &nbsp;&nbsp; x2#=+.01<br>
+    &nbsp;&nbsp; EndIf<br>
+    <br>
+    &nbsp;&nbsp; If counter>499 Then<br>
+    &nbsp;&nbsp; x1#=+.01<br>
+    &nbsp;&nbsp; y1#=+.01<br>
+    &nbsp;&nbsp; x2#=-.01<br>
+    &nbsp;&nbsp; EndIf<br>
+    <br>
+    &nbsp;&nbsp; xx#=VertexX(surface,0)<br>
+    &nbsp;&nbsp; yy#=VertexY(surface,0)<br>
+    &nbsp;&nbsp; zz#=VertexZ(surface,0)<br>
+    <br>
+    &nbsp;&nbsp; VertexCoords surface,0,xx+x1,yy+y1,zz<br>
+    <br>
+    &nbsp;&nbsp; xx#=VertexX(surface,2)<br>
+    &nbsp;&nbsp; yy#=VertexY(surface,2)<br>
+    &nbsp;&nbsp; zz#=VertexZ(surface,2)<br>
+    <br>
+    &nbsp;&nbsp; VertexCoords surface,2,xx+x2,yy+y1,zz<br>
+    <br>
+    &nbsp;&nbsp; If counter=1000 Then<br>
+    &nbsp;&nbsp; counter=0<br>
+    &nbsp;&nbsp; VertexColor surface,0,Rnd#(0,255),Rnd#(0,255),Rnd#(0,255)<br>
+    &nbsp;&nbsp; VertexColor surface,1,Rnd#(0,255),Rnd#(0,255),Rnd#(0,255)<br>
+    &nbsp;&nbsp; VertexColor surface,2,Rnd#(0,255),Rnd#(0,255),Rnd#(0,255)<br>
+    &nbsp;&nbsp; VertexColor surface,3,Rnd#(0,255),Rnd#(0,255),Rnd#(0,255)<br>
+    &nbsp;&nbsp; EndIf<br>
+    <br>
+    &nbsp;&nbsp; UpdateWorld<br>
+    &nbsp;&nbsp; RenderWorld<br>
+    <br>
+    &nbsp;&nbsp; Text 350,500,"Vertex Control"<br>
+    <br>
+    &nbsp;&nbsp; Flip<br>
+    <br>
+    &nbsp;&nbsp; Wend<br>
+    &nbsp;&nbsp; End<br><br></font>
+</td>
+    <td width="14%">&nbsp;</td>
+  </tr>
+</table>
+<p>
+So how do we get at the vertexes of the object ?</p>
+<p>
+Well for starters we load the object with the LoadMesh command, the object we
+are loading is of course called Plane.3ds.</p>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<b><font face="Arial">EntityFX plane,2</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+<p>Now here's a new command we haven't seen before !, this command is really
+more of mode switch than anything else. But setting values we can access the
+entity in different ways. the mode value '2' is to able vertex colouring on the
+whole entity, by default this is turned off.</p>
+<p>Here's those mode settings:</p>
+</font>
+
+
+<table border="0" width="100%" bgcolor="#FFFF00">
+  <tr>
+    <td width="100%">
+
+<font face="Arial"><i>1 = Full-Bright<br>
+2 = Use Vertex Colours<br>
+4 = Flatshading<br>
+8 = Disable Fog</i></font></td>
+  </tr>
+</table>
+<font face="verdana">
+<p>There is another command very similar to EntitiyFX called BRUSHFX. This uses
+the same mode settings, but instead of changing the whole entity will work on a
+single brush. (remember a mesh has surfaces, with brushes applied to them)</p>
+</font>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<b><font face="Arial">surface=GetSurface(plane,CountSurfaces(plane))</font></b></td>
+  </tr>
+</table>
+<font face="verdana">
+<p>
+In order to get at the vertexes we must first unlock them, we do this by
+creating a pointer variable that holds the memory address to the surfaces on the
+mesh.</p>
+<p>
+Calm down !, we don't have to get our hands dirty calling with lots of nasty math's
+- instead we just use the GETSURFACE command, which likes us to pass firstly the
+mesh name - and secondly the amount of surfaces it has. As you can see I've
+cheated and used the COUNTSURFACES command to do this for me.</p>
+</font>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<font face="Arial"><b>VertexColor surface,0,255,0,0<br>
+VertexColor surface,1,0,255,0<br>
+VertexColor surface,2,0,0,255<br>
+VertexColor surface,3,255,0,255</b></font>
+    </td>
+  </tr>
+</table>
+<font face="verdana">
+<p>Before going into the main loop, I've set the colour of each vertex to a
+different colour. This gives us a nice rainbow effect !. As you can see we pass
+the pointer variable SURFACE to the VERTEXCOLOR command, as well as the vertex
+number (0-3, since our object only has 4 points) - followed by the colour values
+for the Red, Green and Blue shades. (must be in the range of 0 (Dark) through to
+255 (Light))</p>
+</font>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<font face="Arial"><b>xx#=VertexX(surface,0)<br>
+yy#=VertexY(surface,0)<br>
+zz#=VertexZ(surface,0)</b></font>
+    </td>
+  </tr>
+</table>
+<font face="verdana">
+<p>Since I want the coordinates of the mesh to change all the time, I cant set
+it with a value that doesn't change. Every update I've got to get the current
+coordinates and slightly update them (by adding an offset to the X and Y coords).</p>
+<p>I do this by firstly, getting the current X,Y and Z vertex coords - using the
+various get vertex commands.</p>
+<p>VertexX(surface,0) - gives us access to the X coordinate of the object
+surface, at vertex 0.</p>
+<p>Just as, VertexY(surface,99) - would give us access to the Y coodinate of
+vertex 99 !!!.</p>
+
+
+<table border="0" width="100%" bgcolor="#6097C9">
+  <tr>
+    <td width="100%">
+
+<font face="Arial"><b>VertexCoords surface,0,xx+x1,yy+y1,zz</b></font>
+    </td>
+  </tr>
+</table>
+<p>
+As you've probably worked out by now, this is the main instruction for changing
+the actual Vertex positions. It needs to be called with the Surface pointer
+value, followed by the new values for the X, Y and Z positions.</p>
+<p>
+And that's all there is to it !!</p>
+<p>
+But why would you want to change the coordinates ?</p>
+<p>
+All games will alter their objects, its just a case of working out how, and
+where they do it. Imagine you've just written a driving simulation.. wouldn't it
+be nice when you crash the car to reflect the damage ?. Perhaps crumple that
+fender.. or crack that window.</p>
+<p>
+Just like a certain other car game currently in the charts, they use exactly the
+same method. You gotta hand it to B3D - You want it.. it's there, now go and use it wisely !.</p>
+<p align="center"><font color="#808080"><b>More Tutorials to follow..</b><br>
+Tutorials written by Paul Gerfen<br>
+(c) 2001GameCodingUK
+</font>

BIN
_release/tutorials/GCUK_Tuts/plane.3ds


BIN
_release/tutorials/GCUK_Tuts/rocket.3ds


+ 29 - 0
_release/tutorials/GCUK_Tuts/settingup.bb

@@ -0,0 +1,29 @@
+; Setting up ***
+; By Paul Gerfen (www.gamecoding.co.uk)
+
+Graphics3D 800,600
+
+SetBuffer BackBuffer()
+
+camera=CreateCamera()
+CameraViewport camera,0,0,800,600
+
+light=CreateLight()
+
+cube=CreateCube()
+PositionEntity cube,0,0,5
+
+
+While Not KeyHit(1)
+
+	TurnEntity cube,.1,.2,.3
+
+	UpdateWorld
+	RenderWorld
+	
+	Text 320,500,"First Blitz3D Program"
+	
+	Flip
+
+Wend
+End

+ 170 - 0
_release/tutorials/GCUK_Tuts/startup.html

@@ -0,0 +1,170 @@
+
+
+<table border="1" width="100%" bordercolor="#FFFFFF">
+  <tr>
+    <td width="20%" valign="top">
+      <p align="center"><img border="0" src="b3dlogo_small.jpg" width="150" height="74"></td>
+    <td width="60%"><h1><center><font face="Verdana"><span style="background-color: #6098C8"><br>
+      &nbsp;<font color="#FFFFFF">Welcome to Blitz3D</font>&nbsp;</span></font></center></h1>
+
+<p align="center"><b><font face="Arial">&quot;The Ultimate 3D Creation
+Language&quot;</font></b></p>
+
+<p align="center"><font face="Verdana"><b>By Paul Gerfen<br>
+</b><font size="1">(c) Copyright 2001 Paul Gerfen<br>
+&nbsp; <a href="http://www.gamecoding.co.uk">http://www.gamecoding.co.uk</a></font></font></p>
+
+    </td>
+    <td width="20%" valign="top">
+      <p align="center"><img border="0" src="b3dlogo_small.jpg" align="right" width="150" height="74"></td>
+  </tr>
+</table>
+
+<p>
+<font face="Verdana">
+Hi Guys, Paul here from Gamecoding.. recently I was asked to come up with a selection of tutorials for complete beginners. Seeing as
+I'm mostly a 2D games programmer - I too could be considered as a total beginner.</font></p>
+<p><font face="Verdana">B3D is an incredibly powerful language, but believe me - by the time you have worked your way through these mini tutorials, you will have the basic 3D knowledge to realize your dreams and start to create your own projects.</font></p>
+
+<p>
+<font face="Verdana">
+Updates to these tutorials as well as extra notes, can be found on my website www.gamecoding.co.uk or at the official blitz website, www.blitzbasic.com</font>
+</p>
+<h2><font face="Verdana"><span style="background-color: #6097C9">&nbsp;<font color="#FFFFFF">Background</font>&nbsp;</span></font></h2>
+<p>
+<font face="Verdana">
+Let's begin by running through what we have, and more importantly what we shall need:</font></p>
+<p>
+<font face="Verdana">
+No doubt you've already had a run through the demos that accompany Blitz3D, and are very keen to get stuck in and produce the next big "Quakey-Game". Unfortunately and this stage all we are going to do is start with the very basic's and work our way through all the main functions of B3D before we even think of moving on to advanced topics.</font></p>
+<p>
+<font face="Verdana">
+Hopefully you have a little experience of Blitz Basic programming (or for that matter any Basic language would help), Let's take a look at 3D before we delve in…</font></p>
+<p>
+<font face="Verdana">
+As your probably use to with other basic languages you have a set of co-ordinates, X (Left & Right) and Y (Up and Down). With 3D we have an extra coordinate to consider "Z", This gives us depth into the screen. For example if we were standing at a river throwing a rock as far as we can into it, what would be happening is:</font></p>
+<p>
+<font face="Verdana">
+As the stone leaves our hand it firstly moves away from us, and then gains height. What is happening here is that the Z coordinate is increasing as the stone moves away from us, while the Y coordinate gains height. Of course the stone will eventually fall to the ground (decrease in Y).</font></p>
+<p>
+<font face="Verdana">
+Its important to try and visualize these 3 axes, as we shall see a 3d world is based entirely on them.</font></p>
+<p>
+<font face="Verdana">
+Let's start by running through some of the major parts of Blitz3D before we start to get our hands dirty on some actual code.</font></p>
+
+<table border="0" width="100%" bgcolor="#6098C8">
+  <tr>
+    <td width="100%"><b><a href="Entities.html"><font face="Arial" color="#FFFFFF">Entities</font></a></b></td>
+  </tr>
+</table>
+<p>
+<font face="Verdana">
+The basic building blocks of all Blitz3D programs.</font></p>
+<table border="0" width="100%" bgcolor="#6098C8">
+  <tr>
+    <td width="100%"><b><a href="Cameras.html"><font face="Arial" color="#FFFFFF">Cameras</font></a></b></td>
+  </tr>
+</table>
+<p>
+<font face="Verdana">
+Well, we all need to see what's going on !</font></p>
+<table border="0" width="100%" bgcolor="#6098C8">
+  <tr>
+    <td width="100%"><b><a href="Planes.html"><font face="Arial" color="#FFFFFF">Planes</font></a></b></td>
+  </tr>
+</table>
+<p><font face="Verdana">Nope, not the flying kind with wings and engines...</font></p>
+
+<table border="0" width="100%" bgcolor="#6098C8">
+  <tr>
+    <td width="100%"><b><a href="Meshes.html"><font face="Arial" color="#FFFFFF">Meshes</font></a></b></td>
+  </tr>
+</table>
+<p><font face="Verdana">Perhaps you'd like to make your own objects from
+scratch.</font></p>
+
+<table border="0" width="100%" bgcolor="#6098C8">
+  <tr>
+    <td width="100%"><b><a href="Terrains.html"><font face="Arial" color="#FFFFFF">Terrains</font></a></b></td>
+  </tr>
+</table>
+<p><font face="Verdana">Rolling Hills and Landscapes, in less time it takes to
+put the kettle on.</font></p>
+
+<table border="0" width="100%" bgcolor="#6098C8">
+  <tr>
+    <td width="100%"><b><a href="Texturing.html"><font face="Arial" color="#FFFFFF">MultiTexturing</font></a></b></td>
+  </tr>
+</table>
+<p><font face="Verdana">Why have a plain object when you can give it a coat of
+many colours.</font></p>
+<hr>
+<p><font face="Verdana">
+Read through some of the info ?, I hope so.. Lets dig deep and start to produce our first B3D program.<br>
+My aim to take you step by step through the very basic's. You can run the source code that goes with each chapter by either CUT & PASTING from the tutorials themselves, or by loading the accompanying files from the B3D CD. (Recommended!)</font></p>
+
+<h2><font face="Verdana"><span style="background-color: #6097C9">&nbsp;<font color="#FFFFFF">The Tutorials</font>&nbsp;</span></font></h2>
+<p><font face="Verdana">You will need the sourcecode files and object files to
+run these snippets. These can be found on the Blitz3D CD (or in the zip
+accompanying the Blitz Trial), I would advise opening
+up the sourcecode projects and switching between Blitz and this tutorial. (As
+this will hopefully explain the code and various instructions in more
+detail)&nbsp;</font></p>
+<table border="0" width="100%" bgcolor="#6098C8">
+  <tr>
+    <td width="100%"><b><a href="page1.html"><font face="Arial" color="#FFFFFF">Setting Up</font></a></b></td>
+  </tr>
+</table>
+<p><font face="Verdana">Everything you will need to know about writing a B3D program.</font></p>
+<table border="0" width="100%" bgcolor="#6098C8">
+  <tr>
+    <td width="100%"><b><a href="page2.html"><font face="Arial" color="#FFFFFF">Movement & Rotation</font></a></b></td>
+  </tr>
+</table>
+<p><font face="Verdana">Time to display a shape on the screen and start to give it some movement.</font></p>
+<table border="0" width="100%" bgcolor="#6098C8">
+  <tr>
+    <td width="100%"><b><a href="page3.html"><font face="Arial" color="#FFFFFF">Camera Movement</font></a></b></td>
+  </tr>
+</table>
+<p><font face="Verdana">There's more to B3D than just a static camera.</font></p>
+<table border="0" width="100%" bgcolor="#6098C8">
+  <tr>
+    <td width="100%"><b><a href="page4.html"><font face="Arial" color="#FFFFFF">Object Animation</font></a></b></td>
+  </tr>
+</table>
+<p><font face="Verdana">Time to make our object come alive.</font></p>
+<table border="0" width="100%" bgcolor="#6098C8">
+  <tr>
+    <td width="100%"><b><a href="page5.html"><font face="Arial" color="#FFFFFF">Texturing</font></a></b></td>
+  </tr>
+</table>
+<p><font face="Verdana">Let's make the object more lifelike, by giving it a coat of paint.</font></p>
+<table border="0" width="100%" bgcolor="#6098C8">
+  <tr>
+    <td width="100%"><b><a href="page6.html"><font face="Arial" color="#FFFFFF">Lighting</font></a></b></td>
+  </tr>
+</table>
+<p><font face="Verdana">B3D supports more than one type of lighting, here we take a brief look at the 3 main types available to us.</font></p>
+
+<table border="0" width="100%" bgcolor="#6098C8">
+  <tr>
+    <td width="100%"><b><a href="page7.html"><font face="Arial" color="#FFFFFF">Collision
+      Detection</font></a></b></td>
+  </tr>
+</table>
+<p><font face="Verdana">So what does happen when two worlds collide ?</font></p>
+
+<table border="0" width="100%" bgcolor="#6098C8">
+  <tr>
+    <td width="100%"><b><a href="page8.html"><font face="Arial" color="#FFFFFF">Vertexes</font></a></b></td>
+  </tr>
+</table>
+<p><font face="Verdana">What happens when you smash your object up into separate
+pieces, and then tear each part up ?</font></p>
+
+<p><center><b><font face="Verdana">More tutorials to be added at a later date....</font></b></center></p>
+
+<p><center><font color="#666666" face="Verdana">Written by Paul Gerfen<br>Copyright
+(c) 2001 GameCodingUK</font></center></p>

+ 31 - 0
_release/tutorials/GCUK_Tuts/texture.bb

@@ -0,0 +1,31 @@
+; Texturing ***
+; By Paul Gerfen (www.gamecoding.co.uk)
+
+Graphics3D 800,600
+
+SetBuffer BackBuffer()
+
+camera=CreateCamera()
+CameraViewport camera,0,0,800,600
+
+light=CreateLight()
+
+cube=CreateCube()
+PositionEntity cube,0,0,5
+
+texture=LoadTexture("blitztexture.bmp")
+EntityTexture cube,texture
+
+While Not KeyHit(1)
+
+	TurnEntity cube,0.1,0.2,0.3
+	
+	UpdateWorld
+	RenderWorld
+	
+	Text 340,500,"Texturing Demo"
+	
+	Flip
+
+Wend
+End

+ 70 - 0
_release/tutorials/GCUK_Tuts/vertex.bb

@@ -0,0 +1,70 @@
+; Vertex Control ***
+; By Paul Gerfen (www.gamecoding.co.uk)
+
+Graphics3D 800,600
+
+SetBuffer BackBuffer()
+
+camera=CreateCamera()
+CameraViewport camera,0,0,800,600
+
+light=CreateLight()
+
+plane=LoadMesh("plane.3ds")
+PositionEntity plane,0,0,25
+EntityFX plane,2
+
+surface=GetSurface(plane,CountSurfaces(plane))
+
+VertexColor surface,0,255,0,0
+VertexColor surface,1,0,255,0
+VertexColor surface,2,0,0,255
+VertexColor surface,3,255,0,255
+
+While Not KeyHit(1)
+
+	TurnEntity plane,0,0,.3
+	
+	counter=counter+1
+	
+	If counter<500 Then 
+	x1#=-.01
+	y1#=-.01
+	x2#=+.01
+	EndIf
+	
+	If counter>499 Then
+	x1#=+.01
+	y1#=+.01
+	x2#=-.01
+	EndIf
+	
+	xx#=VertexX(surface,0)
+	yy#=VertexY(surface,0)
+	zz#=VertexZ(surface,0)
+
+	VertexCoords surface,0,xx+x1,yy+y1,zz
+	
+	xx#=VertexX(surface,2)
+	yy#=VertexY(surface,2)
+	zz#=VertexZ(surface,2)
+
+	VertexCoords surface,2,xx+x2,yy+y1,zz
+
+	If counter=1000 Then
+	counter=0
+	VertexColor surface,0,Rnd#(0,255),Rnd#(0,255),Rnd#(0,255)
+	VertexColor surface,1,Rnd#(0,255),Rnd#(0,255),Rnd#(0,255)
+	VertexColor surface,2,Rnd#(0,255),Rnd#(0,255),Rnd#(0,255)
+	VertexColor surface,3,Rnd#(0,255),Rnd#(0,255),Rnd#(0,255)
+	EndIf
+
+	UpdateWorld
+	RenderWorld
+	
+	Text 350,500,"Vertex Control"
+	
+	Flip
+
+Wend
+End

+ 15 - 0
_release/tutorials/basic_tuts/array.bb

@@ -0,0 +1,15 @@
+
+Dim day$(6)				; Dim the array... 7 elements (0 to 6)
+
+day$(0)="Monday"		; Set the array data
+day$(1)="Tuesday"		;
+day$(2)="Wednesday"		;
+day$(3)="Thursday"		;
+day$(4)="Friday"		;
+day$(5)="Saturday"		;
+day$(6)="Sunday"		;
+
+For loop=0 To 6 Step 2
+	Print day$(loop)		; Loop through and print the data
+Next
+

+ 17 - 0
_release/tutorials/basic_tuts/array1.bb

@@ -0,0 +1,17 @@
+

+Dim day$(6)				; Dim the array... 7 elements (0 to 6)

+

+day$(0)="Monday"		; Set the array data

+day$(1)="Tuesday"		;

+day$(2)="Wednesday"		;

+day$(3)="Thursday"		;

+day$(4)="Friday"		;

+day$(5)="Saturday"		;

+day$(6)="Sunday"		;

+

+Print day$(3)

+

+			

+						

+											

+


+ 2 - 0
_release/tutorials/basic_tuts/array2.bb

@@ -0,0 +1,2 @@
+Dim day(7,7)
+

+ 681 - 0
_release/tutorials/basic_tuts/basic.html

@@ -0,0 +1,681 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type"
+content="text/html; charset=iso-8859-1">
+<title>Getting Started with BlitzBasic </title>
+<style>
+<!--
+     A:link {text-decoration: none;}
+     A:visited {text-decoration: none;}
+-->
+</style>
+</head>
+
+<body bgcolor="#206060" text="#ffff00" link="#00ff00"
+vlink="#00ff00" alink="#00ff00">
+
+
+<br>
+<center><h1>Learning how to program Blitz BASIC</center></h1>
+<center>You want to learn the first steps so you can evantually write a game? Well you've come to the right place.</center> 
+<p align="left"><font size="2" face="verdana">
+<br>
+Blitz Basic uses a specially designed and easy to use programming language so that it is easy to follow and requires no previous knowledge of programming, just a love of games and your ideas.<br><br> 
+So, welcome to the BASIC guide to Blitz - where the only restrictions are your imagination. 
+The sole purpose of this section is to teach you how to write your own Blitz Basic programs. The traditional description of a program is a task that you want your computer to perform via a set of instructions. The task is described to the computer using an instruction set Blitz Basic can understand.
+
+The instructions in your program must be written using a set of rules known as Syntax. You must follow these rules if you are to write Blitz Basic programs. With lots of practice and a sprinkle of determination you will gain a firm and confident understanding about the general rules of BASIC and how to use them as a programmer 
+- When you have this working knowledge of Blitz Basic, the types of games you create are entirely up to you, but with a little imagination you could be writing the next hit game.
+<br>
+<br> If you didn't know - BASIC is an acronym for <b>Beginners All-purpose Symbollic Instruction Code.</b> In this mini course you'll learn the BASIC language as implemented in Blitz and the planning of good programming structures.<br><br><b>Hello World Hello Me or <i>Hello sheep! Hello cup of tea!</i></b><br><br>
+
+OK - lets start with the <b>Print</b> command - this simply prints any text onto your screen - like this:<br><br>
+
+<b>print "Hello sheep"</b><br>
+<b>print "Hello cup of tea"</b><br>
+<b>End</b><br><br>
+just simply type it into your ide...
+<img align="left" src="hello.gif"><br><br><br><br><br><br><br><br><br><br><br><br><br>
+...and click on the red rocket <img src="rocket.gif"> to run....
+<img align="left" src="hellooutput.gif"><br><br><br><br><br><br><br><br><br><br><br><br><br>
+<br><br><br><br><br><br><br><br><b>Well done - you've just written your first Blitz program.</b>
+<br><br>You can also include comments/notes in your programs - this is highly
+recommended and is good programming practice also. You do this by placing a semi-colon (;) into your program
+then just type your text eg:<br><br>
+<b>Print "George Bray" </b>; This piece of code is for printing your name to the screen<br><br>
+You can also stop the machine with the <b>End</b> command - this will break your program
+at any point that you want it to end.<br><br>
+You can give your code a title too by typing <b>AppTitle "gamenamehere"</b><br><br>
+OK let's learn how Blitz works in interpreting your programs and what you'll need to know to write them...<br><br>
+<b><u>Data</b></u><br><br>These are the main items in programming. Data is represented to in three basic forms. The first is a whole number which is known as an <b>Integer</b> eg. 8,20,100,1000.</b> The second type is a <b>Real Number</b>, this allows decimal
+points eg. 1.2, 48.20, 100.4, 3000.201. The third type of data is a <b>String</b> which is basically 
+something that is not a number, all strings consist of characters enclosed within quotation marks.
+A string can include numbers eg "A", "1", "Blitz Basic", "Commodore 64", "Sheep".
+<br><br>
+<b><u>Variables</b></u><br><br>
+A Variable is used to store Data - to simplify this - Imagine a Variable as
+being one big box and within that box you can store an item plus more boxes if required.
+An example would be:<br><br> <b>A = 2 + 2</b><br><br>You can also <b>print</b> the contents of a variable to the screen:<br><br>
+<b>A = 2 + 2<br>
+Print A</b><br><br>
+Another example would be:<br><br>
+<b>A = 1<br>
+B = 2<br>
+C = A + B<br>
+PRINT C</b><br><br>
+If we break this down - we have 3 variables here A & B - which store 2 numbers
+and finally variable C which is a calculation that is based on the values stored within variables A & B 
+so the calculation is actually C = 1 + 2. The result is then stored in C and printed to the screen.<br><br>
+Variables can also store <b>Real Numbers</b> and <b>Strings</b> In order to allow a variable to store these other types of data, 
+you must make sure you tell the computer whether it is a <b>Integer</b>, <b>Real Number</b>, or a <b>String</b>
+variable. To specify a real number variable, you must add a hash sign (#) as the last character
+of the variable name. If you want your variable to store a string, you must add a dollar sign ($) as the last 
+character of the variable name eg:<br><br>
+
+<b>A# = 1.2<br>
+B$ = vic20<br>
+Print A#:Print B$<br><br></b>
+You can also create mathematical functions using <b>String</b> variables eg:<br><br>
+<b>A$ = "Welcome to "<br>B$ = "the world "<br>C$ = "of programming."<br>
+D$ = A$ + B$ + C$<br>
+Print D$<br><br></b>
+When you run this program, it will print <b> Welcome to the world of programming</b> on your screen.<br><br>
+ 
+Easy eh?<br><br>
+<b><u>Arrays</b></u><br><br>
+Arrays are very important because you can store lots of data under a single name.
+ You can even pinpoint an item of data and use it from within an array. If for example
+you want to store 7 days of the week, you would have to create 7 different
+variables eg. <br><br><b>day0$ = "Monday" <br>day1$ = "Tuesday" <br> </b>upto<b><br> day6$ = "Sunday"</b><br><br> But with an Array 
+ you can create a different kind of variable that can store more than one item of data.
+eg. For days of the week you might go:<br><br>
+<b>Dim day$(6)	; Dim the array... 7 elements (0 to 6)<br>
+day$(0)="Monday"	; Set the array data<br>
+day$(1)="Tuesday"</b><br><br>
+You can then just include:<br><br>
+<b>Print day$(3)</b><br><br>
+Which would print <b>Thursday</b><br><br>
+To print the seven days of the week we would include a <b>FOR NEXT</b> loop
+for example:<br><br>
+<b>For loop = 0 to 6 <br>
+Print day$(loop) ; loops through and prints the data.<br>
+Next ; this continues until loop is equal to 6 then continues with the next line of your program.</b><br><br>
+You can also you the <b>STEP</b> command when creating a FOR/NEXT loop eg. If you
+were to create a FOR/NEXT loop followed by STEP 2 the computer would count
+up the for next loop in increments of 2 eg. 2, 4, 6. So if we were to apply this to our days of the week 
+program: <br><br>
+<b>
+For loop = 0 to 6 step 2</b><br><br>
+The computer would then print only <b>Monday Wednesday Friday & Sunday.</b><br><br>
+You can also step backwards by placing a minus (-) sign after the command with the number of steps backwards you would like to take:<br><br>
+<b>For A = 10 To 0 step -2<br>
+Print A<br>
+Next</b><br><br>
+This would print: <b>10 8 6 4 2 0</b> <br><br>
+One final point on Arrays - As documented earlier they are very versatile as they can store many
+levels of data so by:<br><br>
+<b>Dim day(7,5)</b><br><br>
+Here we are setting up the arrays 0 - 6 but for each one there is another
+5 boxes of data numbered 0 - 4 upon which more data can be stored. So if you
+think back to your boxes - here we have 7 boxes with 5 boxes inside, so in all
+you can store 35 values (7x5) in this array. So data entry into the Array you would 
+create something like this:<b><br><br> 
+day(0,0) = 10<br>
+day(0,1) = 20<br>
+day(0,2) = 30<br>
+day(0,3) = 40<br>
+day(0,4) = 50<br>
+day(1,0) = 100<br>
+day(1,1) = 200<br>
+day(1,2) = 300<br>
+day(1,3) = 400<br>
+day(1,4) = 500<br><br>
+</b>
+As you can see arrays need to be declared as a particular type - <b>Integer, Real Number & String.</b> 
+You can have an array of integer, real numbers or strings but you cannot have multiple 
+types in the same array. <br><br><b><u>
+Mathematical Commands</u></b><br><br>
+The dreaded mathematical side of computers but DON'T PANIC - I'm no mathematician either.
+I'll just give you a quick run down on the "boring" side of things - don't worry - with
+a little patience you will be familiar with all these functions in no time as
+we will make the computer do all the hard work. Just relax - make a nice steaming hot cup of tea & read on.....<br><br>
+OK - lets start with the easiest stuff - <b>Add, Subtract, Divide and Multiply.</b>
+In computer terms these are represented by<b>(+) (-) (/) (*)</b> respectively. 
+A simple example would be:<br><br><b>
+
+A = 2 + 2<br>
+B = 2 * 2<br>
+C = 2 - 2<br>
+D = 2 / 2<br>
+
+Print A: Print B: Print C: Print D</b><br><br>
+The result would print: <b>4 4 0 1</b> to the screen - But you knew that....
+You can also assign letters in mathematical functions:<br><br> <b> A + B<br> A - B<br> A * B<br> A / B</b><br><br>
+<b><u>Boolean Stuff</b></u><br><br>
+This is where you must have a cup of tea in your hand because it's time to focus!
+ Once you've cracked this - you are well away to mastering the normally hated mathematical
+side of programming...<br><br>
+OK - Here goes...Sitting comfortably?<br><br>
+Boolean operators allow your program to perform logical operations on
+your data.<br><br>
+We have the <b>AND</b> and <b>OR</b> operator - this works with any integer.<br><br>
+The basics are (study the logic in these examples - it is pretty straight forward)<br><br>
+
+<b>agecategory$=Input("What is the age restriction on this film 15 or 18? ")</b> ; Asks a moderator to set the age rating for a film<br>
+<b>age$=Input("What is your age: ")</b> ; Then asks a viewer their age<br>
+<b>If agecategory$ = 18 And age$&lt;18 Or agecategory$ = 15 and age$&lt; 15 Then Print "Your are not allowed to view this film - Sorry"</b> ; using AND OR expressions decides if they are too young<br>
+<b>If agecategory$ = 18 And age$&gt;18 Or agecategory$ = 15 And age$&gt;15 Then Print "Enjoy your film."</b> ; Using AND OR expressions decides if they are old enough<br>
+<b>WaitMouse</b> ; waits for the mouse button to be pressed<br>
+<b>End</b> ; Once the mouse button has been pressed - Ends the program.<br><br>
+We can compare not only numbers, but strings (text) also. We have seen '=' used 
+in 'agecategory$ = 18' so what does 'less than' & 'more than' mean for strings?
+One thing it does not mean is 'shorter than', so we don't make that
+mistake. We make the definition that one string is less than another
+if it come first in alphabetical order, thus<br><br>
+Smith	  &lt;	  Smythe<br>
+Smythe	  &gt;	  Smith<br>
+Sheep	  &lt;	  Shop<br>
+Shop	  &gt;	  Sheep<br><br>
+all hold. &lt;= means is 'is less than or equal to'and so on - just
+as for numbers.<br><br>
+We then have the <b>NOT</b> operator.<br><br>
+This is simply used to say:<br><br>
+<b>If agecategory$ not &lt;&gt; 18</b> - Is the same as <b>A = B.</b> <i>It really is that straight forward.</i><br><br>
+<b>You will discover how useful these operators become when writing conditions for your programs.</b><br><br>
+<b><u>Storing DATA using the READ command</b></u><br><br>
+Storing data will become an important and useful way to hold and read
+numbers or strings (text) easily. These can be used for storing many
+different types of data eg. Level Data (formations that aliens might attack or
+data for landscapes/scenery within your game etc). Here's a basic example of the READ/DATA
+commands:<br><br>
+<b>Example1</b><br><br>
+
+<b>Read a,b,c</b>                   ;read next 3 data items into variables a, b and c<br>
+<b>Print a+","+b+","+c</b>         ;print out their values<br>
+<b>Data 1,2,3   </b>                 ;the actual data items<br><br>
+
+<b>Example 2</b><br><br>
+
+<b>Restore second</b>            ;start reading data from the '.second' label<br>
+<b>Read a,b,c</b>              ;read in data<br>
+<b>Print a+","+b+","+c</b>      ;print out variables<br>
+<b>Restore first    </b>         ;start reading data from the '.first' label<br>
+<b>Read a,b,c  </b>              ;read in data<br>
+<b>Print a+","+b+","+c</b>       ;print out values<br>
+<b>.first</b><br>
+<b>Data 1,2,3</b>                ;data items<br>
+<b>.second</b><br>
+<b>Data 4,5,6</b>                ;more data items<br><br>
+
+You may have notice that I threw in the <b>RESTORE</b> command within example 2. This is used 
+to reset the data pointer at any time. In a games programming environment
+you may need to read the same data again eg. If you want to clear the
+screen & redraw it using your data table - by resetting the pointer
+the Read command will start at the top of the data list and you can read it again.<br><br>
+<u><b>GOTO Command</u></b><br><br>
+I always remember this command by saying <i>goat-to</i> in my head when calling this command :) - OK - type in following:<br><br>
+<b>Print "Emily & Ellis were here today"</b><br>
+<b>Goto goat</b><br><br>
+<b>.goat</b><br>
+<b>Print "So was George and his furry animals"</b><br><br>
+So here we are printing our text - then jumping to a label called <b>.goat</b>
+ the program then continues reading the rest of your program from the label you
+have set downwards.
+<br><br><u><b>Subroutines</u></b><br><br>
+
+Often a particular sequence of commands gets used several times too within a program.
+You <i>may</i> be able to avoid writing the sequence several times by judicious
+use of <b>GOTO</b> commands; but this isn't always good enough. The command
+<b>GOSUB</b> is like a <b>GOTO</b> that remembers where it came from on meeting
+another command <b>RETURN</b> the program jumps back to the line after
+the particular <b>GOSUB</b> that it originally started from. The <b>GOSUB</b>
+must be followed by a label eg. <b>Gosub sheep</b> which sends the program
+to the series of commands beginning on line <b>.sheep</b> - The part of
+the program that lies between <b>.sheep</b> and the <b>RETURN</b> command
+is known as a <i>subroutine</i>. An example of the <b>GOSUB</b> command would be:<br><br>
+
+<b>Print "Baa Baa"</b> ; Prints text to the screen<br>
+<b>Gosub sheep</b> ; Goes to the subroutine .sheep<br>
+<b>WaitMouse</b> ; The computer return(s) here! - waits for the mouse button to be pressed<br>
+<b>End</b> ; End(s) the program when the mouse button has been pressed.<br><br>
+
+<b>.sheep</b> ; subroutine sheep<br>
+<b>Print "Blitz Basic"</b> ; Prints text to the screen<br>
+<b>Return</b> ; Return(s) to the next line after <i>gosub</i> command.<br>
+<br><br>
+
+<b><u>FOR NEXT Commands</b></u><br><br>
+OK - I'll breifly explain the <b>FOR</b>...<b>NEXT</b> commands - these beasts
+have already been used in an earlier example if you never realised!
+These two commands create a technique known as a <b>loop</b> - so your computer
+performs any given task several times. Try out the following program.
+follows.<br><br>
+<b>For a = 0 To 100</b> ; set up loop with <b>a</b> as a counter ranging from 0 (start) to 100 (finish)<br>
+<b>Print a</b> ; prints the current value of <b>a</b><br>
+<b>Next</b> ; Is <b>a</b> 100? No, it's 1. Add 1 to <b>a</b> to get 2 and go back to line <b>Print a</b><br>
+<b>Your program continues here...</b> ; When <b>a</b> does equal 100 the program ends the <b>loop</b> and continues to run here.<br>
+<br><br>
+The result will be that the computer prints the numbers 0-100 on your screen.<br><br>
+
+<b><u>STEP size</b></u><br><br>
+When you are creating a loop - you can also write it as below.<br><br>
+<b>For a = 0 To 100 Step 10</b> ; The same as the previous example except the computer will count in <b>STEPS</b> of 10 at a time<br>
+<b>Print a</b> ; Prints the current value of <b>a</b><br>
+<b>Next</b> ; If a does not equal 100 then add 10 to it and goes to the line above <b>Print</b><br>
+<b>Your program continues here...</b> ; When <b>a</b> does equal 100 the program ends the <b>loop</b> and continues to run here.<br><br>
+So the program will now give the result:<br><br>
+<b>0<br>10<br>
+20<br>30<br>40<br>50<br>60<br>70<br>80<br>90<br>100</b><br><br>As opposed
+to printing out 1-100 sequencially - as per previous <b>FOR</b>...<b>NEXT loop</b> example.<br><br>
+<b><u>Functions</b></u><br><br>
+Using functions - Part 1<br><br>
+
+Now that you are getting to grips with the very "basics" of Basic 
+programming (eg. For...Next)!
+
+A function allows you to run a commonly used piece of code. For
+ example, this is a  function which prints "Hello" to the screen
+whenever you "call" it:<br><br>
+
+<b>Function PrintHello ()<br>
+	Print "Hello"<br>
+End Function<br></b>
+
+<b>For a=1 To 5 </b> ; Let's print "Hello" 5 times by calling the PrintHello () function:<br>
+	<b>PrintHello ()<br>
+Next</b><br><br>
+
+Now run the program to see the result.<br><br>
+Using Functions - Part 2<br><br>
+OK, now we'll modify the function so that it'll print whatever we 
+want, which can be different each time we call it.<br><br>
+
+The function:<br><br>
+<b>Function PrintSomething (a$)<br>
+	Print a$<br>
+End Function<br>
+
+</b>; In this case, we "pass" a string (either a string variable such as blah$,
+ or a piece of text enclosed in quotes, eg. ("Hello there") to the function<br>
+
+<b>PrintSomething ("Hello, I'm gonna be printed.")<br>
+PrintSomething ("So am I.")<br>
+
+</b>; Using a string variable<br>
+
+<b>sentence$="This is also being printed to the screen."
+PrintSomething (sentence$)<br>
+
+</b>So, whatever is put within the brackets () when you call it is
+ "passed" to the function. If you look at the function itself, you'll
+see that it takes the form "PrintSomething (a$)", which means it's
+expecting you to pass a string variable, as we've done above.<br><br>
+Note that "a$" could be named anything at all - "b$" "sometext$" whatever.<br><br>
+Look inside the function, and it takes whatever is passed into its
+ "a$" parameter and uses it in the Print call ("Print a$").<br><br>
+As an exercise, try changing "a$" to "b$". Make sure you change "a$" to "b$" 
+all throughout the function, or it won't work! Do that before continuing, then run it.<br><br> 
+Here's what you should have ended up with:<br><br>
+Function PrintSomething (b$)<br>
+Print b$<br>
+End Function<br><br>
+
+</b>Now try changing the string to something of your own choosing (as long as
+it ends with the $ string sign!)<br><br>
+Using functions - Part 3<br><br>
+OK, so that was a very simple function call, where a function basically acted like
+any other command. Now we'll look at another way to call functions. We can have them perform
+ a calculation and "return" a value to us.<br><br>
+
+The function:<br><br>
+<b>Function JoinString$ (a$)<br>
+	Return "You passed: "+a$<br>
+End Function<br></b>
+
+; Again, we "pass" a string to the function, but this time, we store what the function returns. <br><br>
+
+<b>mysentence$=JoinString ("Hello, I'm gonna be printed.")
+Print mysentence$<br><br></b>
+
+Run the program as before - now what happens here?<br><br>
+
+First of all, looking at the function itself, we know we're returning a string 
+from the function (it's joining "You passed: " onto whatever string you pass to it), so we add
+a $ (string) sign to the name of the function ("JoinString"), which gives us "JoinString$".
+The "Return" statement passes the joined string back to where we called it. Remember,
+this is why we added a "$" to the name; we're returning this STRING.
+Calling the function, we simply pass whatever string we want, and it's received into
+ our string variable (in this case, "mysentence$"). So mysentence$ becomes "You passed: Hello,
+I'm gonna be printed." once we call the function.<br><br>
+
+<b>Some exercises:</b><br><br>
+Try changing the name of the variable "mysentence$" to something of your own, eg. b$,
+something$, whatever. Note that you'll have to change it in the Print statement too! Run it.<br><br>
+
+Change the "You passed: " string within the function to something else, and change
+the string you're passing ("Hello, I'm gonna be printed"). Run it. Try a few different things.<br><br>
+Using Functions - Part 4<br><br>
+By default, a function returns either:<br><br>
+
+0	- (zero) for numeric values
+ ""	- (an empty string) for string type functions
+<br><br>
+<b>Function AddOneAndOne ()<br>
+	a=1+1<br>
+End Function</b> ; This will return 0, because we haven't told it to actually return the result of 1+1!<br>
+<b>Print "Result of AddOneAndOne: "+AddOneAndOne ()</b> ; Try adding a line saying "Return a" (without the quotes!) to the AddOneAndOne
+function, then run it again. NOW it returns the value!<br>
+
+<b>Function GimmeString$ ()<br>
+	a$="If you can read this, you must have fixed this function!"<br>
+End Function<br>
+
+b$=GimmeString ()<br>
+
+If b$="" <br>
+	b$="GimmeString doesn't return a value!"<br>
+Else Print b$<br>
+EndIf<br>
+
+Print "Result of GimmeString (): "+b$<br><br>
+
+</b>Exercise: add the necessary line to the function so that it returns a$, then
+run it again.<br><br>
+
+
+
+
+<b><u>IF...THEN Commands</b></u><br><br>
+The <b>IF</b> statement works out the condition of something as either true or false.
+If the condition is true then the statement after <b>THEN</b> is executed, but otherwise it
+is skipped over. The most useful conditions compare two number or two strings. You can test
+whether two numbers are equal, or whether one is bigger than the other and they can test whether
+two strings are equal, or whether one come before the other in alphabetical order. They use the
+relations =,&lt;,&gt;,&lt;=,&gt;=, and <>. If you've not experienced 
+these signs before they represent the following:<br><br>
+<b>Sign</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>Meaning</b><br><br>
+=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Equals<br>
+&lt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is less than<br>
+&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is greater than<br>
+&lt;=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is less than or equal to<br>
+&gt;=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is greater than or equal to<br>
+<>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is unequal to<br><br><br>
+Take the following example:<br><br>
+<b>.start</b> ; sets up the label start<br>
+<b>question$ = Input ("Shall I tell you the meaning of life yes/no? "</b> ; prints a question - waits for users input<br>
+<b>If question$ = "no" Then Print "Alright, Then I won't"</b>; IF input = no THEN print text<br>
+<b>If question$ = "yes" Then Print "42"</b> ; IF input = yes THEN print text<br>
+<b>If question$ <> "yes" Or "no" Then Goto start</b> ; IF input is not equal to either yes or no THEN GOTO start<br><br>
+We can also achieve the same effect with numbers too:<br><br>
+
+<b>number = Input ("How old are you ")</b> ; prints a question - waits for users input<br>
+<b>If number &lt; 18 Then Print "You are under 18"</b> ; IF input is smaller than 18 THEN print text<br>
+<b>If number > 18 Then Print "You are over 18"</b> ; IF input is greater than 18 THEN print text<br> 
+<b>If number = 18 Then Print "you are 18"</b> ; IF input is equal to 18 THEN print text<br>
+<br><br>
+The expression IF THEN can be any combination of values, variables, arrays and operators providing the expressions are logical.<br><br>
+<u><b>IF ENDIF</u></b><br><br>
+On a similar principal to the IF command - instead of a THEN command
+ENDIF points to the end of the commands to be executed - the example below
+shows you this principle:<br><br>
+<b>commodore = 20</b> ; sets up the variable for commodore<br>
+<b>atari = 20</b> ; sets up the variable for atari<br>
+<b>If commodore = atari</b> ; IF both variables are the same...(execute the code between here and ENDIF)<br>
+<b>Print "Welcome to the machine - commodore and atari..."</b> ; code to be executed if the values are the same.
+<b>EndIf</b> ; Execute and ENDIF they are equal<br><br>
+The above code is the same as typing:<br><br>
+IF commodore = atari THEN PRINT "Welcome to the machine - commodore and atari..."<br><br>
+If you change the values of commodore and atari - so they are both different - see the end result?<br><br>
+You can also make your program follow a different chain of events if the values are not equal to. 
+Here we introduce the <b>ELSE</b> command - so you would point this to a different
+piece of code that you wanted to execute - like below:<br><br>
+<b>IF commodore = atari<br>
+PRINT "The values are equal to"<br>
+ELSE<br>
+PRINT "The values are different"<br>
+ENDIF<br><br></b>
+You must remember that when the command <b>THEN</b> is not used you must
+use <b>ENDIF</b> - You will  should also note that <b>ENDIF</b>
+ is used whether or not the <b>ELSE</b> command is used.<br><br>
+<b><u>Types</b></u><br><br>
+
+Using normal arrays (as documented earlier) we can store important information
+ about, for example, our players' positions:<br><br>
+
+  <b>player = 3<br>
+  x = 640<br>
+  y = 480<br><br>
+
+  Dim players (player, x, y)<br><br>
+
+  players (2, 100, 100)</b>        ; this sets player 2's on-screen position to x = 100, y = 100<br><br>
+
+This is fine, but what if we want to add more players? We have to re-Dim the
+array with the maximum number of players! It can also be quite difficult to
+remember what each element in the array stands for when you have a lot of
+elements, eg.<br><br>
+
+<b>  Dim playerdata (player, x, y, animframe, weaponselected, lives, rockets,
+jewelscollected, blah, blah2)</b><br><br>
+
+Try just changing the "rockets" element later on when you can't see the
+actual list of elements without scrolling all the way back up!<br><br>
+
+A way around this general awkwardness is to use <b>types.</b> Whereas with the
+array, we made a "playerdata" array, here we'll make a "playerdata" type
+instead:<br><br>
+
+  <b>Type playerdata<br>
+      Field player<br>
+      Field x<br>
+      Field y<br>
+      Field animframe<br>
+      Field weaponselected<br>
+      Field lives<br>
+      Field rockets<br>
+      Field jewelscollected<br>
+      Field blah<br>
+      Field blah2<br>
+  End Type<br><br></b>
+
+Think it looks complicated? Well, let's take a look:<br><br>
+
+<b>Type playerdata</b><br><br>
+
+This line simply creates a new type (you'll also hear types referred to as
+"objects", so this might be called a "playerdata object").<br><br>
+
+<b>Field player<br>
+Field whatever</b><br><br>
+
+The field lines simply say what information we want to hold in the
+playerdata object.<br><br>
+
+<b>End Type</b><br><br>
+
+This just signifies the end of our type definition. <b>Don't forget it!</b><br><br>
+
+OK, in the array example, we wanted to change the rocket element (we'll give
+'em 1000 rockets), which would mean typing something like:<br><br>
+
+ <b> playerdata (player, x, y, animframe, weaponselected, lives, 1000,
+jewelscollected, blah, blah2)</b><br><br>
+
+Ouch, what a lot of typing! And I hope you remembered the order of the items
+(gosh, and you probably had to scroll all the way back up to find the
+definition of the array elements as well)! The efficient (read: cleverly
+lazy) programmer will use types instead. Using our playerdata type:<br><br>
+
+ <b> playerdata\rockets = 1000</b><br><br>
+
+Now, not only is that shorter, but we didn't have to remember where to place
+the rockets value either (in fact, we couldn't even accidentally put it in
+the wrong place, since we're specifically saying "makes the rockets value
+equal 1000").<br><br>
+
+Note the way we access the type data, with a backslash like this: \<br><br>
+
+To read the jewelscollected value into a temporary variable and show the
+value, we'd do this:<br><br>
+
+  <b>temp = playerdata\jewelscollected : Print temp</b><br><br>
+
+Of course, there's nothing to stop us printing the value directly:<br><br>
+
+ <b> Print playerdata\jewelscollected</b><br><br>
+
+One very important aspect of using types is that you must tell Blitz that
+you're going to be assigning a variable with a custom type. If we want to
+make two players using the playerdata type, we do this:<br><br>
+
+ <b> player1.playerdata = New playerdata<br>
+  player2.playerdata = New playerdata</b><br><br>
+
+This can be read as "create a new playerdata object called player1" and
+"create a new playerdata object called player1". From here on, we can do
+whatever we like with our newly defined player objects.<br><br>
+
+It's important to remember this step, as you can't simply do this:<br><br>
+
+  <b>player1.playerdata\rockets = 1000</b><br><br>
+
+...without first creating the player1 playerdata object, as above!<br><br>
+
+To recap, if we want to use an object called "zoolook", of type
+"whatever", we do this:<br><br>
+
+  ; Define our object structure:<br><br>
+
+  <b>Type whatever<br>
+    Field something</b><br>
+   ; As many fields of information as needed for the zoolook objects<br>
+  <b>End Type<br><br>
+
+  zoolook.whatever = New whatever</b><br><br>
+
+Now we can use our zoolook object.<br><br>
+
+Where types can become really powerful is if we just need a heap of
+similar objects (for instance, the aliens in a "Space Invaders" clone), and
+want an easy way to define and manipulate them.<br><br>
+
+  <b>Type invader<br>
+    Field x<br>
+    Field y<br>
+  End Type</b><br><br>
+
+We can set up a huge number of alien invaders with a simple loop:<br><br>
+
+  <b>For a = 1 to 100<br>
+
+    alien.invader = New invader<br>
+
+    alien\x = Rnd (GraphicsWidth)<br>
+    alien\y = Rnd (GraphicsHeight)<br>
+
+  Next</b><br><br>
+
+This appears to keep redefining a single object over and over! The strange
+thing about types, though, is that when we create a new object, we're
+actually creating a *reference* to an object, rather than the object itself.<br><br>
+
+Every time you say:<br><br>
+
+  <b>something.mycustomtype = New mycustomtype</b>               ; a new "customtype" called "something"<br><br>
+
+...you're saying "create a new 'mycustomtype' object, and give me a
+reference to it; call my reference 'something'".<br><br>
+
+Although we can refer to them individually if we define objects with
+individual names (eg player1.playerdata, player2.playerdata), we can also
+ignore the names completely. If we give the same name to more than one item
+of a particular type, we're just adding to a hidden list of those objects,
+which we don't need to access individually. To draw all of our aliens, we'd
+simply do this:<br><br>
+
+ <b> For nasties.invader = Each invader<br>
+    DrawImage invaderimage, nasties\x, nasties\y<br>
+  Next</b><br<br>
+
+...and all of our aliens are drawn!<br><br>
+
+Note the importance of giving our For...Next variable (nasties) an
+"invaders" type while we read through our list of "invaders".<br><br>
+
+So, to recap, whenever we create a new object, we're really adding to a
+hidden list of objects of that type. When we want to be able to refer to
+ each individual object, we give each a different name:<br><br>
+
+  <b>Type playerdata<br>
+    Field x<br>
+    Field y<br>
+  End Type<br><br>
+
+  player1.playerdata = New playerdata<br>
+  player2.playerdata = New playerdata</b><br><br>
+
+The computer adds each object to its hidden list of "playerdata" objects,
+which might look like this:<br><br>
+
+  <b>xxxxx1.playerdata [player1]<br>
+  xxxxx2.playerdata [player2]</b><br><br>
+
+...but it doesn't matter to us how the computer stores its hidden list - we
+just refer to player1 and player2.<br><br>
+
+If we don't need to be able to access each item individually, we can do
+this:<br><br>
+
+  <b>Type blah<br>
+    Field whatever<br>
+  End Type<br><br>
+
+  For a = 1 to 3<br>
+    myobject.blah = New blah<br>
+    myobject\whatever = 5<br>
+  Next</b><br><br>
+
+The above example creates a hidden list of "blah" objects, and sets the
+"whatever" value of each to 5. To the computer, they might be stored in some
+abstract form which we have no knowledge of, eg:<br><br>
+
+<b>xxxx1.blah [myobject]<br>
+xxxx2.blah [myobject]<br>
+xxxx3.blah [myobject]</b><br><br>
+
+Obviously, we can't read individual objects from this list, because we gave
+them all the same name! But we don't care; we didn't want to - we can read
+them "en masse" by using the For...Each...Next loop:<br><br>
+
+ <b>For a.blah = Each blah<br>
+    Print a\whatever<br>
+  Next</b><br><br>
+
+Taken apart, we get this:<br><br>
+
+<b>For a.blah = Each blah</b><br><br>
+
+This reads each "blah" object in turn into a temporary object called "a",
+which has a "blah" type (so it can store the same data as our "blah"
+objects).<br><br>
+
+<b>Print a\whatever</b><br><br>
+
+This prints out the contents of the temporary "a" variable's "whatever"
+field.<br><br>
+
+<b>Next</b><br><br>
+
+This is just the normal "Next" used in a For...Next loop.<br><br>
+
+There's a lot more to types (hence their awesome power!), but this has
+basics, which will get you started!<br><br>
+<b>OK Now that you've covered the Basics look in the Blitz manual
+for a synopsis of the more advanced commands :) </b>
+
+<br><br><center><b>REMEMBER: Look in the Blitz Basic samples folder for lots of example code for
+you to play around with and more importantly - learn whilst having fun.</center><br><br>
+<hr><br><br>
+</body>
+</html>

BIN
_release/tutorials/basic_tuts/blitzlogo.gif


+ 29 - 0
_release/tutorials/basic_tuts/counter.bb

@@ -0,0 +1,29 @@
+; Set display mode variables 
+Const width=640,height=480,depth=16
+
+; Set the display mode
+Graphics width,height,depth
+
+;Draw to the back buffer
+SetBuffer BackBuffer ()
+counter = 1
+;Set font to arial size 128
+fontno=LoadFont("verdana",128)
+SetFont fontno
+While Not KeyDown(1); Repeat the following loop until the escape key is pressed
+;Set font colour to psychedelic
+Color Rnd(256),Rnd(256),Rnd(256)
+counter = counter + 1
+
+Cls; Clear screen
+
+;Print current counter number to the screen 195 pixels across by 160 pixels high
+Text 195,160,counter
+
+; Flip the screen buffers
+Flip
+
+Wend
+
+
+

+ 28 - 0
_release/tutorials/basic_tuts/credits.html

@@ -0,0 +1,28 @@
+<HTML>
+<HEAD>
+  <TITLE>Blitz Lite Credits</TITLE>
+  <META name="description" content="The Credits">
+  <META name="keywords" content="">
+<style type="text/css">
+<!--
+     A:link {text-decoration: none;}
+     A:visited {text-decoration: none;}
+-->
+</style>
+</HEAD>
+<BODY BGCOLOR="#1f5e5e" TEXT="FFFF00" LINK="00ff00" VLINK="00ff00">
+
+<center><h1>The Credits</h1></center><br>
+<center>Blitz was lovingly written by <b>Mark Sibly</b><br>Coded with lots of help and abuse from James L Boyd, Claire Foley and George Bray. <br><br>
+This tutorial was hand crafted by <b>George Bray</b> <br>Written whilst listening to Jean Michel Jarre, Pink Floyd, Vangelis and drinking
+an endless supply of Tetley tea.<br><br>
+I would like to thank all the beta testers who have helped through the many
+stages of Blitz Basic and to those I still speak to regularly, I don't want to praise individuals as
+the whole project has been very much a team effort (<b>but you know who you are</b>)<br><br><br>
+Log-on to the live one here<a href="http://www.blitzbasic.com">&nbsp;Blitz Basic&nbsp;</a>and<a href="http://users.breathemail.net/georgebray">&nbsp;Here&nbsp;</a><br><br>
+So long and thanks for all the fish - <a href="mailto:[email protected]">George</a><br><br>
+</center>
+</BODY>
+<br><br>
+
+</HTML>

+ 27 - 0
_release/tutorials/basic_tuts/doublebuffering.bb

@@ -0,0 +1,27 @@
+; Example of double bufferiing
+; An easy to use and important feature in Blitz
+; for more examples visit www.blitzbasic.com
+; or visit http://users.breathemail.net/georgebray
+
+Graphics 640,480 ; goes into graphics mode & sets the resolution
+Text 50,50,"Press spacebar..."
+
+SetBuffer FrontBuffer() ; draw to the front buffer
+Text 0,0,"This drawn to the front buffer"
+
+Text 50,100,"Press ecape to exit."
+SetBuffer BackBuffer() ; draw to the back buffer
+
+Text 50,50,"Press spacebar again..."
+Text 0,0,"This drawn to the back buffer"
+Text 50,100,"Press ecape to exit."
+
+While Not KeyDown(1) ;keep looping until ESC pressed
+
+
+	WaitKey ;wait for any keypress
+	
+
+	Flip ;swap front and back buffers
+	
+Wend ; continue until progrgram ends

+ 7 - 0
_release/tutorials/basic_tuts/end if.bb

@@ -0,0 +1,7 @@
+commodore = 20
+atari = 20
+If commodore = atari
+Print "Welcome to the machine - Commodore and Atari..."
+EndIf
+
+

+ 62 - 0
_release/tutorials/basic_tuts/examples.html

@@ -0,0 +1,62 @@
+<HTML>
+<HEAD>
+  <TITLE>Blitz Lite Examples</TITLE>
+  <META name="description" content="Written a game?">
+  <META name="keywords" content="">
+<style type="text/css">
+<!--
+     A:link {text-decoration: none;}
+     A:visited {text-decoration: none;}
+-->
+</style>
+</HEAD>
+<BODY BGCOLOR="#206060" TEXT="FFff00" LINK="00ff00" VLINK="00ff00">
+<br>
+<center><h1>Basic Examples</h1><br><br></center>
+<center>To complement <b>The Beginners Guide to Blitz Basic. </b>Below are many examples of the
+commands that you have been learning, load them into Blitz, play around with them
+until you are comfortable what each line of code means. <br><br>Most of all enjoy!<br><br></center>
+<center><b><br>Click on the title of the demo you wish to load below</center></b>
+<br>
+<center><TABLE><table border="4">
+  <TR><!-- Row 1 -->
+     <TD><a href="print.bb">PRINT </a></TD>
+     <TD><a href="array.bb">ARRAY </a></TD>
+     <TD><a href="array1.bb">ARRAY1 </a></TD>
+     <TD><a href="for next loop.bb">FOR NEXT </a></TD>
+     <TD><a href="goto.bb">GOTO </a></TD>
+
+   
+  </TR>
+  <TR><!-- Row 2 -->
+     
+     <TD><a href="if then.bb">IF THEN</a></TD>
+     <TD><a href="if then1.bb">IF THEN1</a></TD>
+     <TD><a href="input.bb">INPUT</a></TD>
+     <TD><a href="input1.bb">INPUT1</a></TD>
+     <TD><a href="random numbers.bb">RND</a></TD>
+   
+  </TR>
+  <TR><!-- Row 3 -->
+     <TD><a href="counter.bb">COUNTER</a></TD>
+     <TD><a href="end if.bb">END IF</a></TD>
+     <TD><a href="doublebuffering.bb">DOUBLE BUFFER</a></TD>
+     <TD><a href="simple maths.bb">MATHS</a></TD>
+     <TD><a href="maths.bb">MATHS1</a></TD>
+   
+  </TR>
+  <TR><!-- Row 4 -->
+     <TD><a href="step.bb">STEP</a></TD>
+     <TD><a href="types1.bb">TYPES</a></TD>
+     <TD><a href="types2.bb">TYPES1</a></TD>
+     <TD><a href="variables.bb">VARIABLES</a></TD>
+     <TD><a href="variables1.bb">VARIABLES1</a></TD>
+
+   
+  </TR>
+
+</TABLE>
+</center>
+</BODY>
+<br><br><br>
+</HTML>

+ 3 - 0
_release/tutorials/basic_tuts/for next loop.bb

@@ -0,0 +1,3 @@
+For a = 0 To 100
+Print a
+Next 

+ 24 - 0
_release/tutorials/basic_tuts/game.html

@@ -0,0 +1,24 @@
+<HTML>
+<HEAD>
+  <TITLE>Written a game?</TITLE>
+  <META name="description" content="Written a game? Send it to us for evaluation">
+  <META name="keywords" content="">
+<style type="text/css">
+<!--
+     A:link {text-decoration: none;}
+     A:visited {text-decoration: none;}
+-->
+</style>
+</HEAD>
+<BODY BGCOLOR="#1f5e5e" TEXT="FFFF00" LINK="00ff00" VLINK="00ff00">
+
+<h1><center><b>Written a game?</b></h1><br>
+Then why not send it to <b>Guildhall Leisure</b> for evaluation - where we will give you an honest opinion
+and if it fits into our games portfolio we will offer you an excellent royalty rate for your game. We are really looking
+forward to all your efforts. <br><br>Send demo/full game to:
+<br><br><left>Attn: George Bray<br>C/o: Guildhall Leisure<br>Ashfield House<br>
+Ashfield Road<br>Balby<br>DONCASTER<br>DN3 8QD<br><br>Tel: (01302) 310800<br>Fax: (01302) 314001
+<br>Email: <a href="mailto:[email protected]">[email protected]</a>
+<br><br>
+</BODY>
+</HTML>

+ 1107 - 0
_release/tutorials/basic_tuts/gettingstarted.html

@@ -0,0 +1,1107 @@
+<HTML>
+<HEAD>
+<META NAME="GENERATOR" Content="Microsoft Developer Studio">
+<META HTTP-EQUIV="Content-Type" content="text/html; charset=iso-8859-1">
+<TITLE>Getting Started In Blitz BASIC</TITLE>
+</HEAD>
+<body bgcolor="#206060" text="#ffff00" link="#00ff00"
+vlink="#00ff00" alink="#00ff00">
+<style>
+<!--
+     A:link {text-decoration: none;}
+     A:visited {text-decoration: none;}
+-->
+</style>
+<h2><font color="#FFFF00" face="MS Sans Serif"><strong>Getting
+Started with BlitzBasic</strong></font></h2>
+<hr>
+<menu>
+    <li><h4><a href="#first"><font face="MS Sans Serif">My First
+        Program</font></a></h4>
+    </li>
+    <li><h4><a href="#variables"><font face="MS Sans Serif">Variables</font></a></h4>
+    </li>
+    <li><h4><a href="#firstgame"><font face="MS Sans Serif">My
+        First Game</font></a></h4>
+    </li>
+    <li><h4><a href="#gettinggraphic"><font face="MS Sans Serif">Getting
+        Graphic</font></a></h4>
+    </li>
+    <li><h4><a href="#doublebuffering"><font face="MS Sans Serif">Double
+        Buffering</font></a></h4>
+    </li>
+    <li><h4><a href="#mysecondgame"><font face="MS Sans Serif">My
+        Second Game</font></a></h4>
+    </li>
+</menu>
+
+<hr>
+
+<h4><a name="first"><font color="#A7E3F5" face="MS Sans Serif">My
+First Program</font></a></h4>
+
+<p><font face="MS Sans Serif">After sampling some of the fine
+example programs included in the BlitzBasic package you are
+hopefully itching to try some of your own code.</font></p>
+
+<p><font face="MS Sans Serif">BlitzBasic is intended as both a
+friendly introduction to programming computers as well as a
+language capable of producing polished video game software.</font></p>
+
+<p><font face="MS Sans Serif">First up, the traditonal hello
+world program. A simple one line program that prints the message
+&quot;hello world&quot; on the screen. Select the File-New menu
+option and enter the following text:</font></p>
+<div align="center"><center>
+
+<table border="2" cellpadding="8" width="600" bgcolor="#006060">
+    <tr>
+        <td><font color="#FFE75F" size="2" face="blitz">Print</font><font
+        color="#FFFFFF" size="2" face="blitz"> </font><font
+        color="#00FF00" size="2" face="blitz">&quot;Hello World!&quot;</font></td>
+    </tr>
+</table>
+</center></div>
+
+<p><font face="MS Sans Serif">If you press the F5 key to compile
+and run and a message greeting the world appears then </font><font
+color="#80FF00" face="MS Sans Serif">congratulations!</font><font
+face="MS Sans Serif"> you have just authored your first
+BlitzBasic program.</font></p>
+
+<p><font face="MS Sans Serif">The following code illustrates
+prompting the user of your program for some input.</font></p>
+<div align="center"><center>
+
+<table border="2" cellpadding="8" width="600" bgcolor="#006060">
+    <tr>
+        <td><font color="#FFFFFF" size="2" face="blitz">a</font><font
+        color="#FFF0C8" size="2" face="blitz">=</font><font
+        color="#FFE75F" size="2" face="blitz">Input</font><font
+        color="#FFF0C8" size="2" face="blitz">(</font><font
+        color="#00FF00" size="2" face="blitz">&quot;enter a
+        number sweety:&quot;</font><font color="#FFF0C8" size="2"
+        face="blitz">)</font><p><font color="#FFE75F" size="2"
+        face="blitz">Print</font><font color="#FFFFFF" size="2"
+        face="blitz"> </font><font color="#00FF00" size="2"
+        face="blitz">&quot;the value of a is &quot;</font><font
+        color="#FFFFFF" size="2" face="blitz"> </font><font
+        color="#FFF0C8" size="2" face="blitz">+ </font><font
+        color="#FFFFFF" size="2" face="blitz">a</font></p>
+        </td>
+    </tr>
+</table>
+</center></div>
+
+<p><font face="MS Sans Serif">Note: see how we add text and an
+integer variable together to print them both on the same line.</font></p>
+
+<hr>
+
+<h4><a name="variables"><font color="#A7E3F5"
+face="MS Sans Serif">Variables</font></a></h4>
+
+<p><font face="MS Sans Serif">Variables in Blitz are used to
+store integers, floats and strings.</font></p>
+
+<p><font face="MS Sans Serif">The first time a float or a string
+variable is used in your program it must be denoted with # or $
+symbols .</font></p>
+
+<p><font face="MS Sans Serif">If the &quot;a=&quot; in the
+program is changed to &quot;a$=&quot; Blitz will treat a as a
+string variable which can then contain any text the user enters
+instead of the integer number it originally converted the user's
+reply into.</font></p>
+<div align="center"><center>
+
+<table border="2" cellpadding="8" width="600" bgcolor="#006060">
+    <tr>
+        <td><font color="#FFFFFF" size="2" face="blitz">a</font><font
+        color="#FFF0C8" size="2" face="blitz">$=</font><font
+        color="#FFE75F" size="2" face="blitz">Input</font><font
+        color="#FFF0C8" size="2" face="blitz">(</font><font
+        color="#00FF00" size="2" face="blitz">&quot;enter a
+        number sweety:&quot;</font><font color="#FFF0C8" size="2"
+        face="blitz">)</font><p><font color="#FFE75F" size="2"
+        face="blitz">Print</font><font color="#FFFFFF" size="2"
+        face="blitz"> </font><font color="#00FF00" size="2"
+        face="blitz">&quot;the value of a is &quot;</font><font
+        color="#FFFFFF" size="2" face="blitz"> </font><font
+        color="#FFF0C8" size="2" face="blitz">+ </font><font
+        color="#FFFFFF" size="2" face="blitz">a</font></p>
+        </td>
+    </tr>
+</table>
+</center></div>
+
+<p><font face="MS Sans Serif">Suggestion: change the &quot;a$=&quot;
+to &quot;a#=&quot; and enter the number 22.95. What's going on?</font></p>
+
+<hr>
+
+<h4><a name="firstgame"><font color="#A7E3F5"
+face="MS Sans Serif">My First Game</font></a></h4>
+
+<p><font face="MS Sans Serif">The following program gives the
+user 5 turns to guess the random number.</font></p>
+<div align="center"><center>
+
+<table border="2" cellpadding="8" width="600" bgcolor="#006060">
+    <tr>
+        <td><font color="#00FFFF" size="2" face="blitz">;
+        guessing game</font><p><font color="#FFFFFF" size="2"
+        face="blitz">turnsleft</font><font color="#FFF0C8"
+        size="2" face="blitz">=</font><font color="#C8F0FF"
+        size="2" face="blitz">5</font></p>
+        <p><font color="#FFFFFF" size="2" face="blitz">sheep</font><font
+        color="#FFF0C8" size="2" face="blitz">=</font><font
+        color="#FFE75F" size="2" face="blitz">Rnd</font><font
+        color="#FFF0C8" size="2" face="blitz">(</font><font
+        color="#C8F0FF" size="2" face="blitz">20</font><font
+        color="#FFF0C8" size="2" face="blitz">)</font></p>
+        <p><font color="#FFE75F" size="2" face="blitz">While</font><font
+        color="#FFF0C8" size="2" face="blitz"> (</font><font
+        color="#FFFFFF" size="2" face="blitz">turnsleft</font><font
+        color="#FFF0C8" size="2" face="blitz">&gt;</font><font
+        color="#C8F0FF" size="2" face="blitz">0</font><font
+        color="#FFF0C8" size="2" face="blitz">)</font></p>
+        <blockquote>
+            <p><font color="#FFFFFF" size="2" face="blitz">turnsleft</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#FFFFFF" size="2" face="blitz">turnsleft</font><font
+            color="#FFF0C8" size="2" face="blitz">-</font><font
+            color="#C8F0FF" size="2" face="blitz">1</font></p>
+            <p><font color="#FFFFFF" size="2" face="blitz">guess</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#FFE75F" size="2" face="blitz">Input</font><font
+            color="#FFF0C8" size="2" face="blitz">(</font><font
+            color="#00FF00" size="2" face="blitz">&quot;guess how
+            many sheep I have in my room:&quot;</font><font
+            color="#FFF0C8" size="2" face="blitz">)</font></p>
+            <p><font color="#FFE75F" size="2" face="blitz">If</font><font
+            color="#FFF0C8" size="2" face="blitz"> </font><font
+            color="#FFFFFF" size="2" face="blitz">guess</font><font
+            color="#FFF0C8" size="2" face="blitz">&lt;</font><font
+            color="#FFFFFF" size="2" face="blitz">sheep</font><font
+            color="#FFF0C8" size="2" face="blitz"> </font><font
+            color="#FFE75F" size="2" face="blitz">Then</font><font
+            color="#FFF0C8" size="2" face="blitz"> </font><font
+            color="#FFE75F" size="2" face="blitz">Print</font><font
+            color="#FFF0C8" size="2" face="blitz"> </font><font
+            color="#00FF00" size="2" face="blitz">&quot;more than
+            that!&quot;</font></p>
+            <p><font color="#FFE75F" size="2" face="blitz">If</font><font
+            color="#FFF0C8" size="2" face="blitz"> </font><font
+            color="#FFFFFF" size="2" face="blitz">guess</font><font
+            color="#FFF0C8" size="2" face="blitz">&gt;</font><font
+            color="#FFFFFF" size="2" face="blitz">sheep</font><font
+            color="#FFF0C8" size="2" face="blitz"> </font><font
+            color="#FFE75F" size="2" face="blitz">Then</font><font
+            color="#FFF0C8" size="2" face="blitz"> </font><font
+            color="#FFE75F" size="2" face="blitz">Print</font><font
+            color="#FFF0C8" size="2" face="blitz"> </font><font
+            color="#00FF00" size="2" face="blitz">&quot;oh, not
+            that many!</font></p>
+            <p><font color="#FFE75F" size="2" face="blitz">If</font><font
+            color="#FFF0C8" size="2" face="blitz"> </font><font
+            color="#FFFFFF" size="2" face="blitz">guess</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#FFFFFF" size="2" face="blitz">sheep</font><font
+            color="#FFF0C8" size="2" face="blitz"> </font><font
+            color="#FFE75F" size="2" face="blitz">Then</font><font
+            color="#FFF0C8" size="2" face="blitz"> </font><font
+            color="#FFE75F" size="2" face="blitz">Exit</font></p>
+        </blockquote>
+        <p><font color="#FFE75F" size="2" face="blitz">Wend</font></p>
+        <p><font color="#FFE75F" size="2" face="blitz">If</font><font
+        color="#FFF0C8" size="2" face="blitz"> </font><font
+        color="#FFFFFF" size="2" face="blitz">turnsleft</font><font
+        color="#FFF0C8" size="2" face="blitz">=</font><font
+        color="#C8F0FF" size="2" face="blitz">0</font><font
+        color="#FFF0C8" size="2" face="blitz"> </font><font
+        color="#FFE75F" size="2" face="blitz">Then</font><font
+        color="#FFF0C8" size="2" face="blitz"> </font><font
+        color="#FFE75F" size="2" face="blitz">Print</font><font
+        color="#FFF0C8" size="2" face="blitz"> </font><font
+        color="#00FF00" size="2" face="blitz">&quot;game over
+        dude&quot; </font><font color="#FFE75F" size="2"
+        face="blitz">Else</font><font color="#FFF0C8" size="2"
+        face="blitz"> </font><font color="#FFE75F" size="2"
+        face="blitz">Print</font><font color="#FFF0C8" size="2"
+        face="blitz"> </font><font color="#00FF00" size="2"
+        face="blitz">&quot;good guess!&quot;</font></p>
+        </td>
+    </tr>
+</table>
+</center></div>
+
+<blockquote>
+</blockquote>
+
+<p><font face="MS Sans Serif">There are three variables used in
+this program: turnsleft, sheep and guess.</font></p>
+
+<p><font face="MS Sans Serif">To begin with, turnsleft is set to
+5 and sheep is set to a random number between 0 and 20. The
+program then enters a &quot;while&quot; loop asking the player to
+guess a number, and comparing their answer which is placed in the
+variable guess with the value in sheep.</font></p>
+
+<p><font face="MS Sans Serif">After playing the game a few times,
+you may notice that the number of sheep does not vary much. Try
+adding the following line to the top of the program to &quot;seed&quot;
+the random number generator using the time of day in milliseconds.</font></p>
+<div align="center"><center>
+
+<table border="2" cellpadding="8" width="600" bgcolor="#006060">
+    <tr>
+        <td><font color="#FFE75F" size="2" face="blitz">SeedRnd
+        MilliSecs</font><font color="#FFF0C8" size="2"
+        face="blitz">()</font></td>
+    </tr>
+</table>
+</center></div>
+
+<p><font face="MS Sans Serif">Congratulations, you have just
+doubled the playability of the game with one line of code!</font></p>
+
+<hr>
+
+<h4><a name="gettinggraphic"><font color="#A7E3F5"
+face="MS Sans Serif">Getting Graphic</font></a></h4>
+
+<p><font face="MS Sans Serif">BlitzBasic is not designed for
+building text based application such as our initial guessing game.
+It is also not designed for building applications featuring
+friendly graphics user interfaces filled with windows and sliders.</font></p>
+
+<p><font face="MS Sans Serif">The only thing BlitzBasic has been
+designed for is the very serious business of video game
+development.</font></p>
+
+<p><font face="MS Sans Serif">The following program initializes a
+640x480 video display then plots points at random positions until
+the user presses the escape key.</font></p>
+<div align="center"><center>
+
+<table border="2" cellpadding="8" width="600" bgcolor="#006060">
+    <tr>
+        <td><font color="#00FFFF" size="2" face="blitz">; getting
+        graphic</font><p><font color="#FFE75F" size="2"
+        face="blitz">Graphics</font><font color="#00FFFF"
+        size="2" face="blitz"> </font><font color="#C8F0FF"
+        size="2" face="blitz">640</font><font color="#FFF0C8"
+        size="2" face="blitz">,</font><font color="#C8F0FF"
+        size="2" face="blitz">480</font></p>
+        <p><font color="#FFE75F" size="2" face="blitz">While</font><font
+        color="#00FFFF" size="2" face="blitz"> </font><font
+        color="#FFE75F" size="2" face="blitz">Not KeyDown</font><font
+        color="#FFF0C8" size="2" face="blitz">(</font><font
+        color="#C8F0FF" size="2" face="blitz">1</font><font
+        color="#FFF0C8" size="2" face="blitz">)</font></p>
+        <blockquote>
+            <p><font color="#FFE75F" size="2" face="blitz">Plot</font><font
+            color="#00FFFF" size="2" face="blitz"> </font><font
+            color="#FFE75F" size="2" face="blitz">Rnd</font><font
+            color="#FFF0C8" size="2" face="blitz">(</font><font
+            color="#C8F0FF" size="2" face="blitz">640</font><font
+            color="#FFF0C8" size="2" face="blitz">),</font><font
+            color="#FFE75F" size="2" face="blitz">Rnd</font><font
+            color="#FFF0C8" size="2" face="blitz">(</font><font
+            color="#C8F0FF" size="2" face="blitz">480</font><font
+            color="#FFF0C8" size="2" face="blitz">)</font></p>
+        </blockquote>
+        <p><font color="#FFE75F" size="2" face="blitz">Wend</font></p>
+        </td>
+    </tr>
+</table>
+</center></div>
+
+<p><font face="MS Sans Serif">Once again we rely on the random
+number generator to provide an interesting result. Try adding the
+following color command before the plot statement to vary the
+color of the dots.</font></p>
+<div align="center"><center>
+
+<table border="2" cellpadding="8" width="600" bgcolor="#006060">
+    <tr>
+        <td><font color="#FFE75F" size="2" face="blitz">Color Rnd</font><font
+        color="#FFF0C8" size="2" face="blitz">(</font><font
+        color="#C8F0FF" size="2" face="blitz">256</font><font
+        color="#FFF0C8" size="2" face="blitz">),</font><font
+        color="#FFE75F" size="2" face="blitz">Rnd</font><font
+        color="#FFF0C8" size="2" face="blitz">(</font><font
+        color="#C8F0FF" size="2" face="blitz">256</font><font
+        color="#FFF0C8" size="2" face="blitz">),</font><font
+        color="#FFE75F" size="2" face="blitz">Rnd</font><font
+        color="#FFF0C8" size="2" face="blitz">(</font><font
+        color="#C8F0FF" size="2" face="blitz">256</font><font
+        color="#FFF0C8" size="2" face="blitz">)</font></td>
+    </tr>
+</table>
+</center></div>
+
+<p><font face="MS Sans Serif">Although this may seem like a
+simple program, creating a DirectX display such as featured here
+using traditional methods can be a complex task. BlitzBasic makes
+it so easy!</font></p>
+
+<hr>
+
+<h4><a name="doublebuffering"><font color="#A7E3F5"
+face="MS Sans Serif">Double Buffering</font></a></h4>
+
+<p><font face="MS Sans Serif">The following code illustrates the
+typical &quot;main loop&quot; of a game. For a video game to
+display smoothly animated graphics it must use a technique called
+&quot;Double Buffering&quot;.</font></p>
+
+<p><font face="MS Sans Serif">The following program shows one
+frame (the FrontBuffer) while drawing to another frame (the
+BackBuffer).</font></p>
+<div align="center"><center>
+
+<table border="2" cellpadding="8" width="600" bgcolor="#006060">
+    <tr>
+        <td><font color="#00FFFF" size="2" face="blitz">; double
+        buffering</font><p><font color="#FFE75F" size="2"
+        face="blitz">Graphics</font><font color="#FFF0C8"
+        size="2" face="blitz"> </font><font color="#C8F0FF"
+        size="2" face="blitz">640</font><font color="#FFF0C8"
+        size="2" face="blitz">,</font><font color="#C8F0FF"
+        size="2" face="blitz">480</font></p>
+        <p><font color="#FFE75F" size="2" face="blitz">SetBuffer</font><font
+        color="#FFF0C8" size="2" face="blitz"> </font><font
+        color="#FFE75F" size="2" face="blitz">BackBuffer</font><font
+        color="#FFF0C8" size="2" face="blitz">()</font></p>
+        <p><font color="#FFE75F" size="2" face="blitz">While</font><font
+        color="#FFF0C8" size="2" face="blitz"> </font><font
+        color="#FFE75F" size="2" face="blitz">Not KeyDown</font><font
+        color="#FFF0C8" size="2" face="blitz">(</font><font
+        color="#C8F0FF" size="2" face="blitz">1</font><font
+        color="#FFF0C8" size="2" face="blitz">)</font></p>
+        <blockquote>
+            <p><font color="#FFE75F" size="2" face="blitz">Flip</font></p>
+            <p><font color="#FFE75F" size="2" face="blitz">Cls</font></p>
+            <p><font color="#FFE75F" size="2" face="blitz">Line</font><font
+            color="#FFF0C8" size="2" face="blitz"> </font><font
+            color="#C8F0FF" size="2" face="blitz">320</font><font
+            color="#FFF0C8" size="2" face="blitz">,</font><font
+            color="#C8F0FF" size="2" face="blitz">240</font><font
+            color="#FFF0C8" size="2" face="blitz">,</font><font
+            color="#C8F0FF" size="2" face="blitz">320</font><font
+            color="#FFF0C8" size="2" face="blitz">+</font><font
+            color="#C8F0FF" size="2" face="blitz">100</font><font
+            color="#FFF0C8" size="2" face="blitz">*</font><font
+            color="#FFE75F" size="2" face="blitz">Cos</font><font
+            color="#FFF0C8" size="2" face="blitz">(</font><font
+            color="#FFFFFF" size="2" face="blitz">a</font><font
+            color="#FFF0C8" size="2" face="blitz">),</font><font
+            color="#C8F0FF" size="2" face="blitz">240</font><font
+            color="#FFF0C8" size="2" face="blitz">+</font><font
+            color="#C8F0FF" size="2" face="blitz">100</font><font
+            color="#FFF0C8" size="2" face="blitz">*</font><font
+            color="#FFE75F" size="2" face="blitz">Sin</font><font
+            color="#FFF0C8" size="2" face="blitz">(</font><font
+            color="#FFFFFF" size="2" face="blitz">a</font><font
+            color="#FFF0C8" size="2" face="blitz">)</font></p>
+            <p><font color="#FFFFFF" size="2" face="blitz">a</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#FFFFFF" size="2" face="blitz">a</font><font
+            color="#FFF0C8" size="2" face="blitz">+</font><font
+            color="#C8F0FF" size="2" face="blitz">1</font></p>
+        </blockquote>
+        <p><font color="#FFE75F" size="2" face="blitz">Wend</font></p>
+        </td>
+    </tr>
+</table>
+</center></div>
+
+<p><font face="MS Sans Serif">In BlitzBasic the Flip command
+performs the double buffering by swapping the back and front
+buffers. The </font><font color="#FFFF00" face="MS Sans Serif">Cls</font><font
+face="MS Sans Serif"> command clears the screen and the </font><font
+color="#FFFF00" face="MS Sans Serif">Line</font><font
+face="MS Sans Serif"> command draws a line.</font></p>
+
+<p><font face="MS Sans Serif">Note: the flip command also
+synchronizes to the video refresh which on standard VGA monitors
+is 60 frames per second. </font></p>
+
+<p><font face="MS Sans Serif">The program draws a line from the
+center of the screen (320,240) at an angle of a degrees, 100
+pixels long.</font></p>
+
+<p><font face="MS Sans Serif">Try changing the program to add 6
+to the value of a. If the frame rate of your monitor is 60 frames
+per second, and a is incrementing by 6 each frame, in theory it
+should increment by 360 every second which is equivalent to a
+complete rotation in the world of degrees.</font></p>
+
+<hr>
+
+<h4><a name="mysecondgame"><font color="#A7E3F5"
+face="MS Sans Serif">My Second Game</font></a></h4>
+
+<p><font face="MS Sans Serif">The following introduces the basic
+skeleton of a simple video game. </font></p>
+
+<p><font face="MS Sans Serif">The status variable contains the
+&quot;state&quot; of the game, which is either displaying a title
+page or allowing the player to steer round the screen. Extra
+states such as player dies with cosmic explosion and gameover
+screen would be added to extend the game further.</font></p>
+
+<p><font face="MS Sans Serif">Reading through the program, the
+display is initialized in a similar manned to the previous
+example using the Graphics and SetBuffer commands. The main loop,
+then uses the Flip command to perform the double buffering (allowing
+us to draw to one screen while the other is displayed) and then
+either prints a message informing the user to press Enter to
+start or calls the UpdatePlayer() function.</font></p>
+<div align="center"><center>
+
+<table border="2" cellpadding="8" width="600" bgcolor="#006060">
+    <tr>
+        <td><font color="#00FFFF" size="2" face="blitz">; eat the
+        dots</font><p><font color="#FFE75F" size="2" face="blitz">Graphics
+        </font><font color="#C8F0FF" size="2" face="blitz">640</font><font
+        color="#FFF0C8" size="2" face="blitz">,</font><font
+        color="#C8F0FF" size="2" face="blitz">480</font></p>
+        <p><font color="#FFE75F" size="2" face="blitz">SetBuffer
+        BackBuffer</font><font color="#FFF0C8" size="2"
+        face="blitz">()</font></p>
+        <p><font color="#FFE75F" size="2" face="blitz">Global</font><font
+        color="#FFFFFF" size="2" face="blitz"> status</font><font
+        color="#FFF0C8" size="2" face="blitz">=</font><font
+        color="#C8F0FF" size="2" face="blitz">0</font><font
+        color="#FFF0C8" size="2" face="blitz">,</font><font
+        color="#FFFFFF" size="2" face="blitz">x</font><font
+        color="#FFF0C8" size="2" face="blitz">#=</font><font
+        color="#C8F0FF" size="2" face="blitz">0</font><font
+        color="#FFF0C8" size="2" face="blitz">,</font><font
+        color="#FFFFFF" size="2" face="blitz">y</font><font
+        color="#FFF0C8" size="2" face="blitz">#=</font><font
+        color="#C8F0FF" size="2" face="blitz">0</font><font
+        color="#FFF0C8" size="2" face="blitz">,</font><font
+        color="#FFFFFF" size="2" face="blitz">speed</font><font
+        color="#FFF0C8" size="2" face="blitz">#=</font><font
+        color="#C8F0FF" size="2" face="blitz">1</font><font
+        color="#FFF0C8" size="2" face="blitz">,</font><font
+        color="#FFFFFF" size="2" face="blitz">dir</font><font
+        color="#FFF0C8" size="2" face="blitz">=</font><font
+        color="#C8F0FF" size="2" face="blitz">1</font></p>
+        <p><font color="#00FFFF" size="2" face="blitz">; main
+        loop</font></p>
+        <p><font color="#FFE75F" size="2" face="blitz">While Not</font><font
+        color="#FFFFFF" size="2" face="blitz"> </font><font
+        color="#FFE75F" size="2" face="blitz">KeyHit</font><font
+        color="#FFF0C8" size="2" face="blitz">(</font><font
+        color="#C8F0FF" size="2" face="blitz">1</font><font
+        color="#FFF0C8" size="2" face="blitz">)</font></p>
+        <p><font color="#00FFFF" size="2" face="blitz">; refresh
+        screen</font></p>
+        <blockquote>
+            <p><font color="#FFE75F" size="2" face="blitz">Flip</font></p>
+            <p><font color="#FFE75F" size="2" face="blitz">Cls</font></p>
+            <p><font color="#FFE75F" size="2" face="blitz">Color </font><font
+            color="#C8F0FF" size="2" face="blitz">255</font><font
+            color="#FFF0C8" size="2" face="blitz">,</font><font
+            color="#C8F0FF" size="2" face="blitz">255</font><font
+            color="#FFF0C8" size="2" face="blitz">,</font><font
+            color="#C8F0FF" size="2" face="blitz">0</font></p>
+            <p><font color="#FFE75F" size="2" face="blitz">Rect </font><font
+            color="#C8F0FF" size="2" face="blitz">0</font><font
+            color="#FFF0C8" size="2" face="blitz">,</font><font
+            color="#C8F0FF" size="2" face="blitz">0</font><font
+            color="#FFF0C8" size="2" face="blitz">,</font><font
+            color="#C8F0FF" size="2" face="blitz">640</font><font
+            color="#FFF0C8" size="2" face="blitz">,</font><font
+            color="#C8F0FF" size="2" face="blitz">480</font><font
+            color="#FFF0C8" size="2" face="blitz">,</font><font
+            color="#C8F0FF" size="2" face="blitz">0</font></p>
+            <p><font color="#00FFFF" size="2" face="blitz">;
+            select state</font></p>
+        </blockquote>
+        <blockquote>
+            <p><font color="#FFE75F" size="2" face="blitz">Select
+            </font><font color="#FFFFFF" size="2" face="blitz">status</font></p>
+            <p><font color="#FFE75F" size="2" face="blitz">Case </font><font
+            color="#C8F0FF" size="2" face="blitz">0</font></p>
+            <blockquote>
+                <p><font color="#FFE75F" size="2" face="blitz">Locate
+                </font><font color="#C8F0FF" size="2"
+                face="blitz">100</font><font color="#FFF0C8"
+                size="2" face="blitz">,</font><font
+                color="#C8F0FF" size="2" face="blitz">100</font></p>
+                <p><font color="#FFE75F" size="2" face="blitz">Print
+                </font><font color="#00FF00" size="2"
+                face="blitz">&quot;Press Enter To Start&quot;</font></p>
+                <p><font color="#FFE75F" size="2" face="blitz">If
+                KeyHit</font><font color="#FFF0C8" size="2"
+                face="blitz">(28)</font><font color="#C8F0FF"
+                size="2" face="blitz"> </font><font
+                color="#FFFFFF" size="2" face="blitz">InitGame</font><font
+                color="#FFF0C8" size="2" face="blitz">() </font></p>
+            </blockquote>
+            <p><font color="#FFE75F" size="2" face="blitz">Case </font><font
+            color="#C8F0FF" size="2" face="blitz">1</font></p>
+            <blockquote>
+                <p><font color="#FFFFFF" size="2" face="blitz">UpdatePlayer</font><font
+                color="#FFF0C8" size="2" face="blitz">()</font></p>
+            </blockquote>
+            <p><font color="#FFE75F" size="2" face="blitz">End
+            Select</font></p>
+        </blockquote>
+        <p><font color="#FFE75F" size="2" face="blitz">Wend</font></p>
+        </td>
+    </tr>
+</table>
+</center></div>
+
+<p><font face="MS Sans Serif">What UpdatePlayer() function you
+ask? And if the user presses Enter what's this InitGame()
+function?</font></p>
+
+<p><font face="MS Sans Serif">Unlike traditional BASIC languages
+where we would implement these functions as subroutines and call
+them with the Gosub command BlitzBasic features user defined
+functions. </font></p>
+
+<p><font face="MS Sans Serif">Add the following two functions at
+the bottom of the above program to allow the program to run.</font></p>
+
+<p><font face="MS Sans Serif">The first function initializes the
+variables we will need inorder to steer the players rectangle
+around the screen. Note how these variables have been declared at
+the top of the program as Global which allows us to access them
+from inside functions such as InitGame().</font></p>
+<div align="center"><center>
+
+<table border="2" cellpadding="8" width="600" bgcolor="#006060">
+    <tr>
+        <td><font color="#FFE75F" size="2" face="blitz">Function</font><font
+        color="#FFFFFF" size="2" face="blitz"> InitGame</font><font
+        color="#FFF0C8" size="2" face="blitz">()</font><blockquote>
+            <p><font color="#FFFFFF" size="2" face="blitz">x</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#C8F0FF" size="2" face="blitz">320</font></p>
+            <p><font color="#FFFFFF" size="2" face="blitz">y</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#C8F0FF" size="2" face="blitz">240</font></p>
+            <p><font color="#FFFFFF" size="2" face="blitz">speed</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#C8F0FF" size="2" face="blitz">1</font></p>
+            <p><font color="#FFFFFF" size="2" face="blitz">dir</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#C8F0FF" size="2" face="blitz">1</font></p>
+            <p><font color="#FFFFFF" size="2" face="blitz">status</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#C8F0FF" size="2" face="blitz">1</font></p>
+        </blockquote>
+        <p><font color="#FFE75F" size="2" face="blitz">End
+        Function</font><font color="#FFF0C8" size="2"
+        face="blitz"> </font></p>
+        </td>
+    </tr>
+</table>
+</center></div>
+
+<p><font face="MS Sans Serif">This second function changes the
+players direction depending on the arrow key they are pressing or
+the direction of the joystick. The code then moves the players
+position (x,y) depending on the dir variable which corresponds to
+up, right, down and left respectively.</font></p>
+<div align="center"><center>
+
+<table border="2" cellpadding="8" width="600" bgcolor="#006060">
+    <tr>
+        <td><font color="#FFE75F" size="2" face="blitz">Function </font><font
+        color="#FFFFFF" size="2" face="blitz">UpdatePlayer</font><font
+        color="#FFF0C8" size="2" face="blitz">()</font><blockquote>
+            <p><font color="#00FFFF" size="2" face="blitz">;
+            steer player </font></p>
+            <p><font color="#FFE75F" size="2" face="blitz">If
+            KeyDown</font><font color="#FFF0C8" size="2"
+            face="blitz">(</font><font color="#C8F0FF" size="2"
+            face="blitz">200</font><font color="#FFF0C8" size="2"
+            face="blitz">) </font><font color="#FFE75F" size="2"
+            face="blitz">Or JoyY</font><font color="#FFF0C8"
+            size="2" face="blitz">()&lt;-</font><font
+            color="#C8F0FF" size="2" face="blitz">0</font><font
+            color="#FFF0C8" size="2" face="blitz">.</font><font
+            color="#C8F0FF" size="2" face="blitz">5 </font><font
+            color="#FFFFFF" size="2" face="blitz">dir</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#C8F0FF" size="2" face="blitz">0</font></p>
+            <p><font color="#FFE75F" size="2" face="blitz">If
+            KeyDown</font><font color="#FFF0C8" size="2"
+            face="blitz">(</font><font color="#C8F0FF" size="2"
+            face="blitz">205</font><font color="#FFF0C8" size="2"
+            face="blitz">) </font><font color="#FFE75F" size="2"
+            face="blitz">Or JoyX</font><font color="#FFF0C8"
+            size="2" face="blitz">()&gt;</font><font
+            color="#C8F0FF" size="2" face="blitz">0</font><font
+            color="#FFF0C8" size="2" face="blitz">.</font><font
+            color="#C8F0FF" size="2" face="blitz">5 </font><font
+            color="#FFFFFF" size="2" face="blitz">dir</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#C8F0FF" size="2" face="blitz">1</font></p>
+            <p><font color="#FFE75F" size="2" face="blitz">If
+            KeyDown</font><font color="#FFF0C8" size="2"
+            face="blitz">(</font><font color="#C8F0FF" size="2"
+            face="blitz">208</font><font color="#FFF0C8" size="2"
+            face="blitz">) </font><font color="#FFE75F" size="2"
+            face="blitz">Or JoyY</font><font color="#FFF0C8"
+            size="2" face="blitz">()&gt;</font><font
+            color="#C8F0FF" size="2" face="blitz">0</font><font
+            color="#FFF0C8" size="2" face="blitz">.</font><font
+            color="#C8F0FF" size="2" face="blitz">5 </font><font
+            color="#FFFFFF" size="2" face="blitz">dir</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#C8F0FF" size="2" face="blitz">2</font></p>
+            <p><font color="#FFE75F" size="2" face="blitz">If
+            KeyDown</font><font color="#FFF0C8" size="2"
+            face="blitz">(</font><font color="#C8F0FF" size="2"
+            face="blitz">203</font><font color="#FFF0C8" size="2"
+            face="blitz">) </font><font color="#FFE75F" size="2"
+            face="blitz">Or JoyX</font><font color="#FFF0C8"
+            size="2" face="blitz">()&lt;-</font><font
+            color="#C8F0FF" size="2" face="blitz">0</font><font
+            color="#FFF0C8" size="2" face="blitz">.</font><font
+            color="#C8F0FF" size="2" face="blitz">5 </font><font
+            color="#FFFFFF" size="2" face="blitz">dir</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#C8F0FF" size="2" face="blitz">3</font></p>
+            <p><font color="#00FFFF" size="2" face="blitz">; move
+            player</font></p>
+            <p><font color="#FFE75F" size="2" face="blitz">Select
+            </font><font color="#FFFFFF" size="2" face="blitz">dir</font></p>
+            <blockquote>
+                <p><font color="#FFE75F" size="2" face="blitz">Case
+                </font><font color="#C8F0FF" size="2"
+                face="blitz">0 </font><font color="#FFFFFF"
+                size="2" face="blitz">y</font><font
+                color="#FFF0C8" size="2" face="blitz">=</font><font
+                color="#FFFFFF" size="2" face="blitz">y</font><font
+                color="#FFF0C8" size="2" face="blitz">-</font><font
+                color="#FFFFFF" size="2" face="blitz">speed</font></p>
+                <p><font color="#FFE75F" size="2" face="blitz">Case
+                </font><font color="#C8F0FF" size="2"
+                face="blitz">1 </font><font color="#FFFFFF"
+                size="2" face="blitz">x</font><font
+                color="#FFF0C8" size="2" face="blitz">=</font><font
+                color="#FFFFFF" size="2" face="blitz">x</font><font
+                color="#FFF0C8" size="2" face="blitz">+</font><font
+                color="#FFFFFF" size="2" face="blitz">speed</font></p>
+                <p><font color="#FFE75F" size="2" face="blitz">Case
+                </font><font color="#C8F0FF" size="2"
+                face="blitz">2 </font><font color="#FFFFFF"
+                size="2" face="blitz">y</font><font
+                color="#FFF0C8" size="2" face="blitz">=</font><font
+                color="#FFFFFF" size="2" face="blitz">y</font><font
+                color="#FFF0C8" size="2" face="blitz">+</font><font
+                color="#FFFFFF" size="2" face="blitz">speed</font></p>
+                <p><font color="#FFE75F" size="2" face="blitz">Case
+                </font><font color="#C8F0FF" size="2"
+                face="blitz">3 </font><font color="#FFFFFF"
+                size="2" face="blitz">x</font><font
+                color="#FFF0C8" size="2" face="blitz">=</font><font
+                color="#FFFFFF" size="2" face="blitz">x</font><font
+                color="#FFF0C8" size="2" face="blitz">-</font><font
+                color="#FFFFFF" size="2" face="blitz">speed</font></p>
+            </blockquote>
+            <p><font color="#FFE75F" size="2" face="blitz">End
+            Select</font></p>
+            <p><font color="#00FFFF" size="2" face="blitz">; draw
+            player </font></p>
+            <p><font color="#FFE75F" size="2" face="blitz">Color </font><font
+            color="#C8F0FF" size="2" face="blitz">255</font><font
+            color="#FFF0C8" size="2" face="blitz">,</font><font
+            color="#C8F0FF" size="2" face="blitz">255</font><font
+            color="#FFF0C8" size="2" face="blitz">,</font><font
+            color="#C8F0FF" size="2" face="blitz">255</font></p>
+            <p><font color="#FFE75F" size="2" face="blitz">Rect </font><font
+            color="#FFFFFF" size="2" face="blitz">x</font><font
+            color="#FFF0C8" size="2" face="blitz">,</font><font
+            color="#FFFFFF" size="2" face="blitz">y</font><font
+            color="#FFF0C8" size="2" face="blitz">,</font><font
+            color="#C8F0FF" size="2" face="blitz">10</font><font
+            color="#FFF0C8" size="2" face="blitz">,</font><font
+            color="#C8F0FF" size="2" face="blitz">10</font></p>
+        </blockquote>
+        <p><font color="#FFE75F" size="2" face="blitz">End
+        Function</font></p>
+        </td>
+    </tr>
+</table>
+</center></div>
+
+<p><font face="MS Sans Serif">After adding the InitGame() and
+UpdatePlayer() code the game should run.</font></p>
+
+<p><font face="MS Sans Serif">Next it's time to add some deadly
+rocks and some yummy food. </font></p>
+
+<p><font face="MS Sans Serif">In order to do this we create some
+new Types that will hold all the information we need for each
+rock and food. To begin with these Types will simply hold the x
+and y position of each rock and food element we create for our
+game.</font></p>
+
+<p><font face="MS Sans Serif">Place the following Type
+declarations at the top of the program.</font></p>
+<div align="center"><center>
+
+<table border="2" cellpadding="8" width="600" bgcolor="#006060">
+    <tr>
+        <td><font color="#FFE75F" size="2" face="blitz">Type </font><font
+        color="#FFFFFF" size="2" face="blitz">food</font><blockquote>
+            <p><font color="#FFE75F" size="2" face="blitz">Field </font><font
+            color="#FFFFFF" size="2" face="blitz">x</font><font
+            color="#FFF0C8" size="2" face="blitz">,</font><font
+            color="#FFFFFF" size="2" face="blitz">y</font></p>
+        </blockquote>
+        <p><font color="#FFE75F" size="2" face="blitz">End Type</font></p>
+        <p><font color="#FFE75F" size="2" face="blitz">Type </font><font
+        color="#FFFFFF" size="2" face="blitz">rock</font></p>
+        <blockquote>
+            <p><font color="#FFE75F" size="2" face="blitz">Field </font><font
+            color="#FFFFFF" size="2" face="blitz">x</font><font
+            color="#FFF0C8" size="2" face="blitz">,</font><font
+            color="#FFFFFF" size="2" face="blitz">y</font></p>
+        </blockquote>
+        <p><font color="#FFE75F" size="2" face="blitz">End Type</font></p>
+        </td>
+    </tr>
+</table>
+</center></div>
+
+<p><font face="MS Sans Serif">The following code then needs to be
+added to the InitGame() function, insert it after the line that
+reads status=1.</font></p>
+
+<p><font face="MS Sans Serif">This code creates 20 rocks that
+will kill the player and 20 food that will speed the player up.
+The New command creates a new object and also adds it to a list.
+We set the position of each rock and food by setting the x and y
+fields of each new object created using the backslash \ character
+to denote which field.</font></p>
+<div align="center"><center>
+
+<table border="2" cellpadding="8" width="600" bgcolor="#006060">
+    <tr>
+        <td><font color="#FFE75F" size="2" face="blitz">For </font><font
+        color="#FFFFFF" size="2" face="blitz">i</font><font
+        color="#FFF0C8" size="2" face="blitz">=</font><font
+        color="#C8F0FF" size="2" face="blitz">0 </font><font
+        color="#FFE75F" size="2" face="blitz">To </font><font
+        color="#C8F0FF" size="2" face="blitz">20 </font><blockquote>
+            <p><font color="#FFFFFF" size="2" face="blitz">r</font><font
+            color="#FFF0C8" size="2" face="blitz">.</font><font
+            color="#FFFFFF" size="2" face="blitz">rock</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#FFE75F" size="2" face="blitz">New </font><font
+            color="#FFFFFF" size="2" face="blitz">rock</font></p>
+            <p><font color="#FFFFFF" size="2" face="blitz">r</font><font
+            color="#FFF0C8" size="2" face="blitz">\</font><font
+            color="#FFFFFF" size="2" face="blitz">x</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#FFE75F" size="2" face="blitz">Rnd</font><font
+            color="#FFF0C8" size="2" face="blitz">(</font><font
+            color="#C8F0FF" size="2" face="blitz">640</font><font
+            color="#FFF0C8" size="2" face="blitz">)</font></p>
+            <p><font color="#FFFFFF" size="2" face="blitz">r</font><font
+            color="#FFF0C8" size="2" face="blitz">\</font><font
+            color="#FFFFFF" size="2" face="blitz">y</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#FFE75F" size="2" face="blitz">Rnd</font><font
+            color="#FFF0C8" size="2" face="blitz">(</font><font
+            color="#C8F0FF" size="2" face="blitz">480</font><font
+            color="#FFF0C8" size="2" face="blitz">)</font></p>
+        </blockquote>
+        <p><font color="#FFE75F" size="2" face="blitz">Next</font></p>
+        <p><font color="#FFE75F" size="2" face="blitz">For </font><font
+        color="#FFFFFF" size="2" face="blitz">i</font><font
+        color="#FFF0C8" size="2" face="blitz">=</font><font
+        color="#C8F0FF" size="2" face="blitz">0 </font><font
+        color="#FFE75F" size="2" face="blitz">To </font><font
+        color="#C8F0FF" size="2" face="blitz">20 </font></p>
+        <blockquote>
+            <p><font color="#FFFFFF" size="2" face="blitz">f</font><font
+            color="#FFF0C8" size="2" face="blitz">.</font><font
+            color="#FFFFFF" size="2" face="blitz">food</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#FFE75F" size="2" face="blitz">New </font><font
+            color="#FFFFFF" size="2" face="blitz">food</font></p>
+            <p><font color="#FFFFFF" size="2" face="blitz">f</font><font
+            color="#FFF0C8" size="2" face="blitz">\</font><font
+            color="#FFFFFF" size="2" face="blitz">x</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#FFE75F" size="2" face="blitz">Rnd</font><font
+            color="#FFF0C8" size="2" face="blitz">(</font><font
+            color="#C8F0FF" size="2" face="blitz">640</font><font
+            color="#FFF0C8" size="2" face="blitz">)</font></p>
+            <p><font color="#FFFFFF" size="2" face="blitz">f</font><font
+            color="#FFF0C8" size="2" face="blitz">\</font><font
+            color="#FFFFFF" size="2" face="blitz">y</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#FFE75F" size="2" face="blitz">Rnd</font><font
+            color="#FFF0C8" size="2" face="blitz">(</font><font
+            color="#C8F0FF" size="2" face="blitz">480</font><font
+            color="#FFF0C8" size="2" face="blitz">)</font></p>
+        </blockquote>
+        <p><font color="#FFE75F" size="2" face="blitz">Next</font></p>
+        </td>
+    </tr>
+</table>
+</center></div>
+
+<p><font face="MS Sans Serif">We now need a function that draws
+all the food and rocks each frame and checks if the player has
+collided with any.</font></p>
+
+<p><font face="MS Sans Serif">Note how we can loop through each
+food and rock element that exist using the For..Each command pair.
+This is another great feature of BlitzBasic that keeps programs
+simple and easy to read.</font></p>
+
+<p><font face="MS Sans Serif">We use the RectsOverlap command to
+check of the players position (x,y) collides with each food or
+rock element (f \ x , f \ y) or (r \ x , r \ y). If the player
+collides with some food we delete that piece of food and increase
+the player's speed. If the player collides with a rock we end the
+game by resetting the status variable.</font></p>
+<div align="center"><center>
+
+<table border="2" cellpadding="8" width="600" bgcolor="#006060">
+    <tr>
+        <td><font color="#FFE75F" size="2" face="blitz">Function </font><font
+        color="#FFFFFF" size="2" face="blitz">UpdateRocksandFood</font><font
+        color="#FFF0C8" size="2" face="blitz">()</font><blockquote>
+            <p><font color="#00FFFF" size="2" face="blitz">; draw
+            food and check if eaten</font></p>
+            <p><font color="#FFE75F" size="2" face="blitz">Color </font><font
+            color="#C8F0FF" size="2" face="blitz">0</font><font
+            color="#FFF0C8" size="2" face="blitz">,</font><font
+            color="#C8F0FF" size="2" face="blitz">255</font><font
+            color="#FFF0C8" size="2" face="blitz">,</font><font
+            color="#C8F0FF" size="2" face="blitz">0</font></p>
+            <p><font color="#FFE75F" size="2" face="blitz">For </font><font
+            color="#FFFFFF" size="2" face="blitz">f</font><font
+            color="#FFF0C8" size="2" face="blitz">.</font><font
+            color="#FFFFFF" size="2" face="blitz">food</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#FFE75F" size="2" face="blitz">Each </font><font
+            color="#FFFFFF" size="2" face="blitz">food </font></p>
+            <blockquote>
+                <p><font color="#FFE75F" size="2" face="blitz">Rect
+                </font><font color="#FFFFFF" size="2"
+                face="blitz">f</font><font color="#FFF0C8"
+                size="2" face="blitz">\</font><font
+                color="#FFFFFF" size="2" face="blitz">x</font><font
+                color="#FFF0C8" size="2" face="blitz">,</font><font
+                color="#FFFFFF" size="2" face="blitz">f</font><font
+                color="#FFF0C8" size="2" face="blitz">\</font><font
+                color="#FFFFFF" size="2" face="blitz">y</font><font
+                color="#FFF0C8" size="2" face="blitz">,</font><font
+                color="#C8F0FF" size="2" face="blitz">10</font><font
+                color="#FFF0C8" size="2" face="blitz">,</font><font
+                color="#C8F0FF" size="2" face="blitz">10</font></p>
+                <p><font color="#FFE75F" size="2" face="blitz">If
+                RectsOverlap</font><font color="#FFF0C8" size="2"
+                face="blitz">(</font><font color="#FFFFFF"
+                size="2" face="blitz">x</font><font
+                color="#FFF0C8" size="2" face="blitz">,</font><font
+                color="#FFFFFF" size="2" face="blitz">y</font><font
+                color="#FFF0C8" size="2" face="blitz">,</font><font
+                color="#C8F0FF" size="2" face="blitz">10</font><font
+                color="#FFF0C8" size="2" face="blitz">,</font><font
+                color="#C8F0FF" size="2" face="blitz">10</font><font
+                color="#FFF0C8" size="2" face="blitz">,</font><font
+                color="#FFFFFF" size="2" face="blitz">f</font><font
+                color="#FFF0C8" size="2" face="blitz">\</font><font
+                color="#FFFFFF" size="2" face="blitz">x</font><font
+                color="#FFF0C8" size="2" face="blitz">,</font><font
+                color="#FFFFFF" size="2" face="blitz">f</font><font
+                color="#FFF0C8" size="2" face="blitz">\</font><font
+                color="#FFFFFF" size="2" face="blitz">y</font><font
+                color="#FFF0C8" size="2" face="blitz">,</font><font
+                color="#C8F0FF" size="2" face="blitz">10</font><font
+                color="#FFF0C8" size="2" face="blitz">,</font><font
+                color="#C8F0FF" size="2" face="blitz">10</font><font
+                color="#FFF0C8" size="2" face="blitz">)</font></p>
+                <blockquote>
+                    <p><font color="#FFFFFF" size="2"
+                    face="blitz">speed</font><font
+                    color="#FFF0C8" size="2" face="blitz">=</font><font
+                    color="#FFFFFF" size="2" face="blitz">speed</font><font
+                    color="#FFF0C8" size="2" face="blitz">+</font><font
+                    color="#C8F0FF" size="2" face="blitz">0</font><font
+                    color="#FFF0C8" size="2" face="blitz">.</font><font
+                    color="#C8F0FF" size="2" face="blitz">2</font></p>
+                    <p><font color="#FFE75F" size="2"
+                    face="blitz">Delete </font><font
+                    color="#FFFFFF" size="2" face="blitz">f</font></p>
+                </blockquote>
+                <p><font color="#FFE75F" size="2" face="blitz">EndIf
+                </font></p>
+            </blockquote>
+            <p><font color="#FFE75F" size="2" face="blitz">Next</font></p>
+            <p><font color="#00FFFF" size="2" face="blitz">; draw
+            rocks and check for roadkill</font></p>
+            <p><font color="#FFE75F" size="2" face="blitz">Color </font><font
+            color="#C8F0FF" size="2" face="blitz">255</font><font
+            color="#FFF0C8" size="2" face="blitz">,</font><font
+            color="#C8F0FF" size="2" face="blitz">0</font><font
+            color="#FFF0C8" size="2" face="blitz">,</font><font
+            color="#C8F0FF" size="2" face="blitz">255</font></p>
+            <p><font color="#FFE75F" size="2" face="blitz">For </font><font
+            color="#FFFFFF" size="2" face="blitz">r</font><font
+            color="#FFF0C8" size="2" face="blitz">.</font><font
+            color="#FFFFFF" size="2" face="blitz">rock</font><font
+            color="#FFF0C8" size="2" face="blitz">=</font><font
+            color="#FFE75F" size="2" face="blitz">Each </font><font
+            color="#FFFFFF" size="2" face="blitz">rock </font></p>
+            <blockquote>
+                <p><font color="#FFE75F" size="2" face="blitz">Rect
+                </font><font color="#FFFFFF" size="2"
+                face="blitz">r</font><font color="#FFF0C8"
+                size="2" face="blitz">\</font><font
+                color="#FFFFFF" size="2" face="blitz">x</font><font
+                color="#FFF0C8" size="2" face="blitz">,</font><font
+                color="#FFFFFF" size="2" face="blitz">r</font><font
+                color="#FFF0C8" size="2" face="blitz">\</font><font
+                color="#FFFFFF" size="2" face="blitz">y</font><font
+                color="#FFF0C8" size="2" face="blitz">,</font><font
+                color="#C8F0FF" size="2" face="blitz">10</font><font
+                color="#FFF0C8" size="2" face="blitz">,</font><font
+                color="#C8F0FF" size="2" face="blitz">10</font></p>
+                <p><font color="#FFE75F" size="2" face="blitz">If
+                RectsOverlap</font><font color="#FFF0C8" size="2"
+                face="blitz">(</font><font color="#FFFFFF"
+                size="2" face="blitz">x</font><font
+                color="#FFF0C8" size="2" face="blitz">,</font><font
+                color="#FFFFFF" size="2" face="blitz">y</font><font
+                color="#FFF0C8" size="2" face="blitz">,</font><font
+                color="#C8F0FF" size="2" face="blitz">10</font><font
+                color="#FFF0C8" size="2" face="blitz">,</font><font
+                color="#C8F0FF" size="2" face="blitz">10</font><font
+                color="#FFF0C8" size="2" face="blitz">,</font><font
+                color="#FFFFFF" size="2" face="blitz">r</font><font
+                color="#FFF0C8" size="2" face="blitz">\</font><font
+                color="#FFFFFF" size="2" face="blitz">x</font><font
+                color="#FFF0C8" size="2" face="blitz">,</font><font
+                color="#FFFFFF" size="2" face="blitz">r</font><font
+                color="#FFF0C8" size="2" face="blitz">\</font><font
+                color="#FFFFFF" size="2" face="blitz">y</font><font
+                color="#FFF0C8" size="2" face="blitz">,</font><font
+                color="#C8F0FF" size="2" face="blitz">10</font><font
+                color="#FFF0C8" size="2" face="blitz">,</font><font
+                color="#C8F0FF" size="2" face="blitz">10</font><font
+                color="#FFF0C8" size="2" face="blitz">)</font></p>
+                <blockquote>
+                    <p><font color="#FFFFFF" size="2"
+                    face="blitz">status</font><font
+                    color="#FFF0C8" size="2" face="blitz">=</font><font
+                    color="#C8F0FF" size="2" face="blitz">0</font></p>
+                </blockquote>
+            </blockquote>
+            <blockquote>
+                <p><font color="#FFE75F" size="2" face="blitz">EndIf</font></p>
+            </blockquote>
+            <p><font color="#FFE75F" size="2" face="blitz">Next</font></p>
+        </blockquote>
+        <p><font color="#FFE75F" size="2" face="blitz">End
+        Function</font></p>
+        </td>
+    </tr>
+</table>
+</center></div>
+
+<p><font face="MS Sans Serif">Oops, one last thing, don't forget
+to call the UpdateRocksandFood() function from the main loop,
+just after the UpdatePlayer() call should do nicely.</font></p>
+<div align="center"><center>
+
+<table border="2" cellpadding="8" width="600" bgcolor="#006060">
+    <tr>
+        <td><font color="#FFFFFF" size="2" face="blitz">UpdateRocksandFood</font><font
+        color="#FFF0C8" size="2" face="blitz">()</font></td>
+    </tr>
+</table>
+</center></div>
+
+<p><font face="MS Sans Serif">OK, after playing the game, a few
+things should become evident.</font></p>
+
+<p><font face="MS Sans Serif">First, the player should die if
+they hit the outer wall. We could do this by checking if their
+position does not collide with the main screen rectangle (0,0,640,480).
+Try adding the following code to the UpdatePlayer function.</font></p>
+<div align="center"><center>
+
+<table border="2" cellpadding="8" width="600" bgcolor="#006060">
+    <tr>
+        <td><font color="#FFE75F" size="2" face="blitz">If Not
+        RectsOverlap</font><font color="#FFF0C8" size="2"
+        face="blitz">(</font><font color="#FFFFFF" size="2"
+        face="blitz">x</font><font color="#FFF0C8" size="2"
+        face="blitz">,</font><font color="#FFFFFF" size="2"
+        face="blitz">y</font><font color="#FFF0C8" size="2"
+        face="blitz">,</font><font color="#C8F0FF" size="2"
+        face="blitz">10</font><font color="#FFF0C8" size="2"
+        face="blitz">,</font><font color="#C8F0FF" size="2"
+        face="blitz">10</font><font color="#FFF0C8" size="2"
+        face="blitz">,</font><font color="#C8F0FF" size="2"
+        face="blitz">0</font><font color="#FFF0C8" size="2"
+        face="blitz">,</font><font color="#C8F0FF" size="2"
+        face="blitz">0</font><font color="#FFF0C8" size="2"
+        face="blitz">,</font><font color="#C8F0FF" size="2"
+        face="blitz">630</font><font color="#FFF0C8" size="2"
+        face="blitz">,</font><font color="#C8F0FF" size="2"
+        face="blitz">470</font><font color="#FFF0C8" size="2"
+        face="blitz">) </font><font color="#FFFFFF" size="2"
+        face="blitz">status</font><font color="#FFF0C8" size="2"
+        face="blitz">=</font><font color="#C8F0FF" size="2"
+        face="blitz">0</font></td>
+    </tr>
+</table>
+</center></div>
+
+<p><font face="MS Sans Serif">Secondly, each time the game starts
+more rocks and food appear. This is because we never delete the
+food and rocks remaining from the last game. Insert the following
+code <strong>before</strong> the code that creates the new food
+and rocks in the InitGame() function.</font></p>
+<div align="center"><center>
+
+<table border="2" cellpadding="8" width="600" bgcolor="#006060">
+    <tr>
+        <td><font color="#FFE75F" size="2" face="blitz">For </font><font
+        color="#FFFFFF" size="2" face="blitz">f</font><font
+        color="#FFF0C8" size="2" face="blitz">.</font><font
+        color="#FFFFFF" size="2" face="blitz">food</font><font
+        color="#FFF0C8" size="2" face="blitz">=</font><font
+        color="#FFE75F" size="2" face="blitz">Each </font><font
+        color="#FFFFFF" size="2" face="blitz">food </font><font
+        color="#FFE75F" size="2" face="blitz">Delete </font><font
+        color="#FFFFFF" size="2" face="blitz">f </font><font
+        color="#FFE75F" size="2" face="blitz">Next</font><p><font
+        color="#FFE75F" size="2" face="blitz">For </font><font
+        color="#FFFFFF" size="2" face="blitz">r</font><font
+        color="#FFF0C8" size="2" face="blitz">.</font><font
+        color="#FFFFFF" size="2" face="blitz">rock</font><font
+        color="#FFF0C8" size="2" face="blitz">=</font><font
+        color="#FFE75F" size="2" face="blitz">Each </font><font
+        color="#FFFFFF" size="2" face="blitz">rock </font><font
+        color="#FFE75F" size="2" face="blitz">Delete </font><font
+        color="#FFFFFF" size="2" face="blitz">r </font><font
+        color="#FFE75F" size="2" face="blitz">Next</font></p>
+        </td>
+    </tr>
+</table>
+</center></div>
+</BODY>
+</HTML>

+ 5 - 0
_release/tutorials/basic_tuts/goto.bb

@@ -0,0 +1,5 @@
+Print "Emily & Ellis were here today"
+Goto goat
+
+.goat
+Print "So was George and his furry animals"

+ 3 - 0
_release/tutorials/basic_tuts/goto1.bb

@@ -0,0 +1,3 @@
+.sheep Print "George"
+Goto sheep
+

+ 0 - 0
_release/tutorials/basic_tuts/hello.bb


BIN
_release/tutorials/basic_tuts/hello.gif


BIN
_release/tutorials/basic_tuts/hellooutput.gif


+ 10 - 0
_release/tutorials/basic_tuts/if then.bb

@@ -0,0 +1,10 @@
+.start 
+number = Input ("How old are you ")
+If number < 18 Then Print "You are under 18": Goto Leave
+If number > 18 Then Print "You are over 18":Goto Leave
+If number = 18 Then Print "you are 18":Goto Leave
+.Leave
+Print "Press ESC to Exit"
+Repeat
+	VWait
+Until KeyHit(1)

+ 11 - 0
_release/tutorials/basic_tuts/if then1.bb

@@ -0,0 +1,11 @@
+.start 
+question$ = Input ("Shall I tell you the meaning of life yes/no? ")
+If question$ = "no" Then Print "Alright, Then I won't":Goto Leave
+If question$ = "yes" Then Print "42":Goto Leave
+If question$ <> "yes" Or "no" Then Goto start
+End
+.Leave
+Print "Press ESC to Exit"
+Repeat
+	VWait
+Until KeyHit(1)

+ 14 - 0
_release/tutorials/basic_tuts/index.html

@@ -0,0 +1,14 @@
+<HTML>
+<HEAD>
+<TITLE>Baa Baa Blitz Basic - A Beginners Guide -</TITLE>
+</HEAD>
+<FRAMESET  ROWS = "12%,88% "  >
+	<frame name="topbar" FRAME SRC="topbar.html">
+	<frame name="main" FRAME SRC="main.html">
+</FRAMESET>
+<NOFRAMES>
+<BODY>
+<P>
+</BODY>
+</NOFRAMES>
+</HTML>

+ 14 - 0
_release/tutorials/basic_tuts/input.bb

@@ -0,0 +1,14 @@
+number = Input ("Type a number: ")
+number1 = Input ("Type another number: ")
+Total= number+number1
+Print "Your two numbers are " Print number:Print number1
+Print "If you add your two numbers together they equal: " Print Total
+
+
+
+
+
+
+
+
+

+ 4 - 0
_release/tutorials/basic_tuts/input1.bb

@@ -0,0 +1,4 @@
+l$ = Input ("Enter your name:  ") 
+Print "Your name is: " : Print l$
+Print "Hello ": Print l$
+

+ 41 - 0
_release/tutorials/basic_tuts/main.html

@@ -0,0 +1,41 @@
+<html>
+<head>
+<meta name="description"
+content="Online Instructions for Blitz Basic PC">
+<meta name="keywords"
+content="blitz basic, back bedroom programming, games programming, games development, games creation">
+<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
+<title>Blitz Basic PC</title>
+</head>
+
+<body background="space.gif" bgcolor="#1f5e5e" text="#ffff00"
+link="#FFFF00" vlink="#00ff00" bgproperties="fixed">
+
+<center><img src="blitzlogo.gif"></center>
+<center><h2>Introduction</h2></center>
+<p align="left"><font size="2" face="verdana">Welcome to Blitz Basic -
+probably the most powerful BASIC language in the Universe. You are in safe hands as Blitz was written by gamers for gamers who have an impressive track record in this field.
+Within the Blitz environment you have
+the power of your PC at your fingertips making video game creation fun and easy - The only limit is your imagination and creative energy.  
+<br><br>Blitz Basic is a hybrid of BASIC that some of you may have
+used before on computers such as BBC, Spectrum & Commodore 64
+and the original Amiga Blitz Basic but it requires no previous programming knowledge and this manual has been written assuming that you
+no computer programming experience as it will guide you
+through the various stages - starting from the very beginning in the guise of the notorious 'Hello World'. Blitz Basic is very easy
+to use and represents state of the art graphics and sound - with its easy to
+use library of commands you'll be creating your own games in no time at all. The aim here is to make the whole process painless - so sit back and enjoy....<br><br> 
+Please bear in mind at all times that programming is a gradual learning
+curve and once certain goals are achieved you will be programming games for fun and hopefully for profit in no time.
+Who knows - You could be sending your game to a software house for evaluation as the games you create can be saved as a stand alone executable file (EXE) we'd love to see your
+games, so send them to Guildhall for evaluation and if they are commercially viable then
+we could be publishing your game....So what are you waiting for? Get coding...
+<center><br><br> <b>Remember:</b> the
+more effort you put into Blitz Basic the bigger the rewards will be.
+<br><br>
+George.</center>
+
+<br>
+</font>
+
+</body>
+</html>

+ 4 - 0
_release/tutorials/basic_tuts/maths.bb

@@ -0,0 +1,4 @@
+a = 25.5 * 25.5
+b = 300.50 + 245.50
+c = 99.1 - 99.1
+Print a: Print b : Print c

+ 2 - 0
_release/tutorials/basic_tuts/print.bb

@@ -0,0 +1,2 @@
+Print"Hello sheep"
+Print "Hello cup of tea"

+ 26 - 0
_release/tutorials/basic_tuts/random numbers.bb

@@ -0,0 +1,26 @@
+; Very simple random number game by George Bray
+; [email protected]
+; http://users.breathemail.net/georgebray
+
+Print "Escape from the furry animals of Ancipital"
+SeedRnd(MilliSecs()) 
+f=Rnd(20) 
+For g=1 To 5
+ guess = Input ("Guess the frequency of the menagerie? (0 - 20) ")
+If guess=f Then Goto goat
+If guess<f Then Gosub cow
+If guess>f Then Gosub head
+
+.g Next
+Print"*******BooooooooooooooM******* The menagerie exploded. The correct frequency was: ": Print f
+MouseWait
+End
+.cow Print "Frequency too low - Careful":Return 
+.goat Print "WELL DONE DUDE - YOU ESCAPED FROM THE FURRY ANIMALS OF ANCIPITAL"
+MouseWait
+End
+.head Print"Frequency too high - try again":Return
+MouseWait
+End
+
+

BIN
_release/tutorials/basic_tuts/rocket.gif


+ 8 - 0
_release/tutorials/basic_tuts/simple maths.bb

@@ -0,0 +1,8 @@
+A = 2 + 2
+B = 2 * 2
+C = 2 - 2
+D = 2 / 2
+
+Print A: Print B: Print C: Print D
+
+

+ 4 - 0
_release/tutorials/basic_tuts/step.bb

@@ -0,0 +1,4 @@
+
+For a = 0 To 10 Step 2
+Print a
+Next

BIN
_release/tutorials/basic_tuts/toolbar1.bmp


+ 22 - 0
_release/tutorials/basic_tuts/topbar.html

@@ -0,0 +1,22 @@
+<html>
+<head>
+<meta name="description" content="Blitz Basic Index">
+<title>Blitz Basic PC Index</title>
+<style type="text/css">
+<!--
+     A:link {text-decoration: none;}
+     A:visited {text-decoration: none;}
+-->
+</style>
+</head>
+<BODY BGCOLOR="#1f5e5e" TEXT="#FFFF00" LINK="#ffff00" VLINK="#ffff00">
+<font size="2" face="verdana">
+<center>
+<a href="main.html" target="main">Introduction</a> | 
+<a href="basic.html" target="main">Blitz Tutorial</a> | 
+<a href="gettingstarted.html" target="main">Getting Started</a> | 
+<a href="examples.html" target ="main">Example Code</a> | 
+<a href="game.html" target="main">Written a Game?</a> | 
+</center>
+</body>
+</html>

+ 92 - 0
_release/tutorials/basic_tuts/types1.bb

@@ -0,0 +1,92 @@
+
+; Types example 1
+
+; Creating objects we want to be able to refer to individually (eg. players).
+
+; ----------------------------------------------------------------------------
+
+; We'll create a "playerdata" type:
+
+Type playerdata
+
+	Field x		; player's x position
+	Field y		; player's y position
+
+	Field r     ; red value
+	Field g     ; green value
+	Field b     ; blue value
+
+End Type
+
+; ----------------------------------------------------------------------------
+
+; Now we'll create two players, both of "playerdata" type:
+
+player1.playerdata = New playerdata
+player2.playerdata = New playerdata
+
+; The computer now creates two "playerdata" objects in memory, and we have a
+; reference to each one, called player1 and player2.
+
+; ----------------------------------------------------------------------------
+
+; Unrelated set-up stuff:
+
+Graphics 640, 480		; Screen dimensions
+SeedRnd (MilliSecs ())	; Make Rnd () more random!
+
+; ----------------------------------------------------------------------------
+
+; Set some positions and colours:
+
+; Player 1
+; --------
+
+; Position:
+
+player1\x = Rnd (GraphicsWidth () - 50)
+player1\y = Rnd (GraphicsHeight () - 50)
+
+; Colour:
+
+player1\r = 255
+player1\g = 0
+player1\b = 0
+
+; Player 2
+; --------
+
+; Position:
+
+player2\x = Rnd (GraphicsWidth () - 50)
+player2\y = Rnd (GraphicsHeight () - 50)
+
+; Colour:
+
+player2\r = 0
+player2\g = 0
+player2\b = 255
+
+; ----------------------------------------------------------------------------
+
+; Now we'll draw and label the players...
+
+; Player 1:
+
+Color player1\r, player1\g, player1\b
+Oval player1\x, player1\y, 50, 50, 1
+Color 255, 255, 255
+Text player1\x, player1\y, "Player 1"
+
+; Player 2:
+
+Color player2\r, player2\g, player2\b
+Oval player2\x, player2\y, 50, 50, 1
+Color 255, 255, 255
+Text player2\x, player2\y, "Player 2"
+
+; ----------------------------------------------------------------------------
+
+; Click mouse to quit:
+Print "Click mouse to end"
+MouseWait:End

+ 78 - 0
_release/tutorials/basic_tuts/types2.bb

@@ -0,0 +1,78 @@
+
+; Types example 2
+
+; Creating objects we don't need to be able to refer to individually (eg. aliens).
+
+; ----------------------------------------------------------------------------
+
+; We'll create an "invader" type:
+
+Type invader
+
+	Field x			; alien's x position
+	Field y			; alien's y position
+	Field fallrate	; alien's fall rate
+
+End Type
+
+; ----------------------------------------------------------------------------
+
+; Unrelated set-up thing:
+
+SeedRnd (MilliSecs ())		; Makes result of Rnd () more random!
+
+; ----------------------------------------------------------------------------
+
+; Set up 4 invaders across the screen, with a y-position of 0:
+
+Const invadernumber = 4		; Change this to any number (eg. 100) -- part of the
+							; power of types!
+
+For a = 1 To invadernumber
+
+	alien.invader	= New invader
+	alien\x			= a * 6
+	alien\y			= 0
+	alien\fallrate	= Rnd (6) + 1
+
+Next
+
+; The line "alien.invader	= New invader" tells the computer to add a new invader
+; to its hidden list. Each of the 4 invaders is called "alien", so we can't refer
+; to them individually, but we can act upon them all at once, with a For...Each...Next
+; loop!
+
+; ----------------------------------------------------------------------------
+
+; Unrelated set-up stuff:
+
+Graphics 640, 480			; Open graphics display
+SetBuffer BackBuffer ()		; Set up double-buffering
+
+Text 20, 20, "Alien Racers Ready...":Flip:Delay 2500
+
+; ----------------------------------------------------------------------------
+
+Repeat
+
+	Cls												; Clear the screen (unrelated)
+
+	For moveall.invader = Each invader				; Read each invader into "moveall", in turn
+
+		moveall\y	= moveall\y + moveall\fallrate	; Increase each invader's y position
+		Oval moveall\x, moveall\y, 4, 4, 1			; Draw each invader
+		If moveall\y > 480 Then atbottom = 1		; If any are at bottom of screen, end!
+
+	Next
+
+	Text 20, 20, "Go, Alien Racers!"
+
+	Flip											; Show draw result (unrelated)
+
+	Delay 10										; Slow things down a bit
+
+Until MouseDown (1) = 1 Or atbottom = 1				; Click mouse or someone at bottom of screen
+
+; ----------------------------------------------------------------------------
+
+End

+ 4 - 0
_release/tutorials/basic_tuts/variables.bb

@@ -0,0 +1,4 @@
+AppTitle "Examples of Variables"
+Const width=640,height=480
+A = 2 + 2
+Print A

+ 3 - 0
_release/tutorials/basic_tuts/variables1.bb

@@ -0,0 +1,3 @@
+A = 1111
+B$ = "Vic 20"
+Print A :Print B$

+ 3 - 0
_release/tutorials/basic_tuts/variables2.bb

@@ -0,0 +1,3 @@
+A = 1111
+B$ = "Vic 20"
+Print A :Print B$

+ 11 - 0
_release/tutorials/basic_tuts/variables3.bb

@@ -0,0 +1,11 @@
+A$ = "Welcome to "
+B$ = "the world "
+C$ = "of programming."
+D$ = A$ + B$ + C$
+Print D$
+
+
+
+
+
+