November 24th, 1999

Welcome to the second release of QB On Acid. For this issue, we've attempted to somehow format the page so it's not so "boring", but we don't promise much. Unlike certain publications of the past (not mentioning any QB:TMs in particular...oops...heheh), we're more focused on delivering accurate news and content, rather than fancy doohickeys and overrated hype and buttkissing.


LETTERS TO THE KINGPIN...ERR, EDITOR

From r.c. volgers

I quote from your homepage: "You can even write to us and tell us how much we suck, we don't mind because the truth is what we're here for."

Are you saying that if I say you suck, I'm telling the truth!?

Hehe...

That's what it means.

Also from r.c. volgers

To improve your mag, do this...

- Add a table of contents to the top, and add internal hyperlinks.
- Write titles in another color
- Stop writing that "article #4" stuff above every article

We're going to do the first and second idea in the next issue, but we've done the third suggestion in this issue. Thanks for the advice!

From LordQB

Being a (of course :) huge fan of QB on Acid, I've read it (prolly more than once) and couldn't help but notice the rather plain logo (with all due respect). The real problem is that it's square, and is kinda a space wasting shape for a web page. Either way, I made you a new logo if you'd like to use it. It's *totally* okay of course if you dont like it/want it/want to use it, but just in case you wanted an idea for a new one, here it is. This didnt take long so it's no sweat off my back if you dont likee. :) Also, it takes the whole "acid" thing into account, and includes a somewhat Daily-Show-inspired slogan. Just tossing around ideas.

It comes with two files-- BigLogo.gif and SmaLogo.gif

The smaller of the two would be best for the page, the bigger is just basically a better, more detailed view. Do whatever you want with it.

Hope you like it!

--LordQB

We did, and so we used it! Thanks for the new logo LordQB!

From Big B of BX software

Hi there,

I just read the first article and liked it. Just go on and someday it might become big :-)

Some comment on the "gallery". You guys posted a pic of Kaldaran...the one with rain effect. Below it said: "This pic is unique, It is very rare to have games in QB with weather-effects, it's raining!". I agree... and it's very well done, but my game also used rain and lightning and day-night changes. :-) Anyway, I made a very early demo, download at http://stu<a%20href=/ and tell me what you think of it. Although Kaldaran's rain-effects are better, mine are good too!

Thanks,

Big B (BX software)

We attempted to download the file, with no success. If anyone out there has this file, please let us know. Thanks!

From Bill McDonald

Hey, ive just read your qbmag and its pretty good, but the main problem with it is the layout. everything looks the same and is unorganized and boring...

Bill McDonald

We're working on it, but thanks for the input.

From Rico

hey, i was looking round the qb board and nek pointed out "qb on acid". After ages of seeing "coming the end of october" when it's fricking November, i looked at this. it's a really good mag, and although it could do with a bit of formatting (like QB:TM) I'll be checking back...it'll probably stop Razormag coming out :)

Rico

Believe it or not, QBOA was originally designed because of Razor's no-show, not to mention zkman's bailing on his mag. It's more than that now of course, and we'll keep getting bigger and bigger...mwuahah nothing can stop us now! err....look out for that freight train! =)


THE NEWS

DISKMAG SPOTTED!

With all the gripes about the Razor diskmag as of late, another diskmag has been spotted in QB land! Our sources tell us that this new diskmag will appear soon, however, no names as to the culprits...err, people behind it were revealed. However, it seems that there's a massive team behind this new effort, and this could be quite big. Look forward to the new diskmag appearing soon.

SUPER PROJECT?

It appears that there's a new kid on the QBRPG block...and this kid comes out swingin'. A new team of accomplished game developers have collabarated to write an epic RPG. Featuring QbProgger as lead programmer, MagnaUnum as storyline developer, and LiteSabr as the graphical developer, this "trio of masters" promise to deliver the goods. We'll see what develops from this, and we'll watch this project closely.

LIQUIDGL KICKS SOME SERIOUS TAIL

Look out all you lib-writing-hopefuls...this one's going to be tough to beat. LiquidGL, written by LordQB (also known as LiquidEx), is kicking butt and taking names in its conquest to be the fastest lib around. It promises to outperform even the mighty QB13h library...long known as the "lib of kings". It will be a tough act to follow, especially going up against monsters such as GSlib, which has been known for a long time as the fastest lib in existance...

