4 Hugues Ross - Blog: Game Jam
Hugues Ross
Showing posts with label Game Jam. Show all posts
Showing posts with label Game Jam. Show all posts

4/7/15

To the West Postmortem, and 10 lessons for next year

Note: For those uninterested in reading too much, click here to scroll to the list of things I learned this time around.

It's a bit overdue, but here's a postmortem for my latest 7drl entry, To the West.
For those of you who haven't played, To the West is a roguelike that discards the typically 'vertical' gameplay of a roguelike where you go down a dungeon floor-by-floor, and instead replaces it with a long 'path' of naturally terrain, scrolling horizontally. While the game is not super-great, I actually think the jam went rather well, all things considered. My game has been reviewed twice, as far as I can tell, and while the reviews weren't very positive I still feel happy with the result. Here's why:

What Went Right

The feedback I received was very close to my own reaction to the game, and I like that.

One of my big goals in with the game was to have an engine that would allow me to create interesting things for players to encounter, and it seems like I was able to accomplish this, at least on the engine side. Of the positive feedback in the game, most of it related to the variety, and the fact that there were some interesting and unique things to be found. One of the reviews mentioned liking the Potion of Lakes, and item that forms a lake wherever it lands. The other mentions liking the occasional pieces of flavor text that vary from area to area.
I also really like the negative feedback. Much of it reflects problems and frustrations that I personally had, and parts of the game that I knew weren't very good. This is actually a good sign, because it means that the premise I was working with was sound.


What Went Horribly, Horribly Wrong

Unfortunately, not cool bugs like this one.
BUGS!

This game is an incredibly unstable kludge. In fact, I'm amazed it runs at all. About halfway through, the engine began to collapse under itself in a veritable torrent of segmentation faults. Turns out, when you rush and play willy-nilly with your pointers, bad things happen! You'd think I'd know that by now, but apparently not. Anyway, the result was the loss of multiple cool features, as well as hours of good development time. The faction system that allowed for interesting interactions between different units had to be totally scrapped, which is why there are no sheep, mountain dwarves, or other friendly sorts in the world anymore.  On top of that, the lost time meant that I had significantly less time to polish and balance things at the end. I can actually still think of a few major issues with the game, including a game-breaking crash that no one else seems to have noticed.

My other big issue during the week was in fact balancing. At the end, I must've spent close to 5 hours playing the game over and over, constantly tweaking numbers. In the end, I had to stick to a beatable game, but the result was the loss of a lot of interesting strategic challenges and scary early-mid game fights. Instead we just have a boring grind that ends in an interesting but too easy boss fight. With another day, or even a few more hours, I might've had a good shot at making a well-balanced game. However, I simply ran out of time. It didn't help that I had some interesting variety, but there wasn't enough content to keep the game interesting.

The last issue, but certainly not the least of them, was the porting. My first issue was trying to figure out how to cross-compile a console application to Windows. It *should* be so easy, but you can't search for a solution on Google. Due to the nature of the subject, you'll only find tangentially-related topics, making it much harder to learn the process. I then had to try pdcurses, which can handle curses output to a proper window. Unfortunately, this comes with certain issues of its own, which delayed the windows release for way too long. It wasn't until someone left a comment here asking about it that I found the motivation to sit down and fix all the issues and get the build out. On top of that, pdcurses has limits that I didn't expect from the windowed version. (For more information on color limits and such in curses, look here) I don't know why the version that renders text with SDL has a 16-color limit and can't render bold or blinking text, but it's pretty ridiculous. I've heard tales of a patch that removes these limits, but I haven't had time to explore further. The result was a working but half-baked colorscheme that pulled my review scores even lower. (Also, there's the bug where for some reason the cursor won't move in the SDL version, so I had to rewrite parts of the tile targeting code to match. That was extra-dumb).


Lessons Learned

I learned a lot, so this list may be incomplete. That said, here are 10 lessons that I learned during 7drl, mostly the hard way:
  1. The panel curses library is pretty great, but next time I need to be more careful how I use it.
  2. There are a few other curses libraries/techniques that I ought to learn, especially scroll.
  3. With enough care and diligence, it's actually possible to get some fairly decent performance out of curses. I can make it pretty snappy if I'm more careful about my draw calls!
  4. If the jam is 7 days or longer, I need to spend more time on architecture and setup. Some of the issues I had might've been better avoided with a nicer structure, and the small amount of architectural work I did payed off nicely.
  5. I must stay consistent to my coding style, no matter how short a jam is. If you actually look at my code, it's a mess of naming conventions, which probably slowed me down considerably.
  6. In retrospect, switching to NeoVim mid-jam might not have been the brightest idea.
  7.  I should get all of my tech working on all of my target platforms pre-jam, even if I already know they'll work later. I should also relese binary demos if time permits it.
  8. Before next 7DRL, I should put together a small set of useful utility functions that will make my life easier during the jam. Logging would be extra-useful, as would some form of color palette management.
  9.  People like interesting and varied content, and I should reserve at least a day or two for just content building. However, I shouldn't start too soon, or it might end up making more work for me in the long run.
  10. Valgrind, everything, always.

