Categories
Game Development Geek / Technical Linux Game Development Personal Development

Why It Is Important to Document Even the Smallest Decisions

A week or so ago, I was configuring the hero summoning queue for my villages in “Stop That Hero!” (still available for pre-order!), and I couldn’t figure out why I had a special “END_QUEUE” for the last item in my queues. None of my code handled it, so it got ignored, and removing it didn’t change anything adversely that I could see, so I removed it since I couldn’t remember why I put it there in the first place.

Today, while working on a new level layout, I created a village that summoned only one farmer. When play-testing, I found that right when the farmer appears, the game ends in victory for the player.

Premature Victory

That’s odd…why would that happen?

My victory monitoring code checks all entities to see if there are any that are not on the player’s team. If there aren’t, then it checks all structures that summon entities owned by non-player teams to see if they are currently summoning anything. The idea is that at the beginning of the level, when no heroes have been summoned, the game doesn’t end in victory since they’re still coming, and victory only occurs when there are no more heroes being summoned AND there no more heroes left in the level.

The issue I was seeing is that right when a village spawns a farmer, the farmer doesn’t exist yet. It’s simply a new command to create a farmer. But the village no longer has a farmer in its queue and is empty. So the victory condition goes off and creates the end-game-in-victory-for-player command. So that’s why I see the farmer when the victory screen comes up. The farmer gets created and the game ends because both commands are run in the same update step.

And that’s why I had an “END_QUEUE” summon that doesn’t do anything. It’s to prevent this situation from happening. Now I remember. I ran into this issue before. The END_QUEUE summon is ignored, but the victory condition monitor sees that there is still something in the queue. By the time the END_QUEUE is “summoned” and gone, the entity creation should have happened for the previous item in the queue.

It was a stupid abuse of the system that I should have handled better the first time, but I didn’t think much of it. I needed to get things done, so I did the quick solution and promptly forgot about it.

Since I didn’t document what “END_QUEUE” was supposed to do when I came up with it, I spent part of my day trying to figure it out.

So there you go. Document your decisions, no matter how small. In fact, maybe the small decisions are even more important to document than the bigger ones.

Categories
Games Geek / Technical

Do You Have $9 to Kickstart Bhaloidam?

Corvus Elrod of Semionaut’s Notebook fame is doing something big: he’s pursuing his dream.

Corvus has done more involving story and play than anyone else I know. He has a wealth of knowledge about games, story, play, and community. He’s worked for decades exploring various aspects of “participatory storytelling,” and he talks about the meaning of game mechanics in his Notebook, among other topics. On his old blog, he hosted the Bloggers of the Round Table, which always had fascinating, thoughtful posts on all sorts of topics related to games. Every time I interact with him, I feel privileged because I always come away with a new idea or thought.

So it is with pleasure that I ask you to pledge to fund his current project, Bhaloidam.

What is Bhaloidam? It’s an open and accessible storytelling platform, but Corvus can explain it better than I can in this short video:

I could say it is like a powerful yet intuitive Dungeons and Dragons, but it is much more than a role-playing game system, and I would be doing Corvus a disservice.

Bhaloidam is the expression of my belief in the power of story and play and my belief in the importance of our communities.

If you want to see Bhaloidam in action and get a feel for it yourself, you can schedule an online game play demo.

The Kickstarter project is, at the time of this writing, 60% funded, but there’s only a week left to get the remaining 40%. Do you have $9 to pledge?

Bhaloidam is the culmination of all my creative, philosophical, spiritual, and intellectual, personal, and professional pursuits. It allows me to be an actor, a cartoonist, a computer animator, a writer, a director, a web designer, a storyteller, and while it doesn’t allow me to be an architect, the application of mathematics to creative expression scratches what I imagine is much the same itch.

So, Bhaloidam (both as a storytelling platform and a philosophy) is it for me. I am Bhaloidam. Along the way I’m sure to design more games (In fact, I’ve three in the works), but it’s Bhaloidam that lies at the heart of my career. It’s Bhaloidam that reflects not only who I am, but who I have been and who I want to be.

