Showing posts with label ludum dare. Show all posts
Showing posts with label ludum dare. Show all posts

Friday, January 31, 2014

Going Pro

Okay, yeah, wow.  It's been way more than a week now since my last post.  I know.  I know.  But I haven't abandoned this blog, and I determined at least not to let the entire month of January go by without an update.  (Hey, it's still January in my time zone.  I don't know when it is where you are.  Though in any case it's very unlikely that it's still January when you're reading this...)

Furthermore, in the interests of doubling down and breaking two promises at once, this post will not be about Eamon, as previously professed.  Yes, I will get back to that, and I won't take another month and a half to do it.  But something happened related to the last post that I felt I ought to mention first.

So, last month for the first time I attempted Ludum Dare, a game competition in which participants create a full game from scratch in 48 hours, based on a provided theme.  I didn't particularly care about the competition, per se; I just wanted to see if I could create a game that quickly.  Perhaps somewhat audaciously, I decided to see if I could in 48 hours (actually more like 24 for various reasons) create a game in javascript and HTML5, despite never having done so before.  Somewhat to my astonishment, I succeeded.  My creation may not have been a great game, but it was a game, and it more or less worked, and it even had a level editor.

Halfway through the last of five levels of Underequipped.

So far, that's all old news; I went over all of that in my last post.  But there's one thing I didn't mention in my last post, for the rather logical reason that it hadn't happened yet.  I didn't really follow up much with Ludum Dare itself; the guidelines recommended rating other games in order to get votes, but I was extremely busy in the weeks following the competition, and I never got around to doing so—as I said, I wasn't really in it for the competition anyway; I just wanted to make a game.  (I do feel a little guilty about not supporting the other entrants by voting and commenting on their games, though... but I seriously had virtually no free time in that time period.)  But a few weeks ago, I told some friends about what I had done, and showed them the game.

Little did I know (to use the most melodramatic sentence opening possible) that one of said friends was in the process of putting together a video game company.  And he didn't have a programmer.  He and his business partner were planning on teaching themselves programming and trying to tackle the job themselves, but at that rate he expected it would be a year and a half before their first game was out.  But he was impressed enough with what I had been able to accomplish in 48 hours (though I hadn't really thought it was all that impressive) that he asked if I'd help him out with his game.

I agreed, and he invited me to come to his place that Friday so he could show me what he had so far.  He and his partner were putting together the game in Unity; I had heard of Unity, of course, but I knew very little about it—and since it was, I thought, more of an engine than a game creation system, per se, it wasn't on the agenda for this blog, either.  Still, I thought I ought to be prepared, so I did some reading up of the Unity manual, as well as a tutorial on C#, the language he and his partner wanted to use for the scripting.  I didn't get all that far before our meeting—only as far as Creating and Destroying Game Objects in the Unity manual, and Using Attributes in the C# tutorials, but at least I knew a little more about than I had.

This is just the Unity splash screen.  I can't show you the specific game I'm working on, not because there's nothing to show, but because I think at this point it's still supposed to be kind of a secret.

So, feeling a bit less prepared than I would have liked to be, I showed up on Friday, and he told me a little more about the game, and showed me what he and his partner had done so far.  Most of the graphics were in place for the introductory level, but none of the scripting had been done yet.  I figured I may as well see what I could do, so I started right in and tried getting things working, with a lot of help from web searches and posts they turned up on Unity Answers.

And so, somehow, despite never having touched Unity before—or C#, for that matter—I ended up pretty much programming the core functionality of the level that evening.  This impressed him enough he offered to make me a full partner in the company.