SPEAKING OF LORDQB

LordQB successfully defeated Robert Lee in a challenge to write the best pure QB graphics demo. Robert Lee, after repeatedly insulting LordQB, issued a challenge to LordQB, starting a war that was watched for days. While LordQB wrote his demo, Robert Lee decided to work on a Visual Basic webbrowser instead of the challenge that he himself had initiated. When it became apparent that Robert Lee was not going to back up his own words, LordQB was declared the winner. Upon further examination, it was concluded that Robert Lee had made the challenge out of actually knowing that he would never be able to participate, since he was joining the Army. However, fate has a strange way of working, and Robert Lee was denied access into the military...one pound overweight. The concensus was that Robert Lee never intended to actually even participate...let alone win. Aaahhh, justice is served on a silver platter this time.

C AND QB?

FlySwat's attempts to close the gap between the two languages grows ever closer to completion. With his taking over a large part of the Twisted Sock library project (hey, I have the right to do self-promotion here ya know =), he's been working on bringing the power of C to the simple nature of QB. With such a feat accomplished, there is no doubt that he will lead the way in fully closing the gap between the two languages. Or maybe he'll just sit back and bask in the glory of being the first recognized person to do so! Either way, it will once again prove that in QB, limitations can be overcome if one is willing to find the way.

NECROLYTE RETURNS!

Chris Williamson, better known as Necrolyte, has finally returned to the QB scene. Not many details were provided as to why he disappeared in the first place, and even fewer details as to how he came back. But he's back nonetheless, and expect to see some new work by him coming out soon.

PETE'S QB SITE REINSTATED

The ever-popular Pete's QB Site, which had been shut down by the monolithic entities at Hypermart, finally became reasonable and allowed the site to be reinstated. Pete's site had been notorious for honest reviews and up-to-date scene news. When a jealous newbie coder got a bad review on their weak, inferior, useless product, they decided to report to Hypermart the fact that Pete's site was distributing illegal copies of QuickBASIC 4.5, causing the shutdown. Throughout what seemed like months of emails and waiting in vain, Hypermart finally came to their senses and reversed their decision. Smart move, Hypermart. By reinstating his site, you avoided a bum rush of angry QBers.

Back 2 Top



Making a TRUE Pixel Scrolling Engine at Tile Scrolling Speeds

The common QB RPG does NOT have true pixel scrolling when it boasts that it does. True pixel scrolling uses the same logic and theory as a tile scrolling engine. Most of these "pixel" scrollers are merely routines that are tile by tile but the screen is "scrolled" via something like DQB/Dash and there is no actual pixel movement going on. What is happening is that it's a fancy shmancy way of screwing around with vid memory but doing the same exact thing as a tile scrolling engine. True pixel scrolling is not screwing with video memory but is actually updating at the given X,Y coordinate. It's constantly updating, and does not "Scroll" the screen. TRUE pixel scrolling is actually faster than this video ram scrolling method. Also, scrolling the video ram does not allow things like tile animation and such (a tile animation formula will be shown in this article). This can be performed with any language where you have made a clipping put routine. Here is an example of a TRUE pixel scrolling engine.

(Start of example psuedo code)

SUB ShowMap (MapX, MapY)

MapSizeX=(127)*16        'Define these in some other SUB, these are here for notation
MapSizeY=(127)*16        'This is for a 127 by 127 map (128x128 if you add in the 0)

'MapX and MapY are the exact pixel locations to update from.  They center the image onto that
'pixel which is defined in MapX, MapY.  So if you want to update at Map(1,1), MapX would be 16
'and MapY would be 16.

ShowMapx = MapX - 160    'These 2 lines here center the camera.
ShowMapy = MapY - 96


IF ShowMapx < 0 THEN ShowMapx = 0   'If the camera is off the map in the negative area, recenter
IF ShowMapy < 0 THEN ShowMapy = 0   'it at 0,0
IF ShowMapx > (MapSizeX-160) then ShowMapX=(MapSizeX-160)   'if the camera is too far, clip it at 
							    'the max point