You can read more at the official Bhaloidam site. With a $9 pledge, you can help make Bhaloidam happen, and you’ll get an electronic copy of the 72-page, full-color, comic-format Bhaloidam handbook. For $9 more, you’ll get a printed copy.

There are also many other options available at different perk levels. For $45, for example, you’ll get the “skein pack”, which includes 1 printed copy of the Bhaloidam handbook, 4 Lifewheels, set of 360 tokens, 4 timing track pawns, and a set of 3 custom dice. You can also choose to give it to a friend as a gift.

So I’d like to ask you to do two things:

  1. Pledge at least $9 to fund Bhaloidam. There are 12 different perk levels, from the basic ebook to the $900 “Storyteller Special.”
  2. Tell at least one other person about Bhaloidam. Send them to the Bhaloidam site, tell them about the Bhaloidam Kickstarter project, and invite them to the online game play demos Corvus is hosting.

Let’s get Bhaloidam completely funded!

Categories
Game Development Games Marketing/Business Personal Development

Getting Used to Accepting Payments

According to my git repository, yesterday was the one-year anniversary of the start of my first major commerical game project, Stop That Hero!.

I’m not celebrating because it’s not a good milestone to hit. I didn’t know how long it would be to take the Ludum Dare #18 prototype and make it into a full commercial-quality game, but I did not expect it to take a year. In fact, when the 2010 Ludum Dare October Challenge was announced, I thought a month sounded like a good time period. If it took three days to prototype the game, surely four weeks would be plenty of time to polish it up and release it.

Tomorrow is October 1st and the 2011 Ludum Dare October Challenge (even though an announcement went out saying that it started already), and I was hoping to have the game released before then. In fact, I thought I would have something released by today, but there were some AI issues I tackled last week that I’m still working on.

But eventually I am going to release my game, and I realized that I have never accepted payments for a video game before. Until last month, I wasn’t even registered with a payment processor.

So last night, I posted a few pre-order forms on the Stop That Hero! website. If you want to get the game when it is released for Windows, Linux, or Mac, you can reserve your copy of the game now.

In posting the pre-order, I realized I made a big step. I had some nervousness, partly because I’m selling a game that isn’t released yet, and partly because I’m asking for payment. I’ve never done it before.

It’s possible that no one will care, that no one will even click on the links to buy, but that’s not the point. The point was that I decided to ask people to do so in the first place.

You can’t make money without asking for it, and I decided that until the game is released, the worst-case is that no one bothers to pay me for it. But if I don’t ask for pre-orders, then there is a 100% chance that I won’t get paid anyway.

I’ve taken a step to change that certainty into a possibility, and it’s one of those moments that makes you feel good to run your own business. I don’t have to accept circumstances. I can take action to change them.

In this case, my game is taking longer than expected to make, and I could decide that it means delaying the possibility of sales until the game is released, but I could also try something to see how it goes. The worst case is that it has no effect, that no one will reserve their copy of the game, but there’s a potential now for a lot of upside.

And now I’ll get back to work. Eventually any pre-orders have to get fulfilled with a real game, and I’d like that to be before the end of another month.

Categories
Game Design Game Development Geek / Technical Linux Game Development

Stop That Hero! Development Summary

The last time I wrote about Stop That Hero! development was in July. Here’s a quick summary of the work I’ve done since then:

Fixed memory bugs

I fixed a number of issues in July, specifically with weird corruption issues that seemed to result from the use of std::vector<bool> which is apparently not a real vector of boolean values. I was easily able to discover where memory leaks were occurring with Valgrind.

Recently, I ran into a bizarre unit test failure when adding code to a module that had nothing to do with the unit test, and I discovered that I had introduced a bunch of memory leaks that were finally manifesting in such issues. It wasn’t hard to fix since I once again was able to use Valgrind, but it was tedious work. A lot of it was fixing dumb mistakes, too. I have no idea why I thought I could get away with the code I wrote when I wrote it.

Unless there are corruption problems, memory bugs are not usually a big deal during development. Still, it would be nice if I used tools that made it easier to avoid the problems in the first place. I use UnitTest++, but these memory leak issues would have been caught had I used a tool such as CPPUTest which fails tests if memory leaks.

