4 Hugues Ross Writes a Devlog: 08/01/2013 - 09/01/2013
Hugues Ross


AMAZE - 9 - Now with added coherence!

Well, it was a short-lived victory. It looks like I've got a ton of bugs to work out now, which is understandable considering the fact that I couldn't properly test any of the updated code until it was all done. The strangest bug that I've run into so far is all of the tiles being tinted green for no apparent reason:

(ignore the vertical lines, I just didn't draw my test tileset too well.)

Anyway, note that this does not in fact affect sprites at all. I was really curious as to how this was happening, and I still am. I fixed the error by rearranging the color load order. I don't understand why the colors were jumbled in the first place, but I'm glad it works. I know that sprites and objects should work, because they were working earlier. However, ever since things got green I hadn't seen a single object. This was because apparently they were receiving strange arbitrary coordinate values, like -nan(nan stands for 'not a number', by the way.) I fixed that, too, so now I'm just about done with the rewrite. The final step will be to implement the basic object scripting that I'd implemented right before. It's already in the files, so it shouldn't bee too difficult. By next update, I ought to have some actual game content to share.
Much better!


AMAZE - 8.5 - iyefgcufdhfvdwfiulhbewfiughrsyLUbgfgbsfvyilsbgvlifvrilebgrilgfiegf

uykgcfyudgsbvfuhbgvhyjubdvhjudbsvhjubryhbfvfbgvyfshbgvsbvjhcbfaku.dawidjasknlfc dsbvhhgczguasdaklwnfckjbaqvkcbdilfjacinhdvkjbudsuevdn jvdnoisdfjcpaes;jnhcvsdlkvjpocefjiapcevkadnvlnsdvkinisovn lnsdrvbosnmbp;snm;gvjewmwbkbkldvnwnfewfvinewiogvnrdvn ds lkrnv l knsv nolfvniedgvnjugvldsnhgvldengvlsirdnbgvlisenvlienbilndrlbinnbislrnsilgvjsrinilfslbibnfs
khcbvjdksvioanhvculzcvyuhdbsnvkj dbs lvhd cvkjdccccavs yhujabcs jkA kjdbc iascnj.ucnsjdbvhyadcb jadb vja njkbakdhcbasjcvbbbndjv bdajbv kjdbcvjadkubvhdabfbadndblsviub dshyvbsdb nhjdsbcfujadbgcvujadvjbvuyhj bnsdvj bvhbdskjbvSEUbgvlyidshbgvludsvbglgdshkyubgsfhyuADUBkyuaefaiGIUEADGHVIUUUliuAHIUAGLIUSFGHUAIfhUIGADIGHISFVUGSBHVHUIAigsikuhbvdskuhbdvkubv jksvn jskbfvdjsbvkjsdvbsdkjbskjfdbvkjdfskjbhadkgvjhfsugbvfdskjjjjjjjjjfbjdskghdfskjghksdfgkjhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

Perhaps it wasn't the best idea to try and finish all of the import/export code in a single week. I've written it all. Not sure how much works. Need sleep and/or caffeine. More work and possible real update tomorrow.


Games I Play #5: Aquaria

When I play games for these posts, there are many things that factor into how I treat the game in the end. Of all of these traits, good and bad, the simplest test that I've found for separating the best games from the others is to play them and see if they delay my writing for several hours. Such is the case with this weeks game, Aquaria. This post is being written at 10:00 pm, right before I go to bed(I'm a very early riser). I think that sort of delay speaks tomes.

The Good:
This is going to be a long section.

To start with, the visuals are gorgeous. The game sports a wonderfully detailed 2d visual with just the right amount of graphical flair to create some truly gorgeous landscapes. The world, the creatures-hell, even the freaking save points look good!(No, really, I think many of the save points look quite pretty and have just enough differences to be noticeable) You might think that my reaction is just because I'm a sucker for 2d, which I totally am, but I encourage you to see for yourself just how detailed and beautiful the game can be. At least from the visuals, this game's a work of art. To complement this, the game allows for tons of exploration. The game often opens the world to you in massive chunks, and there are huge and varied environments everywhere, filled with a wide variety of creatures. They range all the way from the boringly mundane to the utterly fantastical, and they all share the same attention to detail that the rest of the game does. The variety doesn't end there, either. From what I've played of Aquaria, the different powers that you slowly obtain all feel quite unique. Not only do they change your appearance, but they all feel solid enough to base your strategy around, and useful enough to have their own special time and place.

