Jonathan Decker on the Web

This page displays information about some of the projects I've done, along with media and web executables where available.
I'm currently working on a twitch Taxi game tentatively named FareWay. It's a top-down, single-screen game with a view of an entire city. Your goal is to pick up as many people as you can before the day ends. The game will have multiple days, scripted events and a small amount of narrative. I am building the game from scratch and talking about the process every week on my Tumblr .

Color Picker
Color blindness affects 8 percent of men and 0.5 percent of women. Designers looking to create UI elements for the dichromats use color blindness simulating transforms, like the one in the Coblis tool . This reverse process of choosing colors and checking if they are discernible is unwieldy. With this tool I'm trying to create something that lets you choose discernible palettes directly. Currently the tool demonstrates the use of confusion lines in CIE XYZ space to simulate dichromacy.

Archived Live Stream Chat using Popcorn.js
I recorded the chat during a live stream of the game State of Decay on the gaming website Giant Bomb. To do this, I created a local node.js server which stores HTTP get request data to file. Then, I opened the console in Google Chrome, and inserted a callback which is invoked when the chat window updates. This callback removes the new message, parses out its elements, and sends it to the node.js server to be stored. To tie the chat to the archived video, I use the popcorn.js library. I copied the style of the live stream page so I could duplicate the presentation. Popcorn allows me to add a callback every time the video advances, so every second I repopulate the chat window with comments that would have appeared at that moment during the live stream. I synced the chat to the video by manually determining the time-stamp of the first moment of the video.


System of Bound Particles for Interactive Flow Visualization
For my master's thesis work at UMBC, I have developed a particle system that runs almost exclusively on graphics hardware in order to create an interactive visualization of time-varying vector field data, such as wind speed data of hurricanes. Small sets of the particles are bound together with spring constraints, creating deformable elements that tumble as they move, demonstrating vorticity within a given field. My application runs in XNA game studio, and is able to simulate a large number of custom, elastic elements at real-time rates. It has not been run on the Xbox 360, since it requires access to large repositories of data. Used with the Hurricane Bonnie dataset provided by Dr. Scott Braun of NASA and 2D CFD fields provided by Dr. Nene of Georgia Tech. 2D nature convection example shown in videos uses the field demo1.dat, available at the CFD Modeling webpage.


Leveraging Graphics Hardware to Accelerate Dynamic Programming
Group project for Advanced Algorithms. We developed a new framework for solving dynamic programming problems on widely available graphics hardware. Our method performs dynamic programming at three distinct levels of parallelism, each mapped to a specific layer of hardware and optimized for the memory structure of each layer. We perform linear-space processing at the highest level of the dynamic programming, a quadratic-space algorithm at the middle layer, and a different linear space algorithm on the final layer. The combination of all three running on a single CPU and Graphics Processing Unit (GPU) is a fast, flexible, scalable solution to dynamic programming problems belonging to the Gaussian Elimination Paradigm.

Colleagues: John Kloetzli and Brian Strege

Bird Watching Exhibit Visualization
I worked with Kathy Marmor to create a visualization for her interactive, surveillance technology inspired art exhibit, Bird Watching. Cardboard 'satellites' positioned throughout the space detect visitors with infrared sensors. The visualization is projected onto a wall of the exhibit, and tracks the predicted movement of the visiting patrons using only readings from the sensors. Readings become positions on an abstract map of the exhibit, and multiple paths through the space are determined using a speed threshold.

It was a very challenging project and a good experience to work one-on-one with an artist to create an application. I implemented the visualization as a Isadora Plugin using the OpenGL graphics API. Kathy Marmor was using Isadora already to create dynamic sounds based on the sensor readings. I created this plugin to work seamlessly with her existing system.


Top-down shooter
Group project for Graphics for Games. We developed a top-down shooter with time-based challenges where enemies grapple onto the player's ship in order to hinder their progress. I personally implemented the fractal terrain, which is generated in tiles slightly larger than the screen in a separate thread. The terrain blends between different textures depending on height and has trees rendered on its surface using point sprites. I modeled the enemy ship in Blender.

Colleagues: John Kloetzli and Brian Strege

Simple Ray Tracer
I have built a simple ray tracer which reads in files generated by Standard Procedural Databases (SPD) and produces an image of a scene using the basic lighting equation. It is able to detect concave and convex polygons, as well as spheres. Click the launch button to see an animation generated using five ray-traced images which creates the illusion that the gears are continuously rotating.


Self-Organizing Map Solving the Traveling Salesman Problem
A Self-Organizing Map (SOM), a type of Artificial Neuron Network (ANN), which attempts to find the optimal traveling salesmen tour between 10 points in a grid. Click the yellow circle to begin the process. In order to facilitate such complex computation in the Flash environment, at the end of each iteration of the SOM, the yellow circle is called to animate to its next frame. Once on that frame, the animation halts and the circle calls for the next iteration of the SOM. This repeats until convergence. The process can be stopped at any time by clicking the circle.

Izzy Worlds
A cool platformer I started work on but never finished. Move Izzy (the little red dinosaur) along a planet using the left and right arrow keys. To jump off a planet hit up, or kick off with the down arrow. You can also rebound off a planet if you kick just before you reach it.

Servo Robot 'FlipBot'
For a special topics course about robotics, I was able to design and build a original robot using three servos and a programmable circuit board. Once built, our robots competed in sumo matches, where the objective was to push the opposing robot out of the ring. We began by first designing a virtual prototype of our robots in the simulation program Breve. To the right are two videos of my flipping robot going up against a more traditional design. I think it's obvious that my design was never a good 'SumoBot', but I just love the design.


Defend the Pichu Blimp
A complete game I made in Flash using Pokemon characters (All rights reserved). The player switches between three rodents trying to save their blimp from an aggressive flock of birds. Game includes a complete tutorial and music score by my friend Ben Stryker.