08/13/2015 11:00 PM
I started on the prototyping of Mars Explorer in GLBasic last night. I say prototyping… what I actually mean is this first version is the one I am using to do what I call developmental design. Meaning I start with a basic concept (easy in this case since it is inspired by a game from long ago) and just add stuff as I think of it. Try things out. Keep what works and drop what doesn’t. At the end I will have a game in GLBasic with two playable stages. More than that I will have everything I need (the exact game design, technical implementation design & assets) to start on the experiment of comparing Unity, Monkey X and HaxeFlixel.

Last night was mainly just thinking, some graphics work and a bit of preparation just creating the empty modules with comments at the top of each. Tonight was the actual programming.

As you probably remember Mars Explorer is inspired by the old Moon Patrol game. So I had to draw a little rover type vehicle. It is a complex object consisting of the vehicle’s frame and the tires.

With that out the way I was able to get to the important stuff… that’s right the technical design and then tonight the implementation in GLBasic.

Using the Type feature of GLBasic I whipped up a very Object Oriented program to control the buggy. While it might not look like much at this point there is a fair amount of stuff going just to make the buggy move over the terrain. This was quite simple to do. Just needed to have each wheel check the terrain tile beneath it to know where the wheel should be positioned. The average of the wheel “lift” is then used to raise and lower the frame. I spent nearly 2 hours in GLBasic on the implementation so far. Again some of that was just structure and tech design stuff.

At this point I’m just ignoring the holes. Obviously, the vehicle will crash in those eventually. That will be an easy thing to add. Probably knock it out tomorrow night.

I do like this GLBasic. It is fine programming language and I don’t need to focus on anything except just straightforward programming. Also, I do like these 3 second builds.

Anyway, this is what I have so far:

 

08/14/2015 11:25 PM
I actually managed to get a lot of time on this project today… 3 hours plus a bit of time spent on graphics work.  The first thing I did was some quick recoloring of the wheels of the rover and then knocked out some real fast and easy missile images.

Then it was time to get into the implementation again. Before doing anything new I tweaked the motion of the rover vehicle slightly. I am satisfied with the way it moves across the terrain now. Time to get on to the new stuff.

I made many updates tonight. First I created the MissileControl class (that is what I will call Types from now on when they are implemented as classes), the MissileDisplay class and the MissileManager class. I also created the Animations module and defined the very simplistic animations for firing a missile. Just a subtle effect. Noticeable if it was not there but maybe not noticeable being there. 😉

Then I created the PlayerControl class. Last night I had only created the PlayerDisplay class. Then I updated the PlayerControl class moving some of the code over from the PlayerDisplay. Next I implemented states for the player to provide support for jumping and firing missiles.

The MissileManager class manages a pool of Missile objects. It’s always better to just create all of these objects at the start of the program then it is to create and destroy objects over and over during the game.

I also managed to flesh out the infrastructure a little more in general. Basically when I develop I am always trying to consider the work that is still to be done. This way what I write today will support and even sort of lay the foundation for what I will be writing tomorrow or even next week. This is why for me in the beginning progress is slower and as time passes progress becomes faster.

Just a note here to explain a little bit more about the way I develop. For sprite objects such as the player vehicle and the missiles I created two classes for each. Each sprite object has a Control class and a Display class. The control class manages the logic of the entity as far as movement, collision checking, state management and so forth. Each display class is embedded as a field inside their control class. Just as the name implies, the display class manages the actual rendering of the object.

For simple objects such as the missiles in the work that was completed tonight, the Display class is tiny. It literally contains a single function that draws the object on the screen at the appropriate location and with the appropriate image as requested by the Control class. The main game loop uses the Draw method of the Control class which simply relays the request to its Display class.

For more complex objects such as the player’s vehicle the Display class also contains some logic. However, it is limited to display logic only. In the case of the vehicle, the logic is for determining how to draw the wheels in relation to the terrain beneath them and how to draw the vehicle’s frame in relation to the wheels.

