About this blog
Showing the achievements and failures of my latest game to the public
Entries in this blog
I am starting to work on a new game, a hacking simulator. I have wanted to do this for a while and was going to attempt this as my first game. I am glad that I waited. I learned a lot by building the small games and preparing the code for the high school classes.
I know a lot of hacking games have been attempted, a few were successful, and most were just pipe dreams and broken promises. Unlike other failed attempts, I am not going to attempt an online multiuser environment right from the start. Nor anything extrememly complex. Like projects that I have worked on for major corporations, this project is going to start off small and gradually work in more features.
If someone would have told me when I started on my current project (at work) that it was going to be over 1 million lines of code, take 4 hours to compile, and consist of 20+ compiled assemblies, I would not have taken the position. After all where do you start on such a complex project. However, the first release was less than 10,000 lines of code and 3 compiled assemblies. This is the way my hacking simulator will be built, start with a good base and add continually add features/functionality as I go.
I don't want the game to feel like a game, but rather to feel like a live network. The possability of using telnet as the interface for the game is very strong. Then if the game would go online, the interface would feel very comfortable.
But before I get into any of that, I am first going to write a design document. That way I can stay on track for development and if any other developers were to come on-board, a design document would be necessary to keep everyone on track. I hope to have the first draft of the design document completed by Friday.
This should be an exciting adventure, full of headaches and achievements, toxenizers and more headaches, and hopefully an exciting game at the end.
So I got all of the pieces and parts Wednesday night. Everything goes together fine in about 20 minutes. I plug it in, hear one beep from the BIOS, but nothing on the monitor. My monitor is dead!!!
Yesterday I bought another monitor, the same one I had. I set up the BIOS and try to boot my system. Now I just took the harddrive from my old system and placed it in the new one. Of course it bluescreened. It's an entirely new motherboard and architecture.
Out comes the Windows XP cd to do a repair. Everything is going fine until it asks me for my license. For some reason, it won't accept the license I have, which is a legal, valid license. After 2 hours on hold with Microsoft, I decided to go to sleep. I will try again tonight to get my system running. Although I'm at the point where installing Linux on this box is looking like a really good idea.
Tonight I descend into the 4th level of computer hell.
So I have been off doing other things for the last several weeks. My computer blew up (literally, blue smoke) 3 weeks ago, I got married 9 days ago and was on my honeymoon all last week. So after much perperation for the wedding, it turned out great.
Now after almost a month of not working on any game design, code, etc, I feel refreshed and ready to go. I the parts to a new computer enroute, hopefully they will be delivered by Thursday.
Right now I'm really interested in doing a platformer or an isometric tile based RPG (original Zelda type game). I've been doing a lot of research at work on AI and want to put it to use in my next game.
So as soon as my new pc is built, I will start on the graphics for my next game and post some screenshots.
This took me 4 hours in Blender.
The learning curve is tough, but I think without the book it would be almost impossible. If you are thinking of starting modeling with Blender, I would suggest the 2.3 Guide. I said I wasn't going to post a picture of the Gingerbread Man, but I worked hard on it.
Tomorrow I will add bones and animation. I really can't wait until the light comes on and I figure out how these models get into a game (and move the way you expect them to).
I installed Blender 2.3.7 last week and attempted to use it. It took me about 2 hours to get the windows positioned. After that I was able to make a pointy cube. It only took me 1 hour to do that. I decided to get some help. So I ordered the book from Amazon.com and it was delivered Monday.
Last night I fired up blender. My windows were back to the original positions. I found out in the book that I have to save stuff like that. I worked my way through the first half of the first tutorial, creating a gingerbread man. I got it to render at 1:00am. Tonight I hope to finish it. I'm sure a lot of people have made this gingerbread man, so I'm not putting up any screenshots. I still have no idea how the model I make would get into a game, especially with movements, walking, etc.
I do have a greater appreciation for the graphics in games though. I can't even imagine how long it would take to build ONE monster, let alone an entire arsenal of enemies, NPCs, objects, rooms, etc. Hopefully through some divine intervention, I will find a way to speed up the modeling process.
No work on my next game yet either. I want to do it using DirectX, so there is a bit of a learning curve there. Hopefully I can get things figured out and start working on it soon.
I started off tonight thinking of the best way to change the music issue with the Tetris clone. I decided to drop the MIDI files and create WAV files. So I begin surfing the internet for some cheap/free software to do this for me. I find an article that shows how to use Winamp to do this. It turns out Winamp is awesome at converting any music that it can play into a WAV file.
I convert the MIDI files to WAV files, change the code to play the WAV files, and it works great. No stuttering at all. I will have to test on Windows 98 and see if that resolves the music issue as well.
However, the WAV files are very large (11MB, 10MB, 8MB), so uploading to gd.net server isn't going to happen. So I figure out roughly where the songs repeat, and stop the songs at that marker. It's times like these that I wish I still hade CakeWalk installed. Now the zip file is just over 9MB with the three wav files in it.
Also while I was at it tonight, I changed the code that selects the next block. I was tired of getting 4,5,6 blocks in a row that were all the same type. The new code ensures that the same block never comes out twice in a row.
So, if you haven't tried the game, check it out. If you have, but had issues with the sound, try it again.
So I'm watching my fiance play the game yesterday, and realize that when restarting the music, there is a small pause in the game. I never made it through an entire song to really see that. So I am going to play the music in a seperate thread, seperating it from the UI (should have been that way in the beginning). I should have an update by the end of the week.
I've been throwing around designs for the breakout clone. I'm a huge breakout/arkanoid fan, so the ideas are just pouring out. One idea is after a certain time limit an enemy comes onto the screen and tries to eat your ball. Enemy paddles that act as blockers.
My basic gameplan is this:
1) Decide on a format for storing the levels.
2) Create a basic level by hand.
3) Work on physics, paddle movement, game functionality, (basically get the game working).
4) Once the game is working, build a level editor and better graphics for the blocks.
Coding should hopefully start next week.
As promised, the zip files have been uploaded to the server and are available for download. You will need the .NET Framework 1.1 installed to run it.
This zip file just includes the executable.
This zip file has the source code for the project. The source code is VB.NET and was written using Visual Studio .NET 2003.
The next game is going to be written in C# or C++ using DirectX. Should be fun. I'm not saying VB.NET is a bad language, it really has come a long way since VB 6.0. However the OO lacks features that C# or C++ have. I just wanted to see what I could do with VB.NET.
Anyway, have fun, and let me know if you run across bugs.
This game is officially done!!! Tonight I implemented the ability to change the song while playing the game. I also created the icon file for the game and implemented a simple help window. I figured with this game, an extensive help system was not needed. So I went with a simple message box that shows the controls.
The only other thing that I thought about doing was some cool effects when someone cleared four lines. But I don't think I'm going to do it. I just realized tonight that I don't have Winzip installed on this computer. I will install it tomorrow, zip everything up, and post it for people to download.
I think I'm going to take a small break this week from coding and put together a website with easy links to the journal, links to the games for download (as they get completed).
I really can't wait to start doing the breakout clone. We'll see how much of a break I really take this week, I'm anxious to get started.
I finally got the sound implemented into my project. After 4 hours, I have a midi file looping. Using the API to play midi files in .NET is a lot harder than in C++. I really don't know what Microsoft was thinking there. I wound up using the mciSendCommandA API calls to play the MIDI file. The next game is going to be done in DirectX, and from what I understand so far, graphics and sound aren't as hard to deal with (relatively speaking).
I was suprised to see people reading and commenting on my journal. Since people are looking at it, I decided to throw in some screenshots (several comments for that). This is pretty much the polished GUI. The only thing left is the help files. I can't wait to zip it all up and put it up here for people to try out.
High Score Window
So, after reading an excellent article on this website about game programming, I decided to follow the advice in the article by creating a Tetris clone, a Breakout Clone, a PacMan clone, and a Platformer.
My Tetris clone is almost complete. I was looking for a place to "publish" it, and found the GD Showcase. So I signed up as a member.
Below is the account of my Tetris development up to this point.
Sunday August 7, 2005 - I laid out the base classes tonight for my Tetris clone. Not much coding done yet.
Monday August 8, 2005 - Started writing the code for the classes. I kept confusing myself trying to think of all the things that had to be done in the game. I have to learn to focus. I created the pictures of the blocks tonight using MS Paint. They aren't pretty, but they work.
Tuesday August 9, 2005 - I don't know how to use GDI+ in .NET, so tonight I'm working on displaying a picture. I did some ad-hoc code to paint the "next" block in the preview area. It works, but when the window looses focus, the block disappears. I put together the layout of the main form and all of the components. I got a square to paint as the next block and in the main game area. I can move the block left and right.
Wednesday August 10, 2005 - I built the mechanism for the blocks to fall. I built the pile and started storing the blocks. There is no collision detection, so they overlap. The graphics blink, show ghost blocks, and have issues. I implement double buffering using a bitmap object as the buffer. This doesn't work. At higher levels, it's even worse + the drawing mechanism takes too long. I redo the algorithm to draw the current block instead of redrawing with a black square when it moves. This still doesn't work. I redo the algorithm to draw the main game board. Still having issues.
Thursday August 11, 2005 - I work on the game for about 1 hour trying to work out the graphics. I'm very close; I can feel it. It still doesn't work though.
Sunday August 14, 2005 - I finally get the graphics figured out. It works great now, and can keep up at the higher levels. After a long weekend back home, I am too tired to put any serious work into the game. After 20 minutes, I'm done.
Monday August 15, 2005 - Tonight I draw the pile, and that works. Move current block to pile, that works. Collision detection for falling blocks. That works, awesome, my pile is growing. I try collision detection for side-to-side movement. It's not work correctly. Eventually I get it figured out, and now I have a working game loop that looks like a Tetris game. Tomorrow I hope to do the block rotation and the ability to clear the lines. Once line clearing is done, the game loop is practically finished (scoring, lines, levels are all line clearing related). Last thing is sounds, high scores, pausing the game, and help files.
Tuesday August 16, 2005 - Sitting at work thinking about installing VS.NET 2003 tonight at home. I would really like to use some of the features in 2003 and .NET 1.1. But I also want to finish the basic game tonight. I think by Friday I should have a polished version.
6:00pm - So I start into the game. I change the base tetrimino class and creation the methods for rotating a block. I then implement the rotation methods in each of the block types. Cool, the blocks rotate. I change the down key so that instead of automatically putting the block on the bottom, it just moves it down. Now I'm getting a Null Reference error message, but there are no details with it. I put Try-Catch blocks around suspect code, but produce nothing.
I decide to upgrade to VS 2003, thinking that it has more debugging information. I start the install around 8:30. At 10:30 I'm ready to fire it up. Same error message comes up. I try to look at the dynamic help for something, but am reminded that I skipped the MSDN installation to save time. I'll have to do that tomorrow.
I wrap the draw next, draw current and draw pile methods in Try-Catch blocks. Aha, I catch an exception on the draw current. The block is a square. I try several more times, and the block is always a square. I open the square class, and there it is, I forgot to ReDim the array. I fix that one error, and finally it works now. During this time, I have realized a small flaw in my collision detection for falling blocks (side-to-side works great). My collision detection algorithm only checks the bottom layer, so an "overhanging" block isn't getting checked. I will have to change that tomorrow. It's now 1:00am and I have to wake up for work tomorrow. So I didn't finish the basic game tonight, but I did get VS 2003 installed. There is no reason that the line clearing, scoring, level advancement and collision detection fix can't be completed tomorrow.
Wednesday August 17, 2005 - Work is out early so I start working on the game around 4:00pm. I fix a bug where the game won't end, and clean up some other coding issues. Debbie had to use the computer so I started working again around 10:30. Time to clear lines. I build the methods, implement them, and everything works well. I then start keeping track of the score, lines, and level. I play the game for the first time. I get to level 13. A couple of issues came up: a rotating issue; a side-to-side collision detection issue; when the first block is created, there is no next block (they are the same, and rotate together). One other change I think the original Tetris game had was after a block was placed on the pile, there was a pause before the next one came out. I think the pause will help from automatically bringing the next block down.
Thursday August 18, 2005 - Today I want to fix those couple of issues that I found last night. I also want to implement the high score and highest lines. These will be stored in the registry and accessible through another Windows form. The game should be functionally stable tonight and very playable. The last thing to implement is music and sounds.
Eventually I also want to implement some way of showing the lines disappearing. Some ideas are: turn them white with particle effect streaming off, then remove them; break the blocks into 4x4 pieces and display those pieces across the screen, like they were crushed. Another idea is to change the background color when you advance a level. I would have a set of 30 colors (I can't see anyone getting past level 30)
Sunday August 21, 2005 - Ok, so my schedule is completely off now. Oh well. Tonight I basically worked on graphics with Debbie. We create some nice looking blocks. Then I decide to create some spheres. They turn out great. Now I have a title for my game as well, "Falling Spheres". That took about 3 hours to get the colors, contrast, etc right. GIMP made it easy, but there was still a lot of tweaking.
Monday, August 22, 2005 - Tonight I fixed the rotation from going out-of-bounds. I also implemented the pause after the collision. Tomorrow, I will work on the rotating overlapping the pile.
Tuesday, August 23, 2005 - I redo the rotation algorithm 3 times before I finally get it right. The game is completely functional now. I still have to implement the high score stuff, create a nice icon graphic, implement the music, and sounds.
Wednesday, August 24, 2005 - I started off tonight trying to separate the main timer loop from the UI. I wanted to be able to show the pile dropping down when lines are cleared. I completely failed. After 2 hours, I used the very nice feature in Visual Studio and undid 500+ edits in 2 files. I then implement the high score screens and registry entries. I play and set the first high score. Now Debbie will have fun playing and beating me. Tomorrow I will get the music and sounds implemented. I'm pretty excited to put the polished game on gamedev.net. Oh yeah, I signed up as a gdnet+ member today. Future journal entries for this game and the games to follow will be posted there.