About GBGames (twitter: @GBGames)

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

Entries

GBGames's Trophies

The Heartless Cookie Terrorist Award
Awarded by Croupe Aardvark
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

A Giant Weapon Development Time Lapse #LDJam

Posted by (twitter: @GBGames)
Monday, April 20th, 2015 10:00 pm

I created a time lapse video of my development of “A Giant Weapon”:

Once again, you can find the game, albeit incomplete, at http://ludumdare.com/compo/ludum-dare-32/?action=preview&uid=251.

Submitted but Disappointed #LDJam

Posted by (twitter: @GBGames)
Sunday, April 19th, 2015 10:48 pm

When I started this weekend, I thought, “I’m going to make a complete game that’s enjoyable to play.” I wanted the Button Masher Bros to play my game and enjoy themselves.

Towards the end of the deadline, I was thinking, “I might be able to get the bare minimum of something that could be called a game in.”

And by the end, I didn’t even have that.

I submitted my project, A Giant Weapon, which you can find at http://ludumdare.com/compo/ludum-dare-32/?action=preview&uid=251

LD #32 A Giant Weapon

You click to tell your soldier to move, and you try to avoid the monster. There’s a game over screen when you get killed.

You can attract the monster’s attention by clicking on it.

Unfortunately, I didn’t add the reason why you would want to do so: to destroy your enemy’s camp.

Fighting bizarre and non-bizarre bugs slowed me down, but I did not do anywhere near as well as I would have liked.

I wanted to get something controllable by 12 hours in, and it took me almost 25 hours. Then I didn’t have anything resembling playability until the last couple of hours, and then I ran into trying to figure out what AI bugs and graphic offsets issues I had.

I watched my timelapse, and I can see that I didn’t take my own advice about not spending too much time on the art. I think the majority of my efforts involved getting the sprites right.

Oh, and the weird bug that caused bizarre issues with the buffer not updating? I think it turned out to be a glitchy system. Once the computer crashed, and yeah, I needed that to happen near the deadline, everything ran fine for the remainder of the compo. I should have rebooted right away. That problem cost me way too much in time and stress.

I’m pretty disappointed and deflated. It’s been two years since my last Ludum Dare compo, and I feel like I’m not any more capable as a game developer than I was then.

I know I have another 24 hours for a Jam entry, but I planned to dedicate only the past 48 hours to Ludum Dare and I will not be able to do much more.

All that pity aside, I did like my idea, and I think the game in my head would be enjoyable if I could have developed it. A bumbling giant monster that gets easily distracted is chasing the player who is trying to lead it to the enemy camp without getting killed in the process. Part of the game play was to get the giant to move in one direction while looking another, causing it to trip and fall. If it falls on top of a building or other enemy structures and units, they would get destroyed.

The monster and the player would each be able to pick things up and throw them. The player would throw things to attract the attention of the monster, while the monster would be aiming to kill. This feature got cut.

Towards the end, I even created quick art to create a building, including rubble, but it never made it into the game.

I’m 12 Hours Behind Schedule and Have Bugs #LDJam

Posted by (twitter: @GBGames)
Saturday, April 18th, 2015 8:57 pm

I wanted to have something playable or at least controllable within 12 hours. I did it within 25.

LD #32 - Controllable Character

You can now click on the ground, and the soldier will move assign itself the goal of moving towards that point.

The monster is still just placeholder art with basic AI.

There are bugs, though.

For some reason, when I run my game, the loading screen gets inconsistent for me. The mouse cursor freezes on the screen on the main menu screen, in both of these cases, I see the screen look like it is locked, or flickering between two images that should not be on the screen. For instance, my loading screen says “Loading resource 8 of 14”, and it bounces back and forth between 8 and 9, which isn’t happening in my code, which makes me think that there is a problem with rendering.

Animation looks weird once I enter into the game, and so I have to restart the program and hope that I don’t see the issue again.

I tried it in another game which has more or less the same code, and it seems to work fine, so at least that rules out an expensive hardware issue.

