From 4e8d25d630a1c7326b430da17cc2c10896d625bd Mon Sep 17 00:00:00 2001 From: blitz-research Date: Wed, 26 Feb 2014 16:08:39 +1300 Subject: [PATCH] Added _release/help --- _release/help/b3dlogo.jpg | Bin 0 -> 4902 bytes _release/help/commands/2d_commands/ACos.htm | 38 + _release/help/commands/2d_commands/ASin.htm | 38 + _release/help/commands/2d_commands/ATan.htm | 27 + _release/help/commands/2d_commands/ATan2.htm | 29 + _release/help/commands/2d_commands/Abs.htm | 7 + .../commands/2d_commands/AcceptTCPStream.htm | 57 + _release/help/commands/2d_commands/After.htm | 43 + _release/help/commands/2d_commands/And.htm | 12 + .../help/commands/2d_commands/AppTitle.htm | 5 + _release/help/commands/2d_commands/Asc.htm | 4 + .../commands/2d_commands/AutoMidHandle .htm | 55 + .../help/commands/2d_commands/AvailVidMem.htm | 2 + .../help/commands/2d_commands/BackBuffer.htm | 21 + .../help/commands/2d_commands/BankSize.htm | 20 + _release/help/commands/2d_commands/Before.htm | 43 + _release/help/commands/2d_commands/Bin.htm | 3 + .../help/commands/2d_commands/CPUTimer.htm | 7 + _release/help/commands/2d_commands/Case.htm | 27 + _release/help/commands/2d_commands/Ceil.htm | 12 + .../help/commands/2d_commands/ChangeDir.htm | 6 + .../help/commands/2d_commands/ChannelPan.htm | 43 + .../commands/2d_commands/ChannelPitch.htm | 43 + .../commands/2d_commands/ChannelPlaying.htm | 16 + .../commands/2d_commands/ChannelVolume.htm | 43 + _release/help/commands/2d_commands/Chr.htm | 2 + .../help/commands/2d_commands/CloseDir.htm | 32 + .../help/commands/2d_commands/CloseFile.htm | 51 + .../commands/2d_commands/CloseTCPServer.htm | 55 + .../commands/2d_commands/CloseTCPStream.htm | 27 + _release/help/commands/2d_commands/Cls.htm | 2 + .../help/commands/2d_commands/ClsColor.htm | 2 + _release/help/commands/2d_commands/Color.htm | 19 + .../help/commands/2d_commands/ColorBlue.htm | 17 + .../help/commands/2d_commands/ColorGreen.htm | 17 + .../help/commands/2d_commands/ColorRed.htm | 17 + .../help/commands/2d_commands/CommandLine.htm | 20 + _release/help/commands/2d_commands/Const.htm | 13 + .../help/commands/2d_commands/CopyBank.htm | 24 + .../help/commands/2d_commands/CopyFile.htm | 11 + .../help/commands/2d_commands/CopyImage.htm | 11 + .../help/commands/2d_commands/CopyPixel.htm | 40 + .../commands/2d_commands/CopyPixelFast.htm | 40 + .../help/commands/2d_commands/CopyRect.htm | 33 + .../help/commands/2d_commands/CopyStream.htm | 42 + _release/help/commands/2d_commands/Cos.htm | 26 + .../commands/2d_commands/CountGFXModes.htm | 14 + .../commands/2d_commands/CountGfxDrivers.htm | 22 + .../help/commands/2d_commands/CreateBank.htm | 22 + .../help/commands/2d_commands/CreateDir.htm | 7 + .../help/commands/2d_commands/CreateImage.htm | 43 + .../commands/2d_commands/CreateNetPlayer.htm | 30 + .../commands/2d_commands/CreateTCPServer.htm | 57 + .../help/commands/2d_commands/CreateTimer.htm | 2 + .../help/commands/2d_commands/CurrentDate.htm | 5 + .../help/commands/2d_commands/CurrentDir.htm | 7 + .../help/commands/2d_commands/CurrentTime.htm | 5 + _release/help/commands/2d_commands/Data.htm | 28 + .../help/commands/2d_commands/DebugLog.htm | 18 + .../help/commands/2d_commands/Default.htm | 27 + _release/help/commands/2d_commands/Delay.htm | 5 + _release/help/commands/2d_commands/Delete.htm | 15 + .../help/commands/2d_commands/DeleteDir.htm | 5 + .../help/commands/2d_commands/DeleteFile.htm | 4 + .../commands/2d_commands/DeleteNetPlayer.htm | 34 + _release/help/commands/2d_commands/Dim.htm | 27 + .../help/commands/2d_commands/DrawBlock.htm | 31 + .../commands/2d_commands/DrawBlockRect.htm | 38 + .../help/commands/2d_commands/DrawImage.htm | 35 + .../commands/2d_commands/DrawImageRect.htm | 34 + _release/help/commands/2d_commands/EOF.htm | 19 + _release/help/commands/2d_commands/Each.htm | 9 + .../help/commands/2d_commands/Else If.htm | 20 + _release/help/commands/2d_commands/Else.htm | 11 + _release/help/commands/2d_commands/ElseIf.htm | 2 + .../commands/2d_commands/End Function.htm | 16 + _release/help/commands/2d_commands/End If.htm | 18 + .../help/commands/2d_commands/End Select.htm | 27 + .../help/commands/2d_commands/End Type.htm | 12 + _release/help/commands/2d_commands/End.htm | 5 + .../help/commands/2d_commands/EndGraphics.htm | 22 + _release/help/commands/2d_commands/EndIF.htm | 18 + .../help/commands/2d_commands/ExecFile.htm | 20 + _release/help/commands/2d_commands/Exit.htm | 7 + _release/help/commands/2d_commands/Exp.htm | 6 + _release/help/commands/2d_commands/False.htm | 21 + _release/help/commands/2d_commands/Field.htm | 28 + .../help/commands/2d_commands/FilePos.htm | 69 + .../help/commands/2d_commands/FileSize.htm | 10 + .../help/commands/2d_commands/FileType.htm | 18 + .../help/commands/2d_commands/FindGfxMode.htm | 18 + _release/help/commands/2d_commands/First.htm | 43 + _release/help/commands/2d_commands/Flip.htm | 21 + _release/help/commands/2d_commands/Float.htm | 10 + _release/help/commands/2d_commands/Floor.htm | 12 + .../help/commands/2d_commands/FlushJoy.htm | 10 + .../help/commands/2d_commands/FlushKeys.htm | 4 + .../help/commands/2d_commands/FlushMouse.htm | 10 + .../help/commands/2d_commands/FontHeight.htm | 23 + .../help/commands/2d_commands/FontWidth.htm | 23 + _release/help/commands/2d_commands/For.htm | 14 + .../help/commands/2d_commands/Forever.htm | 10 + .../help/commands/2d_commands/FreeBank.htm | 20 + .../help/commands/2d_commands/FreeFont.htm | 45 + .../help/commands/2d_commands/FreeImage.htm | 23 + .../help/commands/2d_commands/FreeSound.htm | 9 + .../help/commands/2d_commands/FreeTimer.htm | 15 + .../help/commands/2d_commands/FrontBuffer.htm | 23 + .../help/commands/2d_commands/Function.htm | 47 + .../commands/2d_commands/GFXModeDepth.htm | 16 + .../commands/2d_commands/GFXModeHeight.htm | 16 + .../commands/2d_commands/GFXModeWidth.htm | 16 + .../help/commands/2d_commands/GetColor.htm | 19 + _release/help/commands/2d_commands/GetJoy.htm | 10 + _release/help/commands/2d_commands/GetKey.htm | 12 + .../help/commands/2d_commands/GetMouse.htm | 10 + .../commands/2d_commands/GfxDriverName.htm | 22 + .../commands/2d_commands/GfxModeExists.htm | 17 + _release/help/commands/2d_commands/Global.htm | 2 + _release/help/commands/2d_commands/Gosub.htm | 16 + _release/help/commands/2d_commands/Goto.htm | 13 + .../help/commands/2d_commands/GrabImage.htm | 47 + .../help/commands/2d_commands/Graphics.htm | 31 + .../commands/2d_commands/GraphicsBuffer.htm | 16 + .../commands/2d_commands/GraphicsDepth.htm | 16 + .../commands/2d_commands/GraphicsHeight.htm | 16 + .../commands/2d_commands/GraphicsWidth.htm | 16 + .../help/commands/2d_commands/HandleImage.htm | 19 + _release/help/commands/2d_commands/Hex.htm | 3 + .../help/commands/2d_commands/HidePointer.htm | 47 + .../help/commands/2d_commands/HostNetGame.htm | 12 + _release/help/commands/2d_commands/If.htm | 18 + .../help/commands/2d_commands/ImageBuffer.htm | 42 + .../help/commands/2d_commands/ImageHeight.htm | 20 + .../commands/2d_commands/ImageRectCollide.htm | 64 + .../commands/2d_commands/ImageRectOverlap.htm | 63 + .../help/commands/2d_commands/ImageWidth.htm | 20 + .../commands/2d_commands/ImageXHandle.htm | 51 + .../commands/2d_commands/ImageYHandle.htm | 51 + .../commands/2d_commands/ImagesCollide.htm | 67 + .../commands/2d_commands/ImagesOverlap.htm | 67 + .../help/commands/2d_commands/Include.htm | 17 + _release/help/commands/2d_commands/Input.htm | 6 + _release/help/commands/2d_commands/Insert.htm | 29 + _release/help/commands/2d_commands/Instr.htm | 7 + _release/help/commands/2d_commands/Int.htm | 5 + .../help/commands/2d_commands/JoinNetGame.htm | 21 + .../help/commands/2d_commands/JoyDown.htm | 13 + _release/help/commands/2d_commands/JoyHit.htm | 15 + .../help/commands/2d_commands/JoyType.htm | 16 + .../help/commands/2d_commands/JoyWait.htm | 18 + _release/help/commands/2d_commands/JoyX.htm | 7 + .../help/commands/2d_commands/JoyXDir.htm | 9 + _release/help/commands/2d_commands/JoyY.htm | 7 + .../help/commands/2d_commands/JoyYDir.htm | 9 + _release/help/commands/2d_commands/JoyZ.htm | 9 + .../help/commands/2d_commands/JoyZDir.htm | 9 + .../help/commands/2d_commands/KeyDown.htm | 12 + _release/help/commands/2d_commands/KeyHit.htm | 14 + _release/help/commands/2d_commands/LSet.htm | 4 + _release/help/commands/2d_commands/Last.htm | 43 + _release/help/commands/2d_commands/Left.htm | 4 + _release/help/commands/2d_commands/Len.htm | 3 + _release/help/commands/2d_commands/Line.htm | 14 + .../commands/2d_commands/LoadAnimImage.htm | 50 + .../help/commands/2d_commands/LoadBuffer.htm | 16 + .../help/commands/2d_commands/LoadFont.htm | 48 + .../help/commands/2d_commands/LoadImage.htm | 30 + .../help/commands/2d_commands/LoadSound.htm | 13 + _release/help/commands/2d_commands/Local.htm | 18 + _release/help/commands/2d_commands/Locate.htm | 12 + .../help/commands/2d_commands/LockBuffer.htm | 37 + _release/help/commands/2d_commands/Log.htm | 8 + _release/help/commands/2d_commands/Log10.htm | 7 + .../help/commands/2d_commands/LoopSound.htm | 17 + _release/help/commands/2d_commands/Lower.htm | 5 + .../help/commands/2d_commands/MaskImage.htm | 39 + _release/help/commands/2d_commands/Mid.htm | 10 + .../help/commands/2d_commands/MidHandle .htm | 54 + .../help/commands/2d_commands/Millisecs.htm | 2 + _release/help/commands/2d_commands/Mod.htm | 6 + .../help/commands/2d_commands/MouseDown.htm | 13 + .../help/commands/2d_commands/MouseHit.htm | 14 + .../help/commands/2d_commands/MouseWait.htm | 9 + _release/help/commands/2d_commands/MouseX.htm | 36 + .../help/commands/2d_commands/MouseXSpeed.htm | 31 + _release/help/commands/2d_commands/MouseY.htm | 36 + .../help/commands/2d_commands/MouseYSpeed.htm | 31 + _release/help/commands/2d_commands/MouseZ.htm | 46 + .../help/commands/2d_commands/MouseZSpeed.htm | 60 + .../help/commands/2d_commands/MoveMouse.htm | 15 + .../help/commands/2d_commands/NetMsgData.htm | 48 + .../commands/2d_commands/NetMsgFrom().htm | 47 + .../help/commands/2d_commands/NetMsgTo().htm | 48 + .../commands/2d_commands/NetMsgType().htm | 49 + .../commands/2d_commands/NetPlayerLocal.htm | 51 + .../commands/2d_commands/NetPlayerName.htm | 48 + _release/help/commands/2d_commands/New.htm | 22 + _release/help/commands/2d_commands/Next.htm | 2 + .../help/commands/2d_commands/NextFile.htm | 31 + _release/help/commands/2d_commands/Not.htm | 8 + _release/help/commands/2d_commands/Null.htm | 8 + .../help/commands/2d_commands/OpenFile.htm | 49 + .../commands/2d_commands/OpenTCPStream.htm | 32 + _release/help/commands/2d_commands/Or.htm | 10 + _release/help/commands/2d_commands/Origin.htm | 14 + _release/help/commands/2d_commands/Oval.htm | 15 + .../commands/2d_commands/PauseChannel.htm | 42 + .../help/commands/2d_commands/PeekByte.htm | 22 + .../help/commands/2d_commands/PeekFloat.htm | 22 + .../help/commands/2d_commands/PeekInt.htm | 22 + .../help/commands/2d_commands/PeekShort.htm | 22 + _release/help/commands/2d_commands/Pi.htm | 5 + .../help/commands/2d_commands/PlayCDTrack.htm | 26 + .../help/commands/2d_commands/PlayMusic.htm | 10 + .../help/commands/2d_commands/PlaySound.htm | 14 + _release/help/commands/2d_commands/Plot.htm | 7 + .../help/commands/2d_commands/PokeByte.htm | 22 + .../help/commands/2d_commands/PokeFloat.htm | 22 + .../help/commands/2d_commands/PokeInt.htm | 22 + .../help/commands/2d_commands/PokeShort.htm | 22 + _release/help/commands/2d_commands/Print.htm | 6 + _release/help/commands/2d_commands/RSet.htm | 4 + _release/help/commands/2d_commands/Rand.htm | 13 + _release/help/commands/2d_commands/Read.htm | 33 + .../help/commands/2d_commands/ReadAvail.htm | 28 + .../help/commands/2d_commands/ReadByte.htm | 64 + .../help/commands/2d_commands/ReadBytes.htm | 50 + .../help/commands/2d_commands/ReadDir.htm | 31 + .../help/commands/2d_commands/ReadFile.htm | 53 + .../help/commands/2d_commands/ReadFloat.htm | 46 + .../help/commands/2d_commands/ReadInt.htm | 45 + .../help/commands/2d_commands/ReadLine.htm | 50 + .../help/commands/2d_commands/ReadPixel.htm | 52 + .../commands/2d_commands/ReadPixelFast.htm | 54 + .../help/commands/2d_commands/ReadShort.htm | 45 + .../help/commands/2d_commands/ReadString.htm | 50 + _release/help/commands/2d_commands/Rect.htm | 25 + .../commands/2d_commands/RectsOverlap.htm | 61 + .../help/commands/2d_commands/RecvNetMsg.htm | 45 + _release/help/commands/2d_commands/Repeat.htm | 7 + .../help/commands/2d_commands/Replace.htm | 7 + .../help/commands/2d_commands/ResizeBank.htm | 21 + .../help/commands/2d_commands/ResizeImage.htm | 24 + .../help/commands/2d_commands/Restore.htm | 29 + .../commands/2d_commands/ResumeChannel.htm | 56 + _release/help/commands/2d_commands/Return.htm | 25 + _release/help/commands/2d_commands/Right.htm | 6 + _release/help/commands/2d_commands/Rnd.htm | 4 + .../help/commands/2d_commands/RotateImage.htm | 41 + .../commands/2d_commands/RuntimeError.htm | 5 + _release/help/commands/2d_commands/Sar.htm | 25 + .../help/commands/2d_commands/SaveBuffer.htm | 9 + .../help/commands/2d_commands/SaveImage.htm | 24 + .../help/commands/2d_commands/ScaleImage.htm | 25 + .../help/commands/2d_commands/ScanCodes.htm | 729 +++ .../help/commands/2d_commands/ScanLine.htm | 7 + .../help/commands/2d_commands/SeedRnd.htm | 2 + .../help/commands/2d_commands/SeekFile.htm | 68 + _release/help/commands/2d_commands/Select.htm | 30 + .../help/commands/2d_commands/SendNetMsg.htm | 94 + .../help/commands/2d_commands/SetBuffer.htm | 2 + .../help/commands/2d_commands/SetFont.htm | 46 + .../commands/2d_commands/SetGfxDriver.htm | 22 + _release/help/commands/2d_commands/Sgn.htm | 7 + _release/help/commands/2d_commands/Shl.htm | 23 + .../help/commands/2d_commands/ShowPointer.htm | 47 + _release/help/commands/2d_commands/Shr.htm | 23 + _release/help/commands/2d_commands/Sin.htm | 26 + .../help/commands/2d_commands/SoundPan.htm | 11 + .../help/commands/2d_commands/SoundPitch.htm | 18 + .../help/commands/2d_commands/SoundVolume.htm | 13 + _release/help/commands/2d_commands/Sqr.htm | 7 + .../commands/2d_commands/StartNetGame.htm | 14 + _release/help/commands/2d_commands/Step.htm | 2 + _release/help/commands/2d_commands/Stop.htm | 4 + .../help/commands/2d_commands/StopChannel.htm | 44 + .../help/commands/2d_commands/StopNetGame.htm | 15 + _release/help/commands/2d_commands/Str.htm | 9 + _release/help/commands/2d_commands/String.htm | 6 + .../commands/2d_commands/StringHeight.htm | 8 + .../help/commands/2d_commands/StringWidth.htm | 8 + .../commands/2d_commands/SystemProperty.htm | 49 + .../help/commands/2d_commands/TCPTimeOuts.htm | 68 + .../help/commands/2d_commands/TFormFilter.htm | 33 + _release/help/commands/2d_commands/Tan.htm | 11 + _release/help/commands/2d_commands/Text.htm | 17 + _release/help/commands/2d_commands/Then.htm | 18 + .../help/commands/2d_commands/TileBlock.htm | 16 + .../help/commands/2d_commands/TileImage.htm | 44 + _release/help/commands/2d_commands/To.htm | 2 + .../help/commands/2d_commands/TotalVidMem.htm | 39 + _release/help/commands/2d_commands/Trim.htm | 5 + _release/help/commands/2d_commands/True.htm | 19 + _release/help/commands/2d_commands/Type.htm | 83 + .../commands/2d_commands/UnlockBuffer.htm | 36 + _release/help/commands/2d_commands/Until.htm | 7 + _release/help/commands/2d_commands/Upper.htm | 4 + _release/help/commands/2d_commands/VWait.htm | 14 + .../help/commands/2d_commands/Viewport.htm | 26 + .../help/commands/2d_commands/WaitJoy.htm | 18 + .../help/commands/2d_commands/WaitKey.htm | 16 + .../help/commands/2d_commands/WaitMouse.htm | 16 + .../help/commands/2d_commands/WaitTimer.htm | 12 + _release/help/commands/2d_commands/Wend.htm | 7 + _release/help/commands/2d_commands/While.htm | 7 + _release/help/commands/2d_commands/Write.htm | 6 + .../help/commands/2d_commands/WriteByte.htm | 66 + .../help/commands/2d_commands/WriteBytes.htm | 49 + .../help/commands/2d_commands/WriteFile.htm | 54 + .../help/commands/2d_commands/WriteFloat.htm | 45 + .../help/commands/2d_commands/WriteInt.htm | 45 + .../help/commands/2d_commands/WriteLine.htm | 48 + .../help/commands/2d_commands/WritePixel.htm | 37 + .../commands/2d_commands/WritePixelFast.htm | 39 + .../help/commands/2d_commands/WriteShort.htm | 45 + .../help/commands/2d_commands/WriteString.htm | 50 + _release/help/commands/2d_commands/Xor.htm | 27 + .../help/commands/2d_commands/template.htm | 44 + .../help/commands/3d_commands/AddAnimSeq.htm | 40 + .../help/commands/3d_commands/AddTriangle.htm | 55 + .../help/commands/3d_commands/AddVertex.htm | 63 + .../commands/3d_commands/AlignToVector.htm | 45 + .../commands/3d_commands/AmbientLight.htm | 93 + .../help/commands/3d_commands/AnimLength.htm | 37 + .../help/commands/3d_commands/AnimSeq.htm | 37 + .../help/commands/3d_commands/AnimTime.htm | 37 + .../help/commands/3d_commands/Animate.htm | 57 + .../help/commands/3d_commands/AnimateMD2.htm | 84 + .../help/commands/3d_commands/Animating.htm | 37 + .../help/commands/3d_commands/AntiAlias.htm | 79 + .../help/commands/3d_commands/BrushAlpha.htm | 49 + .../help/commands/3d_commands/BrushBlend.htm | 41 + .../help/commands/3d_commands/BrushColor.htm | 87 + .../help/commands/3d_commands/BrushFX.htm | 45 + .../commands/3d_commands/BrushShininess.htm | 43 + .../commands/3d_commands/BrushTexture.htm | 91 + .../commands/3d_commands/CameraClsColor.htm | 40 + .../commands/3d_commands/CameraClsMode.htm | 39 + .../commands/3d_commands/CameraFogColor.htm | 85 + .../commands/3d_commands/CameraFogMode.htm | 88 + .../commands/3d_commands/CameraFogRange.htm | 90 + .../help/commands/3d_commands/CameraPick.htm | 43 + .../commands/3d_commands/CameraProject.htm | 41 + .../help/commands/3d_commands/CameraRange.htm | 40 + .../commands/3d_commands/CameraViewport.htm | 88 + .../help/commands/3d_commands/CameraZoom.htm | 38 + .../commands/3d_commands/CaptureWorld.htm | 41 + .../commands/3d_commands/ClearCollisions.htm | 104 + .../commands/3d_commands/ClearSurface.htm | 49 + .../3d_commands/ClearTextureFilters.htm | 37 + .../help/commands/3d_commands/ClearWorld.htm | 42 + .../commands/3d_commands/CollisionEntity.htm | 40 + .../help/commands/3d_commands/CollisionNX.htm | 42 + .../help/commands/3d_commands/CollisionNY.htm | 42 + .../help/commands/3d_commands/CollisionNZ.htm | 42 + .../commands/3d_commands/CollisionSurface.htm | 37 + .../commands/3d_commands/CollisionTime.htm | 37 + .../3d_commands/CollisionTriangle.htm | 37 + .../help/commands/3d_commands/CollisionX.htm | 42 + .../help/commands/3d_commands/CollisionY.htm | 42 + .../help/commands/3d_commands/CollisionZ.htm | 42 + .../help/commands/3d_commands/Collisions.htm | 191 + .../help/commands/3d_commands/CopyEntity.htm | 40 + .../commands/3d_commands/CountChildren.htm | 37 + .../commands/3d_commands/CountCollisions.htm | 38 + .../commands/3d_commands/CountSurfaces.htm | 39 + .../commands/3d_commands/CountTriangles.htm | 37 + .../commands/3d_commands/CountVertices.htm | 37 + .../help/commands/3d_commands/CreateBrush.htm | 101 + .../commands/3d_commands/CreateCamera.htm | 67 + .../help/commands/3d_commands/CreateCone.htm | 84 + .../help/commands/3d_commands/CreateCube.htm | 69 + .../commands/3d_commands/CreateCylinder.htm | 84 + .../help/commands/3d_commands/CreateLight.htm | 65 + .../commands/3d_commands/CreateListener.htm | 45 + .../help/commands/3d_commands/CreateMesh.htm | 37 + .../commands/3d_commands/CreateMirror.htm | 91 + .../help/commands/3d_commands/CreatePivot.htm | 47 + .../help/commands/3d_commands/CreatePlane.htm | 85 + .../commands/3d_commands/CreateSphere.htm | 81 + .../commands/3d_commands/CreateSprite.htm | 59 + .../commands/3d_commands/CreateSurface.htm | 45 + .../commands/3d_commands/CreateTerrain.htm | 90 + .../commands/3d_commands/CreateTexture.htm | 136 + _release/help/commands/3d_commands/Dither.htm | 79 + .../help/commands/3d_commands/EmitSound.htm | 39 + .../help/commands/3d_commands/EntityAlpha.htm | 50 + .../commands/3d_commands/EntityAnimTime.htm | 37 + .../commands/3d_commands/EntityAnimating.htm | 37 + .../commands/3d_commands/EntityAutoFade.htm | 43 + .../help/commands/3d_commands/EntityBlend.htm | 43 + .../help/commands/3d_commands/EntityBox.htm | 43 + .../commands/3d_commands/EntityCollided.htm | 39 + .../help/commands/3d_commands/EntityColor.htm | 87 + .../commands/3d_commands/EntityDistance.htm | 38 + .../help/commands/3d_commands/EntityFX.htm | 45 + .../commands/3d_commands/EntityInView.htm | 41 + .../help/commands/3d_commands/EntityName.htm | 38 + .../help/commands/3d_commands/EntityOrder.htm | 45 + .../commands/3d_commands/EntityParent.htm | 41 + .../help/commands/3d_commands/EntityPick.htm | 40 + .../commands/3d_commands/EntityPickMode.htm | 47 + .../help/commands/3d_commands/EntityPitch.htm | 79 + .../commands/3d_commands/EntityRadius.htm | 108 + .../help/commands/3d_commands/EntityRoll.htm | 79 + .../commands/3d_commands/EntityShininess.htm | 43 + .../commands/3d_commands/EntityTexture.htm | 85 + .../help/commands/3d_commands/EntityType.htm | 40 + .../commands/3d_commands/EntityVisible.htm | 38 + .../help/commands/3d_commands/EntityX.htm | 77 + .../help/commands/3d_commands/EntityY.htm | 77 + .../help/commands/3d_commands/EntityYaw.htm | 79 + .../help/commands/3d_commands/EntityZ.htm | 77 + .../help/commands/3d_commands/FindChild.htm | 39 + .../help/commands/3d_commands/FindSurface.htm | 41 + .../help/commands/3d_commands/FitMesh.htm | 46 + .../help/commands/3d_commands/FlipMesh.htm | 86 + .../help/commands/3d_commands/FreeBrush.htm | 37 + .../help/commands/3d_commands/FreeEntity.htm | 37 + .../help/commands/3d_commands/FreeTexture.htm | 85 + .../help/commands/3d_commands/GetChild.htm | 39 + .../commands/3d_commands/GetEntityType.htm | 37 + .../help/commands/3d_commands/GetParent.htm | 37 + .../help/commands/3d_commands/GetSurface.htm | 43 + .../help/commands/3d_commands/GfxDriver3D.htm | 48 + .../help/commands/3d_commands/GfxMode3D.htm | 48 + .../commands/3d_commands/GfxModeExists.htm | 46 + .../help/commands/3d_commands/Graphics3D.htm | 76 + .../help/commands/3d_commands/HWMultiTex.htm | 48 + .../commands/3d_commands/HandleSprite.htm | 39 + .../help/commands/3d_commands/HideEntity.htm | 46 + .../help/commands/3d_commands/LightColor.htm | 46 + .../commands/3d_commands/LightConeAngles.htm | 40 + .../help/commands/3d_commands/LightMesh.htm | 44 + .../help/commands/3d_commands/LightRange.htm | 42 + .../help/commands/3d_commands/LinePick.htm | 43 + .../help/commands/3d_commands/Load3DSound.htm | 37 + .../commands/3d_commands/LoadAnimMesh.htm | 40 + .../help/commands/3d_commands/LoadAnimSeq.htm | 39 + .../commands/3d_commands/LoadAnimTexture.htm | 53 + .../help/commands/3d_commands/LoadBrush.htm | 50 + .../help/commands/3d_commands/LoadMD2.htm | 77 + .../help/commands/3d_commands/LoadMesh.htm | 68 + .../help/commands/3d_commands/LoadSprite.htm | 51 + .../help/commands/3d_commands/LoadTerrain.htm | 109 + .../help/commands/3d_commands/LoadTexture.htm | 114 + .../commands/3d_commands/LoaderMatrix.htm | 54 + .../commands/3d_commands/MD2AnimLength.htm | 75 + .../help/commands/3d_commands/MD2AnimTime.htm | 81 + .../commands/3d_commands/MD2Animating.htm | 79 + .../help/commands/3d_commands/MeshDepth.htm | 38 + .../help/commands/3d_commands/MeshHeight.htm | 38 + .../help/commands/3d_commands/MeshWidth.htm | 38 + .../commands/3d_commands/MeshesIntersect.htm | 73 + .../commands/3d_commands/ModifyTerrain.htm | 43 + .../help/commands/3d_commands/MoveEntity.htm | 96 + .../help/commands/3d_commands/NameEntity.htm | 38 + .../help/commands/3d_commands/PaintEntity.htm | 41 + .../help/commands/3d_commands/PaintMesh.htm | 97 + .../commands/3d_commands/PaintSurface.htm | 43 + .../commands/3d_commands/PickedEntity.htm | 37 + .../help/commands/3d_commands/PickedNX.htm | 37 + .../help/commands/3d_commands/PickedNY.htm | 37 + .../help/commands/3d_commands/PickedNZ.htm | 37 + .../commands/3d_commands/PickedSurface.htm | 37 + .../help/commands/3d_commands/PickedTime.htm | 37 + .../commands/3d_commands/PickedTriangle.htm | 37 + .../help/commands/3d_commands/PickedX.htm | 42 + .../help/commands/3d_commands/PickedY.htm | 42 + .../help/commands/3d_commands/PickedZ.htm | 42 + .../help/commands/3d_commands/PointEntity.htm | 44 + .../commands/3d_commands/PositionEntity.htm | 96 + .../commands/3d_commands/PositionMesh.htm | 40 + .../commands/3d_commands/PositionTexture.htm | 90 + .../help/commands/3d_commands/ProjectedX.htm | 38 + .../help/commands/3d_commands/ProjectedY.htm | 38 + .../help/commands/3d_commands/ProjectedZ.htm | 38 + .../help/commands/3d_commands/RenderWorld.htm | 52 + .../help/commands/3d_commands/ResetEntity.htm | 37 + .../commands/3d_commands/RotateEntity.htm | 87 + .../help/commands/3d_commands/RotateMesh.htm | 40 + .../commands/3d_commands/RotateSprite.htm | 38 + .../commands/3d_commands/RotateTexture.htm | 85 + .../help/commands/3d_commands/ScaleEntity.htm | 90 + .../help/commands/3d_commands/ScaleMesh.htm | 40 + .../help/commands/3d_commands/ScaleSprite.htm | 39 + .../commands/3d_commands/ScaleTexture.htm | 88 + .../help/commands/3d_commands/SetAnimKey.htm | 45 + .../help/commands/3d_commands/ShowEntity.htm | 44 + .../commands/3d_commands/SpriteViewMode.htm | 42 + .../help/commands/3d_commands/TFormNormal.htm | 37 + .../help/commands/3d_commands/TFormPoint.htm | 97 + .../help/commands/3d_commands/TFormVector.htm | 93 + .../help/commands/3d_commands/TFormedX.htm | 51 + .../help/commands/3d_commands/TFormedY.htm | 51 + .../help/commands/3d_commands/TFormedZ.htm | 51 + .../commands/3d_commands/TerrainDetail.htm | 119 + .../commands/3d_commands/TerrainHeight.htm | 41 + .../commands/3d_commands/TerrainShading.htm | 106 + .../help/commands/3d_commands/TerrainSize.htm | 95 + .../help/commands/3d_commands/TerrainX.htm | 100 + .../help/commands/3d_commands/TerrainY.htm | 101 + .../help/commands/3d_commands/TerrainZ.htm | 99 + .../commands/3d_commands/TextureBlend.htm | 44 + .../commands/3d_commands/TextureBuffer.htm | 108 + .../commands/3d_commands/TextureCoords.htm | 41 + .../commands/3d_commands/TextureFilter.htm | 45 + .../commands/3d_commands/TextureHeight.htm | 37 + .../commands/3d_commands/TextureWidth.htm | 37 + .../commands/3d_commands/TranslateEntity.htm | 103 + .../commands/3d_commands/TriangleVertex.htm | 40 + .../help/commands/3d_commands/TurnEntity.htm | 91 + .../commands/3d_commands/UpdateNormals.htm | 38 + .../help/commands/3d_commands/UpdateWorld.htm | 44 + .../help/commands/3d_commands/VertexBlue.htm | 38 + .../help/commands/3d_commands/VertexColor.htm | 41 + .../commands/3d_commands/VertexCoords.htm | 45 + .../help/commands/3d_commands/VertexGreen.htm | 38 + .../help/commands/3d_commands/VertexNX.htm | 38 + .../help/commands/3d_commands/VertexNY.htm | 38 + .../help/commands/3d_commands/VertexNZ.htm | 38 + .../commands/3d_commands/VertexNormal.htm | 41 + .../help/commands/3d_commands/VertexRed.htm | 38 + .../commands/3d_commands/VertexTexCoords.htm | 42 + .../help/commands/3d_commands/VertexU.htm | 38 + .../help/commands/3d_commands/VertexV.htm | 38 + .../help/commands/3d_commands/VertexW.htm | 38 + .../help/commands/3d_commands/VertexX.htm | 38 + .../help/commands/3d_commands/VertexY.htm | 38 + .../help/commands/3d_commands/VertexZ.htm | 38 + .../help/commands/3d_commands/WBuffer.htm | 51 + .../help/commands/3d_commands/Windowed3D.htm | 48 + .../help/commands/3d_commands/Wireframe.htm | 76 + _release/help/commands/3d_commands/main.htm | 27 + .../help/commands/3d_commands/template.htm | 37 + .../help/commands/3d_examples/AddAnimSeq.bb | 20 + .../help/commands/3d_examples/AddTriangle.bb | 25 + .../help/commands/3d_examples/AddVertex.bb | 20 + .../commands/3d_examples/AlignToVector.bb | 20 + .../help/commands/3d_examples/AmbientLight.bb | 44 + .../help/commands/3d_examples/AnimLength.bb | 20 + _release/help/commands/3d_examples/AnimSeq.bb | 20 + .../help/commands/3d_examples/AnimTime.bb | 20 + _release/help/commands/3d_examples/Animate.bb | 20 + .../help/commands/3d_examples/AnimateMD2.bb | 33 + .../help/commands/3d_examples/Animating.bb | 20 + .../help/commands/3d_examples/AntiAlias.bb | 32 + .../help/commands/3d_examples/BrushAlpha.bb | 52 + .../help/commands/3d_examples/BrushBlend.bb | 20 + .../help/commands/3d_examples/BrushColor.bb | 44 + _release/help/commands/3d_examples/BrushFX.bb | 20 + .../commands/3d_examples/BrushShininess.bb | 20 + .../help/commands/3d_examples/BrushTexture.bb | 47 + .../commands/3d_examples/CameraClsColor.bb | 20 + .../commands/3d_examples/CameraClsMode.bb | 20 + .../commands/3d_examples/CameraFogColor.bb | 58 + .../commands/3d_examples/CameraFogMode.bb | 38 + .../commands/3d_examples/CameraFogRange.bb | 47 + .../help/commands/3d_examples/CameraPick.bb | 20 + .../commands/3d_examples/CameraProject.bb | 20 + .../help/commands/3d_examples/CameraRange.bb | 20 + .../commands/3d_examples/CameraViewport.bb | 42 + .../help/commands/3d_examples/CameraZoom.bb | 20 + .../help/commands/3d_examples/CaptureWorld.bb | 20 + .../commands/3d_examples/ClearCollisions.bb | 61 + .../help/commands/3d_examples/ClearSurface.bb | 20 + .../3d_examples/ClearTextureFilters.bb | 20 + .../help/commands/3d_examples/ClearWorld.bb | 20 + .../commands/3d_examples/CollisionEntity.bb | 20 + .../help/commands/3d_examples/CollisionNX.bb | 20 + .../help/commands/3d_examples/CollisionNY.bb | 20 + .../help/commands/3d_examples/CollisionNZ.bb | 20 + .../commands/3d_examples/CollisionSurface.bb | 20 + .../commands/3d_examples/CollisionTime.bb | 20 + .../commands/3d_examples/CollisionTriangle.bb | 20 + .../help/commands/3d_examples/CollisionX.bb | 20 + .../help/commands/3d_examples/CollisionY.bb | 20 + .../help/commands/3d_examples/CollisionZ.bb | 20 + .../help/commands/3d_examples/Collisions.bb | 118 + .../help/commands/3d_examples/CopyEntity.bb | 20 + .../commands/3d_examples/CountChildren.bb | 20 + .../commands/3d_examples/CountCollisions.bb | 20 + .../commands/3d_examples/CountSurfaces.bb | 30 + .../commands/3d_examples/CountTriangles.bb | 20 + .../commands/3d_examples/CountVertices.bb | 20 + .../help/commands/3d_examples/CreateBrush.bb | 50 + .../help/commands/3d_examples/CreateCamera.bb | 20 + .../help/commands/3d_examples/CreateCone.bb | 22 + .../help/commands/3d_examples/CreateCube.bb | 22 + .../commands/3d_examples/CreateCylinder.bb | 22 + .../help/commands/3d_examples/CreateLight.bb | 20 + .../commands/3d_examples/CreateListener.bb | 20 + .../help/commands/3d_examples/CreateMesh.bb | 20 + .../help/commands/3d_examples/CreateMirror.bb | 43 + .../help/commands/3d_examples/CreatePivot.bb | 20 + .../help/commands/3d_examples/CreatePlane.bb | 35 + .../help/commands/3d_examples/CreateSphere.bb | 22 + .../help/commands/3d_examples/CreateSprite.bb | 20 + .../commands/3d_examples/CreateSurface.bb | 40 + .../commands/3d_examples/CreateTerrain.bb | 35 + .../commands/3d_examples/CreateTexture.bb | 61 + _release/help/commands/3d_examples/Dither.bb | 33 + .../help/commands/3d_examples/EmitSound.bb | 20 + .../help/commands/3d_examples/EntityAlpha.bb | 20 + .../commands/3d_examples/EntityAnimTime.bb | 20 + .../commands/3d_examples/EntityAnimating.bb | 20 + .../commands/3d_examples/EntityAutoFade.bb | 20 + .../help/commands/3d_examples/EntityBlend.bb | 20 + .../help/commands/3d_examples/EntityBox.bb | 20 + .../commands/3d_examples/EntityCollided.bb | 20 + .../help/commands/3d_examples/EntityColor.bb | 46 + .../commands/3d_examples/EntityDistance.bb | 20 + .../help/commands/3d_examples/EntityFX.bb | 20 + .../help/commands/3d_examples/EntityInView.bb | 20 + .../help/commands/3d_examples/EntityName.bb | 20 + .../help/commands/3d_examples/EntityOrder.bb | 20 + .../help/commands/3d_examples/EntityParent.bb | 20 + .../help/commands/3d_examples/EntityPick.bb | 20 + .../commands/3d_examples/EntityPickMode.bb | 20 + .../help/commands/3d_examples/EntityPitch.bb | 39 + .../help/commands/3d_examples/EntityRadius.bb | 66 + .../help/commands/3d_examples/EntityRoll.bb | 39 + .../commands/3d_examples/EntityShininess.bb | 20 + .../commands/3d_examples/EntityTexture.bb | 41 + .../help/commands/3d_examples/EntityType.bb | 20 + .../commands/3d_examples/EntityVisible.bb | 20 + _release/help/commands/3d_examples/EntityX.bb | 39 + _release/help/commands/3d_examples/EntityY.bb | 39 + .../help/commands/3d_examples/EntityYaw.bb | 39 + _release/help/commands/3d_examples/EntityZ.bb | 39 + .../help/commands/3d_examples/FindChild.bb | 20 + .../help/commands/3d_examples/FindSurface.bb | 20 + _release/help/commands/3d_examples/FitMesh.bb | 20 + .../help/commands/3d_examples/FlipMesh.bb | 31 + .../help/commands/3d_examples/FreeBrush.bb | 46 + .../help/commands/3d_examples/FreeEntity.bb | 20 + .../help/commands/3d_examples/FreeTexture.bb | 46 + .../help/commands/3d_examples/GetChild.bb | 20 + .../commands/3d_examples/GetEntityType.bb | 20 + .../help/commands/3d_examples/GetParent.bb | 20 + .../help/commands/3d_examples/GetSurface.bb | 22 + .../help/commands/3d_examples/GfxDriver3D.bb | 11 + .../help/commands/3d_examples/GfxMode3D.bb | 12 + .../commands/3d_examples/GfxModeExists.bb | 5 + .../help/commands/3d_examples/Graphics3D.bb | 19 + .../help/commands/3d_examples/HWMultiTex.bb | 20 + .../help/commands/3d_examples/HandleSprite.bb | 20 + .../help/commands/3d_examples/HideEntity.bb | 20 + .../help/commands/3d_examples/LightColor.bb | 20 + .../commands/3d_examples/LightConeAngles.bb | 20 + .../help/commands/3d_examples/LightMesh.bb | 20 + .../help/commands/3d_examples/LightRange.bb | 20 + .../help/commands/3d_examples/LinePick.bb | 20 + .../help/commands/3d_examples/Load3DSound.bb | 20 + .../help/commands/3d_examples/LoadAnimMesh.bb | 20 + .../help/commands/3d_examples/LoadAnimSeq.bb | 20 + .../commands/3d_examples/LoadAnimTexture.bb | 24 + .../help/commands/3d_examples/LoadBrush.bb | 20 + _release/help/commands/3d_examples/LoadMD2.bb | 29 + .../help/commands/3d_examples/LoadMesh.bb | 22 + .../help/commands/3d_examples/LoadSprite.bb | 20 + .../help/commands/3d_examples/LoadTerrain.bb | 56 + .../help/commands/3d_examples/LoadTexture.bb | 41 + .../help/commands/3d_examples/LoaderMatrix.bb | 20 + .../commands/3d_examples/MD2AnimLength.bb | 35 + .../help/commands/3d_examples/MD2AnimTime.bb | 39 + .../help/commands/3d_examples/MD2Animating.bb | 41 + .../help/commands/3d_examples/MeshDepth.bb | 20 + .../help/commands/3d_examples/MeshHeight.bb | 20 + .../help/commands/3d_examples/MeshWidth.bb | 20 + .../commands/3d_examples/MeshesIntersect.bb | 32 + .../commands/3d_examples/ModifyTerrain.bb | 20 + .../help/commands/3d_examples/MoveEntity.bb | 47 + .../help/commands/3d_examples/NameEntity.bb | 20 + .../help/commands/3d_examples/PaintEntity.bb | 20 + .../help/commands/3d_examples/PaintMesh.bb | 51 + .../help/commands/3d_examples/PaintSurface.bb | 20 + .../help/commands/3d_examples/PickedEntity.bb | 20 + .../help/commands/3d_examples/PickedNX.bb | 20 + .../help/commands/3d_examples/PickedNY.bb | 20 + .../help/commands/3d_examples/PickedNZ.bb | 20 + .../commands/3d_examples/PickedSurface.bb | 20 + .../help/commands/3d_examples/PickedTime.bb | 20 + .../commands/3d_examples/PickedTriangle.bb | 20 + _release/help/commands/3d_examples/PickedX.bb | 20 + _release/help/commands/3d_examples/PickedY.bb | 20 + _release/help/commands/3d_examples/PickedZ.bb | 20 + .../help/commands/3d_examples/PointEntity.bb | 20 + .../commands/3d_examples/PositionEntity.bb | 41 + .../help/commands/3d_examples/PositionMesh.bb | 20 + .../commands/3d_examples/PositionTexture.bb | 48 + .../help/commands/3d_examples/ProjectedX.bb | 20 + .../help/commands/3d_examples/ProjectedY.bb | 20 + .../help/commands/3d_examples/ProjectedZ.bb | 20 + .../help/commands/3d_examples/RenderWorld.bb | 20 + .../help/commands/3d_examples/ResetEntity.bb | 20 + .../help/commands/3d_examples/RotateEntity.bb | 37 + .../help/commands/3d_examples/RotateMesh.bb | 20 + .../help/commands/3d_examples/RotateSprite.bb | 20 + .../commands/3d_examples/RotateTexture.bb | 44 + .../help/commands/3d_examples/ScaleEntity.bb | 42 + .../help/commands/3d_examples/ScaleMesh.bb | 20 + .../help/commands/3d_examples/ScaleSprite.bb | 20 + .../help/commands/3d_examples/ScaleTexture.bb | 48 + .../help/commands/3d_examples/SetAnimKey.bb | 20 + .../help/commands/3d_examples/ShowEntity.bb | 20 + .../commands/3d_examples/SpriteViewMode.bb | 20 + .../help/commands/3d_examples/TFormNormal.bb | 20 + .../help/commands/3d_examples/TFormPoint.bb | 52 + .../help/commands/3d_examples/TFormVector.bb | 52 + .../help/commands/3d_examples/TFormedX.bb | 20 + .../help/commands/3d_examples/TFormedY.bb | 20 + .../help/commands/3d_examples/TFormedZ.bb | 20 + .../commands/3d_examples/TerrainDetail.bb | 73 + .../commands/3d_examples/TerrainHeight.bb | 59 + .../commands/3d_examples/TerrainShading.bb | 64 + .../help/commands/3d_examples/TerrainSize.bb | 59 + .../help/commands/3d_examples/TerrainX.bb | 59 + .../help/commands/3d_examples/TerrainY.bb | 59 + .../help/commands/3d_examples/TerrainZ.bb | 59 + .../help/commands/3d_examples/TextureBlend.bb | 20 + .../commands/3d_examples/TextureBuffer.bb | 61 + .../commands/3d_examples/TextureCoords.bb | 20 + .../commands/3d_examples/TextureFilter.bb | 20 + .../commands/3d_examples/TextureHeight.bb | 20 + .../help/commands/3d_examples/TextureWidth.bb | 20 + .../commands/3d_examples/TranslateEntity.bb | 47 + .../commands/3d_examples/TriangleVertex.bb | 20 + .../help/commands/3d_examples/TurnEntity.bb | 42 + .../commands/3d_examples/UpdateNormals.bb | 20 + .../help/commands/3d_examples/UpdateWorld.bb | 20 + .../help/commands/3d_examples/VertexBlue.bb | 20 + .../help/commands/3d_examples/VertexColor.bb | 20 + .../help/commands/3d_examples/VertexCoords.bb | 20 + .../help/commands/3d_examples/VertexGreen.bb | 20 + .../help/commands/3d_examples/VertexNX.bb | 20 + .../help/commands/3d_examples/VertexNY.bb | 20 + .../help/commands/3d_examples/VertexNZ.bb | 20 + .../help/commands/3d_examples/VertexNormal.bb | 20 + .../help/commands/3d_examples/VertexRed.bb | 20 + .../commands/3d_examples/VertexTexCoords.bb | 20 + _release/help/commands/3d_examples/VertexU.bb | 20 + _release/help/commands/3d_examples/VertexV.bb | 20 + _release/help/commands/3d_examples/VertexW.bb | 20 + _release/help/commands/3d_examples/VertexX.bb | 20 + _release/help/commands/3d_examples/VertexY.bb | 20 + _release/help/commands/3d_examples/VertexZ.bb | 20 + _release/help/commands/3d_examples/WBuffer.bb | 20 + .../help/commands/3d_examples/Windowed3D.bb | 11 + .../help/commands/3d_examples/Wireframe.bb | 32 + .../commands/3d_examples/media/Chorme-2.BMP | Bin 0 -> 12344 bytes .../3d_examples/media/Gargoyle/Gargoyle.bmp | Bin 0 -> 66614 bytes .../3d_examples/media/Gargoyle/Gargoyle.md2 | Bin 0 -> 37216 bytes .../media/Gargoyle/GargoyleSkin.PCX | Bin 0 -> 75206 bytes .../commands/3d_examples/media/Height_map.bmp | Bin 0 -> 66614 bytes .../3d_examples/media/MossyGround.BMP | Bin 0 -> 196664 bytes .../commands/3d_examples/media/b3dlogo.jpg | Bin 0 -> 15753 bytes .../3d_examples/media/height_map_1024.bmp | Bin 0 -> 1049654 bytes .../commands/3d_examples/media/kaboom.bmp | Bin 0 -> 51894 bytes .../3d_examples/media/oil-drum/oildrum.3ds | Bin 0 -> 2337 bytes .../3d_examples/media/oil-drum/oildrum.jpg | Bin 0 -> 23112 bytes .../help/commands/3d_examples/media/sky.bmp | Bin 0 -> 196662 bytes .../3d_examples/media/wood-crate/wcrate.jpg | Bin 0 -> 36274 bytes .../3d_examples/media/wood-crate/wcrate1.3ds | Bin 0 -> 1572 bytes .../help/commands/3d_examples/template.bb | 20 + _release/help/commands/command_list.htm | 5285 +++++++++++++++++ _release/help/commands/css/commands.css | 11 + _release/help/commands/css/commands_old.css | 5 + _release/help/commands/css/readme.txt | 1 + _release/help/commands/index.htm | 22 + _release/help/commands/scancodes.htm | 745 +++ _release/help/credits.html | 49 + _release/help/index.html | 66 + _release/help/language/index.html | 17 + _release/help/language/lang_ref.css | 67 + _release/help/language/lang_ref_arrays.html | 43 + .../language/lang_ref_basicdatatypes.html | 30 + _release/help/language/lang_ref_comments.html | 48 + .../help/language/lang_ref_constants.html | 61 + .../help/language/lang_ref_customtypes.html | 189 + .../help/language/lang_ref_expressions.html | 139 + .../help/language/lang_ref_functions.html | 35 + .../help/language/lang_ref_identifiers.html | 54 + _release/help/language/lang_ref_intro.html | 22 + _release/help/language/lang_ref_keywords.html | 33 + .../help/language/lang_ref_programflow.html | 119 + .../help/language/lang_ref_variables.html | 110 + _release/help/language/navbar.html | 21 + _release/help/language/title.html | 10 + 790 files changed, 33580 insertions(+) create mode 100644 _release/help/b3dlogo.jpg create mode 100644 _release/help/commands/2d_commands/ACos.htm create mode 100644 _release/help/commands/2d_commands/ASin.htm create mode 100644 _release/help/commands/2d_commands/ATan.htm create mode 100644 _release/help/commands/2d_commands/ATan2.htm create mode 100644 _release/help/commands/2d_commands/Abs.htm create mode 100644 _release/help/commands/2d_commands/AcceptTCPStream.htm create mode 100644 _release/help/commands/2d_commands/After.htm create mode 100644 _release/help/commands/2d_commands/And.htm create mode 100644 _release/help/commands/2d_commands/AppTitle.htm create mode 100644 _release/help/commands/2d_commands/Asc.htm create mode 100644 _release/help/commands/2d_commands/AutoMidHandle .htm create mode 100644 _release/help/commands/2d_commands/AvailVidMem.htm create mode 100644 _release/help/commands/2d_commands/BackBuffer.htm create mode 100644 _release/help/commands/2d_commands/BankSize.htm create mode 100644 _release/help/commands/2d_commands/Before.htm create mode 100644 _release/help/commands/2d_commands/Bin.htm create mode 100644 _release/help/commands/2d_commands/CPUTimer.htm create mode 100644 _release/help/commands/2d_commands/Case.htm create mode 100644 _release/help/commands/2d_commands/Ceil.htm create mode 100644 _release/help/commands/2d_commands/ChangeDir.htm create mode 100644 _release/help/commands/2d_commands/ChannelPan.htm create mode 100644 _release/help/commands/2d_commands/ChannelPitch.htm create mode 100644 _release/help/commands/2d_commands/ChannelPlaying.htm create mode 100644 _release/help/commands/2d_commands/ChannelVolume.htm create mode 100644 _release/help/commands/2d_commands/Chr.htm create mode 100644 _release/help/commands/2d_commands/CloseDir.htm create mode 100644 _release/help/commands/2d_commands/CloseFile.htm create mode 100644 _release/help/commands/2d_commands/CloseTCPServer.htm create mode 100644 _release/help/commands/2d_commands/CloseTCPStream.htm create mode 100644 _release/help/commands/2d_commands/Cls.htm create mode 100644 _release/help/commands/2d_commands/ClsColor.htm create mode 100644 _release/help/commands/2d_commands/Color.htm create mode 100644 _release/help/commands/2d_commands/ColorBlue.htm create mode 100644 _release/help/commands/2d_commands/ColorGreen.htm create mode 100644 _release/help/commands/2d_commands/ColorRed.htm create mode 100644 _release/help/commands/2d_commands/CommandLine.htm create mode 100644 _release/help/commands/2d_commands/Const.htm create mode 100644 _release/help/commands/2d_commands/CopyBank.htm create mode 100644 _release/help/commands/2d_commands/CopyFile.htm create mode 100644 _release/help/commands/2d_commands/CopyImage.htm create mode 100644 _release/help/commands/2d_commands/CopyPixel.htm create mode 100644 _release/help/commands/2d_commands/CopyPixelFast.htm create mode 100644 _release/help/commands/2d_commands/CopyRect.htm create mode 100644 _release/help/commands/2d_commands/CopyStream.htm create mode 100644 _release/help/commands/2d_commands/Cos.htm create mode 100644 _release/help/commands/2d_commands/CountGFXModes.htm create mode 100644 _release/help/commands/2d_commands/CountGfxDrivers.htm create mode 100644 _release/help/commands/2d_commands/CreateBank.htm create mode 100644 _release/help/commands/2d_commands/CreateDir.htm create mode 100644 _release/help/commands/2d_commands/CreateImage.htm create mode 100644 _release/help/commands/2d_commands/CreateNetPlayer.htm create mode 100644 _release/help/commands/2d_commands/CreateTCPServer.htm create mode 100644 _release/help/commands/2d_commands/CreateTimer.htm create mode 100644 _release/help/commands/2d_commands/CurrentDate.htm create mode 100644 _release/help/commands/2d_commands/CurrentDir.htm create mode 100644 _release/help/commands/2d_commands/CurrentTime.htm create mode 100644 _release/help/commands/2d_commands/Data.htm create mode 100644 _release/help/commands/2d_commands/DebugLog.htm create mode 100644 _release/help/commands/2d_commands/Default.htm create mode 100644 _release/help/commands/2d_commands/Delay.htm create mode 100644 _release/help/commands/2d_commands/Delete.htm create mode 100644 _release/help/commands/2d_commands/DeleteDir.htm create mode 100644 _release/help/commands/2d_commands/DeleteFile.htm create mode 100644 _release/help/commands/2d_commands/DeleteNetPlayer.htm create mode 100644 _release/help/commands/2d_commands/Dim.htm create mode 100644 _release/help/commands/2d_commands/DrawBlock.htm create mode 100644 _release/help/commands/2d_commands/DrawBlockRect.htm create mode 100644 _release/help/commands/2d_commands/DrawImage.htm create mode 100644 _release/help/commands/2d_commands/DrawImageRect.htm create mode 100644 _release/help/commands/2d_commands/EOF.htm create mode 100644 _release/help/commands/2d_commands/Each.htm create mode 100644 _release/help/commands/2d_commands/Else If.htm create mode 100644 _release/help/commands/2d_commands/Else.htm create mode 100644 _release/help/commands/2d_commands/ElseIf.htm create mode 100644 _release/help/commands/2d_commands/End Function.htm create mode 100644 _release/help/commands/2d_commands/End If.htm create mode 100644 _release/help/commands/2d_commands/End Select.htm create mode 100644 _release/help/commands/2d_commands/End Type.htm create mode 100644 _release/help/commands/2d_commands/End.htm create mode 100644 _release/help/commands/2d_commands/EndGraphics.htm create mode 100644 _release/help/commands/2d_commands/EndIF.htm create mode 100644 _release/help/commands/2d_commands/ExecFile.htm create mode 100644 _release/help/commands/2d_commands/Exit.htm create mode 100644 _release/help/commands/2d_commands/Exp.htm create mode 100644 _release/help/commands/2d_commands/False.htm create mode 100644 _release/help/commands/2d_commands/Field.htm create mode 100644 _release/help/commands/2d_commands/FilePos.htm create mode 100644 _release/help/commands/2d_commands/FileSize.htm create mode 100644 _release/help/commands/2d_commands/FileType.htm create mode 100644 _release/help/commands/2d_commands/FindGfxMode.htm create mode 100644 _release/help/commands/2d_commands/First.htm create mode 100644 _release/help/commands/2d_commands/Flip.htm create mode 100644 _release/help/commands/2d_commands/Float.htm create mode 100644 _release/help/commands/2d_commands/Floor.htm create mode 100644 _release/help/commands/2d_commands/FlushJoy.htm create mode 100644 _release/help/commands/2d_commands/FlushKeys.htm create mode 100644 _release/help/commands/2d_commands/FlushMouse.htm create mode 100644 _release/help/commands/2d_commands/FontHeight.htm create mode 100644 _release/help/commands/2d_commands/FontWidth.htm create mode 100644 _release/help/commands/2d_commands/For.htm create mode 100644 _release/help/commands/2d_commands/Forever.htm create mode 100644 _release/help/commands/2d_commands/FreeBank.htm create mode 100644 _release/help/commands/2d_commands/FreeFont.htm create mode 100644 _release/help/commands/2d_commands/FreeImage.htm create mode 100644 _release/help/commands/2d_commands/FreeSound.htm create mode 100644 _release/help/commands/2d_commands/FreeTimer.htm create mode 100644 _release/help/commands/2d_commands/FrontBuffer.htm create mode 100644 _release/help/commands/2d_commands/Function.htm create mode 100644 _release/help/commands/2d_commands/GFXModeDepth.htm create mode 100644 _release/help/commands/2d_commands/GFXModeHeight.htm create mode 100644 _release/help/commands/2d_commands/GFXModeWidth.htm create mode 100644 _release/help/commands/2d_commands/GetColor.htm create mode 100644 _release/help/commands/2d_commands/GetJoy.htm create mode 100644 _release/help/commands/2d_commands/GetKey.htm create mode 100644 _release/help/commands/2d_commands/GetMouse.htm create mode 100644 _release/help/commands/2d_commands/GfxDriverName.htm create mode 100644 _release/help/commands/2d_commands/GfxModeExists.htm create mode 100644 _release/help/commands/2d_commands/Global.htm create mode 100644 _release/help/commands/2d_commands/Gosub.htm create mode 100644 _release/help/commands/2d_commands/Goto.htm create mode 100644 _release/help/commands/2d_commands/GrabImage.htm create mode 100644 _release/help/commands/2d_commands/Graphics.htm create mode 100644 _release/help/commands/2d_commands/GraphicsBuffer.htm create mode 100644 _release/help/commands/2d_commands/GraphicsDepth.htm create mode 100644 _release/help/commands/2d_commands/GraphicsHeight.htm create mode 100644 _release/help/commands/2d_commands/GraphicsWidth.htm create mode 100644 _release/help/commands/2d_commands/HandleImage.htm create mode 100644 _release/help/commands/2d_commands/Hex.htm create mode 100644 _release/help/commands/2d_commands/HidePointer.htm create mode 100644 _release/help/commands/2d_commands/HostNetGame.htm create mode 100644 _release/help/commands/2d_commands/If.htm create mode 100644 _release/help/commands/2d_commands/ImageBuffer.htm create mode 100644 _release/help/commands/2d_commands/ImageHeight.htm create mode 100644 _release/help/commands/2d_commands/ImageRectCollide.htm create mode 100644 _release/help/commands/2d_commands/ImageRectOverlap.htm create mode 100644 _release/help/commands/2d_commands/ImageWidth.htm create mode 100644 _release/help/commands/2d_commands/ImageXHandle.htm create mode 100644 _release/help/commands/2d_commands/ImageYHandle.htm create mode 100644 _release/help/commands/2d_commands/ImagesCollide.htm create mode 100644 _release/help/commands/2d_commands/ImagesOverlap.htm create mode 100644 _release/help/commands/2d_commands/Include.htm create mode 100644 _release/help/commands/2d_commands/Input.htm create mode 100644 _release/help/commands/2d_commands/Insert.htm create mode 100644 _release/help/commands/2d_commands/Instr.htm create mode 100644 _release/help/commands/2d_commands/Int.htm create mode 100644 _release/help/commands/2d_commands/JoinNetGame.htm create mode 100644 _release/help/commands/2d_commands/JoyDown.htm create mode 100644 _release/help/commands/2d_commands/JoyHit.htm create mode 100644 _release/help/commands/2d_commands/JoyType.htm create mode 100644 _release/help/commands/2d_commands/JoyWait.htm create mode 100644 _release/help/commands/2d_commands/JoyX.htm create mode 100644 _release/help/commands/2d_commands/JoyXDir.htm create mode 100644 _release/help/commands/2d_commands/JoyY.htm create mode 100644 _release/help/commands/2d_commands/JoyYDir.htm create mode 100644 _release/help/commands/2d_commands/JoyZ.htm create mode 100644 _release/help/commands/2d_commands/JoyZDir.htm create mode 100644 _release/help/commands/2d_commands/KeyDown.htm create mode 100644 _release/help/commands/2d_commands/KeyHit.htm create mode 100644 _release/help/commands/2d_commands/LSet.htm create mode 100644 _release/help/commands/2d_commands/Last.htm create mode 100644 _release/help/commands/2d_commands/Left.htm create mode 100644 _release/help/commands/2d_commands/Len.htm create mode 100644 _release/help/commands/2d_commands/Line.htm create mode 100644 _release/help/commands/2d_commands/LoadAnimImage.htm create mode 100644 _release/help/commands/2d_commands/LoadBuffer.htm create mode 100644 _release/help/commands/2d_commands/LoadFont.htm create mode 100644 _release/help/commands/2d_commands/LoadImage.htm create mode 100644 _release/help/commands/2d_commands/LoadSound.htm create mode 100644 _release/help/commands/2d_commands/Local.htm create mode 100644 _release/help/commands/2d_commands/Locate.htm create mode 100644 _release/help/commands/2d_commands/LockBuffer.htm create mode 100644 _release/help/commands/2d_commands/Log.htm create mode 100644 _release/help/commands/2d_commands/Log10.htm create mode 100644 _release/help/commands/2d_commands/LoopSound.htm create mode 100644 _release/help/commands/2d_commands/Lower.htm create mode 100644 _release/help/commands/2d_commands/MaskImage.htm create mode 100644 _release/help/commands/2d_commands/Mid.htm create mode 100644 _release/help/commands/2d_commands/MidHandle .htm create mode 100644 _release/help/commands/2d_commands/Millisecs.htm create mode 100644 _release/help/commands/2d_commands/Mod.htm create mode 100644 _release/help/commands/2d_commands/MouseDown.htm create mode 100644 _release/help/commands/2d_commands/MouseHit.htm create mode 100644 _release/help/commands/2d_commands/MouseWait.htm create mode 100644 _release/help/commands/2d_commands/MouseX.htm create mode 100644 _release/help/commands/2d_commands/MouseXSpeed.htm create mode 100644 _release/help/commands/2d_commands/MouseY.htm create mode 100644 _release/help/commands/2d_commands/MouseYSpeed.htm create mode 100644 _release/help/commands/2d_commands/MouseZ.htm create mode 100644 _release/help/commands/2d_commands/MouseZSpeed.htm create mode 100644 _release/help/commands/2d_commands/MoveMouse.htm create mode 100644 _release/help/commands/2d_commands/NetMsgData.htm create mode 100644 _release/help/commands/2d_commands/NetMsgFrom().htm create mode 100644 _release/help/commands/2d_commands/NetMsgTo().htm create mode 100644 _release/help/commands/2d_commands/NetMsgType().htm create mode 100644 _release/help/commands/2d_commands/NetPlayerLocal.htm create mode 100644 _release/help/commands/2d_commands/NetPlayerName.htm create mode 100644 _release/help/commands/2d_commands/New.htm create mode 100644 _release/help/commands/2d_commands/Next.htm create mode 100644 _release/help/commands/2d_commands/NextFile.htm create mode 100644 _release/help/commands/2d_commands/Not.htm create mode 100644 _release/help/commands/2d_commands/Null.htm create mode 100644 _release/help/commands/2d_commands/OpenFile.htm create mode 100644 _release/help/commands/2d_commands/OpenTCPStream.htm create mode 100644 _release/help/commands/2d_commands/Or.htm create mode 100644 _release/help/commands/2d_commands/Origin.htm create mode 100644 _release/help/commands/2d_commands/Oval.htm create mode 100644 _release/help/commands/2d_commands/PauseChannel.htm create mode 100644 _release/help/commands/2d_commands/PeekByte.htm create mode 100644 _release/help/commands/2d_commands/PeekFloat.htm create mode 100644 _release/help/commands/2d_commands/PeekInt.htm create mode 100644 _release/help/commands/2d_commands/PeekShort.htm create mode 100644 _release/help/commands/2d_commands/Pi.htm create mode 100644 _release/help/commands/2d_commands/PlayCDTrack.htm create mode 100644 _release/help/commands/2d_commands/PlayMusic.htm create mode 100644 _release/help/commands/2d_commands/PlaySound.htm create mode 100644 _release/help/commands/2d_commands/Plot.htm create mode 100644 _release/help/commands/2d_commands/PokeByte.htm create mode 100644 _release/help/commands/2d_commands/PokeFloat.htm create mode 100644 _release/help/commands/2d_commands/PokeInt.htm create mode 100644 _release/help/commands/2d_commands/PokeShort.htm create mode 100644 _release/help/commands/2d_commands/Print.htm create mode 100644 _release/help/commands/2d_commands/RSet.htm create mode 100644 _release/help/commands/2d_commands/Rand.htm create mode 100644 _release/help/commands/2d_commands/Read.htm create mode 100644 _release/help/commands/2d_commands/ReadAvail.htm create mode 100644 _release/help/commands/2d_commands/ReadByte.htm create mode 100644 _release/help/commands/2d_commands/ReadBytes.htm create mode 100644 _release/help/commands/2d_commands/ReadDir.htm create mode 100644 _release/help/commands/2d_commands/ReadFile.htm create mode 100644 _release/help/commands/2d_commands/ReadFloat.htm create mode 100644 _release/help/commands/2d_commands/ReadInt.htm create mode 100644 _release/help/commands/2d_commands/ReadLine.htm create mode 100644 _release/help/commands/2d_commands/ReadPixel.htm create mode 100644 _release/help/commands/2d_commands/ReadPixelFast.htm create mode 100644 _release/help/commands/2d_commands/ReadShort.htm create mode 100644 _release/help/commands/2d_commands/ReadString.htm create mode 100644 _release/help/commands/2d_commands/Rect.htm create mode 100644 _release/help/commands/2d_commands/RectsOverlap.htm create mode 100644 _release/help/commands/2d_commands/RecvNetMsg.htm create mode 100644 _release/help/commands/2d_commands/Repeat.htm create mode 100644 _release/help/commands/2d_commands/Replace.htm create mode 100644 _release/help/commands/2d_commands/ResizeBank.htm create mode 100644 _release/help/commands/2d_commands/ResizeImage.htm create mode 100644 _release/help/commands/2d_commands/Restore.htm create mode 100644 _release/help/commands/2d_commands/ResumeChannel.htm create mode 100644 _release/help/commands/2d_commands/Return.htm create mode 100644 _release/help/commands/2d_commands/Right.htm create mode 100644 _release/help/commands/2d_commands/Rnd.htm create mode 100644 _release/help/commands/2d_commands/RotateImage.htm create mode 100644 _release/help/commands/2d_commands/RuntimeError.htm create mode 100644 _release/help/commands/2d_commands/Sar.htm create mode 100644 _release/help/commands/2d_commands/SaveBuffer.htm create mode 100644 _release/help/commands/2d_commands/SaveImage.htm create mode 100644 _release/help/commands/2d_commands/ScaleImage.htm create mode 100644 _release/help/commands/2d_commands/ScanCodes.htm create mode 100644 _release/help/commands/2d_commands/ScanLine.htm create mode 100644 _release/help/commands/2d_commands/SeedRnd.htm create mode 100644 _release/help/commands/2d_commands/SeekFile.htm create mode 100644 _release/help/commands/2d_commands/Select.htm create mode 100644 _release/help/commands/2d_commands/SendNetMsg.htm create mode 100644 _release/help/commands/2d_commands/SetBuffer.htm create mode 100644 _release/help/commands/2d_commands/SetFont.htm create mode 100644 _release/help/commands/2d_commands/SetGfxDriver.htm create mode 100644 _release/help/commands/2d_commands/Sgn.htm create mode 100644 _release/help/commands/2d_commands/Shl.htm create mode 100644 _release/help/commands/2d_commands/ShowPointer.htm create mode 100644 _release/help/commands/2d_commands/Shr.htm create mode 100644 _release/help/commands/2d_commands/Sin.htm create mode 100644 _release/help/commands/2d_commands/SoundPan.htm create mode 100644 _release/help/commands/2d_commands/SoundPitch.htm create mode 100644 _release/help/commands/2d_commands/SoundVolume.htm create mode 100644 _release/help/commands/2d_commands/Sqr.htm create mode 100644 _release/help/commands/2d_commands/StartNetGame.htm create mode 100644 _release/help/commands/2d_commands/Step.htm create mode 100644 _release/help/commands/2d_commands/Stop.htm create mode 100644 _release/help/commands/2d_commands/StopChannel.htm create mode 100644 _release/help/commands/2d_commands/StopNetGame.htm create mode 100644 _release/help/commands/2d_commands/Str.htm create mode 100644 _release/help/commands/2d_commands/String.htm create mode 100644 _release/help/commands/2d_commands/StringHeight.htm create mode 100644 _release/help/commands/2d_commands/StringWidth.htm create mode 100644 _release/help/commands/2d_commands/SystemProperty.htm create mode 100644 _release/help/commands/2d_commands/TCPTimeOuts.htm create mode 100644 _release/help/commands/2d_commands/TFormFilter.htm create mode 100644 _release/help/commands/2d_commands/Tan.htm create mode 100644 _release/help/commands/2d_commands/Text.htm create mode 100644 _release/help/commands/2d_commands/Then.htm create mode 100644 _release/help/commands/2d_commands/TileBlock.htm create mode 100644 _release/help/commands/2d_commands/TileImage.htm create mode 100644 _release/help/commands/2d_commands/To.htm create mode 100644 _release/help/commands/2d_commands/TotalVidMem.htm create mode 100644 _release/help/commands/2d_commands/Trim.htm create mode 100644 _release/help/commands/2d_commands/True.htm create mode 100644 _release/help/commands/2d_commands/Type.htm create mode 100644 _release/help/commands/2d_commands/UnlockBuffer.htm create mode 100644 _release/help/commands/2d_commands/Until.htm create mode 100644 _release/help/commands/2d_commands/Upper.htm create mode 100644 _release/help/commands/2d_commands/VWait.htm create mode 100644 _release/help/commands/2d_commands/Viewport.htm create mode 100644 _release/help/commands/2d_commands/WaitJoy.htm create mode 100644 _release/help/commands/2d_commands/WaitKey.htm create mode 100644 _release/help/commands/2d_commands/WaitMouse.htm create mode 100644 _release/help/commands/2d_commands/WaitTimer.htm create mode 100644 _release/help/commands/2d_commands/Wend.htm create mode 100644 _release/help/commands/2d_commands/While.htm create mode 100644 _release/help/commands/2d_commands/Write.htm create mode 100644 _release/help/commands/2d_commands/WriteByte.htm create mode 100644 _release/help/commands/2d_commands/WriteBytes.htm create mode 100644 _release/help/commands/2d_commands/WriteFile.htm create mode 100644 _release/help/commands/2d_commands/WriteFloat.htm create mode 100644 _release/help/commands/2d_commands/WriteInt.htm create mode 100644 _release/help/commands/2d_commands/WriteLine.htm create mode 100644 _release/help/commands/2d_commands/WritePixel.htm create mode 100644 _release/help/commands/2d_commands/WritePixelFast.htm create mode 100644 _release/help/commands/2d_commands/WriteShort.htm create mode 100644 _release/help/commands/2d_commands/WriteString.htm create mode 100644 _release/help/commands/2d_commands/Xor.htm create mode 100644 _release/help/commands/2d_commands/template.htm create mode 100644 _release/help/commands/3d_commands/AddAnimSeq.htm create mode 100644 _release/help/commands/3d_commands/AddTriangle.htm create mode 100644 _release/help/commands/3d_commands/AddVertex.htm create mode 100644 _release/help/commands/3d_commands/AlignToVector.htm create mode 100644 _release/help/commands/3d_commands/AmbientLight.htm create mode 100644 _release/help/commands/3d_commands/AnimLength.htm create mode 100644 _release/help/commands/3d_commands/AnimSeq.htm create mode 100644 _release/help/commands/3d_commands/AnimTime.htm create mode 100644 _release/help/commands/3d_commands/Animate.htm create mode 100644 _release/help/commands/3d_commands/AnimateMD2.htm create mode 100644 _release/help/commands/3d_commands/Animating.htm create mode 100644 _release/help/commands/3d_commands/AntiAlias.htm create mode 100644 _release/help/commands/3d_commands/BrushAlpha.htm create mode 100644 _release/help/commands/3d_commands/BrushBlend.htm create mode 100644 _release/help/commands/3d_commands/BrushColor.htm create mode 100644 _release/help/commands/3d_commands/BrushFX.htm create mode 100644 _release/help/commands/3d_commands/BrushShininess.htm create mode 100644 _release/help/commands/3d_commands/BrushTexture.htm create mode 100644 _release/help/commands/3d_commands/CameraClsColor.htm create mode 100644 _release/help/commands/3d_commands/CameraClsMode.htm create mode 100644 _release/help/commands/3d_commands/CameraFogColor.htm create mode 100644 _release/help/commands/3d_commands/CameraFogMode.htm create mode 100644 _release/help/commands/3d_commands/CameraFogRange.htm create mode 100644 _release/help/commands/3d_commands/CameraPick.htm create mode 100644 _release/help/commands/3d_commands/CameraProject.htm create mode 100644 _release/help/commands/3d_commands/CameraRange.htm create mode 100644 _release/help/commands/3d_commands/CameraViewport.htm create mode 100644 _release/help/commands/3d_commands/CameraZoom.htm create mode 100644 _release/help/commands/3d_commands/CaptureWorld.htm create mode 100644 _release/help/commands/3d_commands/ClearCollisions.htm create mode 100644 _release/help/commands/3d_commands/ClearSurface.htm create mode 100644 _release/help/commands/3d_commands/ClearTextureFilters.htm create mode 100644 _release/help/commands/3d_commands/ClearWorld.htm create mode 100644 _release/help/commands/3d_commands/CollisionEntity.htm create mode 100644 _release/help/commands/3d_commands/CollisionNX.htm create mode 100644 _release/help/commands/3d_commands/CollisionNY.htm create mode 100644 _release/help/commands/3d_commands/CollisionNZ.htm create mode 100644 _release/help/commands/3d_commands/CollisionSurface.htm create mode 100644 _release/help/commands/3d_commands/CollisionTime.htm create mode 100644 _release/help/commands/3d_commands/CollisionTriangle.htm create mode 100644 _release/help/commands/3d_commands/CollisionX.htm create mode 100644 _release/help/commands/3d_commands/CollisionY.htm create mode 100644 _release/help/commands/3d_commands/CollisionZ.htm create mode 100644 _release/help/commands/3d_commands/Collisions.htm create mode 100644 _release/help/commands/3d_commands/CopyEntity.htm create mode 100644 _release/help/commands/3d_commands/CountChildren.htm create mode 100644 _release/help/commands/3d_commands/CountCollisions.htm create mode 100644 _release/help/commands/3d_commands/CountSurfaces.htm create mode 100644 _release/help/commands/3d_commands/CountTriangles.htm create mode 100644 _release/help/commands/3d_commands/CountVertices.htm create mode 100644 _release/help/commands/3d_commands/CreateBrush.htm create mode 100644 _release/help/commands/3d_commands/CreateCamera.htm create mode 100644 _release/help/commands/3d_commands/CreateCone.htm create mode 100644 _release/help/commands/3d_commands/CreateCube.htm create mode 100644 _release/help/commands/3d_commands/CreateCylinder.htm create mode 100644 _release/help/commands/3d_commands/CreateLight.htm create mode 100644 _release/help/commands/3d_commands/CreateListener.htm create mode 100644 _release/help/commands/3d_commands/CreateMesh.htm create mode 100644 _release/help/commands/3d_commands/CreateMirror.htm create mode 100644 _release/help/commands/3d_commands/CreatePivot.htm create mode 100644 _release/help/commands/3d_commands/CreatePlane.htm create mode 100644 _release/help/commands/3d_commands/CreateSphere.htm create mode 100644 _release/help/commands/3d_commands/CreateSprite.htm create mode 100644 _release/help/commands/3d_commands/CreateSurface.htm create mode 100644 _release/help/commands/3d_commands/CreateTerrain.htm create mode 100644 _release/help/commands/3d_commands/CreateTexture.htm create mode 100644 _release/help/commands/3d_commands/Dither.htm create mode 100644 _release/help/commands/3d_commands/EmitSound.htm create mode 100644 _release/help/commands/3d_commands/EntityAlpha.htm create mode 100644 _release/help/commands/3d_commands/EntityAnimTime.htm create mode 100644 _release/help/commands/3d_commands/EntityAnimating.htm create mode 100644 _release/help/commands/3d_commands/EntityAutoFade.htm create mode 100644 _release/help/commands/3d_commands/EntityBlend.htm create mode 100644 _release/help/commands/3d_commands/EntityBox.htm create mode 100644 _release/help/commands/3d_commands/EntityCollided.htm create mode 100644 _release/help/commands/3d_commands/EntityColor.htm create mode 100644 _release/help/commands/3d_commands/EntityDistance.htm create mode 100644 _release/help/commands/3d_commands/EntityFX.htm create mode 100644 _release/help/commands/3d_commands/EntityInView.htm create mode 100644 _release/help/commands/3d_commands/EntityName.htm create mode 100644 _release/help/commands/3d_commands/EntityOrder.htm create mode 100644 _release/help/commands/3d_commands/EntityParent.htm create mode 100644 _release/help/commands/3d_commands/EntityPick.htm create mode 100644 _release/help/commands/3d_commands/EntityPickMode.htm create mode 100644 _release/help/commands/3d_commands/EntityPitch.htm create mode 100644 _release/help/commands/3d_commands/EntityRadius.htm create mode 100644 _release/help/commands/3d_commands/EntityRoll.htm create mode 100644 _release/help/commands/3d_commands/EntityShininess.htm create mode 100644 _release/help/commands/3d_commands/EntityTexture.htm create mode 100644 _release/help/commands/3d_commands/EntityType.htm create mode 100644 _release/help/commands/3d_commands/EntityVisible.htm create mode 100644 _release/help/commands/3d_commands/EntityX.htm create mode 100644 _release/help/commands/3d_commands/EntityY.htm create mode 100644 _release/help/commands/3d_commands/EntityYaw.htm create mode 100644 _release/help/commands/3d_commands/EntityZ.htm create mode 100644 _release/help/commands/3d_commands/FindChild.htm create mode 100644 _release/help/commands/3d_commands/FindSurface.htm create mode 100644 _release/help/commands/3d_commands/FitMesh.htm create mode 100644 _release/help/commands/3d_commands/FlipMesh.htm create mode 100644 _release/help/commands/3d_commands/FreeBrush.htm create mode 100644 _release/help/commands/3d_commands/FreeEntity.htm create mode 100644 _release/help/commands/3d_commands/FreeTexture.htm create mode 100644 _release/help/commands/3d_commands/GetChild.htm create mode 100644 _release/help/commands/3d_commands/GetEntityType.htm create mode 100644 _release/help/commands/3d_commands/GetParent.htm create mode 100644 _release/help/commands/3d_commands/GetSurface.htm create mode 100644 _release/help/commands/3d_commands/GfxDriver3D.htm create mode 100644 _release/help/commands/3d_commands/GfxMode3D.htm create mode 100644 _release/help/commands/3d_commands/GfxModeExists.htm create mode 100644 _release/help/commands/3d_commands/Graphics3D.htm create mode 100644 _release/help/commands/3d_commands/HWMultiTex.htm create mode 100644 _release/help/commands/3d_commands/HandleSprite.htm create mode 100644 _release/help/commands/3d_commands/HideEntity.htm create mode 100644 _release/help/commands/3d_commands/LightColor.htm create mode 100644 _release/help/commands/3d_commands/LightConeAngles.htm create mode 100644 _release/help/commands/3d_commands/LightMesh.htm create mode 100644 _release/help/commands/3d_commands/LightRange.htm create mode 100644 _release/help/commands/3d_commands/LinePick.htm create mode 100644 _release/help/commands/3d_commands/Load3DSound.htm create mode 100644 _release/help/commands/3d_commands/LoadAnimMesh.htm create mode 100644 _release/help/commands/3d_commands/LoadAnimSeq.htm create mode 100644 _release/help/commands/3d_commands/LoadAnimTexture.htm create mode 100644 _release/help/commands/3d_commands/LoadBrush.htm create mode 100644 _release/help/commands/3d_commands/LoadMD2.htm create mode 100644 _release/help/commands/3d_commands/LoadMesh.htm create mode 100644 _release/help/commands/3d_commands/LoadSprite.htm create mode 100644 _release/help/commands/3d_commands/LoadTerrain.htm create mode 100644 _release/help/commands/3d_commands/LoadTexture.htm create mode 100644 _release/help/commands/3d_commands/LoaderMatrix.htm create mode 100644 _release/help/commands/3d_commands/MD2AnimLength.htm create mode 100644 _release/help/commands/3d_commands/MD2AnimTime.htm create mode 100644 _release/help/commands/3d_commands/MD2Animating.htm create mode 100644 _release/help/commands/3d_commands/MeshDepth.htm create mode 100644 _release/help/commands/3d_commands/MeshHeight.htm create mode 100644 _release/help/commands/3d_commands/MeshWidth.htm create mode 100644 _release/help/commands/3d_commands/MeshesIntersect.htm create mode 100644 _release/help/commands/3d_commands/ModifyTerrain.htm create mode 100644 _release/help/commands/3d_commands/MoveEntity.htm create mode 100644 _release/help/commands/3d_commands/NameEntity.htm create mode 100644 _release/help/commands/3d_commands/PaintEntity.htm create mode 100644 _release/help/commands/3d_commands/PaintMesh.htm create mode 100644 _release/help/commands/3d_commands/PaintSurface.htm create mode 100644 _release/help/commands/3d_commands/PickedEntity.htm create mode 100644 _release/help/commands/3d_commands/PickedNX.htm create mode 100644 _release/help/commands/3d_commands/PickedNY.htm create mode 100644 _release/help/commands/3d_commands/PickedNZ.htm create mode 100644 _release/help/commands/3d_commands/PickedSurface.htm create mode 100644 _release/help/commands/3d_commands/PickedTime.htm create mode 100644 _release/help/commands/3d_commands/PickedTriangle.htm create mode 100644 _release/help/commands/3d_commands/PickedX.htm create mode 100644 _release/help/commands/3d_commands/PickedY.htm create mode 100644 _release/help/commands/3d_commands/PickedZ.htm create mode 100644 _release/help/commands/3d_commands/PointEntity.htm create mode 100644 _release/help/commands/3d_commands/PositionEntity.htm create mode 100644 _release/help/commands/3d_commands/PositionMesh.htm create mode 100644 _release/help/commands/3d_commands/PositionTexture.htm create mode 100644 _release/help/commands/3d_commands/ProjectedX.htm create mode 100644 _release/help/commands/3d_commands/ProjectedY.htm create mode 100644 _release/help/commands/3d_commands/ProjectedZ.htm create mode 100644 _release/help/commands/3d_commands/RenderWorld.htm create mode 100644 _release/help/commands/3d_commands/ResetEntity.htm create mode 100644 _release/help/commands/3d_commands/RotateEntity.htm create mode 100644 _release/help/commands/3d_commands/RotateMesh.htm create mode 100644 _release/help/commands/3d_commands/RotateSprite.htm create mode 100644 _release/help/commands/3d_commands/RotateTexture.htm create mode 100644 _release/help/commands/3d_commands/ScaleEntity.htm create mode 100644 _release/help/commands/3d_commands/ScaleMesh.htm create mode 100644 _release/help/commands/3d_commands/ScaleSprite.htm create mode 100644 _release/help/commands/3d_commands/ScaleTexture.htm create mode 100644 _release/help/commands/3d_commands/SetAnimKey.htm create mode 100644 _release/help/commands/3d_commands/ShowEntity.htm create mode 100644 _release/help/commands/3d_commands/SpriteViewMode.htm create mode 100644 _release/help/commands/3d_commands/TFormNormal.htm create mode 100644 _release/help/commands/3d_commands/TFormPoint.htm create mode 100644 _release/help/commands/3d_commands/TFormVector.htm create mode 100644 _release/help/commands/3d_commands/TFormedX.htm create mode 100644 _release/help/commands/3d_commands/TFormedY.htm create mode 100644 _release/help/commands/3d_commands/TFormedZ.htm create mode 100644 _release/help/commands/3d_commands/TerrainDetail.htm create mode 100644 _release/help/commands/3d_commands/TerrainHeight.htm create mode 100644 _release/help/commands/3d_commands/TerrainShading.htm create mode 100644 _release/help/commands/3d_commands/TerrainSize.htm create mode 100644 _release/help/commands/3d_commands/TerrainX.htm create mode 100644 _release/help/commands/3d_commands/TerrainY.htm create mode 100644 _release/help/commands/3d_commands/TerrainZ.htm create mode 100644 _release/help/commands/3d_commands/TextureBlend.htm create mode 100644 _release/help/commands/3d_commands/TextureBuffer.htm create mode 100644 _release/help/commands/3d_commands/TextureCoords.htm create mode 100644 _release/help/commands/3d_commands/TextureFilter.htm create mode 100644 _release/help/commands/3d_commands/TextureHeight.htm create mode 100644 _release/help/commands/3d_commands/TextureWidth.htm create mode 100644 _release/help/commands/3d_commands/TranslateEntity.htm create mode 100644 _release/help/commands/3d_commands/TriangleVertex.htm create mode 100644 _release/help/commands/3d_commands/TurnEntity.htm create mode 100644 _release/help/commands/3d_commands/UpdateNormals.htm create mode 100644 _release/help/commands/3d_commands/UpdateWorld.htm create mode 100644 _release/help/commands/3d_commands/VertexBlue.htm create mode 100644 _release/help/commands/3d_commands/VertexColor.htm create mode 100644 _release/help/commands/3d_commands/VertexCoords.htm create mode 100644 _release/help/commands/3d_commands/VertexGreen.htm create mode 100644 _release/help/commands/3d_commands/VertexNX.htm create mode 100644 _release/help/commands/3d_commands/VertexNY.htm create mode 100644 _release/help/commands/3d_commands/VertexNZ.htm create mode 100644 _release/help/commands/3d_commands/VertexNormal.htm create mode 100644 _release/help/commands/3d_commands/VertexRed.htm create mode 100644 _release/help/commands/3d_commands/VertexTexCoords.htm create mode 100644 _release/help/commands/3d_commands/VertexU.htm create mode 100644 _release/help/commands/3d_commands/VertexV.htm create mode 100644 _release/help/commands/3d_commands/VertexW.htm create mode 100644 _release/help/commands/3d_commands/VertexX.htm create mode 100644 _release/help/commands/3d_commands/VertexY.htm create mode 100644 _release/help/commands/3d_commands/VertexZ.htm create mode 100644 _release/help/commands/3d_commands/WBuffer.htm create mode 100644 _release/help/commands/3d_commands/Windowed3D.htm create mode 100644 _release/help/commands/3d_commands/Wireframe.htm create mode 100644 _release/help/commands/3d_commands/main.htm create mode 100644 _release/help/commands/3d_commands/template.htm create mode 100644 _release/help/commands/3d_examples/AddAnimSeq.bb create mode 100644 _release/help/commands/3d_examples/AddTriangle.bb create mode 100644 _release/help/commands/3d_examples/AddVertex.bb create mode 100644 _release/help/commands/3d_examples/AlignToVector.bb create mode 100644 _release/help/commands/3d_examples/AmbientLight.bb create mode 100644 _release/help/commands/3d_examples/AnimLength.bb create mode 100644 _release/help/commands/3d_examples/AnimSeq.bb create mode 100644 _release/help/commands/3d_examples/AnimTime.bb create mode 100644 _release/help/commands/3d_examples/Animate.bb create mode 100644 _release/help/commands/3d_examples/AnimateMD2.bb create mode 100644 _release/help/commands/3d_examples/Animating.bb create mode 100644 _release/help/commands/3d_examples/AntiAlias.bb create mode 100644 _release/help/commands/3d_examples/BrushAlpha.bb create mode 100644 _release/help/commands/3d_examples/BrushBlend.bb create mode 100644 _release/help/commands/3d_examples/BrushColor.bb create mode 100644 _release/help/commands/3d_examples/BrushFX.bb create mode 100644 _release/help/commands/3d_examples/BrushShininess.bb create mode 100644 _release/help/commands/3d_examples/BrushTexture.bb create mode 100644 _release/help/commands/3d_examples/CameraClsColor.bb create mode 100644 _release/help/commands/3d_examples/CameraClsMode.bb create mode 100644 _release/help/commands/3d_examples/CameraFogColor.bb create mode 100644 _release/help/commands/3d_examples/CameraFogMode.bb create mode 100644 _release/help/commands/3d_examples/CameraFogRange.bb create mode 100644 _release/help/commands/3d_examples/CameraPick.bb create mode 100644 _release/help/commands/3d_examples/CameraProject.bb create mode 100644 _release/help/commands/3d_examples/CameraRange.bb create mode 100644 _release/help/commands/3d_examples/CameraViewport.bb create mode 100644 _release/help/commands/3d_examples/CameraZoom.bb create mode 100644 _release/help/commands/3d_examples/CaptureWorld.bb create mode 100644 _release/help/commands/3d_examples/ClearCollisions.bb create mode 100644 _release/help/commands/3d_examples/ClearSurface.bb create mode 100644 _release/help/commands/3d_examples/ClearTextureFilters.bb create mode 100644 _release/help/commands/3d_examples/ClearWorld.bb create mode 100644 _release/help/commands/3d_examples/CollisionEntity.bb create mode 100644 _release/help/commands/3d_examples/CollisionNX.bb create mode 100644 _release/help/commands/3d_examples/CollisionNY.bb create mode 100644 _release/help/commands/3d_examples/CollisionNZ.bb create mode 100644 _release/help/commands/3d_examples/CollisionSurface.bb create mode 100644 _release/help/commands/3d_examples/CollisionTime.bb create mode 100644 _release/help/commands/3d_examples/CollisionTriangle.bb create mode 100644 _release/help/commands/3d_examples/CollisionX.bb create mode 100644 _release/help/commands/3d_examples/CollisionY.bb create mode 100644 _release/help/commands/3d_examples/CollisionZ.bb create mode 100644 _release/help/commands/3d_examples/Collisions.bb create mode 100644 _release/help/commands/3d_examples/CopyEntity.bb create mode 100644 _release/help/commands/3d_examples/CountChildren.bb create mode 100644 _release/help/commands/3d_examples/CountCollisions.bb create mode 100644 _release/help/commands/3d_examples/CountSurfaces.bb create mode 100644 _release/help/commands/3d_examples/CountTriangles.bb create mode 100644 _release/help/commands/3d_examples/CountVertices.bb create mode 100644 _release/help/commands/3d_examples/CreateBrush.bb create mode 100644 _release/help/commands/3d_examples/CreateCamera.bb create mode 100644 _release/help/commands/3d_examples/CreateCone.bb create mode 100644 _release/help/commands/3d_examples/CreateCube.bb create mode 100644 _release/help/commands/3d_examples/CreateCylinder.bb create mode 100644 _release/help/commands/3d_examples/CreateLight.bb create mode 100644 _release/help/commands/3d_examples/CreateListener.bb create mode 100644 _release/help/commands/3d_examples/CreateMesh.bb create mode 100644 _release/help/commands/3d_examples/CreateMirror.bb create mode 100644 _release/help/commands/3d_examples/CreatePivot.bb create mode 100644 _release/help/commands/3d_examples/CreatePlane.bb create mode 100644 _release/help/commands/3d_examples/CreateSphere.bb create mode 100644 _release/help/commands/3d_examples/CreateSprite.bb create mode 100644 _release/help/commands/3d_examples/CreateSurface.bb create mode 100644 _release/help/commands/3d_examples/CreateTerrain.bb create mode 100644 _release/help/commands/3d_examples/CreateTexture.bb create mode 100644 _release/help/commands/3d_examples/Dither.bb create mode 100644 _release/help/commands/3d_examples/EmitSound.bb create mode 100644 _release/help/commands/3d_examples/EntityAlpha.bb create mode 100644 _release/help/commands/3d_examples/EntityAnimTime.bb create mode 100644 _release/help/commands/3d_examples/EntityAnimating.bb create mode 100644 _release/help/commands/3d_examples/EntityAutoFade.bb create mode 100644 _release/help/commands/3d_examples/EntityBlend.bb create mode 100644 _release/help/commands/3d_examples/EntityBox.bb create mode 100644 _release/help/commands/3d_examples/EntityCollided.bb create mode 100644 _release/help/commands/3d_examples/EntityColor.bb create mode 100644 _release/help/commands/3d_examples/EntityDistance.bb create mode 100644 _release/help/commands/3d_examples/EntityFX.bb create mode 100644 _release/help/commands/3d_examples/EntityInView.bb create mode 100644 _release/help/commands/3d_examples/EntityName.bb create mode 100644 _release/help/commands/3d_examples/EntityOrder.bb create mode 100644 _release/help/commands/3d_examples/EntityParent.bb create mode 100644 _release/help/commands/3d_examples/EntityPick.bb create mode 100644 _release/help/commands/3d_examples/EntityPickMode.bb create mode 100644 _release/help/commands/3d_examples/EntityPitch.bb create mode 100644 _release/help/commands/3d_examples/EntityRadius.bb create mode 100644 _release/help/commands/3d_examples/EntityRoll.bb create mode 100644 _release/help/commands/3d_examples/EntityShininess.bb create mode 100644 _release/help/commands/3d_examples/EntityTexture.bb create mode 100644 _release/help/commands/3d_examples/EntityType.bb create mode 100644 _release/help/commands/3d_examples/EntityVisible.bb create mode 100644 _release/help/commands/3d_examples/EntityX.bb create mode 100644 _release/help/commands/3d_examples/EntityY.bb create mode 100644 _release/help/commands/3d_examples/EntityYaw.bb create mode 100644 _release/help/commands/3d_examples/EntityZ.bb create mode 100644 _release/help/commands/3d_examples/FindChild.bb create mode 100644 _release/help/commands/3d_examples/FindSurface.bb create mode 100644 _release/help/commands/3d_examples/FitMesh.bb create mode 100644 _release/help/commands/3d_examples/FlipMesh.bb create mode 100644 _release/help/commands/3d_examples/FreeBrush.bb create mode 100644 _release/help/commands/3d_examples/FreeEntity.bb create mode 100644 _release/help/commands/3d_examples/FreeTexture.bb create mode 100644 _release/help/commands/3d_examples/GetChild.bb create mode 100644 _release/help/commands/3d_examples/GetEntityType.bb create mode 100644 _release/help/commands/3d_examples/GetParent.bb create mode 100644 _release/help/commands/3d_examples/GetSurface.bb create mode 100644 _release/help/commands/3d_examples/GfxDriver3D.bb create mode 100644 _release/help/commands/3d_examples/GfxMode3D.bb create mode 100644 _release/help/commands/3d_examples/GfxModeExists.bb create mode 100644 _release/help/commands/3d_examples/Graphics3D.bb create mode 100644 _release/help/commands/3d_examples/HWMultiTex.bb create mode 100644 _release/help/commands/3d_examples/HandleSprite.bb create mode 100644 _release/help/commands/3d_examples/HideEntity.bb create mode 100644 _release/help/commands/3d_examples/LightColor.bb create mode 100644 _release/help/commands/3d_examples/LightConeAngles.bb create mode 100644 _release/help/commands/3d_examples/LightMesh.bb create mode 100644 _release/help/commands/3d_examples/LightRange.bb create mode 100644 _release/help/commands/3d_examples/LinePick.bb create mode 100644 _release/help/commands/3d_examples/Load3DSound.bb create mode 100644 _release/help/commands/3d_examples/LoadAnimMesh.bb create mode 100644 _release/help/commands/3d_examples/LoadAnimSeq.bb create mode 100644 _release/help/commands/3d_examples/LoadAnimTexture.bb create mode 100644 _release/help/commands/3d_examples/LoadBrush.bb create mode 100644 _release/help/commands/3d_examples/LoadMD2.bb create mode 100644 _release/help/commands/3d_examples/LoadMesh.bb create mode 100644 _release/help/commands/3d_examples/LoadSprite.bb create mode 100644 _release/help/commands/3d_examples/LoadTerrain.bb create mode 100644 _release/help/commands/3d_examples/LoadTexture.bb create mode 100644 _release/help/commands/3d_examples/LoaderMatrix.bb create mode 100644 _release/help/commands/3d_examples/MD2AnimLength.bb create mode 100644 _release/help/commands/3d_examples/MD2AnimTime.bb create mode 100644 _release/help/commands/3d_examples/MD2Animating.bb create mode 100644 _release/help/commands/3d_examples/MeshDepth.bb create mode 100644 _release/help/commands/3d_examples/MeshHeight.bb create mode 100644 _release/help/commands/3d_examples/MeshWidth.bb create mode 100644 _release/help/commands/3d_examples/MeshesIntersect.bb create mode 100644 _release/help/commands/3d_examples/ModifyTerrain.bb create mode 100644 _release/help/commands/3d_examples/MoveEntity.bb create mode 100644 _release/help/commands/3d_examples/NameEntity.bb create mode 100644 _release/help/commands/3d_examples/PaintEntity.bb create mode 100644 _release/help/commands/3d_examples/PaintMesh.bb create mode 100644 _release/help/commands/3d_examples/PaintSurface.bb create mode 100644 _release/help/commands/3d_examples/PickedEntity.bb create mode 100644 _release/help/commands/3d_examples/PickedNX.bb create mode 100644 _release/help/commands/3d_examples/PickedNY.bb create mode 100644 _release/help/commands/3d_examples/PickedNZ.bb create mode 100644 _release/help/commands/3d_examples/PickedSurface.bb create mode 100644 _release/help/commands/3d_examples/PickedTime.bb create mode 100644 _release/help/commands/3d_examples/PickedTriangle.bb create mode 100644 _release/help/commands/3d_examples/PickedX.bb create mode 100644 _release/help/commands/3d_examples/PickedY.bb create mode 100644 _release/help/commands/3d_examples/PickedZ.bb create mode 100644 _release/help/commands/3d_examples/PointEntity.bb create mode 100644 _release/help/commands/3d_examples/PositionEntity.bb create mode 100644 _release/help/commands/3d_examples/PositionMesh.bb create mode 100644 _release/help/commands/3d_examples/PositionTexture.bb create mode 100644 _release/help/commands/3d_examples/ProjectedX.bb create mode 100644 _release/help/commands/3d_examples/ProjectedY.bb create mode 100644 _release/help/commands/3d_examples/ProjectedZ.bb create mode 100644 _release/help/commands/3d_examples/RenderWorld.bb create mode 100644 _release/help/commands/3d_examples/ResetEntity.bb create mode 100644 _release/help/commands/3d_examples/RotateEntity.bb create mode 100644 _release/help/commands/3d_examples/RotateMesh.bb create mode 100644 _release/help/commands/3d_examples/RotateSprite.bb create mode 100644 _release/help/commands/3d_examples/RotateTexture.bb create mode 100644 _release/help/commands/3d_examples/ScaleEntity.bb create mode 100644 _release/help/commands/3d_examples/ScaleMesh.bb create mode 100644 _release/help/commands/3d_examples/ScaleSprite.bb create mode 100644 _release/help/commands/3d_examples/ScaleTexture.bb create mode 100644 _release/help/commands/3d_examples/SetAnimKey.bb create mode 100644 _release/help/commands/3d_examples/ShowEntity.bb create mode 100644 _release/help/commands/3d_examples/SpriteViewMode.bb create mode 100644 _release/help/commands/3d_examples/TFormNormal.bb create mode 100644 _release/help/commands/3d_examples/TFormPoint.bb create mode 100644 _release/help/commands/3d_examples/TFormVector.bb create mode 100644 _release/help/commands/3d_examples/TFormedX.bb create mode 100644 _release/help/commands/3d_examples/TFormedY.bb create mode 100644 _release/help/commands/3d_examples/TFormedZ.bb create mode 100644 _release/help/commands/3d_examples/TerrainDetail.bb create mode 100644 _release/help/commands/3d_examples/TerrainHeight.bb create mode 100644 _release/help/commands/3d_examples/TerrainShading.bb create mode 100644 _release/help/commands/3d_examples/TerrainSize.bb create mode 100644 _release/help/commands/3d_examples/TerrainX.bb create mode 100644 _release/help/commands/3d_examples/TerrainY.bb create mode 100644 _release/help/commands/3d_examples/TerrainZ.bb create mode 100644 _release/help/commands/3d_examples/TextureBlend.bb create mode 100644 _release/help/commands/3d_examples/TextureBuffer.bb create mode 100644 _release/help/commands/3d_examples/TextureCoords.bb create mode 100644 _release/help/commands/3d_examples/TextureFilter.bb create mode 100644 _release/help/commands/3d_examples/TextureHeight.bb create mode 100644 _release/help/commands/3d_examples/TextureWidth.bb create mode 100644 _release/help/commands/3d_examples/TranslateEntity.bb create mode 100644 _release/help/commands/3d_examples/TriangleVertex.bb create mode 100644 _release/help/commands/3d_examples/TurnEntity.bb create mode 100644 _release/help/commands/3d_examples/UpdateNormals.bb create mode 100644 _release/help/commands/3d_examples/UpdateWorld.bb create mode 100644 _release/help/commands/3d_examples/VertexBlue.bb create mode 100644 _release/help/commands/3d_examples/VertexColor.bb create mode 100644 _release/help/commands/3d_examples/VertexCoords.bb create mode 100644 _release/help/commands/3d_examples/VertexGreen.bb create mode 100644 _release/help/commands/3d_examples/VertexNX.bb create mode 100644 _release/help/commands/3d_examples/VertexNY.bb create mode 100644 _release/help/commands/3d_examples/VertexNZ.bb create mode 100644 _release/help/commands/3d_examples/VertexNormal.bb create mode 100644 _release/help/commands/3d_examples/VertexRed.bb create mode 100644 _release/help/commands/3d_examples/VertexTexCoords.bb create mode 100644 _release/help/commands/3d_examples/VertexU.bb create mode 100644 _release/help/commands/3d_examples/VertexV.bb create mode 100644 _release/help/commands/3d_examples/VertexW.bb create mode 100644 _release/help/commands/3d_examples/VertexX.bb create mode 100644 _release/help/commands/3d_examples/VertexY.bb create mode 100644 _release/help/commands/3d_examples/VertexZ.bb create mode 100644 _release/help/commands/3d_examples/WBuffer.bb create mode 100644 _release/help/commands/3d_examples/Windowed3D.bb create mode 100644 _release/help/commands/3d_examples/Wireframe.bb create mode 100644 _release/help/commands/3d_examples/media/Chorme-2.BMP create mode 100644 _release/help/commands/3d_examples/media/Gargoyle/Gargoyle.bmp create mode 100644 _release/help/commands/3d_examples/media/Gargoyle/Gargoyle.md2 create mode 100644 _release/help/commands/3d_examples/media/Gargoyle/GargoyleSkin.PCX create mode 100644 _release/help/commands/3d_examples/media/Height_map.bmp create mode 100644 _release/help/commands/3d_examples/media/MossyGround.BMP create mode 100644 _release/help/commands/3d_examples/media/b3dlogo.jpg create mode 100644 _release/help/commands/3d_examples/media/height_map_1024.bmp create mode 100644 _release/help/commands/3d_examples/media/kaboom.bmp create mode 100644 _release/help/commands/3d_examples/media/oil-drum/oildrum.3ds create mode 100644 _release/help/commands/3d_examples/media/oil-drum/oildrum.jpg create mode 100644 _release/help/commands/3d_examples/media/sky.bmp create mode 100644 _release/help/commands/3d_examples/media/wood-crate/wcrate.jpg create mode 100644 _release/help/commands/3d_examples/media/wood-crate/wcrate1.3ds create mode 100644 _release/help/commands/3d_examples/template.bb create mode 100644 _release/help/commands/command_list.htm create mode 100644 _release/help/commands/css/commands.css create mode 100644 _release/help/commands/css/commands_old.css create mode 100644 _release/help/commands/css/readme.txt create mode 100644 _release/help/commands/index.htm create mode 100644 _release/help/commands/scancodes.htm create mode 100644 _release/help/credits.html create mode 100644 _release/help/index.html create mode 100644 _release/help/language/index.html create mode 100644 _release/help/language/lang_ref.css create mode 100644 _release/help/language/lang_ref_arrays.html create mode 100644 _release/help/language/lang_ref_basicdatatypes.html create mode 100644 _release/help/language/lang_ref_comments.html create mode 100644 _release/help/language/lang_ref_constants.html create mode 100644 _release/help/language/lang_ref_customtypes.html create mode 100644 _release/help/language/lang_ref_expressions.html create mode 100644 _release/help/language/lang_ref_functions.html create mode 100644 _release/help/language/lang_ref_identifiers.html create mode 100644 _release/help/language/lang_ref_intro.html create mode 100644 _release/help/language/lang_ref_keywords.html create mode 100644 _release/help/language/lang_ref_programflow.html create mode 100644 _release/help/language/lang_ref_variables.html create mode 100644 _release/help/language/navbar.html create mode 100644 _release/help/language/title.html diff --git a/_release/help/b3dlogo.jpg b/_release/help/b3dlogo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..03f6411a5a79eedb93785d3cf4729be479b537ec GIT binary patch literal 4902 zcmbtXc|25Y`#)ps>9IsY(IBM7zSU$Zdm_6crU==RoiOvXipp**lXYZiA$zu_l8`M+ zgix9Vp{E()Fy_36=Y5~|eLlbU_xtB}&F8+(T+6xd?|ogL`?~G}eS*FKLZ^()i~$4( z0x*St0JMP6w7MJ+5)gbj;ObtD!>WMpNiz%N0ZfFts?Zl-3HxJ;_=5h#V9JmE={6$FkACeR1 zNKP)!P2%F_+9Gal9v)sE9&SE9etteafxi<1i9~X7a`AC<^KIwndDi{k^{==oKK$3+MsCNQ5xJA&fu@BcQj4LKq+qVv{zZZW1RKl7kxo@bL2SZ-bM| zf&5P^tbkE-ZyALE4j2>%CkHnV5@sC12o9t$C%}agQ9EJHz2l;6;B`^;~#A>KIq2JeFmDgDTP(;!Edw-6;nyo+TwPXLRtr=c@=K*@$Ztjm1bmIRO2vc zuO!L%#(XHF)D3FiI{skldWSNTff!A7Lct zCSopY7%_L?^i(`t^Jw&r*T& zo)vo3LX1>Q{`>^Si@xhQ<)^ZK#r{y4YSMs4d59$pl?;8@!XK$fFUgJm4*G+Rw2C8a z7q+Vl+XrknG==+ljRraxfbO(2YLV>>W+%>v8IbP9 z(8*%8lE$##CoLNe4ti$4iJDT4v>lS=%GOaHa^>FZQFUs|miH8%C@MXO zjZQ={*LN@We&{-vt4pe79(xt+jv?q@(n>tVGi3b#Hz3P1y%8sR! zZ|$AyGB4wHrjFTH*JK!xqAs@!V_GqdO#jV#H8;R^5q zAwZ#ae7nsd<#*O%`8U`?7cSvE2a`frIbE}O;IOfi4r!8Zd%M&L?e=YG)y zHQ%ymi%BRnRI9#LB~-{qencmpFOQ-dyLeq7Y;v?rfEmH>*ZJ(L%^(np`SrQ zvv;mL1aPuj7hFH|e{C;%jZRiqI4^fEX*{ECt|jZE_tNCy(^bF+ zDPG5U;YY|ZQkg`pggRDF^ocDT)-`yX?7!kw{Sg9=)J$m4jlMV&5bXZgaAuNIE3^2D z;*E$NQ=#dzQ7hC~8ktI`W71K~c4}#)Dg>wgLD32k|Q0xtwBS5^~`QLHY|n&NL@ zH^gcvnq6~Qcr;usui?UYS!*_N?n}JrUJc1;q@VqYS2pa7z|bX|6Cpr%1Rk^C3aw8M zY%;25wZ3GWV0E_;7C+9&$%F~iItd{KL*JH&o7T}EcnOIXt;tm%5zw00cj z8Kx8G#>{O1E9eJiuGI9XI1Kqcs;eCEr(&PFx}4a4OC9%<94bVsz2b%A6w!M!9{?`( z)`Isgg2D6_nJx%OmvpV5{$jq&4?WZEoa44l>Q>g5ItVza{btgeayE?*Q6brJe6k_E zmE)L=+*d!HnH_krbAR*gi{Ln|jcHMlsW3D?$C#@hL(jNTmiyJ^6%5283V@U&%e{jq z2pB@FfW=6R9-5uc=u?Vh7}m1ps#q_Ev|@DL*WnDCTcR+kE(V85^24c4EbB~;8^YsB z97QV158n-WWU8v`7aV$0JV6zcrUi;q_Kf6^_l8vTsc8BT8W%I3oO_q+#-L7D+TxzULI4&zSm`VCP>_r4NJd{<<_`$I_%TSaR|t}2A(lym{7zZfPf}n z8(A|>rzfhnd0eIJRNJ`vQ@{wZ*H+JUV6dIL&?<4SQ(#Bt;yO|FT$30c8eC^8XCxRp zD7l=9-4iETuDt5Y4y3aKNz8DDU{5xgh*2ZcRaqaw7OGU!{zClzNP-9<*>e7AhRnH^ zm(7{j<4UP&?w zbdC}#j}Z%+PWx=6PwxGJjJB8AWynPS@;L~&mSOddx5LBrZFhjc7r2{ZKpz} zij{xnflDi_Zx!k2R(ctkE{oUr6(e!9;>d}M%+1abN36pPVi${-| zAN3MXVePCm<PyGWsq zP@Be8AOO`?lEoU00qemwYCj#L3(Bq-GsLRpulYZi#u^JtA5Bl#=4I#fdnLoosU)Ar zv3x;5w=!aV)k;UM*MRlm^t}sN4_A+WetsGKh%WekyKHAPHSjS=XZ(0y$?Qkx6?9a; z4v*@56fc&bF=yr&G=2av(yAKra$;G&GU6qMH||p}T1F<8n3qu9N3Op@X%e`ctpH|h5*8(<$^SIRUg%fMtTYa|}T!3pR+j&qMJH$#(4TM7t) zDl^20Z%6#^pEBZPH0rck)}o1Zk@~S?iI>;Iv1~3`xo|tQZsM$nUQ7vT+^1~h@9HM9>xWv zyB_}5w~@%Qg@(ROF@J40>6Tg2p<50{w?Cf!!#NUZ+H9flo)ID9rr0bZW=c7J7T`k$ zA=)z z7qth>RFg;TcQwSzyNVcFG3LUj>U=|OJ1kC~*Q8y%4^$nV^q~FN-&Pb!`|-ZfufLI) ziK+{*Grc>)|KL@JHhSBKJiqttnXBi6W&}SC9>h0)O>}JX!K58=O)VUQfTFYKTiqof zK*ZHbagKa~>nNwM(-8 z;bAoS*{tuA(eJ9}+ytgZyL^CD-1Re-rmLL?18aQDQ0J}}%;s3yqNL`SDfH^uGe_7~ zpr9S2xlu6%-6+qj%ktKm_bw(jR1`0@IY>Mk)88X{!#=y{hM-^jozuw~rSor{zg>~@!g>IsgV`TSj55b}C4yZ6-2t84X0j2@Bru0mk)_#WAW>4{U*_%RsaA^N zi?Y`g-RpI9OuBCwN8U{;ZQb$K4+6GBz@rlHqJ*K(U6mXS0khvtoW@>CN!R-RkS4ggJM1@!!0pG@ zsj~VG3qkAHu`I5L+C=~tJ3B(CQHpLLjm=t{c-}#*)1TLvE4lPJ2%#?2f)BqhH6D~S zjfg<)G7Py3#3bC*Cn-b*Qj*h}I;--mB0P;W$MXdwH^z%ZDyJbaX62-l1FrE zPp)-7B;93JKe)7^zb)O`Lw?|3;W-5Z2Mx*iur{pLoD7qSQJSlYgKuH*ZKyqH4mdt` zDBm8LZ!az?IvZbD0|6idZizLe+1mucjz0Ah$a*=!8FL-0p^|-$IlmwMB}Gw;SJyUB z>b0iWz|AX94wN

CR&&;oPI{;H^virH2}>jU>AVJ5fsQWmoF3r4Z1UAF|+VmSIGO z3v3EgbXZ5=Ss3^2OBFhjwnL#0cg`I7)qT)~cvJd}h}!2MMo^V+6(tsNRCN_k?|5la zmwoge9_&z2dmXrq=T5{@lzoVYmcY})KD>B3nP@brapEoLHE@V$(dv1j7Ii|i?* zs(OOm=XAnZFB6>oYQv7MmLR04iP6OaaL+rzkd!tDA%G?pAWU+CfKf}!kHPRHNvwOQ zr|>?c-Gaj9XNF7I@2;l$ltF-@2}90sZz^-WTf~q&akFsrBkr`9yr5r1@@dy^?C8Aw zPp7)`9yTtL1XU(FeT$t;_Daw0YtyH_0e(22*le<%jPaY2?91SDHJ_9lBM0zFQCf&rj?B_|mR`M*jh|?tg3m literal 0 HcmV?d00001 diff --git a/_release/help/commands/2d_commands/ACos.htm b/_release/help/commands/2d_commands/ACos.htm new file mode 100644 index 0000000..47b49a2 --- /dev/null +++ b/_release/help/commands/2d_commands/ACos.htm @@ -0,0 +1,38 @@ +Command: ACos   ACos (number)  

Definition:

Returns the smallest angle (in degrees) satisfying the arc cosine (inverse cosine) of the supplied argument.

Parameter Description:


number=float or integer representing a ratio of the "X" coordinate to the tangential displacement.

Command Description:

This command is used for translating X/Y coordinate values to angles. Remember that the computer screen uses an inverted y-axis (values get larger the further down the screen).

Example:

Graphics 640,480
+Repeat
+Cls
+; Determine the positions and the length of the hypotenuse
+x# = MouseX() ; displacement across the screen.
+y# = MouseY() ; displacement down the screen.
+r# = Sqr((x#*x#)+(y#*y#)) ; length of the hypotenuse.
+
+; Draw the axes
+Color 104,104,104
+Line x#,0,x#,y# ; draw a line from the top to the cursor.
+Line 0,y#,x#,y# ; draw a line from the left to the cursor.
+Locate x#+10,y#-10 : Write "X=" : Print x#
+Locate x#-10,y#+10 : Write "Y=" :Print y#
+
+; reset any drawing to the top right
+Origin 0,0
+
+; Draw the angled line
+Color 255,255,255
+Line 0,0,x#,y# ; draw a line from the top right corner of the screen to the cursor.
+theta# = ACos(x#/r#) ; the angle between the x axis and the y axis.
+Locate 60,10 : Write "Angle:" : Print theta
+
+; Draws an arc showing the angle.
+For degrees#=0 To theta#; Step though all the degrees in the angle
+; The next line calculates the X and Y coordinates of the point of the circle using the Sin and Cos
+; commands, and multiplies it by 50 (to get a larger radius, try and change it).
+cy=Sin(degrees#)*50
+cx=Cos(degrees#)*50
+Plot cx,cy ; Draw the current point on the circle.
+Next ; Give us another angle
+
+Flip
+; Use the ESCAPE key to quit
+Until KeyDown(1)
+

Index

+ diff --git a/_release/help/commands/2d_commands/ASin.htm b/_release/help/commands/2d_commands/ASin.htm new file mode 100644 index 0000000..1660c79 --- /dev/null +++ b/_release/help/commands/2d_commands/ASin.htm @@ -0,0 +1,38 @@ +Command: ASin   ASin (number)  

Definition:

Returns the smallest angle (in degrees) satisfying the arc sine (inverse sine) of the supplied argument.

Parameter Description:


number=float or integer representing a ratio of the "Y" coordinate to the tangential displacement.

Command Description:

This command is used for translating X/Y coordinate values to angles. Remember that the computer screen uses an inverted y-axis (values get larger the further down the screen).

Example:

Graphics 640,480
+Repeat
+Cls
+; Determine the positions and the length of the hypotenuse
+x# = MouseX() ; displacement across the screen.
+y# = MouseY() ; displacement down the screen.
+r# = Sqr((x#*x#)+(y#*y#)) ; length of the hypotenuse.
+; Draw the axes
+Color 104,104,104
+Line x#,0,x#,y# ; draw a line from the top to the cursor.
+Line 0,y#,x#,y# ; draw a line from the left to the cursor.
+Locate x#+10,y#-10 : Write "X=" : Print x#
+Locate x#-10,y#+10 : Write "Y=" :Print y#
+
+; reset any drawing to the top right
+Origin 0,0
+
+; Draw the angled line
+Color 255,255,255
+Line 0,0,x#,y# ; draw a line from the top right corner of the screen to the cursor.
+theta# = ASin(y#/r#) ; the angle between the x axis and the y axis.
+Locate 60,10 : Write "Angle:" : Print theta
+
+; Draws an arc showing the angle.
+For degrees#=0 To theta#; Step though all the degrees in the angle
+; The next line calculates the X and Y coordinates of the point of the circle using the Sin and Cos
+; commands, and multiplies it by 50 (to get a larger radius, try and change it).
+cy=Sin(degrees#)*50
+cx=Cos(degrees#)*50
+Plot cx,cy ; Draw the current point on the circle.
+Next ; Give us another angle
+
+Flip
+; Use the ESCAPE key to quit
+Until KeyDown(1)
+End
+

Index

+ diff --git a/_release/help/commands/2d_commands/ATan.htm b/_release/help/commands/2d_commands/ATan.htm new file mode 100644 index 0000000..e272551 --- /dev/null +++ b/_release/help/commands/2d_commands/ATan.htm @@ -0,0 +1,27 @@ +Command: ATan   ATan (float)  

Definition:

Returns the angle from the X axis to a point (y,x).

Parameter Description:


float = floating point value (degrees)

Command Description:

Aside from its basic trig usage, this nifty command will allow you to derive an angle based on the x and y speed of a travelling object. Also see ATan2.
+

Example:

; Set graphics w/double buffering
+Graphics 640,480,16,0
+SetBuffer BackBuffer()
+
+; Starting point for our travelling box
+x=0
+y=0
+
+; random speed values for travelling
+xSpeed#=Rand(5)
+ySpeed#=Rand(5)
+
+; repeat until the ESC or box travels off the screen
+While Not KeyHit(1) Or y > 480 Or x > 640
+Cls
+; Draw our box
+Rect x,y,10,10,1
+; increment the box location based on random speed
+x=x+xSpeed
+y=y+yspeed
+; print the angle of our box travel
+Text 0,0,ATan(yspeed/xspeed)
+Flip
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/ATan2.htm b/_release/help/commands/2d_commands/ATan2.htm new file mode 100644 index 0000000..6320870 --- /dev/null +++ b/_release/help/commands/2d_commands/ATan2.htm @@ -0,0 +1,29 @@ +Command: ATan2   ATan2 (xvalue,yvalue)  

Definition:

Returns the angle from the X axis to a point (y,x).

Parameter Description:


(yvalue,xvalue)

Command Description:

Aside from its basic trig usage, this nifty command will allow you to derive an angle based on the x and y speed of a travelling object.
+

Example:

; Atan2 example
+
+; Set graphics w/double buffering
+Graphics 640,480,16,0
+SetBuffer BackBuffer()
+
+; Starting point for our travelling box
+x=0
+y=0
+
+; random speed values for travelling
+xSpeed=Rand(5)
+ySpeed=Rand(5)
+
+; repeat until the ESC or box travels off the screen
+While Not KeyHit(1) Or y > 480 Or x > 640
+Cls
+; Draw our box
+Rect x,y,10,10,1
+; increment the box location based on random speed
+x=x+xSpeed
+y=y+yspeed
+; print the angle of our box travel
+Text 0,0,ATan2(yspeed,xspeed)
+Flip
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/Abs.htm b/_release/help/commands/2d_commands/Abs.htm new file mode 100644 index 0000000..ff7e94e --- /dev/null +++ b/_release/help/commands/2d_commands/Abs.htm @@ -0,0 +1,7 @@ +Command: Abs   Abs (number)  

Definition:

Returns the absolute (positive) value of a number.

Parameter Description:


number = any valid number or numeric variable

Command Description:

Use this command to return the absolute value of a number; meaning its positive value. A negative 3 would become a positive 3. If what you want is a number without a fraction (say, convert 3.1415 into 3) use the Int() command.

Example:

number=-3
+
+Print "The absolute value of " + number + " is: " + Abs(number)
+
+WaitKey()
+

Index

+ diff --git a/_release/help/commands/2d_commands/AcceptTCPStream.htm b/_release/help/commands/2d_commands/AcceptTCPStream.htm new file mode 100644 index 0000000..8c2bfa2 --- /dev/null +++ b/_release/help/commands/2d_commands/AcceptTCPStream.htm @@ -0,0 +1,57 @@ +Command: AcceptTCPStream   AcceptTCPStream (serverhandle)  

Definition:

Accepts an incoming TCP/IP stream.

Parameter Description:


serverhandle = the server handle assigned when the server was created

Command Description:

Accepts an incoming TCP/IP stream, and returns a TCP/IP stream if one is available, or 0 if not.
+
+See CreateTCPServer and CloseTCPServer.

Example:

; CreateTCPServer, CloseTCPServer, AcceptTCPStream Example
+; This code is in two parts, and needs to be run seperately on the same machine
+
+; --- Start first code set ---
+; Create a server and listen for push
+
+svrGame=CreateTCPServer(8080)
+
+If svrGame<>0 Then
+Print "Server started successfully."
+Else
+Print "Server failed to start."
+End
+End If
+
+While Not KeyHit(1)
+strStream=AcceptTCPStream(svrGame)
+If strStream Then
+Print ReadString$(strStream)
+Delay 2000
+End
+Else
+Print "No word from Apollo X yet ..."
+Delay 1000
+End If
+Wend
+
+End
+
+; --- End first code set ---
+
+
+; --- Start second code set ---
+; Copy this code to another instance of Blitz Basic
+; Run the above code first, then run this ... they will 'talk'
+
+; Create a Client and push data
+
+strmGame=OpenTCPStream("127.0.0.1",8080)
+
+If strmGame<>0 Then
+Print "Client Connected successfully."
+Else
+Print "Server failed to connect."
+WaitKey
+End
+End If
+
+; write stream to server
+WriteString strmGame,"Mission Control, this is Apollo X ..."
+Print "Completed sending message to Mission control..."
+
+; --- End second code set ---
+

Index

+ diff --git a/_release/help/commands/2d_commands/After.htm b/_release/help/commands/2d_commands/After.htm new file mode 100644 index 0000000..41e6464 --- /dev/null +++ b/_release/help/commands/2d_commands/After.htm @@ -0,0 +1,43 @@ +Command: After   After custom_type_variable  

Definition:

Move the object pointer to the next object in the Type collection.

Parameter Description:


custom_type_variable = not the Type name, but the custom Type name

Command Description:

If you haven't read up on the TYPE + command, you might want to do so before continuing.

+

Use this to assign a custom Type object to the next object in the collection. + See the example.

Example:

; Define a crafts Type

+

Type crafts
+ Field x
+ Field y
+ Field dead
+ Field graphic
+ End Type

+

; Create 100 crafts, with the unique name of alien
+ For t = 1 To 100
+ alien.crafts = New crafts
+ alien\x = Rnd(0,640)
+ alien\y = Rnd(0,480)
+ alien\dead = 0
+ alien\graphic = 1
+ Next

+

; Move to the first object
+ alien.crafts = First crafts

+

Print alien\x
+ Print alien\y
+ Print alien\dead
+ Print alien\graphic

+

; move to the next alien object
+ alien = After alien

+

Print alien\x
+ Print alien\y
+ Print alien\dead
+ Print alien\graphic

+

; move to the last alien object
+ alien.crafts = Last crafts

+

Print alien\x
+ Print alien\y
+ Print alien\dead
+ Print alien\graphic

+

; move to the second to the last alien object
+ alien = Before alien

+

Print alien\x
+ Print alien\y
+ Print alien\dead
+ Print alien\graphic

Index

+ diff --git a/_release/help/commands/2d_commands/And.htm b/_release/help/commands/2d_commands/And.htm new file mode 100644 index 0000000..454dd6c --- /dev/null +++ b/_release/help/commands/2d_commands/And.htm @@ -0,0 +1,12 @@ +Command: And   And   

Definition:

Logical operator comparative command for testing expressions.

Parameter Description:


None.

Command Description:

AND is a logical operator for doing conditional checks of multiple values and/or expressions. Use this to ensure that two or more conditions are true, usually in an IF ... THEN conditional. See example and see OR, NOT, and XOR.

Example:

; AND example
+
+name$=Input$("Enter your name:")
+pw$=Input$("Password:")
+
+if name$="Shane" and pw$="bluedog" then
+print "Access granted! Welcome!"
+else
+print "Your name or password was not recogized"
+end if
+

Index

+ diff --git a/_release/help/commands/2d_commands/AppTitle.htm b/_release/help/commands/2d_commands/AppTitle.htm new file mode 100644 index 0000000..2340101 --- /dev/null +++ b/_release/help/commands/2d_commands/AppTitle.htm @@ -0,0 +1,5 @@ +Command: AppTitle   AppTitle string  

Definition:

Sets the title bar of the program.

Parameter Description:


string = any legal string variable

Command Description:

Allows you to set the text of the program's Title Bar.

Example:

; Set the title bar
+
+AppTitle "Super Invaders V1.0"
+

Index

+ diff --git a/_release/help/commands/2d_commands/Asc.htm b/_release/help/commands/2d_commands/Asc.htm new file mode 100644 index 0000000..9dea555 --- /dev/null +++ b/_release/help/commands/2d_commands/Asc.htm @@ -0,0 +1,4 @@ +Command: Asc   Asc (string$)  

Definition:

Returns the ASCII value of the first letter of a string.

Parameter Description:


string$ = any valid string variable (only the first character's ASCII value will be returned).

Command Description:

This will return the ASCII value of the first letter of a string.

Example:

a$=Input$("Enter a letter:")
+Print "The ASCII value of the letter is:" + Asc(a$)
+

Index

+ diff --git a/_release/help/commands/2d_commands/AutoMidHandle .htm b/_release/help/commands/2d_commands/AutoMidHandle .htm new file mode 100644 index 0000000..93ec547 --- /dev/null +++ b/_release/help/commands/2d_commands/AutoMidHandle .htm @@ -0,0 +1,55 @@ +Command: AutoMidHandle   AutoMidHandle true/false  

Definition:

Automatically sets the image handle of loaded images to the middle of the image.

Parameter Description:


true = images load with midhandle set as default
+false = images load with default image handles at 0,0

Command Description:

When an image is loaded with LoadImage, the image handle (the location within the image where the image is 'drawn from') is always defaulted to the top left corner (coordinates 0,0). This means if you draw an image that is 50x50 pixels at screen location 200,200, the image will begin to be drawn at 200,200 and extend to 250,250.
+
+The MidHandle command moves the image's handle to the middle of the image. See this command for more information about the image's handle.
+
+This command eliminates the need for the MidHandle command by making ALL subsequently loaded images default to having their image handles set to mid.
+
+Note about the term 'handle'. There are two types of 'handles' we discuss in these documents. One is the location within an image - as discussed in this command. The other is a 'file handle', a variable used to hold an image, sound, or font loaded with a command. See LoadImage for more information about file handles.

Example:

; MidHandle/ImageXHandle()/ImageYHandle()/AutoMidHandle
+
+; Initiate Graphics Mode
+Graphics 640,480,16
+
+; Set up the image file handle as a global
+Global gfxBall
+
+; Load the image - you may need to change the location of the file
+gfxBall=LoadImage ("C:\Program Files\Blitz Basic\samples\ball.bmp")
+
+; Until the user presses ESC key ...
+While Not KeyHit(1)
+Text 0,0,"Default Image Handle for gfxBall... Press ESC ..."
+Text 0,14,"X handle-" + ImageXHandle(gfxBall) ; Print the location of the image handle x location
+Text 0,28,"Y handle-" + ImageYHandle(gfxBall) ; Print the location of the image handle y location
+DrawImage gfxBall,200,200,0 ; draw the image at 200,200
+Wend
+
+; Clear the screen
+Cls
+
+; Set the ball's handle to the center of the image
+MidHandle gfxBall
+
+; Until the user presses ESC key ... show the new information
+While Not KeyHit(1)
+Text 0,0,"New Image Handle for gfxBall... Press ESC ..."
+Text 0,14,"X handle-" + ImageXHandle(gfxBall)
+Text 0,28,"Y handle-" + ImageYHandle(gfxBall)
+DrawImage gfxBall,200,200,0
+Wend
+
+; Makes all images load up with their handles in the center of the image
+AutoMidHandle True
+Cls
+
+; Load the image again
+gfxBall=LoadImage ("C:\Program Files\Blitz Basic\samples\ball.bmp")
+
+; Until the user presses ESC key ... show the new information
+While Not KeyHit(1)
+Text 0,0,"Automatic image handle of gfxBall... Press ESC ..."
+Text 0,14,"X handle-" + ImageXHandle(gfxBall)
+Text 0,28,"Y handle-" + ImageYHandle(gfxBall)
+DrawImage gfxBall,200,200,0
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/AvailVidMem.htm b/_release/help/commands/2d_commands/AvailVidMem.htm new file mode 100644 index 0000000..0ca733c --- /dev/null +++ b/_release/help/commands/2d_commands/AvailVidMem.htm @@ -0,0 +1,2 @@ +Command: AvailVidMem()   AvailVidMem()   

Definition:

Returns the available free video memory.

Parameter Description:


None.

Command Description:

This command will return the total bytes of available free video memory. Use this to keep track of your resources!

Example:

Print "Your available video memory is: " + AvailVidMem()

Index

+ diff --git a/_release/help/commands/2d_commands/BackBuffer.htm b/_release/help/commands/2d_commands/BackBuffer.htm new file mode 100644 index 0000000..88e450d --- /dev/null +++ b/_release/help/commands/2d_commands/BackBuffer.htm @@ -0,0 +1,21 @@ +Command: BackBuffer()   BackBuffer()   

Definition:

Indicates the BackBuffer drawing buffer.

Parameter Description:


None.

Command Description:

This is a value usually used with SETBUFFER to denote the secondary non-visible drawing buffer called the Back Buffer. In MOST gaming situations, you will want to be using the BackBuffer() for drawing operations then using Flip to bring that buffer to the FrontBuffer() where it can be seen. There are other uses for the command, but this is the biggie. See SETBUFFER for more info, and check out the example. Once again - if you set drawing operations to the BackBuffer() you will NOT see any of them until you call FLIP.

Example:

; Flip/Backbuffer()/Rect Example
+
+; Set Graphics Mode
+Graphics 640,480
+
+; Go double buffering
+SetBuffer BackBuffer()
+
+; Setup initial locations for the box
+box_x = -20 ; negative so it will start OFF screen
+box_y = 100
+
+While Not KeyHit(1)
+Cls ; Always clear screen first
+Rect box_x,box_y,20,20,1 ; Draw the box in the current x,y location
+Flip ; Flip it into view
+box_x = box_x + 1 ; Move the box over one pixel
+If box_x = 640 Then box_x=-20 ; If it leaves the Right edge, reset its x location
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/BankSize.htm b/_release/help/commands/2d_commands/BankSize.htm new file mode 100644 index 0000000..9d29bc7 --- /dev/null +++ b/_release/help/commands/2d_commands/BankSize.htm @@ -0,0 +1,20 @@ +Command: BankSize   BankSize (bankhandle)  

Definition:

Returns the size of a bank.

Parameter Description:


bankhandle=handle assigned to the bank when created.

Command Description:

Use this command to determing the size of an existing bank. See CreateBank, ResizeBank, and CopyBank.

Example:

; BankSize, ResizeBank, CopyBank Example
+
+; create a bank
+bnkTest=CreateBank(5000)
+
+; Fill it with rand Integers
+For t = 0 To 4999
+PokeByte bnkTest,t,Rand(9)
+Next
+
+; Resize the bank
+ResizeBank bnkTest,10000
+
+; Copy the first half of the bank to the second half
+CopyBank bnkTest,0,bnkTest,5000,5000
+
+; Print final banksize
+Print BankSize(bnkTest)
+

Index

+ diff --git a/_release/help/commands/2d_commands/Before.htm b/_release/help/commands/2d_commands/Before.htm new file mode 100644 index 0000000..6e1bef6 --- /dev/null +++ b/_release/help/commands/2d_commands/Before.htm @@ -0,0 +1,43 @@ +Command: Before   Before custom_type_variable  

Definition:

Move the object pointer to the previous object in the Type collection.

Parameter Description:


custom_type_variable = not the Type name, but the custom Type name

Command Description:

If you haven't read up on the TYPE + command, you might want to do so before continuing.

+

Use this to assign a custom Type object to the previous object in the collection. + See the example.

Example:

; Define a crafts Type

+

Type crafts
+ Field x
+ Field y
+ Field dead
+ Field graphic
+ End Type

+

; Create 100 crafts, with the unique name of alien
+ For t = 1 To 100
+ alien.crafts = New crafts
+ alien\x = Rnd(0,640)
+ alien\y = Rnd(0,480)
+ alien\dead = 0
+ alien\graphic = 1
+ Next

+

; Move to the first object
+ alien.crafts = First crafts

+

Print alien\x
+ Print alien\y
+ Print alien\dead
+ Print alien\graphic

+

; move to the next alien object
+ alien = After alien

+

Print alien\x
+ Print alien\y
+ Print alien\dead
+ Print alien\graphic

+

; move to the last alien object
+ alien.crafts = Last crafts

+

Print alien\x
+ Print alien\y
+ Print alien\dead
+ Print alien\graphic

+

; move to the second to the last alien object
+ alien = Before alien

+

Print alien\x
+ Print alien\y
+ Print alien\dead
+ Print alien\graphic

Index

+ diff --git a/_release/help/commands/2d_commands/Bin.htm b/_release/help/commands/2d_commands/Bin.htm new file mode 100644 index 0000000..90045f2 --- /dev/null +++ b/_release/help/commands/2d_commands/Bin.htm @@ -0,0 +1,3 @@ +Command: Bin$   Bin$ (integer)  

Definition:

Converts an integer value to a binary value.

Parameter Description:


integer = any valid integer or integer variable

Command Description:

Converts integer values into binary values. If you don't know what binary is, you don't need to know this command :)

Example:

intValue="64738"
+Print "The binary value of "+intValue+" is: " + bin$(intValue)

Index

+ diff --git a/_release/help/commands/2d_commands/CPUTimer.htm b/_release/help/commands/2d_commands/CPUTimer.htm new file mode 100644 index 0000000..f1d5944 --- /dev/null +++ b/_release/help/commands/2d_commands/CPUTimer.htm @@ -0,0 +1,7 @@ +Command: CPUTimer()   CPUTimer()   

Definition:

Returns the current value of the CPU timer.

Parameter Description:


None.

Command Description:

This returns a constantly counting up timer, apparently from the CPU. Seems to always be negative. This could be useful for soem randomize seed, but for any sort of 'time tracking', I would use Millisecs(). This command could be outdated, and just not removed from the product.

Example:

;CPUTIMER() example
+
+While Not keyhit(1)
+Print CPUTimer()
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/Case.htm b/_release/help/commands/2d_commands/Case.htm new file mode 100644 index 0000000..0453757 --- /dev/null +++ b/_release/help/commands/2d_commands/Case.htm @@ -0,0 +1,27 @@ +Command: Case   Case value  

Definition:

Begins the set of commands in a SELECT structure if the value of SELECT is met.

Parameter Description:


value = any valid value of the SELECT variable

Command Description:

When using a SELECT structure, the CASE command defines the starting point of command execution if the SELECT value matches the CASE value. If the SELECT value doesn't match the CASE value, the commands following it are ignored until the next CASE, DEFAULT, or END SELECT command is encountered. See SELECT and the example for a better understanding.

Example:

; SELECT/CASE/DEFAULT/END SELECT Example
+; Assign a random number 1-10
+mission=Rnd(1,10)
+
+; Start the selection process based on the value of 'mission' variable
+Select mission
+
+; Is mission = 1?
+Case 1
+Print "Your mission is to get the plutonium and get out alive!"
+
+; Is mission = 2?
+Case 2
+Print "Your mission is to destroy all enemies!"
+
+; Is mission = 3?
+Case 3
+Print "Your mission is to steal the enemy building plans!"
+
+; What do do if none of the cases match the value of mission
+Default
+Print "Missions 4-10 are not available yet!"
+
+; End the selection process
+End Select
+

Index

+ diff --git a/_release/help/commands/2d_commands/Ceil.htm b/_release/help/commands/2d_commands/Ceil.htm new file mode 100644 index 0000000..d418703 --- /dev/null +++ b/_release/help/commands/2d_commands/Ceil.htm @@ -0,0 +1,12 @@ +Command: Ceil#   Ceil# (float)  

Definition:

Rounds a decimal floating variable up to the nearest whole number.

Parameter Description:


float=floating point number

Command Description:

Many times, you will need to round up or down a floating point decimal variable. This command rounds it up to the nearest whole number. Use Floor# to round the number down.

Example:

; Floor#/Ceil# Example
+
+; Set a floating point variable
+myVal#=0.5
+
+; Round it up
+Print Floor#(myval)
+
+;Round it down
+Print Ceil#(myval)
+

Index

+ diff --git a/_release/help/commands/2d_commands/ChangeDir.htm b/_release/help/commands/2d_commands/ChangeDir.htm new file mode 100644 index 0000000..14cf4f1 --- /dev/null +++ b/_release/help/commands/2d_commands/ChangeDir.htm @@ -0,0 +1,6 @@ +Command: ChangeDir   ChangeDir directory/path  

Definition:

Changes the currently selected directory for file operations.

Parameter Description:


directory/path = full path to directory/folder

Command Description:

This command will change the currently selected directory for disk operations, useful for advanced file operations. Use CURRENTDIR$() to see what the current directory is.
+Use a directory/path of ".." to change to the parent of the current directory, unless you are at the root directory of the drive, then no change happens.

Example:

; ChangeDir example
+
+ChangeDir "c:\winnt\system32"
+Print "The folder has been changed to: " + currentdir$()

Index

+ diff --git a/_release/help/commands/2d_commands/ChannelPan.htm b/_release/help/commands/2d_commands/ChannelPan.htm new file mode 100644 index 0000000..5f6cc28 --- /dev/null +++ b/_release/help/commands/2d_commands/ChannelPan.htm @@ -0,0 +1,43 @@ +Command: ChannelPan   ChannelPan channel_handle, pan#  

Definition:

Pans sound channel between the left and right channels.

Parameter Description:


channel_handle = variable assigned to the channel when played
+pan# = panning floating value to denote channel playback

Command Description:

When you want to do real sound panning effects, this is the command you'll use. This will allow you to pan the sound channels on a 'per channel' basis between the left and right speakers. This command makes it very easy to produce some really killer stereophonic effects!
+
+The pan value is between -1 and 1 with 0 being perfect center. -1 is full left, and 1 is full right. To make it somewhere in between, try -.5 for 50% left or .75 for 75% right.

Example:

; Channel examples
+
+Print "Loading sound ..."
+; Load the sample - you'll need to point this to a sound on your computer
+; For best results, make it about 5-10 seconds...
+sndWave=LoadSound("level1.wav")
+; Prepare the sound for looping
+LoopSound sndWave
+
+chnWave=PlaySound(sndWave)
+
+Print "Playing sound for 2 seconds ..."
+Delay 2000
+
+Print "Pausing sound for 2 seconds ..."
+PauseChannel chnWave
+Delay 2000
+
+Print "Restarting sound ..."
+ResumeChannel chnWave
+Delay 2000
+
+Print "Changing Pitch of sound ..."
+ChannelPitch chnWave, 22000
+Delay 2000
+
+Print "Playing new pitched sound ..."
+Delay 2000
+
+Print "Left speaker only"
+ChannelPan chnWave,-1
+Delay 2000
+
+Print "Right speaker only"
+ChannelPan chnWave,1
+Delay 2000
+
+Print "All done!"
+StopChannel chnWave

Index

+ diff --git a/_release/help/commands/2d_commands/ChannelPitch.htm b/_release/help/commands/2d_commands/ChannelPitch.htm new file mode 100644 index 0000000..a325f2d --- /dev/null +++ b/_release/help/commands/2d_commands/ChannelPitch.htm @@ -0,0 +1,43 @@ +Command: ChannelPitch   ChannelPitch channel_handle, hertz  

Definition:

Alters the hertz pitch of a playing sound channel.

Parameter Description:


channel_handle = variable assigned to the channel when played
+hertz = pitch to apply to the channel (try 8000-44000)
+

Command Description:

You can alter the hertz pitch of a sound channel that is playing (or in use and just paused). I'm sure you can think of numerous uses for this command! Use the frequency of your sound as the 'baseline' for pitch change. So if your sample is at 11025 hertz, increase the pitch to 22050 to make the pitch higher, 8000 to make it lower, etc. While similar to SoundPitch, this command let's you change the pitch individually of each and every channel in use.

Example:

; Channel examples
+
+Print "Loading sound ..."
+; Load the sample - you'll need to point this to a sound on your computer
+; For best results, make it about 5-10 seconds...
+sndWave=LoadSound("level1.wav")
+; Prepare the sound for looping
+LoopSound sndWave
+
+chnWave=PlaySound(sndWave)
+
+Print "Playing sound for 2 seconds ..."
+Delay 2000
+
+Print "Pausing sound for 2 seconds ..."
+PauseChannel chnWave
+Delay 2000
+
+Print "Restarting sound ..."
+ResumeChannel chnWave
+Delay 2000
+
+Print "Changing Pitch of sound ..."
+;StopChannel chnWave
+ChannelPitch chnWave, 22000
+Delay 2000
+
+Print "Playing new pitched sound ..."
+Delay 2000
+
+Print "Left speaker only"
+ChannelPan chnWave,-1
+Delay 2000
+
+Print "Right speaker only"
+ChannelPan chnWave,1
+Delay 2000
+
+Print "All done!"
+StopChannel chnWave

Index

+ diff --git a/_release/help/commands/2d_commands/ChannelPlaying.htm b/_release/help/commands/2d_commands/ChannelPlaying.htm new file mode 100644 index 0000000..4535528 --- /dev/null +++ b/_release/help/commands/2d_commands/ChannelPlaying.htm @@ -0,0 +1,16 @@ +Command: ChannelPlaying   ChannelPlaying (channel_handle)  

Definition:

Checks to see if a sound channel is still playing.

Parameter Description:


channel_handle = variable assigned to the channel when played

Command Description:

Often you will need to know if a sound channel has completed playing or not. This command will return 1 if the sound is still playing or 0 if it has stopped. Use this to restart your background music or some other sound that might have stopped unintentionally.
+
+Note: This command currently doesn't seem to work with a channel assigned to CD track playback.

Example:

; Channel examples
+
+Print "Loading sound ..."
+; Load the sample - you'll need to point this to a sound on your computer
+; For best results, make it about 5-10 seconds...
+sndWave=LoadSound("level1.wav")
+
+Print "Playing full sample until sound is done ..."
+chnWave=PlaySound(sndWave)
+While ChannelPlaying(chnWave)
+Wend +
+Print "All done!"

Index

+ diff --git a/_release/help/commands/2d_commands/ChannelVolume.htm b/_release/help/commands/2d_commands/ChannelVolume.htm new file mode 100644 index 0000000..67f71b4 --- /dev/null +++ b/_release/help/commands/2d_commands/ChannelVolume.htm @@ -0,0 +1,43 @@ +Command: ChannelVolume   ChannelVolume channel_handle, volume#  

Definition:

Adjusts the volume level of a sound channel.

Parameter Description:


channel_handle = variable assigned to the channel when played
+volume# = volume level floating value between 0 and 1

Command Description:

While SoundVolume happily changes the volume of the entire program, this command will let you adjust volume rates on a 'per channel' basis. Extremely useful.
+
+The volume value is a floating point value between 0 and 1 (0 = silence, .5 = half volume, 1= full volume). You can do other cool stuff like ChannelPitch and ChannelPan too!

Example:

; Channel examples
+
+Print "Loading sound ..."
+; Load the sample - you'll need to point this to a sound on your computer
+; For best results, make it about 5-10 seconds...
+sndWave=LoadSound("level1.wav")
+; Prepare the sound for looping
+LoopSound sndWave
+
+chnWave=PlaySound(sndWave)
+
+Print "Playing sound for 2 seconds ..."
+Delay 2000
+
+Print "Pausing sound for 2 seconds ..."
+PauseChannel chnWave
+Delay 2000
+
+Print "Restarting sound ..."
+ResumeChannel chnWave
+Delay 2000
+
+Print "Changing volume of sound ..."
+ChannelVolume chnWave, .5
+Delay 2000
+
+Print "Playing new half-volume sound ..."
+Delay 2000
+
+Print "Left speaker only"
+ChannelPan chnWave,-1
+Delay 2000
+
+Print "Right speaker only"
+ChannelPan chnWave,1
+Delay 2000
+
+Print "All done!"
+StopChannel chnWave

Index

+ diff --git a/_release/help/commands/2d_commands/Chr.htm b/_release/help/commands/2d_commands/Chr.htm new file mode 100644 index 0000000..7d4c288 --- /dev/null +++ b/_release/help/commands/2d_commands/Chr.htm @@ -0,0 +1,2 @@ +Command: Chr$   Chr$ (integer)  

Definition:

Converts an ASCII code to its corresponding character string.

Parameter Description:


integer = valid ASCII code integer value

Command Description:

Use this command to convert a known ASCII code (for example 65) to its character string equivelant (i.e. the letter "A").

Example:

Print " The character for ASCII value 65 is: " + Chr$(65)

Index

+ diff --git a/_release/help/commands/2d_commands/CloseDir.htm b/_release/help/commands/2d_commands/CloseDir.htm new file mode 100644 index 0000000..2c9877d --- /dev/null +++ b/_release/help/commands/2d_commands/CloseDir.htm @@ -0,0 +1,32 @@ +Command: CloseDir   CloseDir filehandle  

Definition:

Closes a directory previously opened with the ReadDir command.

Parameter Description:


filehandle = valid filehandle assigned from the ReadDir command

Command Description:

Once you are finished with NextFile$ on the directory previously opened for read with the ReadDir command, use this command to close the directory. This is good programming practice! +

Example:

; ReadDir/NextFile$/CloseDir example
+
+; Define what folder to start with ...
+folder$="C:\"
+
+; Open up the directory, and assign the handle to myDir
+myDir=ReadDir(folder$)
+
+; Let's loop forever until we run out of files/folders to list!
+Repeat
+; Assign the next entry in the folder to file$
+file$=NextFile$(myDir)
+
+; If there isn't another one, let's exit this loop
+If file$="" Then Exit
+
+; Use FileType to determine if it is a folder (value 2) or a file and print results
+If FileType(folder$+"\"+file$) = 2 Then
+Print "Folder:" + file$
+Else
+Print "File:" + file$
+End If
+Forever
+
+; Properly close the open folder
+CloseDir myDir
+
+; We're done!
+Print "Done listing files!"
+

Index

+ diff --git a/_release/help/commands/2d_commands/CloseFile.htm b/_release/help/commands/2d_commands/CloseFile.htm new file mode 100644 index 0000000..4b1f3f4 --- /dev/null +++ b/_release/help/commands/2d_commands/CloseFile.htm @@ -0,0 +1,51 @@ +Command: CloseFile   CloseFile filehandle  

Definition:

Closes a file previously opened with a file operations command.

Parameter Description:


filehandle = variable defined with the WriteFile or OpenFile command

Command Description:

Use this command to close a file previously opened. You should always close a file as soon as you have finished reading or writing to it.
+
+See also:
+ReadByte, ReadShort, ReadInt, ReadFloat, ReadString$, ReadLine$, WriteByte, WriteShort, WriteInt, WriteFloat, WriteShort, WriteString, WriteLine, ReadFile, WriteFile, OpenFile, CloseFile, Eof, FileType, FilePos, SeekFile

Example:

; Reading and writing custom types to files using ReadFile, WriteFile and CloseFile
+
+; Initialise some variables for the example
+Type HighScore
+ Field Name$
+ Field Score%
+ Field Level%
+End Type
+
+Best.HighScore = New HighScore
+Best\Name = "Mark"
+Best\Score = 11657
+Best\Level = 34
+
+; Open a file to write to
+fileout = WriteFile("mydata.dat")
+
+; Write the information to the file
+WriteString( fileout, Best\Name )
+WriteInt( fileout, Best\Score )
+WriteByte( fileout, Best\Level )
+
+; Close the file
+CloseFile( fileout )
+
+; Open the file to Read
+filein = ReadFile("mydata.dat")
+
+; Lets read the Greatest score from the file
+Greatest.HighScore = New HighScore
+Greatest\Name$ = ReadString$( filein )
+Greatest\Score = ReadInt( filein )
+Greatest\Level = ReadByte( filein )
+
+; Close the file once reading is finished
+CloseFile( fileout )
+
+Print "High score record read from - mydata.dat "
+Print
+Write "Name = "
+Print Greatest\Name
+Write "Score = "
+Print Greatest\Score
+Write "Level = "
+Print Greatest\Level
+
+WaitKey()

Index

+ diff --git a/_release/help/commands/2d_commands/CloseTCPServer.htm b/_release/help/commands/2d_commands/CloseTCPServer.htm new file mode 100644 index 0000000..2aa61a0 --- /dev/null +++ b/_release/help/commands/2d_commands/CloseTCPServer.htm @@ -0,0 +1,55 @@ +Command: CloseTCPServer   CloseTCPServer serverhandle  

Definition:

Closes a TCP server.

Parameter Description:


serverhandle = handle assigned when the server was created.

Command Description:

Closes a TCP/IP server previously created with the CreateTCPServer command.

Example:

; CreateTCPServer, CloseTCPServer, AcceptTCPStream Example
+; This code is in two parts, and needs to be run seperately on the same machine
+
+; --- Start first code set ---
+; Create a server and listen for push
+
+svrGame=CreateTCPServer(8080)
+
+If svrGame<>0 Then
+Print "Server started successfully."
+Else
+Print "Server failed to start."
+End
+End If
+
+While Not KeyHit(1)
+strStream=AcceptTCPStream(svrGame)
+If strStream Then
+Print ReadString$(strStream)
+Delay 2000
+End
+Else
+Print "No word from Apollo X yet ..."
+Delay 1000
+End If
+Wend
+
+End
+
+; --- End first code set ---
+
+
+; --- Start second code set ---
+; Copy this code to another instance of Blitz Basic
+; Run the above code first, then run this ... they will 'talk'
+
+; Create a Client and push data
+
+strmGame=OpenTCPStream("127.0.0.1",8080)
+
+If strmGame<>0 Then
+Print "Client Connected successfully."
+Else
+Print "Server failed to connect."
+WaitKey
+End
+End If
+
+; write stream to server
+WriteString strmGame,"Mission Control, this is Apollo X ..."
+Print "Completed sending message to Mission control..."
+
+; --- End second code set ---
+

Index

+ diff --git a/_release/help/commands/2d_commands/CloseTCPStream.htm b/_release/help/commands/2d_commands/CloseTCPStream.htm new file mode 100644 index 0000000..e21007b --- /dev/null +++ b/_release/help/commands/2d_commands/CloseTCPStream.htm @@ -0,0 +1,27 @@ +Command: CloseTCPStream   CloseTCPStream streamhandle  

Definition:

Closes the specified TCP stream.

Parameter Description:


streamhandle = handle assigned when the stream was opened.

Command Description:

Once you've completed the use of your TCP/IP stream, close the connection you opened with OpenTCPStream with this command.

Example:

; OpenTCPStream/CloseTCPStream Example
+
+Print "Connecting..."
+tcp=OpenTCPStream( "www.blitzbasement.com",80 )
+
+If Not tcp Print "Failed.":WaitKey:End
+
+Print "Connected! Sending request..."
+
+WriteLine tcp,"GET http://www.blitzbasement.com HTTP/1.0"
+WriteLine tcp,Chr$(10)
+
+If Eof(tcp) Print "Failed.":WaitKey:End
+
+Print "Request sent! Waiting for reply..."
+
+While Not Eof(tcp)
+ Print ReadLine$( tcp )
+Wend
+
+If Eof(tcp)=1 Then Print "Success!" Else Print "Error!"
+
+CloseTCPStream tcp
+
+WaitKey
+End

Index

+ diff --git a/_release/help/commands/2d_commands/Cls.htm b/_release/help/commands/2d_commands/Cls.htm new file mode 100644 index 0000000..70185d9 --- /dev/null +++ b/_release/help/commands/2d_commands/Cls.htm @@ -0,0 +1,2 @@ +Command: Cls   Cls   

Definition:

Clears the current current drawing buffer.

Parameter Description:


None.

Command Description:

This command will wipe the current drawing buffer clean of any graphics or text present and reset the drawing buffer back to the color defined in the ClsColor command

Example:

;set ClsColor to red
ClsColor 255,0,0

;set current drawing buffer to the color set by the ClsColor command
Cls

Index

+ diff --git a/_release/help/commands/2d_commands/ClsColor.htm b/_release/help/commands/2d_commands/ClsColor.htm new file mode 100644 index 0000000..9ce6c6d --- /dev/null +++ b/_release/help/commands/2d_commands/ClsColor.htm @@ -0,0 +1,2 @@ +Command: ClsColor   ClsColor red,green,blue  

Definition:

Selects the color for the Cls command.

Parameter Description:


red, green and blue = number between 0 and 255

Command Description:

This changes the color for subsequent CLS calls. Use this command when you need CLS to 'clear' the screen with some other color than black.

Example:

;set ClsColor to red
ClsColor 255,0,0

;set current drawing buffer to the color set by the ClsColor command
Cls

Index

+ diff --git a/_release/help/commands/2d_commands/Color.htm b/_release/help/commands/2d_commands/Color.htm new file mode 100644 index 0000000..054bb85 --- /dev/null +++ b/_release/help/commands/2d_commands/Color.htm @@ -0,0 +1,19 @@ +Command: Color   Color red,green,blue  

Definition:

Sets the drawing color for all drawing operations with a red, green, blue color value.

Parameter Description:


red = value of red component (0-255)
+green = value of green component (0-255)
+blue = value of blue component (0-255)

Command Description:

This command sets the drawing color (using RGB values) for all subsequent drawing commands (Line, Rect, Text, etc.) You must be in Graphics mode to execute this command.

Example:

; Color, ColorRed(), ColorBlue(), ColorGreen() Example
+
+; Gotta be in graphics mode
+Graphics 640,480
+
+; Change the random seed
+SeedRnd MilliSecs()
+
+; Let's set the color to something random
+Color Rnd(0,255),Rnd(0,255),Rnd(0,255)
+
+; Now let's see what they are!
+While Not KeyHit(1)
+Text 0,0,"This Text is printed in Red=" + ColorRed() + " Green=" + ColorGreen() + " Blue=" + ColorBlue() + "!"
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/ColorBlue.htm b/_release/help/commands/2d_commands/ColorBlue.htm new file mode 100644 index 0000000..ec0beb1 --- /dev/null +++ b/_release/help/commands/2d_commands/ColorBlue.htm @@ -0,0 +1,17 @@ +Command: ColorBlue()   ColorBlue()   

Definition:

Returns the blue component of the current drawing color.

Parameter Description:


None.

Command Description:

Use this command to return the blue component of the RGB color of the current drawing color. Use ColorRed() and ColorGreen() for the other two color components.

Example:

; Color, ColorRed(), ColorBlue(), ColorGreen() Example
+
+; Gotta be in graphics mode
+Graphics 640,480
+
+; Change the random seed
+SeedRnd MilliSecs()
+
+; Let's set the color to something random
+Color Rnd(0,255),Rnd(0,255),Rnd(0,255)
+
+; Now let's see what they are!
+While Not KeyHit(1)
+Text 0,0,"This Text is printed in Red=" + ColorRed() + " Green=" + ColorGreen() + " Blue=" + ColorBlue() + "!"
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/ColorGreen.htm b/_release/help/commands/2d_commands/ColorGreen.htm new file mode 100644 index 0000000..1c1cd98 --- /dev/null +++ b/_release/help/commands/2d_commands/ColorGreen.htm @@ -0,0 +1,17 @@ +Command: ColorGreen()   ColorGreen()   

Definition:

Returns the green component of the current drawing color.

Parameter Description:


None.

Command Description:

Use this command to return the green component of the RGB color of the current drawing color. Use ColorRed() and ColorBlue() for the other two color components.

Example:

; Color, ColorRed(), ColorBlue(), ColorGreen() Example
+
+; Gotta be in graphics mode
+Graphics 640,480
+
+; Change the random seed
+SeedRnd MilliSecs()
+
+; Let's set the color to something random
+Color Rnd(0,255),Rnd(0,255),Rnd(0,255)
+
+; Now let's see what they are!
+While Not KeyHit(1)
+Text 0,0,"This Text is printed in Red=" + ColorRed() + " Green=" + ColorGreen() + " Blue=" + ColorBlue() + "!"
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/ColorRed.htm b/_release/help/commands/2d_commands/ColorRed.htm new file mode 100644 index 0000000..61dc109 --- /dev/null +++ b/_release/help/commands/2d_commands/ColorRed.htm @@ -0,0 +1,17 @@ +Command: ColorRed()   ColorRed()   

Definition:

Returns the red component of the current drawing color.

Parameter Description:


None.

Command Description:

Use this command to return the red component of the RGB color of the current drawing color. Use ColorBlue() and ColorGreen() for the other two color components.

Example:

; Color, ColorRed(), ColorBlue(), ColorGreen() Example
+
+; Gotta be in graphics mode
+Graphics 640,480
+
+; Change the random seed
+SeedRnd MilliSecs()
+
+; Let's set the color to something random
+Color Rnd(0,255),Rnd(0,255),Rnd(0,255)
+
+; Now let's see what they are!
+While Not KeyHit(1)
+Text 0,0,"This Text is printed in Red=" + ColorRed() + " Green=" + ColorGreen() + " Blue=" + ColorBlue() + "!"
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/CommandLine.htm b/_release/help/commands/2d_commands/CommandLine.htm new file mode 100644 index 0000000..b25ec87 --- /dev/null +++ b/_release/help/commands/2d_commands/CommandLine.htm @@ -0,0 +1,20 @@ +Command: CommandLine$()   CommandLine$()   

Definition:

Reads command line parameters passed at runtime.

Parameter Description:


None.

Command Description:

If you are writing an application or game that allows starting with special parameters on the command line, you can use this command to retrieve the parameters.
+
+For example, you might want to start the program with a debug variable set so you can track stuff during execution. So, you could offer the ability to run the executatble with a /debug parameter. If they execute the program with the parameter, then you can set a flag inside your game.
+
+To simulate the command line passing in the editor, select PROGRAM->PROGRAM COMMAND LINE from the pulldowns and enter a value to be passed at runtime.
+
+See the example.

Example:

; CommandLine$() Example
+; Be sure to use PROGRAM->PROGRAM COMMAND LINE from the
+; pull down and put /debug in there to test with.
+
+a$=CommandLine$()
+
+If a$="/debug" Then
+Print "Debug mode is on!"
+debug=1
+Else
+Print "No debugging activated."
+debug=0
+End If

Index

+ diff --git a/_release/help/commands/2d_commands/Const.htm b/_release/help/commands/2d_commands/Const.htm new file mode 100644 index 0000000..2edbb3d --- /dev/null +++ b/_release/help/commands/2d_commands/Const.htm @@ -0,0 +1,13 @@ +Command: Const   Const variablename  

Definition:

Declare a variable as a constant and assign it a value.

Parameter Description:


variablename = any valid variable name and its assignment

Command Description:

This delares a variable as a constant (a variable whose value will never change and cannot be changed) and assigns the value to it.
+
+Assign constants to values you know will not change in your game (screen width, height - scoring values - etc). This reduces the load of the variable memory, since Blitz knows it will never change size unlike other variables which can grow and shrink in size based on what value it holds.

Example:

; CONST Example
+
+Const scrWidth=640
+Const scrHeight=480
+Const alienscore=100
+
+Graphics scrWidth,scrHeight
+
+Print "The point value for shooting any alien is always " + alienscore
+

Index

+ diff --git a/_release/help/commands/2d_commands/CopyBank.htm b/_release/help/commands/2d_commands/CopyBank.htm new file mode 100644 index 0000000..49a939f --- /dev/null +++ b/_release/help/commands/2d_commands/CopyBank.htm @@ -0,0 +1,24 @@ +Command: CopyBank   CopyBank src_bank,src_offset,dest_bank,dest_offset,count  

Definition:

Copies data from one bank to another.

Parameter Description:


src_bank = handle of source memory bank
+src_offset = offset location to start copying from
+dest_bank = handle of destination memory bank
+dest_offset = offset location to start writing to
+count = how many bytes to copy

Command Description:

Copies data from one meomry bank to another. If copying between the same banks, handles overlapping memory ranges.

Example:

; BankSize, ResizeBank, CopyBank Example
+
+; create a bank
+bnkTest=CreateBank(5000)
+
+; Fill it with rand Integers
+For t = 0 To 4999
+PokeByte bnkTest,t,Rand(9)
+Next
+
+; Resize the bank
+ResizeBank bnkTest,10000
+
+; Copy the first half of the bank to the second half
+CopyBank bnkTest,0,bnkTest,5000,5000
+
+; Print final banksize
+Print BankSize(bnkTest)
+

Index

+ diff --git a/_release/help/commands/2d_commands/CopyFile.htm b/_release/help/commands/2d_commands/CopyFile.htm new file mode 100644 index 0000000..72ad4e7 --- /dev/null +++ b/_release/help/commands/2d_commands/CopyFile.htm @@ -0,0 +1,11 @@ +Command: CopyFile   CopyFile from$, to$  

Definition:

Copies a file on the disk to a new location.

Parameter Description:


from$ = valid path/filename to the file to be copied
+to$ = valid path/filename to copy the file to

Command Description:

Use this command to copy a file from one location to another. Perhaps you'll write your own installer and need to copy files from the installation folder to the installed location folder. Make sure you do your own validation to ensure that the files/paths are valid and accurate before executing this command.

Example:

file$="c:\autoexec.bat"
+destination$="a:\autoexec.bat"
+
+Print "Press any key to copy your Autoexec.bat file to floppy"
+
+WaitKey()
+
+CopyFile file$,destination$
+

Index

+ diff --git a/_release/help/commands/2d_commands/CopyImage.htm b/_release/help/commands/2d_commands/CopyImage.htm new file mode 100644 index 0000000..f532f2c --- /dev/null +++ b/_release/help/commands/2d_commands/CopyImage.htm @@ -0,0 +1,11 @@ +Command: CopyImage   CopyImage (handle)  

Definition:

Duplicates a previously loaded image to a new handle.

Parameter Description:


handle=the variable you gave the handle to when you loaded the image

Command Description:

Instead of loading a graphic twice in two different handles, you can load the image ONCE then use the CopyImage command to make as many copies in memory as you want.
+
+Why would you want to do this? So you still have a copy of the original image in case you want to alter a copy later for another purpose.

Example:

; CopyImage Example
+
+; Load an image and give its handle to gfxOld variable
+gfxOld=LoadImage("mypicture.bmp")
+
+; Duplicate the gfxOld image to a new handle variable
+gfxNew=CopyImage(gfxOld)
+

Index

+ diff --git a/_release/help/commands/2d_commands/CopyPixel.htm b/_release/help/commands/2d_commands/CopyPixel.htm new file mode 100644 index 0000000..29bf861 --- /dev/null +++ b/_release/help/commands/2d_commands/CopyPixel.htm @@ -0,0 +1,40 @@ +Command: CopyPixel   CopyPixel src_x,src_y,src_buffer,dest_x,dest_y,[dest_buffer]  

Definition:

Copys pixels from one image buffer to another.

Parameter Description:


src_x = x location of the source pixel to copy
+src_y = y location of the source pixel to copy
+src_buffer = buffer to copy from
+dest_x = x location to write pixel to
+dest_y = y location to write pixel to
+dest_buffer = optional

Command Description:

Use this to directly copy pixels from one buffer to another. You do not need to LockBuffer to use this command, but it will make the operations faster.
+
+Although fast, this command will not be fast enough to perform real-time screen effects.

Example:

; CopyPixel/CopyPixelFast commands
+
+Graphics 640,480,16
+
+; Draw a bunch of crap on the screen
+For t= 1 To 1000
+Color Rnd(255),Rnd(255),Rnd(255)
+Rect Rnd(640),Rnd(480),Rnd(150),Rnd(150),Rnd(1)
+Next
+
+Delay 3000
+
+; Copy the top half of the screen over the bottom half
+; using fast pixels and locked buffers
+For x = 1 To 640
+For y = 1 To 240
+LockBuffer FrontBuffer()
+CopyPixelFast x,y,FrontBuffer(),x,y+241
+UnlockBuffer FrontBuffer()
+Next
+Next
+
+Delay 3000
+
+; Draw the left half of the screen over the right half
+; using the slower direct pixel access
+For x = 1 To 320
+For y = 1 To 480
+CopyPixel x,y,FrontBuffer(),x+320,y
+Next
+Next
+

Index

+ diff --git a/_release/help/commands/2d_commands/CopyPixelFast.htm b/_release/help/commands/2d_commands/CopyPixelFast.htm new file mode 100644 index 0000000..b4cce6b --- /dev/null +++ b/_release/help/commands/2d_commands/CopyPixelFast.htm @@ -0,0 +1,40 @@ +Command: CopyPixelFast   CopyPixelFast src_x,src_y,src_buffer,dest_x,dest_y,[dest_buffer]  

Definition:

Quickly copies pixels from one image buffer to another.

Parameter Description:


src_x = x location of the source pixel to copy
+src_y = y location of the source pixel to copy
+src_buffer = buffer to copy from
+dest_x = x location to write pixel to
+dest_y = y location to write pixel to
+dest_buffer = optional

Command Description:

Use this to directly copy pixels from one buffer to another. You MUST use LockBuffer on BOTH image buffers to use this command.
+
+Although very fast, this command will not be fast enough to perform real-time screen effects.

Example:

; CopyPixel/CopyPixelFast commands
+
+Graphics 640,480,16
+
+; Draw a bunch of crap on the screen
+For t= 1 To 1000
+Color Rnd(255),Rnd(255),Rnd(255)
+Rect Rnd(640),Rnd(480),Rnd(150),Rnd(150),Rnd(1)
+Next
+
+Delay 3000
+
+; Copy the top half of the screen over the bottom half
+; using fast pixels and locked buffers
+For x = 1 To 640
+For y = 1 To 240
+LockBuffer FrontBuffer()
+CopyPixelFast x,y,FrontBuffer(),x,y+241
+UnlockBuffer FrontBuffer()
+Next
+Next
+
+Delay 3000
+
+; Draw the left half of the screen over the right half
+; using the slower direct pixel access
+For x = 1 To 320
+For y = 1 To 480
+CopyPixel x,y,FrontBuffer(),x+320,y
+Next
+Next
+

Index

+ diff --git a/_release/help/commands/2d_commands/CopyRect.htm b/_release/help/commands/2d_commands/CopyRect.htm new file mode 100644 index 0000000..e71d407 --- /dev/null +++ b/_release/help/commands/2d_commands/CopyRect.htm @@ -0,0 +1,33 @@ +Command: CopyRect   CopyRect src_x,src_y,src_width,src_height,dest_x,dest_y,[src_buffer],[dest_buffer]  

Definition:

Copies a rectangle of graphics from one buffer to another.

Parameter Description:


src_x = source top left x location to begin copying from
+src_y = source top left y location to begin copying from
+src_width = width of source area to copy
+src_height = height of source area to copy
+dest_x = destination top left x location to copy to
+dest_y = destination top left y location to copy to
+src_buffer = handle to the source image buffer (optional)
+dest_buffer = handle to the destination image buffer (optional)
+

Command Description:

Copies a rectangle of graphics from one buffer to another. If a buffer is omitted, the current buffer is used.

Example:

; CopyRect Example
+
+; Turn on graphics mode
+Graphics 800,600,16
+
+; create a blank image
+gfxBlank=CreateImage (300,300)
+
+; Fill the screen with random boxes in random colors
+For t = 1 To 1000
+Rect Rand(800),Rand(600),Rand(100),Rand(100),Rand(0,1)
+Color Rand(255),Rand(255),Rand(255)
+Next
+
+; Wait a couple of seconds so the user can see it
+Delay 2000
+
+; Copy graphics randomly from the front buffer to the blank image
+CopyRect Rand(800),Rand(600),300,300,0,0,FrontBuffer(),ImageBuffer(gfxBlank)
+
+; Clear the screen, draw the copied to image, wait for user to hit a key
+Cls
+DrawImage gfxBlank,0,0
+WaitKey

Index

+ diff --git a/_release/help/commands/2d_commands/CopyStream.htm b/_release/help/commands/2d_commands/CopyStream.htm new file mode 100644 index 0000000..5746a00 --- /dev/null +++ b/_release/help/commands/2d_commands/CopyStream.htm @@ -0,0 +1,42 @@ + + +Command: CopyStream + + + + + + +

  CopyStream  

+ +

+Parameters:
+

+ + + + +
+src_stream --
+dest_stream --
+[buffer_size] --
+
+

Description:
+
+ + + + +
CopyStream () ...
+

Example:
+
+ + + + + +
+; Example +
+ + diff --git a/_release/help/commands/2d_commands/Cos.htm b/_release/help/commands/2d_commands/Cos.htm new file mode 100644 index 0000000..9eb0c6b --- /dev/null +++ b/_release/help/commands/2d_commands/Cos.htm @@ -0,0 +1,26 @@ +Command: Cos   Cos (Number)  

Definition:

The Cos command is a trigonometry function, that returns a number between -1 and 1. This value represents the "X" coordinate of point x,y.

Parameter Description:


number=float or integer representing a value in degree

Command Description:

This command is used for translating angle values to coordinates, but there are a few things you have to take into account when doing it. First of all the Cos() command assumes the point you want is at radius 1 (pixel), next it uses a circle where 0 degrees is due EAST and increases in a counterclockwise direction, then you've got to take into account the the Y axis on a computer screen is up-side-down compared to a normal mathematical coordinate system.
+
+See also ASin, Cos, ACos, Tan, Atan, ATan2

Example:

Graphics 640,480; Change to graphics mode, nothing tricky yet.
+Origin 320,240 ; Move the point of orign for all drawing commands to the middle of the screen.
+
+For degrees=0 To 359; Step though all the degrees in a circle (360 in all)
+Delay(5); Wait 5 milli secsonds.
+
+; The next line calculates the Y coordinate of the point of the circle using the Sin
+; command, and multiplies it by 100 (to get a larger radius, try and change it).
+y=Sin(degrees)*100
+
+y=-y ; Invert Y coordinate to represent it properly on screen.
+
+; The next line calculates the X coordinate of the point of the circle using the Cos,
+; command, and multiplies it by 100 (to get a larger radius, try and change it).
+x=Cos(degrees)*100
+
+Rect x,y,1,1 ; Draw the current point on the circle.
+
+Next ; Give us another angle
+
+MouseWait ; Wait for the mouse.
+End ; Terminate the program.
+

Index

+ diff --git a/_release/help/commands/2d_commands/CountGFXModes.htm b/_release/help/commands/2d_commands/CountGFXModes.htm new file mode 100644 index 0000000..821349e --- /dev/null +++ b/_release/help/commands/2d_commands/CountGFXModes.htm @@ -0,0 +1,14 @@ +Command: CountGFXModes()   CountGFXModes()   

Definition:

Returns the number of video graphic modes available.

Parameter Description:


None.

Command Description:

Use this command to return the number of video modes the user's video card can display in. Use the GFXModeWidth, GFXModeHeight, and GFXModeDepth with each number of video mode to determine the width, height, and color depth capabilities of each mode. See example.

Example:

; CountGFXModes()/GfxModeWidth/GfxModeHeight/GfxModeDepth example
+
+intModes=CountGfxModes()
+
+Print "There are " + intModes + "graphic modes available:"
+
+; Display all modes including width, height, and color depth
+For t = 1 To intModes
+Print "Mode " + t + ":
+Print "Width=" + GfxModeWidth(t)
+Print "Height=" + GfxModeHeight(t)
+Print "Height=" + GfxModeDepth(t)
+Next

Index

+ diff --git a/_release/help/commands/2d_commands/CountGfxDrivers.htm b/_release/help/commands/2d_commands/CountGfxDrivers.htm new file mode 100644 index 0000000..6b1bba4 --- /dev/null +++ b/_release/help/commands/2d_commands/CountGfxDrivers.htm @@ -0,0 +1,22 @@ +Command: CountGfxDrivers()   CountGfxDrivers()   

Definition:

Returns the number of graphic drivers on the system.

Parameter Description:


None.

Command Description:

Some computers may have more than one video card and/or video driver installed (a good example is a computer system with a primary video card and a Voodoo2 or other pass-through card). + +Once you know how many drivers there are, you can iterate through them with GfxDriverName$ and display them for the user to choose from. Once the user has chosen (or you decide), you can set the graphics driver with SetGfxDriver. + +Normally, this won't be necessary with 2D programming.

Example:

; GfxDriver Examples
+
+; Count how many drivers there are
+totalDrivers=CountGfxDrivers()
+Print "Choose a driver to use:"
+
+; Go through them all and print their names (most people will have only 1)
+For t = 1 To totalDrivers
+Print t+") " + GfxDriverName$(t)
+Next
+
+; Let the user choose one
+driver=Input("Enter Selection:")
+
+; Set the driver!
+SetGfxDriver driver
+Print "Your driver has been selected!"

Index

+ diff --git a/_release/help/commands/2d_commands/CreateBank.htm b/_release/help/commands/2d_commands/CreateBank.htm new file mode 100644 index 0000000..20231ba --- /dev/null +++ b/_release/help/commands/2d_commands/CreateBank.htm @@ -0,0 +1,22 @@ +Command: CreateBank   CreateBank (size)  

Definition:

Create a data bank.

Parameter Description:


size = size of memory bank in bytes

Command Description:

The bank commands allow you to make your own memory bank to perform your own read and write operations to. This is useful for compression/decompression, level data, and tons of other uses.
+
+This command allocates the memory and creates a handle to the bank.

Example:

; Bank Commands Example
+
+bnkTest=CreateBank(500)
+
+For t = 1 To 50
+PokeByte bnkTest,t,Rnd(255)
+PokeInt bnkTest,t+1,Rnd(10000)
+PokeShort bnkTest,t+2,Rnd(10000)
+PokeFloat bnkTest,t+3,Rnd(-.999,.999)
+Next
+
+For t = 1 To 50
+Print PeekByte (bnkTest,t)
+Print PeekInt (bnkTest,t+1)
+Print PeekShort (bnkTest,t+2)
+Print PeekFloat (bnkTest,t+3)
+Next
+
+Freebank bnkTest

Index

+ diff --git a/_release/help/commands/2d_commands/CreateDir.htm b/_release/help/commands/2d_commands/CreateDir.htm new file mode 100644 index 0000000..dd8a4ca --- /dev/null +++ b/_release/help/commands/2d_commands/CreateDir.htm @@ -0,0 +1,7 @@ +Command: CreateDir   CreateDir path/name  

Definition:

Creates a directory/folder on a storage device.

Parameter Description:


path/name = full path and name for new directory

Command Description:

Creates a directory (file folder) at the destination specified. Do not use a trailing slash at the end of the path/name parameter. You cannot be sure the directory was created with this command, so you will need to verify its existance yourself (use the FILETYPE command).

Example:

; CREATEDIR example
+
+fldr$="c:\winnt\system32\myfolder"
+createDir fldr$
+Print "Folder created!"
+

Index

+ diff --git a/_release/help/commands/2d_commands/CreateImage.htm b/_release/help/commands/2d_commands/CreateImage.htm new file mode 100644 index 0000000..ed3ea4b --- /dev/null +++ b/_release/help/commands/2d_commands/CreateImage.htm @@ -0,0 +1,43 @@ +Command: CreateImage   CreateImage (width,height[,frames])  

Definition:

Create a new image in memory and give its handle to a variable.

Parameter Description:


width=width of the new image (or its frames)
+height=height of the new image
+frames= optional number of frames (assumed to be a single frame)

Command Description:

Sometimes you want to create a completely new graphic on the fly (using other images, drawing commands, etc.) instead of loading one. This command will let you create a new image with a single frame or multiple frames for animation. You specify the width, height, and optional number of frames. The example should be pretty self-explainatory.

Example:

; CreateImage/TileImage/ImageBuffer example
+
+; Again, we'll use globals even tho we don't need them here
+; One variable for the graphic we'll create, one for a timer
+Global gfxStarfield, tmrScreen
+
+; Declare graphic mode
+Graphics 640,480,16
+
+; Create a blank image that is 320 pixels wide and 32 high with 10 frames of 32x32
+gfxStarfield=CreateImage(32,32,10)
+
+; loop through each frame of the graphic we just made
+For t = 0 To 9
+; Set the drawing buffer to the graphic frame so we can write on it
+SetBuffer ImageBuffer(gfxStarfield,t)
+; put 50 stars in the frame at random locations
+For y = 1 To 50
+ Plot Rnd(32),Rnd(32)
+Next
+Next
+
+; Double buffer mode for smooth screen drawing
+SetBuffer BackBuffer()
+
+; Loop until ESC is pressed
+While Not KeyHit(1)
+
+; Only update the screen every 300 milliseconds. Change 300 for faster or
+; slower screen updates
+If MilliSecs() > tmrScreen+300 Then
+Cls ; clear the screen
+
+; Tile the screen with a random frame from our new graphic starting at
+; x=0 and y=0 location.
+TileImage gfxStarfield,0,0,Rnd(9)
+Flip ; Flip the screen into view
+tmrScreen=MilliSecs() ; reset the time
+End If
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/CreateNetPlayer.htm b/_release/help/commands/2d_commands/CreateNetPlayer.htm new file mode 100644 index 0000000..e9b3b45 --- /dev/null +++ b/_release/help/commands/2d_commands/CreateNetPlayer.htm @@ -0,0 +1,30 @@ +Command: CreateNetPlayer   CreateNetPlayer (name$)  

Definition:

Creates a new local player on the network game.

Parameter Description:


name$ = any valid string holding the player's name.

Command Description:

Creates a new local player. This also causes a special message to be sent to all remote machines (see NetMsgType). This returns an integer player number to be used in sending/receiving messages. Note that you must create at least one player before you can send and receive messages.

Example:

; CreateNetPlayer example
+
+newGame = StartNetGame()
+; Check the status of the new game.
+If newGame = 0 Then
+ Print "Could not start or join net game."
+ End
+
+ElseIf newGame = 1
+ Print "Successfully joined the network game"
+ElseIf newGame = 2
+ Print "A new network game was started!"
+EndIf
+
+; Create a random player name
+name$="Player" + Rand(100)
+
+; Get a unique player id number for the player
+; and create the player
+playerID=CreateNetPlayer(name$)
+
+If playerID = 0 Then
+Print "Player could not be created!"
+Else
+Print "Player " + name$ + " was created and given ID#" + +playerID
+End If
+WaitKey()
+

Index

+ diff --git a/_release/help/commands/2d_commands/CreateTCPServer.htm b/_release/help/commands/2d_commands/CreateTCPServer.htm new file mode 100644 index 0000000..143d45e --- /dev/null +++ b/_release/help/commands/2d_commands/CreateTCPServer.htm @@ -0,0 +1,57 @@ +Command: CreateTCPServer   CreateTCPServer (port)  

Definition:

Creates a TCP server on the specified port.

Parameter Description:


port = the port to use when creating the server

Command Description:

Creates a TCP/IP server with the designated port. Use this for communications between other clients and the local box. See OpenTCPStream, CloseTCPServer, and CloseTCPStream for more information.
+
+Returns a TCP/IP server handle if successful or 0 if not.

Example:

; CreateTCPServer, CloseTCPServer, AcceptTCPStream Example
+; This code is in two parts, and needs to be run seperately on the same machine
+
+; --- Start first code set ---
+; Create a server and listen for push
+
+svrGame=CreateTCPServer(8080)
+
+If svrGame<>0 Then
+Print "Server started successfully."
+Else
+Print "Server failed to start."
+End
+End If
+
+While Not KeyHit(1)
+strStream=AcceptTCPStream(svrGame)
+If strStream Then
+Print ReadString$(strStream)
+Delay 2000
+End
+Else
+Print "No word from Apollo X yet ..."
+Delay 1000
+End If
+Wend
+
+End
+
+; --- End first code set ---
+
+
+; --- Start second code set ---
+; Copy this code to another instance of Blitz Basic
+; Run the above code first, then run this ... they will 'talk'
+
+; Create a Client and push data
+
+strmGame=OpenTCPStream("127.0.0.1",8080)
+
+If strmGame<>0 Then
+Print "Client Connected successfully."
+Else
+Print "Server failed to connect."
+WaitKey
+End
+End If
+
+; write stream to server
+WriteString strmGame,"Mission Control, this is Apollo X ..."
+Print "Completed sending message to Mission control..."
+
+; --- End second code set ---
+

Index

+ diff --git a/_release/help/commands/2d_commands/CreateTimer.htm b/_release/help/commands/2d_commands/CreateTimer.htm new file mode 100644 index 0000000..b8abf1c --- /dev/null +++ b/_release/help/commands/2d_commands/CreateTimer.htm @@ -0,0 +1,2 @@ +Command: CreateTimer   CreateTimer (frequency)  

Definition:

Creates a timer to track a frequency.

Parameter Description:


frequency = usually a framerate like 50 or 60

Command Description:

Use this command in conjunction with the WaitTimer command to control the speed of program execution (fps). You will use this in your main screen redraw loop to control the playback speed to match the proper speed. This will prevent your games from playing back too fast on computers faster than yours. Use of this system is VERY GOOD practice, as your game will be played on a variety of computers.

Example:

; Create the timer to track speed
frameTimer=CreateTimer(60)

; Your main screen draw loop
While Not KeyHit(1)
WaitTimer(frameTimer) ; Pause until the timer reaches 60
Cls
; Draw your screen stuff
Flip
Wend

Index

+ diff --git a/_release/help/commands/2d_commands/CurrentDate.htm b/_release/help/commands/2d_commands/CurrentDate.htm new file mode 100644 index 0000000..9b0f3f0 --- /dev/null +++ b/_release/help/commands/2d_commands/CurrentDate.htm @@ -0,0 +1,5 @@ +Command: CurrentDate$()   CurrentDate$()   

Definition:

Returns the current system date.

Parameter Description:


None

Command Description:

Returns the current date in the format: DD MON YYYY (i.e. 10 DEC 2000).

Example:

; Print the current date to the screen
+
+Print "The date is:" + CurrentDate$()
+

Index

+ diff --git a/_release/help/commands/2d_commands/CurrentDir.htm b/_release/help/commands/2d_commands/CurrentDir.htm new file mode 100644 index 0000000..db67942 --- /dev/null +++ b/_release/help/commands/2d_commands/CurrentDir.htm @@ -0,0 +1,7 @@ +Command: CurrentDir$()   CurrentDir$()   

Definition:

Returns a string containing the currently selected directory.

Parameter Description:


None.

Command Description:

This command will return the currently selected directory for disk operations, useful for advanced file operations. Use CHANGEDIR to change the current directory. The value returned doesn't have a trailing slash - aside from the root directory of the drive.

Example:

; CurrentDir$() example
+
+; Print the current directory until ESC key
+While Not KeyHit(1)
+Print CurrentDir$()
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/CurrentTime.htm b/_release/help/commands/2d_commands/CurrentTime.htm new file mode 100644 index 0000000..411e832 --- /dev/null +++ b/_release/help/commands/2d_commands/CurrentTime.htm @@ -0,0 +1,5 @@ +Command: CurrentTime$()   CurrentTime$()   

Definition:

Returns the current system time.

Parameter Description:


None

Command Description:

Returns the current time in the format: HH:MM:SS (i.e. 14:31:57).

Example:

; Print the current time to the screen
+
+Print "The Time is:" + CurrentTime$()
+

Index

+ diff --git a/_release/help/commands/2d_commands/Data.htm b/_release/help/commands/2d_commands/Data.htm new file mode 100644 index 0000000..ab73274 --- /dev/null +++ b/_release/help/commands/2d_commands/Data.htm @@ -0,0 +1,28 @@ +Command: Data   Data list_of_values  

Definition:

Creates a list of constant values to be parsed through within your program

Parameter Description:


list_of_values = a list of comma delimited values (strings must be inside quotes)

Command Description:

Data is used to create neat, comma delimited lists of values of a constant nature that you will be reading (and probably reusing) during the execution of your game. You may store level information (number of enemies, stars, etc) there or just about anything you can think of! You can easily mix datatypes (strings, integers, floats) in your Data statements, as long as they are read properly with the Read command later. You will need to use the Restore command to point to the .Label that begins your Data statements. See the related commands for more information and more examples.

Example:

Print "Here we go!"
+
+; Restore to the start of the Data statements
+Restore startData
+
+; Get the first number which is the total number of users
+Read Users
+
+; Print them all!
+For T = 1 To Users
+ Read firstname$
+ Read age
+ Read accuracy#
+ Read lastname$
+ Print firstname$ + " " + lastname$ + " is " + age + " years old with " + accuracy# + " accuracy!"
+Next
+
+While Not KeyHit(1)
+Wend
+End
+
+.startData
+Data 3
+Data "Shane", 31, 33.3333, "Monroe"
+Data "Bob", 28, 12.25, "Smith"
+Data "Roger", 54, 66.66, "Rabbit"
+

Index

+ diff --git a/_release/help/commands/2d_commands/DebugLog.htm b/_release/help/commands/2d_commands/DebugLog.htm new file mode 100644 index 0000000..450fadd --- /dev/null +++ b/_release/help/commands/2d_commands/DebugLog.htm @@ -0,0 +1,18 @@ +Command: DebugLog   DebugLog message  

Definition:

Writes a message to the debug log for debugging purposes.

Parameter Description:


message = message text string value

Command Description:

You power programmers will just love this. You have your own debug log to write to!
+
+For those not familiar to this sort of thing, think of the Debug log like your own private 'in program notepad'. Use this to write messages to yourself during program execution. For example, you could write the graphic modes that the user has on his system, or just little alerts to let you know your code execution made it to a certain point in the execution without interrupting it. I'm sure you'll find a lot of uses for this! See the example if you're still lost.

Example:

; DebugLog Example
+
+; Let's start graphics mode
+Graphics 640,480,16
+
+; Now, let's load an image that doesn't exist!
+gfxPlayer=LoadImage("noimagefound.jpg")
+If gfxPlayer=0 Then
+DebugLog "Player's Graphics failed to load!"
+End If
+
+; This is supposed to generate an error. Press F9 to see the log!
+While Not KeyHit(1)
+DrawImage gfxPlayer,100,100
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/Default.htm b/_release/help/commands/2d_commands/Default.htm new file mode 100644 index 0000000..435b4d5 --- /dev/null +++ b/_release/help/commands/2d_commands/Default.htm @@ -0,0 +1,27 @@ +Command: Default   Default   

Definition:

Specifies the set of commands that executes in a Select structure if none of the CASEs are met.

Parameter Description:


None.

Command Description:

In a SELECT structure, you may wish to execute code if none of the cases you specify are met. All code after DEFAULT to END SELECT will be executed if no case is met. See SELECT, CASE, and the example for more.

Example:

; SELECT/CASE/DEFAULT/END SELECT Example
+; Assign a random number 1-10
+mission=Rnd(1,10)
+
+; Start the selection process based on the value of 'mission' variable
+Select mission
+
+; Is mission = 1?
+Case 1
+Print "Your mission is to get the plutonium and get out alive!"
+
+; Is mission = 2?
+Case 2
+Print "Your mission is to destroy all enemies!"
+
+; Is mission = 3?
+Case 3
+Print "Your mission is to steal the enemy building plans!"
+
+; What do do if none of the cases match the value of mission
+Default
+Print "Missions 4-10 are not available yet!"
+
+; End the selection process
+End Select
+

Index

+ diff --git a/_release/help/commands/2d_commands/Delay.htm b/_release/help/commands/2d_commands/Delay.htm new file mode 100644 index 0000000..985146f --- /dev/null +++ b/_release/help/commands/2d_commands/Delay.htm @@ -0,0 +1,5 @@ +Command: Delay   Delay milliseconds  

Definition:

Pause program execution for a certain time.

Parameter Description:


milliseconds = the amount of milliseconds to delay. 1000=1 second

Command Description:

This command stops all program execution for the designated time period. All execution stops. If you need program execution to continue, consider trapping time elapsed with a custom timer function using Millisecs().

Example:

; Delay for 5 seconds
+
+Delay 5000
+

Index

+ diff --git a/_release/help/commands/2d_commands/Delete.htm b/_release/help/commands/2d_commands/Delete.htm new file mode 100644 index 0000000..f0b3801 --- /dev/null +++ b/_release/help/commands/2d_commands/Delete.htm @@ -0,0 +1,15 @@ +Command: Delete   Delete custom_type_name  

Definition:

Delete an object from a custom TYPE collection.

Parameter Description:


custom_type_name = the custom name of an existing object

Command Description:

If you haven't read up on the TYPE + command, you might want to do so before continuing.

+

Use the Delete command to remove an object from the Type collection. Use the + commands FIRST, LAST, BEFORE, and NEXT to move the object pointer to the object + you want to delete, then issue the Delete command with the custom Type name.

+

This is often used in a FOR ... EACH loop when a collision happens and you + wish to remove the object (an alien ship object for example) from the collection.

Example:

; Move them all over 1 (like the description example from TYPE command)
+ ; If the chair isn't on the screen anymore, delete that chair object from the
+ ; collection.

+

For room.chair = Each chair
+ room\x = room\x + 1
+ if room\x > 640 then
+ Delete room
+ Next

Index

+ diff --git a/_release/help/commands/2d_commands/DeleteDir.htm b/_release/help/commands/2d_commands/DeleteDir.htm new file mode 100644 index 0000000..ac98d85 --- /dev/null +++ b/_release/help/commands/2d_commands/DeleteDir.htm @@ -0,0 +1,5 @@ +Command: DeleteDir   DeleteDir directory/path  

Definition:

Deletes a specified folder/directory.

Parameter Description:


directory/path = full path/name of directory

Command Description:

Deletes a specified folder/directory from the device. Note: This only works on EMPTY directories - you cannot delete a folder with other folders or files inside with this command. Do not apply a trailing slash.

Example:

; DeleteDir example
+
+DeleteDir "C:\test"
+

Index

+ diff --git a/_release/help/commands/2d_commands/DeleteFile.htm b/_release/help/commands/2d_commands/DeleteFile.htm new file mode 100644 index 0000000..e0af252 --- /dev/null +++ b/_release/help/commands/2d_commands/DeleteFile.htm @@ -0,0 +1,4 @@ +Command: DeleteFile   DeleteFile path/filename  

Definition:

Deletes a specified file.

Parameter Description:


path/filename = full path/filename to the file to delete

Command Description:

Deletes a specified file from the drive. You will need to make sure the file exists before execution and be sure its been deleted AFTER execution. Use FILETYPE to determine this.

Example:

; DELETEFILE example
+
+DeleteFile "C:\test\myfile.bb"

Index

+ diff --git a/_release/help/commands/2d_commands/DeleteNetPlayer.htm b/_release/help/commands/2d_commands/DeleteNetPlayer.htm new file mode 100644 index 0000000..36d6954 --- /dev/null +++ b/_release/help/commands/2d_commands/DeleteNetPlayer.htm @@ -0,0 +1,34 @@ +Command: DeleteNetPlayer   DeleteNetPlayer playerID  

Definition:

Deletes a local player from the network game.

Parameter Description:


playerID = value assigned when player was created with CreateNetPlayer

Command Description:

Using the playerID generated by the CreateNetPlayer command, this command will remove the designated player from the network game.
+
+This also causes a special message to be sent to all remote machines (see NetMsgType).

Example:

; DeleteNetPlayer example
+
+newGame = StartNetGame()
+; Check the status of the new game. +If newGame = 0 Then
+ Print "Could not start or join net game."
+ End
+
+ElseIf newGame = 1
+ Print "Successfully joined the network game"
+ElseIf newGame = 2
+ Print "A new network game was started!"
+EndIf
+
+; Create a random player name
+name$="Player" + Rand(100)
+
+; Get a unique player id number for the player
+; and create the player
+playerID=CreateNetPlayer(name$)
+
+If playerID = 0 Then
+Print "Player could not be created!"
+Else
+Print "Player " + name$ + " was created and given ID#" + playerID
+WaitKey()
+; delete the player!
+DeleteNetPlayer playerID
+Print "The local player was deleted!"
+End If
+waitkey()

Index

+ diff --git a/_release/help/commands/2d_commands/Dim.htm b/_release/help/commands/2d_commands/Dim.htm new file mode 100644 index 0000000..2e63cd9 --- /dev/null +++ b/_release/help/commands/2d_commands/Dim.htm @@ -0,0 +1,27 @@ +Command: Dim   Dim variable(elements)  

Definition:

Dimensions an array variable for storage.

Parameter Description:


variable = variable of desired type (string, floating, integer)
+elements = number of elements to be created. Can be multi-dimensional.

Command Description:

Prepares an array using the specified variable type as its type and specified elements for the number of containers it should hold. You may use as many dimension elements as you like (just watch your memory). There is no way in Blitz to 'Redimension' arrays, so define them accordingly. Use the proper notation on the declaration variable to make it a string($), floating(#), or integer type array. Note: Arrays always start at ZERO reference - so variable(0) is always the first element.
+
+To use this command effectively, you must understand arrays. Think of an array like a variable that has multiple slots to hold many values, all under the same variable name. Before TYPEs came around, this was the best way to track repeating elements (say, alien ships) because you can iterate through an array collection easily.
+
+Take for example, you want to track 100 aliens on the screen. You could have two variables - alienx and alieny. By making these arrays - alienx() and alieny() and each having 100 elements each, you could easily set or retrieve the first alien's location by using alienx(1), alieny(1). The next alien's coordinates would be alienx(2), alienx(2) and so on. This makes it easy to use a FOR ... NEXT or EACH loop to go through all the elements.
+
+Arrays are also useful for 'multi-dimensional' notation too. Instead of tracking our 100 aliens in the method mentioned above, you could use a single variable: alien(100,1). The first element collection are the 100 aliens, the second element is the X and Y location of that alien - the 0 element being the alien's X location, and the 1 element being the alien's Y location. So to set the position of alien 57 to X=640,Y=480 you could do this:
+
+alien(57,0)=640
+alien(57,1)=480
+DrawImage imgAlien,alien(57,0),alien(57,1)
+
+Of course, TYPEs are a much better way of doing this sort of multiple value sort of routine.
+
+Arrays are great for tracking collections of items with a single, common element - but often times TYPEs will prove to be more useful.

Example:

; DIM example
+; Create a collection of 100 random numbers
+
+; Declare our array
+Dim nums(100)
+
+; Fill each element with a random number
+For T = 1 to 100
+nums(t) = Rnd(1,100)
+Next
+

Index

+ diff --git a/_release/help/commands/2d_commands/DrawBlock.htm b/_release/help/commands/2d_commands/DrawBlock.htm new file mode 100644 index 0000000..9678678 --- /dev/null +++ b/_release/help/commands/2d_commands/DrawBlock.htm @@ -0,0 +1,31 @@ +Command: DrawBlock   DrawBlock image,x,y,[frame]  

Definition:

Draws an image at a location without regards to transparency.

Parameter Description:


image = variable of the image handle
+x = x location to draw the image
+y = y location to draw the image
+frame = image's frame to draw (optional - default is 0)

Command Description:

This is similar to the DrawImage command except that any transparency or MaskImage is ignored and the entire image (including masked colors) is drawn. The frame is optional.

Example:

; DrawBlock Example
+
+; Turn on graphics mode
+Graphics 640,480,16
+
+; Create new empty graphic to store our circle in
+gfxCircle=CreateImage(50,50)
+
+; Draw the circle image
+; Set drawing operations to point to our new empty graphic
+SetBuffer ImageBuffer(gfxCircle)
+Color 255,0,0
+; Note the extra space between the circle and the edge of the graphic
+Oval 10,10,30,30,1
+
+; Let's not forget to put the drawing buffer back!
+SetBuffer BackBuffer()
+; Set the CLS color to white
+ClsColor 255,255,255
+
+; Let the user move the circle graphic around a white screen
+; putting the graphic at the MouseX,Y coordinates
+While Not KeyHit(1)
+Cls
+DrawBlock gfxCircle,MouseX(),MouseY()
+Flip
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/DrawBlockRect.htm b/_release/help/commands/2d_commands/DrawBlockRect.htm new file mode 100644 index 0000000..25ccbac --- /dev/null +++ b/_release/help/commands/2d_commands/DrawBlockRect.htm @@ -0,0 +1,38 @@ +Command: DrawBlockRect   DrawBlockRect image,x,y,rect_x,rect_y,rect_width,rect_height,[frame]  

Definition:

Draws a rectangular area of an image at the designated location without transparency.

Parameter Description:


image = variable holding the image handle
+x = x location on the screen to draw the image
+y = y location on the screen to draw the image
+rect_x = starting x location within the image to draw
+rect_y = starting y location within the image to draw
+rect_width = the height of the area to draw
+rect_height = the width of the area to draw
+frame = optional frame number of image to draw
+

Command Description:

This command will let you draw a rectangular PORTION of an image to the designated location on the screen. The transparent/masked portions of the original image will be ignored and drawn with the image.
+
+This is handy if you are doing something like revealing part of a screen when the player uncovers something (think QIX). You could load the 'picture' into an image, then when the player clears a rectangular region, you could paste that portion of the final image onto the playfield. If you want to draw the image portion with transparency or masking, use DrawImageRect instead.

Example:

; DrawBlockRect Example
+
+; Turn on graphics mode
+Graphics 640,480,16
+
+; Create new empty graphic to store our circle in
+gfxCircle=CreateImage(50,50)
+
+; Draw the circle image
+; Set drawing operations to point to our new empty graphic
+SetBuffer ImageBuffer(gfxCircle)
+Color 255,0,0
+; Note the extra space between the circle and the edge of the graphic
+Oval 10,10,30,30,1
+SetBuffer FrontBuffer()
+
+; Set the screen to white so you can see the transparent areas
+ClsColor 255,255,255
+Cls
+
+; Let's draw portions of the circle randomly
+While Not KeyHit(1)
+; We take random sized portions of the circle and put them
+; at a random location ... wash, rinse, and repeat
+DrawBlockRect gfxCircle,Rnd(640),Rnd(480),0,0,Rnd(50),Rnd(50),0
+Delay 100
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/DrawImage.htm b/_release/help/commands/2d_commands/DrawImage.htm new file mode 100644 index 0000000..35e0248 --- /dev/null +++ b/_release/help/commands/2d_commands/DrawImage.htm @@ -0,0 +1,35 @@ +Command: DrawImage   DrawImage handle,x,y,[frame]  

Definition:

Draws an image or frame of an animImage on the screen.

Parameter Description:


handle = variable image handle previously designated
+x = the 'x' location of the screen to display the graphic
+y = the 'y' location of the screen to display the graphic
+frame = the frame number of the AnimImage to display (optional; 0 is assumed)

Command Description:

This command draws a previously loaded graphic. This command draws both single image graphics (loaded with the LoadImage command) as well as animated images (loaded with the LoadAnimImage command).
+
+You specify where on the screen you wish the image to appear. You can actually 'draw' off the screen as well by using negative values or positive values that are not visible 'on the screen'.
+
+Finally, if you are using an animated image (loaded with the LoadAnimImage), you can specify which frame of the imagestrip is displayed with the DrawImage command.
+
+One of the most common problems new Blitz programmers face when using drawing commands is that even though they draw the graphic to the screen, they never see it!
+
+Remember, Blitz Basic is fast ... too fast for the human eye. You will have to either continuously draw the image over and over again (like the way a cartoon or TV works), clearing the screen each time a change is made (this is called double buffering); or you will need to delay Blitz's execution long enough in 'human time' to let you SEE the picture. We will do the double buffering approach.

Example:

; LoadImage and DrawImage example
+
+; Declare a variable to hold the graphic file handle
+Global gfxPlayer
+
+; Set a graphics mode
+Graphics 640,480,16
+
+; Set drawing operations for double buffering
+SetBuffer BackBuffer()
+
+; Load the image and assign its file handle to the variable
+; - This assumes you have a graphic called player.bmp in the
+; same folder as this source code
+gfxPlayer=LoadImage("player.bmp")
+
+; Let's do a loop where the graphic is drawn wherever the
+; mouse is pointing. ESC will exit.
+While Not KeyHit(1)
+Cls ; clear the screen
+DrawImage gfxPlayer,MouseX(),MouseY() ; Draw the image!
+Flip ; flip the image into view and clear the back buffer
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/DrawImageRect.htm b/_release/help/commands/2d_commands/DrawImageRect.htm new file mode 100644 index 0000000..6278ccb --- /dev/null +++ b/_release/help/commands/2d_commands/DrawImageRect.htm @@ -0,0 +1,34 @@ +Command: DrawImageRect   DrawImageRect image,x,y,rect_x,rect_y,rect_width,rect_height,[frame]  

Definition:

Draws a rectangular area of an image at the designated location.

Parameter Description:


image = variable holding the image handle
+x = x location on the screen to draw the image
+y = y location on the screen to draw the image
+rect_x = starting x location within the image to draw
+rect_y = starting y location within the image to draw
+rect_width = the height of the area to draw
+rect_height = the width of the area to draw
+frame = optional frame number of image to draw

Command Description:

This command will let you draw a rectangular PORTION of an image to the designated location on the screen. The transparent/masked portions of the original image will be drawn transparent, just as you normally would draw an image.
+
+This is handy if you are doing something like revealing part of a screen when the player uncovers something (think QIX). You could load the 'picture' into an image, then when the player clears a rectangular region, you could paste that portion of the final image onto the playfield. If you want to draw the image portion with no transparency or mask, use DrawBlockRect instead.

Example:

; DrawImageRect Example
+
+; Turn on graphics mode
+Graphics 640,480,16
+
+; Create new empty graphic to store our circle in
+gfxCircle=CreateImage(50,50)
+
+; Draw the circle image
+; Set drawing operations to point to our new empty graphic
+SetBuffer ImageBuffer(gfxCircle)
+Color 255,0,0
+; Note the extra space between the circle and the edge of the graphic
+Oval 10,10,30,30,1
+SetBuffer FrontBuffer()
+
+
+; Let's draw portions of the circle randomly
+While Not KeyHit(1)
+; We take random sized portions of the circle and put them
+; at a random location ... wash, rinse, and repeat
+DrawImageRect gfxCircle,Rnd(640),Rnd(480),0,0,Rnd(50),Rnd(50),0
+Delay 100
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/EOF.htm b/_release/help/commands/2d_commands/EOF.htm new file mode 100644 index 0000000..5f393cd --- /dev/null +++ b/_release/help/commands/2d_commands/EOF.htm @@ -0,0 +1,19 @@ +Command: EOF   EOF (filehandle|stream)  

Definition:

Checks to see if the End Of File (or stream) has been reached.

Parameter Description:


filehandle|stream = a valid variable set with the OpenFile, ReadFile command, or OpenTCPStream (v1.52+)

Command Description:

Checks to see if the End of File of an opened file or stream has been reached. Use this to determine if you should continue to pull more information from a file/stream or not. Use this to read a text file of unknown length (say a README.TXT) and display it. See example.
+
+Eof returns 1 if eof has been reached or, in the case of a TCP stream, the stream has been 'nicely' closed.
+
+Eof returns -1 if something has gone wrong during stream processing.

+Streams can only be used in Blitz Basic v1.52 or greater.

Example:

; EOF sample
+
+file$="c:\autoexec.bat"
+
+filein = ReadFile(file$)
+
+Print "Here is your Autoexec.bat file ..."
+
+; Loop this until we reach the end of file
+While Not Eof(filein)
+Print ReadLine$(filein)
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/Each.htm b/_release/help/commands/2d_commands/Each.htm new file mode 100644 index 0000000..207da31 --- /dev/null +++ b/_release/help/commands/2d_commands/Each.htm @@ -0,0 +1,9 @@ +Command: Each   Each type_variable  

Definition:

Used to iterate through a collection of TYPE objects.

Parameter Description:


type_variable = A previously declared TYPE object

Command Description:

If you haven't read up on the TYPE + command, you might want to do so before continuing.

+

The For .. Each loop allows you to walk through each object in the Type collection. + This is perfect for updating a large group of objects (such as a group of alien + invaders). Do look over the Type command.

Example:

; Move them all over 1 (like the description example from TYPE command)

+

For room.chair = Each chair
+ room\x = room\x + 1
+ Next

Index

+ diff --git a/_release/help/commands/2d_commands/Else If.htm b/_release/help/commands/2d_commands/Else If.htm new file mode 100644 index 0000000..c1bb057 --- /dev/null +++ b/_release/help/commands/2d_commands/Else If.htm @@ -0,0 +1,20 @@ +Command: Else If   Else If   

Definition:

Performs an additional IF condition check during an IF ... THEN conditional structure.

Parameter Description:


None

Command Description:

During a standard IF ... THEN conditional structure, you may wish to check another condition if the original condition fails. This 'nested IF' situation can get WAY out of hand, and once you have more than two nested conditionals, you should consider a SELECT/CASE structure. See the example.

Example:

; ELSE IF Example
+
+; Input the user's name
+name$=Input$("What is your name? ")
+
+; Doesn't the person's name equal SHANE?
+If name$ = "Shane" Then
+
+Print "You are recognized, Shane! Welcome!"
+
+Else If name$="Ron" then
+Print "You are recognized too, Ron! Welcome!"
+
+Else
+Print "Sorry, you don't belong here!"
+
+; End of the condition checking
+End If
+

Index

+ diff --git a/_release/help/commands/2d_commands/Else.htm b/_release/help/commands/2d_commands/Else.htm new file mode 100644 index 0000000..12318fe --- /dev/null +++ b/_release/help/commands/2d_commands/Else.htm @@ -0,0 +1,11 @@ +Command: Else   Else   

Definition:

Begins the code to be executed in the event the IF conditional fails.

Parameter Description:


None.

Command Description:

There are times during an IF ... THEN conditional that you will want code to execute in the event that the conditional is NOT met. The ELSE command begins that block of code, and is terminated by the END IF command. See example.

Example:

; ELSE example
+
+name$=Input$("What is your name?")
+
+If name$="Shane" then
+Print "Hello Shane!"
+Else
+Print "I have NO clue who you are!"
+End If
+

Index

+ diff --git a/_release/help/commands/2d_commands/ElseIf.htm b/_release/help/commands/2d_commands/ElseIf.htm new file mode 100644 index 0000000..876875c --- /dev/null +++ b/_release/help/commands/2d_commands/ElseIf.htm @@ -0,0 +1,2 @@ +Command: ElseIf   ElseIf   

Definition:

Alternate command for the END IF command, it performs an additional IF condition check during an IF ... THEN conditional structure.

Parameter Description:


None

Command Description:

During a standard IF ... THEN conditional structure, you may wish to check another condition if the original condition fails. This 'nested IF' situation can get WAY out of hand, and once you have more than two nested conditionals, you should consider a SELECT/CASE structure. See the example.

Example:

; ELSEIF Example

; Input the user's name
name$=Input$("What is your name? ")

; Doesn't the person's name equal SHANE?
If name$ = "Shane" Then

Print "You are recognized, Shane! Welcome!"

ElseIf name$="Ron" then
Print "You are recognized too, Ron! Welcome!"

Else
Print "Sorry, you don't belong here!"

; End of the condition checking
End If

Index

+ diff --git a/_release/help/commands/2d_commands/End Function.htm b/_release/help/commands/2d_commands/End Function.htm new file mode 100644 index 0000000..f394c25 --- /dev/null +++ b/_release/help/commands/2d_commands/End Function.htm @@ -0,0 +1,16 @@ +Command: End Function   End Function   

Definition:

Denotes the end of a Function structure.

Parameter Description:


None.

Command Description:

This line terminates a FUNCTION structure. Upon reaching this line, Blitz will branch program execution to the next command following the original call to the function. See the FUNCTION command for more information.

Example:

; End Function Example
+
+; Get the user's name
+name$=Input$("Enter Your Name:")
+
+; Call a function to print how many letters the name has
+numletters(name$);
+
+;The program basically ends here, because functions don't run unless called.
+
+; The actual function
+Function numletters(passedname$)
+Print "Your name has " + Len(passedname$) + " letters in it."
+End Function
+

Index

+ diff --git a/_release/help/commands/2d_commands/End If.htm b/_release/help/commands/2d_commands/End If.htm new file mode 100644 index 0000000..c0d59ef --- /dev/null +++ b/_release/help/commands/2d_commands/End If.htm @@ -0,0 +1,18 @@ +Command: End If   End If   

Definition:

Closing element of an IF/THEN condition checking structure.

Parameter Description:


None.

Command Description:

END IF signals the end of an IF THEN condition check. See IF for more information. You can also use ENDIF as a single word command - it functions identically.

Example:

; IF THEN Example
+
+; Input the user's name
+name$=Input$("What is your name? ")
+
+; Doesn't the person's name equal SHANE?
+If name$ = "Shane" Then
+
+Print "You are recognized, Shane! Welcome!"
+
+Else
+
+Print "Sorry, you don't belong here!"
+
+; End of the condition checking
+End If
+

Index

+ diff --git a/_release/help/commands/2d_commands/End Select.htm b/_release/help/commands/2d_commands/End Select.htm new file mode 100644 index 0000000..d52fbbf --- /dev/null +++ b/_release/help/commands/2d_commands/End Select.htm @@ -0,0 +1,27 @@ +Command: End Select   End Select   

Definition:

The closing command in a SELECT structure.

Parameter Description:


None.

Command Description:

This command ends the SELECT structure. If you are using DEFAULT commands, this is the ending point of that command set's execution. See SELECT, CASE, and DEFAULT for more information.

Example:

; SELECT/CASE/DEFAULT/END SELECT Example
+; Assign a random number 1-10
+mission=Rnd(1,10)
+
+; Start the selection process based on the value of 'mission' variable
+Select mission
+
+; Is mission = 1?
+Case 1
+Print "Your mission is to get the plutonium and get out alive!"
+
+; Is mission = 2?
+Case 2
+Print "Your mission is to destroy all enemies!"
+
+; Is mission = 3?
+Case 3
+Print "Your mission is to steal the enemy building plans!"
+
+; What do do if none of the cases match the value of mission
+Default
+Print "Missions 4-10 are not available yet!"
+
+; End the selection process
+End Select
+

Index

+ diff --git a/_release/help/commands/2d_commands/End Type.htm b/_release/help/commands/2d_commands/End Type.htm new file mode 100644 index 0000000..901edbe --- /dev/null +++ b/_release/help/commands/2d_commands/End Type.htm @@ -0,0 +1,12 @@ +Command: End Type   End Type   

Definition:

The last command of the TYPE ... END TYPE object creation.

Parameter Description:


None

Command Description:

If you haven't read up on the TYPE + command, you might want to do so before continuing.
+
+After assigning all the Field variables in your Type object, use this to finish the creation of the Type.

Example:

; Define the CHAIR Type
+
+ Type CHAIR
+ Field X
+ Field Y
+ Field HEIGHT
+ End Type
+

Index

+ diff --git a/_release/help/commands/2d_commands/End.htm b/_release/help/commands/2d_commands/End.htm new file mode 100644 index 0000000..c10973a --- /dev/null +++ b/_release/help/commands/2d_commands/End.htm @@ -0,0 +1,5 @@ +Command: End   End   

Definition:

Stops the program execution and exits the program.

Parameter Description:


None

Command Description:

Use this command to stop your program running. You will be returned to the editor if running from there, or the program will completely exit if running a compiled EXE version.

Example:

; If the game is over, then quit
+
+if gameOver=1 then End
+

Index

+ diff --git a/_release/help/commands/2d_commands/EndGraphics.htm b/_release/help/commands/2d_commands/EndGraphics.htm new file mode 100644 index 0000000..71fc58d --- /dev/null +++ b/_release/help/commands/2d_commands/EndGraphics.htm @@ -0,0 +1,22 @@ +Command: EndGraphics   EndGraphics   

Definition:

Ends the graphics mode.

Parameter Description:


None

Command Description:

This command ends the graphics mode, and puts Blitz back into 'text' mode (for lack of a better term).

Example:

; End Graphics Example
+
+; Enter graphics mode
+Graphics 640,480,16
+
+; Print hello 10 times on the graphic screen
+For t = 1 To 10
+Print "Hello"
+Next
+
+; Wait for a left mouse button
+While Not MouseHit(1)
+Wend
+
+; End the graphics mode
+EndGraphics
+
+; Print again, this time to the text screen
+For t = 1 To 10
+Print "There"
+Next

Index

+ diff --git a/_release/help/commands/2d_commands/EndIF.htm b/_release/help/commands/2d_commands/EndIF.htm new file mode 100644 index 0000000..1e9bdc8 --- /dev/null +++ b/_release/help/commands/2d_commands/EndIF.htm @@ -0,0 +1,18 @@ +Command: EndIF   EndIF   

Definition:

Another acceptable version of the END IF statement

Parameter Description:


None.

Command Description:

Terminates an IF ... THEN condition structure. See END IF for more information.

Example:

; IF THEN Example
+
+; Input the user's name
+name$=Input$("What is your name? ")
+
+; Doesn't the person's name equal SHANE?
+If name$ = "Shane" Then
+
+Print "You are recognized, Shane! Welcome!"
+
+Else
+
+Print "Sorry, you don't belong here!"
+
+; End of the condition checking
+EndIf
+

Index

+ diff --git a/_release/help/commands/2d_commands/ExecFile.htm b/_release/help/commands/2d_commands/ExecFile.htm new file mode 100644 index 0000000..4c32f63 --- /dev/null +++ b/_release/help/commands/2d_commands/ExecFile.htm @@ -0,0 +1,20 @@ +Command: ExecFile   ExecFile (filename$)  

Definition:

Runs an external executable program from within a Blitz program.

Parameter Description:


filename$ = any valid variable or path/filename to the executable program

Command Description:

Use this command to halt execution of your program and run an external program.
+
+The usefulness of this command is really mostly for calling some system level command, launching a browser, etc. Without the ability to playback a movie (for cutscenes, etc) I would think the most useful part of this is command would be calling a self-contained .exe movie (a la BLINK) to play as an intro, then when its completed, return to your program for continued execution.
+
+Note: This command uses ShellExecute to allow you to 'open' any file (like a .doc or .txt) file with its default associated program.

Example:

; ExecFile sample - RUN THIS WINDOWED!
+; Win9x users will need to change location of calc.exe
+
+filename$="c:\winnt\system32\calc.exe"
+
+Print "Press any key to run CALC.EXE!"
+
+WaitKey()
+
+ExecFile(filename$)
+
+Print "Press any key to quit."
+
+WaitKey()
+

Index

+ diff --git a/_release/help/commands/2d_commands/Exit.htm b/_release/help/commands/2d_commands/Exit.htm new file mode 100644 index 0000000..e9f1f73 --- /dev/null +++ b/_release/help/commands/2d_commands/Exit.htm @@ -0,0 +1,7 @@ +Command: Exit   Exit   

Definition:

Exits a loop prematurely.

Parameter Description:


None

Command Description:

This command will allow you to leave a For .. Next loop as well as many other types of loops prematurely (assuming a condition was met or other planned event). It exits the IMMEDIATE loop - you'll need one for each 'nest' of loops you want to exit from.

Example:

; EXIT Command sample
+
+For t = 1 To 100
+ Print t
+ If t = 50 Then Exit
+Next

Index

+ diff --git a/_release/help/commands/2d_commands/Exp.htm b/_release/help/commands/2d_commands/Exp.htm new file mode 100644 index 0000000..4f3059d --- /dev/null +++ b/_release/help/commands/2d_commands/Exp.htm @@ -0,0 +1,6 @@ +Command: Exp   Exp (number)  

Definition:

Returns the base of the natural system of logarithms e, raised to the power of the supplied argument.

Parameter Description:


number=float or integer

Command Description:

Exp() is the exponential function. Logarithms to the base e are called the Natural or Napierian logarithms. The Exp() and Log functions use the transcendental number e as a base (approx 2.718). Exp() is the inverse of the antilogarithm Log function. +See also: Log Log10

Example:

; To find the value of e
+print Exp(1) ; i.e. e^1, returns 2.718281
+; To find the value of e^5
+print Exp(5) ; returns 148.413162

Index

+ diff --git a/_release/help/commands/2d_commands/False.htm b/_release/help/commands/2d_commands/False.htm new file mode 100644 index 0000000..d6b4595 --- /dev/null +++ b/_release/help/commands/2d_commands/False.htm @@ -0,0 +1,21 @@ +Command: False   False   

Definition:

A boolean expression used in comparisons. Actually returns a value of 0.

Parameter Description:


None.

Command Description:

FALSE is a keyword to denote a negative result in a conditional statement. Often times, FALSE is implied and doesn't need to be directly referenced - or a NOT command is used in the comparison. FALSE can also be used as a RETURN value from a FUNCTION. Also see the TRUE command. See the example.

Example:

; FALSE example
+
+; Assign test a random number of 0 or 1
+test= Rnd(0,1)
+
+; FALSE is implied because of the NOT
+If not test=1 Then
+Print "Test was valued at 0"
+End If
+
+; Let's set test to be false
+test=False
+
+; Pointlessly test it
+If test=False Then
+Print "Test is false"
+else
+print "Test is true"
+End If
+

Index

+ diff --git a/_release/help/commands/2d_commands/Field.htm b/_release/help/commands/2d_commands/Field.htm new file mode 100644 index 0000000..809c0e3 --- /dev/null +++ b/_release/help/commands/2d_commands/Field.htm @@ -0,0 +1,28 @@ +Command: Field   Field variable  

Definition:

Assigns a variable for use into a TYPE object structure.

Parameter Description:


variable = any legal variable

Command Description:

If you haven't read up on the TYPE + command, you might want to do so before continuing.

+

When you define a custom Type, you need to assign some variables to track within + in. Using the Field command within the Type .. End + Type commands, you set a variable that can be used for EACH object created + with the NEW + command.

Example:

; Define the CHAIR Type
+
+ Type CHAIR
+ Field X
+ Field Y
+ Field HEIGHT
+ End Type

+

; Create 100 new chairs using FOR ... NEXT using the collection name of ROOM

+

For tempx = 1 to 10
+ For tempy = 1 to 10
+ room.chair = New Chair
+ room\x = tempx
+ room\y = tempy
+ room\height = Rnd(0,10) ; set a random height 0 to 10
+ Next
+ Next

+

; Move them all over 1 (like the description example from TYPE command)

+

For room.chair = Each chair
+ room\x = room\x + 1
+ Next

Index

+ diff --git a/_release/help/commands/2d_commands/FilePos.htm b/_release/help/commands/2d_commands/FilePos.htm new file mode 100644 index 0000000..6f25b2d --- /dev/null +++ b/_release/help/commands/2d_commands/FilePos.htm @@ -0,0 +1,69 @@ +Command: FilePos   FilePos (filehandle)  

Definition:

Returns the current position within a file that is being read, written or modified.

Parameter Description:


filehandle = the variable returned by the Readfile WriteFile or OpenFile when the file was opened. The value returned is the offset from the start of the file. ( 0 = Start of +the file )

Command Description:

This command returns the current position within a file that is being processed following ReadFile, WriteFile or OpenFile. The returned integer is the offsets in bytes from the start of the file to the current read/write position. Note, this is zero when pointing to the first byte of the file.
+
+By using FilePos and SeekFile the position within the file that is being read or written can be determined and also changed. This allows a file to be read and updated without having to make a new copy of the file or working through the whole file sequentially. This could be useful if you have +created a database file and you want to find and update just a few records within it. It is also possible to create an index file that contains pointers to where each record starts in a data file.
+
+See also:
+ReadByte, ReadShort, ReadInt, ReadFloat, ReadString$, ReadLine$, WriteByte, WriteShort, WriteInt, WriteFloat, WriteShort, WriteString, WriteLine, ReadFile, WriteFile, OpenFile, CloseFile, Eof, FileType, FilePos, SeekFile

Example:

; Changing part of a file using OpenFile, SeekFile, FilePos
+; note FilePos is used in the SearchFile function at the end of this example
+
+; Open/create a file to Write
+fileout = WriteFile("mydata.dat")
+
+; Write the information to the file
+WriteInt( fileout, 1 )
+WriteInt( fileout, 2 )
+WriteInt( fileout, 3 )
+WriteInt( fileout, 4 )
+WriteInt( fileout, 5 )
+
+; Close the file
+CloseFile( fileout )
+
+DisplayFile( "The file as originally written", mydata.dat" )
+Position = SearchFile( 4 , "mydata.dat" )
+Write "Value 4 was found "
+Write Position
+Print " bytes from the start."
+Print
+
+; Open the file and change the value 3 to 9999
+
+file = OpenFile("mydata.dat")
+SeekFile( file, Position ) ; Move to the found location
+WriteInt( file, 9999 ) ; Replace the original value with 9999
+CloseFile( file )
+
+
+DisplayFile( "The file after being modified", "mydata.dat" )
+WaitKey()
+End ; End of program
+
+; **** Function Definitions follow ****
+
+; Read the file and print it
+Function DisplayFile( Tittle$, Filename$ )
+ Print tittle$
+ file = ReadFile( Filename$ )
+ While Not Eof( file )
+ Number = ReadInt( file )
+ Print Number
+ Wend
+ CloseFile( file )
+ Print
+End Function
+
+; Search a file of integers for the Wanted data value
+; Note the need to subtract 4 from the location since having read it
+; we are now pointing at the next Integer also Return() was placed
+; after closing the file so it is closed properly
+Function SearchFile( Wanted, Filename$ )
+ file = ReadFile( Filename$ )
+ While Not Eof( file )
+ If ReadInt( file ) = Wanted Then Location = FilePos( file ) - 4
+ Wend
+ CloseFile( file )
+ Return( Location )
+End Function

Index

+ diff --git a/_release/help/commands/2d_commands/FileSize.htm b/_release/help/commands/2d_commands/FileSize.htm new file mode 100644 index 0000000..761425f --- /dev/null +++ b/_release/help/commands/2d_commands/FileSize.htm @@ -0,0 +1,10 @@ +Command: FileSize   FileSize (filename$)  

Definition:

Returns the size of the requested file - in bytes.

Parameter Description:


filename$ = any valid variable with path/filename

Command Description:

Often it will be useful to return the size of a file. File size is important for copying, reading, and other file evolutions.

Example:

; Windows 9x users will need to change location of calc.exe
+
+filename$="c:\winnt\system32\calc.exe"
+
+Print "The size of the file is: " + FileSize(filename$)
+
+Print "Press any key to quit."
+
+WaitKey()

Index

+ diff --git a/_release/help/commands/2d_commands/FileType.htm b/_release/help/commands/2d_commands/FileType.htm new file mode 100644 index 0000000..0a1d467 --- /dev/null +++ b/_release/help/commands/2d_commands/FileType.htm @@ -0,0 +1,18 @@ +Command: FileType   FileType (filename$)  

Definition:

Checks to see if the designated filename exists or is a directory.

Parameter Description:


filename$ = any valid variable with path/filename

Command Description:

This command checks the filename you pass and determines if it exists and whether or not it is a valid filename or if it is a directory. Here are the values it returns:
+
+1 = The filename exists
+0 = The filename doesn't exist
+2 = The filename is not a file - but a directory
+
+Use this to validate that a file exists before you do something to it.

Example:

; Windows 9x users will need to change location of calc.exe
+
+filename$="c:\winnt\system32\calc.exe"
+
+if fileType(filename$)=1 then Print "The file exists!"
+if fileType(filename$)=0 then Print "File not found!"
+if fileType(filename$)=2 then Print "This is a directory!"
+
+Print "Press any key to quit."
+
+WaitKey()

Index

+ diff --git a/_release/help/commands/2d_commands/FindGfxMode.htm b/_release/help/commands/2d_commands/FindGfxMode.htm new file mode 100644 index 0000000..54c5932 --- /dev/null +++ b/_release/help/commands/2d_commands/FindGfxMode.htm @@ -0,0 +1,18 @@ +Command: FindGfxMode   FindGfxMode (width,height,depth)   

Definition:

Returns the mode number of a graphic mode meeting your criteria.

Parameter Description:


width = width, in pixels (i.e. 640)
+height = height, in pixels (i.e. 480)
+depth = color depth (i.e. 16, 24, 32)

Command Description:

Use this command to determine which of the user's graphic card mode supports the parameters you supply. You can get a full detailed list of the video card modes - see CountGFXModes().

Example:

; FindGFXMode example
+
+; change values to see different mode numbers
+mode=FindGfxMode(800,600,16)
+
+; If there is a mode, tell user
+If mode > 0 Then
+Print "The mode you requested is: " + mode
+Else
+Print "That mode doesn't exist for this video card."
+End If
+
+; Wait for ESC press from user
+While Not KeyHit(1)
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/First.htm b/_release/help/commands/2d_commands/First.htm new file mode 100644 index 0000000..d64c2ba --- /dev/null +++ b/_release/help/commands/2d_commands/First.htm @@ -0,0 +1,43 @@ +Command: First   First type_variable  

Definition:

Move the Type object pointer to the first object in the collection.

Parameter Description:


type_variable = the actual Type name, not the custom Type name

Command Description:

If you haven't read up on the TYPE + command, you might want to do so before continuing.

+

Use this to assign a custom Type object to the first object in the collection. + See the example.

Example:

; Define a crafts Type

+

Type crafts
+ Field x
+ Field y
+ Field dead
+ Field graphic
+ End Type

+

; Create 100 crafts, with the unique name of alien
+ For t = 1 To 100
+ alien.crafts = New crafts
+ alien\x = Rnd(0,640)
+ alien\y = Rnd(0,480)
+ alien\dead = 0
+ alien\graphic = 1
+ Next

+

; Move to the first object
+ alien.crafts = First crafts

+

Print alien\x
+ Print alien\y
+ Print alien\dead
+ Print alien\graphic

+

; move to the next alien object
+ alien = After alien

+

Print alien\x
+ Print alien\y
+ Print alien\dead
+ Print alien\graphic

+

; move to the last alien object
+ alien.crafts = Last crafts

+

Print alien\x
+ Print alien\y
+ Print alien\dead
+ Print alien\graphic

+

; move to the second to the last alien object
+ alien = Before alien

+

Print alien\x
+ Print alien\y
+ Print alien\dead
+ Print alien\graphic

Index

+ diff --git a/_release/help/commands/2d_commands/Flip.htm b/_release/help/commands/2d_commands/Flip.htm new file mode 100644 index 0000000..976cca2 --- /dev/null +++ b/_release/help/commands/2d_commands/Flip.htm @@ -0,0 +1,21 @@ +Command: Flip   Flip [vwait]   

Definition:

In a double buffering environment, flips the BackBuffer into view.

Parameter Description:


vwait = set to TRUE to wait for vertical blank to finish

Command Description:

When you are double buffering (or doing all drawing operations to the BackBuffer(), at some point, after you've drawn all your elements - you will need to 'flip' that Backbuffer into the visible FrontBuffer() so it can be seen. This command will perform this function. This allows you to draw massive amounts of information quickly, then flip it into view. See BackBuffer() for more info.

Example:

; Flip/Backbuffer()/Rect Example
+
+; Set Graphics Mode
+Graphics 640,480
+
+; Go double buffering
+SetBuffer BackBuffer()
+
+; Setup initial locations for the box
+box_x = -20 ; negative so it will start OFF screen
+box_y = 100
+
+While Not KeyHit(1)
+Cls ; Always clear screen first
+Rect box_x,box_y,20,20,1 ; Draw the box in the current x,y location
+Flip ; Flip it into view
+box_x = box_x + 1 ; Move the box over one pixel
+If box_x = 640 Then box_x=-20 ; If it leaves the Right edge, reset its x location
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/Float.htm b/_release/help/commands/2d_commands/Float.htm new file mode 100644 index 0000000..833de37 --- /dev/null +++ b/_release/help/commands/2d_commands/Float.htm @@ -0,0 +1,10 @@ +Command: Float   Float variable/value  

Definition:

Convert integer value to a floating point number.

Parameter Description:


variable/value = integer value or variable

Command Description:

Use this command to transform an integer value to a floating point value (presumably to perform a floating point related math function on it). Blitz does a good job of adding dissimilar number types, but if you want to play by the rules and/or port code to/from Blitz, remember to convert your integers to floating point before doing math upon them with dissimilar types.

Example:

; Float example
+
+a=100
+b#=2.5
+c#=Float a
+
+Print b# + c#
+
+

Index

+ diff --git a/_release/help/commands/2d_commands/Floor.htm b/_release/help/commands/2d_commands/Floor.htm new file mode 100644 index 0000000..c249560 --- /dev/null +++ b/_release/help/commands/2d_commands/Floor.htm @@ -0,0 +1,12 @@ +Command: Floor#   Floor# (float)  

Definition:

Rounds a decimal floating variable down to the nearest whole number.

Parameter Description:


float=floating point number

Command Description:

Many times, you will need to round up or down a floating point decimal variable. This command rounds it down to the nearest whole number. Use Ceil# to round the number up.

Example:

; Floor#/Ceil# Example
+
+; Set a floating point variable
+myVal#=0.5
+
+; Round it up
+Print Floor#(myval)
+
+;Round it down
+Print Ceil#(myval)
+

Index

+ diff --git a/_release/help/commands/2d_commands/FlushJoy.htm b/_release/help/commands/2d_commands/FlushJoy.htm new file mode 100644 index 0000000..e6998d0 --- /dev/null +++ b/_release/help/commands/2d_commands/FlushJoy.htm @@ -0,0 +1,10 @@ +Command: FlushJoy   FlushJoy   

Definition:

Flushes out all the queued up joystick button presses.

Parameter Description:


None.

Command Description:

There are many times when you aren't interested in the dozens of possible joystick button pressed the player might have made before you are checking for one in particular. Or perhaps you want to pause the game and wait for any joystick button to be hit, but you don't want a 'queued' button press bypassing this. Use this command before you specifically want to poll a joystick button hit from the user.

Example:

; FlushJoy sample
+
+FlushJoy
+
+Print "Press a joystick button to exit!"
+
+WaitJoy()
+
+End

Index

+ diff --git a/_release/help/commands/2d_commands/FlushKeys.htm b/_release/help/commands/2d_commands/FlushKeys.htm new file mode 100644 index 0000000..07bf1dc --- /dev/null +++ b/_release/help/commands/2d_commands/FlushKeys.htm @@ -0,0 +1,4 @@ +Command: FlushKeys   FlushKeys   

Definition:

Flushes all the currently queued keystrokes.

Parameter Description:


None.

Command Description:

This command 'resets' or 'empties out' the queue holding the keyboard inputs. Can't make it much easier than that.

Example:

; clear all keystrokes from the queue
+FlushKeys
+

Index

+ diff --git a/_release/help/commands/2d_commands/FlushMouse.htm b/_release/help/commands/2d_commands/FlushMouse.htm new file mode 100644 index 0000000..bc622be --- /dev/null +++ b/_release/help/commands/2d_commands/FlushMouse.htm @@ -0,0 +1,10 @@ +Command: FlushMouse   FlushMouse   

Definition:

Flushes out all the queued up mouse button presses.

Parameter Description:


None.

Command Description:

There are many times when you aren't interested in the dozens of possible mouse button pressed the player might have made before you are checking for one in particular. Or perhaps you want to pause the game and wait for any mouse button to be hit, but you don't want a 'queued' button press bypassing this. Use this command before you specifically want to poll a mouse button hit from the user.

Example:

; Flushmouse sample
+
+FlushMouse
+
+Print "Press a mouse button to exit!"
+
+WaitMouse()
+
+End

Index

+ diff --git a/_release/help/commands/2d_commands/FontHeight.htm b/_release/help/commands/2d_commands/FontHeight.htm new file mode 100644 index 0000000..cdb2c81 --- /dev/null +++ b/_release/help/commands/2d_commands/FontHeight.htm @@ -0,0 +1,23 @@ +Command: FontHeight()   FontHeight()   

Definition:

Returns the height of the currently selected font.

Parameter Description:


None.

Command Description:

This returns the height, in pixels, of the currently selected font (using SetFont - previously loaded with LoadFont).

Example:

; FontWidth()/FontHeight example
+
+; enable graphics mode
+Graphics 800,600,16
+
+; Set global on font variable
+Global fntArial
+
+;Load fonts to a file handle variables
+fntArial=LoadFont("Arial",13,False,False,False)
+
+; set the font and print sizes
+SetFont fntArial
+Text 400,0,"The font width of the widest character is:"+ FontWidth(),True,False
+Text 400,30,"The height of the font is:"+ FontHeight(),True,False
+
+; Standard 'wait for ESC' from user
+While Not KeyHit(1)
+Wend
+
+; Clear all the fonts from memory!
+FreeFont fntArial

Index

+ diff --git a/_release/help/commands/2d_commands/FontWidth.htm b/_release/help/commands/2d_commands/FontWidth.htm new file mode 100644 index 0000000..80d1d4b --- /dev/null +++ b/_release/help/commands/2d_commands/FontWidth.htm @@ -0,0 +1,23 @@ +Command: FontWidth()   FontWidth()   

Definition:

Returns the width of the widest character of the currently selected font.

Parameter Description:


None.

Command Description:

This returns the width, in pixels, of the currently selected font (using SetFont - previously loaded with LoadFont). This command returns the width of the WIDEST character of the font.

Example:

; FontWidth()/FontHeight example
+
+; enable graphics mode
+Graphics 800,600,16
+
+; Set global on font variable
+Global fntArial
+
+;Load fonts to a file handle variables
+fntArial=LoadFont("Arial",13,False,False,False)
+
+; set the font and print sizes
+SetFont fntArial
+Text 400,0,"The font width of the widest character is:"+ FontWidth(),True,False
+Text 400,30,"The height of the font is:"+ FontHeight(),True,False
+
+; Standard 'wait for ESC' from user
+While Not KeyHit(1)
+Wend
+
+; Clear all the fonts from memory!
+FreeFont fntArial

Index

+ diff --git a/_release/help/commands/2d_commands/For.htm b/_release/help/commands/2d_commands/For.htm new file mode 100644 index 0000000..675b3cc --- /dev/null +++ b/_release/help/commands/2d_commands/For.htm @@ -0,0 +1,14 @@ +Command: For   For variable  

Definition:

First command of the FOR ... NEXT loop.

Parameter Description:


variable = any valid variable name

Command Description:

The first command of the FOR ... NEXT loop, this command is used to assign a variable to a range of numbers in sequence and execute a set of code that many times. Using the STEP command allows you to skip a certain value between each loop of the code.
+
+This is frequently used when a specific pattern of numbers is needed to perform an evolution (moving something from point A to point B, adding a value to a score incrementally, etc). This allows you to assign a variable with the current value of the loop. See the example for more.
+Note: Unlike many BASIC languages, the NEXT command does NOT use the FOR command's variable as an identifier. If you have nested FOR ... NEXT commands, the language will automatically match the NEXT with the nearest FOR command.

Example:

; Print the values 1 through 10
+For t = 1 To 10
+Print t
+Next
+
+; Print the values 1,3,5,7,9
+For t = 1 To 10 Step 2
+Print t
+Next
+

Index

+ diff --git a/_release/help/commands/2d_commands/Forever.htm b/_release/help/commands/2d_commands/Forever.htm new file mode 100644 index 0000000..29ea7f7 --- /dev/null +++ b/_release/help/commands/2d_commands/Forever.htm @@ -0,0 +1,10 @@ +Command: Forever   Forever   

Definition:

Used in a REPEAT loop to make the loop run endlessly.

Parameter Description:


None.

Command Description:

Replace the UNTIL command in a REPEAT ... UNTIL loop to make the loop run forever. Remember, the program execution will continue indefinately until either you break out of it programmatically! This is often known as 'the infinate loop'. Once more for the cheap seats: "Make sure you provide a means for breaking out of the loop". Use EXIT (to leave the loop) or END to quit the program.

Example:

; FOREVER Example
+
+Repeat
+If KeyHit(1) Then Exit
+Print "You are trapped in an infinate loop! Press ESC!"
+Forever
+
+Print "The infinate loop has ended!"
+

Index

+ diff --git a/_release/help/commands/2d_commands/FreeBank.htm b/_release/help/commands/2d_commands/FreeBank.htm new file mode 100644 index 0000000..8b996e7 --- /dev/null +++ b/_release/help/commands/2d_commands/FreeBank.htm @@ -0,0 +1,20 @@ +Command: FreeBank   FreeBank bank  

Definition:

Frees a memory bank from memory.

Parameter Description:


bank = variable containing handle to valid bank

Command Description:

This releases a memory bank allocated with the CreateBank command.

Example:

; Bank Commands Example
+
+bnkTest=CreateBank(500)
+
+For t = 1 To 50
+PokeByte bnkTest,t,Rnd(255)
+PokeInt bnkTest,t+1,Rnd(10000)
+PokeShort bnkTest,t+2,Rnd(10000)
+PokeFloat bnkTest,t+3,Rnd(-.999,.999)
+Next
+
+For t = 1 To 50
+Print PeekByte (bnkTest,t)
+Print PeekInt (bnkTest,t+1)
+Print PeekShort (bnkTest,t+2)
+Print PeekFloat (bnkTest,t+3)
+Next
+
+Freebank bnkTest

Index

+ diff --git a/_release/help/commands/2d_commands/FreeFont.htm b/_release/help/commands/2d_commands/FreeFont.htm new file mode 100644 index 0000000..f2c70a8 --- /dev/null +++ b/_release/help/commands/2d_commands/FreeFont.htm @@ -0,0 +1,45 @@ +Command: FreeFont   FreeFont fonthandle  

Definition:

Deletes a previously loaded font and frees its memory.

Parameter Description:


fontname = string containing font name
+height = font height desired
+bold = set to TRUE to load font as BOLD
+italic = set to TRUE to load font as ITALIC
+underlined set to TRUE to load font as UNDERLINED
+

Command Description:

This removes a TrueType font previously loaded into memory (though the LoadFont command).
+
+Note: Blitz doesn't work with SYMBOL fonts, like Webdings and WingDings.
+

Example:

; LoadFont/SetFont/FreeFont example
+
+; enable graphics mode
+Graphics 800,600,16
+
+; Set global on font variables
+Global fntArial,fntArialB,fntArialI,fntArialU
+
+;Load fonts to a file handle variables
+fntArial=LoadFont("Arial",24,False,False,False)
+fntArialB=LoadFont("Arial",18,True,False,False)
+fntArialI=LoadFont("Arial",32,False,True,False)
+fntArialU=LoadFont("Arial",14,False,False,True)
+
+; set the font and print text
+SetFont fntArial
+Text 400,0,"This is just plain Arial 24 point",True,False
+
+SetFont fntArialB
+Text 400,30,"This is bold Arial 18 point",True,False
+
+SetFont fntArialI
+Text 400,60,"This is italic Arial 32 point",True,False
+
+SetFont fntArialU
+Text 400,90,"This is underlined Arial 14 point",True,False
+
+; Standard 'wait for ESC' from user
+While Not KeyHit(1)
+Wend
+
+; Clear all the fonts from memory!
+FreeFont fntArial
+FreeFont fntArialB
+FreeFont fntArialI
+FreeFont fntArialU

Index

+ diff --git a/_release/help/commands/2d_commands/FreeImage.htm b/_release/help/commands/2d_commands/FreeImage.htm new file mode 100644 index 0000000..4221eaf --- /dev/null +++ b/_release/help/commands/2d_commands/FreeImage.htm @@ -0,0 +1,23 @@ +Command: FreeImage   FreeImage handle  

Definition:

Removes the designated image from memory.

Parameter Description:


handle=variable that holds the image handle of a previously loaded image

Command Description:

When you are done with an image, use this command to delete the image from memory and free up that memory for other use. Good housekeeping. Get in the habit!

Example:

; FreeImage command
+
+; Global, as always, for graphics
+Global gfxPlayer
+
+; Enter graphics mode and start double buffering
+Graphics 640,480,16
+SetBuffer BackBuffer()
+
+; Load the image-assign the handle to gfxPlayer
+gfxPlayer=LoadImage("player.bmp")
+
+; draw the image at random until ESC pressed
+While Not KeyHit(1)
+Cls
+DrawImage gfxPlayer,Rnd(640),Rnd(480)
+Flip
+Wend
+
+; Erase the image from memory!
+FreeImage gfxPlayer
+

Index

+ diff --git a/_release/help/commands/2d_commands/FreeSound.htm b/_release/help/commands/2d_commands/FreeSound.htm new file mode 100644 index 0000000..ca907d8 --- /dev/null +++ b/_release/help/commands/2d_commands/FreeSound.htm @@ -0,0 +1,9 @@ +Command: FreeSound   FreeSound sound_variable  

Definition:

Delete the sound and free up the memory it was using.

Parameter Description:


sound_variable - and valid variable previously created with the LoadSound command.

Command Description:

When you are finished using a sound effect, you should free up the memory its using and delete the sound. This command will delete a sound instance variable created with the LoadSound command.
+
+Why would you want to do this? Perhaps you have different sets of sounds for different levels of your game? Perhaps your music loop changes from level to level. You want to do the RIGHT thing and manage your own resources. Just because you CAN load every sample for the whole game at once, consider someone that doesn't have as much memory as you do. You want to ensure that your game appeals to the widest audience possible. Note: You don't have to manually free these resources when your program terminates - Blitz does this automatically.

Example:

; Load a sound into memory
+sndOneUp=LoadSound("audio\1up.wav")
+
+; Free the memory up and delete the sound
+FreeSound sndOneUp
+

Index

+ diff --git a/_release/help/commands/2d_commands/FreeTimer.htm b/_release/help/commands/2d_commands/FreeTimer.htm new file mode 100644 index 0000000..6254e55 --- /dev/null +++ b/_release/help/commands/2d_commands/FreeTimer.htm @@ -0,0 +1,15 @@ +Command: FreeTimer   FreeTimer (timer_variable)  

Definition:

Destroys the timer specified and frees up its memory.

Parameter Description:


timer = any valid timer variable created with the CreateTimer command.

Command Description:

This command will destroy a timer variable created with the with the CreateTimer command and free the memory it was using. It is a good practice to destroy elements in your game you are no longer using.

Example:

; Create the timer to track speed
+frameTimer=CreateTimer(60)
+
+; Your main screen draw loop
+While Not KeyHit(1)
+WaitTimer(frameTimer) ; Pause until the timer reaches 60
+Cls
+; Draw your screen stuff
+Flip
+Wend
+
+; Kill the timer
+FreeTimer(frameTimer)
+

Index

+ diff --git a/_release/help/commands/2d_commands/FrontBuffer.htm b/_release/help/commands/2d_commands/FrontBuffer.htm new file mode 100644 index 0000000..791c19b --- /dev/null +++ b/_release/help/commands/2d_commands/FrontBuffer.htm @@ -0,0 +1,23 @@ +Command: FrontBuffer()   FrontBuffer()   

Definition:

Designates the front buffer as the drawing buffer.

Parameter Description:


None

Command Description:

Its important to understand buffers when writing a game.
+
+What the player can see at any given time is usually the front buffer. Anything you draw to this buffer is IMMEDIATELY visible to the player. This sounds fast (and it is) but the problem is that when you are drawing to the front buffer - like a piece of paper and pencil - anything you draw on the screen overwrites anything else that exists in the same space. So, if you want to 'save' any portion of the screen from being overwritten by another drawing operation, YOU - the programmer - have to copy the area 'under' the location of the new operation to an image so you can replace it later. Imagine taking a piece of paper with a picture of some mountains, and making an airplane pass in front of them, inch by inch. Every time the plane moves, you have to draw the new area that will be under the plane next on another sheet of paper (so you know what it looked like) then draw the plane over the new place. Next time you move, you will repeat this, then draw the image back in the OLD plane location. This process is labor-intensive and largely unnecessary thanks to a process called DOUBLE BUFFERING (see BackBuffer(). Double buffering is used for pretty much all games for high-action with lots of objects on the screen.
+
+So, if double buffering rocks so much, why would you WANT to ever draw to the front buffer? Sometimes, you just want to draw crap to the screen, without caring what you overwrite. You don't have to worry about redrawing the screen over and over again in double buffering in this case. Just set the buffer to FrontBuffer() and you can write directly to the screen in real time.

Example:

; FrontBuffer()/Rect Example
+
+; Engage graphics mode
+Graphics 640,480,16
+
+; Set the drawing buffer to front - instant drawing ops!
+SetBuffer FrontBuffer()
+
+; Repeat this until user presses ESC
+While Not KeyHit(1)
+; Set a random color
+Color Rnd(255),Rnd(255),Rnd(255)
+; Draw a rectangle at a random location, with a random width and height
+; plus randomly choose if the rectangle is solid or just an outline
+Rect Rnd(640),Rnd(480),Rnd(50),Rnd(50),Rnd(0,1)
+; Blitz is so dang fast, we need a delay so you can watch it draw!
+Delay 10
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/Function.htm b/_release/help/commands/2d_commands/Function.htm new file mode 100644 index 0000000..cb32080 --- /dev/null +++ b/_release/help/commands/2d_commands/Function.htm @@ -0,0 +1,47 @@ +Command: Function   Function name  

Definition:

Begins a standalone snippet of code that is callable from your program.

Parameter Description:


name = any valid name text that is not a keyword of Blitz.

Command Description:

A function is a routine of commands you may choose to call frequently within your program. Functions are considered 'proper' practice in this situation, instead of using GOSUB commands.
+
+Functions are independant of your 'main code' and will only execute if they are called. They have their own namespace, and variables created outside a function are NOT available within the function (this goes for TYPE structures as well) unless you declare the variable or Type structure as GLOBAL.
+
+You can pass variables into functions, as well as RETURN boolean values (True/False) back to the calling code.
+
+The practical use of functions is to help seperate your code into managable chunks for subsequent perfection of a routine. You may put all your screen updates into a single function, for example. Or perhaps your scoring system where you pass it what alien has been destroyed and it updates the player's score.
+
+Once the function reaches the END FUNCTION command, it returns program execution to the next line following the function call.
+
+Functions can be a bit daunting until you realize they really are their own little programs within your program. See the example for more.

Example:

; Function Example
+
+; Get the user's name
+name$=Input$("Enter Your Name:")
+
+; Call a function to print how many letters the name has
+numletters(name$);
+
+; Let's get something BACK from the function
+thefirst$=firstletter(name$)
+
+; Now print results
+Print "Was the first letter an 'S'? (1=True/0=False)" + thefirst$
+
+;The program basically ends here, because functions don't run unless called.
+
+; The actual function
+Function numletters(passedname$)
+Print "Your name has " + Len(passedname$) + " letters in it."
+End Function
+
+; Function to see if the first letter is S
+Function firstletter(passedname$)
+
+; If the first letter is an 'S' then return from the function a true value
+If Left$(passedname$,1) = "S" Then
+Return True
+
+; Otherwise, return false
+Else
+
+Return False
+
+End If
+End Function
+

Index

+ diff --git a/_release/help/commands/2d_commands/GFXModeDepth.htm b/_release/help/commands/2d_commands/GFXModeDepth.htm new file mode 100644 index 0000000..57ceb1c --- /dev/null +++ b/_release/help/commands/2d_commands/GFXModeDepth.htm @@ -0,0 +1,16 @@ +Command: GFXModeDepth   GFXModeDepth (mode)  

Definition:

Returns the color depth capability of the selected video mode.

Parameter Description:


None.

Command Description:

Once you determine the video modes available by the video card using CountGFXModes(), you can iterate through them and determine the width, height, and color depth capabilities of each mode. + +Use this command to get the color depth of the mode. Use the GFXModeWidth and GFXModeHeight to get the remaining parameters.

Example:

; CountGFXModes()/GfxModeWidth/GfxModeHeight/GfxModeDepth example
+
+intModes=CountGfxModes()
+
+Print "There are " + intModes + "graphic modes available:"
+
+; Display all modes including width, height, and color depth
+For t = 1 To intModes
+Print "Mode " + t + ":
+Print "Width=" + GfxModeWidth(t)
+Print "Height=" + GfxModeHeight(t)
+Print "Height=" + GfxModeDepth(t)
+Next

Index

+ diff --git a/_release/help/commands/2d_commands/GFXModeHeight.htm b/_release/help/commands/2d_commands/GFXModeHeight.htm new file mode 100644 index 0000000..81e5d02 --- /dev/null +++ b/_release/help/commands/2d_commands/GFXModeHeight.htm @@ -0,0 +1,16 @@ +Command: GFXModeHeight   GFXModeHeight (mode)  

Definition:

Returns the height capability of the selected video mode.

Parameter Description:


None.

Command Description:

Once you determine the video modes available by the video card using CountGFXModes(), you can iterate through them and determine the width, height, and color depth capabilities of each mode. + +Use this command to get the height of the mode. Use the GFXModeWidth and GFXModeDepth to get the remaining parameters.

Example:

; CountGFXModes()/GfxModeWidth/GfxModeHeight/GfxModeDepth example
+
+intModes=CountGfxModes()
+
+Print "There are " + intModes + "graphic modes available:"
+
+; Display all modes including width, height, and color depth
+For t = 1 To intModes
+Print "Mode " + t + ":
+Print "Width=" + GfxModeWidth(t)
+Print "Height=" + GfxModeHeight(t)
+Print "Height=" + GfxModeDepth(t)
+Next

Index

+ diff --git a/_release/help/commands/2d_commands/GFXModeWidth.htm b/_release/help/commands/2d_commands/GFXModeWidth.htm new file mode 100644 index 0000000..1a3f730 --- /dev/null +++ b/_release/help/commands/2d_commands/GFXModeWidth.htm @@ -0,0 +1,16 @@ +Command: GFXModeWidth   GFXModeWidth (mode)  

Definition:

Returns the width capability of the selected video mode.

Parameter Description:


None.

Command Description:

Once you determine the video modes available by the video card using CountGFXModes(), you can iterate through them and determine the width, height, and color depth capabilities of each mode. + +Use this command to get the width of the mode. Use the GFXModeHeight and GFXModeDepth to get the remaining parameters.

Example:

; CountGFXModes()/GfxModeWidth/GfxModeHeight/GfxModeDepth example
+
+intModes=CountGfxModes()
+
+Print "There are " + intModes + "graphic modes available:"
+
+; Display all modes including width, height, and color depth
+For t = 1 To intModes
+Print "Mode " + t + ":
+Print "Width=" + GfxModeWidth(t)
+Print "Height=" + GfxModeHeight(t)
+Print "Height=" + GfxModeDepth(t)
+Next

Index

+ diff --git a/_release/help/commands/2d_commands/GetColor.htm b/_release/help/commands/2d_commands/GetColor.htm new file mode 100644 index 0000000..70f7b46 --- /dev/null +++ b/_release/help/commands/2d_commands/GetColor.htm @@ -0,0 +1,19 @@ +Command: GetColor   GetColor x, y  

Definition:

Sets the current drawing color to the color of the pixel designated.

Parameter Description:


x = x coordinate of pixel
+y = y coordinate of pixel +

Command Description:

This command works like a 'color picker' in your favorite paint program. By specifying

Example:

; GetColor Example
+
+Graphics 320,200
+SetBuffer BackBuffer()
+
+For t = 1 To 1000
+Color Rnd(255), Rnd(255), Rnd(255)
+Rect Rnd(320),Rnd(200),10,10,1
+Next
+
+GetColor 100,100
+Print "Box at 100,100 is RGB:" + ColorRed() + "," + ColorGreen() + "," + ColorBlue() + "!"
+Flip
+While Not KeyHit(1)
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/GetJoy.htm b/_release/help/commands/2d_commands/GetJoy.htm new file mode 100644 index 0000000..e7dcb4a --- /dev/null +++ b/_release/help/commands/2d_commands/GetJoy.htm @@ -0,0 +1,10 @@ +Command: GetJoy   GetJoy ([port])  

Definition:

Checks to see if a joystick button has been pressed - returns the number of the button or 0 if no button is pressed.

Parameter Description:


port = optional joystick port to read

Command Description:

Unlike the other similar commands (JoyDown and JoyHit), this command doesn't need to know which button you are trying to test for. It looks for any joystick button, then returns the number the user pressed. Since you are polling all the buttons instead of just a specific one, this may be a tad less efficient than using JoyDown or JoyHit. Use this command in conjunction with Select/Case for maximum efficiency!

Example:

; GetJoy Example
+
+While Not KeyHit(1)
+button=GetJoy()
+If button <> 0 Then
+Print "You pressed joystick button #" + button
+End If
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/GetKey.htm b/_release/help/commands/2d_commands/GetKey.htm new file mode 100644 index 0000000..6e47c6b --- /dev/null +++ b/_release/help/commands/2d_commands/GetKey.htm @@ -0,0 +1,12 @@ +Command: GetKey()   GetKey()   

Definition:

Checks for a keypress and returns its ASCII value.

Parameter Description:


None

Command Description:

This command will check to see if a key has been pressed and will return its ASCII value. Not all keys have ASCII values - if you need to trap SHIFT, ALT, or other non-ASCII compliant key, try KeyHit or KeyDown. + +

Example:

; GetKey Example
+
+Print "Please press any ASCII key ..."
+
+While Not value
+value=GetKey()
+Wend
+
+Print "You pressed key with an ASCII value of:" + value

Index

+ diff --git a/_release/help/commands/2d_commands/GetMouse.htm b/_release/help/commands/2d_commands/GetMouse.htm new file mode 100644 index 0000000..f7f542c --- /dev/null +++ b/_release/help/commands/2d_commands/GetMouse.htm @@ -0,0 +1,10 @@ +Command: GetMouse()   GetMouse()   

Definition:

Checks to see if a mouse button has been clicked - returns the number of the button or 0 if no button is clicked.

Parameter Description:


None.

Command Description:

Unlike the other similar commands (MouseDown and MouseHit), this command doesn't need to know which button you are trying to test for. It looks for any mouse button, then returns the number the user clicked. Since you are polling all the mouse buttons instead of just a specific one, this may be a tad less efficient than using MouseDown or MouseHit. Use this command in conjunction with Select/Case for maximum efficiency!

Example:

; GetMouse Example
+
+While Not KeyHit(1)
+button=GetMouse()
+If button <> 0 Then
+Print "You pressed mouse button #" + button
+End If
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/GfxDriverName.htm b/_release/help/commands/2d_commands/GfxDriverName.htm new file mode 100644 index 0000000..178965e --- /dev/null +++ b/_release/help/commands/2d_commands/GfxDriverName.htm @@ -0,0 +1,22 @@ +Command: GfxDriverName$   GfxDriverName$ (index)  

Definition:

Returns the title of a graphic driver.

Parameter Description:


index = index number obtained with CountGfxDrivers command

Command Description:

Some computers may have more than one video card and/or video driver installed (a good example is a computer system with a primary video card and a Voodoo2 or other pass-through card).
+
+Once you know how many drivers there are using CountGfxDrivers(), you can iterate through them with this command and display them for the user to choose from. Once the user has chosen (or you decide), you can set the graphics driver with SetGfxDriver.
+
+Normally, this won't be necessary with 2D programming.

Example:

; GfxDriver Examples
+
+; Count how many drivers there are
+totalDrivers=CountGfxDrivers()
+Print "Choose a driver to use:"
+
+; Go through them all and print their names (most people will have only 1)
+For t = 1 To totalDrivers
+Print t+") " + GfxDriverName$(t)
+Next
+
+; Let the user choose one
+driver=Input("Enter Selection:")
+
+; Set the driver!
+SetGfxDriver driver
+Print "Your driver has been selected!"

Index

+ diff --git a/_release/help/commands/2d_commands/GfxModeExists.htm b/_release/help/commands/2d_commands/GfxModeExists.htm new file mode 100644 index 0000000..022e431 --- /dev/null +++ b/_release/help/commands/2d_commands/GfxModeExists.htm @@ -0,0 +1,17 @@ +Command: GfxModeExists   GfxModeExists (width,height,depth)  

Definition:

Checks to see if the designated graphic mode exists.

Parameter Description:


width = width, in pixels (i.e. 640)
+height = height, in pixels (i.e. 480)
+depth = color depth (i.e. 16, 24, 32)

Command Description:

Use this command to verify whether or not the user's video card can use this graphic mode. Returns TRUE if the mode exists, FALSE if not. If you want to know what mode number this mode is, use FindGFXMode.

Example:

; GFXModeExists example
+
+; If there is a mode, tell user
+mode=GfxModeExists(800,800,16)
+
+If mode=1 Then
+Print "The mode you requested exists!"
+Else
+Print "Sorry, that mode doesn't exist."
+End If
+
+; Wait for ESC press from user
+While Not KeyHit(1)
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/Global.htm b/_release/help/commands/2d_commands/Global.htm new file mode 100644 index 0000000..7ef4ed9 --- /dev/null +++ b/_release/help/commands/2d_commands/Global.htm @@ -0,0 +1,2 @@ +Command: Global   Global variable  

Definition:

Declares global variables for use with your program.

Parameter Description:


variable = any valid variable/TYPE name

Command Description:

There are two types of variables in Blitz Basic; local variables and global variables. Global variables can be utilized anywhere in your program (i.e. the main program look and all functions. Use global variables when you need to track a value across your entire program (player score, lives, etc. You can also define TYPEs as global as well.

Example:

Global player1score ; Declare player 1's score as global
Global graph.Cursor ; Declare the Cursor TYPE as global

Index

+ diff --git a/_release/help/commands/2d_commands/Gosub.htm b/_release/help/commands/2d_commands/Gosub.htm new file mode 100644 index 0000000..6857445 --- /dev/null +++ b/_release/help/commands/2d_commands/Gosub.htm @@ -0,0 +1,16 @@ +Command: Gosub   Gosub label  

Definition:

Branches execution of a program to a designated label with the intention of returning to the original calling code.

Parameter Description:


label = any valid exisiting label

Command Description:

This branches the flow of the program to a designated label, with the understanding that there will be a Return later on in the called code to resume execution of the program where the Gosub was called. With the use of Functions inside of Blitz, it isn't very practical to use Gosubs, but you may still find it useful. If you do not require the need to return execution back to the Gosub statement, you may use Goto instead. See the example.

Example:

Print "The program starts ..."
+Gosub label1
+Print "The Program ends ..."
+
+; wait for ESC key before ending
+While Not KeyHit(1)
+Wend
+
+End
+
+.label1
+Print "We could do all sorts of things in this part of the program..."
+Print "But, we'll just go back to the original code, instead ..."
+Return
+

Index

+ diff --git a/_release/help/commands/2d_commands/Goto.htm b/_release/help/commands/2d_commands/Goto.htm new file mode 100644 index 0000000..7236f4e --- /dev/null +++ b/_release/help/commands/2d_commands/Goto.htm @@ -0,0 +1,13 @@ +Command: Goto   Goto label  

Definition:

Branches execution of a program to a designated label.

Parameter Description:


label = any valid exisiting label

Command Description:

This branches the flow of the program to a designated label. With the use of Functions inside of Blitz, it isn't very practical to use Gotos, but you may still find it useful. If you require the need to return execution back to the calling statement, you may use Gosub instead. See the example.

Example:

Print "The program starts ..."
+Goto label1
+Print "This line never gets printed .."
+End
+
+.label1
+Print "We just jumped here!"
+
+; wait for ESC key before ending
+While Not KeyHit(1)
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/GrabImage.htm b/_release/help/commands/2d_commands/GrabImage.htm new file mode 100644 index 0000000..6f4bb50 --- /dev/null +++ b/_release/help/commands/2d_commands/GrabImage.htm @@ -0,0 +1,47 @@ +Command: GrabImage   GrabImage image,x,y,[frame]  

Definition:

Grabs a portion of the current drawing buffer and sticks it into an image.

Parameter Description:


image = variable of image handle
+x = starting x location to grab
+y = starting y location to grab
+frame = optional frame to insert the grabbed image into

Command Description:

Quite possibly one of the most useful yet underdocumented, confusing commands in the Blitz Basic language is GrabImage.
+
+This command allows you to grab a portion of the current drawing buffer (this could be an image too if you've set it as an ImageBuffer) and stick it into an image.
+
+There are a million and one uses for this command, so I'll let you use your imagination. However, the command doesn't make much sense as it is documented, so let me clarify.
+
+First, you must use CreateImage to create a new blank image in which to grab to. Whatever size you create the image, THAT is how much of the buffer will be grabbed from the x,y location you specify in GrabImage.
+
+For example, you create a new image with a size of 50 pixels by 50 pixels. When you call GrabImage, you choose x=100, y=100. The area you will grab and put into your new image will be 100,100 to 150,150. If you attempt to GrabImage into an image variable that hasn't been created yet, you will get an error.
+
+Note: You can REPLACE an existing image with a grabbed one.
+
+See the example for a more practical look.

Example:

; GrabImage example
+
+; Turn on graphics
+Graphics 640,480,16
+
+; We'll be drawing right to the front buffer
+SetBuffer FrontBuffer()
+
+; You must create an empty image to grab from first
+gfxGrab=CreateImage(100,100)
+
+; Draw random rectangles on the screen until the
+; user presses ESC
+While Not KeyHit(1)
+; random color
+Color Rnd(255),Rnd(255),Rnd(255)
+; super random rectangles
+Rect Rnd(640),Rnd(480),Rnd(100),Rnd(100),Rnd(1)
+Delay 50
+Wend
+
+; Now, grab an image, starting at 100,100 and put it in gfxGrab
+GrabImage gfxGrab,100,100
+
+; Clear screen and show user the grabbed image
+Cls
+Text 0,0, "Here is your grabbed image! Press a mouse key ..."
+DrawImage gfxgrab,50,50
+
+; Wait for a mouse press
+WaitMouse()

Index

+ diff --git a/_release/help/commands/2d_commands/Graphics.htm b/_release/help/commands/2d_commands/Graphics.htm new file mode 100644 index 0000000..7861a8c --- /dev/null +++ b/_release/help/commands/2d_commands/Graphics.htm @@ -0,0 +1,31 @@ +Command: Graphics   Graphics width, height, color depth,[mode]  

Definition:

Sets the graphics mode for the screen.

Parameter Description:


width = width of screen in pixels (640, 800, etc)
+height = height of screen in pixels (480, 600, etc)
+color depth = depth in bits (16, 24, or 32 bit - use 16 if possible!)
+mode = Video mode (see description); Optional

Command Description:

This command sets Blitz into 'graphics' mode with the specified width, height, and color depth (in bits). This command must be executed before any graphic related commands can be used. Color depth is OPTIONAL and should be left blank if possible - Blitz will determine the best color mode automatically for the user's video card.
+
+Valid graphic width and height varies GREATLY from card to card so to be sure your users can display the mode you wish, use the GfxModeExists command to be sure before you try and set the mode yourself. Common resolutions that are probably safe are 640x480 and 800x600. Try to avoid odd screen modes like 640x400 as MANY MANY cards cannot display them. Chances are if you can set your Windows screen resolution to a particular resolution, then Blitz will behave in that resolution also.
+
+Remember, each step higher in resolution and color depth mark a large jump in system requirements and may be inversely proportionate to system performance. If you use the lowest resolution and depth possible to meet your desired game parameters, it will allow more people with lesser systems than your own still play and enjoy your game. This is why many games still support a 640x480 mode :)
+
+An extra parameter is used at the end of the command after the color depth. Here are the parameters:
+
+0 : auto - windowed in debug, fullscreen in non-debug (this is the default)
+1 : fullscreen mode
+2 : windowed mode
+3 : scaled window mode
+ +

Example:

;GRAPHICS Example
+
+; Set The Graphic Mode
+Graphics 800,600
+
+; Now print something on the graphic screen
+Text 0,0, "This is some text printed on the graphic screen (and a white box)! Press ESC ..."
+
+; Now for a box
+Rect 100,100,200,200,1
+
+While Not KeyHit(1)
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/GraphicsBuffer.htm b/_release/help/commands/2d_commands/GraphicsBuffer.htm new file mode 100644 index 0000000..935d5b0 --- /dev/null +++ b/_release/help/commands/2d_commands/GraphicsBuffer.htm @@ -0,0 +1,16 @@ +Command: GraphicsBuffer()   GraphicsBuffer()   

Definition:

Returns the handle of the current graphics buffer.

Parameter Description:


None

Command Description:

Use this command to get which buffer Blitz is currently writing to.

Example:

; GraphicsWidth(), GraphicsHeight(), GraphicsDepth(), GraphicsBuffer() example
+
+; Set a graphics mode and buffer
+Graphics 640,480,16
+SetBuffer FrontBuffer()
+
+; Print the details
+Print "Screen width is: " + GraphicsWidth()
+Print "Screen height is: " + GraphicsHeight()
+Print "Screen color depth is: " + GraphicsDepth()
+Print "Current buffer handle is: " + GraphicsBuffer()
+
+; Wait for ESC before exiting
+While Not KeyHit(1)
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/GraphicsDepth.htm b/_release/help/commands/2d_commands/GraphicsDepth.htm new file mode 100644 index 0000000..3afbaf2 --- /dev/null +++ b/_release/help/commands/2d_commands/GraphicsDepth.htm @@ -0,0 +1,16 @@ +Command: GraphicsDepth()   GraphicsDepth()   

Definition:

Returns the color depth of the current graphics mode.

Parameter Description:


None

Command Description:

This command will tell you the color depth of the current graphics mode.

Example:

; GraphicsWidth(), GraphicsHeight(), GraphicsDepth(), GraphicsBuffer() example
+
+; Set a graphics mode and buffer
+Graphics 640,480,16
+SetBuffer FrontBuffer()
+
+; Print the details
+Print "Screen width is: " + GraphicsWidth()
+Print "Screen height is: " + GraphicsHeight()
+Print "Screen color depth is: " + GraphicsDepth()
+Print "Current buffer handle is: " + GraphicsBuffer()
+
+; Wait for ESC before exiting
+While Not KeyHit(1)
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/GraphicsHeight.htm b/_release/help/commands/2d_commands/GraphicsHeight.htm new file mode 100644 index 0000000..1c0d1f3 --- /dev/null +++ b/_release/help/commands/2d_commands/GraphicsHeight.htm @@ -0,0 +1,16 @@ +Command: GraphicsHeight()   GraphicsHeight()   

Definition:

Returns the height, in pixels, of the current graphics mode.

Parameter Description:


None

Command Description:

This command will tell you the height, in pixels, of the current graphics mode.

Example:

; GraphicsWidth(), GraphicsHeight(), GraphicsDepth(), GraphicsBuffer() example
+
+; Set a graphics mode and buffer
+Graphics 640,480,16
+SetBuffer FrontBuffer()
+
+; Print the details
+Print "Screen width is: " + GraphicsWidth()
+Print "Screen height is: " + GraphicsHeight()
+Print "Screen color depth is: " + GraphicsDepth()
+Print "Current buffer handle is: " + GraphicsBuffer()
+
+; Wait for ESC before exiting
+While Not KeyHit(1)
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/GraphicsWidth.htm b/_release/help/commands/2d_commands/GraphicsWidth.htm new file mode 100644 index 0000000..e28d318 --- /dev/null +++ b/_release/help/commands/2d_commands/GraphicsWidth.htm @@ -0,0 +1,16 @@ +Command: GraphicsWidth()   GraphicsWidth()   

Definition:

Returns the width, in pixels, of the current graphics mode.

Parameter Description:


None

Command Description:

This command will tell you the width, in pixels, of the current graphics mode.

Example:

; GraphicsWidth(), GraphicsHeight(), GraphicsDepth(), GraphicsBuffer() example
+
+; Set a graphics mode and buffer
+Graphics 640,480,16
+SetBuffer FrontBuffer()
+
+; Print the details
+Print "Screen width is: " + GraphicsWidth()
+Print "Screen height is: " + GraphicsHeight()
+Print "Screen color depth is: " + GraphicsDepth()
+Print "Current buffer handle is: " + GraphicsBuffer()
+
+; Wait for ESC before exiting
+While Not KeyHit(1)
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/HandleImage.htm b/_release/help/commands/2d_commands/HandleImage.htm new file mode 100644 index 0000000..2f784c5 --- /dev/null +++ b/_release/help/commands/2d_commands/HandleImage.htm @@ -0,0 +1,19 @@ +Command: HandleImage   HandleImage image,x,y  

Definition:

Set a new handle location on an existing image.

Parameter Description:


image = variable holding the file handle to the image
+x = x location of the new image handle location
+y = y location of the new image handle location

Command Description:

When an image is loaded with LoadImage, the image handle (the location within the image where the image is 'drawn from') is always defaulted to the top left corner (coordinates 0,0). This means if you draw an image that is 50x50 pixels at screen location 200,200, the image will begin to be drawn at 200,200 and extend to 250,250.
+
+This command moves the image handle from the 0,0 coordinate of the image to the specified x and y location in the image. + +You can retrieve an image's current location handle using the ImageXHandle and ImageYHandle. Finally, you can make all images automatically load with the image handle set to middle using the AutoMidHandle command.
+
+Note about the term 'handle'. There are two types of 'handles' we discuss in these documents. One is the location within an image - as discussed in this command. The other is a 'file handle', a variable used to hold an image, sound, or font loaded with a command. See LoadImage for more information about file handles.
+
+Also See: MidHandle

Example:

;HandleImage Example
+
+Graphics 800,600,16
+
+gfxPlayer=LoadImage("player.bmp")
+HandleImage gfxPlayer,20,20
+DrawImage gfxPlayer,0,0
+WaitKey

Index

+ diff --git a/_release/help/commands/2d_commands/Hex.htm b/_release/help/commands/2d_commands/Hex.htm new file mode 100644 index 0000000..51a889f --- /dev/null +++ b/_release/help/commands/2d_commands/Hex.htm @@ -0,0 +1,3 @@ +Command: Hex$   Hex$ (integer)  

Definition:

Converts an integer value to a hexidecimal value.

Parameter Description:


integer = any valid integer or integer variable

Command Description:

Converts integer values into hexidecimal values. If you don't know what hex is, you don't need to know this command :)

Example:

intValue="64738"
+Print "The hexidecimal value of "+intValue+" is: " + hex$(intValue)

Index

+ diff --git a/_release/help/commands/2d_commands/HidePointer.htm b/_release/help/commands/2d_commands/HidePointer.htm new file mode 100644 index 0000000..847d417 --- /dev/null +++ b/_release/help/commands/2d_commands/HidePointer.htm @@ -0,0 +1,47 @@ + + +Command: HidePointer + + + + + + +

  HidePointer  

+ +

+Parameters:
+

+ + + + +
n/a
+

Description:
+
+ + + + +
HidePointer is for use in windowed display modes, and simply hides the Windows pointer when it is moved over your game's window. You can bring it back via ShowPointer. It has no effect in full-screen modes.
+

Example (using ShowPointer):
+
+ + + + + +
+Graphics 640, 480, 0, 2
+
+HidePointer
+
+Print "Move pointer over window and press a key..."
+WaitKey
+
+ShowPointer
+
+Delay 1000
+
+ + diff --git a/_release/help/commands/2d_commands/HostNetGame.htm b/_release/help/commands/2d_commands/HostNetGame.htm new file mode 100644 index 0000000..4f068e8 --- /dev/null +++ b/_release/help/commands/2d_commands/HostNetGame.htm @@ -0,0 +1,12 @@ +Command: HostNetGame   HostNetGame (gamename$)  

Definition:

Starts a hosted network game.

Parameter Description:


gamename$ = string value designating the game's name

Command Description:

This allows you to bypass the 'standard' networked game dialog box (normally using StartNetGame) and start a hosted game directly. A value of 2 is returned if the hosted game has started successfully.

Example:

; HostNetGame example
+
+joinResults=HostNetGame("ShaneGame")
+
+Select joinResults
+ Case 2
+ Print "Successfully started host game!"
+ Default
+ Print "Game was unable to start!"
+End Select
+waitkey()

Index

+ diff --git a/_release/help/commands/2d_commands/If.htm b/_release/help/commands/2d_commands/If.htm new file mode 100644 index 0000000..c585efe --- /dev/null +++ b/_release/help/commands/2d_commands/If.htm @@ -0,0 +1,18 @@ +Command: If   If   

Definition:

Checks a condition and executes code if the condition is met.

Parameter Description:


None.

Command Description:

Use this to check the value of a variable or to see if a condition is true or false. The code between IF and END IF (or ENDIF) is executed if the condition is true. Using NOT, you can also act if the condition is NOT true - or use ELSE to perform a different set of commands than if the condition is met. Lastly, you can use 'nested' or multiple IFs through the use of ELSE IF (or ELSEIF) to do LOTS of condition checking. If you get too deep in condition checking, consider using SELECT structures instead.

Example:

; IF THEN Example
+
+; Input the user's name
+name$=Input$("What is your name? ")
+
+; Doesn't the person's name equal SHANE?
+If name$ = "Shane" Then
+
+Print "You are recognized, Shane! Welcome!"
+
+Else
+
+Print "Sorry, you don't belong here!"
+
+; End of the condition checking
+End If
+

Index

+ diff --git a/_release/help/commands/2d_commands/ImageBuffer.htm b/_release/help/commands/2d_commands/ImageBuffer.htm new file mode 100644 index 0000000..3400888 --- /dev/null +++ b/_release/help/commands/2d_commands/ImageBuffer.htm @@ -0,0 +1,42 @@ +Command: ImageBuffer   ImageBuffer (handle[,frame])  

Definition:

Used to denote an image and frame to direct drawing operations to.

Parameter Description:


handle=variable holding the image's handle
+frame=optional frame to draw to if using an imagestrip image

Command Description:

There are 1000 reasons for this command. Simply put, you may want to 'draw' on an existing image you've loaded (LoadImage or LoadAnimImage) or created (CreateImage). You could, for example, have a blank wall graphic and you want to add 'graffiti' to it based on the user action (Jet Grind Radio baybeee! Sorry...). Instead of trying to draw a dozen images all over the wall, just use the SetBuffer command to denote the wall graphic as the 'target' buffer, and draw away! Next time you display that graphic (DrawImage), you will see your changes! This is a powerful command!

Example:

; CreateImage/TileImage/ImageBuffer example
+
+; Again, we'll use globals even tho we don't need them here
+; One variable for the graphic we'll create, one for a timer
+Global gfxStarfield, tmrScreen
+
+; Declare graphic mode
+Graphics 640,480,16
+
+; Create a blank image that is 320 pixels wide and 32 high with 10 frames of 32x32
+gfxStarfield=CreateImage(32,32,10)
+
+; loop through each frame of the graphic we just made
+For t = 0 To 9
+; Set the drawing buffer to the graphic frame so we can write on it
+SetBuffer ImageBuffer(gfxStarfield,t)
+; put 50 stars in the frame at random locations
+For y = 1 To 50
+ Plot Rnd(32),Rnd(32)
+Next
+Next
+
+; Double buffer mode for smooth screen drawing
+SetBuffer BackBuffer()
+
+; Loop until ESC is pressed
+While Not KeyHit(1)
+
+; Only update the screen every 300 milliseconds. Change 300 for faster or
+; slower screen updates
+If MilliSecs() > tmrScreen+300 Then
+Cls ; clear the screen
+
+; Tile the screen with a random frame from our new graphic starting at
+; x=0 and y=0 location.
+TileImage gfxStarfield,0,0,Rnd(9)
+Flip ; Flip the screen into view
+tmrScreen=MilliSecs() ; reset the time
+End If
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/ImageHeight.htm b/_release/help/commands/2d_commands/ImageHeight.htm new file mode 100644 index 0000000..289f4f0 --- /dev/null +++ b/_release/help/commands/2d_commands/ImageHeight.htm @@ -0,0 +1,20 @@ +Command: ImageHeight   ImageHeight (image handle)  

Definition:

Return the height of the designated image, in pixels.

Parameter Description:


image handle = variable assigned when the image was loaded

Command Description:

Use this command and ImageWidth to return the size of the given image (using the handle assigned when the image was loaded with LoadImage) in pixels.

Example:

; ImageHeight/ImageWidth Example
+
+; Global, as always, for graphics
+Global gfxPlayer
+
+; Enter graphics mode and start double buffering
+Graphics 640,480,16
+SetBuffer BackBuffer()
+
+; Load the image-assign the handle to gfxPlayer
+gfxPlayer=LoadImage("player.bmp")
+
+; Print the image dimensions
+Print "The image height is: " + ImageHeight(gfxPlayer)
+Print "The image width is: " + ImageWidth(gfxPlayer)
+
+; Wait until ESC is pressed so you can see the output
+While Not KeyHit(1)
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/ImageRectCollide.htm b/_release/help/commands/2d_commands/ImageRectCollide.htm new file mode 100644 index 0000000..f1d6998 --- /dev/null +++ b/_release/help/commands/2d_commands/ImageRectCollide.htm @@ -0,0 +1,64 @@ +Command: ImageRectCollide   ImageRectCollide (image,x,y,frame,rect x,rect y,rect width,rect height)  

Definition:

Checks to see if an image and designated rectangle area have collided.

Parameter Description:


image = Image to test collision against
+x = image's x location
+y = image's y location
+frame = image's frame
+rect x = x location start of the rect to test
+rect y = y location start of the rect
+rect width = width of the rect
+rect height = height of the rect

Command Description:

There are many times when you need to see if an image has collided with (or is touching) a specific rectangular area of the screen. This command performs pixel perfect accurate collision detection between the image of your choice and a specified rectangle on the screen.
+
+The usefulness of this comes into play when you think of a game like Monkey Island - when you might have a backdrop on the screen showing a room that has items in it the player can interact with using a mouse pointer graphic. In some cases, the items on the screen you wish to interact with will be seperate (often animated or moving) images of their own. For this situation, you would be better off using ImagesCollide or ImagesOverlap to detect the collision between pointer graphic and the image.
+
+Howevever, should your program just need to detect a graphic (like a mouse pointer) over at a particular location/region of the screen (often called a 'hot spot'), this command works great!
+
+As with any collision in Blitz, you will need to know the PRECISE location of the graphic you wish to test collision with, as well as the x, y, width, and height of the screen area (rect) you wish to test.
+
+The example blatently uses graphics that are much smaller than their container to show you how accurate this command really is. The ImageRectOverlap example is identical to this one - and shows how inaccurate the overlapping method can be with graphics of this nature.

Example:

; ImageRectCollide Example
+
+; Turn on graphics mode
+Graphics 640,480,16
+
+; Create new empty graphic to store our circle in
+gfxCircle=CreateImage(50,50)
+
+; Draw the circle image
+; Set drawing operations to point to our new empty graphic
+SetBuffer ImageBuffer(gfxCircle)
+Color 255,0,0
+; Note the extra space between the circle and the edge of the graphic
+Oval 10,10,30,30,1
+
+; Let's not forget to put the drawing buffer back!
+SetBuffer BackBuffer()
+Color 0,0,255
+
+; Locate our box to a random, visible screen location
+hotX=Rnd(50,610)
+hotY=Rnd(50,430)
+hotW=Rnd(20,100)
+hotH=Rnd(20,100)
+
+; Repeat the loop until we've had a collision
+Repeat
+; Attach our mouse to the circle to move it
+circleX=MouseX()
+circleY=MouseY()
+; Standard double buffer technique; clear screen first
+Cls
+; Draw our rectangle
+Rect hotX,hotY,hotW,hotH,0
+DrawImage gfxCircle,circleX,circleY
+; Standard double buffer technique; flip after all drawing is done
+Flip
+; We test the locations of our rectangle area and circle to see if they have pixel collided
+Until ImageRectCollide (gfxCircle,circleX,circleY,0,hotX,hotY,hotW,hotH)
+
+; Loop is over, we must've collided!
+Text 0,0, "WE'VE HAD A COLLISION! PRESS A MOUSE BUTTON"
+; Can't see the text until we flip ..
+Flip
+; Wait for a mouse click
+WaitMouse()
+; End our graphics mode
+EndGraphics

Index

+ diff --git a/_release/help/commands/2d_commands/ImageRectOverlap.htm b/_release/help/commands/2d_commands/ImageRectOverlap.htm new file mode 100644 index 0000000..a192e3f --- /dev/null +++ b/_release/help/commands/2d_commands/ImageRectOverlap.htm @@ -0,0 +1,63 @@ +Command: ImageRectOverlap   ImageRectOverlap (image,x,y,rect x,rect y,rect width,rect height)  

Definition:

Tests to see if an image and a rectangular screen area (rect) have overlapped.

Parameter Description:


image = Image to test collision against
+x = image's x location
+y = image's y location
+rect x = x location start of the rect to test
+rect y = y location start of the rect
+rect width = width of the rect
+rect height = height of the rect

Command Description:

There are many times when you need to see if an image has collided with (or is touching) a specific rectangular area of the screen. This command performs a collision detection between the image of your choice and a specified rectangle on the screen. Transparent pixels are ignored during the collision process, making this command a bit inaccurate for odd shaped graphics. See ImageRectCollide for pixel perfect collisions between an image and rectangular area of the screen.
+
+The usefulness of this comes into play when you think of a game like Monkey Island - when you might have a backdrop on the screen showing a room that has items in it the player can interact with using a mouse pointer graphic. In some cases, the items on the screen you wish to interact with will be seperate (often animated or moving) images of their own. For this situation, you would be better off using ImagesCollide or ImagesOverlap to detect the collision between pointer graphic and the image.
+
+Howevever, should your program just need to detect a graphic (like a mouse pointer) over at a particular location/region of the screen (often called a 'hot spot'), this command works great!
+
+As with any collision in Blitz, you will need to know the PRECISE location of the graphic you wish to test collision with, as well as the x, y, width, and height of the screen area (rect) you wish to test.
+
+The example blatently uses graphics that are much smaller than their container to show you how inaccurate this command can really be - if not used carefully. The ImageRectCollide example is identical to this one - and shows how accurate the pixel-perfect collision method can be with graphics of this nature.

Example:

; ImageRectOverlap Example
+
+; Turn on graphics mode
+Graphics 640,480,16
+
+; Create new empty graphic to store our circle in
+gfxCircle=CreateImage(50,50)
+
+; Draw the circle image
+; Set drawing operations to point to our new empty graphic
+SetBuffer ImageBuffer(gfxCircle)
+Color 255,0,0
+; Note the extra space between the circle and the edge of the graphic
+Oval 10,10,30,30,1
+
+; Let's not forget to put the drawing buffer back!
+SetBuffer BackBuffer()
+Color 0,0,255
+
+; Locate our box to a random, visible screen location
+hotX=Rnd(50,610)
+hotY=Rnd(50,430)
+hotW=Rnd(20,100)
+hotH=Rnd(20,100)
+
+; Repeat the loop until we've had a collision
+Repeat
+; Attach our mouse to the circle to move it
+circleX=MouseX()
+circleY=MouseY()
+; Standard double buffer technique; clear screen first
+Cls
+; Draw our rectangle
+Rect hotX,hotY,hotW,hotH,0
+DrawImage gfxCircle,circleX,circleY
+; Standard double buffer technique; flip after all drawing is done
+Flip
+; We test the locations of our rectangle area and circle to see if they have overlapped
+Until ImageRectOverlap (gfxCircle,circleX,circleY,hotX,hotY,hotW,hotH)
+
+; Loop is over, we must've collided!
+Text 0,0, "WE'VE HAD A COLLISION! PRESS A MOUSE BUTTON"
+; Can't see the text until we flip ..
+Flip
+; Wait for a mouse click
+WaitMouse()
+; End our graphics mode
+EndGraphics

Index

+ diff --git a/_release/help/commands/2d_commands/ImageWidth.htm b/_release/help/commands/2d_commands/ImageWidth.htm new file mode 100644 index 0000000..b1dedfd --- /dev/null +++ b/_release/help/commands/2d_commands/ImageWidth.htm @@ -0,0 +1,20 @@ +Command: ImageWidth   ImageWidth (image handle)  

Definition:

Return the width of the designated image, in pixels.

Parameter Description:


image handle = variable assigned when the image was loaded

Command Description:

Use this command and ImageHeight to return the size of the given image (using the handle assigned when the image was loaded with LoadImage) in pixels.

Example:

; ImageHeight/ImageWidth Example
+
+; Global, as always, for graphics
+Global gfxPlayer
+
+; Enter graphics mode and start double buffering
+Graphics 640,480,16
+SetBuffer BackBuffer()
+
+; Load the image-assign the handle to gfxPlayer
+gfxPlayer=LoadImage("player.bmp")
+
+; Print the image dimensions
+Print "The image height is: " + ImageHeight(gfxPlayer)
+Print "The image width is: " + ImageWidth(gfxPlayer)
+
+; Wait until ESC is pressed so you can see the output
+While Not KeyHit(1)
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/ImageXHandle.htm b/_release/help/commands/2d_commands/ImageXHandle.htm new file mode 100644 index 0000000..a72b8a8 --- /dev/null +++ b/_release/help/commands/2d_commands/ImageXHandle.htm @@ -0,0 +1,51 @@ +Command: ImageXHandle   ImageXHandle image  

Definition:

Returns the X location of the specified image's image handle.

Parameter Description:


image = variable holding the image's file handle
+

Command Description:

It is occasionally useful to determine the location of an image's image handle. This command returns the X coordinate. Use ImageYHandle to get the Y coordinate. Please see MidHandle for more information on the image's image handle. +
+Note about the term 'handle'. There are two types of 'handles' we discuss in these documents. One is the location within an image - as discussed in this command. The other is a 'file handle', a variable used to hold an image, sound, or font loaded with a command. See LoadImage for more information about file handles.

Example:

; MidHandle/ImageXHandle()/ImageYHandle()/AutoMidHandle
+
+; Initiate Graphics Mode
+Graphics 640,480,16
+
+; Set up the image file handle as a global
+Global gfxBall
+
+; Load the image - you may need to change the location of the file
+gfxBall=LoadImage ("C:\Program Files\Blitz Basic\samples\ball.bmp")
+
+; Until the user presses ESC key ...
+While Not KeyHit(1)
+Text 0,0,"Default Image Handle for gfxBall... Press ESC ..."
+Text 0,14,"X handle-" + ImageXHandle(gfxBall) ; Print the location of the image handle x location
+Text 0,28,"Y handle-" + ImageYHandle(gfxBall) ; Print the location of the image handle y location
+DrawImage gfxBall,200,200,0 ; draw the image at 200,200
+Wend
+
+; Clear the screen
+Cls
+
+; Set the ball's handle to the center of the image
+MidHandle gfxBall
+
+; Until the user presses ESC key ... show the new information
+While Not KeyHit(1)
+Text 0,0,"New Image Handle for gfxBall... Press ESC ..."
+Text 0,14,"X handle-" + ImageXHandle(gfxBall)
+Text 0,28,"Y handle-" + ImageYHandle(gfxBall)
+DrawImage gfxBall,200,200,0
+Wend
+
+; Makes all images load up with their handles in the center of the image
+AutoMidHandle True
+Cls
+
+; Load the image again
+gfxBall=LoadImage ("C:\Program Files\Blitz Basic\samples\ball.bmp")
+
+; Until the user presses ESC key ... show the new information
+While Not KeyHit(1)
+Text 0,0,"Automatic image handle of gfxBall... Press ESC ..."
+Text 0,14,"X handle-" + ImageXHandle(gfxBall)
+Text 0,28,"Y handle-" + ImageYHandle(gfxBall)
+DrawImage gfxBall,200,200,0
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/ImageYHandle.htm b/_release/help/commands/2d_commands/ImageYHandle.htm new file mode 100644 index 0000000..13a8beb --- /dev/null +++ b/_release/help/commands/2d_commands/ImageYHandle.htm @@ -0,0 +1,51 @@ +Command: ImageYHandle   ImageYHandle image  

Definition:

Returns the Y location of the specified image's image handle.

Parameter Description:


image = variable holding the image's file handle
+

Command Description:

It is occasionally useful to determine the location of an image's image handle. This command returns the Y coordinate. Use ImageXHandle to get the X coordinate. Please see MidHandle for more information on the image's image handle. +
+Note about the term 'handle'. There are two types of 'handles' we discuss in these documents. One is the location within an image - as discussed in this command. The other is a 'file handle', a variable used to hold an image, sound, or font loaded with a command. See LoadImage for more information about file handles.

Example:

; MidHandle/ImageXHandle()/ImageYHandle()/AutoMidHandle
+
+; Initiate Graphics Mode
+Graphics 640,480,16
+
+; Set up the image file handle as a global
+Global gfxBall
+
+; Load the image - you may need to change the location of the file
+gfxBall=LoadImage ("C:\Program Files\Blitz Basic\samples\ball.bmp")
+
+; Until the user presses ESC key ...
+While Not KeyHit(1)
+Text 0,0,"Default Image Handle for gfxBall... Press ESC ..."
+Text 0,14,"X handle-" + ImageXHandle(gfxBall) ; Print the location of the image handle x location
+Text 0,28,"Y handle-" + ImageYHandle(gfxBall) ; Print the location of the image handle y location
+DrawImage gfxBall,200,200,0 ; draw the image at 200,200
+Wend
+
+; Clear the screen
+Cls
+
+; Set the ball's handle to the center of the image
+MidHandle gfxBall
+
+; Until the user presses ESC key ... show the new information
+While Not KeyHit(1)
+Text 0,0,"New Image Handle for gfxBall... Press ESC ..."
+Text 0,14,"X handle-" + ImageXHandle(gfxBall)
+Text 0,28,"Y handle-" + ImageYHandle(gfxBall)
+DrawImage gfxBall,200,200,0
+Wend
+
+; Makes all images load up with their handles in the center of the image
+AutoMidHandle True
+Cls
+
+; Load the image again
+gfxBall=LoadImage ("C:\Program Files\Blitz Basic\samples\ball.bmp")
+
+; Until the user presses ESC key ... show the new information
+While Not KeyHit(1)
+Text 0,0,"Automatic image handle of gfxBall... Press ESC ..."
+Text 0,14,"X handle-" + ImageXHandle(gfxBall)
+Text 0,28,"Y handle-" + ImageYHandle(gfxBall)
+DrawImage gfxBall,200,200,0
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/ImagesCollide.htm b/_release/help/commands/2d_commands/ImagesCollide.htm new file mode 100644 index 0000000..1f07ecc --- /dev/null +++ b/_release/help/commands/2d_commands/ImagesCollide.htm @@ -0,0 +1,67 @@ +Command: ImagesCollide   ImagesCollide (image1,x1,y1,frame1,image2,x2,y2,frame2)  

Definition:

Checks to see if two images have collided.

Parameter Description:


image1 = first image to test
+x1 = image1's x location
+y1 = image1's y location
+frame1 = image1's frame to test (optional)
+image2 = second image to test
+x2 = image2's x location
+y2 = image2's y location
+frame2 = image2's frame to text (optional)

Command Description:

This is THE command to get pixel-perfect collisions between images. It will not consider transparent pixels during the collision check (basically, only the 'meat' of the image will invoke a collision). This makes it perfect for most situations where you have odd-shaped graphics to text against.
+
+The ImagesOverlap command is MUCH faster, however, but can only determine if ANY of the two images have overlapped (this INCLUDES transparent pixels). This method works if you have graphics that completely fill their container and/or you don't plan on needing pinpoint accuracy.
+
+As with any collision detection system in Blitz, you will need to know the variable names of the two images, and their X and Y locations at the moment collision checking occurs.
+
+The example blatently uses graphics that are much smaller than their container to show you how accurate this command really is. The ImagesOverlap example is identical to this one - and shows how inaccurate the overlapping method can be with graphics of this nature.

Example:

; ImagesCollide Example
+
+; Turn on graphics mode
+Graphics 640,480,16
+
+; Create two new empty graphics to store our circle and box in
+gfxBox=CreateImage(50,50)
+gfxCircle=CreateImage(50,50)
+
+; Draw the box image first
+; Set drawing operations to point to our new empty graphic
+SetBuffer ImageBuffer(gfxBox)
+; Change drawing color to blue
+Color 0,0,255
+;Draw our box (note that it has a 10 pixel space around it)
+Rect 10,10,30,30,1
+
+; Repeat for the circle graphic
+SetBuffer ImageBuffer(gfxCircle)
+Color 255,0,0
+; Note the extra space between the circle and the edge of the graphic
+Oval 10,10,30,30,1
+
+; Let's not forget to put the drawing buffer back!
+SetBuffer BackBuffer()
+
+; Locate our box to a random, visible screen location
+boxX=Rnd(50,610)
+boxY=Rnd(50,430)
+
+; Repeat the loop until we've had a collision
+Repeat
+; Attach our mouse to the circle to move it
+circleX=MouseX()
+circleY=MouseY()
+; Standard double buffer technique; clear screen first
+Cls
+; Draw our objects at the designated location
+DrawImage gfxBox,boxX,boxY
+DrawImage gfxCircle,circleX,circleY
+; Standard double buffer technique; flip after all drawing is done
+Flip
+; We test the locations of our box and circle to see if they have pixel collided
+Until ImagesCollide (gfxBox,boxX,boxY,0,gfxCircle,circleX,circleY,0)
+
+; Loop is over, we must've collided!
+Text 0,0, "WE'VE HAD A COLLISION! PRESS A MOUSE BUTTON"
+; Can't see the text until we flip ..
+Flip
+; Wait for a mouse click
+WaitMouse()
+; End our graphics mode
+EndGraphics

Index

+ diff --git a/_release/help/commands/2d_commands/ImagesOverlap.htm b/_release/help/commands/2d_commands/ImagesOverlap.htm new file mode 100644 index 0000000..6455316 --- /dev/null +++ b/_release/help/commands/2d_commands/ImagesOverlap.htm @@ -0,0 +1,67 @@ +Command: ImagesOverlap   ImagesOverlap (image1,x1,y1,image2,x2,y2)  

Definition:

Checks to see if two graphic images have overlapped.

Parameter Description:


image1 = first image to test
+x1 = image1's x location
+y1 = image1's y location
+image2 = second image to test
+x2 = image2's x location
+y2 = image2's y location

Command Description:

This is a very fast, simple collision type command that will allow you to determine whether or not two images have overlapped each other. This does not take into account any transparent pixels (see ImagesCollide).
+
+As with any collision detection system in Blitz, you will need to know the variable names of the two images, and their X and Y locations at the moment collision checking occurs.
+
+In many cases, you might be able to get away with using this more crude, yet quite fast method of collision detection. For games where your graphics are very squared off and pixel-perfect accuracy isn't a must, you can employ this command to do quick and dirty overlap checking.
+
+The example blatently uses graphics that are much smaller than their container to show you how inaccurate this command can be - if not used wisely. The ImagesCollide example is identical to this one - and shows how pixel-perfect collision works.
+
+You might be able to get away with this on some more classical games like Robotron, Defender, Dig Dug, etc.

Example:

; ImagesOverlap Example
+
+; Turn on graphics mode
+Graphics 640,480,16
+
+; Create two new empty graphics to store our circle and box in
+gfxBox=CreateImage(50,50)
+gfxCircle=CreateImage(50,50)
+
+; Draw the box image first
+; Set drawing operations to point to our new empty graphic
+SetBuffer ImageBuffer(gfxBox)
+; Change drawing color to blue
+Color 0,0,255
+;Draw our box (note that it has a 10 pixel space around it)
+Rect 10,10,30,30,1
+
+; Repeat for the circle graphic
+SetBuffer ImageBuffer(gfxCircle)
+Color 255,0,0
+; Note the extra space between the circle and the edge of the graphic
+Oval 10,10,30,30,1
+
+; Let's not forget to put the drawing buffer back!
+SetBuffer BackBuffer()
+
+; Locate our box to a random, visible screen location
+boxX=Rnd(50,610)
+boxY=Rnd(50,430)
+
+; Repeat the loop until we've had a collision
+Repeat
+; Attach our mouse to the circle to move it
+circleX=MouseX()
+circleY=MouseY()
+; Standard double buffer technique; clear screen first
+Cls
+; Draw our objects at the designated location
+DrawImage gfxBox,boxX,boxY
+DrawImage gfxCircle,circleX,circleY
+; Standard double buffer technique; flip after all drawing is done
+Flip
+; We test the locations of our box and circle to see if they have overlapped
+Until ImagesOverlap (gfxBox,boxX,boxY,gfxCircle,circleX,circleY)
+
+; Loop is over, we must've collided!
+Text 0,0, "WE'VE HAD A COLLISION! PRESS A MOUSE BUTTON"
+; Can't see the text until we flip ..
+Flip
+; Wait for a mouse click
+WaitMouse()
+; End our graphics mode
+EndGraphics

Index

+ diff --git a/_release/help/commands/2d_commands/Include.htm b/_release/help/commands/2d_commands/Include.htm new file mode 100644 index 0000000..c3496ee --- /dev/null +++ b/_release/help/commands/2d_commands/Include.htm @@ -0,0 +1,17 @@ +Command: Include   Include filename  

Definition:

Includes more Blitz Basic source code into your code from an external file.

Parameter Description:


filename = full path and filename of your .bb include code

Command Description:

Includes are a cheap substitute for Function Folding (grin). Seriously, Includes offers the programmer a means of keeping distinct code seperate by taking 'working' subroutines, functions, variable assignments - heck, ANY code and placing it into an external .bb file. This external file can be 'included' into another Blitz program - and when you run the program, Blitz will 'included' that external code just as if it cut and pasted it right into your source code before it runs. For example, you could create a small Blitz program for displaying your 'intro' screen/effect and save it off as 'intro.bb'. Then, give it to all your programmers so they can 'include' that source code at the beginning of their game. Many programmers find it useful to write functions, test them, and once working 100% properly, save them off as their own source code and just include them in their main program. This keeps code segregated, readable, and modularly changeable.
+
+For debugging purposes, if you run a program with included files, and one of the includes has an error, Blitz will automagically load the include, and display the error/debug information there. Nice, huh?
+
+Hopefully Function Folding will be supported in future versions of Blitz, since many people use Includes to 'simulate' this feature.
+
+Note: The example only shows you the calling code using the INCLUDE command - it will not run unless you create the included files yourself.

Example:

; INCLUDE Example
+
+; Include the source code that has all our variables in it
+Include "myvariables.bb"
+
+; Get the TYPEs from an external source code include
+Include "myTYPES.bb"
+ + +

Index

+ diff --git a/_release/help/commands/2d_commands/Input.htm b/_release/help/commands/2d_commands/Input.htm new file mode 100644 index 0000000..0047f2b --- /dev/null +++ b/_release/help/commands/2d_commands/Input.htm @@ -0,0 +1,6 @@ +Command: Input$   Input$ (prompt$)  

Definition:

Get input from the user.

Parameter Description:


prompt$ = any valid string (optional)

Command Description:

This command will retrieve a string value from the user with an optional prompt on the screen (if not in a graphic mode) or on the current drawing buffer being used by the program. Usually you will assign this command's value to a string for later use.

Example:

; Get the user's name and print a welcome
+
+name$=Input$("What is your name?")
+Write "Hello there, " + name$ + "!"
+

Index

+ diff --git a/_release/help/commands/2d_commands/Insert.htm b/_release/help/commands/2d_commands/Insert.htm new file mode 100644 index 0000000..564f7d9 --- /dev/null +++ b/_release/help/commands/2d_commands/Insert.htm @@ -0,0 +1,29 @@ +Command: Insert   Insert   

Definition:

Insert the current TYPE object into another location in the TYPE collection.

Parameter Description:


None.

Command Description:

I'm not sure the practical usage of this command, but basically, you can control where you INSERT the current TYPE object into the TYPE collection. When you create a new Type object with the NEW command, it is automatically appended to the END of the collection. Using INSERT along with BEFORE and AFTER (and electively FIRST and LAST) to put the Type object exactly where you want it. Sounds confusing - and chances are likely you'll never need this ability. But its here if you need it. Check the example.

Example:

; INSERT example
+
+; Define a CHAIR type with a created field to track what order it was created in.
+Type CHAIR
+Field created
+End Type
+
+; Create 10 chairs, setting created field to the order of creation
+For t = 1 To 10
+room.chair= New Chair
+room\created = t
+Next
+
+; Make a NEW chair (the 11th)
+room.chair= New Chair
+
+; Set its created value to 11
+room\created=11
+
+; Now, let's insert this chair BEFORE the first one in the collection
+Insert room Before First Chair
+
+; Let's iterate through all the chairs, and show their creation order
+For room.chair = Each chair
+Print room\created
+Next
+
+

Index

+ diff --git a/_release/help/commands/2d_commands/Instr.htm b/_release/help/commands/2d_commands/Instr.htm new file mode 100644 index 0000000..fc0a98d --- /dev/null +++ b/_release/help/commands/2d_commands/Instr.htm @@ -0,0 +1,7 @@ +Command: Instr   Instr (string1$, string2$, offset)  

Definition:

Finds the position of an occurance of one string within another.

Parameter Description:


string1$ = the string you wish to search
+string2$ = the string to find
+offset = valid integer starting position to being search (optional)

Command Description:

This command will allow you to search for an occurance of a string within another string. The command returns the location (number of characters from the left) of the string you are looking for. Command returns a Zero if no matches are found.

Example:

name$="Shane R. Monroe"
+location = Instr( name$,"R.",1)
+Print "Your string contains 'R.' at position number " + location + "!"
+

Index

+ diff --git a/_release/help/commands/2d_commands/Int.htm b/_release/help/commands/2d_commands/Int.htm new file mode 100644 index 0000000..ed3b2c1 --- /dev/null +++ b/_release/help/commands/2d_commands/Int.htm @@ -0,0 +1,5 @@ +Command: Int   Int (value)  

Definition:

Returns the integer portion of a number.

Parameter Description:


value = any valid variable or number

Command Description:

Returns the integer value of an expression or value. Use this to convert a floating point number to a straight integer value. See Example.

Example:

; Int Example
+
+myNum#=3.14
+Print "The integer value of " + mynum# + " is: " + Int(myNum#)

Index

+ diff --git a/_release/help/commands/2d_commands/JoinNetGame.htm b/_release/help/commands/2d_commands/JoinNetGame.htm new file mode 100644 index 0000000..a260dfd --- /dev/null +++ b/_release/help/commands/2d_commands/JoinNetGame.htm @@ -0,0 +1,21 @@ +Command: JoinNetGame   JoinNetGame (gamename$,serverIP$)  

Definition:

Joins a network game in progress.

Parameter Description:


gamename$ = valid string containing game name to join
+serverIP$ = IP address of computer hosting game

Command Description:

Use this command to join a network game, bypassing the dialog box normally endured with the StartNetGame command.
+This returns 0 if the command failed, or 1 if the game was joined successfully.

Example:

; JoinNetGame example
+; Note; run the HostNetGame example code on the other computer
+; you wish to join with
+
+gamename$="ShaneGame"
+; Change this to match the other computer's IP!
+serverIP$="0.0.0.0"
+
+; Make the join attempt
+joinResults=JoinNetGame(gamename$,serverIP$)
+
+Select joinResults
+ Case 1
+ Print "Joined the game successfully!"
+ Default
+ Print "Joining the game was unsuccessful."
+End Select
+WaitKey()

Index

+ diff --git a/_release/help/commands/2d_commands/JoyDown.htm b/_release/help/commands/2d_commands/JoyDown.htm new file mode 100644 index 0000000..830383a --- /dev/null +++ b/_release/help/commands/2d_commands/JoyDown.htm @@ -0,0 +1,13 @@ +Command: JoyDown   JoyDown (button,[port])  

Definition:

Returns TRUE if the specified joystick button is being held down.

Parameter Description:


button = number of joystick button to check
+port = number of joystick port to check (optional)

Command Description:

This command (and its counterparts KeyDown and MouseDown) is used to detect if a joystick button is being held down. You must check for each joystick button independantly with its corresponding number (unlike KeyDown which returns WHICH key is being held down). Also see JoyHit.

Example:

; JoyDown Example
+
+; Until user presses ESC, show the mouse button pressed
+While Not KeyHit(1)
+button$="No"
+For t = 1 To 5
+If JoyDown(t) Then button$=Str(t)
+Print button$ + " joystick button pressed!"
+Next
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/JoyHit.htm b/_release/help/commands/2d_commands/JoyHit.htm new file mode 100644 index 0000000..7952e2c --- /dev/null +++ b/_release/help/commands/2d_commands/JoyHit.htm @@ -0,0 +1,15 @@ +Command: JoyHit   JoyHit (button,[port])  

Definition:

Returns the number of times a specified joystick button has been hit.

Parameter Description:


button = number of joystick button to check
+port = number of joystick port to check (optional)

Command Description:

This command returns the number of times a specified joystick button has been hit since the last time you called the JoyHit() command. Also see KeyHit and MouseHit.

Example:

; JoyHit Example
+
+; Set up the timer
+current=MilliSecs()
+Print "Press FireButton 1 a bunch of times for five seconds..."
+
+; Wait 5 seconds
+While MilliSecs() < current+5000
+Wend
+
+; Print the results
+Print "Pressed button " + JoyHit(1) + " times."
+

Index

+ diff --git a/_release/help/commands/2d_commands/JoyType.htm b/_release/help/commands/2d_commands/JoyType.htm new file mode 100644 index 0000000..fbcc1f2 --- /dev/null +++ b/_release/help/commands/2d_commands/JoyType.htm @@ -0,0 +1,16 @@ +Command: JoyType   JoyType ([port])  

Definition:

Returns the type of joystick attached to the computer.

Parameter Description:


port = number of joystick port to check (optional)

Command Description:

This command returns the type of joystick that is currently connected to the computer. It returns 0 if there is none, 1 for digital, and 2 for analog.

Example:

; JoyType() example
+
+; Check to see what stick is present - print the proper message
+Select JoyType()
+Case 0
+Print "Sorry, no joystick attached to system!"
+Case 1
+Print "Digital joystick is attached to system!"
+Case 2
+Print "Analog joystick is attched to system!"
+End Select
+
+; Wait for user to hit ESC
+While Not KeyHit(1)
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/JoyWait.htm b/_release/help/commands/2d_commands/JoyWait.htm new file mode 100644 index 0000000..60a323d --- /dev/null +++ b/_release/help/commands/2d_commands/JoyWait.htm @@ -0,0 +1,18 @@ +Command: JoyWait   JoyWait ([port])  

Definition:

Waits for a joystick button to be pressed, then returns the number.

Parameter Description:


port = number of joystick port to check (optional)

Command Description:

This command makes your program halt until a jpystick button is pressed on the joystick. Used alone, it simply halts and waits for a button press. It can also be used to assign the pressed button's code value to a variable. See example. + +In MOST CASES, you are not going to want to use this command because chances are likely you are going to want things on the screen still happening while awaiting the button press. In that situation, you'll use a WHILE ... WEND awaiting a JoyHit value - refreshing your screen each loop. + +As with any joystick command, you MUST have a DirectX compatible joystick plugged in and properly configured within Windows for it to work. See your joystick documentation for more information.

Example:

; JoyWait() example
+
+; Check to see what stick is present - print the proper message
+Print "Press a button on the joystick"
+
+button=JoyWait()
+
+; Wait for user to hit ESC
+Print "You pressed button # " + button + "! Hit ESC To End"
+
+While Not KeyHit(1)
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/JoyX.htm b/_release/help/commands/2d_commands/JoyX.htm new file mode 100644 index 0000000..a8d50f5 --- /dev/null +++ b/_release/help/commands/2d_commands/JoyX.htm @@ -0,0 +1,7 @@ +Command: JoyX   JoyX ([port])  

Definition:

Returns the X-axis coordinate of the joystick.

Parameter Description:


port = number of joystick port to check (optional)

Command Description:

This command returns the value of the x-axis of the joystick. The range is -1 to 1 (full left to full right). The value returned is a floating point number. See the example.

Example:

; JoyX()/JoyY() example
+
+While Not KeyHit(1)
+Cls
+Text 0,0,"Joy X Value: " + JoyX() + " - Joy Y Value:" + JoyY()
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/JoyXDir.htm b/_release/help/commands/2d_commands/JoyXDir.htm new file mode 100644 index 0000000..c99871e --- /dev/null +++ b/_release/help/commands/2d_commands/JoyXDir.htm @@ -0,0 +1,9 @@ +Command: JoyXDir   JoyXDir ([port])  

Definition:

Returns the X-axis direction of the joystick.

Parameter Description:


port = number of joystick port to check (optional)

Command Description:

This command returns the direction of the x-axis of the joystick being pressed. The value is -1 (left) or 1 (right). The value returned is an integer number. See the example. Perfect for digital joysticks.
+
+As with any joystick command, you MUST have a DirectX compatible joystick plugged in and properly configured within Windows for it to work. See your joystick documentation for more information.

Example:

; JoyXDir() example
+
+While Not KeyHit(1)
+Cls
+Text 0,0,"Joy X Direction: " + JoyXDir()
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/JoyY.htm b/_release/help/commands/2d_commands/JoyY.htm new file mode 100644 index 0000000..7aca12b --- /dev/null +++ b/_release/help/commands/2d_commands/JoyY.htm @@ -0,0 +1,7 @@ +Command: JoyY   JoyY ([port])  

Definition:

Returns the Y-axis coordinate of the joystick.

Parameter Description:


port = number of joystick port to check (optional)

Command Description:

This command returns the value of the x-axis of the joystick. The range is -1 to 1 (full up to full down). The value returned is a floating point number. See the example.

Example:

; JoyX()/JoyY() example
+
+While Not KeyHit(1)
+Cls
+Text 0,0,"Joy X Value: " + JoyX() + " - Joy Y Value:" + JoyY()
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/JoyYDir.htm b/_release/help/commands/2d_commands/JoyYDir.htm new file mode 100644 index 0000000..7e12870 --- /dev/null +++ b/_release/help/commands/2d_commands/JoyYDir.htm @@ -0,0 +1,9 @@ +Command: JoyYDir   JoyYDir ([port])  

Definition:

Returns the Y-axis direction of the joystick.

Parameter Description:


port = number of joystick port to check (optional)

Command Description:

This command returns the direction of the Y-axis of the joystick being pressed. The value is -1 (up) or 1 (down). The value returned is an integer number. See the example. Perfect for digital joysticks.
+
+As with any joystick command, you MUST have a DirectX compatible joystick plugged in and properly configured within Windows for it to work. See your joystick documentation for more information.

Example:

; JoyYDir() example
+
+While Not KeyHit(1)
+Cls
+Text 0,0,"Joy Y Direction: " + JoyYDir()
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/JoyZ.htm b/_release/help/commands/2d_commands/JoyZ.htm new file mode 100644 index 0000000..38a57ef --- /dev/null +++ b/_release/help/commands/2d_commands/JoyZ.htm @@ -0,0 +1,9 @@ +Command: JoyZ   JoyZ ([port])  

Definition:

Returns the Z-axis coordinate of the joystick.

Parameter Description:


port = number of joystick port to check (optional)

Command Description:

This command returns the value of the x-axis of the joystick. The range is -1 to 1 (Max to none). The value returned is a floating point number. See the example.
+
+As with any joystick command, you MUST have a DirectX compatible joystick plugged in and properly configured within Windows for it to work. See your joystick documentation for more information.

Example:

; JoyZ() example
+
+While Not KeyHit(1)
+Cls
+Text 0,0,"Joy Z Value: " + JoyZ()
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/JoyZDir.htm b/_release/help/commands/2d_commands/JoyZDir.htm new file mode 100644 index 0000000..c0cc301 --- /dev/null +++ b/_release/help/commands/2d_commands/JoyZDir.htm @@ -0,0 +1,9 @@ +Command: JoyZDir   JoyZDir ([port])  

Definition:

Returns the Z-axis direction of the joystick.

Parameter Description:


port = number of joystick port to check (optional)

Command Description:

This command returns the direction of the Z-axis of the joystick being pressed. The value is -1 (up) or 1 (down). The value returned is an integer number. See the example. Perfect for digital joysticks.
+
+As with any joystick command, you MUST have a DirectX compatible joystick plugged in and properly configured within Windows for it to work. See your joystick documentation for more information.

Example:

; JoyZDir() example
+
+While Not KeyHit(1)
+Cls
+Text 0,0,"Joy Z Direction: " + JoyZDir()
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/KeyDown.htm b/_release/help/commands/2d_commands/KeyDown.htm new file mode 100644 index 0000000..cd177fd --- /dev/null +++ b/_release/help/commands/2d_commands/KeyDown.htm @@ -0,0 +1,12 @@ +Command: KeyDown   KeyDown (scancode)  

Definition:

Returns TRUE if the specified key on keyboard is being held down.

Parameter Description:


scancode = corresponding key scancode

Command Description:

This command (similar to its counterparts MouseDown and JoyDown) is used to detect if a key is being held down. This command returns a 0 if the key is not held down, a 1 if the key is held down. See ScanCodes.

Example:

; KeyDown() example
+
+Print "Hold down ENTER key!"
+Delay 3000
+While Not KeyHit(1)
+If KeyDown(28) Then
+Print "Enter is being pressed!"
+Else
+Print
+End If
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/KeyHit.htm b/_release/help/commands/2d_commands/KeyHit.htm new file mode 100644 index 0000000..23f8301 --- /dev/null +++ b/_release/help/commands/2d_commands/KeyHit.htm @@ -0,0 +1,14 @@ +Command: KeyHit   KeyHit (scancode)  

Definition:

Returns the number of times a specified key has been hit.

Parameter Description:


scancode = the scancode for the key to test

Command Description:

This command returns the number of times a specified key has been hit since the last time you called the KeyHit() command. Check the ScanCodes for a complete listing of scancodes.

Example:

; KeyHit Example
+
+; Set up the timer
+current=MilliSecs()
+Print "Press ESC a bunch of times for five seconds..."
+
+; Wait 5 seconds
+While MilliSecs() < current+5000
+Wend
+
+; Print the results
+Print "Pressed ESC " + KeyHit(1) + " times."
+

Index

+ diff --git a/_release/help/commands/2d_commands/LSet.htm b/_release/help/commands/2d_commands/LSet.htm new file mode 100644 index 0000000..ab0b13f --- /dev/null +++ b/_release/help/commands/2d_commands/LSet.htm @@ -0,0 +1,4 @@ +Command: LSet$   LSet$ (string$, length)  

Definition:

Pads a string with spaces to a specified value, left aligning the string.

Parameter Description:


string$ = any valid string or string variable
+length = how long you want the new string to be (including padding)

Command Description:

If you have a string that is say, 10 letters long, but you want to make it a full 25 letters, padding the rest of the string with spaces, this command will do so, leaving the original string value left justified.

Example:

name$="Shane R. Monroe"
+Print "New Padded Name: '" + LSet$(name$,40) + "'"

Index

+ diff --git a/_release/help/commands/2d_commands/Last.htm b/_release/help/commands/2d_commands/Last.htm new file mode 100644 index 0000000..d8c9b61 --- /dev/null +++ b/_release/help/commands/2d_commands/Last.htm @@ -0,0 +1,43 @@ +Command: Last   Last type_variable  

Definition:

Move the Last object pointer to the Last object in the collection.

Parameter Description:


type_variable = the actual Type name, not the custom Type name

Command Description:

If you haven't read up on the TYPE + command, you might want to do so before continuing.

+

Use this to assign a custom Type object to the last object in the collection. + See the example.

Example:

; Define a crafts Type

+

Type crafts
+ Field x
+ Field y
+ Field dead
+ Field graphic
+ End Type

+

; Create 100 crafts, with the unique name of alien
+ For t = 1 To 100
+ alien.crafts = New crafts
+ alien\x = Rnd(0,640)
+ alien\y = Rnd(0,480)
+ alien\dead = 0
+ alien\graphic = 1
+ Next

+

; Move to the first object
+ alien.crafts = First crafts

+

Print alien\x
+ Print alien\y
+ Print alien\dead
+ Print alien\graphic

+

; move to the next alien object
+ alien = After alien

+

Print alien\x
+ Print alien\y
+ Print alien\dead
+ Print alien\graphic

+

; move to the last alien object
+ alien.crafts = Last crafts

+

Print alien\x
+ Print alien\y
+ Print alien\dead
+ Print alien\graphic

+

; move to the second to the last alien object
+ alien = Before alien

+

Print alien\x
+ Print alien\y
+ Print alien\dead
+ Print alien\graphic

Index

+ diff --git a/_release/help/commands/2d_commands/Left.htm b/_release/help/commands/2d_commands/Left.htm new file mode 100644 index 0000000..fbab031 --- /dev/null +++ b/_release/help/commands/2d_commands/Left.htm @@ -0,0 +1,4 @@ +Command: Left$   Left$ (string$, length)  

Definition:

Return a certain number of the leftmost characters of a string.

Parameter Description:


string$ = any valid string variable
+length = a valid integer value up to the length of the string.

Command Description:

Use this command to get a certain number of the leftmost letters of a string. You will use this to truncate strings to make them fit somewhere, or to control the number of characters input.

Example:

name$="Shane Monroe"
+Print "The left 3 letters of your name are: " + Left$(name$,3)

Index

+ diff --git a/_release/help/commands/2d_commands/Len.htm b/_release/help/commands/2d_commands/Len.htm new file mode 100644 index 0000000..9fc47df --- /dev/null +++ b/_release/help/commands/2d_commands/Len.htm @@ -0,0 +1,3 @@ +Command: Len   Len (string$)  

Definition:

Returns the number of characters in a string.

Parameter Description:


string$ = any valid string variable

Command Description:

This will let you determine the length (number of letters, spaces, characters, numbers, etc) inside a string. You can use this to ensure the player enters the right number of letters (like 3 letters for a high score table). Quite useful for 'string parsing' with other commands.

Example:

name$="Shane Monroe"
+Print "There are " + Len(name$) + " characters in your name!"

Index

+ diff --git a/_release/help/commands/2d_commands/Line.htm b/_release/help/commands/2d_commands/Line.htm new file mode 100644 index 0000000..1204855 --- /dev/null +++ b/_release/help/commands/2d_commands/Line.htm @@ -0,0 +1,14 @@ +Command: Line   Line x,y,x1,y1  

Definition:

Draws a line in the current drawing color from x,y to x1,y1.

Parameter Description:


x=starting x location of the line
+y=starting y location of the line
+x1=ending x location of the line
+y1=ending y location of the line

Command Description:

This command draws a line, in the current drawing color, from one point on the screen to another (from the x,y to x1,y1 location). See example.

Example:

; Line example
+Graphics 800,600,16
+
+; Wait for ESC to hit
+While Not KeyHit(1)
+; Set a random color
+Color Rnd(255),Rnd(255),Rnd(255)
+; Draw a random line
+Line Rnd(800),Rnd(600),Rnd(800),Rnd(600)
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/LoadAnimImage.htm b/_release/help/commands/2d_commands/LoadAnimImage.htm new file mode 100644 index 0000000..b1406a3 --- /dev/null +++ b/_release/help/commands/2d_commands/LoadAnimImage.htm @@ -0,0 +1,50 @@ +Command: LoadAnimImage   LoadAnimImage (filename,width,height,first,count)  

Definition:

Loads an 'image strip' for use as an 'animated image' to be drawn later and return a handle.

Parameter Description:


filename = string designating full path and filename to image.
+width=width in pixels of each frame in the image.
+height=height in pixels of each frame in the image.
+first=the frame to start with (usually 0)
+count=how many frames you are using of the imagestrip

Command Description:

While similar to LoadImage, the LoadAnimImage loads a single image that is made up of 'frames' of seperate images (presumably to be used as frames of a graphic animation).
+
+Like the LoadImage command, this command returns a file handle - a unique number to denote the graphic. Use a variable (usually GLOBAL) to contain this number, as you will need it to actually DRAW the image with the DrawImage command. See LoadImage command for more details.
+
+The imagestrip itself consists of 2 or more frames, horizontally aligned in a single graphic image. There is no spaces between the frames, and each frame must be the same width and height. For examples, look at the file kaboom.bmp or sparks.bmp included in the C:\Program Files\BlitzBasic\samples\graphics folder of your computer. There are some free utilities floating around to help you do this.
+
+When drawing the image to the screen with the DrawImage command, you specify which frame to draw with the frame parameter.
+
+To actually make your image animate, you'll need to cycle through the frames (like a flip book, cartoon, or any other video) quickly to give the illusion of motion. Our example will show you how to use one of the sample imagestrips and make it animate. While it may seem confusing, we are going to do some timer work as well as a little weird math.
+
+Please look over the example (if your like me, over and over :). Note: You may need to change the location of the file to suit your system.

Example:

; LoadAnimImage/MaskImage Example
+; With animation timers
+
+; Even though we don't have any functions, let's do variables global
+; One variable will hold the handle for the graphic, one will hold the
+; current frame we are displaying, and one will hold the milliseconds
+; timer so we can adjust the animation speed.
+Global gfxSparks, frmSparks, tmrSparks
+
+; Standard graphic declaration and double buffering setup
+Graphics 640,480,16
+SetBuffer BackBuffer()
+
+; Load the imagestrip up and denote the frames 32x32 - for a total of 3 frames
+gfxSparks=LoadAnimImage("c:\Program Files\BlitzBasic\samples\Graphics\spark.bmp",32,32,0,3)
+
+; We mask the image's color pink to be the 'transparent' color - look at the
+; image in your favorite editor to see more why we use masking.
+MaskImage gfxSparks,255,0,255
+
+; Loop until ESC
+While Not KeyHit(1)
+Cls ; Standard clear screen
+
+; The next statment checks to see if 100 milliseconds has passes since we
+; last changed frames. Change the 100 to higher and lower values to
+; make the animation faster or slower.
+If MilliSecs() > tmrSparks + 100 Then
+tmrSparks=MilliSecs() ; 'reset' the timer
+frmSparks=( frmSparks + 1 ) Mod 3 ; increment the frame, flip to 0 if we are out
+End If
+DrawImage gfxSparks,MouseX(),MouseY(),frmSparks ; draw the image
+Flip ; show the buffer
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/LoadBuffer.htm b/_release/help/commands/2d_commands/LoadBuffer.htm new file mode 100644 index 0000000..fd9f59d --- /dev/null +++ b/_release/help/commands/2d_commands/LoadBuffer.htm @@ -0,0 +1,16 @@ +Command: LoadBuffer   LoadBuffer (buffer, filename$)  

Definition:

Loads an image directly into a buffer in Blitz.

Parameter Description:


buffer = system or image buffer
+filename$ = string containing full path and filename of image
+

Command Description:

There are a hundred and one uses for this command, but probably most often used would be to display a title screen or some other 'one time viewing only' image to the front buffer (as in our example).
+
+You can also load to an image buffer or back buffer. The image is scaled to match the buffer size. This command returns 1 if the command was successful, 0 if there was an error.

Example:

; LoadBuffer example
+
+; Set graphics mode
+Graphics 800,600,16
+
+; Load an image directly to the front buffer (your location may be different)
+LoadBuffer (FrontBuffer(),"C:\Program Files\Blitz Basic\samples\blitzanoid\gfx\title.bmp")
+
+; wait for ESC so user gets to see the screen
+While Not KeyHit(1)
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/LoadFont.htm b/_release/help/commands/2d_commands/LoadFont.htm new file mode 100644 index 0000000..e60d301 --- /dev/null +++ b/_release/help/commands/2d_commands/LoadFont.htm @@ -0,0 +1,48 @@ +Command: LoadFont   LoadFont (fontname$,height,bold,italic,underlined)  

Definition:

Loads a TrueType font into memory.

Parameter Description:


fontname = string containing font name
+height = font height desired
+bold = set to TRUE to load font as BOLD
+italic = set to TRUE to load font as ITALIC
+underlined set to TRUE to load font as UNDERLINED
+

Command Description:

This loads a TrueType font into memory for future use with printing commands such as Text. You will need to make the font active by using SetFont before writing any text with the new font.
+
+Note: Blitz doesn't work with SYMBOL fonts, like Webdings and WingDings.
+
+Be sure to free the memory used by the font went you are done using the FreeFont command.
+
+If the font fails to load for whatever reason, this command will return a zero.

Example:

; LoadFont/SetFont/FreeFont example
+
+; enable graphics mode
+Graphics 800,600,16
+
+; Set global on font variables
+Global fntArial,fntArialB,fntArialI,fntArialU
+
+;Load fonts to a file handle variables
+fntArial=LoadFont("Arial",24,False,False,False)
+fntArialB=LoadFont("Arial",18,True,False,False)
+fntArialI=LoadFont("Arial",32,False,True,False)
+fntArialU=LoadFont("Arial",14,False,False,True)
+
+; set the font and print text
+SetFont fntArial
+Text 400,0,"This is just plain Arial 24 point",True,False
+
+SetFont fntArialB
+Text 400,30,"This is bold Arial 18 point",True,False
+
+SetFont fntArialI
+Text 400,60,"This is italic Arial 32 point",True,False
+
+SetFont fntArialU
+Text 400,90,"This is underlined Arial 14 point",True,False
+
+; Standard 'wait for ESC' from user
+While Not KeyHit(1)
+Wend
+
+; Clear all the fonts from memory!
+FreeFont fntArial
+FreeFont fntArialB
+FreeFont fntArialI
+FreeFont fntArialU

Index

+ diff --git a/_release/help/commands/2d_commands/LoadImage.htm b/_release/help/commands/2d_commands/LoadImage.htm new file mode 100644 index 0000000..9ccdee5 --- /dev/null +++ b/_release/help/commands/2d_commands/LoadImage.htm @@ -0,0 +1,30 @@ +Command: LoadImage   LoadImage (Filename)  

Definition:

Loads an image into memory and assigns it a handle.

Parameter Description:


filename = string designating full path and filename to image.

Command Description:

This command loads an image from disk and assigns it a file handle. You will use the DrawImage command to display the graphic later. The demo version of Blitz Basic supports BMP files; the full retail version of Blitz Basic supports JPG and PNG format as well.
+
+Many multimedia loading commands for fonts, graphics, and sounds require the use of FILE HANDLES. You'll need to have a good understanding of file handles if you are going to successfully use Blitz Basic.
+
+A file handle is a variable (usually GLOBAL) that holds a unique identifier for a loaded item (font, image, sound, music, etc.). This unique number is used later for subsequent operations to designate the loaded item. This file handle allocates the memory to hold the item.
+
+You will find file handles used all over Blitz. See the example for some well-documented code.

Example:

; LoadImage and DrawImage example
+
+; Declare a variable to hold the graphic file handle
+Global gfxPlayer
+
+; Set a graphics mode
+Graphics 640,480,16
+
+; Set drawing operations for double buffering
+SetBuffer BackBuffer()
+
+; Load the image and assign its file handle to the variable
+; - This assumes you have a graphic called player.bmp in the
+; same folder as this source code
+gfxPlayer=LoadImage("player.bmp")
+
+; Let's do a loop where the graphic is drawn wherever the
+; mouse is pointing. ESC will exit.
+While Not KeyHit(1)
+Cls ; clear the screen
+DrawImage gfxPlayer,MouseX(),MouseY() ; Draw the image!
+Flip ; flip the image into view and clear the back buffer
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/LoadSound.htm b/_release/help/commands/2d_commands/LoadSound.htm new file mode 100644 index 0000000..cc66bb4 --- /dev/null +++ b/_release/help/commands/2d_commands/LoadSound.htm @@ -0,0 +1,13 @@ +Command: LoadSound   LoadSound (filename$)  

Definition:

Load a sound file into memory.

Parameter Description:


filename$ = valid string with path/filename to the sound file

Command Description:

This command loads a sound file (.WAV or .MP3) into memory. It returns a number if successful, or 0 if there was a problem loading the sound. You must assign value this returns to a variable (preferably a Global variable) for subsequent playback using (PlaySound}. Look at the example.
+

Example:

; Assign a global variable for the sound
+Global sndPlayerDie
+
+; Load the sound file into memory
+
+sndPlayerDie=LoadSound("sounds/die.wav")
+
+; Play the sound
+
+PlaySound sndPlayerDie
+

Index

+ diff --git a/_release/help/commands/2d_commands/Local.htm b/_release/help/commands/2d_commands/Local.htm new file mode 100644 index 0000000..427ae2c --- /dev/null +++ b/_release/help/commands/2d_commands/Local.htm @@ -0,0 +1,18 @@ +Command: Local   Local variable  

Definition:

Declares a variable as local.

Parameter Description:


variable = any valid variable name
+

Command Description:

This command is probably just here for compatibility with other BASIC languages. LOCAL will let you specify that the variable you are defining is available ONLY to the program or Function you are assigning it in. In order to get a variable to be accessible anywhere in your program, you need to make it GLOBAL. I say it is only here for compatibility because whenever you assign a variable that isn't Global, it is automatically assigned as a LOCAL variable. You can optionally assign a value to the variable at the time of declaration. See example.

Example:

; Local example
+
+; set lives to 5 for the main program loop
+Local lives=5
+
+; Call a function
+while not keyhit(1)
+showlives()
+Wend
+
+Function showlives()
+; For this function, lives will be 10!
+Local lives=10
+Print lives
+End Function
+

Index

+ diff --git a/_release/help/commands/2d_commands/Locate.htm b/_release/help/commands/2d_commands/Locate.htm new file mode 100644 index 0000000..b434684 --- /dev/null +++ b/_release/help/commands/2d_commands/Locate.htm @@ -0,0 +1,12 @@ +Command: Locate   Locate x,y  

Definition:

Locates the text commands starting point on the screen.

Parameter Description:


x=x coordinate on the screen
+y=y coordinate on the screen

Command Description:

Sometimes you want to place the PRINT and Input$ commands at a specific location on the screen. This command locates the 'cursor' to the designated location.

Example:

; Locate example
+
+strName$=Input$("What is your name?")
+
+Locate 100,200
+
+Print "Hello there, " + strName$
+
+While Not KeyHit(1)
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/LockBuffer.htm b/_release/help/commands/2d_commands/LockBuffer.htm new file mode 100644 index 0000000..e30ce11 --- /dev/null +++ b/_release/help/commands/2d_commands/LockBuffer.htm @@ -0,0 +1,37 @@ +Command: LockBuffer   LockBuffer buffer  

Definition:

Locks a buffer for high speed pixel operations.

Parameter Description:


buffer = any valid screen/image buffer (optional)

Command Description:

After you use LockBuffer on a buffer, the only graphics commands you can use are the read/write pixel commands ReadPixel, WritePixel, ReadPixelFast, WritePixelFast, CopyPixelFast, and CopyPixel. You must UnlockBuffer before using other graphics commands.
+
+The buffer parameter isn't required. If omitted, the default buffer set with SetBuffer will be used.
+
+See the other commands for more information. +

Example:

; High Speed Graphics Commands
+
+Graphics 640,480,16
+
+; Draw a bunch of crap on the screen
+For t= 1 To 1000
+Color Rnd(255),Rnd(255),Rnd(255)
+Rect Rnd(640),Rnd(480),Rnd(150),Rnd(150),Rnd(1)
+Next
+
+Delay 3000
+
+; Copy the top half of the screen over the bottom half
+; using fast pixels and locked buffers
+For x = 1 To 640
+For y = 1 To 240
+LockBuffer FrontBuffer()
+WritePixelFast x,y+241,ReadPixelFast(x,y)
+UnlockBuffer FrontBuffer()
+Next
+Next
+
+Delay 3000
+
+; Draw the left half of the screen over the right half
+; using the slower direct pixel access
+For x = 1 To 320
+For y = 1 To 480
+WritePixel x+320,y,ReadPixel(x,y)
+Next
+Next

Index

+ diff --git a/_release/help/commands/2d_commands/Log.htm b/_release/help/commands/2d_commands/Log.htm new file mode 100644 index 0000000..33a21b3 --- /dev/null +++ b/_release/help/commands/2d_commands/Log.htm @@ -0,0 +1,8 @@ +Command: Log   Log (number)  

Definition:

Returns the natural logarithm of the supplied argument.

Parameter Description:


number=float or integer

Command Description:

Log() is the logarithmic (or inverse exponential) function. Logarithms to the base e are called the Natural or Napierian logarithms. The Exp() and Log() functions uses the transcendental number e as a base (approx 2.718). Log() is the inverse of the Exponential Exp() function. Log(e) = 1 +See also: Exp Log10

Example:

; To find the value of Log(e^5)
+e# = Exp(1)
+x# = 5
+y# = e#^x#
+Print y ; i.e. e^5 = e*e*e*e*e: returns 148.413131
+Print Log(y) ; ie. Log(e^5) = Log(10000): returns 5.000000

Index

+ diff --git a/_release/help/commands/2d_commands/Log10.htm b/_release/help/commands/2d_commands/Log10.htm new file mode 100644 index 0000000..9e01f52 --- /dev/null +++ b/_release/help/commands/2d_commands/Log10.htm @@ -0,0 +1,7 @@ +Command: Log10   Log10 (number)  

Definition:

Returns the common logarithm of the supplied argument (base 10).

Parameter Description:


number=float or integer

Command Description:

Log10() is the logarithm (or inverse exponential) function to base 10. Logarithms to the base 10 are called the common logarithms. The Log10() functions uses 10 as a base. It follows the series 10^x. This function is useful for finding the power of a number in base 10. +See also: Exp Log

Example:

; To find the value of Log10(10^5)
+x = 5
+y = 10^x
+Print y ; i.e. 10^5 = 10*10*10*10*10: returns 100000
+Print Log10(y) ; ie. Log10(10^5) = Log10(10000): returns 5.000000

Index

+ diff --git a/_release/help/commands/2d_commands/LoopSound.htm b/_release/help/commands/2d_commands/LoopSound.htm new file mode 100644 index 0000000..30fc223 --- /dev/null +++ b/_release/help/commands/2d_commands/LoopSound.htm @@ -0,0 +1,17 @@ +Command: LoopSound   LoopSound sound_variable  

Definition:

Sets up a previously loaded sound to play in a constant loop once the sound is played.

Parameter Description:


sound_variable = variable previously assigned with a LoadSound command.
+

Command Description:

This command sets up play back a sound file (.WAV or .MP3) in an endless loop (like for background music). You must load a variable with a sound file using the LoadSound command. Use a Global variable to ensure your sound loop can be played from anywhere in your program. + +Note: This command doesn't actually PLAY the sound loop, just sets it up for looping. You still need to execute the PlaySound command to hear the sound.

Example:

; Assign a global variable for the sound loop
+Global sndMusicLoop
+
+; Load the sound loop file into memory
+
+sndMusicLoop=LoadSound("sounds/loop1.wav")
+
+; Set the sound loop
+
+LoopSound sndMusicLoop
+
+PlaySound sndMusicLoop
+

Index

+ diff --git a/_release/help/commands/2d_commands/Lower.htm b/_release/help/commands/2d_commands/Lower.htm new file mode 100644 index 0000000..4b911e1 --- /dev/null +++ b/_release/help/commands/2d_commands/Lower.htm @@ -0,0 +1,5 @@ +Command: Lower$   Lower$ (string$)  

Definition:

Convert a string to all lower case.

Parameter Description:


string$ = any valid string variable

Command Description:

This will take a string and convert it all to lower case letters. Pretty straight forward.

Example:

name$="ShAnE MoNrOe"
+Print "The original name is: " + name$
+Print "In lower case it is: " + Lower$(name$)
+

Index

+ diff --git a/_release/help/commands/2d_commands/MaskImage.htm b/_release/help/commands/2d_commands/MaskImage.htm new file mode 100644 index 0000000..3e6ead0 --- /dev/null +++ b/_release/help/commands/2d_commands/MaskImage.htm @@ -0,0 +1,39 @@ +Command: MaskImage   MaskImage handle,red,green,blue  

Definition:

Set the image's mask or transparent color.

Parameter Description:


handle=the variable you assigned the handle to when you loaded the image.
+red=the red color value (0-255)
+green=the green color value (0-255)
+blue=the blue color value (0-255)

Command Description:

Blitz Basic assumes that when you load an image (using LoadImage or LoadAnimImage) for drawing (using DrawImage command), you want the color black (RGB color 0,0,0) on your image to be transparent (or see through). There WILL come a time when you want some other color to be that masked color. This command will let you set that mask color using the color's RGB values (I use Paint Shop Pro to determing the Red, Green, and Blue values). The example is a bit bloated for other commands, but I'm pretty sure you'll understand.

Example:

; LoadAnimImage/MaskImage Example
+; With animation timers
+
+; Even though we don't have any functions, let's do variables global
+; One variable will hold the handle for the graphic, one will hold the
+; current frame we are displaying, and one will hold the milliseconds
+; timer so we can adjust the animation speed.
+Global gfxSparks, frmSparks, tmrSparks
+
+; Standard graphic declaration and double buffering setup
+Graphics 640,480,16
+SetBuffer BackBuffer()
+
+; Load the imagestrip up and denote the frames 32x32 - for a total of 3 frames
+gfxSparks=LoadAnimImage("c:\Program Files\BlitzBasic\samples\Graphics\spark.bmp",32,32,0,3)
+
+; We mask the image's color pink to be the 'transparent' color - look at the
+; image in your favorite editor to see more why we use masking.
+MaskImage gfxSparks,255,0,255
+
+; Loop until ESC
+While Not KeyHit(1)
+Cls ; Standard clear screen
+
+; The next statment checks to see if 100 milliseconds has passes since we
+; last changed frames. Change the 100 to higher and lower values to
+; make the animation faster or slower.
+If MilliSecs() > tmrSparks + 100 Then
+tmrSparks=MilliSecs() ; 'reset' the timer
+frmSparks=( frmSparks + 1 ) Mod 3 ; increment the frame, flip to 0 if we are out
+End If
+DrawImage gfxSparks,MouseX(),MouseY(),frmSparks ; draw the image
+Flip ; show the buffer
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/Mid.htm b/_release/help/commands/2d_commands/Mid.htm new file mode 100644 index 0000000..4889840 --- /dev/null +++ b/_release/help/commands/2d_commands/Mid.htm @@ -0,0 +1,10 @@ +Command: Mid$   Mid$ (string$, offset, characters)  

Definition:

Retrieves a certain number of characters within a string, from a particular position.

Parameter Description:


string$ = any valid string
+offset = location within the string to start reading
+characters = how many characters to read frm the offset point

Command Description:

Use this command to grab a set of characters from within a string. You can choose WHERE to start in the string, and how many characters to pick. You'll probably use this to 'decode' or 'walk through' a string to get each character out of it for conversion or validation. See the Example.

Example:

name$="Shane Monroe"
+For T = 1 To Len(name$)
+Print Mid$(name$,t,1)
+Next
+
+ +

Index

+ diff --git a/_release/help/commands/2d_commands/MidHandle .htm b/_release/help/commands/2d_commands/MidHandle .htm new file mode 100644 index 0000000..8d60ddf --- /dev/null +++ b/_release/help/commands/2d_commands/MidHandle .htm @@ -0,0 +1,54 @@ +Command: MidHandle   MidHandle image  

Definition:

Sets the image handle of the specified image to the middle of the image.

Parameter Description:


image = variable holding the file handle to the image

Command Description:

When an image is loaded with LoadImage, the image handle (the location within the image where the image is 'drawn from') is always defaulted to the top left corner (coordinates 0,0). This means if you draw an image that is 50x50 pixels at screen location 200,200, the image will begin to be drawn at 200,200 and extend to 250,250.
+
+This command moves the image handle from the 0,0 coordinate of the image to the exact middle of the image. Therefore, in the same scenario above, if you were to draw a 50x50 pixel image at screen location 200,200 with its image handle set to Mid with this command, the image would start drawing at 175,175 and extend to 225,225.
+
+You can manual set the location of the image's handle using the HandleImage command. You can retrieve an image's handle using the ImageXHandle and ImageYHandle. Finally, you can make all images automatically load with the image handle set to middle using the AutoMidHandle command.
+
+Note about the term 'handle'. There are two types of 'handles' we discuss in these documents. One is the location within an image - as discussed in this command. The other is a 'file handle', a variable used to hold an image, sound, or font loaded with a command. See LoadImage for more information about file handles.

Example:

; MidHandle/ImageXHandle()/ImageYHandle()/AutoMidHandle
+
+; Initiate Graphics Mode
+Graphics 640,480,16
+
+; Set up the image file handle as a global
+Global gfxBall
+
+; Load the image - you may need to change the location of the file
+gfxBall=LoadImage ("C:\Program Files\Blitz Basic\samples\ball.bmp")
+
+; Until the user presses ESC key ...
+While Not KeyHit(1)
+Text 0,0,"Default Image Handle for gfxBall... Press ESC ..."
+Text 0,14,"X handle-" + ImageXHandle(gfxBall) ; Print the location of the image handle x location
+Text 0,28,"Y handle-" + ImageYHandle(gfxBall) ; Print the location of the image handle y location
+DrawImage gfxBall,200,200,0 ; draw the image at 200,200
+Wend
+
+; Clear the screen
+Cls
+
+; Set the ball's handle to the center of the image
+MidHandle gfxBall
+
+; Until the user presses ESC key ... show the new information
+While Not KeyHit(1)
+Text 0,0,"New Image Handle for gfxBall... Press ESC ..."
+Text 0,14,"X handle-" + ImageXHandle(gfxBall)
+Text 0,28,"Y handle-" + ImageYHandle(gfxBall)
+DrawImage gfxBall,200,200,0
+Wend
+
+; Makes all images load up with their handles in the center of the image
+AutoMidHandle True
+Cls
+
+; Load the image again
+gfxBall=LoadImage ("C:\Program Files\Blitz Basic\samples\ball.bmp")
+
+; Until the user presses ESC key ... show the new information
+While Not KeyHit(1)
+Text 0,0,"Automatic image handle of gfxBall... Press ESC ..."
+Text 0,14,"X handle-" + ImageXHandle(gfxBall)
+Text 0,28,"Y handle-" + ImageYHandle(gfxBall)
+DrawImage gfxBall,200,200,0
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/Millisecs.htm b/_release/help/commands/2d_commands/Millisecs.htm new file mode 100644 index 0000000..4937ccd --- /dev/null +++ b/_release/help/commands/2d_commands/Millisecs.htm @@ -0,0 +1,2 @@ +Command: Millisecs()   Millisecs()   

Definition:

Return the system's timer value in milliseconds.

Parameter Description:


None

Command Description:

This command will return to you the system timer value in milliseconds.

This is incredibly useful for precision timing of events. By reading this value into a variable, and checking it against the CURRENT time in milliseconds, you can perform 'waits' or check time lapses with a high degree of accuracy. A common use of this command is to seed the random number generator with the SeedRnd command.

Example:

; This prints STILL WAITING! for three seconds then ends.
oldTime=MilliSecs()
While MilliSecs() < oldTime + 3000
Print "Still waiting!"
Wend

Index

+ diff --git a/_release/help/commands/2d_commands/Mod.htm b/_release/help/commands/2d_commands/Mod.htm new file mode 100644 index 0000000..fb0cb19 --- /dev/null +++ b/_release/help/commands/2d_commands/Mod.htm @@ -0,0 +1,6 @@ +Command: Mod   Mod   

Definition:

Returns the amount by which a number exceeds the largest integer multiple of the divisor that is not greater than that number.

Parameter Description:


None

Command Description:

Basically, this will divide your number as many times as possible by the divisor, then return you the remaining amount.

Example:

; MOD Example
+
+; Divide 10 by 3 until you reach a point that you can't +; Then print the remaining value - in this case, 1 +Print 10 MOD 3

Index

+ diff --git a/_release/help/commands/2d_commands/MouseDown.htm b/_release/help/commands/2d_commands/MouseDown.htm new file mode 100644 index 0000000..6102e9e --- /dev/null +++ b/_release/help/commands/2d_commands/MouseDown.htm @@ -0,0 +1,13 @@ +Command: MouseDown   MouseDown (button)  

Definition:

Returns TRUE if the specified mouse button is being held down.

Parameter Description:


button = 1: Left Button, 2: Right Button, 3: Middle Button

Command Description:

This command (and its counterparts KeyDown and JoyDown) is used to detect if a mouse button is being held down. You must check for each mouse button independantly with its corresponding number (unlike KeyDown which returns WHICH key is being held down). Also see MouseHit.

Example:

; MouseDown Example
+
+; Until user presses ESC, show the mouse button pressed
+While Not KeyHit(1)
+button$="No"
+If MouseDown(1) Then button$="Left"
+If MouseDown(2) Then button$="Right"
+If MouseDown(3) Then button$="Middle"
+
+Print button$ + " mouse button pressed!"
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/MouseHit.htm b/_release/help/commands/2d_commands/MouseHit.htm new file mode 100644 index 0000000..834963a --- /dev/null +++ b/_release/help/commands/2d_commands/MouseHit.htm @@ -0,0 +1,14 @@ +Command: MouseHit   MouseHit (button)  

Definition:

Returns the number of times a specified mouse button has been hit.

Parameter Description:


button = button code (1=Left, 2=Right, 3-Middle)

Command Description:

This command returns the number of times a specified mouse button has been hit since the last time you called the MouseHit() command. Also see KeyHit and JoyHit.

Example:

; MouseHit Example
+
+; Set up the timer
+current=MilliSecs()
+Print "Press left mouse button a bunch of times for five seconds..."
+
+; Wait 5 seconds
+While MilliSecs() < current+5000
+Wend
+
+; Print the results
+Print "Pressed left button " + MouseHit(1) + " times."
+

Index

+ diff --git a/_release/help/commands/2d_commands/MouseWait.htm b/_release/help/commands/2d_commands/MouseWait.htm new file mode 100644 index 0000000..675e2a7 --- /dev/null +++ b/_release/help/commands/2d_commands/MouseWait.htm @@ -0,0 +1,9 @@ +Command: MouseWait()   MouseWait()   

Definition:

Halts program execution until a mouse button is pressed and returns its button code.

Parameter Description:


None.

Command Description:

This command makes your program halt until a mouse button is pressed on the mouse. Used alone, it simply halts and waits for a button press. It can also be used to assign the pressed button's code value to a variable. See example.
+
+In MOST CASES, you are not going to want to use this command because chances are likely you are going to want things on the screen still happening while awaiting the button press. In that situation, you'll use a WHILE ... WEND awaiting a MouseHit value - refreshing your screen each loop.

Example:

; MouseWait Example
+
+Print "Press a mouse button please..."
+mseButton=MouseWait()
+Print "You pressed mouse button #" + mseButton
+

Index

+ diff --git a/_release/help/commands/2d_commands/MouseX.htm b/_release/help/commands/2d_commands/MouseX.htm new file mode 100644 index 0000000..ce69eb3 --- /dev/null +++ b/_release/help/commands/2d_commands/MouseX.htm @@ -0,0 +1,36 @@ +Command: MouseX()   MouseX()   

Definition:

Returns the mouse's X screen coordinate.

Parameter Description:


None

Command Description:

This command returns the mouse's X location on the screen. Use this with the DrawImage command to make a custom mouse pointer, or to control something directly on the screen with the mouse. Use MouseY() to get the Y coordinate.

Example:

; LoadAnimImage/MaskImage MouseX()/MouseY() Example
+; With animation timers
+
+; Even though we don't have any functions, let's do variables global
+; One variable will hold the handle for the graphic, one will hold the
+; current frame we are displaying, and one will hold the milliseconds
+; timer so we can adjust the animation speed.
+Global gfxSparks, frmSparks, tmrSparks
+
+; Standard graphic declaration and double buffering setup
+Graphics 640,480,16
+SetBuffer BackBuffer()
+
+; Load the imagestrip up and denote the frames 32x32 - for a total of 3 frames
+gfxSparks=LoadAnimImage("c:\Program Files\BlitzBasic\samples\Graphics\spark.bmp",32,32,0,3)
+
+; We mask the image's color pink to be the 'transparent' color - look at the
+; image in your favorite editor to see more why we use masking.
+MaskImage gfxSparks,255,0,255
+
+; Loop until ESC
+While Not KeyHit(1)
+Cls ; Standard clear screen
+
+; The next statment checks to see if 100 milliseconds has passes since we
+; last changed frames. Change the 100 to higher and lower values to
+; make the animation faster or slower.
+If MilliSecs() > tmrSparks + 100 Then
+tmrSparks=MilliSecs() ; 'reset' the timer
+frmSparks=( frmSparks + 1 ) Mod 3 ; increment the frame, flip to 0 if we are out
+End If
+DrawImage gfxSparks,MouseX(),MouseY(),frmSparks ; draw the image at MouseX and Y
+Flip ; show the buffer
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/MouseXSpeed.htm b/_release/help/commands/2d_commands/MouseXSpeed.htm new file mode 100644 index 0000000..9f1e33b --- /dev/null +++ b/_release/help/commands/2d_commands/MouseXSpeed.htm @@ -0,0 +1,31 @@ +Command: MouseXSpeed()   MouseXSpeed()   

Definition:

Returns the changes in the mouse location since the LAST call to the command

Parameter Description:


None.

Command Description:

Often you'd like to find the difference between where the mouse WAS to where it is NOW. You can use this command and MouseYSpeed() in pairs to find out the changes in the mouse location between calls.
+
+You really have to use these commands TWICE to get anything out of them. Each call you make returns the difference in location since the LAST time you called it.
+
+In the example, when you run it, move the mouse to a location, press left mouse button. This makes the first call. Then, move the mouse and press right mouse button. The second call will return the difference since the first call and display it for you.

Example:

; MouseXSpeed()/MouseYSpeed() examples
+
+; Set graphics mode and double buffering
+Graphics 800,600,16
+SetBuffer BackBuffer()
+
+; repeat until right mouse button is pressed
+Repeat
+Cls ; Clear screen
+Rect MouseX(),MouseY(),2,2,1 ; draw a small box where the mouse is
+; if user hits left mouse, take note of where it is and call mousexspeed/mouseyspeed
+If MouseHit(1) Then startx=MouseXSpeed():starty=MouseYSpeed()
+
+; When user hits right mouse button, record the difference between last call
+; and this call to the mousey/xspeed commands.
+If MouseHit(2) Then endx=MouseXSpeed():endy=MouseYSpeed()
+Flip ; flip screen into view
+Until endx ; end the loop when we have a value for endx
+
+; display results
+Text 0,0,"Changes in mouse coordinates: " + endx + "," + endy
+Flip ; flip changes into view
+
+; Wait for escape
+While Not KeyHit(1)
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/MouseY.htm b/_release/help/commands/2d_commands/MouseY.htm new file mode 100644 index 0000000..763f6a9 --- /dev/null +++ b/_release/help/commands/2d_commands/MouseY.htm @@ -0,0 +1,36 @@ +Command: MouseY()   MouseY()   

Definition:

Returns the mouse's Y screen coordinate.

Parameter Description:


None

Command Description:

This command returns the mouse's Y location on the screen. Use this with the DrawImage command to make a custom mouse pointer, or to control something directly on the screen with the mouse. Use MouseX() to get the X coordinate.

Example:

; LoadAnimImage/MaskImage MouseX()/MouseY() Example
+; With animation timers
+
+; Even though we don't have any functions, let's do variables global
+; One variable will hold the handle for the graphic, one will hold the
+; current frame we are displaying, and one will hold the milliseconds
+; timer so we can adjust the animation speed.
+Global gfxSparks, frmSparks, tmrSparks
+
+; Standard graphic declaration and double buffering setup
+Graphics 640,480,16
+SetBuffer BackBuffer()
+
+; Load the imagestrip up and denote the frames 32x32 - for a total of 3 frames
+gfxSparks=LoadAnimImage("c:\Program Files\BlitzBasic\samples\Graphics\spark.bmp",32,32,0,3)
+
+; We mask the image's color pink to be the 'transparent' color - look at the
+; image in your favorite editor to see more why we use masking.
+MaskImage gfxSparks,255,0,255
+
+; Loop until ESC
+While Not KeyHit(1)
+Cls ; Standard clear screen
+
+; The next statment checks to see if 100 milliseconds has passes since we
+; last changed frames. Change the 100 to higher and lower values to
+; make the animation faster or slower.
+If MilliSecs() > tmrSparks + 100 Then
+tmrSparks=MilliSecs() ; 'reset' the timer
+frmSparks=( frmSparks + 1 ) Mod 3 ; increment the frame, flip to 0 if we are out
+End If
+DrawImage gfxSparks,MouseX(),MouseY(),frmSparks ; draw the image at MouseX and Y
+Flip ; show the buffer
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/MouseYSpeed.htm b/_release/help/commands/2d_commands/MouseYSpeed.htm new file mode 100644 index 0000000..fdc9ddb --- /dev/null +++ b/_release/help/commands/2d_commands/MouseYSpeed.htm @@ -0,0 +1,31 @@ +Command: MouseYSpeed()   MouseYSpeed()   

Definition:

Returns the changes in the mouse location since the LAST call to the command.

Parameter Description:


None.

Command Description:

Often you'd like to find the difference between where the mouse WAS to where it is NOW. You can use this command and MouseXSpeed() in pairs to find out the changes in the mouse location between calls.
+
+You really have to use these commands TWICE to get anything out of them. Each call you make returns the difference in location since the LAST time you called it.
+
+In the example, when you run it, move the mouse to a location, press left mouse button. This makes the first call. Then, move the mouse and press right mouse button. The second call will return the difference since the first call and display it for you.

Example:

; MouseXSpeed()/MouseYSpeed() examples
+
+; Set graphics mode and double buffering
+Graphics 800,600,16
+SetBuffer BackBuffer()
+
+; repeat until right mouse button is pressed
+Repeat
+Cls ; Clear screen
+Rect MouseX(),MouseY(),2,2,1 ; draw a small box where the mouse is
+; if user hits left mouse, take note of where it is and call mousexspeed/mouseyspeed
+If MouseHit(1) Then startx=MouseXSpeed():starty=MouseYSpeed()
+
+; When user hits right mouse button, record the difference between last call
+; and this call to the mousey/xspeed commands.
+If MouseHit(2) Then endx=MouseXSpeed():endy=MouseYSpeed()
+Flip ; flip screen into view
+Until endx ; end the loop when we have a value for endx
+
+; display results
+Text 0,0,"Changes in mouse coordinates: " + endx + "," + endy
+Flip ; flip changes into view
+
+; Wait for escape
+While Not KeyHit(1)
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/MouseZ.htm b/_release/help/commands/2d_commands/MouseZ.htm new file mode 100644 index 0000000..fd6962d --- /dev/null +++ b/_release/help/commands/2d_commands/MouseZ.htm @@ -0,0 +1,46 @@ + + +Command: MouseZ + + + + + + +

  MouseZ  

+ +

+Parameters:
+

+ + + + +
n/a
+

Description:
+
+ + + + +
MouseZ returns the current position of the mousewheel on a suitable mouse. It starts off at zero when your program begins. The value of MouseZ increases as you move the wheel away from you and decreases as you move it towards you.
+

Example:
+
+ + + + + +
+Graphics 640, 480, 0, 2
+
+SetBuffer BackBuffer ()
+
+Repeat
+Text 20, 20, "Mouse wheel position: " + MouseZ ()
+Until KeyHit (1)
+
+End
+
+ + diff --git a/_release/help/commands/2d_commands/MouseZSpeed.htm b/_release/help/commands/2d_commands/MouseZSpeed.htm new file mode 100644 index 0000000..e674702 --- /dev/null +++ b/_release/help/commands/2d_commands/MouseZSpeed.htm @@ -0,0 +1,60 @@ + + +Command: MouseZSpeed + + + + + + +

  MouseZSpeed  

+ +

+Parameters:
+

+ + + + +
n/a
+

Description:
+
+ + + + +
MouseZSpeed returns -1 if the mousewheel on a suitable mouse is being rolled backwards (towards user), 0 if it is not being moved, and 1 if it is being rolled forwards.
+

Example:
+
+ + + + + +
+Graphics 640, 480, 0, 2
+SetBuffer BackBuffer ()
+
+Repeat
+
+ Cls
+
+ Select MouseZSpeed ()
+ Case -1
+ result$ = "Backwards"
+ Case 0
+ ; result$ = "No movement"
+ Case 1
+ result$ = "Forwards"
+ End Select
+
+ Text 20, 10, "NOTE: MouseZSpeed () = 0 is not listed here, to avoid confusion!"
+ Text 20, 40, result$
+ Flip
+
+Until KeyHit (1)
+
+End
+
+ + diff --git a/_release/help/commands/2d_commands/MoveMouse.htm b/_release/help/commands/2d_commands/MoveMouse.htm new file mode 100644 index 0000000..874e513 --- /dev/null +++ b/_release/help/commands/2d_commands/MoveMouse.htm @@ -0,0 +1,15 @@ +Command: MoveMouse   MoveMouse x,y  

Definition:

Moves the mouse pointer to a designated location on the screen.

Parameter Description:


x = the x coordinate on the screen to move the mouse
+y = the y coordinate on the screen to move the mouse

Command Description:

Although the mouse isn't visible on the screen, the mouse location is still being tracked and you can attach a graphic to it. However, there are times when you want to put the pointer to a specific location on the screen. Use this command to move the mouse to a designated location.

Example:

; MoveMouse Example
+
+Graphics 640,480
+For t = 1 To 2
+Print "Move the mouse around and push the left button."
+WaitMouse()
+Print "The mouse is currently located at: " + MouseX() + "," + MouseY() + "."
+Next
+Print "Now I'll move the mouse ..."
+MoveMouse 320,320
+Print "The mouse is NOW located at: " + MouseX() + "," + MouseY() + "."
+Print "Click mouse button to quit."
+WaitMouse()

Index

+ diff --git a/_release/help/commands/2d_commands/NetMsgData.htm b/_release/help/commands/2d_commands/NetMsgData.htm new file mode 100644 index 0000000..99891a8 --- /dev/null +++ b/_release/help/commands/2d_commands/NetMsgData.htm @@ -0,0 +1,48 @@ +Command: NetMsgData$()   NetMsgData$()   

Definition:

Returns the actual message of a network message.

Parameter Description:


None.

Command Description:

First off, this ONLY works when you have joined a network game via StartNetGame or JoinNetGame and you have created a player via CreateNetPlayer (you must create a player, even if it is just to lurk). You must've received the message already, determined by the RecvNetMsg() command - and probably determined the type of message with (NetMsgType().
+
+The string value returned from this command is the actual message text that was sent.
+
+You will use NetMsgType(), NetMsgFrom(), and NetMsgTo() to get other important information from the message and act on it.
+
+The example requires that you run it on a remote machine while the local computer runs the example in the SendNetMsg command.

Example:

; NetMsgData$() example
+; --------------------
+; Run this program on the REMOTE computer to 'watch'
+; the activity of the SendNetMsg example. Run that
+; example on local machine.
+;
+; This program will tell you when a player involved in
+; the game hits a wall ...
+
+; We'll use this instead of JoinHostGame - make it easier
+StartNetGame()
+
+; Create a player - a player must be created to
+; receive mesages!
+playerID=CreateNetPlayer("Shane")
+
+; Loop and get status
+While Not KeyHit(1)
+
+; Check to see if we've received a message
+If RecvNetMsg() Then
+
+; if we did, let's figure out what type it is
+; we know it will be a user message, though
+msgType=NetMsgType()
+
+ ; 1-99 means a user message
+ If msgType>0 And msgType<100 Then
+
+ ; Let's see who the message was from
+ msgFrom=NetMsgFrom()
+
+ ; Let's get the message!
+ msgData$=NetMsgData$()
+
+ ; Print the message
+ Print msgData$
+ Print "(Message was to:"+ NetMsgTo() + ")"
+ End If
+End If
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/NetMsgFrom().htm b/_release/help/commands/2d_commands/NetMsgFrom().htm new file mode 100644 index 0000000..824b4f7 --- /dev/null +++ b/_release/help/commands/2d_commands/NetMsgFrom().htm @@ -0,0 +1,47 @@ +Command: NetMsgFrom()   NetMsgFrom()   

Definition:

Returns the sender's ID of a network message.

Parameter Description:


None.

Command Description:

First off, this ONLY works when you have joined a network game via StartNetGame or JoinNetGame and you have created a player via CreateNetPlayer (you must create a player, even if it is just to lurk). You must've received the message already, determined by the RecvNetMsg() command - and probably determined the type of message with (NetMsgType().
+
+The value returned from this command denotes the sender's ID number assigned to them when they were created with CreateNetPlayer command. Use this to perform actions on the player on the local machine.
+
+You will use NetMsgType(), NetMsgTo(), and NetMsgData$() to get other important information from the message and act on it.
+
+The example requires that you run it on a remote machine while the local computer runs the example in the SendNetMsg command.

Example:

; NetMsgFrom() example
+; --------------------
+; Run this program on the REMOTE computer to 'watch'
+; the activity of the SendNetMsg example. Run that
+; example on local machine.
+;
+; This program will tell you when a player involved in
+; the game hits a wall ...
+
+; We'll use this instead of JoinHostGame - make it easier
+StartNetGame()
+
+; Create a player - a player must be created to
+; receive mesages!
+playerID=CreateNetPlayer("Shane")
+
+; Loop and get status
+While Not KeyHit(1)
+
+; Check to see if we've received a message
+If RecvNetMsg() Then
+
+; if we did, let's figure out what type it is
+; we know it will be a user message, though
+msgType=NetMsgType()
+
+ ; 1-99 means a user message
+ If msgType>0 And msgType<100 Then
+
+ ; Let's see who the message was from
+ msgFrom=NetMsgFrom()
+
+ ; Let's get the message!
+ msgData$=NetMsgData$()
+
+ ; Print the message
+ Print msgData$
+ End If
+End If
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/NetMsgTo().htm b/_release/help/commands/2d_commands/NetMsgTo().htm new file mode 100644 index 0000000..ecae38e --- /dev/null +++ b/_release/help/commands/2d_commands/NetMsgTo().htm @@ -0,0 +1,48 @@ +Command: NetMsgTo()   NetMsgTo()   

Definition:

Returns the ID of the recipient of a network message.

Parameter Description:


None.

Command Description:

First off, this ONLY works when you have joined a network game via StartNetGame or JoinNetGame and you have created a player via CreateNetPlayer (you must create a player, even if it is just to lurk). You must've received the message already, determined by the RecvNetMsg() command - and probably determined the type of message with (NetMsgType().
+
+The value returned from this command denotes the messages's intended recipient's ID number assigned to them when they were created with CreateNetPlayer.
+
+You will use NetMsgType(), NetMsgFrom(), and NetMsgData$() to get other important information from the message and act on it.
+
+The example requires that you run it on a remote machine while the local computer runs the example in the SendNetMsg command.

Example:

; NetMsgTo() example
+; --------------------
+; Run this program on the REMOTE computer to 'watch'
+; the activity of the SendNetMsg example. Run that
+; example on local machine.
+;
+; This program will tell you when a player involved in
+; the game hits a wall ...
+
+; We'll use this instead of JoinHostGame - make it easier
+StartNetGame()
+
+; Create a player - a player must be created to
+; receive mesages!
+playerID=CreateNetPlayer("Shane")
+
+; Loop and get status
+While Not KeyHit(1)
+
+; Check to see if we've received a message
+If RecvNetMsg() Then
+
+; if we did, let's figure out what type it is
+; we know it will be a user message, though
+msgType=NetMsgType()
+
+ ; 1-99 means a user message
+ If msgType>0 And msgType<100 Then
+
+ ; Let's see who the message was from
+ msgFrom=NetMsgFrom()
+
+ ; Let's get the message!
+ msgData$=NetMsgData$()
+
+ ; Print the message
+ Print msgData$
+ Print "(Message was to:"+ NetMsgTo() + ")"
+ End If
+End If
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/NetMsgType().htm b/_release/help/commands/2d_commands/NetMsgType().htm new file mode 100644 index 0000000..d2edc87 --- /dev/null +++ b/_release/help/commands/2d_commands/NetMsgType().htm @@ -0,0 +1,49 @@ +Command: NetMsgType()   NetMsgType()   

Definition:

Returns the type of message receieved during a network game.

Parameter Description:


None.

Command Description:

First off, this ONLY works when you have joined a network game via StartNetGame or JoinNetGame and you have created a player via CreateNetPlayer (you must create a player, even if it is just to lurk). You must've received the message already, determined by the RecvNetMsg() command.
+
+The value returned from this command denotes the message; 1-99 means it is a user message, 100 means a new player has joined the game, 101 means a player has been deleted from the network game (NetMsgFrom() returns the player deleted), 102 means the original host has left the game and THIS machine is now the new host.
+
+If you receive a 200, this means a fatal exception has occurred and you need to exit the game.
+
+You will use NetMsgFrom, NetMsgTo, and NetMsgData$ to get the important information from the message and act on it.
+
+The example requires that you run it on a remote machine while the local computer runs the example in the SendNetMsg command.

Example:

; NetMsgType() example
+; --------------------
+; Run this program on the REMOTE computer to 'watch'
+; the activity of the SendNetMsg example. Run that
+; example on local machine.
+;
+; This program will tell you when a player involved in
+; the game hits a wall ...
+
+; We'll use this instead of JoinHostGame - make it easier
+StartNetGame()
+
+; Create a player - a player must be created to
+; receive mesages!
+playerID=CreateNetPlayer("Shane")
+
+; Loop and get status
+While Not KeyHit(1)
+
+; Check to see if we've received a message
+If RecvNetMsg() Then
+
+; if we did, let's figure out what type it is
+; we know it will be a user message, though
+msgType=NetMsgType()
+
+ ; 1-99 means a user message
+ If msgType>0 And msgType<100 Then
+
+ ; Let's see who the message was from
+ msgFrom=NetMsgFrom()
+
+ ; Let's get the message!
+ msgData$=NetMsgData$()
+
+ ; Print the message
+ Print msgData$
+ End If
+End If
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/NetPlayerLocal.htm b/_release/help/commands/2d_commands/NetPlayerLocal.htm new file mode 100644 index 0000000..cb877fc --- /dev/null +++ b/_release/help/commands/2d_commands/NetPlayerLocal.htm @@ -0,0 +1,51 @@ +Command: NetPlayerLocal   NetPlayerLocal (playerID)  

Definition:

Determines if the player is on the local machine.

Parameter Description:


playerID = a valid player ID number (get from the NetMsgFrom() command)

Command Description:

First off, this ONLY works when you have joined a network game via StartNetGame or JoinNetGame and you have created a player via CreateNetPlayer (you must create a player, even if it is just to lurk).
+
+Use this command in conjunction with the NetMsgFrom() (to get the player's ID) command to check and see if the player in question is on the local machine (as opposed to a remote machine). You may wish to act differently in your program based on whether the message that came in was from a local or remote machine.
+
+You will use NetMsgType(), NetMsgFrom(), and NetMsgTo() to get other important information from the message and act on it.
+
+The example requires that you run it on a remote machine while the local computer runs the example in the SendNetMsg command.

Example:

; NetPlayerLocal example
+; --------------------
+; Run this program on the REMOTE computer to 'watch'
+; the activity of the SendNetMsg example. Run that
+; example on local machine.
+;
+; This program will tell you when a player involved in
+; the game hits a wall ...
+
+; We'll use this instead of JoinHostGame - make it easier
+StartNetGame()
+
+; Create a player - a player must be created to
+; receive mesages!
+playerID=CreateNetPlayer("Shane")
+
+; Loop and get status
+While Not KeyHit(1)
+
+; Check to see if we've received a message
+If RecvNetMsg() Then
+
+; if we did, let's figure out what type it is
+; we know it will be a user message, though
+msgType=NetMsgType()
+
+ ; 1-99 means a user message
+ If msgType>0 And msgType<100 Then
+
+ ; Let's see who the message was from
+ msgFrom=NetMsgFrom()
+
+ ; Let's get the message!
+ msgData$=NetMsgData$()
+
+ ; Print the message
+ Print msgData$
+if NetPlayerLocal(NetMsgFrom()) then
+print "(This was sent from a local player)"
+end if
+ + End If
+End If
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/NetPlayerName.htm b/_release/help/commands/2d_commands/NetPlayerName.htm new file mode 100644 index 0000000..d662ac1 --- /dev/null +++ b/_release/help/commands/2d_commands/NetPlayerName.htm @@ -0,0 +1,48 @@ +Command: NetPlayerName$   NetPlayerName$ (playerID)  

Definition:

Returns the actual name of the player in a network game.

Parameter Description:


playerID = a valid player ID number (get from the NetMsgFrom() command

Command Description:

First off, this ONLY works when you have joined a network game via StartNetGame or JoinNetGame and you have created a player via CreateNetPlayer (you must create a player, even if it is just to lurk).
+
+Use this command in conjunction with the NetMsgFrom() (to get the player's ID) command to derive the actual name of the player. This command returns a string value.
+
+You will use NetMsgType(), NetMsgFrom(), and NetMsgTo() to get other important information from the message and act on it.
+
+The example requires that you run it on a remote machine while the local computer runs the example in the SendNetMsg command.

Example:

; NetPlayerName$() example
+; --------------------
+; Run this program on the REMOTE computer to 'watch'
+; the activity of the SendNetMsg example. Run that
+; example on local machine.
+;
+; This program will tell you when a player involved in
+; the game hits a wall ...
+
+; We'll use this instead of JoinHostGame - make it easier
+StartNetGame()
+
+; Create a player - a player must be created to
+; receive mesages!
+playerID=CreateNetPlayer("Shane")
+
+; Loop and get status
+While Not KeyHit(1)
+
+; Check to see if we've received a message
+If RecvNetMsg() Then
+
+; if we did, let's figure out what type it is
+; we know it will be a user message, though
+msgType=NetMsgType()
+
+ ; 1-99 means a user message
+ If msgType>0 And msgType<100 Then
+
+ ; Let's see who the message was from
+ msgFrom=NetMsgFrom()
+
+ ; Let's get the message!
+ msgData$=NetMsgData$()
+
+ ; Print the message
+ Print msgData$
+ Print "(Message was from:"+ NetPlayerName$(NetMsgFrom()) + ")"
+ End If
+End If
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/New.htm b/_release/help/commands/2d_commands/New.htm new file mode 100644 index 0000000..54e2e3c --- /dev/null +++ b/_release/help/commands/2d_commands/New.htm @@ -0,0 +1,22 @@ +Command: New   New type_variable  

Definition:

Create a new TYPE object in the Type collection.

Parameter Description:


type_variable = the actual Type name, not the custom Type name

Command Description:

If you aren't familiar with the TYPE command, please refer to that before reading about this command.
+
+Creates a NEW object in a Type collection. Each call to this command automatically inserts a new object into the specified Type collection. Check the example and other Type commands for more information.

Example:

; Define the CHAIR Type
+
+Type CHAIR
+Field X
+Field Y
+Field HEIGHT
+End Type
+
+; Create 100 new chairs using FOR ... NEXT using the collection name of ROOM
+
+For tempx = 1 to 10
+For tempy = 1 to 10
+room.chair = New Chair
+room\x = tempx
+room\y = tempy
+room\height = Rnd(0,10) ; set a random height 0 to 10
+Next
+Next
+

Index

+ diff --git a/_release/help/commands/2d_commands/Next.htm b/_release/help/commands/2d_commands/Next.htm new file mode 100644 index 0000000..3b12a53 --- /dev/null +++ b/_release/help/commands/2d_commands/Next.htm @@ -0,0 +1,2 @@ +Command: Next   Next   

Definition:

The closing command of a FOR ... NEXT loop.

Parameter Description:


None

Command Description:

This command closes the FOR ... NEXT loop, causing program execution to start again at the FOR command unless the loop condition has been met (the last value has been met). Check the example for more info. Note: Do NOT use the FOR command's variable as a parameter (i.e. NEXT T) as you would in most BASIC languages. Blitz will automatically match it with the nearest FOR command.

Example:

; Print the values 1 through 10
For t = 1 To 10
Print t
Next
; Print the values 1,3,5,7,9
For t = 1 To 10 Step 2
Print t
Next

Index

+ diff --git a/_release/help/commands/2d_commands/NextFile.htm b/_release/help/commands/2d_commands/NextFile.htm new file mode 100644 index 0000000..1c135d4 --- /dev/null +++ b/_release/help/commands/2d_commands/NextFile.htm @@ -0,0 +1,31 @@ +Command: NextFile$   NextFile$ (filehandle)  

Definition:

Retrieves the next file/folder from a directory opened with the ReadDir command.

Parameter Description:


filehandle = valid filehandle assigned from the ReadDir command

Command Description:

This command will return the NEXT file or folder from the currently open directory (use ReadDir to open the desired folder for reading). This will return a string containing the folder name or the filename plus extention. Use FILETYPE to determine if it is a file or folder. See ReadDir and CloseDir for more. You cannot move 'backwards' through a directory, only forward. You might want to parse the contents of a directory into an array for display, processing, etc.

Example:

; ReadDir/NextFile$/CloseDir example
+
+; Define what folder to start with ...
+folder$="C:\"
+
+; Open up the directory, and assign the handle to myDir
+myDir=ReadDir(folder$)
+
+; Let's loop forever until we run out of files/folders to list!
+Repeat
+; Assign the next entry in the folder to file$
+file$=NextFile$(myDir)
+
+; If there isn't another one, let's exit this loop
+If file$="" Then Exit
+
+; Use FileType to determine if it is a folder (value 2) or a file and print results
+If FileType(folder$+"\"+file$) = 2 Then
+Print "Folder:" + file$
+Else
+Print "File:" + file$
+End If
+Forever
+
+; Properly close the open folder
+CloseDir myDir
+
+; We're done!
+Print "Done listing files!"
+

Index

+ diff --git a/_release/help/commands/2d_commands/Not.htm b/_release/help/commands/2d_commands/Not.htm new file mode 100644 index 0000000..addfe7d --- /dev/null +++ b/_release/help/commands/2d_commands/Not.htm @@ -0,0 +1,8 @@ +Command: Not   Not   

Definition:

Logical operator NOT to test a condition to be false.

Parameter Description:


None.

Command Description:

The NOT operator is used to determine if a condition is FALSE instead of TRUE. This is frequently used in WHILE loops and IF statements to check for the NON-EXISTANCE of an event or value. We use NOT frequently in our examples, inside WHILE loops to test if the ESC key has been pressed.

Example:

; NOT example
+
+; Loop until they press ESC
+While Not KeyHit(1) ; As long as ESC isn't pressed ...
+Print "Press ESC to quit!"
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/Null.htm b/_release/help/commands/2d_commands/Null.htm new file mode 100644 index 0000000..72f6b92 --- /dev/null +++ b/_release/help/commands/2d_commands/Null.htm @@ -0,0 +1,8 @@ +Command: Null   Null   

Definition:

Indicates a null or empty value.

Parameter Description:


None

Command Description:

Designates a null value. Useful for erasing a variable or testing if a variable has a value at all.

Example:

; Null example
+
+strHello$="Hello"
+
+Print strHello$
+
+strHello$=Null

Index

+ diff --git a/_release/help/commands/2d_commands/OpenFile.htm b/_release/help/commands/2d_commands/OpenFile.htm new file mode 100644 index 0000000..8498a33 --- /dev/null +++ b/_release/help/commands/2d_commands/OpenFile.htm @@ -0,0 +1,49 @@ +Command: OpenFile   OpenFile (filename$)  

Definition:

Opens a file on disk for both reading and writing operations i.e. for update.

Parameter Description:


filename$ = any valid path and filename. The returned value is the filehandle which is used by other file handling +commands.

Command Description:

This command opens the designated file and prepares it to be updated. The file must exists since this function will not create a new file.
+
+By using FilePos and SeekFile the position within the file that is being read or written can be determined and also changed. This allows a file to be read and updated without having to make a new copy of the file or working +through the whole file sequentially. This could be useful if you have created a database file and you want to find and update just a few records within it.
+
+The file handle that is returned is an integer value that the operating system uses to identify which file is to be read and written to and must be passed to the functions such as ReadInt() and WriteInt().
+
+Note extreme care needs to be exercised when updating files that contain strings since these are not fixed in length.
+See also:
+ReadByte, ReadShort, ReadInt, ReadFloat, ReadString$, ReadLine$, WriteByte, WriteShort, WriteInt, WriteFloat, WriteShort, WriteString, WriteLine, ReadFile, WriteFile, OpenFile, CloseFile, Eof, FileType, FilePos, SeekFile

Example:

; Changing part of a file using OpenFile, SeekFile and WriteInt
+
+; Open/create a file to Write
+fileout = WriteFile("mydata.dat")
+
+; Write the information to the file
+WriteInt( fileout, 1 )
+WriteInt( fileout, 2 )
+WriteInt( fileout, 3 )
+WriteInt( fileout, 4 )
+WriteInt( fileout, 5 )
+
+; Close the file
+CloseFile( fileout )
+
+DisplayFile( "The file as originally written", mydata.dat" )
+; Open the file and change the Third Integer
+
+file = OpenFile("mydata.dat")
+SeekFile( file, 8 ) ; Move to the third integer in the file
+WriteInt( file, 9999 ) ; Replace the original value with 9999
+CloseFile( file )
+
+DisplayFile( "The file after being midified", "mydata.dat" )
+WaitKey()
+; **** Function Definitions follow ****
+
+; Read the file and print it
+Function DisplayFile( Tittle$, Filename$ )
+ Print tittle$
+ filein = ReadFile( Filename$ )
+ While Not Eof( filein )
+ Number = ReadInt( filein )
+ Print Number
+ Wend
+ CloseFile( filein )
+ Print
+End Function

Index

+ diff --git a/_release/help/commands/2d_commands/OpenTCPStream.htm b/_release/help/commands/2d_commands/OpenTCPStream.htm new file mode 100644 index 0000000..530203a --- /dev/null +++ b/_release/help/commands/2d_commands/OpenTCPStream.htm @@ -0,0 +1,32 @@ +Command: OpenTCPStream   OpenTCPStream (ip$,port)  

Definition:

Opens a client TCP stream to the specified server.

Parameter Description:


ip$=Address of stream
+port=TCP/IP Port Number

Command Description:

Use this command to open up a TCP/IP stream to the designated server and port. If the open command was successful, the command returns a stream handle. Otherwise it returns 0.
+
+You can use this for a multitude of different 'internet' options. Obviously to contact a TCP/IP host outside your own network, you'll need to be connected to the Internet.
+
+The IP address can be in the form of 1.2.3.4 or "www.domain.com".

Example:

; OpenTCPStream/CloseTCPStream Example
+
+Print "Connecting..."
+tcp=OpenTCPStream( "www.blitzbasement.com",80 )
+
+If Not tcp Print "Failed.":WaitKey:End
+
+Print "Connected! Sending request..."
+
+WriteLine tcp,"GET http://www.blitzbasement.com HTTP/1.0"
+WriteLine tcp,Chr$(10)
+
+If Eof(tcp) Print "Failed.":WaitKey:End
+
+Print "Request sent! Waiting for reply..."
+
+While Not Eof(tcp)
+ Print ReadLine$( tcp )
+Wend
+
+If Eof(tcp)=1 Then Print "Success!" Else Print "Error!"
+
+CloseTCPStream tcp
+
+WaitKey
+End

Index

+ diff --git a/_release/help/commands/2d_commands/Or.htm b/_release/help/commands/2d_commands/Or.htm new file mode 100644 index 0000000..60b8d9d --- /dev/null +++ b/_release/help/commands/2d_commands/Or.htm @@ -0,0 +1,10 @@ +Command: Or   Or   

Definition:

Conjunction between two values to derive a boolean value.

Parameter Description:


None

Command Description:

A logical expression to return a boolean TRUE or FALSE comparison of expressions or values. Use this to check two expressions or more and act upon its return value. See the example.

Example:

; OR Example
+
+myNum1=Rnd(0,10)
+myNum2=Rnd(0,10)
+
+If myNum1 = 0 OR myNum2 = 0 then
+print "One of my numbers is a Zero"
+end if
+

Index

+ diff --git a/_release/help/commands/2d_commands/Origin.htm b/_release/help/commands/2d_commands/Origin.htm new file mode 100644 index 0000000..63d4446 --- /dev/null +++ b/_release/help/commands/2d_commands/Origin.htm @@ -0,0 +1,14 @@ +Command: Origin   Origin x,y  

Definition:

Allows you to offset all drawing commands from a designated location.

Parameter Description:


x = x offset value
+y = y offset value

Command Description:

This command sets a point of origin for all subsequent drawing commands. This can be positive or negative.

Example:

; Origin example
+Graphics 800,600,16
+
+; Offset drawing options with origin command -200 in each direction
+Origin -200,-200
+
+; Wait for ESC to hit
+While Not KeyHit(1)
+
+; Draw an oval - SHOULD be at the exact center, but it isn't!
+Oval 400,300,50,50,1
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/Oval.htm b/_release/help/commands/2d_commands/Oval.htm new file mode 100644 index 0000000..bc33993 --- /dev/null +++ b/_release/help/commands/2d_commands/Oval.htm @@ -0,0 +1,15 @@ +Command: Oval   Oval x,y,width,height[,solid]  

Definition:

Draws an oval at the designated location on the screen.

Parameter Description:


x = x coordinate on the screen to draw the oval
+y = y coordinate on the screen to draw the oval
+width = how wide to make the oval
+height = how high to make the oval
+[solid] = 1 to make the oval solid

Command Description:

Use this to draw an oval shape at the screen coordinates of your choice. You can make the oval solid or hollow.

Example:

; Oval example
+Graphics 800,600,16
+
+; Wait for ESC to hit
+While Not KeyHit(1)
+; Set a random color
+Color Rnd(255),Rnd(255),Rnd(255)
+; Draw a random oval
+Oval Rnd(800),Rnd(600),Rnd(100),Rnd(100),Rnd(0,1)
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/PauseChannel.htm b/_release/help/commands/2d_commands/PauseChannel.htm new file mode 100644 index 0000000..bb8ccd7 --- /dev/null +++ b/_release/help/commands/2d_commands/PauseChannel.htm @@ -0,0 +1,42 @@ +Command: PauseChannel   PauseChannel channel_handle  

Definition:

Pauses the playing of a sound channel.

Parameter Description:


channel_handle = variable assigned to the channel when played +

Command Description:

When you are playing a sound channel, there may come a time you wish to pause the sound for whatever reason (like to play another sound effect). This command does this - and the channel can be resumed with the ResumeChannel command. You can use StopChannel to actually halt the sound. This works with any channel playback (WAV, MP3, MIDI, etc.).

Example:

; Channel examples
+
+Print "Loading sound ..."
+; Load the sample - you'll need to point this to a sound on your computer
+; For best results, make it about 5-10 seconds...
+sndWave=LoadSound("level1.wav")
+; Prepare the sound for looping
+LoopSound sndWave
+
+chnWave=PlaySound(sndWave)
+
+Print "Playing sound for 2 seconds ..."
+Delay 2000
+
+Print "Pausing sound for 2 seconds ..."
+PauseChannel chnWave
+Delay 2000
+
+Print "Restarting sound ..."
+ResumeChannel chnWave
+Delay 2000
+
+Print "Changing Pitch of sound ..."
+;StopChannel chnWave
+ChannelPitch chnWave, 22000
+Delay 2000
+
+Print "Playing new pitched sound ..."
+Delay 2000
+
+Print "Left speaker only"
+ChannelPan chnWave,-1
+Delay 2000
+
+Print "Right speaker only"
+ChannelPan chnWave,1
+Delay 2000
+
+Print "All done!"
+StopChannel chnWave

Index

+ diff --git a/_release/help/commands/2d_commands/PeekByte.htm b/_release/help/commands/2d_commands/PeekByte.htm new file mode 100644 index 0000000..dcd11cb --- /dev/null +++ b/_release/help/commands/2d_commands/PeekByte.htm @@ -0,0 +1,22 @@ +Command: PeekByte   PeekByte bank,offset  

Definition:

Reads a byte from a memory bank.

Parameter Description:


bank = variable containing handle to valid bank
+offset = offset in bytes to read the value
+

Command Description:

This command reads a byte type value from a memory bank created with the CreateBank command. Also see PokeInt, PokeFloat, PokeByte, and PokeShort. To retrieve from a memory bank, use PeekInt, PeekFloat, and PeekShort.

Example:

; Bank Commands Example
+
+bnkTest=CreateBank(500)
+
+For t = 1 To 50
+PokeByte bnkTest,t,Rnd(255)
+PokeInt bnkTest,t+1,Rnd(10000)
+PokeShort bnkTest,t+2,Rnd(10000)
+PokeFloat bnkTest,t+3,Rnd(-.999,.999)
+Next
+
+For t = 1 To 50
+Print PeekByte (bnkTest,t)
+Print PeekInt (bnkTest,t+1)
+Print PeekShort (bnkTest,t+2)
+Print PeekFloat (bnkTest,t+3)
+Next
+
+Freebank bnkTest

Index

+ diff --git a/_release/help/commands/2d_commands/PeekFloat.htm b/_release/help/commands/2d_commands/PeekFloat.htm new file mode 100644 index 0000000..170e06f --- /dev/null +++ b/_release/help/commands/2d_commands/PeekFloat.htm @@ -0,0 +1,22 @@ +Command: PeekFloat   PeekFloat bank,offset  

Definition:

Reads a floating point value from a memory bank.

Parameter Description:


bank = variable containing handle to valid bank
+offset = offset in bytes to read the value
+

Command Description:

This command reads a floating point type value from a memory bank created with the CreateBank command. Also see PokeInt, PokeFloat, PokeByte, and PokeShort. To retrieve from a memory bank, use PeekInt, and PeekByte, and PeekShort.

Example:

; Bank Commands Example
+
+bnkTest=CreateBank(500)
+
+For t = 1 To 50
+PokeByte bnkTest,t,Rnd(255)
+PokeInt bnkTest,t+1,Rnd(10000)
+PokeShort bnkTest,t+2,Rnd(10000)
+PokeFloat bnkTest,t+3,Rnd(-.999,.999)
+Next
+
+For t = 1 To 50
+Print PeekByte (bnkTest,t)
+Print PeekInt (bnkTest,t+1)
+Print PeekShort (bnkTest,t+2)
+Print PeekFloat (bnkTest,t+3)
+Next
+
+Freebank bnkTest

Index

+ diff --git a/_release/help/commands/2d_commands/PeekInt.htm b/_release/help/commands/2d_commands/PeekInt.htm new file mode 100644 index 0000000..b3a0aba --- /dev/null +++ b/_release/help/commands/2d_commands/PeekInt.htm @@ -0,0 +1,22 @@ +Command: PeekInt   PeekInt bank,offset  

Definition:

Reads an integer value from a memory bank.

Parameter Description:


bank = variable containing handle to valid bank
+offset = offset in bytes to read the value
+

Command Description:

This command reads an integer type value from a memory bank created with the CreateBank command. Also see PokeInt, PokeFloat, PokeByte, and PokeShort. To retrieve from a memory bank, use PeekFloat, and PeekByte, and PeekShort.

Example:

; Bank Commands Example
+
+bnkTest=CreateBank(500)
+
+For t = 1 To 50
+PokeByte bnkTest,t,Rnd(255)
+PokeInt bnkTest,t+1,Rnd(10000)
+PokeShort bnkTest,t+2,Rnd(10000)
+PokeFloat bnkTest,t+3,Rnd(-.999,.999)
+Next
+
+For t = 1 To 50
+Print PeekByte (bnkTest,t)
+Print PeekInt (bnkTest,t+1)
+Print PeekShort (bnkTest,t+2)
+Print PeekFloat (bnkTest,t+3)
+Next
+
+Freebank bnkTest

Index

+ diff --git a/_release/help/commands/2d_commands/PeekShort.htm b/_release/help/commands/2d_commands/PeekShort.htm new file mode 100644 index 0000000..b99169f --- /dev/null +++ b/_release/help/commands/2d_commands/PeekShort.htm @@ -0,0 +1,22 @@ +Command: PeekShort   PeekShort bank,offset  

Definition:

Reads a short value from a memory bank.

Parameter Description:


bank = variable containing handle to valid bank
+offset = offset in bytes to read the value
+

Command Description:

This command reads a short type value from a memory bank created with the CreateBank command. Also see PokeInt, PokeFloat, PokeByte, and PokeShort. To retrieve from a memory bank, use PeekInt, PeekFloat, and PeekByte.

Example:

; Bank Commands Example
+
+bnkTest=CreateBank(500)
+
+For t = 1 To 50
+PokeByte bnkTest,t,Rnd(255)
+PokeInt bnkTest,t+1,Rnd(10000)
+PokeShort bnkTest,t+2,Rnd(10000)
+PokeFloat bnkTest,t+3,Rnd(-.999,.999)
+Next
+
+For t = 1 To 50
+Print PeekByte (bnkTest,t)
+Print PeekInt (bnkTest,t+1)
+Print PeekShort (bnkTest,t+2)
+Print PeekFloat (bnkTest,t+3)
+Next
+
+Freebank bnkTest

Index

+ diff --git a/_release/help/commands/2d_commands/Pi.htm b/_release/help/commands/2d_commands/Pi.htm new file mode 100644 index 0000000..83e85f3 --- /dev/null +++ b/_release/help/commands/2d_commands/Pi.htm @@ -0,0 +1,5 @@ +Command: Pi   Pi   

Definition:

Returns the value of Pi

Parameter Description:


None

Command Description:

Returns the value of Pi to 6 digits (3.141592). Needed for geometric math routines.

Example:

; Pi example
+
+Print "The Value of Pi is:" + Pi
+

Index

+ diff --git a/_release/help/commands/2d_commands/PlayCDTrack.htm b/_release/help/commands/2d_commands/PlayCDTrack.htm new file mode 100644 index 0000000..9b86431 --- /dev/null +++ b/_release/help/commands/2d_commands/PlayCDTrack.htm @@ -0,0 +1,26 @@ +Command: PlayCDTrack   PlayCDTrack track,[mode]  

Definition:

Plays a CD audio track.

Parameter Description:


track = track number to play
+mode = 1; play track once, 2; loop track, 3; play track to end of CD
+

Command Description:

You can play an audio CD through Blitz Basic with this command. The optional MODE parameter allows variations of playback. Remember, the playback happens through the CD cable inside the computer that attaches to the sound card. Many computers (for some reason), don't have this cable inside properly attached. If this is the case, you will NOT hear CD sound even though you hear other sound effects and music.
+
+You will need to assign the command a channel variable.

Example:

; PlayCDTrack example
+
+; Get a track to play from user
+track=Input$("Enter a CD track number to play:")
+
+; Play the track, assign a channel - just play once
+chnCD=PlayCDTrack(track,1)
+
+; Figure out what time it is now
+oldTime=MilliSecs()
+ +; Play until the channel is over or ESC
+While ChannelPlaying(chnCD) And (Not KeyHit(1))
+; clear and print the time elapsed
+Cls
+Locate 0,0
+Print "Time Elapsed (sec):" + ((MilliSecs()-oldTime)/1000)
+Wend
+
+; Stop the channel
+StopChannel chnCD

Index

+ diff --git a/_release/help/commands/2d_commands/PlayMusic.htm b/_release/help/commands/2d_commands/PlayMusic.htm new file mode 100644 index 0000000..cc57e66 --- /dev/null +++ b/_release/help/commands/2d_commands/PlayMusic.htm @@ -0,0 +1,10 @@ +Command: PlayMusic   PlayMusic (filename$)  

Definition:

Loads and begins playing a piece of music.

Parameter Description:


filename$= a valid Windows path and filename.

Command Description:

This command will load and play a .WAV. .MID, or .MP3 file (presumably for background or other type music).
+
+You MUST use a channel variable in order to stop or adjust the music playing. You may use StopChannel, PauseChannel, ResumeChannel, etc. with this command.
+
+Oddly, you can't 'preload' the audio like you can a sound sample via the LoadSound command. Everytime you call the PlayMusic command, the file is RELOADED and played. Most of us aren't sure why this methodology was chosen by Blitz, but you will get a hiccup when the hard drive seeks and grabs the music file. In most cases, this will prevent you from using this command for what I'm sure it was intended for. Instead, you might want to use the LoopSound command.
+

Example:

; Load and play the background music
+
+chnBackground=PlayMusic("music\background.wav")
+

Index

+ diff --git a/_release/help/commands/2d_commands/PlaySound.htm b/_release/help/commands/2d_commands/PlaySound.htm new file mode 100644 index 0000000..a2d5274 --- /dev/null +++ b/_release/help/commands/2d_commands/PlaySound.htm @@ -0,0 +1,14 @@ +Command: PlaySound   PlaySound sound_variable  

Definition:

Plays a sound previously loaded into memory.

Parameter Description:


sound_variable = variable previously assigned with a LoadSound command.

Command Description:

This plays a sound previously loaded and assigned to a variable using the LoadSound command. See example.
+
+You will need to assign a channel variable handle to the sound when you play it. All subsequent sound handling commands require you use the CHANNEL variable, not the sound variable to control the sound - such as StopChannel, PauseChannel, ResumeChannel, ChannelPitch, ChannelVolume, ChannelPan, and ChannelPlaying.

Example:

; Assign a global variable for the sound
+Global sndPlayerDie
+
+; Load the sound file into memory
+
+sndPlayerDie=LoadSound("sounds/die.wav")
+
+; Play the sound
+
+chnDie=PlaySound sndPlayerDie
+

Index

+ diff --git a/_release/help/commands/2d_commands/Plot.htm b/_release/help/commands/2d_commands/Plot.htm new file mode 100644 index 0000000..a06a375 --- /dev/null +++ b/_release/help/commands/2d_commands/Plot.htm @@ -0,0 +1,7 @@ +Command: Plot   Plot x,y  

Definition:

Puts a single pixel on the screen in the current drawing color

Parameter Description:


x= and number from zero to the width of the current graphics mode
+y= and number from zero to the height of the current graphics mode
+

Command Description:

Used to put a pixel on the screen defined by its x, y location in the current drawing color defined by the Color command

Example:

;Set the color to green
+Color 0,255,0

+;Draw a dot at location 100,200 with the color green
+plot 100,200

Index

+ diff --git a/_release/help/commands/2d_commands/PokeByte.htm b/_release/help/commands/2d_commands/PokeByte.htm new file mode 100644 index 0000000..3ed4f87 --- /dev/null +++ b/_release/help/commands/2d_commands/PokeByte.htm @@ -0,0 +1,22 @@ +Command: PokeByte   PokeByte bank,offset,value  

Definition:

Writes a Byte value to a memory bank.

Parameter Description:


bank = variable containing handle to valid bank
+offset = offset in bytes to write the value
+value = the value to be written

Command Description:

This command writes a byte type value into a memory bank created with the CreateBank command. Also see PokeInt, PokeFloat, and PokeShort. To retrieve from a memory bank, use PeekInt, PeekFloat, PeekByte, and PeekShort.

Example:

; Bank Commands Example
+
+bnkTest=CreateBank(500)
+
+For t = 1 To 50
+PokeByte bnkTest,t,Rnd(255)
+PokeInt bnkTest,t+1,Rnd(10000)
+PokeShort bnkTest,t+2,Rnd(10000)
+PokeFloat bnkTest,t+3,Rnd(-.999,.999)
+Next
+
+For t = 1 To 50
+Print PeekByte (bnkTest,t)
+Print PeekInt (bnkTest,t+1)
+Print PeekShort (bnkTest,t+2)
+Print PeekFloat (bnkTest,t+3)
+Next
+
+Freebank bnkTest

Index

+ diff --git a/_release/help/commands/2d_commands/PokeFloat.htm b/_release/help/commands/2d_commands/PokeFloat.htm new file mode 100644 index 0000000..62de25b --- /dev/null +++ b/_release/help/commands/2d_commands/PokeFloat.htm @@ -0,0 +1,22 @@ +Command: PokeFloat   PokeFloat bank,offset,value  

Definition:

Writes a floating point value to a memory bank.

Parameter Description:


bank = variable containing handle to valid bank
+offset = offset in bytes to write the value
+value = the value to be written

Command Description:

This command writes a floating point type value into a memory bank created with the CreateBank command. Also see PokeInt, PokeByte, and PokeShort. To retrieve from a memory bank, use PeekInt, PeekFloat, PeekByte, and PeekShort.

Example:

; Bank Commands Example
+
+bnkTest=CreateBank(500)
+
+For t = 1 To 50
+PokeByte bnkTest,t,Rnd(255)
+PokeInt bnkTest,t+1,Rnd(10000)
+PokeShort bnkTest,t+2,Rnd(10000)
+PokeFloat bnkTest,t+3,Rnd(-.999,.999)
+Next
+
+For t = 1 To 50
+Print PeekByte (bnkTest,t)
+Print PeekInt (bnkTest,t+1)
+Print PeekShort (bnkTest,t+2)
+Print PeekFloat (bnkTest,t+3)
+Next
+
+Freebank bnkTest

Index

+ diff --git a/_release/help/commands/2d_commands/PokeInt.htm b/_release/help/commands/2d_commands/PokeInt.htm new file mode 100644 index 0000000..fbb187c --- /dev/null +++ b/_release/help/commands/2d_commands/PokeInt.htm @@ -0,0 +1,22 @@ +Command: PokeInt   PokeInt bank,offset,value  

Definition:

Writes a Integer value to a memory bank.

Parameter Description:


bank = variable containing handle to valid bank
+offset = offset in bytes to write the value
+value = the value to be written

Command Description:

This command writes a integer type value into a memory bank created with the CreateBank command. Also see PokeFloat, PokeByte, and PokeShort. To retrieve from a memory bank, use PeekInt, PeekFloat, PeekByte, and PeekShort.

Example:

; Bank Commands Example
+
+bnkTest=CreateBank(500)
+
+For t = 1 To 50
+PokeByte bnkTest,t,Rnd(255)
+PokeInt bnkTest,t+1,Rnd(10000)
+PokeShort bnkTest,t+2,Rnd(10000)
+PokeFloat bnkTest,t+3,Rnd(-.999,.999)
+Next
+
+For t = 1 To 50
+Print PeekByte (bnkTest,t)
+Print PeekInt (bnkTest,t+1)
+Print PeekShort (bnkTest,t+2)
+Print PeekFloat (bnkTest,t+3)
+Next
+
+Freebank bnkTest

Index

+ diff --git a/_release/help/commands/2d_commands/PokeShort.htm b/_release/help/commands/2d_commands/PokeShort.htm new file mode 100644 index 0000000..44a9d43 --- /dev/null +++ b/_release/help/commands/2d_commands/PokeShort.htm @@ -0,0 +1,22 @@ +Command: PokeShort   PokeShort bank,offset,value  

Definition:

Writes a short value to a memory bank.

Parameter Description:


bank = variable containing handle to valid bank
+offset = offset in bytes to write the value
+value = the value to be written

Command Description:

This command writes a short type value into a memory bank created with the CreateBank command. Also see PokeInt, PokeFloat, and PokeByte. To retrieve from a memory bank, use PeekInt, PeekFloat, PeekByte, and PeekShort.

Example:

; Bank Commands Example
+
+bnkTest=CreateBank(500)
+
+For t = 1 To 50
+PokeByte bnkTest,t,Rnd(255)
+PokeInt bnkTest,t+1,Rnd(10000)
+PokeShort bnkTest,t+2,Rnd(10000)
+PokeFloat bnkTest,t+3,Rnd(-.999,.999)
+Next
+
+For t = 1 To 50
+Print PeekByte (bnkTest,t)
+Print PeekInt (bnkTest,t+1)
+Print PeekShort (bnkTest,t+2)
+Print PeekFloat (bnkTest,t+3)
+Next
+
+Freebank bnkTest

Index

+ diff --git a/_release/help/commands/2d_commands/Print.htm b/_release/help/commands/2d_commands/Print.htm new file mode 100644 index 0000000..b86e609 --- /dev/null +++ b/_release/help/commands/2d_commands/Print.htm @@ -0,0 +1,6 @@ +Command: Print   Print string$  

Definition:

Print a string to the screen.

Parameter Description:


string$ = any valid string

Command Description:

This command will print a string value on the screen (if not in a graphic mode) or on the current drawing buffer being used by the program. Unlike the Write command, it puts a carriage return/linefeed after the string.

Example:

; Get the user's name and print a welcome
+
+name$=Input$("What is your name?")
+Print "Hello there, " + name$ + "!"
+

Index

+ diff --git a/_release/help/commands/2d_commands/RSet.htm b/_release/help/commands/2d_commands/RSet.htm new file mode 100644 index 0000000..c190f28 --- /dev/null +++ b/_release/help/commands/2d_commands/RSet.htm @@ -0,0 +1,4 @@ +Command: RSet$   RSet$ (string$, length)  

Definition:

Pads a string with spaces to a specified value, right aligning the string.

Parameter Description:


string$ = any valid string or string variable
+length = how long you want the new string to be (including padding)

Command Description:

If you have a string that is say, 10 letters long, but you want to make it a full 25 letters, padding the rest of the string with spaces, this command will do so, leaving the original string value right justified. You could use this to pad your high score names to make sure all are the same width in characters.

Example:

name$="Shane R. Monroe"
+Print "New Padded Name: '" + RSet$(name$,40) + "'"

Index

+ diff --git a/_release/help/commands/2d_commands/Rand.htm b/_release/help/commands/2d_commands/Rand.htm new file mode 100644 index 0000000..b656278 --- /dev/null +++ b/_release/help/commands/2d_commands/Rand.htm @@ -0,0 +1,13 @@ +Command: Rand   Rand ([low value],high value)  

Definition:

Generates a random integer value between the values specified.

Parameter Description:


low value = optional - defaults to 1; lowest number to generate
+high value = highest number to generate

Command Description:

Unlike the RND command, this command actually returns only integer values. The low value defaults to 1 if no value is specified. The high value is the highest number that can be randomly generated.
+
+If you need to generate floating point random numbers, use Rnd.

Example:

; Rand example
+
+; Set the randomizer seed for more true random numbers
+SeedRnd (MilliSecs())
+
+; Generate random numbers between 1 and 100
+For t = 1 To 20
+Print Rand(1,100)
+Next

Index

+ diff --git a/_release/help/commands/2d_commands/Read.htm b/_release/help/commands/2d_commands/Read.htm new file mode 100644 index 0000000..1fa9b8d --- /dev/null +++ b/_release/help/commands/2d_commands/Read.htm @@ -0,0 +1,33 @@ +Command: Read   Read variable  

Definition:

Get the next set of values from a Data statement.

Parameter Description:


variable = valid variable to match the data type you are reading (integer, string, etc)

Command Description:

This reads the next value in a set of Data statements. This allows you to store large blocks of constant information (the structure of tile blocks for a game level for example) into easy to maintain Data statements, then retrieve them for redrawing, etc.
+
+Unlike most BASIC languages, Data statments do not have to be linear and sequential. Through the use of Labels (aka 'dot variable') you can create 'banks' of Data statments with the unique ability to 'Restore the Data pointer' to any one of these labels. Each level could have its own label (.level1, .level2, etc). See the Data statement, Restore command, or .Label command for more information.
+
+Note: You can read multiple values at one time; Read X,Y,Z for example.

Example:

; Sample of read/restore/data/label commands
+
+; Let's put the data pointer to the second data set
+Restore seconddata
+
+; Let's print them all to the screen
+For t = 1 To 10
+Read num ; Get the next data value in the data stack
+Print num
+Next
+
+; Now for the first set of data
+Restore firstdata
+
+; Let's print them all to the screen
+For t = 1 To 10
+Read num ; Get the next data value in the data stack
+Print num
+Next
+
+; this is the first set of data
+.firstdata
+Data 1,2,3,4,5,6,7,8,9,10
+
+; this is the second set of data
+.seconddata
+Data 11,12,13,14,15,16,17,18,19,20
+

Index

+ diff --git a/_release/help/commands/2d_commands/ReadAvail.htm b/_release/help/commands/2d_commands/ReadAvail.htm new file mode 100644 index 0000000..0b3661d --- /dev/null +++ b/_release/help/commands/2d_commands/ReadAvail.htm @@ -0,0 +1,28 @@ +Command: ReadAvail   ReadAvail (filehandle|streamhandle)  

Definition:

Returns how many bytes are guaranteed to be successfully read from a stream.

Parameter Description:


filehandle|streamhandle = handle assigned to the file or stream when originally opened.

Command Description:

In the case of file streams, this reflects how much data is internally buffered. In the case of TCP streams, this reflects how much data has 'arrived'. +

Example:

; OpenTCPStream/CloseTCPStream/ReadAvail Example
+
+Print "Connecting..."
+tcp=OpenTCPStream( "www.blitzbasement.com",80 )
+
+If Not tcp Print "Failed.":WaitKey:End
+
+Print "Connected! Sending request..."
+
+WriteLine tcp,"GET http://www.blitzbasement.com HTTP/1.0"
+WriteLine tcp,Chr$(10)
+
+If Eof(tcp) Print "Failed.":WaitKey:End
+
+Print "Request sent! Waiting for reply..."
+
+While Not Eof(tcp)
+ Print ReadLine$( tcp )
+ Print "Bytes available:" + ReadAvail(tcp)
+Wend
+
+If Eof(tcp)=1 Then Print "Success!" Else Print "Error!"
+
+CloseTCPStream tcp
+
+WaitKey

Index

+ diff --git a/_release/help/commands/2d_commands/ReadByte.htm b/_release/help/commands/2d_commands/ReadByte.htm new file mode 100644 index 0000000..775ce49 --- /dev/null +++ b/_release/help/commands/2d_commands/ReadByte.htm @@ -0,0 +1,64 @@ +Command: ReadByte   ReadByte ( filehandle|stream )  

Definition:

Reads a single byte of data from an open file (or stream) and returns it as an integer value between 0 and 255.

Parameter Description:


filehandle|stream = a valid variable set with the OpenFile, ReadFile command, or OpenTCPStream (v1.52+)

Command Description:

Once you've opened a disk file (or stream) for reading, use this command to read a single byte at a time from the file/stream. Note, a byte is an integer that can take the values 0..255 and occupies 8 bits of storage. Since characters are stored as byte values this function can be used to read a file one character at a time. Reading beyond the end of file does not result in an error, but each value read will be zero.
+
+Advanced notes
+
+The number that is stored by WriteByte is actually the least significant byte of an integer so negative numbers and numbers above 255 will still have a value between 0..255. Unless you understand how 32 bit integers are stored in 2's compliment notation this will seem strange but it is NOT a +bug.
+
+Streams can only be used in Blitz Basic v1.52 or greater. +See also:
+ReadByte, ReadShort, ReadInt, ReadFloat, ReadString$, ReadLine$, WriteByte, WriteShort, WriteInt, WriteFloat, WriteShort, WriteString, WriteLine, ReadFile, WriteFile, OpenFile, CloseFile, Eof, FileType, FilePos, SeekFile

Example:

; Reading and writing a file using ReadByte and WriteByte functions
+
+; Initialise some variables for the example
+Byte1% = 10 ; store 10
+Byte2% = 100 ; store 100
+Byte3% = 255 ; store 255 ( the maximum value that can be stored in a Byte)
+Byte4% = 256 ; try to store 256 this will end up as 0 ( i.e. 256 - 256 = 0 )
+Byte5% = 257 ; try to store 257 this will end up as 1 ( i.e. 257 - 256 = 1 )
+Byte6% = -1 ; try to store -1 this will end up as 255 ( i.e. 256 -1 = 255 )
+Byte7% = -2 ; try to store 256 this will end up as 254 ( i.e. 256 - 2 = 254 )
+Byte8% = Asc("A") ; Store the ASCII value for the Character "A" ( i.e. 65 )
+
+; Open a file to write to
+fileout = WriteFile("mydata.dat ")
+
+; Write the information to the file
+WriteByte( fileout, Byte1 )
+WriteByte( fileout, Byte2 )
+WriteByte( fileout, Byte3 )
+WriteByte( fileout, Byte4 )
+WriteByte( fileout, Byte5 )
+WriteByte( fileout, Byte6 )
+WriteByte( fileout, Byte7 )
+WriteByte( fileout, Byte8 )
+
+; Close the file
+CloseFile( fileout )
+
+; Open the file to Read
+filein = ReadFile("mydata.dat")
+
+Read1 = ReadByte( filein )
+Read2 = ReadByte( filein )
+Read3 = ReadByte( filein )
+Read4 = ReadByte( filein )
+Read5 = ReadByte( filein )
+Read6 = ReadByte( filein )
+Read7 = ReadByte( filein )
+Read8 = ReadByte( filein )
+
+; Close the file once reading is finished
+CloseFile( fileout )
+
+Print "Written - Read"
+Write Byte1 + " - " : Print Read1
+Write Byte2 + " - " : Print Read2
+Write Byte3 + " - " : Print Read3
+Write Byte4 + " - " : Print Read4
+Write Byte5 + " - " : Print Read5
+Write Byte6 + " - " : Print Read6
+Write Byte7 + " - " : Print Read7
+Write Byte8 + " - " : Print Chr$( Read8 )
+
+WaitKey()

Index

+ diff --git a/_release/help/commands/2d_commands/ReadBytes.htm b/_release/help/commands/2d_commands/ReadBytes.htm new file mode 100644 index 0000000..29e5bb9 --- /dev/null +++ b/_release/help/commands/2d_commands/ReadBytes.htm @@ -0,0 +1,50 @@ +Command: ReadBytes   ReadBytes bank,file|stream,offset,count  

Definition:

Reads data from a file (or stream) into a memory bank.

Parameter Description:


bank = variable containing handle to valid bank
+file = file handle of previously opened file or stream
+offset = offset in bytes to write the value
+count = how many bytes to write from the offset
+

Command Description:

You can read the contents of a disk file (or stream) to a memory bank using this command.
+
+Note: The file handle must be opened with OpenFile or OpenTCPStream and subsequently closed with CloseFile or CloseTCPStream after the reading operations are complete.

+Return how many bytes successfully read from a stream.
+
+Streams can only be used in Blitz Basic v1.52 or greater.

Example:

; Read/WriteBytes Commands Example
+
+; Create a 50 byte memory bank
+bnkTest=CreateBank(500)
+
+; Let's fill the bank with crap
+For t = 1 To 50
+PokeByte bnkTest,t,Rnd(255)
+PokeInt bnkTest,t+1,Rnd(10000)
+PokeShort bnkTest,t+2,Rnd(10000)
+PokeFloat bnkTest,t+3,Rnd(-.999,.999)
+Next
+
+; Open a file to write to
+fileBank=WriteFile("test.bnk")
+; Write the bank to the file
+WriteBytes bnkTest,fileBank,0,50
+; Close it
+CloseFile fileBank
+
+; Free the bank
+FreeBank bnkTest
+
+; Make a new one
+bnkTest=CreateBank(500)
+
+; Open the file to read from
+fileBank=OpenFile("test.bnk")
+; Write the bank to the file
+ReadBytes bnkTest,fileBank,0,50
+; Close it
+CloseFile fileBank
+
+; Write back the results!
+For t = 1 To 50
+Print PeekByte (bnkTest,t)
+Print PeekInt (bnkTest,t+1)
+Print PeekShort (bnkTest,t+2)
+Print PeekFloat (bnkTest,t+3)
+Next

Index

+ diff --git a/_release/help/commands/2d_commands/ReadDir.htm b/_release/help/commands/2d_commands/ReadDir.htm new file mode 100644 index 0000000..6aa3050 --- /dev/null +++ b/_release/help/commands/2d_commands/ReadDir.htm @@ -0,0 +1,31 @@ +Command: ReadDir   ReadDir (directory)  

Definition:

Opens a folder/directory on a device for reading.

Parameter Description:


directory = full path and name of folder/directory to open

Command Description:

In file operations, you will often need to parse through a directory/folder and retrieve unknown filenames and other folders from it. This command opens a specified folder to begin these operations. The command returns a file handle which is used by the other commands to perform other services (like most file operators). You will use the NextFile$ to iterate through each entry (use FILETYPE to see if it is a file or folder). Remember, once completed, good programming practice dictates that you CloseDir the open folder. The example should help out alot.

Example:

; ReadDir/NextFile$/CloseDir example
+
+; Define what folder to start with ...
+folder$="C:\"
+
+; Open up the directory, and assign the handle to myDir
+myDir=ReadDir(folder$)
+
+; Let's loop forever until we run out of files/folders to list!
+Repeat
+; Assign the next entry in the folder to file$
+file$=NextFile$(myDir)
+
+; If there isn't another one, let's exit this loop
+If file$="" Then Exit
+
+; Use FileType to determine if it is a folder (value 2) or a file and print results
+If FileType(folder$+"\"+file$) = 2 Then
+Print "Folder:" + file$
+Else
+Print "File:" + file$
+End If
+Forever
+
+; Properly close the open folder
+CloseDir myDir
+
+; We're done!
+Print "Done listing files!"
+

Index

+ diff --git a/_release/help/commands/2d_commands/ReadFile.htm b/_release/help/commands/2d_commands/ReadFile.htm new file mode 100644 index 0000000..509aba0 --- /dev/null +++ b/_release/help/commands/2d_commands/ReadFile.htm @@ -0,0 +1,53 @@ +Command: ReadFile   ReadFile (filename$)  

Definition:

Opens a file on disk for reading operations.

Parameter Description:


filename$ = any valid path and filename. The returned value is the filehandle which is an integer value.

Command Description:

This command opens the designated filename and prepares it to be read from. Use this to read back your own configuration file, save game data, etc. also useful for reading custom types from a files. The filehandle that is +returned is an integer value that the operating system uses to identify which file is to be read from and must be passed to the functions such as ReadInt(). If the file could not be opened, for instance, if it does not exists, then the filehandle is Zero.
+
+See also:
+ReadByte, ReadShort, ReadInt, ReadFloat, ReadString$, ReadLine$, WriteByte, WriteShort, WriteInt, WriteFloat, WriteShort, WriteString, WriteLine, ReadFile, WriteFile, OpenFile, CloseFile, Eof, FileType, FilePos, SeekFile

Example:

; Reading and writing custom types to files using ReadFile, WriteFile and +CloseFile
+
+; Initialise some variables for the example
+Type HighScore
+ Field Name$
+ Field Score%
+ Field Level%
+End Type
+
+Best.HighScore = New HighScore
+Best\Name = "Mark"
+Best\Score = 11657
+Best\Level = 34
+
+; Open a file to write to
+fileout = WriteFile("mydata.dat")
+
+; Write the information to the file
+WriteString( fileout, Best\Name )
+WriteInt( fileout, Best\Score )
+WriteByte( fileout, Best\Level )
+
+; Close the file
+CloseFile( fileout )
+
+; Open the file to Read
+filein = ReadFile("mydata.dat")
+
+; Lets read the Greatest score from the file
+Greatest.HighScore = New HighScore
+Greatest\Name$ = ReadString$( filein )
+Greatest\Score = ReadInt( filein )
+Greatest\Level = ReadByte( filein )
+
+; Close the file once reading is finished
+CloseFile( fileout )
+
+Print "High score record read from - mydata.dat "
+Print
+Write "Name = "
+Print Greatest\Name
+Write "Score = "
+Print Greatest\Score
+Write "Level = "
+Print Greatest\Level
+
+WaitKey()

Index

+ diff --git a/_release/help/commands/2d_commands/ReadFloat.htm b/_release/help/commands/2d_commands/ReadFloat.htm new file mode 100644 index 0000000..7ce3695 --- /dev/null +++ b/_release/help/commands/2d_commands/ReadFloat.htm @@ -0,0 +1,46 @@ +Command: ReadFloat   ReadFloat (filehandle|stream)  

Definition:

Reads a single floating point value from an open file (or stream).

Parameter Description:


filehandle|stream = a valid variable set with the OpenFile, ReadFile command, or OpenTCPStream (v1.52+) The value returned is a floating point number.

Command Description:

Once you've opened a disk file (or stream) for reading, use this command to read a single floating point number from the file. Note, each value written uses 4 bytes of space. Reading beyond the end of file does not result in an +error, but each value read will be zero.
+
+Streams can only be used in Blitz Basic v1.52 or greater. +
+
+See also:
+ReadByte, ReadShort, ReadInt, ReadFloat, ReadString$, ReadLine$, WriteByte, WriteShort, WriteInt, WriteFloat, WriteShort, WriteString, WriteLine, ReadFile, WriteFile, OpenFile, CloseFile, Eof, FileType, FilePos, SeekFile

Example:

; Reading and writing a file using ReadFloat and WriteFloat functions
+
+; Initialise some variables for the example
+Num1# = 10.5 ; store 10.5
+Num2# = 365.25 ; store 365.25
+Num3# = 32767.123 ; 32767.123 is the largest positive Short Integer Value in BlitzBasic )
+Num4# = -32768.123 ; -32768.123 the largest negative Short Integer Value in BlitzBasic )
+
+; Open a file to write to
+fileout = WriteFile("mydata.dat")
+
+; Write the information to the file
+WriteFloat( fileout, Num1 )
+WriteFloat( fileout, Num2 )
+WriteFloat( fileout, Num3 )
+WriteFloat( fileout, Num4 )
+
+; Close the file
+CloseFile( fileout )
+
+; Open the file to Read
+filein = ReadFile("mydata.dat")
+
+Read1# = ReadFloat( filein )
+Read2# = ReadFloat( filein )
+Read3# = ReadFloat( filein )
+Read4# = ReadFloat( filein )
+
+; Close the file once reading is finished
+CloseFile( fileout )
+
+Print "Floating Point Data Read From File - mydata.dat "
+Print Read1
+Print Read2
+Print Read3
+Print Read4
+
+WaitKey()

Index

+ diff --git a/_release/help/commands/2d_commands/ReadInt.htm b/_release/help/commands/2d_commands/ReadInt.htm new file mode 100644 index 0000000..b347057 --- /dev/null +++ b/_release/help/commands/2d_commands/ReadInt.htm @@ -0,0 +1,45 @@ +Command: ReadInt   ReadInt (filehandle|stream)  

Definition:

Reads a single 32bit integer value from an open file (or stream) and returns it as an integer value.

Parameter Description:


filehandle|stream = a valid variable set with the OpenFile, ReadFile command, or OpenTCPStream (v1.52+)
+The value returned is an integer in the range -2147483648 to 2147483647

Command Description:

Once you've opened a disk file (or stream) for reading, use this command to read a single integer value from the file. Note, each value written uses 4 bytes of space and is written least significant byte first. Reading beyond the end of file does not result in an error, but each value read will be zero.
+
+Streams can only be used in Blitz Basic v1.52 or greater.
+
+See also:
+ReadByte, ReadShort, ReadInt, ReadFloat, ReadString$, ReadLine$, WriteByte, WriteShort, WriteInt, WriteFloat, WriteShort, WriteString, WriteLine, ReadFile, WriteFile, OpenFile, CloseFile, Eof, FileType, FilePos, SeekFile

Example:

; Reading and writing a file using ReadInt and WriteInt functions
+
+; Initialise some variables for the example
+Int1% = 10 ; store 10
+Int2% = 365 ; store 365
+Int3% = 2147483647 ; store 2147483647 the largest positive Integer Value in BlitzBasic )
+Int4% = - 2147483648 ; store -2147483648 the largest negative Integer Value in BlitzBasic )
+
+; Open a file to write to
+fileout = WriteFile("mydata.dat")
+
+; Write the information to the file
+WriteInt( fileout, Int1 )
+WriteInt( fileout, Int2 )
+WriteInt( fileout, Int3 )
+WriteInt( fileout, Int4 )
+
+; Close the file
+CloseFile( fileout )
+
+; Open the file to Read
+filein = ReadFile("mydata.dat")
+
+Read1 = ReadInt( filein )
+Read2 = ReadInt( filein )
+Read3 = ReadInt( filein )
+Read4 = ReadInt( filein )
+
+; Close the file once reading is finished
+CloseFile( fileout )
+
+Print "Integer Data Read From File - mydata.dat "
+Print Read1
+Print Read2
+Print Read3
+Print Read4
+
+WaitKey()

Index

+ diff --git a/_release/help/commands/2d_commands/ReadLine.htm b/_release/help/commands/2d_commands/ReadLine.htm new file mode 100644 index 0000000..14be8fd --- /dev/null +++ b/_release/help/commands/2d_commands/ReadLine.htm @@ -0,0 +1,50 @@ +Command: ReadLine$   ReadLine$ (filehandle|stream)  

Definition:

Reads a single line of text from an open file (or stream).

Parameter Description:


filehandle|stream = a valid variable set with the OpenFile, ReadFile command, or OpenTCPStream (v1.52+). The value returned is a text string.

Command Description:

Once you've opened a disk file (or stream) for reading, use this command to read a whole line of text from a text file or stream. Each line of text is returned as a string variable. This function can be used to read plain text files.
+
+Characters are read from the input file until an "end-of-line" mark is found. An "end-of-line" can be a single carriage return (0Dh) or a single linefeed (0Ah) or carriage return followed by a linefeed (0Dh, 0Ah). Reading beyond the end of file does not result in an error, but each value +read will be a zero length string.
+
+ReadLine$ returns all chars except chr$(13)/chr$(10).
+
+Streams can only be used in Blitz Basic v1.52 or greater.
+
+See also:
+ReadByte, ReadShort, ReadInt, ReadFloat, ReadString$, ReadLine$, WriteByte, WriteShort, WriteInt, WriteFloat, WriteShort, WriteString, WriteLine, ReadFile, WriteFile, OpenFile, CloseFile, Eof, FileType, FilePos, SeekFile.

Example:

; Reading and writing a file using ReadLine$ and WriteLine functions
+
+; Initialise some variables for the example
+String1$ = "Line 1 is short"
+String2$ = "Line 2 is a longer line but they can be much longer"
+String3$ = "Line 3 is made up "
+String4$ = "of two parts joined together."
+
+; Open a file to write to
+fileout = WriteFile("mydata.txt")
+
+; Write the information to the file
+WriteLine( fileout, String1 )
+WriteLine( fileout, String2 )
+WriteLine( fileout, String3 + String4)
+WriteLine( fileout, "Just to show you don't have to use variables" )
+
+; Close the file
+CloseFile( fileout )
+
+; Open the file to Read
+filein = ReadFile("mydata.txt")
+
+Read1$ = ReadLine( filein )
+Read2$ = ReadLine$( filein )
+Read3$ = ReadLine$( filein )
+Read4$ = ReadLine$( filein )
+
+; Close the file once reading is finished
+CloseFile( fileout )
+
+Print "Lines of text read from file - mydata.txt "
+Print
+Print Read1
+Print Read2
+Print Read3
+Print Read4
+
+WaitKey()

Index

+ diff --git a/_release/help/commands/2d_commands/ReadPixel.htm b/_release/help/commands/2d_commands/ReadPixel.htm new file mode 100644 index 0000000..569773e --- /dev/null +++ b/_release/help/commands/2d_commands/ReadPixel.htm @@ -0,0 +1,52 @@ +Command: ReadPixel   ReadPixel (x,y,[buffer])  

Definition:

Quickly reads the value of a single pixel on the screen.

Parameter Description:


x = x location of the pixel to read
+y = y location of the pixel to read
+buffer = any valid screen/image buffer (optional)

Command Description:

This command will allow you fast access to a specific pixel in the buffer selected. While this command reads the pixel quickly (and it can be written back quickly with WritePixel, it is still not fast enough for real-time screen effects.
+
+You are not required to lock the buffer with LockBuffer and subsequently unlock the buffer with UnlockBuffer. However, the operations will be a bit faster if you do.
+
+V1.52 and above: It has been necessary to make ReadPixel and ReadPixelFast "alpha-aware".
+
+This means that the high 8 bits of the color returned ReadPixel/ReadPixelFast now contain valid alpha information.
+
+However, in the case of Blitz2D apps, there is no alpha information in images!
+
+Mark decided that in the abscence of any alpha information, a pixel is assumed to have 'full' alpha.
+
+Therefore, values returned by ReadPixel/ReadPixelFast will now (usually) have their high 8 bits sets. The exception will be when reading pixels from Blitz3D textures created with an alpha channel.
+
+To get the old behaviour of v1.50 (and below) of ReadPixel/ReadPixelFast, use the following:
+
+rgb=ReadPixel( x,y ) And $FFFFFF
+
+This will 'mask out' the 8 high bits of alpha and return just the red, green and blue components of the pixel.

Example:

; High Speed Graphics Commands
+
+Graphics 640,480,16
+
+; Draw a bunch of crap on the screen
+For t= 1 To 1000
+Color Rnd(255),Rnd(255),Rnd(255)
+Rect Rnd(640),Rnd(480),Rnd(150),Rnd(150),Rnd(1)
+Next
+
+Delay 3000
+
+; Copy the top half of the screen over the bottom half
+; using fast pixels and locked buffers
+LockBuffer FrontBuffer()
+For x = 1 To 640
+For y = 1 To 240
+WritePixelFast x,y+241,ReadPixelFast(x,y)
+Next
+Next
+UnlockBuffer FrontBuffer()
+
+Delay 3000
+
+; Draw the left half of the screen over the right half
+; using the slower direct pixel access
+For x = 1 To 320
+For y = 1 To 480
+WritePixel x+320,y,ReadPixel(x,y)
+Next
+Next

Index

+ diff --git a/_release/help/commands/2d_commands/ReadPixelFast.htm b/_release/help/commands/2d_commands/ReadPixelFast.htm new file mode 100644 index 0000000..ca00f4f --- /dev/null +++ b/_release/help/commands/2d_commands/ReadPixelFast.htm @@ -0,0 +1,54 @@ +Command: ReadPixelFast   ReadPixelFast (x,y,[buffer])  

Definition:

High speed pixel reading from an image buffer.

Parameter Description:


x = x location of the pixel to read
+y = y location of the pixel to read
+buffer = any valid screen/image buffer (optional)

Command Description:

This command will allow you fast access to a specific pixel in the buffer selected. While this command reads the pixel quickly (and it can be written back quickly with WritePixelFast, it is still not fast enough for real-time screen effects.
+
+You are required to lock the buffer with LockBuffer and subsequently unlock the buffer with UnlockBuffer when the operations are complete before any other graphics commands can be used.
+
+WARNING: You are playing with power. There is nothing keeping you from writing directly to memory off the screen and TRASHING it. You can crash Blitz using this command.
+
+V1.52 and above: It has been necessary to make ReadPixel and ReadPixelFast "alpha-aware".
+
+This means that the high 8 bits of the color returned ReadPixel/ReadPixelFast now contain valid alpha information.
+
+However, in the case of Blitz2D apps, there is no alpha information in images!
+
+Mark decided that in the abscence of any alpha information, a pixel is assumed to have 'full' alpha.
+
+Therefore, values returned by ReadPixel/ReadPixelFast will now (usually) have their high 8 bits sets. The exception will be when reading pixels from Blitz3D textures created with an alpha channel.
+
+To get the old behaviour of v1.50 (and below) of ReadPixel/ReadPixelFast, use the following:
+
+rgb=ReadPixel( x,y ) And $FFFFFF
+
+This will 'mask out' the 8 high bits of alpha and return just the red, green and blue components of the pixel.

Example:

; High Speed Graphics Commands
+
+Graphics 640,480,16
+
+; Draw a bunch of crap on the screen
+For t= 1 To 1000
+Color Rnd(255),Rnd(255),Rnd(255)
+Rect Rnd(640),Rnd(480),Rnd(150),Rnd(150),Rnd(1)
+Next
+
+Delay 3000
+
+; Copy the top half of the screen over the bottom half
+; using fast pixels and locked buffers
+LockBuffer FrontBuffer()
+For x = 1 To 640
+For y = 1 To 240
+WritePixelFast x,y+241,ReadPixelFast(x,y)
+Next
+Next
+UnlockBuffer FrontBuffer()
+
+Delay 3000
+
+; Draw the left half of the screen over the right half
+; using the slower direct pixel access
+For x = 1 To 320
+For y = 1 To 480
+WritePixel x+320,y,ReadPixel(x,y)
+Next
+Next

Index

+ diff --git a/_release/help/commands/2d_commands/ReadShort.htm b/_release/help/commands/2d_commands/ReadShort.htm new file mode 100644 index 0000000..d3faf25 --- /dev/null +++ b/_release/help/commands/2d_commands/ReadShort.htm @@ -0,0 +1,45 @@ +Command: ReadShort   ReadShort (filehandle|stream)  

Definition:

Reads a single short integer value (16 bits) from an open file (or stream) and returns it as an integer value.

Parameter Description:


filehandle|stream = a valid variable set with the OpenFile, ReadFile command, or OpenTCPStream (v1.52+)
+The value returned is an integer in the range 0-65535.

Command Description:

Once you've opened a disk file (or stream) for reading, use this command to read a single short integer (16bit) value from the file. Note, each value written uses 2 bytes of disk space and is written least significant byte first. Reading beyond the end of file does not result in an error, but each value read will be zero.
+
+Streams can only be used in Blitz Basic v1.52 or greater.
+
+See also:
+ReadByte, ReadShort, ReadInt, ReadFloat, ReadString$, ReadLine$, WriteByte, WriteShort, WriteInt, WriteFloat, WriteShort, WriteString, WriteLine, ReadFile, WriteFile, OpenFile, CloseFile, Eof, FileType, FilePos, SeekFile

Example:

; Reading and writing a file using ReadShort and WriteShort functions
+
+; Initialise some variables for the example
+Int1% = 10 ; store 10
+Int2% = 365 ; store 365
+Int3% = 32767 ; 32767 is the largest positive Short Integer Value in BlitzBasic )
+Int4% = -32768 ; -32768 the largest negative Short Integer Value in BlitzBasic )
+
+; Open a file to write to
+fileout = WriteFile("mydata.dat")
+
+; Write the information to the file
+WriteShort( fileout, Int1 )
+WriteShort( fileout, Int2 )
+WriteShort( fileout, Int3 )
+WriteShort( fileout, Int4 )
+
+; Close the file
+CloseFile( fileout )
+
+; Open the file to Read
+filein = ReadFile("mydata.dat")
+
+Read1 = ReadShort( filein )
+Read2 = ReadShort( filein )
+Read3 = ReadShort( filein )
+Read4 = ReadShort( filein )
+
+; Close the file once reading is finished
+CloseFile( fileout )
+
+Print "Short Integer Data Read From File - mydata.dat "
+Print Read1
+Print Read2
+Print Read3
+Print Read4
+
+WaitKey()

Index

+ diff --git a/_release/help/commands/2d_commands/ReadString.htm b/_release/help/commands/2d_commands/ReadString.htm new file mode 100644 index 0000000..9547c8e --- /dev/null +++ b/_release/help/commands/2d_commands/ReadString.htm @@ -0,0 +1,50 @@ +Command: ReadString$   ReadString$ (filehandle|stream)  

Definition:

Reads a single string variable from an open file (or stream).

Parameter Description:


filehandle|stream = a valid variable set with the OpenFile, ReadFile command, or OpenTCPStream (v1.52+) +The value returned is a text string.

Command Description:

Once you've opened a disk file (or stream) for reading, use this command to read a string variable from the file.
+
+Each string is stored in the file as a 4 byte (32bit) integer followed by the characters that form the string. The integer contains the number of characters in the string, i.e. its length. Note, that Carriage Return, Line +Feed and Null characters are NOT use to indicate the end of the string. A file of strings cannot be read like a text file, since it contains string variables and not text. A null string, i.e. a string of zero length ("") is +stored as 4 bytes, an integer count with a value = zero, followed by no Characters. Note strings are not limited to 255 characters as in some languages. Reading beyond the end of file does not result in an error, but each value read will be a zero length string.
+
+Streams can only be used in Blitz Basic v1.52 or greater.
+
+See also:
+ReadByte, ReadShort, ReadInt, ReadFloat, ReadString$, ReadLine$, WriteByte, WriteShort, WriteInt, WriteFloat, WriteShort, WriteString, WriteLine, ReadFile, WriteFile, OpenFile, CloseFile, Eof, FileType, FilePos, SeekFile

Example:

; Reading and writing a file using ReadString$ and WriteString functions
+
+; Initialise some variables for the example
+String1$ = "A short string"
+String2$ = "A longer string since these are variables lengths"
+String3$ = "This is string3 "
+String4$ = "joined to string4"
+
+; Open a file to write to
+fileout = WriteFile("mydata.dat")
+
+; Write the information to the file
+WriteString( fileout, String1 )
+WriteString( fileout, String2 )
+WriteString( fileout, String3 + String4)
+WriteString( fileout, "Just to show you don't have to use variables" )
+
+; Close the file
+CloseFile( fileout )
+ +; Open the file to Read
+filein = ReadFile("mydata.dat")
+
+Read1$ = ReadString$( filein )
+Read2$ = ReadString$( filein )
+Read3$ = ReadString$( filein )
+Read4$ = ReadString$( filein )
+
+; Close the file once reading is finished
+CloseFile( fileout )
+
+Print "String Variables Read From File - mydata.dat "
+Print
+Print Read1
+Print Read2
+Print Read3
+Print Read4
+
+WaitKey()

Index

+ diff --git a/_release/help/commands/2d_commands/Rect.htm b/_release/help/commands/2d_commands/Rect.htm new file mode 100644 index 0000000..e74e6fa --- /dev/null +++ b/_release/help/commands/2d_commands/Rect.htm @@ -0,0 +1,25 @@ +Command: Rect   Rect x, y, width, height, solid  

Definition:

Draw a rectangle on the screen

Parameter Description:


x = x coordinate to begin drawing the rectangle
+y = y coordinate to begin drawing the rectangle
+width = how wide to make the rectangle in pixels
+height = how tall to make the rectangle in pixels
+solid = 0 or False for unfilled and 1 or True for filled

Command Description:

This command will draw a rectangle in the current drawing Color starting at the location specified. The last parameter determines if the rectangle is filled or just a 'box'.

Example:

; Flip/Backbuffer()/Rect Example
+
+; Set Graphics Mode
+Graphics 640,480
+
+; Go double buffering
+SetBuffer BackBuffer()
+
+; Setup initial locations for the box
+box_x = -20 ; negative so it will start OFF screen
+box_y = 100
+
+While Not KeyHit(1)
+Cls ; Always clear screen first
+Rect box_x,box_y,20,20,1 ; Draw the box in the current x,y location
+Flip ; Flip it into view
+box_x = box_x + 1 ; Move the box over one pixel
+If box_x = 640 Then box_x=-20 ; If it leaves the Right edge, reset its x location
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/RectsOverlap.htm b/_release/help/commands/2d_commands/RectsOverlap.htm new file mode 100644 index 0000000..4de82a7 --- /dev/null +++ b/_release/help/commands/2d_commands/RectsOverlap.htm @@ -0,0 +1,61 @@ +Command: RectsOverlap   RectsOverlap (rect1 X,rect1 Y,rect1 Width,rect1 Height,rect2 X,rect2 Y,rect2 Width,rect2 Height)  

Definition:

Tests to see if two rectangular areas are overlapping.

Parameter Description:


rect1 X = rectangle 1 x location
+rect1 Y = rectangle 1 y location
+rect1 Width = rectangle 1 width
+rect1 Height = rectangle 1 height
+rect2 X = rectangle 2 x location
+rect2 Y = rectangle 2 y location
+rect2 Width = rectangle 2 width
+rect2 Height = rectangle 2 height

Command Description:

This command will take two rectangular locations on the screen and see if they overlap. You will need to know the x, y, width, and height of both regions to test.
+
+I'm still trying to find a real good logical use for this command with all the other collision commands available to you like ImagesOverlap, ImagesCollide, ImageRectOverlap, and ImageRectCollide. My guess is that this is the absolute fastest possible collision method available and useful to those wishing to write their own collision routines.
+
+Unlike the other collision commands, there is no image to detect a collision with - simply one rectangular location overlapping another. You could probably use this command instead of the ImageRectOverlap command, as they are really basically doing the same thing (and I betcha this is faster).
+
+This would be useful for very easy-going 'Monkey Island' games to check the position of your pointer against a screen location (or 'hot spot') when pixel perfect accuracy (heck, image graphics in general) are not really needed.

Example:

; RectsOverlap Example
+; Flashing graphics warning! Gets hypnotic ...
+
+; Turn on graphics mode
+Graphics 640,480,16
+
+; Double buffering, and randomize the randomizer
+SetBuffer BackBuffer()
+SeedRnd MilliSecs()
+
+; Repeat the loop until ESC pressed
+While Not KeyHit(1)
+
+; Generate a random rectangle
+rect1X=Rnd(50,610)
+rect1Y=Rnd(50,430)
+rect1W=20
+rect1H=20
+
+; And another
+rect2X=Rnd(50,610)
+rect2Y=Rnd(50,430)
+rect2W=20
+rect2H=20
+; Clear the screen standard double buffering
+Cls
+; Draw our rectangle2 in random colors
+Color Rnd(255),Rnd(255),Rnd(255)
+Rect rect1X,rect1Y,rect1W,rect1H,0
+Color Rnd(255),Rnd(255),Rnd(255)
+Rect rect2X,rect2Y,rect2W,rect2H,0
+
+; Did they collide? If so, print a message and exit the loop!
+If RectsOverlap (rect1X,rect1Y,rect1W,rect1H,rect2X,rect2Y,rect2W,rect2H) Then
+Text 0,0, "Our boxes finally collided! Press a mouse button..."
+; We do a flip here to ensure the text message gets seen too!
+Flip
+Exit ; exit the While/Wend loop
+End If
+; Flip the rects into view, wait 1/10th of a sec, repeat
+Flip
+Delay 100
+Wend
+; Wait for a mouse click
+WaitMouse()
+; End our graphics mode
+EndGraphics

Index

+ diff --git a/_release/help/commands/2d_commands/RecvNetMsg.htm b/_release/help/commands/2d_commands/RecvNetMsg.htm new file mode 100644 index 0000000..d923cc1 --- /dev/null +++ b/_release/help/commands/2d_commands/RecvNetMsg.htm @@ -0,0 +1,45 @@ +Command: RecvNetMsg()   RecvNetMsg()   

Definition:

Boolean value denotes whether a network message has arrived.

Parameter Description:


None.

Command Description:

First off, this ONLY works when you have joined a network game via StartNetGame or JoinNetGame and you have created a player via CreateNetPlayer (you must create a player, even if it is just to lurk).
+
+This returns a TRUE value if a message was received, FALSE if none has been received. This will typically go inside a function that is constantly being checked for message and decode and handle them. You will use NetMsgType, NetMsgFrom, NetMsgTo, and NetMsgData$ to get the important information from the message and act on it.
+
+The example requires that you run it on a remote machine while the local computer runs the example in the SendNetMsg command.

Example:

; RecvNetMsg() example
+; --------------------
+; Run this program on the REMOTE computer to 'watch'
+; the activity of the SendNetMsg example. Run that
+; example on local machine.
+;
+; This program will tell you when a player involved in
+; the game hits a wall ...
+
+; We'll use this instead of JoinHostGame - make it easier
+StartNetGame()
+
+; Create a player - a player must be created to
+; receive mesages!
+playerID=CreateNetPlayer("Shane")
+
+; Loop and get status
+While Not KeyHit(1)
+
+; Check to see if we've received a message
+If RecvNetMsg() Then
+
+; if we did, let's figure out what type it is
+; we know it will be a user message, though
+msgType=NetMsgType()
+
+ ; 1-99 means a user message
+ If msgType>0 And msgType<100 Then
+
+ ; Let's see who the message was from
+ msgFrom=NetMsgFrom()
+
+ ; Let's get the message!
+ msgData$=NetMsgData$()
+
+ ; Print the message
+ Print msgData$
+ End If
+End If
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/Repeat.htm b/_release/help/commands/2d_commands/Repeat.htm new file mode 100644 index 0000000..c0e4ddf --- /dev/null +++ b/_release/help/commands/2d_commands/Repeat.htm @@ -0,0 +1,7 @@ +Command: Repeat   Repeat   

Definition:

First command of the REPEAT ... UNTIL loop.

Parameter Description:


None

Command Description:

The REPEAT ... UNTIL loop allows you to perform a series of commands until a specific condition has been met. This lets the conditional appear after the commands have been executed before checking, not before like the WHILE ... WEND loop does. In general, use REPEAT ... UNTIL if you know you will have the commands enclosed between them execute at least once.

Example:

; Repeat until user hits ESC key
+
+Repeat
+print "Press ESC to quit this!"
+Until KeyHit(1)
+

Index

+ diff --git a/_release/help/commands/2d_commands/Replace.htm b/_release/help/commands/2d_commands/Replace.htm new file mode 100644 index 0000000..6224dd5 --- /dev/null +++ b/_release/help/commands/2d_commands/Replace.htm @@ -0,0 +1,7 @@ +Command: Replace$   Replace$ (string$, find$, replace$)  

Definition:

Replace occurances of one string with another within a string.

Parameter Description:


string$ = any valid string variable
+find$ = any valid string
+replace$ = any valid string

Command Description:

This command will allow you to replace characters within a string with another. Use this to strip or convert letters out of your strings (like removing spaces or turning them into underscores). Pretty straight forward.

Example:

name$="Bill Wallace"
+Print "Your name before replacing: " + name$
+Print "Your name with L changed to B: " + Replace$(name$,"l","b")
+

Index

+ diff --git a/_release/help/commands/2d_commands/ResizeBank.htm b/_release/help/commands/2d_commands/ResizeBank.htm new file mode 100644 index 0000000..0252e9d --- /dev/null +++ b/_release/help/commands/2d_commands/ResizeBank.htm @@ -0,0 +1,21 @@ +Command: ResizeBank   ResizeBank bankhandle,new_size  

Definition:

Resizes a bank.

Parameter Description:


bankhandle = handle assigned to bank when created
+new_size = new size of bank in bytes

Command Description:

Resizes a previously created memory bank. Existing bank data is unmodified, but may be moved in memory. Also see CreateBank, CopyBank, and BankSize.

Example:

; BankSize, ResizeBank, CopyBank Example
+
+; create a bank
+bnkTest=CreateBank(5000)
+
+; Fill it with rand Integers
+For t = 0 To 4999
+PokeByte bnkTest,t,Rand(9)
+Next
+
+; Resize the bank
+ResizeBank bnkTest,10000
+
+; Copy the first half of the bank to the second half
+CopyBank bnkTest,0,bnkTest,5000,5000
+
+; Print final banksize
+Print BankSize(bnkTest)
+

Index

+ diff --git a/_release/help/commands/2d_commands/ResizeImage.htm b/_release/help/commands/2d_commands/ResizeImage.htm new file mode 100644 index 0000000..fd5bd94 --- /dev/null +++ b/_release/help/commands/2d_commands/ResizeImage.htm @@ -0,0 +1,24 @@ +Command: ResizeImage   ResizeImage image,width#,height#  

Definition:

Resizes an image to a new size using pixel values.

Parameter Description:


image = file handle for previously loaded image
+width# = new width in pixels
+height# = new height in pixels

Command Description:

Similar to ScaleImage, but uses pixel values instead of percentages. Use this command to resize an image previously loaded with LoadImage or LoadAnimImage.
+
+This is NOT intended for REAL TIME scaling of images! Precalculate your images before running your program, or you will likely see massively slow renderings of graphics.

Example:

; ResizeImage example
+
+; Set Graphics Mode
+Graphics 800,600,16
+
+; Randomize the random seed
+SeedRnd MilliSecs()
+
+; Load an image to tile (your location might vary)
+gfxBall=LoadImage("C:\Program Files\Blitz Basic\samples\ball.bmp")
+
+; Size it randomly from 300 to -300 both x and y
+ResizeImage gfxBall,Rnd(-300,300),Rnd(-300,300)
+
+; Wait for ESC to hit
+While Not KeyHit(1)
+DrawImage gfxball,Rnd(800),Rnd(600)
+VWait
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/Restore.htm b/_release/help/commands/2d_commands/Restore.htm new file mode 100644 index 0000000..03695e5 --- /dev/null +++ b/_release/help/commands/2d_commands/Restore.htm @@ -0,0 +1,29 @@ +Command: Restore   Restore label  

Definition:

Moves the Data pointer to the selected label.

Parameter Description:


label = any valid and exisiting label

Command Description:

When using Data statements to store large blocks of constants for use with the Read command, it is necessary to denote the start of the Data with a .Label. The Restore command moves the 'pointer' to the first Data statement's value following the designated label. You MUST use the Restore label command prior to using the Read command. This method allows you to store groups of Data statements non-sequentially. Its different (if you are used to other BASIC languages) but you will find it most flexible. See the example and other commands related to Data command.

Example:

; Sample of read/restore/data/label commands
+
+; Let's put the data pointer to the second data set
+Restore seconddata
+
+; Let's print them all to the screen
+For t = 1 To 10
+Read num ; Get the next data value in the data stack
+Print num
+Next
+
+; Now for the first set of data
+Restore firstdata
+
+; Let's print them all to the screen
+For t = 1 To 10
+Read num ; Get the next data value in the data stack
+Print num
+Next
+
+; this is the first set of data
+.firstdata
+Data 1,2,3,4,5,6,7,8,9,10
+
+; this is the second set of data
+.seconddata
+Data 11,12,13,14,15,16,17,18,19,20
+

Index

+ diff --git a/_release/help/commands/2d_commands/ResumeChannel.htm b/_release/help/commands/2d_commands/ResumeChannel.htm new file mode 100644 index 0000000..61d7451 --- /dev/null +++ b/_release/help/commands/2d_commands/ResumeChannel.htm @@ -0,0 +1,56 @@ + + +Command: ResumeChannel + + + + + + +

  ResumeChannel  

+ +

+Parameters:
+

+ + + + +
channel -- a music or sound channel previously allocated via LoadSound, PlayMusic, etc.
+

Description:
+
+ + + + +
ResumeChannel is used to continue the playing of a sound sample or music track on the given channel after you have temporarily halted playback on that channel (via PauseChannel).
+

Example (using ResumeChannel):
+
+ + + + + +
+Graphics 640, 480, 0, 2
+
+musicchannel = PlayMusic ("oohyeahbaby.mp3") ; Replace with a music file on your hard drive!
+
+Repeat
+
+    Print "Press a key to pause the music..."
+    WaitKey
+
+    PauseChannel musicchannel
+
+    Print "Press a key to continue the music..."
+    WaitKey
+
+    ResumeChannel musicchannel
+
+Until KeyHit (1)
+
+End
+
+ + diff --git a/_release/help/commands/2d_commands/Return.htm b/_release/help/commands/2d_commands/Return.htm new file mode 100644 index 0000000..ed3405a --- /dev/null +++ b/_release/help/commands/2d_commands/Return.htm @@ -0,0 +1,25 @@ +Command: Return   Return value  

Definition:

Immediately exits a function with an optional return value or resumes execution from a subroutine called with Gosub.

Parameter Description:


value = TRUE or FALSE

Command Description:

When called inside a FUNCTION structure, the RETURN command immediately returns from the function back to the calling code. An optional value may be returned. See FUNCTION for more information. Remember, after a Return, the remaining code of the Function is not executed. See example. + +It also returns execution from a subroutine called with the Gosub command.
+

Example:

; RETURN example
+
+; Set result to the return value of the function 'testme'
+result=testme(Rnd(0,10));
+
+; The program effectively ends here.
+
+; The actual function
+Function testme(test);
+
+; If the random number passed = 0
+If test=0 Then
+Print "Value was 0"
+Return False ; The Function ends immediately
+Else
+Print "The value was greater than 0"
+Return True ; The Function ends immediately
+End If
+Print "This line never gets printed!"
+End Function
+

Index

+ diff --git a/_release/help/commands/2d_commands/Right.htm b/_release/help/commands/2d_commands/Right.htm new file mode 100644 index 0000000..d562334 --- /dev/null +++ b/_release/help/commands/2d_commands/Right.htm @@ -0,0 +1,6 @@ +Command: Right$   Right$ (string$, length)  

Definition:

Return a specified number of characters from the rightmost side of a string.

Parameter Description:


string$ = any valid string variable
+length = the number of characters on the right to return
+

Command Description:

You can retrieve a certain number of characters from the rightmost side of a string. See the example.

Example:

name$="Bill Wallace"
+Print "The last 4 letters of your name are: " + Right$(name$,4)
+

Index

+ diff --git a/_release/help/commands/2d_commands/Rnd.htm b/_release/help/commands/2d_commands/Rnd.htm new file mode 100644 index 0000000..4366e2c --- /dev/null +++ b/_release/help/commands/2d_commands/Rnd.htm @@ -0,0 +1,4 @@ +Command: Rnd   Rnd (start#,end#)  

Definition:

Returns a random number.

Parameter Description:


start# = Lowest value to generate
+end# = Highest value to generate

Command Description:

This returns either a floating point or integer number of a random value falling between the start and end number. It returns an integer if assiged to an integer variable, and it returns a floating point value if assiged to a floating number variable. The start and end values are inclusive. Be sure to use the SeedRnd command to avoid generating the same random numbers every time the program is run.

Example:

y=Rnd(0,10) ; Set y to a random integer between 0 and 10
+y#=Rnd(0,5) ; Set y floating value between 0.000000 and 10.000000

Index

+ diff --git a/_release/help/commands/2d_commands/RotateImage.htm b/_release/help/commands/2d_commands/RotateImage.htm new file mode 100644 index 0000000..3e48772 --- /dev/null +++ b/_release/help/commands/2d_commands/RotateImage.htm @@ -0,0 +1,41 @@ +Command: RotateImage   RotateImage image,value#  

Definition:

Rotates the image counter-clockwise a specific angle.

Parameter Description:


image = variable containing the image handle
+value# = floating number from 0 to 350 degrees

Command Description:

I'm going to start this description off with:
+
+This command is not fast enough to render rotations in real time!
+
+Now, the purpose of this command is to rotate an image a specified number of degrees. Since it is slow, you will need to pre-calculate rotated images with this command. This means, before the program actually displays the images you rotate, you will want to rotate them ahead of time.
+
+This command automatically dithers/anti-aliases the rotated graphic image, so it might mess with your transparency. To avoid this issue, use the TFormFilter command. This will render the rotated images with bi-linear filtering.
+
+I'm going to end this command with:
+
+This command is not fast enough to render rotations in real time!
+

Example:

; RotateImage/TFormFilter Example
+
+; Turn on graphics mode
+Graphics 640,480,16
+
+; Change the 0 to a 1 to see the difference
+; between filter on and off.
+TFormFilter 0
+
+; Create new empty graphic to store our circle in
+gfxBox=CreateImage(50,50)
+
+; Draw the box image
+; Set drawing operations to point to our new empty graphic
+SetBuffer ImageBuffer(gfxBox)
+Color 255,0,0
+; Note the extra space between the box and the edge of the graphic
+Rect 10,10,30,30,1
+SetBuffer FrontBuffer()
+
+While Not KeyHit(1)
+; Make a copy of the image so we are always using a fresh one each time
+; we rotate it.
+gfxTemp=CopyImage(gfxBox)
+; Rotate it a random value and draw it at a random location
+RotateImage gfxTemp,Rnd(360)
+DrawImage gfxTemp,Rnd(640),Rnd(480)
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/RuntimeError.htm b/_release/help/commands/2d_commands/RuntimeError.htm new file mode 100644 index 0000000..f57c130 --- /dev/null +++ b/_release/help/commands/2d_commands/RuntimeError.htm @@ -0,0 +1,5 @@ +Command: RuntimeError   RuntimeError message$  

Definition:

Pops up an error dialog box with a specified message.

Parameter Description:


message$ = Any valid string

Command Description:

When doing your own error trapping, use this command to pop up a fatal error and close the program. You can specify the error message that is displayed.

Example:

;There was a problem - raise an error and quit
+
+RuntimeError "Installation corrupted. Please reinstall."
+

Index

+ diff --git a/_release/help/commands/2d_commands/Sar.htm b/_release/help/commands/2d_commands/Sar.htm new file mode 100644 index 0000000..906b1e7 --- /dev/null +++ b/_release/help/commands/2d_commands/Sar.htm @@ -0,0 +1,25 @@ +Command: Sar   Sar repetitions  

Definition:

Performs binary shift right.

Parameter Description:


repetitions = number of shifts to make right

Command Description:

This performs a left binary shift on the value the specified number of times. This basically is a faster method of dividing the value exponentially. By shifting right once, you are dividing the value by 2. By shifting right twice, you divide by 4, etc.
+
+Sar command varies from Shr whereas it fills blank bits shifted with copies of the sign bit, 0 for positive numbers and 1 for negative. +
+The usefulness of this command is basically faster math execution. Also see Shl.

Example:

; shl, shr, sar examples
+
+value = 100
+
+; multiple x 2
+Print "Shift 1 bit left; Value = " + value Shl 1
+; multiple x 4
+Print "Shift 2 bits left; Value = " + value Shl 2
+; multiple x 16
+Print "Shift 4 bits left; Value = " + value Shl 4
+; divide by 2
+Print "Shift 1 bit right; Value = " + value Shr 1
+; divide by 4
+Print "Shift 2 bits right; Value = " + value Shr 2
+; divide by 16
+Print "Shift 4 bits right; Value = " + value Shr 4
+
+Print "Shift by SAR 4 times = " + value Sar 4
+
+WaitKey()

Index

+ diff --git a/_release/help/commands/2d_commands/SaveBuffer.htm b/_release/help/commands/2d_commands/SaveBuffer.htm new file mode 100644 index 0000000..f723bef --- /dev/null +++ b/_release/help/commands/2d_commands/SaveBuffer.htm @@ -0,0 +1,9 @@ +Command: SaveBuffer   SaveBuffer (buffer,filename$)  

Definition:

Saves the selected video buffer to a bitmap file.

Parameter Description:


buffer = The buffer to save; FrontBuffer() or BackBuffer()
+filename$ = valid Windows path/filename
+

Command Description:

Typically, this is used to take a screen snapshot. This will save the screen buffer you specify to a .bmp file you specify. Remember, use the proper name for the buffer you wish to save; FrontBuffer() for the current visible screen, and BackBuffer() for the back or invisible drawing buffer. The filename must be valid Windows filename syntax.

Example:

; Save the screen when player pushes F10
+
+If KeyHit(10) Then
+SaveBuffer(FrontBuffer(),"screenshot.bmp")
+End If
+

Index

+ diff --git a/_release/help/commands/2d_commands/SaveImage.htm b/_release/help/commands/2d_commands/SaveImage.htm new file mode 100644 index 0000000..f15f9d1 --- /dev/null +++ b/_release/help/commands/2d_commands/SaveImage.htm @@ -0,0 +1,24 @@ +Command: SaveImage   SaveImage (image,bmpfile$,[frame] )  

Definition:

Saves an image to hard drive as a .bmp file.

Parameter Description:


image = variable handle to the image to save
+bmpfile$ = string with full path and filename to save to
+frame = optional; which frame of the image to save

Command Description:

Saves an image or one of its frames to hard drive. You will need an existing image to save off. This returns a 1 if the save was successful, 0 if not.

Example:

; SaveImage example
+
+; Set Graphics Mode
+Graphics 800,600,16
+
+; Load an image to tile (your location might vary)
+gfxBall=LoadImage("C:\Program Files\Blitz Basic\samples\ball.bmp")
+
+; Save the image to the c: drive ...
+ok=SaveImage (gfxBall,"c:\newball.bmp")
+
+; Print results
+If ok=1 Then
+Print "Save successful!"
+Else
+Print "There was an error saving!"
+End If
+
+; Wait for ESC to hit
+While Not KeyHit(1)
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/ScaleImage.htm b/_release/help/commands/2d_commands/ScaleImage.htm new file mode 100644 index 0000000..1a3d728 --- /dev/null +++ b/_release/help/commands/2d_commands/ScaleImage.htm @@ -0,0 +1,25 @@ +Command: ScaleImage   ScaleImage image,xscale#,yscale#  

Definition:

Scales an image to a new size using percentages.

Parameter Description:


image = file handle variable to a previously loaded image
+xscale# = the amount to scale the image horizontally
+yscale# = the amount to scale the image vertically
+

Command Description:

Use this command to rescale an image to a new size using a floating point percentage (1.0 = 100%, 2.0 = 200%, etc). Using a negative value perform image flipping. You must've previously loaded the image with LoadImage or LoadAnimImage.
+
+This is NOT intended for REAL TIME scaling of images! Precalculate your images before running your program, or you will likely see massively slow renderings of graphics.

Example:

; ScaleImage example
+
+; Set Graphics Mode
+Graphics 800,600,16
+
+; Randomize the random seed
+SeedRnd MilliSecs()
+
+; Load an image to tile (your location might vary)
+gfxBall=LoadImage("C:\Program Files\Blitz Basic\samples\ball.bmp")
+
+; Scale it randomly from 50% to 150% both x and y
+ScaleImage gfxBall,Rnd(-2.0,2.0),Rnd(-2.0,2.0)
+
+; Wait for ESC to hit
+While Not KeyHit(1)
+DrawImage gfxball,Rnd(800),Rnd(600)
+VWait
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/ScanCodes.htm b/_release/help/commands/2d_commands/ScanCodes.htm new file mode 100644 index 0000000..35fd826 --- /dev/null +++ b/_release/help/commands/2d_commands/ScanCodes.htm @@ -0,0 +1,729 @@ +Command: ScanCodes   ScanCodes   

Definition:

A complete listing of scancodes.

Parameter Description:


None.

Command Description:

This isn't a command at all, but rather a complete listing of key scancodes for use with the KeyHit and KeyDown commands.

Example:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KEYBOARD KEYSCANCODECOMMENTS
ESCAPE1 
12 
23 
34 
45 
56 
67 
78 
89 
910 
011 
Minus (-)12On Main Keyboard
Equals (=)13 
Backspace14Backspace key
Tab15 
Q16 
W17 
E18 
R19 
T20 
Y21 
U22 
I23 
O24 
P25 
Left Bracket ([)26 
Right Bracket (])27 
Return/Enter28Return/Enter on Main Keyboard
Left Control29 
A30 
S31 
D32 
F33 
G34 
H35 
J36 
K37 
L38 
Semi-Colon (;)39 
Apostrophe (')40 
Grave41 Accent Grave
Left Shift42 
Backslash (\)43 
Z44 
X45 
C46 
V47 
B48 
N49 
M50 
Comma (,)51 
Period (.)52On Main keyboard
Slash (/)53On Main Keyboard
Right Shift54 
Multiply (*)55On Numeric Keypad
Left Alt/Menu56 
Space57 
Capital58 
F159 
F260 
F361 
F462 
F563 
F664 
F765 
F866 
F967 
F1068 
NumLock69 
Scroll Lock70 
NumPad 771 
NumPad 872 
NumPad 973 
Subtract (-)74On Numeric Keypad
NumPad 475 
NumPad 576 
NumPad 677 
Add (+)78On Numeric Keypad
NumPad 179 
NumPad 280 
NumPad 381 
NumPad 082 
Decimal (.)83On Numeric Keypad
OEM_10286On UK/Germany Keyboards
F1187 
F1288 
F13100(NEC PC98)
F14101(NEC PC98)
F15102(NEC PC98)
Kana112Japanese Keyboard
ABNT_C1115/? on Portugese (Brazilian) keyboards
Convert121Japanese Keyboard
NoConvert123Japanese Keyboard
Yen125Japanese Keyboard
ABNT_C2126Numpad . on Portugese (Brazilian) keyboards
Equals141= on numeric keypad (NEC PC98)
PrevTrack144Previous Track (DIK_CIRCUMFLEX on Japanese keyboard)
AT145(NEC PC98)
Colon (:)146(NEC PC98)
Underline147(NEC PC98)
Kanji148Japanese Keyboard
Stop149(NEC PC98)
AX150Japan AX
Unlabeled151(J3100)
Next Track153Next Track
Enter156ENTER on Numeric Keypad
Right Control157 
Mute160Mute
Calculator161Calculator
Play/Pause162Play/Pause
Media Stop164Media Stop
Volume Down174Volume -
Volume Up176Volume +
Web Home178Web Home
Comma (,)179On Numeric Keypad (NEX PC98)
Divide (/)181On Numeric Keypad
SysReq183 
Right Alt/Menu184Right Alt
Pause197Pause
Home199Home on Arrow Pad
Up200Up Arrow on Arrow Keypad
Page Up/Prior201Page Up on Arrow Keypad
Left203Left Arrow on Arrow Keypad
Right205Right Arrow on Arrow Keypad
End207End Key on Arrow Keypad
Down208Down Key on Arrow Keypad
Next209Next Key on Arrow Keypad
Insert210Insert Key on Arrow Keypad
Delete211Delete Key on Arrow Keypad
Left Windows219Left Windows Key
Right Windows220Right Windows Key
Apps221Apps Menu Key
Power222System Power
Sleep223System Sleep
Wake227System Wake
Web Search229 
Web Favorites230 
Web Refresh231 
Web Stop232 
Web Forward233 
Web Back234 
My Computer235 
Mail 236 
Media Select237 
+

Index

+ diff --git a/_release/help/commands/2d_commands/ScanLine.htm b/_release/help/commands/2d_commands/ScanLine.htm new file mode 100644 index 0000000..c65ea4d --- /dev/null +++ b/_release/help/commands/2d_commands/ScanLine.htm @@ -0,0 +1,7 @@ +Command: ScanLine()   ScanLine()   

Definition:

Returns the scanline location of the drawing operation.

Parameter Description:


None.

Command Description:

If for some reason you need to know the current scanline location of the drawing system, here is how you get it.

Example:

; ScanLine() Example
+
+While Not KeyHit(1)
+Print ScanLine()
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/SeedRnd.htm b/_release/help/commands/2d_commands/SeedRnd.htm new file mode 100644 index 0000000..ecaf79f --- /dev/null +++ b/_release/help/commands/2d_commands/SeedRnd.htm @@ -0,0 +1,2 @@ +Command: SeedRnd   SeedRnd seed  

Definition:

Sets the random number generator with a seed value.

Parameter Description:


seed = valid integer number

Command Description:

Computer random number generators are not truly random. They generate numbers based on a seed value (an integer number). If you 'seed' the random number generator with the same seed, it will always generate the same set of numbers. Use this command to ensure you get a good set of numbers. Usually you set the seed value to a timer or system clock value to ensure that each time the program is run, a new value is seeded. Look at the example for normal usage of this command.

Example:

SeedRnd Millisecs() ; Seed the randomizer with the current system time in milliseconds.

Index

+ diff --git a/_release/help/commands/2d_commands/SeekFile.htm b/_release/help/commands/2d_commands/SeekFile.htm new file mode 100644 index 0000000..3ba6a36 --- /dev/null +++ b/_release/help/commands/2d_commands/SeekFile.htm @@ -0,0 +1,68 @@ +Command: SeekFile   SeekFile (filehandle, offset)  

Definition:

Moves the current pointer inside an open file to a new location.

Parameter Description:


filehandle = the variable returned by the Readfile, WriteFile or OpenFile when the file was opened. +The value returned is the offset from the start of the file. ( 0 = Start of the file )

Command Description:

This command allows the position in a file to be changed. This allows random access to data within files and can be used with files opened by ReadFile, WriteFile and OpenFile. Note, the offset is the number of bytes from the start of the file, where the first byte is at offset 0. It is +important to take account of the size of the data elements in your file.
+
+For instance Integers are 4 bytes long so the first integer in the file is at offset 0 and the second at offset 4. If you write Custom Data types out then you must work out haw many bytes each takes so that you can move about the file correctly. Seeking beyond the end of a file does not generate an error but the data is not read or written to the file, and may course unknown side effects.
+
+By using FilePos and SeekFile the position within the file that is being read or written can be determined and also changed. This allows a file to be read and updated without having to make a new copy of the file or working through the whole file sequentially. This could be useful if you have +created a database file and you want to find and update just a few records within it. It is also possible to create an index file that contains pointers to where each record starts in a data file.
+
+To calculate an offset you need to know how long each data element is; Offset = Wanted_Element * size_of_element - size_of_element
+
+For example a file of integers which are 4 bytes long is calculated by:
+
+The 7th integer is at offset 7 * 4 - 4 i.e. 24
+
+Note, extreme care needs to be exercised when updating files that contain strings since these are not fixed in length.
+
+See also:
+ReadByte, ReadShort, ReadInt, ReadFloat, ReadString$, ReadLine$, WriteByte, WriteShort, WriteInt, WriteFloat, WriteShort, WriteString, WriteLine, ReadFile, WriteFile, OpenFile, CloseFile, Eof, FileType, FilePos, SeekFile

Example:

; Changing part of a file using OpenFile, SeekFile, FilePos
+
+; Open/create a file to Write
+fileout = WriteFile("mydata.dat")
+
+; Write the information to the file
+WriteInt( fileout, 100 )
+WriteInt( fileout, 200 )
+WriteInt( fileout, 300 )
+WriteInt( fileout, 400 )
+WriteInt( fileout, 500 )
+
+; Close the file
+CloseFile( fileout )
+
+DisplayFile( "The file as originally written", mydata.dat" )
+
+Print "Data read in random order"
+; Open the file to read just the 4th and 2nd elements from
+
+file = OpenFile("mydata.dat")
+
+; read and print the 4th integer ie 4*4-4 = 12 byte from the start of the file
+SeekFile( file, 12 ) ; Move to the found location
+Number = ReadInt( file )
+Print Number
+
+; read and print the 2th integer ie 2*4-4 = 4 bytes from the start of the file
+SeekFile( file, 4 ) ; Move to the found location
+Number = ReadInt( file )
+Print Number
+
+CloseFile( file )
+
+Waitkey()
+End ; End of program
+
+; **** Function Definitions follow ****
+; Read the file and print it
+Function DisplayFile( Tittle$, Filename$ )
+ Print tittle$
+ file = ReadFile( Filename$ )
+ While Not Eof( file )
+ Number = ReadInt( file )
+ Print Number
+ Wend
+ CloseFile( file )
+ Print
+End Function

Index

+ diff --git a/_release/help/commands/2d_commands/Select.htm b/_release/help/commands/2d_commands/Select.htm new file mode 100644 index 0000000..882780d --- /dev/null +++ b/_release/help/commands/2d_commands/Select.htm @@ -0,0 +1,30 @@ +Command: Select   Select variable  

Definition:

Executes commands based on the value of a provided variable.

Parameter Description:


variable - any valid variable

Command Description:

This command allows you to set up a selection structure that, based on the value of the variable you feed it, will execute different commands in different CASEs. You can also specify a DEFAULT set of commands to happen if NONE of the CASEs are met. The selection structure is ended with an END SELECT command.
+
+This selection structure removes the need for large nested IF/THEN condition checking. See the example for more.

Example:

; SELECT/CASE/DEFAULT/END SELECT Example
+
+; Assign a random number 1-10
+mission=Rnd(1,10)
+
+; Start the selection process based on the value of 'mission' variable
+Select mission
+
+; Is mission = 1?
+Case 1
+Print "Your mission is to get the plutonium and get out alive!"
+
+; Is mission = 2?
+Case 2
+Print "Your mission is to destroy all enemies!"
+
+; Is mission = 3?
+Case 3
+Print "Your mission is to steal the enemy building plans!"
+
+; What do do if none of the cases match the value of mission
+Default
+Print "Missions 4-10 are not available yet!"
+
+; End the selection process
+End Select
+

Index

+ diff --git a/_release/help/commands/2d_commands/SendNetMsg.htm b/_release/help/commands/2d_commands/SendNetMsg.htm new file mode 100644 index 0000000..d38a46e --- /dev/null +++ b/_release/help/commands/2d_commands/SendNetMsg.htm @@ -0,0 +1,94 @@ +Command: SendNetMsg   SendNetMsg type,data$,from,to,reliable  

Definition:

Sends a message during a network game.

Parameter Description:


type = value 1-99
+data$ = string containing message to send
+from = player ID of the sender
+to = player ID of the recipient (0=broadcast)
+reliable = flag for sending message reliably

Command Description:

First off, this ONLY works when you have joined a network game via StartNetGame or JoinNetGame and you have created a player via CreateNetPlayer (you must create a player, even if it is just to lurk).
+
+This is probably the most complicated of the networking commands. This what you use to actually send a message to one or all of the players on the network game. The other players will use RecvNetMsg() to intercept your message. +
+The TYPE parameter is a number from 1 to 99. These values are denoted as 'user messages'.
+
+The Data$ parameter is the actual string that contains the message you want to send. Helpful to know that in order to keep traffic low, you will want to combine details of a message into a single message instead of sending multiple messages with a single element. For example, you might want to send X, Y, and FRAME in a single string like "200,100,4" and parse it out at the recipient's end.
+
+FROM is the player's ID that is sending the message. This is the value returned from the CreateNetPlayer() command.
+
+TO is the player's ID you wish to send the message to. A default value of 0 will broadcast to ALL players.
+
+The RELIABLE flag will put a priority on the message and it will ensure there is no packet loss in the delivery. However, it is at least 3 times slower than a regular non-reliable message.
+
+The example requires that you run it on the local machine while the remote computer runs the example in the RecvNetMsg() command.

Example:

; SendNetMsg example
+; ------------------
+; Run this example on the local computer
+; run the example for RecvNetMsg() on a remote computer
+
+; Graphics mode with double buffering
+Graphics 640,480,16
+SetBuffer BackBuffer()
+
+; Create a network game with NO requester
+joinStatus=HostNetGame("ShaneGame")
+
+; A type to hold all the player's information
+Type multi
+ Field x
+ Field y
+ Field id
+ Field name$
+ Field xspeed
+ Field boxColor
+End Type
+
+; make sure the game started ok...
+If joinStatus=2 Then
+ Print "Hosted game started... "
+Else
+ Print "Hosted game could not be started!"
+End
+End If
+
+; Create 5 local players using TYPEs
+For t = 1 To 5
+; New type instance
+player.multi = New Multi
+; Assign the ID field with the created player ID and name him
+player\ID=CreateNetPlayer("Player" + t)
+
+; if the player was created ok ... assign some random parameters
+If player\ID <> 0 Then
+player\name$="Player" + t
+player\x = Rand(640)
+player\y = Rand(480)
+player\boxColor = Rand(255)
+player\xspeed = Rand(1,5)
+; Print some text results
+Print "Player " + t + " has joined the game with ID=" + player\ID
+Else
+Print "The player couldn't join! Aborting!"
+End If
+Next
+
+; We've got them all! Wait for a key
+Print "All local players are joined! Press a key ..."
+WaitKey()
+
+; Loop this routine
+While Not KeyHit(1)
+Cls
+; for each of the players, update their locations on the screen
+For player = Each multi
+Color player\boxColor,player\boxColor,player\boxColor
+Rect player\x,player\y,10,10,1
+Text player\x-10,player\y-15,player\name$
+player\x = player\x + player\xspeed
+If player\x > 640 Or player\x < 0 Then
+player\xspeed=-player\xspeed
+message$="Player ID #" + player\ID + " hit a wall!"
+; Send a broadcast message if a player rebounds off the wall
+; this message will show up on the remote machine
+SendNetMsg Rand(1,99),message$,player\id,0
+End If
+Next
+Flip
+Wend
+End

Index

+ diff --git a/_release/help/commands/2d_commands/SetBuffer.htm b/_release/help/commands/2d_commands/SetBuffer.htm new file mode 100644 index 0000000..54793e1 --- /dev/null +++ b/_release/help/commands/2d_commands/SetBuffer.htm @@ -0,0 +1,2 @@ +Command: SetBuffer   SetBuffer buffer  

Definition:

Used to set the current drawing buffer.

Parameter Description:


Buffers can either be the FrontBuffer(), BackBuffer() or an ImageBuffer() Default buffer is the FrontBuffer

Command Description:

Use this command to set the current drawing buffer. If not used the default buffer, FrontBuffer() is used. SetBuffer also resets the origin to 0,0 and the Viewpoint to the width and height of the buffer.

Example:

SetBuffer FrontBuffer() ;Sets FrontBuffer as the current drawing buffer

Index

+ diff --git a/_release/help/commands/2d_commands/SetFont.htm b/_release/help/commands/2d_commands/SetFont.htm new file mode 100644 index 0000000..7986de3 --- /dev/null +++ b/_release/help/commands/2d_commands/SetFont.htm @@ -0,0 +1,46 @@ +Command: SetFont   SetFont fonthandle  

Definition:

Sets a previously loaded font active for writing operations.

Parameter Description:


fontname = string containing font name
+height = font height desired
+bold = set to TRUE to load font as BOLD
+italic = set to TRUE to load font as ITALIC
+underlined set to TRUE to load font as UNDERLINED
+

Command Description:

This activates a TrueType font previously loaded into memory (though the LoadFont command) for future use with printing commands such as Text.
+
+Note: Blitz doesn't work with SYMBOL fonts, like Webdings and WingDings.
+
+Be sure to free the memory used by the font went you are done using the FreeFont command.

Example:

; LoadFont/SetFont/FreeFont example
+
+; enable graphics mode
+Graphics 800,600,16
+
+; Set global on font variables
+Global fntArial,fntArialB,fntArialI,fntArialU
+
+;Load fonts to a file handle variables
+fntArial=LoadFont("Arial",24,False,False,False)
+fntArialB=LoadFont("Arial",18,True,False,False)
+fntArialI=LoadFont("Arial",32,False,True,False)
+fntArialU=LoadFont("Arial",14,False,False,True)
+
+; set the font and print text
+SetFont fntArial
+Text 400,0,"This is just plain Arial 24 point",True,False
+
+SetFont fntArialB
+Text 400,30,"This is bold Arial 18 point",True,False
+
+SetFont fntArialI
+Text 400,60,"This is italic Arial 32 point",True,False
+
+SetFont fntArialU
+Text 400,90,"This is underlined Arial 14 point",True,False
+
+; Standard 'wait for ESC' from user
+While Not KeyHit(1)
+Wend
+
+; Clear all the fonts from memory!
+FreeFont fntArial
+FreeFont fntArialB
+FreeFont fntArialI
+FreeFont fntArialU

Index

+ diff --git a/_release/help/commands/2d_commands/SetGfxDriver.htm b/_release/help/commands/2d_commands/SetGfxDriver.htm new file mode 100644 index 0000000..e9078fa --- /dev/null +++ b/_release/help/commands/2d_commands/SetGfxDriver.htm @@ -0,0 +1,22 @@ +Command: SetGfxDriver   SetGfxDriver index  

Definition:

Set the graphics driver for use with graphics commands.

Parameter Description:


index = index number obtained with CountGfxDrivers command

Command Description:

Some computers may have more than one video card and/or video driver installed (a good example is a computer system with a primary video card and a Voodoo2 or other pass-through card).
+
+Once you know how many drivers there are using the CountGfxDrivers(), you can iterate through them with GfxDriverName$ and display them for the user to choose from. Once the user has chosen (or you decide), you can set the graphics driver with this command.
+
+Normally, this won't be necessary with 2D programming.

Example:

; GfxDriver Examples
+
+; Count how many drivers there are
+totalDrivers=CountGfxDrivers()
+Print "Choose a driver to use:"
+
+; Go through them all and print their names (most people will have only 1)
+For t = 1 To totalDrivers
+Print t+") " + GfxDriverName$(t)
+Next
+
+; Let the user choose one
+driver=Input("Enter Selection:")
+
+; Set the driver!
+SetGfxDriver driver
+Print "Your driver has been selected!"

Index

+ diff --git a/_release/help/commands/2d_commands/Sgn.htm b/_release/help/commands/2d_commands/Sgn.htm new file mode 100644 index 0000000..7d3a1d4 --- /dev/null +++ b/_release/help/commands/2d_commands/Sgn.htm @@ -0,0 +1,7 @@ +Command: Sgn   Sgn (number)  

Definition:

Returns the sign of the number argument.

Parameter Description:


number=float or integer

Command Description:

This function is used to determine whether a number or value is greater than 0, equal to 0 or less than 0. Note: non-integer values return the sign to 7 signigicant figures. (e.g. -1.000000)

Example:

Print Sgn(10) ; prints 1
+Print Sgn(5.5) ; prints 1.000000
+Print Sgn(0) ; prints 0
+Print Sgn(0.0) ; prints 0.000000
+Print Sgn(-5.5) ; prints -1.000000
+Print Sgn(-10) ; prints -1

Index

+ diff --git a/_release/help/commands/2d_commands/Shl.htm b/_release/help/commands/2d_commands/Shl.htm new file mode 100644 index 0000000..0ade4e8 --- /dev/null +++ b/_release/help/commands/2d_commands/Shl.htm @@ -0,0 +1,23 @@ +Command: Shl   Shl repetitions  

Definition:

Performs binary shift left.

Parameter Description:


repetitions = number of shifts to make left

Command Description:

This performs a left binary shift on the value the specified number of times. This basically is a faster method of multiplying the value exponentially. By shifting left once, you are multiplying the value by 2. By shifting left twice, you multiple by 4, etc.
+
+The usefulness of this command is basically faster math execution.

Example:

; shl, shr, sar examples
+
+value = 100
+
+; multiple x 2
+Print "Shift 1 bit left; Value = " + value Shl 1
+; multiple x 4
+Print "Shift 2 bits left; Value = " + value Shl 2
+; multiple x 16
+Print "Shift 4 bits left; Value = " + value Shl 4
+; divide by 2
+Print "Shift 1 bit right; Value = " + value Shr 1
+; divide by 4
+Print "Shift 2 bits right; Value = " + value Shr 2
+; divide by 16
+Print "Shift 4 bits right; Value = " + value Shr 4
+
+Print "Shift by SAR 4 times = " + value Sar 4
+
+WaitKey()

Index

+ diff --git a/_release/help/commands/2d_commands/ShowPointer.htm b/_release/help/commands/2d_commands/ShowPointer.htm new file mode 100644 index 0000000..f97de08 --- /dev/null +++ b/_release/help/commands/2d_commands/ShowPointer.htm @@ -0,0 +1,47 @@ + + +Command: ShowPointer + + + + + + +

  ShowPointer  

+ +

+Parameters:
+

+ + + + +
n/a
+

Description:
+
+ + + + +
ShowPointer is for use in windowed display modes, and simply shows the Windows pointer after it's been hidden (via HidePointer). It has no effect in full-screen modes.
+

Example:
+
+ + + + + +
+Graphics 640, 480, 0, 2
+
+HidePointer
+
+Print "Move pointer over window and press a key..."
+WaitKey
+
+ShowPointer
+
+Delay 1000
+
+ + diff --git a/_release/help/commands/2d_commands/Shr.htm b/_release/help/commands/2d_commands/Shr.htm new file mode 100644 index 0000000..fba9b53 --- /dev/null +++ b/_release/help/commands/2d_commands/Shr.htm @@ -0,0 +1,23 @@ +Command: Shr   Shr repetitions  

Definition:

Performs binary shift right.

Parameter Description:


repetitions = number of shifts to make right

Command Description:

This performs a left binary shift on the value the specified number of times. This basically is a faster method of dividing the value exponentially. By shifting right once, you are dividing the value by 2. By shifting right twice, you divide by 4, etc.
+
+The usefulness of this command is basically faster math execution.

Example:

; shl, shr, sar examples
+
+value = 100
+
+; multiple x 2
+Print "Shift 1 bit left; Value = " + value Shl 1
+; multiple x 4
+Print "Shift 2 bits left; Value = " + value Shl 2
+; multiple x 16
+Print "Shift 4 bits left; Value = " + value Shl 4
+; divide by 2
+Print "Shift 1 bit right; Value = " + value Shr 1
+; divide by 4
+Print "Shift 2 bits right; Value = " + value Shr 2
+; divide by 16
+Print "Shift 4 bits right; Value = " + value Shr 4
+
+Print "Shift by SAR 4 times = " + value Sar 4
+
+WaitKey()

Index

+ diff --git a/_release/help/commands/2d_commands/Sin.htm b/_release/help/commands/2d_commands/Sin.htm new file mode 100644 index 0000000..0805a6c --- /dev/null +++ b/_release/help/commands/2d_commands/Sin.htm @@ -0,0 +1,26 @@ +Command: Sin   Sin (Number)  

Definition:

The Sin command, or Sinus, is a trigonometry function, that returns a number between -1 and 1. This value represents the "Y" coordinate of the point a

Parameter Description:


number=float or integer representing a value in degree

Command Description:

This command is used for translating angle values to coordinates, but there are a few things you have to take into account when doing it. First of all the Sin() command assumes the point you want is at radius 1 (pixel), next it uses a circle where 0 degrees is due EAST and increases in a counterclockwise direction, then you've got to take into account the the Y axis on a computer screen is up-side-down compared to a normal mathematical coordinate system.
+
+See also ASin, Cos, ACos, Tan, Atan, ATan2

Example:

Graphics 640,480; Change to graphics mode, nothing tricky yet.
+Origin 320,240 ; Move the point of orign for all drawing commands to the middle of the screen.
+
+For degrees=0 To 359; Step though all the degrees in a circle (360 in all)
+Delay(5); Wait 5 milli secsonds.
+
+; The next line calculates the Y coordinate of the point of the circle using the Sin
+; command, and multiplies it by 100 (to get a larger radius, try and change it).
+y=Sin(degrees)*100
+
+y=-y ; Invert Y coordinate to represent it properly on screen.
+
+; The next line calculates the X coordinate of the point of the circle using the Cos,
+; command, and multiplies it by 100 (to get a larger radius, try and change it).
+x=Cos(degrees)*100
+
+Rect x,y,1,1 ; Draw the current point on the circle.
+
+Next ; Give us another angle
+
+MouseWait ; Wait for the mouse.
+End ; Terminate the program.
+

Index

+ diff --git a/_release/help/commands/2d_commands/SoundPan.htm b/_release/help/commands/2d_commands/SoundPan.htm new file mode 100644 index 0000000..02c85ba --- /dev/null +++ b/_release/help/commands/2d_commands/SoundPan.htm @@ -0,0 +1,11 @@ +Command: SoundPan   SoundPan sound_variable,pan#  

Definition:

Pans the sound effect right, center, or left.

Parameter Description:


sound_variable = any valid sound variable previously created with the LoadSound command.
+pan# = floating point number from -1 (left) to 0 (center) to 1 (right)

Command Description:

Use this command to pan your sound effect between the left and right speakers (or restore the panning to the center). Use this for cool panning stereo sounds during your game.

Example:

; Load sound sample
+sndDeath=LoadSound("audio\death.wav")
+
+; Pan sound effect half to the left
+SoundPan sndDeath,-.5
+
+; Play sound
+PlaySound sndDeath
+

Index

+ diff --git a/_release/help/commands/2d_commands/SoundPitch.htm b/_release/help/commands/2d_commands/SoundPitch.htm new file mode 100644 index 0000000..be29982 --- /dev/null +++ b/_release/help/commands/2d_commands/SoundPitch.htm @@ -0,0 +1,18 @@ +Command: SoundPitch   SoundPitch sound_variable, hertz  

Definition:

Alter the pitch of a sound.

Parameter Description:


sound_variable = any valid sound variable previously created with the LoadSound command.
+
+hertz = valid playback hertz speed (up to 44000 hertz).

Command Description:

Alters the pitch of a sound previously loaded with the LoadSound command. By changing the pitch, you can often reuse sounds for different uses or to simulate a 'counting up/down' sound. To make the sound 'higher pitched', increase the hertz. Conversely, decreasing the hertz will 'lower' the pitch. Note: this is in relation to the original hertz of the sound.

Example:

; Load the sound (11,000 hertz)
+
+snd1Up = LoadSound("audio\oneup.wav")
+
+; Play the sound normally
+PlaySound snd1Up
+
+; Change the pitch UP and play it
+SoundPitch snd1Up, 22000
+PlaySound snd1Up
+
+; Change the pitch down and play it
+SoundPitch snd1Up, 8000
+PlaySound snd1Up
+

Index

+ diff --git a/_release/help/commands/2d_commands/SoundVolume.htm b/_release/help/commands/2d_commands/SoundVolume.htm new file mode 100644 index 0000000..a9d4ec2 --- /dev/null +++ b/_release/help/commands/2d_commands/SoundVolume.htm @@ -0,0 +1,13 @@ +Command: SoundVolume   SoundVolume sound_variable,volume#  

Definition:

Alter the volume level of a sound effect.

Parameter Description:


sound_variable = any valid sound variable previously created with the LoadSound command.
+volume# = floating point number from 0 (silence) to 1 (full volume)

Command Description:

Alter the playback volume of your sound effect with this command. This command uses a floating point number from 0 to 1 to control the volume level.
+
+Please see ChannelVolume for more options!

Example:

; Load sound sample
+sndDeath=LoadSound("audio\death.wav")
+
+; Change volume level to half
+SoundVolume sndDeath,.5
+
+; Play sound
+PlaySound sndDeath
+

Index

+ diff --git a/_release/help/commands/2d_commands/Sqr.htm b/_release/help/commands/2d_commands/Sqr.htm new file mode 100644 index 0000000..fdefd31 --- /dev/null +++ b/_release/help/commands/2d_commands/Sqr.htm @@ -0,0 +1,7 @@ +Command: Sqr   Sqr (float)  

Definition:

Returns the square root of a given value.

Parameter Description:


float = any floating point number (integers are converted on the fly)

Command Description:

This command will return the square root of a specified value. The value returned is a floating point number.

Example:

; sqr# example
+
+value=25
+
+print "The square root of our value is: " + sqr#(value)
+waitkey()

Index

+ diff --git a/_release/help/commands/2d_commands/StartNetGame.htm b/_release/help/commands/2d_commands/StartNetGame.htm new file mode 100644 index 0000000..eaf83bf --- /dev/null +++ b/_release/help/commands/2d_commands/StartNetGame.htm @@ -0,0 +1,14 @@ +Command: StartNetGame()   StartNetGame()   

Definition:

Starts a network game.

Parameter Description:


None.

Command Description:

Displays a Windows dialog with option to join or start a new multiplayer network game, via modem, serial connection or TCP/IP (Internet).
+
+Note: This command must be started before any other network commands, otherwise they will fail.
+
+A return value of 0 indicates failure, 1 means a game was joined and 2 means a game was created and is being hosted on the local machine.

Example:

newGame = StartNetGame()
+; Check the status of the new game.
+If newGame = 0 Then
+ print "Could not start or join net game."
+ElseIf newGame = 1
+ print "Successfully joined the network game."
+ElseIf newGame = 2
+ print "A new network game was started."
+EndIf

Index

+ diff --git a/_release/help/commands/2d_commands/Step.htm b/_release/help/commands/2d_commands/Step.htm new file mode 100644 index 0000000..9b61d7b --- /dev/null +++ b/_release/help/commands/2d_commands/Step.htm @@ -0,0 +1,2 @@ +Command: Step   Step   

Definition:

Set an increment for the FOR ... NEXT loop.

Parameter Description:


None

Command Description:

Use this to tell your FOR ... NEXT loop to increment a certain value each pass through the loop. STEP 1 is assumed and need not be declared. STEP 2 would skip every other value, STEP 3 would skip every third value, etc.

Example:

; Print 1 through 100, by tens

For t = 1 To 100 Step 10
Print t
Next

Index

+ diff --git a/_release/help/commands/2d_commands/Stop.htm b/_release/help/commands/2d_commands/Stop.htm new file mode 100644 index 0000000..c876987 --- /dev/null +++ b/_release/help/commands/2d_commands/Stop.htm @@ -0,0 +1,4 @@ +Command: Stop   Stop   

Definition:

Halts program execution during debugging.

Parameter Description:


None

Command Description:

If running the program in debug mode, it this command halts the program and returns you to the editor where you can then step through your code, view variables, etc.

Example:

; Halt the program and go to the editor/debugger
+
+Stop

Index

+ diff --git a/_release/help/commands/2d_commands/StopChannel.htm b/_release/help/commands/2d_commands/StopChannel.htm new file mode 100644 index 0000000..5526407 --- /dev/null +++ b/_release/help/commands/2d_commands/StopChannel.htm @@ -0,0 +1,44 @@ +Command: StopChannel   StopChannel channel_handle  

Definition:

Stops a playing sound channel.

Parameter Description:


channel_handle = variable assigned to the channel when played
+

Command Description:

This command replaced StopSound in the latter versions of Blitz Basic.
+
+Once you have a sound playing, and a channel variable attached to it, you use this command to stop the sound. This works for all sound channel types, including MP3, WAV, MIDI, and CD track playback.

Example:

; Channel examples
+
+Print "Loading sound ..."
+; Load the sample - you'll need to point this to a sound on your computer
+; For best results, make it about 5-10 seconds...
+sndWave=LoadSound("level1.wav")
+; Prepare the sound for looping
+LoopSound sndWave
+
+chnWave=PlaySound(sndWave)
+
+Print "Playing sound for 2 seconds ..."
+Delay 2000
+
+Print "Pausing sound for 2 seconds ..."
+PauseChannel chnWave
+Delay 2000
+
+Print "Restarting sound ..."
+ResumeChannel chnWave
+Delay 2000
+
+Print "Changing Pitch of sound ..."
+;StopChannel chnWave
+ChannelPitch chnWave, 22000
+Delay 2000
+
+Print "Playing new pitched sound ..."
+Delay 2000
+
+Print "Left speaker only"
+ChannelPan chnWave,-1
+Delay 2000
+
+Print "Right speaker only"
+ChannelPan chnWave,1
+Delay 2000
+
+Print "All done!"
+StopChannel chnWave

Index

+ diff --git a/_release/help/commands/2d_commands/StopNetGame.htm b/_release/help/commands/2d_commands/StopNetGame.htm new file mode 100644 index 0000000..eb9f712 --- /dev/null +++ b/_release/help/commands/2d_commands/StopNetGame.htm @@ -0,0 +1,15 @@ +Command: StopNetGame   StopNetGame   

Definition:

Stops a network game in progress.

Parameter Description:


None.

Command Description:

Use this command to terminate the network game currently in progress (started with the StartNetGame() command). If possible, the hosting session will transfer to another machine connected to the network game.

Example:

; stopNetGame() example
+
+newGame = StartNetGame()
+; Check the status of the new game.
+If newGame = 0 Then
+print "Could not start or join net game."
+ElseIf newGame = 1
+print "Successfully joined the network game."
+ElseIf newGame = 2
+print "A new network game was started."
+EndIf
+waitkey()
+StopNetGame()
+print "The Network game was stopped."

Index

+ diff --git a/_release/help/commands/2d_commands/Str.htm b/_release/help/commands/2d_commands/Str.htm new file mode 100644 index 0000000..f5c5d74 --- /dev/null +++ b/_release/help/commands/2d_commands/Str.htm @@ -0,0 +1,9 @@ +Command: Str   Str variable/value  

Definition:

Convert numeric value to a string value.

Parameter Description:


variable/value = numeric value or variable

Command Description:

Use this command to transform an numeric value to a string value for use with string commands. Blitz prints numeric values just fine, but should you want to do functions like LEFT$, you'll need to convert your numeric variable to a string variable. Note: during the conversion, all 6 decimal places will be represented on floating point number conversions.

Example:

; STR example
+
+num#=2.5
+mynum$=str num#
+
+Print mynum$
+
+

Index

+ diff --git a/_release/help/commands/2d_commands/String.htm b/_release/help/commands/2d_commands/String.htm new file mode 100644 index 0000000..caa2107 --- /dev/null +++ b/_release/help/commands/2d_commands/String.htm @@ -0,0 +1,6 @@ +Command: String$   String$ (string$, integer)  

Definition:

Returns a designated string a designated number of times.

Parameter Description:


string$ = any valid string or string variable
+integer = the number of times to repeat the string

Command Description:

This makes a string filled with the specified occurances of the designated string. In other words, you could use this command to write the same string over and over again. See the example.

Example:

name$="Shane"
+' Write the name string 10 times
+Print String$(name$,10)
+

Index

+ diff --git a/_release/help/commands/2d_commands/StringHeight.htm b/_release/help/commands/2d_commands/StringHeight.htm new file mode 100644 index 0000000..07051c4 --- /dev/null +++ b/_release/help/commands/2d_commands/StringHeight.htm @@ -0,0 +1,8 @@ +Command: StringHeight   StringHeight (string)  

Definition:

Returns the height (in pixels) of a given string.

Parameter Description:


string = any valid string or string variable

Command Description:

This will return the size, in pixels, the height of the indicated string. This is useful for determining screen layout, scrolling of text, and more. This is calculated based on the size of the currently loaded font.

Example:

; StringWidth/Height Example
+
+a$="Hello Shane!"
+Print "A$=" + a$
+Print "This string is "+ StringWidth(a$) + " pixels wide and"
+Print "it is " + StringHeight(a$) + " tall, based on the current font!"
+

Index

+ diff --git a/_release/help/commands/2d_commands/StringWidth.htm b/_release/help/commands/2d_commands/StringWidth.htm new file mode 100644 index 0000000..734e397 --- /dev/null +++ b/_release/help/commands/2d_commands/StringWidth.htm @@ -0,0 +1,8 @@ +Command: StringWidth   StringWidth (string)  

Definition:

Returns the width (in pixels) of a given string.

Parameter Description:


string = any valid string or string variable

Command Description:

This will return the size, in pixels, the width of the indicated string. This is useful for determining screen layout, scrolling of text, and more. This is calculated based on the size of the currently loaded font.

Example:

; StringWidth/Height Example
+
+a$="Hello Shane!"
+Print "A$=" + a$
+Print "This string is "+ StringWidth(a$) + " pixels wide and"
+Print "it is " + StringHeight(a$) + " tall, based on the current font!"
+

Index

+ diff --git a/_release/help/commands/2d_commands/SystemProperty.htm b/_release/help/commands/2d_commands/SystemProperty.htm new file mode 100644 index 0000000..8f776ed --- /dev/null +++ b/_release/help/commands/2d_commands/SystemProperty.htm @@ -0,0 +1,49 @@ + + +Command: SystemProperty + + + + + + +

  SystemProperty  

+ +

+Parameters:
+

+ + + + +
property$ - system property information required (valid strings listed below)
+

Description:
+
+ + + + +
SystemProperty () returns the location of a standard system folder, which can be different on every computer. Note that it's not a good idea to play around in a user's Windows or System folder! +

+Valid parameters are: +

+"tempdir" - Temp folder
+"systemdir" - System folder
+"windowsdir" - Windows folder
+"appdir" - Program Files folder
+

+

Example:
+
+ + + + + +
+Print "System folder location: " + SystemProperty ("systemdir")
+Print "Windows folder location: " + SystemProperty ("windowsdir")
+Print "Temp folder: " + SystemProperty ("tempdir")
+Print "Program was run from " + SystemProperty ("appdir")
+
+ + diff --git a/_release/help/commands/2d_commands/TCPTimeOuts.htm b/_release/help/commands/2d_commands/TCPTimeOuts.htm new file mode 100644 index 0000000..76c6b18 --- /dev/null +++ b/_release/help/commands/2d_commands/TCPTimeOuts.htm @@ -0,0 +1,68 @@ + + +Command: TCPTimeOuts + + + + + + +

  TCPTimeOuts  

+ +

+Parameters:
+

+ + + + +
+read_millis -- timeout if TCP read commands cause no response within specified time (in milliseconds)
+write_millis -- timeout if TCP write commands cause no response within specified time (in milliseconds)
+accept_millis -- timeout if TCP accept commands cause no response within specified time (in milliseconds)
+
+

Description:
+
+ + + + +
TCPTimeOuts () affects all future calls to the TCP stream functions. You specify the number of milliseconds after which the given timeout should activate; one setting for timeouts when reading from a TCP stream, one for writing to a TCP stream and one for acceptance of a TCP stream (effectively, a server's response time). +
+

Example:
+
+ + + + + +
+; To cause an error if no connection is received by a server within 3 seconds:
+
+TCPTimeouts 0, 0, 5000 ; 5 second 'accept_millis' parameter
+
+AppTitle "Impatient Server (tm)"
+
+Graphics 640, 480
+SetBuffer BackBuffer ()
+Text 10, 10, "Accepting incoming data received within 5 seconds..."
+Flip
+
+server = CreateTCPServer (8080)
+
+If server
+ If AcceptTCPStream (server)
+ Text 10, 30, "Incoming data! Eek!"
+ Else
+ Text 10, 50, "Accept timeout activated -- I'm outta here..."
+ EndIf
+ CloseTCPServer server
+EndIf
+
+Flip
+
+MouseWait
+End
+
+ + diff --git a/_release/help/commands/2d_commands/TFormFilter.htm b/_release/help/commands/2d_commands/TFormFilter.htm new file mode 100644 index 0000000..e697c50 --- /dev/null +++ b/_release/help/commands/2d_commands/TFormFilter.htm @@ -0,0 +1,33 @@ +Command: TFormFilter   TFormFilter enable  

Definition:

Toggles bilinear filtering on convoluted images.

Parameter Description:


enable = 0 to turn off filtering; 1 to turn it on

Command Description:

This command will enable or disable bi-linear filtering on images that are convoluted (altered) by commands like TFormImage and RotateImage.
+
+This filtering allows the convoluted graphics to have smoother, more aliased edges. This also makes the operations slower. The bi-linear filtering can also create non-transparent edges what will mess with your transparency. Experiment for the best results.
+
+Try changing the example to see the difference.

Example:

; RotateImage/TFormFilter Example
+
+; Turn on graphics mode
+Graphics 640,480,16
+
+; Remove the line below to see the difference
+; between filter on and off.
+TFormFilter 0
+
+; Create new empty graphic to store our circle in
+gfxBox=CreateImage(50,50)
+
+; Draw the box image
+; Set drawing operations to point to our new empty graphic
+SetBuffer ImageBuffer(gfxBox)
+Color 255,0,0
+; Note the extra space between the box and the edge of the graphic
+Rect 10,10,30,30,1
+SetBuffer FrontBuffer()
+
+While Not KeyHit(1)
+; Make a copy of the image so we are always using a fresh one each time
+; we rotate it.
+gfxTemp=CopyImage(gfxBox)
+; Rotate it a random value and draw it at a random location
+RotateImage gfxTemp,Rnd(360)
+DrawImage gfxTemp,Rnd(640),Rnd(480)
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/Tan.htm b/_release/help/commands/2d_commands/Tan.htm new file mode 100644 index 0000000..0a231d2 --- /dev/null +++ b/_release/help/commands/2d_commands/Tan.htm @@ -0,0 +1,11 @@ +Command: Tan   Tan (number)  

Definition:

Returns the tangent of an angle.

Parameter Description:


number=float or integer representing a value in degrees

Command Description:

Tan takes an angle and returns the ratio of two sides of a right triangle. The ratio is the length of the side opposite the angle divided by the length of the side adjacent to the angle.
+
+This is useful for artillery sort of games where your bullets will fire from a barrel at a certain angle. You can use the Tan value in your power/angle formula to help determine the trajectory of the shot.

Example:

; tan example
+
+angle1=25
+angle2=45
+
+print "The ratio of angle 1 is: " + tan(angle1)
+print "The ratio of angle 2 is: " + tan(angle2)
+waitkey()

Index

+ diff --git a/_release/help/commands/2d_commands/Text.htm b/_release/help/commands/2d_commands/Text.htm new file mode 100644 index 0000000..05ecbe0 --- /dev/null +++ b/_release/help/commands/2d_commands/Text.htm @@ -0,0 +1,17 @@ +Command: Text   Text x,y,string$,[center x],[center y]  

Definition:

Print text to the graphic screen at the designated coordinates.

Parameter Description:


x = starting x coordinate to print text
+y = starting 4 coordinate to print text
+string$ = string/text to print
+center x = optional; true = center horizontally
+center y = optional; true = center vertically

Command Description:

Prints a string at the designated screen coordinates. You can center the text on the coordiates by setting center x/center y to TRUE. This draws the text in the current drawing color.
+
+Note: Printing a space with text will NOT render a block - a space is an empty value. So printing " " will not make a box appear.

Example:

; Text example
+
+; enable graphics mode
+Graphics 800,600,16
+
+; wait for ESC key before ending
+While Not KeyHit(1)
+;print the text, centered horizontally at x=400, y=0
+Text 400,0,"Hello There!",True,False
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/Then.htm b/_release/help/commands/2d_commands/Then.htm new file mode 100644 index 0000000..2aef01b --- /dev/null +++ b/_release/help/commands/2d_commands/Then.htm @@ -0,0 +1,18 @@ +Command: Then   Then   

Definition:

Part of the IF conditional structure

Parameter Description:


None.

Command Description:

Used in an IF statement to denote the end of the conditional to be checked. Famous for its participation in the IF ... THEN structure. See example and IF statement for more information.

Example:

; IF THEN Example
+
+; Input the user's name
+name$=Input$("What is your name? ")
+
+; Doesn't the person's name equal SHANE?
+If name$ = "Shane" Then
+
+Print "You are recognized, Shane! Welcome!"
+
+Else
+
+Print "Sorry, you don't belong here!"
+
+; End of the condition checking
+End If
+

Index

+ diff --git a/_release/help/commands/2d_commands/TileBlock.htm b/_release/help/commands/2d_commands/TileBlock.htm new file mode 100644 index 0000000..db22a97 --- /dev/null +++ b/_release/help/commands/2d_commands/TileBlock.htm @@ -0,0 +1,16 @@ +Command: TileBlock   TileBlock image [,x,y,frame]  

Definition:

Tile an image without transparency.

Parameter Description:


image = file handle variable holding the loaded image
+x = x coordinate offset(optional)
+y = y coordinate offset (optional)
+frame = frame of the image to use (optional)

Command Description:

Similar to TileImage but ignores transparency. Use this to tile an entire or portion of the screen with a single repetative image.

Example:

; TileBlock example
+Graphics 800,600,16
+
+; Load an image to tile (your location might vary)
+gfxBall=LoadImage("C:\Program Files\Blitz Basic\samples\ball.bmp")
+
+; Tile the graphic without transparency
+TileBlock gfxBall
+
+; Wait for ESC to hit
+While Not KeyHit(1)
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/TileImage.htm b/_release/help/commands/2d_commands/TileImage.htm new file mode 100644 index 0000000..c7aa297 --- /dev/null +++ b/_release/help/commands/2d_commands/TileImage.htm @@ -0,0 +1,44 @@ +Command: TileImage   TileImage handle,[x],[y],[frames]  

Definition:

Tiles the screen with an image (or its frames) of your choice.

Parameter Description:


handle= variable holding the image's handle
+x=starting x location of the tile; assumed 0
+y=starting y location of the tile; assumed 0
+frames=the frame of the image to tile; optional with imagestrip

Command Description:

If you want to make a starfield or other easy tiled background, this is YOUR command. All you have to do is specify the image handle (an image loaded with the LoadImage or LoadAnimImage command). Optionally, you can specify a starting x and y location, as well as an optional frame. You can milk some serious parallax effects with a simple imagestrip with a couple of various starfields and the TileImage command.

Example:

; CreateImage/TileImage/ImageBuffer example
+
+; Again, we'll use globals even tho we don't need them here
+; One variable for the graphic we'll create, one for a timer
+Global gfxStarfield, tmrScreen
+
+; Declare graphic mode
+Graphics 640,480,16
+
+; Create a blank image that is 320 pixels wide and 32 high with 10 frames of 32x32
+gfxStarfield=CreateImage(32,32,10)
+
+; loop through each frame of the graphic we just made
+For t = 0 To 9
+; Set the drawing buffer to the graphic frame so we can write on it
+SetBuffer ImageBuffer(gfxStarfield,t)
+; put 50 stars in the frame at random locations
+For y = 1 To 50
+ Plot Rnd(32),Rnd(32)
+Next
+Next
+
+; Double buffer mode for smooth screen drawing
+SetBuffer BackBuffer()
+
+; Loop until ESC is pressed
+While Not KeyHit(1)
+
+; Only update the screen every 300 milliseconds. Change 300 for faster or
+; slower screen updates
+If MilliSecs() > tmrScreen+300 Then
+Cls ; clear the screen
+
+; Tile the screen with a random frame from our new graphic starting at
+; x=0 and y=0 location.
+TileImage gfxStarfield,0,0,Rnd(9)
+Flip ; Flip the screen into view
+tmrScreen=MilliSecs() ; reset the time
+End If
+Wend

Index

+ diff --git a/_release/help/commands/2d_commands/To.htm b/_release/help/commands/2d_commands/To.htm new file mode 100644 index 0000000..4a46fa4 --- /dev/null +++ b/_release/help/commands/2d_commands/To.htm @@ -0,0 +1,2 @@ +Command: To   To   

Definition:

Dictates the range of values for a FOR ... NEXT loop.

Parameter Description:


See example

Command Description:

Use the TO command to tell your FOR ... NEXT loop which numbers the variable should be assign to during the loop. If you count down instead of up, you must use a negative STEP value. The values must be integer values. See example.

Example:

; Print numbers 10 to 1

For t = 10 to 1 Step -1
Print t
Next

Index

+ diff --git a/_release/help/commands/2d_commands/TotalVidMem.htm b/_release/help/commands/2d_commands/TotalVidMem.htm new file mode 100644 index 0000000..78e2726 --- /dev/null +++ b/_release/help/commands/2d_commands/TotalVidMem.htm @@ -0,0 +1,39 @@ + + +Command: TotalVidMem + + + + + + +

  TotalVidMem  

+ +

+Parameters:
+

+ + + + +
n/a
+

Description:
+
+ + + + +
TotalVidMem () simply returns the total available memory on a graphics card, in bytes. Note that to retrieve the currently available number of bytes, you should use AvailVidMem (). +
+

Example:
+
+ + + + + +
+Print "Total graphics memory available: " + TotalVidMem () + " bytes."
+; NOTE: To retrieve the *available* graphics memory, use AvailVidMem ()!
+ + diff --git a/_release/help/commands/2d_commands/Trim.htm b/_release/help/commands/2d_commands/Trim.htm new file mode 100644 index 0000000..b0f48b7 --- /dev/null +++ b/_release/help/commands/2d_commands/Trim.htm @@ -0,0 +1,5 @@ +Command: Trim$   Trim$ (string$)  

Definition:

Removes leading and trailing spaces from a string.

Parameter Description:


string$ = any valid string or string variable

Command Description:

Use this command to remove that nasty space at the beginning and ending of a string.

Example:

name$=" Shane R. Monroe "
+Print "Your name before trimming is: '" + name$ "' ..."
+Print "Your name trimmed is: '" + Trim$(name$) + "' ..."
+

Index

+ diff --git a/_release/help/commands/2d_commands/True.htm b/_release/help/commands/2d_commands/True.htm new file mode 100644 index 0000000..02be6eb --- /dev/null +++ b/_release/help/commands/2d_commands/True.htm @@ -0,0 +1,19 @@ +Command: True   True   

Definition:

A boolean expression used in comparisons. Actually returns a value of 1.

Parameter Description:


None.

Command Description:

TRUE is a keyword to denote a positive result in a conditional statement. Often times, TRUE is implied and doesn't need to be directly referenced. TRUE can also be used as a RETURN value from a FUNCTION. See the example.

Example:

; TRUE example
+
+; Assign test a random number of 0 or 1
+test= Rnd(0,1)
+
+; TRUE is implied; This statement REALLY means: if test=1 is TRUE then proceed
+If test=1 Then
+Print "Test was valued at 1"
+End If
+
+; Let's set test to be true
+test=True
+
+; Pointlessly test it
+If test=True Then
+Print "Test is true"
+End If
+

Index

+ diff --git a/_release/help/commands/2d_commands/Type.htm b/_release/help/commands/2d_commands/Type.htm new file mode 100644 index 0000000..79321a9 --- /dev/null +++ b/_release/help/commands/2d_commands/Type.htm @@ -0,0 +1,83 @@ +Command: Type   Type variable  

Definition:

Define an object with a collection of variables.

Parameter Description:


variable = any legal variable name

Command Description:

If you know C prgramming, a TYPE is basically a STRUCT in Blitz Basic. If you + don't know C, read on!

+

TYPE is your best friend. It is used to create a 'collection' of objects that + share the same parameters and need to be interated through quickly and easily.

+

Think about SPACE INVADERS. There are many aliens on the screen at one time. + Each of these aliens have a few variables that they all need: x and y coordinates + plus a variable to control which graphic to display (legs out or legs in). Now, + we could make hundreds of variables like invader1x, invader1y, invader2x, invader2y, + etc. to control all the aliens, but that wouldn't make much sense would it? + You could use an array to track them; invader(number,x,y,graphic), and the loop + through them with a FOR + ... NEXT + loop but that is a lot of work! The TYPE variable collection was created to + handle just this sort of need.

+

TYPE defines an object collection. Each object in that collection inherits + its own copy of the variables defined by the TYPE's FIELD + command. Each variable of each object in the collection can be read individually + and can be easily iterated through quickly. Use the FIELD command to assign + the variables you want between the TYPE and END + TYPE commands.

+

If it helps, think of a TYPE collection as a database. Each object is a record + of the database, and every variable is a field of the record. Using commands + like BEFORE, + AFTER, + and FOR ... EACH, + you can move change the pointer of the 'database' to point to a different record + and retrieve/set the variable 'field' values.

+

Not a database guru? Need another example? Okay. Let's say you are setting + up an auditorium for a speech or event and you are putting up hundreds of chairs + for the spectators. The chairs have to be in a certain place on the floor, and + some will need to be raised up a bit higher than others (visiting dignitaries, + the mayor is coming, etc.). So being the computer genius you are, you start + figuring out how you can layout the chairs with the least amount of effort. + You realize that the floor is checkered, so its really a huge grid! This will + make it easy! You just need to number the floor on a piece of graph paper and + put into the grid how high each chair should be, based on where the boss told + you the important people are to sit. So, for each chair, you will have a row + and column on the graph paper (x and y location) and a level to adjust the chair + to (height). Good, we are organized. Now, even though we have it all on paper, + we still have to do the work of placing all the chairs. After you are done, + let's say your boss walks up to you and says "they aren't centered right + .. move'em all over 1 square". Ah crap! You have them all perfect, and + even though it is a simple thing to move a chair one square to the right (after + all, their order and height won't change) - you still have to move each and + every chair! Should would be nice if you could just wave your hand and say "For + each chair in the room, add 1 square to its x location" and have it just + magically happen. Alas, in the real world, get busy - you've got a lot of chairs + to move!

+

In Blitz, you could have set up a TYPE called CHAIR, set the TYPE's FIELDS + as X, Y, and HEIGHT. You would then create as many chairs as you need with the + NEW + command (each time you call NEW, it makes a new chair, with its OWN X, Y, and + HEIGHT variables) and assign them the X, Y, and HEIGHT values you decide upon. + In our example above, when the boss told you to move the chairs over 1 box, + you probably groaned inside. That's a lot of work! In Blitz, we could use four + lines of code to adjust all our CHAIR objects to the new position (using FOR + ... EACH commands).

+

Still lost? Its okay - TYPEs are hard to get a grasp on. Look at the example + and we'll try to show you how types work in a practical environment. I recommend + looking at other people's code too, to help you get a handle on them. Once you + do, you will know why C people are crazy for STRUCTs and why almost all Blitz + programs use them.

Example:

; Define the CHAIR Type
+
+ Type CHAIR
+ Field X
+ Field Y
+ Field HEIGHT
+ End Type

+

; Create 100 new chairs using FOR ... NEXT using the collection name of ROOM

+

For tempx = 1 to 10
+ For tempy = 1 to 10
+ room.chair = New Chair
+ room\x = tempx
+ room\y = tempy
+ room\height = Rnd(0,10) ; set a random height 0 to 10
+ Next
+ Next

+

; Move them all over 1 (like the description example)

+

For room.chair = Each chair
+ room\x = room\x + 1
+ Next

Index

+ diff --git a/_release/help/commands/2d_commands/UnlockBuffer.htm b/_release/help/commands/2d_commands/UnlockBuffer.htm new file mode 100644 index 0000000..1eb27af --- /dev/null +++ b/_release/help/commands/2d_commands/UnlockBuffer.htm @@ -0,0 +1,36 @@ +Command: UnlockBuffer   UnlockBuffer buffer  

Definition:

Unlocks the buffer previously locked for high speed pixel operations.

Parameter Description:


buffer = any valid screen/image buffer (optional)

Command Description:

After you use LockBuffer on a buffer, the only graphics commands you can use are the read/write pixel commands ReadPixel, WritePixel, ReadPixelFast, and WritePixelFast. You must use this command before using other graphics commands.
+
+The buffer parameter isn't required. If omitted, the default buffer set with SetBuffer will be used.
+
+See the other commands for more information.

Example:

; High Speed Graphics Commands
+
+Graphics 640,480,16
+
+; Draw a bunch of crap on the screen
+For t= 1 To 1000
+Color Rnd(255),Rnd(255),Rnd(255)
+Rect Rnd(640),Rnd(480),Rnd(150),Rnd(150),Rnd(1)
+Next
+
+Delay 3000
+
+; Copy the top half of the screen over the bottom half
+; using fast pixels and locked buffers
+For x = 1 To 640
+For y = 1 To 240
+LockBuffer FrontBuffer()
+WritePixelFast x,y+241,ReadPixelFast(x,y)
+UnlockBuffer FrontBuffer()
+Next
+Next
+
+Delay 3000
+
+; Draw the left half of the screen over the right half
+; using the slower direct pixel access
+For x = 1 To 320
+For y = 1 To 480
+WritePixel x+320,y,ReadPixel(x,y)
+Next
+Next

Index

+ diff --git a/_release/help/commands/2d_commands/Until.htm b/_release/help/commands/2d_commands/Until.htm new file mode 100644 index 0000000..082ab3a --- /dev/null +++ b/_release/help/commands/2d_commands/Until.htm @@ -0,0 +1,7 @@ +Command: Until   Until condition  

Definition:

The closing command of the REPEAT ... UNTIL loop.

Parameter Description:


condition = any valid expression (see example)

Command Description:

This portion of the REPEAT ... UNTIL loop dictates what condition must be met before the loop stops execution. All commands between the two commands will be executed endlessly until the UNTIL condition is met.

Example:

; Repeat until user hits ESC key
+
+Repeat
+print "Press ESC to quit this!"
+Until KeyHit(1)
+

Index

+ diff --git a/_release/help/commands/2d_commands/Upper.htm b/_release/help/commands/2d_commands/Upper.htm new file mode 100644 index 0000000..c997fef --- /dev/null +++ b/_release/help/commands/2d_commands/Upper.htm @@ -0,0 +1,4 @@ +Command: Upper$   Upper$ (string$)  

Definition:

Converts a string to all upper case.

Parameter Description:


string$ = any valid string or string variable

Command Description:

This command takes the given string and converts it entirely to upper case.

Example:

name$="Shane R. Monroe"
+print "Your name all in upper case is: " + upper$(name$)
+

Index

+ diff --git a/_release/help/commands/2d_commands/VWait.htm b/_release/help/commands/2d_commands/VWait.htm new file mode 100644 index 0000000..519c148 --- /dev/null +++ b/_release/help/commands/2d_commands/VWait.htm @@ -0,0 +1,14 @@ +Command: VWait   VWait [frames]  

Definition:

Waits for one or more vertical blanks to happen before continuing the program.

Parameter Description:


[frames] = optional number of frames to wait

Command Description:

There are times when you can draw too fast, and your drawing operations happen so fast that you get undesireable effects. This command forces Blitz to wait until the drawing scan line reaches the bottom of the screen before proceeding. Try the example with and without the VWAIT command.

Example:

; Vwait example
+Graphics 800,600,16
+
+; Wait for ESC to hit
+While Not KeyHit(1)
+; Set a random color
+Color Rnd(255),Rnd(255),Rnd(255)
+; Draw a random line
+Line Rnd(800),Rnd(600),Rnd(800),Rnd(600)
+; Wait For a vertical blank to happen before looping
+VWait
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/Viewport.htm b/_release/help/commands/2d_commands/Viewport.htm new file mode 100644 index 0000000..fe34fa5 --- /dev/null +++ b/_release/help/commands/2d_commands/Viewport.htm @@ -0,0 +1,26 @@ +Command: Viewport   Viewport x, y, width, height  

Definition:

Restricts the drawing commands to a specified area of the screen.

Parameter Description:


x = the topmost left corner to start the port x coordinate
+y = the topmost left corner to start the port y coordinate
+width = how wide the port is (in pixels)
+height = how tall the port is (in pixels) +

Command Description:

There are MANY MANY times you want to draw graphics (aliens, ships, etc) ONLY on a certain area of the screen while leaving the other areas alone. This is often referred to as 'windowing' or 'portaling' or 'clipping' an area. Usually, you will perform all your drawing operations first (background, controls, etc), then section off the restricted area of the screen with VIEWPORT to do drawing in that area. There are a million uses for this; overhead map radar screens, Ultima style display windows, onscreen scrollers, etc. This is a bit more complex than most graphic commands, so be sure you have a good handle on it before trying to use it. The biggest tip I can give you about this command is: REMEMBER TO CLEAR THE VIEWPORT WHEN YOU ARE DONE! Do this by setting the viewport to include the whole screen (i.e. Viewport 0,0,640,480 if your game was in 640x480). Look carefully at the example. Remember, the second set of numbers isn't the ENDING location of the port - rather the SIZE of the port starting at the first coordinates.

Example:

; ViewPort Example
+
+; Set Up Graphics Mode
+Graphics 800,600
+
+; Set up Double Buffering
+SetBuffer BackBuffer()
+
+; Set viewport starting at 100,100 and make it 200,200 pixels in size
+Viewport 100,100,200,200
+
+; Infinately draw random rectangles with random colors
+While Not KeyHit(1)
+Cls ; Clear screen in 'blitting' technique
+For t = 1 To 100 ; Do 100 rectangles each time
+Color Rnd(255),Rnd(255),Rnd(255) ; Random color
+Rect Rnd(800),Rnd(600),Rnd(300),Rnd(300),Rnd(0,1) ; Random sized and located box, some filled
+Next ; repeat that drawing loop
+Flip ; Flip to the back buffer
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/WaitJoy.htm b/_release/help/commands/2d_commands/WaitJoy.htm new file mode 100644 index 0000000..a461794 --- /dev/null +++ b/_release/help/commands/2d_commands/WaitJoy.htm @@ -0,0 +1,18 @@ +Command: WaitJoy   WaitJoy ([port])   

Definition:

Halts program execution until a joystick button is pressed and returns its button code.

Parameter Description:


port = joystick port to check

Command Description:

This command makes your program halt until a jpystick button is pressed on the joystick. Used alone, it simply halts and waits for a button press. It can also be used to assign the pressed button's code value to a variable. See example.
+
+In MOST CASES, you are not going to want to use this command because chances are likely you are going to want things on the screen still happening while awaiting the button press. In that situation, you'll use a WHILE ... WEND awaiting a JoyHit value - refreshing your screen each loop.
+
+As with any joystick command, you MUST have a DirectX compatible joystick plugged in and properly configured within Windows for it to work. See your joystick documentation for more information.

Example:

; WaitJoy() sample
+
+Print "Press a joystick button to continue."
+
+button=WaitJoy()
+
+Print "The joystick button code of the button you pressed was: " + button
+Print "Now press a button to quit."
+
+WaitJoy()
+
+End
+

Index

+ diff --git a/_release/help/commands/2d_commands/WaitKey.htm b/_release/help/commands/2d_commands/WaitKey.htm new file mode 100644 index 0000000..f06675b --- /dev/null +++ b/_release/help/commands/2d_commands/WaitKey.htm @@ -0,0 +1,16 @@ +Command: WaitKey()   WaitKey()   

Definition:

Halts program execution until a key is pressed and returns its ASCII code.

Parameter Description:


None.

Command Description:

This command makes your program halt until a key is pressed on the keyboard. Used alone, it simply halts and waits for a key press. It can also be used to assign the pressed key's ASCII value to a variable. See example.
+
+In MOST CASES, you are not going to want to use this command because chances are likely you are going to want things on the screen still happening while awaiting the keypress. In that situation, you'll use a WHILE ... WEND awaiting a KeyHit value - refreshing your screen each loop.

Example:

; WaitKey() sample
+
+Print "Press any key to continue."
+
+key=WaitKey()
+
+Print "The ASCII code of the key you pressed was: " + key
+Print "Now press a key to quit."
+
+WaitKey()
+
+End
+

Index

+ diff --git a/_release/help/commands/2d_commands/WaitMouse.htm b/_release/help/commands/2d_commands/WaitMouse.htm new file mode 100644 index 0000000..c35dd04 --- /dev/null +++ b/_release/help/commands/2d_commands/WaitMouse.htm @@ -0,0 +1,16 @@ +Command: WaitMouse()   WaitMouse()   

Definition:

Halts program execution until a mouse button is pressed and returns its button code.

Parameter Description:


None.

Command Description:

This command makes your program halt until a mouse button is pressed on the mouse. Used alone, it simply halts and waits for a button press. It can also be used to assign the pressed button's code value to a variable. See example.
+
+In MOST CASES, you are not going to want to use this command because chances are likely you are going to want things on the screen still happening while awaiting the button press. In that situation, you'll use a WHILE ... WEND awaiting a MouseHit value - refreshing your screen each loop.

Example:

; WaitMouse() sample
+
+Print "Press a mouse button to continue."
+
+button=WaitMouse()
+
+Print "The mouse button code of the button you pressed was: " + button
+Print "Now press a button to quit."
+
+WaitMouse()
+
+End
+

Index

+ diff --git a/_release/help/commands/2d_commands/WaitTimer.htm b/_release/help/commands/2d_commands/WaitTimer.htm new file mode 100644 index 0000000..114c89d --- /dev/null +++ b/_release/help/commands/2d_commands/WaitTimer.htm @@ -0,0 +1,12 @@ +Command: WaitTimer   WaitTimer (timer_variable)  

Definition:

Pauses execution until the requested timer meets its value.

Parameter Description:


timer = any valid timer variable created with the CreateTimer command.

Command Description:

Use this in conjunction with the CreateTimer command. This command will halt execution until the timer reaches its value. This is useful to control the execution speed of your program. Check out the CreateTime command for more.

Example:

; Create the timer to track speed
+frameTimer=CreateTimer(60)
+
+; Your main screen draw loop
+While Not KeyHit(1)
+WaitTimer(frameTimer) ; Pause until the timer reaches 60
+Cls
+; Draw your screen stuff
+Flip
+Wend
+

Index

+ diff --git a/_release/help/commands/2d_commands/Wend.htm b/_release/help/commands/2d_commands/Wend.htm new file mode 100644 index 0000000..1a4e266 --- /dev/null +++ b/_release/help/commands/2d_commands/Wend.htm @@ -0,0 +1,7 @@ +Command: Wend   Wend   

Definition:

The closing command of a WHILE/WEND loop.

Parameter Description:


None.

Command Description:

This is the command that tells program execution to branch to the beginning of the WHILE/WEND loop at the WHILE command. See the WHILE command for complete details.

Example:

; While/Wend Example
+
+; The loop condition is at the TOP of the loop
+While Not KeyHit(1) ; As long as the user hasn't hit ESC yet ...
+Print "Press Esc to end this mess!" ; Print this
+Wend ; Go back to the start of the WHILE loop

Index

+ diff --git a/_release/help/commands/2d_commands/While.htm b/_release/help/commands/2d_commands/While.htm new file mode 100644 index 0000000..d56e5cb --- /dev/null +++ b/_release/help/commands/2d_commands/While.htm @@ -0,0 +1,7 @@ +Command: While   While condition  

Definition:

Begins a WHILE/WEND conditional loop.

Parameter Description:


condition = any valid conditional statement

Command Description:

The WHILE/WEND loop is used when you wish to execute a series of commands multiple times based on whether a condition is true or not. This is similar to the REPEAT/UNTIL loop, except the condition checking is at the beginning of the loop, instead of at the end. Usually you'll use WHILE/WEND when you aren't sure whether or not the looped commands will even need to be executed once, since you can actually stop the loop before any commands are executed if the condition check fails. If you need to execute the commands in the loop at least once before checking a condition, use REPEAT/UNTIL. See example.

Example:

; While/Wend Example
+
+; The loop condition is at the TOP of the loop
+While Not KeyHit(1) ; As long as the user hasn't hit ESC yet ...
+Print "Press Esc to end this mess!" ; Print this
+Wend ; Go back to the start of the WHILE loop

Index

+ diff --git a/_release/help/commands/2d_commands/Write.htm b/_release/help/commands/2d_commands/Write.htm new file mode 100644 index 0000000..ba9d96b --- /dev/null +++ b/_release/help/commands/2d_commands/Write.htm @@ -0,0 +1,6 @@ +Command: Write   Write string$  

Definition:

Writes a string to the current screen or graphic buffer.

Parameter Description:


string$ = any valid string

Command Description:

This command will write a string value to the screen (if not in a graphic mode) or to the current drawing buffer being used by the program. This command doesn't put a carriage return/linefeed at the end of the line (see the Print command for that feature).

Example:

; Get the user's name and print a welcome
+
+name$=Input$("What is your name?")
+Write "Hello there, " + name$ + "!"
+

Index

+ diff --git a/_release/help/commands/2d_commands/WriteByte.htm b/_release/help/commands/2d_commands/WriteByte.htm new file mode 100644 index 0000000..6f672e4 --- /dev/null +++ b/_release/help/commands/2d_commands/WriteByte.htm @@ -0,0 +1,66 @@ +Command: WriteByte   WriteByte (filehandle|stream, mybyte)  

Definition:

Writes a single byte of data to an open file (or stream).

Parameter Description:


filehandle|stream = a valid variable set with the OpenFile, ReadFile command, or OpenTCPStream (v1.52+)
+mybyte = can be an Integer or a floating point number, but only values between 0 and 255 will be stored faithfully.

Command Description:

Once you've opened a disk file (or stream) for reading, use this command to write a single byte at a time to the file/stream. Note, a byte is an integer that can take the values 0..255 and occupies 8 bits of storage. Since characters are stored as byte values this function can be used to create a text file one character at a time.
+
+Advanced notes:
+
+The number that is stored by WriteByte is actually the least significant byte of an integer so negative numbers and numbers above 255 will still have a value between 0..255. Unless you understand how 32 bit integers are stored in 2's compliment notation this will seem strange but it is NOT a +bug.
+
+Streams can only be used in Blitz Basic v1.52 or greater.
+
+See also:
+ReadByte, ReadShort, ReadInt, ReadFloat, ReadString$, ReadLine$, WriteByte, WriteShort, WriteInt, WriteFloat, WriteShort, WriteString, WriteLine, ReadFile, WriteFile, OpenFile, CloseFile, Eof, FileType, FilePos, SeekFile

Example:

; Reading and Writing a file using ReadByte and WriteByte functions
+
+; Initialise some variables for the example
+Byte1% = 10 ; store 10
+Byte2% = 100 ; store 100
+Byte3% = 255 ; store 255 ( the maximum value that can be stored in a Byte )
+Byte4% = 256 ; try to store 256 this will end up as 0 ( i.e. 256 - 256 = 0 )
+Byte5% = 257 ; try to store 257 this will end up as 1 ( i.e. 257 - 256 = 1 )
+Byte6% = -1 ; try to store -1 this will end up as 255 ( i.e. 256 -1 = 255 )
+Byte7% = -2 ; try to store 256 this will end up as 254 ( i.e. 256 - 2 = 254 )
+Byte8% = Asc("A") ; Store the ASCII value for the Character "A" ( i.e. 65 )
+
+; Open a file to write to
+fileout = WriteFile("mydata.dat ")
+
+; Write the information to the file
+WriteByte( fileout, Byte1 )
+WriteByte( fileout, Byte2 )
+WriteByte( fileout, Byte3 )
+WriteByte( fileout, Byte4 )
+WriteByte( fileout, Byte5 )
+WriteByte( fileout, Byte6 )
+WriteByte( fileout, Byte7 )
+WriteByte( fileout, Byte8 )
+
+; Close the file
+CloseFile( fileout )
+
+; Open the file to Read
+filein = ReadFile("mydata.dat")
+
+Read1 = ReadByte( filein )
+Read2 = ReadByte( filein )
+Read3 = ReadByte( filein )
+Read4 = ReadByte( filein )
+Read5 = ReadByte( filein )
+Read6 = ReadByte( filein )
+Read7 = ReadByte( filein )
+Read8 = ReadByte( filein )
+
+; Close the file once reading is finished
+CloseFile( fileout )
+
+Print "Written - Read"
+Write Byte1 + " - " : Print Read1
+Write Byte2 + " - " : Print Read2
+Write Byte3 + " - " : Print Read3
+Write Byte4 + " - " : Print Read4
+Write Byte5 + " - " : Print Read5
+Write Byte6 + " - " : Print Read6
+Write Byte7 + " - " : Print Read7
+Write Byte8 + " - " : Print Chr$( Read8 )
+
+WaitKey()

Index

+ diff --git a/_release/help/commands/2d_commands/WriteBytes.htm b/_release/help/commands/2d_commands/WriteBytes.htm new file mode 100644 index 0000000..a9d8870 --- /dev/null +++ b/_release/help/commands/2d_commands/WriteBytes.htm @@ -0,0 +1,49 @@ +Command: WriteBytes   WriteBytes bank,filehandle|stream,offset,count  

Definition:

Write data from a memory bank to a file (or stream).

Parameter Description:


bank = variable containing handle to valid bank
+filehandle|stream = a valid variable set with the WriteFile or OpenTCPStream (v1.52+)
+offset = offset in bytes to write the value
+count = how many bytes to write from the offset
+

Command Description:

You can write the contents of a memory bank to a file on disk (or stream) using this command.
+
+Note: The file handle must be opened with WriteFile or OpenTCPStream and subsequently closed with CloseFile or CloseTCPStream after the writing operations are complete.
+Return how many bytes successfully written to a stream.

+Streams can only be used in Blitz Basic v1.52 or greater.

Example:

; Read/WriteBytes Commands Example
+
+; Create a 50 byte memory bank
+bnkTest=CreateBank(500)
+
+; Let's fill the bank with crap
+For t = 1 To 50
+PokeByte bnkTest,t,Rnd(255)
+PokeInt bnkTest,t+1,Rnd(10000)
+PokeShort bnkTest,t+2,Rnd(10000)
+PokeFloat bnkTest,t+3,Rnd(-.999,.999)
+Next
+
+; Open a file to write to
+fileBank=WriteFile("test.bnk")
+; Write the bank to the file
+WriteBytes bnkTest,fileBank,0,50
+; Close it
+CloseFile fileBank
+
+; Free the bank
+FreeBank bnkTest
+
+; Make a new one
+bnkTest=CreateBank(500)
+
+; Open the file to read from
+fileBank=OpenFile("test.bnk")
+; Write the bank to the file
+ReadBytes bnkTest,fileBank,0,50
+; Close it
+CloseFile fileBank
+
+; Write back the results!
+For t = 1 To 50
+Print PeekByte (bnkTest,t)
+Print PeekInt (bnkTest,t+1)
+Print PeekShort (bnkTest,t+2)
+Print PeekFloat (bnkTest,t+3)
+Next

Index

+ diff --git a/_release/help/commands/2d_commands/WriteFile.htm b/_release/help/commands/2d_commands/WriteFile.htm new file mode 100644 index 0000000..2599e6e --- /dev/null +++ b/_release/help/commands/2d_commands/WriteFile.htm @@ -0,0 +1,54 @@ +Command: WriteFile   WriteFile (filename$)  

Definition:

Opens a file on disk for writing operations.

Parameter Description:


filename$ = any valid path and filename. The returned value is the filehandle which is an integer value.

Command Description:

This command opens the designated filename and prepares it to be written to. Use this to write your own configuration file, save game data, etc. also useful for saving custom types to files. The filehandle that is returned is +an integer value that the operating system uses to identify which file is to be written to and must be passed to the functions such as WriteInt(). If the file could not be opened then the filehandle is Zero.
+
+See also:
+ReadByte, ReadShort, ReadInt, ReadFloat, ReadString$, ReadLine$, WriteByte, WriteShort, WriteInt, WriteFloat, WriteShort, WriteString, +WriteLine, ReadFile, WriteFile, OpenFile, CloseFile, Eof, FileType, FilePos, SeekFile

Example:

; Reading and writing custom types to files using ReadFile, WriteFile and +CloseFile
+
+; Initialise some variables for the example
+Type HighScore
+ Field Name$
+ Field Score%
+ Field Level%
+End Type
+
+Best.HighScore = New HighScore
+Best\Name = "Mark"
+Best\Score = 11657
+Best\Level = 34
+
+; Open a file to write to
+fileout = WriteFile("mydata.dat")
+
+; Write the information to the file
+WriteString( fileout, Best\Name )
+WriteInt( fileout, Best\Score )
+WriteByte( fileout, Best\Level )
+
+; Close the file
+CloseFile( fileout )
+
+; Open the file to Read
+filein = ReadFile("mydata.dat")
+
+; Lets read the Greatest score from the file
+Greatest.HighScore = New HighScore
+Greatest\Name$ = ReadString$( filein )
+Greatest\Score = ReadInt( filein )
+Greatest\Level = ReadByte( filein )
+
+; Close the file once reading is finished
+CloseFile( fileout )
+
+Print "High score record read from - mydata.dat "
+Print
+Write "Name = "
+Print Greatest\Name
+Write "Score = "
+Print Greatest\Score
+Write "Level = "
+Print Greatest\Level
+
+WaitKey()

Index

+ diff --git a/_release/help/commands/2d_commands/WriteFloat.htm b/_release/help/commands/2d_commands/WriteFloat.htm new file mode 100644 index 0000000..7603622 --- /dev/null +++ b/_release/help/commands/2d_commands/WriteFloat.htm @@ -0,0 +1,45 @@ +Command: WriteFloat   WriteFloat (filehandle|stream, myFloat)  

Definition:

Writes a single floating point value to an open file (or stream).

Parameter Description:


filehandle|stream = a valid variable set with the OpenFile, WriteFile command, or OpenTCPStream (v1.52+)
+myFloat = a floating point variable

Command Description:

Once you've opened a disk file (or stream) for writing, use this command to write a single floating point number to the file. Note, each value written uses 4 bytes.
+
+Streams can only be used in Blitz Basic v1.52 or greater.
+
+See also:
+ReadByte, ReadShort, ReadInt, ReadFloat, ReadString$, ReadLine$, WriteByte, WriteShort, WriteInt, WriteFloat, WriteShort, WriteString, WriteLine, ReadFile, WriteFile, OpenFile, CloseFile, Eof, FileType, FilePos, SeekFile

Example:

; Reading and writing a file using ReadFloat and WriteFloat functions
+
+; Initialise some variables for the example
+Num1# = 10.5 ; store 10.5
+Num2# = 365.25 ; store 365.25
+Num3# = 32767.123 ; 32767.123 is the largest positive Short Integer Value in BlitzBasic )
+Num4# = -32768.123 ; -32768.123 the largest negative Short Integer Value in BlitzBasic )
+
+; Open a file to write to
+fileout = WriteFile("mydata.dat")
+
+; Write the information to the file
+WriteFloat( fileout, Num1 )
+WriteFloat( fileout, Num2 )
+WriteFloat( fileout, Num3 )
+WriteFloat( fileout, Num4 )
+
+; Close the file
+CloseFile( fileout )
+
+; Open the file to Read
+filein = ReadFile("mydata.dat")
+
+Read1# = ReadFloat( filein )
+Read2# = ReadFloat( filein )
+Read3# = ReadFloat( filein )
+Read4# = ReadFloat( filein )
+
+; Close the file once reading is finished
+CloseFile( fileout )
+
+Print "Floating Point Data Read From File - mydata.dat "
+Print Read1
+Print Read2
+Print Read3
+Print Read4
+
+WaitKey()

Index

+ diff --git a/_release/help/commands/2d_commands/WriteInt.htm b/_release/help/commands/2d_commands/WriteInt.htm new file mode 100644 index 0000000..0630b1d --- /dev/null +++ b/_release/help/commands/2d_commands/WriteInt.htm @@ -0,0 +1,45 @@ +Command: WriteInt   WriteInt (filehandle|stream, myinteger)  

Definition:

Write a single 32bit integer value to an open file (or stream).

Parameter Description:


filehandle|stream = a valid variable set with the OpenFile, WriteFile command, or OpenTCPStream (v1.52+)
+myinteger = an integer variable (a floating point number can be used but this will be converted to an integer before saving so only the integer part will be saved)

Command Description:

Once you've opened a disk file (or stream) for writing, use this command to write a single integer value to the file. Note, each value written uses 4 bytes and is written least significant byte first. The range of the value saved is -2147483648 to 2147483647
+
+Streams can only be used in Blitz Basic v1.52 or greater.
+
+See also:
+ReadByte, ReadShort, ReadInt, ReadFloat, ReadString$, ReadLine$, WriteByte, WriteShort, WriteInt, WriteFloat, WriteShort, WriteString, WriteLine, ReadFile, WriteFile, OpenFile, CloseFile, Eof, FileType, FilePos, SeekFile

Example:

; Reading and writing a file using ReadInt and WriteInt functions
+
+; Initialise some variables for the example
+Int1% = 10 ; store 10
+Int2% = 365 ; store 365
+Int3% = 2147483647; store 2147483647 the largest positive Integer Value in BlitzBasic )
+Int4% = - 2147483648 ; store -2147483648 the largest negative Integer Value in BlitzBasic )
+
+; Open a file to write to
+fileout = WriteFile("mydata.dat")
+
+; Write the information to the file
+WriteInt( fileout, Int1 )
+WriteInt( fileout, Int2 )
+WriteInt( fileout, Int3 )
+WriteInt( fileout, Int4 )
+
+; Close the file
+CloseFile( fileout )
+
+; Open the file to Read
+filein = ReadFile("mydata.dat")
+
+Read1 = ReadInt( filein )
+Read2 = ReadInt( filein )
+Read3 = ReadInt( filein )
+Read4 = ReadInt( filein )
+
+; Close the file once reading is finished
+CloseFile( fileout )
+
+Print "Integer Data Read From File - mydata.dat "
+Print Read1
+Print Read2
+Print Read3
+Print Read4
+
+WaitKey()

Index

+ diff --git a/_release/help/commands/2d_commands/WriteLine.htm b/_release/help/commands/2d_commands/WriteLine.htm new file mode 100644 index 0000000..d7a8129 --- /dev/null +++ b/_release/help/commands/2d_commands/WriteLine.htm @@ -0,0 +1,48 @@ +Command: WriteLine$   WriteLine$ (filehandle|stream, string$)  

Definition:

Writes a single line of text to an open file (or stream).

Parameter Description:


filehandle|stream = a valid variable set with the OpenFile, WriteFile command, or OpenTCPStream (v1.52+). +The value returned is a text string.
+string$ = valid string value.

Command Description:

Once you've opened a disk file (or stream) for writing, use this command to right a whole line of text to the file. Each line of text is automatically terminated with an "end-of-line" mark, consisting of a Carriage Return character followed by a LineFeed character. (i.e. 0Dh, 0Ah ) This function +can be used to make plain text files.
+
+Streams can only be used in Blitz Basic v1.52 or greater.
+
+See also:
+ReadByte, ReadShort, ReadInt, ReadFloat, ReadString$, ReadLine$, WriteByte, WriteShort, WriteInt, WriteFloat, WriteShort, WriteString, WriteLine, ReadFile, WriteFile, OpenFile, CloseFile, Eof, FileType, FilePos, SeekFile

Example:

; Reading and writing a file using ReadLine$ and WriteLine functions
+
+; Initialise some variables for the example
+String1$ = "Line 1 is short"
+String2$ = "Line 2 is a longer line but they can be much longer"
+String3$ = "Line 3 is made up "
+String4$ = "of two parts joined together."
+
+; Open a file to write to
+fileout = WriteFile("mydata.txt")
+
+; Write the information to the file
+WriteLine( fileout, String1 )
+WriteLine( fileout, String2 )
+WriteLine( fileout, String3 + String4)
+WriteLine( fileout, "Just to show you don't have to use variables" )
+
+; Close the file
+CloseFile( fileout )
+
+; Open the file to Read
+filein = ReadFile("mydata.txt")
+
+Read1$ = ReadLine( filein )
+Read2$ = ReadLine$( filein )
+Read3$ = ReadLine$( filein )
+Read4$ = ReadLine$( filein )
+
+; Close the file once reading is finished
+CloseFile( fileout )
+
+Print "Lines of text read from file - mydata.txt "
+Print
+Print Read1
+Print Read2
+Print Read3
+Print Read4
+
+WaitKey()

Index

+ diff --git a/_release/help/commands/2d_commands/WritePixel.htm b/_release/help/commands/2d_commands/WritePixel.htm new file mode 100644 index 0000000..c1f67ed --- /dev/null +++ b/_release/help/commands/2d_commands/WritePixel.htm @@ -0,0 +1,37 @@ +Command: WritePixel   WritePixel x,y,rgb,[buffer]  

Definition:

Quickly writes a pixel to an image buffer.

Parameter Description:


x = x location of the pixel to read
+y = y location of the pixel to read
+rgb = rgb pixel value to write
+buffer = any valid screen/image buffer (optional)

Command Description:

This command will allow you fast access to a specific pixel in the buffer selected. While the ReadPixel command reads the pixel quickly (and you write it back with this command), it is still not fast enough for real-time screen effects.
+
+You are not required to lock the buffer with LockBuffer and subsequently unlock the buffer with UnlockBuffer. However, the operations will be a bit faster if you do.

Example:

; High Speed Graphics Commands
+
+Graphics 640,480,16
+
+; Draw a bunch of crap on the screen
+For t= 1 To 1000
+Color Rnd(255),Rnd(255),Rnd(255)
+Rect Rnd(640),Rnd(480),Rnd(150),Rnd(150),Rnd(1)
+Next
+
+Delay 3000
+
+; Copy the top half of the screen over the bottom half
+; using fast pixels and locked buffers
+LockBuffer FrontBuffer()
+For x = 1 To 640
+For y = 1 To 240
+WritePixelFast x,y+241,ReadPixelFast(x,y)
+Next
+Next
+UnlockBuffer FrontBuffer()
+
+Delay 3000
+
+; Draw the left half of the screen over the right half
+; using the slower direct pixel access
+For x = 1 To 320
+For y = 1 To 480
+WritePixel x+320,y,ReadPixel(x,y)
+Next
+Next

Index

+ diff --git a/_release/help/commands/2d_commands/WritePixelFast.htm b/_release/help/commands/2d_commands/WritePixelFast.htm new file mode 100644 index 0000000..fade424 --- /dev/null +++ b/_release/help/commands/2d_commands/WritePixelFast.htm @@ -0,0 +1,39 @@ +Command: WritePixelFast   WritePixelFast x,y,rgb,[buffer]  

Definition:

High speed pixel writing to an image buffer.

Parameter Description:


x = x location of the pixel to read
+y = y location of the pixel to read
+rgb = rgb pixel value to write
+buffer = any valid screen/image buffer (optional)

Command Description:

This command will allow you fast access to a specific pixel in the buffer selected. While the ReadPixelFast command reads the pixel quickly (and it is written back quickly with this command, it is still not fast enough for real-time screen effects.
+
+You are required to lock the buffer with LockBuffer and subsequently unlock the buffer with UnlockBuffer when the operations are complete before any other graphics commands can be used.
+
+WARNING: You are playing with power. There is nothing keeping you from writing directly to memory off the screen and TRASHING it. You can crash Blitz using this command.

Example:

; High Speed Graphics Commands
+
+Graphics 640,480,16
+
+; Draw a bunch of crap on the screen
+For t= 1 To 1000
+Color Rnd(255),Rnd(255),Rnd(255)
+Rect Rnd(640),Rnd(480),Rnd(150),Rnd(150),Rnd(1)
+Next
+
+Delay 3000
+
+; Copy the top half of the screen over the bottom half
+; using fast pixels and locked buffers
+LockBuffer FrontBuffer()
+For x = 1 To 640
+For y = 1 To 240
+WritePixelFast x,y+241,ReadPixelFast(x,y)
+Next
+Next
+UnlockBuffer FrontBuffer()
+
+Delay 3000
+
+; Draw the left half of the screen over the right half
+; using the slower direct pixel access
+For x = 1 To 320
+For y = 1 To 480
+WritePixel x+320,y,ReadPixel(x,y)
+Next
+Next

Index

+ diff --git a/_release/help/commands/2d_commands/WriteShort.htm b/_release/help/commands/2d_commands/WriteShort.htm new file mode 100644 index 0000000..324efc0 --- /dev/null +++ b/_release/help/commands/2d_commands/WriteShort.htm @@ -0,0 +1,45 @@ +Command: WriteShort   WriteShort (filehandle|stream, myinteger)  

Definition:

Write a single short integer value (16 bits) to an open file (or stream).

Parameter Description:


filehandle|stream = a valid variable set with the OpenFile, WriteFile command, or OpenTCPStream (v1.52+)
+myinteger = an integer variable (a floating point number can be used but this will be converted to an integer before saving so only the integer part will be saved)

Command Description:

Once you've opened a disk file (or stream) for writing, use this command to write a single short integer (16 bit) value to the file. Note, each value written uses 2 bytes and is written least significant byte first. The range of the value saved is 0-65535
+
+Streams can only be used in Blitz Basic v1.52 or greater.

+See also:
+ReadByte, ReadShort, ReadInt, ReadFloat, ReadString$, ReadLine$, WriteByte, WriteShort, WriteInt, WriteFloat, WriteShort, WriteString, WriteLine, ReadFile, WriteFile, OpenFile, CloseFile, Eof, FileType, FilePos, SeekFile

Example:

; Reading and writing a file using ReadShort and WriteShort functions
+
+; Initialise some variables for the example
+Int1% = 10 ; store 10
+Int2% = 365 ; store 365
+Int3% = 32767 ; 32767 is the largest positive Short Integer Value in BlitzBasic )
+Int4% = -32768 ; -32768 the largest negative Short Integer Value in BlitzBasic )
+
+; Open a file to write to
+fileout = WriteFile("mydata.dat")
+
+; Write the information to the file
+WriteShort( fileout, Int1 )
+WriteShort( fileout, Int2 )
+WriteShort( fileout, Int3 )
+WriteShort( fileout, Int4 )
+
+; Close the file
+CloseFile( fileout )
+
+; Open the file to Read
+filein = ReadFile("mydata.dat")
+
+Read1 = ReadShort( filein )
+Read2 = ReadShort( filein )
+Read3 = ReadShort( filein )
+Read4 = ReadShort( filein )
+
+; Close the file once reading is finished
+CloseFile( fileout )
+
+Print "Short Integer Data Read From File - mydata.dat "
+Print Read1
+Print Read2
+Print Read3
+Print Read4
+
+WaitKey()
+

Index

+ diff --git a/_release/help/commands/2d_commands/WriteString.htm b/_release/help/commands/2d_commands/WriteString.htm new file mode 100644 index 0000000..c228b75 --- /dev/null +++ b/_release/help/commands/2d_commands/WriteString.htm @@ -0,0 +1,50 @@ +Command: WriteString$   WriteString$ (filehandle|stream, mystring)  

Definition:

Writes a single string variable to an open file (or stream).

Parameter Description:


filehandle|stream = a valid variable set with the OpenFile, WriteFile command, or OpenTCPStream (v1.52+)
+mystring = any string variable or text contained between quotes.

Command Description:

Once you've opened a disk file (or stream) for writing, use this command to write a string variable to the file.
+
+Each string is stored in the file as a 4 byte (32bit) integer followed by the characters that form the string. The integer contains the number of characters in the string, i.e. its length. Note, that Carriage Return, Line +Feed and Null characters are NOT use to indicate the end of the string. A file of strings cannot be read like a text file, since it contains string variables and not text. A null string, i.e. a string of zero length ("") is +stored as 4 bytes, an integer count with a value = zero, followed by no Characters. Note strings are not limited to 255 characters as in some languages. Reading beyond the end of file does not result in an error, but each value read will be a zero length string.
+
+Streams can only be used in Blitz Basic v1.52 or greater.
+
+See also:
+ReadByte, ReadShort, ReadInt, ReadFloat, ReadString$, ReadLine$, WriteByte, WriteShort, WriteInt, WriteFloat, WriteShort, WriteString, WriteLine, ReadFile, WriteFile, OpenFile, CloseFile, Eof, FileType, FilePos, SeekFile

Example:

; Reading and writing a file using ReadString$ and WriteString functions
+
+; Initialise some variables for the example
+String1$ = "A short string"
+String2$ = "A longer string since these are variables lengths"
+String3$ = "This is string3 "
+String4$ = "joined to string4"
+
+; Open a file to write to
+fileout = WriteFile("mydata.dat")
+
+; Write the information to the file
+WriteString( fileout, String1 )
+WriteString( fileout, String2 )
+WriteString( fileout, String3 + String4)
+WriteString( fileout, "Just to show you don't have to use variables" )
+
+; Close the file
+CloseFile( fileout )
+
+; Open the file to Read
+filein = ReadFile("mydata.dat")
+
+Read1$ = ReadString$( filein )
+Read2$ = ReadString$( filein )
+Read3$ = ReadString$( filein )
+Read4$ = ReadString$( filein )
+
+; Close the file once reading is finished
+CloseFile( fileout )
+
+Print "String Variables Read From File - mydata.dat "
+Print
+Print Read1
+Print Read2
+Print Read3
+Print Read4
+
+WaitKey()

Index

+ diff --git a/_release/help/commands/2d_commands/Xor.htm b/_release/help/commands/2d_commands/Xor.htm new file mode 100644 index 0000000..6efe7c6 --- /dev/null +++ b/_release/help/commands/2d_commands/Xor.htm @@ -0,0 +1,27 @@ +Command: Xor   Xor   

Definition:

Performs a bit level Exclusive OR between two values.

Parameter Description:


None.

Command Description:

Often used for lightweight (meaning worthless ;) encryption, this will take two values and perform an exclusive OR with each bit following the basic rules of XOR. The result can be XORed with one of the original numbers to reveal the other number. See the example for more.

Example:

num=%11110000111100001111000011110000 ; Define a bit pattern which is easy to recognize
+
+bitmask=Rnd(-2147483648,2147483647) ; Define a RANDOM Xor 32bit wide bitmask
+
+; This line prints the binary and decimal numbers before the Xor
+Print "Binary number is: "+Bin$(num)+" ("+num+")"
+
+; This line prints the binary and decimal numbers of the Xor bitmask
+Print "Xor bitmask is: "+Bin$(bitmask)+" ("+bitmask+")"
+
+Print "------------------------------------------------------------------"
+
+; This line Xor's the number with the bitmask
+xres=num Xor bitmask
+
+; This line prints the binary and decimal numbers after the Xor
+Print "Xor result is: "+Bin$(xres)+" ("+xres+")"
+Print "------------------------------------------------------------------"
+
+; This line Xor's the Xor result with the bitmask again
+xres=xres Xor bitmask
+; This line prints the binary and decimal numbers after the second Xor. NOTE: This number is identical to the original number
+Print "Result Xor'ed again: "+Bin$(xres)+" ("+xres+")"
+
+WaitMouse ; Wait for the mouse before ending.
+

Index

+ diff --git a/_release/help/commands/2d_commands/template.htm b/_release/help/commands/2d_commands/template.htm new file mode 100644 index 0000000..06927a4 --- /dev/null +++ b/_release/help/commands/2d_commands/template.htm @@ -0,0 +1,44 @@ + + +Command: <command> + + + + + + +

   <command><parameter>   +

+Definition:
+
+ + + + +
<definitition>
+
+Parameter Description:

+
+ + + + +
<param description>
+

Command Description:
+
+ + + + +
<description>
+

Example:
+
+ + + + + +
<example>
+

Index

+ + diff --git a/_release/help/commands/3d_commands/AddAnimSeq.htm b/_release/help/commands/3d_commands/AddAnimSeq.htm new file mode 100644 index 0000000..47197db --- /dev/null +++ b/_release/help/commands/3d_commands/AddAnimSeq.htm @@ -0,0 +1,40 @@ + + +Command: AddAnimSeq + + + + + + +

  AddAnimSeq ( entity,length)  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ length -
+

Description:
+
+ + + + +
Creates an animation sequence for an entity. This must be done before + any animation keys set by SetAnimKey can be + used in an actual animation.

Returns the animation sequence number added.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/AddTriangle.htm b/_release/help/commands/3d_commands/AddTriangle.htm new file mode 100644 index 0000000..d4050b6 --- /dev/null +++ b/_release/help/commands/3d_commands/AddTriangle.htm @@ -0,0 +1,55 @@ + + +Command: AddTriangle + + + + + + +

  AddTriangle ( surface,v0,v1,v2 )  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ v0  - index number of first vertex of triangle
+ v1 - index number of second vertex of triangle
+ v2 - index number of third vertex of triangle
+

Description:
+
+ + + + +
Adds a triangle to a surface and returns the triangle's index number, + starting from 0.

The v0, v1 and v2 parameters are the index numbers of the + vertices created using AddVertex.

+

Depending on how the vertices are arranged, then the triangle will only + be visible from a certain side. Imagine that a triangle's vertex points are + like dot-to-dot pattern, each numbered v0, v1, v2. If these dots, starting + from v0, through to V2, form a clockwise pattern relative to the viewer, + then the triangle will be visible. If these dots form an anti-clockwise + pattern relative to the viewer, then the triangle will not be visible.

+

The reason for having one-sided triangles is that it reduces the amount + of triangles that need to be rendered when one side faces the side of an + object which won't be seen (such as the inside of a snooker ball). However, if you wish for a + triangle to be two-sided, then you can either create two triangles, using + the same set of vertex numbers for both but assigning them in opposite + orders, or you can use CopyEntity and + FlipMesh together.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/AddVertex.htm b/_release/help/commands/3d_commands/AddVertex.htm new file mode 100644 index 0000000..b136c21 --- /dev/null +++ b/_release/help/commands/3d_commands/AddVertex.htm @@ -0,0 +1,63 @@ + + +Command: AddVertex + + + + + + +

  AddVertex ( surface,x#,y#,z#[,u#][,v#][,w#] +)  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ x# - x coordinate of vertex
+ y# - y coordinate of vertex
+ z# - z coordinate of vertex
+ u# (optional) - u texture coordinate of vertex
+ v# (optional) - v texture coordinate of vertex
+ w# (optional) - w texture coordinate of vertex - not used, included for + future expansion
+

Description:
+
+ + + + +
Adds a vertex to the specified surface and returns the vertices' index + number, starting from 0.

x,y,z are the geometric coordinates of the + vertex, and u,v,w are texture mapping coordinates.

+

A vertex is a point in 3D space which is used to connect edges of a + triangle together. Without any vertices, you can't have any triangles. At + least three vertices are needed to create one triangle; one for each corner.

+

The optional u,v parameters allow you to specify texture coordinates for a vertex, + which will determine how any triangle created using those vertices will be + texture mapped.

+

This works on the following basis: the bottom left of an image has the uv + coordinates 0,0. The bottom right has coordinates 0,1, top left 0,1 and top + right 1,1. Now, depending on what uv coordinate you assign to the vertex, + this will represent a point on the image. For example, a coordinate of + 0.5,0.5 would represent the centre of the image.

+

So now imagine you have a normal equilateral triangle. By assigning + the bottom left vertex a uv coordinate of 0,0, then bottom right a + coordinate of 1,0 and the top centre 0.5,1, this will texture map the + triangle with an image that fits it.

+
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/AlignToVector.htm b/_release/help/commands/3d_commands/AlignToVector.htm new file mode 100644 index 0000000..5dcc2bc --- /dev/null +++ b/_release/help/commands/3d_commands/AlignToVector.htm @@ -0,0 +1,45 @@ + + +Command: AlignToVector + + + + + + +

  AlignToVector entity,vector_x#,vector_y#,vector_z#,axis  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ vector_x# - vector x
+ vector_y# - vector y
+ vector_z# - vector z
+
+ axis - axis of entity that will be aligned to vector
+ 1: x-axis
+ 2: y-axis
+ 3: z-axis
+

Description:
+
+ + + + +
Aligns an entity axis to a vector.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/AmbientLight.htm b/_release/help/commands/3d_commands/AmbientLight.htm new file mode 100644 index 0000000..e8d39f9 --- /dev/null +++ b/_release/help/commands/3d_commands/AmbientLight.htm @@ -0,0 +1,93 @@ + + +Command: AmbientLight + + + + + + +

  AmbientLight red#,green#,blue#  

+ +

+Parameters:
+

+ + + + +
red# - red ambient light value
+green# - green ambient light value
+blue# - blue ambient light value
+

Description:
+
+ + + + +
Sets the ambient lighting colour.

The green, red and blue values + should be in the range 0-255. The default ambient light colour is + 255,255,255.
+
+Ambient light is a light source that affects all points on a 3D object equally. +So with ambient light only, all 3D objects will appear flat, as there will be no +shading.
+
+Ambient light is useful for providing a certain level of light, before adding +other lights to provide a realistic lighting effect.
+
+An ambient light level of 0,0,0 will result in no ambient light being displayed.

+

Example:
+
+ + + + + +
; AmbientLight Example
+ ; --------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ sphere=CreateSphere( 32 )
+ PositionEntity sphere,-2,0,5
+
+ cone=CreateCone( 32 )
+ PositionEntity cone,2,0,5
+
+ ; Set initial ambient light colour values
+ red#=127
+ green#=127
+ blue#=127
+
+ While Not KeyDown( 1 )
+
+ ; Change red, green, blue values depending on key pressed
+ If KeyDown( 2 )=True And red#>0 Then red#=red#-1
+ If KeyDown( 3 )=True And red#<255 Then red#=red#+1
+ If KeyDown( 4 )=True And green#>0 Then green#=green#-1
+ If KeyDown( 5 )=True And green#<255 Then green#=green#+1
+ If KeyDown( 6 )=True And blue#>0 Then blue#=blue#-1
+ If KeyDown( 7 )=True And blue#<255 Then blue#=blue#+1
+
+ ; Set ambient light using red, green, blue values
+ AmbientLight red#,green#,blue#
+
+ RenderWorld
+
+ Text 0,0,"Press keys 1-6 to change AmbientLight red#,green#,blue# values
+ Text 0,20,"Ambient Red: "+red#
+ Text 0,40,"Ambient Green: "+green#
+ Text 0,60,"Ambient Blue: "+blue#
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/AnimLength.htm b/_release/help/commands/3d_commands/AnimLength.htm new file mode 100644 index 0000000..4faf61a --- /dev/null +++ b/_release/help/commands/3d_commands/AnimLength.htm @@ -0,0 +1,37 @@ + + +Command: AnimLength + + + + + + +

  AnimLength ( entity )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+

Description:
+
+ + + + +
Returns the length of the specified entity's current animation sequence.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/AnimSeq.htm b/_release/help/commands/3d_commands/AnimSeq.htm new file mode 100644 index 0000000..96f0f3c --- /dev/null +++ b/_release/help/commands/3d_commands/AnimSeq.htm @@ -0,0 +1,37 @@ + + +Command: AnimSeq + + + + + + +

  AnimSeq ( entity )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+

Description:
+
+ + + + +
Returns the specified entity's current animation sequence.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/AnimTime.htm b/_release/help/commands/3d_commands/AnimTime.htm new file mode 100644 index 0000000..0e244a8 --- /dev/null +++ b/_release/help/commands/3d_commands/AnimTime.htm @@ -0,0 +1,37 @@ + + +Command: AnimTime + + + + + + +

  AnimTime# ( entity )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+

Description:
+
+ + + + +
Returns the current animation time of an entity.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/Animate.htm b/_release/help/commands/3d_commands/Animate.htm new file mode 100644 index 0000000..f9b67a4 --- /dev/null +++ b/_release/help/commands/3d_commands/Animate.htm @@ -0,0 +1,57 @@ + + +Command: Animate + + + + + + +

  Animate entity,[,mode][,speed#][,sequence][,transition#]  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+
+ mode (optional) - mode of animation.
+ 0: stop animation
+ 1: loop animation (default)
+ 2: ping-pong animation
+ 3: one-shot animation
+
+ speed# (optional) - speed of animation. Defaults to 1.
+ sequence (optional) - specifies which sequence of animation frames to play. + Defaults to 0.
+ transition# (optional) - used to tween between an entities current position + rotation and the first frame of animation. Defaults to 0.
+

Description:
+
+ + + + +
Animates an entity.

More info about the optional parameters:

+

speed# - a negative speed will play the animation backwards.

+

sequence - Initially, an entity loaded with + LoadAnimMesh will have a single animation sequence. More sequences can + be added using either LoadAnimSeq or + AddAnimSeq. Animation sequences are numbered + 0,1,2...etc.

+

transition# - A value of 0 will cause an instant 'leap' to the first + frame, while values greater than 0 will cause a smooth transition.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/AnimateMD2.htm b/_release/help/commands/3d_commands/AnimateMD2.htm new file mode 100644 index 0000000..a049894 --- /dev/null +++ b/_release/help/commands/3d_commands/AnimateMD2.htm @@ -0,0 +1,84 @@ + + +Command: AnimateMD2 + + + + + + +

  AnimateMD2 md2[,mode][,speed#][,first_frame][,last_frame]  

+ +

+Parameters:
+

+ + + + +
md2 - md2 handle
+
+ mode (optional) - mode of animation
+ 0: stop animation
+ 1: loop animation (default)
+ 2: ping-pong animation
+ 3: one-shot animation

speed# (optional) - speed of animation. Defaults to 1.
+ first_frame (optional) - first frame of animation. Defaults to 1.
+ last_frame# (optional) - last frame of animation. Defaults to last frame of + all md2 animations.

+

Description:
+
+ + + + +
Starts an md2 entity animating.

The md2 will actually move from one + frame to the next when UpdateWorld is called, + usually once per main loop.

+

See also: LoadMD2, + MD2AnimTime, + MD2AnimLength, MD2Animating, + UpdateWorld.

+

Example:
+
+ + + + + +
; AnimateMD2 Example
+ ; ------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ ; Load md2
+ gargoyle=LoadMD2( "media/gargoyle/gargoyle.md2" )
+
+ ; Load md2 texture
+ garg_tex=LoadTexture( "media/gargoyle/gargoyle.bmp" )
+
+ ; Apply md2 texture to md2
+ EntityTexture gargoyle,garg_tex
+
+ ; Animate md2
+ AnimateMD2 gargoyle,1,0.1,32,46
+
+ PositionEntity gargoyle,0,-45,100
+ RotateEntity gargoyle,0,180,0
+
+ While Not KeyDown( 1 )
+ UpdateWorld
+ RenderWorld
+ Flip
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/Animating.htm b/_release/help/commands/3d_commands/Animating.htm new file mode 100644 index 0000000..9792359 --- /dev/null +++ b/_release/help/commands/3d_commands/Animating.htm @@ -0,0 +1,37 @@ + + +Command: Animating + + + + + + +

  Animating ( entity )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+

Description:
+
+ + + + +
Returns true if the specified entity is currently animating.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/AntiAlias.htm b/_release/help/commands/3d_commands/AntiAlias.htm new file mode 100644 index 0000000..c4da646 --- /dev/null +++ b/_release/help/commands/3d_commands/AntiAlias.htm @@ -0,0 +1,79 @@ + + +Command: AntiAlias + + + + + + +

  Antialias enable  

+ +

+Parameters:
+

+ + + + +
enable - true to enable fullscreen antialiasing, false to disable. Defaults +to false.
+

Description:
+
+ + + + +
Enables or disables fullscreen antialiasing.
+
+Fullscreen antialiasing is a technique used to smooth out the entire screen, so +that jagged lines are made less noticeable.
+
+Some 3D cards have built-in support for fullscreen antialiasing, which should +allow you to enable the effect without much slowdown. However, for cards without +built-in support for fullscreen antialiasing, enabling the effect may cause +severe slowdown.
+

Example:
+
+ + + + + +
; AntiAlias Example
+ ; -----------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ sphere=CreateSphere()
+ PositionEntity sphere,0,0,2
+
+ While Not KeyDown( 1 )
+
+ ; Toggle antialias enable value between true and false when spacebar is + pressed
+ If KeyHit( 57 )=True Then enable=1-enable
+
+ ; Enable/disable antialiasing
+ AntiAlias enable
+
+ RenderWorld
+
+ Text 0,0,"Press spacebar to toggle between AntiAlias True/False"
+ If enable=False Then Text 0,20,"AntiAlias False" Else Text 0,20,"AntiAlias + True"
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/BrushAlpha.htm b/_release/help/commands/3d_commands/BrushAlpha.htm new file mode 100644 index 0000000..480bdfd --- /dev/null +++ b/_release/help/commands/3d_commands/BrushAlpha.htm @@ -0,0 +1,49 @@ + + +Command: BrushAlpha + + + + + + +

  BrushAlpha brush,alpha#  

+ +

+Parameters:
+

+ + + + +
brush - brush handle
+ alpha# - alpha level of brush
+

Description:
+
+ + + + +
Sets the alpha level of a brush.

The alpha# value should be in the range 0-1. + The default brush alpha setting is 1.

The alpha level is how + transparent an entity is. A value of 1 will mean the entity is + non-transparent, i.e. opaque. A value of 0 will mean the entity is + completely transparent, i.e. invisible. Values between 0 and 1 will cause + varying amount of transparency accordingly, useful for imitating the look of + objects such as glass and ice.

+

An BrushAlpha value of 0 is especially useful as Blitz3D will not render + entities with such a value, but will still involve the entities in collision + tests. This is unlike + HideEntity, which doesn't involve entities in + collisions.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/BrushBlend.htm b/_release/help/commands/3d_commands/BrushBlend.htm new file mode 100644 index 0000000..4ada882 --- /dev/null +++ b/_release/help/commands/3d_commands/BrushBlend.htm @@ -0,0 +1,41 @@ + + +Command: BrushBlend + + + + + + +

  BrushBlend brush,blend  

+ +

+Parameters:
+

+ + + + +
brush - brush handle
+ blend -
+ 1: alpha
+ 2: multiply (default)
+ 3: add
+

Description:
+
+ + + + +
Sets the blending mode for a brush.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/BrushColor.htm b/_release/help/commands/3d_commands/BrushColor.htm new file mode 100644 index 0000000..c8c0fde --- /dev/null +++ b/_release/help/commands/3d_commands/BrushColor.htm @@ -0,0 +1,87 @@ + + +Command: BrushColor + + + + + + +

  BrushColor brush,red#,green#,blue#  

+ +

+Parameters:
+

+ + + + +
brush - brush handle
+ red# - brush red value
+ green# - brush green value
+ blue# - brush blue value
+

Description:
+
+ + + + +
Sets the colour of a brush.

The green, red and blue values should be in + the range 0-255. The default brush color is + 255,255,255.

Please note that if EntityFX or + BrushFX flag 2 is being used, brush colour will have no effect and vertex + colours will be used instead.

+

Example:
+
+ + + + + +
; BrushColor Example
+ ; ------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ cube=CreateCube()
+ PositionEntity cube,0,0,5
+
+ ; Create brush
+ brush=CreateBrush()
+
+ ; Set brush color
+ BrushColor brush,0,0,255
+
+ ; Paint mesh with brush
+ PaintMesh cube,brush
+
+ While Not KeyDown( 1 )
+
+ pitch#=0
+ yaw#=0
+ roll#=0
+
+ If KeyDown( 208 )=True Then pitch#=-1
+ If KeyDown( 200 )=True Then pitch#=1
+ If KeyDown( 203 )=True Then yaw#=-1
+ If KeyDown( 205 )=True Then yaw#=1
+ If KeyDown( 45 )=True Then roll#=-1
+ If KeyDown( 44 )=True Then roll#=1
+
+ TurnEntity cube,pitch#,yaw#,roll#
+
+ RenderWorld
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/BrushFX.htm b/_release/help/commands/3d_commands/BrushFX.htm new file mode 100644 index 0000000..682bc00 --- /dev/null +++ b/_release/help/commands/3d_commands/BrushFX.htm @@ -0,0 +1,45 @@ + + +Command: BrushFX + + + + + + +

  BrushFX brush,fx  

+ +

+Parameters:
+

+ + + + +
brush - brush handle
+
+ fx -
+ 1: full-bright
+ 2: use vertex colors instead of brush color
+ 4: flatshaded
+ 8: disable fog
+

Description:
+
+ + + + +
Sets miscellaneous effects for a brush.

Flags can be added to combine + two or more effects. For example, specifying a flag of 3 (1+2) will result + in a full-bright and vertex-coloured brush.

+

Example:
+
+ + + + + +
<example>
+

Index

+ + diff --git a/_release/help/commands/3d_commands/BrushShininess.htm b/_release/help/commands/3d_commands/BrushShininess.htm new file mode 100644 index 0000000..6d813c1 --- /dev/null +++ b/_release/help/commands/3d_commands/BrushShininess.htm @@ -0,0 +1,43 @@ + + +Command: BrushShininess + + + + + + +

  BrushShininess brush,shininess#  

+ +

+Parameters:
+

+ + + + +
brush - brush handle
+ shininess# - shininess of brush
+

Description:
+
+ + + + +
Sets the specular shininess of a brush.

The shininess# value should be in the range 0-1. + The default shininess setting is 0.

Shininess is how much brighter certain + areas of an object will appear to be when a light is shone directly at them.

+

Setting a shininess value of 1 for a medium to high poly sphere, combined + with the creation of a light shining in the direction of it, will give it + the appearance of a shiny snooker ball.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/BrushTexture.htm b/_release/help/commands/3d_commands/BrushTexture.htm new file mode 100644 index 0000000..298c37d --- /dev/null +++ b/_release/help/commands/3d_commands/BrushTexture.htm @@ -0,0 +1,91 @@ + + +Command: BrushTexture + + + + + + +

  BrushTexture brush,texture[,frame][,index]  

+ +

+Parameters:
+

+ + + + +
brush - brush handle
+ texture - texture handle
+ frame (optional) - texture frame. Defaults to 0.
+ index (optional) - texture index. Defaults to 0.
+

Description:
+
+ + + + +
Assigns a texture to a brush.

The optional + frame parameter specifies which animation frame, if any exist, should be + assigned to the brush.

+

The optional index parameter specifies texture layer that the texture + should be assigned to. Brushes have up to four texture layers, 0-3 + inclusive.

+

Example:
+
+ + + + + +
; CreateBrush Example
+ ; -------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ cube=CreateCube()
+ PositionEntity cube,0,0,5
+
+ ; Load texture
+ tex=LoadTexture( "media/b3dlogo.jpg" )
+
+ ; Create brush
+ brush=CreateBrush()
+
+ ; Apply texture to brush
+ BrushTexture brush,tex
+
+ ; Paint mesh with brush
+ PaintMesh cube,brush
+
+ While Not KeyDown( 1 )
+
+ pitch#=0
+ yaw#=0
+ roll#=0
+
+ If KeyDown( 208 )=True Then pitch#=-1
+ If KeyDown( 200 )=True Then pitch#=1
+ If KeyDown( 203 )=True Then yaw#=-1
+ If KeyDown( 205 )=True Then yaw#=1
+ If KeyDown( 45 )=True Then roll#=-1
+ If KeyDown( 44 )=True Then roll#=1
+
+ TurnEntity cube,pitch#,yaw#,roll#
+
+ RenderWorld
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CameraClsColor.htm b/_release/help/commands/3d_commands/CameraClsColor.htm new file mode 100644 index 0000000..825e387 --- /dev/null +++ b/_release/help/commands/3d_commands/CameraClsColor.htm @@ -0,0 +1,40 @@ + + +Command: CameraClsColor + + + + + + +

  CameraClsColor camera,red#,green#,blue#  

+ +

+Parameters:
+

+ + + + +
camera - camera handle
+ red# - red value of camera background color
+ green# - green value of camera background color
+ blue# - blue value of camera background color
+

Description:
+
+ + + + +
Sets camera background color. Defaults to 0,0,0.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CameraClsMode.htm b/_release/help/commands/3d_commands/CameraClsMode.htm new file mode 100644 index 0000000..d99cb8f --- /dev/null +++ b/_release/help/commands/3d_commands/CameraClsMode.htm @@ -0,0 +1,39 @@ + + +Command: CameraClsMode + + + + + + +

  CameraClsMode camera,cls_color,cls_zbuffer  

+ +

+Parameters:
+

+ + + + +
camera - camera handle
+ cls_color - true to clear the color buffer, false not to
+ cls_zbuffer - true to clear the z-buffer, false not to
+

Description:
+
+ + + + +
Sets camera clear mode.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CameraFogColor.htm b/_release/help/commands/3d_commands/CameraFogColor.htm new file mode 100644 index 0000000..5721506 --- /dev/null +++ b/_release/help/commands/3d_commands/CameraFogColor.htm @@ -0,0 +1,85 @@ + + +Command: CameraFogColor + + + + + + +

  CameraFogColor camera,red#,green#,blue#  

+ +

+Parameters:
+

+ + + + +
camera - camera handle
+ red# - red value of value
+ green# - green value of fog
+ blue# - blue value of fog
+

Description:
+
+ + + + +
Sets camera fog color.
+

Example:
+
+ + + + + +
plane=CreatePlane()
+ grass_tex=LoadTexture( "media/mossyground.bmp" )
+ EntityTexture plane,grass_tex
+
+ ; Set camera fog to 1 (linear fog)
+ CameraFogMode camera,1
+
+ ; Set camera fog range
+ CameraFogRange camera,1,10
+
+ ; Set initial fog colour values
+ red#=0
+ green#=0
+ blue#=0
+
+ While Not KeyDown( 1 )
+
+ ; Change red, green, blue values depending on key pressed
+ If KeyDown( 2 )=True And red#>0 Then red#=red#-1
+ If KeyDown( 3 )=True And red#<255 Then red#=red#+1
+ If KeyDown( 4 )=True And green#>0 Then green#=green#-1
+ If KeyDown( 5 )=True And green#<255 Then green#=green#+1
+ If KeyDown( 6 )=True And blue#>0 Then blue#=blue#-1
+ If KeyDown( 7 )=True And blue#<255 Then blue#=blue#+1
+
+ ; Set camera fog color using red, green, blue values
+ CameraFogColor camera,red#,green#,blue#
+
+ If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0
+ If KeyDown( 203 )=True Then TurnEntity camera,0,1,0
+ If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.05
+ If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.05
+
+ RenderWorld
+
+ Text 0,0,"Use cursor keys to move about the infinite plane"
+ Text 0,20,"Press keys 1-6 to change CameraFogColor red#,green#,blue# values
+ Text 0,40,"Fog Red: "+red#
+ Text 0,60,"Fog Green: "+green#
+ Text 0,80,"Fog Blue: "+blue#
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CameraFogMode.htm b/_release/help/commands/3d_commands/CameraFogMode.htm new file mode 100644 index 0000000..b6efc1e --- /dev/null +++ b/_release/help/commands/3d_commands/CameraFogMode.htm @@ -0,0 +1,88 @@ + + +Command: CameraFogMode + + + + + + +

  CameraFogMode camera,mode  

+ +

+Parameters:
+

+ + + + +
camera - sets camera fog mode
+ mode - fog mode
+ 0: no fog
+ 1: linear fog
+

Description:
+
+ + + + +
Sets the camera fog mode.

This will enable/disable fogging, a + technique used to gradually fade out graphics the further they are away from + the camera. The can be used to avoid 'pop-up', the moment at which 3D + objects suddenly appear on the horizon.

+

The default fog color is black and the default fog range is 1-1000, + although these can be changed by using + CameraFogColor and CameraFogRange + respectively.

+

Each camera can have its own fog mode, for multiple on-screen fog + effects.

+

Example:
+
+ + + + + +
; CameraFogMode Example
+ ; ---------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ PositionEntity camera,0,1,0
+ CameraFogRange camera,1,10
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ plane=CreatePlane()
+ grass_tex=LoadTexture( "media/mossyground.bmp" )
+ EntityTexture plane,grass_tex
+
+ While Not KeyDown( 1 )
+
+ ; Toggle camera fog mode between 0 and 1 when spacebar is pressed
+ If KeyHit( 57 )=True Then fog_mode=1-fog_mode : CameraFogMode + camera,fog_mode
+
+ If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0
+ If KeyDown( 203 )=True Then TurnEntity camera,0,1,0
+ If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.05
+ If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.05
+
+ RenderWorld
+
+ Text 0,0,"Use cursor keys to move about the infinite plane"
+ Text 0,20,"Press spacebar to toggle between CameraFogMode 0/1"
+ If fog_mode=False Then Text 0,40,"CameraFogMode 0" Else Text + 0,40,"CameraFogMode 1"
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CameraFogRange.htm b/_release/help/commands/3d_commands/CameraFogRange.htm new file mode 100644 index 0000000..b24ad2c --- /dev/null +++ b/_release/help/commands/3d_commands/CameraFogRange.htm @@ -0,0 +1,90 @@ + + +Command: CameraFogRange + + + + + + +

  CameraFogRange camera,near#,far#  

+ +

+Parameters:
+

+ + + + +
camera - camera handle
+ near# - distance in front of camera that fog starts
+ far# - distance in front of camera that fog ends
+

Description:
+
+ + + + +
Sets camera fog range.

The near parameter specifies at what distance + in front of the camera that the fogging effect will start; all 3D object + before this point will not be faded.

+

The far parameter specifies at what distance in front of the camera that + the fogging effect will end; all 3D objects beyond this point will be + completely faded out.

+

Example:
+
+ + + + + +
; CameraFogRange Example
+ ; ----------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ PositionEntity camera,0,1,0
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ plane=CreatePlane()
+ grass_tex=LoadTexture( "media/mossyground.bmp" )
+ EntityTexture plane,grass_tex
+
+ ; Set camera fog to 1 (linear fog)
+ CameraFogMode camera,1
+
+ ; Set intial fog range value
+ fog_range=10
+
+ While Not KeyDown( 1 )
+
+ ; If square brackets keys pressed then change fog range value
+ If KeyDown( 26 )=True Then fog_range=fog_range-1
+ If KeyDown( 27 )=True Then fog_range=fog_range+1
+
+ ; Set camera fog range
+ CameraFogRange camera,1,fog_range
+
+ If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0
+ If KeyDown( 203 )=True Then TurnEntity camera,0,1,0
+ If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.05
+ If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.05
+
+ RenderWorld
+
+ Text 0,0,"Use cursor keys to move about the infinite plane"
+ Text 0,20,"Press [ or ] to change CameraFogRange value"
+ Text 0,40,"CameraFogRange camera,1,"+fog_range
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CameraPick.htm b/_release/help/commands/3d_commands/CameraPick.htm new file mode 100644 index 0000000..f6d0bd7 --- /dev/null +++ b/_release/help/commands/3d_commands/CameraPick.htm @@ -0,0 +1,43 @@ + + +Command: CameraPick + + + + + + +

  CameraPick ( camera,viewport_x#,viewport_y# +)  

+ +

+Parameters:
+

+ + + + +
camera - camera handle
+ viewport_x# - 2D viewport coordinate
+ viewport_z# - 2D viewport coordinate
+

Description:
+
+ + + + +
Picks the entity positioned at the specified viewport coordinates.

+ Returns the entity picked, or 0 if none there.

+

An entity must have its EntityPickMode + set to a non-0 value value to be 'pickable'.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/CameraProject.htm b/_release/help/commands/3d_commands/CameraProject.htm new file mode 100644 index 0000000..062a9e7 --- /dev/null +++ b/_release/help/commands/3d_commands/CameraProject.htm @@ -0,0 +1,41 @@ + + +Command: CameraProject + + + + + + +

  CameraProject ( camera,x#,y#,z# )  

+ +

+Parameters:
+

+ + + + +
camera - camera handle
+ x# - world coordinate x
+ y# - world coordinate y
+ z# - world coordinate z
+

Description:
+
+ + + + +
Projects the world coordinates x,y,z on to the 2D screen. Returns true + if the coordinates are on-screen.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CameraRange.htm b/_release/help/commands/3d_commands/CameraRange.htm new file mode 100644 index 0000000..21fde22 --- /dev/null +++ b/_release/help/commands/3d_commands/CameraRange.htm @@ -0,0 +1,40 @@ + + +Command: CameraRange + + + + + + +

  CameraRange camera,near#,far#  

+ +

+Parameters:
+

+ + + + +
camera - camera handle
+ near - distance in front of camera that 3D objects start being drawn
+ far - distance in front of camera that 3D object stop being drawn
+

Description:
+
+ + + + +
Sets camera range.

Try and keep the ratio of far/near as small as + possible for optimal z-buffer performance. Defaults to 1,1000.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CameraViewport.htm b/_release/help/commands/3d_commands/CameraViewport.htm new file mode 100644 index 0000000..6453df1 --- /dev/null +++ b/_release/help/commands/3d_commands/CameraViewport.htm @@ -0,0 +1,88 @@ + + +Command: CameraViewport + + + + + + +

  CameraViewport camera,x,y,width,height  

+ +

+Parameters:
+

+ + + + +
camera - camera handle
+ x - x coordinate of top left hand corner of viewport
+ y - y coordinate of top left hand corner of viewport
+ width - width of viewport
+ height - height of viewport
+

Description:
+
+ + + + +
Sets the camera viewport position and size.

The camera viewport is the + area of the 2D screen that the 3D graphics as viewed by the camera are + displayed in.

+

Setting the camera viewport allows you to achieve spilt-screen and + rear-view mirror effects.

+

Example:
+
+ + + + + +
; CameraViewport Example
+ ; ----------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ ; Create first camera
+ cam1=CreateCamera()
+
+ ; Set the first camera's viewport so that it fills the top half of the + camera
+ CameraViewport cam1,0,0,GraphicsWidth(),GraphicsHeight()/2
+
+ ; Create second camera
+ cam2=CreateCamera()
+
+ ; Set the second camera's viewport so that it fills the bottom half of the + camera
+ CameraViewport cam2,0,GraphicsHeight()/2,GraphicsWidth(),GraphicsHeight()/2
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ plane=CreatePlane()
+ grass_tex=LoadTexture( "media/mossyground.bmp" )
+ EntityTexture plane,grass_tex
+ PositionEntity plane,0,-1,0
+
+ While Not KeyDown( 1 )
+
+ If KeyDown( 205 )=True Then TurnEntity cam1,0,-1,0
+ If KeyDown( 203 )=True Then TurnEntity cam1,0,1,0
+ If KeyDown( 208 )=True Then MoveEntity cam1,0,0,-0.05
+ If KeyDown( 200 )=True Then MoveEntity cam1,0,0,0.05
+
+ RenderWorld
+
+ Text 0,0,"Use cursor keys to move the first camera about the infinite plane"
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CameraZoom.htm b/_release/help/commands/3d_commands/CameraZoom.htm new file mode 100644 index 0000000..ef91094 --- /dev/null +++ b/_release/help/commands/3d_commands/CameraZoom.htm @@ -0,0 +1,38 @@ + + +Command: CameraZoom + + + + + + +

  CameraZoom camera,zoom#  

+ +

+Parameters:
+

+ + + + +
camera - camera handle
+ zoom# - zoom factor of camera
+

Description:
+
+ + + + +
Sets zoom factor for a camera. Defaults to 1.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CaptureWorld.htm b/_release/help/commands/3d_commands/CaptureWorld.htm new file mode 100644 index 0000000..9476af1 --- /dev/null +++ b/_release/help/commands/3d_commands/CaptureWorld.htm @@ -0,0 +1,41 @@ + + +Command: CaptureWorld + + + + + + +

  CaptureWorld  

+ +

+Parameters:
+

+ + + + +
None.
+

Description:
+
+ + + + +
Takes a snapshot of the position and orientation of each entity in the + world.

This snapshot can then be used with + RenderWorld to render entities at a point somewhere between their + captured position and their current position. See + RenderWorld for more about how and why this is done.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/ClearCollisions.htm b/_release/help/commands/3d_commands/ClearCollisions.htm new file mode 100644 index 0000000..ea8f9ef --- /dev/null +++ b/_release/help/commands/3d_commands/ClearCollisions.htm @@ -0,0 +1,104 @@ + + +Command: ClearCollisions + + + + + + +

  ClearCollisions  

+ +

+Parameters:
+

+ + + + +
None.
+

Description:
+
+ + + + +
Clears the collision information list.

Whenever you use the + Collisions command to enable collisions between + two different entity types, information is added to the collision list. + This command clears that list, so that no collisions will be detected until + the Collisions command is used again.

+

The command will not clear entity collision information. For example, + entity radius, type etc.

+

Example:
+
+ + + + + +
; ClearCollisions Example
+ ; -----------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ light=CreateLight()
+
+ sphere=CreateSphere( 32 )
+ PositionEntity sphere,-2,0,5
+
+ cone=CreateCone( 32 )
+ EntityType cone,type_cone
+ PositionEntity cone,2,0,5
+
+ ; Set collision type values
+ type_sphere=1
+ type_cone=2
+
+ ; Set up sphere collision data
+ EntityRadius sphere,1
+ EntityType sphere,type_sphere
+
+ ; Set up cone collision data
+ EntityType cone,type_cone
+
+ ; Enable collisions between type_sphere and type_cone, with sphere->polygon + method and slide response
+ Collisions type_sphere,type_cone,2,2
+
+ While Not KeyDown( 1 )
+
+ x#=0
+ y#=0
+ z#=0
+
+ If KeyDown( 203 )=True Then x#=-0.1
+ If KeyDown( 205 )=True Then x#=0.1
+ If KeyDown( 208 )=True Then y#=-0.1
+ If KeyDown( 200 )=True Then y#=0.1
+ If KeyDown( 44 )=True Then z#=-0.1
+ If KeyDown( 30 )=True Then z#=0.1
+
+ MoveEntity sphere,x#,y#,z#
+
+ ; If spacebar pressed then clear collisions
+ If KeyHit( 57 )=True Then ClearCollisions
+
+ ; Perform collision checking
+ UpdateWorld
+
+ RenderWorld
+
+ Text 0,0,"Use cursor/A/Z keys to move sphere"
+ Text 0,20,"Press spacebar to use ClearCollisions command"
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/ClearSurface.htm b/_release/help/commands/3d_commands/ClearSurface.htm new file mode 100644 index 0000000..bae5045 --- /dev/null +++ b/_release/help/commands/3d_commands/ClearSurface.htm @@ -0,0 +1,49 @@ + + +Command: ClearSurface + + + + + + +

  ClearSurface +surface,[clear_verts][,clear_triangles]  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ clear_verts (optional) - true to remove all vertices from the specified surface, + false not to. + Defaults to true.
+ clear_triangles (optional) - true to remove all triangles from the specified surface, + false not to. Defaults to + true.
+

Description:
+
+ + + + +
Removes all vertices and/or triangles from a surface.

This + is useful for deleting sections of mesh. The results will be instantly + visible.

+

After deleting a surface, you may wish to create it again but with a + slightly different polygon count for dynamic level of detail (LOD).

+
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/ClearTextureFilters.htm b/_release/help/commands/3d_commands/ClearTextureFilters.htm new file mode 100644 index 0000000..166b688 --- /dev/null +++ b/_release/help/commands/3d_commands/ClearTextureFilters.htm @@ -0,0 +1,37 @@ + + +Command: ClearTextureFilters + + + + + + +

  ClearTextureFilters  

+ +

+Parameters:
+

+ + + + +
None.
+

Description:
+
+ + + + +
Clears the current texture filter list.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/ClearWorld.htm b/_release/help/commands/3d_commands/ClearWorld.htm new file mode 100644 index 0000000..42d0245 --- /dev/null +++ b/_release/help/commands/3d_commands/ClearWorld.htm @@ -0,0 +1,42 @@ + + +Command: TFormNormal + + + + + + +

  ClearWorld [entities][,brushes][,textures]  

+ +

+Parameters:
+

+ + + + +
None.
+

Description:
+
+ + + + +
Clears a world of all entities, brushes and/or textures.

This is + useful for when a game level may have finished and you wish to free + everything up in preparation for loading new entities/brushes/textures + without having to free every entity/brush/texture individually.

+

See also: FreeEntity, + FreeBrush, FreeTexture.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CollisionEntity.htm b/_release/help/commands/3d_commands/CollisionEntity.htm new file mode 100644 index 0000000..1a48926 --- /dev/null +++ b/_release/help/commands/3d_commands/CollisionEntity.htm @@ -0,0 +1,40 @@ + + +Command: CollisionEntity + + + + + + +

  CollisionEntity ( entity,index )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ index - index of collision
+

Description:
+
+ + + + +
Returns the other entity involved in a particular collision. Index + should be in the range 1...CountCollisions( + entity ), inclusive.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CollisionNX.htm b/_release/help/commands/3d_commands/CollisionNX.htm new file mode 100644 index 0000000..933e6dd --- /dev/null +++ b/_release/help/commands/3d_commands/CollisionNX.htm @@ -0,0 +1,42 @@ + + +Command: CollisionNY + + + + + + +

  CollisionNX# ( entity,index )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ index - index of collision
+

Description:
+
+ + + + +
Returns the x component of the normal of a particular collision.

Index should + be in the range 1...CountCollisions( + entity ) inclusive.

+

See also: CollisionNY, + CollisionNZ.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/CollisionNY.htm b/_release/help/commands/3d_commands/CollisionNY.htm new file mode 100644 index 0000000..dfa0c2a --- /dev/null +++ b/_release/help/commands/3d_commands/CollisionNY.htm @@ -0,0 +1,42 @@ + + +Command: CollisionNY + + + + + + +

  CollisionNY# ( entity,index )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ index - index of collision
+

Description:
+
+ + + + +
Returns the y component of the normal of a particular collision.

Index should + be in the range 1...CountCollisions( + entity ) inclusive.

+

See also: CollisionNX, + CollisionNZ.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/CollisionNZ.htm b/_release/help/commands/3d_commands/CollisionNZ.htm new file mode 100644 index 0000000..fb13a64 --- /dev/null +++ b/_release/help/commands/3d_commands/CollisionNZ.htm @@ -0,0 +1,42 @@ + + +Command: CollisionNZ + + + + + + +

  CollisionNX# ( entity,index )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ index - index of collision
+

Description:
+
+ + + + +
Returns the z component of the normal of a particular collision.

Index should + be in the range 1...CountCollisions( + entity ) inclusive.

+

See also: CollisionNX, + CollisionNY.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/CollisionSurface.htm b/_release/help/commands/3d_commands/CollisionSurface.htm new file mode 100644 index 0000000..3ccaa13 --- /dev/null +++ b/_release/help/commands/3d_commands/CollisionSurface.htm @@ -0,0 +1,37 @@ + + +Command: CollisionSurface + + + + + + +

  CollisionSurface  

+ +

+Parameters:
+

+ + + + +
<param description>
+

Description:
+
+ + + + +
<description>
+

Example:
+
+ + + + + +
<example>
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CollisionTime.htm b/_release/help/commands/3d_commands/CollisionTime.htm new file mode 100644 index 0000000..4ce3508 --- /dev/null +++ b/_release/help/commands/3d_commands/CollisionTime.htm @@ -0,0 +1,37 @@ + + +Command: CollisionTime + + + + + + +

  CollisionTime  

+ +

+Parameters:
+

+ + + + +
<param description>
+

Description:
+
+ + + + +
<description>
+

Example:
+
+ + + + + +
<example>
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CollisionTriangle.htm b/_release/help/commands/3d_commands/CollisionTriangle.htm new file mode 100644 index 0000000..337468d --- /dev/null +++ b/_release/help/commands/3d_commands/CollisionTriangle.htm @@ -0,0 +1,37 @@ + + +Command: CollisionTriangle + + + + + + +

  CollisionTriangle  

+ +

+Parameters:
+

+ + + + +
<param description>
+

Description:
+
+ + + + +
<description>
+

Example:
+
+ + + + + +
<example>
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CollisionX.htm b/_release/help/commands/3d_commands/CollisionX.htm new file mode 100644 index 0000000..e128ddb --- /dev/null +++ b/_release/help/commands/3d_commands/CollisionX.htm @@ -0,0 +1,42 @@ + + +Command: CollisionX + + + + + + +

  CollisionX# ( entity,index )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ index - index of collision
+

Description:
+
+ + + + +
Returns the world x coordinate of a particular collision.

Index should + be in the range 1...CountCollisions( + entity ) inclusive.

+

See also: CollisionY, + CollisionZ.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/CollisionY.htm b/_release/help/commands/3d_commands/CollisionY.htm new file mode 100644 index 0000000..616669c --- /dev/null +++ b/_release/help/commands/3d_commands/CollisionY.htm @@ -0,0 +1,42 @@ + + +Command: CollisionY + + + + + + +

  CollisionY# ( entity,index )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ index - index of collision
+

Description:
+
+ + + + +
Returns the world y coordinate of a particular collision.

Index should + be in the range 1...CountCollisions( + entity ) inclusive.

+

See also: CollisionX, + CollisionZ.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/CollisionZ.htm b/_release/help/commands/3d_commands/CollisionZ.htm new file mode 100644 index 0000000..bde5b3c --- /dev/null +++ b/_release/help/commands/3d_commands/CollisionZ.htm @@ -0,0 +1,42 @@ + + +Command: CollisionZ + + + + + + +

  CollisionZ# ( entity,index )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ index - index of collision
+

Description:
+
+ + + + +
Returns the world z coordinate of a particular collision.

Index should + be in the range 1...CountCollisions( + entity ) inclusive.

+

See also: CollisionX, + CollisionZ.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/Collisions.htm b/_release/help/commands/3d_commands/Collisions.htm new file mode 100644 index 0000000..8daf155 --- /dev/null +++ b/_release/help/commands/3d_commands/Collisions.htm @@ -0,0 +1,191 @@ + + +Command: Collisions + + + + + + +

  Collisions +src_type,dest_type,method,response  

+ +

+Parameters:
+

+ + + + +
src_type - entity type to be checked for collisions.
+ dest_type - entity type to be collided with.
+
+ method - collision detection method.
+ 1: sphere-to-sphere collisions
+ 2: sphere-to-polygon collisions
+ 3: sphere-to-box collisions
+
+ response - what the source entity does when a collision occurs.
+ 1: stop
+ 2: slide1 - full sliding collision
+ 3: slide2 - prevent entities from sliding down slopes
+

Description:
+
+ + + + +
Enables collisions between two different entity types.

Entity types + are just numbers you assign to an entity using + EntityType. Blitz uses then uses the entity types to check for + collisions between all the entities that have those entity types.

+

Blitz has many ways of checking for collisions, as denoted by the method + parameter. However, collision checking is always sphere to something. In + order for Blitz to know what size a source entity is, you must first assign + an entity radius to all source entities using + EntityRadius.

+

In the case of a collision detection method of 1 being selected + (sphere-to-sphere), then the destination entities concerned will need to + have an EntityRadius assigned to them too. In + the case of method being 2 being selected (sphere-to-box), then the + destination entities will need to have an EntityBox + assigned to them. Method No.2 (sphere-to-polygon) requires nothing to be + assigned to the destination entities.

+

Not only does Blitz check for collisions, but it acts upon them when it + detects them too, as denoted by the response parameter. You have three + options in this situation. You can either choose to make the source entity + stop, slide or only slide upwards.

+

All collision checking occurs, and collision responses are acted out, + when UpdateWorld is called.
+
+ Finally, every time the Collision command is used, collision information is + added to the collision information list. This can be cleared at any time + using the ClearCollisions command.

+

Example:
+
+ + + + + +
; Collisions Example
+ ; ------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ ; Set collision type values
+ type_character=1
+ type_scenery=2
+
+ camera=CreateCamera()
+ RotateEntity camera,45,0,0
+ PositionEntity camera,0,15,-10
+
+ light=CreateLight()
+ RotateEntity light,45,0,0
+
+ ; Create sphere 'character'
+ sphere=CreateSphere( 32 )
+ EntityRadius sphere,1
+ EntityType sphere,type_character
+ PositionEntity sphere,0,7,0
+
+ ; Create cube 'scenery'
+ cube=CreateCube()
+ EntityRadius cube,1
+ EntityType cube,type_scenery
+ PositionEntity cube,0,-5,0
+ EntityColor cube,127,0,0
+ ScaleEntity cube,10,10,10
+
+ ; Create cylinder 'scenery'
+ cylinder=CreateCylinder( 32 )
+ ScaleEntity cylinder,2,2,2
+ EntityColor cylinder,255,0,0
+ EntityType cylinder,type_scenery
+ PositionEntity cylinder,-4,7,-4
+
+ ; Create cone 'scenery'
+ cone=CreateCone( 32 )
+ ScaleEntity cone,2,2,2
+ EntityColor cone,255,0,0
+ EntityType cone,type_scenery
+ PositionEntity cone,4,7,-4
+
+ ; Create prism 'scenery'
+ prism=CreateCylinder( 3 )
+ ScaleEntity prism,2,2,2
+ EntityColor prism,255,0,0
+ EntityType prism,type_scenery
+ PositionEntity prism,-4,7,4
+ RotateEntity prism,0,180,0
+
+ ; Create pyramid 'scenery'
+ pyramid=CreateCone( 4 )
+ ScaleEntity pyramid,2,2,2
+ EntityColor pyramid,255,0,0
+ EntityType pyramid,type_scenery
+ RotateEntity pyramid,0,45,0
+ PositionEntity pyramid,4,7,4
+
+ ; Set collision method and response values
+ method=2
+ response=2
+
+ method_info$="sphere-to-polygon"
+ response_info$="slide1"
+
+ While Not KeyDown( 1 )
+
+ x#=0
+ y#=0
+ z#=0
+
+ If KeyDown( 203 )=True Then x#=-0.1
+ If KeyDown( 205 )=True Then x#=0.1
+ If KeyDown( 208 )=True Then z#=-0.1
+ If KeyDown( 200 )=True Then z#=0.1
+
+ MoveEntity sphere,x#,y#,z#
+ MoveEntity sphere,0,-0.02,0
+
+ ; Change collision method
+ If KeyHit(50)=True
+ method=method+1
+ If method=4 Then method=1
+ If method=1 Then method_info$="sphere-to-sphere"
+ If method=2 Then method_info$="sphere-to-polygon"
+ If method=3 Then method_info$="sphere-to-box"
+ EndIf
+
+ ; Change collision response
+ If KeyHit(19)=True
+ response=response+1
+ If response=4 Then response=1
+ If response=1 Then response_info$="stop"
+ If response=2 Then response_info$="slide1"
+ If response=3 Then response_info$="slide2"
+ EndIf
+
+ ; Enable Collions between type_character and type_scenery
+ Collisions type_character,type_scenery,method,response
+
+ ; Perform collision checking
+ UpdateWorld
+
+ RenderWorld
+
+ Text 0,0,"Use cursor keys to move sphere"
+ Text 0,20,"Press M to change collision Method (currently: "+method_info$+")"
+ Text 0,40,"Press R to change collision Response (currently: "+response_info$+")"
+ Text 0,60,"Collisions type_character,type_scenery,"+method+","+response
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CopyEntity.htm b/_release/help/commands/3d_commands/CopyEntity.htm new file mode 100644 index 0000000..85e0b30 --- /dev/null +++ b/_release/help/commands/3d_commands/CopyEntity.htm @@ -0,0 +1,40 @@ + + +Command: CopyEntity + + + + + + +

  CopyEntity ( entity[,parent] )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ parent (optional) - parent entity of copied entity
+

Description:
+
+ + + + +
Creates a copy of an entity and returns the copied entity's handle.

If + a parent entity is specified, then the copied entity will be created at the + parent entity's position. Otherwise, it will be created at 0,0,0.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CountChildren.htm b/_release/help/commands/3d_commands/CountChildren.htm new file mode 100644 index 0000000..86bd546 --- /dev/null +++ b/_release/help/commands/3d_commands/CountChildren.htm @@ -0,0 +1,37 @@ + + +Command: CountChildren + + + + + + +

  CountChildren ( entity )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+

Description:
+
+ + + + +
Returns the number of children of an entity.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CountCollisions.htm b/_release/help/commands/3d_commands/CountCollisions.htm new file mode 100644 index 0000000..5bdec5d --- /dev/null +++ b/_release/help/commands/3d_commands/CountCollisions.htm @@ -0,0 +1,38 @@ + + +Command: CountCollisions + + + + + + +

  CountCollisions ( entity )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+

Description:
+
+ + + + +
Returns how many collisions an entity was involved in during the last + UpdateWorld.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CountSurfaces.htm b/_release/help/commands/3d_commands/CountSurfaces.htm new file mode 100644 index 0000000..f1c89b0 --- /dev/null +++ b/_release/help/commands/3d_commands/CountSurfaces.htm @@ -0,0 +1,39 @@ + + +Command: CountSurfaces + + + + + + +

  CountSurfaces ( mesh )  

+ +

+Parameters:
+

+ + + + +
mesh - mesh handle
+

Description:
+
+ + + + +
Returns the number of surfaces in a mesh.

Surfaces are sections of + mesh. A mesh may contain only one section, or very many.

See also: + GetSurface.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CountTriangles.htm b/_release/help/commands/3d_commands/CountTriangles.htm new file mode 100644 index 0000000..9974e7b --- /dev/null +++ b/_release/help/commands/3d_commands/CountTriangles.htm @@ -0,0 +1,37 @@ + + +Command: CountTriangles + + + + + + +

  CountTriangles ( surface )  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+

Description:
+
+ + + + +
Returns the number of triangles in a surface.
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/CountVertices.htm b/_release/help/commands/3d_commands/CountVertices.htm new file mode 100644 index 0000000..d08c4b4 --- /dev/null +++ b/_release/help/commands/3d_commands/CountVertices.htm @@ -0,0 +1,37 @@ + + +Command: CountVertices + + + + + + +

  CountVertices ( surface )  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+

Description:
+
+ + + + +
Returns the number of vertices in a surface.
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/CreateBrush.htm b/_release/help/commands/3d_commands/CreateBrush.htm new file mode 100644 index 0000000..86b2606 --- /dev/null +++ b/_release/help/commands/3d_commands/CreateBrush.htm @@ -0,0 +1,101 @@ + + +Command: CreateBrush + + + + + + +

  CreateBrush ( [red#][,green#][,blue#] )  

+ +

+Parameters:
+

+ + + + +
red# (optional) - brush red value
+ green# (optional) - brush green value
+ blue# (optional) - brush blue value
+

Description:
+
+ + + + +
Creates a brush and returns a brush handle.

The optional green, red and blue values + allow you to set the colour of the brush. Values should be in the range + 0-255. If omitted the values default to 255.
+
+ A brush is a collection of properties such as Colour, Alpha, Shininess, + Texture etc that are all stored as part of the brush. Then, all these properties can + be applied to an entity, mesh or surface at once just by using + PaintEntity, PaintMesh + or PaintSurface.

+

When creating your own + mesh, if you wish for certain surfaces to look differently from one + another, then you will need to use brushes to paint individual surfaces. Using commands such as EntityColor, EntityAlpha will apply the effect to all + surfaces at once, which may not be what you wish to achieve.

See also: + LoadBrush.

+

Example:
+
+ + + + + +
; CreateBrush Example
+ ; -------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ cube=CreateCube()
+ PositionEntity cube,0,0,5
+
+ ; Load texture
+ tex=LoadTexture("../media/b3dlogo.jpg")
+
+ ; Create brush
+ brush=CreateBrush()
+
+ ; Apply texture to brush
+ BrushTexture brush,tex
+
+ ; And some shininess
+ BrushShininess brush,1
+
+ ; Paint mesh with brush
+ PaintMesh cube,brush
+
+ While Not KeyDown( 1 )
+
+ pitch#=0
+ yaw#=0
+ roll#=0
+
+ If KeyDown( 208 )=True Then pitch#=-1
+ If KeyDown( 200 )=True Then pitch#=1
+ If KeyDown( 203 )=True Then yaw#=-1
+ If KeyDown( 205 )=True Then yaw#=1
+ If KeyDown( 45 )=True Then roll#=-1
+ If KeyDown( 44 )=True Then roll#=1
+
+ TurnEntity cube,pitch#,yaw#,roll#
+
+ RenderWorld
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CreateCamera.htm b/_release/help/commands/3d_commands/CreateCamera.htm new file mode 100644 index 0000000..5f9fab3 --- /dev/null +++ b/_release/help/commands/3d_commands/CreateCamera.htm @@ -0,0 +1,67 @@ + + +Command: CreateCamera + + + + + + +

  CreateCamera ( [parent] )  

+ +

+Parameters:
+

+ + + + +
parent (optional) - parent entity of camera
+

Description:
+
+ + + + +
Creates a camera entity and returns its handle.

Without + at least one camera, you won't be able to see anything in your 3D world. With more than one camera, you will be to achieve effect such as + split-screen modes and rear-view mirrors.

+

A camera can only render to the backbuffer. If you wish to display 3D + graphics on an image or a texture then copy the contents of the backbuffer + to the appropriate buffer.

+

The optional parent parameter allow you to specify a parent entity for + the camera so that when the parent is moved the child camera will move with + it. However, this relationship is one way; applying movement commands to the + child will not affect the parent.

+

Specifying a parent entity will still result in the camera being created + at position 0,0,0 rather than at the parent entity's position.

+

Example:
+
+ + + + + +
; CreateCamera Example
+ ; --------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ ; Create camera
+ camera=CreateCamera()
+
+ light=CreateLight()
+
+ cone=CreateCone()
+ PositionEntity cone,0,0,5
+
+ While Not KeyDown( 1 )
+ RenderWorld
+ Flip
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/CreateCone.htm b/_release/help/commands/3d_commands/CreateCone.htm new file mode 100644 index 0000000..f44859c --- /dev/null +++ b/_release/help/commands/3d_commands/CreateCone.htm @@ -0,0 +1,84 @@ + + +Command: CreateCone + + + + + + +

  CreateCone ( [segments][,parent][,solid] )  

+ +

+Parameters:
+

+ + + + +
segments (optional) - cone detail. Defaults to 8.
+ parent (optional) - parent entity of cone
+ solid (optional) - true for a cone with a + base, false for a cone without a base. Defaults to true.
+

Description:
+
+ + + + +
Creates a cone mesh/entity and returns its handle.

The cone will be centred + at 0,0,0 and the base of the cone will have a radius of 1.

+

The segments value must be in the range 3-100 inclusive, although this is + only checked in debug mode. A common mistake + is to leave debug mode off and specify the parent parameter + (usually an eight digit memory address) in the place of the segments value. + As the amount of polygons used to create a cone is exponentially + proportional to the segments value, this will result in Blitz trying to create a + cone + with unimaginable amounts of polygons! Depending on how unlucky you are, + your computer will then crash.

Example segments values (solid=true):
+ 4: 6 polygons - a pyramid
+ 8: 14 polygons - bare minimum amount of polygons for a cone
+ 16: 30 polygons - smooth cone at medium-high distances
+ 32: 62 polygons - smooth cone at close distances

The + optional parent parameter allow you to specify a parent entity for the cone + so that when the parent is moved the child cone will move with it. However, + this relationship is one way; applying movement commands to the child will + not affect the parent.

+

Specifying a parent entity will still result in the cone being created at + position 0,0,0 rather than at the parent entity's position.

+

See also: + CreateCube, CreateSphere, + CreateCylinder.

+

Example:
+
+ + + + + +
; CreateCone Example
+ ; ------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ ; Create cone
+ cone=CreateCone()
+
+ PositionEntity cone,0,0,5
+
+ While Not KeyDown( 1 )
+ RenderWorld
+ Flip
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/CreateCube.htm b/_release/help/commands/3d_commands/CreateCube.htm new file mode 100644 index 0000000..2705ecb --- /dev/null +++ b/_release/help/commands/3d_commands/CreateCube.htm @@ -0,0 +1,69 @@ + + +Command: CreateCube + + + + + + +

  CreateCube( [parent] )  

+ +

+Parameters:
+

+ + + + +
parent (optional) - parent entity of cube
+

Description:
+
+ + + + +
Creates a cube mesh/entity and returns its handle.

The cube will extend from + -1,-1,-1 to +1,+1,+1.

+ +

The optional parent parameter allow you to specify a parent entity for + the cube so that when the parent is moved the child cube will move with it. + However, this relationship is one way; applying movement commands to the + child will not affect the parent.

+

Specifying a parent entity will still result in the cube being created at + position 0,0,0 rather than at the parent entity's position.

+

See also: + CreateSphere, + CreateCylinder, CreateCone.

+

Example:
+
+ + + + + +
; CreateCube Example
+ ; ------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ ; Create cube
+ cube=CreateCube()
+
+ PositionEntity cube,0,0,5
+
+ While Not KeyDown( 1 )
+ RenderWorld
+ Flip
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/CreateCylinder.htm b/_release/help/commands/3d_commands/CreateCylinder.htm new file mode 100644 index 0000000..ba8dd57 --- /dev/null +++ b/_release/help/commands/3d_commands/CreateCylinder.htm @@ -0,0 +1,84 @@ + + +Command: CreateCylinder + + + + + + +

  CreateCylinder ( [segments][,parent][,solid] )  

+ +

+Parameters:
+

+ + + + +
segments (optional) - cylinder detail. Defaults to 8.
+ parent (optional) - parent entity of cylinder
+ solid (optional) - true for a cylinder, false for a tube. Defaults to true.
+

Description:
+
+ + + + +
Creates a cylinder mesh/entity and returns its handle.

The cylinder + will be centred + at 0,0,0 and will have a radius of 1.

+

The segments value must be in the range 3-100 inclusive, although this is + only checked in debug mode. A common mistake + is to leave debug mode off and specify the parent parameter + (usually an eight digit memory address) in the place of the segments value. + As the amount of polygons used to create a cylinder is exponentially + proportional to the segments value, this will result in Blitz trying to create a + cylinder + with unimaginable amounts of polygons! Depending on how unlucky you are, + your computer may then crash.

Example segments values (solid=true):
+ 3: 8 polygons - a prism
+ 8: 28 polygons - bare minimum amount of polygons for a cylinder
+ 16: 60 polygons - smooth cylinder at medium-high distances
+ 32: 124 polygons - smooth cylinder at close distances

The + optional parent parameter allow you to specify a parent entity for the + cylinder so that when the parent is moved the child cylinder will move with + it. However, this relationship is one way; applying movement commands to the + child will not affect the parent.

+

Specifying a parent entity will still result in the cylinder being + created at position 0,0,0 rather than at the parent entity's position.

+

See also: + CreateCube, + CreateSphere, CreateCone.

+

Example:
+
+ + + + + +
; CreateCylinder Example
+ ; ----------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ ; Create cylinder
+ cylinder=CreateCylinder()
+
+ PositionEntity cylinder,0,0,5
+
+ While Not KeyDown( 1 )
+ RenderWorld
+ Flip
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/CreateLight.htm b/_release/help/commands/3d_commands/CreateLight.htm new file mode 100644 index 0000000..99ef661 --- /dev/null +++ b/_release/help/commands/3d_commands/CreateLight.htm @@ -0,0 +1,65 @@ + + +Command: CreateLight + + + + + + +

  CreateLight ( [type][,parent] )  

+ +

+Parameters:
+

+ + + + +
type (optional) - type of light
+ 1: directional
+ 2: point
+ 3: spot
+
+ parent (optional) - parent entity of light
+

Description:
+
+ + + + +
Creates a light.

Lights work by affecting the colour of all vertices + within the light's range. You need at to create at least one light if you + wish to use 3D graphics otherwise everything will appear flat.
+
+ The optional type parameter allows you to specify the type of light you wish + to create. A value of 1 creates a directional light. This works similar to a + sun shining on a house. All walls facing a certain direction are lit the + same. How much they are lit by depends on the angle of the light reaching + them.
+
+ A value of 2 creates a point light. This works a little bit like a light + bulb in a house, starting from a central point and gradually fading + outwards.
+
+ A value of 3 creates a spot light. This is a cone of light. This works + similar to shining a torch in a house. It starts with an inner angle of + light, and then extends towards an outer angle of light.

+ +

The optional parent parameter allow you to specify a parent entity for + the light so that when the parent is moved the child light will move with + it. However, this relationship is one way; applying movement commands to the + child will not affect the parent.

+

Specifying a parent entity will still result in the light being created + at position 0,0,0 rather than at the parent entity's position.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/CreateListener.htm b/_release/help/commands/3d_commands/CreateListener.htm new file mode 100644 index 0000000..122bac8 --- /dev/null +++ b/_release/help/commands/3d_commands/CreateListener.htm @@ -0,0 +1,45 @@ + + +Command: CreateListener + + + + + + +

  CreateListener ( parent[,rolloff_factor#][,doppler_scale#][,distance_scale#] +)  

+ +

+Parameters:
+

+ + + + +
parent - parent entity of listener. A parent entity, typically a camera, + must be specified to 'carry' the listener around.
+ rolloff_factor# (optional) - the rate at which volume diminishes with + distance. Defaults to 1.
+ doppler_scale# (optional) - the severity of the doppler effect. Defaults to + 1.
+ distance_scale# (optional) - artificially scales distances. Defaults to 1.
+

Description:
+
+ + + + +
Creates a listener entity and returns its handle. Currently, only a + single listener is supported.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CreateMesh.htm b/_release/help/commands/3d_commands/CreateMesh.htm new file mode 100644 index 0000000..af361eb --- /dev/null +++ b/_release/help/commands/3d_commands/CreateMesh.htm @@ -0,0 +1,37 @@ + + +Command: CreateMesh + + + + + + +

  CreateMesh ( [parent] )  

+ +

+Parameters:
+

+ + + + +
parent (optional) - parent entity of mesh
+

Description:
+
+ + + + +
Creates a mesh and returns a mesh handle.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CreateMirror.htm b/_release/help/commands/3d_commands/CreateMirror.htm new file mode 100644 index 0000000..8dc26ba --- /dev/null +++ b/_release/help/commands/3d_commands/CreateMirror.htm @@ -0,0 +1,91 @@ + + +Command: CreateMirror + + + + + + +

  CreateMirror ( [parent] )  

+ +

+Parameters:
+

+ + + + +
parent - parent entity of mirror
+

Description:
+
+ + + + +
Creates a mirror entity and returns its handle.

A mirror entity is + basically a flat, infinite 'ground'. This ground is invisible, except it + reflects anything above it, below it. It is useful for games where you want + have the effect of a shiny floor showing a reflection. For a true shiny + floor efffect, try combining a mirror entity with a textured plane entity + that has an alpha level of 0.5.

+

The optional parent parameter allow you to specify a parent entity for + the mirror so that when the parent is moved the child mirror will move + with it. However, this relationship is one way; applying movement commands + to the child will not affect the parent.

+

Specifying a parent entity will still result in the mirror being created + at position 0,0,0 rather than at the parent entity's position.

+

See also: CreatePlane.

+

Example:
+
+ + + + + +
; CreateMirror Example
+ ; --------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ PositionEntity camera,0,1,-5
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ ; Create cone
+ cone=CreateCone(32)
+ PositionEntity cone,0,2,0
+
+ ; Create plane
+ plane=CreatePlane()
+ grass_tex=LoadTexture( "media/chorme-2.bmp" )
+ EntityTexture plane,grass_tex
+ EntityAlpha plane,0.5
+
+ ; Create mirror
+ mirror=CreateMirror()
+
+ While Not KeyDown( 1 )
+
+ If KeyDown( 203 )=True Then MoveEntity cone,-0.1,0,0
+ If KeyDown( 205 )=True Then MoveEntity cone,0.1,0,0
+ If KeyDown( 208 )=True Then MoveEntity cone,0,-0.1,0
+ If KeyDown( 200 )=True Then MoveEntity cone,0,0.1,0
+ If KeyDown( 44 )=True Then MoveEntity cone,0,0,-0.1
+ If KeyDown( 30 )=True Then MoveEntity cone,0,0,0.1
+
+ RenderWorld
+
+ Text 0,0,"Use cursor/A/Z keys to move cone above infinite mirror"
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/CreatePivot.htm b/_release/help/commands/3d_commands/CreatePivot.htm new file mode 100644 index 0000000..62acbd4 --- /dev/null +++ b/_release/help/commands/3d_commands/CreatePivot.htm @@ -0,0 +1,47 @@ + + +Command: CreatePivot + + + + + + +

  CreatePivot ( [parent] )  

+ +

+Parameters:
+

+ + + + +
parent (optional) - parent entity of pivot
+

Description:
+
+ + + + +
Creates a pivot entity.

A pivot entity is an invisible + point in 3D space that's main use is to act as a parent entity to other + entities. The pivot can then be used to control lots of entities at once, or + act as new centre of rotation for other entities.

+

To enforce this relationship; use EntityParent + or make use of the optional parent entity parameter available with all + entity load/creation commands.

+

Indeed, this parameter is also available with the CreatePivot command if + you wish for the pivot to have a parent entity itself.

+
+
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/CreatePlane.htm b/_release/help/commands/3d_commands/CreatePlane.htm new file mode 100644 index 0000000..649c1c3 --- /dev/null +++ b/_release/help/commands/3d_commands/CreatePlane.htm @@ -0,0 +1,85 @@ + + +Command: CreatePlane + + + + + + +

  CreatePlane ( [sub_divs][,parent] )  

+ +

+Parameters:
+

+ + + + +
sub_divs - sub divisions of plane
+ parent (optional) - parent entity of plane
+

Description:
+
+ + + + +
Creates a plane entity and returns its handle.

A plane entity is + basically a flat, infinite 'ground'. It is useful for outdoor games where + you never want the player to see/reach the edge of the game world.

+

The optional sub_divs parameter specified how sub divisions of polygons + the plane will have. Although a plane is flat and so adding extra polygons + will not make it smoother, adding more polygons will allow more vertices to + be lit for more detailed lighting effects.

+

The optional parent parameter allow you to specify a parent entity for + the plane so that when the parent is moved the child plane will move + with it. However, this relationship is one way; applying movement commands + to the child will not affect the parent.

+

Specifying a parent entity will still result in the plane being created + at position 0,0,0 rather than at the parent entity's position.

+

See also: CreateMirror.

+

Example:
+
+ + + + + +
; CreatePlane Example
+ ; -------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ PositionEntity camera,0,1,0
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ ; Create plane
+ plane=CreatePlane()
+
+ grass_tex=LoadTexture( "media/mossyground.bmp" )
+
+ EntityTexture plane,grass_tex
+
+ While Not KeyDown( 1 )
+
+ If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0
+ If KeyDown( 203 )=True Then TurnEntity camera,0,1,0
+ If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.05
+ If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.05
+
+ RenderWorld
+
+ Text 0,0,"Use cursor keys to move about the infinite plane"
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/CreateSphere.htm b/_release/help/commands/3d_commands/CreateSphere.htm new file mode 100644 index 0000000..d5309e4 --- /dev/null +++ b/_release/help/commands/3d_commands/CreateSphere.htm @@ -0,0 +1,81 @@ + + +Command: CreateSphere + + + + + + +

  CreateSphere ( [segments][,parent] )  

+ +

+Parameters:
+

+ + + + +
segments (optional) - sphere detail. Defaults to 8.
+ parent (optional) - parent entity of sphere
+

Description:
+
+ + + + +
Creates a sphere mesh/entity and returns its handle.

The sphere will + be centred + at 0,0,0 and will have a radius of 1.

+

The segments value must be in the range 2-100 inclusive, although this is + only checked in debug mode. A common mistake + is to leave debug mode off and specify the parent parameter + (usually an eight digit memory address) in the place of the segments value. + As the amount of polygons used to create a sphere is exponentially + proportional to the segments value, this will result in Blitz trying to create a sphere + with unimaginable amounts of polygons! Depending on how unlucky you are, + your computer will then crash.

Example segments values:
+ 8: 224 polygons - bare minimum amount of polygons for a sphere
+ 16: 960 polygons - smooth looking sphere at medium-high distances
+ 32: 3968 polygons - smooth sphere at close distances

The + optional parent parameter allow you to specify a parent entity for the + sphere so that when the parent is moved the child sphere will move with it. + However, this relationship is one way; applying movement commands to the + child will not affect the parent.

+

Specifying a parent entity will still result in the sphere being created + at position 0,0,0 rather than at the parent entity's position.

+

See also: + CreateCube, + CreateCylinder, CreateCone.

+

Example:
+
+ + + + + +
; CreateSphere Example
+ ; --------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ ; Create sphere
+ sphere=CreateSphere()
+
+ PositionEntity sphere,0,0,5
+
+ While Not KeyDown( 1 )
+ RenderWorld
+ Flip
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/CreateSprite.htm b/_release/help/commands/3d_commands/CreateSprite.htm new file mode 100644 index 0000000..d123fb5 --- /dev/null +++ b/_release/help/commands/3d_commands/CreateSprite.htm @@ -0,0 +1,59 @@ + + +Command: CreateSprite + + + + + + +

  CreateSprite ( [parent] )  

+ +

+Parameters:
+

+ + + + +
parent (optional) - parent entity of sprite
+

Description:
+
+ + + + +
Creates a sprite entity and returns its handle.

The sprite will be + positioned at 0,0,0 and extend from 1,-1 to +1,+1.

+

A sprite entity is a flat, square (which can be made rectangular by + scaling it) 3D object.

+

Sprites have two real strengths. The first is that they consist of only + two polygons; meaning you can use many of them at once. This makes them + ideal for particle effects and 2D-using-3D games where you want lots of + sprites on-screen at once.

+

Secondly, sprites can be assigned a view mode using + SpriteViewMode. By default this view mode + is set to 1, which means the sprite will always face the camera. So no + matter what the orientation of the camera is relative to the sprite, you + will never actually notice that they are flat; by giving them a spherical + texture, you can make them appear to look no different than a normal sphere.

+ +

The optional parent parameter allow you to specify a parent entity for + the sprite so that when the parent is moved the child sprite will move with + it. However, this relationship is one way; applying movement commands to the + child will not affect the parent.

+

Specifying a parent entity will still result in the sprite being created + at position 0,0,0 rather than at the parent entity's position.

+
+

See also: LoadSprite.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/CreateSurface.htm b/_release/help/commands/3d_commands/CreateSurface.htm new file mode 100644 index 0000000..14383e1 --- /dev/null +++ b/_release/help/commands/3d_commands/CreateSurface.htm @@ -0,0 +1,45 @@ + + +Command: CreateSurface + + + + + + +

  CreateSurface ( mesh[,brush] )  

+ +

+Parameters:
+

+ + + + +
mesh - mesh handle
+ brush (optional) - brush handle
+

Description:
+
+ + + + +
Creates a surface attached to a mesh and returns the + surface's handle.

Surfaces are sections of mesh which are then used to + attach triangles to. You must have at least one surface per mesh in order to + create a visible mesh, however you can use as many as you like. Splitting a + mesh up into lots of sections allows you to affect those sections + individually, which can be a lot more useful than if all the surfaces are + combined into just one.

+
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/CreateTerrain.htm b/_release/help/commands/3d_commands/CreateTerrain.htm new file mode 100644 index 0000000..ad69b95 --- /dev/null +++ b/_release/help/commands/3d_commands/CreateTerrain.htm @@ -0,0 +1,90 @@ + + +Command: CreateTerrain + + + + + + +

  CreateTerrain ( grid_size[,parent] )  

+ +

+Parameters:
+

+ + + + +
grid_size - no of grid squares along each side of terrain, and must be a + power of 2
+ parent (optional) - parent entity of terrain
+

Description:
+
+ + + + +
Creates a terrain entity and returns its handle.

The + terrain extends from 0,0,0 to grid_size,1,grid_size.

+

A terrain is a special type of polygon object that uses real-time level + of detail (LOD) to display landscapes which should theoretically consist of + over a million polygons with only a few thousand. The way it does this is by + constantly rearranging a certain amount of polygons to display high levels + of detail close to the viewer and low levels further away.

+

This constant rearrangement of polygons is noticeable however, and is an + well-known side-effect of all LOD landscapes. This 'pop-in' effect can be + reduced though in lots of ways, as the other terrain help files will go on + to explain.

+

The optional parent parameter allow you to specify a parent entity for + the terrain so that when the parent is moved the child terrain will move + with it. However, this relationship is one way; applying movement commands + to the child will not affect the parent.

+

Specifying a parent entity will still result in the terrain being created + at position 0,0,0 rather than at the parent entity's position.

+

See also: LoadTerrain.

+

Example:
+
+ + + + + +
; CreateTerrain Example
+ ; ---------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ PositionEntity camera,0,1,0
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ ; Create terrain
+ terrain=CreateTerrain(128)
+
+ ; Texture terrain
+ grass_tex=LoadTexture( "media/mossyground.bmp" )
+ EntityTexture terrain,grass_tex
+
+ While Not KeyDown( 1 )
+
+ If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0
+ If KeyDown( 203 )=True Then TurnEntity camera,0,1,0
+ If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.05
+ If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.05
+
+ RenderWorld
+
+ Text 0,0,"Use cursor keys to move about the terrain"
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/CreateTexture.htm b/_release/help/commands/3d_commands/CreateTexture.htm new file mode 100644 index 0000000..5d40f3a --- /dev/null +++ b/_release/help/commands/3d_commands/CreateTexture.htm @@ -0,0 +1,136 @@ + + +Command: CreateTexture + + + + + + +

  CreateTexture ( +width,height[,flags][,frames] )  

+ +

+Parameters:
+

+ + + + +
width - width of texture
+ height - height of texture
+
+ flags (optional) - texture flag
+ 1: Color
+ 2: Alpha
+ 4: Masked
+ 8: Mipmapped
+ 16: Clamp U
+ 32: Clamp V
+ 64: Spherical reflection map
+
+ frames (optional) - no of frames texture will have
+

Description:
+
+ + + + +
Creates a texture and returns its handle.

Width and height are + the size of the texture. Note that the actual texture size may be different + from the width and height requested, as different types of 3D hardware + support different sizes of texture.

The optional flags parameter allows + you to apply certain effects to the texture. Flags can be added to combine + two or more effects, eg. 3 (1+2) = texture with color and alpha maps.

Here + are quick descriptions of the flags:
+ 1: Color - color map, what you see is what you get.
+ 2: Alpha - alpha map. If an image contains an alpha map, this will be used + to make certain areas of the texture transparent. Otherwise, the color map + will be used as an alpha map. With alpha maps, the dark areas always equal + hihg-transparency, light areas equal low-transparency.
+ 4: Masked - all areas of a texture coloured 0,0,0 will not be drawn to the + screen.
+ 8: Mipmapped - low detail versions of the texture will be used at high + distance. Results in a smooth, blurred look.
+ 16: Clamp u - clamp u texture co-ordinates. Prevents texture wrapping.
+ 32: Clamp v - clamp v texture co-ordiantes. Prevents texture wrapping.
+ 64: Spherical reflection map - environment mapping, for that shiny, teapot + look.

Once you have created a texture, use + SetBuffer + TextureBuffer to draw to it. However, to + display 2D graphics on a texture, it is usually quicker to draw to an image and then + copy it to the texturebuffer, and to display 3D graphics on a texture, your + only option is to copy from the backbuffer to the texturebuffer.

See also: + LoadTexture, + LoadAnimTexture.

+

Example:
+
+ + + + + +
; CreateTexture Example
+ ; ---------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ cube=CreateCube()
+ PositionEntity cube,0,0,5
+
+ ; Create texture of size 256x256
+ tex=CreateTexture(256,256)
+
+ ; Set buffer - texture buffer
+ SetBuffer TextureBuffer(tex)
+
+ ; Clear texture buffer with background white color
+ ClsColor 255,255,255
+ Cls
+
+ ; Draw text on texture
+ font=LoadFont("arial",24)
+ SetFont font
+ Color 0,0,0
+ Text 0,0,"This texture"
+ Text 0,40,"was created using" : Color 0,0,255
+ Text 0,80,"CreateTexture()" : Color 0,0,0
+ Text 0,120,"and drawn to using" : Color 0,0,255
+ Text 0,160,"SetBuffer TextureBuffer()"
+
+ ; Texture cube with texture
+ EntityTexture cube,tex
+
+ ; Set buffer - backbuffer
+ SetBuffer BackBuffer()
+
+ While Not KeyDown( 1 )
+
+ pitch#=0
+ yaw#=0
+ roll#=0
+
+ If KeyDown( 208 )=True Then pitch#=-1
+ If KeyDown( 200 )=True Then pitch#=1
+ If KeyDown( 203 )=True Then yaw#=-1
+ If KeyDown( 205 )=True Then yaw#=1
+ If KeyDown( 45 )=True Then roll#=-1
+ If KeyDown( 44 )=True Then roll#=1
+
+ TurnEntity cube,pitch#,yaw#,roll#
+
+ RenderWorld
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/Dither.htm b/_release/help/commands/3d_commands/Dither.htm new file mode 100644 index 0000000..8bf4ed6 --- /dev/null +++ b/_release/help/commands/3d_commands/Dither.htm @@ -0,0 +1,79 @@ + + +Command: Dither + + + + + + +

  Dither enable  

+ +

+Parameters:
+

+ + + + +
enable - true to enable dithering, false to disable. Defaults to true.
+

Description:
+
+ + + + +
Enables or disables hardware dithering.
+
+Hardware dithering is useful when running games in 16-bit colour mode. Due to +the fact that 16-bit mode offers less colours than the human eye can +distinguish, separate bands of colour are often noticeable on shaded objects. +However, hardware dithering will dither the entire screen to give the impression +that more colours are being used than is actually the case, and generally looks +a lot better.
+
+Due to the fact that 24-bit and 32-bit offer more colours as the human eye can +distinguish, hardware dithering is made pretty much redundant in those modes.
+

Example:
+
+ + + + + +
; Dither Example
+ ; --------------
+
+ Graphics3D 640,480,16
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ light=CreateLight()
+
+ ; Rotate light so that it creates maximum shading effect on sphere
+ RotateEntity light,90,0,0
+
+ sphere=CreateSphere( 32 )
+ PositionEntity sphere,0,0,2
+
+ While Not KeyDown( 1 )
+
+ ; Toggle dither enable value between true and false when spacebar is pressed
+ If KeyHit( 57 )=True Then enable=1-enable
+
+ ; Enable/disable hardware dithering
+ Dither enable
+
+ RenderWorld
+
+ Text 0,0,"Press spacebar to toggle between Dither True/False"
+ If enable=False Then Text 0,20,"Dither False" Else Text 0,20,"Dither True"
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EmitSound.htm b/_release/help/commands/3d_commands/EmitSound.htm new file mode 100644 index 0000000..b158c8c --- /dev/null +++ b/_release/help/commands/3d_commands/EmitSound.htm @@ -0,0 +1,39 @@ + + +Command: EmitSound + + + + + + +

  EmitSound sound,entity  

+ +

+Parameters:
+

+ + + + +
sound - sound handle
+ entity - entity handle
+

Description:
+
+ + + + +
Emits a sound attached to the specified entity and returns a sound + channel.

The sound must have been loaded using Load3DSound for 3D effects.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityAlpha.htm b/_release/help/commands/3d_commands/EntityAlpha.htm new file mode 100644 index 0000000..a301cc0 --- /dev/null +++ b/_release/help/commands/3d_commands/EntityAlpha.htm @@ -0,0 +1,50 @@ + + +Command: EntityAlpha + + + + + + +

  EntityAlpha entity,alpha#  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ alpha# - alpha level of entity
+

Description:
+
+ + + + +
Sets the entity alpha level of an entity.

The alpha# value should be in the range 0-1. + The default entity alpha setting is 1.

+

The alpha level is how + transparent an entity is. A value of 1 will mean the entity is + non-transparent, i.e. opaque. A value of 0 will mean the entity is + completely transparent, i.e. invisible. Values between 0 and 1 will cause + varying amount of transparency accordingly, useful for imitating the look of + objects such as glass and ice.

+

An EntityAlpha value of 0 is especially useful as Blitz3D will not render + entities with such a value, but will still involve the entities in collision + tests. This is unlike + HideEntity, which doesn't involve entities in + collisions.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/EntityAnimTime.htm b/_release/help/commands/3d_commands/EntityAnimTime.htm new file mode 100644 index 0000000..60184d5 --- /dev/null +++ b/_release/help/commands/3d_commands/EntityAnimTime.htm @@ -0,0 +1,37 @@ + + +Command: EntityAnimTime + + + + + + +

  EntityAnimTime# ( entity )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+

Description:
+
+ + + + +
Returns the current animation time of an entity.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityAnimating.htm b/_release/help/commands/3d_commands/EntityAnimating.htm new file mode 100644 index 0000000..761218a --- /dev/null +++ b/_release/help/commands/3d_commands/EntityAnimating.htm @@ -0,0 +1,37 @@ + + +Command: EntityAnimating + + + + + + +

  EntityAnimating ( entity )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+

Description:
+
+ + + + +
Returns true if entity is currently animating.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityAutoFade.htm b/_release/help/commands/3d_commands/EntityAutoFade.htm new file mode 100644 index 0000000..e35ea25 --- /dev/null +++ b/_release/help/commands/3d_commands/EntityAutoFade.htm @@ -0,0 +1,43 @@ + + +Command: EntityAutoFade + + + + + + +

  EntityAutoFade entity,near#,far#  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ near# - distance in front of the camera at which entity's will start being + faded
+ far# - distance in front of the camera at which entity's will stop being + faded (and will be invisible)
+

Description:
+
+ + + + +
Enables auto fading for an entity. This will cause an entity's alpha + level to be adjusted at distances between near and far to create a 'fade-in' + effect.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityBlend.htm b/_release/help/commands/3d_commands/EntityBlend.htm new file mode 100644 index 0000000..293a8b1 --- /dev/null +++ b/_release/help/commands/3d_commands/EntityBlend.htm @@ -0,0 +1,43 @@ + + +Command: EntityBlend + + + + + + +

  EntityBlend entity,blend  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+
+ blend - blend mode of entity
+ 0: disable texture
+ 1: alpha
+ 2: multiply (default)
+ 3: add
+

Description:
+
+ + + + +
Sets the blending mode of an entity.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityBox.htm b/_release/help/commands/3d_commands/EntityBox.htm new file mode 100644 index 0000000..1a172c4 --- /dev/null +++ b/_release/help/commands/3d_commands/EntityBox.htm @@ -0,0 +1,43 @@ + + +Command: EntityBox + + + + + + +

  EntityBox entity,x#,y#,z#,width#,height#,depth#  

+ +

+Parameters:
+

+ + + + +
entity - entity handle#
+ x# - x position of entity's collision box
+ y# - y position of entity's collision box
+ z# - z position of entity's collision box
+ width# - width of entity's collision box
+ height# - height of entity's collision box
+ depth# - depth of entity's collision box
+

Description:
+
+ + + + +
Sets the dimensions of an entity's collision box.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityCollided.htm b/_release/help/commands/3d_commands/EntityCollided.htm new file mode 100644 index 0000000..bdce9f1 --- /dev/null +++ b/_release/help/commands/3d_commands/EntityCollided.htm @@ -0,0 +1,39 @@ + + +Command: EntityCollided + + + + + + +

  EntityCollided ( entity,type )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ type - type of entity
+

Description:
+
+ + + + +
Returns true if an entity collided with any other entity of the + specified type.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityColor.htm b/_release/help/commands/3d_commands/EntityColor.htm new file mode 100644 index 0000000..424fee3 --- /dev/null +++ b/_release/help/commands/3d_commands/EntityColor.htm @@ -0,0 +1,87 @@ + + +Command: EntityColor + + + + + + +

  EntityColor entity,red#,green#,blue#  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ red# - red value of entity
+ green# - green value of entity
+ blue# - blue value of entity
+

Description:
+
+ + + + +
Sets the color of an entity.

The green, red and blue values should be + in the range 0-255. The default entity color is 255,255,255.

+
+

Example:
+
+ + + + + +
; EntityColor Example
+ ; -------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ cube=CreateCube()
+ PositionEntity cube,0,0,5
+
+ ; Set initial entity color values
+ red#=255
+ green#=255
+ blue#=255
+
+ While Not KeyDown( 1 )
+
+ ; Change red, green, blue values depending on key pressed
+ If KeyDown( 2 )=True And red#>0 Then red#=red#-1
+ If KeyDown( 3 )=True And red#<255 Then red#=red#+1
+ If KeyDown( 4 )=True And green#>0 Then green#=green#-1
+ If KeyDown( 5 )=True And green#<255 Then green#=green#+1
+ If KeyDown( 6 )=True And blue#>0 Then blue#=blue#-1
+ If KeyDown( 7 )=True And blue#<255 Then blue#=blue#+1
+
+ ; Set entity color using red, green, blue values
+ EntityColor cube,red#,green#,blue#
+
+ TurnEntity cube,0.1,0.1,0.1
+
+ RenderWorld
+
+ Text 0,0,"Press keys 1-6 to change EntityColor red#,green#,blue# values
+ Text 0,20,"Entity Red: "+red#
+ Text 0,40,"Entity Green: "+green#
+ Text 0,60,"Entity Blue: "+blue#
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/EntityDistance.htm b/_release/help/commands/3d_commands/EntityDistance.htm new file mode 100644 index 0000000..7a731ce --- /dev/null +++ b/_release/help/commands/3d_commands/EntityDistance.htm @@ -0,0 +1,38 @@ + + +Command: EntityDistance + + + + + + +

  EntityDistance# ( src_entity,dest_entity)  

+ +

+Parameters:
+

+ + + + +
src_entity - source entity handle
+ dest_entity - destination entity handle
+

Description:
+
+ + + + +
Returns the distance between src_entity and dest_entity.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityFX.htm b/_release/help/commands/3d_commands/EntityFX.htm new file mode 100644 index 0000000..73225cf --- /dev/null +++ b/_release/help/commands/3d_commands/EntityFX.htm @@ -0,0 +1,45 @@ + + +Command: EntityFX + + + + + + +

  EntityFX entity,fx  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+
+ fx -
+ 1: full-bright
+ 2: use vertex colors instead of brush color
+ 4: flatshaded
+ 8: disable fog
+

Description:
+
+ + + + +
Sets miscellaneous effects for an entity.

Flags can be added to combine + two or more effects. For example, specifying a flag of 3 (1+2) will result + in a full-bright and vertex-coloured brush.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityInView.htm b/_release/help/commands/3d_commands/EntityInView.htm new file mode 100644 index 0000000..d867de2 --- /dev/null +++ b/_release/help/commands/3d_commands/EntityInView.htm @@ -0,0 +1,41 @@ + + +Command: EntityInView + + + + + + +

  EntityInView ( entity,camera )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ camera - camera handle
+

Description:
+
+ + + + +
Returns true if the specified entity is visible to the specified camera.

+ If the entity is a mesh, its bounding box will be checked for visibility.

+

For all other types of entities, only their centre position will be + checked.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityName.htm b/_release/help/commands/3d_commands/EntityName.htm new file mode 100644 index 0000000..6373f13 --- /dev/null +++ b/_release/help/commands/3d_commands/EntityName.htm @@ -0,0 +1,38 @@ + + +Command: EntityName$ + + + + + + +

  EntityName$ ( entity )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+

Description:
+
+ + + + +
Returns the name of an entity. An entity's name may be set in a + modelling program, or manually set using NameEntity.
+

Example:
+
+ + + + + +
none.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityOrder.htm b/_release/help/commands/3d_commands/EntityOrder.htm new file mode 100644 index 0000000..8fd0b9f --- /dev/null +++ b/_release/help/commands/3d_commands/EntityOrder.htm @@ -0,0 +1,45 @@ + + +Command: EntityOrder + + + + + + +

  EntityOrder entity,order  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ order - order that entity will be drawn in
+

Description:
+
+ + + + +
Sets the drawing order for an entity.

An order value of 0 will mean + the entity is drawn normally. A value greater than 0 will mean that entity + is drawn first, behind everything else. A value less than 0 will mean the + entity is drawn last, in front of everything else.

+

Setting an entity's order to + non-0 also disables z-buffering for the entity, so should be only used for + simple, convex entities like skyboxes, sprites etc.

EntityOrder affects + the specified entity but none of its child entities, if any exist.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/EntityParent.htm b/_release/help/commands/3d_commands/EntityParent.htm new file mode 100644 index 0000000..c81a409 --- /dev/null +++ b/_release/help/commands/3d_commands/EntityParent.htm @@ -0,0 +1,41 @@ + + +Command: EntityParent + + + + + + +

  EntityParent entity,parent[,global]  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ parent - parent entity handle
+ global (optional) - true for the child entity to retain its global position + and orientation. Defaults to true.
+

Description:
+
+ + + + +
Attaches an entity to a parent.

Parent may be 0, in which case the + entity will have no parent.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityPick.htm b/_release/help/commands/3d_commands/EntityPick.htm new file mode 100644 index 0000000..66a913c --- /dev/null +++ b/_release/help/commands/3d_commands/EntityPick.htm @@ -0,0 +1,40 @@ + + +Command: EntityPick + + + + + + +

  EntityPick ( entity,range# )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ range# - range of pick area around entity
+

Description:
+
+ + + + +
Returns the nearest entity 'ahead' of the specified entity. An entity + must have a non-zero EntityPickMode to be + pickable.
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/EntityPickMode.htm b/_release/help/commands/3d_commands/EntityPickMode.htm new file mode 100644 index 0000000..2ec4395 --- /dev/null +++ b/_release/help/commands/3d_commands/EntityPickMode.htm @@ -0,0 +1,47 @@ + + +Command: EntityPickMode + + + + + + +

  EntityPickMode +entity,pick_geometry,obscurer  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+
+ pick_geometry - type of geometry used for picking:
+ 0: Unpickable (default)
+ 1: Sphere (EntityRadius is used)
+ 2: Polygon
+ 3: Box (EntityBox is used)
+
+ obscurer - true to determine that the entity 'obscures' other entities + during an EntityVisible call.
+

Description:
+
+ + + + +
Sets the pick mode for an entity.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityPitch.htm b/_release/help/commands/3d_commands/EntityPitch.htm new file mode 100644 index 0000000..7958354 --- /dev/null +++ b/_release/help/commands/3d_commands/EntityPitch.htm @@ -0,0 +1,79 @@ + + +Command: EntityPitch + + + + + + +

  EntityPitch# ( entity[,global] )  

+ +

+Parameters:
+

+ + + + +
entity - name of entity that will have pitch angle returned
+global (optional) - true if the pitch angle returned should be relative to 0 rather than a parent entity's +pitch angle. False by default.
+

Description:
+
+ + + + +
Returns the pitch angle of an entity.
+
+The pitch angle is also the x angle of an entity.
+

Example:
+
+ + + + + +
; EntityPitch Example
+ ; -------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ light=CreateLight()
+
+ cone=CreateCone( 32 )
+ PositionEntity cone,0,0,5
+
+ While Not KeyDown( 1 )
+
+ pitch#=0
+ yaw#=0
+ roll#=0
+
+ If KeyDown( 208 )=True Then pitch#=-1
+ If KeyDown( 200 )=True Then pitch#=1
+ If KeyDown( 203 )=True Then yaw#=-1
+ If KeyDown( 205 )=True Then yaw#=1
+ If KeyDown( 45 )=True Then roll#=-1
+ If KeyDown( 44 )=True Then roll#=1
+
+ TurnEntity cone,pitch#,yaw#,roll#
+
+ RenderWorld
+
+ Text 0,0,"Use cursor/Z/X keys to turn cone"
+
+ ; Return entity pitch angle of cone
+ Text 0,20,"Pitch: "+EntityPitch#( cone )
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityRadius.htm b/_release/help/commands/3d_commands/EntityRadius.htm new file mode 100644 index 0000000..9740716 --- /dev/null +++ b/_release/help/commands/3d_commands/EntityRadius.htm @@ -0,0 +1,108 @@ + + +Command: EntityRadius + + + + + + +

  EntityRadius entity,radius#  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ radius# - radius of entity's collision sphere
+

Description:
+
+ + + + +
Sets the radius of an entity's collision sphere.

An entity radius + should be set for all entities involved in spherical collisions, which is + all source entities (as collisions are always sphere-to-something), and + whatever destination entities are involved in sphere-to-sphere collisions + (collision method No.1).

+

Example:
+
+ + + + + +
; EntityRadius Example
+ ; --------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ light=CreateLight()
+
+ sphere=CreateSphere( 32 )
+ PositionEntity sphere,-2,0,5
+
+ cone=CreateCone( 32 )
+ EntityType cone,type_cone
+ PositionEntity cone,2,0,5
+
+ ; Set collision type values
+ type_sphere=1
+ type_cone=2
+
+ ; Set sphere radius value
+ sphere_radius#=1
+
+ ; Set sphere and cone entity types
+ EntityType sphere,type_sphere
+ EntityType cone,type_cone
+
+ ; Enable collisions between type_sphere and type_cone, with sphere->polygon + method and slide response
+ Collisions type_sphere,type_cone,2,2
+
+ While Not KeyDown( 1 )
+
+ x#=0
+ y#=0
+ z#=0
+
+ If KeyDown( 203 )=True Then x#=-0.1
+ If KeyDown( 205 )=True Then x#=0.1
+ If KeyDown( 208 )=True Then y#=-0.1
+ If KeyDown( 200 )=True Then y#=0.1
+ If KeyDown( 44 )=True Then z#=-0.1
+ If KeyDown( 30 )=True Then z#=0.1
+
+ MoveEntity sphere,x#,y#,z#
+
+ ; If square brackets keys pressed then change sphere radius value
+ If KeyDown( 26 )=True Then sphere_radius#=sphere_radius#-0.1
+ If KeyDown( 27 )=True Then sphere_radius#=sphere_radius#+0.1
+
+ ; Set entity radius of sphere
+ EntityRadius sphere,sphere_radius#
+
+ ; Perform collision checking
+ UpdateWorld
+
+ RenderWorld
+
+ Text 0,0,"Use cursor/A/Z keys to move sphere"
+ Text 0,20,"Press [ or ] to change EntityRadius value"
+ Text 0,40,"EntityRadius sphere,"+sphere_radius
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityRoll.htm b/_release/help/commands/3d_commands/EntityRoll.htm new file mode 100644 index 0000000..0e00bcc --- /dev/null +++ b/_release/help/commands/3d_commands/EntityRoll.htm @@ -0,0 +1,79 @@ + + +Command: EntityPitch + + + + + + +

  EntityRoll# ( entity[,global] )  

+ +

+Parameters:
+

+ + + + +
entity - name of entity that will have roll angle returned
+global (optional) - true if the roll angle returned should be relative to 0 rather than a parent entity's + roll angle. False by default.
+

Description:
+
+ + + + +
Returns the roll angle of an entity.
+
+The roll angle is also the z angle of an entity.
+

Example:
+
+ + + + + +
; EntityRoll Example
+ ; -------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ light=CreateLight()
+
+ cone=CreateCone( 32 )
+ PositionEntity cone,0,0,5
+
+ While Not KeyDown( 1 )
+
+ pitch#=0
+ yaw#=0
+ roll#=0
+
+ If KeyDown( 208 )=True Then pitch#=-1
+ If KeyDown( 200 )=True Then pitch#=1
+ If KeyDown( 203 )=True Then yaw#=-1
+ If KeyDown( 205 )=True Then yaw#=1
+ If KeyDown( 45 )=True Then roll#=-1
+ If KeyDown( 44 )=True Then roll#=1
+
+ TurnEntity cone,pitch#,yaw#,roll#
+
+ RenderWorld
+
+ Text 0,0,"Use cursor/Z/X keys to turn cone"
+
+ ; Return entity roll angle of cone
+ Text 0,20,"Roll: "+EntityRoll#( cone )
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityShininess.htm b/_release/help/commands/3d_commands/EntityShininess.htm new file mode 100644 index 0000000..8ab21ba --- /dev/null +++ b/_release/help/commands/3d_commands/EntityShininess.htm @@ -0,0 +1,43 @@ + + +Command: EntityShininess + + + + + + +

  EntityShininess entity,shininess#  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ shininess# - shininess of entity
+

Description:
+
+ + + + +
Sets the specular shininess of an entity.

The shininess# value should be in the range 0-1. + The default shininess setting is 0.

Shininess is how much brighter certain + areas of an object will appear to be when a light is shone directly at them.

+

Setting a shininess value of 1 for a medium to high poly sphere, combined + with the creation of a light shining in the direction of it, will give it + the appearance of a shiny snooker ball.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/EntityTexture.htm b/_release/help/commands/3d_commands/EntityTexture.htm new file mode 100644 index 0000000..cafc299 --- /dev/null +++ b/_release/help/commands/3d_commands/EntityTexture.htm @@ -0,0 +1,85 @@ + + +Command: EntityTexture + + + + + + +

  EntityTexture entity,texture[,frame][,index]  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ texture - texture handle
+ frame (optional) - frame of texture
+ index (optional) - index of layer to be textured.
+

Description:
+
+ + + + +
Sets the texture of an entity.

The optional frame parameter specifies + which texture animation frame, if any exist, should be used as the texture. + Defaults to 0.

+

The optional index parameter specifies which texture layer the texture + should use. There are four available texture layers, 0-3 + inclusive. Defaults to 0.

+

Example:
+
+ + + + + +
; EntityTexture Example
+ ; ---------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ cube=CreateCube()
+ PositionEntity cube,0,0,5
+
+ ; Load texture
+ tex=LoadTexture( "media/b3dlogo.jpg" )
+
+ ; Texture entity
+ EntityTexture cube,tex
+
+ While Not KeyDown( 1 )
+
+ pitch#=0
+ yaw#=0
+ roll#=0
+
+ If KeyDown( 208 )=True Then pitch#=-1
+ If KeyDown( 200 )=True Then pitch#=1
+ If KeyDown( 203 )=True Then yaw#=-1
+ If KeyDown( 205 )=True Then yaw#=1
+ If KeyDown( 45 )=True Then roll#=-1
+ If KeyDown( 44 )=True Then roll#=1
+
+ TurnEntity cube,pitch#,yaw#,roll#
+
+ RenderWorld
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityType.htm b/_release/help/commands/3d_commands/EntityType.htm new file mode 100644 index 0000000..f679fc6 --- /dev/null +++ b/_release/help/commands/3d_commands/EntityType.htm @@ -0,0 +1,40 @@ + + +Command: EntityType + + + + + + +

  EntityType entity,collision_type[,recursive]  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ collision_type - collision type of entity
+ recursive (optional) - true to apply collision type to entity's children. + Defaults to false.
+

Description:
+
+ + + + +
Sets the collision type for an entity.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityVisible.htm b/_release/help/commands/3d_commands/EntityVisible.htm new file mode 100644 index 0000000..f7d9cec --- /dev/null +++ b/_release/help/commands/3d_commands/EntityVisible.htm @@ -0,0 +1,38 @@ + + +Command: EntityVisible + + + + + + +

  EntityVisible ( src_entity,dest_entity )  

+ +

+Parameters:
+

+ + + + +
src_entity - source entity handle
+ dest_entity - destination entity handle
+

Description:
+
+ + + + +
Returns true if src_entity and dest_entity can 'see' each other.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityX.htm b/_release/help/commands/3d_commands/EntityX.htm new file mode 100644 index 0000000..6d129c4 --- /dev/null +++ b/_release/help/commands/3d_commands/EntityX.htm @@ -0,0 +1,77 @@ + + +Command: EntityX + + + + + + +

  EntityX# ( entity[,global] )  

+ +

+Parameters:
+

+ + + + +
entity - name of entity that will have x-coordinate returned
+global (optional) - true if the x-coordinate returned should be relative to +0,0,0 rather than a parent entity's position. False by default.
+

Description:
+
+ + + + +
Returns the x-coordinate of an entity.
+

Example:
+
+ + + + + +
; EntityX Example
+ ; ---------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ light=CreateLight()
+
+ cone=CreateCone( 32 )
+ PositionEntity cone,0,0,10
+
+ While Not KeyDown( 1 )
+
+ x#=0
+ y#=0
+ z#=0
+
+ If KeyDown(203)=True Then x#=-0.1
+ If KeyDown(205)=True Then x#=0.1
+ If KeyDown(208)=True Then y#=-0.1
+ If KeyDown(200)=True Then y#=0.1
+ If KeyDown(44)=True Then z#=-0.1
+ If KeyDown(30)=True Then z#=0.1
+
+ MoveEntity cone,x#,y#,z#
+
+ RenderWorld
+
+ Text 0,0,"Use cursor/A/Z keys to move cone"
+
+ ; Return entity x position of cone
+ Text 0,20,"X Position: "+EntityX#( cone )
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityY.htm b/_release/help/commands/3d_commands/EntityY.htm new file mode 100644 index 0000000..3511126 --- /dev/null +++ b/_release/help/commands/3d_commands/EntityY.htm @@ -0,0 +1,77 @@ + + +Command: EntityX + + + + + + +

  EntityY# ( entity[,global] )  

+ +

+Parameters:
+

+ + + + +
entity - name of entity that will have y-coordinate returned
+global (optional) - true if the y-coordinate returned should be relative to +0,0,0 rather than a parent entity's position. False by default.
+

Description:
+
+ + + + +
Returns the y-coordinate of an entity.
+

Example:
+
+ + + + + +
; EntityY Example
+ ; ---------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ light=CreateLight()
+
+ cone=CreateCone( 32 )
+ PositionEntity cone,0,0,10
+
+ While Not KeyDown( 1 )
+
+ x#=0
+ y#=0
+ z#=0
+
+ If KeyDown(203)=True Then x#=-0.1
+ If KeyDown(205)=True Then x#=0.1
+ If KeyDown(208)=True Then y#=-0.1
+ If KeyDown(200)=True Then y#=0.1
+ If KeyDown(44)=True Then z#=-0.1
+ If KeyDown(30)=True Then z#=0.1
+
+ MoveEntity cone,x#,y#,z#
+
+ RenderWorld
+
+ Text 0,0,"Use cursor/A/Z keys to move cone"
+
+ ; Return entity y position of cone
+ Text 0,20,"Y Position: "+EntityY#( cone )
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityYaw.htm b/_release/help/commands/3d_commands/EntityYaw.htm new file mode 100644 index 0000000..1ef92dc --- /dev/null +++ b/_release/help/commands/3d_commands/EntityYaw.htm @@ -0,0 +1,79 @@ + + +Command: EntityPitch + + + + + + +

  EntityYaw# ( entity[,global] )  

+ +

+Parameters:
+

+ + + + +
entity - name of entity that will have yaw angle returned
+global (optional) - true if the yaw angle returned should be relative to 0 rather than a parent entity's + yaw angle. False by default.
+

Description:
+
+ + + + +
Returns the yaw angle of an entity.
+
+The yaw angle is also the y angle of an entity.
+

Example:
+
+ + + + + +
; EntityYaw Example
+ ; -----------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ light=CreateLight()
+
+ cone=CreateCone( 32 )
+ PositionEntity cone,0,0,5
+
+ While Not KeyDown( 1 )
+
+ pitch#=0
+ yaw#=0
+ roll#=0
+
+ If KeyDown( 208 )=True Then pitch#=-1
+ If KeyDown( 200 )=True Then pitch#=1
+ If KeyDown( 203 )=True Then yaw#=-1
+ If KeyDown( 205 )=True Then yaw#=1
+ If KeyDown( 45 )=True Then roll#=-1
+ If KeyDown( 44 )=True Then roll#=1
+
+ TurnEntity cone,pitch#,yaw#,roll#
+
+ RenderWorld
+
+ Text 0,0,"Use cursor/Z/X keys to turn cone"
+
+ ; Return entity yaw angle of cone
+ Text 0,20,"Yaw: "+EntityYaw#( cone )
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/EntityZ.htm b/_release/help/commands/3d_commands/EntityZ.htm new file mode 100644 index 0000000..f25b2a4 --- /dev/null +++ b/_release/help/commands/3d_commands/EntityZ.htm @@ -0,0 +1,77 @@ + + +Command: EntityX + + + + + + +

  EntityZ# ( entity[,global] )  

+ +

+Parameters:
+

+ + + + +
entity - name of entity that will have z-coordinate returned
+global (optional) - true if the z-coordinate returned should be relative to +0,0,0 rather than a parent entity's position. False by default.
+

Description:
+
+ + + + +
Returns the z-coordinate of an entity.
+

Example:
+
+ + + + + +
; EntityZ Example
+ ; ---------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ light=CreateLight()
+
+ cone=CreateCone( 32 )
+ PositionEntity cone,0,0,10
+
+ While Not KeyDown( 1 )
+
+ x#=0
+ y#=0
+ z#=0
+
+ If KeyDown(203)=True Then x#=-0.1
+ If KeyDown(205)=True Then x#=0.1
+ If KeyDown(208)=True Then y#=-0.1
+ If KeyDown(200)=True Then y#=0.1
+ If KeyDown(44)=True Then z#=-0.1
+ If KeyDown(30)=True Then z#=0.1
+
+ MoveEntity cone,x#,y#,z#
+
+ RenderWorld
+
+ Text 0,0,"Use cursor/A/Z keys to move cone"
+
+ ; Return entity z position of cone
+ Text 0,20,"Z Position: "+EntityZ#( cone )
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/FindChild.htm b/_release/help/commands/3d_commands/FindChild.htm new file mode 100644 index 0000000..75e54bd --- /dev/null +++ b/_release/help/commands/3d_commands/FindChild.htm @@ -0,0 +1,39 @@ + + +Command: FindChild + + + + + + +

  FindChild ( entity,child_name$ )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ child_name$ - child name to find within entity
+

Description:
+
+ + + + +
Returns the first child of the specified entity with name matching + child_name$.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/FindSurface.htm b/_release/help/commands/3d_commands/FindSurface.htm new file mode 100644 index 0000000..59d239b --- /dev/null +++ b/_release/help/commands/3d_commands/FindSurface.htm @@ -0,0 +1,41 @@ + + +Command: FindSurface + + + + + + +

  FindSurface ( mesh,brush)  

+ +

+Parameters:
+

+ + + + +
mesh - mesh handle
+ brush - brush handle
+

Description:
+
+ + + + +
Attempts to find a surface attached to the specified mesh and created with the specified brush. + Returns the surface handle if found or 0 if not.

See also: + CountSurfaces, + GetSurface.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/FitMesh.htm b/_release/help/commands/3d_commands/FitMesh.htm new file mode 100644 index 0000000..afd8cd8 --- /dev/null +++ b/_release/help/commands/3d_commands/FitMesh.htm @@ -0,0 +1,46 @@ + + +Command: FitMesh + + + + + + +

  FitMesh mesh,x#,y#,z#,width#,height#,depth#[,uniform]  

+ +

+Parameters:
+

+ + + + +
mesh - mesh handle
+ x# - x position of mesh
+ y# - y position of mesh
+ z# - z position of mesh
+ width# - width of mesh
+ height# - height of mesh
+ depth# - depth of mesh
+ uniform (optional) - if true, the mesh will be scaled  by the same + amounts in x, y and z, so will not be distorted. Defaults to false.
+

Description:
+
+ + + + +
Scales and translates all vertices of a mesh so that the mesh occupies + the specified box.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/FlipMesh.htm b/_release/help/commands/3d_commands/FlipMesh.htm new file mode 100644 index 0000000..3f63866 --- /dev/null +++ b/_release/help/commands/3d_commands/FlipMesh.htm @@ -0,0 +1,86 @@ + + +Command: FlipMesh + + + + + + +

  FlipMesh mesh  

+ +

+Parameters:
+

+ + + + +
mesh - mesh handle
+

Description:
+
+ + + + +
Flips all the triangles in a mesh.

This is useful for a couple of reasons. + Firstly though, it is important to understand a little bit of the theory + behind 3D graphics. A 3D triangle is represented by three points; only when + these points are presented to the viewer in a clockwise-fashion is the + triangle visible. So really, triangles only have one side.

+

Normally, for example in the case of a sphere, a model's triangles face + the inside of the model, so it doesn't matter that you can't see them. + However, what about if you wanted to use the sphere as a huge sky for your + world, i.e. so you only needed to see the inside? In this case you would + just use FlipMesh.
+
+ Another use for FlipMesh is to make objects two-sided, so you can see them + from the inside and outside if you can't already. In this case, you can copy + the original mesh using CopyEntity, specifying + the original mesh as the parent, and flip it using FlipMesh. You will now + have two meshes occupying the same space - this will make it double-sided, + but beware, it will also double the polygon count!

+

The above technique is worth trying when an external modelling program + has exported a model in such a way that some of the triangles appear to be + missing.

+

Example:
+
+ + + + + +
; FlipMesh Example
+ ; ----------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ light=CreateLight()
+
+ ; Create sphere
+ sphere=CreateSphere()
+
+ ; Scale sphere
+ ScaleEntity sphere,100,100,100
+
+ ; Texture sphere with sky texture
+ sky_tex=LoadTexture("../media/sky.bmp")
+ EntityTexture sphere,sky_tex
+
+ ; Flip mesh so we can see the inside of it
+ FlipMesh sphere
+
+ Color 0,0,0
+
+ While Not KeyDown( 1 )
+ RenderWorld
+ Text 0,0,"You are viewing a flipped sphere mesh - makes a great sky!"
+ Flip
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/FreeBrush.htm b/_release/help/commands/3d_commands/FreeBrush.htm new file mode 100644 index 0000000..3bd91d5 --- /dev/null +++ b/_release/help/commands/3d_commands/FreeBrush.htm @@ -0,0 +1,37 @@ + + +Command: FreeBrush + + + + + + +

  FreeBrush  

+ +

+Parameters:
+

+ + + + +
<param description>
+

Description:
+
+ + + + +
<description>
+

Example:
+
+ + + + + +
<example>
+

Index

+ + diff --git a/_release/help/commands/3d_commands/FreeEntity.htm b/_release/help/commands/3d_commands/FreeEntity.htm new file mode 100644 index 0000000..dd66b5e --- /dev/null +++ b/_release/help/commands/3d_commands/FreeEntity.htm @@ -0,0 +1,37 @@ + + +Command: FreeEntity + + + + + + +

  FreeEntity entity  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+

Description:
+
+ + + + +
Frees up an entity.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/FreeTexture.htm b/_release/help/commands/3d_commands/FreeTexture.htm new file mode 100644 index 0000000..5feaa9c --- /dev/null +++ b/_release/help/commands/3d_commands/FreeTexture.htm @@ -0,0 +1,85 @@ + + +Command: FreeTexture + + + + + + +

  FreeTexture texture  

+ +

+Parameters:
+

+ + + + +
texture - texture handle
+

Description:
+
+ + + + +
Frees up a texture. This will allow the memory that it occupied before + to be used for other purposes.

Freeing a texture means you will not be + able to use it again; however, entities already textured with it will not + lose the texture.

+

Example:
+
+ + + + + +
; FreeTexture Example
+ ; -------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ cube=CreateCube()
+ PositionEntity cube,0,0,5
+
+ ; Load texture
+ tex=LoadTexture("../media/b3dlogo.jpg")
+
+ ; Texture cube with texture
+ EntityTexture cube,tex
+
+ While Not KeyDown( 1 )
+
+ ; If spacebar pressed then free texture
+ If KeyHit( 57 )=True Then FreeTexture tex
+
+ pitch#=0
+ yaw#=0
+ roll#=0
+
+ If KeyDown( 208 )=True Then pitch#=-1
+ If KeyDown( 200 )=True Then pitch#=1
+ If KeyDown( 203 )=True Then yaw#=-1
+ If KeyDown( 205 )=True Then yaw#=1
+ If KeyDown( 45 )=True Then roll#=-1
+ If KeyDown( 44 )=True Then roll#=1
+
+ TurnEntity cube,pitch#,yaw#,roll#
+
+ RenderWorld
+ Text 0,0,"Press spacebar to free texture"
+ Text 0,20,"As you can see this will not effect already textured entities"
+ Flip
+
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/GetChild.htm b/_release/help/commands/3d_commands/GetChild.htm new file mode 100644 index 0000000..419b4e5 --- /dev/null +++ b/_release/help/commands/3d_commands/GetChild.htm @@ -0,0 +1,39 @@ + + +Command: GetChild + + + + + + +

  GetChild (entity,index)  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ index - index of child entity. Should be in the range 1...CountChildren( + entity ) inclusive.
+

Description:
+
+ + + + +
Returns a child of an entity.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/GetEntityType.htm b/_release/help/commands/3d_commands/GetEntityType.htm new file mode 100644 index 0000000..8f4a060 --- /dev/null +++ b/_release/help/commands/3d_commands/GetEntityType.htm @@ -0,0 +1,37 @@ + + +Command: GetEntityType + + + + + + +

  GetEntityType ( entity )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+

Description:
+
+ + + + +
Returns the collision type of an entity.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/GetParent.htm b/_release/help/commands/3d_commands/GetParent.htm new file mode 100644 index 0000000..6bb9c32 --- /dev/null +++ b/_release/help/commands/3d_commands/GetParent.htm @@ -0,0 +1,37 @@ + + +Command: GetParent + + + + + + +

  GetParent ( entity )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+

Description:
+
+ + + + +
Returns an entity's parent.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/GetSurface.htm b/_release/help/commands/3d_commands/GetSurface.htm new file mode 100644 index 0000000..9351694 --- /dev/null +++ b/_release/help/commands/3d_commands/GetSurface.htm @@ -0,0 +1,43 @@ + + +Command: GetSurface + + + + + + +

  GetSurface ( mesh, index )  

+ +

+Parameters:
+

+ + + + +
mesh - mesh handle
+ index - index of surface
+

Description:
+
+ + + + +
Returns the handle of the surface attached to the specified mesh and + with the specified index number.

Index should be in the range 1...CountSurfaces( + mesh ), inclusive.

+

You need to 'get a surface', i.e. get its handle, in order to be able to + then use that particular surface with other commands.

+

See also: CountSurfaces.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/GfxDriver3D.htm b/_release/help/commands/3d_commands/GfxDriver3D.htm new file mode 100644 index 0000000..a61cf9a --- /dev/null +++ b/_release/help/commands/3d_commands/GfxDriver3D.htm @@ -0,0 +1,48 @@ + + +Command: GfxDriver3D + + + + + + +

  GfxDriver3D  

+ +

+Parameters:
+

+ + + + +
driver -- display driver number to check, from 1 to CountGfxDrivers ()
+

Description:
+
+ + + + +
GfxDriver3D returns True if the specified graphics driver is 3D-capable. +

+GfxDriver3D is generally used after obtaining a list of available graphics drivers from a user's system via CountGfxDrivers (). You apply this to each driver in turn (or a selected driver) to see if it is 3D-capable. If this returns False, the driver can not perform 3D operations. +

+On systems with more than one display driver, you can use this to check each for 3D capability before choosing one via the SetGfxDriver command. +

+

Example:
+
+ + + + + +
For a = 1 To CountGfxDrivers ()
+ If GfxDriver3D (a)
+ Print GfxDriverName (a) + " is 3D-capable"
+ Else
+ Print GfxDriverName (a) + " is NOT 3D-capable"
+ EndIf
+ Delay 100
+Next
+ + diff --git a/_release/help/commands/3d_commands/GfxMode3D.htm b/_release/help/commands/3d_commands/GfxMode3D.htm new file mode 100644 index 0000000..2302ab1 --- /dev/null +++ b/_release/help/commands/3d_commands/GfxMode3D.htm @@ -0,0 +1,48 @@ + + +Command: GfxMode3D + + + + + + +

  GfxMode3D  

+ +

+Parameters:
+

+ + + + +
mode - graphics mode number from 1 - CountGfxModes ()
+

Description:
+
+ + + + +
GfxMode3D returns True if the specified graphics mode is 3D-capable. +

+GfxMode3D is generally used after obtaining a list of available display modes from a user's system via CountGfxModes (). You apply this to each mode in turn (or a selected mode) to see if you can enter 3D mode. If this returns False, calling Graphics3D () with this mode's details will fail! +

+If you don't wish to perform this check, the only Graphics3D call you can make with a guarantee of working on 99% of 3D graphics cards is 'Graphics3D 640, 480'. However, see GfxModeExists' gfx3d parameter for another method of performing this check. +

+

Example:
+
+ + + + + +
For a = 1 To CountGfxModes ()
+ If GfxMode3D (a)
+ Print "Mode " + a + " is 3D-capable"
+ Else
+ Print "Mode " + a + " is NOT 3D-capable"
+ EndIf
+ Delay 100
+ Next
+ + diff --git a/_release/help/commands/3d_commands/GfxModeExists.htm b/_release/help/commands/3d_commands/GfxModeExists.htm new file mode 100644 index 0000000..86eb4bc --- /dev/null +++ b/_release/help/commands/3d_commands/GfxModeExists.htm @@ -0,0 +1,46 @@ + + +Command: GfxModeExists + + + + + + +

  GfxModeExists  

+ +

+Parameters:
+

+ + + + +
width - the width of the display mode you want to check for
+ height - the height of the display mode you want to check for
+ depth - the depth of the display mode you want to check for
+ gfx3d - optional parameter to check if mode is 3D-capable (defaults to 0 for backwards compatibility)
+

Description:
+
+ + + + +
GfxModeExists is a sadly under-used command which will allow you to check if a given display mode exists on your player's graphics card before calling the Graphics or Graphics3D commands. Note that supplying the optional gfx3d parameter will also check if the specified mode is 3D-capable. +

+GfxModeExists will return True if a display mode fitting the given parameters is available, and False if the specified mode is not available. If it returns False, a game should either use a different mode or exit politely (eg. RuntimeError "I have been lazy and hard-coded my game to use a particular display mode which your system doesn't have. I should really use CountGfxModes and GfxModeWidth/Height/Depth to find out what your system can do. Oh, well, this saved 10 minutes out of my life!"... note subtle sarcastic hint!). +

+

Example:
+
+ + + + + +
If GfxModeExists (2500, 2500, 64)
+ Graphics 2500, 2500, 64
+Else
+ RuntimeError "Domestic PC display hardware isn't yet capable of silly resolutions like 2500 x 2500 x 64-bit!"
+EndIf
+ + diff --git a/_release/help/commands/3d_commands/Graphics3D.htm b/_release/help/commands/3d_commands/Graphics3D.htm new file mode 100644 index 0000000..cf43bc3 --- /dev/null +++ b/_release/help/commands/3d_commands/Graphics3D.htm @@ -0,0 +1,76 @@ + + +Command: Graphics3D + + + + + + +

  Graphics3D  

+ +

+Parameters:
+

+ + + + +
width - width of screen resolution
+height - height of screen resolution
+depth (optional) - colour depth of screen. Defaults to highest colour depth +available.
+
+mode (optional) - mode of display. Defaults to 0.
+0: windowed (if possible) in debug mode, fullscreen in non-debug mode
+1: fullscreen always
+2. windowed always
+3: windowed/scaled always
+

Description:
+
+ + + + +
Sets 3D Graphics mode. This command must be executed before any other 3D +command, otherwise programs will return an error.
+
+Width and height set the resolution of the screen and common values are 640,480 +and 800,600. The resolution must be compatible with the 3D card and monitor +being used.
+
+Depth sets the colour mode of the screen. If this value is omitted or set to 0, +then the highest available colour depth available will be used. Other values +usually available are 16, 24 and 32. 16-bit colour mode displays the least +amount of colours, 65536. 24-bit and 32-bit colour modes display over 16 million +colours and as a result offer a better quality picture, although may result in +slower programs than 16-bit.
+

Example:
+
+ + + + + +
; Graphics3D Example
+ ; ------------------
+
+ ; Sets 3D graphics mode
+ Graphics3D 640,480,16,0
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ light=CreateLight()
+
+ cone=CreateCone( 32 )
+ PositionEntity cone,0,0,5
+
+ While Not KeyDown( 1 )
+ RenderWorld
+ Flip
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/HWMultiTex.htm b/_release/help/commands/3d_commands/HWMultiTex.htm new file mode 100644 index 0000000..d622581 --- /dev/null +++ b/_release/help/commands/3d_commands/HWMultiTex.htm @@ -0,0 +1,48 @@ + + +Command: HWMultiTex + + + + + + +

  HWMultiTex enable  

+ +

+Parameters:
+

+ + + + +
enable - true to enable hardware multitexturing, false to disable. Defaults to + true.
+

Description:
+
+ + + + +
Enables or disables hardware multitexturing.
+
+Multitexturing is a technique used to display more than one texture on an object +at once. Sometimes, 3D hardware has built-in support for this, so that using two +textures or more per object will not be any slower than using just one.
+
+However, some cards have problems dealing with hardware multitexturing, and for +these situations you have the option of disabling it.
+
+When hardware texturing isn't being used, Blitz3D will use its own software +technique, which involves duplicating objects that just have one texture each.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/HandleSprite.htm b/_release/help/commands/3d_commands/HandleSprite.htm new file mode 100644 index 0000000..7894a73 --- /dev/null +++ b/_release/help/commands/3d_commands/HandleSprite.htm @@ -0,0 +1,39 @@ + + +Command: HandleSprite + + + + + + +

  HandleSprite sprite,x_handle#,y_handle#  

+ +

+Parameters:
+

+ + + + +
sprite - sprite handle. Not to be confused with HandleSprite - ie. the + handle used to position the sprite, rather than the sprite's actual handle
+

Description:
+
+ + + + +
Sets a sprite handle. Defaults to 0,0,0.

A sprite extends from 1,-1 to + +1,+1.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/HideEntity.htm b/_release/help/commands/3d_commands/HideEntity.htm new file mode 100644 index 0000000..b52f786 --- /dev/null +++ b/_release/help/commands/3d_commands/HideEntity.htm @@ -0,0 +1,46 @@ + + +Command: HideEntity + + + + + + +

  HideEntity entity  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+

Description:
+
+ + + + +
Hides an entity, so that it is no longer visible, and is no longer + involved in collisions.

The main purpose of hide entity is to allow you to + create entities at the beginning of a program, hide them, then copy them and + show as necessary in the main game. This is more efficient than creating + entities mid-game.

+

If you wish to hide an entity so that it is no longer visible but still + involved in collisions, then use EntityAlpha 0 + instead. This will make an entity completely transparent.

HideEntity + affects the specified entity and all of its child entities, if any + exist.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/LightColor.htm b/_release/help/commands/3d_commands/LightColor.htm new file mode 100644 index 0000000..e23dca4 --- /dev/null +++ b/_release/help/commands/3d_commands/LightColor.htm @@ -0,0 +1,46 @@ + + +Command: LightColor + + + + + + +

  LightColor light,red#,green#,blue#  

+ +

+Parameters:
+

+ + + + +
light - light handle
+ red# - red value of light
+ green# - green value of light
+ blue# - blue value of light
+

Description:
+
+ + + + +
Sets the color of a light.

An r,g,b value of 255,255,255 will brighten + anything the light shines on.
+
+ An r,g,b value of 0,0,0 will have no affect on anything it shines on.
+
+ An r,g,b value of -255,-255,-255 will darken anything it shines on. This is + known as 'negative lighting', and is useful for shadow effects.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/LightConeAngles.htm b/_release/help/commands/3d_commands/LightConeAngles.htm new file mode 100644 index 0000000..485b2b6 --- /dev/null +++ b/_release/help/commands/3d_commands/LightConeAngles.htm @@ -0,0 +1,40 @@ + + +Command: LightConeAngles + + + + + + +

  LightConeAngles light,inner_angle#,outer_angle#  

+ +

+Parameters:
+

+ + + + +
light - light handle
+ inner_angle# - inner angle of cone
+ outer_angle# - outer angle of cone
+

Description:
+
+ + + + +
Sets the 'cone' angle for a spotlight.

The default light cone angles + setting is 0,90.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/LightMesh.htm b/_release/help/commands/3d_commands/LightMesh.htm new file mode 100644 index 0000000..82de610 --- /dev/null +++ b/_release/help/commands/3d_commands/LightMesh.htm @@ -0,0 +1,44 @@ + + +Command: LightMesh + + + + + + +

  LightMesh mesh,red#,green#,blue#[,range#][,light_x#][,light_y#][,light_z#]  

+ +

+Parameters:
+

+ + + + +
mesh - mesh handle
+ red# - mesh red value
+ green# - mesh green value
+ blue# - mesh blue value
+ range# (optional) - light range
+ light_x# (optional) - light x position
+ light_y# (optional) - light y position
+ light_z# (optional) - light z position
+

Description:
+
+ + + + +
Performs a 'fake' lighting operation on a mesh.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/LightRange.htm b/_release/help/commands/3d_commands/LightRange.htm new file mode 100644 index 0000000..ed80739 --- /dev/null +++ b/_release/help/commands/3d_commands/LightRange.htm @@ -0,0 +1,42 @@ + + +Command: LightRange + + + + + + +

  LightRange light,range#  

+ +

+Parameters:
+

+ + + + +
light - light handle
+ range - range of light
+

Description:
+
+ + + + +
Sets the range of a light.

The range of a light is how far it reaches. + Everything outside the range of the light will not be affected by it.
+
+ The value is very approximate, and should be experimented with for best + results.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/LinePick.htm b/_release/help/commands/3d_commands/LinePick.htm new file mode 100644 index 0000000..6717518 --- /dev/null +++ b/_release/help/commands/3d_commands/LinePick.htm @@ -0,0 +1,43 @@ + + +Command: LinePick + + + + + + +

  LinePick ( x#,y#,z#,dx#,dy#,dz#[,radius#] )  

+ +

+Parameters:
+

+ + + + +
x# - x coordinate of start of line pick
+ y# - y coordinate of start of line pick
+ z# - z coordinate of start of line pick
+ dx# - distance x of line pick
+ dy# - distance y of line pick
+ dz# - distance z of line pick
+ radius (optional) - radius of line pick
+

Description:
+
+ + + + +
Returns the first entity between x,y,z to x+dx,y+dy,z+dz.
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/Load3DSound.htm b/_release/help/commands/3d_commands/Load3DSound.htm new file mode 100644 index 0000000..fc039b9 --- /dev/null +++ b/_release/help/commands/3d_commands/Load3DSound.htm @@ -0,0 +1,37 @@ + + +Command: Load3DSound + + + + + + +

  Load3DSound ( file$ )  

+ +

+Parameters:
+

+ + + + +
file$ - filename of sound file to be loaded and used as 3D sound
+

Description:
+
+ + + + +
Loads a sound and returns its handle for use with EmitSound.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/LoadAnimMesh.htm b/_release/help/commands/3d_commands/LoadAnimMesh.htm new file mode 100644 index 0000000..3f33e4e --- /dev/null +++ b/_release/help/commands/3d_commands/LoadAnimMesh.htm @@ -0,0 +1,40 @@ + + +Command: LoadAnimMesh + + + + + + +

  LoadAnimMesh ( file$[,parent] )  

+ +

+Parameters:
+

+ + + + +
file$ - mesh filename
+ parent - parent entity of mesh
+

Description:
+
+ + + + +
Loads a mesh from a .x or .3ds file and returns a mesh handle.

Any + hierarchy and animation information in the file is retained (if present in + the file!).

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/LoadAnimSeq.htm b/_release/help/commands/3d_commands/LoadAnimSeq.htm new file mode 100644 index 0000000..7f12277 --- /dev/null +++ b/_release/help/commands/3d_commands/LoadAnimSeq.htm @@ -0,0 +1,39 @@ + + +Command: LoadAnimSeq + + + + + + +

  LoadAnimSeq ( entity,filename$ )  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ filename$ - filename of animated 3D object
+

Description:
+
+ + + + +
Appends an animation sequence from a file to an entity.

Returns the + animation sequence number added.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/LoadAnimTexture.htm b/_release/help/commands/3d_commands/LoadAnimTexture.htm new file mode 100644 index 0000000..3be7e4c --- /dev/null +++ b/_release/help/commands/3d_commands/LoadAnimTexture.htm @@ -0,0 +1,53 @@ + + +Command: LoadAnimTexture + + + + + + +

  LoadAnimTexture ( +file$,flags,frame_width,frame_height,first_frame,frame_count )  

+ +

+Parameters:
+

+ + + + +
file$ - name of file with animation frames laid out in left-right, + top-to-bottom order

flags - texture flag:
+ 1: Color
+ 2: Alpha
+ 4: Masked
+ 8: Mipmapped
+ 16: Clamp U
+ 32: Clamp V
+ 64: Spherical reflection map
+
+ frame_width - width of each animation frame
+ frame_height - height of each animation frame
+ first_frame - the first frame to be used as an animation frame.
+ frame_count - the amount of frames to be used

+

Description:
+
+ + + + +
Loads a sequence of animation frames into a texture.

See also: + CreateTexture, + LoadTexture.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/LoadBrush.htm b/_release/help/commands/3d_commands/LoadBrush.htm new file mode 100644 index 0000000..8f6405c --- /dev/null +++ b/_release/help/commands/3d_commands/LoadBrush.htm @@ -0,0 +1,50 @@ + + +Command: LoadBrush + + + + + + +

  LoadBrush ( file$[,flags][,u_scale][,v_scale]  

+ +

+Parameters:
+

+ + + + +
file$ - filename
+ flags - brush flags
+
+ flags (optional) - flags can be added to combine effects:
+ 1: Color
+ 2: Alpha
+ 4: Masked
+ 8: Mipmapped
+ 16: Clamp U
+ 32: Clamp V
+ 64: Spherical reflection map
+
+ u_scale - brush u_scale
+ v_scale - brush v_scale
+

Description:
+
+ + + + +
Creates a brush, assigns a texture to it, and returns a brush handle.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/LoadMD2.htm b/_release/help/commands/3d_commands/LoadMD2.htm new file mode 100644 index 0000000..115d690 --- /dev/null +++ b/_release/help/commands/3d_commands/LoadMD2.htm @@ -0,0 +1,77 @@ + + +Command: LoadMD2 + + + + + + +

  LoadMD2 ( md2_file$[,parent] )  

+ +

+Parameters:
+

+ + + + +
md2_file$ - filename of md2
+ parent (optional) - parent entity of md2
+

Description:
+
+ + + + +
Loads an md2 entity and returns its handle.

An md2's texture has to be + loaded and applied to the md2 separately, otherwise the md2 will appear + untextured.

+

Md2's have their own set of animation commands, and will not work with + normal animation commands.

+ +

The optional parent parameter allow you to specify a parent entity for + the md2 so that when the parent is moved the child md2 will move with it. + However, this relationship is one way; applying movement commands to the + child will not affect the parent.

+

Specifying a parent entity will still result in the md2 being created at + position 0,0,0 rather than at the parent entity's position.

+

Example:
+
+ + + + + +
; LoadMD2 Example
+ ; ---------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ ; Load md2
+ gargoyle=LoadMD2( "media/gargoyle/gargoyle.md2" )
+
+ ; Load md2 texture
+ garg_tex=LoadTexture( "media/gargoyle/gargoyle.bmp" )
+
+ ; Apply md2 texture to md2
+ EntityTexture gargoyle,garg_tex
+
+ PositionEntity gargoyle,0,-45,100
+ RotateEntity gargoyle,0,180,0
+
+ While Not KeyDown( 1 )
+ RenderWorld
+ Flip
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/LoadMesh.htm b/_release/help/commands/3d_commands/LoadMesh.htm new file mode 100644 index 0000000..1e23fce --- /dev/null +++ b/_release/help/commands/3d_commands/LoadMesh.htm @@ -0,0 +1,68 @@ + + +Command: LoadMesh + + + + + + +

  LoadMesh ( file$[,parent] )  

+ +

+Parameters:
+

+ + + + +
file$ - filename of mesh
+ parent (optional) - parent entity of mesh
+

Description:
+
+ + + + +
Loads a mesh from a .x or .3ds file and returns the mesh's handle.

Any + hierarchy and animation information in the file will be ignored. Use + LoadAnimMesh to maintain hierarchy and + animation information.

The optional parent parameter allow + you to specify a parent entity for the mesh so that when the parent is moved + the child mesh will move with it. However, this relationship is one way; + applying movement commands to the child will not affect the parent.

+

Specifying a parent entity will still result in the mesh being created at + position 0,0,0 rather than at the parent entity's position.

+

See also: LoadAnimMesh.

+

Example:
+
+ + + + + +
; LoadMesh Example
+ ; ----------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ ; Load mesh
+ drum=LoadMesh("media/oil-drum/oildrum.3ds")
+
+ PositionEntity drum,0,0,MeshDepth(drum)*2
+
+ While Not KeyDown( 1 )
+ RenderWorld
+ Flip
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/LoadSprite.htm b/_release/help/commands/3d_commands/LoadSprite.htm new file mode 100644 index 0000000..97d5c0b --- /dev/null +++ b/_release/help/commands/3d_commands/LoadSprite.htm @@ -0,0 +1,51 @@ + + +Command: LoadSprite + + + + + + +

  LoadSprite ( tex_file$[,tex_flag][,parent] +)  

+ +

+Parameters:
+

+ + + + +
text_file$ - filename of image file to be used as sprite
+
+ tex_flag (optional) - texture flag:
+ 1: Color
+ 2: Alpha
+ 4: Masked
+ 8: Mipmapped
+ 16: Clamp U
+ 32: Clamp V
+ 64: Spherical reflection map
+
+ parent - parent of entity
+

Description:
+
+ + + + +
Creates a sprite entity, and assigns a texture to it.

See also: + CreateSprite, + SpriteViewMode.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/LoadTerrain.htm b/_release/help/commands/3d_commands/LoadTerrain.htm new file mode 100644 index 0000000..6ae0a13 --- /dev/null +++ b/_release/help/commands/3d_commands/LoadTerrain.htm @@ -0,0 +1,109 @@ + + +Command: LoadTerrain + + + + + + +

  LoadTerrain ( file$[,parent] )  

+ +

+Parameters:
+

+ + + + +
file$ - filename of image file to be used as height map
+ parent (optional) - parent entity of terrain
+

Description:
+
+ + + + +
Loads a terrain from an image file and returns the terrain's handle. The image's red channel is used to + determine heights. Terrain is initially the same width and depth as the + image, and 1 high.

Tips on generating nice terrain:
+
+ * Smooth or blur the height map
+ * Reduce the y scale of the terrain
+ * Increase the x/z scale of the terrain
+ * Reduce the camera range

+

When texturing an entity, a texture with a scale of 1,1,1 (default) will + be the same size as one of the terrain's grid squares. A texture that is + scaled to the same size as the size of the bitmap used to load it or the no. + of grid square used to create it, will be the same size as the terrain.

+

The optional parent parameter allow you to specify a parent entity for + the terrain so that when the parent is moved the child terrain will move + with it. However, this relationship is one way; applying movement commands + to the child will not affect the parent.

+ +

Specifying a parent entity will still result in the terrain being created + at position 0,0,0 rather than at the parent entity's position.

+
+

See also: CreateTerrain.

+

Example:
+
+ + + + + +
SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ PositionEntity camera,1,1,1
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ ; Load terrain
+ terrain=LoadTerrain( "media/height_map.bmp" )
+
+ ; Set terrain detail, enable vertex morphing
+ TerrainDetail terrain,4000,True
+
+ ; Scale terrain
+ ScaleEntity terrain,1,50,1
+
+ ; Texture terrain
+ grass_tex=LoadTexture( "media/mossyground.bmp" )
+ EntityTexture terrain,grass_tex,0,1
+
+ While Not KeyDown( 1 )
+
+ If KeyDown( 203 )=True Then x#=x#-0.1
+ If KeyDown( 205 )=True Then x#=x#+0.1
+ If KeyDown( 208 )=True Then y#=y#-0.1
+ If KeyDown( 200 )=True Then y#=y#+0.1
+ If KeyDown( 44 )=True Then z#=z#-0.1
+ If KeyDown( 30 )=True Then z#=z#+0.1
+
+ If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0
+ If KeyDown( 203 )=True Then TurnEntity camera,0,1,0
+ If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.1
+ If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.1
+
+ x#=EntityX(camera)
+ y#=EntityY(camera)
+ z#=EntityZ(camera)
+
+ terra_y#=TerrainY(terrain,x#,y#,z#)+5
+
+ PositionEntity camera,x#,terra_y#,z#
+
+ RenderWorld
+
+ Text 0,0,"Use cursor keys to move about the terrain"
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/LoadTexture.htm b/_release/help/commands/3d_commands/LoadTexture.htm new file mode 100644 index 0000000..6580a67 --- /dev/null +++ b/_release/help/commands/3d_commands/LoadTexture.htm @@ -0,0 +1,114 @@ + + +Command: LoadTexture + + + + + + +

  LoadTexture ( file$[,flags] )  

+ +

+Parameters:
+

+ + + + +
file$ - filename of image file to be used as texture
+
+ flags (optional) - texture flag:
+ 1: Color
+ 2: Alpha
+ 4: Masked
+ 8: Mipmapped
+ 16: Clamp U
+ 32: Clamp V
+ 64: Spherical reflection map
+

Description:
+
+ + + + +
Load a texture from an image file and returns the texture's handle.
+
+ The optional flags parameter allows + you to apply certain effects to the texture. Flags can be added to combine + two or more effects, e.g. 3 (1+2) = texture with colour and alpha maps.

Here + are quick descriptions of the flags:
+ 1: Color - colour map, what you see is what you get.
+ 2: Alpha - alpha map. If an image contains an alpha map, this will be used + to make certain areas of the texture transparent. Otherwise, the colour map + will be used as an alpha map. With alpha maps, the dark areas always equal + hihg-transparency, light areas equal low-transparency.
+ 4: Masked - all areas of a texture coloured 0,0,0 will not be drawn to the + screen.
+ 8: Mipmapped - low detail versions of the texture will be used at high + distance. Results in a smooth, blurred look.
+ 16: Clamp u - clamp u texture co-ordinates. Prevents texture wrapping.
+ 32: Clamp v - clamp v texture co-ordinates. Prevents texture wrapping.
+ 64: Spherical reflection map - environment mapping, for that shiny, teapot + look.
+
+ Something to consider when applying texture flags to loaded textures is that + the texture may have already had certain flags applied to it via the + TextureFilter command. The default for the + TextureFilter command is 9 (1+8), which is a + coloured, mipmapped texture. This cannot be overridden via the flags + parameter of LoadTexture command - if you wish for the filters to be removed + you will need to use the + ClearTextureFilters command.

See also: CreateTexture, + LoadAnimTexture.

+

Example:
+
+ + + + + +
; LoadTexture Example
+ ; -------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ cube=CreateCube()
+ PositionEntity cube,0,0,5
+
+ ; Load texture
+ tex=LoadTexture("../media/b3dlogo.jpg")
+
+ ; Texture cube with texture
+ EntityTexture cube,tex
+
+ While Not KeyDown( 1 )
+
+ pitch#=0
+ yaw#=0
+ roll#=0
+
+ If KeyDown( 208 )=True Then pitch#=-1
+ If KeyDown( 200 )=True Then pitch#=1
+ If KeyDown( 203 )=True Then yaw#=-1
+ If KeyDown( 205 )=True Then yaw#=1
+ If KeyDown( 45 )=True Then roll#=-1
+ If KeyDown( 44 )=True Then roll#=1
+
+ TurnEntity cube,pitch#,yaw#,roll#
+
+ RenderWorld
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/LoaderMatrix.htm b/_release/help/commands/3d_commands/LoaderMatrix.htm new file mode 100644 index 0000000..a916bbb --- /dev/null +++ b/_release/help/commands/3d_commands/LoaderMatrix.htm @@ -0,0 +1,54 @@ + + +Command: LoadMatrix + + + + + + +

  LoaderMatrix file_extension$,xx#,xy#,xz#,yx#,yy#,yz#,zx#,zy#,zz#  

+ +

+Parameters:
+

+ + + + +
file extension$ - file extension of 3d file, e.g. ".x",".3ds"
+ xx# - 1,1 element of 3x3 matrix
+ xy# - 2,1 element of 3x3 matrix
+ xz# - 3,1 element of 3x3 matrix
+ yx# - 1,2 element of 3x3 matrix
+ yy# - 2,2 element of 3x3 matrix
+ yz# - 3,2 element of 3x3 matrix
+ zx# - 1,3 element of 3x3 matrix
+ zy# - 2,3 element of 3x3 matrix
+ zz# - 3,3 element of 3x3 matrix
+

Description:
+
+ + + + +
Sets a matrix for 3d files loaded with the specified file extension.

+ This can be used to change coordinate systems when loading.

+

By default, the following loader matrices are used:

+

LoaderMatrix "x",1,0,0,0,1,0,0,0,1 ; no change in coord system
+ LoaderMatrix "3ds",1,0,0,0,0,1,0,1,0 ; swap y/z axis'

+

You can use LoaderMatrix to flip meshes/animations if necessary, eg:

+

LoaderMatrix "x",-1,0,0,0,1,0,0,0,1 ; flip x-cords for ".x" files
+ LoaderMatrix "3ds",-1,0,0,0,0,-1,0,1,0 ; swap y/z, negate x/z for ".3ds" + files

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/MD2AnimLength.htm b/_release/help/commands/3d_commands/MD2AnimLength.htm new file mode 100644 index 0000000..262b968 --- /dev/null +++ b/_release/help/commands/3d_commands/MD2AnimLength.htm @@ -0,0 +1,75 @@ + + +Command: MD2AnimLength + + + + + + +

  MD2AnimLength ( md2 )  

+ +

+Parameters:
+

+ + + + +
md2 - md2 handle
+

Description:
+
+ + + + +
Returns the animation length of an md2 model.

The animation length is + the total amount of animation frames that consist within the md2 file.

+

See also: LoadMD2, + AnimateMD2, + MD2AnimTime, MD2Animating.

+

Example:
+
+ + + + + +
; MD2AnimLength Example
+ ; ---------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ ; Load md2
+ gargoyle=LoadMD2( "media/gargoyle/gargoyle.md2")
+
+ ; Load md2 texture
+ garg_tex=LoadTexture( "media/gargoyle/gargoyle.bmp" )
+
+ ; Apply md2 texture to md2
+ EntityTexture gargoyle,garg_tex
+
+ PositionEntity gargoyle,0,-45,100
+ RotateEntity gargoyle,0,180,0
+
+ While Not KeyDown( 1 )
+
+ RenderWorld
+
+ ; Output animation length to screen
+ Text 0,0,"MD2AnimLength: "+MD2AnimLength( gargoyle )
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/MD2AnimTime.htm b/_release/help/commands/3d_commands/MD2AnimTime.htm new file mode 100644 index 0000000..9e3e689 --- /dev/null +++ b/_release/help/commands/3d_commands/MD2AnimTime.htm @@ -0,0 +1,81 @@ + + +Command: MD2AnimTime + + + + + + +

  MD2AnimTime ( md2 )  

+ +

+Parameters:
+

+ + + + +
md2 - md2 handle
+

Description:
+
+ + + + +
Returns the animation time of an md2 model.

The animation time is the + exact moment that the md2 is at with regards its frames of animation. For + example, if the md2 at a certain moment in time is moving between the third + and fourth frames, then MD2AnimTime will return a number in the region 3-4.

+

See also: LoadMD2, + AnimateMD2, + MD2AnimLength, MD2Animating.

+

Example:
+
+ + + + + +
; MD2AnimTime Example
+ ; -------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ ; Load md2
+ gargoyle=LoadMD2( "media/gargoyle/gargoyle.md2")
+
+ ; Load md2 texture
+ garg_tex=LoadTexture( "media/gargoyle/gargoyle.bmp" )
+
+ ; Apply md2 texture to md2
+ EntityTexture gargoyle,garg_tex
+
+ ; Animate md2
+ AnimateMD2 gargoyle,1,0.1,32,46
+
+ PositionEntity gargoyle,0,-45,100
+ RotateEntity gargoyle,0,180,0
+
+ While Not KeyDown( 1 )
+
+ UpdateWorld
+ RenderWorld
+
+ ; Output current animation frame to screen
+ Text 0,0,"MD2AnimTime: "+MD2AnimTime( gargoyle )
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/MD2Animating.htm b/_release/help/commands/3d_commands/MD2Animating.htm new file mode 100644 index 0000000..827c936 --- /dev/null +++ b/_release/help/commands/3d_commands/MD2Animating.htm @@ -0,0 +1,79 @@ + + +Command: MD2Animating + + + + + + +

  MD2Animating ( md2 )  

+ +

+Parameters:
+

+ + + + +
md2 - md2 handle
+

Description:
+
+ + + + +
Returns 1 (true) if md2 is currently animating, 0 (false) if not.

See also: LoadMD2, + AnimateMD2, + MD2AnimTime, MD2AnimLength.

+

Example:
+
+ + + + + +
; MD2Animating Example
+ ; --------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ ; Load md2
+ gargoyle=LoadMD2( "media/gargoyle/gargoyle.md2")
+
+ ; Load md2 texture
+ garg_tex=LoadTexture( "media/gargoyle/gargoyle.bmp" )
+
+ ; Apply md2 texture to md2
+ EntityTexture gargoyle,garg_tex
+
+ PositionEntity gargoyle,0,-45,100
+ RotateEntity gargoyle,0,180,0
+
+ While Not KeyDown( 1 )
+
+ ; Toggle animation stop/start when spacebar pressed
+ If KeyHit( 57 )=True start=1-start : AnimateMD2 gargoyle,start,0.1,32,46
+
+ UpdateWorld
+ RenderWorld
+
+ Text 0,0,"Press spacebar to stop/start md2 animation"
+
+ ; Output current md2 animation status to screen
+ Text 0,20,"MD2Animating: "+MD2Animating( gargoyle )
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/MeshDepth.htm b/_release/help/commands/3d_commands/MeshDepth.htm new file mode 100644 index 0000000..75f6de0 --- /dev/null +++ b/_release/help/commands/3d_commands/MeshDepth.htm @@ -0,0 +1,38 @@ + + +Command: MeshDepth + + + + + + +

  MeshDepth# (mesh)  

+ +

+Parameters:
+

+ + + + +
mesh - mesh handle
+

Description:
+
+ + + + +
Returns the depth of a mesh.

See also: + MeshWidth, MeshHeight.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/MeshHeight.htm b/_release/help/commands/3d_commands/MeshHeight.htm new file mode 100644 index 0000000..9cb3302 --- /dev/null +++ b/_release/help/commands/3d_commands/MeshHeight.htm @@ -0,0 +1,38 @@ + + +Command: MeshHeight + + + + + + +

  MeshHeight# (mesh )  

+ +

+Parameters:
+

+ + + + +
mesh - mesh handle
+

Description:
+
+ + + + +
Returns the height of a mesh.

See also: + MeshWidth, MeshDepth.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/MeshWidth.htm b/_release/help/commands/3d_commands/MeshWidth.htm new file mode 100644 index 0000000..4b7493a --- /dev/null +++ b/_release/help/commands/3d_commands/MeshWidth.htm @@ -0,0 +1,38 @@ + + +Command: MeshWidth + + + + + + +

  MeshWidth# (mesh)  

+ +

+Parameters:
+

+ + + + +
mesh - mesh handle
+

Description:
+
+ + + + +
Returns the width of a mesh.

See also: + MeshHeight, MeshDepth.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/MeshesIntersect.htm b/_release/help/commands/3d_commands/MeshesIntersect.htm new file mode 100644 index 0000000..62c35a3 --- /dev/null +++ b/_release/help/commands/3d_commands/MeshesIntersect.htm @@ -0,0 +1,73 @@ + + +Command: MeshIntersect + + + + + + +

  MeshesIntersect (mesh_a,mesh_b )  

+ +

+Parameters:
+

+ + + + +
mesh_a - mesh_a handle
+ mesh_b - mesh_b handle
+

Description:
+
+ + + + +
Returns true if the specified meshes are currently intersecting.

This + is a fairly slow routine - use with discretion...

This command is + currently the only + polygon->polygon collision checking routine available in Blitz3D.

+

Example:
+
+ + + + + +
; MeshesIntersect Example
+ ; -----------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ drum=LoadMesh("media/oil-drum/oildrum.3ds")
+ PositionEntity drum,-20,0,100
+
+ crate=LoadMesh("media/wood-crate/wcrate1.3ds")
+ PositionEntity crate,20,0,100
+
+ While Not KeyDown( 1 )
+
+ TurnEntity drum,1,1,1
+ TurnEntity crate,-1,-1,-1
+
+ RenderWorld
+
+ ; Test to see if drum and crate meshes are intersecting; if so then display + message to confirm this
+ If MeshesIntersect(drum,crate)=True Then Text 0,0,"Meshes are intersecting!"
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/ModifyTerrain.htm b/_release/help/commands/3d_commands/ModifyTerrain.htm new file mode 100644 index 0000000..1c6b2d5 --- /dev/null +++ b/_release/help/commands/3d_commands/ModifyTerrain.htm @@ -0,0 +1,43 @@ + + +Command: ModifyTerrain + + + + + + +

  ModifyTerrain terrain,grid_x,grid_z,height#[,realtime]  

+ +

+Parameters:
+

+ + + + +
terrain - terrain handle
+ grid_x - grid x coordinate of terrain
+ grid_y - grid y coordinate of terrain
+ height# - height of point on terrain. Should be in the range 0-1.
+ realtime (optional) - true to modify terrain immediately. False to modify + terrain when RenderWorld in next called. + Defaults to false.
+

Description:
+
+ + + + +
Sets the height of a point on a terrain.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/MoveEntity.htm b/_release/help/commands/3d_commands/MoveEntity.htm new file mode 100644 index 0000000..0a522a9 --- /dev/null +++ b/_release/help/commands/3d_commands/MoveEntity.htm @@ -0,0 +1,96 @@ + + +Command: MoveEntity + + + + + + +

  MoveEntity entity,x#,y#,z#  

+ +

+Parameters:
+

+ + + + +
entity - name of entity to be moved
+x# - x amount that entity will be moved by
+y# - y amount that entity will be moved by
+z# - z amount that entity will be moved by
+

Description:
+
+ + + + +
Moves an entity relative to its current position and orientation.
+
+What this means is that an entity will move in whatever direction it is facing. +So for example if you have an game character is upright when first loaded into +Blitz3D and it remains upright (i.e. turns left or right only), then moving it by +a z amount will always see it move forward or backward, moving it by a y amount +will always see it move up or down, and moving it by an x +amount will always see it strafe.

See also: + TranslateEntity, PositionEntity.

+

Example:
+
+ + + + + +
; MoveEntity Example
+ ; ------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ light=CreateLight()
+
+ cone=CreateCone( 32 )
+
+ ; Move cone in front of camera, so we can see it to begin with
+ MoveEntity cone,0,0,10
+
+ While Not KeyDown( 1 )
+
+ ; Reset movement values - otherwise, the cone will not stop!
+ x#=0
+ y#=0
+ z#=0
+
+ ; Change rotation values depending on the key pressed
+ If KeyDown( 203 )=True Then x#=-0.1
+ If KeyDown( 205 )=True Then x#=0.1
+ If KeyDown( 208 )=True Then y#=-0.1
+ If KeyDown( 200 )=True Then y#=0.1
+ If KeyDown( 44 )=True Then z#=-0.1
+ If KeyDown( 30 )=True Then z#=0.1
+
+ ; Move cone using movement values
+ MoveEntity cone,x#,y#,z#
+
+ ; If spacebar pressed then rotate cone by random amount
+ If KeyHit( 57 )=True Then RotateEntity cone,Rnd( 0,360 ),Rnd( 0,360 ),Rnd( + 0,360 )
+
+ RenderWorld
+
+ Text 0,0,"Use cursor/A/Z keys to move cone, spacebar to rotate cone by random + amount"
+ Text 0,20,"X Movement: "+x#
+ Text 0,40,"Y Movement: "+y#
+ Text 0,60,"Z Movement: "+z#
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/NameEntity.htm b/_release/help/commands/3d_commands/NameEntity.htm new file mode 100644 index 0000000..0dc59ba --- /dev/null +++ b/_release/help/commands/3d_commands/NameEntity.htm @@ -0,0 +1,38 @@ + + +Command: NameEntity + + + + + + +

  NameEntity entity,name$  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ name$ - name of entity
+

Description:
+
+ + + + +
Sets an entity's name.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/PaintEntity.htm b/_release/help/commands/3d_commands/PaintEntity.htm new file mode 100644 index 0000000..c17c7b1 --- /dev/null +++ b/_release/help/commands/3d_commands/PaintEntity.htm @@ -0,0 +1,41 @@ + + +Command: PaintEntity + + + + + + +

  PaintEntity entity,brush  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ brush - brush handle
+

Description:
+
+ + + + +
Paints a entity with a brush.

The reason for using PaintEntity to apply + specific properties to a entity using a brush rather than just using EntityTexture, EntityColor, EntityShininess etc, is that you can pre-define + one brush, and then paint entities over and over again using just the one + command rather than lots of separate ones.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/PaintMesh.htm b/_release/help/commands/3d_commands/PaintMesh.htm new file mode 100644 index 0000000..ccae9f6 --- /dev/null +++ b/_release/help/commands/3d_commands/PaintMesh.htm @@ -0,0 +1,97 @@ + + +Command: PaintMesh + + + + + + +

  PaintMesh mesh,brush  

+ +

+Parameters:
+

+ + + + +
mesh - mesh handle
+ brush - brush handle
+

Description:
+
+ + + + +
Paints a mesh with a brush.

This has the + effect of instantly altering the visible appearance of the mesh, assuming the brush's properties are different + to what was was applied to the surface before.

+

The reason for using PaintMesh to apply + specific properties to a mesh using a brush rather than just using + EntityTexture, EntityColor, EntityShininess etc, is that you can pre-define + one brush, and then paint meshes over and over again using just the one + command rather than lots of separate ones.

See also: + PaintEntity, + PaintSurface.

+

Example:
+
+ + + + + +
; PaintMesh Example
+ ; -----------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ cube=CreateCube()
+ PositionEntity cube,0,0,5
+
+ ; Load texture
+ tex=LoadTexture("../media/b3dlogo.jpg")
+
+ ; Create brush
+ brush=CreateBrush()
+
+ ; Apply texture to brush
+ BrushTexture brush,tex
+
+ ; And some other effects
+ BrushColor brush,0,0,255
+ BrushShininess brush,1
+
+ ; Paint mesh with brush
+ PaintMesh cube,brush
+
+ While Not KeyDown( 1 )
+
+ pitch#=0
+ yaw#=0
+ roll#=0
+
+ If KeyDown( 208 )=True Then pitch#=-1
+ If KeyDown( 200 )=True Then pitch#=1
+ If KeyDown( 203 )=True Then yaw#=-1
+ If KeyDown( 205 )=True Then yaw#=1
+ If KeyDown( 45 )=True Then roll#=-1
+ If KeyDown( 44 )=True Then roll#=1
+
+ TurnEntity cube,pitch#,yaw#,roll#
+
+ RenderWorld
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/PaintSurface.htm b/_release/help/commands/3d_commands/PaintSurface.htm new file mode 100644 index 0000000..dce29fb --- /dev/null +++ b/_release/help/commands/3d_commands/PaintSurface.htm @@ -0,0 +1,43 @@ + + +Command: PaintSurface + + + + + + +

  PaintSurface surface,brush  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ brush - brush handle
+

Description:
+
+ + + + +
Paints a surface with a brush.

This has the + effect of instantly altering the visible appearance of that particular + surface, i.e. section of mesh, assuming the brush's properties are different + to what was was applied to the surface before.

+

See also: PaintEntity, + PaintMesh.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/PickedEntity.htm b/_release/help/commands/3d_commands/PickedEntity.htm new file mode 100644 index 0000000..f5b6b15 --- /dev/null +++ b/_release/help/commands/3d_commands/PickedEntity.htm @@ -0,0 +1,37 @@ + + +Command: PickedEntity + + + + + + +

  PickedEntity  

+ +

+Parameters:
+

+ + + + +
<param description>
+

Description:
+
+ + + + +
<description>
+

Example:
+
+ + + + + +
<example>
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/PickedNX.htm b/_release/help/commands/3d_commands/PickedNX.htm new file mode 100644 index 0000000..26f7383 --- /dev/null +++ b/_release/help/commands/3d_commands/PickedNX.htm @@ -0,0 +1,37 @@ + + +Command: PickedNX + + + + + + +

  PickedNX  

+ +

+Parameters:
+

+ + + + +
<param description>
+

Description:
+
+ + + + +
<description>
+

Example:
+
+ + + + + +
<example>
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/PickedNY.htm b/_release/help/commands/3d_commands/PickedNY.htm new file mode 100644 index 0000000..718119e --- /dev/null +++ b/_release/help/commands/3d_commands/PickedNY.htm @@ -0,0 +1,37 @@ + + +Command: PickedNY + + + + + + +

  PickedNY  

+ +

+Parameters:
+

+ + + + +
<param description>
+

Description:
+
+ + + + +
<description>
+

Example:
+
+ + + + + +
<example>
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/PickedNZ.htm b/_release/help/commands/3d_commands/PickedNZ.htm new file mode 100644 index 0000000..be84bb5 --- /dev/null +++ b/_release/help/commands/3d_commands/PickedNZ.htm @@ -0,0 +1,37 @@ + + +Command: PickedNZ + + + + + + +

  PickedNZ  

+ +

+Parameters:
+

+ + + + +
<param description>
+

Description:
+
+ + + + +
<description>
+

Example:
+
+ + + + + +
<example>
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/PickedSurface.htm b/_release/help/commands/3d_commands/PickedSurface.htm new file mode 100644 index 0000000..37007bf --- /dev/null +++ b/_release/help/commands/3d_commands/PickedSurface.htm @@ -0,0 +1,37 @@ + + +Command: PickedSurface + + + + + + +

  PickedSurface  

+ +

+Parameters:
+

+ + + + +
<param description>
+

Description:
+
+ + + + +
<description>
+

Example:
+
+ + + + + +
<example>
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/PickedTime.htm b/_release/help/commands/3d_commands/PickedTime.htm new file mode 100644 index 0000000..ccd66a7 --- /dev/null +++ b/_release/help/commands/3d_commands/PickedTime.htm @@ -0,0 +1,37 @@ + + +Command: PickedTime + + + + + + +

  PickedTime  

+ +

+Parameters:
+

+ + + + +
<param description>
+

Description:
+
+ + + + +
<description>
+

Example:
+
+ + + + + +
<example>
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/PickedTriangle.htm b/_release/help/commands/3d_commands/PickedTriangle.htm new file mode 100644 index 0000000..5d9f0f0 --- /dev/null +++ b/_release/help/commands/3d_commands/PickedTriangle.htm @@ -0,0 +1,37 @@ + + +Command: PickedTriangle + + + + + + +

  PickedTriangle  

+ +

+Parameters:
+

+ + + + +
<param description>
+

Description:
+
+ + + + +
<description>
+

Example:
+
+ + + + + +
<example>
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/PickedX.htm b/_release/help/commands/3d_commands/PickedX.htm new file mode 100644 index 0000000..adbb472 --- /dev/null +++ b/_release/help/commands/3d_commands/PickedX.htm @@ -0,0 +1,42 @@ + + +Command: PickedX + + + + + + +

  PickedX# ( )  

+ +

+Parameters:
+

+ + + + +
None.
+

Description:
+
+ + + + +
Returns the world x coordinate of the most recently executed Pick + command. This might have been CameraPick, + EntityPick or LinePick.

+ The coordinate represents the exact point of where something was picked.

+

See also: + PickedY, PickedZ.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/PickedY.htm b/_release/help/commands/3d_commands/PickedY.htm new file mode 100644 index 0000000..9018c31 --- /dev/null +++ b/_release/help/commands/3d_commands/PickedY.htm @@ -0,0 +1,42 @@ + + +Command: PickedY + + + + + + +

  PickedY# ( )  

+ +

+Parameters:
+

+ + + + +
None.
+

Description:
+
+ + + + +
Returns the world y coordinate of the most recently executed Pick + command. This might have been CameraPick, + EntityPick or LinePick.

+ The coordinate represents the exact point of where something was picked.

+

See also: + PickedX, PickedZ.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/PickedZ.htm b/_release/help/commands/3d_commands/PickedZ.htm new file mode 100644 index 0000000..99b2312 --- /dev/null +++ b/_release/help/commands/3d_commands/PickedZ.htm @@ -0,0 +1,42 @@ + + +Command: PickedZ + + + + + + +

  PickedZ# ( )  

+ +

+Parameters:
+

+ + + + +
None.
+

Description:
+
+ + + + +
Returns the world z coordinate of the most recently executed Pick + command. This might have been CameraPick, + EntityPick or LinePick.

+ The coordinate represents the exact point of where something was picked.

+

See also: + PickedX, PickedY.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/PointEntity.htm b/_release/help/commands/3d_commands/PointEntity.htm new file mode 100644 index 0000000..ef408f1 --- /dev/null +++ b/_release/help/commands/3d_commands/PointEntity.htm @@ -0,0 +1,44 @@ + + +Command: PointEntity + + + + + + +

  PointEntity entity,target[,roll#]  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ target - target entity handle
+ roll# (optional) - roll angle of entity
+

Description:
+
+ + + + +
Points one entity at another.

The optional roll parameter allows you + to specify a roll angle as pointing an entity only sets pitch and yaw + angles.

+

If you wish for an entity to point at a certain position rather than + another entity, simply create a pivot entity at your desired position, point + the entity at this and then free the pivot.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/PositionEntity.htm b/_release/help/commands/3d_commands/PositionEntity.htm new file mode 100644 index 0000000..145d7ea --- /dev/null +++ b/_release/help/commands/3d_commands/PositionEntity.htm @@ -0,0 +1,96 @@ + + +Command: PositionEntity + + + + + + +

  PositionEntity entity,x#,y#,z#,[,global]  

+ +

+Parameters:
+

+ + + + +
entity - name of entity to be positioned
+x# - x co-ordinate that entity will be positioned at
+y# - y co-ordinate that entity will be positioned at
+z# - z co-ordinate that entity will be positioned at
+global (optional) - true if the position should be relative to 0,0,0 rather than +a parent entity's position. False by default.
+

Description:
+
+ + + + +
Positions an entity at an absolute position in 3D space.
+
+Entities are positioned using an x,y,z coordinate system. x, y and z each have +their own axis, and each axis has its own set of values. By specifying a value +for each axis, you can position an entity anywhere in 3D space. 0,0,0 is the +centre of 3D space, and if the camera is pointing in the default positive z +direction, then positioning an entity with a z value of above 0 will make it +appear in front of the camera, whereas a negative z value would see it disappear +behind the camera. Changing the x value would see it moving sideways, and +changing the y value would see it moving up/down.
+
+Of course, the direction in which entities appear to move is relative to the +position and orientation of the camera.

See also: + MoveEntity, TranslateEntity.

+

Example:
+
+ + + + + +
; PositionEntity Example
+ ; ----------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ light=CreateLight()
+
+ cone=CreateCone( 32 )
+
+ ; Set position values so that cone is positioned in front of camera, so we + can see it to begin with
+ x#=0
+ y#=0
+ z#=10
+
+ While Not KeyDown( 1 )
+
+ ; Change position values depending on key pressed
+ If KeyDown( 203 )=True Then x#=x#-0.1
+ If KeyDown( 205 )=True Then x#=x#+0.1
+ If KeyDown( 208 )=True Then y#=y#-0.1
+ If KeyDown( 200 )=True Then y#=y#+0.1
+ If KeyDown( 44 )=True Then z#=z#-0.1
+ If KeyDown( 30 )=True Then z#=z#+0.1
+
+ ; Position cone using position values
+ PositionEntity cone,x#,y#,z#
+
+ RenderWorld
+
+ Text 0,0,"Use cursor/A/Z keys to change cone position"
+ Text 0,20,"X Position: "+x#
+ Text 0,40,"Y Position: "+y#
+ Text 0,60,"Z Position: "+z#
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/PositionMesh.htm b/_release/help/commands/3d_commands/PositionMesh.htm new file mode 100644 index 0000000..a3d7aae --- /dev/null +++ b/_release/help/commands/3d_commands/PositionMesh.htm @@ -0,0 +1,40 @@ + + +Command: PositionMesh + + + + + + +

  PositionMesh mesh,x#,y#,z#  

+ +

+Parameters:
+

+ + + + +
mesh - mesh handle
+ x# - x position of mesh
+ y# - y position of mesh
+ z# - z position of mesh
+

Description:
+
+ + + + +
Moves all vertices of a mesh.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/PositionTexture.htm b/_release/help/commands/3d_commands/PositionTexture.htm new file mode 100644 index 0000000..f16226d --- /dev/null +++ b/_release/help/commands/3d_commands/PositionTexture.htm @@ -0,0 +1,90 @@ + + +Command: PositionTexture + + + + + + +

  PositionTexture texture,u_position#,v_position#  

+ +

+Parameters:
+

+ + + + +
texture - texture handle
+ u_position# - u position of texture
+ v_position# - v position of texture
+

Description:
+
+ + + + +
Positions a texture at an absolute position.

This will have an + immediate effect on all instances of the texture being used.

+

Positioning a texture is useful for performing scrolling texture effects, + such as for water etc.

+
+

Example:
+
+ + + + + +
; PositionTexture Example
+ ; -----------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ cube=CreateCube()
+ PositionEntity cube,0,0,5
+
+ ; Load texture
+ tex=LoadTexture( "media/b3dlogo.jpg" )
+
+ ; Texture cube
+ EntityTexture cube,tex
+
+ ; Set initial uv position values
+ u_position#=1
+ v_position#=1
+
+ While Not KeyDown( 1 )
+
+ ; Change uv position values depending on key pressed
+ If KeyDown( 208 )=True Then u_position#=u_position#-0.01
+ If KeyDown( 200 )=True Then u_position#=u_position#+0.01
+ If KeyDown( 203 )=True Then v_position#=v_position#-0.01
+ If KeyDown( 205 )=True Then v_position#=v_position#+0.01
+
+ ; Position texture
+ PositionTexture tex,u_position#,v_position#
+
+ TurnEntity cube,0.1,0.1,0.1
+
+ RenderWorld
+
+ Text 0,0,"Use cursor keys to change uv position values"
+ Text 0,20,"u_position#="+u_position#
+ Text 0,40,"v_position#="+v_position#
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/ProjectedX.htm b/_release/help/commands/3d_commands/ProjectedX.htm new file mode 100644 index 0000000..0575365 --- /dev/null +++ b/_release/help/commands/3d_commands/ProjectedX.htm @@ -0,0 +1,38 @@ + + +Command: ProjectedX + + + + + + +

  ProjectedX# ( )  

+ +

+Parameters:
+

+ + + + +
None.
+

Description:
+
+ + + + +
Returns the viewport x coordinate of the most recently executed + CameraProject.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/ProjectedY.htm b/_release/help/commands/3d_commands/ProjectedY.htm new file mode 100644 index 0000000..6671748 --- /dev/null +++ b/_release/help/commands/3d_commands/ProjectedY.htm @@ -0,0 +1,38 @@ + + +Command: ProjectedY + + + + + + +

  ProjectedY# ( )  

+ +

+Parameters:
+

+ + + + +
None.
+

Description:
+
+ + + + +
Returns the viewport y coordinate of the most recently executed + CameraProject.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/ProjectedZ.htm b/_release/help/commands/3d_commands/ProjectedZ.htm new file mode 100644 index 0000000..b16bdba --- /dev/null +++ b/_release/help/commands/3d_commands/ProjectedZ.htm @@ -0,0 +1,38 @@ + + +Command: ProjectedZ + + + + + + +

  ProjectedZ# ( )  

+ +

+Parameters:
+

+ + + + +
None.
+

Description:
+
+ + + + +
Returns the viewport z coordinate of the most recently executed + CameraProject.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/RenderWorld.htm b/_release/help/commands/3d_commands/RenderWorld.htm new file mode 100644 index 0000000..5859271 --- /dev/null +++ b/_release/help/commands/3d_commands/RenderWorld.htm @@ -0,0 +1,52 @@ + + +Command: RenderWorld + + + + + + +

  RenderWorld [tween#]  

+ +

+Parameters:
+

+ + + + +
tween# - defaults to 1.
+

Description:
+
+ + + + +
Renders all entities in the world.

The optional tween parameter can be used to render + entities at a point somewhere between their captured position and their + current position. A tween value of 0 will render entities at their captured + position, a tween value of 1 will render entities at their current position. + Other values may be used for interpolation. Defaults to 1.

Tweening is a + technique used to allow games to have their game logic updated a fixed amount + of times, e.g. 30, while having Blitz3D interpolate between these game logic + updates to render as many frames per second as it can, e.g. 60+, with each + frame different to the last.

This results in a game which only has to have + its game logic updated at half the rate of the renders per second, freeing + up CPU time, while at the same time having the game run as smooth as + possible on anybody's machine.

Render tweening is quite an + advanced technique, and it is not necessary to use it, so don't worry if you don't quite understand it. See the + castle demo included in the mak (nickname of Mark Sibly, author of Blitz3D) + directory of the Blitz3D samples section for a demonstration of render + tweening.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/ResetEntity.htm b/_release/help/commands/3d_commands/ResetEntity.htm new file mode 100644 index 0000000..097077a --- /dev/null +++ b/_release/help/commands/3d_commands/ResetEntity.htm @@ -0,0 +1,37 @@ + + +Command: ResetEntity + + + + + + +

  ResetEntity entity  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+

Description:
+
+ + + + +
Resets the collision state of an entity.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/RotateEntity.htm b/_release/help/commands/3d_commands/RotateEntity.htm new file mode 100644 index 0000000..a4978ce --- /dev/null +++ b/_release/help/commands/3d_commands/RotateEntity.htm @@ -0,0 +1,87 @@ + + +Command: RotateEntity + + + + + + +

  RotateEntity entity,pitch#,yaw#,roll#,[,global]  

+ +

+Parameters:
+

+ + + + +
entity - name of the entity to be rotated
+pitch# - angle in degrees of pitch rotation
+yaw# - angle in degrees of yaw rotation
+roll# - angle in degrees of roll rotation
+global (optional) - true if the angle rotated should be relative to 0,0,0 rather +than a parent entity's orientation. False by default.
+

Description:
+
+ + + + +
Rotates an entity so that it is at an absolute orientation.
+
+Pitch is the same as the x angle of an entity, and is equivalent to tilting +forward/backwards.
+
+Yaw is the same as the y angle of an entity, and is equivalent to turning +left/right.
+
+Roll is the same as the z angle of an entity, and is equivalent to tilting +left/right.

See also: TurnEntity.

+

Example:
+
+ + + + + +
; RotateEntity Example
+ ; --------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ light=CreateLight()
+
+ cone=CreateCone( 32 )
+ PositionEntity cone,0,0,5
+
+ While Not KeyDown( 1 )
+
+ ; Change rotation values depending on the key pressed
+ If KeyDown( 208 )=True Then pitch#=pitch#-1
+ If KeyDown( 200 )=True Then pitch#=pitch#+1
+ If KeyDown( 203 )=True Then yaw#=yaw#-1
+ If KeyDown( 205 )=True Then yaw#=yaw#+1
+ If KeyDown( 45 )=True Then roll#=roll#-1
+ If KeyDown( 44 )=True Then roll#=roll#+1
+
+ ; Rotate cone using rotation values
+ RotateEntity cone,pitch#,yaw#,roll#
+
+ RenderWorld
+
+ Text 0,0,"Use cursor/Z/X keys to change cone rotation"
+ Text 0,20,"Pitch: "+pitch#
+ Text 0,40,"Yaw : "+yaw#
+ Text 0,60,"Roll : "+roll#
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/RotateMesh.htm b/_release/help/commands/3d_commands/RotateMesh.htm new file mode 100644 index 0000000..e02b568 --- /dev/null +++ b/_release/help/commands/3d_commands/RotateMesh.htm @@ -0,0 +1,40 @@ + + +Command: RotateMesh + + + + + + +

  RotateMesh mesh,pitch#,yaw#,roll#  

+ +

+Parameters:
+

+ + + + +
mesh - mesh handle
+ pitch# - pitch of mesh
+ yaw# - yaw of mesh
+ roll# - roll of mesh
+

Description:
+
+ + + + +
Rotates all vertices of a mesh by the specified rotation.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/RotateSprite.htm b/_release/help/commands/3d_commands/RotateSprite.htm new file mode 100644 index 0000000..a07cf7e --- /dev/null +++ b/_release/help/commands/3d_commands/RotateSprite.htm @@ -0,0 +1,38 @@ + + +Command: RotateSprite + + + + + + +

  RotateSprite sprite,angle#  

+ +

+Parameters:
+

+ + + + +
sprite - sprite handle
+ angle# - absolute angle of sprite rotation
+

Description:
+
+ + + + +
Rotates a sprite.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/RotateTexture.htm b/_release/help/commands/3d_commands/RotateTexture.htm new file mode 100644 index 0000000..c14e0ef --- /dev/null +++ b/_release/help/commands/3d_commands/RotateTexture.htm @@ -0,0 +1,85 @@ + + +Command: RotateTexture + + + + + + +

  RotateTexture texture,angle#  

+ +

+Parameters:
+

+ + + + +
texture - texture handle
+ angle# - absolute angle of texture rotation
+

Description:
+
+ + + + +
Rotates a texture.

This will have an immediate effect on all instances + of the texture being used.

+

Rotating a texture is useful for performing swirling texture effects, + such as for smoke etc.

+
+

Example:
+
+ + + + + +
; RotateTexture Example
+ ; ---------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ cube=CreateCube()
+ PositionEntity cube,0,0,5
+
+ ; Load texture
+ tex=LoadTexture( "media/b3dlogo.jpg" )
+
+ ; Texture cube
+ EntityTexture cube,tex
+
+ ; Set initial texture angle value
+ angle#=1
+
+ While Not KeyDown( 1 )
+
+ ; Change texture angle value depending on key pressed
+ If KeyDown( 205 )=True Then angle#=angle#-1
+ If KeyDown( 203 )=True Then angle#=angle#+1
+
+ ; Rotate texture
+ RotateTexture tex,angle#
+
+ TurnEntity cube,0.1,0.1,0.1
+
+ RenderWorld
+
+ Text 0,0,"Use left and right cursor keys to change texture angle value"
+ Text 0,20,"angle#="+angle#
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/ScaleEntity.htm b/_release/help/commands/3d_commands/ScaleEntity.htm new file mode 100644 index 0000000..b01eaae --- /dev/null +++ b/_release/help/commands/3d_commands/ScaleEntity.htm @@ -0,0 +1,90 @@ + + +Command: ScaleEntity + + + + + + +

  ScaleEntity entity,x_scale#,y_scale#,z_scalel#,[,global]  

+ +

+Parameters:
+

+ + + + +
entity - name of the entity to be scaled
+x_scale# - x size of entity
+y_scale# - y size of entity
+z_scale# - z size of entity
+global (optional) -
+

Description:
+
+ + + + +
Scales an entity so that it is of an absolute size.
+
+Scale values of 1,1,1 are the default size when creating/loading entities.
+
+Scale values of 2,2,2 will double the size of an entity.
+
+Scale values of 0,0,0 will make an entity disappear.
+
+Scale values of less than 0,0,0 will invert an entity and make it bigger.
+

Example:
+
+ + + + + +
; ScaleEntity Example
+ ; -------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ light=CreateLight()
+
+ cone=CreateCone( 32 )
+ PositionEntity cone,0,0,5
+
+ ; Set scale values so that cone is default size to begin with
+ x_scale#=1
+ y_scale#=1
+ z_scale#=1
+
+ While Not KeyDown( 1 )
+
+ ; Change scale values depending on the key pressed
+ If KeyDown( 203 )=True Then x_scale#=x_scale#-0.1
+ If KeyDown( 205 )=True Then x_scale#=x_scale#+0.1
+ If KeyDown( 208 )=True Then y_scale#=y_scale#-0.1
+ If KeyDown( 200 )=True Then y_scale#=y_scale#+0.1
+ If KeyDown( 44 )=True Then z_scale#=z_scale#-0.1
+ If KeyDown( 30 )=True Then z_scale#=z_scale#+0.1
+
+ ; Scale cone using scale values
+ ScaleEntity cone,x_scale#,y_scale#,z_scale#
+
+ RenderWorld
+
+ Text 0,0,"Use cursor/A/Z keys to scale cone"
+ Text 0,20,"X Scale: "+x_scale#
+ Text 0,40,"Y Scale: "+y_scale#
+ Text 0,60,"Z Scale: "+z_scale#
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/ScaleMesh.htm b/_release/help/commands/3d_commands/ScaleMesh.htm new file mode 100644 index 0000000..1d2eaf4 --- /dev/null +++ b/_release/help/commands/3d_commands/ScaleMesh.htm @@ -0,0 +1,40 @@ + + +Command: ScaleMesh + + + + + + +

  ScaleMesh mesh,x_scale#,y_scale#,z_scale#  

+ +

+Parameters:
+

+ + + + +
mesh - mesh handle
+ x_scale# - x scale of mesh
+ y_scale# - y scale of mesh
+ z_scale# - z scale of mesh
+

Description:
+
+ + + + +
Scales all vertices of a mesh by the specified scaling factors.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/ScaleSprite.htm b/_release/help/commands/3d_commands/ScaleSprite.htm new file mode 100644 index 0000000..da021f1 --- /dev/null +++ b/_release/help/commands/3d_commands/ScaleSprite.htm @@ -0,0 +1,39 @@ + + +Command: ScaleSprite + + + + + + +

  ScaleSprite sprite,x_scale#,y_scale#  

+ +

+Parameters:
+

+ + + + +
sprite - sprite handle
+ x_scale# - x scale of sprite
+ y scale# - y scale of sprite
+

Description:
+
+ + + + +
Scales a sprite.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/ScaleTexture.htm b/_release/help/commands/3d_commands/ScaleTexture.htm new file mode 100644 index 0000000..6dc40ef --- /dev/null +++ b/_release/help/commands/3d_commands/ScaleTexture.htm @@ -0,0 +1,88 @@ + + +Command: ScaleTexture + + + + + + +

  ScaleTexture texture,u_scale#,v_scale#  

+ +

+Parameters:
+

+ + + + +
texture - name of texture
+ u_scale# - u scale
+ v_scale# - v scale
+

Description:
+
+ + + + +
Scales a texture by an absolute amount.

This will have an immediate + effect on all instances of the texture being used.

+
+

Example:
+
+ + + + + +
; ScaleTexture Example
+ ; --------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ cube=CreateCube()
+ PositionEntity cube,0,0,5
+
+ ; Load texture
+ tex=LoadTexture( "media/b3dlogo.jpg" )
+
+ ; Texture cube
+ EntityTexture cube,tex
+
+ ; Set initial uv scale values
+ u_scale#=1
+ v_scale#=1
+
+ While Not KeyDown( 1 )
+
+ ; Change uv scale values depending on key pressed
+ If KeyDown( 208 )=True Then u_scale#=u_scale#-0.01
+ If KeyDown( 200 )=True Then u_scale#=u_scale#+0.01
+ If KeyDown( 203 )=True Then v_scale#=v_scale#-0.01
+ If KeyDown( 205 )=True Then v_scale#=v_scale#+0.01
+
+ ; Scale texture
+ ScaleTexture tex,u_scale#,v_scale#
+
+ TurnEntity cube,0.1,0.1,0.1
+
+ RenderWorld
+
+ Text 0,0,"Use cursor keys to change uv scale values"
+ Text 0,20,"u_scale#="+u_scale#
+ Text 0,40,"v_scale#="+v_scale#
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/SetAnimKey.htm b/_release/help/commands/3d_commands/SetAnimKey.htm new file mode 100644 index 0000000..18c40d8 --- /dev/null +++ b/_release/help/commands/3d_commands/SetAnimKey.htm @@ -0,0 +1,45 @@ + + +Command: SetAnimKey + + + + + + +

  SetAnimKey +entity,frame[,pos_key][,rot_key][,scale_key]  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+ frame - frame of animation to be used as anim key
+ pos_key (optional) - true to include entity position information when + setting key. Defaults to true.
+ rot_key (optional) - true to include entity rotation information when + setting key. Defaults to true.
+ scale_key (optional) - true to include entity scale information when setting + key. Defaults to true.
+

Description:
+
+ + + + +
Sets an animation key for the specified entity at the specified frame.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/ShowEntity.htm b/_release/help/commands/3d_commands/ShowEntity.htm new file mode 100644 index 0000000..0c9f26e --- /dev/null +++ b/_release/help/commands/3d_commands/ShowEntity.htm @@ -0,0 +1,44 @@ + + +Command: ShowEntity + + + + + + +

  ShowEntity entity  

+ +

+Parameters:
+

+ + + + +
entity - entity handle
+

Description:
+
+ + + + +
Shows an entity. Very much the opposite of + HideEntity.

Once an entity has been hidden using + HideEntity, use show entity to make it visible + and involved in collisions again.

+

Entities are shown by default after creating/loading them, so you should + only need to use ShowEntity after using HideEntity.

+ ShowEntity affects the specified entity and all of its child + entities, if any exist.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/SpriteViewMode.htm b/_release/help/commands/3d_commands/SpriteViewMode.htm new file mode 100644 index 0000000..1d41957 --- /dev/null +++ b/_release/help/commands/3d_commands/SpriteViewMode.htm @@ -0,0 +1,42 @@ + + +Command: SpriteViewMode + + + + + + +

  SpriteViewMode sprite,view_mode  

+ +

+Parameters:
+

+ + + + +
sprite - sprite handle
+
+ view_mode - view_mode of sprite
+ 1: fixed (sprite always faces camera)
+ 2: free (sprite is independent of camera)
+ 3: upright (sprite always faces camera, but tilts with camera)
+

Description:
+
+ + + + +
Sets the viewmode of a sprite.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/TFormNormal.htm b/_release/help/commands/3d_commands/TFormNormal.htm new file mode 100644 index 0000000..3d2159e --- /dev/null +++ b/_release/help/commands/3d_commands/TFormNormal.htm @@ -0,0 +1,37 @@ + + +Command: TFormNormal + + + + + + +

  TFormNormal  

+ +

+Parameters:
+

+ + + + +
<param description>
+

Description:
+
+ + + + +
<description>
+

Example:
+
+ + + + + +
<example>
+

Index

+ + diff --git a/_release/help/commands/3d_commands/TFormPoint.htm b/_release/help/commands/3d_commands/TFormPoint.htm new file mode 100644 index 0000000..a592bb0 --- /dev/null +++ b/_release/help/commands/3d_commands/TFormPoint.htm @@ -0,0 +1,97 @@ + + +Command: TFormPoint + + + + + + +

  TFormPoint  

+ +

+Parameters:
+

+ + + + +
x# - x co-ordinate on which to perform transformation
+ y# - y co-ordinate on which to perform transformaion
+ z# - z co-ordinate on which to perform transformation
+ src_entity - source entity space from which to transform co-ordinates
+ dest_entity - destination entity space to transform co-ordinates
+
+

Description:
+
+ + + + +
TFormPoint takes the co-ordinates of the source entity and 'transforms' them into co-ordinates relative to the co-ordinates of the destination entity (taking x, y and z as offsets, usually all set to 0 to use the center of the given entities). The resulting co-ordinates can be retrieved by the use of the TFormedX, TFormedY and TFormedZ functions. Passing 0 as either source or destination entity means that the transformation is performed relative to the global space (ie. the 3D world). +

+In English, this means that if you supply two entities, you can find the individual x, y and z offset distances of the source entity from the destination entity (providing you pass 0, 0, 0 as the x, y and z parameters). Changing the x, y and z parameters to anything other than zero will perform the transformation with this offset taken into account. For example, you can specify a point 5 units to the left of the given entities (x = 5), and the result will be offset by that x value. +

+

Example:
+
+ + + + + +
+ +Graphics3D 640, 480
+
+cam = CreateCamera ()
+MoveEntity cam, 5, 0, -5
+
+box = CreateCube ()
+MoveEntity box, 5, 0, 0
+
+Repeat
+
+ If KeyDown (203) TurnEntity cam, 0, 0.5, 0
+ If KeyDown (205) TurnEntity cam, 0, -0.5, 0
+ If KeyDown (200) MoveEntity cam, 0, 0, 0.1
+ If KeyDown (208) MoveEntity cam, 0, 0, -0.1
+
+ bx# = EntityX (box)
+ by# = EntityY (box)
+ bz# = EntityZ (box)
+
+ cx# = EntityX (cam, 1)
+ cy# = EntityY (cam, 1)
+ cz# = EntityZ (cam, 1)
+
+ TFormPoint 0, 0, 0, cam, box
+ xdist# = TFormedX ()
+ ydist# = TFormedY ()
+ zdist# = TFormedZ ()
+
+ UpdateWorld
+ RenderWorld
+
+ Text 0, 20, "Box's global position"
+ Text 20, 40, "x: " + bx
+ Text 20, 60, "y: " + by
+ Text 20, 80, "z: " + bz
+
+ Text 0, 120, "Camera's global position"
+ Text 20, 140, "x: " + cx
+ Text 20, 160, "y: " + cy
+ Text 20, 180, "z: " + cz
+
+ Text 0, 220, "Camera position relative to box"
+ Text 20, 240, "x: " + xdist
+ Text 20, 260, "y: " + ydist
+ Text 20, 280, "z: " + zdist
+
+ Flip
+
+Until KeyHit (1)
+
+End
+
+ + diff --git a/_release/help/commands/3d_commands/TFormVector.htm b/_release/help/commands/3d_commands/TFormVector.htm new file mode 100644 index 0000000..eb88067 --- /dev/null +++ b/_release/help/commands/3d_commands/TFormVector.htm @@ -0,0 +1,93 @@ + + +Command: TFormVector + + + + + + +

  TFormVector  

+ +

+Parameters:
+

+ + + + +
x# - x axis rotation on which to perform transformation
y# - y axis rotation on +which to perform transformaion
z# - z axis rotation on which to perform +transformation
src_entity - source entity space from which to transform +co-ordinates
dest_entity - destination entity space to transform co-ordinates +
+

Description:
+
+ + + + +
TFormVector takes the source and destination entities (taking x, y and z as offset angles, usually all set to the source entity's orientation, ie. EntityPitch (src), EntityYaw (src) and EntityRoll (src)), and performs a transformation to determine the difference in orientation between source and destination entities. +

+The resulting offset angles for each axis can be retrieved by the use of the TFormedX, TFormedY and TFormedZ functions. +

+

Example:
+
+ + + + + +
Graphics3D 640, 480
+
+cam = CreateCamera ()
+MoveEntity cam, 5, 0, -5
+
+box = CreateCube ()
+MoveEntity box, 5, 0, 0
+ +Repeat
+
+ If KeyDown (203) TurnEntity cam, 0, 0.5, 0
+ If KeyDown (205) TurnEntity cam, 0, -0.5, 0
+ If KeyDown (200) MoveEntity cam, 0, 0, 0.1
+ If KeyDown (208) MoveEntity cam, 0, 0, -0.1
+
+ bx# = EntityX (box)
+ by# = EntityY (box)
+ bz# = EntityZ (box)
+
+ cx# = EntityX (cam, 1)
+ cy# = EntityY (cam, 1)
+ cz# = EntityZ (cam, 1)
+
+ TFormVector EntityPitch (cam), EntityYaw (cam), EntityRoll (cam), cam, box
+ xang# = TFormedX ()
+ yang# = TFormedY ()
+ zang# = TFormedZ ()
+
+ UpdateWorld
+ RenderWorld
+
+ Text 0, 20, "Box's global position"
+ Text 20, 40, "x: " + bx
+ Text 20, 60, "y: " + by
+ Text 20, 80, "z: " + bz
+
+ Text 0, 120, "Camera's global position"
+ Text 20, 140, "x: " + cx
+ Text 20, 160, "y: " + cy
+ Text 20, 180, "z: " + cz
+
+ Text 0, 220, "Camera position relative to box"
+ Text 20, 240, "x: " + xang
+ Text 20, 260, "y: " + yang
+ Text 20, 280, "z: " + zang
+
+ Flip
+
+Until KeyHit (1)
+
+End
+ + diff --git a/_release/help/commands/3d_commands/TFormedX.htm b/_release/help/commands/3d_commands/TFormedX.htm new file mode 100644 index 0000000..bc04870 --- /dev/null +++ b/_release/help/commands/3d_commands/TFormedX.htm @@ -0,0 +1,51 @@ + + +Command: TFormedX + + + + + + +

  TFormedX  

+ +

+Parameters:
+

+ + + + +
n/a
+

Description:
+
+ + + + +
Returns the resulting x offset of the last transformation function called: TFormPoint, TFormVector and TFormNormal.
+

Example (using TFormPoint):
+
+ + + + + +
Graphics3D 640, 480

cam = CreateCamera ()
MoveEntity cam, 5, 0, +-5

box = CreateCube ()
MoveEntity box, 5, 0, 0

Repeat

If +KeyDown (203) TurnEntity cam, 0, 0.5, 0
If KeyDown (205) TurnEntity cam, 0, +-0.5, 0
If KeyDown (200) MoveEntity cam, 0, 0, 0.1
If KeyDown (208) +MoveEntity cam, 0, 0, -0.1

bx# = EntityX (box)
by# = EntityY +(box)
bz# = EntityZ (box)

cx# = EntityX (cam, 1)
cy# = EntityY +(cam, 1)
cz# = EntityZ (cam, 1)

TFormPoint 0, 0, 0, cam, box
xdist# += TFormedX ()
ydist# = TFormedY ()
zdist# = TFormedZ +()

UpdateWorld
RenderWorld

Text 0, 20, "Box's global +position"
Text 20, 40, "x: " + bx
Text 20, 60, "y: " + by
Text 20, 80, +"z: " + bz

Text 0, 120, "Camera's global position"
Text 20, 140, "x: " ++ cx
Text 20, 160, "y: " + cy
Text 20, 180, "z: " + cz

Text 0, 220, +"Camera position relative to box"
Text 20, 240, "x: " + xdist
Text 20, +260, "y: " + ydist
Text 20, 280, "z: " + zdist

Flip

Until +KeyHit (1)

End +
+ + diff --git a/_release/help/commands/3d_commands/TFormedY.htm b/_release/help/commands/3d_commands/TFormedY.htm new file mode 100644 index 0000000..b761d25 --- /dev/null +++ b/_release/help/commands/3d_commands/TFormedY.htm @@ -0,0 +1,51 @@ + + +Command: TFormedY + + + + + + +

  TFormedY  

+ +

+Parameters:
+

+ + + + +
n/a
+

Description:
+
+ + + + +
Returns the resulting y offset of the last transformation function called: TFormPoint, TFormVector and TFormNormal.
+

Example (using TFormPoint):
+
+ + + + + +
Graphics3D 640, 480

cam = CreateCamera ()
MoveEntity cam, 5, 0, +-5

box = CreateCube ()
MoveEntity box, 5, 0, 0

Repeat

If +KeyDown (203) TurnEntity cam, 0, 0.5, 0
If KeyDown (205) TurnEntity cam, 0, +-0.5, 0
If KeyDown (200) MoveEntity cam, 0, 0, 0.1
If KeyDown (208) +MoveEntity cam, 0, 0, -0.1

bx# = EntityX (box)
by# = EntityY +(box)
bz# = EntityZ (box)

cx# = EntityX (cam, 1)
cy# = EntityY +(cam, 1)
cz# = EntityZ (cam, 1)

TFormPoint 0, 0, 0, cam, box
xdist# += TFormedX ()
ydist# = TFormedY ()
zdist# = TFormedZ +()

UpdateWorld
RenderWorld

Text 0, 20, "Box's global +position"
Text 20, 40, "x: " + bx
Text 20, 60, "y: " + by
Text 20, 80, +"z: " + bz

Text 0, 120, "Camera's global position"
Text 20, 140, "x: " ++ cx
Text 20, 160, "y: " + cy
Text 20, 180, "z: " + cz

Text 0, 220, +"Camera position relative to box"
Text 20, 240, "x: " + xdist
Text 20, +260, "y: " + ydist
Text 20, 280, "z: " + zdist

Flip

Until +KeyHit (1)

End +
+ + diff --git a/_release/help/commands/3d_commands/TFormedZ.htm b/_release/help/commands/3d_commands/TFormedZ.htm new file mode 100644 index 0000000..df67871 --- /dev/null +++ b/_release/help/commands/3d_commands/TFormedZ.htm @@ -0,0 +1,51 @@ + + +Command: TFormedZ + + + + + + +

  TFormedZ  

+ +

+Parameters:
+

+ + + + +
n/a
+

Description:
+
+ + + + +
Returns the resulting z offset of the last transformation function called: TFormPoint, TFormVector and TFormNormal.
+

Example (using TFormPoint):
+
+ + + + + +
Graphics3D 640, 480

cam = CreateCamera ()
MoveEntity cam, 5, 0, +-5

box = CreateCube ()
MoveEntity box, 5, 0, 0

Repeat

If +KeyDown (203) TurnEntity cam, 0, 0.5, 0
If KeyDown (205) TurnEntity cam, 0, +-0.5, 0
If KeyDown (200) MoveEntity cam, 0, 0, 0.1
If KeyDown (208) +MoveEntity cam, 0, 0, -0.1

bx# = EntityX (box)
by# = EntityY +(box)
bz# = EntityZ (box)

cx# = EntityX (cam, 1)
cy# = EntityY +(cam, 1)
cz# = EntityZ (cam, 1)

TFormPoint 0, 0, 0, cam, box
xdist# += TFormedX ()
ydist# = TFormedY ()
zdist# = TFormedZ +()

UpdateWorld
RenderWorld

Text 0, 20, "Box's global +position"
Text 20, 40, "x: " + bx
Text 20, 60, "y: " + by
Text 20, 80, +"z: " + bz

Text 0, 120, "Camera's global position"
Text 20, 140, "x: " ++ cx
Text 20, 160, "y: " + cy
Text 20, 180, "z: " + cz

Text 0, 220, +"Camera position relative to box"
Text 20, 240, "x: " + xdist
Text 20, +260, "y: " + ydist
Text 20, 280, "z: " + zdist

Flip

Until +KeyHit (1)

End +
+ + diff --git a/_release/help/commands/3d_commands/TerrainDetail.htm b/_release/help/commands/3d_commands/TerrainDetail.htm new file mode 100644 index 0000000..c99bc1b --- /dev/null +++ b/_release/help/commands/3d_commands/TerrainDetail.htm @@ -0,0 +1,119 @@ + + +Command: TerrainDetail + + + + + + +

  TerrainDetail +terrain,detail_level[,vertex_morph]  

+ +

+Parameters:
+

+ + + + +
terrain - terrain handle
+ detail_level - detail level of terrain
+ vertex_morph (optional) - true to enable vertex morphing of terrain. + Defaults to false.
+

Description:
+
+ + + + +
Sets the detail level for a terrain. This is the number of triangles + used to represent the terrain. A typical value is 2000.

The optional + vertex_morph parameter specifies whether to enable vertex morphing. It is + recommended you set this to true, as it will reduce the visibility of LOD + 'pop-in'.

+
+

Example:
+
+ + + + + +
; TerrainDetail Example
+ ; ---------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ PositionEntity camera,1,1,1
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ ; Load terrain
+ terrain=LoadTerrain( "media/height_map.bmp" )
+
+ ; Scale terrain
+ ScaleEntity terrain,1,50,1
+
+ ; Texture terrain
+ grass_tex=LoadTexture( "media/mossyground.bmp" )
+ EntityTexture terrain,grass_tex,0,1
+
+ ; Set terrain detail value
+ terra_detail=4000
+
+ ; Set vertex morph value
+ vertex_morph=True
+
+ While Not KeyDown( 1 )
+
+ ; Change terrain detail value depending on key pressed
+ If KeyDown(26) Then terra_detail=terra_detail-10
+ If KeyDown(27) Then terra_detail=terra_detail+10
+
+ ; Toggle vertex morphing on/off when spacebar is pressed
+ If KeyHit(57)=True Then vertex_morph=1-vertex_morph
+
+ ; Set terrain detail, vertex morphing
+ TerrainDetail terrain,terra_detail,vertex_morph
+
+ If KeyDown( 203 )=True Then x#=x#-0.1
+ If KeyDown( 205 )=True Then x#=x#+0.1
+ If KeyDown( 208 )=True Then y#=y#-0.1
+ If KeyDown( 200 )=True Then y#=y#+0.1
+ If KeyDown( 44 )=True Then z#=z#-0.1
+ If KeyDown( 30 )=True Then z#=z#+0.1
+
+ If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0
+ If KeyDown( 203 )=True Then TurnEntity camera,0,1,0
+ If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.1
+ If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.1
+
+ x#=EntityX(camera)
+ y#=EntityY(camera)
+ z#=EntityZ(camera)
+
+ terra_y#=TerrainY(terrain,x#,y#,z#)+5
+
+ PositionEntity camera,x#,terra_y#,z#
+
+ RenderWorld
+
+ Text 0,0,"Use cursor keys to move about the terrain"
+ Text 0,20,"Use [ and ] keys to change terrain detail level"
+ Text 0,40,"Press spacebar to enable/disable vertex morphing"
+ Text 0,60,"Terrain Detail: "+terra_detail
+ If vertex_morph=True Then Text 0,80,"Vertex Morphing: True" Else Text + 0,80,"Vertex Morphing: False"
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/TerrainHeight.htm b/_release/help/commands/3d_commands/TerrainHeight.htm new file mode 100644 index 0000000..f71a00e --- /dev/null +++ b/_release/help/commands/3d_commands/TerrainHeight.htm @@ -0,0 +1,41 @@ + + +Command: TerrainHeight + + + + + + +

  TerrainHeight# ( terrain,grid_x,grid_z )  

+ +

+Parameters:
+

+ + + + +
terrain - terrain handle
+ grid_x - grid x coordinate of terrain
+ grid_z - grid z coordinate of terrain
+

Description:
+
+ + + + +
Returns the height of the terrain at terrain grid coordinates x,z. The + value returned is in the range 0 to 1.

See also: + TerrainY.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/TerrainShading.htm b/_release/help/commands/3d_commands/TerrainShading.htm new file mode 100644 index 0000000..d78f21e --- /dev/null +++ b/_release/help/commands/3d_commands/TerrainShading.htm @@ -0,0 +1,106 @@ + + +Command: TerrainShading + + + + + + +

  TerrainShading terrain,enable  

+ +

+Parameters:
+

+ + + + +
terrain - terrain handle
+ enable - true to enable terrain shading, false to to disable it.
+

Description:
+
+ + + + +
Enables or disables terrain shading.

Shaded terrains are a little + slower than non-shaded terrains, and in some instances can increase the + visibility of LOD 'pop-in'. However, the option is there to have shaded + terrains if you wish to do so.

+

Terrain shading is disabled by default.

+

Example:
+
+ + + + + +
; TerrainShading Example
+ ; ----------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ PositionEntity camera,1,1,1
+
+ light=CreateLight()
+ RotateEntity light,45,0,0
+
+ ; Load terrain
+ terrain=LoadTerrain( "media/height_map.bmp" )
+
+ ; Set terrain detail, enable vertex morphing
+ TerrainDetail terrain,4000,True
+
+ ; Scale terrain
+ ScaleEntity terrain,1,50,1
+
+ ; Texture terrain
+ grass_tex=LoadTexture( "media/mossyground.bmp" )
+ EntityTexture terrain,grass_tex,0,1
+
+ While Not KeyDown( 1 )
+
+ ; Toggle terrain shading value between 0 and 1 when spacebar is pressed
+ If KeyHit(57)=True Then terra_shade=1-terra_shade
+
+ ; Enable/disable terrain shading
+ TerrainShading terrain,terra_shade
+
+ If KeyDown( 203 )=True Then x#=x#-0.1
+ If KeyDown( 205 )=True Then x#=x#+0.1
+ If KeyDown( 208 )=True Then y#=y#-0.1
+ If KeyDown( 200 )=True Then y#=y#+0.1
+ If KeyDown( 44 )=True Then z#=z#-0.1
+ If KeyDown( 30 )=True Then z#=z#+0.1
+
+ If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0
+ If KeyDown( 203 )=True Then TurnEntity camera,0,1,0
+ If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.1
+ If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.1
+
+ x#=EntityX(camera)
+ y#=EntityY(camera)
+ z#=EntityZ(camera)
+
+ terra_y#=TerrainY(terrain,x#,y#,z#)+5
+
+ PositionEntity camera,x#,terra_y#,z#
+
+ RenderWorld
+
+ Text 0,0,"Use cursor keys to move about the terrain"
+ Text 0,20,"Press spacebar to toggle between TerrainShading True/False"
+ If terra_shade=True Then Text 0,40,"TerrainShading: True" Else Text + 0,40,"TerrainShading: False"
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/TerrainSize.htm b/_release/help/commands/3d_commands/TerrainSize.htm new file mode 100644 index 0000000..f18daa6 --- /dev/null +++ b/_release/help/commands/3d_commands/TerrainSize.htm @@ -0,0 +1,95 @@ + + +Command: TerrainSize + + + + + + +

  TerrainSize ( terrain )  

+ +

+Parameters:
+

+ + + + +
terrain - terrain handle
+

Description:
+
+ + + + +
Returns the grid size used to create a terrain.
+

Example:
+
+ + + + + +
; TerrainSize Example
+ ; -------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ PositionEntity camera,1,1,1
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ ; Load terrain
+ terrain=LoadTerrain( "media/height_map.bmp" )
+
+ ; Set terrain detail, enable vertex morphing
+ TerrainDetail terrain,4000,True
+
+ ; Scale terrain
+ ScaleEntity terrain,1,50,1
+
+ ; Texture terrain
+ grass_tex=LoadTexture( "media/mossyground.bmp" )
+ EntityTexture terrain,grass_tex,0,1
+
+ While Not KeyDown( 1 )
+
+ If KeyDown( 203 )=True Then x#=x#-0.1
+ If KeyDown( 205 )=True Then x#=x#+0.1
+ If KeyDown( 208 )=True Then y#=y#-0.1
+ If KeyDown( 200 )=True Then y#=y#+0.1
+ If KeyDown( 44 )=True Then z#=z#-0.1
+ If KeyDown( 30 )=True Then z#=z#+0.1
+
+ If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0
+ If KeyDown( 203 )=True Then TurnEntity camera,0,1,0
+ If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.1
+ If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.1
+
+ x#=EntityX(camera)
+ y#=EntityY(camera)
+ z#=EntityZ(camera)
+
+ terra_y#=TerrainY(terrain,x#,y#,z#)+5
+
+ PositionEntity camera,x#,terra_y#,z#
+
+ RenderWorld
+
+ Text 0,0,"Use cursor keys to move about the terrain"
+
+ ; Output terrain size to screen
+ Text 0,20,"Terrain Size: "+TerrainSize(terrain)
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/TerrainX.htm b/_release/help/commands/3d_commands/TerrainX.htm new file mode 100644 index 0000000..eca444a --- /dev/null +++ b/_release/help/commands/3d_commands/TerrainX.htm @@ -0,0 +1,100 @@ + + +Command: TerrainX + + + + + + +

  TerrainX# (terrain,x#,y#,z# )  

+ +

+Parameters:
+

+ + + + +
terrain - terrain handle
+ x# - world x coordinate
+ y# - world y coordinate
+ z# - world z coordinate
+

Description:
+
+ + + + +
Returns the interpolated x coordinate on a terrain.

See also: + TerrainY, + TerrainZ.

+

Example:
+
+ + + + + +
; TerrainX Example
+ ; ----------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ PositionEntity camera,1,1,1
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ ; Load terrain
+ terrain=LoadTerrain( "media/height_map.bmp" )
+
+ ; Scale terrain
+ ScaleEntity terrain,1,50,1
+
+ ; Texture terrain
+ grass_tex=LoadTexture( "media/mossyground.bmp" )
+ EntityTexture terrain,grass_tex,0,1
+
+ ; Set terrain detail, enable vertex morphing
+ TerrainDetail terrain,4000,True
+
+ While Not KeyDown( 1 )
+
+ If KeyDown( 203 )=True Then x#=x#-0.1
+ If KeyDown( 205 )=True Then x#=x#+0.1
+ If KeyDown( 208 )=True Then y#=y#-0.1
+ If KeyDown( 200 )=True Then y#=y#+0.1
+ If KeyDown( 44 )=True Then z#=z#-0.1
+ If KeyDown( 30 )=True Then z#=z#+0.1
+
+ If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0
+ If KeyDown( 203 )=True Then TurnEntity camera,0,1,0
+ If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.1
+ If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.1
+
+ x#=EntityX(camera)
+ y#=EntityY(camera)
+ z#=EntityZ(camera)
+
+ terra_y#=TerrainY(terrain,x#,y#,z#)+5
+
+ PositionEntity camera,x#,terra_y#,z#
+
+ RenderWorld
+
+ Text 0,0,"Use cursor keys to move about the terrain"
+
+ ; Output TerrainX value to screen
+ Text 0,20,"TerrainX: "+TerrainX(terrain,x#,terra_y#,z#)
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/TerrainY.htm b/_release/help/commands/3d_commands/TerrainY.htm new file mode 100644 index 0000000..2da3b8d --- /dev/null +++ b/_release/help/commands/3d_commands/TerrainY.htm @@ -0,0 +1,101 @@ + + +Command: TerrainY + + + + + + +

  TerrainY# (terrain,x#,y#,z# )  

+ +

+Parameters:
+

+ + + + +
terrain - terrain handle
+ x# - world x coordinate
+ y# - world y coordinate
+ z# - world z coordinate
+

Description:
+
+ + + + +
Returns the interpolated y coordinate on a terrain.

Gets the ground's + height, basically.

See also: TerrainX, + TerrainZ, + TerrainHeight.

+

Example:
+
+ + + + + +
; TerrainY Example
+ ; ----------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ PositionEntity camera,1,1,1
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ ; Load terrain
+ terrain=LoadTerrain( "media/height_map.bmp" )
+
+ ; Scale terrain
+ ScaleEntity terrain,1,50,1
+
+ ; Texture terrain
+ grass_tex=LoadTexture( "media/mossyground.bmp" )
+ EntityTexture terrain,grass_tex,0,1
+
+ ; Set terrain detail, enable vertex morphing
+ TerrainDetail terrain,4000,True
+
+ While Not KeyDown( 1 )
+
+ If KeyDown( 203 )=True Then x#=x#-0.1
+ If KeyDown( 205 )=True Then x#=x#+0.1
+ If KeyDown( 208 )=True Then y#=y#-0.1
+ If KeyDown( 200 )=True Then y#=y#+0.1
+ If KeyDown( 44 )=True Then z#=z#-0.1
+ If KeyDown( 30 )=True Then z#=z#+0.1
+
+ If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0
+ If KeyDown( 203 )=True Then TurnEntity camera,0,1,0
+ If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.1
+ If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.1
+
+ x#=EntityX(camera)
+ y#=EntityY(camera)
+ z#=EntityZ(camera)
+
+ terra_y#=TerrainY(terrain,x#,y#,z#)
+
+ PositionEntity camera,x#,terra_y#+5,z#
+
+ RenderWorld
+
+ Text 0,0,"Use cursor keys to move about the terrain"
+
+ ; Output TerrainY value to screen
+ Text 0,20,"TerrainY: "+terra_y#
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/TerrainZ.htm b/_release/help/commands/3d_commands/TerrainZ.htm new file mode 100644 index 0000000..81ae38a --- /dev/null +++ b/_release/help/commands/3d_commands/TerrainZ.htm @@ -0,0 +1,99 @@ + + +Command: TerrainZ + + + + + + +

  TerrainZ# (terrain,x#,y#,z# )  

+ +

+Parameters:
+

+ + + + +
terrain - terrain handle
+ x# - world x coordinate
+ y# - world y coordinate
+ z# - world z coordinate
+

Description:
+
+ + + + +
Returns the interpolated z coordinate on a terrain.

See also: TerrainX, + TerrainY.

+

Example:
+
+ + + + + +
; TerrainZ Example
+ ; ----------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ PositionEntity camera,1,1,1
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ ; Load terrain
+ terrain=LoadTerrain( "media/height_map.bmp" )
+
+ ; Scale terrain
+ ScaleEntity terrain,1,50,1
+
+ ; Texture terrain
+ grass_tex=LoadTexture( "media/mossyground.bmp" )
+ EntityTexture terrain,grass_tex,0,1
+
+ ; Set terrain detail, enable vertex morphing
+ TerrainDetail terrain,4000,True
+
+ While Not KeyDown( 1 )
+
+ If KeyDown( 203 )=True Then x#=x#-0.1
+ If KeyDown( 205 )=True Then x#=x#+0.1
+ If KeyDown( 208 )=True Then y#=y#-0.1
+ If KeyDown( 200 )=True Then y#=y#+0.1
+ If KeyDown( 44 )=True Then z#=z#-0.1
+ If KeyDown( 30 )=True Then z#=z#+0.1
+
+ If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0
+ If KeyDown( 203 )=True Then TurnEntity camera,0,1,0
+ If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.1
+ If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.1
+
+ x#=EntityX(camera)
+ y#=EntityY(camera)
+ z#=EntityZ(camera)
+
+ terra_y#=TerrainY(terrain,x#,y#,z#)+5
+
+ PositionEntity camera,x#,terra_y#,z#
+
+ RenderWorld
+
+ Text 0,0,"Use cursor keys to move about the terrain"
+
+ ; Output TerrainZ value to screen
+ Text 0,20,"TerrainZ: "+TerrainZ(terrain,x#,terra_y#,z#)
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/TextureBlend.htm b/_release/help/commands/3d_commands/TextureBlend.htm new file mode 100644 index 0000000..8f96be2 --- /dev/null +++ b/_release/help/commands/3d_commands/TextureBlend.htm @@ -0,0 +1,44 @@ + + +Command: TextureBlend + + + + + + +

  TextureBlend texture,blend  

+ +

+Parameters:
+

+ + + + +
texture - name of texture
+
+ blend - blend mode of texture
+ 0: disable texture
+ 1: alpha
+ 2: multiply (default)
+ 3: add
+

Description:
+
+ + + + +
Set the blending mode for a texture.

This is used with multitexturing + to control how the texture is combined with other textures.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/TextureBuffer.htm b/_release/help/commands/3d_commands/TextureBuffer.htm new file mode 100644 index 0000000..2af1e5c --- /dev/null +++ b/_release/help/commands/3d_commands/TextureBuffer.htm @@ -0,0 +1,108 @@ + + +Command: TextureBuffer + + + + + + +

  TextureBuffer ( texture[,frame] )  

+ +

+Parameters:
+

+ + + + +
texture - texture handle
+ frame (optional) - texture frame
+

Description:
+
+ + + + +
Returns the handle of a texture's drawing buffer.

This can be used + with SetBuffer to perform 2D drawing operations to + the texture, + although it's usually faster to draw to an image, and then copy the + image buffer across to the texture buffer using + CopyRect.

+

You cannot render 3D to a texture buffer; 3D can only be rendered to the + back buffer. To display 3D graphics on a texture, use + CopyRect to copy the contents of + the back buffer to a texture buffer.

+
+

Example:
+
+ + + + + +
; TextureBuffer Example
+ ; ---------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ cube=CreateCube()
+ PositionEntity cube,0,0,5
+
+ ; Create texture of size 256x256
+ tex=CreateTexture(256,256)
+
+ ; Set buffer - texture buffer
+ SetBuffer TextureBuffer(tex)
+
+ ; Clear texture buffer with background white color
+ ClsColor 255,255,255
+ Cls
+
+ ; Draw text on texture
+ font=LoadFont("arial",24)
+ SetFont font
+ Color 0,0,0
+ Text 0,0,"This texture"
+ Text 0,40,"was created using" : Color 0,0,255
+ Text 0,80,"CreateTexture()" : Color 0,0,0
+ Text 0,120,"and drawn to using" : Color 0,0,255
+ Text 0,160,"SetBuffer TextureBuffer()"
+
+ ; Texture cube with texture
+ EntityTexture cube,tex
+
+ ; Set buffer - backbuffer
+ SetBuffer BackBuffer()
+
+ While Not KeyDown( 1 )
+
+ pitch#=0
+ yaw#=0
+ roll#=0
+
+ If KeyDown( 208 )=True Then pitch#=-1
+ If KeyDown( 200 )=True Then pitch#=1
+ If KeyDown( 203 )=True Then yaw#=-1
+ If KeyDown( 205 )=True Then yaw#=1
+ If KeyDown( 45 )=True Then roll#=-1
+ If KeyDown( 44 )=True Then roll#=1
+
+ TurnEntity cube,pitch#,yaw#,roll#
+
+ RenderWorld
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/TextureCoords.htm b/_release/help/commands/3d_commands/TextureCoords.htm new file mode 100644 index 0000000..19cfaab --- /dev/null +++ b/_release/help/commands/3d_commands/TextureCoords.htm @@ -0,0 +1,41 @@ + + +Command: TextureCoords + + + + + + +

  TextureCoords texture,coords  

+ +

+Parameters:
+

+ + + + +
texture - name of texture
+ coords -
+ 0: UV coordinates are from first UV set in vertices (default)
+ 1: UV coordinates are from second UV set in vertices
+

Description:
+
+ + + + +
Sets the texture coordinate mode for a texture.

This determines where + the UV values used to look up a texture come from.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/TextureFilter.htm b/_release/help/commands/3d_commands/TextureFilter.htm new file mode 100644 index 0000000..297f4ef --- /dev/null +++ b/_release/help/commands/3d_commands/TextureFilter.htm @@ -0,0 +1,45 @@ + + +Command: TextureFilter + + + + + + +

  TextureFilter match_text$,flags  

+ +

+Parameters:
+

+ + + + +
match_text$ - text that, if found in texture filename, will activate + certain filters
+ flags - filter flags
+

Description:
+
+ + + + +
Adds a texture filter. Any textures loaded that contain the text + specified by match_text$ will have the provided flags added.

This is + mostly of use when loading a mesh.

+

By default, the following texture filter is used:

+

TextureFilter "",1+8

+

This means that all loaded textures will have color and be mipmapped by + default.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/TextureHeight.htm b/_release/help/commands/3d_commands/TextureHeight.htm new file mode 100644 index 0000000..3a7482b --- /dev/null +++ b/_release/help/commands/3d_commands/TextureHeight.htm @@ -0,0 +1,37 @@ + + +Command: TextureHeight + + + + + + +

  TextureHeight ( texture )  

+ +

+Parameters:
+

+ + + + +
texture - texture handle
+

Description:
+
+ + + + +
Returns the height of a texture.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/TextureWidth.htm b/_release/help/commands/3d_commands/TextureWidth.htm new file mode 100644 index 0000000..0552a58 --- /dev/null +++ b/_release/help/commands/3d_commands/TextureWidth.htm @@ -0,0 +1,37 @@ + + +Command: TextureWidth + + + + + + +

  TextureWidth (texture )  

+ +

+Parameters:
+

+ + + + +
texture - texture handle
+

Description:
+
+ + + + +
Returns the width of a texture.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/TranslateEntity.htm b/_release/help/commands/3d_commands/TranslateEntity.htm new file mode 100644 index 0000000..c4a72d6 --- /dev/null +++ b/_release/help/commands/3d_commands/TranslateEntity.htm @@ -0,0 +1,103 @@ + + +Command: TranslateEntity + + + + + + +

  TranslateEntity entity,x#,y#,z#,[,global]  

+ +

+Parameters:
+

+ + + + +
entity - name of entity to be translated
+x# - x amount that entity will be translated by
+y# - y amount that entity will be translated by
+z# - z amount that entity will be translated by
+global (optional) -
+

Description:
+
+ + + + +
Translates an entity relative to its current position and not its + +orientation.
+
+What this means is that an entity will move in a certain direction despite where +it may be facing. Imagine that you have a game character that +you want to make jump in the air at the same time as doing a triple somersault. +Translating the character by a positive y amount will mean the character will +always travel directly up in their air, regardless of where it may be facing due +to the somersault action.

See also: MoveEntity, + PositionEntity.

+

Example:
+
+ + + + + +
; TranslateEntity Example
+ ; -----------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ light=CreateLight()
+
+ cone=CreateCone( 32 )
+
+ ; Rotate cone by random amount to demonstrate that TranslateEntity is + independent of entity orientation
+ RotateEntity cone,Rnd( 0,360 ),Rnd( 0,360 ),Rnd( 0,360 )
+
+ ; Translate cone in front of camera, so we can see it to begin with
+ TranslateEntity cone,0,0,10
+
+ While Not KeyDown( 1 )
+
+ ; Reset translation values - otherwise, the cone will not stop!
+ x#=0
+ y#=0
+ z#=0
+
+ ; Change translation values depending on the key pressed
+ If KeyDown( 203 )=True Then x#=-0.1
+ If KeyDown( 205 )=True Then x#=0.1
+ If KeyDown( 208 )=True Then y#=-0.1
+ If KeyDown( 200 )=True Then y#=0.1
+ If KeyDown( 44 )=True Then z#=-0.1
+ If KeyDown( 30 )=True Then z#=0.1
+
+ ; Translate sphere using translation values
+ TranslateEntity cone,x#,y#,z#
+
+ ; If spacebar pressed then rotate cone by random amount
+ If KeyHit( 57 )=True Then RotateEntity cone,Rnd( 0,360 ),Rnd( 0,360 ),Rnd( + 0,360 )
+
+ RenderWorld
+
+ Text 0,0,"Use cursor/A/Z keys to translate cone, spacebar to rotate cone by + random amount"
+ Text 0,20,"X Translation: "+x#
+ Text 0,40,"Y Translation: "+y#
+ Text 0,60,"Z Translation: "+z#
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/TriangleVertex.htm b/_release/help/commands/3d_commands/TriangleVertex.htm new file mode 100644 index 0000000..7e0a41b --- /dev/null +++ b/_release/help/commands/3d_commands/TriangleVertex.htm @@ -0,0 +1,40 @@ + + +Command: TriangleVertex + + + + + + +

  TriangleVertex ( +surface,triangle_index,corner )  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ triangle_index - triangle index
+ corner - corner of triangle. Should be 0, 1 or 2.
+

Description:
+
+ + + + +
Returns the vertex of a triangle corner.
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/TurnEntity.htm b/_release/help/commands/3d_commands/TurnEntity.htm new file mode 100644 index 0000000..7bb92e5 --- /dev/null +++ b/_release/help/commands/3d_commands/TurnEntity.htm @@ -0,0 +1,91 @@ + + +Command: TurnEntity + + + + + + +

  TurnEntity entity,pitch#,yaw#,roll#,[,global]  

+ +

+Parameters:
+

+ + + + +
entity - name of entity to be rotated
+pitch# - angle in degrees that entity will be pitched
+yaw# - angle in degrees that entity will be yawed
+roll# - angle in degrees that entity will be rolled
+global (optional) -
+

Description:
+
+ + + + +
Turns an entity relative to its current orientation.
+
+Pitch is the same as the x angle of an entity, and is equivalent to tilting +forward/backwards.
+
+Yaw is the same as the y angle of an entity, and is equivalent to turning +left/right.
+
+Roll is the same as the z angle of an entity, and is equivalent to tilting +left/right.

See also: RotateEntity.

+

Example:
+
+ + + + + +
; TurnEntity Example
+ ; ------------------
+
+ Graphics3D 640,480
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+ light=CreateLight()
+
+ cone=CreateCone( 32 )
+ PositionEntity cone,0,0,5
+
+ While Not KeyDown( 1 )
+
+ ; Reset turn values - otherwise, the cone will not stop turning!
+ pitch#=0
+ yaw#=0
+ roll#=0
+
+ ; Change movement values depending on the key pressed
+ If KeyDown( 208 )=True Then pitch#=-1
+ If KeyDown( 200 )=True Then pitch#=1
+ If KeyDown( 203 )=True Then yaw#=-1
+ If KeyDown( 205 )=True Then yaw#=1
+ If KeyDown( 45 )=True Then roll#=-1
+ If KeyDown( 44 )=True Then roll#=1
+
+ ; Move sphere using movement values
+ TurnEntity cone,pitch#,yaw#,roll#
+
+ RenderWorld
+
+ Text 0,0,"Use cursor/Z/X keys to turn cone"
+ Text 0,20,"Pitch: "+pitch#
+ Text 0,40,"Yaw: "+yaw#
+ Text 0,60,"Roll: "+roll#
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/UpdateNormals.htm b/_release/help/commands/3d_commands/UpdateNormals.htm new file mode 100644 index 0000000..3435e6a --- /dev/null +++ b/_release/help/commands/3d_commands/UpdateNormals.htm @@ -0,0 +1,38 @@ + + +Command: UpdateNormals + + + + + + +

  UpdateNormals mesh  

+ +

+Parameters:
+

+ + + + +
mesh - mesh handle
+

Description:
+
+ + + + +
Recalculates all normals in a mesh. This is necessary for correct + lighting if you have not set surface normals using 'VertexNormals' commands.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/UpdateWorld.htm b/_release/help/commands/3d_commands/UpdateWorld.htm new file mode 100644 index 0000000..3d53cdb --- /dev/null +++ b/_release/help/commands/3d_commands/UpdateWorld.htm @@ -0,0 +1,44 @@ + + +Command: UpdateWorld + + + + + + +

  UpdateWorld [anim_speed#]  

+ +

+Parameters:
+

+ + + + +
anim_speed# (optional) - a master control for animation speed. Defaults to 1.
+

Description:
+
+ + + + +
Animates all entities in the world, and performs collision checking.

+ The optional anim_speed# parameter allows you affect the animation speed of + all entities at once. A value of 1 will animate entities at their usual + animation speed, a value of 2 will animate entities at double their + animation speed, and so on.

+

+ For best results use this command once per main loop, just before calling + RenderWorld.

+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/VertexBlue.htm b/_release/help/commands/3d_commands/VertexBlue.htm new file mode 100644 index 0000000..f586a37 --- /dev/null +++ b/_release/help/commands/3d_commands/VertexBlue.htm @@ -0,0 +1,38 @@ + + +Command: VertexBlue + + + + + + +

  VertexBlue# ( surface,index )  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ index - index of vertex
+

Description:
+
+ + + + +
Returns the blue component of a vertices color.
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/VertexColor.htm b/_release/help/commands/3d_commands/VertexColor.htm new file mode 100644 index 0000000..a4717a5 --- /dev/null +++ b/_release/help/commands/3d_commands/VertexColor.htm @@ -0,0 +1,41 @@ + + +Command: VertexColor + + + + + + +

  VertexColor surface,index,red#,green#,blue#  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ index - index of vertex
+ red# - red value of vertex
+ green# - green value of vertex
+ blue# - blue value of vertex
+

Description:
+
+ + + + +
Sets the color of an existing vertex.
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/VertexCoords.htm b/_release/help/commands/3d_commands/VertexCoords.htm new file mode 100644 index 0000000..ad736e9 --- /dev/null +++ b/_release/help/commands/3d_commands/VertexCoords.htm @@ -0,0 +1,45 @@ + + +Command: VertexCoords + + + + + + +

  VertexCoords surface,index,x#,y#,z#  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ index - index of vertex
+ x# - x position of vertex
+ y# - y position of vertex
+ z# - z position of vertex
+

Description:
+
+ + + + +
Sets the geometric coordinates of an existing vertex.

This is the + command used to perform what is commonly referred to as 'dynamic mesh + deformation'. It will reposition a vertex so that all the triangle edges + connected to it, will move also. This will give the effect of parts of the + mesh suddenly deforming.

+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/VertexGreen.htm b/_release/help/commands/3d_commands/VertexGreen.htm new file mode 100644 index 0000000..ac2ed5e --- /dev/null +++ b/_release/help/commands/3d_commands/VertexGreen.htm @@ -0,0 +1,38 @@ + + +Command: VertexGreen + + + + + + +

  VertexGreen# ( surface,index )  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ index - index of vertex
+

Description:
+
+ + + + +
Returns the green component of a vertices color.
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/VertexNX.htm b/_release/help/commands/3d_commands/VertexNX.htm new file mode 100644 index 0000000..e4f0588 --- /dev/null +++ b/_release/help/commands/3d_commands/VertexNX.htm @@ -0,0 +1,38 @@ + + +Command: VertexNX + + + + + + +

  VertexNX# ( surface,index )  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ index - index of vertex
+

Description:
+
+ + + + +
Returns the x component of a vertices normal.
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/VertexNY.htm b/_release/help/commands/3d_commands/VertexNY.htm new file mode 100644 index 0000000..bc9c633 --- /dev/null +++ b/_release/help/commands/3d_commands/VertexNY.htm @@ -0,0 +1,38 @@ + + +Command: VertexNY + + + + + + +

  VertexNY# ( surface,index )  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ index - index of vertex
+

Description:
+
+ + + + +
Returns the y component of a vertices normal.
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/VertexNZ.htm b/_release/help/commands/3d_commands/VertexNZ.htm new file mode 100644 index 0000000..1231874 --- /dev/null +++ b/_release/help/commands/3d_commands/VertexNZ.htm @@ -0,0 +1,38 @@ + + +Command: VertexNZ + + + + + + +

  VertexNZ# ( surface,index )  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ index - index of vertex
+

Description:
+
+ + + + +
Returns the z component of a vertices normal.
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/VertexNormal.htm b/_release/help/commands/3d_commands/VertexNormal.htm new file mode 100644 index 0000000..6d5d07a --- /dev/null +++ b/_release/help/commands/3d_commands/VertexNormal.htm @@ -0,0 +1,41 @@ + + +Command: VertexNormal + + + + + + +

  VertexNormal surface,index,nx#,ny#,nz#  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ index - index of vertex
+ nx# - normal x of vertex
+ ny# - normal y of vertex
+ nz# - normal z of vertex
+

Description:
+
+ + + + +
Sets the normal of an existing vertex.
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/VertexRed.htm b/_release/help/commands/3d_commands/VertexRed.htm new file mode 100644 index 0000000..58a5175 --- /dev/null +++ b/_release/help/commands/3d_commands/VertexRed.htm @@ -0,0 +1,38 @@ + + +Command: VertexRed + + + + + + +

  VertexRed# ( surface,index )  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ index - index of vertex
+

Description:
+
+ + + + +
Returns the red component of a vertices color.
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/VertexTexCoords.htm b/_release/help/commands/3d_commands/VertexTexCoords.htm new file mode 100644 index 0000000..4dacd66 --- /dev/null +++ b/_release/help/commands/3d_commands/VertexTexCoords.htm @@ -0,0 +1,42 @@ + + +Command: VertexTexCoords + + + + + + +

  VertexTexCoords surface,index,u#,v#[,w#][,coord_set]  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ index - index of surface
+ u# - u# coordinate of vertex
+ v# - v# coordinate of vertex
+ w# (optional) - w# coordinate of vertex
+ coord_set (optional) - co_oord set. Should be set to 0 or 1.
+

Description:
+
+ + + + +
Sets the texture coordinates of an existing vertex.
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/VertexU.htm b/_release/help/commands/3d_commands/VertexU.htm new file mode 100644 index 0000000..7fe17c6 --- /dev/null +++ b/_release/help/commands/3d_commands/VertexU.htm @@ -0,0 +1,38 @@ + + +Command: VertexU + + + + + + +

  VertexU# ( surface,index )  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ index - index of vertex
+

Description:
+
+ + + + +
Returns the texture u coordinate of a vertex.
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/VertexV.htm b/_release/help/commands/3d_commands/VertexV.htm new file mode 100644 index 0000000..55b57dc --- /dev/null +++ b/_release/help/commands/3d_commands/VertexV.htm @@ -0,0 +1,38 @@ + + +Command: VertexY + + + + + + +

  VertexV# ( surface,index )  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ index - index of vertex
+

Description:
+
+ + + + +
Returns the texture v coordinate of a vertex.
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/VertexW.htm b/_release/help/commands/3d_commands/VertexW.htm new file mode 100644 index 0000000..423e522 --- /dev/null +++ b/_release/help/commands/3d_commands/VertexW.htm @@ -0,0 +1,38 @@ + + +Command: VertexW + + + + + + +

  VertexW# ( surface,index )  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ index - index of vertex
+

Description:
+
+ + + + +
Returns the texture w coordinate of a vertex.
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/VertexX.htm b/_release/help/commands/3d_commands/VertexX.htm new file mode 100644 index 0000000..099ffab --- /dev/null +++ b/_release/help/commands/3d_commands/VertexX.htm @@ -0,0 +1,38 @@ + + +Command: VertexX + + + + + + +

  VertexX# ( surface,index )  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ index - index of vertex
+

Description:
+
+ + + + +
Returns the x coordinate of a vertex.
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/VertexY.htm b/_release/help/commands/3d_commands/VertexY.htm new file mode 100644 index 0000000..9eb85ee --- /dev/null +++ b/_release/help/commands/3d_commands/VertexY.htm @@ -0,0 +1,38 @@ + + +Command: VertexY + + + + + + +

  VertexY# ( surface,index )  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ index - index of vertex
+

Description:
+
+ + + + +
Returns the y coordinate of a vertex.
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/VertexZ.htm b/_release/help/commands/3d_commands/VertexZ.htm new file mode 100644 index 0000000..108e249 --- /dev/null +++ b/_release/help/commands/3d_commands/VertexZ.htm @@ -0,0 +1,38 @@ + + +Command: VertexZ + + + + + + +

  VertexZ ( surface,index )  

+ +

+Parameters:
+

+ + + + +
surface - surface handle
+ index - index of vertex
+

Description:
+
+ + + + +
Returns the z coordinate of a vertex.
+

Example:
+
+ + + + + +
None.
+

Index

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/WBuffer.htm b/_release/help/commands/3d_commands/WBuffer.htm new file mode 100644 index 0000000..d14d6e2 --- /dev/null +++ b/_release/help/commands/3d_commands/WBuffer.htm @@ -0,0 +1,51 @@ + + +Command: WBuffer + + + + + + +

  Wbuffer enable  

+ +

+Parameters:
+

+ + + + +
enable - true to enable w-buffering rendering, false to disable. Defaults to +true for 16-bit colour mode, false for 24-bit and 32-bit.
+

Description:
+
+ + + + +
Enables or disables w-buffering.
+
+W-buffering is a technique used to draw 3D object in order of their depth - i.e. +the ones furthest away from the camera first, then the ones closer to the +camera, and so on.
+
+Normally, z-buffering is used to perform such a technique, but a z-buffer can be +slightly inaccurate in 16-bit colour mode, for which the level of precision is +less than in 24-bit or 32-bit colour modes. This means that in some situations, +objects will appear to overlap each other when they shouldn't and so on.
+
+To compensate for this, you can use w-buffering. This is a slightly more +accurate technique than z-buffering, although it may be less compatible on some +set-ups than z-buffering.
+

Example:
+
+ + + + + +
None.
+

Index

+ + diff --git a/_release/help/commands/3d_commands/Windowed3D.htm b/_release/help/commands/3d_commands/Windowed3D.htm new file mode 100644 index 0000000..14a1bf8 --- /dev/null +++ b/_release/help/commands/3d_commands/Windowed3D.htm @@ -0,0 +1,48 @@ + + +Command: Windowed3D + + + + + + +

  Windowed3D  

+ +

+Parameters:
+

+ + + + +
n/a
+

Description:
+
+ + + + +
Windowed3D () returns True if a graphics card is capable of rendering 3D graphics modes in a window on the desktop. +

+Certain graphics cards will only allow specific 3D colour depths (eg. Voodoo3 supports only 16-bit 3D modes and Matrox only supports 16 and 32-bit 3D modes but allows 24-bit 2D modes to be set). If the user's desktop is set to a depth unsupported in 3D, Windowed3D will return False. +

+

Example:
+
+ + + + + +
If Windowed3D ()
+ Graphics3D 640, 480, 0, 2
+ Print "Windowed mode!"
+Else
+ Graphics3D 640, 480, 0, 1
+ Print "Full screen modes only!"
+EndIf
+
+MouseWait
+End
+ + diff --git a/_release/help/commands/3d_commands/Wireframe.htm b/_release/help/commands/3d_commands/Wireframe.htm new file mode 100644 index 0000000..5343435 --- /dev/null +++ b/_release/help/commands/3d_commands/Wireframe.htm @@ -0,0 +1,76 @@ + + +Command: Wireframe + + + + + + +

  Wireframe enable  

+ +

+Parameters:
+

+ + + + +
enable - true to enable wireframe rendering, false to disable. Defaults to +false.
+

Description:
+
+ + + + +
Enables or disables wireframe rendering.

This will show the outline of each +polygon on the screen, with no shaded-in areas.
+
+Wireframe should only be used for debugging purposes, as driver support is +patchy. For the same reason, no support is offered for the wireframe rendering +of individual polygon entities.

+

Example:
+
+ + + + + +
; Wireframe Example
+ ; -----------------
+
+ Graphics3D 640,480,16
+ SetBuffer BackBuffer()
+
+ camera=CreateCamera()
+
+ light=CreateLight()
+ RotateEntity light,90,0,0
+
+ sphere=CreateSphere( 32 )
+ PositionEntity sphere,0,0,2
+
+ While Not KeyDown( 1 )
+
+ ; Toggle wireframe enable value between true and false when spacebar is + pressed
+ If KeyHit( 57 )=True Then enable=1-enable
+
+ ; Enable/disable wireframe rendering
+ WireFrame enable
+
+ RenderWorld
+
+ Text 0,0,"Press spacebar to toggle between Wireframe True/False"
+ If enable=False Then Text 0,20,"Wireframe False" Else Text 0,20,"Wireframe + True"
+
+ Flip
+
+ Wend
+
+ End
+

Index

+ + diff --git a/_release/help/commands/3d_commands/main.htm b/_release/help/commands/3d_commands/main.htm new file mode 100644 index 0000000..50a5451 --- /dev/null +++ b/_release/help/commands/3d_commands/main.htm @@ -0,0 +1,27 @@ + + +Command: AddAnimSeq + + + + + + +

  Command Reference  

+ +

+There is a help page for every command. These can be +accessed by clicking the appropriate command name in the left-hand frame. Many +commands have their own example too.

+ +

+If you spot any mistakes in the documentation then please +post a quick description of the error on the Bug Reports forum at +www.blitzbasic.co.nz. This will allow +the authors of the documentation to correct the error in time for the next +release of the docs.

+ +

+Docs Version: 1.62

+ + \ No newline at end of file diff --git a/_release/help/commands/3d_commands/template.htm b/_release/help/commands/3d_commands/template.htm new file mode 100644 index 0000000..f083bd0 --- /dev/null +++ b/_release/help/commands/3d_commands/template.htm @@ -0,0 +1,37 @@ + + +Command: <command> + + + + + + +

  <command>  

+ +

+Parameters:
+

+ + + + +
<param description>
+

Description:
+
+ + + + +
<description>
+

Example:
+
+ + + + + +
<example>
+

Index

+ + diff --git a/_release/help/commands/3d_examples/AddAnimSeq.bb b/_release/help/commands/3d_examples/AddAnimSeq.bb new file mode 100644 index 0000000..afb8bab --- /dev/null +++ b/_release/help/commands/3d_examples/AddAnimSeq.bb @@ -0,0 +1,20 @@ +; AddAnimSeq Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/AddTriangle.bb b/_release/help/commands/3d_examples/AddTriangle.bb new file mode 100644 index 0000000..004bbd4 --- /dev/null +++ b/_release/help/commands/3d_examples/AddTriangle.bb @@ -0,0 +1,25 @@ +; AddTriangle Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() : PositionEntity camera,0,0,-5 +light=CreateLight() + +mesh=CreateMesh() : DebugLog mesh +surface=CreateSurface(mesh) : DebugLog surface +v0=AddVertex(surface,-1,0,0) : DebugLog v0 +v1=AddVertex(surface,0,2,0) : DebugLog v1 +v2=AddVertex(surface,1,0,0) : DebugLog v2 + +t0=AddTriangle(surface,v0,v1,v2) : DebugLog t0 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/AddVertex.bb b/_release/help/commands/3d_examples/AddVertex.bb new file mode 100644 index 0000000..2e3fc44 --- /dev/null +++ b/_release/help/commands/3d_examples/AddVertex.bb @@ -0,0 +1,20 @@ +; AddVertex Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/AlignToVector.bb b/_release/help/commands/3d_examples/AlignToVector.bb new file mode 100644 index 0000000..c066a47 --- /dev/null +++ b/_release/help/commands/3d_examples/AlignToVector.bb @@ -0,0 +1,20 @@ +; AlignToVector Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/AmbientLight.bb b/_release/help/commands/3d_examples/AmbientLight.bb new file mode 100644 index 0000000..5641562 --- /dev/null +++ b/_release/help/commands/3d_examples/AmbientLight.bb @@ -0,0 +1,44 @@ +; AmbientLight Example +; -------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +sphere=CreateSphere( 32 ) +PositionEntity sphere,-2,0,5 + +cone=CreateCone( 32 ) +PositionEntity cone,2,0,5 + +; Set initial ambient light colour values +red#=127 +green#=127 +blue#=127 + +While Not KeyDown( 1 ) + + ; Change red, green, blue values depending on key pressed + If KeyDown( 2 )=True And red#>0 Then red#=red#-1 + If KeyDown( 3 )=True And red#<255 Then red#=red#+1 + If KeyDown( 4 )=True And green#>0 Then green#=green#-1 + If KeyDown( 5 )=True And green#<255 Then green#=green#+1 + If KeyDown( 6 )=True And blue#>0 Then blue#=blue#-1 + If KeyDown( 7 )=True And blue#<255 Then blue#=blue#+1 + + ; Set ambient light using red, green, blue values + AmbientLight red#,green#,blue# + + RenderWorld + + Text 0,0,"Press keys 1-6 to change AmbientLight red#,green#,blue# values + Text 0,20,"Ambient Red: "+red# + Text 0,40,"Ambient Green: "+green# + Text 0,60,"Ambient Blue: "+blue# + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/AnimLength.bb b/_release/help/commands/3d_examples/AnimLength.bb new file mode 100644 index 0000000..79bb414 --- /dev/null +++ b/_release/help/commands/3d_examples/AnimLength.bb @@ -0,0 +1,20 @@ +; AnimLength Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/AnimSeq.bb b/_release/help/commands/3d_examples/AnimSeq.bb new file mode 100644 index 0000000..b50f08a --- /dev/null +++ b/_release/help/commands/3d_examples/AnimSeq.bb @@ -0,0 +1,20 @@ +; AnimSeq Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/AnimTime.bb b/_release/help/commands/3d_examples/AnimTime.bb new file mode 100644 index 0000000..da93309 --- /dev/null +++ b/_release/help/commands/3d_examples/AnimTime.bb @@ -0,0 +1,20 @@ +; AnimTime Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/Animate.bb b/_release/help/commands/3d_examples/Animate.bb new file mode 100644 index 0000000..0318c1f --- /dev/null +++ b/_release/help/commands/3d_examples/Animate.bb @@ -0,0 +1,20 @@ +; Animate Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/AnimateMD2.bb b/_release/help/commands/3d_examples/AnimateMD2.bb new file mode 100644 index 0000000..2a1729e --- /dev/null +++ b/_release/help/commands/3d_examples/AnimateMD2.bb @@ -0,0 +1,33 @@ +; AnimateMD2 Example +; ------------------ + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +; Load md2 +gargoyle=LoadMD2( "media/gargoyle/gargoyle.md2" ) + +; Load md2 texture +garg_tex=LoadTexture( "media/gargoyle/gargoyle.bmp" ) + +; Apply md2 texture to md2 +EntityTexture gargoyle,garg_tex + +; Animate md2 +AnimateMD2 gargoyle,1,0.1,32,46 + +PositionEntity gargoyle,0,-45,100 +RotateEntity gargoyle,0,180,0 + +While Not KeyDown( 1 ) + UpdateWorld + RenderWorld + Flip +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/Animating.bb b/_release/help/commands/3d_examples/Animating.bb new file mode 100644 index 0000000..6ac0377 --- /dev/null +++ b/_release/help/commands/3d_examples/Animating.bb @@ -0,0 +1,20 @@ +; Animating Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/AntiAlias.bb b/_release/help/commands/3d_examples/AntiAlias.bb new file mode 100644 index 0000000..515f97c --- /dev/null +++ b/_release/help/commands/3d_examples/AntiAlias.bb @@ -0,0 +1,32 @@ +; AntiAlias Example +; ----------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +sphere=CreateSphere() +PositionEntity sphere,0,0,2 + +While Not KeyDown( 1 ) + + ; Toggle antialias enable value between true and false when spacebar is pressed + If KeyHit( 57 )=True Then enable=1-enable + + ; Enable/disable antialiasing + AntiAlias enable + + RenderWorld + + Text 0,0,"Press spacebar to toggle between AntiAlias True/False" + If enable=False Then Text 0,20,"AntiAlias False" Else Text 0,20,"AntiAlias True" + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/BrushAlpha.bb b/_release/help/commands/3d_examples/BrushAlpha.bb new file mode 100644 index 0000000..015f3ab --- /dev/null +++ b/_release/help/commands/3d_examples/BrushAlpha.bb @@ -0,0 +1,52 @@ +; BrushAlpha Example +; ------------------ + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +;PositionEntity camera,0,20,5 +;RotateEntity camera,90,0,0 + +light=CreateLight() +RotateEntity light,90,0,0 + +cube=CreateCube() +PositionEntity cube,0,0,8 + +cube2=CreateCube() +PositionEntity cube2,6,0,8 + +; Create brush +brush=CreateBrush() + +; Set brush color +BrushAlpha brush,0.5 + +; Paint mesh with brush +PaintMesh cube,brush + +While Not KeyDown( 1 ) + + pitch#=0 + yaw#=0 + roll#=0 + + If KeyDown( 208 )=True Then pitch#=-1 + If KeyDown( 200 )=True Then pitch#=1 + If KeyDown( 203 )=True Then yaw#=-1 + If KeyDown( 205 )=True Then yaw#=1 + If KeyDown( 45 )=True Then roll#=-1 + If KeyDown( 44 )=True Then roll#=1 + + TurnEntity cube,pitch#,yaw#,roll# + + MoveEntity cube2,0,0,0.1 + TurnEntity cube2,0,1,0 + + RenderWorld + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/BrushBlend.bb b/_release/help/commands/3d_examples/BrushBlend.bb new file mode 100644 index 0000000..ffd80cd --- /dev/null +++ b/_release/help/commands/3d_examples/BrushBlend.bb @@ -0,0 +1,20 @@ +; BrushBlend Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/BrushColor.bb b/_release/help/commands/3d_examples/BrushColor.bb new file mode 100644 index 0000000..17e513c --- /dev/null +++ b/_release/help/commands/3d_examples/BrushColor.bb @@ -0,0 +1,44 @@ +; BrushColor Example +; ------------------ + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +cube=CreateCube() +PositionEntity cube,0,0,5 + +; Create brush +brush=CreateBrush() + +; Set brush color +BrushColor brush,0,0,255 + +; Paint mesh with brush +PaintMesh cube,brush + +While Not KeyDown( 1 ) + + pitch#=0 + yaw#=0 + roll#=0 + + If KeyDown( 208 )=True Then pitch#=-1 + If KeyDown( 200 )=True Then pitch#=1 + If KeyDown( 203 )=True Then yaw#=-1 + If KeyDown( 205 )=True Then yaw#=1 + If KeyDown( 45 )=True Then roll#=-1 + If KeyDown( 44 )=True Then roll#=1 + + TurnEntity cube,pitch#,yaw#,roll# + + RenderWorld + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/BrushFX.bb b/_release/help/commands/3d_examples/BrushFX.bb new file mode 100644 index 0000000..e95fc9d --- /dev/null +++ b/_release/help/commands/3d_examples/BrushFX.bb @@ -0,0 +1,20 @@ +; BrushFX Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/BrushShininess.bb b/_release/help/commands/3d_examples/BrushShininess.bb new file mode 100644 index 0000000..b0b9bd7 --- /dev/null +++ b/_release/help/commands/3d_examples/BrushShininess.bb @@ -0,0 +1,20 @@ +; BrushShininess Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/BrushTexture.bb b/_release/help/commands/3d_examples/BrushTexture.bb new file mode 100644 index 0000000..81f962f --- /dev/null +++ b/_release/help/commands/3d_examples/BrushTexture.bb @@ -0,0 +1,47 @@ +; BrushTexture Example +; -------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +cube=CreateCube() +PositionEntity cube,0,0,5 + +; Load texture +tex=LoadTexture( "media/b3dlogo.jpg" ) + +; Create brush +brush=CreateBrush() + +; Apply texture to brush +BrushTexture brush,tex + +; Paint mesh with brush +PaintMesh cube,brush + +While Not KeyDown( 1 ) + + pitch#=0 + yaw#=0 + roll#=0 + + If KeyDown( 208 )=True Then pitch#=-1 + If KeyDown( 200 )=True Then pitch#=1 + If KeyDown( 203 )=True Then yaw#=-1 + If KeyDown( 205 )=True Then yaw#=1 + If KeyDown( 45 )=True Then roll#=-1 + If KeyDown( 44 )=True Then roll#=1 + + TurnEntity cube,pitch#,yaw#,roll# + + RenderWorld + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/CameraClsColor.bb b/_release/help/commands/3d_examples/CameraClsColor.bb new file mode 100644 index 0000000..80cf94c --- /dev/null +++ b/_release/help/commands/3d_examples/CameraClsColor.bb @@ -0,0 +1,20 @@ +; CameraClsColor Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CameraClsMode.bb b/_release/help/commands/3d_examples/CameraClsMode.bb new file mode 100644 index 0000000..8f6e5d5 --- /dev/null +++ b/_release/help/commands/3d_examples/CameraClsMode.bb @@ -0,0 +1,20 @@ +; CameraClsMode Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CameraFogColor.bb b/_release/help/commands/3d_examples/CameraFogColor.bb new file mode 100644 index 0000000..cdf17b1 --- /dev/null +++ b/_release/help/commands/3d_examples/CameraFogColor.bb @@ -0,0 +1,58 @@ +; CameraFogMode Example +; --------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +PositionEntity camera,0,1,0 + +light=CreateLight() +RotateEntity light,90,0,0 + +plane=CreatePlane() +grass_tex=LoadTexture( "media/mossyground.bmp" ) +EntityTexture plane,grass_tex + +; Set camera fog to 1 (linear fog) +CameraFogMode camera,1 + +; Set camera fog range +CameraFogRange camera,1,10 + +; Set initial fog colour values +red#=0 +green#=0 +blue#=0 + +While Not KeyDown( 1 ) + + ; Change red, green, blue values depending on key pressed + If KeyDown( 2 )=True And red#>0 Then red#=red#-1 + If KeyDown( 3 )=True And red#<255 Then red#=red#+1 + If KeyDown( 4 )=True And green#>0 Then green#=green#-1 + If KeyDown( 5 )=True And green#<255 Then green#=green#+1 + If KeyDown( 6 )=True And blue#>0 Then blue#=blue#-1 + If KeyDown( 7 )=True And blue#<255 Then blue#=blue#+1 + + ; Set camera fog color using red, green, blue values + CameraFogColor camera,red#,green#,blue# + + If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0 + If KeyDown( 203 )=True Then TurnEntity camera,0,1,0 + If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.05 + If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.05 + + RenderWorld + + Text 0,0,"Use cursor keys to move about the infinite plane" + Text 0,20,"Press keys 1-6 to change CameraFogColor red#,green#,blue# values + Text 0,40,"Fog Red: "+red# + Text 0,60,"Fog Green: "+green# + Text 0,80,"Fog Blue: "+blue# + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/CameraFogMode.bb b/_release/help/commands/3d_examples/CameraFogMode.bb new file mode 100644 index 0000000..0040e45 --- /dev/null +++ b/_release/help/commands/3d_examples/CameraFogMode.bb @@ -0,0 +1,38 @@ +; CameraFogMode Example +; --------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +PositionEntity camera,0,1,0 +CameraFogRange camera,1,10 + +light=CreateLight() +RotateEntity light,90,0,0 + +plane=CreatePlane() +grass_tex=LoadTexture( "media/mossyground.bmp" ) +EntityTexture plane,grass_tex + +While Not KeyDown( 1 ) + + ; Toggle camera fog mode between 0 and 1 when spacebar is pressed + If KeyHit( 57 )=True Then fog_mode=1-fog_mode : CameraFogMode camera,fog_mode + + If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0 + If KeyDown( 203 )=True Then TurnEntity camera,0,1,0 + If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.05 + If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.05 + + RenderWorld + + Text 0,0,"Use cursor keys to move about the infinite plane" + Text 0,20,"Press spacebar to toggle between CameraFogMode 0/1" + If fog_mode=False Then Text 0,40,"CameraFogMode 0" Else Text 0,40,"CameraFogMode 1" + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/CameraFogRange.bb b/_release/help/commands/3d_examples/CameraFogRange.bb new file mode 100644 index 0000000..fc8959d --- /dev/null +++ b/_release/help/commands/3d_examples/CameraFogRange.bb @@ -0,0 +1,47 @@ +; CameraFogRange Example +; ---------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +PositionEntity camera,0,1,0 + +light=CreateLight() +RotateEntity light,90,0,0 + +plane=CreatePlane() +grass_tex=LoadTexture( "media/mossyground.bmp" ) +EntityTexture plane,grass_tex + +; Set camera fog to 1 (linear fog) +CameraFogMode camera,1 + +; Set intial fog range value +fog_range=10 + +While Not KeyDown( 1 ) + + ; If square brackets keys pressed then change fog range value + If KeyDown( 26 )=True Then fog_range=fog_range-1 + If KeyDown( 27 )=True Then fog_range=fog_range+1 + + ; Set camera fog range + CameraFogRange camera,1,fog_range + + If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0 + If KeyDown( 203 )=True Then TurnEntity camera,0,1,0 + If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.05 + If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.05 + + RenderWorld + + Text 0,0,"Use cursor keys to move about the infinite plane" + Text 0,20,"Press [ or ] to change CameraFogRange value" + Text 0,40,"CameraFogRange camera,1,"+fog_range + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/CameraPick.bb b/_release/help/commands/3d_examples/CameraPick.bb new file mode 100644 index 0000000..1b400b3 --- /dev/null +++ b/_release/help/commands/3d_examples/CameraPick.bb @@ -0,0 +1,20 @@ +; CameraPick Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CameraProject.bb b/_release/help/commands/3d_examples/CameraProject.bb new file mode 100644 index 0000000..31af4aa --- /dev/null +++ b/_release/help/commands/3d_examples/CameraProject.bb @@ -0,0 +1,20 @@ +; CameraProject Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CameraRange.bb b/_release/help/commands/3d_examples/CameraRange.bb new file mode 100644 index 0000000..583fba1 --- /dev/null +++ b/_release/help/commands/3d_examples/CameraRange.bb @@ -0,0 +1,20 @@ +; CameraRange Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CameraViewport.bb b/_release/help/commands/3d_examples/CameraViewport.bb new file mode 100644 index 0000000..e804162 --- /dev/null +++ b/_release/help/commands/3d_examples/CameraViewport.bb @@ -0,0 +1,42 @@ +; CameraViewport Example +; ---------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +; Create first camera +cam1=CreateCamera() + +; Set the first camera's viewport so that it fills the top half of the camera +CameraViewport cam1,0,0,GraphicsWidth(),GraphicsHeight()/2 + +; Create second camera +cam2=CreateCamera() + +; Set the second camera's viewport so that it fills the bottom half of the camera +CameraViewport cam2,0,GraphicsHeight()/2,GraphicsWidth(),GraphicsHeight()/2 + +light=CreateLight() +RotateEntity light,90,0,0 + +plane=CreatePlane() +grass_tex=LoadTexture( "media/mossyground.bmp" ) +EntityTexture plane,grass_tex +PositionEntity plane,0,-1,0 + +While Not KeyDown( 1 ) + + If KeyDown( 205 )=True Then TurnEntity cam1,0,-1,0 + If KeyDown( 203 )=True Then TurnEntity cam1,0,1,0 + If KeyDown( 208 )=True Then MoveEntity cam1,0,0,-0.05 + If KeyDown( 200 )=True Then MoveEntity cam1,0,0,0.05 + + RenderWorld + + Text 0,0,"Use cursor keys to move the first camera about the infinite plane" + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/CameraZoom.bb b/_release/help/commands/3d_examples/CameraZoom.bb new file mode 100644 index 0000000..5abe5cf --- /dev/null +++ b/_release/help/commands/3d_examples/CameraZoom.bb @@ -0,0 +1,20 @@ +; CameraZoom Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CaptureWorld.bb b/_release/help/commands/3d_examples/CaptureWorld.bb new file mode 100644 index 0000000..992263f --- /dev/null +++ b/_release/help/commands/3d_examples/CaptureWorld.bb @@ -0,0 +1,20 @@ +; CaptureWorld Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/ClearCollisions.bb b/_release/help/commands/3d_examples/ClearCollisions.bb new file mode 100644 index 0000000..eca0ce7 --- /dev/null +++ b/_release/help/commands/3d_examples/ClearCollisions.bb @@ -0,0 +1,61 @@ +; ClearCollisions Example +; ----------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +sphere=CreateSphere( 32 ) +PositionEntity sphere,-2,0,5 + +cone=CreateCone( 32 ) +EntityType cone,type_cone +PositionEntity cone,2,0,5 + +; Set collision type values +type_sphere=1 +type_cone=2 + +; Set up sphere collision data +EntityRadius sphere,1 +EntityType sphere,type_sphere + +; Set up cone collision data +EntityType cone,type_cone + +; Enable collisions between type_sphere and type_cone, with sphere->polygon method and slide response +Collisions type_sphere,type_cone,2,2 + +While Not KeyDown( 1 ) + + x#=0 + y#=0 + z#=0 + + If KeyDown( 203 )=True Then x#=-0.1 + If KeyDown( 205 )=True Then x#=0.1 + If KeyDown( 208 )=True Then y#=-0.1 + If KeyDown( 200 )=True Then y#=0.1 + If KeyDown( 44 )=True Then z#=-0.1 + If KeyDown( 30 )=True Then z#=0.1 + + MoveEntity sphere,x#,y#,z# + + ; If spacebar pressed then clear collisions + If KeyHit( 57 )=True Then ClearCollisions + + ; Perform collision checking + UpdateWorld + + RenderWorld + + Text 0,0,"Use cursor/A/Z keys to move sphere" + Text 0,20,"Press spacebar to use ClearCollisions command" + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/ClearSurface.bb b/_release/help/commands/3d_examples/ClearSurface.bb new file mode 100644 index 0000000..3bd3c19 --- /dev/null +++ b/_release/help/commands/3d_examples/ClearSurface.bb @@ -0,0 +1,20 @@ +; ClearSurface Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/ClearTextureFilters.bb b/_release/help/commands/3d_examples/ClearTextureFilters.bb new file mode 100644 index 0000000..a649eb3 --- /dev/null +++ b/_release/help/commands/3d_examples/ClearTextureFilters.bb @@ -0,0 +1,20 @@ +; ClearTextureFilters Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/ClearWorld.bb b/_release/help/commands/3d_examples/ClearWorld.bb new file mode 100644 index 0000000..35bfd80 --- /dev/null +++ b/_release/help/commands/3d_examples/ClearWorld.bb @@ -0,0 +1,20 @@ +; LinePick Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CollisionEntity.bb b/_release/help/commands/3d_examples/CollisionEntity.bb new file mode 100644 index 0000000..7a5bf7e --- /dev/null +++ b/_release/help/commands/3d_examples/CollisionEntity.bb @@ -0,0 +1,20 @@ +; CollisionEntity Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CollisionNX.bb b/_release/help/commands/3d_examples/CollisionNX.bb new file mode 100644 index 0000000..e273aa0 --- /dev/null +++ b/_release/help/commands/3d_examples/CollisionNX.bb @@ -0,0 +1,20 @@ +; CollisionNX Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/CollisionNY.bb b/_release/help/commands/3d_examples/CollisionNY.bb new file mode 100644 index 0000000..1bed5a3 --- /dev/null +++ b/_release/help/commands/3d_examples/CollisionNY.bb @@ -0,0 +1,20 @@ +; CollisionNY Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CollisionNZ.bb b/_release/help/commands/3d_examples/CollisionNZ.bb new file mode 100644 index 0000000..85de1ff --- /dev/null +++ b/_release/help/commands/3d_examples/CollisionNZ.bb @@ -0,0 +1,20 @@ +; CollisionNZ Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CollisionSurface.bb b/_release/help/commands/3d_examples/CollisionSurface.bb new file mode 100644 index 0000000..1e290e7 --- /dev/null +++ b/_release/help/commands/3d_examples/CollisionSurface.bb @@ -0,0 +1,20 @@ +; CollisionSurface Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CollisionTime.bb b/_release/help/commands/3d_examples/CollisionTime.bb new file mode 100644 index 0000000..7cf4687 --- /dev/null +++ b/_release/help/commands/3d_examples/CollisionTime.bb @@ -0,0 +1,20 @@ +; CollisionTime Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CollisionTriangle.bb b/_release/help/commands/3d_examples/CollisionTriangle.bb new file mode 100644 index 0000000..41566a3 --- /dev/null +++ b/_release/help/commands/3d_examples/CollisionTriangle.bb @@ -0,0 +1,20 @@ +; CollisionTriangle Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CollisionX.bb b/_release/help/commands/3d_examples/CollisionX.bb new file mode 100644 index 0000000..388add8 --- /dev/null +++ b/_release/help/commands/3d_examples/CollisionX.bb @@ -0,0 +1,20 @@ +; CollisionX Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CollisionY.bb b/_release/help/commands/3d_examples/CollisionY.bb new file mode 100644 index 0000000..2501c9f --- /dev/null +++ b/_release/help/commands/3d_examples/CollisionY.bb @@ -0,0 +1,20 @@ +; CollisionY Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CollisionZ.bb b/_release/help/commands/3d_examples/CollisionZ.bb new file mode 100644 index 0000000..a7535d9 --- /dev/null +++ b/_release/help/commands/3d_examples/CollisionZ.bb @@ -0,0 +1,20 @@ +; CollisionZ Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/Collisions.bb b/_release/help/commands/3d_examples/Collisions.bb new file mode 100644 index 0000000..0a4ee28 --- /dev/null +++ b/_release/help/commands/3d_examples/Collisions.bb @@ -0,0 +1,118 @@ +; Collisions Example +; ------------------ + +Graphics3D 640,480 +SetBuffer BackBuffer() + +; Set collision type values +type_character=1 +type_scenery=2 + +camera=CreateCamera() +RotateEntity camera,45,0,0 +PositionEntity camera,0,15,-10 + +light=CreateLight() +RotateEntity light,45,0,0 + +; Create sphere 'character' +sphere=CreateSphere( 32 ) +EntityRadius sphere,1 +EntityType sphere,type_character +PositionEntity sphere,0,7,0 + +; Create cube 'scenery' +cube=CreateCube() +EntityRadius cube,1 +EntityType cube,type_scenery +PositionEntity cube,0,-5,0 +EntityColor cube,127,0,0 +ScaleEntity cube,10,10,10 + +; Create cylinder 'scenery' +cylinder=CreateCylinder( 32 ) +ScaleEntity cylinder,2,2,2 +EntityColor cylinder,255,0,0 +EntityType cylinder,type_scenery +PositionEntity cylinder,-4,7,-4 + +; Create cone 'scenery' +cone=CreateCone( 32 ) +ScaleEntity cone,2,2,2 +EntityColor cone,255,0,0 +EntityType cone,type_scenery +PositionEntity cone,4,7,-4 + +; Create prism 'scenery' +prism=CreateCylinder( 3 ) +ScaleEntity prism,2,2,2 +EntityColor prism,255,0,0 +EntityType prism,type_scenery +PositionEntity prism,-4,7,4 +RotateEntity prism,0,180,0 + +; Create pyramid 'scenery' +pyramid=CreateCone( 4 ) +ScaleEntity pyramid,2,2,2 +EntityColor pyramid,255,0,0 +EntityType pyramid,type_scenery +RotateEntity pyramid,0,45,0 +PositionEntity pyramid,4,7,4 + +; Set collision method and response values +method=2 +response=2 + +method_info$="sphere-to-polygon" +response_info$="slide1" + +While Not KeyDown( 1 ) + + x#=0 + y#=0 + z#=0 + + If KeyDown( 203 )=True Then x#=-0.1 + If KeyDown( 205 )=True Then x#=0.1 + If KeyDown( 208 )=True Then z#=-0.1 + If KeyDown( 200 )=True Then z#=0.1 + + MoveEntity sphere,x#,y#,z# + MoveEntity sphere,0,-0.02,0 + + ; Change collision method + If KeyHit(50)=True + method=method+1 + If method=4 Then method=1 + If method=1 Then method_info$="sphere-to-sphere" + If method=2 Then method_info$="sphere-to-polygon" + If method=3 Then method_info$="sphere-to-box" + EndIf + + ; Change collision response + If KeyHit(19)=True + response=response+1 + If response=4 Then response=1 + If response=1 Then response_info$="stop" + If response=2 Then response_info$="slide1" + If response=3 Then response_info$="slide2" + EndIf + + ; Enable Collions between type_character and type_scenery + Collisions type_character,type_scenery,method,response + + ; Perform collision checking + UpdateWorld + + RenderWorld + + Text 0,0,"Use cursor keys to move sphere" + Text 0,20,"Press M to change collision Method (currently: "+method_info$+")" + Text 0,40,"Press R to change collision Response (currently: "+response_info$+")" + Text 0,60,"Collisions type_character,type_scenery,"+method+","+response + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/CopyEntity.bb b/_release/help/commands/3d_examples/CopyEntity.bb new file mode 100644 index 0000000..09a151e --- /dev/null +++ b/_release/help/commands/3d_examples/CopyEntity.bb @@ -0,0 +1,20 @@ +; CopyEntity Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CountChildren.bb b/_release/help/commands/3d_examples/CountChildren.bb new file mode 100644 index 0000000..31728ce --- /dev/null +++ b/_release/help/commands/3d_examples/CountChildren.bb @@ -0,0 +1,20 @@ +; CountChildren Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CountCollisions.bb b/_release/help/commands/3d_examples/CountCollisions.bb new file mode 100644 index 0000000..ed743fa --- /dev/null +++ b/_release/help/commands/3d_examples/CountCollisions.bb @@ -0,0 +1,20 @@ +; CountCollisions Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CountSurfaces.bb b/_release/help/commands/3d_examples/CountSurfaces.bb new file mode 100644 index 0000000..f7346f0 --- /dev/null +++ b/_release/help/commands/3d_examples/CountSurfaces.bb @@ -0,0 +1,30 @@ +; LoadMesh Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +CameraClsColor camera,0,0,255 + +light=CreateLight() +RotateEntity light,90,0,0 + +drum=LoadMesh( "media/teapot.x" ) +PositionEntity drum,0,0,10 +RotateEntity drum,0,45,0 + +While Not KeyDown( 1 ) + RenderWorld + + ; Count no. of surfaces in mesh + count_surf=CountSurfaces(drum) + Text 0,0,"This mesh has "+count_surf+" surface(s)" + + ; Press space + If KeyDown( 57 )=True Then surf=GetSurface(drum,1) : ClearSurface surf + + Flip +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/CountTriangles.bb b/_release/help/commands/3d_examples/CountTriangles.bb new file mode 100644 index 0000000..646b746 --- /dev/null +++ b/_release/help/commands/3d_examples/CountTriangles.bb @@ -0,0 +1,20 @@ +; CountTriangles Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CountVertices.bb b/_release/help/commands/3d_examples/CountVertices.bb new file mode 100644 index 0000000..519cb9a --- /dev/null +++ b/_release/help/commands/3d_examples/CountVertices.bb @@ -0,0 +1,20 @@ +; CountVertices Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CreateBrush.bb b/_release/help/commands/3d_examples/CreateBrush.bb new file mode 100644 index 0000000..8b7dc3c --- /dev/null +++ b/_release/help/commands/3d_examples/CreateBrush.bb @@ -0,0 +1,50 @@ +; CreateBrush Example +; ------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +cube=CreateCube() +PositionEntity cube,0,0,5 + +; Load texture +tex=LoadTexture("../media/b3dlogo.jpg") + +; Create brush +brush=CreateBrush() + +; Apply texture to brush +BrushTexture brush,tex + +; And some shininess +BrushShininess brush,1 + +; Paint mesh with brush +PaintMesh cube,brush + +While Not KeyDown( 1 ) + + pitch#=0 + yaw#=0 + roll#=0 + + If KeyDown( 208 )=True Then pitch#=-1 + If KeyDown( 200 )=True Then pitch#=1 + If KeyDown( 203 )=True Then yaw#=-1 + If KeyDown( 205 )=True Then yaw#=1 + If KeyDown( 45 )=True Then roll#=-1 + If KeyDown( 44 )=True Then roll#=1 + + TurnEntity cube,pitch#,yaw#,roll# + + RenderWorld + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/CreateCamera.bb b/_release/help/commands/3d_examples/CreateCamera.bb new file mode 100644 index 0000000..64b37c0 --- /dev/null +++ b/_release/help/commands/3d_examples/CreateCamera.bb @@ -0,0 +1,20 @@ +; CreateCamera Example +; -------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +; Create camera +camera=CreateCamera() + +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + RenderWorld + Flip +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/CreateCone.bb b/_release/help/commands/3d_examples/CreateCone.bb new file mode 100644 index 0000000..805a768 --- /dev/null +++ b/_release/help/commands/3d_examples/CreateCone.bb @@ -0,0 +1,22 @@ +; CreateCone Example +; ------------------ + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +; Create cone +cone=CreateCone() + +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + RenderWorld + Flip +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/CreateCube.bb b/_release/help/commands/3d_examples/CreateCube.bb new file mode 100644 index 0000000..e11d71f --- /dev/null +++ b/_release/help/commands/3d_examples/CreateCube.bb @@ -0,0 +1,22 @@ +; CreateCube Example +; ------------------ + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +; Create cube +cube=CreateCube() + +PositionEntity cube,0,0,5 + +While Not KeyDown( 1 ) + RenderWorld + Flip +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/CreateCylinder.bb b/_release/help/commands/3d_examples/CreateCylinder.bb new file mode 100644 index 0000000..8ecb947 --- /dev/null +++ b/_release/help/commands/3d_examples/CreateCylinder.bb @@ -0,0 +1,22 @@ +; CreateCylinder Example +; ---------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +; Create cylinder +cylinder=CreateCylinder() + +PositionEntity cylinder,0,0,5 + +While Not KeyDown( 1 ) + RenderWorld + Flip +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/CreateLight.bb b/_release/help/commands/3d_examples/CreateLight.bb new file mode 100644 index 0000000..790f925 --- /dev/null +++ b/_release/help/commands/3d_examples/CreateLight.bb @@ -0,0 +1,20 @@ +; CreateLight Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CreateListener.bb b/_release/help/commands/3d_examples/CreateListener.bb new file mode 100644 index 0000000..6493851 --- /dev/null +++ b/_release/help/commands/3d_examples/CreateListener.bb @@ -0,0 +1,20 @@ +; CreateListener Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CreateMesh.bb b/_release/help/commands/3d_examples/CreateMesh.bb new file mode 100644 index 0000000..e2bbcec --- /dev/null +++ b/_release/help/commands/3d_examples/CreateMesh.bb @@ -0,0 +1,20 @@ +; CreateMesh Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CreateMirror.bb b/_release/help/commands/3d_examples/CreateMirror.bb new file mode 100644 index 0000000..d584857 --- /dev/null +++ b/_release/help/commands/3d_examples/CreateMirror.bb @@ -0,0 +1,43 @@ +; CreateMirror Example +; -------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +PositionEntity camera,0,1,-5 + +light=CreateLight() +RotateEntity light,90,0,0 + +; Create cone +cone=CreateCone(32) +PositionEntity cone,0,2,0 + +; Create plane +plane=CreatePlane() +grass_tex=LoadTexture( "media/chorme-2.bmp" ) +EntityTexture plane,grass_tex +EntityAlpha plane,0.5 + +; Create mirror +mirror=CreateMirror() + +While Not KeyDown( 1 ) + + If KeyDown( 203 )=True Then MoveEntity cone,-0.1,0,0 + If KeyDown( 205 )=True Then MoveEntity cone,0.1,0,0 + If KeyDown( 208 )=True Then MoveEntity cone,0,-0.1,0 + If KeyDown( 200 )=True Then MoveEntity cone,0,0.1,0 + If KeyDown( 44 )=True Then MoveEntity cone,0,0,-0.1 + If KeyDown( 30 )=True Then MoveEntity cone,0,0,0.1 + + RenderWorld + + Text 0,0,"Use cursor/A/Z keys to move cone above infinite mirror" + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/CreatePivot.bb b/_release/help/commands/3d_examples/CreatePivot.bb new file mode 100644 index 0000000..ae4ae0b --- /dev/null +++ b/_release/help/commands/3d_examples/CreatePivot.bb @@ -0,0 +1,20 @@ +; CreatePivot Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CreatePlane.bb b/_release/help/commands/3d_examples/CreatePlane.bb new file mode 100644 index 0000000..c467500 --- /dev/null +++ b/_release/help/commands/3d_examples/CreatePlane.bb @@ -0,0 +1,35 @@ +; CreatePlane Example +; ------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +PositionEntity camera,0,1,0 + +light=CreateLight() +RotateEntity light,90,0,0 + +; Create plane +plane=CreatePlane() + +grass_tex=LoadTexture( "media/mossyground.bmp" ) + +EntityTexture plane,grass_tex + +While Not KeyDown( 1 ) + + If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0 + If KeyDown( 203 )=True Then TurnEntity camera,0,1,0 + If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.05 + If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.05 + + RenderWorld + + Text 0,0,"Use cursor keys to move about the infinite plane" + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/CreateSphere.bb b/_release/help/commands/3d_examples/CreateSphere.bb new file mode 100644 index 0000000..3a227b1 --- /dev/null +++ b/_release/help/commands/3d_examples/CreateSphere.bb @@ -0,0 +1,22 @@ +; CreateSphere Example +; -------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +; Create sphere +sphere=CreateSphere() + +PositionEntity sphere,0,0,5 + +While Not KeyDown( 1 ) + RenderWorld + Flip +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/CreateSprite.bb b/_release/help/commands/3d_examples/CreateSprite.bb new file mode 100644 index 0000000..d0da145 --- /dev/null +++ b/_release/help/commands/3d_examples/CreateSprite.bb @@ -0,0 +1,20 @@ +; CreateSprite Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/CreateSurface.bb b/_release/help/commands/3d_examples/CreateSurface.bb new file mode 100644 index 0000000..6852dea --- /dev/null +++ b/_release/help/commands/3d_examples/CreateSurface.bb @@ -0,0 +1,40 @@ +; CreateSurface Example +; --------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +PositionEntity camera,0,0,-5 + +light=CreateLight() +RotateEntity light,90,0,0 + +mesh=CreateMesh() +surf=CreateSurface( mesh ) + +Const segs=128,width#=4,depth#=.125 + +For k=0 To segs + x#=Float(k)*width/segs-width/2 + u#=Float(k)/segs + AddVertex surf,x,1,0,u,0 + AddVertex surf,x,-1,0,u,1 +Next + +For k=0 To segs-1 + AddTriangle surf,k*2,k*2+2,k*2+3 + AddTriangle surf,k*2,k*2+3,k*2+1 +Next + +b=LoadBrush( "../media/b3dlogo.jpg" ) +PaintSurface surf,b + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/CreateTerrain.bb b/_release/help/commands/3d_examples/CreateTerrain.bb new file mode 100644 index 0000000..1d16f59 --- /dev/null +++ b/_release/help/commands/3d_examples/CreateTerrain.bb @@ -0,0 +1,35 @@ +; CreateTerrain Example +; --------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +PositionEntity camera,0,1,0 + +light=CreateLight() +RotateEntity light,90,0,0 + +; Create terrain +terrain=CreateTerrain(128) + +; Texture terrain +grass_tex=LoadTexture( "media/mossyground.bmp" ) +EntityTexture terrain,grass_tex + +While Not KeyDown( 1 ) + +If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0 +If KeyDown( 203 )=True Then TurnEntity camera,0,1,0 +If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.05 +If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.05 + +RenderWorld + +Text 0,0,"Use cursor keys to move about the terrain" + +Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/CreateTexture.bb b/_release/help/commands/3d_examples/CreateTexture.bb new file mode 100644 index 0000000..815de2c --- /dev/null +++ b/_release/help/commands/3d_examples/CreateTexture.bb @@ -0,0 +1,61 @@ +; CreateTexture Example +; --------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +cube=CreateCube() +PositionEntity cube,0,0,5 + +; Create texture of size 256x256 +tex=CreateTexture(256,256) + +; Set buffer - texture buffer +SetBuffer TextureBuffer(tex) + +; Clear texture buffer with background white color +ClsColor 255,255,255 +Cls + +; Draw text on texture +font=LoadFont("arial",24) +SetFont font +Color 0,0,0 +Text 0,0,"This texture" +Text 0,40,"was created using" : Color 0,0,255 +Text 0,80,"CreateTexture()" : Color 0,0,0 +Text 0,120,"and drawn to using" : Color 0,0,255 +Text 0,160,"SetBuffer TextureBuffer()" + +; Texture cube with texture +EntityTexture cube,tex + +; Set buffer - backbuffer +SetBuffer BackBuffer() + +While Not KeyDown( 1 ) + + pitch#=0 + yaw#=0 + roll#=0 + + If KeyDown( 208 )=True Then pitch#=-1 + If KeyDown( 200 )=True Then pitch#=1 + If KeyDown( 203 )=True Then yaw#=-1 + If KeyDown( 205 )=True Then yaw#=1 + If KeyDown( 45 )=True Then roll#=-1 + If KeyDown( 44 )=True Then roll#=1 + + TurnEntity cube,pitch#,yaw#,roll# + + RenderWorld + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/Dither.bb b/_release/help/commands/3d_examples/Dither.bb new file mode 100644 index 0000000..911aaf0 --- /dev/null +++ b/_release/help/commands/3d_examples/Dither.bb @@ -0,0 +1,33 @@ +; Dither Example +; -------------- + +Graphics3D 640,480,16 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +; Rotate light so that it creates maximum shading effect on sphere +RotateEntity light,90,0,0 + +sphere=CreateSphere( 32 ) +PositionEntity sphere,0,0,2 + +While Not KeyDown( 1 ) + + ; Toggle dither enable value between true and false when spacebar is pressed + If KeyHit( 57 )=True Then enable=1-enable + + ; Enable/disable hardware dithering + Dither enable + + RenderWorld + + Text 0,0,"Press spacebar to toggle between Dither True/False" + If enable=False Then Text 0,20,"Dither False" Else Text 0,20,"Dither True" + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/EmitSound.bb b/_release/help/commands/3d_examples/EmitSound.bb new file mode 100644 index 0000000..dc1df5c --- /dev/null +++ b/_release/help/commands/3d_examples/EmitSound.bb @@ -0,0 +1,20 @@ +; EmitSound Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/EntityAlpha.bb b/_release/help/commands/3d_examples/EntityAlpha.bb new file mode 100644 index 0000000..f14df43 --- /dev/null +++ b/_release/help/commands/3d_examples/EntityAlpha.bb @@ -0,0 +1,20 @@ +; EntityAlpha Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/EntityAnimTime.bb b/_release/help/commands/3d_examples/EntityAnimTime.bb new file mode 100644 index 0000000..377e5fa --- /dev/null +++ b/_release/help/commands/3d_examples/EntityAnimTime.bb @@ -0,0 +1,20 @@ +; EntityAnimTime Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/EntityAnimating.bb b/_release/help/commands/3d_examples/EntityAnimating.bb new file mode 100644 index 0000000..e77ff49 --- /dev/null +++ b/_release/help/commands/3d_examples/EntityAnimating.bb @@ -0,0 +1,20 @@ +; EntityAnimating Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/EntityAutoFade.bb b/_release/help/commands/3d_examples/EntityAutoFade.bb new file mode 100644 index 0000000..bf7a960 --- /dev/null +++ b/_release/help/commands/3d_examples/EntityAutoFade.bb @@ -0,0 +1,20 @@ +; EntityAutoFade Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/EntityBlend.bb b/_release/help/commands/3d_examples/EntityBlend.bb new file mode 100644 index 0000000..e2e13a3 --- /dev/null +++ b/_release/help/commands/3d_examples/EntityBlend.bb @@ -0,0 +1,20 @@ +; EntityBlend Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/EntityBox.bb b/_release/help/commands/3d_examples/EntityBox.bb new file mode 100644 index 0000000..3418ccd --- /dev/null +++ b/_release/help/commands/3d_examples/EntityBox.bb @@ -0,0 +1,20 @@ +; EntityBox Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/EntityCollided.bb b/_release/help/commands/3d_examples/EntityCollided.bb new file mode 100644 index 0000000..96e1f47 --- /dev/null +++ b/_release/help/commands/3d_examples/EntityCollided.bb @@ -0,0 +1,20 @@ +; EntityCollided Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/EntityColor.bb b/_release/help/commands/3d_examples/EntityColor.bb new file mode 100644 index 0000000..a1541dd --- /dev/null +++ b/_release/help/commands/3d_examples/EntityColor.bb @@ -0,0 +1,46 @@ +; EntityColor Example +; ------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +cube=CreateCube() +PositionEntity cube,0,0,5 + +; Set initial entity color values +red#=255 +green#=255 +blue#=255 + +While Not KeyDown( 1 ) + + ; Change red, green, blue values depending on key pressed + If KeyDown( 2 )=True And red#>0 Then red#=red#-1 + If KeyDown( 3 )=True And red#<255 Then red#=red#+1 + If KeyDown( 4 )=True And green#>0 Then green#=green#-1 + If KeyDown( 5 )=True And green#<255 Then green#=green#+1 + If KeyDown( 6 )=True And blue#>0 Then blue#=blue#-1 + If KeyDown( 7 )=True And blue#<255 Then blue#=blue#+1 + + ; Set entity color using red, green, blue values + EntityColor cube,red#,green#,blue# + + TurnEntity cube,0.1,0.1,0.1 + + RenderWorld + + Text 0,0,"Press keys 1-6 to change EntityColor red#,green#,blue# values + Text 0,20,"Entity Red: "+red# + Text 0,40,"Entity Green: "+green# + Text 0,60,"Entity Blue: "+blue# + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/EntityDistance.bb b/_release/help/commands/3d_examples/EntityDistance.bb new file mode 100644 index 0000000..2a64dd7 --- /dev/null +++ b/_release/help/commands/3d_examples/EntityDistance.bb @@ -0,0 +1,20 @@ +; EntityDistance Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/EntityFX.bb b/_release/help/commands/3d_examples/EntityFX.bb new file mode 100644 index 0000000..c1c9726 --- /dev/null +++ b/_release/help/commands/3d_examples/EntityFX.bb @@ -0,0 +1,20 @@ +; EntityFX Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/EntityInView.bb b/_release/help/commands/3d_examples/EntityInView.bb new file mode 100644 index 0000000..0e46f0e --- /dev/null +++ b/_release/help/commands/3d_examples/EntityInView.bb @@ -0,0 +1,20 @@ +; EntityInView Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/EntityName.bb b/_release/help/commands/3d_examples/EntityName.bb new file mode 100644 index 0000000..039b606 --- /dev/null +++ b/_release/help/commands/3d_examples/EntityName.bb @@ -0,0 +1,20 @@ +; EntityName Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/EntityOrder.bb b/_release/help/commands/3d_examples/EntityOrder.bb new file mode 100644 index 0000000..f9fbb27 --- /dev/null +++ b/_release/help/commands/3d_examples/EntityOrder.bb @@ -0,0 +1,20 @@ +; EntityOrder Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/EntityParent.bb b/_release/help/commands/3d_examples/EntityParent.bb new file mode 100644 index 0000000..ff9bedb --- /dev/null +++ b/_release/help/commands/3d_examples/EntityParent.bb @@ -0,0 +1,20 @@ +; EntityParent Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/EntityPick.bb b/_release/help/commands/3d_examples/EntityPick.bb new file mode 100644 index 0000000..41c4156 --- /dev/null +++ b/_release/help/commands/3d_examples/EntityPick.bb @@ -0,0 +1,20 @@ +; EntityPick Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/EntityPickMode.bb b/_release/help/commands/3d_examples/EntityPickMode.bb new file mode 100644 index 0000000..9f68cad --- /dev/null +++ b/_release/help/commands/3d_examples/EntityPickMode.bb @@ -0,0 +1,20 @@ +; EntityPickMode Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/EntityPitch.bb b/_release/help/commands/3d_examples/EntityPitch.bb new file mode 100644 index 0000000..522f08a --- /dev/null +++ b/_release/help/commands/3d_examples/EntityPitch.bb @@ -0,0 +1,39 @@ +; EntityPitch Example +; ------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone( 32 ) +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + pitch#=0 + yaw#=0 + roll#=0 + + If KeyDown( 208 )=True Then pitch#=-1 + If KeyDown( 200 )=True Then pitch#=1 + If KeyDown( 203 )=True Then yaw#=-1 + If KeyDown( 205 )=True Then yaw#=1 + If KeyDown( 45 )=True Then roll#=-1 + If KeyDown( 44 )=True Then roll#=1 + + TurnEntity cone,pitch#,yaw#,roll# + + RenderWorld + + Text 0,0,"Use cursor/Z/X keys to turn cone" + + ; Return entity pitch angle of cone + Text 0,20,"Pitch: "+EntityPitch#( cone ) + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/EntityRadius.bb b/_release/help/commands/3d_examples/EntityRadius.bb new file mode 100644 index 0000000..85f18e1 --- /dev/null +++ b/_release/help/commands/3d_examples/EntityRadius.bb @@ -0,0 +1,66 @@ +; EntityRadius Example +; -------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +sphere=CreateSphere( 32 ) +PositionEntity sphere,-2,0,5 + +cone=CreateCone( 32 ) +EntityType cone,type_cone +PositionEntity cone,2,0,5 + +; Set collision type values +type_sphere=1 +type_cone=2 + +; Set sphere radius value +sphere_radius#=1 + +; Set sphere and cone entity types +EntityType sphere,type_sphere +EntityType cone,type_cone + +; Enable collisions between type_sphere and type_cone, with sphere->polygon method and slide response +Collisions type_sphere,type_cone,2,2 + +While Not KeyDown( 1 ) + + x#=0 + y#=0 + z#=0 + + If KeyDown( 203 )=True Then x#=-0.1 + If KeyDown( 205 )=True Then x#=0.1 + If KeyDown( 208 )=True Then y#=-0.1 + If KeyDown( 200 )=True Then y#=0.1 + If KeyDown( 44 )=True Then z#=-0.1 + If KeyDown( 30 )=True Then z#=0.1 + + MoveEntity sphere,x#,y#,z# + + ; If square brackets keys pressed then change sphere radius value + If KeyDown( 26 )=True Then sphere_radius#=sphere_radius#-0.1 + If KeyDown( 27 )=True Then sphere_radius#=sphere_radius#+0.1 + + ; Set entity radius of sphere + EntityRadius sphere,sphere_radius# + + ; Perform collision checking + UpdateWorld + + RenderWorld + + Text 0,0,"Use cursor/A/Z keys to move sphere" + Text 0,20,"Press [ or ] to change EntityRadius value" + Text 0,40,"EntityRadius sphere,"+sphere_radius + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/EntityRoll.bb b/_release/help/commands/3d_examples/EntityRoll.bb new file mode 100644 index 0000000..919bd20 --- /dev/null +++ b/_release/help/commands/3d_examples/EntityRoll.bb @@ -0,0 +1,39 @@ +; EntityRoll Example +; ------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone( 32 ) +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + pitch#=0 + yaw#=0 + roll#=0 + + If KeyDown( 208 )=True Then pitch#=-1 + If KeyDown( 200 )=True Then pitch#=1 + If KeyDown( 203 )=True Then yaw#=-1 + If KeyDown( 205 )=True Then yaw#=1 + If KeyDown( 45 )=True Then roll#=-1 + If KeyDown( 44 )=True Then roll#=1 + + TurnEntity cone,pitch#,yaw#,roll# + + RenderWorld + + Text 0,0,"Use cursor/Z/X keys to turn cone" + + ; Return entity roll angle of cone + Text 0,20,"Roll: "+EntityRoll#( cone ) + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/EntityShininess.bb b/_release/help/commands/3d_examples/EntityShininess.bb new file mode 100644 index 0000000..17e47b1 --- /dev/null +++ b/_release/help/commands/3d_examples/EntityShininess.bb @@ -0,0 +1,20 @@ +; EntityShininess Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/EntityTexture.bb b/_release/help/commands/3d_examples/EntityTexture.bb new file mode 100644 index 0000000..03cf1a6 --- /dev/null +++ b/_release/help/commands/3d_examples/EntityTexture.bb @@ -0,0 +1,41 @@ +; EntityTexture Example +; --------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +cube=CreateCube() +PositionEntity cube,0,0,5 + +; Load texture +tex=LoadTexture( "media/b3dlogo.jpg" ) + +; Texture entity +EntityTexture cube,tex + +While Not KeyDown( 1 ) + + pitch#=0 + yaw#=0 + roll#=0 + + If KeyDown( 208 )=True Then pitch#=-1 + If KeyDown( 200 )=True Then pitch#=1 + If KeyDown( 203 )=True Then yaw#=-1 + If KeyDown( 205 )=True Then yaw#=1 + If KeyDown( 45 )=True Then roll#=-1 + If KeyDown( 44 )=True Then roll#=1 + + TurnEntity cube,pitch#,yaw#,roll# + + RenderWorld + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/EntityType.bb b/_release/help/commands/3d_examples/EntityType.bb new file mode 100644 index 0000000..f495af6 --- /dev/null +++ b/_release/help/commands/3d_examples/EntityType.bb @@ -0,0 +1,20 @@ +; EntityType Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/EntityVisible.bb b/_release/help/commands/3d_examples/EntityVisible.bb new file mode 100644 index 0000000..9aebcd6 --- /dev/null +++ b/_release/help/commands/3d_examples/EntityVisible.bb @@ -0,0 +1,20 @@ +; EntityVisible Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/EntityX.bb b/_release/help/commands/3d_examples/EntityX.bb new file mode 100644 index 0000000..c5ded4c --- /dev/null +++ b/_release/help/commands/3d_examples/EntityX.bb @@ -0,0 +1,39 @@ +; EntityX Example +; --------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone( 32 ) +PositionEntity cone,0,0,10 + +While Not KeyDown( 1 ) + + x#=0 + y#=0 + z#=0 + + If KeyDown(203)=True Then x#=-0.1 + If KeyDown(205)=True Then x#=0.1 + If KeyDown(208)=True Then y#=-0.1 + If KeyDown(200)=True Then y#=0.1 + If KeyDown(44)=True Then z#=-0.1 + If KeyDown(30)=True Then z#=0.1 + + MoveEntity cone,x#,y#,z# + + RenderWorld + + Text 0,0,"Use cursor/A/Z keys to move cone" + + ; Return entity x position of cone + Text 0,20,"X Position: "+EntityX#( cone ) + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/EntityY.bb b/_release/help/commands/3d_examples/EntityY.bb new file mode 100644 index 0000000..4c8e666 --- /dev/null +++ b/_release/help/commands/3d_examples/EntityY.bb @@ -0,0 +1,39 @@ +; EntityY Example +; --------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone( 32 ) +PositionEntity cone,0,0,10 + +While Not KeyDown( 1 ) + + x#=0 + y#=0 + z#=0 + + If KeyDown(203)=True Then x#=-0.1 + If KeyDown(205)=True Then x#=0.1 + If KeyDown(208)=True Then y#=-0.1 + If KeyDown(200)=True Then y#=0.1 + If KeyDown(44)=True Then z#=-0.1 + If KeyDown(30)=True Then z#=0.1 + + MoveEntity cone,x#,y#,z# + + RenderWorld + + Text 0,0,"Use cursor/A/Z keys to move cone" + + ; Return entity y position of cone + Text 0,20,"Y Position: "+EntityY#( cone ) + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/EntityYaw.bb b/_release/help/commands/3d_examples/EntityYaw.bb new file mode 100644 index 0000000..2b6da01 --- /dev/null +++ b/_release/help/commands/3d_examples/EntityYaw.bb @@ -0,0 +1,39 @@ +; EntityYaw Example +; ----------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone( 32 ) +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + pitch#=0 + yaw#=0 + roll#=0 + + If KeyDown( 208 )=True Then pitch#=-1 + If KeyDown( 200 )=True Then pitch#=1 + If KeyDown( 203 )=True Then yaw#=-1 + If KeyDown( 205 )=True Then yaw#=1 + If KeyDown( 45 )=True Then roll#=-1 + If KeyDown( 44 )=True Then roll#=1 + + TurnEntity cone,pitch#,yaw#,roll# + + RenderWorld + + Text 0,0,"Use cursor/Z/X keys to turn cone" + + ; Return entity yaw angle of cone + Text 0,20,"Yaw: "+EntityYaw#( cone ) + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/EntityZ.bb b/_release/help/commands/3d_examples/EntityZ.bb new file mode 100644 index 0000000..7e53d7a --- /dev/null +++ b/_release/help/commands/3d_examples/EntityZ.bb @@ -0,0 +1,39 @@ +; EntityZ Example +; --------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone( 32 ) +PositionEntity cone,0,0,10 + +While Not KeyDown( 1 ) + + x#=0 + y#=0 + z#=0 + + If KeyDown(203)=True Then x#=-0.1 + If KeyDown(205)=True Then x#=0.1 + If KeyDown(208)=True Then y#=-0.1 + If KeyDown(200)=True Then y#=0.1 + If KeyDown(44)=True Then z#=-0.1 + If KeyDown(30)=True Then z#=0.1 + + MoveEntity cone,x#,y#,z# + + RenderWorld + + Text 0,0,"Use cursor/A/Z keys to move cone" + + ; Return entity z position of cone + Text 0,20,"Z Position: "+EntityZ#( cone ) + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/FindChild.bb b/_release/help/commands/3d_examples/FindChild.bb new file mode 100644 index 0000000..a3244a2 --- /dev/null +++ b/_release/help/commands/3d_examples/FindChild.bb @@ -0,0 +1,20 @@ +; FindChild Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/FindSurface.bb b/_release/help/commands/3d_examples/FindSurface.bb new file mode 100644 index 0000000..814aa6e --- /dev/null +++ b/_release/help/commands/3d_examples/FindSurface.bb @@ -0,0 +1,20 @@ +; FindSurface Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/FitMesh.bb b/_release/help/commands/3d_examples/FitMesh.bb new file mode 100644 index 0000000..b49b1f5 --- /dev/null +++ b/_release/help/commands/3d_examples/FitMesh.bb @@ -0,0 +1,20 @@ +; FitMesh Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/FlipMesh.bb b/_release/help/commands/3d_examples/FlipMesh.bb new file mode 100644 index 0000000..126d606 --- /dev/null +++ b/_release/help/commands/3d_examples/FlipMesh.bb @@ -0,0 +1,31 @@ +; FlipMesh Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +; Create sphere +sphere=CreateSphere() + +; Scale sphere +ScaleEntity sphere,100,100,100 + +; Texture sphere with sky texture +sky_tex=LoadTexture("../media/sky.bmp") +EntityTexture sphere,sky_tex + +; Flip mesh so we can see the inside of it +FlipMesh sphere + +Color 0,0,0 + +While Not KeyDown( 1 ) + RenderWorld + Text 0,0,"You are viewing a flipped sphere mesh - makes a great sky!" + Flip +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/FreeBrush.bb b/_release/help/commands/3d_examples/FreeBrush.bb new file mode 100644 index 0000000..f327cfb --- /dev/null +++ b/_release/help/commands/3d_examples/FreeBrush.bb @@ -0,0 +1,46 @@ +; FreeTexture Example +; ------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +cube=CreateCube() +PositionEntity cube,0,0,5 + +; Load texture +tex=LoadTexture("../media/b3dlogo.jpg") + +; Texture cube with texture +EntityTexture cube,tex + +While Not KeyDown( 1 ) + + ; If spacebar pressed then free texture + If KeyHit( 57 )=True Then FreeTexture tex + + pitch#=0 + yaw#=0 + roll#=0 + + If KeyDown( 208 )=True Then pitch#=-1 + If KeyDown( 200 )=True Then pitch#=1 + If KeyDown( 203 )=True Then yaw#=-1 + If KeyDown( 205 )=True Then yaw#=1 + If KeyDown( 45 )=True Then roll#=-1 + If KeyDown( 44 )=True Then roll#=1 + + TurnEntity cube,pitch#,yaw#,roll# + + RenderWorld + Text 0,0,"Press spacebar to free texture" + Text 0,20,"As you can see this will not effect already textured entities" + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/FreeEntity.bb b/_release/help/commands/3d_examples/FreeEntity.bb new file mode 100644 index 0000000..e684ba7 --- /dev/null +++ b/_release/help/commands/3d_examples/FreeEntity.bb @@ -0,0 +1,20 @@ +; FreeEntity Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/FreeTexture.bb b/_release/help/commands/3d_examples/FreeTexture.bb new file mode 100644 index 0000000..f327cfb --- /dev/null +++ b/_release/help/commands/3d_examples/FreeTexture.bb @@ -0,0 +1,46 @@ +; FreeTexture Example +; ------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +cube=CreateCube() +PositionEntity cube,0,0,5 + +; Load texture +tex=LoadTexture("../media/b3dlogo.jpg") + +; Texture cube with texture +EntityTexture cube,tex + +While Not KeyDown( 1 ) + + ; If spacebar pressed then free texture + If KeyHit( 57 )=True Then FreeTexture tex + + pitch#=0 + yaw#=0 + roll#=0 + + If KeyDown( 208 )=True Then pitch#=-1 + If KeyDown( 200 )=True Then pitch#=1 + If KeyDown( 203 )=True Then yaw#=-1 + If KeyDown( 205 )=True Then yaw#=1 + If KeyDown( 45 )=True Then roll#=-1 + If KeyDown( 44 )=True Then roll#=1 + + TurnEntity cube,pitch#,yaw#,roll# + + RenderWorld + Text 0,0,"Press spacebar to free texture" + Text 0,20,"As you can see this will not effect already textured entities" + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/GetChild.bb b/_release/help/commands/3d_examples/GetChild.bb new file mode 100644 index 0000000..05653dd --- /dev/null +++ b/_release/help/commands/3d_examples/GetChild.bb @@ -0,0 +1,20 @@ +; GetChild Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/GetEntityType.bb b/_release/help/commands/3d_examples/GetEntityType.bb new file mode 100644 index 0000000..fc62086 --- /dev/null +++ b/_release/help/commands/3d_examples/GetEntityType.bb @@ -0,0 +1,20 @@ +; GetEntityType Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/GetParent.bb b/_release/help/commands/3d_examples/GetParent.bb new file mode 100644 index 0000000..7140b6a --- /dev/null +++ b/_release/help/commands/3d_examples/GetParent.bb @@ -0,0 +1,20 @@ +; GetParent Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/GetSurface.bb b/_release/help/commands/3d_examples/GetSurface.bb new file mode 100644 index 0000000..741bcaf --- /dev/null +++ b/_release/help/commands/3d_examples/GetSurface.bb @@ -0,0 +1,22 @@ +; LoadMesh Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +; Load mesh +drum=LoadMesh("media/oil-drum/oildrum.3ds") + +PositionEntity drum,0,0,MeshDepth(drum)*2 + +While Not KeyDown( 1 ) + RenderWorld + Flip +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/GfxDriver3D.bb b/_release/help/commands/3d_examples/GfxDriver3D.bb new file mode 100644 index 0000000..b9e5674 --- /dev/null +++ b/_release/help/commands/3d_examples/GfxDriver3D.bb @@ -0,0 +1,11 @@ +For a = 1 To CountGfxDrivers () + + If GfxDriver3D (a) + Print GfxDriverName (a) + " is 3D-capable" + Else + Print GfxDriverName (a) + " is NOT 3D-capable" + EndIf + + Delay 100 + +Next \ No newline at end of file diff --git a/_release/help/commands/3d_examples/GfxMode3D.bb b/_release/help/commands/3d_examples/GfxMode3D.bb new file mode 100644 index 0000000..984ae44 --- /dev/null +++ b/_release/help/commands/3d_examples/GfxMode3D.bb @@ -0,0 +1,12 @@ + +For a = 1 To CountGfxModes () + + If GfxMode3D (a) + Print "Mode " + a + " is 3D-capable" + Else + Print "Mode " + a + " is NOT 3D-capable" + EndIf + + Delay 100 + +Next \ No newline at end of file diff --git a/_release/help/commands/3d_examples/GfxModeExists.bb b/_release/help/commands/3d_examples/GfxModeExists.bb new file mode 100644 index 0000000..a0836f0 --- /dev/null +++ b/_release/help/commands/3d_examples/GfxModeExists.bb @@ -0,0 +1,5 @@ +If GfxModeExists (2500, 2500, 64) + Graphics 2500, 2500, 64 +Else + RuntimeError "Domestic PC display hardware isn't yet capable of silly resolutions like 2500 x 2500 x 64-bit!" +EndIf diff --git a/_release/help/commands/3d_examples/Graphics3D.bb b/_release/help/commands/3d_examples/Graphics3D.bb new file mode 100644 index 0000000..1d3437b --- /dev/null +++ b/_release/help/commands/3d_examples/Graphics3D.bb @@ -0,0 +1,19 @@ +; Graphics3D Example +; ------------------ + +; Sets 3D graphics mode +Graphics3D 640,480,16,0 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone( 32 ) +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + RenderWorld + Flip +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/HWMultiTex.bb b/_release/help/commands/3d_examples/HWMultiTex.bb new file mode 100644 index 0000000..2f7d3ca --- /dev/null +++ b/_release/help/commands/3d_examples/HWMultiTex.bb @@ -0,0 +1,20 @@ +; HWMultiTex Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/HandleSprite.bb b/_release/help/commands/3d_examples/HandleSprite.bb new file mode 100644 index 0000000..38a0267 --- /dev/null +++ b/_release/help/commands/3d_examples/HandleSprite.bb @@ -0,0 +1,20 @@ +; HandleSprite Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/HideEntity.bb b/_release/help/commands/3d_examples/HideEntity.bb new file mode 100644 index 0000000..e0a64a2 --- /dev/null +++ b/_release/help/commands/3d_examples/HideEntity.bb @@ -0,0 +1,20 @@ +; HideEntity Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/LightColor.bb b/_release/help/commands/3d_examples/LightColor.bb new file mode 100644 index 0000000..f90e660 --- /dev/null +++ b/_release/help/commands/3d_examples/LightColor.bb @@ -0,0 +1,20 @@ +; LightColor Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/LightConeAngles.bb b/_release/help/commands/3d_examples/LightConeAngles.bb new file mode 100644 index 0000000..c288176 --- /dev/null +++ b/_release/help/commands/3d_examples/LightConeAngles.bb @@ -0,0 +1,20 @@ +; LightConeAngles Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/LightMesh.bb b/_release/help/commands/3d_examples/LightMesh.bb new file mode 100644 index 0000000..350909e --- /dev/null +++ b/_release/help/commands/3d_examples/LightMesh.bb @@ -0,0 +1,20 @@ +; LightMesh Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/LightRange.bb b/_release/help/commands/3d_examples/LightRange.bb new file mode 100644 index 0000000..feb5e73 --- /dev/null +++ b/_release/help/commands/3d_examples/LightRange.bb @@ -0,0 +1,20 @@ +; LightRange Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/LinePick.bb b/_release/help/commands/3d_examples/LinePick.bb new file mode 100644 index 0000000..35bfd80 --- /dev/null +++ b/_release/help/commands/3d_examples/LinePick.bb @@ -0,0 +1,20 @@ +; LinePick Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/Load3DSound.bb b/_release/help/commands/3d_examples/Load3DSound.bb new file mode 100644 index 0000000..be97780 --- /dev/null +++ b/_release/help/commands/3d_examples/Load3DSound.bb @@ -0,0 +1,20 @@ +; Load3DSound Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/LoadAnimMesh.bb b/_release/help/commands/3d_examples/LoadAnimMesh.bb new file mode 100644 index 0000000..fa36478 --- /dev/null +++ b/_release/help/commands/3d_examples/LoadAnimMesh.bb @@ -0,0 +1,20 @@ +; LoadAnimMesh Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/LoadAnimSeq.bb b/_release/help/commands/3d_examples/LoadAnimSeq.bb new file mode 100644 index 0000000..40432a1 --- /dev/null +++ b/_release/help/commands/3d_examples/LoadAnimSeq.bb @@ -0,0 +1,20 @@ +; LoadAnimSeq Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/LoadAnimTexture.bb b/_release/help/commands/3d_examples/LoadAnimTexture.bb new file mode 100644 index 0000000..3156510 --- /dev/null +++ b/_release/help/commands/3d_examples/LoadAnimTexture.bb @@ -0,0 +1,24 @@ +; LoadAnimTexture Example +; ----------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCube() +PositionEntity cone,0,0,5 + +kaboom=LoadAnimTexture("media/kaboom.bmp",1,60,48,2,2) + +While Not KeyDown( 1 ) + + EntityTexture cone,kaboom,1 + + RenderWorld + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/LoadBrush.bb b/_release/help/commands/3d_examples/LoadBrush.bb new file mode 100644 index 0000000..9d82df0 --- /dev/null +++ b/_release/help/commands/3d_examples/LoadBrush.bb @@ -0,0 +1,20 @@ +; LoadBrush Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/LoadMD2.bb b/_release/help/commands/3d_examples/LoadMD2.bb new file mode 100644 index 0000000..0e232c1 --- /dev/null +++ b/_release/help/commands/3d_examples/LoadMD2.bb @@ -0,0 +1,29 @@ +; LoadMD2 Example +; --------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +; Load md2 +gargoyle=LoadMD2( "media/gargoyle/gargoyle.md2" ) + +; Load md2 texture +garg_tex=LoadTexture( "media/gargoyle/gargoyle.bmp" ) + +; Apply md2 texture to md2 +EntityTexture gargoyle,garg_tex + +PositionEntity gargoyle,0,-45,100 +RotateEntity gargoyle,0,180,0 + +While Not KeyDown( 1 ) + RenderWorld + Flip +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/LoadMesh.bb b/_release/help/commands/3d_examples/LoadMesh.bb new file mode 100644 index 0000000..741bcaf --- /dev/null +++ b/_release/help/commands/3d_examples/LoadMesh.bb @@ -0,0 +1,22 @@ +; LoadMesh Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +; Load mesh +drum=LoadMesh("media/oil-drum/oildrum.3ds") + +PositionEntity drum,0,0,MeshDepth(drum)*2 + +While Not KeyDown( 1 ) + RenderWorld + Flip +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/LoadSprite.bb b/_release/help/commands/3d_examples/LoadSprite.bb new file mode 100644 index 0000000..27160b5 --- /dev/null +++ b/_release/help/commands/3d_examples/LoadSprite.bb @@ -0,0 +1,20 @@ +; LoadSprite Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/LoadTerrain.bb b/_release/help/commands/3d_examples/LoadTerrain.bb new file mode 100644 index 0000000..6220d1b --- /dev/null +++ b/_release/help/commands/3d_examples/LoadTerrain.bb @@ -0,0 +1,56 @@ +; LoadTerrain Example +; ------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +PositionEntity camera,1,1,1 + +light=CreateLight() +RotateEntity light,90,0,0 + +; Load terrain +terrain=LoadTerrain( "media/height_map.bmp" ) + +; Set terrain detail, enable vertex morphing +TerrainDetail terrain,4000,True + +; Scale terrain +ScaleEntity terrain,1,50,1 + +; Texture terrain +grass_tex=LoadTexture( "media/mossyground.bmp" ) +EntityTexture terrain,grass_tex,0,1 + +While Not KeyDown( 1 ) + + If KeyDown( 203 )=True Then x#=x#-0.1 + If KeyDown( 205 )=True Then x#=x#+0.1 + If KeyDown( 208 )=True Then y#=y#-0.1 + If KeyDown( 200 )=True Then y#=y#+0.1 + If KeyDown( 44 )=True Then z#=z#-0.1 + If KeyDown( 30 )=True Then z#=z#+0.1 + + If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0 + If KeyDown( 203 )=True Then TurnEntity camera,0,1,0 + If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.1 + If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.1 + + x#=EntityX(camera) + y#=EntityY(camera) + z#=EntityZ(camera) + + terra_y#=TerrainY(terrain,x#,y#,z#)+5 + + PositionEntity camera,x#,terra_y#,z# + + RenderWorld + + Text 0,0,"Use cursor keys to move about the terrain" + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/LoadTexture.bb b/_release/help/commands/3d_examples/LoadTexture.bb new file mode 100644 index 0000000..e61cda3 --- /dev/null +++ b/_release/help/commands/3d_examples/LoadTexture.bb @@ -0,0 +1,41 @@ +; LoadTexture Example +; ------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +cube=CreateCube() +PositionEntity cube,0,0,5 + +; Load texture +tex=LoadTexture("../media/b3dlogo.jpg") + +; Texture cube with texture +EntityTexture cube,tex + +While Not KeyDown( 1 ) + + pitch#=0 + yaw#=0 + roll#=0 + + If KeyDown( 208 )=True Then pitch#=-1 + If KeyDown( 200 )=True Then pitch#=1 + If KeyDown( 203 )=True Then yaw#=-1 + If KeyDown( 205 )=True Then yaw#=1 + If KeyDown( 45 )=True Then roll#=-1 + If KeyDown( 44 )=True Then roll#=1 + + TurnEntity cube,pitch#,yaw#,roll# + + RenderWorld + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/LoaderMatrix.bb b/_release/help/commands/3d_examples/LoaderMatrix.bb new file mode 100644 index 0000000..e45b4cd --- /dev/null +++ b/_release/help/commands/3d_examples/LoaderMatrix.bb @@ -0,0 +1,20 @@ +; LoadMatrix Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/MD2AnimLength.bb b/_release/help/commands/3d_examples/MD2AnimLength.bb new file mode 100644 index 0000000..8bacec7 --- /dev/null +++ b/_release/help/commands/3d_examples/MD2AnimLength.bb @@ -0,0 +1,35 @@ +; MD2AnimLength Example +; --------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +; Load md2 +gargoyle=LoadMD2( "media/gargoyle/gargoyle.md2") + +; Load md2 texture +garg_tex=LoadTexture( "media/gargoyle/gargoyle.bmp" ) + +; Apply md2 texture to md2 +EntityTexture gargoyle,garg_tex + +PositionEntity gargoyle,0,-45,100 +RotateEntity gargoyle,0,180,0 + +While Not KeyDown( 1 ) + + RenderWorld + + ; Output animation length to screen + Text 0,0,"MD2AnimLength: "+MD2AnimLength( gargoyle ) + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/MD2AnimTime.bb b/_release/help/commands/3d_examples/MD2AnimTime.bb new file mode 100644 index 0000000..f9fe5ca --- /dev/null +++ b/_release/help/commands/3d_examples/MD2AnimTime.bb @@ -0,0 +1,39 @@ +; MD2AnimTime Example +; ------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +; Load md2 +gargoyle=LoadMD2( "media/gargoyle/gargoyle.md2") + +; Load md2 texture +garg_tex=LoadTexture( "media/gargoyle/gargoyle.bmp" ) + +; Apply md2 texture to md2 +EntityTexture gargoyle,garg_tex + +; Animate md2 +AnimateMD2 gargoyle,1,0.1,32,46 + +PositionEntity gargoyle,0,-45,100 +RotateEntity gargoyle,0,180,0 + +While Not KeyDown( 1 ) + + UpdateWorld + RenderWorld + + ; Output current animation frame to screen + Text 0,0,"MD2AnimTime: "+MD2AnimTime( gargoyle ) + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/MD2Animating.bb b/_release/help/commands/3d_examples/MD2Animating.bb new file mode 100644 index 0000000..47bfba1 --- /dev/null +++ b/_release/help/commands/3d_examples/MD2Animating.bb @@ -0,0 +1,41 @@ +; MD2Animating Example +; -------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +; Load md2 +gargoyle=LoadMD2( "media/gargoyle/gargoyle.md2") + +; Load md2 texture +garg_tex=LoadTexture( "media/gargoyle/gargoyle.bmp" ) + +; Apply md2 texture to md2 +EntityTexture gargoyle,garg_tex + +PositionEntity gargoyle,0,-45,100 +RotateEntity gargoyle,0,180,0 + +While Not KeyDown( 1 ) + + ; Toggle animation stop/start when spacebar pressed + If KeyHit( 57 )=True start=1-start : AnimateMD2 gargoyle,start,0.1,32,46 + + UpdateWorld + RenderWorld + + Text 0,0,"Press spacebar to stop/start md2 animation" + + ; Output current md2 animation status to screen + Text 0,20,"MD2Animating: "+MD2Animating( gargoyle ) + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/MeshDepth.bb b/_release/help/commands/3d_examples/MeshDepth.bb new file mode 100644 index 0000000..269ee44 --- /dev/null +++ b/_release/help/commands/3d_examples/MeshDepth.bb @@ -0,0 +1,20 @@ +; MeshDepth Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/MeshHeight.bb b/_release/help/commands/3d_examples/MeshHeight.bb new file mode 100644 index 0000000..4f61668 --- /dev/null +++ b/_release/help/commands/3d_examples/MeshHeight.bb @@ -0,0 +1,20 @@ +; MeshHeight Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/MeshWidth.bb b/_release/help/commands/3d_examples/MeshWidth.bb new file mode 100644 index 0000000..75668df --- /dev/null +++ b/_release/help/commands/3d_examples/MeshWidth.bb @@ -0,0 +1,20 @@ +; MeshWidth Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/MeshesIntersect.bb b/_release/help/commands/3d_examples/MeshesIntersect.bb new file mode 100644 index 0000000..088e9e9 --- /dev/null +++ b/_release/help/commands/3d_examples/MeshesIntersect.bb @@ -0,0 +1,32 @@ +; MeshesIntersect Example +; ----------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +drum=LoadMesh("media/oil-drum/oildrum.3ds") +PositionEntity drum,-20,0,100 + +crate=LoadMesh("media/wood-crate/wcrate1.3ds") +PositionEntity crate,20,0,100 + +While Not KeyDown( 1 ) + + TurnEntity drum,1,1,1 + TurnEntity crate,-1,-1,-1 + + RenderWorld + + ; Test to see if drum and crate meshes are intersecting; if so then display message to confirm this + If MeshesIntersect(drum,crate)=True Then Text 0,0,"Meshes are intersecting!" + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/ModifyTerrain.bb b/_release/help/commands/3d_examples/ModifyTerrain.bb new file mode 100644 index 0000000..e77a822 --- /dev/null +++ b/_release/help/commands/3d_examples/ModifyTerrain.bb @@ -0,0 +1,20 @@ +; ModifyTerrain Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/MoveEntity.bb b/_release/help/commands/3d_examples/MoveEntity.bb new file mode 100644 index 0000000..265dec1 --- /dev/null +++ b/_release/help/commands/3d_examples/MoveEntity.bb @@ -0,0 +1,47 @@ +; MoveEntity Example +; ------------------ + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone( 32 ) + +; Move cone in front of camera, so we can see it to begin with +MoveEntity cone,0,0,10 + +While Not KeyDown( 1 ) + + ; Reset movement values - otherwise, the cone will not stop! + x#=0 + y#=0 + z#=0 + + ; Change rotation values depending on the key pressed + If KeyDown( 203 )=True Then x#=-0.1 + If KeyDown( 205 )=True Then x#=0.1 + If KeyDown( 208 )=True Then y#=-0.1 + If KeyDown( 200 )=True Then y#=0.1 + If KeyDown( 44 )=True Then z#=-0.1 + If KeyDown( 30 )=True Then z#=0.1 + + ; Move cone using movement values + MoveEntity cone,x#,y#,z# + + ; If spacebar pressed then rotate cone by random amount + If KeyHit( 57 )=True Then RotateEntity cone,Rnd( 0,360 ),Rnd( 0,360 ),Rnd( 0,360 ) + + RenderWorld + + Text 0,0,"Use cursor/A/Z keys to move cone, spacebar to rotate cone by random amount" + Text 0,20,"X Movement: "+x# + Text 0,40,"Y Movement: "+y# + Text 0,60,"Z Movement: "+z# + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/NameEntity.bb b/_release/help/commands/3d_examples/NameEntity.bb new file mode 100644 index 0000000..75cd65b --- /dev/null +++ b/_release/help/commands/3d_examples/NameEntity.bb @@ -0,0 +1,20 @@ +; NameEntity Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/PaintEntity.bb b/_release/help/commands/3d_examples/PaintEntity.bb new file mode 100644 index 0000000..771ae3c --- /dev/null +++ b/_release/help/commands/3d_examples/PaintEntity.bb @@ -0,0 +1,20 @@ +; PaintEntity Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/PaintMesh.bb b/_release/help/commands/3d_examples/PaintMesh.bb new file mode 100644 index 0000000..16ceef3 --- /dev/null +++ b/_release/help/commands/3d_examples/PaintMesh.bb @@ -0,0 +1,51 @@ +; PaintMesh Example +; ----------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +cube=CreateCube() +PositionEntity cube,0,0,5 + +; Load texture +tex=LoadTexture("../media/b3dlogo.jpg") + +; Create brush +brush=CreateBrush() + +; Apply texture to brush +BrushTexture brush,tex + +; And some other effects +BrushColor brush,0,0,255 +BrushShininess brush,1 + +; Paint mesh with brush +PaintMesh cube,brush + +While Not KeyDown( 1 ) + + pitch#=0 + yaw#=0 + roll#=0 + + If KeyDown( 208 )=True Then pitch#=-1 + If KeyDown( 200 )=True Then pitch#=1 + If KeyDown( 203 )=True Then yaw#=-1 + If KeyDown( 205 )=True Then yaw#=1 + If KeyDown( 45 )=True Then roll#=-1 + If KeyDown( 44 )=True Then roll#=1 + + TurnEntity cube,pitch#,yaw#,roll# + + RenderWorld + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/PaintSurface.bb b/_release/help/commands/3d_examples/PaintSurface.bb new file mode 100644 index 0000000..d3c9792 --- /dev/null +++ b/_release/help/commands/3d_examples/PaintSurface.bb @@ -0,0 +1,20 @@ +; PaintSurface Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/PickedEntity.bb b/_release/help/commands/3d_examples/PickedEntity.bb new file mode 100644 index 0000000..254e7e0 --- /dev/null +++ b/_release/help/commands/3d_examples/PickedEntity.bb @@ -0,0 +1,20 @@ +; PickedEntity Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/PickedNX.bb b/_release/help/commands/3d_examples/PickedNX.bb new file mode 100644 index 0000000..d04afce --- /dev/null +++ b/_release/help/commands/3d_examples/PickedNX.bb @@ -0,0 +1,20 @@ +; PickedNX Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/PickedNY.bb b/_release/help/commands/3d_examples/PickedNY.bb new file mode 100644 index 0000000..daab254 --- /dev/null +++ b/_release/help/commands/3d_examples/PickedNY.bb @@ -0,0 +1,20 @@ +; PickedNY Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/PickedNZ.bb b/_release/help/commands/3d_examples/PickedNZ.bb new file mode 100644 index 0000000..608a8d1 --- /dev/null +++ b/_release/help/commands/3d_examples/PickedNZ.bb @@ -0,0 +1,20 @@ +; PickedNZ Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/PickedSurface.bb b/_release/help/commands/3d_examples/PickedSurface.bb new file mode 100644 index 0000000..0ec0a83 --- /dev/null +++ b/_release/help/commands/3d_examples/PickedSurface.bb @@ -0,0 +1,20 @@ +; PickedSurface Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/PickedTime.bb b/_release/help/commands/3d_examples/PickedTime.bb new file mode 100644 index 0000000..23c68f7 --- /dev/null +++ b/_release/help/commands/3d_examples/PickedTime.bb @@ -0,0 +1,20 @@ +; PickedTime Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/PickedTriangle.bb b/_release/help/commands/3d_examples/PickedTriangle.bb new file mode 100644 index 0000000..9697281 --- /dev/null +++ b/_release/help/commands/3d_examples/PickedTriangle.bb @@ -0,0 +1,20 @@ +; PickedTriangle Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/PickedX.bb b/_release/help/commands/3d_examples/PickedX.bb new file mode 100644 index 0000000..db48874 --- /dev/null +++ b/_release/help/commands/3d_examples/PickedX.bb @@ -0,0 +1,20 @@ +; PickedX Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/PickedY.bb b/_release/help/commands/3d_examples/PickedY.bb new file mode 100644 index 0000000..adcfd99 --- /dev/null +++ b/_release/help/commands/3d_examples/PickedY.bb @@ -0,0 +1,20 @@ +; PickedY Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/PickedZ.bb b/_release/help/commands/3d_examples/PickedZ.bb new file mode 100644 index 0000000..48ae119 --- /dev/null +++ b/_release/help/commands/3d_examples/PickedZ.bb @@ -0,0 +1,20 @@ +; PickedZ Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/PointEntity.bb b/_release/help/commands/3d_examples/PointEntity.bb new file mode 100644 index 0000000..613bdfa --- /dev/null +++ b/_release/help/commands/3d_examples/PointEntity.bb @@ -0,0 +1,20 @@ +; PointEntity Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/PositionEntity.bb b/_release/help/commands/3d_examples/PositionEntity.bb new file mode 100644 index 0000000..9c8f5c7 --- /dev/null +++ b/_release/help/commands/3d_examples/PositionEntity.bb @@ -0,0 +1,41 @@ +; PositionEntity Example +; ---------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone( 32 ) + +; Set position values so that cone is positioned in front of camera, so we can see it to begin with +x#=0 +y#=0 +z#=10 + +While Not KeyDown( 1 ) + + ; Change position values depending on key pressed + If KeyDown( 203 )=True Then x#=x#-0.1 + If KeyDown( 205 )=True Then x#=x#+0.1 + If KeyDown( 208 )=True Then y#=y#-0.1 + If KeyDown( 200 )=True Then y#=y#+0.1 + If KeyDown( 44 )=True Then z#=z#-0.1 + If KeyDown( 30 )=True Then z#=z#+0.1 + + ; Position cone using position values + PositionEntity cone,x#,y#,z# + + RenderWorld + + Text 0,0,"Use cursor/A/Z keys to change cone position" + Text 0,20,"X Position: "+x# + Text 0,40,"Y Position: "+y# + Text 0,60,"Z Position: "+z# + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/PositionMesh.bb b/_release/help/commands/3d_examples/PositionMesh.bb new file mode 100644 index 0000000..7928da4 --- /dev/null +++ b/_release/help/commands/3d_examples/PositionMesh.bb @@ -0,0 +1,20 @@ +; PositionMesh Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/PositionTexture.bb b/_release/help/commands/3d_examples/PositionTexture.bb new file mode 100644 index 0000000..3948a45 --- /dev/null +++ b/_release/help/commands/3d_examples/PositionTexture.bb @@ -0,0 +1,48 @@ +; PositionTexture Example +; ----------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +cube=CreateCube() +PositionEntity cube,0,0,5 + +; Load texture +tex=LoadTexture( "media/b3dlogo.jpg" ) + +; Texture cube +EntityTexture cube,tex + +; Set initial uv position values +u_position#=1 +v_position#=1 + +While Not KeyDown( 1 ) + + ; Change uv position values depending on key pressed + If KeyDown( 208 )=True Then u_position#=u_position#-0.01 + If KeyDown( 200 )=True Then u_position#=u_position#+0.01 + If KeyDown( 203 )=True Then v_position#=v_position#-0.01 + If KeyDown( 205 )=True Then v_position#=v_position#+0.01 + + ; Position texture + PositionTexture tex,u_position#,v_position# + + TurnEntity cube,0.1,0.1,0.1 + + RenderWorld + + Text 0,0,"Use cursor keys to change uv position values" + Text 0,20,"u_position#="+u_position# + Text 0,40,"v_position#="+v_position# + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/ProjectedX.bb b/_release/help/commands/3d_examples/ProjectedX.bb new file mode 100644 index 0000000..a3be65a --- /dev/null +++ b/_release/help/commands/3d_examples/ProjectedX.bb @@ -0,0 +1,20 @@ +; ProjectedX Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/ProjectedY.bb b/_release/help/commands/3d_examples/ProjectedY.bb new file mode 100644 index 0000000..d0e894b --- /dev/null +++ b/_release/help/commands/3d_examples/ProjectedY.bb @@ -0,0 +1,20 @@ +; ProjectedY Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/ProjectedZ.bb b/_release/help/commands/3d_examples/ProjectedZ.bb new file mode 100644 index 0000000..cc2cf2e --- /dev/null +++ b/_release/help/commands/3d_examples/ProjectedZ.bb @@ -0,0 +1,20 @@ +; ProjectedZ Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/RenderWorld.bb b/_release/help/commands/3d_examples/RenderWorld.bb new file mode 100644 index 0000000..731ff94 --- /dev/null +++ b/_release/help/commands/3d_examples/RenderWorld.bb @@ -0,0 +1,20 @@ +; RenderWorld Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/ResetEntity.bb b/_release/help/commands/3d_examples/ResetEntity.bb new file mode 100644 index 0000000..8d67ffe --- /dev/null +++ b/_release/help/commands/3d_examples/ResetEntity.bb @@ -0,0 +1,20 @@ +; ResetEntity Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/RotateEntity.bb b/_release/help/commands/3d_examples/RotateEntity.bb new file mode 100644 index 0000000..8e723fc --- /dev/null +++ b/_release/help/commands/3d_examples/RotateEntity.bb @@ -0,0 +1,37 @@ +; RotateEntity Example +; -------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone( 32 ) +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + ; Change rotation values depending on the key pressed + If KeyDown( 208 )=True Then pitch#=pitch#-1 + If KeyDown( 200 )=True Then pitch#=pitch#+1 + If KeyDown( 203 )=True Then yaw#=yaw#-1 + If KeyDown( 205 )=True Then yaw#=yaw#+1 + If KeyDown( 45 )=True Then roll#=roll#-1 + If KeyDown( 44 )=True Then roll#=roll#+1 + + ; Rotate cone using rotation values + RotateEntity cone,pitch#,yaw#,roll# + + RenderWorld + + Text 0,0,"Use cursor/Z/X keys to change cone rotation" + Text 0,20,"Pitch: "+pitch# + Text 0,40,"Yaw : "+yaw# + Text 0,60,"Roll : "+roll# + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/RotateMesh.bb b/_release/help/commands/3d_examples/RotateMesh.bb new file mode 100644 index 0000000..3412f35 --- /dev/null +++ b/_release/help/commands/3d_examples/RotateMesh.bb @@ -0,0 +1,20 @@ +; RotateMesh Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/RotateSprite.bb b/_release/help/commands/3d_examples/RotateSprite.bb new file mode 100644 index 0000000..3c858ce --- /dev/null +++ b/_release/help/commands/3d_examples/RotateSprite.bb @@ -0,0 +1,20 @@ +; RotateSprite Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/RotateTexture.bb b/_release/help/commands/3d_examples/RotateTexture.bb new file mode 100644 index 0000000..6321ab5 --- /dev/null +++ b/_release/help/commands/3d_examples/RotateTexture.bb @@ -0,0 +1,44 @@ +; RotateTexture Example +; --------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +cube=CreateCube() +PositionEntity cube,0,0,5 + +; Load texture +tex=LoadTexture( "media/b3dlogo.jpg" ) + +; Texture cube +EntityTexture cube,tex + +; Set initial texture angle value +angle#=1 + +While Not KeyDown( 1 ) + + ; Change texture angle value depending on key pressed + If KeyDown( 205 )=True Then angle#=angle#-1 + If KeyDown( 203 )=True Then angle#=angle#+1 + + ; Rotate texture + RotateTexture tex,angle# + + TurnEntity cube,0.1,0.1,0.1 + + RenderWorld + + Text 0,0,"Use left and right cursor keys to change texture angle value" + Text 0,20,"angle#="+angle# + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/ScaleEntity.bb b/_release/help/commands/3d_examples/ScaleEntity.bb new file mode 100644 index 0000000..5f19016 --- /dev/null +++ b/_release/help/commands/3d_examples/ScaleEntity.bb @@ -0,0 +1,42 @@ +; ScaleEntity Example +; ------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone( 32 ) +PositionEntity cone,0,0,5 + +; Set scale values so that cone is default size to begin with +x_scale#=1 +y_scale#=1 +z_scale#=1 + +While Not KeyDown( 1 ) + + ; Change scale values depending on the key pressed + If KeyDown( 203 )=True Then x_scale#=x_scale#-0.1 + If KeyDown( 205 )=True Then x_scale#=x_scale#+0.1 + If KeyDown( 208 )=True Then y_scale#=y_scale#-0.1 + If KeyDown( 200 )=True Then y_scale#=y_scale#+0.1 + If KeyDown( 44 )=True Then z_scale#=z_scale#-0.1 + If KeyDown( 30 )=True Then z_scale#=z_scale#+0.1 + + ; Scale cone using scale values + ScaleEntity cone,x_scale#,y_scale#,z_scale# + + RenderWorld + + Text 0,0,"Use cursor/A/Z keys to scale cone" + Text 0,20,"X Scale: "+x_scale# + Text 0,40,"Y Scale: "+y_scale# + Text 0,60,"Z Scale: "+z_scale# + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/ScaleMesh.bb b/_release/help/commands/3d_examples/ScaleMesh.bb new file mode 100644 index 0000000..2a6a38d --- /dev/null +++ b/_release/help/commands/3d_examples/ScaleMesh.bb @@ -0,0 +1,20 @@ +; ScaleMesh Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/ScaleSprite.bb b/_release/help/commands/3d_examples/ScaleSprite.bb new file mode 100644 index 0000000..6b4b1b7 --- /dev/null +++ b/_release/help/commands/3d_examples/ScaleSprite.bb @@ -0,0 +1,20 @@ +; ScaleSprite Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/ScaleTexture.bb b/_release/help/commands/3d_examples/ScaleTexture.bb new file mode 100644 index 0000000..6039d3f --- /dev/null +++ b/_release/help/commands/3d_examples/ScaleTexture.bb @@ -0,0 +1,48 @@ +; ScaleTexture Example +; -------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +cube=CreateCube() +PositionEntity cube,0,0,5 + +; Load texture +tex=LoadTexture( "media/b3dlogo.jpg" ) + +; Texture cube +EntityTexture cube,tex + +; Set initial uv scale values +u_scale#=1 +v_scale#=1 + +While Not KeyDown( 1 ) + + ; Change uv scale values depending on key pressed + If KeyDown( 208 )=True Then u_scale#=u_scale#-0.01 + If KeyDown( 200 )=True Then u_scale#=u_scale#+0.01 + If KeyDown( 203 )=True Then v_scale#=v_scale#-0.01 + If KeyDown( 205 )=True Then v_scale#=v_scale#+0.01 + + ; Scale texture + ScaleTexture tex,u_scale#,v_scale# + + TurnEntity cube,0.1,0.1,0.1 + + RenderWorld + + Text 0,0,"Use cursor keys to change uv scale values" + Text 0,20,"u_scale#="+u_scale# + Text 0,40,"v_scale#="+v_scale# + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/SetAnimKey.bb b/_release/help/commands/3d_examples/SetAnimKey.bb new file mode 100644 index 0000000..06dbce4 --- /dev/null +++ b/_release/help/commands/3d_examples/SetAnimKey.bb @@ -0,0 +1,20 @@ +; SetAnimKey Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/ShowEntity.bb b/_release/help/commands/3d_examples/ShowEntity.bb new file mode 100644 index 0000000..62cf3d7 --- /dev/null +++ b/_release/help/commands/3d_examples/ShowEntity.bb @@ -0,0 +1,20 @@ +; ShowEntity Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/SpriteViewMode.bb b/_release/help/commands/3d_examples/SpriteViewMode.bb new file mode 100644 index 0000000..2b9d66e --- /dev/null +++ b/_release/help/commands/3d_examples/SpriteViewMode.bb @@ -0,0 +1,20 @@ +; SpriteViewMode Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/TFormNormal.bb b/_release/help/commands/3d_examples/TFormNormal.bb new file mode 100644 index 0000000..7508ce7 --- /dev/null +++ b/_release/help/commands/3d_examples/TFormNormal.bb @@ -0,0 +1,20 @@ +; TFormNormal Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/TFormPoint.bb b/_release/help/commands/3d_examples/TFormPoint.bb new file mode 100644 index 0000000..a79c262 --- /dev/null +++ b/_release/help/commands/3d_examples/TFormPoint.bb @@ -0,0 +1,52 @@ + +Graphics3D 640, 480 + +cam = CreateCamera () +MoveEntity cam, 5, 0, -5 + +box = CreateCube () +MoveEntity box, 5, 0, 0 + +Repeat + + If KeyDown (203) TurnEntity cam, 0, 0.5, 0 + If KeyDown (205) TurnEntity cam, 0, -0.5, 0 + If KeyDown (200) MoveEntity cam, 0, 0, 0.1 + If KeyDown (208) MoveEntity cam, 0, 0, -0.1 + + bx# = EntityX (box) + by# = EntityY (box) + bz# = EntityZ (box) + + cx# = EntityX (cam, 1) + cy# = EntityY (cam, 1) + cz# = EntityZ (cam, 1) + + TFormPoint 0, 0, 0, cam, box + xdist# = TFormedX () + ydist# = TFormedY () + zdist# = TFormedZ () + + UpdateWorld + RenderWorld + + Text 0, 20, "Box's global position" + Text 20, 40, "x: " + bx + Text 20, 60, "y: " + by + Text 20, 80, "z: " + bz + + Text 0, 120, "Camera's global position" + Text 20, 140, "x: " + cx + Text 20, 160, "y: " + cy + Text 20, 180, "z: " + cz + + Text 0, 220, "Camera position relative to box" + Text 20, 240, "x: " + xdist + Text 20, 260, "y: " + ydist + Text 20, 280, "z: " + zdist + + Flip + +Until KeyHit (1) + +End diff --git a/_release/help/commands/3d_examples/TFormVector.bb b/_release/help/commands/3d_examples/TFormVector.bb new file mode 100644 index 0000000..627da11 --- /dev/null +++ b/_release/help/commands/3d_examples/TFormVector.bb @@ -0,0 +1,52 @@ + +Graphics3D 640, 480 + +cam = CreateCamera () +MoveEntity cam, 5, 0, -5 + +box = CreateCube () +MoveEntity box, 5, 0, 0 + +Repeat + + If KeyDown (203) TurnEntity cam, 0, 0.5, 0 + If KeyDown (205) TurnEntity cam, 0, -0.5, 0 + If KeyDown (200) MoveEntity cam, 0, 0, 0.1 + If KeyDown (208) MoveEntity cam, 0, 0, -0.1 + + bx# = EntityX (box) + by# = EntityY (box) + bz# = EntityZ (box) + + cx# = EntityX (cam, 1) + cy# = EntityY (cam, 1) + cz# = EntityZ (cam, 1) + + TFormVector EntityPitch (cam), EntityYaw (cam), EntityRoll (cam), cam, box + xang# = TFormedX () + yang# = TFormedY () + zang# = TFormedZ () + + UpdateWorld + RenderWorld + + Text 0, 20, "Box's global position" + Text 20, 40, "x: " + bx + Text 20, 60, "y: " + by + Text 20, 80, "z: " + bz + + Text 0, 120, "Camera's global position" + Text 20, 140, "x: " + cx + Text 20, 160, "y: " + cy + Text 20, 180, "z: " + cz + + Text 0, 220, "Camera angle relative to box" + Text 20, 240, "x: " + xang + Text 20, 260, "y: " + yang + Text 20, 280, "z: " + zang + + Flip + +Until KeyHit (1) + +End diff --git a/_release/help/commands/3d_examples/TFormedX.bb b/_release/help/commands/3d_examples/TFormedX.bb new file mode 100644 index 0000000..9f533d3 --- /dev/null +++ b/_release/help/commands/3d_examples/TFormedX.bb @@ -0,0 +1,20 @@ +; TFormedX Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/TFormedY.bb b/_release/help/commands/3d_examples/TFormedY.bb new file mode 100644 index 0000000..d1fb1eb --- /dev/null +++ b/_release/help/commands/3d_examples/TFormedY.bb @@ -0,0 +1,20 @@ +; TFormedY Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/TFormedZ.bb b/_release/help/commands/3d_examples/TFormedZ.bb new file mode 100644 index 0000000..37abce8 --- /dev/null +++ b/_release/help/commands/3d_examples/TFormedZ.bb @@ -0,0 +1,20 @@ +; TFormedZ Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/TerrainDetail.bb b/_release/help/commands/3d_examples/TerrainDetail.bb new file mode 100644 index 0000000..055f4ea --- /dev/null +++ b/_release/help/commands/3d_examples/TerrainDetail.bb @@ -0,0 +1,73 @@ +; TerrainDetail Example +; --------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +PositionEntity camera,1,1,1 + +light=CreateLight() +RotateEntity light,90,0,0 + +; Load terrain +terrain=LoadTerrain( "media/height_map.bmp" ) + +; Scale terrain +ScaleEntity terrain,1,50,1 + +; Texture terrain +grass_tex=LoadTexture( "media/mossyground.bmp" ) +EntityTexture terrain,grass_tex,0,1 + +; Set terrain detail value +terra_detail=4000 + +; Set vertex morph value +vertex_morph=True + +While Not KeyDown( 1 ) + + ; Change terrain detail value depending on key pressed + If KeyDown(26) Then terra_detail=terra_detail-10 + If KeyDown(27) Then terra_detail=terra_detail+10 + + ; Toggle vertex morphing on/off when spacebar is pressed + If KeyHit(57)=True Then vertex_morph=1-vertex_morph + + ; Set terrain detail, vertex morphing + TerrainDetail terrain,terra_detail,vertex_morph + + If KeyDown( 203 )=True Then x#=x#-0.1 + If KeyDown( 205 )=True Then x#=x#+0.1 + If KeyDown( 208 )=True Then y#=y#-0.1 + If KeyDown( 200 )=True Then y#=y#+0.1 + If KeyDown( 44 )=True Then z#=z#-0.1 + If KeyDown( 30 )=True Then z#=z#+0.1 + + If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0 + If KeyDown( 203 )=True Then TurnEntity camera,0,1,0 + If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.1 + If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.1 + + x#=EntityX(camera) + y#=EntityY(camera) + z#=EntityZ(camera) + + terra_y#=TerrainY(terrain,x#,y#,z#)+5 + + PositionEntity camera,x#,terra_y#,z# + + RenderWorld + + Text 0,0,"Use cursor keys to move about the terrain" + Text 0,20,"Use [ and ] keys to change terrain detail level" + Text 0,40,"Press spacebar to enable/disable vertex morphing" + Text 0,60,"Terrain Detail: "+terra_detail + If vertex_morph=True Then Text 0,80,"Vertex Morphing: True" Else Text 0,80,"Vertex Morphing: False" + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/TerrainHeight.bb b/_release/help/commands/3d_examples/TerrainHeight.bb new file mode 100644 index 0000000..6d94327 --- /dev/null +++ b/_release/help/commands/3d_examples/TerrainHeight.bb @@ -0,0 +1,59 @@ +; TerrainY Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +PositionEntity camera,1,1,1 + +light=CreateLight() +RotateEntity light,90,0,0 + +; Load terrain +terrain=LoadTerrain( "media/height_map.bmp" ) + +; Scale terrain +ScaleEntity terrain,1,50,1 + +; Texture terrain +grass_tex=LoadTexture( "media/mossyground.bmp" ) +EntityTexture terrain,grass_tex,0,1 + +; Set terrain detail, enable vertex morphing +TerrainDetail terrain,4000,True + +While Not KeyDown( 1 ) + + If KeyDown( 203 )=True Then x#=x#-0.1 + If KeyDown( 205 )=True Then x#=x#+0.1 + If KeyDown( 208 )=True Then y#=y#-0.1 + If KeyDown( 200 )=True Then y#=y#+0.1 + If KeyDown( 44 )=True Then z#=z#-0.1 + If KeyDown( 30 )=True Then z#=z#+0.1 + + If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0 + If KeyDown( 203 )=True Then TurnEntity camera,0,1,0 + If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.1 + If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.1 + + x#=EntityX(camera) + y#=EntityY(camera) + z#=EntityZ(camera) + + terra_y#=TerrainY(terrain,x#,y#,z#) + + PositionEntity camera,x#,terra_y#+5,z# + + RenderWorld + + Text 0,0,"Use cursor keys to move about the terrain" + + ; Output TerrainY value to screen + Text 0,20,"TerrainY: "+terra_y# + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/TerrainShading.bb b/_release/help/commands/3d_examples/TerrainShading.bb new file mode 100644 index 0000000..9c854e0 --- /dev/null +++ b/_release/help/commands/3d_examples/TerrainShading.bb @@ -0,0 +1,64 @@ +; TerrainShading Example +; ---------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +PositionEntity camera,1,1,1 + +light=CreateLight() +RotateEntity light,45,0,0 + +; Load terrain +terrain=LoadTerrain( "media/height_map.bmp" ) + +; Set terrain detail, enable vertex morphing +TerrainDetail terrain,4000,True + +; Scale terrain +ScaleEntity terrain,1,50,1 + +; Texture terrain +grass_tex=LoadTexture( "media/mossyground.bmp" ) +EntityTexture terrain,grass_tex,0,1 + +While Not KeyDown( 1 ) + + ; Toggle terrain shading value between 0 and 1 when spacebar is pressed + If KeyHit(57)=True Then terra_shade=1-terra_shade + + ; Enable/disable terrain shading + TerrainShading terrain,terra_shade + + If KeyDown( 203 )=True Then x#=x#-0.1 + If KeyDown( 205 )=True Then x#=x#+0.1 + If KeyDown( 208 )=True Then y#=y#-0.1 + If KeyDown( 200 )=True Then y#=y#+0.1 + If KeyDown( 44 )=True Then z#=z#-0.1 + If KeyDown( 30 )=True Then z#=z#+0.1 + + If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0 + If KeyDown( 203 )=True Then TurnEntity camera,0,1,0 + If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.1 + If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.1 + + x#=EntityX(camera) + y#=EntityY(camera) + z#=EntityZ(camera) + + terra_y#=TerrainY(terrain,x#,y#,z#)+5 + + PositionEntity camera,x#,terra_y#,z# + + RenderWorld + + Text 0,0,"Use cursor keys to move about the terrain" + Text 0,20,"Press spacebar to toggle between TerrainShading True/False" + If terra_shade=True Then Text 0,40,"TerrainShading: True" Else Text 0,40,"TerrainShading: False" + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/TerrainSize.bb b/_release/help/commands/3d_examples/TerrainSize.bb new file mode 100644 index 0000000..7cd3cb8 --- /dev/null +++ b/_release/help/commands/3d_examples/TerrainSize.bb @@ -0,0 +1,59 @@ +; TerrainSize Example +; ------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +PositionEntity camera,1,1,1 + +light=CreateLight() +RotateEntity light,90,0,0 + +; Load terrain +terrain=LoadTerrain( "media/height_map.bmp" ) + +; Set terrain detail, enable vertex morphing +TerrainDetail terrain,4000,True + +; Scale terrain +ScaleEntity terrain,1,50,1 + +; Texture terrain +grass_tex=LoadTexture( "media/mossyground.bmp" ) +EntityTexture terrain,grass_tex,0,1 + +While Not KeyDown( 1 ) + + If KeyDown( 203 )=True Then x#=x#-0.1 + If KeyDown( 205 )=True Then x#=x#+0.1 + If KeyDown( 208 )=True Then y#=y#-0.1 + If KeyDown( 200 )=True Then y#=y#+0.1 + If KeyDown( 44 )=True Then z#=z#-0.1 + If KeyDown( 30 )=True Then z#=z#+0.1 + + If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0 + If KeyDown( 203 )=True Then TurnEntity camera,0,1,0 + If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.1 + If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.1 + + x#=EntityX(camera) + y#=EntityY(camera) + z#=EntityZ(camera) + + terra_y#=TerrainY(terrain,x#,y#,z#)+5 + + PositionEntity camera,x#,terra_y#,z# + + RenderWorld + + Text 0,0,"Use cursor keys to move about the terrain" + + ; Output terrain size to screen + Text 0,20,"Terrain Size: "+TerrainSize(terrain) + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/TerrainX.bb b/_release/help/commands/3d_examples/TerrainX.bb new file mode 100644 index 0000000..7222a0c --- /dev/null +++ b/_release/help/commands/3d_examples/TerrainX.bb @@ -0,0 +1,59 @@ +; TerrainX Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +PositionEntity camera,1,1,1 + +light=CreateLight() +RotateEntity light,90,0,0 + +; Load terrain +terrain=LoadTerrain( "media/height_map.bmp" ) + +; Scale terrain +ScaleEntity terrain,1,50,1 + +; Texture terrain +grass_tex=LoadTexture( "media/mossyground.bmp" ) +EntityTexture terrain,grass_tex,0,1 + +; Set terrain detail, enable vertex morphing +TerrainDetail terrain,4000,True + +While Not KeyDown( 1 ) + + If KeyDown( 203 )=True Then x#=x#-0.1 + If KeyDown( 205 )=True Then x#=x#+0.1 + If KeyDown( 208 )=True Then y#=y#-0.1 + If KeyDown( 200 )=True Then y#=y#+0.1 + If KeyDown( 44 )=True Then z#=z#-0.1 + If KeyDown( 30 )=True Then z#=z#+0.1 + + If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0 + If KeyDown( 203 )=True Then TurnEntity camera,0,1,0 + If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.1 + If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.1 + + x#=EntityX(camera) + y#=EntityY(camera) + z#=EntityZ(camera) + + terra_y#=TerrainY(terrain,x#,y#,z#)+5 + + PositionEntity camera,x#,terra_y#,z# + + RenderWorld + + Text 0,0,"Use cursor keys to move about the terrain" + + ; Output TerrainX value to screen + Text 0,20,"TerrainX: "+TerrainX(terrain,x#,terra_y#,z#) + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/TerrainY.bb b/_release/help/commands/3d_examples/TerrainY.bb new file mode 100644 index 0000000..6d94327 --- /dev/null +++ b/_release/help/commands/3d_examples/TerrainY.bb @@ -0,0 +1,59 @@ +; TerrainY Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +PositionEntity camera,1,1,1 + +light=CreateLight() +RotateEntity light,90,0,0 + +; Load terrain +terrain=LoadTerrain( "media/height_map.bmp" ) + +; Scale terrain +ScaleEntity terrain,1,50,1 + +; Texture terrain +grass_tex=LoadTexture( "media/mossyground.bmp" ) +EntityTexture terrain,grass_tex,0,1 + +; Set terrain detail, enable vertex morphing +TerrainDetail terrain,4000,True + +While Not KeyDown( 1 ) + + If KeyDown( 203 )=True Then x#=x#-0.1 + If KeyDown( 205 )=True Then x#=x#+0.1 + If KeyDown( 208 )=True Then y#=y#-0.1 + If KeyDown( 200 )=True Then y#=y#+0.1 + If KeyDown( 44 )=True Then z#=z#-0.1 + If KeyDown( 30 )=True Then z#=z#+0.1 + + If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0 + If KeyDown( 203 )=True Then TurnEntity camera,0,1,0 + If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.1 + If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.1 + + x#=EntityX(camera) + y#=EntityY(camera) + z#=EntityZ(camera) + + terra_y#=TerrainY(terrain,x#,y#,z#) + + PositionEntity camera,x#,terra_y#+5,z# + + RenderWorld + + Text 0,0,"Use cursor keys to move about the terrain" + + ; Output TerrainY value to screen + Text 0,20,"TerrainY: "+terra_y# + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/TerrainZ.bb b/_release/help/commands/3d_examples/TerrainZ.bb new file mode 100644 index 0000000..158003b --- /dev/null +++ b/_release/help/commands/3d_examples/TerrainZ.bb @@ -0,0 +1,59 @@ +; TerrainZ Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +PositionEntity camera,1,1,1 + +light=CreateLight() +RotateEntity light,90,0,0 + +; Load terrain +terrain=LoadTerrain( "media/height_map.bmp" ) + +; Scale terrain +ScaleEntity terrain,1,50,1 + +; Texture terrain +grass_tex=LoadTexture( "media/mossyground.bmp" ) +EntityTexture terrain,grass_tex,0,1 + +; Set terrain detail, enable vertex morphing +TerrainDetail terrain,4000,True + +While Not KeyDown( 1 ) + + If KeyDown( 203 )=True Then x#=x#-0.1 + If KeyDown( 205 )=True Then x#=x#+0.1 + If KeyDown( 208 )=True Then y#=y#-0.1 + If KeyDown( 200 )=True Then y#=y#+0.1 + If KeyDown( 44 )=True Then z#=z#-0.1 + If KeyDown( 30 )=True Then z#=z#+0.1 + + If KeyDown( 205 )=True Then TurnEntity camera,0,-1,0 + If KeyDown( 203 )=True Then TurnEntity camera,0,1,0 + If KeyDown( 208 )=True Then MoveEntity camera,0,0,-0.1 + If KeyDown( 200 )=True Then MoveEntity camera,0,0,0.1 + + x#=EntityX(camera) + y#=EntityY(camera) + z#=EntityZ(camera) + + terra_y#=TerrainY(terrain,x#,y#,z#)+5 + + PositionEntity camera,x#,terra_y#,z# + + RenderWorld + + Text 0,0,"Use cursor keys to move about the terrain" + + ; Output TerrainZ value to screen + Text 0,20,"TerrainZ: "+TerrainZ(terrain,x#,terra_y#,z#) + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/TextureBlend.bb b/_release/help/commands/3d_examples/TextureBlend.bb new file mode 100644 index 0000000..dab8516 --- /dev/null +++ b/_release/help/commands/3d_examples/TextureBlend.bb @@ -0,0 +1,20 @@ +; TextureBlend Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/TextureBuffer.bb b/_release/help/commands/3d_examples/TextureBuffer.bb new file mode 100644 index 0000000..ab5cebc --- /dev/null +++ b/_release/help/commands/3d_examples/TextureBuffer.bb @@ -0,0 +1,61 @@ +; TextureBuffer Example +; --------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +cube=CreateCube() +PositionEntity cube,0,0,5 + +; Create texture of size 256x256 +tex=CreateTexture(256,256) + +; Set buffer - texture buffer +SetBuffer TextureBuffer(tex) + +; Clear texture buffer with background white color +ClsColor 255,255,255 +Cls + +; Draw text on texture +font=LoadFont("arial",24) +SetFont font +Color 0,0,0 +Text 0,0,"This texture" +Text 0,40,"was created using" : Color 0,0,255 +Text 0,80,"CreateTexture()" : Color 0,0,0 +Text 0,120,"and drawn to using" : Color 0,0,255 +Text 0,160,"SetBuffer TextureBuffer()" + +; Texture cube with texture +EntityTexture cube,tex + +; Set buffer - backbuffer +SetBuffer BackBuffer() + +While Not KeyDown( 1 ) + + pitch#=0 + yaw#=0 + roll#=0 + + If KeyDown( 208 )=True Then pitch#=-1 + If KeyDown( 200 )=True Then pitch#=1 + If KeyDown( 203 )=True Then yaw#=-1 + If KeyDown( 205 )=True Then yaw#=1 + If KeyDown( 45 )=True Then roll#=-1 + If KeyDown( 44 )=True Then roll#=1 + + TurnEntity cube,pitch#,yaw#,roll# + + RenderWorld + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/TextureCoords.bb b/_release/help/commands/3d_examples/TextureCoords.bb new file mode 100644 index 0000000..6eb20e3 --- /dev/null +++ b/_release/help/commands/3d_examples/TextureCoords.bb @@ -0,0 +1,20 @@ +; TextureCoords Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/TextureFilter.bb b/_release/help/commands/3d_examples/TextureFilter.bb new file mode 100644 index 0000000..fa63dad --- /dev/null +++ b/_release/help/commands/3d_examples/TextureFilter.bb @@ -0,0 +1,20 @@ +; TextureFilter Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/TextureHeight.bb b/_release/help/commands/3d_examples/TextureHeight.bb new file mode 100644 index 0000000..1e94a72 --- /dev/null +++ b/_release/help/commands/3d_examples/TextureHeight.bb @@ -0,0 +1,20 @@ +; TextureHeight Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/TextureWidth.bb b/_release/help/commands/3d_examples/TextureWidth.bb new file mode 100644 index 0000000..9d335c2 --- /dev/null +++ b/_release/help/commands/3d_examples/TextureWidth.bb @@ -0,0 +1,20 @@ +; TextureWidth Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/TranslateEntity.bb b/_release/help/commands/3d_examples/TranslateEntity.bb new file mode 100644 index 0000000..b45a941 --- /dev/null +++ b/_release/help/commands/3d_examples/TranslateEntity.bb @@ -0,0 +1,47 @@ +; TranslateEntity Example +; ----------------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone( 32 ) + +; Translate cone in front of camera, so we can see it to begin with +TranslateEntity cone,0,0,10 + +While Not KeyDown( 1 ) + + ; Reset translation values - otherwise, the cone will not stop! + x#=0 + y#=0 + z#=0 + + ; Change translation values depending on the key pressed + If KeyDown( 203 )=True Then x#=-0.1 + If KeyDown( 205 )=True Then x#=0.1 + If KeyDown( 208 )=True Then y#=-0.1 + If KeyDown( 200 )=True Then y#=0.1 + If KeyDown( 44 )=True Then z#=-0.1 + If KeyDown( 30 )=True Then z#=0.1 + + ; Translate sphere using translation values + TranslateEntity cone,x#,y#,z# + + ; If spacebar pressed then rotate cone by random amount + If KeyHit( 57 )=True Then RotateEntity cone,Rnd( 0,360 ),Rnd( 0,360 ),Rnd( 0,360 ) + + RenderWorld + + Text 0,0,"Use cursor/A/Z keys to translate cone, spacebar to rotate cone by random amount" + Text 0,20,"X Translation: "+x# + Text 0,40,"Y Translation: "+y# + Text 0,60,"Z Translation: "+z# + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/TriangleVertex.bb b/_release/help/commands/3d_examples/TriangleVertex.bb new file mode 100644 index 0000000..bfad1ac --- /dev/null +++ b/_release/help/commands/3d_examples/TriangleVertex.bb @@ -0,0 +1,20 @@ +; TriangleVertex Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/TurnEntity.bb b/_release/help/commands/3d_examples/TurnEntity.bb new file mode 100644 index 0000000..721a7d9 --- /dev/null +++ b/_release/help/commands/3d_examples/TurnEntity.bb @@ -0,0 +1,42 @@ +; TurnEntity Example +; ------------------ + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone( 32 ) +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + ; Reset turn values - otherwise, the cone will not stop turning! + pitch#=0 + yaw#=0 + roll#=0 + + ; Change movement values depending on the key pressed + If KeyDown( 208 )=True Then pitch#=-1 + If KeyDown( 200 )=True Then pitch#=1 + If KeyDown( 203 )=True Then yaw#=-1 + If KeyDown( 205 )=True Then yaw#=1 + If KeyDown( 45 )=True Then roll#=-1 + If KeyDown( 44 )=True Then roll#=1 + + ; Move sphere using movement values + TurnEntity cone,pitch#,yaw#,roll# + + RenderWorld + + Text 0,0,"Use cursor/Z/X keys to turn cone" + Text 0,20,"Pitch: "+pitch# + Text 0,40,"Yaw: "+yaw# + Text 0,60,"Roll: "+roll# + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/UpdateNormals.bb b/_release/help/commands/3d_examples/UpdateNormals.bb new file mode 100644 index 0000000..9b4e6a2 --- /dev/null +++ b/_release/help/commands/3d_examples/UpdateNormals.bb @@ -0,0 +1,20 @@ +; UpdateNormals Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/UpdateWorld.bb b/_release/help/commands/3d_examples/UpdateWorld.bb new file mode 100644 index 0000000..22306b5 --- /dev/null +++ b/_release/help/commands/3d_examples/UpdateWorld.bb @@ -0,0 +1,20 @@ +; UpdateWorld Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/VertexBlue.bb b/_release/help/commands/3d_examples/VertexBlue.bb new file mode 100644 index 0000000..5f86057 --- /dev/null +++ b/_release/help/commands/3d_examples/VertexBlue.bb @@ -0,0 +1,20 @@ +; VertexBlue Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/VertexColor.bb b/_release/help/commands/3d_examples/VertexColor.bb new file mode 100644 index 0000000..0126e0c --- /dev/null +++ b/_release/help/commands/3d_examples/VertexColor.bb @@ -0,0 +1,20 @@ +; VertexColor Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/VertexCoords.bb b/_release/help/commands/3d_examples/VertexCoords.bb new file mode 100644 index 0000000..cf4a17d --- /dev/null +++ b/_release/help/commands/3d_examples/VertexCoords.bb @@ -0,0 +1,20 @@ +; VertexCoords Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/VertexGreen.bb b/_release/help/commands/3d_examples/VertexGreen.bb new file mode 100644 index 0000000..18f1a0e --- /dev/null +++ b/_release/help/commands/3d_examples/VertexGreen.bb @@ -0,0 +1,20 @@ +; VertexGreen Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/VertexNX.bb b/_release/help/commands/3d_examples/VertexNX.bb new file mode 100644 index 0000000..da628e0 --- /dev/null +++ b/_release/help/commands/3d_examples/VertexNX.bb @@ -0,0 +1,20 @@ +; VertexNX Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/VertexNY.bb b/_release/help/commands/3d_examples/VertexNY.bb new file mode 100644 index 0000000..875c0d9 --- /dev/null +++ b/_release/help/commands/3d_examples/VertexNY.bb @@ -0,0 +1,20 @@ +; VertexNY Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/VertexNZ.bb b/_release/help/commands/3d_examples/VertexNZ.bb new file mode 100644 index 0000000..1cca2f3 --- /dev/null +++ b/_release/help/commands/3d_examples/VertexNZ.bb @@ -0,0 +1,20 @@ +; VertexNZ Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/VertexNormal.bb b/_release/help/commands/3d_examples/VertexNormal.bb new file mode 100644 index 0000000..91c0c16 --- /dev/null +++ b/_release/help/commands/3d_examples/VertexNormal.bb @@ -0,0 +1,20 @@ +; VertexNormal Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/VertexRed.bb b/_release/help/commands/3d_examples/VertexRed.bb new file mode 100644 index 0000000..30aca3a --- /dev/null +++ b/_release/help/commands/3d_examples/VertexRed.bb @@ -0,0 +1,20 @@ +; VertexRed Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/VertexTexCoords.bb b/_release/help/commands/3d_examples/VertexTexCoords.bb new file mode 100644 index 0000000..efe900d --- /dev/null +++ b/_release/help/commands/3d_examples/VertexTexCoords.bb @@ -0,0 +1,20 @@ +; VertexTexCoords Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/VertexU.bb b/_release/help/commands/3d_examples/VertexU.bb new file mode 100644 index 0000000..25a2579 --- /dev/null +++ b/_release/help/commands/3d_examples/VertexU.bb @@ -0,0 +1,20 @@ +; VertexU Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/VertexV.bb b/_release/help/commands/3d_examples/VertexV.bb new file mode 100644 index 0000000..c6401ae --- /dev/null +++ b/_release/help/commands/3d_examples/VertexV.bb @@ -0,0 +1,20 @@ +; VertexY Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/VertexW.bb b/_release/help/commands/3d_examples/VertexW.bb new file mode 100644 index 0000000..ce86814 --- /dev/null +++ b/_release/help/commands/3d_examples/VertexW.bb @@ -0,0 +1,20 @@ +; VertexW Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/VertexX.bb b/_release/help/commands/3d_examples/VertexX.bb new file mode 100644 index 0000000..bb9b482 --- /dev/null +++ b/_release/help/commands/3d_examples/VertexX.bb @@ -0,0 +1,20 @@ +; VertexX Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/VertexY.bb b/_release/help/commands/3d_examples/VertexY.bb new file mode 100644 index 0000000..c6401ae --- /dev/null +++ b/_release/help/commands/3d_examples/VertexY.bb @@ -0,0 +1,20 @@ +; VertexY Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/VertexZ.bb b/_release/help/commands/3d_examples/VertexZ.bb new file mode 100644 index 0000000..8eccdb0 --- /dev/null +++ b/_release/help/commands/3d_examples/VertexZ.bb @@ -0,0 +1,20 @@ +; VertexZ Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/WBuffer.bb b/_release/help/commands/3d_examples/WBuffer.bb new file mode 100644 index 0000000..4856c11 --- /dev/null +++ b/_release/help/commands/3d_examples/WBuffer.bb @@ -0,0 +1,20 @@ +; WBuffer Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End diff --git a/_release/help/commands/3d_examples/Windowed3D.bb b/_release/help/commands/3d_examples/Windowed3D.bb new file mode 100644 index 0000000..9515569 --- /dev/null +++ b/_release/help/commands/3d_examples/Windowed3D.bb @@ -0,0 +1,11 @@ + +If Windowed3D () + Graphics3D 640, 480, 0, 2 + Print "Windowed mode!" +Else + Graphics3D 640, 480, 0, 1 + Print "Full screen modes only!" +EndIf + +MouseWait +End diff --git a/_release/help/commands/3d_examples/Wireframe.bb b/_release/help/commands/3d_examples/Wireframe.bb new file mode 100644 index 0000000..e5cbd8d --- /dev/null +++ b/_release/help/commands/3d_examples/Wireframe.bb @@ -0,0 +1,32 @@ +; Wireframe Example +; ----------------- + +Graphics3D 640,480,16 +SetBuffer BackBuffer() + +camera=CreateCamera() + +light=CreateLight() +RotateEntity light,90,0,0 + +sphere=CreateSphere( 32 ) +PositionEntity sphere,0,0,2 + +While Not KeyDown( 1 ) + + ; Toggle wireframe enable value between true and false when spacebar is pressed + If KeyHit( 57 )=True Then enable=1-enable + + ; Enable/disable wireframe rendering + WireFrame enable + + RenderWorld + + Text 0,0,"Press spacebar to toggle between Wireframe True/False" + If enable=False Then Text 0,20,"Wireframe False" Else Text 0,20,"Wireframe True" + + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/3d_examples/media/Chorme-2.BMP b/_release/help/commands/3d_examples/media/Chorme-2.BMP new file mode 100644 index 0000000000000000000000000000000000000000..f1bd47fda88e6471c4f47591a5fa80a678ca6de2 GIT binary patch literal 12344 zcmeI2TTE0(7=X8l@qvq^Bp9)1FsQA@Ac|~oxymXnVqFvgg@vfNTmp#URw$CTDI!{+ zh^^^GN$o=~U>21$l*F`Yqv`F5_|nAq)CiWOZMwUrul){FrpIARTS{Q3Ve@nNXU<%{ z`OiOdX68)B^NDemsh^eWGyJ9h@%Myf6`J^k2U{%0-}LXv<;#)S@bDwswlzB(Ejc;p zC01+F>ebO9AFuND^CqoapN}Hy>HaiPz4q3TDum0 zL7ugK{jtQvYP+3QRHUWt-LRoHGZWOJ`1n^2A0|zCYHCMGN!y`Aj!m0DI^%Rw0-`81 zp9H6KbIIjOPR2^0(oAZkK&}+kxNjd7Q5}_vMu7qUOZoXAU97HlcXeGlb?W@_<7Fu+ z!tz&|o1YE~6Ay%3(@*9f{g01`5b1)KEkn?G3YThYX$7Jv7@Pz$CAzFv6!N#%)Tk(t zhDKpu+fx(w!3Y%jrnZkkxzJ?)@y)GqUskv2f3gso<#1Gi>#I^_+Li;k}#Z zyH^l^!C4i>QF1fPo4yUPPzB z@$f@}p7YU4vVi3W72v|{+vx%cD_7Dx2>#j^qYFQ%07EW@N(KRfo{=P7_(27jp`HN{ zdr2(MJc;2(1+{{Q(dWBinjQuGD0KNt!ar~vbJM#P)i;2*Uq$pV*u)CTag zF)=s~Gci|kvcZ4buJYSgC^k1gi-ohleT4!h{0DgK&lIa>_in%ZcQOOQf57m|&oqyb zpE)6qz~KLOuQabvzSt8Q2=)g<0Rt6a=F;6R7xQqY#0LNON0ekEQ}Z7gskCLm{09ul zAQVsmrsp!-XVs9id9%TPH&1y?pQIc1UvvRO0Rt6a79fzbnqWm^@K01J$(W`Rv*;o) zq#5A>6=2+^Av>EXDX3!ha!3Oz3r_}5mZ*d0&Q+$T8}=VB=N5Ut%ntJ_+>-pWS25?i zlHV@?k(6xkkC)>=j6WZ?w_j~*bBXuwJ*VVHQAFgG{AQ!gnO0;p7e%GQ{#2&`5d4$> zo>TC%1paP#n5_@P{*UvUsbpTsZ@xQ^y25WRSu&u23NUVeXK?W5g$wM)Fp>5>aB+() zqV0b31_(c>*q@P~tur>1@?vA*fArIUF8rXv&&bcpk&P^N?QZq=vuUFXKd5XKGV-%2 zM=yS@wDe|QpI-bQcXZ(Y?2az+n|u0y)Nx?*_-QVUTXOuwRhH~;HqLzMOZLZ-f&c#c zKl#7z?=Riw54z9abe})#zJAet{iyr;UHAPH-S@9_-#^rS|5o??bKSpR=>Gjk_wRS? zKZr9+ntngk{rk1<=Ld8@zoGm28T?1<^Gmv)AJhH(9!FlaK0m4Z`Bjb}YJGl~FJD@p P--aLIDQJ3r-eUP3=vme+ literal 0 HcmV?d00001 diff --git a/_release/help/commands/3d_examples/media/Gargoyle/Gargoyle.bmp b/_release/help/commands/3d_examples/media/Gargoyle/Gargoyle.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4854e862b69c2384f9b3307761ed7a0183240060 GIT binary patch literal 66614 zcmbrn3tUun-amf2A;{IT+P3`d){|DO2y^BzDySQrGvk@-l8hk)Yq~CJDRT}pFbs(? zK#E+nN!(=R@<>BsBA3jT%}r5IH+0c8Qf2~cOu|*4=Wn(D$9CI&p5Oa>W`-Hm+F!5d z6gW4|=ll77Klj_D>J@k2L6J*wH$^>39+0Q_xq}KN&v4yA{qhM)`jOuAzDPwzMpDzJ zO{1nypHAI>|NYbh4?I9U{P4rnBab{n&6qKRdi2ppsoAqA-u$NmkE-rSipMpiKnQD=oo5h zWEAyiLLwCseJ^$Aj9C=*Q{4aY1d58qeP<_ARNMlJN_d*0;_)L(r6@T^QHhHwYOaP_ zwt5{kD?v^z&^<%VN&Y$Y)7UubM>C(IX3UXO;jL~?9%~^c_IV)Q{ri)Q_+?v(!td2k`j*1iUu)=hVG%3^grb9u@Ue0`;S3bE${d z+NrQ76R5C+Bq}79p{D9`sE~L(PDrLg5>u#q<|(PW@%+w&1=Jn0=TdhpGEjH?;#XKR z@K3yDT>RWC{-p!sdK2r`AO8QISJIvxOgg7F`s&Dj*NOVE`drm zW>Il0Pdz?=5%ox%jCvS9DeH=;hkh1MJsi(aKgK>igrEO2ZxQuyVlwp@tEHZL<~iyC z;Pg~hE;SuEO~>PVV-u+9@rl&KKj*3F$Dg9^olR4+!cEkD@e1nRIf>LXf-nBPk6A$d zh}Bc~&3&4hp3G6vc>UpLeo6gE^DGrLTTVsIQBe2&TunvBB~p>HBq{>WBjpRIa6Atu zkLRXP59FAr$ocqNE{%#@sHURT8B`eF4~w5iO=T8Q(P__9Ve|qjG)_T<&Y4S1!M`C- z#8XpK3{=SML~05?6N1-6@cAhVHPk(Le9xSDRLESG3Q1l}O;H-Dd+3E!$j^1u-T3_7 zMTM=Xc{<0sadn*sK;<_kK$(r{_bJ?I4^%m-66x?fkz{wqNu27{6s}kkAQEZ2tP+hQxE;< zA?m>gW>7O8P*M*@rc*zD=uzsipVHLhk1nL1n3YJ)cqED9E*@da9eX*hd~{12$5x6g zw^`sgQRKv<9LI9PQO8m7^CRRX;RweadZmXGFVu5fW~CE^QQ3cn^*eRA{v61-AVOz=Xz)rk!q`q9_M%f;b`(J~X z=P!(#lR8pdqT+ra_|bY6_;N=lR){r_ zUcHEor~nx`N3o02wU_)Mp0ris9*%kzgfp=d0KaJ5`3`IGawD5uvd8Cly-pZ z9V?F4gORS`oIy~&oe=9!;{z8f9eDA73!W8H=ER#V8kI`nQvG1?pZj>04I=C|@qB8^ z_LP*=)YNrve#o+;Lo!zO`04nRRL}({`{VQR?D>o5S=l=qht4Ow{<`e<;%`6VxX&w& zus!QR9X%JF1b-Yp2ps=hXge*kTLc{T#7?l8WTy^=&vFP`xR1cI!Qjc}at^P=sfWlJ zJ&iLMA0j(S?ssG-$DMXy|0KG4?fH~B2@UV+be{CXY||G%6g+p-$Fp4hXeGekcs3Y3;UxBmByq-ZJB~1v zSm^)}T_``qIoDSlV#mwdAcdTwc)lSem3G-Xbp>O_YI(sA2G36LEL-0OYVE;#e>3CG zJA$vL?s)1cYzB5?_7l&}ocXgSpL*)c;P>(NQ(u00<1gg`D;}!H5rw}3V#mKd>=27p zJ8@6W0m|q6JHc`F0w+j%Whc0W@azP5i56+7Oi-t?GPM)%-XX%-$wjT(-q9VYvT+b}% z^`qn8iT@oprY`(y64F6WzKWh2epK|@H&=sg0-#rZ1en)8iGUuh!-ktm*qRR-qiDaS`LVU$4qIPgU zu5f(N5v;TmN9vt~$~gfWf@7C>b^<)CCdecK?>Pv|k5)>!vksQqkU7LUN1dWD?)Zqy z?r^({i?giNu}KF`CfV(SElH)PIy*8XL-PlKAHN2{g#RSt4+~|vE#HU#g2|#WXm`F2 zi3;CK@BvajG6lus0x#nTffZgCq0YP)>_cHQ_62-089b~e+(FtIiRJ5|H_0WZSMP+< z+foUcTJK~E8%;K2S!au>uHUq8MNPM9aK#Fq`Y{gyAOQfs{J($~D@W@&)*-hF#_fd6`* zr3aG6g;j5coR;K^EH&ksxY@H|M9uv4({DcgboTbR?c^D*XJ*fdduDrFT+DVn`4k_T z>H7~x*E8Gar2gvJw*}$q=Z+ruTvy5+T+ij|hIh~L)zx)_C+8()4VEU^-%EM+wK`LG zQq8-J5{Blj;K6xU!GXk**xQpyY;RnWf8z9dIalkkUlTSXm^OH|tYY~g;%P;W(Jp1I+xOJ!NFM>wI3yz&KVRJsSSgUcjblE`m zEvNJgxAYq9#%9|od)=B83o$fr22Y+7YzYT>560X4zLTbXBdv&(DM$^e$L$1l>PDr&K zuvu-j`}Pfj{PX#22%DS16Y=IHigM@`Fo7UBc9MSrl9&|O5HEyB+&%rqJ@{`bachz30aC8#iuDzvrIm_uTFO(2ba=_3%-!gJ7vw%7cOgunB}Y z(|ubdq3nGu{l>14YvSGe?z~gls2~gb>;Jmz#`EB5qAuEAA4>dH_Svj?rCBCZQdYOD zEIG?GSerGtmFqmY%QZJqt-K9*n4x4>aQMWMaB!Ss3q*j|Ke;8a@gLz)At6)#Iwc}v z%3nh!uD{;6`|gmK*M--^LPBof)hYPF9{8@1kkE*z@C&g2h%(>exCWyqI7lEoe;ova z-IRU>c9m?N7j^GjK^t@De|aecFWq$`>{+aP6h4n2=XC~Ne{$u#(!ty$`)X@eT1|IL zn!QE;*qnjEysB!mMSd%I2u(N~dj%3~ku(ml$2ukdq@v=cz{b$5sS(#hu17~khJ|`J zUq;)Ev9;9Y4(>A)nM}KiiunD-H)iQ~GXj6KH#{mj1o)F}2qAa_{m?0)Q=+3T z91>w3M^BM92XBS~d9p?LiH;)fkJr9|-5%tnOEy9MH1G{RJS8+V6x0+NE&W4Yk=RJu z39=jHL()Y)h)a5RO2qhYAzH+>bq1>^*}iL6Qc|O-Gr81upvL1VpxZqSg(tew_oxlY zjc#p2L-wuUN$|-V!X%-VE!d%nnB}dJ1z{G!KccvJYD8EFmOxHFWD2kbiXw;2nGzil z?tgPi^mQO3;g4H;4UEl`ymZMXIP!}KV0!cAdnt%6CO!fDqshjT7hd^X4TLwWJyAbY*EqkGeh0UblGl{3fj~xmlyGD&Dj|I7r|(Nw~_1NRQJOjF$Y9 zTO$kNe*pimsNyu>h-FM6XXV2mv0dr>Ba4fRBO|Afx1wi26iE1&PZ$`WuYi{>*#tvd za8GjnpeJ(S0ihe*m+S%A0Q~Y30C@@YMlSN%(8%@PXh?BVmj1Q0(iJD?mDbv9X~t@8 zXIfH{&15%rC{q{yL9H$6D&!lQGHwM=c;C4fG$e&bCHop`%IhH98d*3R6$5%MPMTL7 z1wnvQz&b*sr-VhVhn#Rmh2at244)bninpVqW5TdMF;U?k`3(#rWF%_?)*t7K{s`ld z5?UZALj2@6mTOdCG@djVd3Ra*FBuvp454eFWq|b>i$jmcObLx4Z-(Q|n3%Ab2=ac!)GGopdSPH7Y%}4dPsBXLo>>vl z7=M*WfQS9t4{1Zw36E`EU zX3-f59uH3=_(u}aPfmGCXyg?{EX(&+M21cY^Sue=Vk!CAZ99z60zYk1?w4^#~*1UOJ z52Ph8=T4;UI{E5KMalzDKmBhr%?9(v)ObtPIZLx;`30vpNDu@bAs6YHz#Xdi93H0E z3?}}GgXOMfeiVo-IF7Kw)QC`t0FsIynK9$~Gc#ghK>m+Iiy#6y^mrHqAP67{>=712 z-U78uopso6V1QVCUi##ihw%Kug$tj-74t|0aD@pG^WYOmuZKlE@|P=r8NX7oG4hFp zGaihInGqH}V+Q`8@yvGkKmRUxg-LzWpe@N>XDCf7ZPb=k?TP1;wysQi^wkxQoqYPI zj~P2vd%LX7g$RUO=-Yyq79(Uz4!{J-6GxRp;4ctafbL|43y)xRk0;w}`&U2z{OjAF ze}4NjpZ==H8-WyhBCpSgdAv9&sW|+RhzDnYRHES+u7~yK=Ob{d^h9zh0x=I(5QHOd zuKWG&hV-$~*OraX&(6N`%h!MN%Zky>Jx3Q^J1l(oo8Jmz_S)0euC`rTvu5=>=V5Qi zWIkas)Mc_Y8oP7d$z=!i#_CHJSK2O<{f(#J`2QYQIde^E$;Wya1Xi6!&Cs_858~&B zB&RPZiFuK11@VjgYi3y>A`0)%-k!o0Xckv3Z5ZD4cIuq>4D54?qq9TjIWE$W(mA=T@4m-G}MX~Sc|NPHaSN`O+ zSC9R!CHLe3U9W~$w0%E#Sm;5y9^5++S-1!};EOw6SeTOf?1##8)zxcM%eM%rPy7bK z0Vy0&zE?c|{QC(aGik1 z{mSatrE;buy;=$Sn+*OXW~8c}p<`p;Rc$)NiuDeGb2>y}{kArxDXn&w&A#XzPT$&i z=B(~u(Fu3L(@#JBpHKhWTd&TGx2;&Q)tZ-_p;G-T@I7pB606ds*@aTpEk$FIkwh!~mnW(b?^D%bJ>0 z`4_I@l%=WzbqaI|ZFO_t){D>3omV><*9CUzWCFvZZ7f)|7 zFLouDoujt^^sV4&zQov}SbhPtag;6Z*~^JbHe@9Br`elqNhPtfQy%-0ntif1ZMTIP zX|_Qmo;8?OnmTtGvP$b*dHj|Q{}Md$e<%DCkQkPP_@L9vXGW zy#XDcaFOTFZ%}JW`khd);6(u`HwgUOX~GasWKJH298T9cBSFVGg%@($b9t&MYw zYDt!y0Cr%JcN}Ysj*T89$8Jz)(t8-#E$yp?8eN`U>fkQxHH$PXc z2Ag_aX$NYV{Hdg!Ab(DDIF69IDK7+0tnh|JSrNQNXQVgl)O%LT!8^Brm(wb>u9s(M zVsC-BoaL1?v!~D9U9-!kJD5KcHJfp^6{Z@SUYVL8r{fp3tXKiZuw|>Kx~9mLm@ocI z@WHmeRItU4UqN`R95L|8jQ+y%oO7DOrY~Mbf`F)LsqA9!M<2mlp<$u)7oM|Z%cWG` zl~H`epGxu;%sBT}25f>reTP?xj^y;Oxtu-3IfQW%k(dNNHrwLLX>dw56n1Ct_?3L+ zNV-vP&B|(b8yezf#`T%H^~VnE>hA2V(sq_^H5rmUw$i%n#!f>ulP{MO9)r94J>Y}= z6L0lJCR@M0f)%ff1~dBpd(+!B9qGHX|BU?AMSt1F1;-(zxM?L{c2;f4zyX4m1V~So zoFy~_h}ww^83rC1kca)+$wf zo;pKvg-3NFEx9V|z<~_GU`sk?I#9Z6aL}sNx3?UqtI9fM)mhB+OL7+X#r56bC;2D7 z>I*P{0|^@kB6wH5RWS7|J(k|#>MuEdc+nQv43p{vH;GI^S-+-9MRTV`ROv{yOukeS zcL;Z4RjLg9p0El0Az zG+5|lds3F6$lhYeP1<#`H20XHRbACQxV5MztLB)!VOY5&la|19lTDII;Qhunj*cvW z(2KYDgFM4^M0%a&Xmh*TrEOyJQK)oNo#1{^*;Lr2naj{P{mP3hsb%t~lGtU{g`GCr zshWXiGwwJU0)P=E%DlJS2{(h3THXqtrj;=u)R+=@sOBA9}8I6RU-^@S5lfgI^;qrWJ_NY%NWy zQ~OK8{Pi6G=}qH#9fVAr1<|-iP&9Tkc%Kc$(XnGWh1xEIwLedjBIxv5wc(^mHDK-3 zRaJKtbt&xjTz6J&?J0djwUUNC;@$ILlf(;wt7+7CX;s7G zVWi2Stffr|m?QxRH-Sgt89o|5srmw0QdmR8ihwVs^LYA{J8mP$>5LJN%T<=K7EE;2 zA=NT@Q%S>yt@~EK`sy36&cn|e`)tjVA&@FyDL3pTZW5XPF7Q4Zir&GPN9K>H)UK-h zxy5N^)?LNv@A1_oO?d}POB>I1A4sY(H8%CFLHY06@XI8raf?Y3fN&Fd6jtC50>vM2 zSYRBnaD*H}&tYYCnM+qz@+atNzjHSs$Z2zlC$G1o`na4ENPQBhx1xfilIjNct$YKx zI`q^aZ@R}?+7wUNNKaQ;WvQ?whrRdu)g9CayB?nr^tdQ zMdff+S?k%RRWE_=Zx-Yn)2ftmLTm&mI2k)v*0Po0{szJSRs76bp}z@2JuF%f zB$Oz$%J+cx*-*~atIaCeq6XeFH=~JD)MV{q6rM)+$*rAw4bPukd7#KTcp%rR(^^*1 za+1jc`I1wfWRe6SI0-ygPEH_D{DE){@E|lmY#cN1@fZvF*imu9xx>3&Ny?h}LS3)+ z5<_+ma+Ul;ic}4|fIoPjY=HFpWG+7m0!u2~CW`F|y?qCGfRc=u3rozaRJ=;XsZ6^J zI(mPf)nwJ{x(AQ(eVWGHt^DB1lc(}DZiDLbpYbPH`0Y#*e{~Bt89cYyIjQ)AOXgoa6#vI{R@;Hb>YO}7V`=HYK%>1mcQC0j&rnud zx)t7FyH!tbl4@ifAjexwl8Ne;o51(56|i>##UJqE5px9GoiJi(My=Bu3oTq`{e*KD zkfa+LfPb@ExlL+zAdxNsMXDN80DlnwJZwT~k@98;gyq09pt8;14PN?$L!`Nk?2S2k zRlB=DQC6H*V`xfCsLtCow8~#YBRj9faJ60Fa~~!T*g{ zOHGPEc?p34<(df@K;j8IzXv=%2fKjVk95xJZq#|Gv;(>GN|O|pv9d;MXIjnR$)uJ6 zTaCfilGmG7qm$#{VB?&2z;C+MBq0Jy+VIKXmtB}t{DEStz1%CGOSKZ52p31!+FLRo zv5$ar=aZxm_bRnsuj7?8Ar~pq#W|0P`V}iB<@d&`ME^-!u`;U(LSs_jjBscajJWwI z5i>BjgWe1RPtJiDF^4%b-?n6NhuWoEfjT#<-u#|n-@X=`!KSyGOx>MYzR;9q<2eGJ zV7ZsncTF})f+0Au^a=16dxTk&yIOic?NIlKX9C_>`X2BEf9T=Se`n3wk&@P3 zh6YRTfm5z?t@_@<(yh692Q3Fz%-g!F$iwSxr`-7xcqd3;8LXGdCduT8cQAN7CMt6x zAPmhRvN(U(KrFX>jk?*`T<{*@r+{-ONm3EPS*FaTcU7%nyzYinOvE{xb6>?p@W&7N zhu~il1VL(u0%l6EB(jCK2fyKCfX5a~aTS{7^Q@iwRvb_b^UdmxVteC2OKGV=JEFAh zN@{U8XB{YV8~8=!?45@Y&Xk(1CYdC+0Z;V2H(5Ek_yZJ44wF=zav8^6Cz6di#qLd{ z2WV2Apm=pZttjg<)VUJr&0cq78J5c($uUW%@6&+z=hc<_?CCg>NqsXA0_G+8q#Ws{ z+7mB$nq~mdZ^Y~=?{vGgwOealmJ*}eHm|hCFn~<|nWUDYtUNAV9i2Bi$16u>)K zIO5nlAVE0ZYm!W=ZXwDMKY?T=K14oE0>Vd-4XJbpLnM=1&k9RE(74l*PpD&uP*mr4 z?(i0J5};pYL0+rXt%j#YM2feVh~+NX_DRQ2&Yq9~m|;ax0D`x1#c}AOsN5};Bat=U z0zN-~INMvp3?qh4KVI9SQnV(QX*DI)16#LdHM;f9ZrjRzyR5v{kb83LU@vdk!=Wx% z^3fo=$rc2eBmoE$;3uk~NOg+0t)vpp5vsw7he)=_A&QJjV`#N^xm3yv6$mOheX<%G zOI+jOLVc&z==l=^Ee;G|#}dbb8>l6Y&#Of6d*wiBt^Vf5l{U5__G4@uuG@mAmBWF! z3ZvDhCBfIpsj^znbmkqiYAvplx$c9zPWJ1Pk~*zfo$7O1-7wZbz=NS#_%6XFi622E z(MiBv90&M7U=m_uedSU1b0-#qzh_05XW~T`l)$~jds?kEc4J>6Eh75UbLb;{z==Q} zyCt7drT2CgoiTd);BXO6^*2DaCzY;T3AOKafS?OX>ntQ~99)wki22LkJq}kDlyf`q z%M%*{ah3Egx9(3nFR7awYqt*OW|dvy^O9DW3}t=i^rq6SEdwqtr$hbjCbSKB`!6$D z;=3I2mRI|10zY^XaOW<7yaRzra+t(oPG=70&i)-Qj5#opWw{j(Hv%XszS6HZ)k@<^g zG>hI2ygXl}P!I`FiRy&iWg|vG?P)ZWRoT0{JtfAP!J^X6JXhHVE_ZinQWqmrrK9fi zg1`TAmJ{azlmaG65O@UK!Qn9Q0?A6C54t(xM0dh6gbcAH95OnUSe904Javs(hPvXh zYUZ$$MCyt0PYi(lqN>T&YAxz)^mM=gAnt~@*#XXId!bLi*G90YO)UZ zRkdnW;*#TZ5O_kv1ceEc#0yL%`5+agAdZbzWyt zOP0OvL{2-re1hOa^hcRq<}slBzJA=bUJO%1^?dKZOW>#y9!I@ zFY+Y{yzS4cRMjQT1D#1p2*G>StfA>l9K5&L;i>=^Q`=#`clS4epY zTfch#$R*XK`I~S=gq|jY=V;{I7yImLPeal%*GS2Twk2s^qrUiyMV8*;vSyn-*<%qh zGd@PPBdC@M2{Da!0U5&NKlv`x)(v^(G z5@z+cX>Q84yqN59ceW%oS`Gc07l-rn@n_y<2PjHnI|bVWgmqYMNMcHOy;oK8h22(^lvbl{Sdw0#Pc~+l%_TYf@bPU>^pk3t z#6$lAyj;En%U}bM!K<4|O*A>a^$rJz)G1;zh=IuI>b|^I|L{8re3|?7*Ua0>#>sYyydONJ$L*5~;1tta{gCvFt&u z{%ycBBRqmx$C*Rhpo7$^*M@mlaJd>uFqGwjZ31a1g3vQjUP2#NC>lmA5CAYmZvk)4 z=$qTXtC&rh9Hfx$Fn7u2E~L*Z3qDRz@_W|O41*E}$XtO`Y7uHf=H@%V(}9@`KJfAk z1PQRdiDadSu2txZqiBQ*3K1Yft9HS@YcbhcI+K%|6no|e5(O8T;WcG-hN85V12%i3 z$5q&uvE!(3BEl92H!&1}ojepFP+lTmYvxNvsx8WG+^yj0-IhLH#VZ-9vVd;xOiOEG zR*fxH(fgfFe-@##En(d#WUklJ+fsi!@R-SvPX}f)c)`mV$P2h56aK8Y{&SHeeQ^x< zO(+T{f(&hSzplBnsC&@XZH2H=c$w7~{aK}IPxcfQrJ)1M-sx%9w$EQq3=V13#YN6L z<6%K+eCmQXaZA6V;R59)^zJph;+#dD2q*9s@Qm4VPE}pqr&_g^(A+RzJ<>qu-;_mI zzv1EXFJSU{Ej>)yz#&co?=?wK3vv_q!wgVFge2h4Ua3UPYjP06i7K?FUYFZi(_(6| zH=b!Nv{+W{z+$}7pUtZ+=Su3V()rgI++D60M^?cKCbuMeNVYH`H7;&;TwF?mjO?tB zbv`GBT%^1tyCJ>GqRvTgFq5i+o4{wpHt>tnoBB}3yBu_xaX3&}FcEwj3jgP{@UaY$ zbAtFMP1^8+_lgBbad66H@Y{CNtYcEL5@~(z5Qdfn7scfdrYK_e zW;vMEns}7+mTGltCc+O-2%MqzCeKw6T#ZF7DY60}a;F<{*G7 zkIjZj2~R$qIFC1hC#s>)0`L|_4)rObjwHaW{xJUjv42jx_ujD=f-Suu@DobKx#;js z;GN59`88)yvQnC+aESXT5CZ`r$<2LL9r}UJG<2D!rFH6)OOROuvywv|qG9}NTzQ?x zI=hn^JFPW&It{NPeis>aak>Y(_Ph^$%t@I2W>AAQAq|w5FdtaTN^($GQLT{Q0-nhq z$tgGo@Vr^vuom>OaE>^^tOPuSl@R;i)57n)_uemF5?Lp99yA8sBly7w)i-bP7v&Jn zC3^YKLkxXXycS4SlG5t(HaM@r5ei1hYqWalh;5DbR=vKzKm~c^jnp4zR8@s~z5STA z+unJm&X}jw@~S1c0U7Wx^f|gf-uIrq^gBi7ABx}rtrAJYGAhdnPkV<>Q}Cx%w}3}p zr9i7utMzIm$mJ||{@Lv)>J|kVcG#aNSn{K3)551>2S}8fz~!zT+OlNZQ6Kov12(}6 za58-}85}Ye;N^0Z$4dSmHVtgg`ll(7`%DzY?M{EOUu&#!quRQ$2p;f3T~6%sd|#x# zjZv2My7P=kL3dlNc4J;IQpA#_M@C)1MvzS$KVgA&SRYu2Jqo{aRH`G(PE@-JlS@jp z?PHgB_^Jy0;9tsK&1-YY`g`?N)iey-BkWI}cyQzPhyQumA@~yo+}J;(qNYZL-}~Pe zgvv@B9lLh@tf^D)y>LMSPtq3>QAl(_WRe%WjFrI0W|Ix`5A=b(<8|yRk!!Dn+eb!g z}l5N zOZMc$5536#JR*GRw8;DaXWD;U@#QJr`{%T%sHljk_fEU_-yIhmhq<*IrcHa~AK|mE z!E2o?$~Wz#C&0_rRS@u(Gl&m5G0+DrEjgu5EFbCw?f83<_igAv=A#Svr`gXKlG8j8 zaoLQVY&DD@h(DeCgyEpop4Dir>oWA}G{cZ&B>Vy*8XrF&cLN>1v%ewq|LN>h-%tea z&?kIm!_o$|8YJGNnVTLB!=s`e{KvG<33!n0 z|H1J`MaD#ihyUYpc=)UfLzVyYKYx30T6j35FThU{g)0LN( zT%5l6_}FE#vx^w>SbDqGnCx+#u-iM`pp#ZtK?$7sYvV8x%SA_JK>QQ_PaqTqfW%M* z_Ck+b`9WE;Ugs(+Yv=hjmodyC0De)nS&`Fq!eAKCd&r)W>03-n_`PHUA|G7%`1)5I zzxdn#L_|iQ?*arc>;9?X;s5>jzyIw)2!v_j4hj6EU~|6YCP?5R|8VV>D_5g@(?3zi zL8d88?$bcvPsKMI^{vH5z2P8;Tc__TOXr90y}TbvaucnbpI)u&1^&IQ##WuHE4fRr zMU5~lJ*Z$(vBRbi%J*G!-u4Ye@OkN#JxtWLhFwcpFcuDR7akGw?ZeZiPWyXwL<~BQ(4i3-{*S2efByaN{{;Hs7(dV^fhXqH zgea%mHsKzULGaskGWPAt9-5ht(o!i|>CF~mF9=^reHw%XL^z=8W>22ZQ>8KJ^K|_> ztwz&iNz7P^<3sTxGu&`aqv>~{?NV>hxO6(LUVCoXj17>gW<>VFMks*kL;`$@o4+PW}7+ z(J?bZLa_zW5t0A6|8IZ)`#)m94#59G;(r2s@RX$d%h{{F)3?~?VEF%K*-n~{T>{?6 z6F5(&9T)wf;&KQ;?`(=qs}y`ybB9jr>aS|n=}I~@>VmN~DkVb#HuBZkiHi2BcCDt_ z*xReC^0=CHo(^8Id=aMltS9x&J?qO;CL};A8$9$0{LzzdwzPZndcE7z+N&+g^rRiH7oLoV+@pm}CJKbWF)hum?;Asa1ffXo z{3GGh9*GD8k}=WWej5^v;}1oXRCHKO*x&y4EjS@MW?DpK)OO+|5%6GlslNFLwr|s_ zwQ@3j3x|7NkbNfXT|%3cav}kx$RK;0K8+3gReVQBdb-9{jKG7sq`y#ouBlgf}OF2f9S;67Vl5^L^mi1mSIA*@bMS ziY~_oz1c!ZWFX{+&%#WS3do(<=(`(W*;8O@a^^PZEB5?j_#f=F=&poCud`p_HZ-jsV&`T|K6oyTU zd}wVDcxn}hPkX(v#(J+9NigqaQj{bJ7wyC5^b2d50f^u~d{gK9B1uQ)%8j!%m&?iaH ziI#>cb)CD_-Ky6$Y1Aas8vqZ+fT z(}90T$UQeg!_a$(hEcQ=J{T4A(2m=ImuHia7-Z(uFV_hPI3#Dbauu1(=FJv*%dq_E zPz;A4N3{qtYHnFohgR2IRyfyH)}gqh^ml(j$GxW-)}7U=i;H`8#l>aX7st}yqosM6 zep8E#_XNvH9RtBbpFYAVWT@Ipv?mNF^mVOTzTncZH{uA|L)^M2Tg7YiMQNP_jRt#J z2e0Z`^b$lxeCyxGE4BnXj4QZXd=NnJ~c`-C5dd7p1GxpyC{+C3zELsik zNt!uzUM4&L9QQ)3%8b{2*+QtoN(cj_j}e$)E4{hw&By!BqQ|n?U`?~P>grtDxz&u^ z-~AP`#+pAG0@h9dwt$JW!5q+7Uh#*3UH3E~Bz zp((y2$iP;ILH|Vlp@~gMIR6gEtlF~_p(9_m5E2GQCCxk~Cofr|J>16#f9krrtk%XF z1UOJ=XJP2WzAjPvC1RvB!~C^(b{2WMw7Rn-kOSkuD?~uffJ!VqU&jDyioJ@J=()<( z$9eTxSWm9x;$#iKM>z?6zUrLTP-pEl==IvZzPYN?+0RYI6(0UAI;F3N-U!857BtF# zLnL6xjcwdWo3OkYc?OSgVHT(O7go>jA!tW-Bt(d3t$he}s~7^Bw{GpUCTyJKaUL?v|o~ zGtE_6#RuCEjGP#B>g_Ejb$-&I#%sQ*OWp>^rSsEyEow(yd1cKIoWucw)b)Wst{T?r z4;CHNH#e)*2&-`P#VBAO75>Qe8`ps{PJ0Sw(|mIe;e==q1R1OGEo8!!&~G0g{U;Nl zpU)9jWB*bCXLbq0y!rTZM9sb}Bz(5<>LOTxPEZ4h4EoBjAiS_v91jXzd)SMW%aw{` zW1Y>GRJ+TRWUtY?3Kqv^)4s}a=kj5`U6*Wc!~~k8tW#NO$<2x{Kv97~r&2xvmLAfq zDD>h`ktR)DlJuNIT$;{n&K7E2E?pu2;&7}tbnOGrj9i-QL6ft-xT;A#HyzgI62v*+ z{7k+6%{Si?;>YRZ_@`s=Na%wzuH)%9cmy)I{_Wo|en^_L>IcutMn8K8btJTM?;k!} zN7Sq!ynenC?KH$#_0f9JFyGDa95}S12&22riwiw9MY%~ywWiv%niE|m4H>)l`{z$( zFaO|0ow0^Y;7Q6d)g*h`6|ot>^JYsAck3aA^u#Ka6f4QBLA$&M?W)cxYt}Z6rJFB9 zM|fum6Y$LZK6O`eoy%3|$x-n0Ge43$!ii@W8U5{zZ@wkEAL!qhPR>6R$`7*t1{&)B z3XORE{(tQB&RON4)rg@f%7owjmb6eqaU~E*u$Pqy@d@l9T1-?rDf)y-D zkJB(A*+si8d|_*&Ew{F|79nnXtE;^sn?6kDPeI9TqG6?L-Hk1_!P?SYxu?=lB3hjd z=Xlb1Pgr^+#{h1`AZfp1#Xf+EF7FxUEn`(Vu&T#YFHf2!{L)ghMUkGPR=YaZC{(M7 z#2KGf&YR2J)xMs6oQ_7bkRd7!u-LIgy`x2^Dt?c@>+VpAK=TO?_~*S z?h?%jzb3*>asXxP_vb5zFTY02Rgx|AwRI6WK>jCEjH983bO%qFcCDx#G@0Pws}&6R z-`geX+^w`UHS3FV53CqGX*ystxHO8y)dV&95gEytRhb5!QFn;^ZVF41iBnvyDy%~o2v0@K&B47&FA#C$1R zx09P{_N&w zUni3po?Z6b_V?G#kzB3GhNi&1Rq>`EEO<`Ft!B;>%dbbaE+HX-{SeLD)&6AVAMDy0{$@a6l+kg13B(2Uxe_0qOhygifV+~lY>e2*1V3Y z2AYO#7c}0JSbCX3HFMZ};7{~i&k;HO(I1(N3%m2h*S4*q>0t2t=`Eubh(9jPrrTa# zO0(<7uW|bk`oTaF*gY_Jrr((H>Gtj0fAzbD<^r>L^mqB~&Fz?>dp;%ZHsC)T-w6DF zDG2$hgail&^eQF%I#tFFtx{H_U`Qm%O6c?+bo_`tr0dIH3rP<*ozT1OS*W+g`CIM9 zo&wAAY*OYTTw9W@{8N+O;4U&9IJxiSAf$s^k2oF?8-Y<5WUTfc?JBd{`BB}@II4B**>1+VRu)5n#=^NGYqvXZQn zJ3=NRfy)J~dUAipd_S(&7?WA9w_>Wr8d| zVcox@h5a}2@Ba#g1nlX|!@?_35n+G*2KYxuWAX+wwsf74f7W1aRSEh1sKM-G=%5fv zFnCrt|3_5AT>YI&+?Xm8P_&CaP9)%9!kx>PFbB5SfO33ifp^}nH+Zz@k_LWFO$x0kJXVPL+d^z5jxC38ZgV2=TZCpmACn12@lzs?~fq;7mpkiGs|stk&o zmcs%%@|y*S?}Xk6`D^IH&G~Bm3D0n%@|>=#7e)zh(3wfhVsZorlQtyqtnBV0bF74v{NAP^dNoa_ zzbEcSQWZKO0G^h^AyUz-{HTmMuFQtnj9Ge1Mx$avBSQW!|)frE#f| zlV#L>4AJb8iG2%rL5TnLd4!M>*kQA5-Dkf?H1Rhw;lt0?(W@<%rH3K(S;^nI$gxsk zf_Lu4URrsnU3UVx{h~%!k=<64=4oD>p0S$t)-k`l^b%i;%GmC-P92ED&{?M|K!t2@ z2!#mJiKqhUs>T+h)|oJArobr8sx_+j7-d7dMK!WV2_wM|9xYcHOLn8!;=M$((mZTN zjj)5TV@BkI2zy?Sj##!?9E0O9HUb+|qcE>!XufZ`DD5>dElCK)L3YCr9(BwzZrN)I z0>{hOU45IAeYP$>ejWQ~dUc|DxsgwwKv{c8u^W}y;bITBI zloo!^8daf6r5am{@>wWKKY01_*yY20V;RR)+m4%2=tP5*N4LE9if2RQUG*VT~=0S9WZvG{0BYR z9wV=cB?SOMmm~~uBHpNi*B)jGlX5$jW)FYB^CKhK>ctHoj2u_d0q{Fl!!S%=V_99@ zpfG=+GAr}pbU==XiyoZuEz&*%&-yD#zCnYW*`0p3Bt`_1zS zn4=}I7NzW+_;{J{X2nkNG)HfkU(HC#N;9(w;jZfJOS z*fKH}%d1C*RZ10#p#0z&2sXN*k2fp$#c&ZU8JOirjMGEgeiZ#JJigJ2ZAU~Aqp?0# za*CW`dO1z^SS<0_ zF&lj2uL7ek0&YFN@yJ`M15J;@;)eFc1qCCQ6mu`}mn_xDPx-+!4Gj&*z2H|tU-~7* za5hF{I31{(+Op(+IJq&KPzoln@4g2PGApH$6b7c}cZ|9q;DzUwt%Ln{<$QwqPjW%n zNX)CZ-#Lo<&ZUtySM4-pfB0WfSC;^ZKE)&at-oCsH=H(yTXUbs8c zvTU~6tfVx8e_jXFpKtutpUv-9d8`AidA8iF!5VCV!Jw%grY9=xZu%+{iK_@2;4m_A z_yvYv!{?;8YA%hHo#WL?qB?xwx4|q=ujaJ?pLedLiRX6*hVls8zlm9}DZNQyW>;rB z83y>PcF_B?AtX`J2Ft=<=r;*Gi;xc@ARMOXp`+pt3Fl=W$}k19t>Os1XKX1DNA)kP zYz_kmAfvpY2u$ZtwQJo)St#!{0e`!`tImx{Hz@HVQldvdag@Hu?IPh%Sire0c-*c+ zfiT#Z_}*Ywhyw4y!Lsoesgl1Xnts)Be(u>4WWX)O$xZ6Bs_Ks!KlpscVlFID>k(db zYcO7kSFOHG#$O@u0K@&$Z?Wt((9DUpN)e0f>2V zh<^&Rvw7yQ?KP2?M4NrlmD&hevjR z42hC_p`pQbqSJ^pRoX6uh-@uZL$hUMNl>L7^a$}nNB}rcq`K^=w@GNj{B+IPvW~nw zO}nSRuw8jcLDOFF^h?C7Y3k@u_q+2ng@t|X%F8>hVf>X;HMMQs?6}kyRx96I?qu?X zO{imtg?bbjGzi~*)P)3oolMyH$6vAH`DO1}Ua0uBz+SzwF+r$!0o&JJolkSK$cah9 zKQQ2CN%kI#%XrXaE6uVcq4Q)QIoYm1_XP=5lJQsj?}hnahb$$+!zRq1+GRBq^3_Xr z1Qq&CO#dU8u+utC7x!N z+gPa6l(nmt>_=SLKYdF;5O*8G0U4{fqZ^#GJa#p`AHoA{Q4%08Z zvdTi^3l|bLJ^>*JMP*j#Txc3&5hcf$NwM%%+Yb4^2rr{StuuDoOi8;;S-ZNs8})Tv zTHYI|B$GS7fOI%0;ooA)HD$G&X*ISlMjq2wX?OE54GuJeJ$?mLOu9_yktU6{4DBO& zkEgk?S*@u4fRPjMhw0er2BcM!jUMDjQFT%FqG~y;CeSRHiiBx}s|5Vz%`eHt4Ul~s zaP+hjHL}6ew-Z^kFcHbVSmY}%nzRn_fbL^%|b6DxB# z$#;}UrD#23_9fm`*J-jH7&ILq62NV!>*9yoKqkZ<$9ygwUP1MLuFZ5{(B9%ckzB2! z+x+9N95`}+R@rOa6PZAUL*UPWe_}ylA;!NAoG=>uU0vFOoJ$N%!0)H4tJ-z0=Kiwg zyn*H}y{1r&$%7bwg#y@saPr-|4Ju5|;Xi+u=tMz#5O}bD0(c)95a4N*0x4=4$ARj1 zUf6BMY>Pih#Xu!ryL;9TlqUCxX0~AE2TIiV3HJ6T$=@Ne-X^(mY(&jP921mR-AYZ3nW_ z(B#mSvq!3v6~-?(h;$f$^gCedF5P9a*{p_+s^bh61SllhJ27j5`255t@fE2ewSXp} zos6Xz^;51Q)WGP`J)-N^kgu%+_+ehF&Fe*K^n|g|)!R{c?wlDVho4u%LJtTh|KJeG z-EsgX5SToDD;T^?$UM*f@p(!4ZaSwF|Kfm6FzdIpXjZEDxhgY_?tP;9$jU!&JA`}~ zX@JCR&JM$Xt)+W#@IX>lZdRJHSD*8qyqt`=DId*5W0 zo9UF@qq%hN7Zc;JK$wA96M#!7jO;M!JAqf+7CX%MHzR&%Y}Mx_ceyaK{5X9W;N=+& z>6(tT;;uY{-rnfWD{Dt~gLn1s?Z68VMX5yIj1Y`Zz=S zSDB?_BRoouurG$RI)kpNZ_jFJjG{DJYf}HEB#6Df<@b)dK)x3lfIlDvf}jI!;g!q9 ziqYT7xHj4xyQf{vY!XPfZ*c!AB#SV*O39aW4cK4+?mEz7PipC`Y3)*|^7B#FB$V$Z zlaCC?Foq2Z65P>ZYizD+H!uI!Ul9xDf&}F9QC-?qgd&GVgS)O(U)VP?1YPEo%jF|Y zYP|uoOwd}=c}$<9NCe&Z#wZeDMyv!7u;ix&`Ig@^>H;3mI}(8pF{_vEwy2N8=O-!* zRj^Cq9pbnFb`zm}o!^`h)Ai2n|cm9<*! zX<6Ofn8@4ReJ0tHv&KA8Q9h}W4YgSYQMSCY_l>-!p5d+Mgk}gAM(ZN$TxQ<{RcQfCxnr4=dv}<|| zMW<}XPIY&8cG^38=b``@7v%pf)3<_s%W`tUfr9plSstV!M>zi*_N%i(h( zr$+Z&0YA`~vZ+Rk5j}L94n!_i#TVLJi?ZwoVB)~bwdR#I@v7yB70Pz(9_IPx)-%u! zCiq9T+#;(R{U2ndkgfg%lHZr|$^k5o2tjN%AvaM~(BFu_;VHYl`&5g)=Af<+?lbd6 zb(OmH)G0ekPSTFqj-l?TDT5S;unru`ZJj%xlp+6+>sIjjq~ZtqAD4{Ow7CirX=r>z zKtIZ-7gtpcGx8pJPZ;9;1?ZDG*#QJ&t`Gh|RJ61EQhV*vjs+TKS*->!_{!e;4 z;tMEhxJ?5j4IK60(H7G#lc@z+4sWdnz5gvlXy47rf&XXEI%P`BI$%NsG_SC4DS|k+ zev=B!9VhJfn_85wVES?E8LPFs(S`sc%!s0cU7B|r&YkTw*5r2MJAJZ>S`c?NxKJAn zlKCFz4$|~HM_ovLEaPt_oL~3mx^*&HCTbqWs*%PIe;F190)X^zyEYMFL^S^1+5pLz zRb`&8BCG{EzB|{B@k(dM=I>^<{N>s<@BNyjzR~wU4%}riuc}Al@hZIMk#?;rd%2T%Rt{RB;6 zLTWzU(>ZVo&YdmG-iQ`pm-#^d?z+JkrU?{NTV)v1Av9tGh_wFz2%Ua)hq{m=H zpk_^rr6i64vuZNyMB9L==zH!5*_v5s77b?wR0P{d{y0&Jr>4W4*HJ`08eQrJF=y^x`vPHb7#Gth^(@>CD8X}0&8aOHYFcZDK$F&0pI(ns&GUbD7Vo&iP=77B zlX=CMivMO-zn&i6u59yvo|*aT^MAAW?;|4VE1c0CCqH_XN+2l6>EX(7S6O|E^R|Kj z+2J5M>dgP@^u|^!(#CVu+1U-c1CXc1qD)@aM|l3PzT)aXTX*_g{tN_g*r9CjRkS8n z(2)dmu=!3n**}%f{L#Sb$UZh%UE}ROcPzWEnrC0X`xKzMv#n4|j61>^`XwDhIa5+@ z>yQaB9hawuSJWSWe>d~@f5Zy@=o{4I({169bfdHQH9*i=E_}kE*-m=H3IZf3BqPf+ zHC0nxRRaOCHQzfF(P1kKj^$yzr!t8$K+VQ;+)}NeBO}IIRoTx`T}A35RWm-6%3sW5 zWJhgDPyX4nxKBrDWp#uQqcNYTx3Lv}6TsnaPE}P^zSo@x|AR?I(doaAEms}hsyy@j zs~K+|JeaBdRA21CZ;gaTkK^%@_*Et&vC)t+AiZTa6nEnXv27O!kV@C4i3wLxV^s@z zZt8z^L!QK@(vY&Z$)e2pdL%o<^-cNXMpb@M%$U%v%1azoQ-2DJzeMU{HHW~Fm-Oay z&!66R>cVoo>K;ZK*qZ2?C@l1W5Z*w(=7lLrJA`>gQui`Rb|R zuUeIQ%D)+ufGmM-fbbKQP8D4pS^xctUKtxz%Z>|C!sja^2Te6#fdCnJRD2#9UdyGa zsX7Rd8#flg)!aZj=_Jxcsq9d7V^yczQd6E01NNWUOV315C$Z%spnb{k1>ExfjND9% z<%|Es78GAL+-;iz)Yf0g)XwbG+bY+p#V5p6Dcf|hUTk3eAR#~sYsPTJ`iJswAb?Y~ zF?*)cF!4X)06A2{>z^A-Ls;w)am}B|^Y)F`wvbTWH~;+JhGFi1AwVvbR+g(oj4Mvt^4M~f;Wr%LrfLUYd^O{P z=MM}hkKolOYfE4EXB-q7B=uvLdH+-SC-ji)Jul0LoMUovAtTZ*MZmM2jjcCkddqDj zov+#bpa12e8j8l0c(Ty!4Ll!1?)Ar44ISahGcO*B4*)zxUHS zBv*Z8HKU1bgv~(V#+C5cm>yDb&wgy)K?ok4=V_P(NO2d!#!S&nMFr2@=hxAbR<)JirR>p7*1Zo+HYCE z9)KxVUd@(P;AV|nwimz@;&hy?uDanV*;LBfLx7};VAd8FkwlA-VeZHI?8R!sTjA_z zxo_rXWE?yeP<(K!Dr19G13$W}`5$kv_0~QNDUU>zr_`n+A+-#>r)-NG(7*D%B&l%l zho?8F+B16wEN|XF1W38C!QG!dbNhNH8BF5$olEqmL?vd4)CKQPJ{BDUP8n}yy9XV6 z6J8C#iYmi7gj}cUTIpgfh~o=eP<1czU~$ZQja~VV#g+>}(!%hR`Bg15L%Jzv+UcLI z+gvk))_~<0uF@N6dS&gyF6#-IK_#3=5$*{AQVv3QX&&mo9uEqbLtOBB8TH?K{I_>O z4}=mZ&JA5BPwV!0@(c&q-}&H9PLI6e4^p%hsf&3;3Ergy*Jd6}vpa~O08rFy;R56Y zyjFdCDnI{HYZd)$Z{2zg$(btiR!wmBIqULzs|0rv8ZjTDnVU$Rfe$tK!GiXx@;sZyQn-+stT1C_E=Xms%pAgZZpP4P&e^Jdu=xT(I`bX zWmm3Zy?R2000~38q-ba)D;^K8kiQZ=chizAL6j`-$ENDh5%2Y>vo#k^A6b9oHQcBc z4-LJmcGvCWPQd9xd83`|N5IeZCj`jVg1eP;iv>XY{P2pk0~wQbn{#vjeDDMR-ABbc z9lrCGo^Y{nv5gq|9kKxsAk|*#>MI&mUA@0<+8D0Qo^d&&ZDC#6bex)5+QA%0 z>7ET;Dg|-~kTYW=!zJZR%w`rgC4aRbCoe0P>ZGzmS=MerPMNCCws~4M)_qm8h3dkV zn%0dFLP>i`tzip)pg7VVjc!u?Kk{;B3GE+_Em4#rL(hiMtl#WV^}$l^|L+gn)pit@ zI`r~Nx4z*T{@)iL*t;Ia47H2+2Lhx%fx_F9?${=nZalClEgY_;3hj)dMi%PAm}-A7 z$WapyiwE`Tc$*Ufq^mG-(-B%0+%db){H2*R+km_Yj-5bQE}DB-cC2~IBo=X9udQvV zsjH!v=~rj7+uiQ${u@<|;4Qv7M{wxv!{R8~vp-=>B+PlbODCq0Wc*XHr8)e|+#4cw zp*ToOar{Yu(mOZA{&$D2Nl8c?;JMm1-S@CSN>w4FEycr;K$X2KJPjIAb%k`$2(~R>l~(Js%g{lNn1QVYZ!$zz?uwk`O5+2Jqn^+@;ln6-zbiPy#r>ZQt6Omu%aDY zX#xw-K68mE;4|=55< zi!GC$fK>PRW(&tEE0a?=#ju4w*u{@66&3r&&@3jqO_ zW-ehPuOMJufX^}1{y^Ysn686{KAWcN6Tb2+Am4RhJ?hBJyUx!VFj(?zb8{2=!#x|! z=Ok)2gFBN$G#Z}t4X_o-f@((Pe>H=h~s&BhxdSq&AJS~_n~>vkH2VKmR+#1>V+ zd~+5~gfG(_3y<{Teo`hBjwHEf!jCWr^H+&|wb;@ep8V$K0q&`Fo8qef`8VIo^#6Ex zn-W@=aJkoU_kHxYV}Ctath*X?@TE~a=W!G*+U z2Mz(>q1=e~=y`MNW*xr!z;9P(dq=~@x-M~1aZ9+HWbFiN^aP|Dbc7>NY(~67goHn& z7v2mf47aBUH5oVg(B9#Y)x;y;Bl|01PV*u-asDbn$8WXR(ky4(HI+6%`Syeq|6Rg; zO}h%~yUXTusR9DwENP0(?F^~gtWqxS8b;rM-6osNyrS7f;FJ~oC&%SPNGDXDBI0k| z(n?~6v{h%(Ojh{3t{0}=38|$4t2LOajq`}+VI{ampiVUjkU|Vx?Din`#SGd9BpX>0 zal^8!NVX4$yVRZPT3Z$!1*ZBvuC~aqBZT;eq>~^enjcaj<)s!{dy0(WYO$r*3eCd1 z2-wF5RLA9F@ScC(waX7{k)+=C%8>tHu0Qi*^8bZ1VLgouGvSXyn=3uIi~t!>u3i<8 z4MLp``f*(%4?w#997&5tlD5@T9_REZ(7jL)UewhSc4d)6Bn-r|yprCvj#85Vxj~45 z3q@N^a`h6p9#_;s5caO@DfIJ@K?$irB-d^_XHb)2{fQ{ct}YyT?V4yu%ViQ+yh>6s zin3ZOVoQd%eC&URnfjrA0Huwz4>ETB;o#d};B>Mo(GgYqewX&~%YN&&xoktNT~y!oGzt*4_;#8tb;)$nW$-eS;21TET#| zW6y?#)=;9R{PV?tY9QY=`EZc{xzOzaJ|xE%ukcV4+c6P$dn&vmu?D9ehYS>YNPx24 zojv0%i6wM(&!YEus6(D!;7J|t^63&8#Z_WUhR4JI5AjD1pHTH_-$$7lFC6^-BfGLG zwAL1F3)w%)$UJz=LJ%@T+6F8HMtauO5KWM_ND&}Ggzz@4N=JuP-Rm25B%(8yIyW}f zHMUk4Z6s`I-N>hx&^_(Zl}7~w%Da0OM4T1~kPf3^MAr+zmZb=g3*83 zG;ux**tv76m2j84ifFL93gxep~xZAJjk%r;0UcX3yl=1`* z&4+0L`7EH6ZVH#r&22X*rZpIo>q?bic^r>>cpCA;Xo5aQOZxChjP^jgrUVL(lR*8| z*plIK@TocTV^rEF!To1I`?uJws>5MxGZa4{VBDXMP2v8zxuE)pwdkfGJ2FYI&F85% z8VKUHDXIcUBAkV%(tn#$UDa*Gt~xs}RW&jP?d_f{P@G{0HiF!;)x41xNXt_8PI`FgU#Se{+PrZm~SNYhEm=mNjoKo zH2V`7MVU}O79E1r@P7Xn+Q$s_L-0^RLU$au+|9t{`&0=yLbgaG$bE2dm*29vKAa@} zQ#Padu3RqZb=ta?>hvfb1!ZcmARdmCQ0?)yHa32Ct`i{i?Up)`1V2mnc>;r2$)pZm zA8I^hB=Z;JYMN?u_qz!hcxp}nbDDz0ka*zB{dj2H=bzfkLTd{Phr>uf^aA^{B{ogs zRyG*3dGX8G&VnU)z^a)1%U_KxG5(qcy-e<}ARTI1@Z3!QPt9dY$T#V77I6Jx z0Y9~O<#}Rh97Cp9or{(@!w=_;S4s``(FUIqeCX?S#iH3o`HdUbHxi|^=bW z+-^+a4080batC;QWqi4aQySWt4VNdm!0d1vQUu6n#m`uTt!Nz6J=`DCLv_1z4%lCK zE`B~Q9BtcfgySKURt_}JdsR!k#|~=u=5jNs%dEqXOEjb`7BV!N;v#cfym2F^_AcveJ`(qqX`oGQQQ-Sbs=iXDJ9H4CC^Q*=*sioxte$XYx>l z>vk*TX_r%XqzI5FI1mAL8Sjo?_<||e3Vopdj2XIh5st%~@7=Zh zRq2YiyB!Y;1_Un&866Z-%6O%8dXzKPw1R}q5TPe$dtbj7t^aDWQk_#U-WtzBh;ol{ zaT_H-^&Mqo8lH$ao#+7HGhEoC((79y*Oe8pc}fH!s$VtEN24*Pa}Fuo1l!-%Fyibr zW-+MC@W^JvO>Qjf_}A7{KipN?@y_!vHKZ_F(#4Bse3zHpg1*zF~{l@(f^Vyo;wHe~R+br`8S94|f3&ysVQT_5~s>!QFp+;r{}r zm34Fd-n6{oXa0WI|MxfcE5S#;!EnQL7kGg0$2s7|=Z8EZ>cKMyE<2eE9hfP9e;@@2 zw(bb1U1e(}&yfWFY!-WKp!-yT`Z=}btJbqgZ#Kz+&`&R&u&NIaKM`?Ky32g$jqTAM zK&}2m2kd4`w$1mJSHOr;H2a;NMES50sodUc+|)y1J+Ezo1T7-h3xME7JaWo*T7|6K z!TtFJ5d2hZsc9d5{2ySxp+hQ7flZr?Fmi-cz<3{fseo;dB2+xyeAi-E)thZIqj!|e zayP}>lF4{bG!uw2O+c`s9Pdy@ca<=Nm%!m;V zN<~Dy$~4XgclKat(q^EDOSX{1X*XN4Deq!imIy6yC#s5`m^B*ul0=ie=!Z@kwpbYS zGtIvfgq_75Pw>d5>h495OUzpEmjJ=$@D|KVDuaWwpjg$OJX`$%BrqO;e+qSlY_9DJ z5H^GWdC$g7``Tiqqe-(r6L0gn3(4$AWWpc<2v(GVouc#7mqY}gLd};HZ0t@Z2c^1b~Hy}G0O?p>}W*|90tCaBLEPFEPXoI+>YaY7dHb{9*FX4;a_n&xV~ zB}PL-rAwqv^i4P?F~ZPFm$RX53_MYp#G|HHHSd#IS)hvtntl}!9N3S>nb=B22`Xw( zeOOKn6>DhMNZP8S@m@py07`u3v6DQ1?~Lv%4T`3yue~A(*h20mi8aM-A$zc`G%-n` z(j>y1+IM8@(IXd5p9T^qtnUjory+lm9Yy%9;MnI&T$}N=vvF$2&TtwQ#J>Od>%y8O zNHXipX8V8>zu_en{O-4iHnYp-a@pPFesUG>_jqb&bv;@@+qUhI>aO=C-b9odTriLP$)>8z4y zNO48M;Mq=-8s8m^OY;d~O>P)amOx^++19_D(Z`~%IFi2l4oIx?B{dMavu_EIT_h0R_Q|FJkrYq4Hj;D=>ACKz9(7b0L*ssvHEB%=^37Mk0HBhOAiq33 z7irIK_l`tM96B8}+)4WBkO(W?senheF5;0nLifJ5Dzqd8DEg~_U<Nukj?6)4L7*iPKwR!byFEKFGw`hBE4AfPn$J0D&b?6Hx;ESR6uUxCrta&AjYtC#Jght*JFoBN4~)1&&b zP$2W?R~;oqiLgU*7%A3d0RW4I3K*mnTrmR`G_QBY3*E)ziWVMMC!!_EvHqB;sEVHE zG(zR}4MJpJXvm^;Fv-^c5)cgA^RJfo4?IBWx46q@_)7hnN!lD7R40uIAv{=E3E0=L z_DcbPqxvopg@X1>%UZ;^LFCr#zJ>k2b&Ay21$xizyKq5-ANuCz zLK*-1$27JNDwbyccXR#DU`FPiyPD)MLP4Sw>)y@ZY8?d~Pby#t@`Wmqj;y$G`)s}^ z9|1LIIN{gwCM!izRg^`l_}@^aPIi{d%uE`vgUQrTwzvORfM9-R&o|b23PU_x~vysfAUVzC1%s;Sxs2e0Oh zd8=;MymsLzAN!6Ty>;Z)Rzy$!{pgqL*Ke%8U5o7PI|pC1kZ3-hLgapPeAKE2?)5p4 zkR|{ohhfUb;fqNQqk|v`^N=<>;mqotkqQ{{$w_Z}iGk4D<*;+6sQ(fU=2VNPp$~eB(7W;5Rj~jRdVdsfd0*{IwN#Z^6qUzS$Q*{7+_tDGf-;aKH1jVBdzx;6D zQQ?Ku$nUOBTv-X!}5$I2G6yB&T~FH#uN*u|zd!I=Dr9d40wm0S!(6sJjb zYpt4q8l+3Sy z{fKv@_W}0LA^j;c!R4TOXC6B8-!MSQQ8;XswR0dkL1(OkVw(ZU#DxAx9VgeiX~D-nBdd<|II zZuoBJssY3bYOQgqy|ysoZl5WMczfUdPyT^qyYG`SobFBN*GKDn*6Ibv>4>oTDpAUY z<7S=N43aVrUQ`|NIReWh1jzPEgb)k2>&K4w7?D_8Uo19LaosaE9O+Gjl)%d*>Yv=K zm?nO$0tn_>+_|YsRquZdQsN7dI)omo+&^v&&J~_lj{S7tnDiGf3!RUasMP$<-|g*I@Ug5QReVa|@k{Rzqt#2-k~RnBWCFd5zHPcY-i7>#bS6_Bvosa;j)g<& zc;JUGC?5qU2OY}Ck1smLqBG9Qq9OsNH=g}$s=BeY>NJ2@0Kx9w_yh&i=fAh84}IJ0 zeo1ZfXyF-;vwv!09r>nidB5|VYGyfA0aJ8`6ZGS`b5)=x>(1u4Bj;hvp0@<`NoS?2 zKRMIcij&z&rKu&mO%J8y5j&P*omR3vm508|@@R&!jzmj}?fDmuizsbOwn0n}5DPd$ zh^`sW>&XB6J!!^BZBehM z2puH6{!`NK;q--5`}PS!acC?#<_zC#LR8a!m4=-JU<3`iG1O0kHV?+cp`1KK(ZZ|@ zEmXi1`bJJh3j2ogTUg@G#!hd4cFEZAT>M*marv0LFFRS0y|FI8vvy;@w{|XOgdWQI zk;>|VV;1nvnr2j$hNCN0YJ)I`Xi=_ZJzC*o3GCL9pQKdg{ zH()Ibg_FZRpc_(By9^_*(Vgr}4yP5VgOoN2P})YO)a4c`VD=3`a&M!y zwuYpK(wEomZYUZy&c{0d;f#$$8(i-GqU`)+?OdBJK3#8B_AZl0G9Hhsn{Grb znb$LwY@bxG{bwe1OY7l-fskjW-|M~9a<&>BMEoB?Dna_abqi16!YyKB2i z@fWlW;|kbsSM^x`RD02le2>$Z=H^?Sw)l~<))tFZ+~^+~aaLv#?-*g-;#b0vwn$cQ ziOYkuY^;blpp=k*dD4I@W(6SF3LbejQW;CSU4==T0^9TBm*v)#_z!i6LFY8eoEoIf zE{CIV!c_@P6B$hHkk0`aKBP1qKhv!_dP_5I)j<^k1JGtLZ zQ99kX@93#pTk3AN?q>1HfSjTXICI^b9gDbYV?D||+tbmOgt`qmYRVP%?Nm~T+~Z^` z7b;*9B$0_UDk?4kA8n<7aC^jw-bYBgTO2k@oF#LG?G+m_fB6+dq^Ac@Nc6-8ULq~K z3=q6ob+`=yF9H!V{r*Tb?w51p*vK8DgpmZkN~HmN#m}nSi#qgMA=wtZB-Fh%v?+ zgj&LnA@e&^QsSJ5gHz26kTr_TK>kNpcuSRVE+dJD8wRZN>WnGJYy}{AZ!zGM_-t4n zZ8opZz`K>=9+$*L`#09t0l65qZ8AKHXQ~c{g&^NTkfe2wA~Z~*5jXFRy@SpXz*n~$ z8yl0ZNWn3}qZ3_u;AOkil4wJ(jlfjcnyoceMg1dQ0Kq~Cotg5K#K~BO5b43?3!Ar8 zFe^557VY+`vtHK(vJR%iG%y6~6WU^0B994e{p@V@#@1?LoxT`77}IcA*TuC%EyozM`A+)%ADfpX^Q;U&WS*En zM9IIui-xPb-NIODh>Mu~uYJ0W^;f$Cf%|*oSwpNb$cDO@+fX3PTE=&h{%H>7g{K=v z$WgTegGTQ4tH#cu{M)Bb*R`IdBZ}J<9_~ehDOh-7E$C-o@-`Stf?TR)~T71%x z>e)(hLg|pa?Giw6V36GV-Y%8Ywi=2TCR|2AH_o31Yv%QOBvSV7-K3Y#Jq$2BT}!YN zMm!s@idck+i+0|KOe)8TsmgBB$e!x{Sy4KkaA==@VPVVI?fP08F(rX`wpZi>)O!u^ zPvcDfYe4i)pZjWKcDARlwsyodM{CTxzyJOUJr%nrBSm#*&w=V|r9Vj9WPtUrMtuoMvdD5#iS%N}jM>M+}e`I`87p)&{XcPVPYqcku&56{@&A^nUi#LH(V z9Kq4zQANKQ?f2wSy44P8YFq!*rN(pBFdC<(hC}}6-^S}c{9e!z6ChrDr)MbtY|XjX zkb>CV*!tP-Q@Fx4HD?LiD?so~6-74z(L4AuzFlc}thMg+ZUJy2iBLlO8Z$~M=u)gF zx{13lekwdy+)W()G%*#0Bp_@pald;xInY#4bPaQyvT*D z&2zf562(Eq`V*~qIp9^TTej5PYV3?qFn{lT4YBvj1STz)I%{WoT{E5M&_af;Rh?gT zfq5VeP=$8CD^}M}pPGILC3Fm20A8DLdM-d=%g=`}gKxn*S5yuYra&y9kO$Q5uFhn? zh>PDYYQ5ABb)1uF+wsb_u#qSaXMqE6tj-s5JaJKY^ilD*W_uj1V+XGyx3!ti5d*gb z|I-~%^vSSGH_07L6(0R0v9mgvC*lhH!?K-@aGsF`rBDeFqXFl0W$C^_ruC3t&FU{| zxy`oTeQIMJ1|Z`u_`$1*z9~;E)|YGt1WiX8oc=9a8Y`~%!+WgZf|^R!_S5>Ma>PUY zUYxq6^pYYd)BD!HcBBT!&XuS)C8im?gSb5^6OeDsGsI#I>(&)&BUz! z=wJsm;At>nQ?0E)tr|OF))e&_=ZgWse=ARYl~+kcSx*Ck6-gf$ZH2)=#`iC47nKt` z6i4Z%L7^%d>c9hlz=OpEoP9B*M)vZ(wDTpE;hXGBLZJh`2@id~fgaavUB9tnWERP2 z&8{00PCSu*kH?D<;7Qv(Ewx4MZdiI=4_!e#m9z%{v`QoTl4#+q^~VF<+C&sj;ljQn zr?-ApM0I%1_dq0Zx>et!g5wf^nL!dD;-0WGHq_EW2AKp{A$E@E-|%*qXu{!d#1DKo+k0(YWma_gFFx}yUI85uKL75mTh4YyqXT|Fz|k{+eBLf&;_JV-6f2x792Z+E-3vXFYG&g>dUI4OWtIf zh`rJgMFnLF&Crbh%pmCwnH~?RgHEQhq;}4ypD!_*-YzqY*_)T6(RS~px+1#&%#?&3 zuLDk($|{fvO)+(EFQ!P_fN1%G2s+o#LH)qh{VNmz&;anm`c0R8cn94BWl|h}# zNElg8C%XN#t^%&p+c0V5kv_0Cy?q7eSDv5czmN|vC{h>{O&Tlrf1rt>77&mip9~{1 z;?1wP1bHMN##8m;oO<=P1 z!r7fx3(QW;E$N>6V9zw(LBQhoH2`3@%sV(ZP7$QYas~0W;cha4tbH$_YM39t~v|;^%!4R#Tv+zzRB~h|Fgq%e-&Av8L(pkT8eT&PL04&)< zt#Ii2R8{^BbS|q=WSDB*SkyXogV3g`?nc#hJT!c?x|SPNBrM!U&mcN7N;vr$^kq04 zpH+2M4Pj~}a{&rRL9b~Kr4P-=%~QaxjP<$N8X`{5_2_UUFO;^fFt7aC=YxPDKq$N0 zN4!IA6D}vX3xdcprmUL>^uKZ9b*s|E1nlQj5y6T5e*y@$LTJDRRPldt?vTdt3mIgwGrqWoZuQ5!8LUP2o^BZ%=NxGlE-h4PI~z2^tlV`=^0Yghq!<# zi4#-{e2Vf+6V_l8w=mKIZI!fkh*#48p`mZ0Tu;O7JO0N{XJ~X=I2&=rO0ced@$*h+ zdvCdZ2Mef3U+QNEl-IjOg8U`(*|p|nfZ%bZcyvka!9xkDVh&b)BE1Cno)h~NfLmo2Y-wVp=q>n{)i zF+c0Sf}T!OWIn#aAErBIRgnmw$2+vlQObxL;V|t6E9gxkn0d{V#8K3}5QhWD2kdIs z9komW8x6`$pFsY+TRq98x|kJ3)}0ln{cwOJmDa zK0SvhX6Pfeb&&AaAK5~(`v}R8qg!Dn9wGlh9DpVSye&#V%*__$@pcn9R!)w7-($Fn zTJx)l8XIq1?=J+!(`-uO1O#Qe_lya^3Hj=w;Y=qmm};pCx&qgC@Umle4x;`=xo^qD zL}PJBaF4GTCD<;K7TdU`C7`7#6?1r1I%-LgRzZXGduK1eN0=3^gReNl0M!!$JkxWJVSufL^*hM3!7MgZ_SZ~*UPPZ!M&>d8fK zDrR9zmC$JMH$XI>zl#jt&QWzIWT?TDcQfq2qgZj7P*&a63_$fGL48TpRtW~K(X(B9 z#Ph!^Z1w%)pF#?l&#cdLOArL?!g;tus`KJzp?c6_q!kEqlf$ovAg%ib+RZ15FSBU%Pmz;2*k;?DqZY) zF$E4OiD{M$#97A?=INN8oP?$sxC2;0@xOaTMBouDkc_FanIFfB@KVYSU(jkb+xn6J zm6E{H%(`OlR@dq_?ti}@4@2*9IKsm&oodtJO`%D>gczG`t>_bBuog_Joc$Eu`yMEf zX;f4jDo2tPl|%jR#GrN%j2k&$^4ygAKKziP-s#1SBlkR(*cHs3ZjbbTlwBnfm;snvZP2y7}K z{r5_Sp9EFVuf6|y=D{~V;*8&GqK3hZY3(qLJqSkJAMten1=%-0Q7bjkfz;GVtWQjC z5d05T4$jg1x678pXQS<_x*qTKFUGBK=S;JyKCyUE8w?0Z4tLK){xwed;OBAZl`)GY$#Jp z_nZ(4dXGS#$aYG)oI+@(|LtRM`$0*+mznu|ld3%XHVWk#nYcT0wQ-GM1i7e9UuWD( zrDh&Q@a{@MK+rxRUpfB0rqyp&*l&7a`S7IDe43&wvgPT7!fBT)KsG(!U;}V1 z@cdg&krFu9GVDqiIzDQx>5K?u3CZe8X^7Tc3N( z2xEyryvSRZ4+<@^lH1_5bZjFd%kA^2U6>~RzkTqL#sA(bv;nzG?mBbV_x`)jz5#GB z1zEkSG~EYUAV*ceaHg+=3v}oQGqWx%NcIVTa$AP*cjLv9+Lq@J8xdphDlo^jm}MvR zRZ4)i^TcXw|Db(gczcKTX`o|p)aFENI4_T8mPT)syxv?(HL;NRdHZew{gdJ!<{sQ9 zcRiQFQTD(QY(Gxm1!6{S!A4I-QBlI(nIfS%X=yap$ud{o0Ex1%?qKd z=HIo84iy=>Ik_31KmRxFbJ#)iBI0&+@22BQaPPnhUx$vM-6pbHJh+9-x{7O~JLl@Z zKCV*v<|1;rQGN;6UY&L7bx@l)$EnFPX=oP~= zUe`>ty{39g;|039C5{EFe(?E&nYsV#54jn?|LLIS7n&Cd9!Xhp zneX7nWQCXcI`%7H&kI7N_K8W9P;qT2tkwf!QrFQ%aJntxP&!Ig+jL>Cs|1e5=p11m ztPE8-Aq@EW;l;OB0-L7kIX~Bq1X0lx-7ZJ+ll{a3@Vz9?xqw88_&T>vttUk$cfeNZ z3dr-HBR-I-!D}^i3HJ_1XFLc(pj??4alAi;`=7r^@kU~M?^Fq9LD?k`2fW{aRvD{;lZSEvPT}UD)p81Zw}p9F4-Mul z_*XI{pS6<5L=eL5l}-s&MMds5y%?jl(A3~blmae=d`1CIkn{uP0CN0!e#;+4qK*4P zGf~nV9Vrb1Xa$hA>AD7IY6*%!pr-c6hfk6M6{Q|HC;a&}Qa3Paw+BI1t35ioPG@P_ z6=JTqQCU(_Dn!0S63>_WX9Moj;_#pyNGJyDj}JOs*`#*mkt^u?4z#(*>m~U$bvC=P znpz#iZ}EwtK8k1q6}}ewqFzEDDgSos+3TI2+E|JEI{z4i1l>YaQxM`n^HUtAz3}i0 zx^%~hH#Q5>>ZD(8h`@nkEdG9Ax+#=2$x>J;R&|c#7v>K#GrqbBoyI4I*vbSfYzVf| zl|Wz|h;fICz8~!ARkZkuR0cunsNSaR*1Zm5T;uShoh<4_8GCB0{?ac3=s*Jek zh+T0byM>H?QU9<*$R z&C#SPw3jXg^1uX1so}+;mY4VY5qD^q0DVH{x@d;Xb|v&wCpkkerTQC}F4dj=th&`a z-)GO!7pkRYsZHaP>V;OU+UyzLbJN8(z#cVN{qe`dLk zZ}}-(?GhwfD!yTbIM1V~vy<=Qx+nX?n`YH{r_{ezft8$TDpU2eSt|P70gA%$5vT4` zyKaWVZDe|b1Vlz9QHi6AY=}HCub3KMUT;2`O3(n-7e+EmTj9zwhRGR*jfP6f9m)Lb zb)Do#D!jyZ**Bze*XhcRwM->r(FPLZu@N|;NpfhN6=PZSv!E4%tk%+=3iBK$iQEE8 z!OoEN3U6S%8B9M(I2M8bBgGm=%=Qw#y!WK8mp_@OH&`Ic!5o`#j!K_I~=>8+ep z0JaR;+E8TeQqt1mS+2f@^ET27ecq8UfK1G?JTQH}Q^PadlVqyuLz>^ij=tobB!mN4 zk*61KcST}|d@(I4Z33jfE68umcw#f{u5jCMLtAB}ZP+>D@eFy__E2ES} z{^w5X09Ia}6==uGTrO7vMp1dRz?gg~mGGPgKk`)yRwAZg5mo}fh16EqEo5AhUBe#k zc_==KHuqdw56Yj@vG%Y|8g_wxN|z{ecs7&V0?qTuRI2lRwbU+V`XYMhW^r4DM-yHK zz+_f_$U9=V+bft2YJP5a9~BWE+XZ^hX;gZWLt|txi`iImJfG^Ru<$gCjkZDM%3fv) z7KdMqZ@%S7V*+?{Jo_Rmg=rCx$$aPXCC)FK7+u?tp4X5dUfu-%1ZjKgwmW*F%{A?# zRn~O0s10-{>BAMnH?yhaBb7|G9IG$K3{ddwOS;)WG-Ia=GwE1QtYL^I5S}3?1^XLb zniF^{CycyEf6AYw`awDJz>3Vqyczj zS-_mkrNjSxQC^!jAtPyu|F3=`2Occxc87b_;BqML zKQlMts;w<@Pk>r>qaQ%GriA}}xzDBJUCM>ymCfVKYs(1oG+1*Pkw)8}Ui=!5NV*P4 zKp;N?Vudh?9JkC*iU6%O9qu6AAyNYN4z~VMow;Rd*hp>WZCMEMZ{bV)p5HF}Y}^@bZzt4~WL zr?Tgw4*Tz-?Vg$J!iWa~zjOP#L^w41HbT3yNB@FzYPxVVH87ui$wEC?Xo8cK5S6er)>G-qFk}e2q9G`w6SERA+8krzIsYN?Us3 zOVWAKq^*oD-JlvFs8jbJjZWUBV@v;R>R8r)0m6xA!o z93WEJ+)Kxo|mCA zi{AJA%NA-uXX5dvcju*QGWm& zfOJqMeo_wY7!%ibmV^$DeZd5D0S#F%OFYhX3#1 z?;w3TprH?o;`j3}su6PI>Pc7*_I35d?|zJErd^pB@=o>J9BOZ`$CankPgp0N_c=bS zT&xtmQNfz;1EY1E5su9Q6qoa@fhKK64QPKv7zYsLk3M6Uj zMDlLAk{A6+Ui%98oCK0~%37y$?WS%`odKbypdyuNySObBu-IOGF-Pl(B2?4^`Ptc9 zLS12J8o-K!0P7Eft$wNx4CdegPZN+nD~x5@0XgB?$&<*C=WXAvPm&rAg(d+5g|A`? zOfIKb#g!}vxiEfMD)crFD*=125LV##DqYjzNHR>+?3;DF3{<+DeUZgYJti2Bt@fKzk1Vdz{kv>(ImDh@Q3Ea+VC^cg#8!=I#=88HkUa- z2&ndZ*X-ZY@N%_2Fg%LAnWJ%%X;^@Aa!DNgB2YGI#ERl7OzdsCG1FHb4gkQDL&QvR z1FT$VzFw{~w*V_4i?Piy8l7}d^sdAQ1K%AP=_3hdINct|`0DYehes`dw?){sJejJH zDl_8Va{nI+I;Yy_>T@&xmYC7~IS(F${5y|@lmmZL!rrzM{!Dd_dqDmBq05np=`vs` za%b~u<`!KLy)bK+Yzw>g(zr&km5u!_mJN{{d*-e+nVH+bA@`S*sSg3LL~66+Jxb>H z>6w0d9Z{IOB5LuArc|IHO=L}RSeBnKdMnBL^n!&-a7c;9u0tmnOTX!;@N2 z3EuRzseYw5%dmY!+0h>O`XA8h1)%<^+&g|P_pLQKj$&V2ddsZc;Ohz-+1YVe951fP z$;HyIWI3epLliVjSs6LDrcbdLR;a;k4%*OA^p3TK)OGQQs}}OQ3vn%>qLM{0=`)MN zLm^@v1po8w%4F(Ae;_k+5a35&h8F0VnN%{Lc|PuR|NX_UEuqK$%nrQ%_q5F7$R!~c z^?63Jlnj0lf9@aC>J{6C)9X+FZcVyBF*i3;QI>EtH-rCaAM(wHE$M64q+5PT_8dq7 zEllv*n#EyQ((1^n`byXK&iyWKwAZGQ{+}6|m~3cERTJ{59M(352f%en^$6anKgr6zylf zmidQ!AzNBOL$azdl3~fvC;9@p7K=m6@GH&$H;yUu5h&%Ife3^h$E>WJg>2KDvYm=TVi^iNE_Jz&v3W+u6^mqK&@3$5P$ zkAK#9{_k?`Did||79W3h&rZi&ZJiPP{hQA*EtX#}rE=@1U?sRhl0lvik{Dj4x-@L$ zMWdjJYHPQ$5f$;tSdln1C?CBySi$tuVTojeT9xOqQmRWq5|J&u7o^g!wQAOG4A?)~vC z&6Qnu-Jet3R*@X=t6p!`Xoi|!UA0}y@eljTv_RSk@xbKKIYIm(5%n)g^U05yr-3WJ*uBmu_pHyWzTs5@+FKU4=)#hXm85!lIt~wIPwNL43gPn zo)RuY(m}E=<|JV+mkv)H$(M)lSkK^Bqb4M|HA$v&MVPwdYTCN@9ZJbN8JYS}M04e? zb!0Kna5&FiR6OFHMM%m}?f_BPv-yf9ce4;6pN8f>#b05XQ!d<#rlE6qIxnwPEZXPq z*hBh_&K^7Fe@*5unNqetwhlK+a-i%re!nq4{HCt8C>29Is_n0IxhlwesoPFimkSf7 zn*A<%kg{gxika&s>q0WsA272I=#Hx;S92`x$=vh|e@=8p&AtCt&YHL0EX~ZzZuhGh zIiHk!zId@atUf+)@<0mPyE-&CC3-RM^k`;gxLJ_F_hkQPDEaVwSRgXs4oCZ?V6HsB zKQ{mfW25+ygJ>=KRlpWudbRC5)Gm9We8%u4WU*@yXe3xC5b@adYIy8+WC@vaxM$-GMHg;I_csV*GafQW1H z+BCt#g~QQf{~NI`tM(Y$j{nv71{_nd494a9U)_{at9;s)Q9~mAsfH>?D#wPhIs941 zTC>V)+C{RZnq=CZ8eaToQ-^8ky0Q3YOk4JGZo0YLf0}=OnFx7Yey{m%#hj$SA_PdR z$9}f8+$q@qC(v9*HvP`|E5fu}DVxkorCVIXio(-p(wcqOE+yIik&JL)byK?IIAyhk z_;Jye*-x_kzEIdh-BR?E+6)J}J_@{M?Aa34d0ABsIPcROUX}+RNd9u^x@l5t=1ll= zUyyh5ojmtB!G(LD*GbQ%`5i@g|3Oh{%(RDH7@0L|NC2(Ia(HBl$*#0zh)&zBn?kN+Y=kO= z(}+9Ny>wuCf|g;xRfg}7L)Lt9#k%>Q@D$jT89C{ntVvJ*x3|`$fAWV{ax-6iGo?$Rxh8*QS#yPy3wIDppY#2MVn3K^@xQqXnbM2{ ze&g>FK@kPapTMpEhOyWFx1Qo#$#fV``d9p;-c zJ;?oX>HU0h`MTZXe66r$QknvmlrkpAh?y`ZnVIyENXd*IBCR7k$@FW?OttJN*;zP3 zjKJ>VtCTXJe8>FiOb5u|mpSP;5ujj+S|%I*+HAdNV0t^3Oar^SE@~I_%Gi?DFz6@mK_WmXxMe7!!NP z=4H9vrP<^~(Tjzu^Sn-A3K>iQkfUVgyz**h?u(yDmzF>0{>z(Z(${>KYk8XG5ClIo zu88qmZp#=R;#I6DA0Y)w5XA`2Ehe*nb$Ih6YTANukqN1Omwv0i)t2!{?4cAGm-|oB ze+%dY&gi@`F%1G+n(IccTjmH0$4aM9THk!()r{OXUm@r9hxamaU+$9gZ`P?KWrM|- zH>KYwf**R?mVIpxsh5p+Lb7QG9Bv;J4)+UCbNHSc>5vA|H|Sq4XJf|02*e#nZrM9%Pt1S?@{f2LuC3M zKb=iZ853S!9HVA=|J0xZCNenpxi#sb+;seGF4P<>;GbVe&kb__=RR#pmDf%B=hLS2 zqH;M3S1CINczo~ir;^#fGQ7Q8OuZ?uu&{1lQ*cR{kAK*f$u09~(+@20*Kpic%_gUm z0VUWr`+(b}xq={rGuAwp6Xem;*Sv*8@zyIjIWN4B8~ESPt;twWJb7YDl|}mJa#LzQ zvoqXRB+1Tgzjb(7b;9Q*>oy)Z^xJLO#cQYy-#d(G`cM0RwO6-nU4F^g7I(q#&)}qQ zO2?!8({ucp{z*>mTW{tlFMRi0=6uTLi76$JH|d{J8Jh?2%$w4#LAq&@>QVOo*5Spt z@P?MG8*sYcY|B`Go{3UQ;H96Me?^*azUXb9ID9O@eOb8w135VuJVHx$K{|FI$DYIb zFFBGa!^+`bpno!Ta#-h0snT<^vLad76Ab?5;q7Lza_PD;xxd|(nH|LUlSk$(ZC)*# zytL{J$$hqT&(@Kc&6-u^iSTy{=F?ZqNS!(=^h_fMA1x) z=RAN%Ooeux8O4i@S&nzKi|G^k?*A{-}AS`$uxI zgB%C{N>i$A*t@wyu|frW0^s57YKm{vk@x#PNzuA@@xHj)tYw!}D zhUTU&So7G5b7A`1vUfTE9D94tCkLN@AwB(tKfRTn^Ckf&!FJ{fQ>rKfP{^&y09U9) zZS$6k)2a?TjkK%(-0;v&n#CNUh_twF6kUF^EeoJaisTw;G>tp{X=pCa!HT5CJTlml z^Z))oYvl637h98l@Q-h)Ie)?!awz;yjwIeF**KwoTftBBX7N;>m{P&Ig^vG|!)s7q zs59eIJXtr^pCZ`GGx4M{wwf(_=>eCSS%cP=D!y?jQqbI0^1la~#mxw0zCZ@WpP%!> z%j6keT;t4@&Hr8ct1E07PVENxqXo+WJYq`WJShMC@Mf`c`MOCI@LO$}JUt%*+E^8u zyCMP0>!-RK9B%&F|H*T2rK`DbaqqqG7HJiE{+!HZM^YM!S|162^bsoaDaUBhl%jIV zIr^uEm(r)CKbNiBZ?xBW8KZln&T83x9NvfP|LSvP@I@-x(er$%=IgT>K}D32+Vh!1%8Q&6S{MNdlIy z=8?hXKjMkgZH+H}63E|0=4;KGRfhitDL-IWN|!iioDF{Q8Gp)GGUxyN@csk5iDm1y z|A*gh%V_i=Z|kMip}CUnWM+8VykoHx{9hn9c))yZ!X0Q*nXdgoGJgkF86GKLsAC{Q zR!YHPSjCk7cZTO3EMK?71VvAs3EuFp+A@i2xSCdn=B6gt47Lvuag)N3b$f74yLKNy zn_ZJ-CzYE1!gJ51gKl|h_#h}jrA$#qmE}@!sZyGl(*MTrvYD2x8@B(q+pIIKNN(5Rw3a zupFIXnbKz4}&pCDK)Txti zJ@uUDEG|wSn}0>%Z^7K=uy9UHL$Dd!hlpn`CWuXtov@`~vs*+EogZV1C5V%`h~Hru zXt_6#LyHiGQ4cX0EDI0EqlAFi9TuifW`t3>`Ws9wOic*vaP|ND_n43qBg7G6YW8@7 z=qB8VVZxR8Z^E7UmPjYQAr3;85Z4GjVwBJ)z9LMJh9KS$WyAz=pLmTF6U03t1EtI$ zjEMrmjEKY5MkEtWgqWx!f{7L)5LYt^OJW~Enmr1L+r*c|MPi(|LR=+2CQcG7i9LiS z;YgI@m`Q{ZMM#}TtS8PATW~#zSV{z8+d(Wu+D_!T0CF=?iF0zIny5#as*zJJwll;4 z;uaF|#A0k8V!MR64wPjK`yQmNCe9NVaK#1u4--|0pFw$lM`)u|9}_B+qm4L)RHeit zqL6q@tVO&r;w*7T3F765uR!foW0PVt!?ha3?}@Bg`M)6l7s~!`#A#v(b+Q86BH|-r zBkp{Q$VYBk#5!y`$j=0u&TLFM5rOAU#B-++H3S(~F;RvJ+^>T8l*q>Yt5B{g;uAcx z1-4A&T7~$_sOMqSS09mzU+g4ma1Y@^I1te|#vpeQ>M$7f&qO^2q8@!vk3Oh7f20i{ zDA;xq45aW!%44Xj!#D;K2?Q1Lamc&z?2be$sAwi4@x(&ZM--laJK}dBeiPzT5g(6u zHl9Ben;6?Z)Q2^;bjUWSkA2wUQ71=G4{>NS z*bd+sx8qrzupK~nGma6ck;LcRY01bnwAATPod>irUs z^sB$_mm#!-Q13s)*^l1s7eM|HSF88`hV#FAxBn0+evLTwekt)A@G`f@D~a6a_RA5! zl=yDH458(-`7cN8GRW%v$A~3nuU22R5OH(+C5T@(TefAm+$Z5%JehYDKDI~RqS%UNnvHuWz^)+*Q0{<2x6A-sz z_IVcIz5E37B81fP3e>5(oKgh4XI3GHMUXX!)x>AGlltBokk&v}Kd&Z; zUxmEYcU*zcs@eN3#yhtf>HZDrmmpRLsnpN;5w6sQ&RB}Pe*@`L9M$zhKm&b-__?~( zhqUHhed|H(UBDLPT`qV}2r;yb(p@B4dxR3g`)}DO>=ju}%_tiuh)b*@^cx|Ln z*Z68knkbn%l^*icn9XGga$Jo()eJ2}tQO+c^|=IbtC3z^`qn zU2_J6A!1gb&ORWF5c(7;SKy5>#v3tLdut)Bhpeu>4bTy$xL#c$byb>u4ao%e77hI3L7vWu6gESi;Z^nB%cOM(* z2+P^K7!tOSZEzPegsl-;k8+qJoh?FJ5O0Aqix9gGxu|R25|YjAT}+9sc&oP~W)tqX z1Lt?n-opm6F+!Vhy*1KoN5~Q>HbL43SuJgWw3V=fWQlaUkmEMoQJv#19Br^|L}(i% zW5lT?W60}pG{y7TA=S3o{5L_egSOj((00fq+;ecsm)Ql>gTt`ISqt%5cb%1 z&X&{$GHEun9eLOzj)ctyS34lAF3Dz;ZZ~4pci4`Q9a8U}EwMTm66DQDYmaRQ&Z$eH z4sS(h*K8_vers{14a&0v@y4?`Zb3QrK-cQw`aSqJ$FuH6NEiCg8D9j)*`qV|dlA|T zjk*s<7yPTWCK(}hIv1qd57`A8(*@H0*_5t`If%1+-=%cLStoqu-4Npr=>U#<5!wgo z;H=~^o1YufI1-+O7tT2$#uFiz*}UA4&Vx9F{XV4km^~hx&G9f&dqO&hyu9!|If7r- z0C!mr%DwSa9$-fg-ynU&c_QRZ9L1N%9cervuRzEe^|1x1e8HGIu5cv$aD}>VtPu7` zPTn|r;EW&g(F1i>xKjYWS0|9l3h7Ql4n&+4!Y3e~M7?`~U_*qoAa6m)5V@bg6Kn#< zLHG^ULOzU85Wa@SDD`24DUgG3T!d?akb;Ug<`85}A_Ui)AY_UBG$DJ>J}C|9DUf{- zq7ih2jw1aAd|^Y7>KG(5d?D3(&KL4AeCsq3R@Zj-3nb`yf@kemC2*d_~2X9>Cj9i(J$g`4~onw%Fk+(DA zkKwl@L*9>&59DLG>;BpM?nfvbzu$gbyC3Ih_&w>6)uhpIjVo%<5OrvVT0enbYcWC_ z@E)$jQT@&Z;EXR~H>2j(;mq1ujo}BD)jHcB=>iBYzWdS8SDO&}6gAF+yb2oZQ-VKx zJPsmO!IE8pJE-kLA#4O5HTqK9Lhn(uS3Hxsn$Sr)Nm-u?EnhtkeHCw8jlJo1ZmVdEd(+R z$1MoaP{ULl)jA;@p&(d4$;dSv5(RP`?oC7bAjGC1#Kc{LAaNmw;Y>KLRO`KP{K{cC zIv}k6?OBkm5eh|mChVOg*hir#y+33jLKMiMcs?P*p}2yAV>-eSC_f$gMV(IsBo<`# z(?mdG%*NY*7Ao#Fr;FH-SkP7KG-05Kj^|K^=#W`Bs>D6BlKd`uG_Kj6*vW*Dup8ZnI{o)z0U9(X0Jk&upthpTg-U6^7C1f}g zg;@Tqbt}cQ2_VZ6ua^0^A{TbG1lI~7XCov51+lmypHLtlE@ESFlpw5TB@RakS|nVg z5y6%$B$PPv5mq9{3`ioR$%D;ZfFlp#0;JD_EW#DVNL7eq48ny(3Bt$mTNckKK>U!ZIbQ~?6QsfnnI1g-U zjc9~7>NxD&6R>mlAeCBgor3IzkXpB$gd6~^2j?oAw;flj(ft*JABuHY&!Dxjg zBSivHixkzMS8Wy4K}%_ax)jLu2&u14MY;xrYLOxZ*Xkg?5y!&_pG7__q%cLAdZez! zF%j1^;a)Yf=?{Z06}U^roe~jWg)>pOA_+XyBi|&HFbc;kgi{b7h1~0B)gDA+;<3DUFcixK<3g2BpY_EJRK9kZzA}Nvz~8P^>|H_igc&MUj)vq-@G=Syn3&N zk}z4Wb*Lwex^FNeR+87pD=KJ~ot6$REcrv(5objk{Vp?bLgB zYU$gw8M?)Qh2qF$JlW{!a{lG$5qVq4P-b`L&@!H`K$*IZuPwC8J4m-J%4?>Gw%(1d zAa~}7tZM~q$N!1CZ}*D!BmM*EGtU|F1>5Sn*>#WJY-CP44bRDj9gSAOhAsn>K9Ra(Y3svTTa^=_*fbtwC3 zt)T0L_SB~A1A>(E3pCp=5H9JZMCJK%V%x=}NiB&|tdXE#uIa7u)asGCaocOD2G8@{ zDKAcWn&xfRCskU`@zb%qZOBCYpWpMd`8#^x=b6vX3GfpGeyD>B!@$qRAMw)*eu}}* zmp|gi6a0|X{N(rXl;Ecd{1pAMZ&%Wd;pJ}N=Q#N3JOzHrrkyU_n_BuNeTKfV-$HQ+ z{1{AuA0GIj4P|zLpBNp1GSgU~9kVmBnqW=`nW6HJI9o8e#b*D(iE@#xMWtdw#5c#1G}2{yEViD+NEr;3s_HJAN#N;+MWf}@PF?rGPsR-06#RIA zA00J6eDFgb$~>Pnv@B6usFbZ0YR7_~&@IJzDk}63zk=K$6~JB=#K;?X>#p+{lPpWmfWdhSGT?|e$HtbQJSJx$0Gz;i)hD^sYVj+tvN@7<)W@j-Tt`rwRPf>QVMH&_7ChY9shb zR`b(CxTKX4m9zXLPikcqi8Vyvr{}Dv)`j`}RC$_i_#YioQRW;!b)2T5KUe?xdwy(w z$d8yh$4?IUDTxI?A%hDez>hif4;B1atNA$uevV9&O7+1HWoEtg+IV{nGQM9MmTS3! z9|!Q0sp#V=z)z)oaB=Q`_L;?kpS|G68~n6Yy%k-ln0D%XFtzk`)(m|e_;Ce4YrxO2 z0Q@k9GS6iXEz8i3Q5LR^(H8B@KghHJKOx{pP(f~&iL7g4!4Dt&gn}PF_&HMJl%VD( zY>uBA@RMtmPabw`WyP5mF_N?7O5=(XIx_23Vu3$ z!4GpXx?b>%=oWwK3YD9}G@eo`jPbI;{eJ}d=4 zDWiJgf&3M9)!mC)Tbq~E_Dje&n^cyHkz9lRai;UwonXqj+tJ%wrf8LwPwC2{@u-~Y z&$)g*Q%uW-ah^GJl40q~V|pXwzPmb}A7zhcUegsdYZ+fZ3w|2iR)>I}_-d`7YifRS z4hY2E3pCrnPb&E7tbqPWnbgWG7Hh;6GS^&C^CNfTw$@V(o++Szz)x1RHc8qw$IsIJ z^+W$%_21v~v*mk!cH;X5epXuS&RCIivPD)L2YzUS3)ze2_zAHbmfL`z+QV;G^?6T| z$_>Cz$Q(bb-tn`qC(X$Y{G@}QJY}=2Ja=%h1pM$nA6~u({CI$$mNRcfmn)~8+8%-* z$qe1F&qA>m{H&Y=KQZ7ZbSSe^GPF#t9jh!ij@3>8KjCVAXrirmVk*dOa_|!eeuUsB z4EzY6ee}6cjZ?e`{IEvYr#yR;&N_C8^EWHVSDe};@!+RhE84orAl`1wFv3K&I#Q=h zBSLX*Rg~nER(#l*PdPECR-R;E)27;XuL{(eiMiC2d2o79tHL1=tbsgMGGygd2c z3^%nUBg5OyJU)LcWyG&vgTp5`RV7OhK0|L>J2?SX4d@F zhy5_?nr>W+mhm<4(+GYj4JbSK87s1PE>YO659sSCbiPRPpq1s zT2HO+TsLlunx6u9%Cpm+rfD6Tq{yi`eu(y(p+61&<$Hc?f5=Z#$UA-lTVzF|fsc#m zgA1cR=%ZLb|IomXt(u=B;OFQxsnTdl{1ts>y$$rwN@wVw^~<%Kz|XdUjM&tIKAyZt zB`eJvT%7h_eP&$nV+VfrgCAA(ThXPeX(!eA)Y56`3|$BO>;XT&nOM%h6gMJoWe#Pw zONW*f>BJUQuZz=80zVPpr-=@J;ws23xgzT`BJdM?-|i&~{KSHvV>M23@fp&)5#YzG zFR9L{LtJRBuo)q@Ns`Qpm_xce>rSHtySr=Ird^-0bN$Ru{!c;4`F-;nQ z?1y?Z+smtib!KA05Azx=_J9_v!QD+bcG!U$?4cuz^#(sd_OA8e2Q(7)Ea0@*6T#vD z@Z%4DA||8j;+_#*ao{Je*Cr)UETDrQ0hJlueaMsF73!wf>`7%l4FNw#!B55$^Ndaj z`(7pZ$r#lWfS=Q6yB0OHsg{)YW!sOnG#O`IksGu>2qj;<6+~&g#kH$>62ewY&~kI` za}_1m*?uh(p{A7&qK(R)F%0ETkLvY5IA&Hq1%4#gbYok!jK^vnTpOC)RtGnt>^0!0 z*q&MseiAM$&}``=T*MXN=M=H6KVwoWtwgLLR5I6e*LiAnfuH6Es=-q=KW98m!-hX2 z?fv5%KO0A?hUgr1_ujkq*VZ5MlSrH6M-tQ`Q^tcI#^6HU;y#Kc_@QqamTy<{;HRPHt!VJ{ zv{T)qsioh@XXu~xS}5$m&(bH$`9tyGCwwTgO*XWwQZKfsaYLMTvR(c`woP$tQ>bX` z?f43^Dqm!MIv)Ipzz_RL)|aAZAKmn=af(dvOcr>e_`-o!2Vo}X>s^Rolr zuLOGEN^^X_B*87Rg2aK3mCV6~Lh!Q*{4l`JPViHA6#V#2lg=1ViN6k?S#N6;Z@%4HZj3ZVg%k3)R?p42rX#u> zopai3#pgPFNvA<#Sl?$+F#}pbw6E4NY#-`^pM;B!_am;+_y@IEwVrOmtKJUO<6b&4 z{!y(BqZE7Bvk?b0Vx1OnRJ)1b1UOMzj}sQX+{x&g#An30#PQM>3B5MrV6lLb7*!e- z!i+wD#FKw6%uTQ95S2MacQlyJ<^29v;oP>Sr4ET|Z=!Ey@Nz3cH7FBnuR_BAC z;r1qDyh;Z3;HL}xRDquo@RJFC#NbDMo$Xr#ehR=(F8E2C^wH~t{;8bw=01>L)8)5o z8DFh;aII~2TYX%Gve#+_jh5O|&&m%7VtW^8ss;#`1UTAS)%@g4t`V1sHKK}{YtA=# zYMsk><2E%>4W^Xtl&3YGrVT&RKihZ}E$s1bMur{{n zoJE{=mVN#~fo)N&Dh&K2RoFKbK>s9xpCs@TJ(2aL_}NEyjzj-|pS#hc+-mQ>B$Z2t z_|!Iq&5Z+X5{ZS9`CvWY;)+?K)mN4r(;EhCoj$!t#XWtVq-SkH*svBi=89e*?X4-p zcFF+!BtieMp?}<QRiG==fhW^`VlFx_Vc)C)KhhB$rkbDnu0?0gt5)X@ zO6)InHW}knZczI$lza~MPvz|>yW$BdJ01KaJ>V#0H#oj$CPPj0A4VI=@%>7L{%ME( zQ$7WL@}Pe@pnn>me_Eh_no;&T=$|s^pIqplKIor8=$|U+pVQz+Hn}FbT&%$>f&OWP z{!u{xsGxs}pnuMKni8Eqw13w7Ecz=yR_cL1@BW;?Piko2%5C5$mkRqwJP=?*19gHsCQGW zwsd#iLD4p4YzqtaPcryX!u}D1pA_)JpUCkJu2ls;a|lMJql4;$0t(61W?(*E6oZu`<0 z_D?eS;lloLhy8O1{2Yb-a~L*+FYKQX*gtI8KV;ZHj@Vijik>RhAB^v zYPOC0nw3BG;XYKr{^;XS~@Z$k~TKwOxx_ok))Mhdze$AcH-wS>W!Ou#g@A(mzfS>Z_+~T6a z#q9s?GYbJf=HSOh%}*ovsh@T#e>%1F%iVZ4uxnwZdLig!Wf5_(?%M@uf7#D{%u$f4g}chdI{ zo9VV+n*{01q@w*EjrNxZ+Fys!{yK*C*AcW~{J;+l?Jw|?xEJj&C$ztUz|TqW6NC0w zI@(`p;3pOSpAfXaz)vg#?XRO~e}SJCZ?wPE`~-lX{3qtI-QcGV{N#@4Fb4CbMp$~A_|we0Zyvh0Wb zT+%1VsQ^F4gNq~nr_YRfXO16h@N>55t*EzQ+Ntyz_$i%XXw2s)eMEjP3j7ofE$iMW zD7s`Dqh08nTami6Ahtac{-1R4Qw)Amz)w2(i3L9y&pvucf&V8N{KSrO8-06|IuEvs zn@D*!cRgDr#Wn@Z7go_0cWgvf|GtB5`ot_k=b8zt^tox2WOSn_?2a*;e$VuT?|<3S zY+suP>dmBqA0GTap78&GpX=Z!#2Y>o@Ni@c#_L|8oicpKADjYQRsy#G15I zVvU$G@Y4+cj}rc$R`62_|4+TAX^z7W{m*+zi@(=D^Zd{5;3q4rZ>1ynQPP`brKtn) zry}7$Ue;%O0Q|&*A3yNZapLW&(V%Hkm)Vr~4Sz=81N@kRADwypB$tApO7K%MxHugA zP{7Yd=pQRJKPvFkH0@OK9Q>5cFjjY4C^k>T+Y=Arf6f?@pN~fSOF6Wx*OFg!dAm@j zh%B$j*i{hQ!3IAW;HL!s=Tz{M34TQ2C+pcq<5c*c!O#7;QEro8Pttj}_RtoGT$_7` zS|w#$6wFsPQ5N@XMOOc@E7Ek*lBIKFV|eLHbFO5}GA``ih6wrt^W(mM+8$#2cGF3{ znRM_YxJFCx0zXHz?3cQ2~yZCNe3oMS)O zr!wYW&oii=3@3MthuD@qNRL*>Mp^eXs&%He-j z^HYTWi#GIMl+E!oX#KPug z{A54-=urszzf!=DXq2n+?@8)%ZwqbRBe%JKxJ6RFHJ|x~E!X1y_BgBm;}BswWfiXT zxdl`4Y7<9t-6}Thz8Q=Da8rQqpY5o&Z*5NK&17D592Z`ngz)1R4m|^-CzMAb%1I#MFME_R__~}Cb7x+B$*2-*#etvR7WALa=cmEbwD7;d-&gWL4idUQ2 zlIzwnVfW3$=?|>^eg9-nv3+ZM9Q+J9j>lZ5p}(D_@&-SC=zpKjPZaoZ`JSKi&_9C- zll;H(li6z{0Y4GoCxQ8nA2#~mk3#>1qyJsaPZ9X(13xP8QwV;B3#8?(YJOT*XOGD2 z2M3ysd7tMSoP8ESKKF!fTmD#JSNuh&Z{`=Fg^80qh4enp_w<($mhz`UBl$PshM8aa zX?8w8VOE9y_wmv(-9$A%E#RjU{qJgiRCD^LsSx}Oeb3K%H9y6Fzf&h7uFGyYc|5LyOv?} zds}>c|I;DJc6wXD-{mLiJN@&HpAP7s4CtTp!SDFVc}Da|pnrZ2KgHmuU;aHmmkVe4 zIX%$2R5JRGpPLGUx)+gKyC*_zE1wAM%D!a!W`D(0il6co@`pU%>aQa$^Pa~T<-KMZ z=6vI?*Y)D0S@kyof0LgiH9u7tzwwTrj?08g2K3Kg`8hqSfBq&vmw!tC%=170K>vWB zvVT_pRK2JEQGdUnf4XhCMVB0+b&6f36`6bTezyKmfuHl9t)Z>XQt;C(Dc_mPe7+;X z;?6FC)$g2`rsK8@ol$GL;;9WwGP;EycFU4Uzh!&O_y6n;wEb$k|KH{3uivkKmHru= z$Iq2QX+>+#qSFIyOC?w3_7?|QjQO_;3>sguxAsmlZL20?>?*$w^OJoYu1t9@P~?sC zeQUpATNb>CH7a-$VVL_mK(F^@pjqAP^qzd7+Qw|`VW)&832f1cm|Dun&~Pq)8d|DgS~@O|4~&9yw!*O+Tn!llkLa!W-|VX_E+Yd{rr#GU$4;qiUmL4wZ9mnN@-i<_?Jupr*Z$i66aJsg^Zd{A{XYuu^UnXX_`UrFAaao%7ZqiksFB0nH-|>F+eC$(x1e#`w|KKBN&dFiZGH6qxBSoXm-76+^FN1; z72$K=yXb6R`_lYt`8HR2+l=GyDwhnr;%~h*6-jBEOxW2u&GxH)!&Vl&iYusk66@DD z&9kg|mGG;^Z=($Be;1^8_Y0cI&~Jm`f5!Nqf1&@`^C$YhHqY}v&+q?|)6jP{*Z;Nn zefz(1D$s|f#Q33K(*Kn_B5!BU^?#LYiB#5-INBNDhYx;!ZvWSrV_iuN2b)7HoFq15 z9!;#w9Wv%6+feJS?NN63NL14nbUe*gRC zdH(15{qH#;7<)0-|GxNr``;zy;HMDdhki-_d(vG0dn@|i^K2rOr|j6;$p<7lZ1D5{ z^uLS$cK`dSqg_e0t}0=%ql7%-*2GE%KfN}g)~(y3?5^8UOq#7II^~-viY^OA#2G7Y zSk1-|Zl(1R_Vw+)lx}PA^S{vl{u2G~V({}_|9d3(scP(7RCl3cY0((QEp@e7rhuPo zFNC&Fo^UC>6G=OVzKQZ{eZwt1^-5IG_*mpO_Knc8^<|QI_iuTI-M^#gK7Sc%a{Fxv z`(NGv{`e=x|7@P;f1W@7CyT05kN=6s_@Bk^JN`#fhA|)tj34@?<9}Efzabx5mbE!j zS+tX_9lu|q6SgNW?`Mqvk*df4l>2lgRUc3Z6}u(m;e$=A`0X-g`(}o9oh{dHcn8I# z#*(6=u%P6(Y@|n&ZsLZOnuc%-td6jUw;rQ3TOHB+-x~juaw-3)di>8F$*2xj%}+z$ zqK58{rKR9!?0lPLI{3N$Txk3JF_&`jNz%^IucQ3BUPqPIyoxVq1wXgG5^g&8LTo

jJqp@x4Jq%-?f!aN5F`O<+V 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%0A=%7;LFou<|IOEGaV|JWSB~io}X?zp+lg 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%0DU@{YI;pDu&vma2mo&9tS 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

P0UlGB? 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 literal 0 HcmV?d00001 diff --git a/_release/help/commands/3d_examples/media/Height_map.bmp b/_release/help/commands/3d_examples/media/Height_map.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0d480dc8a7f18a350665245927b8cb94257bedd0 GIT binary patch literal 66614 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

xV7|4IVmd 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 bYmR5X`DPkla{G|)xSR8SPkg8Q|9<`#j`l^( literal 0 HcmV?d00001 diff --git a/_release/help/commands/3d_examples/media/MossyGround.BMP b/_release/help/commands/3d_examples/media/MossyGround.BMP new file mode 100644 index 0000000000000000000000000000000000000000..d333974dafce87db732fca9442ea68e8bb33fd59 GIT binary patch literal 196664 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�ojy=3E>`M%cKiGH&Ij(o^$0()_CX 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

$!{XZ;C`EAJq^>J2;M}bEsa5~Rgt}_!T2=K=l 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�|A-=4i5uf=)4ar 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 & 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 P-vveU$w`#cCnxSVtaD%= literal 0 HcmV?d00001 diff --git a/_release/help/commands/3d_examples/media/oil-drum/oildrum.jpg b/_release/help/commands/3d_examples/media/oil-drum/oildrum.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b343ac73c3b5ccab928124322c7babaf1b30bd51 GIT binary patch literal 23112 zcmbTcby!r<`!Bk2fB`8f8DuCKK{|y2hEz)0pc|C#ZUz*T4gn<%Qd+tMB!&8>FJ z1ZK#g58rdn@0@e*Kj%Jo?Y*8|>sfn$p0(C~-}m!*ucxk;fICl>)sz7O0stVm*?{X= z;PK7X|GnJ0ML=+~6Wsc*^1sh+{il=vqlf=Tv;S)Te?4Be1Joq{`6dv-ec%=~0f?I5 zx(i^v`A(w$(Kqlv3&AZAArUc{g!DGqO@rDyz%2q0=oTS}h=`EzrgiYmbAXVVh=yHQ zftXg;5`5pCP6V0sg@i+~s)PR7A1qAN$|Icg_FV=DeFH-yYnxZEZSCwGJiWYqeEs|bBHp}>jC%JzIyvP-YFhfoPZ?jo<>eO? z78QU0QC(A8SKrXs^sBS0y9d?V*FQ2kHa;;qH9fPuf>~W#-}t+^h1)+kJUTwXpPu~( z*MD&SSNR{n{$IGLZ*birBm@zH|AUL*mhVjkQ4^|(p!1_xqTNVw)_D1A87v_+5b0S;s3vo{V!nu8`lg#4kEZ2JP(pgv#tj~}3%C2xTQ*etb%N_3}x98 zA9j?ZIl81;E{N=~Nt52r4BWB*w)N*7N4E3QhoU`1eBM%*>isa;dljbmKrF{fTQ}(! za}q!4mn}a&gT;wF(@5!B%O0;fhakNawk$f=zfU(K?$$8tE9pG}p9r z@Q&YqQ=C|Pc;;>`_F#FZ*}e^Y1=%#>=3Y~)*!I~LFZO|-uEk5T7$V!@4NXaY=N|z| z2eiTgY>~|#=CiQ7_G#71LtUE2V569`IZ&I5_sOjyFtcKq8W@?I4`>FjxJF$eDzAF* z9ZQ39FBGYgiWTyV%#Dp*A+Ob63D0c~Hgg5%^>;GfR;6DK;k%5Kh2m#;#$SDe!J7f8tiaz3_%spk*tz=tS&(L zG`1;OS?XPFrcSjrV|)4_bf09Uxn)%wvikZ%OW34r(J@SU?p1pJg z8)Ldk0NsD8zUFc$v0rsh{bqrmdS_GHJ6F?Gaw*f;6UF=U_ttH+1t#Q<*KBm>CTGmR zmk}4np3cOzIQ?!T!Ok7Xzhq;vhWel53-_BdMBVnw%4()DC$2uqa^pD2-Z7TcnX5!ps z{H(TKOe(3&-`9m6~lv!5+ww(X8aF=~uK=;H@U_EDtej{YcjO zzaz_aC7i`JX0Z7VG7eZ)>}Q02n*Of%C!Bgulb5;m#7Z?T@?+ncx@-C4pSUlQ6p(Q? zUEYGZxN1`U90jO;ER%sDe<*qHaUgbD2rM1IJiv5gp{mi%I6?WL2>ZZ!T?ywRyG31)Gy)hE)mS#11h}I&Yb+08kr;2dZc|M zFCAr>gCl~zK@b3V4IgS`Y6)wy!nb$K5O9#iw}uWm=0;AZDfEQ24S=RbE`hDrjC=_o=cwa7gz*WR22BZX{-nN>51nU&S~mb^IWi?)j^T>H76~Cs zl-#9^^53d%RvmC0c#&8i*927>fA5u<1d2P}Z_$`GGu{vn~k5bGZCr zvKTLiI$_}%`-Y8*^=jq(>o9CGJ3ANiDw^yZNr|&8vPU;9c;!4wk|5O1D(V<~HK#%} z2O0khKA?Li{La9x3~N| zmn?+GukcqNLwbH@X9?afA~lq1>-R~3L%BiLuh`?glw6U)vshY8?OE};GoF)`IY*b|Wd+N1#5M5+>mO1WIvYCTq^vz1o~JD!$p zX*bDVXg^W%pkz+5!qt(6Zkle>c`ZFDvA28Q*bR32dqz3G%%pa=I@Gt=RB}Kw(EUMI zPQzpN`;SnsfR~v}nXP);x)XaICjt4tCsS5eNjY7G*m{?B4PUBQd@N%YH!dy|CL+A0 z;+|lZ{qPo<-0d!iml9^(I$6rbP3jQUxM|GMxlP9Xi|3ZCKi#ecoXa6M9e2rdhH`h= zhRxj%I^9NNH#RRd6^b1neEXHW3W_J5L(XB~?Vl-(nRsoc@@Z6HfDj~Yr%H##bJw#u zKQJ;A3tCyPFMM!WA8`#-^OfJqG(@O>x09unD4PCVr|XxZTjy95W|AE324PWP+?TuU zSGV2K^y1!bg6k_^Ot6{#PLTMCJ1Jifue}SR8BJ|6Wztct)6CDNZX){GsrsP>N&lD_ z8JgBiwhANT+a)VFzDv1T%j{}A_R7LwziwjKq|~P}7NDjB0O-ip(bZ3^lq*9J3l1G# zu7~NCWo{XDn$bzzs{Htf;_l{DQxAV_Ch4oXhB@mLmp)Qgz9ox$zfv?90`D^!z97PY z?K$M6Fubz|g z{!frnVUSvLO#33uh3N9U3-dFwk9@8IHB*%59i)Csj`peFA`NwINcrw_8j5@GplkR; zIgeO5J;Qx4pq#dikw(*3E=~f@d;eC2=BBhMy7M~sR1lP$?|Zk(i&s6&yIN`Du_>JiDLL(1;E zZhp{-?ARm}8&Q;tC~~r*VTcIu{-In(f+=Dg0?TX3pjc|rL)Om%hzWf!e%_2>J=rJg zU*hsms>jKal6$$m6OX#H29sZG6l!_)xCOgCycIp?%w^w;V7)Oos}7`DeM6$i9!WS_ zJ|yaNY|yT6Dk3StBx!gxaO@R;NJ2BaAN5FO>AHU8CyImYaL5o-%6A+-;)~QxXx+yK zVCqj-DvaJu0gCl5!OC!OF%Zompz>8AxO>KUpY`rR!+GLwIud z`1pdC%B1dqzGs1iyqQ+)nw$2XI!RD#DhdfXbnByi5WNS*uR)AOPWJ zdg>w=nEpya zY>?o0Kdx@6Yv9e%$9s#W9CP{UGO{xL;y-T;MahDeE z6-}-#pJ>CwfvNQjS?~-$snDX4kX#3URth`oPN4pfTzy-opV%H9K5(Tj>bC4#j5L#` z?AbnFl6axBjeu8Rqn4WyrgMPY8nkEkV>MX_kfj_xbi4+r9gVb*`HGWLX|+Yun?83Q z!UlYU-I;61+Lwd+7`Q6?5VtRzaax}&v7^fg$Pik)*l*5nGq-3sLE44(E*-BwJUl;{ z*=%ieSye79;9Yi|QeXav)9;E|ggOX+|9eGL!|&=Y)J0bApo4~b?joq|^H4=|5?+>M z-W?TX7b@j#u?XW5$NpG;&IWZ&9zL4NO>s6O`#(U)<~hO=eeO}UEzisqWvP2xS-xGK zgd-V+-OTdc+c7=<^lhetF9mr3AA*EZuP(7340;C8mv<@ih67G4l5BunwwGt?p-0pk zB%mS3QDlZ{)9%awii?a*G~ION#+MHNg6k11waCx{f1wQ-6%R1SpZ8~@ZMCixbI}B^ z=8>_uKIW#_d$0aYdPW)E*}3g6128fN9x^`!$l*w^{~RORI|y03&L^Yo1J;uYP0a9~-TD-HcK2$rZGSE_ ztf^it=TiUR<9k$@^obbh7hS?voI)7=gStjYw$Q!MZ&a!JEo)~+WWKH2m(tnim2>tpDQf{qeD% z@st8!pR76(F=NM3J2EaF2NH)p=%(`JU2HGaTRh@+#;ZrLr~ zv~c>cMB+J%qYlQ+MUKPoGw~_D-Zpotd9C@>P(Uby>|(xjM|J4^fir!sYTU9P8lr#8j~OkE>LV zcjTehK$Mrd;Coi8pZ9|p$EWW&oSCjyEN|wUu8*8Oik(9|U0Uk&znkkPJTsw1!r4ZD z6wGt3IPT5Q@B+Ex&42%DPqVEq(Q>KfM~=GVyUh7laXo>U`)wBgyp1bv`=zMin7^h4 ziyTW9Bp{Dt6g4C!VyUp|wy<86bF=Y%{T(!RWwz6t#wjTDOAk|LC{4}ZT7zzXgg?j_({8TMM%Wa;tydp@VzQtj z_qR!PwC3X2nr$hWrw&<2q?&1gNfaJ-lb2-4shz#Bir+Hz?W}*^D_51N7U&Ff(bE;9 z{p8IJDVI+(+@(H+eRxRF!<$jrN`kZoumo~uQSnrSI)WU<48t>ukEwI=Hn4y@itw;> zyKku}R*Ie{Fd*RS5!wvRA@1gb>tNhSx!C&Db-Uu4@&K_Coo$?J(#PWV^QW|`fWM#Gf)-=Hxz0F{B_z}WflDB4_H)k)k~tl z%=mJo%Znl|uxw!!1T*Yz7V6ACCxuM(Lzx_+S9tArpXkOFveEdn`7na^Px6T8_PJez z!>Q^5ywR122}B=za25Mv#zdd&5-ol^v zxX)s*fqNFOpS(_>Y{$g=qrm0br$=S8f%|tnJkjo3DlS=8RXmXta7E&555zlr-jGIeLhD?s-1Bdo7eu?&+kSi;R&-bR{lh|lpM9Rm0 zi=A#yz2k1(S9A1m$suJCNwmfdR|5oa=6p}$Hf@AU?){S!oM?hrg|Cr6_zXk>^g<@@Y!8aaMC zo%=Pm7?yIu@hIv0WjsZZuGVrGFr$iCUEQaGPP)?}hXczgmq<9Es{x^JJ)7!2L8H*2 zA3+V?2+#JjVQ|`Z4#T}XjXn~;H9ZPy(_WqU$J`L7Yv2rDF8CPxvw3+SJ)zU=K2GKB zN`v)=!t%WD%Ms@Sf(X!q*8E|Oh?HN^CxfzE(+Sg9p)k;phv(uVPt-YWCY> z)6fg>6S)fda{lmN;@^`A01V6m8$EIA<7U7)m03FRX6KwoRt}`6e1cjw7`i?OxTg-!#i!5VB2rQ8q+2oH8kA_ z7vMC?xMIUQQcP1)skdtK($vx(a|5?jVaTzprAyD#Nd;`GD>$ArqXRi=`R9lVuPS1o zJQLJk)p4&9v!kMW&i*b3#4bbdnMw{1UP0j}&!w*cYc$tPkTrIyEF)67Tp;CXjfnmJ zYBKsbm$KxS=gGzh>9(GjbZUkeY&E>0$DdgxBrD*E9=rF?AE$K1bYVVH=2G4gN7WO_ zO6eeLZAId`mTj)kn#dxnsandXty)X!nUrMyc|mrV;TMZ|YvhFJ-GowtayvXBpU=rq z&&qG=;n_w0t|vYu!ZTrlGRXt9a)d9=peBz#lgnQN;>4aQo0A7;6REXbVX-Wq zm}UH~R1Wjb$s&6wMf;XQ;74U7rTu_=xNw-?T;So(M3@A>3v*&PN?INRVae6Ls#Won zF4yv)RBdO*hVnhN z!dh?TRX#)5s|f3IVt@4h;pVo<+RvO`-=x^=u4H1j(A=jXUxXq>r0$S_vSLrr);)Hh zY#i}d`UjHCwJ+Hji zIV02(p0|PvGx-}3Nk(SS;n|)LfssQRL#GVemhpTYcj6=~**`^+m`Gu^IMMNS9mz*H z^POg#LXa!Y@ItV_1hl*uH7p)SRKs=2=-v24MSr@sH@(-u>0g9}_4%XlSmD>e8D@z! zh83g#4|ka$RO?C_Pm*xqx7{oZ8~$O9jsNy78;8 zQgr@n8*ize-ugF{e@bh*nF-IqKITdN9R{CYc=2Q_-9!pZsy^@l4~nT1*Mo^f&^ zDK4g$5M4K-k9GP-!`$(sddL6oqF`RQonJJ1QPmPT16puFOTM+3?W& z_rM9yp_u*8R0?l)Ol*$+x+nbhl9A&{)~r_6*%z09dQPowl-bPAf#1VIQ=@t5WvZtV zo;sytfBmgsd(KWE;-1ppj@C%nkf%Q^vCG)s5NffKI7k1gmmv{MPedW;9+8X{I_R)F1%I9KHLXpHQO76D~5s8>R z(e!KSuUteP!r`6?g+_&C%v#gG@AlG64zT;UJ!bv9WL0~3>A)1p$pvO<6Ced~q@cBU zpY9sK5=1O6K5r0&xttym=8l9(4pOSEyuY8J=WopADD)Z{8=EtiFw{)#`2!J9+>5DX zyt=V2bqCYD%>v!8B&};~maM}=a?_30YF+6_1fD!p19k{)ENrtpH|3fCG{(3c2#F>( zg4fyZwqqiYXZpOQzhfbAR$=%yGAESJdcSaL3%j8Fw~>Y?ii=r=E%rpR+oNe`$#iaC z1U#7&RSURFt&Qox^4;J(RPtaw*hV4vY(lU*fj&1vuDZOqsI<%xBN+YLYmkkb*VDOR zzLQT~0*YF*XLV^nV+TW>v|;)R%Yzgxwktb=3J=oy3IYd>UV`t~-{si37m)+ErXd-X zF?$6{F{iwm$)#gJT?2P_Yxu?G5z^QzZiHlE2QA3;@@s7FER9mlQmIF`t6kxFlL1F0 zEG+0PG=Vm+N?HZx@VP8J?Als^P*Q&BCrzC4W_0TAJo?%^`hStsQysx~<{%y^L` z<3IRTfHi&3b`v|+JjPp-kj5!lbx+J+%V+NI$-r^8)GHYr8OiLQWy`5a*Fp!O80!{_ zE`o?5h;RE|G_YEJxT#HMQ#KdMbwArG(jA-u0 z$PeeT*CuJKf+n%JaAMEHqP=fHp?5mkA$!QZ?cAZT$u9;&6~eReTEvtDdqbhOr=wX# z5McyMIV68YQJBd>b96@C+l!8@9JL|I_J8uwdwYko&;Dc;x9g^%7}++UxOUXCJk)#U z;}kOMpdG?`8IYnCt^d&$-aDkitZ)t7udOH}&6HLEa#XZh+;b=$)-#>L(jGj1xUAMm z)0ObS7k>DeY(F)gAHxU=bDyj_+R~nAIX7t`u-TCI0K;hfVb{Q-S(d(I@eupt9HE8| zX3`-Alo^r#PI9Ie?6=1;?b+K=4~CQ23PK5k5UM*tdAmY)k*3 zb@2F$uV-+eC-?k=?)f>iyE`Ioe!-sk{gJ~Z#pTbC`$hxb{j`_wz9E;=j&ySN&ip%~ z$ly6s8x>W$7A+~fj><3V9@sOTJ<2L4R=@Hb1|`i%=quZJz4G#YU}&hy)8Coc9;UDp zeOZikjYgqZr#CvU1oYJt?)tIAVoYCln)LC%@j1@9uMdLp)oo~xjX{^R1w|$RKU0+*a*udF z>!NQ5!|o{bP|3ji&;f^UQ}0fR5I!J*@CYZNfdoZf>HthK326N@C0eZ^!}X^}AVIDM;O3ryElJ-d zd70zY_a@C`<7Q=)E;S;u4W$ND+E$G);1(jHwGN= zM0NilK-~EzJk|fbEQ&3hk`lh1GtaBt8Ks;<pd@{_;4=i_5x-d7y;BX7GrH+4+>JO}J@Fq$bZrMmd( zGT-Qn8$}oy_YR+i_2AT*)EIddoW3s#9F=-5Or@pzh|foW_b7i0@0h8SJF0!xzWs~i z16s`0Q>OS+8NYK`%<0{_1ND2CU>ENw_& z2fC~RhX#y^&VS-agoV+Y@Gx{(wIgc-mtKcGe9B*gH)Nk}5tv)GIRbHQZ*Q8tDqj@0 z0jKJ?sX3)AwwX*Eb$9e%@dYVqPg=H@}U{BYEpZ&euzht}^Wduma~fxF zRyx1HWx1%e7dHVl((BxCkAH>3^*C$7k@%A{1lu=Q)T6WWVi&`AhgnP|wZws%{Zhm8&Si5%>DOhRONvKG2T41}KBbaJ0X0 zJ!e^U)c$n}$n3K68S{Gkk{T%5y1dgbEEFwy(BAD|Iuo~^B)vJ4nm->mW<$!}8maD2 zAF03#{VpLO-$A%>diDB30)K*2Uw+{}jaTm)Rr&@S(OO^~`x5hfcz(_5fc{70^J6_9 zShYM((z@Aa*Kr3;60#7&IJxs>L{Nd(Os*~hWvo;652%PI* zl<02(QehEn{0K(&>c9v zvexGE`=E2}bV-`7hNI7v1@ku~wl!fyypS47@*?zUMj%9h4uU1!;7IDxB4IV3to1i7 zeCN+&Py&i1_vrTwC$UbP4?vn~rZor&VURskTwrEm5zmVvPzXQ2Rq($CP)-CW-mj0V z)qWtDqUHe|vi(8RDl(h|t$Xzd>AymA2O0*bl0D zOe6NASptCRu4QGp0qbGXWUYEKUAuEKFJisV&NhxpKRsHF!MCG02wB&L&nF5}u+1o` z8L~1(rckoYx8#Gq75&bI`vBiQ=O>6`qSy?fv0r8RCry0cr`c4x@x&{_P%AiY@K zz$Vk8M-C>^x9B_Tk`Lj0~ zLsjA>h`UxKmMZ>?W{P0qpNu&4&cTZRh~^E?{ienh{I{RlqH&!6b6Xq0J-1n41o`(l z_}u68z3;E&-|9f_UBAv1uK1u(zmo+KoL2P;X@<5iM_X&^znxi;JA8+SyhO<$zK;gq zlvpg=SBHs0nfKF>m>6n5GAVGd(JEfSf7tBg`;1_0ifUF5{%(Dp8P3|;Sr|b zA!u`3^VL0Ffh7ZsJJ>}kht6x&-83$zGA_)-2M{F>^WQd+czbjWOrNYwrr+e*3hS@ap&o!7w>pID1C0t9i2wOyWNg+*jJ0K zN+}`21KdL-?D3Diw}`xsGy0{%RN+vI*eszdmWyHH*2rAg@sh@O#akZogb#s~oF%HB znvq@UhyBIv(3C_tg!zVcIBM2YnrNnIEhY%Bc~j`xBxD?WFr`o7UmXv7K3d3G3N`dTb=6|LYon zZmS9$L7ZFo3+P2^*W0-3GW&WAM>S%ZBIO$;z2gFI7Ewb2-G#0`25y`o4wTwpep{oNbr+JBB8+Y){v31H>s-GqE%pD+UXWB`<8?&dOV= zWn~2R=U`j#{vh$i1&}WFD zyj2ZV3Ufxkl{%mORBJYlt=k%z)mqO(JnAeE^ zyoYmo+VPX!FI6}E4XaawbhOJAwIqg*WYbv4jztKrixceDsSchqo1;g>e;(Y=04~() z8yaeIcry*x>l)v7CC(Z5W6`wn33OGJc5?yY6v2|%gX4DmEcUW&`9=|pxw?_r=kD_- zL_euN$Wsq{M)8{4y7kS@(raJctbdQr^cmh>`1fi@{}j}~Kz=q)!8y1Xn88 zjeqccc7#RsXGs>pmE76fj+{F*_KSqF%tle9e9kN8ckZhj zt_reoo*wV6r2Gy%Z7%A6ctPXUFGG16SyFL{2dtAE>c=Ml+A5$cco)-$Ut9J2xMA=%`rSl-i+!`84q2ob|iBEz)4JOm>wC@$NX z+fsp$+kecPM5hBws0xvJ_UN(*XKq#{OLi=_?_2{DWej|cH`I6%o37u6oOTxO(0eWCfeG)19h`N1 z@`LxETgfi8{2y)l3SwQhdt0yxsKqE!XOFu|l{nj&8VZ3kl113-B{KmN(1`$hU7{^H z*j1;Y24Cz@48dbC&Midm1@mCxYHY8yx>&A(r%7JsF`}Pe<0mmu{kvqx(;^V}i1#um zu8BkzyR*fA=XnNd-|=l2*T^GF8>no`vK;ka-w}EvL)vmJjdd)Q7+&*drgm*~?Cga% zJu@0Zsp>S03prR^LBJ$$kpiaZlV0e1Gv4&%kigBeh#fBTgN2W*X{>jC%3K)Wb77e7 z9O1Ez%Ix`}7)!2Wv*<6qm$UZA#&_40iOJXXF%SCsDp)FJ{+0&WBK*wXUGXsW5tgl9 z176+`k%JzG!w^Q?PCG%!LwwnbTT=|_lF#wlV+U6OyhwbMQpn^y{y8ef6_$&wMi}x` zK+c1EAzZLk&Gyyv8#%si;T|sQ?KQB{ic=o%wRPOis)Sl9e6;b}yODI|phXo^>ItOy z!gW?`wqMfeYUV&J%Y4CAE!x~qr7M=vxaTLk2MN2;$`YmI_J*5CXf^}rujl8-grmw_ z?=u+lV?yMg(J1Tq+WrLB*;h{?)aVlX2us%geL{>ITAR?eIR-C3Gc#3n5m4w<9{DYF z3;J3galT4b5bT)RIQ}huRdJ|W$dk&n#T1;vG(OpN*OpNTwvDxz4Yx*^wnz%sub{BxjamX>~KM2E-)a8o82 z@*oz?X`5)d8iJTfLZ-WLrjZBM7UvL5l<7PPPk>k1Lp{G3m;>Qc;C6FmNln-{u0qcA zUb5qx?BnVEhBVKxX%ivdlPHS-3)Z0~UQ=~#Jq3=WG|-yI=g4hjTZMLS#xiFlE`CYv zNJlu=J>_rc#pv>(*SgI9glxf;|r4CX}TlDWu}xH9W=6B1!Jc3$qdUifPeczsAZ zmi3o(iL(k-Wu0j6D>xAAe);E2w_rYuuNGpd3q?0IAvkYS!%8>pD)2@zazTKWEqWT~`xjki+D`F(I))*3|W&?7F`)wR4 z+0OJHf*_c!wa|7BiRK7%R+N9j6b1!8(~e#P72Q_i*~QgTCdMd^?9Kt$n|8@(rrPEx z#Njs;3mJl1W<>YC)69!XZy=H6>g1VlPOGQM>#~v=Zk|F2c-<_II*a!7#?LE3%xvkP z>I{B6328W}^F$2uf=2044vN7e#FS6pg4f`u2_~3|Yv6m_#V&DdMi&>WETtc_^i|=- z*{DTxcAfyl-+xO18p>``pTr@&&>Tj1kaTg?mhaeAe~X4rcHvf-=wIQRL}0k=hxXbc z2i?T}214sZ(OwAZ^r+lNI$hK@kRS^q2|3)})K2@g`6-iJeoJ_fD<0f%@ty8R14Y-9 zlvv^ac%(N%Eb)7P(%JP!vJP16dCKId+(yP>jN<_Kt@)rb)MDvkE_k6~H8jVu`|#Yj zcD4AnUprx}h3)6FN##K?9g<}Q8lFSbi#m_4$RYm?$>Th*w})7BpH80$2YKam)=n=_ z$&5=mo761KChN1QZ`4ato&eH?v zoL|*FU~!tXr%4b-vJt~2Wpk##*(B?MzTtpMBt&^FvqbW71FK7jZp1}N&m-xgH>Fej z2Nv!reQ01Gj@mGbC^24CV>~d#DhH5Lioltvm@g^(yLVz&l-b0IRr@htSPSg0*fedu z@`r7Z4eqhtJtEQvW+??9yHuZe^bYlZg@33H+90Zw+{_(nY5Fy!oNLGEE&a(oi|YAK z^x+L3=kmAgK8j7gztHZrCAyzr3)s2%dm;bN_3+$p$t!6o!EU~)cOeehymoXEQoB*l zFyoqWJba_`X>iBBst%_@V9qAu%U~nQD~gPD$)=H*wAI8w4>&sCO=xpsBBiyn*=B=r zgK+@5@l$>qeF*%u`r)6KoxQVyyyfq-UvO&pp6DeQo|mcgKJ`;Uf)6DLdsWh(_kROu zP1?s-7|gUkHpe`CIU`j+51H*lc$ddZ7b_N-JY?ikm8VqbgI$6*)F*ZLHRAYAoN%Wh zue$aHbdkES@^&E(AUx3Pu;h;2#7xBZp<&UBvJ~c@JH2j{JMB3i_hvWE?<*7qJ*OGS zeP@J$`x1U!l745MtoD2;^xjNO8$OkZm_=gzB^vkDxFie1_M<`rsg%g-Hf;y)pRQ9w z_0yh6q88fwZ>eJ1zG{f{<)jrGU@7^ZC(34I+yaF{irOk3USK?39H znSOpi-~O@}a*R2ZUEmZ@H`elfcp6kkNDnRo#irzT(jOQ!;y+viI2;aazUQtz97K#&p^$PxkOZ@`u`rAj%EBzHxf^R0SLN2OoR#mlHT;7hJ(DrO8R zRZzJMbdtI;nnJ7A(ASH|1k0l$bj;0LYuB#eem|617wSjdh=muZw6*gE#ScN-8`yL% z@6_HtF1wmc`23J4WL3~iDq%ozwiEJMT5#Em)j8_ta*Q#2-&j<8r&nvOL&FPdBbwFN3K9LIt;Y=4Tl`{2ffYf#8MriQFRK)0WNuIN$%^~B39Z}HGvmzsbrC`(0(N*y%bbX+?W)r>NsbvWrW;l$9hqm_ct=GW@^toX&Xhh5 z#ns$#4&mNT!w=2Z8M(Ljz#oJ2Z|~jMvjF5FFJ95{U7w~%h{x|fXSUbyj=3j6u|yk% z(APgy!gk4{T(ScwwZPM>9pK4TOu}lwWUP4gxnj9^&@0^iq8qNjN6IQ`?`BS21L)C- z&r+xzs$~6}!Mag$|7EywrHuK5aC!O;d6g?{FllNs2k@lZPr%b#NSyxryWe;FYp(2K=}?WFCQlD^^~ zcPk21ckZ3u0E*+L5GrQCAQ-%%fGB-InlZ)Kg zAD64H(9Rqns{fQ2F$veA^AKHpv@f!ClcRMfiJ@D@-8iDVAU9d1F^a2#9*$$(xgBx$ z8eqK8b`Y*P6`yg(NN!myJv;q-W52toDs$UUJX*V#8Psm0)*htTA0+QXSw(+ykG{r) zOUG-w2U`be(Pem4IBR;Z`6vM2fjW`vbW1&>wMLD3F$3h<71Z>I3vSR2%>e(ehEuprF zI4OcD75l3cp71m3~IXu%xcS=+d)jSI6{kvM9P4QwZjrxL*x9eW>vO9 zUgh(5uYbq-N$v&*E18P>rp#!|W;3@ObgVV1ts6{#sGEGH$JR*JTq~y|U~Ie;&Mxqq zQarJ94LI}e;KG*t@`y&?uk3jl@owPt%t+|NswKl?kUuqL@20}B z21?e3+0qp}TLy|=dQdeeOL5v$^d6; zG`z<*^ysbkoet>x{RY~HgatwuIdWQ|l&J%DXuw7ghFRx;Uzwae+ahx8y{PnjsM#h!Z;+$>n07W}O`zb#1C6*G`O`>M zaJXYt^Uohm^`a`I2|fmK+woDCrCHX8Cl%5^GeErb2^)P(@&1fU7A*dSp5J|3s9=Ke#dy=WKNThJ%tJ8ExOwRQ2=15^(ljHj?O;YM) zx||l9vqQ{5HxOW&JMAJbJaCW&b+(R|2?X4;0xo%sOC&k;gT7W0hST*mSWCA?;jbRq zb`BdDvhmYu*qF{f79_-cL7So~H}^~x&dHySP{X$Vb@>O=cWM(Q*h2CWQ<{Z`1e{fNt^w>Q$NpErC| zI{yF!A?x?G2jfMLpntrES)AQ1@9qB(3|+R;c0HJlUa#PYePyKBzyYNvT#dcuIR5D6 zsJN;nlKK~O-cTH)v=$lXzl{nl_yupDpxK|%ppp$K)eY_s^8Km=9v%VDjUTx2kgTx! zkC87qLoW$X^!_wLvidJ{NCtKvG#$jU1Wds6*%Ak-lGWJh-}UOaQHma3YzGWKN&2RN zQ|DOCjund5CfE--9vy;zotPq2#dyy%4`J0azbJ7{ z4*>CP4Q-%SOjYXO--CvPc&^vhyphO1Y;52824n|T1!fhUaRdbRLGmr&!VAq!p1Whx zmWu?JHGNeX%tzpWUH3Awse`bW?qa%5eMMNJRKn7wrb@N>M zAAQX)dsg3W`>ZA}j1&vOljU}XT&xJeBrxggwEeuEf^zg@KVzOjzk4%15Kf;r7&FE4 zlzha&LdolAk8T0fqD7mABns3jT%Gz!$gsaN8jzEcy}qyx_>gd7W6&emT3KMW8nMRV zG^)9t*W`h@Aj?@bmQfo}+_R(^wa!p?t~!UHmblZKOGNc7f%lI2Xqurlg4eai;*D5Y zW!dNk%ve_9)@sHmOH)upT14SR^B&UGD#>JSo@Kvw$t_}?PxIuwaR_t1Kh1}kkySxs46?Z)&R*s#UvRT(!x(jbD zJYbP5c=p=>*oMCnH@yDRHL;<#JI>xXc7Ai$-( zIf{wDuQ|=3`+4|{M2=sxVdrXX>XyyHreJTPWWzYWfsCfwAMjfCe1wrJpwT4BEvb7Q zZXl>}Dhj;!MWlm)Q1y0^jYl3OifDiFh*M(+SPN6Ii=m`_Q7is)KSIU@l^Grt!}Rjt zeX}`}-unUXKz~8bwDf05DnCwpSwQmsB?;)Zigz6!(Ld+E&O5-BMqViN`O3`Uv5}u$ z+2ZBzlQesToI;H~0vF^g4a9lm!2i1*5~+C7A|I6LJQ^r%vu$t-NmU zZs|r|8&zrx($`(STD*}>;4TVBR%4iXJl9O|ASPGS!9W+t4I@EX)RQ;%#-q>mUl>vrS*LGH+j1ojSs@pS^6p_t z8TgKL#s_+bcJDgublz(?cAa|c{Jr=BlOO!HVM`ELtBLR;Ptbsgx|4SGE?u7+O6O;# zBzZ**hXH{owD)0qG0ldkUVB0Ns68G2Bk|(S922IFKP`&+YW1_mq^H#6TQ~7K zIGJA3@u_*esGf3}zeGX5+YjD?VeTYHMbJY2WYHcT#(tCh$Ki+(mY(UTBAU z5mEaGbw-`dys{$+5Z4k3+>N!#*>CF3+lwg4KmPk0ny^+#21F+1hi7>5qhs>ycmr@8Hq* zNbHVpqXS7Q>nkI|oV>o&T-w?p5*Q1bV2i{Y`u~0Kdg4voGq=Ujo$St3ca@RsF7}e< zcb-ptWc~cgeqFzi^cb%z<2|fF(o}iZMmHDVLZp9LD;3{C=94toBYQA94;~i!`lZH9 z0|X7sK>#M0vi8VH@Wuln9k<@0JIc{cd_AKxJwG%+i|+i+wZ%8GrzefO+M0ja*5)e1 z882@AkgUgofxFnh@Z2V*m*3wY;VbpAeAZ7{G!;Jj!p_2X=Uh72aiCi;3CZXhb~mZhvL%wr?CO5k7SP4o&8Ze>v_ z0E+-iCgD}7VIPvO^BOmX)?EK-l*%a^YwUA6$b3^g;v{e>R%7XxU|Oy^7k4&Gs1&`C ziBb!G4;T1~rOpj&Ho^lCpB!?`o7=P9lZvVB>?SxHz-T(QxT}c!A0Wyqa>hBNh|zB$ zL{(MfDjd=kAl3%qsk^lBKTIamORxDeZ|>^3RE)zxOPzX zyLv)$ud)|$X~UA7283i9f--z|=bl4~7&XIB{Wt7eo}ojN@Hs83I0D48aJH^gHV{Z2I9~b|zLk}qMS~$R+ z)sfFPH|Jw#ZCTx9C?`|iQZ5Mx6WZ(R({1}U$qY$w(+WeXA=zpI{1$va1F3+8LV`6; zCmcgXKG5bITMRMei=zblF;lyHl#|a2PA-3=nq0XM$NaYc08e7(w~(IF6W!+&I$5qo zi`w#LoBDCgjcJ~wlFl{KL539y8xvfQ=z-n22XLrNWK_M%AQir+7`(f27KII}Jhi1w zk76gg&(#ul#g44=Btvn>hX3iIyCQZc)8uF~u;!88X%gZ{a8-*lFIse-%TPsFcZnV1 zKT}#O-HW1;182FyY0&A{JQd<$tRQ(K<}+3j^;dd}cCh!UdGz-i3$Jb;f&D;0s?4bq z!$u~@UkK)*m(4$b*Yf<>cVhN};gN_iUdLLDb8~D_v^;8sxHk~+D2RB-jXApT4{$HF zsZnp|*OKxwmbIpH8~8ii+*e%v)>#8Rl*nQLpGyH*JEuH83VbxjRN>_7r@99?5%s@I z&tDimYgE8&I?j<s=B*D3 zF%s3$Tor;+aKcf()OOaZvYg4iiWIWM>D}9H_BRvX@@UbCx)Tzr{xL2xR=5TO~&Cv%P-gj4s?hUf62resSrpd9uKwe^fVok%^2p~D6VnyzRY&*P!T_$ zcE|~G?~788=kk2@YOy+@(J6*A&O0+BCU28?>~CIhQL4hQFG$d8p~$_$C)bu>xLaTr z_dQu#Q)>&M8FR-t2C=bvuI$t_`n#an%NU%sbI~oT`1Grkht)G0d+X*#r)JU940P_O z*yiAkV6x-mn9*3=r}~dYZOA)b4=_2;d1#~Tzc)Tn)szKdmb)3i`ZRFNAKgULeiGA1 zFO7yO22YBe!DIIEe*jjcs;o`$gGh{aOyN7<`JRIobLc1qsg!H^0JZ{bu^E9fXxn$| zY>ZDgT(~{k@7L;`3i@dZl7-vp@o-~4vX`W_LKibR858qe83Ip@X;UGpym}PWe@+wN zE`CojF!o&f@O&3Y^W#>)+S%)W08f_8VJSy;aEZKzL{K&nYDMlrjcGoQceP}R;7GPyLoMn4dg~}T~Ml0Z>3(C9`qCg*ddjq*1w=YPDC-F#D0z=H>W+cV# z%-XA`m$JPPIaFYbC`sHM-=)e3-;o`@npVg{-dGb4vC8ony?jq%7!pLP1FtW<`}Cno z;CY#@pOCeLsk&Q7(3yuRO*^m-vP~DZ*#m@;MyjemV*M>`%U69La;h6WC81M#VDEyn z*W@U>un9Y_p5y-DkMH$*_mb376%;>@NY|I5-r>-1=eSlvsb_&?Gg=JAoxAAHs`UkQg$b0LlsRX-kc&jaE~W$ z?x-xw;Q#2cJa0*n$>hh0unusKvLK6!vcA)v?uo!P%xb=#Z|o|RE;QWiCry4JrGEGV zy-UjQA9Qf}`m05B`ii!9qtC+vAjdFaHMkSwzKt|YjD_=Yie}4?)yC>b@F*30Tt+H>vQ&!s!^l4DjWX*8}A3p5LFik zMZX#zr>PDTOH~NFUr+XGZc`RJqFVE1cMD?gXFE#mku(lyO&xU`^^mFE(VYC-lJ5sE zU?MsH0W9xlKgmvUNx&N}A_V^c%b`0pw$+dZQR}N=^W|t#&H~>MSz6mxT)rO9egESv z5dihFV*!8DKLDB0F_Syx>MU5qIB@^($#mU|Z@&<#(${pZ$UqEOnLkuOKyYx4N6m%X zRcnf_3~gL`Ov`?o;V9&XR)LGMKUKMMaZeL65f7Kz4~dGNi|p&nC{)82k7}KTOhe{9 z@SxK8qFyCjc~ZQ9-L+C(Qd3*EomjWK{@@z2!tFfobrkh<1Wj1IDI$YZ7mniv6Q1|E zXa564wEfXC&)A&=dTa06m$zAzf6h1$ItZ}M0G|ia?E`_!hG@oP*VVkoK0xSJkvsBS z$jSQ*zt3aeGRLzSxki9`C^Yp^J7UvsqWBwOm3Sc@5wlB%zsCyX+?ADjD#d^<;{9VZ zB-%qOv;Vg6qhRLCj+Mc1?+`c+^TJ*A@6e`EWz!e_g4p_2s0yG`964^9J2$v;oF{^x z(QvssP*Bo;V|n+Oz%=G-5&G!b`8*udDfHN#oH%f|*rOi+NIChL1(p`+&)jdyc#mL%!p zMOC8zYM{f~PLtG!dT6Yc&wuX&HwJg=jJxZd+rzHMGYI}xLxl&|%9u^~g!x{}iVu+Q z&zc3Os+592Tk5Z#1M|ht17Wf_9PKw@iib_|`R&+-n`;%^nGA!bMIfNo(*E?|TZbfr z2+w<=QfxX_SQUCOM~q$G1NjZ#llIV6WnZYjr+hEA!TRNh9gPs_I9R~+p{ zb@zP}i;MO#)ZGi?N}Zs}*A8TzN}GNgS@uJ@XISxgHXu48mAV8Ix*4JXjnfjl%_eQ3 zF2>8O4^6zgbQS6WW|Arb8EH(dZ}(Z~vQlpK?Pl1E@rs?zuiJ1=Y(&Yk#Tz*XuZ&ib zZ-}?09yha=Xa9%}mV0Zy$gc33blKDlITrP>ccC}GV*2E4AaT3R_WXE7-y_N3KSSTN zjK)-yjz!#0b-k23Td7J%4;!-HRO5AAz?y35R}*>@g+Zk5zh_mfrM)to($a z0q4sR^Er0UTL&mrE6m;tKKaDg8GST?b2mz(^ZMvOU}INiBm9Z|N5-T&al)#ome=n~ z6N=NQx`Ud;0%pkKLOj?NpcM^w97X3I(&~3awN)m_@ zq&6I{{s=Xttt3w0Ql{AzFFNS5nSX_}I)v=ijm4ebJ9-iGMfJ$aKo)r5i^7VTgsxg9 zomEHLRMkgn9@&4?s5=Nr*UdtCi-&G(eX9^FKS92F!p98{31-cY#cerh?1|HM7cv|O z)0yA)s*-llbsX7oonO!qo>D{NiC4E|L5BN+bt5aM)}a~F8GT}jD1^nlFWN{`EsIDC zxA+I>vpzyGwXS6J>ihoXP#9E?-C~K1K}GY~a85mWrG9yad;CJuv2oMy1##LH0hHgt2Jv)w)`>nN>%sQb;Od`6z@^i#Xit5sY@NLmS+^NmcTF zE|+m+<;aFmm0FL!H5wK3^V6FJh7+9px`Kdn#M9Ix;k;0rE2pJrTg5QDF@b}Qfa;GM zLf%7<-SxbsoG$Vp%Zf4zLa_UP9rJ((b=z8@N4}KT@L(bL^cGBQWEf^TtH*1ZH`AZ8 zyrRqdLvdV)M2CIbb0WXDfPeG{ex&ynI8AL{ck@F!ESi?wcUQT#qN5&&8GWZG*ElPY zW6{vzb{zeUui?Ycg6Xfjc|BIk^#5?{utS!i4z6NR{9 z^H_CBaa_Z5YPl0Arz?erwDE1EKfP!r%T4aX51vmylce#}|BiVUTJbOa z;s~B(+AAYJ1pODDTzR8BSZP#$)y76?_2RIObB8C0nm;c$=rDc%Wl5q9re(H_J;29B z3bMnm7Z4`;{g`g}D tYKa+(@uD?ht54P~7l`_&!4z05VtTMYWoJCqg9-2PCKYh`|2Y5V{s+b<+yVdq literal 0 HcmV?d00001 diff --git a/_release/help/commands/3d_examples/media/sky.bmp b/_release/help/commands/3d_examples/media/sky.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e4f98d5845b71819db0af59136333f546071acf7 GIT binary patch literal 196662 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

qW8}e9DDik4GXmX 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 Tno(6C+io&RB%bfLUWfnLSG7?i literal 0 HcmV?d00001 diff --git a/_release/help/commands/3d_examples/media/wood-crate/wcrate1.3ds b/_release/help/commands/3d_examples/media/wood-crate/wcrate1.3ds new file mode 100644 index 0000000000000000000000000000000000000000..d69b18bf0940bf0d7f04bde5186ec888f276a6c7 GIT binary patch literal 1572 zcmdT^y=zlZ6#pf!`7mi}()v+tjj!St4idGv*fhCn5rjaDf=CstHk(shaI2vRDmXb5 zoDxlO%^P({LlQVBwAAJ9s+4K5Iz(K&{YieHX>|K7P2ev{pU$pPc}2Pw@b~ds+sX8CtimRLre~ zv)9YlaHA;~kO`sKzbNhl~kNYSPU#2ek{RJqz_AT*toZ9NQ^T2$+et?p9-&`bhwQ|S!off;V`B!O+11ujuLa`G;8ae7^NQKJ`U?gtolim{liEvvcg=PHU1=1 z&c+dX#fJBRBH^VdIb*Ygu=kEK=gB|Jf7VM=`u{Mo+nw;niEeyj&W(rLUw^g>u6L45 h|MScGrhRKO-kE*~wSH8OuE|KR$vU=cJ$V^jzX3=mZ;Jo` literal 0 HcmV?d00001 diff --git a/_release/help/commands/3d_examples/template.bb b/_release/help/commands/3d_examples/template.bb new file mode 100644 index 0000000..9f15384 --- /dev/null +++ b/_release/help/commands/3d_examples/template.bb @@ -0,0 +1,20 @@ +; Template Example +; ---------------- + +Graphics3D 640,480 +SetBuffer BackBuffer() + +camera=CreateCamera() +light=CreateLight() + +cone=CreateCone() +PositionEntity cone,0,0,5 + +While Not KeyDown( 1 ) + + RenderWorld + Flip + +Wend + +End \ No newline at end of file diff --git a/_release/help/commands/command_list.htm b/_release/help/commands/command_list.htm new file mode 100644 index 0000000..8c53d35 --- /dev/null +++ b/_release/help/commands/command_list.htm @@ -0,0 +1,5285 @@ + + + + + + + +Command Reference + + + + + + +

    Command Ref.

    + +
    + +

    2D - A-Z
    +3D - A-Z

    + +

    Scancodes

    + +
    + +

    2D  - Category

    + +

    Basic:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + If
    + Then
    + Else
    + ElseIf
    + Else If
    + EndIf
    + End If
    + Select
    + Case
    + Default
    + End Select
    + And
    + Or
    + Not
    + Repeat
    + Until
    + Forever
    + While
    + Wend
    + For
    + To
    + Step
    + Next
    + Exit
    + Goto
    + Gosub
    .
    + Return
    + Function
    + End Function
    + Const
    + Global
    + Local
    + Dim
    + Type
    + Field
    + End Type
    + New
    + Each
    + First
    + Last
    + Before
    + After
    + Insert
    + Delete
    Handle
    Object
    + True
    + False
    + Null
    + Data
    + Read
    + Restore
    + Include
    +

    Maths:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Pi
    + Int
    + Float
    + +Floor
    + +Ceil
    +Sgn
    +Abs
    + Mod
    +Sqr
    Sin
    + +Cos
    + +Tan
    + +ASin
    + +ACos
    + +ATan
    + +ATan2
    + +Exp
    + +Log
    + +Log10
    + Xor
    + Shl
    + Shr
    + Sar
    +Rnd
    +Rand
    +SeedRnd
    +

    String:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Str
    Left
    + +Right
    + +Mid
    + +Replace
    + +Instr
    + +Upper
    + +Lower
    + +Trim
    + +LSet
    + +RSet
    + +Chr
    + +Asc
    + +Len
    + +Hex
    + +Bin
    + +String
    +

    Text:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +Print
    + +Write
    + +Text
    + +LoadFont
    + +SetFont
    + +FreeFont
    + +FontWidth
    + +FontHeight
    + +StringWidth
    + +StringHeight
    +

    Input:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +Input
    + +KeyDown
    + +KeyHit
    + +GetKey
    + +WaitKey
    + +FlushKeys
    + +MoveMouse
    + +MouseDown
    + +MouseHit
    + +GetMouse
    + +WaitMouse
    + +MouseX
    + +MouseY
    + +MouseZ
    + +MouseXSpeed
    + +MouseYSpeed
    + +MouseZSpeed
    + +FlushMouse
    + +JoyType
    + +JoyHit
    + +GetJoy
    + +WaitJoy
    + +JoyX
    + +JoyY
    + +JoyZ
    + +JoyXDir
    + +JoyYDir
    + +JoyZDir
    + +FlushJoy
    +

    Bank:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +CreateBank
    + +FreeBank
    + +BankSize
    + +ResizeBank
    + +CopyBank
    + +PeekByte
    + +PeekShort
    + +PeekInt
    + +PeekFloat
    + +PokeByte
    + +PokeShort
    + +PokeInt
    + +PokeFloat
    +

    File/Stream:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    OpenFile
    + +ReadFile
    + +WriteFile
    + +CloseFile
    + +FilePos
    + +SeekFile
    + +ReadDir
    + +CloseDir
    + +NextFile
    + +CurrentDir
    + +ChangeDir
    + +CreateDir
    + +DeleteDir
    + +FileType
    + +FileSize
    + +CopyFile
    + +DeleteFile
    + +ExecFile
    +OpenTCPStream
    + +CopyStream
    + +CloseTCPStream
    + +CreateTCPServer
    + +AcceptTCPStream
    + +CloseTCPServer
    + +TCPTimeouts
    + +Eof
    + +ReadAvail
    + +ReadByte
    + +ReadShort
    + +ReadInt
    + +ReadFloat
    + +ReadString
    + +ReadLine
    + +ReadBytes
    + +WriteByte
    + +WriteShort
    + +WriteInt
    + +WriteFloat
    + +WriteString
    + +WriteLine
    + +WriteBytes
    +

    Multiplayer:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    StartNetGame
    + +HostNetGame
    +JoinNetGame
    + +StopNetGame
    + +CreateNetPlayer
    + +DeleteNetPlayer
    + +NetPlayerName
    + +NetPlayerLocal
    + +RecvNetMsg
    + +NetMsgType
    + +NetMsgFrom
    + +NetMsgTo
    + +NetMsgData
    + +SetNetMsg
    +

    Sounds/Music:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + LoadSound
    + +FreeSound
    + +LoopSound
    + +SoundPitch
    + +SoundVolume
    + +SoundPan
    + +PlaySound
    + +PlayMusic
    + +PlayCDTrack
    + +StopChannel
    + +PauseChannel
    + +ResumeChannel
    + +ChannelPitch
    + +ChannelVolume
    + +ChannelPan
    + +ChannelPlaying
    +

    Graphics:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Graphics
    + +SetBuffer
    + +FrontBuffer
    + +BackBuffer
    + +LoadBuffer
    + +SaveBuffer
    + +LockBuffer
    + +UnlockBuffer
    + +ReadPixel
    + +WritePixel
    + +ReadPixelFast
    + +WritePixelFast
    + +CopyPixel
    + +CopyPixelFast
    +CopyRect
    + +Viewport
    + +Origin
    + +Flip
    + +VWait
    + +Scanline
    + +GraphicsHeight
    + +GraphicsWidth
    + +GraphicsDepth
    + +GraphicsBuffer
    + +Color
    + +ClsColor
    + +Cls
    + +Plot
    + +Line
    + +Rect
    + +Oval
    + +GetColor
    + +ColorRed
    + +ColorGreen
    + +ColorBlue
    + +CountGfxModes
    +CountGfxDrivers
    + +GfxDriverName
    + +SetGfxDriver
    + +GfxModeWidth
    + +GfxModeHeight
    + +GfxModeDepth
    + +GfxModeExists
    + +TotalVidMem
    + +AvailVidMem
    +

    Image:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    LoadImage
    + +CopyImage
    + +CreateImage
    + +LoadAnimImage
    + +FreeImage
    + +SaveImage
    + +GrabImage
    + +ImageBuffer
    + +DrawImage
    + +DrawImageRect
    + +DrawBlockRect
    + +DrawBlock
    + +TileImage
    + +TileBlock
    + +MaskImage
    + +HandleImage
    + +MidHandle
    + +AutoMidHandle
    + +ScaleImage
    + +ResizeImage
    + +RotateImage
    + +TFormImage
    + +TFormFilter
    + +ImageWidth
    + +ImageHeight
    + +ImageXHandle
    + +ImageYHandle
    + +ImagesOverlap
    + +ImagesCollide
    + +RectsOverlap
    + +ImageRectOverlap
    + +ImageRectCollide
    +

    Time:

    + + + + + + + + + + + + + + + + + + + + + + +
    Millisecs
    + +Delay
    + +CurrentDate
    + +CurrentTime
    + +CreateTimer
    + +FreeTimer
    + +WaitTimer
    +

    Windows/Debug:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +CommandLine
    +ShowPointer
    +HidePointer
    + +AppTitle
    + +RuntimeError
    +DebugLog
    + +Stop
    + +End
    +
    +

    3D - Category

    +

    Global:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Graphics3D
    + +Dither
    + +WBuffer
    + +AntiAlias
    + +Wireframe
    + +HWMultiTex
    + +AmbientLight
    + +ClearCollisions
    + +Collisions
    + +UpdateWorld
    + +CaptureWorld
    + +RenderWorld
    + +ClearWorld
    + +LoaderMatrix
    +

    Texture:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CreateTexture
    +LoadTexture
    +LoadAnimTexture
    +FreeTexture
    +TextureBlend
    +TextureCoords
    +ScaleTexture
    + PositionTexture
    +RotateTexture
    +TextureWidth
    +TextureHeight
    +TextureBuffer
    +ClearTextureFilters
    +TextureFilter
    +

    Brush:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CreateBrush
    +LoadBrush
    +FreeBrush
    +BrushColor
    +BrushAlpha
    +BrushShininess
    +BrushTexture
    +BrushBlend
    +BrushFX
    +

    Mesh:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CreateMesh
    +LoadMesh
    +LoadAnimMesh
    +CreateCube
    +CreateSphere
    +CreateCylinder
    +CreateCone
    +FlipMesh
    +PaintMesh
    +LightMesh
    +FitMesh
    +ScaleMesh
    +RotateMesh
    +PositionMesh
    +UpdateNormals
    +MeshesIntersect
    +MeshWidth
    +MeshHeight
    +MeshDepth
    +CountSurfaces
    +GetSurface
    +

    Surface:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CreateSurface
    +PaintSurface
    +ClearSurface
    +FindSurface
    +AddVertex
    +AddTriangle
    +VertexCoords
    +VertexNormal
    +VertexColor
    +VertexTexCoords
    +CountVertices
    +CountTriangles
    +VertexX
    +VertexY
    +VertexZ
    +VertexNX
    +VertexNY
    +VertexNZ
    +VertexRed
    +VertexGreen
    +VertexBlue
    +VertexU
    +VertexV
    +VertexW
    +TriangleVertex
    +

    Camera:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CreateCamera
    +CameraFogMode
    +CameraFogRange
    +CameraFogColor
    +CameraViewport
    +CameraClsMode
    +CameraClsColor
    +CameraRange
    +CameraZoom
    +CameraPick
    +PickedX
    +PickedY
    +PickedZ
    +PickedNX
    +PickedNY
    +PickedNZ
    +PickedTime
    +PickedEntity
    +PickedSurface
    +PickedTriangle
    +CameraProject
    +ProjectedX
    +ProjectedY
    +ProjectedZ
    +EntityInView
    +

    Light:

    + + + + + + + + + + + + + +
    CreateLight
    +LightRange
    +LightColor
    +LightConeAngles
    +

    Pivot:

    + + + + +
    CreatePivot
    +

    Sprite:

    + + + + + + + + + + + + + + + + + + + +
    CreateSprite
    +LoadSprite
    +RotateSprite
    +ScaleSprite
    +HandleSprite
    +SpriteViewMode
    +

    MD2:

    + + + + + + + + + + + + + + + + +
    LoadMD2
    +AnimateMD2
    +MD2AnimTime
    +MD2AnimLength
    +MD2Animating
    +

    Plane:

    + + + + +
    CreatePlane
    +

    Mirrror:

    + + + + +
    CreateMirror
    +

    Terrain:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CreateTerrain
    +LoadTerrain
    +TerrainSize
    +TerrainDetail
    +TerrainShading
    +TerrainHeight
    +ModifyTerrain
    +TerrainX
    +TerrainY
    +TerrainZ
    +

    Listener/Audio Commands:

    + + + + + + + + + + +
    CreateListener
    +Load3DSound
    +EmitSound
    +

    EntityMovement:

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +ScaleEntity
    + +PositionEntity
    + +MoveEntity
    + +TranslateEntity
    + +RotateEntity
    + +TurnEntity
    + +PointEntity
    + +AlignToVector
    +

    Entity Animation:

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    LoadAnimSeq
    +SetAnimKey
    +AddAnimSeq
    +Animate
    +AnimSeq
    +AnimLength
    +AnimTime
    +Animating
    +

    Entity Control:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FreeEntity
    +CopyEntity
    +EntityColor
    +EntityAlpha
    +EntityShininess
    +EntityTexture
    +EntityBlend
    +EntityFX
    +EntityAutoFade
    +PaintEntity
    +EntityOrder
    +ShowEntity
    +HideEntity
    +NameEntity
    +EntityParent
    +GetParent
    +

    Entity State:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    EntityX
    +EntityY
    +EntityZ
    +EntityRoll
    +EntityYaw
    +EntityPitch
    +EntityName
    +CountChildren
    +GetChild
    +FindChild
    +EntityPick
    +LinePick
    +EntityVisible
    +EntityDistance
    +TFormPoint
    +TFormVector
    +TFormNormal
    +TFormedX
    +TFormedY
    +TFormedZ
    +EntityAnimating
    +EntityAnimTime
    + +

    Entity Collision:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ResetEntity
    +EntityRadius
    +EntityBox
    +EntityType
    +EntityPickMode
    +EntityCollided
    +CountCollisions
    +CollisionX
    +CollisionY
    +CollisionZ
    +CollisionNX
    +CollisionNY
    +CollisionNZ
    +CollisionTime
    +CollisionEntity
    +CollisionSurface
    +CollisionTriangle
    +GetEntityType
    +

    Graphics Mode:

    + + + + + + + + + + + + + + + + +
    GfxModeExists
    + +GfxDriver3D
    + +GfxMode3D
    + +Windowed3D
    + +
    +

    2D - A-Z

    +

    .

    + + + + +
    .
    +

    A

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +Abs
    + +AcceptTCPStream
    + +ACos
    +After
    +And
    + +AppTitle
    + +Asc
    + +ASin
    + +ATan
    + +ATan2
    + +AutoMidHandle
    + +AvailVidMem
    +

    +B

    + + + + + + + + + + + + + +
    + +BackBuffer
    + +BankSize
    +Before
    + +Bin
    +

    +C

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Case
    + +Ceil
    + +ChangeDir
    + +ChannelPan
    + +ChannelPitch
    + +ChannelPlaying
    + +ChannelVolume
    + +Chr
    + +CloseDir
    + +CloseFile
    + +CloseTCPServer
    + +CloseTCPStream
    + +Cls
    + +ClsColor
    + +Color
    + +CopyBank
    + +ColorBlue
    + +ColorGreen
    + +ColorRed
    + +CommandLine
    +Const
    + +CopyFile
    + +CopyImage
    + +CopyPixel
    + +CopyPixelFast
    +CopyRect
    + +CopyStream
    + +Cos
    +CountGfxDrivers
    + +CountGfxModes
    + +CreateBank
    + +CreateDir
    + +CreateImage
    + +CreateNetPlayer
    + +CreateTCPServer
    + +CreateTimer
    + +CurrentDate
    + +CurrentDir
    + +CurrentTime
    +

    +D

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Data
    + +DebugLog
    +Default
    + +Delay
    +Delete
    + +DeleteDir
    + +DeleteFile
    + +DeleteNetPlayer
    +Dim
    + +DrawBlock
    + +DrawBlockRect
    + +DrawImage
    + +DrawImageRect
    +

    +E

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Each
    +Else
    + +Else If
    +ElseIf
    + +End
    + +End Function
    + +End If
    + +End Select
    + +End Type
    +EndIf
    + +Eof
    + +ExecFile
    +Exit
    + +Exp
    +

    +F

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +False
    +Field
    + +FilePos
    + +FileSize
    + +FileType
    +First
    + +Flip
    +Float
    + +Floor
    + +FlushJoy
    + +FlushKeys
    + +FlushMouse
    + +FontHeight
    + +FontWidth
    +For
    +Forever
    + +FreeBank
    + +FreeFont
    + +FreeImage
    + +FreeSound
    + +FreeTimer
    + +FrontBuffer
    + +Function
    +

    +G

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +GetColor
    + +GetJoy
    + +GetKey
    + +GetMouse
    + +GfxDriverName
    + +GfxModeDepth
    + +GfxModeExists
    + +GfxModeHeight
    + +GfxModeWidth
    + +Global
    +Gosub
    +Goto
    + +GrabImage
    + +Graphics
    + +GraphicsBuffer
    + +GraphicsDepth
    + +GraphicsHeight
    + +GraphicsWidth
    +

    +H

    + + + + + + + + + + + + + + + + +
    +Handle
    + +HandleImage
    + +Hex
    + +HidePointer
    + +HostNetGame
    +

    +I

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +If
    + +ImageBuffer
    + +ImageHeight
    + +ImageRectCollide
    + +ImageRectOverlap
    + +ImagesCollide
    + +ImagesOverlap
    + +ImageWidth
    + +ImageXHandle
    + +ImageYHandle
    + +Include
    + +Input
    + +Insert
    + +Instr
    +Int
    +

    +J

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +JoinNetGame
    + +JoyHit
    + +JoyType
    + +JoyX
    + +JoyY
    + +JoyZ
    + +JoyXDir
    + +JoyYDir
    + +JoyZDir
    +

    +K

    + + + + + + + +
    + +KeyDown
    + +KeyHit
    +

    +L

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +Last
    + +Left
    + +Len
    + +Line
    + +LoadAnimImage
    + +LoadBuffer
    + +LoadFont
    + +LoadImage
    + +LoadSound
    + +Local
    + +LockBuffer
    + +Log
    + +Log10
    + +LoopSound
    + +Lower
    + +LSet
    +

    +M

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +MaskImage
    + +Mid
    + +MidHandle
    + +Millisecs
    +Mod
    + +MouseDown
    + +MouseHit
    + +MouseX
    + +MouseY
    + +MouseZ
    + +MouseXSpeed
    + +MouseYSpeed
    + +MouseZSpeed
    + +MoveMouse
    +

    +N

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +NetMsgData
    + +NetMsgFrom
    + +NetMsgTo
    + +NetMsgType
    + +NetPlayerLocal
    + +NetPlayerName
    +New
    + +Next
    + +NextFile
    +Not
    + +Null
    +

    +O

    + + + + + + + + + + + + + + + + + + + +
    +Object
    + +OpenFile
    +OpenTCPStream
    +Or
    + +Origin
    + +Oval
    +

    +P

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +PauseChannel
    + +PeekByte
    + +PeekFloat
    + +PeekInt
    + +PeekShort
    +Pi
    + +PlayCDTrack
    + +PlayMusic
    + +PlaySound
    + +Plot
    + +PokeByte
    + +PokeFloat
    + +PokeInt
    + +PokeShort
    + +Print
    +

    +R

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +Rand
    + +Read
    + +ReadAvail
    + +ReadByte
    + +ReadBytes
    + +ReadDir
    + +ReadFile
    + +ReadFloat
    + +ReadInt
    + +ReadLine
    + +ReadPixel
    + +ReadPixelFast
    + +ReadShort
    + +ReadString
    + +Rect
    + +RectsOverlap
    + +RecvNetMsg
    + +Repeat
    + +Replace
    + +ResizeBank
    + +ResizeImage
    + +Restore
    + +ResumeChannel
    + +Return
    + +Right
    + +Rnd
    + +RotateImage
    + +RSet
    + +RuntimeError
    +

    +S

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +Sar
    + +SaveBuffer
    + +SaveImage
    + +ScaleImage
    + +Scanline
    + +SeedRnd
    + +SeekFile
    + +Select
    + +SetBuffer
    + +SetFont
    + +SetGfxDriver
    + +SetNetMsg
    + +Sgn
    +Shl
    + +ShowPointer
    +Shr
    + +Sin
    + +SoundPan
    + +SoundPitch
    + +SoundVolume
    + +Sqr
    + +StartNetGame
    + +Step
    + +Stop
    + +StopChannel
    + +StopNetGame
    +Str
    + +String
    + +StringHeight
    + +StringWidth
    +

    +T

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +Tan
    + +TCPTimeouts
    + +Text
    + +TFormFilter
    + +TFormImage
    + +Then
    + +TileBlock
    + +TileImage
    +To
    + +TotalVidMem
    + +Trim
    + +True
    + +Type
    +

    +U

    + + + + + + + + + + +
    + +UnlockBuffer
    + +Until
    + +Upper
    +

    +V

    + + + + + + + +
    + +Viewport
    + +VWait
    +

    +W

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +WaitJoy
    + +WaitKey
    + +WaitMouse
    + +WaitTimer
    + +Wend
    + +While
    + +Write
    + +WriteByte
    + +WriteBytes
    + +WriteFile
    + +WriteFloat
    + +WriteInt
    + +WriteLine
    + +WritePixel
    + +WritePixelFast
    + +WriteShort
    + +WriteString
    +

    X

    + + + + + + + +
    +Xor
     
    +
    +

    3D - A-Z

    +

    A

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +AddAnimSeq
    + +AddTriangle
    + +AddVertex
    + +AlignToVector
    + +AmbientLight
    + +Animate
    + +AnimateMD2
    + +Animating
    + +AnimLength
    + +AnimSeq
    + +AnimTime
    + +AntiAlias
    +

    +B

    + + + + + + + + + + + + + + + + + + + + +
    + +BrushAlpha
    + +BrushBlend
    + +BrushColor
    + +BrushFX
    + +BrushShininess
    + +BrushTexture
    +

    + +C

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +CameraClsColor
    + +CameraClsMode
    + +CameraFogColor
    + +CameraFogMode
    + +CameraFogRange
    + +CameraPick
    + +CameraProject
    + +CameraRange
    + +CameraViewport
    + +CameraZoom
    + +CaptureWorld
    + +ClearCollisions
    + +ClearSurface
    + +ClearTextureFilters
    + +ClearWorld
    + +CollisionEntity
    + +CollisionNX
    + +CollisionNY
    + +CollisionNZ
    + +Collisions
    + +CollisionSurface
    + +CollisionTime
    + +CollisionTriangle
    + +CollisionX
    + +CollisionY
    + +CollisionZ
    + +CopyEntity
    + +CountChildren
    + +CountCollisions
    + +CountSurfaces
    + +CountTriangles
    + +CountVertices
    + +CreateBrush
    + +CreateCamera
    + +CreateCone
    + +CreateCube
    + +CreateCylinder
    + +CreateLight
    + +CreateListener
    + +CreateMesh
    + +CreateMirror
    + +CreatePivot
    + +CreatePlane
    + +CreateSphere
    + +CreateSprite
    + +CreateSurface
    + +CreateTerrain
    + +CreateTexture
    + +

    +D

    + + + + + +
    + +Dither
    + +

    + +E

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +EmitSound
    + +EntityAlpha
    + +EntityAnimating
    + +EntityAnimTime
    + +EntityAutoFade
    + +EntityBlend
    + +EntityBox
    + +EntityCollided
    + +EntityColor
    + +EntityDistance
    + +EntityFX
    + +EntityInView
    + +EntityName
    + +EntityOrder
    + +EntityParent
    + +EntityPick
    + +EntityPickMode
    + +EntityPitch
    + +EntityRadius
    + +EntityRoll
    + +EntityShininess
    + +EntityTexture
    + +EntityType
    + +EntityVisible
    + +EntityX
    + +EntityY
    + +EntityYaw
    + +EntityZ
    + +

    + +F

    + + + + + + + + + + + + + + + + + + + + + + + +
    + +FindChild
    + +FindSurface
    + +FitMesh
    + +FlipMesh
    + +FreeBrush
    + +FreeEntity
    + +FreeTexture
    + +

    + +G

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +GetChild
    + +GetEntityType
    + +GetParent
    + +GetSurface
    + +GfxDriver3D
    + +GfxMode3D
    + +GfxModeExists
    + +Graphics3D
    + +

    + +H

    + + + + + + + + + + + +
    + +HandleSprite
    + +HideEntity
    + +HWMultiTex
    + +

    + +L

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +LightColor
    + +LightConeAngles
    + +LightMesh
    + +LightRange
    + +LinePick
    + +Load3DSound
    + +LoadAnimMesh
    + +LoadAnimSeq
    + +LoadAnimTexture
    + +LoadBrush
    + +LoaderMatrix
    + +LoadMD2
    + +LoadMesh
    + +LoadSprite
    + +LoadTerrain
    + +LoadTexture
    + +

    + +M

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +MD2Animating
    + +MD2AnimLength
    + +MD2AnimTime
    + +MeshesIntersect
    + +MeshDepth
    + +MeshHeight
    + +MeshWidth
    + +ModifyTerrain
    + +MoveEntity
    + +

    + +N

    + + + + + +
    + +NameEntity
    + +

    + +P

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +PaintEntity
    + +PaintMesh
    + +PaintSurface
    + +PickedEntity
    + +PickedNX
    + +PickedNY
    + +PickedNZ
    + +PickedSurface
    + +PickedTime
    + +PickedTriangle
    + +PickedX
    + +PickedY
    + +PickedZ
    + +PointEntity
    + +PositionEntity
    + +PositionMesh
    + +PositionTexture
    + +ProjectedX
    + +ProjectedY
    + +ProjectedZ
    + +

    + +R

    + + + + + + + + + + + + + + + + + + + + +
    + +RenderWorld
    + +ResetEntity
    + +RotateEntity
    + +RotateMesh
    + +RotateSprite
    + +RotateTexture
    + +

    + +S

    + + + + + + + + + + + + + + + + + + + + + + + +
    + +ScaleEntity
    + +ScaleMesh
    + +ScaleSprite
    + +ScaleTexture
    + +SetAnimKey
    + +ShowEntity
    + +SpriteViewMode
    + +

    + +T

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +TerrainDetail
    + +TerrainHeight
    + +TerrainShading
    + +TerrainSize
    + +TerrainX
    + +TerrainY
    + +TerrainZ
    + +TextureBlend
    + +TextureBuffer
    + +TextureCoords
    + +TextureFilter
    + +TextureHeight
    + +TextureWidth
    + +TFormedX
    + +TFormedY
    + +TFormedZ
    + +TFormNormal
    + +TFormPoint
    + +TFormVector
    + +TranslateEntity
    + +TriangleVertex
    + +TurnEntity
    + +

    + +U

    + + + + + + + + +
    + +UpdateNormals
    + +UpdateWorld
    + +

    + +V

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +VertexBlue
    + +VertexColor
    + +VertexCoords
    + +VertexGreen
    + +VertexNormal
    + +VertexNX
    + +VertexNY
    + +VertexNZ
    + +VertexRed
    + +VertexTexCoords
    + +VertexU
    + +VertexV
    + +VertexW
    + +VertexX
    + +VertexY
    + +VertexZ
    + +

    + +W

    + + + + + + + + + + + +
    + +WBuffer
    + +Windowed3D
    + +Wireframe
    + + + + \ No newline at end of file diff --git a/_release/help/commands/css/commands.css b/_release/help/commands/css/commands.css new file mode 100644 index 0000000..ef96bae --- /dev/null +++ b/_release/help/commands/css/commands.css @@ -0,0 +1,11 @@ +.Command { font-family: Verdana, Arial; font-size: small; font-weight: bold; color: #ffffff; background-color: #11AABB; border: solid; border-width: 0px 0px 0px 0pt; border-color: black black black #FFFFFF} + +body { font-family: Verdana, Arial; font-size: x-small; color: #000000; background-color: #005070} + +.header { font-family: Verdana, Arial; font-size: x-small; font-weight: bold; color: #00ff00} + +td { font-family: Verdana, Arial; font-size: x-small; color: #ffffff; background-color: #117799; border: solid; border-width: 0px 0px 0px 0pt; border-color: black black black #FFFFFF} + +a:link {color: #ffff00; text-decoration: none} +a:visited {color: #ffff00; text-decoration: none} +a:hover {color: #00ff00; text-decoration: underline} diff --git a/_release/help/commands/css/commands_old.css b/_release/help/commands/css/commands_old.css new file mode 100644 index 0000000..0b17de1 --- /dev/null +++ b/_release/help/commands/css/commands_old.css @@ -0,0 +1,5 @@ +.Command { font-family: Arial, Helvetica, sans-serif; font-size: 18px; color: #000000; background-color: #00CFFF; border: solid; border-width: 0px 0px 0px 0pt; border-color: black black black #FFFFFF} +body { font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000; background-color: #FFFFFF} +.header { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; color: #333333} +td { font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000; background-color: #DDDDDD; border-color: #333333 #FFFFFF #FFFFFF #333333; border-style: ridge; border-top-width: thin; border-right-width: thin; border-bottom-width: thin; border-left-width: thin} +a { font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: italic; font-weight: bold; color: #0099FF; text-decoration: underline} diff --git a/_release/help/commands/css/readme.txt b/_release/help/commands/css/readme.txt new file mode 100644 index 0000000..1202a43 --- /dev/null +++ b/_release/help/commands/css/readme.txt @@ -0,0 +1 @@ +To change the style of the command docs back to the old style, rename commands.css to something else and rename commands_old.css to commands.css \ No newline at end of file diff --git a/_release/help/commands/index.htm b/_release/help/commands/index.htm new file mode 100644 index 0000000..44a216c --- /dev/null +++ b/_release/help/commands/index.htm @@ -0,0 +1,22 @@ + + + + + +New Page 1 + + + + + + + + <body> + + <p>This page uses frames, but your browser doesn't support them.</p> + + </body> + + + + \ No newline at end of file diff --git a/_release/help/commands/scancodes.htm b/_release/help/commands/scancodes.htm new file mode 100644 index 0000000..b654be8 --- /dev/null +++ b/_release/help/commands/scancodes.htm @@ -0,0 +1,745 @@ + + + + + + + +Scanocdes + + + + + +

      Scancodes  

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KEYBOARD KEYSCANCODECOMMENTS
    ESCAPE1 
    12 
    23 
    34 
    45 
    56 
    67 
    78 
    89 
    910 
    011 
    Minus (-)12On Main Keyboard
    Equals (=)13 
    Backspace14Backspace key
    Tab15 
    Q16 
    W17 
    E18 
    R19 
    T20 
    Y21 
    U22 
    I23 
    O24 
    P25 
    Left Bracket ([)26 
    Right Bracket (])27 
    Return/Enter28Return/Enter on Main Keyboard
    Left Control29 
    A30 
    S31 
    D32 
    F33 
    G34 
    H35 
    J36 
    K37 
    L38 
    Semi-Colon (;)39 
    Apostrophe (')40 
    Grave41 Accent Grave
    Left Shift42 
    Backslash (\)43 
    Z44 
    X45 
    C46 
    V47 
    B48 
    N49 
    M50 
    Comma (,)51 
    Period (.)52On Main keyboard
    Slash (/)53On Main Keyboard
    Right Shift54 
    Multiply (*)55On Numeric Keypad
    Left Alt/Menu56 
    Space57 
    Capital58 
    F159 
    F260 
    F361 
    F462 
    F563 
    F664 
    F765 
    F866 
    F967 
    F1068 
    NumLock69 
    Scroll Lock70 
    NumPad 771 
    NumPad 872 
    NumPad 973 
    Subtract (-)74On Numeric Keypad
    NumPad 475 
    NumPad 576 
    NumPad 677 
    Add (+)78On Numeric Keypad
    NumPad 179 
    NumPad 280 
    NumPad 381 
    NumPad 082 
    Decimal (.)83On Numeric Keypad
    OEM_10286On UK/Germany Keyboards
    F1187 
    F1288 
    F13100(NEC PC98)
    F14101(NEC PC98)
    F15102(NEC PC98)
    Kana112Japanese Keyboard
    ABNT_C1115/? on Portugese (Brazilian) keyboards
    Convert121Japanese Keyboard
    NoConvert123Japanese Keyboard
    Yen125Japanese Keyboard
    ABNT_C2126Numpad . on Portugese (Brazilian) keyboards
    Equals141= on numeric keypad (NEC PC98)
    PrevTrack144Previous Track (DIK_CIRCUMFLEX on Japanese keyboard)
    AT145(NEC PC98)
    Colon (:)146(NEC PC98)
    Underline147(NEC PC98)
    Kanji148Japanese Keyboard
    Stop149(NEC PC98)
    AX150Japan AX
    Unlabeled151(J3100)
    Next Track153Next Track
    Enter156ENTER on Numeric Keypad
    Right Control157 
    Mute160Mute
    Calculator161Calculator
    Play/Pause162Play/Pause
    Media Stop164Media Stop
    Volume Down174Volume -
    Volume Up176Volume +
    Web Home178Web Home
    Comma (,)179On Numeric Keypad (NEX PC98)
    Divide (/)181On Numeric Keypad
    SysReq183 
    Right Alt/Menu184Right Alt
    Pause197Pause
    Home199Home on Arrow Pad
    Up200Up Arrow on Arrow Keypad
    Page Up/Prior201Page Up on Arrow Keypad
    Left203Left Arrow on Arrow Keypad
    Right205Right Arrow on Arrow Keypad
    End207End Key on Arrow Keypad
    Down208Down Key on Arrow Keypad
    Next209Next Key on Arrow Keypad
    Insert210Insert Key on Arrow Keypad
    Delete211Delete Key on Arrow Keypad
    Left Windows219Left Windows Key
    Right Windows220Right Windows Key
    Apps221Apps Menu Key
    Power222System Power
    Sleep223System Sleep
    Wake227System Wake
    Web Search229 
    Web Favorites230 
    Web Refresh231 
    Web Stop232 
    Web Forward233 
    Web Back234 
    My Computer235 
    Mail 236 
    Media Select237 
    + + + + \ No newline at end of file diff --git a/_release/help/credits.html b/_release/help/credits.html new file mode 100644 index 0000000..05a8536 --- /dev/null +++ b/_release/help/credits.html @@ -0,0 +1,49 @@ + + + + + +

    Blitz3D credits...

    + +Blitz3D was made possible by the contributions of many people - here are just a few:
    +
    +Programming and Design: Mark Sibly.
    +
    +Business and project management: George Bray, Giles Hunter and the team at Guildhall.
    +
    +Documentation: Simon Harrison, Shane Monroe, Paul Gerfen, James Boyd, George Bray, Simon Armstrong, Mark Sibly.
    +
    +Blitz3D Testers: Darren Hebden, Simon Armstrong, Simon Harrison, Robin Shackford, Rob Cummings, James L Boyd, Paul Gerfen, David Bird, Matt Grifith, Steve Smith, Adam Gore, Richard Betson, Rob Hutchinson, Floyd Moose, Mikkel Lokke, Chris Frieson, Rob Pearmain, Ian Thompson, Ed Upton, John Pickford, John McCubbin, Eric Stout, Mark Incitti, John Devoy, Adam Bossy, Dave, Warren Skaalrud, Keith Hill, Joshua Klint, Matt Burns, Jaime Araiza, Christian Perfect, Matt Davey, John Logsdon.
    +
    +Special thanks to: Claire, Mum, Simon, Donna, Rick and Kay.
    +
    + + \ No newline at end of file diff --git a/_release/help/index.html b/_release/help/index.html new file mode 100644 index 0000000..b401139 --- /dev/null +++ b/_release/help/index.html @@ -0,0 +1,66 @@ + + + + + + + + +

    Welcome To Blitz3D!

    + +To return to this page at any time, just click the 'home' icon in the toolbar.
    +
    +
    +
      +
    • Samples - a collection of 3D samples to whet your appetite!
      +
      +
    • 3D Tutorials - if you're already confident using Blitz Basic, check out these detailed tutorials.
      +
      +
    • Basic Tutorials - completely new to programming? These tutorials are just the place to start.
      +
      +
    • Command Reference - for the low down on the Blitz3D command set.
      +
      +
    • Language Reference - describes the Blitz programming language in detail.
      +
      +
    • Geometricks Models - a collection of 3D models kindly donated by Geometricks.
      +
      +
    • Games - a few small games written in Blitz3D
      +
      +
    • Credits - who did what...
      +
      +
    +
    +If you experience any problems running Blitz3D, please contact support@blitzbasic.com.
    +
    +Come and visit us at www.blitzbasic.com, for news, updates and a nice time in general!
    +
    + + diff --git a/_release/help/language/index.html b/_release/help/language/index.html new file mode 100644 index 0000000..63d5619 --- /dev/null +++ b/_release/help/language/index.html @@ -0,0 +1,17 @@ + +Blitz Basic Homepage + + + + + + + + + + + + + + + diff --git a/_release/help/language/lang_ref.css b/_release/help/language/lang_ref.css new file mode 100644 index 0000000..93e3add --- /dev/null +++ b/_release/help/language/lang_ref.css @@ -0,0 +1,67 @@ +.Command{ + font-family: Arial, Helvetica, sans-serif; + font-size: 18px; + color: #000000; + background-color: #00CFFF; + border: solid; + border-width: 0px 0px 0px 0pt; + border-color: black black black #FFFFFF +} + +body{ + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + color: #000000; + background-color: #ffffff; +} + +body.nav{ + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + color: #000000; + background-color: #0080a0; +} + +header{ + font-family: Arial, Helvetica, sans-serif; + font-size: 14px; + font-weight: bold; + color: #333333 +} + +td{ + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + color: #000000; + background-color: #DDDDDD; + border-color: #333333 #FFFFFF #FFFFFF #333333; + border-style: ridge; + border-top-width: thin; + border-right-width: thin; + border-bottom-width: thin; + border-left-width: thin +} + +a{ + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + font-weight: bold; + color: #ffff00; + text-decoration: none; +} + +a:hover{ + color: #00ff44; + text-decoration: underline; +} + +ul{ + color: #ffffff; + list-style-type: disc; + margin: 16px; +} + +h1{ + color: #ffffff; + font-size: 16px; +} \ No newline at end of file diff --git a/_release/help/language/lang_ref_arrays.html b/_release/help/language/lang_ref_arrays.html new file mode 100644 index 0000000..b1768a9 --- /dev/null +++ b/_release/help/language/lang_ref_arrays.html @@ -0,0 +1,43 @@ + + + + + +Language Reference - Arrays + + + +
     Arrays  +
    +

    Arrays are created using the standard BASIC 'Dim' statement, and may + be of any number of dimensions. For example:

    +
    +

    Dim arr(10)

    +
    +

    Creates a one dimensional array called 'arr' with 11 elements numbered 0...10.
    +

    +

    Arrays may be of any basic type, or a custom type.
    +
    + The type of an array is specified using a type tag. For example:

    +
    +

    Dim Deltas#(100)

    +
    +

    Creates an array called 'Deltas' of 101 floating point elements.

    +

    If the type tag is omitted, the array defaults to an integer array.

    +

    An array may be dimensioned at more than one point in a program, each time + an array is dimensioned, it's previous contents are discarded. Arrays may + be dimensioned inside functions, but a corresponding 'Dim' statement of the + same array must also appear somewhere in the main program. For example:

    +
    +

    Dim test(0,0)

    +

    Function Setup( x,y )

    +
    +

    Dim test(x,y)

    +
    +

    End Function

    +
    +
    + + \ No newline at end of file diff --git a/_release/help/language/lang_ref_basicdatatypes.html b/_release/help/language/lang_ref_basicdatatypes.html new file mode 100644 index 0000000..f5539f0 --- /dev/null +++ b/_release/help/language/lang_ref_basicdatatypes.html @@ -0,0 +1,30 @@ + + + + + +Language Reference- Basic Data Types + + + +
     Basic Data Types  +
    +

    There are 3 basic data types:

    +
    +

    Integer values are numeric values with no fractional part in them. + For example: 5,-10,0 are integer values. All integer values in your program + must be in the range -2147483648 to +2147483647.
    +

    +

    Floating point values are numeric values that include a fractional + part. For example: .5, -10.1, 0.0 are all floating point values.
    +

    +

    Strings values are used to contain text. For example: "Hello", "What's + up?", "***** GAME OVER *****", ""

    +
    +

    Typically, integer values are faster than floating point values, which are + themselves faster than strings.

    +
    + + \ No newline at end of file diff --git a/_release/help/language/lang_ref_comments.html b/_release/help/language/lang_ref_comments.html new file mode 100644 index 0000000..e27ec7f --- /dev/null +++ b/_release/help/language/lang_ref_comments.html @@ -0,0 +1,48 @@ + + + + + +Language Reference - Comments + + + +
     Comments  +
    +

    You add comments to your programs using the ';' character. Everything following + the ';' until the end of the line will be ignored, this is useful for commenting + your code - so you can always look through and follow each line in a logical + manner.

    +

    The following code shows comments in use;

    +
    + + + + + +
    +

    + ; Begin the Redraw Function
    + Function Redraw()
    + ...
    + End Function
    +
    +
    +

    This code also shows a legal use of comments;

    +
    + + + + +
    +

    + Function Redraw() ; Begin the Redraw Function
    + ...
    + End Function
    +
    +


    +

    + + \ No newline at end of file diff --git a/_release/help/language/lang_ref_constants.html b/_release/help/language/lang_ref_constants.html new file mode 100644 index 0000000..a14bfe0 --- /dev/null +++ b/_release/help/language/lang_ref_constants.html @@ -0,0 +1,61 @@ + + + + + +Language Reference - Constants + + + +
     Constants  +
    +

    Constants may be of any basic data type. Constants are variables that have + fixed values that will not change (ever) during the course of your program. + These are useful tools for things like screen resolution variables, etc.

    +

    Floating point constants must include a decimal point.

    +

    For example:

    +
    +

    +

    +
    '5' is an integer constant, but '5.0' is a floating point constant. +
    +

    String constants must be surrounded by quotation marks, for example:

    +
    +

    +

    +

    +
    "This is a string constant".
    +

    The 'Const' keyword is used to assign an identifier to a constant. + For example:

    +
    +

    +

    +

    +
    Const one_hundred=100
    +

    You can then use the identifier 'one_hundred' anywhere in your program instead + of '100'.

    +
    +

    +

    +

    A more useful example might be:

    +
    + +

    +

    +
    +Const width=640,height=480
    + +

    You can then use the more readable 'width' and 'height' throughout + your program instead of '640' and '480'.

    +

    Also, if you ever decide to change the width and height values, you only + have to do so at one place in the program.
    +

    +

    There are two built-in Integer constants - 'true' and 'false'. 'true' + is equal to 1, and 'false' is equal to 0.

    +

    There is also a built in floating point constant for Pi.

    +

     

    +
    + + \ No newline at end of file diff --git a/_release/help/language/lang_ref_customtypes.html b/_release/help/language/lang_ref_customtypes.html new file mode 100644 index 0000000..5202da5 --- /dev/null +++ b/_release/help/language/lang_ref_customtypes.html @@ -0,0 +1,189 @@ + + + + + +Language Reference - Custom Types + + + +
     Custom Types  +
    +

    Introduction - What Are They?

    +

    TYPE is your best friend. It is used to create a 'collection' of objects + that share the same parameters and need to be interated through quickly and + easily.

    +

    Think about SPACE INVADERS. There are many aliens on the screen at one time. + Each of these aliens have a few variables that they all need: x and y coordinates + plus a variable to control which graphic to display (legs out or legs in). + Now, we could make hundreds of variables like invader1x, invader1y, invader2x, + invader2y, etc. to control all the aliens, but that wouldn't make much sense + would it? You could use an array to track them; invader(number,x,y,graphic), + and the loop through them with a FOR ... NEXT loop but that is a lot of work! + The TYPE variable collection was created to handle just this sort of need.

    +

    TYPE defines an object collection. Each object in that collection inherits + its own copy of the variables defined by the TYPE's FIELD command. Each variable + of each object in the collection can be read individually and can be easily + iterated through quickly. Use the FIELD command to assign the variables you + want between the TYPE and END TYPE commands.

    +

    If it helps, think of a TYPE collection as a database. Each object is a record + of the database, and every variable is a field of the record. Using commands + like BEFORE, AFTER, and FOR ... EACH, you can move change the pointer of the + 'database' to point to a different record and retrieve/set the variable 'field' + values.

    +

    Not a database guru? Need another example? Okay. Let's say you are setting + up an auditorium for a speech or event and you are putting up hundreds of + chairs for the spectators. The chairs have to be in a certain place on the + floor, and some will need to be raised up a bit higher than others (visiting + dignitaries, the mayor is coming, etc.). So being the computer genius you + are, you start figuring out how you can layout the chairs with the least amount + of effort. You realize that the floor is checkered, so its really a huge grid! + This will make it easy! You just need to number the floor on a piece of graph + paper and put into the grid how high each chair should be, based on where + the boss told you the important people are to sit. So, for each chair, you + will have a row and column on the graph paper (x and y location) and a level + to adjust the chair to (height). Good, we are organized. Now, even though + we have it all on paper, we still have to do the work of placing all the chairs. + After you are done, let's say your boss walks up to you and says "they + aren't centered right .. move'em all over 1 square". Ah crap! You have + them all perfect, and even though it is a simple thing to move a chair one + square to the right (after all, their order and height won't change) - you + still have to move each and every chair! Should would be nice if you could + just wave your hand and say "For each chair in the room, add 1 square + to its x location" and have it just magically happen. Alas, in the real + world, get busy - you've got a lot of chairs to move!

    +

    In Blitz, you could have set up a TYPE called CHAIR, set the TYPE's FIELDS + as X, Y, and HEIGHT. You would then create as many chairs as you need with + the NEW command (each time you call NEW, it makes a new chair, with its OWN + X, Y, and HEIGHT variables) and assign them the X, Y, and HEIGHT values you + decide upon.

    +

    In our example above, when the boss told you to move the chairs over 1 box, + you probably groaned inside. That's a lot of work! In Blitz, we could use + four lines of code to adjust all our CHAIR objects to the new position (using + FOR ... EACH commands).

    +

    Defining A Type

    +

    Custom types are defined using the 'Type' keyword. For example:

    +
    Type MyType
    + Field x,y
    + End Type
    +

    Creates a custom type called 'MyType' with 2 fields - x and y.
    +

    +

    Fields within a custom type may themselves be of any basic type or custom + type. Type tags are used to determine the type of a field. For example:

    +
    +

    Type MyType
    + Field x,y
    + Field description$
    + Field delta_x#,delta_y#
    + End Type

    +
    +

    Creating a Type Instance

    +

    You can create variables or arrays of custom types using a '.' type tag followed + by the type name. For example:

    +
    +

    Global mine.MyType Dim all_mine.MyType( 100 )

    +
    +

    Before a custom type variable or array element can be used, it must be initialized + using the 'New' operator. For example:

    +
    +

    mine.MyType=New MyType

    +
    +

    The 'New' operator creates an 'object' of type 'MyType', and returns a 'pointer' + to the new object. The identifier following the 'New' operator must be a valid + custom type name.

    +

    The fields within a custom type are accessed using the '\' character. For + example: mine\x=100 Print mine\x

    +

    Destroying a Type Instance

    +

    When you've finished with an object, you should delete it using the 'Delete' + command. For example:

    +
    +

    Delete mine

    +
    +

    This releases the memory used by the object.

    +

    Determining Existance

    +

    The special keyword 'Null' is used to represent non-existent objects. An + object is non-existent if it hasn't been initialized yet using 'New', or has + been released using 'Delete'. For example:

    +
    +

    mine.MyType=New MyType
    + If mine<>Null
    +      Print "exists!"
    + Else
    +      Print "doesn't exist!"
    + EndIf
    + Delete mine
    + If mine<>Null
    +      Print "exists!"
    + Else
    +      Print "doesn't exist!"
    + EndIf

    +
    +

    ...will print the following:

    +
    exists!
    + doesn't exist!
    +

    Each custom type has an associated list of objects known as a 'type list'. + When an object is created using 'New', it is automatically added to the type + list. When an object is released using 'Delete', it is removed from the type + list. This list is dynamic - once an instance has been deleted, its place + in the collection is deleted and all the other objects after it will 'move + up' in the collection hiearchy.

    +

    Iteration Through Type Lists

    +

    The 'First', 'Last', 'After' and 'Before' operators allow you to access + type lists. The 'First' operator returns the object at the start of the type + list. For example:

    +
    mine.MyType=First MyType
    +

    This sets the 'mine.MyType' variable to the first object of custom type + 'MyType'.

    +

    Similarly, 'Last' returns the object at the end of the list.

    +

    If the type list is empty, 'First' and 'Last' return 'Null'.

    +

    You can use 'After' to find the object after an object, and 'Before' to + find the object before an object.
    +
    + For example:

    +
    +

    mine.MyType=First MyType ;mine=first object in the type list
    + mine=After( mine ) ;mine=second object
    + mine=After( mine ) ;mine=third object
    + mine=Before( mine ) ;mine=second object
    + mine=Before( mine ) ;mine=first again!

    +
    +

    'After' and 'Before' return 'Null' if there is no such object. For example: +

    +
    +

    mine.MyType=Last MyType ;mine=last object
    + mine=After( mine ) ;object after last does not exist!

    +
    +

    When an object is created using 'New', it is placed at the end of it's type + list by default.
    + However, You can move objects around within the type list using Insert. For + example:

    +
    +

    mine1.MyType=New MyType
    + mine2.MyType=New MyType
    + Insert mine2 Before mine1

    +
    +

    This has the effect of placing the 'mine2' object before the 'mine1' object + in the type list.
    + You can also use 'After' instead of 'Before' with Insert.

    +

    Here's an example of moving an object to the start of it's type list:

    +
    +

    Insert mine Before First MyType

    +
    +

    A special form of For...Next allows you to easily iterate over all + object of a custom type. For example:

    +
    +

    For mine.MyType=Each MyType
    + Next

    +
    +

    This will cause the variable 'mine.MyType' to loop through all existing objects + of cutom type MyType.

    +

    Finally, the 'Delete Each' command allows you to delete all objects of a + particular type. For example:

    +
    +

    Delete Each MyType

    +
    +
    + + \ No newline at end of file diff --git a/_release/help/language/lang_ref_expressions.html b/_release/help/language/lang_ref_expressions.html new file mode 100644 index 0000000..a25ddc3 --- /dev/null +++ b/_release/help/language/lang_ref_expressions.html @@ -0,0 +1,139 @@ + + + + + +Language Reference - Expressions and Conversions + + + +
     Expressions and Conversions  +
    +

    The following operators are supported, listed in order of precedence:

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    +

    New,First,Last

    +
    custom type operators (unary)
    +

    +

    Before,After

    +
    object operators (unary)
    +

    +

    Int,Float,Str

    +
    type conversion operators (unary)
    +

    +

    +,-,~

    +
    arithmetic posate(?), negate, bitwise complement (unary)
    ^arithmetic 'to-the-power-of' (binary)
    *,/,Modarithmetic multiply, divide, remainder (binary)
    +

    +

    Shl,Shr,Sar

    +
    bitwise shift operators (binary)
    +

    +

    +,-

    +
    arithmetic add, subtract (binary)
    +

    +

    <,>,<=,>=,=,<>

    +
    comparison operators (binary)
    +

    +

    And,Or,Xor

    +
    bitwise And, Or and Exclusive Or (binary)
    Not +

    +

    logical Not (unary)

    +
    +

    +

    +

    +

    Unary operators take one operand, while binary operators take two.

    +

    Arithmetic operators produce a result of the same type as the operands. + For example, adding two integers produces an integer result.

    +

    If the operands of a binary arithmetic or comparison operator are not of + the same type, one of the operands is converted using the following rules: +

    +
    +

    - If one operand is a custom type object, the other must be an object of + the same type, or 'Null'.
    +

    +
    +

    Else if one operand is a string, the other is converted to a string. +
    +

    +

    Else if one operand is floating point, the other is converted to floating + point.
    +

    +

    Else both operands must be integers.

    +
    +
    +
    +
    +

    When floating point values are converted to integer, the value is rounded + to the nearest integer. When integers and floating point values are converted + to strings, an ascii representation of the value is produced.

    +

    When strings are converted to integer or floating point values, the string + is assumed to contain an ascii representation of a numeric value and converted + accordingly. Conversion stops at the first non-numeric character in the string, + or at the end of the string.

    +

    The only arithmetic operation allowed on string is '+', which simply concatenates + the two operands.

    +

    Int, Float and Str can be used to convert values. They may be optionally + followed by the appropriate type tag - ie: 'Int%', 'Str$' and 'Float#'.

    +

    Comparison operators always produce an integer result: 1 for true, 0 for + false.

    +

    If one of the operators is a custom type object, the other must be an object + of the same type, or 'Null', and the only comparisons allowed are '=' and + '<>'.

    +

    Bitwise and logical operators always convert their operands to integers and + produce an integer result.

    +

    The Not operator returns 0 for a non-zero operand, otherwise 1. When an expression + is used to conditionally execute code - for example, in an 'If' statement + - the result is converted to an integer value. A non-zero result means true, + a zero result means false.

    +

     

    +
    + + \ No newline at end of file diff --git a/_release/help/language/lang_ref_functions.html b/_release/help/language/lang_ref_functions.html new file mode 100644 index 0000000..dbd60fe --- /dev/null +++ b/_release/help/language/lang_ref_functions.html @@ -0,0 +1,35 @@ + + + + + +Language Reference - Functions + + + +
     Functions  +
    +

    A function is defined using the 'Function' keyword:

    +
    +

    Function {funcname}{typetag}( {params} )
    +      {statements}
    + End Function

    +

    {funcname} is any valid identifier.

    +

    {typetag} is the type of value returned by the function. If {typetag} + is omitted, the function returns an integer value by default.

    +

    {params} is a comma separated list of variables which is passed + to the function when it is called, each parameter may be given an optional + type tag. Parameters are always local.

    +
    +

    A function may use the 'Return' statement to return a result. Return + may optionally be followed by an expression.

    +

    If there is no Return statement, or a Return without any expression is used, + the function returns a default value of 0 for numeric functions, an empty + string ("") for string functions, or a 'Null' object for custom type functions. +

    +

     

    +
    + + \ No newline at end of file diff --git a/_release/help/language/lang_ref_identifiers.html b/_release/help/language/lang_ref_identifiers.html new file mode 100644 index 0000000..0956cf0 --- /dev/null +++ b/_release/help/language/lang_ref_identifiers.html @@ -0,0 +1,54 @@ + + + + + +Language Reference - Identifiers + + + + +
     Identifiers  +
    +

    Identifiers are used for constant names, variable names, array names, function + names and custom type names.
    +

    +

    Identifiers must start with an alphabetic character, and may be following + be any number of alphanumeric characters, or the underscore ('_') character. +

    +

    These are all valid identifiers:

    +
    + + + + + +
    + +
    + +
    +

    - Hello

    +

    - Score

    +

    - player1

    +

    - time_to_live

    +

    - t__

    +
    +
    +

      +

    +

    Indentifiers are not case sensitive.
    +

    +

    For example, 'Test', 'TEST' and 'test' are all the same identifiers.
    +

    +

    However, it is allowed for identifiers to be reused for functions and custom + types names.
    +

    +

    For example, you can have a variable called 'test', a function called 'test' + and custom type name called 'test'. Blitz will be able to tell which one you + are refering to by the context in which it is used.

    +
    + + \ No newline at end of file diff --git a/_release/help/language/lang_ref_intro.html b/_release/help/language/lang_ref_intro.html new file mode 100644 index 0000000..9de7b86 --- /dev/null +++ b/_release/help/language/lang_ref_intro.html @@ -0,0 +1,22 @@ + + + Language Reference - Introduction + + + + + + +
     Introduction  +
    +

    This section describes the Blitz Basic language in detail. Covering all + the commands needed to help you progress further with your own creations. +

    +

    Please experiment because practice is essential for you to ascertain the + benefits from each command. As always, it is always useful to see what others + have done with thir programs and try to learn from existing code and tutorials.

    +
    + + + \ No newline at end of file diff --git a/_release/help/language/lang_ref_keywords.html b/_release/help/language/lang_ref_keywords.html new file mode 100644 index 0000000..89ae52b --- /dev/null +++ b/_release/help/language/lang_ref_keywords.html @@ -0,0 +1,33 @@ + + + + +Language Reference - Keywords + + + + +
     Keywords  +
    +

    The following keywords are built into Blitz, and may not be used as identifiers + (variables, function names, labels, etc.):
    +

    +
    + + + + +
    +

    + After, And, Before, Case, Const, Data, Default, Delete, Dim, Each, Else, + ElseIf, End, EndIf, Exit, False, Field, First, Float, For, Forever, Function, + Global, Gosub, Goto, If, Insert, Int, Last, Local, Mod, New, Next, Not, + Null, Or, Pi, Read, Repeat, Restore, Return, Sar, Select, Shl, Shr, Step, + Str, Then, To, True, Type, Until, Wend, While, Xor, Include
    +
    +

     

    +

    .

    + + \ No newline at end of file diff --git a/_release/help/language/lang_ref_programflow.html b/_release/help/language/lang_ref_programflow.html new file mode 100644 index 0000000..69ad82b --- /dev/null +++ b/_release/help/language/lang_ref_programflow.html @@ -0,0 +1,119 @@ + + + + + +Language Reference - Program Flow + + + +
     Program Flow  +
    +

    The following constructs are available for controlling program flow.

    +

    If ... Then

    +
    If {expression} Then {statements1} Else {statements2}
    +
    +

    +

    +

    Evaluates the 'If' expression and, if true, executes the 'Then' statements. + If false, the 'Else' statement are executed, the 'Else' part is optional - + statements are executed until the end of the line.

    +
    +

    If {expression1}
    +      {statements1}
    + Else If {expression2}
    +      {statements2}
    + Else If {expression3}
    +      {statements3}
    + Else
    +      {statements4}
    + EndIf

    +
    +

    This form of the If statement allows for more than one line of statements. + The 'Else If' and 'Else' parts are optional. The 'Else' part is executed only + if none of the 'If' or 'Else If' expressions were true.

    +

    While ... Wend

    +
    +

    +

    +

    +
    +

    While {expression}
    +      {statements}
    + Wend

    +
    +

    A While loop continues executing until {expression} evaluates to false. + {expression} is evaluated at the start of each loop.

    +

    For ... Next

    +
    +

    For {variable}={initalvalue} To {finalvalue} Step {step}
    +      {statements}
    + Next

    +
    +

    A For/Next loop first assigns {initialvalue} to {variable} and then starts + looping. The loop continues until {variable} reaches {finalvalue} and then + terminates. Each loop, the value {step} is added to {variable}. If a step + value is omitted, a default value of 1 is used.

    +
    +

    For {variable}=Each {typename}
    +      {statements}
    + Next

    +
    +

    This form of the For/Next loop allows you to iterate over all objects of + a custom type.

    +

    Repeat ... Until/Forever

    +
    +

    +

    +
    +

    Repeat
    +      {statements}
    + Until {expression}

    +
    +

    A Repeat loop continues executing until {expression} evaluates to true. + {expression} is evaluated at the end of each loop.

    +
    +

    Repeat
    +      {statements}
    + Forever

    +
    +

    A Repeat/Forever loop simply executes {statements} until the program ends, + or an 'Exit' command is executed.

    +

    Select ... Case

    +
    +

    +

    +

    +
    +

    Select {expression}
    +      Case {expressions1}
    +           {statements1}
    +      Case {expressions2}
    +           {statements2}
    +      Default
    +           {statements3}
    + End Select

    +
    +

    First the 'Select' expression is evaluated. It is then compared with each + of the 'Case' expression lists. If it matches a 'Case', then the statements + in the 'Case' are executed.

    +

    If the 'Select' expression matches none of the 'Case' expressions, the statements + in the optional 'Default' section are executed.

    +

    Breaking Out Of A Loop

    +

    The 'Exit' command may be used to break out of any For...Next, While...Wend, + Repeat...Until or Repeat...Forever loop.

    +

    Using Includes

    +

    Blitz also supports the 'Include' command. Include allows source code from + an external file to be compiled as if it were part of the main program. Include + must be followed by a quote enclosed filename. For example...

    +
    +

    +

    +

    Include "anotherfile.bb" +

    Include allows you to break your program up into smaller, more manageable + chunks.

    +
    + + \ No newline at end of file diff --git a/_release/help/language/lang_ref_variables.html b/_release/help/language/lang_ref_variables.html new file mode 100644 index 0000000..c312093 --- /dev/null +++ b/_release/help/language/lang_ref_variables.html @@ -0,0 +1,110 @@ + + + + + +Language Reference - Variables + + + +
     Variables 
    +
    +

    Variables may be of any basic data type, or a custom type. A variable's type + is determined by a special character that follows its identifier.
    +
    + Variable Types

    +
    +

    These special characters are called 'type tags' and are:

    +
    +
    + + + + + +
    + +

    +

    % = For integer variables

    +

    # = For floating point variables

    +

    $ = For string variables

    +

    .{typename} For custom type variables

    +
    + +
    +
    +
    +

    Here are some examples of valid variables:

    +
    +
    + + + + + +
    +


    +

    +
    +

    Score%

    +

    Lives%

    +

    x_speed#

    +

    y_speed#

    +

    name$

    +

    title$

    +

    ali.Alien

    +

    player.Player

    +
    +
    + +
    +
    +

    The type tag only needs to be added the first time you use a variable, + after that you can leave the type tag off if you wish.
    +
    + If you don't supply a type tag the first time a variable is used, the variable + defaults to an integer.
    +

    +

    It is illegal to use the same variable name with a different type. For + example, if you already have an integer variable called 'name%', it is illegal + to also have a string variable called 'name$'
    +

    +
    +

    Setting Variables

    +
    +

    The '=' keyword is used to assign a value to a variable. For example:

    +
    +

    score%=0

    +
    +

    ... assigns the value '0' to the integer variable 'score'.

    +
    +

    Variable Scope
    +

    +
    +

    Variables may also be either 'global', or 'local'. This refers + to where in a program a variable may be used.

    +
    +

    - Global variables can be used from anywhere in the program.
    +
    + - Local variables can only be used within the function they are + created in.

    +
    +

    The 'Global' keyword is used to define one or more global variables. + For example:

    +
    +

    Global Score=0,Lives=3,Player_up=1

    +
    +

    ... defines 3 global variables.

    +

    Similarly, 'Local' is used to define local variables:

    +
    +

    Local temp_x=x,temp_y=y

    +
    +

    If you use a variable without defining it as either local or global, it + defaults to being local.

    +
    +
    + + \ No newline at end of file diff --git a/_release/help/language/navbar.html b/_release/help/language/navbar.html new file mode 100644 index 0000000..6542f6a --- /dev/null +++ b/_release/help/language/navbar.html @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/_release/help/language/title.html b/_release/help/language/title.html new file mode 100644 index 0000000..41bc3f6 --- /dev/null +++ b/_release/help/language/title.html @@ -0,0 +1,10 @@ + + + + +
    +

    Blitz Basic Language Reference

    +
    + + + \ No newline at end of file

    2D - Category
    +3D - Category

JCVwJ1vIRUGPa5pcjZw6 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%0DJ!0D!=rJ?0E(FA`1|!V+g+P0q#bWwM_#>AZESFB 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 literal 0 HcmV?d00001 diff --git a/_release/help/commands/3d_examples/media/b3dlogo.jpg b/_release/help/commands/3d_examples/media/b3dlogo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d3e54c53862777065399c0cf857ed515a579fe9d GIT binary patch literal 15753 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 -t85HLp%@t2sSGZO8zU09XN( z=iU?m0swVhM@P}m0Hi|c9zastb`XA?i*#3k1cSZkNf5AW0AG>99lh^RB zHNQuQOp0ub#Q1^v&{4;a-1LysmiKlvS{=oD-k-CWhs&z@Fiw)4XzAX&kJ!AmU0ChHK0y$U5sCC9iV1N zS}bjAN~(ysG$-Wq(Bc(LR7uQe#=*_ zUmYg^lmVjw2==>Ron`*2ig> zLcXGe>XKsh_q{JRWt&nf3)ahiOR)S*Zjg^4aD$xk+@0=g3U)EpfkM)1- z<5zeF0SkXQWdzF#4lO7dZY^w=4+8;k0Av8qqs%MQZMfSK06RK=9S^|#A4!Dd(goAq zcl#o_Lp=c8fqAl_lK(LP;K2|6{|I~Uhh59+TKD^HpKLXWN!&Z}q-czZF;Szj5PJg) zD#nhA3Zj6DASlv{pfm+RQ4v%+NEhk7v*^thjRk9BEIa2fIM+4iyr1WJzqPV+pOZz| zDy;8)$DCu1Ip&;i@^v($1gQ3t8Wb#$FD-Mwo&PESY5oz*X8KS0pZpL05dcB}z61I( z|9sIaMe-8ox|4;gd{C5+pz`pUX4gV4W zdK!o#R|4=)&wHUBKo7uYM>Q!T0l)|V3-GtaL&609EBLRjYc>8<{&kL5``F~~ol}cN zB0%~jenS@cPi2_NFxvmhe?-D)Ac4O{KS1CqYL%u{owKD0kX0HI02qL;vVV_KrMP02 zc9Zz$$0?f{#Z;;&XaGe(>wqrGB>*S_R1H8Mz>%PoA*$&Zl=3QT>(+{HlTVKbP$7UK zAOS$n&MXE>D6kfwDHs9xUyMrM{RFv06vf6r+CCwGS6j+U+b`(*Z}Cd9J+KE%J)!(M z_7uqV(7 zc{F!xtI!noB|Yil|SNDdxsvXxd+fMviw zOo&V)V#yJ90RsO_0`c3E0XPRRT2K+8`MtTkEb`w<`G4tUS4{Xv00;s2*0;XR`_?zV z5%sUq|JB+4(a!(o{^35=_a~8={oyMSEf%}`K*<6j-HGC>xqN`X%nfpXEiakxNAf8O z3FUhhf=^NZZ1=;g+Sy<3kLouv|L^|p@4^7Uzu#KYmZfWL`rQvVMnb*iQ)sPaYxAd+$+`!8TfQ33Jr)nYL4D*gliSAsm=E3MjV8bHxr%?`yb ziv5$L1b~0g{{-v+2?5m*Oaw5Zq*F&wAqG^LK`lW4*C*rXv6%Ky)ZFQQ`k^?)~-FkIw(WKm7m3n{VB4hXmmM z2fy)+Z+?p>{4xKc{@rxLb=m$sQU9v^JNbL^IH4-v;!qXM3;XTktkXw_+>gjd)t}TK zhMXEXRCy;4n58t0<25O-Mtn^ktsw{fF_P5Ex3vAq{((QqAJ7B+ye0grc@-C{^K9!L zl)qm>fqxz&0N-y5fT!C5*!&fE0Mi==R7(18s5AmB-fp|KyFPWyz<;YQVgD)qkBf%f zHzQGvM}|N%UCIA5{2hDi06KzRWLC&a1So^ysCPtv$UpE8{*3{EpZ{p}Ap92?0$-SZnTU$(%l5%Ak>K-Eq@Mf9I__BrRFmeVZ1{EDlty87y?dKr!ppr&A1 zg;5Vi5Mmq-5Qb+Bpvgly4-iuUj5!aF#;5=^hHJ?S`@aiXr;Ltz2%-ux!2=3l09aHH zVGo24UJ)GWjYWWc00Mws=Gyqr`VtQQY@GkExsLun4Zu6@y8GVy?tg#?zG}|( zvDHEll`MjQ#!dGDIkhuI00RK|zXx|Rwg(MpSMZSXfwdtZzvV)|wSQiK@1K$Siz^TW zT}m<(zCuEZd?yLE*{1em79!$}tJsJ_Dx=G6x0S!{czu4LKSMqN{~2f6^Ef{P0;{2Fh852>-a5o(-SxC8(s0DPY6yq58N&@p-%0ATTz#n;wS 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