Friday, December 25, 2009

Just what exactly is it that I'm doing?

Alas, it has been yet another little while since I have last posted an update. This is partly due to my laziness as a programmer, and also to the fact that I contracted a most despicable virus that came from a false Adobe Flash Player update. It took literally an entire day to remove, the monster. It made me remember why I desire to get an iMac soon.

Anyway, this post isn't about my level editor (except for the update screenshot at the bottom of the post), rather it's about the entire project I'm handling. I've finally come up with a decent name for my game and a basic storyline. I plan to work on character outlines after Christmas and to develop the story further. During this, I hope to have released the beta version of my level editor, and I hope that the feedback I receive is positive. I am not an expert at designing interfaces, but hopefully it's straightforward enough that the average player of my game will be able to construct their own levels without having to read the documentation. I want it to be just point-and-click, and that's where I thank God that he granted humans the ability to create graphical user interfaces.

Aww, nuts, the post did end up being about the editor. Pfft. Oh well. This will be the last post before the beta release. And now here's the image to tickle your fancy. The GUI shall not change, this is the final design and I rather like it.


[Click image for larger view]

Users now use the object inventory list to add objects to the scene. Just click the image of the object you want to create.

Saturday, December 19, 2009

Update

It has been a while since I last updated everyone on my progress of this project. Allow me to explain why exactly this has come to pass...

As I was nearing the end of programming the basic mechanics of the editor, I realized that several things needed to be fixed and optimized. I also realized that this meant an entire re-write of the system was in order, which I planned to do anyway and thus it wasn't a major drawback. So I began programming v0.2 of the editor, this time being sure to program things correctly the first time and making sure the code is easily expandable and easier to read. This will allow me to add or remove features easily without having to re-write major chunks of code. I am still using v0.1 as a testing table, so every feature I add henceforth will be guaranteed to work, hopefully without a hitch. Allow me to list the major features I have tested but not yet implemented into v0.2 (and yes, they work):


  1. File saving. While not yet complete, I have successfully written procedures that save the levels into files properly. 
  2. Object rotation. While this is not as intuitive as I'd like it to be, it's darn close.
  3. Easier object control. Grid-based movement = less of  a hasle for positioning objects.
  4. Deletion of objects. Have an object you don't need in the level? Press "delete" and watch it vanish. If I decide to, I may add a little 'splosion effect to make it more fun and destructive. After all, us humans like explosions.
Features I need to add include the following:

  1. The ability to load levels and saved projects.
  2. The ability to save an unfinished level as a project.
  3. Re-designed interface. I may get rid of the top bar entirely and replace it with an inventory box, which will be constructed of an image that contains smaller images of each object and required entity to be built into the level. I may also replace boring gray color of the GUI with gimp-a-fied gradient colors, just to add flavor (though it could end up being an eye sore to behold).
  4. Choose a skydome. This will allow the user to pick which sky goes with what level. 
  5. Choose the background music. This will allow the user to choose which groovy track plays in the background of the level. Let's Groove, baby.
  6. Give the saved levels a name. Instead of "level1.lvl", you will be able to save levels as "mylevel.lvl".
  7. Make everything pretty.
So, that's it. Shouldn't be too much longer before I can release the beta version for people to test out, and then after that I can get to work on the actual game engine itself and finish creating the models. There's a lot of placeholders at the moment...

Monday, December 7, 2009

The level editor is nearing a stage where I can safely release a beta version. This will also be followed with a video, showing the editor in action. But for now, I'll post screen shots that show the major upgrades to the program I made:



[Click on image for a larger view]


[Click on image for a larger view]

These two images show the re-designed, re-programmed GUI (graphical user interface). I've added a couple more camera modes as well; free-flight is the selected mode when one first starts the program, but you can click on "CAMERA" to bring up the optional "Top-Down View" (preferred when positioning objects), and "Left-to-Right View".  I might add one more camera mode, though I really don't see a use for another. The camera code blocks are complicated enough as it is!

As for the other thing I've updated....



[you know what to do]

Textured objects! The user won't have to texture the objects individually, because soon the inventory list will allow the user to select which model+textures to create. Pretty cool, eh?

So all I've got left to do is to create the file saving and loading functions, coins, power-ups, and dog gone it, I think that'll be it. Stay tuned, folks, this is about to get a lot more exciting!

Sunday, December 6, 2009

Am I actually succeeding...?

Haha, it seems as though I am a bit more clever when it comes to programming than I previously thought. Please do not take that statement as if I'm arrogant; I'm not, I'm just extremely happy that I actually know what I'm doing.

Yes, it's certainly quite late (nearly 3AM), but I couldn't sleep and had to program just a bit more. I got another step down (kinda); the program's menu bar. Here's a screen shot:



(click on the image for a larger view)
As you can see, the menu bar has two elements; "Options" takes the user to a drop-down menu with options to "Make a 1-Unit Block", and soon at least four more options will be added ("Make a 5-Unit Block", "Texture Current Block", "Set Collision On Sel. Object", and "Create Coins and Power-Ups").

Here's another screen shot showing what the program looks like when the drop-down menus aren't clicked:



Will there be any more menu items added? Probably not, I've got all of the elements I need at the moment. I doubt that much more needs to be done to this program. Let me make a list of things I still have to do and want to do:
1)-Create textures and allow the user to select them from a folder
2)-Set collision values and sizes, again allowing the user to select the appropriate size from a folder
3)-Write the file saving and loading routines into the program so that the user can export levels and  load saved projects
4)-Create the 3D model of a coin and allow the user to create one
5)-Create the 3D model of Power-Ups and allow the user to create them
6)-Make it possible for the user to select which music track plays in the level
7)-Allow the user to select what skybox the level will use
8)-Create separate camera functions that, when selected, make the camera behave differently
9)-Tidy up the code, optimize performance, drink more coffee
10)-Release the beta, ask for feedback and opinions, ask if anybody would like anymore features, add suggested features

And that's that for tonight, folks. Thanks for reading and sticking with me (you know who you are), and your support is greatly appreciated! Please feel free to comment on my posts.

Saturday, December 5, 2009

Progress is progress, albeit slow progress

Today I am going to start this post with a rather uninteresting story, but hey, my blog, my rules. 


I was unable to make coffee this morning due to a lack of water in the house (my family drinks water out of one of those water machines that are ever-present in offices). This made me rather sad, but I dealt with it and started programming anyway. All I've gotten done so far today is making sure that when a user clicks on an object to select it, it actually does something. So far, you can only rotate the object on its Y and Z axis', but shortly I am going to make it possible for users to position the blocks where they want to. 


I've also changed the look up a bit. I was able to fix the background and make it look better, and I changed the color of the grid structure. I also made it impossible for the camera to go under the grid (it was annoying me and would annoy users greatly). 


I fear the code is getting messy. I'm not even close to done yet, and already the code looks like it was just spewed out of a blender set on high. Well, okay, it's not that bad, I've just got to reorganize it. Not a big deal.


The program is around 185 lines of code at this point, and at least 150 more are required for the basic functionality of the program (object placement, texturing objects, setting collision types and sizes for objects, blah blah blah). I've also got to work on a speed issue that happens when you create 100 platforms. Optimization is key when it comes to things like this.


That's all I've got for today. I'll post a new screen shot in the next couple of days, when I have something worth showing. Oh, and we got more water, so I'm now able to drink coffee and concentrate a little better on this project. I are t3h happies.

Friday, December 4, 2009

The Level Editor

I've been working on this level editor since dinner. After five hours (a lot of which was two hours just goofing off online and watching the series finale of "Monk", a show loved by millions nationwide) of programming and debugging, I have the following screen shot as proof that I am actually doing something and not just monkeying around:



Yes, it has a hideous green background. I've tried changing it to black, but for some reason it won't let me. Strange.

You'll notice that it has a grid-based system. Users create a cube by pressing the space key (will be changed later on), and then by using the mouse they can position it where ever they need to. Soon, I'll create an inventory of sorts which will allow users to simply click on the image of the object they want to create, and then the object will be created. Simple, effective, and almost more intuitive than pressing the space key.

After all of that is done, I'll create a simple menu-based system to save and load level files. Users will be able to load any level file they want (except those that belong to the actual game, of course) and save their own, thus making it entirely possible for them to create and play their own levels. Can you say "replay value"?

After I'm done programming the level editor, the next step will be to create the actual Coins Galore game engine. All I'll need to do is program a routine that loads the level files, interprets the data inside as needed, sets collision for the objects, sets the physics up for the player (just simple gravity is all that's needed in this game, as well as friction and other small, mundane things that people never really notice in everyday life), and user input. I expect the engine to be pretty small in terms of lines of code (probably no more than 2,000).

So that's it, thought I'd just post an update before bed. I'm tired and my right pinky finger aches for some strange reason, probably from typing furiously for a few hours and not taking a break. Goodnight everybody.

My Plans

Recently I've decided to start a game project. I want to expand my knowledge in programming, and to do that I thought that creating a game would be a good idea. Back in January of this year there was an event called NaGaCreMo '09. A person participated in this event by agreeing to complete a game within the first 30 days of 2009. There was a thread about signing up over on the Apollo Forums (better know as TGC Forums), and I joined despite my severe lack of knowledge.

I managed to complete a working demo, but several things were missing from the game. While I had decent gameplay and level design skills, I had no idea on how to go about creating enemies or how to make secret levels, or power-ups or anything that's pretty much standard in today's games. All I had was a marble that could jump from platform to platform, collecting coins to access a gate that led to the next level. So simple, and yet it taught me so much about the fundamentals of game programming.

It's nearly a year later, and I still haven't finished that game. I haven't even worked on it since March, because I came to the conclusion that I needed something. Something that would allow me to create the levels visually and easily, and perhaps make the game even simpler to create in the long run. I needed something known as a  Level Editor, but I had no idea how to go about it. That's changed recently, in the fact that I now have more advanced game creation tools (DarkBASIC Professional), and more diverse knowledge of programming. I studied C# for a bit to learn more about advanced programming, and it definitely helped a lot. I learned about file reading and writing, using classes for object-oriented programming (OOP), and how programs actually work. I plan to switch to C# completely someday; the only reason I'm still using DarkBASIC Pro is so that I can develop my game quickly and get it out of my head ASAP. The quicker that happens, the faster I'll be able to focus on C#.

So, during the winter I plan to program my level editor and game engine. A game engine is essentially something that handles things like physics, collision, and level creation. The only visual part about my engine will be the level editor; the rest will still require programming for things like user input and enemy control, unless I can somehow make the level editor handle enemies (I may be able to do that, if the enemies are simplistic and not too intelligent). Perhaps I should get to work on it now instead of blogging, eh?