About this blog
My current project is building a 2D framework in Java.
Entries in this blog
While listening to Steve Pavlina's podcast, "Kick Start Your Own Business", I heard him use the phrase "Ready, Fire, Aim" as a better approach to developing your business as opposed to "Ready, Aim, Fire". While listening to the podcast I realized how the same approach can be applied to people starting out in game development. I always see posts on forums with someone coding some sort of game "engine" and than get caught up in the design, trying to do everything the right way the first time, but never completing anything, I'm guilty of this as well. I think it is much better, at least when your working on your first couple of games, to just get a working, finished game. Having a finished game with crummy code is better than having a half finished game with great code.
Now I am not saying design isn't a good thing. It's important to have a solid design behind your games especially when the games become larger. The problem is that until you have completed a few games, how do you know what the best design is? There are many aspects to game programming and it can be hard to see how everything fits together at first. After you have completed a couple of games, you will start seeing the underlying connections which will make the design questions a lot easier to answer.
I think it is a mistake to start off trying to create a game engine. If you have never completed a game, don't try creating an engine. Just create a game, but focus on reusability where you can. Create a reusable Image class or Sprite class that you can use in another game. This is one of the major points of using Object Oriented design, reusability. By your second game you will probably have a bunch of components that you can group together to form a framework for further games. Let the "engine" evolve from your games, not your games from your engine. Sure, not everyting is going to be perfect, but you shouldn't always expect it to. Code can always be rewritten or redesigned later if it needs to be, and through this process you will have a couple of games already completed and the beginnings of a solid foundation to build future games off of.
I am changing my outlook on game development to better use the "Ready, Fire, Aim" approach. It's already helping me out with my own coding as I am actually working on a game and not just a bunch of code. This is only a slight shift in thinking but one that I feel is very useful.
Cross-Posted from Somewhat Structured Thoughts
I thought for a little while today about my goals for the near future, about 2-3 months from now, and what I want to accomplish.
I first off want to work on a variety of games and as a stepping stone into bigger and better things, first on my list are recreations of a few of my favorite classics. I am planning on doing versions of Pong, Breakout, Tetris and Asteroids. These shouldn't take me long at all todo. Pong can be made in an hour or two. These have to be polished though. Menu screen, working gameplay mechanics etc. It will also help me work out kinks in Sigma and add features that will enable me to build bigger games. I also want to add to these games as well. It's not enough to have a ball and a couple of paddles on the screen in Pong for example. I need to add my own touch to it.
After getting these out of the way I have a few other types of games I want to create. List follows:
- A shootemup of some kind.
- A side scroller
- A dungeon crawler(ala Gauntlet)
- A short RPG. (I've always liked the idea of doing an episode based game)
I have some other ideas but these should keep me busy for awhile. Having these in mind now will keep me on track and when I can't program I can be thinking about the design for these.
I took a break from my applet engine, which is almost done, to play around with text adventures. I use to play a lot of them when I was younger and some of the first games I ever wrote were text adventures on my Atari 400 when I was about eight years old. If I had only kept programming through the last few years of high school....
I am working on putting together a simple text adventure in Java and am having problems, due to my lack of proper design. My basic setup goes something like this:
- Get line of input from user
- Tokenize the line, checking each word to make
sure it is in the 'language'.
- If they are, convert them to integers.
- Based on the first word (which has to be a verb, move, look, listen etc..)
Execute the proper method to handle the command (actionMove(), actionLook() etc..) Which handles the processing of the rest of the line.
Now my issue is, I have a Parser class that does the converting and checking. Now my current thought is to simply make the appropriate constants (ACTIN_MOVE, ACTION_LISTEN etc..) static and to make the parse method return the list of tokens and have the other class check to see which method to execute. This is the way I am probably going to do it right now, since I can't think of a better way to do it, and can't find much help in coding a text adventure. Everything I am finding is about using the different engines that have been built for it.
Somewhat Structured Thoughts
I decided after reading GBGames's blog entry on the Thousander club, originally started by the Low Poly Cooperative, that I would also join up and see if I could accomplish a Thousand Hours of game development in a year. I'm pretty optimistic that I will be able to accomplish it. I currently work very little as I am a full time student, so my weekends are usually open to do whatever I like. If you want to become really good at something it requires a lot of practice, so that's what I'm doing. I have a couple of long term game development goals (long term as in 3+ years), as well as many short term ones. My current mid-range goal (1+ year), is to become proficient at 2D based games. I am still trying to determine what techniques I should specifically set out to learn (different algorithms, data structures, that are common etc..). I also need to work on my OOP skills, which my Java class is helping me out with a lot, even though most of my programming is in C/C++. In that regard I am working on an OO game framework using SDL. I've got a few base classes done, but I have a feeling they may be changing shortly.
I also have another blog at my website: Somewhat Structured Thougths, but it's not updated as much as this is going to be. The updates here will also be more programming specific as this is my "Developer Journal".
I am working on a set of classes to handle Sprites and Entities but I am having trouble separating the different parts and I believe that I am now referring to the same thing by two different names. What my original idea was to have a class that contains only the image characteristics and another to contain the location and movement characteristics. My Sprite class was built to handle only the actual Image that is loaded. I extend this to AnimatedSprite that adds in Animation controls. This is where I am confusing every thing. I am not sure of the best way to incorporate these things.
I want to have objects that are Animated and some that aren't. I also want to be able to create different types of these "entities" so I can change behaviors. For example if I was creating a Breakout clone but wanted different bricks to have different behaviors when hit by the ball ( animations, explode sequences etc..) I could simply create a new class for that brick that extends a base class. While typing this up I am realizing that part of my problem is I don't have clear definitions of what each of these things are. It was my original understanding that a Sprite is a graphic, animated or not, that can be moved or moves around the screen. Perhaps it would be better to simply include the location and movement data in the Sprite class? I am going to spend some time working out different design schemes and will hopefully have a working one today so I can move on to other things.
Today was a relatively slow lazy day. The weather wasn't the greatest here and I was out late for a friends birthday so I didn't get as far on my code today as I wanted to. Nonetheless I did get some things done and I will most likely be working on it for a while tonight still.
As it's been a while since I have posted on what I am doing I am going to recap my goals here for everyone reading this as well as for myself.
I am building a Java Applet Framework that will allow me to produce and/or prototype games relatively quickly and with ease. I have been wanting to do this for some time now and I really started working on it in the last few days. At this point I have almost enough in place to create just about any type of 2D puzzle game out there. While my design may not be the absolutely best it is so far working. The framework will most likely not be finished for a long time because it is an evolving work. Over the next few weeks I will be building a few small games utilizing this framework to see where it is lacking and what needs to be added. As far as the framework itself, I have a few things that still need to be added or finished such as Mouse input, reworking some of my collision detection, sound and a few bitmap font routines. I am sure I will come across other small things to tidy up as well.
Last year I joined the Thousander Club which is a personal challenge to devote a 1000 hours in a year to game development. Whether it is coding or artwork, the idea is that practice is just as important as skill. I wasn't able to make a 1000 hours last year but I am going to try again. If anything it will definitely help me to stay on track.
See my original post about the Thousander Club here.
So every Sunday I am going to be posting my hours for the week. To be able to complete this goal I would need to spend about twenty hours a week or 2.5 hours a day, for the whole year. I am starting this about a week behind so hopefully I will be able to makeup that difference some where.
For this week : 15.50
Total: 15.50 ( 15.50 / 1000 = .016% Completion )
I just recently signed up for this new affiliate program called Agloco. I don't normally get into a lot of the affiliate programs or ad programs but this one seems interesting. Basically how it works is you download a web toolbar, called a viewbar, that displays adds and a search bar. The bar can be disabled at any time with a simple click and you don't have to have it running if you don't want to. While it is running you can earn money four different ways:
1) Browsing - You earn an automatic share of Agloco's revenue based on the amount of time you spend browsing the net with the viewbar on.
2) Company shares - You earn shares; in the company stock, that can later be sold, based on your browsing time with the toolbar.
3) Referrals - The more referrals you have the bigger the share you earn for both 1 and 2.
4) Revenue sharing - Whenever a member buys something from an Agloco ad, affiliate link, or from a search in the toolbar, you get a share of the purchase.
The philosophy behind the company is that people are making money from you on the web regardless of what you are doing. Youtube for example have made billions, ads and marketing campaigns, off of there users who have received nothing for their contribution. Agloco is completely free so I figured why not give it a shot. I am going to browse the net regardless so I might as well be making a buck or two off of all the ads I see.
Referral Link: Agloco
Sort of. I decided that I am going to name my engine Sigma. I got tired of referencing it as my Engine. I was busy today doing various house things so I didn't get to work on it as much as I wanted to, and what time I did work on it was taken by this weird input bug due to a typo that I had trouble tracking down (I forgot the semi-colon at the end of a class definition).
Sigma consists of two classes at the moment, Engine and InputHandler. Engine handles initialization of SDL and the creation of the window. It also controls the primary and secondary surfaces
that I'll be using for rendering. InputHandler is pretty simple. It simply checks for any events (perhaps I should rename it to EventHandler??), and processes the window events, and stores the keypresses into an array which is retrievable through the user handleKeys() method.
I am going to be starting on the graphics portion either later tonight or tomorrow. I am keeping an updated source release going at my projects page, so feel free to check it out. Would love to hear comments on it.
My spring semester starts tomorrow and although I don't actually have any classes there are still plenty of things that I need to get done.
I got a little done on my framework today although most of my time was spent planning out a few things. I decided on a first project that I am using to finish putting my framework together. I am not going to go into details about it simply because they might change, but I think it will be fun to play. I have been thinking a lot about how to handle map files today. Part of the problem is that I don't have a good grasp on OOP paradigms that would prove to be useful here. Most of my design time is spent trying to figure out how to best handle class relationships. I am going to be looking through gamedev's archive over the next few days to get some ideas on how to handle my current level data as mine is severely lacking.
For those looking for something interesting to read, the first ever
Carnival of Game Production is out. You can read it here.
I believe I now have finished my Sprite Animation system. It's still basic but does all I need it to for now. I took the advice that was given to me from this thread that I started and combined my Sprite and AnimatedSprite classes into a single class, Sprite. My Entity now has a Sprite that handles all the Animation, (or lack thereof), for that particular entity. I have a couple methods to write for the Entity class in regards to bounding box collision but that will probably not take me too long as they were almost done before.
After I get this taken care of my next step will be the actual base applet code. I have a decent portion of this already written as I have been writing various test programs for my different classes as I've been going along. Once that is done, hopefully this weekend, I will work on sound. This will all provide for a nice simple framework for developing games on. Once this is done and I have made a couple of games with it, seeing what I can get out of it, I will work on developing it further as my games become more complex. It's going to be a long time before this is finished as I see the framework as never ending. It will go through many iterations before I am done with it. With each game I hope to add to it or update it to provide for more complex game play or eye candy.
My fiance has the flu so we sent our son to visit my mother for the night and possibly tomorrow as well, to reduce the chances of him getting sick. I just hope he has inherited my immune system and not his mother's. As I was planning on coding after work today, I ended up going to visit a friend and played Halo2 for a couple of hours. It's been a while since I played, and even though I suck, I had a good time. I would much rather play with people present than through XBox live or a computer connection.
I still got a couple of hours in on my current project which is an Asteroids clone . I just finished the sprite code but I have a bug somewhere in the code that I can't seem to find at the moment, so I'm leaving it for tomorrow. I will probably post screenshots after I get the animation code and explosions in so they will be more interesing than just a ship in space.
I just got done playing around with Viridian's combat prototype
It reminded me of playing Ultima: Quest of the Avatar. It's in a basic form right now, but I think it will be a lot of fun once more features are enabled.
Thousander Club Update: 71.09 / 1000. 7.91% of total hours. Almost to 10%!!
Cross-Posted from Somewhat Structured Thoughts
Okay, after a week of being really sick and than my Calculus mid-term, I have finally been able to work on my engine. Not that I haven't been thinking about it, but it feels good to get some code written. I added image support (just BMP now, but I will be supporting others through SDL_Image), and also added in mouse support. Mouse movement and button presses are now being detected.
Tomorrow I am going to code a Sprite class and try and get some type of game written. Probably a simple puzzle game. I have a few ideas but I'm looking for something relatively quick and easy to put together.
I just got the Academic version of Visual Studio today and installed it and am using that now instead of the Express edition. I am really liking it although I will probably never use half the features that it has.
I ended up getting caught up on a really stupid bug with it though today. Actually I'm not sure what I would call it, user error probably. I would rebuild my solution in Visual Studio and run it from within, but my program wasn't displaying any images. I couldn't figure it out, but then I tried running it directly from the directory and it worked. For some reason visual studio wasn't able to find the image files. I never thought about this, until I spent about an hour trying to figure out why it wasn't displaying my images. I was getting really frustrated for a little while.