My progress on City Tuesday is still mired in the deep bowels of the game’s engine. Who would have thought that programming a time traveling world would take so much code. My current aim is to get a version of the code up that shows a cross-cut approximation of what the final version of the game will look like. It will have only 3 bombs to discover but will have the world in a nearly complete state. At that point I will be free of programming the “time physics” of the world and will be able to focus on story and new puzzles that dominate the bulk of the game.
This week I was so lucky to be featured on the “Just Press Start” podcast (episode 64). I love the podcast format because when it is executed well it can go off like a grad student defending their thesis. As the student, I was able to describe my influences, what I was hoping to achieve in the game, and argue in favor of some of the tougher bits (like the fact that the world is small and you spend a lot of time in it). Download it because it will tell you a lot more about my game than the ramblings I put out each week on this blog.
This week I am also heading up to Phoenix to show the game at the monthly International Game Developers Association meetings. There is a really great and diverse set of developers in Phoenix and I hope to get some good input on the game.
Well I gotta go get a build of it ready for test so it is time to go.
Sometimes the reason developers are secretive about what they are working on is because a lot of game making is really boring. I have spent the last two weeks working on code to make a subway car move across the world. After these two weeks I don’t have a great new screenshot to show you or a video that will induce the uninitiated into anticipation. However, I do have some new robust code that will keep schedules for all of the vehicles.
In order to get time travel to work in City Tuesday, everyone must be scripted. The trains must run exactly the same every play through. Therefore, I spend a lot of my time making sure that the code is precise enough to make the train hit its marks yet robust enough so that I can change it on the fly if tomorrow I decide the train should arrive at 3 minutes and 15 seconds instead of 4:32 seconds. When I make that change, all the screens between the start and finish must slowly increase the train’s speed so that it will arrive at the time I now specify. It is a discrete problem that is magnified over the course of the train ride. If each screen is off by a tenth of a second then by the end of a 10 screen trip the train will be off by a full second. Getting the equations right and accounting for the edge cases (like I want to make the train slowly accelerate) are what bog you down. I could spend weeks on this problem and not have anything to show for it. It can make a part-time developer like me sweat as my targeted release schedule gets pushed out like the train that I am programming.
However, that is all done now. This morning I got the time code working just right and without any bugs standing in my way I should be able to add a new bomb puzzle. I had to get my vehicle code perfect because this bomb that I will be implementing relies on a series of garbage trucks picking up the trash cans from around the city.
Keep checking here for updates.
I have been positing visual proof of City Tuesday’s progress on www.screenshotsaturday.com so check there.
Here we are on another Tuesday, and time for an update on the game. I was dark most of last month because I was on a 3 week tour of Italy and Switzerland for my honeymoon. I will spare you all the lovey-dovey details but what you should care about is that I saw TONS of signs that are amazing. Two centuries ago the world’s artists would go over there on their Grand Tour to learn about classical art. Now I go over there to see Europe’s city planning and graphic design. By the way, Switzerland has Italy (and probably the world) beat in the readability and follow-ability of their signage. Sometime soon I will dedicate a whole post to the signs I saw but for now let me show you this one:
So the big news this week is that I am not one of the coveted 8 games included in the Summer Uprising (I came in 15th). I am disappointed because it would be so much fun to be on a tour like that. It is like not making Varsity and so you don’t get to go on all the cool trips upstate and wear that full colored Jersey on Fridays. Oh Well. I did loose out to some really great games and I can’t complain that the voters are dumb and only vote for shooters because I mean, one of them is a model train simulator, that is awesome! Looking at the list of nominees there is only one game out of 8 in which you fire a gun. It really is an interesting mix.
One upside to missing the Summer Uprising Boat is that now I don’t have to get my game done by August 22nd. City Tuesday’s unique repeating time mechanic has increased development time greatly. Every single character in the world is a scripted being that must make their mark every time. They also have to act like humans so they have to hand things off to one another, they must be able to run sometimes, climb into cars, put things in cars, and, thanks to some weekend crunch, sit down. Yes they can sit (but not read a book). So it means I spend a lot of time just trying to get a boring stick figure to do very boring things. I feel like a clock maker who doesn’t know when to stop making things complicated. If you want to hear a great short story that sums up my experience with this game listen to this short story on the New Yorker fiction podcast (it isn’t boring so don’t skip it.) **bonus point is that you find out where I got the music in my trailer.
When all of the characters are assembled together it will look like a living breathing city. I would like to do an updated game play video but for a while here it is going to be “look at him, at precisely 2 min and 33 seconds he sits down on the bench and opens the paper! It is not until a lot more stuff happens will there be some cool videos that I can show. So stick with me and in a few weeks I will make a trailer that will be awesome.
Alright, got to get back. Talk to you later.
If you are interested in reading more about City Tuesday I have been featured in a couple articles:
In March of 2010 I attended my first Game Developer Conference. At that point I had never completed a game but I went to see if the games industry was something I wanted to get into. After three days I could see an overflowing excitement in everyone there. It was creative and different than what I was doing at the time.
So with the principles game design floating through my saturated skull, I boarded the Bay Area Transit car en route to the airport. Then, on the other side of the train, I saw this warning sign:
It was such a subtle image of absolute terror. Why were these people evacuating the train? How were they going to get out of this tunnel.
Warning signs are meant to reassure passengers of the vehicle’s extensive safety systems but in most cases they introduce me to potential dooms in ways I am not creative or paranoid enough to conjure up.
It was at that point that I decided to use this sign as a jumping off point for my next game. I wanted to explore how we use warning signs, how potential disasters are hidden between the images, and what all these mean in our current environment of terrorist warnings and national disasters.
So this is my game. Right now it is called “Tuesday Morning in the City”. You control a single man who must single-handily foil a terrorist plot. Of course it helps that you are stuck reliving the last 5 minutes of your life and therefore knows where every bomb is going to be placed and where every terrorist is.
Before I explain why, let me start at the beginning…
The Microsoft Corporation of America spent millions developing the XBOX 360. They built a powerful online infrastructure in the form of XBOX Live. They coordinated with high tech manufacturers to provide the component parts for graphics and sounds. They coordinated with worldwide distribution chains to get the box on the shelves of thousands of electronic stores across the world. They did all this and they let me make as many games I want for it for just $100 a year.
I have nearly complete control over the hardware. Well almost everything. I can’t create achievements, read saved data from other games, or access the Internet. But close enough. Big game companies pay a lot of money for development kits to build games for this same hardware.
By developing an XBLIG game, I am playing on the same court as the big game companies. However, they have hundreds of programmers, artists, musicians and game designers who have much more experience than I do. They spend millions making games with the same fidelity of a Hollywood movie.
Why should I try to make games that any way compares to them?
To stand out and have a chance at being noticed by the millions of xbox owners, I need to go guerrilla. My games shouldn’t be anything like those. Avoid space games, abandon games set in a post-apocalyptic zombie infested city. Ignore the sweeping tales about the magical war-torn world of Av’an’gool.
They made a game that doesn’t even use a controller. The game, made by a group of indie game developers named Incredible Ape, requires you to yell “Pew” into the microphone to shoot. A second player (also vocalizing) controls the height of the space man. It is the type of game that is so unique, so interesting, that it gets mentioned on podcasts. Blogs pick it up.
Listen, nobody wants to talk about your 4-level-long, side-scrolling shooter that has the crappy explosions (because you still haven’t gotten the hang of that particle generator). We must think way out into the nether regions of gaming.
A long time ago in XBLIG land there was a game named Remote Masseuse. Players connected remotely over XBOX live to could control how much the remote controller would vibrate. It was cheeky, and winking, but it was interesting. The game’s developer thought beyond what we could do with the hardware. Beyond what anybody at Electronic Arts would do. It sold quite a few and got mentioned all over the enthusiast press. It was so brilliant and simple that everyone copied it and eventually it became a punchline. But they had the right idea.
The big guys (like Activision) have to play is safe because they have share holders. They have to worry about selling in the millions. Why should we compete with that and try to make what will be perceived as budget, knock-off versions of their games.
Instead, subvert. Make odd games that you have to play with your dog. Make a games that requires two players but they must share one controller. Hell! Why not make a 64 player game that requires 4 controllers and everyone gets one button.
Try a game based on scanning cereal box covers (I think we can use the USB camera in XBLIG). Think beyond the limits of games that you find at Gamestop.
Look at the other XBLIG -released game B.U.T.T.O.N. It uses one button. The game prompts users to do something and the first one to complete it presses a controller button. It is clever and requires players to interact with each other outside of the digital realm. It is also up for a Nuvo award from the well-regarded Independent Games festival. B.U.T.T.O.N. is another game that got past the hangup about thinking like the big companies and what video games should be.
There is nowhere in the XBLIG license agreement that says we have to make either a zombie game, a side-scrolling space shooter, or a twin stick shooter. We have access to hardware that cost millions of dollars to produce. Why are we squandering this opportunity with traditional games.
If you want to get buzz for your game, no more side scrolling shooters. Treasure is already better at making them than you. No more top down twin stick shooters. There are approximately 1,000 produced every day. No more epic RPG’s. Bioware and Square already do it better. No more 2D platformers about restoring color to a black and white world. Nintendo is already there. Lets not try to beat them at their game. Lets make our own game. Or not even a game.
The algorithm required to make a character jump, in modern platformers, basically applies a sudden burst of velocity up each time a player pushes the jump button. At each clock tick, the velocity for gravity is applied against the upward movement so that your jumping character slows until the up velocity reaches zero. At this point, the character stops at the peak of her jump. She then returns to earth accelerating downward due to the same calculation of gravity that slowed her as she was traveling up. It creates a elegant, and although usually an unrealistic exaggeration of how high a human can jump, is familiar to us earthlings who fall at 9.81 m/s per second.
How ever, if you don’t want to make a perfect model of reality, and want to make your character jump in an unrealistic arc that has no acceleration you have a different set of challenges. Games such as pitfall! launch the character at a perfect arc. One way of creating an artificial jump to create a function. In this scenario, you send the function each clock tick that occurs after pushing jump. The function outputs a height that your character should be. The jump function is most likely a SINE wave or a parabola. However, a jump needs nuance. You must bend and stretch it to make it look good which would require some laborious tweaking of function variables.
Enter the curves editor. The engineers behind the App Hub site has mercifully provided a tool that you can use to draw curves that generate functions. In this tutorial I will describe how to set it up.
Download the curve editor from here.
Extract the contents to the same directories you store all of your visual studio files.
The curve editor is a stand alone program that you build and run from Visual Studio. Open the file named /CurveEditor/CurveEditor.sln and build it.
1) In the editor that appears, draw the curve by adding “keys” or spots that change the curve’s direction. I would go into more detail but I would just be repeating the excellent documentation that is in
Note: The first and last key points should be on the Y axis. To get the exact point, select the point you want to bring to the Y axis and enter 0.0 in the “Value” field.
Note: The width of your curve does not have to pertain to the time duration of your jump. This is because the program loop will check for a value until it runs out of points on that curve. Then the jump will be over.
The curve I created looks like this
2) Save the curve to your project’s content directory. I made a special directory just for curves:
3) Go to your game’s code and load the curves as content.
a) Add the curve to your content: In the Content explorer add a directory for Curves. Right click and select Add > Existing Item.
b) Right-click the curve xml and select Properties.
Set the following properties:
* Build Action: Compile
* Content Importer: XML Content – XNA Framework.
* Content Processor: No Processing Required.
4) Load the curve in your code:
a) Open the class for your character. If you are using the provided Platformer starter template, this would be in the Player.cs file.
b) Create a variable to hold the curve:
private Curve jumpCurve;
c) Add this line to the LoadContent() method:
jumpCurve = Level.Content.Load(“Curves/JumpA”); //JumpA is the name of the curve file
5) Add the code to iterate over your curve and adjust your character’s jump height:
a) In the function that handles your jump add this:
jumpTime = (float)gameTime.ElapsedGameTime.TotalSeconds;
if (0.0f < jumpTime && jumpTime <= jumpCurve.Keys[jumpCurve.Keys.Count - 1].Position)
offset.Y = jumpCurve.Evaluate(jumpTime);
//This code says that if your jump has not started and you are not at the end of the jump set the characters “Y” value to the curve hight at your time tic.
//The call to [jumpCurve.Keys.Count - 1] evaluates to the last key in the curve. So when you pull that one, you have reached the end of the jump.
While developing a game, there is a low level unease that is not unlike a tooth ache or an ingrown toenail. Is the concept as brilliant as you think it is? Is someone else out there working on the same idea, but better? Is the market going to turn and the platform you are releasing it on, or the game genre becoming passe? It is a paranoia that drives you to release your game. It also makes you feel like you are crazy. Every moment that you are not working on your game is a moment where one of those factors you think might happen could happen.
I was looking at the app hub forums this week in the “rate my screenshot” thread and someone posted a screen that looked exactly like the concept I am developing. It was a re-appropriation of standard sign graphics. GASP! That guy got here first. I checked his profile. Googled for his game studio, which I know is nothing more than his mom’s basement (this is an XBLIG game remember). This guy hasn’t released a single game. He has 3 games “in development.” He has no trailers and the screens he is showing are nothing more than that. Screens. I think I am safe. I guess he has more than I do. But, I told myself: “his game isn’t a smart reinterpretation of the data driven, omniscient, and paranoid existentialism that is 21st century.”
I really need to get this game out before someone does that though.
Last night I saw True Grit. One of the trailers was of a new Jake Gyllenhaal movie about a guy who must re-live the same 8 minutes until he can stop a disaster. That is my game. Except my game has you re-live 10 minutes. Granted, it is a differnt medium. But if that movie sucks, which I am sure it will, it could spill over into whatever I release. I can see in my mind the snarky forum headlines already being typed out: “LOLz this game is just like that sucky Gyllenhaal POS.” Hopefully I can get this game out before that movie is released to prove that my brilliant idea had a parrallel eveolution.
What is worse is that I feel like I am moving backwards in development. I spent the entire weekend trying to get my code base to work in a data-driven model using XML. But in XNA-based games that must be exported to the XBOX, the XML is held together with tape. Every time I moved my project I got stray errors about my namespace this and undetermined methods that. I made the decision to scrap the right way to do it in favor of the most practical way to do it. The game’s sprawling NPC schedule will be programmed in hard-coded instance data. Maybe later I can try out the XML and correct way of doing it. But for now, I must get something out before some other “black swan” comes in and steals my wonderful concepts away.
So this site is emerging from the ashes of Gameintestine.com. GI was a site I created when I thought the road to video games was through FAQ writing and games reporting. Although I got some press (The Escapist Magazine) and a loose contingent of fans (Kotaku), the work I was doing was very very time consuming with few rewards. It was fun but unmanageable.
Back in GI days, I was too scared to make games. I had a computer science degree but I was always intimidated by the intensity of the programming. Games are real time, they must run fast, and they need to look awesome. But somewhere around 2007, when independent games really became more mainstream, I saw some really interesting games that were not huge graphically-intensive multi-media explosions. I went for it.
Now I still don’t know much about game programming. But since going to GDC 2010, attending some IGDA meetings, and participating in my first game jam, I am totally committed.
I want my games to reflect my personal interests and to be more about the real world. Without going into too much detail (I will save it for another post), games (both indie and mainstream) are afraid to even mention the real world. For instance, if a movie or a TV show were to mention the New York Times or I don’t know…. Joan Rivers, it wouldn’t raise an eyebrow. However, it would be jarring in a game world. Games seem stuck in a world of magic or at least one on a different dimensional plane than the one we live on. But, I am not proposing Serious Games which are usually heavy handed screeds about the war in Afghanistan or the BP oil spill. I just want my games to have an awareness of current events.
Well, I should wrap this up because I really need to get back to that game programming that I said I would be doing. This blog is intended to track my progress. It will include tutorials for techniques that stopped me cold before figuring them out. I will post screen shots and mission statements for my games. Maybe even interviews with other people. It is just going to be salad of stuff.