But the bad news is that I have a ridiculously difficult to diagnose bug in my Ludum Dare project, and there is less than 24 hours left in the compo. There’s also a weird rendering issue in which my terrain is showing gaps behind it as I move about the world. B-(

And I still have a ton of work to do.

Also, I realized that with all of the struggles, I have been forgetting to commit my changes. Here’s the complete commit log:

$ git log
commit 35fabffff77407ce6a66a146ff297df254c5626e
Author: Gianfranco Berardi
Date: Sat Apr 18 20:29:47 2015 -0500

A lot happened; can control player character, have basic AI framework.

commit cc662aa500df16c01dae56ac3a419a64e0448c22
Author: Gianfranco Berardi
Date: Sat Apr 18 10:32:08 2015 -0500

Fixed camera; added grass, monster placeholder, and boulder.

commit 4656623ca6dfc9fc2e68620a7ec5056e171276e1
Author: Gianfranco Berardi
Date: Fri Apr 17 23:27:09 2015 -0500

Initial commit for LD#32.

Early on, I realized that my efforts were all over the place. I wanted to work on adding a playable character, and I ended up making some terrain instead. Nice, but not as important.

So I actually put together a quick design document, inspired by Hybrid Mind’s Ludum Dare 29 timelapse.

Holy cow, it made a huge difference! I was able to dump everything out of my head, realize there were some gaps, recognize that I had a scope issue, and also prioritize whenever I identified a new problem or bug to fix.

It also helps me see my progress. It’s easy to get demotivated when the clock keeps ticking, but seeing all of the completed work reminds me that I’ve made a dent, and it also helps me keep focused because I want to get more of those planned tasks crossed off my list.

Of course, I’m always realizing something that needs to be added, so the list will get larger. I’m not sure if more planning or more doing would have revealed that information to me sooner.

Breakfast and Even More Design #LDJam

Posted by (twitter: @GBGames)
Saturday, April 18th, 2015 9:18 am

Good morning!

I had some oatmeal with peanut butter and raisins, with some cinnamon and nutmeg. I also had a small glass of orange juice and the smoothie my wife made.

LD #32 - Breakfast the First

When I drank the smoothie, I noticed that the side of the glass had this very neat texture:

LD #32 -Potential Texture

I might tweak the color and turn it into the landscape in my game.

I decided that there will be a player character represented in the game. It adds risk, because if the monster catches up to you, you lose.

So, who are you? I originally envisioned some spoiled brat who wanted to get revenge on the people in his town. Maybe that cool neighbor with the better treehouse will think twice the next time he brags about how much better it is than yours.

But then I took a shower, where we often have our best ideas, and I thought of an outnumbered military unit desperately seeking a way to tip the balance in their favor. Finding a monster to do their fighting for them seems like a good alternative to dying and losing the war.

Which also gives the player a reason to worry about the monster getting killed before it can do its damage.

There’s 34 hours left in the compo. I better start planning.

Art for “A Giant Weapon” #LDJam

Posted by (twitter: @GBGames)
Saturday, April 18th, 2015 2:11 am

After I got a working build of my project, which didn’t take too long, I started doodling some monster faces.

LD #32 Giants And Ogres

I love how goofy the faces are. I want the monster’s face to be expressive so that it can give clues to the player about what it is thinking.

But just how giant is this character going to be? It can’t be so huge that you can only see its feet. I suppose it would cut down on asset creation, but I envision a very emotive monster which requires a visible face. I want it to be seen as a huge monster, so being merely a head taller than all of the other characters in the game isn’t enough.

But what if there is no player character? That is, the player can interact with the world without having a representative in the world. Then the monster can fit on the screen, and any characters can be incredibly tiny. After all, their faces aren’t as important as the fact that they are running from a marauding monster coming through town.

Maybe they are very tiny stick figures in comparison.

I’m not completely sold on the idea of having no player character. I like the idea of the player running around, trying to get the monster’s attention while avoiding the chaos and destruction.

LD #32  Moving Monster On Screen

That mock up image of the monster now moves about the screen on its own, although the AI is basically “bounce off the walls” and will need to be replaced.

I realized I was falling asleep as I was coding, so I think I’ll go to bed.

Weapon Ideas #LDJam

Posted by (twitter: @GBGames)
Friday, April 17th, 2015 10:44 pm

Ok, it’s two hours later. I had leftover green olive and onion pizza for dinner:

LD #32 First dinner

And my wife came home from an event with a red velvet cupcake for me:

LD #32 Red velvet cupcake

I came up with a number of ideas for this theme, especially as people on IRC bounced quite a few around:

  • The Bourne Identity: remember that scene when Bourne used a rolled up newspaper to hit the other guy? And then he stabbed him with part of a pen that was lying around? A game with a lot of random stuff that requires the player to be resourceful and clever.
  • Infectious Agent: a restaurant owner is trying to poison the right spy without killing customers.
  • Kite a Giant: lure a large monster toward a city/castle/friend’s cooler treehouse/etc, while ensuring it doesn’t get bored or killed.
  • Sunlight Focused: kill a neighbor’s flowers with beams of concentrated sunlight in order to win the local horticultural contest.
  • Food Fight: a cafeteria featuring students with ridiculous weapons, such as mashed potato guns and banana missiles.
  • Toys: inspired by the Robin Williams movie, in which wind-up toys fight (I recall this is a multi-decade old game already).
  • Information Warfare: choose which important papers to shred in order to leak secrets.
  • Books: check out books from a library before your coworker does to prevent him/her from learning and getting that promotion.
  • Excruciatingly Severe Body Odor: your odor is repellent. Make use of it!
  • Numbers vs Letters: it’s a battle between the higher level and abstract thoughts!
  • Shapes: an RTS inspired by the different shapes in Flatland.
  • Monopoly: use market pressures to defeat your competitors.
  • Avalanche/Cave-in: cause a disaster to trap other people.
  • Cactus vs Balloon: inspired by some art in my room.
  • Nanotechnology: tiny invaders that destroy your enemies from the inside out.
  • Mind Control: make your opponents do self-destructive things.
  • Fear: scare people towards disaster (for them, obviously).
  • Vampire Hunter: use blood disease to kill vampires.
  • Eggs: birds hatch and peck at opponents.
  • Plunger: you’re a plumber, and you have to save the day.
  • Hopes, Dreams, Aspirations, and Fears: you work in HR at Large Corporation, Inc.

I also tried to come up with a list of potential weapons:

  • Gravity Wells
  • Vacuum cleaner
  • Air guns
  • Summon beings, such as demons
  • Weather
  • Ever increasing mass
  • Sex appeal
  • Paper cuts
  • Bullying
  • Embarrassment
  • Candy
  • Innocence
  • Music
  • Laundry (dirty or otherwise)
  • Humor
  • Banana peels
  • Kisses

Out of all of them, Kite the Giant is the one I keep thinking about. I like the idea of indirectly influencing a destructive force.

I think I’ll go ahead and call it. That’s my game idea, and I’m moving forward with it.

An Unconventional Weapon #LDJam

Posted by (twitter: @GBGames)
Friday, April 17th, 2015 8:12 pm

The theme has been announced, and it’s An Unconventional Weapon.

I think I’ll start by exploring that theme quite a bit, and I’ll get back to you about what I’ll do. I’ll think about this theme over a quick dinner.

My goal will be to have something playable, or at least controllable, before the first 12 hours are up.

Since I’m not using something like Unity or Unreal Engine, I won’t be able to whip something up in mere moments, but I know I’ll be able to leverage some of my own code as I have in the past. Each Ludum Dare gave me something new to make use of.

My strategy for this Ludum Dare is to doodle a lot whenever I’m not programming. I’m not very good with digital art programs, but I can put pencil to paper decently enough, and I can just digitize it after the fact.

I’m In

Posted by (twitter: @GBGames)
Friday, April 17th, 2015 7:44 pm

I’ll be participating for the first time in two years, when I made a simpler-than-I-would-have-liked game for Ludum Dare #24: Evolution.

Before that, I participated in #11 (Minimalist), #12 (The Tower), #13 (Roads) #14 (Advancing Wall of Doom), #15 (Caverns), #18 (Enemies as Weapons), and #20 (It’s Dangerous to Go Alone. Take This!). I also have a number of MiniLDs under my belt. I’ve gained enough experience to attain Veteran status, so I get +1 to the category of my choice, I think.

I’ll be using libSDL2 and related libraries, NFont, Gimp, Audacity and SFXR, C++, vim, and my Ubuntu system for a development environment.

My past self posted a handy checklist on my blog: http://gbgames.com/blog/2012/08/pre-compo-checklist-for-ludum-dare-ld48/ Thanks, Past Self!

As always, I’ll try to cross-post my progress both on the Ludum Dare website and on my own blog.

Oh, and here’s my office pic:

MyOffice-LD32

Good luck, everyone! I’ve missed you.

Development Timelapse, or The Evolution of My Game

Posted by (twitter: @GBGames)
Monday, August 27th, 2012 4:51 am

48 hours of game development has been condensed into a little over a minute and a half of video.

It looks as if a lot of the creating parts happened in small bursts of a few seconds, done around IRC and eating. B-)

