Missing Progress: The Timeline

Posted by Overkill on October 31, 2011 at 4:13 am under Uncategorized

Hello again.

It has been a while, it would seem. I’ve been rather silent about my work here lately, and although I post a lot of my progress on Twitter, it would be nice if some of this was also documented on my website.

Here is a timeline of sorts!


  • More work on NES rom stuff, mainly just doodling mockups for an RPG scene.

    Rough doodles. Playing with the idea of sprite layering to create interesting effects, and using tiles to create enemy artwork:

    More fleshed out, fussing with the background pixels. In particular, the grass has been improved greatly, added water and an incomplete skyline. Slightly more refined and tile-aware, although obviously a mock.


  • Started thinking about how to make a crappy map editor for my NES RPG project.
  • Generally distracted by work.


  • Molasses NES prototype. A simple sidescroller metasprite loader, tilemaps, and basic tile-based collision. Doesn’t handle off-screen obstructions gracefully (wraps to other side of the map):


  • March 6, 2011 – First official release of nel, an NES 6502 assembler (version 0.1.1). Written in D, supports many features that typical 6502 assemblers don’t support, has a fairly flexible syntax that can be parsed with recursive descent and minimal ambiguity. Does multipass so symbol scopes can be handled intelligently, and a separate linker tool isn’t necessary.
  • March 16, 2011Let’s Play Magna Braban started. Intentionally low production values. Typically recorded during late night, after a few drinks ingested.


  • April 18, 2011 – Got the idea to possibly demake Eversion as an NES game (with Zara’s blessing). Toyed with the possibility of converting some of the sprite art, kind of:
  • April 18, 2011 – Finished Let’s Play Magna Braban. Great art and music, funny story, too bad the programmers apparently overlooked the fact that full inventory access with no restrictions is horribly broken.
  • April 19 – 20, 2011 – Started and finished Let’s Play Gradius III. Apparently the enemy patterns are still fresh in my head.

  • April 25, 2011 – Started and finished Let’s Play Vector Knights. Vector Knights: You’ll Die A Lot: The Game.

  • April 26, 2011 – Started Let’s Play Banana Nababa. As ustor put it, “Drunken banana nababa. You are a madman.”


  • May 1, 2011 – Attempted Ludum Dare 20, but realized I was out of time. But I made a timelapse of the development. I kind of had fun learning Flashpunk, and drawing weird Earthbound-like characters:

  • May 10, 2011 – Wanted a scrolling map system, so prototyped a scroller demo to go along with nel:
  • May 11, 2011 – Converted a lot of Eversion artwork to NES specs:
  • May 15, 2011 – Made a tool for converting Eversion’s SHINY engine maps (Verge2 .map files) into a raw byte format I could easily load on the NES.
    Made my scroller demo bundled with nel use the first level maps from Eversion instead.
  • May 9, 2011 – Continued Let’s Play Banana Nababa. Beat the third boss, after taking a second attempt.


  • June 3, 2011 – Started Let’s Play La-Mulana. Was inspired to replay this after La-Mulana Wii’s release date was announced in Japan.

  • June 16, 2011 – Created a backloggery account. It’s a tad depressing how many games own and haven’t completed yet.
  • June 25, 2011 – Played around with making NES scrolling and tile copying faster during vblank interrupts, so more tiles can be transferred per frame.

    Turns out the absolute fastest way (provable by cycle-counting vblank routines) is to copy opcodes into RAM to generated unrolled tile copy loops from your main game loop. Then you can just call that code during vblank. This wastes a lot of time in your main loop, with a lot of extra work needed to buffer tiles that wasn’t there before. It also requires a sizable chunk of RAM — 15 bytes to setup @ppu.ctrl copy stride, 10 bytes to tell @ppu.addr where to locate the copy, and 5 bytes per subsequent tile copy to @ppu.data.

    However, if you do this, you get a decent savings. It allows for some pretty large tile copies to be made on-screen, and could be used for 2-axis scroll or quickly processing a game with destructible terrain that can regenerate.

    The unrolled loop looks like this (although written as individual opcodes):

    a: get #stride, put @ppu.ctrl // Set stride by clobbering the PPU ctrl. (5 bytes / 6 cycles) Vblank code will need to reset this afterwards.
    a: get #addr_hi, put @ppu.addr // Write address high to address register (5 bytes / 6 cycles)
    a: get #addr_lo, put @ppu.addr // Write address low to address register (5 bytes / 6 cycles)
    a: get #tile, put @ppu.data // Write first tile (5 bytes / 6 cycles)
    a: get #tile, put @ppu.data // Write second tile (5 bytes / 6 cycles)
    a: get #tile, put @ppu.tile // Write third tile (5 bytes / 6 cycles)
    // ... and so on.
    return // Done! (1 byte / 6 cycles)

    The actual code to generate such unrolled loops is somewhat more frightening. I won’t get into that.

    Using that general method of buffering things, I made an updated Eversion map scroller, as well as a screen-wipe effect demo.


  • Moved to a new apartment!
  • Got a job offer out of country! Suddenly, need to find a new place, and fill out paperwork!
  • Wrapped up my old job!
  • Dungeons of Dredmor came out!
  • Very little work was done.


  • Home for a week!
  • Vacation!
  • Home for half a week!
  • August 18, 2011 – Second release of nel, the NES assembler (version 0.2)!

    Now with if statements, while statements, repeat statements, enum declarations, more flexible ROM sizing and relocation statements, a scroller demo. Other fun. See the documentation!

  • Moved to California. Slept on an air mattress.
  • Work started!
  • Vaguely remember working on this, amongst all the chaos:


  • Bank card!
  • Mattress!
  • Desk!
  • Real furniture!
  • Tired. No games.


  • Still tired.
  • Someone contacted me out of the blue to work on GBC homebrew! The actual project is ongoing, in secret. But here are nondescript test programs of some minor things, to tide you over:
  • Suddenly, TIGJam 4 appears! This was lots of fun. Met many inspiring people, saw a ton of cool games, and I was inspired to work on things again!

    I got the C++ for Plum, my Lua game engine compiling in MSVC 2010 on my newer netbook, then I spent time converting Molasses’s old Verge maps into tiled maps. Managed to make my Molasses Meow demo work after rejiggering the Lua code from my Verge project. And the reception during demo night of TIGJam made me feel like I should probably see this through. Things were good!

    Here, have another screen:

    I’ve been brainstorming ways to improve the map design of Molasses Meow. Basically it boils down to sparser powerup collection, and more interesting environments to interact with. Taking an idea from Star Tropics, I was thinking of having fairly simplistic button-hitting puzzles. You bump into buttons on floors, ceilings and walls, and then something simple happens as a reaction to that.

    Also came up with an idea that goes with the enemy capture system. Basically, after capturing guys, you’d bring them to an ominous looking room and crush them into tetris-style puzzle pieces. Each creature type would map to a unique piece. You’d then use those pieces to build a tower to the final area, in the outer reaches of space.