The reason I do it this way is because it makes development much cleaner, easier to debug and enhance.

I am now at 5 hours of development time on this project. Adding in the 2.75 hours I spent developing the Tiled map loader and TileMapRender this makes a total of… well let’s just round up and say 8 hours to get to this point:

 

08/15/2015 12:28 PM
I normally wait til the end of a game project to focus on the presentation side. My view is that graphics are not nearly as important from a pure artistic quality perspective as they are from a quality of feedback perspective.

By this I mean sure make the graphics for your game very good and instead of laboring for days, weeks even months (believe it or not many people do) just trying to make the graphics look as amazing as you can… instead of that… make good quality graphics that are easily “readable”. That is the true purpose of graphics for video games. To provide feedback. Feedback such as an enemy flashing when it hits, perhaps an enemy performing some kind of telegraphing animation before it attacks. These aspects of graphics are the most important.

However, it is very important to maintain a cohesive style. Whether that style is HD high color or ultra low res low color just be sure to keep everything consistent.

To this end I just spent 30 minutes updating the graphics of the tiles and sprites in Mars Explorer. Originally, the tiles were in low res (2×2) and the sprites were drawn at 1×1. I figured I would get to it at the end and replace them all. But more importantly, this is all just a test of the development speed between different frameworks. Not a game I plan on actually releasing.

Anyway, by redrawing the sprites to have the same shapes and a lower res matching the tiles it created cohesion. That means the entire game now looks better despite the sprite graphics actually being in a lower resolution.

Then I recolored all images, the tiles and sprites, using my custom 52-color palette. This helps to provide a more artsy look to the graphics.

I was planning on doing another dev session but got busy with chores around the house and never did anything else.

However, I will do a proper game dev session tonight. In the meantime, here is the new look of Mars Explorer.

 

08/15/2015 11:48 PM
Just finished up a 90 minute development session. This time I added a Particle System (3 classes: ParticleManager, ParticleControl and ParticleDisplay), updated the PlayfieldManager class with a new method to check for a hole beneath the wheels weighting it so the player can overlap to a degree, extended the Player class with a new state to handle crashing which includes creating a particle display.

I’m still finding development in GLBasic to be a little slower than what I am used to. I think this is mainly due to the lack of auto-completion on . methods and so forth combined with the error messages not being clear as to what exactly the issue is causing the source not to compile. However, I am becoming more comfortable working in the language every dev session and consequently am getting to the point where I can translate the error message into knowing what I should look for in the code.

7 hours now. 11 if you count the time spent developing the TiledMapLoader and TileMapRender and the time spent on graphics so far. I won’t count that though because it is the kind of one-time thing you need to take care of in every development system. You basically figure it our or create it one time and then all future projects can use it. I am focusing on only how long it takes to actually develop the game inside each framework assuming you have the necessary pieces in place. Of course you should expect the first project will take more time just to get all of the tools in place.

 

08/16/2015 10:29 PM
Whew what a hot day it was here in Missouri. Got the lawn all raked to remove the grass that collected from the past few mowings. Then got the lawn all mowed. Always like the yard looking nice. But you aren’t here to listen to me talk about that stuff, are you? No. In fact, you probably don’t give a rat’s arse about that stuff.

Okay, so I spent 1.75 hours tonight working on this prototype. First I spent 15 minutes knocking out two aliens. Really I only drew one alien colored with GarsPalette52 colors and then used different colors from the same palette to recolor the same image to make the second alien. This time doesn’t count for this little experiment because whether using GLBasic, Monkey X, HaxeFlixel, Unity or whatever you always need to spend time either creating or finding art assets.

The first thing I worked on in the GLBasic implementation is the fire particles I added last night. Tweaking stuff like this takes time. I spent around 20 minutes just tweaking and trying different values. I am happy with it now.

