ethan macdonald

Profile picture
Game Engine programmer

Experienced with Vulkan, C++, and writing NEON and SSE optimized code.
(check out my blog post on SIMD!)

About Me

I am a programmer from Nova Scotia, Canada, currently waiting for my graduation for a Bachelor of Computer Science. I spend most of my time working on my FPS game Foxtrot and its custom game engine, as well as Hyperion Engine with my brother.

I am passionate about graphics and low-level programming, and experienced with writing optimized C++.

Skills

  • Developed game engines, programming languages, operating systems as well as virtual machines for personal projects, and to expand my learning.
  • Very experienced with Godot engine, and used Unity for game development courses in university.
  • Experienced with many programming languages including C++, C#, Zig, and Golang.
  • Work experience as a full-stack web developer, as well as developing Unreal Engine 4 and 5 plugins and tools.

Projects

Foxtrot

Foxtrot is an in-development FPS with a custom game engine written in C++. It has a Vulkan backend, a custom memory pooling system, multithreaded asset loading and integrates with Jolt physics. All objects here are loaded from a project file defined in a custom config language, and streamed in asynchronously.

As well, Foxtrot has an in-house scripting language and a SSE+AVX and Arm NEON optimized math library.

Movement and the basic in-game editor

Sponza test scene rendered in Foxtrot

Sponza test scene

Satellite Visualization

For a final project in a visualization course I was tasked with building an interactive visualization using openly accessible data.

Future positions and velocities are estimated with SGP4 and precomputed into keyframes. These keyframes are interpolated and combined with data loaded from satellite catalogues.

This visualization was written in about a month using C++, Raylib and OpenGL.

Visualization of debris and satellites

Godot Water Demo

Tried to recreate the aesthetic of deep-sea underwater camera footage, and learned a ton of 3d modelling tricks here. This was built using the C# backend for Godot and did some cool lighting tricks by faking a layered fog, and had a few different movement systems for swimming, ladders, and seated.

Showing off movement types, particles and water effects

Godot FPS Movement

Using Godot, I worked on a horror game movement system in C#.

This has head bob, click and drag to open doors a variable amount, sprint, jump and a basic player attachment system.

Movement demo with interactable objects and a crude blockout

Hyperion Engine

A modern Vulkan game engine. Supports multithreaded rendering, VCT, DDGI, raytracing, and much more.

Built with my brother Andrew(@ajmd17), we are currently working towards building a game with Hyperion.

demo of the realtime DDGI in Hyperion engine

Andrew showing off the realtime DDGI system in Hyperion

Acheron Engine

Acheron was a 3D OpenGL game engine written completely in C99. This was my main project while I was going through high school, and helped me learn a lot about 3d rendering.

Acheron was a way to learn more about how game engines work internally as well as learn how to structure large projects in C.

multiple point lights around a normal mapped cube in a train tunnel

multiple point lights around a normal mapped cube in a train tunnel.

Other things

3d modelling

Using Blender and Substance Painter, I modelled and textured this pistol using multiple real-life image references to make a modular pistol for using in games.

This sits at about 760 triangles total, with the whole GLTF model (including textures) being about 410 KiB.

an image of a modelled pistol

Peach Language

For a programming language jam from Repl.it in 2020, me and Andrew(@ajmd17) wrote PEACH in less than a week.

PEACH is a prototypical interpreted language that is written in Python. Shown in the clip here is a mandlebrot fractal visualizer that I wrote completely in PEACH (link!).

Unfortunately, the original submission thread has been removed over the years.

(slowly) generating the mandlebrot fractal in PEACH

X16 Macro Assembler

A custom CPU architecture, macro assembler, and VM written as a challenge to write the smallest assembler and VM that is still easy to program for.

For this project, the assembler is programmed in Python, and the VM is programmed in C. It runs blazingly fast, and has a bunch of cool features!

Demo of the VM running with a slow step speed printing "Hello, World"!

demo of the assembler language

Full program written in the custom assembler language

Belter

Belter was a fun side project to try out Dart and Golang. It was an audio-focused social network that allowed you to share audio clips with friends.

Demo of Belter on macOS