That brings us to today. It is barely still October, but I’m still working on stuff. It goes slowly but steadily. This is a rather long timespan to not post on my site, but I’m hoping this mega-post makes up for that lack of posting. Maybe future posts will be of somewhat more sane length.

Until next time,

— Overkill


Alive and Lethargic

Posted by Overkill on December 19, 2010 at 10:55 pm under Uncategorized

It’s getting closer to Christmas, and it as approaches, I can’t help but reflect a bit on the past year. I’ve had very mixed feelings on the whole thing. I won’t drag you too far into my life, but I’ll give you a bit of closure. I think it’s the right thing to do, given my large absense.


I was 21, and had just finished my second-last semester of school at the University of Guelph. It was good to be back after the stress of juggling several Computer Science courses, and finally having free time to work on projects.

Christmas was fun time with family, and I was happy to be off school. I was hacking away at Molasses Monsoon, drawing a picture for Pixelation’s Secret Santa event, and attempting to make a quirky sim-game for a winter contest with Syn. It was going pretty well, but this wasn’t going to last much longer.

First off, my uncle passed away shortly before Christmas. I felt kind of bad because most of my memories of that uncle were from childhood, and our family didn’t visit nearly as much when I grew up. We went to the funeral a few days after Christmas, and were back home around New Year’s Eve.

On the day of New Year’s Eve, my friends called me up and wanted to hang out. My dad was working on a puzzle in the afternoon, we talked for a bit, and then I was on my way. But that was probably the last fond memory from that break, and the last time I saw my dad feeling well. I came back after celebrating with my friends, and pretty much went straight to bed.

