Home | Rules and Guide | Sign In/Create Account | Write a Post | Donate | #ludumdare on irc.afternet.org (Info)

Ludum Dare 23 — April 20th-23rd, 2012 — 10 Year Anniversary!

Ludum Dare 22 :: December 16th-19th, 2011 :: Theme: Alone

[ Results: Top 50 Compo, Jam | Top 25 Categories | View My Entry ]

[ View All (Compo, Jam) | Warmup ]


About GBGames

- http://www.gbgames.com/blog is GBGames' Blog: An Indie Game Developer's Somewhat Interesting Thoughts

GBGames's Trophies

The Heartless Cookie Terrorist Award
Awarded by AndrewBC on August 25, 2010
Charlie Sheen Getting Hammered on Screwdrivers Award
Awarded by Martoon on August 18, 2010
The "I Can't Get You Because You're In The Bike Lane" Excuse
Awarded by demonpants on December 17, 2008
The Photo Finish
Awarded by Doches on December 8, 2008
The Palm Of RSI Prevention
Awarded by Hamumu on August 23, 2008
Worlds Finest Juice Award
Awarded by PoV on August 9, 2008

GBGames's Archive

Let’s Make and Sell a Game!

Posted by
Friday, September 24th, 2010 11:17 am

PoV's Challenge

Stop That Hero! Ported to Win32!

Posted by
Wednesday, August 25th, 2010 1:29 pm

I’ve updated my LD final entry page, but I wanted to let you know that I finally created a Stop That Hero! Windows port (2.2MB)!

Now you have no excuse not to play! Well, assuming you don’t use a Mac. Or some other OS. Then you have an excuse.

Anyone Familiar with CMake?

Posted by
Tuesday, August 24th, 2010 6:39 am

If so, I’d love to talk to you! I’m trying to configure the CMake files so that they create the following:
- Linux distributable in tar.gz format
- Win32 distributable .zip format
- Source in tar.gz or .zip format

So far, I can get the Linux-based distributable in tar.gz format, but it is also creating a installer with the .sh extension, and it tries to do the following:

CPack: Create package using TZ
CPack: Install projects
CPack: - Run preinstall target for: gbgames-ld18
CPack: - Install project: gbgames-ld18
CPack: Compress package
CPack Error: Problem with tar_close(): No such file or directory
CPack Error: Problem compressing the directory
CPack Error: Error when generating package: gbgames-ld18
make: *** [package] Error 1

I’m sure it has to do with the fact that I haven’t done much with the CMake files but tell it to use CPack, so it is trying to do default things, but I’m not sure how to configure it for what I want. Anyone willing to help? I’d appreciate it!

Stop That Hero! Development Time Lapse!

Posted by
Monday, August 23rd, 2010 7:37 pm

Here’s the time lapse for my 72 hours of development on Stop That Hero!

Stop That Hero! Is Finished!

Posted by
Monday, August 23rd, 2010 6:56 pm

I apparently needed sleep and a third day to get this game completed, but here it is!

Stop That Hero! is finished

So far, the Stop That Hero! Linux version (1.6MB) is all I have. I just started using CMake for my build scripts, so please let me know if the game won’t run on your computer.
Get the Stop That Hero! source

I’ll work on a Windows port, but for now, I’m going to relax! It’s been a grueling 72 hours!

UPDATE: Windows port (2.2MB) created and available for you!

I also updated the Linux build. It’s the same code, but the build was done on an older Linux-based system, so it should run on more systems without a problem.

I’m In the Home Stretch

Posted by
Monday, August 23rd, 2010 4:51 pm

I’m at the final iteration!

The home stretch!

Basically, the tasks I have left:

  • create instructions screen
  • add sound effects
  • package this baby up!

In the last iteration, I was play testing and balancing as best as I could. I decided that the bat was too expensive, so I moved it down in front of the slime in terms of costs. I lowered the starting health of the Hero and gave him fewer lives. I also tweaked the level design a bit to accommodate the AI’s inability to see too far ahead. There are also victory and defeat screens now.

