Sunday, February 28, 2010

Daily Developer: Day 57

I finally bit the bullet and created a new project to fool around with the farseer physics engine. After copying pieces of the simple game project that is provided at their site, I modified it to allow the addition of extra circles into the game. I think that this will help me get things moving in my shooter.

I believe I was neglecting to create new geoms for all the new items. Tomorrow, I'll take a look and see if I can get it working correctly.

Duration: 00:24:36

Saturday, February 27, 2010

Daily Developer: Day 56

I had company in town and took a day off from working on my game. I was also getting a little frustrated and felt I just needed some time away.

I found a much simpler example that I downloaded. After looking through the code, I tried to port some of the code over, but it didn't seem to do what I wanted. Instead, it now seems that the projectile and movement portion is flaky, since some is maintained by the physics engine and some is maintained by hand.

Not sure what I really want to do from here. I would like to try to get the physics working with my game, but I don't know that it would help make it any more fun, so I don't know that I want to spend a long time working on it.

Duration: 00:19:38

Friday, February 26, 2010

Daily Developer: Day 55

I stubbornly returned to trying to figure out why the physics engine wasn't interacting with my code. It looks like I am doing everything that I need to, but I am still missing something, since my test move doesn't seem to do anything.

I think it really might be time to try to experiment outside of the game... but it just seems like I must just be missing one little thing. We'll see.

Duration: 00:26:01

Wednesday, February 24, 2010

Daily Developer: Day 54

I moved the drawing into the Growth object. I copied over some farseer code from their examples and tried to get the growth to move, but I am not yet having success. I think I will try to create a simple project for experimenting with the farseer stuff and then use that knowledge to implement it in my game.

Duration: 01:07:57

Daily Developer: Day 53

Refactored the GrowthManager to handle the drawing of the individual growths. Added the farseer physics engine into the game screen and then spent some time thinking about how to replace what was currently being done with the farseer code.

Duration: 00:34:59

Monday, February 22, 2010

Daily Developer: Day 52

Downloaded the farseer physics engine from Codeplex. I played around with the demos provided. I copied the engine into my solution directory and added it into SVN. Then, I added it to my game solution.

I started looking through the way I've been doing things like creating new objects and collision detection and compared it to the way it could be done in farseer. It will take some re-factoring, but having a physics engine will take care of a lot of details for me, and will make modifying game-play elements much easier.

Duration: 00:37:51

Sunday, February 21, 2010

Daily Developer: Day 51

Watched the remainder of the previously mentioned video, skipping past some of the areas that I already had experience with.

Duration: 00:32:14

Saturday, February 20, 2010

Daily Developer: Day 50

Watched to time mark 35:00 of the second video. Started skipping ahead since some of it really should have just been edited out. Will try to finish the rest in the next couple days.

Duration: 00:16:11

Friday, February 19, 2010

Daily Developer: Day 49

Pretty easy again. Finished watching the first XNA video and started watching the second one. Will probably try to finish viewing tomorrow.

Duration: 00:32:43

Thursday, February 18, 2010

Daily Developer: Day 48

Continued watching the video about XNA game development. Almost completely done with the first video and am looking forward to playing around with the Farseer physics engine after I am done watching both videos.

Duration: 00:32:29

Wednesday, February 17, 2010

Daily Developer: Day 47

My friend, Jason, found a site that has a show called dnrTV. He recommended the shows on XNA development, so today's work consisted of watching the first half of the first video.

The video is about the process of making a quick and dirty XNA game reusing as much code as possible. It starts by introducing the farseer physics engine as a good way to manage collision detection.

I might have advanced my game along as far as is worthwhile. I don't know that it will ever be something that is a "fun" game. But, that doesn't mean it was unsuccessful or a waste of time. I've learned how to use a number of different tools, the benefit of different coding practices, as well as getting a good feel how to work in the XNA Framework. While the game might be a bust, I am glad I put the effort into this particular game since I had been wondering about making this game for years. At least I know now that it isn't as much fun as I'd hoped, but I don't need to wonder about it any longer.

That said, instead of abandoning it, I think I am going to expand it and try to incorporate some of the elements from this video and farseer. It may evolved to an interesting game. Maybe if the items were moving it would be more challenging.

Duration: 00:36:08

Tuesday, February 16, 2010

Daily Developer: Day 46

Today, I changed the default resolution from 800x600 to 1024x768. I also updated my collision detection class to dynamically calculate the collision grid based on the resolution instead of relying on it being 800x600.

