Sunday, May 31, 2009

A Dizzying Height

I've read that a good design, like a bonsai tree has everything unnecessary cut out. So in the last 3 minutes I've managed to do hours of work by chopping stuff out that worked well on paper, but failed when I got to seriously thinking about it come implementation time. For example, there is no Dizzy state for enemies. The Red all over the Doc => will show that the entire feature got chopped. "Why?" a person may ask, if they read this, and they don't. Mostly because enemies are not that beefy. They can't take the heat. Say, using a random chance that an enemy requires 4 hits on average to dizzy them according to the original system, now marked in Crimson. Using the regular method of attacking, enemies only have enough HP to deal with about 4 attacks. In other words, the amount of attacks that would dizzy are probably lethal, so what's the point? I could increase the amount of HP an enemy has, but by doing so I'll increase the amount of time the player will take fighting said enemies. Regardless of what the posts of the last month would lead you to believe, fighting is not the focus of the game. So, it's gone and I don't miss it.
In the same vein, no Dizzy means no Charge Move for The Thief. That's easy to remove too, since I never actually programmed it. The Downed behaviour will live on, and in some places replace the Dizzy, but it's built more for bosses so you don't rush them down. Further it provides a good excuse to put the Enemy Physics to work. Even if the 3rd hit in a string will knock an enemy down (and remember 4 wastes most of them) the 3rd hit may also knock them into a wall or off of one and maybe into a trap of some kind. It'll finish them off in a slightly more entertaining way.
So, that means I need to build fall down and the Invincibility toggle and I'm good on AI states. Sweet.

-Having spent a little more time with the list and asking the team about it, they all seem to arrive at a similar conclusion, "Wow, that's a lot." The ADA said, "I'm not saying the list is pudgy, but it's obviously be skipping the slim fast shakes." The Producer part of me reaches for the scissors and The Designer part smacks the hand. It's too early to make cuts. Yet, with a clear goal in sight, It's a different kind of feeling. Before for IGF, we were hell bent on doing as much as we can in the time we had. Now we have a clear finish line. Oddly, writing it all down removed a ton of the stress. Now we can just work.
So, in the coming weeks and months the list on the right will slowly change colors, going from black to something positive like green or happy like orange. A colorful sign of our continued progress. I'll try to get at least one colored in today.

Friday, May 29, 2009

The Big List

