Archive for games

b3ge resurrection

Trying to dust some of b3ge off… it is were I left it… half finished and broken, but maybe it can be useful.

svn checkout b3ge-read-only
cd b3ge-read-only
haxelib install physaxe 
haxelib install hxJson2
haxe -main us.versus.them.b3ge.phyxside.Flipper -swf flip.swf -swf-header 640:480:32:DDDDFF -swf-version 9 -swf-lib resources.swf -lib physaxe

The boards are svg, like welcome.svg and

I wanted to redo the way the boards work and write a custom rendered to make sprites instead of shapes, but…

In case you are feeling too lazy to co and compile: flip.swf

Click on it to get started and move with the arrow keys

Leave a Comment

blender model resources

So… trying to do it all yourself blows… here are some good spots to get models for blender you can use for whatever you want:

Depending on what you are trying to achieve.. you could also import svg’s from

Leave a Comment

animatron: isometric sprite rendering script

Ok… I actually wrote this a while ago, but after seeing fambros’APC… I realized I needed to incorporate it into the blender UI.

Check it out:

Just drop into ${HOME}/.blender/scripts

Then you can open a “Script Window” and select it from Scripts -> Render -> Animatron.

Here are some sample from a project I’m working on now:

Of course this is just 1 direction, the point of the script is to provide 360 carved into a # of directions.

Anyhoo… my python is getting a little less ridiculous.

I think this should be true isometric now… based on stuff from wikipedia and stuff

Character Demo

Here is an initial demo. There are some minor cropping issues in a few actions / directions.

update 2010.09.18: another angle correction

As I started to use the script to render tiles, I realized something was not quite right. The tops aren’t squished properly! I compared the results to Tom Gersic’s efforts and the error is obvious:

So what was the dealio? It has to do with the nutty way spherical coordinates are defined: azimuth v/s inclination. Basically, I needed to subtract theta from 90 degrees. If you think about it, people using 45 degrees don’t have to deal with the issue, since 90 – 45 = 45, but since I used the kooky 35.264 (???) I was off quite a bit. Anyway… it is fixed now. But… I have to re-render all the character animations… 😦

Leave a Comment

Triangle Islands : opengl + haxe


I was looking around for a neat demo app to show off Haxe Archetype ‘s new opengl template when I came across this really nice description of the olde triangle mountain algorithm .

The basic idea is to subdivide triangles and randomly move vertices up or down like this really nice diagram shows:

Splitting up Triangles and Making them Mountains

so maybe that looks a little confusing… but the text makes it really clear: split each triangle into 4 subtriangles. Sometimes, likeGroo , I’m a little slow of mind, so I drew a little picture to help me out:
From this, my brain part could pretty directly come up with:
 t[ 0 ] =  pt1, mid1, mid3
 t[ 1 ] = mid1,  pt2, mid2
 t[ 2 ] = mid3, mid2,  pt3
 t[ 3 ] = mid1, mid2, mid3

It looks likethis inhaxe .

Avoid the Gaps

So far so good! Split up the triangles! Raise/Lower those vertices! But…


If you just start jacking around willy-nilly (or even willy+nilly [untested with willy±nilly]), you might not notice that when it’s time to split ”t[1]” and and ”t[3]” they are ”’both”’ gunna split the segment that connects ”mid1” and ”mid2”.

Lawd help you if you raise that pt in one and lower it in the other… or even raise it by different amounts: you will gap yourself up good and you
won’t like it.

It will look something like this:
and noone will think you are cool… Not even mom and dad.

My solution is pretty uncool actually:MidPointBuddy has a getMidPoint which returns the midpoint for any segment and keeps track of them in a hash table.

Simple, but effective… but lame.

Some minor openGL points

If you know me or if you have read any of this you probably know that I completely and shamelessly rip off everyone all the time and never do my own work.

Occassionaly I might throw together some crappy third rate ascii art:
/*  p1              p2
       \` .         \
        \   ` .      \
         \     ` .    \
          \        ` . \
        p4 .------------. p3  */
var p1 = new Pt3( -f, 0, -f );
var p2 = new Pt3(  f, 0, -f );
var p3 = new Pt3(  f, 0,  f );
var p4 = new Pt3( -f, 0,  f );

but mostly I just rip everything off from the internet and never make any sort of contributions to anything.
This is the case with the app that drives this mess. “Borrowed” it from thexinf gang .
Though I may have made some teensy changes.

