So today concluded the 21st Ludum Dare competition. I didn't make this public due to the fact that it was a last-minute decision made twelve hours into the 48 hour contest, but I decided to enter. Dazappa did as well.
Here are our games:
Dazappa's Crystal ConduitMy own Cave EscapeOkay, so my title's not that creative. Nor is my game itself, really. Point is, the two of us entered this competition.
For those who are unfamiliar, the Ludum Dare is a 48 hour game making competition. Competitors are given precisely that long to develop and "perfect" their games. Hence, my engine has serious physics and collision issues, and I imagine dazappa would have preferred more time, too. This year, with Notch from Minecraft participating, the server was so overloaded with interested peoples that they had to extend the deadline to give people a chance to wait out the server issues.
While, given the competition (especially this time around), it is astronomically unlikely for either dazappa or me to win, that was not the reason I entered (though I'd certainly not mind if one of us did win). I can't speak for dazappa, but I entered for three reasons,
1) To put ENIGMA to the test and show what it can do
2) To register a blip on the engines radar in the name of ENIGMA
3) As a learning experience for myself
At this stage, you'd think I wouldn't have that much left to learn about game design, right? Well, you're wrong, but that's beside the point. I wanted to learn not about game design itself, but game design in ENIGMA. Using only the features of ENIGMA a typical user would utilize, I discovered quickly a small number of bugs, quirks, and features that should be added. While most of the features I thought would come in handy were already planned, I did manage to come up with a few extras. Here is my list of discoveries made, bugs to fix, and features to add:
- Any sort of iterator tampering in draw will kill you. Not just depth change; room change as well.
- Initializers are ignored while parsing with() statements. For example, with (object) { int a = x; } will use x from the calling scope.
- Script scoping is incorrect in with(). This->script() is used when ::script() should be instead (::script is a global copy that sets scope manually via with()).
- LateralGM's highlighter and code editor in general suck. We should probably finish the one I mostly finished.
- Multiple inheritance is a must for complicated games. Also, LGM has an inheritance loop checking issue in which the check seems to return parent->parent != null.
- switch() {} doesn't coerce enums; this is an issue because switching sprite_index will be an O(N) operation unless you hard-code the IDs.
- The instance creation codes in rooms should be bumped up in priority, and it should be easier to enumerate and manage those codes.
- It's high time for ENIGMA array literals. And, well, a new type resolver so it can tell what's an array.
- The room editor needs a way to drag select and move efficiently.
- Design mode would really expedite platform gaming development, and a slow-motion feature should be added to it (something to quickly set room_speed.
- Since the collision system depends on the positioning tier, which contains hspeed and vspeed, an option should be allowed to let the user control the two.
- I found myself really wanting the planned "Overworld"/"Map" resource.
- I've still not fixed local const.
Other issues: Does instance_count grow with each create event at room start in GM as it does in ENIGMA?
Other than that, I was mostly in a pissy mood at IsmAvatar, because I encountered about 60 problems that EGM would fix. No ++, no alpha channels in the default format (GM6) (This cost me another our of work), no way of declaring C-level globals.
Also, polygone's framerate fix fucked me a bit, because it only fixes it on his computer, and packing AL in with the engine made filesizes huge. Something needs done about those two, too.
At that, I'm tired. Good night.
If anyone else entered the Ludum Dare, do let me know.