IF ShowMapy > (MapSizeY-96) then ShowMapY=(MapSizeY-96)

PixelMapX = ShowMapx \ 16                'Does an integer divide converting the number to its t*t
					 'form
PixelMapOffsetX = ShowMapx AND 15        'These lines here tell the routine where to start 
PixelMapy = ShowMapy \ 16                'plotting.
PixelMapOffsetY = ShowMapy AND 15 

PositionX = -PixelMapOffsetX
PositionY = -PixelMapOffsetY
IF PositionX < 0 THEN MaxX = 20 ELSE MaxX = 19   'If the sprites are clipped, we must put extra
IF PositionY < 0 THEN MaxY = 13 ELSE MaxY = 12   'sprites in order to place the map without 
						 'holes in the top/bottom/sides
FOR LoopMapy = 0 TO MaxY
FOR LoopMapx = 0 TO MaxX

	til=map(PixelMapX+LoopMapX,PixelMapY+LoopMapY)  

IF anim(til).frames > 1 THEN til = til + ((frames# \ anim(til).delay) MOD (anim(til).frames))


'This above line here does tile animation for you.  It infinitely loops (with a variable frame
'delay) any number of tiles you want.  So, Tile 4 has a frame count of 4 with a delay of 3.
'Every 3rd frame, we show the next tile in the loop.  When the animation gets to the last frame,
'it uses MOD to go back to the beginning.  Tile animation done VERY quickly with only 1 line.


	putSprite PositionX, PositionY, Tiles(130*til), Solid

'This PutSprite routine must be a clipped put routine.  Whether or not it is pure QB or not is 
'up to you, but an ASM routine would work better. 130 is the amount of bytes for a 16*16 tile.  
'This way you don't have to do 100 stupid Select Cases in your main loop which is VERY slow.

	PositionX = PositionX + 16
NEXT
 PositionX = -PixelMapOffsetX
 PositionY = PositionY + 16
NEXT LoopMapy

frames#=frames#+1          'Add 1 to the amount of frames we have shown (useful in counting fps)
			   'and needed for the tile animation routine above.  

END SUB
(end of code)

That is how a true pixel scrolling routine works. It is not "scrolling" the screen in any sense of the word, but merely moving the camera and updating the position of what it "Sees". This is merely psuedo code and should not be implemented into your game. However, the code will work if you adapt it to your engine, and be wary of possible errors. This is a routine that will work for any language (if properly adapted).

By QbProgger

Back 2 Top



Secret ASM tricks for QB

Hello people!

Since I am about to totally retire from the QB scene, 4 years of QB is about enough for me, I thought I should pass this knowledge on to the who ever wants to follow my footsteps. This is "secret" information that I've gathered through trial and error, disassembly and a little bit of common sense. But first allow me:

If you...
1. dont know asm
2. dont know what the hell I am talking about
3. dont know how to apply this info
4. ever need help with this
5. intend to use this information to produce yet another bad product
6. wont put my name in the credits (yes I can tell!)
...then scroll down to the next article!

I assume you use MASM, the commercial version, not the free one, and you know your way around rarely used meta commands. And I assume that you have all basic info on parameter passing etc.

Some of these functions doesnt necessarily work in a .QLB, some may require linking while compiling. I assume you know how to do that.

RETRIEVE DEF SEG SEGMENT

First trick is how to retrieve the DEF SEG'ed segment. A version can be found in the excellent ABC packets, that i submitted ages ago.

Note: I have found this to work in quick libraries!

First, declare the global (DGROUP) segment that QB uses. This is common to use in all functions to use that retrieves this info. Without it the linker wouldnt know what you are talking about.

CODE  SEGMENT WORD PUBLIC USE16 'CODE'
CODE  ENDS

_BSS  SEGMENT WORD PUBLIC USE16 'DATA'
_BSS  ENDS

_DATA SEGMENT WORD PUBLIC USE16 'DATA'
_DATA ENDS


DGROUP  GROUP _BSS

EXTRN   b$seg:WORD	; Tell linker we want to use this variable.
PUBLIC	MyRoutine	; Tell linker here is our routine

CODE SEGMENT
MyRoutine:
	mov ax, b$seg
	retf
CODE ENDS
END

Now declare in a basic file

DECLARE FUNCTION MyRoutine AS INTEGER

DEF SEG = &HA000
a% = MyRoutine
PRINT HEX$(a%)

a% should now be &HA000. It worked for me!

RETRIEVE VARIOUS SCREEN INFO

Second trick, how to retrieve the current screen mode information. This one is basically like the above, except a different variable.

* Warning * This does not work in a Quick library!

[ same as above ]

EXTRN b$ScreenMode:BYTE			; Current screen mode  (0,..,13)
EXTRN b$HorzRes:WORD			; Horizontal resolution (320,..,640)
EXTRN b$VertRes:WORD			; Vertical resolution (200,..,480)
EXTRN b$CharColor:BYTE			; Character color
EXTRN b$BFColors:WORD			; Character colors e.x:
					; AH = Background, AL = Foreground
EXTRN b$ForeColor:BYTE			; Character foreground color
EXTRN b$BackColor:BYTE			; Character background color

b$CharColor is a "special" case compared to the others above. The highnibble is the background color, the lownibble is foreground. The funny thing is, b$BackColor has the background color too, but no extra twiddling is necessary, and b$ForeColor has the foreground color. The use of b$CharColor is primarily assembly usage, as it requires shifting etc. To convert Foreground, Background colors to b$CharColor do this:

(Background*2^4)+ForeGround

Or in assembly terms:

mov al, Background
shl al, 4
xor al, Foreground

That is all for now, time prohibits me from writing more, but if I get any positive feedback or time, I will write about more, and only for QB on Acid!

This article is copyrighted by Sten Daniel Sørsdal, 1999.
You may not publish or copy this without my expressed written permission!

Back 2 Top



Past Idiocy In Action

Editor's Note:This was originally written a few months ago, when QB:TM was still being maintained. As such, it is out of date, but nonetheless expresses the harsh reality of most online zine attempts to kiss butt. This was sent to me, as well as posted on the sender's website. Read, and feel lucky we don't operate this way.

Greetings!

This column is going to be different then any other that I've written, I'm going to take this opportunity to state a few things that have been ticking me off. A few weeks ago, I E-Mailed the person who runs "QBasic: The Magazine", Zkman. I made a simple request which was to do a preview of Kids of Karendow, his response, and I quote, "I dun think I'll be able to do a preview of your game, as I usually only do that for projects that qb:tm readers have a lot of interest in or that have had a demo already out. I'll add ya to the Visionaries Exchange though." I responded to this by asking, "Who decides what the QB:tm readers are interested in?" and this is what he said, "Well, pretty much me, the ppl that email me with a request for more info on somethin, and the other writers for the mag. Mostly I only cover games in the Upcoming Games section except for "big" games, y'know, like DA2." Take note that he said "Pretty much me" as in he decides what the public is interested in.

I asked him if he had ever played Kids of Karendow and he responded by saying, "yeah, I did a while ago, it didn't look that bad. But, like I said before, I *rarely* do full previews, y'know? Like, I've turned down offers for full previews of games like Of Hell and Magic 2, Peanut Patrol 2, Sypharage, and a few other not-too-shabby themselves games. I'll include some info in upcoming games, though."

Now this message had some redeeming qualities, however, he himself said he only reviews "big" name games. The question I have for him is why? Why not give the "little guys" a fair chance too? Does he think that the "big" games are the only ones the reader's are interested in? I doubt that, I believe it's more what he's interested in then anything else. Whatever makes his little magazine more popular, in his own opinion, is what is be put in it. Notice that the tutorials, in his magazine, are only put in by those who have a big name in the QB community, the perfect example is the tutorials that DarkDread wrote for his magazine. I have nothing against DarkDread, infact he is an idol of mine. Never the less, DarkDread is a big name in the QB community and I believe this proves my point.

 

'Mostly I only cover games in the Upcoming Games section except for "big" games, y'know, like DA2...I've turned down offers for full previews of games like Of Hell and Magic 2, Peanut Patrol 2, Sypharage, and a few other not-too-shabby themselves games.'

Zkman

I'd like your thoughts, you can e-mail me at bignose48@hotmail.com or you can even send me a message in ICQ my # is 44492217. Thanks for reading.

By Big Nose of Phat Kids

Back 2 Top



Creating your own library

Well, yesterday Nekrophidius asked me to write an article for the new QB on Acid Magazine. So here it is. Direct all flames to FlySwat99@hotmail.com because I am gonna write about...Libraries!

Many people have wondered how to link other languages into Quickbasic. Some think it is not possible but to my knowledge C, Fortran, and of course ASM of been succesfully intergrated with QB code. To do this you need to compile this code into a library.

To demonstrate how we are going to make a mini library that does two things:

1. Sets the Screen Mode to Mode 0013h (Screen 13)
2. Sets the Screen Mode back to 003h (Screen 0)

Here is the ASM source code to this library:

.MODEL LARGE, BASIC

.386

.DATA

.CODE

PUBLIC InitVGA

InitVGA PROC                                      

        MOV     AX, 0013h			; Put 0013h into AX
        INT     10h				; Call Interrupt 10

InitVGA ENDP

PUBLIC InitText

InitText PROC                                      
	
	MOV AX, 0003h				; Put 0003h into AX
	INT 10h					; Call Interrupt 10
	
InitText ENDP

END

I am not going in depth on how exactly the above code works but I may in my next article. So assuming you cut that code out and compiled it using MASM or TASM into .obj code we can go on.

Now that we have our object code we need to convert it into a library. So we run our handy Lib utility that comes with Quickbasic 4.5 .

C:\qb45>lib

Microsoft (R) Library Manager  Version 3.14
Copyright (C) Microsoft Corp 1983-1988.  All rights reserved.

Library name:Mylib
Library does not exist.  Create? (y/n) y
Operations:Lib.obj
List file:nul

And then we need to link it into a QuickLibrary so we can use it from QB's IDE.

C:\qb45>link /q /st:300 Mylib.lib

Microsoft (R) Overlay Linker  Versio
Copyright (C) Microsoft Corp 1983-19

Run File [MYLIB.QLB]:
List File [NUL.MAP]:
Libraries [.LIB]: bqlb45.lib qb.lib

And there we have it. A working Quickbasic library. But we have one final set to do before we can use the library.

Open up QB with your library loaded (QB /L Mylib) and type these lines in:

Declare Sub InitVGA ()
Declare Sub InitText ()

Save the file as Mylib.bi and create a new file. In this file type:

'$Dynamic
'$include: 'mylib.bi'

and voila! You can now use the functions in your library. Note that you do not have to put your declarations in the bi file if your library is small like this one but I recommend doing it this way to keep your code easily readable.

Next issue I plan on focusing on how to write your own graphics library in ASM so stay tuned.

By FlySwat99

Back 2 Top



QB And Its Music

That should be subtitled "and its lack of as well", for this is the basis of this article. I'll cut to the chase, as I do in every article I write.

How many games have you downloaded in the last two or so years, written in QB, that do not feature background music? For me, it's about 85%. And I download a lot of games made in QB, since I believe that just because it's QB doesn't give you an excuse to slack off on game development. Apparently these clowns believe it does give them an excuse to slack off, and therefore they do. Is it laziness? Lack of resources? Predetermined views of limitation? Or are they just not educated? It can be one or all of the four.

Many moons ago, there was a game called "TheGame". Quite simple. It was an RPG, filled with nice graphics. No real game to it, but it looked nice. A little slow, but it looked nice. However, it only looked nice...it had no music and nothing but nice graphics. I had it on my harddrive maybe twenty minutes. Now, around the same time, a game known as Blackness appeared. It had nice graphics. No real game to it, it was just as new as "TheGame" was. However, it had excellent music. I still own this game.

Let's look at why music is needed in a game. And feel free to disagree to your heart's content, since ignorance is truly bliss, but the truth speaks louder than the music that pumps out of the world's best games.

Music speaks directly to the soul.
Nothing is more powerful than a good piece of music. No matter how limited the technology. Watch a movie, for example. When a scene has a particularly emotional part, whether it be intensity, anger, sadness, or despair, listen closely...the music you hear is designed to instill the emotion you feel. Try turning the volume off. Does the feeling go away? Does it become less powerful? Of course it does. Why? Because suddenly, your emotions are not receiving extra manipulation. The same goes for video games. Take Doom for example, one of my personal favourite games. Without the music, it just seems ordinary. Add the music, and the intensity rises. A fast piece will often give the sense of urgency or importance. A slow piece will often give a feeling of suspense or sadness. Those soundtracks are developed to do that.

Music makes the game seem more professional.
A good solid soundtrack seems to make a game complete, therefore raising its overall quality. Think back over the last ten to fifteen years...how many commercial games have you seen without music in them? I personally count zero. Zip. Nada. None at all. They ALL had music. Because they know that it is a requirement to enhance your enjoyment of the product. However, there are times where this concept actually backfires. If the music does not fit the expected mood, if it does not successfully bend the human psyche to its will, or if it is so badly composed that it earns the name "muzak", then it is not doing its job. In this case, the game becomes less professional. As such, very few commercial games are released without a perfect soundtrack.

Music is the most rememberable part of a game.
How many people remember the music for the first level of Super Mario Bros.? How about the boss soundtrack from Sonic The Hedgehog? Or even the title music for Druid II on the old Commodore 64? Those who have played these games remember these songs well...even if they've forgotten the games themselves. This is a direct result of the music having such a strong influence on the whole product. Even if the technology is not up-to-par, we can still remember the artistic "beeps" that poured out of the old NES for example.

Good sound effects also help.
This is also a major factor, although not quite as high on the scale, it's still important. If you've played Doom, you know that when you heard the bad guys' growl, you instantly looked around, and if you saw him, you'd cut him down in a hail of bullets. That's power. Whereas music has the power to set the mood, proper sound effects can take control of your actions and bend them to their own will. Had those sounds not been in the game, you might not have seen the monsters. They might have walked right past you, or snuck up behind you and handed your rearend to you. However, since the sounds were there, it made you more reactive, and therefore more "controlled by the sound".

QB can do these things.
I never want to hear how QB is too limited to achieve such glorious results. There are several good products out there to enhance QB's sound capabilities. My personal favourite choice is Bells Whistles and Sound Boards, also known as BWSB. BWSB is a music library that plays MOD derivatives, and can handle sound effects as well. We use it in every production, since it is quite a superior product. There is also QMidi, a nice SBMIDI API package, which allows you to make use of MIDI files. HSC is an FM-based system, its sound quality is not as good as that of BWSB or a hadrware-driven QMidi setup, but is better than no sound at all. Ruckus is a good alternative to the overhead of BWSB. Even DirectQB and Future.Library come with built-in sound routines that can serve as an excellent basis for writing a music and sound effects system. Plus, with all the resources available on the internet about sound, there is simply no excuse for the silence anymore.

In conclusion, it should be noted that this is one of the many areas that QB has always been considered "limited". However, I'm not about accepting limits...I'm about smashing limits, and me and many like me have been doing so successfully for many years now. It's time for the rest of them to step forward and do the same.

By Nekrophidius

Back 2 Top



SVGAQB Tutorial #2

INTRODUCTION

*ahem* Welcome to Issue 2 of the ZSVGA Article. Last issue, I explained how to get the ZSVGA Lib into your QB program and how to use basic graphical functions. This issue I'll explain how to use page flipping and other functions of ZSVGA.

DRAWING STRINGS

It can draw strings on the screen using one simple function, DrwString. The syntax of the function works like this:

DrwString (MODE%, FCOLOR%, BCOLOR%, STRING$, X%, Y%)

Here is an example how to use this command using an ol' classic string:

NULL = WHICHVGA
NULL = Res640
DrwString 1, 31, 0, "HELLO WORLD!", 0, 0)
DrwString 1, 31, 0, "Press any key to end...", 0, 12)
WHILE INKEY$ = "": WEND
NULL = ResText

