Geeks With Blogs
George Clingerman       XNADevelopment.com

With XBox Live Community Games (XBLCG) going live soon, I've been thinking a lot about things that are going to help all of us be successful. One of those things is encouraging hobbyist and independent developers looking to get their game out to the public to consider the quality of the game. Flooding XBLCG with a lot of poorly implemented games missing most of the polish that regular XBox Live Arcade (XBLA) titles have will quickly sink our ship.

Microsoft has already made some effort encouraging the community to take this into account and they've release a set of Best Practices for XBLCG. I've been reading, and re-reading those practices these past couple of weeks. I've got quite a few game demos on my site and well, they're all a LONG way from meeting those practices. In fact, my game demos are perfect examples of what we DO NOT want to see flood XBLCG when it releases.

So I decided to try and do something about that. I woke up on Saturday, picked one of my simpler games and began building a framework around it to help encourage and implement those best practices. Just for fun, I kept a running log of what was going on and just how my day was going while I was trying to implement these best practices in my game.

 

Saturday, October 25th A day in the life of a developer dad....

9:00 AM I decided that I was going to try and move through the Best Practices list provided by Microsoft and add them into my game. I decided to start by CropperCapture[20] bringing up the web page and opening my project "Move The Growing Creature But Do Not Collide".

9:00 (and some seconds) Started to type, interrupted by cries of "I pooped!" Guess it's time to go do the fatherly duty no one talks about...this should have been on the brochure! It's butt wiping time!

9:06 Severe hand washing later, back at it. Oh, have to move, the baby is grabbing my laptop cord...

9:07 Trying to figure out where to start. Running the project and trying to remember just what state it's in...

9:09 Ok, not too bad. The game runs and it's got some elements from the best practices list already. Let's review that "Best Practice" list and review what I'm missing.

9:12 Looks like more than I realized. Decided I might as well start with the first one and work my way down through them. So what's up first?Ok, looking over the Best Practices point by point and putting them into the game. Here we go, "Gamers Expect Games to 'Just Work' on any TV".

  • I've set my resolution to 1280x720, so that's done.
  • I've built into the base screen class so that when I hit F1, I can see what parts of my
    display are outside the TitleSafeArea.
  • Need to review my text and make sure none of it is less than 14 font...

9:15 Before I could start reviewing, the baby started grabbing my laptop monitor...This little guys is persistent! If only new game developers had this kind of persistence we'd have a lot more games popping up out there in the community. I may have to move again or find something else to distract him..and he just grabbed my cell phone. Ok, time to find this little mover and shaker some toys.

9:20 Some toys and one diaper change later, I'm back to looking for small fonts in my project..I think I'm going to add it to my base text class to yell at the developer (me) anytime I use a font that smaller than 14 in size.

I'm working on cleaning up the code so that all of the text drawing is done through the Text object in the base class. Oh and Ninja Turtles Fast Forward is on..I love Saturdays!

Great, here comes the baby again! We'll see if my blanket barricade works.. He's almost crawling! Yeah for Tennyson! The barrier seems to be holding, he thinks it's a funny challenge to try and crawl through this folded blanket. Well, while it's holding, let's get back to the code cleanup.

So am I using the text object everywhere yet?

Ok, Tennyson is fussing, I think it's time to make him a bottle. I'm still working on getting the error message displayed properly when the font is too small so that the best practices are followed.

10:01 Baby eating the bottle. typing with one hand...must get that font message displayed.

10:10 Baby finished with his bottle...back to coding with two hands again. I'm ignoring IMs from well meaning friends with tempting videos to watch. Focus is key. I'm not even done with the first best practice yet!

10:20 Displaying the message about using a small font just fine. Now to finish converting everywhere in the code to only use the Text object. Basically no where in code should I see the "DrawString" method except in the Text class.

10:35 Oh, no, here comes the baby again!..oh my gosh he's crawling!!! He's ACTUALLY CRAWLING! Time to wake Shawna up, this is HUGE! Our little baby is mobile!

10:50 LOL, mass chaos, many pictures and quite a few little crawling runs later and I'm back to working on my game. I just finished up converting the Menu to use the Text object and got done testing it. Looks like it's all good and I've changed the code so that everything uses Text. It looks like the messaging is working too. Yeah for following best practices!

Shawna's up and done taking baby pictures and crawling videos. Time to give her a quick kiss :)