I finally got the AI working well enough that I realized that I wasn’t just debugging the program anymore. I was playing the game! And it’s actually not that lame! B-)

Let’s Keep on Jammin’!

Posted by
Monday, August 23rd, 2010 7:54 am

I missed the deadline for the main compo, but I can still submit my game to the Ludum Dare Jam. The deadline is 24 hours after the end of the compo, so I have until 9PM tonight to finish this game.

After a good night’s rest, I woke up with bug fixes. Seriously, I was lying in bed, slowly waking up, and I thought, “Oh, yeah, I implemented cooldown for the entities after they attack, but I forgot to ensure that cooldown ends.” I fixed a crash bug which also prevents the creatures from trying to leave the world map. And I improved the exploration mode of the AI so that the entities should no longer wiggle or fidget. They pick a direction and go until they reach it. I found that the reason why the hero was getting stuck in place. It was due to the fact that I was checking if he had reached a very exact location, and with his speed, he sometimes overshoots it. When he tries to go back to it, he overshoots again, forever. I enlarged the collision detection box to compensate.

When I finished Iteration 4, I found out that accidentally implemented some stories from Iteration which deal with entities attacking each other. I’ve simplified combat so if entities are not in cooldown and are touching, they’re attacking. That implementation left Iteration 5 fairly moot. In fact, I decided to skip the remaining story in Iteration 5 which dealt with some nuanced AI that I’m not even going to look at, so I’m on to Iteration 6. You can see the backlog of skipped story cards under the Iteration card.

Iteration 5 finished quickly; On to Iteration 6

I’m pretty excited. It’s only 10AM, and I’m on the last two iterations. Iteration 7 is basically sound effects and packaging the game up, and frankly (and sadly), sound is optional at this point. B-)

Missed the Deadline but Continuing On

Posted by
Sunday, August 22nd, 2010 9:03 pm

I got to Iteration 3 by scrapping some of the art and animations I had planned for Iteration 2. Those story points go back into the backlog.

Iteration 3

Iteration 3 was a bear. It was where a lot of the advanced AI had to be implemented. I’ve never done A*. Most of my AI was very simplistic, which went with the simplistic games I’ve done before. This game was going to be different.

Or at least I hoped it would. Entities would bumble about, get stuck, and fly off the world map even though I explicitly told them not to!

I had a quick lunch which was easy to make while I continued to work.

Vegan pizza and applce juice

Unfortunately, the deadline for the main Ludum Dare compo passed when I finally figured out the A* algorithm (it turned out that there was a greater-than sign when there should have been a less-than sign, which is why the entities were moving so strangely). After the pathfinding, the entities still had to interact.

I had the Hero moving toward targets it sees nearby, although every so often I see that he gets stuck in a certain tile for some reason. Enemies seem to have trouble moving to the Hero like I expect, but they find him soon enough.

But with Iteration 4, they fight!

Iteration 4

Do you see how the Hero’s health is down?

See enemies put on the hurt!

That’s the first time it has been like that outside of arbitrary tests being conducted. One of the dragons did that! Good job, my babies!

Since the main compo is over, the only option I have left is to continue on. I can still try to enter the Ludum Dare Jam, which gives me an extra 24 hours before the submission deadline.

For now, though, I’m going to bed. These last 48 hours have been grueling, frustrating, and exciting.

Good Morning, Ludum Dare!

Posted by
Sunday, August 22nd, 2010 9:46 am

Good Morning, Ludum Dare!

I went to bed after 5:30AM after getting some rudimentary AI in. I don’t know why the ground-based characters have no second-thoughts about going through the trees and mountains. If anything, they should want to avoid them. I’m sure there’s a bug in the implementation.

Watch them move!

I woke up feeling fairly crappy, but I know what will fix that!

Let's wake up and get this game done!

Yeah, OJ! Oh, and, yeah, sure, I suppose Banana can come along, too.

My, What a Fancy World You Have There!

Posted by
Saturday, August 21st, 2010 10:35 pm

My, what a fancy world you have there!

What you see is the game’s rendering of a small 50×32 image, blown up below:

The Tile Map

