Sometimes I think that I work too much, but then I remember that you're not working if you're doing what you love, and then I work some more.

Started: January 2016

What is Chiaro Scuro?

Throughout the Fall semester of 2015, students in IGM (Interactive Games and Media) at RIT started a project. What began as exploration into PS4 development turned into a 12 person studio trying to pump out a small indie game by the end of the Spring semester. Chiaro Scuro was overseen by Jessica Bayliss as an independent study in which I earned 6 graduate credits.

What did I do and how?

Our goal was to make a data oriented game engine, designed around the game instead of a generic engine that can make any game. I was one of two engineers on the team, responsible for the engine design and development. One of my tasks was to write a linear memory manager, to enable greater fidelity of our data oriented design. My primary task was engineering the tools pipeline, enabling artists to produce content for our game without a need to work on the devkit.

I worked very closely with the tool team in designing the level editor for our artists. My primary involvement was getting various asset files from the artists into the engine. In order to orchestrate our pipeline of various tools I wrote a back-end program called FileCruncher. This program handled the importing, processing, and exporting of all assets and in-house binary formats. Going from Collada and PNG files all the way to in-house engine ready binary formats. For 3D asset parsing, a library called Assimp was used in order to convert DAE Collada files into a proprietary in-house engine format. Most other formats are of my own design or formed in collaboration with my group-mates and their own tools that were used during various steps of the pipeline.

Post-Mortem

I can not believe the sheer amount of experience and knowledge that I acquired throughout this project. I will look back on this as the turning point in my college education. Not only did I get to explore console development early on, but I also got to explore how to work as a team during crunch time. I can only quantify this project as an intense bootcamp that gave me more chances at furthering myself than entire semesters of courses. Thank you to everyone involved.

Started: October 2015

What is HSRC?

HSRC stands for Hot Swap Retro Cube, a game that I designed alongside a friend for a group project. This was our final project for the course, in which we were tasked with writing a game engine from scratch in C++ and present it with a game made in said engine. My task was to write the engine, while my partner would test the engine and make the game using it. Due to medical issues and work overload, the game was never made. However, I am still adding bits and pieces to the engine as an educational side project.

What am I doing and how?

The engine architecture is designed as a micro version of Unity, the AAA engine that I am most familiar with. I made this choice because it makes using my engine more familiar to others and it's design is tested and proven. The engine was developed using GLFW and OpenGL, however, I am currently taking a course that uses DirectX to teach graphics programming. As a result, I have ported my engine to DirectX and resumed development of the engine at a slow pace. You can follow my progress on my github.

What is to come?

This engine is an educational platform for developing my C++ skills and delving into engine architecture. As such, I'll keep working on this engine from time to time, constantly improving it. I will also keep it documented using doxygen. I doubt it will be the best engine possible, but it is my best educational solo-project to date. It is currently broken up due to multiple group projects trying to use it, I will be updating and re-documenting the engine in the future.

Employed: May 2015 - August 2015

What is the Virtual Heart?

The Virtual Heart project is a collection of heart simulation applications and mathematics led by Elizabeth Cherry of RIT. The goal of the Virtual Heart is to learn more about the processes of the heart and means of predicting/treating heart arrhythmias. Currently the website is in a poor shape and works on very few occasions. There is a new dev version of the site, but there have been issues with finishing it.

What did I do and how?

This was my co-op for the summer of 2015, where I worked as the sole web application developer. I developed a re-usable graphing application, named Plotter, that renders functional data on multiple graphs in a single HTML5 canvas. This application was used to port existing heart model simulations and mathematical demonstrations into JavaScript from JAVA source code. Most of the JAVA applets were originally ported from FORTRAN, leading to nearly complete rewrites of the original code when porting to JavaScript. All in all, 10 applets were ported alongside development of Plotter during my co-op with the Virtual Heart project. You can view the flagship application here, this was the largest rewrite that Elizabeth and I performed.

Post-Mortem

None of my work is being hosted yet due to technical issues with developing the new website. However, you can view all of it right here as individual HTML files, along with source code. I also wrote a very simple documentation of Plotter so that others can use it to.

Overall I am very proud of the work that I did for the Virtual Heart project. However, this was my first time working in JavaScript, so I feel that development could have gone faster and better code could have been produced.

Made: November 2015 (2 weeks)

What is R2K Load Module Editor?