Then I added the aliens system. Once again this consists of three classes: AlienManager, AlienControl and AlienDisplay.

Then I updated the main routine to cause the aliens to make an appearance. However, I only implemented the entrance for the aliens at this point. The bulk of my time was spent on just creating the relevant infrastructure so I should be able to easily finish the aliens control tomorrow.

Oh… just in case you are wondering… the code name for the blue alien is Dave and the other is Al.

So here we are at 8.5 hours of implementation in GLBasic:

 

08/17/2015 6:21 PM
Spent 20 minutes on lunch break today working on graphics. First, I recolored Al the alien. I noticed somehow it had ended up with colors not in my GarsPalette52. How these things happen is beyond me. Distracted by something at the time is likely the answer. Ghosts in the machine may be another. Anyway, it is correct now. Then I had to knock out some images for the alien missiles.

Graphics work is very enjoyable. It is also insanely time consuming. I greatly dislike that latter aspect.

Okay, so I then did another 90-minute development session. Implemented the movement control for the aliens. Then added the firing control for the aliens. Of course, as always, I then spent some time tweaking this new stuff to make it feel right.

Here we are… 10 hours have been poured into this project already:

I generally spend no more than 90 to possibly 120 minutes in a very focused development session each day on my game projects. However, I started early today so I may just put in another 30 to 60 minutes later tonight. If I do, I will log it here as usual.

 

08/17/2015 9:11 PM
This seems to be my standard approach to game development. First tweak some graphics a bit then push the game forward. This time I spent about 6 minutes touching up the alien missiles just making them a little larger.

Then I put in another 30 minutes of development. The first thing I did was to complete the keyboard controls. See, I’ve learned from past projects when many play-testers asked for WASD support. I’ve always disliked WASD and greatly prefer the arrow keys for movement. So, I added support for movement (left and right only) with Left/A and D/Right. Jump with X/Right Shift. Fire missiles with C/Space/Enter. This has become my standard keyboard control mappings. They cater well to most people’s preferences.

Then I updated the PlayerControl class to add support for moving left and right. Which here actually ends up being accelerating and decelerating.

Finally, I updated the animation speed of the wheels based on the speed of the vehicle. It’s a nice touch to add a bit of realism to a game. Makes it feel a little better.

So, here we are now at 10.5 hours:

 

08/19/2015 9:36 PM
Unfortunately, I had to skip development last night. 🙁
However, I am back at it tonight! 🙂

I am on vacation now until next Monday. Hopefully this means I will be able to put in a little more time than normal and wrap this project up sooner.

Tonight I spent 2.5 hours (plus about 7 minutes drawing 4 explosion images) on the GLBasic version of this game.

So, what did I get done? Glad you asked. First I implemented the explosion system. As usual this consists of ExplosionControl, ExplosionDisplay and ExplosionManager classes. The manager class took more time than the others because in addition to having support for creating and managing explosions it also supports the creation of Chain Explosions.

In case you are do not know what I mean by Chain Explosions all this means is I can create a sequence of explosions that fire off one after the other traveling a certain distance (or not) each time a new explosion is created and specify the delay between creating each explosion in the chain.

Then I created the CollisionManager implementing collision handling between the player missiles and the aliens.

Of course, a good amount of play-testing and tweaking to get it all to feel right.

I think the chain explosions are a nice touch and worth the extra bit of development effort.

This development stuff takes time for sure. Here we are now at 13 hours:

 

08/20/2015 8:38 PM
I have two updates tonight from another 90-minute development session.

First, I implemented collision checking & handling between the alien missiles and the player. Also created a chain explosion sequence for the player being destroyed.

After seeing this explosion FX I revisited the FX for the player crashing into a hole. Because I thought the chained explosion looked better. So I created a different chain explosion FX for the crash.

Left the two in to easily compare the two. I think I will probably choose the crash explosion FX as the one to use for the player in all cases. This does mean the particle FX won’t be needed for this and therefore won’t be used at all for now anyway. I think I can still make use of it though.