Besides creating a world tile map, it also figures out where to place towers, chests, and the castle. The black spot is the hero’s spawn point. Red squares represent chests with health in them, and yellow ones represent chests with weapon upgrades.

The tile map will also help the AI figure where and how it can move. I need to do some trickery to make sure it deals with towers and castles correctly. They’re larger than a single 16×16 tile, but the AI should act like there is an impassable wall where it looks like there is one. Also, I need to make sure the hero knows how to get to the entrance of a tower or castle.

UPDATE:
Iteration 2 of 7 started with a little over 20 hours left in the compo.

Iteration 2 of 7 starts with 20 hr 15 min left.

Lots of Work Left and LD Is Halfway Through?!

Posted by
Saturday, August 21st, 2010 8:10 pm

I had some fig bars as a snack as the evening wore on.

Fig bars

My fantastic and amazing girlfriend made me a taco dinner, which was so delicious that my taste buds were fist-bumping each other.

Taco Dinner

I went to a party my friends were hosting so I could take a short break and get some much-needed social time, but I came back home shortly.

Looking at The Big (Cork) Board, I can see that I’m almost done with the first iteration of work.

Almost done with the first of seven iterations

Unfortunately, I still have 6 more big iterations to do, and a lot of it is doing AI path-finding and other AI things I’ve never done before.

There's a lot left to do

And the deadline is looming.

The Deadline is Looming!

I’m feeling pretty screwed.

I'm screwed, aren't I?

Wait a minute. I think I have some Red Bull shots in my fridge…

Oh, yeah, I forgot I had these.

I don’t drink caffeine usually, but desperate times call for desperate measures.

This Might Help

Bottom's Up!

Let’s roll.

Let's Do This

Stop That Hero! Slowly Progressing

Posted by
Saturday, August 21st, 2010 4:49 pm

Screen shot in progress

What you see is a working UI. The hero’s status is running off of live data, which means that he’s at full health, has 10 lives left, and has no weapon.

Also, the number of resources you have is running on live data.

The world is rendering 16×16 tiles of grass and tree right now, but I don’t have real data for it yet. I’m going to have to create the world, and at first, I’m fine with it being a bit smaller just so I can test out the AI when I finally get to it.

We’re nearing the 24-hour mark, though. I feel like I’ve been working non-stop and have been quite focused, but so many things still need to be finished. I might not sleep well tonight. B-\

And So It Was Named

Posted by
Saturday, August 21st, 2010 1:14 pm

My game has a title screen with working GUI elements. And with a title screen comes a title.

The game has a title!

It’s “Stop That Hero!”, the game where you throw everything you have at that pesky heroic figure bent on stopping you from doing whatever evil things you are doing. What are you doing, anyway? Kidnapping princesses? Destroying the world? Littering?

Progress and Lunch

Posted by
Saturday, August 21st, 2010 11:20 am

Ok, I have a window that opens and closes. It’s not that amazing, but it is a lot of boiler-plate code. I probably should have declared that I will be using some existing code to, you know, render a window.

Anyway, on to lunch. That’s right! It’s time for my award-winning peanut butter and pickle sandwich!

The award-winning peanut butter pickle sandwich!

I also had carrots, broccoli, grapes, and a peach.

Also, my cats are dealing with my LD-induced schedule fairly well:

Cats are cuddly

Let’s Be Agile!

Posted by
Saturday, August 21st, 2010 9:48 am

I took some time to figure out what features I’ll need to implement, what art and sound I’ll need to create, and what the complexity of it all will be, and I’ve come up with a backlog of 103 Agile story points.

Agile backlog

First iteration

Now, iterations are going to be kind of loosely based on “Whenever I get it done” as opposed to time-bound sprints. Still, having all of the work figured out up front helped me figure out that I was missing some features. For instance, an instruction screen! Also, I feel that the rest of LD will be much more focused. I’ll always have a piece of functionality assigned to me that I should be working on.

Time for Breakfast!

Posted by
Saturday, August 21st, 2010 7:21 am

I started my day right: with a banana!

A banana to start the day!

After reading for a bit, catching up on LD posts, and awarding some trophies, I finally made myself a full breakfast!