Added more minions, entities, and projectiles

Once I made combat revolve around projectiles, I added fireball-launching dragons and warlocks. Warlocks will eventually have a magic spell they cast, but they launch fireballs because that was the only projectile I had at the time.

Recently, I added new heroes. Archers shoot arrows, and wizards cast lightning bolts. I eventually want to add villagers and knights and get rid of the generic Hero character.

More Heroes Added

Optimized rendering

I’ve had the same update/rendering code for a long time, and on a whim, I added some logging to my game to find out why I wasn’t able to get 60 FPS even though I didn’t think I was doing much.

It turned out, I wasn’t doing much. All of my code ran within a millisecond, but the actual SDL call that blits to the window took between 30-50 ms to run! The good news is that my own code isn’t slowing me down, but mathematically it’s impossible that SDL MUST render this slow since so many other SDL games run much faster. So I looked to find out what other people did to make it work.

Here’s the code I was using to set the video mode:
m_screen = sdlInstance->SDL_SetVideoMode(m_x, m_y, m_bitDepth, SDL_DOUBLEBUF);

And here’s a much faster version based on a thead at Ubuntu Forums that I apparently did not bookmark:
m_screen = sdlInstance->SDL_SetVideoMode(m_x, m_y, m_bitDepth, SDL_SWSURFACE | SDL_ASYNCBLIT | SDL_DOUBLEBUF | SDL_ANYFORMAT | SDL_SRCALPHA);

So I went from 30-50 ms to 8 ms. The game runs so much more smoothly now, and it didn’t take a lot of work at all.

Switched away from pie menu

Pie menus are great for usability, but only if you can guarantee that the menu can be displayed in its entirety around the mouse cursor. Since one goal with “Stop That Hero!” was to make the interface as simple as possible, I didn’t want a scrolling world. The entire world fits on the screen at once. To use pie menus, I’d have to reduce the world size to provide a border all so that buttons could fit on the screen if a tower was selected near the edges.

So I removed the pie menu and went back to a traditional UI at the top of the screen.

Added resources and minion costs

Before, I was adding minions to the game whenever I wanted. Now there are resource costs, and it takes time to summon a minion from a tower. The player starts with a base set of resources, and the current system adds 1 resource every second. It’s simple, and it works. I can experiment with resource mechanics, such as adding rewards for killing heroes or if certain minions collect items and bring them back to the player’s castle, but the basic system is in place.

Made object creation more generic/data driven

I initially tried to make the game as quickly as possible, so instead of trying to genericize object creation, I created a bunch of separate commands: CreateHeroCommand, CreateDragonCommand, CreateOrcCommand, etc.

While it worked, it was also very limiting. Each time I added a new type of entity or in-game object, I had to create a new command. Maybe that’s fine if I know what entities and objects I want to create up front, but it limits the design. Maybe I want to make weak squires, regular soldiers, and strong knights as variations on each other. The effort to write the code for the separate creation commands would be tedious and slow.

So I replaced all of those CreateXYZCommands with CreateObjectFromTemplate. Instead of having coded commands to create an orc, I create a template called Orc, which defines components and data that an orc would have. CreateObjectFromTemplate(“Orc”) then creates the components with the correct data, and an orc appears in the game world.

Templates can be created and changed much more easily than hardcoded commands, which means adding and tweaking minions, heroes, and other in-game objects is easier, which means game design and balancing is easier. It also allows me to data-drive the game a lot more, which means more interesting entities and game situations.

Added timer-based summoning queues

Both heroes and minions take time to appear. Minions are summoned and there is a summoning bar that lets you know how finished the current summon is. By using the same summoning queue code, I now have a Village which pops out heroes over time.

Timers seemed like a special case of general triggers. It would be nice to have dwarves pop out of caves if any entities come near or have other similar scripting in the game, but my initial attempt at general triggers might have been trying to do too much. Maybe for another game.

What’s Next?

