QB Times Issue #8



OK, OK I know Jorden said this was going to be a double issue but due to the lack of articles I really think we can't call it a double issue. OK, I just took a break for the May issue because I had a lot of homework plus I was away for 2 weeks so there! Oh well... I hope July's issue's gonna be better because while this issue has got some nice articles I really think you can't compare it to the other issues. Anyway:


Now that's out of the way.... Enjoy this issue!


Project news

We've found a very interesting RPG project on the net. It really looks interesting because of the outstanding graphics....professional quality!!! It's called the Endless, nameless RPG, and we're gonna keep a close eye on this one...Visit the site here, and have a look at some screenshots that were send to us here.

We've found another interesting project: A very original game, Penalty shooter (with good graphics!). The website it is on can be found here. We've included the screenshot for you.

Cyber Chick is very complete, though WisdomDude is still working on gun combinations. Boss enemies are going quite well. Right now, he's mostly designing the game's graphics. More info and demo's of the game can be found at Petes QB Site.

The Future.Library is going to include some MMX optimizations, that will allmost double the speed of some of the current routines, one of the routines where the speed will be noticed, will be the Future.CLS routine, a test gave an incresement from 740 FPs to about 1540 FPS using an 320x200 sized EMS map.

Gabasic is a basic compiler. It works under Protected Mode, allowing to use all memory (Xms, Ems, Ram), this means that you can create arrays up to 4gb of size. Gabasic is an open source project, which means you can have the source of it and create things to expand the compiler. Anyways, visit the site here.

On the last moment, when everybody gave it up, there finally was the TCP/IP library from Dmitry Brant. We'll add a review of the program in the next month's issue, but for now, just visit the page and try it out yourself!!! The library uses VB program support, and with the programs included you can FTP/Telnet/HTTP/SMTP and more!!!

Site news

QuickBasic.com is back online. Right now there is no QB-related material on the site yet, except for the board maybe. Stay tuned.

There is a new forum around, called the GDR (Game Developer's Refuge).
As the site says:
"Welcome to the GDR. The point of this WWWBoard is for everyone to be able to meet in one central board, not attached to anyone's homepage, with moderators to keep the useless posts and flaming down so people can discuss programming, art, game design, ideas, etc."
To visit this site, click here.

The Elite top 50 is closed and up for sale. If you wish to purchase it, you can send an email to sales@ampleworks.com. Ampleworks.com will include 1 year of free hosting on our servers with the subdomain it currently resides at. To go to the official page: Click here.

Vote Now Almost at the same time the Elite top 50 closed, another QB top 50 opened its doors: http://www.qbtop50.com. This site was created by the webmaster of the old SimplyQB. Because the design isn't too special, this site gives the thought "Wow, another one of those unneeded top 50 sites", but we'll see how this one grows. After all, the people who sign up decide how this is gonna develop! Latest news: the site was closed due to illegal use of the topsites-script. The future of the qbtop50.com is uncertain.

QuickBASIC RPGs Has Shut Down... This is what Liquidex (QuickBASIC RPGs Webmaster) said about it:
"That's right, folks. QuickBASIC RPGs, the center of the QB RPG universe, has shut down today. Coincidentally, today, May 20th, 2000, is the 3rd anniversary of the site! 3 years have passed since the site began (a little over 2 years since I've been the webmaster) and now I've decided to step down.
Hopefully we'll see Nek's new QB RPG site up in the future, the URL of which I'm sure he'll make public soon. Back at the original site, however, I've posted a goodbye message for everyone to read. It explains everything, from the reasons I decided to drop the page, to a list of thanks to various people, and some other stuff (as well as Ape's original goodbye message). http://members.xoom.com/qbasic_rpgs I'd like to give a huge thanks to everyone who's been a part of the scene! That's it, everybody. :) This note will be placed on all of the major QB RPG boards. --Liquidex"

You feel you're gonna need a book about a programming-subject? Then you might want to check the Game programming bookstore. This site has a big index of books on several programming subjects, including Graphics & multimedia, Software design, TCP-IP, Web programming, and more. A must-visit for the readers!