Scrambled eggs, buttered toast with cinnamon, and OJ

As you can see, I had scrambled eggs, buttered toast with some cinnamon sprinkled on top, and a glass of orange juice! I also have my unread “Artificial Intelligence for Games” book handy. I have a feeling I’m going to need it.

But first, a quick shower! Then I can get back to working on my game in earnest. In the meantime, I’ve realized that my hero is going to need to know how to fight an enemy. I had a couple of states as Fight or Flee, but what does Fight mean? I think I’ll change them to Chase/Evade, and Attack is a completely different state.

My plan: when the hero is chasing an enemy, it tries to get adjacent to it. Then it can attack. The attack occurs, damage is calculated, and then the hero has to wait a few moments before he can attack again. Hmm…maybe the hero should be put into another state after an attack: rest mode. This way, he can’t attack and flee immediately. He has to stick around long enough to be attacked himself.

Ok, Self, don’t panic. I’m sure the AI isn’t going to be THAT overwhelming.

Digital Mock Up

Posted by
Saturday, August 21st, 2010 12:36 am

Another mock up!

Mock Up

I still don’t have code, but I’ve decided that the individual squares/tiles of the game will be 16×16. It’s tiny, but that means the graphics don’t have to look terribly great. The hero is 8×11.

I wish I knew a better color scheme to use, though. Colorblind players, let me know if you can’t see anything because the greens, blues, and reds blend in together. B-(

My next task is to actually create real tiles and sprites, and then I can get started on some code to render it correctly.

But first, I think I’ll go to sleep. Good night, LD!

Prototyping Goodness

Posted by
Friday, August 20th, 2010 10:52 pm

After thinking about ways to play as the hero and using enemies as weapons, I decided that I would make the player a villain who summons and sends out minions to attack the AI-controlled hero.

I created a mock-up of the UI:

UI layout

You can see that the hero’s status is listed at the top, and the player can see how many resources are currently available, along with what minion types can be produced. They will have different costs and varying abilities. Or, at least I’m planning that they will now. When the deadline looms, I might have to limit the variety.

You can also see the world map. I didn’t spend too much time drawing out everything, but the basics are there. The hero is visible and moving around the world, searching for weapons, health, dungeons, and your castle. There will be obstacles, such as trees, mountains, and water. There will be towers/dungeons. Whenever a tower/dungeon is cleared, the hero gains access to new areas. Eventually, the hero will find your castle, and you’re done for.

Unless, of course, you can get your minions to do their job, hunt down the hero, and kill him first!

I mocked up a close-up of that first area as well:

More prototyping

The star is a weapon upgrade. The heart is health. The barrel/spindle thing is supposed to be the tower. Circles are obstacles. I moved the man around, imitating what I expect the AI should look like. In doing so, I realized that I needed to figure out what visibility the hero will have. It wouldn’t be right for him to make a direct line to the castle. He’d have to explore, so I think he’ll have a fog of war to deal with. He’ll normally be in exploration mode and can see a few squares around him in any direction. If he spots a location with a weapon, health, dungeon, or castle, he’ll switch to “Move me there in the fastest way possible” mode. If he encounters an enemy, he’ll go into Fight mode, unless he has low health, in which case he’ll be in Flee mode.

I also realized that I needed to decide what happens if he sees a target, starts moving toward it, but spots a new target on the way. Should he move to the new target? Should he ignore new targets? I decided he should have a queue of targets, and then I realized a prioritized queue would be best. If he sees a weapon upgrade, he’s going for it first. If he spots health, he’ll only go to it first if his health is low. If he has perfect health, he’ll ignore it. Towers/dungeons/castles will be the last targets he’ll go for. This way, if he has low health, sees a weapon upgrade and a tower, he will head towards the weapon. If he then sees a health upgrade, he’ll go to the health upgrade first, then go back to the weapon, then head to the tower.

But what should the player be doing? I want the player’s main action to be clicking on locations to place enemies for the hero. At the top of the screen, you’d click on the enemy you want to purchase, then you’d click on the world map to place the enemy. Obviously you shouldn’t be able to overwhelm the hero with enemies right away, so your limited resources would stop you. Also, do I want the player to be able to place enemies anywhere, or should they only be placed in specific areas/spawn points? If the player can place the enemies anywhere, then the hero is simply going to be fighting them right away. If, however, there are going to be specific spawn points, such as the tower/dungeons, then the enemies will need to explore and find the hero, and it gives more importance to the fact that the hero is not only getting to new areas but also eliminating your spawn points whenever a tower/dungeon is cleared.

With a few hours of prototyping, I think I understand my game design that much better.

Prototyping and Ideas

Posted by
Friday, August 20th, 2010 8:52 pm

It’s time to prototype some ideas! I have a chance to play with my new barrels and hearts!

Prototyping!

But let’s take a step back and try to come up with some ideas. Assuming you play as the hero in the game, what are the various ways you could use enemies as weapons?

1) You could use the enemy’s body as a projectile. Your attack might send Enemy A flying, but when A hits B, B is hurt. Maybe A is immobile, especially if they are somehow stuck together now, as below:

Enemy's body is a projectile

2) You could force the enemy to use its own projectiles, which happen to be damaging to all entities in the game, including other enemies. Somehow, you have to provoke the enemy into attacking. In this example, you can see that the enemy throws out its spines, leaving it naked and vulnerable. It would probably need to head home to reload, and the other enemies in the vicinity were killed.

Force enemy to use projectiles

3) You could pick up the enemy, causing it to panic and flail. Until it can get itself free from your grasp, you can move it close to other enemies and let it destroy them.

Pick up enemy and let it flail

4) You could use bait to lure enemies into combat with each other. When they see the steak in this example, the two enemies can’t help themselves. They love steak! Unfortunately, only one of them can have it, so they end up in a dust cloud. Only one will survive. And get steak.

Force enemies to fight over bait

5) You could take control of the enemy in various ways. First, you could attack an enemy, bring it under submission, and train it to fight for you. It’s kind of like a Pokemon or the monsters in Rune Factory, if you’ve played that one. Second, you might have the ability to control an individual enemy’s mind or take possession of it’s body. It’s kind of like the game Space Station Silicon Valley for the N64. Third, maybe the enemies all follow whoever holds a certain token or item, like a wand or staff. If you are in control, now the enemies are yours to command! Fourth, you can find a way to mount and ride an enemy. If you can do so, you can then use it to ram into other enemies.

Take Control

So these are some of the ideas I have running through my head. Even though I’ve been thinking about sending enemies after an AI hero for much longer, I’m starting to like the mechanics listed here. Any thoughts?

Theme is Enemies as Weapons

Posted by
Friday, August 20th, 2010 7:34 pm

I was hoping that “Enemies as Weapons” would be the theme. I normally do not think about game ideas or concepts before the compo starts, but this time, I couldn’t help but think about how I would approach this one.

In Super Mario Bros, it’s common to use Koopa shells to take out enemies, so I tried to think about how the hero could somehow change the state of a foe to make it harmful to its allies. Could you pick them up, which causes them to lash out? Could you simply hit one, which makes it do something to protect itself instinctively, but its defensive weapons happen to be harmful to enemies as well?

But then I thought: what if I allowed the player to generate enemies for an AI hero? Imagine having a bird’s eye view of a world, and you can see the hero approaching your domain, but you can select an appropriate type of enemy, create it, and send it to meet the hero. At first it might be easy, but the hero has multiple lives, so you’d have to send more and varied enemies to stop him/her.

I liked the idea of generating enemies to go after an AI hero. I’ve never had very interesting AI in my previous games, but I’ve recently been reading “AI for Game Developers” and was getting a bit inspired. Ludum Dare is usually a chance for me to learn something new, so maybe this time around I’ll be learning how to implement some AI capable of avoiding obstacles, evading other entities, and figuring out how to get through the world.

Or, I should realize I only have 48 hours to implement the entire game and I might not want to spend too much time figuring out something as huge as advanced artificial intelligence. Simple AI is sometimes good enough.


All posts, images, and comments are owned by their creators.

[fcache: storing page]