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.
Hi guys. First off I wanted to say thanks for helping me with my initial
foray into lisp development. That said, I wrote a blog post detailing my
progress on the game so far. If you'd like to read it at my blog, it's here:
http://efnx.com/lisp-game-progress/. For those less click happy I'll post it
in this email (hopefully the formatting doesn't get all wacked out):
So after my first (almost) 30 days of learning
lisp<http://efnx.com/lisp-game-competition/>,
I have a playable game. The gameplay is a cross between tower
defense<http://en.wikipedia.org/wiki/Tower_defense>
and orbient <http://en.wikipedia.org/wiki/Orbient>. You control a
planet-base (the core) in the center of the screen. This core comes equipped
with one weapon, the core-blast. Enemies are generated at the edge of the
screen, in the spawning-belt, and are drawn toward your core by gravity.
When enemies collide with the core, the core looses life. Life is displayed
as a green outline around the core and when your core is out of life, it
explodes. When an enemy dies, which happens either by colliding with your
core, being hit by a blast or being thrown past the spawning belt, you gain
resources. Resources are displayed by purple boxes in the upper left. You
can spend these resources on extra cores and weapons in the weapon-store,
which is displayed in the upper right. Below is a screen shot of the game in
action.
[image: Screen Shot]<http://efnx.com/domains/efnx.com/wp-content/uploads/2010/08/Screen-shot-201…>
A lot of work still remains to be done, but I hit the 30 day deadline with
this first draft. Luckily, the contest hosts have extended the due
date<http://dto.github.com/notebook/2010expo.html> to
August 10th. By then I plan to fix some bugs, add more weapons, enemies, a
game-over screen and do some optimization. I feel accomplished after
learning lisp, though I know I’ve only seen the tip of the iceberg and have
found my new favorite language. To the hosts of the competition, thanks! You
guys have made me a better programer.
The source to the game is
here<http://github.com/efnx/kabukitheatre.bourtange> and
you can download and build the game as you please. Send me a message with
your thoughts on my game or my code!
--
Schell Scivally
schell(a)efnx.com (efsubenovex(a)gmail.com)
http://efnx.comhttp://github.com/efnx