Categories
Game Design Game Development Geek / Technical Linux Game Development Personal Development

LD20: Coding the Plaza and Entities

So I’ve been tackling the Plaza, which was originally planned to be a simple representation of the play area grid.

It also keeps track of each Entity running around. I keep Pedestrians, Couriers, and EnemyAgents in separate containers, and there is a single VIP (the goal) as well. All Entities have position, orientation, and a string that represents how to draw them.

Here’s how they differ:

Pedestrians also have a preferred turning direction. When they run into an occupied space, they try to turn in their preferred turning direction first. If that space is also occupied, then they try the other direction. If that space is also occupied, then they remain in their original orientation and stand still that turn. To illustrate, a Pedestrian with an affinity to turning left is facing to the right. In trying to move forward he finds that the tile is occupied by another Entity. So he tries to move up (turning left from his right-facing orientation) first before trying to move down.

Couriers can carry a package. There are plans to only allow one package in the game, so only one Courier will actually have the package at a time.

EnemyAgents have nothing special about them except that they cannot be shoved. If an Entity tries to shove into an EnemyAgent, the action won’t happen. Likewise if a chain of shoves results in an attempt to shove an EnemyAgent, the shoves won’t happen.

VIPs do not move, so they don’t have an orientation. They just stand in one place, waiting for the package to be delivered.

I’ve been wondering if I should have an explicit representation of the Package itself, but I’m getting sleepy and exhausted, so I figured it would be best not to make decisions like this until I’m awake enough to think them through.

Once I get these new objects rendering, I think the next task is to create some instances of Couriers and get them moving about the play area according to player input.

There are 21.5 hours left in the compo. I figure I’ll wake up with 13-14 hours left to go. Wee!

Categories
Game Design Game Development Geek / Technical Linux Game Development Personal Development

LD20: Working High Level State Machine and Dinner

The title screen doesn’t look very different from the splash screen:

Screenshot LD20 Title Screen

Still, there’s a lot of code powering that title screen now. I ended up borrowing more code from my other projects to get more boilerplate stuff in. I’m surprised how basic yet complex my boilerplate code is. Stuff like menu handling and basic input processing is a lot of code, and it sucks to rewrite it each time I participate in LD48.

In any case, I now have a high level state machine running the application. The main menu is one state, and clicking on “New Game” switches you to the in-game state. And since I have a way to get to it, the in-game state is where almost all of the work needs to be done next.

I need to implement:

  • the plaza as the main playfield.
  • the Very Important Person as the delivery target and end goal.
  • the courier team.
  • the pedestrians.
  • the agents.
  • victory and defeat conditions.
  • and systems to run all of the above.

Essentially, The Entire Game.

If I would have had boilerplate code that was ready to go, I would have been working on this code from the start. Instead, I had to slog through getting each file to play nice with the relatively empty build.

Anyway, to prepare for the plaza, I’ve created a few tile images. I might end up using nothing but the “cobblestone”, but maybe I’ll get grass and dirt in for variety if I have time.

Tile - Grass Tile - Dirt Tile - Cobblestone

I took a dinner break and had some cheese pizza from a great place called Marino’s. They make the best sauce!

Marino's Cheese PIzza!

There’s a little over 24 hours left in the compo, and I don’t want a repeat of Advancing Walls of Doom. This game is getting made.

Categories
Game Design Game Development Geek / Technical Linux Game Development Personal Development

LD20: Lunch and Birthing a New Project

What’s faster than reheating leftovers?

Leftovers and chips, mmm mmm!

I’m going to need to eat some fruits and vegetables soon.

Anyway, last time I had a working build. My next goal is to get an SDL window to open and close. This part will either just work or I’ll find some weird complication here, too.

Ok, so I ended up copying a lot more files from other projects, but I finally managed to get to a point where I have something that might serve as a nice starting point for this and maybe future LDs.

For now, I have a splash screen.

Screenshot - LD20 entry by GBGames

The name of the project is tentative to change, but at least it has been born. Now to raise it into a healthy young game.

Categories
Game Design Game Development Geek / Technical Linux Game Development Personal Development