[Here's a video Shawna took of the big moment!]

 

11:00 Ok, reviewing the first best practice one more time, yep, looks like I've got everything covered. Time to look at the second best practice. "Gamers Expect a Good Trial Mode"

Hmm...so I know the framework has a new method built in for that, I'll need to check that out and figure out how to add a Trial Mode screen for that... Let's get to it :)

Adding in a Trial mode screen. Basically, I'm checking the Guide.IsTrialMode property and if it's true, instead of going to the normal game screen, I'm going to the Trial Mode screen. That should allow me to put whatever part of the gameplay, starting level, etc. I want into the trial.

Oh wait..looks like that can change at any moment. So I'll need to add some code to constantly be checking that...? Not sure of the right way to handle that.

Still not sure if I'm necessarily handling Trial mode correctly, but I have it in there. It seems too that the PC always returns True...so I'll need to fix that for the Zune and the PC. Might be time to write a Guide Helper class and use that...

Adding Keyboard Shortcut to place game in Trial Mode...

Ok, so I can simulate TrialMode at any moment by simply pressing F2 (I'll have to figure out a smart gamepad combo for these admin keys sometime)..I think I'll have to re-visit the Trial Mode Best Practice again, but that's a good start. I definitely have to learn more about this best practice.

12:09  Ok, with my focus on that one done, I'm suddenly realizing I'm super hungry. Time to make doe eyes at Wifey and beg her to go pick up some lunch or something. I'm feeling much too lazy to do any cooking today. Time to work some charm.

Had to get up to check on the 3 boys (the baby is asleep right now, all the crawling wore him out!). They're getting a little feisty (and hungry). I showed off the game a little bit to them. They get so demanding, always want games to be done right away...if only it was that easy! :)

12:15 Wifey's getting around, going to go pick us up some lovely junk food for lunch. Probably McDonald's since that's one of the boys' favorite places. We've been really good lately and haven't been eating out a lot, so I guess it's ok to splurge. Time to find my wallet to give her the cash. I love being a cash only family. Lunch is on me today since I'm feeling so lazy!

Time to refill my coffee too. I love me some caffeine! After that onto Best Practice number three! Gamers Expect a Friendly Menu System

12:20 Nice day out too, going to get the boys outside. Get the windows opened up and air out the house some! Where did I put that coffee cup?

12:30 Shawna's out the door, windows are all open...whoops, still forgot my coffee...ok, got it! Made a quick round of all the kids too. Tennyson is still sleeping peacefully, Owen is practicing spelling things from books on the desktop, Gareth is helping out and Reece is sitting next to me flipping through a book on Colors and saying them out loud.

Let's do a quick spin through the forums just to see what questions have come up. Oh geesh, some new guy wants to make a racing game for the Zune but he doesn't even know how to code. Good, Jim's linked him to the "Help! I'm new FAQ" already. No better way to guarantee you'll never get into game development, then shooting too high. I don't think any of us would ever learn to walk if we just started by trying to run marathon's when we were babies...Why can't people seem to translate that to game development?

Ok, check my texts on my phone since it just chimed.

CropperCapture[22] 12:35 Back to Best Practices. So let's read up on this "Gamers Expect a Friendly Menu system" one. Well, I think I had most of that done already. I don't really have a Failure indicator so I'll need to add that at some point when it makes sense... And then the confirmations and errors aren't really displayed right now either. So I'll need to revisit that.

12:45 Sounds like Tennyson is fussing, probably should get him a bottle made and get him up. But looks like I'm ready for best practice number 4. Gamers Expect Consistent Controls.

Going to surf the forums while I feed the baby his bottle...

1:48 Shawna got back with the food, fed the boys, and then we watched an episode of Sanctuary off of SciFi.com while we ate. Pretty good, but I had totally figured out who the killer was as soon as we were into it, so the suspense was kind of lifted. Probably a good thing since I get creeped out easily.

So, here were at Gamers Expect Consistent Controls...well, maybe I'll finish catching up on forum posts first. Looks like I have two pages unread.

1:55 Had to stop and build a quick baby coral with pillows and blankets. Mr. Newly Mobile is just getting into everything! Time to turn some music on too :) Still trying to learn all the songs for RockBand so I think I'll put on the RockBand track list I have.