I sat down and did The List today. Wrote out all of the things that need doing for the game to be at a state that can be polished and played by other people. This list is Massive. Quite staggering honestly and it's posted over yonder => for your (delusional much? nobody reads this) reading pleasure. Some things on the list are single lines but are hours, if not days of work. For example it says "Scripting" under the Design Heading. I may be able to start this today and finish it in, I don't know, a month or so. Thankfully, I'm not doing all of it.
The one nice part that I've got going for us is that the infrastructure is all there. Once the assets are got they plug right in with a minimum of fuss. So that's excellent.
That doesn't touch all aspects of The List though. Like, "Enemy Character Animations" can be done with a small amount of difficulty (having seen The ADA work, it certainly doesn't look difficult for him. Having done it myself, I know that it is though), but that assumes that rigged up models are available, and there isn't for 6 of the 9 characters. 5 if the Art Team decide not to palette and/or head swap a different model.
I still don't have my Kikuchiro, my mythic Seventh man. The one that will bring sound and the power of music to the masses. I think I have one, I know I do actually, but find that I'm hesitant to go down that road. Still, as I think about it, he would be the best person for the gig (that's what cool music people call what regular {uncool} folks would call a "job"). I'll do that this weekend.
Still lots and lots of other variables at work here. "XNA Compatibility" comes to mind. The line says, quite simply, "Make it play on XBox." That's it. That's like Kennedy saying "...should commit itself to achieving the goal, before this decade is out, of landing a man on the Moon and returning him safely to the Earth." I have very little idea as to what is involved with that. XNA membership obviously (goodbye $100.00), an XBox360 and maybe some kind of Alchemical Sacrifice. Oh, and Rockstar drinks.
It's dawning on me, that yes, we can do this, but no, it will not be easy. But that's really the whole point, isn't it?
If it wasn't hard, it wouldn't be cool.

Thursday, May 28, 2009

Guarded Behaviour

Blocks work again. I spent last night making that happen. Getting hurt too. I found that when you hit an enemy they stayed hit for all of 1/30th of a second, and the proceeded to beat the hell from you again (metaphorically speaking - combat collision for the new combat system forthcoming). So after some tweaking it seemed that the specific variables that were set by the Hurt AI function were the exact same ones that triggered the Let's Do Something Else (tm) Function. So hitting the enemy told it to do something different, which is almost correct. In any event, I'm thinking of handing off the remainder of the enemy combat states to the new programmer. They almost exist in a vacuum, so he should be able to work on those without worrying too much about it conflicting with other pieces. Then I have to start bulding the Last Level, tweaking the AI to behave in a "natural" way that's fun and find somebody to write all the music and do all the sound effects. Oh, and convert the controls to XBox, something The Programmer can't do since he doesn't have one. So much to do.

-I had an idea floated my way that's great, awesome, would very likely improve the game and I can't do because I don't have the time. It was posited that there could, and probably should be things you can push off of platforms that could fall on enemies to defeat them quickly. Vases, chandelliers, small crates that kind of thing. It would make combat more optional, provided the levels were constructed in a way to facilitate that. It's a good idea and I considered it seriously, but we have 4 months left to get the game working in a semi-final (if un-polished) state. So implementing that idea would be destructive to other work. It kind of sucks, but what else can I do?

- Producer Me needs to write up a list of needs and a rough outline of when those needs are, um, needed. Yeah. I'll do that. I may even stick it over there =>

-Finally, I've been playing some Samurai Shodown (sic). I remember that game being A) Easier and B) Better. When I saw SamSho Anthology come out, I bumped it to the top of the GameQ. Fond memories of wasting my allowance at the local arcade as I pumped dozens of dollars into the gaping maw of SamSho II (SamSho is what the cool kids call it, and me). So I loaded it up and sat to play and, I was disappointed. The game I remember, the fluid game of cat and different cat with samurai swords was less so. In this case, nostalgia had made me stupid. Turns out, the game that SamSho is trying to be, is Soul Calibur.

-Oh, and where's the blood? Seems stupid but I used to bisect assholes in that game when I hit them hard enough. Fountains of blood anybody? Is there a code? Or am I playing a Nintendo censored version? Or am I just trying to find a reason for my disappointment that isn't gameplay based?

Tuesday, May 26, 2009

Fire

Yesterday I got the beginning of the En Guarde behaviour in for enemies. It's not quite done yet and now enemies flicker when they're trying to block since every frame they snap back and forth between having their little shield bubble up and just standing there. I should be able to get that all done today. Other than ironing out little bugs I find myself working more and more with statements that look like this:


If LastMove = X or LastMove = Y
SeedRnd(Millisecs)
AIAction = Rand(7,9)
EndIf


So now it seems I'm in the midden heap of statistics and frankly, I don't much care for the smell. At least some of the basic stuff works.
I'm going to unleash the Programmer on some stuff, now that he's finished the wrapper program. Things like combat collisions and stuff like that. Easy things that don't take too much time, just more than I have. Once I get the AI code into a workable state I'm going to go ahead and get going on making the wrapper function on XNA, and Xbox. That's gonna be good. Well, except for converting all the controls, which will be bad.

- I've never understood the term, "Light a Fire under his/her ass," until now. I didn't do much programming since my hours were consumed with celebrations and an overwhelming need to change my station. My state sticking to me like a damp sweater, leaving me looking for a way to take it off and quickly to boot. Resumes flew out like the baby spiders at the end of Charlotte's Web leaving me hoping that they take root. Today, I'll do it again and tomorrow, the same until I get it right. Today, isn't supposed to be yesterday but it is. The only thing different is me. Now I find my life chafing.

Friday, May 22, 2009

A Trick of Perspective

Today is a big day. Big-ish anyway. But first, news.
Yesterday I got the AI upgraded. Added some failsafe mechanisms to the attack drawing code so it'll stop crashing, added AI for the enemies being hurt and added a way for the system to remember what it did last, so it doesn't do it again. The last thing was added because I needed a way to implement the status changes listed over there => and give me a way to not have the enemies just start attacking, and then attack again and again. Statistically, if 6 out of the 9 AI responses are to attack, it was quite likely to have the enemy launch 2, 3, 5 attack strings in a row. That's a lot of beatdown. Now it doesn't do that.
What I then discovered, when I turned off the debug features and the collision boxes and just played, is that the new combat system is really quite fun. Still buggy? Yes. Totally stable? Not quite. But certainly fun in this early incarnation, which is a good indicator. I'm going to tell what happened, in story format.

The Thief climbed up the platform, and immediately saw the Guard standing there, sword drawn. The Thief barely had enough time to unsheathe his sword and move it to guard before the Guard was on him, swinging furiously. With a heave, the Guard lifted his sword overhead for a great slash and The Thief quickly dashed behind and landed a flurry of attacks, knocking the Guard from the platform who then fell to the floor below.
With an acrobatic flip, The Thief leaped down to continue the fight, sword at the ready and, in a flash, lunged at the Guard, who had no defense ready. The Guard regained his composure and again attacked, but he was no match for the quick reflexes of The Thief. Before he knew what was happening, The Thief was on him, blade flashing and the fight was over.

Yeah, it was pretty much just like that, except with pictures sprinkled with awesome. The thing is that right now, it works on a fundamental level. It's fun without all the animations, without all the little tricks, without the glass and candy. I heard once that if a game works, it should work with nothing else, the mechanics should be enough to support the experience, and from that perspective the fighting is good.

-See what I did there? "From that perspective.." Like in the title? Oh never mind...

-Right then, the part that makes this day larger than normal days. Today, I officially graduate with my AA and Certificate. I've been putting that on resumes for a while now, but today I actually wear the dress and the hat and get to shake the hand of somebody that I've probably never met before or will after. People will say things like ,"We're proud of you." and I'll have no idea how to take that or what to say, so I'll stand idly and smile.
I'm struck with the idea that this, is an empty gesture. It's the halfway mark (or the 3/4 mark) and it's meant to be a state of finality. It seems, incomplete. The degree that I'm after is the BA, which I will have in another year or so. But today, is today and I'm told not to sell myself or my accomplishments short, but I feel that this whole thing is me selling my accomplishments long. What am I celebrating exactly? That it's take me 6 years to get here? That I still don't get to do what I want for a living? I'm standing at the top of a mountain that let's me see exactly the peak I want to be on and I'm being celebrated for the climbing of a mountain. When I get to the next one, will I feel better? Different even?
I don't know where this venom even came from. I didn't think this yesterday. I wonder if I will tomorrow. I wonder if, in some small way, I fear the Gate. I fear the next part. When I woke up the day after graduation from High School, the thought that I had nothing to do was terrifying. The change of the life was tangible, if not the change in me. The last few years, they've, in some way, been good. That school was Safe, this project was Safe. I am comfortable. Tomorrow, I may not be, the new mountain being different and strange.
Or maybe I dread that beyond the Gate, is the same. That there is no difference and the mountain is meaningless. I hope that I'm wrong. I've never wanted to be more wrong in my entire life.
I think though, that I give too much credit to hypotheticals. It's not what's on the other side, it's how you get there and how you travel once you do. I control how that works. I control what it means in the end. I am the Master of my own Destiny. Today, I get uncomfortable. I leave behind the stuff that made me complacent. Comfort is not Happiness. Today, I take the steps to find Joy. Today I retake control of my Life.

So today, today is a big day.

Wednesday, May 20, 2009

The Sixth Man

Yesterday I met and added a new member to the Star Frog Project. Let's call him the Level Designer. All in all it went well, although I did discover that you can apparently cobble together something that plays like my engine in about 2 hours on Game Maker, but controls like ass. In any event he immediately wanted to know all the cool things the engine was capable of doing. "Ladders?" he asked,
"Nope." I replied.
"Crates? Pushing boxes?"
"If you want to script them."
"Swinging ropes?"
"If you can figure out how to calculate a position on an arc and script it."
...and so on. I feel most confident since he seemed to have a quick grasp of how the Blitz Basic code works, which is good. Previously I had this fear of doing all of the scripting on the project, again. Now, not so much, which makes me feel better. One less thing to do, so I can focus on the Code and making sure that everybody plays nice.

So, for those of you keeping track at home, that's 1 Producer/Lead Designer (me), 1 Art Director/Animator, 1 Background/Concept Artist, 1 Tester, 1 Programmer and now, 1 Level Designer. I'll have to add a 7th shortly, but for now, we'll see how this goes.

-Yesterday I was struck with a concept, I am part of something great. I mean, it started small and grew into something different, something better while I wasn't paying attention. It seems that the people involved understand what the project is all about - making the game to show that we can. Further it seems, they see something going on here that makes them want to be a part of it. I find myself at the center, but I get the impression that if I had a plane engine fall on me or something the work would continue without me. That's a good feeling.

Monday, May 18, 2009

Animated Hate

What's that? No new post for over a week? If I keep this up I may lose my rap as being prolific or verbose. Well, I've been beating that stupid animation bug for the last 5 days. The posts would have gone something like this:

"Tried some stuff, still broken."

So, I went ahead and skipped them. Now, it's fixed. It has to do with the Random Number generator. It seems that every frame the enemy AI was deciding what it wanted to do. Most of the time it would decide to keep doing what it was doing, other times, not so much.
Basically, the Random Number generator is not random. Computer people will tell you that. "Random" numbers in a computer are seeded. So you take a number that's bound to change from moment to moment and you can use that after some modifications. The system clock is a good example. The problem was that when that number is checked, say, 30 times a second there isn't a lot of variability. So, I assumed, that meant the system was working correctly. Once an action started it was quite likely to finish, statistically speaking. When it didn't was the problem, since it would cause a stunted animation, or worse, a crash.
Now, finally, it works. Now it only decides what to do after it is done doing what it is doing or the status of the AI has changed. It is so dumb. Now, collision.

I was thinking about stuff recently and I have a plan for my new programmer. I was going to give him the assets and get him set upon a port or building a wrapper program for XBLCG in C#. I still have this plan. But I was thinking, he is doing other things too, and that may not be the best use for him. So I'm getting the build stable (which I did, see above) and then I'm thinking that I can give a detailed description of the design (a document, if you would) and set him upon building some game functions. The combat in particular obviously is taking a lot of time that I could be spending doing level building or any of the other things I'm responsible for on the project. That's seems like a plan. Maybe he can build the blocking function controls. I'll ask after he's got the stuff, probably later today.