LD20: How to Lose 40 Minutes During a Ludum Dare Compo

CMake, how I love it when you just work.

CMake, how I hate it when you don’t work.

I should have prepared for this compo by having a basic, buildable project ready to go.

In trying to create the barest project for LD20, I’ve copied the directory structure and CMake build scripts from my LD18 game, which still builds just fine by the way, and changed references from LD18 to LD20.

And for some reason, with a basic main function and a bare-bones Game class that does nothing, I get a build error.

I notice that for some reason, even though I tell it to build the files in my source/game directory, it seems to be ignoring it. It doesn’t ignore it in my LD18 project, though.

First, for posterity (and my sanity), the command to get debug output is “make VERBOSE=1”. I always forget it and have to do searches online to find it, and sometimes CMake searches aren’t easy to do. I need to keep these notes somewhere handy for the future.

Next, I saw that it wasn’t finding my project library. Basically, my game has a main.cpp, and it links to the library created by the game subdirectory. What’s nice about having the game built as a library is that I can also build a test binary if I was using unit tests by linking to that same game library instead of building the object files twice.

After looking at the CMakeLists.txt files and comparing them to the ones in my LD18 project multiple times, I finally saw the culprit:

TARGET_LINK_LIBRARIES (gbgames-ld20-bin gbgamesld20-lib ....

It should link to gbgames-ld20-lib. It was missing a frickin’ dash. Looking closely at the error message, I would have seen the missing dash there as well, but…GAH!

And this is how you lose about 40 minutes during a Ludum Dare compo. B-(

Luckily, I finally got the project building and running, so now I can get some lunch.

1 day, seven and a half hours left. Eat fast.

Categories
Game Design Game Development Geek / Technical Linux Game Development Personal Development

LD20: Prototyped Game Play

I used my trusty graph paper and my handy-dandy game design prototype toolbox to see if the game rules I came up with could be any fun.

Prototyping!

In this image, the hearts represent pedestrians walking across the plaza. They are oriented in the direction they are going, a nice characteristic of heart tokens as opposed to circles or stars.

The star represents the person you need to deliver the package to. The package is represented by the red gem, which is held by one of the three couriers represented by the Mans. The barrels represent the agents trying to stop the couriers.

Playing with the game in this way, I realized there were questions that needed answering:

  • If two pedestrians try to walk into the same empty tile, what should happen?
  • Should pedestrians always try to go to the opposite wall they start on, or should they just go forward until they are forced to turn?
  • Should shoving be a second phase after moving your couriers, or should it be a result of moving into an occupied tile?
  • Should couriers be faster than agents? Than pedestrians? Slower?
  • Would randomness involved in the creation of pedestrians (where they spawn, what type they are, etc) be enough to prevent making the game mathematically solvable and therefore boring?

And finally, what is in that package that seems to be so important to the agents in the first place? B-)

I played around with various solutions, and I was able to get a feel for what made the game more complex/confusing versus what made it simple and straightforward, especially from the player’s perspective. Part of the game is being able to quickly read the status of the board and making moves with predictable results, so complicated shoving mechanics might not serve my goals. For example, if you shove an eastbound pedestrian north into a westbound pedestrian, should the westbound pedestrian get pushed east by the eastbound pedestrian? And if the westbound pedestrian is shoved into an southbound pedestrian, and if your couriers can be shoved back, it means that the end result is the eastbound pedestrian is in the same position it started from! The chain of shoves can get windy and interesting, but maybe it would be more straightforward and intuitive to force all shoves in one direction, so a chain is really just moving all pedestrians in a line.

There is one day, 9 hours left in the compo. I don’t think I need to solve all of these problems. I can always play with them as the game is developed. I have enough to start breaking ground on the code. Let’s get to work!

Categories
Game Design Game Development Geek / Technical Linux Game Development Personal Development

LD20: Good morning! And Design Thoughts

I woke up this morning, and unfortunately my dreams didn’t help me come up with a cool game concept.

I started the day with a typical breakfast.

Start the day right.

After my shower, I put on my custom Ludum Dare t-shirt.

I'm wearing my custom LD shirt

I wore that shirt at the Ludum Dare Meetup at GDC 2011. And as I type this, it has been covered in white cat hair. Thanks, Diego. B-(

Throughout my morning, I’ve been thinking about game mechanics that wouldn’t require a full AI engine or physics or anything else complex. At first I was keen on getting rid of any entities besides the player’s avatar. After all, you’re alone, right?

But then I realized that I could make other entities follow simple rules. There doesn’t have to be decision-making or goal-driven actions or complex evaluations. Enemies or hazards can simply follow basic rules, so any decision-making is in the code when I write it.

And more and more, I’ve liked my Hot Potato idea that I mentioned last time. So here’s what I’ve come up with so far:

Your crack team of couriers have to delivery a very important package to a very important man who works for a very important organization. This man is standing in a busy plaza in the hopes of blending in with the crowd to avoid detection from secret agents who hope to intercept the package.

The plaza will be tile-based grid.
The play will be turn-based.
And hopefully the AI will be quite simple and dumb, yet effective. B-)

Some basic rules:

  • Entities can move into adjacent tiles if they are free.
  • Entities can also shove other entities into other tiles.
  • A shoved entity pushed into an occupied tile will shove the other entity in the direction he/she is facing.
  • Secret agents can’t be shoved.
  • The very important package can be passed along to a teammate directly.
  • Alternatively, if the package handler shoves a chain of people who end up shoving a teammate, the package can be passed through the chain.
  • The very important man can only receive the package from the package handler directly. No chain can be used.
  • If an agent gets the package instead, it’s game over.
  • If the agents shove the package handler, it’s game over.

I think it can be an compelling game. My intent is to design the game so that if you try to deliver the package using only one courier, the agents will easily stop you, so you must rely on passing off the package to get it past the agents. The crowd may or may not grow/shrink in size as the game progresses. I don’t know how it will turn out, but I’ll have to do some paper prototyping to see if it has a chance of succeeding. BRB.

Off to go prototype, brb

Categories
Game Design Game Development Geek / Technical Linux Game Development Personal Development

LD20: I Was Not Expecting This Theme

So the theme for Ludum Dare 20 is “It’s Dangerous To Go Alone! Take this!”

I’m not really sure about it. I was really hoping for “Traps”, but you play the hand you’re dealt.

I haven’t thought too much about the theme yet (I was busy play Jeopardy! for the Wii with friends when the compo started), but here are some first draft game concepts:

  • Your Guardian Pet: Think Ico, only you’re the helpless one, and you have to leave your protective dog sometimes to find a way to get it into areas you need to go.
  • Shove Off!: You’re among a crowd of prey (sheep?), and there are predators (wolves?) circling. You need to maneuver yourself into position to push, kick, or shove the other prey out of the crowd so the predators eat someone other than you. It’s more like “Take THIS!”
  • Hot Potato: There is a very important item, and your team needs to deliver it, but there are agents trying to stop you. If a team member gets isolated while holding the item, you lose, so try to pass off the item to someone else before the agents can corner you.

One thing I want to try to do is avoid complexity, and while I’m more familiar with artificial intelligence, I’d rather not have to code up pathfinding or goal-driven agents. I’ll try to focus more on player-controlled mechanics and system interaction than on building a living, breathing world.

For now, I’m going to sleep on the problem, and in the morning, I’ll start prototyping some ideas. Good night, Ludum Dare!

Categories
Game Design Game Development Geek / Technical Linux Game Development Personal Development

April Update. Also, Ludum Dare 20 is here! #LD48

I haven’t updated my blog in the last month. Let me explain.

First, last month I wasn’t in the country. My blog posts in March were scheduled to be published while I was traveling through Europe for 18 days.

One highlight: in a moment of certainty and confidence, I proposed to my girlfriend on the balcony of Neuschwanstein Castle in Germany.

She said yes.

So now I’m engaged, and there’s wedding planning to do, which is apparently a lot of work and full of stress.

Second, after 24 hours of flights to get back home, I spent the first week or so feeling sick. I wasn’t doing much in the way of productivity. Heck, I don’t think I felt well enough to play “Minecraft” either. It was a miserable time, but I did get to catch up on what I call “Movies No One Wants to Watch With Me.” Have you seen Arena, the 1989 sci-fi film featuring a who’s who of Star Trek and Babylon 5? It’s kind of bad and cheesy, but I enjoyed it.

Third, upon recovery, I was dealing with tax preparation. Having a CPA do the work for you and answer questions is great for peace of mind.

Fourth, I’ve been a lot more active in the Association of Software Professionals this year. As a board member, I had a lot of catching up to do when I got back from Europe, and there have been some big decisions recently. There are some exciting plans in the works, and I don’t know how much I can say publicly here. If you’re an indie game developer and are not a member of this professional trade organization, I’d urge you to join to learn how to make your games more marketable and sell more effectively by joining the ASP today.

Fifth, I’ve been hard at work on Stop That Hero!. My goal was to have a friends-and-family playable (not for public consumption) version of the game ready by the end of this month. I’ll be short of that goal before Ludum Dare starts, but I’m quite happy with the progress I have been able to make in the last two weeks. I’ll write more about it in another post next week.

Sixth, Ludum Dare 20 starts tonight! If this blog has been quiet this past month, it will be the exact opposite this weekend. As usual, I will be live-blogging my participation in the 48-hour game development competition. Consider this post a warning that you’ll see a flood of updates soon.

Ludum Dare 20 will be a nice break from working on STH!. I’m hoping that the theme “Traps” wins, but there are some other good ones in the running, too.

The keynote is already live, and I think Sos did a great job on it! It’s like a call to arms for game developers!

While I didn’t submit my own video to it (I’ve been busy, as I’ve mentioned above), let it be known that I’m in.

Are you participating in Ludum Dare 20?

Categories
Game Design Game Development Marketing/Business Personal Development

The Importance of Speed

At GDC, I heard a lot of conflicting advice.

Dan Cook suggested a broad portfolio to reduce risk, for instance, while other developers talked about focusing your energies on a single project or genre.

Whatever any one indie said, the one thing everyone seemed to agree upon was the importance of speed.

Dan Cook has written about the importance of quick iterations to “find the fun” as quick as possible.

Andy Schatz talked about the development of Monaco when he was almost about to throw in the towel on being an indie, and he advocated working on something exciting every day.

Use two hour game jams to explore game mechanics or designs.

Play-test early and often.

Create an MMO every day.

With Stop That Hero!, I already knew that things were going much more slowly than I would have liked, but the importance of speed really hit home during the Ludum Dare Jam at the Noisebridge hacker space on the last day of GDC.

My goal: create one simple, quick game every hour during the jam. I knew it was ambitious, but I wanted to try out this focus on speed.

In the end, I spent hours just trying to cobble together some decent code to use as a base for my first project, and I didn’t manage to finish it.

That’s not agile. That’s not speed. And that’s not good.

I struggle with my major project partly because I don’t have a base of code to leverage. Every time I need technology to support game play, I have to figure out how to implement it and fit it into my existing code. I never spent any time working with something like Game Maker or a game engine such as Quake or Torque, and since I do my development on GNU/Linux and want to be able to port to multiple platforms, there aren’t really any 2D engines available for me to work with. If I need some tech, I more often than not have to figure out the best way to architect it myself. My current pathfinding and navigation code is difficult to work with, for example, and I’m sure there is a better way.

Stop That Hero! might just be too much for me right now, and I might be better served by stepping back to work on smaller projects that don’t require AI, UI, or any other technology I don’t currently have. Also, I could probably do well to dedicate time to studying existing source code.

While part of me wants to muscle through and not leave my first major project unfinished, another part of me thinks I would do better building up my tech by creating smaller games around individual pieces. For instance, if I created an entire game around clicking buttons, I would have created my UI code AND have a finished game to show for it. On the other hand, I’d probably run into a lot of the same issues trying to finish a smaller game anyway, so why not continue working on the same project?

I really want to see Stop That Hero! get finished, but the ship date keeps getting pushed back, and the problem isn’t necessarily a matter of features that can be cut. The basic game requires a lot of moving parts which still aren’t created, so it’s not as if I have scope to reduce.

If I want to work and ship faster, I need to change something about what I’m doing. Either I need a improved technology base, which I obviously haven’t been able to create quickly, or I need to temporarily switch to a smaller, simpler set of projects.

How would you approach this problem? Would you try to use smaller projects as stepping stones to the larger project, or would you continue to work on the larger project, figuring that you would end up hitting the same obstacles and solving the same problems anyway?

This post was scheduled to be published at a time when I will not be able to access the computer. I’ll respond to comments when I return at the end of the month.

Categories
Game Design Game Development Games Geek / Technical Marketing/Business Personal Development

The After GDC Glow

Last week I attended my first Game Developers Conference, and I guess the best way to start the recap is to say that I had a blast!

The Independent Games Summit was full of different groups of indies. Some knew each other from TIGSource. Others have been around forever. And since we’re all indies, we each had our own unique story and reason for being there. Even so, it felt as if everyone knew each other and were fairly supportive. It was like a very odd yet loving family.

I only had a Summit & Tutorials pass since it seemed to be in the sweet spot between the too-expensive All Access Pass and the “let’s hang out with people who want to find a job at the Career Pavilion” Expo pass. While I couldn’t attend a lot of the cool talks and panels in the later half of the week, I was still able to attend any of the summits.

At one point, I skipped out on the IGS summit for an AI summit talk on pathfinding. James Anhalt of Blizzard talked about the pathfinding problems of StarCraft 2, Alexander Kring of Nihilistic focused on Heroes on the Move, and Nathan Sturtevant from the University of Denver worked on Dragon’s Age: Origins. They each gave a glimpse into the tech behind the games, and the Q&A session at the end made me laugh because it was almost all complaints about StarCraft.

If I would have attended the Google Android Day tutorials, I apparently could have received a free Google device. I didn’t, but I got to see the long line for the tutorials that morning. It’s kind of the same, right?

On the other hand, I did sign up for an Intel AppUp event with Mike “PoV” Kasprzak and Phil “philhassey” Hassey and received this baby:

My New Intel-provided, Meebo-based Tablet

It’s a Meebo-based EXOPC Slate! I finally got a cool consumer electronics device!

The best part of GDC was meeting everyone I’ve only ever spoken to on IRC or on web forums. Whether I was having lunch, standing in line, or walking to a session, there was always someone’s name to call out to and say “Hey! I recognize you from your online avatar!”

I briefly met Leigh Alexander, Drew Sikora, Ian Schreiber, Noah Falstein, and Derek Yu. I met game developers I’ve talked to on the Indie Gamer forums and in the #ludumdare IRC channel. I met game developers I’ve only heard about in passing.

The IGDA booth with Corvus Elrod and company!

And I got to hug Corvus Elrod of Zakelro! Don’t forget to vote for the 2011 IGDA board!

The Ludum Dare meetup was fun and had a good turnout:

Ludum Dare meetup

Ludum Dare meetupLudum Dare meetupLudum Dare meetup

There were so many of us, we needed multiple tables!

And here’s a link to a bunch of us wearing LD48 shirts.

And one action shot of PoV eating:

PoV eats!

I was finally able to attend the Independent Games Festival and the Game Developers Choice Awards.

The IGF/GDCA at GDC

Congratulations to Mojang for winning five awards between the two events, including the Seamus McNally Grand Prize in the IGF!

At the end of the week, we had the Ludum Dare Jam at Noisebridge, a really cool hacker space.

Ludum Dare Jam at NoisebridgeLudum Dare Jam at Noisebridge

And an action video of Phil Hassey sleeping:

I had to leave the jam early and get on a plane the next morning, but I definitely want to do GDC next year! Heck, two days into it, I half wanted GDC to be over so I could get back home and make games sooner!

In the meantime, what was your favorite part of GDC?

This post was scheduled to be published at a time when I will not be able to access the computer. I’ll respond to comments when I return at the end of the month.