I also stuck a stub in for a high score screen. I still need to create the backend for recording the high scores, and will also need to look into how to display them on the screen.

Duration: 00:21:30

Monday, February 15, 2010

Daily Developer: Day 45

Spent a good deal of time just looking through the code, thinking about some of the different elements that could be worked on. I finally settled on addressing some ToDos I had left in the code for myself, the most notable being that I can now adjust the resolution.

Unfortunately, the collision detection is hardcoded to assume 800x600. I'll look at fixing that tomorrow.

Duration: 00:38:46

Sunday, February 14, 2010

Daily Developer: Day 44

Transcribed some of my handwritten notes into mind-map format using FreeMind. I started Visual Studio, but never got around to actually coding anything in it. Will probably continue putting my ideas into the mind map tomorrow and try to expand on it with some extra brainstorming.

Duration: 00:28:44

Daily Developer: Day 43

I was still visiting with the family, but I worked in my minimum of 15 minutes. Without access to my development tools, it was limited to some brainstorming and note taking. This is a good thing, since some good ideas finally got recorded and will probably be worked on in the following days.

Friday, February 12, 2010

Daily Developer: Day 42

Visiting my parents and siblings, so today I took the opportunity to have my brother install and play around with the game for a bit. It took about 15 minutes to download and install all the stuff, as well as opening the XBox controller for PC that he had sitting around. I'll see if I can get him to fool around with the game and give me some feedback.

Thursday, February 11, 2010

Daily Developer: Day 41

Today, I reworked how I calculate the score needed to advance to the next level. Then, I played around in the game for a bit, trying to find some default values that seemed reasonable. I hard-coded the values into the game for the initializing case, but it still writes and reads everything from the options.xml file.

I also updated the main screen to display the name of the game plus the version number. Then, I put it up for review here: Toxic Growth v0.1.0.237 Feel free to download and take a look. If it crashes, most likely you are missing .NET 3.5 or XNA 3.1. which you can get here:
Let me know what you think. All feedback is welcome, but please note that zero effort has been put into graphics or sounds, yet. My focus has been on making a game that is fun, so game-play has been my primary concern.

Duration: 00:48:50

Wednesday, February 10, 2010

Daily Developer: Day 40

Added my new options to the options menu. I also spent some time messing around with some more ideal default settings. I think I need to adjust the way the next level is calculated, since the later levels occur too quickly. I will probably finish that up tomorrow. Then, I want to add the version number to the start screen, label the version in SVN and the distribute the latest game.

Duration: 00:42:26

Tuesday, February 9, 2010

Daily Developer: Day 39

Added a "rate increase" to both expansion and spawning. And, I made this configureable via the options.xml file. I also included a "NextLevelScore" in the options file. Now, whenever the level * NextLevelScore is met or exceeded, I subtract the rate increase values from the "time till next spawn / expansion" values. This means that the better the player does, the faster the game is.

I think I might distribute the latest version tomorrow for extra feedback.

Duration: 00:50:07

Monday, February 8, 2010

Daily Developer: Day 38

Today was a pretty uninspired day. I adjusted some of the unit tests, and updated the GrowthManager to return counts to help verify testing properly. I ran into a problem, however, when I tried to run the tests. The textures for the growths were not set, and it was causing null reference exceptions. Thinking about this now, it occurs to me that the real problem is the the GUI elements are mingling so freely with the game code. I need to separate these a bit before I can continue testing effectively.

Tomorrow, I will attempt to refactor the GUI elements away from the management elements. I also want to introduce a gradual increase in the rate of spawning and expanding, since I think that this will make a "complete" game mode.

Duration: 00:32:10

Sunday, February 7, 2010

Daily Developer: Day 37

Added some tests to the GrowthManager. In doing so, I realized that there were a number of changes that would make testing much easier (mostly adding return values to the methods that were just returning void.) The process of adding tests is also revealing some dependencies the objects have on one another. Currently, all of the manager objects are static. While this is convenient for being able to access them where ever they are needed, it is also detrimental in that sometimes the different managers are directly dependent on one another. I'll need to think about the structure and consider adding some interfaces.

Duration 0:20:00

Time Tracker Project

Now that I've established my daily ritual of developing my game, I've decided to expand into other projects, as well.

The "Time Tracker" application was something I wrote very quickly at the beginning of my daily development as something to help keep accurate time of how long I was working on my game development. It was very simplistic in that it had a hard coded value for the project being tracked and that new projects could not be added to the list.