The next day, New Year’s Day, my dad was sick. I figured he had some bad Chinese food, or it was from the celebrations the night before, but it turned out to be much worse. It turned out that he had a stomach flu, but since he had a thyroid condition and Addison’s Disease, this was essentially a death sentence. He never bothered to explain his conditions so I knew very little about what they were doing to him, and he never asked to go to the hospital when he feeling was sick. By the time we took him to the hospital, it was already too late. My father died the morning of January 2nd.

Soon after, I caught the stomach flu, and so did my sister, my aunt and my sister’s boyfriend. Since I caught the symptoms the day of my father’s death, I thought I was going to die at the time. And I was really sick the rest of the week. I managed to pull through.

…I won’t go into further detail than that. It was a horrible time. I only felt that it was okay to disclose this, because it’s getting close to that time of year again, and I know that this Christmas definitely won’t be the same as those in the past.


Anyway, I went back to school, pretty much right after I recovered from my flu, and finished my last semester. I took Compilers, where we wrote a Pascal-ish (Pish) toy compiler that emits MIPS assembly, a 3D Graphics course with a bunch of OpenGL stuff, an course on AI stuff, and the obligatory Topics in Computing 4th year course where you do independent research (I made a cheesy painterly renderer). It kept me busy, and I managed to have fun throughout most of it.

Since then, I’ve turned 22, and graduated from the University of Guelph with my Bachelor Degree in Computer Science. I’ve felt no real motivation to do anything amazing with my life. School was like the last big obligation I had to complete, and my father wasn’t even around to see it. I have no real direction anymore, and I feel like I have as little idea about what I want to do with my life as when I was still in high school.

My projects have been stagnant for the most part, although I had a few surges of creativity. I worked on Verge for a short while after I got off school, around May, which you can see about in the post before this.

The next big burst of creativity was learning some 6502 assembly and how old Nintendo hardware worked. I attempted to create an NES game, and although I didn’t make it too far, I managed to make a small tech demo ROM, that looks like this:

It’s a fairly basic techdemo, which has a textbox and a player sprite, and it uses MMC3 scanline interrupts to do funky cloud tile scrolling. It doesn’t have any audio, because sound engines appear to be a tad more work than PPU manipulation. I wanted to eventually make a roleplaying game of sorts for the NES, but that might be a while, if ever, that I get anywhere with that.

Then I realized how tedious it was to type in assembly commands using official 6502 mnemonics. I went about making a 6502 assembler, which I decided to call “nel” (Nintendo Entertainment Language, or something, I don’t know). It was written in lex and yacc, and you can view its source here. For its purposes, it worked, but I felt like I could do a bit better. Lex and yacc were both a bit ancient and frustrating, and the error reporting in yacc was annoying. There were also annoying memory management problems with C++, which I coded the AST in, and it was going to be pain to fix all that. In fact, right now, the memory just leaked until the compilation was done and OS cleaned up. I

I eventually decided to make my own recursive-descent parser in D. D is pretty nice, if you don’t need any external libraries, and only really need file IO and some data structures, which was the case when writing a compiler. It’s also garbage collected, which was good. I got a little bored doing the rewrite though, maybe one day I’ll pick it up. I’m onto the AST-handling junk, which I can more or less port from my C++ codebase, but I’ve been a bit lazy.


In addition to a few creative swings, I spent a lot of time looking for a job with no results. I eventually (mid-October) found something through a school friend. I started in November, and although it’s probably a temporary thing, for now it seems okay. It’s a six-month contract for a company called MRX, which has the CHL and CFL as two of its primary web-design clients. So far it’s fun, and there are a few people in my developer team that also went to the University of Guelph.

Lately I haven’t felt an abundance of free time, and usually find myself tired and unmotivated when I get home from work. I watch some TV, or hang out with my flat-mate for a bit, then sleep and repeat. My hobbies like playing games, writing, drawing pixel art, and coding have all been heavily neglected.

I’m writing this now in attempt to stop this idle activity and do something with my time again. Especially since McGrue and Kildorf are back in the race and making progress, and the recent advent of the new vrpg homepage should be inspiring to me.

I’ve done only minor things lately, mainly decisions for Verge in the long-term, but which haven’t been executed yet. Decided to rip VC out of Verge, and to redo the Lua API, to remove FMOD in favor of audiere, and to do some major internal cleanup. API ideas so far for a future Verge version (Verge 3.3) are in my Dropbox public folder, so these files may change as I edit them. Here are some files with the rough ideas about the new API:

Take a look over that, and if you have any feature requests, let me know.