MICE

Yes, you guessed it. ZSVGA has mouse functions. The first function that I will explain is WHICHMOUSE. The function will return 0 if no Microsoft compatible mouse is available. Otherwise, it will return the number of buttons on your mouse. This function must be called before using any of the other mouse functions. Here is an example of how the function should be used:

IF WHICHMOUSE = 0 THEN PRINT "No mouse available. Aborting...": END

Now, two more functions are required to get the mouse onto the screen and working. First we must set the desired screen mode. Then call MOUSEENTER and MOUSESHOW. It is required that you run MOUSEENTER as it starts up all the mouse functions. For example:

NULL = RES640
MOUSEENTER
MOUSESHOW

That should get the mouse up onto the screen. Now, you can get the current status of the mouse using one function. It is called MOUSESTATUS. The syntax goes like this:

MOUSESTATUS (X%, Y%, MOUSEBUTS%)

Here is an example on how to use the function:

DO
MouseStaus X%, Y%, MOUSEBUTS%
DrwString 1, 31, 0, "X:" + STR$(X%) + "Y:" + STR$(Y%) + "Mouse Buttons:" + STR%(MOUSEBUTS%), 0, 0
LOOP

CLEARING THE SCREEN

To clear the screen use the function FILLPAGE. The syntax is like this:

FILLPAGE (Colour%)

PAGE FLIPPING

What is page flipping? Well, it's basically an alternative to using graphic buffering. Don't know what the heck I'm talking about? Well, if you tried to create an animation by putting a frame, clearing the screen, putting the next frame, and so on. This would be very flickerly even with vertical synch. The solution is to use page flipping or double buffering. However, in SVGA, double buffering can be slow and suck up lotsa a memory. Two bad things at once, not good! Anyway, page flipping mainly works like this:

- Set Active Page 0
- Clear the page, if needed
- Put the graphics
- Display Page 0
- Set Active Page 1
- Clear the page, if needed
- Put the graphics
- Display Page 1
- And repeat...

Now...There are two functions for using page flipping. They are: PAGEACTIVE AND PAGEDISPLAY. Here is the syntax of both:

PAGEACTIVE (PageNum%)
PAGEDISPLAY (X%, Y%, PageNum%)

Now, PageNum% is obviously the page in the video memory you want. X% and Y% are the coordinate to place at top, left of the display, not really something to worry about just use 0 for both. Now, Here is an example on how to use page flipping, a star field to be exact. =]

DEFINT A-Z 'Default types are integers
'$INCLUDE: 'SVGABC.BI'

TYPE StarType              'Define our Star type
 X             AS INTEGER  'X location of star
 Y             AS INTEGER  'Y location of star
 Speed         AS INTEGER  'Speed of star scrolling, for paralax scroll
 Colour        AS INTEGER  'Color of the star