I’m at 14.5 hours on this project now.

Here is the crash explosion:

 

08/21/2015 8:41 PM
Back with a 2 hour development session tonight. This time I focused on the rocks. As usual, this meant creating the RockControl, RockDisplay and RockManager classes. Also had to update the tile map real quick to stick the rocks in.

Then I updated the PlayfieldManager class to scan the tile map and create rock sprites as needed. Next up was an update to the CollisionManager class to detect and handle collisions between the player vehicle & the rocks and collisions between the player missiles & the rocks.

I was very tempted to participate in the Ludum Dare 33 Compo tonight and this weekend. Finally I decided there will be many more compos for me to participate in. I’ll be better off sticking with my current project in GLBasic. I need to get this first implementation of the game complete so I can move on the Unity, Monkey X and HaxeFlixel implementations.

So here we are… GLBasic Mars Explorer at 16.5 hours:

 

08/22/2015 6:12 PM
Just had another hour dev session adding music and sounds to Mars Explorer. This little project is nearly wrapped up at this point.

I think all I have left is to set up a simple title screen, level completion and advancing to level 2, victory and failure and that should be it. This is just a little test game focused on the development process in various frameworks not on making a really kick-ass game. So, all I need is for it to cover the bulk of what goes into making a 2D game. A game with two levels handles those requirements.

Here we are GLBasic Mars Explorer at 17.5 hours (at the end of the video you even get a brief glimpse at my desktop… can you tell I am a retro gamer?):

 

08/23/2015 3:52 PM
Back with another 90-minute development session. Although I actually spent 30 minutes on more graphics work too.

First thing I did was create graphics for a simple title screen. Then graphics for a “get ready to play” prompt. Graphics are always very time consuming. In fact, I look at these title screen and “GO!” images and wonder how in heck did they take half an hour?! Not sure really but they did. I think a big part of it was choosing the colors. All of the colors in this game are from my GarsPalette52 palette.

Of course, the title also stays true to the retro style. I’ve always liked pixel art / retro presentation better than modern 3D. It just looks more interesting to me. I think a big part of that is because of the trend for 3D to always be pushing for realism. Problem with that is the ultimate outcome means playing modern 3D games will look like walking around inside your house or walking outside. Heck we can do that without needing to be on the computer!

Anyway enough of my rambling about graphics stuff.

So, the first thing I did in GLBasic was set up the actual GameStateManager structure. Of course, this is used to handle the updates, rendering and transition of the Title, PreparingToPlay and Play game states. It would also have the Game Loss and Game Won states.

Then I coded up the title and prepare-to-play stuff. After that I needed to update the Player to inform the GameManager the player had been destroyed. This was so the GameManager could cycle back to the PreparingToPlay state (and eventually when the player has no more lives cycle back to the Title screen).

At that point, I tested and discovered that I needed to move the Init() method calls for all of the object managers. They needed to go into the start of the PreparingToPlay game state.

So, here we are at 19 hours for the GLBasic Implementation of Mars Explorer. It has taken a total of about 24 hours adding in all of the work on graphics, tile maps and so forth. I am keeping that design and asset creating work separated because it is a constant no matter if you use GLBasic, Monkey X, HaxeFlixel, Unity or whatever. None of these will make it so I am drawing graphics, designing game mechanices or choosing sounds and music faster.

Alright so here we go… 19 hours of GLBasic:

 

08/24/2015 7:45 PM
A 60-minute dev session this evening (so far… might do another later).

Sadly I must say I did nothing to push the project forward toward completion. I think maybe I just wanted to have some fun “playing around” a bit. So I spent the time making some updates I have been thinking about.

As we know this is not meant to be an actual game to be released as… well a game. lol

It is just establishing the game project I will be using to compare development speed in different frameworks.