Anyway, this is about all I can write about for now. Hopefully, I will make another post soon, by the next week. I will have to see though.

Tags: , , , , , , , , , ,

1 comment


Posted by Overkill on May 15, 2010 at 7:30 pm under Uncategorized

So in my previous, almost stream of consciousness post, I had briefly mentioned about updating Verge. One of those features in particular is the replacement of DirectDraw with GDI in terms of rendering. DirectDraw was old, deprecated, and broke Aero on newer machines. GDI, on the other hand, is still supported, and doesn’t need to lock the screen surface.

Along with the move to GDI, hardware fullscreen was removed. This at first sounds like a major loss, but this is for the best, I think. After all, Verge games are entirely software-drawn anyways, and many video cards do not support the lower resolutions that most Verge games are made in. Verge now instead uses a fake fullscreen mode, which means that non-native resolutions can be used without problems. As a result, that window switching is also much faster if you’re doing multiple things, and switching back and forth between fullscreen mode and windowed mode with ALT+ENTER is almost instant.

This however, wasn’t the only thing that got changed. There were a couple bugs and undesirable behaviours that somehow crept their way into the engine. Until I fixed them, that is.

When I added type-aliases to VC a bit of a while back, I somehow wrecked arrays in structures, but that is now fixed. I noticed that it was only expecting ONE dimension of the array when compiling (if you actually put one dimension only and it was a multi-dimensional array, the interpreter would choke). Now that’s taken care of.

I also fixed a bug I introduced with FileEOF. I thought I was being smart by making Verge’s FileEOF for physical files (non-packed files) into a simple call to feof(). But then when I later found this sort of thing in one of my older games:

    s = FileReadLn(f);
    // ...

…I noticed it was freezing! It turns out that FileEOF() had slightly different semantics than feof(), because the latter only is true when you’ve read PAST the end of the file. Meanwhile, FileReadLn apparently just returns nothing and does not trigger EOF if there’s nothing left to read. So I reverted that change. Instead, I’ve made the internal filesize() call on physical files be cached (since FileEOF should only be used in read mode anyways). If at some point, we get an “update” mode for files, I may need to turn off caching in that instance, but at any rate, this will cut down on the number of seeks to calculate file size happening EVERY time you call FileEOF().

Kildorf added escape characters to string literals. But most VC games were written without this, and expected a \ to put a single raw backslash. So I added an “oldstring” configuration setting. When oldstring is found on a line in the verge.cfg, it will go back to the old way of handling string literals. Sadly, there’s no way to mix files which use backslashes raw in string, and files that use escape characters in string without adjusting one or the other, but I think this is acceptable, since it’s a pretty trivial thing to do. I just added in the backwards compatibility so that old projects ran with a newer Verge would still work without digging through and fixing every string in the code.

I also fixed a bug with ColorFilter, where translucency settings were not being obeyed. Apparently that has been there for a while, and is now fixed. The code WAS blending the pixels, but it turns out directly after the blend, it just did a direct pixel copy of the filtered color (which wasn’t necessary, and prevented the blend from being displayed).

Oh, and I also added a few new window scaling settings. There are a couple modes to how the Verge screen can be scaled/fit into its window and fullscreen view. This called for new configuration settings. For windowed mode, there is “scalewin”. For fullscreen, there is “scalefull”. Both of these have a few settings that can be taken on:

  • scalewin 0 / scalefull 0 – Letter-box. The old Verge method of scaling the screen, which often resulted in distorted pixels. If the window was not perfect aspect, it would scale according to ratio (but the ratio could be non-integer, resulting in the chunky distortion), and it would fill in with letterboxes along the shorter axis. No longer the default, or only way of scaling. But left in, in case anybody prefers this.
  • scalewin 1 / scalefull 1 – Aspect-aware mode. Get the largest integer factor of screen size that fits in the render area. Makes sure that no distortion of the screen occurs, only uniform integer scaling. (Default windowed mode setting).
  • scalewin 2 / scalefull 2 – Scale to size of render area. (Default fullscreen mode setting).

    In most cases, a little bit of stretching can be acceptable. For instance, my monitor is 1440×900 (16:10), and game resolution is (4:3), but since the game is low-resolution pixel graphics, the bit of non-uniformity doesn’t stand out too badly (I think).