END TYPE

DIM Star(1 TO 250) AS StarType 'Define the memory for 250 stars

IF WHICHVGA = 0 THEN PRINT "SVGA card not detected!": END
IF RES640 = 0 THEN PRINT "640x480x256 mode is not available!": END

RANDOMIZE TIMER 'Seed the random number generator

FOR i = 1 TO 250 'Generate our stars
Star(i).x = INT(RND * 639) + 1
Star(i).y = INT(RND * 478) + 1
Star(i).Speed = INT(RND * 4) + 1
Star(i).Colour = INT(30 - 26)*RND + 26)
NEXT i

DO 'Begin our loop
NULL = PAGEACTIVE(PageFlip) 'Set our active page
FillPage 0 'Clear the page

FOR i = 1 TO 250 'Put and check all stars
Star(i).Y = Star(i).Y + Star(i).Speed
DrwPoint 1, Star(i).Colour, Star(i).X, Star(i).Y
IF Star(i).Y > 639 THEN 'If star goes off screen, create a new one!
 Star(i).Y = 0
 Star(i).x = INT(RND * 639) + 1
 Star(i).Speed = INT(RND * 4) + 1
 Star(i).Colour = INT(30 - 26)*RND + 26)
END IF
NEXT i

NULL = PAGEDISPLAY(0, 0, PageFlip) 'Display our page
PageFlip = PageFlip + 1            'Change the current page
IF PageFlip > 1 THEN PageFlip = 0