R2K is a linker format used at RIT to teach assembly in some courses. I was tasked with a final project in my CS course that involved reading in R2K Load Module files and allowing the user to navigate them and edit them through a C console application. The project was akin to a client asking for a product with strict guidelines and no room for error. It involved reading documentation on the R2K format and architecting our own approach to the problems the "client request" presented.

What did I do and how?

The project guidelines were very vague, so a lot of time was spent developing test cases to cover what the guidelines did not. Most of these were based around user input parsing and validation. The backend was by far the easiest portion to write. It was basic File IO using structs and byte modification. I designed a struct that represented a module post-load, so that I could construct it on the heap and modify it's contents and attributes through passing a pointer. Long story short, I implemented C style classes in the form of structs and pointer arguments.

Post-Mortem

I got a 109% on the project by developing a command history. So it goes without saying that I am very pleased with how it went! This program is the most advanced and complicated C program that I have written to date. I learned a lot from it, including what not to do. I would provide the source code, but I need to pass that by the CS department first. Otherwise I could be leaking final project code to other students.

Made: July 2014 - August 2014 (on and off)

What is Polygon Playground?

Polygon Playground is an interactive album cover that I made for a good friend of mine, whose online handle is Zenuel. He is an independent musician and voice actor with many talents, and he had recently released a new free album. During that time, I was itching to make some low poly geometry based media. The cover art inspired me to make the album come to life using triangle particles, and so with his permission I did just that.

What did I do and how?

My application uses an external C/C++ audio interpretation library called ALF to measure and monitor the album's music live as it is streamed from Zenuel's web server. I wrote a wrapper class for ALF's audio class to add volume control to the sound channel because 100% volume is a bad thing. The music has to be streamed from a web server due to limitations put in place by ALF, but it lowers the file footprint significantly. The resulting data is used to animate various particles that stream across the screen. The particles are made from scratch using masking and shapes as a part of an experiment to push myself further. Overall I am very proud of what I made for my good friend Zenuel.

Post-Mortem

This project was a stubborn one, with many technical difficulties, such as how ALF refused to load music internally. It pushed me to think outside the box and in the end led to a better end user experience. While I was able to iron out most issues, one issue remains that I could not figure out. When a graphic layer fades in or out, particles stutter and performance drops. This is the biggest short coming that I wish to fix when capable.

Made: April 2012 - December 2013

What is the Junkie Framework?

Junkie is a framework for Adobe Air that is designed for aiding novice programmers in making simple 2D flash games for the desktop. The primary goal was to make the API as simple and verbose as possible, doing most of the work in the back-end of the code. The inspiration for this framework was a Swedish friend of mine whose hobby is retro game hacking. He often wanted to work with novice programmers in making original retro-esque games, but did not like how many frameworks worked. Junkie was supposed to fit into the niche that he and his friends desired.

What did I do and how?

The first goal was to make Junkie using only Flash Develop, a free eclipse based IDE for ActionScript. Doing so would allow anyone to use Junkie for free without reliance on Flash. This was the biggest and most complex thing that I had ever done, and thus required many rewrites. Most classes took nearly 20+ rewrites before I had a good bug free structure for my framework. This kind of hit or miss development cycle led to very well ironed out concepts and taught me to develop in chunks. I also developed a dynamic XML driven asset importer in order to give users freedom of file structure. The goal here was to allow developers any structure they wanted, with adequate power to define their assets using Junkie.

Post-Mortem

Junkie reached version 0.0.0.4 (pre-alpha) before being shelved in December of 2013. I started the project a year before my college education at RIT started. The reason that I shelved the project is because a proper college education taught me how poor some of my framework design was. While Junkie is functional and boasts some powerful classes, it was not malleable and open ended enough to be considered a plausible pursuit. The biggest mistake that I made was not commenting anything, I was a fresh programmer at the time and thought nothing of it. I now deeply regret doing such.

Documentation and Download

I generated Documentation using Adobe's ASDoc software. ASDoc generates the website and populates it with content that I declared in my .as files using /// comments. It also supports minimal html markup, which allowed me to provide images and charts.

The Junkie Source Code is available for download. It should work with most any recent version of Adobe Air and Flash, but I haven't used it in nearly 1.5 years. If it does not work feel free to contact me and I will do my best to aid you in using Junkie.

SpriteWork © NO-Body-The-Dragon with permissions

