Friday, July 31, 2009

Evil Weevils

Yesterday I got my game running and the install built. FTP shenanigans prevented upload and that kind of sucks, but it's mo better now and I'll finally have something for The Tester to do again. Turns out, if you change your FTP access password and forget all about it the site won't let you access all your sweet, delicious, cancer causing data. Sometimes I hate internet.
For shits and the occasional giggle I went ahead and ran the game to play the 3rd level in its entirety. I discovered some bugs. Crappy bugs. Bugs that I had thought I had fixed. Like, my leak is back for some reason. I think. The new laptop gets hot and the game slows down. I don't know if one thing is causing the other or what. I have no idea if it's a hardware issue or a software one, and the Vista OS (BS?) doesn't exactly make things easy.
Second, my collision engine does some odd nonsense and I don't know why. I can dash into walls sometimes and that does incredibly odd things that it shouldn't be fuggin doing. I have zero idea why though since I haven't bloody touched the collision engine since I built it. Ah, wait. I did. I put the floor collision before the wall collision in an attempt to fix a different bug (which still doesn't work by the way). I'll put it back.
Ah, right, and sometimes if you dash into a ledge, there will be a quick frame of being inside the ledge before it corrects itself.
The problem that gives me the urge to kill is a different collision bit that I thought was fixed. It has to do with stairs. Basically, The Thief has 4 collision boxes around him. One on his feet, one on his head and one on either side of him. When these boxes touch collision rectangles, they modify the position of the character. So the bottom one will make him stand on top of a rectangle if the bottom collision rectangle is touching it.
The trick is that the side rectangles do not go all the way to the floor. There is a gap of about 15 pixels or so. Hence, if a platform is only 10 pixels high, the side rectangles never touch it and never modify the character's position. When you walk over them, the bottom rectangle then triggers and you step up instead. If you make a series of these, you can build steps. That works great.
The problem comes when you jump on the stairs. If you hit the corner just right the floor eats you. Something odd is going on and then you disappear from the room like Andy Dufresne. My hypothesis is that is has to do with rectangle ordering. Basically, the engine runs through every single rectangle in a list, from top to bottom. This gives a certain priority to the earlier rectangles. If a side rectangle triggers before the floor, you'll never touch said floor. That would also cause it to work correctly in most situations, but not when jumping or when higher, logarithmic speeds are involved. So, possibly it's not a bug I can correct for. I instead have to build stairs from the bottom up and not the other way around. I'll give it a shot and see what I can come up with.

- In not game stuff, I'm still waiting around like an idiot for Cal State to let me know what the hells is going on. So, like a proactive little would-be student I called. The conversation went thus:
"Hi, my name's Eric and my student number is number number digit number number number digit. I can't sign up for orientation. What gives?"
"Ah, well you're not currently accepted."
"Okay, when will I know. Like today? Tomorrow?"
"Sometime before the first day of class."
"But are fees due the day you register? Else you are dropped, correct?"
"Yes."
"So how do I get loans and stuff all on the same day? That doesn't seem like that would give me a lot of time, now does it?"
*silence*
"Hello?"
"Just keep checking the site. We'll also send you an email to let you know."
"Maybe, possibly, conceviably, eventually."
What really gets me is that I'm a bloody Senior already. I've got a trully staggering amount of credits. If all credits were the same I'd have 4 degrees already. Provided I were accepted (again) then I wouldn't even be there that long, maybe a semester or two. Add to that the fact that apparently they are not accepting admissions for spring at all, and I'm a very unhappy panda about the how situation.

- In good non-game news, I finally got my diplomas and certificates in the mail. I now actually have the paper that says I'm awesome and a game artist, respectivley. This project of course the method for proving that I'm awesome as a game artist.

Wednesday, July 29, 2009

Horizon

The first half of the cliffs is done. Now I'm onto the second half for building and scripting. I'm confident it will be quicker, since yesterday I polished off the rest of the scripting in the second half. So about an hour was all it took. Having established methods for creating and dealing with the scripts, it's a lot easier that doing it from scratch all the time. Today I'll start getting the rest of the level put together. I'm feeling it's full steam ahead now, the only thing stopping me from the end, is me. We can do this.
I'll put together another install and get it to The Tester.