2:24 Still struggling with how to properly handle the disconnecting of controllers. I mean, you don't want to pause the screen if the controller was never turned on in the first place right? Then there's the Zune and the PC, have to make sure I can handle that too.

Ok, the Game is pausing, now I just need to add in Menu screen overlay for the Pause.

2:50 Lego Star Wars is in full force. The Boys are having a blast, lol, but they're being so noisy it's causing me to lose focus. Time to sip some more coffee and add in a Pixel image to the project.

I've decided that when the game is paused, I want to overlay a grayish, transparent looking screen with the menu on it. Having a single pixel image is useful for those kind of things!

3:00 Adding in the Menu Items for the Pause Screen. CropperCapture[26]

3:15 Now I just need to hook up the events for the default Pause Screen menu events. I'm craving some some new music first. The boys are all done playing video games so I think I'll turn on the stereo and put in Evanescence.

...ah, music makes coding so much better. On to those events.

3:44 Everything's all wired up. I took a little pause and helped Shawna with her blog layout. She doesn't need me much anymore for editing the CSS or HTML. Just more wanted me to look over her changes, nod my head and say, "yeah, that looks like you code that right!". She's one smart cookie.

In adding the Pause screen, I've realized I'm going to have to create a separate inheritance branch and not have the Pause logic in the base screen class. Otherwise the splash screen, title screen and even the Pause screen can be paused. Nothing like recursively pausing the game!

Trying to decide if I should add that separate inheritance branch now, or if I should move on to another best practice. This day is disappearing fast!

3:50 Time to take a quick look through the forum posts to see if anything interesting has popped up.

4:03 Ok, no unread posts. Probably should have posted in the "why did you stick with XNA thread", but I couldn't think of how to phrase it. I'll try and remember to come back to that one later. I also went ahead and broke off a separate branch for screens that should allow pause from screens that shouldn't. It really didn't take too long. Sometimes I'm overly lazy. :)

Shawna just left to go running so I'll need to keep my ears peeled for the little one waking up. I'd also put Reece down for a nap earlier (he was spitting chocolate milk all over the kitchen) so he should be waking up soon too. The older two are just drawing at the table right now.

Well, I think that wraps it up for that best practice. Let's take a gander at the next one.

4:05 Tennyson just woke up, so had to change a diaper and then re-prep the coral. The older boys are getting a little crazy out there drawing at the table too. I'll have to try and calm them down a bit or convince them to go be crazy outside. They get all wound up and start getting out of control, have to direct that energy into something....

CropperCapture[23] 4:17 Ok, looks like there's not much I can do for "Be Kind With Audio". Only major one I see is that I need to make sure I'm loading background music properly so that the player can replace it. I think it's time to grab one of Nick's song, throw it into my project and wire up some code to do that right.

Well that was easy, still need to figure out how to build it into my framework properly, but I know how to play songs properly now according to the best practice. Also took some time to add in an Options screen to adjust SoundFX and Music volume.

4:30 Reece is up next to me on the couch now watching what I'm doing. I showed him how the game has background music and a pause menu. He just wants it to be on the 360 already...

Patience!

Ok, next best practice "Gamers Use One XBox 360 Controller." Awesome! It looks like I'm doing this one already. I have a detect screen built in and I'm storing the index of the controller that presses the button first.

Oh, but I need to back out to this screen and if they back out from this screen I need to exit the game. Looks like I still need to add that functionality in to the framework. CropperCapture[21]

5:00 Had to go get Tennyson and feed him a bottle. I managed to get the screens working properly according to the best practices.

Shawna's back from running now, and now it's time for me to look at the next best practice (oh, I skipped the Guild.ShowSignIn...the best practice wasn't too clear on what they meant?)

So on to "Gamer Profiles Matter" but before I do, maybe I should check the forums again. It's so easy to get behind on pages of posts there and I like to read every single one. 

Ok, just read a few threads. I still have about a page left of new posts that I need to go through. None looked like my level of expertise though so it's up to the smart guys to answer them.

5:10 Time to read over "Gamer Profiles Matter" and see what there is that I can do. I don't know much about working with gamer profiles so this should be a fun learning experience.

JediBoys 5:30 Shawna's getting ready to go to Bunco tonight and the boys are all running around in their Star Wars Halloween costumes. They're having a fun with light saber and blaster fights. Lol, they're cracking me up!

I've been working on enhancing the code a bit to make it easier to disable menu items. I got kind of distracted from looking at the Gamer Profiles Matter best practice. Phew, how many more do I have left anyway?

Ouch. Been working on adding polish all day and I still have 5 best practices left to go over!

I'm getting kind of hungry too and I know the boys will be yelling for dinner in just a minute so I'd better start thinking about making some dinner. Tennyson's having a blast just rolling around in the pillow/blanket coral I've got him in. He really wants to crawl over and the the XBox 360...is he already a gamer?

5:40 Time to get up from the computer and try and figure out what to do for dinner. I'll take a look at gamer profiles when I get back.

6:30 I'm sitting here next to Princess Leia on the couch (Wifey's going to a costume party tonight :) ) and trying to decide if I have the energy to tackle the next 5 best practices. I think I might work on polishing up the game play and graphics on my simple little game a bit more as a breather.