The game is still silent, so eventually I would like to add some sound effects and music. Animations and special effects would really punch up the visuals, which need a consistent art direction. It’s all functional programmer art and will get replaced.

But the biggest thing left to do is improve the AI. Dragons can attack from distance, yet they still try to run up to the heroes the way melee fighters do. Also, entities tend to bunch up. 10 orcs attacking a hero tend to look like a single orc attacking the hero, and it is hard to see what’s happening.

My initial attempt at solving these problems resulted in unacceptable slowness last week, but I’ve identified what’s going on and think I have a fix for it.

But hey, this is AI work. I already know I can’t expect that I’ll figure it out in a matter of hours or days. There’s going to be a lot of changes, tweaks, and fixes until it looks right.

And besides game development work, there’s the work of marketing and selling the game. There’s a “Stop That Hero!” Facebook page, and I just sent out a newsletter to my list announcing the upcoming release. I’m hoping to get a pre-alpha release out soon.

Categories
General Politics/Government

Where Were You On September 11th, 2001?

10 years ago, I was up early finishing math homework at the desk in my dorm. It was due for that morning’s class, and I had procrastinated during the weekend. It was my junior year of college, and I didn’t know that classes would be canceled that day.

I had two roommates in an apartment-like dorm. The one I shared a bunk with was still asleep, but the one who was usually secluded in his room came out and told me to turn on the TV news.

I watched a building with smoke billowing out of it, and there was some speculation that a plane had accidentally flown into it. No one knew if it was an attack. Shortly after, I saw live reports of the second plane flying into the World Trade Center buildings, and it was clear that it was no accident.

Our neighbors across the hall knocked on the door, and we all watched the news in silence. Footage of the planes slamming into the buildings repeated, and news anchors provided what info they could, even though no one knew what was happening. Occasionally someone would say something, but we were otherwise numbed and unable to speak.

My other roommate appeared and asked what was going on since so many people were in our living room. I remember feeling a bit guilty that I didn’t think to go wake him up. He did a literal double-take when he saw the TV footage.

People were reported to be jumping out of the burning towers, which eventually fell as well. The Pentagon was attacked, and we heard the relatively good news that one plane crashed in a field instead of hitting its intended target. One neighbor said it looked like the fall of Rome, and I remember being bothered by the statement at the time but in a way I couldn’t put to words. It was all horrific, and the footage was on constant repeat.

I remember my mother called me, which was difficult since the phone lines were tied up. Everyone was calling everyone, it seemed. “Where are you?”

“I’m at school.”

“What are you doing there?!”

“Mom, I live here.”

Even people who live in the Chicagoland area sometimes think that all of Chicago is Downtown Chicago. Even though I was miles away from downtown, my mother probably thought I was hanging out near the Sears Tower, which I’m sure everyone thought would be a potential target.

I knew of only one person in New York, a prominent QBasic game reviewer, and I was relieved to find out he was safe.

The school set up some TVs in the cafeteria, and I spent part of the day with friends there. Eventually I realized that I was getting fatigued by the news on repeat. It was a lot to process and take in. There was so much death and destruction, and while I was aware that people might be used to such attacks in some places in the world, it was the first time I can remember seeing such an attack so close to home.

I recall the face of Osama bin Laden appearing on TV, with people speculating about his involvement, and I remember thinking that we don’t know who did it, and yet now everyone in America who looks remotely Middle Eastern will be suspected of being a terrorist. I was reminded of “The Siege,” a movie starring Denzel Washington, Bruce Willis, and Annette Bening. There is a scene shortly after a terrorist attack with talk radio personalities arguing that we should deport all Arabs, since we “know” they’re the ones responsible. Everyone was afraid of everyone, and I worried it was going to happen in real life.

One Muslim friend of mine reported being on a crowded El that week and wondering why no one would take the seat next to her, until she realized it was because everyone was afraid of her. If you knew her, you’d realize how laughably absurd it is to be afraid to sit next to her, and yet that was the climate of fear the country was in.