- In non game news I got around to play Battlefield Heroes. I got to put together a little British dude and pick a class and did the tutorial and was enjoying myself to a point. Planes fly like retarded toasters, but what can you do? The pictures of abstracted looking soldiers encouraged me to continue onward, the sweet gameplay juices were in there someplace, just ahead. "You can use your bearded British dude. Think of all the fun you'll have driving a tank." So I when ahead and jumped into a game. Somewhere between the lag, the fact that it was my first experience with the WASD control setup, and the fact (that I had forgotten) that everybody on the magic of internet is a dick, I died. I died a lot. Then I died again. One memorable death involved being run over by a tank shortly after respawn. I think it may have been driven by one of my own dudes.
That's about when it struck me, I'd rather play COD4 or Halo 3 to get my death match on. I'm not saying that I'm really good at either of those games (well, maybe Halo. On a good day I'm death in azure armor) but even when I die, I can see the polish on the experience. The lack of lag and my ability to wield a controller like a samurai wields a sword both also help. No, it's not quite fair to compare BHs to either of those games, since BH is free. But I can't help feeling that it's like eating at a restaurant you don't like - sure it's food, but you're thinking about eating something else the whole time.

Monday, July 27, 2009

Sometimes the World is Just Too Small

Back from Comic-Con. Since the only thing worse than watching live footage of a bunch of nerds get their geek on via live TV feed is having to listen to one of said nerds talking about all the fun they had, and their celebrity meetings/sightings, I won't.
Well, almost. Like I said way back here I searched out the Penny Arcade dudes to ask a single burning question, "No indie area for zero budget and student games? What the deuce?" To which Jerry (I refuse to use his online avatar's name) replied with, "No space actually. PAX fills up every square foot of the Convention Center there, otherwise we would. You can enter the PAX 10 though and win a booth." To which I replied, "Yeah, but there's no real guarantee there. Besides, my game is more of an olde skool affair and less of an art house game." To which he said, "Well, they're also building additions to the Convention Center up there, so maybe we could do something like that later."

-After doing some more thinking, I hate the drop down move on a philosophical level. No matter how I wrap my head around the concept, it always seems like more for the sake of more. It doesn't add to the core gameplay in a fundamental way nor add additional aspects. It is a feature that I can prune, and so, I did. As I keep hearing and thinking, "He's a Thief, not a Ninja."

-In other game news, after coming back after almost a week I still like the scripted bits and level designs for level 3. So, yay. Still need to have them tested though.

-Since I was away for a few days with nothing to think about, since TTT is done from story, gameplay, concept and programming point of view and I can't build assets in my brain I found my mind wandering back to the EP. Being free of the concept of structures and narrative in a real way, to not worry about context for actions and gameplay concepts is amazing. The ideas are there and they're magical. My brain is full to the brim with new ideas and some really odd experimental game concepts, things that could only work in a project like the EP. Things I'm very excited about. One of which follows the concept of Loss and Failure, wherein you can't win, only try to endure for as long as you can. I take that bitter pill and wrap it with some reflex based shooter candy to taste and the get it all tied up into a retro cool exterior and, at least in my head, NetHack style ASCII graphics. There's only a concept there, no story, the hints provided in the game towards a meaning or purpose. In a basic sense, I care less for it, since I'm all about that sweet, sweet shooter candy, but I still find my brain demanding context and I think this massages both halves of it.
The other thing is still in it's primordial life stages, growing, changing, beginning to live. I wanted to do something where the player is their own enemy and I wanted to do a game with some cute way to affect how time effects you and your environment. I've previously torn into Braid since I felt that the core platforming mechanics were too loose and the time bits an artifact of the levels themselves. I wanted to avoid that by making the time parts fundamental to the experience. So, I decided to combine the two concepts into one and the parts that are left are very exciting to me. In a way, one idea became the core gameplay of the other and vice versa. I've never seen anything like it before, so you'll have to excuse me if I play this one a little close to the vest for now. After all, I need to finish Thief first. At the end of the day, it'll always be my first born, and my favourite.

Wednesday, July 22, 2009

Dropping By

The Cliffs level is still in the same state that it was in previously, since, let's just say other stuff came up. On a basic level it had to do with this and the idea of moving. But I'll spare the details here. So no version for The Tester. Yet.
I did manage to steal some time and draw out some examples of puzzles for the Walls level, and they seem to be interesting to say the least, using portal rectangles to make quick changes and imply a 3 dimensionality. It may play like ass, but the theory is working I think.

What I did consider, rather at length, is a new attack for The Thief. Effectively, I'm thinking that if you can fall onto an enemy with enough force, you should be able to knock them out. An Ambush basically. The trick is that the enemy can't know you're there and you shouldn't be able to jump to do it. It kind of has to be a preplanned event. What I don't want is to be able to use the new wall jump, then double jump and be able to Drop an enemy. That's...cheap. So I'm thinking that if the player is high enough above an enemy, and falls into them, then it could be okay. Basically trigger a variable if you're running and untrigger it if you jump, so it only works if you run off a ledge. I may even have a prep animation play.
From a gameplay perspective, I think it'll speed it up and offer alternatives. After spending so much time getting the combat to not suck I'm still trying to force it into being the B feature - which it is. Offering an alternative to combat in certain situations (which I'll still have design control over) only seems like a positive thing. Granted, the bosses are all still game progression gates and the only key is being able to fence, but the more options I give a player, the better the illusion of choice is, then the better the game experience will be. At least, that's the theory. If I install and it's crap, then screw it.

-A right, for those of you at home reading (deluded much?) who may not have spent the hours studying game theory, a "Gate" in gameplay terms is a passable obstacle. They come from the idea that a gate is in a wall and with the right stuff, you can get through it. Old games sometimes had actual gates, but a Gate is anything that requires the player to overcome something to continue. There's a modern thought that says Gates should be transparent and shouldn't really offer too much of a challenge. I say that a Gate should be a test of the player's abilities and design around that. In other words, if the player can't get past the Captain boss, then the Skelingtons in the following level will ruin them. It's kind of an olde skool interpretation of the idea.
To go with Gates are the concept of Keys. Again, you could have an actual Gate and Key system, wherein you require a Key to pass a Gate, but I prefer to deal in metaphors here. When I think of a Key, I also consider skills to be keys, to be assets to the game itself. Like I said previously, having acquired the skills to get past a gate should mean that the player should be ready for the next part. That's one of the things I hated about Ninja Gaiden II, the Gates (bosses) all required skills that were not taught as part of standard gameplay.

- Ah right, the illusion of choice in games. I break it down for you, in games, you do not have a choice. There's no fuzzy logic. Since a game is, fundamentally a system of rules then the player's "choice" is already figured in advance. One could argue that games like GTA4 or Oblivion give you choice, but they really don't but instead serve up great illusion. In GTA you can't go inside buildings, you can't alter the story in a meaningful way, you can't tell Roman, "You lied to me, I'm going back to wherever it is I'm supposed to be from." You can steal whatever car you want and drive anywhere, as long as you don't leave the city.
I'm not saying that's a bad thing though. The illusion of choice means very real designer control. With control, you can do anything. As long as a designer can make it seem like the player is the one making the choices and being the prime mover, then the better. For every false choice given to the player, the player will think of what the other choice may have led to, even if if leads invariably to the same outcomes. The player will be happy though.
Do it badly though and show the player ugly truth behind the curtain and they can be quite upset. I think the rewards are worth it though.
To give another, really off the wall example, Halo 3's multiplayer. It smacks of control. The weapons are balanced just so, the spawn points controlled just so and gamplay tweaked perfectly. The false choice given to the player is in what they do and where they go. You shoot stuff and stuff shoots at you, there's no real choice in the matter. No matter what you do really, that game is meant to have bullets and lasers and crystal needles flying at people. The levels are all designed explicitly to encourage that. Players are given a wide variety of choices, but they all lead to the same place. The illusion of choice.

- Finally, I'll be trolling Comic-Con (I pronounce it "Komi-khan" like people in the Eastern Bloc)for the next 5 days. I'll be the big dude with the Magic card stuffed into my badge. If you see me, say hello and I'll take your picture. I may even post it.

Monday, July 20, 2009

Welcome to Boulder

I spent a good part of the weekend getting the scripting in the cliffs levels going and I about halfway. I'm finding the going to be tricky, mostly due to having to set up the scripting to be bulletproof and not having done gameplay scripting of this magnitude before. Case in point, I have a set piece involving a Raiders of the Lost Ark style boulder chase, except with a lot of terrain destruction and so on. I got the sequence working in about an hour, including the modification of the levels themselves. I then spent 2 hours getting the bloody thing working well enough to not be dicked with.

Basically, the player gets to a screen, triggers a scene and triggers the variables on the next screens to also do the chase sequence. However, weirdness then abounded. Basically, if you ran into the next screen and then right back, the boulder would then disappear like it was part of some crappy David Copperfield trick. So I went ahead and made a mod that said, "if the boulder thing is happening and you try that Vegas magic nonsense, death to you." So that's nice. But between that and resetting the variables like that, scripting is taking me longer than expected. But I should get going faster now that I have a consistent workflow established and working concepts to get it done. Also the fact that the rest of the game doesn't have anything like the set pieces in the cliff level is nice.
The idea is that I'm going to go ahead and get the other set piece on the first half all done by this weekend, and hopefully before so I can get a build to my very, very patient tester. Who can play it and tell me it's garbage and/or full of bugs. So it goes.

- I've also managed to fix some basic bugs in the collision system. Script wise what I've done is when I want something to go away, I change the height to zero. No height means no area and that should have meant no way to interact since you can't overlap 2 collision rectangles when one of them has no area and, from a math perspective, doesn't exist. At least, you would think so. Turns out you can though and if you hit a rectangle purged from the screen by a script the little character climbs up the nothing and then falls to something. Death. So that's much better now since I told the engine explicitly to only do that if the rectangles has a height and, you know, exists. As I think of it, that probably also optimized it a little, so it only checks for collision with rectangles that are there now.
I did something like it with the catch rectangles too. Odd considering. I'd previously remarked how, hypothetically, the corner contains all of the unused rectangles of every type, like some kind of singularity that stops you, kills you, teleports you and you could hang from. Now it just works by ignoring the Death rects without dimension or catch rectangles that live at 0,0. Good day(s).

Thursday, July 16, 2009

Panic Switch

I've got switches working great using a single variable and modifiable terrain. So I can have stuff move on a switch, change on command and stay that way afterwards. The basic code I've written is nice and portable and should be cool for almost everything else in the Cliff level and anything else in the game that needs switches like doors and stuff. The new code uses a single variable system unlike the more complex multiple variable system code that I've written before. Now I can have different stuff have different timings and wholly different triggers so I can have more than 1 on a page at the same time. So I'm liking that.
The problem that I've run into is what happens when you die. Not in a spiritual sense mind you, since there's no "Burn in Hell Forever" function, but in a mechanical one. Basically, if you are killed by a scripted event I need to reset the scripted event. It's not a huge issue, but the scripting and the Death() functions don't talk to each other. In other words, I can't have scripting run off this command:

If You Just Died...
Do Stuff
Reset Other Stuff
EndIf

There's no way to pass a variable from the Reaper Function to the scripting. Unless I rewrite it that is. I'm thinking that I need to add a bit to the Death Function that basically tells it to reset some stuff if the Story Progress variable is something specific. Then at least I'll have something that can be passed. Of course when we do some logic we get:
1) Trigger a switch->Die -> Reset Switch
2) Trigger a switch -> Do a different scripted event and update the StoryProgress variable -> Die -> Reset variables, but not switch
3) Trigger switch -> Do different scritped event -> Return to first screen, trigger different switch-> Die -> Reset Variables, but not the original switch or the one that killed you.