The Bad:
While the game does give you tons of room to explore, it generally stops you just short. Overall, it makes it feel just about impossible to sequence break at all. In such an exploration and discovery-heavy game, this makes me rather sad. I suppose it's the sort of problem that most of these 'metroidvania' type games face. To make their upgrades feel necessary, and give the player such a feeling of growth, they arbitrarily force you down a linear path to the end. Of course, this is all unimportant if you can't even play the game decently, and I was surprised at how resource-heavy it seemed considering its age. The steam page recommends at least 256mb of RAM, but my older desktop at home with all of its' 4gb got some rather noticeable framerate issues here and there. Most modern computers should have no problem with it, but some older ones may run into similar problems. The game also spikes a bit in difficulty fairly early on, and might make a few early sections pretty frustrating.

Overall, if you enjoy a good, unique, and gorgeous adventure with plenty of action and lore, look no further. This game provides all of that in great quantities, and the experience feels very polished overall. Also, like most indie games, the price is quite affordable at $9.99.
You can buy the game here.


Back to College!

As you may know, I just spent last weekend moving back into college. Yup, Summer's over in my book. I took a few pictures yesterday of my dorm room:

This is my new living/working space. As you can see, I haven't yet brought over a decent chair, but that will change soon enough. Overall, I was pleasantly surprised by how much more spacious it was than I expected. Hopefully this trend will continue for the rest of my time in college. Also included is a tiny view of my current setup on my laptop. The top-left block of grey and white is a simple little system monitor setup that I put together via conky. Nothing fancy, but it functions rather well.

The Sega Genesis to the right isn't mine, unfortunately. My roommate brought it with him. Speaking of which, this roommate is Peter, friend of mine, specifically the one who composes all of the music for my games. Right now he's trying to figure out how to write to a cartridge so that we can make our own physical Genesis games.

He also left this on the mirror before I arrived.
Considering the subject matter, I should probably be terrified.

Finally, because I spent most of my time this weekend preparing/moving in I'm going to delay today's Games I Play post to tomorrow. I'll be sure not to make this a habit.


AMAZE - 8 - Format Changes

Due to unforseen issues, this post(and possibly the next) might be a bit boring and dry. Just a heads up.

After last Friday's post, some good and bad things happened. The good thing is that I tested out some basic movement controls for the player as a proof of concept, and they worked great. This means that we're going in the right direction with this engine. Unfortunately, the bad thing was really bad: I accidentally broke the engine somehow.
Here's how it happened:

  1. I decided to upgrade my compiler to the latest version, so that I could take advantage of some neat new features that would make my life a hell of alot easier.
  2. After this, things started to go wrong. Specifically, the game was crashing immediately.
  3. With a good bit of testing, I realized that my program was trying to load tiles with huge nonexistent ids for some reason. The problem was coming from my file loading code, but I haven't the slightest clue why.
  4. Regardless, I can't seem to fix it. That means that I have to either hard-code my levels, or rewrite my loading code entirely. I'm going with the second option, which is why I posted that I was skipping Ludum Dare.
Before I talk about this rewrite, let me explain how my asset files tend to work right now, and why they're stupid and badly designed. Assets files need to hold all kinds of numbers, like the width of a sprite or the tile ids in some level. Currently, they are stored in an unwieldy but human-readable way. If we have a 150 by 46 pixel sprite, a section of the file might look like this:
This might seem like a great way of doing things to a layperson, but it's a nightmare for computers to read. They have to do it like this:
0*10+1 = 1
1*10+5 = 15
15*10 + 0 = 150
New line here, next number:
0*10+4 = 4
4*10+6 = 46
New line here, next.....
I've actually simplified the process a bit, since the computer also has to figure out that how much every number symbol is actually worth. There's obviously many places that this could go wrong. In my case, the computer was somehow occasionally adding more numbers at the end, throwing the count off by 1 or more decimal places! It's also a bit unstable. What if the computer never runs into a new line somehow, and just keeps making the first number bigger? Everything breaks very quickly.