FINISHED!

Posted by (twitter: @GBGames)
Sunday, August 26th, 2012 6:20 pm

It is done.

It doesn’t have nearly as much as I wanted. I had design notes for different enemies with different movement patterns, weapon types, power-ups evolutionary upgrades, and bosses.

What I do have is a basic enemy that gets more and more health and moves faster and faster in each wave. You have three lives. And each killed enemy gives you 10 points.

It has some basic sound effects.

Evolution Game

And you can get the files here:

Windows .zip 5.2 MB
Linux tar.gz 4.7 MB
Source .zip 4.0 MB

And now, I will celebrate with a peanut butter covered chocolate chip cookie.

Peanut butter covered chocolate chip cookie

Bug-killing Game Play

Posted by (twitter: @GBGames)
Sunday, August 26th, 2012 2:10 pm

I managed to get a lot accomplished in a couple of hours.

– get the player’s character in the game
– make it controllable
– add obstacles (most likely boulders)
– make collisions between the player and obstacles deadly
– make collisions between bullets and boulders result in bullets disappearing
– add an enemy
– make collisions between bullets and enemies result in damaged enemies
– make collisions between player and enemies result in killed player
– create a wave of enemies
– create a way to modify the wave of enemies so each enemy evolves in some way

Right now, you can shoot enemies as they approach, and when they die, they become harmless and visibly destroyed. If you crash into an enemy that is still alive, you both die.