I remember going to class downtown the next day, and while waiting for the elevator, a friend asked me if I was nervous. I said I wasn’t, because I figured the day after an attack is probably the safest time to be anywhere. In the days that followed, though, I was incredibly aware of the fact that the Sears Tower was mere blocks away, and I couldn’t help but imagine how terrible it would be to stand where I was and witness it burn and fall.

There was a lot of ugliness on September 11th, and at times you couldn’t believe that the only thing we have to fear is fear itself the way the media and politicians went on, but I remember some things that weren’t horrible. While I didn’t know anyone who had died in the attacks, and I don’t think I knew anyone who knew anyone either, there was a lot of goodwill and love. I remember a number of us were being turned away when trying to donate blood because so many people were trying to help. It seemed every other person had shirts proclaiming that they hearted New York. Everyone was a New Yorker. The outpouring of support from the nations of the world included statements like “We are all Americans.”

With so much support, goodwill, and strength, how could the attacks possibly compare to the fall of Rome?

In the years to follow, I remember recounting the day with friends every so often, and I realized that “Where were you on September 11th?” was going to be a question along the lines of “Where were you when John F. Kennedy was killed?” A friend said his alarm woke him up because a radio personality was saying that if you’re just tuning in, you’re waking up in World War III, which he initially dismissed as some alarmist version of what might likely be a relatively benign event. Another was interviewing for a job and saw the flags at half mast upon arrival.

In all of these stories, it seems as if time stands still for the person when he/she realizes what happened. Priorities become reevaluated. And there is always this feeling that it was an unreal experience, as if this remembering was not of the past but of a bizarre dream.

I wish I had a good moral or point to tell. Maybe if I was a better writer, I could turn my story into a point about the dangers of fear, about how terrorism is about terror, and when we allow ourselves to be afraid, the terrorists have done their job. Maybe I could even throw in the well-known quote by Benjamin Franklin on those who deserve neither liberty nor safety. But in the end, it was a horrible morning involving a lot of suffering and death and destruction, and this article was merely my memory of it.

Categories
Game Development Games Geek / Technical

See Stop That Hero! in Chicago

Indie City Games is hosting the Open House Indie Games Expo in Chicago this Saturday.

Members of the general games-playing public are invited to show up, meet local indie developers, and play the games they’ve been hard at work creating. It’s fun, it’s free, and absolutely everyone is invited!

I’ll be demoing Stop That Hero! for the first time in public.

When? 1PM – 4PM, Saturday August 20th, 2011
Where? 243 S. Wabash Ave Room 924


View Larger Map

Do you plan on attending?

Categories
Game Design Game Development Geek / Technical

Meaningful Game Play Game Jam

Josh Larson of God At Play wrote about meaningful game play. Josh’s definition:

Meaningful game: a game that has significance or provides purpose for how one lives life.

He specifically argues that there seems to be a lack of games with deeper meaning, and that there are not enough of them to satisfy the people who want to play deeper, more meaningful games. He identified the difficulty a game designer has when setting out to make a meaningful game. Where does one begin? Have there been attempts before? It’s hard to know what works and what doesn’t without actually doing it yourself because body of work available to build on is scarce.

His suggestion is that there should be game jams dedicated to Meaningful Game Play, where such experiments can be prototyped and critically analyzed. The goal would be to create a resource for game designers who wish to develop deeper, more meaningful games.

The first Meaningful Game Play Game Jam starts today at the BitMethod offices in Des Moines, IA. Details can be found at the newly launched Meaningful Gameplay website.

I’ll be there. Do you plan on attending? Do you want to participate in a Meaningful Game Play Game Jam?

Categories
Game Design Game Development Marketing/Business

Should Indies Make Bigger Games?

I’ve been participating in the Indie Indie Conversation on YouTube with other full-time indie game developers. We upload 3 minute videos at a time (although some are a bit longer) and have a discussion about all sorts of topics related to being an indie, such as technical struggles, the need to explicitly make time for social interaction, and meaningful game play.

Recently, there has been some talk about financial concerns. Andy Moore of Steambirds fame has talked about his recent return to full-time indie status, but his lack of contract work was not his choice, and the lack of a safety net is made worse by the lack of a current project. Mike Hommel chimed in saying that his last project was a flop and lost him money, and he’s going to have to make some games for Flash Game Licensing to make a bit of cash. In the end, he got a new business deal, so good for him, but the turn this conversation took bothered me.

