Hi there! I am Jacob Barbulescu, a 2nd year Computer Science Undergraduate at Stevens Institute of Technology.
This website is to show off the various projects and interests I've pursued throughout my time at college.
I hope you enjoy these as much as I do!
Video games are my passion, and building games of my own has been a wonderful journey.
Starting in high school, I taught myself how to use game engines such as Unity and Game Maker Studio, and I even made my own engine via OpenGL!
I am a member of the Stevens Game Development Club, where I have participated in their game jams and learned a lot about how professionals make their games.
I work at it as much as I can outside of school, and I have made a few projects so far that I am proud of.
Oregon 83 is a project currently being developed by Professor Alex Wellerstein at Stevens Institute of Technology. The game is designed for the player to experience an alternate history America where the nuclear tensions in 1983 boiled over and the world entered a nuclear exchange.
The game combines heavy research of the time period with an homage to The Oregon Trail to make a historically accurate survival game where the player must cross the country to reach their brother's bunker in Oregon.
This project is the first large-scale video game that I have ever worked on, and it has taught me many unique lessons.
My work on the project was with the audio team. I not only contributed to the team by making music and sound effects myself, but also by helping to implement the audio in the game engine.
The game uses a custom-built Javascript engine, meaning that it was up to the audio team to organize the audio system in the code. We eventually settled on FMOD, a third party software meant to allow game developers to implement dynamic audio.
By setting up audio events and parameters to control those events, we could abstract the code behind playing the proper audio at the right time to a simple changing-of-variables for the programmers. This also allowed us to experiment with dynamic audio systems. For example, we drafted a general travel theme that would change based on which companions you had in your party.
The most important lesson that I learned from this project was the value of organization.
The audio team alone had 11 people in it, and so I thought production would be easy. However, the opposite was true.
That many people working on the same project lead to clashing ideas, redundant work, and a general lack of direction.
One of the most important contributions that I made to the project wasn't any of the music that I made or the FMOD system that I implemented, but this:
I helped to create a list of all of the music and sound effects that we absolutely needed for the project, ranging from car engine noises to the menu theme. I then made an FMOD event for each piece of audio that we needed and shared it with the team.
Now, instead of simply working on whatever they thought was worth doing, the team had a clear, managable list of individual tasks to work through.
This significantly improved the workflow of the team, as now team members were able to work on the project and feel confident that what they were doing was effective.
Although the project is still under development, I am extremely grateful to work on a video game of a larger scale. It taught me many valuable lessons about video game development that will stick with me for the rest of my career.
I learned the importance of organization, how to work within a larger team, and how to communicate with others to make sure that everyone worked towards one unified vision.
Deck Thrower was made for the first Stevens Game Development Club's Game Jam that I participated in.
I had 48 hours to build the game based on the theme they gave (Unusual Weapon).
I was able to finish the game by the deadline and got 2nd place in the entire jam!
I made all of the game's assets myself during the jam.
Some time after the jam, I decided to polish up the game into a more completed state.
I added art, sound, and music, added a main menu, and also squashed many bugs.
I'm proud of the game that it has become.
Click the image to play it in the browser. Simply use WASD to move and Left Click to shoot a card. Scroll or use numkeys to choose your card.
Fruity Catcher was the first game that I ever fully completed.
Although it is simple, it took over a month to develop simply because I was teaching Unity to myself as I made it.
This game is a fruit catcher game, where the player must move around the ground to catch fruit falling from a tree.
However, I also added bombs and powerups to make things more exciting!
The powerups range from making the player bigger to slowing down gravity to having everything spawn in faster!
Every asset in the game, from the sprites to the music, is entirely made by me.
One of the largest challenges of the game was organization.
Even something as simple as keeping score required a lot of work to keep everything organized.
I eventually learned to use game managers to keep every aspect of the game modular and abstracted.
Rather than have my collision code also apply the powerup when the player picks up one, it simply asks the powerup manager to do so.
Rather than have my menu screen handle the transition to the main game, I simply had my menu manager do the work itself.
I eventually submitted this game to the Computer and Console Gaming Society and the Stevens Game Development Club's gaming tournament.
This event had many students on my campus come together and compete to earn in the best scores in games developed by the Stevens Game Development Club.
It was fun and very rewarding to see a whole group of people play my game and get very competitive over it!
Click the image to play it in the browser. Simply use A and D or left arrow and right arrow to move and catch the fruit!
Coding has been a passion in my life since my Freshman year of high school.
Covid was still keeping us all trapped indoors, so I decided on a whim to learn Python, and I just kept going from there.
Through both school and personla projects, I have been developing my knowledge on programming constantly
Hold down these buttons to mess with the cube.
In a project for my Computer Architecture and Organization course at Stevens Institute of Technology, I was assigned with creating a custom CPU from scratch.
Using Logism Pro, I was able to make a CPU with 4 registers, an accessible RAM for data, and a display to show values.
I also created an Assembly language that could be compiled into binary code and be executed by the CPU.
It was a fun challenge creating as much functionality as possible with basic instructions. I assigned only 16 bits to each instruction, yet still had an addition, subtraction, loading, storing, displaying, and setting function for a user to implement in their programs. The CPU allowed for both the use of 2 registers or a register and a 4-bit immediate number for its instructions, and the user could even display register values or immediate numbers.
The CPU also had a RAM that was accessible by the program. Register values could be stored at specified addresses in the RAM, and data could also be retrieved from the RAM and stored in registers. The instructions for a program were stored in a separate RAM, and a program counter would automatically iterate through the stored instructions until it reach an empty instruction. At that point, the CPU would automatically stay at that empty instruction to end the program.
The user would be able to write an assembly program, then compile it using a compiler that I wrote in Python. The compiler converted a custom .barb assembly file into a hexadecimal image readable by the CPU, and the compiler allowed for comments, whitespace, and empty lines.
I also made a manual for the CPU to help others understand and write programs for it. It gets into the grittier details of how the CPU works and how one can write, compile, and run code for it. Feel free to give it a read by downloading the manual.
I was able to make the CPU, assembly language, and compiler in a day, and I am very proud of the result.
I've spent a fair bit of time just writing custom programs for the CPU and watching it do its thing. Assembly becomes a lot more fun when you're the one who designed it!
I was an involved environmental activist at my high school, and so I was invited to join the Climate Reality NJ Youth Chapter.
After talking about my coding hobby, they quickly arranged for me to build a website for their chapter.
Effectively, the website was meant to be a database full of articles for teachers and students. Teachers would be given learning plans and student would be given educational reading on environmental issues. The most difficult part was this: every member had to be able to go onto the website, write an article, and post it onto the website to be accessed. I had to find a secure yet user-friendly way for my teammates to write these articles with, and this took me some time to figure out.
I eventually settled on TinyMCE, a rich text editor than can easily be implemented into a website. A teammate could go onto an article creation page, use TinyMCE to write the article (including content such as images and videos), add a title, tags, etc., then send it to the server as an html file. The server would then take this html file and store it in the porper folder (There was a folder tree of teachers and students, and each tree was separated into grade levels). Now, a user could go onto the site and search for an article using keywords and filters for user-type and grade level. The website would automatically find every relevant article and list them out for the user to enter. When clicked, the user would be brought to the corresponding article.
The website was eventually fully finished and hosted, and my team immediately began using to create and post their resources. Altough the website is no longer online, I am still proud of the contribution that I made to the Climate Reality project.
The first website I ever made was for a friend. He offered to pay me some cash to make him a calendar website, so I immediately got to work learning how to even make a website.
He effectively wanted to be able to add events to an online calendar (like Google Calendar), except everybody who went on the website accessed and modified the same calendar. Although the website was simple, sending user input to the server, storing it, then later retrieving it was a big challenge for me to learn. I eventually came up with a solution using Node.js involving using a manifest text file to store the events, then the server would read this text file and send the events to the user.
The user was able to add an event, specifying its name, date, time, location, and description, and this would be sent and stored in the server. The user could then view a month or a day. The month would show a list of days with events in them, and this would have a brief look at the events. The user could also look at a specific day, and here they would find more details on each event. Lastly, the user could delete any event, making the calendar fully modifiable.
It worked after 2 weeks, and I had officially finished my first coding commission!
Music has always been a large part of my life from childhood.
I started off by playing the piano and eventually trombone, but in high school I evolved from playing music to making music.
Using FL Studio, I have been creating song after song over the years, slowly honing my skills.
I challenge myself to work in a variety of genres, and I always make my own music for the video games that I develop.
This song was a challenge I gave myself to make a song entirely out of samples.
I used Natalie Cordet's Cover of Take Five as my base.
I also used various sound effects and voxes that I've collected over the years.
The most fun part was taking the original cover which is in 5/4 time and making it into a 4/4 song. It really makes the song feel enitrely different from it's origin!
This song was a challenge for me to only use MIDI instruments for my song.
I wanted a beach aesthetic for my song, and I was inspired by early 2000s racing games.
The hardest part was making the MIDI instruments sound fuller. Although it matched the retro game aesthetic, I used a fair bit of post processing to make the instruments really pop.
This was one of the songs I made for the Oregon 83 Project that I was a member of.
The game has an 8-bit style, which made for an interesting challenge in conveying emotion with simple sounds.
The most fun part was making the instruments myself. I started with basic sound waves such as sine waves and square waves and combined them with post processing to create unique instruments.
My vision was a somber yet hopeful feeling, and I feel that I accomplished it with this song.
This was a song that I made for the main menu of a racing game I started to develop.
I wanted a calm song that still had a driving beat (no pun intended).
This was another song for the racing game I was developing at the time.
I was still experimenting with the theme of the game, and this song was branching towards a more high energy game than Rooftops was made for.
My favorite part about the song is the strings. Although it seems like a small addition, they transformed the song into the exact early 2000s style that I wanted.
This song came from me being bored one Sunday afternoon and deciding to make something fun for myself.
The most challenging yet interesting part of the song was having the two different "phases" of the song mesh. I wanted to give the listener a sense of breaking through the clouds during the transitions, going from dark and heavy to light and airy.
This song was also the first one where I used automation clips to enhance my sound, and it really helped me to make more dynamic music.
Sky High was the first song where I truly dived into FL Studio's audio mixer and patches.
Fine tuning the instruments into exactly what I wanted and even spacing them across the stereo not only enchanced the song, but gave me a stronger sense of balance with my music.
This was one of the first songs that I ever made using FL Studio, and it's what motivated me to stick with making music.
I didn't even know what mixing meant or how to add effects to the instruments, so I spent a long time finding instruments that sounded good from the getgo.
Although the process behind it was very rough, I am still happy with how this song came out in the end. It's definitely one of my more unique pieces!