Pete is back! Pete's QBasic Site was maintained by WisdomDude, because Petes computer broke...but now he's back himself. Pete is known because of the daily updates on his site, and it seems he will continue with doing that.

AlienQBs QB Dungeon is closed. AlienQB is now working on the Dark Legends homepage, which will soon be online. The page layout will be better than the old layout, since AlienQBs HTML skills have grown...We'll keep you informed about the progress!

Vplanet is having thoughts about the QB Expo. "In this event, we're looking for nothing but all the new stuff. We want to put together a site that contains all the newest demos, games, tools, and libraries released or currently in development for the year 2000.". Seems like a pretty good idea, and since big QB sites like Future Software, The Programming Oasis, AlienQB's Dungeon, Master Creating, Abyssware Studios, and Picker's Games are probably gonna co-operate on it, it might become a popular event.

In the previous issue we already noticed that Qbsource.com wasn't updated. Last time we visited, the frontpage had turned into an essay. Does this mean the death of qbsource.com? Anyways get the essay here =)

There is a cool contest going on on the NeoBASIC homepage. You have to program a deathscene of one of the 'famous' people in QB World. It seems you can finally get the most irritating persons back. Our top3 suggestions:
Jorden & Marcade (both for the QB 2000-aprils-joke, Marcade for creating this contest)
Tek (for not updating his site for so long)
Majiko (THRASHER) (for spamming several QB Boards)

Future Software Logo Qb45.com exists for a year now!!! On may 1st, 1999, the domain was opened for visitors. During this year, the site was moved to 2 new servers, while it grew from 30 MB to 100+ MB. In one year Future Software has had more than 130,000 visitors on the qb45.com domain.

So Neozones.com and Neozones Productions share the same name...you probably know that story, if not, read about it here...
Marcade took his own server and domain name, and programmed scripts for his NMP. Tek took a domain himself, and made a clone of the NMP. It basically is exactly thesame idea, a little different but nothing to write home about. His N!system is actually a stolen idea...the original idea was from Marcade. The sites seemed to die, having less visitors than ever in it's history, will this stolen idea help Neozones Productions to stay alive?

Marcade has left the QB Scene. After some 'fights' with people from the #quickbasic channel on mIRC and on the msgboards, he decided to quit the scene. Marcade still programs in QB, but he doesn't visit the webboards anymore. The neozones.com site, owned by Marcade, now has some other administrators to keep the site up.

The Blazin' 50 is a new topsites-list. It's different than the other topsites because the sites are ranked by ratings that visitors give the site. The site does not have many members yet, so join now!

The qbt50.com became the devdex1.com. The design and content became less attractive to most visitors then. Now, a few weeks ago, the Developers Index changed again, now it's not using a topsites-script anymore. No longer the top-voted sites gets hundreds of hits anymore. We personally think it's not attractive anymore, so we no longer support it.

Site review

NeoBASIC Homepage
Click here to visit!

NeoBASIC Homepage
# Rating (1-100) Description
Content28/30 Loads of files (800+) in the tutorials-section, info on projects that are submitted by visitors (they can update the projects themselves, so they are always up2date), a list of programmers with info about them, NeoNews which is sometimes updated, an okay links list, and more.
Program count18/20 800+ files, but lot's of the programs are a waste of diskspace. A positive thing is the files-section that is made by the visitors, with their own projects and files!!!
Links count14/20 The size of the list is okay, but not THAT big...also, I don't think it has ever updated...
Quality of design19/20 A lot better than before! Really, the overall design is better than most other sites I've seen...congrats =)
Unique10/10 The complete CGI system is very unique, Marcade proves to be a fine Perl-master!!!

Additional comments:
The board is becoming pretty active, programs are often updated by the visitors, so check this page back often!

Total: 89

Interview with Oren Bartel

Oren Bartel is the creator of SuperStack and Ultimate SuperStack, the already quite famous games hosted by qb45.com. Last months issue had 2 reviews on this wonderful game, so we decided to do an interview with the programmer behind the game!