You see, in the 3rd place it's possible to have an event carry over from a previous life. Like some kind of polite poltergeist. Basically, I'm thinking about the screen that I've built yesterday. It has 2 triggered blocks that fall and could squish you. In the 3rd test case if you trigger the first one and then move on and do something else, the game will update the Story Progress variable. If you come back and trigger the other switch and it kills you, the Story Progress variable is no longer relevant to the event, so it would not reset the switch that killed you. In effect making an event from a previous relevant to your current endeavors. That's not good, at least not in this context. It's just sloppy scripting.
So, I'm thinking that I'll trigger stuff off screen sometimes. Basically, if you get past a scripted event without triggering all of the stuff in it, the next event should clean it up. So in the test case, if you do a different event and come back, the switches are all already triggered, even if you missed them. So if you die, no problem, since nothing you caused is being carried over. I may decide later that I hate it, but it works in the context of the level and as I think of it, nothing else in the game really has scripting like the cliffs do.
Thanks for the help internet!

-In non-dev crap I'm playing Tenchu: Shadow Assassins and finding I enjoy it quite a bit. The sword fighting is crap, so I avoid it at all costs. There's been some griping that the basic concept has changed. In previous games the areas were more free form and game the option to try different things. That was great but I frequently got the idea that I was doing something incorrectly and the stab wounds to prove it. TSA is a lot more linear and that's okay. Each encounter is now presented as a stealth puzzle to figure out and when I break somebodies, um, everything (with Wii-mote action!) I get the feeling that I'm smart and I like that feeling. Then I feel dumb at the end when it gives me a D grade. Apparently I'm a less than average ninja.