My solution is to store the data in a more computer friendly format, binary. You probably also know that binary is just 0s and 1s, but you might not know that bytes(8 digit binary numbers) correspond nicely to characters. This is why(I think) so many binary 'formats' tend to be based on a multiple of 8: it's easy to add, subtract, and manipulate sets of characters. These numbers can hold much more information as well, because bytes are in fact base-256: A single digit can hold over 25 times as much information! For me, I'll be sticking with 16 bit(2 byte) numbers. They can hold values of 65,000+ which is more than enough. Here's what reading them looks like:
(0*256)+150 = 150
(0*256)+46 = 46
That's it. That's all. with a set size like this, you know exactly what to read ahead of time, and the math is that much simpler. It also doesn't have to convert anything; it just takes the values given. This leads to a smaller, faster loading script-not to mention that there will be much less room for error here.

Anyway, so far I've rewritten the export functions for tilesets and sprites. The room code holds more varied and less predictable info, though, so I'm still working on it. After that's done, I just need to rewrite the import code and fix any serious bugs that show up as a result of this change. I think I can finish this in the next week or so.


Status Update: Ludum Dare and more

A few quick things I had on my mind:

  • After much consideration, I'm not going to compete in this upcoming Ludum Dare. My engine may be in a semi-working state, but it's nowhere near ready to be put to the test like this. Fear not, though. Fall will bring with it a couple more game jams, and I'll be far more ready by then. In the meantime, I'm gonna stop working directly on AMAZE for a little bit, just so that I can smooth out a few kinks and issues with the engine. It's better to take a while doing things well than to do those same things twice(or more).
  • Elementary OS Luna was released recently! It's probably the prettiest Linux distro I've ever used, and I've been proudly running it since January. If you're looking for a cool OS, look no further.
  • As you can see, I've miraculously made a Games I Play post today. Hopefully, this is the start of a new golden era of blog posts. I think I'll be changing how I write them next week, though. The piece by piece review works alright, but I keep running into the same 'Well, I need to write about this part but it's not really awesome or terrible.' sort of thing again and again. I'm going to try doing more of a pro/con thing next time, and hope it works better.

Games I Play #4: World of Goo

"World of Goo is a multiple award winning physics based puzzle / construction game made entirely by two guys. Drag and drop living, squirming, talking, globs of goo to build structures, bridges, cannonballs, zeppelins, and giant tongues. The millions of Goo Balls that live in the beautiful World of Goo are curious to explore - but they don't know that they are in a game, or that they are extremely delicious."
To be perfectly honest, I don't think I can think of a better description for this crazy game. 


Nowadays, many indie games either try to aim for 3d, make retro graphics(generally via pixel art), or both. This does seem to be slowly changing, but it's still refreshing to see a game like this one that makes some nice, fresh, 2d graphics without resorting to pixel art(Not that I hate pixel art or anything, in fact it's what I generally go with). The little goo balls all look quite adorable, and their different varieties are all quite graphically distinctive. Overall, the game has the striking and unique aesthetic that can be seen in other games by the devs.


The music in this game is a real treat. The songs are incredibly diverse, and fit their respective levels perfectly. There are slow, methodical sounding songs for the real headscratchers and racing, frantic tunes for the few fast paced levels. The best part is that you don't have to take my word for it: It's freely available.