If you already looked at the SVN before this post, then you should know that I updated one other thing. I fixed ALT+ENTER from fullscreen to maximized (fullscreen is also maximized, so the window size doesn’t change unless you restore first). I also greatly improved the GDI renderer performance by removing accidental triple-buffering from the engine, which was slowing my netbook down to a crawl when I was doing a simple 640×480-sized window (eek!). So that’s been repaired.

You can peruse the SVN (anonymous/anonymous), or to be a little more friendly, you can download the exe here. If there aren’t any major bugs, maybe in a couple weeks we can have a full release.

So what are you waiting for?

Get it here!

Tags: , , , , , , ,


A lengthy departure.

Posted by Overkill on May 14, 2010 at 3:15 pm under Uncategorized

Well, I had hoped to return here a lot sooner than I actually did. But plenty of sleep-depriving schoolwork and various family crises all played a part in hindering my desire to write again. As a result I felt very burnt out, tired, and uninspired.

But it wasn’t all awful, the past school year especially. I had fun being able to write a Pascal-like compiler for my Compilers class. I learned a bit more about 3D graphics, like heightmaps and fake shadows in my Graphics class. I managed to better leverage multi-threading and played with a bit of cluster programming in my Parallel Architectures class. I acquired some knowledge about neural networks, support vector machines, evolutionary algorithms, and logic inference engines in AI classes. All of these classes consumed a fair deal of time, but it was pretty interesting. 

In March, I finally replaced my dying computer with a much more powerful quad-core Intel i5 750 desktop. It felt really awesome to actually have a fast and functional computer. I no longer had to live in fear of my flaky power supply, and screwy video card. But I only got to use it when I was off campus (which wasn’t often, with several all-nighters and lengthy days to finish schoolwork), so it was a gradual battle to reinstall everything I used to have.

Once exams were almost done, things were starting to feel normal. I had free time, actually started to relax and play games again, and I actually got to sit down and use my computer. Eventually I got back to looking at my own projects, but it was slow going. There were plenty of interferences too, since I bought Wario Ware DIY and so I was playing around with that. I also had to pack all my stuff up. 

About two weeks ago, I moved home, and I’ve been job-hunting locally and hanging out with my friends, and very slowly unpacking. Yesterday, I finally got the motivation to look after my site again, and I revamped a few things, layout-wise. The colors were adjusted a bit, and borders made a bit thinner and tidier looking.

So how’s the job-hunt going? Badly. Everytime I try to look at employment stuff, it feels really unpleasant and makes me feel nervous, and I end up getting distracted. It’s silly, I know. Especially since I know I should be qualified for plenty of software engineering jobs out there. Really I don’t know why I’m doing this. I mean, it’s the only thing I really have to do now, at this point. School’s done, and that portion of my life is over with. Onto the several remaining boring decades to live through. Blah.

I’ve also not really gotten that far on any of my projects. Very similar to how I’ve been avoiding a job, I’ve been side-stepping really making any sort of progress on any of my work. It’s crappy. That said, I’m still working on things, but my lack of progress is very painful. 

It wasn’t widely announced, but I’ve been working for a bit on a project called Molasses Monsoon, which is a sidescroller envisioning of Molasses Meow. It features less seizure rooms, and more exploration and item collection. Armed with the Love Buster, you are saving the Neoniverse from the peril of the Evil Candy Fiends, and go on a quest to better the world around you. I’ve most recently been working on adding dialog to the game to actually give the exploration some purpose. But it’s going really slow, because this game has always meant to be a cheesy side-project. Here are some screenshots:

Unfortunately, my real projects keep changing and dying and hitting roadblocks. 

In order to let me develop Verge games under Windows 7 and Vista without Aero being disabled, I made a GDI renderer for Verge, which is now in the Verge 3 SVN (U/P: anonymous/anonymous). The secondary reason was because DirectDraw is a deprecated API, but I wouldn’t have cared if it didn’t affect desktop composition effects. I need people to test its performance on older machines (Windows XP boxes, older video cards, single core machines, those sort of specs would be nice) to make sure it’s as performant as DirectDraw. If you’re more knowledgeable of Windows API things than I am, please review my code (keeping in mind that it’s greatly derived from the DirectDraw), I’d like to make sure there aren’t any bugs or bottlenecks I’ve overlooked, since this will have a drastic effect on game performance in Verge. 

I’ve also worked a little bit on my engine Plum. It’s ready enough to make certain map-less games, but other kinds require more engine work. Recently I’ve been planning a bunch of shapes and collision detection things to add to the engine. The engine feels fairly clean for the most part and can be checked out on github

