Melodic's Tech Corner.

The Abyssian Language

Cover Image for The Abyssian Language
MelodicAlbuild
MelodicAlbuild

Crafting Abyssian: A Keystone of Project Oblivion

At the end of my last This Week in Oblivion roundup, I mentioned that I had an exciting post about a keystone project. That keystone is Abyssian, the custom programming language I’m developing specifically for Project Oblivion.

Building a programming language from scratch isn’t something I originally planned for, but as OblivionEngine grew, I realized that existing languages weren’t quite fitting my vision. So, I decided to create my own—one that’s designed from the ground up to support the needs of the project. This post takes you behind the scenes of that process.

Why Project Oblivion Needs Its Own Language

Project Oblivion is a massive undertaking, and scripting plays a critical role in how everything functions. While I could have used an existing language, none of them fit the use case I have before me. That’s where Abyssian comes in. By designing a custom language, I get full control over the syntax, features, and performance—ensuring that it’s tailor-made for OblivionEngine. This really shines when it comes to things like NPCs, which I am writing into the language itself, and hooking inside of the engine.

Designing Abyssian

The goal with Abyssian is to create a language that is powerful yet easy to work with. I’ve taken inspiration from various languages, listing them all would take hours, focusing on making the syntax clean and readable while still allowing for all the pieces I need in the engine. I mainly focused on basic scripting capabilities for this "1.0" release, but that doesn't mean that it won't be massively expanded as I go. It is worth noting that the OblivionEngine directly references Abyssian so if something changes in Abyssian it shows in its own repository.

What about C#?

That is obviously a loaded question, and I would like to think I've answered that above but let me break it down.

  • OblivionEngine - Being Written in C#, Will interpret Abyssian and use it in the engine itself.
  • Project Oblivion - Being Written in Abyssian, Is the Game that runs on the OblivionEngine.
  • Abyssian - Being Written in C++, Is the coding language for Project Oblivion.

Ok, that's a lot of information packed into a single list so pardon my dust. The OblivionEngine is being designed expressly to run Project Oblivion Hence the name, get it? which begs the question, why not just write it all in C#? The simple answer is that building it all in C# makes me want to leverage functions and calls that are built directly into things like the rendering API for the OblivionEngine. It is safer, and will be better for the game if the game itself is written outside of the engine, and the engine just handles making that code run.

Overcoming the Challenges

Creating a programming language from scratch isn’t easy. I spent more hours then I am willing to admit just troubleshooting why assignment was failing. If you're curious, it was because I didn't allow spaces before the equal sign, I do now. I could list out the battles I fought with Abyssian but they are many, and long, so I will omit that piece.

Should you make your own language?

No. You probably shouldn't. There are a million languages out there that will do exactly what you need them to. It would have saved me hours and hours of programming to just buck up and build Lua into the engine, and to be fair that isn't off the table quite yet. However, if you're dead set on making your own language I wish you the best of luck, and my DMs are open if you ever have questions.

What’s Next?

This is just the beginning for Abyssian. Now that the first milestone is here, the next steps include refining the syntax, improving performance, and adding even more scripting capabilities tailored for Project Oblivion.

If you’re curious, you can check out Abyssian on GitHub:
🔗 Abyssian Repository

And if you missed last week’s This Week in Oblivion, where I first teased this post, you can catch up here:
🔗 This Week in Oblivion - 3/26/2025

I’ll keep sharing progress as Abyssian evolves, so stay tuned for more behind-the-scenes insights!

Cheers,
Melodic