The games controls and objectives are pretty simple: drag goo blobs together to form springy structures and reach the pipe, letting the remaining blobs escape. Because of how elastic these blobs tend to be,  things can get pretty tricky. Bridges will bend, towers will topple, and the cute little blobs will crash into spike-laden walls and die. Thankfully, the game often provides you with a few free undos, letting you keep trying without losing your progress. The developers were also kind enough to allow you to skip any level whenever you want, preventing you from ever getting stuck. The game also scatters signs throughout the levels. These provide bits of flavor text mixed with little hints, and help remind you of the story behind all of these puzzles.
One thing that puzzle games have to be careful about is keeping their levels fresh. After all, it can be boring just to solve puzzle after puzzle without any new depth or mechanics ever being introduced. Thankfully, World of Goo certainly doesn't suffer from that problem. As soon as you get the hang of things, it tosses in something new, usually in the form of a new blob with new properties. The only trouble is that sometimes it feels like a bit too much is being thrown at you at once.
Another nice thing to see is that while each level needs a certain number of goo balls, the game rewards you for beating that. Every extra goo ball that you collect is added to a level where you can build to your hearts content. They combine this with a sort of leaderboard system by placing a cloud at the top of whatever structure you build. As you build up, you can see just how high other people from around the world have gone. 

Final Thoughts

I recommend this game to pretty much everyone. It's oodles of fun. In the end, I think it's the skip button that really makes the experience for me. If I ever get frustrated, it's nice to know that I can just push a button to make that go away. Anyway, it's only ten bucks and it's available on quite a number of platforms. Even if puzzle games aren't your thing, I urge you to at least look it up on Youtube or something. It's pretty unique.

You can buy the game here.


Amaze - 7 - Meet the Protagonist

Now that the base framework is finished, I'm itching to make some actual game content. However, this week I'll resist that urge in order to make this project run smoother in the long run. Besides, we haven't had a design post in a very long time.

To start things off, I decided to make a list of things that the player should be able to do in AMAZE. Here it is:

Move - This is probably the most obvious one. In a game about getting your character to the exit, it'd be difficult to make a game where they can't even move in the first place!

Push - Pushing things around is the kind of mechanic that can get a lot of use. It lets you open paths, close others off, hold down switches, complete circuits and more. There are entire games built solely around the mechanic of pushing things.

Collect - Like in AMAZE's original iteration, I'd like to have various things that can be picked up, be it as a part of a puzzle or a bonus. Pickups, especially in the form of bonuses are certainly another staple of the genre. I'm not really trying to break new ground with AMAZE, so I have every reason to rely on a few simple, standard, common mechanics.

Activate - This is a more complicated and nebulous action than the rest. I'd like to have various things, probably machines/control panels that can be interacted with in general. These would do all sorts of things, like moving stuff around, opening and closing doors, or otherwise changing the layout of the level. This lets me make some wildcard type objects, which can do unique things when necessary.

Dig - I don't think this action will be available by default, but I think the player should be able to dig through certain weak walls. Either I'll add this as a mechanic later on, or it'll show up as a powerup of some sort.

Bomb - Of course, one cannot just dig through everything. tougher walls will require the use of explosives to break. These items will be usable only once, so you'll need to grab several to blast through thicker barriers. They may also destroy other things, like some hazards.

Unlock - Another straightforward one here. Doors and keys are good for making multistage puzzles, where you need to solve each section before moving on.

3 Others - I wanted to prevent myself from bloating the project by adding new things partway through. I've therefore marked this list as final, while still intentionally leaving 3 spaces blank. This will let me add new features, but force me to choose them carefully and set limits.

Now that I've nailed down most of the main character's abilities, let's talk about what they're like.
Above are the four player sprites that I've gone through so far. The one on the far left is the original player sprite that I've been using from the beginning. When I decided to make a player sprite for this version, I felt that the original looked just a bit too small and bubbly, so I started messing around with the bigger, blockier designs in the center. I thought those would turn out even worse, so I scrapped them. Finally, on the right, I came up with a new design. Instead of some huge machine with a guy inside, I made a funny-looking robot. I also changed the view so that this little guy was being seen more from the top, and gave him a face. His sprite is obviously not done, but I like the little guy. I'm keeping him.

In my last post I promised pictures, so I guess I should add another. Here's a screenshot of how Singularity v1.5.4 looks(I've made a number of minor updates since 1.5):
Click to enlarge

