Hi everyone, I'm back from my road trip to Virginia and will be
finishing up my postmortem. It's been great to see everyone's
postings, and I'll begin blogposting soon.
See you on IRC later :)
This is a repost from my blog:
BOURTANGE POSTMORTEM
Overall I’m satisfied with my lisp game. My major goals were to learn
lisp (to a shallow yet useable degree), learn a little about
functional programming and last but not least to end up with a
playable game. I feel I hit those goals and as an added bonus I’ve
enjoyed programming in lisp so much that I’m looking for another
project to start working on. That said, here is an explanation of what
went into the game, what went right and what went wrong.
Built with
I made the bulk of the game using sbcl with cl-opengl for graphics and
TextMate for editing. I wrote some custom ‘build’ scripts to send my
monolithic game file to the sbcl repl. The development cycle was
similar to what you’d expect from programming in C,
‘write->compile->test’. Later on after my first version I got help
from the guys at #lispgames (irc.freenode.net) (sykopomp, xristos, 3b)
with setting up emacs and using slime-connect, as well as setting up a
.asd for my game. Using the interactive dev env that emacs + slime
enables is really a liberating way to program.
What went right
* My game is playable! More often than not I leave my game projects in
an unplayable (sometimes not compilable) state. I’m proud to say that
this game is playable.
* The difficulty of the game goes up over time.
* I tried to program in a very functional way, which worked most of
the time. It enabled my program to easily reset, and should allow for
a fairly easy save function, but I never got into file i/o to finish
that.
* The colors are cool
What went wrong
* Writing in a functional way messed me up a little. I tried my best
to make things functional, without really having a firm grasp on what
that means. I would give up on writing functionally and go back to
just making things work when the going got tough. This means that in
the end, I feel the code is naive and dirty.
* Collision detection is very simple. This would be fine if things
didn’t move very fast, but when using gravitational equations for
motion, things get very fast when they get very close. In order to
keep the collision detection simple I put limits on how fast things
can move. It works, but it’s dirty.
* After something gets hit I recalculate 360 points of an arc to
display the life left. Halfway through development I wanted to have
all the circles be drawn using ONE list of points generated ONCE. I
could draw some percentage of the points to represent life lost. When
I tried to refactor for this, drawing became very, very broken. If I
had more time to work this out I think the game would be much faster
and much smoother.
All in all, I’m pleased. I hope you play my game, and I hope you have
fun playing it!
--
Schell Scivally
schell(a)efnx.com (efsubenovex(a)gmail.com)
http://blog.efnx.comhttp://github.com/efnx
Alrighty. Here's what I've been able to come up with in a month's time.
SUPER Bourtange! (not to be confused with Schell's "Bourtange") The source
is here: http://github.com/lostandsupine/super-bourtange
I wrote it in clisp, on a netbook running windows, using cl-opengl. I had a
really fun time making this. Seems like most of my lisp projects never get
finished, so it's nice to have an external deadline to keep me on track.
It's a very asteroidsy space defense game. Asteroids fall down, and you
have to shoot them. You've got guns, missiles that follow a parabolic path,
and a whole menu full of upgrades.
This was my first experience with collision-detection, and rather than do
any research I just made my own from scratch. It doesn't seem very
efficient, but it works on a small scale game such as this.
Anyway, thanks to the hosts of ILGE 2010, and thanks to Schell for telling
me that this was going on in the first place!
-aaron
Hi lisp gamers,
I started late and didn't have much time to work on my game. Using
lispbuilder-sdl I built an editor and the beginnings of a 2d side
scrolling hack'n'slash game. I thought I'd shoot for something like
castlevania as you can tell from the candles.
The code is pretty much garbage. I coded fast and furiously in my
limited time available without care for anything but git'n'r done. I
only got as far as a man who can run and jump around the level and I
only got collision detection on his feet. So he can walk through
walks. This is important to know if you wish to walk through the demo
level that I put together. In the demo your goal is to find your way
to the DANCE POTTY!
http://github.com/sabetts/evilslayer/
There are downloads for windows and osx. Sorry linux, you lose. You
might have to kick the code a bit to get it running; I built it
against outdated versions of lispbuilder-sdl.
Oh, in case you never played those old 2d games: press up to go in the doors.
-Shawn
Robotime is a robot-like game, you can find more infos here[1], with a
screenshot and some kind of post-mortem. There's also a Mercurial
repository here[2].
If you have troubles when trying to launch it, you might set
*resources-dir* to the complete path to robotime/resources/ in
graphic.lisp (I didn't have this problem, but some people did).
Every informations about dependencies etc. can be found in the first
link.
Quentin
[1] http://awesom.eu/~acieroid/ilge/robotime.html
[2] http://hg.awesom.eu/robotime/
I have a fairly long write-up on my "about" page now, including a
postmortem, for anyone interested in that sort of thing.
http://norstrulde.org/ilge10/about.html
Thanks to everyone who participated and made the Expo so much fun. If
you have a fast browser, you can try out the final versions of my
games here:
http://norstrulde.org/ilge10/index.html
Eric
Well, I started off in July wanting to do a rewrite of Bunny
Slayer<http://code.google.com/p/blackthorn-engine/wiki/BunnySlayer>,
but that didn't really get off the ground. Instead, I ended up working some
libraries and did some general cleanup.
Blackthorn Starter Pack
One of my goals for a long time has been to make it as easy as possible to
compile and run my game from source. As a step in that direction, I created
the Blackthorn Starter Pack, which is basically a tarball with all the
libraries you need plus a little glue to make things work. See the wiki link
for more information and downloads.
http://code.google.com/p/blackthorn-engine/wiki/BlackthornStarterPack
Escalator
For fun I've been working on Escalator, which is yet another experimental
object system for Common Lisp. Escalator is inspired by this blog post on
Entity Systems<http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-…>,
which are supposedly used in the MMO industry. Escalator is my attempt to
provide idiomatic support for Entity Systems in Common Lisp as a
high-performance alternative to CLOS.
http://bitbucket.org/elliottslaughter/escalator
--
Elliott Slaughter
"Don't worry about what anybody else is going to do. The best way to predict
the future is to invent it." - Alan Kay
I wrote TB Tanks for ILGE2010. TB stands for "turn based" and also
happens to be a transposition of my initials. Clojure was my dialect.
The game should work on any 1.5 or better JVM.
* Source: git://github.com/netguy204/1MonthLispGame.git
* Screenshots: http://wiki.github.com/netguy204/1MonthLispGame/
* Releases: http://github.com/netguy204/1MonthLispGame/downloads
--
This has been fun!
I've really enjoyed participating in ILGE2010 and am especially
thankful for the friendly and technically excellent community I
infiltrated in the process.
This is my first >100 line Lisp project. I've read countless tutorials
and PG evangelism essays and I've even worked through the first
chapter or so of SICP and written my own junky lisp dialect but I
didn't really "get it" until now. This project has opened my eyes to
the infinite flexibility of the lisp family of languages and the
community of creative and exploring minds that gives them life.
This community rocks. Thank you all.
What went well:
* I always have too many projects going on at once but this was a rare
case where I was able to stay focused and interested in one thing for
the majority of the expo. My attention only really disappeared when my
copy of PAIP came in the mail.
* I developed in spurts that were typically about an evening long. I
started each spurt with a goal I thought could be achieved in the time
and I ended with something functional at the end of each.
* Almost every other spurt was focused on cleaning up code and
abstracting code and concept duplication I had failed to noticed
during the previous spurt.
* I made many releases. About every other spurt or when I could make a
screen shot that looked cool in some new and interesting way. This led
to me doing lots of bragging on IRC which really helped to keep me
motivated.
* Building graphical effects is fun and it's nice to be able to brag
and demonstrate cool stuff to non-programmers. I found that it helps
keep me motivated. My wife is a non-programmer so being able to show
her something graphical and take advantage of her inspirations as well
made this even more enjoyable to work on.
* The Lisp development work-flow is a thing of beauty. Lisp + Slime is
a far more effective development environment than Java + Eclipse (my
day job.) After each evening of coding in the promised land of Lisp I
was pretty disappointed to have to spend the following day in the Java
desert. It was a bit like going repeatedly going back into Plato's
cave and having to pretend that I didn't know what all the shadows
really were.
What Went Badly:
* Every time I sat down and focused on designing something general
("proper" software design) I ended up taking forever and producing
something useless. Every time I just coded like a monkey on fire I
ended up with something dead-ugly that I could then abstract and
generalize into something broadly useful. I had to rediscover this
truth at least 3 times. I should have done more flaming-monkey and
less aspiring architect.
* Speaking of monkey like critters: The Java sound API was designed by
lemurs and documented by them as well. That was 5 days of zero fun.
* While I'm griping about bad code: The JLayer API (which, I gather is
the favorite java hotness for decoding mp3's) is not well designed. I
lost a good 2 days to an undocumented side-effect of a particular
function call. (I really didn't expect it to be trashing my decode
buffer behind my back. Sheesh guys! At least document that sort of
thing!)
* I didn't spend the time optimizing that I should have. This is an
unusual mistake for me since usually I optimize too early and before I
have hard data. This time I know there are some serious inefficiencies
in the way I'm rendering and I just didn't get around to making it
better. Expect this game to be a resource hog.
That's all for me. Thanks again to everyone that made this expo such a
great experience. I've enjoyed getting to know this community and
getting a lot more experience in Lisp.
Regards,
Brian Taylor (wubo)
Blogificated here: http://aerique.blogspot.com/2010/08/ilge-2010-post-mortem-engine-troubles.h…
This is a ASCII repost of the above link:
1 Progress
~~~~~~~~~~
I have made very little progress since the last report, mainly due to
the little time that was available to me. Only two things were done:
1. The source code was cleaned up a little.
2. A windows binary was made (OpenGL only).
In the short term I will not work on ETOTP anymore but perhaps for ILGE
2011 or another challenge or expo I'll continue where I left off.
2 What Went Right
~~~~~~~~~~~~~~~~~
- Making wrapper functions in C for Ogre's C++ methods and adding them
to ECL from C using ECL's API. I used this approach because the
inverse (making the C wrapper code from Lisp) gave me segmentation
faults and didn't get me very far about 2 years ago. (Note: this was
using ECL functionality, not CFFI for which there's Okra.)
- Compiling a C program on both Linux and Windows that was (dynamically)
linked to ECL, Ogre and OIS. This C program can, for example, start a
game right away and quit back to the OS but it can also provide a CL
REPL (like ECL's `si:toplevel') so one can interactively play with a
3D scene. Since it's just a plain CL one can load extra packages and
perhaps start Slime.
3 What Went Wrong
~~~~~~~~~~~~~~~~~
- Compiling a statically linked binary on Linux. This didn't go as
easily as I had hoped and was starting to eat into my time budget.
- ManualObjects and shadows. I had to resort to Ogre's prefab entities
to get shadows working the way I wanted in the time that I had
available.
4 What I Learned
~~~~~~~~~~~~~~~~
- ECL is a really good option for embedding a CL implementation in C(++)
programs. Juanjo has been working on ECL for years now and he's still
going strong. Questions on the mailing-list are generally answered
within hours.
- One doesn't just add "-static" to a build rule and be done with it :-)
- Perlin noise is usable to animate objects with. Definitely for
prototyping since it's so easy and quick to implement.
- I should brush up on my maths.
5 Source & Binary
~~~~~~~~~~~~~~~~~
The source code and the Windows binary are available here: http://www.aerique.net/software/etotp/.
I have not given the source code its separate GitHub repository since it
will be added to Okra.
5.1 Linux Dependencies
======================
ECL (10.4.1) configured "--with-cxx". (Feel free to try without it, I
haven't.)
Debian: libogre-dev libois-dev ogre-plugins-cgprogrammanager
5.2 Windows Dependencies
========================
I develop on Linux but the build is checked and tested on Windows using
MinGW and MSYS. Either MSYS 1.10 or 1.11 was used, it doesn't really
matter. The MinGW release that was used is TDM-GCC 4.4.1 but I see
there's a 4.5.0 release out now.
Ogre SDK 1.6.1 for MinGW (there's no later 1.6.x SDK for MinGW). You
can try the 1.7.x SDK for MinGW since the Ogre API is pretty stable, but
I can make no guarantees that it will work.