Leviathan
Role: Lead Developer · C++ · Dart · Vulkan · ImGui
Leviathan is a modular, cross-platform game engine that I've been developing in
my free time. I've developed this engine from scratch using C++ with Vulkan as the
rendering backend and ImGui-based frontend graphics. The engine has a layered
architecture, users must create layers and push them to the layer stack to run
rendering commands and respond to events. Leviathan has been designed with extensibility
and explicit control in mind.
Initially I began development of Leviathan on my own, but as the project has grown in
scale I brought in my friend
Brayden Graham to help me create Leviathan. We're working on Leviathan in a private GitHub
repository and using Discord to coordinate development. I consider Leviathan proprietary, so I
have removed the Git history to provide a public snapshot of the repository for this portfolio.
Feel free to use this snapshot of Leviathan however you want.
Leviathan is still in early development. Many features and systems have not been created yet.
The renderer is still very basic. For example, features such as textures are not supported yet.
The physics engine has not been created yet and the structure of the audio engine is still being
discussed. Many aspects of the engine's structure will change in the future as we get further
along in development.
The README.md file in the top directory of the project provides instructions on how
to build and run the engine I'll summarize them here:
-
On Linux and MacOS the engine assumes you're using GCC or Clang as your compiler. Ensure you
already have GCC or Clang installed before continuing.
-
On Windows the engine assumes you're using MSVC as your compiler. Ensure you already have it
installed before continuing. If you do not have MSVC installed the easiest way to install it
is to through the Visual Studio IDE:
-
If you don't have Visual Studio installed:
-
Follow this link
to download the Visual Studio installer.
-
Run the Visual Studio installer.
-
While running the Visual Studio installer you'll be prompted to add workloads be sure to add
the "Desktop development with C++" workload, this will install MSVC along with Visual
Studio.
-
If you already have Visual Studio installed, but you don't have MSVC installed you'll need to modify
your Visual Studio installation to include the "Desktop development with C++" workload:
-
Open Visual Studio.
-
On the tool bar at the top of the window select Tools > Get Tools and Features.
-
You may be prompted to update the Visual Studio installer before continuing. If you are prompted then
update the Visual Studio installer before continuing.
-
You will see a list of your Visual Studio installations navigate to whichever installation you're
going to be using for C++ development and select Modify.
-
You will be prompted to modify the workloads of your installation, be sure to add the
"Desktop development with C++" workload. This will install MSVC along with updating your
installation of Visual Studio with your new "Desktop development with C++" workload.
Now that you've ensured you have the proper compiler for your system you can build the engine. We've
included a Dart script called Bootstrap.dart that will fetch third party dependencies then
build and run the engine. You simply need to run it and if prompted to confirm third party installations
select yes. To run the script ensure you have Dart
installed. Then open a terminal and navigate into the base directory of the Leviathan repository and then
run the script.
Linux/Mac:
dart run ./scripts/Bootstrap.dart
Windows:
dart run .\scripts\Bootstrap.dart
The script may take a while to run. Fetching Git submodules typically takes the most time. When the build
finishes the script will run the application. The application will display a rotating sphere on screen with
an ImGui menu to modify the amount of horizontal and vertical rings the sphere has and an ImGui menu reporting
the current FPS of the window.
You can rerun the Bootstrap script whenever you want to run the application as long as no source files were
modified the build won't also rerun.
If you want you can modify the code in Client/src/ClientApp.cpp to display something else. The
rotating sphere is just a demo, you can render anything you want. You just need to create a vertex buffer,
create an index buffer for that vertex buffer, create a vertex array from the buffers you created, then submit
your vertex array to the renderer once per frame. Be sure your camera is positioned correctly so you can see the
object that you're rendering. Of course you'll need to rebuild the engine if you modify the code, fortunately all you
have to do is rerun the Bootstrap script and the engine will rebuild automatically. Read the comments in the code and
the documentation to know how to work with Leviathan's API.
It should be noted that the documentation, like the rest of the engine, is still a work in
progress so some information in the documentation may be outdated.
There are two different ways I've provided for you to download the repository in the links below:
- Click the "GitHub" link below to view the repository on GitHub and clone it.
- Click the "Download" link below to download a zip file containing the repository.
Deck Designer
Role: Developer · Typescript · Tauri · React · SQLite · Swagger
Deck Designer is the project I worked on for my Capstone at the University of Utah. Capstone projects
are done in groups of four. I've worked on this project with Joshua Beatty, Justin Zhu, and Lucas Jones.
Deck Designer is an application for streamlining the design of card games. It provides tools to quickly
and efficiently design your own card game. More specifically, Deck Designer is used to design the cards
in a card game.
Deck Designer was coded in Typescript and built using Tauri. React was utilized to build the UI of Deck
Designer. All projects created in Deck Designer all saved locally to SQL databases in the user's APPDATA
directory. The SQL databases were created using SQLite. The reason project's are saved locally is so that
Deck Designer can be used entirely offline, but we do have server's that users can use to back up and share
their projects with other users. We used Swagger to program those servers.
My role in the project was working on the SQL databases that user's projects were saved to. I planned and
created the structure for the project databases. Then I created a user friendly API that the rest of my team
could use to create new project databases, modify a project's database, delete a project database, etc. The
API, I created, was structured with low-level functions that acted as Typescript wrappers around SQL commands
and higher-level functions that utilized these low-level functions to do more complex tasks. These higher-level
functions are the functions that my team called in their code, while the low-level functions were used exclusively
by me.
I programmed a website for Deck Designer (using HTML, CSS, and Javascript) that goes into more detail about the
application. The website is hosted on my CADE account at the University of Utah, if the university decides to
delete my CADE account (because I'm no longer a student there) then the website won't work. Fortunately, as of the
time I'm writing this the website is still up.
The links I've included below don't include any source code, it's just binaries and installer files. The reason for
this is I only own 25% of Deck Designer's IP (the project's IP is divided evenly among my team), so I can't provide
the source code without their permission and we've been out of contact since graduation. So you won't be able to
view the source code, but you will be able to install Deck Designer and try it for yourself.
The links below contain a link to the Deck Designer website, a link tutorial videos, and the installer files for each
platform supported by Deck Designer (Linux, MacOS, and Windows). I've included instructions on how to install and run
Deck Designer for each of these platforms:
-
For more information about Deck Designer click the "Website" link below to view the Deck Designer website. The
website includes all the other resources that I also link belowed and has more information about Deck Designer, but as
I said above there's a possibility the website will be taken down, so just in case the Deck Designer website is taken
down the other links I've included are to resources that the site has (tutorials and download links).
-
To learn how to use Deck Designer click the "Tutorials" link below to view a playlist of YouTube videos that each
show a brief tutorial on how to use a feature of Deck Designer. These videos are on the website, but I'm putting them here
in case the website is taken down.
-
To install Deck Designer for Debian distributions of Linux (such as Ubuntu) click the "Linux (.deb)" link below to
download the Debian installation package for Deck Designer. Installing the file is simple:
-
After downloading the Debian installation package file open a terminal and navigate to the
directory the file has been downloaded to.
-
Run the following command to install Deck Designer:
sudo apt install ./deckdesigner_0.1.0_amd64.deb
-
Then run Deck Designer:
-
To install Deck Designer for Red Hat distributions of Linux (such as Fedora) click the "Linux (.rpm)" link below
to download the Red Hat installation package for Deck Designer. Installing the file is simple:
-
After downloading the Red Hat installation package file open a terminal and navigate to the
directory the file has been downloaded to.
-
Run the following command to install Deck Designer:
sudo dnf install ./deckdesigner-0.1.0-1.x86_64.rpm
-
Then run Deck Designer:
-
To install Deck Designer for any Linux distribution click the "Linux (.AppImage)" link below to download
the portable Linux software package for Deck Designer. Unlike other download links this is not an installation file
this is the binary for Deck Designer packaged in a way that it can be run on any Linux system. I'd recommend only
downloading the AppImage if you're running a Linux platform that isn't a Debian distro or a Red Hat distro. Here's
how to run the AppImage file:
-
After downloading the AppImage file open a terminal and navigate to the directory the AppImage has been
downloaded to.
-
Give the AppImage file executable privileges by running chmod:
chmod a+x deckdesigner_0.1.0_amd64.AppImage
-
You may need to install additional programs to run AppImages on your computer. For example, I'm running Ubuntu,
so I needed to install FUSE to run AppImages. Apparently other Linux distros come with FUSE already installed,
but Ubuntu doesn't, so I ran this command to install FUSE:
sudo apt install libfuse2
Your system may require you to install FUSE as well or maybe you'll need to install other programs to run AppImage
files the process may vary among different Linux distros. You'll just need to troubleshoot it if you aren't able
to immediately run the AppImage after giving it executable privileges.
-
Run the AppImage file and Deck Designer should start up:
./deckdesigner_0.1.0_amd64.AppImage
-
Optionally you can move the file into one of your PATH directories or put the file in a directory and add that
directory to your PATH so that you can easily run the AppImage file from any directory you're currently working
in by just running:
deckdesigner_0.1.0_amd64.AppImage, instead of needing to run:
path/to/DeckDesigner-AppImage/deckdesigner_0.1.0_amd64.AppImage every time you want to run Deck
Designer.
You should be able to find instructions for how to do this for your specific Linux distribution online.
-
To install Deck Designer for MacOS click the "MacOS" link to download the Apple Disk Image (.dmg) file for Deck
Designer. This file should work on most versions of MacOS. Installing the file is simple:
-
After downloading the Apple Disk Image (.dmg) file open your Finder application and go to the directory you've
downloaded the Apple Disk Image (.dmg) file to (most likely the file will be in your Downloads folder).
-
Double click the file to mount it as a virtual disk. The file's name will show up in Finder's sidebar and a
window should open up, displaying the content of the Apple Disk Image (.dmg) file.
-
In the window that opened up drag the application from that window to /Applications to install Deck Designer.
-
Eject the Application Disk Image (.dmg) virtual disk by clicking the eject button for the Application Disk Image
(.dmg) file on the sidebar of Finder.
-
Now you can safely delete the Application Disk Image (.dmg) file.
-
You can run Deck Designer in several different ways:
-
In Finder you can go to
/Applications, find Deck Designer and double click the app.
-
You can open up Spotlight Search by pressing Command(⌘) + Spacebar then search the app's name (deckdesigner).
Then double click Deck Designer when you've found it in the search results.
-
You could ask Siri to open Deck Designer for you.
-
To install Deck Designer for Windows click the "Windows" link to download the Microsoft Installer file for Deck Designer.
Running the MSI file is simple:
-
Open File Explorer and navigate to the directory you've installed the MSI file to (most likely it will be in your
Downloads directory).
-
Double click the file to start the installation wizard.
-
Follow the instructions in the installation wizard to install Deck Designer.
-
To run Deck Designer you can either double click the desktop shortcut that you should have been prompted to create
while following the instructions in the installation wizard or if you don't have the desktop shortcut press
Windows Key + R to open the "Run" box then type in the app's name (deckdesigner).