Ah well I am only human after all. So first I spent 15 minutes on some graphics updates. I made a very simple graphics update to the Play button on the title screen. Then I recolored the rover vehicle thingy. Then I made the tires of the vehicle a little larger. Been thinking man this vehicle really should have some bigger wheels because (a) it will make more sense for the type of terrain and (b) it will definitely look cooler when they traverse the ups and downs of the terrain.

Then the development work in GLBasic began. I had to tweak the wheels display system to account for the larger tire size. After that I adjusted the speed of the wheels rotation.

Then remember that particle system I created? Well I updated it to also be able to make solid color particles instead of only image based particles. Then I updated the alien explosion to throw out a few particles.

Tweaked all of that stuff and yep an hour was up.

So here we are at 20 hours now:

So basically nothing but visual updates but truth be known even I do enjoy working on such things I just try my best to resist the temptation to do so.

Next time I will focus on pushing the project forward. Really want to wrap this up!

 

08/25/2015 10:21 PM
Only did a 60-minute GLBasic dev session again tonight. I did spend 15 minutes updating my tile map in Tiled though. Needed to make stage 2. This was easy work because I just copied chunks out of stage one and pasted down kind of half randomly to make stage 2. Then I did some quick edits on it to tie the chunks seamlessly together.

So the first thing I did on the programming was to implement multiple stages. This meant adding a variable to track the current stage number, updating the PlayfieldManager to pass the correct value in to my MapRenderer to display the appropriate stage and updating the relevant GameState to initialize the stage number. Also added a new GameState to increment the stage number when the player completes a stage.

Then I implemented player lives. They now have 3 lives. Meaning they start with the current vehicle they are controlling and have 2 more in reserve. Updated the relevant GameState to decrement player lives remaining and if they have any they restart the stage otherwise the Main Menu comes up.

More testing and tweaking in general. I really need to stop doing that but it is the way I am used to developing. I throw some new stuff in and tweak some stuff done previously.

So here are two videos showing where I am at now… GLBasic Mars Explorer 21 hours:

Stage One:

Stage Two:

Almost done now with this project now. All I plan on doing is adding (1) scoring, (2) a status bar displaying reserve lives, score and probably stage number, (3) a Won Game screen, (4) a Lose Game screen and (5) one or two checkpoints per stage so the player does not need to start back at the beginning every time their vehicle is destroyed.

 

08/26/2015 10:12 PM
Great progress today… 2.5 hours spent on another GLBasic development session. Plus 30 minutes spent creating more graphics.

So, first I spent 45 minutes on my lunch break to clean up the code some (restructuring here & there and removing about a dozen compiler warnings). I also added the structure for the GameWon and GameLost states. Then tested it all to be sure I didn’t break anything in the process.

Then tonight I spent 30 minutes creating graphics for the score, Stage name and the player’s reserve vehicles.

After that it was time to get to work in GLBasic. I created 2 new classes: StatusBarControl and StatusBarDisplay. The first handles the scoring update (you will see what I mean in the video) and the second actually displays the stats on the screen.

A couple iterations of play-testing & tweaking later I ended up with GLBasic Mars Explorer 23.5 hours (29.5 hours counting asset creation work):

Only 3 items left on my list: (1) a Won Game screen, (2) a Lose Game screen and (3) one or two checkpoints per stage. Barring any unforeseen catastrophe I should have this game wrapped up by this coming weekend.

 

08/27/2015 9:29 PM
Just finished another dev session. This time I spent an hour on graphics creating checkpoint tile markers, and two “screens” for Game Won and Game Lost. I also slightly tweaked the colors on my 52-color palette and remapped all images to it. The difference is subtle and hopefully moves the visuals a bit closer to the retro style I had in mind.

Other than enjoyment I don’t know why I spend this time on graphics. I mean I probably like a nice looking game as much as anyone else. The problem is for me to make it look good I’d need to spend hours & hours on all of these images and that just seems like such a waste of time. Seriously. I’d probably spend 20 to 30 hours of focused effort just on the graphics for this simple game.