Made: October 2014 (5 days)

What is Asteroids in the Dark?

Asteroids in the Dark is a game that I made in Processing for my Interactive Media Development course at RIT. The assignment was to make an asteroids game, I took it a little bit further. I incorporated field of view with a headlight to add challenge to the game. While this makes the game a lot harder, the suspense provided a lot of fun for my classmates that played.

What did I do and how?

The headlight effect is just clever layering, no actual lighting is being rendered. The layers are as follows: background, ship/headlight, asteroids. This gives the illusion that you are playing in the dark. If you try to do a pacifist run, your headlight loses power. This forces the player into splitting asteroids up and causing chaos. The finer touches of the game are procedurally drawn asteroids using perlin noise and sound effects/music provided by Zenuel.

I am currently working with 4 other students in making this game a networked multiplayer game in DirectX. It is the focal design for our Game Graphics and Programming final project. The ship will be split into two players. One being the light wielding ship and the other the turret wielding ship. I am looking forward to exploring and expanding upon my original remix idea.

Post-Mortem

Overall I am very pleased with how this came out. The game is a little bit difficult, but I was aiming for the twitch gamer audience. The only portion of code that I want to revisit is the wrapping of the ship's headlight. It is a very hacky method of redrawing multiple headlights if certain logic conditions are met and does not cover all permutations.

Source Download

Made: November 2014 (2 days)

What is Fake Study App?

The fake study app is a product of a group project in a User Experience Design course at RIT. The project was to design and envision an app for smart phones that follows the rules of UX design. I was in charge of prototyping and final mock up images of "app screenshots" for the final submission.

What did I do and how?

One of my group mates found a really high quality template for a Galaxy S4 phone. I used this template, along with images of office supplies, to produce the images seen below. I used Photoshop CS6 to make the fake renders. The office supply images were obtained through royalty free stock photo websites and adjusted to fit the same lighting and depth as everything else in the app.

Post-Mortem

I am very proud of the images that I produced and they were among the best in the class. If I had time I would probably make some marginal edits to improve the image quality and theme, but they would be practically unnoticeable. As it stands, I consider these images complete.

Made: October 2014 (4 days)

What is Random Animation?

This was an assignment for my Interactive Media Development course at RIT. We were assigned the task of making an animation that consisted of different methods of random, by using Processing. The inspiration for my animation was the intro sequence from the SilverWing animated series, in which Shade SilverWing the bat was chasing a tiger moth.

What did I do and how?

I drew Shade Silverwing and the tiger moth using Adobe Illustrator CS6, they are loaded into the application as SVG files for high quality rescaling. The stars are positioned using Gaussian distribution and perlin noise produces the flickering effect. The remaining terrain is a simple perlin curve with various frequencies.

Post-Mortem

While I am very proud of my artwork and starry sky, there are a few things I wish were done better. Namely the random wander algorithm that the characters use to move with. It is very jerky and could probably be augmented with vectors and some form of pseudo friction.

Source Download

Made: November 2014 (3 days)

What is FFMQ Text Editor?

FFMQ stands for Final Fantasy Mystic Quest, an old SNES game. A friend of mine spends all of his free time hacking retro games and turning them into new games from the ground up. He decided to hack FFMQ one day and found that no-one had a utility for hacking the text in FFMQ due to it's extremely dense dictionary compression. I took this as a challenge, having no experience what so ever in hacking old SNES ROM files.

What did I do and how?

Having never hacked a ROM before I had to learn a lot about hex editing in a short time. By the end of my first day of work I was able to identify portions of the ROM that held images and some text using a rudimentary HEX editor. I was unable to find the text at the start of the game so I resorted to ROM corruption, the act of randomly editing HEX using an algorithm. This technique led me to the first word in the game, where I manually tested all HEX values from 00 to FF. From here I wrote a very basic translator in C# that translated English into the HEX that FFMQ would recognise.

Post-Mortem

I made this utility for my friend who is a known ROM hacker, so it's interface and work flow rely heavily on knowing what you are doing. The utility requires that you know what text you are changing and that you know how to replace the HEX in a HEX editor. The dictionary that I compiled also has lots of guesswork and untested HEX values. As it stands, it is only useful if you are an advanced hacker and are able to correct dictionary mistakes in the dictionary file. I plan on revisiting this utility some day and polishing it up for public use so that others may use it as well.

Source Download