Occasionally, I’ve also been working with a friend, planning a large-scale RPG project we’ve code-named “Eternity”, which is rather fitting. It is going to be a realtime battle system with programmable AI, and combinable spells, among other craziness

Apologies for the rather disorganized post. It’s just been a really long time, so I sort of brain-dumped as much as I could into this.

Well, okay, so this is my return to the Gruedorf competition after about 9 months of failure. What have you been doing? You have no excuse, just like me. Get a job! Make games!

Tags: , , , , , , , ,

No comments (make one!)

Spreading the webdev love.

Posted by Overkill on July 26, 2009 at 7:06 pm under Uncategorized

Hello!~ ♥♥♥

Yesterday I was bored, and one of my housemates was working on a webpage for fun. So I decided maybe I should try my hand at redoing my website so that it has minimal eyehurt and incorporates some of my colorful artwork.

I drew a rough mockup in pencil (which I scanned for interest’s sake):
Drawing is fun!

Then I cracked open Photoshop and went to town. The end result, is what you see now! Here’s a thumbnail of the result anyways (showing the frontpage which is has a larger, more detailed header):

Just used about 3 layers for each image. A background color layer, an outline layer, and a “coloring” layer sandwiched between (The sky also had a separate ‘cloud’ layer behind the banana but in front of the background). I painted them with the regular brush tool + pick, with a few well colors chosen in advance. Screw smudge and sponging and all those extras. Also didn’t use brush opacity settings.

Oh, and of course, a little bit of fighting with CSS and HTML, but not nearly as much now as I used to!
Today I took my rough prototype and mashed it into a WordPress layout. Was relatively painless since it was mostly CSS changes, and a few elements being shifted around.

Oh, and Kael, Zaratustra, and Andy helped point out the hugeness of my old header through messaging on Twitter. Thanks!

Anyways, that’s all I have to say for now. Games will be mentioned soon, I promise!

Tags: , ,

No comments (make one!)

History repeats, with delicious treats

Posted by Overkill on July 10, 2009 at 2:41 pm under Uncategorized

Hello! Been a while since the last time we talked.

I am an inconsistent person, and I forget things. I quickly fell out of Gruedorf again. And I don’t really have much to show for it yet.

I haven’t been able to find a job since early May, but I’ve still been wasting a lot of time struggling to find one. Sort of depressing, y’know?
Early after my last web job (which ended late May), I started working on a web paint tool, which I dubbed “Laser Toast”. It was pretty fun to make something interactive like that, especially since it was mostly in Javascript (and just a little PHP + JSON). It let you draw a super zoomed 64×64 image. It worked pretty well in my tests on Opera and Firefox. But it would do terrible things in IE7, where apparently it was running out of memory or took a really long time manipulating DOM objects.

I gave up on that eventually after I got bored, but it was a fair deal of fun while it lasted.
In other news, I have been working on a 2D game engine, which I’ve called Plum. (This is actually a revision of Brockoly, but with less ridiculous-to-type/say name. It also has plenty of features that weren’t in Brockoly.) If you want an silly acronym, something funky like Platonically Loving Unicorn Machine, or Poetically Lavish Universe Maker will do the trick.

For starters I’ve got Lua scripting, FMOD Ex for audio, Corona for loading images, zlib for compression, zziplib for archives, and SDL for the input, timing, and video. Nothing too fancy.

I added a packfile loading mechanism. Packfiles ARE pretty useless, but I figure it’s nice to bundle Lua libraries (like splash screens or an ‘rpg’ library) and stuff this way. To save myself time, I just use a ZIP format, renamed to .pit (Plums have pits… yep). I use zziplib to do the heavy lifting. And I made it so pretty much all my code properly uses ZZIP_FILE* instead FILE* for reading. I got to learn about the different ‘read’ callback APIs for Corona and FMOD Ex in the process. Heh.

I’ve slowly been making the implementations for my sprite, tileset, map and world layouts. They are all written in Lua files! I decided this allows a lot more flexibility and less bugs than with that crappy language that I “invented” called Mungo, especially since the Lua API under C is pretty simple to use, and can easily do error checking. I do a bunch of checks to make sure the data is valid, and I also ensure that no control statements can appear by using “return <Value Read From File>” in a dostring.

Sprites are so far pretty much just images with animation strands defined. Eventually I want to add metadata so that information about a particular sprite can be stored in the format itself. But for the most part, it does 99% of the job I want the engine to do. The rest I envision will be user code written in Lua.

