Wednesday, April 14, 2010


First things first, that cool row loading thing that I talked up yesterday, well, it works now. Unfortunately for you dear reader (*scoff*) it went off without too much of a struggle, so I don't seem to have a colorfully worded story to go with that.
Actually check that, I'll make one up. Assume that none of the following things are true.

So I was sitting around my house watching The Life Aquatic when suddenly, the President of Mexico runs into my house. Frantic and sweating he pleads in surprisingly good English to help him. Apparently kidnappers are after him, like in Man On Fire, except these kidnappers (presidentnappers?) are also members of Al-Quaida. Big ones, since they have mug shots on those stupid novelty playing cards that were all the rage years ago when anybody gave a deuce.
Seeing that he's in trouble, I throw on my flippy floppies, turn in that slow way that both action heroes and strippers use to great effect, and say while tightening my bandanna, "Mr. President, come with me if you want to live. Afterwards, you can buy me taquitos."
I then flip up my couch revealing my giant hidden cache of heavy weapons and samurai swords. Naturally, I pick Daisy, my samurai sword with a machine gun in it. Oh, you see those all the time, so I won't bother you with the details of how it works or looks. Just know that it's not just the coolest weapon ever, but quite possibly the coolest object in the History of Stuff.
So out into the street I ran, flippy floppies making that great flip and the occasional flop noise. Of course, I didn't really hear to much since Daisy was busy turning terrorist kidnapper card Texas style Hold'em into a game of 52 card pickup. Except with blood, and awesome Wes Carpenter synth music, like what Snake Plisken kills to.
Soon, I find myself standing atop a heap of the misguided and the Lost, holding a smoking Daisy. Somehow a half naked woman appeared and kneels at my feet. It's very metal. All of the sudden, one of the terrorist kidnappers reaches up with his last breath and only working limb to shoot me, treacherously.
The President of Mexico looks on and I bleed out, and says, "Thank you for saving me! You are a national hero." Or something like that. I wasn't really paying attention, cause getting shot hurts like crap man.
When I awoke, I was in a dark place, surrounded by stone walls. Ramones flavoured Muzak was piped in from hidden speakers on the walls. Then, as if by some kind of magic, a Man in Black appeared.
"Am I in Space?" I ask.
"Nope," he replies. "I've just found that a black suit is more appropriate than a cloak. I could change."
"Nah," I reply casually, "It works. So, like do I get a challenge or something?"
"Shit. I hate The Seventh Seal. I hate it so hard. Do you have any idea how hard it is playing Twister in a robe?"
"That would explain the suit."
"Alright," he says, checking his watch. Oddly, it's digital; One of those cheap ones you can get at the fair. "I've got time. Well, more than you anyway. What'll it be?"
"Programming. I don't know if you read my blog, but I'm fuggin Li Mu Bai."
"First of all, nobody reads that self indulgent crap. Second, programming isn't a game."
"Deal with it. My choice, my mortality."
"Fine," he replies, and summons up a couple of computers. Death it seems, owns an iTablet. I always pegged him as a Linux man myself. In any event, he gets to coding on it and I get to coding on my laptop. When Death codes it looks like Matrix rain, except as done by emo kids, so it's all full of AFI logos and skelanimals. The ground shakes with his mighty coding prowess, probably like when John Carmack codes.
Soon he's done and holds up his design. He says, "I read your blog thing. Crap man, does everything need that much text? I mean, seriously you write twenty lines of code sometimes and then crank out 1000 words of soliloquy and self fellating nothingness. Anywho, I got your stupid text file reader thing to finally work. You're welcome. Now give me your soul."
I reply, "I but you haven't seen what I did."
"Fine," he sighs, "what dumbassed thing did you code?"
"I coded a way for Daisy to be remote controlled."
"Eh?" was the last thing he said before Daisy did that machine gun katana thing that it does so well. Again, we've all seen exactly what a remote controlled/AI katana machine gun does to a incarnation of mortality, so I'll spare the mundane details. Afterwards I stepped over the still warmish meats and copied Death's code to my flash drive.
I then left Death's domain and took the bus home.

-In something completely different. I've discovered IndieCade, another Independent game show. It has a deadline of the first of June, which gives me like 2 months to get a project done. I'd like to say I can have Thief done, but without steady animators, that's going to be kind of a trick. So unless I can think of something, I'm going to try to get Paper Zeppelin into a playable state for the event. The really cute thing about IndieCade, is that if you are in the final group, then they show your game at E3. I'll repeat that for emphasis. They have your game in their booth at E fuckin 3.
I'm of the mind that borders on the incredibly cool. I'll see what I can do with it.

- This post, is just a little weird. You see, I started writing it about 5 days ago, and never got around to posting it up. I could go into the specific details, but I won't bother here, because nobody cares and I certainly won't in few months when I get back to reading it. What I did do was write a different post, that I titled Call Me Ishmael, but that one will probably never see the light of day. Just know that it was full to the brim with self loathing and defiance in almost equal measure.
What is of note is the IndieCade thing I wrote right above. Even though I wrote it, and I fully intend(ed) to do that, I'm no longer sure if I'm in a position where it would even be possible. My hours suddenly taken up by far more pressing matters, mostly involving starvation and/or homelessness.
So before I get back to doing any kind of hard core (or even soft core for that matter) coding, I need to get something else that's not even tangentially related covered and working. Sooner, rather than later.