LOOP 'End our loop

THE END

That's it for this ZSVGA Article. Next issue, I'll explain even more graphic functions and get into XMS memory. CYA! =]

CONTACTING ME
Here's some ways to annoy me:

ICQ: 18050607
Email: DigitalDude@BizzareCreations.com
IM: BBTMG512

You can usually find me on IRC in #quickbasic, on Efnet. I use the nick DigitlDud.

By Digital Dude

Back 2 Top



GAME REVIEW:

Cataclysm Eve


Okay folks, first of all, this isn't a final version of the game that I reviewed, simply an early alpha version. Even as an alpha it is pretty impressive. I'll give the rundown on the pros and cons of this early alpha.

PROS

Nice graphics.
The graphical content is very nice. From the nicely drawn castle walls to the detailed trees, this is good stuff. It doesn't touch the artwork in Syraphage, but one can tell that it was probably inspired by that game. The character sprite is very cool and well-drawn, and if you don't move him for awhile, he gets mad and throws his arms up and down. Saw it once and laughed out of my chair. Pretty nice textboxes too.
Moving score.
The music is very good. Although the current alpha contains only two pieces of music so far, it is good music and fits the game well. Some of it suffers from clicking, but this will probably be fixed for the real thing. All in all, so far a nice soundtrack.
True pixelscrolling.
This doesn't have T*P scrolling as many RPGs have, it moves pixel by pixel in a free fashion. This is extremely rare, and very welcomed to a kind of game like this. It would do well with 8-way movement, and maybe he'll implement it, but even if he doesn't, the movement system shows promise.