Tilesets are a little more advanced, but in different areas. For one, you can specify an externalFile attribute in your tiles table, which the engine will autoimport upon changes (provided that file exists). It saves imported data in the tileset format itself, and it keeps an SHA1 checksum to lower redundant reloading.

The data is a zlib compressed chunk of raw data, which is then base64 encoded so it can be stored in Lua. This was shamelessly ripped from ika.

I am still planning to add the other, more sophisticated features to the Tileset format. It needs a structure for ‘arrangements’ which will denote preplotted tiles and obstructions. These would be useful for plotting an otherwise tedious collection of tiles, for something like a tree. The engine would not be capable of distinguishing what plotted tiles belong to which group without annoying amounts of extra info or sluggish pattern searching. So I decided the engine would know arrangement composition for plotting, but would become regular tiles once plotted. I figure this is a good enough.

There will also be ‘categories’ for tiles, which help classify tiles and give them useful meta information. A tile can belong to many categories. This would be useful for assigning terrain costs to tiles in a tactical game, or as a way to accomodate autotile functionality. Entire arrangements could be added to a category, too, but the engine would add the individual tile components of the arrangement to the category rather than adding the actual arrangement. This is for sanity reasons, again.

And tilesets would have animations that can be assigned to tiles, that would be fully scriptable with strings like ‘F3W10F4W10F5W10R’. Any tile index would only be allowed to be used once across all animations, to allow there to be simplistic grouping, and have it so each tile has a transition into exactly one other tile.

I need to eventually add a cleanup mechanism to my file parser, so that after a data entry is parsed and stored, it can be safely deleted. The reason being, I don’t really want to keep large data strings in memory, if I’m ALSO.
So hold on, isn’t this whole making-a-game-engine thing pointless? You bet!

Do I consider it to be reinventing the wheel anymore? Not really. It’s more like mashing a bunch of wheels together in a horrible attempt to make a Frankenwheel. I’m generously reusing existing GPL/BSD/Public domain code, to save time and effort, and only rewriting the aspects that need to be changed to make this thing flexible. It’s targetted at being portable and fairly lightweight.

It’s mostly there though. In fact, it can do a lot of what Verge and ika can, without maps/tiles/sprites. This steps from the fact, there was a fair deal of inspiration off those. It also my own intuition to make reasonable decisions.

Note that this engine isn’t intent on replacing Verge or ika. It’s an exercise for me, first and foremost. If I can draw the interest of existing users when it’s release-ready, I guess that’s good. Ultimately, though, this is a tool for my use. To improve my software design decisions, to see if I can remedy problems I saw in other engines or if I will fall into a similar trap.

Some of my code was unnecessarily reinvented back in the Brockoly days, but I am really trying to harvest from existing frameworks, to modify and improve. A lot of these ideas are incompatible with Verge, but on the other hand, I could adapt Verge source to fit in my engine. There’s nitty gritty implementation things to blame there. But mostly, this is for fun.

Once I get a reasonable amount of engine done, making games will become much simpler.

If you want to play around with my engine, it’s available at Github under a BSD license. It guarantees only limited stability at this point, and some code needs serious refactoring but feel free to look here.

Git is awesome, by the way. It had a bit of a learning curve at first, but I definitely like it a lot more than SVN now.

My repo includes a silly demo which shows a tileset loader test (might be removed soon), and (if you hit Enter) a simplistic rotating heart screen that does funky things when you click.

My repository also has a demo game called Maximum Yak Maniac, which I talked about last time I posted. It was pretty easy to remake, since it doesn’t require maps, sprites, or tiles. It just uses raw images and audio. Yay.
So there you are. I’m unemployed, and writing a game engine in spare time. I have also been juggling a couple game projects, but I’m not really prepared to talk about them yet. Next time, maybe.

Also I didn’t really check the formatting too much while I writing this, it might be too wordy, in that case tl;dr sorry.

Tags: , , , , , ,

1 comment

Yaks on steroids

Posted by Overkill on May 18, 2009 at 12:37 am under Uncategorized

So I didn’t remember to mention it, but, earlier this month, me and my housemate decided to make games in a little bit of a game making showdown. A horrible, horrible game showdown.

