What is CoolBasic
CoolBasic is a 2D game engine for Windows that comes with its own BASIC like scripting language. The product consists of a code editor, user manual and simple examples to get you started with game making. Code is compiled into an EXE.
CoolBasic was made in 2002-2005 and has not received updates since. While outdated, CoolBasic is still remembered as an easy-to-use tool that ignited many people's interest in programming. Our core design principles were:
- It must be simple and easy to learn
- It must have a complete user manual
- It must be free and available for anyone
- It must be productive, you get concrete things on screen with little effort
CoolBasic started with a Finnish community, but back in the day there were big plans going international. There was supposed to be English documentation and discussion forums. Sadly due to life situation of the developer that never happened.
Over the years there have been many requests to revitalize the project. The BASIC programming language suits very well for beginners, and when that is combined with a fairly robust game engine you get a product with which it's fun to learn coding.
Technology and market is changing more rapidly than ever before, and small companies have a hard time catching up with products like Unity. That is one of the main reasons why we're reluctant to rewrite CoolBasic into a full-featured game making solution; the bar is set so high that it'll be very hard to compete.
However, those game engines / studios may be very productive tools but they're not that good for learning how to start programming. Maybe CoolBasic shouldn't even try competing with performance or beasty graphics, but concentrate on its strengths i.e be the entry level.
Nevertheless, recreating a modern version of CoolBasic is still a huge amount of work. It would need a new game engine, new compiler, new editor, and documentation written from scratch.
For historical purposes, we want to keep the old 2005 version still available for download. Just know that it may or may not run properly on modern Windows.
Note: The legacy installer was made when Windows XP was current. By default it'll install the program under the Program Files folder, which is problematic because newer Windows versions don't allow writing there. CoolBasic attempts to compile executables in the same folder where the editor is, so you should choose a different folder in the installer.
Some anti-virus software are known to alert a false positive from installed CoolBasic binaries.
Despite the fact that nothing has happened for a very long time, we don't want to declare closure still. Previous versions of this website did set out some plans, and there has actually been more than one attempt to reboot the project. In retrospect, we probably should have refrained from publishing any information until we were absolutely certain that the reboot was going to happen.
What stopped those attempts then? One reason, is market domination by commercial game engines that are also very accessible; something that wasn't a thing back in 2004. What purpose would CoolBasic serve if it can't compete technologically? If you take a look at products like Blitz, DarkBASIC or Monkey X, they are struggling too. This doubtfulness arguably hinders motivation. The other reason is the required time and effort that goes into making a new CoolBasic.
Does that mean we'll never see a new CoolBasic? Absolutely not. But I wouldn't keep expectations up either. The aforementioned products failed because they couldn't keep up with the demand (3D, x-platform) while still being commercial products. CoolBasic has never been a commercial product though, which would make it significantly more accessible to beginner programmers who desire making 2D games.
If we accept and embrace the facts that: a) CoolBasic's target group is simply different, b) We shouldn't try to be the complete game making solution, and c) Raw performance in both graphics and general execution speed doesn't matter for a product like this, then it's possible that one day we might have a modernized, rewritten CoolBasic.
Even as CoolBasic will probably never be a serious competitor in game making industry, there is actually a new market emerging - the educational aspect. And that is worth considering...
I've always liked programming. It started with QBASIC when I was in elementary school, and continued with Visual Basic by the end of middleschool. Can you guess what I was coding? Yeah, games of course! I've seen the ending of the DOS era (and oh boy some of those games were good), and witnessed the big change into Windows. Games like Quake and GTA were shaping the game industry back then. It was my dream to being able to make my own game someday. But I never could've predicted that in the future almost anyone actually can.
I was in high school when I came across with this product called DarkBASIC. It was the most amazing thing ever. A code editor, featuring its own BASIC programming language (which I was coincidentally already familiar with), and a freaking game engine! I could write code like
PASTE SPRITE 1,100,100, hit F5, and behold there was graphics on my screen! Better yet, DarkBASIC had a 3D engine, and suddenly my game making abilities rose up in the sky - and with ease. I managed to create quite a few 3D games with DarkBASIC, none of which have survived to this day though. Programming had never been so much fun and productive for me. I even convinced my dad to purchase DB Pro for me.
DarkBASIC was an interpreted language (although the Pro version later changed that). The speed was never an issue in my games, but rumors spread within the DB community that there's a slightly faster alternative, BlitzBasic. The two were direct competitors to each other and Blitz3D had been released around the same time as DarkBASIC. B3D seemed a bit more polished, and I think that it was the main motivator for the DB team to introduce DB Pro. Which was then a motivator for the Blitz team to introduce Blitz Plus and Blitz Max. I personally grew to love both DB and B3D.
Today both Blitz3D and DarkBASIC Pro are open source, and hosted on Github.
When I was enjoying my time with DarkBASIC, I also happened to read an article from Mikrobitti magazine that described a game where one would code a bot AI using Java. And then two bots would fight. Both players would have to submit their source code then to be compiled into an executable where the actual match took place. Not the most practical way of "playing", but I found the idea very interesting. So I started picturing this game in my head, a bot fighting game where the player would create an AI for his bot. I started researching how to implement scripting...
The first implementation of my own "interpreter" was messy, but it could evaluate mathematical expressions like
((a + 1) * 5). And then someone mentioned the magic word "postfix" on DarkBASIC forums. That was the key, the enabler! I found an RPN evaluator sample code from the Internet and incorporated it in my bot scripting engine. The project's velocity increased greatly, and as I noticed how it was shaping up into a real game, I came up with a name. Gigabot was born. It was using DarkBASIC as the game engine, and it even contained 3D models.
A month or so into the project I started thinking... could this project be evolved into something even greater. Something like DarkBASIC or BlitzBasic. What if my scripting engine could be used to power a game programming tool so that other people could start making games for fun, too. But there was a technical obstacle; as DarkBASIC was interpreted, building another interpreter on top of it would simply be too slow. DB Pro had just come out and was still a bit buggy. So I switched to Blitz3D and reimplemented the whole scripting runtime engine. Using my Visual Basic skills, I also made a separate code editor & compiler. An unnamed game programming tool was born (later to be known as CoolBasic).
During those years, I was an active member of several online communities. In addition to DB and Blitz programming forums, I found pelisivut.org, a Finnish gaming community. The site owner maintained a growing list of freeware games, and as a game maker myself, I quickly gained reputation on the forums. Ranked up all the way to an Admin, in fact.
At the same time, my game programming tool development was coming along nicely. I decided to announce the project in pelisivut.org because I felt it was large enough of a community to find enough interested people to test my work. But the product needed a name. So I set up a naming competition where the forum users could throw out ideas for the name. I remember considering "StarBasic" until someone (whose name I can't remember, sorry) suggested "CoolBasic". To my surprise, that name was not taken. And it was the perfect name - simple and easy to remember.
So I got my product name and I got my testers. It didn't take long to "finish the brand" i.e take the name into use everywhere, as well as iron out the most obvious bugs. Also the user manual needed finishing, and let me tell you, that was a huge job. The manual itself took months to write (syntax highlighting of the code snippets was done by hand), and I also needed to provide some more complete code samples to get people started with the different concepts. Knowing how the DarkBASIC and Blitz user manuals looked, I simply wanted to not only be on par, but exceed them in documentation quality.
To really battle test the compiler and runtime engine, I decided to code a complete "mini game", spanning hundred of lines of code. The idea was to make sure that the system scales and that there were no show-stopping bugs. The game was a top-down shooter featuring different weapons and even bots. It used a tilemap system for levels, so I also created a special tilemap editor, "Tilester", also done in Blitz3D.
At that point the CoolBasic website was hosted on mbnet.fi and forums were hosted on forumer.com (running Invision Power Board 1.3). Soon after the name "CoolBasic" was chosen, I registered the domain coolbasic.com. I'm not sure if it was in 2003 or 2004 when a community member "gifted" me the ice cube logo. That same logo has been in use in various places ever since. Big thank you to that guy.
After all the boring manual stuff was done, development speed increased. I believe we had five or so Beta builds (to the old style CoolBasic), and a growing community. At that point CoolBasic offered basic functionality to draw images, play sound, handle input, manage memory, and write files. The API it provided resembled quite a bit of BlitzBasic, though...
Today pelisivut.org still exists but its forums are gone.
To my surprise CoolBasic was mentioned in Mikrobitti magazine. Back then they used to gather a handful of freeware/shareware apps for a small review in every issue. It was kind of cool because I had done basically zero advertisement since CoolBasic was still in Beta. This publicity gave me a somewhat noticeable spike of new users.
Then PlayBasic entered the scene. It was a rivaling, yet commercial product that was also created from the inspiration set off by DarkBASIC. Same as me. I even knew the developer, and I remember having some technical discussion with him about scripting on the DarkBASIC forums. Underwaredesign (the company behind PlayBasic) was later purchased by The Game Creators (the rebranded DarkBASIC Software). It was becoming sort of crowded on the BASIC language market for game making. Still, CoolBasic was virtually the only one that was completely free.
It didn't take long until someone on Blitz forums found out about CoolBasic. It caused an outrage because CoolBasic command sets resembled too much to that of BlitzBasic's. CoolBasic was seen as a threat to BlitzBasic/Blitz3D income. Which is a bit silly because Blitz games compiled into machine code (whereas CoolBasic was interpreted and thus much slower), and Blitz3D still had much richer command set, let alone 3D capabilities. Maybe CoolBasic set good enough of a first impression that it was considered a serious competitor to Blitz. While that's sort of a (questionable) compliment, I did agree that CoolBasic was too similar to BlitzBasic (Blitz3D not so much).
This set out a new direction for CoolBasic. I decided to redesign the command sets, to make it less like Blitz. I borrowed some ideas from DarkBASIC, and overhauled the old sprite system into a hybrid from both worlds, the CoolBasic object system. You no longer had to manually redraw the images every frame, but manage them as persistent objects within the game world. Alongside objects also camera was introduced. Combined with tilemaps and new object based collision system, you could actually start building games in a much more streamlined and convenient way than before the overhaul. So I guess that the Blitz scandal ended up being a good thing overall.
In 2005 I carried out my military service, so the first half of the year was slow for CoolBasic development. I remember coding something every now and then though.
I'm not certain if it was in 2004 or 2005, but I rewrote the old VB6 code editor in PureBasic. This allowed me to use the awesome Scintilla editor control (which is also used by Notepad++, for example). As a result, the CoolBasic compiler now existed as a separate executable.
In June 2005, CoolBasic was featured in Enter magazine.
Rest of the year was busy on life issues like entrance examination, and later studies in the Savonia University of Applied Sciences. In 2006 I participated in a game making competition by Enter magazine, and won the 1st price (with a 3D FPS game called "Cool Deathmatch"). CoolBasic development however, went silent for the next couple of years.
I wasn't aware of this at the time, but in 2007 a forum member named "Dibalo" introduced his own BASIC programming language called "ChaosBasic". It was also, like CoolBasic, aimed at game making.
The CoolBasic community forums had run Invision Powerboard until now. We weren't quite happy about the IPB 2.0 upgrade, and a decision was made to migrate to phpBB. Unfortunately this wiped the forums completely, and prior posts were no longer available; a piece of history was gone forever.
I landed a programming job immediately after I finished my studies (however I still hadn't done my thesis). Yet another page has turned in my life, and I wasn't keeping too close an eye on what's going on in CoolBasic community. Until one day when I learned about ChaosBasic...
Remember the rivalry between DarkBASIC and Blitz? They kept introducing new products to gain competitive edge over each other. Nothing is more motivating than a rival. With ChaosBasic in the picture, the same thing happened to CoolBasic (and me). I couldn't realistically catch up with TGC or Blitz, but ChaosBasic was now in the same ballpark with CoolBasic; a free BASIC language with a game engine. A competition.
I wasn't sure how to react at first, so I guess I saw Chaos as a threat; where I should've been flattered about the whole thing, I instead got upset. I recall crawling through the forums, trying to find any and all information about this project. Some kind of counter-plan was needed. And surely enough, a highly ambitious vision was forming in my head - something that would drag the bar so high that CoolBasic couldn't be challenged again. The plan was to actually bring CoolBasic to the same ballpark with Blitz/DB Pro, by introducing a truly OOP language similar to Visual Basic .NET. Enter CoolBasic V3!
Having familiarized myself with PureBasic (which was powering the CoolBasic editor), I chose it for implementation. I knew PureBasic was fast and small. And on paper, the compiler could've been ported to Linux as well. The real source of design principles were coming from Visual Basic.NET, though. CoolBasic V3 was supposed to feature classes and interfaces with inheritance and polymorphism. The type system borrowed from CLR types. Concept of generics (via templating). Extension methods. Even memory management was supposed to be automatic. Basically everything that the .NET framework 2.0 and Visual Basic language supported.
Today ChaosBasic is no longer available. There was no official release, but some of the "alpha" images sure looked very promising.
Despite being very ambitious, I managed to practically finish the compiler. It produced Intermediate Language very similar to what the real VB.NET compiler did. I spent countless hours inspecting decompiled sample programs' CIL code to make sure that the CoolBasic V3 compiler output matched. In theory, this IL code could further be turned into ASM and then into true machine code.
It's worth noting that I was writing the CoolBasic V3 compiler while also having a full-time job. Lots of coding back then, easily 14 hours a day. In the end, I think the compiler had 30k or so lines of PureBasic code (not including comments).
I still had my thesis undone, so I decided to make the V3 compiler my topic. The thesis took a couple of months to write, but that 130+ page book got me Degree Programme in Computer Science with the highest possible grade.
The V3 compiler, graduation, and having a job was very stressful and exhausting. But I couldn't rest, as CoolBasic V3 still needed a brand new runtime (and game engine). Having one of the most complicated components (the compiler) ready already, I was comfortable enough to make an announcement in the CoolBasic forums. Discussion exploded quickly. Amongst the alacrity, there were concerns that the planned V3 was no longer the same CoolBasic that the community had grown to love. Introducing OOP an all... one of the core values of the original CoolBasic was simplicity after all. So I started hesitating. Alienating your existing user base while trying to attract new audience is about the worst thing any product provider could do; you could end up serving to no one.
Then an idea of a rebooted CoolBasic was born. I thought that maybe CoolBasic V3 could wait and I should create a modernized version of the old CoolBasic instead, catching up technologically and also addressing the community who had been asking for updates for years. The more I thought about it the more I felt owing that to them. I'm still not sure to this day if it was a mistake, but I decided to continue with creating CoolBasic Classic and shelve V3. The "Classic" in the name was meant to differentiate from "V3" in the future when both would coexist.
CoolBasic Classic meant that everything needed written from scratch (again). Someone suggested that maybe I should assemble a team so I didn't have to make everything myself. And that's exactly what happened. I remember interviewing the candidates in IRC. I came up with an organization chart, and even coded a password-protected document storage web page in PHP where I stored the guidelines and policies as downloadable Word and Excel files. I spent hours after hours writing my plans and design principles down and putting them in the protected sub-forum only the devTeam members had access to. It was a huge effort. All that material exist on the forums today still, and I have played with the idea of opening it for everyone to see some day.
The original plan was to code everything in PureBasic; the compiler, runtime engine, code editor, all of it. But I had a problem how to make PB available for the other coders in the devTeam. So I actually went ahead, contacted the PureBasic team, and negotiated a "special deal" of annual bulk licenses. I believe we had 4 or 5 of them, and the plan was to renew them after a year (the PB team would otherwise terminate them). After all that hassle, the practical development work could finally begin. Lots of design discussion had been generated on the protected forums, too.
Using knowledge gained from the CoolBasic V3 compiler project, the Classic compiler was coming along nicely. We had a nice tech demo of the new game engine too. Rotating and scaling sprites using hardware acceleration (in contrast, the old CoolBasic used software rendering for its 2D graphics). For a moment it looked like we could actually make a true Linux release, too. Then the technical problems started emerging. We actually found bugs from PureBasic regarding how it generated machine code, and we started to question if PB was reliable enough for us. So we made a decision to code the engine in C++, which of course set us back alot. C++ was also outside of my comfort zone, and I ended up not following too closely anymore how the implementation of the engine progressed.
Then I guess the initial enthusiasm wore off and I started seeing the devTeam members more seldom in our every-second-week meetings. Which was stressful because we now had high expectations from the community and pressure to deliver. Tons of work was done, little concrete was produced (due to rewrites), and the work was starting to pile up for certain devs as others went passive. I thought to myself, and this is one of my weaknesses, that "to get things done you have to do it yourself". I too was ready to abandon PureBasic, and eventually switched to C#. Things naturally slowed down to basically no-progression levels over the year(s) and CoolBasic Classic never made it to even a Beta release.
I continued writing the compiler in C# at my own pace and was quite happy as the code was much more elegant compared to PureBasic. I was no longer concerned about a buggy compiler as .NET had established itself as a respected Microsoft platform.
I also registered the coolbasic.fi domain, although I was directing my energy at things other than CoolBasic (like a new job) more and more.
CoolBasic pops up every now and then as I hear from its former users how cool it was (no pun intended). I've made many real life friends from the forum users over the years, some of which I still meet regularly. But in 2013 something totally unexpected happened. Skrolli magazine issue 2 had an article about CoolBasic and the game making scene. I was gifted that Skrolli issue, and became absolutely filled with nostalgia. How cool it would be... to modernize CoolBasic. Just for completeness sake, as the original CoolBasic never got out of Beta.
Apparently CoolBasic has affected many people. Some of them got the very spark to start programming thanks to it. Some of them have a programming job today (also perhaps thanks to CoolBasic). I hear insipiring stories about what CoolBasic has done to their lives and careers. I always thought that even if I got one single person to develop an interest in programming with this product, then I'll be happy. It turns out I got much more than that. I know at least two cases where a school teacher has used CoolBasic in a class. Writing this story has been emotional to me, and I'm kind of amazed about the sheer amount of code and work I've put into this during all these years.
A LOT of code was written in 2008-2013, but we never released anything. And that's a bloody shame! All in all, the failure to deliver, was due to my poor project management and for being too ambitious. Time hasn't been too kind to other BASIC programming languages/products either. World is changing and programming trends are too. But is BASIC dead? I think not.