Ian Malerich

imGoban

Go Playing Software

github
C++
19x19 Game
Two computers play against each other on a 19x19 board.
Cross-Platform desktop application for playing the board game Go. This is one of my currently active projects I've continued to develop. Supports any grid size greater than 6x6. Go playing programs, such as GnuGo, can be attached using the custom implementation of the Go Text Protocol.

The application is written in C++ using my Adelie2D game library. Planned features include local networked play, GUI controls to replace the current config files, and a move branch navigator.

imRayCaster

3D RayCaster in CUDA

github
C++
CUDA
OpenGL
19x19 Game
A simple scene rendered using assets ripped from Wolfenstein 3D.
A pretty simple project which implements a ray casting 3D rendering in CUDA. Rendering is done to an OpenGL texture so results can be displayed in real time, allowing the user to navigate the scene. The project could have been written in OpenGL shaders alone, but I wanted the opportunity to experiment with working in CUDA.

Currently supports basic features such as tile based walls, floor, and ceiling. A skybox can be included and displayed via omitted or transparent ceiling tiles. Similarly a lower ground layer can be included for omitted or transparent floor tiles, allowing for water or lava effects.

Barvis

Music Visualizer for UNIX Status Bars

github
C++
GStreamer
Xlib
OpenGL
Barvis
Barvis used as a background behind the yabar linux status bar.
Many applications can be used to add a music visualizer to your desktop wallpaper, but I wanted something that would work well when confined to just a narrow system status bar. Barvis reads the output audio of your system using GStreamer and then creates a simple visualizer effect in OpenGL shaders.

Currently the project requires a separate status bar application to be run on top with a transparent background, but future updates could replace that need, creating an entire OpenGL powered toolbar. Nearer term plans include color configuration through a users XResources file as well as additional built in visualizer styles.

imRTCL

GPU Ray Tracer

github
C
OpenCL
OpenGL
Ray Tracer
A set of spheres rendered in real time with simulated soft shadows and reflections using the blinn-phong lighting.
A fairly simple Ray Tracer built to run in Real Time using a high performance GPU. An empty texture is created using OpenGL and passed to OpenCL. The Ray Tracer code is handled by an OpenCL kernel which outputs to the OpenGL texture to be displayed to the screen once the render is complete.

Currently supports basic materials (diffuse, specular, and reflection) and rendering a number of different primitives including spheres, planes, and triangles. 3D meshes can be loaded as a set of triangles to be rendered, though anything but the simplest of models will be too expensive to run in real time.

im3D

3D Renderer in Pure C

github
C
OpenMP
Sample Render
A textured model rendered using im3D.
This 3D renderer implements the triangle rasterization technique, replicating the work that an API such as OpenGL or DirectX would do for you on the GPU. Unlike imRTCL, this project runs entirely in software on the CPU.

One of the goals of this project was to minimize the dependencies needed, creating as simple (to compile) of a renderer as possible. To that end, the project is written in pure C, provides its own .obj model importer, and can be compiled on almost any system out of the box with only a modern C compiler. The project uses the excellent stb image importer library, which provides all functionality in single-file headers. OpenMP is also used to speed up the render time on multi-core CPU's.

Adelie2D

Lightweight Game Library

github
C++
Allegro
Space Invaders Game
A simple space invaders game built using the Adelie2D library.
A lightweight personal game library/engine for simple 2d games. I like to do things from scratch, so this project serves to collect many useful and reusable features to accelerate the development of personal games and projects.

It is built using the Allegro library which provides a simple 2D rendering layer on top of OpenGL, as well as platform independent input. Adelie2D expands upon this by including resource management, scene and object management, animations, and some basic math. Features are usually expanded as needed for other projects, with imGoban currently driving the majority of new features.

Kaiju Smash

Ludum Dare 33 "You are the Monster"

github
C++
Allegro
Kaiju Smash
The venerable Kaiju smashes his way to victory.
My entry into Ludum Dare 33 under the theme "You are the Monster," a rather literal interpretation of the events theme. The user controls a glorious Kaiju as he earns points by smashing vehicles in 3 lanes of traffic, while dodging incoming missiles intended for his demise.

As is the nature of the Ludum Dare game jam, all assets and code were completed over a 48 hour time period. The game performed reasonably overall in the competition notably making top 100 out of 2725 for graphics/art.

Reclaim

HackISU Mini Game

Java
LibGDX
Reclaim
The peasant farmer seeks to reclaim his gold stolen by the heroes of his world.
Made for my first Hackathon at Iowa State University, Reclaim tells the story of a video game NPC who had his gold stolen by heroes. The player sets out with their loyal pitch fork to explore the world and reclaim their lost treasures.

The project was completed over a single weekend and included a short (yet cheesy) opening and closing cinematic.

Artillery

Because Tanks are Cool

github
Java
LibGDX
Artillery
A tank lets out some of its hatred for small hills.
One of the many unfinished projects in my arsenal, but I'm still very happy with what I had. Intended as a turn based multiplayer combat simulator, the main gimmick was the ability to modify the terrain in real time with tanks and mortar troops.

Some features I did get around to implementing included some very simply local networked play, three unique troop choices that could be spawned to aid your leading tank, and an upgrade system to improve canon fire. Upgrades included shots that split in the air, on the ground, bounced, or exploded into fire which burned in an AOE, with split shots being particularly excellent at crippling my real time terrain destruction code.

Bloom

Ludum Dare 29 "Growth"

Java
LibGDX
Bloom
Actual gardening is probably more fun.
The first game I ever finished. Horrificly boring, it's only redeeming qualities were a pleasant art direction and that it worked at all. The goal was to use rain water to help the tree bloom while simultaneously keeping the tree from drowning.

Adelie3D

Free Software for All

C++
OpenGL
Bullet Physics
Qt
Adelie3D
Well objects are used to stress test the capabilities of the scene editor.
For the longest time my goal was to have a complete and working 3D engine. Although the project has long since been abandoned, I'm pretty pleased with how close I got and would like to revisit this goal sometime in the future. This project predates my formal education, with code not for the faint of heart.

The engine was implemented in pure OpenGL, and provided a simple cross platform editor implemented in Qt. Scene files could be saved from this editor and then loaded into a game which in theory would use the engine. The project supported some scene and resource management, a terrain engine with multiple levels of detail, and some basic lighting effects.

Ink()

You Gotta Start Somewhere

C++
DirectX 9.0c
Bullet Physics
Win32
Ink Editor
The editor for the Ink() engine, in this screenshot the brush tool is used to paint vegetation on terrain.
Notable as the first major project I worked on and the earliest for which I still have screenshots. The goal was a simple 3D engine using DirectX 9. I had the basic engine done with a simple editor implemented before rebooting this project in OpenGL, calling its replacement Adelie3D.

This is the project that actually taught me C++, with a proper understanding of pointers only clicking a few weeks after having already started.
The Allegory
Inside the dark caves of the Allegory, featuring industry leading water effects and normal mapping.
I did create a tiny project using this engine, loosely inspired by Plato's Allegory of the Cave. The project provided a small world for the user to explore displaying the engines technical prowess in full glory.