So I made this video:

Now, keep in mind, I write way better than I speak. To clarify, I don’t want to say that Flash games are necessarily dinky little things that get churned out with no soul. My impression of the attitudes of some indies, however, is that spending time on a game to make it great rather than merely good is spending too much time on a single project.

How much value can you really provide your customers if you spent only a few weeks on your game? Chris Hecker’s 2010 GDC rant Please Finish Your Game talks about the idea that a lot of games are prematurely “finished” by indies. That is, they are put out there, and there’s no follow-up or follow-through.

Yes, it is important to get feedback as your game iteratively develops, and releasing early and often is great for getting that feedback and helping you see what direction to take. But it’s not as if indies are putting together epic games and dropping development as soon as they see that there is no audience, or at least that’s not my impression. They just aren’t trying to make bigger games, and apparently they think they’re being rewarded enough for the smaller games.

So are big games inappropriate for developers who aren’t Mojang? Is it too financially risky to make something deeper for players to enjoy, or is it the exact right way that we should be making games? Did you quit your day job to be mediocre, or do you want to meet your potential, even if it is a bit riskier?

Categories
Game Design Game Development Geek / Technical

A Summary of Recent Stop That Hero! Developments

It’s been a long time since I blogged about anything, and any “Stop That Hero!” posts were sparse, so let me update you on what I’ve been doing over the last couple of months.

When I made the original Ludum Dare #18 entry, I had just finished reading through two AI books: AI for Game Developers and Artificial Intelligence for Games, Second Edition. My LD version of “Stop That Hero!” was the proving ground for what I learned. Three days of “why won’t this work?!” frustration concluded with everything coming together, and I was proud of it.

As I worked on the full version of the game, I found that one of the struggles I’ve had with STH! is with regards to software architecture. The entity AI was especially unintuitive to work with because I had written a bunch of disparate systems that weren’t aware of each other but depended on all of them working together.

The Movement system assumed that the MovementComponent had its direction set correctly and moved the entity’s position according to its speed. The Targeting system would find the nearest targetable object. And the Pathfinding system would find a path to that targetable object. Now, they sound like they work together fine, and for those three responsibilies (movement, targeting, and pathfinding), they were great.

But path following was the responsibility of the pathfinding system, which updated an entity’s MovementComponent’s direction based on where the next node in the path was. Targeting was a bit weird, too. For example, the Hero targets treasure chests, castles, and towers. In the above system, the Hero would go towards the nearest targetable object, which means he’d pick up health even if he didn’t need it simply because he was closer to it than anything else, and I had no way to change it easily.

Part of the problem is my inexperience with creating AI systems. Another part is my inexperience with component-based systems. And a third part was my inexperience with software architecture in general.

Months ago, someone suggested I read Programming Game AI by Example by Mat Buckland. What this book had over the other two books I mentioned was actual working code and examples to read through. If you’re new to game AI, I would highly recommend Buckland’s book.

After reading through it and the source code, I rearchitected the AI of my game. Now instead of having disparate systems that somehow work together, making tweaks and changes unintuitive and hard, I have goal-driven agents. Entities have a Brain component, and different Brains have different kinds of goal evaluations. A sword-wielding hero, for example, might decide between conquering the nearest tower, going for the nearest health, or fighting the target enemy, and those decisions will depend on the health of the hero, the distance to a tower, and how strong the enemy is. A slime might be a simpleton and will merely try to reach its target enemy. A warlock might try to keep some distance from his enemy while staying within range to fire magic bolts or do whatever else warlocks do. And so on.

As you can see, changing the AI of an entity is much easier and intuitive with Buckland’s goal-driven agents. I understand that it is not the state-of-the-art in game AI, but it is way better than what I had, it is good enough for this project, and it wasn’t that hard to implement. The hard part is writing the code for the different goals and goal evaluators, which is more tedious than difficult.