CONS

Quirky controls.
The control is seriously whacked. I assume it still uses the standard QB routines for this, but I don't know for sure. One funny thing is when you talk to a person or an object, the character tends to fly really fast several tile spaces away. I even managed to throw the screen off-balance in one area.

Strange effects.
This is probably on purpose...I assume it's meant to introduce battles at a later time, but as you're walking around in certain areas, the screen becomes flooded with coloured lines...then disappears! It reappears shortly afterwards, but boy is it annoying...

THE OBVIOUS

No storyline.
It's an alpha. It doesn't NEED a storyline yet. Patience, grasshopper.

All in all, this is the start of what could become an impressive RPG. Right now it doesn't really have much to it; he did add a lot of areas to explore, but that doesn't make a full game. Although being told you cannot open a treasure chest because "That treasure belongs to someone!" is bloody hilarious =)
Cataclysm Eve has no known final release date.

Game by Digital Paradox Software

Review by Nekrophidius

Would you like your game reviewed here? Just email us!

Back 2 Top



QUOTE OF THE MONTH:

LORDQB

Spoken sometime in the late part of November on EfNet #quickbasic...
"Who wants to see my metaballs?" (laughter shook the heavens)

He was speaking of the nature of the graphical demo with which he would have used in the coding war against Robert Lee. Although that's not what it sounded like to us!

Back 2 Top



THE GALLERY

Restricted Area

This is a new game brought to you by Master Creating, a German coding group. They are the makers of Shadow of Power. These guys have been scrutinized as of late for their use of ripped graphics...anyways, take a look at this screenshot. The character is for sure their style.

Back 2 Top



RECOMMENDED VIEWING:

RECOMMENDED SITES

WOTSIT.ORG
File formats and more.

PROGRAMMER'S HEAVEN
TONS of example code in all languages, a great source of information.

QUICKBASIC RPGS
Follow the latest news on the QBRPG scene. Almost 100 RPGs available for download, all done in QB.

THE ALL BASIC CODE ARCHIVES
If it's BASIC, they got it. Thousands of downloads for all kinds of BASIC.

Back 2 Top



THE END

Another issue in the books. In such a short period of time, we've covered more ground than 95% of the online QB zines would dare touch, and we've had a hell of a time doing it. But sadly, we must end our magazine. Yup, this here's the last one. Yup. No more.....hrm, if ya bought that, you're more gullible than the suckers who take offense to our work. Going somewhere? Us? BWUAHAHAHAHAHAAAAAHHHH!!!!! We will persist, and there's nothing anybody can do about it! You cannot beat us...so join us! Send us your letters, articles, reviews, screenshots, thoughts, opinions, anything!

Thanks for reading, and prepare for the next issue, out December 8th!

Send us Email