1. How long have you been programming in QB?
It started with Apple-2C's Basic-OS, a long time ago, and soon moved to GWBasic on my first XT, later, it was QBasic that came with DOS, and eventually, QuickBasic-4.5 - My favorite.
I guess I have known Basic for a VERY long time, but its been "Only" about 6 maybe 7 years since I have programmed my first QB.. err... thing.
Don't worry though, I have been programming on and off, and after a very long break, I have returned for my probably last game in QuickBasic...

2. Which other programming languages, besides QB, do you know?
While GWBasic is my very first language, I have learned several others, either in school, or by myself:

  • Pascal
  • C
  • ADA
  • Assembler (if you call that a programming language) - for 8086 and for VAX
  • Java (Can't say that I really programmed in it, but I learned it)
  • Perl and lots of other scripting languages; mostly for Unix platforms
    (gee, it feels like I'm writing a resume)

    3. Which programming languages do you tend to learn in the future?
    I guess I will get into C++, it shouldn't be difficult since I already know Java and C...
    But I'm not sure I'll use it for fun programming... who knows...

    4. How did you learn programming?
    I learned Basic from a book, but mostly from the wonderfull help that comes with QB45;
    You don't care about the rest... do you?

    5. How long have you been programming on SuperStack?
    It took me over three LONG weeks to complete the first SuperStack...
    I did it from scratch, since I have reinstalled my computer, and all my previous QB programs have gone for good (DOH!)
    After I saw that people liked that game, I decided to make another one, with all the things that bothered me and the other people removed, and several new cool things that I wanted to add... Took me two weeks to make those changes, most of the time was spent on photoshop, and finding wavs... But I hope you like the outcome!

    6. Are you happy that you've finished SuperStack, or are you affraid to get bored now...?
    You have no idea!
    I couldn't sleep or eat without thinking what I will put in the game, what was left to be done... I even made a checklist (Ieeeeuu!!) to help me remember what is left to be done!
    But after it was over, it was worth it! All the positive comments about it made it worthwhile...

    Now I am resting... But things will come... Don't you worry about that...

    7. What are your plans for new projects?
    Lets see... umm... wait, wait, its coming... errr..... Nop. Can't see that far ahead; sorry...

    8. What is the best site for getting programming info, in your opinion?
    QB45.com ofcourse! :) Actually, I don't know... I don't scout the internet to get QB45 programming info... the inside help is just what I need!

    9. Which projects are YOU looking forward to? Anything that really interests you?
    Warcraft 3... Diablo 2... ... I know that someone will popup with an amazing QB game; remember that what makes a game great, is the idea; sure, graphics and sound counts, but if the gameplay sucks...

    10. What is the best QB game you know?
    Hey... You can't ask me that...!

    11. What do you think about the future of Qbasic/QuickBasic???
    I wish I knew... Now with Win2K taking over, DOS based applications are fading out - and I'm affraid that soon you will need a dos emulator to even try to run some of the things that are dos based... Microsoft has created this wonder, and slowly it is killing it...

    Anyways, I think that Basic will remain THE programming language for people who want to create cool stuff - fast and easy.

    12. Anything you would like to say to other programmers?

    Program download of the month

    Welcome to MultiLib. Ever wanted to combine 2 or more libraries, or leave certain parts out of the library you are using? Now you can do that easily using the MultiLib program. This program has a ton of options, so be sure to check it out!!! Here's a screenshot:
    Since this issue of the QB Times was supposed to be a double-issue, we also had 2 program-downloads of the month! (Oh well...) Here is the second:
    Fox is probably already quite famous. Fox is a platform game that is very fast, has beautiful graphics, kick-ass control, and more stuff. Take a look at the screenshot below and then download it here.

    Hidden Surface Removal for Three-Dimensional Drawing

    Matthew River Knight

    Three-dimensional drawing can become very complex. Most three-dimensional models are created with a series of planes that represent the shell of the object. If the planes are filled, then the plane is considered to be nontransparent. Similarly, if the plane is not filled, the plane is considered to be transparent.

    When rotating or moving three-dimensional objects, it is often necessary to remove parts of objects, or even entire objects, in order to provide realistic representations of the environment. The method by which these objects are altered is called hidden surface removal. The most common types of hidden surface removal are discussed in this tutorial.

    There are two basic types of hidden surface removal. These are object-space methods and image-space methods. Three-dimensional information is used with object-space methods to decide which surfaces should be hidden and which surfaces should overlay others. Image-space methods use two-dimensional information to determine the hidden surfaces.

    The most common method of hidden surface removal for personal computers is probably the plane equation method, which is an object-space method. In general terms, the plane equation method determines if a point is in front of, on, or behind a specified plane. By testing each point against the viewing position, always (0,0,0), the visible and hidden planes are determined.

    The equation of a plane is:

    Ax + By + Cz + D
    where x, y, and z define a point on the surface of the plane. The A, B, C, and D values are constants and are derived as follows when three points on the plane are specified (x1,y1,z1 ; x2,y2,z2 ; x3,y3,z3).
    A = y1(z2-z3) + y2(z3-z1) + y3(z1-z2)
    B = z1(x2-x3) + z2(x3-x1) + z3(x1-x2)
    C = x1(y2-y3) + x2(y3-y1) + x3(y1-y2)
    D = -x1(y2z3-y3z2) - x2(y3z1-y1z3) - x3(y1z2-y2z1)
    By identifying three points on a plane, solving for A, B, C, and D, substituting A, B, C, and D into the plane equation, and passing each object point through the new plane equation, you can determine whether or not each point is on, in front of, or behind the defined plane. If the plane equation evaluates to a positive value, the point is hidden. If the plane equation evaluates to zero, the point is on the plane and is usually defined as visible. If the equation evaluates to a negative value, the point is visible.

    When using this method it is important that the points used to derive the equations are plotted in a counterclockwise direction and can be viewed as part of a convex polyhedron. A convex polyhedron is a figure that has many faces and is curved outward, such as a cube.

    3D Graphics

    Welcome to part two of the 3D tutorial. As promised, here you'll actually begin creating something! For this tutorial, I'm using Extreme 3D because it is fairly easy to use. You can, however, use any other 3D program (except for Bryce which works differently), since they all use exactly the same method. Some of the tools may be different, or may have different names, in other programs, but things should be the same.

    Well, to it then! The first thing to know is that all 3D objects are created out of 2D objects. Just to go off to the side a bit, I'm sure you've all heard of 3D objects having a certain number of "polygons". Those polygons are triangles, and they make up everything. If you make a square box, each side will be made up of 2 triangles, put together so that they form a square. With triangles you can form any sort of object. However, 3D programs know that it would be incredibly difficult to go about making an entire object just out of triangles! So they have various other tools that let you make 2D objects into 3D ones. Lets take a look at them.

    Seems like a lot of tools. But we'll only be concerned with the second set for now - the 2D primitives. First of all, lets have a look at these. From the pictures it is in fact pretty obvious what they are. Their names are the Text tool, polyline tool, line tool, spline tool, arc tool, regular polygon tool, rectangle, and circle tools. Clicking and holding down on a tool (this is for extreme 3D only of course) will often expand and give you more tools. For example clicking on the rectangle tool will show a tool that draws squares.

    Here is an example using all of these tools. First we can see the text tool. This is fairly straightforward. You double click on the icon to select the font and size, click on the screen, type what you want, then press enter. You get from this some 2D text. Below that we see a polyline tool. As you can see this is basically straight lines drawn all at once to form a single object. To use this tool, you click on it, then click on the screen to draw points. The first point will be joined to the second with a line, the second to the third, and so on to form a shape. This tool is very useful. Next are some lines. To use these, click, drag to the endpoint, then let go - simple. On the right we see a spline. Splines are a bit more difficult to work with - later on I'll show you a little screenshot of what they look like. But for now, you can see that they are what would give an objects a curved surface. On the lower left, we see a circle, and then a rectangle. For these, you click on the center point, then drag out to the dimensions you want, then let go. The regular polygon tool is not seen so often in other 3D programs. In E3D, you click on the tool, select how many sides, then click on the screen and drag to determine how big it should be. Lastly is the arc tool. For this one, you click on the center, click on a point outside to determine the radius, then drag for how long the arc should be.

    Phew! A lot of tools. That was a very quick and basic view of what each tool is that what it does. Time to get to some examples! Following are screenshots of how to use some of the tools.

    Here is an example of the polyline tool. You click to establish the start point, then click to add more points, and lines will be drawn in between. This is a very useful tool.

    Here is an example of the spline tool. You click to establish a starting point. Then you click on a second point, and drag. As you drag, a curve will be formed between the first and second points. Let go, then click elsewhere to make another curve.

    Other than this, the tools are fairly straightforward. Now, these are just 2D images. They are flat. We want to make them into 3D images. To do this, we make use of the bottom set of tools. Of these, 3 are important. In the upper left is the extrude tool. This lets you take a 2D image (or "profile") and stretch it out into a 3D image. If you take a square, it will become a rectangle or cube. If you take a circle, it will become a cylinder. In the middle right is the Lathe tool. This rotates a profile around an axis. This also forms a 3D objects. For example, rotating a rectangle around one of its sides will give a cylinder. Rotating it around a point a little away from the side will get a cylinder with a hole in it. More examples of this will follow. Lastly, in the bottom right, is the skin tool. I won't be going into this at the moment, but it is perhaps the most important of these tools.

    Here is the extrude tool. We selected the square, clicked on the extrude tool, then dragged a line for how far out the square should be extruded. We end up with a 3D object. In this case, I've rotated it to show perspective. We'll cover rotating, view and transformations in another chapter.

    Here are two examples of the lathe tool. As you can see, the object is selected, an axis is chosen, then it is rotated. When using this, you have to visualize in your head what would happen if this object were really swung through space and left behind a trail.

    These tools, combined with these objects, should be able to give you pretty much any shape and form you want. The last thing I'll cover is the skin tool. This one is the hardest to use, and its results are a bit unpredictable. The skin tool in other programs such as 3D Studio is also somewhat better than the one in Extreme 3D. 3DS even has a plugin especially designed for smoothing out such skins. But this example should give you the basic idea. For this example, we'll need to switch views a bit and learn about transformations. Switching views is simple. You click on the view menu, and choose a view! Right now, we've been working in front view. For the above example of lathing, the last frame was in "Three Quarters" view, to show the perspective.

    Now, a skin is...a skin. It is a flat surface stretched around several 2D objects. If you take a skin of two squares, with one above the other, it will return a cube. Two circles with one above the other will return a cylinder. Here is an example, with explanation.

    First I started off in TOP view and created a circle. I used top view because it makes sense - if we're making a cylinder, the top will be a circle. In the next frame, I switched to front view. I copied and pasted the circle and then moved the two circles apart. Next, with the two circles selected, I clicked on the Skin tool. A little dialog comes up asking us if we want to "Create" or "Deselect". Create lets the program decide in what order to skin the profiles. If we chose deselect, we could choose the order, if we wanted to create an object with a certain skinning order. Most of the time the program does it right. And there we go - a skin stretched around two circles gives you a cylinder.

    Well, these are all the 2D and 3D tools necessary! It may not seem like it, but now you're ready to create almost anything. Before I go on to the final example though, I'll show you hwo to resize, rotate, and mirror objects. To mirror an object, 2D or 3D, you select the object, then click on the mirror tool. This is in the third set of tools on your toolbar - right underneath the paint bucket. You then draw a line around which you want the object to be mirrored (sort of like drawing a line for a lathe), and a copy of the object will appear flipped accross this line. Rotating and resizing involve the function keys. That is, F2,F3, and F4>. To resize an object, select the object, then hold down F2. Drag around the screen, and the object will be resized. Clicking and holding down on F3 and F4 will rotate the object around various axes.

    On to the final tutorial. I'm going to take all of what you've learned and show you how you can use it to create a REAL shape (not these cylinders and cubes).

    Phew! Ok, here's an explanation. I started out by making some 2D objects for a leg. I used the polyline tool, and then the circle tool. In the next step I extruded that, and then added some more polylines and circles (in red). I extruded those too, but not as much as the previous ones, as you can see in frame 3. Next, I copied this limb part and pasted it. I then resized and rotated it to give me the lower limb. The foot is simply a polyline that's been extruded. I then copied this entire thing and pasted it, then moved the two apart. I began making a body. I started out with a polyline, then arranged several of these on top of each other, as you can see in frames 5 and 6. I then skinned them all to make the body. This looked sort of out of proportion, so in frame 8 I resized and rotated things a bit. In frame 9, I used the same process to create a cockpit. In frame 11, I began making a rocket launcher type object. I started out by drawing the shape with circles and a polyline, then I extruded it, and added little square struts (you can hardly see them) in frame 12. I then duplicated this and mirrored it over to the other side of the mech. (By the way, I had no clue that this was going to be a mech-like thing when I started!) I put some little spheres into the rocket launchers to look like missiles. If this were going to be animated, I'd make some actual missiles. Frame 14, I made some cylinders, and arranged then with 6 outside in a hexagon pattern, and one larger one in the middle. I then created a little polyline shape and extruded it, and attached these cylinders to it. This would be a machine gun of sorts. Finally, I positioned the machine gun next to the mech, mirrored it, and I was done!

    There we go! A mech! It still has a long way to go before it can even be considered decent (the guns in front don't even have holes to shoot out of - they're just cylinders!) but its not bad. All the objects here were made with things covered previously in the tutorial, and the entire thing took less than half an hour to make.

    That's it for this chapter of the tutorial! In the next chapter, I'll cover a bit more 2D stuff, then go into materials, textures, and rendering your objects into final images.

    Note:If you are actually trying this out on Extreme 3D, there is a little bug of sorts. When you make an object in a certain view, then switch to another view, you may not be able to see the object at all - it is far off the screen. You need to use the arrow keys to move it into your viewing area. This happens usually when making objects in top view and then switching to front view - the object is usually below the screen, and you must move it up.

    Shining Force like battle engines

    Now the second part of my tutorial, a short one :
    How to move the members of your team and how to limit them. You know that each member has a limit of displacement; for example this one (the 'X') has a limit of three :

           3 2 3 
         3 2 1 2 3 
       3 2 1 X 1 2 3
         3 2 1 2 3
           3 2 3
    And the formula to show the moving limit is the following :
         FOR i = -limit TO limit
                    nbcase = ABS(limit - ABS(i)) * 2 + 1    'this gives us the number of reachable places per row
                    FOR j = 1 TO nbcase
                            LOCATE (1 - nbcase) / 2 + j - 1 + xposition, i + yposition: COLOR 18: PRINT CHR$(219)
            NEXT j, i
    COLOR 7
    LOCATE xposition, yposition : PRINT "X"
    You must specify the limit, the xposition and yposition before starting, or build a SUB with limit, xpos and ypos as the arguments. This example in SCREEN 0 shows : the character ('X') and his moving ability (in blinking green).

    But that's not all : we must include a moving and limited character. There are two ways of doing it :
    1. The 'classic' method (in Shining Force) : you can move the character only on the blinking piece of ground.
    2. The 'modern' method (in Vandal Heart) : you move a cursor all over the map, seeing the properties then you choose (on the blinking area) the place where you want your character to go.

    There are pros and cons in the programming of the two ways : 1.First method :
    PROS You move the character, there's no use of programming an A.I
    CONS You have to program a limit of movement
    You can't see ennemy's tile status directly
    2.Second method :
    PROS You don't have to set a limit of movement
    You can view ALL tiles status and all the ground
    CONS Must program a (little) A.I to move the character where you want to
    You can't undo a movement

    Now choose the method you want to use: there are tips below to program the two methods and when I will come back from my holidays I will release a demo of the two methods.

    Tips for the first method : Create a clone array of the ground then add 1000 on all the tiles reachables by the character then just make a test /*/IF tilevalue>1000 THEN move ELSE stop moving.\*\ To draw the tiles with a value increased by 1000 make this test : /*/IF tilevalue>1000 then draw tile for value tilevalue-1000 \*\(if you have more than 1000 tiles drawed for your game, increase the value by 10000 or higher).

    Tips for the second method : Let a free moving cursor then make a test /*/IF cursor is on a blinking tile AND enter key is pressed THEN move the character ELSE beep or PRINT "Unreachable".\*\ A.I to move the character :

    (verticalposition of the cursor - verticalposition of the character) = vertical moving
    (horizontalposition of the cursor - horizontalposition of the character) = horizontal moving
    Now with that values you just have to move verticaly then horizontaly. But the simpliest way is to show directly the character at the place you choosed it to go (but it's not very pretty)


    by Nightwolf Introduction

    Hello! This article is written esspecially for people wanting to see how fast the engine of their new program is but have no idea how to do it. I'll first explain what FPS is then I'll discuss what a good FPS rate is for your program and then I'll give an example program which measures FPS.

    What is FPS?

    FPS stands for Frames Per Second, this means how many times the program refreshes the image on the monitor. A more efficiently written program has a higher FPS rate than a sloppy program. The higher the FPS rate the smoother the program runs.

    What is a good FPS rate for my program?

    The human can see about 23 FPS so for a smooth looking animation you need to have a FPS greater than this. A FPS about 25 is the bare minimum for smooth animations. A FPS of about 40 or 50 should be fine for most programs. The highest useable FPS you can get is around 70, while you CAN get higher FPS it won't help to smoothen the animation because the monitor refreshes only 70 times a second.

    OK, now how do I implent this into my program?

    Ahh! Now the nice part comes :) I'll have source code in a minute but first I need to explain something about the implentation of FPS in a program. In order to measure FPS your program needs to refresh continuasly. This means that the program has, for instance, a DO...LOOP in which all the actions are called (check for user input, move the player, redraw the screen). If your program is a like this you can add a FPS counter if your program only redraws the screen when, for instance, the player moves the FPS counter is fairly useless.

    OK, onto the source code! So you have this DO...LOOP in your program. Add this somewhere in the LOOP.

            FPS% = FPS% + 1
            IF starttime# + 1 < TIMER THEN
             FPS2% = FPS%
             FPS% = 0
             starttime# = TIMER
            END IF
    This will put the FPS of your program in the FPS2% variable after a second or so. To view the FPS you could simply do:
            LOCATE 1,1
            PRINT FPS2%
    I'll discuss the code line by line now:
            FPS% = FPS% + 1
    Increase FPS% by 1
            IF starttime# + 1 < TIMER THEN
    Starttime# is the variable in which we store the current value of TIMER. If this value plus 1 (one second) is smaller than the current times (this means one second has passed) we enter the IF...THEN
             FPS2% = FPS%
    Give FPS2% the value of FPS%, we can't just PRINT FPS% to the screen because it would be increasing all the time.
             FPS% = 0
    Give FPS% the value of 0, to start the count all over again.
             starttime# = TIMER
    Give starttime# the (new) current value of TIMER.
            END IF
    End if.

    Well... I hope you understand FPS now. If anything's not clear. Mail me!

    Interview with the authors of FoX

    1. How long have you been programming in QB?

    WS: About 3 1/2 years now.

    TZ: Around 8 years on and off.

    2. Which other programming languages, besides QB, do you know?

    WS: C++ and Java, though at the moment I'm better in QB. I can also do a tiny bit in Assembler and Perl.

    TZ: I'm good with Assembly, C++ and Pascal

    3. Which programming languages do you tend to learn in the future?

    WS: For me, I just want to improve on everything I mentioned above, and make myself as good as making games in C++ with DirectX as in QB!

    TZ: I need to learn some of the visual languages so that I can create Windows applications, etc. I am also interested in a powerfull new hand held games console which will be coming out in the near future.

    4. Now about FoX: How should people look at the game?

    TZ: I don't want people to see the game as a QB program. I hope that people won't look at the game for the quality of its code but rather that they just actually play the game and hopefully enjoy it.

    WS: As for the QB world, I think it should break a lot of ground. The engine we've got is superb, and I don't think anyone has seen a complete game with all the features FoX has yet. We see a lot of demos of projects that look promising, but hopefully FoX will take all those hopes of great graphics and huge gameplay, and turn them into a QB reality.

    5. How long have you been programming on FoX?

    WS: Bad question. :) We started in March 1998, but in that period of time we've revised the game design numerous times, and gone months without doing anything. However, I think that's given the game an advantage as we've consistently improved the game and hopefully eradicated any original bad ideas.

    TZ: What he doesn't know is I first came up with the consept whilst playing the first ever Sonic on the Game Gear around 7 years ago =)

    6. When should we expect a final release of FoX? When will it be finished?

    WS: The programming virtually is all finished, what's left is very minor, and of course the issue of putting together our code into the full game! Now, we're really left with gathering graphics and level design (for 40 levels), which might take a while. We've also got major exams at school over the next month, so really we can't state a date. As soon as possible is what I'm saying.

    TZ: Hopefully very soon. The next month or so we won't be able to do too much work but after then we have far too much time on our hands =) We are just in need of graphics. If anyone out there can produce the sort of quality graphics that you see in the current game, please mail me! We just need graphics for a city world and a factory world.

    7. Do you have any plans yet for new projects?

    WS: Hmm...nothing we've really discussed. We've got ideas which we've mentioned to each other, but no definite plans.

    TZ: I have left the QB scene so I doubt you will hear much more of me. I do however have plans for a game in Pascal.

    8. What is the best site for getting programming info, in your opinion?

    WS: I like GameDev.net. This is mainly for programmers in industry, using C++ and DirectX, but it has some brilliant articles if you can use DirectX. It's worth a look at anyway, as it contains links to many other game programming sites.

    TZ: GameDev.net is good for industry standard programming but as far as QB goes, http://neozones.com is good as its got a real time submission system and a good community of people who go there. For QB files, I always choose http://qb45.com as its always got files both new and old.

    9. Which projects are YOU looking forward to? Anything that really interests you?

    WS: I have to admit, I haven't been looking around on the QB scene for a while. I'm an RPG fan myself, and have been waiting patiently for many eons for games like DA2, Vampira and Eternal Frost.

    TZ: I havn't seen or heard of any projects that interest me for a while. I was very impressed with Pasco's France '98, especially considering it was pure QB but I think he bailed out of that. His latest project is a bit of a let down however. I am looking forward to seeing Liquedex produce something as he is always bitching at me so be warned, Liquedex, one little inperfection and you're done for! =)

    10. Anything you would like to say to people who have played your game and want to make a game that is as good as FoX?

    WS: You've got to have motivation. Our advantage is that we're friends in real life, and if one of us doesn't do any work, we can bug the other one constantly to do stuff! I know I've personally been motivated to work on the project after seeing a new demo of the main engine from TZ. Also, I think you have to be prepared to revise the game a lot. If you can't do a certain feature, then leave it out, and don't be afraid to recode things! I've recoded my whole world map engine many times! Lastly, you have to have some programming talent, otherwise you're finished with!

    TZ: The above is all bullshit. Take it from me, the only way to success in games programming is hours and hours of slaving over a 12 pack of Fosters, a pack of fags, a powerfull caffine source and very high volume punk rock.


    EditorsRegular WritersSubmissions
    Jorden Chamid
    Dae Breaker
    Matthew River Knight
    Oren Bartels
    FoX Authors

    Link to us

    Wanna link to the the QB Times? Use this button:

    <A HREF="http://www.qb45.com/qbtimes/" TARGET="_blank"><IMG SRC="http://qb45.com/qbtimes/images/small.jpg" WIDTH="88" HEIGHT="31" BORDER="0"></A>

    Submit your news by email, or you can post on the Discussion Board!

    Everything in this issue is copyright of their writers, nothing may be taken without explicit written permission from Nightwolf or Jorden
    © Copyright 2000, Marinus Israel & Jorden Chamid