I enjoyed last year's 7drl, and I loved this one even more. I haven't made anything great so far, but I think I'm improving well. Hopefully, next year's entry will be really great!

If you read all the way here, then enjoy this little announcement: To the West isn't over! I really like this idea, and I want to see it reach it's full potential. Thus, I'm going to continue working on it until I feel like it's done and polished. Obviously, this will require me to rewrite all of the code, so don't expect much anytime soon, but I figured this was a good time to say it.

3/14/15

7DRL 2015: Done!

It was a bit rough towards the end, but I finished. This is going to be a short post, but I'll be putting up a longer postmortem of the whole thing soon. In the mean time:

Development Album: here
Main Posts: 0, 1, 2, 3, 4, 5, 6, 7
Code: here
Postmortem: here

EDIT:
The Windows build is (finally) available here!

EDIT 2:
The postmortem is done: here

3/11/15

7DRL 2015: Day 4

I have created the next indie hit: Dragon not-dying simulator 2015

All silliness aside, I've made some pretty decent progress. Sonce Monday, I've made the scripting side of things significantly more powerful, and I also finished up the base monster ai. Any monster-specific ai quirks occur in scripts, which so far work pretty well. I had some bug issues, but they seem to be sorted out now. I added levelling on Tuesday, although it needs to be fleshed out more. I finished the effect system today, which is why the dragons are basically walking tanks now. The effect system is designed to be very general and powerful, so that I can do quite a bit with it, such as altering terrain, spawning enemies, and more.

The data-driven setup is really paying off now. I have 7 biomes and 12 creatures already!

3/9/15

7DRL 2015: Day 2

"Huh? Where's my day 1 post?" is what you might be asking right now. That, or maybe "Since when was 7DRL running?"

That's kinda my fault. I was busy up until Friday afternoon, then 7DRL started on Saturday and it felt too late. I decided to try and avoid spamming this blog while that's going on, so I'll be making 4 posts: One for day 2(this one), one for day 5, one at the end, and one with a postmortem. Last time this happened, I made 7 posts in a row about it and they were all incredibly short. This time around, I decided to post daily progress on the official 7drl site, and then make an occasional post here with a bunch of updates at once. With that said, here's the story thus far:

A screenshot from day 1, showing the biome generation at work.


I decided to make a bigger, more varied game than last time, and came up with an interesting gimmick of sorts: There's only one map, and it's as wide as the screen, but it's also incredibly long. We're talking ~200x longer than its width. The game takes place outdoors, eschewing the traditional tight corridors and rooms for open biomes. As you travel to the other side of the map, enemies will mostly be determined by the biome and scale in level based on your progress. In addition, I've integrated Lua into the project in hopes of allowing more interesting upgraded enemies, giving them special traits and abilities.

A new art style that I'm playing with. I'm not too fond of it, but it increases mob visibility by a lot!


I've named the game To the West, after its main premise, and I've made a simple backstory:
The foul warlock Mochus has stolen the Band of the Stars, bringing it to his fortress deep in the western mountains. Journey to the western lands, find the Band, and slay this dark sorceror once and for all!
This jam is a great breath of fresh air after the months of schoolwork, although it's seriously hurting my ability to do March's one game a month challenge. Oops.

Here are the 7drl.org posts for this game:
  1. Day 1
  2. Day 2 
  3. Day 3
  4. Day 4
  5. Day 5
  6. Day 6

Lastly, I've gotten back into the old habit of making lots of screenshots during jams, so an album will be going up at the end of the week.

9/16/14

DFEngine Update 7