This is my serious face.


Patience is just another word for getting old.

Monday, April 5, 2010

Solution Set

Paper Zeppelin continues making progress. I spent some time over the weekend getting the rest of the level loading system to work and learning about how to both look and and update table information in C#. It's an interesting thing really. The idea is to have each "row" in the table represent a "row" of objects in the level. That way I'll be able to calculate out starting positions based on what row in the table the information is in. So, say there is a plane icon on the first row of the table. When the system gets to reading it, it'll see that there's a plane on the first row, so it'll spawn the little beastie right at the top of the screen. I think it's adorable, and will allow me to make very fast level changes when I need them.
I'll keep at it, since the next step after this is gameplay testing. Then I'll be able to see if my carefully crafted design holds up, or folds like an origami crane. Excitement abounds.

- In other random crap, I've figured out a solution to the problem from the last post. The issue was, given that both the levels will modify themselves on the fly (given clever use of the characters) based on the number of players and I want to branch levels based on performance, how do I allow drop in and out gameplay without somehow screwing the progress that the players had made? I mean, if 1 player played a level and did well and another player jumped in at the end, the 2 players would have success equal to 1 player's worth of skill - which would be a failure.
The solution, has to do with the total number of spawned versus destroyed enemies. So when an enemy is spawned the game will add up a counter for the Total Number enemies. When an enemy leaves the screen the system will euthanise it (so it doesn't take up memory while being lost in space). When it gives the off screen enemy the final mercy, it'll add to a different counter for Escaped enemies. At the end of the level it will calculate the ratio of spawned enemies to escaped enemies, which will indirectly tell me how many enemies were destroyed by the player/s. I could even stick this ratio in the corner to let players know in real time that they're doing well.
The clever bit (I think) is that if players join the game, the level will dynamically update the number of enemies spawned. If they leave, it'll also dynamically adjust. Further, if 1 player is to the end of the level and another player joins, it has zero affect on the progress made. So the players would then be able to continue to the more difficult branch of levels.

- Speaking of dynamic levels, the design document mentions it, but doesn't go into how it works. I'll fix that for those of you at home. Basically, different characters in my level data will load the same enemies. Take this example:


The periods are there to represent empty air. I could use spaces, but that's a lot harder to read and line up than you would think. In any event, if only 1 player is active, the game will only spawn the enemies for the 1 characters. If there are 2 players, then the 2's will activate too. So if 4 players are playing, then it'll activate all of them. The enemies that come up will all be the same, but I'll have fine control over them. The best thing I like about it is that it allows me to do stuff with the single player. So in the doc it says that having the Bomb affects your shooting and speed. So if I have fast dive bombers come in, that's kind of cheap. So I can set the single player to not have those right after the bomb is picked up.
In multiplayer, I very likely would want those enemies to require the players to work together to protect the bomb carrier.
In either case, I could probably use the same thing to create difficulty settings, but I think that's missing the point. I plan the use the extra settings not to make the game harder, but to make it different on a fundamental level.

Thursday, April 1, 2010

The Word

Boy was I up late last night. I was chasing the ability to read letters in a word, and I was so close for so long that I kept on hounding it. Now, I have it. It's not all the way built yet, but enough parts are dancing that I can get the code to summon up an enemy based on what the letter (or character) is.
Still haven't figured out how to load the thrice damned things from a separate text file, but I've got it handled well enough to move on and start prototyping. Basically, each level will be made up of several lines of text, great big words that'll summon up everything in the game. A short sample may look like this :


See, that doesn't look like anything. But the computer knows better. So after a set period of time I'll ask the computer, "What's the next character in the Word?"
"It's a '.'" it'll reply.
"So what do we do with periods?"
"Nothing, cause they are empty sky."
Then I'll congratulate the computer and give it a cookie.

Eventually I'll ask and it'll say, "There's a '<' thingy. So we should make a plane enemy right?"

So over the course of the level the system will do this a couple of hundred times if not more. Always move to the right and propagate the levels will all kinds of Class Based wonderment. If I add a little thing that makes all the "stationary" stuff go to the left slowly, I've created a scrolling environment. It's a very good thing.

- I'm discovering that knowing enough about C# to be dangerous is only half the story, if not less. For some time the system kept telling me that files aren't where I said they were, and I told the system that it was a liar. Other software that I look at for guidance (and the occasional reverse engineering) referenced the files the same way I was. The system, was simply wrong.
Turns out, I wasn't being polite. Or rather, I was making some kind of formal / informal faux pas. There's some little command that I could add to a file set, that would allow me to reference stuff relatively. So instead of C:/ProgramFiles/CSharp/Loot/stuff.text I could just say Loot/stuff.text. If I went through the right hoops. It also gave me rage when it demanded that I do something special so it wouldn't get confused by the '/'s.
The thing is, this comedy of manners only exists because the things are too basic to ever talk about. It's assumed that if you are a programmer, you should just know these things. It creates a certain kind of unease. I mean I add things, small things, and compile the code just so I know I didn't make a mistake. It makes for slow going.
Eventually, I'll be fluent if not at least conversational.