Today, I used some of my experience with my other tools and updated the project to adhere to StyleCop standards. I added support for saving and loading the project list from an XML file. Additionally, you can now add new projects simply by typing into the combobox and hitting enter. Obsolete projects can be deleted by selecting the project from the list and then clicking the delete button.

My next steps include:
  • Adding a pause button.
  • Stopping previous project when Start is clicked for another project.
  • Adding logging support to see the details of when a project was worked on and for how long.
I may eventually add this to SourceForge as well, but I want a more complete product before I do that.

My goal for this project is to work on other developer stuff for about an hour a week. I'll do more as I am inspired.

Duration 1:25

Saturday, February 6, 2010

Daily Developer: Day 36

Continued adding unit tests to my game. The projectile are pretty well covered and I moved on to addressing the growths. I figure I'll get the different "managers" that I've created covered and that should be most of the code. Once I have the growths and the grids covered, I might take a break to make some changes with collision detection.

Duration: 00:32:05

Friday, February 5, 2010

Daily Developer: Day 35

After seeing first hand some of the benefits of NUnit at work, I decided that it was a good time to incorporate it into my game. I downloaded NUnit and installed it on my PC. After a little confusion, I was able to setup another project that I called "ToxicGrowthTests". I wrote a couple of little tests and verified that the system ran. Had to run the nunit-x86 executable to get it to test properly. I got a good way into testing the Projectiles and then decided it was time to call it for today.

While I have been spending quite a bit of time on things that are not directly development related, I know that working with these tools is worthwhile and can easily save me a lot of time later, if I need to change things. Since I am about to start analyzing and researching the motion of objects and collision detection and likely making some changes there, I like the assurances that I can get from having the code verified to be behaving like I expect.

My plans are now to continue adding the unit tests to my game until I have complete coverage. After that, I am planning on the collision detection enhancement. I might also look into FxCop, but am currently unsure exactly what benefits I can get from it.

Duration: 1:32:10

Thursday, February 4, 2010

Daily Developer: Day 34

Through a little extra research, I discovered that the StorageDevice, part of the GameServices element, is not included without a full premier account. So, I removed the Xbox safe way and now rely on "System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)" to get me to a reliably safe location to save files.

I also updated the write routine to make it a little more robust. There are probably some extra steps I can take to ensure that it is not going to crash, but I'll return to that later.

I might need to just go over some notes tomorrow and try to decide what should be my next focus. I'm also toying with the idea of some NUnit tests.

Or, I might research collision a bit more, since there is only the appearance of movement right now; projectiles disappear from one position and then reappear a predefined distance further along, making it possible for very fast projectiles to skip over the growths altogether. Yes, I think this will be tomorrow's focus.

Duration: 00:53:54

Wednesday, February 3, 2010

Daily Developer: Day 33

Researched how to correctly obtain the "correct" location to save my game settings. However, I did this by using StorageDevice and this caused a GamerServicesNotAvailableException because I do not currently have a premier license. I figure that when I get a game to the point where it would be worth testing on an XBox 360 I would purchase the account (and then buy an XBox 360). I posted on the XNA forums looking for suggestions on how to handle the options saving.

Duration: 00:57:16

Tuesday, February 2, 2010

Daily Developer: Day 32

Some actual coding today. And, it really makes a noticeable difference. Now, while you are playing the game, a score is displayed on the screen, incrementing by one each time you shoot a growth. When you bump into one of the growths, the game is over and you are taken to the "Game Over" screen. It displays your score and allows you to quit or start a new game.

Tomorrow, I think I am going to mess with a number of different options.xml files to experiment with finding a setting that is fun.

I also might need to think about "levels." Starting the game at a slower spawning and expansion rate and then increasing it as you achieve certain point values.

Also need to tinker with allowing the health of the growths to be adjusted via options.

Duration: 00:46:55

Monday, February 1, 2010

Daily Developer: Day 31

Added support for saving and reading the options values to a file, "options.xml". This should make it easier to create a variety of settings files and try to decide which settings are the best together. It also allows for finer tweaking of the settings by editing them directly with a text editor.

This section still needs some cleanup, but works well enough for now. I will probably tweak it a little bit more tomorrow and then redistribute to those interested in trying it for me.

As the code is now becoming more complex, I am thinking that I've overlooked NUnit long enough. I will probably look at that tomorrow or in a couple of days.

Duration: 00:53:58