Changelog:

  • Removed Tweens
  • Upgraded the collision handling. Scripts can now be called when an object comes into contact with another, maintains contact, or loses contact. This should make some things faster and easier than they were before.
  • Rewrote the code for creating PhysicsComponents. It's far more intuitive to create them in scripts now. Also, you now select the shape on creation. Currently the only shapes are Box, Sphere, and Capsule. However, I'll be adding support for custom models shortly.
  • Started working on raycast functions. Eventually, this will let you check if the mouse is over a particular object, which will be great for FPS games.
  • Moved the model drawing code to its own place(again). The custom drawing functions are back, but now they can draw anything.
  • PhysicsComponents now share their angular factor with scripts. In layman's terms, it means that you can now control how objects rotate on each axis.
  • Transoformation data is now stored inside the Entity class, not the PhysicsComponent. This means that you can put a GraphicsComponent onto an entity without forcing it to have physics as well. You can also now access rotations as either quaternions or Euler angles, depending on your preferences.

I always love a hefty changelog. The game jam did a lot of good, and it inspired me to work on DFEngine quite a bit. Unfortunately, I had quite a bit of homework, and didn't manage to finish the game I was making, but at least I was still very productive! There are only two downsides to this slew of updates: First, Tweens were removed. It needed to happen soon, since they were always causing tons of issues, but I don't yet have a suitable replacement. That's probably the next thing that I need to do, before anything else. The other downside is that the new PhysicsComponent creation code doesn't let you do as much as the old one. To be fair, I mostly removed the features that won't often get used, and it makes things much simpler. However, I still need to make sure that these features can still be used somewhere. I haven't checked yet, since the change was so recent, but it shouldn't be hard to replace anything that I've removed. Once I have both of those issues cleared up, I'll probably start working on a basic editor. It's one of the things that I've been missing for a while when using this engine, and I think it'll help me get interested in making games again.

9/13/14

Autumn Game Jam, 24 hours in

Like the last jam, I'm going for something simple. DFEngine works, but it's not at a point where I feel like I can do a ton with it. I think the biggest reason for this is that it take s a while to get things done still. Things are slowly getting better on that front, but it definitely places a big restriction on me when I'm jamming.

Here's my game so far, which I've affectionately named 'ANGRY SUN AAAAAARGHHHH!!' The sun has gotten tired of setting, and now it's taking vengeance on humankind. So far, there's no way to win or lose, just fire big molten rocks at random civilians and rack up points. I might keep it that way.

9/12/14

Autumn Game Jam - Surprise!

Out of a mixture of business and laziness, I've neglected to mention that this weekend is a game jam at all! As always, I'm participating. This means that I plan to delay my update posts until this Sunday, after the jam ends. This will not only give me more time to write them, but it'll also give me a chance to discuss any updates to DFEngine that I make during the jam.

For now, I'm tired so I'll just post the theme: Twilight

7/26/14

Summer Jam, Day 2 Recap

I didn't get as much as I'd like done today, but I should be able to wrap up in the final 13 hours of this jam.

This is what happens when the Hotgod is
angered. You should have listened!
Today, I fleshed out the mechanics a bit by adding levels and a loss state. As levels progress, you get more points but the meat pours in faster. Dropping meat angers the Hotdgod, while clearing levels and juggling meat pleases him. Making the Hotgod too angry now ends the game, and I made a game over screen. It's not in yet, but I should have plenty of time to add it. I also added a simple progress bar to show level completion.





The current title screen. I've decided that th
 Hotgod is the one producing all