-Wow, 3 exclamation marks? Wait...one...two...hmm, just 2 I guess...Three! Ah, there it is.

Wednesday, July 15, 2009

200

Post 200 already. I'm a little impressed as I seriously thought I would get bored of this a long time ago. My rambling notwithstanding, I'm really quite keen on the progress that I've made and continue to make on this project, the herculean task of learning to crawl by running a marathon. The whole thing growing and changing in the last 2 years and now we have 200 posts to show us how we got there. Some of them useful, some silly, some sad, most of them show the how of it and hopefully provide some insight into the slightly warped mind of this indie developer. I've tried, even when I shouldn't, to be as brutally honest about the project and what I go through as possible, sometimes writing stuff that I may regret but keep anyway. Sharing it into the void of the internet providing some kind of carthasis and keeping this diary square. Moving on, to the 300th and the 1000th post, the projects may change, the ideas may evolve but I'll still be here, fighting the good fight and bringing the news from the front.

Ah, that was nice. I sometimes have to fight the urge to get philosophical and sometimes I lose that fight. It's the 200th post so I'll give myself a pass this time. In actual game development news, I was knocked out by some kind of hideous flu for most of the last week and all weekend. Let me rephrase that, my immune system was destroyed by some kind of alien virus and me along with it. Generally, I can shrug off the most hard hitting of horrors, my white blood cells superpowered like Bruce Banner and making with the Smash. This time, not so much. So I lost a weekend.
Like I said previously the first half of the cliffs level is all mapped out again and in the database so I can play it. Now I've run it a few dozen times and polished out some of the jagged parts that don't work just so. So now it's better than it was. The plan was to move on and get the whole thing into the system, but I'm reconsidering now. I have a good feeling about the level and I'm reasonably sure that it will be great, but I don't want to do even more work I may throw out. So I'm thinking that I'll go ahead and finish out the scripting on the first half as a proof of concept. It'll also provide good practice for the second half, which is more complex from a scripting perspective.
On a basic level, the scripting in the game falls into a few categories.
1) If you're touching this moving thing at a certain time, pain!
2) If you touch an invisible block, change the dimensions of blah.
3) When a timer gets to a certain place, change the dimensions of the thingie.
These basic pieces run all the traps, modifiable environs and other stuff like the scenes and dialog. The first half of the cliffs has 2 and 3 down and will provide a good place to test the concepts and see if there's anything in the next part that may require a redesign.

- Checkpoints are so getting redesigned. I die a lot and it's my own bloody game. Granted it's mostly because I rush to test stuff and get wasted by the stuff in the way, but really, that's a problem. So like I said before, yeah, that's going in. Soon.

- I did manage to work out a table with all of the different enemy attacks in the entire game. There are fewer than I thought there would be, but that's good news. You see, from a balance perspective, they need to have a curve to them. So guards are stupid and have only the most basic of single swings and from there I need to gradually increase the amount of attacks and the difficulty of the patterns up until the last boss, which has 6 different strings. The enemies in the middle and the bosses, have different amounts. The first boss, The Captain (who's in the demo=>) only has 2 attack strings. Later common enemies have more, but he's what a Designer would call a Gate - something that has to be passed through skill or rote to proceed. So beat him and you can handle the Skeletons in the next Stage. The bosses mostly work like that from a design standpoint. So it's good to have it on paper and soon, in the computer.

- On other news, I found another contest to enter. It has a deadline of 10-1. Which is possible, as I had planned on having the game (or at least the assets) all done by them, but that does squish everything a little bit. But I think we can do it. If The Thief's Tale is feature complete and playable at 10-1 then it'll be polished like a gem by 11-1 for IGF. So exciting.