Adding to Litdev's comment "do all the main work in the main program loop - and just use events to set control flag variables" you need to also do the following. In your main program loop, don't ever directly use the flags set in events, unless you only look at them once in the loop path. Make a copy first in the main loop, then use that copy until the end of the loop. Then again grab a new copy back at the top.
This prevents you from having whacky problems assuming the flag won't change on you in the main loop. Somethign that should be brought up in the tutorial documentation, if it isn't already.
This thread is a continuation from:Thursday, April 01, 2010 8:36 PM
I got the 3-d bug and made a game starting point, import http://smallbasic.com/program/?QSW885
The coordinate system it uses should be the easiest for people to understand. If you're facing north then looking down, X is positive to your right, and Y is positive to the north, like textbook cartesian coordinates. Z is altitude, positive going up to the sky. Camera attitude is just like an airplane heading-pitch-roll. It was a bit of a pain to get it like this, so my pain is your gain! Please use for your next 3-d project.
I think some fairly interesting games could be made with this, even ground based games like first-person shooters. You could replace the plotted points with images, though you'll have to scale & possibly rotate them to look somewhat decent. I'm working on my next project...Thursday, April 08, 2010 9:36 PM
Hi. I Updated Small Basic Tetris to V 5.1.
Link to my program:
It was too big for small basic server.(This Program needs FC and Spawn extensions)
Sorry My Bad EnglishSunday, April 18, 2010 6:00 AM
Alex, congratulations. You're on this week's Small Basic blog. http://blogs.msdn.com/smallbasic/
Thanks for your congratulations. I hope another my programms will be on this site very soon.
Now I am studying Small Basic with my daddy. But it is not enough materials for children education. My daddy try to create a studying book for me, because I am not very good in English yet.Monday, April 26, 2010 8:33 PM
Awesome game program you have created!
I programmed Towers of Hanoi in Applesoft Basic back in 1983, in my teen age years. Yours is better looking and the only sound I had was a beep if you placed a large disk on a smaller on, and then a lot of beeps when you win.
Interesting that you used Stack.Push - I need to look into what Stack.Push does that using a variable doesn't.
The program code is very good, and the fact that you are 9 makes it exceptional (at least in my humble opion).
One small suggestion is to make comments in your code so that; 1. you can remember what you were doing in any part of your code, and 2. so other people can know what you were doing.
With your commenting include the program name and version, and give yourself credit, at the beginning.Monday, May 03, 2010 7:51 PM
Several months have passed since I used Smallbasic for writing SOkoCUTE. This time I provide you a little Picture-Shuffle-Game, called CRACKERS. I really did it in no-time (Smallbasic is awesome guys).
And, btw, I finally corrected the few mistakes in SOkoCUTE. A few stages weren't playable without modifying the source. LINK --> SOkoCUTE-Source
PS: Unfortunately Silverlight seems to have some problems with the windows size in crackers (its scaled I guess) an so the "GO"-button wont be appear in the center of the windowTuesday, June 08, 2010 9:07 PM
This program draws the typical "Hello world" with the shadow on the graphics window.
import code : TTR427Sunday, June 13, 2010 7:06 AM
K-Pad Text Editor v0.9
Import code: CLQ920
A simple text editor.
Requires SB 0.9, FC's extension and Speech extension (opitional, if you don't have, just delete the line 28)
|"| /"/|"""\ /"""\|"| |__ __| /\ |"""\ |"| | |/ / | " / | | || | | | / \ | |\ \ | | | |\ \ | | \ | | || |__ | | / \ | | \ \| | |_| \_\|_|\_\\___/|____| |_| /_/""\_\|_| \___|
Tuesday, June 15, 2010 11:52 PM
- Edited by Kroltan Monday, June 21, 2010 8:40 PM UPDATED
I began converting one of my "Life" programs to Small Basic a few days ago. Written in another "beginners" programming language it uses a colony of 340 x 180 cells and runs at 10 generations a second. After an hour or so Small Basic hadn't even filled the array, let alone started working.
Arrays really do need some attention, they're far to slow and are implemented in a very odd way. Some custom data types would be nice too, like Pascal's records.Wednesday, June 23, 2010 7:52 AM
We don't have "record" support in Small Basic. Probably never will (it is a conscious decision to keep concept count low).
A workaround (ugly, I admit) is to use three single dimensional arrays that have 61200 (340*180) items. And use (row*340 + column) as index to access the value.Wednesday, June 23, 2010 3:34 PMModerator
My second program in Small Basic. Yet another Game of Life, BUT in 3D . included is an rotation, but it didn´t work well, so i excluded it. if you want to try the rotation you only had to change one number in the code.
its very slow with silverlight in the web so import: RRP679
Thursday, July 08, 2010 6:02 PM
Here is a dump program. I wrote this program to confirm how to know EOF (end of file).
Before running this program, please remove single quotation in line 8.
Because the system has been commented out File.ReadContents() operation.Wednesday, July 21, 2010 9:32 AMModerator
Here is a program to help create screen layouts for your programs. Import ID is MZF016. As of right now, it only supports setting buttons, text boxes, and text Shapes (Labels) to the GraphicsWindow. I'm hoping to add more features in later versions. :) For now, all information about the screen layout is written to an array which is then saved to file.
The array looks like this:
Objs["GraphicsWindow"]["Title"] ' GraphicWindow's Title Objs["GraphicsWindow"]["Width"] ' Width of GraphicsWindow Objs["GraphicsWindow"]["Height"] ' Height of GraphicsWindow Objs["GraphicsWindow"]["Top"] ' Top coordinate of graphicsWindow Objs["GraphicsWindow"]["Left"] ' Left coordinate of graphicsWindow Objs["Button"][Index]["Name"] ' The Buttons name assigned by Control object Objs["Button"][Index]["Type"] ' The Type of the control - "Button" Objs["Button"][Index]["Caption"] ' The button's Caption Objs["Button"][Index]["x"] ' the x coordinate of the button Objs["Button"][Index]["y"] ' the y coordinate of the button Objs["Button"][Index]["Width"] ' the width of the button Objs["Button"][Index]["Height"] ' the height of the button Objs["TextBox"][Index]["Name"] ' The Buttons name assigned by Control object Objs["TextBox"][Index]["Type"] ' The Type of the control - "TextBox" Objs["TextBox"][Index]["Caption"] ' The TextBox's Text Objs["TextBox"][Index]["x"] ' the x coordinate of the TextBox Objs["TextBox"][Index]["y"] ' the y coordinate of the TextBox Objs["TextBox"][Index]["Width"] ' the width of the TextBox Objs["TextBox"][Index]["Height"] ' the height of the TextBox 'Labels are text created by the Shape object Objs["Label"][Index]["Name"] ' The Label's name assigned by Shape object Objs["Label"][Index]["Type"] ' The Type of the control - "Label" Objs["Label"][Index]["Caption"] ' The Lable's Text Objs["Label"][Index]["x"] ' the x coordinate of the Label Objs["Label"][Index]["y"] ' the y coordinate of the LabelSaturday, July 31, 2010 2:20 PM
My program clay-pigeon shoting
The final version is GGV858.
Use the mouse. shoting = mouseclick
Program ID HKG657 or
Version 2 is XGG295
Best Regards MartinMonday, August 09, 2010 5:55 PM
Yvonne Show 1.0
It's a lil' program of mine that show random pictures of Yvonne Strahovski every few seconds. It can be modified to show other random pictures during execution thanks to the TextWindow.
Andrew Burton - http://profnano.orgWednesday, September 01, 2010 5:02 PM
My First time making a progam,and i'm only 10. So It may not be Perfect. This is a game called COUNTERZ. You Have the choice of four counters, and you just have to pick a counter, and your opponent (the computer) will pick a random one. You win if your counter beats your opponents counter. You can name your player and your opponent: Just select name player/opponent in the Menu. There are four counters to choose from. Here are the stats of each counter: Red Beats Blue, Blue Beats Green, Green Beats Yellow, Yellow Beats Red, Green Beats Red, Yellow Beats Blue.
As you can see some counters are stronger than others. Such as Yellow Beats Two But only is Beaten By One.
I would suggest naming your Player and Opponent before playing COUNTERZ.
Import Code: NSF014Thursday, September 02, 2010 3:24 PM
Nice work - it works well and takes a few minutes to work out how to solve the crime.
As a challenge, see if you can do it without using a GoTo statement. They cause the program to 'jump around' and in larger programs they can make it hard to work out the 'logical flow' through a program and find bugs or extend the program. For this reason it is better to try to not rely on them too much. You may consider using subroutines where you can, this 'isolates' code that performs a specific task and can reduce repetition (duplication of code) and make the 'logical flow' easier to follow.
I'm only suggesting this because you have obviously gone a long way already working out the logical flow of your program.Tuesday, September 14, 2010 8:17 PMModerator
Here's one of my first programs in sb
It's a simple number guessing game.
Don't really know how to use fors and whiles but I'm learning.
Hope you like it!
With While-loops: http://smallbasic.com/program/?CJC272-0
Intro to Small Basic with Vijaye Raji
Expert to Expert – The Basics of Small BasicSunday, September 19, 2010 1:19 PM
Language : Turkish
echoooo: TextWindow.Clear() y = 20 x = Clock.Day saat = Clock.Hour var = 20 - Clock.Day - 1 dakika = Clock.Minute sn = Clock.Second TextWindow.Write("Okulun başlamasına ") TextWindow.Write(y-x-1) TextWindow.Write(" gün, ") TextWindow.Write(24 - saat + ((var * 24) + x2)) TextWindow.Write(" saat, ") If dakika > 30 then x1 = 60 - (dakika - 30) x2 = 7 Else x1 = 30 - dakika x2 = 8 endif TextWindow.Write(x1) TextWindow.Write(" dakika, ") TextWindow.Write(60 - sn) TextWindow.Write(" saniye kaldı.") TextWindow.Writeline(" ") Program.Delay(125) Goto echoooo
Sunday, September 19, 2010 4:09 PM
My first program.
A simple game consisting of avoiding and collecting.
Control the red ball with the arrow keys.
Collect the blue balls.
Avoid the yellow ones.
I would like some feed back on improvements, changes.
Importing will work better. I played it myself from the link and it was full of bugs. Sorry.
nConaghanWednesday, December 08, 2010 12:12 PM
I like this game - I scored 20 - the game play is very good, just about the right speed and it gets progressively harder than you would think when you have to juggle getting the timing right to hit the food or plan a route to avoid the yellow pils.Thursday, December 09, 2010 9:28 PMModerator
Neat program, tomtiger. I suggest that in the line of code Textwindow.Write("Choose your Time Table!"), you replace either with
Textwindow.WriteLine("Choose your Time Table!") 'This has a line in your window between the line to read and the line "Choose your Time Table"
Textwindow.Write("Choose your Time Table! ") 'This has a space between '!' and ' " '
No real need, but it's nice to see a space or line between the read
~~AirWaves!!~~Sunday, December 12, 2010 6:20 PM
my sample code is a Logo!!!
The commands are 1 , 2 , 3 , 4 , 5 , 6 , 7 and 8
You can enter with VLF523 or the link
The code is
GraphicsWindow.Title = "Logo"
TextWindow.Title = "Turtle commands"
speed = Turtle.Speed
TextWindow.WriteLine ("What do you want the turtle?")
TextWindow.WriteLine ("1. Move")
TextWindow.WriteLine ("2. Turn right")
TextWindow.WriteLine ("3. Turn left")
TextWindow.WriteLine ("4. Move to")
TextWindow.WriteLine ("5. Speed")
TextWindow.WriteLine ("6. Random background color")
TextWindow.WriteLine ("7. Color Turtle Road")
TextWindow.WriteLine ("8. Exit")
TextWindow.WriteLine ("Turtle speed: " + speed)
i = TextWindow.Read()
If i = "1" Then
TextWindow.WriteLine ("How far?")
o = TextWindow.Read()
If i = "2" Then
If i = "3" Then
If i = "4" Then
TextWindow.WriteLine ("Where? (X, Y)")
x = TextWindow.Read()
y = TextWindow.Read()
If i = "5" Then
TextWindow.WriteLine ("How fast?")
d = TextWindow.Read()
Turtle.Speed = d
If i = "6" Then
GraphicsWindow.BackgroundColor = GraphicsWindow.GetRandomColor()
If i = "7" Then
TextWindow.WriteLine ("What Color?")
z = TextWindow.Read()
GraphicsWindow.PenColor = z
If i = "8" Then
TextWindow.WriteLine ("Really want to quit?")
TextWindow.WriteLine ("1. Yes")
TextWindow.WriteLine ("2. No")
s = TextWindow.Read()
If s = "1" Then
If s = "2" Then
Thursday, December 30, 2010 5:53 PM
- Multi-language support
- Text-To-Speech integrated
Don't have time to tell stories to your kids? Type them and the computer will read it for you!
Current languages are: English, Portugese and Spanish. With many more to come.
Import ID: MWB628
Check out my website: http://k-dev.webs.com/Friday, December 31, 2010 6:54 PM
A couple of games I was playing with, based on some ideas from programmers on this forum - mainly just having fun trying stuff I found interesting, so some areas could use work to make them more game-like, but the interesting bits (for me) work. Can be used as working games or see how things can be done and as examples to use bits/extend/modify them. They are reasonably commented as to what is going on.
Import ZWD466 - MazePackman
Import XPP946 - SpaceInvaders
Import TSG033 - Visuals for a song - save and uncomment the auto-commented File command (used to download and save a sample song) after importSaturday, January 15, 2011 7:35 PMModerator
XKCD viewer: MQJ958.
This program will allow you to view the webcomic XKCD without a browser. It can retrieve specific comics or the most current. It can then either display it in the graphics window or set it as the user's wallpaper.
It works by first downloading JSON file for the comic from www.xkcd.com, then parses it for the image URL. It then downloads the image using the imagelist class, and asks the user for an action. It could be used to teach about using the network, file, and imagelist classes.
NOTE: As a security measure Small Basic automatically comments out file operations. If you want to use this program you will need to uncomment them.Sunday, February 06, 2011 9:52 PM
I was proud of my SmallBasic code sample, but once here I discovered that TEKGNO had shown something similar in a old post.
Anyway, here's my general implementation to use Stack object to simulate a function call with parameter and local variables.
The good is that is a general solutions that uses three different stacks to support function arguments, function return value and function local variables.
These stacks can be used for all the routines, without changing their names.
Someone could appreciate also the recursive implementation of the compute of permutation of digits, and the using of bidimensional arrays as function return value.
I agree with those that ask for function parameters and local variables. In Lisp all the variables are global, unless declared explicity as local. This could be a good approach for SmallBasic too. Anyway, a great product to play with.
'RecursiveFun - Recursive function that uses Stack objects to implement local variables 'The recursive function computes all the permutations of max 5 digits 'Author: Iacopo Vettori - www.iacopovettori.it BeginProgram: TextWindow.Write("Input a number between 1 and 5 (0 to exit): ") maxnum = TextWindow.ReadNumber() If maxnum < 1 Or maxnum > 5 Then If maxnum = 0 Then Goto EndProgram Endif TextWindow.WriteLine("Invalid number.") TextWindow.WriteLine("") Goto BeginProgram EndIf 'Prepares the function call putting the arguments on the "fun_arg" Stack object Stack.PushValue("fun_arg", maxnum) GetPermutations() 'Retrieves the function result from the "fun_res" Stack object result = Stack.PopValue("fun_res") 'Displays the result TextWindow.WriteLine("Permutations:") For i = 1 to Array.GetItemCount(result) For j = 1 To Array.GetItemCount(result[i]) TextWindow.Write(result[i][j]) EndFor TextWindow.WriteLine("") EndFor TextWindow.WriteLine("Permutations completed.") TextWindow.WriteLine("") Goto BeginProgram EndProgram: 'The recursive function computes all the permutations of max 5 digits Sub GetPermutations 'Setup code - saves all the local variables on the "fun_var" Stack object Stack.PushValue("fun_var", num) Stack.PushValue("fun_var", result) Stack.PushValue("fun_var", subresult) Stack.PushValue("fun_var", subrescount) Stack.PushValue("fun_var", i) Stack.PushValue("fun_var", j) Stack.PushValue("fun_var", k) 'Setup code - reads the expected arguments from the "fun_arg" Stack object num = Stack.PopValue("fun_arg") 'Reset the array used to store the result result = 0 'End of recursion: the permutation of only one digit If num = 1 Then result = 1 Goto ExitFunction EndIf 'Calls recursively the function with decremented argument put on the "fun_arg" Stack object Stack.PushValue("fun_arg", num - 1) GetPermutations() 'Retrieves the result from the "fun_res" Stack object subresult = Stack.PopValue("fun_res") subrescount = Array.GetItemCount(subresult) 'Builds the new result array For i = num To 1 Step -1 For j = 1 To subrescount result[j + (num - i) * subrescount] = i For k = 1 To Array.GetItemCount(subresult[j]) result[j + (num - i) * subrescount][k + 1] = subresult[j][k] 'Increments all the digits greater than or equal to i If subresult[j][k] >= i Then result[j + (num - i) * subrescount][k + 1] = subresult[j][k] + 1 EndIf EndFor EndFor EndFor ExitFunction: 'Exit code - put the result on the "fun_res" Stack object Stack.PushValue("fun_res", result) 'Exit code - restores all the local variables from the "fun_var" Stack object k = Stack.PopValue("fun_var") j = Stack.PopValue("fun_var") i = Stack.PopValue("fun_var") subrescount = Stack.PopValue("fun_var") subresult = Stack.PopValue("fun_var") result = Stack.PopValue("fun_var") num = Stack.PopValue("fun_var") EndSubSaturday, February 19, 2011 11:50 PM
Here is a pathfinder demo that I wrote. It uses an unweighted Dijkstra algorithm. Since Small Basic doesn't have a Queue structure its very inefficient.
The biggest problem I have is that the browser based version misses the KeyUp event often and keys become stucked. It hasn't happened to me once in the local executable version.
WDX385Saturday, April 30, 2011 8:15 PM
' Code for Password-secured Databases
' Names and keys of all authorized Persons name1 = "Till Lindemann" key1 = "1234" name2 = "George Bush" key2 = "hirnfrei" ' Just style ;) TextWindow.WriteLine("Liste 38") ' Name of Program TextWindow.ForegroundColor = "green" TextWindow.WriteLine("========") TextWindow.WriteLine("") TextWindow.Write("Loading") Program.Delay("300") TextWindow.Write(".") Program.Delay("300") TextWindow.Write(".") Program.Delay("300") TextWindow.Write(".") Program.Delay("300") TextWindow.Write(".") Program.Delay("300") TextWindow.Write(".") Program.Delay("300") TextWindow.WriteLine("complete.") TextWindow.WriteLine("") TextWindow.WriteLine("Please enter your name:") name = TextWindow.Read() TextWindow.WriteLine("Please enter your key:") key = TextWindow.Read() ' Some more style ;) TextWindow.WriteLine("") TextWindow.Write("Processing") Program.Delay("300") TextWindow.Write(".") Program.Delay("300") TextWindow.Write(".") Program.Delay("300") TextWindow.Write(".") Program.Delay("300") TextWindow.WriteLine("complete.") Program.Delay("600") ' Copy: ' One block for each authorized Person If name = name1 Then If key = key1 Then Goto output EndIf EndIf If name = name2 Then If key = key2 Then Goto output EndIf EndIf Goto error output: TextWindow.ForegroundColor = "#bbccff" TextWindow.WriteLine("") TextWindow.WriteLine("- Entry 1") Program.Delay("40") TextWindow.WriteLine("- Entry 2") Program.Delay("40") TextWindow.WriteLine("- Entry 3") TextWindow.WriteLine("") Goto end error: TextWindow.ForegroundColor = "red" TextWindow.WriteLine("Wrong name or key!") end: TextWindow.WriteLine("") TextWindow.ForegroundColor = "yellow"Sunday, May 01, 2011 5:40 PM
A simple program to draw multiple colorful polygons using LOGO turtle. the code id is: GCT231
Sides = 7 Length = 80 RepeatNumber = 100 GUI() Sub GUI GraphicsWindow.DrawText(0,0,"Sides =") SidesText = Controls.AddTextBox(50,0) Controls.SetTextBoxText(SidesText,Sides) GraphicsWindow.DrawText(220,0,"Length =") LengthText = Controls.AddTextBox(280,0) Controls.SetTextBoxText(LengthText,Length) GraphicsWindow.DrawText(450,0,"Repeat Number =") RepeatNumberText = Controls.AddTextBox(560,0) Controls.SetTextBoxText(RepeatNumberText,RepeatNumber) Controls.AddButton ("Draw it!!",0,25) Controls.ButtonClicked = Draw Turtle.Speed=10 EndSub Sub Draw Sides = Controls.GetTextBoxText(SidesText) Length = Controls.GetTextBoxText(LengthText) RepeatNumber = Controls.GetTextBoxText(RepeatNumberText) If Sides > 2 Or Length > 0 Or RepeatNumber > 0 Then GraphicsWindow.Clear() GUI() Turtle.Show() Turtle.PenUp() Turtle.MoveTo (GraphicsWindow.Width / 2, GraphicsWindow.Height / 2) Turtle.Angle = 0 Turtle.PenDown() red = 0 green = 0 blue = 0 ColorStep = Math.Floor(255 / RepeatNumber / Sides * 3 * 2) For j = 1 to RepeatNumber Polygon () Turtle.Turn (360 / RepeatNumber) endfor EndIf EndSub Sub SetColor GraphicsWindow.PenColor=GraphicsWindow.GetColorFromRGB(red , green , blue) If red + ColorStep < 255 And red + ColorStep > 0 Then red = red + ColorStep ElseIf green + ColorStep < 255 And green + ColorStep > 0 then green = green + ColorStep elseif blue + ColorStep < 255 And blue + ColorStep > 0 then blue = blue + ColorStep Else ColorStep = -ColorStep EndIf EndSub Sub Polygon Turtle.PenDown() For i=1 To Sides SetColor() Turtle.Move (Length) Turtle.Turn (360 / Sides) EndFor EndSub
Friday, October 21, 2011 6:30 PM
The ID for this program is FZH002.It may be found at http://smallbasic.com/program/?FZH002
'Small Basic Helical Gear'Author: Joseph Watson'Date: 30 Oct 2011'Notice: I created this program from scratch and I offer it to you in the public domain. Use it in whatever way you wish.'Description: This program generates a three dimensional view of a spur or helical gear. The gear's parameters may be' adjusted according to the user's wishes. Such parameters include the gear's location in the image, its size,' its number of teeth, etc. This program does not generate the image with a true involute gear tooth profile' but does produce fairly convincing images anyway.'Note: I am a retired software engineer with more than 40 years of experience but this is my first program in Small Basic.GearXPos = 320 'Locates the gear in the horizontal direction in the GraphicsWindowGearYPos = 300 'Locates the gear in the vertical direction in the GraphicsWindowGearAvgRadius = 200 'Establishes the gear's general sizeGearTeethHeight = 50 'Determines how large the gear's teeth are.GearNumberTeeth = 24 'Must be a whole number, the number of teeth on the gear.GearToothAngleFactor = .1 'Values between -.3 and +.3 seem best with 0.0 representing a spur gear.GearThickness = 100 'Larger numbers create a thicker gearGearHoleDia = 40 'The size of the hole in the center of the gear.'GraphicsWindow.Show()GraphicsWindow.BackgroundColor = "Brown"YFactor = .3ZFactor = .5GearHoleRadius = GearHoleDia / 2For Z = 0 To GearThickness * ZFactor Step .5For An = 0 To 2 * Math.Pi Step .005R = GearAvgRadius + Math.Cos(An * GearNumberTeeth + Z * GearToothAngleFactor) * GearTeethHeight / 2X1 = XY1 = YX = GearXPos + R * Math.Cos(An)Y = GearYPos - Z + R * Math.Sin(An) * YFactorIF An > 0 THENHexDigit = Text.GetSubText("0123456789ABCDEF", Math.Round(16 * (R - (GearAvgRadius - GearTeethHeight / 2)) / GearTeethHeight), 1)GraphicsWindow.PenColor = "#" + HexDigit + HexDigit + HexDigit + HexDigit + HexDigit + HexDigitGraphicsWindow.Drawline(X1, Y1, X, Y)EndIfEndForEndForFor An = 0 To 2 * Math.Pi Step .005R = GearAvgRadius + Math.Cos(An * GearNumberTeeth + (GearThickness * ZFactor * GearToothAngleFactor)) * GearTeethHeight / 2XHoleEdge = GearXPos + GearHoleRadius * Math.Cos(An)YHoleEdge = GearYPos - GearThickness * ZFactor + GearHoleRadius * Math.Sin(An) * YFactorGraphicsWindow.PenColor = "Black"GraphicsWindow.DrawLine (GearXPos, GearYPos - GearThickness * ZFactor, XHoleEdge, YHoleEdge)GraphicsWindow.PenColor = "Navy"GraphicsWindow.DrawLine (XHoleEdge, YHoleEdge, GearXPos + R * Math.Cos(An), GearYPos - GearThickness * ZFactor + R * Math.Sin(An) * YFactor)EndFor
Monday, October 31, 2011 4:31 AM
- Edited by ebjoew Monday, October 31, 2011 4:35 AM