of this.....produce.
Overall, I have four more things that I want to do before I run out of time:

  1. I need to add in the title and game over screens, add highscores(this'll be easy, since I already have code for that lying around), and allow the player to restart the game.
  2. The game is currently silent, so I should add in some sound!
  3. If I have time, showing the player an instructions screen prior to starting the game would be nice.
  4. I need to name this game. The original title was 'Grill Bounce,' but it's a bit too plain for my tastes.
Beyond that, I pretty much have the game covered. It's simple, but what do you expect from a game jam entry? 

7/25/14

Summer Jam, Day 1 Recap

Just as I said in my last post, I'm doing a game jam! I ended up with the theme cookoff, which has led me to a very strange game.

The weird face made of hotdogs in the
lower-left corner is the Hotgod. Do not
anger him.
Currently titled 'Grill Bounce,' this is a game about bouncing meats (mostly hotdogs right now) across the screen with an outdoor grill. What started as a relatively innocent and normal game vaguely inspired by Bit.Trip Beat has become a bizarre and frantic game about making grilled offerings to appease the Hotgod. This involves keeping an infinite number of meat products aloft (and also grilling them) as they cross the screen. As a bonus, if you can knock one of the numerous bald eagles out of the sky with your hotdogs, you can catch it on your grill, cook it, and toss it off the screen for bonus points. Have I mentioned this game's weirdness enough yet?

A more observant reader might remark that this game's mechanics bear a suspicious similarity to those of Akradion. This is true, although I have copied almost nothing (not counting DFEngine, of course) from the latter. My decision to go with something relatively similar was mostly so that I could play it safe this time around. After all, Akradion is the only game I've made with DFEngine yet, and with such a short time span to work with now is not the time to gamble on my engine's ability to handle varied mechanics. Trust me, you'll see some more interesting stuff coming from me soon enough.

Anyways, It's time for me to bid this game goodnight. 38 hours to go!

3/14/14

7DRL 2014 - Finished!

I'm done!
It's all done!

Head over to the games page for a download link.

3/13/14

7DRL 2014 - Day 6

Why would you even suggest that nefarious deeds are happening in our secret underground laboratories?

Tomorrow is the last day! I actually managed to get quite a bit done today:

  • Use items are in. Drink coffee and eat donuts to restore health!
  • Multi-message viewing is now super simple. I also added kill and lifetime counters to the death screen.
  • Fixed scoring a bit
  • The speed stat is now quite useful, affecting both hit and dodge rates. Luck also improves these, albeit less that speed.
  • I added a bunch of new messages, now that I can show more than one per turn.

Tomorrow will hopefully feature:
  • The rest of the game's content, and an ending of some sort!
  • (Probably) a few balance tweaks.
  • A Windows version.
  • Some extra polish.

7DRL 2014 - Day 5

I've had quite a bit of work on my plate recently, but I got equipment in. There are a bunch of new items that can now be found, and you can also view your inventory and equip/toss things from there. Also, I've set things up to add usable items to the game, although I haven't put any in yet. Enemies will also occasionally spawn on their own now, and I made leveling up give you slightly fewer bonuses as things were getting a tad ridiculous. Today, I'll try and put in usable items, as well as letting the player view multiple messages per turn. Tomorrow I'll try to get the final bits of the game done.

3/10/14

7DRL 2014 - Day 3

I really didn't do much today. I added death, then I added a bunch of new enemies to the game. In theory, the first ~20 levels of the game should have their enemies in now. Tomorrow, I think I'll work some more on items and equipment.

3/8/14

7DRL 2014 - Day 1

Man, I got more done than I thought I would. Let's start off with a screenshot:

As you can see, I've got quite a bit of basic stuff done. you can walk around, there's some basic field of vision work, and levels generation is pretty much done. The game has ~30 levels at the moment, although I may change that later. Tomorrow will probably be inventory work, along with the possibility of colors and enemies. We'll see.

7DRL Begins!

As I mentioned in my last post, I'm going to try 7DRL. It'll probably be a trainwreck, but it'll be fun! I'll try and make a post every day with progress updates.

10/14/13

Game Engine Jam, Days 7-10 Recap

As I write this, the jam's about to end. The past few days were a bit slow, but I've gotten a thing or two done. I've added a basic GUI(All it shows so far is the score), and text rendering works fine.

Speaking of text, I was originally going to use Allegro's built-in text drawing stuff, but it wouldn't work no matter how much I tried. In the end, I just added a new asset type for fonts, and a simple function to draw them. In the process, though, I broke a good bit of asset loading code, and had to do a bit of restructuring. It all works now, thankfully. Anyways, I promised screenshots last time so I'll post a few. The last picture I put up was from quite a while ago, so it's probably a good idea to show some stuff off now:
As you can see, the levels scroll pretty nicely. There's still a bit of work to do
on that, but it's coming well.
The gems on the left side of the level are a trap. Instead of
adding points, they take some away...
A bonus room. You reach it by nabbing the robot in the last screenshot,
rather than just going to the level exit. Also, he gives you 100,000 points
because he's just a good guy like that.
Most of the graphics are just quickly thrown together bits of placeholder art, but I think you can see a pretty big improvement in terms of content compared to the last screenshot I posted.

This jam went really well for me. I got way more done than I believed I could in such a short time. I think I might spend a while updating the graphics next, since right now this stuff looks really bad. After that, it's back to gameplay features.

Finally, I may or may not finish my Games I Play post in time for tonight. If not, expect it tomorrow.

10/10/13

Game Engine Jam, Day 6 Recap

Well, adding a view was a tad bit easier than I thought. It's not too well done, but it works for my purposes. At this point, I'm going to try not to refactor anything until the project is near completion so as not to spend forever constantly tweaking everything. If you're wondering where the screenshots are, I promise to start putting some up with the next update. I've also started working on the GUI graphics, but I'll leave that subject for later.

Anyway, since I've added quite a bit I'll make a quick list of what's been done during the jam:

  1. General tileset import/export improvements
  2. Fixed 'vertical line bug'
  3. Collision Detection
  4. Pickups (Various bonuses to be grabbed for points)
  5. Level exits and ingame map switching (I can now just build levels and easily link them up)
  6. Scrolling Viewport (Levels can now be any size, within reason)
That's a pretty nice list! I've got around one change per day so far, so I'd call this jam a massive success already. With these new changes, I feel like I'll soon be able to spend more time just building levels and adding polish. In reality, I still have a fair bit to program but the project still feels a bit more finite now.

10/9/13

Game Engine Jam, Days 2-5 Recap

The jam's about halfway done, and I've been away for a while. Where's Games I Play? What's up with AMAZE? Hopefully I can answer those questions.

First off, I missed the last Games I Play post(and a day's worth of jam work) in order to dye my hair. The dye came out well, in my opinion. Under some light
I probably should've shaved for the photo,
but I was short on time.
conditions, it almost looks like it glows. Back to the topic at hand, this is also why I didn't get a chance to make a Games I Play post. I'll still write an update on Friday, though. I got quite a few interesting things done on Space Douchebag, so I should still have plenty to write about. 

Finally, progress. It took longer than I'd hoped, but you can now grab pickups for points, and the level exit will take you to the next level like it should. It took hours of struggling, and these features feel quite hackish unfortunately. Still, they'll do for a simple project like AMAZE.

My next goal is to add a scrolling view that follows the player around, and then maybe a GUI. Then, I might try and add different resolutions and fullscreen. I might also add a title screen and main menu. We'll see, but I think these changes will easily carry me to the end of the jam.

10/5/13

Game(Engine) Jam, Day 1 Recap

I spent the first hour or two today working on trying to implement my game idea into my partially-completed engine(The AMAZE one). That pretty much failed. The engine isn't ready for a game jam, and it definitely shows. I briefly considered just tossing something together from the ground up, as usual, but then I stopped myself. Wasn't the entire point of this engine avoiding just that??? So, here we are. I'm going to scrap that game idea, and switch focus for this jam. Instead of a game jam, I'm going to make this a game engine jam.

While working on AMAZE, I've had an ever-growing list of things to add to my engine that I've either deemed low priority, or have just been slacking off on. I've decided to see how many features and fixes I can give this engine in the span of ten days. If I'm lucky, it'll end up in a state where I can just about finish AMAZE with it and move on.
Now that I've explained that, here's what I got done today:
-I started off nice and easy. I'd been meaning to make my asset packager use tsx(tiled tileset files) to get tileset information, like tile size. That works now, and I even took a while to make the tileset packaging code more readable. If I ever need to go back to it later, it should be easier to work with.
-Later, I decided to fix a really annoying bug. If you read this post, you probably noticed the vertical lines in the tiles. I said they were nothing, but on closer inspection they actually were the result of a bug. Staring at those lines was making my eyes hurt, so I found the issue and fixed it. Turns out, when I was loading the color data I was skipping the first two bytes. This also explains why the color order seemed to be jumbled. Tomorrow, I want to finish collision detection(finally), and possibly work on view scrolling. Here's a screenshot showing the correctly working tiles:
Remember that most of this is just placeholder art
While I'm at it, here's something that I never got to post about: The player can no longer walk through walls. I got that working a while ago, but the retrospective(and the jam) got in the way of part 10.

10/4/13

A Short Diversion

AMAZE is getting put on hold for another week, but there's a great reason: Tonight, a 10-day game jam is starting. I'm doing things a bit differently this time, though. Specifically, I'm not making a game. 

Let's start at the beginning. On Wednesday, after class, my graphics/engine development professor gave me a challenge for Space Douchebag! Since this week's assignment is to implement a particle system, he asked me to make a certain improvement to my particle system. Specifically, he asked me to make a particle effect designer, and setup my system so that the effects were externally loaded and could be changed on the fly. This sounds like a lot of fun.

The EDC, a game dev group at Champlain College, just recently announced an informal game jam, and pretty much said that you could make whatever, as long as whatever you were making wasn't a school project. To me, this seems like the perfect opportunity to develop a neat tool. 

I haven't decided what to do with my schedule during game jams yet. I'm thinking that It'll depend on the jam. I'm going to put off the second programming post this week, but I think I'll still make the usual posts during the jam's duration. When the tool is finished, It'll support both Windows and Linux. I haven't decided whether I'll be making a Mac version yet, but it seems unlikely.