As for other updates, I added the concept of teams to make conquering and fighting easier to manage. I was very unhappy with how the Targeting component was being abused in figuring out if a hero was at a tower or if enemies were within range of each other. I had envisioned levels where the player isn’t fighting against heroes but other villains. Slimes should be able to target slimes from another team, but before I added a Team component, there was no way to know.

In May, I added combat mechanics and death. Granted, I already showed a video of combat mechanics in action, but still. Weapons are implemented as projectiles for simplicity. If I want melee attacks, I’ll just set the range to be a short distance.

And since I was having trouble telling if the attacks were doing anything unless the target died, I added little health bars to provide feedback. When an entity’s health drops to 0, it dies. As in the original prototype, the hero has 3 lives (after all, all video game heroes have 3 lives), but I’m rethinking that idea based on a lot of other ideas I have for the game.

Originally, I was thinking about having melee attacks only, but when I added slime trails, projectiles made sense, and at that point, I realized that melee attacks can be implemented as projectiles. Yay, simplicity!

Also, yay, feature creep? Every feature that gets added means more time is needed to make the game. Isn’t it a bit late to make such a fundamental change to the game? The project is already way, way behind the original schedule. Why make it harder to ship?

Here’s my take: I’m less interested in shipping as fast as I can and more interested in shipping a fun, compelling game. By adding projectiles and slime trails, I’ve made the game noticeably more interesting.

Frankly, the game needed more interesting things to do. Since starting the project in October, it is only recently that I’ve done so much work specifically on experimenting with the game design as opposed to putting in scaffolding. Yes, I’ll be the first to admit that I took way too long to get to this point, but I woefully underestimated the technical requirements and did not have a full understanding of the scope of the project when I started.

All that said, in preparation for the launch of the game, I created a website for it. Go to StopThatHero.com, subscribe to the free email newsletter, and Like the Stop That Hero! Facebook page.

The website is not polished yet, but then again, neither is the game. There is a development blog where I will talk about STH!-specific work, and I’ll use the main blog here to talk about my business or anything else as before.

And now, I’ll disappear into my work again. There’s more that I haven’t mentioned above, but I will say that I’ve been redoing a bit of the front-end work in my attempt to separate the GUI from the actual game logic. While it might sound like I’m trying to do things “right” instead of “good enough for game dev”, I found that the separation is already making it much easier to move forward. Like I said, I’ve been weak in software architecture. I think other game developers assume I know more about how to hack something out that works well enough, but the truth is, the more I try to slap something together in the interest of going fast, the more I end up painting myself into corners. So I’ve been reading up on GUI architectures and reading through code to see how others handle it, and it’s been eye-opening.

Categories
Game Design Game Development Geek / Technical Linux Game Development

Stop That Hero! Dev Video: Slimes Throw Chests??

It’s really exciting when I add a feature to Stop That Hero! that I can actually show to someone, and in the last week or so, I’ve added two.

First, slime monsters now leave behind a slime trail. If the Hero steps in the slime trail, he is slowed down temporarily. The slime trail and the slow effect both wear off eventually.

Second, to actually take advantage of the slime trail’s slowing effect, I added projectile weapons. The idea is that the player will strategically send out slimes ahead of stone-throwing orcs or fireball-launching dragons. Their weapons should be more effective against a slowed Hero since they have more time to attack more often.

Once I changed attacks in the combat system to be projectiles, a quick test was to take an existing entity in the game and change its weapon configuration. Since I only had Heroes and slimes, I gave slimes the ability to throw a projectile at the Hero. Instead of attacking from one tile away, they can now attack from 10 tiles away. And to give the projectile an image, I used an existing sprite rather than spend time making something that looks good.

So for this test, it is the Hero versus treasure chest-throwing slimes!

The development video below is a demonstration of the results. Please excuse the lame art. I’m focusing more on the game mechanics/dynamics and less on the aesthetics for now.

I’m pleased to say that it only takes a handful of slimes to defeat the Hero instead of requiring a small army. While it means that my test worked as expected, it also means I’ll need to make some of the Heroes more powerful once I create some orcs or dragons, who should be stronger than the slimes.