We had a few crazy rules for this competition, just to make things more interesting:

  • Our game had a random title was generated with the Video Game Name Generator. We each got 5 rolls. At each roll, you decided if you’d keep it or not. If you kept it, you stopped rolling. Otherwise, you decided you would not use that name, and took another roll (you couldn’t go back to old names).
  • Someone writes a theme or idea down on paper, and forces you to incorporate that into your game.
  • We had 24 hours to make the game.
  • No previously created code/art could be used (with the exception of code libraries, and premade fonts)
  • We had 30 minutes to brainstorm before the contest actually started, where we knew our idea and could plan, but couldn’t perform real work.

My friend made Advanced Battleship Mission.
He had to incorporate Cel-shaded Goats somehow.
His game is downloadable here.
You need to protect your battleship from submarines, with the help of your trusty cel-shaded goat advisor!

WASD = move
1 = sonar
2 = nukes
3 = mines
mouse = fire cannon.

I made Maximum Yak Maniac.
My friend was malicious and wrote down it had to be Multiplayer.
Here is what I came up with.
You (and a friend) are yaks with steroid addictions, and must out-do their opponent by having the most destructive roid-rage.

Controls: listed in game.

It was a fun competition, and we said we’d need to do another retarded contest again sometime.

Tags: ,

1 comment

Making a game out of progress does not help progress on making games.

Posted by Overkill on at 12:11 am under Uncategorized

Yeah, so, a couple posts ago, I mentioned Gamagame (The Game Making Game), which was supposed to be a fun way to keep tabs on what sort of progress I have left.

Unfortunately, it eventually got in the way of real progress for making games, along with school and the paid webwork I was finishing up.

So my idea to help me more efficiently make work on games eventually ended up with me become much, much, less effecient, as I got horrible horrible ideas to make a twitter app instead of making games like I was supposed to.

And even before I was obsessed with making a webapp for my progress tracking, the premise of the progress game was a bad one. It was penalizing me for not getting work done, which is fair, but it was based on “progress points” allocated earlier in the week. The thing is, later, I might realize one of the tasks requires a lot more work, and so it can’t be done for a very long time. So those would be wasted points. It didn’t focus on the big picture, so tasks would be arbitrary things, which might not even be relevant to actual game progress.

Anyways, I don’t care to talk about anymore. Gamagame, good bye.

I am going to make progress through traditional methods. Well-crafted design documents, implementation requirement documentation, and to-do lists. Prepare for further announcements, as I discuss recent game development.

Tags: ,

No comments (make one!)

Quest for Colour

Posted by Overkill on April 12, 2009 at 5:50 am under Uncategorized

I remade my first compo game, Quest for Colour for fun this weekend. It was a neat experience. It taught me a lot about my old art and code, and how I’ve improved since then. I had plenty of head scratching puzzle along the way.

Among the improvements was a HUD showing the time limit, bits collected in the current area, and overall completion percentage. Gave the player way way more time. Scrapped the old battle system, and replaced it with a quest to capture all the slimes. Although it’s sort of annoying it’s less so than the battle system that was there.

There was some god awful hideous work-around code, that I commented out and replaced with like one or two lines of new Verge. It shows how both Verge and my coding has evolved.

At any rate, it’s there to download and drool at now.

I can’t say I was fully satisfied with what I’ve done, but I’ve made the thing a little more presentable and thus more playable for everyone. It was a fun diversion. So, go check it out.

UPDATE: Fixed more bugs with the game, and added a difficulty selector. With the addition of hard mode, which IS hard. If you switch maps which you haven’t cleared, all slimes return. Easy mode is the same difficulty settings as last update. Normal mode is slightly more challenging.

Tags: , , , ,

No comments (make one!)

We need Verge 3.14

Posted by Overkill on April 9, 2009 at 1:49 am under Uncategorized

Seriously need to sit down with Zeromus, and hammer out a release for Verge 3.14 already. These awesome Lua features are just sitting here being under utilized! :(

Both Textshmup and Resonance have been using the new LuaVerge, and new vx, and I need to share the love. In a more stable form.
When these things are released, I can make sure ustor updates his space game, and other people can convert.

Having this release also means we could possibly pave the way for a functional VergeC to LuaVerge converter. This in turn would mean games with giant code investment, like Sully Chronicles or any number of Verge 3 RPG systems could be seamlessly converted into similar Lua code.

Okay remind me not to post at 3 in the morning again when I am half-asleep and have an exam first thing when I wake up. Okay later.

Tags: , ,

No comments (make one!)