I fed Tennyson dinner and he's down for another nap. He'll get up in a bit for his bottle and then will be down for the night. The boys are still running around playing Star Wars in their costumes. It's going to be bed time for Reece, my four year old,  in about 30 minutes.

The house is going to be nice an quiet tonight. Maybe I'll plan on picking up the best practices again at 8 p.m. after everyone's in bed.

CropperCapture[25] 6:46 I'm working on converting my old code to use some of the newer classes I've created. I'm also just working on general refactoring and code cleanup as well. .

8:00 Well, bed time came all in a rush. I managed to wrangle all four boys into bed. I just finished restarting my laptop and I am ready to start the night. Oh no, I hear Tennyson crying...I guess it's time for his nightly bottle. Looks like I'll be getting started after I give him a little nightcap...

8:25 One bottle of formula and one episode of Skunk-Fu later, I'm ready to start coding again. I was working on putting the Wall sprites back into the game using the actual Sprite class. Guess I'll finish that up.

9:22 Working on collision detection for the game. I need to add in some collision rectangle displays to the base classes to make troubleshooting a bit easier. Then when I can't figure out why my sprites aren't colliding, I can hit a key to visually show their collision rectangles. Definitely helps with debugging 2D collisions.

9:49 Well I'm tired of coding. I think I'm going to call it a night. There are just too many simple errors slipping into the code now. Time to check in my changes to Subversion and switch gears to something else. I wonder if I have some more Justice League cartoons to watch? All in all, a pretty good day coding.

 

This is the chronicle of my day, your day looks the same right? Right....

 

Technorati Tags:
Posted on Friday, November 7, 2008 6:13 PM XNA Development , XNA | Back to top


Comments on this post: Everyone's day looks like this right?

# re: Everyone's day looks like this right?
Requesting Gravatar...
Nice! I had a blast reading your post. And congratulations for Tennyson's crawling!


Left by Catalin Zima on Nov 08, 2008 12:12 AM

# re: Everyone's day looks like this right?
Requesting Gravatar...
I'm gonna have to do one of these "A day in the life of a coder" things the next Friday or Saturday I have to code.

I vaguely remember when my son started crawling way back when.
Left by Jim Perry on Nov 10, 2008 1:31 PM

# re: Everyone's day looks like this right?
Requesting Gravatar...
You have Wifey at home and you feed the baby a BOTTLE? News flash: Nestle' doesn't make food nearly as good as Nature's Choice.
Left by Old Daddy on Nov 12, 2008 12:41 PM

# re: Everyone's day looks like this right?
Requesting Gravatar...
I must say, congratulations on finding the ability to stay at it (coding) with all that going on. I have a 5yr, 3yr, and new born and I would never have been able to stick to it like that. Kudos.
Left by Anthony on Nov 25, 2008 6:42 AM

# re: Everyone's day looks like this right?
Requesting Gravatar...
Thank you for writing this post this parallel my efforts to working on some project.
The things is, even with all the those distractions, I would not trade my son, daughter or wife for the world.
I have just been pushing all my work to night so I can spend more time with them.
But I get super pooped!!
Thank you for sharing
Left by Jentzen Mooney on May 12, 2009 1:02 PM

# re: Everyone's day looks like this right?
Requesting Gravatar...
Thanks for your post. There is an wonderful website about Cheap wholesale bags
Left by cheap bags on Jul 25, 2011 8:23 PM

Your comment:
 (will show your gravatar)


Copyright © George Clingerman | Powered by: GeeksWithBlogs.net