As you can see, it still looks pretty terrible. Hopefully I'll be fixing that(and finally actually releasing it) in v2.0, coming either late this year or early next year. Eithr way, it's still going to be while before I get back to it.


A wild schedule appeared!

Remember last time I made a schedule? Here, have a refresher, with commentary:

"I've recently been posting to this blog almost every day, and I think now would be a good time to make a proper schedule for posting. Right now, my objective is to post daily when possible, although I might not have time to do that this weekend. I'm moving into my dorm at Champlain today, and I have to attend the various orientation activities on Saturday and Sunday. That said, you can find my plan for posting after the jump:"
No, Really
Oh god, if only he knew... Typical freshman. Not that I'm much better now. For the record, Orientation sucked. I cannot understand how such a sweet college could fuck this up so badly by just throwing assemblies everywhere. What is this, grade school? Anyway, at the time I had 1 (comparatively simple) game project, no classes or obligations, and nothing to do. Now, I have so many game projects I don't even count 'em anymore. AMAZE has received so many rewrites that the old code folder contains an older code folder. That's a sure sign that you've been busy. Also, I'm still not sure whether I should use jump breaks. I'm leaning towards no, but I feels like I have to for some odd reason. Ok, from now on I'll follow this rule: No jump breaks. Sound good? Good.

"1. Sketchbooks - I'll be putting a new sketchbook post up every Wednesday, preferably during the morning. They're just going to be quick sketches based on a theme. I put the first one up yesterday, but I drew it the Wednesday before. I'd love to see comments on these posts, especially constructive ones. They exist so that I can practice drawing regularly."
I think I made.....1 sketchbook post before saying fuck this and stopping forever. I might draw some more once in a while, but nothing like this. As for comments, I got a comment. A single one. Once. If you're out there, fabled readers, do comment! Yes, even if you're a web spider. I have high standards for automated processes, you know.

"2. Programming - Despite working on a couple little games, I haven't posted about any of my programming/game making projects yet. I'll post about any progress on those every Saturday."
Wait, a couple? What? As in, more than 1? Weird, I need to reread my old posts now... 

...No, no talk of that fabled 2nd project. In fact, I posted about the 1st after this went up, as I'd mentioned. Yeah, I have no idea what old me was talking about. That 'pics or it didn't happen' thing seems pretty cool though. I still need to give it a go sometime.

"3. D&D Recaps - I'm part of a small Dungeons and Dragons group that meets every other week. I'd like to post short recaps of what happened on Sundays, but I'll have to talk to my DM first."
Alas, that fabled conversation never occurred. Either I'd forget, or I wouldn't get a chance to ask. At this point, I don't always make it to games anyway. If someone else were to write some recaps, though, I'd put them up. I may ask about something like that.

"4. 3D Stuff - Last year I did quite a few basic 3d renders/animation with Blender. I haven't done any of that all summer, but I'd love to start anew. Every Monday, I'll try to put up some sort of progress on a Blender project. In the future, numbers 2 and 4 may coincide. Now wouldn't that be nice?"
That would be nice, and it'll happen eventually. I was using Blender all the time before college, but I've replaced that completely with programming. Still, I do want to try making some 3d games sometime.

"5. On Tuesdays, Thursdays, Fridays, and some Sundays, I'll put up whatever I feel like posting. This could be one of the things I've listed above, or it could be something totally different. We'll see."
Was I some sort of masochist back then, or was I really that naive? "So I'll post all of this stuff on these 4 days, and-Oh yeah let's just post on all of the others too. No problem." I can't post twice a week on vacations, much less every single day! 

"I'll put up a page with my schedule later. I've been considering Let's Play-ing some indie games at some point. If so, I'll probably put those videos up here along with some post editing commentary."
Wait..... Did I really consider becoming a LPer for even one second? I've got a terrible voice, not too much to say, and a laptop that can't even record my own games properly(Which is why no other gameplay videos are up yet. They don't seem to record well. I'll pester a friend to borrow their computer sometime, or something.)  As for the schedule page, I eventually deleted it in disgust.

