+1 778 791 2870 | firstname.lastname@example.org
A collection of my old games, work, and school projects since 2016.
I saw a Craigslist ad seeking a writer for a video game in development. Being 17, I was eager to join the industry so I replied. I never wrote for a video game before (not counting my own games) but I applied anyway citing my narrative forming skills and passion for video games.
The poster of the ad replied pretty quick and I found myself in an in-person interview a few days later with the Creative Director. He had a story already from a table-top campaign he made years back and wanted to turn it into a video game. He already had a developer in denmark making a tech demo, and had recently hired a concept artist and a level designer/3D artist.
I started out just simply taking down the story as the Creative Director told it to me. I later broke up the narrative into its constituent arcs and plots, drew additional connections and removed redundant scenes that had no place in the story. Then I began ideating missions and levels surrounding major plot points. I developed core characters further, adding or removing features that would compliment them in the medium of a video game.
In meetings I contributed to the visual iterations of the characters since I spent a lot of time writing them. The concept artist and I exchanged ideas back and forth until we were happy with each other’s ideas. The Creative Director and I worked with the level designer as he roughly mapped out the introductory and important levels.
Later, when we were happy with the overall plot, I started working on a morality balancing system the Creative Director had in mind. He wanted choices the player made in the game to affect the world by having a sort of “karma tracker”. If the player caused harm to innocent people or destroyed things without reason, his negative karma would increase. The player would be feared among citizens, so they could have their way, but they were unlikely to receive aid as a result.
This wasn’t intended to impede progress or lend to a certain playstyle over another, but was meant to build atmosphere beyond textual / verbal information. People would cower in fear if you walked through town after burning the town previous, or welcome you with loving praise if you went above and beyond to help peasants.
I built a small prototype in Processing, a Java standalone library and IDE, and simulated good and bad interactions to see how easily the scale of morality would tip to one side or the other. We tweaked numbers based off this model and we sent our results to the developer to implement when he was ready.
The Creative Director spoke to a number of producers and other interested parties for funding. He wasn’t happy with the control they demanded, but was encouraged by the prices they were offering. He wanted to make the best game possible, and was in no rush to make it, so he decided to start a Kickstarter campaign. I suggested we ask $15,000, but the Creative Director was confident that we could ask for a lot more and still receive the funding. He set our campaign goal at $150,000. We pushed as hard as we could on social media and other digital marketing platforms but only made it to $16,695.
We tried to continue development on the game despite having no funding, but the team slowly lost interest or moved on to better opportunities. The last nail in the coffin was our (only) developer landing a job at a AAA studio and leaving us. We wish him,and everyone else on the team well as they pursue their dreams elsewhere!
I learned a lot about what goes into making a 3D RPG game, and the various challenges that indie studios experience. I wore many hats during the development of the game and I loved every bit of it, right until the end.
A short proof of concept for a game design class.
We had a week to make it from scratch, and we had to implement some strict deliverables to get better marks.
I'm not really happy with how it turned out. It is rushed, not balanced, and kinda ugly, but I'm still proud of what we could do given the situation.
Try it out!
Beat the clock, lexicographer style.
A short game made using the www.dictionaryapi.com API. Find synonyms for the words as fast as possible!
A cute local two player game where you dodge falling blocks and try to outlast your opponent. Some even make holes in the floor so watch out. Power Ups will drop from the sky randomly. Try to last the full 10 minutes!
Made a mobile game for Android in Android Studio for a class. We weren’t really supposed to make a game given Android Studio’s limitations, but I made one with what we had to work with.
This game tests your reaction time. Similar to whack-a-mole, when a seagull appears on the screen, shake your phone like a gun recoiling to shoot it! Don’t shoot too early or late, or you’ll lose points. Don’t lose points by letting seagulls get away either.
Made a short reaction time based game where you fight increasingly harder enemies. You get power ups at random which slow time down or make your enemies slower.
I based the main mechanic off of the old cowboy gun duels. 2 people shoot at each other, seeing who draws first. A false start will disqualify you. It’s probably too easy for the average game player, but I had to make it beatable by the people marking it.
An exploration in an alternative health/stamina resource management system.
This project was a good example of know the rules before you break them. I wanted to make a system where you couldn’t just horde a resource without repercussions, which ended up just making a bad player experience.
Playing off the idea that the character you control is a cactus, if you drank too much water (which restored health and stamina) your health and stamina levels would drop dangerously low. This simply caused the player to almost never have full health or stamina, due to the fear of losing it all after consuming too much.
Otherwise, It’s a standard 2D 8-directional hack n’ slash.
The Flyer Wizard was an old design tool which let customers make flyers using our product pictures. The UI was poorly done and it lacked a ton of features, which I fixed and added. The tool received instant positive feedback and kept users on our site longer, as intended.
It was a challenge to work with our API to generate the results I needed for new features to work, because it was highly customized for the legacy tool. The same goes for account specific actions like saving and loading old flyers, uploading images, etc.
The tool saw around 40 unique users a month compared to the 1 or 2 users previous.
The website manager was bogged down with cropping whitespace and resizing product images. I developed a Python script that automated this process, which also uploaded the images once finished to our customer image library and respective product pages on the production site.
It was challenging working with the image processing library OpenCV, as it used a lot of math and functions I didn't understand. Admittedly, it took a lot of trial and error to make the script perform accurate edits.
The script saved the website manager weeks of work per batch, as it would edit tens of hundreds of images in a few seconds.
Python / OpenCV / numpy
The Director of Technology wanted to replace all laptops with Raspberry Pis running thin remote desktop sessions connected to virtual machines centralized on one Windows server. That way, physical repairs were cheaper and anything to do with software could be managed from one place.
The Pi's would need to support dual monitor display, local printer sharing, shared audio, and VLAN for the remote desktop session.
Performance and drivers presented a huge issue. It took many tweaks, reinstallations, and optimizations to get it running. Thankfully, a lot of separate solutions were posted online, which I consolidated into one working installation.
This upgrade saved us around $450 per unit replaced (around 20 units currently) and freed up time spent fixing individual machines.
UEFI / ARM64
The marketing department was overwhelmed with requests from customers needing groups of product images for download. The working solution was to give them access to an FTP server, which was hard to use and very insecure. I created a front end interface for customers to add images to their "cart" and download them in batches.
Usually, if an open source solution exists, I would use it. This project required many custom functions which I had to make from scratch.
The tool allowed us to reallocate the FTP server space for more sensible uses and totally eliminated any insecurities, along with making the entire process easier to use by all.
HTML / CSS / JSON (from API) / MVC / jQuery / Ajax
The Director of Technology wanted to create a streamlined mobile application for registered customers to quickly place orders with. Our main website isn't too mobile friendly, which made a stripped down app version make sense.
The team was not familiar with mobile development, so small tweaks they couldn't outsource I assisted with in office.
Android Studio / Java / XML
The company's website had many features that were designed without mobile platforms in consideration.
I styled and upgraded many components to be more accessible in general, but in particular improved the mobile experience navigating our website.
CSS / MVC / Magento
Using an HTTP scraper, I replicated the server environment of an online classifier tool for race detection, then reverse engineered the tool to expose data to a python script.
This project was for a joke competition, but was a rather challenging thing to make. It was really hacked together (for example, using a OCR program to read an output when we couldn't get data from one program to another) but was a fun nonetheless!
Coded the UI and some core functionality for a drawing robot.
The robot used the image processing library OpenCV to convert images into coordinates, which were parsed by another script into instructions for servo motors. It then "painted" the picture with a sharpie on the end of its arm (3 bar linkage).
After months of designing and programming, it's natural to expect some emotional attachment to the robots 💗 #FAScompetition @SIAT_SFU @SFUBeedie pic.twitter.com/C5ngmT2XHr— SFU Applied Sciences (@FAS_SFU) November 18, 2017
Congratulations to Team Drawesome (a team of FAS, @SIAT_SFU and @SFUBeedie students) for winning the 2nd place prize! #FAScompetition pic.twitter.com/oOo8gFZ1fV— SFU Applied Sciences (@FAS_SFU) November 18, 2017
Python / OpenCV / Guidata
Coded the app and assembled/designed the hardware for a winning Hackathon product.
App was built with Processing (a Java library), which interfaced with an arduino device.
Time restricted competitions like this really teach you a lot in a short amount of time, and favour creative/quick and dirty solutions over perhaps the best optimized or scalable option.
I appreciate this aspect of the event the most as it really forces you to just go with what works and what can be built in a short amount of time.
This smart lamp built at #lumohacks can help people with SAD by tracking sleep patterns and simulating different levels of sunlight pic.twitter.com/1hACMRSFDu— Major League Hacking (@MLHacks) September 17, 2017
Processing / Arduino
Designed and coded a chatroom app for IOS/Android.
We were tasked with creating a solution for first responders dealing with difficult psychological trauma. After some research, we applied aspects of group therapy and healthy conversation to a chatroom concept. First responders could join groups based on career or location, anonymously, and talk to each other about anything they wanted to talk about.It was challenging working with React Native for the first time, especially in the rushed setting of a hackathon. Thankfully, React Native's extensive documentation helped.
We also implemented the Algolia search engine to work with a local database on device.
Coded a relaxing math game for android.
Not much in the way of groundbreaking design or sophisticated programming but it performed well as a time passer and taught me a lot about API calls and asynchronous tasks.
Built with Android Studio in Java and utilized an online random number generator API.
Android Studio / Java / XML