The other (and bigger) reason I feel it is a waste for me to spend my time on such things is because I can easily hire an artist to do all of the artwork. This means I can develop a game much quicker and end up with it looking much better than I could do on my own. Just makes sense, right?


Just a little side note here…

Based on a discussion on the Unity forums yesterday and today I know I am certainly in the minority of people when it comes to graphics. lol  It is kind of funny because I was unable to even get my point across. It seemed like all anyone got out of my comments was that “I hate good graphics design”, “graphics are not important at all” and so forth. ha ha

Oh well… talking on different wavelengths… different belief systems probably. It happens.

My view is sure great graphics are cool! I mean they really are. I admire artists who can make such fantastic looking stuff. I also think surely if graphics design played such a major part in the success of Indie games then we shouldn’t see so many Indie games with great graphics design having no more downloads than Indie games with poor graphics design, right? Makes sense to me anyway.

By the way… this is what I consider great graphics design. I bet their artists spent a huge amount of time on the graphics for this game. Certainly way more than the 3 hours I’ve put into Mars Explorer graphics. ha ha 🙂

That is Shovel Knight. A game that last I read the stats had hit around 750,000 sales. Not $750,000 but 750,000 sales. They sell it for $15 to $25 depending if you want basic or deluxe version. I will let you do the math.

Okay, end of the commercial… let’s continue.


Then I launched GLBasic and implemented the GameWon and GameLost states. Then I launched Tiled and placed three checkpoints in the first stage and two checkpoints in the second stage.

Then I implemented the checkpoint system. Then I did some resetting of the objects contained in the TileMap data such as checkpoints and rocks when starting a new game. Also, added a Pause feature for the gameplay. Never liked it when games had no Pause.

Then I did a lot of testing and discovered back about 8 days ago I had deactivated the animation on the aliens. Never noticed it until tonight. So I fixed that.

Then did more testing & tweaking.

So… this is another hour of graphics work and another 90 minutes in GLBasic.

The good news?

Mars Explorer is now finished in GLBasic!

Yes, I finally have my little test game complete. 🙂

So… here is the GLBasic implementation of Mars Explorer in 25 hours and about 32 hours including assets (graphics, sounds, music and tile map creation) and the TiledMapLoader and MapRenderer I created:


Whew! This is a lot of time to spend on a game project. Well at least one that is just to use for my experiment. But I wanted it to be a “complete” game as far as containing just about anything I’d need for any 2D games I want to make. Thought about making an options setting for the Title screen but didn’t really need it. Guess I could do it for the Music and Sound FX volume.

I will wait a day or two just in case I decide to do some minor updates on it. Then I will add a download link for Mars Explorer_GLBasic.

I’ll take at least a day off before starting on the HaxeFlixel, Monkey X and Unity versions of the game. Fortunately, each of those versions should not take as much time. With the GLBasic version I had to design the game, create the assets, do the technical design and so forth.

I am looking forward to starting the comparison and see which one comes out on top as far as being the easiest and fastest for me to work with.

But hey I think GLBasic deserves some support because it obviously is a fine game development framework in itself for desktop and mobile games.

 

08/29/2015 6:40 PM  GLBasic Version of Mars Explorer Released!

I just finished a 2-hour clean-up session on this project.

Basically, I just wrapped up all of the main program code in the MarsExplorer main code module into a new GameManager class. Then tested many times to make sure I broke nothing in the process.

Then added some more comments to the main MarsExplorer code module. Changed a few hard-coded values to constants (points and player lives), deleted commented out code, removed unused graphics assets from the folders.

Built the exe. Created a zip file for the Windows binary version. Then zipped up the source as well.

So here we are… total project time 34 hours.

Although this is just a very simple project I hope you enjoy the game.

I also hope you find the source code educational and otherwise helpful in your own game projects.

You can download these from my GLBasic Projects Page.