So. As you can undoubtedly see, that went rather well. Let's do it again, shall we?
I'll even use the same format! After the not-jump, of course:
  1. Programming - Fridays. I have Friday off for this semester, and Friday is D&D night so I plan to keep them light. This'll give me all day to procrastinate, and 1 hour to desperately throw something together. 
  2. Games I Play - Mondays. This way, I'll have the entire weekend to check out the game in question, as well as write my impressions. This does mean that I'm missing it again this week, which sucks. I will post another AMAZE update tomorrow though, and it will have pictures, even if they have to be unrelated ones(they won't.)
  3. Sprites - Apparently, I haven't been posting sprites often enough. I believe I said it was going to be once a month, but that doesn't seem to have worked out. I'm not going to make an effort to do more spriting, but on the off chance that I make/edit some sprites they'll appear on Sundays.
  4. Everything Else - I wouldn't mind posting about my daily life here. In fact, there are a few other things that I'd like to post about. They will be sporadic, If I even choose to post about them. I will be sure to only ever post them on Whenevertheheckiwantday.
So, here's to hopefully not failing! This was super fun, so I might start tearing apart old posts here and there. I won't post the schedule for at least a month, so that I know for sure that I'm following it.

AMAZE - 6 - Relief

Note: I meant to post this Tuesday, but internet issues and wanting to write another post alongside delayed it. Just remember that.

It hasn't been very long since my last post, but I've got some pretty great news: For the moment, the engine is done! By spending the last few days literally working myself to exhaustion, and today fixing the multitude of errors and terrible bits of code caused by being worked to exhaustion, the room system is entirely done. What this means is that 6 posts in I can finally begin work on AMAZE proper - and that's awesome. The engine's far from done, of course. For instance, sound will currently be handled by allegro's default setup for the moment, and much of my code will need cleaning up and reworking.

Anyway, now that that's done it's time to start on AMAZE. Hopefully, I'll be able to use that to work out the kinks in the system prior to the next Ludum Dare.

Now then, I'm quite annoyed about ending up with all of these short, imageless posts. I want to get another big progress post out by the end of the week, so we'll see.


AMAZE - 5 - General Update Thing, a.k.a. I must have a thing for rewriting significant portions of codebases or something

The title says it all.


Alright, it's not that bad so maybe I should actually elaborate. I finished collisions and sprite importing. That's good. I even threw together a simple gui for making asset files! Then I got to adding rooms, and made an important realization: My entity system really sucks. I spent a while thinking about how to add entities to room files, and noticed that the system that I'd built was really just a more elaborate and confusing version of what I'd started with. Obviously, it was back to the drawing board. I've been spending the last week and a half remaking this system, and I'm proud to say that it's basically done! The main reason why I've been delaying this post is that I wanted to resolve all of this beforehand. Anyways, I'm not really going to have much to show off until I finish the room system, which is next on my list. I suppose I could explain how the new entity system actually works, but I'm exhausted today, and I think I'll put that off for some end-of-project roundup. Finally, Ludum Dare is coming up again in a couple of weeks, and I plan on entering. If you don't remember what that is, it's the same jam that spawned A Wheelie Good Time last winter. It's generally quite fun, and I'd like to get my engine in a working state in time for it. That means that once I'm done with rooms, I'm going straight for sound, then I'll try for Windows support. With all that finished, the engine will pretty much be done. As for AMAZE, it'll serve nicely as an easy, not-too-intensive cooldown when school starts up. Hopefully, then I'll relax a bit. I'll work out what my next project will be once that's done.


Games I Play #3: Gaurodan


"Long forgotten is the legend of Gaurodan, the bird of thunder, and his fight with Guayota, the fire beast. But now mankind has discovered the egg of Guayota within Mount Teide, and it is only a matter of time until Gaurodan returns from the sky to fight the beast and punish us for awakening his ancient enemy."

So, this game is the coolest fucking thing ever. I just played it yesterday, and decided that this was much more worthy of this weeks post than what I'd been playing before. So, without further ado, here it is!