Evolution Game Play

Enemies are mindless right now. They simply move forward in a straight line to the left. While I have a bunch of random enemies that looks like a wave, I don’t really have waves as a concept in the game. And with less than four hours left, I don’t think I’ll be adding lots of visibly different enemies and power-ups. We’ll see.

Oh, and my wife was nice enough to bring me something to snack on.

Got any gwapes?

Grapes

Sub Sandwich and Enemies

Posted by (twitter: @GBGames)
Sunday, August 26th, 2012 11:53 am

I woke up with a sore back. I was lying down on the floor with my legs up on the ottoman since that’s supposed to help your muscles relax if you do it for about 30 minutes. Then I went back to bed, and I didn’t wake up for a few hours. Then it was time to go to church with my wife, and we had lunch:

Planet Veggie Sub sandwich

That’s a Planet Veggie from Planet Sub. It has provolone, cheddar, fresh red peppers, artichoke hearts, sun-dried tomatoes, and a tangy olive spread. I washed it down with lemonade.

I wish I can say I’ve made progress, but sitting at the computer has been incredibly uncomfortable. But lying on the floor seemed to have helped, so I’ll be back at this project today.

A reminder of what I’m doing:
– get the player’s character in the game
– make it controllable
– add obstacles (most likely boulders)
– make collisions between the player and obstacles deadly
– make collisions between bullets and boulders result in bullets disappearing
– add an enemy
– create a wave of enemies
– create a way to modify the wave of enemies so each enemy evolves in some way

There’s a little over 6 hours left in the compo. I can do this.

Deadly Boulders