Here is another example… I used to have some code like this a billion years ago, but I have no idea where it is now… probably on some thumb drive…

Luckily, there is no point in knowing of remembering anything anymore and with the help of Steve Baker (who I’ve never met, but I hear is very nice), I cobbed something likethis together:
GL.shadeModel( GL.FRONT_AND_BACK );
GL.enable( GL.LIGHTING );
GL.enable( GL.LIGHT0 );
Put that together with alittle :
e1 = p1 - p2;
e2 = p3 - p2;
normal.cross( e1, e2 ).normalize();
cross(e1,e2) {
    this.x = ( e1.y * e2.z - e1.z * e2.y );
    this.y = ( e1.z * e2.x - e1.x * e2.z );
    this.z = ( e1.x * e2.y - e1.y * e2.x );
    return this;

sprinkle in a little:

to taste and off it goes.

Go get it and run it! I’m not charging you for it!

I know you have already download and installed haxe and must have subversion installed…
 % svn checkout brianin3d-triangle-mountain-read-only
 % cd brianin3d-triangle-mountain-read-only
 % haxe compile.hxml
 % ./app
I apologize for the controls: x,y,z,q,r

Check it out and see how easy it is to have a lot of fun withopengl andhaxe .

Got a better idea for a project? Fire it up with Haxe Archetype ‘s new flash tip:



  • the code
  • dhood’s blog
  • Haxe Archetype
  • opengl for Haxe
  • Basic OpenGL Lighting
  • Saddy Faces?

    Sometimes things don’t work out like you’d like… I know… it’s a bummer…


    Back when I first wrote this, this happened on my workstation, but not on my desktop:
    Called from opengl/GLU.hx line 271
    Called from GLFW__impl.hx line 16
    Uncaught exception - load.c(232) : Failed to load library : /usr/lib/haxe/lib/opengl/0,2,0/ndll/Linux/opengl.ndll (/usr/lib/haxe/lib/opengl/0,2,0/ndll/Linux/opengl.ndll: undefined symbol: XF86VidModeQueryExtension)

    they were both running Ubuntu 8.10, both with NVidia drivers… The problem ”’only”’ occurred on the workstation after some number of updates (and in 9.x) the problem magically disappeared…

    osx fix

    When I first ran this thing I got some junk like:

    DLLLoader.hx:50: added to Env: DYLD_LIBRARY_PATH Value /usr/lib/haxe/lib/opengl/0,2,0/ndll/Mac
    Called from opengl/GLU.hx line 271
    Called from GLFW__impl.hx line 16
    Uncaught exception - load.c(232) : Failed to load library : ./opengl.ndll (dlopen(./opengl.ndll, 1): Library not loaded: libglfw.dylib
      Referenced from: /Users/brian/tmp/misc/brianin3d-triangle-mountain-read-only/opengl.ndll
      Reason: image not found)

    I fixed it like this: DYLD_LIBRARY_PATH=/usr/lib/haxe/lib/opengl/0,2,0/ndll/Mac:/Developer/SDKs/MacOSX10.5.sdk/usr/lib ./app


    Leave a Comment

    facebook ball busters

    I’ve been playing with the facebook API, but figured I’d test the waters by putting my Ball Busters game up for now.

    Maybe I’ll add some high score stuff at some point.

    The JS API looks pretty neato… from what I’ve seen so far, most games use the APIs to let you easily spam your friends with game invites…

    LOL, I guess the social networking killer app turns out to be word of mouth advertising… hilarious.

    Leave a Comment

    A* gets the Gold Star

    While working on my RPG, I developed a number of ideas for how to make “AI” to go towards things, but I realized that I also needed a “perfect” solution as well.

    It’s somewhat acceptable for monsters to get stuck on walls or confused about tracking you down, after all the undead have half rotten zombie brains and lizard men never place very high in the spelling bee (is that racist?). So it makes sense they would get tweaked out occassionally.

    So when is it not ok to have imperfect pathing? When the user clicks on a spot on the board, they expect their guy to walk there. If not, it really breaks the illusion that the little guy on the screen is them and suddenly you have the suck.

    Luckily A * (pronounced “A star”) is really easy to implement and does a good job of getting from point A to point B.


    Leave a Comment

    texturing tile-able walls

    I recently wrote a small program to generate textured 3d-ish walls using seamless floor tiles.

    The input is something like and produces output like

    I used it with my dungeon digger to go from:


    Ton’s of fun!

    Leave a Comment