My friends and I love gathering around the table to play some Magic: The Gathering's multiplayer Commander format. In this version of the game, we get to build awesome, fun, and sometimes janky decks that we can truly call our own. While nothing can compare to the paper format of MTG, Covid-19—along with friends relocating to other states—has made it impossible for our group to continue our tradition.
Fortunately for us, Tabletop Simulator supports custom decks that allow you to import cards and play with them just as you would in real life! The only challenge for us is creating the custom deck objects. For a while, our group used the card importer at frogtown.me, but the non-user-friendly interface and having to wait for the creator to upload new cards frustrated me.
I knew that I could make improvements over the existing application, especially in the interface design. So after a week of brushing up on Angular, navigating the Scryfall API, and learning how to import objects into Tabletop Simulator, I had a working application that I could share with my friends! Notable features that I added are:
The live CMD + R application. You can play around with the embedded version here, or check out the full application here.
To try it out, paste the following sample into the deck list text area:
1 Arixmethes, Slumbering Isle2 Island1 Command Tower1 Kiora, Master of the DepthsThis project was especially fun to work on because it truly meant something to me and my friends. We still use my application to play games, and it allows us to connect, even across multiple states and a pandemic.
I've always enjoyed pixel art for its preciseness and thoughtfulness. Each pixel matters and has to be carefully placed. Often, if you zoom in on a pixel image, the chosen pixels and colors look out of place and strangely arranged. But when you see the big picture (literally), everything fits as it should. The brain has an amazing way of blending the pixels into a recognizable, realistic looking image, even if the reality is far from it.
I've attempted pixel art in the past, with only a little bit of success. I could occasionally make something worth showing others, but most of the time they were small pieces. This time, I was determined to create a whole scene of pixel art.
My first pixel art scene, a small house in a field.
My second pixel art scene, including more detailed objects. Bushes can be tricky to pull off without making them look noisy. The key is to use repeated detail patterns to create texture.
Following tutorials and spending hours refining and moving pixels around, I was able to create my first pixel art scenes! I was thrilled with how they turned out, and I wanted to make more right away. One of the most important lessons I learned was how crucial the color palette is to pixel art. One of the reasons I could never get it quite right in the past was because I chose the colors based on what I thought looked good. In reality, there's a lot of strategy that goes into it!
Moving forward, I decided to put some of my skills together to create a pixel art game. Brainstorming with my boyfriend, a chemical engineer who loves alchemy, we came up with a potion-making simulation/management game. We took all of the concepts that we liked in other games and started planning them into our game.
The premise of our game is as follows: the player is the owner of small potion shop. Using their trusty cauldron, they concoct batches of simple potions using local ingredients to sell to brave adventurers. As demand increases, it falls on you to expand your operation, hiring workers to operate the potion assembly line and fine-tuning your recipes to produce the best quality potions and beat out the competition.
Each recipe in the game will be presented to the player; however, only the most skilled potion masters can tweak these recipes to be the best. Every step in the potion making process will have several parameters the player can alter to affect the quality of the potion being made. Hire a potion researcher to help determine the exact conditions for your perfect potion through actual methods used by real chemical engineers!
Though I've moved on to start other projects instead of this one, I believe this concept has great potential. I definitely want to revisit this one in the future!
An empty potion bottle. Empty glass can be tricky in pixel art! Without using transparency you need to make sure it doesn't look opaque.
A green potion. Even though it's just a recolor of the empty bottle, the colors you choose are important.
This cauldron that I designed for the game is a good example of how important color palette is. A normal grey cauldron would look very bland against the rest of the game, so I used a desaturated purple. It has the same effect, but with more life!
My first animated pixel art, using Aseprite. One of my goals with this game is to make the animations interesting to watch, so once you've set up your potion assembly line, you can sit back and enjoy the show.
As part of my Computer Science curriculum at NC State, I took the Advanced Game Projects course, which requires groups of students to pitch, design, develop, and hopefully release a video game from start to finish. For this project, I joined a team of 4 students to create a game titled Scatterbrained. The idea for this game was pitched by a classmate, and I applied to work on the team.
The premise of Scatterbrained is that the protagonist has lost their mind and must go find it. Pieces of the player's mind are scattered throughout the game, and the player must go retrieve them by solving puzzles and basic platforming. Each piece that the player collects will grant them a certain brain functionality. For example, the player might be colorblind at the start of the game, but receive color vision upon collecting the corresponding part of their brain.
To keep things interesting, our goal is to make the game non-linear. This means the player may choose to collect the pieces of the brain in whichever order they wish, granting them a different path through the game each time, using different strategies to solve puzzles.
This project is was completed in Spring 2018, although it is not currently available to the public. Many of the features we hoped to include were not feasible with the timeline, but we are extremely happy with the final result. The various gameplay styles we implemented gave us a grasp on many techniques in the Unreal Engine, including cel shading, multiple POVs, and level design in those multiple POVs.
I pursued this project because of an interest in genetic algorithms, which I learned about in both my Intro to Game Design and Foundations of Computer Music classes. In Game Design, we discussed how genetic algorithms can be used to produce unique behavior in AI, in which children can learn from the experiences of their parents. On the other hand, my Computer Music class explored the ways in which genetic algorithms can be used to create unique music from the characteristics of existing music.
After learning about the awesomeness of genetic algorithms and their multiple applications to computer science, I was eager to explore ways in which I could employ genetic algorithms in my video game career. Another key inspiration for this project was the Evolution Simulator YouTube series, which used genetic algorithms to show how simple creatures can evolve over time to accomplish a simple task.
Similar to the Evolution Simulator, my project aims to simulate the evolution of creatures given simple parameters. Each person (shown in purple) must eat to survive. When a person becomes hungry, they actively seek out either a plant (green) or an animal (red) to eat, based on a meat preference variable. If the person is not strong enough to defeat an animal, or if they eat a poisonous plant, they are killed and will not have children. Those who are able to survive to the next generation are given the opportunity to pass on their traits to offspring. In order for the people to adapt, they alter their meat preference based on past success when eating. For instance, every time a person eats an animal, they have a chance to increase their meat preference, which is passed on to offspring. Eating a plant, however, has the inverse effect. I also included a chance for any stat to be mutated when reproducing, to ensure some level of realism.
After collecting data for several generations, I export the statistics to a text file, which excel imports and analyzes. Shown below are some sample graphs, displaying the population of the world, along with the diet preferences of each generation. While I still have a lot of work to do and more statistics to pull, I was excited to see trends among diet preference and food population! In general, when there are a lot of carnivores, animal populations decline. This animal population decline will eventually cause the carnivores to recede, and herbivores will generally be prominent for a short period.
There were several paths I could have taken this project, including adding many more attributes and statistics to analyze. One specific feature I would like to implement is a Knowledge stat. This stat would determine if a person is able to identify a poisonous plant and avoid eating it. I hope to see a trend of higher intelligence among herbivores. I would also be interested to see if carnivores also develop this trend, since they would be consuming fewer plants.
Overall, I am thoroughly enjoying exploring genetic algorithms, and I hope to be able to use them in the future to create more intelligent and responsive AI in video games.
This past semester, I enrolled in Intro to Computer Graphics as a part of my Video Game Development Concentration at NC State. I am really enjoying the class, and my interest in the material inspired me to experiment with some 3D modeling and rendering software. I downloaded Blender and watched hours of YouTube videos, where I learned how to model, shade, and even texture my scenes. I started out small, doing a few images of mirror spheres and coffee cups. I was surprised and delighted at the success I was having!
First creation in Blender: a metal ball floating above a checkerboard plane, with a green light.
Recreation of sphere model with better materials, lighting, and an HDRI (skybox).
First attempt at a coffee mug. The model itself was pretty poor, but I was pleased with the material and lighting.
Second attempt at a coffee mug. Much better model, as well as more realistic material, lighting, and environment. It looks almost real!
Both of these attempts were created only a week apart! I was extremely happy with the improvement shown from such a short amount of time. From here, I decided to pursue a bigger project: I wanted to model the rings my boyfriend and I bought for each other. With a much more complicated shape and texture, I was a little skeptical of my ability to produce a realistic image. However, after about a week of hard work, research, and endless tiny changes, I produced a result that I was indescribably proud of.
Only a few months ago, I never could have imagined I'd create something as beautiful and realistic as this image. Especially not in just 2 weeks! Because of this small side project, I will be taking more computer modeling courses at NC State next semester, and I might even decide to pursue modeling (at least in part) as a career.
Playing music has been a huge part of my life ever since taking piano lessons in second grade. I've learned new instruments and genres along the way, and even played in several musicals. Below are some samples of my personal compositions, which are a fusion of electronic and piano music.
In addition to composing original music, I enjoy pursuing small arrangement projects, such as the video below. I arranged the popular video game piece Corridors of Time from Chrono Trigger for the clarinet, soprano saxophone, and piano.