Posted by (twitter: @GBGames)
Saturday, August 25th, 2012 8:57 pm

The player can control the tank, including firing bullets. I’ve also added boulders.

They are randomly placed in the environment, and when the player passes them, they are removed from the game. If there are no boulders left, more are generated.

Collision between the player and a boulder is deadly, as demonstrated by the randomly controlled tank in this video:

I had some difficulty with handling bullet collisions with the boulders. Right now, they shoot right through them. I want them to disappear. Boulders are not affected by bullets. I have plans for boulders interacting with enemies and explosives, though. If an enemy hits a boulder, I think it would make for an interesting mechanic if the boulder starts to move towards the player. Explosives should be the only thing that destroys boulders.

My current plan:
– get the player’s character in the game
– make it controllable
– add obstacles (most likely boulders)
– make collisions between the player and obstacles deadly
– make collisions between bullets and boulders result in bullets disappearing
– add an enemy
– create a wave of enemies
– create a way to modify the wave of enemies so each enemy evolves in some way

One thing I was hoping to use was my component system, but so far I’ve represented bullets and boulders as positions, along with constants representing their collision radius. It’s working well enough.

Once I get bullets working right (I’ll need that collision detection working for the enemies anyway), I can finally start working on the first enemy so I can get around to doing some evolving.

A Second Dinner Today?

Posted by (twitter: @GBGames)
Saturday, August 25th, 2012 5:37 pm

So while the pasta was ok, apparently I was still hungry.

Cheeseless pizza

As for the game, I realized that my code that wraps libSDL and allows the rest of the code to be easily unit tested has a problem. It only knows if a key is currently being pressed or is currently released. It has no easy way to tell if the key has just been pressed or released.


case SDL_KEYDOWN:
{
m_keyboardState.setKeyDown(event.key.keysym.sym);
}
break;
case SDL_KEYUP:
{
m_keyboardState.setKeyUp(event.key.keysym.sym);
}
break;

Typically you would check SDL_KEYDOWN/SDL_KEYUP events in the event pump, and if those events occurred, you could handle them directly. Since I wanted my code to be unit tested, I created a HardwareLayer that wraps all of this functionality, and I used a KeyboardState class (that’s m_keyboardState) to track key status. Then, in my game, I can check the keyboard state for individual keys to see if anything is being pressed.

What this means in practice is that SDL is already creating an event for a key press/release, but then I ignore the existence of the event, tracking only the status. If I want to know if a key has been pressed this update, I essentially have to write code to track the state of the key and do a few if statements to know if I’ve already processed it or not.

But why do that when SDL has already done the work for me?

So I’m modifying my keyboard state to track not only the status of a key, but to also track the fact that it has been pressed or released this update. Then my game can check for this list of events, do whatever it needs, and at the end of the update, the keyboard state will clear out the list.

And this is why LD is fun.

Pasta Power and Designs

Posted by (twitter: @GBGames)
Saturday, August 25th, 2012 3:31 pm

My back started to hurt, so I tried resting. I even retired to the bedroom, but I brought a notebook and pen with me.

Pro-tip: pens stop working if you are writing on a notebook you’re holding out above you as you lie in bed.

Anyway, I realized that it was getting late, so I had a quick dinner of leftover mostaccioli:

Pasta Power

I have a couple of pages of notes, and I’m aware that I could easily take this “simple” game and evolve it into a monster.

But those notes are details. I’m sticking with my plan, and I still need to make the tank controllable by the player before doing anything else.

The Player’s Tank

Posted by (twitter: @GBGames)
Saturday, August 25th, 2012 12:31 pm

I now have a tank capable of moving up and down and firing bullets.

That footage is based on the random movement I programmed in. It’s not player-controlled yet, but at least I can leave it up to take a break and be sure that the timelapse is a lot more interesting.

My current plan:
– get the player’s character in the game
– make it controllable
– add obstacles (most likely boulders)
– make collisions between the player and obstacles deadly
– add an enemy
– create a wave of enemies
– create a way to modify the wave of enemies so each enemy evolves in some way

[cache: storing page]