(To be fair, though, the gameplay was relatively simple, and the coding wasn't that complicated; someone experienced with Unity and C# could probably have easily done it all in well under hour—it took me much longer only because I kept having to look up things that anyone better versed in Unity would already know.  All the code amounted in the end to under 150 lines.)

Of course, I don't know what's going to come of this.  After the first game's done, he has a lot of other games in mind to do, and his goal is to keep churning them out at a regular basis and making some decent money from them—but of course there's no guarantee the goal will be realized.  Still, it's something, and it could end up leading to something big, even if it's not guaranteed.

So, yes, the short version is that thanks to a silly little game I created in about a day, I somehow ended up becoming a partner in a video game company.  This is not an outcome I anticipated, but what the hey.  I'll take it.

Okay, my next post will seriously, seriously be up in less than a week.  And it will seriously, seriously finally get back to Eamon.  Very sorry for the delay.

Sunday, December 15, 2013

Ludum Dare: I Dared

Whoa. I did it.

Here we see about 1.9% of the 48 Hour Competition entries for Ludum Dare 28.  Mine's third from the left on the bottom row.
Yep, I finished a game for Ludum Dare 28. And seriously, I'm actually surprised that I succeeded. I'd never created a full HTML5 game before, and I thought it was probably kind of a fool's errand to try to do one in less than 24 hours. But I made it.
(Less that 24 hours, but more than 12, at least. I wasn't needed continually at the movie shoot, and managed to get in a little work on the game there, and likewise a bit at the Solstice party. Still, if I had to estimate the total time I put in at the game, I... I guess I'd put it somewhere between 15 and 20 hours? I think?)

Oh, it's a flawed game, certainly. There's plenty I'd have liked to do differently, if I had more time. But it's a complete game, with five levels (though I'd have liked to have more, of course), and a working level editor.

If anyone wants to try it out, here's the game. And you can see the source files here, should you care to look.
The final art assets for the game.  There's so much blank space mostly because at first I'd intended to have multiple frames of animation for the player and monsters...
I guess maybe I should talk about the level editor a little more, since that's, you know, kind of supposed to be the subject of this blog and all. The level editor was actually the first part of the game I made, for the simple reason that I used it to make the levels, and before I could make the bit of actually playing the game, I needed to have levels to play.

In a recent post, I mentioned that the standard for tile-based editors was to have the user choose a tile from a menu, and then paint with those tiles. I went on to opine that it made since that this method was so widespread, since was probably the most user-friendly way of creating tile-based maps. That being the case, one might expect that I would use that method in making a level editor for a tile-based game of my own.

I didn't. No, I fell back on the old Lode Runner method of selecting tiles to lay down via a hotkey. (Though, unlike in Lode Runner, the tiles are actually placed with the mouse.) Why? Well, not because I thought it was really a better approach. Really, just because time was limited and it was easier to implement. That's it. Worse yet, there's no documentation of what key corresponds to what tile, so you have to figure it out by trial and error, I guess. In case anyone wants to make their own levels, though, here's a bit of a cheat sheet: (Tiles with more than one key listed can be placed in multiple directions; the keys listed correspond to the directions up, left, right, and down, in that order.)
Q
Blank floor tile
Z
Wall
P
Pit
Y
Cracked Wall
M
Bars
V
Locked Door
2/4/6/8
Fireball Machine
W/A/S/D
Monster Type 1
T/F/G/H
Monster Type 2 (fireball spitter)
I/J/K/L
Monster Type 3 (invulnerable to arrows)
B
Gem
X
Start
C
Goal

An early test of the level editor
I do not expect to win any awards. (I'm not sure what awards there are anyway.)   Even if there weren't more than 1200 entries (wow!), I'd be under no delusion that my first attempt at an HTML5 game would have any chance of placing. I wasn't in this for the competition. I'm just happy to have finished a game.

And hey, if I managed to finish a game on my first time attempting Ludum Dare, and after having gotten such a late start and having so many other commitments to deal with... yeah, I'm definitely doing this again next time. Unless it happens to fall on a weekend even busier than this one, I guess.

For the record, here are a few things I would have liked to have done differently, had I had more time:
  • Better graphics. Obviously. In particular, I'd have liked the player and the monsters to be animated. I'd originally intended for them to be, but I realized there'd be no time to do multiple frames of animation if I still wanted to have time left for the coding. Had I more time, I'd also intended for the player sprite to have different graphics for the direction he's facing. And maybe also for the item he chose.
  • More levels. This is another big one. Five levels is something, but it isn't much. I'd intended for a theme for the levels to be that there's a fairly obvious and straightforward way through with one item, but if you wanted to pick up the gem you'd have to use a different tool and take a less obvious and more tortuous route.
  • Better collision detection. Yeah. Sometimes the player kind of slides his shoulder through a wall. I was trying to improve this right up until the deadline, with limited success. I think I know now what I'd have to do to fix it, but of course now I don't have time.
  • Boundary enforcement. Unless your map is surrounded by walls, there's nothing prohibiting monsters, or even the player, from wandering off the edge of the map and getting lost. For this reason, I recommend surrounding all your maps by walls. (Though unfortunately I realized after the submission deadline has passed that there is a way to break out of the walls and wander out of bounds in one of the game's built-in levels... oh well.)
  • More error catching in general. The program's pretty sloppy right now in general as far as letting the user do things it probably shouldn't. For instance, it's possible to put in multiple starting points in a map. This doesn't crash the program, or anything—basically, because of how the program reads the map, I'm pretty sure it should just use the lowest starting point, or in the case of a tie the rightmost of those tied for lowest—but it still should probably have been disallowed.
  • As briefly referenced in the instructions, I'd wanted to have pressure plates that would create or cancel walls of energy or something elsewhere in the maps.  I realized pretty early on that I wasn't likely to have time to implement that, though, which is a bit of a pity since it could have led to some nice puzzles.
  • Sound. A scream when the player falls in a pit, a crackle of a fireball... would have added something.
  • A more attractive intro and instructions. The all-text intro that's there now was of course quick and easy to create, but some graphics and a better layout would have greatly improved it.
  • A better win routine, too. Slapping "You win!" over the screen in big letters is arguably somewhat anticlimactic.
  • Cookies to keep track of what level the player reached if he quits the game and comes back to it later.
  • Possibly implementing some simple data compression on the maps, so they're not all stored as strings exactly 256 characters long with lots of repetition.
  • A catchier name. Seriously. "Underequipped"? What was I thinking?

The screenshot of my game I submitted to the Ludum Dare site.
Next post will be about Eamon, I promise.

And for now... I'm going to get some sleep.

Here Goes Nothing: Ludum Dare 28

Well, I said I'd have more free time starting after the 9th, but that seems to have been a little premature; while I did have an important deadline to meet on the 9th, it turned out there was a little more to do that I got a few days' extension on, as well as other things to catch up on that I'd put off because of that deadline, so my schedule didn't clear up quite as quickly as I had (rather unreasonably) expected.

And I'm afraid this weekend I won't have another post on Eamon or 001 just yet. They're coming, I swear. There will be another post on Eamon soon. But something else came up this weekend that... kind of took priority.

See, in one of my first posts, reader Zenic Reverie posted a comment asking if I'd given any thought to participating in Ludum Dare. Now, Ludum Dare, for those who don't know (and didn't just follow that link to find out), is an activity that involves creating a complete game, from scratch, in 48 hours, following a given theme. I'd been aware of it before, and it's something I'd always sort of wanted to get into. I've participated in a number of other limited-time creation activities: NaNoWriMo, 24 Hour Comics Day, the 48 Hour Film Project. (Well, okay, that last isn't a solo activity, but I wrote the script and composed the score for a completed entry in the project.) As I posted in response to Zenic Reverie's question, "the main reason I haven't tried Ludum Dare is that I don't think I have enough experience in game creation to be able to work fast enough to create a game in 48 hours."

But then, I went on to write, I shouldn't let that stop me... I succeeded on my first attempt at 24 Hour Comics Day despite never having created a comic before. So I decided that yes, I'd go ahead and do it, "[a]ssuming it doesn't fall on a day I have a commitment I can't get out of".

A wallpaper showing all the games from Ludum Dare 21 (from here)

Well, I thought I was subscribed to the site and would get updates about Ludum Dare, but apparently not, because I didn't find out till a few days ago that Ludum Dare 28 was taking place... this weekend. As in, right now, as I post this. And unfortunately, I do have several commitments this weekend.

Also not helping matters is the fact that for some reason I'd assumed Ludum Dare started Saturday morning, when in fact it turns out it started Friday night, at about 6 p.m. Pacific Time. Had I known that (and really, there's no good excuse for my not having been more assiduous about checking the website for the exact starting time), I would have had a good extra evening to work on the game. As it was, I checked on Saturday morning to find that it had already started. Not that I had time to work on it that morning; I had several commitments that day, and while I was able to think about game ideas while driving to and from the places I needed to go, I wasn't able to actually get started on the game until around 6 p.m. Saturday. That means a full day lost.

And really, it's more than that, because I'm not without commitments Sunday, either. I have to be at a movie set at seven a.m., and then I've promised to come to a Solstice party in the afternoon. Which means really my window for working on the game ends before 6 a.m., and even if I stay up all night (which at this point I guess I will; there'll probably be coffee at the film set) I've really got less than twelve hours. (There's a chance I may have a sliver of time to work on it between the movie shoot and the Solstice party, or after said party, but it's not something I can count on.)

And of course that's not taking into account the time I'm taking to write this blog post, I guess.

What have I got done so far? Well... I've got the graphics. They're not great, but they'll do, I guess. That gives me a few hours to do all the coding.

My graphics, such as they are.  Pixel art is not my forte.


Oh... and as for what program I'm using to create the game, well, I'm not. I'm just coding an HTML5 game. I have worked a little with HTML5 canvas programming before, but never created a full game with it. So my attempting to write a full game in a few hours is... probably unrealistic. And yes, it has crossed my mind that this may be a hopeless cause, and that I should probably just give up. But... I want to do this, to set a precedent for myself. If I make excuses for not participating in Ludum Dare this time, even if they're really good excuses, then it's that much easier to make excuses for not doing it next time, too. But if I forge ahead and do my best to finish a game despite all my commitments and obstacles, then I'm that much more likely to do it next time. I don't expect to do well in the competition. I'm not sure I even really expect to finish the game. But I'm going to try. Yeah, it's possible the game won't get done. But if I don't make the attempt, it definitely won't get done.

The game will be called "Underequipped".

And, in keeping with the subject of my blog, it will include a level editor.

When and if I get it done.