Note: much of the functionality of gamehelpers was moved to on May 3, 2020. If you used that code, change import arsd.gamehelpers; to import; and add game.d to your build (in addition to gamehelpers.d; the new game.d still imports this module) and you should be good to go.

This module now builds on only arsd.color to provide additional algorithm functions and data types that are common in games.



enum Dir

Represents the four basic directions on a grid. You can conveniently use it like:

enum DirFlag

Directions as a maskable bit flag.


void crossProduct(float u1, float u2, float u3, float v1, float v2, float v3, float s1, float s2, float s3)

Calculates the cross product of <u1, u2, u3> and <v1, v2, v3>, putting the result in <s1, s2, s3>.

DirFlag dirFlag(Dir dir)
Point[4] directions()

The four directions as a static array so you can assign to a local variable then shuffle, etc.

Grid!ubyte generateMaze(int mazeWidth, int mazeHeight)

Generates a maze.

Point[] pathfind(Point start, Point goal, Size size, bool delegate(Point) isPassable, int delegate(Point, Point) d, int delegate(Point) h)

Implements the A* path finding algorithm on a grid.

Point randomDirection()

A random value off Dir.

auto randomDirectionCycle(int cycleCount)

Cycles through all the directions the given number of times. If you have one cycle, it goes through each direction once in a random order. With two cycles, it will move each direction twice, but in random order - can be W, W, N, E, S, S, N, E, for example; it will not do the cycles in order but upon completion will have gone through them all.

void rotateAboutAxis(float theta, float x, float y, float z, float u, float v, float w, float xp, float yp, float zp)

3D rotates (x, y, z) theta radians about the axis represented by unit-vector (u, v, w), putting the results in (s1, s2, s3).

void rotateAboutPoint(float theta, float originX, float originY, float rotatingX, float rotatingY, float xp, float yp)

2D rotates (rotatingX, rotatingY) theta radians about (originX, originY), putting the result in (xp, yp).


struct Grid(T)

Represents a 2d grid like an array. To encapsulate the whole [y*width + x] thing.



Massive change on May 3, 2020 to move the previous flagship class out and to a new module,, to make this one lighter on dependencies, just containing helpers rather than a consolidated omnibus import.